Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcvs2svn <>2014-12-18 23:30:12 +0300
committercvs2svn <>2014-12-18 23:30:12 +0300
commit7e72fffc61b29325ac5a875c5318cdf2f294ae28 (patch)
tree21635bf002197fe261c776d70f866b65aad82975
parent0615b4bb5f38a738377d4856aed167f0ab6aa52d (diff)
This commit was manufactured by cvs2svn to create branch 'newlib-2_2_0'.newlib-2_2_0
Sprout from master 2014-12-18 20:30:11 UTC Jeff Johnston <jjohnstn@redhat.com> '' Cherrypick from cygnus 1999-05-03 07:29:06 UTC Richard Henderson <rth@redhat.com> '19990502 sourceware import': README config/mt-d30v config/mt-ospace etc/add-log.el etc/add-log.vi etc/configbuild.ein etc/configbuild.fig etc/configbuild.jin etc/configbuild.tin etc/configdev.ein etc/configdev.fig etc/configdev.jin etc/configdev.tin makefile.vms Delete: djunpack.bat include/COPYING include/COPYING3 include/ChangeLog include/ChangeLog-9103 include/MAINTAINERS include/alloca-conf.h include/ansidecl.h include/aout/ChangeLog include/aout/adobe.h include/aout/aout64.h include/aout/ar.h include/aout/dynix3.h include/aout/encap.h include/aout/host.h include/aout/hp.h include/aout/hp300hpux.h include/aout/hppa.h include/aout/ranlib.h include/aout/reloc.h include/aout/stab.def include/aout/stab_gnu.h include/aout/sun4.h include/bfdlink.h include/binary-io.h include/bout.h include/cgen/ChangeLog include/cgen/basic-modes.h include/cgen/basic-ops.h include/cgen/bitset.h include/coff/ChangeLog include/coff/ChangeLog-9103 include/coff/alpha.h include/coff/apollo.h include/coff/arm.h include/coff/aux-coff.h include/coff/ecoff.h include/coff/external.h include/coff/go32exe.h include/coff/h8300.h include/coff/h8500.h include/coff/i386.h include/coff/i860.h include/coff/i960.h include/coff/ia64.h include/coff/internal.h include/coff/m68k.h include/coff/m88k.h include/coff/mcore.h include/coff/mips.h include/coff/mipspe.h include/coff/or32.h include/coff/pe.h include/coff/powerpc.h include/coff/rs6000.h include/coff/rs6k64.h include/coff/sh.h include/coff/sparc.h include/coff/sym.h include/coff/symconst.h include/coff/ti.h include/coff/tic30.h include/coff/tic4x.h include/coff/tic54x.h include/coff/tic80.h include/coff/w65.h include/coff/we32k.h include/coff/x86_64.h include/coff/xcoff.h include/coff/z80.h include/coff/z8k.h include/demangle.h include/dis-asm.h include/dwarf2.def include/dwarf2.h include/dyn-string.h include/elf/ChangeLog include/elf/ChangeLog-9103 include/elf/aarch64.h include/elf/alpha.h include/elf/arc.h include/elf/arm.h include/elf/avr.h include/elf/bfin.h include/elf/common.h include/elf/cr16.h include/elf/cr16c.h include/elf/cris.h include/elf/crx.h include/elf/d10v.h include/elf/d30v.h include/elf/dlx.h include/elf/dwarf.h include/elf/epiphany.h include/elf/external.h include/elf/fr30.h include/elf/frv.h include/elf/h8.h include/elf/hppa.h include/elf/i370.h include/elf/i386.h include/elf/i860.h include/elf/i960.h include/elf/ia64.h include/elf/internal.h include/elf/ip2k.h include/elf/iq2000.h include/elf/lm32.h include/elf/m32c.h include/elf/m32r.h include/elf/m68hc11.h include/elf/m68k.h include/elf/mcore.h include/elf/mep.h include/elf/metag.h include/elf/microblaze.h include/elf/mips.h include/elf/mmix.h include/elf/mn10200.h include/elf/mn10300.h include/elf/moxie.h include/elf/msp430.h include/elf/mt.h include/elf/nios2.h include/elf/openrisc.h include/elf/or32.h include/elf/pj.h include/elf/ppc.h include/elf/ppc64.h include/elf/reloc-macros.h include/elf/rl78.h include/elf/rx.h include/elf/s390.h include/elf/score.h include/elf/sh.h include/elf/sparc.h include/elf/spu.h include/elf/tic6x-attrs.h include/elf/tic6x.h include/elf/tilegx.h include/elf/tilepro.h include/elf/v850.h include/elf/vax.h include/elf/vxworks.h include/elf/x86-64.h include/elf/xc16x.h include/elf/xgate.h include/elf/xstormy16.h include/elf/xtensa.h include/fibheap.h include/filenames.h include/floatformat.h include/fnmatch.h include/fopen-bin.h include/fopen-same.h include/fopen-vms.h include/gcc-c-fe.def include/gcc-c-interface.h include/gcc-interface.h include/gdb/ChangeLog include/gdb/callback.h include/gdb/fileio.h include/gdb/gdb-index.h include/gdb/remote-sim.h include/gdb/signals.def include/gdb/signals.h include/gdb/sim-arm.h include/gdb/sim-bfin.h include/gdb/sim-cr16.h include/gdb/sim-d10v.h include/gdb/sim-frv.h include/gdb/sim-h8300.h include/gdb/sim-lm32.h include/gdb/sim-m32c.h include/gdb/sim-ppc.h include/gdb/sim-rl78.h include/gdb/sim-rx.h include/gdb/sim-sh.h include/gdbm.h include/getopt.h include/hashtab.h include/hp-symtab.h include/ieee.h include/leb128.h include/libiberty.h include/longlong.h include/lto-symtab.h include/mach-o/ChangeLog include/mach-o/arm.h include/mach-o/codesign.h include/mach-o/external.h include/mach-o/loader.h include/mach-o/reloc.h include/mach-o/x86-64.h include/md5.h include/nlm/ChangeLog include/nlm/alpha-ext.h include/nlm/common.h include/nlm/external.h include/nlm/i386-ext.h include/nlm/internal.h include/nlm/ppc-ext.h include/nlm/sparc32-ext.h include/oasys.h include/objalloc.h include/obstack.h include/opcode/ChangeLog include/opcode/ChangeLog-9103 include/opcode/aarch64.h include/opcode/alpha.h include/opcode/arc.h include/opcode/arm.h include/opcode/avr.h include/opcode/bfin.h include/opcode/cgen.h include/opcode/convex.h include/opcode/cr16.h include/opcode/cris.h include/opcode/crx.h include/opcode/d10v.h include/opcode/d30v.h include/opcode/dlx.h include/opcode/h8300.h include/opcode/hppa.h include/opcode/i370.h include/opcode/i386.h include/opcode/i860.h include/opcode/i960.h include/opcode/ia64.h include/opcode/m68hc11.h include/opcode/m68k.h include/opcode/m88k.h include/opcode/metag.h include/opcode/mips.h include/opcode/mmix.h include/opcode/mn10200.h include/opcode/mn10300.h include/opcode/moxie.h include/opcode/msp430-decode.h include/opcode/msp430.h include/opcode/nios2.h include/opcode/np1.h include/opcode/ns32k.h include/opcode/or32.h include/opcode/pdp11.h include/opcode/pj.h include/opcode/pn.h include/opcode/ppc.h include/opcode/pyr.h include/opcode/rl78.h include/opcode/rx.h include/opcode/s390.h include/opcode/score-datadep.h include/opcode/score-inst.h include/opcode/sparc.h include/opcode/spu-insns.h include/opcode/spu.h include/opcode/tahoe.h include/opcode/tic30.h include/opcode/tic4x.h include/opcode/tic54x.h include/opcode/tic6x-control-registers.h include/opcode/tic6x-insn-formats.h include/opcode/tic6x-opcode-table.h include/opcode/tic6x.h include/opcode/tic80.h include/opcode/tilegx.h include/opcode/tilepro.h include/opcode/v850.h include/opcode/vax.h include/opcode/xgate.h include/os9k.h include/partition.h include/plugin-api.h include/progress.h include/safe-ctype.h include/sha1.h include/simple-object.h include/som/ChangeLog include/som/aout.h include/som/clock.h include/som/internal.h include/som/lst.h include/som/reloc.h include/sort.h include/splay-tree.h include/symcat.h include/timeval-utils.h include/vms/ChangeLog include/vms/dcx.h include/vms/dmt.h include/vms/dsc.h include/vms/dst.h include/vms/eeom.h include/vms/egps.h include/vms/egsd.h include/vms/egst.h include/vms/egsy.h include/vms/eiaf.h include/vms/eicp.h include/vms/eidc.h include/vms/eiha.h include/vms/eihd.h include/vms/eihi.h include/vms/eihs.h include/vms/eihvn.h include/vms/eisd.h include/vms/emh.h include/vms/eobjrec.h include/vms/esdf.h include/vms/esdfm.h include/vms/esdfv.h include/vms/esgps.h include/vms/esrf.h include/vms/etir.h include/vms/internal.h include/vms/lbr.h include/vms/prt.h include/vms/shl.h include/vtv-change-permission.h include/xregex.h include/xregex2.h include/xtensa-config.h include/xtensa-isa-internal.h include/xtensa-isa.h winsup/COPYING winsup/CYGWIN_LICENSE winsup/ChangeLog winsup/Makefile.common winsup/Makefile.in winsup/README winsup/acinclude.m4 winsup/aclocal.m4 winsup/autogen.sh winsup/c++wrap winsup/ccwrap winsup/config.guess winsup/config.sub winsup/configure winsup/configure.ac winsup/configure.cygwin winsup/cygserver/ChangeLog winsup/cygserver/ChangeLog.64bit winsup/cygserver/Makefile.in winsup/cygserver/README winsup/cygserver/aclocal.m4 winsup/cygserver/autogen.sh winsup/cygserver/bsd_helper.cc winsup/cygserver/bsd_helper.h winsup/cygserver/bsd_log.cc winsup/cygserver/bsd_log.h winsup/cygserver/bsd_mutex.cc winsup/cygserver/bsd_mutex.h winsup/cygserver/client.cc winsup/cygserver/configure winsup/cygserver/configure.ac winsup/cygserver/cygserver-config winsup/cygserver/cygserver.cc winsup/cygserver/cygserver.conf winsup/cygserver/msg.cc winsup/cygserver/process.cc winsup/cygserver/process.h winsup/cygserver/pwdgrp.cc winsup/cygserver/sem.cc winsup/cygserver/setpwd.cc winsup/cygserver/shm.cc winsup/cygserver/sysv_msg.cc winsup/cygserver/sysv_sem.cc winsup/cygserver/sysv_shm.cc winsup/cygserver/threaded_queue.cc winsup/cygserver/threaded_queue.h winsup/cygserver/transport.cc winsup/cygserver/transport.h winsup/cygserver/transport_pipes.cc winsup/cygserver/transport_pipes.h winsup/cygserver/woutsup.h winsup/cygwin/ChangeLog winsup/cygwin/ChangeLog-1995 winsup/cygwin/ChangeLog-1996 winsup/cygwin/ChangeLog-1997 winsup/cygwin/ChangeLog-1998 winsup/cygwin/ChangeLog-1999 winsup/cygwin/ChangeLog-2000 winsup/cygwin/ChangeLog-2001 winsup/cygwin/ChangeLog-2002 winsup/cygwin/ChangeLog-2003 winsup/cygwin/ChangeLog-2004 winsup/cygwin/ChangeLog-2005 winsup/cygwin/ChangeLog-2006 winsup/cygwin/ChangeLog-2007 winsup/cygwin/ChangeLog-2008 winsup/cygwin/ChangeLog-2009 winsup/cygwin/ChangeLog-2010 winsup/cygwin/ChangeLog-2011 winsup/cygwin/ChangeLog-2012 winsup/cygwin/ChangeLog-2013 winsup/cygwin/ChangeLog.64bit winsup/cygwin/DevNotes winsup/cygwin/Makefile.in winsup/cygwin/ROADMAP winsup/cygwin/acconfig.h winsup/cygwin/aclocal.m4 winsup/cygwin/advapi32.cc winsup/cygwin/analyze_sigfe winsup/cygwin/assert.cc winsup/cygwin/autogen.sh winsup/cygwin/autoload.cc winsup/cygwin/automode.c winsup/cygwin/binmode.c winsup/cygwin/child_info.h winsup/cygwin/collate.h winsup/cygwin/common.din winsup/cygwin/config.h.in winsup/cygwin/configure winsup/cygwin/configure.ac winsup/cygwin/cpuid.h winsup/cygwin/crt0.c winsup/cygwin/ctype.cc winsup/cygwin/cxx.cc winsup/cygwin/cygerrno.h winsup/cygwin/cygheap.cc winsup/cygwin/cygheap.h winsup/cygwin/cygheap_malloc.h winsup/cygwin/cyglsa.h winsup/cygwin/cygmagic winsup/cygwin/cygmalloc.h winsup/cygwin/cygprops.h winsup/cygwin/cygserver.h winsup/cygwin/cygserver_ipc.h winsup/cygwin/cygserver_msg.h winsup/cygwin/cygserver_pwdgrp.h winsup/cygwin/cygserver_sem.h winsup/cygwin/cygserver_setpwd.h winsup/cygwin/cygserver_shm.h winsup/cygwin/cygthread.cc winsup/cygwin/cygthread.h winsup/cygwin/cygtls.cc winsup/cygwin/cygtls.h winsup/cygwin/cygwait.cc winsup/cygwin/cygwait.h winsup/cygwin/cygwin-cxx.h winsup/cygwin/cygwin-shilka winsup/cygwin/cygwin.ldif winsup/cygwin/cygwin.sc.in winsup/cygwin/cygwin_version.h winsup/cygwin/cygxdr.cc winsup/cygwin/cygxdr.h winsup/cygwin/dcrt0.cc winsup/cygwin/debug.cc winsup/cygwin/debug.h winsup/cygwin/devices.cc winsup/cygwin/devices.h winsup/cygwin/devices.in winsup/cygwin/dir.cc winsup/cygwin/dlfcn.cc winsup/cygwin/dll_init.cc winsup/cygwin/dll_init.h winsup/cygwin/dllfixdbg winsup/cygwin/dtable.cc winsup/cygwin/dtable.h winsup/cygwin/environ.cc winsup/cygwin/environ.h winsup/cygwin/errno.cc winsup/cygwin/exception.h winsup/cygwin/exceptions.cc winsup/cygwin/exec.cc winsup/cygwin/external.cc winsup/cygwin/fcntl.cc winsup/cygwin/fenv.cc winsup/cygwin/fhandler.cc winsup/cygwin/fhandler.h winsup/cygwin/fhandler_clipboard.cc winsup/cygwin/fhandler_console.cc winsup/cygwin/fhandler_dev.cc winsup/cygwin/fhandler_disk_file.cc winsup/cygwin/fhandler_dsp.cc winsup/cygwin/fhandler_fifo.cc winsup/cygwin/fhandler_floppy.cc winsup/cygwin/fhandler_mailslot.cc winsup/cygwin/fhandler_netdrive.cc winsup/cygwin/fhandler_nodevice.cc winsup/cygwin/fhandler_proc.cc winsup/cygwin/fhandler_process.cc winsup/cygwin/fhandler_procnet.cc winsup/cygwin/fhandler_procsys.cc winsup/cygwin/fhandler_procsysvipc.cc winsup/cygwin/fhandler_random.cc winsup/cygwin/fhandler_raw.cc winsup/cygwin/fhandler_registry.cc winsup/cygwin/fhandler_serial.cc winsup/cygwin/fhandler_socket.cc winsup/cygwin/fhandler_tape.cc winsup/cygwin/fhandler_termios.cc winsup/cygwin/fhandler_tty.cc winsup/cygwin/fhandler_virtual.cc winsup/cygwin/fhandler_virtual.h winsup/cygwin/fhandler_windows.cc winsup/cygwin/fhandler_zero.cc winsup/cygwin/flock.cc winsup/cygwin/fork.cc winsup/cygwin/gcrt0.c winsup/cygwin/gendef winsup/cygwin/gendevices winsup/cygwin/gentls_offsets winsup/cygwin/glob.cc winsup/cygwin/glob_pattern_p.cc winsup/cygwin/globals.cc winsup/cygwin/gmon.c winsup/cygwin/gmon.h winsup/cygwin/grp.cc winsup/cygwin/heap.cc winsup/cygwin/heap.h winsup/cygwin/hires.h winsup/cygwin/hookapi.cc winsup/cygwin/how-autoload-works.txt winsup/cygwin/how-cygheap-works.txt winsup/cygwin/how-cygtls-works.txt winsup/cygwin/how-fhandlers-work.txt winsup/cygwin/how-signals-work.txt winsup/cygwin/how-spawn-works.txt winsup/cygwin/how-startup-shutdown-works.txt winsup/cygwin/how-to-debug-cygwin.txt winsup/cygwin/how-vfork-works.txt winsup/cygwin/i686.din winsup/cygwin/import/rexec.c winsup/cygwin/include/a.out.h winsup/cygwin/include/arpa/ftp.h winsup/cygwin/include/arpa/inet.h winsup/cygwin/include/arpa/nameser.h winsup/cygwin/include/arpa/nameser_compat.h winsup/cygwin/include/arpa/telnet.h winsup/cygwin/include/asm/byteorder.h winsup/cygwin/include/asm/socket.h winsup/cygwin/include/asm/types.h winsup/cygwin/include/attr/xattr.h winsup/cygwin/include/bits/endian.h winsup/cygwin/include/bits/wordsize.h winsup/cygwin/include/byteswap.h winsup/cygwin/include/cygwin/_types.h winsup/cygwin/include/cygwin/acl.h winsup/cygwin/include/cygwin/config.h winsup/cygwin/include/cygwin/core_dump.h winsup/cygwin/include/cygwin/cygwin_dll.h winsup/cygwin/include/cygwin/fs.h winsup/cygwin/include/cygwin/grp.h winsup/cygwin/include/cygwin/hdreg.h winsup/cygwin/include/cygwin/icmp.h winsup/cygwin/include/cygwin/if.h winsup/cygwin/include/cygwin/in.h winsup/cygwin/include/cygwin/in6.h winsup/cygwin/include/cygwin/in_systm.h winsup/cygwin/include/cygwin/ipc.h winsup/cygwin/include/cygwin/kd.h winsup/cygwin/include/cygwin/msg.h winsup/cygwin/include/cygwin/mtio.h winsup/cygwin/include/cygwin/rdevio.h winsup/cygwin/include/cygwin/sem.h winsup/cygwin/include/cygwin/shm.h winsup/cygwin/include/cygwin/signal.h winsup/cygwin/include/cygwin/socket.h winsup/cygwin/include/cygwin/sockios.h winsup/cygwin/include/cygwin/stat.h winsup/cygwin/include/cygwin/stdlib.h winsup/cygwin/include/cygwin/sys_time.h winsup/cygwin/include/cygwin/sysproto.h winsup/cygwin/include/cygwin/time.h winsup/cygwin/include/cygwin/types.h winsup/cygwin/include/cygwin/utmp.h winsup/cygwin/include/cygwin/version.h winsup/cygwin/include/cygwin/wait.h winsup/cygwin/include/dlfcn.h winsup/cygwin/include/elf.h winsup/cygwin/include/endian.h winsup/cygwin/include/err.h winsup/cygwin/include/error.h winsup/cygwin/include/fcntl.h winsup/cygwin/include/features.h winsup/cygwin/include/fenv.h winsup/cygwin/include/fnmatch.h winsup/cygwin/include/fts.h winsup/cygwin/include/ftw.h winsup/cygwin/include/getopt.h winsup/cygwin/include/glob.h winsup/cygwin/include/icmp.h winsup/cygwin/include/ifaddrs.h winsup/cygwin/include/inttypes.h winsup/cygwin/include/io.h winsup/cygwin/include/lastlog.h winsup/cygwin/include/libgen.h winsup/cygwin/include/limits.h winsup/cygwin/include/machine/elf.h winsup/cygwin/include/machine/stdlib.h winsup/cygwin/include/mapi.h winsup/cygwin/include/memory.h winsup/cygwin/include/mntent.h winsup/cygwin/include/monetary.h winsup/cygwin/include/mqueue.h winsup/cygwin/include/net/if.h winsup/cygwin/include/netdb.h winsup/cygwin/include/netinet/in.h winsup/cygwin/include/netinet/in_systm.h winsup/cygwin/include/netinet/ip.h winsup/cygwin/include/netinet/ip6.h winsup/cygwin/include/netinet/ip_icmp.h winsup/cygwin/include/netinet/tcp.h winsup/cygwin/include/netinet/udp.h winsup/cygwin/include/paths.h winsup/cygwin/include/poll.h winsup/cygwin/include/process.h winsup/cygwin/include/pthread.h winsup/cygwin/include/pty.h winsup/cygwin/include/regex.h winsup/cygwin/include/resolv.h winsup/cygwin/include/search.h winsup/cygwin/include/semaphore.h winsup/cygwin/include/stdint.h winsup/cygwin/include/sys/acl.h winsup/cygwin/include/sys/copying.dj winsup/cygwin/include/sys/cygwin.h winsup/cygwin/include/sys/dirent.h winsup/cygwin/include/sys/elf.h winsup/cygwin/include/sys/elf32.h winsup/cygwin/include/sys/elf64.h winsup/cygwin/include/sys/elf_common.h winsup/cygwin/include/sys/elf_generic.h winsup/cygwin/include/sys/file.h winsup/cygwin/include/sys/ioctl.h winsup/cygwin/include/sys/ipc.h winsup/cygwin/include/sys/kd.h winsup/cygwin/include/sys/lock.h winsup/cygwin/include/sys/mman.h winsup/cygwin/include/sys/mount.h winsup/cygwin/include/sys/msg.h winsup/cygwin/include/sys/mtio.h winsup/cygwin/include/sys/param.h winsup/cygwin/include/sys/poll.h winsup/cygwin/include/sys/procfs.h winsup/cygwin/include/sys/quota.h winsup/cygwin/include/sys/resource.h winsup/cygwin/include/sys/select.h winsup/cygwin/include/sys/sem.h winsup/cygwin/include/sys/shm.h winsup/cygwin/include/sys/smallprint.h winsup/cygwin/include/sys/socket.h winsup/cygwin/include/sys/soundcard.h winsup/cygwin/include/sys/statfs.h winsup/cygwin/include/sys/statvfs.h winsup/cygwin/include/sys/stdio.h winsup/cygwin/include/sys/strace.h winsup/cygwin/include/sys/sysinfo.h winsup/cygwin/include/sys/syslimits.h winsup/cygwin/include/sys/syslog.h winsup/cygwin/include/sys/sysmacros.h winsup/cygwin/include/sys/sysproto.h winsup/cygwin/include/sys/termio.h winsup/cygwin/include/sys/termios.h winsup/cygwin/include/sys/ttychars.h winsup/cygwin/include/sys/uio.h winsup/cygwin/include/sys/un.h winsup/cygwin/include/sys/utime.h winsup/cygwin/include/sys/utmp.h winsup/cygwin/include/sys/utsname.h winsup/cygwin/include/sys/vfs.h winsup/cygwin/include/sys/wait.h winsup/cygwin/include/sys/xattr.h winsup/cygwin/include/sysexits.h winsup/cygwin/include/syslog.h winsup/cygwin/include/termio.h winsup/cygwin/include/tzfile.h winsup/cygwin/include/utmpx.h winsup/cygwin/include/wait.h winsup/cygwin/init.cc winsup/cygwin/ioctl.cc winsup/cygwin/ipc.cc winsup/cygwin/kernel32.cc winsup/cygwin/lc_era.h winsup/cygwin/lc_msg.h winsup/cygwin/ldap.cc winsup/cygwin/ldap.h winsup/cygwin/lib/_cygwin_crt0_common.cc winsup/cygwin/lib/atexit.c winsup/cygwin/lib/crt0.h winsup/cygwin/lib/cygwin_attach_dll.c winsup/cygwin/lib/cygwin_crt0.c winsup/cygwin/lib/dll_entry.c winsup/cygwin/lib/dll_main.cc winsup/cygwin/lib/dso_handle.c winsup/cygwin/lib/libcmain.c winsup/cygwin/lib/premain0.c winsup/cygwin/lib/premain1.c winsup/cygwin/lib/premain2.c winsup/cygwin/lib/premain3.c winsup/cygwin/lib/pseudo-reloc-dummy.c winsup/cygwin/libc/arc4random.cc winsup/cygwin/libc/base64.c winsup/cygwin/libc/bsdlib.cc winsup/cygwin/libc/fnmatch.c winsup/cygwin/libc/fts.c winsup/cygwin/libc/ftw.c winsup/cygwin/libc/getopt.c winsup/cygwin/libc/inet_addr.c winsup/cygwin/libc/inet_network.c winsup/cygwin/libc/minires-os-if.c winsup/cygwin/libc/minires.c winsup/cygwin/libc/minires.h winsup/cygwin/libc/nftw.c winsup/cygwin/libc/rcmd.cc winsup/cygwin/libc/rexec.cc winsup/cygwin/libc/strfmon.c winsup/cygwin/libc/strptime.cc winsup/cygwin/libc/xsique.cc winsup/cygwin/libstdcxx_wrapper.cc winsup/cygwin/localtime.cc winsup/cygwin/lsearch.cc winsup/cygwin/malloc.cc winsup/cygwin/malloc_wrapper.cc winsup/cygwin/mcount.c winsup/cygwin/mcountFunc.S winsup/cygwin/miscfuncs.cc winsup/cygwin/miscfuncs.h winsup/cygwin/mkglobals_h winsup/cygwin/mkimport winsup/cygwin/mkstatic winsup/cygwin/mktemp.cc winsup/cygwin/mkvers.sh winsup/cygwin/mmap.cc winsup/cygwin/mmap_helper.h winsup/cygwin/mount.cc winsup/cygwin/mount.h winsup/cygwin/msg.cc winsup/cygwin/mtinfo.h winsup/cygwin/net.cc winsup/cygwin/netdb.cc winsup/cygwin/nfs.cc winsup/cygwin/nfs.h winsup/cygwin/nlsfuncs.cc winsup/cygwin/ntdll.h winsup/cygwin/ntea.cc winsup/cygwin/passwd.cc winsup/cygwin/path.cc winsup/cygwin/path.h winsup/cygwin/perprocess.h winsup/cygwin/pinfo.cc winsup/cygwin/pinfo.h winsup/cygwin/pipe.cc winsup/cygwin/poll.cc winsup/cygwin/posix_ipc.cc winsup/cygwin/profil.c winsup/cygwin/profil.h winsup/cygwin/pseudo-reloc.cc winsup/cygwin/pthread.cc winsup/cygwin/pwdgrp.h winsup/cygwin/quotactl.cc winsup/cygwin/random.cc winsup/cygwin/regex/COPYRIGHT winsup/cygwin/regex/cname.h winsup/cygwin/regex/engine.c winsup/cygwin/regex/regcomp.c winsup/cygwin/regex/regerror.c winsup/cygwin/regex/regex.3 winsup/cygwin/regex/regex.7 winsup/cygwin/regex/regex2.h winsup/cygwin/regex/regexec.c winsup/cygwin/regex/regfree.c winsup/cygwin/regex/utils.h winsup/cygwin/registry.cc winsup/cygwin/registry.h winsup/cygwin/regparm.h winsup/cygwin/release/1.7.10 winsup/cygwin/release/1.7.11 winsup/cygwin/release/1.7.12 winsup/cygwin/release/1.7.13 winsup/cygwin/release/1.7.14 winsup/cygwin/release/1.7.15 winsup/cygwin/release/1.7.16 winsup/cygwin/release/1.7.17 winsup/cygwin/release/1.7.18 winsup/cygwin/release/1.7.19 winsup/cygwin/release/1.7.20 winsup/cygwin/release/1.7.21 winsup/cygwin/release/1.7.22 winsup/cygwin/release/1.7.23 winsup/cygwin/release/1.7.24 winsup/cygwin/release/1.7.25 winsup/cygwin/release/1.7.26 winsup/cygwin/release/1.7.27 winsup/cygwin/release/1.7.28 winsup/cygwin/release/1.7.29 winsup/cygwin/release/1.7.30 winsup/cygwin/release/1.7.31 winsup/cygwin/release/1.7.32 winsup/cygwin/release/1.7.33 winsup/cygwin/release/1.7.34 winsup/cygwin/resource.cc winsup/cygwin/scandir.cc winsup/cygwin/sched.cc winsup/cygwin/sec_acl.cc winsup/cygwin/sec_auth.cc winsup/cygwin/sec_helper.cc winsup/cygwin/security.cc winsup/cygwin/security.h winsup/cygwin/select.cc winsup/cygwin/select.h winsup/cygwin/sem.cc winsup/cygwin/setlsapwd.cc winsup/cygwin/shared.cc winsup/cygwin/shared_info.h winsup/cygwin/shm.cc winsup/cygwin/signal.cc winsup/cygwin/sigproc.cc winsup/cygwin/sigproc.h winsup/cygwin/smallprint.cc winsup/cygwin/sortdin winsup/cygwin/spawn.cc winsup/cygwin/speclib winsup/cygwin/spinlock.h winsup/cygwin/strace.cc winsup/cygwin/strfuncs.cc winsup/cygwin/string.h winsup/cygwin/strsep.cc winsup/cygwin/strsig.cc winsup/cygwin/sync.cc winsup/cygwin/sync.h winsup/cygwin/syscalls.cc winsup/cygwin/sysconf.cc winsup/cygwin/syslog.cc winsup/cygwin/termios.cc winsup/cygwin/textmode.c winsup/cygwin/textreadmode.c winsup/cygwin/thread.cc winsup/cygwin/thread.h winsup/cygwin/timer.cc winsup/cygwin/times.cc winsup/cygwin/tls_pbuf.cc winsup/cygwin/tls_pbuf.h winsup/cygwin/tlsoffsets.h winsup/cygwin/tlsoffsets64.h winsup/cygwin/tmpbuf.h winsup/cygwin/tty.cc winsup/cygwin/tty.h winsup/cygwin/tz_posixrules.h winsup/cygwin/uinfo.cc winsup/cygwin/uname.cc winsup/cygwin/update-copyright winsup/cygwin/wait.cc winsup/cygwin/wchar.h winsup/cygwin/winbase.h winsup/cygwin/wincap.cc winsup/cygwin/wincap.h winsup/cygwin/window.cc winsup/cygwin/winf.cc winsup/cygwin/winf.h winsup/cygwin/wininfo.h winsup/cygwin/winlean.h winsup/cygwin/winsup.h winsup/cygwin/winver.rc winsup/cygwin/wow64.cc winsup/cygwin/wow64.h winsup/cygwin/x86_64.din winsup/doc/.cvsignore winsup/doc/ChangeLog winsup/doc/Makefile.in winsup/doc/README winsup/doc/Wishlist winsup/doc/aclocal.m4 winsup/doc/bodysnatcher.pl winsup/doc/configure winsup/doc/configure.ac winsup/doc/cygserver.xml winsup/doc/cygwin-api.xml winsup/doc/cygwin-ug-net.xml winsup/doc/cygwin.xsl winsup/doc/cygwinenv.xml winsup/doc/dll.xml winsup/doc/effectively.xml winsup/doc/faq-api.xml winsup/doc/faq-copyright.xml winsup/doc/faq-programming.xml winsup/doc/faq-resources.xml winsup/doc/faq-setup.xml winsup/doc/faq-using.xml winsup/doc/faq-what.xml winsup/doc/faq.xml winsup/doc/fhandler-tut.txt winsup/doc/filemodes.xml winsup/doc/fo.xsl winsup/doc/gcc.xml winsup/doc/gdb.xml winsup/doc/highlights.xml winsup/doc/legal.xml winsup/doc/logon-funcs.xml winsup/doc/misc-funcs.xml winsup/doc/new-features.xml winsup/doc/ntsec.xml winsup/doc/ov-ex-unix.xml winsup/doc/ov-ex-win.xml winsup/doc/overview.xml winsup/doc/path.xml winsup/doc/pathnames.xml winsup/doc/posix.xml winsup/doc/programming.xml winsup/doc/setup-env.xml winsup/doc/setup-files.xml winsup/doc/setup-locale.xml winsup/doc/setup-maxmem.xml winsup/doc/setup-net.xml winsup/doc/specialnames.xml winsup/doc/textbinary.xml winsup/doc/ug-info.xml winsup/doc/using.xml winsup/doc/utils.xml winsup/doc/windres.xml winsup/doc/xidepend winsup/install-sh winsup/lsaauth/ChangeLog winsup/lsaauth/ChangeLog.64bit winsup/lsaauth/Makefile.in winsup/lsaauth/aclocal.m4 winsup/lsaauth/configure winsup/lsaauth/configure.ac winsup/lsaauth/cyglsa-config winsup/lsaauth/cyglsa.c winsup/lsaauth/cyglsa.din winsup/lsaauth/cyglsa64.def winsup/testsuite/ChangeLog winsup/testsuite/Makefile.in winsup/testsuite/README winsup/testsuite/aclocal.m4 winsup/testsuite/config/default.exp winsup/testsuite/configure winsup/testsuite/configure.ac winsup/testsuite/cygrun.c winsup/testsuite/libltp/include/dataascii.h winsup/testsuite/libltp/include/databin.h winsup/testsuite/libltp/include/file_lock.h winsup/testsuite/libltp/include/forker.h winsup/testsuite/libltp/include/open_flags.h winsup/testsuite/libltp/include/pattern.h winsup/testsuite/libltp/include/random_range.h winsup/testsuite/libltp/include/rmobj.h winsup/testsuite/libltp/include/search_path.h winsup/testsuite/libltp/include/str_to_bytes.h winsup/testsuite/libltp/include/string_to_tokens.h winsup/testsuite/libltp/include/test.h winsup/testsuite/libltp/include/tlibio.h winsup/testsuite/libltp/include/usctest.h winsup/testsuite/libltp/include/write_log.h winsup/testsuite/libltp/lib/dataascii.c winsup/testsuite/libltp/lib/databin.c winsup/testsuite/libltp/lib/datapid.c winsup/testsuite/libltp/lib/forker.c winsup/testsuite/libltp/lib/get_high_address.c winsup/testsuite/libltp/lib/libtestsuite.c winsup/testsuite/libltp/lib/open_flags.c winsup/testsuite/libltp/lib/parse_opts.c winsup/testsuite/libltp/lib/pattern.c winsup/testsuite/libltp/lib/rmobj.c winsup/testsuite/libltp/lib/search_path.c winsup/testsuite/libltp/lib/str_to_bytes.c winsup/testsuite/libltp/lib/string_to_tokens.c winsup/testsuite/libltp/lib/tst_res.c winsup/testsuite/libltp/lib/tst_sig.c winsup/testsuite/libltp/lib/tst_tmpdir.c winsup/testsuite/libltp/lib/write_log.c winsup/testsuite/winsup.api/checksignal.c winsup/testsuite/winsup.api/crlf.c winsup/testsuite/winsup.api/cygload.cc winsup/testsuite/winsup.api/cygload.exp winsup/testsuite/winsup.api/cygload.h winsup/testsuite/winsup.api/devdsp.c winsup/testsuite/winsup.api/devdsp_okay.h winsup/testsuite/winsup.api/devzero.c winsup/testsuite/winsup.api/iospeed.c winsup/testsuite/winsup.api/known_bugs.tcl winsup/testsuite/winsup.api/ltp/access01.c winsup/testsuite/winsup.api/ltp/access03.c winsup/testsuite/winsup.api/ltp/access04.c winsup/testsuite/winsup.api/ltp/access05.c winsup/testsuite/winsup.api/ltp/alarm01.c winsup/testsuite/winsup.api/ltp/alarm02.c winsup/testsuite/winsup.api/ltp/alarm03.c winsup/testsuite/winsup.api/ltp/alarm07.c winsup/testsuite/winsup.api/ltp/asyncio02.c winsup/testsuite/winsup.api/ltp/chdir02.c winsup/testsuite/winsup.api/ltp/chdir04.c winsup/testsuite/winsup.api/ltp/chmod01.c winsup/testsuite/winsup.api/ltp/chmod02.c winsup/testsuite/winsup.api/ltp/chown01.c winsup/testsuite/winsup.api/ltp/close01.c winsup/testsuite/winsup.api/ltp/close02.c winsup/testsuite/winsup.api/ltp/close08.c winsup/testsuite/winsup.api/ltp/creat01.c winsup/testsuite/winsup.api/ltp/creat03.c winsup/testsuite/winsup.api/ltp/creat09.c winsup/testsuite/winsup.api/ltp/dup01.c winsup/testsuite/winsup.api/ltp/dup02.c winsup/testsuite/winsup.api/ltp/dup03.c winsup/testsuite/winsup.api/ltp/dup04.c winsup/testsuite/winsup.api/ltp/dup05.c winsup/testsuite/winsup.api/ltp/execl01.c winsup/testsuite/winsup.api/ltp/execle01.c winsup/testsuite/winsup.api/ltp/execlp01.c winsup/testsuite/winsup.api/ltp/execv01.c winsup/testsuite/winsup.api/ltp/execve01.c winsup/testsuite/winsup.api/ltp/execvp01.c winsup/testsuite/winsup.api/ltp/exit01.c winsup/testsuite/winsup.api/ltp/exit02.c winsup/testsuite/winsup.api/ltp/fchdir01.c winsup/testsuite/winsup.api/ltp/fchdir02.c winsup/testsuite/winsup.api/ltp/fchmod01.c winsup/testsuite/winsup.api/ltp/fchown01.c winsup/testsuite/winsup.api/ltp/fcntl02.c winsup/testsuite/winsup.api/ltp/fcntl03.c winsup/testsuite/winsup.api/ltp/fcntl04.c winsup/testsuite/winsup.api/ltp/fcntl05.c winsup/testsuite/winsup.api/ltp/fcntl07.c winsup/testsuite/winsup.api/ltp/fcntl07B.c winsup/testsuite/winsup.api/ltp/fcntl08.c winsup/testsuite/winsup.api/ltp/fcntl09.c winsup/testsuite/winsup.api/ltp/fcntl10.c winsup/testsuite/winsup.api/ltp/fork01.c winsup/testsuite/winsup.api/ltp/fork02.c winsup/testsuite/winsup.api/ltp/fork03.c winsup/testsuite/winsup.api/ltp/fork04.c winsup/testsuite/winsup.api/ltp/fork06.c winsup/testsuite/winsup.api/ltp/fork07.c winsup/testsuite/winsup.api/ltp/fork09.c winsup/testsuite/winsup.api/ltp/fork10.c winsup/testsuite/winsup.api/ltp/fork11.c winsup/testsuite/winsup.api/ltp/fpathconf01.c winsup/testsuite/winsup.api/ltp/fstat01.c winsup/testsuite/winsup.api/ltp/fstat02.c winsup/testsuite/winsup.api/ltp/fstat03.c winsup/testsuite/winsup.api/ltp/fstat04.c winsup/testsuite/winsup.api/ltp/fsync01.c winsup/testsuite/winsup.api/ltp/ftruncate01.c winsup/testsuite/winsup.api/ltp/ftruncate02.c winsup/testsuite/winsup.api/ltp/ftruncate03.c winsup/testsuite/winsup.api/ltp/getegid01.c winsup/testsuite/winsup.api/ltp/geteuid01.c winsup/testsuite/winsup.api/ltp/getgid01.c winsup/testsuite/winsup.api/ltp/getgid02.c winsup/testsuite/winsup.api/ltp/getgid03.c winsup/testsuite/winsup.api/ltp/getgroups01.c winsup/testsuite/winsup.api/ltp/getgroups02.c winsup/testsuite/winsup.api/ltp/gethostid01.c winsup/testsuite/winsup.api/ltp/gethostname01.c winsup/testsuite/winsup.api/ltp/getpgid01.c winsup/testsuite/winsup.api/ltp/getpgid02.c winsup/testsuite/winsup.api/ltp/getpgrp01.c winsup/testsuite/winsup.api/ltp/getpid01.c winsup/testsuite/winsup.api/ltp/getpid02.c winsup/testsuite/winsup.api/ltp/getppid01.c winsup/testsuite/winsup.api/ltp/getppid02.c winsup/testsuite/winsup.api/ltp/getuid01.c winsup/testsuite/winsup.api/ltp/getuid02.c winsup/testsuite/winsup.api/ltp/getuid03.c winsup/testsuite/winsup.api/ltp/kill01.c winsup/testsuite/winsup.api/ltp/kill02.c winsup/testsuite/winsup.api/ltp/kill03.c winsup/testsuite/winsup.api/ltp/kill04.c winsup/testsuite/winsup.api/ltp/kill09.c winsup/testsuite/winsup.api/ltp/link02.c winsup/testsuite/winsup.api/ltp/link03.c winsup/testsuite/winsup.api/ltp/link04.c winsup/testsuite/winsup.api/ltp/link05.c winsup/testsuite/winsup.api/ltp/lseek01.c winsup/testsuite/winsup.api/ltp/lseek02.c winsup/testsuite/winsup.api/ltp/lseek03.c winsup/testsuite/winsup.api/ltp/lseek04.c winsup/testsuite/winsup.api/ltp/lseek05.c winsup/testsuite/winsup.api/ltp/lseek06.c winsup/testsuite/winsup.api/ltp/lseek07.c winsup/testsuite/winsup.api/ltp/lseek08.c winsup/testsuite/winsup.api/ltp/lseek09.c winsup/testsuite/winsup.api/ltp/lseek10.c winsup/testsuite/winsup.api/ltp/lstat02.c winsup/testsuite/winsup.api/ltp/mkdir01.c winsup/testsuite/winsup.api/ltp/mkdir08.c winsup/testsuite/winsup.api/ltp/mknod01.c winsup/testsuite/winsup.api/ltp/mmap001.c winsup/testsuite/winsup.api/ltp/mmap02.c winsup/testsuite/winsup.api/ltp/mmap03.c winsup/testsuite/winsup.api/ltp/mmap04.c winsup/testsuite/winsup.api/ltp/mmap05.c winsup/testsuite/winsup.api/ltp/mmap06.c winsup/testsuite/winsup.api/ltp/mmap07.c winsup/testsuite/winsup.api/ltp/mmap08.c winsup/testsuite/winsup.api/ltp/munmap01.c winsup/testsuite/winsup.api/ltp/munmap02.c winsup/testsuite/winsup.api/ltp/nice05.c winsup/testsuite/winsup.api/ltp/open02.c winsup/testsuite/winsup.api/ltp/open03.c winsup/testsuite/winsup.api/ltp/pathconf01.c winsup/testsuite/winsup.api/ltp/pause01.c winsup/testsuite/winsup.api/ltp/pipe01.c winsup/testsuite/winsup.api/ltp/pipe08.c winsup/testsuite/winsup.api/ltp/pipe09.c winsup/testsuite/winsup.api/ltp/pipe10.c winsup/testsuite/winsup.api/ltp/pipe11.c winsup/testsuite/winsup.api/ltp/poll01.c winsup/testsuite/winsup.api/ltp/read01.c winsup/testsuite/winsup.api/ltp/read04.c winsup/testsuite/winsup.api/ltp/readdir01.c winsup/testsuite/winsup.api/ltp/readlink01.c winsup/testsuite/winsup.api/ltp/readlink02.c winsup/testsuite/winsup.api/ltp/readlink03.c winsup/testsuite/winsup.api/ltp/rename01.c winsup/testsuite/winsup.api/ltp/rename02.c winsup/testsuite/winsup.api/ltp/rename08.c winsup/testsuite/winsup.api/ltp/rename10.c winsup/testsuite/winsup.api/ltp/rmdir01.c winsup/testsuite/winsup.api/ltp/rmdir04.c winsup/testsuite/winsup.api/ltp/rmdir05.c winsup/testsuite/winsup.api/ltp/sbrk01.c winsup/testsuite/winsup.api/ltp/select01.c winsup/testsuite/winsup.api/ltp/select02.c winsup/testsuite/winsup.api/ltp/select03.c winsup/testsuite/winsup.api/ltp/setgid01.c winsup/testsuite/winsup.api/ltp/setgroups01.c winsup/testsuite/winsup.api/ltp/setpgid01.c winsup/testsuite/winsup.api/ltp/setregid01.c winsup/testsuite/winsup.api/ltp/setreuid01.c winsup/testsuite/winsup.api/ltp/setuid01.c winsup/testsuite/winsup.api/ltp/setuid02.c winsup/testsuite/winsup.api/ltp/signal03.c winsup/testsuite/winsup.api/ltp/stat01.c winsup/testsuite/winsup.api/ltp/stat02.c winsup/testsuite/winsup.api/ltp/stat03.c winsup/testsuite/winsup.api/ltp/stat05.c winsup/testsuite/winsup.api/ltp/stat06.c winsup/testsuite/winsup.api/ltp/symlink01.c winsup/testsuite/winsup.api/ltp/symlink02.c winsup/testsuite/winsup.api/ltp/symlink03.c winsup/testsuite/winsup.api/ltp/symlink04.c winsup/testsuite/winsup.api/ltp/symlink05.c winsup/testsuite/winsup.api/ltp/sync01.c winsup/testsuite/winsup.api/ltp/sync02.c winsup/testsuite/winsup.api/ltp/time01.c winsup/testsuite/winsup.api/ltp/time02.c winsup/testsuite/winsup.api/ltp/times01.c winsup/testsuite/winsup.api/ltp/times02.c winsup/testsuite/winsup.api/ltp/times03.c winsup/testsuite/winsup.api/ltp/truncate01.c winsup/testsuite/winsup.api/ltp/truncate02.c winsup/testsuite/winsup.api/ltp/ulimit01.c winsup/testsuite/winsup.api/ltp/umask01.c winsup/testsuite/winsup.api/ltp/umask02.c winsup/testsuite/winsup.api/ltp/umask03.c winsup/testsuite/winsup.api/ltp/uname01.c winsup/testsuite/winsup.api/ltp/unlink05.c winsup/testsuite/winsup.api/ltp/unlink06.c winsup/testsuite/winsup.api/ltp/unlink07.c winsup/testsuite/winsup.api/ltp/unlink08.c winsup/testsuite/winsup.api/ltp/vfork01.c winsup/testsuite/winsup.api/ltp/wait02.c winsup/testsuite/winsup.api/ltp/wait401.c winsup/testsuite/winsup.api/ltp/wait402.c winsup/testsuite/winsup.api/ltp/write01.c winsup/testsuite/winsup.api/ltp/write02.c winsup/testsuite/winsup.api/ltp/write03.c winsup/testsuite/winsup.api/mmaptest01.c winsup/testsuite/winsup.api/mmaptest02.c winsup/testsuite/winsup.api/mmaptest03.c winsup/testsuite/winsup.api/mmaptest04.c winsup/testsuite/winsup.api/msgtest.c winsup/testsuite/winsup.api/nullgetcwd.c winsup/testsuite/winsup.api/pthread/cancel1.c winsup/testsuite/winsup.api/pthread/cancel10.c winsup/testsuite/winsup.api/pthread/cancel11.c winsup/testsuite/winsup.api/pthread/cancel12.c winsup/testsuite/winsup.api/pthread/cancel2.c winsup/testsuite/winsup.api/pthread/cancel3.c winsup/testsuite/winsup.api/pthread/cancel4.c winsup/testsuite/winsup.api/pthread/cancel5.c winsup/testsuite/winsup.api/pthread/cancel6.c winsup/testsuite/winsup.api/pthread/cancel7.c winsup/testsuite/winsup.api/pthread/cancel8.c winsup/testsuite/winsup.api/pthread/cancel9.c winsup/testsuite/winsup.api/pthread/cleanup2.c winsup/testsuite/winsup.api/pthread/cleanup3.c winsup/testsuite/winsup.api/pthread/condvar1.c winsup/testsuite/winsup.api/pthread/condvar2.c winsup/testsuite/winsup.api/pthread/condvar2_1.c winsup/testsuite/winsup.api/pthread/condvar3.c winsup/testsuite/winsup.api/pthread/condvar3_1.c winsup/testsuite/winsup.api/pthread/condvar3_2.c winsup/testsuite/winsup.api/pthread/condvar3_3.c winsup/testsuite/winsup.api/pthread/condvar4.c winsup/testsuite/winsup.api/pthread/condvar5.c winsup/testsuite/winsup.api/pthread/condvar6.c winsup/testsuite/winsup.api/pthread/condvar7.c winsup/testsuite/winsup.api/pthread/condvar8.c winsup/testsuite/winsup.api/pthread/condvar9.c winsup/testsuite/winsup.api/pthread/count1.c winsup/testsuite/winsup.api/pthread/create1.c winsup/testsuite/winsup.api/pthread/create2.c winsup/testsuite/winsup.api/pthread/equal1.c winsup/testsuite/winsup.api/pthread/exit1.c winsup/testsuite/winsup.api/pthread/exit2.c winsup/testsuite/winsup.api/pthread/exit3.c winsup/testsuite/winsup.api/pthread/inherit1.c winsup/testsuite/winsup.api/pthread/join0.c winsup/testsuite/winsup.api/pthread/join1.c winsup/testsuite/winsup.api/pthread/join2.c winsup/testsuite/winsup.api/pthread/mainthreadexits.c winsup/testsuite/winsup.api/pthread/mutex1.c winsup/testsuite/winsup.api/pthread/mutex1d.c winsup/testsuite/winsup.api/pthread/mutex1e.c winsup/testsuite/winsup.api/pthread/mutex1n.c winsup/testsuite/winsup.api/pthread/mutex1r.c winsup/testsuite/winsup.api/pthread/mutex2.c winsup/testsuite/winsup.api/pthread/mutex3.c winsup/testsuite/winsup.api/pthread/mutex4.c winsup/testsuite/winsup.api/pthread/mutex5.c winsup/testsuite/winsup.api/pthread/mutex6d.c winsup/testsuite/winsup.api/pthread/mutex6e.c winsup/testsuite/winsup.api/pthread/mutex6n.c winsup/testsuite/winsup.api/pthread/mutex6r.c winsup/testsuite/winsup.api/pthread/mutex7.c winsup/testsuite/winsup.api/pthread/mutex7d.c winsup/testsuite/winsup.api/pthread/mutex7e.c winsup/testsuite/winsup.api/pthread/mutex7n.c winsup/testsuite/winsup.api/pthread/mutex7r.c winsup/testsuite/winsup.api/pthread/mutex8e.c winsup/testsuite/winsup.api/pthread/mutex8n.c winsup/testsuite/winsup.api/pthread/mutex8r.c winsup/testsuite/winsup.api/pthread/once1.c winsup/testsuite/winsup.api/pthread/priority1.c winsup/testsuite/winsup.api/pthread/priority2.c winsup/testsuite/winsup.api/pthread/rwlock1.c winsup/testsuite/winsup.api/pthread/rwlock2.c winsup/testsuite/winsup.api/pthread/rwlock3.c winsup/testsuite/winsup.api/pthread/rwlock4.c winsup/testsuite/winsup.api/pthread/rwlock5.c winsup/testsuite/winsup.api/pthread/rwlock6.c winsup/testsuite/winsup.api/pthread/rwlock7.c winsup/testsuite/winsup.api/pthread/self1.c winsup/testsuite/winsup.api/pthread/self2.c winsup/testsuite/winsup.api/pthread/test.h winsup/testsuite/winsup.api/pthread/threadidafterfork.c winsup/testsuite/winsup.api/pthread/tsd1.c winsup/testsuite/winsup.api/resethand.c winsup/testsuite/winsup.api/samples/sample-fail.c winsup/testsuite/winsup.api/samples/sample-miscompile.c winsup/testsuite/winsup.api/samples/sample-pass.c winsup/testsuite/winsup.api/semtest.c winsup/testsuite/winsup.api/shmtest.c winsup/testsuite/winsup.api/sigchld.c winsup/testsuite/winsup.api/signal-into-win32-api.c winsup/testsuite/winsup.api/systemcall.c winsup/testsuite/winsup.api/user_malloc.c winsup/testsuite/winsup.api/waitpid.c winsup/testsuite/winsup.api/winsup.exp winsup/utils/COPYING.dumper winsup/utils/ChangeLog winsup/utils/ChangeLog-2000 winsup/utils/ChangeLog.64bit winsup/utils/Makefile.in winsup/utils/aclocal.m4 winsup/utils/autogen.sh winsup/utils/bloda.cc winsup/utils/configure winsup/utils/configure.ac winsup/utils/cygcheck.cc winsup/utils/cygpath.cc winsup/utils/cygwin-console-helper.cc winsup/utils/dump_setup.cc winsup/utils/dumper.cc winsup/utils/dumper.h winsup/utils/getconf.c winsup/utils/getfacl.c winsup/utils/kill.cc winsup/utils/ldd.cc winsup/utils/ldh.cc winsup/utils/loadlib.h winsup/utils/locale.cc winsup/utils/minidumper.cc winsup/utils/mkgroup.c winsup/utils/mkpasswd.c winsup/utils/module_info.cc winsup/utils/mount.cc winsup/utils/parse_pe.cc winsup/utils/passwd.c winsup/utils/path.cc winsup/utils/path.h winsup/utils/pldd.c winsup/utils/ps.cc winsup/utils/regtool.cc winsup/utils/setfacl.c winsup/utils/setmetamode.c winsup/utils/ssp.c winsup/utils/ssp.txt winsup/utils/strace.cc winsup/utils/testsuite.cc winsup/utils/testsuite.h winsup/utils/tzmap-from-unicode.org winsup/utils/tzmap.h winsup/utils/tzset.c winsup/utils/umount.cc winsup/utils/wide_path.h
-rwxr-xr-xdjunpack.bat52
-rw-r--r--include/COPYING340
-rw-r--r--include/COPYING3674
-rw-r--r--include/ChangeLog2115
-rw-r--r--include/ChangeLog-91032688
-rw-r--r--include/MAINTAINERS7
-rw-r--r--include/alloca-conf.h60
-rw-r--r--include/ansidecl.h313
-rw-r--r--include/aout/ChangeLog262
-rw-r--r--include/aout/adobe.h314
-rw-r--r--include/aout/aout64.h516
-rw-r--r--include/aout/ar.h55
-rw-r--r--include/aout/dynix3.h87
-rw-r--r--include/aout/encap.h135
-rw-r--r--include/aout/host.h43
-rw-r--r--include/aout/hp.h83
-rw-r--r--include/aout/hp300hpux.h132
-rw-r--r--include/aout/hppa.h22
-rw-r--r--include/aout/ranlib.h63
-rw-r--r--include/aout/reloc.h67
-rw-r--r--include/aout/stab.def283
-rw-r--r--include/aout/stab_gnu.h55
-rw-r--r--include/aout/sun4.h239
-rw-r--r--include/bfdlink.h842
-rw-r--r--include/binary-io.h62
-rw-r--r--include/bout.h192
-rw-r--r--include/cgen/ChangeLog32
-rw-r--r--include/cgen/basic-modes.h52
-rw-r--r--include/cgen/basic-ops.h347
-rw-r--r--include/cgen/bitset.h56
-rw-r--r--include/coff/ChangeLog373
-rw-r--r--include/coff/ChangeLog-91031186
-rw-r--r--include/coff/alpha.h386
-rw-r--r--include/coff/apollo.h125
-rw-r--r--include/coff/arm.h130
-rw-r--r--include/coff/aux-coff.h49
-rw-r--r--include/coff/ecoff.h411
-rw-r--r--include/coff/external.h269
-rw-r--r--include/coff/go32exe.h36
-rw-r--r--include/coff/h8300.h55
-rw-r--r--include/coff/h8500.h47
-rw-r--r--include/coff/i386.h74
-rw-r--r--include/coff/i860.h87
-rw-r--r--include/coff/i960.h320
-rw-r--r--include/coff/ia64.h89
-rw-r--r--include/coff/internal.h830
-rw-r--r--include/coff/m68k.h82
-rw-r--r--include/coff/m88k.h197
-rw-r--r--include/coff/mcore.h72
-rw-r--r--include/coff/mips.h344
-rw-r--r--include/coff/mipspe.h67
-rw-r--r--include/coff/or32.h288
-rw-r--r--include/coff/pe.h512
-rw-r--r--include/coff/powerpc.h59
-rw-r--r--include/coff/rs6000.h353
-rw-r--r--include/coff/rs6k64.h275
-rw-r--r--include/coff/sh.h148
-rw-r--r--include/coff/sparc.h156
-rw-r--r--include/coff/sym.h484
-rw-r--r--include/coff/symconst.h184
-rw-r--r--include/coff/ti.h561
-rw-r--r--include/coff/tic30.h51
-rw-r--r--include/coff/tic4x.h47
-rw-r--r--include/coff/tic54x.h60
-rw-r--r--include/coff/tic80.h123
-rw-r--r--include/coff/w65.h47
-rw-r--r--include/coff/we32k.h62
-rw-r--r--include/coff/x86_64.h57
-rw-r--r--include/coff/xcoff.h647
-rw-r--r--include/coff/z80.h60
-rw-r--r--include/coff/z8k.h49
-rw-r--r--include/demangle.h686
-rw-r--r--include/dis-asm.h382
-rw-r--r--include/dwarf2.def708
-rw-r--r--include/dwarf2.h430
-rw-r--r--include/dyn-string.h73
-rw-r--r--include/elf/ChangeLog1892
-rw-r--r--include/elf/ChangeLog-91031957
-rw-r--r--include/elf/aarch64.h327
-rw-r--r--include/elf/alpha.h131
-rw-r--r--include/elf/arc.h57
-rw-r--r--include/elf/arm.h344
-rw-r--r--include/elf/avr.h86
-rw-r--r--include/elf/bfin.h95
-rw-r--r--include/elf/common.h1001
-rw-r--r--include/elf/cr16.h62
-rw-r--r--include/elf/cr16c.h258
-rw-r--r--include/elf/cris.h193
-rw-r--r--include/elf/crx.h53
-rw-r--r--include/elf/d10v.h38
-rw-r--r--include/elf/d30v.h42
-rw-r--r--include/elf/dlx.h53
-rw-r--r--include/elf/dwarf.h323
-rwxr-xr-xinclude/elf/epiphany.h59
-rw-r--r--include/elf/external.h288
-rw-r--r--include/elf/fr30.h42
-rw-r--r--include/elf/frv.h130
-rw-r--r--include/elf/h8.h101
-rw-r--r--include/elf/hppa.h635
-rw-r--r--include/elf/i370.h61
-rw-r--r--include/elf/i386.h79
-rw-r--r--include/elf/i860.h66
-rw-r--r--include/elf/i960.h37
-rw-r--r--include/elf/ia64.h416
-rw-r--r--include/elf/internal.h360
-rw-r--r--include/elf/ip2k.h62
-rw-r--r--include/elf/iq2000.h58
-rw-r--r--include/elf/lm32.h56
-rw-r--r--include/elf/m32c.h67
-rw-r--r--include/elf/m32r.h123
-rw-r--r--include/elf/m68hc11.h107
-rw-r--r--include/elf/m68k.h102
-rw-r--r--include/elf/mcore.h47
-rw-r--r--include/elf/mep.h95
-rw-r--r--include/elf/metag.h91
-rw-r--r--include/elf/microblaze.h71
-rw-r--r--include/elf/mips.h1172
-rw-r--r--include/elf/mmix.h173
-rw-r--r--include/elf/mn10200.h40
-rw-r--r--include/elf/mn10300.h80
-rw-r--r--include/elf/moxie.h32
-rw-r--r--include/elf/msp430.h101
-rw-r--r--include/elf/mt.h46
-rw-r--r--include/elf/nios2.h91
-rw-r--r--include/elf/openrisc.h39
-rw-r--r--include/elf/or32.h56
-rw-r--r--include/elf/pj.h44
-rw-r--r--include/elf/ppc.h223
-rw-r--r--include/elf/ppc64.h177
-rw-r--r--include/elf/reloc-macros.h129
-rw-r--r--include/elf/rl78.h120
-rw-r--r--include/elf/rx.h136
-rw-r--r--include/elf/s390.h134
-rw-r--r--include/elf/score.h130
-rw-r--r--include/elf/sh.h250
-rw-r--r--include/elf/sparc.h231
-rw-r--r--include/elf/spu.h61
-rw-r--r--include/elf/tic6x-attrs.h35
-rw-r--r--include/elf/tic6x.h167
-rw-r--r--include/elf/tilegx.h176
-rw-r--r--include/elf/tilepro.h144
-rw-r--r--include/elf/v850.h283
-rw-r--r--include/elf/vax.h51
-rw-r--r--include/elf/vxworks.h33
-rw-r--r--include/elf/x86-64.h90
-rw-r--r--include/elf/xc16x.h40
-rw-r--r--include/elf/xgate.h77
-rw-r--r--include/elf/xstormy16.h57
-rw-r--r--include/elf/xtensa.h208
-rw-r--r--include/fibheap.h95
-rw-r--r--include/filenames.h99
-rw-r--r--include/floatformat.h152
-rw-r--r--include/fnmatch.h70
-rw-r--r--include/fopen-bin.h44
-rw-r--r--include/fopen-same.h44
-rw-r--r--include/fopen-vms.h42
-rw-r--r--include/gcc-c-fe.def197
-rw-r--r--include/gcc-c-interface.h220
-rw-r--r--include/gcc-interface.h127
-rw-r--r--include/gdb/ChangeLog272
-rw-r--r--include/gdb/callback.h338
-rw-r--r--include/gdb/fileio.h144
-rw-r--r--include/gdb/gdb-index.h99
-rw-r--r--include/gdb/remote-sim.h287
-rw-r--r--include/gdb/signals.def200
-rw-r--r--include/gdb/signals.h58
-rw-r--r--include/gdb/sim-arm.h112
-rw-r--r--include/gdb/sim-bfin.h82
-rw-r--r--include/gdb/sim-cr16.h106
-rw-r--r--include/gdb/sim-d10v.h141
-rw-r--r--include/gdb/sim-frv.h51
-rw-r--r--include/gdb/sim-h8300.h77
-rw-r--r--include/gdb/sim-lm32.h76
-rw-r--r--include/gdb/sim-m32c.h62
-rw-r--r--include/gdb/sim-ppc.h773
-rw-r--r--include/gdb/sim-rl78.h76
-rw-r--r--include/gdb/sim-rx.h56
-rw-r--r--include/gdb/sim-sh.h169
-rw-r--r--include/gdbm.h91
-rw-r--r--include/getopt.h144
-rw-r--r--include/hashtab.h205
-rw-r--r--include/hp-symtab.h1867
-rw-r--r--include/ieee.h165
-rw-r--r--include/leb128.h136
-rw-r--r--include/libiberty.h735
-rw-r--r--include/longlong.h1745
-rw-r--r--include/lto-symtab.h41
-rw-r--r--include/mach-o/ChangeLog81
-rw-r--r--include/mach-o/arm.h37
-rw-r--r--include/mach-o/codesign.h85
-rw-r--r--include/mach-o/external.h348
-rw-r--r--include/mach-o/loader.h378
-rw-r--r--include/mach-o/reloc.h33
-rw-r--r--include/mach-o/x86-64.h37
-rw-r--r--include/md5.h154
-rw-r--r--include/nlm/ChangeLog119
-rw-r--r--include/nlm/alpha-ext.h167
-rw-r--r--include/nlm/common.h123
-rw-r--r--include/nlm/external.h172
-rw-r--r--include/nlm/i386-ext.h117
-rw-r--r--include/nlm/internal.h309
-rw-r--r--include/nlm/ppc-ext.h164
-rw-r--r--include/nlm/sparc32-ext.h121
-rw-r--r--include/oasys.h192
-rw-r--r--include/objalloc.h115
-rw-r--r--include/obstack.h545
-rw-r--r--include/opcode/ChangeLog1916
-rw-r--r--include/opcode/ChangeLog-91033131
-rw-r--r--include/opcode/aarch64.h932
-rw-r--r--include/opcode/alpha.h238
-rw-r--r--include/opcode/arc.h322
-rw-r--r--include/opcode/arm.h289
-rw-r--r--include/opcode/avr.h300
-rwxr-xr-xinclude/opcode/bfin.h1761
-rw-r--r--include/opcode/cgen.h1480
-rw-r--r--include/opcode/convex.h1708
-rw-r--r--include/opcode/cr16.h451
-rw-r--r--include/opcode/cris.h367
-rw-r--r--include/opcode/crx.h419
-rw-r--r--include/opcode/d10v.h209
-rw-r--r--include/opcode/d30v.h288
-rw-r--r--include/opcode/dlx.h283
-rw-r--r--include/opcode/h8300.h1892
-rw-r--r--include/opcode/hppa.h1092
-rw-r--r--include/opcode/i370.h267
-rw-r--r--include/opcode/i386.h148
-rw-r--r--include/opcode/i860.h507
-rw-r--r--include/opcode/i960.h525
-rw-r--r--include/opcode/ia64.h422
-rw-r--r--include/opcode/m68hc11.h456
-rw-r--r--include/opcode/m68k.h378
-rw-r--r--include/opcode/m88k.h455
-rw-r--r--include/opcode/metag.h2079
-rw-r--r--include/opcode/mips.h2151
-rw-r--r--include/opcode/mmix.h187
-rw-r--r--include/opcode/mn10200.h111
-rw-r--r--include/opcode/mn10300.h170
-rw-r--r--include/opcode/moxie.h74
-rw-r--r--include/opcode/msp430-decode.h130
-rw-r--r--include/opcode/msp430.h194
-rw-r--r--include/opcode/nios2.h522
-rw-r--r--include/opcode/np1.h421
-rw-r--r--include/opcode/ns32k.h487
-rw-r--r--include/opcode/or32.h181
-rw-r--r--include/opcode/pdp11.h84
-rw-r--r--include/opcode/pj.h49
-rw-r--r--include/opcode/pn.h283
-rw-r--r--include/opcode/ppc.h413
-rw-r--r--include/opcode/pyr.h305
-rw-r--r--include/opcode/rl78.h168
-rw-r--r--include/opcode/rx.h215
-rw-r--r--include/opcode/s390.h154
-rw-r--r--include/opcode/score-datadep.h65
-rw-r--r--include/opcode/score-inst.h236
-rw-r--r--include/opcode/sparc.h280
-rw-r--r--include/opcode/spu-insns.h417
-rw-r--r--include/opcode/spu.h125
-rw-r--r--include/opcode/tahoe.h232
-rw-r--r--include/opcode/tic30.h691
-rw-r--r--include/opcode/tic4x.h1079
-rw-r--r--include/opcode/tic54x.h163
-rw-r--r--include/opcode/tic6x-control-registers.h56
-rw-r--r--include/opcode/tic6x-insn-formats.h616
-rw-r--r--include/opcode/tic6x-opcode-table.h3677
-rw-r--r--include/opcode/tic6x.h718
-rw-r--r--include/opcode/tic80.h283
-rw-r--r--include/opcode/tilegx.h1304
-rw-r--r--include/opcode/tilepro.h1638
-rw-r--r--include/opcode/v850.h240
-rw-r--r--include/opcode/vax.h383
-rw-r--r--include/opcode/xgate.h100
-rw-r--r--include/os9k.h181
-rw-r--r--include/partition.h82
-rw-r--r--include/plugin-api.h432
-rw-r--r--include/progress.h38
-rw-r--r--include/safe-ctype.h150
-rw-r--r--include/sha1.h146
-rw-r--r--include/simple-object.h204
-rw-r--r--include/som/ChangeLog20
-rw-r--r--include/som/aout.h249
-rw-r--r--include/som/clock.h30
-rw-r--r--include/som/internal.h206
-rw-r--r--include/som/lst.h93
-rw-r--r--include/som/reloc.h79
-rw-r--r--include/sort.h48
-rw-r--r--include/splay-tree.h157
-rw-r--r--include/symcat.h55
-rw-r--r--include/timeval-utils.h40
-rw-r--r--include/vms/ChangeLog87
-rw-r--r--include/vms/dcx.h50
-rw-r--r--include/vms/dmt.h48
-rw-r--r--include/vms/dsc.h129
-rw-r--r--include/vms/dst.h274
-rw-r--r--include/vms/eeom.h62
-rw-r--r--include/vms/egps.h64
-rw-r--r--include/vms/egsd.h60
-rw-r--r--include/vms/egst.h39
-rw-r--r--include/vms/egsy.h54
-rw-r--r--include/vms/eiaf.h80
-rw-r--r--include/vms/eicp.h38
-rw-r--r--include/vms/eidc.h49
-rw-r--r--include/vms/eiha.h54
-rw-r--r--include/vms/eihd.h145
-rw-r--r--include/vms/eihi.h50
-rw-r--r--include/vms/eihs.h62
-rw-r--r--include/vms/eihvn.h58
-rw-r--r--include/vms/eisd.h118
-rw-r--r--include/vms/emh.h79
-rw-r--r--include/vms/eobjrec.h48
-rw-r--r--include/vms/esdf.h41
-rw-r--r--include/vms/esdfm.h49
-rw-r--r--include/vms/esdfv.h49
-rw-r--r--include/vms/esgps.h72
-rw-r--r--include/vms/esrf.h36
-rw-r--r--include/vms/etir.h114
-rw-r--r--include/vms/internal.h63
-rw-r--r--include/vms/lbr.h332
-rw-r--r--include/vms/prt.h43
-rw-r--r--include/vms/shl.h55
-rw-r--r--include/vtv-change-permission.h55
-rw-r--r--include/xregex.h29
-rw-r--r--include/xregex2.h565
-rw-r--r--include/xtensa-config.h177
-rw-r--r--include/xtensa-isa-internal.h234
-rw-r--r--include/xtensa-isa.h813
-rw-r--r--winsup/COPYING674
-rw-r--r--winsup/CYGWIN_LICENSE70
-rw-r--r--winsup/ChangeLog635
-rw-r--r--winsup/Makefile.common55
-rw-r--r--winsup/Makefile.in129
-rw-r--r--winsup/README9
-rw-r--r--winsup/acinclude.m483
-rw-r--r--winsup/aclocal.m415
-rwxr-xr-xwinsup/autogen.sh17
-rwxr-xr-xwinsup/c++wrap6
-rwxr-xr-xwinsup/ccwrap55
-rwxr-xr-xwinsup/config.guess1537
-rwxr-xr-xwinsup/config.sub1789
-rwxr-xr-xwinsup/configure4784
-rwxr-xr-xwinsup/configure.ac44
-rwxr-xr-xwinsup/configure.cygwin48
-rw-r--r--winsup/cygserver/ChangeLog804
-rw-r--r--winsup/cygserver/ChangeLog.64bit87
-rw-r--r--winsup/cygserver/Makefile.in94
-rw-r--r--winsup/cygserver/README198
-rw-r--r--winsup/cygserver/aclocal.m498
-rwxr-xr-xwinsup/cygserver/autogen.sh4
-rw-r--r--winsup/cygserver/bsd_helper.cc693
-rw-r--r--winsup/cygserver/bsd_helper.h66
-rw-r--r--winsup/cygserver/bsd_log.cc95
-rw-r--r--winsup/cygserver/bsd_log.h33
-rw-r--r--winsup/cygserver/bsd_mutex.cc388
-rw-r--r--winsup/cygserver/bsd_mutex.h52
-rw-r--r--winsup/cygserver/client.cc526
-rwxr-xr-xwinsup/cygserver/configure5326
-rw-r--r--winsup/cygserver/configure.ac69
-rwxr-xr-xwinsup/cygserver/cygserver-config209
-rw-r--r--winsup/cygserver/cygserver.cc762
-rw-r--r--winsup/cygserver/cygserver.conf147
-rw-r--r--winsup/cygserver/msg.cc117
-rw-r--r--winsup/cygserver/process.cc499
-rw-r--r--winsup/cygserver/process.h179
-rw-r--r--winsup/cygserver/pwdgrp.cc161
-rw-r--r--winsup/cygserver/sem.cc107
-rw-r--r--winsup/cygserver/setpwd.cc104
-rw-r--r--winsup/cygserver/shm.cc124
-rw-r--r--winsup/cygserver/sysv_msg.cc1215
-rw-r--r--winsup/cygserver/sysv_sem.cc1389
-rw-r--r--winsup/cygserver/sysv_shm.cc1045
-rw-r--r--winsup/cygserver/threaded_queue.cc410
-rw-r--r--winsup/cygserver/threaded_queue.h127
-rw-r--r--winsup/cygserver/transport.cc49
-rw-r--r--winsup/cygserver/transport.h39
-rw-r--r--winsup/cygserver/transport_pipes.cc342
-rw-r--r--winsup/cygserver/transport_pipes.h50
-rw-r--r--winsup/cygserver/woutsup.h56
-rw-r--r--winsup/cygwin/ChangeLog2745
-rw-r--r--winsup/cygwin/ChangeLog-1995177
-rw-r--r--winsup/cygwin/ChangeLog-19962031
-rw-r--r--winsup/cygwin/ChangeLog-19972800
-rw-r--r--winsup/cygwin/ChangeLog-19984490
-rw-r--r--winsup/cygwin/ChangeLog-19993562
-rw-r--r--winsup/cygwin/ChangeLog-20004150
-rw-r--r--winsup/cygwin/ChangeLog-20015337
-rw-r--r--winsup/cygwin/ChangeLog-20026655
-rw-r--r--winsup/cygwin/ChangeLog-20035678
-rw-r--r--winsup/cygwin/ChangeLog-20043848
-rw-r--r--winsup/cygwin/ChangeLog-20055813
-rw-r--r--winsup/cygwin/ChangeLog-20063571
-rw-r--r--winsup/cygwin/ChangeLog-20072769
-rw-r--r--winsup/cygwin/ChangeLog-20083341
-rw-r--r--winsup/cygwin/ChangeLog-20093483
-rw-r--r--winsup/cygwin/ChangeLog-20103103
-rw-r--r--winsup/cygwin/ChangeLog-20115318
-rw-r--r--winsup/cygwin/ChangeLog-20123065
-rw-r--r--winsup/cygwin/ChangeLog-20132078
-rw-r--r--winsup/cygwin/ChangeLog.64bit1877
-rw-r--r--winsup/cygwin/DevNotes562
-rw-r--r--winsup/cygwin/Makefile.in728
-rw-r--r--winsup/cygwin/ROADMAP129
-rw-r--r--winsup/cygwin/acconfig.h11
-rw-r--r--winsup/cygwin/aclocal.m497
-rw-r--r--winsup/cygwin/advapi32.cc98
-rwxr-xr-xwinsup/cygwin/analyze_sigfe80
-rw-r--r--winsup/cygwin/assert.cc64
-rwxr-xr-xwinsup/cygwin/autogen.sh4
-rw-r--r--winsup/cygwin/autoload.cc737
-rw-r--r--winsup/cygwin/automode.c28
-rw-r--r--winsup/cygwin/binmode.c23
-rw-r--r--winsup/cygwin/child_info.h199
-rw-r--r--winsup/cygwin/collate.h23
-rw-r--r--winsup/cygwin/common.din1400
-rw-r--r--winsup/cygwin/config.h.in50
-rwxr-xr-xwinsup/cygwin/configure5756
-rw-r--r--winsup/cygwin/configure.ac113
-rw-r--r--winsup/cygwin/cpuid.h67
-rw-r--r--winsup/cygwin/crt0.c40
-rw-r--r--winsup/cygwin/ctype.cc90
-rw-r--r--winsup/cygwin/cxx.cc108
-rw-r--r--winsup/cygwin/cygerrno.h56
-rw-r--r--winsup/cygwin/cygheap.cc746
-rw-r--r--winsup/cygwin/cygheap.h719
-rw-r--r--winsup/cygwin/cygheap_malloc.h58
-rw-r--r--winsup/cygwin/cyglsa.h213
-rwxr-xr-xwinsup/cygwin/cygmagic34
-rw-r--r--winsup/cygwin/cygmalloc.h44
-rw-r--r--winsup/cygwin/cygprops.h21
-rw-r--r--winsup/cygwin/cygserver.h192
-rw-r--r--winsup/cygwin/cygserver_ipc.h96
-rw-r--r--winsup/cygwin/cygserver_msg.h91
-rw-r--r--winsup/cygwin/cygserver_pwdgrp.h73
-rw-r--r--winsup/cygwin/cygserver_sem.h87
-rw-r--r--winsup/cygwin/cygserver_setpwd.h53
-rw-r--r--winsup/cygwin/cygserver_shm.h98
-rw-r--r--winsup/cygwin/cygthread.cc524
-rw-r--r--winsup/cygwin/cygthread.h86
-rw-r--r--winsup/cygwin/cygtls.cc227
-rw-r--r--winsup/cygwin/cygtls.h430
-rw-r--r--winsup/cygwin/cygwait.cc114
-rw-r--r--winsup/cygwin/cygwait.h60
-rwxr-xr-xwinsup/cygwin/cygwin-cxx.h37
-rwxr-xr-xwinsup/cygwin/cygwin-shilka8
-rw-r--r--winsup/cygwin/cygwin.ldif253
-rw-r--r--winsup/cygwin/cygwin.sc.in185
-rw-r--r--winsup/cygwin/cygwin_version.h31
-rw-r--r--winsup/cygwin/cygxdr.cc24
-rw-r--r--winsup/cygwin/cygxdr.h25
-rw-r--r--winsup/cygwin/dcrt0.cc1367
-rw-r--r--winsup/cygwin/debug.cc235
-rw-r--r--winsup/cygwin/debug.h91
-rw-r--r--winsup/cygwin/devices.cc45858
-rw-r--r--winsup/cygwin/devices.h380
-rw-r--r--winsup/cygwin/devices.in272
-rw-r--r--winsup/cygwin/dir.cc380
-rw-r--r--winsup/cygwin/dlfcn.cc258
-rw-r--r--winsup/cygwin/dll_init.cc728
-rw-r--r--winsup/cygwin/dll_init.h152
-rwxr-xr-xwinsup/cygwin/dllfixdbg75
-rw-r--r--winsup/cygwin/dtable.cc1099
-rw-r--r--winsup/cygwin/dtable.h101
-rw-r--r--winsup/cygwin/environ.cc1286
-rw-r--r--winsup/cygwin/environ.h50
-rw-r--r--winsup/cygwin/errno.cc510
-rw-r--r--winsup/cygwin/exception.h178
-rw-r--r--winsup/cygwin/exceptions.cc1526
-rw-r--r--winsup/cygwin/exec.cc139
-rw-r--r--winsup/cygwin/external.cc696
-rw-r--r--winsup/cygwin/fcntl.cc125
-rwxr-xr-xwinsup/cygwin/fenv.cc447
-rw-r--r--winsup/cygwin/fhandler.cc2122
-rw-r--r--winsup/cygwin/fhandler.h2169
-rw-r--r--winsup/cygwin/fhandler_clipboard.cc348
-rw-r--r--winsup/cygwin/fhandler_console.cc2643
-rw-r--r--winsup/cygwin/fhandler_dev.cc229
-rw-r--r--winsup/cygwin/fhandler_disk_file.cc2543
-rw-r--r--winsup/cygwin/fhandler_dsp.cc1420
-rw-r--r--winsup/cygwin/fhandler_fifo.cc375
-rw-r--r--winsup/cygwin/fhandler_floppy.cc760
-rw-r--r--winsup/cygwin/fhandler_mailslot.cc192
-rw-r--r--winsup/cygwin/fhandler_netdrive.cc338
-rw-r--r--winsup/cygwin/fhandler_nodevice.cc31
-rw-r--r--winsup/cygwin/fhandler_proc.cc1510
-rw-r--r--winsup/cygwin/fhandler_process.cc1415
-rw-r--r--winsup/cygwin/fhandler_procnet.cc278
-rw-r--r--winsup/cygwin/fhandler_procsys.cc459
-rw-r--r--winsup/cygwin/fhandler_procsysvipc.cc394
-rw-r--r--winsup/cygwin/fhandler_random.cc143
-rw-r--r--winsup/cygwin/fhandler_raw.cc209
-rw-r--r--winsup/cygwin/fhandler_registry.cc1127
-rw-r--r--winsup/cygwin/fhandler_serial.cc1167
-rw-r--r--winsup/cygwin/fhandler_socket.cc2364
-rw-r--r--winsup/cygwin/fhandler_tape.cc1515
-rw-r--r--winsup/cygwin/fhandler_termios.cc470
-rw-r--r--winsup/cygwin/fhandler_tty.cc1764
-rw-r--r--winsup/cygwin/fhandler_virtual.cc278
-rw-r--r--winsup/cygwin/fhandler_virtual.h45
-rw-r--r--winsup/cygwin/fhandler_windows.cc164
-rw-r--r--winsup/cygwin/fhandler_zero.cc39
-rw-r--r--winsup/cygwin/flock.cc2065
-rw-r--r--winsup/cygwin/fork.cc710
-rw-r--r--winsup/cygwin/gcrt0.c49
-rwxr-xr-xwinsup/cygwin/gendef908
-rwxr-xr-xwinsup/cygwin/gendevices163
-rwxr-xr-xwinsup/cygwin/gentls_offsets104
-rw-r--r--winsup/cygwin/glob.cc968
-rw-r--r--winsup/cygwin/glob_pattern_p.cc28
-rw-r--r--winsup/cygwin/globals.cc212
-rw-r--r--winsup/cygwin/gmon.c295
-rw-r--r--winsup/cygwin/gmon.h187
-rw-r--r--winsup/cygwin/grp.cc720
-rw-r--r--winsup/cygwin/heap.cc334
-rw-r--r--winsup/cygwin/heap.h20
-rw-r--r--winsup/cygwin/hires.h66
-rw-r--r--winsup/cygwin/hookapi.cc461
-rw-r--r--winsup/cygwin/how-autoload-works.txt66
-rw-r--r--winsup/cygwin/how-cygheap-works.txt120
-rw-r--r--winsup/cygwin/how-cygtls-works.txt75
-rw-r--r--winsup/cygwin/how-fhandlers-work.txt75
-rw-r--r--winsup/cygwin/how-signals-work.txt158
-rw-r--r--winsup/cygwin/how-spawn-works.txt33
-rwxr-xr-xwinsup/cygwin/how-startup-shutdown-works.txt165
-rw-r--r--winsup/cygwin/how-to-debug-cygwin.txt128
-rw-r--r--winsup/cygwin/how-vfork-works.txt36
-rw-r--r--winsup/cygwin/i686.din656
-rw-r--r--winsup/cygwin/import/rexec.c391
-rw-r--r--winsup/cygwin/include/a.out.h455
-rw-r--r--winsup/cygwin/include/arpa/ftp.h109
-rw-r--r--winsup/cygwin/include/arpa/inet.h37
-rwxr-xr-xwinsup/cygwin/include/arpa/nameser.h563
-rwxr-xr-xwinsup/cygwin/include/arpa/nameser_compat.h188
-rw-r--r--winsup/cygwin/include/arpa/telnet.h322
-rw-r--r--winsup/cygwin/include/asm/byteorder.h88
-rw-r--r--winsup/cygwin/include/asm/socket.h76
-rw-r--r--winsup/cygwin/include/asm/types.h23
-rw-r--r--winsup/cygwin/include/attr/xattr.h46
-rw-r--r--winsup/cygwin/include/bits/endian.h25
-rw-r--r--winsup/cygwin/include/bits/wordsize.h11
-rw-r--r--winsup/cygwin/include/byteswap.h39
-rw-r--r--winsup/cygwin/include/cygwin/_types.h16
-rw-r--r--winsup/cygwin/include/cygwin/acl.h93
-rw-r--r--winsup/cygwin/include/cygwin/config.h102
-rw-r--r--winsup/cygwin/include/cygwin/core_dump.h73
-rw-r--r--winsup/cygwin/include/cygwin/cygwin_dll.h98
-rw-r--r--winsup/cygwin/include/cygwin/fs.h24
-rw-r--r--winsup/cygwin/include/cygwin/grp.h44
-rw-r--r--winsup/cygwin/include/cygwin/hdreg.h24
-rw-r--r--winsup/cygwin/include/cygwin/icmp.h1
-rw-r--r--winsup/cygwin/include/cygwin/if.h125
-rw-r--r--winsup/cygwin/include/cygwin/in.h271
-rw-r--r--winsup/cygwin/include/cygwin/in6.h127
-rw-r--r--winsup/cygwin/include/cygwin/in_systm.h34
-rw-r--r--winsup/cygwin/include/cygwin/ipc.h72
-rw-r--r--winsup/cygwin/include/cygwin/kd.h20
-rw-r--r--winsup/cygwin/include/cygwin/msg.h102
-rw-r--r--winsup/cygwin/include/cygwin/mtio.h316
-rw-r--r--winsup/cygwin/include/cygwin/rdevio.h42
-rw-r--r--winsup/cygwin/include/cygwin/sem.h128
-rw-r--r--winsup/cygwin/include/cygwin/shm.h109
-rw-r--r--winsup/cygwin/include/cygwin/signal.h407
-rw-r--r--winsup/cygwin/include/cygwin/socket.h323
-rw-r--r--winsup/cygwin/include/cygwin/sockios.h1
-rw-r--r--winsup/cygwin/include/cygwin/stat.h82
-rw-r--r--winsup/cygwin/include/cygwin/stdlib.h91
-rw-r--r--winsup/cygwin/include/cygwin/sys_time.h27
-rw-r--r--winsup/cygwin/include/cygwin/sysproto.h94
-rw-r--r--winsup/cygwin/include/cygwin/time.h42
-rw-r--r--winsup/cygwin/include/cygwin/types.h225
-rw-r--r--winsup/cygwin/include/cygwin/utmp.h40
-rw-r--r--winsup/cygwin/include/cygwin/version.h541
-rw-r--r--winsup/cygwin/include/cygwin/wait.h44
-rw-r--r--winsup/cygwin/include/dlfcn.h51
-rw-r--r--winsup/cygwin/include/elf.h41
-rw-r--r--winsup/cygwin/include/endian.h77
-rw-r--r--winsup/cygwin/include/err.h33
-rw-r--r--winsup/cygwin/include/error.h36
-rw-r--r--winsup/cygwin/include/fcntl.h55
-rw-r--r--winsup/cygwin/include/features.h35
-rwxr-xr-xwinsup/cygwin/include/fenv.h177
-rw-r--r--winsup/cygwin/include/fnmatch.h63
-rw-r--r--winsup/cygwin/include/fts.h147
-rw-r--r--winsup/cygwin/include/ftw.h63
-rw-r--r--winsup/cygwin/include/getopt.h92
-rw-r--r--winsup/cygwin/include/glob.h111
-rw-r--r--winsup/cygwin/include/icmp.h1
-rw-r--r--winsup/cygwin/include/ifaddrs.h57
-rw-r--r--winsup/cygwin/include/inttypes.h274
-rw-r--r--winsup/cygwin/include/io.h30
-rw-r--r--winsup/cygwin/include/lastlog.h22
-rw-r--r--winsup/cygwin/include/libgen.h23
-rw-r--r--winsup/cygwin/include/limits.h504
-rw-r--r--winsup/cygwin/include/machine/elf.h117
-rw-r--r--winsup/cygwin/include/machine/stdlib.h22
-rw-r--r--winsup/cygwin/include/mapi.h102
-rw-r--r--winsup/cygwin/include/memory.h17
-rw-r--r--winsup/cygwin/include/mntent.h59
-rw-r--r--winsup/cygwin/include/monetary.h39
-rw-r--r--winsup/cygwin/include/mqueue.h45
-rw-r--r--winsup/cygwin/include/net/if.h16
-rw-r--r--winsup/cygwin/include/netdb.h265
-rw-r--r--winsup/cygwin/include/netinet/in.h28
-rw-r--r--winsup/cygwin/include/netinet/in_systm.h16
-rw-r--r--winsup/cygwin/include/netinet/ip.h253
-rw-r--r--winsup/cygwin/include/netinet/ip6.h352
-rw-r--r--winsup/cygwin/include/netinet/ip_icmp.h16
-rw-r--r--winsup/cygwin/include/netinet/tcp.h137
-rw-r--r--winsup/cygwin/include/netinet/udp.h51
-rw-r--r--winsup/cygwin/include/paths.h35
-rw-r--r--winsup/cygwin/include/poll.h11
-rw-r--r--winsup/cygwin/include/process.h43
-rw-r--r--winsup/cygwin/include/pthread.h215
-rw-r--r--winsup/cygwin/include/pty.h20
-rw-r--r--winsup/cygwin/include/regex.h131
-rwxr-xr-xwinsup/cygwin/include/resolv.h461
-rw-r--r--winsup/cygwin/include/search.h76
-rw-r--r--winsup/cygwin/include/semaphore.h45
-rw-r--r--winsup/cygwin/include/stdint.h290
-rw-r--r--winsup/cygwin/include/sys/acl.h17
-rw-r--r--winsup/cygwin/include/sys/copying.dj41
-rw-r--r--winsup/cygwin/include/sys/cygwin.h435
-rw-r--r--winsup/cygwin/include/sys/dirent.h120
-rw-r--r--winsup/cygwin/include/sys/elf.h41
-rw-r--r--winsup/cygwin/include/sys/elf32.h245
-rw-r--r--winsup/cygwin/include/sys/elf64.h248
-rw-r--r--winsup/cygwin/include/sys/elf_common.h1110
-rw-r--r--winsup/cygwin/include/sys/elf_generic.h88
-rw-r--r--winsup/cygwin/include/sys/file.h55
-rw-r--r--winsup/cygwin/include/sys/ioctl.h69
-rw-r--r--winsup/cygwin/include/sys/ipc.h18
-rw-r--r--winsup/cygwin/include/sys/kd.h20
-rw-r--r--winsup/cygwin/include/sys/lock.h54
-rw-r--r--winsup/cygwin/include/sys/mman.h98
-rw-r--r--winsup/cygwin/include/sys/mount.h58
-rw-r--r--winsup/cygwin/include/sys/msg.h18
-rw-r--r--winsup/cygwin/include/sys/mtio.h18
-rw-r--r--winsup/cygwin/include/sys/param.h71
-rw-r--r--winsup/cygwin/include/sys/poll.h50
-rw-r--r--winsup/cygwin/include/sys/procfs.h18
-rw-r--r--winsup/cygwin/include/sys/quota.h239
-rw-r--r--winsup/cygwin/include/sys/resource.h84
-rw-r--r--winsup/cygwin/include/sys/select.h41
-rw-r--r--winsup/cygwin/include/sys/sem.h18
-rw-r--r--winsup/cygwin/include/sys/shm.h18
-rw-r--r--winsup/cygwin/include/sys/smallprint.h27
-rw-r--r--winsup/cygwin/include/sys/socket.h55
-rw-r--r--winsup/cygwin/include/sys/soundcard.h1287
-rw-r--r--winsup/cygwin/include/sys/statfs.h11
-rw-r--r--winsup/cygwin/include/sys/statvfs.h44
-rw-r--r--winsup/cygwin/include/sys/stdio.h42
-rw-r--r--winsup/cygwin/include/sys/strace.h147
-rw-r--r--winsup/cygwin/include/sys/sysinfo.h44
-rw-r--r--winsup/cygwin/include/sys/syslimits.h20
-rw-r--r--winsup/cygwin/include/sys/syslog.h143
-rw-r--r--winsup/cygwin/include/sys/sysmacros.h42
-rw-r--r--winsup/cygwin/include/sys/sysproto.h18
-rw-r--r--winsup/cygwin/include/sys/termio.h12
-rw-r--r--winsup/cygwin/include/sys/termios.h372
-rw-r--r--winsup/cygwin/include/sys/ttychars.h1
-rw-r--r--winsup/cygwin/include/sys/uio.h38
-rw-r--r--winsup/cygwin/include/sys/un.h29
-rw-r--r--winsup/cygwin/include/sys/utime.h30
-rw-r--r--winsup/cygwin/include/sys/utmp.h54
-rw-r--r--winsup/cygwin/include/sys/utsname.h33
-rw-r--r--winsup/cygwin/include/sys/vfs.h38
-rw-r--r--winsup/cygwin/include/sys/wait.h98
-rw-r--r--winsup/cygwin/include/sys/xattr.h18
-rw-r--r--winsup/cygwin/include/sysexits.h118
-rw-r--r--winsup/cygwin/include/syslog.h16
-rw-r--r--winsup/cygwin/include/termio.h16
-rw-r--r--winsup/cygwin/include/tzfile.h51
-rw-r--r--winsup/cygwin/include/utmpx.h55
-rw-r--r--winsup/cygwin/include/wait.h16
-rw-r--r--winsup/cygwin/init.cc103
-rw-r--r--winsup/cygwin/ioctl.cc63
-rw-r--r--winsup/cygwin/ipc.cc91
-rw-r--r--winsup/cygwin/kernel32.cc454
-rw-r--r--winsup/cygwin/lc_era.h28
-rw-r--r--winsup/cygwin/lc_msg.h315
-rw-r--r--winsup/cygwin/ldap.cc675
-rw-r--r--winsup/cygwin/ldap.h74
-rw-r--r--winsup/cygwin/lib/_cygwin_crt0_common.cc194
-rw-r--r--winsup/cygwin/lib/atexit.c49
-rw-r--r--winsup/cygwin/lib/crt0.h23
-rw-r--r--winsup/cygwin/lib/cygwin_attach_dll.c27
-rw-r--r--winsup/cygwin/lib/cygwin_crt0.c23
-rw-r--r--winsup/cygwin/lib/dll_entry.c17
-rw-r--r--winsup/cygwin/lib/dll_main.cc37
-rw-r--r--winsup/cygwin/lib/dso_handle.c12
-rw-r--r--winsup/cygwin/lib/libcmain.c43
-rw-r--r--winsup/cygwin/lib/premain0.c15
-rw-r--r--winsup/cygwin/lib/premain1.c15
-rw-r--r--winsup/cygwin/lib/premain2.c15
-rw-r--r--winsup/cygwin/lib/premain3.c15
-rw-r--r--winsup/cygwin/lib/pseudo-reloc-dummy.c10
-rw-r--r--winsup/cygwin/libc/arc4random.cc363
-rw-r--r--winsup/cygwin/libc/base64.c316
-rw-r--r--winsup/cygwin/libc/bsdlib.cc314
-rw-r--r--winsup/cygwin/libc/fnmatch.c293
-rw-r--r--winsup/cygwin/libc/fts.c1212
-rw-r--r--winsup/cygwin/libc/ftw.c107
-rw-r--r--winsup/cygwin/libc/getopt.c535
-rw-r--r--winsup/cygwin/libc/inet_addr.c223
-rw-r--r--winsup/cygwin/libc/inet_network.c119
-rw-r--r--winsup/cygwin/libc/minires-os-if.c587
-rw-r--r--winsup/cygwin/libc/minires.c1018
-rw-r--r--winsup/cygwin/libc/minires.h66
-rw-r--r--winsup/cygwin/libc/nftw.c126
-rw-r--r--winsup/cygwin/libc/rcmd.cc773
-rw-r--r--winsup/cygwin/libc/rexec.cc412
-rw-r--r--winsup/cygwin/libc/strfmon.c622
-rw-r--r--winsup/cygwin/libc/strptime.cc843
-rw-r--r--winsup/cygwin/libc/xsique.cc48
-rwxr-xr-xwinsup/cygwin/libstdcxx_wrapper.cc101
-rw-r--r--winsup/cygwin/localtime.cc2545
-rw-r--r--winsup/cygwin/lsearch.cc51
-rw-r--r--winsup/cygwin/malloc.cc6283
-rw-r--r--winsup/cygwin/malloc_wrapper.cc304
-rw-r--r--winsup/cygwin/mcount.c177
-rw-r--r--winsup/cygwin/mcountFunc.S115
-rw-r--r--winsup/cygwin/miscfuncs.cc883
-rw-r--r--winsup/cygwin/miscfuncs.h76
-rwxr-xr-xwinsup/cygwin/mkglobals_h28
-rwxr-xr-xwinsup/cygwin/mkimport101
-rwxr-xr-xwinsup/cygwin/mkstatic63
-rw-r--r--winsup/cygwin/mktemp.cc182
-rwxr-xr-xwinsup/cygwin/mkvers.sh169
-rw-r--r--winsup/cygwin/mmap.cc1940
-rw-r--r--winsup/cygwin/mmap_helper.h91
-rw-r--r--winsup/cygwin/mount.cc2000
-rw-r--r--winsup/cygwin/mount.h236
-rw-r--r--winsup/cygwin/msg.cc191
-rw-r--r--winsup/cygwin/mtinfo.h141
-rw-r--r--winsup/cygwin/net.cc3740
-rw-r--r--winsup/cygwin/netdb.cc408
-rw-r--r--winsup/cygwin/nfs.cc47
-rw-r--r--winsup/cygwin/nfs.h65
-rw-r--r--winsup/cygwin/nlsfuncs.cc1608
-rw-r--r--winsup/cygwin/ntdll.h1610
-rw-r--r--winsup/cygwin/ntea.cc559
-rw-r--r--winsup/cygwin/passwd.cc809
-rw-r--r--winsup/cygwin/path.cc4792
-rw-r--r--winsup/cygwin/path.h451
-rw-r--r--winsup/cygwin/perprocess.h32
-rw-r--r--winsup/cygwin/pinfo.cc1362
-rw-r--r--winsup/cygwin/pinfo.h291
-rw-r--r--winsup/cygwin/pipe.cc472
-rw-r--r--winsup/cygwin/poll.cc162
-rw-r--r--winsup/cygwin/posix_ipc.cc1240
-rw-r--r--winsup/cygwin/profil.c209
-rw-r--r--winsup/cygwin/profil.h55
-rw-r--r--winsup/cygwin/pseudo-reloc.cc385
-rw-r--r--winsup/cygwin/pthread.cc199
-rw-r--r--winsup/cygwin/pwdgrp.h262
-rw-r--r--winsup/cygwin/quotactl.cc340
-rw-r--r--winsup/cygwin/random.cc504
-rw-r--r--winsup/cygwin/regex/COPYRIGHT52
-rw-r--r--winsup/cygwin/regex/cname.h138
-rw-r--r--winsup/cygwin/regex/engine.c1197
-rw-r--r--winsup/cygwin/regex/regcomp.c1888
-rw-r--r--winsup/cygwin/regex/regerror.c190
-rw-r--r--winsup/cygwin/regex/regex.3727
-rw-r--r--winsup/cygwin/regex/regex.7480
-rw-r--r--winsup/cygwin/regex/regex2.h196
-rw-r--r--winsup/cygwin/regex/regexec.c252
-rw-r--r--winsup/cygwin/regex/regfree.c89
-rw-r--r--winsup/cygwin/regex/utils.h54
-rw-r--r--winsup/cygwin/registry.cc214
-rw-r--r--winsup/cygwin/registry.h39
-rw-r--r--winsup/cygwin/regparm.h21
-rw-r--r--winsup/cygwin/release/1.7.10126
-rw-r--r--winsup/cygwin/release/1.7.1129
-rw-r--r--winsup/cygwin/release/1.7.1221
-rw-r--r--winsup/cygwin/release/1.7.138
-rw-r--r--winsup/cygwin/release/1.7.1421
-rw-r--r--winsup/cygwin/release/1.7.1529
-rw-r--r--winsup/cygwin/release/1.7.1639
-rw-r--r--winsup/cygwin/release/1.7.1743
-rw-r--r--winsup/cygwin/release/1.7.1870
-rw-r--r--winsup/cygwin/release/1.7.1945
-rw-r--r--winsup/cygwin/release/1.7.209
-rw-r--r--winsup/cygwin/release/1.7.2131
-rw-r--r--winsup/cygwin/release/1.7.2242
-rw-r--r--winsup/cygwin/release/1.7.2325
-rw-r--r--winsup/cygwin/release/1.7.2413
-rw-r--r--winsup/cygwin/release/1.7.2527
-rw-r--r--winsup/cygwin/release/1.7.2671
-rw-r--r--winsup/cygwin/release/1.7.2719
-rw-r--r--winsup/cygwin/release/1.7.2855
-rw-r--r--winsup/cygwin/release/1.7.2944
-rw-r--r--winsup/cygwin/release/1.7.3043
-rw-r--r--winsup/cygwin/release/1.7.3142
-rw-r--r--winsup/cygwin/release/1.7.3223
-rw-r--r--winsup/cygwin/release/1.7.3380
-rw-r--r--winsup/cygwin/release/1.7.3463
-rw-r--r--winsup/cygwin/resource.cc202
-rw-r--r--winsup/cygwin/scandir.cc92
-rw-r--r--winsup/cygwin/sched.cc414
-rw-r--r--winsup/cygwin/sec_acl.cc1163
-rw-r--r--winsup/cygwin/sec_auth.cc1348
-rw-r--r--winsup/cygwin/sec_helper.cc704
-rw-r--r--winsup/cygwin/security.cc1208
-rw-r--r--winsup/cygwin/security.h557
-rw-r--r--winsup/cygwin/select.cc1739
-rw-r--r--winsup/cygwin/select.h110
-rw-r--r--winsup/cygwin/sem.cc144
-rw-r--r--winsup/cygwin/setlsapwd.cc101
-rw-r--r--winsup/cygwin/shared.cc359
-rw-r--r--winsup/cygwin/shared_info.h96
-rw-r--r--winsup/cygwin/shm.cc393
-rw-r--r--winsup/cygwin/signal.cc626
-rw-r--r--winsup/cygwin/sigproc.cc1362
-rw-r--r--winsup/cygwin/sigproc.h184
-rw-r--r--winsup/cygwin/smallprint.cc676
-rwxr-xr-xwinsup/cygwin/sortdin35
-rw-r--r--winsup/cygwin/spawn.cc1253
-rwxr-xr-xwinsup/cygwin/speclib83
-rw-r--r--winsup/cygwin/spinlock.h80
-rw-r--r--winsup/cygwin/strace.cc477
-rw-r--r--winsup/cygwin/strfuncs.cc712
-rw-r--r--winsup/cygwin/string.h94
-rw-r--r--winsup/cygwin/strsep.cc64
-rw-r--r--winsup/cygwin/strsig.cc186
-rw-r--r--winsup/cygwin/sync.cc145
-rw-r--r--winsup/cygwin/sync.h70
-rw-r--r--winsup/cygwin/syscalls.cc4853
-rw-r--r--winsup/cygwin/sysconf.cc441
-rw-r--r--winsup/cygwin/syslog.cc491
-rw-r--r--winsup/cygwin/termios.cc354
-rw-r--r--winsup/cygwin/textmode.c23
-rw-r--r--winsup/cygwin/textreadmode.c27
-rw-r--r--winsup/cygwin/thread.cc3883
-rw-r--r--winsup/cygwin/thread.h711
-rw-r--r--winsup/cygwin/timer.cc498
-rw-r--r--winsup/cygwin/times.cc758
-rw-r--r--winsup/cygwin/tls_pbuf.cc45
-rw-r--r--winsup/cygwin/tls_pbuf.h41
-rw-r--r--winsup/cygwin/tlsoffsets.h117
-rw-r--r--winsup/cygwin/tlsoffsets64.h117
-rw-r--r--winsup/cygwin/tmpbuf.h27
-rw-r--r--winsup/cygwin/tty.cc283
-rw-r--r--winsup/cygwin/tty.h170
-rw-r--r--winsup/cygwin/tz_posixrules.h48
-rw-r--r--winsup/cygwin/uinfo.cc2442
-rw-r--r--winsup/cygwin/uname.cc98
-rwxr-xr-xwinsup/cygwin/update-copyright89
-rw-r--r--winsup/cygwin/wait.cc116
-rw-r--r--winsup/cygwin/wchar.h69
-rw-r--r--winsup/cygwin/winbase.h57
-rw-r--r--winsup/cygwin/wincap.cc258
-rw-r--r--winsup/cygwin/wincap.h98
-rw-r--r--winsup/cygwin/window.cc133
-rw-r--r--winsup/cygwin/winf.cc153
-rw-r--r--winsup/cygwin/winf.h98
-rw-r--r--winsup/cygwin/wininfo.h24
-rw-r--r--winsup/cygwin/winlean.h97
-rw-r--r--winsup/cygwin/winsup.h318
-rw-r--r--winsup/cygwin/winver.rc50
-rw-r--r--winsup/cygwin/wow64.cc217
-rw-r--r--winsup/cygwin/wow64.h21
-rw-r--r--winsup/cygwin/x86_64.din20
-rw-r--r--winsup/doc/.cvsignore14
-rw-r--r--winsup/doc/ChangeLog2755
-rw-r--r--winsup/doc/Makefile.in108
-rw-r--r--winsup/doc/README29
-rw-r--r--winsup/doc/Wishlist111
-rw-r--r--winsup/doc/aclocal.m4875
-rwxr-xr-xwinsup/doc/bodysnatcher.pl44
-rwxr-xr-xwinsup/doc/configure4116
-rw-r--r--winsup/doc/configure.ac26
-rw-r--r--winsup/doc/cygserver.xml239
-rw-r--r--winsup/doc/cygwin-api.xml26
-rw-r--r--winsup/doc/cygwin-ug-net.xml16
-rw-r--r--winsup/doc/cygwin.xsl13
-rw-r--r--winsup/doc/cygwinenv.xml264
-rw-r--r--winsup/doc/dll.xml145
-rw-r--r--winsup/doc/effectively.xml184
-rw-r--r--winsup/doc/faq-api.xml329
-rw-r--r--winsup/doc/faq-copyright.xml17
-rw-r--r--winsup/doc/faq-programming.xml1124
-rw-r--r--winsup/doc/faq-resources.xml58
-rw-r--r--winsup/doc/faq-setup.xml605
-rw-r--r--winsup/doc/faq-using.xml1231
-rw-r--r--winsup/doc/faq-what.xml156
-rw-r--r--winsup/doc/faq.xml21
-rw-r--r--winsup/doc/fhandler-tut.txt94
-rw-r--r--winsup/doc/filemodes.xml37
-rw-r--r--winsup/doc/fo.xsl32
-rw-r--r--winsup/doc/gcc.xml142
-rw-r--r--winsup/doc/gdb.xml88
-rw-r--r--winsup/doc/highlights.xml387
-rw-r--r--winsup/doc/legal.xml32
-rw-r--r--winsup/doc/logon-funcs.xml56
-rw-r--r--winsup/doc/misc-funcs.xml64
-rw-r--r--winsup/doc/new-features.xml1574
-rw-r--r--winsup/doc/ntsec.xml2605
-rw-r--r--winsup/doc/ov-ex-unix.xml54
-rw-r--r--winsup/doc/ov-ex-win.xml47
-rw-r--r--winsup/doc/overview.xml131
-rw-r--r--winsup/doc/path.xml190
-rw-r--r--winsup/doc/pathnames.xml570
-rw-r--r--winsup/doc/posix.xml1605
-rw-r--r--winsup/doc/programming.xml12
-rw-r--r--winsup/doc/setup-env.xml129
-rw-r--r--winsup/doc/setup-files.xml85
-rw-r--r--winsup/doc/setup-locale.xml432
-rw-r--r--winsup/doc/setup-maxmem.xml66
-rw-r--r--winsup/doc/setup-net.xml291
-rw-r--r--winsup/doc/specialnames.xml513
-rw-r--r--winsup/doc/textbinary.xml196
-rw-r--r--winsup/doc/ug-info.xml36
-rw-r--r--winsup/doc/using.xml21
-rw-r--r--winsup/doc/utils.xml2115
-rw-r--r--winsup/doc/windres.xml172
-rwxr-xr-xwinsup/doc/xidepend34
-rwxr-xr-xwinsup/install-sh520
-rw-r--r--winsup/lsaauth/ChangeLog170
-rw-r--r--winsup/lsaauth/ChangeLog.64bit13
-rw-r--r--winsup/lsaauth/Makefile.in95
-rw-r--r--winsup/lsaauth/aclocal.m4875
-rwxr-xr-xwinsup/lsaauth/configure4226
-rw-r--r--winsup/lsaauth/configure.ac41
-rwxr-xr-xwinsup/lsaauth/cyglsa-config123
-rw-r--r--winsup/lsaauth/cyglsa.c633
-rw-r--r--winsup/lsaauth/cyglsa.din9
-rw-r--r--winsup/lsaauth/cyglsa64.def9
-rw-r--r--winsup/testsuite/ChangeLog795
-rw-r--r--winsup/testsuite/Makefile.in170
-rw-r--r--winsup/testsuite/README40
-rw-r--r--winsup/testsuite/aclocal.m4831
-rw-r--r--winsup/testsuite/config/default.exp13
-rw-r--r--winsup/testsuite/configure3950
-rwxr-xr-xwinsup/testsuite/configure.ac21
-rw-r--r--winsup/testsuite/cygrun.c69
-rw-r--r--winsup/testsuite/libltp/include/dataascii.h65
-rw-r--r--winsup/testsuite/libltp/include/databin.h44
-rw-r--r--winsup/testsuite/libltp/include/file_lock.h40
-rw-r--r--winsup/testsuite/libltp/include/forker.h63
-rw-r--r--winsup/testsuite/libltp/include/open_flags.h73
-rw-r--r--winsup/testsuite/libltp/include/pattern.h90
-rw-r--r--winsup/testsuite/libltp/include/random_range.h45
-rw-r--r--winsup/testsuite/libltp/include/rmobj.h12
-rw-r--r--winsup/testsuite/libltp/include/search_path.h36
-rw-r--r--winsup/testsuite/libltp/include/str_to_bytes.h39
-rw-r--r--winsup/testsuite/libltp/include/string_to_tokens.h48
-rw-r--r--winsup/testsuite/libltp/include/test.h232
-rw-r--r--winsup/testsuite/libltp/include/tlibio.h148
-rw-r--r--winsup/testsuite/libltp/include/usctest.h319
-rw-r--r--winsup/testsuite/libltp/include/write_log.h169
-rw-r--r--winsup/testsuite/libltp/lib/dataascii.c218
-rw-r--r--winsup/testsuite/libltp/lib/databin.c298
-rw-r--r--winsup/testsuite/libltp/lib/datapid.c374
-rw-r--r--winsup/testsuite/libltp/lib/forker.c286
-rw-r--r--winsup/testsuite/libltp/lib/get_high_address.c46
-rw-r--r--winsup/testsuite/libltp/lib/libtestsuite.c70
-rw-r--r--winsup/testsuite/libltp/lib/open_flags.c330
-rw-r--r--winsup/testsuite/libltp/lib/parse_opts.c876
-rw-r--r--winsup/testsuite/libltp/lib/pattern.c168
-rw-r--r--winsup/testsuite/libltp/lib/rmobj.c211
-rw-r--r--winsup/testsuite/libltp/lib/search_path.c249
-rw-r--r--winsup/testsuite/libltp/lib/str_to_bytes.c211
-rw-r--r--winsup/testsuite/libltp/lib/string_to_tokens.c109
-rw-r--r--winsup/testsuite/libltp/lib/tst_res.c960
-rw-r--r--winsup/testsuite/libltp/lib/tst_sig.c220
-rw-r--r--winsup/testsuite/libltp/lib/tst_tmpdir.c347
-rw-r--r--winsup/testsuite/libltp/lib/write_log.c468
-rw-r--r--winsup/testsuite/winsup.api/checksignal.c91
-rw-r--r--winsup/testsuite/winsup.api/crlf.c527
-rw-r--r--winsup/testsuite/winsup.api/cygload.cc628
-rw-r--r--winsup/testsuite/winsup.api/cygload.exp40
-rw-r--r--winsup/testsuite/winsup.api/cygload.h158
-rw-r--r--winsup/testsuite/winsup.api/devdsp.c783
-rw-r--r--winsup/testsuite/winsup.api/devdsp_okay.h531
-rw-r--r--winsup/testsuite/winsup.api/devzero.c115
-rw-r--r--winsup/testsuite/winsup.api/iospeed.c115
-rw-r--r--winsup/testsuite/winsup.api/known_bugs.tcl4
-rw-r--r--winsup/testsuite/winsup.api/ltp/access01.c300
-rw-r--r--winsup/testsuite/winsup.api/ltp/access03.c506
-rw-r--r--winsup/testsuite/winsup.api/ltp/access04.c241
-rw-r--r--winsup/testsuite/winsup.api/ltp/access05.c424
-rw-r--r--winsup/testsuite/winsup.api/ltp/alarm01.c226
-rw-r--r--winsup/testsuite/winsup.api/ltp/alarm02.c240
-rw-r--r--winsup/testsuite/winsup.api/ltp/alarm03.c229
-rw-r--r--winsup/testsuite/winsup.api/ltp/alarm07.c201
-rw-r--r--winsup/testsuite/winsup.api/ltp/asyncio02.c364
-rw-r--r--winsup/testsuite/winsup.api/ltp/chdir02.c219
-rw-r--r--winsup/testsuite/winsup.api/ltp/chdir04.c188
-rw-r--r--winsup/testsuite/winsup.api/ltp/chmod01.c230
-rw-r--r--winsup/testsuite/winsup.api/ltp/chmod02.c260
-rw-r--r--winsup/testsuite/winsup.api/ltp/chown01.c244
-rw-r--r--winsup/testsuite/winsup.api/ltp/close01.c201
-rw-r--r--winsup/testsuite/winsup.api/ltp/close02.c143
-rw-r--r--winsup/testsuite/winsup.api/ltp/close08.c241
-rw-r--r--winsup/testsuite/winsup.api/ltp/creat01.c207
-rw-r--r--winsup/testsuite/winsup.api/ltp/creat03.c154
-rw-r--r--winsup/testsuite/winsup.api/ltp/creat09.c246
-rw-r--r--winsup/testsuite/winsup.api/ltp/dup01.c261
-rw-r--r--winsup/testsuite/winsup.api/ltp/dup02.c246
-rw-r--r--winsup/testsuite/winsup.api/ltp/dup03.c291
-rw-r--r--winsup/testsuite/winsup.api/ltp/dup04.c297
-rw-r--r--winsup/testsuite/winsup.api/ltp/dup05.c266
-rw-r--r--winsup/testsuite/winsup.api/ltp/execl01.c258
-rw-r--r--winsup/testsuite/winsup.api/ltp/execle01.c257
-rw-r--r--winsup/testsuite/winsup.api/ltp/execlp01.c256
-rw-r--r--winsup/testsuite/winsup.api/ltp/execv01.c254
-rw-r--r--winsup/testsuite/winsup.api/ltp/execve01.c258
-rw-r--r--winsup/testsuite/winsup.api/ltp/execvp01.c257
-rw-r--r--winsup/testsuite/winsup.api/ltp/exit01.c165
-rw-r--r--winsup/testsuite/winsup.api/ltp/exit02.c228
-rw-r--r--winsup/testsuite/winsup.api/ltp/fchdir01.c249
-rw-r--r--winsup/testsuite/winsup.api/ltp/fchdir02.c160
-rw-r--r--winsup/testsuite/winsup.api/ltp/fchmod01.c241
-rw-r--r--winsup/testsuite/winsup.api/ltp/fchown01.c234
-rw-r--r--winsup/testsuite/winsup.api/ltp/fcntl02.c244
-rw-r--r--winsup/testsuite/winsup.api/ltp/fcntl03.c240
-rw-r--r--winsup/testsuite/winsup.api/ltp/fcntl04.c239
-rw-r--r--winsup/testsuite/winsup.api/ltp/fcntl05.c249
-rw-r--r--winsup/testsuite/winsup.api/ltp/fcntl07.c423
-rw-r--r--winsup/testsuite/winsup.api/ltp/fcntl07B.c422
-rw-r--r--winsup/testsuite/winsup.api/ltp/fcntl08.c250
-rw-r--r--winsup/testsuite/winsup.api/ltp/fcntl09.c278
-rw-r--r--winsup/testsuite/winsup.api/ltp/fcntl10.c284
-rw-r--r--winsup/testsuite/winsup.api/ltp/fork01.c316
-rw-r--r--winsup/testsuite/winsup.api/ltp/fork02.c139
-rw-r--r--winsup/testsuite/winsup.api/ltp/fork03.c165
-rw-r--r--winsup/testsuite/winsup.api/ltp/fork04.c403
-rw-r--r--winsup/testsuite/winsup.api/ltp/fork06.c153
-rw-r--r--winsup/testsuite/winsup.api/ltp/fork07.c200
-rw-r--r--winsup/testsuite/winsup.api/ltp/fork09.c229
-rw-r--r--winsup/testsuite/winsup.api/ltp/fork10.c216
-rw-r--r--winsup/testsuite/winsup.api/ltp/fork11.c141
-rw-r--r--winsup/testsuite/winsup.api/ltp/fpathconf01.c256
-rw-r--r--winsup/testsuite/winsup.api/ltp/fstat01.c237
-rw-r--r--winsup/testsuite/winsup.api/ltp/fstat02.c244
-rw-r--r--winsup/testsuite/winsup.api/ltp/fstat03.c189
-rw-r--r--winsup/testsuite/winsup.api/ltp/fstat04.c244
-rw-r--r--winsup/testsuite/winsup.api/ltp/fsync01.c248
-rw-r--r--winsup/testsuite/winsup.api/ltp/ftruncate01.c244
-rw-r--r--winsup/testsuite/winsup.api/ltp/ftruncate02.c313
-rw-r--r--winsup/testsuite/winsup.api/ltp/ftruncate03.c324
-rw-r--r--winsup/testsuite/winsup.api/ltp/getegid01.c226
-rw-r--r--winsup/testsuite/winsup.api/ltp/geteuid01.c226
-rw-r--r--winsup/testsuite/winsup.api/ltp/getgid01.c219
-rw-r--r--winsup/testsuite/winsup.api/ltp/getgid02.c159
-rw-r--r--winsup/testsuite/winsup.api/ltp/getgid03.c158
-rw-r--r--winsup/testsuite/winsup.api/ltp/getgroups01.c314
-rw-r--r--winsup/testsuite/winsup.api/ltp/getgroups02.c226
-rw-r--r--winsup/testsuite/winsup.api/ltp/gethostid01.c224
-rw-r--r--winsup/testsuite/winsup.api/ltp/gethostname01.c226
-rw-r--r--winsup/testsuite/winsup.api/ltp/getpgid01.c236
-rw-r--r--winsup/testsuite/winsup.api/ltp/getpgid02.c172
-rw-r--r--winsup/testsuite/winsup.api/ltp/getpgrp01.c219
-rw-r--r--winsup/testsuite/winsup.api/ltp/getpid01.c217
-rw-r--r--winsup/testsuite/winsup.api/ltp/getpid02.c186
-rw-r--r--winsup/testsuite/winsup.api/ltp/getppid01.c219
-rw-r--r--winsup/testsuite/winsup.api/ltp/getppid02.c148
-rw-r--r--winsup/testsuite/winsup.api/ltp/getuid01.c219
-rw-r--r--winsup/testsuite/winsup.api/ltp/getuid02.c137
-rw-r--r--winsup/testsuite/winsup.api/ltp/getuid03.c138
-rw-r--r--winsup/testsuite/winsup.api/ltp/kill01.c162
-rw-r--r--winsup/testsuite/winsup.api/ltp/kill02.c857
-rw-r--r--winsup/testsuite/winsup.api/ltp/kill03.c170
-rw-r--r--winsup/testsuite/winsup.api/ltp/kill04.c181
-rw-r--r--winsup/testsuite/winsup.api/ltp/kill09.c258
-rw-r--r--winsup/testsuite/winsup.api/ltp/link02.c263
-rw-r--r--winsup/testsuite/winsup.api/ltp/link03.c330
-rw-r--r--winsup/testsuite/winsup.api/ltp/link04.c426
-rw-r--r--winsup/testsuite/winsup.api/ltp/link05.c351
-rw-r--r--winsup/testsuite/winsup.api/ltp/lseek01.c255
-rw-r--r--winsup/testsuite/winsup.api/ltp/lseek02.c242
-rw-r--r--winsup/testsuite/winsup.api/ltp/lseek03.c289
-rw-r--r--winsup/testsuite/winsup.api/ltp/lseek04.c256
-rw-r--r--winsup/testsuite/winsup.api/ltp/lseek05.c252
-rw-r--r--winsup/testsuite/winsup.api/ltp/lseek06.c235
-rw-r--r--winsup/testsuite/winsup.api/ltp/lseek07.c286
-rw-r--r--winsup/testsuite/winsup.api/ltp/lseek08.c240
-rw-r--r--winsup/testsuite/winsup.api/ltp/lseek09.c266
-rw-r--r--winsup/testsuite/winsup.api/ltp/lseek10.c344
-rw-r--r--winsup/testsuite/winsup.api/ltp/lstat02.c253
-rw-r--r--winsup/testsuite/winsup.api/ltp/mkdir01.c270
-rw-r--r--winsup/testsuite/winsup.api/ltp/mkdir08.c235
-rw-r--r--winsup/testsuite/winsup.api/ltp/mknod01.c275
-rw-r--r--winsup/testsuite/winsup.api/ltp/mmap001.c203
-rw-r--r--winsup/testsuite/winsup.api/ltp/mmap02.c291
-rw-r--r--winsup/testsuite/winsup.api/ltp/mmap03.c290
-rw-r--r--winsup/testsuite/winsup.api/ltp/mmap04.c291
-rw-r--r--winsup/testsuite/winsup.api/ltp/mmap05.c301
-rw-r--r--winsup/testsuite/winsup.api/ltp/mmap06.c234
-rw-r--r--winsup/testsuite/winsup.api/ltp/mmap07.c233
-rw-r--r--winsup/testsuite/winsup.api/ltp/mmap08.c234
-rw-r--r--winsup/testsuite/winsup.api/ltp/munmap01.c281
-rw-r--r--winsup/testsuite/winsup.api/ltp/munmap02.c306
-rw-r--r--winsup/testsuite/winsup.api/ltp/nice05.c219
-rw-r--r--winsup/testsuite/winsup.api/ltp/open02.c146
-rw-r--r--winsup/testsuite/winsup.api/ltp/open03.c243
-rw-r--r--winsup/testsuite/winsup.api/ltp/pathconf01.c245
-rw-r--r--winsup/testsuite/winsup.api/ltp/pause01.c229
-rw-r--r--winsup/testsuite/winsup.api/ltp/pipe01.c156
-rw-r--r--winsup/testsuite/winsup.api/ltp/pipe08.c158
-rw-r--r--winsup/testsuite/winsup.api/ltp/pipe09.c230
-rw-r--r--winsup/testsuite/winsup.api/ltp/pipe10.c167
-rw-r--r--winsup/testsuite/winsup.api/ltp/pipe11.c227
-rw-r--r--winsup/testsuite/winsup.api/ltp/poll01.c250
-rw-r--r--winsup/testsuite/winsup.api/ltp/read01.c280
-rw-r--r--winsup/testsuite/winsup.api/ltp/read04.c174
-rw-r--r--winsup/testsuite/winsup.api/ltp/readdir01.c350
-rw-r--r--winsup/testsuite/winsup.api/ltp/readlink01.c229
-rw-r--r--winsup/testsuite/winsup.api/ltp/readlink02.c244
-rw-r--r--winsup/testsuite/winsup.api/ltp/readlink03.c360
-rw-r--r--winsup/testsuite/winsup.api/ltp/rename01.c263
-rw-r--r--winsup/testsuite/winsup.api/ltp/rename02.c251
-rw-r--r--winsup/testsuite/winsup.api/ltp/rename08.c205
-rw-r--r--winsup/testsuite/winsup.api/ltp/rename10.c203
-rw-r--r--winsup/testsuite/winsup.api/ltp/rmdir01.c189
-rw-r--r--winsup/testsuite/winsup.api/ltp/rmdir04.c236
-rw-r--r--winsup/testsuite/winsup.api/ltp/rmdir05.c447
-rw-r--r--winsup/testsuite/winsup.api/ltp/sbrk01.c279
-rw-r--r--winsup/testsuite/winsup.api/ltp/select01.c276
-rw-r--r--winsup/testsuite/winsup.api/ltp/select02.c268
-rw-r--r--winsup/testsuite/winsup.api/ltp/select03.c282
-rw-r--r--winsup/testsuite/winsup.api/ltp/setgid01.c219
-rw-r--r--winsup/testsuite/winsup.api/ltp/setgroups01.c228
-rw-r--r--winsup/testsuite/winsup.api/ltp/setpgid01.c238
-rw-r--r--winsup/testsuite/winsup.api/ltp/setregid01.c338
-rw-r--r--winsup/testsuite/winsup.api/ltp/setreuid01.c338
-rw-r--r--winsup/testsuite/winsup.api/ltp/setuid01.c225
-rw-r--r--winsup/testsuite/winsup.api/ltp/setuid02.c240
-rw-r--r--winsup/testsuite/winsup.api/ltp/signal03.c663
-rw-r--r--winsup/testsuite/winsup.api/ltp/stat01.c267
-rw-r--r--winsup/testsuite/winsup.api/ltp/stat02.c276
-rw-r--r--winsup/testsuite/winsup.api/ltp/stat03.c391
-rw-r--r--winsup/testsuite/winsup.api/ltp/stat05.c241
-rw-r--r--winsup/testsuite/winsup.api/ltp/stat06.c377
-rw-r--r--winsup/testsuite/winsup.api/ltp/symlink01.c2032
-rw-r--r--winsup/testsuite/winsup.api/ltp/symlink02.c245
-rw-r--r--winsup/testsuite/winsup.api/ltp/symlink03.c404
-rw-r--r--winsup/testsuite/winsup.api/ltp/symlink04.c238
-rw-r--r--winsup/testsuite/winsup.api/ltp/symlink05.c222
-rw-r--r--winsup/testsuite/winsup.api/ltp/sync01.c216
-rw-r--r--winsup/testsuite/winsup.api/ltp/sync02.c238
-rw-r--r--winsup/testsuite/winsup.api/ltp/time01.c218
-rw-r--r--winsup/testsuite/winsup.api/ltp/time02.c182
-rw-r--r--winsup/testsuite/winsup.api/ltp/times01.c222
-rw-r--r--winsup/testsuite/winsup.api/ltp/times02.c136
-rw-r--r--winsup/testsuite/winsup.api/ltp/times03.c247
-rw-r--r--winsup/testsuite/winsup.api/ltp/truncate01.c262
-rw-r--r--winsup/testsuite/winsup.api/ltp/truncate02.c335
-rw-r--r--winsup/testsuite/winsup.api/ltp/ulimit01.c273
-rw-r--r--winsup/testsuite/winsup.api/ltp/umask01.c220
-rw-r--r--winsup/testsuite/winsup.api/ltp/umask02.c135
-rw-r--r--winsup/testsuite/winsup.api/ltp/umask03.c170
-rw-r--r--winsup/testsuite/winsup.api/ltp/uname01.c221
-rw-r--r--winsup/testsuite/winsup.api/ltp/unlink05.c246
-rw-r--r--winsup/testsuite/winsup.api/ltp/unlink06.c254
-rw-r--r--winsup/testsuite/winsup.api/ltp/unlink07.c328
-rw-r--r--winsup/testsuite/winsup.api/ltp/unlink08.c432
-rw-r--r--winsup/testsuite/winsup.api/ltp/vfork01.c400
-rw-r--r--winsup/testsuite/winsup.api/ltp/wait02.c230
-rw-r--r--winsup/testsuite/winsup.api/ltp/wait401.c188
-rw-r--r--winsup/testsuite/winsup.api/ltp/wait402.c203
-rw-r--r--winsup/testsuite/winsup.api/ltp/write01.c250
-rw-r--r--winsup/testsuite/winsup.api/ltp/write02.c165
-rw-r--r--winsup/testsuite/winsup.api/ltp/write03.c192
-rw-r--r--winsup/testsuite/winsup.api/mmaptest01.c176
-rw-r--r--winsup/testsuite/winsup.api/mmaptest02.c190
-rw-r--r--winsup/testsuite/winsup.api/mmaptest03.c154
-rw-r--r--winsup/testsuite/winsup.api/mmaptest04.c103
-rw-r--r--winsup/testsuite/winsup.api/msgtest.c348
-rw-r--r--winsup/testsuite/winsup.api/nullgetcwd.c17
-rw-r--r--winsup/testsuite/winsup.api/pthread/cancel1.c147
-rw-r--r--winsup/testsuite/winsup.api/pthread/cancel10.c68
-rw-r--r--winsup/testsuite/winsup.api/pthread/cancel11.c74
-rw-r--r--winsup/testsuite/winsup.api/pthread/cancel12.c69
-rw-r--r--winsup/testsuite/winsup.api/pthread/cancel2.c181
-rw-r--r--winsup/testsuite/winsup.api/pthread/cancel3.c166
-rw-r--r--winsup/testsuite/winsup.api/pthread/cancel4.c172
-rw-r--r--winsup/testsuite/winsup.api/pthread/cancel5.c165
-rw-r--r--winsup/testsuite/winsup.api/pthread/cancel6.c62
-rw-r--r--winsup/testsuite/winsup.api/pthread/cancel7.c71
-rw-r--r--winsup/testsuite/winsup.api/pthread/cancel8.c71
-rw-r--r--winsup/testsuite/winsup.api/pthread/cancel9.c81
-rw-r--r--winsup/testsuite/winsup.api/pthread/cleanup2.c157
-rw-r--r--winsup/testsuite/winsup.api/pthread/cleanup3.c160
-rw-r--r--winsup/testsuite/winsup.api/pthread/condvar1.c65
-rw-r--r--winsup/testsuite/winsup.api/pthread/condvar2.c80
-rw-r--r--winsup/testsuite/winsup.api/pthread/condvar2_1.c107
-rw-r--r--winsup/testsuite/winsup.api/pthread/condvar3.c115
-rw-r--r--winsup/testsuite/winsup.api/pthread/condvar3_1.c145
-rw-r--r--winsup/testsuite/winsup.api/pthread/condvar3_2.c139
-rw-r--r--winsup/testsuite/winsup.api/pthread/condvar3_3.c100
-rw-r--r--winsup/testsuite/winsup.api/pthread/condvar4.c137
-rw-r--r--winsup/testsuite/winsup.api/pthread/condvar5.c136
-rw-r--r--winsup/testsuite/winsup.api/pthread/condvar6.c209
-rw-r--r--winsup/testsuite/winsup.api/pthread/condvar7.c227
-rw-r--r--winsup/testsuite/winsup.api/pthread/condvar8.c221
-rw-r--r--winsup/testsuite/winsup.api/pthread/condvar9.c239
-rw-r--r--winsup/testsuite/winsup.api/pthread/count1.c62
-rw-r--r--winsup/testsuite/winsup.api/pthread/create1.c34
-rw-r--r--winsup/testsuite/winsup.api/pthread/create2.c74
-rw-r--r--winsup/testsuite/winsup.api/pthread/equal1.c34
-rw-r--r--winsup/testsuite/winsup.api/pthread/exit1.c18
-rw-r--r--winsup/testsuite/winsup.api/pthread/exit2.c30
-rw-r--r--winsup/testsuite/winsup.api/pthread/exit3.c34
-rw-r--r--winsup/testsuite/winsup.api/pthread/inherit1.c99
-rw-r--r--winsup/testsuite/winsup.api/pthread/join0.c40
-rw-r--r--winsup/testsuite/winsup.api/pthread/join1.c51
-rw-r--r--winsup/testsuite/winsup.api/pthread/join2.c41
-rw-r--r--winsup/testsuite/winsup.api/pthread/mainthreadexits.c48
-rw-r--r--winsup/testsuite/winsup.api/pthread/mutex1.c36
-rw-r--r--winsup/testsuite/winsup.api/pthread/mutex1d.c42
-rw-r--r--winsup/testsuite/winsup.api/pthread/mutex1e.c42
-rw-r--r--winsup/testsuite/winsup.api/pthread/mutex1n.c42
-rw-r--r--winsup/testsuite/winsup.api/pthread/mutex1r.c42
-rw-r--r--winsup/testsuite/winsup.api/pthread/mutex2.c34
-rw-r--r--winsup/testsuite/winsup.api/pthread/mutex3.c43
-rw-r--r--winsup/testsuite/winsup.api/pthread/mutex4.c67
-rw-r--r--winsup/testsuite/winsup.api/pthread/mutex5.c30
-rw-r--r--winsup/testsuite/winsup.api/pthread/mutex6d.c71
-rw-r--r--winsup/testsuite/winsup.api/pthread/mutex6e.c70
-rw-r--r--winsup/testsuite/winsup.api/pthread/mutex6n.c72
-rw-r--r--winsup/testsuite/winsup.api/pthread/mutex6r.c68
-rw-r--r--winsup/testsuite/winsup.api/pthread/mutex7.c50
-rw-r--r--winsup/testsuite/winsup.api/pthread/mutex7d.c51
-rw-r--r--winsup/testsuite/winsup.api/pthread/mutex7e.c70
-rw-r--r--winsup/testsuite/winsup.api/pthread/mutex7n.c61
-rw-r--r--winsup/testsuite/winsup.api/pthread/mutex7r.c68
-rw-r--r--winsup/testsuite/winsup.api/pthread/mutex8e.c35
-rw-r--r--winsup/testsuite/winsup.api/pthread/mutex8n.c60
-rw-r--r--winsup/testsuite/winsup.api/pthread/mutex8r.c37
-rw-r--r--winsup/testsuite/winsup.api/pthread/once1.c45
-rw-r--r--winsup/testsuite/winsup.api/pthread/priority1.c78
-rw-r--r--winsup/testsuite/winsup.api/pthread/priority2.c80
-rw-r--r--winsup/testsuite/winsup.api/pthread/rwlock1.c29
-rw-r--r--winsup/testsuite/winsup.api/pthread/rwlock2.c34
-rw-r--r--winsup/testsuite/winsup.api/pthread/rwlock3.c45
-rw-r--r--winsup/testsuite/winsup.api/pthread/rwlock4.c44
-rw-r--r--winsup/testsuite/winsup.api/pthread/rwlock5.c47
-rw-r--r--winsup/testsuite/winsup.api/pthread/rwlock6.c69
-rw-r--r--winsup/testsuite/winsup.api/pthread/rwlock7.c190
-rw-r--r--winsup/testsuite/winsup.api/pthread/self1.c26
-rw-r--r--winsup/testsuite/winsup.api/pthread/self2.c46
-rw-r--r--winsup/testsuite/winsup.api/pthread/test.h102
-rw-r--r--winsup/testsuite/winsup.api/pthread/threadidafterfork.c50
-rw-r--r--winsup/testsuite/winsup.api/pthread/tsd1.c170
-rw-r--r--winsup/testsuite/winsup.api/resethand.c36
-rw-r--r--winsup/testsuite/winsup.api/samples/sample-fail.c5
-rw-r--r--winsup/testsuite/winsup.api/samples/sample-miscompile.c1
-rw-r--r--winsup/testsuite/winsup.api/samples/sample-pass.c5
-rw-r--r--winsup/testsuite/winsup.api/semtest.c348
-rw-r--r--winsup/testsuite/winsup.api/shmtest.c293
-rw-r--r--winsup/testsuite/winsup.api/sigchld.c22
-rwxr-xr-xwinsup/testsuite/winsup.api/signal-into-win32-api.c58
-rw-r--r--winsup/testsuite/winsup.api/systemcall.c68
-rw-r--r--winsup/testsuite/winsup.api/user_malloc.c216
-rw-r--r--winsup/testsuite/winsup.api/waitpid.c24
-rw-r--r--winsup/testsuite/winsup.api/winsup.exp85
-rw-r--r--winsup/utils/COPYING.dumper340
-rw-r--r--winsup/utils/ChangeLog4103
-rw-r--r--winsup/utils/ChangeLog-2000347
-rw-r--r--winsup/utils/ChangeLog.64bit85
-rw-r--r--winsup/utils/Makefile.in196
-rw-r--r--winsup/utils/aclocal.m497
-rwxr-xr-xwinsup/utils/autogen.sh4
-rw-r--r--winsup/utils/bloda.cc424
-rwxr-xr-xwinsup/utils/configure4482
-rw-r--r--winsup/utils/configure.ac43
-rw-r--r--winsup/utils/cygcheck.cc2481
-rw-r--r--winsup/utils/cygpath.cc1057
-rw-r--r--winsup/utils/cygwin-console-helper.cc13
-rw-r--r--winsup/utils/dump_setup.cc615
-rw-r--r--winsup/utils/dumper.cc950
-rw-r--r--winsup/utils/dumper.h142
-rw-r--r--winsup/utils/getconf.c605
-rw-r--r--winsup/utils/getfacl.c247
-rw-r--r--winsup/utils/kill.cc288
-rw-r--r--winsup/utils/ldd.cc672
-rw-r--r--winsup/utils/ldh.cc17
-rw-r--r--winsup/utils/loadlib.h61
-rw-r--r--winsup/utils/locale.cc849
-rw-r--r--winsup/utils/minidumper.cc275
-rw-r--r--winsup/utils/mkgroup.c796
-rw-r--r--winsup/utils/mkpasswd.c719
-rw-r--r--winsup/utils/module_info.cc72
-rw-r--r--winsup/utils/mount.cc557
-rw-r--r--winsup/utils/parse_pe.cc105
-rw-r--r--winsup/utils/passwd.c675
-rw-r--r--winsup/utils/path.cc954
-rw-r--r--winsup/utils/path.h32
-rw-r--r--winsup/utils/pldd.c145
-rw-r--r--winsup/utils/ps.cc409
-rw-r--r--winsup/utils/regtool.cc993
-rw-r--r--winsup/utils/setfacl.c704
-rw-r--r--winsup/utils/setmetamode.c120
-rw-r--r--winsup/utils/ssp.c956
-rw-r--r--winsup/utils/ssp.txt125
-rw-r--r--winsup/utils/strace.cc1107
-rw-r--r--winsup/utils/testsuite.cc89
-rw-r--r--winsup/utils/testsuite.h131
-rwxr-xr-xwinsup/utils/tzmap-from-unicode.org85
-rw-r--r--winsup/utils/tzmap.h514
-rw-r--r--winsup/utils/tzset.c243
-rw-r--r--winsup/utils/umount.cc145
-rw-r--r--winsup/utils/wide_path.h43
1301 files changed, 0 insertions, 538456 deletions
diff --git a/djunpack.bat b/djunpack.bat
deleted file mode 100755
index 5c6e9b2e3..000000000
--- a/djunpack.bat
+++ /dev/null
@@ -1,52 +0,0 @@
-@echo off
-Rem
-Rem WARNING WARNING WARNING: This file needs to have DOS CRLF end-of-line
-Rem format, or else stock DOS/Windows shells will refuse to run it.
-Rem
-Rem This batch file unpacks the GDB distribution while simultaneously
-Rem renaming some of the files whose names are invalid on DOS or conflict
-Rem with other file names after truncation to DOS 8+3 namespace.
-Rem
-Rem Invoke like this:
-Rem
-Rem djunpack gdb-XYZ.tar
-Rem
-Rem where XYZ is the version number. If the argument includes leading
-Rem directories, it MUST use backslashes, not forward slashes.
-Rem
-Rem The following 2 lines need to be changed with each new GDB release, to
-Rem be identical to the name of the top-level directory where the GDB
-Rem distribution unpacks itself.
-set GDBVER=gdb-5.0
-if "%GDBVER%"=="gdb-5.0" GoTo EnvOk
-Rem If their environment space is too small, re-exec with a larger one
-command.com /e:4096 /c %0 %1
-GoTo End
-:EnvOk
-if not exist %1 GoTo NoArchive
-djtar -x -p -o %GDBVER%/gdb/config/djgpp/fnchange.lst %1 > fnchange.tmp
-Rem The following uses a feature of COPY whereby it does not copy
-Rem empty files. We need that because the previous line will create
-Rem an empty fnchange.tmp even if the command failed for some reason.
-copy fnchange.tmp junk.tmp > nul
-if not exist junk.tmp GoTo NoDjTar
-del junk.tmp
-sed -e "s,@V@,%GDBVER%,g" < fnchange.tmp > fnchange.lst
-Rem See the comment above about the reason for using COPY.
-copy fnchange.lst junk.tmp > nul
-if not exist junk.tmp GoTo NoSed
-del junk.tmp
-djtar -x -n fnchange.lst %1
-GoTo End
-:NoSed
-echo FAIL: Sed is not available.
-GoTo End
-:NoDjTar
-echo FAIL: DJTAR is not available or no fnchange.lst file in %1.
-GoTo End
-:NoArchive
-echo FAIL: the file %1 does not seem to exist.
-echo Remember that %1 cannot use forward slashes, only backslashes.
-GoTo End
-:End
-set GDBVER=
diff --git a/include/COPYING b/include/COPYING
deleted file mode 100644
index 623b6258a..000000000
--- a/include/COPYING
+++ /dev/null
@@ -1,340 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) year name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- <signature of Ty Coon>, 1 April 1989
- Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/include/COPYING3 b/include/COPYING3
deleted file mode 100644
index 94a9ed024..000000000
--- a/include/COPYING3
+++ /dev/null
@@ -1,674 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
- The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works. By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users. We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors. You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
- To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights. Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received. You must make sure that they, too, receive
-or can get the source code. And you must show them these terms so they
-know their rights.
-
- Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
- For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software. For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
- Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so. This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software. The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable. Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products. If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
- Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary. To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- TERMS AND CONDITIONS
-
- 0. Definitions.
-
- "This License" refers to version 3 of the GNU General Public License.
-
- "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
- "The Program" refers to any copyrightable work licensed under this
-License. Each licensee is addressed as "you". "Licensees" and
-"recipients" may be individuals or organizations.
-
- To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy. The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
- A "covered work" means either the unmodified Program or a work based
-on the Program.
-
- To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy. Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
- To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies. Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
- An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License. If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
- 1. Source Code.
-
- The "source code" for a work means the preferred form of the work
-for making modifications to it. "Object code" means any non-source
-form of a work.
-
- A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
- The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form. A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
- The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities. However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work. For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
- The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
- The Corresponding Source for a work in source code form is that
-same work.
-
- 2. Basic Permissions.
-
- All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met. This License explicitly affirms your unlimited
-permission to run the unmodified Program. The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work. This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
- You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force. You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright. Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
- Conveying under any other circumstances is permitted solely under
-the conditions stated below. Sublicensing is not allowed; section 10
-makes it unnecessary.
-
- 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
- No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
- When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
- 4. Conveying Verbatim Copies.
-
- You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
- You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
- 5. Conveying Modified Source Versions.
-
- You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
- a) The work must carry prominent notices stating that you modified
- it, and giving a relevant date.
-
- b) The work must carry prominent notices stating that it is
- released under this License and any conditions added under section
- 7. This requirement modifies the requirement in section 4 to
- "keep intact all notices".
-
- c) You must license the entire work, as a whole, under this
- License to anyone who comes into possession of a copy. This
- License will therefore apply, along with any applicable section 7
- additional terms, to the whole of the work, and all its parts,
- regardless of how they are packaged. This License gives no
- permission to license the work in any other way, but it does not
- invalidate such permission if you have separately received it.
-
- d) If the work has interactive user interfaces, each must display
- Appropriate Legal Notices; however, if the Program has interactive
- interfaces that do not display Appropriate Legal Notices, your
- work need not make them do so.
-
- A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit. Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
- 6. Conveying Non-Source Forms.
-
- You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
- a) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by the
- Corresponding Source fixed on a durable physical medium
- customarily used for software interchange.
-
- b) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by a
- written offer, valid for at least three years and valid for as
- long as you offer spare parts or customer support for that product
- model, to give anyone who possesses the object code either (1) a
- copy of the Corresponding Source for all the software in the
- product that is covered by this License, on a durable physical
- medium customarily used for software interchange, for a price no
- more than your reasonable cost of physically performing this
- conveying of source, or (2) access to copy the
- Corresponding Source from a network server at no charge.
-
- c) Convey individual copies of the object code with a copy of the
- written offer to provide the Corresponding Source. This
- alternative is allowed only occasionally and noncommercially, and
- only if you received the object code with such an offer, in accord
- with subsection 6b.
-
- d) Convey the object code by offering access from a designated
- place (gratis or for a charge), and offer equivalent access to the
- Corresponding Source in the same way through the same place at no
- further charge. You need not require recipients to copy the
- Corresponding Source along with the object code. If the place to
- copy the object code is a network server, the Corresponding Source
- may be on a different server (operated by you or a third party)
- that supports equivalent copying facilities, provided you maintain
- clear directions next to the object code saying where to find the
- Corresponding Source. Regardless of what server hosts the
- Corresponding Source, you remain obligated to ensure that it is
- available for as long as needed to satisfy these requirements.
-
- e) Convey the object code using peer-to-peer transmission, provided
- you inform other peers where the object code and Corresponding
- Source of the work are being offered to the general public at no
- charge under subsection 6d.
-
- A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
- A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling. In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage. For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product. A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
- "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source. The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
- If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information. But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
- The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed. Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
- Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
- 7. Additional Terms.
-
- "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law. If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
- When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it. (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.) You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
- Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
- a) Disclaiming warranty or limiting liability differently from the
- terms of sections 15 and 16 of this License; or
-
- b) Requiring preservation of specified reasonable legal notices or
- author attributions in that material or in the Appropriate Legal
- Notices displayed by works containing it; or
-
- c) Prohibiting misrepresentation of the origin of that material, or
- requiring that modified versions of such material be marked in
- reasonable ways as different from the original version; or
-
- d) Limiting the use for publicity purposes of names of licensors or
- authors of the material; or
-
- e) Declining to grant rights under trademark law for use of some
- trade names, trademarks, or service marks; or
-
- f) Requiring indemnification of licensors and authors of that
- material by anyone who conveys the material (or modified versions of
- it) with contractual assumptions of liability to the recipient, for
- any liability that these contractual assumptions directly impose on
- those licensors and authors.
-
- All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10. If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term. If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
- If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
- Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
- 8. Termination.
-
- You may not propagate or modify a covered work except as expressly
-provided under this License. Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
- However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
- Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
- Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License. If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
- 9. Acceptance Not Required for Having Copies.
-
- You are not required to accept this License in order to receive or
-run a copy of the Program. Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance. However,
-nothing other than this License grants you permission to propagate or
-modify any covered work. These actions infringe copyright if you do
-not accept this License. Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
- 10. Automatic Licensing of Downstream Recipients.
-
- Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License. You are not responsible
-for enforcing compliance by third parties with this License.
-
- An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations. If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
- You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License. For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
- 11. Patents.
-
- A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based. The
-work thus licensed is called the contributor's "contributor version".
-
- A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version. For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
- Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
- In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement). To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
- If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients. "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
- If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
- A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License. You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
- Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
- 12. No Surrender of Others' Freedom.
-
- If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all. For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
- 13. Use with the GNU Affero General Public License.
-
- Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work. The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
- 14. Revised Versions of this License.
-
- The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
- Each version is given a distinguishing version number. If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation. If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
- If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
- Later license versions may give you additional or different
-permissions. However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
- 15. Disclaimer of Warranty.
-
- THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. Limitation of Liability.
-
- IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
- 17. Interpretation of Sections 15 and 16.
-
- If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- 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 3 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, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
- If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
- <program> Copyright (C) <year> <name of author>
- This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
- You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
- The GNU General Public License does not permit incorporating your program
-into proprietary programs. If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library. If this is what you want to do, use the GNU Lesser General
-Public License instead of this License. But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/include/ChangeLog b/include/ChangeLog
deleted file mode 100644
index cfdff4ddf..000000000
--- a/include/ChangeLog
+++ /dev/null
@@ -1,2115 +0,0 @@
-2014-12-11 Uros Bizjak <ubizjak@gmail.com>
- Ben Elliston <bje@au.ibm.com>
- Manuel Lopez-Ibanez <manu@gcc.gnu.org>
-
- * libiberty.h (xvasprintf): Declare.
-
-2014-12-09 Trevor Saunders <tsaunders@mozilla.com>
-
- * hashtab.h, splay-tree.h: Remove GTY markers.
-
-2014-12-08 Mark Wielaard <mjw@redhat.com>
-
- PR debug/60782
- * dwarf2.def: Add DWARFv5 DW_TAG_atomic_type.
-
-2014-11-21 Mark Wielaard <mjw@redhat.com>
-
- * dwarf2.h: Add DW_LANG_C_plus_plus_11, DW_LANG_C11 and
- DW_LANG_C_plus_plus_14.
-
-2014-11-25 Mark Wielaard <mjw@redhat.com>
-
- * dwarf2.def (DW_AT_noreturn): New DWARF5 attribute.
-
-2014-11-14 Shinichiro Hamaji <shinichiro.hamaji@gmail.com>
-
- * dwarf2.def (DW_AT_APPLE_optimized, DW_AT_APPLE_flags)
- (DW_AT_APPLE_isa, DW_AT_APPLE_block)
- (DW_AT_APPLE_major_runtime_vers, DW_AT_APPLE_runtime_class)
- (DW_AT_APPLE_omit_frame_ptr, DW_AT_APPLE_property_name)
- (DW_AT_APPLE_property_getter, DW_AT_APPLE_property_setter)
- (DW_AT_APPLE_property_attribute, DW_AT_APPLE_objc_complete_type)
- (DW_AT_APPLE_property): New macros.
-
-2014-11-11 David Malcolm <dmalcolm@redhat.com>
-
- * ChangeLog.jit: New.
-
-2014-11-05 Anthony Brandon <anthony.brandon@gmail.com>
-
- PR driver/36312
- * filenames.h: Add prototype for canonical_filename_eq.
-
-2014-10-28 Richard Henderson <rth@redhat.com>
-
- * longlong.h [__alpha] (umul_ppmm): Disable for c++.
-
-2014-10-28 Yury Gribov <y.gribov@samsung.com>
-
- * libiberty.h (strtol, strtoul, strtoll, strtoull): New prototypes.
-
-2014-10-27 Phil Muldoon <pmuldoon@redhat.com>
- Jan Kratochvil <jan.kratochvil@redhat.com>
- Tom Tromey <tromey@redhat.com>
-
- * gcc-c-fe.def: New file.
- * gcc-c-interface.h: New file.
- * gcc-interface.h: New file.
-
-2014-10-15 David Malcolm <dmalcolm@redhat.com>
-
- * libiberty.h (choose_tmpdir): New prototype.
-
-2013-10-02 Mark Wielaard <mjw@redhat.com>
-
- PR debug/63239
- * dwarf2.def (DW_AT_GNU_deleted): New attribute.
-
-2014-09-26 Max Ostapenko <m.ostapenko@partner.samsung.com>
-
- * libiberty.h (PEX_STDOUT_APPEND): New flag.
- (PEX_STDERR_APPEND): Likewise.
-
-2014-09-23 Iain Buclaw <ibuclaw@gdcproject.org>
-
- * demangle.h (DMGL_DLANG): New macro.
- (DMGL_STYLE_MASK): Add DMGL_DLANG.
- (demangling_styles): Add dlang_demangling.
- (DLANG_DEMANGLING_STYLE_STRING): New macro.
- (DLANG_DEMANGLING): New macro.
- (dlang_demangle): New prototype.
-
-2014-09-15 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
-
- * longlong.h: Add __udiv_w_sdiv prototype.
-
-2014-06-10 Thomas Schwinge <thomas@codesourcery.com>
-
- PR lto/61334
- * libiberty.h [defined (HAVE_DECL_STRNLEN) &&
- !HAVE_DECL_STRNLEN] (strnlen): New prototype.
-
-2014-05-21 John Marino <gnugcc@marino.st>
-
- * liberty.h: Use basename function on DragonFly.
-
-2014-05-01 Steve Ellcey <sellcey@mips.com>
-
- * include/longlong.h: Use 'defined()' to check __mips16.
-
-2014-04-30 Richard Sandiford <rdsandiford@googlemail.com>
-
- * longlong.h (__i386__): Remove W_TYPE_SIZE==64 handling.
-
-2014-04-22 Yufeng Zhang <yufeng.zhang@arm.com>
-
- * longlong.h: Merge from glibc.
-
-2014-01-21 Tom Tromey <tromey@redhat.com>
-
- * ansidecl.h (ANSI_PROTOTYPES, PTRCONST, LONG_DOUBLE, PARAMS)
- (VPARAMS, VA_START, VA_OPEN, VA_CLOSE, VA_FIXEDARG, CONST)
- (VOLATILE, SIGNED, PROTO, EXFUN, DEFUN, DEFUN_VOID, AND, DOTS)
- (NOARGS): Don't define.
- * libiberty.h (expandargv, writeargv): Don't use PARAMS.
-
-2013-12-23 Bill Maddox <maddox@google.com>
-
- * demangle.h (enum gnu_v3_ctor_kinds):
- Added literal gnu_v3_unified_ctor.
- (enum gnu_v3_ctor_kinds):
- Added literal gnu_v3_unified_dtor.
-
-2013-12-04 Richard Sandiford <rdsandiford@googlemail.com>
-
- * longlong.h: New file.
-
-2013-10-29 Marc Glisse <marc.glisse@inria.fr>
-
- PR tree-optimization/58689
- * ansidecl.h (ATTRIBUTE_RETURNS_NONNULL): New macro.
- * libiberty.h (basename, lbasename, dos_lbasename, unix_lbasename,
- concat_copy): Mark with attributes nonnull(1) and returns_nonnull.
- (concat, reconcat, concat_copy2, choose_temp_base, xstrerror,
- xmalloc, xrealloc, xcalloc, xstrdup, xstrndup, xmemdup, pex_init):
- Mark with attribute returns_nonnull.
-
-2013-10-22 Sterling Augustine <saugustine@google.com>
-
- * gdb/gdb-index.h: Merge from gdb tree.
-
-2013-10-10 Sean Keys <skeys@ipdatasys.com>
-
- * xgate.h : Cleanup after opcode
- table modification..
-
-2013-08-20 Alan Modra <amodra@gmail.com>
-
- * floatformat.h (floatformat_ibm_long_double): Delete.
- (floatformat_ibm_long_double_big): Declare.
- (floatformat_ibm_long_double_little): Declare.
-
-2013-08-19 Dehao Chen <dehao@google.com>
-
- * dwarf2.def (DW_AT_GNU_discriminator): New attribute.
-
-2013-08-02 Caroline Tice <cmtice@google.com>
-
- * vtv-change-permission.h: New file.
-
-2013-08-05 Eric Botcazou <ebotcazou@adacore.com>
- Konrad Eisele <konrad@gaisler.com>
-
- * opcode/sparc.h (sparc_opcode_arch_val): Add SPARC_OPCODE_ARCH_LEON.
-
-2013-06-08 Catherine Moore <clm@codesourcery.com>
-
- * opcode/mips.h (mips_opcode): Add ase field.
- (INSN_ASE_MASK): Delete.
- (INSN_DSP): Rename to ASE_DSP. Provide new value.
- (INSN_DSPR2): Rename to ASE_DSPR2. Provide new value.
- (INSN_MCU): Rename to ASE_MCU. Provide new value.
- (INSN_MDMX): Rename to ASE_MDMX. Provide new value.
- (INSN_MIPS3d): Rename to ASE_MIPS3D. Provide new value.
- (INSN_MT): Rename to ASE_MT. Provide new value.
- (INSN_SMARTMIPS): Rename to ASE_SMARTMIPS. Provide new value.
- (INSN_VIRT): Rename to ASE_VIRT. Provide new value.
- (INSN_VIRT64): Rename to ASE_VIRT64. Provide new value.
- (opcode_is_member): Add ase argument. Check ase.
-
-2013-05-06 Paul Brook <paul@codesourcery.com>
-
- include/elf/
- * mips.h (R_MIPS_PC32): Update comment.
-
-2013-04-03 Jason Merrill <jason@redhat.com>
-
- Demangle C++11 ref-qualifier.
- * demangle.h (enum demangle_component_type): Add
- DEMANGLE_COMPONENT_REFERENCE_THIS,
- DEMANGLE_COMPONENT_RVALUE_REFERENCE_THIS.
-
-2013-03-12 Sebastian Huber <sebastian.huber@embedded-brains.de>
-
- * opcode/nios2.h: Edit comment.
-
-2013-03-11 Sebastian Huber <sebastian.huber@embedded-brains.de>
-
- * opcode/nios2.h (OPX_WRPRS): New define.
- (OP_MATCH_WRPRS): Likewise.
-
-2013-03-11 Sebastian Huber <sebastian.huber@embedded-brains.de>
-
- * opcode/nios2.h (OP_RDPRS): New define.
- (OP_MATCH_RDPRS): Likewise.
-
-2013-03-01 Cary Coutant <ccoutant@google.com>
-
- * dwarf2.h (enum dwarf_sect): New enum type.
-
-2013-02-19 Alan Modra <amodra@gmail.com>
-
- * bfdlink.h (struct bfd_link_info): Delete emit_note_gnu_build_id.
-
-2013-02-11 Sriraman Tallam <tmsriram@google.com>
-
- * plugin-api.h (enum ld_plugin_level): Assign integers
- explicitly for all values.
-
-2013-02-06 Sandra Loosemore <sandra@codesourcery.com>
- Andrew Jenner <andrew@codesourcery.com>
-
- Based on patches from Altera Corporation.
-
- * dis-asm.h (print_insn_big_nios2): Declare.
- (print_insn_little_nios2): Declare.
-
-2013-01-30 Kai Tietz <ktietz@redhat.com>
-
- PR other/54620
- PR target/39064
- * md5.h (md5_uintptr, md5_uint32): Define as uintptr_t/uint32_t if
- stdint.h and sys/types.h headers are present.
- * sha1.h (sha1_uintptr, sha1_uint32): Likewise.
-
-2013-01-10 Will Newton <will.newton@imgtec.com>
-
- * dis-asm.h (print_insn_metag): New declaration.
-
-2012-12-18 Aldy Hernandez <aldyh@redhat.com>
-
- PR other/54324
- * ansidecl.h (ATTRIBUTE_UNUSED): Do not set __attribute__ for GCC
- < 3.4.
-
-2012-12-17 Nick Clifton <nickc@redhat.com>
-
- * MAINTAINERS: Add copyright notice.
- * alloca-conf.h: Likewise.
- * fopen-bin.h: Likewise.
- * fopen-same.h: Likewise.
- * fopen-vms.h: Likewise.
- * aout/hppa.h: Likewise.
- * opcode/tahoe.h: Likewise.
-
-2012-12-11 Edgar E. Iglesias <edgar.iglesias@gmail.com>
-
- * elf/microblaze.h: Add TLS relocs to START_RELOC_NUMBERS
-
-2012-11-09 Jason Merrill <jason@redhat.com>
-
- * demangle.h (enum demangle_component_type): Add
- DEMANGLE_COMPONENT_TAGGED_NAME.
-
-2012-10-29 Sterling Augustine <saugustine@google.com>
- Cary Coutant <ccoutant@google.com>
-
- * dwarf2.h (dwarf_location_list_entry_type): New enum with fields
- DW_LLE_GNU_end_of_list_entry, DW_LLE_GNU_base_address_selection_entry,
- DW_LLE_GNU_start_end_entry and DW_LLE_GNU_start_length_entry.
-
-
-2012-10-26 Shinichiro Hamaji <shinichiro.hamaji@gmail.com>
-
- * dwarf2.h (DW_AT_APPLE_optimized, DW_AT_APPLE_flags)
- (DW_AT_APPLE_isa, DW_AT_APPLE_block)
- (DW_AT_APPLE_major_runtime_vers, DW_AT_APPLE_runtime_class)
- (DW_AT_APPLE_omit_frame_ptr, DW_AT_APPLE_property_name)
- (DW_AT_APPLE_property_getter, DW_AT_APPLE_property_setter)
- (DW_AT_APPLE_property_attribute, DW_AT_APPLE_objc_complete_type)
- (DW_AT_APPLE_property, DW_OP_GNU_entry_value): New macros.
-
-2012-10-24 H.J. Lu <hongjiu.lu@intel.com>
-
- * bfdlink.h (bfd_link_info): Add
- disable_target_specific_optimizations.
-
-2012-10-23 Nathan Sidwell <nathan@codesourcery.com>
-
- * bfdlink.h (struct bfd_link_info): Add stacksize option.
-
-2012-10-22 Jan Beich <jbeich@tormail.org>
-
- PR ld/14426
- * bfdlink.h (bfd_link_info): Add ignore_hash.
-
-2012-10-08 Jason Merrill <jason@redhat.com>
-
- * demangle.h (enum demangle_component_type): Add
- DEMANGLE_COMPONENT_TLS_INIT and DEMANGLE_COMPONENT_TLS_WRAPPER.
-
-2012-09-18 Florian Weimer <fweimer@redhat.com>
-
- PR other/54411
- * objalloc.h (objalloc_alloc): Do not use fast path on wraparound.
-
-2012-09-27 Anthony Green <green@moxielogic.com>
-
- * opcode/moxie.h (MOXIE_BAD): New define.
-
-2012-09-12 Chris Schlumberger-Socha <chris.schlumberger-socha@arm.com>
-
- * elf/aarch64.h (R_AARCH64_GOT_LD_PREL19): New reloc.
-
-2012-09-06 Cary Coutant <ccoutant@google.com>
-
- * dwarf2.def: Edit comment.
-
-2012-08-24 Sriraman Tallam <tmsriram@google.com>
-
- * plugin-api.h (ld_plugin_allow_unique_segment_for_sections):
- New interface.
- (ld_plugin_unique_segment_for_sections): New interface.
- (LDPT_ALLOW_UNIQUE_SEGMENT_FOR_SECTIONS): New enum val.
- (LDPT_UNIQUE_SEGMENT_FOR_SECTIONS): New enum val.
- (tv_allow_unique_segment_for_sections): New member.
- (tv_unique_segment_for_sections): New member.
-
-2012-08-24 Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
-
- * opcode/arm.h (ARM_CPU_IS_ANY): New define.
-
-2012-08-24 Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
-
- * elf/arm.h (TAG_CPU_ARCH_V8): New define.
- (MAX_TAG_CPU_ARCH): Update.
- * opcode/arm.h (ARM_EXT_V8): New define.
- (FPU_VFP_EXT_ARMV8): Likewise.
- (FPU_NEON_EXT_ARMV8): Likewise.
- (FPU_CRYPTO_EXT_ARMV8): Likewise.
- (ARM_AEXT_V8A): Likewise.
- (FPU_VFP_ARMV8): Likwise.
- (FPU_NEON_ARMV8): Likewise.
- (FPU_CRYPTO_ARMV8): Likewise.
- (FPU_ARCH_VFP_ARMV8): Likewise.
- (FPU_ARCH_NEON_VFP_ARMV8): Likewise.
- (FPU_ARCH_CRYPTO_NEON_VFP_ARMV8): Likewise.
- (ARM_ARCH_V8A): Likwise.
- (ARM_ARCH_V8A_FP): Likewise.
- (ARM_ARCH_V8A_SIMD): Likewise.
- (ARM_ARCH_V8A_CRYPTO): Likewise.
-
-2012-08-13 Ian Bolton <ian.bolton@arm.com>
- Laurent Desnogues <laurent.desnogues@arm.com>
- Jim MacArthur <jim.macarthur@arm.com>
- Marcus Shawcroft <marcus.shawcroft@arm.com>
- Nigel Stephens <nigel.stephens@arm.com>
- Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
- Richard Earnshaw <rearnsha@arm.com>
- Sofiane Naci <sofiane.naci@arm.com>
- Tejas Belagod <tejas.belagod@arm.com>
- Yufeng Zhang <yufeng.zhang@arm.com>
-
- * dis-asm.h (print_insn_aarch64): New declaration.
- (print_aarch64_disassembler_options): New declaration.
- (aarch64_symbol_is_valid): New declaration.
-
-2012-08-02 Sean Keys <skeys@ipdatasys.com>
-
- * elf/m68hc11.h: #define E_M68HC11_NO_BANK_WARNING 0x000000200
-
-2012-07-24 Stephan McCamant <smcc@cs.berkeley.edu>
- Dr David Alan Gilbert <dave@treblig.org>
-
- PR binutils/13135
- * dis-asm.h (fprintf_ftype): Add ATTRIBUTE_FPTR_PRINTF_2.
-
-2012-07-13 Doug Evans <dje@google.com>
-
- * filenames.h: #include "hashtab.h".
- (filename_hash, filename_eq): Declare.
-
-2012-07-13 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
-
- * elf/s390.h (START_RELOC_NUMBERS): Define R_390_IRELATIVE reloc.
-
-2012-07-05 Sean Keys <skeys@ipdatasys.com>
-
- * opcode/xgate.h: Changed the format string for mode
- XGATE_OP_DYA_MON.
-
-2012-06-18 Doug Evans <dje@google.com>
-
- * dwarf2.def (DW_OP): Add DW_OP_GNU_const_index.
-
-2012-06-12 Rafael Ãvila de Espíndola <respindola@mozilla.com>
-
- * plugin-api.h (ld_plugin_output_file_type): Add LDPO_PIE.
-
-2012-06-08 Jakub Jelinek <jakub@redhat.com>
-
- * dwarf2.def (DW_FORM_GNU_ref_alt, DW_FORM_GNU_strp_alt): New
- forms.
- * dwarf2.h (enum dwarf_macro_record_type): Add
- DW_MACRO_GNU_define_indirect_alt, DW_MACRO_GNU_undef_indirect_alt
- and DW_MACRO_GNU_transparent_include_alt.
-
-2012-05-23 Doug Evans <dje@google.com>
-
- * leb128.h: #include stdint.h, inttypes.h.
- (read_uleb128_to_uint64): Renamed from read_uleb128_to_ull.
- Change to take a uint64_t * argument instead of unsigned long long.
- (read_sleb128_to_uint64): Renamed from read_sleb128_to_ll.
- Change to take an int64_t * argument instead of long long.
-
-2012-05-22 Doug Evans <dje@google.com>
-
- * leb128.h: New file.
-
-2012-05-19 Gary Funck <gary@intrepid.com>
-
- * dwarf2.def: Update comment re: UPC extensions to reference
- DWARF4 specification.
-
-2012-05-15 James Murray <jsm@jsm-net.demon.co.uk>
-
- * dis-asm.h (print_insn_m9s12x): Prototype.
- (print_insn_m9s12xg): Prototype.
-
-2012-05-03 Sean Keys <skeys@ipdatasys.com>
-
- * dis-asm.h (print_insn_xgate): Define.
- (print_insn_xgate): Ditto.
- Added new files for XGATE port.
-
-2012-05-02 Cary Coutant <ccoutant@google.com>
-
- * dwarf2.def: Remove DW_FORM_GNU_ref_index,
- replace DW_AT_GNU_ref_base with DW_AT_GNU_ranges_base.
-
-2012-04-28 Doug Evans <dje@google.com>
-
- * dwarf2.def (DW_OP): Add DW_OP_GNU_addr_index.
-
-2012-04-27 Tom Tromey <tromey@redhat.com>
-
- * dwarf2.h: Wrap function declarations in extern "C".
-
-2012-04-27 Tom Tromey <tromey@redhat.com>
-
- * dwarf2.h (enum dwarf_tag, enum dwarf_form, enum dwarf_attribute)
- (enum dwarf_location_atom, enum dwarf_type, enum
- dwarf_call_frame_info): Remove.
- (DW_TAG, DW_TAG_DUP, DW_FORM, DW_AT, DW_AT_DUP, DW_OP)
- (DW_OP_DUP, DW_ATE, DW_ATE_DUP, DW_CFA): New macros.
- Include dwarf2.def.
- (get_DW_TAG_name, get_DW_AT_name, get_DW_FORM_name)
- (get_DW_OP_name, get_DW_ATE_name): Declare.
- * dwarf2.def: New file, from dwarf2.h.
-
-2012-04-12 David S. Miller <davem@davemloft.net>
-
- * elf/sparc.h (R_SPARC_WDISP10): New reloc.
- * opcode/sparc.h: Define '=' as generating R_SPARC_WDISP10.
-
-2012-04-10 Tristan Gingold <gingold@adacore.com>
-
- * splay-tree.h: Conditionnaly includes stdint.h and inttypes.h
- (libi_uhostptr_t, libi_shostptr_t): Remove, replaced by uintptr_t.
-
-2012-04-09 Roland McGrath <mcgrathr@google.com>
-
- * bfdlink.h (struct bfd_link_info): Add new member user_phdrs.
-
-2012-03-15 Alan Modra <amodra@gmail.com>
-
- * dis-asm.h (disassemble_init_powerpc): Declare.
-
-2009-11-06 Jonas Maebe <jonas.maebe@elis.ugent.be>
-
- Add DWARF attribute value for the "Borland fastcall" calling
- convention.
- * elf/dwarf2.h: Add DW_CC_GNU_borland_fastcall_i386 constant.
-
-2012-01-31 H.J. Lu <hongjiu.lu@intel.com>
-
- PR ld/13616
- * bfdlink.h (bfd_link_order): Update comments on data size.
-
-2012-01-26 Cary Coutant <ccoutant@google.com>
-
- * dwarf2.h (enum dwarf_form): Add Fission extensions.
- (enum dwarf_attribute): Likewise.
-
-2012-01-06 Jason Merrill <jason@redhat.com>
-
- PR c++/6057
- PR c++/48051
- PR c++/50855
- PR c++/51322
- * demangle.h (enum demangle_component_type): Add
- DEMANGLE_COMPONENT_INITIALIZER_LIST, DEMANGLE_COMPONENT_NULLARY.
-
-2011-12-14 Iain Sandoe <iains@gcc.gnu.org>
-
- * mach-o/loader.h (bfd_mach_o_section_type): define
- BFD_MACH_O_S_ATTR_NONE to 0.
-
-2011-11-07 Richard Henderson <rth@redhat.com>
-
- Merged from transactional-memory.
-
- * demangle.h (enum gnu_v3_ctor_kinds): Add gnu_v3_object_ctor_group.
- (enum gnu_v3_dtor_kinds): Add gnu_v3_object_dtor_group.
- (DEMANGLE_COMPONENT_TRANSACTION_CLONE): New.
- (DEMANGLE_COMPONENT_NONTRANSACTION_CLONE): New.
-
-2011-11-01 DJ Delorie <dj@redhat.com>
-
- * dis-asm.h (print_insn_rl78): Declare.
-
-2011-10-25 Joern Rennecke <joern.rennecke@embecosm.com>
-
- * dis-asm.h (print_insn_epiphany): Declare.
-
-2011-10-21 Ulrich Drepper <drepper@gmail.com>
-
- * obstack.h [!GNUC] (obstack_free): Avoid cast to int.
-
-2011-10-21 Marc Glisse <marc.glisse@inria.fr>
-
- * ansidecl.h (ENUM_BITFIELD): Always use enum in C++
-
-2011-10-19 Alan Modra <amodra@gmail.com>
-
- PR ld/13254
- * bfdlink.h (struct bfd_link_info): Add error_textrel.
-
-2011-09-28 Doug Evans <dje@google.com>
-
- * timeval-utils.h: New file.
-
- * libiberty.h (countargv): Declare.
-
-2011-09-26 Cary Coutant <ccoutant@google.com>
-
- gcc PR lto/47247
- * plugin-api.h (enum ld_plugin_symbol_resolution): Add
- LDPR_PREVAILING_DEF_IRONLY_EXP.
- (enum ld_plugin_tag): Add LDPT_GET_SYMBOLS_V2.
-
-2011-09-23 Cary Coutant <ccoutant@google.com>
-
- PR 40831
- * demangle.h (enum demangle_component_type): Add
- DEMANGLE_COMPONENT_CLONE.
-
-2011-09-15 H.J. Lu <hongjiu.lu@intel.com>
-
- PR ld/12975
- * bfdlink.h (bfd_link_info): Add version_info.
-
-2011-07-25 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
-
- * xregex.h (regoff_t): Define.
-
-2011-07-22 Jakub Jelinek <jakub@redhat.com>
-
- * dwarf2.h (DW_AT_GNU_macros): New.
- (enum dwarf_macro_record_type): New enum. Add DW_MACRO_GNU_*.
-
- PR c++/49756
- * libiberty.h (stack_limit_increase): New prototype.
-
-2011-07-13 Sriraman Tallam <tmsriram@google.com>
-
- * plugin-api.h
- (ld_plugin_section): New struct.
- (ld_plugin_get_section_count): New typedef.
- (ld_plugin_get_section_type): New typedef.
- (ld_plugin_get_section_name): New typedef.
- (ld_plugin_get_section_contents): New typedef.
- (ld_plugin_update_section_order): New typedef.
- (ld_plugin_allow_section_ordering): New typedef.
- (LDPT_GET_SECTION_COUNT): New enum value.
- (LDPT_GET_SECTION_TYPE): New enum value.
- (LDPT_GET_SECTION_NAME): New enum value.
- (LDPT_GET_SECTION_CONTENTS): New enum value.
- (LDPT_UPDATE_SECTION_ORDER): New enum value.
- (LDPT_ALLOW_SECTION_ORDERING): New enum value.
- (tv_get_section_count): New struct members.
- (tv_get_section_type): New struct members.
- (tv_get_section_name): New struct members.
- (tv_get_section_contents): New struct members.
- (tv_update_section_order): New struct members.
- (tv_allow_section_ordering): New struct members.
-
-2011-07-15 Alan Modra <amodra@gmail.com>
-
- * bfdlink.h (struct bfd_link_info): Use ENUM_BITFIELD for strip,
- discard, common_skip_ar_symbols, unresolved_syms_in_objects, and
- unresolved_syms_in_shared_libs fields. Move emit_note_gnu_build_id
- out of bitfields. Reorder bitfields.
-
-2011-07-13 Sriraman Tallam <tmsriram@google.com>
-
- * plugin-api.h (ld_plugin_section): New struct.
- (ld_plugin_get_section_count): New typedef.
- (ld_plugin_get_section_type): New typedef.
- (ld_plugin_get_section_name): New typedef.
- (ld_plugin_get_section_contents): New typedef.
- (ld_plugin_update_section_order): New typedef.
- (ld_plugin_allow_section_ordering): New typedef.
- (LDPT_GET_SECTION_COUNT): New enum value.
- (LDPT_GET_SECTION_TYPE): New enum value.
- (LDPT_GET_SECTION_NAME): New enum value.
- (LDPT_GET_SECTION_CONTENTS): New enum value.
- (LDPT_UPDATE_SECTION_ORDER): New enum value.
- (LDPT_ALLOW_SECTION_ORDERING): New enum value.
- (tv_get_section_count): New struct members.
- (tv_get_section_type): New struct members.
- (tv_get_section_name): New struct members.
- (tv_get_section_contents): New struct members.
- (tv_update_section_order): New struct members.
- (tv_allow_section_ordering): New struct members.
-
-2011-07-11 Catherine Moore <clm@codesourcery.com>
-
- * bfdlink.h (flag_type): New enumeration.
- (flag_info_list): New structure.
- (flag_info): New structure.
-
-2011-07-09 H.J. Lu <hongjiu.lu@intel.com>
-
- PR ld/12942
- * bfdlink.h (bfd_link_info): Add loading_lto_outputs.
-
-2011-07-01 Joel Brobecker <brobecker@adacore.com>
-
- * filenames.h (HAVE_CASE_INSENSITIVE_FILE_SYSTEM): Define
- on Darwin, as well as on the systems that use a DOS-like
- filesystem.
-
-2011-06-22 Jakub Jelinek <jakub@redhat.com>
-
- PR debug/47858
- * dwarf2.h (enum dwarf_location_atom): Add DW_OP_GNU_parameter_ref.
-
-2011-06-22 Jakub Jelinek <jakub@redhat.com>
-
- * dwarf2.h (enum dwarf_location_atom): Add DW_OP_GNU_parameter_ref.
-
-2011-06-20 Jakub Jelinek <jakub@redhat.com>
-
- PR ld/12570
- * bfdlink.h (struct bfd_link_info): Add no_ld_generated_unwind_info
- option.
-
-2011-06-13 Jan Kratochvil <jan.kratochvil@redhat.com>
-
- * demangle.h (DMGL_RET_POSTFIX): Extend the comment.
- (DMGL_RET_DROP): New.
-
-2011-06-13 Walter Lee <walt@tilera.com>
-
- * dis-asm.h (print_insn_tilegx): Declare.
- (print_insn_tilepro): Likewise.
-
-2011-05-17 Alan Modra <amodra@gmail.com>
-
- PR ld/12760
- * bfdlink.h (struct bfd_link_callbacks <notice>): Add "flags" and
- "string" param.
-
-2011-05-16 Alan Modra <amodra@gmail.com>
-
- * bfdlink.h (struct bfd_link_hash_entry): Remove u.undef.weak field.
-
-2011-04-30 Jakub Jelinek <jakub@redhat.com>
-
- * dwarf2.h (DW_OP_GNU_const_type, DW_OP_GNU_regval_type,
- DW_OP_GNU_deref_type, DW_OP_GNU_convert, DW_OP_GNU_reinterpret): New.
-
-2011-04-25 Jan Kratochvil <jan.kratochvil@redhat.com>
-
- * bfdlink.h (ENUM_BITFIELD): Remove.
-
-2011-04-25 Jan Kratochvil <jan.kratochvil@redhat.com>
-
- * ansidecl.h (ENUM_BITFIELD): New, from gcc/system.h.
-
-2011-04-24 Alan Modra <amodra@gmail.com>
-
- PR ld/12365
- PR ld/12696
- * bfdlink.h (ENUM_BITFIELD): Define.
- (struct bfd_link_hash_entry): Make "type" a bitfield. Add "non_ir_ref".
- (struct bfd_link_callbacks <notice>): Pass bfd_link_hash_entry pointer
- rather than "name".
-
-2011-04-20 Alan Modra <amodra@gmail.com>
-
- PR ld/12365
- * bfdlink.h (struct bfd_link_callbacks): Modify multiple_definition
- and multiple_common parameters to pass in a bfd_link_hash_entry
- pointer rather than name,bfd etc. found in the hash entry.
-
-2011-03-31 Tristan Gingold <gingold@adacore.com>
-
- * dwarf2.h (dwarf_line_number_hp_sfc_ops): New enum.
-
-2011-03-24 Mark Wielaard <mjw@redhat.com>
-
- * dwarf2.h (dwarf_form): Remove deprecated DW_FORM_sig8 define.
-
-2010-03-23 Rafael Ãvila de Espíndola <respindola@mozilla.com>
-
- * plugin-api.h (ld_plugin_get_view): New.
- (ld_plugin_tag): Add LDPT_GET_VIEW.
- (ld_plugin_tv): Add tv_get_view.
-
-2011-03-16 Jakub Jelinek <jakub@redhat.com>
-
- * dwarf2.h (DW_TAG_GNU_call_site, DW_TAG_GNU_call_site_parameter,
- DW_AT_GNU_call_site_value, DW_AT_GNU_call_site_data_value,
- DW_AT_GNU_call_site_target, DW_AT_GNU_call_site_target_clobbered,
- DW_AT_GNU_tail_call, DW_AT_GNU_all_tail_call_sites,
- DW_AT_GNU_all_call_sites,, DW_AT_GNU_all_source_call_sites,
- DW_OP_GNU_entry_value): New.
-
-2011-02-28 Kai Tietz <kai.tietz@onevision.com>
-
- * filenames.h (filename_ncmp): New prototype.
-
-2011-02-23 Kai Tietz <kai.tietz@onevision.com>
-
- * dwarf2.h (_ELF_DWARF2_H): Renamed to
- _DWARF2_H.
- (DWARF2_External_LineInfo, DWARF2_Internal_LineInfo,
- DWARF2_External_PubNames, DWARF2_Internal_PubNames,
- DWARF2_External_CompUnit, DWARF2_Internal_CompUnit,
- DWARF2_External_ARange, DWARF2_Internal_ARange): Removed.
-
-2011-02-08 Ulrich Weigand <uweigand@de.ibm.com>
-
- * dwarf2.h (enum dwarf_calling_convention): Add DW_CC_GDB_IBM_OpenCL.
-
-2011-01-12 Iain Sandoe <iains@gcc.gnu.org>
-
- * dwarf2.h: Update value for DW_AT_hi_user.
-
-2010-11-16 Ian Lance Taylor <iant@google.com>
-
- * simple-object.h (simple_object_attributes_merge): Declare,
- replacing simple_object_attributes_compare.
-
-2010-11-04 Ian Lance Taylor <iant@google.com>
-
- * dwarf2.h (enum dwarf_source_language): Add DW_LANG_Go.
-
-2010-11-02 Ian Lance Taylor <iant@google.com>
-
- * simple-object.h: New file.
-
-2010-10-15 Dave Korn <dave.korn.cygwin@gmail.com>
-
- Sync LD plugin patch series (part 1/6) with src/include/.
- * plugin-api.h (LDPT_GNU_LD_VERSION): New ld_plugin_tag enum member.
-
-2010-10-14 Dave Korn <dave.korn.cygwin@gmail.com>
-
- Apply LD plugin patch series (part 6/6).
- * bfdlink.h (struct_bfd_link_callbacks): Document new argument
- to add_archive_element callback used to return a replacement bfd which
- is to be added to the hash table in place of the original element.
-
-2010-10-14 Dave Korn <dave.korn.cygwin@gmail.com>
-
- Apply LD plugin patch series (part 1/6).
- * plugin-api.h (LDPT_GNU_LD_VERSION): New ld_plugin_tag enum member.
-
-2010-10-06 Andi Kleen <ak@linux.intel.com>
-
- * libiberty.h (setproctitle): Add prototype.
-
-2010-09-29 Bernd Schmidt <bernds@codesourcery.com>
-
- * opcode/tic6x-control-registers.h (tscl): Now read_write.
-
-2010-09-27 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
-
- * opcode/s390.h: Add S390_OPCODE_Z196 to enum s390_opcode_cpu_val.
-
-2010-09-23 Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
-
- * arm.h (ARM_EXT_V6Z): Remove.
- (ARM_EXT_SEC): New define.
- (ARM_AEXT_V6Z): Use Security Extensions.
- (ARM_AEXT_V6ZK): Likeiwse.
- (ARM_AEXT_V6ZT2): Likewise.
- (ARM_AEXT_V6ZKT2): Likewise.
- (ARM_AEXT_V7_ARM): Base v7 does not have Security Extensions.
- (ARM_ARCH_V7A_SEC): New define.
- (ARM_ARCH_V7A_MP): Rename...
- (ARM_ARCH_V7A_MP_SEC): ...to this and add Security Extensions.
-
-2010-09-09 Jakub Jelinek <jakub@redhat.com>
-
- * dwarf2.h (DW_OP_GNU_implicit_pointer): New.
-
-2010-07-06 Ken Werner <ken.werner@de.ibm.com>
-
- * floatformat.h (floatformat_ieee_half_big): Add declaration.
- (floatformat_ieee_half_little): Likewise.
-
-2010-06-29 Alan Modra <amodra@gmail.com>
-
- * dis-asm.h: Remove references to maxq.
-
-2010-06-21 Rafael Espindola <espindola@google.com>
-
- * plugin-api.h (ld_plugin_set_extra_library_path): New.
- (ld_plugin_tag): Add LDPT_SET_EXTRA_LIBRARY_PATH.
- (ld_plugin_tv): Add tv_set_extra_library_path.
-
-2010-06-21 Jakub Jelinek <jakub@redhat.com>
-
- * dwarf2.h (enum dwarf_type): Add DW_ATE_UTF.
-
-2010-06-18 Rafael Espindola <espindola@google.com>
-
- * plugin.h (ld_plugin_add_input_file, ld_plugin_add_input_library):
- Make argument const.
-
-2010-06-08 Laurynas Biveinis <laurynas.biveinis@gmail.com>
-
- * splay-tree.h: Update copyright years.
- (splay_tree_s): Document fields.
- (splay_tree_new_typed_alloc): New.
-
- * hashtab.h: Update copyright years.
- (htab_create_typed_alloc): New.
-
-2010-06-10 Tristan Gingold <gingold@adacore.com>
-
- * dwarf2.h (enum dwarf_tag): Add DW_TAG_HP_Bliss_field and
- DW_TAG_HP_Bliss_field_set.
- (enum dwarf_attribute): Add DW_AT_HP_prologue, DW_AT_HP_epilogue,
- DW_AT_HP_unit_name, DW_AT_HP_unit_size, DW_AT_HP_widened_byte_size,
- DW_AT_HP_definition_points, DW_AT_HP_default_location and
- DW_AT_HP_is_result_param.
- (enum dwarf_type): Add DW_ATE_HP_VAX_float, DW_ATE_HP_VAX_float_d,
- DW_ATE_HP_packed_decimal, DW_ATE_HP_zoned_decimal, DW_ATE_HP_edited,
- DW_ATE_HP_signed_fixed, DW_ATE_HP_unsigned_fixed,
- DW_ATE_HP_VAX_complex_float and DW_ATE_HP_VAX_complex_float_d.
- (enum dwarf_line_number_x_ops): Add
- DW_LNE_HP_source_file_correlation.
- (enum dwarf_source_language): Add DW_LANG_HP_Bliss,
- DW_LANG_HP_Basic91, DW_LANG_HP_Pascal91, DW_LANG_HP_IMacro,
- DW_LANG_HP_Assembler.
-
-2010-06-01 Rafael Espindola <espindola@google.com>
-
- * plugin-api.h (ld_plugin_tag): Add LDPT_OUTPUT_NAME.
-
-2010-04-26 Pedro Alves <pedro@codesourcery.com>
-
- * filenames.h (PATH_SEPARATOR): Delete.
-
-2010-04-23 Pedro Alves <pedro@codesourcery.com>
-
- * filenames.h (IS_DIR_SEPARATOR_1): Rename from IS_DIR_SEPARATOR,
- always define it independently of host, add `dos_based' parameter,
- and handle it.
- (PATH_SEPARATOR): Define.
- (HAS_DRIVE_SPEC_1): Rename from HAS_DRIVE_SPEC, always define it
- independently of host, add `dos_based' parameter, and handle it.
- (IS_ABSOLUTE_PATH_1): Rename from IS_ABSOLUTE_PATH, always define
- it independently of host, add `dos_based' parameter, and handle
- it.
- (IS_DOS_DIR_SEPARATOR, IS_DOS_ABSOLUTE_PATH)
- (IS_UNIX_DIR_SEPARATOR, IS_UNIX_ABSOLUTE_PATH)
- (HAS_DOS_DRIVE_SPEC): New.
- (HAS_DRIVE_SPEC): Reimplement on top of HAS_DRIVE_SPEC_1.
- (IS_DIR_SEPARATOR): Reimplement on top of IS_DIR_SEPARATOR_1.
- (IS_ABSOLUTE_PATH): Reimplement on top of IS_ABSOLUTE_PATH_1.
- * libiberty.h (dos_lbasename, unix_lbasename): Declare.
-
-2009-05-31 Ian Lance Taylor <iant@google.com>
-
- * ansidecl.h: Add extern "C" when compiling with C++. Treat C++
- the way we treat an ISO C compiler. Don't define inline as a
- macro when compiling with C++.
- * dyn-string.h: Add header guard DYN_STRING_H. Add extern "C"
- when compiling with C++.
- * fibheap.h: Add extern "C" when compiling with C++.
-
-2010-04-23 Pedro Alves <pedro@codesourcery.com>
-
- * filenames.h (IS_DIR_SEPARATOR_1): Rename from IS_DIR_SEPARATOR,
- always define it independently of host, add `dos_based' parameter,
- and handle it.
- (HAS_DRIVE_SPEC_1): Rename from HAS_DRIVE_SPEC, always define it
- independently of host, add `dos_based' parameter, and handle it.
- (IS_ABSOLUTE_PATH_1): Rename from IS_ABSOLUTE_PATH, always define
- it independently of host, add `dos_based' parameter, and handle
- it.
- (IS_DOS_DIR_SEPARATOR, IS_DOS_ABSOLUTE_PATH)
- (IS_UNIX_DIR_SEPARATOR, IS_UNIX_ABSOLUTE_PATH)
- (HAS_DOS_DRIVE_SPEC): New.
- (HAS_DRIVE_SPEC): Reimplement on top of HAS_DRIVE_SPEC_1.
- (IS_DIR_SEPARATOR): Reimplement on top of IS_DIR_SEPARATOR_1.
- (IS_ABSOLUTE_PATH): Reimplement on top of IS_ABSOLUTE_PATH_1.
- * libiberty.h (dos_lbasename, unix_lbasename): Declare.
-
-2010-04-20 Nick Clifton <nickc@redhat.com>
-
- * sha1.h: Update copyright notice to use GPLv3.
-
-2010-04-15 Nick Clifton <nickc@redhat.com>
-
- * bout.h: Update copyright notice to use GPLv3.
- * hp-symtab.h: Likewise.
- * oasys.h: Likewise.
- * progress.h: Likewise.
- * sha1.h: Likewise.
- * xtensa-isa-internal.h: Likewise.
- * xtensa-isa.h: Likewise.
-
-2010-04-14 Doug Evans <dje@google.com>
-
- * filenames.h (HAS_DRIVE_SPEC, STRIP_DRIVE_SPEC): New macros.
-
-2010-04-05 Jakub Jelinek <jakub@redhat.com>
-
- * dwarf2.h (DWARF2_Internal_LineInfo): Add li_max_ops_per_insn
- field.
-
-2010-03-25 Joseph Myers <joseph@codesourcery.com>
-
- * dis-asm.h (print_insn_tic6x): Declare.
-
-2010-03-23 Joseph Myers <joseph@codesourcery.com>
-
- * symcat.h (CONCAT5, CONCAT6, XCONCAT5, XCONCAT6): Define.
-
-2010-01-13 Joel Brobecker <brobecker@adacore.com>
-
- Add new DW_AT_use_GNAT_descriptive_type CU attribute.
- * dwarf2.h (dwarf_attribute): Add DW_AT_use_GNAT_descriptive_type.
-
-2010-01-11 Tristan Gingold <gingold@adacore.com>
-
- * demangle.h (ada_demangle): Add prototype.
-
-2010-01-05 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
-
- PR bootstrap/41771
- * ansidecl.h: Fix inline test for C99 and Sun Studio cc.
-
-2009-12-29 Joel Brobecker <brobecker@adacore.com>
-
- * dwarf2.h (enum dwarf_attribute): Add DW_AT_GNAT_descriptive_type.
-
-2009-12-14 Doug Kwan <dougkwan@google.com>
-
- * bfdlink.h (struct bfd_link_callbacks): Rename function parameters
- to avoid shadowed variable warnings.
- * dis-asm.h (struct disassemble_info): Ditto.
- (disassemble_init_for_target): Ditto.
- (init_disassemble_info): Ditto.
-
-2009-11-18 Alan Modra <amodra@bigpond.net.au>
-
- * alloca-conf.h: Clarify comment.
-
-2009-11-06 Jonas Maebe <jonas.maebe@elis.ugent.be>
-
- Add DWARF attribute value for the "Borland fastcall" calling
- convention.
- * dwarf2.h: Add DW_CC_GNU_borland_fastcall_i386 constant.
-
-2009-10-23 Kai Tietz <kai.tietz@onevision.com>
-
- * splay-tree.h (libi_uhostptr_t): Add gcc specific
- __extension__ for long long type case to silent cX9.
- (libi_shostptr_t): Likewise.
-
-2009-10-19 Rafael Avila de Espindola <espindola@google.com>
-
- PR40790
- * plugin-api.h: Don't include stdint.h unconditionally.
-
-2009-10-15 Jakub Jelinek <jakub@redhat.com>
-
- * include/dwarf2.h (DW_LANG_Python): Add comment that it is
- a DWARF 4 addition.
-
-2009-10-14 Alan Modra <amodra@bigpond.net.au>
-
- * bfdlink.h (enum bfd_link_common_skip_ar_symbols): Rename from
- bfd_link_common_skip_ar_aymbols.
- (struct bfd_link_info): Here too.
-
-2009-10-09 Rafael Espindola <espindola@google.com>
-
- * plugin-api.h (ld_plugin_add_input_library): Change argument name to
- libname.
-
-2008-10-03 Rafael Espindola <espindola@google.com>
-
- * plugin-api.h: New.
- * lto-symtab.h: New.
-
-2009-10-05 Rafael Espindola <espindola@google.com>
-
- * plugin-api.h (ld_plugin_status): Add LDPS_BAD_HANDLE.
- (ld_plugin_get_input_file): New.
- (ld_plugin_release_input_file): New.
- (ld_plugin_add_input_library): New.
- (ld_plugin_message): Mark format const.
- (ld_plugin_level): Add LDPT_GET_INPUT_FILE, LDPT_RELEASE_INPUT_FILE and
- LDPT_ADD_INPUT_LIBRARY.
- (ld_plugin_tv): Add tv_get_input_file, tv_release_input_file and
- tv_add_input_library.
-
-2009-10-04 Jerry Quinn <jlquinn@optonline.net>
-
- * plugin-api.h: Fix compile.
-
-2009-09-29 Jason Merrill <jason@redhat.com>
-
- * demangle.h (enum demangle_component_type): Add
- DEMANGLE_COMPONENT_LAMBDA, DEMANGLE_COMPONENT_DEFAULT_ARG,
- DEMANGLE_COMPONENT_UNNAMED_TYPE.
- (struct demangle_component): Add s_unary_num.
-
-2009-09-29 DJ Delorie <dj@redhat.com>
-
- * dis-asm.h: Add prototype for print_insn_rx.
-
-2009-09-25 Dodji Seketeli <dodji@redhat.com>
-
- * dwarf2.h (enum dwarf_tag): Rename DW_TAG_template_parameter_pack and
- DW_TAG_formal_parameter_pack into DW_TAG_GNU_template_parameter_pack
- and DW_TAG_formal_parameter_pack until DWARF 5 is out.
-
-2009-09-25 Cary Coutant <ccoutant@google.com>
-
- Add rest of new values from DWARF Version 4.
- * dwarf2.h (DW_TAG_rvalue_reference_type, DW_TAG_template_alias):
- New tags.
- (DW_FORM_ref_sig8): New name for DW_FORM_sig8.
- (DW_AT_main_subprogram, DW_AT_data_bit_offset, DW_AT_const_expr,
- DW_AT_enum_class, DW_AT_linkage_name, DW_AT_GNU_guarded_by,
- DW_AT_GNU_pt_guarded_by, DW_AT_GNU_guarded, DW_AT_GNU_pt_guarded,
- DW_AT_GNU_locks_excluded, DW_AT_GNU_exclusive_locks_required,
- DW_AT_GNU_shared_locks_required, DW_AT_GNU_odr_signature): New
- attributes.
- (DW_LANG_Python): New language.
-
-2009-09-24 Cary Coutant <ccoutant@google.com>
-
- * dwarf2.h (DW_TAG_rvalue_reference_type, DW_TAG_template_alias):
- New tags.
- (DW_FORM_ref_sig8): New name for DW_FORM_sig8.
- (DW_AT_main_subprogram, DW_AT_data_bit_offset, DW_AT_const_expr,
- DW_AT_enum_class, DW_AT_linkage_name, DW_AT_GNU_guarded_by,
- DW_AT_GNU_pt_guarded_by, DW_AT_GNU_guarded, DW_AT_GNU_pt_guarded,
- DW_AT_GNU_locks_excluded, DW_AT_GNU_exclusive_locks_required,
- DW_AT_GNU_shared_locks_required, DW_AT_GNU_odr_signature): New
- attributes.
- (DW_LANG_Python): New language.
-
-2009-09-22 Dodji Seketeli <dodji@redhat.com>
-
- * dwarf2.h (enum dwarf_tag): Add
- DW_TAG_template_parameter_pack and DW_TAG_formal_parameter_pack.
-
-2009-09-09 Martin Thuresson <martin@mtme.org>
-
- * bfdlink.h (struct bfd_link_hash_common_entry): Move to top
- level.
-
-2009-09-04 Jie Zhang <jie.zhang@analog.com>
-
- * opcode/bfin.h (PseudoDbg_Assert): Add bits_grp and mask_grp.
- (PseudoDbg_Assert_grp_bits, PseudoDbg_Assert_grp_mask): Define.
- (PseudoDbg_Assert_dbgop_bits, PseudoDbg_Assert_dbgop_mask,
- PseudoDbg_Assert_dontcare_bits, PseudoDbg_Assert_dontcare_mask):
- Adjust accordingly.
- (init_PseudoDbg_Assert): Add PseudoDbg_Assert_grp_bits and
- PseudoDbg_Assert_grp_mask.
-
-2009-08-06 Michael Eager <eager@eagercon.com>
-
- * dis-asm.h: Decl print_insn_microblaze().
-
-2009-07-24 Ian Lance Taylor <iant@google.com>
-
- * libiberty.h (crc32): Declare.
-
-2009-07-20 Cary Coutant <ccoutant@google.com>
- Doug Evans <dje@google.com>
-
- Add some dwarf4 values.
- * dwarf2.h (enum dwarf_tag): Add DW_TAG_type_unit.
- (enum dwarf_form): Add DW_FORM_sec_offset, DW_FORM_exprloc,
- DW_FORM_flag_present, DW_FORM_sig8.
- (enum dwarf_attribute): Add DW_AT_signature.
-
-2009-07-17 Jan Kratochvil <jan.kratochvil@redhat.com>
-
- * demangle.h
- (enum demangle_component_type <DEMANGLE_COMPONENT_GLOBAL_CONSTRUCTORS>)
- (enum demangle_component_type <DEMANGLE_COMPONENT_GLOBAL_DESTRUCTORS>):
- New.
-
-2009-07-10 Tom Tromey <tromey@redhat.com>
-
- * dwarf2.h: New file, moved from elf/.
-
-2009-07-09 Jakub Jelinek <jakub@redhat.com>
-
- * dwarf2.h (enum dwarf_location_atom): Add DW_OP_implicit_value
- and DW_OP_stack_value.
-
-2009-07-09 Tom Tromey <tromey@redhat.com>
-
- * elf/dwarf2.h: Remove, renaming to...
- * dwarf2.h: ... this.
-
-2009-06-29 Tom Tromey <tromey@redhat.com>
-
- * elf/dwarf2.h: New file. Merged with gdb.
-
-2009-06-18 Nick Clifton <nickc@redhat.com>
-
- * dis-asm.h (USER_SPECIFIED_MACHINE_TYPE): New value for the flags
- field of struct disassemble_info.
-
-2009-06-09 Ian Lance Taylor <ian@airs.com>
-
- * ansidecl.h (ATTRIBUTE_UNUSED_LABEL): Define for C++.
-
-2009-06-15 Nick Clifton <nickc@redhat.com>
-
- * dis-asm.h (DISASSEMBLE_DATA): New value for the flags field of
- struct disassemble_info.
-
-2009-06-02 Ian Lance Taylor <iant@google.com>
-
- * ansidecl.h (EXPORTED_CONST): Define.
-
-2009-05-31 Ian Lance Taylor <iant@google.com>
-
- * ansidecl.h: Add extern "C" when compiling with C++. Treat C++
- the way we treat an ISO C compiler. Don't define inline as a
- macdro when compiling with C++.
- * dyn-string.h: Add header guard DYN_STRING_H. Add extern "C"
- when compiling with C++.
- * fibheap.h: Add extern "C" when compiling with C++.
-
-2009-05-25 Tristan Gingold <gingold@adacore.com>
-
- * fopen-vms.h (FOPEN_RB, FOPEN_WB, FOPEN_AB, FOPEN_RUB, FOPEN_WUB,
- FOPEN_AUB): Use "rfm=udf,rat=none" attribute.
-
-2009-04-22 Taras Glek <tglek@mozilla.com>
-
- * hashtab.h: Update GTY annotations to new syntax.
- * splay-tree.h: Likewise.
-
-2009-04-08 H.J. Lu <hongjiu.lu@intel.com>
-
- * bfdlink.h (bfd_link_info): Add warn_alternate_em.
-
-2009-03-18 Alan Modra <amodra@bigpond.net.au>
-
- * alloca-conf.h: Revise based on autoconf-2.61, autoconf-2.13
- documentation.
-
-2009-03-17 Jason Merrill <jason@redhat.com>
-
- * demangle.h (enum demangle_component_type): Add
- DEMANGLE_COMPONENT_FUNCTION_PARAM.
-
-2008-12-01 Cary Coutant <ccoutant@google.com>
-
- * plugin-api.h (LDPS_BAD_HANDLE): New constant.
- (ld_plugin_get_input_file): New typedef.
- (ld_plugin_release_input_file): New typedef.
- (LDPT_GET_INPUT_FILE, LDPT_RELEASE_INPUT_FILE): New constants.
- (struct ld_plugin_tv): Add two new fields.
-
-2008-12-23 Jon Beniston <jon@beniston.com>
-
- * dis-asm.h: Add LM32 disassembler function prototype.
-
-2008-12-10 Jason Merrill <jason@redhat.com>
-
- * demangle.h (enum demangle_component_type): Add
- DEMANGLE_COMPONENT_FIXED_TYPE.
-
-2008-12-01 Cary Coutant <ccoutant@google.com>
-
- * plugin-api.h (ld_plugin_message): Change format parameter to const.
-
-2008-12-01 Cary Coutant <ccoutant@google.com>
-
- * plugin-api.h: Fix syntax error when compiling with C++.
-
-2008-11-26 Alan Modra <amodra@bigpond.net.au>
-
- PR 7047
- * bfdlink.h (struct bfd_elf_version_expr): Delete "symbol".
- Add "literal".
-
-2008-11-21 Sterling Augustine <sterling@tensilica.com>
-
- * xtensa-isa-internal.h (XTENSA_STATE_IS_SHARED_OR): New flag.
- * xtensa-isa.h (xtensa_state_is_shared_or): New prototype.
-
-2008-11-19 Bob Wilson <bob.wilson@acm.org>
-
- * xtensa-config.h (XCHAL_HAVE_MUL16, XCHAL_HAVE_MUL32, XCHAL_HAVE_DIV32)
- (XCHAL_HAVE_MINMAX, XCHAL_HAVE_SEXT, XCHAL_HAVE_THREADPTR)
- (XCHAL_HAVE_RELEASE_SYNC, XCHAL_HAVE_S32C1I): Change to 1.
- (XCHAL_NUM_AREGS): Change to 32.
- (XCHAL_ICACHE_SIZE, XCHAL_DCACHE_SIZE): Change to 16K.
- (XCHAL_ICACHE_LINESIZE, XCHAL_DCACHE_LINESIZE): Change to 32.
- (XCHAL_ICACHE_LINEWIDTH, XCHAL_DCACHE_LINEWIDTH): Change to 5.
- (XCHAL_DCACHE_IS_WRITEBACK): Change to 1.
- (XCHAL_DEBUGLEVEL): Change to 6.
-
-2008-11-14 Tristan Gingold <gingold@adacore.com>
-
- * fopen-vms.h (FOPEN_RB): Use a single string to match the
- standard prototype.
- (FOPEN_WB): Ditto.
- (FOPEN_AB): Ditto.
- (FOPEN_RUB): Ditto.
- (FOPEN_WUB): Ditto.
- (FOPEN_AUB): Ditto.
-
-2008-10-21 Alan Modra <amodra@bigpond.net.au>
-
- * obstack.h (obstack_finish <!__GNUC__>): Cast result to void *.
-
-2008-10-06 Jason Merrill <jason@redhat.com>
-
- * demangle.h (enum demangle_component_type): Add
- DEMANGLE_COMPONENT_PACK_EXPANSION.
-
-2008-09-24 Richard Henderson <rth@redhat.com>
-
- * elf/dwarf2.h (DW_OP_GNU_encoded_addr): New.
-
-2008-09-22 Rafael Espindola <espindola@google.com>
-
- * plugin-api.h (ld_plugin_status): Remove comma from the last item.
- Use C style comment.
- (ld_plugin_api_version, ld_plugin_output_file_type,
- ld_plugin_symbol_kind, ld_plugin_symbol_visibility,
- ld_plugin_symbol_resolution, ld_plugin_level, ld_plugin_tag): Remove
- comma from the last item.
-
-2008-09-18 Cary Coutant <ccoutant@google.com>
-
- Add plugin functionality for link-time optimization (LTO).
- * plugin-api.h: New file.
-
-2008-09-09 Jason Merrill <jason@redhat.com>
-
- * demangle.h (enum demangle_component_type): Add
- DEMANGLE_COMPONENT_DECLTYPE.
-
-2008-08-25 Alan Modra <amodra@bigpond.net.au>
-
- * binary-io.h: New file, imported from gnulib, but don't
- #include <fcntl.h> or <stdio.h>.
-
-2008-08-17 Alan Modra <amodra@bigpond.net.au>
-
- * bfdlink.h (bfd_generic_link_read_symbols): Declare.
-
-2008-08-08 Anatoly Sokolov <aesok@post.ru>
-
- * elf/avr.h (E_AVR_MACH_AVR25, E_AVR_MACH_AVR31,
- E_AVR_MACH_AVR35, E_AVR_MACH_AVR51): Define.
- (EF_AVR_MACH): Redefine to 0x7F.
- * opcode/avr.h (AVR_ISA_TINY3, AVR_ISA_ALL, AVR_ISA_USB162): Remove.
- (AVR_ISA_AVR3): Redefine.
- (AVR_ISA_AVR1, AVR_ISA_AVR2, AVR_ISA_AVR31, AVR_ISA_AVR35,
- AVR_ISA_AVR3_ALL, AVR_ISA_AVR4, AVR_ISA_AVR5, AVR_ISA_AVR51,
- AVR_ISA_AVR6): Define.
-
-2008-07-12 Jie Zhang <jie.zhang@analog.com>
-
- Revert
- 2008-07-12 Jie Zhang <jie.zhang@analog.com>
- * bfdlink.h (struct bfd_link_info): Add sep_code member
- variable.
- * elf/bfin.h (EF_BFIN_CODE_IN_L1): Define.
- (EF_BFIN_DATA_IN_L1): Define.
-
-2008-07-12 Jie Zhang <jie.zhang@analog.com>
-
- * bfdlink.h (struct bfd_link_info): Add sep_code member
- variable.
- * elf/bfin.h (EF_BFIN_CODE_IN_L1): Define.
- (EF_BFIN_DATA_IN_L1): Define.
-
-2008-07-07 Stan Shebs <stan@codesourcery.com>
-
- * dis-asm.h (struct disassemble_info): Add endian_code field.
-
-2008-07-07 Joel Brobecker <brobecker@adacore.com>
-
- * safe-ctype.h: Add #include of ctype.h before redefining
- the ctype.h macros.
-
-2008-07-04 Joel Brobecker <brobecker@adacore.com>
-
- * safe-ctype.h: Remove #error when detecting that ctype.h has been
- included. Redefine the various macros provided by ctype.h as
- undefined variables.
-
-2008-06-23 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * libiberty.h (XALLOCA, XDUP, XALLOCAVEC, XDUPVEC, XALLOCAVAR,
- XDUPVAR, XOBNEWVEC, XOBNEWVAR): New.
-
-2008-06-06 Alan Modra <amodra@bigpond.net.au>
-
- * bfdlink.h (struct bfd_link_info): Add "path_separator".
-
-2008-04-10 Andreas Krebbel <krebbel1@de.ibm.com>
-
- * dis-asm.h (print_s390_disassembler_options):
- Prototype added.
-
-2008-03-24 Ian Lance Taylor <iant@google.com>
-
- * sha1.h: New file, from gnulib.
-
- * md5.h: Add extern "C" when compiled with C++.
-
-2008-03-24 Ian Lance Taylor <iant@google.com>
-
- * md5.h: Add extern "C" when compiled with C++.
-
-2008-03-21 Ian Lance Taylor <iant@google.com>
-
- * filenames.h: Add extern "C" when compiled with C++.
-
-2008-02-15 Alan Modra <amodra@bigpond.net.au>
-
- * bfdlink.h (struct bfd_link_hash_table): Delete creator field.
- (struct bfd_link_info): Add output_bfd.
-
-2008-02-11 Bob Wilson <bob.wilson@acm.org>
-
- * xtensa-config.h (XCHAL_HAVE_THREADPTR): Redefine to zero.
- (XCHAL_NUM_AREGS, XCHAL_MAX_INSTRUCTION_SIZE): New.
-
-2008-01-26 David Daney <ddaney@avtrex.com>
-
- * demangle.h (demangle_component_type): Add
- DEMANGLE_COMPONENT_JAVA_RESOURCE,
- DEMANGLE_COMPONENT_COMPOUND_NAME, and
- DEMANGLE_COMPONENT_CHARACTER as new enum values.
- (demangle_component): Add struct s_character to union u.
-
-2007-11-07 Joseph Myers <joseph@codesourcery.com>
- Daniel Jacobowitz <dan@codesourcery.com>
-
- * floatformat.h (struct floatformat): Add split_half field.
- (floatformat_ibm_long_double): New.
-
-2007-09-06 Tom Tromey <tromey@redhat.com>
-
- * libiberty.h (pex_free): Document process killing.
-
-2007-08-31 Douglas Gregor <doug.gregor@gmail.com>
-
- * demangle.h (enum demangle_component_type): Add
- DEMANGLE_COMPONENT_RVALUE_REFERENCE.
-
-2007-07-25 Ben Elliston <bje@au.ibm.com>
-
- * ternary.h: Remove.
-
-2007-07-18 Bob Wilson <bob.wilson@acm.org>
-
- * xtensa-config.h (XCHAL_HAVE_THREADPTR): New.
- (XCHAL_HAVE_RELEASE_SYNC, XCHAL_HAVE_S32C1I): New.
-
-2007-07-17 Nick Clifton <nickc@redhat.com>
-
- * COPYING3: New file. Contains version 3 of the GNU General
- Public License.
-
-2007-07-12 Kai Tietz <kai.tietz@onevision.com>
-
- * splay-tree.h (libi_uhostptr_t, libi_shostptr_t): Adjust types
- work-a-round whitespace problem in gcc gengtype.
-
- * splay-tree.h (libi_uhostptr_t, libi_shostptr_t): New types,
- needed for WIN64 when a long is not wide enough for a pointer.
- (splay_tree_key, splay_tree_value): Use the new types.
-
-2007-07-09 Roland McGrath <roland@redhat.com>
-
- * bfdlink.h (struct bfd_link_info): Add member emit_note_gnu_build_id.
-
-2007-07-06 Nick Clifton <nickc@redhat.com>
-
- * bfdlink.h: Update copyright notice to refer to GPLv3.
-
-2007-06-29 M R Swami Reddy <MR.Swami.Reddy@nsc.com>
-
- * dis-asm.h (print_insn_cr16): New prototype.
-
-2007-06-01 Noah Misch <noah@cs.caltech.edu>
- Alan Modra <amodra@bigpond.net.au>
-
- * bfdlink.h (struct bfd_link_info): Add input_bfds_tail.
-
-2007-05-07 Nathan Froyd <froydnj@codesourcery.com>
-
- * libiberty.h (writeargv): Declare.
-
-2007-04-30 Alan Modra <amodra@bigpond.net.au>
-
- * bfdlink.h (struct bfd_link_info): Add "info" and "minfo".
-
-2007-04-25 Mark Mitchell <mark@codesourcery.com>
-
- * demangle.h: Change license to LGPL + exception.
-
-2007-04-10 Richard Henderson <rth@redhat.com>
-
- * bfdlink.h (struct bfd_link_info): Add relax_trip.
-
-2007-03-29 Joel Brobecker <brobecker@adacore.com>
-
- * filenames.h (FILENAME_CMP): Adjust define to call filename_cmp
- regardless of the type of file system.
-
-2007-03-06 Jan Hubicka <jh@suse.cz>
-
- * ansidecl.h (ATTRIBUTE_COLD, ATTRIBUTE_HOT): New.
-
-2007-02-21 Nick Clifton <nickc@redhat.com>
-
- * bfdlink.h (struct bfd_link_callbacks): Add
- override_segment_assignment field.
-
-2007-02-17 Mark Mitchell <mark@codesourcery.com>
- Nathan Sidwell <nathan@codesourcery.com>
- Vladimir Prus <vladimir@codesourcery.com
- Joseph Myers <joseph@codesourcery.com>
-
- * bin-bugs.h: Remove.
-
-2007-02-09 Joseph S. Myers <joseph@codesourcery.com>
-
- * libiberty.h (pex_write_input): Remove prototype.
-
-2007-02-05 Dave Brolley <brolley@redhat.com>
-
- * Contribute the following changes:
- 2001-03-26 Ben Elliston <bje@redhat.com>
-
- * dis-asm.h (print_insn_mep): Declare.
-
-2007-02-02 H.J. Lu <hongjiu.lu@intel.com>
-
- * dis-asm.h (print_i386_disassembler_options): New.
-
-2007-01-31 Vladimir Prus <vladimir@codesourcery.com>
-
- * libiberty.h (PEX_STDERR_TO_PIPE): New define.
- (PEX_BINARY_ERROR): New define.
- (pex_read_err): New function.
-
-2007-01-29 Simon Baldwin <simonb@google.com>
-
- * demangle.h: New cplus_demangle_print_callback,
- cplus_demangle_v3_callback, and java_demangle_v3_callback function
- prototypes, and demangle_callbackref type definition.
-
-2007-01-16 H.J. Lu <hongjiu.lu@intel.com>
-
- PR ld/3831
- * bfdlink.h (bfd_link_info): Rename dynamic to dynamic_list.
- Add dynamic and dynamic_data.
-
-2006-12-05 Michael Tautschnig <tautschn@model.in.tum.de>
- Nick Clifton <nickc@redhat.com>
-
- * ansidecl.h (ATTRIBUTE_PACKED): Define.
-
-2006-11-30 Andrew Stubbs <andrew.stubbs@st.com>
- J"orn Rennecke <joern.rennecke@st.com>
-
- PR driver/29931
- * libiberty.h (make_relative_prefix_ignore_links): Declare.
-
-2006-11-27 Bob Wilson <bob.wilson@acm.org>
-
- * xtensa-config.h (XSHAL_ABI): New.
- (XTHAL_ABI_WINDOWED, XTHAL_ABI_CALL0): New.
-
-2006-11-27 Bob Wilson <bob.wilson@acm.org>
-
- * xtensa-isa.h (STATIC_LIBISA): Delete.
-
-2006-10-30 Paul Brook <paul@codesourcery.com>
-
- * dis-asm.h (disassemble_info): Add symtab, symtab_pos and
- symtab_size.
-
-2006-10-30 H.J. Lu <hongjiu.lu@intel.com>
-
- PR ld/3111
- * bfdlink.h (bfd_link_info): Add reduce_memory_overheads.
-
-2006-10-25 Trevor Smigiel <Trevor_Smigiel@playstation.sony.com>
- Yukishige Shibata <shibata@rd.scei.sony.co.jp>
- Nobuhisa Fujinami <fnami@rd.scei.sony.co.jp>
- Takeaki Fukuoka <fukuoka@rd.scei.sony.co.jp>
- Alan Modra <amodra@bigpond.net.au>
-
- * dis-asm.h (print_insn_spu): Declare.
-
-2006-09-17 Mei Ligang <ligang@sunnorth.com.cn>
-
- * dis-asm.h: Add prototypes for Score disassembler routines.
-
-2006-09-07 H.J. Lu <hongjiu.lu@intel.com>
-
- * bfdlink.h (bfd_elf_dynamic_list): New.
- (bfd_link_info): Add a dynamic field.
-
-2006-08-04 Marcelo Tosatti <marcelo@kvack.org>
-
- * bfdlink.h (struct bfd_link_info): New field: print_gc_sections.
-
-2006-07-10 Jakub Jelinek <jakub@redhat.com>
-
- * bfdlink.h (struct bfd_link_info): Add emit_hash and
- emit_gnu_hash bitfields.
-
-2006-04-11 Jim Blandy <jimb@codesourcery.com>
-
- * libiberty.h (pex_input_file, pex_input_pipe): New declarations.
-
-2006-04-06 H.J. Lu <hongjiu.lu@intel.com>
-
- * bfdlink.h (bfd_link_info): Replace need_relax_finalize with
- relax_pass.
-
-2006-02-17 Shrirang Khisti <shrirangk@kpitcummins.com>
- Anil Paranjape <anilp1@kpitcummins.com>
- Shilin Shakti <shilins@kpitcummins.com>
-
- * dis-asm.h (print_insn_xc16c): New prototype.
-
-2006-01-18 DJ Delorie <dj@redhat.com>
-
- * md5.h: Include ansidecl.h
-
-2006-01-17 Andreas Schwab <schwab@suse.de>
-
- PR binutils/1486
- * dis-asm.h (struct disassemble_info): Add
- disassembler_needs_relocs.
-
-2006-01-09 Bob Wilson <bob.wilson@acm.org>
-
- * xtensa-config.h (XCHAL_HAVE_MUL32_HIGH): Define.
-
-2005-12-30 Bob Wilson <bob.wilson@acm.org>
-
- * xtensa-config.h (XCHAL_HAVE_WIDE_BRANCHES): New.
-
-2005-12-16 Nathan Sidwell <nathan@codesourcery.com>
-
- Second part of ms1 to mt renaming.
- * dis-asm.h (print_insn_mt): Renamed.
-
-2005-12-10 Terry Laurenzo <tlaurenzo@gmail.com>
-
- PR java/9861
- * demangle.h : Add DMGL_RET_POSTFIX define to enable alternative
- output format for return types
-
-2005-11-03 Alan Modra <amodra@bigpond.net.au>
-
- * bfdlink.h (struct bfd_link_order): Tweak comment.
-
-2005-10-31 Mark Kettenis <kettenis@gnu.org>
-
- * floatformat.h (enum floatformat_byteorders): Add
- floatformat_vax.
- (floatformat_vax_aingle, floatformat_vax_double): Declare.
-
-2005-10-28 Dave Brolley <brolley@redhat.com>
-
- Contribute the following changes:
- 2003-09-29 Dave Brolley <brolley@redhat.com>
-
- * dis-asm.h (disassemble_info): insn_sets now (void *) to allow for
- more exotic underlying types to be used.
-
-2005-10-25 Arnold Metselaar <arnold.metselaar@planet.nl>
-
- disasm.h: Add declaration for print_insn_z80
-
-2005-09-30 Catherine Moore <clm@cm00re.com>
-
- * dis-asm.h (print_insn_bfin): Declare.
-
-2005-09-26 Mark Mitchell <mark@codesourcery.com>
-
- * libiberty.h (expandargv): New function.
-
-2005-08-18 Alan Modra <amodra@bigpond.net.au>
-
- * bfdlink.h: Remove mention of a29k.
- * dis-asm.h: Remove a29k support.
-
-2005-08-17 Mark Kettenis <kettenis@gnu.org>
-
- * floatformat.h (struct floatformat): Change type of large
- argument for is_valid member to `const void *'.
- (floatformat_to_double): Change type of second argument to `const
- void *'.
- (floatformat_from_double): Change type of last argument to `void
- *'.
- (floatformat_is_valid): Change type of last argument to `const
- void *'.
-
-2005-07-14 Jim Blandy <jimb@redhat.com>
-
- * dis-asm.h (print_insn_m32c): New declaration.
-
-2005-07-12 Ben Elliston <bje@au.ibm.com>
-
- * xregex2.h (regexec): Qualify this prototype with __extension__
- when compiling with GNU C.
-
-2005-07-07 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * dis-asm.h (fprintf_ftype): Add format attribute.
-
-2005-07-03 Steve Ellcey <sje@cup.hp.com>
-
- PR other/13906
- * ansidecl.h (ATTRIBUTE_ALIGNED_ALIGNOF): New.
- * md5.h (md5_uintptr): New.
- (md5_ctx): Align buffer field.
-
-2005-06-30 Daniel Berlin <dberlin@dberlin.org>
-
- * hashtab.h (HTAB_DELETED_ENTRY): New macro.
- (HTAB_EMPTY_ENTRY): New macro.
-
-2005-06-20 Geoffrey Keating <geoffk@apple.com>
-
- * libiberty.h (strverscmp): Prototype.
-
-2005-06-17 Jakub Jelinek <jakub@redhat.com>
-
- * elf/external.h (GRP_ENTRY_SIZE): Define.
-
-2005-06-08 Zack Weinberg <zack@codesourcery.com>
-
- * dis-asm.h (get_arm_regnames): Update prototype.
-
-2005-06-07 Aldy Hernandez <aldyh@redhat.com>
- Michael Snyder <msnyder@redhat.com>
- Stan Cox <scox@redhat.com>
-
- * dis-asm.h: Externalize print_insn_ms1.
-
-2005-06-06 Gabriel Dos Reis <gdr@integrable-solutions.net>
-
- * libiberty.h (XOBFINISH): New.
-
-2005-06-03 Alan Modra <amodra@bigpond.net.au>
-
- * bfdlink.h (struct bfd_link_callbacks): Add einfo.
-
-2005-06-01 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * libiberty.h (vsnprintf): Add format attribute.
-
-2005-05-29 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * ansidecl.h: Add ATTRIBUTE_FPTR_PRINTF.
-
-2005-05-28 Eli Zaretskii <eliz@gnu.org>
-
- * libiberty.h: (snprintf) [!HAVE_DECL_SNPRINTF]: Declare if
- needed.
- (vsnprintf) [!HAVE_DECL_VSNPRINTF]: Declare if needed.
-
-2005-05-25 Richard Henderson <rth@redhat.com>
-
- * demangle.h (DEMANGLE_COMPONENT_HIDDEN_ALIAS): New.
-
-2005-05-24 Gabriel Dos Reis <gdr@integrable-solutions.net>
-
- * libiberty.h (ACONCAT): Properly cast value of alloca().
-
- * ansidecl.h (ATTRIBUTE_UNUSED_LABEL): Don't define if
- __cplusplus.
-
-2005-05-12 Steve Ellcey <sje@cup.hp.com>
-
- libiberty.h: Do not define empty basename prototype.
-
-2005-05-10 Nick Clifton <nickc@redhat.com>
-
- * Update the address and phone number of the FSF organization in
- the GPL notices in the following files:
- COPYING, ansidecl.h, bfdlink.h, bout.h, demangle.h, dis-asm.h,
- dyn-string.h, fibheap.h, filenames.h, floatformat.h,
- fnmatch.h, gdbm.h, getopt.h, hashtab.h, hp-symtab.h, ieee.h,
- libiberty.h, md5.h, oasys.h, objalloc.h, obstack.h, os9k.h,
- partition.h, progress.h, safe-ctype.h, sort.h, splay-tree.h,
- symcat.h, ternary.h, xregex2.h, xtensa-config.h,
- xtensa-isa-internal.h, xtensa-isa.h
-
-2005-04-25 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * libiberty.h (unlock_std_streams): New.
-
-2005-04-19 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * hashtab.h, libiberty.h, objalloc.h, splay-tree.h, ternary.h:
- Don't use the PTR macro.
-
- * sort.h: Don't use the PARAMS macro.
-
-2005-04-16 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * libiberty.h (unlock_stream): New.
-
-2005-04-13 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * libiberty.h (fopen_unlocked, fdopen_unlocked, freopen_unlocked):
- Remove parameter names.
-
-2005-04-11 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * libiberty.h (fopen_unlocked, fdopen_unlocked, freopen_unlocked):
- Provide prototypes for new functions.
-
-2005-03-29 Ian Lance Taylor <ian@airs.com>
-
- * libiberty.h: Fix indentation.
-
-2005-03-28 Ian Lance Taylor <ian@airs.com>
-
- * libiberty.h: Include <stdio.h>.
- (PEX_RECORD_TIMES, PEX_USE_PIPES, PEX_SAVE_TEMPS): Define.
- (PEX_LAST, PEX_SEARCH, PEX_SUFFIX, PEX_STDERR_TO_STDOUT): Define.
- (PEX_BINARY_INPUT, PEX_BINARY_OUTPUT): Define.
- (pex_init, pex_run, pex_read_output): Declare.
- (pex_get_status, pex_get_times, pex_free, pex_one): Declare.
- (struct pex_time): Define.
-
-2005-03-28 Mark Mitchell <mark@codesourcery.com>
-
- * libiberty.h (ffs): Declare, if necessary.
-
-2005-03-27 Gabriel Dos Reis <gdr@integreable-solutions.net>
-
- * ternary.h: Don't use PARAMS anymore.
-
-2005-03-27 Gabriel Dos Reis <gdr@integrable-solutions.net>
-
- * md5.h: Remove definition and uses of __P.
- * dyn-string.h: Remove uses of PARAMS.
- * fibheap.h: Likewise.
- * floatformat.h: Likewise.
- * hashtab.h: Likewise.
-
-2005-03-26 Gabriel Dos Reis <gdr@integrable-solutions.net>
-
- * demangle.h: Remove uses of PARAMS.
-
- * libiberty.h (ANSI_PROTOTYPES): Remove guard since
- ANSI_PROTOTYPES is always assumed.
- Remove uses of PARAMS throughout.
-
-2005-03-24 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * libiberty.h (xstrndup): Declare.
-
-2005-03-22 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * libiberty.h (make_relative_prefix): Add ATTRIBUTE_MALLOC.
-
-2005-03-22 Bob Wilson <bob.wilson@acm.org>
-
- * xtensa-isa.h: Update a comment and whitespace.
-
-2005-03-16 H.J. Lu <hongjiu.lu@intel.com>
-
- * bfdlink.h (bfd_link_info): Add gc_sections.
-
-2005-03-09 Mark Mitchell <mark@codesourcery.com>
-
- * libiberty.h (gettimeofday): Declare.
-
-2005-03-01 Jan Beulich <jbeulich@novell.com>
-
- * libiberty.h: Declare unlink_if_ordinary.
-
-2005-02-21 Alan Modra <amodra@bigpond.net.au>
-
- * xtensa-isa-internal.h (xtensa_length_decode_fn): Warning fix.
- * xtensa-isa.h (xtensa_insnbuf_to_chars): Likewise.
- (xtensa_insnbuf_from_chars, xtensa_isa_length_from_chars): Likewise.
-
-2005-02-14 Paolo Bonzini <bonzini@gnu.org>
-
- PR bootstrap/19818
- * ansidecl.h (PARAMS): Guard from redefinition.
-
-2005-02-03 Alan Modra <amodra@bigpond.net.au>
-
- * bfdlink.h (struct bfd_link_hash_entry): Add u.undef.weak.
-
-2005-02-01 Alan Modra <amodra@bigpond.net.au>
-
- * bfdlink.h (bfd_link_repair_undef_list): Declare.
-
-2005-01-10 Andreas Schwab <schwab@suse.de>
-
- * dis-asm.h (struct disassemble_info): Add skip_zeroes and
- skip_zeroes_at_end.
-
-2004-12-11 Ben Elliston <bje@au.ibm.com>
-
- * fibheap.h (struct fibnode): Only use unsigned long bitfields
- when __GNUC__ is defined and ints are less than 32-bits wide.
-
-2004-11-04 Paul Brook <paul@codesourcery.com>
-
- * bfdlink.h (bfd_link_info): Add default_imported_symver.
-
-2004-11-12 Bob Wilson <bob.wilson@acm.org>
-
- * xtensa-isa-internal.h (xtensa_interface_internal): Add class_id.
- * xtensa-isa.h (xtensa_interface_class_id): New prototype.
-
-2004-11-08 Inderpreet Singh <inderpreetb@nioda.hcltech.com>
- Vineet Sharma <vineets@noida.hcltech.com>
-
- * dis-asm.h: Add prototype for print_insn_maxq_little.
-
-2004-10-26 Paul Brook <paul@codesourcery.com>
-
- * bfdlink.h (struct bfd_link_info): Add create_default_symver.
-
-2004-10-21 H.J. Lu <hongjiu.lu@intel.com>
-
- PR 463
- * bfdlink.h (bfd_link_callbacks): Add a pointer to struct
- bfd_link_hash_entry to reloc_overflow.
-
-2004-10-07 Bob Wilson <bob.wilson@acm.org>
-
- * xtensa-config.h (XSHAL_USE_ABSOLUTE_LITERALS,
- XCHAL_HAVE_PREDICTED_BRANCHES, XCHAL_INST_FETCH_WIDTH): New.
- (XCHAL_EXTRA_SA_SIZE, XCHAL_EXTRA_SA_ALIGN): Delete.
-
- * xtensa-isa-internal.h (ISA_INTERFACE_VERSION): Delete.
- (config_sturct struct): Delete.
- (XTENSA_OPERAND_IS_REGISTER, XTENSA_OPERAND_IS_PCRELATIVE,
- XTENSA_OPERAND_IS_INVISIBLE, XTENSA_OPERAND_IS_UNKNOWN,
- XTENSA_OPCODE_IS_BRANCH, XTENSA_OPCODE_IS_JUMP,
- XTENSA_OPCODE_IS_LOOP, XTENSA_OPCODE_IS_CALL,
- XTENSA_STATE_IS_EXPORTED, XTENSA_INTERFACE_HAS_SIDE_EFFECT): Define.
- (xtensa_format_encode_fn, xtensa_get_slot_fn, xtensa_set_slot_fn): New.
- (xtensa_insn_decode_fn): Rename to ...
- (xtensa_opcode_decode_fn): ... this.
- (xtensa_immed_decode_fn, xtensa_immed_encode_fn, xtensa_do_reloc_fn,
- xtensa_undo_reloc_fn): Update.
- (xtensa_encoding_template_fn): Delete.
- (xtensa_opcode_encode_fn, xtensa_format_decode_fn,
- xtensa_length_decode_fn): New.
- (xtensa_format_internal, xtensa_slot_internal): New types.
- (xtensa_operand_internal): Delete operand_kind, inout, isPCRelative,
- get_field, and set_field fields. Add name, field_id, regfile,
- num_regs, and flags fields.
- (xtensa_arg_internal): New type.
- (xtensa_iclass_internal): Change operands field to array of
- xtensa_arg_internal. Add num_stateOperands, stateOperands,
- num_interfaceOperands, and interfaceOperands fields.
- (xtensa_opcode_internal): Delete length, template, and iclass fields.
- Add iclass_id, flags, encode_fns, num_funcUnit_uses, and funcUnit_uses.
- (opname_lookup_entry): Delete.
- (xtensa_regfile_internal, xtensa_interface_internal,
- xtensa_funcUnit_internal, xtensa_state_internal,
- xtensa_sysreg_internal, xtensa_lookup_entry): New.
- (xtensa_isa_internal): Replace opcode_table field with opcodes field.
- Change type of opname_lookup_table. Delete num_modules,
- module_opcode_base, module_decode_fn, config, and has_density fields.
- Add num_formats, formats, format_decode_fn, length_decode_fn,
- num_slots, slots, num_fields, num_operands, operands, num_iclasses,
- iclasses, num_regfiles, regfiles, num_states, states,
- state_lookup_table, num_sysregs, sysregs, sysreg_lookup_table,
- max_sysreg_num, sysreg_table, num_interfaces, interfaces,
- interface_lookup_table, num_funcUnits, funcUnits and
- funcUnit_lookup_table fields.
- (xtensa_isa_module, xtensa_isa_modules): Delete.
- (xtensa_isa_name_compare): New prototype.
- (xtisa_errno, xtisa_error_msg): New.
- * xtensa-isa.h (XTENSA_ISA_VERSION): Define.
- (xtensa_isa): Change type.
- (xtensa_operand): Delete.
- (xtensa_format, xtensa_regfile, xtensa_state, xtensa_sysreg,
- xtensa_interface, xtensa_funcUnit, xtensa_isa_status,
- xtensa_funcUnit_use): New types.
- (libisa_module_specifier): Delete.
- (xtensa_isa_errno, xtensa_isa_error_msg): New prototypes.
- (xtensa_insnbuf_free, xtensa_insnbuf_to_chars,
- xtensa_insnbuf_from_chars): Update prototypes.
- (xtensa_load_isa, xtensa_extend_isa, xtensa_default_isa,
- xtensa_insn_maxlength, xtensa_num_opcodes, xtensa_decode_insn,
- xtensa_encode_insn, xtensa_insn_length,
- xtensa_insn_length_from_first_byte, xtensa_num_operands,
- xtensa_operand_kind, xtensa_encode_result,
- xtensa_operand_isPCRelative): Delete.
- (xtensa_isa_init, xtensa_operand_inout, xtensa_operand_get_field,
- xtensa_operand_set_field, xtensa_operand_encode,
- xtensa_operand_decode, xtensa_operand_do_reloc,
- xtensa_operand_undo_reloc): Update prototypes.
- (xtensa_isa_maxlength, xtensa_isa_length_from_chars,
- xtensa_isa_num_pipe_stages, xtensa_isa_num_formats,
- xtensa_isa_num_opcodes, xtensa_isa_num_regfiles, xtensa_isa_num_states,
- xtensa_isa_num_sysregs, xtensa_isa_num_interfaces,
- xtensa_isa_num_funcUnits, xtensa_format_name, xtensa_format_lookup,
- xtensa_format_decode, xtensa_format_encode, xtensa_format_length,
- xtensa_format_num_slots, xtensa_format_slot_nop_opcode,
- xtensa_format_get_slot, xtensa_format_set_slot, xtensa_opcode_decode,
- xtensa_opcode_encode, xtensa_opcode_is_branch, xtensa_opcode_is_jump,
- xtensa_opcode_is_loop, xtensa_opcode_is_call,
- xtensa_opcode_num_operands, xtensa_opcode_num_stateOperands,
- xtensa_opcode_num_interfaceOperands, xtensa_opcode_num_funcUnit_uses,
- xtensa_opcode_funcUnit_use, xtensa_operand_name,
- xtensa_operand_is_visible, xtensa_operand_is_register,
- xtensa_operand_regfile, xtensa_operand_num_regs,
- xtensa_operand_is_known_reg, xtensa_operand_is_PCrelative,
- xtensa_stateOperand_state, xtensa_stateOperand_inout,
- xtensa_interfaceOperand_interface, xtensa_regfile_lookup,
- xtensa_regfile_lookup_shortname, xtensa_regfile_name,
- xtensa_regfile_shortname, xtensa_regfile_view_parent,
- xtensa_regfile_num_bits, xtensa_regfile_num_entries,
- xtensa_state_lookup, xtensa_state_name, xtensa_state_num_bits,
- xtensa_state_is_exported, xtensa_sysreg_lookup,
- xtensa_sysreg_lookup_name, xtensa_sysreg_name, xtensa_sysreg_number,
- xtensa_sysreg_is_user, xtensa_interface_lookup, xtensa_interface_name,
- xtensa_interface_num_bits, xtensa_interface_inout,
- xtensa_interface_has_side_effect, xtensa_funcUnit_lookup,
- xtensa_funcUnit_name, xtensa_funcUnit_num_copies): New prototypes.
-2004-10-07 Jeff Baker <jbaker@qnx.com>
-
- * bfdlink.h (bfd_link_info): Add bitfield: warn_shared_textrel.
-
-2004-09-17 Alan Modra <amodra@bigpond.net.au>
-
- * bfdlink.h (struct bfd_link_hash_entry): Move und_next into elements
- of union.
-
-2004-09-13 Aaron W. LaFramboise <aaronavay62@aaronwl.com>
-
- * libiberty.h (basename): Prototype for __MINGW32__.
-
-2004-09-04 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * ansidecl.h (ATTRIBUTE_SENTINEL): Define.
- * libiberty.h (concat, reconcat, concat_length, concat_copy,
- concat_copy2): Use ATTRIBUTE_SENTINEL.
-
-2004-08-13 Alan Modra <amodra@bigpond.net.au>
-
- * bfdlink.h (struct bfd_link_callbacks): Remove "error_handler".
- (LD_DEFINITION_IN_DISCARDED_SECTION): Delete.
-
-2004-08-02 Gabriel Dos Reis <gdr@integrable-solutions.net>
-
- * libiberty.h (XDELETE, XDELETEVEC, XRESIZEVEC): Remove any
- const-qualification before disposal.
-
-2004-07-24 Bernardo Innocenti <bernie@develer.com>
-
- * ansidecl.h (ARG_UNUSED): New Macro.
-
-2004-07-23 H.J. Lu <hongjiu.lu@intel.com>
-
- * bin-bugs.h (REPORT_BUGS_TO): Set to
- "<URL:http://www.sourceware.org/bugzilla/>".
-
-2004-07-21 Paolo Bonzini <bonzini@gnu.org>
-
- * ansidecl.h (ATTRIBUTE_PURE): New.
-
-2004-07-13 Bernardo Innocenti <bernie@develer.com>
-
- * libiberty.h (XNEW, XCNEW, XNEWVEC, XCNEWVEC, XOBNEW): Move here from
- libcpp/internal.h.
- (XDELETE, XRESIZEVEC, XDELETEVEC, XNEWVAR, XCNEWVAR, XRESIZEVAR): New
- macros.
-
-2004-07-13 Bernardo Innocenti <bernie@develer.com>
-
- * libiberty.h (ASTRDUP): Add casts required for stricter
- type conversion rules of C++.
- * obstack.h (obstack_free): Likewise.
-
-2004-07-07 Tomer Levi <Tomer.Levi@nsc.com>
-
- * dis-asm.h (print_insn_crx): Declare.
-
-2004-06-24 Alan Modra <amodra@bigpond.net.au>
-
- * bfdlink.h (struct bfd_link_order): Update comment.
-
-2004-05-11 Jakub Jelinek <jakub@redhat.com>
-
- * bfdlink.h (struct bfd_link_info): Add relro, relro_start and
- relro_end fields.
-
-2004-05-04 Andreas Jaeger <aj@suse.de>
-
- * demangle.h: Do not use C++ reserved keyword typename as
- parameter for cplus_demangle_fill_builtin_type.
-
-2004-04-22 Richard Henderson <rth@redhat.com>
-
- * hashtab.h (struct htab): Add size_prime_index.
-
-2004-04-13 Jeff Law <law@redhat.com>
-
- * hashtab.h (htab_remove_elt_with_hash): Prototype new function.
-
-2004-03-30 Zack Weinberg <zack@codesourcery.com>
-
- * hashtab.h, splay-tree.h: Use new shorter form of GTY markers.
-
-2004-03-25 Stan Shebs <shebs@apple.com>
-
- * mpw/: Remove subdirectory and everything in it.
-
-2004-03-23 Alan Modra <amodra@bigpond.net.au>
-
- PR 51.
- * bfdlink.h (struct bfd_link_info): Add wrap_char.
-
-2004-03-20 H.J. Lu <hongjiu.lu@intel.com>
-
- * bfdlink.h (bfd_link_info): Correct comments for the
- unresolved_syms_in_objects field.
-
-2004-02-24 Ian Lance Taylor <ian@wasabisystems.com>
-
- * dyn-string.h: Update copyright date.
-
-2004-02-23 Ian Lance Taylor <ian@wasabisystems.com>
-
- * dyn-string.h: Remove test of IN_LIBGCC2 and IN_GLIBCPP_V3 and
- the associated #defines.
-
-2004-01-12 Ian Lance Taylor <ian@wasabisystems.com>
-
- * demangle.h: Instead of checking ANSI_PROTOTYPES, just include
- "libiberty.h".
-
- * demangle.h: If ANSI_PROTOTYPES is defined, include <stddef.h>.
-
- * demangle.h (enum demangle_component_type): Define.
- (struct demangle_operator_info): Declare.
- (struct demangle_builtin_type_info): Declare.
- (struct demangle_component): Define.
- (cplus_demangle_fill_component): Declare.
- (cplus_demangle_fill_name): Declare.
- (cplus_demangle_fill_builtin_type): Declare.
- (cplus_demangle_fill_operator): Declare.
- (cplus_demangle_fill_extended_operator): Declare.
- (cplus_demangle_fill_ctor, cplus_demangle_fill_dtor): Declare.
- (cplus_demangle_v3_components): Declare.
- (cplus_demangle_print): Declare.
-
-For older changes see ChangeLog-9103
-
-Copyright (C) 2004-2012 Free Software Foundation, Inc.
-
-Copying and distribution of this file, with or without modification,
-are permitted in any medium without royalty provided the copyright
-notice and this notice are preserved.
-
-Local Variables:
-mode: change-log
-left-margin: 8
-fill-column: 74
-version-control: never
-End:
diff --git a/include/ChangeLog-9103 b/include/ChangeLog-9103
deleted file mode 100644
index bac53022b..000000000
--- a/include/ChangeLog-9103
+++ /dev/null
@@ -1,2688 +0,0 @@
-2003-12-19 Andreas Tobler <a.tobler@schweiz.ch>
-
- * include/fibheap.h (fibnode): Use __extension__ for
- bit-fields mark and degree if __GNUC__.
-
-2003-12-18 Kazu Hirata <kazu@cs.umass.edu>
-
- * include/fibheap.h (fibnode): Use unsigned long int for
- bit-fields if __GNUC__ is defined.
-
-2003-12-19 Andreas Tobler <a.tobler@schweiz.ch>
-
- * fibheap.h (fibnode): Use __extension__ for
- bit-fields mark and degree if __GNUC__.
-
-2003-12-18 Kazu Hirata <kazu@cs.umass.edu>
-
- * fibheap.h (fibnode): Use unsigned long int for
- bit-fields if __GNUC__ is defined.
-
-2003-12-04 H.J. Lu <hongjiu.lu@intel.com>
-
- * bfdlink.h (bfd_link_info): Change relax_finalizing to
- need_relax_finalize.
-
-2003-12-03 Alan Modra <amodra@bigpond.net.au>
-
- * bfdlink.h (struct bfd_link_hash_entry): Rename "next" to "und_next".
-
-2003-12-02 Alan Modra <amodra@bigpond.net.au>
-
- * bfdlink.h (struct bfd_link_info): Remove mpc860c0 field.
-
-2003-11-14 Nick Clifton <nickc@redhat.com>
-
- * dis-asm.h (struct disassemble_info): Add new field
- 'symbol_is_valid' which is a function which can tell the
- disassembler to skip certain symbols as they should not be
- displayed to the user.
- (arm_symbol_is_valid): New prototype. This is the ARM
- specific function for the symbol_is_valid field.
- (generic_symbol_is_valid): New prototype. This is the default
- function pointed to by the symbol_is_valid field.
-
-2003-11-06 Bruno Rohee <bruno@rohee.com>
-
- * hp-symtab.h: Fix "the the" typo.
-
-2003-10-24 H.J. Lu <hongjiu.lu@intel.com>
-
- * bfdlink.h (bfd_elf_version_expr): Add "symbol" and remove
- "wildcard".
-
-2003-10-22 Joseph S. Myers <jsm@polyomino.org.uk>
-
- * obstack.h: Merge the following change from gnulib:
- 2003-10-21 Paul Eggert <eggert@twinsun.com>
- * obstack.h (obstack_1grow_fast): Properly parenthesize arg.
- (obstack_ptr_grow_fast, obstack_int_grow_fast):
- Don't use lvalue casts, as GCC plans to remove support for them
- in GCC 3.5. Reported by Joseph S. Myers. This bug
- was also present in the non-GCC version, indicating that this
- code had always been buggy and had never been widely used.
- (obstack_1grow, obstack_ptr_grow, obstack_int_grow, obstack_blank):
- Use the fast variant of each macro, rather than copying the
- definiens of the fast variant; that way, we'll be more likely to
- catch future bugs in the fast variants.
-
-2003-10-22 Jakub Jelinek <jakub@redhat.com>
-
- * bfdlink.h (struct bfd_elf_version_expr): Remove match field.
- Add wildcard and mask fields.
- (BFD_ELF_VERSION_C_TYPE): Define.
- (BFD_ELF_VERSION_CXX_TYPE): Likewise.
- (BFD_ELF_VERSION_JAVA_TYPE): Likewise.
- (struct bfd_elf_version_expr_head): New.
- (struct bfd_elf_version_tree): Add match field.
- Change type of globals and locals fields
- to struct bfd_elf_version_expr_head.
-
-2003-09-22 Andrew Cagney <cagney@redhat.com>
-
- * floatformat.h (struct floatformat): Add field "is_valid".
-
-2003-09-15 Andrew Cagney <cagney@redhat.com>
-
- * floatformat.h (floatformat_to_double): Make input buffer constant.
- (floatformat_from_double, floatformat_is_valid): Ditto.
-
-2003-09-15 Andrew Cagney <cagney@redhat.com>
-
- * floatformat.h (struct floatformat): Make "exp_bias" signed.
-
-2003-09-15 Daniel Jacobowitz <drow@mvista.com>
-
- * floatformat.h (floatformat_is_valid): Add prototype.
-
-2003-08-27 Andrew Cagney <cagney@redhat.com>
-
- * dis-asm.h (init_disassemble_info): Declare.
- (INIT_DISASSEMBLE_INFO): Redefine as a call to
- init_disassemble_info.
- (INIT_DISASSEMBLE_INFO_NO_ARCH): Ditto.
-
-2003-08-20 Nick Clifton <nickc@redhat.com>
-
- * bfdlink.h (enum report_method): New enum. Describes how to
- report something.
- (struct bfd_link_info): Delete fields 'no_undefined' and
- 'allow_shlib_undefined'. Replace with
- 'unresolved_symbols_in_objects' and
- 'unresolved_symbols_in_shared_libs'.
-
-2003-08-07 Alan Modra <amodra@bigpond.net.au>
-
- * bfdlink.h: Remove PARAMS macro. Replace PTR with void *.
- * dis-asm.h: Likewise.
-
-2003-07-09 Bob Wilson <bob.wilson@acm.org>
-
- * xtensa-config.h: Undef all macros before defining them.
-
-2003-07-06 H.J. Lu <hongjiu.lu@intel.com>
-
- * demangle.h: Support C++.
-
-2003-07-01 Zack Weinberg <zack@codesourcery.com>
-
- * filenames.h: New file imported from binutils.
-
-2003-06-30 Bob Wilson <bob.wilson@acm.org>
-
- * xtensa-config.h: New file imported from binutils.
-
-2003-06-30 Bob Wilson <bob.wilson@acm.org>
-
- * xtensa-config.h (XCHAL_HAVE_CONST16, XCHAL_HAVE_ABS,
- XCHAL_HAVE_ADDX, XCHAL_HAVE_L32R): Define.
-
-2003-06-25 Alan Modra <amodra@bigpond.net.au>
-
- * bfdlink.h: Correct spelling of "relocatable".
-
-2003-06-22 Zack Weinberg <zack@codesourcery.com>
-
- * safe-ctype.h (HC_UNKNOWN, HC_ASCII, HC_EBCDIC): Rename to
- HOST_CHARSET_UNKNOWN, HOST_CHARSET_ASCII, HOST_CHARSET_EBCDIC
- respectively.
-
-2003-06-21 Zack Weinberg <zack@codesourcery.com>
-
- * safe-ctype.h (HC_UNKNOWN, HC_ASCII, HC_EBCDIC, HOST_CHARSET):
- New #defines.
-
-2003-06-17 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * ansidecl.h: Delete HAVE_LONG_DOUBLE GCC bootstrap support.
-
-2003-05-23 Jakub Jelinek <jakub@redhat.com>
-
- * bfdlink.h (struct bfd_link_info): Add execstack and noexecstack.
-
-2003-06-03 H.J. Lu <hongjiu.lu@intel.com>
-
- * bfdlink.h (LD_DEFINITION_IN_DISCARDED_SECTION): New.
-
-2003-05-30 Ulrich Drepper <drepper@redhat.com>
- Jakub Jelinek <jakub@redhat.com>
-
- * bfdlink.h (struct bfd_link_info): Add pie and executable
- bits.
-
-2003-05-21 Nick Clifton <nickc@redhat.com>
-
- * bfdlink.h (struct bfd_link_hash_table): Fix typo in comment.
-
-2003-05-15 Jim Blandy <jimb@redhat.com>
-
- * libiberty.h (hex_value): Make the value an unsigned int, to
- avoid unexpected sign-extension when cast to unsigned types larger
- than int --- like bfd_vma, on some platforms.
- (_hex_value): Update declaration.
-
-2003-05-09 Alan Modra <amodra@bigpond.net.au>
-
- * xtensa-isa-internal.h (xtensa_isa_module_struct): Remove const on
- gen_num_opcodes_fn return type.
-
-2003-05-07 Jason Merrill <jason@redhat.com>
-
- * hashtab.h (iterative_hash): Prototype.
- (iterative_hash_object): New macro.
-
-2003-04-28 H.J. Lu <hjl@gnu.org>
-
- * bfdlink.h (bfd_link_info): Add relax_finalizing.
-
-2003-04-23 H.J. Lu <hjl@gnu.org>
-
- * bfdlink.h (bfd_link_callbacks): Add error_handler.
-
-2003-04-02 Bob Wilson <bob.wilson@acm.org>
-
- * xtensa-config.h: Remove comment indicating that this is a
- generated file.
-
-2003-04-01 Bob Wilson <bob.wilson@acm.org>
-
- * dis-asm.h (print_insn_xtensa): Declare.
- * xtensa-config.h: New file.
- * xtensa-isa-internal.h: Likewise.
- * xtensa-isa.h: Likewise.
-
-2003-03-17 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * ansidecl.h (ATTRIBUTE_NONNULL, ATTRIBUTE_NULL_PRINTF,
- ATTRIBUTE_NULL_PRINTF_1, ATTRIBUTE_NULL_PRINTF_2,
- ATTRIBUTE_NULL_PRINTF_3, ATTRIBUTE_NULL_PRINTF_4,
- ATTRIBUTE_NULL_PRINTF_5): New.
- (ATTRIBUTE_PRINTF): Add ATTRIBUTE_NONNULL.
-
-2003-03-17 Jan Hubicka <jh@suse.cz>
-
- * hashtab.h (htab_traverse_noresize): Declare.
-
-2003-02-27 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * libiberty.h: Document return value of physmem routines.
-
-2003-02-20 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * libiberty.h (physmem_total, physmem_available): Prototype.
-
-2003-02-20 Daniel Jacobowitz <drow@mvista.com>
-
- * libiberty.h (lrealpath): Add declaration.
-
-2003-01-31 Grant Grundler <grundler@dsl2.external.hp.com>
-
- * hppa.h (ldwa, ldda): Add ordered opcodes.
-
-2003-01-26 Daniel Jacobowitz <drow@mvista.com>
-
- * hashtab.h (htab_alloc_with_arg, htab_free_with_arg): Add new types.
- (struct htab): Add alloc_arg, alloc_with_arg_f, free_with_arg_f.
- (htab_create_alloc_ex): New prototype.
- (htab_set_functions_ex): New prototype.
-
-2002-07-17 Geoffrey Keating <geoffk@redhat.com>
-
- * splay-tree.h (GTY): Define if undefined.
- (splay_tree_allocate_fn): Return PTR for compatibility, not void *.
- (struct splay_tree_node_s): Support gengtype.
- (struct splay_tree_s): Likewise. Make allocate_data a PTR,
- not a void *.
-
-2002-01-02 Ben Elliston <bje@redhat.com>
-
- * dis-asm.h (print_insn_iq2000): Declare.
-
-2002-12-24 Dmitry Diky <diwil@mail.ru>
-
- * dis-asm.h: Add msp430 disassembler prototype.
-
-2002-12-27 Chris Demetriou <cgd@broadcom.com>
-
- * dis-asm.h (print_mips_disassembler_options): Prototype.
-
-2002-12-23 Alan Modra <amodra@bigpond.net.au>
-
- * bfdlink.h (struct bfd_link_info): Add "strip_discarded".
-
-2002-12-20 Alan Modra <amodra@bigpond.net.au>
-
- * bfdlink.h (struct bfd_link_info): Replace bfd_boolean fields with
- bit-fields. Rearrange to put all like types together.
-
-2002-11-30 Alan Modra <amodra@bigpond.net.au>
-
- * bfdlink.h: Replace boolean with bfd_boolean. Formatting.
-
-2002-11-23 Simon Burge <simonb@wasabisystems.com>
-
- * libiberty.h (basename): Add NetBSD to the list.
-
-2002-11-22 Daniel Jacobowitz <drow@mvista.com>
-
- * libiberty.h (make_relative_prefix): Add prototype.
-
-2002-11-14 Egor Duda <deo@logos-m.ru>
-
- * bfdlink.h (struct bfd_link_info): Add new boolean
- field pei386_runtime_pseudo_reloc.
-
-2002-10-26 Roger Sayle <roger@eyesopen.com>
-
- * partition.h: Close the extern "C" scope when compiling with C++.
-
-2002-10-26 Roger Sayle <roger@eyesopen.com>
- DJ Delorie <dj@redhat.com>
-
- PR bootstrap/8351
- * getopt.h: Avoid prototyping getopt with no arguments in C++.
-
-2002-10-24 Nathan Tallent <eraxxon@alumni.rice.edu>
-
- * ansidecl.h (__STDC__): Add (__alpha && __cplusplus) to the
- list of platform compilers that may look, smell and act
- like __STDC__ but that may not define it.
-
-2002-10-11 David O'Brien <obrien@FreeBSD.org>
-
- * getopt.h: getopt is in unistd.h (based on SUSv2).
-
-2002-09-26 Andrew Cagney <ac131313@redhat.com>
-
- * regs/: Delete directory.
-
-2002-09-19 Alexandre Oliva <aoliva@redhat.com>
-
- * libiberty.h (asprintf, vasprintf): Don't declare them if the
- corresponding HAVE_DECL_ macro is 1.
-
-2002-09-19 Nathan Tallent <eraxxon@alumni.rice.edu>
-
- * dis-asm.h: Remove (errant) trailing semicolon (;) from the
- extern "C" { } declaration.
-
-2002-09-04 Nick Clifton <nickc@redhat.com>
-
- * dis-asm.h (print_ppc_disassembler_options): Prototype.
-
-2002-08-28 Michael Hayes <m.hayes@elec.canterbury.ac.nz>
-
- * dis-asm.h: Add standard disassembler for tic4x.
-
-2002-08-07 H.J. Lu <hjl@gnu.org>
-
- * bfdlink.h (bfd_link_info): Add allow_undefined_version.
- (bfd_elf_version_expr): Add symver and script.
-
-2002-07-31 Ian Dall <ian@sibyl.beware.dropbear.id.au>
-
- * bfdlink.h (bfd_link_common_skip_ar_symbols): New enum.
- (struct bfd_link_info): Add new field 'common_skip_ar_symbols'.
-
-2002-07-19 Denis Chertykov <denisc@overta.ru>
- Matthew Green <mrg@redhat.com>
-
- * dis-asm.h (print_insn_ip2k): Declare.
-
-2002-07-01 Alan Modra <amodra@bigpond.net.au>
-
- * bfdlink.h (struct bfd_sym_chain): Declare.
- (struct bfd_link_info): Add gc_sym_list. Formatting fixes.
-
-2002-06-25 Alan Modra <amodra@bigpond.net.au>
-
- * demangle.h: #include "ansidecl.h" rather than #include <ansidecl.h>.
- * fibheap.h: Likewise.
- * hashtab.h: Likewise.
- * partition.h: Likewise.
- * sort.h: Likewise.
- * splay-tree.h: Likewise.
-
-2002-06-24 Alan Modra <amodra@bigpond.net.au>
-
- * libiberty.h (basename): Don't declare if HAVE_DECL_BASENAME.
- * getopt.h (getopt): Don't declare if HAVE_DECL_GETOPT.
-
-2002-06-18 Dave Brolley <brolley@redhat.com>
-
- From Catherine Moore:
- * dis-asm.h (print_insn_frv): New prototype.
-
-2002-06-09 Andrew Cagney <cagney@redhat.com>
-
- * remote-sim.h: Move to directory gdb/.
- * callback.h: Move to directory gdb/.
-
-2002-06-07 Charles Wilson <cwilson@ece.gatech.edu>
-
- * bfdlink.h (struct bfd_link_info): Change type of
- pei386_auto_import field to int so that -1 can mean enabled by
- default and 1 can mean enabled by command line switch.
-
-2002-06-06 DJ Delorie <dj@redhat.com>
-
- * hashtab.h (htab): Rearrange new members for backward
- compatibility.
- (htab_create): Don't use a macro that requires other headers.
-
-2002-06-05 Geoffrey Keating <geoffk@redhat.com>
-
- * hashtab.h (htab_create): Restore prototype for backward
- compatibility.
- (htab_try_create): Likewise.
-
-2002-05-22 Geoffrey Keating <geoffk@redhat.com>
-
- * hashtab.h (struct htab): Update for change to length specifier.
-
-2002-05-10 Geoffrey Keating <geoffk@redhat.com>
-
- * hashtab.h (GTY): Define if undefined.
- (htab_alloc): New typedef.
- (htab_free): New typedef.
- (struct htab): Support gengtype; allow user-specified memory
- allocation.
- (htab_create_alloc): New.
- (htab_create): Replace with #define.
- (htab_try_create): Delete.
-
-2002-05-28 Kuang Hwa Lin <kuang@sbcglobal.net>
-
- * dis-asm.h: Prototype print_insn_dlx.
-
-2002-05-23 Andrew Cagney <ac131313@redhat.com>
-
- * sim-d10v.h: Delete file. Moved to include/gdb/.
-
-2002-05-21 H.J. Lu (hjl@gnu.org)
-
- * bfdlink.h (bfd_link_info): Add allow_multiple_definition.
-
-2002-05-17 J"orn Rennecke <joern.rennecke@superh.com>
-
- * dis-asm.h (print_insn_shl, print_insn_sh64l): Remove prototype.
-
-2002-04-16 David S. Miller <davem@redhat.com>
-
- * xregex2.h (__restrict_arr): Define to __restrict on GCC
- 3.1 and later. Do not redefine.
-
-2002-04-01 Phil Edwards <pme@gcc.gnu.org>
-
- * dyn-string.h: Also allow IN_GLIBCPP_V3 to redefine names.
-
-2002-03-10 Daniel Jacobowitz <drow@mvista.com>
-
- * gdb: New directory.
-
-2002-03-06 Andrew Cagney <ac131313@redhat.com>
-
- * floatformat.h (floatformat_arm_ext): Delete declaration.
-
-2002-02-21 Jim Blandy <jimb@redhat.com>
-
- Allow the user to specify functions for allocating memory for
- splay tree roots and nodes.
- * splay-tree.h (splay_tree_allocate_fn, splay_tree_deallocate_fn):
- New types.
- (splay_tree): New fields: `allocate', `deallocate', and
- `allocate_data'.
- (splay_tree_new_with_allocator): New function declaration.
-
-2002-02-15 Alan Modra <amodra@bigpond.net.au>
-
- Support arbitrary length fill patterns.
- * bfdlink.h (enum bfd_link_order_type): Remove bfd_fill_link_order.
- (struct bfd_link_order): Remove fill. Add data.size.
-
-2002-02-08 Alexandre Oliva <aoliva@redhat.com>
-
- Contribute sh64-elf.
- 2000-11-25 Hans-Peter Nilsson <hpn@cygnus.com>
- * dis-asm.h (print_insn_sh64): New prototype.
- (print_insn_sh64l): New prototype.
- (print_insn_sh64x_media): New prototype.
-
-2002-02-05 Frank Ch. Eigler <fche@redhat.com>
-
- * dis-asm.h (disassemble_info): New field `insn_sets'.
- (INIT_DISASSEMBLE_INFO): Clear it.
-
-2002-02-05 Jason Merrill <jason@redhat.com>
-
- * demangle.h (cplus_demangle_v3): Add "options" parm.
- (cplus_demangle_v3_type): Remove prototype.
- (DMGL_VERBOSE): New macro.
- (DMGL_TYPES): New macro.
-
-2002-02-02 H.J. Lu (hjl@gnu.org)
-
- * demangle.h (cplus_demangle_v3_type): New prototype.
-
-2002-01-31 Ivan Guzvinec <ivang@opencores.org>
-
- * dis-asm.h : Add support for or32 targets
-
-2002-01-28 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * libiberty.h (C_alloca): Add ATTRIBUTE_MALLOC.
-
-2002-01-27 David O'Brien <obrien@FreeBSD.org>
-
- * cgen.h (BFD_VERSION): Use BFD_VERSION_DATE instead.
-
-2001-12-14 Nick Clifton <nickc@cambridge.redhat.com>
-
- * dis-asm.h (INIT_DISASSEMBLE_INFO_NO_ARCH): Initialise the
- disassembler_options field (to NULL).
-
-2001-12-13 Jakub Jelinek <jakub@redhat.com>
-
- * bfdlink.h (struct bfd_link_info): Add eh_frame_hdr field.
-
-2001-12-07 Geoffrey Keating <geoffk@redhat.com>
-
- * dis-asm.h (print_insn_xstormy16): Declare.
-
-2001-12-06 Richard Henderson <rth@redhat.com>
-
- * demangle.h (no_demangling): New.
- (NO_DEMANGLING_STYLE_STRING): New.
-
-2001-11-14 Alan Modra <amodra@bigpond.net.au>
-
- * dis-asm.h (print_insn_i386): Declare.
-
-2001-11-11 Timothy Wall <twall@alum.mit.edu>
-
- * dis-asm.h: Fix comment to refer to octets rather than bytes.
-
-2001-10-30 Hans-Peter Nilsson <hp@bitrange.com>
-
- * dis-asm.h (print_insn_mmix): Add prototype.
-
-2001-10-24 Neil Booth <neil@daikokuya.demon.co.uk>
-
- * safe-ctype.h (_sch_isbasic, IS_ISOBASIC): New.
-
-2001-10-22 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * libiberty.h (hex_init): Revert delete.
-
- * libiberty.h (_hex_value): Const-ify.
- (hex_init): Delete.
-
-2001-10-16 Christopher Faylor <cgf@redhat.com>
-
- * filenames.h: Add cygwin to the list of dosish style path systems.
-
-2001-10-07 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * demangle.h (demangler_engine): Const-ify.
- * libiberty.h (buildargv): Likewise.
-
-2001-10-03 Vassili Karpov <malc@pulsesoft.com>
-
- * bfdlink.h (struct bfd_link_info): Add nocopyreloc field.
-
-2001-09-24 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * libiberty.h (reconcat): New function.
-
-2001-09-18 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * libiberty.h (concat, concat_length, concat_copy, concat_copy2,
- ACONCAT): Improve comments.
-
-2001-09-18 Alan Modra <amodra@bigpond.net.au>
-
- * objalloc.h (OBJALLOC_ALIGN): Define using offsetof.
-
-2001-09-17 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * libiberty.h (concat_length, concat_copy, concat_copy2,
- libiberty_concat_ptr, ACONCAT): New.
-
- * libiberty.h (ASTRDUP): New macro.
- libiberty_optr, libiberty_nptr, libiberty_len): Declare.
-
-2001-08-29 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * ansidecl.h: Update comments reflecting previous change.
-
-2001-08-27 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * ansidecl.h (VA_OPEN, VA_CLOSE): Allow multiple uses.
-
-2001-08-25 Nick Clifton <nickc@cambridge.redhat.com>
-
- * bfdlink.h (struct bfd_link_info): Change 'spare_dynamic_tags' to
- unsigned to remove a compile time warning message.
-
-2001-08-24 H.J. Lu <hjl@gnu.org>
-
- * bfdlink.h (bfd_link_hash_table_type): New. The linker hash
- table type, bfd_link_generic_hash_table and
- bfd_link_elf_hash_table.
- (bfd_link_hash_table): Add a new field, type, for the linker
- hash table type.
-
-2001-08-23 Jakub Jelinek <jakub@redhat.com>
-
- * bfdlink.h (struct bfd_link_info): Add combreloc and
- spare_dynamic_tags fields.
-
-2001-08-23 Lars Brinkhoff <lars@nocrew.org>
-
- * dyn-string.h, fibheap.h, partition.h, sort.h, splay-tree.h:
- replace "GNU CC" with "GCC".
-
-2001-08-21 Richard Henderson <rth@redhat.com>
-
- * fibheap.h: Tidy formatting.
- (fibnode_t): Limit degree to 31 bits to avoid warning.
-
-2001-08-20 Daniel Berlin <dan@cgsoftware.com>
-
- * fibheap.h: New file. Fibonacci heap.
-
-2001-08-20 Andrew Cagney <ac131313@redhat.com>
-
- * floatformat.h (floatformat_arm_ext): Document as deprecated.
- (floatformat_arm_ext_big, floatformat_arm_ext_littlebyte_bigword)
- (floatformat_ia64_spill_little, floatformat_ia64_quad_little)
- (floatformat_ia64_spill_big, floatformat_ia64_quad_big)
- (floatformat_m88110_harris_ext): Declare.
-
-2001-08-18 Zack Weinberg <zackw@panix.com>
-
- * ansidecl.h: Reorganize for readability, remove documentation
- of obsolete macros, document PARAMS and VPARAMS. Add new
- macros VA_OPEN, VA_CLOSE, and VA_FIXEDARG for nicer variadic
- function implementation.
-
-2001-08-16 Richard Henderson <rth@redhat.com>
-
- * hashtab.h (htab_hash_string): Declare.
-
-2001-08-10 Andrew Cagney <ac131313@redhat.com>
-
- * libiberty.h (lbasename): Change function declaration to return a
- const char pointer.
-
-2001-08-02 Mark Kettenis <kettenis@gnu.org>
-
- * xregex.h (_REGEX_RE_COMP): Define.
- (re_comp): Define to xre_comp.
- (re_exec): Define to xre_exec.
-
-2001-08-02 Charles Wilson <cwilson@ece.gatech.edu>
-
- * bfdlink.h (struct bfd_link_info): add new boolean
- field pei386_auto_import.
-
-2001-07-18 Andreas Jaeger <aj@suse.de>
-
- * xregex2.h: Place under LGPL version 2.1.
-
-2001-07-10 Jeff Johnston <jjohnstn@redhat.com>
-
- * xregex.h: New file to support libiberty regex.
- * xregex2.h: Ditto.
-
-2001-06-15 Hans-Peter Nilsson <hp@axis.com>
-
- * bfdlink.h (struct bfd_link_info): New member export_dynamic.
-
-2001-05-16 Matt Kraai <kraai@alumni.carnegiemellon.edu>
-
- * partition.h: Fix misspelling of `implementation'.
-
-2001-05-10 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * ansidecl.h (NULL_PTR): Delete.
-
-2001-05-07 Zack Weinberg <zackw@stanford.edu>
-
- * demangle.h: Use PARAMS for all prototypes.
- * ternary.h: Use PARAMS for all prototypes. Use PTR, not void *.
- Make arguments constant where possible.
-
-2001-05-07 Mark Mitchell <mark@codesourcery.com>
-
- * splay-tree.h (splay_tree_max): New function.
- (splay_tree_min): Likewise.
-
-2001-04-27 Johan Rydberg <jrydberg@opencores.org>
-
- * dis-asm.h (print_insn_openrisc): Add prototype.
-
-2001-04-15 Daniel Berlin <dan@cgsoftware.com>
-
- * ternary.h: New file - Ternary search tree header.
-
-2001-04-13 Jakub Jelinek <jakub@redhat.com>
-
- * bfdlink.h (bfd_link_discard): Add discard_sec_merge.
-
-2001-04-03 Zack Weinberg <zackw@stanford.edu>
-
- * ansidecl.h: All logic from gcc/gansidecl.h moved here.
-
-2001-03-31 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * libiberty.h (alloca): Handle setting C_ALLOCA.
-
-2001-03-20 Jim Blandy <jimb@redhat.com>
-
- * demangle.h (enum gnu_v3_constructor_kinds,
- is_gnu_v3_mangled_ctor, enum gnu_v3_destructor_kinds,
- is_gnu_v3_mangled_dtor): New declarations.
-
-2001-03-14 Nick Clifton <nickc@redhat.com>
-
- * ansidecl.h: Fix copyright dates.
- * demangle.h: Fix copyright dates.
- * floatformat.h: Fix copyright dates.
- * fnmatch.h: Fix copyright dates.
- * getopt.h: Fix copyright dates.
- * libiberty.h: Add FSF copyright notice.
- * md5.h: Fix copyright dates.
- * obstack.h: Fix copyright dates.
- * splay-tree.h: Fix copyright dates.
-
-2001-03-10 Neil Booth <neil@daikokuya.demon.co.uk>
- John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * libiberty.h: Add lbasename.
-
-2001-03-06 Zack Weinberg <zackw@stanford.edu>
-
- * libiberty.h: Prototype C_alloca; define alloca to either
- __builtin_alloca or C_alloca as appropriate.
-
-2001-03-01 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * safe-ctype.h (_sch_test): Cast enum bit to unsigned short int for pcc
- compatibility.
-
-2001-02-18 lars brinkhoff <lars@nocrew.org>
-
- * dis-asm.h: Add PDP-11 target.
-
-2001-02-09 Martin Schwidefsky <schwidefsky@de.ibm.com>
-
- * dis-asm.h: Add linux target for S/390.
-
-2001-01-11 Peter Targett <peter.targett@arccores.com>
-
- * dis-asm.h (arc_get_disassembler): Correct declaration.
-
-2001-01-09 Philip Blundell <philb@gnu.org>
-
- * bin-bugs.h (REPORT_BUGS_TO): Set to `bug-binutils@gnu.org'.
-
-2000-12-18 Joseph S. Myers <jsm28@cam.ac.uk>
-
- * COPYING: Update to current
- ftp://ftp.gnu.org/pub/gnu/Licenses/COPYING-2.0 (fixes references
- to 19yy as example year in copyright notice).
-
-2000-12-19 Hans-Peter Nilsson <hp@bitrange.com>
-
- * dis-asm.h (struct disassemble_info): New member "section".
- (INIT_DISASSEMBLE_INFO_NO_ARCH): Initialize private_data member.
- Initialize section member.
-
-2000-12-16 Herman A.J. ten Brugge <Haj.Ten.Brugge@net.HCC.nl>
-
- * safe-ctype.h: Make code work on all targets and not just on
- targets where a char is 8 bits.
-
-2000-12-10 Fred Fish <fnf@be.com>
-
- * bfdlink.h (struct bfd_link_info): Add new allow_shlib_undefined
- member to struct for systems where it is normal to have undefined
- symbols in shared libraries at runtime and the runtime linker
- takes care of redirecting them.
-
-2000-12-07 Zack Weinberg <zack@wolery.stanford.edu>
-
- * safe-ctype.h: New file.
-
-2000-12-06 Rodney Brown <RodneyBrown@mynd.com>
-
- * getopt.h obstack.h: Standarize copyright statement.
-
-2000-12-04 Richard Henderson <rth@redhat.com>
-
- * demangle.h: Change "new_abi" to "v3" everywhere.
-
-2000-11-22 Zack Weinberg <zack@wolery.stanford.edu>
-
- * libiberty.h: Move #includes to top. Prototype xmalloc_failed.
-
-2000-11-15 Kenneth Block <kenneth.block@compaq.com>
-
- * demangle.h: Add gnat and java demangle styles.
-
-2000-11-04 Hans-Peter Nilsson <hp@bitrange.com>
-
- * hashtab.h (struct htab): Add member return_allocation_failure.
- (htab_try_create): New prototype. Mention which functions may
- return NULL when this is used.
-
-2000-11-03 Hans-Peter Nilsson <hp@bitrange.com>
-
- * hashtab.h: Change void * to PTR where necessary.
-
-2000-10-11 Mark Mitchell <mark@codesourcery.com>
-
- * splay-tree.h (splay_tree_predecessor): Declare.
-
-2000-09-29 Hans-Peter Nilsson <hp@axis.com>
-
- * dis-asm.h: Declare cris_get_disassembler, not print_insn_cris.
- Fix typo in comment.
-
-2000-09-28 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * alloca-conf.h: New file (copied from libiberty).
-
-2000-09-05 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * md5.h (md5_uint32): Choose via INT_MAX instead of UINT_MAX.
-
-2000-09-04 Alex Samuel <samuel@codesourcery.com>
-
- * dyn-string.h: Adjust formatting.
- (dyn_string_insert_char): New macro. New declaration.
-
-2000-08-28 Jason Merrill <jason@redhat.com>
-
- * md5.h: New file.
-
-2000-08-24 Greg McGary <greg@mcgary.org>
-
- * libiberty.h (ARRAY_SIZE): New macro.
-
-2000-07-29 Nick Clifton <nickc@cygnus.com>
-
- * os9k.h: Add copyright notice.
- Fix formatting.
-
-2000-07-22 Jason Eckhardt <jle@cygnus.com>
-
- * dis-asm.h (print_insn_i860): Add prototype.
-
-2000-07-20 H.J. Lu <hjl@gnu.org>
-
- * bfdlink.h (bfd_link_info): Add new_dtags.
-
-2000-07-20 Hans-Peter Nilsson <hp@axis.com>
-
- * dis-asm.h (print_insn_cris): Declare.
-
-2000-07-19 H.J. Lu (hjl@gnu.org)
-
- * bfdlink.h (bfd_link_info): Add flags and flags_1.
-
-2000-06-05 DJ Delorie <dj@redhat.com>
-
- * MAINTAINERS: new
-
-2000-06-21 Alex Samuel <samuel@codesourcery.com>
-
- * dyn-string.h (dyn_string_init, dyn_string_new,
- dyn_string_delete, dyn_string_release, dyn_string_resize,
- dyn_string_clear, dyn_string_copy, dyn_string_copy_cstr,
- dyn_string_prepend, dyn_string_prepend_cstr, dyn_string_insert,
- dyn_string_insert_cstr, dyn_string_append, dyn_string_append_cstr,
- dyn_string_append_char, dyn_string_substring_dyn_string_eq):
- Define as same name with __cxa_ prepended, if IN_LIBGCC2.
- (dyn_string_init, dyn_string_copy, dyn_string_copy_cstr,
- dyn_string_prepend, dyn_string_prepend_cstr, dyn_string_insert,
- dyn_string_insert_cstr, dyn_string_append, dyn_string_append_cstr,
- dyn_string_append_char, dyn_string_substring): Change return type
- to int.
-
-2000-06-18 Stephane Carrez <stcarrez@worldnet.fr>
-
- * dis-asm.h (print_insn_m68hc12): Define.
- (print_insn_m68hc11): Likewise.
-
-2000-06-18 Nick Clifton <nickc@redhat.com>
-
- * os9k.h: Change values of MODSYNC and CRCCON due to bug report
- from Russ Magee <rmagee@home.com>.
-
-2000-06-07 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * demangle.h (demangling_styles): Remove trailing comma in enum.
-
- * dyn-string.h (dyn_string_append_char): Change parameter from
- char to int.
-
-2000-06-04 Alex Samuel <samuel@codesourcery.com>
-
- * dyn-string.h: Move here from gcc/dyn-string.h. Add new functions.
-
- * demangle.h (DMGL_GNU_NEW_ABI): New macro.
- (DMGL_STYLE_MASK): Or in DMGL_GNU_NEW_ABI.
- (current_demangling_style): Add gnu_new_abi_demangling.
- (GNU_NEW_ABI_DEMANGLING_STYLE_STRING): New macro.
- (GNU_NEW_ABI_DEMANGLING): Likewise.
- (cplus_demangle_new_abi): New declaration.
-
-Tue May 30 16:53:34 2000 Andrew Cagney <cagney@b1.cygnus.com>
-
- * floatformat.h (struct floatformat): Add field name.
-
-2000-05-26 Eli Zaretskii <eliz@is.elta.co.il>
-
- * filenames.h: New file.
- (HAVE_DOS_BASED_FILE_SYSTEM, IS_DIR_SEPARATOR)
- (IS_ABSOLUTE_PATH, FILENAME_CMP): New macros.
-
-2000-05-23 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * getopt.h (getopt): Also check HAVE_DECL_* when prototyping.
-
- * libiberty.h (basename): Likewise.
-
-2000-05-17 S. Bharadwaj Yadavalli <sby@scrugs.lkg.dec.com>
- Rick Gorton <gorton@scrugs.lkg.dec.com>
-
- * bfdlink.h (struct bfd_link_info): Add emitrelocations flag.
-
-2000-05-08 Alan Modra <alan@linuxcare.com.au>
-
- * dis-asm.h (print_insn_tic54x): Declare.
-
-2000-05-06 Zack Weinberg <zack@wolery.cumb.org>
-
- * ansidecl.h: #define __extension__ to nothing if
- GCC_VERSION < 2008.
-
-2000-05-04 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * demangle.h (demangler_engine): Constify.
-
-Thu May 4 17:15:26 2000 Philippe De Muyter <phdm@macqel.be>
-
- * sort.h (sys/types.h): File included unconditionnaly.
- (stddef.h): File include only #ifdef __STDC__.
-
-2000-05-03 Zack Weinberg <zack@wolery.cumb.org>
-
- * symcat.h: Remove #endif label.
-
-2000-04-28 Kenneth Block <block@zk3.dec.com>
- Jason Merrill <jason@casey.cygnus.com>
-
- * demangle.h (libiberty_demanglers): new table for different styles.
- (cplus_demangle_set_style): New function for setting style.
- (cplus_demangle_name_to_style): New function to translate name.
-
-2000-04-24 Mark Mitchell <mark@codesourcery.com>
-
- * hashtab.h (hash_pointer): Declare.
- (eq_pointer): Likewise.
-
-2000-04-23 Mark Mitchell <mark@codesourcery.com>
-
- * sort.h: New file.
-
-Fri Apr 21 13:20:53 2000 Richard Henderson <rth@cygnus.com>
- David Mosberger <davidm@hpl.hp.com>
-
- * dis-asm.h (print_insn_ia64): Declare.
-
-Tue Apr 18 16:22:30 2000 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
-
- * hashtab.h (enum insert_option): New type.
- (htab_find_slot, htab_find_slot_with_hash): Use it.
-
-2000-04-17 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * symcat.h: Honor autoconf macro HAVE_STRINGIZE. Add
- comments/caveats with regard to traditional C behavior.
-
-2000-04-05 Richard Henderson <rth@cygnus.com>
-
- * splay-tree.h (splay_tree_remove): Declare.
-
-2000-04-04 Alan Modra <alan@linuxcare.com.au>
-
- * bin-bugs.h (REPORT_BUGS_TO): Remove translated part.
-
-2000-04-03 Alan Modra <alan@linuxcare.com.au>
-
- * bin-bugs.h: New file.
-
-2000-03-30 Mark Mitchell <mark@codesourcery.com>
-
- * hashtab.h (hashval_t): New type.
- (htab_find_with_hash): Use it as an argument.
- (htab_find_slot_with_hash): Likewise.
-
-2000-03-27 Denis Chertykov <denisc@overta.ru>
-
- * dis-asm.h (print_insn_avr): Declare.
-
-2000-03-14 Bernd Schmidt <bernds@cygnus.co.uk>
-
- * hashtab.h (htab_trav): Modify type so that first arg is of type
- void **.
- (htab_find_with_hash, htab_find_slot_with_hash): Declare new
- functions.
-
-2000-03-09 Alex Samuel <samuel@codesourcery.com>
-
- * partition.h: New file.
-
-2000-03-09 Zack Weinberg <zack@wolery.cumb.org>
-
- * hashtab.h (struct htab): Add del_f.
- (htab_del): New type.
- (htab_create): Add fourth argument.
-
-2000-03-08 Zack Weinberg <zack@wolery.cumb.org>
-
- * hashtab.h (hash_table_t): Rename to htab_t.
- (struct hash_table): Rename to struct htab. Shorten element
- names. Reorder elements by size.
- (htab_hash, htab_eq, htab_trav): New typedefs for the callback
- function pointers.
- (hash_table_entry_t): Discard; just use void * for element
- type.
-
-2000-03-01 H.J. Lu <hjl@gnu.org>
-
- * bfdlink.h (bfd_link_callbacks): Add a boolean arg to
- the undefined_symbol callback.
-
-2000-02-23 Linas Vepstas <linas@linas.org>
-
- * dis-asm.h (print_insn_i370): Declare.
-
-Tue Feb 22 15:19:54 2000 Andrew Cagney <cagney@b1.cygnus.com>
-
- * remote-sim.h (sim_trace): Document return values.
- (sim_set_trace): Declare. Deprecate.
-
-2000-02-21 Alan Modra <alan@spri.levels.unisa.edu.au>
-
- * dis-asm.h (struct disassemble_info): Change `length' param of
- read_memory_func to unsigned. Change type of `buffer_length' and
- `octets_per_byte' to unsigned.
- (buffer_read_memory): Change `length' param to unsigned.
-
-2000-02-16 Nick Clifton <nickc@cygnus.com>
-
- * dis-asm.h: Add prototypes for ARM register name functions.
-
-Wed Feb 9 18:45:49 2000 Andrew Cagney <cagney@b1.cygnus.com>
-
- * wait.h: Delete. No longer used by GDB.
-
-Tue Feb 8 17:01:13 2000 Andrew Cagney <cagney@b1.cygnus.com>
-
- * remote-sim.h (sim_resume): Clarify use of SIGGNAL.
- (sim_stop_reason): Clarify meaning of sim_signalled.
-
-2000-02-03 Timothy Wall <twall@redhat.com>
-
- * dis-asm.h (struct disassemble_info): Added octets_per_byte
- field and initialize it to one (1).
-
-2000-01-27 Nick Clifton <nickc@redhat.com>
-
- * dis-asm.h: Add prototype for disassembler_usage().
- Add prototype for arm_disassembler_options().
- Remove prototype for arm_toggle_regnames().
- Add prototype for parse_arm_disassembler_option().
-
-Sat Jan 1 19:06:52 2000 Hans-Peter Nilsson <hp@bitrange.com>
-
- * symcat.h (STRINGX) [!__STDC__ || ALMOST_STDC]: Change "?" to "s"
- to stringify argument s.
-
-Wed Dec 15 11:22:56 1999 Jeffrey A Law (law@cygnus.com)
-
- * hp-symtab.h (HP_LANGUAGE_FORTRAN): New enumeration constant.
- (HP_LANGUAGE_F77): Define using HP_LANGUAGE_FORTRAN.
-
-1999-12-15 Doug Evans <dje@transmeta.com>
-
- * dis-asm.h: Enclose in extern "C" ifdef __cplusplus.
-
-1999-12-05 Mark Mitchell <mark@codesourcery.com>
-
- * splay-tree.h (struct splay_tree_node): Rename to ...
- (struct splay_tree_node_s): ... this.
- (struct splay_tree): Rename to ...
- (struct splay_tree_s): ... this.
-
-1999-11-30 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * ansidecl.h (ATTRIBUTE_MALLOC): New macro.
-
- * libiberty.h (buildargv, dupargv, concat, choose_temp_base,
- make_temp_file, xmalloc, xcalloc, xstrdup, xmemdup): Add
- ATTRIBUTE_MALLOC.
- (xatexit): Remove __GNUC__ check, add ATTRIBUTE_NORETURN.
-
-1999-11-28 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * libiberty.h: Include stdarg.h when ANSI_PROTOTYPES is defined.
- (asprintf, vasprintf): Provide declarations.
-
-Wed Nov 10 12:43:21 1999 Philippe De Muyter <phdm@macqel.be>
- Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * ansidecl.h: Define and test `GCC_VERSION', not `HAVE_GCC_VERSION'.
-
-1999-11-04 Jimmy Guo <guo@cup.hp.com>
-
- * hp-symtab.h (dntt_type_fparam): Add doc_ranges, misc_kind
- fields, change location type to CORE_ADDR from int.
- (dntt_type_const): Name the 5th field location_type.
-
-Sun Oct 24 19:11:32 1999 Andrew Cagney <cagney@b1.cygnus.com>
-
- * sim-d10v.h (SIM_D10V_TS2_DMAP_REGNUM): Define.
-
-1999-10-23 08:51 -0700 Zack Weinberg <zack@bitmover.com>
-
- * hashtab.h: Give hash_table_t a struct tag. Add prototypes
- for clear_hash_table_slot and traverse_hash_table. Correct
- prototype of all_hash_table_collisions.
-
-Sat Oct 23 19:00:13 1999 Andrew Cagney <cagney@b1.cygnus.com>
-
- * sim-d10v.h: New file.
-
-Fri Oct 15 01:47:51 1999 Vladimir Makarov <vmakarov@loony.cygnus.com>
-
- * hashtab.h: New file.
-
-1999-10-10 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * ansidecl.h (HAVE_GCC_VERSION): New macro. Use it instead of
- explicitly testing __GNUC__ and __GNUC_MINOR__.
-
- (ATTRIBUTE_PRINTF): Use `__format__', not `format'.
-
-1999-09-25 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * libiberty.h (make_temp_file): Add a prototype.
-
-Tue Sep 14 00:35:02 1999 Marc Espie <espie@cvs.openbsd.org>
-
- * libiberty.h (basename): OpenBSD has a correct prototype.
- (xrealloc): Remove outdated comment.
-
-1999-09-07 Jeff Garzik <jgarzik@pobox.com>
-
- * libiberty.h (xmemdup): Add prototype for new function.
-
-1999-09-04 Steve Chamberlain <sac@pobox.com>
-
- * dis-asm.h (print_insn_pj): Declare.
-
-1999-09-01 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * obstack.h (obstack_grow, obstack_grow0): Move (char*) casts
- in calls to `_obstack_memcpy' from here ...
-
- (_obstack_memcpy): ... to here, except in the __STDC__ case which
- doesn't need it.
-
-1999-08-30 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * libiberty.h (getpwd): Prototype.
-
-1999-08-01 Mark Mitchell <mark@codesourcery.com>
-
- * splay-tree.h (splay_tree_insert): Return the new node.
-
-1999-07-11 Ian Lance Taylor <ian@zembu.com>
-
- * ansidecl.h: Copy attribute support macros from egcs.
-
-1999-06-22 Mark Mitchell <mark@codesourcery.com>
-
- * bfdlink.h (struct bfd_link_hash_entry): Add init_function and
- fini_function.
-
-1999-06-20 Mark Mitchell <mark@codesourcery.com>
-
- * mips.h (Elf32_Internal_Msym): New structure.
- (Elf32_External_Msym): Likewise.
- (ELF32_MS_REL_INDEX): New macro.
- (ELF32_MS_FLAGS): Likewise.
- (ELF32_MS_INFO): Likewise.
-
-1999-06-14 Nick Clifton <nickc@cygnus.com>
-
- * dis-asm.h (arm_toggle_regnames): New prototype.
- (struct diassemble_info): New field: disassembler_options.
-
-1999-04-11 Richard Henderson <rth@cygnus.com>
-
- * bfdlink.h (bfd_elf_version_expr): Rename `match' to `pattern'.
- Add `match' callback function.
-
-1999-04-10 Richard Henderson <rth@cygnus.com>
-
- * bfdlink.h (bfd_link_info): Add no_undefined.
-
-1999-04-08 Nick Clifton <nickc@cygnus.com>
-
- * dis-asm.h: Add prototype for print_insn_mcore.
-
-1999-04-02 Mark Mitchell <mark@codesourcery.com>
-
- * splay-tree.h (splay_tree_compare_pointers): Declare.
-
-1999-03-30 Mark Mitchell <mark@codesourcery.com>
-
- * splay-tree.h (splay_tree_compare_ints): Declare.
-
-Wed Mar 24 12:46:29 1999 Andrew Cagney <cagney@amy.cygnus.com>
-
- * libiberty.h (basename): Cygwin{,32} should have the prototype.
-
-1999-02-22 Jim Lemke <jlemke@cygnus.com>
-
- * bfdlink.h (bfd_link_info): add field "mpc860c0".
-
-Mon Feb 1 21:05:46 1999 Catherine Moore <clm@cygnus.com>
-
- * dis-asm.h (print_insn_i386_att): Declare.
- (print_insn_i386_intel): Declare.
-
-1998-12-30 Michael Meissner <meissner@cygnus.com>
-
- * dis-asm.h (INIT_DISASSEMBLE_INFO_NO_ARCH): Cast STREAM and
- FPRINTF_FUNC to avoid compiler warnings.
-
-Wed Dec 30 16:07:14 1998 David Taylor <taylor@texas.cygnus.com>
-
- * dis-asm.h: change void * to PTR (two places).
-
-Mon Dec 14 09:53:31 1998 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * demangle.h: Don't check IN_GCC anymore.
- * splay-tree.h: Likewise.
-
-Tue Dec 8 00:30:31 1998 Elena Zannoni <ezannoni@kwikemart.cygnus.com>
-
- The following changes were made by Elena Zannoni
- <ezannoni@kwikemart.cygnus.com> and Edith Epstein
- <eepstein@sophia.cygnus.com> as part of a project to merge in
- changes made by HP; HP did not create ChangeLog entries.
-
- * dis-asm.h (struct disassemble_info): change the type of stream
- from FILE* to void*, for use with gdb's new type GDB_FILE.
- (fprintf_ftype): change FILE* parameter type to void*.
-
- * demangle.h: (DMGL_EDG): new macro for Kuck and Associates
- (DMGL_STYLE_MASK): modify to include Kuck and Assoc style
- (demangling_styles): add new edg_demangling style
- (EDG_DEMANGLING_STYLE_STRING): new macro
- (EDG_DEMANGLING): new macro
- (DMGL_HP): new macro, for HP/aCC compiler.
- (DMGL_STYLE_MASK): modify to include new HP's style.
- (demangling_styles): add new hp_demangling value.
- (HP_DEMANGLING_STYLE_STRING): new macro.
- (ARM_DEMANGLING): coerce to int.
- (HP_DEMANGLING): new macro.
-
- * hp-symtab.h: rewritten, from HP.
- (quick_procedure): change type of language field to unsigned int
- (quick_module): change type of language field to unsigned int
- (struct dntt_type_svar): add field thread_specific.
- (hp_language): add languages modcal and dmpascal.
-
-Fri Nov 20 13:14:00 1998 Andrew Cagney <cagney@b1.cygnus.com>
-
- * libiberty.h (basename): Add prototype for FreeBSD.
-
-Fri Nov 13 19:19:11 1998 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * libiberty.h: Prototype xcalloc.
-
-Sun Nov 8 17:42:25 1998 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * ansidecl.h: Wrap problematic macros with !IN_GCC.
-
- * demangle.h: Never define PARAMS().
- * splay-tree.h: Likewise.
-
-Sat Nov 7 18:30:20 1998 Peter Schauer <peter.schauer@regent.e-technik.tu-muenchen.de>
-
- * dis-asm.h (print_insn_vax): Declare.
-
-Sat Nov 7 16:04:03 1998 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * demangle.h: Don't include gansidecl.h.
- * splay-tree.h: Likewise.
-
-1998-10-26 16:03 Ulrich Drepper <drepper@cygnus.com>
-
- * bfdlink.h (struct bfd_link_info): Add new field optimize.
-
-Thu Oct 22 19:58:00 1998 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * splay-tree.h: Wrap function pointer parameter declarations in
- PARAMS() macro.
-
-1998-10-21 Mark Mitchell <mark@markmitchell.com>
-
- * splay-tree.h: New file.
-
-Fri Oct 9 00:02:03 1998 Jeffrey A Law (law@cygnus.com)
-
- * Merge devo and egcs include directories.
-
-Sat Sep 5 12:16:33 1998 Jeffrey A Law (law@cygnus.com)
-
- * getopt.h, obstack.h: Updated from gcc.
-
-1998-08-03 Jason Molenda (jsm@bugshack.cygnus.com)
-
- * libiberty.h (xexit): Change decl to use modern GCC attribute
- to indicate exit does not return.
-
-Mon Jun 1 13:48:32 1998 Jason Molenda (crash@bugshack.cygnus.com)
-
- * obstack.h: Update to latest FSF version.
-
-Tue Feb 24 13:05:02 1998 Doug Evans <devans@canuck.cygnus.com>
-
- * dis-asm.h (disassemble_info): Member `symbol' renamed to `symbols'
- and made an "asymbol **". New member num_symbols.
- (INIT_DISASSEMBLE_INFO_NO_ARCH): Update.
-
-Tue Feb 17 12:32:18 1998 Andrew Cagney <cagney@b1.cygnus.com>
-
- * remote-sim.h (sim_fetch_register, sim_store_register): Add
- register length parameter. Functions return actual length of
- register.
-
-Thu Feb 12 16:29:01 1998 Ian Lance Taylor <ian@cygnus.com>
-
- * getopt.h: Update to latest FSF version.
-
-Wed Feb 11 16:56:06 1998 Doug Evans <devans@canuck.cygnus.com>
-
- * symcat.h: New file.
-
-Mon Feb 2 17:13:31 1998 Steve Haworth <steve@pm.cse.rmit.EDU.AU>
-
- * dis-asm.h (print_insn_tic30): Declare.
-
-Thu Jan 22 16:23:59 1998 Fred Fish <fnf@cygnus.com>
-
- * dis-asm.h: Add flag INSN_HAS_RELOC to tell disassembly
- function there is a reloc on this line.
-
-Mon Dec 8 11:22:23 1997 Nick Clifton <nickc@cygnus.com>
-
- * dis-asm.h: Remove prototype of disasm_symaddr() as this function
- no longer exists.
-
-Tue Dec 2 10:20:53 1997 Nick Clifton <nickc@cygnus.com>
-
- * dis-asm.h (disasm_symaddr): New prototype.
-
-Mon Dec 1 11:29:35 1997 Doug Evans <devans@canuck.cygnus.com>
-
- * callback.h (CB_SYSCALL): Comment out arg names in prototypes.
-
-Wed Nov 26 16:47:58 1997 Michael Meissner <meissner@cygnus.com>
-
- * callback.h (CB_SYSCALL): Consistantly use names for prototype
- arguments.
-
-Wed Nov 26 11:39:30 1997 Doug Evans <devans@canuck.cygnus.com>
-
- * callback.h (CB_SYSCALL): Change byte count arguments to
- {read,write}_mem to `int'. New member `magic'.
- (CB_SYSCALL_MAGIC,CB_SYSCALL_INIT): New macros.
-
-Tue Nov 25 01:35:52 1997 Doug Evans <devans@seba.cygnus.com>
-
- * callback.h (struct stat): Move forward decl up.
- (host_callback): Pass stat struct pointer to stat,fstat.
- (CB_SYS_nnn): Reorganize.
- (CB_SYSCALL): New members p1,p2.
- (cb_host_to_target_stat): Delete fourth arg.
-
-Sat Nov 22 23:34:15 1997 Andrew Cagney <cagney@b1.cygnus.com>
-
- * remote-sim.h (sim_stop_reason): Clarify sim_signalled SIGRC
- argument.
-
-Mon Nov 17 14:00:51 1997 Doug Evans <devans@seba.cygnus.com>
-
- * callback.h (CB_TARGET_DEFS_MAP): Renamed from target_defs_map.
- (host_callback): Add stat, fstat, syscall_map, errno_map, open_map,
- signal_map, stat_map.
- (errn_map,open_map): Renamed to cb_init_foo_map.
- (cb_host_to_target_errno,cb_target_to_host_open): Renamed from
- host_to_target_errno,target_to_host_open.
- (cb_read_target_syscall_maps): Add prototype.
- (cb_target_to_host_syscall): Likewise.
- (cb_host_to_target_stat): Likewise.
- (cb_syscall): Likewise.
- (CB_SYS_{exit,open,close,read,write,lseek,unlink,getpid,kill,fstat,
- argvlen,argv,chdir,stat,chmod,utime,time}): Define.
- (CB_SYSCALL): New type.
- (CB_RC): New enum.
-
-Fri Nov 7 10:34:09 1997 Rob Savoye <rob@darkstar.cygnus.com>
-
- * libiberty.h: Add extern "C" { so it can be used with C++
- programs.
- * remote-sim.h: Add extern "C" { so it can be used with C++
- programs.
-
-Tue Oct 14 16:07:51 1997 Nick Clifton <nickc@cygnus.com>
-
- * dis-asm.h (struct disassemble_info): New field
- 'symbol_at_address_func'.
- (INIT_DISASSEMBLE_INFO_NO_ARCH): Initialise new field with
- generic_symbol_at_address.
-
-Mon Oct 13 10:17:15 1997 Andrew Cagney <cagney@b1.cygnus.com>
-
- * remote-sim.h: Clarify sim_read, sim_write MEM argument.
-
-Wed Sep 24 18:03:10 1997 Stu Grossman <grossman@babylon-5.cygnus.com>
-
- * remote-sim.h (SIM_RC): Add a bunch of new return codes for
- breakpoint stuff.
- * Add functions to tell the simulator to set/clear/enable/disable
- intrinsic breakpoints.
-
-Thu Aug 28 19:41:42 1997 Andrew Cagney <cagney@b1.cygnus.com>
-
- * libiberty.h (dupargv): Add prototype.
-
-Tue Aug 26 12:25:49 1997 Andrew Cagney <cagney@b1.cygnus.com>
-
- * remote-sim.h (sim_create_inferior): Add ABFD arg. Document.
-
-Mon Aug 25 10:50:51 1997 Andrew Cagney <cagney@b1.cygnus.com>
-
- * remote-sim.h (sim_open): Add ABFD arg. Document.
-
-Fri Aug 8 16:43:56 1997 Doug Evans <dje@canuck.cygnus.com>
-
- * dis-asm.h (arc_get_disassembler): Declare.
-
-Wed Jul 30 11:39:50 1997 Per Bothner <bothner@deneb.cygnus.com>
-
- * demangle.h (DMGL_JAVA): New option to request Java demangling.
-
-Tue Jul 22 17:59:54 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * libiberty.h (PEXECUTE_*): Define.
- (pexecute, pwait): Declare.
-
-Fri Jun 6 13:02:33 1997 Andrew Cagney <cagney@b1.cygnus.com>
-
- * remote-sim.h (sim_kill): Mark as depreciated.
-
-Fri May 23 13:43:41 1997 Fred Fish <fnf@cygnus.com>
-
- * bfdlink.h (struct bfd_link_info): Add task_link member.
-
-Thu May 22 11:32:49 1997 Andrew Cagney <cagney@b1.cygnus.com>
-
- * remote-sim.h: Review documentation. Clarify restrictions on
- when functions can be called.
-
-Wed May 21 16:47:53 1997 Andrew Cagney <cagney@b1.cygnus.com>
-
- * remote-sim.h (sim_set_profile_size): Add prototype, document as
- depreciated.
-
-Tue May 20 09:32:22 1997 Andrew Cagney <cagney@b1.cygnus.com>
-
- * remote-sim.h (sim_open): Add callback struct.
- (sim_set_callbacks): Drop SIM_DESC argument. Document.
- (sim_size): Remove recently added SIM_DESC argument. Document.
-
-Mon May 19 19:14:44 1997 Andrew Cagney <cagney@b1.cygnus.com>
-
- * remote-sim.h: Pass SD into sim_size.
-
-Thu May 15 01:24:16 1997 Mark Alexander <marka@cygnus.com>
-
- * obstack.h (obstack_specify_allocation_with_arg, obstack_chunkfun,
- obstack_freefun): Eliminate compile warnings in gdb.
-
-Tue Apr 22 10:24:34 1997 Fred Fish <fnf@cygnus.com>
-
- * floatformat.h (floatformat_byteorders): Add comments for previous
- formats and add floatformat_littlebyte_bigword, primarily for ARM.
- Add declaration for floatformat_ieee_double_littlebyte_bigword.
-
-Fri Apr 18 13:04:49 1997 Andrew Cagney <cagney@b1.cygnus.com>
-
- * remote-sim.h (sim_stop): New interface - asynchronous
- notification of a request to stop / suspend the running
- simulation.
-
- * remote-sim.h (enum sim_stop): Add sim_running and sim_polling as
- states for use internal to simulators.
-
- * callback.h (struct host_callback_strut): Put a magic number at
- the end of the struct to allow basic checking.
- (struct host_callback_struct ): Add poll_quit - so
- that the console etc can be polled at regular intervals.
-
-Thu Apr 17 02:17:12 1997 Doug Evans <dje@canuck.cygnus.com>
-
- * remote-sim.h (struct _bfd): Declare.
- (sim_load): Return SIM_RC. New arg `abfd'.
- (sim_create_inferior): Return SIM_RC. Delete arg `start_address'.
-
-Wed Apr 2 17:09:12 1997 Andrew Cagney <cagney@kremvax.cygnus.com>
-
- * remote-sim.h (sim_trace, sim_size): Make these global. They
- will go away shortly.
-
-Wed Apr 2 15:23:49 1997 Doug Evans <dje@canuck.cygnus.com>
-
- * remote-sim.h (SIM_OPEN_KIND, SIM_RC): New enums.
- (sim_open): New argument `kind'.
-
-Wed Apr 2 14:45:51 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * COPYING: Update FSF address.
-
-Fri Mar 28 15:29:54 1997 Mike Meissner <meissner@cygnus.com>
-
- * callback.h (top level): Include stdarg.h or varargs.h if
- va_start is not defined.
- (host_callback_struct): Make {,e}vprintf_filtered take a va_list
- instead of void *, since va_list might be an array or structure
- type.
-
-Fri Mar 28 15:44:41 1997 H.J. Lu <hjl@gnu.ai.mit.edu>
-
- * libiberty.h (basename): Add prototype for glibc and linux.
-
-Mon Mar 17 19:22:12 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * objalloc.h: New file.
-
-Mon Mar 17 14:57:55 1997 Andrew Cagney <cagney@kremvax.cygnus.com>
-
- * remote-sim.h: New file, copied in from gdb/remote-sim.h. One
- day this will be placed in a directory of its own.
-
-Sat Mar 15 19:00:14 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * obstack.h: Update to current FSF version.
-
-Thu Mar 6 15:46:59 1997 Andrew Cagney <cagney@kremvax.cygnus.com>
-
- * callback.h (struct host_callback_struct): Add callbacks -
- flush_stdout, write_stderr, flush_stderr, vprintf_filtered,
- evprintf_filtered. Delete redundant callbacks - printf_filtered.
-
-Thu Feb 27 23:18:27 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * bfdlink.h (struct bfd_link_info): Remove lprefix and lprefix_len
- fields.
-
-Tue Feb 25 00:10:49 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * dis-asm.h (INIT_DISASSEMBLE_INFO_NO_ARCH): Initialize
- bytes_per_chunk and display_endian.
-
-Mon Feb 24 17:47:02 1997 Ian Lance Taylor <ian@cygnus.com>
-
- From Eric Youngdale <eric@andante.jic.com>:
- * bfdlink.h (struct bfd_elf_version_expr): Define.
- (struct bfd_elf_version_deps): Define.
- (struct bfd_elf_version_tree): Define.
-
-Thu Feb 6 14:20:01 1997 Martin M. Hunt <hunt@pizza.cygnus.com>
-
- * dis-asm.h: (disassemble_info): Add new fields
- bytes_per_chunk and display_endian to control the
- display of raw instructions.
-
-Fri Dec 27 22:17:37 1996 Fred Fish <fnf@cygnus.com>
-
- * dis-asm.h (print_insn_tic80): Declare.
-
-Sun Dec 8 17:11:12 1996 Doug Evans <dje@canuck.cygnus.com>
-
- * callback.h (host_callback): New member `error'.
-
-Wed Nov 20 00:40:23 1996 Doug Evans <dje@canuck.cygnus.com>
-
- * callback.h: New file, moved here from gdb.
-
-Mon Nov 18 16:34:00 1996 Dawn Perchik <dawn@critters.cygnus.com>
-
- * libiberty.h: Checkin again; last checkin failed due to sticky tag.
-
-Wed Nov 13 08:22:00 1996 Dawn Perchik <dawn@critters.cygnus.com>
-
- * libiberty.h: Revert last commit due to conflicts with hpux
- system headers.
-
-Tue Nov 12 16:31:00 1996 Dawn Perchik <dawn@critters.cygnus.com>
-
- * libiberty.h: Move prototypes from argv.c here.
-
-Thu Oct 31 14:56:18 1996 Doug Evans <dje@canuck.cygnus.com>
-
- * ansidecl.h (VPARAMS,VA_START): Define.
-
-Fri Oct 25 12:08:04 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * dis-asm.h (disassemble_info): Add bytes_per_line field.
- (INIT_DISASSEMBLE_INFO_NO_ARCH): Initialize bytes_per_line field.
-
-Thu Oct 24 17:10:01 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * dis-asm.h (disassemble_info): Add symbol field.
- (INIT_DISASSEMBLE_INFO_NO_ARCH): Initialize symbol field.
-
-Thu Oct 17 11:17:40 1996 Doug Evans <dje@canuck.cygnus.com>
-
- * dis-asm.h (print_insn_m32r): Declare.
-
-Mon Oct 14 23:56:52 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * libiberty.h: Declare parameter types for xmalloc and xrealloc.
-
-Thu Oct 3 13:45:27 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * fnmatch.h: New file.
-
-Thu Oct 3 10:33:14 1996 Jeffrey A Law (law@cygnus.com)
-
- * dis-asm.h (print_insn_mn10x00): Delete declaration.
- (print_insn_mn10200, print_insn_mn10300): Declare.
-
-Wed Oct 2 21:24:43 1996 Jeffrey A Law (law@cygnus.com)
-
- * dis-asm.h (print_insn_mn10x00): Declare.
-
-Mon Sep 30 13:56:11 1996 Fred Fish <fnf@cygnus.com>
-
- * libiberty.h: Remove #ifndef PRIVATE_XMALLOC.
-
-Sat Aug 31 13:27:06 1996 Jeffrey A Law (law@cygnus.com)
-
- * dis-asm.h (print_insn_v850): Declare.
-
-Tue Aug 13 16:10:30 1996 Stu Grossman (grossman@critters.cygnus.com)
-
- * obstack.h: Change bcopy to memcpy. Works better on Posix
- systems, which generally lack bcopy.
-
-Mon Aug 12 17:03:18 1996 Stu Grossman (grossman@critters.cygnus.com)
-
- * ansidecl.h: Change WIN32 to _WIN32.
-
-Fri Jul 26 13:58:18 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * dis-asm.h: Add flavour field.
- (print_insn_alpha): Declare.
- (print_insn_alpha_osf, print_insn_alpha_vms): Don't declare.
- (INIT_DISASSEMBLE_INFO): Initialize flavour field.
-
-Tue Jul 23 17:37:58 1996 Fred Fish <fnf@cygnus.com>
-
- * libiberty.h (PRIVATE_XMALLOC): Enclose xmalloc/xrealloc
- definitions inside #ifndef so that programs that want to
- can define PRIVATE_XMALLOC and then define xmalloc and
- xrealloc anyway they want.
- (basename): Document in source that we can't declare the
- parameter type because it is declared inconsistently across
- different systems.
-
-Mon Jul 22 13:16:13 1996 Richard Henderson <rth@tamu.edu>
-
- * dis-asm.h (print_insn_alpha): Don't declare.
- (print_insn_alpha_osf, print_insn_alpha_vms): Declare.
-
-Wed Jul 17 14:45:12 1996 Martin M. Hunt <hunt@pizza.cygnus.com>
-
- * dis-asm.h: (print_insn_d10v): Declare.
-
-Mon Jul 15 16:55:38 1996 Stu Grossman (grossman@critters.cygnus.com)
-
- * dis-asm.h: Get rid of decls for print_insn_i8086,
- print_insn_sparc64 and print_insn_sparclite.
- * (INIT_DISASSEMBLE_INFO): Split into two pieces. One,
- INIT_DISASSEMBLE_INFO_NO_ARCH inits everything except for endian,
- mach, and arch.
-
-Fri Jul 12 10:19:27 1996 Stu Grossman (grossman@critters.cygnus.com)
-
- * dis-asm.h (print_insn_i8086): Declare.
-
-Wed Jul 3 16:02:39 1996 Stu Grossman (grossman@critters.cygnus.com)
-
- * dis-asm.h (print_insn_sparclite): Declare.
-
-Tue Jun 18 16:02:46 1996 Jeffrey A. Law <law@rtl.cygnus.com>
-
- * dis-asm.h (print_insn_h8300s): Declare.
-
-Tue Jun 18 15:11:33 1996 Klaus Kaempf <kkaempf@progis.de>
-
- * fopen-vms.h: New file.
-
-Tue Jun 4 18:58:16 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * bfdlink.h (struct bfd_link_info): Add notice_all field.
-
-Fri Apr 26 10:33:12 1996 Doug Evans <dje@canuck.cygnus.com>
-
- * demangle.h (#ifdef IN_GCC): #include "gansidecl.h".
- (PROTO,PTR,const): Delete.
-
-Mon Apr 22 17:27:42 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * bfdlink.h (struct bfd_link_info): Add traditional_format field.
-
-Mon Apr 15 15:16:56 1996 Doug Evans <dje@canuck.cygnus.com>
-
- * libiberty.h (choose_temp_base): Add prototype.
-
-Tue Mar 12 17:29:46 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * bfdlink.h (bfd_wrapped_link_hash_lookup): Declare.
- (struct bfd_link_info): Add wrap_hash field.
-
-Wed Feb 14 16:49:17 1996 Martin Anantharaman <martin@mail.imech.uni-duisburg.de>
-
- * ieee.h (ieee_record_enum_type): Define
- ieee_external_reference_info_enum.
-
-Fri Feb 2 17:09:25 1996 Doug Evans <dje@charmed.cygnus.com>
-
- * dis-asm.h (DISASM_RAW_INSN): Delete.
-
-Tue Jan 23 09:21:47 1996 Doug Evans <dje@charmed.cygnus.com>
-
- * dis-asm.h (INIT_DISASSEMBLE_INFO): Set endian to BFD_ENDIAN_UNKNOWN.
- New argument FPRINTF_FUNC.
-
-Mon Jan 22 16:37:59 1996 Doug Evans <dje@charmed.cygnus.com>
-
- * dis-asm.h (disassemble_info): New members arch, mach, endian.
- (INIT_DISASSEMBLE_INFO): Initialize them.
- (DISASM_RAW_INSN{,FLAG}): Define.
-
-Thu Jan 18 11:32:38 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * demangle.h (cplus_demangle_opname): Change opname parameter to
- const char *.
- (cplus_mangle_opname): Change return type and opname parameter to
- const char *.
-
-Fri Jan 5 00:01:22 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * ieee.h (enum ieee_record): Add ieee_asn_record_enum,
- ieee_at_record_enum, ieee_ty_record_enum, ieee_atn_record_enum,
- ieee_bb_record_enum, and ieee_be_record_enum.
-
-Wed Jan 3 13:12:09 1996 Fred Fish <fnf@cygnus.com>
-
- * obstack.h: Update copyright to 1996.
- (_obstack_memory_used): Declare.
- (obstack_memory_used): Define macro.
-
-Thu Dec 28 11:42:12 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * libiberty.h (xstrdup): Declare.
-
-Thu Dec 21 14:47:17 1995 Michael Meissner <meissner@tiktok.cygnus.com>
-
- * wait.h: Protect all macros with #ifndef.
-
-Tue Oct 24 21:45:40 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * bfdlink.h (struct bfd_link_info): Add static_link field.
-
-Tue Sep 12 16:28:04 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * bfdlink.h (struct bfd_link_callbacks): Add symbol parameter to
- warning callback.
-
-Fri Sep 1 13:11:51 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * bfdlink.h (struct bfd_link_callbacks): Change warning callback
- to take BFD, section, and address arguments.
-
-Thu Aug 31 16:45:12 1995 steve chamberlain <sac@slash.cygnus.com>
-
- * bfdlink.h (struct bfd_link_info): Remove PE stuff.
-
-Tue Aug 22 03:18:23 1995 Ken Raeburn <raeburn@kr-laptop.cygnus.com>
-
- * libiberty.h: Declare xstrerror. From Pat Rankin.
-
-Mon Aug 21 18:11:36 1995 steve chamberlain <sac@slash.cygnus.com>
-
- * bfdlink.h (struct bfd_link_info): Remove PE stuff.
-
-Wed Aug 2 08:14:12 1995 Doug Evans <dje@canuck.cygnus.com>
-
- * dis-asm.h (print_insn_sparc64): Declare.
-
-Mon Jul 10 13:26:49 1995 Eric Youngdale <eric@aib.com>
-
- * bfdlink.h (struct bfd_link_info): Add new field symbolic.
-
-Sun Jul 2 17:48:40 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * bfdlink.h (struct bfd_link_info): Change type of base_file to
- PTR.
-
-Thu Jun 29 00:02:45 1995 Steve Chamberlain <sac@slash.cygnus.com>
-
- * bfdlink.h (struct bfd_link_info): Added base_file member.
-
-Tue Jun 20 16:40:04 1995 Steve Chamberlain <sac@slash.cygnus.com>
-
- * ansidecl.h: win32s is ANSI enough.
-
-Thu May 18 04:25:50 1995 Ken Raeburn <raeburn@kr-laptop.cygnus.com>
-
- Wed May 10 14:28:16 1995 Richard Earnshaw (rearnsha@armltd.co.uk)
-
- * dis-asm.h (print_insn_arm): Delete declaration.
- (print_insn_{little,big}_arm): New declarations.
-
- * floatformat.h (floatformat_arm_ext): Declare.
-
-Sat May 13 10:14:08 1995 Steve Chamberlain <sac@slash.cygnus.com>
-
- * bfdlink.h (subsytem, stack_heap_parameters): New.
-
-Thu May 4 14:36:42 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * demangle.h: Don't include ansidecl.h if IN_GCC.
-
-Tue Feb 21 00:37:28 1995 Jeff Law (law@snake.cs.utah.edu)
-
- * hp-symtab.h: Don't use bitfield enumerations, the HP C compiler
- does not handle them correctly.
-
-Thu Feb 9 14:20:27 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * libiberty.h (basename): Don't declare parameter type; some
- systems have this in their header files.
-
-Wed Feb 8 17:35:38 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * bfdlink.h (struct bfd_link_hash_entry): Change format of common
- symbol information, to remove restrictions on maximum size and
- alignment power, by using a pointer to a structure instead.
-
-Mon Feb 6 14:55:32 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * bfdlink.h (enum bfd_link_hash_type): Rename bfd_link_hash_weak
- to bfd_link_hash_undefweak. Add bfd_link_hash_defweak.
-
-Mon Jan 16 21:00:23 1995 Stan Shebs <shebs@andros.cygnus.com>
-
- * dis-asm.h (GDB_INIT_DISASSEMBLE_INFO, etc): Remove all
- GDB-specific definitions.
-
-Sun Jan 15 18:39:35 1995 Steve Chamberlain <sac@splat>
-
- * dis-asm.h (print_insn_w65): Declare.
-
-Thu Jan 12 17:51:17 1995 Ken Raeburn <raeburn@cujo.cygnus.com>
-
- * libiberty.h (hex_p): Fix sense of test.
-
-Wed Jan 11 22:36:40 1995 Ken Raeburn <raeburn@cujo.cygnus.com>
-
- * libiberty.h (_hex_array_size, _hex_bad, _hex_value, hex_init,
- hex_p, hex_value): New macros and declarations, for hex.c.
-
-Fri Jan 6 17:44:14 1995 Ian Lance Taylor <ian@sanguine.cygnus.com>
-
- * dis-asm.h: Make idempotent.
-
-Wed Dec 14 13:08:43 1994 Stan Shebs <shebs@andros.cygnus.com>
-
- * progress.h: New file, empty definitions for progress macros.
-
-Fri Nov 25 00:14:05 1994 Jeff Law (law@snake.cs.utah.edu)
-
- * hp-symtab.h: New file describing the debug symbols emitted
- by the HP C compilers.
-
-Fri Nov 11 15:48:37 1994 Ian Lance Taylor <ian@sanguine.cygnus.com>
-
- * bfdlink.h (struct bfd_link_hash_entry): Change u.c.size from 24
- to 26 bits, and change u.c.alignment_power from 8 to 6 bits. 6
- bit in the alignment power is enough for a 64 bit address space.
-
-Mon Oct 31 13:02:51 1994 Stan Shebs (shebs@andros.cygnus.com)
-
- * demangle.h (cplus_mangle_opname): Declare.
-
-Tue Oct 25 11:38:02 1994 Ian Lance Taylor <ian@sanguine.cygnus.com>
-
- * bfdlink.h (struct bfd_link_callbacks): Fix comments for
- multiple_common field.
-
-Sun Sep 04 17:58:10 1994 Richard Earnshaw (rwe@pegasus.esprit.ec.org)
-
- * dis-asm.h: Add support for the ARM.
-
-Wed Aug 10 12:51:41 1994 Doug Evans (dje@canuck.cygnus.com)
-
- * libiberty.h (strsignal): Document its existence even if we
- can't declare it.
-
-Tue Aug 2 14:40:03 1994 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- * os9k.h: Remove u_int16, u_int32, and owner_id typedefs and
- expand their uses. Those names conflict with Mach headers.
-
-Fri Jul 22 14:17:12 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
-
- * bfdlink.h (struct bfd_link_hash_entry): Change u.c.size into a
- bitfield. Add field u.c.alignment_power.
-
-Sun Jul 10 00:26:39 1994 Ian Dall (dall@hfrd.dsto.gov.au)
-
- * dis-asm.h: Add print_insn_ns32k declaration.
-
-Mon Jun 20 17:13:29 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
-
- * bfdlink.h (bfd_link_hash_table): Make creator a const pointer.
-
-Sat Jun 18 16:09:32 1994 Stan Shebs (shebs@andros.cygnus.com)
-
- * demangle.h (cplus_demangle_opname): Declare.
-
-Thu Jun 16 15:19:03 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * bfdlink.h (struct bfd_link_info): Add new field shared.
-
-Mon Jun 6 14:39:44 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * bfdlink.h (struct bfd_link_hash_entry): Remove written field:
- not needed for all backends.
-
-Thu Apr 28 19:06:50 1994 Ken Raeburn (raeburn@cujo.cygnus.com)
-
- * dis-asm.h (disassembler): Declare.
-
-Fri Apr 1 00:38:17 1994 Jim Wilson (wilson@mole.gnu.ai.mit.edu)
-
- * obstack.h: Delete use of IN_GCC to control whether
- stddef.h or gstddef.h is included.
-
-Tue Mar 22 13:06:02 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * bfdlink.h (enum bfd_link_order_type): Add bfd_data_link_order.
- (struct bfd_link_order): Add data field to union.
-
-Mon Mar 21 18:45:26 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * bfdlink.h (struct bfd_link_callbacks): Change bitsize argument
- to add_to_set to reloc. Remove bitsize argument from constructor.
- Comment that reloc_overflow, reloc_dangerous and unattached_reloc
- must handle NULL pointers for reloc location.
- (enum bfd_link_order_type): Add bfd_section_reloc_link_order and
- bfd_symbol_reloc_link_order.
- (struct bfd_link_order): Add reloc field to union.
- (struct bfd_link_order_reloc): Define.
-
-Mon Mar 14 12:27:50 1994 Ian Lance Taylor (ian@cygnus.com)
-
- * ieee-float.h: Removed; no longer used.
-
-Tue Mar 1 18:10:49 1994 Kung Hsu (kung@mexican.cygnus.com)
-
- * os9k.h: os9000 target specific header file, the header of the
- object file is used now.
-
-Sun Feb 27 21:52:26 1994 Jim Kingdon (kingdon@deneb.cygnus.com)
-
- * floatformat.h: New file, intended to replace ieee-float.h.
-
-Sun Feb 20 17:15:42 1994 Ian Lance Taylor (ian@lisa.cygnus.com)
-
- * ansidecl.h (ANSI_PROTOTYPES): Define if using ANSI prototypes.
-
-Wed Feb 16 01:07:12 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * libiberty.h: Don't declare strsignal, to avoid conflicts with
- Solaris system header files.
-
-Sat Feb 12 22:11:32 1994 Jeffrey A. Law (law@snake.cs.utah.edu)
-
- * libiberty.h (xexit): Use __volatile__ to avoid losing if
- compiling with gcc -traditional.
-
-Thu Feb 10 14:05:41 1994 Ian Lance Taylor (ian@cygnus.com)
-
- * libiberty.h: New file. Declares functions provided by
- libiberty.
-
-Tue Feb 8 05:19:52 1994 David J. Mackenzie (djm@thepub.cygnus.com)
-
- Handle obstack_chunk_alloc returning NULL. This allows
- obstacks to be used by libraries, without forcing them
- to call exit or longjmp.
- * obstack.h (struct obstack): Add alloc_failed flag.
- _obstack_begin, _obstack_begin_1): Declare to return int, not void.
- (obstack_finish): If alloc_failed, return NULL.
- (obstack_base, obstack_next_free, objstack_object_size):
- If alloc_failed, return 0.
- (obstack_grow, obstack_grow0, obstack_1grow, obstack_ptr_grow,
- obstack_int_grow, obstack_blank): If alloc_failed, do nothing that
- could corrupt the obstack.
-
-Mon Jan 24 15:06:05 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * bfdlink.h (struct bfd_link_callbacks): Add name, reloc_name and
- addend argments to reloc_overflow callback.
-
-Fri Jan 21 19:13:12 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * dis-asm.h (print_insn_big_powerpc, print_insn_little_powerpc,
- print_insn_rs6000): Declare.
-
-Thu Jan 6 14:15:55 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * bfdlink.h (struct bfd_link_callbacks): Add bitsize argument to
- add_to_set field. Add new callback named constructor.
-
-Thu Dec 30 10:44:06 1993 Ian Lance Taylor (ian@rtl.cygnus.com)
-
- * bfdlink.h: New file for new BFD linker backend routines.
-
-Mon Nov 29 10:43:57 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * dis-asm.h (enum dis_insn_tyupe): Remove non-ANSI trailing comma.
-
-Sat Oct 2 20:42:26 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- * dis-asm.h: Move comment to right place.
-
-Mon Aug 9 19:03:35 1993 David J. Mackenzie (djm@thepub.cygnus.com)
-
- * obstack.h (obstack_chunkfun, obstack_freefun): Add defns from
- previous version. Are these Cygnus local changes?
-
-Fri Aug 6 17:05:47 1993 David J. Mackenzie (djm@thepub.cygnus.com)
-
- * getopt.h, obstack.h: Update to latest FSF version.
-
-Mon Aug 2 14:45:29 1993 John Gilmore (gnu@cygnus.com)
-
- * dis-asm.h: Move enum outside of struct defn to avoid warnings.
-
-Mon Aug 2 08:49:30 1993 Stu Grossman (grossman at cygnus.com)
-
- * wait.h (WEXITSTATUS, WSTOPSIG): Mask down to 8 bits. This is
- for systems that store stuff into the high 16 bits of a wait
- status.
-
-Fri Jul 30 18:38:02 1993 John Gilmore (gnu@cygnus.com)
-
- * dis-asm.h: Add new fields insn_info_valid, branch_delay_insns,
- data_size, insn_type, target, target2. These are used to return
- information from the instruction decoders back to the calling
- program. Add comments, make more readable.
-
-Mon Jul 19 22:14:14 1993 Fred Fish (fnf@deneb.cygnus.com)
-
- * nlm: New directory containing NLM/NetWare includes.
-
-Thu Jul 15 12:10:04 1993 Ken Raeburn (raeburn@cambridge.cygnus.com)
-
- * dis-asm.h (struct disassemble_info): New field application_data.
-
-Thu Jul 15 12:41:15 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * dis-asm.h: Added declaration of print_insn_m88k.
-
-Fri Jul 2 10:31:59 1993 Ian Lance Taylor (ian@cygnus.com)
-
- * ansidecl.h: Use ANSI macros if __mips and _SYSTYPE_SVR4 are
- defined, since RISC/OS cc handles ANSI declarations in SVR4 mode
- but does not define __STDC__.
-
-Sun Jun 20 18:27:52 1993 Ken Raeburn (raeburn@poseidon.cygnus.com)
-
- * dis-asm.h: Don't need to include ansidecl.h any more.
-
-Fri Jun 18 03:22:10 1993 John Gilmore (gnu@cygnus.com)
-
- * oasys.h: Eliminate "int8_type", "int16_type", "int32_type", and
- their variants. These changes are coordinated with corresponding
- changes in ../bfd/oasys.c.
-
-Wed Jun 16 10:43:08 1993 Fred Fish (fnf@cygnus.com)
-
- * bfd.h: Note that it has been removed.
-
-Tue Jun 8 12:16:03 1993 Steve Chamberlain (sac@phydeaux.cygnus.com)
-
- Support for H8/300-H
- * dis-asm.h (print_insn_h8300, print_insn_h8300h): Declare it.
-
-Tue Jun 1 07:35:03 1993 Ken Raeburn (raeburn@kr-pc.cygnus.com)
-
- * ansidecl.h (const): Don't define it if it's already defined.
-
-Thu May 27 18:19:51 1993 Ken Raeburn (raeburn@cambridge.cygnus.com)
-
- * dis-asm.h (print_insn_hppa): Declare it.
-
- * bfd.h: Moved to bfd directory. Small stub here includes it
- without requiring "-I../bfd".
-
-Thu Apr 29 12:06:13 1993 Ken Raeburn (raeburn@deneb.cygnus.com)
-
- * bfd.h: Updated with BSF_FUNCTION.
-
-Mon Apr 26 18:15:50 1993 Steve Chamberlain (sac@thepub.cygnus.com)
-
- * bfd.h, dis-asm.h: Updated with Hitachi SH.
-
-Fri Apr 23 18:41:38 1993 Steve Chamberlain (sac@thepub.cygnus.com)
-
- * bfd.h: Updated with alpha changes.
- * dis-asm.h: Added alpha.
-
-Fri Apr 16 17:35:30 1993 Jim Kingdon (kingdon@cygnus.com)
-
- * bfd.h: Update for signed bfd_*get_*.
-
-Thu Apr 15 09:24:21 1993 Jim Kingdon (kingdon@cygnus.com)
-
- * bfd.h: Updated for file_truncated error.
-
-Thu Apr 8 10:53:47 1993 Ian Lance Taylor (ian@cygnus.com)
-
- * ansidecl.h: If no ANSI, define const to be empty.
-
-Thu Apr 1 09:00:10 1993 Jim Kingdon (kingdon@cygnus.com)
-
- * dis-asm.h: Declare a29k and i960 print_insn_*.
-
- * dis-asm.h: Add print_address_func and related stuff.
-
- * dis-asm.h (dis_asm_read_memory): Fix prototype.
-
-Wed Mar 31 17:40:16 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- * dis-asm.h: Add print_insn_sparc.
-
-Wed Mar 31 17:51:42 1993 Ian Lance Taylor (ian@cygnus.com)
-
- * bfd.h: Updated for BFD_RELOC_MIPS_GPREL and bfd_[gs]et_gp_size
- prototypes.
-
-Wed Mar 31 16:35:12 1993 Stu Grossman (grossman@cygnus.com)
-
- * dis-asm.h: (disassemble_info): Fix typo in prototype of
- dis_asm_memory_error().
-
-Tue Mar 30 19:09:23 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- * dis-asm.h (disassembler_info): Add read_memory_func,
- memory_error_func, buffer, and length.
- ({GDB_,}INIT_DISASSEMBLE_INFO): Set them.
- print_insn_*: Remove second argument.
-
-Tue Mar 30 14:48:55 1993 Steve Chamberlain (sac@thepub.cygnus.com)
-
- * bfd.h: Update for lma field of section.
-
-Tue Mar 30 12:22:55 1993 Jim Kingdon (kingdon@cygnus.com)
-
- * ansidecl.h: Use ANSI versions on AIX regardless of __STDC__.
-
-Fri Mar 19 14:49:49 1993 Steve Chamberlain (sac@thepub.cygnus.com)
-
- * dis-asm.h: Add h8500.
-
-Thu Mar 18 13:49:09 1993 Per Bothner (bothner@rtl.cygnus.com)
-
- * ieee-float.h: Moved from ../gdb.
- * dis-asm.h: New file. Interface to dis-assembler.
-
-Thu Mar 11 10:52:57 1993 Fred Fish (fnf@cygnus.com)
-
- * demangle.h (DMGL_NO_OPTS): Add define (set to 0) to use
- in place of bare 0, for readability reasons.
-
-Tue Mar 2 17:50:11 1993 Fred Fish (fnf@cygnus.com)
-
- * demangle.h: Replace all references to cfront with ARM.
-
-Tue Feb 23 12:21:14 1993 Ian Lance Taylor (ian@cygnus.com)
-
- * bfd.h: Update for new elements in JUMP_TABLE.
-
-Tue Feb 16 00:51:30 1993 John Gilmore (gnu@cygnus.com)
-
- * bfd.h: Update for BFD_VERSION 2.1.
-
-Tue Jan 26 11:49:20 1993 Ian Lance Taylor (ian@cygnus.com)
-
- * bfd.h: Update for SEC_IS_COMMON flag.
-
-Tue Jan 19 12:25:12 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * bfd.h: Update for bfd_asymbol_value bug fix.
-
-Fri Jan 8 16:37:18 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * bfd.h: Update to include ECOFF tdata and target_flavour.
-
-Sun Dec 27 17:52:30 1992 Fred Fish (fnf@cygnus.com)
-
- * bfd.h: Add declaration for bfd_get_size().
-
-Tue Dec 22 22:42:46 1992 Fred Fish (fnf@cygnus.com)
-
- * demangle.h: Protect file from multiple inclusions with
- #if !defined(DEMANGLE_H)...#define DEMANGLE_H...#endif.
-
-Mon Dec 21 21:25:50 1992 Stu Grossman (grossman at cygnus.com)
-
- * bfd.h: Update to get hppa_core_struct from bfd.c.
-
-Thu Dec 17 00:42:35 1992 John Gilmore (gnu@cygnus.com)
-
- * bfd.h: Update to get tekhex tdata name change from bfd.
-
-Mon Nov 9 23:55:42 1992 John Gilmore (gnu@cygnus.com)
-
- * ansidecl.h: Update comments to discourage use of EXFUN.
-
-Thu Nov 5 16:35:44 1992 Ian Lance Taylor (ian@cygnus.com)
-
- * bfd.h: Update to bring in SEC_SHARED_LIBRARY.
-
-Thu Nov 5 03:21:32 1992 John Gilmore (gnu@cygnus.com)
-
- * bfd.h: Update to match EXFUN, bfd_seclet_struct, and SDEF
- cleanups in bfd.
-
-Wed Nov 4 07:28:05 1992 Ken Raeburn (raeburn@cygnus.com)
-
- * bout.h (N_CALLNAME, N_BALNAME): Define as char-type values, so
- widening works consistently.
-
-Fri Oct 16 03:17:08 1992 John Gilmore (gnu@cygnus.com)
-
- * getopt.h: Update to Revised Standard FSF Version.
-
-Thu Oct 15 21:43:22 1992 K. Richard Pixley (rich@sendai.cygnus.com)
-
- * getopt.h (struct option): use the provided enum for has_arg.
-
- * demangle.h (AUTO_DEMANGLING, GNU_DEMANGLING,
- LUCID_DEMANGLING): ultrix compilers require enums to be
- enums and ints to be ints and casts where they meet. cast some
- enums into ints.
-
-Thu Oct 15 04:35:51 1992 John Gilmore (gnu@cygnus.com)
-
- * bfd.h: Update after comment changes.
-
-Thu Oct 8 09:03:02 1992 Steve Chamberlain (sac@thepub.cygnus.com)
-
- * bfd.h (bfd_get_symbol_leading_char): new macro for getting in xvec
-
-Thu Sep 3 09:10:50 1992 Stu Grossman (grossman at cygnus.com)
-
- * bfd.h (struct reloc_howto_struct): size needs to be signed if
- it's going to hold negative values.
-
-Sun Aug 30 17:50:27 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * demangle.h: New file, moved from ../gdb. Made independent
- of gdb. Allow demangling style option to be passed as a
- parameter to cplus_demangle(), but using the
- current_demangling_style global as the default.
-
-Sat Aug 29 10:07:55 1992 Fred Fish (fnf@cygnus.com)
-
- * obstack.h: Merge comment change from current FSF version.
-
-Thu Aug 27 12:59:29 1992 Brendan Kehoe (brendan@cygnus.com)
-
- * bfd.h: add we32k
-
-Tue Aug 25 15:07:47 1992 Steve Chamberlain (sac@thepub.cygnus.com)
-
- * bfd.h: new after Z8000 stuff
-
-Mon Aug 17 09:01:23 1992 Ken Raeburn (raeburn@cygnus.com)
-
- * bfd.h: Regenerated after page/segment size changes.
-
-Sat Aug 1 13:46:31 1992 Fred Fish (fnf@cygnus.com)
-
- * obstack.h: Merge changes from current FSF version.
-
-Mon Jul 20 21:06:23 1992 Fred Fish (fnf@cygnus.com)
-
- * obstack.h (area_id, flags): Remove, replace with extra_arg,
- use_extra_arg, and maybe_empty_object.
- * obstack.h (OBSTACK_MAYBE_EMPTY_OBJECT, OBSTACK_MMALLOC_LIKE):
- Remove, replaced by maybe_empty_object and use_extra_arg bitfields.
- * obstack.h (obstack_full_begin, _obstack_begin): Remove area_id
- and flags arguments.
- * obstack.h (obstack_alloc_arg): New macro to set extra_arg.
-
-Thu Jul 16 08:12:44 1992 Steve Chamberlain (sac@thepub.cygnus.com)
-
- * bfd.h: new after adding BFD_IS_RELAXABLE
-
-Sat Jul 4 03:22:23 1992 John Gilmore (gnu at cygnus.com)
-
- * bfd.h: Regen after adding BSF_FILE.
-
-Mon Jun 29 14:18:36 1992 Fred Fish (fnf at sunfish)
-
- * obstack.h: Convert bcopy() use to memcpy(), which is more
- portable, more standard, and can take advantage of gcc's builtin
- functions for increased performance.
-
-Thu Jun 25 04:46:08 1992 John Gilmore (gnu at cygnus.com)
-
- * ansidecl.h (PARAMS): Incorporate this macro from gdb's defs.h.
- It's a cleaner way to forward-declare function prototypes.
-
-Fri Jun 19 15:46:32 1992 Stu Grossman (grossman at cygnus.com)
-
- * bfd.h: HPPA merge.
-
-Tue Jun 16 21:30:56 1992 K. Richard Pixley (rich@cygnus.com)
-
- * getopt.h: gratuitous white space changes merged from other prep
- releases.
-
-Thu Jun 11 01:10:55 1992 John Gilmore (gnu at cygnus.com)
-
- * bfd.h: Regen'd from bfd.c after removing elf_core_tdata_struct.
-
-Mon May 18 17:29:03 1992 K. Richard Pixley (rich@cygnus.com)
-
- * getopt.h: merged changes from make-3.62.11.
-
- * getopt.h: merged changes from grep-1.6 (alpha).
-
-Fri May 8 14:53:32 1992 K. Richard Pixley (rich@cygnus.com)
-
- * getopt.h: merged changes from bison-1.18.
-
-Sat Mar 14 17:25:20 1992 Fred Fish (fnf@cygnus.com)
-
- * obstack.h: Add "area_id" and "flags" members to obstack
- structure. Add obstack_chunkfun() and obstack_freefun() to
- set functions explicitly. Convert maybe_empty_object to
- a bit in "flags".
-
-Thu Feb 27 22:01:02 1992 Per Bothner (bothner@cygnus.com)
-
- * wait.h (WIFSTOPPED): Add IBM rs6000-specific version.
-
-Fri Feb 21 20:49:20 1992 John Gilmore (gnu at cygnus.com)
-
- * obstack.h: Add obstack_full_begin.
- * bfd.h, obstack.h: Protolint.
-
-Thu Jan 30 01:18:42 1992 John Gilmore (gnu at cygnus.com)
-
- * bfd.h: Remove comma from enum declaration.
-
-Mon Jan 27 22:01:13 1992 Steve Chamberlain (sac at cygnus.com)
-
- * bfd.h : new target entr, bfd_relax_section
-
-Wed Dec 18 17:19:44 1991 Stu Grossman (grossman at cygnus.com)
-
- * bfd.h, ieee.h: ANSIfy enums.
-
-Thu Dec 12 20:59:56 1991 John Gilmore (gnu at cygnus.com)
-
- * fopen-same.h, fopen-bin.h: New files for configuring
- whether fopen distinguishes binary files or not. For use
- by host-dependent config files.
-
-Sat Nov 30 20:46:43 1991 Steve Chamberlain (sac at rtl.cygnus.com)
-
- * bfd.h: change the documentation format.
-
- * created coff, elf and opcode and aout directories. Moved:
-
- aout64.h ==> aout/aout64.h
- ar.h ==> aout/ar.h
- a.out.encap.h ==> aout/encap.h
- a.out.host.h ==> aout/host.h
- a.out.hp.h ==> aout/hp.h
- a.out.sun4.h ==> aout/sun4.h
- ranlib.h ==> aout/ranlib.h
- reloc.h ==> aout/reloc.h
- stab.def ==> aout/stab.def
- stab.gnu.h ==> aout/stab_gnu.h
-
- coff-a29k.h ==> coff/a29k.h
- coff-h8300.h ==> coff/h8300.h
- coff-i386.h ==> coff/i386.h
- coff-i960.h ==> coff/i960.h
- internalcoff.h ==> coff/internal.h
- coff-m68k.h ==> coff/m68k.h
- coff-m88k.h ==> coff/m88k.h
- coff-mips.h ==> coff/mips.h
- coff-rs6000.h ==> coff/rs6000.h
-
- elf-common.h ==> elf/common.h
- dwarf.h ==> elf/dwarf.h
- elf-external.h ==> elf/external.h
- elf-internal.h ==> elf/internal.h
-
- a29k-opcode.h ==> opcode/a29k.h
- arm-opcode.h ==> opcode/arm.h
- h8300-opcode.h ==> opcode/h8300.h
- i386-opcode.h ==> opcode/i386.h
- i860-opcode.h ==> opcode/i860.h
- i960-opcode.h ==> opcode/i960.h
- m68k-opcode.h ==> opcode/m68k.h
- m88k-opcode.h ==> opcode/m88k.h
- mips-opcode.h ==> opcode/mips.h
- np1-opcode.h ==> opcode/np1.h
- ns32k-opcode.h ==> opcode/ns32k.h
- pn-opcode.h ==> opcode/pn.h
- pyr-opcode.h ==> opcode/pyr.h
- sparc-opcode.h ==> opcode/sparc.h
- tahoe-opcode.h ==> opcode/tahoe.h
- vax-opcode.h ==> opcode/vax.h
-
-
-
-Wed Nov 27 10:38:31 1991 Steve Chamberlain (sac at rtl.cygnus.com)
-
- * internalcoff.h: (internal_scnhdr) took out #def dependency, now
- s_nreloc and s_nlnno are always long. (internal_reloc): allways
- has an offset field now.
-
-Fri Nov 22 08:12:58 1991 John Gilmore (gnu at cygnus.com)
-
- * coff-rs6000.h: Lint; use unsigned chars for external fields.
- * internalcoff.h: Lint; cast storage classes to signed char.
-
-Thu Nov 21 21:01:05 1991 Per Bothner (bothner at cygnus.com)
-
- * stab.def: Remove the GNU extended type codes (e.g. N_SETT).
- * aout64.h: The heuristic for distinguishing between
- sunos-style and bsd-style ZMAGIC files (wrt. where the
- text segment starts) is moved into (the default definition of)
- the macro N_HEADER_IN_TEXT. This definition is only used
- if no other definition is used - e.g. bfd/newsos3.c defines
- N_HEADER_IN_TEXT(x) to be always 0 (as before).
-
-Thu Nov 21 11:53:03 1991 John Gilmore (gnu at cygnus.com)
-
- * aout64.h (N_TXTADDR, N_TXTOFF, N_TXTSIZE): New definitions
- that should handle all uses. LOGICAL_ versions deleted.
- Eliminate N_HEADER_IN_TEXT, using a_entry to determine which
- kind of zmagic a.out file we are looking at.
- * coff-rs6000.h: Typo.
-
-Tue Nov 19 18:43:37 1991 Per Bothner (bothner at cygnus.com)
-
- (Note: This is a revised entry, as was aout64.h.)
- * aout64.h: Some cleanups of N_TXTADDR and N_TXTOFF:
- Will now work for both old- and new-style ZMAGIC files,
- depending on N_HEADER_IN_TEXT macro.
- Add LOGICAL_TXTADDR, LOICAL_TXTOFF and LOGICAL_TXTSIZE
- that don't count the exec header as part
- of the text segment, to be consistent with bfd.
- * a.out.sun4.h: Simplified/fixed for previous change.
-
-Mon Nov 18 00:02:06 1991 Fred Fish (fnf at cygnus.com)
-
- * dwarf.h: Update to DWARF draft 5 version from gcc2.
-
-Thu Nov 14 19:44:59 1991 Per Bothner (bothner at cygnus.com)
-
- * stab.def: Added defs for extended GNU symbol types,
- such as N_SETT. These are normally ifdef'd out (because
- of conflicts with a.out.gnu.h), but are used by bfb_stab_name().
-
-Thu Nov 14 19:17:03 1991 Fred Fish (fnf at cygnus.com)
-
- * elf-common.h: Add defines to support ELF symbol table code.
-
-Mon Nov 11 19:01:06 1991 Fred Fish (fnf at cygnus.com)
-
- * elf-internal.h, elf-external.h, elf-common.h: Add support for
- note sections, which are used in ELF core files to hold copies
- of various /proc structures.
-
-Thu Nov 7 08:58:26 1991 Steve Chamberlain (sac at cygnus.com)
-
- * internalcoff.h: took out the M88 dependency in the lineno
- struct.
- * coff-m88k.h: defines GET_LINENO_LNNO and PUT_LINENO_LNNO to use
- 32bit linno entries.
- * a29k-opcode.h: fixed encoding of mtacc
-
-Sun Nov 3 11:54:22 1991 Per Bothner (bothner at cygnus.com)
-
- * bfd.h: Updated from ../bfd/bfd-in.h (q.v).
-
-Fri Nov 1 11:13:53 1991 John Gilmore (gnu at cygnus.com)
-
- * internalcoff.h: Add x_csect defines.
-
-Fri Oct 25 03:18:20 1991 John Gilmore (gnu at cygnus.com)
-
- * Rename COFF-related files in `coff-ARCH.h' form.
- coff-a29k.h, coff-i386.h, coff-i960.h, coff-m68k.h, coff-m88k.h,
- coff-mips.h, coff-rs6000.h to be exact.
-
-Thu Oct 24 22:11:11 1991 John Gilmore (gnu at cygnus.com)
-
- RS/6000 support, by Metin G. Ozisik, Mimi Phûông-Thåo Võ, and
- John Gilmore.
-
- * a.out.gnu.h: Update slightly.
- * bfd.h: Add new error code, fix doc, add bfd_arch_rs6000.
- * internalcoff.h: Add more F_ codes for filehdr. Add
- rs/6000-dependent fields to aouthdr. Add storage classes
- to syments. Add 6000-specific auxent. Add r_size in reloc.
- * rs6000coff.c: New file.
-
-Thu Oct 24 04:13:20 1991 Fred Fish (fnf at cygnus.com)
-
- * dwarf.h: New file for dwarf support. Copied from gcc2
- distribution.
-
-Wed Oct 16 13:31:45 1991 John Gilmore (gnu at cygnus.com)
-
- * aout64.h: Remove PAGE_SIZE defines; they are target-dependent.
- Add N_FN_SEQ for N_FN symbol type used on Sequent machines.
- * stab.def: Include N_FN_SEQ in table.
- * bout.h: External formats of structures use unsigned chars.
-
-Fri Oct 11 12:40:43 1991 Steve Chamberlain (steve at cygnus.com)
-
- * bfd.h:upgrade from bfd.c
- * internalcoff.h: add n_name, n_zeroes and n_offset macros
- * amdcoff.h: Define OMAGIC and AOUTHDRSZ.
-
-Fri Oct 11 10:58:06 1991 Per Bothner (bothner at cygnus.com)
-
- * a.out.host.h: Change SEGMENT_SIZE to 0x1000 for Sony.
- * bfd.h (align_power): Add (actually move) comment.
-
-Tue Oct 8 15:29:32 1991 Per Bothner (bothner at cygnus.com)
-
- * sys/h-rtbsd.h: Define MISSING_VFPRINT (for binutils/bucomm.c).
-
-Sun Oct 6 19:24:39 1991 John Gilmore (gnu at cygnus.com)
-
- * aout64.h: Move struct internal_exec to ../bfd/libaout.h so
- it can be shared by all `a.out-family' code. Rename
- EXTERNAL_LIST_SIZE to EXTERNAL_NLIST_SIZE. Use basic types
- for nlist members, and make strx integral rather than pointer.
- More commentary on n_type values.
- * bout.h: Provide a struct external_exec rather than an
- internal_exec.
- * m68kcoff.h: Remove `tagentries' which snuck in from the i960
- COFF port.
-
-Fri Oct 4 01:25:59 1991 John Gilmore (gnu at cygnus.com)
-
- * h8300-opcode.h: Remove `_enum' from the typedef for an enum.
- * bfd.h: Update to match bfd changes.
-
- * sys/h-i386mach.h, sysdep.h: Add 386 Mach host support.
-
-Tue Oct 1 04:58:42 1991 John Gilmore (gnu at cygnus.com)
-
- * bfd.h, elf-common.h, elf-external.h, elf-internal.h:
- Add preliminary ELF support, sufficient for GDB, from Fred Fish.
- * sysdep.h, sys/h-amix.h: Support Amiga SVR4.
-
- * sys/h-vaxult.h: Make it work. (David Taylor <taylor@think.com>)
- * a.out.vax.h: Remove unused and confusing file.
-
-Mon Sep 30 12:52:35 1991 Per Bothner (bothner at cygnus.com)
-
- * sysdep.h: Define NEWSOS3_SYS, and use it.
-
-Fri Sep 20 13:38:21 1991 John Gilmore (gnu at cygnus.com)
-
- * a.out.gnu.h (N_FN): Its value *really is* 0x1F.
- Fix it, and add comments warning about or-ing N_EXT with it
- and/or N_WARNING.
- * aout64.h (N_FN): Fix value, add comments about N_EXT.
- * stab.def (table at end): Update to show all the type
- values <0x20, including low order bits. Move N_FN to
- its rightful place.
-
-Tue Sep 17 17:41:37 1991 Stu Grossman (grossman at cygnus.com)
-
- * sys/h-irix3.h: sgi/irix support.
-
-Tue Sep 17 07:52:59 1991 John Gilmore (gnu at cygint.cygnus.com)
-
- * stab.def (N_DEFD): Add GNU Modula-2 debug stab, from Andrew
- Beers.
-
-Thu Sep 12 14:12:59 1991 John Gilmore (gnu at cygint.cygnus.com)
-
- * internalcoff.h (SYMNMLEN, FILNMLEN, DIMNUM): Define these
- for internalcoff, separately from the various external coff's.
- * amdcoff.h, bcs88kcoff.h, i386coff.h, intel-coff.h, m68kcoff.h,
- m88k-bcs.h: Prefix SYMNMLEN, FILNMLEN, and DIMNUM with E_'s for
- the external struct definitions.
- * ecoff.h: Remove these #define's, kludge no longer needed.
-
- * sys/h-ultra3.h: Add new Ultracomputer host.
- * sysdep.h: Add ULTRA3_SYM1_SYS and use it.
-
-Tue Sep 10 10:11:46 1991 John Gilmore (gnu at cygint.cygnus.com)
-
- * i386coff.h (LINESZ): Always 6, not based on sizeof().
- (Fix from Peter Schauer <pes@regent.e-technik.tu-muenchen.de>.)
-
-Wed Sep 4 08:58:37 1991 John Gilmore (gnu at cygint.cygnus.com)
-
- * a.out.gnu.h, aout64.h: Add N_WARNING. Change N_FN to 0x0E,
- to match SunOS and BSD. Add N_COMM as 0x12 for SunOS shared lib
- support.
- * stab.def: Add N_COMM to table, fix overlap comment.
-
-Tue Sep 3 06:29:20 1991 John Gilmore (gnu at cygint.cygnus.com)
-
- Merge with latest FSF versions of these files.
-
- * stab.gnu.h: Add LAST_UNUSED_STAB_CODE.
- * stab.def: Update to GPL2. Move N_WARNING out, since not a
- debug symbol. Change comments, and reorder table to numeric
- order. Update final table comment.
- (N_DSLINE, N_BSLINE): Renumber from 0x66 and 0x68, to 0x46 and 0x48.
-
- * obstack.h: GPL2. Merge.
-
-Fri Aug 23 01:54:23 1991 John Gilmore (gnu at cygint.cygnus.com)
-
- * a.out.gnu.h, a.out.sun4.h: Make SEGMENT_SIZE able to depend
- on the particular a.out being examined.
- * a.out.sun4.h: Define segment sizes for Sun-3's and Sun-4's.
- * FIXME: a.out.gnu.h is almost obsolete.
- * FIXME: a.out.sun4.h should be renamed a.out.sun.h now.
-
-Wed Aug 21 20:32:13 1991 John Gilmore (gnu at cygint.cygnus.com)
-
- * Start a ChangeLog for the includes directory.
-
- * a.out.gnu.h (N_FN): Fix value -- was 15, should be 0x1E.
- * stab.def: Update allocation table in comments at end,
- to reflect reality as I know it.
-
-
-Copyright (C) 1993-2003 Free Software Foundation, Inc.
-
-Copying and distribution of this file, with or without modification,
-are permitted in any medium without royalty provided the copyright
-notice and this notice are preserved.
-
-Local Variables:
-mode: change-log
-left-margin: 8
-fill-column: 74
-version-control: never
-End:
diff --git a/include/MAINTAINERS b/include/MAINTAINERS
deleted file mode 100644
index cd933df76..000000000
--- a/include/MAINTAINERS
+++ /dev/null
@@ -1,7 +0,0 @@
-See ../binutils/MAINTAINERS
-
-Copyright (C) 2012 Free Software Foundation, Inc.
-
-Copying and distribution of this file, with or without modification,
-are permitted in any medium without royalty provided the copyright
-notice and this notice are preserved.
diff --git a/include/alloca-conf.h b/include/alloca-conf.h
deleted file mode 100644
index 0e9e2c378..000000000
--- a/include/alloca-conf.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/* Copyright 2012 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 3 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, see <http://www.gnu.org/licenses/>. */
-
-#include "config.h"
-
-/* This is a merge of code recommended in the autoconf-2.61 documentation
- with that recommended in the autoconf-2.13 documentation, with added
- tweaks to heed C_ALLOCA. */
-
-#if defined HAVE_ALLOCA_H && !defined C_ALLOCA
-# include <alloca.h>
-#else
-# if defined __GNUC__ && !defined C_ALLOCA
-# if !defined alloca
-# define alloca __builtin_alloca
-# endif
-# else
-# if defined _AIX
-/* Indented so that pre-ansi C compilers will ignore it, rather than
- choke on it. Some versions of AIX require this to be the first
- thing seen by the compiler except for comments and preprocessor
- directives. */
- #pragma alloca
-# else
-# if defined _MSC_VER && !defined C_ALLOCA
-# include <malloc.h>
-# define alloca _alloca
-# else
-# if !defined alloca
-# if defined __STDC__ || defined __hpux
-# if defined HAVE_STDDEF_H
-# include <stddef.h>
-# if defined __cplusplus
-extern "C" void *alloca (size_t);
-# else
-extern void *alloca (size_t);
-# endif
-# else
-extern void *alloca ();
-# endif
-# else
-extern char *alloca ();
-# endif
-# endif
-# endif
-# endif
-# endif
-#endif
diff --git a/include/ansidecl.h b/include/ansidecl.h
deleted file mode 100644
index 0fb23bba7..000000000
--- a/include/ansidecl.h
+++ /dev/null
@@ -1,313 +0,0 @@
-/* ANSI and traditional C compatability macros
- Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
- 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2013
- Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-/* ANSI and traditional C compatibility macros
-
- ANSI C is assumed if __STDC__ is #defined.
-
- Macro ANSI C definition Traditional C definition
- ----- ---- - ---------- ----------- - ----------
- PTR `void *' `char *'
- const not defined `'
- volatile not defined `'
- signed not defined `'
-
- For ease of writing code which uses GCC extensions but needs to be
- portable to other compilers, we provide the GCC_VERSION macro that
- simplifies testing __GNUC__ and __GNUC_MINOR__ together, and various
- wrappers around __attribute__. Also, __extension__ will be #defined
- to nothing if it doesn't work. See below. */
-
-#ifndef _ANSIDECL_H
-#define _ANSIDECL_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Every source file includes this file,
- so they will all get the switch for lint. */
-/* LINTLIBRARY */
-
-/* Using MACRO(x,y) in cpp #if conditionals does not work with some
- older preprocessors. Thus we can't define something like this:
-
-#define HAVE_GCC_VERSION(MAJOR, MINOR) \
- (__GNUC__ > (MAJOR) || (__GNUC__ == (MAJOR) && __GNUC_MINOR__ >= (MINOR)))
-
-and then test "#if HAVE_GCC_VERSION(2,7)".
-
-So instead we use the macro below and test it against specific values. */
-
-/* This macro simplifies testing whether we are using gcc, and if it
- is of a particular minimum version. (Both major & minor numbers are
- significant.) This macro will evaluate to 0 if we are not using
- gcc at all. */
-#ifndef GCC_VERSION
-#define GCC_VERSION (__GNUC__ * 1000 + __GNUC_MINOR__)
-#endif /* GCC_VERSION */
-
-#if defined (__STDC__) || defined(__cplusplus) || defined (_AIX) || (defined (__mips) && defined (_SYSTYPE_SVR4)) || defined(_WIN32)
-/* All known AIX compilers implement these things (but don't always
- define __STDC__). The RISC/OS MIPS compiler defines these things
- in SVR4 mode, but does not define __STDC__. */
-/* eraxxon@alumni.rice.edu: The Compaq C++ compiler, unlike many other
- C++ compilers, does not define __STDC__, though it acts as if this
- was so. (Verified versions: 5.7, 6.2, 6.3, 6.5) */
-
-#define PTR void *
-
-#undef const
-#undef volatile
-#undef signed
-
-/* inline requires special treatment; it's in C99, and GCC >=2.7 supports
- it too, but it's not in C89. */
-#undef inline
-#if __STDC_VERSION__ >= 199901L || defined(__cplusplus) || (defined(__SUNPRO_C) && defined(__C99FEATURES__))
-/* it's a keyword */
-#else
-# if GCC_VERSION >= 2007
-# define inline __inline__ /* __inline__ prevents -pedantic warnings */
-# else
-# define inline /* nothing */
-# endif
-#endif
-
-#else /* Not ANSI C. */
-
-#define PTR char *
-
-/* some systems define these in header files for non-ansi mode */
-#undef const
-#undef volatile
-#undef signed
-#undef inline
-#define const
-#define volatile
-#define signed
-#define inline
-
-#endif /* ANSI C. */
-
-/* Define macros for some gcc attributes. This permits us to use the
- macros freely, and know that they will come into play for the
- version of gcc in which they are supported. */
-
-#if (GCC_VERSION < 2007)
-# define __attribute__(x)
-#endif
-
-/* Attribute __malloc__ on functions was valid as of gcc 2.96. */
-#ifndef ATTRIBUTE_MALLOC
-# if (GCC_VERSION >= 2096)
-# define ATTRIBUTE_MALLOC __attribute__ ((__malloc__))
-# else
-# define ATTRIBUTE_MALLOC
-# endif /* GNUC >= 2.96 */
-#endif /* ATTRIBUTE_MALLOC */
-
-/* Attributes on labels were valid as of gcc 2.93 and g++ 4.5. For
- g++ an attribute on a label must be followed by a semicolon. */
-#ifndef ATTRIBUTE_UNUSED_LABEL
-# ifndef __cplusplus
-# if GCC_VERSION >= 2093
-# define ATTRIBUTE_UNUSED_LABEL ATTRIBUTE_UNUSED
-# else
-# define ATTRIBUTE_UNUSED_LABEL
-# endif
-# else
-# if GCC_VERSION >= 4005
-# define ATTRIBUTE_UNUSED_LABEL ATTRIBUTE_UNUSED ;
-# else
-# define ATTRIBUTE_UNUSED_LABEL
-# endif
-# endif
-#endif
-
-/* Similarly to ARG_UNUSED below. Prior to GCC 3.4, the C++ frontend
- couldn't parse attributes placed after the identifier name, and now
- the entire compiler is built with C++. */
-#ifndef ATTRIBUTE_UNUSED
-#if GCC_VERSION >= 3004
-# define ATTRIBUTE_UNUSED __attribute__ ((__unused__))
-#else
-#define ATTRIBUTE_UNUSED
-#endif
-#endif /* ATTRIBUTE_UNUSED */
-
-/* Before GCC 3.4, the C++ frontend couldn't parse attributes placed after the
- identifier name. */
-#if ! defined(__cplusplus) || (GCC_VERSION >= 3004)
-# define ARG_UNUSED(NAME) NAME ATTRIBUTE_UNUSED
-#else /* !__cplusplus || GNUC >= 3.4 */
-# define ARG_UNUSED(NAME) NAME
-#endif /* !__cplusplus || GNUC >= 3.4 */
-
-#ifndef ATTRIBUTE_NORETURN
-#define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__))
-#endif /* ATTRIBUTE_NORETURN */
-
-/* Attribute `nonnull' was valid as of gcc 3.3. */
-#ifndef ATTRIBUTE_NONNULL
-# if (GCC_VERSION >= 3003)
-# define ATTRIBUTE_NONNULL(m) __attribute__ ((__nonnull__ (m)))
-# else
-# define ATTRIBUTE_NONNULL(m)
-# endif /* GNUC >= 3.3 */
-#endif /* ATTRIBUTE_NONNULL */
-
-/* Attribute `returns_nonnull' was valid as of gcc 4.9. */
-#ifndef ATTRIBUTE_RETURNS_NONNULL
-# if (GCC_VERSION >= 4009)
-# define ATTRIBUTE_RETURNS_NONNULL __attribute__ ((__returns_nonnull__))
-# else
-# define ATTRIBUTE_RETURNS_NONNULL
-# endif /* GNUC >= 4.9 */
-#endif /* ATTRIBUTE_RETURNS_NONNULL */
-
-/* Attribute `pure' was valid as of gcc 3.0. */
-#ifndef ATTRIBUTE_PURE
-# if (GCC_VERSION >= 3000)
-# define ATTRIBUTE_PURE __attribute__ ((__pure__))
-# else
-# define ATTRIBUTE_PURE
-# endif /* GNUC >= 3.0 */
-#endif /* ATTRIBUTE_PURE */
-
-/* Use ATTRIBUTE_PRINTF when the format specifier must not be NULL.
- This was the case for the `printf' format attribute by itself
- before GCC 3.3, but as of 3.3 we need to add the `nonnull'
- attribute to retain this behavior. */
-#ifndef ATTRIBUTE_PRINTF
-#define ATTRIBUTE_PRINTF(m, n) __attribute__ ((__format__ (__printf__, m, n))) ATTRIBUTE_NONNULL(m)
-#define ATTRIBUTE_PRINTF_1 ATTRIBUTE_PRINTF(1, 2)
-#define ATTRIBUTE_PRINTF_2 ATTRIBUTE_PRINTF(2, 3)
-#define ATTRIBUTE_PRINTF_3 ATTRIBUTE_PRINTF(3, 4)
-#define ATTRIBUTE_PRINTF_4 ATTRIBUTE_PRINTF(4, 5)
-#define ATTRIBUTE_PRINTF_5 ATTRIBUTE_PRINTF(5, 6)
-#endif /* ATTRIBUTE_PRINTF */
-
-/* Use ATTRIBUTE_FPTR_PRINTF when the format attribute is to be set on
- a function pointer. Format attributes were allowed on function
- pointers as of gcc 3.1. */
-#ifndef ATTRIBUTE_FPTR_PRINTF
-# if (GCC_VERSION >= 3001)
-# define ATTRIBUTE_FPTR_PRINTF(m, n) ATTRIBUTE_PRINTF(m, n)
-# else
-# define ATTRIBUTE_FPTR_PRINTF(m, n)
-# endif /* GNUC >= 3.1 */
-# define ATTRIBUTE_FPTR_PRINTF_1 ATTRIBUTE_FPTR_PRINTF(1, 2)
-# define ATTRIBUTE_FPTR_PRINTF_2 ATTRIBUTE_FPTR_PRINTF(2, 3)
-# define ATTRIBUTE_FPTR_PRINTF_3 ATTRIBUTE_FPTR_PRINTF(3, 4)
-# define ATTRIBUTE_FPTR_PRINTF_4 ATTRIBUTE_FPTR_PRINTF(4, 5)
-# define ATTRIBUTE_FPTR_PRINTF_5 ATTRIBUTE_FPTR_PRINTF(5, 6)
-#endif /* ATTRIBUTE_FPTR_PRINTF */
-
-/* Use ATTRIBUTE_NULL_PRINTF when the format specifier may be NULL. A
- NULL format specifier was allowed as of gcc 3.3. */
-#ifndef ATTRIBUTE_NULL_PRINTF
-# if (GCC_VERSION >= 3003)
-# define ATTRIBUTE_NULL_PRINTF(m, n) __attribute__ ((__format__ (__printf__, m, n)))
-# else
-# define ATTRIBUTE_NULL_PRINTF(m, n)
-# endif /* GNUC >= 3.3 */
-# define ATTRIBUTE_NULL_PRINTF_1 ATTRIBUTE_NULL_PRINTF(1, 2)
-# define ATTRIBUTE_NULL_PRINTF_2 ATTRIBUTE_NULL_PRINTF(2, 3)
-# define ATTRIBUTE_NULL_PRINTF_3 ATTRIBUTE_NULL_PRINTF(3, 4)
-# define ATTRIBUTE_NULL_PRINTF_4 ATTRIBUTE_NULL_PRINTF(4, 5)
-# define ATTRIBUTE_NULL_PRINTF_5 ATTRIBUTE_NULL_PRINTF(5, 6)
-#endif /* ATTRIBUTE_NULL_PRINTF */
-
-/* Attribute `sentinel' was valid as of gcc 3.5. */
-#ifndef ATTRIBUTE_SENTINEL
-# if (GCC_VERSION >= 3005)
-# define ATTRIBUTE_SENTINEL __attribute__ ((__sentinel__))
-# else
-# define ATTRIBUTE_SENTINEL
-# endif /* GNUC >= 3.5 */
-#endif /* ATTRIBUTE_SENTINEL */
-
-
-#ifndef ATTRIBUTE_ALIGNED_ALIGNOF
-# if (GCC_VERSION >= 3000)
-# define ATTRIBUTE_ALIGNED_ALIGNOF(m) __attribute__ ((__aligned__ (__alignof__ (m))))
-# else
-# define ATTRIBUTE_ALIGNED_ALIGNOF(m)
-# endif /* GNUC >= 3.0 */
-#endif /* ATTRIBUTE_ALIGNED_ALIGNOF */
-
-/* Useful for structures whose layout must much some binary specification
- regardless of the alignment and padding qualities of the compiler. */
-#ifndef ATTRIBUTE_PACKED
-# define ATTRIBUTE_PACKED __attribute__ ((packed))
-#endif
-
-/* Attribute `hot' and `cold' was valid as of gcc 4.3. */
-#ifndef ATTRIBUTE_COLD
-# if (GCC_VERSION >= 4003)
-# define ATTRIBUTE_COLD __attribute__ ((__cold__))
-# else
-# define ATTRIBUTE_COLD
-# endif /* GNUC >= 4.3 */
-#endif /* ATTRIBUTE_COLD */
-#ifndef ATTRIBUTE_HOT
-# if (GCC_VERSION >= 4003)
-# define ATTRIBUTE_HOT __attribute__ ((__hot__))
-# else
-# define ATTRIBUTE_HOT
-# endif /* GNUC >= 4.3 */
-#endif /* ATTRIBUTE_HOT */
-
-/* We use __extension__ in some places to suppress -pedantic warnings
- about GCC extensions. This feature didn't work properly before
- gcc 2.8. */
-#if GCC_VERSION < 2008
-#define __extension__
-#endif
-
-/* This is used to declare a const variable which should be visible
- outside of the current compilation unit. Use it as
- EXPORTED_CONST int i = 1;
- This is because the semantics of const are different in C and C++.
- "extern const" is permitted in C but it looks strange, and gcc
- warns about it when -Wc++-compat is not used. */
-#ifdef __cplusplus
-#define EXPORTED_CONST extern const
-#else
-#define EXPORTED_CONST const
-#endif
-
-/* Be conservative and only use enum bitfields with C++ or GCC.
- FIXME: provide a complete autoconf test for buggy enum bitfields. */
-
-#ifdef __cplusplus
-#define ENUM_BITFIELD(TYPE) enum TYPE
-#elif (GCC_VERSION > 2000)
-#define ENUM_BITFIELD(TYPE) __extension__ enum TYPE
-#else
-#define ENUM_BITFIELD(TYPE) unsigned int
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* ansidecl.h */
diff --git a/include/aout/ChangeLog b/include/aout/ChangeLog
deleted file mode 100644
index b4d4139d9..000000000
--- a/include/aout/ChangeLog
+++ /dev/null
@@ -1,262 +0,0 @@
-2010-04-15 Nick Clifton <nickc@redhat.com>
-
- * adobe.h: Update copyright notice to use GPLv3.
- * aout64.h: Likewise.
- * ar.h: Likewise.
- * dynix3.h: Likewise.
- * encap.h: Likewise.
- * host.h: Likewise.
- * hp.h: Likewise.
- * hp300hpux.h: Likewise.
- * ranlib.h: Likewise.
- * reloc.h: Likewise.
- * stab.def: Likewise.
- * stab_gnu.h: Likewise.
- * sun4.h: Likewise.
-
-2009-10-02 Alan Modra <amodra@bigpond.net.au>
-
- * aout64.h (N_SHARED_LIB): Define as zero if not already defined.
- * sun4.h (N_SHARED_LIB): Define.
- * hp300hpux.h (N_SHARED_LIB): Don't define.
-
-2008-08-28 Tristan Gingold <gingold@adacore.com>
-
- * stab.def: Add BNSYM, ENSYM, OSO for darwin.
-
-2008-03-27 Cary Coutant <ccoutant@google.com>
-
- * ar.h (ARMAGT): New magic string for thin archives.
-
-2005-08-18 Alan Modra <amodra@bigpond.net.au>
-
- * encap.h: Remove a29k support.
-
-2005-05-10 Nick Clifton <nickc@redhat.com>
-
- * Update the address and phone number of the FSF organization in
- the GPL notices in the following files:
- adobe.h, aout64.h, ar.h, dynix3.h, encap.h, host.h, hp.h,
- ranlib.h, reloc.h, stab.def, stab_gnu.h, sun4.h
-
-2004-01-06 Mark Kettenis <kettenis@gnu.org>
-
- * stab.def: Add N_PATCH to DO definition.
-
-2003-03-06 Elias Athanasopoulos <elathan@phys.uoa.gr>
-
- * aout64.h (BYTES_IN_WORD): Define if necessary.
-
-2001-09-18 Alan Modra <amodra@bigpond.net.au>
-
- * aout64.h: Formatting fixes.
- (N_TXTADDR): Evaluate to a bfd_vma.
- (N_DATADDR): Avoid negative unsigned warning.
- * hp300hpux.h: Formatting fixes.
- (N_DATADDR): Avoid negative unsigned warning.
-
-2000-04-03 Hans-Peter Nilsson <hp@axis.com>
-
- * aout64.h (RELOC_EXT_BITS_EXTERN_BIG): Wrap definition in #ifndef.
- (RELOC_EXT_BITS_EXTERN_LITTLE): Ditto.
- (RELOC_EXT_BITS_TYPE_BIG): Ditto.
- (RELOC_EXT_BITS_TYPE_SH_BIG): Ditto.
- (RELOC_EXT_BITS_TYPE_LITTLE): Ditto.
- (RELOC_EXT_BITS_TYPE_SH_LITTLE): Ditto.
-
-1999-07-12 Ian Lance Taylor <ian@zembu.com>
-
- * aout64.h (N_SHARED_LIB): Define as 0 if TEXT_START_ADDR is
- defined as 0.
-
-1998-06-28 Peter Schauer <pes@regent.e-technik.tu-muenchen.de>
-
- * stab.def: Add N_ALIAS from SunPro F77.
-
-1996-03-11 Ian Lance Taylor <ian@cygnus.com>
-
- * stab.def: Use __define_stab_duplicate rather than __define_stab
- for duplicate entries N_BROWS and N_MOD2.
- * stab_gnu.h (__define_stab_duplicate): Define before including
- stab.def.
-
-1995-10-27 Niklas Hallqvist <niklas@appli.se>
-
- * aout64.h, host.h, hp300hpux.h, sun4.h: Changed PAGE_SIZE to
- TARGET_PAGE_SIZE.
-
-1995-09-12 Ian Lance Taylor <ian@cygnus.com>
-
- * sun4.h (struct internal_sun4_dynamic_link): Change all fields
- from long to unsigned long.
-
-1995-07-12 Ken Raeburn <raeburn@kr-pc.cygnus.com>
-
- * sun4.h (PAGE_SIZE): Undefine before defining.
-
-1994-09-04 Richard Earnshaw (rwe@pegasus.esprit.ec.org)
-
- * aout64.h: Only define QMAGIC if it isn't already defined.
-
-1994-06-16 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * aout64.h (BMAGIC): Define.
-
-1994-06-11 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- Add weak symbols as an extension to a.out.
- * aout64.h (N_WEAKU, N_WEAKA, N_WEAKT, N_WEAKD, N_WEAKB): Define.
- * stab.def: Update symbol value table.
-
-1994-06-02 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * sun4.h (EXTERNAL_SUN4_DYNAMIC_DEBUGGER_SIZE): Correct from 28 to
- 24. Fix up ld_got comment.
-
-1994-03-30 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
-
- * dynix3.h: Cleanup, adapt to current bfd version.
-
-1994-02-26 Ian Lance Taylor (ian@cygnus.com)
-
- * aout64.h: Add casts to avoid warnings from SVR4 cc.
-
-1994-02-11 Stan Shebs (shebs@andros.cygnus.com)
-
- * ar.h (ARMAG, ARMAGB, ARFMAG): Change '\n' to '\012', for greater
- portability.
-
-1994-01-21 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * sun4.h: Added information about SunOS shared libraries.
-
-1994-01-07 Jim Kingdon (kingdon@deneb.cygnus.com)
-
- * aout64.h (N_TXTADDR): Add comment regarding OMAGIC and NMAGIC.
-
-1993-12-25 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- * aout64.h (N_DATOFF): Don't pad (revert change of 8 Jul 1993).
-
-1993-11-16 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- * aout64.h: New macros ZMAGIC_DISK_BLOCK_SIZE and N_DISK_BLOCK_SIZE
- for Linux ZMAGIC.
- (N_TXTOFF, N_DATOFF): Use them.
-
-1993-11-04 Ken Raeburn (raeburn@kr-pc.cygnus.com)
-
- * aout64.h (RELOC_STD_BITS_RELATIVE_LITTLE): Fixed value to match
- sun3 system; used to overlap other fields.
- (RELOC_STD_BITS_JMPTABLE_LITTLE): Likewise.
-
-1993-11-03 David J. Mackenzie (djm@thepub.cygnus.com)
-
- * aout64.h (RELOC_STD_BITS_BASEREL_LITTLE): Make it 0x10 (Ken's
- suggestion) to avoid conflict with RELOC_STD_BITS_EXTERN_LITTLE.
-
-1993-10-29 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * hp300hpux.h (N_SHARED_LIB): Define to be 0.
-
-1993-09-13 John Gilmore (gnu@cygnus.com)
-
- * ar.h (ARMAP_TIME_OFFSET): Add and describe.
-
-Mon Aug 23 Sean Fagan (sef@cygnus.com)
-
- * aout64.h [ARCH_SIZE != 64]: Allow N_BADMAG to be overridden.
-
-1993-08-16 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- * stab_gnu.h: Include aout/stab.def not just stab.def.
-
-1993-07-18 Jim Kingdon (kingdon@rtl.cygnus.com)
-
- * dynix3.h: New, for symmetry running dynix.
-
-1993-07-08 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- * aout64.h (N_BADMAG): Recognize QMAGIC.
- N_TXTOFF, N_TXTADDR, N_TXTSIZE: Special code for QMAGIC.
- N_DATOFF: Pad text size if we need to.
-
-1993-06-18 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- * stab.def (N_ECOML): Fix comment.
-
-1993-05-31 Jim Kingdon (kingdon@cygnus.com)
-
- * stab.def: Remove Solaris information on N_FUN stabstring grammar;
- I've transferred it to gdb/doc/stabs.texinfo, where it belongs.
-
-1993-05-10 Ken Raeburn (raeburn@kr-pc.cygnus.com)
-
- * hp300hpux.h: Patch from Glenn Engel for linker problem and
- compatibility fix:
- (OMAGIC, NMAGIC): New definitions.
- (SHAREMAGIC): Deleted.
- (HPUX_DOT_O_MAGIC): New macro.
- (_N_BADMAG): Adjusted.
- (N_HEADER_IN_TEXT, N_DATADDR): New macros.
-
-1993-04-29 Ken Raeburn (raeburn@deneb.cygnus.com)
-
- * hp300hpux.h: New file from Glenn Engel, glenne@lsid.hp.com.
-
-1993-04-27 Ken Raeburn (raeburn@kr-pc.cygnus.com)
-
- * aout64.h (struct external_exec, *MAGIC, N_BADMAG): Don't define
- if `external_exec' is already defined as a macro.
- (N_DATOFF, N_TRELOFF, N_DRELOFF, N_SYMOFF, N_STROFF): Don't define
- if already defined.
- (struct external_nlist, EXTERNAL_NLIST_SIZE): Don't define if
- `external_nlist' is already defined as a macro.
-
-1992-08-15 John Gilmore (gnu@cygnus.com)
-
- * adobe.h: Add description of a.out.adobe format.
-
-1992-07-03 John Gilmore (gnu at cygnus.com)
-
- * stab.def: Update more Solaris definitions.
- * stab_gnu.h: Add N_SO language types, and Solaris basic float types.
-
-1992-06-14 John Gilmore (gnu at cygnus.com)
-
- * stab.def: Update descriptions of Solaris-2 stabs; add N_UNDF.
-
-1992-06-11 John Gilmore (gnu at cygnus.com)
-
- * stab.def: Add N_OBJ and N_OPT from Solaris-2.
-
-1992-01-30 John Gilmore (gnu at cygnus.com)
-
- * aout64.h: N_TXTSIZE needs some more parentheses.
- I don't trust C precedence.
-
-1991-12-18 Per Bothner (bothner at cygnus.com)
-
- * aout64.h: Move common sunos-specific test
- to recognize shared libraries into new macro N_SHARED_LIB.
- Use it to simplify & reformat N_TXTADDR, N_TXTOFF, N_TXTSIZE.
-
-1991-11-30 Steve Chamberlain (sac at rtl.cygnus.com)
-
- * aout64.h, ar.h, encap.h, host.h, hp.h, ranlib.h, reloc.h,
- stab.def, stab_gnu.h, sun4.h: All moved from the devo/include
- directory.
-
-
-Copyright (C) 1991-2012 Free Software Foundation, Inc.
-
-Copying and distribution of this file, with or without modification,
-are permitted in any medium without royalty provided the copyright
-notice and this notice are preserved.
-
-Local Variables:
-mode: change-log
-left-margin: 8
-fill-column: 74
-version-control: never
-End:
diff --git a/include/aout/adobe.h b/include/aout/adobe.h
deleted file mode 100644
index ce2255277..000000000
--- a/include/aout/adobe.h
+++ /dev/null
@@ -1,314 +0,0 @@
-/* `a.out.adobe' differences from standard a.out files
-
- Copyright 2001, 2010 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef __A_OUT_ADOBE_H__
-#define __A_OUT_ADOBE_H__
-
-#define BYTES_IN_WORD 4
-
-/* Struct external_exec is the same. */
-
-/* This is the layout on disk of the 32-bit or 64-bit exec header. */
-
-struct external_exec
-{
- bfd_byte e_info[4]; /* magic number and stuff */
- bfd_byte e_text[BYTES_IN_WORD]; /* length of text section in bytes */
- bfd_byte e_data[BYTES_IN_WORD]; /* length of data section in bytes */
- bfd_byte e_bss[BYTES_IN_WORD]; /* length of bss area in bytes */
- bfd_byte e_syms[BYTES_IN_WORD]; /* length of symbol table in bytes */
- bfd_byte e_entry[BYTES_IN_WORD]; /* start address */
- bfd_byte e_trsize[BYTES_IN_WORD]; /* length of text relocation info */
- bfd_byte e_drsize[BYTES_IN_WORD]; /* length of data relocation info */
-};
-
-#define EXEC_BYTES_SIZE (4 + BYTES_IN_WORD * 7)
-
-/* Magic numbers for a.out files */
-
-#undef ZMAGIC
-#define ZMAGIC 0xAD0BE /* Cute, eh? */
-#undef OMAGIC
-#undef NMAGIC
-
-#define N_BADMAG(x) ((x).a_info != ZMAGIC)
-
-/* By default, segment size is constant. But some machines override this
- to be a function of the a.out header (e.g. machine type). */
-#ifndef N_SEGSIZE
-#define N_SEGSIZE(x) SEGMENT_SIZE
-#endif
-#undef N_SEGSIZE /* FIXMEXXXX */
-
-/* Segment information for the a.out.Adobe format is specified after the
- file header. It contains N segment descriptors, followed by one with
- a type of zero.
-
- The actual text of the segments starts at N_TXTOFF in the file,
- regardless of how many or how few segment headers there are. */
-
-struct external_segdesc {
- unsigned char e_type[1];
- unsigned char e_size[3];
- unsigned char e_virtbase[4];
- unsigned char e_filebase[4];
-};
-
-struct internal_segdesc {
- unsigned int a_type:8; /* Segment type N_TEXT, N_DATA, 0 */
- unsigned int a_size:24; /* Segment size */
- bfd_vma a_virtbase; /* Virtual address */
- unsigned int a_filebase; /* Base address in object file */
-};
-
-#define N_TXTADDR(x) \
-
-/* This is documented to be at 1024, but appears to really be at 2048.
- FIXME?! */
-#define N_TXTOFF(x) 2048
-
-#define N_TXTSIZE(x) ((x).a_text)
-
-#define N_DATADDR(x)
-
-#define N_BSSADDR(x)
-
-/* Offsets of the various portions of the file after the text segment. */
-
-#define N_DATOFF(x) ( N_TXTOFF(x) + N_TXTSIZE(x) )
-#define N_TRELOFF(x) ( N_DATOFF(x) + (x).a_data )
-#define N_DRELOFF(x) ( N_TRELOFF(x) + (x).a_trsize )
-#define N_SYMOFF(x) ( N_DRELOFF(x) + (x).a_drsize )
-#define N_STROFF(x) ( N_SYMOFF(x) + (x).a_syms )
-
-/* Symbols */
-struct external_nlist {
- bfd_byte e_strx[BYTES_IN_WORD]; /* index into string table of name */
- bfd_byte e_type[1]; /* type of symbol */
- bfd_byte e_other[1]; /* misc info (usually empty) */
- bfd_byte e_desc[2]; /* description field */
- bfd_byte e_value[BYTES_IN_WORD]; /* value of symbol */
-};
-
-#define EXTERNAL_NLIST_SIZE (BYTES_IN_WORD+4+BYTES_IN_WORD)
-
-struct internal_nlist {
- unsigned long n_strx; /* index into string table of name */
- unsigned char n_type; /* type of symbol */
- unsigned char n_other; /* misc info (usually empty) */
- unsigned short n_desc; /* description field */
- bfd_vma n_value; /* value of symbol */
-};
-
-/* The n_type field is the symbol type, containing: */
-
-#define N_UNDF 0 /* Undefined symbol */
-#define N_ABS 2 /* Absolute symbol -- defined at particular addr */
-#define N_TEXT 4 /* Text sym -- defined at offset in text seg */
-#define N_DATA 6 /* Data sym -- defined at offset in data seg */
-#define N_BSS 8 /* BSS sym -- defined at offset in zero'd seg */
-#define N_COMM 0x12 /* Common symbol (visible after shared lib dynlink) */
-#define N_FN 0x1f /* File name of .o file */
-#define N_FN_SEQ 0x0C /* N_FN from Sequent compilers (sigh) */
-/* Note: N_EXT can only be usefully OR-ed with N_UNDF, N_ABS, N_TEXT,
- N_DATA, or N_BSS. When the low-order bit of other types is set,
- (e.g. N_WARNING versus N_FN), they are two different types. */
-#define N_EXT 1 /* External symbol (as opposed to local-to-this-file) */
-#define N_TYPE 0x1e
-#define N_STAB 0xe0 /* If any of these bits are on, it's a debug symbol */
-
-#define N_INDR 0x0a
-
-/* The following symbols refer to set elements.
- All the N_SET[ATDB] symbols with the same name form one set.
- Space is allocated for the set in the text section, and each set
- elements value is stored into one word of the space.
- The first word of the space is the length of the set (number of elements).
-
- The address of the set is made into an N_SETV symbol
- whose name is the same as the name of the set.
- This symbol acts like a N_DATA global symbol
- in that it can satisfy undefined external references. */
-
-/* These appear as input to LD, in a .o file. */
-#define N_SETA 0x14 /* Absolute set element symbol */
-#define N_SETT 0x16 /* Text set element symbol */
-#define N_SETD 0x18 /* Data set element symbol */
-#define N_SETB 0x1A /* Bss set element symbol */
-
-/* This is output from LD. */
-#define N_SETV 0x1C /* Pointer to set vector in data area. */
-
-/* Warning symbol. The text gives a warning message, the next symbol
- in the table will be undefined. When the symbol is referenced, the
- message is printed. */
-
-#define N_WARNING 0x1e
-
-/* Relocations
-
- There are two types of relocation flavours for a.out systems,
- standard and extended. The standard form is used on systems where the
- instruction has room for all the bits of an offset to the operand, whilst
- the extended form is used when an address operand has to be split over n
- instructions. Eg, on the 68k, each move instruction can reference
- the target with a displacement of 16 or 32 bits. On the sparc, move
- instructions use an offset of 14 bits, so the offset is stored in
- the reloc field, and the data in the section is ignored.
-*/
-
-/* This structure describes a single relocation to be performed.
- The text-relocation section of the file is a vector of these structures,
- all of which apply to the text section.
- Likewise, the data-relocation section applies to the data section. */
-
-struct reloc_std_external {
- bfd_byte r_address[BYTES_IN_WORD]; /* offset of of data to relocate */
- bfd_byte r_index[3]; /* symbol table index of symbol */
- bfd_byte r_type[1]; /* relocation type */
-};
-
-#define RELOC_STD_BITS_PCREL_BIG 0x80
-#define RELOC_STD_BITS_PCREL_LITTLE 0x01
-
-#define RELOC_STD_BITS_LENGTH_BIG 0x60
-#define RELOC_STD_BITS_LENGTH_SH_BIG 5 /* To shift to units place */
-#define RELOC_STD_BITS_LENGTH_LITTLE 0x06
-#define RELOC_STD_BITS_LENGTH_SH_LITTLE 1
-
-#define RELOC_STD_BITS_EXTERN_BIG 0x10
-#define RELOC_STD_BITS_EXTERN_LITTLE 0x08
-
-#define RELOC_STD_BITS_BASEREL_BIG 0x08
-#define RELOC_STD_BITS_BASEREL_LITTLE 0x08
-
-#define RELOC_STD_BITS_JMPTABLE_BIG 0x04
-#define RELOC_STD_BITS_JMPTABLE_LITTLE 0x04
-
-#define RELOC_STD_BITS_RELATIVE_BIG 0x02
-#define RELOC_STD_BITS_RELATIVE_LITTLE 0x02
-
-#define RELOC_STD_SIZE (BYTES_IN_WORD + 3 + 1) /* Bytes per relocation entry */
-
-struct reloc_std_internal
-{
- bfd_vma r_address; /* Address (within segment) to be relocated. */
- /* The meaning of r_symbolnum depends on r_extern. */
- unsigned int r_symbolnum:24;
- /* Nonzero means value is a pc-relative offset
- and it should be relocated for changes in its own address
- as well as for changes in the symbol or section specified. */
- unsigned int r_pcrel:1;
- /* Length (as exponent of 2) of the field to be relocated.
- Thus, a value of 2 indicates 1<<2 bytes. */
- unsigned int r_length:2;
- /* 1 => relocate with value of symbol.
- r_symbolnum is the index of the symbol
- in files the symbol table.
- 0 => relocate with the address of a segment.
- r_symbolnum is N_TEXT, N_DATA, N_BSS or N_ABS
- (the N_EXT bit may be set also, but signifies nothing). */
- unsigned int r_extern:1;
- /* The next three bits are for SunOS shared libraries, and seem to
- be undocumented. */
- unsigned int r_baserel:1; /* Linkage table relative */
- unsigned int r_jmptable:1; /* pc-relative to jump table */
- unsigned int r_relative:1; /* "relative relocation" */
- /* unused */
- unsigned int r_pad:1; /* Padding -- set to zero */
-};
-
-
-/* EXTENDED RELOCS */
-
-struct reloc_ext_external {
- bfd_byte r_address[BYTES_IN_WORD]; /* offset of of data to relocate */
- bfd_byte r_index[3]; /* symbol table index of symbol */
- bfd_byte r_type[1]; /* relocation type */
- bfd_byte r_addend[BYTES_IN_WORD]; /* datum addend */
-};
-
-#define RELOC_EXT_BITS_EXTERN_BIG 0x80
-#define RELOC_EXT_BITS_EXTERN_LITTLE 0x01
-
-#define RELOC_EXT_BITS_TYPE_BIG 0x1F
-#define RELOC_EXT_BITS_TYPE_SH_BIG 0
-#define RELOC_EXT_BITS_TYPE_LITTLE 0xF8
-#define RELOC_EXT_BITS_TYPE_SH_LITTLE 3
-
-/* Bytes per relocation entry */
-#define RELOC_EXT_SIZE (BYTES_IN_WORD + 3 + 1 + BYTES_IN_WORD)
-
-enum reloc_type
-{
- /* simple relocations */
- RELOC_8, /* data[0:7] = addend + sv */
- RELOC_16, /* data[0:15] = addend + sv */
- RELOC_32, /* data[0:31] = addend + sv */
- /* pc-rel displacement */
- RELOC_DISP8, /* data[0:7] = addend - pc + sv */
- RELOC_DISP16, /* data[0:15] = addend - pc + sv */
- RELOC_DISP32, /* data[0:31] = addend - pc + sv */
- /* Special */
- RELOC_WDISP30, /* data[0:29] = (addend + sv - pc)>>2 */
- RELOC_WDISP22, /* data[0:21] = (addend + sv - pc)>>2 */
- RELOC_HI22, /* data[0:21] = (addend + sv)>>10 */
- RELOC_22, /* data[0:21] = (addend + sv) */
- RELOC_13, /* data[0:12] = (addend + sv) */
- RELOC_LO10, /* data[0:9] = (addend + sv) */
- RELOC_SFA_BASE,
- RELOC_SFA_OFF13,
- /* P.I.C. (base-relative) */
- RELOC_BASE10, /* Not sure - maybe we can do this the */
- RELOC_BASE13, /* right way now */
- RELOC_BASE22,
- /* for some sort of pc-rel P.I.C. (?) */
- RELOC_PC10,
- RELOC_PC22,
- /* P.I.C. jump table */
- RELOC_JMP_TBL,
- /* reputedly for shared libraries somehow */
- RELOC_SEGOFF16,
- RELOC_GLOB_DAT,
- RELOC_JMP_SLOT,
- RELOC_RELATIVE,
-
- RELOC_11,
- RELOC_WDISP2_14,
- RELOC_WDISP19,
- RELOC_HHI22, /* data[0:21] = (addend + sv) >> 42 */
- RELOC_HLO10, /* data[0:9] = (addend + sv) >> 32 */
-
- /* 29K relocation types */
- RELOC_JUMPTARG,
- RELOC_CONST,
- RELOC_CONSTH,
-
- NO_RELOC
- };
-
-
-struct reloc_internal {
- bfd_vma r_address; /* offset of of data to relocate */
- long r_index; /* symbol table index of symbol */
- enum reloc_type r_type; /* relocation type */
- bfd_vma r_addend; /* datum addend */
-};
-
-#endif /* __A_OUT_ADOBE_H__ */
diff --git a/include/aout/aout64.h b/include/aout/aout64.h
deleted file mode 100644
index 384909e05..000000000
--- a/include/aout/aout64.h
+++ /dev/null
@@ -1,516 +0,0 @@
-/* `a.out' object-file definitions, including extensions to 64-bit fields
-
- Copyright 1999, 2000, 2001, 2003, 2009, 2010 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef __A_OUT_64_H__
-#define __A_OUT_64_H__
-
-#ifndef BYTES_IN_WORD
-#define BYTES_IN_WORD 4
-#endif
-
-/* This is the layout on disk of the 32-bit or 64-bit exec header. */
-
-#ifndef external_exec
-struct external_exec
-{
- bfd_byte e_info[4]; /* Magic number and stuff. */
- bfd_byte e_text[BYTES_IN_WORD]; /* Length of text section in bytes. */
- bfd_byte e_data[BYTES_IN_WORD]; /* Length of data section in bytes. */
- bfd_byte e_bss[BYTES_IN_WORD]; /* Length of bss area in bytes. */
- bfd_byte e_syms[BYTES_IN_WORD]; /* Length of symbol table in bytes. */
- bfd_byte e_entry[BYTES_IN_WORD]; /* Start address. */
- bfd_byte e_trsize[BYTES_IN_WORD]; /* Length of text relocation info. */
- bfd_byte e_drsize[BYTES_IN_WORD]; /* Length of data relocation info. */
-};
-
-#define EXEC_BYTES_SIZE (4 + BYTES_IN_WORD * 7)
-
-/* Magic numbers for a.out files. */
-
-#if ARCH_SIZE==64
-#define OMAGIC 0x1001 /* Code indicating object file. */
-#define ZMAGIC 0x1002 /* Code indicating demand-paged executable. */
-#define NMAGIC 0x1003 /* Code indicating pure executable. */
-
-/* There is no 64-bit QMAGIC as far as I know. */
-
-#define N_BADMAG(x) (N_MAGIC(x) != OMAGIC \
- && N_MAGIC(x) != NMAGIC \
- && N_MAGIC(x) != ZMAGIC)
-#else
-#define OMAGIC 0407 /* Object file or impure executable. */
-#define NMAGIC 0410 /* Code indicating pure executable. */
-#define ZMAGIC 0413 /* Code indicating demand-paged executable. */
-#define BMAGIC 0415 /* Used by a b.out object. */
-
-/* This indicates a demand-paged executable with the header in the text.
- It is used by 386BSD (and variants) and Linux, at least. */
-#ifndef QMAGIC
-#define QMAGIC 0314
-#endif
-# ifndef N_BADMAG
-# define N_BADMAG(x) (N_MAGIC(x) != OMAGIC \
- && N_MAGIC(x) != NMAGIC \
- && N_MAGIC(x) != ZMAGIC \
- && N_MAGIC(x) != QMAGIC)
-# endif /* N_BADMAG */
-#endif
-
-#endif
-
-#ifdef QMAGIC
-#define N_IS_QMAGIC(x) (N_MAGIC (x) == QMAGIC)
-#else
-#define N_IS_QMAGIC(x) (0)
-#endif
-
-/* The difference between TARGET_PAGE_SIZE and N_SEGSIZE is that TARGET_PAGE_SIZE is
- the finest granularity at which you can page something, thus it
- controls the padding (if any) before the text segment of a ZMAGIC
- file. N_SEGSIZE is the resolution at which things can be marked as
- read-only versus read/write, so it controls the padding between the
- text segment and the data segment (in memory; on disk the padding
- between them is TARGET_PAGE_SIZE). TARGET_PAGE_SIZE and N_SEGSIZE are the same
- for most machines, but different for sun3. */
-
-/* By default, segment size is constant. But some machines override this
- to be a function of the a.out header (e.g. machine type). */
-
-#ifndef N_SEGSIZE
-#define N_SEGSIZE(x) SEGMENT_SIZE
-#endif
-
-/* Virtual memory address of the text section.
- This is getting very complicated. A good reason to discard a.out format
- for something that specifies these fields explicitly. But til then...
-
- * OMAGIC and NMAGIC files:
- (object files: text for "relocatable addr 0" right after the header)
- start at 0, offset is EXEC_BYTES_SIZE, size as stated.
- * The text address, offset, and size of ZMAGIC files depend
- on the entry point of the file:
- * entry point below TEXT_START_ADDR:
- (hack for SunOS shared libraries)
- start at 0, offset is 0, size as stated.
- * If N_HEADER_IN_TEXT(x) is true (which defaults to being the
- case when the entry point is EXEC_BYTES_SIZE or further into a page):
- no padding is needed; text can start after exec header. Sun
- considers the text segment of such files to include the exec header;
- for BFD's purposes, we don't, which makes more work for us.
- start at TEXT_START_ADDR + EXEC_BYTES_SIZE, offset is EXEC_BYTES_SIZE,
- size as stated minus EXEC_BYTES_SIZE.
- * If N_HEADER_IN_TEXT(x) is false (which defaults to being the case when
- the entry point is less than EXEC_BYTES_SIZE into a page (e.g. page
- aligned)): (padding is needed so that text can start at a page boundary)
- start at TEXT_START_ADDR, offset TARGET_PAGE_SIZE, size as stated.
-
- Specific configurations may want to hardwire N_HEADER_IN_TEXT,
- for efficiency or to allow people to play games with the entry point.
- In that case, you would #define N_HEADER_IN_TEXT(x) as 1 for sunos,
- and as 0 for most other hosts (Sony News, Vax Ultrix, etc).
- (Do this in the appropriate bfd target file.)
- (The default is a heuristic that will break if people try changing
- the entry point, perhaps with the ld -e flag.)
-
- * QMAGIC is always like a ZMAGIC for which N_HEADER_IN_TEXT is true,
- and for which the starting address is TARGET_PAGE_SIZE (or should this be
- SEGMENT_SIZE?) (TEXT_START_ADDR only applies to ZMAGIC, not to QMAGIC). */
-
-/* This macro is only relevant for ZMAGIC files; QMAGIC always has the header
- in the text. */
-#ifndef N_HEADER_IN_TEXT
-#define N_HEADER_IN_TEXT(x) \
- (((x).a_entry & (TARGET_PAGE_SIZE-1)) >= EXEC_BYTES_SIZE)
-#endif
-
-/* Sun shared libraries, not linux. This macro is only relevant for ZMAGIC
- files. */
-#ifndef N_SHARED_LIB
-#define N_SHARED_LIB(x) (0)
-#endif
-
-/* Returning 0 not TEXT_START_ADDR for OMAGIC and NMAGIC is based on
- the assumption that we are dealing with a .o file, not an
- executable. This is necessary for OMAGIC (but means we don't work
- right on the output from ld -N); more questionable for NMAGIC. */
-
-#ifndef N_TXTADDR
-#define N_TXTADDR(x) \
- (/* The address of a QMAGIC file is always one page in, \
- with the header in the text. */ \
- N_IS_QMAGIC (x) \
- ? (bfd_vma) TARGET_PAGE_SIZE + EXEC_BYTES_SIZE \
- : (N_MAGIC (x) != ZMAGIC \
- ? (bfd_vma) 0 /* Object file or NMAGIC. */ \
- : (N_SHARED_LIB (x) \
- ? (bfd_vma) 0 \
- : (N_HEADER_IN_TEXT (x) \
- ? (bfd_vma) TEXT_START_ADDR + EXEC_BYTES_SIZE \
- : (bfd_vma) TEXT_START_ADDR))))
-#endif
-
-/* If N_HEADER_IN_TEXT is not true for ZMAGIC, there is some padding
- to make the text segment start at a certain boundary. For most
- systems, this boundary is TARGET_PAGE_SIZE. But for Linux, in the
- time-honored tradition of crazy ZMAGIC hacks, it is 1024 which is
- not what TARGET_PAGE_SIZE needs to be for QMAGIC. */
-
-#ifndef ZMAGIC_DISK_BLOCK_SIZE
-#define ZMAGIC_DISK_BLOCK_SIZE TARGET_PAGE_SIZE
-#endif
-
-#define N_DISK_BLOCK_SIZE(x) \
- (N_MAGIC(x) == ZMAGIC ? ZMAGIC_DISK_BLOCK_SIZE : TARGET_PAGE_SIZE)
-
-/* Offset in an a.out of the start of the text section. */
-#ifndef N_TXTOFF
-#define N_TXTOFF(x) \
- (/* For {O,N,Q}MAGIC, no padding. */ \
- N_MAGIC (x) != ZMAGIC \
- ? EXEC_BYTES_SIZE \
- : (N_SHARED_LIB (x) \
- ? 0 \
- : (N_HEADER_IN_TEXT (x) \
- ? EXEC_BYTES_SIZE /* No padding. */ \
- : ZMAGIC_DISK_BLOCK_SIZE /* A page of padding. */)))
-#endif
-/* Size of the text section. It's always as stated, except that we
- offset it to `undo' the adjustment to N_TXTADDR and N_TXTOFF
- for ZMAGIC files that nominally include the exec header
- as part of the first page of text. (BFD doesn't consider the
- exec header to be part of the text segment.) */
-#ifndef N_TXTSIZE
-#define N_TXTSIZE(x) \
- (/* For QMAGIC, we don't consider the header part of the text section. */\
- N_IS_QMAGIC (x) \
- ? (x).a_text - EXEC_BYTES_SIZE \
- : ((N_MAGIC (x) != ZMAGIC || N_SHARED_LIB (x)) \
- ? (x).a_text \
- : (N_HEADER_IN_TEXT (x) \
- ? (x).a_text - EXEC_BYTES_SIZE /* No padding. */ \
- : (x).a_text /* A page of padding. */ )))
-#endif
-/* The address of the data segment in virtual memory.
- It is the text segment address, plus text segment size, rounded
- up to a N_SEGSIZE boundary for pure or pageable files. */
-#ifndef N_DATADDR
-#define N_DATADDR(x) \
- (N_MAGIC (x) == OMAGIC \
- ? (N_TXTADDR (x) + N_TXTSIZE (x)) \
- : (N_SEGSIZE (x) + ((N_TXTADDR (x) + N_TXTSIZE (x) - 1) \
- & ~ (bfd_vma) (N_SEGSIZE (x) - 1))))
-#endif
-/* The address of the BSS segment -- immediately after the data segment. */
-
-#define N_BSSADDR(x) (N_DATADDR (x) + (x).a_data)
-
-/* Offsets of the various portions of the file after the text segment. */
-
-/* For {Q,Z}MAGIC, there is padding to make the data segment start on
- a page boundary. Most of the time the a_text field (and thus
- N_TXTSIZE) already contains this padding. It is possible that for
- BSDI and/or 386BSD it sometimes doesn't contain the padding, and
- perhaps we should be adding it here. But this seems kind of
- questionable and probably should be BSDI/386BSD-specific if we do
- do it.
-
- For NMAGIC (at least for hp300 BSD, probably others), there is
- padding in memory only, not on disk, so we must *not* ever pad here
- for NMAGIC. */
-
-#ifndef N_DATOFF
-#define N_DATOFF(x) (N_TXTOFF (x) + N_TXTSIZE (x))
-#endif
-#ifndef N_TRELOFF
-#define N_TRELOFF(x) (N_DATOFF (x) + (x).a_data)
-#endif
-#ifndef N_DRELOFF
-#define N_DRELOFF(x) (N_TRELOFF (x) + (x).a_trsize)
-#endif
-#ifndef N_SYMOFF
-#define N_SYMOFF(x) (N_DRELOFF (x) + (x).a_drsize)
-#endif
-#ifndef N_STROFF
-#define N_STROFF(x) (N_SYMOFF (x) + (x).a_syms)
-#endif
-
-/* Symbols */
-#ifndef external_nlist
-struct external_nlist
-{
- bfd_byte e_strx[BYTES_IN_WORD]; /* Index into string table of name. */
- bfd_byte e_type[1]; /* Type of symbol. */
- bfd_byte e_other[1]; /* Misc info (usually empty). */
- bfd_byte e_desc[2]; /* Description field. */
- bfd_byte e_value[BYTES_IN_WORD]; /* Value of symbol. */
-};
-#define EXTERNAL_NLIST_SIZE (BYTES_IN_WORD+4+BYTES_IN_WORD)
-#endif
-
-struct internal_nlist
-{
- unsigned long n_strx; /* Index into string table of name. */
- unsigned char n_type; /* Type of symbol. */
- unsigned char n_other; /* Misc info (usually empty). */
- unsigned short n_desc; /* Description field. */
- bfd_vma n_value; /* Value of symbol. */
-};
-
-/* The n_type field is the symbol type, containing: */
-
-#define N_UNDF 0 /* Undefined symbol. */
-#define N_ABS 2 /* Absolute symbol -- defined at particular addr. */
-#define N_TEXT 4 /* Text sym -- defined at offset in text seg. */
-#define N_DATA 6 /* Data sym -- defined at offset in data seg. */
-#define N_BSS 8 /* BSS sym -- defined at offset in zero'd seg. */
-#define N_COMM 0x12 /* Common symbol (visible after shared lib dynlink). */
-#define N_FN 0x1f /* File name of .o file. */
-#define N_FN_SEQ 0x0C /* N_FN from Sequent compilers (sigh). */
-/* Note: N_EXT can only be usefully OR-ed with N_UNDF, N_ABS, N_TEXT,
- N_DATA, or N_BSS. When the low-order bit of other types is set,
- (e.g. N_WARNING versus N_FN), they are two different types. */
-#define N_EXT 1 /* External symbol (as opposed to local-to-this-file). */
-#define N_TYPE 0x1e
-#define N_STAB 0xe0 /* If any of these bits are on, it's a debug symbol. */
-
-#define N_INDR 0x0a
-
-/* The following symbols refer to set elements.
- All the N_SET[ATDB] symbols with the same name form one set.
- Space is allocated for the set in the text section, and each set
- elements value is stored into one word of the space.
- The first word of the space is the length of the set (number of elements).
-
- The address of the set is made into an N_SETV symbol
- whose name is the same as the name of the set.
- This symbol acts like a N_DATA global symbol
- in that it can satisfy undefined external references. */
-
-/* These appear as input to LD, in a .o file. */
-#define N_SETA 0x14 /* Absolute set element symbol. */
-#define N_SETT 0x16 /* Text set element symbol. */
-#define N_SETD 0x18 /* Data set element symbol. */
-#define N_SETB 0x1A /* Bss set element symbol. */
-
-/* This is output from LD. */
-#define N_SETV 0x1C /* Pointer to set vector in data area. */
-
-/* Warning symbol. The text gives a warning message, the next symbol
- in the table will be undefined. When the symbol is referenced, the
- message is printed. */
-
-#define N_WARNING 0x1e
-
-/* Weak symbols. These are a GNU extension to the a.out format. The
- semantics are those of ELF weak symbols. Weak symbols are always
- externally visible. The N_WEAK? values are squeezed into the
- available slots. The value of a N_WEAKU symbol is 0. The values
- of the other types are the definitions. */
-#define N_WEAKU 0x0d /* Weak undefined symbol. */
-#define N_WEAKA 0x0e /* Weak absolute symbol. */
-#define N_WEAKT 0x0f /* Weak text symbol. */
-#define N_WEAKD 0x10 /* Weak data symbol. */
-#define N_WEAKB 0x11 /* Weak bss symbol. */
-
-/* Relocations
-
- There are two types of relocation flavours for a.out systems,
- standard and extended. The standard form is used on systems where the
- instruction has room for all the bits of an offset to the operand, whilst
- the extended form is used when an address operand has to be split over n
- instructions. Eg, on the 68k, each move instruction can reference
- the target with a displacement of 16 or 32 bits. On the sparc, move
- instructions use an offset of 14 bits, so the offset is stored in
- the reloc field, and the data in the section is ignored. */
-
-/* This structure describes a single relocation to be performed.
- The text-relocation section of the file is a vector of these structures,
- all of which apply to the text section.
- Likewise, the data-relocation section applies to the data section. */
-
-struct reloc_std_external
-{
- bfd_byte r_address[BYTES_IN_WORD]; /* Offset of of data to relocate. */
- bfd_byte r_index[3]; /* Symbol table index of symbol. */
- bfd_byte r_type[1]; /* Relocation type. */
-};
-
-#define RELOC_STD_BITS_PCREL_BIG ((unsigned int) 0x80)
-#define RELOC_STD_BITS_PCREL_LITTLE ((unsigned int) 0x01)
-
-#define RELOC_STD_BITS_LENGTH_BIG ((unsigned int) 0x60)
-#define RELOC_STD_BITS_LENGTH_SH_BIG 5
-#define RELOC_STD_BITS_LENGTH_LITTLE ((unsigned int) 0x06)
-#define RELOC_STD_BITS_LENGTH_SH_LITTLE 1
-
-#define RELOC_STD_BITS_EXTERN_BIG ((unsigned int) 0x10)
-#define RELOC_STD_BITS_EXTERN_LITTLE ((unsigned int) 0x08)
-
-#define RELOC_STD_BITS_BASEREL_BIG ((unsigned int) 0x08)
-#define RELOC_STD_BITS_BASEREL_LITTLE ((unsigned int) 0x10)
-
-#define RELOC_STD_BITS_JMPTABLE_BIG ((unsigned int) 0x04)
-#define RELOC_STD_BITS_JMPTABLE_LITTLE ((unsigned int) 0x20)
-
-#define RELOC_STD_BITS_RELATIVE_BIG ((unsigned int) 0x02)
-#define RELOC_STD_BITS_RELATIVE_LITTLE ((unsigned int) 0x40)
-
-#define RELOC_STD_SIZE (BYTES_IN_WORD + 3 + 1) /* Bytes per relocation entry. */
-
-struct reloc_std_internal
-{
- bfd_vma r_address; /* Address (within segment) to be relocated. */
- /* The meaning of r_symbolnum depends on r_extern. */
- unsigned int r_symbolnum:24;
- /* Nonzero means value is a pc-relative offset
- and it should be relocated for changes in its own address
- as well as for changes in the symbol or section specified. */
- unsigned int r_pcrel:1;
- /* Length (as exponent of 2) of the field to be relocated.
- Thus, a value of 2 indicates 1<<2 bytes. */
- unsigned int r_length:2;
- /* 1 => relocate with value of symbol.
- r_symbolnum is the index of the symbol
- in files the symbol table.
- 0 => relocate with the address of a segment.
- r_symbolnum is N_TEXT, N_DATA, N_BSS or N_ABS
- (the N_EXT bit may be set also, but signifies nothing). */
- unsigned int r_extern:1;
- /* The next three bits are for SunOS shared libraries, and seem to
- be undocumented. */
- unsigned int r_baserel:1; /* Linkage table relative. */
- unsigned int r_jmptable:1; /* pc-relative to jump table. */
- unsigned int r_relative:1; /* "relative relocation". */
- /* unused */
- unsigned int r_pad:1; /* Padding -- set to zero. */
-};
-
-
-/* EXTENDED RELOCS. */
-
-struct reloc_ext_external
-{
- bfd_byte r_address[BYTES_IN_WORD]; /* Offset of of data to relocate. */
- bfd_byte r_index[3]; /* Symbol table index of symbol. */
- bfd_byte r_type[1]; /* Relocation type. */
- bfd_byte r_addend[BYTES_IN_WORD]; /* Datum addend. */
-};
-
-#ifndef RELOC_EXT_BITS_EXTERN_BIG
-#define RELOC_EXT_BITS_EXTERN_BIG ((unsigned int) 0x80)
-#endif
-
-#ifndef RELOC_EXT_BITS_EXTERN_LITTLE
-#define RELOC_EXT_BITS_EXTERN_LITTLE ((unsigned int) 0x01)
-#endif
-
-#ifndef RELOC_EXT_BITS_TYPE_BIG
-#define RELOC_EXT_BITS_TYPE_BIG ((unsigned int) 0x1F)
-#endif
-
-#ifndef RELOC_EXT_BITS_TYPE_SH_BIG
-#define RELOC_EXT_BITS_TYPE_SH_BIG 0
-#endif
-
-#ifndef RELOC_EXT_BITS_TYPE_LITTLE
-#define RELOC_EXT_BITS_TYPE_LITTLE ((unsigned int) 0xF8)
-#endif
-
-#ifndef RELOC_EXT_BITS_TYPE_SH_LITTLE
-#define RELOC_EXT_BITS_TYPE_SH_LITTLE 3
-#endif
-
-/* Bytes per relocation entry. */
-#define RELOC_EXT_SIZE (BYTES_IN_WORD + 3 + 1 + BYTES_IN_WORD)
-
-enum reloc_type
-{
- /* Simple relocations. */
- RELOC_8, /* data[0:7] = addend + sv */
- RELOC_16, /* data[0:15] = addend + sv */
- RELOC_32, /* data[0:31] = addend + sv */
- /* PC-rel displacement. */
- RELOC_DISP8, /* data[0:7] = addend - pc + sv */
- RELOC_DISP16, /* data[0:15] = addend - pc + sv */
- RELOC_DISP32, /* data[0:31] = addend - pc + sv */
- /* Special. */
- RELOC_WDISP30, /* data[0:29] = (addend + sv - pc)>>2 */
- RELOC_WDISP22, /* data[0:21] = (addend + sv - pc)>>2 */
- RELOC_HI22, /* data[0:21] = (addend + sv)>>10 */
- RELOC_22, /* data[0:21] = (addend + sv) */
- RELOC_13, /* data[0:12] = (addend + sv) */
- RELOC_LO10, /* data[0:9] = (addend + sv) */
- RELOC_SFA_BASE,
- RELOC_SFA_OFF13,
- /* P.I.C. (base-relative). */
- RELOC_BASE10, /* Not sure - maybe we can do this the */
- RELOC_BASE13, /* right way now */
- RELOC_BASE22,
- /* For some sort of pc-rel P.I.C. (?) */
- RELOC_PC10,
- RELOC_PC22,
- /* P.I.C. jump table. */
- RELOC_JMP_TBL,
- /* Reputedly for shared libraries somehow. */
- RELOC_SEGOFF16,
- RELOC_GLOB_DAT,
- RELOC_JMP_SLOT,
- RELOC_RELATIVE,
-
- RELOC_11,
- RELOC_WDISP2_14,
- RELOC_WDISP19,
- RELOC_HHI22, /* data[0:21] = (addend + sv) >> 42 */
- RELOC_HLO10, /* data[0:9] = (addend + sv) >> 32 */
-
- /* 29K relocation types. */
- RELOC_JUMPTARG,
- RELOC_CONST,
- RELOC_CONSTH,
-
- /* All the new ones I can think of, for sparc v9. */
- RELOC_64, /* data[0:63] = addend + sv */
- RELOC_DISP64, /* data[0:63] = addend - pc + sv */
- RELOC_WDISP21, /* data[0:20] = (addend + sv - pc)>>2 */
- RELOC_DISP21, /* data[0:20] = addend - pc + sv */
- RELOC_DISP14, /* data[0:13] = addend - pc + sv */
- /* Q .
- What are the other ones,
- Since this is a clean slate, can we throw away the ones we dont
- understand ? Should we sort the values ? What about using a
- microcode format like the 68k ? */
- NO_RELOC
- };
-
-
-struct reloc_internal
-{
- bfd_vma r_address; /* Offset of of data to relocate. */
- long r_index; /* Symbol table index of symbol. */
- enum reloc_type r_type; /* Relocation type. */
- bfd_vma r_addend; /* Datum addend. */
-};
-
-/* Q.
- Should the length of the string table be 4 bytes or 8 bytes ?
-
- Q.
- What about archive indexes ? */
-
-#endif /* __A_OUT_64_H__ */
diff --git a/include/aout/ar.h b/include/aout/ar.h
deleted file mode 100644
index de0438222..000000000
--- a/include/aout/ar.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/* archive file definition for GNU software
-
- Copyright 2001, 2008, 2010 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-/* So far this is correct for BSDish archives. Don't forget that
- files must begin on an even byte boundary. */
-
-#ifndef __GNU_AR_H__
-#define __GNU_AR_H__
-
-/* Note that the usual '\n' in magic strings may translate to different
- characters, as allowed by ANSI. '\012' has a fixed value, and remains
- compatible with existing BSDish archives. */
-
-#define ARMAG "!<arch>\012" /* For COFF and a.out archives. */
-#define ARMAGB "!<bout>\012" /* For b.out archives. */
-#define ARMAGT "!<thin>\012" /* For thin archives. */
-#define SARMAG 8
-#define ARFMAG "`\012"
-
-/* The ar_date field of the armap (__.SYMDEF) member of an archive
- must be greater than the modified date of the entire file, or
- BSD-derived linkers complain. We originally write the ar_date with
- this offset from the real file's mod-time. After finishing the
- file, we rewrite ar_date if it's not still greater than the mod date. */
-
-#define ARMAP_TIME_OFFSET 60
-
-struct ar_hdr
-{
- char ar_name[16]; /* Name of this member. */
- char ar_date[12]; /* File mtime. */
- char ar_uid[6]; /* Owner uid; printed as decimal. */
- char ar_gid[6]; /* Owner gid; printed as decimal. */
- char ar_mode[8]; /* File mode, printed as octal. */
- char ar_size[10]; /* File size, printed as decimal. */
- char ar_fmag[2]; /* Should contain ARFMAG. */
-};
-
-#endif /* __GNU_AR_H__ */
diff --git a/include/aout/dynix3.h b/include/aout/dynix3.h
deleted file mode 100644
index 808e53a76..000000000
--- a/include/aout/dynix3.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/* a.out specifics for Sequent Symmetry running Dynix 3.x
-
- Copyright 2001, 2010 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef A_OUT_DYNIX3_H
-#define A_OUT_DYNIX3_H
-
-#define external_exec dynix_external_exec
-
-/* struct exec for Dynix 3
-
- a_gdtbl and a_bootstrap are only for standalone binaries.
- Shared data fields are not supported by the kernel as of Dynix 3.1,
- but are supported by Dynix compiler programs. */
-struct dynix_external_exec
- {
- unsigned char e_info[4];
- unsigned char e_text[4];
- unsigned char e_data[4];
- unsigned char e_bss[4];
- unsigned char e_syms[4];
- unsigned char e_entry[4];
- unsigned char e_trsize[4];
- unsigned char e_drsize[4];
- unsigned char e_g_code[8];
- unsigned char e_g_data[8];
- unsigned char e_g_desc[8];
- unsigned char e_shdata[4];
- unsigned char e_shbss[4];
- unsigned char e_shdrsize[4];
- unsigned char e_bootstrap[44];
- unsigned char e_reserved[12];
- unsigned char e_version[4];
- };
-
-#define EXEC_BYTES_SIZE (128)
-
-/* All executables under Dynix are demand paged with read-only text,
- Thus no NMAGIC.
-
- ZMAGIC has a page of 0s at virtual 0,
- XMAGIC has an invalid page at virtual 0. */
-#define OMAGIC 0x12eb /* .o */
-#define ZMAGIC 0x22eb /* zero @ 0, demand load */
-#define XMAGIC 0x32eb /* invalid @ 0, demand load */
-#define SMAGIC 0x42eb /* standalone, not supported here */
-
-#define N_BADMAG(x) ((OMAGIC != N_MAGIC(x)) && \
- (ZMAGIC != N_MAGIC(x)) && \
- (XMAGIC != N_MAGIC(x)) && \
- (SMAGIC != N_MAGIC(x)))
-
-#define N_ADDRADJ(x) ((ZMAGIC == N_MAGIC(x) || XMAGIC == N_MAGIC(x)) ? 0x1000 : 0)
-
-#define N_TXTOFF(x) (EXEC_BYTES_SIZE)
-#define N_DATOFF(x) (N_TXTOFF(x) + N_TXTSIZE(x))
-#define N_SHDATOFF(x) (N_DATOFF(x) + (x).a_data)
-#define N_TRELOFF(x) (N_SHDATOFF(x) + (x).a_shdata)
-#define N_DRELOFF(x) (N_TRELOFF(x) + (x).a_trsize)
-#define N_SHDRELOFF(x) (N_DRELOFF(x) + (x).a_drsize)
-#define N_SYMOFF(x) (N_SHDRELOFF(x) + (x).a_shdrsize)
-#define N_STROFF(x) (N_SYMOFF(x) + (x).a_syms)
-
-#define N_TXTADDR(x) \
- (((OMAGIC == N_MAGIC(x)) || (SMAGIC == N_MAGIC(x))) ? 0 \
- : TEXT_START_ADDR + EXEC_BYTES_SIZE)
-
-#define N_TXTSIZE(x) \
- (((OMAGIC == N_MAGIC(x)) || (SMAGIC == N_MAGIC(x))) ? ((x).a_text) \
- : ((x).a_text - N_ADDRADJ(x) - EXEC_BYTES_SIZE))
-
-#endif /* A_OUT_DYNIX3_H */
diff --git a/include/aout/encap.h b/include/aout/encap.h
deleted file mode 100644
index 7ebec698b..000000000
--- a/include/aout/encap.h
+++ /dev/null
@@ -1,135 +0,0 @@
-/* Yet Another Try at encapsulating bfd object files in coff.
- Copyright 1988, 1989, 1991, 2010 Free Software Foundation, Inc.
- Written by Pace Willisson 12/9/88
-
- This file is obsolete. It needs to be converted to just define a bunch
- of stuff that BFD can use to do coff-encapsulated files. --gnu@cygnus.com
-
- 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-/*
- * We only use the coff headers to tell the kernel
- * how to exec the file. Therefore, the only fields that need to
- * be filled in are the scnptr and vaddr for the text and data
- * sections, and the vaddr for the bss. As far as coff is concerned,
- * there is no symbol table, relocation, or line numbers.
- *
- * A normal bsd header (struct exec) is placed after the coff headers,
- * and before the real text. I defined a the new fields 'a_machtype'
- * and a_flags. If a_machtype is M_386, and a_flags & A_ENCAP is
- * true, then the bsd header is preceeded by a coff header. Macros
- * like N_TXTOFF and N_TXTADDR use this field to find the bsd header.
- *
- * The only problem is to track down the bsd exec header. The
- * macros HEADER_OFFSET, etc do this.
- */
-
-#define N_FLAGS_COFF_ENCAPSULATE 0x20 /* coff header precedes bsd header */
-
-/* Describe the COFF header used for encapsulation. */
-
-struct coffheader
-{
- /* filehdr */
- unsigned short f_magic;
- unsigned short f_nscns;
- long f_timdat;
- long f_symptr;
- long f_nsyms;
- unsigned short f_opthdr;
- unsigned short f_flags;
- /* aouthdr */
- short magic;
- short vstamp;
- long tsize;
- long dsize;
- long bsize;
- long entry;
- long text_start;
- long data_start;
- struct coffscn
- {
- char s_name[8];
- long s_paddr;
- long s_vaddr;
- long s_size;
- long s_scnptr;
- long s_relptr;
- long s_lnnoptr;
- unsigned short s_nreloc;
- unsigned short s_nlnno;
- long s_flags;
- } scns[3];
-};
-
-/* Describe some of the parameters of the encapsulation,
- including how to find the encapsulated BSD header. */
-
-/* FIXME, this is dumb. The same tools can't handle a.outs for different
- architectures, just because COFF_MAGIC is different; so you need a
- separate GNU nm for every architecture!!? Unfortunately, it needs to
- be this way, since the COFF_MAGIC value is determined by the kernel
- we're trying to fool here. */
-
-#define COFF_MAGIC_I386 0514 /* I386MAGIC */
-#define COFF_MAGIC_M68K 0520 /* MC68MAGIC */
-
-#ifdef COFF_MAGIC
-short __header_offset_temp;
-#define HEADER_OFFSET(f) \
- (__header_offset_temp = 0, \
- fread ((char *)&__header_offset_temp, sizeof (short), 1, (f)), \
- fseek ((f), -sizeof (short), 1), \
- __header_offset_temp==COFF_MAGIC ? sizeof(struct coffheader) : 0)
-#else
-#define HEADER_OFFSET(f) 0
-#endif
-
-#define HEADER_SEEK(f) (fseek ((f), HEADER_OFFSET((f)), 1))
-
-/* Describe the characteristics of the BSD header
- that appears inside the encapsulation. */
-
-/* Encapsulated coff files that are linked ZMAGIC have a text segment
- offset just past the header (and a matching TXTADDR), excluding
- the headers from the text segment proper but keeping the physical
- layout and the virtual memory layout page-aligned.
-
- Non-encapsulated a.out files that are linked ZMAGIC have a text
- segment that starts at 0 and an N_TXTADR similarly offset to 0.
- They too are page-aligned with each other, but they include the
- a.out header as part of the text.
-
- The _N_HDROFF gets sizeof struct exec added to it, so we have
- to compensate here. See <a.out.gnu.h>. */
-
-#undef _N_HDROFF
-#undef N_TXTADDR
-#undef N_DATADDR
-
-#define _N_HDROFF(x) ((N_FLAGS(x) & N_FLAGS_COFF_ENCAPSULATE) ? \
- sizeof (struct coffheader) : 0)
-
-/* Address of text segment in memory after it is loaded. */
-#define N_TXTADDR(x) \
- ((N_FLAGS(x) & N_FLAGS_COFF_ENCAPSULATE) ? \
- sizeof (struct coffheader) + sizeof (struct exec) : 0)
-#define SEGMENT_SIZE 0x400000
-
-#define N_DATADDR(x) \
- ((N_FLAGS(x) & N_FLAGS_COFF_ENCAPSULATE) ? \
- (SEGMENT_SIZE + ((N_TXTADDR(x)+(x).a_text-1) & ~(SEGMENT_SIZE-1))) : \
- (N_TXTADDR(x)+(x).a_text))
diff --git a/include/aout/host.h b/include/aout/host.h
deleted file mode 100644
index 4260cc536..000000000
--- a/include/aout/host.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/* host.h - Parameters about the a.out format, based on the host system
- on which the program is compiled.
-
- Copyright 2001, 2010 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-/* Address of data segment in memory after it is loaded.
- It is up to you to define SEGMENT_SIZE on machines not listed here. */
-#ifndef SEGMENT_SIZE
-
-#if defined(hp300) || defined(pyr)
-#define SEGMENT_SIZE page_size
-#endif
-
-#ifdef sony
-#define SEGMENT_SIZE 0x1000
-#endif /* Sony. */
-
-#ifdef is68k
-#define SEGMENT_SIZE 0x20000
-#endif
-
-#if defined(m68k) && defined(PORTAR)
-#define TARGET_PAGE_SIZE 0x400
-#define SEGMENT_SIZE TARGET_PAGE_SIZE
-#endif
-
-#endif /*!defined(SEGMENT_SIZE)*/
-
diff --git a/include/aout/hp.h b/include/aout/hp.h
deleted file mode 100644
index b60741a70..000000000
--- a/include/aout/hp.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/* Special version of <a.out.h> for use under HP-UX.
- Copyright 1988, 1991, 2010 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-/* THIS FILE IS OBSOLETE. It needs to be revised as a variant "external"
- a.out format for use with BFD. */
-
-/* The `exec' structure and overall layout must be close to HP's when
- we are running on an HP system, otherwise we will not be able to
- execute the resulting file. */
-
-/* Allow this file to be included twice. */
-#ifndef __GNU_EXEC_MACROS__
-
-struct exec
-{
- unsigned short a_machtype; /* machine type */
- unsigned short a_magic; /* magic number */
- unsigned long a_spare1;
- unsigned long a_spare2;
- unsigned long a_text; /* length of text, in bytes */
- unsigned long a_data; /* length of data, in bytes */
- unsigned long a_bss; /* length of uninitialized data area for file, in bytes */
- unsigned long a_trsize; /* length of relocation info for text, in bytes */
- unsigned long a_drsize; /* length of relocation info for data, in bytes */
- unsigned long a_spare3; /* HP = pascal interface size */
- unsigned long a_spare4; /* HP = symbol table size */
- unsigned long a_spare5; /* HP = debug name table size */
- unsigned long a_entry; /* start address */
- unsigned long a_spare6; /* HP = source line table size */
- unsigned long a_spare7; /* HP = value table size */
- unsigned long a_syms; /* length of symbol table data in file, in bytes */
- unsigned long a_spare8;
-};
-
-/* Tell a.out.gnu.h not to define `struct exec'. */
-#define __STRUCT_EXEC_OVERRIDE__
-
-#include "../a.out.gnu.h"
-
-#undef N_MAGIC
-#undef N_MACHTYPE
-#undef N_FLAGS
-#undef N_SET_INFO
-#undef N_SET_MAGIC
-#undef N_SET_MACHTYPE
-#undef N_SET_FLAGS
-
-#define N_MAGIC(exec) ((exec) . a_magic)
-#define N_MACHTYPE(exec) ((exec) . a_machtype)
-#define N_SET_MAGIC(exec, magic) (((exec) . a_magic) = (magic))
-#define N_SET_MACHTYPE(exec, machtype) (((exec) . a_machtype) = (machtype))
-
-#undef N_BADMAG
-#define N_BADMAG(x) ((_N_BADMAG (x)) || (_N_BADMACH (x)))
-
-#define _N_BADMACH(x) \
-(((N_MACHTYPE (x)) != HP9000S200_ID) && \
- ((N_MACHTYPE (x)) != HP98x6_ID))
-
-#define HP98x6_ID 0x20A
-#define HP9000S200_ID 0x20C
-
-#undef _N_HDROFF
-#define _N_HDROFF(x) (SEGMENT_SIZE - (sizeof (struct exec)))
-
-#define SEGMENT_SIZE 0x1000
-
-#endif /* __GNU_EXEC_MACROS__ */
diff --git a/include/aout/hp300hpux.h b/include/aout/hp300hpux.h
deleted file mode 100644
index 97a3eb58f..000000000
--- a/include/aout/hp300hpux.h
+++ /dev/null
@@ -1,132 +0,0 @@
-/* Special version of <a.out.h> for use under HP-UX.
- Copyright 1988, 1993, 1995, 2001, 2009, 2010
- 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-struct hp300hpux_exec_bytes
-{
- unsigned char e_info[4]; /* a_machtype/a_magic */
- unsigned char e_spare1[4];
- unsigned char e_spare2[4];
- unsigned char e_text[4]; /* length of text, in bytes */
- unsigned char e_data[4]; /* length of data, in bytes */
- unsigned char e_bss[4]; /* length of uninitialized data area , in bytes */
- unsigned char e_trsize[4]; /* length of relocation info for text, in bytes*/
- unsigned char e_drsize[4]; /* length of relocation info for data, in bytes*/
- unsigned char e_passize[4];/* HP = pascal interface size */
- unsigned char e_syms[4]; /* HP = symbol table size */
- unsigned char e_spare5[4]; /* HP = debug name table size */
- unsigned char e_entry[4]; /* start address */
- unsigned char e_spare6[4]; /* HP = source line table size */
- unsigned char e_supsize[4];/* HP = value table size */
- unsigned char e_drelocs[4];
- unsigned char e_extension[4]; /* file offset of extension */
-};
-#define EXEC_BYTES_SIZE 64
-
-struct hp300hpux_nlist_bytes
- {
- unsigned char e_value[4];
- unsigned char e_type[1];
- unsigned char e_length[1]; /* length of ascii symbol name */
- unsigned char e_almod[2]; /* alignment mod */
- unsigned char e_shlib[2]; /* info about dynamic linking */
- };
-#define EXTERNAL_NLIST_SIZE 10
-
-struct hp300hpux_reloc
- {
- unsigned char r_address[4];/* offset of of data to relocate */
- unsigned char r_index[2]; /* symbol table index of symbol */
- unsigned char r_type[1]; /* relocation type */
- unsigned char r_length[1]; /* length of item to reloc */
- };
-
-struct hp300hpux_header_extension
-{
- unsigned char e_syms[4];
- unsigned char unique_headers[12*4];
- unsigned char e_header[2]; /* type of header */
- unsigned char e_version[2]; /* version */
- unsigned char e_size[4]; /* bytes following*/
- unsigned char e_extension[4];/* file offset of next extension */
-};
-#define EXTERNAL_EXTENSION_HEADER_SIZE (16*4)
-
-/* hpux separates object files (0x106) and impure executables (0x107) */
-/* but the bfd code does not distinguish between them. Since we want to*/
-/* read hpux .o files, we add an special define and use it below in */
-/* offset and address calculations. */
-
-#define HPUX_DOT_O_MAGIC 0x106
-#define OMAGIC 0x107 /* object file or impure executable. */
-#define NMAGIC 0x108 /* Code indicating pure executable. */
-#define ZMAGIC 0x10B /* demand-paged executable. */
-
-#define N_HEADER_IN_TEXT(x) 0
-
-#if 0 /* libaout.h only uses the lower 8 bits */
-#define HP98x6_ID 0x20A
-#define HP9000S200_ID 0x20C
-#endif
-#define HP98x6_ID 0x0A
-#define HP9000S200_ID 0x0C
-
-#define N_BADMAG(x) ((_N_BADMAG (x)) || (_N_BADMACH (x)))
-
-#define N_DATADDR(x) \
- ((N_MAGIC (x) == OMAGIC || N_MAGIC (x) == HPUX_DOT_O_MAGIC) \
- ? (N_TXTADDR (x) + N_TXTSIZE (x)) \
- : (N_SEGSIZE (x) + ((N_TXTADDR (x) + N_TXTSIZE (x) - 1) \
- & ~ (bfd_vma) (N_SEGSIZE (x) - 1))))
-
-#define _N_BADMACH(x) \
- (((N_MACHTYPE (x)) != HP9000S200_ID) && ((N_MACHTYPE (x)) != HP98x6_ID))
-
-#define _N_BADMAG(x) (N_MAGIC(x) != HPUX_DOT_O_MAGIC \
- && N_MAGIC(x) != OMAGIC \
- && N_MAGIC(x) != NMAGIC \
- && N_MAGIC(x) != ZMAGIC )
-
-#undef _N_HDROFF
-#define _N_HDROFF(x) (SEGMENT_SIZE - (sizeof (struct exec)))
-
-#undef N_DATOFF
-#undef N_PASOFF
-#undef N_SYMOFF
-#undef N_SUPOFF
-#undef N_TRELOFF
-#undef N_DRELOFF
-#undef N_STROFF
-
-#define N_DATOFF(x) ( N_TXTOFF(x) + N_TXTSIZE(x) )
-#define N_PASOFF(x) ( N_DATOFF(x) + (x).a_data)
-#define N_SYMOFF(x) ( N_PASOFF(x) /* + (x).a_passize*/ )
-#define N_SUPOFF(x) ( N_SYMOFF(x) + (x).a_syms )
-#define N_TRELOFF(x) ( N_SUPOFF(x) /* + 0 (x).a_supsize*/ )
-#define N_DRELOFF(x) ( N_TRELOFF(x) + (x).a_trsize )
-#define N_EXTHOFF(x) ( N_DRELOFF(x) /* + 0 (x).a_drsize */)
-#define N_STROFF(x) ( 0 /* no string table */ )
-
-/* use these when the file has gnu symbol tables */
-#define N_GNU_TRELOFF(x) (N_DATOFF(x) + (x).a_data)
-#define N_GNU_DRELOFF(x) (N_GNU_TRELOFF(x) + (x).a_trsize)
-#define N_GNU_SYMOFF(x) (N_GNU_DRELOFF(x) + (x).a_drsize)
-
-#define TARGET_PAGE_SIZE 0x1000
-#define SEGMENT_SIZE 0x1000
-#define TEXT_START_ADDR 0
diff --git a/include/aout/hppa.h b/include/aout/hppa.h
deleted file mode 100644
index 24698bb35..000000000
--- a/include/aout/hppa.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/* Copyright 2012 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#include "filehdr.h"
-#include "aouthdr.h"
-#include "scnhdr.h"
-#include "spacehdr.h"
-#include "syms.h"
diff --git a/include/aout/ranlib.h b/include/aout/ranlib.h
deleted file mode 100644
index 92bec4689..000000000
--- a/include/aout/ranlib.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* ranlib.h -- archive library index member definition for GNU.
- Copyright 1990, 1991, 2010 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-/* The Symdef member of an archive contains two things:
- a table that maps symbol-string offsets to file offsets,
- and a symbol-string table. All the symbol names are
- run together (each with trailing null) in the symbol-string
- table. There is a single longword bytecount on the front
- of each of these tables. Thus if we have two symbols,
- "foo" and "_bar", that are in archive members at offsets
- 200 and 900, it would look like this:
- 16 ; byte count of index table
- 0 ; offset of "foo" in string table
- 200 ; offset of foo-module in file
- 4 ; offset of "bar" in string table
- 900 ; offset of bar-module in file
- 9 ; byte count of string table
- "foo\0_bar\0" ; string table */
-
-#define RANLIBMAG "__.SYMDEF" /* Archive file name containing index */
-#define RANLIBSKEW 3 /* Creation time offset */
-
-/* Format of __.SYMDEF:
- First, a longword containing the size of the 'symdef' data that follows.
- Second, zero or more 'symdef' structures.
- Third, a longword containing the length of symbol name strings.
- Fourth, zero or more symbol name strings (each followed by a null). */
-
-struct symdef
- {
- union
- {
- unsigned long string_offset; /* In the file */
- char *name; /* In memory, sometimes */
- } s;
- /* this points to the front of the file header (AKA member header --
- a struct ar_hdr), not to the front of the file or into the file).
- in other words it only tells you which file to read */
- unsigned long file_offset;
- };
-
-/* Compatability with BSD code */
-
-#define ranlib symdef
-#define ran_un s
-#define ran_strx string_offset
-#define ran_name name
-#define ran_off file_offset
diff --git a/include/aout/reloc.h b/include/aout/reloc.h
deleted file mode 100644
index 6f1bc52e4..000000000
--- a/include/aout/reloc.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/* reloc.h -- Header file for relocation information.
- Copyright 1989, 1990, 1991, 2010 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-/* Relocation types for a.out files using reloc_info_extended
- (SPARC and AMD 29000). */
-
-#ifndef _RELOC_H_READ_
-#define _RELOC_H_READ_ 1
-
-enum reloc_type
- {
- RELOC_8, RELOC_16, RELOC_32, /* simple relocations */
- RELOC_DISP8, RELOC_DISP16, RELOC_DISP32, /* pc-rel displacement */
- RELOC_WDISP30, RELOC_WDISP22,
- RELOC_HI22, RELOC_22,
- RELOC_13, RELOC_LO10,
- RELOC_SFA_BASE, RELOC_SFA_OFF13,
- RELOC_BASE10, RELOC_BASE13, RELOC_BASE22, /* P.I.C. (base-relative) */
- RELOC_PC10, RELOC_PC22, /* for some sort of pc-rel P.I.C. (?) */
- RELOC_JMP_TBL, /* P.I.C. jump table */
- RELOC_SEGOFF16, /* reputedly for shared libraries somehow */
- RELOC_GLOB_DAT, RELOC_JMP_SLOT, RELOC_RELATIVE,
- RELOC_11,
- RELOC_WDISP2_14,
- RELOC_WDISP19,
- RELOC_HHI22,
- RELOC_HLO10,
-
- /* 29K relocation types */
- RELOC_JUMPTARG, RELOC_CONST, RELOC_CONSTH,
-
- RELOC_WDISP14, RELOC_WDISP21,
-
- NO_RELOC
- };
-
-#define RELOC_TYPE_NAMES \
-"8", "16", "32", "DISP8", \
-"DISP16", "DISP32", "WDISP30", "WDISP22", \
-"HI22", "22", "13", "LO10", \
-"SFA_BASE", "SFAOFF13", "BASE10", "BASE13", \
-"BASE22", "PC10", "PC22", "JMP_TBL", \
-"SEGOFF16", "GLOB_DAT", "JMP_SLOT", "RELATIVE", \
-"11", "WDISP2_14", "WDISP19", "HHI22", \
-"HLO10", \
-"JUMPTARG", "CONST", "CONSTH", "WDISP14", \
-"WDISP21", \
-"NO_RELOC"
-
-#endif /* _RELOC_H_READ_ */
-
-/* end of reloc.h */
diff --git a/include/aout/stab.def b/include/aout/stab.def
deleted file mode 100644
index ad1c62ed8..000000000
--- a/include/aout/stab.def
+++ /dev/null
@@ -1,283 +0,0 @@
-/* Table of DBX symbol codes for the GNU system.
- Copyright 1988, 1991, 1992, 1993, 1994, 1996, 1998, 2004, 2010
- 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-/* New stab from Solaris 2. This uses an n_type of 0, which in a.out files
- overlaps the N_UNDF used for ordinary symbols. In ELF files, the
- debug information is in a different file section, so there is no conflict.
- This symbol's n_value gives the size of the string section associated
- with this file. The symbol's n_strx (relative to the just-updated
- string section start address) gives the name of the source file,
- e.g. "foo.c", without any path information. The symbol's n_desc gives
- the count of upcoming symbols associated with this file (not including
- this one). */
-/* __define_stab (N_UNDF, 0x00, "UNDF") */
-
-/* Global variable. Only the name is significant.
- To find the address, look in the corresponding external symbol. */
-__define_stab (N_GSYM, 0x20, "GSYM")
-
-/* Function name for BSD Fortran. Only the name is significant.
- To find the address, look in the corresponding external symbol. */
-__define_stab (N_FNAME, 0x22, "FNAME")
-
-/* Function name or text-segment variable for C. Value is its address.
- Desc is supposedly starting line number, but GCC doesn't set it
- and DBX seems not to miss it. */
-__define_stab (N_FUN, 0x24, "FUN")
-
-/* Data-segment variable with internal linkage. Value is its address.
- "Static Sym". */
-__define_stab (N_STSYM, 0x26, "STSYM")
-
-/* BSS-segment variable with internal linkage. Value is its address. */
-__define_stab (N_LCSYM, 0x28, "LCSYM")
-
-/* Name of main routine. Only the name is significant. */
-__define_stab (N_MAIN, 0x2a, "MAIN")
-
-/* Solaris2: Read-only data symbols. */
-__define_stab (N_ROSYM, 0x2c, "ROSYM")
-
-/* MacOS X:
- The beginning of a relocatable function block - including stabs. */
-__define_stab (N_BNSYM, 0x2e, "BNSYM")
-
-/* Global symbol in Pascal.
- Supposedly the value is its line number; I'm skeptical. */
-__define_stab (N_PC, 0x30, "PC")
-
-/* Number of symbols: 0, files,,funcs,lines according to Ultrix V4.0. */
-__define_stab (N_NSYMS, 0x32, "NSYMS")
-
-/* "No DST map for sym: name, ,0,type,ignored" according to Ultrix V4.0. */
-__define_stab (N_NOMAP, 0x34, "NOMAP")
-
-/* New stab from Solaris 2. Like N_SO, but for the object file. Two in
- a row provide the build directory and the relative path of the .o from it.
- Solaris2 uses this to avoid putting the stabs info into the linked
- executable; this stab goes into the ".stab.index" section, and the debugger
- reads the real stabs directly from the .o files instead. */
-__define_stab (N_OBJ, 0x38, "OBJ")
-
-/* New stab from Solaris 2. Options for the debugger, related to the
- source language for this module. E.g. whether to use ANSI
- integral promotions or traditional integral promotions. */
-__define_stab (N_OPT, 0x3c, "OPT")
-
-/* Register variable. Value is number of register. */
-__define_stab (N_RSYM, 0x40, "RSYM")
-
-/* Modula-2 compilation unit. Can someone say what info it contains? */
-__define_stab (N_M2C, 0x42, "M2C")
-
-/* Line number in text segment. Desc is the line number;
- value is corresponding address. On Solaris2, the line number is
- relative to the start of the current function. */
-__define_stab (N_SLINE, 0x44, "SLINE")
-
-/* Similar, for data segment. */
-__define_stab (N_DSLINE, 0x46, "DSLINE")
-
-/* Similar, for bss segment. */
-__define_stab (N_BSLINE, 0x48, "BSLINE")
-
-/* Sun's source-code browser stabs. ?? Don't know what the fields are.
- Supposedly the field is "path to associated .cb file". THIS VALUE
- OVERLAPS WITH N_BSLINE! */
-__define_stab_duplicate (N_BROWS, 0x48, "BROWS")
-
-/* GNU Modula-2 definition module dependency. Value is the modification time
- of the definition file. Other is non-zero if it is imported with the
- GNU M2 keyword %INITIALIZE. Perhaps N_M2C can be used if there
- are enough empty fields? */
-__define_stab(N_DEFD, 0x4a, "DEFD")
-
-/* New in Solaris2. Function start/body/end line numbers. */
-__define_stab(N_FLINE, 0x4C, "FLINE")
-
-/* MacOS X: This tells the end of a relocatable function + debugging info. */
-__define_stab(N_ENSYM, 0x4E, "ENSYM")
-
-/* THE FOLLOWING TWO STAB VALUES CONFLICT. Happily, one is for Modula-2
- and one is for C++. Still,... */
-/* GNU C++ exception variable. Name is variable name. */
-__define_stab (N_EHDECL, 0x50, "EHDECL")
-/* Modula2 info "for imc": name,,0,0,0 according to Ultrix V4.0. */
-__define_stab_duplicate (N_MOD2, 0x50, "MOD2")
-
-/* GNU C++ `catch' clause. Value is its address. Desc is nonzero if
- this entry is immediately followed by a CAUGHT stab saying what exception
- was caught. Multiple CAUGHT stabs means that multiple exceptions
- can be caught here. If Desc is 0, it means all exceptions are caught
- here. */
-__define_stab (N_CATCH, 0x54, "CATCH")
-
-/* Structure or union element. Value is offset in the structure. */
-__define_stab (N_SSYM, 0x60, "SSYM")
-
-/* Solaris2: Last stab emitted for module. */
-__define_stab (N_ENDM, 0x62, "ENDM")
-
-/* Name of main source file.
- Value is starting text address of the compilation.
- If multiple N_SO's appear, the first to contain a trailing / is the
- compilation directory. The first to not contain a trailing / is the
- source file name, relative to the compilation directory. Others (perhaps
- resulting from cfront) are ignored.
- On Solaris2, value is undefined, but desc is a source-language code. */
-
-__define_stab (N_SO, 0x64, "SO")
-
-/* Apple: This is the stab that associated the .o file with the
- N_SO stab, in the case where debug info is mostly stored in the .o file. */
-__define_stab (N_OSO, 0x66, "OSO")
-
-/* SunPro F77: Name of alias. */
-__define_stab (N_ALIAS, 0x6c, "ALIAS")
-
-/* Automatic variable in the stack. Value is offset from frame pointer.
- Also used for type descriptions. */
-__define_stab (N_LSYM, 0x80, "LSYM")
-
-/* Beginning of an include file. Only Sun uses this.
- In an object file, only the name is significant.
- The Sun linker puts data into some of the other fields. */
-__define_stab (N_BINCL, 0x82, "BINCL")
-
-/* Name of sub-source file (#include file).
- Value is starting text address of the compilation. */
-__define_stab (N_SOL, 0x84, "SOL")
-
-/* Parameter variable. Value is offset from argument pointer.
- (On most machines the argument pointer is the same as the frame pointer. */
-__define_stab (N_PSYM, 0xa0, "PSYM")
-
-/* End of an include file. No name.
- This and N_BINCL act as brackets around the file's output.
- In an object file, there is no significant data in this entry.
- The Sun linker puts data into some of the fields. */
-__define_stab (N_EINCL, 0xa2, "EINCL")
-
-/* Alternate entry point. Value is its address. */
-__define_stab (N_ENTRY, 0xa4, "ENTRY")
-
-/* Beginning of lexical block.
- The desc is the nesting level in lexical blocks.
- The value is the address of the start of the text for the block.
- The variables declared inside the block *precede* the N_LBRAC symbol.
- On Solaris2, the value is relative to the start of the current function. */
-__define_stab (N_LBRAC, 0xc0, "LBRAC")
-
-/* Place holder for deleted include file. Replaces a N_BINCL and everything
- up to the corresponding N_EINCL. The Sun linker generates these when
- it finds multiple identical copies of the symbols from an include file.
- This appears only in output from the Sun linker. */
-__define_stab (N_EXCL, 0xc2, "EXCL")
-
-/* Modula-2 scope information. Can someone say what info it contains? */
-__define_stab (N_SCOPE, 0xc4, "SCOPE")
-
-/* Solaris2: Patch Run Time Checker. */
-__define_stab (N_PATCH, 0xd0, "PATCH")
-
-/* End of a lexical block. Desc matches the N_LBRAC's desc.
- The value is the address of the end of the text for the block.
- On Solaris2, the value is relative to the start of the current function. */
-__define_stab (N_RBRAC, 0xe0, "RBRAC")
-
-/* Begin named common block. Only the name is significant. */
-__define_stab (N_BCOMM, 0xe2, "BCOMM")
-
-/* End named common block. Only the name is significant
- (and it should match the N_BCOMM). */
-__define_stab (N_ECOMM, 0xe4, "ECOMM")
-
-/* Member of a common block; value is offset within the common block.
- This should occur within a BCOMM/ECOMM pair. */
-__define_stab (N_ECOML, 0xe8, "ECOML")
-
-/* Solaris2: Pascal "with" statement: type,,0,0,offset */
-__define_stab (N_WITH, 0xea, "WITH")
-
-/* These STAB's are used on Gould systems for Non-Base register symbols
- or something like that. FIXME. I have assigned the values at random
- since I don't have a Gould here. Fixups from Gould folk welcome... */
-__define_stab (N_NBTEXT, 0xF0, "NBTEXT")
-__define_stab (N_NBDATA, 0xF2, "NBDATA")
-__define_stab (N_NBBSS, 0xF4, "NBBSS")
-__define_stab (N_NBSTS, 0xF6, "NBSTS")
-__define_stab (N_NBLCS, 0xF8, "NBLCS")
-
-/* Second symbol entry containing a length-value for the preceding entry.
- The value is the length. */
-__define_stab (N_LENG, 0xfe, "LENG")
-
-/* The above information, in matrix format.
-
- STAB MATRIX
- _________________________________________________
- | 00 - 1F are not dbx stab symbols |
- | In most cases, the low bit is the EXTernal bit|
-
- | 00 UNDEF | 02 ABS | 04 TEXT | 06 DATA |
- | 01 |EXT | 03 |EXT | 05 |EXT | 07 |EXT |
-
- | 08 BSS | 0A INDR | 0C FN_SEQ | 0E WEAKA |
- | 09 |EXT | 0B | 0D WEAKU | 0F WEAKT |
-
- | 10 WEAKD | 12 COMM | 14 SETA | 16 SETT |
- | 11 WEAKB | 13 | 15 | 17 |
-
- | 18 SETD | 1A SETB | 1C SETV | 1E WARNING|
- | 19 | 1B | 1D | 1F FN |
-
- |_______________________________________________|
- | Debug entries with bit 01 set are unused. |
- | 20 GSYM | 22 FNAME | 24 FUN | 26 STSYM |
- | 28 LCSYM | 2A MAIN | 2C ROSYM | 2E |
- | 30 PC | 32 NSYMS | 34 NOMAP | 36 |
- | 38 OBJ | 3A | 3C OPT | 3E |
- | 40 RSYM | 42 M2C | 44 SLINE | 46 DSLINE |
- | 48 BSLINE*| 4A DEFD | 4C FLINE | 4E |
- | 50 EHDECL*| 52 | 54 CATCH | 56 |
- | 58 | 5A | 5C | 5E |
- | 60 SSYM | 62 ENDM | 64 SO | 66 |
- | 68 | 6A | 6C ALIAS | 6E |
- | 70 | 72 | 74 | 76 |
- | 78 | 7A | 7C | 7E |
- | 80 LSYM | 82 BINCL | 84 SOL | 86 |
- | 88 | 8A | 8C | 8E |
- | 90 | 92 | 94 | 96 |
- | 98 | 9A | 9C | 9E |
- | A0 PSYM | A2 EINCL | A4 ENTRY | A6 |
- | A8 | AA | AC | AE |
- | B0 | B2 | B4 | B6 |
- | B8 | BA | BC | BE |
- | C0 LBRAC | C2 EXCL | C4 SCOPE | C6 |
- | C8 | CA | CC | CE |
- | D0 PATCH | D2 | D4 | D6 |
- | D8 | DA | DC | DE |
- | E0 RBRAC | E2 BCOMM | E4 ECOMM | E6 |
- | E8 ECOML | EA WITH | EC | EE |
- | F0 | F2 | F4 | F6 |
- | F8 | FA | FC | FE LENG |
- +-----------------------------------------------+
- * 50 EHDECL is also MOD2.
- * 48 BSLINE is also BROWS.
- */
diff --git a/include/aout/stab_gnu.h b/include/aout/stab_gnu.h
deleted file mode 100644
index 60b5272c5..000000000
--- a/include/aout/stab_gnu.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/* gnu_stab.h Definitions for GNU extensions to STABS
-
- Copyright 2001, 2010 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-#ifndef __GNU_STAB__
-
-/* Indicate the GNU stab.h is in use. */
-
-#define __GNU_STAB__
-
-#define __define_stab(NAME, CODE, STRING) NAME=CODE,
-#define __define_stab_duplicate(NAME, CODE, STRING) NAME=CODE,
-
-enum __stab_debug_code
-{
-#include "aout/stab.def"
-LAST_UNUSED_STAB_CODE
-};
-
-#undef __define_stab
-
-/* Definitions of "desc" field for N_SO stabs in Solaris2. */
-
-#define N_SO_AS 1
-#define N_SO_C 2
-#define N_SO_ANSI_C 3
-#define N_SO_CC 4 /* C++ */
-#define N_SO_FORTRAN 5
-#define N_SO_PASCAL 6
-
-/* Solaris2: Floating point type values in basic types. */
-
-#define NF_NONE 0
-#define NF_SINGLE 1 /* IEEE 32-bit */
-#define NF_DOUBLE 2 /* IEEE 64-bit */
-#define NF_COMPLEX 3 /* Fortran complex */
-#define NF_COMPLEX16 4 /* Fortran double complex */
-#define NF_COMPLEX32 5 /* Fortran complex*16 */
-#define NF_LDOUBLE 6 /* Long double (whatever that is) */
-
-#endif /* __GNU_STAB_ */
diff --git a/include/aout/sun4.h b/include/aout/sun4.h
deleted file mode 100644
index 06f7584cf..000000000
--- a/include/aout/sun4.h
+++ /dev/null
@@ -1,239 +0,0 @@
-/* SPARC-specific values for a.out files
-
- Copyright 2001, 2009, 2010 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-/* Some systems, e.g., AIX, may have defined this in header files already
- included. */
-#undef TARGET_PAGE_SIZE
-#define TARGET_PAGE_SIZE 0x2000 /* 8K. aka NBPG in <sys/param.h> */
-/* Note that some SPARCs have 4K pages, some 8K, some others. */
-
-#define SEG_SIZE_SPARC TARGET_PAGE_SIZE
-#define SEG_SIZE_SUN3 0x20000 /* Resolution of r/w protection hw */
-
-#define TEXT_START_ADDR TARGET_PAGE_SIZE /* Location 0 is not accessible */
-#define N_HEADER_IN_TEXT(x) 1
-
-/* Non-default definitions of the accessor macros... */
-
-/* Segment size varies on Sun-3 versus Sun-4. */
-
-#define N_SEGSIZE(x) (N_MACHTYPE(x) == M_SPARC? SEG_SIZE_SPARC: \
- N_MACHTYPE(x) == M_68020? SEG_SIZE_SUN3: \
- /* Guess? */ TARGET_PAGE_SIZE)
-
-/* Virtual Address of text segment from the a.out file. For OMAGIC,
- (almost always "unlinked .o's" these days), should be zero.
- Sun added a kludge so that shared libraries linked ZMAGIC get
- an address of zero if a_entry (!!!) is lower than the otherwise
- expected text address. These kludges have gotta go!
- For linked files, should reflect reality if we know it. */
-
-#define N_SHARED_LIB(x) ((x).a_entry < TEXT_START_ADDR \
- && (x).a_text >= EXEC_BYTES_SIZE)
-
-/* This differs from the version in aout64.h (which we override by defining
- it here) only for NMAGIC (we return TEXT_START_ADDR+EXEC_BYTES_SIZE;
- they return 0). */
-
-#define N_TXTADDR(x) \
- (N_MAGIC(x)==OMAGIC? 0 \
- : (N_MAGIC(x) == ZMAGIC && (x).a_entry < TEXT_START_ADDR)? 0 \
- : TEXT_START_ADDR+EXEC_BYTES_SIZE)
-
-/* When a file is linked against a shared library on SunOS 4, the
- dynamic bit in the exec header is set, and the first symbol in the
- symbol table is __DYNAMIC. Its value is the address of the
- following structure. */
-
-struct external_sun4_dynamic
-{
- /* The version number of the structure. SunOS 4.1.x creates files
- with version number 3, which is what this structure is based on.
- According to gdb, version 2 is similar. I believe that version 2
- used a different type of procedure linkage table, and there may
- have been other differences. */
- bfd_byte ld_version[4];
- /* The virtual address of a 28 byte structure used in debugging.
- The contents are filled in at run time by ld.so. */
- bfd_byte ldd[4];
- /* The virtual address of another structure with information about
- how to relocate the executable at run time. */
- bfd_byte ld[4];
-};
-
-/* The size of the debugging structure pointed to by the debugger
- field of __DYNAMIC. */
-#define EXTERNAL_SUN4_DYNAMIC_DEBUGGER_SIZE (24)
-
-/* The structure pointed to by the linker field of __DYNAMIC. As far
- as I can tell, most of the addresses in this structure are offsets
- within the file, but some are actually virtual addresses. */
-
-struct internal_sun4_dynamic_link
-{
- /* Linked list of loaded objects. This is filled in at runtime by
- ld.so and probably by dlopen. */
- unsigned long ld_loaded;
-
- /* The address of the list of names of shared objects which must be
- included at runtime. Each entry in the list is 16 bytes: the 4
- byte address of the string naming the object (e.g., for -lc this
- is "c"); 4 bytes of flags--the high bit is whether to search for
- the object using the library path; the 2 byte major version
- number; the 2 byte minor version number; the 4 byte address of
- the next entry in the list (zero if this is the last entry). The
- version numbers seem to only be non-zero when doing library
- searching. */
- unsigned long ld_need;
-
- /* The address of the path to search for the shared objects which
- must be included. This points to a string in PATH format which
- is generated from the -L arguments to the linker. According to
- the man page, ld.so implicitly adds ${LD_LIBRARY_PATH} to the
- beginning of this string and /lib:/usr/lib:/usr/local/lib to the
- end. The string is terminated by a null byte. This field is
- zero if there is no additional path. */
- unsigned long ld_rules;
-
- /* The address of the global offset table. This appears to be a
- virtual address, not a file offset. The first entry in the
- global offset table seems to be the virtual address of the
- sun4_dynamic structure (the same value as the __DYNAMIC symbol).
- The global offset table is used for PIC code to hold the
- addresses of variables. A dynamically linked file which does not
- itself contain PIC code has a four byte global offset table. */
- unsigned long ld_got;
-
- /* The address of the procedure linkage table. This appears to be a
- virtual address, not a file offset.
-
- On a SPARC, the table is composed of 12 byte entries, each of
- which consists of three instructions. The first entry is
- sethi %hi(0),%g1
- jmp %g1
- nop
- These instructions are changed by ld.so into a jump directly into
- ld.so itself. Each subsequent entry is
- save %sp, -96, %sp
- call <address of first entry in procedure linkage table>
- <reloc_number | 0x01000000>
- The reloc_number is the number of the reloc to use to resolve
- this entry. The reloc will be a JMP_SLOT reloc against some
- symbol that is not defined in this object file but should be
- defined in a shared object (if it is not, ld.so will report a
- runtime error and exit). The constant 0x010000000 turns the
- reloc number into a sethi of %g0, which does nothing since %g0 is
- hardwired to zero.
-
- When one of these entries is executed, it winds up calling into
- ld.so. ld.so looks at the reloc number, available via the return
- address, to determine which entry this is. It then looks at the
- reloc and patches up the entry in the table into a sethi and jmp
- to the real address followed by a nop. This means that the reloc
- lookup only has to happen once, and it also means that the
- relocation only needs to be done if the function is actually
- called. The relocation is expensive because ld.so must look up
- the symbol by name.
-
- The size of the procedure linkage table is given by the ld_plt_sz
- field. */
- unsigned long ld_plt;
-
- /* The address of the relocs. These are in the same format as
- ordinary relocs. Symbol index numbers refer to the symbols
- pointed to by ld_stab. I think the only way to determine the
- number of relocs is to assume that all the bytes from ld_rel to
- ld_hash contain reloc entries. */
- unsigned long ld_rel;
-
- /* The address of a hash table of symbols. The hash table has
- roughly the same number of entries as there are dynamic symbols;
- I think the only way to get the exact size is to assume that
- every byte from ld_hash to ld_stab is devoted to the hash table.
-
- Each entry in the hash table is eight bytes. The first four
- bytes are a symbol index into the dynamic symbols. The second
- four bytes are the index of the next hash table entry in the
- bucket. The ld_buckets field gives the number of buckets, say B.
- The first B entries in the hash table each start a bucket which
- is chained through the second four bytes of each entry. A value
- of zero ends the chain.
-
- The hash function is simply
- h = 0;
- while (*string != '\0')
- h = (h << 1) + *string++;
- h &= 0x7fffffff;
-
- To look up a symbol, compute the hash value of the name. Take
- the modulos of hash value and the number of buckets. Start at
- that entry in the hash table. See if the symbol (from the first
- four bytes of the hash table entry) has the name you are looking
- for. If not, use the chain field (the second four bytes of the
- hash table entry) to move on to the next entry in this bucket.
- If the chain field is zero you have reached the end of the
- bucket, and the symbol is not in the hash table. */
- unsigned long ld_hash;
-
- /* The address of the symbol table. This is a list of
- external_nlist structures. The string indices are relative to
- the ld_symbols field. I think the only way to determine the
- number of symbols is to assume that all the bytes between ld_stab
- and ld_symbols are external_nlist structures. */
- unsigned long ld_stab;
-
- /* I don't know what this is for. It seems to always be zero. */
- unsigned long ld_stab_hash;
-
- /* The number of buckets in the hash table. */
- unsigned long ld_buckets;
-
- /* The address of the symbol string table. The first string in this
- string table need not be the empty string. */
- unsigned long ld_symbols;
-
- /* The size in bytes of the symbol string table. */
- unsigned long ld_symb_size;
-
- /* The size in bytes of the text segment. */
- unsigned long ld_text;
-
- /* The size in bytes of the procedure linkage table. */
- unsigned long ld_plt_sz;
-};
-
-/* The external form of the structure. */
-
-struct external_sun4_dynamic_link
-{
- bfd_byte ld_loaded[4];
- bfd_byte ld_need[4];
- bfd_byte ld_rules[4];
- bfd_byte ld_got[4];
- bfd_byte ld_plt[4];
- bfd_byte ld_rel[4];
- bfd_byte ld_hash[4];
- bfd_byte ld_stab[4];
- bfd_byte ld_stab_hash[4];
- bfd_byte ld_buckets[4];
- bfd_byte ld_symbols[4];
- bfd_byte ld_symb_size[4];
- bfd_byte ld_text[4];
- bfd_byte ld_plt_sz[4];
-};
diff --git a/include/bfdlink.h b/include/bfdlink.h
deleted file mode 100644
index 1ac073823..000000000
--- a/include/bfdlink.h
+++ /dev/null
@@ -1,842 +0,0 @@
-/* bfdlink.h -- header file for BFD link routines
- Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
- 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
- Free Software Foundation, Inc.
- Written by Steve Chamberlain and Ian Lance Taylor, Cygnus Support.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef BFDLINK_H
-#define BFDLINK_H
-
-/* Which symbols to strip during a link. */
-enum bfd_link_strip
-{
- strip_none, /* Don't strip any symbols. */
- strip_debugger, /* Strip debugging symbols. */
- strip_some, /* keep_hash is the list of symbols to keep. */
- strip_all /* Strip all symbols. */
-};
-
-/* Which local symbols to discard during a link. This is irrelevant
- if strip_all is used. */
-enum bfd_link_discard
-{
- discard_sec_merge, /* Discard local temporary symbols in SEC_MERGE
- sections. */
- discard_none, /* Don't discard any locals. */
- discard_l, /* Discard local temporary symbols. */
- discard_all /* Discard all locals. */
-};
-
-/* Describes the type of hash table entry structure being used.
- Different hash table structure have different fields and so
- support different linking features. */
-enum bfd_link_hash_table_type
- {
- bfd_link_generic_hash_table,
- bfd_link_elf_hash_table
- };
-
-/* These are the possible types of an entry in the BFD link hash
- table. */
-
-enum bfd_link_hash_type
-{
- bfd_link_hash_new, /* Symbol is new. */
- bfd_link_hash_undefined, /* Symbol seen before, but undefined. */
- bfd_link_hash_undefweak, /* Symbol is weak and undefined. */
- bfd_link_hash_defined, /* Symbol is defined. */
- bfd_link_hash_defweak, /* Symbol is weak and defined. */
- bfd_link_hash_common, /* Symbol is common. */
- bfd_link_hash_indirect, /* Symbol is an indirect link. */
- bfd_link_hash_warning /* Like indirect, but warn if referenced. */
-};
-
-enum bfd_link_common_skip_ar_symbols
-{
- bfd_link_common_skip_none,
- bfd_link_common_skip_text,
- bfd_link_common_skip_data,
- bfd_link_common_skip_all
-};
-
-struct bfd_link_hash_common_entry
- {
- unsigned int alignment_power; /* Alignment. */
- asection *section; /* Symbol section. */
- };
-
-/* The linking routines use a hash table which uses this structure for
- its elements. */
-
-struct bfd_link_hash_entry
-{
- /* Base hash table entry structure. */
- struct bfd_hash_entry root;
-
- /* Type of this entry. */
- ENUM_BITFIELD (bfd_link_hash_type) type : 8;
-
- unsigned int non_ir_ref : 1;
-
- /* A union of information depending upon the type. */
- union
- {
- /* Nothing is kept for bfd_hash_new. */
- /* bfd_link_hash_undefined, bfd_link_hash_undefweak. */
- struct
- {
- /* Undefined and common symbols are kept in a linked list through
- this field. This field is present in all of the union element
- so that we don't need to remove entries from the list when we
- change their type. Removing entries would either require the
- list to be doubly linked, which would waste more memory, or
- require a traversal. When an undefined or common symbol is
- created, it should be added to this list, the head of which is in
- the link hash table itself. As symbols are defined, they need
- not be removed from the list; anything which reads the list must
- doublecheck the symbol type.
-
- Weak symbols are not kept on this list.
-
- Defined and defweak symbols use this field as a reference marker.
- If the field is not NULL, or this structure is the tail of the
- undefined symbol list, the symbol has been referenced. If the
- symbol is undefined and becomes defined, this field will
- automatically be non-NULL since the symbol will have been on the
- undefined symbol list. */
- struct bfd_link_hash_entry *next;
- bfd *abfd; /* BFD symbol was found in. */
- } undef;
- /* bfd_link_hash_defined, bfd_link_hash_defweak. */
- struct
- {
- struct bfd_link_hash_entry *next;
- asection *section; /* Symbol section. */
- bfd_vma value; /* Symbol value. */
- } def;
- /* bfd_link_hash_indirect, bfd_link_hash_warning. */
- struct
- {
- struct bfd_link_hash_entry *next;
- struct bfd_link_hash_entry *link; /* Real symbol. */
- const char *warning; /* Warning (bfd_link_hash_warning only). */
- } i;
- /* bfd_link_hash_common. */
- struct
- {
- struct bfd_link_hash_entry *next;
- /* The linker needs to know three things about common
- symbols: the size, the alignment, and the section in
- which the symbol should be placed. We store the size
- here, and we allocate a small structure to hold the
- section and the alignment. The alignment is stored as a
- power of two. We don't store all the information
- directly because we don't want to increase the size of
- the union; this structure is a major space user in the
- linker. */
- struct bfd_link_hash_common_entry *p;
- bfd_size_type size; /* Common symbol size. */
- } c;
- } u;
-};
-
-/* This is the link hash table. It is a derived class of
- bfd_hash_table. */
-
-struct bfd_link_hash_table
-{
- /* The hash table itself. */
- struct bfd_hash_table table;
- /* A linked list of undefined and common symbols, linked through the
- next field in the bfd_link_hash_entry structure. */
- struct bfd_link_hash_entry *undefs;
- /* Entries are added to the tail of the undefs list. */
- struct bfd_link_hash_entry *undefs_tail;
- /* The type of the link hash table. */
- enum bfd_link_hash_table_type type;
-};
-
-/* Look up an entry in a link hash table. If FOLLOW is TRUE, this
- follows bfd_link_hash_indirect and bfd_link_hash_warning links to
- the real symbol. */
-extern struct bfd_link_hash_entry *bfd_link_hash_lookup
- (struct bfd_link_hash_table *, const char *, bfd_boolean create,
- bfd_boolean copy, bfd_boolean follow);
-
-/* Look up an entry in the main linker hash table if the symbol might
- be wrapped. This should only be used for references to an
- undefined symbol, not for definitions of a symbol. */
-
-extern struct bfd_link_hash_entry *bfd_wrapped_link_hash_lookup
- (bfd *, struct bfd_link_info *, const char *, bfd_boolean,
- bfd_boolean, bfd_boolean);
-
-/* Traverse a link hash table. */
-extern void bfd_link_hash_traverse
- (struct bfd_link_hash_table *,
- bfd_boolean (*) (struct bfd_link_hash_entry *, void *),
- void *);
-
-/* Add an entry to the undefs list. */
-extern void bfd_link_add_undef
- (struct bfd_link_hash_table *, struct bfd_link_hash_entry *);
-
-/* Remove symbols from the undefs list that don't belong there. */
-extern void bfd_link_repair_undef_list
- (struct bfd_link_hash_table *table);
-
-/* Read symbols and cache symbol pointer array in outsymbols. */
-extern bfd_boolean bfd_generic_link_read_symbols (bfd *);
-
-struct bfd_sym_chain
-{
- struct bfd_sym_chain *next;
- const char *name;
-};
-
-/* How to handle unresolved symbols.
- There are four possibilities which are enumerated below: */
-enum report_method
-{
- /* This is the initial value when then link_info structure is created.
- It allows the various stages of the linker to determine whether they
- allowed to set the value. */
- RM_NOT_YET_SET = 0,
- RM_IGNORE,
- RM_GENERATE_WARNING,
- RM_GENERATE_ERROR
-};
-
-typedef enum {with_flags, without_flags} flag_type;
-
-/* A section flag list. */
-struct flag_info_list
-{
- flag_type with;
- const char *name;
- bfd_boolean valid;
- struct flag_info_list *next;
-};
-
-/* Section flag info. */
-struct flag_info
-{
- flagword only_with_flags;
- flagword not_with_flags;
- struct flag_info_list *flag_list;
- bfd_boolean flags_initialized;
-};
-
-struct bfd_elf_dynamic_list;
-struct bfd_elf_version_tree;
-
-/* This structure holds all the information needed to communicate
- between BFD and the linker when doing a link. */
-
-struct bfd_link_info
-{
- /* TRUE if BFD should generate a shared object (or a pie). */
- unsigned int shared: 1;
-
- /* TRUE if generating an executable, position independent or not. */
- unsigned int executable : 1;
-
- /* TRUE if generating a position independent executable. */
- unsigned int pie: 1;
-
- /* TRUE if BFD should generate a relocatable object file. */
- unsigned int relocatable: 1;
-
- /* TRUE if BFD should pre-bind symbols in a shared object. */
- unsigned int symbolic: 1;
-
- /* TRUE if executable should not contain copy relocs.
- Setting this true may result in a non-sharable text segment. */
- unsigned int nocopyreloc: 1;
-
- /* TRUE if BFD should export all symbols in the dynamic symbol table
- of an executable, rather than only those used. */
- unsigned int export_dynamic: 1;
-
- /* TRUE if a default symbol version should be created and used for
- exported symbols. */
- unsigned int create_default_symver: 1;
-
- /* TRUE if unreferenced sections should be removed. */
- unsigned int gc_sections: 1;
-
- /* TRUE if every symbol should be reported back via the notice
- callback. */
- unsigned int notice_all: 1;
-
- /* TRUE if we are loading LTO outputs. */
- unsigned int loading_lto_outputs: 1;
-
- /* TRUE if global symbols in discarded sections should be stripped. */
- unsigned int strip_discarded: 1;
-
- /* TRUE if all data symbols should be dynamic. */
- unsigned int dynamic_data: 1;
-
- /* Which symbols to strip. */
- ENUM_BITFIELD (bfd_link_strip) strip : 2;
-
- /* Which local symbols to discard. */
- ENUM_BITFIELD (bfd_link_discard) discard : 2;
-
- /* Criteria for skipping symbols when determining
- whether to include an object from an archive. */
- ENUM_BITFIELD (bfd_link_common_skip_ar_symbols) common_skip_ar_symbols : 2;
-
- /* What to do with unresolved symbols in an object file.
- When producing executables the default is GENERATE_ERROR.
- When producing shared libraries the default is IGNORE. The
- assumption with shared libraries is that the reference will be
- resolved at load/execution time. */
- ENUM_BITFIELD (report_method) unresolved_syms_in_objects : 2;
-
- /* What to do with unresolved symbols in a shared library.
- The same defaults apply. */
- ENUM_BITFIELD (report_method) unresolved_syms_in_shared_libs : 2;
-
- /* TRUE if shared objects should be linked directly, not shared. */
- unsigned int static_link: 1;
-
- /* TRUE if symbols should be retained in memory, FALSE if they
- should be freed and reread. */
- unsigned int keep_memory: 1;
-
- /* TRUE if BFD should generate relocation information in the final
- executable. */
- unsigned int emitrelocations: 1;
-
- /* TRUE if PT_GNU_RELRO segment should be created. */
- unsigned int relro: 1;
-
- /* TRUE if .eh_frame_hdr section and PT_GNU_EH_FRAME ELF segment
- should be created. */
- unsigned int eh_frame_hdr: 1;
-
- /* TRUE if we should warn when adding a DT_TEXTREL to a shared object. */
- unsigned int warn_shared_textrel: 1;
-
- /* TRUE if we should error when adding a DT_TEXTREL. */
- unsigned int error_textrel: 1;
-
- /* TRUE if .hash section should be created. */
- unsigned int emit_hash: 1;
-
- /* TRUE if .gnu.hash section should be created. */
- unsigned int emit_gnu_hash: 1;
-
- /* If TRUE reduce memory overheads, at the expense of speed. This will
- cause map file generation to use an O(N^2) algorithm and disable
- caching ELF symbol buffer. */
- unsigned int reduce_memory_overheads: 1;
-
- /* TRUE if the output file should be in a traditional format. This
- is equivalent to the setting of the BFD_TRADITIONAL_FORMAT flag
- on the output file, but may be checked when reading the input
- files. */
- unsigned int traditional_format: 1;
-
- /* TRUE if non-PLT relocs should be merged into one reloc section
- and sorted so that relocs against the same symbol come together. */
- unsigned int combreloc: 1;
-
- /* TRUE if a default symbol version should be created and used for
- imported symbols. */
- unsigned int default_imported_symver: 1;
-
- /* TRUE if the new ELF dynamic tags are enabled. */
- unsigned int new_dtags: 1;
-
- /* FALSE if .eh_frame unwind info should be generated for PLT and other
- linker created sections, TRUE if it should be omitted. */
- unsigned int no_ld_generated_unwind_info: 1;
-
- /* TRUE if BFD should generate a "task linked" object file,
- similar to relocatable but also with globals converted to
- statics. */
- unsigned int task_link: 1;
-
- /* TRUE if ok to have multiple definition. */
- unsigned int allow_multiple_definition: 1;
-
- /* TRUE if ok to have version with no definition. */
- unsigned int allow_undefined_version: 1;
-
- /* TRUE if some symbols have to be dynamic, controlled by
- --dynamic-list command line options. */
- unsigned int dynamic: 1;
-
- /* TRUE if PT_GNU_STACK segment should be created with PF_R|PF_W|PF_X
- flags. */
- unsigned int execstack: 1;
-
- /* TRUE if PT_GNU_STACK segment should be created with PF_R|PF_W
- flags. */
- unsigned int noexecstack: 1;
-
- /* TRUE if we want to produced optimized output files. This might
- need much more time and therefore must be explicitly selected. */
- unsigned int optimize: 1;
-
- /* TRUE if user should be informed of removed unreferenced sections. */
- unsigned int print_gc_sections: 1;
-
- /* TRUE if we should warn alternate ELF machine code. */
- unsigned int warn_alternate_em: 1;
-
- /* TRUE if the linker script contained an explicit PHDRS command. */
- unsigned int user_phdrs: 1;
-
- /* Char that may appear as the first char of a symbol, but should be
- skipped (like symbol_leading_char) when looking up symbols in
- wrap_hash. Used by PowerPC Linux for 'dot' symbols. */
- char wrap_char;
-
- /* Separator between archive and filename in linker script filespecs. */
- char path_separator;
-
- /* Default stack size. Zero means default (often zero itself), -1
- means explicitly zero-sized. */
- bfd_signed_vma stacksize;
-
- /* Enable or disable target specific optimizations.
-
- Not all targets have optimizations to enable.
-
- Normally these optimizations are disabled by default but some targets
- prefer to enable them by default. So this field is a tri-state variable.
- The values are:
-
- zero: Enable the optimizations (either from --relax being specified on
- the command line or the backend's before_allocation emulation function.
-
- positive: The user has requested that these optimizations be disabled.
- (Via the --no-relax command line option).
-
- negative: The optimizations are disabled. (Set when initializing the
- args_type structure in ldmain.c:main. */
- signed int disable_target_specific_optimizations;
-
- /* Function callbacks. */
- const struct bfd_link_callbacks *callbacks;
-
- /* Hash table handled by BFD. */
- struct bfd_link_hash_table *hash;
-
- /* Hash table of symbols to keep. This is NULL unless strip is
- strip_some. */
- struct bfd_hash_table *keep_hash;
-
- /* Hash table of symbols to report back via the notice callback. If
- this is NULL, and notice_all is FALSE, then no symbols are
- reported back. */
- struct bfd_hash_table *notice_hash;
-
- /* Hash table of symbols which are being wrapped (the --wrap linker
- option). If this is NULL, no symbols are being wrapped. */
- struct bfd_hash_table *wrap_hash;
-
- /* Hash table of symbols which may be left unresolved during
- a link. If this is NULL, no symbols can be left unresolved. */
- struct bfd_hash_table *ignore_hash;
-
- /* The output BFD. */
- bfd *output_bfd;
-
- /* The list of input BFD's involved in the link. These are chained
- together via the link_next field. */
- bfd *input_bfds;
- bfd **input_bfds_tail;
-
- /* If a symbol should be created for each input BFD, this is section
- where those symbols should be placed. It must be a section in
- the output BFD. It may be NULL, in which case no such symbols
- will be created. This is to support CREATE_OBJECT_SYMBOLS in the
- linker command language. */
- asection *create_object_symbols_section;
-
- /* List of global symbol names that are starting points for marking
- sections against garbage collection. */
- struct bfd_sym_chain *gc_sym_list;
-
- /* If a base output file is wanted, then this points to it */
- void *base_file;
-
- /* The function to call when the executable or shared object is
- loaded. */
- const char *init_function;
-
- /* The function to call when the executable or shared object is
- unloaded. */
- const char *fini_function;
-
- /* Number of relaxation passes. Usually only one relaxation pass
- is needed. But a backend can have as many relaxation passes as
- necessary. During bfd_relax_section call, it is set to the
- current pass, starting from 0. */
- int relax_pass;
-
- /* Number of relaxation trips. This number is incremented every
- time the relaxation pass is restarted due to a previous
- relaxation returning true in *AGAIN. */
- int relax_trip;
-
- /* Non-zero if auto-import thunks for DATA items in pei386 DLLs
- should be generated/linked against. Set to 1 if this feature
- is explicitly requested by the user, -1 if enabled by default. */
- int pei386_auto_import;
-
- /* Non-zero if runtime relocs for DATA items with non-zero addends
- in pei386 DLLs should be generated. Set to 1 if this feature
- is explicitly requested by the user, -1 if enabled by default. */
- int pei386_runtime_pseudo_reloc;
-
- /* How many spare .dynamic DT_NULL entries should be added? */
- unsigned int spare_dynamic_tags;
-
- /* May be used to set DT_FLAGS for ELF. */
- bfd_vma flags;
-
- /* May be used to set DT_FLAGS_1 for ELF. */
- bfd_vma flags_1;
-
- /* Start and end of RELRO region. */
- bfd_vma relro_start, relro_end;
-
- /* List of symbols should be dynamic. */
- struct bfd_elf_dynamic_list *dynamic_list;
-
- /* The version information. */
- struct bfd_elf_version_tree *version_info;
-};
-
-/* This structures holds a set of callback functions. These are called
- by the BFD linker routines. Except for the info functions, the first
- argument to each callback function is the bfd_link_info structure
- being used and each function returns a boolean value. If the
- function returns FALSE, then the BFD function which called it should
- return with a failure indication. */
-
-struct bfd_link_callbacks
-{
- /* A function which is called when an object is added from an
- archive. ABFD is the archive element being added. NAME is the
- name of the symbol which caused the archive element to be pulled
- in. This function may set *SUBSBFD to point to an alternative
- BFD from which symbols should in fact be added in place of the
- original BFD's symbols. */
- bfd_boolean (*add_archive_element)
- (struct bfd_link_info *, bfd *abfd, const char *name, bfd **subsbfd);
- /* A function which is called when a symbol is found with multiple
- definitions. H is the symbol which is defined multiple times.
- NBFD is the new BFD, NSEC is the new section, and NVAL is the new
- value. NSEC may be bfd_com_section or bfd_ind_section. */
- bfd_boolean (*multiple_definition)
- (struct bfd_link_info *, struct bfd_link_hash_entry *h,
- bfd *nbfd, asection *nsec, bfd_vma nval);
- /* A function which is called when a common symbol is defined
- multiple times. H is the symbol appearing multiple times.
- NBFD is the BFD of the new symbol. NTYPE is the type of the new
- symbol, one of bfd_link_hash_defined, bfd_link_hash_common, or
- bfd_link_hash_indirect. If NTYPE is bfd_link_hash_common, NSIZE
- is the size of the new symbol. */
- bfd_boolean (*multiple_common)
- (struct bfd_link_info *, struct bfd_link_hash_entry *h,
- bfd *nbfd, enum bfd_link_hash_type ntype, bfd_vma nsize);
- /* A function which is called to add a symbol to a set. ENTRY is
- the link hash table entry for the set itself (e.g.,
- __CTOR_LIST__). RELOC is the relocation to use for an entry in
- the set when generating a relocatable file, and is also used to
- get the size of the entry when generating an executable file.
- ABFD, SEC and VALUE identify the value to add to the set. */
- bfd_boolean (*add_to_set)
- (struct bfd_link_info *, struct bfd_link_hash_entry *entry,
- bfd_reloc_code_real_type reloc, bfd *abfd, asection *sec, bfd_vma value);
- /* A function which is called when the name of a g++ constructor or
- destructor is found. This is only called by some object file
- formats. CONSTRUCTOR is TRUE for a constructor, FALSE for a
- destructor. This will use BFD_RELOC_CTOR when generating a
- relocatable file. NAME is the name of the symbol found. ABFD,
- SECTION and VALUE are the value of the symbol. */
- bfd_boolean (*constructor)
- (struct bfd_link_info *, bfd_boolean constructor, const char *name,
- bfd *abfd, asection *sec, bfd_vma value);
- /* A function which is called to issue a linker warning. For
- example, this is called when there is a reference to a warning
- symbol. WARNING is the warning to be issued. SYMBOL is the name
- of the symbol which triggered the warning; it may be NULL if
- there is none. ABFD, SECTION and ADDRESS identify the location
- which trigerred the warning; either ABFD or SECTION or both may
- be NULL if the location is not known. */
- bfd_boolean (*warning)
- (struct bfd_link_info *, const char *warning, const char *symbol,
- bfd *abfd, asection *section, bfd_vma address);
- /* A function which is called when a relocation is attempted against
- an undefined symbol. NAME is the symbol which is undefined.
- ABFD, SECTION and ADDRESS identify the location from which the
- reference is made. IS_FATAL indicates whether an undefined symbol is
- a fatal error or not. In some cases SECTION may be NULL. */
- bfd_boolean (*undefined_symbol)
- (struct bfd_link_info *, const char *name, bfd *abfd,
- asection *section, bfd_vma address, bfd_boolean is_fatal);
- /* A function which is called when a reloc overflow occurs. ENTRY is
- the link hash table entry for the symbol the reloc is against.
- NAME is the name of the local symbol or section the reloc is
- against, RELOC_NAME is the name of the relocation, and ADDEND is
- any addend that is used. ABFD, SECTION and ADDRESS identify the
- location at which the overflow occurs; if this is the result of a
- bfd_section_reloc_link_order or bfd_symbol_reloc_link_order, then
- ABFD will be NULL. */
- bfd_boolean (*reloc_overflow)
- (struct bfd_link_info *, struct bfd_link_hash_entry *entry,
- const char *name, const char *reloc_name, bfd_vma addend,
- bfd *abfd, asection *section, bfd_vma address);
- /* A function which is called when a dangerous reloc is performed.
- MESSAGE is an appropriate message.
- ABFD, SECTION and ADDRESS identify the location at which the
- problem occurred; if this is the result of a
- bfd_section_reloc_link_order or bfd_symbol_reloc_link_order, then
- ABFD will be NULL. */
- bfd_boolean (*reloc_dangerous)
- (struct bfd_link_info *, const char *message,
- bfd *abfd, asection *section, bfd_vma address);
- /* A function which is called when a reloc is found to be attached
- to a symbol which is not being written out. NAME is the name of
- the symbol. ABFD, SECTION and ADDRESS identify the location of
- the reloc; if this is the result of a
- bfd_section_reloc_link_order or bfd_symbol_reloc_link_order, then
- ABFD will be NULL. */
- bfd_boolean (*unattached_reloc)
- (struct bfd_link_info *, const char *name,
- bfd *abfd, asection *section, bfd_vma address);
- /* A function which is called when a symbol in notice_hash is
- defined or referenced. H is the symbol. ABFD, SECTION and
- ADDRESS are the (new) value of the symbol. If SECTION is
- bfd_und_section, this is a reference. FLAGS are the symbol
- BSF_* flags. STRING is the name of the symbol to indirect to if
- the sym is indirect, or the warning string if a warning sym. */
- bfd_boolean (*notice)
- (struct bfd_link_info *, struct bfd_link_hash_entry *h,
- bfd *abfd, asection *section, bfd_vma address, flagword flags,
- const char *string);
- /* Error or warning link info message. */
- void (*einfo)
- (const char *fmt, ...);
- /* General link info message. */
- void (*info)
- (const char *fmt, ...);
- /* Message to be printed in linker map file. */
- void (*minfo)
- (const char *fmt, ...);
- /* This callback provides a chance for users of the BFD library to
- override its decision about whether to place two adjacent sections
- into the same segment. */
- bfd_boolean (*override_segment_assignment)
- (struct bfd_link_info *, bfd * abfd,
- asection * current_section, asection * previous_section,
- bfd_boolean new_segment);
-};
-
-/* The linker builds link_order structures which tell the code how to
- include input data in the output file. */
-
-/* These are the types of link_order structures. */
-
-enum bfd_link_order_type
-{
- bfd_undefined_link_order, /* Undefined. */
- bfd_indirect_link_order, /* Built from a section. */
- bfd_data_link_order, /* Set to explicit data. */
- bfd_section_reloc_link_order, /* Relocate against a section. */
- bfd_symbol_reloc_link_order /* Relocate against a symbol. */
-};
-
-/* This is the link_order structure itself. These form a chain
- attached to the output section whose contents they are describing. */
-
-struct bfd_link_order
-{
- /* Next link_order in chain. */
- struct bfd_link_order *next;
- /* Type of link_order. */
- enum bfd_link_order_type type;
- /* Offset within output section. */
- bfd_vma offset;
- /* Size within output section. */
- bfd_size_type size;
- /* Type specific information. */
- union
- {
- struct
- {
- /* Section to include. If this is used, then
- section->output_section must be the section the
- link_order is attached to, section->output_offset must
- equal the link_order offset field, and section->size
- must equal the link_order size field. Maybe these
- restrictions should be relaxed someday. */
- asection *section;
- } indirect;
- struct
- {
- /* Size of contents, or zero when contents should be filled by
- the architecture-dependent fill function.
- A non-zero value allows filling of the output section
- with an arbitrary repeated pattern. */
- unsigned int size;
- /* Data to put into file. */
- bfd_byte *contents;
- } data;
- struct
- {
- /* Description of reloc to generate. Used for
- bfd_section_reloc_link_order and
- bfd_symbol_reloc_link_order. */
- struct bfd_link_order_reloc *p;
- } reloc;
- } u;
-};
-
-/* A linker order of type bfd_section_reloc_link_order or
- bfd_symbol_reloc_link_order means to create a reloc against a
- section or symbol, respectively. This is used to implement -Ur to
- generate relocs for the constructor tables. The
- bfd_link_order_reloc structure describes the reloc that BFD should
- create. It is similar to a arelent, but I didn't use arelent
- because the linker does not know anything about most symbols, and
- any asymbol structure it creates will be partially meaningless.
- This information could logically be in the bfd_link_order struct,
- but I didn't want to waste the space since these types of relocs
- are relatively rare. */
-
-struct bfd_link_order_reloc
-{
- /* Reloc type. */
- bfd_reloc_code_real_type reloc;
-
- union
- {
- /* For type bfd_section_reloc_link_order, this is the section
- the reloc should be against. This must be a section in the
- output BFD, not any of the input BFDs. */
- asection *section;
- /* For type bfd_symbol_reloc_link_order, this is the name of the
- symbol the reloc should be against. */
- const char *name;
- } u;
-
- /* Addend to use. The object file should contain zero. The BFD
- backend is responsible for filling in the contents of the object
- file correctly. For some object file formats (e.g., COFF) the
- addend must be stored into in the object file, and for some
- (e.g., SPARC a.out) it is kept in the reloc. */
- bfd_vma addend;
-};
-
-/* Allocate a new link_order for a section. */
-extern struct bfd_link_order *bfd_new_link_order (bfd *, asection *);
-
-/* These structures are used to describe version information for the
- ELF linker. These structures could be manipulated entirely inside
- BFD, but it would be a pain. Instead, the regular linker sets up
- these structures, and then passes them into BFD. */
-
-/* Glob pattern for a version. */
-
-struct bfd_elf_version_expr
-{
- /* Next glob pattern for this version. */
- struct bfd_elf_version_expr *next;
- /* Glob pattern. */
- const char *pattern;
- /* Set if pattern is not a glob. */
- unsigned int literal : 1;
- /* Defined by ".symver". */
- unsigned int symver : 1;
- /* Defined by version script. */
- unsigned int script : 1;
- /* Pattern type. */
-#define BFD_ELF_VERSION_C_TYPE 1
-#define BFD_ELF_VERSION_CXX_TYPE 2
-#define BFD_ELF_VERSION_JAVA_TYPE 4
- unsigned int mask : 3;
-};
-
-struct bfd_elf_version_expr_head
-{
- /* List of all patterns, both wildcards and non-wildcards. */
- struct bfd_elf_version_expr *list;
- /* Hash table for non-wildcards. */
- void *htab;
- /* Remaining patterns. */
- struct bfd_elf_version_expr *remaining;
- /* What kind of pattern types are present in list (bitmask). */
- unsigned int mask;
-};
-
-/* Version dependencies. */
-
-struct bfd_elf_version_deps
-{
- /* Next dependency for this version. */
- struct bfd_elf_version_deps *next;
- /* The version which this version depends upon. */
- struct bfd_elf_version_tree *version_needed;
-};
-
-/* A node in the version tree. */
-
-struct bfd_elf_version_tree
-{
- /* Next version. */
- struct bfd_elf_version_tree *next;
- /* Name of this version. */
- const char *name;
- /* Version number. */
- unsigned int vernum;
- /* Regular expressions for global symbols in this version. */
- struct bfd_elf_version_expr_head globals;
- /* Regular expressions for local symbols in this version. */
- struct bfd_elf_version_expr_head locals;
- /* List of versions which this version depends upon. */
- struct bfd_elf_version_deps *deps;
- /* Index of the version name. This is used within BFD. */
- unsigned int name_indx;
- /* Whether this version tree was used. This is used within BFD. */
- int used;
- /* Matching hook. */
- struct bfd_elf_version_expr *(*match)
- (struct bfd_elf_version_expr_head *head,
- struct bfd_elf_version_expr *prev, const char *sym);
-};
-
-struct bfd_elf_dynamic_list
-{
- struct bfd_elf_version_expr_head head;
- struct bfd_elf_version_expr *(*match)
- (struct bfd_elf_version_expr_head *head,
- struct bfd_elf_version_expr *prev, const char *sym);
-};
-
-#endif
diff --git a/include/binary-io.h b/include/binary-io.h
deleted file mode 100644
index 2984271f7..000000000
--- a/include/binary-io.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/* Binary mode I/O.
- Copyright (C) 2001, 2003, 2005, 2008 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 3 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, see <http://www.gnu.org/licenses/>. */
-
-#ifndef _BINARY_H
-#define _BINARY_H
-
-/* Include this header after <fcntl.h> and <stdio.h>, because
- systems that distinguish between text and binary I/O usually
- define O_BINARY in <fcntl.h>, and the MSVC7 <stdio.h> doesn't
- like to be included after '#define fileno ...'
-
- We don't include <fcntl.h> here because not all systems have
- that header. */
-
-#if !defined O_BINARY && defined _O_BINARY
- /* For MSC-compatible compilers. */
-# define O_BINARY _O_BINARY
-# define O_TEXT _O_TEXT
-#endif
-#ifdef __BEOS__
- /* BeOS 5 has O_BINARY and O_TEXT, but they have no effect. */
-# undef O_BINARY
-# undef O_TEXT
-#endif
-#if O_BINARY
-# if defined __EMX__ || defined __DJGPP__ || defined __CYGWIN__
-# include <io.h> /* declares setmode() */
-# else
-# define setmode _setmode
-# undef fileno
-# define fileno _fileno
-# endif
-# ifdef __DJGPP__
-# include <unistd.h> /* declares isatty() */
-# /* Avoid putting stdin/stdout in binary mode if it is connected to the
-# console, because that would make it impossible for the user to
-# interrupt the program through Ctrl-C or Ctrl-Break. */
-# define SET_BINARY(fd) (!isatty (fd) ? (setmode (fd, O_BINARY), 0) : 0)
-# else
-# define SET_BINARY(fd) setmode (fd, O_BINARY)
-# endif
-#else
- /* On reasonable systems, binary I/O is the default. */
-# undef O_BINARY
-# define O_BINARY 0
-# define SET_BINARY(fd) /* nothing */
-#endif
-
-#endif /* _BINARY_H */
diff --git a/include/bout.h b/include/bout.h
deleted file mode 100644
index 4a302283c..000000000
--- a/include/bout.h
+++ /dev/null
@@ -1,192 +0,0 @@
-/* This file is a modified version of 'a.out.h'. It is to be used in all
- GNU tools modified to support the i80960 (or tools that operate on
- object files created by such tools).
-
- Copyright 2001, 2010 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-/* All i80960 development is done in a CROSS-DEVELOPMENT environment. I.e.,
- object code is generated on, and executed under the direction of a symbolic
- debugger running on, a host system. We do not want to be subject to the
- vagaries of which host it is or whether it supports COFF or a.out format,
- or anything else. We DO want to:
-
- o always generate the same format object files, regardless of host.
-
- o have an 'a.out' header that we can modify for our own purposes
- (the 80960 is typically an embedded processor and may require
- enhanced linker support that the normal a.out.h header can't
- accommodate).
-
- As for byte-ordering, the following rules apply:
-
- o Text and data that is actually downloaded to the target is always
- in i80960 (little-endian) order.
-
- o All other numbers (in the header, symbols, relocation directives)
- are in host byte-order: object files CANNOT be lifted from a
- little-end host and used on a big-endian (or vice versa) without
- modification.
- ==> THIS IS NO LONGER TRUE USING BFD. WE CAN GENERATE ANY BYTE ORDER
- FOR THE HEADER, AND READ ANY BYTE ORDER. PREFERENCE WOULD BE TO
- USE LITTLE-ENDIAN BYTE ORDER THROUGHOUT, REGARDLESS OF HOST. <==
-
- o The downloader ('comm960') takes care to generate a pseudo-header
- with correct (i80960) byte-ordering before shipping text and data
- off to the NINDY monitor in the target systems. Symbols and
- relocation info are never sent to the target. */
-
-#define BMAGIC 0415
-/* We don't accept the following (see N_BADMAG macro).
- They're just here so GNU code will compile. */
-#define OMAGIC 0407 /* old impure format */
-#define NMAGIC 0410 /* read-only text */
-#define ZMAGIC 0413 /* demand load format */
-
-/* FILE HEADER
- All 'lengths' are given as a number of bytes.
- All 'alignments' are for relinkable files only; an alignment of
- 'n' indicates the corresponding segment must begin at an
- address that is a multiple of (2**n). */
-struct external_exec
- {
- /* Standard stuff */
- unsigned char e_info[4]; /* Identifies this as a b.out file */
- unsigned char e_text[4]; /* Length of text */
- unsigned char e_data[4]; /* Length of data */
- unsigned char e_bss[4]; /* Length of uninitialized data area */
- unsigned char e_syms[4]; /* Length of symbol table */
- unsigned char e_entry[4]; /* Runtime start address */
- unsigned char e_trsize[4]; /* Length of text relocation info */
- unsigned char e_drsize[4]; /* Length of data relocation info */
-
- /* Added for i960 */
- unsigned char e_tload[4]; /* Text runtime load address */
- unsigned char e_dload[4]; /* Data runtime load address */
- unsigned char e_talign[1]; /* Alignment of text segment */
- unsigned char e_dalign[1]; /* Alignment of data segment */
- unsigned char e_balign[1]; /* Alignment of bss segment */
- unsigned char e_relaxable[1];/* Assembled with enough info to allow linker to relax */
- };
-
-#define EXEC_BYTES_SIZE (sizeof (struct external_exec))
-
-/* These macros use the a_xxx field names, since they operate on the exec
- structure after it's been byte-swapped and realigned on the host machine. */
-#define N_BADMAG(x) (((x).a_info)!=BMAGIC)
-#define N_TXTOFF(x) EXEC_BYTES_SIZE
-#define N_DATOFF(x) ( N_TXTOFF(x) + (x).a_text )
-#define N_TROFF(x) ( N_DATOFF(x) + (x).a_data )
-#define N_TRELOFF N_TROFF
-#define N_DROFF(x) ( N_TROFF(x) + (x).a_trsize )
-#define N_DRELOFF N_DROFF
-#define N_SYMOFF(x) ( N_DROFF(x) + (x).a_drsize )
-#define N_STROFF(x) ( N_SYMOFF(x) + (x).a_syms )
-#define N_DATADDR(x) ( (x).a_dload )
-
-/* Address of text segment in memory after it is loaded. */
-#if !defined (N_TXTADDR)
-#define N_TXTADDR(x) 0
-#endif
-
-/* A single entry in the symbol table. */
-struct nlist
- {
- union
- {
- char* n_name;
- struct nlist * n_next;
- long n_strx; /* Index into string table */
- } n_un;
-
- unsigned char n_type; /* See below */
- char n_other; /* Used in i80960 support -- see below */
- short n_desc;
- unsigned long n_value;
- };
-
-
-/* Legal values of n_type. */
-#define N_UNDF 0 /* Undefined symbol */
-#define N_ABS 2 /* Absolute symbol */
-#define N_TEXT 4 /* Text symbol */
-#define N_DATA 6 /* Data symbol */
-#define N_BSS 8 /* BSS symbol */
-#define N_FN 31 /* Filename symbol */
-
-#define N_EXT 1 /* External symbol (OR'd in with one of above) */
-#define N_TYPE 036 /* Mask for all the type bits */
-#define N_STAB 0340 /* Mask for all bits used for SDB entries */
-
-/* MEANING OF 'n_other'
-
- If non-zero, the 'n_other' fields indicates either a leaf procedure or
- a system procedure, as follows:
-
- 1 <= n_other <= 32 :
- The symbol is the entry point to a system procedure.
- 'n_value' is the address of the entry, as for any other
- procedure. The system procedure number (which can be used in
- a 'calls' instruction) is (n_other-1). These entries come from
- '.sysproc' directives.
-
- n_other == N_CALLNAME
- the symbol is the 'call' entry point to a leaf procedure.
- The *next* symbol in the symbol table must be the corresponding
- 'bal' entry point to the procedure (see following). These
- entries come from '.leafproc' directives in which two different
- symbols are specified (the first one is represented here).
-
-
- n_other == N_BALNAME
- the symbol is the 'bal' entry point to a leaf procedure.
- These entries result from '.leafproc' directives in which only
- one symbol is specified, or in which the same symbol is
- specified twice.
-
- Note that an N_CALLNAME entry *must* have a corresponding N_BALNAME entry,
- but not every N_BALNAME entry must have an N_CALLNAME entry. */
-#define N_CALLNAME ((char)-1)
-#define N_BALNAME ((char)-2)
-#define IS_CALLNAME(x) (N_CALLNAME == (x))
-#define IS_BALNAME(x) (N_BALNAME == (x))
-#define IS_OTHER(x) ((x)>0 && (x) <=32)
-
-#define b_out_relocation_info relocation_info
-struct relocation_info
- {
- int r_address; /* File address of item to be relocated. */
- unsigned
-#define r_index r_symbolnum
- r_symbolnum:24, /* Index of symbol on which relocation is based,
- if r_extern is set. Otherwise set to
- either N_TEXT, N_DATA, or N_BSS to
- indicate section on which relocation is
- based. */
- r_pcrel:1, /* 1 => relocate PC-relative; else absolute
- On i960, pc-relative implies 24-bit
- address, absolute implies 32-bit. */
- r_length:2, /* Number of bytes to relocate:
- 0 => 1 byte
- 1 => 2 bytes -- used for 13 bit pcrel
- 2 => 4 bytes. */
- r_extern:1,
- r_bsr:1, /* Something for the GNU NS32K assembler. */
- r_disp:1, /* Something for the GNU NS32K assembler. */
- r_callj:1, /* 1 if relocation target is an i960 'callj'. */
- r_relaxable:1; /* 1 if enough info is left to relax the data. */
-};
diff --git a/include/cgen/ChangeLog b/include/cgen/ChangeLog
deleted file mode 100644
index 7692d4e54..000000000
--- a/include/cgen/ChangeLog
+++ /dev/null
@@ -1,32 +0,0 @@
-2013-07-18 Andrew Neitsch <andrew@neitsch.ca>
-
- PR binutils/15728
- * basic-ops.h: (SUBWORDSIQI) Make declaration static.
- * (SUBWORDSIHI): Likewise.
- * (SUBWORDDIQI): Likewise.
- * (SUBWORDDIHI): Likewise.
- * (SUBWORDDISI): Likewise.
-
-2010-01-05 Doug Evans <dje@sebabeach.org>
-
- * basic-modes.h (MAKEDI): New macro.
-
-2009-10-23 Doug Evans <dje@sebabeach.org>
-
- * basic-modes.h: New file. Moved here from opcodes/cgen-types.h.
- * basic-ops.h: New file. Moved here from opcodes/cgen-ops.h.
- * bitset.h: New file. Moved here from ../opcode/cgen-bitset.h.
- Update license to GPL v3.
-
-Copyright (C) 2009-2012 Free Software Foundation, Inc.
-
-Copying and distribution of this file, with or without modification,
-are permitted in any medium without royalty provided the copyright
-notice and this notice are preserved.
-
-Local Variables:
-mode: change-log
-left-margin: 8
-fill-column: 74
-version-control: never
-End:
diff --git a/include/cgen/basic-modes.h b/include/cgen/basic-modes.h
deleted file mode 100644
index bd87f3acb..000000000
--- a/include/cgen/basic-modes.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/* Basic CGEN modes.
- Copyright 2005, 2007, 2009 Free Software Foundation, Inc.
- Contributed by Red Hat.
-
- This file is part of the GNU opcodes library.
-
- This library 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 3, or (at your option)
- any later version.
-
- It 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 library; see the file COPYING3. If not, write to the
- Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
- 02110-1301, USA. */
-
-#ifndef CGEN_BASIC_MODES_H
-#define CGEN_BASIC_MODES_H
-
-/* This file doesn't contain all modes,
- just the basic/portable ones.
- It also provides access to stdint.h (*1) so the includer doesn't have
- to deal with the portability issues.
- (*1): To the extent that bfd_stdint.h does for now. */
-
-/* IWBN to avoid unnecessary dependencies on bfd-anything. */
-#include "bfd_stdint.h"
-
-typedef int8_t QI;
-typedef uint8_t UQI;
-
-typedef int16_t HI;
-typedef uint16_t UHI;
-
-typedef int32_t SI;
-typedef uint32_t USI;
-
-typedef int64_t DI;
-typedef uint64_t UDI;
-
-typedef int INT;
-typedef unsigned int UINT;
-
-/* Cover macro to create a 64-bit integer. */
-#define MAKEDI(hi, lo) ((((DI) (SI) (hi)) << 32) | ((UDI) (USI) (lo)))
-
-#endif /* CGEN_BASIC_MODES_H */
diff --git a/include/cgen/basic-ops.h b/include/cgen/basic-ops.h
deleted file mode 100644
index 49883f495..000000000
--- a/include/cgen/basic-ops.h
+++ /dev/null
@@ -1,347 +0,0 @@
-/* Basic semantics ops support for CGEN.
- Copyright 2005-2013 Free Software Foundation, Inc.
- Contributed by Red Hat.
-
- This file is part of the GNU opcodes library.
-
- This library 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 3, or (at your option)
- any later version.
-
- It 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 library; see the file COPYING3. If not, write to the
- Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
- 02110-1301, USA. */
-
-#ifndef CGEN_BASIC_OPS_H
-#define CGEN_BASIC_OPS_H
-
-#include <assert.h>
-
-#if defined (__GNUC__) && ! defined (SEMOPS_DEFINE_INLINE)
-#define SEMOPS_DEFINE_INLINE
-#define SEMOPS_INLINE extern inline
-#else
-#define SEMOPS_INLINE
-#endif
-
-/* These don't really have a mode. */
-#define ANDIF(x, y) ((x) && (y))
-#define ORIF(x, y) ((x) || (y))
-
-#define SUBBI(x, y) ((x) - (y))
-#define ANDBI(x, y) ((x) & (y))
-#define ORBI(x, y) ((x) | (y))
-#define XORBI(x, y) ((x) ^ (y))
-#define NEGBI(x) (- (x))
-#define NOTBI(x) (! (BI) (x))
-#define INVBI(x) (~ (x))
-#define EQBI(x, y) ((BI) (x) == (BI) (y))
-#define NEBI(x, y) ((BI) (x) != (BI) (y))
-#define LTBI(x, y) ((BI) (x) < (BI) (y))
-#define LEBI(x, y) ((BI) (x) <= (BI) (y))
-#define GTBI(x, y) ((BI) (x) > (BI) (y))
-#define GEBI(x, y) ((BI) (x) >= (BI) (y))
-#define LTUBI(x, y) ((BI) (x) < (BI) (y))
-#define LEUBI(x, y) ((BI) (x) <= (BI) (y))
-#define GTUBI(x, y) ((BI) (x) > (BI) (y))
-#define GEUBI(x, y) ((BI) (x) >= (BI) (y))
-
-#define ADDQI(x, y) ((x) + (y))
-#define SUBQI(x, y) ((x) - (y))
-#define MULQI(x, y) ((x) * (y))
-#define DIVQI(x, y) ((QI) (x) / (QI) (y))
-#define UDIVQI(x, y) ((UQI) (x) / (UQI) (y))
-#define MODQI(x, y) ((QI) (x) % (QI) (y))
-#define UMODQI(x, y) ((UQI) (x) % (UQI) (y))
-#define SRAQI(x, y) ((QI) (x) >> (y))
-#define SRLQI(x, y) ((UQI) (x) >> (y))
-#define SLLQI(x, y) ((UQI) (x) << (y))
-extern QI RORQI (QI, int);
-extern QI ROLQI (QI, int);
-#define ANDQI(x, y) ((x) & (y))
-#define ORQI(x, y) ((x) | (y))
-#define XORQI(x, y) ((x) ^ (y))
-#define NEGQI(x) (- (x))
-#define NOTQI(x) (! (QI) (x))
-#define INVQI(x) (~ (x))
-#define ABSQI(x) ((x) < 0 ? -(x) : (x))
-#define EQQI(x, y) ((QI) (x) == (QI) (y))
-#define NEQI(x, y) ((QI) (x) != (QI) (y))
-#define LTQI(x, y) ((QI) (x) < (QI) (y))
-#define LEQI(x, y) ((QI) (x) <= (QI) (y))
-#define GTQI(x, y) ((QI) (x) > (QI) (y))
-#define GEQI(x, y) ((QI) (x) >= (QI) (y))
-#define LTUQI(x, y) ((UQI) (x) < (UQI) (y))
-#define LEUQI(x, y) ((UQI) (x) <= (UQI) (y))
-#define GTUQI(x, y) ((UQI) (x) > (UQI) (y))
-#define GEUQI(x, y) ((UQI) (x) >= (UQI) (y))
-
-#define ADDHI(x, y) ((x) + (y))
-#define SUBHI(x, y) ((x) - (y))
-#define MULHI(x, y) ((x) * (y))
-#define DIVHI(x, y) ((HI) (x) / (HI) (y))
-#define UDIVHI(x, y) ((UHI) (x) / (UHI) (y))
-#define MODHI(x, y) ((HI) (x) % (HI) (y))
-#define UMODHI(x, y) ((UHI) (x) % (UHI) (y))
-#define SRAHI(x, y) ((HI) (x) >> (y))
-#define SRLHI(x, y) ((UHI) (x) >> (y))
-#define SLLHI(x, y) ((UHI) (x) << (y))
-extern HI RORHI (HI, int);
-extern HI ROLHI (HI, int);
-#define ANDHI(x, y) ((x) & (y))
-#define ORHI(x, y) ((x) | (y))
-#define XORHI(x, y) ((x) ^ (y))
-#define NEGHI(x) (- (x))
-#define NOTHI(x) (! (HI) (x))
-#define INVHI(x) (~ (x))
-#define ABSHI(x) ((x) < 0 ? -(x) : (x))
-#define EQHI(x, y) ((HI) (x) == (HI) (y))
-#define NEHI(x, y) ((HI) (x) != (HI) (y))
-#define LTHI(x, y) ((HI) (x) < (HI) (y))
-#define LEHI(x, y) ((HI) (x) <= (HI) (y))
-#define GTHI(x, y) ((HI) (x) > (HI) (y))
-#define GEHI(x, y) ((HI) (x) >= (HI) (y))
-#define LTUHI(x, y) ((UHI) (x) < (UHI) (y))
-#define LEUHI(x, y) ((UHI) (x) <= (UHI) (y))
-#define GTUHI(x, y) ((UHI) (x) > (UHI) (y))
-#define GEUHI(x, y) ((UHI) (x) >= (UHI) (y))
-
-#define ADDSI(x, y) ((x) + (y))
-#define SUBSI(x, y) ((x) - (y))
-#define MULSI(x, y) ((x) * (y))
-#define DIVSI(x, y) ((SI) (x) / (SI) (y))
-#define UDIVSI(x, y) ((USI) (x) / (USI) (y))
-#define MODSI(x, y) ((SI) (x) % (SI) (y))
-#define UMODSI(x, y) ((USI) (x) % (USI) (y))
-#define SRASI(x, y) ((SI) (x) >> (y))
-#define SRLSI(x, y) ((USI) (x) >> (y))
-#define SLLSI(x, y) ((USI) (x) << (y))
-extern SI RORSI (SI, int);
-extern SI ROLSI (SI, int);
-#define ANDSI(x, y) ((x) & (y))
-#define ORSI(x, y) ((x) | (y))
-#define XORSI(x, y) ((x) ^ (y))
-#define NEGSI(x) (- (x))
-#define NOTSI(x) (! (SI) (x))
-#define INVSI(x) (~ (x))
-#define ABSSI(x) ((x) < 0 ? -(x) : (x))
-#define EQSI(x, y) ((SI) (x) == (SI) (y))
-#define NESI(x, y) ((SI) (x) != (SI) (y))
-#define LTSI(x, y) ((SI) (x) < (SI) (y))
-#define LESI(x, y) ((SI) (x) <= (SI) (y))
-#define GTSI(x, y) ((SI) (x) > (SI) (y))
-#define GESI(x, y) ((SI) (x) >= (SI) (y))
-#define LTUSI(x, y) ((USI) (x) < (USI) (y))
-#define LEUSI(x, y) ((USI) (x) <= (USI) (y))
-#define GTUSI(x, y) ((USI) (x) > (USI) (y))
-#define GEUSI(x, y) ((USI) (x) >= (USI) (y))
-
-#ifdef DI_FN_SUPPORT
-extern DI ADDDI (DI, DI);
-extern DI SUBDI (DI, DI);
-extern DI MULDI (DI, DI);
-extern DI DIVDI (DI, DI);
-extern DI UDIVDI (DI, DI);
-extern DI MODDI (DI, DI);
-extern DI UMODDI (DI, DI);
-extern DI SRADI (DI, int);
-extern UDI SRLDI (UDI, int);
-extern UDI SLLDI (UDI, int);
-extern DI RORDI (DI, int);
-extern DI ROLDI (DI, int);
-extern DI ANDDI (DI, DI);
-extern DI ORDI (DI, DI);
-extern DI XORDI (DI, DI);
-extern DI NEGDI (DI);
-extern int NOTDI (DI);
-extern DI INVDI (DI);
-extern int EQDI (DI, DI);
-extern int NEDI (DI, DI);
-extern int LTDI (DI, DI);
-extern int LEDI (DI, DI);
-extern int GTDI (DI, DI);
-extern int GEDI (DI, DI);
-extern int LTUDI (UDI, UDI);
-extern int LEUDI (UDI, UDI);
-extern int GTUDI (UDI, UDI);
-extern int GEUDI (UDI, UDI);
-#else /* ! DI_FN_SUPPORT */
-#define ADDDI(x, y) ((x) + (y))
-#define SUBDI(x, y) ((x) - (y))
-#define MULDI(x, y) ((x) * (y))
-#define DIVDI(x, y) ((DI) (x) / (DI) (y))
-#define UDIVDI(x, y) ((UDI) (x) / (UDI) (y))
-#define MODDI(x, y) ((DI) (x) % (DI) (y))
-#define UMODDI(x, y) ((UDI) (x) % (UDI) (y))
-#define SRADI(x, y) ((DI) (x) >> (y))
-#define SRLDI(x, y) ((UDI) (x) >> (y))
-#define SLLDI(x, y) ((UDI) (x) << (y))
-extern DI RORDI (DI, int);
-extern DI ROLDI (DI, int);
-#define ANDDI(x, y) ((x) & (y))
-#define ORDI(x, y) ((x) | (y))
-#define XORDI(x, y) ((x) ^ (y))
-#define NEGDI(x) (- (x))
-#define NOTDI(x) (! (DI) (x))
-#define INVDI(x) (~ (x))
-#define ABSDI(x) ((x) < 0 ? -(x) : (x))
-#define EQDI(x, y) ((DI) (x) == (DI) (y))
-#define NEDI(x, y) ((DI) (x) != (DI) (y))
-#define LTDI(x, y) ((DI) (x) < (DI) (y))
-#define LEDI(x, y) ((DI) (x) <= (DI) (y))
-#define GTDI(x, y) ((DI) (x) > (DI) (y))
-#define GEDI(x, y) ((DI) (x) >= (DI) (y))
-#define LTUDI(x, y) ((UDI) (x) < (UDI) (y))
-#define LEUDI(x, y) ((UDI) (x) <= (UDI) (y))
-#define GTUDI(x, y) ((UDI) (x) > (UDI) (y))
-#define GEUDI(x, y) ((UDI) (x) >= (UDI) (y))
-#endif /* DI_FN_SUPPORT */
-
-#define EXTBIQI(x) ((QI) (BI) (x))
-#define EXTBIHI(x) ((HI) (BI) (x))
-#define EXTBISI(x) ((SI) (BI) (x))
-#if defined (DI_FN_SUPPORT)
-extern DI EXTBIDI (BI);
-#else
-#define EXTBIDI(x) ((DI) (BI) (x))
-#endif
-#define EXTQIHI(x) ((HI) (QI) (x))
-#define EXTQISI(x) ((SI) (QI) (x))
-#if defined (DI_FN_SUPPORT)
-extern DI EXTQIDI (QI);
-#else
-#define EXTQIDI(x) ((DI) (QI) (x))
-#endif
-#define EXTHIHI(x) ((HI) (HI) (x))
-#define EXTHISI(x) ((SI) (HI) (x))
-#define EXTSISI(x) ((SI) (SI) (x))
-#if defined (DI_FN_SUPPORT)
-extern DI EXTHIDI (HI);
-#else
-#define EXTHIDI(x) ((DI) (HI) (x))
-#endif
-#if defined (DI_FN_SUPPORT)
-extern DI EXTSIDI (SI);
-#else
-#define EXTSIDI(x) ((DI) (SI) (x))
-#endif
-
-#define ZEXTBIQI(x) ((QI) (BI) (x))
-#define ZEXTBIHI(x) ((HI) (BI) (x))
-#define ZEXTBISI(x) ((SI) (BI) (x))
-#if defined (DI_FN_SUPPORT)
-extern DI ZEXTBIDI (BI);
-#else
-#define ZEXTBIDI(x) ((DI) (BI) (x))
-#endif
-#define ZEXTQIHI(x) ((HI) (UQI) (x))
-#define ZEXTQISI(x) ((SI) (UQI) (x))
-#if defined (DI_FN_SUPPORT)
-extern DI ZEXTQIDI (QI);
-#else
-#define ZEXTQIDI(x) ((DI) (UQI) (x))
-#endif
-#define ZEXTHISI(x) ((SI) (UHI) (x))
-#define ZEXTHIHI(x) ((HI) (UHI) (x))
-#define ZEXTSISI(x) ((SI) (USI) (x))
-#if defined (DI_FN_SUPPORT)
-extern DI ZEXTHIDI (HI);
-#else
-#define ZEXTHIDI(x) ((DI) (UHI) (x))
-#endif
-#if defined (DI_FN_SUPPORT)
-extern DI ZEXTSIDI (SI);
-#else
-#define ZEXTSIDI(x) ((DI) (USI) (x))
-#endif
-
-#define TRUNCQIBI(x) ((BI) (QI) (x))
-#define TRUNCHIBI(x) ((BI) (HI) (x))
-#define TRUNCHIQI(x) ((QI) (HI) (x))
-#define TRUNCSIBI(x) ((BI) (SI) (x))
-#define TRUNCSIQI(x) ((QI) (SI) (x))
-#define TRUNCSIHI(x) ((HI) (SI) (x))
-#define TRUNCSISI(x) ((SI) (SI) (x))
-#if defined (DI_FN_SUPPORT)
-extern BI TRUNCDIBI (DI);
-#else
-#define TRUNCDIBI(x) ((BI) (DI) (x))
-#endif
-#if defined (DI_FN_SUPPORT)
-extern QI TRUNCDIQI (DI);
-#else
-#define TRUNCDIQI(x) ((QI) (DI) (x))
-#endif
-#if defined (DI_FN_SUPPORT)
-extern HI TRUNCDIHI (DI);
-#else
-#define TRUNCDIHI(x) ((HI) (DI) (x))
-#endif
-#if defined (DI_FN_SUPPORT)
-extern SI TRUNCDISI (DI);
-#else
-#define TRUNCDISI(x) ((SI) (DI) (x))
-#endif
-
-/* Composing/decomposing the various types.
- Word ordering is endian-independent. Words are specified most to least
- significant and word number 0 is the most significant word.
- ??? May also wish an endian-dependent version. Later. */
-
-static QI SUBWORDSIQI (SI, int);
-static HI SUBWORDSIHI (SI, int);
-static QI SUBWORDDIQI (DI, int);
-static HI SUBWORDDIHI (DI, int);
-static SI SUBWORDDISI (DI, int);
-
-#ifdef SEMOPS_DEFINE_INLINE
-
-SEMOPS_INLINE QI
-SUBWORDSIQI (SI in, int byte)
-{
- assert (byte >= 0 && byte <= 3);
- return (UQI) (in >> (8 * (3 - byte))) & 0xFF;
-}
-
-SEMOPS_INLINE HI
-SUBWORDSIHI (SI in, int word)
-{
- if (word == 0)
- return (USI) in >> 16;
- else
- return in;
-}
-
-SEMOPS_INLINE QI
-SUBWORDDIQI (DI in, int byte)
-{
- assert (byte >= 0 && byte <= 7);
- return (UQI) (in >> (8 * (7 - byte))) & 0xFF;
-}
-
-SEMOPS_INLINE HI
-SUBWORDDIHI (DI in, int word)
-{
- assert (word >= 0 && word <= 3);
- return (UHI) (in >> (16 * (3 - word))) & 0xFFFF;
-}
-
-SEMOPS_INLINE SI
-SUBWORDDISI (DI in, int word)
-{
- if (word == 0)
- return (UDI) in >> 32;
- else
- return in;
-}
-
-#endif /* SUBWORD,JOIN */
-
-#endif /* CGEN_BASIC_OPS_H */
diff --git a/include/cgen/bitset.h b/include/cgen/bitset.h
deleted file mode 100644
index 7a6a99304..000000000
--- a/include/cgen/bitset.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/* Header file the type CGEN_BITSET.
- Copyright 2002, 2005, 2009 Free Software Foundation, Inc.
-
- This file is part of the GNU opcodes library.
-
- This library 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 3, or (at your option)
- any later version.
-
- It 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 library; see the file COPYING3. If not, write to the
- Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
- 02110-1301, USA. */
-
-#ifndef CGEN_BITSET_H
-#define CGEN_BITSET_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* A bitmask represented as a string.
- Each member of the set is represented as a bit
- in the string. Bytes are indexed from left to right in the string and
- bits from most significant to least within each byte.
-
- For example, the bit representing member number 6 is (set->bits[0] & 0x02).
-*/
-typedef struct cgen_bitset
-{
- unsigned length;
- char *bits;
-} CGEN_BITSET;
-
-extern CGEN_BITSET *cgen_bitset_create PARAMS ((unsigned));
-extern void cgen_bitset_init PARAMS ((CGEN_BITSET *, unsigned));
-extern void cgen_bitset_clear PARAMS ((CGEN_BITSET *));
-extern void cgen_bitset_add PARAMS ((CGEN_BITSET *, unsigned));
-extern void cgen_bitset_set PARAMS ((CGEN_BITSET *, unsigned));
-extern int cgen_bitset_compare PARAMS ((CGEN_BITSET *, CGEN_BITSET *));
-extern void cgen_bitset_union PARAMS ((CGEN_BITSET *, CGEN_BITSET *, CGEN_BITSET *));
-extern int cgen_bitset_intersect_p PARAMS ((CGEN_BITSET *, CGEN_BITSET *));
-extern int cgen_bitset_contains PARAMS ((CGEN_BITSET *, unsigned));
-extern CGEN_BITSET *cgen_bitset_copy PARAMS ((CGEN_BITSET *));
-
-#ifdef __cplusplus
-} // extern "C"
-#endif
-
-#endif
diff --git a/include/coff/ChangeLog b/include/coff/ChangeLog
deleted file mode 100644
index 2a9c0aba1..000000000
--- a/include/coff/ChangeLog
+++ /dev/null
@@ -1,373 +0,0 @@
-2013-07-10 Tristan Gingold <gingold@adacore.com>
-
- * rs6000.h (external_core_dumpx): New structure.
- (external_ld_info32): Ditto.
-
-2013-07-02 Tristan Gingold <gingold@adacore.com>
-
- * internal.h (C_STTLS, C_GTLS): Define.
- * xcoff.h (XMC_TL, XMC_TU, XMC_TE): Define.
-
-2013-02-04 Alan Modra <amodra@gmail.com>
-
- * ti.h (SWAP_OUT_RELOC_EXTRA): Define.
-
-2013-01-02 Martin Storsjo <martin@martin.st>
-
- * arm.h (ARMV7PEMAGIC): Define.
- (ARMBADMAG): Update.
-
-2011-06-02 Nick Clifton <nickc@redhat.com>
-
- * i860.h: Fix spelling mistake in comment.
-
-2011-05-04 Tristan Gingold <gingold@adacore.com>
-
- * rs6000.h (union external_auxent): Add x_ftype field.
- * rs6k64.h: (struct external_auxent): Remap x_file field.
-
-2011-05-04 Tristan Gingold <gingold@adacore.com>
-
- * rs6000.h (struct external_exceptab): New struct.
- (EXCEPTSZ): New macro.
- * rs6k64.h: (struct external_exceptab): New struct.
- (EXCEPTSZ): New macro.
-
-2011-05-03 Tristan Gingold <gingold@adacore.com>
-
- * rs6000.h (struct external_ldsym): Use E_SYMNMLEN instead of
- SYMNMLEN.
-
-2011-04-27 Tristan Gingold <gingold@adacore.com>
-
- * xcoff.h (F_FDPR_PROF, F_FDPR_OPTI, F_DSA, F_VARPG)
- (STYP_DWARF, SSUBTYP_DWINFO)
- (SSUBTYP_DWLINE, SSUBTYP_DWPBNMS, SSUBTYP_DWPBTYP)
- (SSUBTYP_DWARNGE, SSUBTYP_DWABREV, SSUBTYP_DWSTR)
- (SSUBTYP_DWRNGES, STYP_TDATA, STYP_TBSS, R_TLS, R_TLS_IE)
- (R_TLS_LD, R_TLS_LE, R_TLSM, R_TLSML, R_TOCU, R_TOCL, C_DWARF):
- New macros.
-
-2011-03-31 Tristan Gingold <gingold@adacore.com>
-
- * internal.h (C_NULL_VALUE): Define.
-
-2010-06-29 Alan Modra <amodra@gmail.com>
-
- * maxq.h: Delete file.
-
-2010-04-15 Nick Clifton <nickc@redhat.com>
-
- * alpha.h: Update copyright notice to use GPLv3.
- * apollo.h: Likewise.
- * arm.h: Likewise.
- * aux-coff.h: Likewise.
- * ecoff.h: Likewise.
- * external.h: Likewise.
- * go32exe.h: Likewise.
- * h8300.h: Likewise.
- * h8500.h: Likewise.
- * i386.h: Likewise.
- * i860.h: Likewise.
- * i960.h: Likewise.
- * ia64.h: Likewise.
- * internal.h: Likewise.
- * m68k.h: Likewise.
- * m88k.h: Likewise.
- * maxq.h: Likewise.
- * mcore.h: Likewise.
- * mips.h: Likewise.
- * mipspe.h: Likewise.
- * or32.h: Likewise.
- * pe.h: Likewise.
- * powerpc.h: Likewise.
- * rs6000.h: Likewise.
- * rs6k64.h: Likewise.
- * sh.h: Likewise.
- * sparc.h: Likewise.
- * ti.h: Likewise.
- * tic30.h: Likewise.
- * tic4x.h: Likewise.
- * tic54x.h: Likewise.
- * tic80.h: Likewise.
- * w65.h: Likewise.
- * we32k.h: Likewise.
- * x86_64.h: Likewise.
- * xcoff.h: Likewise.
- * z80.h: Likewise.
- * z8k.h: Likewise.
-
-2009-12-02 Jerker Bäck <jerker.back@gmail.com>
-
- PR binutils/11017
- * i386lh (COFF_PAGE_SIZE): Define.
- * x86_64.h (COFF_PAGE_SIZE): Define.
-
-2009-10-17 Arnold Metselaar <arnold.metselaar@planet.nl>
-
- * z80.h: Store alignment requirement in section header, to allow
- ld to preserve alignment. Some code was copied from ti.h.
-
-2009-09-05 Martin Thuresson <martin@mtme.org>
-
- * ti.h (GET_LNSZ_SIZE, PUT_LNSZ_SIZE): Updated name of class
- variable to in_class to match changes in function that use this
- macro.
-
-2009-08-10 Jan Kratochvil <jan.kratochvil@redhat.com>
-
- Fix references past allocated memory for i386-*-go32.
- * ti.h (COFF_ADJUST_FILEHDR_IN_POST, COFF_ADJUST_FILEHDR_OUT_POST):
- Reference F_TARGET_ID only when !COFF0_P.
-
-2009-08-10 Jan Kratochvil <jan.kratochvil@redhat.com>
-
- Stop using bfd_usrdata in libbfd.
- * go32exe.h (struct external_filehdr_go32_exe <stub>, FILHSZ): Replace
- STUBSIZE by GO32_STUBSIZE.
- (STUBSIZE): Move the definition ...
- * internal.h (GO32_STUBSIZE): ... here and rename it.
- (struct internal_filehdr <go32stub>, F_GO32STUB): New.
-
-2009-06-03 Ulrich Weigand <uweigand@de.ibm.com>
-
- * symconst.h (btLong64, btULong64, btLongLong64, btULongLong64,
- btAdr64, btInt64, btUInt64): New defines.
-
-2009-04-21 Kai Tietz <kai.tietz@onevision.com>
-
- * pe.h (pex64_runtime_function): New structure.
- (external_pex64_runtime_function): Likewise.
- (pex64_unwind_code): Likewise.
- (external_pex64_unwind_code): Likewise.
- (pex64_unwind_info): Likewise.
- (external_pex64_unwind_info): Likewise.
- (external_pex64_scope): Likewise.
- (pex64_scope): Likewise.
- (pex64_scope_entry): Likewise.
- (external_pex64_scope_entry): Likewise.
- (PEX64_IS_RUNTIME_FUNCTION_CHAINED): New macro.
- (PEX64_GET_UNWINDDATA_UNIFIED_RVA): Likewise.
- (PEX64_UNWCODE_CODE): Likewise.
- (PEX64_UNWCODE_INFO): Likewise.
- (UWOP_...): Add defines for unwind code.
- (UNW_FLAG_...): Add defined for unwind info flags.
- (PEX64_SCOPE_ENTRY_SIZE): New macro.
- (PEX64_UWI_VERSION): Likewise.
- (PEX64_UWI_FLAGS): Likewise.
- (PEX64_UWI_FRAMEREG): Likewise.
- (PEX64_UWI_FRAMEOFF): Likewise.
- (PEX64_UWI_SIZEOF_UWCODE_ARRAY): Likewise.
- (PEX64_OFFSET_TO_UNWIND_CODE): Likewise.
- (PEX64_OFFSET_TO_HANDLER_RVA): Likewise.
- (PEX64_OFFSET_TO_SCOPE_COUNT): Likewise.
- (PEX64_SCOPE_ENTRY): Likewise.
-
-2009-04-17 H.J. Lu <hongjiu.lu@intel.com>
-
- * pe.h (IMAGE_SUBSYSTEM_EFI_ROM): Renamed to ...
- (IMAGE_SUBSYSTEM_SAL_RUNTIME_DRIVER): This.
-
-2009-04-01 Richard Sandiford <r.sandiford@uk.ibm.com>
-
- * xcoff.h (xcoff_link_hash_table): Move to bfd/xcofflink.c.
-
-2009-03-14 Richard Sandiford <r.sandiford@uk.ibm.com>
-
- * xcoff.h (XCOFF_EXPALL, XCOFF_EXPFULL): New flags.
- (xcoff_loader_info): Add auto_export_flags.
-
-2009-03-14 Richard Sandiford <r.sandiford@uk.ibm.com>
-
- * internal.h (C_AIX_WEAKEXT): New macro.
- (C_WEAKEXT): Use the GNU definition in the generic part of the file,
- and conditionally reset it to C_AIX_WEAKEXT in the XCOFF part of
- the file.
- (CSECT_SYM_P): New macro.
- * xcoff.h (L_WEAK): Define.
- (EXTERN_SYM_P): New macro.
-
-2009-03-14 Richard Sandiford <r.sandiford@uk.ibm.com>
-
- * xcoff.h (XCOFF_ALLOCATED): New flag.
-
-2009-03-14 Richard Sandiford <r.sandiford@uk.ibm.com>
-
- * xcoff.h (XCOFF_CALLED, XCOFF_IMPORT): Update comments.
- (XCOFF_WAS_UNDEFINED): New flag.
- (xcoff_link_hash_table): Add an "rtld" field.
-
-2009-03-14 Dave Korn <dave.korn.cygwin@gmail.com>
-
- * internal.h (struct internal_extra_pe_aouthdr): Correct type
- of DllCharacteristics flags field to unsigned.
- * pe.h (IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE,
- IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE,
- IMAGE_DLL_CHARACTERISTICS_NX_COMPAT,
- IMAGE_DLLCHARACTERISTICS_NO_ISOLATION,
- IMAGE_DLLCHARACTERISTICS_NO_SEH,
- IMAGE_DLLCHARACTERISTICS_NO_BIND,
- IMAGE_DLLCHARACTERISTICS_WDM_DRIVER,
- IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE): New macros to
- define flag bit values for DllCharacteristics field of PEAOUTHDR,
- PEPAOUTHDR.
-
-2008-12-23 Johan Olmutz Nielsen <jnielsen@ddci.com>
-
- * ti.h (COFF_ADJUST_SCNHDR_OUT_PRE): Define.
-
-2008-06-17 Nick Clifton <nickc@redhat.com>
-
- * ti.h (GET_SCNHDR_NLNNO): Provide an alternative version of this
- macro which does not trigger an array bounds warning in gcc.
- (PUT_SCNHDR_NLNNO): Likewise.
- (GET_SCNHDR_FLAGS): Likewise.
- (PUT_SCNHDR_FLAGS): Likewise.
- (GET_SCNHDR_PAGE): Likewise.
- (PUT_SCNHDR_PAGE): Likewise.
-
-2007-11-05 Danny Smith <dannysmith@users.sourceforge.net>
-
- * pe.h (COFF_ENCODE_ALIGNMENT) Define.
-
-2007-08-02 H.J. Lu <hongjiu.lu@intel.com>
-
- * pe.h (IMAGE_SCN_ALIGN_POWER_BIT_POS): New.
- (IMAGE_SCN_ALIGN_POWER_BIT_MASK): Likewise.
- (IMAGE_SCN_ALIGN_POWER_NUM): Likewise.
- (IMAGE_SCN_ALIGN_POWER_CONST): Likewise.
- (IMAGE_SCN_ALIGN_128BYTES): Likewise.
- (IMAGE_SCN_ALIGN_256BYTES): Likewise.
- (IMAGE_SCN_ALIGN_512BYTES): Likewise.
- (IMAGE_SCN_ALIGN_1024BYTES): Likewise.
- (IMAGE_SCN_ALIGN_2048BYTES): Likewise.
- (IMAGE_SCN_ALIGN_4096BYTES): Likewise.
- (IMAGE_SCN_ALIGN_8192BYTES): Likewise.
- (IMAGE_SCN_ALIGN_1BYTES): Redefined with
- IMAGE_SCN_ALIGN_POWER_CONST.
- (IMAGE_SCN_ALIGN_2BYTES): Likewise.
- (IMAGE_SCN_ALIGN_4BYTES): Likewise.
- (IMAGE_SCN_ALIGN_8BYTES): Likewise.
- (IMAGE_SCN_ALIGN_16BYTES): Likewise.
- (IMAGE_SCN_ALIGN_32BYTES): Likewise.
- (IMAGE_SCN_ALIGN_64BYTES): Likewise.
-
-2007-07-12 Kai Tietz <kai.tietz@onevision.com>
-
- * internal.h (struct internal_syment): Use bfd_hostptr_t for
- _n_zeroes and _n_offset fields.
-
-2007-04-27 Alan Modra <amodra@bigpond.net.au>
-
- * rs6000.h: Write Mimi's name in ASCII.
-
-2007-03-19 H.J. Lu <hongjiu.lu@intel.com>
-
- * internal.h (internal_extra_pe_aouthdr): Add Magic,
- MajorLinkerVersion, MinorLinkerVersion, SizeOfCode,
- SizeOfInitializedData, SizeOfUninitializedData,
- AddressOfEntryPoint, BaseOfCode and BaseOfData.
-
-2006-12-05 Michael Tautschnig <tautschn@model.in.tum.de>
- Nick Clifton <nickc@redhat.com>
-
- * external.h (struct external_aouthdr): Add ATTRIBUTE_PACKED.
- (struct external_syment): Likewise.
- (union external_auxent): Likewise.
-
-2006-11-14 Phil Lello <phil.lello@homecall.co.uk>
-
- * pe.h: Added defines for IMAGE_SUBSYSTEM_EFI_ROM and
- IMAGE_SUBSYSTEM_XBOX.
- * internal.h: Added defines for PE directory entry types.
- NB: in internal.h because IMAGE_NUMBEROF_DIRECTORY_ENTRYIES is in
- pe.h
-
-2006-09-20 Kai Tietz <Kai.Tietz@onevision.com>
-
- * external.h: Add proper external_aouthdr64 structure (without
- data_start member).
- (AOUTHDRSZ64): Set according structure size.
- (AOUTHDR64): As typedef of external_aouthdr64 structure.
- * internal.h: Add relocation identifiers for coff.
- * pe.h: Add define IMAGE_FILE_MACHINE_AMD64 the coff signature.
- (PEPAOUTHDR): Adjust structure to have proper size (using AOUTHDR64).
- (PEPAOUTSZ): Calculated size of 240.
- * x86_64.h: Coff information for x86_64 (AMD64).
-
-2006-02-05 Arnold Metselaar <arnold.metselaar@planet.nl>
-
- * internal.h: Add relocation number R_IMM24 for Z80.
-
-2005-10-25 Arnold Metselaar <arnold.metselaar@planet.nl>
-
- * internal.h: Add relocation number for Z80
- * z80.h: New file.
-
-2005-08-18 Alan Modra <amodra@bigpond.net.au>
-
- * a29k.h: Delete.
-
-2005-07-14 Daniel Marques <marques@cs.cornell.edu>
-
- * alpha.h (ALPHA_ECOFF_COMPRESSEDMAG): Define.
- * ecoff.h (ALPHA_MAGIC_COMPRESSED): Define.
-
-2005-05-10 Nick Clifton <nickc@redhat.com>
-
- * Update the address and phone number of the FSF organization in
- the GPL notices in the following files:
- a29k.h, alpha.h, apollo.h, arm.h, aux-coff.h, ecoff.h, external.h,
- go32exe.h, h8300.h, h8500.h, i386.h, i860.h, i960.h, ia64.h,
- internal.h, m68k.h, m88k.h, maxq.h, mcore.h, mips.h, mipspe.h,
- or32.h, pe.h, powerpc.h, rs6k64.h, sh.h, sparc.h, ti.h, tic30.h,
- tic4x.h, tic54x.h, tic80.h, w65.h, we32k.h, xcoff.h, z8k.h
-
-2005-02-21 Alan Modra <amodra@bigpond.net.au>
-
- * xcoff.h (struct xcoff_loader_info): Warning fix.
-
-2005-01-10 Inderpreet Singh <inderpreetb@noida.hcltech.com>
-
- * maxq.h (F_MAXQ10, F_MAXQ20): Define.
-
-2004-11-08 Inderpreet Singh <inderpreetb@nioda.hcltech.com>
- Vineet Sharma <vineets@noida.hcltech.com>
-
- * maxq.h: New file: Defintions for the maxq port.
-
-2004-11-08 Aaron W. LaFramboise <aaron98wiridge9@aaronwl.com>
-
- * pe.h (IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY): Define.
- (IMAGE_WEAK_EXTERN_SEARCH_LIBRARY): Same.
- (IMAGE_WEAK_EXTERN_SEARCH_ALIAS): Same.
-
-2004-08-13 Mark Kettenis <kettenis@gnu.org>
-
- * symconst.h (langMax): Fix typo in comment.
-
-2004-04-23 Chris Demetriou <cgd@broadcom.com>
-
- * mips.h (MIPS_R_RELHI, MIPS_R_RELLO, MIPS_R_SWITCH): Remove
- (MIPS_R_PCREL16): Update comment.
- * ecoff.h (struct ecoff_value_adjust): Remove structure.
- (struct ecoff_debug_info): Remove 'adjust' member.
-
-2004-04-20 DJ Delorie <dj@redhat.com>
-
- * internal.h (R_SECREL32): Add.
-
-For older changes see ChangeLog-9103
-
-Copyright (C) 2004-2012 Free Software Foundation, Inc.
-
-Copying and distribution of this file, with or without modification,
-are permitted in any medium without royalty provided the copyright
-notice and this notice are preserved.
-
-Local Variables:
-mode: change-log
-left-margin: 8
-fill-column: 74
-version-control: never
-End:
diff --git a/include/coff/ChangeLog-9103 b/include/coff/ChangeLog-9103
deleted file mode 100644
index c8a7b100e..000000000
--- a/include/coff/ChangeLog-9103
+++ /dev/null
@@ -1,1186 +0,0 @@
-2005-04-13 H.J. Lu <hongjiu.lu@intel.com>
-
- Moved from ../ChangeLog
-
- 2003-04-04 Svein E. Seldal <Svein.Seldal@solidas.com>
- * tic4x.h: Namespace cleanup. Replace s/c4x/tic4x
- and s/c3x/tic3x/
-
- 2003-01-20 Svein E. Seldal <Svein.Seldal@solidas.com>
- * tic4x.h (TICOFF_TARGET_MACHINE_GET): Fixed define bug
- * ti.h (TICOFF_TARGET_MACHINE_GET): Added macros
-
- 2002-08-28 Michael Hayes <m.hayes@elec.canterbury.ac.nz>
- * internal.h: Add new relocation types.
- * ti.h: Add file-header flags for tic4x code.
- * tic4x.h: New file
-
-2003-12-02 Graham Reed <grahamr@algorithmics.com>
-
- * internal.h (C_WEAKEXT): Add alternative value for AIX 5.2
- based targets.
-
-2003-08-23 Jason Eckhardt <jle@rice.edu>
-
- * coff/i860.h (COFF860_R_PAIR, COFF860_R_LOW0, COFF860_R_LOW1,
- COFF860_R_LOW2, COFF860_R_LOW3, COFF860_R_LOW4, COFF860_R_SPLIT0,
- COFF860_R_SPLIT1, COFF860_R_SPLIT2, COFF860_R_HIGHADJ,
- COFF860_R_BRADDR): Define new relocation constants and document.
- Minor formatting adjustments.
-
-2003-08-07 Alan Modra <amodra@bigpond.net.au>
-
- * ti.h (GET_SCNHDR_NRELOC): Rename PTR param to LOC.
- (PUT_SCNHDR_NRELOC, GET_SCNHDR_NLNNO, PUT_SCNHDR_NLNNO): Likewise.
- (GET_SCNHDR_FLAGS, PUT_SCNHDR_FLAGS): Likewise.
- (GET_SCNHDR_PAGE, PUT_SCNHDR_PAGE): Likewise.
-
-2003-07-17 Jeff Muizelaar <muizelaar@rogers.com>
-
- * pe.h: (IMAGE_FILE_NET_RUN_FROM_SWAP): Define.
- (IMAGE_FILE_MACHINE_WCEMIPSV2): Define.
- (IMAGE_FILE_MACHINE_SH3DSP): Define.
- (IMAGE_FILE_MACHINE_SH3E): Define.
- (IMAGE_FILE_MACHINE_SH5): Define.
- (IMAGE_FILE_MACHINE_AM33): Define.
- (IMAGE_FILE_MACHINE_POWERPCFP): Define.
- (IMAGE_FILE_MACHINE_AXP64): Define.
- (IMAGE_FILE_MACHINE_TRICORE): Define.
- (IMAGE_FILE_MACHINE_CEF): Define.
- (IMAGE_FILE_MACHINE_EBC): Define.
- (IMAGE_FILE_MACHINE_AMD64): Define.
- (IMAGE_FILE_MACHINE_M32R): Define.
- (IMAGE_FILE_MACHINE_CEE): Define.
-
-2003-07-14 Christian Groessler <chris@groessler.org>
-
- * i860.h (AOUTSZ): Define for i860 coff.
-
-2003-06-29 Andreas Jaeger <aj@suse.de>
-
- * xcoff.h (struct __rtinit ): Convert to ISO C90 prototypes.
-
- * ecoff.h: Convert to ISO C90 prototypes. Replace PTR by void *.
-
-2003-04-24 Dhananjay Deshpande <dhananjayd@kpitcummins.com>
-
- * coff/h8300.h (H8300HNMAGIC, H8300SNMAGIC): New.
- (H8300HNBADMAG, H8300SNBADMAG): New.
-
-2003-04-15 Rohit Kumar Srivastava <rohits@kpitcummins.com>
-
- * sh.h: Replace occurrances of 'Hitachi' with 'Renesas'.
- * h8300.h: Likewise.
- * h8500.h: Likewise.
-
-2003-03-25 Stan Cox <scox@redhat.com>
- Nick Clifton <nickc@redhat.com>
-
- Contribute support for Intel's iWMMXt chip - an ARM variant:
-
- * arm.h (ARM_NOTE_SECTION): Define.
-
-2002-11-30 Alan Modra <amodra@bigpond.net.au>
-
- * ecoff.h: Replace boolean with bfd_boolean.
- * xcoff.h: Likewise.
-
-2002-03-18 Tom Rix <trix@redhat.com>
-
- * rs6k64.h: Add U64_TOCMAGIC, AIX 5 64 bit magic number.
-
-2002-02-01 Tom Rix <trix@redhat.com>
-
- * xcoff.h: Conditionally support <aiaff> for pre AIX 4.3.
-
-2002-01-31 Ivan Guzvinec <ivang@opencores.org>
-
- * or32.h: New file.
-
-2001-12-24 Tom Rix <trix@redhat.com>
-
- * xcoff.h (xcoff_big_format_p): Make <bigaf> the default archive
- format.
- (XCOFFARMAG_ELEMENT_SIZE, XCOFFARMAGBIG_ELEMENT_SIZE): Define for
- archive header ascii elements.
-
-2001-12-17 Tom Rix <trix@redhat.com>
-
- * xcoff.h : Add .except and .typchk section string and styp flags.
- Fix xcoff_big_format_p macro.
-
-2001-12-16 Tom Rix <trix@redhat.com>
-
- * xcoff.h : Clean up formatting.
-
-2002-01-15 Richard Earnshaw <rearnsha@arm.com>
-
- * arm.h (F_VFP_FLOAT): Define.
-
-2001-11-11 Timothy Wall <twall@alum.mit.edu>
-
- * ti.h: Move arch-specific stuff from here...
- (COFF_ADJUST_SYM_IN/OUT): Optionally put page flag into symbol
- value.
- * tic54x.h: ...to here.
-
-2001-10-26 Christian Groessler <cpg@aladdin.de>
-
- * external.h (GET_LINENO_LNNO): Fix usage of H_GET_32/16.
- (PUT_LINENO_LNNO): Likewise with H_PUT_32/16.
-
-2001-09-21 Nick Clifton <nickc@cambridge.redhat.com>
-
- * ti.h (GET_SCNHDR_PAGE): Fix compile time warning.
-
-2001-09-18 Alan Modra <amodra@bigpond.net.au>
-
- * external.h (GET_LINENO_LNNO): Use H_GET_32/16.
- (PUT_LINENO_LNNO): Use H_PUT_32/16.
- * m88k.h (GET_LNSZ_SIZE, GET_LNSZ_LNNO, GET_SCN_NRELOC,
- GET_SCN_NLINNO): Use H_GET_32.
- (PUT_LNSZ_LNNO, PUT_LNSZ_SIZE, PUT_SCN_NRELOC, PUT_SCN_NLINNO):
- Use H_PUT_32.
- * ti.h: Formatting fixes. Make use of H_GET_* and H_PUT_* throughout.
- * xcoff.h: White space changes.
-
-2001-09-05 Tom Rix <trix@redhat.com>
-
- * xcoff.h : Add XCOFF_SYSCALL32 and XCOFF_SYSCALL64 hash table flags.
-
-2001-08-27 Andreas Jaeger <aj@suse.de>
-
- * xcoff.h (struct __rtinit): Make proper prototype for rtl.
-
-Fri Aug 24 01:18:51 2001 J"orn Rennecke <amylaar@redhat.com>
-
- * internal.h (R_JMP2, R_JMPL2, R_MOVL2): Comment spelling fix.
-
-2001-04-05 Tom Rix <trix@redhat.com>
-
- * rs6000.h : move xcoff32 external structures from xcofflink.
- * rs6k64.h : move xcoff64 external structures from xcofflink.
- * internal.h : promote 32 bit structure elements to 64 bit
- for xcoff64 support
- * xcoff.h : New file.
-
-2001-03-23 Nick Clifton <nickc@redhat.com>
-
- * a29k.h: Fix compile time warning.
- * external.h: Fix compile time warning.
- * m88k.h: Fix compile time warning.
-
-2001-03-13 Nick Clifton <nickc@redhat.com>
-
- * external.h: New file. Common structure definitions found in
- other COFF header files.
-
- * a29k.h: Use external.h.
- * apollo.h: Use external.h.
- * arm.h: Use external.h.
- * h8300.h: Use external.h.
- * h8500.h: Use external.h.
- * i386.h: Use external.h.
- * i860.h: Use external.h.
- * ia64.h: Use external.h.
- * m68k.h: Use external.h.
- * m88k.h: Use external.h.
- * mcore.h: Use external.h.
- * mips.h: Use external.h.
- * mipspe.h: Use external.h.
- * powerpc.h: Use external.h.
- * rs6000.h: Use external.h.
- * rs6k64.h: Use external.h.
- * sh.h: Use external.h.
- * sparc.h: Use external.h.
- * tic30.h: Use external.h.
- * tic80.h: Use external.h.
- * w65.h: Use external.h.
- * we32k.h: Use external.h.
- * z8k.h: Use external.h.
-
-2001-02-09 David Mosberger <davidm@hpl.hp.com>
-
- * pe.h (PEPAOUTSZ): Rename from PEP64AOUTSZ.
- Rename from PEPAOUTHDR.
-
-2001-01-23 H.J. Lu <hjl@gnu.org>
-
- * pe.h (struct external_PEI_DOS_hdr): New.
- (struct external_PEI_IMAGE_hdr): New.
-
-2000-12-11 Alan Modra <alan@linuxcare.com.au>
-
- * ti.h (OCTETS_PER_BYTE_POWER): Change #warning to #error.
-
-2000-12-08 Alan Modra <alan@linuxcare.com.au>
-
- * ti.h (OCTETS_PER_BYTE_POWER): Change #warn to #warning.
-
-2000-06-30 DJ Delorie <dj@cygnus.com>
-
- * pe.h: Clarify a comment.
-
-2000-05-05 Clinton Popetz <cpopetz@cygnus.com>
-
- * rs6k64.h (U802TOC64MAGIC): Change to U803XTOCMAGIC.
-
-2000-04-24 Clinton Popetz <cpopetz@cygnus.com>
-
- * rs6k64.h: New file.
-
-2000-04-17 Timothy Wall <twall@cygnus.com>
-
- * ti.h: Load page cleanup.
- * intental.h: Add load page field.
-
-Mon Apr 17 16:44:01 2000 David Mosberger <davidm@hpl.hp.com>
-
- * pe.h (PEP64AOUTHDR): New header for PE+.
- (PEP64AOUTSZ): New macro.
- (IMAGE_SUBSYSTEM_UNKNOWN): New macro.
- (IMAGE_SUBSYSTEM_NATIVE): Ditto.
- (IMAGE_SUBSYSTEM_WINDOWS_GUI): Ditto.
- (IMAGE_SUBSYSTEM_WINDOWS_CUI): Ditto.
- (IMAGE_SUBSYSTEM_POSIX_CUI): Ditto.
- (IMAGE_SUBSYSTEM_WINDOWS_CE_GUI): Ditto.
- (IMAGE_SUBSYSTEM_EFI_APPLICATION): Ditto.
- (IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER): Ditto.
- (IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER): Ditto.
- * internal.h (PE_DEF_FILE_ALIGNMENT): Define only if not defined
- already.
- * ia64.h: New file.
-
-2000-04-13 Alan Modra <alan@linuxcare.com.au>
-
- * ti.h (ADDR_MASK): Don't use ul suffix on constants.
- (PG_MASK): Ditto.
-
-2000-04-11 Timothy Wall <twall@cygnus.com>
-
- * ti.h: Remove load page references until load pages are
- reimplemented.
- * tic54x.h: Ditto.
-
-2000-04-07 Timothy Wall <twall@cygnus.com>
-
- * internal.h: Fix some comments related to TI COFF (instead of tic80).
- * ti.h: New.
- * tic54x.h: New.
-
-Wed Apr 5 22:08:41 2000 J"orn Rennecke <amylaar@cygnus.co.uk>
-
- * sh.h (R_SH_LOOP_START, R_SH_LOOP_END): Define.
-
-2000-03-15 Kazu Hirata <kazu@hxi.com>
-
- * internal.h: Fix a typo in the comment for R_MOVL2.
-
-2000-02-28 Nick Clifton <nickc@cygnus.com>
-
- * mipspe.h (MIPS_PE_MAGIC): Define.
- * sh.h (SH_PE_MAGIC): Define.
-
-2000-02-22 Nick Clifton <nickc@cygnus.com> DJ Delorie <dj@cygnus.com>
-
- * sh.h: Add Windows CE definitions.
- * arm.h: Add Windows CE definitions.
- * mipspe.h: New file: Windows CE definitions for MIPS.
- * pe.h: Add constants for ILF support.
-
-2000-01-05 Nick Clifton <nickc@cygnus.com>
-
- * pe.h: Fix formatting of comments.
- (IMAGE_FILE_AGGRESSIVE_WS_TRIM): Define.
- (IMAGE_FILE_LARGE_ADDRESS_AWARE): Define.
- (IMAGE_FILE_16BIT_MACHINE): Define.
- (IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP): Define.
- (IMAGE_FILE_UP_SYSTEM_ONLY): Define.
- (IMAGE_FILE_MACHINE_UNKNOWN): Define.
- (IMAGE_FILE_MACHINE_ALPHA): Define.
- (IMAGE_FILE_MACHINE_ALPHA64): Define.
- (IMAGE_FILE_MACHINE_I386): Define.
- (IMAGE_FILE_MACHINE_IA64): Define.
- (IMAGE_FILE_MACHINE_M68K): Define.
- (IMAGE_FILE_MACHINE_MIPS16): Define.
- (IMAGE_FILE_MACHINE_MIPSFPU): Define.
- (IMAGE_FILE_MACHINE_MIPSFPU16): Define.
- (IMAGE_FILE_MACHINE_POWERPC): Define.
- (IMAGE_FILE_MACHINE_R3000): Define.
- (IMAGE_FILE_MACHINE_R4000): Define.
- (IMAGE_FILE_MACHINE_R10000): Define.
- (IMAGE_FILE_MACHINE_SH3): Define.
- (IMAGE_FILE_MACHINE_SH4): Define.
- (IMAGE_FILE_MACHINE_THUMB): Define.
-
-1999-09-20 Alan Modra <alan@spri.levels.unisa.edu.au>
-
- * internal.h: Delete bogus R_PCLONG, duplicate R_RELBYTE and
- R_RELWORD, and rewrite some R_* as decimal.
-
-1999-09-06 Donn Terry <donn@interix.com>
-
- * internal.h (DTYPE): Define.
- * pe.h (struct external_PEI_filehdr): Rename from
- external_PE_filehdr. Define even if COFF_IMAGE_WITH_PE is not
- defined.
-
-1999-07-17 Nick Clifton <nickc@cygnus.com>
-
- * arm.h (F_SOFT_FLOAT): Rename from F_SOFTFLOAT.
-
-1999-06-21 Philip Blundell <pb@nexus.co.uk>
-
- * arm.h (F_SOFTFLOAT): Define.
-
-1999-07-05 Nick Clifton <nickc@cygnus.com>
-
- * arm.h (F_ARM_5): Define.
-
-Wed Jun 2 18:08:18 1999 Richard Henderson <rth@cygnus.com>
-
- * internal.h (BEOS_EXE_IMAGE_BASE, BEOS_DLL_IMAGE_BASE): New.
-
-Mon May 17 13:35:35 1999 Stan Cox <scox@cygnus.com>
-
- * arm.h (F_PIC, F_ARM_2, F_ARM_2a, F_ARM_3, F_ARM_3M,
- F_ARM_4, F_ARM_4T, F_APCS26): Changed values to distinguish
- F_ARM_2a, F_ARM_3M, F_ARM_4T.
-
-1999-05-15 Nick Clifton <nickc@cygnus.com>
-
- * mcore.h (IMAGE_REL_MCORE_RVA): Define.
-
-1999-04-21 Nick Clifton <nickc@cygnus.com>
-
- * mcore.h (GET_LINENO_LNNO): New macro.
- (PUT_LINENO_LNNO): New macro.
-
-1999-04-08 Nick Clifton <nickc@cygnus.com>
-
- * mcore.h: New header file. Defines for Motorola's MCore
- processor.
-
-Sun Dec 6 21:36:37 1998 Mark Elbrecht <snowball3@usa.net>
-
- * internal.h (C_WEAKEXT): Define.
-
-Wed Jan 27 13:35:35 1999 Stan Cox <scox@cygnus.com>
-
- * arm.h (F_PIC_INT, F_ARM_2, F_ARM_3, F_ARM_4, F_APCS26):
- Changed values to avoid clashing with IMAGE_FILE_* coff header
- flag values.
-
-Wed Apr 1 16:06:15 1998 Nick Clifton <nickc@cygnus.com>
-
- * internal.h: Document numbers associated with Thumb symbol
- types.
-
-Fri Mar 27 17:16:57 1998 Ian Lance Taylor <ian@cygnus.com>
-
- * internal.h (ISPTR, ISFCN, ISARY): Add casts to unsigned long.
-
-Mon Feb 2 17:10:38 1998 Steve Haworth <steve@pm.cse.rmit.EDU.AU>
-
- * tic30.h: New file.
-
-Fri Dec 12 11:49:07 1997 Fred Fish <fnf@cygnus.com>
-
- * tic80.h (R_MPPCR15W): New relocation type, for 15 bit PC relative
- offsets.
-
-Tue Dec 2 10:21:40 1997 Nick Clifton <nickc@cygnus.com>
-
- * arm.h (COFFARM): New define.
-
-Mon Dec 1 20:24:18 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
-
- * sh.h (R_SH_SWITCH8): New.
-
-Sat Nov 22 15:10:14 1997 Nick Clifton <nickc@cygnus.com>
-
- * internal.h (C_THUMBEXTFUNC, C_THUMBSTATFUNC): Constants to
- define static and external functions.
-
- * arm.h: Add bits to support PIC and APCS-FLOAT type binaries,
- when implemented.
-
-Fri Oct 3 14:25:17 1997 Fred Fish <fnf@cygnus.com>
-
- * tic80.h (R_PPL16B): Make constant uppercase for consistency.
-
-Tue Jul 22 18:18:58 1997 Robert Hoehne <robert.hoehne@Mathematik.TU-Chemnitz.DE>
-
- * go32exe.h: New file.
-
-Tue Jul 8 12:23:55 1997 Fred Fish <fnf@cygnus.com>
-
- * tic80.h (TIC80_TARGET_ID): Add define.
- * internal.h (struct internal_filehdr): Add f_target_id field.
-
-Tue Jun 3 16:44:18 1997 Nick Clifton <nickc@cygnus.com>
-
- * internal.h: Add storage classes for Thumb symbols
-
-Mon May 26 14:07:55 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * tic80.h (R_PPL16B): Correct value.
-
-Tue May 13 10:21:14 1997 Nick Clifton <nickc@cygnus.com>
-
- * arm.h (constants): Added new flag bits F_APCS_26 and
- F_APCS_SET for the f_flags field of the filehdr structure. Added new
- flags: F_APCS26, F_ARM_2, F_ARM_3, F_ARM_7, F_ARM_7T to store
- information in the flags field of the internal_f structure used by BFD
- routines.
-
-Sat May 3 08:24:59 1997 Fred Fish <fnf@cygnus.com>
-
- * internal.h (C_UEXT, C_STATLAB, C_EXTLAB, C_SYSTEM):
- New storage classes for TIc80.
-
-Fri Apr 18 11:52:55 1997 Niklas Hallqvist <niklas@appli.se>
-
- * alpha.h (ALPHA_ECOFF_BADMAG): Recognize *BSD/alpha magic too.
- (ALPHA_R_LITERALSLEAZY): Define.
- * ecoff.h (ALPHA_MAGIC_BSD): Define.
-
-Wed Jan 29 11:31:51 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * i960.h (R_IPR13, R_ALIGN): Define.
-
-Mon Jan 27 13:34:30 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * internal.h (R_IPRMED, R_OPTCALL, R_OPTCALLX): Move definitions
- from here...
- * i960.h (R_IPRMED, R_OPTCALL, R_OPTCALLX): ...to here.
-
-Wed Jan 22 20:10:47 1997 Fred Fish <fnf@cygnus.com>
-
- * tic80.h (TIC80MAGIC): Renamed to TIC80_AOUTHDR_MAGIC.
-
-Fri Dec 27 22:05:45 1996 Fred Fish <fnf@cygnus.com>
-
- * tic80.h: New file for TIc80 support.
-
-Thu Dec 19 16:18:11 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * arm.h (_LIT): Define.
-
-Fri Jun 28 12:54:38 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * pe.h (FILHSZ): Define.
-
-Wed Jun 26 16:24:26 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * All files: Define FILHSZ, AOUTSZ, AOUTHDRSZ, SCNHSZ, SYMESZ,
- AUXESZ, LINESZ, RELSZ as numeric constants rather than uses of
- sizeof. Define AOUTHDRSZ in all files.
- * pe.h (AOUTSZ): Define by adding to AOUTHDRSZ.
-
-Fri Jun 21 11:17:46 1996 Richard Henderson <rth@tamu.edu>
-
- * alpha.h: Add declarations for relocation types added for Alpha
- OSF/1 3.0.
-
-Tue Jun 18 16:04:29 1996 Jeffrey A. Law <law@rtl.cygnus.com>
-
- * h8300.h (H8300SMAGIC): Define.
- (H8300SBADMAG): Define.
-
-Mon Jun 10 11:53:28 1996 Jeffrey A Law (law@cygnus.com)
-
- * internal.h (R_BCC_INV, R_JMP_DEL): New relocations for
- relaxing in the H8/300 series.
-
-Thu May 16 15:49:22 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * sh.h (R_SH_CODE, R_SH_DATA, R_SH_LABEL): Define.
-
-Tue May 7 00:36:39 1996 Jeffrey A Law (law@cygnus.com)
-
- * internal.h (R_JMPL2): Renamed from R_JMPL_B8 to be
- consistent with other similar relocs.
-
- * internal.h (H8/300 specific relocs): Add comments better
- explaining what each reloc is used for.
- (R_MOV16B1, R_MOV16B2): Renamed from R_MOVB1 and R_MOVB2.
- (R_MOV24B1, R_MOV24B2): Renamed from R_MOVLB1 and R_MOVLB2.
- (R_MOVL1, R_MOVL2): New relocs.
-
-Fri May 3 13:01:12 1996 Jeffrey A Law (law@cygnus.com)
-
- * internal.h (R_PCRWORD_B): Define for the h8300 relaxing
- linker.
-
-Wed May 1 19:21:03 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * internal.h (SCNNMLEN): Define.
- (struct internal_scnhdr): Use SCNNMLEN for s_name field.
-
-Fri Mar 29 13:41:25 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * pe.h: Define IMAGE_COMDAT codes.
-
-Wed Mar 27 17:29:42 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * arm.h (union external_auxent): Add x_checksum, x_associated, and
- x_comdat fields to x_scn struct.
- * i386.h (union external_auxent): Likewise.
- * powerpc.h (union external_auxent): Likewise.
- * internal.h (union internal_auxent): Likewise.
-
-Thu Mar 21 16:25:57 1996 David Mosberger-Tang <davidm@azstarnet.com>
-
- * ecoff.h (struct ecoff_find_line): Add caching fields.
-
-Thu Mar 14 15:22:44 1996 Jeffrey A Law (law@cygnus.com)
-
- * internal.h (R_MEM_INDIRECT): New reloc for the h8300.
-
-Fri Feb 9 10:44:11 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * aux-coff.h: Rename from aux.h, to avoid problems on hapless DOS
- systems which think that aux is a com port.
-
-Mon Feb 5 18:35:00 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * i960.h (F_I960HX): Define.
-
-Wed Jan 31 13:11:54 1996 Richard Henderson <rth@tamu.edu>
-
- * aux.h: New file.
- * internal.h, m68k.h: Protect against multiple inclusion.
-
-Wed Nov 22 13:48:39 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * ecoff.h (_RCONST, STYP_RCONST, RELOC_SECTION_RCONST): Define.
- (NUM_RELOC_SECTIONS): Update.
- * symconst.h (scRConst): Define.
-
-Tue Nov 14 18:54:29 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * internal.h (C_NT_WEAK): Define.
-
-Thu Nov 9 14:08:30 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * rs6000.h (STYP_OVRFLO): Define.
-
-Tue Nov 7 14:38:45 1995 Kim Knuttila <krk@cygnus.com>
-
- * powerpc.h (IMAGE_NT_OPTIONAL_HDR_MAGIC): Added define.
- * pe.h: Added defines for file level flags
-
-Mon Nov 6 17:28:01 1995 Harry Dolan <dolan@ssd.intel.com>
-
- * i860.h: New file, based on i386.h.
-
-Wed Nov 1 15:25:18 1995 Manfred Hollstein KS/EF4A 60/1F/110 #40283 <manfred@lts.sel.alcatel.de>
-
- * m68k.h (PAGEMAGICEXECSWAPPED): Define.
- (PAGEMAGICPEXECSWAPPED): Define.
- (PAGEMAGICPEXECTSHLIB): Define.
- (PAGEMAGICPEXECPAGED): Define.
- (_COMMENT): DEFINE.
- * m88k.h (_COMMENT): Define.
-
-Wed Oct 18 18:36:19 1995 Geoffrey Noer <noer@cygnus.com>
-
- * sym.h: #if 0'd out runtime_pdr struct because it chokes
- Visual C++ and there aren't any references to it elsewhere in gdb.
-
-Mon Oct 16 11:12:24 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * rs6000.h (SMALL_AOUTSZ): Define.
-
- * internal.h (XMC_TD): Define.
-
-Tue Oct 10 18:41:03 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * internal.h (struct internal_aouthdr): Add o_cputype field.
- * rs6000.h (AOUTHDR): Rename o_resv1 to o_cputype.
-
-Mon Oct 9 14:45:46 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * rs6000.h (AOUTHDR): Add o_maxdata field. Add comments.
- (_PAD, _LOADER): Define.
- (STYP_LOADER): Define.
- * internal.h (struct internal_aouthdr): Add o_maxdata field.
-
-Thu Oct 5 10:02:57 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * ecoff.h: Define section name macros and STYP macros for various
- Alpha sections: .got, .hash, .dynsym, .dynstr, .rel.dyn, .conflic,
- .comment, .liblist, .dynamic.
-
-Wed Oct 4 10:56:35 1995 Kim Knuttila <krk@cygnus.com>
-
- * pe.h: Moved DOSMAGIC and NT_SIGNATURE defines here
- * powerpc.h: removed DOSMAGIC, NT_SIGNATURE, and DEFAULT_* defines
- Also removed other unused defines (various MAGIC ones)
- * i386.h: removed DOSMAGIC, NT_SIGNATURE, and DEFAULT_* defines
- * arm.h: removed DOSMAGIC, NT_SIGNATURE, and DEFAULT_* defines
- * apollo.h: removed unused DEFAULT_* defines
- * alpha.h: removed unused DEFAULT_* defines
- * h8500.h: removed unused DEFAULT_* defines
- * h8300.h: removed unused DEFAULT_* defines
- * i960.h: removed unused DEFAULT_* defines
- * m88k.h: removed unused DEFAULT_* defines
- * we32k.h: removed unused DEFAULT_* defines
- * rs6000.h: removed unused DEFAULT_* defines
- * mips.h: removed unused DEFAULT_* defines
- * m68k.h: removed unused DEFAULT_* defines
- * z8k.h: removed unused DEFAULT_* defines
- * w65.h: removed unused DEFAULT_* defines
- * sparc.h: removed unused DEFAULT_* defines
- * sh.h: removed unused DEFAULT_* defines
-
-Fri Sep 29 08:40:08 1995 Kim Knuttila <krk@cygnus.com>
-
- * powerpc.h: Reformatted to GNU coding conventions.
-
-Wed Sep 27 06:50:50 1995 Kim Knuttila <krk@nellie>
-
- * pe.h: added defines for more section characteristics
- * powerpc.h (new file): base coff definitions for ppc PE
-
-Tue Sep 12 12:08:20 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * internal.h (struct internal_syment): Change n_numaux field from
- char to unsigned char.
-
-Fri Sep 1 15:39:36 1995 Kazumoto Kojima <kkojima@info.kanagawa-u.ac.jp>
-
- * mips.h (struct rpdr_ext): Define.
-
-Thu Aug 31 16:51:50 1995 steve chamberlain <sac@slash.cygnus.com>
-
- * internal.h (internal_aouthdr, internal_filehdr):
- don't indirect the pe stuff.
-
-Tue Aug 29 14:16:07 1995 steve chamberlain <sac@slash.cygnus.com>
-
- * i386.h (NT_DEF_RESERVE, NT_DEF_COMMIT): Make the same
- as 'the other' compiler.
- * internal.h (NT_IMAGE_BASE): Deleted.
- (NT_EXE_IMAGE_BASE, NT_DLL_IMAGE_BASE): New.
- (PE_DEF_SECTION_ALIGNMENT, PE_DEF_FILE_ALIGNMENT): New.
- (R_IMAGEBASE): New.
-
-Mon Aug 21 18:12:19 1995 steve chamberlain <sac@slash.cygnus.com>
-
- * internal.h: (internal_filehdr): Moved PE stuff into
- internal_extra_pe_filehdr.
- (internal_aouthdr): Moved PE stuff into
- interanl_extra_pe_aouthdr.
-
-Mon Jul 24 14:05:39 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * internal.h: Move R_SH_* relocs from here...
- * sh.h: ...to here.
- (R_SH_SWITCH16, R_SH_SWITCH32): Define.
- (R_SH_USES, R_SH_COUNT, R_SH_ALIGN): Define.
-
-Thu Jun 29 00:04:25 1995 Steve Chamberlain <sac@slash.cygnus.com>
-
- * internal.h (NT_DEF_RESERVE, NT_DEF_COMMIT): Increase a lot.
-
-Tue May 16 15:08:20 1995 Ken Raeburn <raeburn@cujo.cygnus.com>
-
- * internal.h (NT_subsystem, NT_stack_heap): Delete
-
-Tue May 16 15:08:20 1995 Ken Raeburn <raeburn@cujo.cygnus.com>
-
- * internal.h (NT_subsystem, NT_stack_heap): Now extern.
-
-Sat May 13 10:14:08 1995 Steve Chamberlain <sac@slash.cygnus.com>
-
- * pe.h: New file.
- * i386.h (NT_SECTION_ALIGNMENT, NT_FILE_ALIGNMENT,
- NT_DEF_RESERVE, NT_DEF_COMMIT): New.
- * internal.h (internal_filehdr): New fields for PE.
- (IMAGE_DATA_DIRECTORY): New.
- (internal_aouthdr): New fields for PE.
-
-Tue Feb 14 17:59:37 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * ecoff.h (struct ecoff_fdrtab_entry): Define.
- (struct ecoff_find_line): Define.
-
-Sat Feb 4 14:38:03 1995 David Mosberger-Tang <davidm@piston.cs.arizona.edu>
-
- * sym.h (struct pdr): field "prof" added.
-
- * alpha.h (PDR_BITS1_PROF_*): added, macros for PDR_BITS*_RESERVED_*
- updated accordingly.
-
-Sun Jan 15 18:38:33 1995 Steve Chamberlain <sac@splat>
-
- * w65.h: New file.
-
-Wed Nov 23 22:43:38 1994 Steve Chamberlain (sac@jonny.cygnus.com)
-
- * sh.h (SH_ARCH_MAGIC_BIG, SH_ARCH_MAGIC_LITTLE): New.
- (SHBADMAG): Changed to suit.
-
-Tue Jul 26 17:46:08 1994 Ken Raeburn (raeburn@cujo.cygnus.com)
-
- * i960.h (F_I960JX): New macro.
-
-Wed Jul 6 00:48:57 1994 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
-
- * alpha.h: Add definitions for alpha file header flags, encoding
- the object type of the file.
-
-Mon Jun 20 13:47:01 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
-
- * ecoff.h (ecoff_swap_tir_in): Remove declaration.
- (ecoff_swap_tir_out): Likewise.
- (ecoff_swap_rndx_in, ecoff_swap_rndx_out): Likewise.
- (struct ecoff_debug_swap): Add new fields: swap_tir_in,
- swap_rndx_in, swap_tir_out, swap_rndx_out, read_debug_info.
-
-Sun Jun 12 03:51:52 1994 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
-
- * symconst.h: Pick up SGI define for stIndirect.
-
-Fri Apr 22 13:05:28 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * ecoff.h (REGINFO): Don't define.
- (struct ecoff_reginfo): Don't define.
-
- * sh.h (SH_ARCH_MAGIC): Rename from SHMAGIC. SHMAGIC is used by
- several targets to mean a shared library.
- (SHBADMAG): Corresponding change.
-
-Thu Apr 14 13:00:53 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * mips.h (RELOC_BITS3_TYPE_BIG): Changed from 0x1e to 0x3e.
- (RELOC_BITS3_TYPEHI_LITTLE): Define.
- (RELOC_BITS3_TYPEHI_SH_LITTLE): Define.
- (MIPS_R_PCREL16): Change value from 8 to 12 to match Irix 4.
- (MIPS_R_RELHI): Define.
- (MIPS_R_RELLO): Define.
- (MIPS_R_SWITCH): Change value from 9 to 22.
-
-Thu Apr 7 14:19:35 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * mips.h (MIPS_R_SWITCH): Define.
-
-Thu Mar 31 19:28:33 1994 Ken Raeburn (raeburn@cujo.cygnus.com)
-
- * internal.h (internal_aouthdr): Added comments for Apollo fields.
-
-Thu Mar 31 16:28:02 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * ecoff.h (STYP_ECOFF_LIB): Define as used on Irix 4.
-
-Fri Mar 25 17:16:55 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * ecoff.h (struct ecoff_debug_info): Add adjust field.
- (struct ecoff_value_adjust): Define.
-
-Tue Mar 22 13:22:47 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * mips.h (MIPS_R_PCREL16): Define.
-
-Sat Feb 26 10:26:38 1994 Ian Lance Taylor (ian@cygnus.com)
-
- * ecoff.h: Add casts to avoid warnings from SVR4 cc.
-
-Mon Feb 21 09:48:46 1994 Ian Lance Taylor (ian@lisa.cygnus.com)
-
- * sym.h (struct runtime_pdr): Make field adr bfd_vma, not unsigned
- long.
- (SYMR): Make field value bfd_vma, not long.
-
-Fri Feb 4 23:35:53 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * rs6000.h (STYP_DEBUG): Define.
-
-Wed Feb 2 14:31:37 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * internal.h (union internal_auxent): Change x_csect.x_scnlen into
- a union of a long and a pointer to a symbol. XCOFF sometimes uses
- this field as a symbol index.
-
-Mon Jan 10 23:54:25 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * ecoff.h (ecoff_debug_info): Remove fields line_end,
- external_dnr_end, external_pdr_end, external_sym_end,
- external_opt_end, external_aux_end, ss_end, external_fdr_end.
- Replace ifdbase with ifdmap.
-
-Wed Jan 5 17:05:36 1994 Ken Raeburn (raeburn@deneb.cygnus.com)
-
- * ecoff.h (STYP_EXTENDESC, STYP_COMMENT, STYP_XDATA, STYP_PDATA):
- Define.
-
-Wed Jan 5 16:58:24 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * ecoff.h (NUM_RELOC_SECTIONS): Define.
-
-Tue Dec 21 09:24:56 1993 Ken Raeburn (raeburn@rtl.cygnus.com)
-
- * sparc.h (struct external_reloc): Rename field r_addend to
- r_offset.
-
-Sat Dec 11 16:12:32 1993 Steve Chamberlain (sac@thepub.cygnus.com)
-
- * internal.h (R_DISP7, R_SH_IMM16): New reloc types.
-
-Tue Nov 23 14:23:19 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * ecoff.h (struct ecoff_debug_swap): Added *_end fields for all
- the symbolic information pointers.
-
- * sym.h: Named the EXTR structure ecoff_extr.
-
-Fri Nov 19 08:21:18 1993 Ken Raeburn (raeburn@rover.cygnus.com)
-
- * sparc.h (RELSZ): Use correct size.
-
-Wed Nov 17 17:18:16 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * mips.h (struct ecoff_debug_info): Define.
-
-Tue Nov 2 17:56:57 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * ecoff.h (struct ecoff_debug_swap): Define.
-
-Thu Oct 28 17:07:50 1993 Stan Shebs (shebs@rtl.cygnus.com)
-
- * i386.h (I386LYNXMAGIC): Rename to LYNXCOFFMAGIC.
- * m68k.h (LYNXCOFFMAGIC): Define.
- * sparc.h: New file.
-
-Tue Oct 19 15:34:50 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * alpha.h (external_aouthdr): Split four byte padding field into
- two byte bldrev field and two byte padding field.
-
- * ecoff.h (_LITA, _PDATA, _XDATA, STYP_LITA): Defined.
-
-Wed Oct 13 15:52:34 1993 Ken Raeburn (raeburn@cygnus.com)
-
- Sun Oct 10 17:27:10 1993 Troy Rollo (troy@cbme.unsw.edu.au)
-
- * internal.h: Added o_sri, o_inlib and o_vid for Apollos as well
- as R_DIR16.
-
- * apollo.h: New file
-
-Mon Oct 11 17:16:48 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * ecoff.h (REGINFO, struct ecoff_reginfo): Define.
-
-Tue Oct 5 10:52:53 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- * rs6000.h: Change non-ASCII characters in comment to octal
- escapes.
-
-Tue Sep 28 03:27:04 1993 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
-
- * ecoff.h (_FINI, STYP_ECOFF_FINI): Add to support .fini section.
-
-Fri Sep 24 11:53:53 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * mips.h (BADMAG): Recognize MIPS_MAGIC_LITTLE3 and MIPS_MAGIC_BIG3.
- * ecoff.h: Define MIPS_MAGIC_LITTLE3 and MIPS_MAGIC_BIG3.
-
-Thu Sep 23 21:07:14 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- * mips.h (BADMAG): Recognize MIPS_MAGIC_LITTLE2 and MIPS_MAGIC_BIG2.
- * ecoff.h: Define MIPS_MAGIC_LITTLE2 and MIPS_MAGIC_BIG2.
-
-Thu Sep 16 20:27:21 1993 Jim Kingdon (kingdon@cirdan.cygnus.com)
-
- * sym.h, symconst.h: Add comment stating these files are not part
- of GDB, GAS, etc. In 1991, when we asked rms whether we could
- include these files in GDB (although they are copyrighted by
- someone besides the FSF), he said it was OK if they were not
- considered part of GDB.
-
-Fri Sep 10 17:40:35 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * ecoff.h (AUX_PUT_ANY): Cast val argument to bfd_vma.
-
- * alpha.c (external_aouthdr): Need four bytes of padding between
- vstamp and tsize.
-
-Tue Sep 7 14:20:43 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * ecoff.h (AUX_GET_ANY, AUX_PUT_ANY): Changed to reflect further
- change in bfd swapping routine names.
-
-Tue Sep 7 10:15:17 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- * ecoff.h (AUX_GET_ANY): Change name of _do_getb32 to reflect bfd
- changes.
-
-Fri Aug 13 14:30:32 1993 Ian Lance Taylor (ian@cygnus.com)
-
- * ecoff.h (RELOC_SECTION_NONE): Define.
-
-Thu Aug 12 11:24:42 1993 Ian Lance Taylor (ian@cygnus.com)
-
- * alpha.h (struct external_reloc): Add r_symndx field.
- (RELSZ): Correct.
- (RELOC_BITS*): Correct.
- (ALPHA_R_*): Define.
- * ecoff.h (RELOC_SECTION_{XDATA,PDATA,FINI,LITA,ABS}): Define.
- (r_extern): Undefine.
- * internal.h (struct internal_reloc): Make r_vaddr bfd_vma rather
- than long. Add r_extern field.
-
- * alpha.h (PDR_BITS*): Define.
- * sym.h (PDR): Give correct names to new fields.
-
- * ecoff.h: Moved MIPS reloc definitions from here...
- * mips.h: to here.
-
-Mon Aug 2 16:37:14 1993 Stu Grossman (grossman at cygnus.com)
-
- * i386.h: Add Lynx magic number.
-
-Tue Aug 3 11:17:53 1993 Ian Lance Taylor (ian@cygnus.com)
-
- * alpha.h: Corrected external symbolic debugging structures to
- match actual usage.
- * internal.h (internal_filehdr, internal_aouthdr,
- internal_scnhdr): Changed type of some fields to bfd_vma so they
- can hold 64 bits.
- * sym.h (HDRR, FDR, PDR, EXTR): Likewise.
- (PDR): Added new fields found on Alpha.
- * symconst.h (magicSym2): Define; new value found on Alpha.
-
- * ecoff.h: New file.
- * alpha.h, mips.h: Moved common information into ecoff.h. Moved
- external structure definitions in from ecoff-ext.h.
- * ecoff-ext.h: Removed; information now in alpha.h and mips.h.
-
-Sun Jul 18 21:43:59 1993 Jim Kingdon (kingdon@rtl.cygnus.com)
-
- * i386.h: Recognize I386PTXMAGIC.
-
-Fri Jul 16 09:54:35 1993 Ian Lance Taylor (ian@cygnus.com)
-
- * mips.h (MIPS_AOUT_{OZ}MAGIC): Renamed from {OZ}MAGIC.
-
-Thu Jul 15 12:23:55 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * m88k.h (union external_auxent): Move x_fcn back inside x_fcnary.
- ({GET,PUT}_FCN_{LNNOPTR,ENDNDX}): Adjust accordingly.
-
-Sun Jul 11 18:00:18 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- * m68k.h: Define MC68KBCSMAGIC.
-
-Thu Jun 10 11:46:28 1993 Ian Lance Taylor (ian@cygnus.com)
-
- * mips.h (_INIT, STYP_MIPS_INIT): Define (used on Irix4).
- (STYP_OTHER_LOAD): Define as STYP_MIPS_INIT.
-
-Wed Jun 9 15:09:09 1993 Ian Lance Taylor (ian@cygnus.com)
-
- * mips.h (OMAGIC): Define.
-
-Tue Jun 8 12:16:03 1993 Steve Chamberlain (sac@phydeaux.cygnus.com)
-
- Support for H8/300-H
- * h8300.h: New magic number.
- * internal.h: New relocations.
-
-Mon Apr 26 18:04:47 1993 Steve Chamberlain (sac@thepub.cygnus.com)
-
- * internal.h, sh.h: Support for SH.
-
-Sat Apr 24 21:34:59 1993 Jim Kingdon (kingdon@cygnus.com)
-
- * a29k.h: Define _LIT.
-
-Fri Apr 23 18:41:23 1993 Steve Chamberlain (sac@thepub.cygnus.com)
-
- * alpha.h: New file.
-
-Thu Apr 8 12:36:34 1993 Ian Lance Taylor (ian@cygnus.com)
-
- * internal.h (C_SHADOW, C_VERSION): Copied in from m88k.h.
- * m88k.h, i386.h, we32k.h: Don't define all the storage classes;
- they're already in internal.h.
-
-Wed Apr 7 11:51:24 1993 Jim Kingdon (kingdon@cygnus.com)
-
- * internal.h: Change n_sclass to unsigned char.
- Change C_EFCN to 0xff, change RS/6000 dbx symbols
- to no longer be signed.
-
-Fri Mar 19 14:52:56 1993 Steve Chamberlain (sac@thepub.cygnus.com)
-
- * internal.h: Add H8/500 reloc types.
-
-Wed Mar 17 09:46:03 1993 Ian Lance Taylor (ian@cygnus.com)
-
- * ecoff-ext.h (AUX_PUT_ANY): Don't use void values in branches of
- conditional expression.
-
-Thu Mar 4 14:12:06 1993 Ian Lance Taylor (ian@cygnus.com)
-
- * ecoff-ext.h (AUX_GET_*): Rewrote to use new macro AUX_GET_ANY.
- (AUX_PUT_*): New macros corresponding to the AUX_GET macros.
- (ecoff_swap_tir_out): Added prototype.
-
- * mips.h (N_BTMASK, N_TMASK, N_BTSHFT, N_TSHIFT): Define; these
- are needed to interpret gcc debugging output.
-
-Tue Feb 9 07:43:27 1993 Ian Lance Taylor (ian@cygnus.com)
-
- * we32k.h (BTYPE, ISPTR, ISFCN, ISARY, DECREF): Removed
- more definitions duplicated in internal.h.
-
-Wed Feb 3 09:18:24 1993 Ian Lance Taylor (ian@cygnus.com)
-
- * mips.h (RELOC_BITS3_TYPE_*): Correct for big endian machines.
-
-Mon Jan 25 11:35:51 1993 Ian Lance Taylor (ian@cygnus.com)
-
- * internal.h (internal_aouthdr): Added additional fields used only
- by MIPS ECOFF.
-
-Thu Jan 21 10:28:38 1993 Ian Lance Taylor (ian@cygnus.com)
-
- * mips.h (AOUTHDR): Added additional fields used by ECOFF.
-
-Tue Jan 19 12:21:19 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * i386.h, we32k.h (N_*, T_*, DT_*): Removed still more definitions
- duplicated in internal.h.
-
- * mips.h (RELOC_SECTION_*, ECOFF_R_*): Defined constants for ECOFF
- relocs.
-
-Fri Jan 15 18:17:00 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * ecoff-ext.h: Added prototypes for new ECOFF swapping functions.
- (opt_ext): New structure.
- * mips.h (ZMAGIC): Defined to be 0413.
- (_LIB): Defined to be ".lib"
- (external_reloc): MIPS ECOFF relocs are only 8 bytes. Added
- macros to aid in swapping.
-
-Fri Jan 8 16:19:26 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * ecoff-ext.h: Added prototypes for ECOFF swapping functions.
- * internal.h (internal_scnhdr): Always provide s_align field, not
- just on i960.
- (internal_reloc): Always provide r_size field, not just on
- RS/6000.
- * mips.h (_RDATA, _SDATA, _SBSS, _LIT4, _LIT8, STYP_RDATA,
- STYP_SDATA, STYP_SBSS, STYP_LIT4, STYP_LIT8): Defined.
- (CODE_MASK, MIPS_IS_STAB, MIPS_MARK_STAB, MIPS_UNMARK_STAB,
- STABS_SYMBOL): Moved in from gdb/mipsread.c.
-
-Wed Jan 6 14:01:46 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * i386.h, we32k.h: removed STYP_* defines, since they duplicated
- those in internal.h.
-
-Tue Dec 29 15:40:07 1992 Ian Lance Taylor (ian@cygnus.com)
-
- * i386.h: define I386AIXMAGIC for Danbury AIX PS/2 compiler.
-
-Sat Dec 12 16:07:57 1992 Ian Lance Taylor (ian@cygnus.com)
-
- * i386.h: don't define BTYPE, ISPTR, ISFCN, ISARY, DECREF: they
- are defined in internal.h.
-
-Thu Nov 12 09:52:01 1992 Steve Chamberlain (sac@thepub.cygnus.com)
-
- * internal.h: (internal_reloc): r_offset is now a long.
- * z8k.h: slight comment enhancement
-
-Wed Sep 30 07:46:08 1992 Steve Chamberlain (sac@thepub.cygnus.com)
-
- * internal.h: changed z8k reloc types
-
-Fri Aug 28 10:16:31 1992 Brendan Kehoe (brendan@cygnus.com)
-
- * we32k.h: new file
-
-Thu Aug 27 13:00:01 1992 Brendan Kehoe (brendan@cygnus.com)
-
- * symconst.h: comment out cruft at the end of #endif
-
-Tue Aug 25 15:06:49 1992 Steve Chamberlain (sac@thepub.cygnus.com)
-
- * internal.h: added #define for STYP_LIT, removed from a29k and
- h8300.
-
- * z8k.h: added z8000 support
-
-Thu Jul 16 16:32:00 1992 Steve Chamberlain (sac@thepub.cygnus.com)
-
- * internal.h: added R_RELLONG_NEG reloc type
-
-Fri Jun 12 20:11:04 1992 John Gilmore (gnu at cygnus.com)
-
- * symconst.h: Fix unterminated comment.
-
-Wed Jun 10 07:57:49 1992 Steve Chamberlain (sac@thepub.cygnus.com)
-
- * i386.h: a.out magic numbers from
- mohring@informatik.tu-muenchen.de
-
-Mon Jun 8 20:13:33 1992 John Gilmore (gnu at cygnus.com)
-
- * ecoff-ext.h, mips.h: Use unsigned chars everywhere.
- (Suggested by Antti Miettinen.)
-
-Tue Apr 14 15:18:44 1992 John Gilmore (gnu at cygnus.com)
-
- * sym.h: Add comments.
- * symconst.h: Merge with Fred's changes.
-
-Tue Apr 14 14:30:05 1992 Fred Fish (fnf@cygnus.com)
-
- * symconst.h: Pick up SGI defines for stStruct, stUnion, stEnum,
- langCplusplus, and langCplusplusV2.
-
-Thu Apr 2 19:47:43 1992 John Gilmore (gnu at cygnus.com)
-
- * sym.h, symconst.h: MIPS has provided redistributable versions
- of these files. Thanks!
- * ecoff-ext.h: Add weakext bit to match new sym.h.
-
-Fri Mar 6 00:10:46 1992 John Gilmore (gnu at cygnus.com)
-
- * ecoff-ext.h: Add relative file descriptors.
-
-Thu Feb 27 11:53:04 1992 John Gilmore (gnu at cygnus.com)
-
- * ecoff-ext.h: New file for external (in-file) form of ecoff
- symbol structures.
-
-Thu Feb 6 11:33:32 1992 Steve Chamberlain (sac at rtl.cygnus.com)
-
- * h8300.h: made the external_lineno l_lnno field 4 bytes wide.
- andded GET/PUT_LINENO_LNNO macros
-
-Sat Nov 30 20:38:35 1991 Steve Chamberlain (sac at rtl.cygnus.com)
-
- * a29k.h, h8300.h, i386.h, i960.h, internal.h, m68k.h, m88k.h,
- mips.h, rs6000.h: Move from above coff-<foo>.h.
-
-
-Copyright (C) 1991-2003 Free Software Foundation, Inc.
-
-Copying and distribution of this file, with or without modification,
-are permitted in any medium without royalty provided the copyright
-notice and this notice are preserved.
-
-Local Variables:
-mode: change-log
-left-margin: 8
-fill-column: 74
-version-control: never
-End:
diff --git a/include/coff/alpha.h b/include/coff/alpha.h
deleted file mode 100644
index 81516892a..000000000
--- a/include/coff/alpha.h
+++ /dev/null
@@ -1,386 +0,0 @@
-/* ECOFF support on Alpha machines.
- coff/ecoff.h must be included before this file.
-
- Copyright 2001, 2005, 2010 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-/********************** FILE HEADER **********************/
-
-struct external_filehdr
-{
- unsigned char f_magic[2]; /* magic number */
- unsigned char f_nscns[2]; /* number of sections */
- unsigned char f_timdat[4]; /* time & date stamp */
- unsigned char f_symptr[8]; /* file pointer to symtab */
- unsigned char f_nsyms[4]; /* number of symtab entries */
- unsigned char f_opthdr[2]; /* sizeof(optional hdr) */
- unsigned char f_flags[2]; /* flags */
-};
-
-/* Magic numbers are defined in coff/ecoff.h. */
-#define ALPHA_ECOFF_BADMAG(x) \
- ((x).f_magic != ALPHA_MAGIC && (x).f_magic != ALPHA_MAGIC_BSD)
-
-#define ALPHA_ECOFF_COMPRESSEDMAG(x) \
- ((x).f_magic == ALPHA_MAGIC_COMPRESSED)
-
-/* The object type is encoded in the f_flags. */
-#define F_ALPHA_OBJECT_TYPE_MASK 0x3000
-#define F_ALPHA_NO_SHARED 0x1000
-#define F_ALPHA_SHARABLE 0x2000
-#define F_ALPHA_CALL_SHARED 0x3000
-
-#define FILHDR struct external_filehdr
-#define FILHSZ 24
-
-/********************** AOUT "OPTIONAL HEADER" **********************/
-
-typedef struct external_aouthdr
-{
- unsigned char magic[2]; /* type of file */
- unsigned char vstamp[2]; /* version stamp */
- unsigned char bldrev[2]; /* ?? */
- unsigned char padding[2]; /* pad to quadword boundary */
- unsigned char tsize[8]; /* text size in bytes */
- unsigned char dsize[8]; /* initialized data " " */
- unsigned char bsize[8]; /* uninitialized data " " */
- unsigned char entry[8]; /* entry pt. */
- unsigned char text_start[8]; /* base of text used for this file */
- unsigned char data_start[8]; /* base of data used for this file */
- unsigned char bss_start[8]; /* base of bss used for this file */
- unsigned char gprmask[4]; /* bitmask of general registers used */
- unsigned char fprmask[4]; /* bitmask of floating point registers used */
- unsigned char gp_value[8]; /* value for gp register */
-} AOUTHDR;
-
-/* compute size of a header */
-
-#define AOUTSZ 80
-#define AOUTHDRSZ 80
-
-/********************** SECTION HEADER **********************/
-
-struct external_scnhdr
-{
- unsigned char s_name[8]; /* section name */
- unsigned char s_paddr[8]; /* physical address, aliased s_nlib */
- unsigned char s_vaddr[8]; /* virtual address */
- unsigned char s_size[8]; /* section size */
- unsigned char s_scnptr[8]; /* file ptr to raw data for section */
- unsigned char s_relptr[8]; /* file ptr to relocation */
- unsigned char s_lnnoptr[8]; /* file ptr to line numbers */
- unsigned char s_nreloc[2]; /* number of relocation entries */
- unsigned char s_nlnno[2]; /* number of line number entries*/
- unsigned char s_flags[4]; /* flags */
-};
-
-#define SCNHDR struct external_scnhdr
-#define SCNHSZ 64
-
-/********************** RELOCATION DIRECTIVES **********************/
-
-struct external_reloc
-{
- unsigned char r_vaddr[8];
- unsigned char r_symndx[4];
- unsigned char r_bits[4];
-};
-
-#define RELOC struct external_reloc
-#define RELSZ 16
-
-/* Constants to unpack the r_bits field. The Alpha seems to always be
- little endian, so I haven't bothered to define big endian variants
- of these. */
-
-#define RELOC_BITS0_TYPE_LITTLE 0xff
-#define RELOC_BITS0_TYPE_SH_LITTLE 0
-
-#define RELOC_BITS1_EXTERN_LITTLE 0x01
-
-#define RELOC_BITS1_OFFSET_LITTLE 0x7e
-#define RELOC_BITS1_OFFSET_SH_LITTLE 1
-
-#define RELOC_BITS1_RESERVED_LITTLE 0x80
-#define RELOC_BITS1_RESERVED_SH_LITTLE 7
-#define RELOC_BITS2_RESERVED_LITTLE 0xff
-#define RELOC_BITS2_RESERVED_SH_LEFT_LITTLE 1
-#define RELOC_BITS3_RESERVED_LITTLE 0x03
-#define RELOC_BITS3_RESERVED_SH_LEFT_LITTLE 9
-
-#define RELOC_BITS3_SIZE_LITTLE 0xfc
-#define RELOC_BITS3_SIZE_SH_LITTLE 2
-
-/* The r_type field in a reloc is one of the following values. */
-#define ALPHA_R_IGNORE 0
-#define ALPHA_R_REFLONG 1
-#define ALPHA_R_REFQUAD 2
-#define ALPHA_R_GPREL32 3
-#define ALPHA_R_LITERAL 4
-#define ALPHA_R_LITUSE 5
-#define ALPHA_R_GPDISP 6
-#define ALPHA_R_BRADDR 7
-#define ALPHA_R_HINT 8
-#define ALPHA_R_SREL16 9
-#define ALPHA_R_SREL32 10
-#define ALPHA_R_SREL64 11
-#define ALPHA_R_OP_PUSH 12
-#define ALPHA_R_OP_STORE 13
-#define ALPHA_R_OP_PSUB 14
-#define ALPHA_R_OP_PRSHIFT 15
-#define ALPHA_R_GPVALUE 16
-#define ALPHA_R_GPRELHIGH 17
-#define ALPHA_R_GPRELLOW 18
-#define ALPHA_R_IMMED 19
-
-/* Overloaded reloc value used by Net- and OpenBSD. */
-#define ALPHA_R_LITERALSLEAZY 17
-
-/* With ALPHA_R_LITUSE, the r_size field is one of the following values. */
-#define ALPHA_R_LU_BASE 1
-#define ALPHA_R_LU_BYTOFF 2
-#define ALPHA_R_LU_JSR 3
-
-/* With ALPHA_R_IMMED, the r_size field is one of the following values. */
-#define ALPHA_R_IMMED_GP_16 1
-#define ALPHA_R_IMMED_GP_HI32 2
-#define ALPHA_R_IMMED_SCN_HI32 3
-#define ALPHA_R_IMMED_BR_HI32 4
-#define ALPHA_R_IMMED_LO32 5
-
-/********************** SYMBOLIC INFORMATION **********************/
-
-/* Written by John Gilmore. */
-
-/* ECOFF uses COFF-like section structures, but its own symbol format.
- This file defines the symbol format in fields whose size and alignment
- will not vary on different host systems. */
-
-/* File header as a set of bytes */
-
-struct hdr_ext
-{
- unsigned char h_magic[2];
- unsigned char h_vstamp[2];
- unsigned char h_ilineMax[4];
- unsigned char h_idnMax[4];
- unsigned char h_ipdMax[4];
- unsigned char h_isymMax[4];
- unsigned char h_ioptMax[4];
- unsigned char h_iauxMax[4];
- unsigned char h_issMax[4];
- unsigned char h_issExtMax[4];
- unsigned char h_ifdMax[4];
- unsigned char h_crfd[4];
- unsigned char h_iextMax[4];
- unsigned char h_cbLine[8];
- unsigned char h_cbLineOffset[8];
- unsigned char h_cbDnOffset[8];
- unsigned char h_cbPdOffset[8];
- unsigned char h_cbSymOffset[8];
- unsigned char h_cbOptOffset[8];
- unsigned char h_cbAuxOffset[8];
- unsigned char h_cbSsOffset[8];
- unsigned char h_cbSsExtOffset[8];
- unsigned char h_cbFdOffset[8];
- unsigned char h_cbRfdOffset[8];
- unsigned char h_cbExtOffset[8];
-};
-
-/* File descriptor external record */
-
-struct fdr_ext
-{
- unsigned char f_adr[8];
- unsigned char f_cbLineOffset[8];
- unsigned char f_cbLine[8];
- unsigned char f_cbSs[8];
- unsigned char f_rss[4];
- unsigned char f_issBase[4];
- unsigned char f_isymBase[4];
- unsigned char f_csym[4];
- unsigned char f_ilineBase[4];
- unsigned char f_cline[4];
- unsigned char f_ioptBase[4];
- unsigned char f_copt[4];
- unsigned char f_ipdFirst[4];
- unsigned char f_cpd[4];
- unsigned char f_iauxBase[4];
- unsigned char f_caux[4];
- unsigned char f_rfdBase[4];
- unsigned char f_crfd[4];
- unsigned char f_bits1[1];
- unsigned char f_bits2[3];
- unsigned char f_padding[4];
-};
-
-#define FDR_BITS1_LANG_BIG 0xF8
-#define FDR_BITS1_LANG_SH_BIG 3
-#define FDR_BITS1_LANG_LITTLE 0x1F
-#define FDR_BITS1_LANG_SH_LITTLE 0
-
-#define FDR_BITS1_FMERGE_BIG 0x04
-#define FDR_BITS1_FMERGE_LITTLE 0x20
-
-#define FDR_BITS1_FREADIN_BIG 0x02
-#define FDR_BITS1_FREADIN_LITTLE 0x40
-
-#define FDR_BITS1_FBIGENDIAN_BIG 0x01
-#define FDR_BITS1_FBIGENDIAN_LITTLE 0x80
-
-#define FDR_BITS2_GLEVEL_BIG 0xC0
-#define FDR_BITS2_GLEVEL_SH_BIG 6
-#define FDR_BITS2_GLEVEL_LITTLE 0x03
-#define FDR_BITS2_GLEVEL_SH_LITTLE 0
-
-/* We ignore the `reserved' field in bits2. */
-
-/* Procedure descriptor external record */
-
-struct pdr_ext {
- unsigned char p_adr[8];
- unsigned char p_cbLineOffset[8];
- unsigned char p_isym[4];
- unsigned char p_iline[4];
- unsigned char p_regmask[4];
- unsigned char p_regoffset[4];
- unsigned char p_iopt[4];
- unsigned char p_fregmask[4];
- unsigned char p_fregoffset[4];
- unsigned char p_frameoffset[4];
- unsigned char p_lnLow[4];
- unsigned char p_lnHigh[4];
- unsigned char p_gp_prologue[1];
- unsigned char p_bits1[1];
- unsigned char p_bits2[1];
- unsigned char p_localoff[1];
- unsigned char p_framereg[2];
- unsigned char p_pcreg[2];
-};
-
-#define PDR_BITS1_GP_USED_BIG 0x80
-#define PDR_BITS1_REG_FRAME_BIG 0x40
-#define PDR_BITS1_PROF_BIG 0x20
-#define PDR_BITS1_RESERVED_BIG 0x1f
-#define PDR_BITS1_RESERVED_SH_LEFT_BIG 8
-#define PDR_BITS2_RESERVED_BIG 0xff
-#define PDR_BITS2_RESERVED_SH_BIG 0
-
-#define PDR_BITS1_GP_USED_LITTLE 0x01
-#define PDR_BITS1_REG_FRAME_LITTLE 0x02
-#define PDR_BITS1_PROF_LITTLE 0x04
-#define PDR_BITS1_RESERVED_LITTLE 0xf8
-#define PDR_BITS1_RESERVED_SH_LITTLE 3
-#define PDR_BITS2_RESERVED_LITTLE 0xff
-#define PDR_BITS2_RESERVED_SH_LEFT_LITTLE 5
-
-/* Line numbers */
-
-struct line_ext {
- unsigned char l_line[4];
-};
-
-/* Symbol external record */
-
-struct sym_ext {
- unsigned char s_value[8];
- unsigned char s_iss[4];
- unsigned char s_bits1[1];
- unsigned char s_bits2[1];
- unsigned char s_bits3[1];
- unsigned char s_bits4[1];
-};
-
-#define SYM_BITS1_ST_BIG 0xFC
-#define SYM_BITS1_ST_SH_BIG 2
-#define SYM_BITS1_ST_LITTLE 0x3F
-#define SYM_BITS1_ST_SH_LITTLE 0
-
-#define SYM_BITS1_SC_BIG 0x03
-#define SYM_BITS1_SC_SH_LEFT_BIG 3
-#define SYM_BITS1_SC_LITTLE 0xC0
-#define SYM_BITS1_SC_SH_LITTLE 6
-
-#define SYM_BITS2_SC_BIG 0xE0
-#define SYM_BITS2_SC_SH_BIG 5
-#define SYM_BITS2_SC_LITTLE 0x07
-#define SYM_BITS2_SC_SH_LEFT_LITTLE 2
-
-#define SYM_BITS2_RESERVED_BIG 0x10
-#define SYM_BITS2_RESERVED_LITTLE 0x08
-
-#define SYM_BITS2_INDEX_BIG 0x0F
-#define SYM_BITS2_INDEX_SH_LEFT_BIG 16
-#define SYM_BITS2_INDEX_LITTLE 0xF0
-#define SYM_BITS2_INDEX_SH_LITTLE 4
-
-#define SYM_BITS3_INDEX_SH_LEFT_BIG 8
-#define SYM_BITS3_INDEX_SH_LEFT_LITTLE 4
-
-#define SYM_BITS4_INDEX_SH_LEFT_BIG 0
-#define SYM_BITS4_INDEX_SH_LEFT_LITTLE 12
-
-/* External symbol external record */
-
-struct ext_ext {
- struct sym_ext es_asym;
- unsigned char es_bits1[1];
- unsigned char es_bits2[3];
- unsigned char es_ifd[4];
-};
-
-#define EXT_BITS1_JMPTBL_BIG 0x80
-#define EXT_BITS1_JMPTBL_LITTLE 0x01
-
-#define EXT_BITS1_COBOL_MAIN_BIG 0x40
-#define EXT_BITS1_COBOL_MAIN_LITTLE 0x02
-
-#define EXT_BITS1_WEAKEXT_BIG 0x20
-#define EXT_BITS1_WEAKEXT_LITTLE 0x04
-
-/* Dense numbers external record */
-
-struct dnr_ext {
- unsigned char d_rfd[4];
- unsigned char d_index[4];
-};
-
-/* Relative file descriptor */
-
-struct rfd_ext {
- unsigned char rfd[4];
-};
-
-/* Optimizer symbol external record */
-
-struct opt_ext {
- unsigned char o_bits1[1];
- unsigned char o_bits2[1];
- unsigned char o_bits3[1];
- unsigned char o_bits4[1];
- struct rndx_ext o_rndx;
- unsigned char o_offset[4];
-};
-
-#define OPT_BITS2_VALUE_SH_LEFT_BIG 16
-#define OPT_BITS2_VALUE_SH_LEFT_LITTLE 0
-
-#define OPT_BITS3_VALUE_SH_LEFT_BIG 8
-#define OPT_BITS3_VALUE_SH_LEFT_LITTLE 8
-
-#define OPT_BITS4_VALUE_SH_LEFT_BIG 0
-#define OPT_BITS4_VALUE_SH_LEFT_LITTLE 16
diff --git a/include/coff/apollo.h b/include/coff/apollo.h
deleted file mode 100644
index 1d4802f11..000000000
--- a/include/coff/apollo.h
+++ /dev/null
@@ -1,125 +0,0 @@
-/* coff information for Apollo M68K
-
- Copyright 2001, 2010 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#define DO_NOT_DEFINE_AOUTHDR
-#define L_LNNO_SIZE 2
-#include "coff/external.h"
-
-/* Motorola 68000/68008/68010/68020 */
-#define MC68MAGIC 0520
-#define MC68KWRMAGIC 0520 /* writeable text segments */
-#define MC68TVMAGIC 0521
-#define MC68KROMAGIC 0521 /* readonly shareable text segments */
-#define MC68KPGMAGIC 0522 /* demand paged text segments */
-#define M68MAGIC 0210
-#define M68TVMAGIC 0211
-
-/* Apollo 68000-based machines have a different magic number. This comes
- * from /usr/include/apollo/filehdr.h
- */
-#define APOLLOM68KMAGIC 0627
-
-#define OMAGIC M68MAGIC
-#define M68KBADMAG(x) (((x).f_magic!=MC68MAGIC) && ((x).f_magic!=MC68KWRMAGIC) && ((x).f_magic!=MC68TVMAGIC) && \
- ((x).f_magic!=MC68KROMAGIC) && ((x).f_magic!=MC68KPGMAGIC) && ((x).f_magic!=M68MAGIC) && ((x).f_magic!=M68TVMAGIC) && \
- ((x).f_magic!=APOLLOM68KMAGIC) )
-
-/********************** AOUT "OPTIONAL HEADER" **********************/
-
-typedef struct
-{
- char magic[2]; /* type of file */
- char vstamp[2]; /* version stamp */
- char tsize[4]; /* text size in bytes, padded to FW bdry*/
- char dsize[4]; /* initialized data " " */
- char bsize[4]; /* uninitialized data " " */
- char entry[4]; /* entry pt. */
- char text_start[4]; /* base of text used for this file */
- char data_start[4]; /* base of data used for this file */
- char o_sri[4]; /* Apollo specific - .sri data pointer */
- char o_inlib[4]; /* Apollo specific - .inlib data pointer */
- char vid[8]; /* Apollo specific - 64 bit version ID */
-}
-AOUTHDR;
-
-#define APOLLO_COFF_VERSION_NUMBER 1 /* the value of the aouthdr magic */
-#define AOUTHDRSZ 44
-#define AOUTSZ 44
-
-/* Apollo allowa for larger section names by allowing
- them to be in the string table. */
-
-/* If s_zeores is all zeroes, s_offset gives the real
- location of the name in the string table. */
-
-#define s_zeroes section_name.s_name
-#define s_offset (section_name.s_name+4)
-
-/* More names of "special" sections. */
-#define _TV ".tv"
-#define _INIT ".init"
-#define _FINI ".fini"
-#define _LINES ".lines"
-#define _BLOCKS ".blocks"
-#define _SRI ".sri" /* Static Resource Information (systype,
- et al.) */
-#define _MIR ".mir" /* Module Information Records */
-#define _APTV ".aptv" /* Apollo-style transfer vectors. */
-#define _INLIB ".inlib" /* Shared Library information */
-#define _RWDI ".rwdi" /* Read/write data initialization directives for
- compressed sections */
-#define _UNWIND ".unwind" /* Stack unwind information */
-
-/********************** RELOCATION DIRECTIVES **********************/
-
-struct external_reloc
-{
- char r_vaddr[4];
- char r_symndx[4];
- char r_type[2];
-#ifdef M68K_COFF_OFFSET
- char r_offset[4];
-#endif
-
-};
-
-#define RELOC struct external_reloc
-
-#ifdef M68K_COFF_OFFSET
-#define RELSZ 14
-#else
-#define RELSZ 10
-#endif
-
-/* Apollo specific STYP flags */
-
-#define STYP_RELOCATED_NOT_LOADED 0x00010000 /* Section is relocated normally during linking, but need
- not be loaded during program execution */
-#define STYP_DEBUG 0x00020000 /* debug section */
-#define STYP_OVERLAY 0x00040000 /* Section is overlayed */
-#define STYP_INSTRUCTION 0x00200000 /* Section contains executable code */
-
-#define STYP_ZERO 0x00800000 /* Section is initialized to zero */
-#define STYP_INSTALLED 0x02000000 /* Section should be installable in KGT */
-#define STYP_LOOK_INSTALLED 0x04000000 /* Look for section in KGT */
-#define STYP_SECALIGN1 0x08000000 /* Specially aligned section */
-#define STYP_SECALIGN2 0x10000000 /* " " " */
-#define STYP_COMPRESSED 0x20000000 /* No section data per se (s_scnptr = 0), but there are
- initialization directives for it in .rwdi section
- (used in conjunction with STYP_BSS) */
diff --git a/include/coff/arm.h b/include/coff/arm.h
deleted file mode 100644
index 4beb12122..000000000
--- a/include/coff/arm.h
+++ /dev/null
@@ -1,130 +0,0 @@
-/* ARM COFF support for BFD.
- Copyright 1998, 1999, 2000, 2002, 2003, 2010, 2013
- Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#define COFFARM 1
-
-#define L_LNNO_SIZE 2
-#define INCLUDE_COMDAT_FIELDS_IN_AUXENT
-#include "coff/external.h"
-
-/* Bits for f_flags:
- F_RELFLG relocation info stripped from file
- F_EXEC file is executable (no unresolved external references)
- F_LNNO line numbers stripped from file
- F_LSYMS local symbols stripped from file
- F_INTERWORK file supports switching between ARM and Thumb instruction sets
- F_INTERWORK_SET the F_INTERWORK bit is valid
- F_APCS_FLOAT code passes float arguments in float registers
- F_PIC code is reentrant/position-independent
- F_AR32WR file has byte ordering of an AR32WR machine (e.g. vax)
- F_APCS_26 file uses 26 bit ARM Procedure Calling Standard
- F_APCS_SET the F_APCS_26, F_APCS_FLOAT and F_PIC bits have been initialised
- F_SOFT_FLOAT code does not use floating point instructions. */
-
-#define F_RELFLG (0x0001)
-#define F_EXEC (0x0002)
-#define F_LNNO (0x0004)
-#define F_LSYMS (0x0008)
-#define F_INTERWORK (0x0010)
-#define F_INTERWORK_SET (0x0020)
-#define F_APCS_FLOAT (0x0040)
-#undef F_AR16WR
-#define F_PIC (0x0080)
-#define F_AR32WR (0x0100)
-#define F_APCS_26 (0x0400)
-#define F_APCS_SET (0x0800)
-#define F_SOFT_FLOAT (0x2000)
-#define F_VFP_FLOAT (0x4000)
-
-/* Bits stored in flags field of the internal_f structure */
-
-#define F_INTERWORK (0x0010)
-#define F_APCS_FLOAT (0x0040)
-#define F_PIC (0x0080)
-#define F_APCS26 (0x1000)
-#define F_ARM_ARCHITECTURE_MASK (0x4000+0x0800+0x0400)
-#define F_ARM_2 (0x0400)
-#define F_ARM_2a (0x0800)
-#define F_ARM_3 (0x0c00)
-#define F_ARM_3M (0x4000)
-#define F_ARM_4 (0x4400)
-#define F_ARM_4T (0x4800)
-#define F_ARM_5 (0x4c00)
-
-/*
- ARMMAGIC ought to encoded the procesor type,
- but it is too late to change it now, instead
- the flags field of the internal_f structure
- is used as shown above.
-
- XXX - NC 5/6/97. */
-
-#define ARMMAGIC 0xa00 /* I just made this up */
-
-#define ARMBADMAG(x) (((x).f_magic != ARMMAGIC))
-
-#define ARMPEMAGIC 0x1c0
-#define THUMBPEMAGIC 0x1c2
-#define ARMV7PEMAGIC 0x1c4
-
-#undef ARMBADMAG
-#define ARMBADMAG(x) (((x).f_magic != ARMMAGIC) && ((x).f_magic != ARMPEMAGIC) && ((x).f_magic != THUMBPEMAGIC) && ((x).f_magic != ARMV7PEMAGIC))
-
-#define OMAGIC 0404 /* object files, eg as output */
-#define ZMAGIC 0413 /* demand load format, eg normal ld output */
-#define STMAGIC 0401 /* target shlib */
-#define SHMAGIC 0443 /* host shlib */
-
-/* define some NT default values */
-/* #define NT_IMAGE_BASE 0x400000 moved to internal.h */
-#define NT_SECTION_ALIGNMENT 0x1000
-#define NT_FILE_ALIGNMENT 0x200
-#define NT_DEF_RESERVE 0x100000
-#define NT_DEF_COMMIT 0x1000
-
-/* We use the .rdata section to hold read only data. */
-#define _LIT ".rdata"
-
-/********************** RELOCATION DIRECTIVES **********************/
-#ifdef ARM_WINCE
-struct external_reloc
-{
- char r_vaddr[4];
- char r_symndx[4];
- char r_type[2];
-};
-
-#define RELOC struct external_reloc
-#define RELSZ 10
-
-#else
-struct external_reloc
-{
- char r_vaddr[4];
- char r_symndx[4];
- char r_type[2];
- char r_offset[4];
-};
-
-#define RELOC struct external_reloc
-#define RELSZ 14
-#endif
-
-#define ARM_NOTE_SECTION ".note"
diff --git a/include/coff/aux-coff.h b/include/coff/aux-coff.h
deleted file mode 100644
index de7979a6a..000000000
--- a/include/coff/aux-coff.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/* Modifications of internal.h and m68k.h needed by A/UX
-
- Copyright 2001, 2010 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA.
-
- Suggested by Ian Lance Taylor <ian@cygnus.com> */
-
-#ifndef GNU_COFF_AUX_H
-#define GNU_COFF_AUX_H 1
-
-#include "coff/internal.h"
-#include "coff/m68k.h"
-
-/* Section contains 64-byte padded pathnames of shared libraries */
-#undef STYP_LIB
-#define STYP_LIB 0x200
-
-/* Section contains shared library initialization code */
-#undef STYP_INIT
-#define STYP_INIT 0x400
-
-/* Section contains .ident information */
-#undef STYP_IDENT
-#define STYP_IDENT 0x800
-
-/* Section types used by bfd and gas not defined (directly) by A/UX */
-#undef STYP_OVER
-#define STYP_OVER 0
-#undef STYP_INFO
-#define STYP_INFO STYP_IDENT
-
-/* Traditional name of the section tagged with STYP_LIB */
-#define _LIB ".lib"
-
-#endif /* GNU_COFF_AUX_H */
diff --git a/include/coff/ecoff.h b/include/coff/ecoff.h
deleted file mode 100644
index a7991a998..000000000
--- a/include/coff/ecoff.h
+++ /dev/null
@@ -1,411 +0,0 @@
-/* Generic ECOFF support.
- This does not include symbol information, found in sym.h and
- symconst.h.
-
- Copyright 2001, 2002, 2003, 2004, 2005, 2010 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef ECOFF_H
-#define ECOFF_H
-
-/* Mips magic numbers used in filehdr. MIPS_MAGIC_LITTLE is used on
- little endian machines. MIPS_MAGIC_BIG is used on big endian
- machines. Where is MIPS_MAGIC_1 from? */
-#define MIPS_MAGIC_1 0x0180
-#define MIPS_MAGIC_LITTLE 0x0162
-#define MIPS_MAGIC_BIG 0x0160
-
-/* These are the magic numbers used for MIPS code compiled at ISA
- level 2. */
-#define MIPS_MAGIC_LITTLE2 0x0166
-#define MIPS_MAGIC_BIG2 0x0163
-
-/* These are the magic numbers used for MIPS code compiled at ISA
- level 3. */
-#define MIPS_MAGIC_LITTLE3 0x142
-#define MIPS_MAGIC_BIG3 0x140
-
-/* Alpha magic numbers used in filehdr. */
-#define ALPHA_MAGIC 0x183
-#define ALPHA_MAGIC_BSD 0x185
-/* A compressed version of an ALPHA_MAGIC file created by DEC's tools. */
-#define ALPHA_MAGIC_COMPRESSED 0x188
-
-/* Magic numbers used in a.out header. */
-#define ECOFF_AOUT_OMAGIC 0407 /* not demand paged (ld -N). */
-#define ECOFF_AOUT_ZMAGIC 0413 /* demand load format, eg normal ld output */
-
-/* Names of special sections. */
-#define _TEXT ".text"
-#define _DATA ".data"
-#define _BSS ".bss"
-#define _RDATA ".rdata"
-#define _SDATA ".sdata"
-#define _SBSS ".sbss"
-#define _LITA ".lita"
-#define _LIT4 ".lit4"
-#define _LIT8 ".lit8"
-#define _LIB ".lib"
-#define _INIT ".init"
-#define _FINI ".fini"
-#define _PDATA ".pdata"
-#define _XDATA ".xdata"
-#define _GOT ".got"
-#define _HASH ".hash"
-#define _DYNSYM ".dynsym"
-#define _DYNSTR ".dynstr"
-#define _RELDYN ".rel.dyn"
-#define _CONFLIC ".conflic"
-#define _COMMENT ".comment"
-#define _LIBLIST ".liblist"
-#define _DYNAMIC ".dynamic"
-#define _RCONST ".rconst"
-
-/* ECOFF uses some additional section flags. */
-#define STYP_RDATA 0x100
-#define STYP_SDATA 0x200
-#define STYP_SBSS 0x400
-#define STYP_GOT 0x1000
-#define STYP_DYNAMIC 0x2000
-#define STYP_DYNSYM 0x4000
-#define STYP_RELDYN 0x8000
-#define STYP_DYNSTR 0x10000
-#define STYP_HASH 0x20000
-#define STYP_LIBLIST 0x40000
-#define STYP_CONFLIC 0x100000
-#define STYP_ECOFF_FINI 0x1000000
-#define STYP_EXTENDESC 0x2000000 /* 0x02FFF000 bits => scn type, rest clr */
-#define STYP_LITA 0x4000000
-#define STYP_LIT8 0x8000000
-#define STYP_LIT4 0x10000000
-#define STYP_ECOFF_LIB 0x40000000
-#define STYP_ECOFF_INIT 0x80000000
-#define STYP_OTHER_LOAD (STYP_ECOFF_INIT | STYP_ECOFF_FINI)
-
-/* extended section types */
-#define STYP_COMMENT 0x2100000
-#define STYP_RCONST 0x2200000
-#define STYP_XDATA 0x2400000
-#define STYP_PDATA 0x2800000
-
-/* The linker needs a section to hold small common variables while
- linking. There is no convenient way to create it when the linker
- needs it, so we always create one for each BFD. We then avoid
- writing it out. */
-#define SCOMMON ".scommon"
-
-/* If the extern bit in a reloc is 1, then r_symndx is an index into
- the external symbol table. If the extern bit is 0, then r_symndx
- indicates a section, and is one of the following values. */
-#define RELOC_SECTION_NONE 0
-#define RELOC_SECTION_TEXT 1
-#define RELOC_SECTION_RDATA 2
-#define RELOC_SECTION_DATA 3
-#define RELOC_SECTION_SDATA 4
-#define RELOC_SECTION_SBSS 5
-#define RELOC_SECTION_BSS 6
-#define RELOC_SECTION_INIT 7
-#define RELOC_SECTION_LIT8 8
-#define RELOC_SECTION_LIT4 9
-#define RELOC_SECTION_XDATA 10
-#define RELOC_SECTION_PDATA 11
-#define RELOC_SECTION_FINI 12
-#define RELOC_SECTION_LITA 13
-#define RELOC_SECTION_ABS 14
-#define RELOC_SECTION_RCONST 15
-
-#define NUM_RELOC_SECTIONS 16
-
-/********************** STABS **********************/
-
-/* gcc uses mips-tfile to output type information in special stabs
- entries. These must match the corresponding definition in
- gcc/config/mips.h. At some point, these should probably go into a
- shared include file, but currently gcc and gdb do not share any
- directories. */
-#define CODE_MASK 0x8F300
-#define ECOFF_IS_STAB(sym) (((sym)->index & 0xFFF00) == CODE_MASK)
-#define ECOFF_MARK_STAB(code) ((code)+CODE_MASK)
-#define ECOFF_UNMARK_STAB(code) ((code)-CODE_MASK)
-#define STABS_SYMBOL "@stabs"
-
-/********************** COFF **********************/
-
-/* gcc also uses mips-tfile to output COFF debugging information.
- These are the values it uses when outputting the .type directive.
- These should also be in a shared include file. */
-#define N_BTMASK (017)
-#define N_TMASK (060)
-#define N_BTSHFT (4)
-#define N_TSHIFT (2)
-
-/********************** AUX **********************/
-
-/* The auxiliary type information is the same on all known ECOFF
- targets. I can't see any reason that it would ever change, so I am
- going to gamble and define the external structures here, in the
- target independent ECOFF header file. The internal forms are
- defined in coff/sym.h, which was originally donated by MIPS
- Computer Systems. */
-
-/* Type information external record */
-
-struct tir_ext {
- unsigned char t_bits1[1];
- unsigned char t_tq45[1];
- unsigned char t_tq01[1];
- unsigned char t_tq23[1];
-};
-
-#define TIR_BITS1_FBITFIELD_BIG ((unsigned int) 0x80)
-#define TIR_BITS1_FBITFIELD_LITTLE ((unsigned int) 0x01)
-
-#define TIR_BITS1_CONTINUED_BIG ((unsigned int) 0x40)
-#define TIR_BITS1_CONTINUED_LITTLE ((unsigned int) 0x02)
-
-#define TIR_BITS1_BT_BIG ((unsigned int) 0x3F)
-#define TIR_BITS1_BT_SH_BIG 0
-#define TIR_BITS1_BT_LITTLE ((unsigned int) 0xFC)
-#define TIR_BITS1_BT_SH_LITTLE 2
-
-#define TIR_BITS_TQ4_BIG ((unsigned int) 0xF0)
-#define TIR_BITS_TQ4_SH_BIG 4
-#define TIR_BITS_TQ5_BIG ((unsigned int) 0x0F)
-#define TIR_BITS_TQ5_SH_BIG 0
-#define TIR_BITS_TQ4_LITTLE ((unsigned int) 0x0F)
-#define TIR_BITS_TQ4_SH_LITTLE 0
-#define TIR_BITS_TQ5_LITTLE ((unsigned int) 0xF0)
-#define TIR_BITS_TQ5_SH_LITTLE 4
-
-#define TIR_BITS_TQ0_BIG ((unsigned int) 0xF0)
-#define TIR_BITS_TQ0_SH_BIG 4
-#define TIR_BITS_TQ1_BIG ((unsigned int) 0x0F)
-#define TIR_BITS_TQ1_SH_BIG 0
-#define TIR_BITS_TQ0_LITTLE ((unsigned int) 0x0F)
-#define TIR_BITS_TQ0_SH_LITTLE 0
-#define TIR_BITS_TQ1_LITTLE ((unsigned int) 0xF0)
-#define TIR_BITS_TQ1_SH_LITTLE 4
-
-#define TIR_BITS_TQ2_BIG ((unsigned int) 0xF0)
-#define TIR_BITS_TQ2_SH_BIG 4
-#define TIR_BITS_TQ3_BIG ((unsigned int) 0x0F)
-#define TIR_BITS_TQ3_SH_BIG 0
-#define TIR_BITS_TQ2_LITTLE ((unsigned int) 0x0F)
-#define TIR_BITS_TQ2_SH_LITTLE 0
-#define TIR_BITS_TQ3_LITTLE ((unsigned int) 0xF0)
-#define TIR_BITS_TQ3_SH_LITTLE 4
-
-/* Relative symbol external record */
-
-struct rndx_ext {
- unsigned char r_bits[4];
-};
-
-#define RNDX_BITS0_RFD_SH_LEFT_BIG 4
-#define RNDX_BITS1_RFD_BIG ((unsigned int) 0xF0)
-#define RNDX_BITS1_RFD_SH_BIG 4
-
-#define RNDX_BITS0_RFD_SH_LEFT_LITTLE 0
-#define RNDX_BITS1_RFD_LITTLE ((unsigned int) 0x0F)
-#define RNDX_BITS1_RFD_SH_LEFT_LITTLE 8
-
-#define RNDX_BITS1_INDEX_BIG ((unsigned int) 0x0F)
-#define RNDX_BITS1_INDEX_SH_LEFT_BIG 16
-#define RNDX_BITS2_INDEX_SH_LEFT_BIG 8
-#define RNDX_BITS3_INDEX_SH_LEFT_BIG 0
-
-#define RNDX_BITS1_INDEX_LITTLE ((unsigned int) 0xF0)
-#define RNDX_BITS1_INDEX_SH_LITTLE 4
-#define RNDX_BITS2_INDEX_SH_LEFT_LITTLE 4
-#define RNDX_BITS3_INDEX_SH_LEFT_LITTLE 12
-
-/* Auxiliary symbol information external record */
-
-union aux_ext {
- struct tir_ext a_ti;
- struct rndx_ext a_rndx;
- unsigned char a_dnLow[4];
- unsigned char a_dnHigh[4];
- unsigned char a_isym[4];
- unsigned char a_iss[4];
- unsigned char a_width[4];
- unsigned char a_count[4];
-};
-
-#define AUX_GET_ANY(bigend, ax, field) \
- ((bigend) ? bfd_getb32 ((ax)->field) : bfd_getl32 ((ax)->field))
-
-#define AUX_GET_DNLOW(bigend, ax) AUX_GET_ANY ((bigend), (ax), a_dnLow)
-#define AUX_GET_DNHIGH(bigend, ax) AUX_GET_ANY ((bigend), (ax), a_dnHigh)
-#define AUX_GET_ISYM(bigend, ax) AUX_GET_ANY ((bigend), (ax), a_isym)
-#define AUX_GET_ISS(bigend, ax) AUX_GET_ANY ((bigend), (ax), a_iss)
-#define AUX_GET_WIDTH(bigend, ax) AUX_GET_ANY ((bigend), (ax), a_width)
-#define AUX_GET_COUNT(bigend, ax) AUX_GET_ANY ((bigend), (ax), a_count)
-
-#define AUX_PUT_ANY(bigend, val, ax, field) \
- ((bigend) \
- ? (bfd_putb32 ((bfd_vma) (val), (ax)->field), 0) \
- : (bfd_putl32 ((bfd_vma) (val), (ax)->field), 0))
-
-#define AUX_PUT_DNLOW(bigend, val, ax) \
- AUX_PUT_ANY ((bigend), (val), (ax), a_dnLow)
-#define AUX_PUT_DNHIGH(bigend, val, ax) \
- AUX_PUT_ANY ((bigend), (val), (ax), a_dnHigh)
-#define AUX_PUT_ISYM(bigend, val, ax) \
- AUX_PUT_ANY ((bigend), (val), (ax), a_isym)
-#define AUX_PUT_ISS(bigend, val, ax) \
- AUX_PUT_ANY ((bigend), (val), (ax), a_iss)
-#define AUX_PUT_WIDTH(bigend, val, ax) \
- AUX_PUT_ANY ((bigend), (val), (ax), a_width)
-#define AUX_PUT_COUNT(bigend, val, ax) \
- AUX_PUT_ANY ((bigend), (val), (ax), a_count)
-
-/********************** SYMBOLS **********************/
-
-/* For efficiency, gdb deals directly with the unswapped symbolic
- information (that way it only takes the time to swap information
- that it really needs to read). gdb originally retrieved the
- information directly from the BFD backend information, but that
- strategy, besides being sort of ugly, does not work for MIPS ELF,
- which also uses ECOFF debugging information. This structure holds
- pointers to the (mostly) unswapped symbolic information. */
-
-struct ecoff_debug_info
-{
- /* The swapped ECOFF symbolic header. */
- HDRR symbolic_header;
-
- /* Pointers to the unswapped symbolic information. Note that the
- pointers to external structures point to different sorts of
- information on different ECOFF targets. The ecoff_debug_swap
- structure provides the sizes of the structures and the functions
- needed to swap the information in and out. These pointers are
- all pointers to arrays, not single structures. They will be NULL
- if there are no instances of the relevant structure. These
- fields are also used by the assembler to output ECOFF debugging
- information. */
- unsigned char *line;
- void *external_dnr; /* struct dnr_ext */
- void *external_pdr; /* struct pdr_ext */
- void *external_sym; /* struct sym_ext */
- void *external_opt; /* struct opt_ext */
- union aux_ext *external_aux;
- char *ss;
- char *ssext;
- void *external_fdr; /* struct fdr_ext */
- void *external_rfd; /* struct rfd_ext */
- void *external_ext; /* struct ext_ext */
-
- /* These fields are used when linking. They may disappear at some
- point. */
- char *ssext_end;
- void *external_ext_end;
-
- /* When linking, this field holds a mapping from the input FDR
- numbers to the output numbers, and is used when writing out the
- external symbols. It is NULL if no mapping is required. */
- RFDT *ifdmap;
-
- /* The swapped FDR information. Currently this is never NULL, but
- code using this structure should probably double-check in case
- this changes in the future. This is a pointer to an array, not a
- single structure. */
- FDR *fdr;
-};
-
-/* These structures are used by the ECOFF find_nearest_line function. */
-
-struct ecoff_fdrtab_entry
-{
- /* Base address in .text of this FDR. */
- bfd_vma base_addr;
- FDR *fdr;
-};
-
-struct ecoff_find_line
-{
- /* Allocated memory to hold function and file names. */
- char *find_buffer;
-
- /* FDR table, sorted by address: */
- long fdrtab_len;
- struct ecoff_fdrtab_entry *fdrtab;
-
- /* Cache entry for most recently found line information. The sect
- field is NULL if this cache does not contain valid information. */
- struct
- {
- asection *sect;
- bfd_vma start;
- bfd_vma stop;
- const char *filename;
- const char *functionname;
- unsigned int line_num;
- } cache;
-};
-
-/********************** SWAPPING **********************/
-
-/* The generic ECOFF code needs to be able to swap debugging
- information in and out in the specific format used by a particular
- ECOFF implementation. This structure provides the information
- needed to do this. */
-
-struct ecoff_debug_swap
-{
- /* Symbol table magic number. */
- int sym_magic;
- /* Alignment of debugging information. E.g., 4. */
- bfd_size_type debug_align;
- /* Sizes of external symbolic information. */
- bfd_size_type external_hdr_size;
- bfd_size_type external_dnr_size;
- bfd_size_type external_pdr_size;
- bfd_size_type external_sym_size;
- bfd_size_type external_opt_size;
- bfd_size_type external_fdr_size;
- bfd_size_type external_rfd_size;
- bfd_size_type external_ext_size;
- /* Functions to swap in external symbolic data. */
- void (*swap_hdr_in) (bfd *, void *, HDRR *);
- void (*swap_dnr_in) (bfd *, void *, DNR *);
- void (*swap_pdr_in) (bfd *, void *, PDR *);
- void (*swap_sym_in) (bfd *, void *, SYMR *);
- void (*swap_opt_in) (bfd *, void *, OPTR *);
- void (*swap_fdr_in) (bfd *, void *, FDR *);
- void (*swap_rfd_in) (bfd *, void *, RFDT *);
- void (*swap_ext_in) (bfd *, void *, EXTR *);
- void (*swap_tir_in) (int, const struct tir_ext *, TIR *);
- void (*swap_rndx_in) (int, const struct rndx_ext *, RNDXR *);
- /* Functions to swap out external symbolic data. */
- void (*swap_hdr_out) (bfd *, const HDRR *, void *);
- void (*swap_dnr_out) (bfd *, const DNR *, void *);
- void (*swap_pdr_out) (bfd *, const PDR *, void *);
- void (*swap_sym_out) (bfd *, const SYMR *, void *);
- void (*swap_opt_out) (bfd *, const OPTR *, void *);
- void (*swap_fdr_out) (bfd *, const FDR *, void *);
- void (*swap_rfd_out) (bfd *, const RFDT *, void *);
- void (*swap_ext_out) (bfd *, const EXTR *, void *);
- void (*swap_tir_out) (int, const TIR *, struct tir_ext *);
- void (*swap_rndx_out) (int, const RNDXR *, struct rndx_ext *);
- /* Function to read symbol data and set up pointers in
- ecoff_debug_info structure. The section argument is used for
- ELF, not straight ECOFF. */
- bfd_boolean (*read_debug_info) (bfd *, asection *, struct ecoff_debug_info *);
-};
-
-#endif /* ! defined (ECOFF_H) */
diff --git a/include/coff/external.h b/include/coff/external.h
deleted file mode 100644
index 4bf594d3d..000000000
--- a/include/coff/external.h
+++ /dev/null
@@ -1,269 +0,0 @@
-/* external.h -- External COFF structures
-
- Copyright 2001, 2006, 2010 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef COFF_EXTERNAL_H
-#define COFF_EXTERNAL_H
-
-#ifndef DO_NOT_DEFINE_FILHDR
-/********************** FILE HEADER **********************/
-
-struct external_filehdr
- {
- char f_magic[2]; /* magic number */
- char f_nscns[2]; /* number of sections */
- char f_timdat[4]; /* time & date stamp */
- char f_symptr[4]; /* file pointer to symtab */
- char f_nsyms[4]; /* number of symtab entries */
- char f_opthdr[2]; /* sizeof(optional hdr) */
- char f_flags[2]; /* flags */
- };
-
-#define FILHDR struct external_filehdr
-#define FILHSZ 20
-#endif
-
-#ifndef DO_NOT_DEFINE_AOUTHDR
-/********************** AOUT "OPTIONAL HEADER" **********************/
-
-typedef struct external_aouthdr
- {
- char magic[2]; /* type of file */
- char vstamp[2]; /* version stamp */
- char tsize[4]; /* text size in bytes, padded to FW bdry*/
- char dsize[4]; /* initialized data " " */
- char bsize[4]; /* uninitialized data " " */
- char entry[4]; /* entry pt. */
- char text_start[4]; /* base of text used for this file */
- char data_start[4]; /* base of data used for this file */
- } ATTRIBUTE_PACKED
-AOUTHDR;
-
-#define AOUTHDRSZ 28
-#define AOUTSZ 28
-
-typedef struct external_aouthdr64
-{
- char magic[2]; /* Type of file. */
- char vstamp[2]; /* Version stamp. */
- char tsize[4]; /* Text size in bytes, padded to FW bdry*/
- char dsize[4]; /* Initialized data " ". */
- char bsize[4]; /* Uninitialized data " ". */
- char entry[4]; /* Entry pt. */
- char text_start[4]; /* Base of text used for this file. */
-}
-AOUTHDR64;
-#define AOUTHDRSZ64 24
-
-#endif /* not DO_NOT_DEFINE_AOUTHDR */
-
-#ifndef DO_NOT_DEFINE_SCNHDR
-/********************** SECTION HEADER **********************/
-
-struct external_scnhdr
- {
- char s_name[8]; /* section name */
- char s_paddr[4]; /* physical address, aliased s_nlib */
- char s_vaddr[4]; /* virtual address */
- char s_size[4]; /* section size */
- char s_scnptr[4]; /* file ptr to raw data for section */
- char s_relptr[4]; /* file ptr to relocation */
- char s_lnnoptr[4]; /* file ptr to line numbers */
- char s_nreloc[2]; /* number of relocation entries */
- char s_nlnno[2]; /* number of line number entries */
- char s_flags[4]; /* flags */
- };
-
-#define SCNHDR struct external_scnhdr
-#define SCNHSZ 40
-
-/* Names of "special" sections. */
-
-#define _TEXT ".text"
-#define _DATA ".data"
-#define _BSS ".bss"
-#define _COMMENT ".comment"
-#define _LIB ".lib"
-#endif /* not DO_NOT_DEFINE_SCNHDR */
-
-#ifndef DO_NOT_DEFINE_LINENO
-
-/********************** LINE NUMBERS **********************/
-
-#ifndef L_LNNO_SIZE
-#error L_LNNO_SIZE needs to be defined
-#endif
-
-/* 1 line number entry for every "breakpointable" source line in a section.
- Line numbers are grouped on a per function basis; first entry in a function
- grouping will have l_lnno = 0 and in place of physical address will be the
- symbol table index of the function name. */
-struct external_lineno
-{
- union
- {
- char l_symndx[4]; /* function name symbol index, iff l_lnno == 0*/
- char l_paddr[4]; /* (physical) address of line number */
- } l_addr;
-
- char l_lnno[L_LNNO_SIZE]; /* line number */
-};
-
-#define LINENO struct external_lineno
-#define LINESZ (4 + L_LNNO_SIZE)
-
-#if L_LNNO_SIZE == 4
-#define GET_LINENO_LNNO(abfd, ext) H_GET_32 (abfd, (ext->l_lnno))
-#define PUT_LINENO_LNNO(abfd, val, ext) H_PUT_32 (abfd, val, (ext->l_lnno))
-#endif
-#if L_LNNO_SIZE == 2
-#define GET_LINENO_LNNO(abfd, ext) H_GET_16 (abfd, (ext->l_lnno))
-#define PUT_LINENO_LNNO(abfd, val, ext) H_PUT_16 (abfd, val, (ext->l_lnno))
-#endif
-
-#endif /* not DO_NOT_DEFINE_LINENO */
-
-#ifndef DO_NOT_DEFINE_SYMENT
-/********************** SYMBOLS **********************/
-
-#define E_SYMNMLEN 8 /* # characters in a symbol name */
-#ifndef E_FILNMLEN
-#define E_FILNMLEN 14
-#endif
-#define E_DIMNUM 4 /* # array dimensions in auxiliary entry */
-
-struct external_syment
-{
- union
- {
- char e_name[E_SYMNMLEN];
-
- struct
- {
- char e_zeroes[4];
- char e_offset[4];
- } e;
- } e;
-
- char e_value[4];
- char e_scnum[2];
- char e_type[2];
- char e_sclass[1];
- char e_numaux[1];
-} ATTRIBUTE_PACKED ;
-
-#define SYMENT struct external_syment
-#define SYMESZ 18
-
-#ifndef N_BTMASK
-#define N_BTMASK 0xf
-#endif
-
-#ifndef N_TMASK
-#define N_TMASK 0x30
-#endif
-
-#ifndef N_BTSHFT
-#define N_BTSHFT 4
-#endif
-
-#ifndef N_TSHIFT
-#define N_TSHIFT 2
-#endif
-
-#endif /* not DO_NOT_DEFINE_SYMENT */
-
-#ifndef DO_NOT_DEFINE_AUXENT
-
-union external_auxent
-{
- struct
- {
- char x_tagndx[4]; /* str, un, or enum tag indx */
-
- union
- {
- struct
- {
- char x_lnno[2]; /* declaration line number */
- char x_size[2]; /* str/union/array size */
- } x_lnsz;
-
- char x_fsize[4]; /* size of function */
-
- } x_misc;
-
- union
- {
- struct /* if ISFCN, tag, or .bb */
- {
- char x_lnnoptr[4]; /* ptr to fcn line # */
- char x_endndx[4]; /* entry ndx past block end */
- } x_fcn;
-
- struct /* if ISARY, up to 4 dimen. */
- {
- char x_dimen[E_DIMNUM][2];
- } x_ary;
-
- } x_fcnary;
-
- char x_tvndx[2]; /* tv index */
-
- } x_sym;
-
- union
- {
- char x_fname[E_FILNMLEN];
-
- struct
- {
- char x_zeroes[4];
- char x_offset[4];
- } x_n;
-
- } x_file;
-
- struct
- {
- char x_scnlen[4]; /* section length */
- char x_nreloc[2]; /* # relocation entries */
- char x_nlinno[2]; /* # line numbers */
-#ifdef INCLUDE_COMDAT_FIELDS_IN_AUXENT
- char x_checksum[4]; /* section COMDAT checksum */
- char x_associated[2]; /* COMDAT associated section index */
- char x_comdat[1]; /* COMDAT selection number */
-#endif
- } x_scn;
-
- struct
- {
- char x_tvfill[4]; /* tv fill value */
- char x_tvlen[2]; /* length of .tv */
- char x_tvran[2][2]; /* tv range */
- } x_tv; /* info about .tv section (in auxent of symbol .tv)) */
-} ATTRIBUTE_PACKED ;
-
-#define AUXENT union external_auxent
-#define AUXESZ 18
-
-#define _ETEXT "etext"
-
-#endif /* not DO_NOT_DEFINE_AUXENT */
-
-#endif /* COFF_EXTERNAL_H */
diff --git a/include/coff/go32exe.h b/include/coff/go32exe.h
deleted file mode 100644
index a2ca6cd7e..000000000
--- a/include/coff/go32exe.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/* COFF information for PC running go32.
-
- Copyright 2001, 2005, 2009, 2010 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-struct external_filehdr_go32_exe
- {
- char stub[GO32_STUBSIZE]; /* the stub to load the image */
- /* the standard COFF header */
- char f_magic[2]; /* magic number */
- char f_nscns[2]; /* number of sections */
- char f_timdat[4]; /* time & date stamp */
- char f_symptr[4]; /* file pointer to symtab */
- char f_nsyms[4]; /* number of symtab entries */
- char f_opthdr[2]; /* sizeof(optional hdr) */
- char f_flags[2]; /* flags */
- };
-
-#undef FILHDR
-#define FILHDR struct external_filehdr_go32_exe
-#undef FILHSZ
-#define FILHSZ GO32_STUBSIZE+20
diff --git a/include/coff/h8300.h b/include/coff/h8300.h
deleted file mode 100644
index 4de6602ee..000000000
--- a/include/coff/h8300.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/* coff information for Renesas H8/300 and H8/300-H
-
- Copyright 2001, 2003, 2010 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#define L_LNNO_SIZE 4
-#include "coff/external.h"
-
-#define H8300MAGIC 0x8300
-#define H8300HMAGIC 0x8301
-#define H8300SMAGIC 0x8302
-#define H8300HNMAGIC 0x8303
-#define H8300SNMAGIC 0x8304
-
-#define H8300BADMAG(x) (((x).f_magic != H8300MAGIC))
-#define H8300HBADMAG(x) (((x).f_magic != H8300HMAGIC))
-#define H8300SBADMAG(x) (((x).f_magic != H8300SMAGIC))
-#define H8300HNBADMAG(x) (((x).f_magic != H8300HNMAGIC))
-#define H8300SNBADMAG(x) (((x).f_magic != H8300SNMAGIC))
-
-/* Relocation directives. */
-
-/* The external reloc has an offset field, because some of the reloc
- types on the h8 don't have room in the instruction for the entire
- offset - eg the strange jump and high page addressing modes. */
-
-struct external_reloc
-{
- char r_vaddr[4];
- char r_symndx[4];
- char r_offset[4];
- char r_type[2];
- char r_stuff[2];
-};
-
-#define RELOC struct external_reloc
-#define RELSZ 16
-
-
-
-
diff --git a/include/coff/h8500.h b/include/coff/h8500.h
deleted file mode 100644
index 56097f86e..000000000
--- a/include/coff/h8500.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/* coff information for Renesas H8/500
-
- Copyright 2001, 2003, 2010 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#define L_LNNO_SIZE 4
-#include "coff/external.h"
-
-#define H8500MAGIC 0x8500
-
-#define H8500BADMAG(x) ((0xffff && ((x).f_magic) != H8500MAGIC))
-
-/********************** RELOCATION DIRECTIVES **********************/
-
-/* The external reloc has an offset field, because some of the reloc
- types on the h8 don't have room in the instruction for the entire
- offset - eg the strange jump and high page addressing modes. */
-
-struct external_reloc
-{
- char r_vaddr[4];
- char r_symndx[4];
- char r_offset[4];
- char r_type[2];
- char r_stuff[2];
-};
-
-#define RELOC struct external_reloc
-#define RELSZ 16
-
-
-
-
diff --git a/include/coff/i386.h b/include/coff/i386.h
deleted file mode 100644
index 61e723ab7..000000000
--- a/include/coff/i386.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/* coff information for Intel 386/486.
-
- Copyright 2001, 2009, 2010 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#define L_LNNO_SIZE 2
-#define INCLUDE_COMDAT_FIELDS_IN_AUXENT
-#include "coff/external.h"
-
-#define COFF_PAGE_SIZE 0x1000
-
-/* Bits for f_flags:
- F_RELFLG Relocation info stripped from file
- F_EXEC File is executable (no unresolved external references)
- F_LNNO Line numbers stripped from file
- F_LSYMS Local symbols stripped from file
- F_AR32WR File has byte ordering of an AR32WR machine (e.g. vax). */
-
-#define F_RELFLG (0x0001)
-#define F_EXEC (0x0002)
-#define F_LNNO (0x0004)
-#define F_LSYMS (0x0008)
-
-#define I386MAGIC 0x14c
-#define I386PTXMAGIC 0x154
-#define I386AIXMAGIC 0x175
-
-/* This is Lynx's all-platform magic number for executables. */
-
-#define LYNXCOFFMAGIC 0415
-
-#define I386BADMAG(x) ( ((x).f_magic != I386MAGIC) \
- && (x).f_magic != I386AIXMAGIC \
- && (x).f_magic != I386PTXMAGIC \
- && (x).f_magic != LYNXCOFFMAGIC)
-
-#define OMAGIC 0404 /* Object files, eg as output. */
-#define ZMAGIC 0413 /* Demand load format, eg normal ld output. */
-#define STMAGIC 0401 /* Target shlib. */
-#define SHMAGIC 0443 /* Host shlib. */
-
-/* Define some NT default values. */
-/* #define NT_IMAGE_BASE 0x400000 moved to internal.h */
-#define NT_SECTION_ALIGNMENT 0x1000
-#define NT_FILE_ALIGNMENT 0x200
-#define NT_DEF_RESERVE 0x100000
-#define NT_DEF_COMMIT 0x1000
-
-/* Relocation directives. */
-
-struct external_reloc
-{
- char r_vaddr[4];
- char r_symndx[4];
- char r_type[2];
-};
-
-#define RELOC struct external_reloc
-#define RELSZ 10
-
diff --git a/include/coff/i860.h b/include/coff/i860.h
deleted file mode 100644
index 0767de4fe..000000000
--- a/include/coff/i860.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/* COFF information for the Intel i860.
-
- Copyright 2001, 2003, 2010, 2011 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-/* This file was hacked from i386.h [dolan@ssd.intel.com] */
-
-#define L_LNNO_SIZE 2
-#include "coff/external.h"
-
-/* Bits for f_flags:
- F_RELFLG relocation info stripped from file
- F_EXEC file is executable (no unresolved external references)
- F_LNNO line numbers stripped from file
- F_LSYMS local symbols stripped from file
- F_AR32WR file has byte ordering of an AR32WR machine (e.g. vax). */
-
-#define F_RELFLG (0x0001)
-#define F_EXEC (0x0002)
-#define F_LNNO (0x0004)
-#define F_LSYMS (0x0008)
-
-#define I860MAGIC 0x14d
-
-#define I860BADMAG(x) ((x).f_magic != I860MAGIC)
-
-#undef AOUTSZ
-#define AOUTSZ 36
-
-/* FIXME: What are the a.out magic numbers? */
-
-#define _ETEXT "etext"
-
-/********************** RELOCATION DIRECTIVES **********************/
-
-struct external_reloc
-{
- char r_vaddr[4];
- char r_symndx[4];
- char r_type[2];
-};
-
-#define RELOC struct external_reloc
-#define RELSZ 10
-
-/* The relocation directory entry types.
- PAIR : The low half that follows relates to the preceding HIGH[ADJ].
- HIGH : The high half of a 32-bit constant.
- LOWn : The low half, insn bits 15..(n-1), 2^n-byte aligned.
- SPLITn : The low half, insn bits 20..16 and 10..(n-1), 2^n-byte aligned.
- HIGHADJ: Similar to HIGH, but with adjustment.
- BRADDR : 26-bit branch displacement.
-
- Note: The Intel assembler manual lists LOW4 as one of the
- relocation types, but it appears to be useless for the i860.
- We will recognize it anyway, just in case it actually appears in
- any object files. */
-
-enum {
- COFF860_R_PAIR = 0x1c,
- COFF860_R_HIGH = 0x1e,
- COFF860_R_LOW0 = 0x1f,
- COFF860_R_LOW1 = 0x20,
- COFF860_R_LOW2 = 0x21,
- COFF860_R_LOW3 = 0x22,
- COFF860_R_LOW4 = 0x23,
- COFF860_R_SPLIT0 = 0x24,
- COFF860_R_SPLIT1 = 0x25,
- COFF860_R_SPLIT2 = 0x26,
- COFF860_R_HIGHADJ = 0x27,
- COFF860_R_BRADDR = 0x28
-};
-
diff --git a/include/coff/i960.h b/include/coff/i960.h
deleted file mode 100644
index 2bf42adcf..000000000
--- a/include/coff/i960.h
+++ /dev/null
@@ -1,320 +0,0 @@
-/* coff information for 80960. Origins: Intel corp, natch.
-
- Copyright 2001, 2010 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-/* NOTE: Tagentries (cf TAGBITS) are no longer used by the 960 */
-
-/********************** FILE HEADER **********************/
-
-struct external_filehdr
-{
- char f_magic[2]; /* magic number */
- char f_nscns[2]; /* number of sections */
- char f_timdat[4]; /* time & date stamp */
- char f_symptr[4]; /* file pointer to symtab */
- char f_nsyms[4]; /* number of symtab entries */
- char f_opthdr[2]; /* sizeof(optional hdr) */
- char f_flags[2]; /* flags */
-};
-
-#define OMAGIC (0407) /* old impure format. data immediately
- follows text. both sections are rw. */
-#define NMAGIC (0410) /* split i&d, read-only text */
-
-/*
-* Intel 80960 (I960) processor flags.
-* F_I960TYPE == mask for processor type field.
-*/
-
-#define F_I960TYPE (0xf000)
-#define F_I960CORE (0x1000)
-#define F_I960KB (0x2000)
-#define F_I960SB (0x2000)
-#define F_I960MC (0x3000)
-#define F_I960XA (0x4000)
-#define F_I960CA (0x5000)
-#define F_I960KA (0x6000)
-#define F_I960SA (0x6000)
-#define F_I960JX (0x7000)
-#define F_I960HX (0x8000)
-
-
-/** i80960 Magic Numbers
-*/
-
-#define I960ROMAGIC (0x160) /* read-only text segments */
-#define I960RWMAGIC (0x161) /* read-write text segments */
-
-#define I960BADMAG(x) (((x).f_magic!=I960ROMAGIC) && ((x).f_magic!=I960RWMAGIC))
-
-#define FILHDR struct external_filehdr
-#define FILHSZ 20
-
-/********************** AOUT "OPTIONAL HEADER" **********************/
-
-typedef struct
-{
- unsigned long phys_addr;
- unsigned long bitarray;
-} TAGBITS;
-
-typedef struct
-{
- char magic[2]; /* type of file */
- char vstamp[2]; /* version stamp */
- char tsize[4]; /* text size in bytes, padded to FW bdry*/
- char dsize[4]; /* initialized data " " */
- char bsize[4]; /* uninitialized data " " */
- char entry[4]; /* entry pt. */
- char text_start[4]; /* base of text used for this file */
- char data_start[4]; /* base of data used for this file */
- char tagentries[4]; /* number of tag entries to follow */
-}
-AOUTHDR;
-
-/* return a pointer to the tag bits array */
-
-#define TAGPTR(aout) ((TAGBITS *) (&(aout.tagentries)+1))
-
-/* compute size of a header */
-
-/*#define AOUTSZ(aout) (sizeof(AOUTHDR)+(aout.tagentries*sizeof(TAGBITS)))*/
-#define AOUTSZ 32
-#define AOUTHDRSZ 32
-
-
-/********************** SECTION HEADER **********************/
-
-struct external_scnhdr
-{
- char s_name[8]; /* section name */
- char s_paddr[4]; /* physical address, aliased s_nlib */
- char s_vaddr[4]; /* virtual address */
- char s_size[4]; /* section size */
- char s_scnptr[4]; /* file ptr to raw data for section */
- char s_relptr[4]; /* file ptr to relocation */
- char s_lnnoptr[4]; /* file ptr to line numbers */
- char s_nreloc[2]; /* number of relocation entries */
- char s_nlnno[2]; /* number of line number entries*/
- char s_flags[4]; /* flags */
- char s_align[4]; /* section alignment */
-};
-
-
-#define SCNHDR struct external_scnhdr
-#define SCNHSZ 44
-
-/*
- * names of "special" sections
- */
-#define _TEXT ".text"
-#define _DATA ".data"
-#define _BSS ".bss"
-
-/********************** LINE NUMBERS **********************/
-
-/* 1 line number entry for every "breakpointable" source line in a section.
- * Line numbers are grouped on a per function basis; first entry in a function
- * grouping will have l_lnno = 0 and in place of physical address will be the
- * symbol table index of the function name.
- */
-struct external_lineno
-{
- union
- {
- char l_symndx[4]; /* function name symbol index, iff l_lnno == 0*/
- char l_paddr[4]; /* (physical) address of line number */
- } l_addr;
-
- char l_lnno[2]; /* line number */
- char padding[2]; /* force alignment */
-};
-
-
-#define LINENO struct external_lineno
-#define LINESZ 8
-
-/********************** SYMBOLS **********************/
-
-#define E_SYMNMLEN 8 /* # characters in a symbol name */
-#define E_FILNMLEN 14 /* # characters in a file name */
-#define E_DIMNUM 4 /* # array dimensions in auxiliary entry */
-
-struct external_syment
-{
- union
- {
- char e_name[E_SYMNMLEN];
-
- struct
- {
- char e_zeroes[4];
- char e_offset[4];
- } e;
- } e;
-
- char e_value[4];
- char e_scnum[2];
- char e_flags[2];
- char e_type[4];
- char e_sclass[1];
- char e_numaux[1];
- char pad2[2];
-};
-
-#define N_BTMASK (0x1f)
-#define N_TMASK (0x60)
-#define N_BTSHFT (5)
-#define N_TSHIFT (2)
-
-union external_auxent
-{
- struct
- {
- char x_tagndx[4]; /* str, un, or enum tag indx */
-
- union
- {
- struct
- {
- char x_lnno[2]; /* declaration line number */
- char x_size[2]; /* str/union/array size */
- } x_lnsz;
-
- char x_fsize[4]; /* size of function */
-
- } x_misc;
-
- union
- {
- struct /* if ISFCN, tag, or .bb */
- {
- char x_lnnoptr[4]; /* ptr to fcn line # */
- char x_endndx[4]; /* entry ndx past block end */
- } x_fcn;
-
- struct /* if ISARY, up to 4 dimen. */
- {
- char x_dimen[E_DIMNUM][2];
- } x_ary;
-
- } x_fcnary;
-
- char x_tvndx[2]; /* tv index */
-
- } x_sym;
-
- union
- {
- char x_fname[E_FILNMLEN];
-
- struct
- {
- char x_zeroes[4];
- char x_offset[4];
- } x_n;
-
- } x_file;
-
- struct
- {
- char x_scnlen[4]; /* section length */
- char x_nreloc[2]; /* # relocation entries */
- char x_nlinno[2]; /* # line numbers */
-
- } x_scn;
-
- struct
- {
- char x_tvfill[4]; /* tv fill value */
- char x_tvlen[2]; /* length of .tv */
- char x_tvran[2][2]; /* tv range */
-
- } x_tv; /* info about .tv section (in auxent of symbol .tv)) */
-
- /******************************************
- * I960-specific *2nd* aux. entry formats
- ******************************************/
- struct
- {
- /* This is a very old typo that keeps getting propagated. */
-#define x_stdindx x_stindx
- char x_stindx[4]; /* sys. table entry */
- } x_sc; /* system call entry */
-
- struct
- {
- char x_balntry[4]; /* BAL entry point */
- } x_bal; /* BAL-callable function */
-
- struct
- {
- char x_timestamp[4]; /* time stamp */
- char x_idstring[20]; /* producer identity string */
-
- } x_ident; /* Producer ident info */
-};
-
-#define SYMENT struct external_syment
-#define SYMESZ 24
-#define AUXENT union external_auxent
-#define AUXESZ 24
-
-# define _ETEXT "_etext"
-
-/********************** RELOCATION DIRECTIVES **********************/
-
-struct external_reloc
-{
- char r_vaddr[4];
- char r_symndx[4];
- char r_type[2];
- char pad[2];
-};
-
-/* r_type values for the i960. */
-
-/* The i960 uses R_RELLONG, which is defined in internal.h as 0x11.
- It is an absolute 32 bit relocation. */
-
-#define R_IPRMED (0x19) /* 24-bit ip-relative relocation */
-#define R_OPTCALL (0x1b) /* 32-bit optimizable call (leafproc/sysproc) */
-#define R_OPTCALLX (0x1c) /* 64-bit optimizable call (leafproc/sysproc) */
-
-/* The following relocation types are defined use by relaxing linkers,
- which convert 32 bit calls (which require a 64 bit instruction)
- into 24 bit calls (which require a 32 bit instruction) when
- possible. It will be possible whenever the target of the call is
- within a 24 bit range of the call instruction.
-
- It is always safe to ignore these relocations. They only serve to
- mark points which the relaxing linker will have to consider. The
- assembler must ensure that the correct code is generated even if
- the relocations are ignored. In particular, this means that the
- R_IPR13 relocation may not appear with an external symbol. */
-
-#define R_IPR13 (0x1d) /* 13 bit ip-relative branch */
-#define R_ALIGN (0x1e) /* alignment marker. This has no
- associated symbol. Instead, the
- r_symndx field indicates the
- require alignment at this point in
- the file. It must be a power of 2. */
-
-#define RELOC struct external_reloc
-#define RELSZ 12
-
diff --git a/include/coff/ia64.h b/include/coff/ia64.h
deleted file mode 100644
index 2ee626863..000000000
--- a/include/coff/ia64.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/* coff information for HP/Intel IA-64.
-
- Copyright 2000, 2010 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#define DO_NOT_DEFINE_AOUTHDR
-#define L_LNNO_SIZE 2
-#define INCLUDE_COMDAT_FIELDS_IN_AUXENT
-#include "coff/external.h"
-
-#define IA64MAGIC 0x200
-
-#define IA64BADMAG(x) (((x).f_magic != IA64MAGIC))
-
-/* Bits for f_flags:
- * F_RELFLG relocation info stripped from file
- * F_EXEC file is executable (no unresolved external references)
- * F_LNNO line numbers stripped from file
- * F_LSYMS local symbols stripped from file
- * F_AR32WR file has byte ordering of an AR32WR machine (e.g. vax)
- */
-
-#define F_RELFLG (0x0001)
-#define F_EXEC (0x0002)
-#define F_LNNO (0x0004)
-#define F_LSYMS (0x0008)
-
-/********************** AOUT "OPTIONAL HEADER" **********************/
-typedef struct
-{
- char magic[2]; /* type of file */
- char vstamp[2]; /* version stamp */
- char tsize[4]; /* text size in bytes, padded to FW bdry*/
- char dsize[4]; /* initialized data " " */
- char bsize[4]; /* uninitialized data " " */
- char entry[4]; /* entry pt. */
- char text_start[4]; /* base of text used for this file */
-#ifndef BFD64
- char data_start[4]; /* base of data used for this file */
-#endif
-}
-AOUTHDR;
-
-#define PE32MAGIC 0x10b /* 32-bit image */
-#define PE32PMAGIC 0x20b /* 32-bit image inside 64-bit address space */
-
-#define PE32PBADMAG(x) (((x).f_magic != PE32PMAGIC))
-
-#define AOUTSZ 108
-#define AOUTHDRSZ 108
-
-#define OMAGIC 0404 /* object files, eg as output */
-#define ZMAGIC 0413 /* demand load format, eg normal ld output */
-#define STMAGIC 0401 /* target shlib */
-#define SHMAGIC 0443 /* host shlib */
-
-/* define some NT default values */
-/* #define NT_IMAGE_BASE 0x400000 moved to internal.h */
-#define NT_SECTION_ALIGNMENT 0x1000
-#define NT_FILE_ALIGNMENT 0x200
-#define NT_DEF_RESERVE 0x100000
-#define NT_DEF_COMMIT 0x1000
-
-/********************** RELOCATION DIRECTIVES **********************/
-
-struct external_reloc
-{
- char r_vaddr[4];
- char r_symndx[4];
- char r_type[2];
-};
-
-#define RELOC struct external_reloc
-#define RELSZ 10
-
diff --git a/include/coff/internal.h b/include/coff/internal.h
deleted file mode 100644
index 8b843247e..000000000
--- a/include/coff/internal.h
+++ /dev/null
@@ -1,830 +0,0 @@
-/* Internal format of COFF object file data structures, for GNU BFD.
- This file is part of BFD, the Binary File Descriptor library.
-
- Copyright 1999, 2000, 2001, 2002, 2003, 2004. 2005, 2006, 2007, 2009,
- 2010 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef GNU_COFF_INTERNAL_H
-#define GNU_COFF_INTERNAL_H 1
-
-/* First, make "signed char" work, even on old compilers. */
-#ifndef signed
-#ifndef __STDC__
-#define signed /**/
-#endif
-#endif
-
-/********************** FILE HEADER **********************/
-
-/* extra stuff in a PE header. */
-
-struct internal_extra_pe_filehdr
-{
- /* DOS header data follows for PE stuff */
- unsigned short e_magic; /* Magic number, 0x5a4d */
- unsigned short e_cblp; /* Bytes on last page of file, 0x90 */
- unsigned short e_cp; /* Pages in file, 0x3 */
- unsigned short e_crlc; /* Relocations, 0x0 */
- unsigned short e_cparhdr; /* Size of header in paragraphs, 0x4 */
- unsigned short e_minalloc; /* Minimum extra paragraphs needed, 0x0 */
- unsigned short e_maxalloc; /* Maximum extra paragraphs needed, 0xFFFF */
- unsigned short e_ss; /* Initial (relative) SS value, 0x0 */
- unsigned short e_sp; /* Initial SP value, 0xb8 */
- unsigned short e_csum; /* Checksum, 0x0 */
- unsigned short e_ip; /* Initial IP value, 0x0 */
- unsigned short e_cs; /* Initial (relative) CS value, 0x0 */
- unsigned short e_lfarlc; /* File address of relocation table, 0x40 */
- unsigned short e_ovno; /* Overlay number, 0x0 */
- unsigned short e_res[4]; /* Reserved words, all 0x0 */
- unsigned short e_oemid; /* OEM identifier (for e_oeminfo), 0x0 */
- unsigned short e_oeminfo; /* OEM information; e_oemid specific, 0x0 */
- unsigned short e_res2[10]; /* Reserved words, all 0x0 */
- bfd_vma e_lfanew; /* File address of new exe header, 0x80 */
- unsigned long dos_message[16]; /* text which always follows dos header */
- bfd_vma nt_signature; /* required NT signature, 0x4550 */
-};
-
-#define GO32_STUBSIZE 2048
-
-struct internal_filehdr
-{
- struct internal_extra_pe_filehdr pe;
-
- /* coff-stgo32 EXE stub header before BFD tdata has been allocated.
- Its data is kept in INTERNAL_FILEHDR.GO32STUB afterwards.
-
- F_GO32STUB is set iff go32stub contains a valid data. Artifical headers
- created in BFD have no pre-set go32stub. */
- char go32stub[GO32_STUBSIZE];
-
- /* Standard coff internal info. */
- unsigned short f_magic; /* magic number */
- unsigned short f_nscns; /* number of sections */
- long f_timdat; /* time & date stamp */
- bfd_vma f_symptr; /* file pointer to symtab */
- long f_nsyms; /* number of symtab entries */
- unsigned short f_opthdr; /* sizeof(optional hdr) */
- unsigned short f_flags; /* flags */
- unsigned short f_target_id; /* (TI COFF specific) */
-};
-
-
-/* Bits for f_flags:
- F_RELFLG relocation info stripped from file
- F_EXEC file is executable (no unresolved external references)
- F_LNNO line numbers stripped from file
- F_LSYMS local symbols stripped from file
- F_AR16WR file is 16-bit little-endian
- F_AR32WR file is 32-bit little-endian
- F_AR32W file is 32-bit big-endian
- F_DYNLOAD rs/6000 aix: dynamically loadable w/imports & exports
- F_SHROBJ rs/6000 aix: file is a shared object
- F_DLL PE format DLL
- F_GO32STUB Field go32stub contains valid data. */
-
-#define F_RELFLG (0x0001)
-#define F_EXEC (0x0002)
-#define F_LNNO (0x0004)
-#define F_LSYMS (0x0008)
-#define F_AR16WR (0x0080)
-#define F_AR32WR (0x0100)
-#define F_AR32W (0x0200)
-#define F_DYNLOAD (0x1000)
-#define F_SHROBJ (0x2000)
-#define F_DLL (0x2000)
-#define F_GO32STUB (0x4000)
-
-/* Extra structure which is used in the optional header. */
-typedef struct _IMAGE_DATA_DIRECTORY
-{
- bfd_vma VirtualAddress;
- long Size;
-} IMAGE_DATA_DIRECTORY;
-#define PE_EXPORT_TABLE 0
-#define PE_IMPORT_TABLE 1
-#define PE_RESOURCE_TABLE 2
-#define PE_EXCEPTION_TABLE 3
-#define PE_CERTIFICATE_TABLE 4
-#define PE_BASE_RELOCATION_TABLE 5
-#define PE_DEBUG_DATA 6
-#define PE_ARCHITECTURE 7
-#define PE_GLOBAL_PTR 8
-#define PE_TLS_TABLE 9
-#define PE_LOAD_CONFIG_TABLE 10
-#define PE_BOUND_IMPORT_TABLE 11
-#define PE_IMPORT_ADDRESS_TABLE 12
-#define PE_DELAY_IMPORT_DESCRIPTOR 13
-#define PE_CLR_RUNTIME_HEADER 14
-/* DataDirectory[15] is currently reserved, so no define. */
-#define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16
-
-/* Default image base for NT. */
-#define NT_EXE_IMAGE_BASE 0x400000
-#define NT_DLL_IMAGE_BASE 0x10000000
-
-/* Default image base for BeOS. */
-#define BEOS_EXE_IMAGE_BASE 0x80000000
-#define BEOS_DLL_IMAGE_BASE 0x10000000
-
-/* Extra stuff in a PE aouthdr */
-
-#define PE_DEF_SECTION_ALIGNMENT 0x1000
-#ifndef PE_DEF_FILE_ALIGNMENT
-# define PE_DEF_FILE_ALIGNMENT 0x200
-#endif
-
-struct internal_extra_pe_aouthdr
-{
- /* FIXME: The following entries are in AOUTHDR. But they aren't
- available internally in bfd. We add them here so that objdump
- can dump them. */
- /* The state of the image file */
- short Magic;
- /* Linker major version number */
- char MajorLinkerVersion;
- /* Linker minor version number */
- char MinorLinkerVersion;
- /* Total size of all code sections */
- long SizeOfCode;
- /* Total size of all initialized data sections */
- long SizeOfInitializedData;
- /* Total size of all uninitialized data sections */
- long SizeOfUninitializedData;
- /* Address of entry point relative to image base. */
- bfd_vma AddressOfEntryPoint;
- /* Address of the first code section relative to image base. */
- bfd_vma BaseOfCode;
- /* Address of the first data section relative to image base. */
- bfd_vma BaseOfData;
-
- /* PE stuff */
- bfd_vma ImageBase; /* address of specific location in memory that
- file is located, NT default 0x10000 */
-
- bfd_vma SectionAlignment; /* section alignment default 0x1000 */
- bfd_vma FileAlignment; /* file alignment default 0x200 */
- short MajorOperatingSystemVersion; /* minimum version of the operating */
- short MinorOperatingSystemVersion; /* system req'd for exe, default to 1*/
- short MajorImageVersion; /* user defineable field to store version of */
- short MinorImageVersion; /* exe or dll being created, default to 0 */
- short MajorSubsystemVersion; /* minimum subsystem version required to */
- short MinorSubsystemVersion; /* run exe; default to 3.1 */
- long Reserved1; /* seems to be 0 */
- long SizeOfImage; /* size of memory to allocate for prog */
- long SizeOfHeaders; /* size of PE header and section table */
- long CheckSum; /* set to 0 */
- short Subsystem;
-
- /* type of subsystem exe uses for user interface,
- possible values:
- 1 - NATIVE Doesn't require a subsystem
- 2 - WINDOWS_GUI runs in Windows GUI subsystem
- 3 - WINDOWS_CUI runs in Windows char sub. (console app)
- 5 - OS2_CUI runs in OS/2 character subsystem
- 7 - POSIX_CUI runs in Posix character subsystem */
- unsigned short DllCharacteristics; /* flags for DLL init */
- bfd_vma SizeOfStackReserve; /* amount of memory to reserve */
- bfd_vma SizeOfStackCommit; /* amount of memory initially committed for
- initial thread's stack, default is 0x1000 */
- bfd_vma SizeOfHeapReserve; /* amount of virtual memory to reserve and */
- bfd_vma SizeOfHeapCommit; /* commit, don't know what to defaut it to */
- long LoaderFlags; /* can probably set to 0 */
- long NumberOfRvaAndSizes; /* number of entries in next entry, 16 */
- IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
-};
-
-/********************** AOUT "OPTIONAL HEADER" **********************/
-struct internal_aouthdr
-{
- short magic; /* type of file */
- short vstamp; /* version stamp */
- bfd_vma tsize; /* text size in bytes, padded to FW bdry*/
- bfd_vma dsize; /* initialized data " " */
- bfd_vma bsize; /* uninitialized data " " */
- bfd_vma entry; /* entry pt. */
- bfd_vma text_start; /* base of text used for this file */
- bfd_vma data_start; /* base of data used for this file */
-
- /* i960 stuff */
- unsigned long tagentries; /* number of tag entries to follow */
-
- /* RS/6000 stuff */
- bfd_vma o_toc; /* address of TOC */
- short o_snentry; /* section number for entry point */
- short o_sntext; /* section number for text */
- short o_sndata; /* section number for data */
- short o_sntoc; /* section number for toc */
- short o_snloader; /* section number for loader section */
- short o_snbss; /* section number for bss */
- short o_algntext; /* max alignment for text */
- short o_algndata; /* max alignment for data */
- short o_modtype; /* Module type field, 1R,RE,RO */
- short o_cputype; /* Encoded CPU type */
- bfd_vma o_maxstack; /* max stack size allowed. */
- bfd_vma o_maxdata; /* max data size allowed. */
-
- /* ECOFF stuff */
- bfd_vma bss_start; /* Base of bss section. */
- bfd_vma gp_value; /* GP register value. */
- unsigned long gprmask; /* General registers used. */
- unsigned long cprmask[4]; /* Coprocessor registers used. */
- unsigned long fprmask; /* Floating pointer registers used. */
-
- /* Apollo stuff */
- long o_inlib; /* inlib data */
- long o_sri; /* Static Resource Information */
- long vid[2]; /* Version id */
-
- struct internal_extra_pe_aouthdr pe;
-};
-
-/********************** STORAGE CLASSES **********************/
-
-/* This used to be defined as -1, but now n_sclass is unsigned. */
-#define C_EFCN 0xff /* physical end of function */
-#define C_NULL 0
-#define C_AUTO 1 /* automatic variable */
-#define C_EXT 2 /* external symbol */
-#define C_STAT 3 /* static */
-#define C_REG 4 /* register variable */
-#define C_EXTDEF 5 /* external definition */
-#define C_LABEL 6 /* label */
-#define C_ULABEL 7 /* undefined label */
-#define C_MOS 8 /* member of structure */
-#define C_ARG 9 /* function argument */
-#define C_STRTAG 10 /* structure tag */
-#define C_MOU 11 /* member of union */
-#define C_UNTAG 12 /* union tag */
-#define C_TPDEF 13 /* type definition */
-#define C_USTATIC 14 /* undefined static */
-#define C_ENTAG 15 /* enumeration tag */
-#define C_MOE 16 /* member of enumeration */
-#define C_REGPARM 17 /* register parameter */
-#define C_FIELD 18 /* bit field */
-#define C_AUTOARG 19 /* auto argument */
-#define C_LASTENT 20 /* dummy entry (end of block) */
-#define C_BLOCK 100 /* ".bb" or ".eb" */
-#define C_FCN 101 /* ".bf" or ".ef" */
-#define C_EOS 102 /* end of structure */
-#define C_FILE 103 /* file name */
-#define C_LINE 104 /* line # reformatted as symbol table entry */
-#define C_ALIAS 105 /* duplicate tag */
-#define C_HIDDEN 106 /* ext symbol in dmert public lib */
-#define C_WEAKEXT 127 /* weak symbol -- GNU extension. */
-
-/* New storage classes for TI COFF */
-#define C_UEXT 19 /* Tentative external definition */
-#define C_STATLAB 20 /* Static load time label */
-#define C_EXTLAB 21 /* External load time label */
-#define C_SYSTEM 23 /* System Wide variable */
-
-/* New storage classes for WINDOWS_NT */
-#define C_SECTION 104 /* section name */
-#define C_NT_WEAK 105 /* weak external */
-
- /* New storage classes for 80960 */
-
-/* C_LEAFPROC is obsolete. Use C_LEAFEXT or C_LEAFSTAT */
-#define C_LEAFPROC 108 /* Leaf procedure, "call" via BAL */
-
-#define C_SCALL 107 /* Procedure reachable via system call */
-#define C_LEAFEXT 108 /* External leaf */
-#define C_LEAFSTAT 113 /* Static leaf */
-#define C_OPTVAR 109 /* Optimized variable */
-#define C_DEFINE 110 /* Preprocessor #define */
-#define C_PRAGMA 111 /* Advice to compiler or linker */
-#define C_SEGMENT 112 /* 80960 segment name */
-
- /* Storage classes for m88k */
-#define C_SHADOW 107 /* shadow symbol */
-#define C_VERSION 108 /* coff version symbol */
-
- /* New storage classes for RS/6000 */
-#define C_HIDEXT 107 /* Un-named external symbol */
-#define C_BINCL 108 /* Marks beginning of include file */
-#define C_EINCL 109 /* Marks ending of include file */
-#define C_AIX_WEAKEXT 111 /* AIX definition of C_WEAKEXT. */
-
-#define C_NULL_VALUE 0x00de1e00 /* Value for a C_NULL deleted entry. */
-
-#if defined _AIX52 || defined AIX_WEAK_SUPPORT
-#undef C_WEAKEXT
-#define C_WEAKEXT C_AIX_WEAKEXT
-#endif
-
- /* storage classes for stab symbols for RS/6000 */
-#define C_GSYM (0x80)
-#define C_LSYM (0x81)
-#define C_PSYM (0x82)
-#define C_RSYM (0x83)
-#define C_RPSYM (0x84)
-#define C_STSYM (0x85)
-#define C_TCSYM (0x86)
-#define C_BCOMM (0x87)
-#define C_ECOML (0x88)
-#define C_ECOMM (0x89)
-#define C_DECL (0x8c)
-#define C_ENTRY (0x8d)
-#define C_FUN (0x8e)
-#define C_BSTAT (0x8f)
-#define C_ESTAT (0x90)
-#define C_GTLS (0x97)
-#define C_STTLS (0x98)
-
-/* Storage classes for Thumb symbols */
-#define C_THUMBEXT (128 + C_EXT) /* 130 */
-#define C_THUMBSTAT (128 + C_STAT) /* 131 */
-#define C_THUMBLABEL (128 + C_LABEL) /* 134 */
-#define C_THUMBEXTFUNC (C_THUMBEXT + 20) /* 150 */
-#define C_THUMBSTATFUNC (C_THUMBSTAT + 20) /* 151 */
-
-/* True if XCOFF symbols of class CLASS have auxillary csect information. */
-#define CSECT_SYM_P(CLASS) \
- ((CLASS) == C_EXT || (CLASS) == C_AIX_WEAKEXT || (CLASS) == C_HIDEXT)
-
-/********************** SECTION HEADER **********************/
-
-#define SCNNMLEN (8)
-
-struct internal_scnhdr
-{
- char s_name[SCNNMLEN]; /* section name */
-
- /* Physical address, aliased s_nlib.
- In the pei format, this field is the virtual section size
- (the size of the section after being loaded int memory),
- NOT the physical address. */
- bfd_vma s_paddr;
-
- bfd_vma s_vaddr; /* virtual address */
- bfd_vma s_size; /* section size */
- bfd_vma s_scnptr; /* file ptr to raw data for section */
- bfd_vma s_relptr; /* file ptr to relocation */
- bfd_vma s_lnnoptr; /* file ptr to line numbers */
- unsigned long s_nreloc; /* number of relocation entries */
- unsigned long s_nlnno; /* number of line number entries*/
- long s_flags; /* flags */
- long s_align; /* used on I960 */
- unsigned char s_page; /* TI COFF load page */
-};
-
-/* s_flags "type". */
-#define STYP_REG (0x0000) /* "regular": allocated, relocated, loaded */
-#define STYP_DSECT (0x0001) /* "dummy": relocated only*/
-#define STYP_NOLOAD (0x0002) /* "noload": allocated, relocated, not loaded */
-#define STYP_GROUP (0x0004) /* "grouped": formed of input sections */
-#define STYP_PAD (0x0008) /* "padding": not allocated, not relocated, loaded */
-#define STYP_COPY (0x0010) /* "copy": for decision function used by field update; not allocated, not relocated,
- loaded; reloc & lineno entries processed normally */
-#define STYP_TEXT (0x0020) /* section contains text only */
-#define S_SHRSEG (0x0020) /* In 3b Update files (output of ogen), sections which appear in SHARED segments of the Pfile
- will have the S_SHRSEG flag set by ogen, to inform dufr that updating 1 copy of the proc. will
- update all process invocations. */
-#define STYP_DATA (0x0040) /* section contains data only */
-#define STYP_BSS (0x0080) /* section contains bss only */
-#define S_NEWFCN (0x0100) /* In a minimal file or an update file, a new function (as compared with a replaced function) */
-#define STYP_INFO (0x0200) /* comment: not allocated not relocated, not loaded */
-#define STYP_OVER (0x0400) /* overlay: relocated not allocated or loaded */
-#define STYP_LIB (0x0800) /* for .lib: same as INFO */
-#define STYP_MERGE (0x2000) /* merge section -- combines with text, data or bss sections only */
-#define STYP_REVERSE_PAD (0x4000) /* section will be padded with no-op instructions
- wherever padding is necessary and there is a
- word of contiguous bytes beginning on a word
- boundary. */
-
-#define STYP_LIT 0x8020 /* Literal data (like STYP_TEXT) */
-
-
-/********************** LINE NUMBERS **********************/
-
-/* 1 line number entry for every "breakpointable" source line in a section.
- Line numbers are grouped on a per function basis; first entry in a function
- grouping will have l_lnno = 0 and in place of physical address will be the
- symbol table index of the function name. */
-
-struct internal_lineno
-{
- union
- {
- bfd_signed_vma l_symndx; /* function name symbol index, iff l_lnno == 0*/
- bfd_signed_vma l_paddr; /* (physical) address of line number */
- } l_addr;
- unsigned long l_lnno; /* line number */
-};
-
-/********************** SYMBOLS **********************/
-
-#define SYMNMLEN 8 /* # characters in a symbol name */
-#define FILNMLEN 14 /* # characters in a file name */
-#define DIMNUM 4 /* # array dimensions in auxiliary entry */
-
-struct internal_syment
-{
- union
- {
- char _n_name[SYMNMLEN]; /* old COFF version */
- struct
- {
- bfd_hostptr_t _n_zeroes; /* new == 0 */
- bfd_hostptr_t _n_offset; /* offset into string table */
- } _n_n;
- char *_n_nptr[2]; /* allows for overlaying */
- } _n;
- bfd_vma n_value; /* value of symbol */
- short n_scnum; /* section number */
- unsigned short n_flags; /* copy of flags from filhdr */
- unsigned short n_type; /* type and derived type */
- unsigned char n_sclass; /* storage class */
- unsigned char n_numaux; /* number of aux. entries */
-};
-
-#define n_name _n._n_name
-#define n_zeroes _n._n_n._n_zeroes
-#define n_offset _n._n_n._n_offset
-
-/* Relocatable symbols have number of the section in which they are defined,
- or one of the following: */
-
-#define N_UNDEF ((short)0) /* undefined symbol */
-#define N_ABS ((short)-1) /* value of symbol is absolute */
-#define N_DEBUG ((short)-2) /* debugging symbol -- value is meaningless */
-#define N_TV ((short)-3) /* indicates symbol needs preload transfer vector */
-#define P_TV ((short)-4) /* indicates symbol needs postload transfer vector*/
-
-/* Type of a symbol, in low N bits of the word. */
-
-#define T_NULL 0
-#define T_VOID 1 /* function argument (only used by compiler) */
-#define T_CHAR 2 /* character */
-#define T_SHORT 3 /* short integer */
-#define T_INT 4 /* integer */
-#define T_LONG 5 /* long integer */
-#define T_FLOAT 6 /* floating point */
-#define T_DOUBLE 7 /* double word */
-#define T_STRUCT 8 /* structure */
-#define T_UNION 9 /* union */
-#define T_ENUM 10 /* enumeration */
-#define T_MOE 11 /* member of enumeration*/
-#define T_UCHAR 12 /* unsigned character */
-#define T_USHORT 13 /* unsigned short */
-#define T_UINT 14 /* unsigned integer */
-#define T_ULONG 15 /* unsigned long */
-#define T_LNGDBL 16 /* long double */
-
-/* Derived types, in n_type. */
-
-#define DT_NON (0) /* no derived type */
-#define DT_PTR (1) /* pointer */
-#define DT_FCN (2) /* function */
-#define DT_ARY (3) /* array */
-
-#define BTYPE(x) ((x) & N_BTMASK)
-#define DTYPE(x) (((x) & N_TMASK) >> N_BTSHFT)
-
-#define ISPTR(x) \
- (((unsigned long) (x) & N_TMASK) == ((unsigned long) DT_PTR << N_BTSHFT))
-#define ISFCN(x) \
- (((unsigned long) (x) & N_TMASK) == ((unsigned long) DT_FCN << N_BTSHFT))
-#define ISARY(x) \
- (((unsigned long) (x) & N_TMASK) == ((unsigned long) DT_ARY << N_BTSHFT))
-#define ISTAG(x) \
- ((x) == C_STRTAG || (x) == C_UNTAG || (x) == C_ENTAG)
-#define DECREF(x) \
- ((((x) >> N_TSHIFT) & ~ N_BTMASK) | ((x) & N_BTMASK))
-
-union internal_auxent
-{
- struct
- {
-
- union
- {
- long l; /* str, un, or enum tag indx */
- struct coff_ptr_struct *p;
- } x_tagndx;
-
- union
- {
- struct
- {
- unsigned short x_lnno; /* declaration line number */
- unsigned short x_size; /* str/union/array size */
- } x_lnsz;
- long x_fsize; /* size of function */
- } x_misc;
-
- union
- {
- struct
- { /* if ISFCN, tag, or .bb */
- bfd_signed_vma x_lnnoptr; /* ptr to fcn line # */
- union
- { /* entry ndx past block end */
- long l;
- struct coff_ptr_struct *p;
- } x_endndx;
- } x_fcn;
-
- struct
- { /* if ISARY, up to 4 dimen. */
- unsigned short x_dimen[DIMNUM];
- } x_ary;
- } x_fcnary;
-
- unsigned short x_tvndx; /* tv index */
- } x_sym;
-
- union
- {
- char x_fname[FILNMLEN];
- struct
- {
- long x_zeroes;
- long x_offset;
- } x_n;
- } x_file;
-
- struct
- {
- long x_scnlen; /* section length */
- unsigned short x_nreloc; /* # relocation entries */
- unsigned short x_nlinno; /* # line numbers */
- unsigned long x_checksum; /* section COMDAT checksum for PE */
- unsigned short x_associated; /* COMDAT associated section index for PE */
- unsigned char x_comdat; /* COMDAT selection number for PE */
- } x_scn;
-
- struct
- {
- long x_tvfill; /* tv fill value */
- unsigned short x_tvlen; /* length of .tv */
- unsigned short x_tvran[2]; /* tv range */
- } x_tv; /* info about .tv section (in auxent of symbol .tv)) */
-
- /******************************************
- * RS/6000-specific auxent - last auxent for every external symbol
- ******************************************/
- struct
- {
- union
- { /* csect length or enclosing csect */
- bfd_signed_vma l;
- struct coff_ptr_struct *p;
- } x_scnlen;
- long x_parmhash; /* parm type hash index */
- unsigned short x_snhash; /* sect num with parm hash */
- unsigned char x_smtyp; /* symbol align and type */
- /* 0-4 - Log 2 of alignment */
- /* 5-7 - symbol type */
- unsigned char x_smclas; /* storage mapping class */
- long x_stab; /* dbx stab info index */
- unsigned short x_snstab; /* sect num with dbx stab */
- } x_csect; /* csect definition information */
-
-/* x_smtyp values: */
-
-#define SMTYP_ALIGN(x) ((x) >> 3) /* log2 of alignment */
-#define SMTYP_SMTYP(x) ((x) & 0x7) /* symbol type */
-/* Symbol type values: */
-#define XTY_ER 0 /* External reference */
-#define XTY_SD 1 /* Csect definition */
-#define XTY_LD 2 /* Label definition */
-#define XTY_CM 3 /* .BSS */
-#define XTY_EM 4 /* Error message */
-#define XTY_US 5 /* "Reserved for internal use" */
-
-/* x_smclas values: */
-
-#define XMC_PR 0 /* Read-only program code */
-#define XMC_RO 1 /* Read-only constant */
-#define XMC_DB 2 /* Read-only debug dictionary table */
-#define XMC_TC 3 /* Read-write general TOC entry */
-#define XMC_UA 4 /* Read-write unclassified */
-#define XMC_RW 5 /* Read-write data */
-#define XMC_GL 6 /* Read-only global linkage */
-#define XMC_XO 7 /* Read-only extended operation */
-#define XMC_SV 8 /* Read-only supervisor call */
-#define XMC_BS 9 /* Read-write BSS */
-#define XMC_DS 10 /* Read-write descriptor csect */
-#define XMC_UC 11 /* Read-write unnamed Fortran common */
-#define XMC_TI 12 /* Read-only traceback index csect */
-#define XMC_TB 13 /* Read-only traceback table csect */
-/* 14 ??? */
-#define XMC_TC0 15 /* Read-write TOC anchor */
-#define XMC_TD 16 /* Read-write data in TOC */
-
- /******************************************
- * I960-specific *2nd* aux. entry formats
- ******************************************/
- struct
- {
- /* This is a very old typo that keeps getting propagated. */
-#define x_stdindx x_stindx
- long x_stindx; /* sys. table entry */
- } x_sc; /* system call entry */
-
- struct
- {
- unsigned long x_balntry; /* BAL entry point */
- } x_bal; /* BAL-callable function */
-
- struct
- {
- unsigned long x_timestamp; /* time stamp */
- char x_idstring[20]; /* producer identity string */
- } x_ident; /* Producer ident info */
-
-};
-
-/********************** RELOCATION DIRECTIVES **********************/
-
-struct internal_reloc
-{
- bfd_vma r_vaddr; /* Virtual address of reference */
- long r_symndx; /* Index into symbol table */
- unsigned short r_type; /* Relocation type */
- unsigned char r_size; /* Used by RS/6000 and ECOFF */
- unsigned char r_extern; /* Used by ECOFF */
- unsigned long r_offset; /* Used by Alpha ECOFF, SPARC, others */
-};
-
-/* X86-64 relocations. */
-#define R_AMD64_ABS 0 /* Reference is absolute, no relocation is necessary. */
-#define R_AMD64_DIR64 1 /* 64-bit address (VA). */
-#define R_AMD64_DIR32 2 /* 32-bit address (VA) R_DIR32. */
-#define R_AMD64_IMAGEBASE 3 /* 32-bit absolute ref w/o base R_IMAGEBASE. */
-#define R_AMD64_PCRLONG 4 /* 32-bit relative address from byte following reloc R_PCRLONG. */
-#define R_AMD64_PCRLONG_1 5 /* 32-bit relative address from byte distance 1 from reloc. */
-#define R_AMD64_PCRLONG_2 6 /* 32-bit relative address from byte distance 2 from reloc. */
-#define R_AMD64_PCRLONG_3 7 /* 32-bit relative address from byte distance 3 from reloc. */
-#define R_AMD64_PCRLONG_4 8 /* 32-bit relative address from byte distance 4 from reloc. */
-#define R_AMD64_PCRLONG_5 9 /* 32-bit relative address from byte distance 5 from reloc. */
-#define R_AMD64_SECTION 10 /* Section index. */
-#define R_AMD64_SECREL 11 /* 32 bit offset from base of section containing target R_SECREL. */
-#define R_AMD64_SECREL7 12 /* 7 bit unsigned offset from base of section containing target. */
-#define R_AMD64_TOKEN 13 /* 32 bit metadata token. */
-#define R_AMD64_PCRQUAD 14 /* Pseude PC64 relocation - Note: not specified by MS/AMD but need for gas pc-relative 64bit wide relocation generated by ELF. */
-
-/* i386 Relocations. */
-
-#define R_DIR16 1
-#define R_REL24 5
-#define R_DIR32 6
-#define R_IMAGEBASE 7
-#define R_SECREL32 11
-#define R_RELBYTE 15
-#define R_RELWORD 16
-#define R_RELLONG 17
-#define R_PCRBYTE 18
-#define R_PCRWORD 19
-#define R_PCRLONG 20
-#define R_PCR24 21
-#define R_IPRSHORT 24
-#define R_IPRLONG 26
-#define R_GETSEG 29
-#define R_GETPA 30
-#define R_TAGWORD 31
-#define R_JUMPTARG 32 /* strange 29k 00xx00xx reloc */
-#define R_PARTLS16 32
-#define R_PARTMS8 33
-
-#define R_PCR16L 128
-#define R_PCR26L 129
-#define R_VRT16 130
-#define R_HVRT16 131
-#define R_LVRT16 132
-#define R_VRT32 133
-
-
-/* This reloc identifies mov.b instructions with a 16bit absolute
- address. The linker tries to turn insns with this reloc into
- an absolute 8-bit address. */
-#define R_MOV16B1 0x41
-
-/* This reloc identifies mov.b instructions which had a 16bit
- absolute address which have been shortened into a 8-bit
- absolute address. */
-#define R_MOV16B2 0x42
-
-/* This reloc identifies jmp insns with a 16bit target address;
- the linker tries to turn these insns into bra insns with
- an 8bit pc-relative target. */
-#define R_JMP1 0x43
-
-/* This reloc identifies a bra with an 8-bit pc-relative
- target that was formerly a jmp insn with a 16bit target. */
-#define R_JMP2 0x44
-
-/* ??? */
-#define R_RELLONG_NEG 0x45
-
-/* This reloc identifies jmp insns with a 24bit target address;
- the linker tries to turn these insns into bra insns with
- an 8bit pc-relative target. */
-#define R_JMPL1 0x46
-
-/* This reloc identifies a bra with an 8-bit pc-relative
- target that was formerly a jmp insn with a 24bit target. */
-#define R_JMPL2 0x47
-
-/* This reloc identifies mov.b instructions with a 24bit absolute
- address. The linker tries to turn insns with this reloc into
- an absolute 8-bit address. */
-
-#define R_MOV24B1 0x48
-
-/* This reloc identifies mov.b instructions which had a 24bit
- absolute address which have been shortened into a 8-bit
- absolute address. */
-#define R_MOV24B2 0x49
-
-/* An h8300 memory indirect jump/call. Forces the address of the jump/call
- target into the function vector (in page zero), and the address of the
- vector entry to be placed in the jump/call instruction. */
-#define R_MEM_INDIRECT 0x4a
-
-/* This reloc identifies a 16bit pc-relative branch target which was
- shortened into an 8bit pc-relative branch target. */
-#define R_PCRWORD_B 0x4b
-
-/* This reloc identifies mov.[wl] instructions with a 32/24 bit
- absolute address; the linker may turn this into a mov.[wl]
- insn with a 16bit absolute address. */
-#define R_MOVL1 0x4c
-
-/* This reloc identifies mov.[wl] insns which formerly had
- a 32/24bit absolute address and now have a 16bit absolute address. */
-#define R_MOVL2 0x4d
-
-/* This reloc identifies a bCC:8 which will have it's condition
- inverted and its target redirected to the target of the branch
- in the following insn. */
-#define R_BCC_INV 0x4e
-
-/* This reloc identifies a jmp instruction that has been deleted. */
-#define R_JMP_DEL 0x4f
-
-/* Z8k modes */
-#define R_IMM16 0x01 /* 16 bit abs */
-#define R_JR 0x02 /* jr 8 bit disp */
-#define R_IMM4L 0x23 /* low nibble */
-#define R_IMM8 0x22 /* 8 bit abs */
-#define R_IMM32 R_RELLONG /* 32 bit abs */
-#define R_CALL R_DA /* Absolute address which could be a callr */
-#define R_JP R_DA /* Absolute address which could be a jp */
-#define R_REL16 0x04 /* 16 bit PC rel */
-#define R_CALLR 0x05 /* callr 12 bit disp */
-#define R_SEG 0x10 /* set if in segmented mode */
-#define R_IMM4H 0x24 /* high nibble */
-#define R_DISP7 0x25 /* djnz displacement */
-
-/* Z80 modes */
-#define R_OFF8 0x32 /* 8 bit signed abs, for (i[xy]+d) */
-#define R_IMM24 0x33 /* 24 bit abs */
-/* R_JR, R_IMM8, R_IMM16, R_IMM32 - as for Z8k */
-
-/* H8500 modes */
-
-#define R_H8500_IMM8 1 /* 8 bit immediate */
-#define R_H8500_IMM16 2 /* 16 bit immediate */
-#define R_H8500_PCREL8 3 /* 8 bit pcrel */
-#define R_H8500_PCREL16 4 /* 16 bit pcrel */
-#define R_H8500_HIGH8 5 /* high 8 bits of 24 bit address */
-#define R_H8500_LOW16 7 /* low 16 bits of 24 bit immediate */
-#define R_H8500_IMM24 6 /* 24 bit immediate */
-#define R_H8500_IMM32 8 /* 32 bit immediate */
-#define R_H8500_HIGH16 9 /* high 16 bits of 32 bit immediate */
-
-/* W65 modes */
-
-#define R_W65_ABS8 1 /* addr & 0xff */
-#define R_W65_ABS16 2 /* addr & 0xffff */
-#define R_W65_ABS24 3 /* addr & 0xffffff */
-
-#define R_W65_ABS8S8 4 /* (addr >> 8) & 0xff */
-#define R_W65_ABS8S16 5 /* (addr >> 16) & 0xff */
-
-#define R_W65_ABS16S8 6 /* (addr >> 8) & 0ffff */
-#define R_W65_ABS16S16 7 /* (addr >> 16) & 0ffff */
-
-#define R_W65_PCR8 8
-#define R_W65_PCR16 9
-
-#define R_W65_DP 10 /* direct page 8 bits only */
-
-#endif /* GNU_COFF_INTERNAL_H */
diff --git a/include/coff/m68k.h b/include/coff/m68k.h
deleted file mode 100644
index c00c5a941..000000000
--- a/include/coff/m68k.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/* coff information for M68K
-
- Copyright 2001, 2010 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef GNU_COFF_M68K_H
-#define GNU_COFF_M68K_H 1
-
-#define L_LNNO_SIZE 2
-#include "coff/external.h"
-
-/* Motorola 68000/68008/68010/68020 */
-#define MC68MAGIC 0520
-#define MC68KWRMAGIC 0520 /* writeable text segments */
-#define MC68TVMAGIC 0521
-#define MC68KROMAGIC 0521 /* readonly shareable text segments */
-#define MC68KPGMAGIC 0522 /* demand paged text segments */
-#define M68MAGIC 0210
-#define M68TVMAGIC 0211
-
-/* This is the magic of the Bull dpx/2 */
-#define MC68KBCSMAGIC 0526
-
-/* This is Lynx's all-platform magic number for executables. */
-
-#define LYNXCOFFMAGIC 0415
-
-#define OMAGIC M68MAGIC
-
-/* This intentionally does not include MC68KBCSMAGIC; it only includes
- magic numbers which imply that names do not have underscores. */
-#define M68KBADMAG(x) (((x).f_magic != MC68MAGIC) \
- && ((x).f_magic != MC68KWRMAGIC) \
- && ((x).f_magic != MC68TVMAGIC) \
- && ((x).f_magic != MC68KROMAGIC) \
- && ((x).f_magic != MC68KPGMAGIC) \
- && ((x).f_magic != M68MAGIC) \
- && ((x).f_magic != M68TVMAGIC) \
- && ((x).f_magic != LYNXCOFFMAGIC))
-
-/* Magic numbers for the a.out header. */
-
-#define PAGEMAGICEXECSWAPPED 0407 /* executable (swapped) */
-#define PAGEMAGICPEXECSWAPPED 0410 /* pure executable (swapped) */
-#define PAGEMAGICPEXECTSHLIB 0443 /* pure executable (target shared library) */
-#define PAGEMAGICPEXECPAGED 0413 /* pure executable (paged) */
-
-/********************** RELOCATION DIRECTIVES **********************/
-
-struct external_reloc
-{
- char r_vaddr[4];
- char r_symndx[4];
- char r_type[2];
-#ifdef M68K_COFF_OFFSET
- char r_offset[4];
-#endif
-};
-
-#define RELOC struct external_reloc
-
-#ifdef M68K_COFF_OFFSET
-#define RELSZ 14
-#else
-#define RELSZ 10
-#endif
-
-#endif /* GNU_COFF_M68K_H */
diff --git a/include/coff/m88k.h b/include/coff/m88k.h
deleted file mode 100644
index 8e1b3c930..000000000
--- a/include/coff/m88k.h
+++ /dev/null
@@ -1,197 +0,0 @@
-/* coff information for 88k bcs
-
- Copyright 2001, 2010 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#define DO_NOT_DEFINE_SCNHDR
-#define L_LNNO_SIZE 4
-#define DO_NOT_DEFINE_SYMENT
-#define DO_NOT_DEFINE_AUXENT
-#include "coff/external.h"
-
-#define MC88MAGIC 0540 /* 88k BCS executable */
-#define MC88DMAGIC 0541 /* DG/UX executable */
-#define MC88OMAGIC 0555 /* Object file */
-
-#define MC88BADMAG(x) (((x).f_magic != MC88MAGIC) \
- && ((x).f_magic != MC88DMAGIC) \
- && ((x).f_magic != MC88OMAGIC))
-
-#define PAGEMAGIC3 0414 /* Split i&d, zero mapped */
-#define PAGEMAGICBCS 0413
-
-/********************** SECTION HEADER **********************/
-
-struct external_scnhdr
-{
- char s_name[8]; /* section name */
- char s_paddr[4]; /* physical address, aliased s_nlib */
- char s_vaddr[4]; /* virtual address */
- char s_size[4]; /* section size */
- char s_scnptr[4]; /* file ptr to raw data for section */
- char s_relptr[4]; /* file ptr to relocation */
- char s_lnnoptr[4]; /* file ptr to line numbers */
- char s_nreloc[4]; /* number of relocation entries */
- char s_nlnno[4]; /* number of line number entries*/
- char s_flags[4]; /* flags */
-};
-
-#define SCNHDR struct external_scnhdr
-#define SCNHSZ 44
-
-/* Names of "special" sections. */
-#define _TEXT ".text"
-#define _DATA ".data"
-#define _BSS ".bss"
-#define _COMMENT ".comment"
-
-
-/********************** SYMBOLS **********************/
-
-#define E_SYMNMLEN 8 /* # characters in a symbol name */
-#define E_FILNMLEN 14 /* # characters in a file name */
-#define E_DIMNUM 4 /* # array dimensions in auxiliary entry */
-
-struct external_syment
-{
- union
- {
- char e_name[E_SYMNMLEN];
-
- struct
- {
- char e_zeroes[4];
- char e_offset[4];
- } e;
-
- } e;
-
- char e_value[4];
- char e_scnum[2];
- char e_type[2];
- char e_sclass[1];
- char e_numaux[1];
- char pad2[2];
-};
-
-#define N_BTMASK 017
-#define N_TMASK 060
-#define N_BTSHFT 4
-#define N_TSHIFT 2
-
-/* Note that this isn't the same shape as other coffs */
-union external_auxent
-{
- struct
- {
- char x_tagndx[4]; /* str, un, or enum tag indx */
- /* 4 */
-
- union
- {
- char x_fsize[4]; /* size of function */
-
- struct
- {
- char x_lnno[4]; /* declaration line number */
- char x_size[4]; /* str/union/array size */
- } x_lnsz;
-
- } x_misc;
-
- /* 12 */
- union
- {
- struct /* if ISFCN, tag, or .bb */
- {
- char x_lnnoptr[4]; /* ptr to fcn line # */
- char x_endndx[4]; /* entry ndx past block end */
- } x_fcn;
-
- struct /* if ISARY, up to 4 dimen. */
- {
- char x_dimen[E_DIMNUM][2];
- } x_ary;
-
- } x_fcnary;
- /* 20 */
-
- } x_sym;
-
- union
- {
- char x_fname[E_FILNMLEN];
-
- struct
- {
- char x_zeroes[4];
- char x_offset[4];
- } x_n;
-
- } x_file;
-
- struct
- {
- char x_scnlen[4]; /* section length */
- char x_nreloc[4]; /* # relocation entries */
- char x_nlinno[4]; /* # line numbers */
- } x_scn;
-
- struct
- {
- char x_tvfill[4]; /* tv fill value */
- char x_tvlen[2]; /* length of .tv */
- char x_tvran[2][2]; /* tv range */
- } x_tv; /* info about .tv section (in auxent of symbol .tv)) */
-};
-
-#define GET_LNSZ_SIZE(abfd, ext) \
- H_GET_32 (abfd, ext->x_sym.x_misc.x_lnsz.x_size)
-#define GET_LNSZ_LNNO(abfd, ext) \
- H_GET_32 (abfd, ext->x_sym.x_misc.x_lnsz.x_lnno)
-#define PUT_LNSZ_LNNO(abfd, in, ext) \
- H_PUT_32 (abfd, in, ext->x_sym.x_misc.x_lnsz.x_lnno)
-#define PUT_LNSZ_SIZE(abfd, in, ext) \
- H_PUT_32 (abfd, in, ext->x_sym.x_misc.x_lnsz.x_size)
-#define GET_SCN_NRELOC(abfd, ext) \
- H_GET_32 (abfd, ext->x_scn.x_nreloc)
-#define GET_SCN_NLINNO(abfd, ext) \
- H_GET_32 (abfd, ext->x_scn.x_nlinno)
-#define PUT_SCN_NRELOC(abfd, in, ext) \
- H_PUT_32 (abfd, in, ext->x_scn.x_nreloc)
-#define PUT_SCN_NLINNO(abfd, in, ext) \
- H_PUT_32 (abfd,in, ext->x_scn.x_nlinno)
-
-#define SYMENT struct external_syment
-#define SYMESZ 20
-#define AUXENT union external_auxent
-#define AUXESZ 20
-
-/********************** RELOCATION DIRECTIVES **********************/
-
-struct external_reloc
-{
- char r_vaddr[4];
- char r_symndx[4];
- char r_type[2];
- char r_offset[2];
-};
-
-#define RELOC struct external_reloc
-#define RELSZ 12
-
-#define NO_TVNDX
diff --git a/include/coff/mcore.h b/include/coff/mcore.h
deleted file mode 100644
index 60dbfb272..000000000
--- a/include/coff/mcore.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/* Motorola MCore support for BFD.
- Copyright 1999, 2000, 2010 Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-/* This file holds definitions specific to the MCore COFF/PE ABI. */
-
-#ifndef _COFF_MORE_H
-#define _COFF_MORE_H
-
-#define INCLUDE_COMDAT_FIELDS_IN_AUXENT
-#define L_LNNO_SIZE 2
-#include "coff/external.h"
-
-#define MCOREMAGIC 0xb00 /* I just made this up */
-
-#define MCOREBADMAG(x) (((x).f_magic != MCOREMAGIC))
-
-#define E_DIMNUM 4 /* # array dimensions in auxiliary entry */
-
-#define IMAGE_REL_MCORE_ABSOLUTE 0x0000
-#define IMAGE_REL_MCORE_ADDR32 0x0001
-#define IMAGE_REL_MCORE_PCREL_IMM8BY4 0x0002
-#define IMAGE_REL_MCORE_PCREL_IMM11BY2 0x0003
-#define IMAGE_REL_MCORE_PCREL_IMM4BY2 0x0004
-#define IMAGE_REL_MCORE_PCREL_32 0x0005
-#define IMAGE_REL_MCORE_PCREL_JSR_IMM11BY2 0x0006
-#define IMAGE_REL_MCORE_RVA 0x0007
-
-#define PEMCORE
-
-#define OMAGIC 0404 /* object files, eg as output */
-#define ZMAGIC 0413 /* demand load format, eg normal ld output */
-#define STMAGIC 0401 /* target shlib */
-#define SHMAGIC 0443 /* host shlib */
-
-/* From winnt.h */
-#define IMAGE_NT_OPTIONAL_HDR_MAGIC 0x10b
-
-/* Define some NT default values. */
-#define NT_SECTION_ALIGNMENT 0x1000
-#define NT_FILE_ALIGNMENT 0x200
-#define NT_DEF_RESERVE 0x100000
-#define NT_DEF_COMMIT 0x1000
-
-struct external_reloc
-{
- char r_vaddr [4];
- char r_symndx [4];
- char r_type [2];
- char r_offset [4];
-};
-
-#define RELOC struct external_reloc
-#define RELSZ 14
-
-#endif /* __COFF_MCORE_H */
diff --git a/include/coff/mips.h b/include/coff/mips.h
deleted file mode 100644
index f1c243b6d..000000000
--- a/include/coff/mips.h
+++ /dev/null
@@ -1,344 +0,0 @@
-/* ECOFF support on MIPS machines.
- coff/ecoff.h must be included before this file.
-
- Copyright 1999, 2004, 2010 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#define DO_NOT_DEFINE_AOUTHDR
-#define L_LNNO_SIZE 4
-#include "coff/external.h"
-
-/* Magic numbers are defined in coff/ecoff.h. */
-#define MIPS_ECOFF_BADMAG(x) (((x).f_magic!=MIPS_MAGIC_1) && \
- ((x).f_magic!=MIPS_MAGIC_LITTLE) &&\
- ((x).f_magic!=MIPS_MAGIC_BIG) && \
- ((x).f_magic!=MIPS_MAGIC_LITTLE2) && \
- ((x).f_magic!=MIPS_MAGIC_BIG2) && \
- ((x).f_magic!=MIPS_MAGIC_LITTLE3) && \
- ((x).f_magic!=MIPS_MAGIC_BIG3))
-
-
-/********************** AOUT "OPTIONAL HEADER" **********************/
-
-typedef struct external_aouthdr
-{
- unsigned char magic[2]; /* type of file */
- unsigned char vstamp[2]; /* version stamp */
- unsigned char tsize[4]; /* text size in bytes, padded to FW bdry*/
- unsigned char dsize[4]; /* initialized data " " */
- unsigned char bsize[4]; /* uninitialized data " " */
- unsigned char entry[4]; /* entry pt. */
- unsigned char text_start[4]; /* base of text used for this file */
- unsigned char data_start[4]; /* base of data used for this file */
- unsigned char bss_start[4]; /* base of bss used for this file */
- unsigned char gprmask[4]; /* ?? */
- unsigned char cprmask[4][4]; /* ?? */
- unsigned char gp_value[4]; /* value for gp register */
-} AOUTHDR;
-
-/* compute size of a header */
-
-#define AOUTSZ 56
-#define AOUTHDRSZ 56
-
-/********************** RELOCATION DIRECTIVES **********************/
-
-struct external_reloc
- {
- unsigned char r_vaddr[4];
- unsigned char r_bits[4];
- };
-
-#define RELOC struct external_reloc
-#define RELSZ 8
-
-/* MIPS ECOFF uses a packed 8 byte format for relocs. These constants
- are used to unpack the r_bits field. */
-
-#define RELOC_BITS0_SYMNDX_SH_LEFT_BIG 16
-#define RELOC_BITS0_SYMNDX_SH_LEFT_LITTLE 0
-
-#define RELOC_BITS1_SYMNDX_SH_LEFT_BIG 8
-#define RELOC_BITS1_SYMNDX_SH_LEFT_LITTLE 8
-
-#define RELOC_BITS2_SYMNDX_SH_LEFT_BIG 0
-#define RELOC_BITS2_SYMNDX_SH_LEFT_LITTLE 16
-
-/* Originally, ECOFF used four bits for the reloc type and had three
- reserved bits. Irix 4 added another bit for the reloc type, which
- was easy because it was big endian and one of the spare bits became
- the new most significant bit. To make this also work for little
- endian ECOFF, we need to wrap one of the reserved bits around to
- become the most significant bit of the reloc type. */
-#define RELOC_BITS3_TYPE_BIG 0x3E
-#define RELOC_BITS3_TYPE_SH_BIG 1
-#define RELOC_BITS3_TYPE_LITTLE 0x78
-#define RELOC_BITS3_TYPE_SH_LITTLE 3
-#define RELOC_BITS3_TYPEHI_LITTLE 0x04
-#define RELOC_BITS3_TYPEHI_SH_LITTLE 2
-
-#define RELOC_BITS3_EXTERN_BIG 0x01
-#define RELOC_BITS3_EXTERN_LITTLE 0x80
-
-/* The r_type field in a reloc is one of the following values. I
- don't know if any other values can appear. These seem to be all
- that occur in the Ultrix 4.2 libraries. */
-#define MIPS_R_IGNORE 0
-#define MIPS_R_REFHALF 1
-#define MIPS_R_REFWORD 2
-#define MIPS_R_JMPADDR 3
-#define MIPS_R_REFHI 4
-#define MIPS_R_REFLO 5
-#define MIPS_R_GPREL 6
-#define MIPS_R_LITERAL 7
-
-/* FIXME: This relocation is used (internally only) to represent branches
- when assembling. It should never appear in output files, and
- be removed. (It used to be used for embedded-PIC support.) */
-#define MIPS_R_PCREL16 12
-
-/********************** STABS **********************/
-
-#define MIPS_IS_STAB ECOFF_IS_STAB
-#define MIPS_MARK_STAB ECOFF_MARK_STAB
-#define MIPS_UNMARK_STAB ECOFF_UNMARK_STAB
-
-/********************** SYMBOLIC INFORMATION **********************/
-
-/* Written by John Gilmore. */
-
-/* ECOFF uses COFF-like section structures, but its own symbol format.
- This file defines the symbol format in fields whose size and alignment
- will not vary on different host systems. */
-
-/* File header as a set of bytes */
-
-struct hdr_ext
-{
- unsigned char h_magic[2];
- unsigned char h_vstamp[2];
- unsigned char h_ilineMax[4];
- unsigned char h_cbLine[4];
- unsigned char h_cbLineOffset[4];
- unsigned char h_idnMax[4];
- unsigned char h_cbDnOffset[4];
- unsigned char h_ipdMax[4];
- unsigned char h_cbPdOffset[4];
- unsigned char h_isymMax[4];
- unsigned char h_cbSymOffset[4];
- unsigned char h_ioptMax[4];
- unsigned char h_cbOptOffset[4];
- unsigned char h_iauxMax[4];
- unsigned char h_cbAuxOffset[4];
- unsigned char h_issMax[4];
- unsigned char h_cbSsOffset[4];
- unsigned char h_issExtMax[4];
- unsigned char h_cbSsExtOffset[4];
- unsigned char h_ifdMax[4];
- unsigned char h_cbFdOffset[4];
- unsigned char h_crfd[4];
- unsigned char h_cbRfdOffset[4];
- unsigned char h_iextMax[4];
- unsigned char h_cbExtOffset[4];
-};
-
-/* File descriptor external record */
-
-struct fdr_ext
-{
- unsigned char f_adr[4];
- unsigned char f_rss[4];
- unsigned char f_issBase[4];
- unsigned char f_cbSs[4];
- unsigned char f_isymBase[4];
- unsigned char f_csym[4];
- unsigned char f_ilineBase[4];
- unsigned char f_cline[4];
- unsigned char f_ioptBase[4];
- unsigned char f_copt[4];
- unsigned char f_ipdFirst[2];
- unsigned char f_cpd[2];
- unsigned char f_iauxBase[4];
- unsigned char f_caux[4];
- unsigned char f_rfdBase[4];
- unsigned char f_crfd[4];
- unsigned char f_bits1[1];
- unsigned char f_bits2[3];
- unsigned char f_cbLineOffset[4];
- unsigned char f_cbLine[4];
-};
-
-#define FDR_BITS1_LANG_BIG 0xF8
-#define FDR_BITS1_LANG_SH_BIG 3
-#define FDR_BITS1_LANG_LITTLE 0x1F
-#define FDR_BITS1_LANG_SH_LITTLE 0
-
-#define FDR_BITS1_FMERGE_BIG 0x04
-#define FDR_BITS1_FMERGE_LITTLE 0x20
-
-#define FDR_BITS1_FREADIN_BIG 0x02
-#define FDR_BITS1_FREADIN_LITTLE 0x40
-
-#define FDR_BITS1_FBIGENDIAN_BIG 0x01
-#define FDR_BITS1_FBIGENDIAN_LITTLE 0x80
-
-#define FDR_BITS2_GLEVEL_BIG 0xC0
-#define FDR_BITS2_GLEVEL_SH_BIG 6
-#define FDR_BITS2_GLEVEL_LITTLE 0x03
-#define FDR_BITS2_GLEVEL_SH_LITTLE 0
-
-/* We ignore the `reserved' field in bits2. */
-
-/* Procedure descriptor external record */
-
-struct pdr_ext
-{
- unsigned char p_adr[4];
- unsigned char p_isym[4];
- unsigned char p_iline[4];
- unsigned char p_regmask[4];
- unsigned char p_regoffset[4];
- unsigned char p_iopt[4];
- unsigned char p_fregmask[4];
- unsigned char p_fregoffset[4];
- unsigned char p_frameoffset[4];
- unsigned char p_framereg[2];
- unsigned char p_pcreg[2];
- unsigned char p_lnLow[4];
- unsigned char p_lnHigh[4];
- unsigned char p_cbLineOffset[4];
-};
-
-/* Runtime procedure table */
-
-struct rpdr_ext
-{
- unsigned char p_adr[4];
- unsigned char p_regmask[4];
- unsigned char p_regoffset[4];
- unsigned char p_fregmask[4];
- unsigned char p_fregoffset[4];
- unsigned char p_frameoffset[4];
- unsigned char p_framereg[2];
- unsigned char p_pcreg[2];
- unsigned char p_irpss[4];
- unsigned char p_reserved[4];
- unsigned char p_exception_info[4];
-};
-
-/* Line numbers */
-
-struct line_ext
-{
- unsigned char l_line[4];
-};
-
-/* Symbol external record */
-
-struct sym_ext
-{
- unsigned char s_iss[4];
- unsigned char s_value[4];
- unsigned char s_bits1[1];
- unsigned char s_bits2[1];
- unsigned char s_bits3[1];
- unsigned char s_bits4[1];
-};
-
-#define SYM_BITS1_ST_BIG 0xFC
-#define SYM_BITS1_ST_SH_BIG 2
-#define SYM_BITS1_ST_LITTLE 0x3F
-#define SYM_BITS1_ST_SH_LITTLE 0
-
-#define SYM_BITS1_SC_BIG 0x03
-#define SYM_BITS1_SC_SH_LEFT_BIG 3
-#define SYM_BITS1_SC_LITTLE 0xC0
-#define SYM_BITS1_SC_SH_LITTLE 6
-
-#define SYM_BITS2_SC_BIG 0xE0
-#define SYM_BITS2_SC_SH_BIG 5
-#define SYM_BITS2_SC_LITTLE 0x07
-#define SYM_BITS2_SC_SH_LEFT_LITTLE 2
-
-#define SYM_BITS2_RESERVED_BIG 0x10
-#define SYM_BITS2_RESERVED_LITTLE 0x08
-
-#define SYM_BITS2_INDEX_BIG 0x0F
-#define SYM_BITS2_INDEX_SH_LEFT_BIG 16
-#define SYM_BITS2_INDEX_LITTLE 0xF0
-#define SYM_BITS2_INDEX_SH_LITTLE 4
-
-#define SYM_BITS3_INDEX_SH_LEFT_BIG 8
-#define SYM_BITS3_INDEX_SH_LEFT_LITTLE 4
-
-#define SYM_BITS4_INDEX_SH_LEFT_BIG 0
-#define SYM_BITS4_INDEX_SH_LEFT_LITTLE 12
-
-/* External symbol external record */
-
-struct ext_ext
-{
- unsigned char es_bits1[1];
- unsigned char es_bits2[1];
- unsigned char es_ifd[2];
- struct sym_ext es_asym;
-};
-
-#define EXT_BITS1_JMPTBL_BIG 0x80
-#define EXT_BITS1_JMPTBL_LITTLE 0x01
-
-#define EXT_BITS1_COBOL_MAIN_BIG 0x40
-#define EXT_BITS1_COBOL_MAIN_LITTLE 0x02
-
-#define EXT_BITS1_WEAKEXT_BIG 0x20
-#define EXT_BITS1_WEAKEXT_LITTLE 0x04
-
-/* Dense numbers external record */
-
-struct dnr_ext
-{
- unsigned char d_rfd[4];
- unsigned char d_index[4];
-};
-
-/* Relative file descriptor */
-
-struct rfd_ext
-{
- unsigned char rfd[4];
-};
-
-/* Optimizer symbol external record */
-
-struct opt_ext
-{
- unsigned char o_bits1[1];
- unsigned char o_bits2[1];
- unsigned char o_bits3[1];
- unsigned char o_bits4[1];
- struct rndx_ext o_rndx;
- unsigned char o_offset[4];
-};
-
-#define OPT_BITS2_VALUE_SH_LEFT_BIG 16
-#define OPT_BITS2_VALUE_SH_LEFT_LITTLE 0
-
-#define OPT_BITS3_VALUE_SH_LEFT_BIG 8
-#define OPT_BITS3_VALUE_SH_LEFT_LITTLE 8
-
-#define OPT_BITS4_VALUE_SH_LEFT_BIG 0
-#define OPT_BITS4_VALUE_SH_LEFT_LITTLE 16
diff --git a/include/coff/mipspe.h b/include/coff/mipspe.h
deleted file mode 100644
index f1a0d439f..000000000
--- a/include/coff/mipspe.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/* coff information for Windows CE with MIPS VR4111
-
- Copyright 2000, 2010 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#define L_LNNO_SIZE 2
-#define INCLUDE_COMDAT_FIELDS_IN_AUXENT
-#include "coff/external.h"
-
-#define MIPS_ARCH_MAGIC_WINCE 0x0166 /* Windows CE - little endian */
-#define MIPS_PE_MAGIC 0x010b
-
-#define MIPSBADMAG(x) ((x).f_magic != MIPS_ARCH_MAGIC_WINCE)
-
-/* define some NT default values */
-/* #define NT_IMAGE_BASE 0x400000 moved to internal.h */
-#define NT_SECTION_ALIGNMENT 0x1000
-#define NT_FILE_ALIGNMENT 0x200
-#define NT_DEF_RESERVE 0x100000
-#define NT_DEF_COMMIT 0x1000
-
-/********************** RELOCATION DIRECTIVES **********************/
-
-/* The external reloc has an offset field, because some of the reloc
- types on the h8 don't have room in the instruction for the entire
- offset - eg the strange jump and high page addressing modes. */
-
-struct external_reloc
-{
- char r_vaddr[4];
- char r_symndx[4];
- char r_type[2];
-};
-
-#define RELOC struct external_reloc
-#define RELSZ 10
-
-/* MIPS PE relocation types. */
-
-#define MIPS_R_ABSOLUTE 0 /* ignored */
-#define MIPS_R_REFHALF 1
-#define MIPS_R_REFWORD 2
-#define MIPS_R_JMPADDR 3
-#define MIPS_R_REFHI 4 /* PAIR follows */
-#define MIPS_R_REFLO 5
-#define MIPS_R_GPREL 6
-#define MIPS_R_LITERAL 7 /* same as GPREL */
-#define MIPS_R_SECTION 10
-#define MIPS_R_SECREL 11
-#define MIPS_R_SECRELLO 12
-#define MIPS_R_SECRELHI 13 /* PAIR follows */
-#define MIPS_R_RVA 34 /* 0x22 */
-#define MIPS_R_PAIR 37 /* 0x25 - symndx is really a signed 16-bit addend */
diff --git a/include/coff/or32.h b/include/coff/or32.h
deleted file mode 100644
index 9be7887ad..000000000
--- a/include/coff/or32.h
+++ /dev/null
@@ -1,288 +0,0 @@
-/* COFF specification for OpenRISC 1000.
- Copyright (C) 1993-2000, 2002, 2010 Free Software Foundation, Inc.
- Contributed by David Wood @ New York University.
- Modified by Johan Rydberg, <johan.rydberg@netinsight.se>
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef OR32
-# define OR32
-#endif
-
-/* File Header and related definitions. */
-struct external_filehdr
-{
- char f_magic[2]; /* magic number */
- char f_nscns[2]; /* number of sections */
- char f_timdat[4]; /* time & date stamp */
- char f_symptr[4]; /* file pointer to symtab */
- char f_nsyms[4]; /* number of symtab entries */
- char f_opthdr[2]; /* sizeof(optional hdr) */
- char f_flags[2]; /* flags */
-};
-
-#define FILHDR struct external_filehdr
-#define FILHSZ 20
-
-/* Magic numbers for OpenRISC 1000. As it is know we use the
- numbers for Am29000.
-
- (AT&T will assign the "real" magic number). */
-#define SIPFBOMAGIC 0572 /* Am29000 (Byte 0 is MSB). */
-#define SIPRBOMAGIC 0573 /* Am29000 (Byte 0 is LSB). */
-
-#define OR32_MAGIC_BIG SIPFBOMAGIC
-#define OR32_MAGIC_LITTLE SIPRBOMAGIC
-#define OR32BADMAG(x) (((x).f_magic!=OR32_MAGIC_BIG) && \
- ((x).f_magic!=OR32_MAGIC_LITTLE))
-
-#define OMAGIC OR32_MAGIC_BIG
-
-/* Optional (a.out) header. */
-typedef struct external_aouthdr
-{
- char magic[2]; /* type of file */
- char vstamp[2]; /* version stamp */
- char tsize[4]; /* text size in bytes, padded to FW bdry */
- char dsize[4]; /* initialized data " " */
- char bsize[4]; /* uninitialized data " " */
- char entry[4]; /* entry pt. */
- char text_start[4]; /* base of text used for this file */
- char data_start[4]; /* base of data used for this file */
-} AOUTHDR;
-
-#define AOUTSZ 28
-#define AOUTHDRSZ 28
-
-/* aouthdr magic numbers. */
-#define NMAGIC 0410 /* separate i/d executable. */
-#define SHMAGIC 0406 /* NYU/Ultra3 shared data executable
- (writable text). */
-
-#define _ETEXT "_etext"
-
-/* Section header and related definitions. */
-struct external_scnhdr
-{
- char s_name[8]; /* section name */
- char s_paddr[4]; /* physical address, aliased s_nlib */
- char s_vaddr[4]; /* virtual address */
- char s_size[4]; /* section size */
- char s_scnptr[4]; /* file ptr to raw data for section */
- char s_relptr[4]; /* file ptr to relocation */
- char s_lnnoptr[4]; /* file ptr to line numbers */
- char s_nreloc[2]; /* number of relocation entries */
- char s_nlnno[2]; /* number of line number entries */
- char s_flags[4]; /* flags */
-};
-
-#define SCNHDR struct external_scnhdr
-#define SCNHSZ 40
-
-/* Names of "special" sections: */
-#define _TEXT ".text"
-#define _DATA ".data"
-#define _BSS ".bss"
-#define _LIT ".lit"
-
-/* Section types - with additional section type for global
- registers which will be relocatable for the OpenRISC 1000.
-
- In instances where it is necessary for a linker to produce an
- output file which contains text or data not based at virtual
- address 0, e.g. for a ROM, then the linker should accept
- address base information as command input and use PAD sections
- to skip over unused addresses. */
-#define STYP_BSSREG 0x1200 /* Global register area (like STYP_INFO) */
-#define STYP_ENVIR 0x2200 /* Environment (like STYP_INFO) */
-#define STYP_ABS 0x4000 /* Absolute (allocated, not reloc, loaded) */
-
-/* Relocation information declaration and related definitions: */
-struct external_reloc
-{
- char r_vaddr[4]; /* (virtual) address of reference */
- char r_symndx[4]; /* index into symbol table */
- char r_type[2]; /* relocation type */
-};
-
-#define RELOC struct external_reloc
-#define RELSZ 10 /* sizeof (RELOC) */
-
-/* Relocation types for the OpenRISC 1000: */
-
-#define R_ABS 0 /* reference is absolute */
-#define R_IREL 030 /* instruction relative (jmp/call) */
-#define R_IABS 031 /* instruction absolute (jmp/call) */
-#define R_ILOHALF 032 /* instruction low half (const) */
-#define R_IHIHALF 033 /* instruction high half (consth) part 1 */
-#define R_IHCONST 034 /* instruction high half (consth) part 2 */
- /* constant offset of R_IHIHALF relocation */
-#define R_BYTE 035 /* relocatable byte value */
-#define R_HWORD 036 /* relocatable halfword value */
-#define R_WORD 037 /* relocatable word value */
-
-#define R_IGLBLRC 040 /* instruction global register RC */
-#define R_IGLBLRA 041 /* instruction global register RA */
-#define R_IGLBLRB 042 /* instruction global register RB */
-
-/*
- NOTE:
- All the "I" forms refer to 29000 instruction formats. The linker is
- expected to know how the numeric information is split and/or aligned
- within the instruction word(s). R_BYTE works for instructions, too.
-
- If the parameter to a CONSTH instruction is a relocatable type, two
- relocation records are written. The first has an r_type of R_IHIHALF
- (33 octal) and a normal r_vaddr and r_symndx. The second relocation
- record has an r_type of R_IHCONST (34 octal), a normal r_vaddr (which
- is redundant), and an r_symndx containing the 32-bit constant offset
- to the relocation instead of the actual symbol table index. This
- second record is always written, even if the constant offset is zero.
- The constant fields of the instruction are set to zero. */
-
-/* Line number entry declaration and related definitions: */
-struct external_lineno
-{
- union
- {
- char l_symndx[4]; /* function name symbol index, iff l_lnno == 0*/
- char l_paddr[4]; /* (physical) address of line number */
- }
- l_addr;
-
- char l_lnno[2]; /* line number */
-};
-
-#define LINENO struct external_lineno
-#define LINESZ 6 /* sizeof (LINENO) */
-
-/* Symbol entry declaration and related definitions: */
-#define E_SYMNMLEN 8 /* Number of characters in a symbol name */
-
-struct external_syment
-{
- union
- {
- char e_name[E_SYMNMLEN];
- struct
- {
- char e_zeroes[4];
- char e_offset[4];
- }
- e;
- }
- e;
-
- char e_value[4];
- char e_scnum[2];
- char e_type[2];
- char e_sclass[1];
- char e_numaux[1];
-};
-
-#define SYMENT struct external_syment
-#define SYMESZ 18
-
-/* Storage class definitions - new classes for global registers: */
-#define C_GLBLREG 19 /* global register */
-#define C_EXTREG 20 /* external global register */
-#define C_DEFREG 21 /* ext. def. of global register */
-
-/* Derived symbol mask/shifts: */
-#define N_BTMASK (0xf)
-#define N_BTSHFT (4)
-#define N_TMASK (0x30)
-#define N_TSHIFT (2)
-
-/* Auxiliary symbol table entry declaration and related
- definitions. */
-#define E_FILNMLEN 14 /* # characters in a file name */
-#define E_DIMNUM 4 /* # array dimensions in auxiliary entry */
-
-union external_auxent
-{
- struct
- {
- char x_tagndx[4]; /* str, un, or enum tag indx */
- union
- {
- struct
- {
- char x_lnno[2]; /* declaration line number */
- char x_size[2]; /* str/union/array size */
- }
- x_lnsz;
-
- char x_fsize[4]; /* size of function */
- }
- x_misc;
-
- union
- {
- struct /* if ISFCN, tag, or .bb */
- {
- char x_lnnoptr[4]; /* ptr to fcn line # */
- char x_endndx[4]; /* entry ndx past block end */
- }
- x_fcn;
-
- struct /* if ISARY, up to 4 dimen. */
- {
- char x_dimen[E_DIMNUM][2];
- }
- x_ary;
- }
- x_fcnary;
-
- char x_tvndx[2]; /* tv index */
- }
- x_sym;
-
- union
- {
- char x_fname[E_FILNMLEN];
-
- struct
- {
- char x_zeroes[4];
- char x_offset[4];
- }
- x_n;
- }
- x_file;
-
- struct
- {
- char x_scnlen[4]; /* section length */
- char x_nreloc[2]; /* # relocation entries */
- char x_nlinno[2]; /* # line numbers */
- }
- x_scn;
-
- struct
- {
- char x_tvfill[4]; /* tv fill value */
- char x_tvlen[2]; /* length of .tv */
- char x_tvran[2][2]; /* tv range */
- }
- x_tv; /* info about .tv section
- (in auxent of symbol .tv)) */
-};
-
-#define AUXENT union external_auxent
-#define AUXESZ 18
diff --git a/include/coff/pe.h b/include/coff/pe.h
deleted file mode 100644
index 601a68e8f..000000000
--- a/include/coff/pe.h
+++ /dev/null
@@ -1,512 +0,0 @@
-/* pe.h - PE COFF header information
-
- Copyright 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007, 2009, 2010
- Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-#ifndef _PE_H
-#define _PE_H
-
-/* NT specific file attributes. */
-#define IMAGE_FILE_RELOCS_STRIPPED 0x0001
-#define IMAGE_FILE_EXECUTABLE_IMAGE 0x0002
-#define IMAGE_FILE_LINE_NUMS_STRIPPED 0x0004
-#define IMAGE_FILE_LOCAL_SYMS_STRIPPED 0x0008
-#define IMAGE_FILE_AGGRESSIVE_WS_TRIM 0x0010
-#define IMAGE_FILE_LARGE_ADDRESS_AWARE 0x0020
-#define IMAGE_FILE_16BIT_MACHINE 0x0040
-#define IMAGE_FILE_BYTES_REVERSED_LO 0x0080
-#define IMAGE_FILE_32BIT_MACHINE 0x0100
-#define IMAGE_FILE_DEBUG_STRIPPED 0x0200
-#define IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP 0x0400
-#define IMAGE_FILE_NET_RUN_FROM_SWAP 0x0800
-#define IMAGE_FILE_SYSTEM 0x1000
-#define IMAGE_FILE_DLL 0x2000
-#define IMAGE_FILE_UP_SYSTEM_ONLY 0x4000
-#define IMAGE_FILE_BYTES_REVERSED_HI 0x8000
-
-/* DllCharacteristics flag bits. The inconsistent naming may seem
- odd, but that is how they are defined in the PE specification. */
-#define IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE 0x0040
-#define IMAGE_DLL_CHARACTERISTICS_FORCE_INTEGRITY 0x0080
-#define IMAGE_DLL_CHARACTERISTICS_NX_COMPAT 0x0100
-#define IMAGE_DLLCHARACTERISTICS_NO_ISOLATION 0x0200
-#define IMAGE_DLLCHARACTERISTICS_NO_SEH 0x0400
-#define IMAGE_DLLCHARACTERISTICS_NO_BIND 0x0800
-#define IMAGE_DLLCHARACTERISTICS_WDM_DRIVER 0x2000
-#define IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE 0x8000
-
-/* Additional flags to be set for section headers to allow the NT loader to
- read and write to the section data (to replace the addresses of data in
- dlls for one thing); also to execute the section in .text's case. */
-#define IMAGE_SCN_MEM_DISCARDABLE 0x02000000
-#define IMAGE_SCN_MEM_EXECUTE 0x20000000
-#define IMAGE_SCN_MEM_READ 0x40000000
-#define IMAGE_SCN_MEM_WRITE 0x80000000
-
-/* Section characteristics added for ppc-nt. */
-
-#define IMAGE_SCN_TYPE_NO_PAD 0x00000008 /* Reserved. */
-
-#define IMAGE_SCN_CNT_CODE 0x00000020 /* Section contains code. */
-#define IMAGE_SCN_CNT_INITIALIZED_DATA 0x00000040 /* Section contains initialized data. */
-#define IMAGE_SCN_CNT_UNINITIALIZED_DATA 0x00000080 /* Section contains uninitialized data. */
-
-#define IMAGE_SCN_LNK_OTHER 0x00000100 /* Reserved. */
-#define IMAGE_SCN_LNK_INFO 0x00000200 /* Section contains comments or some other type of information. */
-#define IMAGE_SCN_LNK_REMOVE 0x00000800 /* Section contents will not become part of image. */
-#define IMAGE_SCN_LNK_COMDAT 0x00001000 /* Section contents comdat. */
-
-#define IMAGE_SCN_MEM_FARDATA 0x00008000
-
-#define IMAGE_SCN_MEM_PURGEABLE 0x00020000
-#define IMAGE_SCN_MEM_16BIT 0x00020000
-#define IMAGE_SCN_MEM_LOCKED 0x00040000
-#define IMAGE_SCN_MEM_PRELOAD 0x00080000
-
-/* Bit position in the s_flags field where the alignment values start. */
-#define IMAGE_SCN_ALIGN_POWER_BIT_POS 20
-#define IMAGE_SCN_ALIGN_POWER_BIT_MASK 0x00f00000
-#define IMAGE_SCN_ALIGN_POWER_NUM(val) \
- (((val) >> IMAGE_SCN_ALIGN_POWER_BIT_POS) - 1)
-#define IMAGE_SCN_ALIGN_POWER_CONST(val) \
- (((val) + 1) << IMAGE_SCN_ALIGN_POWER_BIT_POS)
-
-#define IMAGE_SCN_ALIGN_1BYTES IMAGE_SCN_ALIGN_POWER_CONST (0)
-#define IMAGE_SCN_ALIGN_2BYTES IMAGE_SCN_ALIGN_POWER_CONST (1)
-#define IMAGE_SCN_ALIGN_4BYTES IMAGE_SCN_ALIGN_POWER_CONST (2)
-#define IMAGE_SCN_ALIGN_8BYTES IMAGE_SCN_ALIGN_POWER_CONST (3)
-/* Default alignment if no others are specified. */
-#define IMAGE_SCN_ALIGN_16BYTES IMAGE_SCN_ALIGN_POWER_CONST (4)
-#define IMAGE_SCN_ALIGN_32BYTES IMAGE_SCN_ALIGN_POWER_CONST (5)
-#define IMAGE_SCN_ALIGN_64BYTES IMAGE_SCN_ALIGN_POWER_CONST (6)
-#define IMAGE_SCN_ALIGN_128BYTES IMAGE_SCN_ALIGN_POWER_CONST (7)
-#define IMAGE_SCN_ALIGN_256BYTES IMAGE_SCN_ALIGN_POWER_CONST (8)
-#define IMAGE_SCN_ALIGN_512BYTES IMAGE_SCN_ALIGN_POWER_CONST (9)
-#define IMAGE_SCN_ALIGN_1024BYTES IMAGE_SCN_ALIGN_POWER_CONST (10)
-#define IMAGE_SCN_ALIGN_2048BYTES IMAGE_SCN_ALIGN_POWER_CONST (11)
-#define IMAGE_SCN_ALIGN_4096BYTES IMAGE_SCN_ALIGN_POWER_CONST (12)
-#define IMAGE_SCN_ALIGN_8192BYTES IMAGE_SCN_ALIGN_POWER_CONST (13)
-
-/* Encode alignment power into IMAGE_SCN_ALIGN bits of s_flags */
-#define COFF_ENCODE_ALIGNMENT(SECTION, ALIGNMENT_POWER) \
- ((SECTION).s_flags |= IMAGE_SCN_ALIGN_POWER_CONST ((ALIGNMENT_POWER)))
-
-#define IMAGE_SCN_LNK_NRELOC_OVFL 0x01000000 /* Section contains extended relocations. */
-#define IMAGE_SCN_MEM_NOT_CACHED 0x04000000 /* Section is not cachable. */
-#define IMAGE_SCN_MEM_NOT_PAGED 0x08000000 /* Section is not pageable. */
-#define IMAGE_SCN_MEM_SHARED 0x10000000 /* Section is shareable. */
-
-/* COMDAT selection codes. */
-
-#define IMAGE_COMDAT_SELECT_NODUPLICATES (1) /* Warn if duplicates. */
-#define IMAGE_COMDAT_SELECT_ANY (2) /* No warning. */
-#define IMAGE_COMDAT_SELECT_SAME_SIZE (3) /* Warn if different size. */
-#define IMAGE_COMDAT_SELECT_EXACT_MATCH (4) /* Warn if different. */
-#define IMAGE_COMDAT_SELECT_ASSOCIATIVE (5) /* Base on other section. */
-
-/* Machine numbers. */
-
-#define IMAGE_FILE_MACHINE_UNKNOWN 0x0000
-#define IMAGE_FILE_MACHINE_ALPHA 0x0184
-#define IMAGE_FILE_MACHINE_ALPHA64 0x0284
-#define IMAGE_FILE_MACHINE_AM33 0x01d3
-#define IMAGE_FILE_MACHINE_AMD64 0x8664
-#define IMAGE_FILE_MACHINE_ARM 0x01c0
-#define IMAGE_FILE_MACHINE_AXP64 IMAGE_FILE_MACHINE_ALPHA64
-#define IMAGE_FILE_MACHINE_CEE 0xc0ee
-#define IMAGE_FILE_MACHINE_CEF 0x0cef
-#define IMAGE_FILE_MACHINE_EBC 0x0ebc
-#define IMAGE_FILE_MACHINE_I386 0x014c
-#define IMAGE_FILE_MACHINE_IA64 0x0200
-#define IMAGE_FILE_MACHINE_M32R 0x9041
-#define IMAGE_FILE_MACHINE_M68K 0x0268
-#define IMAGE_FILE_MACHINE_MIPS16 0x0266
-#define IMAGE_FILE_MACHINE_MIPSFPU 0x0366
-#define IMAGE_FILE_MACHINE_MIPSFPU16 0x0466
-#define IMAGE_FILE_MACHINE_POWERPC 0x01f0
-#define IMAGE_FILE_MACHINE_POWERPCFP 0x01f1
-#define IMAGE_FILE_MACHINE_R10000 0x0168
-#define IMAGE_FILE_MACHINE_R3000 0x0162
-#define IMAGE_FILE_MACHINE_R4000 0x0166
-#define IMAGE_FILE_MACHINE_SH3 0x01a2
-#define IMAGE_FILE_MACHINE_SH3DSP 0x01a3
-#define IMAGE_FILE_MACHINE_SH3E 0x01a4
-#define IMAGE_FILE_MACHINE_SH4 0x01a6
-#define IMAGE_FILE_MACHINE_SH5 0x01a8
-#define IMAGE_FILE_MACHINE_THUMB 0x01c2
-#define IMAGE_FILE_MACHINE_TRICORE 0x0520
-#define IMAGE_FILE_MACHINE_WCEMIPSV2 0x0169
-#define IMAGE_FILE_MACHINE_AMD64 0x8664
-
-#define IMAGE_SUBSYSTEM_UNKNOWN 0
-#define IMAGE_SUBSYSTEM_NATIVE 1
-#define IMAGE_SUBSYSTEM_WINDOWS_GUI 2
-#define IMAGE_SUBSYSTEM_WINDOWS_CUI 3
-#define IMAGE_SUBSYSTEM_POSIX_CUI 7
-#define IMAGE_SUBSYSTEM_WINDOWS_CE_GUI 9
-#define IMAGE_SUBSYSTEM_EFI_APPLICATION 10
-#define IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER 11
-#define IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER 12
-#define IMAGE_SUBSYSTEM_SAL_RUNTIME_DRIVER 13
-#define IMAGE_SUBSYSTEM_XBOX 14
-
-/* Magic values that are true for all dos/nt implementations. */
-#define DOSMAGIC 0x5a4d
-#define NT_SIGNATURE 0x00004550
-
-/* NT allows long filenames, we want to accommodate this.
- This may break some of the bfd functions. */
-#undef FILNMLEN
-#define FILNMLEN 18 /* # characters in a file name. */
-
-struct external_PEI_DOS_hdr
-{
- /* DOS header fields - always at offset zero in the EXE file. */
- char e_magic[2]; /* Magic number, 0x5a4d. */
- char e_cblp[2]; /* Bytes on last page of file, 0x90. */
- char e_cp[2]; /* Pages in file, 0x3. */
- char e_crlc[2]; /* Relocations, 0x0. */
- char e_cparhdr[2]; /* Size of header in paragraphs, 0x4. */
- char e_minalloc[2]; /* Minimum extra paragraphs needed, 0x0. */
- char e_maxalloc[2]; /* Maximum extra paragraphs needed, 0xFFFF. */
- char e_ss[2]; /* Initial (relative) SS value, 0x0. */
- char e_sp[2]; /* Initial SP value, 0xb8. */
- char e_csum[2]; /* Checksum, 0x0. */
- char e_ip[2]; /* Initial IP value, 0x0. */
- char e_cs[2]; /* Initial (relative) CS value, 0x0. */
- char e_lfarlc[2]; /* File address of relocation table, 0x40. */
- char e_ovno[2]; /* Overlay number, 0x0. */
- char e_res[4][2]; /* Reserved words, all 0x0. */
- char e_oemid[2]; /* OEM identifier (for e_oeminfo), 0x0. */
- char e_oeminfo[2]; /* OEM information; e_oemid specific, 0x0. */
- char e_res2[10][2]; /* Reserved words, all 0x0. */
- char e_lfanew[4]; /* File address of new exe header, usually 0x80. */
- char dos_message[16][4]; /* Other stuff, always follow DOS header. */
-};
-
-struct external_PEI_IMAGE_hdr
-{
- char nt_signature[4]; /* required NT signature, 0x4550. */
-
- /* From standard header. */
- char f_magic[2]; /* Magic number. */
- char f_nscns[2]; /* Number of sections. */
- char f_timdat[4]; /* Time & date stamp. */
- char f_symptr[4]; /* File pointer to symtab. */
- char f_nsyms[4]; /* Number of symtab entries. */
- char f_opthdr[2]; /* Sizeof(optional hdr). */
- char f_flags[2]; /* Flags. */
-};
-
-struct external_PEI_filehdr
-{
- /* DOS header fields - always at offset zero in the EXE file. */
- char e_magic[2]; /* Magic number, 0x5a4d. */
- char e_cblp[2]; /* Bytes on last page of file, 0x90. */
- char e_cp[2]; /* Pages in file, 0x3. */
- char e_crlc[2]; /* Relocations, 0x0. */
- char e_cparhdr[2]; /* Size of header in paragraphs, 0x4. */
- char e_minalloc[2]; /* Minimum extra paragraphs needed, 0x0. */
- char e_maxalloc[2]; /* Maximum extra paragraphs needed, 0xFFFF. */
- char e_ss[2]; /* Initial (relative) SS value, 0x0. */
- char e_sp[2]; /* Initial SP value, 0xb8. */
- char e_csum[2]; /* Checksum, 0x0. */
- char e_ip[2]; /* Initial IP value, 0x0. */
- char e_cs[2]; /* Initial (relative) CS value, 0x0. */
- char e_lfarlc[2]; /* File address of relocation table, 0x40. */
- char e_ovno[2]; /* Overlay number, 0x0. */
- char e_res[4][2]; /* Reserved words, all 0x0. */
- char e_oemid[2]; /* OEM identifier (for e_oeminfo), 0x0. */
- char e_oeminfo[2]; /* OEM information; e_oemid specific, 0x0. */
- char e_res2[10][2]; /* Reserved words, all 0x0. */
- char e_lfanew[4]; /* File address of new exe header, usually 0x80. */
- char dos_message[16][4]; /* Other stuff, always follow DOS header. */
-
- /* Note: additional bytes may be inserted before the signature. Use
- the e_lfanew field to find the actual location of the NT signature. */
-
- char nt_signature[4]; /* required NT signature, 0x4550. */
-
- /* From standard header. */
- char f_magic[2]; /* Magic number. */
- char f_nscns[2]; /* Number of sections. */
- char f_timdat[4]; /* Time & date stamp. */
- char f_symptr[4]; /* File pointer to symtab. */
- char f_nsyms[4]; /* Number of symtab entries. */
- char f_opthdr[2]; /* Sizeof(optional hdr). */
- char f_flags[2]; /* Flags. */
-};
-
-#ifdef COFF_IMAGE_WITH_PE
-
-/* The filehdr is only weird in images. */
-
-#undef FILHDR
-#define FILHDR struct external_PEI_filehdr
-#undef FILHSZ
-#define FILHSZ 152
-
-#endif /* COFF_IMAGE_WITH_PE */
-
-/* 32-bit PE a.out header: */
-
-typedef struct
-{
- AOUTHDR standard;
-
- /* NT extra fields; see internal.h for descriptions. */
- char ImageBase[4];
- char SectionAlignment[4];
- char FileAlignment[4];
- char MajorOperatingSystemVersion[2];
- char MinorOperatingSystemVersion[2];
- char MajorImageVersion[2];
- char MinorImageVersion[2];
- char MajorSubsystemVersion[2];
- char MinorSubsystemVersion[2];
- char Reserved1[4];
- char SizeOfImage[4];
- char SizeOfHeaders[4];
- char CheckSum[4];
- char Subsystem[2];
- char DllCharacteristics[2];
- char SizeOfStackReserve[4];
- char SizeOfStackCommit[4];
- char SizeOfHeapReserve[4];
- char SizeOfHeapCommit[4];
- char LoaderFlags[4];
- char NumberOfRvaAndSizes[4];
- /* IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; */
- char DataDirectory[16][2][4]; /* 16 entries, 2 elements/entry, 4 chars. */
-} PEAOUTHDR;
-
-#undef AOUTSZ
-#define AOUTSZ (AOUTHDRSZ + 196)
-
-/* Like PEAOUTHDR, except that the "standard" member has no BaseOfData
- (aka data_start) member and that some of the members are 8 instead
- of just 4 bytes long. */
-typedef struct
-{
-#ifdef AOUTHDRSZ64
- AOUTHDR64 standard;
-#else
- AOUTHDR standard;
-#endif
- /* NT extra fields; see internal.h for descriptions. */
- char ImageBase[8];
- char SectionAlignment[4];
- char FileAlignment[4];
- char MajorOperatingSystemVersion[2];
- char MinorOperatingSystemVersion[2];
- char MajorImageVersion[2];
- char MinorImageVersion[2];
- char MajorSubsystemVersion[2];
- char MinorSubsystemVersion[2];
- char Reserved1[4];
- char SizeOfImage[4];
- char SizeOfHeaders[4];
- char CheckSum[4];
- char Subsystem[2];
- char DllCharacteristics[2];
- char SizeOfStackReserve[8];
- char SizeOfStackCommit[8];
- char SizeOfHeapReserve[8];
- char SizeOfHeapCommit[8];
- char LoaderFlags[4];
- char NumberOfRvaAndSizes[4];
- /* IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; */
- char DataDirectory[16][2][4]; /* 16 entries, 2 elements/entry, 4 chars. */
-} PEPAOUTHDR;
-
-#ifdef AOUTHDRSZ64
-#define PEPAOUTSZ (AOUTHDRSZ64 + 196 + 5 * 4) /* = 240 */
-#else
-#define PEPAOUTSZ 240
-#endif
-
-#undef E_FILNMLEN
-#define E_FILNMLEN 18 /* # characters in a file name. */
-
-/* Import Tyoes fot ILF format object files.. */
-#define IMPORT_CODE 0
-#define IMPORT_DATA 1
-#define IMPORT_CONST 2
-
-/* Import Name Tyoes for ILF format object files. */
-#define IMPORT_ORDINAL 0
-#define IMPORT_NAME 1
-#define IMPORT_NAME_NOPREFIX 2
-#define IMPORT_NAME_UNDECORATE 3
-
-/* Weak external characteristics. */
-#define IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY 1
-#define IMAGE_WEAK_EXTERN_SEARCH_LIBRARY 2
-#define IMAGE_WEAK_EXTERN_SEARCH_ALIAS 3
-
-/* .pdata/.xdata defines and structures for x64 PE+ for exception handling. */
-
-/* .pdata in exception directory. */
-
-struct pex64_runtime_function
-{
- bfd_vma rva_BeginAddress;
- bfd_vma rva_EndAddress;
- bfd_vma rva_UnwindData;
- unsigned int isChained : 1;
-};
-
-struct external_pex64_runtime_function
-{
- bfd_byte rva_BeginAddress[4];
- bfd_byte rva_EndAddress[4];
- bfd_byte rva_UnwindData[4];
-};
-
-/* If the lowest significant bit is set for rva_UnwindData RVA, it
- means that the unified RVA points to another pex64_runtime_function
- that this entry shares the unwind_info block with. */
-#define PEX64_IS_RUNTIME_FUNCTION_CHAINED(PTR_RTF) \
- (((PTR_RTF)->rva_UnwindData & 1) != 0)
-#define PEX64_GET_UNWINDDATA_UNIFIED_RVA(PTR_RTF) \
- ((PTR_RTF)->rva_UnwindData & ~1)
-
-/* The unwind codes. */
-#define UWOP_PUSH_NONVOL 0
-#define UWOP_ALLOC_LARGE 1
-#define UWOP_ALLOC_SMALL 2
-#define UWOP_SET_FPREG 3
-#define UWOP_SAVE_NONVOL 4
-#define UWOP_SAVE_NONVOL_FAR 5
-#define UWOP_SAVE_XMM 6
-#define UWOP_SAVE_XMM_FAR 7
-#define UWOP_SAVE_XMM128 8
-#define UWOP_SAVE_XMM128_FAR 9
-#define UWOP_PUSH_MACHFRAME 10
-
-struct pex64_unwind_code
-{
- bfd_vma prologue_offset;
- /* Contains Frame offset, or frame allocation size. */
- bfd_vma frame_addr;
- unsigned int uwop_code : 4;
- /* xmm, mm, or standard register from 0 - 15. */
- unsigned int reg : 4;
- /* Used for UWOP_PUSH_MACHFRAME to indicate optional errorcode stack
- argument. */
- unsigned int has_errorcode : 1;
-};
-
-struct external_pex64_unwind_code
-{
- bfd_byte dta[2];
-};
-
-#define PEX64_UNWCODE_CODE(VAL) ((VAL) & 0xf)
-#define PEX64_UNWCODE_INFO(VAL) (((VAL) >> 4) & 0xf)
-
-/* The unwind info. */
-#define UNW_FLAG_NHANDLER 0
-#define UNW_FLAG_EHANDLER 1
-#define UNW_FLAG_UHANDLER 2
-#define UNW_FLAG_FHANDLER 3
-#define UNW_FLAG_CHAININFO 4
-
-#define UNW_FLAG_MASK 0x1f
-
-struct pex64_unwind_info
-{
- bfd_vma SizeOfBlock;
- bfd_byte Version; /* Values from 0 up to 7 are possible. */
- bfd_byte Flags; /* Values from 0 up to 31 are possible. */
- bfd_vma SizeOfPrologue;
- bfd_vma CountOfCodes; /* Amount of pex64_unwind_code elements. */
- /* 0 = CFA, 1..15 are index of integer registers. */
- unsigned int FrameRegister : 4;
- bfd_vma FrameOffset;
- bfd_vma sizeofUnwindCodes;
- bfd_byte *rawUnwindCodes;
- /* Valid for UNW_FLAG_EHANDLER and UNW_FLAG_UHANDLER. */
- bfd_vma CountOfScopes;
- bfd_byte *rawScopeEntries;
- bfd_vma rva_ExceptionHandler; /* UNW_EHANDLER. */
- bfd_vma rva_TerminationHandler; /* UNW_FLAG_UHANDLER. */
- bfd_vma rva_FrameHandler; /* UNW_FLAG_FHANDLER. */
- bfd_vma FrameHandlerArgument; /* UNW_FLAG_FHANDLER. */
- bfd_vma rva_FunctionEntry; /* UNW_FLAG_CHAININFO. */
-};
-
-struct external_pex64_unwind_info
-{
- bfd_byte Version_Flags;
- bfd_byte SizeOfPrologue;
- bfd_byte CountOfCodes;
- bfd_byte FrameRegisterOffset;
- /* external_pex64_unwind_code array. */
- /* bfd_byte handler[4]; */
- /* Optional language specific data. */
-};
-
-struct external_pex64_scope
-{
- bfd_vma Count;
-};
-
-struct pex64_scope
-{
- bfd_byte Count[4];
-};
-
-struct pex64_scope_entry
-{
- bfd_vma rva_BeginAddress;
- bfd_vma rva_EndAddress;
- bfd_vma rva_HandlerAddress;
- bfd_vma rva_JumpAddress;
-};
-#define PEX64_SCOPE_ENTRY_SIZE 16
-
-struct external_pex64_scope_entry
-{
- bfd_byte rva_BeginAddress[4];
- bfd_byte rva_EndAddress[4];
- bfd_byte rva_HandlerAddress[4];
- bfd_byte rva_JumpAddress[4];
-};
-
-#define PEX64_UWI_VERSION(VAL) ((VAL) & 7)
-#define PEX64_UWI_FLAGS(VAL) (((VAL) >> 3) & 0x1f)
-#define PEX64_UWI_FRAMEREG(VAL) ((VAL) & 0xf)
-#define PEX64_UWI_FRAMEOFF(VAL) (((VAL) >> 4) & 0xf)
-#define PEX64_UWI_SIZEOF_UWCODE_ARRAY(VAL) \
- ((((VAL) + 1) & ~1) * 2)
-
-#define PEX64_OFFSET_TO_UNWIND_CODE 0x4
-
-#define PEX64_OFFSET_TO_HANDLER_RVA (COUNTOFUNWINDCODES) \
- (PEX64_OFFSET_TO_UNWIND_CODE + \
- PEX64_UWI_SIZEOF_UWCODE_ARRAY(COUNTOFUNWINDCODES))
-
-#define PEX64_OFFSET_TO_SCOPE_COUNT(COUNTOFUNWINDCODES) \
- (PEX64_OFFSET_TO_HANDLER_RVA(COUNTOFUNWINDCODES) + 4)
-
-#define PEX64_SCOPE_ENTRY(COUNTOFUNWINDCODES, IDX) \
- (PEX64_OFFSET_TO_SCOPE_COUNT(COUNTOFUNWINDCODES) + \
- PEX64_SCOPE_ENTRY_SIZE * (IDX))
-
-#endif /* _PE_H */
diff --git a/include/coff/powerpc.h b/include/coff/powerpc.h
deleted file mode 100644
index eba473091..000000000
--- a/include/coff/powerpc.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/* Basic coff information for the PowerPC
- Based on coff/rs6000.h, coff/i386.h and others.
-
- Copyright 2001, 2010 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA.
-
- Initial release: Kim Knuttila (krk@cygnus.com) */
-#define L_LNNO_SIZE 2
-#define INCLUDE_COMDAT_FIELDS_IN_AUXENT
-#include "coff/external.h"
-
-/* Bits for f_flags:
- F_RELFLG relocation info stripped from file
- F_EXEC file is executable (no unresolved external references)
- F_LNNO line numbers stripped from file
- F_LSYMS local symbols stripped from file
- F_AR32WR file has byte ordering of an AR32WR machine (e.g. vax). */
-
-#define F_RELFLG (0x0001)
-#define F_EXEC (0x0002)
-#define F_LNNO (0x0004)
-#define F_LSYMS (0x0008)
-
-/* extra NT defines */
-#define PPCMAGIC 0760 /* peeked on aa PowerPC Windows NT box */
-#define DOSMAGIC 0x5a4d /* from arm.h, i386.h */
-#define NT_SIGNATURE 0x00004550 /* from arm.h, i386.h */
-
-/* from winnt.h */
-#define IMAGE_NT_OPTIONAL_HDR_MAGIC 0x10b
-
-#define PPCBADMAG(x) ((x).f_magic != PPCMAGIC)
-
-/********************** RELOCATION DIRECTIVES **********************/
-
-struct external_reloc
-{
- char r_vaddr[4];
- char r_symndx[4];
- char r_type[2];
-};
-
-#define RELOC struct external_reloc
-#define RELSZ 10
-
diff --git a/include/coff/rs6000.h b/include/coff/rs6000.h
deleted file mode 100644
index 7972d338c..000000000
--- a/include/coff/rs6000.h
+++ /dev/null
@@ -1,353 +0,0 @@
-/* IBM RS/6000 "XCOFF" file definitions for BFD.
- Copyright (C) 1990, 1991, 2001, 2010 Free Software Foundation, Inc.
- Written by Mimi Phuong-Thao Vo of IBM
- and John Gilmore of Cygnus Support.
-
- 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-/********************** FILE HEADER **********************/
-
-struct external_filehdr {
- char f_magic[2]; /* magic number */
- char f_nscns[2]; /* number of sections */
- char f_timdat[4]; /* time & date stamp */
- char f_symptr[4]; /* file pointer to symtab */
- char f_nsyms[4]; /* number of symtab entries */
- char f_opthdr[2]; /* sizeof(optional hdr) */
- char f_flags[2]; /* flags */
-};
-
- /* IBM RS/6000 */
-#define U802WRMAGIC 0730 /* writeable text segments **chh** */
-#define U802ROMAGIC 0735 /* readonly sharable text segments */
-#define U802TOCMAGIC 0737 /* readonly text segments and TOC */
-
-#define BADMAG(x) \
- ((x).f_magic != U802ROMAGIC && (x).f_magic != U802WRMAGIC && \
- (x).f_magic != U802TOCMAGIC)
-
-#define FILHDR struct external_filehdr
-#define FILHSZ 20
-
-
-/********************** AOUT "OPTIONAL HEADER" **********************/
-
-
-typedef struct
-{
- unsigned char magic[2]; /* type of file */
- unsigned char vstamp[2]; /* version stamp */
- unsigned char tsize[4]; /* text size in bytes, padded to FW bdry */
- unsigned char dsize[4]; /* initialized data " " */
- unsigned char bsize[4]; /* uninitialized data " " */
- unsigned char entry[4]; /* entry pt. */
- unsigned char text_start[4]; /* base of text used for this file */
- unsigned char data_start[4]; /* base of data used for this file */
- unsigned char o_toc[4]; /* address of TOC */
- unsigned char o_snentry[2]; /* section number of entry point */
- unsigned char o_sntext[2]; /* section number of .text section */
- unsigned char o_sndata[2]; /* section number of .data section */
- unsigned char o_sntoc[2]; /* section number of TOC */
- unsigned char o_snloader[2]; /* section number of .loader section */
- unsigned char o_snbss[2]; /* section number of .bss section */
- unsigned char o_algntext[2]; /* .text alignment */
- unsigned char o_algndata[2]; /* .data alignment */
- unsigned char o_modtype[2]; /* module type (??) */
- unsigned char o_cputype[2]; /* cpu type */
- unsigned char o_maxstack[4]; /* max stack size (??) */
- unsigned char o_maxdata[4]; /* max data size (??) */
- unsigned char o_resv2[12]; /* reserved */
-}
-AOUTHDR;
-
-#define AOUTSZ 72
-#define SMALL_AOUTSZ (28)
-#define AOUTHDRSZ 72
-
-/********************** SECTION HEADER **********************/
-
-
-struct external_scnhdr {
- char s_name[8]; /* section name */
- char s_paddr[4]; /* physical address, aliased s_nlib */
- char s_vaddr[4]; /* virtual address */
- char s_size[4]; /* section size */
- char s_scnptr[4]; /* file ptr to raw data for section */
- char s_relptr[4]; /* file ptr to relocation */
- char s_lnnoptr[4]; /* file ptr to line numbers */
- char s_nreloc[2]; /* number of relocation entries */
- char s_nlnno[2]; /* number of line number entries*/
- char s_flags[4]; /* flags */
-};
-
-#define SCNHDR struct external_scnhdr
-#define SCNHSZ 40
-
-/********************** LINE NUMBERS **********************/
-
-/* 1 line number entry for every "breakpointable" source line in a section.
- * Line numbers are grouped on a per function basis; first entry in a function
- * grouping will have l_lnno = 0 and in place of physical address will be the
- * symbol table index of the function name.
- */
-struct external_lineno {
- union {
- char l_symndx[4]; /* function name symbol index, iff l_lnno == 0*/
- char l_paddr[4]; /* (physical) address of line number */
- } l_addr;
- char l_lnno[2]; /* line number */
-};
-
-
-#define LINENO struct external_lineno
-#define LINESZ 6
-
-
-/********************** SYMBOLS **********************/
-
-#define E_SYMNMLEN 8 /* # characters in a symbol name */
-#define E_FILNMLEN 14 /* # characters in a file name */
-#define E_DIMNUM 4 /* # array dimensions in auxiliary entry */
-
-struct external_syment
-{
- union {
- char e_name[E_SYMNMLEN];
- struct {
- char e_zeroes[4];
- char e_offset[4];
- } e;
- } e;
- char e_value[4];
- char e_scnum[2];
- char e_type[2];
- char e_sclass[1];
- char e_numaux[1];
-};
-
-
-
-#define N_BTMASK (017)
-#define N_TMASK (060)
-#define N_BTSHFT (4)
-#define N_TSHIFT (2)
-
-
-union external_auxent {
- struct {
- char x_tagndx[4]; /* str, un, or enum tag indx */
- union {
- struct {
- char x_lnno[2]; /* declaration line number */
- char x_size[2]; /* str/union/array size */
- } x_lnsz;
- char x_fsize[4]; /* size of function */
- } x_misc;
- union {
- struct { /* if ISFCN, tag, or .bb */
- char x_lnnoptr[4]; /* ptr to fcn line # */
- char x_endndx[4]; /* entry ndx past block end */
- } x_fcn;
- struct { /* if ISARY, up to 4 dimen. */
- char x_dimen[E_DIMNUM][2];
- } x_ary;
- } x_fcnary;
- char x_tvndx[2]; /* tv index */
- } x_sym;
-
- struct {
- union {
- char x_fname[E_FILNMLEN];
- struct {
- char x_zeroes[4];
- char x_offset[4];
- } x_n;
- } x_n;
- char x_ftype[1];
- } x_file;
-
- struct {
- char x_scnlen[4]; /* section length */
- char x_nreloc[2]; /* # relocation entries */
- char x_nlinno[2]; /* # line numbers */
- } x_scn;
-
- struct {
- char x_tvfill[4]; /* tv fill value */
- char x_tvlen[2]; /* length of .tv */
- char x_tvran[2][2]; /* tv range */
- } x_tv; /* info about .tv section (in auxent of symbol .tv)) */
-
- struct {
- unsigned char x_scnlen[4];
- unsigned char x_parmhash[4];
- unsigned char x_snhash[2];
- unsigned char x_smtyp[1];
- unsigned char x_smclas[1];
- unsigned char x_stab[4];
- unsigned char x_snstab[2];
- } x_csect;
-
-};
-
-#define SYMENT struct external_syment
-#define SYMESZ 18
-#define AUXENT union external_auxent
-#define AUXESZ 18
-#define DBXMASK 0x80 /* for dbx storage mask */
-#define SYMNAME_IN_DEBUG(symptr) ((symptr)->n_sclass & DBXMASK)
-
-
-
-/********************** RELOCATION DIRECTIVES **********************/
-
-
-struct external_reloc {
- char r_vaddr[4];
- char r_symndx[4];
- char r_size[1];
- char r_type[1];
-};
-
-
-#define RELOC struct external_reloc
-#define RELSZ 10
-
-#define DEFAULT_DATA_SECTION_ALIGNMENT 4
-#define DEFAULT_BSS_SECTION_ALIGNMENT 4
-#define DEFAULT_TEXT_SECTION_ALIGNMENT 4
-/* For new sections we havn't heard of before */
-#define DEFAULT_SECTION_ALIGNMENT 4
-
-/* The ldhdr structure. This appears at the start of the .loader
- section. */
-
-struct external_ldhdr
-{
- bfd_byte l_version[4];
- bfd_byte l_nsyms[4];
- bfd_byte l_nreloc[4];
- bfd_byte l_istlen[4];
- bfd_byte l_nimpid[4];
- bfd_byte l_impoff[4];
- bfd_byte l_stlen[4];
- bfd_byte l_stoff[4];
-};
-
-#define LDHDRSZ (8 * 4)
-
-struct external_ldsym
-{
- union
- {
- bfd_byte _l_name[E_SYMNMLEN];
- struct
- {
- bfd_byte _l_zeroes[4];
- bfd_byte _l_offset[4];
- } _l_l;
- } _l;
- bfd_byte l_value[4];
- bfd_byte l_scnum[2];
- bfd_byte l_smtype[1];
- bfd_byte l_smclas[1];
- bfd_byte l_ifile[4];
- bfd_byte l_parm[4];
-};
-
-#define LDSYMSZ (8 + 3 * 4 + 2 + 2)
-
-struct external_ldrel
-{
- bfd_byte l_vaddr[4];
- bfd_byte l_symndx[4];
- bfd_byte l_rtype[2];
- bfd_byte l_rsecnm[2];
-};
-
-#define LDRELSZ (2 * 4 + 2 * 2)
-
-struct external_exceptab
-{
- union {
- bfd_byte e_symndx[4];
- bfd_byte e_paddr[4];
- } e_addr;
- bfd_byte e_lang[1];
- bfd_byte e_reason[1];
-};
-
-#define EXCEPTSZ (4 + 2)
-
-/******************** Core files *************************/
-
-struct external_core_dumpx
-{
- unsigned char c_signo[1];
- unsigned char c_flag[1];
- unsigned char c_entries[2];
-
- unsigned char c_version[4];
-
- unsigned char c_fdsinfox[8];
- unsigned char c_loader[8];
- unsigned char c_lsize[8];
-
- unsigned char c_n_thr[4];
- unsigned char c_reserved0[4];
- unsigned char c_thr[8];
-
- unsigned char c_segs[8];
- unsigned char c_segregion[8];
-
- unsigned char c_stack[8];
- unsigned char c_stackorg[8];
- unsigned char c_size[8];
-
- unsigned char c_data[8];
- unsigned char c_dataorg[8];
- unsigned char c_datasize[8];
- unsigned char c_sdorg[8];
- unsigned char c_sdsize[8];
-
- unsigned char c_vmmregions[8];
- unsigned char c_vmm[8];
-
- unsigned char c_impl[4];
- unsigned char c_pad[4];
- unsigned char c_cprs[8];
- unsigned char c_reserved[7 * 8];
-
- /* Followed by:
- - context of the faulting thread.
- - user structure. */
-};
-
-
-/* Core file verion. */
-#define CORE_DUMPX_VERSION 0x0feeddb1
-#define CORE_DUMPXX_VERSION 0x0feeddb2
-
-struct external_ld_info32
-{
- unsigned char ldinfo_next[4];
- unsigned char core_offset[4];
- unsigned char ldinfo_textorg[4];
- unsigned char ldinfo_textsize[4];
- unsigned char ldinfo_dataorg[4];
- unsigned char ldinfo_datasize[4];
- unsigned char ldinfo_filename[2];
-};
diff --git a/include/coff/rs6k64.h b/include/coff/rs6k64.h
deleted file mode 100644
index 453198a56..000000000
--- a/include/coff/rs6k64.h
+++ /dev/null
@@ -1,275 +0,0 @@
-/* IBM RS/6000 "XCOFF64" file definitions for BFD.
- Copyright (C) 2000, 2001, 2002, 2010 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-/********************** FILE HEADER **********************/
-
-struct external_filehdr
-{
- char f_magic[2]; /* magic number */
- char f_nscns[2]; /* number of sections */
- char f_timdat[4]; /* time & date stamp */
- char f_symptr[8]; /* file pointer to symtab */
- char f_opthdr[2]; /* sizeof(optional hdr) */
- char f_flags[2]; /* flags */
- char f_nsyms[4]; /* number of symtab entries */
-};
-
-/* IBM RS/6000. */
-#define U803XTOCMAGIC 0757 /* Aix 4.3 64-bit XCOFF */
-#define U64_TOCMAGIC 0767 /* AIX 5+ 64-bit XCOFF */
-#define BADMAG(x) ((x).f_magic != U803XTOCMAGIC && (x).f_magic != U64_TOCMAGIC)
-
-#define FILHDR struct external_filehdr
-#define FILHSZ 24
-
-/********************** AOUT "OPTIONAL HEADER" **********************/
-
-typedef struct
-{
- unsigned char magic[2]; /* type of file */
- unsigned char vstamp[2]; /* version stamp */
- unsigned char o_debugger[4]; /* reserved */
- unsigned char text_start[8]; /* base of text used for this file */
- unsigned char data_start[8]; /* base of data used for this file */
- unsigned char o_toc[8]; /* address of TOC */
- unsigned char o_snentry[2]; /* section number of entry point */
- unsigned char o_sntext[2]; /* section number of .text section */
- unsigned char o_sndata[2]; /* section number of .data section */
- unsigned char o_sntoc[2]; /* section number of TOC */
- unsigned char o_snloader[2]; /* section number of .loader section */
- unsigned char o_snbss[2]; /* section number of .bss section */
- unsigned char o_algntext[2]; /* .text alignment */
- unsigned char o_algndata[2]; /* .data alignment */
- unsigned char o_modtype[2]; /* module type (??) */
- unsigned char o_cputype[2]; /* cpu type */
- unsigned char o_resv2[4]; /* reserved */
- unsigned char tsize[8]; /* text size bytes, padded to FW bdry */
- unsigned char dsize[8]; /* initialized data " " */
- unsigned char bsize[8]; /* uninitialized data " " */
- unsigned char entry[8]; /* entry pt. */
- unsigned char o_maxstack[8]; /* max stack size (??) */
- unsigned char o_maxdata[8]; /* max data size (??) */
- unsigned char o_resv3[16]; /* reserved */
-}
-AOUTHDR;
-
-#define AOUTSZ 120
-#define SMALL_AOUTSZ (0)
-#define AOUTHDRSZ 72
-
-/********************** SECTION HEADER **********************/
-
-struct external_scnhdr
-{
- char s_name[8]; /* section name */
- char s_paddr[8]; /* physical address, aliased s_nlib */
- char s_vaddr[8]; /* virtual address */
- char s_size[8]; /* section size */
- char s_scnptr[8]; /* file ptr to raw data for section */
- char s_relptr[8]; /* file ptr to relocation */
- char s_lnnoptr[8]; /* file ptr to line numbers */
- char s_nreloc[4]; /* number of relocation entries */
- char s_nlnno[4]; /* number of line number entries*/
- char s_flags[4]; /* flags */
- char s_pad[4]; /* padding */
-};
-
-#define SCNHDR struct external_scnhdr
-
-#define SCNHSZ 72
-
-/********************** LINE NUMBERS **********************/
-
-/* 1 line number entry for every "breakpointable" source line in a section.
- Line numbers are grouped on a per function basis; first entry in a function
- grouping will have l_lnno = 0 and in place of physical address will be the
- symbol table index of the function name. */
-
-struct external_lineno
-{
- union
- {
- char l_symndx[4]; /* function name symbol index, iff l_lnno == 0*/
- char l_paddr[8]; /* (physical) address of line number */
- } l_addr;
-
- char l_lnno[4]; /* line number */
-};
-
-#define LINENO struct external_lineno
-
-#define LINESZ 12
-
-/********************** SYMBOLS **********************/
-
-#define E_SYMNMLEN 8 /* # characters in a symbol name */
-#define E_FILNMLEN 14 /* # characters in a file name */
-#define E_DIMNUM 4 /* # array dimensions in auxiliary entry */
-
-struct external_syment
-{
- char e_value[8];
- char e_offset[4];
- char e_scnum[2];
- char e_type[2];
- char e_sclass[1];
- char e_numaux[1];
-};
-
-#define N_BTMASK (017)
-#define N_TMASK (060)
-#define N_BTSHFT (4)
-#define N_TSHIFT (2)
-
-union external_auxent
-{
- struct {
- union {
- struct {
- char x_lnno[4]; /* declaration line number */
- char x_size[2]; /* str/union/array size */
- } x_lnsz;
- struct {
- char x_lnnoptr[8];/* ptr to fcn line */
- char x_fsize[4]; /* size of function */
- char x_endndx[4]; /* entry ndx past block end */
- } x_fcn;
- } x_fcnary;
- } x_sym;
-
- struct {
- union {
- char x_fname[E_FILNMLEN];
- struct {
- char x_zeroes[4];
- char x_offset[4];
- char x_pad[6];
- } x_n;
- } x_n;
- unsigned char x_ftype[1];
- unsigned char x_resv[2];
- } x_file;
-
- struct {
- char x_exptr[8];
- char x_fsize[4];
- char x_endndx[4];
- char x_pad[1];
- } x_except;
-
- struct {
- unsigned char x_scnlen_lo[4];
- unsigned char x_parmhash[4];
- unsigned char x_snhash[2];
- unsigned char x_smtyp[1];
- unsigned char x_smclas[1];
- unsigned char x_scnlen_hi[4];
- unsigned char x_pad[1];
- } x_csect;
-
- struct {
- char x_pad[17];
- char x_auxtype[1];
- } x_auxtype;
-};
-
-#define SYMENT struct external_syment
-#define SYMESZ 18
-#define AUXENT union external_auxent
-#define AUXESZ 18
-#define DBXMASK 0x80 /* for dbx storage mask */
-#define SYMNAME_IN_DEBUG(symptr) ((symptr)->n_sclass & DBXMASK)
-
-/* Values for auxtype field in XCOFF64, taken from AIX 4.3 sym.h. */
-#define _AUX_EXCEPT 255
-#define _AUX_FCN 254
-#define _AUX_SYM 253
-#define _AUX_FILE 252
-#define _AUX_CSECT 251
-
-/********************** RELOCATION DIRECTIVES **********************/
-
-struct external_reloc
-{
- char r_vaddr[8];
- char r_symndx[4];
- char r_size[1];
- char r_type[1];
-};
-
-#define RELOC struct external_reloc
-#define RELSZ 14
-
-#define DEFAULT_DATA_SECTION_ALIGNMENT 4
-#define DEFAULT_BSS_SECTION_ALIGNMENT 4
-#define DEFAULT_TEXT_SECTION_ALIGNMENT 4
-/* For new sections we havn't heard of before */
-#define DEFAULT_SECTION_ALIGNMENT 4
-
-/* The ldhdr structure. This appears at the start of the .loader
- section. */
-
-struct external_ldhdr
-{
- bfd_byte l_version[4];
- bfd_byte l_nsyms[4];
- bfd_byte l_nreloc[4];
- bfd_byte l_istlen[4];
- bfd_byte l_nimpid[4];
- bfd_byte l_stlen[4];
- bfd_byte l_impoff[8];
- bfd_byte l_stoff[8];
- bfd_byte l_symoff[8];
- bfd_byte l_rldoff[8];
-};
-#define LDHDRSZ (56)
-
-struct external_ldsym
-{
- bfd_byte l_value[8];
- bfd_byte l_offset[4];
- bfd_byte l_scnum[2];
- bfd_byte l_smtype[1];
- bfd_byte l_smclas[1];
- bfd_byte l_ifile[4];
- bfd_byte l_parm[4];
-};
-
-#define LDSYMSZ (24)
-
-struct external_ldrel
-{
- bfd_byte l_vaddr[8];
- bfd_byte l_rtype[2];
- bfd_byte l_rsecnm[2];
- bfd_byte l_symndx[4];
-};
-
-#define LDRELSZ (16)
-
-struct external_exceptab
-{
- union {
- bfd_byte e_symndx[4];
- bfd_byte e_paddr[8];
- } e_addr;
- bfd_byte e_lang[1];
- bfd_byte e_reason[1];
-};
-
-#define EXCEPTSZ (10)
diff --git a/include/coff/sh.h b/include/coff/sh.h
deleted file mode 100644
index bf1310469..000000000
--- a/include/coff/sh.h
+++ /dev/null
@@ -1,148 +0,0 @@
-/* coff information for Renesas SH
-
- Copyright 2000, 2003, 2010 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifdef COFF_WITH_PE
-#define L_LNNO_SIZE 2
-#else
-#define L_LNNO_SIZE 4
-#endif
-#define INCLUDE_COMDAT_FIELDS_IN_AUXENT
-#include "coff/external.h"
-
-#define SH_ARCH_MAGIC_BIG 0x0500
-#define SH_ARCH_MAGIC_LITTLE 0x0550 /* Little endian SH */
-#define SH_ARCH_MAGIC_WINCE 0x01a2 /* Windows CE - little endian */
-#define SH_PE_MAGIC 0x010b
-
-#define SHBADMAG(x) \
- (((x).f_magic != SH_ARCH_MAGIC_BIG) && \
- ((x).f_magic != SH_ARCH_MAGIC_WINCE) && \
- ((x).f_magic != SH_ARCH_MAGIC_LITTLE))
-
-/* Define some NT default values. */
-/* #define NT_IMAGE_BASE 0x400000 moved to internal.h */
-#define NT_SECTION_ALIGNMENT 0x1000
-#define NT_FILE_ALIGNMENT 0x200
-#define NT_DEF_RESERVE 0x100000
-#define NT_DEF_COMMIT 0x1000
-
-/********************** RELOCATION DIRECTIVES **********************/
-
-/* The external reloc has an offset field, because some of the reloc
- types on the h8 don't have room in the instruction for the entire
- offset - eg the strange jump and high page addressing modes. */
-
-#ifndef COFF_WITH_PE
-struct external_reloc
-{
- char r_vaddr[4];
- char r_symndx[4];
- char r_offset[4];
- char r_type[2];
- char r_stuff[2];
-};
-#else
-struct external_reloc
-{
- char r_vaddr[4];
- char r_symndx[4];
- char r_type[2];
-};
-#endif
-
-#define RELOC struct external_reloc
-#ifdef COFF_WITH_PE
-#define RELSZ 10
-#else
-#define RELSZ 16
-#endif
-
-/* SH relocation types. Not all of these are actually used. */
-
-#define R_SH_UNUSED 0 /* only used internally */
-#define R_SH_IMM32CE 2 /* 32 bit immediate for WinCE */
-#define R_SH_PCREL8 3 /* 8 bit pcrel */
-#define R_SH_PCREL16 4 /* 16 bit pcrel */
-#define R_SH_HIGH8 5 /* high 8 bits of 24 bit address */
-#define R_SH_LOW16 7 /* low 16 bits of 24 bit immediate */
-#define R_SH_IMM24 6 /* 24 bit immediate */
-#define R_SH_PCDISP8BY4 9 /* PC rel 8 bits *4 +ve */
-#define R_SH_PCDISP8BY2 10 /* PC rel 8 bits *2 +ve */
-#define R_SH_PCDISP8 11 /* 8 bit branch */
-#define R_SH_PCDISP 12 /* 12 bit branch */
-#define R_SH_IMM32 14 /* 32 bit immediate */
-#define R_SH_IMM8 16 /* 8 bit immediate */
-#define R_SH_IMAGEBASE 16 /* Windows CE */
-#define R_SH_IMM8BY2 17 /* 8 bit immediate *2 */
-#define R_SH_IMM8BY4 18 /* 8 bit immediate *4 */
-#define R_SH_IMM4 19 /* 4 bit immediate */
-#define R_SH_IMM4BY2 20 /* 4 bit immediate *2 */
-#define R_SH_IMM4BY4 21 /* 4 bit immediate *4 */
-#define R_SH_PCRELIMM8BY2 22 /* PC rel 8 bits *2 unsigned */
-#define R_SH_PCRELIMM8BY4 23 /* PC rel 8 bits *4 unsigned */
-#define R_SH_IMM16 24 /* 16 bit immediate */
-
-/* The switch table reloc types are used for relaxing. They are
- generated for expressions such as
- .word L1 - L2
- The r_offset field holds the difference between the reloc address
- and L2. */
-#define R_SH_SWITCH8 33 /* 8 bit switch table entry */
-#define R_SH_SWITCH16 25 /* 16 bit switch table entry */
-#define R_SH_SWITCH32 26 /* 32 bit switch table entry */
-
-/* The USES reloc type is used for relaxing. The compiler will
- generate .uses pseudo-ops when it finds a function call which it
- can relax. The r_offset field of the USES reloc holds the PC
- relative offset to the instruction which loads the register used in
- the function call. */
-#define R_SH_USES 27 /* .uses pseudo-op */
-
-/* The COUNT reloc type is used for relaxing. The assembler will
- generate COUNT relocs for addresses referred to by the register
- loads associated with USES relocs. The r_offset field of the COUNT
- reloc holds the number of times the address is referenced in the
- object file. */
-#define R_SH_COUNT 28 /* Count of constant pool uses */
-
-/* The ALIGN reloc type is used for relaxing. The r_offset field is
- the power of two to which subsequent portions of the object file
- must be aligned. */
-#define R_SH_ALIGN 29 /* .align pseudo-op */
-
-/* The CODE and DATA reloc types are used for aligning load and store
- instructions. The assembler will generate a CODE reloc before a
- block of instructions. It will generate a DATA reloc before data.
- A section should be processed assuming it contains data, unless a
- CODE reloc is seen. The only relevant pieces of information in the
- CODE and DATA relocs are the section and the address. The symbol
- and offset are meaningless. */
-#define R_SH_CODE 30 /* start of code */
-#define R_SH_DATA 31 /* start of data */
-
-/* The LABEL reloc type is used for aligning load and store
- instructions. The assembler will generate a LABEL reloc for each
- label within a block of instructions. This permits the linker to
- avoid swapping instructions which are the targets of branches. */
-#define R_SH_LABEL 32 /* label */
-
-/* NB: R_SH_SWITCH8 is 33 */
-
-#define R_SH_LOOP_START 34
-#define R_SH_LOOP_END 35
diff --git a/include/coff/sparc.h b/include/coff/sparc.h
deleted file mode 100644
index fa94c5f79..000000000
--- a/include/coff/sparc.h
+++ /dev/null
@@ -1,156 +0,0 @@
-/* coff information for Sparc.
-
- Copyright 2001, 2010 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-/* This file is an amalgamation of several standard include files that
- define coff format, such as filehdr.h, aouthdr.h, and so forth. In
- addition, all datatypes have been translated into character arrays of
- (presumed) equivalent size. This is necessary so that this file can
- be used with different systems while still yielding the same results. */
-
-#define L_LNNO_SIZE 2
-#define DO_NOT_DEFINE_SYMENT
-#define DO_NOT_DEFINE_AUXENT
-#include "coff/external.h"
-
-#define F_RELFLG (0x0001) /* relocation info stripped */
-#define F_EXEC (0x0002) /* file is executable */
-#define F_LNNO (0x0004) /* line numbers stripped */
-#define F_LSYMS (0x0008) /* local symbols stripped */
-
-#define SPARCMAGIC (0540)
-
-/* This is Lynx's all-platform magic number for executables. */
-
-#define LYNXCOFFMAGIC (0415)
-
-#define OMAGIC 0404 /* object files, eg as output */
-#define ZMAGIC 0413 /* demand load format, eg normal ld output */
-#define STMAGIC 0401 /* target shlib */
-#define SHMAGIC 0443 /* host shlib */
-
-/* More names of "special" sections. */
-
-#define _TV ".tv"
-#define _INIT ".init"
-#define _FINI ".fini"
-
-/********************** SYMBOLS **********************/
-
-#define E_SYMNMLEN (8) /* # characters in a symbol name */
-#define E_FILNMLEN (14) /* # characters in a file name */
-#define E_DIMNUM (4) /* # array dimensions in auxiliary entry */
-
-struct external_syment
-{
- union {
- char e_name[E_SYMNMLEN];
- struct {
- char e_zeroes[4];
- char e_offset[4];
- } e;
-#if 0 /* of doubtful value */
- char e_nptr[2][4];
- struct {
- char e_leading_zero[1];
- char e_dbx_type[1];
- char e_dbx_desc[2];
- } e_dbx;
-#endif
- } e;
-
- char e_value[4];
- char e_scnum[2];
- char e_type[2];
- char e_sclass[1];
- char e_numaux[1];
- char padding[2];
-};
-
-#define N_BTMASK (0xf)
-#define N_TMASK (0x30)
-#define N_BTSHFT (4)
-#define N_TSHIFT (2)
-
-union external_auxent
-{
- struct {
- char x_tagndx[4]; /* str, un, or enum tag indx */
- union {
- struct {
- char x_lnno[2]; /* declaration line number */
- char x_size[2]; /* str/union/array size */
- } x_lnsz;
- char x_fsize[4]; /* size of function */
- } x_misc;
- union {
- struct { /* if ISFCN, tag, or .bb */
- char x_lnnoptr[4]; /* ptr to fcn line # */
- char x_endndx[4]; /* entry ndx past block end */
- } x_fcn;
- struct { /* if ISARY, up to 4 dimen. */
- char x_dimen[E_DIMNUM][2];
- } x_ary;
- } x_fcnary;
- char x_tvndx[2]; /* tv index */
- } x_sym;
-
- union {
- char x_fname[E_FILNMLEN];
- struct {
- char x_zeroes[4];
- char x_offset[4];
- } x_n;
- } x_file;
-
- struct {
- char x_scnlen[4]; /* section length */
- char x_nreloc[2]; /* # relocation entries */
- char x_nlinno[2]; /* # line numbers */
- } x_scn;
-
- struct {
- char x_tvfill[4]; /* tv fill value */
- char x_tvlen[2]; /* length of .tv */
- char x_tvran[2][2]; /* tv range */
- } x_tv; /* .tv section info (in auxent of sym .tv)) */
-
- char x_fill[20]; /* forces to 20-byte size */
-};
-
-#define SYMENT struct external_syment
-#define SYMESZ 20
-#define AUXENT union external_auxent
-#define AUXESZ 20
-
-#define _ETEXT "etext"
-
-/********************** RELOCATION DIRECTIVES **********************/
-
-struct external_reloc
-{
- char r_vaddr[4];
- char r_symndx[4];
- char r_type[2];
- char r_spare[2];
- char r_offset[4];
-};
-
-#define RELOC struct external_reloc
-#define RELSZ 16
-
diff --git a/include/coff/sym.h b/include/coff/sym.h
deleted file mode 100644
index 76204af59..000000000
--- a/include/coff/sym.h
+++ /dev/null
@@ -1,484 +0,0 @@
-/* Declarations of internal format of MIPS ECOFF symbols.
- Originally contributed by MIPS Computer Systems and Third Eye Software.
- Changes contributed by Cygnus Support are in the public domain.
-
- This file is just aggregated with the files that make up the GNU
- release; it is not considered part of GAS, GDB, or other GNU
- programs. */
-
-/*
- * |-----------------------------------------------------------|
- * | Copyright (c) 1992, 1991, 1990 MIPS Computer Systems, Inc.|
- * | MIPS Computer Systems, Inc. grants reproduction and use |
- * | rights to all parties, PROVIDED that this comment is |
- * | maintained in the copy. |
- * |-----------------------------------------------------------|
- */
-#ifndef _SYM_H
-#define _SYM_H
-
-/* (C) Copyright 1984 by Third Eye Software, Inc.
- *
- * Third Eye Software, Inc. grants reproduction and use rights to
- * all parties, PROVIDED that this comment is maintained in the copy.
- *
- * Third Eye makes no claims about the applicability of this
- * symbol table to a particular use.
- */
-
-/*
- * This file contains the definition of the Third Eye Symbol Table.
- *
- * Symbols are assumed to be in 'encounter order' - i.e. the order that
- * the things they represent were encountered by the compiler/assembler/loader.
- * EXCEPT for globals! These are assumed to be bunched together,
- * probably right after the last 'normal' symbol. Globals ARE sorted
- * in ascending order.
- *
- * -----------------------------------------------------------------------
- * A brief word about Third Eye naming/use conventions:
- *
- * All arrays and index's are 0 based.
- * All "ifooMax" values are the highest legal value PLUS ONE. This makes
- * them good for allocating arrays, etc. All checks are "ifoo < ifooMax".
- *
- * "isym" Index into the SYMbol table.
- * "ipd" Index into the Procedure Descriptor array.
- * "ifd" Index into the File Descriptor array.
- * "iss" Index into String Space.
- * "cb" Count of Bytes.
- * "rgPd" array whose domain is "0..ipdMax-1" and RanGe is PDR.
- * "rgFd" array whose domain is "0..ifdMax-1" and RanGe is FDR.
- */
-
-
-/*
- * Symbolic Header (HDR) structure.
- * As long as all the pointers are set correctly,
- * we don't care WHAT order the various sections come out in!
- *
- * A file produced solely for the use of CDB will probably NOT have
- * any instructions or data areas in it, as these are available
- * in the original.
- */
-
-typedef struct {
- short magic; /* to verify validity of the table */
- short vstamp; /* version stamp */
- long ilineMax; /* number of line number entries */
- bfd_vma cbLine; /* number of bytes for line number entries */
- bfd_vma cbLineOffset; /* offset to start of line number entries*/
- long idnMax; /* max index into dense number table */
- bfd_vma cbDnOffset; /* offset to start dense number table */
- long ipdMax; /* number of procedures */
- bfd_vma cbPdOffset; /* offset to procedure descriptor table */
- long isymMax; /* number of local symbols */
- bfd_vma cbSymOffset; /* offset to start of local symbols*/
- long ioptMax; /* max index into optimization symbol entries */
- bfd_vma cbOptOffset; /* offset to optimization symbol entries */
- long iauxMax; /* number of auxillary symbol entries */
- bfd_vma cbAuxOffset; /* offset to start of auxillary symbol entries*/
- long issMax; /* max index into local strings */
- bfd_vma cbSsOffset; /* offset to start of local strings */
- long issExtMax; /* max index into external strings */
- bfd_vma cbSsExtOffset; /* offset to start of external strings */
- long ifdMax; /* number of file descriptor entries */
- bfd_vma cbFdOffset; /* offset to file descriptor table */
- long crfd; /* number of relative file descriptor entries */
- bfd_vma cbRfdOffset; /* offset to relative file descriptor table */
- long iextMax; /* max index into external symbols */
- bfd_vma cbExtOffset; /* offset to start of external symbol entries*/
- /* If you add machine dependent fields, add them here */
- } HDRR, *pHDRR;
-#define cbHDRR sizeof(HDRR)
-#define hdrNil ((pHDRR)0)
-
-/*
- * The FDR and PDR structures speed mapping of address <-> name.
- * They are sorted in ascending memory order and are kept in
- * memory by CDB at runtime.
- */
-
-/*
- * File Descriptor
- *
- * There is one of these for EVERY FILE, whether compiled with
- * full debugging symbols or not. The name of a file should be
- * the path name given to the compiler. This allows the user
- * to simply specify the names of the directories where the COMPILES
- * were done, and we will be able to find their files.
- * A field whose comment starts with "R - " indicates that it will be
- * setup at runtime.
- */
-typedef struct fdr {
- bfd_vma adr; /* memory address of beginning of file */
- long rss; /* file name (of source, if known) */
- long issBase; /* file's string space */
- bfd_vma cbSs; /* number of bytes in the ss */
- long isymBase; /* beginning of symbols */
- long csym; /* count file's of symbols */
- long ilineBase; /* file's line symbols */
- long cline; /* count of file's line symbols */
- long ioptBase; /* file's optimization entries */
- long copt; /* count of file's optimization entries */
- unsigned short ipdFirst;/* start of procedures for this file */
- short cpd; /* count of procedures for this file */
- long iauxBase; /* file's auxiliary entries */
- long caux; /* count of file's auxiliary entries */
- long rfdBase; /* index into the file indirect table */
- long crfd; /* count file indirect entries */
- unsigned lang: 5; /* language for this file */
- unsigned fMerge : 1; /* whether this file can be merged */
- unsigned fReadin : 1; /* true if it was read in (not just created) */
- unsigned fBigendian : 1;/* if set, was compiled on big endian machine */
- /* aux's will be in compile host's sex */
- unsigned glevel : 2; /* level this file was compiled with */
- unsigned reserved : 22; /* reserved for future use */
- bfd_vma cbLineOffset; /* byte offset from header for this file ln's */
- bfd_vma cbLine; /* size of lines for this file */
- } FDR, *pFDR;
-#define cbFDR sizeof(FDR)
-#define fdNil ((pFDR)0)
-#define ifdNil -1
-#define ifdTemp 0
-#define ilnNil -1
-
-
-/*
- * Procedure Descriptor
- *
- * There is one of these for EVERY TEXT LABEL.
- * If a procedure is in a file with full symbols, then isym
- * will point to the PROC symbols, else it will point to the
- * global symbol for the label.
- */
-
-typedef struct pdr {
- bfd_vma adr; /* memory address of start of procedure */
- long isym; /* start of local symbol entries */
- long iline; /* start of line number entries*/
- long regmask; /* save register mask */
- long regoffset; /* save register offset */
- long iopt; /* start of optimization symbol entries*/
- long fregmask; /* save floating point register mask */
- long fregoffset; /* save floating point register offset */
- long frameoffset; /* frame size */
- short framereg; /* frame pointer register */
- short pcreg; /* offset or reg of return pc */
- long lnLow; /* lowest line in the procedure */
- long lnHigh; /* highest line in the procedure */
- bfd_vma cbLineOffset; /* byte offset for this procedure from the fd base */
- /* These fields are new for 64 bit ECOFF. */
- unsigned gp_prologue : 8; /* byte size of GP prologue */
- unsigned gp_used : 1; /* true if the procedure uses GP */
- unsigned reg_frame : 1; /* true if register frame procedure */
- unsigned prof : 1; /* true if compiled with -pg */
- unsigned reserved : 13; /* reserved: must be zero */
- unsigned localoff : 8; /* offset of local variables from vfp */
- } PDR, *pPDR;
-#define cbPDR sizeof(PDR)
-#define pdNil ((pPDR) 0)
-#define ipdNil -1
-
-/*
- * The structure of the runtime procedure descriptor created by the loader
- * for use by the static exception system.
- */
-/*
- * If 0'd out because exception_info chokes Visual C++ and because there
- * don't seem to be any references to this structure elsewhere in gdb.
- */
-#if 0
-typedef struct runtime_pdr {
- bfd_vma adr; /* memory address of start of procedure */
- long regmask; /* save register mask */
- long regoffset; /* save register offset */
- long fregmask; /* save floating point register mask */
- long fregoffset; /* save floating point register offset */
- long frameoffset; /* frame size */
- short framereg; /* frame pointer register */
- short pcreg; /* offset or reg of return pc */
- long irpss; /* index into the runtime string table */
- long reserved;
- struct exception_info *exception_info;/* pointer to exception array */
-} RPDR, *pRPDR;
-#define cbRPDR sizeof(RPDR)
-#define rpdNil ((pRPDR) 0)
-#endif
-
-/*
- * Line Numbers
- *
- * Line Numbers are segregated from the normal symbols because they
- * are [1] smaller , [2] are of no interest to your
- * average loader, and [3] are never needed in the middle of normal
- * scanning and therefore slow things down.
- *
- * By definition, the first LINER for any given procedure will have
- * the first line of a procedure and represent the first address.
- */
-
-typedef long LINER, *pLINER;
-#define lineNil ((pLINER)0)
-#define cbLINER sizeof(LINER)
-#define ilineNil -1
-
-
-
-/*
- * The Symbol Structure (GFW, to those who Know!)
- */
-
-typedef struct {
- long iss; /* index into String Space of name */
- bfd_vma value; /* value of symbol */
- unsigned st : 6; /* symbol type */
- unsigned sc : 5; /* storage class - text, data, etc */
- unsigned reserved : 1; /* reserved */
- unsigned index : 20; /* index into sym/aux table */
- } SYMR, *pSYMR;
-#define symNil ((pSYMR)0)
-#define cbSYMR sizeof(SYMR)
-#define isymNil -1
-#define indexNil 0xfffff
-#define issNil -1
-#define issNull 0
-
-
-/* The following converts a memory resident string to an iss.
- * This hack is recognized in SbFIss, in sym.c of the debugger.
- */
-#define IssFSb(sb) (0x80000000 | ((unsigned long)(sb)))
-
-/* E X T E R N A L S Y M B O L R E C O R D
- *
- * Same as the SYMR except it contains file context to determine where
- * the index is.
- */
-typedef struct ecoff_extr {
- unsigned jmptbl:1; /* symbol is a jump table entry for shlibs */
- unsigned cobol_main:1; /* symbol is a cobol main procedure */
- unsigned weakext:1; /* symbol is weak external */
- unsigned reserved:13; /* reserved for future use */
- int ifd; /* where the iss and index fields point into */
- SYMR asym; /* symbol for the external */
- } EXTR, *pEXTR;
-#define extNil ((pEXTR)0)
-#define cbEXTR sizeof(EXTR)
-
-
-/* A U X I L L A R Y T Y P E I N F O R M A T I O N */
-
-/*
- * Type Information Record
- */
-typedef struct {
- unsigned fBitfield : 1; /* set if bit width is specified */
- unsigned continued : 1; /* indicates additional TQ info in next AUX */
- unsigned bt : 6; /* basic type */
- unsigned tq4 : 4;
- unsigned tq5 : 4;
- /* ---- 16 bit boundary ---- */
- unsigned tq0 : 4;
- unsigned tq1 : 4; /* 6 type qualifiers - tqPtr, etc. */
- unsigned tq2 : 4;
- unsigned tq3 : 4;
- } TIR, *pTIR;
-#define cbTIR sizeof(TIR)
-#define tiNil ((pTIR)0)
-#define itqMax 6
-
-/*
- * Relative symbol record
- *
- * If the rfd field is 4095, the index field indexes into the global symbol
- * table.
- */
-
-typedef struct {
- unsigned rfd : 12; /* index into the file indirect table */
- unsigned index : 20; /* index int sym/aux/iss tables */
- } RNDXR, *pRNDXR;
-#define cbRNDXR sizeof(RNDXR)
-#define rndxNil ((pRNDXR)0)
-
-/* dense numbers or sometimes called block numbers are stored in this type,
- * a rfd of 0xffffffff is an index into the global table.
- */
-typedef struct {
- unsigned long rfd; /* index into the file table */
- unsigned long index; /* index int sym/aux/iss tables */
- } DNR, *pDNR;
-#define cbDNR sizeof(DNR)
-#define dnNil ((pDNR)0)
-
-
-
-/*
- * Auxillary information occurs only if needed.
- * It ALWAYS occurs in this order when present.
-
- isymMac used by stProc only
- TIR type info
- TIR additional TQ info (if first TIR was not enough)
- rndx if (bt == btStruct,btUnion,btEnum,btSet,btRange,
- btTypedef):
- rsym.index == iaux for btSet or btRange
- else rsym.index == isym
- dimLow btRange, btSet
- dimMac btRange, btSet
- rndx0 As many as there are tq arrays
- dimLow0
- dimHigh0
- ...
- rndxMax-1
- dimLowMax-1
- dimHighMax-1
- width in bits if (bit field), width in bits.
- */
-#define cAuxMax (6 + (idimMax*3))
-
-/* a union of all possible info in the AUX universe */
-typedef union {
- TIR ti; /* type information record */
- RNDXR rndx; /* relative index into symbol table */
- long dnLow; /* low dimension */
- long dnHigh; /* high dimension */
- long isym; /* symbol table index (end of proc) */
- long iss; /* index into string space (not used) */
- long width; /* width for non-default sized struc fields */
- long count; /* count of ranges for variant arm */
- } AUXU, *pAUXU;
-#define cbAUXU sizeof(AUXU)
-#define auxNil ((pAUXU)0)
-#define iauxNil -1
-
-
-/*
- * Optimization symbols
- *
- * Optimization symbols contain some overlap information with the normal
- * symbol table. In particular, the proc information
- * is somewhat redundant but necessary to easily find the other information
- * present.
- *
- * All of the offsets are relative to the beginning of the last otProc
- */
-
-typedef struct {
- unsigned ot: 8; /* optimization type */
- unsigned value: 24; /* address where we are moving it to */
- RNDXR rndx; /* points to a symbol or opt entry */
- unsigned long offset; /* relative offset this occured */
- } OPTR, *pOPTR;
-#define optNil ((pOPTR) 0)
-#define cbOPTR sizeof(OPTR)
-#define ioptNil -1
-
-/*
- * File Indirect
- *
- * When a symbol is referenced across files the following procedure is used:
- * 1) use the file index to get the File indirect entry.
- * 2) use the file indirect entry to get the File descriptor.
- * 3) add the sym index to the base of that file's sym table
- *
- */
-
-typedef long RFDT, *pRFDT;
-#define cbRFDT sizeof(RFDT)
-#define rfdNil -1
-
-/*
- * The file indirect table in the mips loader is known as an array of FITs.
- * This is done to keep the code in the loader readable in the area where
- * these tables are merged. Note this is only a name change.
- */
-typedef long FIT, *pFIT;
-#define cbFIT sizeof(FIT)
-#define ifiNil -1
-#define fiNil ((pFIT) 0)
-
-#ifdef _LANGUAGE_PASCAL
-#define ifdNil -1
-#define ilnNil -1
-#define ipdNil -1
-#define ilineNil -1
-#define isymNil -1
-#define indexNil 16#fffff
-#define issNil -1
-#define issNull 0
-#define itqMax 6
-#define iauxNil -1
-#define ioptNil -1
-#define rfdNil -1
-#define ifiNil -1
-#endif /* _LANGUAGE_PASCAL */
-
-
-/* Dense numbers
- *
- * Rather than use file index, symbol index pairs to represent symbols
- * and globals, we use dense number so that they can be easily embeded
- * in intermediate code and the programs that process them can
- * use direct access tabls instead of hash table (which would be
- * necesary otherwise because of the sparse name space caused by
- * file index, symbol index pairs. Dense number are represented
- * by RNDXRs.
- */
-
-/*
- * The following table defines the meaning of each SYM field as
- * a function of the "st". (scD/B == scData OR scBss)
- *
- * Note: the value "isymMac" is used by symbols that have the concept
- * of enclosing a block of related information. This value is the
- * isym of the first symbol AFTER the end associated with the primary
- * symbol. For example if a procedure was at isym==90 and had an
- * isymMac==155, the associated end would be at isym==154, and the
- * symbol at 155 would probably (although not necessarily) be the
- * symbol for the next procedure. This allows rapid skipping over
- * internal information of various sorts. "stEnd"s ALWAYS have the
- * isym of the primary symbol that started the block.
- *
-
-ST SC VALUE INDEX
--------- ------ -------- ------
-stFile scText address isymMac
-stLabel scText address ---
-stGlobal scD/B address iaux
-stStatic scD/B address iaux
-stParam scAbs offset iaux
-stLocal scAbs offset iaux
-stProc scText address iaux (isymMac is first AUX)
-stStaticProc scText address iaux (isymMac is first AUX)
-
-stMember scNil ordinal --- (if member of enum)
- (mipsread thinks the case below has a bit, not byte, offset.)
-stMember scNil byte offset iaux (if member of struct/union)
-stMember scBits bit offset iaux (bit field spec)
-
-stBlock scText address isymMac (text block)
- (the code seems to think that rather than scNil, we see scInfo for
- the two cases below.)
-stBlock scNil cb isymMac (struct/union member define)
-stBlock scNil cMembers isymMac (enum member define)
-
- (New types added by SGI to simplify things:)
-stStruct scInfo cb isymMac (struct type define)
-stUnion scInfo cb isymMac (union type define)
-stEnum scInfo cMembers isymMac (enum type define)
-
-stEnd scText address isymStart
-stEnd scNil ------- isymStart (struct/union/enum)
-
-stTypedef scNil ------- iaux
-stRegReloc sc??? value old register number
-stForward sc??? new address isym to original symbol
-
-stConstant scInfo value --- (scalar)
-stConstant scInfo iss --- (complex, e.g. string)
-
- *
- */
-#endif
diff --git a/include/coff/symconst.h b/include/coff/symconst.h
deleted file mode 100644
index ac62ba222..000000000
--- a/include/coff/symconst.h
+++ /dev/null
@@ -1,184 +0,0 @@
-/* Declarations of constants for internal format of MIPS ECOFF symbols.
- Originally contributed by MIPS Computer Systems and Third Eye Software.
- Changes contributed by Cygnus Support are in the public domain.
-
- This file is just aggregated with the files that make up the GNU
- release; it is not considered part of GAS, GDB, or other GNU
- programs. */
-
-/*
- * |-----------------------------------------------------------|
- * | Copyright (c) 1992, 1991, 1990 MIPS Computer Systems, Inc.|
- * | MIPS Computer Systems, Inc. grants reproduction and use |
- * | rights to all parties, PROVIDED that this comment is |
- * | maintained in the copy. |
- * |-----------------------------------------------------------|
- */
-
-/* (C) Copyright 1984 by Third Eye Software, Inc.
- *
- * Third Eye Software, Inc. grants reproduction and use rights to
- * all parties, PROVIDED that this comment is maintained in the copy.
- *
- * Third Eye makes no claims about the applicability of this
- * symbol table to a particular use.
- */
-
-/* glevels for field in FDR */
-#define GLEVEL_0 2
-#define GLEVEL_1 1
-#define GLEVEL_2 0 /* for upward compat reasons. */
-#define GLEVEL_3 3
-
-/* magic number fo symheader */
-#define magicSym 0x7009
-/* The Alpha uses this value instead, for some reason. */
-#define magicSym2 0x1992
-
-/* Language codes */
-#define langC 0
-#define langPascal 1
-#define langFortran 2
-#define langAssembler 3 /* one Assembley inst might map to many mach */
-#define langMachine 4
-#define langNil 5
-#define langAda 6
-#define langPl1 7
-#define langCobol 8
-#define langStdc 9 /* FIXME: Collides with SGI langCplusplus */
-#define langCplusplus 9 /* FIXME: Collides with langStdc */
-#define langCplusplusV2 10 /* SGI addition */
-#define langMax 11 /* maximum allowed 32 -- 5 bits */
-
-/* The following are value definitions for the fields in the SYMR */
-
-/*
- * Storage Classes
- */
-
-#define scNil 0
-#define scText 1 /* text symbol */
-#define scData 2 /* initialized data symbol */
-#define scBss 3 /* un-initialized data symbol */
-#define scRegister 4 /* value of symbol is register number */
-#define scAbs 5 /* value of symbol is absolute */
-#define scUndefined 6 /* who knows? */
-#define scCdbLocal 7 /* variable's value is IN se->va.?? */
-#define scBits 8 /* this is a bit field */
-#define scCdbSystem 9 /* variable's value is IN CDB's address space */
-#define scDbx 9 /* overlap dbx internal use */
-#define scRegImage 10 /* register value saved on stack */
-#define scInfo 11 /* symbol contains debugger information */
-#define scUserStruct 12 /* address in struct user for current process */
-#define scSData 13 /* load time only small data */
-#define scSBss 14 /* load time only small common */
-#define scRData 15 /* load time only read only data */
-#define scVar 16 /* Var parameter (fortran,pascal) */
-#define scCommon 17 /* common variable */
-#define scSCommon 18 /* small common */
-#define scVarRegister 19 /* Var parameter in a register */
-#define scVariant 20 /* Variant record */
-#define scSUndefined 21 /* small undefined(external) data */
-#define scInit 22 /* .init section symbol */
-#define scBasedVar 23 /* Fortran or PL/1 ptr based var */
-#define scXData 24 /* exception handling data */
-#define scPData 25 /* Procedure section */
-#define scFini 26 /* .fini section */
-#define scRConst 27 /* .rconst section */
-#define scMax 32
-
-
-/*
- * Symbol Types
- */
-
-#define stNil 0 /* Nuthin' special */
-#define stGlobal 1 /* external symbol */
-#define stStatic 2 /* static */
-#define stParam 3 /* procedure argument */
-#define stLocal 4 /* local variable */
-#define stLabel 5 /* label */
-#define stProc 6 /* " " Procedure */
-#define stBlock 7 /* beginnning of block */
-#define stEnd 8 /* end (of anything) */
-#define stMember 9 /* member (of anything - struct/union/enum */
-#define stTypedef 10 /* type definition */
-#define stFile 11 /* file name */
-#define stRegReloc 12 /* register relocation */
-#define stForward 13 /* forwarding address */
-#define stStaticProc 14 /* load time only static procs */
-#define stConstant 15 /* const */
-#define stStaParam 16 /* Fortran static parameters */
- /* These new symbol types have been recently added to SGI machines. */
-#define stStruct 26 /* Beginning of block defining a struct type */
-#define stUnion 27 /* Beginning of block defining a union type */
-#define stEnum 28 /* Beginning of block defining an enum type */
-#define stIndirect 34 /* Indirect type specification */
- /* Pseudo-symbols - internal to debugger */
-#define stStr 60 /* string */
-#define stNumber 61 /* pure number (ie. 4 NOR 2+2) */
-#define stExpr 62 /* 2+2 vs. 4 */
-#define stType 63 /* post-coersion SER */
-#define stMax 64
-
-/* definitions for fields in TIR */
-
-/* type qualifiers for ti.tq0 -> ti.(itqMax-1) */
-#define tqNil 0 /* bt is what you see */
-#define tqPtr 1 /* pointer */
-#define tqProc 2 /* procedure */
-#define tqArray 3 /* duh */
-#define tqFar 4 /* longer addressing - 8086/8 land */
-#define tqVol 5 /* volatile */
-#define tqConst 6 /* const */
-#define tqMax 8
-
-/* basic types as seen in ti.bt */
-#define btNil 0 /* undefined (also, enum members) */
-#define btAdr 1 /* address - integer same size as pointer */
-#define btChar 2 /* character */
-#define btUChar 3 /* unsigned character */
-#define btShort 4 /* short */
-#define btUShort 5 /* unsigned short */
-#define btInt 6 /* int */
-#define btUInt 7 /* unsigned int */
-#define btLong 8 /* long */
-#define btULong 9 /* unsigned long */
-#define btFloat 10 /* float (real) */
-#define btDouble 11 /* Double (real) */
-#define btStruct 12 /* Structure (Record) */
-#define btUnion 13 /* Union (variant) */
-#define btEnum 14 /* Enumerated */
-#define btTypedef 15 /* defined via a typedef, isymRef points */
-#define btRange 16 /* subrange of int */
-#define btSet 17 /* pascal sets */
-#define btComplex 18 /* fortran complex */
-#define btDComplex 19 /* fortran double complex */
-#define btIndirect 20 /* forward or unnamed typedef */
-#define btFixedDec 21 /* Fixed Decimal */
-#define btFloatDec 22 /* Float Decimal */
-#define btString 23 /* Varying Length Character String */
-#define btBit 24 /* Aligned Bit String */
-#define btPicture 25 /* Picture */
-#define btVoid 26 /* void */
-#define btLongLong 27 /* long long */
-#define btULongLong 28 /* unsigned long long */
-#define btLong64 30 /* long (64-bit) */
-#define btULong64 31 /* unsigned long (64-bit) */
-#define btLongLong64 32 /* long long (64-bit) */
-#define btULongLong64 33 /* unsigned long long (64-bit) */
-#define btAdr64 34 /* address (64-bit) */
-#define btInt64 35 /* int (64-bit) */
-#define btUInt64 36 /* unsigned int (64-bit) */
-#define btMax 64
-
-#if (_MFG == _MIPS)
-/* optimization type codes */
-#define otNil 0
-#define otReg 1 /* move var to reg */
-#define otBlock 2 /* begin basic block */
-#define otProc 3 /* procedure */
-#define otInline 4 /* inline procedure */
-#define otEnd 5 /* whatever you started */
-#define otMax 6 /* KEEP UP TO DATE */
-#endif /* (_MFG == _MIPS) */
diff --git a/include/coff/ti.h b/include/coff/ti.h
deleted file mode 100644
index d54b2ed19..000000000
--- a/include/coff/ti.h
+++ /dev/null
@@ -1,561 +0,0 @@
-/* COFF information for TI COFF support. Definitions in this file should be
- customized in a target-specific file, and then this file included (see
- tic54x.h for an example).
-
- Copyright 2000, 2001, 2002, 2003, 2005, 2008, 2009, 2010
- 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef COFF_TI_H
-#define COFF_TI_H
-
-/* Note "coff/external.h is not used because TI adds extra fields to the structures. */
-
-/********************** FILE HEADER **********************/
-
-struct external_filehdr
- {
- char f_magic[2]; /* magic number */
- char f_nscns[2]; /* number of sections */
- char f_timdat[4]; /* time & date stamp */
- char f_symptr[4]; /* file pointer to symtab */
- char f_nsyms[4]; /* number of symtab entries */
- char f_opthdr[2]; /* sizeof(optional hdr) */
- char f_flags[2]; /* flags */
- char f_target_id[2]; /* magic no. (TI COFF-specific) */
- };
-
-/* COFF0 has magic number in f_magic, and omits f_target_id from the file
- header; for later versions, f_magic is 0xC1 for COFF1 and 0xC2 for COFF2
- and the target-specific magic number is found in f_target_id */
-
-#define TICOFF0MAGIC TI_TARGET_ID
-#define TICOFF1MAGIC 0x00C1
-#define TICOFF2MAGIC 0x00C2
-#define TICOFF_AOUT_MAGIC 0x0108 /* magic number in optional header */
-#define TICOFF 1 /* customize coffcode.h */
-
-/* The target_id field changes depending on the particular CPU target */
-/* for COFF0, the target id appeared in f_magic, where COFFX magic is now */
-#ifndef TI_TARGET_ID
-#error "TI_TARGET_ID needs to be defined for your CPU"
-#endif
-
-/* Which bfd_arch to use... */
-#ifndef TICOFF_TARGET_ARCH
-#error "TICOFF_TARGET_ARCH needs to be defined for your CPU"
-#endif
-
-#ifndef TICOFF_TARGET_MACHINE_GET
-#define TICOFF_TARGET_MACHINE_GET(FLAGS) 0
-#endif
-
-#ifndef TICOFF_TARGET_MACHINE_SET
-#define TICOFF_TARGET_MACHINE_SET(FLAGSP, MACHINE)
-#endif
-
-/* Default to COFF2 for file output */
-#ifndef TICOFF_DEFAULT_MAGIC
-#define TICOFF_DEFAULT_MAGIC TICOFF2MAGIC
-#endif
-
-/* This value is made available in the rare case where a bfd is unavailable */
-#ifndef OCTETS_PER_BYTE_POWER
-#error "OCTETS_PER_BYTE_POWER not defined for this CPU"
-#else
-#define OCTETS_PER_BYTE (1<<OCTETS_PER_BYTE_POWER)
-#endif
-
-/* default alignment is on a byte (not octet!) boundary */
-#ifndef COFF_DEFAULT_SECTION_ALIGNMENT_POWER
-#define COFF_DEFAULT_SECTION_ALIGNMENT_POWER 0
-#endif
-
-/* TI COFF encodes the section alignment in the section header flags */
-#define COFF_ALIGN_IN_SECTION_HEADER 1
-#define COFF_ALIGN_IN_S_FLAGS 1
-/* requires a power-of-two argument */
-#define COFF_ENCODE_ALIGNMENT(S,X) ((S).s_flags |= (((unsigned)(X)&0xF)<<8))
-/* result is a power of two */
-#define COFF_DECODE_ALIGNMENT(X) (((X)>>8)&0xF)
-
-#define COFF0_P(ABFD) (bfd_coff_filhsz(ABFD) == FILHSZ_V0)
-#define COFF2_P(ABFD) (bfd_coff_scnhsz(ABFD) != SCNHSZ_V01)
-
-#define COFF0_BADMAG(x) ((x).f_magic != TICOFF0MAGIC)
-#define COFF1_BADMAG(x) ((x).f_magic != TICOFF1MAGIC || (x).f_target_id != TI_TARGET_ID)
-#define COFF2_BADMAG(x) ((x).f_magic != TICOFF2MAGIC || (x).f_target_id != TI_TARGET_ID)
-
-/* we need to read/write an extra field in the coff file header */
-#ifndef COFF_ADJUST_FILEHDR_IN_POST
-#define COFF_ADJUST_FILEHDR_IN_POST(abfd, src, dst) \
- do \
- { \
- if (!COFF0_P (abfd)) \
- ((struct internal_filehdr *)(dst))->f_target_id = \
- H_GET_16 (abfd, ((FILHDR *)(src))->f_target_id); \
- } \
- while (0)
-#endif
-
-#ifndef COFF_ADJUST_FILEHDR_OUT_POST
-#define COFF_ADJUST_FILEHDR_OUT_POST(abfd, src, dst) \
- do \
- { \
- if (!COFF0_P (abfd)) \
- H_PUT_16 (abfd, ((struct internal_filehdr *)(src))->f_target_id, \
- ((FILHDR *)(dst))->f_target_id); \
- } \
- while (0)
-#endif
-
-#define FILHDR struct external_filehdr
-#define FILHSZ 22
-#define FILHSZ_V0 20 /* COFF0 omits target_id field */
-
-/* File header flags */
-#define F_RELFLG (0x0001)
-#define F_EXEC (0x0002)
-#define F_LNNO (0x0004)
-#define F_VERS (0x0010) /* TMS320C4x code */
-/* F_LSYMS needs to be redefined in your source file */
-#define F_LSYMS_TICOFF (0x0010) /* normal COFF is 0x8 */
-
-#define F_10 0x00 /* file built for TMS320C1x devices */
-#define F_20 0x10 /* file built for TMS320C2x devices */
-#define F_25 0x20 /* file built for TMS320C2x/C5x devices */
-#define F_LENDIAN 0x0100 /* 16 bits/word, LSB first */
-#define F_SYMMERGE 0x1000 /* duplicate symbols were removed */
-
-/********************** OPTIONAL HEADER **********************/
-
-
-typedef struct
-{
- char magic[2]; /* type of file (0x108) */
- char vstamp[2]; /* version stamp */
- char tsize[4]; /* text size in bytes, padded to FW bdry*/
- char dsize[4]; /* initialized data " " */
- char bsize[4]; /* uninitialized data " " */
- char entry[4]; /* entry pt. */
- char text_start[4]; /* base of text used for this file */
- char data_start[4]; /* base of data used for this file */
-}
-AOUTHDR;
-
-
-#define AOUTHDRSZ 28
-#define AOUTSZ 28
-
-
-/********************** SECTION HEADER **********************/
-/* COFF0, COFF1 */
-struct external_scnhdr_v01 {
- char s_name[8]; /* section name */
- char s_paddr[4]; /* physical address, aliased s_nlib */
- char s_vaddr[4]; /* virtual address */
- char s_size[4]; /* section size (in WORDS) */
- char s_scnptr[4]; /* file ptr to raw data for section */
- char s_relptr[4]; /* file ptr to relocation */
- char s_lnnoptr[4]; /* file ptr to line numbers */
- char s_nreloc[2]; /* number of relocation entries */
- char s_nlnno[2]; /* number of line number entries*/
- char s_flags[2]; /* flags */
- char s_reserved[1]; /* reserved */
- char s_page[1]; /* section page number (LOAD) */
-};
-
-/* COFF2 */
-struct external_scnhdr {
- char s_name[8]; /* section name */
- char s_paddr[4]; /* physical address, aliased s_nlib */
- char s_vaddr[4]; /* virtual address */
- char s_size[4]; /* section size (in WORDS) */
- char s_scnptr[4]; /* file ptr to raw data for section */
- char s_relptr[4]; /* file ptr to relocation */
- char s_lnnoptr[4]; /* file ptr to line numbers */
- char s_nreloc[4]; /* number of relocation entries */
- char s_nlnno[4]; /* number of line number entries*/
- char s_flags[4]; /* flags */
- char s_reserved[2]; /* reserved */
- char s_page[2]; /* section page number (LOAD) */
-};
-
-/*
- * Special section flags
- */
-
-/* TI COFF defines these flags;
- STYP_CLINK: the section should be excluded from the final
- linker output if there are no references found to any symbol in the section
- STYP_BLOCK: the section should be blocked, i.e. if the section would cross
- a page boundary, it is started at a page boundary instead.
- TI COFF puts the section alignment power of two in the section flags
- e.g. 2**N is alignment, flags |= (N & 0xF) << 8
-*/
-#define STYP_CLINK (0x4000)
-#define STYP_BLOCK (0x1000)
-#define STYP_ALIGN (0x0F00) /* TI COFF stores section alignment here */
-
-#define SCNHDR_V01 struct external_scnhdr_v01
-#define SCNHDR struct external_scnhdr
-#define SCNHSZ_V01 40 /* for v0 and v1 */
-#define SCNHSZ 48
-
-/* COFF2 changes the offsets and sizes of these fields
- Assume we're dealing with the COFF2 scnhdr structure, and adjust
- accordingly. Note: The GNU C versions of some of these macros
- are necessary in order to avoid compile time warnings triggered
- gcc's array bounds checking. The PUT_SCNHDR_PAGE macro also has
- the advantage on not evaluating LOC twice. */
-
-#define GET_SCNHDR_NRELOC(ABFD, LOC) \
- (COFF2_P (ABFD) ? H_GET_32 (ABFD, LOC) : H_GET_16 (ABFD, LOC))
-#define PUT_SCNHDR_NRELOC(ABFD, VAL, LOC) \
- (COFF2_P (ABFD) ? H_PUT_32 (ABFD, VAL, LOC) : H_PUT_16 (ABFD, VAL, LOC))
-#ifdef __GNUC__
-#define GET_SCNHDR_NLNNO(ABFD, LOC) \
- ({ \
- int nlnno; \
- char * ptr = (LOC); \
- if (COFF2_P (ABFD)) \
- nlnno = H_GET_32 (ABFD, ptr); \
- else \
- nlnno = H_GET_16 (ABFD, ptr - 2); \
- nlnno; \
- })
-#define PUT_SCNHDR_NLNNO(ABFD, VAL, LOC) \
- do \
- { \
- char * ptr = (LOC); \
- if (COFF2_P (ABFD)) \
- H_PUT_32 (ABFD, VAL, ptr); \
- else \
- H_PUT_16 (ABFD, VAL, ptr - 2); \
- } \
- while (0)
-#define GET_SCNHDR_FLAGS(ABFD, LOC) \
- ({ \
- int flags; \
- char * ptr = (LOC); \
- if (COFF2_P (ABFD)) \
- flags = H_GET_32 (ABFD, ptr); \
- else \
- flags = H_GET_16 (ABFD, ptr - 4); \
- flags; \
- })
-#define PUT_SCNHDR_FLAGS(ABFD, VAL, LOC) \
- do \
- { \
- char * ptr = (LOC); \
- if (COFF2_P (ABFD)) \
- H_PUT_32 (ABFD, VAL, ptr); \
- else \
- H_PUT_16 (ABFD, VAL, ptr - 4); \
- } \
- while (0)
-#define GET_SCNHDR_PAGE(ABFD, LOC) \
- ({ \
- unsigned page; \
- char * ptr = (LOC); \
- if (COFF2_P (ABFD)) \
- page = H_GET_16 (ABFD, ptr); \
- else \
- page = (unsigned) H_GET_8 (ABFD, ptr - 7); \
- page; \
- })
-/* On output, make sure that the "reserved" field is zero. */
-#define PUT_SCNHDR_PAGE(ABFD, VAL, LOC) \
- do \
- { \
- char * ptr = (LOC); \
- if (COFF2_P (ABFD)) \
- H_PUT_16 (ABFD, VAL, ptr); \
- else \
- { \
- H_PUT_8 (ABFD, VAL, ptr - 7); \
- H_PUT_8 (ABFD, 0, ptr - 8); \
- } \
- } \
- while (0)
-#else
-#define GET_SCNHDR_NLNNO(ABFD, LOC) \
- (COFF2_P (ABFD) ? H_GET_32 (ABFD, LOC) : H_GET_16 (ABFD, (LOC) - 2))
-#define PUT_SCNHDR_NLNNO(ABFD, VAL, LOC) \
- (COFF2_P (ABFD) ? H_PUT_32 (ABFD, VAL, LOC) : H_PUT_16 (ABFD, VAL, (LOC) - 2))
-#define GET_SCNHDR_FLAGS(ABFD, LOC) \
- (COFF2_P (ABFD) ? H_GET_32 (ABFD, LOC) : H_GET_16 (ABFD, (LOC) - 4))
-#define PUT_SCNHDR_FLAGS(ABFD, VAL, LOC) \
- (COFF2_P (ABFD) ? H_PUT_32 (ABFD, VAL, LOC) : H_PUT_16 (ABFD, VAL, (LOC) - 4))
-#define GET_SCNHDR_PAGE(ABFD, LOC) \
- (COFF2_P (ABFD) ? H_GET_16 (ABFD, LOC) : (unsigned) H_GET_8 (ABFD, (LOC) - 7))
-/* On output, make sure that the "reserved" field is zero. */
-#define PUT_SCNHDR_PAGE(ABFD, VAL, LOC) \
- (COFF2_P (ABFD) \
- ? H_PUT_16 (ABFD, VAL, LOC) \
- : H_PUT_8 (ABFD, VAL, (LOC) - 7), H_PUT_8 (ABFD, 0, (LOC) - 8))
-#endif
-
-
-/* TI COFF stores section size as number of bytes (address units, not octets),
- so adjust to be number of octets, which is what BFD expects */
-#define GET_SCNHDR_SIZE(ABFD, SZP) \
- (H_GET_32 (ABFD, SZP) * bfd_octets_per_byte (ABFD))
-#define PUT_SCNHDR_SIZE(ABFD, SZ, SZP) \
- H_PUT_32 (ABFD, (SZ) / bfd_octets_per_byte (ABFD), SZP)
-
-#define COFF_ADJUST_SCNHDR_IN_POST(ABFD, EXT, INT) \
- do \
- { \
- ((struct internal_scnhdr *)(INT))->s_page = \
- GET_SCNHDR_PAGE (ABFD, ((SCNHDR *)(EXT))->s_page); \
- } \
- while (0)
-
-/* The entire scnhdr may not be assigned.
- Ensure that everything is initialized. */
-#define COFF_ADJUST_SCNHDR_OUT_PRE(ABFD, INT, EXT) \
- do \
- { \
- memset((EXT), 0, sizeof (SCNHDR)); \
- } \
- while (0)
-
-/* The line number and reloc overflow checking in coff_swap_scnhdr_out in
- coffswap.h doesn't use PUT_X for s_nlnno and s_nreloc.
- Due to different sized v0/v1/v2 section headers, we have to re-write these
- fields.
- */
-#define COFF_ADJUST_SCNHDR_OUT_POST(ABFD, INT, EXT) \
- do \
- { \
- PUT_SCNHDR_NLNNO (ABFD, ((struct internal_scnhdr *)(INT))->s_nlnno, \
- ((SCNHDR *)(EXT))->s_nlnno); \
- PUT_SCNHDR_NRELOC (ABFD, ((struct internal_scnhdr *)(INT))->s_nreloc,\
- ((SCNHDR *)(EXT))->s_nreloc); \
- PUT_SCNHDR_FLAGS (ABFD, ((struct internal_scnhdr *)(INT))->s_flags, \
- ((SCNHDR *)(EXT))->s_flags); \
- PUT_SCNHDR_PAGE (ABFD, ((struct internal_scnhdr *)(INT))->s_page, \
- ((SCNHDR *)(EXT))->s_page); \
- } \
- while (0)
-
-/*
- * names of "special" sections
- */
-#define _TEXT ".text"
-#define _DATA ".data"
-#define _BSS ".bss"
-#define _CINIT ".cinit" /* initialized C data */
-#define _SCONST ".const" /* constants */
-#define _SWITCH ".switch" /* switch tables */
-#define _STACK ".stack" /* C stack */
-#define _SYSMEM ".sysmem" /* used for malloc et al. syscalls */
-
-/********************** LINE NUMBERS **********************/
-
-/* 1 line number entry for every "breakpointable" source line in a section.
- * Line numbers are grouped on a per function basis; first entry in a function
- * grouping will have l_lnno = 0 and in place of physical address will be the
- * symbol table index of the function name.
- */
-struct external_lineno {
- union {
- char l_symndx[4]; /* function name symbol index, iff l_lnno == 0*/
- char l_paddr[4]; /* (physical) address of line number */
- } l_addr;
- char l_lnno[2]; /* line number */
-};
-
-#define LINENO struct external_lineno
-#define LINESZ 6
-
-
-/********************** SYMBOLS **********************/
-
-/* NOTE: this is what a local label looks like in assembly source; what it
- looks like in COFF output is undefined */
-#define TICOFF_LOCAL_LABEL_P(NAME) \
-((NAME[0] == '$' && NAME[1] >= '0' && NAME[1] <= '9' && NAME[2] == '\0') \
- || NAME[strlen(NAME)-1] == '?')
-
-#define E_SYMNMLEN 8 /* # characters in a symbol name */
-#define E_FILNMLEN 14 /* # characters in a file name */
-#define E_DIMNUM 4 /* # array dimensions in auxiliary entry */
-
-struct external_syment
-{
- union {
- char e_name[E_SYMNMLEN];
- struct {
- char e_zeroes[4];
- char e_offset[4];
- } e;
- } e;
- char e_value[4];
- char e_scnum[2];
- char e_type[2];
- char e_sclass[1];
- char e_numaux[1];
-};
-
-
-#define N_BTMASK (017)
-#define N_TMASK (060)
-#define N_BTSHFT (4)
-#define N_TSHIFT (2)
-
-
-union external_auxent {
- struct {
- char x_tagndx[4]; /* str, un, or enum tag indx */
- union {
- struct {
- char x_lnno[2]; /* declaration line number */
- char x_size[2]; /* str/union/array size */
- } x_lnsz;
- char x_fsize[4]; /* size of function */
- } x_misc;
- union {
- struct { /* if ISFCN, tag, or .bb */
- char x_lnnoptr[4]; /* ptr to fcn line # */
- char x_endndx[4]; /* entry ndx past block end */
- } x_fcn;
- struct { /* if ISARY, up to 4 dimen. */
- char x_dimen[E_DIMNUM][2];
- } x_ary;
- } x_fcnary;
- char x_tvndx[2]; /* tv index */
- } x_sym;
-
- union {
- char x_fname[E_FILNMLEN];
- struct {
- char x_zeroes[4];
- char x_offset[4];
- } x_n;
- } x_file;
-
- struct {
- char x_scnlen[4]; /* section length */
- char x_nreloc[2]; /* # relocation entries */
- char x_nlinno[2]; /* # line numbers */
- } x_scn;
-
- struct {
- char x_tvfill[4]; /* tv fill value */
- char x_tvlen[2]; /* length of .tv */
- char x_tvran[2][2]; /* tv range */
- } x_tv; /* info about .tv section (in auxent of symbol .tv)) */
-
-
-};
-
-#define SYMENT struct external_syment
-#define SYMESZ 18
-#define AUXENT union external_auxent
-#define AUXESZ 18
-
-/* section lengths are in target bytes (not host bytes) */
-#define GET_SCN_SCNLEN(ABFD, EXT) \
- (H_GET_32 (ABFD, (EXT)->x_scn.x_scnlen) * bfd_octets_per_byte (ABFD))
-#define PUT_SCN_SCNLEN(ABFD, INT, EXT) \
- H_PUT_32 (ABFD, (INT) / bfd_octets_per_byte (ABFD), (EXT)->x_scn.x_scnlen)
-
-/* lnsz size is in bits in COFF file, in bytes in BFD */
-#define GET_LNSZ_SIZE(abfd, ext) \
- (H_GET_16 (abfd, ext->x_sym.x_misc.x_lnsz.x_size) / (in_class != C_FIELD ? 8 : 1))
-
-#define PUT_LNSZ_SIZE(abfd, in, ext) \
- H_PUT_16 (abfd, ((in_class != C_FIELD) ? (in) * 8 : (in)), \
- ext->x_sym.x_misc.x_lnsz.x_size)
-
-/* TI COFF stores offsets for MOS and MOU in bits; BFD expects bytes
- Also put the load page flag of the section into the symbol value if it's an
- address. */
-#ifndef NEEDS_PAGE
-#define NEEDS_PAGE(X) 0
-#define PAGE_MASK 0
-#endif
-#define COFF_ADJUST_SYM_IN_POST(ABFD, EXT, INT) \
- do \
- { \
- struct internal_syment *dst = (struct internal_syment *)(INT); \
- if (dst->n_sclass == C_MOS || dst->n_sclass == C_MOU) \
- dst->n_value /= 8; \
- else if (NEEDS_PAGE (dst->n_sclass)) { \
- asection *scn = coff_section_from_bfd_index (abfd, dst->n_scnum); \
- dst->n_value |= (scn->lma & PAGE_MASK); \
- } \
- } \
- while (0)
-
-#define COFF_ADJUST_SYM_OUT_POST(ABFD, INT, EXT) \
- do \
- { \
- struct internal_syment *src = (struct internal_syment *)(INT); \
- SYMENT *dst = (SYMENT *)(EXT); \
- if (src->n_sclass == C_MOU || src->n_sclass == C_MOS) \
- H_PUT_32 (abfd, src->n_value * 8, dst->e_value); \
- else if (NEEDS_PAGE (src->n_sclass)) { \
- H_PUT_32 (abfd, src->n_value &= ~PAGE_MASK, dst->e_value); \
- } \
- } \
- while (0)
-
-/* Detect section-relative absolute symbols so they get flagged with a sym
- index of -1.
-*/
-#define SECTION_RELATIVE_ABSOLUTE_SYMBOL_P(RELOC, SECT) \
- ((*(RELOC)->sym_ptr_ptr)->section->output_section == (SECT) \
- && (RELOC)->howto->name[0] == 'A')
-
-/********************** RELOCATION DIRECTIVES **********************/
-
-struct external_reloc_v0
-{
- char r_vaddr[4];
- char r_symndx[2];
- char r_reserved[2];
- char r_type[2];
-};
-
-struct external_reloc
-{
- char r_vaddr[4];
- char r_symndx[4];
- char r_reserved[2]; /* extended pmad byte for COFF2 */
- char r_type[2];
-};
-
-#define RELOC struct external_reloc
-#define RELSZ_V0 10 /* FIXME -- coffcode.h needs fixing */
-#define RELSZ 12 /* for COFF1/2 */
-
-#define SWAP_OUT_RELOC_EXTRA(abfd, src, dst) \
- do memset (dst->r_reserved, 0, sizeof (dst->r_reserved)); while (0)
-
-/* various relocation types. */
-#define R_ABS 0x0000 /* no relocation */
-#define R_REL13 0x002A /* 13-bit direct reference (???) */
-#define R_PARTLS7 0x0028 /* 7 LSBs of an address */
-#define R_PARTMS9 0x0029 /* 9MSBs of an address */
-#define R_EXTWORD 0x002B /* 23-bit direct reference */
-#define R_EXTWORD16 0x002C /* 16-bit direct reference to 23-bit addr*/
-#define R_EXTWORDMS7 0x002D /* upper 7 bits of 23-bit address */
-
-#endif /* COFF_TI_H */
diff --git a/include/coff/tic30.h b/include/coff/tic30.h
deleted file mode 100644
index 4f7776a43..000000000
--- a/include/coff/tic30.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/* coff information for Texas Instruments TMS320C3X
-
- Copyright 2001, 2010 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#define L_LNNO_SIZE 4
-#include "coff/external.h"
-
-#define TIC30MAGIC 0xC000
-
-#define TIC30BADMAG(x) (((x).f_magic != TIC30MAGIC))
-
-/********************** RELOCATION DIRECTIVES **********************/
-
-/* The external reloc has an offset field, because some of the reloc
- types on the z8k don't have room in the instruction for the entire
- offset - eg with segments */
-
-struct external_reloc
-{
- char r_vaddr[4];
- char r_symndx[4];
- char r_offset[4];
- char r_type[2];
- char r_stuff[2];
-};
-
-#define RELOC struct external_reloc
-#define RELSZ 16
-
-/* TMS320C30 relocation types. */
-
-#define R_TIC30_ABS16 0x100 /* 16 bit absolute. */
-#define R_TIC30_ABS24 0x101 /* 24 bit absolute. */
-#define R_TIC30_ABS32 0x102 /* 32 bit absolute. */
-#define R_TIC30_LDP 0x103 /* LDP bits 23-16 to 7-0. */
-#define R_TIC30_PC16 0x104 /* 16 bit pc relative. */
diff --git a/include/coff/tic4x.h b/include/coff/tic4x.h
deleted file mode 100644
index 1eb3e26bf..000000000
--- a/include/coff/tic4x.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/* TI COFF information for Texas Instruments TMS320C4X/C3X.
- This file customizes the settings in coff/ti.h.
-
- Copyright 2002, 2003, 2010 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef COFF_TIC4X_H
-#define COFF_TIC4X_H
-
-#define TIC4X_TARGET_ID 0x0093
-/* Octets per byte, as a power of two. */
-#define TI_TARGET_ID TIC4X_TARGET_ID
-#define OCTETS_PER_BYTE_POWER 2
-/* Add to howto to get absolute/sect-relative version. */
-#define HOWTO_BANK 6
-#define TICOFF_TARGET_ARCH bfd_arch_tic4x
-/* We use COFF2. */
-#define TICOFF_DEFAULT_MAGIC TICOFF2MAGIC
-
-#define TICOFF_TARGET_MACHINE_GET(FLAGS) \
- (((FLAGS) & F_VERS) ? bfd_mach_tic4x : bfd_mach_tic3x)
-
-#define TICOFF_TARGET_MACHINE_SET(FLAGSP, MACHINE) \
- do \
- { \
- if ((MACHINE) == bfd_mach_tic4x) \
- *(FLAGSP) |= F_VERS; \
- } \
- while (0)
-
-#include "coff/ti.h"
-
-#endif /* COFF_TIC4X_H */
diff --git a/include/coff/tic54x.h b/include/coff/tic54x.h
deleted file mode 100644
index c61f1f20d..000000000
--- a/include/coff/tic54x.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/* TI COFF information for Texas Instruments TMS320C54X.
- This file customizes the settings in coff/ti.h.
-
- Copyright 2000, 2001, 2010 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef COFF_TIC54X_H
-#define COFF_TIC54X_H
-
-#define TIC54X_TARGET_ID 0x98
-#define TIC54XALGMAGIC 0x009B /* c54x algebraic assembler output */
-#define TIC5X_TARGET_ID 0x92
-#define TI_TARGET_ID TIC54X_TARGET_ID
-#define OCTETS_PER_BYTE_POWER 1 /* octets per byte, as a power of two */
-#define HOWTO_BANK 6 /* add to howto to get absolute/sect-relative version */
-#define TICOFF_TARGET_ARCH bfd_arch_tic54x
-#define TICOFF_DEFAULT_MAGIC TICOFF1MAGIC /* we use COFF1 for compatibility */
-
-/* Page macros
-
- The first GDB port requires flags in its remote memory access commands to
- distinguish between data/prog space. Hopefully we can make this go away
- eventually. Stuff the page in the upper bits of a 32-bit address, since
- the c5x family only uses 16 or 23 bits.
-
- c2x, c5x and most c54x devices have 16-bit addresses, but the c548 has
- 23-bit program addresses. Make sure the page flags don't interfere.
- These flags are used by GDB to identify the destination page for
- addresses.
-*/
-
-/* Recognized load pages (by common convention). */
-#define PG_PROG 0x0 /* PROG page */
-#define PG_DATA 0x1 /* DATA page */
-#define PG_IO 0x2 /* I/O page */
-
-/** Indicate whether the given storage class requires a page flag. */
-#define NEEDS_PAGE(X) ((X)==C_EXT)
-#define PAGE_MASK 0xFF000000
-#define ADDR_MASK 0x00FFFFFF
-#define PG_TO_FLAG(p) (((unsigned long)(p) & 0xFF) << 24)
-#define FLAG_TO_PG(f) (((f) >> 24) & 0xFF)
-
-#include "coff/ti.h"
-
-#endif /* COFF_TIC54X_H */
diff --git a/include/coff/tic80.h b/include/coff/tic80.h
deleted file mode 100644
index 44f873ef3..000000000
--- a/include/coff/tic80.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/* coff information for TI TMS320C80 (MVP)
-
- Copyright 2001, 2010 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#define DO_NOT_DEFINE_FILHDR
-#define DO_NOT_DEFINE_SCNHDR
-#define L_LNNO_SIZE 2
-#include "coff/external.h"
-
-/********************** FILE HEADER **********************/
-
-struct external_filehdr
- {
- char f_magic[2]; /* magic number */
- char f_nscns[2]; /* number of sections */
- char f_timdat[4]; /* time & date stamp */
- char f_symptr[4]; /* file pointer to symtab */
- char f_nsyms[4]; /* number of symtab entries */
- char f_opthdr[2]; /* sizeof(optional hdr) */
- char f_flags[2]; /* flags */
- char f_target_id[2];/* target id (TIc80 specific) */
-};
-
-#define TIC80_ARCH_MAGIC 0x0C1 /* Goes in the file header magic number field */
-#define TIC80_TARGET_ID 0x95 /* Goes in the target id field */
-
-#define TIC80BADMAG(x) ((x).f_magic != TIC80_ARCH_MAGIC)
-
-#define FILHDR struct external_filehdr
-#define FILHSZ 22
-
-#define TIC80_AOUTHDR_MAGIC 0x108 /* Goes in the optional file header magic number field */
-
-/********************** SECTION HEADER **********************/
-
-struct external_scnhdr
-{
- char s_name[8]; /* section name */
- char s_paddr[4]; /* physical address, aliased s_nlib */
- char s_vaddr[4]; /* virtual address */
- char s_size[4]; /* section size */
- char s_scnptr[4]; /* file ptr to raw data for section */
- char s_relptr[4]; /* file ptr to relocation */
- char s_lnnoptr[4]; /* file ptr to line numbers */
- char s_nreloc[2]; /* number of relocation entries */
- char s_nlnno[2]; /* number of line number entries*/
- char s_flags[2]; /* flags */
- char s_reserved[1]; /* reserved (TIc80 specific) */
- char s_mempage[1]; /* memory page number (TIc80) */
-};
-
-/* Names of "special" sections. */
-#define _TEXT ".text"
-#define _DATA ".data"
-#define _BSS ".bss"
-#define _CINIT ".cinit"
-#define _CONST ".const"
-#define _SWITCH ".switch"
-#define _STACK ".stack"
-#define _SYSMEM ".sysmem"
-
-#define SCNHDR struct external_scnhdr
-#define SCNHSZ 40
-
-/* FIXME - need to correlate external_auxent with
- TIc80 Code Generation Tools User's Guide, CG:A-25 */
-
-/********************** RELOCATION DIRECTIVES **********************/
-
-/* The external reloc has an offset field, because some of the reloc
- types on the h8 don't have room in the instruction for the entire
- offset - eg the strange jump and high page addressing modes. */
-
-struct external_reloc
-{
- char r_vaddr[4];
- char r_symndx[4];
- char r_reserved[2];
- char r_type[2];
-};
-
-#define RELOC struct external_reloc
-#define RELSZ 12
-
-/* TIc80 relocation types. */
-
-#define R_ABS 0x00 /* Absolute address - no relocation */
-#define R_RELLONGX 0x11 /* PP: 32 bits, direct */
-#define R_PPBASE 0x34 /* PP: Global base address type */
-#define R_PPLBASE 0x35 /* PP: Local base address type */
-#define R_PP15 0x38 /* PP: Global 15 bit offset */
-#define R_PP15W 0x39 /* PP: Global 15 bit offset divided by 4 */
-#define R_PP15H 0x3A /* PP: Global 15 bit offset divided by 2 */
-#define R_PP16B 0x3B /* PP: Global 16 bit offset for bytes */
-#define R_PPL15 0x3C /* PP: Local 15 bit offset */
-#define R_PPL15W 0x3D /* PP: Local 15 bit offset divided by 4 */
-#define R_PPL15H 0x3E /* PP: Local 15 bit offset divided by 2 */
-#define R_PPL16B 0x3F /* PP: Local 16 bit offset for bytes */
-#define R_PPN15 0x40 /* PP: Global 15 bit negative offset */
-#define R_PPN15W 0x41 /* PP: Global 15 bit negative offset divided by 4 */
-#define R_PPN15H 0x42 /* PP: Global 15 bit negative offset divided by 2 */
-#define R_PPN16B 0x43 /* PP: Global 16 bit negative byte offset */
-#define R_PPLN15 0x44 /* PP: Local 15 bit negative offset */
-#define R_PPLN15W 0x45 /* PP: Local 15 bit negative offset divided by 4 */
-#define R_PPLN15H 0x46 /* PP: Local 15 bit negative offset divided by 2 */
-#define R_PPLN16B 0x47 /* PP: Local 16 bit negative byte offset */
-#define R_MPPCR15W 0x4E /* MP: 15 bit PC-relative divided by 4 */
-#define R_MPPCR 0x4F /* MP: 32 bit PC-relative divided by 4 */
diff --git a/include/coff/w65.h b/include/coff/w65.h
deleted file mode 100644
index 31d960930..000000000
--- a/include/coff/w65.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/* coff information for WDC 65816
-
- Copyright 2001, 2010 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#define L_LNNO_SIZE 4
-#include "coff/external.h"
-
-#define W65MAGIC 0x6500
-
-#define W65BADMAG(x) (((x).f_magic != W65MAGIC))
-
-/********************** RELOCATION DIRECTIVES **********************/
-
-/* The external reloc has an offset field, because some of the reloc
- types on the w65 don't have room in the instruction for the entire
- offset - eg the strange jump and high page addressing modes */
-
-struct external_reloc
-{
- char r_vaddr[4];
- char r_symndx[4];
- char r_offset[4];
- char r_type[2];
- char r_stuff[2];
-};
-
-#define RELOC struct external_reloc
-#define RELSZ 16
-
-
-
-
diff --git a/include/coff/we32k.h b/include/coff/we32k.h
deleted file mode 100644
index 3787dd27b..000000000
--- a/include/coff/we32k.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/* coff information for we32k
-
- Copyright 2001, 2010 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#define L_LNNO_SIZE 2
-#include "coff/external.h"
-
-/* Bits for f_flags:
- F_RELFLG relocation info stripped from file
- F_EXEC file is executable (no unresolved external references)
- F_LNNO line numbers stripped from file
- F_LSYMS local symbols stripped from file
- F_AR32WR file has byte ordering of an AR32WR machine (e.g. vax). */
-
-#define F_RELFLG (0x0001)
-#define F_EXEC (0x0002)
-#define F_LNNO (0x0004)
-#define F_LSYMS (0x0008)
-#define F_BM32B (0020000)
-#define F_BM32MAU (0040000)
-
-#define WE32KMAGIC 0x170 /* we32k sans transfer vector */
-#define FBOMAGIC 0x170 /* we32k sans transfer vector */
-#define MTVMAGIC 0x171 /* we32k with transfer vector */
-#define RBOMAGIC 0x172 /* reserved */
-#define WE32KBADMAG(x) ( ((x).f_magic != WE32KMAGIC) \
- && ((x).f_magic != FBOMAGIC) \
- && ((x).f_magic != RBOMAGIC) \
- && ((x).f_magic != MTVMAGIC))
-
-/* More names of "special" sections. */
-#define _TV ".tv"
-#define _INIT ".init"
-#define _FINI ".fini"
-
-/********************** RELOCATION DIRECTIVES **********************/
-
-struct external_reloc
-{
- char r_vaddr[4];
- char r_symndx[4];
- char r_type[2];
-};
-
-#define RELOC struct external_reloc
-#define RELSZ 10
-
diff --git a/include/coff/x86_64.h b/include/coff/x86_64.h
deleted file mode 100644
index fcd44c8e8..000000000
--- a/include/coff/x86_64.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/* COFF information for AMD 64.
- Copyright 2006, 2009, 2010 Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA.
-
- Written by Kai Tietz, OneVision Software GmbH&CoKg. */
-
-#define L_LNNO_SIZE 2
-#define INCLUDE_COMDAT_FIELDS_IN_AUXENT
-
-#include "coff/external.h"
-
-#define COFF_PAGE_SIZE 0x1000
-
-#define AMD64MAGIC 0x8664
-
-#define AMD64BADMAG(x) ((x).f_magic != AMD64MAGIC)
-#define IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x20b
-
-#define OMAGIC 0404 /* Object files, eg as output. */
-#define ZMAGIC IMAGE_NT_OPTIONAL_HDR64_MAGIC /* Demand load format, eg normal ld output 0x10b. */
-#define STMAGIC 0401 /* Target shlib. */
-#define SHMAGIC 0443 /* Host shlib. */
-
-/* Define some NT default values. */
-/* #define NT_IMAGE_BASE 0x400000 moved to internal.h. */
-#define NT_SECTION_ALIGNMENT 0x1000
-#define NT_FILE_ALIGNMENT 0x200
-#define NT_DEF_RESERVE 0x100000
-#define NT_DEF_COMMIT 0x1000
-
-/* Relocation directives. */
-
-struct external_reloc
-{
- char r_vaddr[4];
- char r_symndx[4];
- char r_type[2];
-};
-
-#define RELOC struct external_reloc
-#define RELSZ 10
diff --git a/include/coff/xcoff.h b/include/coff/xcoff.h
deleted file mode 100644
index 67502cda7..000000000
--- a/include/coff/xcoff.h
+++ /dev/null
@@ -1,647 +0,0 @@
-/* Internal format of XCOFF object file data structures for BFD.
-
- Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005,
- 2009, 2010 Free Software Foundation, Inc.
- Written by Ian Lance Taylor <ian@cygnus.com>, Cygnus Support.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef _INTERNAL_XCOFF_H
-#define _INTERNAL_XCOFF_H
-
-/* XCOFF specific f_flags. */
-
-/* File was profiled with fdpr. */
-#define F_FDPR_PROF 0x0010
-
-/* File was reordered with fdpr. */
-#define F_FDPR_OPTI 0x0020
-
-/* File use very large program support. */
-#define F_DSA 0x0040
-
-/* One aux header specifying medium page sizes is non-zero. */
-#define F_VARPG 0x0100
-
-/* Read/write sections are non-executable. */
-#define F_NONEXEC 0x8000
-
-/* Linker */
-
-/* Names of "special" sections. */
-#define _TEXT ".text"
-#define _DATA ".data"
-#define _BSS ".bss"
-#define _PAD ".pad"
-#define _LOADER ".loader"
-#define _EXCEPT ".except"
-#define _TYPCHK ".typchk"
-
-/* XCOFF uses special .dwXXX sections with the type STYP_DWARF. */
-#define STYP_DWARF 0x0010
-
-/* High-order 16-bits dwarf subtypes. */
-#define SSUBTYP_DWINFO 0x10000
-#define SSUBTYP_DWLINE 0x20000
-#define SSUBTYP_DWPBNMS 0x30000
-#define SSUBTYP_DWPBTYP 0x40000
-#define SSUBTYP_DWARNGE 0x50000
-#define SSUBTYP_DWABREV 0x60000
-#define SSUBTYP_DWSTR 0x70000
-#define SSUBTYP_DWRNGES 0x80000
-
-/* XCOFF uses a special .loader section with type STYP_LOADER. */
-#define STYP_LOADER 0x1000
-
-/* Specifies an exception section. A section of this type provides
- information to identify the reason that a trap or ececptin occured within
- and executable object program */
-#define STYP_EXCEPT 0x0100
-
-/* Specifies an initialized thread-local data section. */
-#define STYP_TDATA 0x0400
-
-/* Specifies an uninitialized thread-local data section. */
-#define STYP_TBSS 0x0800
-
-/* XCOFF uses a special .debug section with type STYP_DEBUG. */
-#define STYP_DEBUG 0x2000
-
-/* Specifies a type check section. A section of this type contains parameter
- argument type check strings used by the AIX binder. */
-#define STYP_TYPCHK 0x4000
-
-/* XCOFF handles line number or relocation overflow by creating
- another section header with STYP_OVRFLO set. */
-#define STYP_OVRFLO 0x8000
-
-#define RS6K_AOUTHDR_OMAGIC 0x0107 /* old: text & data writeable */
-#define RS6K_AOUTHDR_NMAGIC 0x0108 /* new: text r/o, data r/w */
-#define RS6K_AOUTHDR_ZMAGIC 0x010B /* paged: text r/o, both page-aligned */
-
-/* XCOFF relocation types.
- The relocations are described in the function
- xcoff[64]_ppc_relocate_section in coff64-rs6000.c and coff-rs6000.c */
-
-#define R_POS (0x00)
-#define R_NEG (0x01)
-#define R_REL (0x02)
-#define R_TOC (0x03)
-#define R_RTB (0x04)
-#define R_GL (0x05)
-#define R_TCL (0x06)
-#define R_BA (0x08)
-#define R_BR (0x0a)
-#define R_RL (0x0c)
-#define R_RLA (0x0d)
-#define R_REF (0x0f)
-#define R_TRL (0x12)
-#define R_TRLA (0x13)
-#define R_RRTBI (0x14)
-#define R_RRTBA (0x15)
-#define R_CAI (0x16)
-#define R_CREL (0x17)
-#define R_RBA (0x18)
-#define R_RBAC (0x19)
-#define R_RBR (0x1a)
-#define R_RBRC (0x1b)
-#define R_TLS (0x20)
-#define R_TLS_IE (0x21)
-#define R_TLS_LD (0x22)
-#define R_TLS_LE (0x23)
-#define R_TLSM (0x24)
-#define R_TLSML (0x25)
-#define R_TOCU (0x30)
-#define R_TOCL (0x31)
-
-/* Storage class #defines, from /usr/include/storclass.h that are not already
- defined in internal.h */
-
-/* Comment string in .info section */
-#define C_INFO 110
-
-/* Dwarf symbol. */
-#define C_DWARF 112
-
-/* Auxillary Symbol Entries */
-
-/* x_smtyp values: */
-#define SMTYP_ALIGN(x) ((x) >> 3) /* log2 of alignment */
-#define SMTYP_SMTYP(x) ((x) & 0x7) /* symbol type */
-/* Symbol type values: */
-#define XTY_ER 0 /* External reference */
-#define XTY_SD 1 /* Csect definition */
-#define XTY_LD 2 /* Label definition */
-#define XTY_CM 3 /* .BSS */
-#define XTY_EM 4 /* Error message */
-#define XTY_US 5 /* "Reserved for internal use" */
-
-/* x_smclas values: */
-#define XMC_PR 0 /* Read-only program code */
-#define XMC_RO 1 /* Read-only constant */
-#define XMC_DB 2 /* Read-only debug dictionary table */
-#define XMC_TC 3 /* Read-write general TOC entry */
-#define XMC_UA 4 /* Read-write unclassified */
-#define XMC_RW 5 /* Read-write data */
-#define XMC_GL 6 /* Read-only global linkage */
-#define XMC_XO 7 /* Read-only extended operation */
-#define XMC_SV 8 /* Read-only supervisor call */
-#define XMC_BS 9 /* Read-write BSS */
-#define XMC_DS 10 /* Read-write descriptor csect */
-#define XMC_UC 11 /* Read-write unnamed Fortran common */
-#define XMC_TI 12 /* Read-only traceback index csect */
-#define XMC_TB 13 /* Read-only traceback table csect */
-/* 14 ??? */
-#define XMC_TC0 15 /* Read-write TOC anchor */
-#define XMC_TD 16 /* Read-write data in TOC */
-#define XMC_SV64 17 /* Read-only 64 bit supervisor call */
-#define XMC_SV3264 18 /* Read-only 32 or 64 bit supervisor call */
-/* 19 ??? */
-#define XMC_TL 20 /* Read-write initialized TLS data */
-#define XMC_TU 21 /* Read-write uninitialized TLS data */
-#define XMC_TE 22 /* Same as XMC_TC but mapped after it */
-
-/* The ldhdr structure. This appears at the start of the .loader
- section. */
-
-struct internal_ldhdr
-{
- /* The version number:
- 1 : 32 bit
- 2 : 64 bit */
- unsigned long l_version;
-
- /* The number of symbol table entries. */
- bfd_size_type l_nsyms;
-
- /* The number of relocation table entries. */
- bfd_size_type l_nreloc;
-
- /* The length of the import file string table. */
- bfd_size_type l_istlen;
-
- /* The number of import files. */
- bfd_size_type l_nimpid;
-
- /* The offset from the start of the .loader section to the first
- entry in the import file table. */
- bfd_size_type l_impoff;
-
- /* The length of the string table. */
- bfd_size_type l_stlen;
-
- /* The offset from the start of the .loader section to the first
- entry in the string table. */
- bfd_size_type l_stoff;
-
- /* The offset to start of the symbol table, only in XCOFF64 */
- bfd_vma l_symoff;
-
- /* The offset to the start of the relocation table, only in XCOFF64 */
- bfd_vma l_rldoff;
-};
-
-/* The ldsym structure. This is used to represent a symbol in the
- .loader section. */
-
-struct internal_ldsym
-{
- union
- {
- /* The symbol name if <= SYMNMLEN characters. */
- char _l_name[SYMNMLEN];
- struct
- {
- /* Zero if the symbol name is more than SYMNMLEN characters. */
- long _l_zeroes;
-
- /* The offset in the string table if the symbol name is more
- than SYMNMLEN characters. */
- long _l_offset;
- }
- _l_l;
- }
- _l;
-
- /* The symbol value. */
- bfd_vma l_value;
-
- /* The symbol section number. */
- short l_scnum;
-
- /* The symbol type and flags. */
- char l_smtype;
-
- /* The symbol storage class. */
- char l_smclas;
-
- /* The import file ID. */
- bfd_size_type l_ifile;
-
- /* Offset to the parameter type check string. */
- bfd_size_type l_parm;
-};
-
-/* These flags are for the l_smtype field (the lower three bits are an
- XTY_* value). */
-
-/* Imported symbol. */
-#define L_IMPORT (0x40)
-/* Entry point. */
-#define L_ENTRY (0x20)
-/* Exported symbol. */
-#define L_EXPORT (0x10)
-/* Weak symbol. */
-#define L_WEAK (0x08)
-
-/* The ldrel structure. This is used to represent a reloc in the
- .loader section. */
-
-struct internal_ldrel
-{
- /* The reloc address. */
- bfd_vma l_vaddr;
-
- /* The symbol table index in the .loader section symbol table. */
- bfd_size_type l_symndx;
-
- /* The relocation type and size. */
- short l_rtype;
-
- /* The section number this relocation applies to. */
- short l_rsecnm;
-};
-
-/* An entry in the XCOFF linker hash table. */
-struct xcoff_link_hash_entry
-{
- struct bfd_link_hash_entry root;
-
- /* Symbol index in output file. Set to -1 initially. Set to -2 if
- there is a reloc against this symbol. */
- long indx;
-
- /* If we have created a TOC entry for this symbol, this is the .tc
- section which holds it. */
- asection *toc_section;
-
- union
- {
- /* If we have created a TOC entry (the XCOFF_SET_TOC flag is
- set), this is the offset in toc_section. */
- bfd_vma toc_offset;
-
- /* If the TOC entry comes from an input file, this is set to the
- symbol index of the C_HIDEXT XMC_TC or XMC_TD symbol. */
- long toc_indx;
- }
- u;
-
- /* If this symbol is a function entry point which is called, this
- field holds a pointer to the function descriptor. If this symbol
- is a function descriptor, this field holds a pointer to the
- function entry point. */
- struct xcoff_link_hash_entry *descriptor;
-
- /* The .loader symbol table entry, if there is one. */
- struct internal_ldsym *ldsym;
-
- /* If XCOFF_BUILT_LDSYM is set, this is the .loader symbol table
- index. If XCOFF_BUILD_LDSYM is clear, and XCOFF_IMPORT is set,
- this is the l_ifile value. */
- long ldindx;
-
- /* Some linker flags. */
- unsigned long flags;
-
- /* The storage mapping class. */
- unsigned char smclas;
-};
-
-/* Flags for xcoff_link_hash_entry. */
-
-/* Symbol is referenced by a regular object. */
-#define XCOFF_REF_REGULAR 0x00000001
-/* Symbol is defined by a regular object. */
-#define XCOFF_DEF_REGULAR 0x00000002
-/* Symbol is defined by a dynamic object. */
-#define XCOFF_DEF_DYNAMIC 0x00000004
-/* Symbol is used in a reloc being copied into the .loader section. */
-#define XCOFF_LDREL 0x00000008
-/* Symbol is the entry point. */
-#define XCOFF_ENTRY 0x00000010
-/* Symbol is for a function and is the target of a relocation.
- The relocation may or may not be a branch-type relocation. */
-#define XCOFF_CALLED 0x00000020
-/* Symbol needs the TOC entry filled in. */
-#define XCOFF_SET_TOC 0x00000040
-/* Symbol is implicitly or explicitly imported. */
-#define XCOFF_IMPORT 0x00000080
-/* Symbol is explicitly exported. */
-#define XCOFF_EXPORT 0x00000100
-/* Symbol has been processed by xcoff_build_ldsyms. */
-#define XCOFF_BUILT_LDSYM 0x00000200
-/* Symbol is mentioned by a section which was not garbage collected. */
-#define XCOFF_MARK 0x00000400
-/* Symbol size is recorded in size_list list from hash table. */
-#define XCOFF_HAS_SIZE 0x00000800
-/* Symbol is a function descriptor. */
-#define XCOFF_DESCRIPTOR 0x00001000
-/* Multiple definitions have been for the symbol. */
-#define XCOFF_MULTIPLY_DEFINED 0x00002000
-/* Symbol is the __rtinit symbol. */
-#define XCOFF_RTINIT 0x00004000
-/* Symbol is an imported 32 bit syscall. */
-#define XCOFF_SYSCALL32 0x00008000
-/* Symbol is an imported 64 bit syscall. */
-#define XCOFF_SYSCALL64 0x00010000
-/* Symbol was not explicitly defined by the time it was marked. */
-#define XCOFF_WAS_UNDEFINED 0x00020000
-/* We have assigned an output XCOFF entry to this symbol. */
-#define XCOFF_ALLOCATED 0x00040000
-
-/* The XCOFF linker hash table. */
-
-#define XCOFF_NUMBER_OF_SPECIAL_SECTIONS 6
-#define XCOFF_SPECIAL_SECTION_TEXT 0
-#define XCOFF_SPECIAL_SECTION_ETEXT 1
-#define XCOFF_SPECIAL_SECTION_DATA 2
-#define XCOFF_SPECIAL_SECTION_EDATA 3
-#define XCOFF_SPECIAL_SECTION_END 4
-#define XCOFF_SPECIAL_SECTION_END2 5
-
-/* These flags indicate which of -bexpall and -bexpfull are in effect. */
-#define XCOFF_EXPALL 1
-#define XCOFF_EXPFULL 2
-
-/* This structure is used to pass information through
- xcoff_link_hash_traverse. */
-
-struct xcoff_loader_info
-{
- /* Set if a problem occurred. */
- bfd_boolean failed;
-
- /* Output BFD. */
- bfd *output_bfd;
-
- /* Link information structure. */
- struct bfd_link_info *info;
-
- /* A mask of XCOFF_EXPALL and XCOFF_EXPFULL flags. */
- unsigned int auto_export_flags;
-
- /* Number of ldsym structures. */
- size_t ldsym_count;
-
- /* Size of string table. */
- size_t string_size;
-
- /* String table. */
- char *strings;
-
- /* Allocated size of string table. */
- size_t string_alc;
-};
-
-/* In case we're on a 32-bit machine, construct a 64-bit "-1" value
- from smaller values. Start with zero, widen, *then* decrement. */
-#define MINUS_ONE (((bfd_vma) 0) - 1)
-
-/* __rtinit, from /usr/include/rtinit.h. */
-struct __rtinit
-{
- /* Pointer to runtime linker.
- XXX: Is the parameter really void? */
- int (*rtl) (void);
-
- /* Offset to array of init functions, 0 if none. */
- int init_offset;
-
- /* Offset to array of fini functions, 0 if none. */
- int fini_offset;
-
- /* Size of __RTINIT_DESCRIPTOR. This value should be used instead of
- sizeof(__RTINIT_DESCRIPTOR). */
- int __rtinit_descriptor_size;
-};
-
-#define RTINIT_DESCRIPTOR_SIZE (12)
-
-struct __rtinit_descriptor
-{
- /* Init/fini function. */
- int f;
-
- /* Offset, relative to the start of the __rtinit symbol, to name of the
- function. */
-
- int name_offset;
-
- /* Flags */
- unsigned char flags;
-};
-
-/* Archive */
-
-#define XCOFFARMAG "<aiaff>\012"
-#define XCOFFARMAGBIG "<bigaf>\012"
-#define SXCOFFARMAG 8
-
-/* The size of the ascii archive elements */
-#define XCOFFARMAG_ELEMENT_SIZE 12
-#define XCOFFARMAGBIG_ELEMENT_SIZE 20
-
-/* This terminates an XCOFF archive member name. */
-
-#define XCOFFARFMAG "`\012"
-#define SXCOFFARFMAG 2
-
-/* XCOFF archives start with this (printable) structure. */
-
-struct xcoff_ar_file_hdr
-{
- /* Magic string. */
- char magic[SXCOFFARMAG];
-
- /* Offset of the member table (decimal ASCII string). */
- char memoff[XCOFFARMAG_ELEMENT_SIZE];
-
- /* Offset of the global symbol table (decimal ASCII string). */
- char symoff[XCOFFARMAG_ELEMENT_SIZE];
-
- /* Offset of the first member in the archive (decimal ASCII string). */
- char firstmemoff[XCOFFARMAG_ELEMENT_SIZE];
-
- /* Offset of the last member in the archive (decimal ASCII string). */
- char lastmemoff[XCOFFARMAG_ELEMENT_SIZE];
-
- /* Offset of the first member on the free list (decimal ASCII
- string). */
- char freeoff[XCOFFARMAG_ELEMENT_SIZE];
-};
-
-#define SIZEOF_AR_FILE_HDR (SXCOFFARMAG + 5 * XCOFFARMAG_ELEMENT_SIZE)
-
-/* This is the equivalent data structure for the big archive format. */
-
-struct xcoff_ar_file_hdr_big
-{
- /* Magic string. */
- char magic[SXCOFFARMAG];
-
- /* Offset of the member table (decimal ASCII string). */
- char memoff[XCOFFARMAGBIG_ELEMENT_SIZE];
-
- /* Offset of the global symbol table for 32-bit objects (decimal ASCII
- string). */
- char symoff[XCOFFARMAGBIG_ELEMENT_SIZE];
-
- /* Offset of the global symbol table for 64-bit objects (decimal ASCII
- string). */
- char symoff64[XCOFFARMAGBIG_ELEMENT_SIZE];
-
- /* Offset of the first member in the archive (decimal ASCII string). */
- char firstmemoff[XCOFFARMAGBIG_ELEMENT_SIZE];
-
- /* Offset of the last member in the archive (decimal ASCII string). */
- char lastmemoff[XCOFFARMAGBIG_ELEMENT_SIZE];
-
- /* Offset of the first member on the free list (decimal ASCII
- string). */
- char freeoff[XCOFFARMAGBIG_ELEMENT_SIZE];
-};
-
-#define SIZEOF_AR_FILE_HDR_BIG (SXCOFFARMAG + 6 * XCOFFARMAGBIG_ELEMENT_SIZE)
-
-/* Each XCOFF archive member starts with this (printable) structure. */
-
-struct xcoff_ar_hdr
-{
- /* File size not including the header (decimal ASCII string). */
- char size[XCOFFARMAG_ELEMENT_SIZE];
-
- /* File offset of next archive member (decimal ASCII string). */
- char nextoff[XCOFFARMAG_ELEMENT_SIZE];
-
- /* File offset of previous archive member (decimal ASCII string). */
- char prevoff[XCOFFARMAG_ELEMENT_SIZE];
-
- /* File mtime (decimal ASCII string). */
- char date[12];
-
- /* File UID (decimal ASCII string). */
- char uid[12];
-
- /* File GID (decimal ASCII string). */
- char gid[12];
-
- /* File mode (octal ASCII string). */
- char mode[12];
-
- /* Length of file name (decimal ASCII string). */
- char namlen[4];
-
- /* This structure is followed by the file name. The length of the
- name is given in the namlen field. If the length of the name is
- odd, the name is followed by a null byte. The name and optional
- null byte are followed by XCOFFARFMAG, which is not included in
- namlen. The contents of the archive member follow; the number of
- bytes is given in the size field. */
-};
-
-#define SIZEOF_AR_HDR (3 * XCOFFARMAG_ELEMENT_SIZE + 4 * 12 + 4)
-
-/* The equivalent for the big archive format. */
-
-struct xcoff_ar_hdr_big
-{
- /* File size not including the header (decimal ASCII string). */
- char size[XCOFFARMAGBIG_ELEMENT_SIZE];
-
- /* File offset of next archive member (decimal ASCII string). */
- char nextoff[XCOFFARMAGBIG_ELEMENT_SIZE];
-
- /* File offset of previous archive member (decimal ASCII string). */
- char prevoff[XCOFFARMAGBIG_ELEMENT_SIZE];
-
- /* File mtime (decimal ASCII string). */
- char date[12];
-
- /* File UID (decimal ASCII string). */
- char uid[12];
-
- /* File GID (decimal ASCII string). */
- char gid[12];
-
- /* File mode (octal ASCII string). */
- char mode[12];
-
- /* Length of file name (decimal ASCII string). */
- char namlen[4];
-
- /* This structure is followed by the file name. The length of the
- name is given in the namlen field. If the length of the name is
- odd, the name is followed by a null byte. The name and optional
- null byte are followed by XCOFFARFMAG, which is not included in
- namlen. The contents of the archive member follow; the number of
- bytes is given in the size field. */
-};
-
-#define SIZEOF_AR_HDR_BIG (3 * XCOFFARMAGBIG_ELEMENT_SIZE + 4 * 12 + 4)
-
-/* We often have to distinguish between the old and big file format.
- Make it a bit cleaner. We can use `xcoff_ardata' here because the
- `hdr' member has the same size and position in both formats.
- <bigaf> is the default format, return TRUE even when xcoff_ardata is
- NULL. */
-#ifndef SMALL_ARCHIVE
-/* Creates big archives by default */
-#define xcoff_big_format_p(abfd) \
- ((NULL != bfd_ardata (abfd) && NULL == xcoff_ardata (abfd)) || \
- ((NULL != bfd_ardata (abfd)) && \
- (NULL != xcoff_ardata (abfd)) && \
- (xcoff_ardata (abfd)->magic[1] == 'b')))
-#else
-/* Creates small archives by default. */
-#define xcoff_big_format_p(abfd) \
- (((NULL != bfd_ardata (abfd)) && \
- (NULL != xcoff_ardata (abfd)) && \
- (xcoff_ardata (abfd)->magic[1] == 'b')))
-#endif
-
-/* We store a copy of the xcoff_ar_file_hdr in the tdata field of the
- artdata structure. Similar for the big archive. */
-#define xcoff_ardata(abfd) \
- ((struct xcoff_ar_file_hdr *) bfd_ardata (abfd)->tdata)
-#define xcoff_ardata_big(abfd) \
- ((struct xcoff_ar_file_hdr_big *) bfd_ardata (abfd)->tdata)
-
-/* We store a copy of the xcoff_ar_hdr in the arelt_data field of an
- archive element. Similar for the big archive. */
-#define arch_eltdata(bfd) ((struct areltdata *) ((bfd)->arelt_data))
-#define arch_xhdr(bfd) \
- ((struct xcoff_ar_hdr *) arch_eltdata (bfd)->arch_header)
-#define arch_xhdr_big(bfd) \
- ((struct xcoff_ar_hdr_big *) arch_eltdata (bfd)->arch_header)
-
-/* True if symbols of class CLASS are external. */
-#define EXTERN_SYM_P(CLASS) \
- ((CLASS) == C_EXT || (CLASS) == C_AIX_WEAKEXT)
-
-#endif /* _INTERNAL_XCOFF_H */
diff --git a/include/coff/z80.h b/include/coff/z80.h
deleted file mode 100644
index 712af0541..000000000
--- a/include/coff/z80.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/* coff information for Zilog Z80
- Copyright 2005, 2010 Free Software Foundation, Inc.
- Contributed by Arnold Metselaar <arnold_m@operamail.com>
-
- 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 3 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. */
-
-#define L_LNNO_SIZE 4
-#include "coff/external.h"
-
-/* z80 backend does not use dots in section names. */
-#undef _TEXT
-#define _TEXT "text"
-#undef _DATA
-#define _DATA "data"
-#undef _BSS
-#define _BSS "bss"
-
-/* Type of cpu is stored in flags. */
-#define F_MACHMASK 0xF000
-
-/* Z80 COFF encodes the section alignment in the section header flags */
-#define COFF_ALIGN_IN_SECTION_HEADER 1
-#define COFF_ALIGN_IN_S_FLAGS 1
-#define F_ALGNMASK 0x0F00
-/* requires a power-of-two argument */
-#define COFF_ENCODE_ALIGNMENT(S,X) ((S).s_flags |= (((unsigned)(X)&0xF)<<8))
-/* result is a power of two */
-#define COFF_DECODE_ALIGNMENT(X) (((X)>>8)&0xF)
-
-#define Z80MAGIC 0x805A
-
-#define Z80BADMAG(x) (((x).f_magic != Z80MAGIC))
-
-/* Relocation directives. */
-
-/* This format actually has more bits than we need. */
-
-struct external_reloc
-{
- char r_vaddr[4];
- char r_symndx[4];
- char r_offset[4];
- char r_type[2];
- char r_stuff[2];
-};
-
-#define RELOC struct external_reloc
-#define RELSZ 16
diff --git a/include/coff/z8k.h b/include/coff/z8k.h
deleted file mode 100644
index 5eef86d4f..000000000
--- a/include/coff/z8k.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/* coff information for Zilog Z800N
-
- Copyright 2001, 2010 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#define L_LNNO_SIZE 4
-#include "coff/external.h"
-
-/* Type of cpu is stored in flags */
-#define F_Z8001 0x1000
-#define F_Z8002 0x2000
-#define F_MACHMASK 0xf000
-
-#define Z8KMAGIC 0x8000
-
-#define Z8KBADMAG(x) (((x).f_magic != Z8KMAGIC))
-
-/********************** RELOCATION DIRECTIVES **********************/
-
-/* The external reloc has an offset field, because some of the reloc
- types on the z8k don't have room in the instruction for the entire
- offset - eg with segments. */
-
-struct external_reloc
-{
- char r_vaddr[4];
- char r_symndx[4];
- char r_offset[4];
- char r_type[2];
- char r_stuff[2];
-};
-
-#define RELOC struct external_reloc
-#define RELSZ 16
-
diff --git a/include/demangle.h b/include/demangle.h
deleted file mode 100644
index d2a6731a9..000000000
--- a/include/demangle.h
+++ /dev/null
@@ -1,686 +0,0 @@
-/* Defs for interface to demanglers.
- Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2001, 2002,
- 2003, 2004, 2005, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License
- as published by the Free Software Foundation; either version 2, or
- (at your option) any later version.
-
- In addition to the permissions in the GNU Library General Public
- License, the Free Software Foundation gives you unlimited
- permission to link the compiled version of this file into
- combinations with other programs, and to distribute those
- combinations without any restriction coming from the use of this
- file. (The Library Public License restrictions do apply in other
- respects; for example, they cover modification of the file, and
- distribution when not linked into a combined executable.)
-
- 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
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
- 02110-1301, USA. */
-
-
-#if !defined (DEMANGLE_H)
-#define DEMANGLE_H
-
-#include "libiberty.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-/* Options passed to cplus_demangle (in 2nd parameter). */
-
-#define DMGL_NO_OPTS 0 /* For readability... */
-#define DMGL_PARAMS (1 << 0) /* Include function args */
-#define DMGL_ANSI (1 << 1) /* Include const, volatile, etc */
-#define DMGL_JAVA (1 << 2) /* Demangle as Java rather than C++. */
-#define DMGL_VERBOSE (1 << 3) /* Include implementation details. */
-#define DMGL_TYPES (1 << 4) /* Also try to demangle type encodings. */
-#define DMGL_RET_POSTFIX (1 << 5) /* Print function return types (when
- present) after function signature.
- It applies only to the toplevel
- function type. */
-#define DMGL_RET_DROP (1 << 6) /* Suppress printing function return
- types, even if present. It applies
- only to the toplevel function type.
- */
-
-#define DMGL_AUTO (1 << 8)
-#define DMGL_GNU (1 << 9)
-#define DMGL_LUCID (1 << 10)
-#define DMGL_ARM (1 << 11)
-#define DMGL_HP (1 << 12) /* For the HP aCC compiler;
- same as ARM except for
- template arguments, etc. */
-#define DMGL_EDG (1 << 13)
-#define DMGL_GNU_V3 (1 << 14)
-#define DMGL_GNAT (1 << 15)
-#define DMGL_DLANG (1 << 16)
-
-/* If none of these are set, use 'current_demangling_style' as the default. */
-#define DMGL_STYLE_MASK (DMGL_AUTO|DMGL_GNU|DMGL_LUCID|DMGL_ARM|DMGL_HP|DMGL_EDG|DMGL_GNU_V3|DMGL_JAVA|DMGL_GNAT|DMGL_DLANG)
-
-/* Enumeration of possible demangling styles.
-
- Lucid and ARM styles are still kept logically distinct, even though
- they now both behave identically. The resulting style is actual the
- union of both. I.E. either style recognizes both "__pt__" and "__rf__"
- for operator "->", even though the first is lucid style and the second
- is ARM style. (FIXME?) */
-
-extern enum demangling_styles
-{
- no_demangling = -1,
- unknown_demangling = 0,
- auto_demangling = DMGL_AUTO,
- gnu_demangling = DMGL_GNU,
- lucid_demangling = DMGL_LUCID,
- arm_demangling = DMGL_ARM,
- hp_demangling = DMGL_HP,
- edg_demangling = DMGL_EDG,
- gnu_v3_demangling = DMGL_GNU_V3,
- java_demangling = DMGL_JAVA,
- gnat_demangling = DMGL_GNAT,
- dlang_demangling = DMGL_DLANG
-} current_demangling_style;
-
-/* Define string names for the various demangling styles. */
-
-#define NO_DEMANGLING_STYLE_STRING "none"
-#define AUTO_DEMANGLING_STYLE_STRING "auto"
-#define GNU_DEMANGLING_STYLE_STRING "gnu"
-#define LUCID_DEMANGLING_STYLE_STRING "lucid"
-#define ARM_DEMANGLING_STYLE_STRING "arm"
-#define HP_DEMANGLING_STYLE_STRING "hp"
-#define EDG_DEMANGLING_STYLE_STRING "edg"
-#define GNU_V3_DEMANGLING_STYLE_STRING "gnu-v3"
-#define JAVA_DEMANGLING_STYLE_STRING "java"
-#define GNAT_DEMANGLING_STYLE_STRING "gnat"
-#define DLANG_DEMANGLING_STYLE_STRING "dlang"
-
-/* Some macros to test what demangling style is active. */
-
-#define CURRENT_DEMANGLING_STYLE current_demangling_style
-#define AUTO_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_AUTO)
-#define GNU_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_GNU)
-#define LUCID_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_LUCID)
-#define ARM_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_ARM)
-#define HP_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_HP)
-#define EDG_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_EDG)
-#define GNU_V3_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_GNU_V3)
-#define JAVA_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_JAVA)
-#define GNAT_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_GNAT)
-#define DLANG_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_DLANG)
-
-/* Provide information about the available demangle styles. This code is
- pulled from gdb into libiberty because it is useful to binutils also. */
-
-extern const struct demangler_engine
-{
- const char *const demangling_style_name;
- const enum demangling_styles demangling_style;
- const char *const demangling_style_doc;
-} libiberty_demanglers[];
-
-extern char *
-cplus_demangle (const char *mangled, int options);
-
-extern int
-cplus_demangle_opname (const char *opname, char *result, int options);
-
-extern const char *
-cplus_mangle_opname (const char *opname, int options);
-
-/* Note: This sets global state. FIXME if you care about multi-threading. */
-
-extern void
-set_cplus_marker_for_demangling (int ch);
-
-extern enum demangling_styles
-cplus_demangle_set_style (enum demangling_styles style);
-
-extern enum demangling_styles
-cplus_demangle_name_to_style (const char *name);
-
-/* Callback typedef for allocation-less demangler interfaces. */
-typedef void (*demangle_callbackref) (const char *, size_t, void *);
-
-/* V3 ABI demangling entry points, defined in cp-demangle.c. Callback
- variants return non-zero on success, zero on error. char* variants
- return a string allocated by malloc on success, NULL on error. */
-extern int
-cplus_demangle_v3_callback (const char *mangled, int options,
- demangle_callbackref callback, void *opaque);
-
-extern char*
-cplus_demangle_v3 (const char *mangled, int options);
-
-extern int
-java_demangle_v3_callback (const char *mangled,
- demangle_callbackref callback, void *opaque);
-
-extern char*
-java_demangle_v3 (const char *mangled);
-
-char *
-ada_demangle (const char *mangled, int options);
-
-extern char *
-dlang_demangle (const char *mangled, int options);
-
-enum gnu_v3_ctor_kinds {
- gnu_v3_complete_object_ctor = 1,
- gnu_v3_base_object_ctor,
- gnu_v3_complete_object_allocating_ctor,
- /* These are not part of the V3 ABI. Unified constructors are generated
- as a speed-for-space optimization when the -fdeclone-ctor-dtor option
- is used, and are always internal symbols. */
- gnu_v3_unified_ctor,
- gnu_v3_object_ctor_group
-};
-
-/* Return non-zero iff NAME is the mangled form of a constructor name
- in the G++ V3 ABI demangling style. Specifically, return an `enum
- gnu_v3_ctor_kinds' value indicating what kind of constructor
- it is. */
-extern enum gnu_v3_ctor_kinds
- is_gnu_v3_mangled_ctor (const char *name);
-
-
-enum gnu_v3_dtor_kinds {
- gnu_v3_deleting_dtor = 1,
- gnu_v3_complete_object_dtor,
- gnu_v3_base_object_dtor,
- /* These are not part of the V3 ABI. Unified destructors are generated
- as a speed-for-space optimization when the -fdeclone-ctor-dtor option
- is used, and are always internal symbols. */
- gnu_v3_unified_dtor,
- gnu_v3_object_dtor_group
-};
-
-/* Return non-zero iff NAME is the mangled form of a destructor name
- in the G++ V3 ABI demangling style. Specifically, return an `enum
- gnu_v3_dtor_kinds' value, indicating what kind of destructor
- it is. */
-extern enum gnu_v3_dtor_kinds
- is_gnu_v3_mangled_dtor (const char *name);
-
-/* The V3 demangler works in two passes. The first pass builds a tree
- representation of the mangled name, and the second pass turns the
- tree representation into a demangled string. Here we define an
- interface to permit a caller to build their own tree
- representation, which they can pass to the demangler to get a
- demangled string. This can be used to canonicalize user input into
- something which the demangler might output. It could also be used
- by other demanglers in the future. */
-
-/* These are the component types which may be found in the tree. Many
- component types have one or two subtrees, referred to as left and
- right (a component type with only one subtree puts it in the left
- subtree). */
-
-enum demangle_component_type
-{
- /* A name, with a length and a pointer to a string. */
- DEMANGLE_COMPONENT_NAME,
- /* A qualified name. The left subtree is a class or namespace or
- some such thing, and the right subtree is a name qualified by
- that class. */
- DEMANGLE_COMPONENT_QUAL_NAME,
- /* A local name. The left subtree describes a function, and the
- right subtree is a name which is local to that function. */
- DEMANGLE_COMPONENT_LOCAL_NAME,
- /* A typed name. The left subtree is a name, and the right subtree
- describes that name as a function. */
- DEMANGLE_COMPONENT_TYPED_NAME,
- /* A template. The left subtree is a template name, and the right
- subtree is a template argument list. */
- DEMANGLE_COMPONENT_TEMPLATE,
- /* A template parameter. This holds a number, which is the template
- parameter index. */
- DEMANGLE_COMPONENT_TEMPLATE_PARAM,
- /* A function parameter. This holds a number, which is the index. */
- DEMANGLE_COMPONENT_FUNCTION_PARAM,
- /* A constructor. This holds a name and the kind of
- constructor. */
- DEMANGLE_COMPONENT_CTOR,
- /* A destructor. This holds a name and the kind of destructor. */
- DEMANGLE_COMPONENT_DTOR,
- /* A vtable. This has one subtree, the type for which this is a
- vtable. */
- DEMANGLE_COMPONENT_VTABLE,
- /* A VTT structure. This has one subtree, the type for which this
- is a VTT. */
- DEMANGLE_COMPONENT_VTT,
- /* A construction vtable. The left subtree is the type for which
- this is a vtable, and the right subtree is the derived type for
- which this vtable is built. */
- DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE,
- /* A typeinfo structure. This has one subtree, the type for which
- this is the tpeinfo structure. */
- DEMANGLE_COMPONENT_TYPEINFO,
- /* A typeinfo name. This has one subtree, the type for which this
- is the typeinfo name. */
- DEMANGLE_COMPONENT_TYPEINFO_NAME,
- /* A typeinfo function. This has one subtree, the type for which
- this is the tpyeinfo function. */
- DEMANGLE_COMPONENT_TYPEINFO_FN,
- /* A thunk. This has one subtree, the name for which this is a
- thunk. */
- DEMANGLE_COMPONENT_THUNK,
- /* A virtual thunk. This has one subtree, the name for which this
- is a virtual thunk. */
- DEMANGLE_COMPONENT_VIRTUAL_THUNK,
- /* A covariant thunk. This has one subtree, the name for which this
- is a covariant thunk. */
- DEMANGLE_COMPONENT_COVARIANT_THUNK,
- /* A Java class. This has one subtree, the type. */
- DEMANGLE_COMPONENT_JAVA_CLASS,
- /* A guard variable. This has one subtree, the name for which this
- is a guard variable. */
- DEMANGLE_COMPONENT_GUARD,
- /* The init and wrapper functions for C++11 thread_local variables. */
- DEMANGLE_COMPONENT_TLS_INIT,
- DEMANGLE_COMPONENT_TLS_WRAPPER,
- /* A reference temporary. This has one subtree, the name for which
- this is a temporary. */
- DEMANGLE_COMPONENT_REFTEMP,
- /* A hidden alias. This has one subtree, the encoding for which it
- is providing alternative linkage. */
- DEMANGLE_COMPONENT_HIDDEN_ALIAS,
- /* A standard substitution. This holds the name of the
- substitution. */
- DEMANGLE_COMPONENT_SUB_STD,
- /* The restrict qualifier. The one subtree is the type which is
- being qualified. */
- DEMANGLE_COMPONENT_RESTRICT,
- /* The volatile qualifier. The one subtree is the type which is
- being qualified. */
- DEMANGLE_COMPONENT_VOLATILE,
- /* The const qualifier. The one subtree is the type which is being
- qualified. */
- DEMANGLE_COMPONENT_CONST,
- /* The restrict qualifier modifying a member function. The one
- subtree is the type which is being qualified. */
- DEMANGLE_COMPONENT_RESTRICT_THIS,
- /* The volatile qualifier modifying a member function. The one
- subtree is the type which is being qualified. */
- DEMANGLE_COMPONENT_VOLATILE_THIS,
- /* The const qualifier modifying a member function. The one subtree
- is the type which is being qualified. */
- DEMANGLE_COMPONENT_CONST_THIS,
- /* C++11 A reference modifying a member function. The one subtree is the
- type which is being referenced. */
- DEMANGLE_COMPONENT_REFERENCE_THIS,
- /* C++11: An rvalue reference modifying a member function. The one
- subtree is the type which is being referenced. */
- DEMANGLE_COMPONENT_RVALUE_REFERENCE_THIS,
- /* A vendor qualifier. The left subtree is the type which is being
- qualified, and the right subtree is the name of the
- qualifier. */
- DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL,
- /* A pointer. The one subtree is the type which is being pointed
- to. */
- DEMANGLE_COMPONENT_POINTER,
- /* A reference. The one subtree is the type which is being
- referenced. */
- DEMANGLE_COMPONENT_REFERENCE,
- /* C++0x: An rvalue reference. The one subtree is the type which is
- being referenced. */
- DEMANGLE_COMPONENT_RVALUE_REFERENCE,
- /* A complex type. The one subtree is the base type. */
- DEMANGLE_COMPONENT_COMPLEX,
- /* An imaginary type. The one subtree is the base type. */
- DEMANGLE_COMPONENT_IMAGINARY,
- /* A builtin type. This holds the builtin type information. */
- DEMANGLE_COMPONENT_BUILTIN_TYPE,
- /* A vendor's builtin type. This holds the name of the type. */
- DEMANGLE_COMPONENT_VENDOR_TYPE,
- /* A function type. The left subtree is the return type. The right
- subtree is a list of ARGLIST nodes. Either or both may be
- NULL. */
- DEMANGLE_COMPONENT_FUNCTION_TYPE,
- /* An array type. The left subtree is the dimension, which may be
- NULL, or a string (represented as DEMANGLE_COMPONENT_NAME), or an
- expression. The right subtree is the element type. */
- DEMANGLE_COMPONENT_ARRAY_TYPE,
- /* A pointer to member type. The left subtree is the class type,
- and the right subtree is the member type. CV-qualifiers appear
- on the latter. */
- DEMANGLE_COMPONENT_PTRMEM_TYPE,
- /* A fixed-point type. */
- DEMANGLE_COMPONENT_FIXED_TYPE,
- /* A vector type. The left subtree is the number of elements,
- the right subtree is the element type. */
- DEMANGLE_COMPONENT_VECTOR_TYPE,
- /* An argument list. The left subtree is the current argument, and
- the right subtree is either NULL or another ARGLIST node. */
- DEMANGLE_COMPONENT_ARGLIST,
- /* A template argument list. The left subtree is the current
- template argument, and the right subtree is either NULL or
- another TEMPLATE_ARGLIST node. */
- DEMANGLE_COMPONENT_TEMPLATE_ARGLIST,
- /* An initializer list. The left subtree is either an explicit type or
- NULL, and the right subtree is a DEMANGLE_COMPONENT_ARGLIST. */
- DEMANGLE_COMPONENT_INITIALIZER_LIST,
- /* An operator. This holds information about a standard
- operator. */
- DEMANGLE_COMPONENT_OPERATOR,
- /* An extended operator. This holds the number of arguments, and
- the name of the extended operator. */
- DEMANGLE_COMPONENT_EXTENDED_OPERATOR,
- /* A typecast, represented as a unary operator. The one subtree is
- the type to which the argument should be cast. */
- DEMANGLE_COMPONENT_CAST,
- /* A nullary expression. The left subtree is the operator. */
- DEMANGLE_COMPONENT_NULLARY,
- /* A unary expression. The left subtree is the operator, and the
- right subtree is the single argument. */
- DEMANGLE_COMPONENT_UNARY,
- /* A binary expression. The left subtree is the operator, and the
- right subtree is a BINARY_ARGS. */
- DEMANGLE_COMPONENT_BINARY,
- /* Arguments to a binary expression. The left subtree is the first
- argument, and the right subtree is the second argument. */
- DEMANGLE_COMPONENT_BINARY_ARGS,
- /* A trinary expression. The left subtree is the operator, and the
- right subtree is a TRINARY_ARG1. */
- DEMANGLE_COMPONENT_TRINARY,
- /* Arguments to a trinary expression. The left subtree is the first
- argument, and the right subtree is a TRINARY_ARG2. */
- DEMANGLE_COMPONENT_TRINARY_ARG1,
- /* More arguments to a trinary expression. The left subtree is the
- second argument, and the right subtree is the third argument. */
- DEMANGLE_COMPONENT_TRINARY_ARG2,
- /* A literal. The left subtree is the type, and the right subtree
- is the value, represented as a DEMANGLE_COMPONENT_NAME. */
- DEMANGLE_COMPONENT_LITERAL,
- /* A negative literal. Like LITERAL, but the value is negated.
- This is a minor hack: the NAME used for LITERAL points directly
- to the mangled string, but since negative numbers are mangled
- using 'n' instead of '-', we want a way to indicate a negative
- number which involves neither modifying the mangled string nor
- allocating a new copy of the literal in memory. */
- DEMANGLE_COMPONENT_LITERAL_NEG,
- /* A libgcj compiled resource. The left subtree is the name of the
- resource. */
- DEMANGLE_COMPONENT_JAVA_RESOURCE,
- /* A name formed by the concatenation of two parts. The left
- subtree is the first part and the right subtree the second. */
- DEMANGLE_COMPONENT_COMPOUND_NAME,
- /* A name formed by a single character. */
- DEMANGLE_COMPONENT_CHARACTER,
- /* A number. */
- DEMANGLE_COMPONENT_NUMBER,
- /* A decltype type. */
- DEMANGLE_COMPONENT_DECLTYPE,
- /* Global constructors keyed to name. */
- DEMANGLE_COMPONENT_GLOBAL_CONSTRUCTORS,
- /* Global destructors keyed to name. */
- DEMANGLE_COMPONENT_GLOBAL_DESTRUCTORS,
- /* A lambda closure type. */
- DEMANGLE_COMPONENT_LAMBDA,
- /* A default argument scope. */
- DEMANGLE_COMPONENT_DEFAULT_ARG,
- /* An unnamed type. */
- DEMANGLE_COMPONENT_UNNAMED_TYPE,
- /* A transactional clone. This has one subtree, the encoding for
- which it is providing alternative linkage. */
- DEMANGLE_COMPONENT_TRANSACTION_CLONE,
- /* A non-transactional clone entry point. In the i386/x86_64 abi,
- the unmangled symbol of a tm_callable becomes a thunk and the
- non-transactional function version is mangled thus. */
- DEMANGLE_COMPONENT_NONTRANSACTION_CLONE,
- /* A pack expansion. */
- DEMANGLE_COMPONENT_PACK_EXPANSION,
- /* A name with an ABI tag. */
- DEMANGLE_COMPONENT_TAGGED_NAME,
- /* A cloned function. */
- DEMANGLE_COMPONENT_CLONE
-};
-
-/* Types which are only used internally. */
-
-struct demangle_operator_info;
-struct demangle_builtin_type_info;
-
-/* A node in the tree representation is an instance of a struct
- demangle_component. Note that the field names of the struct are
- not well protected against macros defined by the file including
- this one. We can fix this if it ever becomes a problem. */
-
-struct demangle_component
-{
- /* The type of this component. */
- enum demangle_component_type type;
-
- union
- {
- /* For DEMANGLE_COMPONENT_NAME. */
- struct
- {
- /* A pointer to the name (which need not NULL terminated) and
- its length. */
- const char *s;
- int len;
- } s_name;
-
- /* For DEMANGLE_COMPONENT_OPERATOR. */
- struct
- {
- /* Operator. */
- const struct demangle_operator_info *op;
- } s_operator;
-
- /* For DEMANGLE_COMPONENT_EXTENDED_OPERATOR. */
- struct
- {
- /* Number of arguments. */
- int args;
- /* Name. */
- struct demangle_component *name;
- } s_extended_operator;
-
- /* For DEMANGLE_COMPONENT_FIXED_TYPE. */
- struct
- {
- /* The length, indicated by a C integer type name. */
- struct demangle_component *length;
- /* _Accum or _Fract? */
- short accum;
- /* Saturating or not? */
- short sat;
- } s_fixed;
-
- /* For DEMANGLE_COMPONENT_CTOR. */
- struct
- {
- /* Kind of constructor. */
- enum gnu_v3_ctor_kinds kind;
- /* Name. */
- struct demangle_component *name;
- } s_ctor;
-
- /* For DEMANGLE_COMPONENT_DTOR. */
- struct
- {
- /* Kind of destructor. */
- enum gnu_v3_dtor_kinds kind;
- /* Name. */
- struct demangle_component *name;
- } s_dtor;
-
- /* For DEMANGLE_COMPONENT_BUILTIN_TYPE. */
- struct
- {
- /* Builtin type. */
- const struct demangle_builtin_type_info *type;
- } s_builtin;
-
- /* For DEMANGLE_COMPONENT_SUB_STD. */
- struct
- {
- /* Standard substitution string. */
- const char* string;
- /* Length of string. */
- int len;
- } s_string;
-
- /* For DEMANGLE_COMPONENT_*_PARAM. */
- struct
- {
- /* Parameter index. */
- long number;
- } s_number;
-
- /* For DEMANGLE_COMPONENT_CHARACTER. */
- struct
- {
- int character;
- } s_character;
-
- /* For other types. */
- struct
- {
- /* Left (or only) subtree. */
- struct demangle_component *left;
- /* Right subtree. */
- struct demangle_component *right;
- } s_binary;
-
- struct
- {
- /* subtree, same place as d_left. */
- struct demangle_component *sub;
- /* integer. */
- int num;
- } s_unary_num;
-
- } u;
-};
-
-/* People building mangled trees are expected to allocate instances of
- struct demangle_component themselves. They can then call one of
- the following functions to fill them in. */
-
-/* Fill in most component types with a left subtree and a right
- subtree. Returns non-zero on success, zero on failure, such as an
- unrecognized or inappropriate component type. */
-
-extern int
-cplus_demangle_fill_component (struct demangle_component *fill,
- enum demangle_component_type,
- struct demangle_component *left,
- struct demangle_component *right);
-
-/* Fill in a DEMANGLE_COMPONENT_NAME. Returns non-zero on success,
- zero for bad arguments. */
-
-extern int
-cplus_demangle_fill_name (struct demangle_component *fill,
- const char *, int);
-
-/* Fill in a DEMANGLE_COMPONENT_BUILTIN_TYPE, using the name of the
- builtin type (e.g., "int", etc.). Returns non-zero on success,
- zero if the type is not recognized. */
-
-extern int
-cplus_demangle_fill_builtin_type (struct demangle_component *fill,
- const char *type_name);
-
-/* Fill in a DEMANGLE_COMPONENT_OPERATOR, using the name of the
- operator and the number of arguments which it takes (the latter is
- used to disambiguate operators which can be both binary and unary,
- such as '-'). Returns non-zero on success, zero if the operator is
- not recognized. */
-
-extern int
-cplus_demangle_fill_operator (struct demangle_component *fill,
- const char *opname, int args);
-
-/* Fill in a DEMANGLE_COMPONENT_EXTENDED_OPERATOR, providing the
- number of arguments and the name. Returns non-zero on success,
- zero for bad arguments. */
-
-extern int
-cplus_demangle_fill_extended_operator (struct demangle_component *fill,
- int numargs,
- struct demangle_component *nm);
-
-/* Fill in a DEMANGLE_COMPONENT_CTOR. Returns non-zero on success,
- zero for bad arguments. */
-
-extern int
-cplus_demangle_fill_ctor (struct demangle_component *fill,
- enum gnu_v3_ctor_kinds kind,
- struct demangle_component *name);
-
-/* Fill in a DEMANGLE_COMPONENT_DTOR. Returns non-zero on success,
- zero for bad arguments. */
-
-extern int
-cplus_demangle_fill_dtor (struct demangle_component *fill,
- enum gnu_v3_dtor_kinds kind,
- struct demangle_component *name);
-
-/* This function translates a mangled name into a struct
- demangle_component tree. The first argument is the mangled name.
- The second argument is DMGL_* options. This returns a pointer to a
- tree on success, or NULL on failure. On success, the third
- argument is set to a block of memory allocated by malloc. This
- block should be passed to free when the tree is no longer
- needed. */
-
-extern struct demangle_component *
-cplus_demangle_v3_components (const char *mangled, int options, void **mem);
-
-/* This function takes a struct demangle_component tree and returns
- the corresponding demangled string. The first argument is DMGL_*
- options. The second is the tree to demangle. The third is a guess
- at the length of the demangled string, used to initially allocate
- the return buffer. The fourth is a pointer to a size_t. On
- success, this function returns a buffer allocated by malloc(), and
- sets the size_t pointed to by the fourth argument to the size of
- the allocated buffer (not the length of the returned string). On
- failure, this function returns NULL, and sets the size_t pointed to
- by the fourth argument to 0 for an invalid tree, or to 1 for a
- memory allocation error. */
-
-extern char *
-cplus_demangle_print (int options,
- const struct demangle_component *tree,
- int estimated_length,
- size_t *p_allocated_size);
-
-/* This function takes a struct demangle_component tree and passes back
- a demangled string in one or more calls to a callback function.
- The first argument is DMGL_* options. The second is the tree to
- demangle. The third is a pointer to a callback function; on each call
- this receives an element of the demangled string, its length, and an
- opaque value. The fourth is the opaque value passed to the callback.
- The callback is called once or more to return the full demangled
- string. The demangled element string is always nul-terminated, though
- its length is also provided for convenience. In contrast to
- cplus_demangle_print(), this function does not allocate heap memory
- to grow output strings (except perhaps where alloca() is implemented
- by malloc()), and so is normally safe for use where the heap has been
- corrupted. On success, this function returns 1; on failure, 0. */
-
-extern int
-cplus_demangle_print_callback (int options,
- const struct demangle_component *tree,
- demangle_callbackref callback, void *opaque);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* DEMANGLE_H */
diff --git a/include/dis-asm.h b/include/dis-asm.h
deleted file mode 100644
index 78e9fc01a..000000000
--- a/include/dis-asm.h
+++ /dev/null
@@ -1,382 +0,0 @@
-/* Interface between the opcode library and its callers.
-
- Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009, 2010,
- 2011, 2012 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 3, 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., 51 Franklin Street - Fifth Floor,
- Boston, MA 02110-1301, USA.
-
- Written by Cygnus Support, 1993.
-
- The opcode library (libopcodes.a) provides instruction decoders for
- a large variety of instruction sets, callable with an identical
- interface, for making instruction-processing programs more independent
- of the instruction set being processed. */
-
-#ifndef DIS_ASM_H
-#define DIS_ASM_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <stdio.h>
-#include "bfd.h"
-
- typedef int (*fprintf_ftype) (void *, const char*, ...) ATTRIBUTE_FPTR_PRINTF_2;
-
-enum dis_insn_type
-{
- dis_noninsn, /* Not a valid instruction. */
- dis_nonbranch, /* Not a branch instruction. */
- dis_branch, /* Unconditional branch. */
- dis_condbranch, /* Conditional branch. */
- dis_jsr, /* Jump to subroutine. */
- dis_condjsr, /* Conditional jump to subroutine. */
- dis_dref, /* Data reference instruction. */
- dis_dref2 /* Two data references in instruction. */
-};
-
-/* This struct is passed into the instruction decoding routine,
- and is passed back out into each callback. The various fields are used
- for conveying information from your main routine into your callbacks,
- for passing information into the instruction decoders (such as the
- addresses of the callback functions), or for passing information
- back from the instruction decoders to their callers.
-
- It must be initialized before it is first passed; this can be done
- by hand, or using one of the initialization macros below. */
-
-typedef struct disassemble_info
-{
- fprintf_ftype fprintf_func;
- void *stream;
- void *application_data;
-
- /* Target description. We could replace this with a pointer to the bfd,
- but that would require one. There currently isn't any such requirement
- so to avoid introducing one we record these explicitly. */
- /* The bfd_flavour. This can be bfd_target_unknown_flavour. */
- enum bfd_flavour flavour;
- /* The bfd_arch value. */
- enum bfd_architecture arch;
- /* The bfd_mach value. */
- unsigned long mach;
- /* Endianness (for bi-endian cpus). Mono-endian cpus can ignore this. */
- enum bfd_endian endian;
- /* Endianness of code, for mixed-endian situations such as ARM BE8. */
- enum bfd_endian endian_code;
- /* An arch/mach-specific bitmask of selected instruction subsets, mainly
- for processors with run-time-switchable instruction sets. The default,
- zero, means that there is no constraint. CGEN-based opcodes ports
- may use ISA_foo masks. */
- void *insn_sets;
-
- /* Some targets need information about the current section to accurately
- display insns. If this is NULL, the target disassembler function
- will have to make its best guess. */
- asection *section;
-
- /* An array of pointers to symbols either at the location being disassembled
- or at the start of the function being disassembled. The array is sorted
- so that the first symbol is intended to be the one used. The others are
- present for any misc. purposes. This is not set reliably, but if it is
- not NULL, it is correct. */
- asymbol **symbols;
- /* Number of symbols in array. */
- int num_symbols;
-
- /* Symbol table provided for targets that want to look at it. This is
- used on Arm to find mapping symbols and determine Arm/Thumb code. */
- asymbol **symtab;
- int symtab_pos;
- int symtab_size;
-
- /* For use by the disassembler.
- The top 16 bits are reserved for public use (and are documented here).
- The bottom 16 bits are for the internal use of the disassembler. */
- unsigned long flags;
- /* Set if the disassembler has determined that there are one or more
- relocations associated with the instruction being disassembled. */
-#define INSN_HAS_RELOC (1 << 31)
- /* Set if the user has requested the disassembly of data as well as code. */
-#define DISASSEMBLE_DATA (1 << 30)
- /* Set if the user has specifically set the machine type encoded in the
- mach field of this structure. */
-#define USER_SPECIFIED_MACHINE_TYPE (1 << 29)
-
- /* Use internally by the target specific disassembly code. */
- void *private_data;
-
- /* Function used to get bytes to disassemble. MEMADDR is the
- address of the stuff to be disassembled, MYADDR is the address to
- put the bytes in, and LENGTH is the number of bytes to read.
- INFO is a pointer to this struct.
- Returns an errno value or 0 for success. */
- int (*read_memory_func)
- (bfd_vma memaddr, bfd_byte *myaddr, unsigned int length,
- struct disassemble_info *dinfo);
-
- /* Function which should be called if we get an error that we can't
- recover from. STATUS is the errno value from read_memory_func and
- MEMADDR is the address that we were trying to read. INFO is a
- pointer to this struct. */
- void (*memory_error_func)
- (int status, bfd_vma memaddr, struct disassemble_info *dinfo);
-
- /* Function called to print ADDR. */
- void (*print_address_func)
- (bfd_vma addr, struct disassemble_info *dinfo);
-
- /* Function called to determine if there is a symbol at the given ADDR.
- If there is, the function returns 1, otherwise it returns 0.
- This is used by ports which support an overlay manager where
- the overlay number is held in the top part of an address. In
- some circumstances we want to include the overlay number in the
- address, (normally because there is a symbol associated with
- that address), but sometimes we want to mask out the overlay bits. */
- int (* symbol_at_address_func)
- (bfd_vma addr, struct disassemble_info *dinfo);
-
- /* Function called to check if a SYMBOL is can be displayed to the user.
- This is used by some ports that want to hide special symbols when
- displaying debugging outout. */
- bfd_boolean (* symbol_is_valid)
- (asymbol *, struct disassemble_info *dinfo);
-
- /* These are for buffer_read_memory. */
- bfd_byte *buffer;
- bfd_vma buffer_vma;
- unsigned int buffer_length;
-
- /* This variable may be set by the instruction decoder. It suggests
- the number of bytes objdump should display on a single line. If
- the instruction decoder sets this, it should always set it to
- the same value in order to get reasonable looking output. */
- int bytes_per_line;
-
- /* The next two variables control the way objdump displays the raw data. */
- /* For example, if bytes_per_line is 8 and bytes_per_chunk is 4, the */
- /* output will look like this:
- 00: 00000000 00000000
- with the chunks displayed according to "display_endian". */
- int bytes_per_chunk;
- enum bfd_endian display_endian;
-
- /* Number of octets per incremented target address
- Normally one, but some DSPs have byte sizes of 16 or 32 bits. */
- unsigned int octets_per_byte;
-
- /* The number of zeroes we want to see at the end of a section before we
- start skipping them. */
- unsigned int skip_zeroes;
-
- /* The number of zeroes to skip at the end of a section. If the number
- of zeroes at the end is between SKIP_ZEROES_AT_END and SKIP_ZEROES,
- they will be disassembled. If there are fewer than
- SKIP_ZEROES_AT_END, they will be skipped. This is a heuristic
- attempt to avoid disassembling zeroes inserted by section
- alignment. */
- unsigned int skip_zeroes_at_end;
-
- /* Whether the disassembler always needs the relocations. */
- bfd_boolean disassembler_needs_relocs;
-
- /* Results from instruction decoders. Not all decoders yet support
- this information. This info is set each time an instruction is
- decoded, and is only valid for the last such instruction.
-
- To determine whether this decoder supports this information, set
- insn_info_valid to 0, decode an instruction, then check it. */
-
- char insn_info_valid; /* Branch info has been set. */
- char branch_delay_insns; /* How many sequential insn's will run before
- a branch takes effect. (0 = normal) */
- char data_size; /* Size of data reference in insn, in bytes */
- enum dis_insn_type insn_type; /* Type of instruction */
- bfd_vma target; /* Target address of branch or dref, if known;
- zero if unknown. */
- bfd_vma target2; /* Second target address for dref2 */
-
- /* Command line options specific to the target disassembler. */
- char * disassembler_options;
-
-} disassemble_info;
-
-
-/* Standard disassemblers. Disassemble one instruction at the given
- target address. Return number of octets processed. */
-typedef int (*disassembler_ftype) (bfd_vma, disassemble_info *);
-
-extern int print_insn_aarch64 (bfd_vma, disassemble_info *);
-extern int print_insn_alpha (bfd_vma, disassemble_info *);
-extern int print_insn_avr (bfd_vma, disassemble_info *);
-extern int print_insn_bfin (bfd_vma, disassemble_info *);
-extern int print_insn_big_arm (bfd_vma, disassemble_info *);
-extern int print_insn_big_mips (bfd_vma, disassemble_info *);
-extern int print_insn_big_nios2 (bfd_vma, disassemble_info *);
-extern int print_insn_big_or32 (bfd_vma, disassemble_info *);
-extern int print_insn_big_powerpc (bfd_vma, disassemble_info *);
-extern int print_insn_big_score (bfd_vma, disassemble_info *);
-extern int print_insn_cr16 (bfd_vma, disassemble_info *);
-extern int print_insn_crx (bfd_vma, disassemble_info *);
-extern int print_insn_d10v (bfd_vma, disassemble_info *);
-extern int print_insn_d30v (bfd_vma, disassemble_info *);
-extern int print_insn_dlx (bfd_vma, disassemble_info *);
-extern int print_insn_epiphany (bfd_vma, disassemble_info *);
-extern int print_insn_fr30 (bfd_vma, disassemble_info *);
-extern int print_insn_frv (bfd_vma, disassemble_info *);
-extern int print_insn_h8300 (bfd_vma, disassemble_info *);
-extern int print_insn_h8300h (bfd_vma, disassemble_info *);
-extern int print_insn_h8300s (bfd_vma, disassemble_info *);
-extern int print_insn_h8500 (bfd_vma, disassemble_info *);
-extern int print_insn_hppa (bfd_vma, disassemble_info *);
-extern int print_insn_i370 (bfd_vma, disassemble_info *);
-extern int print_insn_i386 (bfd_vma, disassemble_info *);
-extern int print_insn_i386_att (bfd_vma, disassemble_info *);
-extern int print_insn_i386_intel (bfd_vma, disassemble_info *);
-extern int print_insn_i860 (bfd_vma, disassemble_info *);
-extern int print_insn_i960 (bfd_vma, disassemble_info *);
-extern int print_insn_ia64 (bfd_vma, disassemble_info *);
-extern int print_insn_ip2k (bfd_vma, disassemble_info *);
-extern int print_insn_iq2000 (bfd_vma, disassemble_info *);
-extern int print_insn_little_arm (bfd_vma, disassemble_info *);
-extern int print_insn_little_mips (bfd_vma, disassemble_info *);
-extern int print_insn_little_nios2 (bfd_vma, disassemble_info *);
-extern int print_insn_little_or32 (bfd_vma, disassemble_info *);
-extern int print_insn_little_powerpc (bfd_vma, disassemble_info *);
-extern int print_insn_little_score (bfd_vma, disassemble_info *);
-extern int print_insn_lm32 (bfd_vma, disassemble_info *);
-extern int print_insn_m32c (bfd_vma, disassemble_info *);
-extern int print_insn_m32r (bfd_vma, disassemble_info *);
-extern int print_insn_m68hc11 (bfd_vma, disassemble_info *);
-extern int print_insn_m68hc12 (bfd_vma, disassemble_info *);
-extern int print_insn_m9s12x (bfd_vma, disassemble_info *);
-extern int print_insn_m9s12xg (bfd_vma, disassemble_info *);
-extern int print_insn_m68k (bfd_vma, disassemble_info *);
-extern int print_insn_m88k (bfd_vma, disassemble_info *);
-extern int print_insn_mcore (bfd_vma, disassemble_info *);
-extern int print_insn_mep (bfd_vma, disassemble_info *);
-extern int print_insn_metag (bfd_vma, disassemble_info *);
-extern int print_insn_microblaze (bfd_vma, disassemble_info *);
-extern int print_insn_mmix (bfd_vma, disassemble_info *);
-extern int print_insn_mn10200 (bfd_vma, disassemble_info *);
-extern int print_insn_mn10300 (bfd_vma, disassemble_info *);
-extern int print_insn_moxie (bfd_vma, disassemble_info *);
-extern int print_insn_msp430 (bfd_vma, disassemble_info *);
-extern int print_insn_mt (bfd_vma, disassemble_info *);
-extern int print_insn_ns32k (bfd_vma, disassemble_info *);
-extern int print_insn_openrisc (bfd_vma, disassemble_info *);
-extern int print_insn_pdp11 (bfd_vma, disassemble_info *);
-extern int print_insn_pj (bfd_vma, disassemble_info *);
-extern int print_insn_rs6000 (bfd_vma, disassemble_info *);
-extern int print_insn_s390 (bfd_vma, disassemble_info *);
-extern int print_insn_sh (bfd_vma, disassemble_info *);
-extern int print_insn_sh64 (bfd_vma, disassemble_info *);
-extern int print_insn_sh64x_media (bfd_vma, disassemble_info *);
-extern int print_insn_sparc (bfd_vma, disassemble_info *);
-extern int print_insn_spu (bfd_vma, disassemble_info *);
-extern int print_insn_tic30 (bfd_vma, disassemble_info *);
-extern int print_insn_tic4x (bfd_vma, disassemble_info *);
-extern int print_insn_tic54x (bfd_vma, disassemble_info *);
-extern int print_insn_tic6x (bfd_vma, disassemble_info *);
-extern int print_insn_tic80 (bfd_vma, disassemble_info *);
-extern int print_insn_tilegx (bfd_vma, disassemble_info *);
-extern int print_insn_tilepro (bfd_vma, disassemble_info *);
-extern int print_insn_v850 (bfd_vma, disassemble_info *);
-extern int print_insn_vax (bfd_vma, disassemble_info *);
-extern int print_insn_w65 (bfd_vma, disassemble_info *);
-extern int print_insn_xc16x (bfd_vma, disassemble_info *);
-extern int print_insn_xgate (bfd_vma, disassemble_info *);
-extern int print_insn_xstormy16 (bfd_vma, disassemble_info *);
-extern int print_insn_xtensa (bfd_vma, disassemble_info *);
-extern int print_insn_z80 (bfd_vma, disassemble_info *);
-extern int print_insn_z8001 (bfd_vma, disassemble_info *);
-extern int print_insn_z8002 (bfd_vma, disassemble_info *);
-extern int print_insn_rx (bfd_vma, disassemble_info *);
-extern int print_insn_rl78 (bfd_vma, disassemble_info *);
-
-extern disassembler_ftype arc_get_disassembler (void *);
-extern disassembler_ftype cris_get_disassembler (bfd *);
-
-extern void print_aarch64_disassembler_options (FILE *);
-extern void print_i386_disassembler_options (FILE *);
-extern void print_mips_disassembler_options (FILE *);
-extern void print_ppc_disassembler_options (FILE *);
-extern void print_arm_disassembler_options (FILE *);
-extern void parse_arm_disassembler_option (char *);
-extern void print_s390_disassembler_options (FILE *);
-extern int get_arm_regname_num_options (void);
-extern int set_arm_regname_option (int);
-extern int get_arm_regnames (int, const char **, const char **, const char *const **);
-extern bfd_boolean aarch64_symbol_is_valid (asymbol *, struct disassemble_info *);
-extern bfd_boolean arm_symbol_is_valid (asymbol *, struct disassemble_info *);
-extern void disassemble_init_powerpc (struct disassemble_info *);
-
-/* Fetch the disassembler for a given BFD, if that support is available. */
-extern disassembler_ftype disassembler (bfd *);
-
-/* Amend the disassemble_info structure as necessary for the target architecture.
- Should only be called after initialising the info->arch field. */
-extern void disassemble_init_for_target (struct disassemble_info * dinfo);
-
-/* Document any target specific options available from the disassembler. */
-extern void disassembler_usage (FILE *);
-
-
-/* This block of definitions is for particular callers who read instructions
- into a buffer before calling the instruction decoder. */
-
-/* Here is a function which callers may wish to use for read_memory_func.
- It gets bytes from a buffer. */
-extern int buffer_read_memory
- (bfd_vma, bfd_byte *, unsigned int, struct disassemble_info *);
-
-/* This function goes with buffer_read_memory.
- It prints a message using info->fprintf_func and info->stream. */
-extern void perror_memory (int, bfd_vma, struct disassemble_info *);
-
-
-/* Just print the address in hex. This is included for completeness even
- though both GDB and objdump provide their own (to print symbolic
- addresses). */
-extern void generic_print_address
- (bfd_vma, struct disassemble_info *);
-
-/* Always true. */
-extern int generic_symbol_at_address
- (bfd_vma, struct disassemble_info *);
-
-/* Also always true. */
-extern bfd_boolean generic_symbol_is_valid
- (asymbol *, struct disassemble_info *);
-
-/* Method to initialize a disassemble_info struct. This should be
- called by all applications creating such a struct. */
-extern void init_disassemble_info (struct disassemble_info *dinfo, void *stream,
- fprintf_ftype fprintf_func);
-
-/* For compatibility with existing code. */
-#define INIT_DISASSEMBLE_INFO(INFO, STREAM, FPRINTF_FUNC) \
- init_disassemble_info (&(INFO), (STREAM), (fprintf_ftype) (FPRINTF_FUNC))
-#define INIT_DISASSEMBLE_INFO_NO_ARCH(INFO, STREAM, FPRINTF_FUNC) \
- init_disassemble_info (&(INFO), (STREAM), (fprintf_ftype) (FPRINTF_FUNC))
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* ! defined (DIS_ASM_H) */
diff --git a/include/dwarf2.def b/include/dwarf2.def
deleted file mode 100644
index ea8127c8b..000000000
--- a/include/dwarf2.def
+++ /dev/null
@@ -1,708 +0,0 @@
-/* -*- c -*-
- Declarations and definitions of codes relating to the DWARF2 and
- DWARF3 symbolic debugging information formats.
- Copyright (C) 1992, 1993, 1995, 1996, 1997, 1999, 2000, 2001, 2002,
- 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
- Free Software Foundation, Inc.
-
- Written by Gary Funck (gary@intrepid.com) The Ada Joint Program
- Office (AJPO), Florida State University and Silicon Graphics Inc.
- provided support for this effort -- June 21, 1995.
-
- Derived from the DWARF 1 implementation written by Ron Guilmette
- (rfg@netcom.com), November 1990.
-
- This file is part of GCC.
-
- GCC 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 3, or (at your option) any later
- version.
-
- GCC 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.
-
- Under Section 7 of GPL version 3, you are granted additional
- permissions described in the GCC Runtime Library Exception, version
- 3.1, as published by the Free Software Foundation.
-
- You should have received a copy of the GNU General Public License and
- a copy of the GCC Runtime Library Exception along with this program;
- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
- <http://www.gnu.org/licenses/>. */
-
-/* This file is derived from the DWARF specification (a public document)
- Revision 2.0.0 (July 27, 1993) developed by the UNIX International
- Programming Languages Special Interest Group (UI/PLSIG) and distributed
- by UNIX International. Copies of this specification are available from
- UNIX International, 20 Waterview Boulevard, Parsippany, NJ, 07054.
-
- This file also now contains definitions from the DWARF 3 specification
- published Dec 20, 2005, available from: http://dwarf.freestandards.org.
-
- This file also now contains definitions from the DWARF 4
- specification, available from: http://dwarfstd.org/ */
-
-/* This file declares various DWARF-related constants using a set of
- macros which can be redefined by the including file.
-
- The macros are in sections. Each section corresponds to a single
- set of DWARF constants and has a corresponding key. The key is
- used in all the macro names.
-
- The sections are TAG (for DW_TAG_ constants), FORM (DW_FORM_), AT
- (DW_AT_), OP (DW_OP_), ATE (DW_ATE_), and CFA (DW_CFA_).
-
- Using TAG as an example, the following macros may be used for each
- key:
-
- DW_FIRST_TAG(name, value) - Introduce the first DW_TAG constant.
-
- DW_TAG(name, value) - Define a subsequent constant.
-
- DW_TAG_DUP(name, value) - Define a subsequent constant whose value
- is a duplicate of some other constant. Not all keys use the _DUP
- macro form. If more than one name shares a value, then the base
- (DW_TAG) form will be the preferred name and DW_TAG_DUP will hold
- any alternate names.
-
- DW_END_TAG - Invoked at the end of the DW_TAG constants. */
-
-DW_FIRST_TAG (DW_TAG_padding, 0x00)
-DW_TAG (DW_TAG_array_type, 0x01)
-DW_TAG (DW_TAG_class_type, 0x02)
-DW_TAG (DW_TAG_entry_point, 0x03)
-DW_TAG (DW_TAG_enumeration_type, 0x04)
-DW_TAG (DW_TAG_formal_parameter, 0x05)
-DW_TAG (DW_TAG_imported_declaration, 0x08)
-DW_TAG (DW_TAG_label, 0x0a)
-DW_TAG (DW_TAG_lexical_block, 0x0b)
-DW_TAG (DW_TAG_member, 0x0d)
-DW_TAG (DW_TAG_pointer_type, 0x0f)
-DW_TAG (DW_TAG_reference_type, 0x10)
-DW_TAG (DW_TAG_compile_unit, 0x11)
-DW_TAG (DW_TAG_string_type, 0x12)
-DW_TAG (DW_TAG_structure_type, 0x13)
-DW_TAG (DW_TAG_subroutine_type, 0x15)
-DW_TAG (DW_TAG_typedef, 0x16)
-DW_TAG (DW_TAG_union_type, 0x17)
-DW_TAG (DW_TAG_unspecified_parameters, 0x18)
-DW_TAG (DW_TAG_variant, 0x19)
-DW_TAG (DW_TAG_common_block, 0x1a)
-DW_TAG (DW_TAG_common_inclusion, 0x1b)
-DW_TAG (DW_TAG_inheritance, 0x1c)
-DW_TAG (DW_TAG_inlined_subroutine, 0x1d)
-DW_TAG (DW_TAG_module, 0x1e)
-DW_TAG (DW_TAG_ptr_to_member_type, 0x1f)
-DW_TAG (DW_TAG_set_type, 0x20)
-DW_TAG (DW_TAG_subrange_type, 0x21)
-DW_TAG (DW_TAG_with_stmt, 0x22)
-DW_TAG (DW_TAG_access_declaration, 0x23)
-DW_TAG (DW_TAG_base_type, 0x24)
-DW_TAG (DW_TAG_catch_block, 0x25)
-DW_TAG (DW_TAG_const_type, 0x26)
-DW_TAG (DW_TAG_constant, 0x27)
-DW_TAG (DW_TAG_enumerator, 0x28)
-DW_TAG (DW_TAG_file_type, 0x29)
-DW_TAG (DW_TAG_friend, 0x2a)
-DW_TAG (DW_TAG_namelist, 0x2b)
-DW_TAG (DW_TAG_namelist_item, 0x2c)
-DW_TAG (DW_TAG_packed_type, 0x2d)
-DW_TAG (DW_TAG_subprogram, 0x2e)
-DW_TAG (DW_TAG_template_type_param, 0x2f)
-DW_TAG (DW_TAG_template_value_param, 0x30)
-DW_TAG (DW_TAG_thrown_type, 0x31)
-DW_TAG (DW_TAG_try_block, 0x32)
-DW_TAG (DW_TAG_variant_part, 0x33)
-DW_TAG (DW_TAG_variable, 0x34)
-DW_TAG (DW_TAG_volatile_type, 0x35)
-/* DWARF 3. */
-DW_TAG (DW_TAG_dwarf_procedure, 0x36)
-DW_TAG (DW_TAG_restrict_type, 0x37)
-DW_TAG (DW_TAG_interface_type, 0x38)
-DW_TAG (DW_TAG_namespace, 0x39)
-DW_TAG (DW_TAG_imported_module, 0x3a)
-DW_TAG (DW_TAG_unspecified_type, 0x3b)
-DW_TAG (DW_TAG_partial_unit, 0x3c)
-DW_TAG (DW_TAG_imported_unit, 0x3d)
-DW_TAG (DW_TAG_condition, 0x3f)
-DW_TAG (DW_TAG_shared_type, 0x40)
-/* DWARF 4. */
-DW_TAG (DW_TAG_type_unit, 0x41)
-DW_TAG (DW_TAG_rvalue_reference_type, 0x42)
-DW_TAG (DW_TAG_template_alias, 0x43)
-/* DWARF 5. */
-DW_TAG (DW_TAG_atomic_type, 0x47)
-
-DW_TAG_DUP (DW_TAG_lo_user, 0x4080)
-DW_TAG_DUP (DW_TAG_hi_user, 0xffff)
-
-/* SGI/MIPS Extensions. */
-DW_TAG (DW_TAG_MIPS_loop, 0x4081)
-
-/* HP extensions. See: ftp://ftp.hp.com/pub/lang/tools/WDB/wdb-4.0.tar.gz . */
-DW_TAG (DW_TAG_HP_array_descriptor, 0x4090)
-DW_TAG (DW_TAG_HP_Bliss_field, 0x4091)
-DW_TAG (DW_TAG_HP_Bliss_field_set, 0x4092)
-
-/* GNU extensions. */
-DW_TAG (DW_TAG_format_label, 0x4101) /* For FORTRAN 77 and Fortran 90. */
-DW_TAG (DW_TAG_function_template, 0x4102) /* For C++. */
-DW_TAG (DW_TAG_class_template, 0x4103) /* For C++. */
-DW_TAG (DW_TAG_GNU_BINCL, 0x4104)
-DW_TAG (DW_TAG_GNU_EINCL, 0x4105)
-/* Template template parameter.
- See http://gcc.gnu.org/wiki/TemplateParmsDwarf . */
-DW_TAG (DW_TAG_GNU_template_template_param, 0x4106)
-
-/* Template parameter pack extension, specified at
- http://wiki.dwarfstd.org/index.php?title=C%2B%2B0x:_Variadic_templates
- The values of these two TAGS are in the DW_TAG_GNU_* space until the tags
- are properly part of DWARF 5. */
-DW_TAG (DW_TAG_GNU_template_parameter_pack, 0x4107)
-DW_TAG (DW_TAG_GNU_formal_parameter_pack, 0x4108)
-/* The GNU call site extension, specified at
- http://www.dwarfstd.org/ShowIssue.php?issue=100909.2&type=open .
- The values of these two TAGS are in the DW_TAG_GNU_* space until the tags
- are properly part of DWARF 5. */
-DW_TAG (DW_TAG_GNU_call_site, 0x4109)
-DW_TAG (DW_TAG_GNU_call_site_parameter, 0x410a)
-/* Extensions for UPC. See: http://dwarfstd.org/doc/DWARF4.pdf. */
-DW_TAG (DW_TAG_upc_shared_type, 0x8765)
-DW_TAG (DW_TAG_upc_strict_type, 0x8766)
-DW_TAG (DW_TAG_upc_relaxed_type, 0x8767)
-/* PGI (STMicroelectronics) extensions. No documentation available. */
-DW_TAG (DW_TAG_PGI_kanji_type, 0xA000)
-DW_TAG (DW_TAG_PGI_interface_block, 0xA020)
-DW_END_TAG
-
-DW_FIRST_FORM (DW_FORM_addr, 0x01)
-DW_FORM (DW_FORM_block2, 0x03)
-DW_FORM (DW_FORM_block4, 0x04)
-DW_FORM (DW_FORM_data2, 0x05)
-DW_FORM (DW_FORM_data4, 0x06)
-DW_FORM (DW_FORM_data8, 0x07)
-DW_FORM (DW_FORM_string, 0x08)
-DW_FORM (DW_FORM_block, 0x09)
-DW_FORM (DW_FORM_block1, 0x0a)
-DW_FORM (DW_FORM_data1, 0x0b)
-DW_FORM (DW_FORM_flag, 0x0c)
-DW_FORM (DW_FORM_sdata, 0x0d)
-DW_FORM (DW_FORM_strp, 0x0e)
-DW_FORM (DW_FORM_udata, 0x0f)
-DW_FORM (DW_FORM_ref_addr, 0x10)
-DW_FORM (DW_FORM_ref1, 0x11)
-DW_FORM (DW_FORM_ref2, 0x12)
-DW_FORM (DW_FORM_ref4, 0x13)
-DW_FORM (DW_FORM_ref8, 0x14)
-DW_FORM (DW_FORM_ref_udata, 0x15)
-DW_FORM (DW_FORM_indirect, 0x16)
-/* DWARF 4. */
-DW_FORM (DW_FORM_sec_offset, 0x17)
-DW_FORM (DW_FORM_exprloc, 0x18)
-DW_FORM (DW_FORM_flag_present, 0x19)
-DW_FORM (DW_FORM_ref_sig8, 0x20)
-/* Extensions for Fission. See http://gcc.gnu.org/wiki/DebugFission. */
-DW_FORM (DW_FORM_GNU_addr_index, 0x1f01)
-DW_FORM (DW_FORM_GNU_str_index, 0x1f02)
-/* Extensions for DWZ multifile.
- See http://www.dwarfstd.org/ShowIssue.php?issue=120604.1&type=open . */
-DW_FORM (DW_FORM_GNU_ref_alt, 0x1f20)
-DW_FORM (DW_FORM_GNU_strp_alt, 0x1f21)
-DW_END_FORM
-
-DW_FIRST_AT (DW_AT_sibling, 0x01)
-DW_AT (DW_AT_location, 0x02)
-DW_AT (DW_AT_name, 0x03)
-DW_AT (DW_AT_ordering, 0x09)
-DW_AT (DW_AT_subscr_data, 0x0a)
-DW_AT (DW_AT_byte_size, 0x0b)
-DW_AT (DW_AT_bit_offset, 0x0c)
-DW_AT (DW_AT_bit_size, 0x0d)
-DW_AT (DW_AT_element_list, 0x0f)
-DW_AT (DW_AT_stmt_list, 0x10)
-DW_AT (DW_AT_low_pc, 0x11)
-DW_AT (DW_AT_high_pc, 0x12)
-DW_AT (DW_AT_language, 0x13)
-DW_AT (DW_AT_member, 0x14)
-DW_AT (DW_AT_discr, 0x15)
-DW_AT (DW_AT_discr_value, 0x16)
-DW_AT (DW_AT_visibility, 0x17)
-DW_AT (DW_AT_import, 0x18)
-DW_AT (DW_AT_string_length, 0x19)
-DW_AT (DW_AT_common_reference, 0x1a)
-DW_AT (DW_AT_comp_dir, 0x1b)
-DW_AT (DW_AT_const_value, 0x1c)
-DW_AT (DW_AT_containing_type, 0x1d)
-DW_AT (DW_AT_default_value, 0x1e)
-DW_AT (DW_AT_inline, 0x20)
-DW_AT (DW_AT_is_optional, 0x21)
-DW_AT (DW_AT_lower_bound, 0x22)
-DW_AT (DW_AT_producer, 0x25)
-DW_AT (DW_AT_prototyped, 0x27)
-DW_AT (DW_AT_return_addr, 0x2a)
-DW_AT (DW_AT_start_scope, 0x2c)
-DW_AT (DW_AT_bit_stride, 0x2e)
-DW_AT (DW_AT_upper_bound, 0x2f)
-DW_AT (DW_AT_abstract_origin, 0x31)
-DW_AT (DW_AT_accessibility, 0x32)
-DW_AT (DW_AT_address_class, 0x33)
-DW_AT (DW_AT_artificial, 0x34)
-DW_AT (DW_AT_base_types, 0x35)
-DW_AT (DW_AT_calling_convention, 0x36)
-DW_AT (DW_AT_count, 0x37)
-DW_AT (DW_AT_data_member_location, 0x38)
-DW_AT (DW_AT_decl_column, 0x39)
-DW_AT (DW_AT_decl_file, 0x3a)
-DW_AT (DW_AT_decl_line, 0x3b)
-DW_AT (DW_AT_declaration, 0x3c)
-DW_AT (DW_AT_discr_list, 0x3d)
-DW_AT (DW_AT_encoding, 0x3e)
-DW_AT (DW_AT_external, 0x3f)
-DW_AT (DW_AT_frame_base, 0x40)
-DW_AT (DW_AT_friend, 0x41)
-DW_AT (DW_AT_identifier_case, 0x42)
-DW_AT (DW_AT_macro_info, 0x43)
-DW_AT (DW_AT_namelist_items, 0x44)
-DW_AT (DW_AT_priority, 0x45)
-DW_AT (DW_AT_segment, 0x46)
-DW_AT (DW_AT_specification, 0x47)
-DW_AT (DW_AT_static_link, 0x48)
-DW_AT (DW_AT_type, 0x49)
-DW_AT (DW_AT_use_location, 0x4a)
-DW_AT (DW_AT_variable_parameter, 0x4b)
-DW_AT (DW_AT_virtuality, 0x4c)
-DW_AT (DW_AT_vtable_elem_location, 0x4d)
-/* DWARF 3 values. */
-DW_AT (DW_AT_allocated, 0x4e)
-DW_AT (DW_AT_associated, 0x4f)
-DW_AT (DW_AT_data_location, 0x50)
-DW_AT (DW_AT_byte_stride, 0x51)
-DW_AT (DW_AT_entry_pc, 0x52)
-DW_AT (DW_AT_use_UTF8, 0x53)
-DW_AT (DW_AT_extension, 0x54)
-DW_AT (DW_AT_ranges, 0x55)
-DW_AT (DW_AT_trampoline, 0x56)
-DW_AT (DW_AT_call_column, 0x57)
-DW_AT (DW_AT_call_file, 0x58)
-DW_AT (DW_AT_call_line, 0x59)
-DW_AT (DW_AT_description, 0x5a)
-DW_AT (DW_AT_binary_scale, 0x5b)
-DW_AT (DW_AT_decimal_scale, 0x5c)
-DW_AT (DW_AT_small, 0x5d)
-DW_AT (DW_AT_decimal_sign, 0x5e)
-DW_AT (DW_AT_digit_count, 0x5f)
-DW_AT (DW_AT_picture_string, 0x60)
-DW_AT (DW_AT_mutable, 0x61)
-DW_AT (DW_AT_threads_scaled, 0x62)
-DW_AT (DW_AT_explicit, 0x63)
-DW_AT (DW_AT_object_pointer, 0x64)
-DW_AT (DW_AT_endianity, 0x65)
-DW_AT (DW_AT_elemental, 0x66)
-DW_AT (DW_AT_pure, 0x67)
-DW_AT (DW_AT_recursive, 0x68)
-/* DWARF 4. */
-DW_AT (DW_AT_signature, 0x69)
-DW_AT (DW_AT_main_subprogram, 0x6a)
-DW_AT (DW_AT_data_bit_offset, 0x6b)
-DW_AT (DW_AT_const_expr, 0x6c)
-DW_AT (DW_AT_enum_class, 0x6d)
-DW_AT (DW_AT_linkage_name, 0x6e)
-/* DWARF 5. */
-DW_AT (DW_AT_noreturn, 0x87)
-
-DW_AT_DUP (DW_AT_lo_user, 0x2000) /* Implementation-defined range start. */
-DW_AT_DUP (DW_AT_hi_user, 0x3fff) /* Implementation-defined range end. */
-
-/* SGI/MIPS extensions. */
-DW_AT (DW_AT_MIPS_fde, 0x2001)
-DW_AT (DW_AT_MIPS_loop_begin, 0x2002)
-DW_AT (DW_AT_MIPS_tail_loop_begin, 0x2003)
-DW_AT (DW_AT_MIPS_epilog_begin, 0x2004)
-DW_AT (DW_AT_MIPS_loop_unroll_factor, 0x2005)
-DW_AT (DW_AT_MIPS_software_pipeline_depth, 0x2006)
-DW_AT (DW_AT_MIPS_linkage_name, 0x2007)
-DW_AT (DW_AT_MIPS_stride, 0x2008)
-DW_AT (DW_AT_MIPS_abstract_name, 0x2009)
-DW_AT (DW_AT_MIPS_clone_origin, 0x200a)
-DW_AT (DW_AT_MIPS_has_inlines, 0x200b)
-/* HP extensions. */
-DW_AT (DW_AT_HP_block_index, 0x2000)
-DW_AT_DUP (DW_AT_HP_unmodifiable, 0x2001) /* Same as DW_AT_MIPS_fde. */
-DW_AT_DUP (DW_AT_HP_prologue, 0x2005) /* Same as DW_AT_MIPS_loop_unroll. */
-DW_AT_DUP (DW_AT_HP_epilogue, 0x2008) /* Same as DW_AT_MIPS_stride. */
-DW_AT (DW_AT_HP_actuals_stmt_list, 0x2010)
-DW_AT (DW_AT_HP_proc_per_section, 0x2011)
-DW_AT (DW_AT_HP_raw_data_ptr, 0x2012)
-DW_AT (DW_AT_HP_pass_by_reference, 0x2013)
-DW_AT (DW_AT_HP_opt_level, 0x2014)
-DW_AT (DW_AT_HP_prof_version_id, 0x2015)
-DW_AT (DW_AT_HP_opt_flags, 0x2016)
-DW_AT (DW_AT_HP_cold_region_low_pc, 0x2017)
-DW_AT (DW_AT_HP_cold_region_high_pc, 0x2018)
-DW_AT (DW_AT_HP_all_variables_modifiable, 0x2019)
-DW_AT (DW_AT_HP_linkage_name, 0x201a)
-DW_AT (DW_AT_HP_prof_flags, 0x201b) /* In comp unit of procs_info for -g. */
-DW_AT (DW_AT_HP_unit_name, 0x201f)
-DW_AT (DW_AT_HP_unit_size, 0x2020)
-DW_AT (DW_AT_HP_widened_byte_size, 0x2021)
-DW_AT (DW_AT_HP_definition_points, 0x2022)
-DW_AT (DW_AT_HP_default_location, 0x2023)
-DW_AT (DW_AT_HP_is_result_param, 0x2029)
-
-/* GNU extensions. */
-DW_AT (DW_AT_sf_names, 0x2101)
-DW_AT (DW_AT_src_info, 0x2102)
-DW_AT (DW_AT_mac_info, 0x2103)
-DW_AT (DW_AT_src_coords, 0x2104)
-DW_AT (DW_AT_body_begin, 0x2105)
-DW_AT (DW_AT_body_end, 0x2106)
-DW_AT (DW_AT_GNU_vector, 0x2107)
-/* Thread-safety annotations.
- See http://gcc.gnu.org/wiki/ThreadSafetyAnnotation . */
-DW_AT (DW_AT_GNU_guarded_by, 0x2108)
-DW_AT (DW_AT_GNU_pt_guarded_by, 0x2109)
-DW_AT (DW_AT_GNU_guarded, 0x210a)
-DW_AT (DW_AT_GNU_pt_guarded, 0x210b)
-DW_AT (DW_AT_GNU_locks_excluded, 0x210c)
-DW_AT (DW_AT_GNU_exclusive_locks_required, 0x210d)
-DW_AT (DW_AT_GNU_shared_locks_required, 0x210e)
-/* One-definition rule violation detection.
- See http://gcc.gnu.org/wiki/DwarfSeparateTypeInfo . */
-DW_AT (DW_AT_GNU_odr_signature, 0x210f)
-/* Template template argument name.
- See http://gcc.gnu.org/wiki/TemplateParmsDwarf . */
-DW_AT (DW_AT_GNU_template_name, 0x2110)
-/* The GNU call site extension.
- See http://www.dwarfstd.org/ShowIssue.php?issue=100909.2&type=open . */
-DW_AT (DW_AT_GNU_call_site_value, 0x2111)
-DW_AT (DW_AT_GNU_call_site_data_value, 0x2112)
-DW_AT (DW_AT_GNU_call_site_target, 0x2113)
-DW_AT (DW_AT_GNU_call_site_target_clobbered, 0x2114)
-DW_AT (DW_AT_GNU_tail_call, 0x2115)
-DW_AT (DW_AT_GNU_all_tail_call_sites, 0x2116)
-DW_AT (DW_AT_GNU_all_call_sites, 0x2117)
-DW_AT (DW_AT_GNU_all_source_call_sites, 0x2118)
-/* Section offset into .debug_macro section. */
-DW_AT (DW_AT_GNU_macros, 0x2119)
-/* Attribute for C++ deleted special member functions (= delete;). */
-DW_AT (DW_AT_GNU_deleted, 0x211a)
-/* Extensions for Fission. See http://gcc.gnu.org/wiki/DebugFission. */
-DW_AT (DW_AT_GNU_dwo_name, 0x2130)
-DW_AT (DW_AT_GNU_dwo_id, 0x2131)
-DW_AT (DW_AT_GNU_ranges_base, 0x2132)
-DW_AT (DW_AT_GNU_addr_base, 0x2133)
-DW_AT (DW_AT_GNU_pubnames, 0x2134)
-DW_AT (DW_AT_GNU_pubtypes, 0x2135)
-/* Attribute for discriminator.
- See http://gcc.gnu.org/wiki/Discriminator */
-DW_AT (DW_AT_GNU_discriminator, 0x2136)
-/* VMS extensions. */
-DW_AT (DW_AT_VMS_rtnbeg_pd_address, 0x2201)
-/* GNAT extensions. */
-/* GNAT descriptive type.
- See http://gcc.gnu.org/wiki/DW_AT_GNAT_descriptive_type . */
-DW_AT (DW_AT_use_GNAT_descriptive_type, 0x2301)
-DW_AT (DW_AT_GNAT_descriptive_type, 0x2302)
-/* UPC extension. */
-DW_AT (DW_AT_upc_threads_scaled, 0x3210)
-/* PGI (STMicroelectronics) extensions. */
-DW_AT (DW_AT_PGI_lbase, 0x3a00)
-DW_AT (DW_AT_PGI_soffset, 0x3a01)
-DW_AT (DW_AT_PGI_lstride, 0x3a02)
-/* Apple extensions. */
-DW_AT (DW_AT_APPLE_optimized, 0x3fe1)
-DW_AT (DW_AT_APPLE_flags, 0x3fe2)
-DW_AT (DW_AT_APPLE_isa, 0x3fe3)
-DW_AT (DW_AT_APPLE_block, 0x3fe4)
-DW_AT (DW_AT_APPLE_major_runtime_vers, 0x3fe5)
-DW_AT (DW_AT_APPLE_runtime_class, 0x3fe6)
-DW_AT (DW_AT_APPLE_omit_frame_ptr, 0x3fe7)
-DW_AT (DW_AT_APPLE_property_name, 0x3fe8)
-DW_AT (DW_AT_APPLE_property_getter, 0x3fe9)
-DW_AT (DW_AT_APPLE_property_setter, 0x3fea)
-DW_AT (DW_AT_APPLE_property_attribute, 0x3feb)
-DW_AT (DW_AT_APPLE_objc_complete_type, 0x3fec)
-DW_AT (DW_AT_APPLE_property, 0x3fed)
-DW_END_AT
-
-DW_FIRST_OP (DW_OP_addr, 0x03)
-DW_OP (DW_OP_deref, 0x06)
-DW_OP (DW_OP_const1u, 0x08)
-DW_OP (DW_OP_const1s, 0x09)
-DW_OP (DW_OP_const2u, 0x0a)
-DW_OP (DW_OP_const2s, 0x0b)
-DW_OP (DW_OP_const4u, 0x0c)
-DW_OP (DW_OP_const4s, 0x0d)
-DW_OP (DW_OP_const8u, 0x0e)
-DW_OP (DW_OP_const8s, 0x0f)
-DW_OP (DW_OP_constu, 0x10)
-DW_OP (DW_OP_consts, 0x11)
-DW_OP (DW_OP_dup, 0x12)
-DW_OP (DW_OP_drop, 0x13)
-DW_OP (DW_OP_over, 0x14)
-DW_OP (DW_OP_pick, 0x15)
-DW_OP (DW_OP_swap, 0x16)
-DW_OP (DW_OP_rot, 0x17)
-DW_OP (DW_OP_xderef, 0x18)
-DW_OP (DW_OP_abs, 0x19)
-DW_OP (DW_OP_and, 0x1a)
-DW_OP (DW_OP_div, 0x1b)
-DW_OP (DW_OP_minus, 0x1c)
-DW_OP (DW_OP_mod, 0x1d)
-DW_OP (DW_OP_mul, 0x1e)
-DW_OP (DW_OP_neg, 0x1f)
-DW_OP (DW_OP_not, 0x20)
-DW_OP (DW_OP_or, 0x21)
-DW_OP (DW_OP_plus, 0x22)
-DW_OP (DW_OP_plus_uconst, 0x23)
-DW_OP (DW_OP_shl, 0x24)
-DW_OP (DW_OP_shr, 0x25)
-DW_OP (DW_OP_shra, 0x26)
-DW_OP (DW_OP_xor, 0x27)
-DW_OP (DW_OP_bra, 0x28)
-DW_OP (DW_OP_eq, 0x29)
-DW_OP (DW_OP_ge, 0x2a)
-DW_OP (DW_OP_gt, 0x2b)
-DW_OP (DW_OP_le, 0x2c)
-DW_OP (DW_OP_lt, 0x2d)
-DW_OP (DW_OP_ne, 0x2e)
-DW_OP (DW_OP_skip, 0x2f)
-DW_OP (DW_OP_lit0, 0x30)
-DW_OP (DW_OP_lit1, 0x31)
-DW_OP (DW_OP_lit2, 0x32)
-DW_OP (DW_OP_lit3, 0x33)
-DW_OP (DW_OP_lit4, 0x34)
-DW_OP (DW_OP_lit5, 0x35)
-DW_OP (DW_OP_lit6, 0x36)
-DW_OP (DW_OP_lit7, 0x37)
-DW_OP (DW_OP_lit8, 0x38)
-DW_OP (DW_OP_lit9, 0x39)
-DW_OP (DW_OP_lit10, 0x3a)
-DW_OP (DW_OP_lit11, 0x3b)
-DW_OP (DW_OP_lit12, 0x3c)
-DW_OP (DW_OP_lit13, 0x3d)
-DW_OP (DW_OP_lit14, 0x3e)
-DW_OP (DW_OP_lit15, 0x3f)
-DW_OP (DW_OP_lit16, 0x40)
-DW_OP (DW_OP_lit17, 0x41)
-DW_OP (DW_OP_lit18, 0x42)
-DW_OP (DW_OP_lit19, 0x43)
-DW_OP (DW_OP_lit20, 0x44)
-DW_OP (DW_OP_lit21, 0x45)
-DW_OP (DW_OP_lit22, 0x46)
-DW_OP (DW_OP_lit23, 0x47)
-DW_OP (DW_OP_lit24, 0x48)
-DW_OP (DW_OP_lit25, 0x49)
-DW_OP (DW_OP_lit26, 0x4a)
-DW_OP (DW_OP_lit27, 0x4b)
-DW_OP (DW_OP_lit28, 0x4c)
-DW_OP (DW_OP_lit29, 0x4d)
-DW_OP (DW_OP_lit30, 0x4e)
-DW_OP (DW_OP_lit31, 0x4f)
-DW_OP (DW_OP_reg0, 0x50)
-DW_OP (DW_OP_reg1, 0x51)
-DW_OP (DW_OP_reg2, 0x52)
-DW_OP (DW_OP_reg3, 0x53)
-DW_OP (DW_OP_reg4, 0x54)
-DW_OP (DW_OP_reg5, 0x55)
-DW_OP (DW_OP_reg6, 0x56)
-DW_OP (DW_OP_reg7, 0x57)
-DW_OP (DW_OP_reg8, 0x58)
-DW_OP (DW_OP_reg9, 0x59)
-DW_OP (DW_OP_reg10, 0x5a)
-DW_OP (DW_OP_reg11, 0x5b)
-DW_OP (DW_OP_reg12, 0x5c)
-DW_OP (DW_OP_reg13, 0x5d)
-DW_OP (DW_OP_reg14, 0x5e)
-DW_OP (DW_OP_reg15, 0x5f)
-DW_OP (DW_OP_reg16, 0x60)
-DW_OP (DW_OP_reg17, 0x61)
-DW_OP (DW_OP_reg18, 0x62)
-DW_OP (DW_OP_reg19, 0x63)
-DW_OP (DW_OP_reg20, 0x64)
-DW_OP (DW_OP_reg21, 0x65)
-DW_OP (DW_OP_reg22, 0x66)
-DW_OP (DW_OP_reg23, 0x67)
-DW_OP (DW_OP_reg24, 0x68)
-DW_OP (DW_OP_reg25, 0x69)
-DW_OP (DW_OP_reg26, 0x6a)
-DW_OP (DW_OP_reg27, 0x6b)
-DW_OP (DW_OP_reg28, 0x6c)
-DW_OP (DW_OP_reg29, 0x6d)
-DW_OP (DW_OP_reg30, 0x6e)
-DW_OP (DW_OP_reg31, 0x6f)
-DW_OP (DW_OP_breg0, 0x70)
-DW_OP (DW_OP_breg1, 0x71)
-DW_OP (DW_OP_breg2, 0x72)
-DW_OP (DW_OP_breg3, 0x73)
-DW_OP (DW_OP_breg4, 0x74)
-DW_OP (DW_OP_breg5, 0x75)
-DW_OP (DW_OP_breg6, 0x76)
-DW_OP (DW_OP_breg7, 0x77)
-DW_OP (DW_OP_breg8, 0x78)
-DW_OP (DW_OP_breg9, 0x79)
-DW_OP (DW_OP_breg10, 0x7a)
-DW_OP (DW_OP_breg11, 0x7b)
-DW_OP (DW_OP_breg12, 0x7c)
-DW_OP (DW_OP_breg13, 0x7d)
-DW_OP (DW_OP_breg14, 0x7e)
-DW_OP (DW_OP_breg15, 0x7f)
-DW_OP (DW_OP_breg16, 0x80)
-DW_OP (DW_OP_breg17, 0x81)
-DW_OP (DW_OP_breg18, 0x82)
-DW_OP (DW_OP_breg19, 0x83)
-DW_OP (DW_OP_breg20, 0x84)
-DW_OP (DW_OP_breg21, 0x85)
-DW_OP (DW_OP_breg22, 0x86)
-DW_OP (DW_OP_breg23, 0x87)
-DW_OP (DW_OP_breg24, 0x88)
-DW_OP (DW_OP_breg25, 0x89)
-DW_OP (DW_OP_breg26, 0x8a)
-DW_OP (DW_OP_breg27, 0x8b)
-DW_OP (DW_OP_breg28, 0x8c)
-DW_OP (DW_OP_breg29, 0x8d)
-DW_OP (DW_OP_breg30, 0x8e)
-DW_OP (DW_OP_breg31, 0x8f)
-DW_OP (DW_OP_regx, 0x90)
-DW_OP (DW_OP_fbreg, 0x91)
-DW_OP (DW_OP_bregx, 0x92)
-DW_OP (DW_OP_piece, 0x93)
-DW_OP (DW_OP_deref_size, 0x94)
-DW_OP (DW_OP_xderef_size, 0x95)
-DW_OP (DW_OP_nop, 0x96)
-/* DWARF 3 extensions. */
-DW_OP (DW_OP_push_object_address, 0x97)
-DW_OP (DW_OP_call2, 0x98)
-DW_OP (DW_OP_call4, 0x99)
-DW_OP (DW_OP_call_ref, 0x9a)
-DW_OP (DW_OP_form_tls_address, 0x9b)
-DW_OP (DW_OP_call_frame_cfa, 0x9c)
-DW_OP (DW_OP_bit_piece, 0x9d)
-
-/* DWARF 4 extensions. */
-DW_OP (DW_OP_implicit_value, 0x9e)
-DW_OP (DW_OP_stack_value, 0x9f)
-
-DW_OP_DUP (DW_OP_lo_user, 0xe0) /* Implementation-defined range start. */
-DW_OP_DUP (DW_OP_hi_user, 0xff) /* Implementation-defined range end. */
-
-/* GNU extensions. */
-DW_OP (DW_OP_GNU_push_tls_address, 0xe0)
-/* The following is for marking variables that are uninitialized. */
-DW_OP (DW_OP_GNU_uninit, 0xf0)
-DW_OP (DW_OP_GNU_encoded_addr, 0xf1)
-/* The GNU implicit pointer extension.
- See http://www.dwarfstd.org/ShowIssue.php?issue=100831.1&type=open . */
-DW_OP (DW_OP_GNU_implicit_pointer, 0xf2)
-/* The GNU entry value extension.
- See http://www.dwarfstd.org/ShowIssue.php?issue=100909.1&type=open . */
-DW_OP (DW_OP_GNU_entry_value, 0xf3)
-/* The GNU typed stack extension.
- See http://www.dwarfstd.org/doc/040408.1.html . */
-DW_OP (DW_OP_GNU_const_type, 0xf4)
-DW_OP (DW_OP_GNU_regval_type, 0xf5)
-DW_OP (DW_OP_GNU_deref_type, 0xf6)
-DW_OP (DW_OP_GNU_convert, 0xf7)
-DW_OP (DW_OP_GNU_reinterpret, 0xf9)
-/* The GNU parameter ref extension. */
-DW_OP (DW_OP_GNU_parameter_ref, 0xfa)
-/* Extensions for Fission. See http://gcc.gnu.org/wiki/DebugFission. */
-DW_OP (DW_OP_GNU_addr_index, 0xfb)
-DW_OP (DW_OP_GNU_const_index, 0xfc)
-/* HP extensions. */
-DW_OP_DUP (DW_OP_HP_unknown, 0xe0) /* Ouch, the same as GNU_push_tls_address. */
-DW_OP (DW_OP_HP_is_value, 0xe1)
-DW_OP (DW_OP_HP_fltconst4, 0xe2)
-DW_OP (DW_OP_HP_fltconst8, 0xe3)
-DW_OP (DW_OP_HP_mod_range, 0xe4)
-DW_OP (DW_OP_HP_unmod_range, 0xe5)
-DW_OP (DW_OP_HP_tls, 0xe6)
-/* PGI (STMicroelectronics) extensions. */
-DW_OP (DW_OP_PGI_omp_thread_num, 0xf8)
-DW_END_OP
-
-DW_FIRST_ATE (DW_ATE_void, 0x0)
-DW_ATE (DW_ATE_address, 0x1)
-DW_ATE (DW_ATE_boolean, 0x2)
-DW_ATE (DW_ATE_complex_float, 0x3)
-DW_ATE (DW_ATE_float, 0x4)
-DW_ATE (DW_ATE_signed, 0x5)
-DW_ATE (DW_ATE_signed_char, 0x6)
-DW_ATE (DW_ATE_unsigned, 0x7)
-DW_ATE (DW_ATE_unsigned_char, 0x8)
-/* DWARF 3. */
-DW_ATE (DW_ATE_imaginary_float, 0x9)
-DW_ATE (DW_ATE_packed_decimal, 0xa)
-DW_ATE (DW_ATE_numeric_string, 0xb)
-DW_ATE (DW_ATE_edited, 0xc)
-DW_ATE (DW_ATE_signed_fixed, 0xd)
-DW_ATE (DW_ATE_unsigned_fixed, 0xe)
-DW_ATE (DW_ATE_decimal_float, 0xf)
-/* DWARF 4. */
-DW_ATE (DW_ATE_UTF, 0x10)
-
-DW_ATE_DUP (DW_ATE_lo_user, 0x80)
-DW_ATE_DUP (DW_ATE_hi_user, 0xff)
-
-/* HP extensions. */
-DW_ATE (DW_ATE_HP_float80, 0x80) /* Floating-point (80 bit). */
-DW_ATE (DW_ATE_HP_complex_float80, 0x81) /* Complex floating-point (80 bit). */
-DW_ATE (DW_ATE_HP_float128, 0x82) /* Floating-point (128 bit). */
-DW_ATE (DW_ATE_HP_complex_float128, 0x83) /* Complex fp (128 bit). */
-DW_ATE (DW_ATE_HP_floathpintel, 0x84) /* Floating-point (82 bit IA64). */
-DW_ATE (DW_ATE_HP_imaginary_float80, 0x85)
-DW_ATE (DW_ATE_HP_imaginary_float128, 0x86)
-DW_ATE (DW_ATE_HP_VAX_float, 0x88) /* F or G floating. */
-DW_ATE (DW_ATE_HP_VAX_float_d, 0x89) /* D floating. */
-DW_ATE (DW_ATE_HP_packed_decimal, 0x8a) /* Cobol. */
-DW_ATE (DW_ATE_HP_zoned_decimal, 0x8b) /* Cobol. */
-DW_ATE (DW_ATE_HP_edited, 0x8c) /* Cobol. */
-DW_ATE (DW_ATE_HP_signed_fixed, 0x8d) /* Cobol. */
-DW_ATE (DW_ATE_HP_unsigned_fixed, 0x8e) /* Cobol. */
-DW_ATE (DW_ATE_HP_VAX_complex_float, 0x8f) /* F or G floating complex. */
-DW_ATE (DW_ATE_HP_VAX_complex_float_d, 0x90) /* D floating complex. */
-
-DW_END_ATE
-
-DW_FIRST_CFA (DW_CFA_advance_loc, 0x40)
-DW_CFA (DW_CFA_offset, 0x80)
-DW_CFA (DW_CFA_restore, 0xc0)
-DW_CFA (DW_CFA_nop, 0x00)
-DW_CFA (DW_CFA_set_loc, 0x01)
-DW_CFA (DW_CFA_advance_loc1, 0x02)
-DW_CFA (DW_CFA_advance_loc2, 0x03)
-DW_CFA (DW_CFA_advance_loc4, 0x04)
-DW_CFA (DW_CFA_offset_extended, 0x05)
-DW_CFA (DW_CFA_restore_extended, 0x06)
-DW_CFA (DW_CFA_undefined, 0x07)
-DW_CFA (DW_CFA_same_value, 0x08)
-DW_CFA (DW_CFA_register, 0x09)
-DW_CFA (DW_CFA_remember_state, 0x0a)
-DW_CFA (DW_CFA_restore_state, 0x0b)
-DW_CFA (DW_CFA_def_cfa, 0x0c)
-DW_CFA (DW_CFA_def_cfa_register, 0x0d)
-DW_CFA (DW_CFA_def_cfa_offset, 0x0e)
-/* DWARF 3. */
-DW_CFA (DW_CFA_def_cfa_expression, 0x0f)
-DW_CFA (DW_CFA_expression, 0x10)
-DW_CFA (DW_CFA_offset_extended_sf, 0x11)
-DW_CFA (DW_CFA_def_cfa_sf, 0x12)
-DW_CFA (DW_CFA_def_cfa_offset_sf, 0x13)
-DW_CFA (DW_CFA_val_offset, 0x14)
-DW_CFA (DW_CFA_val_offset_sf, 0x15)
-DW_CFA (DW_CFA_val_expression, 0x16)
-
-DW_CFA (DW_CFA_lo_user, 0x1c)
-DW_CFA (DW_CFA_hi_user, 0x3f)
-
-/* SGI/MIPS specific. */
-DW_CFA (DW_CFA_MIPS_advance_loc8, 0x1d)
-/* GNU extensions. */
-DW_CFA (DW_CFA_GNU_window_save, 0x2d)
-DW_CFA (DW_CFA_GNU_args_size, 0x2e)
-DW_CFA (DW_CFA_GNU_negative_offset_extended, 0x2f)
-
-DW_END_CFA
diff --git a/include/dwarf2.h b/include/dwarf2.h
deleted file mode 100644
index ca440dd42..000000000
--- a/include/dwarf2.h
+++ /dev/null
@@ -1,430 +0,0 @@
-/* Declarations and definitions of codes relating to the DWARF2 and
- DWARF3 symbolic debugging information formats.
- Copyright (C) 1992, 1993, 1995, 1996, 1997, 1999, 2000, 2001, 2002,
- 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
- Free Software Foundation, Inc.
-
- Written by Gary Funck (gary@intrepid.com) The Ada Joint Program
- Office (AJPO), Florida State University and Silicon Graphics Inc.
- provided support for this effort -- June 21, 1995.
-
- Derived from the DWARF 1 implementation written by Ron Guilmette
- (rfg@netcom.com), November 1990.
-
- This file is part of GCC.
-
- GCC 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 3, or (at your option) any later
- version.
-
- GCC 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.
-
- Under Section 7 of GPL version 3, you are granted additional
- permissions described in the GCC Runtime Library Exception, version
- 3.1, as published by the Free Software Foundation.
-
- You should have received a copy of the GNU General Public License and
- a copy of the GCC Runtime Library Exception along with this program;
- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
- <http://www.gnu.org/licenses/>. */
-
-/* This file is derived from the DWARF specification (a public document)
- Revision 2.0.0 (July 27, 1993) developed by the UNIX International
- Programming Languages Special Interest Group (UI/PLSIG) and distributed
- by UNIX International. Copies of this specification are available from
- UNIX International, 20 Waterview Boulevard, Parsippany, NJ, 07054.
-
- This file also now contains definitions from the DWARF 3 specification
- published Dec 20, 2005, available from: http://dwarf.freestandards.org. */
-
-#ifndef _DWARF2_H
-#define _DWARF2_H
-
-#define DW_TAG(name, value) , name = value
-#define DW_TAG_DUP(name, value) , name = value
-#define DW_FORM(name, value) , name = value
-#define DW_AT(name, value) , name = value
-#define DW_AT_DUP(name, value) , name = value
-#define DW_OP(name, value) , name = value
-#define DW_OP_DUP(name, value) , name = value
-#define DW_ATE(name, value) , name = value
-#define DW_ATE_DUP(name, value) , name = value
-#define DW_CFA(name, value) , name = value
-
-#define DW_FIRST_TAG(name, value) enum dwarf_tag { \
- name = value
-#define DW_END_TAG };
-#define DW_FIRST_FORM(name, value) enum dwarf_form { \
- name = value
-#define DW_END_FORM };
-#define DW_FIRST_AT(name, value) enum dwarf_attribute { \
- name = value
-#define DW_END_AT };
-#define DW_FIRST_OP(name, value) enum dwarf_location_atom { \
- name = value
-#define DW_END_OP };
-#define DW_FIRST_ATE(name, value) enum dwarf_type { \
- name = value
-#define DW_END_ATE };
-#define DW_FIRST_CFA(name, value) enum dwarf_call_frame_info { \
- name = value
-#define DW_END_CFA };
-
-#include "dwarf2.def"
-
-#undef DW_FIRST_TAG
-#undef DW_END_TAG
-#undef DW_FIRST_FORM
-#undef DW_END_FORM
-#undef DW_FIRST_AT
-#undef DW_END_AT
-#undef DW_FIRST_OP
-#undef DW_END_OP
-#undef DW_FIRST_ATE
-#undef DW_END_ATE
-#undef DW_FIRST_CFA
-#undef DW_END_CFA
-
-#undef DW_TAG
-#undef DW_TAG_DUP
-#undef DW_FORM
-#undef DW_AT
-#undef DW_AT_DUP
-#undef DW_OP
-#undef DW_OP_DUP
-#undef DW_ATE
-#undef DW_ATE_DUP
-#undef DW_CFA
-
-/* Flag that tells whether entry has a child or not. */
-#define DW_children_no 0
-#define DW_children_yes 1
-
-#define DW_AT_stride_size DW_AT_bit_stride /* Note: The use of DW_AT_stride_size is deprecated. */
-#define DW_AT_stride DW_AT_byte_stride /* Note: The use of DW_AT_stride is deprecated. */
-
-/* Decimal sign encodings. */
-enum dwarf_decimal_sign_encoding
- {
- /* DWARF 3. */
- DW_DS_unsigned = 0x01,
- DW_DS_leading_overpunch = 0x02,
- DW_DS_trailing_overpunch = 0x03,
- DW_DS_leading_separate = 0x04,
- DW_DS_trailing_separate = 0x05
- };
-
-/* Endianity encodings. */
-enum dwarf_endianity_encoding
- {
- /* DWARF 3. */
- DW_END_default = 0x00,
- DW_END_big = 0x01,
- DW_END_little = 0x02,
-
- DW_END_lo_user = 0x40,
- DW_END_hi_user = 0xff
- };
-
-/* Array ordering names and codes. */
-enum dwarf_array_dim_ordering
- {
- DW_ORD_row_major = 0,
- DW_ORD_col_major = 1
- };
-
-/* Access attribute. */
-enum dwarf_access_attribute
- {
- DW_ACCESS_public = 1,
- DW_ACCESS_protected = 2,
- DW_ACCESS_private = 3
- };
-
-/* Visibility. */
-enum dwarf_visibility_attribute
- {
- DW_VIS_local = 1,
- DW_VIS_exported = 2,
- DW_VIS_qualified = 3
- };
-
-/* Virtuality. */
-enum dwarf_virtuality_attribute
- {
- DW_VIRTUALITY_none = 0,
- DW_VIRTUALITY_virtual = 1,
- DW_VIRTUALITY_pure_virtual = 2
- };
-
-/* Case sensitivity. */
-enum dwarf_id_case
- {
- DW_ID_case_sensitive = 0,
- DW_ID_up_case = 1,
- DW_ID_down_case = 2,
- DW_ID_case_insensitive = 3
- };
-
-/* Calling convention. */
-enum dwarf_calling_convention
- {
- DW_CC_normal = 0x1,
- DW_CC_program = 0x2,
- DW_CC_nocall = 0x3,
-
- DW_CC_lo_user = 0x40,
- DW_CC_hi_user = 0xff,
-
- DW_CC_GNU_renesas_sh = 0x40,
- DW_CC_GNU_borland_fastcall_i386 = 0x41,
-
- /* This DW_CC_ value is not currently generated by any toolchain. It is
- used internally to GDB to indicate OpenCL C functions that have been
- compiled with the IBM XL C for OpenCL compiler and use a non-platform
- calling convention for passing OpenCL C vector types. This value may
- be changed freely as long as it does not conflict with any other DW_CC_
- value defined here. */
- DW_CC_GDB_IBM_OpenCL = 0xff
- };
-
-/* Inline attribute. */
-enum dwarf_inline_attribute
- {
- DW_INL_not_inlined = 0,
- DW_INL_inlined = 1,
- DW_INL_declared_not_inlined = 2,
- DW_INL_declared_inlined = 3
- };
-
-/* Discriminant lists. */
-enum dwarf_discrim_list
- {
- DW_DSC_label = 0,
- DW_DSC_range = 1
- };
-
-/* Line number opcodes. */
-enum dwarf_line_number_ops
- {
- DW_LNS_extended_op = 0,
- DW_LNS_copy = 1,
- DW_LNS_advance_pc = 2,
- DW_LNS_advance_line = 3,
- DW_LNS_set_file = 4,
- DW_LNS_set_column = 5,
- DW_LNS_negate_stmt = 6,
- DW_LNS_set_basic_block = 7,
- DW_LNS_const_add_pc = 8,
- DW_LNS_fixed_advance_pc = 9,
- /* DWARF 3. */
- DW_LNS_set_prologue_end = 10,
- DW_LNS_set_epilogue_begin = 11,
- DW_LNS_set_isa = 12
- };
-
-/* Line number extended opcodes. */
-enum dwarf_line_number_x_ops
- {
- DW_LNE_end_sequence = 1,
- DW_LNE_set_address = 2,
- DW_LNE_define_file = 3,
- DW_LNE_set_discriminator = 4,
- /* HP extensions. */
- DW_LNE_HP_negate_is_UV_update = 0x11,
- DW_LNE_HP_push_context = 0x12,
- DW_LNE_HP_pop_context = 0x13,
- DW_LNE_HP_set_file_line_column = 0x14,
- DW_LNE_HP_set_routine_name = 0x15,
- DW_LNE_HP_set_sequence = 0x16,
- DW_LNE_HP_negate_post_semantics = 0x17,
- DW_LNE_HP_negate_function_exit = 0x18,
- DW_LNE_HP_negate_front_end_logical = 0x19,
- DW_LNE_HP_define_proc = 0x20,
- DW_LNE_HP_source_file_correlation = 0x80,
-
- DW_LNE_lo_user = 0x80,
- DW_LNE_hi_user = 0xff
- };
-
-/* Sub-opcodes for DW_LNE_HP_source_file_correlation. */
-enum dwarf_line_number_hp_sfc_ops
- {
- DW_LNE_HP_SFC_formfeed = 1,
- DW_LNE_HP_SFC_set_listing_line = 2,
- DW_LNE_HP_SFC_associate = 3
- };
-
-/* Type codes for location list entries.
- Extension for Fission. See http://gcc.gnu.org/wiki/DebugFission. */
-
-enum dwarf_location_list_entry_type
- {
- DW_LLE_GNU_end_of_list_entry = 0,
- DW_LLE_GNU_base_address_selection_entry = 1,
- DW_LLE_GNU_start_end_entry = 2,
- DW_LLE_GNU_start_length_entry = 3
- };
-
-#define DW_CIE_ID 0xffffffff
-#define DW64_CIE_ID 0xffffffffffffffffULL
-#define DW_CIE_VERSION 1
-
-#define DW_CFA_extended 0
-
-#define DW_CHILDREN_no 0x00
-#define DW_CHILDREN_yes 0x01
-
-#define DW_ADDR_none 0
-
-/* Source language names and codes. */
-enum dwarf_source_language
- {
- DW_LANG_C89 = 0x0001,
- DW_LANG_C = 0x0002,
- DW_LANG_Ada83 = 0x0003,
- DW_LANG_C_plus_plus = 0x0004,
- DW_LANG_Cobol74 = 0x0005,
- DW_LANG_Cobol85 = 0x0006,
- DW_LANG_Fortran77 = 0x0007,
- DW_LANG_Fortran90 = 0x0008,
- DW_LANG_Pascal83 = 0x0009,
- DW_LANG_Modula2 = 0x000a,
- /* DWARF 3. */
- DW_LANG_Java = 0x000b,
- DW_LANG_C99 = 0x000c,
- DW_LANG_Ada95 = 0x000d,
- DW_LANG_Fortran95 = 0x000e,
- DW_LANG_PLI = 0x000f,
- DW_LANG_ObjC = 0x0010,
- DW_LANG_ObjC_plus_plus = 0x0011,
- DW_LANG_UPC = 0x0012,
- DW_LANG_D = 0x0013,
- /* DWARF 4. */
- DW_LANG_Python = 0x0014,
- /* DWARF 5. */
- DW_LANG_Go = 0x0016,
-
- DW_LANG_C_plus_plus_11 = 0x001a, /* dwarf5.20141029.pdf DRAFT */
- DW_LANG_C11 = 0x001d,
- DW_LANG_C_plus_plus_14 = 0x0021,
-
- DW_LANG_lo_user = 0x8000, /* Implementation-defined range start. */
- DW_LANG_hi_user = 0xffff, /* Implementation-defined range start. */
-
- /* MIPS. */
- DW_LANG_Mips_Assembler = 0x8001,
- /* UPC. */
- DW_LANG_Upc = 0x8765,
- /* HP extensions. */
- DW_LANG_HP_Bliss = 0x8003,
- DW_LANG_HP_Basic91 = 0x8004,
- DW_LANG_HP_Pascal91 = 0x8005,
- DW_LANG_HP_IMacro = 0x8006,
- DW_LANG_HP_Assembler = 0x8007
- };
-
-/* Names and codes for macro information. */
-enum dwarf_macinfo_record_type
- {
- DW_MACINFO_define = 1,
- DW_MACINFO_undef = 2,
- DW_MACINFO_start_file = 3,
- DW_MACINFO_end_file = 4,
- DW_MACINFO_vendor_ext = 255
- };
-
-/* Names and codes for new style macro information. */
-enum dwarf_macro_record_type
- {
- DW_MACRO_GNU_define = 1,
- DW_MACRO_GNU_undef = 2,
- DW_MACRO_GNU_start_file = 3,
- DW_MACRO_GNU_end_file = 4,
- DW_MACRO_GNU_define_indirect = 5,
- DW_MACRO_GNU_undef_indirect = 6,
- DW_MACRO_GNU_transparent_include = 7,
- /* Extensions for DWZ multifile.
- See http://www.dwarfstd.org/ShowIssue.php?issue=120604.1&type=open . */
- DW_MACRO_GNU_define_indirect_alt = 8,
- DW_MACRO_GNU_undef_indirect_alt = 9,
- DW_MACRO_GNU_transparent_include_alt = 10,
- DW_MACRO_GNU_lo_user = 0xe0,
- DW_MACRO_GNU_hi_user = 0xff
- };
-
-/* @@@ For use with GNU frame unwind information. */
-
-#define DW_EH_PE_absptr 0x00
-#define DW_EH_PE_omit 0xff
-
-#define DW_EH_PE_uleb128 0x01
-#define DW_EH_PE_udata2 0x02
-#define DW_EH_PE_udata4 0x03
-#define DW_EH_PE_udata8 0x04
-#define DW_EH_PE_sleb128 0x09
-#define DW_EH_PE_sdata2 0x0A
-#define DW_EH_PE_sdata4 0x0B
-#define DW_EH_PE_sdata8 0x0C
-#define DW_EH_PE_signed 0x08
-
-#define DW_EH_PE_pcrel 0x10
-#define DW_EH_PE_textrel 0x20
-#define DW_EH_PE_datarel 0x30
-#define DW_EH_PE_funcrel 0x40
-#define DW_EH_PE_aligned 0x50
-
-#define DW_EH_PE_indirect 0x80
-
-/* Codes for the debug sections in a dwarf package (.dwp) file.
- Extensions for Fission. See http://gcc.gnu.org/wiki/DebugFissionDWP. */
-enum dwarf_sect
- {
- DW_SECT_INFO = 1,
- DW_SECT_TYPES = 2,
- DW_SECT_ABBREV = 3,
- DW_SECT_LINE = 4,
- DW_SECT_LOC = 5,
- DW_SECT_STR_OFFSETS = 6,
- DW_SECT_MACINFO = 7,
- DW_SECT_MACRO = 8,
- DW_SECT_MAX = 8
- };
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-/* Return the name of a DW_TAG_ constant, or NULL if the value is not
- recognized. */
-extern const char *get_DW_TAG_name (unsigned int tag);
-
-/* Return the name of a DW_AT_ constant, or NULL if the value is not
- recognized. */
-extern const char *get_DW_AT_name (unsigned int attr);
-
-/* Return the name of a DW_FORM_ constant, or NULL if the value is not
- recognized. */
-extern const char *get_DW_FORM_name (unsigned int form);
-
-/* Return the name of a DW_OP_ constant, or NULL if the value is not
- recognized. */
-extern const char *get_DW_OP_name (unsigned int op);
-
-/* Return the name of a DW_ATE_ constant, or NULL if the value is not
- recognized. */
-extern const char *get_DW_ATE_name (unsigned int enc);
-
-/* Return the name of a DW_CFA_ constant, or NULL if the value is not
- recognized. */
-extern const char *get_DW_CFA_name (unsigned int opc);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* _DWARF2_H */
diff --git a/include/dyn-string.h b/include/dyn-string.h
deleted file mode 100644
index 2b147271e..000000000
--- a/include/dyn-string.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/* An abstract string datatype.
- Copyright (C) 1998, 1999, 2000, 2002, 2004, 2005, 2009
- Free Software Foundation, Inc.
- Contributed by Mark Mitchell (mark@markmitchell.com).
-
-This file is part of GCC.
-
-GCC 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.
-
-GCC 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 GCC; see the file COPYING. If not, write to
-the Free Software Foundation, 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-#ifndef DYN_STRING_H
-#define DYN_STRING_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct dyn_string
-{
- int allocated; /* The amount of space allocated for the string. */
- int length; /* The actual length of the string. */
- char *s; /* The string itself, NUL-terminated. */
-}* dyn_string_t;
-
-/* The length STR, in bytes, not including the terminating NUL. */
-#define dyn_string_length(STR) \
- ((STR)->length)
-
-/* The NTBS in which the contents of STR are stored. */
-#define dyn_string_buf(STR) \
- ((STR)->s)
-
-/* Compare DS1 to DS2 with strcmp. */
-#define dyn_string_compare(DS1, DS2) \
- (strcmp ((DS1)->s, (DS2)->s))
-
-
-extern int dyn_string_init (struct dyn_string *, int);
-extern dyn_string_t dyn_string_new (int);
-extern void dyn_string_delete (dyn_string_t);
-extern char *dyn_string_release (dyn_string_t);
-extern dyn_string_t dyn_string_resize (dyn_string_t, int);
-extern void dyn_string_clear (dyn_string_t);
-extern int dyn_string_copy (dyn_string_t, dyn_string_t);
-extern int dyn_string_copy_cstr (dyn_string_t, const char *);
-extern int dyn_string_prepend (dyn_string_t, dyn_string_t);
-extern int dyn_string_prepend_cstr (dyn_string_t, const char *);
-extern int dyn_string_insert (dyn_string_t, int, dyn_string_t);
-extern int dyn_string_insert_cstr (dyn_string_t, int, const char *);
-extern int dyn_string_insert_char (dyn_string_t, int, int);
-extern int dyn_string_append (dyn_string_t, dyn_string_t);
-extern int dyn_string_append_cstr (dyn_string_t, const char *);
-extern int dyn_string_append_char (dyn_string_t, int);
-extern int dyn_string_substring (dyn_string_t, dyn_string_t, int, int);
-extern int dyn_string_eq (dyn_string_t, dyn_string_t);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* !defined (DYN_STRING_H) */
diff --git a/include/elf/ChangeLog b/include/elf/ChangeLog
deleted file mode 100644
index c2577e889..000000000
--- a/include/elf/ChangeLog
+++ /dev/null
@@ -1,1892 +0,0 @@
-2013-10-14 Chao-ying Fu <Chao-ying.Fu@imgtec.com>
-
- * mips.h (enum): Add Tag_GNU_MIPS_ABI_MSA.
- (enum): Add Val_GNU_MIPS_ABI_MSA_ANY and Val_GNU_MIPS_ABI_MSA_128.
-
-2013-09-17 Doug Gilmore <Doug.Gilmore@imgtec.com>
-
- * mips.h (EF_MIPS_FP64): New e_flags bit.
-
-2013-08-09 Nick Clifton <nickc@redhat.com>
-
- * rl78.c (E_FLAG_RL78_G10): Define.
-
-2013-07-15 Maciej W. Rozycki <macro@codesourcery.com>
-
- * mips.h (Tag_GNU_MIPS_ABI_FP): Remove comment.
- (Val_GNU_MIPS_ABI_FP_ANY, Val_GNU_MIPS_ABI_FP_DOUBLE,
- Val_GNU_MIPS_ABI_FP_SINGLE, Val_GNU_MIPS_ABI_FP_SOFT,
- Val_GNU_MIPS_ABI_FP_64): New enum.
-
-2013-07-12 Maciej W. Rozycki <macro@codesourcery.com>
-
- * mips.h (EF_MIPS_NAN2008): New macro.
-
-2013-07-08 Tristan Gingold <gingold@adacore.com>
-
- * ia64.h (STB_VMS_WEAK, STB_VMS_SYSTEM): Add.
-
-2013-07-05 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
-
- * s390.h: Add new relocs R_390_PC12DBL, R_390_PLT12DBL,
- R_390_PC24DBL, and R_390_PLT24DBL.
-
-2013-06-26 Yufeng Zhang <yufeng.zhang@arm.com>
-
- * aarch64.h: Add ELF32 reloc codes and remove fake ELF64 ones.
-
-2013-06-24 Maciej W. Rozycki <macro@codesourcery.com>
-
- * mips.h (ELF_ST_IS_MIPS_PLT): Respect STO_MIPS16 setting.
- (ELF_ST_SET_MIPS_PLT): Likewise.
-
-2013-06-19 Will Newton <will.newton@linaro.org>
-
- * aarch64.h: Remove R_AARCH64_IRELATIVE.
-
-2013-06-07 Will Newton <will.newton@linaro.org>
-
- * aarch64.h: Add R_AARCH64_IRELATIVE reloc.
-
-2013-06-06 Maciej W. Rozycki <macro@codesourcery.com>
-
- * mips.h (ELF_ST_SET_MIPS_PIC): Clear any STO_MIPS16 setting.
-
-2013-05-30 Paul Brook <paul@codesourcery.com>
-
- * mips.h (R_MIPS_EH): New.
-
-2013-05-28 Yufeng Zhang <yufeng.zhang@arm.com>
-
- * aarch64.h (R_AARCH64_TLSDESC_LD64_PREL19): Rename to ...
- (R_AARCH64_TLSDESC_LD_PREL19): ... this.
- (R_AARCH64_TLSDESC_ADR_PAGE): Rename to ...
- (R_AARCH64_TLSDESC_ADR_PAGE21): ... this.
-
-2013-05-22 H.J. Lu <hongjiu.lu@intel.com>
-
- * common.h (EM_INTEL205): New.
- (EM_INTEL206): Likewise.
- (EM_INTEL207): Likewise.
- (EM_INTEL208): Likewise.
- (EM_INTEL209): Likewise.
-
-2013-05-02 Nick Clifton <nickc@redhat.com>
-
- * msp430.h: Add MSP430X relocs.
- Add some more MSP430 machine numbers.
- Add values used by .MSP430.attributes section.
-
-2013-03-21 Michael Schewe <michael.schewe@gmx.net>
-
- * h8.h: Add new reloc R_H8_DISP32A16 for relaxation of
- mov @(disp:32,ERx) to mov @(disp:16,ERx).
-
-2013-03-08 Andreas Arnez <arnez@linux.vnet.ibm.com>
-
- * common.h (NT_S390_TDB): Define.
-
-2013-02-06 Sandra Loosemore <sandra@codesourcery.com>
- Andrew Jenner <andrew@codesourcery.com>
-
- Based on patches from Altera Corporation.
-
- * nios2.h: New file.
-
-2013-01-24 Nick Clifton <nickc@redhat.com>
-
- * v850.h: Add support for e3v5 architecture.
- Reorganize processor selection macros.
-
-2013-01-16 H.J. Lu <hongjiu.lu@intel.com>
-
- * i386.h (R_386_SIZE32): Fill it.
- * x86-64.h (R_X86_64_SIZE32): Likewise.
- (R_X86_64_SIZE64): Likewise.
-
-2013-01-10 Will Newton <will.newton@imgtec.com>
-
- * common.h: Fix case of "Meta".
- * metag.h: New file.
-
-2013-01-08 Yufeng Zhang <yufeng.zhang@arm.com>
-
- * common.h (NT_ARM_TLS, NT_ARM_HW_BREAK, NT_ARM_HW_WATCH): New macro
- definitions.
-
-2013-01-04 Juergen Urban <JuergenUrban@gmx.de>
-
- * mips.h: Add MIPS machine variant number for r5900 which is
- compatible with old Playstation 2 software.
-
-2012-11-16 H.J. Lu <hongjiu.lu@intel.com>
-
- * common.h (DF_1_CONLFAT): Renamed to ...
- (DF_1_CONFALT): This.
- (DF_1_ENDFILTEE): New.
- (DF_1_DISPRELDNE): Likewise.
- (DF_1_DISPRELPND): Likewise.
- (DF_1_NODIRECT): Likewise.
- (DF_1_IGNMULDEF): Likewise.
- (DF_1_NOKSYMS): Likewise.
- (DF_1_NOHDR): Likewise.
- (DF_1_EDITED): Likewise.
- (DF_1_NORELOC): Likewise.
- (DF_1_SYMINTPOSE): Likewise.
- (DF_1_GLOBAUDIT): Likewise.
- (DF_1_SINGLETON): Likewise.
-
-2012-11-09 Nick Clifton <nickc@redhat.com>
-
- * rx.h (EF_RX_CPU_RX): Add comment.
- (E_FLAG_RX_ABI): Define.
-
- * v850.h: Add RH850 ABI values.
-
-2012-11-08 Maciej W. Rozycki <macro@codesourcery.com>
-
- * mips.h (EF_MIPS_32BITMODE): Move next to lower-order bits.
-
-2012-11-01 Tom Tromey <tromey@redhat.com>
-
- * common.h (NT_386_TLS, NT_386_IOPERM): New defines.
-
-2012-10-30 Steve McIntyre <steve.mcintyre@linaro.org>
-
- * elf/arm.h (EF_ARM_ABI_FLOAT_SOFT): New define.
- (EF_ARM_ABI_FLOAT_HARD): Likewise.
-
-2012-10-23 Tom Tromey <tromey@redhat.com>
-
- * common.h (NT_SIGINFO, NT_FILE): New defines.
-
-2012-08-27 Walter Lee <walt@tilera.com>
-
- * tilegx.h (R_TILEGX_IMM16_X0_HW0_PLT_PCREL): New relocation.
- (R_TILEGX_IMM16_X1_HW0_PLT_PCREL): Ditto.
- (R_TILEGX_IMM16_X0_HW1_PLT_PCREL): Ditto.
- (R_TILEGX_IMM16_X1_HW1_PLT_PCREL): Ditto.
- (R_TILEGX_IMM16_X0_HW2_PLT_PCREL): Ditto.
- (R_TILEGX_IMM16_X1_HW2_PLT_PCREL): Ditto.
- (R_TILEGX_IMM16_X0_HW3_PLT_PCREL): Ditto.
- (R_TILEGX_IMM16_X1_HW3_PLT_PCREL): Ditto.
- (R_TILEGX_IMM16_X0_HW0_LAST_PLT_PCREL): Ditto.
- (R_TILEGX_IMM16_X1_HW0_LAST_PLT_PCREL): Ditto.
- (R_TILEGX_IMM16_X0_HW1_LAST_PLT_PCREL): Ditto.
- (R_TILEGX_IMM16_X1_HW1_LAST_PLT_PCREL): Ditto.
- (R_TILEGX_IMM16_X0_HW2_LAST_PLT_PCREL ): Ditto.
- (R_TILEGX_IMM16_X1_HW2_LAST_PLT_PCREL): Ditto.
-
-2012-08-13 Ian Bolton <ian.bolton@arm.com>
- Laurent Desnogues <laurent.desnogues@arm.com>
- Jim MacArthur <jim.macarthur@arm.com>
- Marcus Shawcroft <marcus.shawcroft@arm.com>
- Nigel Stephens <nigel.stephens@arm.com>
- Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
- Richard Earnshaw <rearnsha@arm.com>
- Sofiane Naci <sofiane.naci@arm.com>
- Tejas Belagod <tejas.belagod@arm.com>
- Yufeng Zhang <yufeng.zhang@arm.com>
-
- * aarch64.h: New file.
- * common.h (EM_res183): Rename to EM_AARCH64.
- (EM_res184): Rename to EM_ARM184.
-
-2012-06-28 Iain Sandoe <iain@codesourcery.com>
-
- * common.h (AT_L1I_CACHESHAPE, AT_L1D_CACHESHAPE,
- AT_L2_CACHESHAPE, AT_L3_CACHESHAPE): New defines.
-
-2012-05-16 Georg-Johann Lay <avr@gjlay.de>
-
- PR target/13503
- * avr.h (RELOC_NUMBERS): Rename R_AVR_8_HHI8 to R_AVR_8_HLO8.
-
-2012-05-15 James Murray <jsm@jsm-net.demon.co.uk>
-
- * m68hc11.h (R_M68HC12_16B, R_M68HC12_PCREL_9, R_M68HC12_PCREL_10)
- R_M68HC12_HI8XG, R_M68HC12_LO8XG): New relocations.
- (E_M68HC11_XGATE_RAMOFFSET): Define.
-
-2012-05-14 James Lemke <jwlemke@codesourcery.com>
- * ppc.h (SEC_PPC_VLE): Remove.
-
-2012-05-14 Catherine Moore <clm@codesourcery.com>
- James Lemke <jwlemke@codesourcery.com>
-
- * ppc.h (R_PPC_VLE_REL8): New reloction.
- (R_PPC_VLE_REL15): Likewise.
- (R_PPC_VLE_REL24): Likewise.
- (R_PPC_VLE_LO16A): Likewise.
- (R_PPC_VLE_LO16D): Likewise.
- (R_PPC_VLE_HI16A): Likewise.
- (R_PPC_VLE_HI16D): Likewise.
- (R_PPC_VLE_HA16A): Likewise.
- (R_PPC_VLE_HA16D): Likewise.
- (R_PPC_VLE_SDA21): Likewise.
- (R_PPC_VLE_SDA21_LO): Likewise.
- (R_PPC_VLE_SDAREL_LO16A): Likewise.
- (R_PPC_VLE_SDAREL_LO16D): Likewise.
- (R_PPC_VLE_SDAREL_HI16A): Likewise.
- (R_PPC_VLE_SDAREL_HI16D): Likewise.
- (R_PPC_VLE_SDAREL_HA16A): Likewise.
- (R_PPC_VLE_SDAREL_HA16D): Likewise.
- (SEC_PPC_VLE): Remove.
- (PF_PPC_VLE): New program header flag.
- (SHF_PPC_VLE): New section header flag.
- (vle_opcodes, vle_num_opcodes): New.
- (VLE_OP): New macro.
- (VLE_OP_TO_SEG): New macro.
-
-2012-05-11 Georg-Johann Lay <avr@gjlay.de
-
- PR target/13503
- * elf/avr.h (RELOC_NUMBERS): Add values for R_AVR_8_LO8,
- R_AVR_8_HI8, R_AVR_8_HHI8.
-
-2012-05-03 Sean Keys <skeys@ipdatasys.com>
-
- * xgate.h: Mininal file to support XGATE relocations.
-
-2012-04-27 David S. Miller <davem@davemloft.net>
-
- * sparc.h: Add new ELF_SPARC_HWCAP_* defines for crypto,
- pause, and compare-and-branch instructions.
-
-2012-03-07 Nick Clifton <nickc@redhat.com>
-
- * mn10300.h (elf_mn10300_reloc_type): Add R_MN10300_TLS_GD,
- R_MN10300_TLS_LD, R_MN10300_TLS_LDO, R_MN10300_TLS_GOTIE,
- R_MN10300_TLS_IE, R_MN10300_TLS_LE, R_MN10300_TLS_DPTMOD,
- R_MN10300_TLS_DTPOFF and R_MN10300_TLS_TPOFF.
-
-2012-02-25 Walter Lee <walt@tilera.com>
-
- * tilegx.h (R_TILEGX_IMM16_X0_HW1_GOT): Delete.
- (R_TILEGX_IMM16_X1_HW1_GOT): Ditto.
- (R_TILEGX_IMM16_X0_HW2_GOT): Ditto.
- (R_TILEGX_IMM16_X1_HW2_GOT): Ditto.
- (R_TILEGX_IMM16_X0_HW3_GOT): Ditto.
- (R_TILEGX_IMM16_X1_HW3_GOT): Ditto.
- (R_TILEGX_IMM16_X0_HW2_LAST_GOT): Ditto.
- (R_TILEGX_IMM16_X1_HW2_LAST_GOT): Ditto.
- (R_TILEGX_IMM16_X0_HW1_TLS_GD): Ditto.
- (R_TILEGX_IMM16_X1_HW1_TLS_GD): Ditto.
- (R_TILEGX_IMM16_X0_HW2_TLS_GD): Ditto.
- (R_TILEGX_IMM16_X1_HW2_TLS_GD): Ditto.
- (R_TILEGX_IMM16_X0_HW3_TLS_GD): Ditto.
- (R_TILEGX_IMM16_X1_HW3_TLS_GD): Ditto.
- (R_TILEGX_IMM16_X0_HW2_LAST_TLS_GD): Ditto.
- (R_TILEGX_IMM16_X1_HW2_LAST_TLS_GD): Ditto.
- (R_TILEGX_IMM16_X0_HW1_TLS_IE): Ditto.
- (R_TILEGX_IMM16_X1_HW1_TLS_IE): Ditto.
- (R_TILEGX_IMM16_X0_HW2_TLS_IE): Ditto.
- (R_TILEGX_IMM16_X1_HW2_TLS_IE): Ditto.
- (R_TILEGX_IMM16_X0_HW3_TLS_IE): Ditto.
- (R_TILEGX_IMM16_X1_HW3_TLS_IE): Ditto.
- (R_TILEGX_IMM16_X0_HW2_LAST_TLS_IE): Ditto.
- (R_TILEGX_IMM16_X1_HW2_LAST_TLS_IE): Ditto.
- (R_TILEGX_IMM16_X0_HW0_TLS_LE): New relocation.
- (R_TILEGX_IMM16_X1_HW0_TLS_LE): Ditto.
- (R_TILEGX_IMM16_X0_HW0_LAST_TLS_LE): Ditto.
- (R_TILEGX_IMM16_X1_HW0_LAST_TLS_LE): Ditto.
- (R_TILEGX_IMM16_X0_HW1_LAST_TLS_LE): Ditto.
- (R_TILEGX_IMM16_X1_HW1_LAST_TLS_LE): Ditto.
- (R_TILEGX_TLS_GD_CALL): Ditto.
- (R_TILEGX_IMM8_X0_TLS_GD_ADD): Ditto.
- (R_TILEGX_IMM8_X1_TLS_GD_ADD): Ditto.
- (R_TILEGX_IMM8_Y0_TLS_GD_ADD): Ditto.
- (R_TILEGX_IMM8_Y1_TLS_GD_ADD): Ditto.
- (R_TILEGX_TLS_IE_LOAD): Ditto.
- (R_TILEGX_IMM8_X0_TLS_ADD): Ditto.
- (R_TILEGX_IMM8_X1_TLS_ADD): Ditto.
- (R_TILEGX_IMM8_Y0_TLS_ADD): Ditto.
- (R_TILEGX_IMM8_Y1_TLS_ADD): Ditto.
- * tilepro.h (R_TILEPRO_TLS_GD_CALL): New relocation.
- (R_TILEPRO_IMM8_X0_TLS_GD_ADD): Ditto.
- (R_TILEPRO_IMM8_X1_TLS_GD_ADD): Ditto.
- (R_TILEPRO_IMM8_Y0_TLS_GD_ADD): Ditto.
- (R_TILEPRO_IMM8_Y1_TLS_GD_ADD): Ditto.
- (R_TILEPRO_TLS_IE_LOAD): Ditto.
- (R_TILEPRO_IMM16_X0_TLS_LE): Ditto.
- (R_TILEPRO_IMM16_X1_TLS_LE): Ditto.
- (R_TILEPRO_IMM16_X0_TLS_LE_LO): Ditto.
- (R_TILEPRO_IMM16_X1_TLS_LE_LO): Ditto.
- (R_TILEPRO_IMM16_X0_TLS_LE_HI): Ditto.
- (R_TILEPRO_IMM16_X1_TLS_LE_HI): Ditto.
- (R_TILEPRO_IMM16_X0_TLS_LE_HA): Ditto.
- (R_TILEPRO_IMM16_X1_TLS_LE_HA): Ditto.
-
-2011-12-22 DJ Delorie <dj@redhat.com>
-
- * rl78.h (R_RL78_RH_RELAX, R_RL78_RH_SFR, R_RL78_RH_SADDR): New.
- (RL78_RELAXA_BRA, RL78_RELAXA_ADDR16: New.
-
-2011-12-19 Chung-Lin Tang <cltang@codesourcery.com>
-
- * mips.h (elf_mips_reloc_type): Add R_MIPS16_TLS_* entries.
-
-2011-12-06 Ulrich Weigand <uweigand@de.ibm.com>
-
- * common.h (NT_S390_LAST_BREAK): Define.
- (NT_S390_SYSTEM_CALL): Likewise.
-
-2011-11-01 DJ Delorie <dj@redhat.com>
-
- * common.h (EM_RL78, EM_78K0R): New.
- * rl78.h: New.
-
-2011-10-25 Joern Rennecke <joern.rennecke@embecosm.com>
-
- * epiphany.h: New file.
- * common.h (EM_ADAPTEVA_EPIPHANY): Define.
-
-2011-10-10 Alan Modra <amodra@gmail.com>
-
- * ppc64.h (R_PPC64_TOCSAVE): Add.
-
-2011-10-05 DJ Delorie <dj@redhat.com>
-
- * rx.h (E_FLAG_RX_PID): New.
-
-2011-09-21 David S. Miller <davem@davemloft.net>
-
- * sparc.h (Tag_GNU_Sparc_HWCAPS): New object attribute.
- (ELF_SPARC_HWCAP_*): New HWCAPS bitmask values.
-
-2011-08-12 H.J. Lu <hongjiu.lu@intel.com>
-
- PR ld/13082
- * x86-64.h (R_X86_64_RELATIVE64): New.
-
-2011-07-24 Chao-ying Fu <fu@mips.com>
- Maciej W. Rozycki <macro@codesourcery.com>
-
- * mips.h (R_MICROMIPS_min): New relocations.
- (R_MICROMIPS_26_S1): Likewise.
- (R_MICROMIPS_HI16, R_MICROMIPS_LO16): Likewise.
- (R_MICROMIPS_GPREL16, R_MICROMIPS_LITERAL): Likewise.
- (R_MICROMIPS_GOT16, R_MICROMIPS_PC7_S1): Likewise.
- (R_MICROMIPS_PC10_S1, R_MICROMIPS_PC16_S1): Likewise.
- (R_MICROMIPS_CALL16, R_MICROMIPS_GOT_DISP): Likewise.
- (R_MICROMIPS_GOT_PAGE, R_MICROMIPS_GOT_OFST): Likewise.
- (R_MICROMIPS_GOT_HI16, R_MICROMIPS_GOT_LO16): Likewise.
- (R_MICROMIPS_SUB, R_MICROMIPS_HIGHER): Likewise.
- (R_MICROMIPS_HIGHEST, R_MICROMIPS_CALL_HI16): Likewise.
- (R_MICROMIPS_CALL_LO16, R_MICROMIPS_SCN_DISP): Likewise.
- (R_MICROMIPS_JALR, R_MICROMIPS_HI0_LO16): Likewise.
- (R_MICROMIPS_TLS_GD, R_MICROMIPS_TLS_LDM): Likewise.
- (R_MICROMIPS_TLS_DTPREL_HI, R_MICROMIPS_TLS_DTPREL_LO): Likewise.
- (R_MICROMIPS_TLS_GOTTPREL): Likewise.
- (R_MICROMIPS_TLS_TPREL_HI16): Likewise.
- (R_MICROMIPS_TLS_TPREL_LO16): Likewise.
- (R_MICROMIPS_GPREL7_S2, R_MICROMIPS_PC23_S2): Likewise.
- (R_MICROMIPS_max): Likewise.
- (EF_MIPS_ARCH_ASE_MICROMIPS): New macro.
- (STO_MIPS_ISA, STO_MIPS_FLAGS): Likewise.
- (ELF_ST_IS_MIPS_PLT, ELF_ST_SET_MIPS_PLT): Likewise.
- (STO_MICROMIPS): Likewise.
- (ELF_ST_IS_MICROMIPS, ELF_ST_SET_MICROMIPS): Likewise.
- (ELF_ST_IS_COMPRESSED): Likewise.
- (STO_MIPS_PLT, STO_MIPS_PIC): Rework.
- (ELF_ST_IS_MIPS_PIC, ELF_ST_SET_MIPS_PIC): Likewise.
- (STO_MIPS16, ELF_ST_IS_MIPS16, ELF_ST_SET_MIPS16): Likewise.
-
-2011-07-22 H.J. Lu <hongjiu.lu@intel.com>
-
- * common.h (EM_K1OM): New.
-
-2011-07-03 Samuel Thibault <samuel.thibault@gnu.org>
- Thomas Schwinge <thomas@schwinge.name>
-
- PR binutils/12913
- * common.h (ELFOSABI_GNU): Define, replaces...
- (ELFOSABI_LINUX): ... this, kept as an alias.
- (ELFOSABI_HURD): Remove.
-
-2011-06-15 Ulrich Weigand <ulrich.weigand@linaro.org>
-
- * common.h (NT_ARM_VFP): Define.
-
-2011-06-13 Walter Lee <walt@tilera.com>
-
- * common.h: Add EM_TILEGX.
- * tilegx.h: New file.
- * tilepro.h: New file.
-
-2011-06-09 Tristan Gingold <gingold@adacore.com>
-
- * ia64.h (Elf64_External_VMS_ORIG_DYN_Note): New struct.
-
-2011-06-02 Nick Clifton <nickc@redhat.com>
-
- * common.h: Fix spelling mistake in comment.
- * reloc-macros.h: Likewise.
-
-2011-05-31 Paul Brook <paul@codesourcery.com>
-
- * arm.h (arm_st_branch_type): Add ST_BRANCH_UNKNOWN.
-
-2011-05-09 Paul Brook <paul@codesourcery.com>
-
- * tic6x.h (ELF_STRING_C6000_unwind,
- ELF_STRING_C6000_unwind_info, ELF_STRING_C6000_unwind_once,
- ELF_STRING_C6000_unwind_info_once): Define.
-
-2011-04-15 Sergio Durigan Junior <sergiodj@redhat.com>
-
- * common.h (NT_STAPSDT): New define.
-
-2011-03-31 Bernd Schmidt <bernds@codesourcery.com>
-
- * tic6x.h (R_C6000_JUMP_SPLOT, R_C6000_EHTYPE,
- R_C6000_PCR_H16, R_C6000_PCR_L16): New relocs.
- (SHN_TIC6X_SCOMMON): Define.
-
-2011-03-31 Tristan Gingold <gingold@adacore.com>
-
- * ia64.h (Elf64_External_VMS_Note): New struct.
- (NT_VMS_MHD, NT_VMS_LNM, NT_VMS_SRC, NT_VMS_TITLE, NT_VMS_EIDC)
- (NT_VMS_FPMODE, NT_VMS_LINKTIME, NT_VMS_IMGNAM, NT_VMS_IMGID)
- (NT_VMS_LINKID, NT_VMS_IMGBID, NT_VMS_GSTNAM, NT_VMS_ORIG_DYN)
- (NT_VMS_PATCHTIME) New macros.
-
-2011-03-14 Richard Sandiford <richard.sandiford@linaro.org>
-
- * arm.h (R_ARM_IRELATIVE): New relocation.
-
-2011-03-14 Richard Sandiford <richard.sandiford@linaro.org>
-
- * internal.h (elf_internal_sym): Add st_target_internal.
- * arm.h (arm_st_branch_type): New enum.
- (ARM_SYM_BRANCH_TYPE): New macro.
-
-2011-03-10 Nick Clifton <nickc@redhat.com>
-
- * common.h (EM_V850): V850s now supplied by Renesas.
-
-2011-02-25 Alan Modra <amodra@gmail.com>
-
- PR 12516
- * internal.h (ELF_SECTION_IN_SEGMENT_1): Don't match zero size
- sections at start or end of PT_DYNAMIC.
-
-2011-01-10 Nathan Sidwell <nathan@codesourcery.com>
- Glauber de Oliveira Costa <glommer@gmail.com>
-
- * arm.h (R_ARM_TLS_DESC, R_ARM_TLS_GOTDESC, R_ARM_TLS_CALL,
- R_ARM_TLS_DESCSEQ, T_ARM_THM_TLS_CALL, R_ARM_THM_TLS_DESCSEQ): New
- relocations.
-
-2010-11-16 Jie Zhang <jie.zhang@analog.com>
-
- * bfin.h (EF_BFIN_CODE_IN_L1): Define.
- (EF_BFIN_DATA_IN_L1): Define.
-
-2010-11-11 Mingming Sun <mingm.sun@gmail.com>
-
- * mips.h (E_MIPS_MACH_LS3A): Defined.
-
-2010-11-02 Joseph Myers <joseph@codesourcery.com>
-
- * tic6x-attrs.h (Tag_ABI_wchar_t, Tag_ABI_stack_align_needed,
- Tag_ABI_stack_align_preserved, Tag_ABI_PID, Tag_ABI_PIC,
- Tag_ABI_array_object_alignment,
- Tag_ABI_array_object_align_expected, Tag_ABI_conformance): Define.
-
-2010-10-29 Joseph Myers <joseph@codesourcery.com>
-
- * tic6x-attrs.h (Tag_ABI_compatibility): Define.
-
-2010-10-29 Bernd Schmidt <bernds@codesourcery.com>
- Joseph Myers <joseph@codesourcery.com>
-
- * tic6x-attrs.h (Tag_ABI_DSBT): New.
-
-2010-10-21 Joseph Myers <joseph@codesourcery.com>
-
- * tic6x-attrs.h (Tag_C6XABI_Tag_CPU_arch): Change to Tag_ISA,
- value 4.
- * tic6x.h (Values for Tag_C6XABI_Tag_CPU_arch): Rename for
- attribute renaming.
-
-2010-07-23 Naveen.H.S <naveen.S@kpitcummins.com>
- Ina Pandit <ina.pandit@kpitcummins.com>
-
- * v850.h: Add support for V850E2 and V850E2V3.
- (v850_reloc_type): Update the newly added relocations
-
-2010-07-20 Alan Modra <amodra@gmail.com>
-
- * internal.h (ELF_TBSS_SPECIAL): New macro, extracted from..
- (ELF_SECTION_SIZE): ..here.
- (ELF_SECTION_IN_SEGMENT_1): Add "strict" arg.
- (ELF_SECTION_IN_SEGMENT_STRICT): New macro.
-
-2010-06-25 Alan Modra <amodra@gmail.com>
-
- * ppc64.h (R_PPC64_LO_DS_OPT): Define.
-
-2010-06-15 Joseph Myers <joseph@codesourcery.com>
-
- * tic6x-attrs.h: New.
- * tic6x.h: Include elf/tic6x-attrs.h for attribute table.
- (C6XABI_Tag_CPU_arch_none, C6XABI_Tag_CPU_arch_C62X,
- C6XABI_Tag_CPU_arch_C67X, C6XABI_Tag_CPU_arch_C67XP,
- C6XABI_Tag_CPU_arch_C64X, C6XABI_Tag_CPU_arch_C64XP,
- C6XABI_Tag_CPU_arch_C674X): Define.
-
-2010-06-11 Tristan Gingold <gingold@adacore.com>
-
- * ia64.h (EF_IA_64_VMS_COMCOD, EF_IA_64_VMS_COMCOD_SUCCESS)
- (EF_IA_64_VMS_COMCOD_WARNING, EF_IA_64_VMS_COMCOD_ERROR)
- (EF_IA_64_VMS_COMCOD_ABORT, EF_IA_64_VMS_LINKAGES): Define.
- (VMS_LF_CALL_DEBUG, VMS_LF_NOP0BUFS, VMS_LF_P0IMAGE)
- (VMS_LF_MKTHREADS, VMS_LF_UPCALLS, VMS_LF_IMGSTA)
- (VMS_LF_INITIALIZE, VMS_LF_MAIN, VMS_LF_EXE_INIT)
- (VMS_LF_TBK_IN_IMG, VMS_LF_DBG_IN_IMG, VMS_LF_TBK_IN_DSF)
- (VMS_LF_DBG_IN_DSF, VMS_LF_SIGNATURES, VMS_LF_REL_SEG_OFF): Define.
- (VMS_STO_VISIBILITY, VMS_ST_VISIBILITY, VMS_STO_FUNC_TYPE)
- (VMS_ST_FUNC_TYPE, VMS_SFT_CODE_ADDR, VMS_SFT_SYMV_IDX)
- (VMS_SFT_FD, VMS_SFT_RESERVE, VMS_STO_LINKAGE, VMS_ST_LINKAGE)
- (VMS_STL_IGNORE, VMS_STL_RESERVE, VMS_STL_STD, VMS_STL_LNK): Define.
- (Elf64_External_VMS_IMAGE_FIXUP): New declaration.
- (Elf64_External_VMS_IMAGE_RELA): Ditto.
- (R_IA64_VMS_DIR8, R_IA64_VMS_DIR16LSB, R_IA64_VMS_CALL_SIGNATURE)
- (R_IA64_VMS_EXECLET_FUNC, R_IA64_VMS_EXECLET_DATA, R_IA64_VMS_FIX8)
- (R_IA64_VMS_FIX16, R_IA64_VMS_FIX32, R_IA64_VMS_FIX64)
- (R_IA64_VMS_FIXFD, R_IA64_VMS_ACC_LOAD, R_IA64_VMS_ACC_ADD)
- (R_IA64_VMS_ACC_SUB, R_IA64_VMS_ACC_MUL, R_IA64_VMS_ACC_DIV)
- (R_IA64_VMS_ACC_AND, R_IA64_VMS_ACC_IOR, R_IA64_VMS_ACC_EOR)
- (R_IA64_VMS_ACC_ASH, R_IA64_VMS_ACC_STO8, R_IA64_VMS_ACC_STO16LSH)
- (R_IA64_VMS_ACC_STO32LSH, R_IA64_VMS_ACC_STO64LSH): New.
-
-2010-05-25 Daniel Jacobowitz <dan@codesourcery.com>
- Joseph Myers <joseph@codesourcery.com>
- Andrew Stubbs <ams@codesourcery.com>
-
- * sh.h (EF_SH_PIC, EF_SH_FDPIC): Define.
- (R_SH_FIRST_INVALID_RELOC_6, R_SH_LAST_INVALID_RELOC_6): New. Adjust
- other invalid ranges.
- (R_SH_GOT20, R_SH_GOTOFF20, R_SH_GOTFUNCDESC, R_SH_GOTFUNCDESC20)
- (R_SH_GOTOFFFUNCDESC, R_SH_GOTOFFFUNCDESC20, R_SH_FUNCDESC)
- (R_SH_FUNCDESC_VALUE): New.
-
-2010-05-18 H.J. Lu <hongjiu.lu@intel.com>
-
- PR gas/11600
- * common.h (SHF_EXCLUDE): New.
-
- * i370.h (SHF_EXCLUDE): Removed.
- * or32.h (SHF_EXCLUDE): Likewise.
- * ppc.h (SHF_EXCLUDE): Likewise.
- * sparc.h (SHF_EXCLUDE): Likewise.
-
-2010-04-23 Alan Modra <amodra@gmail.com>
-
- * internal.h (ELF_SECTION_SIZE): Protect macro args with parentheses.
- Invert logic to clarify test for .tbss.
- (ELF_IS_SECTION_IN_SEGMENT): Rename to..
- (ELF_SECTION_IN_SEGMENT_1): ..this. Add check_vma param. Protect
- macro args with parentheses.
- (ELF_SECTION_IN_SEGMENT): Define.
- (ELF_IS_SECTION_IN_SEGMENT_FILE): Delete.
- (ELF_IS_SECTION_IN_SEGMENT_MEMORY): Delete.
-
-2010-04-15 Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
-
- * arm.h (Tag_FP_arch, Tag_ABI_align_needed, Tag_ABI_align_preserved,
- Tag_FP_HP_extension): Add new ABI attribute tags.
-
-2010-04-15 Nick Clifton <nickc@redhat.com>
-
- * alpha.h: Update copyright notice to use GPLv3.
- * arc.h: Likewise.
- * arm.h: Likewise.
- * avr.h: Likewise.
- * bfin.h: Likewise.
- * common.h: Likewise.
- * cr16.h: Likewise.
- * cr16c.h: Likewise.
- * cris.h: Likewise.
- * crx.h: Likewise.
- * d10v.h: Likewise.
- * d30v.h: Likewise.
- * dlx.h: Likewise.
- * dwarf.h: Likewise.
- * external.h: Likewise.
- * fr30.h: Likewise.
- * frv.h: Likewise.
- * h8.h: Likewise.
- * hppa.h: Likewise.
- * i370.h: Likewise.
- * i386.h: Likewise.
- * i860.h: Likewise.
- * i960.h: Likewise.
- * ia64.h: Likewise.
- * internal.h: Likewise.
- * ip2k.h: Likewise.
- * iq2000.h: Likewise.
- * lm32.h: Likewise.
- * m32c.h: Likewise.
- * m32r.h: Likewise.
- * m68hc11.h: Likewise.
- * m68k.h: Likewise.
- * mcore.h: Likewise.
- * mep.h: Likewise.
- * microblaze.h: Likewise.
- * mips.h: Likewise.
- * mmix.h: Likewise.
- * mn10200.h: Likewise.
- * moxie.h: Likewise.
- * msp430.h: Likewise.
- * mt.h: Likewise.
- * openrisc.h: Likewise.
- * or32.h: Likewise.
- * pj.h: Likewise.
- * ppc.h: Likewise.
- * ppc64.h: Likewise.
- * reloc-macros.h: Likewise.
- * rx.h: Likewise.
- * s390.h: Likewise.
- * sh.h: Likewise.
- * sparc.h: Likewise.
- * spu.h: Likewise.
- * v850.h: Likewise.
- * vax.h: Likewise.
- * vxworks.h: Likewise.
- * x86-64.h: Likewise.
- * xc16x.h: Likewise.
- * xstormy16.h: Likewise.
- * xtensa.h: Likewise.
-
-2010-04-08 David Stubbs <stubbs@icerasemi.com>
-
- * internal.h (ELF_IS_SECTION_IN_SEGMENT): PT_PHDR program headers
- cannot contain any sections.
-
-2010-03-25 Joseph Myers <joseph@codesourcery.com>
-
- * common.h (ELFOSABI_C6000_ELFABI, ELFOSABI_C6000_LINUX): Define.
- * tic6x.h: New.
-
-2010-03-05 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
-
- * common.h (VER_FLG_*): Document.
- (VER_FLG_INFO): Define.
-
-2010-02-23 Andrew Zabolotny <anpaza@mail.ru>
-
- PR binutils/11297
- * avr.h: (R_AVR_8): New relocation number.
-
-2010-02-18 Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
-
- * arm.h (Tag_MPextension_use): Renumber.
- (Tag_DIV_use): Add.
- (Tag_MPextension_use_legacy): Likewise.
-
-2010-02-09 Michael Holzheu <holzheu@de.ibm.com>
-
- * common.h (NT_S390_TIMER, NT_S390_TODCMP, NT_S390_TODPREG,
- NT_S390_CTRS and NT_S390_PREFIX): Define.
-
-2010-02-08 David S. Miller <davem@davemloft.net>
-
- * sparc.h (R_SPARC_JMP_IREL, R_SPARC_IRELATIVE): Define.
-
-2010-02-02 H.J. Lu <hongjiu.lu@intel.com>
-
- * common.h (NT_386_XSTATE): New.
-
-2010-01-21 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
-
- * s390.h (EF_S390_HIGH_GPRS): Added macro definition.
-
-2010-01-19 Daisuke Hatayama <d.hatayama@jp.fujitsu.com>
-
- * common.h (PN_XNUM): Define.
-
-2009-12-18 Ulrich Weigand <uweigand@de.ibm.com>
-
- * common.h (NT_S390_HIGH_GPRS): Define.
-
-2009-12-17 Alan Modra <amodra@bigpond.net.au>
-
- * ppc.h (R_PPC_RELAX32, R_PPC_RELAX32PC, R_PPC_RELAX32_PLT,
- R_PPC_RELAX32PC_PLT): Delete.
- (R_PPC_RELAX, R_PPC_RELAX_PLT, R_PPC_RELAX_PLTREL24): Define.
-
-2009-12-03 David Daney <ddaney@caviumnetworks.com>
- Adam Nemet <adambnemet@gmail.com>
-
- * mips.h (E_MIPS_MACH_OCTEON2): New machine flag.
-
-2009-11-28 Joseph Myers <joseph@codesourcery.com>
-
- * common.h (ELFOSABI_FENIXOS, EM_TI_C6000, EM_TI_C2000,
- EM_TI_C5500, EM_CUDA): Define.
- (EM_res140, EM_res141, EM_res142): Remove.
-
-2009-11-17 Paul Brook <paul@codesourcery.com>
- Daniel Jacobowitz <dan@codesourcery.com>
-
- * arm.h (TAG_CPU_ARCH_V7E_M): Define.
-
-2009-09-29 DJ Delorie <dj@redhat.com>
-
- * rx.h: New file.
-
-2009-09-21 Alan Modra <amodra@bigpond.net.au>
-
- * ppc.h (DT_PPC_TLSOPT): Define.
- * ppc64.h (DT_PPC64_TLSOPT): Define.
-
-2009-08-10 Daniel Gutson <dgutson@codesourcery.com>
-
- * arm.h: (SHT_ARM_DEBUGOVERLAY): New define.
- (SHT_ARM_OVERLAYSECTION): New define.
-
-2006-08-09 Bernd Schmidt <bernd.schmidt@analog.com>
-
- From Mike Frysinger <michael.frysinger@analog.com>
- * bfin.h (R_BFIN_UNUSED, R_BFIN_PCREL5M2, R_BFIN_UNUSED1,
- R_BFIN_PCREL10, R_BFIN_PCREL12_JUMP, R_BFIN_RIMM16,
- R_BFIN_LUIMM16, R_BFIN_HUIMM16, R_BFIN_PCREL12_JUMP_S,
- R_BFIN_PCREL24_JUMP_X, R_BFIN_PCREL24, R_BFIN_UNUSEDB,
- R_BFIN_UNUSEDC, R_BFIN_PCREL24_JUMP_L, R_BFIN_PCREL24_CALL_X,
- R_BFIN_VAR_EQ_SYMB, R_BFIN_BYTE_DATA, R_BFIN_BYTE2_DATA,
- R_BFIN_BYTE4_DATA, R_BFIN_PCREL11, R_BFIN_PUSH, R_BFIN_CONST,
- R_BFIN_ADD, R_BFIN_SUB, R_BFIN_MULT, R_BFIN_DIV, R_BFIN_MOD,
- R_BFIN_LSHIFT, R_BFIN_RSHIFT, R_BFIN_AND, R_BFIN_OR, R_BFIN_XOR,
- R_BFIN_LAND, R_BFIN_LOR, R_BFIN_LEN, R_BFIN_NEG, R_BFIN_COMP,
- R_BFIN_PAGE, R_BFIN_HWPAGE, R_BFIN_ADDR, R_BFIN_PLTPLC,
- R_BFIN_GOT, R_BFIN_MAX): Renamed from R_unused0, R_pcrel5ms,
- R_unused1, R_pcrel10, R_pcrel12_jump, R_rimm16, R_luimm16,
- R_huimm16, R_pcrel12_jump_s, R_pcrel24_jump_x, R_pcrel24,
- R_unusedb, R_unusedc, R_pcrel24_jump_l, R_pcrel24_call_x,
- R_var_eq_symb, R_byte_data, R_byte2_data, R_byte4_data, R_pcrel11,
- R_push, R_const, R_add, R_sub, R_mult, R_div, R_mod, R_lshift,
- R_rshift, R_and, R_or, R_xor, R_land, R_lor, R_len, R_neg, R_comp,
- R_page, R_hwpage, R_addr, R_pltpc, R_got.
-
-2009-08-09 Michael Eager <eager@eagercon.com>
-
- * elf/common.h: Define EM_resnnn reserved values. Add EM_AVR32,
- EM_STM8, EM_TILE64, EM_TILEPRO. Change EM_MICROBLAZE.
-
-2009-08-06 Michael Eager <eager@eagercon.com>
-
- * elf/common.h: Define EM_MICROBLAZE & EM_MICROBLAZE_OLD.
- * elf/microblaze.h: New reloc definitions.
-
-2009-07-30 Alan Modra <amodra@bigpond.net.au>
-
- * ppc64.h: Add R_PPC64_JMP_IREL, R_PPC64_REL16, R_PPC64_REL16_LO,
- R_PPC64_REL16_HI, R_PPC64_REL16_HA.
-
-2009-07-25 H.J. Lu <hongjiu.lu@intel.com>
-
- * common.h (EM_L1OM): New.
-
-2009-07-24 Trevor Smigiel <Trevor_Smigiel@playstation.sony.com>
- Alan Modra <amodra@bigpond.net.au>
-
- * spu.h (R_SPU_ADD_PIC): New.
-
-2009-07-23 Ulrich Drepper <drepper@redhat.com>
-
- * common.h (STB_GNU_UNIQUE): Define.
-
-2009-07-10 Tom Tromey <tromey@redhat.com>
-
- * dwarf2.h: Move to `..'.
-
-2009-07-10 H.J. Lu <hongjiu.lu@intel.com>
-
- * dwarf2.h: Just include ../dwarf2.h.
-
-2009-07-10 Alan Modra <amodra@bigpond.net.au>
-
- * ppc.h (R_PPC_IRELATIVE): Add.
- (R_PPC_RELAX32, R_PPC_RELAX32PC,
- R_PPC_RELAX32_PLT, R_PPC_RELAX32PC_PLT): Renumber.
- * ppc64.h (R_PPC64_IRELATIVE): Add.
-
-2009-07-03 Jakub Jelinek <jakub@redhat.com>
-
- * dwarf2.h (enum dwarf_location_atom): Add DW_OP_implicit_value
- and DW_OP_stack_value.
-
-2009-06-22 Alan Modra <amodra@bigpond.net.au>
-
- * ppc.h (R_PPC_RELAX*): Define as enum.
-
-2009-06-11 Anthony Green <green@moxielogic.org>
-
- * moxie.h (R_MOXIE_PCREL10): New.
-
-2009-06-01 H.J. Lu <hongjiu.lu@intel.com>
-
- PR ld/10205
- * i386.h (R_386_IRELATIVE): New.
- * x86-64.h (R_X86_64_IRELATIVE): Likewise.
-
-2009-05-27 H.J. Lu <hongjiu.lu@intel.com>
-
- * common.h: Update comments for dynamic tag ranges.
-
-2009-04-30 DJ Delorie <dj@redhat.com>
-
- * mep.h (EF_MEP_COP_*): New.
- (EF_MEP_ALL_FLAGS): Add them.
-
-2009-04-30 Nick Clifton <nickc@redhat.com>
-
- * common.h (STT_GNU_IFUNC): Define.
-
-2009-04-24 Cary Coutant <ccoutant@google.com>
-
- * dwarf2.h (DW_LNE_set_discriminator): New enum value.
-
-2009-04-15 Anthony Green <green@moxielogic.com>
-
- * common.h (EM_MOXIE): Define.
- * moxie.h: New file.
-
-2009-04-07 DJ Delorie <dj@redhat.com>
-
- * mep.h (EF_MEP_CPU_C5): New.
-
-2009-04-01 H.J. Lu <hongjiu.lu@intel.com>
-
- * common.h (EM_INTEL178): Removed.
- (EM_INTEL179): Likewise.
- (EM_ETPU): New.
- (EM_SLE9X): Likewise.
- (EM_INTEL181): Likewise.
- (EM_INTEL182): Likewise.
-
-2009-03-31 H.J. Lu <hongjiu.lu@intel.com>
-
- * common.h (EM_INTEL178): New.
- (EM_INTEL179): Likewise.
- (EM_INTEL180): Likewise.
-
-2009-03-20 Mikolaj Zalewski <mikolajz@google.com>
-
- * common.h (SHT_GNU_INCREMENTAL_INPUTS): Define.
-
-2009-03-14 Mark Kettenis <kettenis@gnu.org>
-
- * common.h (NT_OPENBSD_PROCINFO, NT_OPENBSD_AUXV)
- (NT_OPENBSD_REGS, NT_OPENBSD_FPREGS, NT_OPENBSD_XFPREGS)
- (NT_OPENBSD_WCOOKIE): New defines.
-
-2009-03-16 Jan Kratochvil <jan.kratochvil@redhat.com>
-
- * common.h (AT_RANDOM): Define.
-
-2009-03-04 Alan Modra <amodra@bigpond.net.au>
-
- * ppc.h (R_PPC_TLSGD, R_PPC_TLSLD): Add new relocs.
- * ppc64.h (R_PPC64_TLSGD, R_PPC64_TLSLD): Add new relocs.
-
-2009-03-02 Qinwei <qinwei@sunnorth.com.cn>
-
- * score.h (RELOC_NUMBER): Add R_SCORE_IMM32.
- * common.h (EM_SCORE_OLD): Define.
-
-2009-02-23 H.J. Lu <hongjiu.lu@intel.com>
-
- * common.h (STB_LOPROC): Replace Application-specific with
- Processor-specific in comments.
- (STB_HIPROC): Likewise.
- (STT_LOPROC): Likewise.
- (STT_HIPROC): Likewise.
-
-2009-02-03 Sandip Matte <sandip@rmicorp.com>
-
- * mips.h (E_MIPS_MACH_XLR): Define.
-
-2009-02-03 Maxim Kuvyrkov <maxim@codesourcery.com>
-
- * m68k.h: Map TLS relocations to numbers.
-
-2009-01-15 Andrew Stubbs <ams@codesourcery.com>
- Julian Brown <julian@codesourcery.com>
-
- * arm.h (TAG_CPU_ARCH_V6_M, TAG_CPU_ARCH_V6S_M): New defines.
- (MAX_TAG_CPU_ARCH, TAG_CPU_ARCH_V4T_PLUS_V6_M): New defines.
- (Tag_NEON_arch): Rename to Tag_Advanced_SIMD_arch to match ARM ABI
- version 2.07.
- (Tag_undefined39, Tag_nodefaults): New enum values.
- (Tag_also_compatible_with, Tag_T2EE_use): Likewise.
- (Tag_conformance, Tag_Virtualization_use): Likewise.
- (Tag_undefined69, Tag_MPextension_use): Likewise.
-
-2009-01-15 Douglas B Rupp <rupp@gnat.com>
-
- * ia64.h (SHT_IA_64_VMS_DISPLAY_NAME_INFO, EF_IA_64_ARCHVER_1):
- New macros. Minor reformatting.
-
-2008-12-23 Jon Beniston <jon@beniston.com>
-
- * lm32.h: New file.
-
-2008-12-23 Nick Clifton <nickc@redhat.com>
-
- * commmon.h (STT_IFUNC): Delete.
-
-2008-12-20 Hans-Peter Nilsson <hp@axis.com>
-
- * cris.h (R_CRIS_32_IE): New relocation.
-
-2008-12-03 Nick Clifton <nickc@redhat.com>
-
- * common.h (STT_IFUNC): Define.
-
-2008-11-27 M R Swami Reddy <MR.Swami.Reddy@nsc.com>
-
- * cr16.h (R_CR16_GOT_REGREL20, R_CR16_GOTC_REGREL20 and
- R_CR16_GLOB_DAT): New relocations.
-
-2008-11-25 Hans-Peter Nilsson <hp@axis.com>
-
- * cris.h (R_CRIS_32_TPREL): Correct comment.
- (R_CRIS_DTPMOD): Open up for use elsewhere than the fourth GOT entry.
-
-2008-11-18 Catherine Moore <clm@codesourcery.com>
-
- * arm.h (Tag_ABI_FP_16bit_format): Define.
-
-2008-11-14 Nathan Sidwell <nathan@codesourcery.com>
-
- * internal.h (struct elf_segment_map): Add header_size field.
-
-2008-10-13 Ulrich Weigand <uweigand@de.ibm.com>
-
- * common.h (AT_BASE_PLATFORM, AT_EXECFN): Define.
-
-2008-10-10 Nathan Froyd <froydnj@codesourcery.com>
-
- * ppc.h: Add Tag_GNU_Power_ABI_Struct_Return.
-
-2008-10-04 Hans-Peter Nilsson <hp@axis.com>
-
- * cris.h (R_CRIS_32_GOT_GD, R_CRIS_16_GOT_GD, R_CRIS_32_GD)
- (R_CRIS_DTP, R_CRIS_32_DTPREL, R_CRIS_16_DTPREL, R_CRIS_DTPMOD)
- (R_CRIS_32_GOT_TPREL, R_CRIS_16_GOT_TPREL, R_CRIS_32_TPREL)
- (R_CRIS_16_TPREL): New relocations.
-
-2008-08-20 Bob Wilson <bob.wilson@acm.org>
-
- * xtensa.h (R_XTENSA_TLSDESC_FN, R_XTENSA_TLSDESC_ARG)
- (R_XTENSA_TLS_DTPOFF, R_XTENSA_TLS_TPOFF, R_XTENSA_TLS_FUNC)
- (R_XTENSA_TLS_ARG, R_XTENSA_TLS_CALL): New.
-
-2008-08-08 Richard Sandiford <rdsandiford@googlemail.com>
- Daniel Jacobowitz <dan@codesourcery.com>
- Catherine Moore <clm@codesourcery.com>
- Mark Shinwell <shinwell@codesourcery.com>
-
- * mips.h (STO_MIPS_PLT, ELF_ST_IS_MIPS_PLT, ELF_ST_SET_MIPS_PLT)
- (STO_MIPS_PIC, DT_MIPS_PLTGOT, DT_MIPS_RWPLT): New macros.
-
-2008-08-04 Markus Weiss <weissms@aros.org>
-
- * common.h (ELFOSABI_AROS): Update comment.
-
-2008-07-26 Michael Eager <eager@eagercon.com>
-
- * ppc.h: Add description of single-precision.
-
-2008-07-21 Luis Machado <luisgpm@br.ibm.com>
-
- * common.h: Define NT_PPC_VSX.
-
-2008-07-10 Richard Sandiford <rdsandiford@googlemail.com>
-
- * mips.h (ELF_ST_IS_MIPS16, ELF_ST_SET_MIPS16): New macros.
-
-2008-06-18 M R Swami Reddy <MR.Swami.Reddy@nsc.com>
-
- * common.h (EM_CR16): Correct value.
- (EM_CR16): Rename to EM_CR16_OLD.
-
-2008-06-12 DJ Delorie <dj@redhat.com>
-
- * common.h (EM_M32C_NEW): Rename to EM_M32C.
- (EM_M32C): Rename to EM_M32C_OLD.
-
-2008-06-12 Joseph Myers <joseph@codesourcery.com>
-
- * common.h: Update e_machine table.
-
-2008-06-09 Takashi Yoshii <yoshii.takashi@renesas.com>
-
- * sh.h (EF_SH_BFD_TABLE): Set bfd_mach_sh for EF_SH_UNKNOWN.
-
-2008-06-09 Joseph Myers <joseph@codesourcery.com>
-
- * common.h: Change registry@caldera.com to registry@sco.com.
-
-2008-05-21 Nick Clifton <nickc@redhat.com>
-
- * reloc-macros.h: Add a comment about the use of the
- END_RELOC_NUMBERS symbol as a sentinel value.
-
-2008-05-15 Christophe Lyon <christophe.lyon@st.com>
-
- * arm.h (END_RELOC_NUMBERS): Provide a maximum value.
-
-2008-04-16 David S. Miller <davem@davemloft.net>
-
- * elf/sparc.h (R_SPARC_GOTDATA_HIX22,
- R_SPARC_GOTDATA_LOX10, R_SPARC_GOTDATA_OP_HIX22,
- R_SPARC_GOTDATA_OP_LOX10, R_SPARC_GOTDATA_OP,
- R_SPARC_H34, R_SPARC_SIZE32, R_SPARC_SIZE64): New relocs.
-
-2008-03-24 Ian Lance Taylor <iant@google.com>
-
- * common.h (NT_GNU_GOLD_VERSION): Define.
-
-2008-03-13 Alan Modra <amodra@bigpond.net.au>
-
- * internal.h (Elf_Internal_Shdr): Change sh_link and sh_info from
- unsigned long to unsigned int. Change sh_addralign to bfd_vma.
- Order struct as for external version.
-
-2008-03-12 Alan Modra <amodra@bigpond.net.au>
-
- PR 5900
- * common.h (SHN_BAD): Delete.
- (SHN_LORESERVE .. SHN_HIRESERVE): Move to..
- * external.h: ..here.
- * internal.h (SHN_LORESERVE, SHN_HIRESERVE): Define.
- (SHN_LOPROC, SHN_HIPROC, SHN_LOOS, SHN_HIOS): Define.
- (SHN_ABS, SHN_COMMON, SHN_XINDEX, SHN_BAD): Define.
-
-2008-03-12 Alan Modra <amodra@bigpond.net.au>
-
- * cr16c.h (SHN_CR16C_FCOMMON): Define using SHN_LORESERVE.
- (SHN_CR16C_NCOMMON): Likewise.
- * hppa.h (SHN_PARISC_ANSI_COMMON): Likewise.
- (SHN_PARISC_HUGE_COMMON): Likewise.
- * ia64.h (SHN_IA_64_ANSI_COMMON): Likewise.
- (SHN_IA_64_VMS_SYMVEC): Define using SHN_LOOS.
- * m32r.h (SHN_M32R_SCOMMON): Define using SHN_LORESERVE.
- * mips.h (SHN_MIPS_ACOMMON, SHN_MIPS_TEXT): Likewise.
- (SHN_MIPS_DATA, SHN_MIPS_SCOMMON, SHN_MIPS_SUNDEFINED): Likewise.
- * score.h (SHN_SCORE_TEXT, SHN_SCORE_DATA): Likewise.
- (SHN_SCORE_SCOMMON): Likewise.
- * sparc.h (SHN_BEFORE, SHN_AFTER): Likewise.
- * v850.h (SHN_V850_SCOMMON, SHN_V850_TCOMMON): Likewise.
- (SHN_V850_ZCOMMON): Likewise.
- * x86-64.h (SHN_X86_64_LCOMMON): Likewise.
-
-2008-03-03 Pallavi Tambay <pallavi.tambay@amd.com>
-
- * dwarf2.h: (enum dwarf_location_atom): Add new DW_OP:
- DW_OP_PGI_omp_thread_num.
-
-2008-02-04 Adam Nemet <anemet@caviumnetworks.com>
-
- * mips.h: Update copyright.
- (E_MIPS_MACH_OCTEON): New macro.
-
-2008-01-30 Tristan Gingold <gingold@adacore.com>
-
- Add OpenVMS extensions.
- * ia64.h (SHF_IA_64_VMS_GLOBAL, SHF_IA_64_VMS_OVERLAID)
- (SHF_IA_64_VMS_SHARED, SHF_IA_64_VMS_VECTOR)
- (SHF_IA_64_VMS_ALLOC_64BIT, SHF_IA_64_VMS_PROTECTED)
- (SHT_IA_64_VMS_TRACE, SHT_IA_64_VMS_TIE_SIGNATURES)
- (SHT_IA_64_VMS_DEBUG, SHT_IA_64_VMS_DEBUG_STR)
- (SHT_IA_64_VMS_LINKAGES, SHT_IA_64_VMS_SYMBOL_VECTOR)
- (SHT_IA_64_VMS_FIXUP, DT_IA_64_VMS_SUBTYPE)
- (DT_IA_64_VMS_IMGIOCNT, DT_IA_64_VMS_LNKFLAGS)
- (DT_IA_64_VMS_VIR_MEM_BLK_SIZ, DT_IA_64_VMS_IDENT)
- (DT_IA_64_VMS_NEEDED_IDENT, DT_IA_64_VMS_IMG_RELA_CNT)
- (DT_IA_64_VMS_SEG_RELA_CNT, DT_IA_64_VMS_FIXUP_RELA_CNT)
- (DT_IA_64_VMS_FIXUP_NEEDED, DT_IA_64_VMS_SYMVEC_CNT)
- (DT_IA_64_VMS_XLATED, DT_IA_64_VMS_STACKSIZE)
- (DT_IA_64_VMS_UNWINDSZ, DT_IA_64_VMS_UNWIND_CODSEG)
- (DT_IA_64_VMS_UNWIND_INFOSEG, DT_IA_64_VMS_LINKTIME)
- (DT_IA_64_VMS_SEG_NO, DT_IA_64_VMS_SYMVEC_OFFSET)
- (DT_IA_64_VMS_SYMVEC_SEG, DT_IA_64_VMS_UNWIND_OFFSET)
- (DT_IA_64_VMS_UNWIND_SEG, DT_IA_64_VMS_STRTAB_OFFSET)
- (DT_IA_64_VMS_SYSVER_OFFSET, DT_IA_64_VMS_IMG_RELA_OFF)
- (DT_IA_64_VMS_SEG_RELA_OFF, DT_IA_64_VMS_FIXUP_RELA_OFF)
- (DT_IA_64_VMS_PLTGOT_OFFSET, DT_IA_64_VMS_PLTGOT_SEG)
- (DT_IA_64_VMS_FPMODE, SHN_IA_64_VMS_SYMVEC): Define
-
-2008-01-16 Mark Kettenis <kettenis@gnu.org>
-
- * common.h (AT_SUN_AUXFLAGS): Define.
-
-2007-12-11 Daniel Jacobowitz <dan@codesourcery.com>
-
- * dwarf2.h (DW_AT_hi_user): Correct value.
-
-2007-12-07 Bob Wilson <bob.wilson@acm.org>
-
- * xtensa.h (R_XTENSA_32_PCREL): New.
-
-2007-11-29 Mark Shinwell <shinwell@codesourcery.com>
-
- * mips.h (E_MIPS_MACH_LS2E): New.
- (E_MIPS_MACH_LS2F): New.
-
-2007-11-28 Nathan Sidwell <nathan@codesourcery.com>
-
- * internal.h (ELF_IS_SECTION_IN_SEGMENT): Adjust to cope with
- segments at the end of memory.
-
-2007-11-17 Thiemo Seufer <ths@mips.com>
-
- * mips.h (Tag_GNU_MIPS_ABI_FP): Mention -mips32r2 -mfp64 variant
- in comment.
-
-2007-11-16 Nick Clifton <nickc@redhat.com>
-
- * dwarf2.h: Mention the location of the DWARF3 spec on the web.
- (DW_AT_stride_size): Rename to DW_AT_bit_stride.
- (DW_AT_stride): Rename to DW_AT_byte_stride.
-
-2007-11-08 Nathan Sidwell <nathan@codesourcery.com>
-
- * vxworks.h: New.
-
-2007-10-30 Nick Clifton <nickc@redhat.com>
-
- * mn10300.h (R_MN10300_ALIGN): Define.
-
-2007-10-25 Daniel Jacobowitz <dan@codesourcery.com>
-
- * ppc.h (Tag_GNU_Power_ABI_Vector): New.
-
-2007-10-19 Nick Clifton <nickc@redhat.com>
-
- * mn10300.h: Add R_MN10300_SYM_DIFF reloc.
-
-2007-10-18 Roland McGrath <roland@redhat.com>
-
- * common.h (NT_PPC_VMX): New macro.
-
-2007-10-01 M R Swami Reddy <MR.Swami.Reddy@nsc.com>
-
- * cr16.h: Updated with new relocaction macros.
-
-2007-09-17 H.J. Lu <hongjiu.lu@intel.com>
-
- PR binutils/3281
- PR binutils/5037
- * internal.h (elf_segment_map): Add p_size and p_size_valid.
- (ELF_IS_SECTION_IN_SEGMENT): Allow SHF_TLS sections in
- PT_GNU_RELRO segments.
-
-2007-09-11 Nathan Sidwell <nathan@codesourcery.com>
-
- * m68k.h (EF_M68K_CF_ISA_C_NODIV): New.
-
-2007-08-25 Ulrich Weigand <uweigand@de.ibm.com>
-
- * common.h (NT_SPU): Define.
-
-2007-08-16 H.J. Lu <hongjiu.lu@intel.com>
-
- * common.h: Revert last change.
-
-2007-08-16 H.J. Lu <hongjiu.lu@intel.com>
-
- * common.h (PT_GNU_STACK): Renamed to ...
- (PT_GNU_ATTR): This.
- (PT_GNU_STACK): New. Make an alias of PT_GNU_ATTR.
-
-2007-07-09 Roland McGrath <roland@redhat.com>
-
- * common.h (NT_GNU_HWCAP, NT_GNU_BUILD_ID): New macros.
-
-2007-06-29 Joseph Myers <joseph@codesourcery.com>
-
- * ppc.h (Tag_GNU_Power_ABI_FP): Define.
-
-2007-06-29 Joseph Myers <joseph@codesourcery.com>
-
- * mips.h (Tag_GNU_MIPS_ABI_FP): Define.
-
-2007-06-29 Joseph Myers <joseph@codesourcery.com>
-
- * arm.h (elf32_arm_add_eabi_attr_int,
- elf32_arm_add_eabi_attr_string, elf32_arm_add_eabi_attr_compat,
- elf32_arm_get_eabi_attr_int, elf32_arm_set_eabi_attr_contents,
- elf32_arm_eabi_attr_size, Tag_NULL, Tag_File, Tag_Section,
- Tag_Symbol, Tag_compatibility): Remove.
- * common.h (SHT_GNU_ATTRIBUTES): Define.
-
-2007-06-29 M R Swami Reddy <MR.Swami.Reddy@nsc.com>
-
- * common.h (EM_CR16): New entry for CR16 cpu.
- * cr16.h: New file.
-
-2007-06-11 Sterling Augustine <sterling@tensilica.com>
- Bob Wilson <bob.wilson@acm.org>
-
- * xtensa.h (XTENSA_PROP_INSN_NO_TRANSFORM): Renamed to...
- (XTENSA_PROP_NO_TRANSFORM): ...this.
-
-2007-05-18 Caroline Tice <ctice@apple.com>
-
- * dwarf2.h: (enum dwarf_location_atom): Add new DW_OP,
- DW_OP_GNU_uninit.
-
-2007-05-12 Alan Modra <amodra@bigpond.net.au>
-
- * spu.h (R_SPU_ADDR16X): Define.
- (R_SPU_PPU32, R_SPU_PPU64): Renumber.
-
-2007-05-11 Alan Modra <amodra@bigpond.net.au>
-
- * spu.h (R_SPU_PPU32, R_SPU_PPU64): Define.
-
-2007-05-02 Alan Modra <amodra@bigpond.net.au>
-
- * internal.h (ELF_IS_SECTION_IN_SEGMENT): Check both file offset
- and vma for appropriate sections.
-
-2007-04-26 Jan Beulich <jbeulich@novell.com>
-
- * common.h (DT_ENCODING): Correct value (back to spec mandated
- value).
-
-2007-03-08 Alan Modra <amodra@bigpond.net.au>
-
- * v850.h (V850_OTHER_TDA_BYTE): Delete.
- (V850_OTHER_SDA, V850_OTHER_ZDA, V850_OTHER_TDA): Assign bits
- that don't clash with visibility bits.
-
-2007-03-07 Alan Modra <amodra@bigpond.net.au>
-
- * common.h (ELF_ST_VISIBILITY): Comment typo fix.
-
-2007-02-05 Dave Brolley <brolley@redhat.com>
- Richard Sandiford <rsandifo@redhat.com>
- Richard Henderson <rth@redhat.com>
- DJ Delorie <dj@redhat.com>
- Ben Elliston <bje@redhat.com>
-
- * mep.h: New file.
- * common.h (EM_CYGNUS_MEP): Define.
-
-2007-02-15 Dave Brolley <brolley@redhat.com>
-
- From Graydon Hoare <graydon@redhat.com>:
- * common.h (STT_RELC, STT_SRELC, R_RELC): New macros.
-
-2007-01-08 Kazu Hirata <kazu@codesourcery.com>
-
- * m68k.h (EF_M68K_FIDO): New.
- (EF_M68K_ARCH_MASK): OR EF_M68K_FIDO.
- (EF_M68K_CPU32_FIDO_A, EF_M68K_CPU32_MASK): Remove.
-
-2006-12-25 Kazu Hirata <kazu@codesourcery.com>
-
- * m68k.h (EF_M68K_CPU32_FIDO_A, EF_M68K_CPU32_MASK): New.
-
-2006-12-19 Kazu Hirata <kazu@codesourcery.com>
-
- * m68k.h (EF_M68K_ARCH_MASK): New.
-
-2006-12-19 Nathan Sidwell <nathan@codesourcery.com>
-
- * internal.h (struct elf_segment_map): Add p_vaddr_offset field.
-
-2006-12-07 Kazu Hirata <kazu@codesourcery.com>
-
- * m68k.h (EF_M68K_ISA_MASK, EF_M68K_ISA_A_NODIV,
- EF_M68K_ISA_A, EF_M68K_ISA_A_PLUS, EF_M68K_ISA_B_NOUSP,
- EF_M68K_ISA_B, EF_M68K_ISA_C, EF_M68K_MAC_MASK, EF_M68K_MAC,
- EF_M68K_EMAC, EF_M68K_EMAC_B, EF_M68K_FLOAT): Rename to
- EF_M68K_CF_ISA_MASK, EF_M68K_CF_ISA_A_NODIV, EF_M68K_CF_ISA_A,
- EF_M68K_CF_ISA_A_PLUS, EF_M68K_CF_ISA_B_NOUSP,
- EF_M68K_CF_ISA_B, EF_M68K_CF_ISA_C, EF_M68K_CF_MAC_MASK,
- EF_M68K_CF_MAC, EF_M68K_CF_EMAC, EF_M68K_CF_EMAC_B,
- EF_M68K_CF_FLOAT, respectively.
-
-2006-12-05 Michael Tautschnig <tautschn@model.in.tum.de>
- Nick Clifton <nickc@redhat.com>
-
- * external.h (struct Elf_External_Versym): Use ATTRIBUTE_PACKED.
-
-2006-10-28 Richard Sandiford <richard@codesourcery.com>
-
- * mips.h (R_MIPS_GLOB_DAT): Define
- (R_MIPS_max): Bump by 1.
-
-2006-10-25 Trevor Smigiel <Trevor_Smigiel@playstation.sony.com>
- Yukishige Shibata <shibata@rd.scei.sony.co.jp>
- Nobuhisa Fujinami <fnami@rd.scei.sony.co.jp>
- Takeaki Fukuoka <fukuoka@rd.scei.sony.co.jp>
- Alan Modra <amodra@bigpond.net.au>
-
- * common.h (EM_SPU): Define.
- * spu.h: New file.
-
-2006-10-19 Mei Ligang <ligang@sunnorth.com.cn>
-
- * score.h (EF_SCORE_PIC): Redefine EF_SCORE_PIC as 0x80000000.
- (EF_SCORE_FIXDEP): Redefine EF_SCORE_FIXDEP as 0x40000000.
- (EF_SCORE_HASENTRY): Delete.
-
-2006-10-17 Mark Shinwell <shinwell@codesourcery.com>
-
- * arm.h: Define TAG_CPU_ARCH_* constants.
-
-2006-09-17 Mei Ligang <ligang@sunnorth.com.cn>
-
- * score.h: New file.
- * common.h: Add Score machine number.
-
-2006-07-10 Jakub Jelinek <jakub@redhat.com>
-
- * common.h (SHT_GNU_HASH, DT_GNU_HASH): Define.
-
-2006-05-31 H.J. Lu <hongjiu.lu@intel.com>
-
- * internal.h (ELF_SECTION_SIZE): New.
- (ELF_IS_SECTION_IN_SEGMENT): Likewise.
- (ELF_IS_SECTION_IN_SEGMENT_FILE): Updated.
- (ELF_IS_SECTION_IN_SEGMENT_MEMORY): Likewise.
-
-2006-05-27 H.J. Lu <hongjiu.lu@intel.com>
-
- * internal.h (struct elf_segment_map): Add p_align and p_align_valid.
-
-2006-05-24 Carlos O'Donell <carlos@systemhalted.org>
- Randolph Chung <randolph@tausq.org>
- * hppa.h (R_PARISC_TLS_GD21L, R_PARISC_TLS_GD14R, R_PARISC_TLS_GDCALL,
- R_PARISC_TLS_LDM21L, R_PARISC_TLS_LDM14R, R_PARISC_TLS_LDMCALL,
- R_PARISC_TLS_LDO21L, R_PARISC_TLS_LDO14R, R_PARISC_TLS_DTPMOD32,
- R_PARISC_TLS_DTPMOD64, R_PARISC_TLS_DTPOFF32, R_PARISC_TLS_DTPOFF64):
- New TLS relocs.
- (R_PARISC_TLS_LE21L, R_PARISC_TLS_LE14R, R_PARISC_TLS_IE21L,
- R_PARISC_TLS_IE14R, R_PARISC_TLS_TPREL32, R_PARISC_TLS_TPREL64):
- Define TLS relocs using existing equivalents.
-
-2006-05-24 Bjoern Haase <bjoern.m.haase@web.de>
-
- * avr.h: Add E_AVR_MACH_AVR6, R_AVR_LO8_LDI_GS and R_AVR_HI8_LDI_GS.
-
-2006-03-25 Bernd Schmidt <bernd.schmidt@analog.com>
-
- * bfin.h (R_BFIN_GOT17M4, R_BFIN_GOTHI, R_BFIN_GOTLO,
- R_BFIN_FUNCDESC, R_BFIN_FUNCDESC_GOT17M4, R_BFIN_FUNCDESC_GOTHI,
- R_BFIN_FUNCDESC_GOTLO, R_BFIN_FUNCDESC_VALUE,
- R_BFIN_FUNCDESC_GOTOFF17M4, R_BFIN_FUNCDESC_GOTOFFHI,
- R_BFIN_FUNCDESC_GOTOFFLO, R_BFIN_GOTOFF17M4, R_BFIN_GOTOFFHI,
- 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>
-
- * x86-64.h: Add the new relocations with their official
- numbers.
-
-2006-03-22 Richard Sandiford <richard@codesourcery.com>
- Daniel Jacobowitz <dan@codesourcery.com>
- Phil Edwards <phil@codesourcery.com>
- Zack Weinberg <zack@codesourcery.com>
- Mark Mitchell <mark@codesourcery.com>
- Nathan Sidwell <nathan@codesourcery.com>
-
- * mips.h (R_MIPS_COPY, R_MIPS_JUMP_SLOT): New relocs.
-
-2006-03-19 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
-
- * hppa.h (SHF_HP_TLS, SHF_HP_NEAR_SHARED, SHF_HP_FAR_SHARED,
- SHF_HP_COMDAT, SHF_HP_CONST, SHN_TLS_COMMON, SHN_NS_COMMON,
- SHN_NS_UNDEF, SHN_FS_UNDEF, SHN_HP_EXTERN, SHN_HP_EXTHINT,
- SHN_HP_UNDEF_BIND_IMM, SHT_HP_OVLBITS, SHT_HP_DLKM, SHT_HP_COMDAT,
- SHT_HP_OBJDICT, SHT_HP_ANNOT, STB_HP_ALIAS): Define.
-
-2006-03-10 Paul Brook <paul@codesourcery.com>
-
- * arm.h (EF_ARM_EABI_VER5): Define.
-
-2006-03-06 Nathan Sidwell <nathan@codesourcery.com>
-
- * m68k.h (EF_M68K_ISA_MASK, EF_M68K_ISA_A,
- EF_M68K_ISA_A_PLUS, EF_M68K_ISA_B, EF_M68K_ISA_C): Adjust.
- (EF_M68K_ISA_A_NODIV, EF_M68K_ISA_B_NOUSP): New.
- (EF_M68K_HW_DIV, EF_M68K_USP): Remove.
- (EF_M68K_MAC, EF_M68K_EMAC, EF_M68K_FLOAT): Adjust.
- (EF_M68K_EMAC_B): New.
-
-2006-03-03 Bjoern Haase <bjoern.m.haase@web.de>
-
- * avr.h (R_AVR_MS8_LDI,R_AVR_MS8_LDI_NEG): Add.
- (EF_AVR_LINKRELAX_PREPARED): Add.
-
-2006-03-02 Ben Elliston <bje@au.ibm.com>
-
- Import from the GCC tree:
- 2006-03-01 Jakub Jelinek <jakub@redhat.com>
-
- * dwarf2.h (DW_TAG_condition, DW_TAG_shared_type): New constants
- from DWARF 3.
- (DW_AT_description, DW_AT_binary_scale, DW_AT_decimal_scale,
- DW_AT_small, DW_AT_decimal_sign, DW_AT_digit_count,
- DW_AT_picture_string, DW_AT_mutable, DW_AT_threads_scaled,
- DW_AT_explicit, DW_AT_object_pointer, DW_AT_endianity,
- DW_AT_elemental, DW_AT_pure, DW_AT_recursive): New.
- (DW_OP_form_tls_address, DW_OP_call_frame_cfa, DW_OP_bit_piece): New.
- (DW_ATE_packed_decimal, DW_ATE_numeric_string, DW_ATE_edited,
- DW_ATE_signed_fixed, DW_ATE_unsigned_fixed): New.
- (DW_DS_unsigned, DW_DS_leading_overpunch, DW_DS_trailing_overpunch,
- DW_DS_leading_separate, DW_DS_trailing_separate): New.
- (DW_END_default, DW_END_big, DW_END_little): New.
- (DW_END_lo_user, DW_END_hi_user): Define.
- (DW_LNE_lo_user, DW_LNE_hi_user): Define.
- (DW_CFA_val_offset, DW_CFA_val_offset_sf, DW_CFA_val_expression): New.
- (DW_LANG_PLI, DW_LANG_ObjC, DW_LANG_ObjC_plus_plus, DW_LANG_UPC,
- DW_LANG_D): New.
-
-2006-02-06 Steve Ellcey <sje@cup.hp.com>
-
- * ia64.h (SHF_IA_64_HP_TLS): New.
-
-2006-02-24 DJ Delorie <dj@redhat.com>
-
- * m32c.h: Add relax relocs.
-
-2006-02-17 Shrirang Khisti <shrirangk@kpitcummins.com>
- Anil Paranjape <anilp1@kpitcummins.com>
- Shilin Shakti <shilins@kpitcummins.com>
-
- * common.h (EM_XC16X): New entry for xc16x cpu.
- Sort other EM_* numbers into numerical order.
- * xc16x.h: New file.
-
-2006-02-10 H.J. Lu <hongjiu.lu@intel.com>
-
- PR binutils/2258
- * internal.h (ELF_IS_SECTION_IN_SEGMENT_FILE): New.
- (ELF_IS_SECTION_IN_SEGMENT_MEMORY): Likewise.
-
-2006-02-07 Nathan Sidwell <nathan@codesourcery.com>
-
- * m68k.h (EF_CPU32, EF_M68000, EF_CFV4E): Rename to ...
- (EF_M68K_CPU32, EF_M68K_M68000, EF_M68K_CFV4E): ... here.
- (EF_M68K_ISA_MASK, EF_M68K_ISA_A, EF_M68K_M68K_ISA_A_PLUS,
- EF_M68K_ISA_B, EF_M68K_HW_DIV, EF_M68K_MAC_MASK, EF_M68K_MAC,
- EF_M68K_EMAC, EF_M68K_USP, EF_M68K_FLOAT): New.
-
-2006-02-06 Steve Ellcey <sje@cup.hp.com>
-
- * ia64.h (SHF_IA_64_HP_TLS): New.
-
-2006-01-18 Alexandre Oliva <aoliva@redhat.com>
-
- Introduce TLS descriptors for i386 and x86_64.
- * common.h (DT_TLSDESC_GOT, DT_TLSDESC_PLT): New.
- * i386.h (R_386_TLS_GOTDESC, R_386_TLS_DESC_CALL, R_386_TLS_DESC):
- New.
- * x86-64.h (R_X86_64_GOTPC32_TLSDESC, R_X86_64_TLSDESC_CALL,
- R_X86_64_TLSDESC): New.
-
-2006-01-09 Mike Frysinger <vapier@gentoo.org>:
-
- * common.h (EM_ALTERA_NIOS2, EM_NIOS32) Define.
-
-2005-12-16 Nathan Sidwell <nathan@codesourcery.com>
-
- Second part of ms1 to mt renaming.
- * common.h (EM_MT): Renamed.
- * mt.h: Rename relocs, cpu & other defines.
-
-2005-12-12 Nathan Sidwell <nathan@codesourcery.com>
-
- * mt.h: Renamed from ms1.h
-
-2005-12-12 Paul Brook <paul@codesourcery.com>
-
- * arm.h (elf32_arm_get_eabi_attr_int): Add prototype.
-
-2005-11-11 Nick Clifton <nickc@redhat.com>
-
- PR 1150
- * mips.h (STO_OPTIONAL): Define.
- (ELF_MIPS_IS_OPTIONAL): Define.
-
-2005-11-07 Nathan Sidwell <nathan@codesourcery.com>
-
- Add ms2.
- * ms1.h (EF_MS1_CPU_MS2): New.
-
-2005-11-06 John David Anglin <dave.anglin@nrc-crnc.gc.ca>
-
- * hppa.h (R_PARISC_DIR64WR, R_PARISC_DIR64DR): Remove relocs.
-
-2005-09-30 Catherine Moore <clm@cm00re.com>
-
- * bfin.h: New file.
- * common.h (EM_BLACKFIN): Define.
-
-2005-10-08 Paul Brook <paul@codesourcery.com>
-
- * arm.h: Add prototypes for BFD object attribute routines.
-
-2005-09-09 Richard Earnshaw <richard.earnshaw@arm.com>
-
- * arm.h (SHT_ARM_PREEMPTMAP, SHT_ARM_ATTRIBUTES): New defines.
-
-2005-08-09 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
-
- * hppa.h (SHT_PARISC_DLKM, SHF_PARISC_WEAKORDER, PT_PARISC_WEAKORDER):
- New defines.
-
-2005-08-04 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
-
- * hppa.h (PF_HP_CODE, PF_HP_MODIFY, PF_HP_LAZYSWAP): Revise defines.
- (PF_HP_CODE_DEPR, PF_HP_MODIFY_DEPR, PF_HP_LAZYSWAP_DEPR): New
- deprecated defines.
- (DT_HP_EPLTREL, DT_HP_EPLTRELSZ, DT_HP_FILTERED, DT_HP_FILTER_TLS,
- DT_HP_COMPAT_FILTERED, DT_HP_LAZYLOAD, DT_HP_BIND_NOW_COUNT, DT_PLT,
- DT_PLT_SIZE, DT_DLT, DT_DLT_SIZE, DT_HP_BIND_DEPTH_FIRST, DT_HP_GST,
- DT_HP_SHLIB_FIXED, DT_HP_MERGE_SHLIB_SEG, DT_HP_NODELETE, DT_HP_GROUP,
- DT_HP_PROTECT_LINKAGE_TABLE, PT_HP_OPT_ANNOT, PT_HP_HSL_ANNOT,
- PT_HP_STACK, PT_HP_CORE_UTSNAME, NT_HP_COMPILER, NT_HP_COPYRIGHT,
- NT_HP_VERSION, NT_HP_SRCFILE_INFO, NT_HP_LINKER, NT_HP_INSTRUMENTED,
- NT_HP_UX_OPTIONS): Define.
-
-2005-07-25 DJ Delorie <dj@redhat.com>
-
- * m32c.h: Add R_M32C_8, R_M32C_LO16, R_M32C_HI8, and R_M32C_HI16.
-
-2005-07-25 Jan Hubicka <jh@suse.cz>
-
- * x86-64.h (SHN_X86_64_LCOMMON): New.
- (SHF_X86_64_LARGE): New.
-
-2005-07-20 Kazuhiro Inaoka <inaoka.kazuhiro@renesas.com>
-
- * m32r.h (R_M32R_REL32): Added.
-
-2005-07-18 Ben Elliston <bje@au.ibm.com>
-
- * dwarf2.h (enum dwarf_type): Remove DW_AT_GNU_decimal_float.
- Replace with DW_ATE_decimal_float (now in DWARF 3).
-
-2005-07-14 Jim Blandy <jimb@redhat.com>
-
- Add support for Renesas M32C and M16C.
- * common.h (EM_M32C): New machine number.
- * m32c.h: New file.
-
-2005-06-17 Jakub Jelinek <jakub@redhat.com>
-
- * external.h (GRP_ENTRY_SIZE): Define.
-
-2005-06-17 Jan Beulich <jbeulich@novell.com>
-
- * x86-64.h (elf_x86_64_reloc_type): Adjust comment for
- R_X86_64_GOTPCREL. Add R_X86_64_PC64, R_X86_64_GOTOFF64, and
- R_X86_64_GOTPC32.
-
-2005-06-07 Aldy Hernandez <aldyh@redhat.com>
- Michael Snyder <msnyder@redhat.com>
- Stan Cox <scox@redhat.com>
-
- * common.h (EM_MS1): Define.
-
- * ms1.h: New file.
-
-2005-05-31 Richard Henderson <rth@redhat.com>
-
- * alpha.h (LITUSE_ALPHA_JSRDIRECT): New.
-
-2005-05-29 Richard Henderson <rth@redhat.com>
-
- * alpha.h (DT_ALPHA_PLTRO): New.
-
-2005-05-19 Ben Elliston <bje@au.ibm.com>
-
- * dwarf2.h (enum dwarf_type): Assign DW_ATE_GNU_decimal_float from
- the user-defined encoding space pending inclusion in the standard.
-
-2005-05-18 Zack Weinberg <zack@codesourcery.com>
-
- * arm.h: Make all #ifndef OLD_ARM_ABI blocks
- unconditional, delete all #ifdef OLD_ARM_ABI blocks.
-
-2005-05-17 Zack Weinberg <zack@codesourcery.com>
-
- * arm.h: Import complete list of official relocation names
- and numbers from AAELF. Define FAKE_RELOCs for old names.
- Remove a few old names no longer used anywhere.
-
-2005-05-14 Alan Modra <amodra@bigpond.net.au>
-
- * ppc.h (DT_PPC_GOT): Rename from DT_PPC_GLINK.
-
-2005-05-11 Alan Modra <amodra@bigpond.net.au>
-
- * ppc.h (R_PPC_RELAX32, R_PPC_RELAX32PC, R_PPC_RELAX32_PLT,
- R_PPC_RELAX32PC_PLT) Adjust.
- (R_PPC_REL16, R_PPC_REL16_LO, R_PPC_REL16_HI, R_PPC_REL16_HA): Define.
- (DT_PPC_GLINK): Define.
-
-2005-05-10 Nick Clifton <nickc@redhat.com>
-
- * Update the address and phone number of the FSF organization in
- the GPL notices in the following files:
- alpha.h, arc.h, arm.h, avr.h, common.h, cr16c.h, cris.h, crx.h,
- d10v.h, d30v.h, dlx.h, dwarf.h, dwarf2.h, external.h, fr30.h,
- frv.h, h8.h, hppa.h, i370.h, i386.h, i860.h, i960.h, ia64.h,
- internal.h, ip2k.h, iq2000.h, m32r.h, m68hc11.h, m68k.h, mcore.h,
- mips.h, mmix.h, mn10200.h, mn10300.h, msp430.h, openrisc.h,
- or32.h, pj.h, ppc.h, ppc64.h, reloc-macros.h, s390.h, sh.h,
- sparc.h, v850.h, vax.h, x86-64.h, xstormy16.h, xtensa.h
-
-2005-04-13 H.J. Lu <hongjiu.lu@intel.com>
-
- Moved from ../ChangeLog
-
- 2004-10-27 Richard Earnshaw <rearnsha@arm.com>
- * arm.h: Add R_ARM_CALL and R_ARM_JUMP32.
-
- 2004-10-12 Paul Brook <paul@codesourcery.com>
- * arm.h (EF_ARM_EABI_VER4): Define.
-
- 2004-10-08 Daniel Jacobowitz <dan@debian.org>
-
- * common.h (PT_SUNW_EH_FRAME): Define.
- * x86-64.h (SHT_X86_64_UNWIND): Define.
-
- 2004-10-07 Bob Wilson <bob.wilson@acm.org>
- * xtensa.h (R_XTENSA_DIFF8, R_XTENSA_DIFF16, R_XTENSA_DIFF32,
- R_XTENSA_SLOT*_OP, R_XTENSA_SLOT*_ALT): New relocations.
- (XTENSA_PROP_SEC_NAME): Define.
- (property_table_entry): Add flags field.
- (XTENSA_PROP_*, GET_XTENSA_PROP_*, SET_XTENSA_PROP_*): Define.
-
- 2004-09-17 Paul Brook <paul@codesourcery.com>
- * arm.h: Remove R_ARM_STKCHK and R_ARM_THM_STKCHK.
- Add R_ARM_TARGET2, R_ARM_PREL31, R_ARM_GOT_ABS, R_ARM_GOT_PREL,
- R_ARM_GOT_BREL12, R_ARM_GOTOFF12 and R_ARM_GOTRELAX.
-
- 2004-09-13 Paul Brook <paul@codesourcery.com>
- * arm.h: Rename RELABS to TARGET1.
-
- 2004-05-11 Jakub Jelinek <jakub@redhat.com>
- * common.h (PT_GNU_EH_FRAME, PT_GNU_STACK): Add comments.
- (PT_GNU_RELRO): Define.
-
-2005-03-29 Daniel Jacobowitz <dan@codesourcery.com>
- Phil Blundell <philb@gnu.org>
-
- * arm.h: Add TLS relocations.
-
-2005-03-23 Ben Elliston <bje@au.ibm.com>
-
- * dwarf.h: Merge with GCC's dwarf.h.
-
-2005-03-18 C Jaipraash <cjaiprakash@noida.hcltech.com>
-
- * m68k.h (EF_CFV4E): Define.
-
-2005-03-17 Paul Brook <paul@codesourcery.com>
- Dan Jacobowitz <dan@codesourcery.com>
- Mark Mitchell <mark@codesourcery.com>
-
- * arm.h (PT_ARM_EXIDX): Define.
-
-2005-03-02 Daniel Jacobowitz <dan@codesourcery.com>
- Joseph Myers <joseph@codesourcery.com>
-
- * mips.h: Define MIPS TLS relocations.
-
-2005-02-15 Nigel Stephens <nigel@mips.com>
- Maciej W. Rozycki <macro@mips.com>
-
- * mips.h (R_MIPS16_GOT16): New reloc code.
- (R_MIPS16_CALL16): Likewise.
- (R_MIPS16_HI16): Likewise.
- (R_MIPS16_LO16): Likewise.
- (R_MIPS16_min): New fake reloc code.
- (R_MIPS16_max): Likewise.
-
-2005-02-11 Maciej W. Rozycki <macro@mips.com>
-
- * mips.h (R_MIPS_max): Use FAKE_RELOC to define.
-
-2005-01-25 Alexandre Oliva <aoliva@redhat.com>
-
- 2004-12-10 Alexandre Oliva <aoliva@redhat.com>
- * frv.h: Add R_FRV_TLSMOFF.
- 2004-11-10 Alexandre Oliva <aoliva@redhat.com>
- * frv.h: Add TLS relocations.
-
-2005-01-17 Nick Clifton <nickc@redhat.com>
-
- * sh.h (EF_SH2A_SH4_NOFPU, EF_SH2A_SH3_NOFPU, EF_SH2A_SH4,
- EF_SH2A_SH3E): New flags.
- (EF_SH_BFD_TABLE): Add these new flags to the table.
-
-2005-01-12 Alan Modra <amodra@bigpond.net.au>
-
- * ppc.h (R_PPC_RELAX32_PLT, R_PPC_RELAX32PC_PLT): Define.
- (R_PPC_RELAX32, R_PPC_RELAX32PC): Adjust value.
-
-2004-12-22 Klaus Rudolph <lts-rudolph@gmx.de>
-
- * avr.h (R_AVR_LDI, R_AVR_6, R_AVR_6_ADIW): New relocs.
-
-2004-12-16 Richard Sandiford <rsandifo@redhat.com>
-
- * v850.h (R_V850_LO16_SPLIT_OFFSET): New reloc.
-
-2004-12-09 Ian Lance Taylor <ian@wasabisystems.com>
-
- * mips.h (E_MIPS_MACH_9000): Define.
-
-2004-11-04 Hans-Peter Nilsson <hp@axis.com>
-
- * cris.h (EF_CRIS_VARIANT_MASK, EF_CRIS_VARIANT_ANY_V0_V10)
- (EF_CRIS_VARIANT_V32, EF_CRIS_VARIANT_COMMON_V10_V32): New
- macros.
-
-2004-10-06 Eric Christopher <echristo@redhat.com>
-
- * dwarf2.h: Sync with gcc dwarf2.h. Fix typo.
-
-2004-10-01 Paul Brook <paul@codesourcery.com>
-
- * arm.h (SHT_ARM_EXIDX): Define.
- (ELF_STRING_ARM_unwind, ELF_STRING_ARM_unwind,
- ELF_STRING_ARM_unwind_once, ELF_STRING_ARM_unwind_info_once):
- Define.
-
-2004-08-25 Dmitry Diky <diwil@spec.ru>
-
- * msp430.h: Add new relocs.
-
-2004-08-12 H.J. Lu <hongjiu.lu@intel.com>
-
- * i386.h (R_386_USED_BY_INTEL_200): New.
-
-2004-07-29 Alexandre Oliva <aoliva@redhat.com>
-
- Introduce SH2a support.
- 2004-02-18 Corinna Vinschen <vinschen@redhat.com>
- * sh.h (EF_SH2A_NOFPU): New.
- 2003-12-01 Michael Snyder <msnyder@redhat.com>
- * sh.h (EF_SH2A): New.
-
-2004-07-27 Tomer Levi <Tomer.Levi@nsc.com>
-
- * crx.h: Add BFD_RELOC_CRX_SWITCH8, BFD_RELOC_CRX_SWITCH16,
- BFD_RELOC_CRX_SWITCH32.
-
-2004-07-06 Tomer Levi <Tomer.Levi@nsc.com>
-
- * common.h (EM_CRX): Define.
- * crx.h: New file.
-
-2004-06-25 Kazuhiro Inaoka <inaoka.kazuhiro@renesas.com>
-
- * m32r.h: Add defintions of R_M32R_GOTOFF_HI_ULO,
- R_M32R_GOTOFF_HI_SLO and R_M32R_GOTOFF_LO.
-
-2004-06-19 Alan Modra <amodra@bigpond.net.au>
-
- * common.h (ELF64_R_INFO): Warning fix.
-
-2004-06-14 Chris Demetriou <cgd@broadcom.com>
-
- * mips.h (R_MIPS_PC32): Add back (undoing removal on 2004-04-24),
- with an updated comment.
-
-2004-05-28 Andrew Stubbs <andrew.stubbs@superh.com>
-
- * sh.h (EF_SH_HAS_DSP): Remove.
- (EF_SH_HAS_FP): Remove.
- (EF_SH_MERGE_MACH): Remove.
- (EF_SH4_NOFPU): Convert to decimal.
- (EF_SH4A_NOFPU): Likewise.
- (EF_SH4_NOMMU_NOFPU): Likewise.
- (EF_SH3_NOMMU): Add new macro.
- (EF_SH_BFD_TABLE): Likewise.
- (sh_find_elf_flags): Add prototype.
- (sh_elf_get_flags_from_mach): Likewise.
-
-2004-04-24 Chris Demetriou <cgd@broadcom.com>
-
- * mips.h (R_MIPS_PC32, R_MIPS_PC64, R_MIPS_GNU_REL_LO16)
- (R_MIPS_GNU_REL_HI16): Remove.
- (R_MIPS_GNU_REL16_S2): Update comment.
-
-2004-30-30 Galit Heller <Galit.Heller@nsc.com>
- Tomer Levi <Tomer.Levi@nsc.com>
-
- * common.h (EM_CR): Define.
- * cr16c.h: New file.
-
-2004-03-23 Paul Brook <paul@codesourcery.com>
-
- * arm.h (EF_ERM_BE8, EF_ARM_LE8, EF_ARM_EABI_VER3): Add.
-
-2003-03-03 Andrew Stubbs <andrew.stubbs@superh.com>
-
- * sh.h: Add EF_SH4_NOMMU_NOFPU.
-
-2004-03-01 Richard Sandiford <rsandifo@redhat.com>
-
- * frv.h (EF_FRV_CPU_FR405, EF_FRV_CPU_FR450): Define.
-
-2004-01-28 Roland McGrath <roland@redhat.com>
-
- * common.h (AT_SECURE): New macro.
-
-2004-01-21 Roland McGrath <roland@redhat.com>
-
- * common.h (AT_SUN_UID, AT_SUN_RUID, AT_SUN_GID): New macros.
- (AT_SUN_RGID, AT_SUN_LDELF, AT_SUN_LDSHDR, AT_SUN_LDNAME,
- AT_SUN_LPAGESZ, AT_SUN_PLATFORM, AT_SUN_HWCAP, AT_SUN_IFLUSH,
- AT_SUN_CPU, AT_SUN_EMUL_ENTRY, AT_SUN_EMUL_EXECFD,
- AT_SUN_EXECNAME) AT_SUN_MMU, AT_SUN_LDDATA): Likewise.
-
-2004-01-17 Mark Kettenis <kettenis@gnu.org>
-
- * common.h (NT_OPENBSD_IDENT): Define.
-
-2004-01-06 Alexandre Oliva <aoliva@redhat.com>
-
- 2003-09-18 Alexandre Oliva <aoliva@redhat.com>
- * frv.h (EF_FRV_FDPIC): New macro.
- (EF_FRV_PIC_FLAGS): Adjust.
- 2003-08-08 Alexandre Oliva <aoliva@redhat.com>
- * frv.h (R_FRV_FUNCDESC_VALUE, R_FRV_FUNCDESC_GOTOFF12,
- R_FRV_FUNCDESC_GOTOFFLO, R_FRV_FUNCDESC_GOTOFFHI, R_FRV_GOTOFF12,
- R_FRV_GOTOFFLO, R_FRV_GOTOFFHI): New.
- 2003-08-04 Alexandre Oliva <aoliva@redhat.com>
- * frv.h (R_FRV_GOT12, R_FRV_GOTHI, R_FRV_GOTLO, R_FRV_FUNCDESC,
- R_FRV_FUNCDESC_GOT12, R_FRV_FUNCDESC_GOTHI, R_FRV_FUNCDESC_GOTLO):
- New.
-
-
-For older changes see ChangeLog-9103
-
-Copyright (C) 2004-2012 Free Software Foundation, Inc.
-
-Copying and distribution of this file, with or without modification,
-are permitted in any medium without royalty provided the copyright
-notice and this notice are preserved.
-
-Local Variables:
-mode: change-log
-left-margin: 8
-fill-column: 74
-version-control: never
-End:
diff --git a/include/elf/ChangeLog-9103 b/include/elf/ChangeLog-9103
deleted file mode 100644
index 6746d0aa1..000000000
--- a/include/elf/ChangeLog-9103
+++ /dev/null
@@ -1,1957 +0,0 @@
-2005-04-13 H.J. Lu <hongjiu.lu@intel.com>
-
- Moved from ../ChangeLog
-
- 2003-10-14 Bob Wilson <bob.wilson@acm.org>
- * xtensa.h: Formatting. Fix comments about property section
- names for linkonce sections.
-
- 2003-05-23 Jakub Jelinek <jakub@redhat.com>
- * common.h (PT_GNU_STACK): Define.
-
- 2003-01-25 Jakub Jelinek <jakub@redhat.com>
- * sparc.h: Add TLS relocs. Move R_SPARC_REV32 to 252.
-
- 2002-09-26 Jakub Jelinek <jakub@redhat.com>
- * x86-64.h: Add TLS relocs.
-
- 2002-09-19 Jakub Jelinek <jakub@redhat.com>
- * i386.h (R_386_TLS_TPOFF, R_386_TLS_IE, R_386_TLS_GOTIE):
- Define.
-
- 2002-07-10 Jakub Jelinek <jakub@redhat.com>
- * common.h (SHT_GNU_LIBLIST, DT_GNU_PRELINKED,
- DT_GNU_CONFLICT*, DT_GNU_LIBLIST*): Define.
-
- 2002-05-31 Michal Ludvig <mludvig@suse.cz>
- * dwarf2.h (DW_CFA_low_user, DW_CFA_high_user): Renamed
- to DW_CFA_lo_user, DW_CFA_hi_user respectively.
-
- 2002-05-23 Jakub Jelinek <jakub@redhat.com>
- * common.h (PT_TLS, SHF_TLS, STT_TLS, DF_STATIC_TLS): Define.
- * ia64.h (R_IA64_LTOFF_TPREL22): Renamed from R_IA64_LTOFF_TP22.
- * i386.h: Add TLS relocs.
-
-2003-12-19 Kazuhiro Inaoka <inaoka.kazuhiro@renesas.com>
-
- * m32r.h : Added m32r-linux and PIC support. Add new ABI that
- uses RELA.
- (R_M32R_16_RELA, R_M32R_32_RELA, R_M32R_24_RELA,
- R_M32R_10_PCREL_RELA, R_M32R_18_PCREL_RELA,
- R_M32R_26_PCREL_RELA, R_M32R_HI16_ULO_RELA,
- R_M32R_HI16_SLO_RELA, R_M32R_LO16_RELA,
- R_M32R_SDA16_RELA, R_M32R_RELA_GNU_VTINHERIT,
- R_M32R_RELA_GNU_VTENTRY, R_M32R_GOT24,
- R_M32R_26_PLTREL, R_M32R_COPY, R_M32R_GLOB_DAT,
- R_M32R_JMP_SLOT, R_M32R_RELATIVE, R_M32R_GOTOFF,
- R_M32R_GOTPC24, R_M32R_GOT16_HI_ULO,
- R_M32R_GOT16_HI_SLO, R_M32R_GOT16_LO,
- R_M32R_GOTPC_HI_ULO, R_M32R_GOTPC_HI_SLO,
- R_M32R_GOTPC_LO): New relocs.
-
-2003-12-06 Alan Modra <amodra@bigpond.net.au>
-
- From Jan Beulich <JBeulich@novell.com>
- * common.h (DT_HIOS): Correct value.
-
-2003-12-03 Kazuhiro Inaoka <inaoka.kazuhiro@renesas.com>
-
- * m32r.h: Add new machine type m32r2 and instruction modes.
-
-2003-11-06 Alan Modra <amodra@bigpond.net.au>
-
- * ppc.h (R_PPC_RELAX32PC): Define.
-
-2003-10-22 Alexandre Oliva <aoliva@redhat.com>,
- Michael Snyder <msnyder@redhat.com>
-
- * sh.h (EF_SH4A, EF_SH4AL_DSP, EF_SH4_NOFPU, EF_SH4A_NOFPU): New.
- (EF_SH_MERGE_MACH): Combine them.
-
-2003-10-18 Hans-Peter Nilsson <hp@bitrange.com>
-
- * mmix.h (R_MMIX_PUSHJ_STUBBABLE): New reloc number.
- (_bfd_mmix_before_linker_allocation): Rename from
- _bfd_mmix_prepare_linker_allocated_gregs.
- (_bfd_mmix_after_linker_allocation): Rename from
- _bfd_mmix_finalize_linker_allocated_gregs.
-
-2003-10-06 Dave Brolley <brolley@redhat.com>
-
- * frv.h (EF_FRV_CPU_FR550): New macro.
-
-2003-09-30 Chris Demetriou <cgd@broadcom.com>
-
- * mips.h (E_MIPS_ARCH_64R2): New define.
-
-2003-09-23 DJ Delorie <dj@redhat.com>
-
- * sh.h (R_SH_SWITCH8, R_SH_GNU_VTINHERIT, R_SH_GNU_VTENTRY,
- R_SH_LOOP_START,R_SH_LOOP_END): Move to "reserved" spaces.
- (R_SH_DIR16, R_SH_DIR8, R_SH_DIR8UL, R_SH_DIR8UW, R_SH_DIR8U,
- R_SH_DIR8SW, R_SH_DIR8S, R_SH_DIR4UL, R_SH_DIR4UW, R_SH_DIR4U,
- R_SH_PSHA, R_SH_PSHL): New.
-
-2003-09-11 James Cownie <jcownie@etnus.com>
-
- * dwarf2.h: Add HP dwarf extensions from their hacked gdb
- header files (ftp://ftp.hp.com/pub/lang/tools/WDB/wdb-4.0.tar.gz).
-
-2003-09-04 Nick Clifton <nickc@redhat.com>
-
- * v850.h (E_V850E1_ARCH): Define.
-
-2003-08-21 James Cownie <jcownie@etnus.com>
-
- * dwarf2.h: Add PGI dwarf extensions.
-
-2003-08-08 Dmitry Diky <diwil@mail.ru>
-
- * msp430.h: Add xW42 and xE42 parts. Sort MPU list according to
- gcc order.
-
-2003-08-07 Alan Modra <amodra@bigpond.net.au>
-
- * reloc-macros.h (START_RELOC_NUMBERS) : Remove PARAMS macro. Use
- C90 function definition. Formatting.
- (RELOC_NUMBER): Remove !__STDC__ code.
-
-2003-07-28 Eric Christopher <echristo@redhat.com>
-
- * ppc.h (R_PPC_RELAX32): New. Fake relocation.
-
-2003-07-25 H.J. Lu <hongjiu.lu@intel.com>
-
- * v850.h (SHF_V850_GPREL): New.
- (SHF_V850_EPREL): Likewise.
- (SHF_V850_R0REL): Likewise.
-
-2003-07-09 Alexandre Oliva <aoliva@redhat.com>
-
- 2001-05-16 Alexandre Oliva <aoliva@redhat.com>
- * mn10300.h: Introduce GOTPC16, GOTOFF24, GOTOFF16 and
- PLT16, and rename GOTPC to GOTPC32 and GOTOFF to GOTOFF32.
- Renumbered all relocs.
- 2001-04-12 Alexandre Oliva <aoliva@redhat.com>
- * mn10300.h (R_MN10300_GOTPC, R_MN10300_GOTOFF,
- R_MN10300_PLT32, R_MN10300_GOT32, R_MN10300_GOT24,
- R_MN10300_GOT16, R_MN10300_COPY, R_MN10300_GLOB_DAT,
- R_MN10300_JMP_SLOT, R_MN10300_RELATIVE): New relocs.
-
-2003-07-09 Alexandre Oliva <aoliva@redhat.com>
-
- 2000-04-01 Alexandre Oliva <aoliva@cygnus.com>
- * mn10300.h (E_MN10300_MACH_AM33_2): Renamed from
- E_MN10300_MACH_AM332.
- 2000-03-31 Alexandre Oliva <aoliva@cygnus.com>
- * mn10300.h (E_MN10300_MACH_AM332): Defined.
-
-2003-07-01 Martin Schwidefsky <schwidefsky@de.ibm.com>
-
- * s390.h (elf_s390_reloc_type): Add long displacement relocations
- R_390_20, R_390_GOT20, R_390_GOTPLT20 and R_390_TLS_GOTIE20.
-
-2003-06-29 Andreas Jaeger <aj@suse.de>
-
- * mmix.h: Convert to ISO C90 prototypes.
- * mips.h: Likewise.
-
-2003-06-13 Robert Millan <zeratul2@wanadoo.es>
-
- * common.h (GNU_ABI_TAG_NETBSD): New tag.
- (GNU_ABI_TAG_FREEBSD): New tag.
-
-2003-06-10 Richard Sandiford <rsandifo@redhat.com>
-
- * h8.h (E_H8_MACH_H8300SXN): New flag.
-
-2003-06-03 Nick Clifton <nickc@redhat.com>
-
- * v850.h (R_V850_32): Rename to R_V850_ABS32.
- Add R_V850_REL32.
-
-2003-05-15 Roland McGrath <roland@redhat.com>
-
- * common.h (NT_AUXV, AT_*): New macros.
- * external.h (Elf32_External_Auxv, Elf64_External_Auxv): New types.
- * internal.h (Elf_Internal_Auxv): New type.
-
-2003-05-14 Michael Snyder <msnyder@redhat.com>
- From Bernd Schmidt <bernds@redhat.com>
- * h8.h (E_H8_MACH_H8300SX): New.
-
-2003-04-24 Dhananjay Deshpande <dhananjayd@kpitcummins.com>
-
- * h8.h (E_H8_MACH_H8300HN, E_H8_MACH_H8300SN): New
-
-2003-04-23 J"orn Rennecke <joern.rennecke@superh.com>
-
- * common.h (EM_SH): Amend comment to refer to SuperH.
-
-2003-04-22 Kazuhiro Inaoka <inaoka.kazuhiro@renesas.com>
-
- * common.h: Replace references to Mitsubishi M32R with
- references to Renesas M32R.
-
-2003-04-15 Rohit Kumar Srivastava <rohits@kpitcummins.com>
-
- * common.h: Replace occurrances of 'Hitachi' with 'Renesas'.
-
-2003-04-01 Bob Wilson <bob.wilson@acm.org>
-
- * common.h (EM_XTENSA_OLD): Define.
- * xtensa.h: New file.
-
-2003-04-01 Nick Clifton <nickc@redhat.com>
-
- * arm.h (ARM_NOTE_SECTION): Include .gnu in the string.
-
-2003-03-25 Stan Cox <scox@redhat.com>
- Nick Clifton <nickc@redhat.com>
-
- Contribute support for Intel's iWMMXt chip - an ARM variant:
-
- * arm.h (ARM_NOTE_SECTION): Define.
-
-2003-03-03 J"orn Rennecke <joern.rennecke@superh.com>
-
- * sh.h (EF_SH_MERGE_MACH): Make sure SH2E & SH3/SH3E merge to SH3E,
- and SH2E & SH4 merge to SH4, not SH2E.
-
-2003-02-21 Ian Wienand <ianw@gelato.unsw.edu.au>
-
- * ia64.h (SHT_IA_64_LOPSREG, SHT_IA_64_HIPSREG,
- SHT_IA_64_PRIORITY_INIT): Define.
-
-2003-02-18 Alan Modra <amodra@bigpond.net.au>
-
- * ppc64.h (IS_PPC64_TLS_RELOC): Rename from IS_TLS_RELOC.
-
- * ppc.h: Replace DTPMOD64, TPREL64, DTPREL64 with DTPMOD32 etc.
- (IS_PPC_TLS_RELOC): Define.
-
-2003-02-10 Nick Clifton <nickc@redhat.com>
-
- * arm.h (EF_ARM_MAVERICK_FLOAT): Define.
-
-2003-02-05 Alan Modra <amodra@bigpond.net.au>
-
- * ppc.h: Add TLS relocs. Format.
- * ppc64.h: Likewise.
-
-2003-01-27 Alexandre Oliva <aoliva@redhat.com>
-
- * mips.h (EF_MIPS_XGOT): Define.
-
-2003-01-24 Martin Schwidefsky <schwidefsky@de.ibm.com>
-
- * s390.h: Add s390 TLS relocations.
-
-2003-01-23 Nick Clifton <nickc@redhat.com>
-
- * Add sh2e support:
-
- 2002-04-02 Alexandre Oliva <aoliva@redhat.com>
-
- * sh.h (EF_SH_MERGE_MACH): Handle SH2E.
-
- 2002-04-02 Elena Zannoni <ezannoni@redhat.com>
-
- * sh.h (EF_SH2E): New.
-
-2003-01-23 Alan Modra <amodra@bigpond.net.au>
-
- * sh.h: Split out various bits to bfd/elf32-sh64.h.
-
-2003-01-20 Martin Schwidefsky <schwidefsky@de.ibm.com>
-
- * s390.h: Rename R_390_GOTOFF to R_390_GOTOFF32. Add new gotoff,
- gotplt and pltoff relocations.
-
-2003-01-17 Alan Modra <amodra@bigpond.net.au>
-
- * common.h: Formatting, typo fixes.
- (DT_ENCODING): Correct value.
-
-2003-01-17 Fabio Alemagna <falemagn@aros.org>
-
- * common.h (ELFOSABI_AROS): Define.
- (ELFOSABI_OPENVMS): Likewise.
- (ELFOSABI_NSK): Likewise.
-
-2003-01-16 Alan Modra <amodra@bigpond.net.au>
-
- * ppc.h: Split out ppc64 definitions to..
- * pcc64.h: ..here. New file.
- (R_PPC64_REL30): Rename from R_PPC64_ADDR30.
-
-2003-01-13 Dmitry Diky <diwil@mail.ru>
-
- * elf/common.h (EM_MSP430): Change e_machine value to officially
- assigned.
-
-2003-01-02 Ben Elliston <bje@redhat.com>
-
- * common.h (EM_IQ2000): Define.
- * iq2000.h: New file.
-
-2002-12-30 Chris Demetriou <cgd@broadcom.com>
-
- * mips.h (E_MIPS_ARCH_32R2): New define.
-
-2002-12-24 Dmitry Diky <diwil@mail.ru>
-
- * common.h: Define msp430 machine numbers.
- * msp430.h: New file. Define msp430 relocs.
-
-2002-12-20 DJ Delorie <dj@redhat.com>
-
- * xstormy16.h: Add XSTORMY16_12.
-
-2002-12-16 Andrew MacLeod <amacleod@redhat.com>
-
- * xstormy16.h (START_RELOC_NUMBERS) Add relocation numbers
- for R_XSTORMY16_LO16 and R_XSTORMY16_HI16.
-
-2002-12-10 James Cownie <jcownie@etnus.com>
-
- * dwarf2.h (DW_TAG_upc_shared_type, DW_TAG_upc_strict_type,
- DW_TAG_upc_relaxed_type, DW_AT_upc_threads_scaled, DW_LANG_Upc):
- Define.
-
-2002-12-01 Stephane Carrez <stcarrez@nerim.fr>
-
- * m68hc11.h (EF_M68HC12_MACH, EF_M68HCS12_MACH): Define.
- (EF_M68HC11_MACH_MASK, EF_M68HC11_MACH): Define.
- (EF_M68HC11_MERGE_MACH, EF_M68HC11_CAN_MERGE_MACH): Define.
-
-2002-11-30 Alan Modra <amodra@bigpond.net.au>
-
- * mmix.h: Replace boolean with bfd_boolean.
- * sh.h: Likewise.
-
-2002-11-28 Alan Modra <amodra@bigpond.net.au>
-
- * internal.h (elf32_internal_ehdr, Elf32_Internal_Ehdr,
- elf64_internal_ehdr, Elf64_Internal_Ehdr, elf32_internal_phdr,
- Elf32_Internal_Phdr, elf64_internal_phdr, Elf64_Internal_Phdr,
- elf32_internal_shdr, Elf32_Internal_Shdr, elf64_internal_shdr,
- Elf64_Internal_Shdr, elf32_internal_sym, elf64_internal_sym,
- Elf32_Internal_Sym, Elf64_Internal_Sym, Elf32_Internal_Note,
- elf32_internal_note, elf32_internal_rel, Elf32_Internal_Rel,
- elf64_internal_rel, Elf64_Internal_Rel, elf32_internal_rela,
- elf64_internal_rela, Elf32_Internal_Rela, Elf64_Internal_Rela,
- elf32_internal_dyn, elf64_internal_dyn, Elf32_Internal_Dyn,
- Elf64_Internal_Dyn, elf32_internal_verdef, elf64_internal_verdef,
- elf32_internal_verdaux, elf64_internal_verdaux, elf32_internal_verneed,
- elf64_internal_verneed, elf32_internal_vernaux, elf64_internal_vernaux,
- elf32_internal_versym, elf64_internal_versym, Elf32_Internal_Verdef,
- Elf64_Internal_Verdef, Elf32_Internal_Verdaux, Elf64_Internal_Verdaux,
- Elf32_Internal_Verneed, Elf64_Internal_Verneed, Elf32_Internal_Vernaux,
- Elf64_Internal_Vernaux, Elf32_Internal_Versym, Elf64_Internal_Versym,
- Elf32_Internal_Syminfo, Elf64_Internal_Syminfo): Delete.
- (Elf_Internal_Rel): Delete.
-
-2002-10-11 Kaz Kojima <kkojima@rr.iij4u.or.jp>
-
- * sh.h: Add SH TLS relocs.
-
-2002-09-30 Gavin Romig-Koch <gavin@redhat.com>
- Ken Raeburn <raeburn@cygnus.com>
- Aldy Hernandez <aldyh@redhat.com>
- Eric Christopher <echristo@redhat.com>
- Richard Sandiford <rsandifo@redhat.com>
-
- * mips.h (E_MIPS_MACH_4120, E_MIPS_MACH_5400, E_MIPS_MACH_5500): New.
-
-2002-09-12 Roland McGrath <roland@redhat.com>
-
- * dwarf2.h: Updates from GCC version of thie file:
- (enum dwarf_location_atom): DW_OP_calli -> DW_OP_call_ref.
- Add DW_OP_GNU_push_tls_address.
- (DW_OP_lo_user): Change to 0xe0.
-
-2002-08-28 Catherine Moore <clm@redhat.com>
-
- * v850.h (R_V850_LONGCALL, R_V850_ALIGN,
- R_V850_LONGJUMP): New relocations.
-
-2002-08-15 Alan Modra <amodra@bigpond.net.au>
-
- * i370.h: Define relocs using reloc-macros.h.
-
-2002-08-13 Stephane Carrez <stcarrez@nerim.fr>
-
- * m68hc11.h (E_M68HC12_BANKS, E_M68HC11_I32, E_M68HC11_F64,
- EF_M68HC11_ABI): Define for ABI specification.
- (STO_M68HC12_FAR, STO_M68HC12_INTERRUPT): Symbol flags for
- linker and debugger.
- (R_M68HC11_24, R_M68HC11_LO16, R_M68HC11_PAGE): New relocs.
- (R_M68HC11_RL_JUMP, R_M68HC11_RL_GROUP): New reloc for linker
- relaxation.
-
-2002-07-15 Denis Chertykov <denisc@overta.ru>
- Frank Ch. Eigler <fche@redhat.com>
- Ben Elliston <bje@redhat.com>
- Alan Lehotsky <alehotsky@cygnus.com>
- John Healy <jhealy@redhat.com>
- Graham Stott <grahams@redhat.com>
- Jeff Johnston <jjohnstn@redhat.com>
-
- * common.h (EM_IP2K): New macro.
- (EM_IP2K_OLD): New macro.
- * ip2k.h: New file.
-
-2002-07-01 Matt Thomas <matt@3am-software.com>
-
- * vax.h: Rename EF_* to EF_VAX_*.
-
-2002-06-18 Dave Brolley <brolley@redhat.com>
-
- From Catherine Moore, Michael Meissner, Dave Brolley:
- * common.h (EM_CYGNUS_FRV): New macro.
- * frv.h: New file.
-
-2002-06-06 Lars Brinkhoff <lars@nocrew.org>
-
- * common.h: Change registry@sco.com to registry@caldera.com.
- (EM_PDP10, EM_PDP11): Define.
-
-2002-06-04 Jason Thorpe <thorpej@wasabisystems.com>
-
- * sh.h (_bfd_sh64_crange_qsort_cmpb, _bfd_sh64_crange_qsort_cmpl)
- (_bfd_sh64_crange_bsearch_cmpb, _bfd_sh64_crange_bsearch_cmpl): New
- prototypes.
-
-2002-06-01 Richard Henderson <rth@redhat.com>
-
- * alpha.h (LITUSE_ALPHA_ADDR, LITUSE_ALPHA_BASE, LITUSE_ALPHA_BYTOFF,
- LITUSE_ALPHA_JSR, LITUSE_ALPHA_TLSGD, LITUSE_ALPHA_TLSLDM): New.
-
-2002-05-30 Richard Henderson <rth@redhat.com>
-
- * alpha.h (R_ALPHA_TLSGD, R_ALPHA_TLSLDM, R_ALPHA_DTPMOD64,
- R_ALPHA_GOTDTPREL, R_ALPHA_DTPREL64, R_ALPHA_DTPRELHI,
- R_ALPHA_DTPRELLO, R_ALPHA_DTPREL16, R_ALPHA_GOTTPREL, R_ALPHA_TPREL64,
- R_ALPHA_TPRELHI, R_ALPHA_TPRELLO, R_ALPHA_TPREL16): New.
-
-2002-05-29 Matt Thomas <matt@3am-software.com>
-
- * vax.h: New file
-
-2002-05-28 Kuang Hwa Lin <kuang@sbcglobal.net>
-
- * common.h (EM_DLX): Define.
- * dlx.h: New file.
-
-2002-05-08 Jason Thorpe <thorpej@wasabisystems.com>
-
- * common.h (NT_GNU_ABI_TAG): Define.
- (GNU_ABI_TAG_LINUX): Define.
- (GNU_ABI_TAG_HURD): Define.
- (GNU_ABI_TAG_SOLARIS): Define.
- (NT_NETBSD_IDENT): Define.
- (NT_FREEBSD_ABI_TAG): Define.
-
-2002-04-24 Elena Zannoni <ezannoni@redhat.com>
-
- * dwarf2.h: Add DW_AT_GNU_vector.
-
-2002-02-13 Matt Fredette <fredette@netbsd.org>
-
- * m68k.h (EF_M68000): Define.
-
-2002-02-12 Alan Modra <amodra@bigpond.net.au>
-
- * ppc.h (DT_PPC64_OPD, DT_PPC64_OPDSZ): Define.
-
-2002-02-09 Richard Henderson <rth@redhat.com>
-
- * alpha.h (R_ALPHA_BRSGP): New.
-
-2002-02-08 Alexandre Oliva <aoliva@redhat.com>
-
- Contribute sh64-elf.
- 2002-01-23 Alexandre Oliva <aoliva@redhat.com>
- * sh.h (R_SH_GOTPLT32, R_SH_GOT_LOW16, R_SH_GOT_MEDLOW16,
- R_SH_GOT_MEDHI16, R_SH_GOT_HI16, R_SH_GOTPLT_LOW16,
- R_SH_GOTPLT_MEDLOW16, R_SH_GOTPLT_MEDHI16, R_SH_GOTPLT_HI16,
- R_SH_PLT_LOW16, R_SH_PLT_MEDLOW16, R_SH_PLT_MEDHI16,
- R_SH_PLT_HI16, R_SH_GOTOFF_LOW16, R_SH_GOTOFF_MEDLOW16,
- R_SH_GOTOFF_MEDHI16, R_SH_GOTOFF_HI16, R_SH_GOTPC_LOW16,
- R_SH_GOTPC_MEDLOW16, R_SH_GOTPC_MEDHI16, R_SH_GOTPC_HI16,
- R_SH_GOT10BY4, R_SH_GOTPLT10BY4, R_SH_GOT10BY8,
- R_SH_GOTPLT10BY8, R_SH_COPY64, R_SH_GLOB_DAT64, R_SH_JMP_SLOT64,
- R_SH_RELATIVE64): New relocs.
- (R_SH_FIRST_INVALID_RELOC_4): Adjust.
- 2001-05-16 Alexandre Oliva <aoliva@redhat.com>
- * sh.h: Renumbered and renamed some SH5 relocations to match
- official numbers and names; moved unmaching ones to the range
- 0xf2-0xff.
- 2001-01-06 Hans-Peter Nilsson <hpn@cygnus.com>
- * sh.h (sh64_get_contents_type): Declare.
- (sh64_address_is_shmedia): Likewise.
- 2000-12-30 Hans-Peter Nilsson <hpn@cygnus.com>
- * sh.h (sh64_elf_crange): New type.
- (struct sh64_section_data): New.
- (sh64_elf_section_data): New macro.
- (EF_SH5): Rename back from EF_SH64.
- 2000-12-18 Hans-Peter Nilsson <hpn@cygnus.com>
- * sh.h (SHF_SH5_ISA32_MIXED, SHT_SH5_CR_SORTED,
- SH64_CRANGES_SECTION_NAME, SH64_CRANGE_SIZE,
- SH64_CRANGE_CR_ADDR_OFFSET, SH64_CRANGE_CR_SIZE_OFFSET,
- SH64_CRANGE_CR_TYPE_OFFSET): New macros.
- 2000-12-12 Hans-Peter Nilsson <hpn@cygnus.com>
- * sh.h (EF_SH64): Don't define EF_SH64_ABI64.
- 2000-11-27 Hans-Peter Nilsson <hpn@cygnus.com>
- * sh.h (EF_SH64_32BIT_ABI, EF_SH64_64BIT_ABI): Delete.
- (EF_SH64_ABI64): New.
- 2000-11-23 Hans-Peter Nilsson <hpn@cygnus.com>
- * sh.h (EF_SH64): Rename from EF_SH5.
- (EF_SH64_32BIT_ABI): New.
- (EF_SH64_64BIT_ABI): New.
- (R_SH_PT_16, R_SH_SHMEDIA_CODE
- R_SH_IMMU5, R_SH_IMMS6, R_SH_IMMU6, R_SH_IMMS10, R_SH_IMMS10BY2,
- R_SH_IMMS10BY4, R_SH_IMMS10BY8, R_SH_IMMS16, R_SH_IMMU16,
- R_SH_IMM_LOW16, R_SH_IMM_LOW16_PCREL, R_SH_IMM_MEDLOW16,
- R_SH_IMM_MEDLOW16_PCREL, R_SH_IMM_MEDHI16, R_SH_IMM_MEDHI16_PCREL,
- R_SH_IMM_HI16, R_SH_IMM_HI16_PCREL, R_SH_64, R_SH_64_PCREL): New
- relocs.
- 2000-09-01 Ben Elliston <bje@redhat.com>
- * sh.h (EF_SH5): Define.
-
-2002-02-01 Hans-Peter Nilsson <hp@bitrange.com>
-
- * mmix.h: Tweak comments.
- (MMIX_LD_ALLOCATED_REG_CONTENTS_SECTION_NAME): New.
- [BFD_ARCH_SIZE] (_bfd_mmix_prepare_linker_allocated_gregs,
- _bfd_mmix_finalize_linker_allocated_gregs,
- _bfd_mmix_check_all_relocs): Provide prototypes.
-
-2002-01-31 Ivan Guzvinec <ivang@opencores.org>
-
- * or32.h: New file.
- * common.h: Add support for or32 targets.
-
-2002-01-28 Jason Merrill <jason@redhat.com>
-
- * dwarf2.h: Sync with gcc version.
-
-2002-01-16 Alan Modra <amodra@bigpond.net.au>
-
- * ppc.h (DT_PPC64_GLINK): Define.
-
-2002-01-15 Richard Earnshaw <rearnsha@arm.com>
-
- * arm.h (F_VFP_FLOAT, EF_ARM_VFP_FLOAT): Define.
-
-2002-01-09 Jason Thorpe <thorpej@wasabisystems.com>
-
- * common.h: Update copyright years.
- (NT_NETBSDCORE_PROCINFO): Define.
- (NT_NETBSDCORE_FIRSTMACH): Define.
-
-2002-01-06 Steve Ellcey <sje@cup.hp.com>
-
- * ia64.h (ELF_STRING_ia64_unwind_hdr): New Macro for HP-UX.
- (SHT_IA_64_HP_OPT_ANOT): Ditto
- (PT_IA_64_HP_OPT_ANOT): Ditto
- (PT_IA_64_HP_HSL_ANOT): Ditto
- (PT_IA_64_HP_STACK): Ditto
- (SHN_IA_64_ANSI_COMMON): Ditto
-
-2001-12-17 Alan Modra <amodra@bigpond.net.au>
-
- * external.h (Elf_External_Sym_Shndx): Declare.
- * internal.h (struct elf_internal_sym <st_shndx>): Make it an
- unsigned int.
- * common.h (SHN_BAD): Define.
-
-2001-12-13 Jakub Jelinek <jakub@redhat.com>
-
- * common.h (PT_GNU_EH_FRAME): Define.
-
-2001-12-11 Alan Modra <amodra@bigpond.net.au>
-
- * common.h (SHN_XINDEX): Comment typo fix.
- * internal.h (Elf_Internal_Ehdr): Change existing "unsigned short"
- size, count and index fields to "unsigned int".
-
-2001-12-07 Geoffrey Keating <geoffk@redhat.com>
- Richard Henderson <rth@redhat.com>
-
- * common.h (EM_XSTORMY16): Define.
- * xstormy16.h: New file.
-
-2001-11-15 Alan Modra <amodra@bigpond.net.au>
-
- * common.h (NT_ARCH): Define. Remove incorrect comment.
-
-2001-11-11 Geoffrey Keating <geoffk@redhat.com>
-
- * dwarf2.h (dwarf_line_number_ops): Add DWARF 3 opcodes.
-
-2001-10-30 Hans-Peter Nilsson <hp@bitrange.com>
-
- * mmix.h: New file.
-
-2001-10-23 Alan Modra <amodra@bigpond.net.au>
-
- * internal.h: White space changes to keep lines under 80 chars.
-
-2001-10-16 Jeff Holcomb <jeffh@redhat.com>
-
- * internal.h (elf_internal_shdr): Make contents a unsigned char *.
-
-2001-09-18 Alan Modra <amodra@bigpond.net.au>
-
- * internal.h (elf_internal_rela): Make r_addend a bfd_vma.
-
-2001-09-13 Alexandre Oliva <aoliva@redhat.com>
-
- * common.h (EM_OPENRISC_OLD): Renamed the old EM_OPENRISC entry.
-
-2001-09-12 Alexandre Oliva <aoliva@redhat.com>
-
- * common.h (EM_AVR_OLD): Renamed from...
- (EM_AVR): this, redefined as in the current ELF standard.
- (EM_PJ_OLD): Renamed from...
- (EM_PJ): this, redefined as in the current ELF standard.
- (EM_R30, EM_D10V, EM_D30V, EM_V850, EM_M32R, EM_MN10300,
- EM_MN10200, EM_OPENRISC, EM_ARC_A5, EM_XTENSA): Defined as in
- the current ELF standard.
- (EM_CYGNUS_ARC): Removed, unused for a long time.
-
-2001-09-04 Richard Henderson <rth@redhat.com>
-
- * alpha.h (R_ALPHA_OP*, R_ALPHA_IMMED*, R_ALPHA_GPVALUE): Remove.
- (R_ALPHA_GPREL16): Rename from R_ALPHA_IMMED_GP_16.
-
-2001-08-30 Eric Christopher <echristo@redhat.com>
-
- * mips.h: Remove E_MIPS_MACH_MIPS32_4K.
-
-2001-08-29 Jeff Law <law@redhat.com>
-
- * h8.h (EF_H8_MACH): New mask for encoded machine type.
- (E_H8_MACH_H8300, E_H8_MACH_H8300H, E_H8_MACH_H8300S): New
- machine types.
-
-2001-08-26 J"orn Rennecke <amylaar@redhat.com>
-
- * h8.h: New file.
-
-2001-08-27 Staffan Ulfberg <staffanu@swox.se>
-
- * ppc.h: Add relocs from the 64-bit PowerPC ELF ABI revision 1.2.
-
-2001-06-30 Daniel Berlin <dan@cgsoftware.com>
-
- * dwarf2.h: Remerge with gcc version,
- including all new DWARF 2.1 extensions.
-
-2001-06-29 James Cownie <jcownie@etnus.com>
-
- * dwarf2.h: Add DWARF 2.1 attribues.
-
-2001-06-15 Per Bothner <per@bothner.com>
-
- * dwarf2.h: Partial merge with gcc version.
- (enum dwarf_descrim_list): Fix typo -> dwarf_discrim_list.
- (DW_LANG_Java): Use value from dwarf 2.1 draft (also used in gcc).
-
-2001-05-15 Ralf Baechle <ralf@gnu.org>
-
- * common.h: Remove definition of EM_MIPS_RS4_BE. The constant was
- never in active use and is used otherwise by the ABI.
-
-2001-05-11 Jakub Jelinek <jakub@redhat.com>
-
- * ia64.h (ELF_STRING_ia64_unwind_once): Define.
- (ELF_STRING_ia64_unwind_info_once): Define.
-
-2001-05-07 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
-
- * external.h: Fix typo.
- * mips.h: Add/Extend many comments with reference to the MIPS ELF64
- spec v. 2.4, available at e.g.
- ftp://oss.sgi.com/pub/linux/mips/doc/ABI/ELF64.ps.
- (EF_MIPS_UCODE): Define.
- (EF_MIPS_OPTIONS_FIRST): Define.
- (EF_MIPS_ARCH_ASE): Define.
- (EF_MIPS_ARCH_ASE_MDMX): Define.
- (EF_MIPS_ARCH_ASE_M16): Define.
- (SHF_MIPS_ADDR): Renamed SHF_MIPS_ADDR32.
- (SHF_MIPS_STRING): Renamed SHF_MIPS_ADDR64.
- (SHF_MIPS_NODUPES): Define.
- (ELF64_MIPS_R_SSYM): New MIPS ELF 64 relocation info access macro.
- (ELF64_MIPS_R_TYPE3): Likewise.
- (ELF64_MIPS_R_TYPE2): Likewise.
- (ELF64_MIPS_R_TYPE): Likewise.
- (OHW_R10KLDL): Define.
-
-2001-04-24 Todd Fries <todd@fries.net>
-
- * sparc.h: Fix typo.
-
-2001-04-20 Johan Rydberg <jrydberg@opencores.org>
-
- * openrisc.h: New file.
- * common.h (EM_OPENRISC): New constant.
-
-2001-04-23 Bo Thorsen <bo@suse.de>
-
- * x86-64.h: Add vtable support.
-
-2001-03-23 Nick Clifton <nickc@redhat.com>
-
- * mips.h: Remove extraneous whitespace.
-
-2001-03-22 Hans-Peter Nilsson <hp@axis.com>
-
- * cris.h: Add leading comment about PC-relative location.
- (R_CRIS_COPY, R_CRIS_GLOB_DAT, R_CRIS_JUMP_SLOT, R_CRIS_RELATIVE,
- R_CRIS_16_GOT, R_CRIS_32_GOT, R_CRIS_16_GOTPLT, R_CRIS_32_GOTPLT,
- R_CRIS_32_GOTREL, R_CRIS_32_PLT_GOTREL, R_CRIS_32_PLT_PCREL):
- New relocs.
-
-2001-02-27 Philip Blundell <pb@futuretv.com>
-
- * arm.h: Add new definitions from ARM document SWS ESPC 0003 B-01.
- (EF_PIC, et al.): Rename to EF_ARM_xx.
-
-2001-02-09 Martin Schwidefsky <schwidefsky@de.ibm.com>
-
- * common.h: Add linux target for S/390.
- * s390.h: New file.
-
-2001-01-11 Peter Targett <peter.targett@arccores.com>
-
- * arc.h (E_ARC_MACH_ARC5, E_ARC_MACH_ARC6, E_ARC_MACH_ARC7,
- E_ARC_MACH_ARC8): New definitions for cpu types.
-
- * common.h (EM_ARC): Change comment.
-
-2000-12-12 Nick Clifton <nickc@redhat.com>
-
- * mips.h: Fix formatting.
-
-2000-12-11 Jeffrey A Law (law@cygnus.com)
-
- * hppa.h (DT_HP_*): Define relative to OLD_DT_LOOS for hpux
- compatibility.
-
-2000-10-16 Chris Demetriou <cgd@sibyte.com>
-
- * mips.h (E_MIPS_ARCH_32): New constant.
- (E_MIPS_MACH_MIPS32, E_MIPS_MACH_MIPS32_4K): Replace the
- former with the latter.
-
- * mips.h (E_MIPS_ARCH_5, E_MIPS_ARCH_64): New definitions.
-
- * mips.h (E_MIPS_MACH_SB1): New constant.
-
-2000-11-30 Jan Hubicka <jh@suse.cz>
-
- * common.h (EM_X86_64): New macro.
- * x86-64.h: New file.
-
-2000-11-27 Hans-Peter Nilsson <hp@axis.com>
-
- * common.h (e_machine numbers): Clarify comments to describe how
- EM_* constants are assigned. Move EM_PJ from official section to
- ad-hoc section.
- (EM_CRIS): Correct comment to match official description.
- (EM_MMIX): Ditto.
-
-2000-11-22 Nick Clifton <nickc@redhat.com>
-
- * common.h (EM_JAVELIN): New machine number.
- (EM_FIREPATH): New machine number.
- (EM_ZSP): New machine number.
- (EM_MMIX): New machine number.
- (EM_HUANY): New machine number.
- (EM_PRISM): New machine number.
- (SHT_GROUP): New section type.
- (SHT_SYMTAB_SHNDX): New section type.
- (SHF_GROUP): New section flag.
- (SHN_XINDEX): New section index.
- (GRP_COMDAT): New section group flag.
-
-2000-11-20 H.J. Lu <hjl@gnu.org>
-
- * common.h (ELFOSABI_MONTEREY): Renamed to ...
- (ELFOSABI_AIX): This.
-
-2000-11-16 Richard Henderson <rth@redhat.com>
-
- Update relocations per August psABI docs.
- * ia64.h (R_IA64_SEGBASE): Remove.
- (R_IA64_LTV*): Renumber to 0x74 to 0x77.
- (R_IA64_EPLTMSB, R_IA64_EPLTLSB): Remove.
- (R_IA64_TPREL14, R_IA64_TPREL64I): New.
- (R_IA64_DTPMOD*): New.
- (R_IA64_DTPREL*): New.
-
-2000-09-29 Hans-Peter Nilsson <hp@axis.com>
-
- * cris.h (EF_CRIS_UNDERSCORE): New.
-
-2000-09-27 Alan Modra <alan@linuxcare.com.au>
-
- * hppa.h (R_PARISC_DIR14F): Add.
-
-2000-09-14 Alexandre Oliva <aoliva@redhat.com>
-
- * sh.h (R_SH_GOT32, R_SH_PLT32, R_SH_COPY, R_SH_GLOB_DAT,
- R_SH_JMP_SLOT, R_SH_RELATIVE, R_SH_GOTOFF, R_SH_GOTPC): Change
- numbers to the range from 160 to 167.
- (R_SH_FIRST_INVALID_RELOC): Adjust.
- (R_SH_FIRST_INVALID_RELOC_2, R_SH_LAST_INVALID_RELOC_2):
- New relocs to fill in the gap.
-
-2000-09-13 Anders Norlander <anorland@acc.umu.se>
-
- * mips.h (E_MIPS_MACH_4K): New define.
-
-2000-09-05 Alan Modra <alan@linuxcare.com.au>
-
- * hppa.h: Fix a comment.
- (R_PARISC_PCREL12F): Define.
- (R_PARISC_GNU_VTENTRY): Define.
- (R_PARISC_GNU_VTINHERIT): Define.
-
-2000-09-01 Alexandre Oliva <aoliva@redhat.com>
-
- * sh.h (R_SH_GOT32, R_SH_PLT32, R_SH_COPY, R_SH_GLOB_DAT,
- R_SH_JMP_SLOT, R_SH_RELATIVE, R_SH_GOTOFF, R_SH_GOTPC): New relocs.
- (R_SH_FIRST_INVALID_RELOC): Adjust.
-
-2000-08-14 Jim Wilson <wilson@cygnus.com>
-
- * ia64.h (EF_IA_64_REDUCEDFP, EF_IA_64_CONS_GP,
- EF_IA_64_NOFUNCDESC_CONS_GP, EF_IA_64_ABSOLUTE): Define.
-
-2000-08-07 Nick Clifton <nickc@cygnus.com>
-
- * ppc.h: Remove spurious CYGNUS LOCAL comments.
- * v850.h: Likewise.
-
-2000-07-22 Jason Eckhardt <jle@cygnus.com>
-
- * i860.h: New file.
- (elf_i860_reloc_type): Defined ELF32 i860 relocations.
-
-2000-07-20 Hans-Peter Nilsson <hp@axis.com>
-
- common.h (EM_CRIS): New machine number.
- cris.h: New file.
-
-2000-07-19 H.J. Lu <hjl@gnu.org>
-
- * common.h (DF_1_NODEFLIB): Renamed from DF_1_NODEPLIB.
-
-2000-07-19 H.J. Lu <hjl@gnu.org>
-
- * common.h (DT_CHECKSUM): Set to 0x6ffffdf8.
- (DTF_1_CONFEXP): It is 0x00000002 as suspected.
-
-2000-07-19 H.J. Lu <hjl@gnu.org>
-
- * common.h (DT_FEATURE): Renamed from DT_FEATURE_1.
- (DT_CONFIG): New. From Solaris 8.
- (DT_DEPAUDIT): Likewise.
- (DT_AUDIT): Likewise.
- (DT_PLTPAD): Likewise.
- (DT_MOVETAB): Likewise.
- (DF_1_NODEPLIB): Likewise.
- (DF_1_NODUMP): Likewise.
- (DF_1_CONLFAT): Likewise.
- (DT_CHECKSUM): Likewise. FIXME. Check the value on Solaris 8.
- (DTF_1_CONFEXP): Likewise.
-
-2000-07-18 H.J. Lu <hjl@gnu.org>
-
- * common.h (DT_FLAGS_1): Renamed from DT_1_FLAGS.
-
-2000-07-12 Alan Modra <alan@linuxcare.com.au>
-
- * internal.h (struct elf_internal_sym): Update comment for st_other.
-
-2000-07-10 Alan Modra <alan@linuxcare.com.au>
-
- * hppa.h: Add comments to all the relocs.
-
-2000-06-26 Marek Michalkiewicz <marekm@linux.org.pl>
-
- * avr.h (E_AVR_MACH_AVR5): Define.
-
-2000-06-18 Stephane Carrez <stcarrez@worldnet.fr>
-
- * m68hc11.h: New file, definitions for the Motorola 68hc11.
-
-2000-06-06 Alan Modra <alan@linuxcare.com.au>
-
- * reloc-macros.h (START_RELOC_NUMBERS): Don't define initial dummy
- -1 valued enum.
- (RELOC_NUMBER, FAKE_RELOC, EMPTY_RELOC): Append rather than
- prepend comma.
- (END_RELOC_NUMBERS): Give macro an arg to define as last enum.
-
- * alpha.h (R_ALPHA_max): Define via END_RELOC_NUMBERS rather than
- with EMPTY_RELOC.
- * arc.h (R_ARC_max): Likewise.
- * avr.h (R_AVR_max): Likewise.
- * fr30.h (R_FR30_max): Likewise.
- * hppa.h (R_PARISC_UNIMPLEMENTED): Likewise.
- * i960.h (R_960_max): Likewise.
- * m32r.h (R_M32R_max): Likewise.
- * m68k.h (R_68K_max): Likewise.
- * mcore.h (R_MCORE_max): Likewise.
- * mn10300.h (R_MN10300_MAX): Likewise.
- * pj.h (R_PJ_max): Likewise.
- * ppc.h (R_PPC_max): Likewise.
- * sh.h (R_SH_max): Likewise.
- * sparc.h (R_SPARC_max): Likewise.
- * v850.h (R_V850_max): Likewise.
-
- * arm.h (R_ARM_max): Define via END_RELOC_NUMBERS.
- * d10v.h (R_D10V_max): Likewise.
- * d30v.h (R_D30V_max): Likewise.
- * ia64.h (R_IA64_max): Likewise.
- * mips.h (R_MIPS_maxext): Likewise.
- * mn10200.h (R_MN10200_max): Likewise.
-
- * i386.h (R_386_max): Remove old RELOC_NUMBER definition, and
- define via END_RELOC_NUMBERS.
-
-2000-06-03 Alan Modra <alan@linuxcare.com.au>
-
- * reloc-macros.h (START_RELOC_NUMBERS): Fix name clash for
- !__STDC__ case.
- (RELOC_NUMBER): Use ansi stringify if ALMOST_STDC defined.
-
-2000-05-22 Richard Henderson <rth@cygnus.com>
-
- * ia64.h (R_IA64_PCREL60B, R_IA64_PCREL21BI): New.
- (R_IA64_PCREL22, R_IA64_PCREL64I): New.
-
-2000-05-02 H.J. Lu <hjl@gnu.org>
-
- * common.h (ELFOSABI_NONE): Renamed from ELFOSABI_SYSV.
- (ELFOSABI_MODESTO): Defined.
- (ELFOSABI_OPENBSD): Likewise.
-
-2000-04-21 Richard Henderson <rth@cygnus.com>
- David Mosberger <davidm@hpl.hp.com>
-
- * ia64.h: New file.
-
-2000-04-14 H.J. Lu <hjl@gnu.org>
-
- * common.h (ELFOSABI_TRUE64): Renamed to ELFOSABI_TRU64.
-
-2000-04-14 H.J. Lu <hjl@gnu.org>
-
- * common.h (ELFOSABI_NETBSD): Defined.
- (ELFOSABI_HURD): Likewise.
- (ELFOSABI_SOLARIS): Likewise.
- (ELFOSABI_MONTEREY): Likewise.
- (ELFOSABI_IRIX): Likewise.
- (ELFOSABI_FREEBSD): Likewise.
- (ELFOSABI_TRUE64): Likewise.
-
-2000-04-07 Nick Clifton <nickc@cygnus.com>
-
- * arm-oabi.h: Delete.
- * arm.h: Merge in definitions of old reloc numbers from
- arm-oabi.h.
-
-2000-04-06 Nick Clifton <nickc@cygnus.com>
-
- * arm.h (EF_ARM_SYMSARESORTED): Define.
- (EF_ARM_EABIMASK): Define.
- (EF_ARM_EABI_VERSION): Define.
- (EF_ARM_EABI_UNKNOWN): Define.
- (EF_ARM_EABI_VER1): Define.
- (PF_ARM_PI): Define.
- (PF_ARM_ABS): Define.
-
-2000-04-05 J"orn Rennecke <amylaar@cygnus.co.uk>
-
- * sh.h (R_SH_LOOP_START, R_SH_LOOP_END): New RELOC_NUMBERs.
-
-2000-03-27 Denis Chertykov <denisc@overta.ru>
-
- * avr.h: New file. AVR ELF support for BFD.
- * common.h: Add AVR magic number.
-
-2000-03-10 Geoffrey Keating <geoffk@cygnus.com>
-
- * mips.h: Add R_MIPS_GNU_REL_HI16, R_MIPS_GNU_REL_LO16,
- R_MIPS_GNU_REL16_S2, R_MIPS_PC64 and R_MIPS_PC32 relocation
- numbers.
-
-2000-02-23 Linas Vepstas <linas@linas.org>
-
- * i370.h: New file.
-
-2000-02-22 Nick Clifton <nickc@cygnus.com>
-
- * common.h (ELF_ST_OTHER): Remove definition.
- (ELF32_ST_OTHER): Remove definition.
- (ELF64_ST_OTHER): Remove definition.
-
-2000-02-22 H.J. Lu <hjl@gnu.org>
-
- * common.h (ELFOSABI_LINUX): Define.
-
-2000-02-17 J"orn Rennecke <amylaar@cygnus.co.uk>
-
- * sh.h: (EF_SH_MACH_MASK, EF_SH_UNKNOWN, EF_SH1, EF_SH2): New macros.
- (EF_SH3, EF_SH_HAS_DSP, EF_SH_DSP, EF_SH3_DSP): Likewise.
- (EF_SH_HAS_FP, EF_SH3E, EF_SH4, EF_SH_MERGE_MACH): Likewise.
-
-2000-02-03 H.J. Lu <hjl@gnu.org>
-
- * arm-oabi.h: Duplicate changes made to arm.h on Jan. 27,
- 2000 by Thomas de Lellis <tdel@windriver.com>.
-
-2000-01-27 Thomas de Lellis <tdel@windriver.com>
-
- * arm.h (STT_ARM_TFUNC): Define in terms of STT_LOPROC.
- (STT_ARM_16BIT): New flag. Denotes a label that was defined in
- Thumb block but was does not identify a function.
-
-2000-01-20 Nick Clifton <nickc@cygnus.com>
-
- * common.h (EM_MCORE): Fix spelling of Motorola.
- * mcore.h (EM_MCORE): Fix spelling of Motorola.
-
-2000-01-13 Nick Clifton <nickc@cygnus.com>
-
- * common.h (EM_S370): Change comment - this is now the IBM
- System/370.
- (EM_IA_64): Change comment - this is now the IA-64.
-
-2000-01-11 Nick Clifton <nickc@cygnus.com>
-
- * common.h (DT_ENCODING): Fix definition of this value.
- (DT_LOOS): Fix definition of this value.
- (DT_HIOS): Fix definition of this value.
- (OLD_DT_LOOS): Value of DT_LOOS before Oct 4, 1999 draft
- of ELF spec changed it.
- (OLD_DT_HIOS): Value of DT_HIOS before Oct 4, 1999 draft
- of ELF spec changed it.
-
-2000-01-10 Egor Duda <deo@logos-m.ru>
-
- * common.h (NT_WIN32PSTATUS): Define. (cygwin elf core dumps).
-
-1999-12-28 Nick Clifton <nickc@cygnus.com>
-
- * mips.h (STO_*): Redefine in terms of STV_* values now in
- common.h.
-
-1999-12-27 Nick Clifton <nickc@cygnus.com>
-
- * common.h: Upgrade to match Oct4, 1999 Draft ELF ABI Spec.
- (EM_MIPS_RS3_LE): New machine number.
- (EM_RCE): New machine number.
- (EM_MMA): New machine number.
- (EM_PCP): New machine number.
- (EM_NCPU): New machine number.
- (EM_NDR1): New machine number.
- (EM_STARCORE): New machine number.
- (EM_ME16): New machine number.
- (EM_ST100): New machine number.
- (EM_TINYJ): New machine number.
- (EM_FX66): New machine number.
- (EM_ST9PLUS): New machine number.
- (EM_ST7): New machine number.
- (EM_68HC16): New machine number.
- (EM_68HC11): New machine number.
- (EM_68HC08): New machine number.
- (EM_68HC05): New machine number.
- (EM_SVX): New machine number.
- (EM_VAX): New machine number.
- (PF_MASKOS): Change value.
- (SHT_INIT_ARRAY): New value for sh_type field.
- (SHT_FINI_ARRAY): New value for sh_type field.
- (SHT_PREINIT_ARRAY): New value for sh_type field.
- (SHT_HIUSER): Change value.
- (SHF_MERGE): New valye for sh_flags field.
- (SHF_STRINGS): New valye for sh_flags field.
- (SHF_INFO_LINK): New valye for sh_flags field.
- (SHF_OS_NONCONFORMING): New valye for sh_flags field.
- (SHF_MASKOS): Change value.
- (ELF_ST_VISIBILITY): New macro.
- (ELF_ST_OTHER): New macro.
- (STT_COMMON): New symbol type.
- (STV_DEFAULT): Value for symbol visibility.
- (STV_INTERNAL): Value for symbol visibility.
- (STV_HIDDEN): Value for symbol visibility.
- (STV_PROTECTED): Value for symbol visibility.
- (DT_RUNPATH): New dynamic section tag.
- (DT_FLAGS): New dynamic section tag.
- (DT_ENCODING): New dynamic section tag.
- (DT_PREINIT_ARRAY): New dynamic section tag.
- (DT_PREINIT_ARRAYSZ): New dynamic section tag.
- (DT_LOPROC): New dynamic section tag index.
- (DT_HIPROC): New dynamic section tag index.
- (DF_ORIGIN): Value for dynamic section flag.
- (DF_SYMBOLIC): Value for dynamic section flag.
- (DF_TEXTREL): Value for dynamic section flag.
- (DF_BIND_NOW): Value for dynamic section flag.
-
-1999-12-09 Fred Fish <fnf@cygnus.com>
-
- * i960.h (reloc-macros.h): Include using relative dir elf/.
- * i386.h (reloc-macros.h): Include using relative dir elf/.
- * hppa.h (reloc-macros.h): Include using relative dir elf/.
-
-1999-12-07 Jim Blandy <jimb@cygnus.com>
-
- * common.h (NT_PRXFPREG): New definition.
-
-Wed Dec 1 03:02:15 1999 Jeffrey A Law (law@cygnus.com)
-
- * mn10300.h (E_MN10300_MACH_AM33): Define.
-
-Mon Oct 11 22:42:37 1999 Jeffrey A Law (law@cygnus.com)
-
- * hppa.h (PF_HP_PAGE_SIZE): Define.
- (PF_HP_FAR_SHARED, PF_HP_NEAR_SHARED, PF_HP_CODE): Likewise.
- (PF_HP_MODIFY, PF_HP_LAZYSWAP, PF_HP_SBP): Likewise.
-
-Mon Oct 4 17:42:38 1999 Doug Evans <devans@canuck.cygnus.com>
-
- * m32r.h (E_M32RX_ARCH): Define.
-
-1999-09-15 Ulrich Drepper <drepper@cygnus.com>
-
- * hppa.h: Add DT_HP_GST_SIZE, DT_HP_GST_VERSION, and DT_HP_GST_HASHVAL.
-
-1999-09-04 Steve Chamberlain <sac@pobox.com>
-
- * pj.h: New file.
- * common.h (EM_PJ): Define.
-
-1999-09-02 Ulrich Drepper <drepper@cygnus.com>
-
- * hppa.h: Add HPUX specific symbol type definitions.
-
- * hppa.h: Add HPUX specific dynamic and program header table
- specific definitions.
-
-1999-08-31 Scott Bambrough <scottb@netwinder.org>
-
- * common.h (NT_TASKSTRUCT): Define.
-
-1999-07-16 Jakub Jelinek <jj@ultra.linux.cz>
-
- * sparc.h (EF_SPARC_SUN_US3): Define in Cheetah extensions
- flag (as per SCD2.4.1).
-
-1999-07-16 Jakub Jelinek <jj@ultra.linux.cz>
-
- * sparc.h (ELF64_R_TYPE_DATA): Only use ELF64_R_TYPE bits, not
- ELF64_R_SYM bits.
-
-1999-06-21 Philip Blundell <pb@nexus.co.uk>
-
- * arm.h (EF_SOFT_FLOAT, F_SOFT_FLOAT): Define.
-
-1999-07-13 Andreas Schwab <schwab@suse.de>
-
- * m68k.h (EF_CPU32): Move definition inside multiple inclusion
- guard.
-
-1999-07-08 Richard Henderson <rth@cygnus.com>
-
- * sparc.h (ELF64_R_TYPE_DATA): Sign extend the value.
- (ELF64_R_TYPE_INFO): Mask out all but low 24 bits of data.
- (DT_SPARC_PLTFMT): Delete.
- Based on a patch from Jakub Jelinek.
-
-Mon Jun 21 16:36:02 1999 Jeffrey A Law (law@cygnus.com)
-
- * hppa.h (elf_hppa_reloc_type): Renamed from elf32_hppa_reloc_type.
-
-1999-06-10 Jakub Jelinek <jj@ultra.linux.cz>
-
- * sparc.h (R_SPARC_max_std): Define.
-
-Wed Jun 9 15:16:34 1999 Jeffrey A Law (law@cygnus.com)
-
- * hppa.h: Update with various changes from newest PA ELF
- specifications.
-
-1999-06-03 Ian Lance Taylor <ian@zembu.com>
-
- * common.h (EM_PPC64): Define.
-
-1999-06-02 Stu Grossman <grossman@babylon-5.cygnus.com>
-
- * dwarf.h: Add LANG_JAVA.
- * dwarf2.h: Add DW_LANG_Java.
-
-1999-05-29 Nick Clifton <nickc@cygnus.com>
-
- * common.h (ELFOSABI_ARM): Define.
-
-1999-05-28 Nick Clifton <nickc@cygnus.com>
-
- * reloc-macros.h: Update comment.
-
-1999-05-28 Ian Lance Taylor <ian@zembu.com>
-
- * i960.h: New file.
-
-1999-05-16 Nick Clifton <nickc@cygnus.com>
-
- * mcore.h (R_MCORE_COPY): Define.
- (R_MCORE_GLOB_DAT): Define.
- (R_MCORE_JUMP_SLOT): Define.
-
-1999-05-15 Nick Clifton <nickc@cygnus.com>
-
- * mcore.h (R_MCORE_RELATIVE): Define.
-
-1999-05-05 Catherine Moore <clm@cygnus.com>
-
- * m68k.h (EF_CPU32): Define.
-
-1999-04-21 Nick Clifton <nickc@cygnus.com>
-
- * reloc-macros.h (START_RELOC_NUMBERS): Prepend an underscore to
- fake reloc entry name (if possible), in order to avoid conflicts
- with typedefs of the same name.
-
-1999-04-16 Gavin Romig-Koch <gavin@cygnus.com>
-
- * mips.h (EF_MIPS_32BITMODE): New.
-
-1999-04-08 Nick Clifton <nickc@cygnus.com>
-
- * mcore.h: New header file. Defines for Motorola's MCore
- processor.
-
-1999-04-08 Nick Clifton <nickc@cygnus.com>
-
- * common.h: Add new constants defined in: "System V Application
- Binary Interface - DRAFT - April 29, 1998" found at the web site:
- http://www.sco.com/developer/gabi/contents.html
-
- (EM_MMA): Removed. Replaced with EM_MCORE as Motorolla own this
- value.
-
-1999-03-31 Nick Clifton <nickc@cygnus.com>
-
- * reloc-macros.h: Fixed to not generate an enum with a trailing
- comma.
-
-1999-03-16 Gavin Romig-Koch <gavin@cygnus.com>
-
- * mips.h (E_MIPS_MACH_5000): New.
-
-1999-03-10 Ulrich Drepper <drepper@cygnus.com>
-
- * common.h: Add definitions for a few more Solaris ELF extensions.
-
-Thu Feb 18 18:58:26 1999 Ian Lance Taylor <ian@cygnus.com>
-
- * external.h: Only use attribute if __GNUC__ is defined.
-
-1999-02-17 Nick Clifton <nickc@cygnus.com>
-
- Patch submitted by: Scott Bambrough <scottb@corelcomputer.com>
-
- * external.h: struct Elf_External_Versym must be packed on
- ARM. Code uses sizeof(Elf_External_Versym) and assumes it is
- equal to sizeof(char[2]). Reported by Jim Pick <jim@jimpick.com>
-
-1999-02-02 Nick Clifton <nickc@cygnus.com>
-
- * dwarf2.h (DWARF2_External_ARange): New structure.
- (DWARF2_Internal_ARange): New structure.
-
-Mon Feb 1 11:33:56 1999 Catherine Moore <clm@cygnus.com>
-
- * arm.h: Renumber relocs to conform to standard.
- (EF_NEW_ABI): Define.
- (EF_OLD_ABI): Define.
- * arm-oabi.h: New file.
-
-1999-01-28 Nick Clifton <nickc@cygnus.com>
-
- * fr30.h: Add R_FR30_GNU_VT{INHERIT,ENTRY} relocs.
-
-1999-01-27 Nick Clifton <nickc@cygnus.com>
-
- * dwarf2.h: Add typedefs for structures found in dwarf2 sections.
-
-1998-12-16 Gavin Romig-Koch <gavin@cygnus.com>
-
- * mips.h (E_MIPS_MACH_4111): New.
-
-1998-12-15 Gavin Romig-Koch <gavin@cygnus.com>
-
- * mips.h (EF_MIPS_ABI,E_MIPS_ABI_O32,E_MIPS_ABI_O64,
- E_MIPS_ABI_EABI32,E_MIPS_ABI_EABI64):
-
-1998-12-03 Nick Clifton <nickc@cygnus.com>
-
- * fr30.h: Add R_FR30_48 reloc.
-
-1998-12-02 Ulrich Drepper <drepper@cygnus.com>
-
- * mips.h: Add external data type for conflict section.
-
- * mips.h: Add more LL_* options from Irix 6.5.
-
- * mips.h: Add R_MIPS_JALR and adjust R_MIPS_max appropriately.
-
-Mon Nov 30 15:25:58 1998 J"orn Rennecke <amylaar@cygnus.co.uk>
-
- * sh.h (elf_sh_reloc_type): Add R_SH_FIRST_INVALID_RELOC,
- R_SH_LAST_INVALID_RELOC, R_SH_SWITCH8 and R_SH_max.
-
-Tue Nov 10 15:12:28 1998 Nick Clifton <nickc@cygnus.com>
-
- * common.h (EM_CYGNUS_FR30): Reduce to a 16 bit value.
-
-Tue Nov 10 15:17:28 1998 Catherine Moore <clm@cygnus.com>
-
- * d10v.h: Add vtable relocs.
-
-Wed Nov 4 15:56:50 1998 Nick Clifton <nickc@cygnus.com>
-
- * common.h (EM_CYGNUS_FR30): New machine number.
-
- * fr30.h: New file: Definitions for the FR30.
-
-Fri Oct 30 11:54:15 1998 Catherine Moore <clm@cygnus.com>
-
- From Philip Blundell <pb@nexus.co.uk>:
- * arm.h (R_ARM_COPY, et al.): New relocs, used by Linux for PIC.
- (EF_ALIGN8): New flag.
-
-Tue Oct 20 11:19:50 1998 Ian Lance Taylor <ian@cygnus.com>
-
- * common.h (NT_LWPSTATUS): Close comment accidentally left open.
-
-Mon Oct 19 20:24:11 1998 Catherine Moore <clm@cygnus.com>
-
- * sh.h: Add vtable relocs.
-
-Mon Oct 19 01:44:42 1998 Felix Lee <flee@cygnus.com>
-
- * common.h (NT_PSTATUS, NT_FPREGS, NT_PSINFO,
- NT_LWPSTATUS,NT_LWPSINFO): added.
- * internal.h (Elf_Internal_Note): new structure members.
-
-Fri Oct 16 14:11:25 1998 Catherine Moore <clm@cygnus.com>
-
- * m32r.h: Add vtable relocs.
-
-Tue Oct 6 09:22:22 1998 Catherine Moore <clm@cygnus.com>
-
- * sparc.h: Add vtable relocs.
-
-Mon Oct 5 09:39:22 1998 Catherine Moore <clm@cygnus.com>
-
- * v850.h: Add vtable relocs.
-
-Sun Oct 4 21:17:51 1998 Ian Lance Taylor <ian@cygnus.com>
-
- * i386.h (R_386_max): Change from 252 to 24.
-
-Mon Sep 21 12:24:44 1998 Catherine Moore <clm@cygnus.com>
-
- * i386.h: Change vtable reloc numbers.
-
-Sun Sep 20 00:54:22 1998 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
-
- * m68k.h: Add vtable relocs and R_68K_max.
-
-Tue Sep 15 09:56:49 CDT 1998 Catherine Moore <clm@cygnus.com>
-
- * arm.h: Add vtable relocs.
-
-Mon Aug 31 11:25:27 1998 Catherine Moore <clm@cygnus.com>
-
- * arm.h: Define STT_ARM_TFUNC. Remove ST_THUMB_xxxx
- definitions.
-
-Sat Aug 29 22:25:51 1998 Richard Henderson <rth@cygnus.com>
-
- * i386.h: Add vtable relocs.
-
-1998-08-25 16:42 Ulrich Drepper <drepper@cygnus.com>
-
- * common.h: Add SYMINFO_* macros to access Elf*_Syminfo information.
-
- * external.h: Add Elf_External_Syminfo definition.
-
- * internal.h: Add Elf_Internal_Syminfo, Elf32_Internal_Syminfo,
- and Elf64_Syminfo definitions.
-
-Sun Aug 9 20:26:49 CDT 1998 Catherine Moore <clm@cygnus.com>
-
- * arm.h: Add ST_THUMB definitions.
-
-Wed Aug 5 15:52:35 1998 Nick Clifton <nickc@cygnus.com>
-
- * arm.h: Add ELF header flags to specify compile time optins:
- EF_INTERWORK: New flag.
- EF_APCS_26: New flag.
- EF_APCS_FLOAT: New flag.
- EF_PIC: New flag.
-
-1998-07-31 21:28 Ulrich Drepper <drepper@cygnus.com>
-
- * mips.h: Add missing RHF_* constants.
-
-Fri Jul 31 10:01:40 1998 Catherine Moore <clm@cygnus.com>
-
- * arm.h: Add R_ARM_THM_PC9 relocation.
-
-1998-07-30 16:25 Ulrich Drepper <drepper@cygnus.com>
-
- * common.h: Add new DT_* entries and there flag macros from Solaris.
-
-Tue Jul 28 18:14:07 1998 Stan Cox <scox@equinox.cygnus.com>
-
- * sparc.h: (R_SPARC_REV32): Added for little endian data e.g. sparc 86x.
-
-Fri Jul 24 11:22:06 1998 Jeffrey A Law (law@cygnus.com)
-
- * mn10300.h: Add R_MN10300_24 relocation.
-
-1998-07-24 Ulrich Drepper <drepper@cygnus.com>
-
- * mips.h: Add MIPS64 relocation names and values.
-
-Wed Jul 22 19:29:00 Catherine Moore <clm@cygnus.com>
-
- * arm.h: Rename relocations.
-
-1998-07-22 Ulrich Drepper <drepper@cygnus.com>
-
- * ppc.h: Define enum as elf_ppc_reloc_type.
-
-Wed Jul 22 16:22:11 1998 Nick Clifton <nickc@cygnus.com>
-
- * reloc-macros.h: New file. Provides relocation macros:
- START_RELOC_NUMBERS, RELOC_NUMBER, FAKE_RELOC, EMPTY_RELOC and
- END_RELOC_NUMBERS used by other elf header files.
-
- * alpha.h: Use reloc-macros.h.
- * arc.h: Use reloc-macros.h.
- * arm.h: Use reloc-macros.h.
- * d10v.h: Use reloc-macros.h.
- * d30v.h: Use reloc-macros.h.
- * hppa.h: Use reloc-macros.h.
- * i386.h: Use reloc-macros.h.
- * m32r.h: Use reloc-macros.h.
- * m68k.h: Use reloc-macros.h.
- * mips.h: Use reloc-macros.h.
- * mn10200.h: Use reloc-macros.h.
- * mn10300.h: Use reloc-macros.h.
- * ppc.h: Use reloc-macros.h.
- * sh.h: Use reloc-macros.h.
- * sparc.h: Use reloc-macros.h.
- * v850.h: Use reloc-macros.h.
-
-1998-07-22 13:07 Ulrich Drepper <drepper@cygnus.com>
-
- * mn10300.h: Rewrite relocation definition using macros.
- * mips.h: Likewise.
- * ppc.h: Likewise.
- * alpha.h: Likewise.
- * arm.h: Likewise.
- * d10v.h: Likewise.
- * d30v.h: Likewise.
- * m32r.h: Likewise.
- * m68k.h: Likewise.
- * mn10200.h: Likewise.
- * sh.h: Likewise.
- * sparc.h: Likewise.
-
-1998-07-21 13:07 Ulrich Drepper <drepper@cygnus.com>
-
- * arm.h: New file.
- * d10v.h: New file.
- * d30v.h: New file.
- * i386.h: New file.
- * m68k.h: New file.
- * mn10200.h: New file.
- * sh.h: New file.
-
- * mips.h: Add R_MIPS_* and SHT_MIPS_* entries.
-
- * mn10300.h: Add R_MN10300_* entries.
-
- * ppc.h: Add R_PPC_* entries.
-
-1998-07-20 07:11 Ulrich Drepper <drepper@cygnus.com>
-
- * mips.h: Add ODK_*, OEX_*, OPAD_*, OHW_*, and OGP_* constants.
- Define Elf32_External_Lib.
-
-1998-07-19 15:24 Ulrich Drepper <drepper@cygnus.com>
-
- * mips.h (PT_MIPS_OPTIONS): New symbol.
- Add lots of DT_MIPS_* symbols.
-
-Fri Jun 26 10:46:35 1998 Jeffrey A Law (law@cygnus.com)
-
- * mn10300.h: New file.
-
-Thu Jun 18 19:27:56 1998 Nick Clifton <nickc@cygnus.com>
-
- * common.h (EM_960, EM_V800, EM_FR20, EM_RH32, EM_MMA,
- EM_OLD_ALPHA): Add these constants.
-
-Thu Jun 11 17:59:01 1998 Nick Clifton <nickc@cygnus.com>
-
- * common.h (EM_486, EM_S370): Add these constants.
-
-Tue Jun 9 09:35:29 1998 Nick Clifton <nickc@cygnus.com>
-
- * common.h (EM_ARM): Add this constant.
-
-Wed May 6 09:45:30 1998 Gavin Koch <gavin@cygnus.com>
-
- * mips.h (EF_MIPS_MACH,E_MIPS_MACH_*): Added.
-
-Sat Apr 25 18:35:06 1998 Richard Henderson <rth@cygnus.com>
-
- * alpha.h (STO_ALPHA_NOPV, STO_ALPHA_STD_GPLOAD): New.
-
-Wed Apr 15 15:42:45 1998 Richard Henderson <rth@cygnus.com>
-
- * common.h (EM_SPARC64): Move and rename to EM_OLD_SPARCV9.
- (EM_SPARCV9): New. This is the official ABI name and number.
-
-Sat Feb 28 17:04:41 1998 Richard Henderson <rth@cygnus.com>
-
- * alpha.h (EF_ALPHA_32BIT, EF_ALPHA_CANRELAX): New.
-
-Mon Dec 15 15:07:49 1997 Nick Clifton <nickc@cygnus.com>
-
- * m32r.h (EF_M32R_ARCH, E_M32R_ARCH): New flags to
- specify machine architecture.
-
-Fri Dec 5 11:20:08 1997 Nick Clifton <nickc@cygnus.com>
-
- * v850.h: New constants: SHN_V850_SCOMMON, SHN_V850_TCOMMON,
- SHN_V850_ZCOMMON, SHT_V850_SCOMMON, SHT_V850_TCOMMON,
- SHT_V850_ZCOMMON to handle v850 common sections.
- enum reloc_type renamed to v850_reloc_type to avoid name
- conflict.
-
-Thu Oct 23 13:55:24 1997 Richard Henderson <rth@cygnus.com>
-
- * sparc.h (enum elf_sparc_reloc_type): Add UA64 & UA16.
-
-Thu Oct 23 00:42:04 1997 Richard Henderson <rth@dot.cygnus.com>
-
- * sparc.h (DT_SPARC_REGISTER): New macro.
- (DT_SPARC_PLTFMT): In support of old sparc64-linux .plts; will
- go away soon.
-
-Tue Sep 30 13:26:58 1997 Doug Evans <dje@canuck.cygnus.com>
-
- * sparc.h (EF_SPARC_HAL_R1, EF_SPARC_EXT_MASK): New macros.
- (EF_SPARCV9_{MM,TSO,PSO,RMO}): New macros.
- (SHN_BEFORE,SHN_AFTER): New macros.
- (SHF_EXCLUDE,SHF_ORDERED): New macros.
- (STT_REGISTER): New macro.
- (R_SPARC_GLOB_JMP): Deleted, but slot reserved.
- (R_SPARC_{DISP64,PLT64,HIX22,LOX10}): New relocations.
- (R_SPARC_{H44,M44,L44,REGISTER}): New relocations.
- (ELF64_R_TYPE_{DATA,ID,INFO}): New macros.
-
-Wed Sep 17 16:41:42 1997 Nick Clifton <nickc@cygnus.com>
-
- * v850.h: Add R_V850_CALLT_6_7_OFFSET and R_V850_CALLT_16_16_OFFSET.
-
-Tue Sep 16 14:16:17 1997 Nick Clifton <nickc@cygnus.com>
-
- * v850.h (reloc_type): Add R_V850_TDA_16_16_OFFSET.
-
-Wed Sep 3 15:11:14 1997 Richard Henderson <rth@cygnus.com>
-
- * mips.h: Correct typo in comment.
-
-Wed Sep 3 11:25:57 1997 Nick Clifton <nickc@cygnus.com>
-
- * v850.h (reloc_type): Remove R_V850_16_PCREL.
-
-Tue Sep 2 17:41:05 1997 Nick Clifton <nickc@cygnus.com>
-
- * common.h: Remove magic number for V850E.
- * common.h: Remove magic number for V850EA.
- * v850.h: Add new flags for e_flags field in elf header.
-
-Mon Aug 25 16:06:47 1997 Nick Clifton <nickc@cygnus.com>
-
- * common.h (EM_CYGNUS_V850E): backend magic number for v850e.
- * common.h (EM_CYGNUS_V850EA): backend magic number for v850ea.
-
-Mon Aug 18 11:05:23 1997 Nick Clifton <nickc@cygnus.com>
-
- * v850.h (reloc_type): Add 16 bit PC relative relocation.
-
-Fri Aug 15 05:10:09 1997 Doug Evans <dje@canuck.cygnus.com>
-
- * arc.h (enum reloc): Move here from elf32-arc.c.
-
-Fri Aug 8 17:05:29 1997 Doug Evans <dje@canuck.cygnus.com>
-
- * arc.h: New file.
- * common.h (EM_CYGNUS_ARC): Define.
-
-Mon Jun 16 14:46:12 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * internal.h (Elf_Internal_Ehdr): Change e_phoff and e_shoff from
- bfd_signed_vma to bfd_size_type, as they are not signed.
-
-Wed Mar 5 15:35:26 1997 Doug Evans <dje@seba.cygnus.com>
-
- * m32r.h (SHF_M32R_CAN_RELAX): Define.
-
-Mon Feb 24 17:49:01 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * external.h: Dump the 32/64 bit specific forms of the version
- structures, and just define them as size independent.
-
- * common.h (VERSYM_HIDDEN, VERSYM_VERSION): Define.
-
-Fri Feb 21 13:00:34 1997 Doug Evans <dje@canuck.cygnus.com>
-
- * m32r.h (enum reloc_type): Add R_M32R_SDA16.
- (SHN_M32R_SCOMMON): Define.
-
-Wed Feb 19 15:35:31 1997 Ian Lance Taylor <ian@cygnus.com>
-
- From Eric Youngdale <eric@andante.jic.com>:
- * external.h, internal.h, common.h: Added new structures and
- definitions for ELF versions.
-
-Tue Feb 18 17:40:36 1997 Martin M. Hunt <hunt@pizza.cygnus.com>
-
- * common.h (EM_CYGNUS_D30V): Define.
-
-Mon Jan 27 11:54:44 1997 Doug Evans <dje@seba.cygnus.com>
-
- * m32r.h (enum reloc_type): Add R_M32R_HI16_[SU]LO,R_M32R_LO16.
-
-Fri Jan 3 11:32:51 1997 Michael Meissner <meissner@tiktok.cygnus.com>
-
- * v850.h (V850_OTHER_{TDA_BYTE,ERROR}): New bits for the st_other
- field.
- (SHN_V850_*): Remove v850 specific section indexes, which are not
- needed.
- (enum reloc_type): Move the v850 relocations here from
- elf32-v850.c
-
-Thu Jan 2 19:30:23 1997 Michael Meissner <meissner@tiktok.cygnus.com>
-
- * v850.h: New file, provide V850 specific definitions.
-
-Tue Dec 31 14:44:32 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * common.h (DT_AUXILIARY): Define.
- (DT_FILTER): Define.
-
-Wed Dec 4 05:03:37 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * dwarf2.h: Update.
-
-Tue Nov 26 10:44:47 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * mips.h (STO_MIPS16): Define.
-
-Tue Nov 12 15:45:42 1996 Martin M. Hunt <hunt@pizza.cygnus.com>
-
- * d10v.h: Remove empty file.
-
-Tue Oct 8 11:31:24 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * mips.h (EF_MIPS_ABI2): Define.
-
-Thu Oct 3 10:01:40 1996 Jeffrey A Law (law@cygnus.com)
-
- * common.h: Break mn10x00 support into mn10200 and mn10300.
-
-Wed Oct 2 21:26:43 1996 Jeffrey A Law (law@cygnus.com)
-
- * common.h (EM_CYGNUS_MN10x00): Define.
-
-Mon Sep 23 09:18:04 1996 Doug Evans <dje@seba.cygnus.com>
-
- * m32r.h: New file.
-
-Fri Aug 30 17:06:21 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * common.h (EM_SH): Define.
-
-Tue Aug 20 14:47:54 1996 J.T. Conklin <jtc@hippo.cygnus.com>
-
- * common.h (EM_CYGNUS_V850): Define.
-
-Mon Aug 19 10:59:10 1996 Doug Evans <dje@canuck.cygnus.com>
-
- * common.h (EM_CYGNUS_M32R): Define.
-
-Mon Jul 22 18:59:55 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * mips.h (SHT_MIPS_IFACE, SHT_MIPS_CONTENT): Define.
- (SHT_MIPS_SYMBOL_LIB): Define.
- (SHF_MIPS_MERGE, SHF_MIPS_ADDR32, SHF_MIPS_ADDR64): Define.
- (SHF_MIPS_NOSTRIP, SHF_MIPS_LOCAL, SHF_MIPS_NAMES): Define.
-
-Thu Jul 18 19:12:15 1996 Stan Shebs <shebs@andros.cygnus.com>
-
- * dwarf2.h: New file.
-
-Jul 18 13:20:39 1996 Martin M. Hunt <hunt@pizza.cygnus.com>
-
- * common.h (EM_CYGNUS_D10V): Define.
- * d10v.h: New file.
-
-Fri Jun 21 12:33:24 1996 Richard Henderson <rth@tamu.edu>
-
- * alpha.h: New file.
- * common.h (EM_ALPHA): Define.
-
-Fri May 31 17:28:05 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * mips.h (Elf_External_Options, Elf_Internal_Options): Define.
- (bfd_mips_elf_swap_options_in): Declare.
- (bfd_mips_elf_swap_options_out): Declare.
- (ODK_*): Define.
- (Elf64_External_RegInfo, Elf64_Internal_RegInfo): Define.
- (bfd_mips_elf64_swap_reginfo_in): Declare.
- (bfd_mips_elf64_swap_reginfo_out): Declare.
-
-Thu May 30 12:35:57 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * mips.h (E_MIPS_ARCH_4): Define.
-
-Wed May 29 15:35:33 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * mips.h (Elf64_Mips_External_Rel): Define.
- (Elf64_Mips_Internal_Rel): Define.
- (Elf64_Mips_External_Rela, Elf64_Mips_Internal_Rela): Define.
- (RSS_*): Define.
-
-Mon Apr 22 18:26:30 1996 Doug Evans <dje@canuck.cygnus.com>
-
- * sparc.h (R_SPARC_[56]): Always define.
-
-Mon Feb 19 01:55:56 1996 Doug Evans <dje@charmed.cygnus.com>
-
- * sparc.h (R_SPARC_{PLT32,HIPLT22,LOPLT10,PCPLT32,PCPLT22,
- PCPLT10,5,6}): Don't define ifdef SPARC64_OLD_RELOCS.
-
-Tue Feb 6 11:33:58 1996 Doug Evans <dje@charmed.cygnus.com>
-
- * sparc.h (enum sparc_elf_reloc_type): Define.
-
-Wed Jan 17 09:09:16 1996 Doug Evans <dje@canuck.cygnus.com>
-
- * common.h: Define EM_SPARC32PLUS.
- * sparc.h: New file.
-
-Thu Jan 11 16:27:34 1996 Michael Meissner <meissner@tiktok.cygnus.com>
-
- * ppc.h (SHF_EXCLUDE, SHT_ORDERED): New fields from the abi.
-
-Thu Nov 30 16:47:18 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * internal.h (struct elf_segment_map): Add includes_filehdr and
- includes_phdrs fields.
-
-Tue Nov 28 16:58:10 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * internal.h (struct elf_segment_map): Define.
-
-Tue Oct 31 15:19:36 1995 Fred Fish <fnf@cygnus.com>
-
- * common.h, dwarf.h, external.h, hppa.h, internal.h,
- mips.h, ppc.h: Protect against multiple inclusions.
-
-Thu Sep 21 13:51:58 1995 Michael Meissner <meissner@tiktok.cygnus.com>
-
- * ppc.h (EF_PPC_RELOCATABLE_LIB): Add new flag bit.
-
-Fri Sep 1 15:32:17 1995 Kazumoto Kojima <kkojima@info.kanagawa-u.ac.jp>
-
- * mips.h: Add some definitions used on Irix 5.
-
-Tue Jun 20 10:18:28 1995 Jeff Law (law@snake.cs.utah.edu)
-
- * hppa.h (CPU_PA_RISC1_0): Protect from redefinitions.
- (CPU_PA_RISC1_1): Likewise.
-
-Wed Mar 8 18:14:37 1995 Michael Meissner <meissner@tiktok.cygnus.com>
-
- * ppc.h: New file for PowerPC support.
-
-Tue Feb 14 13:59:13 1995 Michael Meissner <meissner@tiktok.cygnus.com>
-
- * common.h (EM_PPC): Use offical value of 20, not 17.
- (EM_PPC_OLD): Define this to be the old value of EM_PPC.
-
-Tue Jan 24 09:40:59 1995 Michael Meissner <meissner@tiktok.cygnus.com>
-
- * common.h (EM_PPC): New macro, PowerPC machine id.
-
-Tue Jan 17 10:51:38 1995 Ian Lance Taylor <ian@sanguine.cygnus.com>
-
- * mips.h (SHT_MIPS_MSYM, SHT_MIPS_DWARF, SHT_MIPS_EVENTS): Define.
-
-Mon Oct 17 13:43:59 1994 Ian Lance Taylor <ian@sanguine.cygnus.com>
-
- * internal.h (Elf_Internal_Shdr): Remove rawdata and size fields.
- Add bfd_section field.
-
-Tue May 24 16:11:50 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * mips.h (Elf32_External_gptab): Define.
-
-Mon May 16 13:22:04 1994 Jeff Law (law@snake.cs.utah.edu)
-
- * common.h (EM_HPPA): Delete.
- (EM_PARISC): Add.
- * hppa.h: New file.
-
-Mon May 9 13:27:03 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * common.h (SHN_LORESERVE): Rename from SHN_LORESERV.
- (ELF32_R_TYPE, ELF32_R_INFO): Don't rely on size of unsigned char.
- (ELF64_R_TYPE): Don't rely on size of unsigned long.
-
-Mon Apr 25 15:53:09 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * internal.h (Elf_Internal_Shdr): Use PTR, not void *.
-
-Fri Mar 11 00:34:59 1994 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
-
- * mips.h (SHN_MIPS_TEXT, SHN_MIPS_DATA): Define.
-
-Sat Mar 5 14:08:54 1994 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
-
- * internal.h: Remove Elf32_*, Elf64_* typedefs. These names
- cause conflicts with system headers, e.g. link.h in gdb/solib.c.
- Combine 32- and 64-bit versions of *_Internal_Dyn.
- * common.h: Replace uses of Elf64_Word, Elf64_Xword typedefs
- by their expansion.
- * mips.h: Replace uses of Elf32_Word, Elf32_Sword, Elf32_Addr
- typedefs by their expansion. Add DT_MIPS_RLD_MAP definition.
-
-Fri Feb 18 10:39:54 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * common.h (EM_CYGNUS_POWERPC): Define. This may be temporary,
- depending upon how quickly I can find a real PowerPC ABI.
-
-Mon Feb 7 08:27:13 1994 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- * internal.h: Change HOST_64_BIT to BFD_HOST_64_BIT.
-
-Wed Feb 2 14:12:18 1994 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- * common.h: Add comments regarding value of EM_HPPA and how to
- pick an unofficial value.
-
-Wed Nov 17 17:14:26 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * mips.h (SHT_MIPS_OPTIONS): Define.
-
-Mon Nov 8 17:57:00 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * mips.h: Added some more MIPS ABI macro definitions.
-
-Wed Nov 3 22:07:17 1993 Ken Raeburn (raeburn@rtl.cygnus.com)
-
- * common.h (EM_MIPS_RS4_BE): New macro.
-
-Tue Oct 12 07:28:18 1993 Ian Lance Taylor (ian@cygnus.com)
-
- * mips.h: New file. MIPS ABI specific information.
-
-Mon Jun 21 13:13:43 1993 Ken Raeburn (raeburn@poseidon.cygnus.com)
-
- * internal.h: Combined 32- and 64-bit versions of all structures
- except *_Internal_Dyn. This will simply the assembler interface,
- and some bfd code.
-
-Tue May 25 02:00:16 1993 Ken Raeburn (raeburn@cambridge.cygnus.com)
-
- * external.h, internal.h, common.h: Added 64-bit versions of some
- structures and macros. Renamed old versions to put "32" in the
- name. Some are unchanged.
-
-Thu Apr 29 12:12:20 1993 Ken Raeburn (raeburn@deneb.cygnus.com)
-
- * common.h (EM_HPPA, NT_VERSION, STN_UNDEF, DT_*): New macros.
- * external.h (Elf_External_Dyn): New type.
-
- * internal.h (Elf_Intenral_Shdr): New field `size'.
- (Elf_Internal_Dyn): New type.
-
-Tue Apr 20 16:03:45 1993 Fred Fish (fnf@cygnus.com)
-
- * dwarf.h (LANG_CHILL): Change value to one randomly picked in
- the user defined range, to reduce probability of collisions.
-
-Sun Nov 15 09:34:02 1992 Fred Fish (fnf@cygnus.com)
-
- * dwarf.h (AT_src_coords): Whitespace change only.
- * dwarf.h (AT_body_begin, AT_body_end, LANG_MODULA2):
- Add from latest gcc.
- * dwarf.h (LANG_CHILL): Add as GNU extension.
-
-Sat Aug 1 13:46:53 1992 Fred Fish (fnf@cygnus.com)
-
- * dwarf.h: Replace with current version from gcc distribution.
-
-Fri Jun 19 19:05:09 1992 John Gilmore (gnu at cygnus.com)
-
- * internal.h: Add real struct tags to all the Type_Defs, so they
- can be used in prototypes where the Type_Defs are not known.
-
-Fri Apr 3 20:58:58 1992 Mark Eichin (eichin at cygnus.com)
-
- * common.h: added ELF_R_{SYM,TYPE,INFO} for handling relocation
- info
- added EM_MIPS, and corrected value of EM_860 based on System V ABI
- manual.
-
- * external.h: added Elf_External_{Rel,Rela}.
-
- * internal.h: added Elf_Internal_{Rel,Rela}.
- added rawdata to Elf_Internal_Shdr.
-
-Sat Nov 30 20:43:59 1991 Steve Chamberlain (sac at rtl.cygnus.com)
-
- * common.h, dwarf.h, external.h, internal.h, ChangeLog; moved from
- ../elf-<foo>
-
-
-Copyright (C) 1991-2003 Free Software Foundation, Inc.
-
-Copying and distribution of this file, with or without modification,
-are permitted in any medium without royalty provided the copyright
-notice and this notice are preserved.
-
-Local Variables:
-mode: change-log
-left-margin: 8
-fill-column: 74
-version-control: never
-End:
diff --git a/include/elf/aarch64.h b/include/elf/aarch64.h
deleted file mode 100644
index 41016038f..000000000
--- a/include/elf/aarch64.h
+++ /dev/null
@@ -1,327 +0,0 @@
-/* AArch64 ELF support for BFD.
-
- Copyright 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
- Contributed by ARM Ltd.
-
- This file is part of GNU Binutils.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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; see the file COPYING3. If not,
- see <http://www.gnu.org/licenses/>. */
-
-#ifndef _ELF_AARCH64_H
-#define _ELF_AARCH64_H
-
-#include "elf/reloc-macros.h"
-
-/* Processor specific program header types. */
-#define PT_AARCH64_ARCHEXT (PT_LOPROC + 0)
-
-/* Additional section types. */
-#define SHT_AARCH64_ATTRIBUTES 0x70000003 /* Section holds attributes. */
-
-/* AArch64-specific values for sh_flags. */
-#define SHF_ENTRYSECT 0x10000000 /* Section contains an
- entry point. */
-#define SHF_COMDEF 0x80000000 /* Section may be multiply defined
- in the input to a link step. */
-
-/* Relocation types. */
-
-START_RELOC_NUMBERS (elf_aarch64_reloc_type)
-
-/* Null relocations. */
-RELOC_NUMBER (R_AARCH64_NONE, 0) /* No reloc */
-
-/* Basic data relocations. */
-
-/* .word: (S+A) */
-RELOC_NUMBER (R_AARCH64_P32_ABS32, 1)
-
-/* .half: (S+A) */
-RELOC_NUMBER (R_AARCH64_P32_ABS16, 2)
-
-/* .word: (S+A-P) */
-RELOC_NUMBER (R_AARCH64_P32_PREL32, 3)
-
-/* .half: (S+A-P) */
-RELOC_NUMBER (R_AARCH64_P32_PREL16, 4)
-
-/* Group relocations to create a 16, 32, 48 or 64 bit
- unsigned data or abs address inline. */
-
-/* MOV[ZK]: ((S+A) >> 0) & 0xffff */
-RELOC_NUMBER (R_AARCH64_P32_MOVW_UABS_G0, 5)
-
-/* MOV[ZK]: ((S+A) >> 0) & 0xffff */
-RELOC_NUMBER (R_AARCH64_P32_MOVW_UABS_G0_NC, 6)
-
-/* MOV[ZK]: ((S+A) >> 16) & 0xffff */
-RELOC_NUMBER (R_AARCH64_P32_MOVW_UABS_G1, 7)
-
-/* Group relocations to create high part of a 16, 32, 48 or 64 bit
- signed data or abs address inline. Will change instruction
- to MOVN or MOVZ depending on sign of calculated value. */
-
-/* MOV[ZN]: ((S+A) >> 0) & 0xffff */
-RELOC_NUMBER (R_AARCH64_P32_MOVW_SABS_G0, 8)
-
-/* Relocations to generate 19, 21 and 33 bit PC-relative load/store
- addresses: PG(x) is (x & ~0xfff). */
-
-/* LD-lit: ((S+A-P) >> 2) & 0x7ffff */
-RELOC_NUMBER (R_AARCH64_P32_LD_PREL_LO19, 9)
-
-/* ADR: (S+A-P) & 0x1fffff */
-RELOC_NUMBER (R_AARCH64_P32_ADR_PREL_LO21, 10)
-
-/* ADRH: ((PG(S+A)-PG(P)) >> 12) & 0x1fffff */
-RELOC_NUMBER (R_AARCH64_P32_ADR_PREL_PG_HI21, 11)
-
-/* ADD: (S+A) & 0xfff */
-RELOC_NUMBER (R_AARCH64_P32_ADD_ABS_LO12_NC, 12)
-
-/* LD/ST8: (S+A) & 0xfff */
-RELOC_NUMBER (R_AARCH64_P32_LDST8_ABS_LO12_NC, 13)
-
-/* LD/ST16: (S+A) & 0xffe */
-RELOC_NUMBER (R_AARCH64_P32_LDST16_ABS_LO12_NC, 14)
-
-/* LD/ST32: (S+A) & 0xffc */
-RELOC_NUMBER (R_AARCH64_P32_LDST32_ABS_LO12_NC, 15)
-
-/* LD/ST64: (S+A) & 0xff8 */
-RELOC_NUMBER (R_AARCH64_P32_LDST64_ABS_LO12_NC, 16)
-
-/* LD/ST128: (S+A) & 0xff0 */
-RELOC_NUMBER (R_AARCH64_P32_LDST128_ABS_LO12_NC, 17)
-
-/* Relocations for control-flow instructions. */
-
-/* TBZ/NZ: ((S+A-P) >> 2) & 0x3fff. */
-RELOC_NUMBER (R_AARCH64_P32_TSTBR14, 18)
-
-/* B.cond: ((S+A-P) >> 2) & 0x7ffff. */
-RELOC_NUMBER (R_AARCH64_P32_CONDBR19, 19)
-
-/* B: ((S+A-P) >> 2) & 0x3ffffff. */
-RELOC_NUMBER (R_AARCH64_P32_JUMP26, 20)
-
-/* BL: ((S+A-P) >> 2) & 0x3ffffff. */
-RELOC_NUMBER (R_AARCH64_P32_CALL26, 21)
-
-
-RELOC_NUMBER (R_AARCH64_P32_GOT_LD_PREL19, 25)
-RELOC_NUMBER (R_AARCH64_P32_ADR_GOT_PAGE, 26)
-RELOC_NUMBER (R_AARCH64_P32_LD32_GOT_LO12_NC, 27)
-
-
-RELOC_NUMBER (R_AARCH64_P32_TLSGD_ADR_PAGE21, 81)
-RELOC_NUMBER (R_AARCH64_P32_TLSGD_ADD_LO12_NC, 82)
-RELOC_NUMBER (R_AARCH64_P32_TLSIE_ADR_GOTTPREL_PAGE21, 103)
-RELOC_NUMBER (R_AARCH64_P32_TLSIE_LD32_GOTTPREL_LO12_NC, 104)
-RELOC_NUMBER (R_AARCH64_P32_TLSIE_LD_GOTTPREL_PREL19, 105)
-RELOC_NUMBER (R_AARCH64_P32_TLSLE_MOVW_TPREL_G1, 106)
-RELOC_NUMBER (R_AARCH64_P32_TLSLE_MOVW_TPREL_G0, 107)
-RELOC_NUMBER (R_AARCH64_P32_TLSLE_MOVW_TPREL_G0_NC, 108)
-RELOC_NUMBER (R_AARCH64_P32_TLSLE_ADD_TPREL_HI12, 109)
-RELOC_NUMBER (R_AARCH64_P32_TLSLE_ADD_TPREL_LO12, 110)
-RELOC_NUMBER (R_AARCH64_P32_TLSLE_ADD_TPREL_LO12_NC, 111)
-
-RELOC_NUMBER (R_AARCH64_P32_TLSDESC_LD_PREL19, 122)
-RELOC_NUMBER (R_AARCH64_P32_TLSDESC_ADR_PREL21, 123)
-RELOC_NUMBER (R_AARCH64_P32_TLSDESC_ADR_PAGE21, 124)
-RELOC_NUMBER (R_AARCH64_P32_TLSDESC_LD32_LO12_NC, 125)
-RELOC_NUMBER (R_AARCH64_P32_TLSDESC_ADD_LO12_NC, 126)
-RELOC_NUMBER (R_AARCH64_P32_TLSDESC_CALL, 127)
-
-/* Dynamic relocations */
-
-/* Copy symbol at runtime. */
-RELOC_NUMBER (R_AARCH64_P32_COPY, 180)
-
-/* Create GOT entry. */
-RELOC_NUMBER (R_AARCH64_P32_GLOB_DAT, 181)
-
- /* Create PLT entry. */
-RELOC_NUMBER (R_AARCH64_P32_JUMP_SLOT, 182)
-
-/* Adjust by program base. */
-RELOC_NUMBER (R_AARCH64_P32_RELATIVE, 183)
-RELOC_NUMBER (R_AARCH64_P32_TLS_DTPMOD, 184)
-RELOC_NUMBER (R_AARCH64_P32_TLS_DTPREL, 185)
-RELOC_NUMBER (R_AARCH64_P32_TLS_TPREL, 186)
-RELOC_NUMBER (R_AARCH64_P32_TLSDESC, 187)
-RELOC_NUMBER (R_AARCH64_P32_IRELATIVE, 188)
-
-RELOC_NUMBER (R_AARCH64_NULL, 256) /* No reloc */
-
-/* Basic data relocations. */
-
-/* .xword: (S+A) */
-RELOC_NUMBER (R_AARCH64_ABS64, 257)
-
-/* .word: (S+A) */
-RELOC_NUMBER (R_AARCH64_ABS32, 258)
-
-/* .half: (S+A) */
-RELOC_NUMBER (R_AARCH64_ABS16, 259)
-
-/* .xword: (S+A-P) */
-RELOC_NUMBER (R_AARCH64_PREL64, 260)
-
-/* .word: (S+A-P) */
-RELOC_NUMBER (R_AARCH64_PREL32, 261)
-
-/* .half: (S+A-P) */
-RELOC_NUMBER (R_AARCH64_PREL16, 262)
-
-/* Group relocations to create a 16, 32, 48 or 64 bit
- unsigned data or abs address inline. */
-
-/* MOV[ZK]: ((S+A) >> 0) & 0xffff */
-RELOC_NUMBER (R_AARCH64_MOVW_UABS_G0, 263)
-
-/* MOV[ZK]: ((S+A) >> 0) & 0xffff */
-RELOC_NUMBER (R_AARCH64_MOVW_UABS_G0_NC, 264)
-
-/* MOV[ZK]: ((S+A) >> 16) & 0xffff */
-RELOC_NUMBER (R_AARCH64_MOVW_UABS_G1, 265)
-
-/* MOV[ZK]: ((S+A) >> 16) & 0xffff */
-RELOC_NUMBER (R_AARCH64_MOVW_UABS_G1_NC, 266)
-
-/* MOV[ZK]: ((S+A) >> 32) & 0xffff */
-RELOC_NUMBER (R_AARCH64_MOVW_UABS_G2, 267)
-
-/* MOV[ZK]: ((S+A) >> 32) & 0xffff */
-RELOC_NUMBER (R_AARCH64_MOVW_UABS_G2_NC, 268)
-
-/* MOV[ZK]: ((S+A) >> 48) & 0xffff */
-RELOC_NUMBER (R_AARCH64_MOVW_UABS_G3, 269)
-
-/* Group relocations to create high part of a 16, 32, 48 or 64 bit
- signed data or abs address inline. Will change instruction
- to MOVN or MOVZ depending on sign of calculated value. */
-
-/* MOV[ZN]: ((S+A) >> 0) & 0xffff */
-RELOC_NUMBER (R_AARCH64_MOVW_SABS_G0, 270)
-
-/* MOV[ZN]: ((S+A) >> 16) & 0xffff */
-RELOC_NUMBER (R_AARCH64_MOVW_SABS_G1, 271)
-
-/* MOV[ZN]: ((S+A) >> 32) & 0xffff */
-RELOC_NUMBER (R_AARCH64_MOVW_SABS_G2, 272)
-
-/* Relocations to generate 19, 21 and 33 bit PC-relative load/store
- addresses: PG(x) is (x & ~0xfff). */
-
-/* LD-lit: ((S+A-P) >> 2) & 0x7ffff */
-RELOC_NUMBER (R_AARCH64_LD_PREL_LO19, 273)
-
-/* ADR: (S+A-P) & 0x1fffff */
-RELOC_NUMBER (R_AARCH64_ADR_PREL_LO21, 274)
-
-/* ADRH: ((PG(S+A)-PG(P)) >> 12) & 0x1fffff */
-RELOC_NUMBER (R_AARCH64_ADR_PREL_PG_HI21, 275)
-
-/* ADRH: ((PG(S+A)-PG(P)) >> 12) & 0x1fffff */
-RELOC_NUMBER (R_AARCH64_ADR_PREL_PG_HI21_NC, 276)
-
-/* ADD: (S+A) & 0xfff */
-RELOC_NUMBER (R_AARCH64_ADD_ABS_LO12_NC, 277)
-
-/* LD/ST8: (S+A) & 0xfff */
-RELOC_NUMBER (R_AARCH64_LDST8_ABS_LO12_NC, 278)
-
-/* Relocations for control-flow instructions. */
-
-/* TBZ/NZ: ((S+A-P) >> 2) & 0x3fff. */
-RELOC_NUMBER (R_AARCH64_TSTBR14, 279)
-
-/* B.cond: ((S+A-P) >> 2) & 0x7ffff. */
-RELOC_NUMBER (R_AARCH64_CONDBR19, 280)
-
-/* 281 unused */
-
-/* B: ((S+A-P) >> 2) & 0x3ffffff. */
-RELOC_NUMBER (R_AARCH64_JUMP26, 282)
-
-/* BL: ((S+A-P) >> 2) & 0x3ffffff. */
-RELOC_NUMBER (R_AARCH64_CALL26, 283)
-
-/* LD/ST16: (S+A) & 0xffe */
-RELOC_NUMBER (R_AARCH64_LDST16_ABS_LO12_NC, 284)
-
-/* LD/ST32: (S+A) & 0xffc */
-RELOC_NUMBER (R_AARCH64_LDST32_ABS_LO12_NC, 285)
-
-/* LD/ST64: (S+A) & 0xff8 */
-RELOC_NUMBER (R_AARCH64_LDST64_ABS_LO12_NC, 286)
-
-/* LD/ST128: (S+A) & 0xff0 */
-RELOC_NUMBER (R_AARCH64_LDST128_ABS_LO12_NC, 299)
-
-RELOC_NUMBER (R_AARCH64_GOT_LD_PREL19, 309)
-RELOC_NUMBER (R_AARCH64_ADR_GOT_PAGE, 311)
-RELOC_NUMBER (R_AARCH64_LD64_GOT_LO12_NC, 312)
-
-RELOC_NUMBER (R_AARCH64_TLSGD_ADR_PAGE21, 513)
-RELOC_NUMBER (R_AARCH64_TLSGD_ADD_LO12_NC, 514)
-RELOC_NUMBER (R_AARCH64_TLSIE_MOVW_GOTTPREL_G1, 539)
-RELOC_NUMBER (R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC, 540)
-RELOC_NUMBER (R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21, 541)
-RELOC_NUMBER (R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC, 542)
-RELOC_NUMBER (R_AARCH64_TLSIE_LD_GOTTPREL_PREL19, 543)
-RELOC_NUMBER (R_AARCH64_TLSLE_MOVW_TPREL_G2, 544)
-RELOC_NUMBER (R_AARCH64_TLSLE_MOVW_TPREL_G1, 545)
-RELOC_NUMBER (R_AARCH64_TLSLE_MOVW_TPREL_G1_NC, 546)
-RELOC_NUMBER (R_AARCH64_TLSLE_MOVW_TPREL_G0, 547)
-RELOC_NUMBER (R_AARCH64_TLSLE_MOVW_TPREL_G0_NC, 548)
-RELOC_NUMBER (R_AARCH64_TLSLE_ADD_TPREL_HI12, 549)
-RELOC_NUMBER (R_AARCH64_TLSLE_ADD_TPREL_LO12, 550)
-RELOC_NUMBER (R_AARCH64_TLSLE_ADD_TPREL_LO12_NC, 551)
-
-RELOC_NUMBER (R_AARCH64_TLSDESC_LD_PREL19, 560)
-RELOC_NUMBER (R_AARCH64_TLSDESC_ADR_PREL21, 561)
-RELOC_NUMBER (R_AARCH64_TLSDESC_ADR_PAGE21, 562)
-RELOC_NUMBER (R_AARCH64_TLSDESC_LD64_LO12_NC, 563)
-RELOC_NUMBER (R_AARCH64_TLSDESC_ADD_LO12_NC, 564)
-RELOC_NUMBER (R_AARCH64_TLSDESC_OFF_G1, 565)
-RELOC_NUMBER (R_AARCH64_TLSDESC_OFF_G0_NC, 566)
-RELOC_NUMBER (R_AARCH64_TLSDESC_LDR, 567)
-RELOC_NUMBER (R_AARCH64_TLSDESC_ADD, 568)
-RELOC_NUMBER (R_AARCH64_TLSDESC_CALL, 569)
-
-/* Dynamic relocations */
-
-/* Copy symbol at runtime. */
-RELOC_NUMBER (R_AARCH64_COPY, 1024)
-
-/* Create GOT entry. */
-RELOC_NUMBER (R_AARCH64_GLOB_DAT, 1025)
-
- /* Create PLT entry. */
-RELOC_NUMBER (R_AARCH64_JUMP_SLOT, 1026)
-
-/* Adjust by program base. */
-RELOC_NUMBER (R_AARCH64_RELATIVE, 1027)
-RELOC_NUMBER (R_AARCH64_TLS_DTPMOD, 1028)
-RELOC_NUMBER (R_AARCH64_TLS_DTPREL, 1029)
-RELOC_NUMBER (R_AARCH64_TLS_TPREL, 1030)
-RELOC_NUMBER (R_AARCH64_TLSDESC, 1031)
-RELOC_NUMBER (R_AARCH64_IRELATIVE, 1032)
-
-END_RELOC_NUMBERS (R_AARCH64_end)
-
-#endif /* _ELF_AARCH64_H */
diff --git a/include/elf/alpha.h b/include/elf/alpha.h
deleted file mode 100644
index f4fe566b0..000000000
--- a/include/elf/alpha.h
+++ /dev/null
@@ -1,131 +0,0 @@
-/* ALPHA ELF support for BFD.
- Copyright 1996, 1998, 2000, 2001, 2002, 2010 Free Software Foundation, Inc.
-
- By Eric Youngdale, <eric@aib.com>. No processor supplement available
- for this platform.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-/* This file holds definitions specific to the ALPHA ELF ABI. Note
- that most of this is not actually implemented by BFD. */
-
-#ifndef _ELF_ALPHA_H
-#define _ELF_ALPHA_H
-
-/* Processor specific flags for the ELF header e_flags field. */
-
-/* All addresses must be below 2GB. */
-#define EF_ALPHA_32BIT 0x00000001
-
-/* All relocations needed for relaxation with code movement are present. */
-#define EF_ALPHA_CANRELAX 0x00000002
-
-/* Processor specific section flags. */
-
-/* This section must be in the global data area. */
-#define SHF_ALPHA_GPREL 0x10000000
-
-/* Section contains some sort of debugging information. The exact
- format is unspecified. It's probably ECOFF symbols. */
-#define SHT_ALPHA_DEBUG 0x70000001
-
-/* Section contains register usage information. */
-#define SHT_ALPHA_REGINFO 0x70000002
-
-/* A section of type SHT_MIPS_REGINFO contains the following
- structure. */
-typedef struct
-{
- /* Mask of general purpose registers used. */
- unsigned long ri_gprmask;
- /* Mask of co-processor registers used. */
- unsigned long ri_cprmask[4];
- /* GP register value for this object file. */
- long ri_gp_value;
-} Elf64_RegInfo;
-
-/* Special values for the st_other field in the symbol table. */
-
-#define STO_ALPHA_NOPV 0x80
-#define STO_ALPHA_STD_GPLOAD 0x88
-
-/* Special values for Elf64_Dyn tag. */
-#define DT_ALPHA_PLTRO DT_LOPROC
-
-#include "elf/reloc-macros.h"
-
-/* Alpha relocs. */
-START_RELOC_NUMBERS (elf_alpha_reloc_type)
- RELOC_NUMBER (R_ALPHA_NONE, 0) /* No reloc */
- RELOC_NUMBER (R_ALPHA_REFLONG, 1) /* Direct 32 bit */
- RELOC_NUMBER (R_ALPHA_REFQUAD, 2) /* Direct 64 bit */
- RELOC_NUMBER (R_ALPHA_GPREL32, 3) /* GP relative 32 bit */
- RELOC_NUMBER (R_ALPHA_LITERAL, 4) /* GP relative 16 bit w/optimization */
- RELOC_NUMBER (R_ALPHA_LITUSE, 5) /* Optimization hint for LITERAL */
- RELOC_NUMBER (R_ALPHA_GPDISP, 6) /* Add displacement to GP */
- RELOC_NUMBER (R_ALPHA_BRADDR, 7) /* PC+4 relative 23 bit shifted */
- RELOC_NUMBER (R_ALPHA_HINT, 8) /* PC+4 relative 16 bit shifted */
- RELOC_NUMBER (R_ALPHA_SREL16, 9) /* PC relative 16 bit */
- RELOC_NUMBER (R_ALPHA_SREL32, 10) /* PC relative 32 bit */
- RELOC_NUMBER (R_ALPHA_SREL64, 11) /* PC relative 64 bit */
-
- /* Skip 12 - 16; deprecated ECOFF relocs. */
-
- RELOC_NUMBER (R_ALPHA_GPRELHIGH, 17) /* GP relative 32 bit, high 16 bits */
- RELOC_NUMBER (R_ALPHA_GPRELLOW, 18) /* GP relative 32 bit, low 16 bits */
- RELOC_NUMBER (R_ALPHA_GPREL16, 19) /* GP relative 16 bit */
-
- /* Skip 20 - 23; deprecated ECOFF relocs. */
-
- /* These relocations are specific to shared libraries. */
- RELOC_NUMBER (R_ALPHA_COPY, 24) /* Copy symbol at runtime */
- RELOC_NUMBER (R_ALPHA_GLOB_DAT, 25) /* Create GOT entry */
- RELOC_NUMBER (R_ALPHA_JMP_SLOT, 26) /* Create PLT entry */
- RELOC_NUMBER (R_ALPHA_RELATIVE, 27) /* Adjust by program base */
-
- /* Like BRADDR, but assert that the source and target object file
- share the same GP value, and adjust the target address for
- STO_ALPHA_STD_GPLOAD. */
- RELOC_NUMBER (R_ALPHA_BRSGP, 28)
-
- /* Thread-Local Storage. */
- RELOC_NUMBER (R_ALPHA_TLSGD, 29)
- RELOC_NUMBER (R_ALPHA_TLSLDM, 30)
- RELOC_NUMBER (R_ALPHA_DTPMOD64, 31)
- RELOC_NUMBER (R_ALPHA_GOTDTPREL, 32)
- RELOC_NUMBER (R_ALPHA_DTPREL64, 33)
- RELOC_NUMBER (R_ALPHA_DTPRELHI, 34)
- RELOC_NUMBER (R_ALPHA_DTPRELLO, 35)
- RELOC_NUMBER (R_ALPHA_DTPREL16, 36)
- RELOC_NUMBER (R_ALPHA_GOTTPREL, 37)
- RELOC_NUMBER (R_ALPHA_TPREL64, 38)
- RELOC_NUMBER (R_ALPHA_TPRELHI, 39)
- RELOC_NUMBER (R_ALPHA_TPRELLO, 40)
- RELOC_NUMBER (R_ALPHA_TPREL16, 41)
-
-END_RELOC_NUMBERS (R_ALPHA_max)
-
-#define LITUSE_ALPHA_ADDR 0
-#define LITUSE_ALPHA_BASE 1
-#define LITUSE_ALPHA_BYTOFF 2
-#define LITUSE_ALPHA_JSR 3
-#define LITUSE_ALPHA_TLSGD 4
-#define LITUSE_ALPHA_TLSLDM 5
-#define LITUSE_ALPHA_JSRDIRECT 6
-
-#endif /* _ELF_ALPHA_H */
diff --git a/include/elf/arc.h b/include/elf/arc.h
deleted file mode 100644
index a07ed2e3a..000000000
--- a/include/elf/arc.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/* ARC ELF support for BFD.
- Copyright 1995, 1997, 1998, 2000, 2001, 2010 Free Software Foundation, Inc.
- Contributed by Doug Evans, (dje@cygnus.com)
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-/* This file holds definitions specific to the ARC ELF ABI. */
-
-#ifndef _ELF_ARC_H
-#define _ELF_ARC_H
-
-#include "elf/reloc-macros.h"
-
-/* Relocations. */
-
-START_RELOC_NUMBERS (elf_arc_reloc_type)
- RELOC_NUMBER (R_ARC_NONE, 0)
- RELOC_NUMBER (R_ARC_32, 1)
- RELOC_NUMBER (R_ARC_B26, 2)
- RELOC_NUMBER (R_ARC_B22_PCREL, 3)
-END_RELOC_NUMBERS (R_ARC_max)
-
-/* Processor specific flags for the ELF header e_flags field. */
-
-/* Four bit ARC machine type field. */
-
-#define EF_ARC_MACH 0x0000000f
-
-/* Various CPU types. */
-
-#define E_ARC_MACH_ARC5 0
-#define E_ARC_MACH_ARC6 1
-#define E_ARC_MACH_ARC7 2
-#define E_ARC_MACH_ARC8 3
-
-/* Leave bits 0xf0 alone in case we ever have more than 16 cpu types. */
-
-/* File contains position independent code. */
-
-#define EF_ARC_PIC 0x00000100
-
-#endif /* _ELF_ARC_H */
diff --git a/include/elf/arm.h b/include/elf/arm.h
deleted file mode 100644
index d79930380..000000000
--- a/include/elf/arm.h
+++ /dev/null
@@ -1,344 +0,0 @@
-/* ARM ELF support for BFD.
- Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2009, 2010
- Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _ELF_ARM_H
-#define _ELF_ARM_H
-
-#include "elf/reloc-macros.h"
-
-/* Processor specific flags for the ELF header e_flags field. */
-#define EF_ARM_RELEXEC 0x01
-#define EF_ARM_HASENTRY 0x02
-#define EF_ARM_INTERWORK 0x04
-#define EF_ARM_APCS_26 0x08
-#define EF_ARM_APCS_FLOAT 0x10
-#define EF_ARM_PIC 0x20
-#define EF_ARM_ALIGN8 0x40 /* 8-bit structure alignment is in use. */
-#define EF_ARM_NEW_ABI 0x80
-#define EF_ARM_OLD_ABI 0x100
-#define EF_ARM_SOFT_FLOAT 0x200
-#define EF_ARM_VFP_FLOAT 0x400
-#define EF_ARM_MAVERICK_FLOAT 0x800
-
-/* Frame unwind information */
-#define PT_ARM_EXIDX (PT_LOPROC + 1)
-
-/* Other constants defined in the ARM ELF spec. version B-01. */
-#define EF_ARM_SYMSARESORTED 0x04 /* NB conflicts with EF_INTERWORK. */
-#define EF_ARM_DYNSYMSUSESEGIDX 0x08 /* NB conflicts with EF_APCS26. */
-#define EF_ARM_MAPSYMSFIRST 0x10 /* NB conflicts with EF_APCS_FLOAT. */
-#define EF_ARM_EABIMASK 0xFF000000
-
-/* New constants defined in the ARM ELF spec. version XXX.
- Only valid in conjunction with EF_ARM_EABI_VER5. */
-#define EF_ARM_ABI_FLOAT_SOFT 0x200 /* NB conflicts with EF_ARM_SOFT_FLOAT. */
-#define EF_ARM_ABI_FLOAT_HARD 0x400 /* NB conflicts with EF_ARM_VFP_FLOAT. */
-
-/* Constants defined in AAELF. */
-#define EF_ARM_BE8 0x00800000
-#define EF_ARM_LE8 0x00400000
-
-#define EF_ARM_EABI_VERSION(flags) ((flags) & EF_ARM_EABIMASK)
-#define EF_ARM_EABI_UNKNOWN 0x00000000
-#define EF_ARM_EABI_VER1 0x01000000
-#define EF_ARM_EABI_VER2 0x02000000
-#define EF_ARM_EABI_VER3 0x03000000
-#define EF_ARM_EABI_VER4 0x04000000
-#define EF_ARM_EABI_VER5 0x05000000
-
-/* Local aliases for some flags to match names used by COFF port. */
-#define F_INTERWORK EF_ARM_INTERWORK
-#define F_APCS26 EF_ARM_APCS_26
-#define F_APCS_FLOAT EF_ARM_APCS_FLOAT
-#define F_PIC EF_ARM_PIC
-#define F_SOFT_FLOAT EF_ARM_SOFT_FLOAT
-#define F_VFP_FLOAT EF_ARM_VFP_FLOAT
-
-/* Additional symbol types for Thumb. */
-#define STT_ARM_TFUNC STT_LOPROC /* A Thumb function. */
-#define STT_ARM_16BIT STT_HIPROC /* A Thumb label. */
-
-/* Additional section types. */
-#define SHT_ARM_EXIDX 0x70000001 /* Section holds ARM unwind info. */
-#define SHT_ARM_PREEMPTMAP 0x70000002 /* Section pre-emption details. */
-#define SHT_ARM_ATTRIBUTES 0x70000003 /* Section holds attributes. */
-#define SHT_ARM_DEBUGOVERLAY 0x70000004 /* Section holds overlay debug info. */
-#define SHT_ARM_OVERLAYSECTION 0x70000005 /* Section holds GDB and overlay integration info. */
-
-/* ARM-specific values for sh_flags. */
-#define SHF_ENTRYSECT 0x10000000 /* Section contains an entry point. */
-#define SHF_COMDEF 0x80000000 /* Section may be multiply defined in the input to a link step. */
-
-/* ARM-specific program header flags. */
-#define PF_ARM_SB 0x10000000 /* Segment contains the location addressed by the static base. */
-#define PF_ARM_PI 0x20000000 /* Segment is position-independent. */
-#define PF_ARM_ABS 0x40000000 /* Segment must be loaded at its base address. */
-
-/* Values for the Tag_CPU_arch EABI attribute. */
-#define TAG_CPU_ARCH_PRE_V4 0
-#define TAG_CPU_ARCH_V4 1
-#define TAG_CPU_ARCH_V4T 2
-#define TAG_CPU_ARCH_V5T 3
-#define TAG_CPU_ARCH_V5TE 4
-#define TAG_CPU_ARCH_V5TEJ 5
-#define TAG_CPU_ARCH_V6 6
-#define TAG_CPU_ARCH_V6KZ 7
-#define TAG_CPU_ARCH_V6T2 8
-#define TAG_CPU_ARCH_V6K 9
-#define TAG_CPU_ARCH_V7 10
-#define TAG_CPU_ARCH_V6_M 11
-#define TAG_CPU_ARCH_V6S_M 12
-#define TAG_CPU_ARCH_V7E_M 13
-#define TAG_CPU_ARCH_V8 14
-#define MAX_TAG_CPU_ARCH 14
-/* Pseudo-architecture to allow objects to be compatible with the subset of
- armv4t and armv6-m. This value should never be stored in object files. */
-#define TAG_CPU_ARCH_V4T_PLUS_V6_M (MAX_TAG_CPU_ARCH + 1)
-
-/* Relocation types. */
-
-START_RELOC_NUMBERS (elf_arm_reloc_type)
-/* AAELF official names and numbers. */
- RELOC_NUMBER (R_ARM_NONE, 0)
- RELOC_NUMBER (R_ARM_PC24, 1) /* deprecated */
- RELOC_NUMBER (R_ARM_ABS32, 2)
- RELOC_NUMBER (R_ARM_REL32, 3)
- RELOC_NUMBER (R_ARM_LDR_PC_G0, 4)
- RELOC_NUMBER (R_ARM_ABS16, 5)
- RELOC_NUMBER (R_ARM_ABS12, 6)
- RELOC_NUMBER (R_ARM_THM_ABS5, 7)
- RELOC_NUMBER (R_ARM_ABS8, 8)
- RELOC_NUMBER (R_ARM_SBREL32, 9)
- RELOC_NUMBER (R_ARM_THM_CALL, 10)
- RELOC_NUMBER (R_ARM_THM_PC8, 11)
- RELOC_NUMBER (R_ARM_BREL_ADJ, 12)
- RELOC_NUMBER (R_ARM_TLS_DESC, 13)
- RELOC_NUMBER (R_ARM_THM_SWI8, 14) /* obsolete */
- RELOC_NUMBER (R_ARM_XPC25, 15) /* obsolete */
- RELOC_NUMBER (R_ARM_THM_XPC22, 16) /* obsolete */
- RELOC_NUMBER (R_ARM_TLS_DTPMOD32, 17)
- RELOC_NUMBER (R_ARM_TLS_DTPOFF32, 18)
- RELOC_NUMBER (R_ARM_TLS_TPOFF32, 19)
- RELOC_NUMBER (R_ARM_COPY, 20) /* Copy symbol at runtime. */
- RELOC_NUMBER (R_ARM_GLOB_DAT, 21) /* Create GOT entry. */
- RELOC_NUMBER (R_ARM_JUMP_SLOT, 22) /* Create PLT entry. */
- RELOC_NUMBER (R_ARM_RELATIVE, 23) /* Adjust by program base. */
- RELOC_NUMBER (R_ARM_GOTOFF32, 24) /* 32 bit offset to GOT. */
- RELOC_NUMBER (R_ARM_BASE_PREL, 25) /* 32 bit PC relative offset to GOT. */
- RELOC_NUMBER (R_ARM_GOT_BREL, 26) /* 32 bit GOT entry. */
- RELOC_NUMBER (R_ARM_PLT32, 27) /* deprecated - 32 bit PLT address. */
- RELOC_NUMBER (R_ARM_CALL, 28)
- RELOC_NUMBER (R_ARM_JUMP24, 29)
- RELOC_NUMBER (R_ARM_THM_JUMP24, 30)
- RELOC_NUMBER (R_ARM_BASE_ABS, 31)
- RELOC_NUMBER (R_ARM_ALU_PCREL7_0, 32) /* obsolete */
- RELOC_NUMBER (R_ARM_ALU_PCREL15_8, 33) /* obsolete */
- RELOC_NUMBER (R_ARM_ALU_PCREL23_15, 34) /* obsolete */
- RELOC_NUMBER (R_ARM_LDR_SBREL_11_0, 35) /* deprecated, should have _NC suffix */
- RELOC_NUMBER (R_ARM_ALU_SBREL_19_12, 36) /* deprecated, should have _NC suffix */
- RELOC_NUMBER (R_ARM_ALU_SBREL_27_20, 37) /* deprecated, should have _CK suffix */
- RELOC_NUMBER (R_ARM_TARGET1, 38)
- RELOC_NUMBER (R_ARM_SBREL31, 39) /* deprecated */
- RELOC_NUMBER (R_ARM_V4BX, 40)
- RELOC_NUMBER (R_ARM_TARGET2, 41)
- RELOC_NUMBER (R_ARM_PREL31, 42)
- RELOC_NUMBER (R_ARM_MOVW_ABS_NC, 43)
- RELOC_NUMBER (R_ARM_MOVT_ABS, 44)
- RELOC_NUMBER (R_ARM_MOVW_PREL_NC, 45)
- RELOC_NUMBER (R_ARM_MOVT_PREL, 46)
- RELOC_NUMBER (R_ARM_THM_MOVW_ABS_NC, 47)
- RELOC_NUMBER (R_ARM_THM_MOVT_ABS, 48)
- RELOC_NUMBER (R_ARM_THM_MOVW_PREL_NC, 49)
- RELOC_NUMBER (R_ARM_THM_MOVT_PREL, 50)
- RELOC_NUMBER (R_ARM_THM_JUMP19, 51)
- RELOC_NUMBER (R_ARM_THM_JUMP6, 52)
- RELOC_NUMBER (R_ARM_THM_ALU_PREL_11_0, 53)
- RELOC_NUMBER (R_ARM_THM_PC12, 54)
- RELOC_NUMBER (R_ARM_ABS32_NOI, 55)
- RELOC_NUMBER (R_ARM_REL32_NOI, 56)
- RELOC_NUMBER (R_ARM_ALU_PC_G0_NC, 57)
- RELOC_NUMBER (R_ARM_ALU_PC_G0, 58)
- RELOC_NUMBER (R_ARM_ALU_PC_G1_NC, 59)
- RELOC_NUMBER (R_ARM_ALU_PC_G1, 60)
- RELOC_NUMBER (R_ARM_ALU_PC_G2, 61)
- RELOC_NUMBER (R_ARM_LDR_PC_G1, 62)
- RELOC_NUMBER (R_ARM_LDR_PC_G2, 63)
- RELOC_NUMBER (R_ARM_LDRS_PC_G0, 64)
- RELOC_NUMBER (R_ARM_LDRS_PC_G1, 65)
- RELOC_NUMBER (R_ARM_LDRS_PC_G2, 66)
- RELOC_NUMBER (R_ARM_LDC_PC_G0, 67)
- RELOC_NUMBER (R_ARM_LDC_PC_G1, 68)
- RELOC_NUMBER (R_ARM_LDC_PC_G2, 69)
- RELOC_NUMBER (R_ARM_ALU_SB_G0_NC, 70)
- RELOC_NUMBER (R_ARM_ALU_SB_G0, 71)
- RELOC_NUMBER (R_ARM_ALU_SB_G1_NC, 72)
- RELOC_NUMBER (R_ARM_ALU_SB_G1, 73)
- RELOC_NUMBER (R_ARM_ALU_SB_G2, 74)
- RELOC_NUMBER (R_ARM_LDR_SB_G0, 75)
- RELOC_NUMBER (R_ARM_LDR_SB_G1, 76)
- RELOC_NUMBER (R_ARM_LDR_SB_G2, 77)
- RELOC_NUMBER (R_ARM_LDRS_SB_G0, 78)
- RELOC_NUMBER (R_ARM_LDRS_SB_G1, 79)
- RELOC_NUMBER (R_ARM_LDRS_SB_G2, 80)
- RELOC_NUMBER (R_ARM_LDC_SB_G0, 81)
- RELOC_NUMBER (R_ARM_LDC_SB_G1, 82)
- RELOC_NUMBER (R_ARM_LDC_SB_G2, 83)
- RELOC_NUMBER (R_ARM_MOVW_BREL_NC, 84)
- RELOC_NUMBER (R_ARM_MOVT_BREL, 85)
- RELOC_NUMBER (R_ARM_MOVW_BREL, 86)
- RELOC_NUMBER (R_ARM_THM_MOVW_BREL_NC, 87)
- RELOC_NUMBER (R_ARM_THM_MOVT_BREL, 88)
- RELOC_NUMBER (R_ARM_THM_MOVW_BREL, 89)
- RELOC_NUMBER (R_ARM_TLS_GOTDESC, 90)
- RELOC_NUMBER (R_ARM_TLS_CALL, 91)
- RELOC_NUMBER (R_ARM_TLS_DESCSEQ, 92)
- RELOC_NUMBER (R_ARM_THM_TLS_CALL, 93)
- RELOC_NUMBER (R_ARM_PLT32_ABS, 94)
- RELOC_NUMBER (R_ARM_GOT_ABS, 95)
- RELOC_NUMBER (R_ARM_GOT_PREL, 96)
- RELOC_NUMBER (R_ARM_GOT_BREL12, 97)
- RELOC_NUMBER (R_ARM_GOTOFF12, 98)
- RELOC_NUMBER (R_ARM_GOTRELAX, 99)
- RELOC_NUMBER (R_ARM_GNU_VTENTRY, 100) /* deprecated - old C++ abi */
- RELOC_NUMBER (R_ARM_GNU_VTINHERIT, 101) /* deprecated - old C++ abi */
- RELOC_NUMBER (R_ARM_THM_JUMP11, 102)
- RELOC_NUMBER (R_ARM_THM_JUMP8, 103)
- RELOC_NUMBER (R_ARM_TLS_GD32, 104)
- RELOC_NUMBER (R_ARM_TLS_LDM32, 105)
- RELOC_NUMBER (R_ARM_TLS_LDO32, 106)
- RELOC_NUMBER (R_ARM_TLS_IE32, 107)
- RELOC_NUMBER (R_ARM_TLS_LE32, 108)
- RELOC_NUMBER (R_ARM_TLS_LDO12, 109)
- RELOC_NUMBER (R_ARM_TLS_LE12, 110)
- RELOC_NUMBER (R_ARM_TLS_IE12GP, 111)
- /* 112 - 127 private range */
- RELOC_NUMBER (R_ARM_ME_TOO, 128) /* obsolete */
- RELOC_NUMBER (R_ARM_THM_TLS_DESCSEQ ,129)
-
- RELOC_NUMBER (R_ARM_IRELATIVE, 160)
-
- /* Extensions? R=read-only? */
- RELOC_NUMBER (R_ARM_RXPC25, 249)
- RELOC_NUMBER (R_ARM_RSBREL32, 250)
- RELOC_NUMBER (R_ARM_THM_RPC22, 251)
- RELOC_NUMBER (R_ARM_RREL32, 252)
- RELOC_NUMBER (R_ARM_RABS32, 253)
- RELOC_NUMBER (R_ARM_RPC24, 254)
- RELOC_NUMBER (R_ARM_RBASE, 255)
-
- /* Unofficial names for some of the relocs. */
- FAKE_RELOC (R_ARM_GOTOFF, R_ARM_GOTOFF32) /* 32 bit offset to GOT. */
- FAKE_RELOC (R_ARM_THM_PC22, R_ARM_THM_CALL)
- FAKE_RELOC (R_ARM_THM_PC11, R_ARM_THM_JUMP11)
- FAKE_RELOC (R_ARM_THM_PC9, R_ARM_THM_JUMP8)
-
- /* Relocs with both a different name, and (apparently) different meaning in
- GNU usage. */
- FAKE_RELOC (R_ARM_GOTPC, R_ARM_BASE_PREL) /* 32 bit PC relative offset to GOT. */
- FAKE_RELOC (R_ARM_GOT32, R_ARM_GOT_BREL) /* 32 bit GOT entry. */
- FAKE_RELOC (R_ARM_ROSEGREL32, R_ARM_SBREL31) /* ??? */
- FAKE_RELOC (R_ARM_AMP_VCALL9, R_ARM_BREL_ADJ) /* Thumb-something. Not used. */
-
-END_RELOC_NUMBERS (R_ARM_max = 256)
-
-#ifdef BFD_ARCH_SIZE
-/* EABI object attributes. */
-
-enum
-{
- /* 0-3 are generic. */
- Tag_CPU_raw_name = 4,
- Tag_CPU_name,
- Tag_CPU_arch,
- Tag_CPU_arch_profile,
- Tag_ARM_ISA_use,
- Tag_THUMB_ISA_use,
- Tag_FP_arch,
- Tag_WMMX_arch,
- Tag_Advanced_SIMD_arch,
- Tag_PCS_config,
- Tag_ABI_PCS_R9_use,
- Tag_ABI_PCS_RW_data,
- Tag_ABI_PCS_RO_data,
- Tag_ABI_PCS_GOT_use,
- Tag_ABI_PCS_wchar_t,
- Tag_ABI_FP_rounding,
- Tag_ABI_FP_denormal,
- Tag_ABI_FP_exceptions,
- Tag_ABI_FP_user_exceptions,
- Tag_ABI_FP_number_model,
- Tag_ABI_align_needed,
- Tag_ABI_align_preserved,
- Tag_ABI_enum_size,
- Tag_ABI_HardFP_use,
- Tag_ABI_VFP_args,
- Tag_ABI_WMMX_args,
- Tag_ABI_optimization_goals,
- Tag_ABI_FP_optimization_goals,
- /* 32 is generic (Tag_compatibility). */
- Tag_undefined33 = 33,
- Tag_CPU_unaligned_access,
- Tag_undefined35,
- Tag_FP_HP_extension,
- Tag_undefined37,
- Tag_ABI_FP_16bit_format,
- Tag_undefined39,
- Tag_undefined40,
- Tag_undefined41,
- Tag_MPextension_use,
- Tag_undefined_43,
- Tag_DIV_use,
- Tag_nodefaults = 64,
- Tag_also_compatible_with,
- Tag_T2EE_use,
- Tag_conformance,
- Tag_Virtualization_use,
- Tag_undefined69,
- Tag_MPextension_use_legacy,
-
- /* The following tags are legacy names for other tags. */
- Tag_VFP_arch = Tag_FP_arch,
- Tag_ABI_align8_needed = Tag_ABI_align_needed,
- Tag_ABI_align8_preserved = Tag_ABI_align_preserved,
- Tag_VFP_HP_extension = Tag_FP_HP_extension
-};
-
-#endif
-
-/* The name of the note section used to identify arm variants. */
-#define ARM_NOTE_SECTION ".note.gnu.arm.ident"
-
-/* Special section names. */
-#define ELF_STRING_ARM_unwind ".ARM.exidx"
-#define ELF_STRING_ARM_unwind_info ".ARM.extab"
-#define ELF_STRING_ARM_unwind_once ".gnu.linkonce.armexidx."
-#define ELF_STRING_ARM_unwind_info_once ".gnu.linkonce.armextab."
-
-enum arm_st_branch_type {
- ST_BRANCH_TO_ARM,
- ST_BRANCH_TO_THUMB,
- ST_BRANCH_LONG,
- ST_BRANCH_UNKNOWN
-};
-
-#define ARM_SYM_BRANCH_TYPE(SYM) \
- ((enum arm_st_branch_type) (SYM)->st_target_internal)
-
-#endif /* _ELF_ARM_H */
diff --git a/include/elf/avr.h b/include/elf/avr.h
deleted file mode 100644
index b45d902d2..000000000
--- a/include/elf/avr.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/* AVR ELF support for BFD.
- Copyright 1999, 2000, 2004, 2006, 2010, 2012
- Free Software Foundation, Inc.
- Contributed by Denis Chertykov <denisc@overta.ru>
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _ELF_AVR_H
-#define _ELF_AVR_H
-
-#include "elf/reloc-macros.h"
-
-/* Processor specific flags for the ELF header e_flags field. */
-#define EF_AVR_MACH 0x7F
-
-/* If bit #7 is set, it is assumed that the elf file uses local symbols
- as reference for the relocations so that linker relaxation is possible. */
-#define EF_AVR_LINKRELAX_PREPARED 0x80
-
-#define E_AVR_MACH_AVR1 1
-#define E_AVR_MACH_AVR2 2
-#define E_AVR_MACH_AVR25 25
-#define E_AVR_MACH_AVR3 3
-#define E_AVR_MACH_AVR31 31
-#define E_AVR_MACH_AVR35 35
-#define E_AVR_MACH_AVR4 4
-#define E_AVR_MACH_AVR5 5
-#define E_AVR_MACH_AVR51 51
-#define E_AVR_MACH_AVR6 6
-#define E_AVR_MACH_XMEGA1 101
-#define E_AVR_MACH_XMEGA2 102
-#define E_AVR_MACH_XMEGA3 103
-#define E_AVR_MACH_XMEGA4 104
-#define E_AVR_MACH_XMEGA5 105
-#define E_AVR_MACH_XMEGA6 106
-#define E_AVR_MACH_XMEGA7 107
-
-/* Relocations. */
-START_RELOC_NUMBERS (elf_avr_reloc_type)
- RELOC_NUMBER (R_AVR_NONE, 0)
- RELOC_NUMBER (R_AVR_32, 1)
- RELOC_NUMBER (R_AVR_7_PCREL, 2)
- RELOC_NUMBER (R_AVR_13_PCREL, 3)
- RELOC_NUMBER (R_AVR_16, 4)
- RELOC_NUMBER (R_AVR_16_PM, 5)
- RELOC_NUMBER (R_AVR_LO8_LDI, 6)
- RELOC_NUMBER (R_AVR_HI8_LDI, 7)
- RELOC_NUMBER (R_AVR_HH8_LDI, 8)
- RELOC_NUMBER (R_AVR_LO8_LDI_NEG, 9)
- RELOC_NUMBER (R_AVR_HI8_LDI_NEG, 10)
- RELOC_NUMBER (R_AVR_HH8_LDI_NEG, 11)
- RELOC_NUMBER (R_AVR_LO8_LDI_PM, 12)
- RELOC_NUMBER (R_AVR_HI8_LDI_PM, 13)
- RELOC_NUMBER (R_AVR_HH8_LDI_PM, 14)
- RELOC_NUMBER (R_AVR_LO8_LDI_PM_NEG, 15)
- RELOC_NUMBER (R_AVR_HI8_LDI_PM_NEG, 16)
- RELOC_NUMBER (R_AVR_HH8_LDI_PM_NEG, 17)
- RELOC_NUMBER (R_AVR_CALL, 18)
- RELOC_NUMBER (R_AVR_LDI, 19)
- RELOC_NUMBER (R_AVR_6, 20)
- RELOC_NUMBER (R_AVR_6_ADIW, 21)
- RELOC_NUMBER (R_AVR_MS8_LDI, 22)
- RELOC_NUMBER (R_AVR_MS8_LDI_NEG, 23)
- RELOC_NUMBER (R_AVR_LO8_LDI_GS, 24)
- RELOC_NUMBER (R_AVR_HI8_LDI_GS, 25)
- RELOC_NUMBER (R_AVR_8, 26)
- RELOC_NUMBER (R_AVR_8_LO8, 27)
- RELOC_NUMBER (R_AVR_8_HI8, 28)
- RELOC_NUMBER (R_AVR_8_HLO8, 29)
-END_RELOC_NUMBERS (R_AVR_max)
-
-#endif /* _ELF_AVR_H */
diff --git a/include/elf/bfin.h b/include/elf/bfin.h
deleted file mode 100644
index 8d92906aa..000000000
--- a/include/elf/bfin.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/* Blackfin ELF support for BFD.
- Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _ELF_BFIN_H
-#define _ELF_BFIN_H
-
-#include "elf/reloc-macros.h"
-
-START_RELOC_NUMBERS (elf_bfin_reloc_type)
- RELOC_NUMBER (R_BFIN_UNUSED0, 0x00) /* relocation type 0 is not defined */
- RELOC_NUMBER (R_BFIN_PCREL5M2, 0x01) /* LSETUP part a */
- RELOC_NUMBER (R_BFIN_UNUSED1, 0x02) /* relocation type 2 is not defined */
- RELOC_NUMBER (R_BFIN_PCREL10, 0x03) /* type 3, 0x00) if cc jump <target> */
- RELOC_NUMBER (R_BFIN_PCREL12_JUMP, 0x04) /* type 4, 0x00) jump <target> */
- RELOC_NUMBER (R_BFIN_RIMM16, 0x05) /* type 0x5, 0x00) rN = <target> */
- RELOC_NUMBER (R_BFIN_LUIMM16, 0x06) /* # 0x6, 0x00) preg.l=<target> Load imm 16 to lower half */
- RELOC_NUMBER (R_BFIN_HUIMM16, 0x07) /* # 0x7, 0x00) preg.h=<target> Load imm 16 to upper half */
- RELOC_NUMBER (R_BFIN_PCREL12_JUMP_S, 0x08) /* # 0x8 jump.s <target> */
- RELOC_NUMBER (R_BFIN_PCREL24_JUMP_X, 0x09) /* # 0x9 jump.x <target> */
- RELOC_NUMBER (R_BFIN_PCREL24, 0x0a) /* # 0xa call <target> , 0x00) not expandable */
- RELOC_NUMBER (R_BFIN_UNUSEDB, 0x0b) /* # 0xb not generated */
- RELOC_NUMBER (R_BFIN_UNUSEDC, 0x0c) /* # 0xc not used */
- RELOC_NUMBER (R_BFIN_PCREL24_JUMP_L, 0x0d) /* 0xd jump.l <target> */
- RELOC_NUMBER (R_BFIN_PCREL24_CALL_X, 0x0e) /* 0xE, 0x00) call.x <target> if <target> is above 24 bit limit call through P1 */
- RELOC_NUMBER (R_BFIN_VAR_EQ_SYMB, 0x0f) /* 0xf, 0x00) linker should treat it same as 0x12 */
- RELOC_NUMBER (R_BFIN_BYTE_DATA, 0x10) /* 0x10, 0x00) .byte var = symbol */
- RELOC_NUMBER (R_BFIN_BYTE2_DATA, 0x11) /* 0x11, 0x00) .byte2 var = symbol */
- RELOC_NUMBER (R_BFIN_BYTE4_DATA, 0x12) /* 0x12, 0x00) .byte4 var = symbol and .var var=symbol */
- RELOC_NUMBER (R_BFIN_PCREL11, 0x13) /* 0x13, 0x00) lsetup part b */
- RELOC_NUMBER (R_BFIN_GOT17M4, 0x14)
- RELOC_NUMBER (R_BFIN_GOTHI, 0x15)
- RELOC_NUMBER (R_BFIN_GOTLO, 0x16)
- RELOC_NUMBER (R_BFIN_FUNCDESC, 0x17)
- RELOC_NUMBER (R_BFIN_FUNCDESC_GOT17M4, 0x18)
- RELOC_NUMBER (R_BFIN_FUNCDESC_GOTHI, 0x19)
- RELOC_NUMBER (R_BFIN_FUNCDESC_GOTLO, 0x1a)
- RELOC_NUMBER (R_BFIN_FUNCDESC_VALUE, 0x1b)
- RELOC_NUMBER (R_BFIN_FUNCDESC_GOTOFF17M4, 0x1c)
- RELOC_NUMBER (R_BFIN_FUNCDESC_GOTOFFHI, 0x1d)
- RELOC_NUMBER (R_BFIN_FUNCDESC_GOTOFFLO, 0x1e)
- RELOC_NUMBER (R_BFIN_GOTOFF17M4, 0x1f)
- RELOC_NUMBER (R_BFIN_GOTOFFHI, 0x20)
- RELOC_NUMBER (R_BFIN_GOTOFFLO, 0x21)
-
- RELOC_NUMBER (R_BFIN_PUSH, 0xE0)
- RELOC_NUMBER (R_BFIN_CONST, 0xE1)
- RELOC_NUMBER (R_BFIN_ADD, 0xE2)
- RELOC_NUMBER (R_BFIN_SUB, 0xE3)
- RELOC_NUMBER (R_BFIN_MULT, 0xE4)
- RELOC_NUMBER (R_BFIN_DIV, 0xE5)
- RELOC_NUMBER (R_BFIN_MOD, 0xE6)
- RELOC_NUMBER (R_BFIN_LSHIFT, 0xE7)
- RELOC_NUMBER (R_BFIN_RSHIFT, 0xE8)
- RELOC_NUMBER (R_BFIN_AND, 0xE9)
- RELOC_NUMBER (R_BFIN_OR, 0xEA)
- RELOC_NUMBER (R_BFIN_XOR, 0xEB)
- RELOC_NUMBER (R_BFIN_LAND, 0xEC)
- RELOC_NUMBER (R_BFIN_LOR, 0xED)
- RELOC_NUMBER (R_BFIN_LEN, 0xEE)
- RELOC_NUMBER (R_BFIN_NEG, 0xEF)
- RELOC_NUMBER (R_BFIN_COMP, 0xF0)
- RELOC_NUMBER (R_BFIN_PAGE, 0xF1)
- RELOC_NUMBER (R_BFIN_HWPAGE, 0xF2)
- RELOC_NUMBER (R_BFIN_ADDR, 0xF3)
- RELOC_NUMBER (R_BFIN_PLTPC, 0x40) /* PLT gnu only relocation */
- RELOC_NUMBER (R_BFIN_GOT, 0x41) /* GOT gnu only relocation */
- RELOC_NUMBER (R_BFIN_GNU_VTINHERIT, 0x42) /* C++, gnu only */
- RELOC_NUMBER (R_BFIN_GNU_VTENTRY, 0x43) /* C++, gnu only */
-END_RELOC_NUMBERS (R_BFIN_max)
-
-/* Processor specific flags for the ELF header e_flags field. */
-#define EF_BFIN_PIC 0x00000001 /* -fpic */
-#define EF_BFIN_FDPIC 0x00000002 /* -mfdpic */
-
-#define EF_BFIN_CODE_IN_L1 0x00000010 /* --code-in-l1 */
-#define EF_BFIN_DATA_IN_L1 0x00000020 /* --data-in-l1 */
-
-#define EF_BFIN_PIC_FLAGS (EF_BFIN_PIC | EF_BFIN_FDPIC)
-#endif /* _ELF_BFIN_H */
diff --git a/include/elf/common.h b/include/elf/common.h
deleted file mode 100644
index cd3bcdd2b..000000000
--- a/include/elf/common.h
+++ /dev/null
@@ -1,1001 +0,0 @@
-/* ELF support for BFD.
- Copyright 1991-2013 Free Software Foundation, Inc.
-
- Written by Fred Fish @ Cygnus Support, from information published
- in "UNIX System V Release 4, Programmers Guide: ANSI C and
- Programming Support Tools".
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-/* This file is part of ELF support for BFD, and contains the portions
- that are common to both the internal and external representations.
- For example, ELFMAG0 is the byte 0x7F in both the internal (in-memory)
- and external (in-file) representations. */
-
-#ifndef _ELF_COMMON_H
-#define _ELF_COMMON_H
-
-/* Fields in e_ident[]. */
-
-#define EI_MAG0 0 /* File identification byte 0 index */
-#define ELFMAG0 0x7F /* Magic number byte 0 */
-
-#define EI_MAG1 1 /* File identification byte 1 index */
-#define ELFMAG1 'E' /* Magic number byte 1 */
-
-#define EI_MAG2 2 /* File identification byte 2 index */
-#define ELFMAG2 'L' /* Magic number byte 2 */
-
-#define EI_MAG3 3 /* File identification byte 3 index */
-#define ELFMAG3 'F' /* Magic number byte 3 */
-
-#define EI_CLASS 4 /* File class */
-#define ELFCLASSNONE 0 /* Invalid class */
-#define ELFCLASS32 1 /* 32-bit objects */
-#define ELFCLASS64 2 /* 64-bit objects */
-
-#define EI_DATA 5 /* Data encoding */
-#define ELFDATANONE 0 /* Invalid data encoding */
-#define ELFDATA2LSB 1 /* 2's complement, little endian */
-#define ELFDATA2MSB 2 /* 2's complement, big endian */
-
-#define EI_VERSION 6 /* File version */
-
-#define EI_OSABI 7 /* Operating System/ABI indication */
-#define ELFOSABI_NONE 0 /* UNIX System V ABI */
-#define ELFOSABI_HPUX 1 /* HP-UX operating system */
-#define ELFOSABI_NETBSD 2 /* NetBSD */
-#define ELFOSABI_GNU 3 /* GNU */
-#define ELFOSABI_LINUX 3 /* Alias for ELFOSABI_GNU */
-#define ELFOSABI_SOLARIS 6 /* Solaris */
-#define ELFOSABI_AIX 7 /* AIX */
-#define ELFOSABI_IRIX 8 /* IRIX */
-#define ELFOSABI_FREEBSD 9 /* FreeBSD */
-#define ELFOSABI_TRU64 10 /* TRU64 UNIX */
-#define ELFOSABI_MODESTO 11 /* Novell Modesto */
-#define ELFOSABI_OPENBSD 12 /* OpenBSD */
-#define ELFOSABI_OPENVMS 13 /* OpenVMS */
-#define ELFOSABI_NSK 14 /* Hewlett-Packard Non-Stop Kernel */
-#define ELFOSABI_AROS 15 /* AROS */
-#define ELFOSABI_FENIXOS 16 /* FenixOS */
-#define ELFOSABI_C6000_ELFABI 64 /* Bare-metal TMS320C6000 */
-#define ELFOSABI_C6000_LINUX 65 /* Linux TMS320C6000 */
-#define ELFOSABI_ARM 97 /* ARM */
-#define ELFOSABI_STANDALONE 255 /* Standalone (embedded) application */
-
-#define EI_ABIVERSION 8 /* ABI version */
-
-#define EI_PAD 9 /* Start of padding bytes */
-
-
-/* Values for e_type, which identifies the object file type. */
-
-#define ET_NONE 0 /* No file type */
-#define ET_REL 1 /* Relocatable file */
-#define ET_EXEC 2 /* Executable file */
-#define ET_DYN 3 /* Shared object file */
-#define ET_CORE 4 /* Core file */
-#define ET_LOOS 0xFE00 /* Operating system-specific */
-#define ET_HIOS 0xFEFF /* Operating system-specific */
-#define ET_LOPROC 0xFF00 /* Processor-specific */
-#define ET_HIPROC 0xFFFF /* Processor-specific */
-
-/* Values for e_machine, which identifies the architecture. These numbers
- are officially assigned by registry@sco.com. See below for a list of
- ad-hoc numbers used during initial development. */
-
-#define EM_NONE 0 /* No machine */
-#define EM_M32 1 /* AT&T WE 32100 */
-#define EM_SPARC 2 /* SUN SPARC */
-#define EM_386 3 /* Intel 80386 */
-#define EM_68K 4 /* Motorola m68k family */
-#define EM_88K 5 /* Motorola m88k family */
-#define EM_486 6 /* Intel 80486 *//* Reserved for future use */
-#define EM_860 7 /* Intel 80860 */
-#define EM_MIPS 8 /* MIPS R3000 (officially, big-endian only) */
-#define EM_S370 9 /* IBM System/370 */
-#define EM_MIPS_RS3_LE 10 /* MIPS R3000 little-endian (Oct 4 1999 Draft) Deprecated */
-#define EM_res011 11 /* Reserved */
-#define EM_res012 12 /* Reserved */
-#define EM_res013 13 /* Reserved */
-#define EM_res014 14 /* Reserved */
-#define EM_PARISC 15 /* HPPA */
-#define EM_res016 16 /* Reserved */
-#define EM_VPP550 17 /* Fujitsu VPP500 */
-#define EM_SPARC32PLUS 18 /* Sun's "v8plus" */
-#define EM_960 19 /* Intel 80960 */
-#define EM_PPC 20 /* PowerPC */
-#define EM_PPC64 21 /* 64-bit PowerPC */
-#define EM_S390 22 /* IBM S/390 */
-#define EM_SPU 23 /* Sony/Toshiba/IBM SPU */
-#define EM_res024 24 /* Reserved */
-#define EM_res025 25 /* Reserved */
-#define EM_res026 26 /* Reserved */
-#define EM_res027 27 /* Reserved */
-#define EM_res028 28 /* Reserved */
-#define EM_res029 29 /* Reserved */
-#define EM_res030 30 /* Reserved */
-#define EM_res031 31 /* Reserved */
-#define EM_res032 32 /* Reserved */
-#define EM_res033 33 /* Reserved */
-#define EM_res034 34 /* Reserved */
-#define EM_res035 35 /* Reserved */
-#define EM_V800 36 /* NEC V800 series */
-#define EM_FR20 37 /* Fujitsu FR20 */
-#define EM_RH32 38 /* TRW RH32 */
-#define EM_MCORE 39 /* Motorola M*Core */ /* May also be taken by Fujitsu MMA */
-#define EM_RCE 39 /* Old name for MCore */
-#define EM_ARM 40 /* ARM */
-#define EM_OLD_ALPHA 41 /* Digital Alpha */
-#define EM_SH 42 /* Renesas (formerly Hitachi) / SuperH SH */
-#define EM_SPARCV9 43 /* SPARC v9 64-bit */
-#define EM_TRICORE 44 /* Siemens Tricore embedded processor */
-#define EM_ARC 45 /* ARC Cores */
-#define EM_H8_300 46 /* Renesas (formerly Hitachi) H8/300 */
-#define EM_H8_300H 47 /* Renesas (formerly Hitachi) H8/300H */
-#define EM_H8S 48 /* Renesas (formerly Hitachi) H8S */
-#define EM_H8_500 49 /* Renesas (formerly Hitachi) H8/500 */
-#define EM_IA_64 50 /* Intel IA-64 Processor */
-#define EM_MIPS_X 51 /* Stanford MIPS-X */
-#define EM_COLDFIRE 52 /* Motorola Coldfire */
-#define EM_68HC12 53 /* Motorola M68HC12 */
-#define EM_MMA 54 /* Fujitsu Multimedia Accelerator */
-#define EM_PCP 55 /* Siemens PCP */
-#define EM_NCPU 56 /* Sony nCPU embedded RISC processor */
-#define EM_NDR1 57 /* Denso NDR1 microprocessor */
-#define EM_STARCORE 58 /* Motorola Star*Core processor */
-#define EM_ME16 59 /* Toyota ME16 processor */
-#define EM_ST100 60 /* STMicroelectronics ST100 processor */
-#define EM_TINYJ 61 /* Advanced Logic Corp. TinyJ embedded processor */
-#define EM_X86_64 62 /* Advanced Micro Devices X86-64 processor */
-#define EM_PDSP 63 /* Sony DSP Processor */
-#define EM_PDP10 64 /* Digital Equipment Corp. PDP-10 */
-#define EM_PDP11 65 /* Digital Equipment Corp. PDP-11 */
-#define EM_FX66 66 /* Siemens FX66 microcontroller */
-#define EM_ST9PLUS 67 /* STMicroelectronics ST9+ 8/16 bit microcontroller */
-#define EM_ST7 68 /* STMicroelectronics ST7 8-bit microcontroller */
-#define EM_68HC16 69 /* Motorola MC68HC16 Microcontroller */
-#define EM_68HC11 70 /* Motorola MC68HC11 Microcontroller */
-#define EM_68HC08 71 /* Motorola MC68HC08 Microcontroller */
-#define EM_68HC05 72 /* Motorola MC68HC05 Microcontroller */
-#define EM_SVX 73 /* Silicon Graphics SVx */
-#define EM_ST19 74 /* STMicroelectronics ST19 8-bit cpu */
-#define EM_VAX 75 /* Digital VAX */
-#define EM_CRIS 76 /* Axis Communications 32-bit embedded processor */
-#define EM_JAVELIN 77 /* Infineon Technologies 32-bit embedded cpu */
-#define EM_FIREPATH 78 /* Element 14 64-bit DSP processor */
-#define EM_ZSP 79 /* LSI Logic's 16-bit DSP processor */
-#define EM_MMIX 80 /* Donald Knuth's educational 64-bit processor */
-#define EM_HUANY 81 /* Harvard's machine-independent format */
-#define EM_PRISM 82 /* SiTera Prism */
-#define EM_AVR 83 /* Atmel AVR 8-bit microcontroller */
-#define EM_FR30 84 /* Fujitsu FR30 */
-#define EM_D10V 85 /* Mitsubishi D10V */
-#define EM_D30V 86 /* Mitsubishi D30V */
-#define EM_V850 87 /* Renesas V850 (formerly NEC V850) */
-#define EM_M32R 88 /* Renesas M32R (formerly Mitsubishi M32R) */
-#define EM_MN10300 89 /* Matsushita MN10300 */
-#define EM_MN10200 90 /* Matsushita MN10200 */
-#define EM_PJ 91 /* picoJava */
-#define EM_OPENRISC 92 /* OpenRISC 32-bit embedded processor */
-#define EM_ARC_A5 93 /* ARC Cores Tangent-A5 */
-#define EM_XTENSA 94 /* Tensilica Xtensa Architecture */
-#define EM_VIDEOCORE 95 /* Alphamosaic VideoCore processor */
-#define EM_TMM_GPP 96 /* Thompson Multimedia General Purpose Processor */
-#define EM_NS32K 97 /* National Semiconductor 32000 series */
-#define EM_TPC 98 /* Tenor Network TPC processor */
-#define EM_SNP1K 99 /* Trebia SNP 1000 processor */
-#define EM_ST200 100 /* STMicroelectronics ST200 microcontroller */
-#define EM_IP2K 101 /* Ubicom IP2022 micro controller */
-#define EM_MAX 102 /* MAX Processor */
-#define EM_CR 103 /* National Semiconductor CompactRISC */
-#define EM_F2MC16 104 /* Fujitsu F2MC16 */
-#define EM_MSP430 105 /* TI msp430 micro controller */
-#define EM_BLACKFIN 106 /* ADI Blackfin */
-#define EM_SE_C33 107 /* S1C33 Family of Seiko Epson processors */
-#define EM_SEP 108 /* Sharp embedded microprocessor */
-#define EM_ARCA 109 /* Arca RISC Microprocessor */
-#define EM_UNICORE 110 /* Microprocessor series from PKU-Unity Ltd. and MPRC of Peking University */
-#define EM_EXCESS 111 /* eXcess: 16/32/64-bit configurable embedded CPU */
-#define EM_DXP 112 /* Icera Semiconductor Inc. Deep Execution Processor */
-#define EM_ALTERA_NIOS2 113 /* Altera Nios II soft-core processor */
-#define EM_CRX 114 /* National Semiconductor CRX */
-#define EM_XGATE 115 /* Motorola XGATE embedded processor */
-#define EM_C166 116 /* Infineon C16x/XC16x processor */
-#define EM_M16C 117 /* Renesas M16C series microprocessors */
-#define EM_DSPIC30F 118 /* Microchip Technology dsPIC30F Digital Signal Controller */
-#define EM_CE 119 /* Freescale Communication Engine RISC core */
-#define EM_M32C 120 /* Renesas M32C series microprocessors */
-#define EM_res121 121 /* Reserved */
-#define EM_res122 122 /* Reserved */
-#define EM_res123 123 /* Reserved */
-#define EM_res124 124 /* Reserved */
-#define EM_res125 125 /* Reserved */
-#define EM_res126 126 /* Reserved */
-#define EM_res127 127 /* Reserved */
-#define EM_res128 128 /* Reserved */
-#define EM_res129 129 /* Reserved */
-#define EM_res130 130 /* Reserved */
-#define EM_TSK3000 131 /* Altium TSK3000 core */
-#define EM_RS08 132 /* Freescale RS08 embedded processor */
-#define EM_res133 133 /* Reserved */
-#define EM_ECOG2 134 /* Cyan Technology eCOG2 microprocessor */
-#define EM_SCORE 135 /* Sunplus Score */
-#define EM_SCORE7 135 /* Sunplus S+core7 RISC processor */
-#define EM_DSP24 136 /* New Japan Radio (NJR) 24-bit DSP Processor */
-#define EM_VIDEOCORE3 137 /* Broadcom VideoCore III processor */
-#define EM_LATTICEMICO32 138 /* RISC processor for Lattice FPGA architecture */
-#define EM_SE_C17 139 /* Seiko Epson C17 family */
-#define EM_TI_C6000 140 /* Texas Instruments TMS320C6000 DSP family */
-#define EM_TI_C2000 141 /* Texas Instruments TMS320C2000 DSP family */
-#define EM_TI_C5500 142 /* Texas Instruments TMS320C55x DSP family */
-#define EM_res143 143 /* Reserved */
-#define EM_res144 144 /* Reserved */
-#define EM_res145 145 /* Reserved */
-#define EM_res146 146 /* Reserved */
-#define EM_res147 147 /* Reserved */
-#define EM_res148 148 /* Reserved */
-#define EM_res149 149 /* Reserved */
-#define EM_res150 150 /* Reserved */
-#define EM_res151 151 /* Reserved */
-#define EM_res152 152 /* Reserved */
-#define EM_res153 153 /* Reserved */
-#define EM_res154 154 /* Reserved */
-#define EM_res155 155 /* Reserved */
-#define EM_res156 156 /* Reserved */
-#define EM_res157 157 /* Reserved */
-#define EM_res158 158 /* Reserved */
-#define EM_res159 159 /* Reserved */
-#define EM_MMDSP_PLUS 160 /* STMicroelectronics 64bit VLIW Data Signal Processor */
-#define EM_CYPRESS_M8C 161 /* Cypress M8C microprocessor */
-#define EM_R32C 162 /* Renesas R32C series microprocessors */
-#define EM_TRIMEDIA 163 /* NXP Semiconductors TriMedia architecture family */
-#define EM_QDSP6 164 /* QUALCOMM DSP6 Processor */
-#define EM_8051 165 /* Intel 8051 and variants */
-#define EM_STXP7X 166 /* STMicroelectronics STxP7x family */
-#define EM_NDS32 167 /* Andes Technology compact code size embedded RISC processor family */
-#define EM_ECOG1 168 /* Cyan Technology eCOG1X family */
-#define EM_ECOG1X 168 /* Cyan Technology eCOG1X family */
-#define EM_MAXQ30 169 /* Dallas Semiconductor MAXQ30 Core Micro-controllers */
-#define EM_XIMO16 170 /* New Japan Radio (NJR) 16-bit DSP Processor */
-#define EM_MANIK 171 /* M2000 Reconfigurable RISC Microprocessor */
-#define EM_CRAYNV2 172 /* Cray Inc. NV2 vector architecture */
-#define EM_RX 173 /* Renesas RX family */
-#define EM_METAG 174 /* Imagination Technologies Meta processor architecture */
-#define EM_MCST_ELBRUS 175 /* MCST Elbrus general purpose hardware architecture */
-#define EM_ECOG16 176 /* Cyan Technology eCOG16 family */
-#define EM_CR16 177 /* National Semiconductor CompactRISC 16-bit processor */
-#define EM_ETPU 178 /* Freescale Extended Time Processing Unit */
-#define EM_SLE9X 179 /* Infineon Technologies SLE9X core */
-#define EM_L1OM 180 /* Intel L1OM */
-#define EM_K1OM 181 /* Intel K1OM */
-#define EM_INTEL182 182 /* Reserved by Intel */
-#define EM_AARCH64 183 /* ARM 64-bit architecture */
-#define EM_ARM184 184 /* Reserved by ARM */
-#define EM_AVR32 185 /* Atmel Corporation 32-bit microprocessor family */
-#define EM_STM8 186 /* STMicroeletronics STM8 8-bit microcontroller */
-#define EM_TILE64 187 /* Tilera TILE64 multicore architecture family */
-#define EM_TILEPRO 188 /* Tilera TILEPro multicore architecture family */
-#define EM_MICROBLAZE 189 /* Xilinx MicroBlaze 32-bit RISC soft processor core */
-#define EM_CUDA 190 /* NVIDIA CUDA architecture */
-#define EM_TILEGX 191 /* Tilera TILE-Gx multicore architecture family */
-#define EM_RL78 197 /* Renesas RL78 family. */
-#define EM_78K0R 199 /* Renesas 78K0R. */
-#define EM_INTEL205 205 /* Reserved by Intel */
-#define EM_INTEL206 206 /* Reserved by Intel */
-#define EM_INTEL207 207 /* Reserved by Intel */
-#define EM_INTEL208 208 /* Reserved by Intel */
-#define EM_INTEL209 209 /* Reserved by Intel */
-
-/* If it is necessary to assign new unofficial EM_* values, please pick large
- random numbers (0x8523, 0xa7f2, etc.) to minimize the chances of collision
- with official or non-GNU unofficial values.
-
- NOTE: Do not just increment the most recent number by one.
- Somebody else somewhere will do exactly the same thing, and you
- will have a collision. Instead, pick a random number.
-
- Normally, each entity or maintainer responsible for a machine with an
- unofficial e_machine number should eventually ask registry@sco.com for
- an officially blessed number to be added to the list above. */
-
-/* Old version of Sparc v9, from before the ABI;
- This should be removed shortly. */
-#define EM_OLD_SPARCV9 11
-
-/* Old version of PowerPC, this should be removed shortly. */
-#define EM_PPC_OLD 17
-
-/* picoJava */
-#define EM_PJ_OLD 99
-
-/* Old, unofficial value for National Semiconductor CompactRISC - CR16 */
-#define EM_CR16_OLD 115
-
-/* AVR magic number. Written in the absense of an ABI. */
-#define EM_AVR_OLD 0x1057
-
-/* MSP430 magic number. Written in the absense of everything. */
-#define EM_MSP430_OLD 0x1059
-
-/* Morpho MT. Written in the absense of an ABI. */
-#define EM_MT 0x2530
-
-/* FR30 magic number - no EABI available. */
-#define EM_CYGNUS_FR30 0x3330
-
-/* OpenRISC magic number. Written in the absense of an ABI. */
-#define EM_OPENRISC_OLD 0x3426
-
-/* DLX magic number. Written in the absense of an ABI. */
-#define EM_DLX 0x5aa5
-
-/* FRV magic number - no EABI available??. */
-#define EM_CYGNUS_FRV 0x5441
-
-/* Infineon Technologies 16-bit microcontroller with C166-V2 core. */
-#define EM_XC16X 0x4688
-
-/* D10V backend magic number. Written in the absence of an ABI. */
-#define EM_CYGNUS_D10V 0x7650
-
-/* D30V backend magic number. Written in the absence of an ABI. */
-#define EM_CYGNUS_D30V 0x7676
-
-/* Ubicom IP2xxx; Written in the absense of an ABI. */
-#define EM_IP2K_OLD 0x8217
-
-/* (Deprecated) Temporary number for the OpenRISC processor. */
-#define EM_OR32 0x8472
-
-/* Cygnus PowerPC ELF backend. Written in the absence of an ABI. */
-#define EM_CYGNUS_POWERPC 0x9025
-
-/* Alpha backend magic number. Written in the absence of an ABI. */
-#define EM_ALPHA 0x9026
-
-/* Cygnus M32R ELF backend. Written in the absence of an ABI. */
-#define EM_CYGNUS_M32R 0x9041
-
-/* V850 backend magic number. Written in the absense of an ABI. */
-#define EM_CYGNUS_V850 0x9080
-
-/* old S/390 backend magic number. Written in the absence of an ABI. */
-#define EM_S390_OLD 0xa390
-
-/* Old, unofficial value for Xtensa. */
-#define EM_XTENSA_OLD 0xabc7
-
-#define EM_XSTORMY16 0xad45
-
-/* mn10200 and mn10300 backend magic numbers.
- Written in the absense of an ABI. */
-#define EM_CYGNUS_MN10300 0xbeef
-#define EM_CYGNUS_MN10200 0xdead
-
-/* Renesas M32C and M16C. */
-#define EM_M32C_OLD 0xFEB0
-
-/* Vitesse IQ2000. */
-#define EM_IQ2000 0xFEBA
-
-/* NIOS magic number - no EABI available. */
-#define EM_NIOS32 0xFEBB
-
-#define EM_CYGNUS_MEP 0xF00D /* Toshiba MeP */
-
-#define EM_MOXIE 0xFEED /* Moxie */
-
-/* Old Sunplus S+core7 backend magic number. Written in the absence of an ABI. */
-#define EM_SCORE_OLD 95
-
-#define EM_MICROBLAZE_OLD 0xbaab /* Old MicroBlaze */
-
-#define EM_ADAPTEVA_EPIPHANY 0x1223 /* Adapteva's Epiphany architecture. */
-
-/* See the above comment before you add a new EM_* value here. */
-
-/* Values for e_version. */
-
-#define EV_NONE 0 /* Invalid ELF version */
-#define EV_CURRENT 1 /* Current version */
-
-/* Value for e_phnum. */
-#define PN_XNUM 0xffff /* Extended numbering */
-
-/* Values for program header, p_type field. */
-
-#define PT_NULL 0 /* Program header table entry unused */
-#define PT_LOAD 1 /* Loadable program segment */
-#define PT_DYNAMIC 2 /* Dynamic linking information */
-#define PT_INTERP 3 /* Program interpreter */
-#define PT_NOTE 4 /* Auxiliary information */
-#define PT_SHLIB 5 /* Reserved, unspecified semantics */
-#define PT_PHDR 6 /* Entry for header table itself */
-#define PT_TLS 7 /* Thread local storage segment */
-#define PT_LOOS 0x60000000 /* OS-specific */
-#define PT_HIOS 0x6fffffff /* OS-specific */
-#define PT_LOPROC 0x70000000 /* Processor-specific */
-#define PT_HIPROC 0x7FFFFFFF /* Processor-specific */
-
-#define PT_GNU_EH_FRAME (PT_LOOS + 0x474e550) /* Frame unwind information */
-#define PT_SUNW_EH_FRAME PT_GNU_EH_FRAME /* Solaris uses the same value */
-#define PT_GNU_STACK (PT_LOOS + 0x474e551) /* Stack flags */
-#define PT_GNU_RELRO (PT_LOOS + 0x474e552) /* Read-only after relocation */
-
-/* Program segment permissions, in program header p_flags field. */
-
-#define PF_X (1 << 0) /* Segment is executable */
-#define PF_W (1 << 1) /* Segment is writable */
-#define PF_R (1 << 2) /* Segment is readable */
-/* #define PF_MASKOS 0x0F000000 *//* OS-specific reserved bits */
-#define PF_MASKOS 0x0FF00000 /* New value, Oct 4, 1999 Draft */
-#define PF_MASKPROC 0xF0000000 /* Processor-specific reserved bits */
-
-/* Values for section header, sh_type field. */
-
-#define SHT_NULL 0 /* Section header table entry unused */
-#define SHT_PROGBITS 1 /* Program specific (private) data */
-#define SHT_SYMTAB 2 /* Link editing symbol table */
-#define SHT_STRTAB 3 /* A string table */
-#define SHT_RELA 4 /* Relocation entries with addends */
-#define SHT_HASH 5 /* A symbol hash table */
-#define SHT_DYNAMIC 6 /* Information for dynamic linking */
-#define SHT_NOTE 7 /* Information that marks file */
-#define SHT_NOBITS 8 /* Section occupies no space in file */
-#define SHT_REL 9 /* Relocation entries, no addends */
-#define SHT_SHLIB 10 /* Reserved, unspecified semantics */
-#define SHT_DYNSYM 11 /* Dynamic linking symbol table */
-
-#define SHT_INIT_ARRAY 14 /* Array of ptrs to init functions */
-#define SHT_FINI_ARRAY 15 /* Array of ptrs to finish functions */
-#define SHT_PREINIT_ARRAY 16 /* Array of ptrs to pre-init funcs */
-#define SHT_GROUP 17 /* Section contains a section group */
-#define SHT_SYMTAB_SHNDX 18 /* Indicies for SHN_XINDEX entries */
-
-#define SHT_LOOS 0x60000000 /* First of OS specific semantics */
-#define SHT_HIOS 0x6fffffff /* Last of OS specific semantics */
-
-#define SHT_GNU_INCREMENTAL_INPUTS 0x6fff4700 /* incremental build data */
-#define SHT_GNU_ATTRIBUTES 0x6ffffff5 /* Object attributes */
-#define SHT_GNU_HASH 0x6ffffff6 /* GNU style symbol hash table */
-#define SHT_GNU_LIBLIST 0x6ffffff7 /* List of prelink dependencies */
-
-/* The next three section types are defined by Solaris, and are named
- SHT_SUNW*. We use them in GNU code, so we also define SHT_GNU*
- versions. */
-#define SHT_SUNW_verdef 0x6ffffffd /* Versions defined by file */
-#define SHT_SUNW_verneed 0x6ffffffe /* Versions needed by file */
-#define SHT_SUNW_versym 0x6fffffff /* Symbol versions */
-
-#define SHT_GNU_verdef SHT_SUNW_verdef
-#define SHT_GNU_verneed SHT_SUNW_verneed
-#define SHT_GNU_versym SHT_SUNW_versym
-
-#define SHT_LOPROC 0x70000000 /* Processor-specific semantics, lo */
-#define SHT_HIPROC 0x7FFFFFFF /* Processor-specific semantics, hi */
-#define SHT_LOUSER 0x80000000 /* Application-specific semantics */
-/* #define SHT_HIUSER 0x8FFFFFFF *//* Application-specific semantics */
-#define SHT_HIUSER 0xFFFFFFFF /* New value, defined in Oct 4, 1999 Draft */
-
-/* Values for section header, sh_flags field. */
-
-#define SHF_WRITE (1 << 0) /* Writable data during execution */
-#define SHF_ALLOC (1 << 1) /* Occupies memory during execution */
-#define SHF_EXECINSTR (1 << 2) /* Executable machine instructions */
-#define SHF_MERGE (1 << 4) /* Data in this section can be merged */
-#define SHF_STRINGS (1 << 5) /* Contains null terminated character strings */
-#define SHF_INFO_LINK (1 << 6) /* sh_info holds section header table index */
-#define SHF_LINK_ORDER (1 << 7) /* Preserve section ordering when linking */
-#define SHF_OS_NONCONFORMING (1 << 8) /* OS specific processing required */
-#define SHF_GROUP (1 << 9) /* Member of a section group */
-#define SHF_TLS (1 << 10) /* Thread local storage section */
-
-/* #define SHF_MASKOS 0x0F000000 *//* OS-specific semantics */
-#define SHF_MASKOS 0x0FF00000 /* New value, Oct 4, 1999 Draft */
-#define SHF_MASKPROC 0xF0000000 /* Processor-specific semantics */
-
-/* This used to be implemented as a processor specific section flag.
- We just make it generic. */
-#define SHF_EXCLUDE 0x80000000 /* Link editor is to exclude
- this section from executable
- and shared library that it
- builds when those objects
- are not to be further
- relocated. */
-
-/* Values of note segment descriptor types for core files. */
-
-#define NT_PRSTATUS 1 /* Contains copy of prstatus struct */
-#define NT_FPREGSET 2 /* Contains copy of fpregset struct */
-#define NT_PRPSINFO 3 /* Contains copy of prpsinfo struct */
-#define NT_TASKSTRUCT 4 /* Contains copy of task struct */
-#define NT_AUXV 6 /* Contains copy of Elfxx_auxv_t */
-#define NT_PRXFPREG 0x46e62b7f /* Contains a user_xfpregs_struct; */
- /* note name must be "LINUX". */
-#define NT_PPC_VMX 0x100 /* PowerPC Altivec/VMX registers */
- /* note name must be "LINUX". */
-#define NT_PPC_VSX 0x102 /* PowerPC VSX registers */
- /* note name must be "LINUX". */
-#define NT_386_TLS 0x200 /* x86 TLS information */
- /* note name must be "LINUX". */
-#define NT_386_IOPERM 0x201 /* x86 io permissions */
- /* note name must be "LINUX". */
-#define NT_X86_XSTATE 0x202 /* x86 XSAVE extended state */
- /* note name must be "LINUX". */
-#define NT_S390_HIGH_GPRS 0x300 /* S/390 upper halves of GPRs */
- /* note name must be "LINUX". */
-#define NT_S390_TIMER 0x301 /* S390 timer */
- /* note name must be "LINUX". */
-#define NT_S390_TODCMP 0x302 /* S390 TOD clock comparator */
- /* note name must be "LINUX". */
-#define NT_S390_TODPREG 0x303 /* S390 TOD programmable register */
- /* note name must be "LINUX". */
-#define NT_S390_CTRS 0x304 /* S390 control registers */
- /* note name must be "LINUX". */
-#define NT_S390_PREFIX 0x305 /* S390 prefix register */
- /* note name must be "LINUX". */
-#define NT_S390_LAST_BREAK 0x306 /* S390 breaking event address */
- /* note name must be "LINUX". */
-#define NT_S390_SYSTEM_CALL 0x307 /* S390 system call restart data */
- /* note name must be "LINUX". */
-#define NT_S390_TDB 0x308 /* S390 transaction diagnostic block */
- /* note name must be "LINUX". */
-#define NT_ARM_VFP 0x400 /* ARM VFP registers */
-/* The following definitions should really use NT_AARCH_..., but defined
- this way for compatibility with Linux. */
-#define NT_ARM_TLS 0x401 /* AArch TLS registers */
- /* note name must be "LINUX". */
-#define NT_ARM_HW_BREAK 0x402 /* AArch hardware breakpoint registers */
- /* note name must be "LINUX". */
-#define NT_ARM_HW_WATCH 0x403 /* AArch hardware watchpoint registers */
- /* note name must be "LINUX". */
-#define NT_SIGINFO 0x53494749 /* Fields of siginfo_t. */
-#define NT_FILE 0x46494c45 /* Description of mapped files. */
-
-/* Note segments for core files on dir-style procfs systems. */
-
-#define NT_PSTATUS 10 /* Has a struct pstatus */
-#define NT_FPREGS 12 /* Has a struct fpregset */
-#define NT_PSINFO 13 /* Has a struct psinfo */
-#define NT_LWPSTATUS 16 /* Has a struct lwpstatus_t */
-#define NT_LWPSINFO 17 /* Has a struct lwpsinfo_t */
-#define NT_WIN32PSTATUS 18 /* Has a struct win32_pstatus */
-
-/* Note segment for SystemTap probes. */
-#define NT_STAPSDT 3
-
-/* Note segments for core files on NetBSD systems. Note name
- must start with "NetBSD-CORE". */
-
-#define NT_NETBSDCORE_PROCINFO 1 /* Has a struct procinfo */
-#define NT_NETBSDCORE_FIRSTMACH 32 /* start of machdep note types */
-
-
-/* Note segments for core files on OpenBSD systems. Note name is
- "OpenBSD". */
-
-#define NT_OPENBSD_PROCINFO 10
-#define NT_OPENBSD_AUXV 11
-#define NT_OPENBSD_REGS 20
-#define NT_OPENBSD_FPREGS 21
-#define NT_OPENBSD_XFPREGS 22
-#define NT_OPENBSD_WCOOKIE 23
-
-
-/* Note segments for core files on SPU systems. Note name
- must start with "SPU/". */
-
-#define NT_SPU 1
-
-/* Values of note segment descriptor types for object files. */
-
-#define NT_VERSION 1 /* Contains a version string. */
-#define NT_ARCH 2 /* Contains an architecture string. */
-
-/* Values for notes in non-core files using name "GNU". */
-
-#define NT_GNU_ABI_TAG 1
-#define NT_GNU_HWCAP 2 /* Used by ld.so and kernel vDSO. */
-#define NT_GNU_BUILD_ID 3 /* Generated by ld --build-id. */
-#define NT_GNU_GOLD_VERSION 4 /* Generated by gold. */
-
-/* Values used in GNU .note.ABI-tag notes (NT_GNU_ABI_TAG). */
-#define GNU_ABI_TAG_LINUX 0
-#define GNU_ABI_TAG_HURD 1
-#define GNU_ABI_TAG_SOLARIS 2
-#define GNU_ABI_TAG_FREEBSD 3
-#define GNU_ABI_TAG_NETBSD 4
-
-/* Values for NetBSD .note.netbsd.ident notes. Note name is "NetBSD". */
-
-#define NT_NETBSD_IDENT 1
-
-/* Values for OpenBSD .note.openbsd.ident notes. Note name is "OpenBSD". */
-
-#define NT_OPENBSD_IDENT 1
-
-/* Values for FreeBSD .note.ABI-tag notes. Note name is "FreeBSD". */
-
-#define NT_FREEBSD_ABI_TAG 1
-
-/* These three macros disassemble and assemble a symbol table st_info field,
- which contains the symbol binding and symbol type. The STB_ and STT_
- defines identify the binding and type. */
-
-#define ELF_ST_BIND(val) (((unsigned int)(val)) >> 4)
-#define ELF_ST_TYPE(val) ((val) & 0xF)
-#define ELF_ST_INFO(bind,type) (((bind) << 4) + ((type) & 0xF))
-
-/* The 64bit and 32bit versions of these macros are identical, but
- the ELF spec defines them, so here they are. */
-#define ELF32_ST_BIND ELF_ST_BIND
-#define ELF32_ST_TYPE ELF_ST_TYPE
-#define ELF32_ST_INFO ELF_ST_INFO
-#define ELF64_ST_BIND ELF_ST_BIND
-#define ELF64_ST_TYPE ELF_ST_TYPE
-#define ELF64_ST_INFO ELF_ST_INFO
-
-/* This macro disassembles and assembles a symbol's visibility into
- the st_other field. The STV_ defines specify the actual visibility. */
-
-#define ELF_ST_VISIBILITY(v) ((v) & 0x3)
-/* The remaining bits in the st_other field are not currently used.
- They should be set to zero. */
-
-#define ELF32_ST_VISIBILITY ELF_ST_VISIBILITY
-#define ELF64_ST_VISIBILITY ELF_ST_VISIBILITY
-
-
-#define STN_UNDEF 0 /* Undefined symbol index */
-
-#define STB_LOCAL 0 /* Symbol not visible outside obj */
-#define STB_GLOBAL 1 /* Symbol visible outside obj */
-#define STB_WEAK 2 /* Like globals, lower precedence */
-#define STB_LOOS 10 /* OS-specific semantics */
-#define STB_GNU_UNIQUE 10 /* Symbol is unique in namespace */
-#define STB_HIOS 12 /* OS-specific semantics */
-#define STB_LOPROC 13 /* Processor-specific semantics */
-#define STB_HIPROC 15 /* Processor-specific semantics */
-
-#define STT_NOTYPE 0 /* Symbol type is unspecified */
-#define STT_OBJECT 1 /* Symbol is a data object */
-#define STT_FUNC 2 /* Symbol is a code object */
-#define STT_SECTION 3 /* Symbol associated with a section */
-#define STT_FILE 4 /* Symbol gives a file name */
-#define STT_COMMON 5 /* An uninitialised common block */
-#define STT_TLS 6 /* Thread local data object */
-#define STT_RELC 8 /* Complex relocation expression */
-#define STT_SRELC 9 /* Signed Complex relocation expression */
-#define STT_LOOS 10 /* OS-specific semantics */
-#define STT_GNU_IFUNC 10 /* Symbol is an indirect code object */
-#define STT_HIOS 12 /* OS-specific semantics */
-#define STT_LOPROC 13 /* Processor-specific semantics */
-#define STT_HIPROC 15 /* Processor-specific semantics */
-
-/* The following constants control how a symbol may be accessed once it has
- become part of an executable or shared library. */
-
-#define STV_DEFAULT 0 /* Visibility is specified by binding type */
-#define STV_INTERNAL 1 /* OS specific version of STV_HIDDEN */
-#define STV_HIDDEN 2 /* Can only be seen inside currect component */
-#define STV_PROTECTED 3 /* Treat as STB_LOCAL inside current component */
-
-/* Relocation info handling macros. */
-
-#define ELF32_R_SYM(i) ((i) >> 8)
-#define ELF32_R_TYPE(i) ((i) & 0xff)
-#define ELF32_R_INFO(s,t) (((s) << 8) + ((t) & 0xff))
-
-#define ELF64_R_SYM(i) ((i) >> 32)
-#define ELF64_R_TYPE(i) ((i) & 0xffffffff)
-#define ELF64_R_INFO(s,t) (((bfd_vma) (s) << 31 << 1) + (bfd_vma) (t))
-
-/* Dynamic section tags. */
-
-#define DT_NULL 0
-#define DT_NEEDED 1
-#define DT_PLTRELSZ 2
-#define DT_PLTGOT 3
-#define DT_HASH 4
-#define DT_STRTAB 5
-#define DT_SYMTAB 6
-#define DT_RELA 7
-#define DT_RELASZ 8
-#define DT_RELAENT 9
-#define DT_STRSZ 10
-#define DT_SYMENT 11
-#define DT_INIT 12
-#define DT_FINI 13
-#define DT_SONAME 14
-#define DT_RPATH 15
-#define DT_SYMBOLIC 16
-#define DT_REL 17
-#define DT_RELSZ 18
-#define DT_RELENT 19
-#define DT_PLTREL 20
-#define DT_DEBUG 21
-#define DT_TEXTREL 22
-#define DT_JMPREL 23
-#define DT_BIND_NOW 24
-#define DT_INIT_ARRAY 25
-#define DT_FINI_ARRAY 26
-#define DT_INIT_ARRAYSZ 27
-#define DT_FINI_ARRAYSZ 28
-#define DT_RUNPATH 29
-#define DT_FLAGS 30
-#define DT_ENCODING 32
-#define DT_PREINIT_ARRAY 32
-#define DT_PREINIT_ARRAYSZ 33
-
-/* Note, the Oct 4, 1999 draft of the ELF ABI changed the values
- for DT_LOOS and DT_HIOS. Some implementations however, use
- values outside of the new range (see below). */
-#define OLD_DT_LOOS 0x60000000
-#define DT_LOOS 0x6000000d
-#define DT_HIOS 0x6ffff000
-#define OLD_DT_HIOS 0x6fffffff
-
-#define DT_LOPROC 0x70000000
-#define DT_HIPROC 0x7fffffff
-
-/* The next 2 dynamic tag ranges, integer value range (DT_VALRNGLO to
- DT_VALRNGHI) and virtual address range (DT_ADDRRNGLO to DT_ADDRRNGHI),
- are used on Solaris. We support them everywhere. Note these values
- lie outside of the (new) range for OS specific values. This is a
- deliberate special case and we maintain it for backwards compatability.
- */
-#define DT_VALRNGLO 0x6ffffd00
-#define DT_GNU_PRELINKED 0x6ffffdf5
-#define DT_GNU_CONFLICTSZ 0x6ffffdf6
-#define DT_GNU_LIBLISTSZ 0x6ffffdf7
-#define DT_CHECKSUM 0x6ffffdf8
-#define DT_PLTPADSZ 0x6ffffdf9
-#define DT_MOVEENT 0x6ffffdfa
-#define DT_MOVESZ 0x6ffffdfb
-#define DT_FEATURE 0x6ffffdfc
-#define DT_POSFLAG_1 0x6ffffdfd
-#define DT_SYMINSZ 0x6ffffdfe
-#define DT_SYMINENT 0x6ffffdff
-#define DT_VALRNGHI 0x6ffffdff
-
-#define DT_ADDRRNGLO 0x6ffffe00
-#define DT_GNU_HASH 0x6ffffef5
-#define DT_TLSDESC_PLT 0x6ffffef6
-#define DT_TLSDESC_GOT 0x6ffffef7
-#define DT_GNU_CONFLICT 0x6ffffef8
-#define DT_GNU_LIBLIST 0x6ffffef9
-#define DT_CONFIG 0x6ffffefa
-#define DT_DEPAUDIT 0x6ffffefb
-#define DT_AUDIT 0x6ffffefc
-#define DT_PLTPAD 0x6ffffefd
-#define DT_MOVETAB 0x6ffffefe
-#define DT_SYMINFO 0x6ffffeff
-#define DT_ADDRRNGHI 0x6ffffeff
-
-#define DT_RELACOUNT 0x6ffffff9
-#define DT_RELCOUNT 0x6ffffffa
-#define DT_FLAGS_1 0x6ffffffb
-#define DT_VERDEF 0x6ffffffc
-#define DT_VERDEFNUM 0x6ffffffd
-#define DT_VERNEED 0x6ffffffe
-#define DT_VERNEEDNUM 0x6fffffff
-
-/* This tag is a GNU extension to the Solaris version scheme. */
-#define DT_VERSYM 0x6ffffff0
-
-#define DT_LOPROC 0x70000000
-#define DT_HIPROC 0x7fffffff
-
-/* These section tags are used on Solaris. We support them
- everywhere, and hope they do not conflict. */
-
-#define DT_AUXILIARY 0x7ffffffd
-#define DT_USED 0x7ffffffe
-#define DT_FILTER 0x7fffffff
-
-
-/* Values used in DT_FEATURE .dynamic entry. */
-#define DTF_1_PARINIT 0x00000001
-/* From
-
- http://docs.sun.com:80/ab2/coll.45.13/LLM/@Ab2PageView/21165?Ab2Lang=C&Ab2Enc=iso-8859-1
-
- DTF_1_CONFEXP is the same as DTF_1_PARINIT. It is a typo. The value
- defined here is the same as the one in <sys/link.h> on Solaris 8. */
-#define DTF_1_CONFEXP 0x00000002
-
-/* Flag values used in the DT_POSFLAG_1 .dynamic entry. */
-#define DF_P1_LAZYLOAD 0x00000001
-#define DF_P1_GROUPPERM 0x00000002
-
-/* Flag value in in the DT_FLAGS_1 .dynamic entry. */
-#define DF_1_NOW 0x00000001
-#define DF_1_GLOBAL 0x00000002
-#define DF_1_GROUP 0x00000004
-#define DF_1_NODELETE 0x00000008
-#define DF_1_LOADFLTR 0x00000010
-#define DF_1_INITFIRST 0x00000020
-#define DF_1_NOOPEN 0x00000040
-#define DF_1_ORIGIN 0x00000080
-#define DF_1_DIRECT 0x00000100
-#define DF_1_TRANS 0x00000200
-#define DF_1_INTERPOSE 0x00000400
-#define DF_1_NODEFLIB 0x00000800
-#define DF_1_NODUMP 0x00001000
-#define DF_1_CONFALT 0x00002000
-#define DF_1_ENDFILTEE 0x00004000
-#define DF_1_DISPRELDNE 0x00008000
-#define DF_1_DISPRELPND 0x00010000
-#define DF_1_NODIRECT 0x00020000
-#define DF_1_IGNMULDEF 0x00040000
-#define DF_1_NOKSYMS 0x00080000
-#define DF_1_NOHDR 0x00100000
-#define DF_1_EDITED 0x00200000
-#define DF_1_NORELOC 0x00400000
-#define DF_1_SYMINTPOSE 0x00800000
-#define DF_1_GLOBAUDIT 0x01000000
-#define DF_1_SINGLETON 0x02000000
-
-/* Flag values for the DT_FLAGS entry. */
-#define DF_ORIGIN (1 << 0)
-#define DF_SYMBOLIC (1 << 1)
-#define DF_TEXTREL (1 << 2)
-#define DF_BIND_NOW (1 << 3)
-#define DF_STATIC_TLS (1 << 4)
-
-/* These constants are used for the version number of a Elf32_Verdef
- structure. */
-
-#define VER_DEF_NONE 0
-#define VER_DEF_CURRENT 1
-
-/* These constants appear in the vd_flags field of a Elf32_Verdef
- structure.
-
- Cf. the Solaris Linker and Libraries Guide, Ch. 7, Object File Format,
- Versioning Sections, for a description:
-
- http://docs.sun.com/app/docs/doc/819-0690/chapter6-93046?l=en&a=view */
-
-#define VER_FLG_BASE 0x1
-#define VER_FLG_WEAK 0x2
-#define VER_FLG_INFO 0x4
-
-/* These special constants can be found in an Elf32_Versym field. */
-
-#define VER_NDX_LOCAL 0
-#define VER_NDX_GLOBAL 1
-
-/* These constants are used for the version number of a Elf32_Verneed
- structure. */
-
-#define VER_NEED_NONE 0
-#define VER_NEED_CURRENT 1
-
-/* This flag appears in a Versym structure. It means that the symbol
- is hidden, and is only visible with an explicit version number.
- This is a GNU extension. */
-
-#define VERSYM_HIDDEN 0x8000
-
-/* This is the mask for the rest of the Versym information. */
-
-#define VERSYM_VERSION 0x7fff
-
-/* This is a special token which appears as part of a symbol name. It
- indictes that the rest of the name is actually the name of a
- version node, and is not part of the actual name. This is a GNU
- extension. For example, the symbol name `stat@ver2' is taken to
- mean the symbol `stat' in version `ver2'. */
-
-#define ELF_VER_CHR '@'
-
-/* Possible values for si_boundto. */
-
-#define SYMINFO_BT_SELF 0xffff /* Symbol bound to self */
-#define SYMINFO_BT_PARENT 0xfffe /* Symbol bound to parent */
-#define SYMINFO_BT_LOWRESERVE 0xff00 /* Beginning of reserved entries */
-
-/* Possible bitmasks for si_flags. */
-
-#define SYMINFO_FLG_DIRECT 0x0001 /* Direct bound symbol */
-#define SYMINFO_FLG_PASSTHRU 0x0002 /* Pass-thru symbol for translator */
-#define SYMINFO_FLG_COPY 0x0004 /* Symbol is a copy-reloc */
-#define SYMINFO_FLG_LAZYLOAD 0x0008 /* Symbol bound to object to be lazy loaded */
-
-/* Syminfo version values. */
-
-#define SYMINFO_NONE 0
-#define SYMINFO_CURRENT 1
-#define SYMINFO_NUM 2
-
-/* Section Group Flags. */
-
-#define GRP_COMDAT 0x1 /* A COMDAT group */
-
-/* Auxv a_type values. */
-
-#define AT_NULL 0 /* End of vector */
-#define AT_IGNORE 1 /* Entry should be ignored */
-#define AT_EXECFD 2 /* File descriptor of program */
-#define AT_PHDR 3 /* Program headers for program */
-#define AT_PHENT 4 /* Size of program header entry */
-#define AT_PHNUM 5 /* Number of program headers */
-#define AT_PAGESZ 6 /* System page size */
-#define AT_BASE 7 /* Base address of interpreter */
-#define AT_FLAGS 8 /* Flags */
-#define AT_ENTRY 9 /* Entry point of program */
-#define AT_NOTELF 10 /* Program is not ELF */
-#define AT_UID 11 /* Real uid */
-#define AT_EUID 12 /* Effective uid */
-#define AT_GID 13 /* Real gid */
-#define AT_EGID 14 /* Effective gid */
-#define AT_CLKTCK 17 /* Frequency of times() */
-#define AT_PLATFORM 15 /* String identifying platform. */
-#define AT_HWCAP 16 /* Machine dependent hints about
- processor capabilities. */
-#define AT_FPUCW 18 /* Used FPU control word. */
-#define AT_DCACHEBSIZE 19 /* Data cache block size. */
-#define AT_ICACHEBSIZE 20 /* Instruction cache block size. */
-#define AT_UCACHEBSIZE 21 /* Unified cache block size. */
-#define AT_IGNOREPPC 22 /* Entry should be ignored */
-#define AT_SECURE 23 /* Boolean, was exec setuid-like? */
-#define AT_BASE_PLATFORM 24 /* String identifying real platform,
- may differ from AT_PLATFORM. */
-#define AT_RANDOM 25 /* Address of 16 random bytes. */
-#define AT_EXECFN 31 /* Filename of executable. */
-/* Pointer to the global system page used for system calls and other
- nice things. */
-#define AT_SYSINFO 32
-#define AT_SYSINFO_EHDR 33 /* Pointer to ELF header of system-supplied DSO. */
-
-/* More complete cache descriptions than AT_[DIU]CACHEBSIZE. If the
- value is -1, then the cache doesn't exist. Otherwise:
-
- bit 0-3: Cache set-associativity; 0 means fully associative.
- bit 4-7: Log2 of cacheline size.
- bit 8-31: Size of the entire cache >> 8. */
-
-#define AT_L1I_CACHESHAPE 34
-#define AT_L1D_CACHESHAPE 35
-#define AT_L2_CACHESHAPE 36
-#define AT_L3_CACHESHAPE 37
-
-#define AT_SUN_UID 2000 /* Effective user ID. */
-#define AT_SUN_RUID 2001 /* Real user ID. */
-#define AT_SUN_GID 2002 /* Effective group ID. */
-#define AT_SUN_RGID 2003 /* Real group ID. */
-#define AT_SUN_LDELF 2004 /* Dynamic linker's ELF header. */
-#define AT_SUN_LDSHDR 2005 /* Dynamic linker's section headers. */
-#define AT_SUN_LDNAME 2006 /* String giving name of dynamic linker. */
-#define AT_SUN_LPAGESZ 2007 /* Large pagesize. */
-#define AT_SUN_PLATFORM 2008 /* Platform name string. */
-#define AT_SUN_HWCAP 2009 /* Machine dependent hints about
- processor capabilities. */
-#define AT_SUN_IFLUSH 2010 /* Should flush icache? */
-#define AT_SUN_CPU 2011 /* CPU name string. */
-#define AT_SUN_EMUL_ENTRY 2012 /* COFF entry point address. */
-#define AT_SUN_EMUL_EXECFD 2013 /* COFF executable file descriptor. */
-#define AT_SUN_EXECNAME 2014 /* Canonicalized file name given to execve. */
-#define AT_SUN_MMU 2015 /* String for name of MMU module. */
-#define AT_SUN_LDDATA 2016 /* Dynamic linker's data segment address. */
-#define AT_SUN_AUXFLAGS 2017 /* AF_SUN_ flags passed from the kernel. */
-
-
-#endif /* _ELF_COMMON_H */
diff --git a/include/elf/cr16.h b/include/elf/cr16.h
deleted file mode 100644
index 327847486..000000000
--- a/include/elf/cr16.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/* CR16 ELF support for BFD.
- Copyright 2007, 2010 Free Software Foundation, Inc.
- Contributed by M R Swami Reddy.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _ELF_CR16_H
-#define _ELF_CR16_H
-
-#include "elf/reloc-macros.h"
-
-/* Creating indices for reloc_map_index array. */
-START_RELOC_NUMBERS(elf_cr16_reloc_type)
- RELOC_NUMBER (R_CR16_NONE, 0)
- RELOC_NUMBER (R_CR16_NUM8, 1)
- RELOC_NUMBER (R_CR16_NUM16, 2)
- RELOC_NUMBER (R_CR16_NUM32, 3)
- RELOC_NUMBER (R_CR16_NUM32a, 4)
- RELOC_NUMBER (R_CR16_REGREL4, 5)
- RELOC_NUMBER (R_CR16_REGREL4a, 6)
- RELOC_NUMBER (R_CR16_REGREL14, 7)
- RELOC_NUMBER (R_CR16_REGREL14a, 8)
- RELOC_NUMBER (R_CR16_REGREL16, 9)
- RELOC_NUMBER (R_CR16_REGREL20, 10)
- RELOC_NUMBER (R_CR16_REGREL20a, 11)
- RELOC_NUMBER (R_CR16_ABS20, 12)
- RELOC_NUMBER (R_CR16_ABS24, 13)
- RELOC_NUMBER (R_CR16_IMM4, 14)
- RELOC_NUMBER (R_CR16_IMM8, 15)
- RELOC_NUMBER (R_CR16_IMM16, 16)
- RELOC_NUMBER (R_CR16_IMM20, 17)
- RELOC_NUMBER (R_CR16_IMM24, 18)
- RELOC_NUMBER (R_CR16_IMM32, 19)
- RELOC_NUMBER (R_CR16_IMM32a, 20)
- RELOC_NUMBER (R_CR16_DISP4, 21)
- RELOC_NUMBER (R_CR16_DISP8, 22)
- RELOC_NUMBER (R_CR16_DISP16, 23)
- RELOC_NUMBER (R_CR16_DISP24, 24)
- RELOC_NUMBER (R_CR16_DISP24a, 25)
- RELOC_NUMBER (R_CR16_SWITCH8, 26)
- RELOC_NUMBER (R_CR16_SWITCH16, 27)
- RELOC_NUMBER (R_CR16_SWITCH32, 28)
- RELOC_NUMBER (R_CR16_GOT_REGREL20, 29)
- RELOC_NUMBER (R_CR16_GOTC_REGREL20, 30)
- RELOC_NUMBER (R_CR16_GLOB_DAT, 31)
-END_RELOC_NUMBERS(R_CR16_MAX)
-
-#endif /* _ELF_CR16_H */
diff --git a/include/elf/cr16c.h b/include/elf/cr16c.h
deleted file mode 100644
index dbefb0ab6..000000000
--- a/include/elf/cr16c.h
+++ /dev/null
@@ -1,258 +0,0 @@
-/* CR16C ELF support for BFD.
- Copyright 2004, 2008, 2010 Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _ELF_CR16C_H
-#define _ELF_CR16C_H
-
-#include "bfd.h"
-#include "elf/reloc-macros.h"
-
-/* Creating indices for reloc_map_index array. */
-START_RELOC_NUMBERS (elf_cr16c_reloc_type)
- RELOC_NUMBER (RINDEX_16C_NUM08, 0)
- RELOC_NUMBER (RINDEX_16C_NUM08_C, 1)
- RELOC_NUMBER (RINDEX_16C_NUM16, 2)
- RELOC_NUMBER (RINDEX_16C_NUM16_C, 3)
- RELOC_NUMBER (RINDEX_16C_NUM32, 4)
- RELOC_NUMBER (RINDEX_16C_NUM32_C, 5)
- RELOC_NUMBER (RINDEX_16C_DISP04, 6)
- RELOC_NUMBER (RINDEX_16C_DISP04_C, 7)
- RELOC_NUMBER (RINDEX_16C_DISP08, 8)
- RELOC_NUMBER (RINDEX_16C_DISP08_C, 9)
- RELOC_NUMBER (RINDEX_16C_DISP16, 10)
- RELOC_NUMBER (RINDEX_16C_DISP16_C, 11)
- RELOC_NUMBER (RINDEX_16C_DISP24, 12)
- RELOC_NUMBER (RINDEX_16C_DISP24_C, 13)
- RELOC_NUMBER (RINDEX_16C_DISP24a, 14)
- RELOC_NUMBER (RINDEX_16C_DISP24a_C, 15)
- RELOC_NUMBER (RINDEX_16C_REG04, 16)
- RELOC_NUMBER (RINDEX_16C_REG04_C, 17)
- RELOC_NUMBER (RINDEX_16C_REG04a, 18)
- RELOC_NUMBER (RINDEX_16C_REG04a_C, 19)
- RELOC_NUMBER (RINDEX_16C_REG14, 20)
- RELOC_NUMBER (RINDEX_16C_REG14_C, 21)
- RELOC_NUMBER (RINDEX_16C_REG16, 22)
- RELOC_NUMBER (RINDEX_16C_REG16_C, 23)
- RELOC_NUMBER (RINDEX_16C_REG20, 24)
- RELOC_NUMBER (RINDEX_16C_REG20_C, 25)
- RELOC_NUMBER (RINDEX_16C_ABS20, 26)
- RELOC_NUMBER (RINDEX_16C_ABS20_C, 27)
- RELOC_NUMBER (RINDEX_16C_ABS24, 28)
- RELOC_NUMBER (RINDEX_16C_ABS24_C, 29)
- RELOC_NUMBER (RINDEX_16C_IMM04, 30)
- RELOC_NUMBER (RINDEX_16C_IMM04_C, 31)
- RELOC_NUMBER (RINDEX_16C_IMM16, 32)
- RELOC_NUMBER (RINDEX_16C_IMM16_C, 33)
- RELOC_NUMBER (RINDEX_16C_IMM20, 34)
- RELOC_NUMBER (RINDEX_16C_IMM20_C, 35)
- RELOC_NUMBER (RINDEX_16C_IMM24, 36)
- RELOC_NUMBER (RINDEX_16C_IMM24_C, 37)
- RELOC_NUMBER (RINDEX_16C_IMM32, 38)
- RELOC_NUMBER (RINDEX_16C_IMM32_C, 39)
-END_RELOC_NUMBERS (RINDEX_16C_MAX)
-
-/* CR16C Relocation Types ('cr_reloc_type' entry in the reloc_map structure).
- The relocation constant name is determined as follows :
-
- R_16C_<format><size>[_C]
-
- Where :
-
- <format> is one of the following:
- NUM - R_NUMBER mnemonic,
- DISP - R_16C_DISPL mnemonic,
- REG - R_16C_REGREL mnemonic,
- ABS - R_16C_ABS mnemonic,
- IMM - R_16C_IMMED mnemonic,
- <size> stands for R_S_16C_<size>
- _C means 'code label' and is only added when R_ADDRTYPE subfield
- is of type R_CODE_ADDR. */
-
-/* The table below shows what the hex digits in the definition of the
- relocation type constants correspond to.
- ------------------------------------------------------------------
- R_SIZESP R_FORMAT R_RELTO R_ADDRTYPE
- ------------------------------------------------------------------ */
-/* R_S_16C_08 R_NUMBER R_ABS R_ADDRESS */
-#define R_16C_NUM08 0X0001
-
-/* R_S_16C_08 R_NUMBER R_ABS R_CODE_ADDR */
-#define R_16C_NUM08_C 0X0006
-
-/* R_S_16C_16 R_NUMBER R_ABS R_ADDRESS */
-#define R_16C_NUM16 0X1001
-
-/* R_S_16C_16 R_NUMBER R_ABS R_CODE_ADDR */
-#define R_16C_NUM16_C 0X1006
-
-/* R_S_16C_32 R_NUMBER R_ABS R_ADDRESS */
-#define R_16C_NUM32 0X2001
-
-/* R_S_16C_32 R_NUMBER R_ABS R_CODE_ADDR */
-#define R_16C_NUM32_C 0X2006
-
-/* R_S_16C_04 R_16C_DISPL R_PCREL R_ADDRESS */
-#define R_16C_DISP04 0X5411
-
-/* R_S_16C_04 R_16C_DISPL R_PCREL R_CODE_ADDR */
-#define R_16C_DISP04_C 0X5416
-
-/* R_S_16C_08 R_16C_DISPL R_PCREL R_ADDRESS */
-#define R_16C_DISP08 0X0411
-
-/* R_S_16C_08 R_16C_DISPL R_PCREL R_CODE_ADDR */
-#define R_16C_DISP08_C 0X0416
-
-/* R_S_16C_16 R_16C_DISPL R_PCREL R_ADDRESS */
-#define R_16C_DISP16 0X1411
-
-/* R_S_16C_16 R_16C_DISPL R_PCREL R_CODE_ADDR */
-#define R_16C_DISP16_C 0X1416
-
-/* R_S_16C_24 R_16C_DISPL R_PCREL R_ADDRESS */
-#define R_16C_DISP24 0X7411
-
-/* R_S_16C_24 R_16C_DISPL R_PCREL R_CODE_ADDR */
-#define R_16C_DISP24_C 0X7416
-
-/* R_S_16C_24a R_16C_DISPL R_PCREL R_ADDRESS */
-#define R_16C_DISP24a 0X6411
-
-/* R_S_16C_24a R_16C_DISPL R_PCREL R_CODE_ADDR */
-#define R_16C_DISP24a_C 0X6416
-
-/* R_S_16C_04 R_16C_REGREL R_ABS R_ADDRESS */
-#define R_16C_REG04 0X5201
-
-/* R_S_16C_04 R_16C_REGREL R_ABS R_CODE_ADDR */
-#define R_16C_REG04_C 0X5206
-
-/* R_S_16C_04_a R_16C_REGREL R_ABS R_ADDRESS */
-#define R_16C_REG04a 0X4201
-
-/* R_S_16C_04_a R_16C_REGREL R_ABS R_CODE_ADDR */
-#define R_16C_REG04a_C 0X4206
-
-/* R_S_16C_14 R_16C_REGREL R_ABS R_ADDRESS */
-#define R_16C_REG14 0X3201
-
-/* R_S_16C_14 R_16C_REGREL R_ABS R_CODE_ADDR */
-#define R_16C_REG14_C 0X3206
-
-/* R_S_16C_16 R_16C_REGREL R_ABS R_ADDRESS */
-#define R_16C_REG16 0X1201
-
-/* R_S_16C_16 R_16C_REGREL R_ABS R_CODE_ADDR */
-#define R_16C_REG16_C 0X1206
-
-/* R_S_16C_20 R_16C_REGREL R_ABS R_ADDRESS */
-#define R_16C_REG20 0X8201
-
-/* R_S_16C_20 R_16C_REGREL R_ABS R_CODE_ADDR */
-#define R_16C_REG20_C 0X8206
-
-/* R_S_16C_20 R_16C_ABS R_ABS R_ADDRESS */
-#define R_16C_ABS20 0X8101
-
-/* R_S_16C_20 R_16C_ABS R_ABS R_CODE_ADDR */
-#define R_16C_ABS20_C 0X8106
-
-/* R_S_16C_24 R_16C_ABS R_ABS R_ADDRESS */
-#define R_16C_ABS24 0X7101
-
-/* R_S_16C_24 R_16C_ABS R_ABS R_CODE_ADDR */
-#define R_16C_ABS24_C 0X7106
-
-/* R_S_16C_04 R_16C_IMMED R_ABS R_ADDRESS */
-#define R_16C_IMM04 0X5301
-
-/* R_S_16C_04 R_16C_IMMED R_ABS R_CODE_ADDR */
-#define R_16C_IMM04_C 0X5306
-
-/* R_S_16C_16 R_16C_IMMED R_ABS R_ADDRESS */
-#define R_16C_IMM16 0X1301
-
-/* R_S_16C_16 R_16C_IMMED R_ABS R_CODE_ADDR */
-#define R_16C_IMM16_C 0X1306
-
-/* R_S_16C_20 R_16C_IMMED R_ABS R_ADDRESS */
-#define R_16C_IMM20 0X8301
-
-/* R_S_16C_20 R_16C_IMMED R_ABS R_CODE_ADDR */
-#define R_16C_IMM20_C 0X8306
-
-/* R_S_16C_24 R_16C_IMMED R_ABS R_ADDRESS */
-#define R_16C_IMM24 0X7301
-
-/* R_S_16C_24 R_16C_IMMED R_ABS R_CODE_ADDR */
-#define R_16C_IMM24_C 0X7306
-
-/* R_S_16C_32 R_16C_IMMED R_ABS R_ADDRESS */
-#define R_16C_IMM32 0X2301
-
-/* R_S_16C_32 R_16C_IMMED R_ABS R_CODE_ADDR */
-#define R_16C_IMM32_C 0X2306
-
-
-/* Relocation item type. */
-#define R_ADDRTYPE 0x000f
-#define R_ADDRESS 0x0001 /* Take address of symbol. */
-#define R_CODE_ADDR 0x0006 /* Take address of symbol divided by 2. */
-
-/* Relocation action. */
-#define R_RELTO 0x00f0
-#define R_ABS 0x0000 /* Keep symbol's address as such. */
-#define R_PCREL 0x0010 /* Subtract the pc address of hole. */
-
-/* Relocation item data format. */
-#define R_FORMAT 0x0f00
-#define R_NUMBER 0x0000 /* Retain as two's complement value. */
-#define R_16C_DISPL 0x0400 /* CR16C displacement type. */
-#define R_16C_ABS 0x0100 /* CR16C absolute type. */
-#define R_16C_REGREL 0x0200 /* CR16C register-relative type. */
-#define R_16C_IMMED 0x0300 /* CR16C immediate type. */
-
-/* Relocation item size. */
-#define R_SIZESP 0xf000
-#define R_S_16C_04 0x5000
-#define R_S_16C_04_a 0x4000
-#define R_S_16C_08 0x0000
-#define R_S_16C_14 0x3000
-#define R_S_16C_16 0x1000
-#define R_S_16C_20 0x8000
-#define R_S_16C_24_a 0x6000
-#define R_S_16C_24 0x7000
-#define R_S_16C_32 0x2000
-
-
-/* Processor specific section indices. These sections do not actually
- exist. Symbols with a st_shndx field corresponding to one of these
- values have a special meaning. */
-
-/* Far common symbol. */
-#define SHN_CR16C_FCOMMON SHN_LORESERVE
-#define SHN_CR16C_NCOMMON (SHN_LORESERVE + 1)
-
-typedef struct reloc_map
-{
- unsigned short cr_reloc_type; /* CR relocation type. */
- bfd_reloc_code_real_type bfd_reloc_enum; /* BFD relocation enum. */
-} RELOC_MAP;
-
-#endif /* _ELF_CR16C_H */
diff --git a/include/elf/cris.h b/include/elf/cris.h
deleted file mode 100644
index 5889a90d0..000000000
--- a/include/elf/cris.h
+++ /dev/null
@@ -1,193 +0,0 @@
-/* CRIS ELF support for BFD.
- Copyright 2000, 2001, 2004, 2010 Free Software Foundation, Inc.
- Contributed by Axis Communications AB, Lund, Sweden.
- Written by Hans-Peter Nilsson.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _ELF_CRIS_H
-#define _ELF_CRIS_H
-
-#include "elf/reloc-macros.h"
-
-/* Relocations. */
-START_RELOC_NUMBERS (elf_cris_reloc_type)
- RELOC_NUMBER (R_CRIS_NONE, 0)
- RELOC_NUMBER (R_CRIS_8, 1)
- RELOC_NUMBER (R_CRIS_16, 2)
- RELOC_NUMBER (R_CRIS_32, 3)
-
- /* The "PC" position is the location right after the relocation. */
- RELOC_NUMBER (R_CRIS_8_PCREL, 4)
- RELOC_NUMBER (R_CRIS_16_PCREL, 5)
- RELOC_NUMBER (R_CRIS_32_PCREL, 6)
-
- RELOC_NUMBER (R_CRIS_GNU_VTINHERIT, 7)
- RELOC_NUMBER (R_CRIS_GNU_VTENTRY, 8)
-
- /* Copy contents at dynlinking. Generated by the linker.
- The BFD equivalent is BFD_RELOC_CRIS_COPY. */
- RELOC_NUMBER (R_CRIS_COPY, 9)
-
- /* Create GOT entry. Generated by the linker.
- The BFD equivalent is BFD_RELOC_CRIS_GLOB_DAT. */
- RELOC_NUMBER (R_CRIS_GLOB_DAT, 10)
-
- /* Create PLT entry. Generated by the linker.
- The BFD equivalent is BFD_RELOC_CRIS_JUMP_SLOT. */
- RELOC_NUMBER (R_CRIS_JUMP_SLOT, 11)
-
- /* Adjust by program base. Generated by the linker.
- The BFD equivalent is BFD_RELOC_CRIS_RELATIVE. */
- RELOC_NUMBER (R_CRIS_RELATIVE, 12)
-
- /* A 16-bit offset to entry in GOT and request to create GOT entry for
- that symbol.
- The BFD equivalent is BFD_RELOC_CRIS_16_GOT. */
- RELOC_NUMBER (R_CRIS_16_GOT, 13)
-
- /* A 32-bit offset to entry in GOT and request to create GOT entry for
- that symbol.
- The BFD equivalent is BFD_RELOC_CRIS_32_GOT. */
- RELOC_NUMBER (R_CRIS_32_GOT, 14)
-
- /* A 16-bit offset to entry in PLT part of GOT and request to create PLT
- entry for that symbol.
- The BFD equivalent is BFD_RELOC_CRIS_16_GOTPLT. */
- RELOC_NUMBER (R_CRIS_16_GOTPLT, 15)
-
- /* A 32-bit offset to entry in PLT part of GOT and request to create PLT
- entry for that symbol.
- The BFD equivalent is BFD_RELOC_CRIS_32_GOTPLT. */
- RELOC_NUMBER (R_CRIS_32_GOTPLT, 16)
-
- /* A 32-bit offset from GOT to (local) symbol: no GOT entry should be
- necessary.
- The BFD equivalent is BFD_RELOC_CRIS_32_GOTREL. */
- RELOC_NUMBER (R_CRIS_32_GOTREL, 17)
-
- /* A 32-bit offset from GOT to entry for this symbol in PLT and request
- to create PLT entry for symbol.
- The BFD equivalent is BFD_RELOC_CRIS_32_GOTREL. */
- RELOC_NUMBER (R_CRIS_32_PLT_GOTREL, 18)
-
- /* A 32-bit offset from location after this relocation (addend specifies
- offset) to entry for this symbol in PLT and request to create PLT
- entry for symbol.
- The BFD equivalent is BFD_RELOC_CRIS_32_PLT_PCREL. */
- RELOC_NUMBER (R_CRIS_32_PLT_PCREL, 19)
-
- /* An assembler-generated-only relocation, instructing the linker to
- reserve two GOT slots, carrying the R_CRIS_DTP relocation for the
- symbol (pointing to the first slot, the relocation fills in
- both). The value is a 32-bit-value, relative to the start of the
- GOT. Assembly syntax: "sym:GDGOTREL". */
- RELOC_NUMBER (R_CRIS_32_GOT_GD, 20)
-
- /* Similar to R_CRIS_32_GOT_GD, but the value is a 16-bit unsigned
- number, limiting access to 65536/4 global symbols per module (or
- 65536/8 thread variables; loosely speaking G*4+T*8 < 65536, where
- T is the number of thread variables and G is the number of other
- external global variables and functions). Assembly syntax:
- "sym:GDGOTREL16". */
- RELOC_NUMBER (R_CRIS_16_GOT_GD, 21)
-
- /* Similar to R_CRIS_32_GOT_GD, but the value is the absolute
- address of the GOT entry. Disallowed in DSOs created with
- -shared. Assembly syntax: "sym:GD". */
- RELOC_NUMBER (R_CRIS_32_GD, 22)
-
- /* A linker-generated-only relocation, instructing the dynamic
- linker to fill in the module ID and module-relative-TLS-block
- offset of the symbol in question, used for GOT entries. Note
- that this relocation instructs to fill in two 32-bit values. */
- RELOC_NUMBER (R_CRIS_DTP, 23)
-
- /* An assembler-generated-only relocation, instructing the linker to
- reserve the first two GOT slots, and attach the R_CRIS_DTPMOD
- relocation(*) for the module to the first slot, the second
- containing zero. The value is 32 bits, the offset from the start
- of the TLS block of the module to the thread-local symbol
- mentioned in the relocation. This relocation must only be applied
- to module-local symbols. Assembly syntax: "expr:DTPREL". */
- RELOC_NUMBER (R_CRIS_32_DTPREL, 24)
-
- /* Similar to R_CRIS_32_DTPREL, but the value is a 16-bit signed
- number, limiting the size of thread-variables of the DSO to 32768
- bytes. (Note: matches both model 1 and 2 and allows use of addo.w
- as the instruction where this relocation is used.) Assembly
- syntax: "expr:DTPREL16". */
- RELOC_NUMBER (R_CRIS_16_DTPREL, 25)
-
- /* An assembler-generated-only relocation, instructing the linker to
- reserve a GOT slot and attach the R_CRIS_32_TPREL relocation for
- the symbol in question. The value is 32 bits, which is the
- GOT-relative offset of the slot. Assembly syntax:
- "sym:TPOFFGOT". */
- RELOC_NUMBER (R_CRIS_32_GOT_TPREL, 26)
-
- /* Similar to R_CRIS_32_TPREL, but the value is a 16-bit positive
- number, limiting the number of thread- and global variables of
- the DSO to 32768/4. Assembly syntax: "sym:TPOFFGOT16". */
- RELOC_NUMBER (R_CRIS_16_GOT_TPREL, 27)
-
- /* An assembler- and linker-generated relocation, instructing to
- resolve the symbol in question yielding the TLS offset of the
- thread variable, relative to the global TLS block. Not allowed
- as input when generating a DSO. Assembly syntax:
- "expr:TPOFF". */
- RELOC_NUMBER (R_CRIS_32_TPREL, 28)
-
- /* Similar to R_CRIS_32_TPREL, but only applicable to executables
- compiled with -msmall-tls. Not allowed in a DSO. The value is a
- 16-bit signed number, limiting the size of thread-variables of
- the executable to 32768 bytes. (Note: being signed makes it match
- both model 1 and 2 and allows use of addo.w as the instruction
- where this relocation is applied.) Assembly syntax:
- "expr:TPOFF16". */
- RELOC_NUMBER (R_CRIS_16_TPREL, 29)
-
- /* A linker-generated-only relocation, instructing the dynamic
- linker to fill in the current module ID, used for GOT entries
- (usually the fourth one). */
- RELOC_NUMBER (R_CRIS_DTPMOD, 30)
-
- /* Similar to R_CRIS_32_GOT_TPREL, but the value is the absolute
- address of the GOT entry. Disallowed in DSOs created with
- -shared. Assembly syntax: "sym:IE". */
- RELOC_NUMBER (R_CRIS_32_IE, 31)
-
- /* No other relocs must be visible outside the assembler. */
-
-END_RELOC_NUMBERS (R_CRIS_max)
-
-/* User symbols in this file have a leading underscore. */
-#define EF_CRIS_UNDERSCORE 0x00000001
-
-/* This is a mask for different incompatible machine variants. */
-#define EF_CRIS_VARIANT_MASK 0x0000000e
-
-/* Variant 0; may contain v0..10 object. */
-#define EF_CRIS_VARIANT_ANY_V0_V10 0x00000000
-
-/* Variant 1; contains v32 object. */
-#define EF_CRIS_VARIANT_V32 0x00000002
-
-/* Variant 2; contains object compatible with v32 and v10. */
-#define EF_CRIS_VARIANT_COMMON_V10_V32 0x00000004
-
-#endif /* _ELF_CRIS_H */
diff --git a/include/elf/crx.h b/include/elf/crx.h
deleted file mode 100644
index 38428f297..000000000
--- a/include/elf/crx.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/* CRX ELF support for BFD.
- Copyright 2004, 2010 Free Software Foundation, Inc.
- Contributed by Tomer Levi, NSC, Israel.
- Originally written for GAS 2.12 by Tomer Levi, NSC, Israel.
- Updates, BFDizing, GNUifying and ELF support by Tomer Levi.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _ELF_CRX_H
-#define _ELF_CRX_H
-
-#include "elf/reloc-macros.h"
-
-/* Creating indices for reloc_map_index array. */
-START_RELOC_NUMBERS(elf_crx_reloc_type)
- RELOC_NUMBER (R_CRX_NONE, 0)
- RELOC_NUMBER (R_CRX_REL4, 1)
- RELOC_NUMBER (R_CRX_REL8, 2)
- RELOC_NUMBER (R_CRX_REL8_CMP, 3)
- RELOC_NUMBER (R_CRX_REL16, 4)
- RELOC_NUMBER (R_CRX_REL24, 5)
- RELOC_NUMBER (R_CRX_REL32, 6)
- RELOC_NUMBER (R_CRX_REGREL12, 7)
- RELOC_NUMBER (R_CRX_REGREL22, 8)
- RELOC_NUMBER (R_CRX_REGREL28, 9)
- RELOC_NUMBER (R_CRX_REGREL32, 10)
- RELOC_NUMBER (R_CRX_ABS16, 11)
- RELOC_NUMBER (R_CRX_ABS32, 12)
- RELOC_NUMBER (R_CRX_NUM8, 13)
- RELOC_NUMBER (R_CRX_NUM16, 14)
- RELOC_NUMBER (R_CRX_NUM32, 15)
- RELOC_NUMBER (R_CRX_IMM16, 16)
- RELOC_NUMBER (R_CRX_IMM32, 17)
- RELOC_NUMBER (R_CRX_SWITCH8, 18)
- RELOC_NUMBER (R_CRX_SWITCH16, 19)
- RELOC_NUMBER (R_CRX_SWITCH32, 20)
-END_RELOC_NUMBERS(R_CRX_MAX)
-
-#endif /* _ELF_CRX_H */
diff --git a/include/elf/d10v.h b/include/elf/d10v.h
deleted file mode 100644
index 5850b3740..000000000
--- a/include/elf/d10v.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/* d10v ELF support for BFD.
- Copyright 1998, 2000, 2010 Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _ELF_D10V_H
-#define _ELF_D10V_H
-
-#include "elf/reloc-macros.h"
-
-/* Relocation types. */
-START_RELOC_NUMBERS (elf_d10v_reloc_type)
- RELOC_NUMBER (R_D10V_NONE, 0)
- RELOC_NUMBER (R_D10V_10_PCREL_R, 1)
- RELOC_NUMBER (R_D10V_10_PCREL_L, 2)
- RELOC_NUMBER (R_D10V_16, 3)
- RELOC_NUMBER (R_D10V_18, 4)
- RELOC_NUMBER (R_D10V_18_PCREL, 5)
- RELOC_NUMBER (R_D10V_32, 6)
- RELOC_NUMBER (R_D10V_GNU_VTINHERIT, 7)
- RELOC_NUMBER (R_D10V_GNU_VTENTRY, 8)
-END_RELOC_NUMBERS (R_D10V_max)
-
-#endif
diff --git a/include/elf/d30v.h b/include/elf/d30v.h
deleted file mode 100644
index 8174a40e0..000000000
--- a/include/elf/d30v.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/* d30v ELF support for BFD.
- Copyright 1998, 2000, 2010 Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _ELF_D30V_H
-#define _ELF_D30V_H
-
-#include "elf/reloc-macros.h"
-
-/* Relocations. */
-START_RELOC_NUMBERS (elf_d30v_reloc_type)
- RELOC_NUMBER (R_D30V_NONE, 0)
- RELOC_NUMBER (R_D30V_6, 1)
- RELOC_NUMBER (R_D30V_9_PCREL, 2)
- RELOC_NUMBER (R_D30V_9_PCREL_R, 3)
- RELOC_NUMBER (R_D30V_15, 4)
- RELOC_NUMBER (R_D30V_15_PCREL, 5)
- RELOC_NUMBER (R_D30V_15_PCREL_R, 6)
- RELOC_NUMBER (R_D30V_21, 7)
- RELOC_NUMBER (R_D30V_21_PCREL, 8)
- RELOC_NUMBER (R_D30V_21_PCREL_R, 9)
- RELOC_NUMBER (R_D30V_32, 10)
- RELOC_NUMBER (R_D30V_32_PCREL, 11)
- RELOC_NUMBER (R_D30V_32_NORMAL, 12)
-END_RELOC_NUMBERS (R_D30V_max)
-
-#endif
diff --git a/include/elf/dlx.h b/include/elf/dlx.h
deleted file mode 100644
index 7d61633c2..000000000
--- a/include/elf/dlx.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/* DLX support for BFD.
- Copyright 2002, 2010 Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _ELF_DLX_H
-#define _ELF_DLX_H
-
-#include "elf/reloc-macros.h"
-
-#if 0
-START_RELOC_NUMBERS (elf_dlx_reloc_type)
- RELOC_NUMBER (R_DLX_NONE, 0)
- RELOC_NUMBER (R_DLX_RELOC_16, 1)
- RELOC_NUMBER (R_DLX_RELOC_26, 2)
- RELOC_NUMBER (R_DLX_RELOC_32, 3)
- RELOC_NUMBER (R_DLX_GNU_VTINHERIT, 4)
- RELOC_NUMBER (R_DLX_GNU_VTENTRY, 5)
- RELOC_NUMBER (R_DLX_RELOC_16_HI, 6)
- RELOC_NUMBER (R_DLX_RELOC_16_LO, 7)
- RELOC_NUMBER (R_DLX_RELOC_16_PCREL, 8)
- RELOC_NUMBER (R_DLX_RELOC_26_PCREL, 9)
-END_RELOC_NUMBERS (R_DLX_max)
-#else
-START_RELOC_NUMBERS (elf_dlx_reloc_type)
- RELOC_NUMBER (R_DLX_NONE, 0)
- RELOC_NUMBER (R_DLX_RELOC_8, 1)
- RELOC_NUMBER (R_DLX_RELOC_16, 2)
- RELOC_NUMBER (R_DLX_RELOC_32, 3)
- RELOC_NUMBER (R_DLX_GNU_VTINHERIT, 4)
- RELOC_NUMBER (R_DLX_GNU_VTENTRY, 5)
- RELOC_NUMBER (R_DLX_RELOC_16_HI, 6)
- RELOC_NUMBER (R_DLX_RELOC_16_LO, 7)
- RELOC_NUMBER (R_DLX_RELOC_16_PCREL, 8)
- RELOC_NUMBER (R_DLX_RELOC_26_PCREL, 9)
-END_RELOC_NUMBERS (R_DLX_max)
-#endif /* 0 */
-
-#endif /* _ELF_DLX_H */
diff --git a/include/elf/dwarf.h b/include/elf/dwarf.h
deleted file mode 100644
index c2e6a67e8..000000000
--- a/include/elf/dwarf.h
+++ /dev/null
@@ -1,323 +0,0 @@
-/* Declarations and definitions of codes relating to the DWARF symbolic
- debugging information format.
-
- Written by Ron Guilmette (rfg@netcom.com)
-
- Copyright 1992, 1993, 1995, 1999, 2005, 2010 Free Software Foundation, Inc.
-
- This file is part of both GCC and the BFD library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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 GCC; see the file COPYING3. If not, write to the Free
- Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
- 02110-1301, USA. */
-
-/* This file is derived from the DWARF specification (a public document)
- Revision 1.0.1 (April 8, 1992) developed by the UNIX International
- Programming Languages Special Interest Group (UI/PLSIG) and distributed
- by UNIX International. Copies of this specification are available from
- UNIX International, 20 Waterview Boulevard, Parsippany, NJ, 07054. */
-
-#ifndef _ELF_DWARF_H
-#define _ELF_DWARF_H
-
-/* Tag names and codes. */
-
-enum dwarf_tag {
- TAG_padding = 0x0000,
- TAG_array_type = 0x0001,
- TAG_class_type = 0x0002,
- TAG_entry_point = 0x0003,
- TAG_enumeration_type = 0x0004,
- TAG_formal_parameter = 0x0005,
- TAG_global_subroutine = 0x0006,
- TAG_global_variable = 0x0007,
- /* 0x0008 -- reserved */
- /* 0x0009 -- reserved */
- TAG_label = 0x000a,
- TAG_lexical_block = 0x000b,
- TAG_local_variable = 0x000c,
- TAG_member = 0x000d,
- /* 0x000e -- reserved */
- TAG_pointer_type = 0x000f,
- TAG_reference_type = 0x0010,
- TAG_compile_unit = 0x0011,
- TAG_string_type = 0x0012,
- TAG_structure_type = 0x0013,
- TAG_subroutine = 0x0014,
- TAG_subroutine_type = 0x0015,
- TAG_typedef = 0x0016,
- TAG_union_type = 0x0017,
- TAG_unspecified_parameters = 0x0018,
- TAG_variant = 0x0019,
- TAG_common_block = 0x001a,
- TAG_common_inclusion = 0x001b,
- TAG_inheritance = 0x001c,
- TAG_inlined_subroutine = 0x001d,
- TAG_module = 0x001e,
- TAG_ptr_to_member_type = 0x001f,
- TAG_set_type = 0x0020,
- TAG_subrange_type = 0x0021,
- TAG_with_stmt = 0x0022,
-
- /* GNU extensions */
-
- TAG_format_label = 0x8000, /* for FORTRAN 77 and Fortran 90 */
- TAG_namelist = 0x8001, /* For Fortran 90 */
- TAG_function_template = 0x8002, /* for C++ */
- TAG_class_template = 0x8003 /* for C++ */
-};
-
-#define TAG_lo_user 0x8000 /* implementation-defined range start */
-#define TAG_hi_user 0xffff /* implementation-defined range end */
-#define TAG_source_file TAG_compile_unit /* for backward compatibility */
-
-/* Form names and codes. */
-
-enum dwarf_form {
- FORM_ADDR = 0x1,
- FORM_REF = 0x2,
- FORM_BLOCK2 = 0x3,
- FORM_BLOCK4 = 0x4,
- FORM_DATA2 = 0x5,
- FORM_DATA4 = 0x6,
- FORM_DATA8 = 0x7,
- FORM_STRING = 0x8
-};
-
-/* Attribute names and codes. */
-
-enum dwarf_attribute {
- AT_sibling = (0x0010|FORM_REF),
- AT_location = (0x0020|FORM_BLOCK2),
- AT_name = (0x0030|FORM_STRING),
- AT_fund_type = (0x0050|FORM_DATA2),
- AT_mod_fund_type = (0x0060|FORM_BLOCK2),
- AT_user_def_type = (0x0070|FORM_REF),
- AT_mod_u_d_type = (0x0080|FORM_BLOCK2),
- AT_ordering = (0x0090|FORM_DATA2),
- AT_subscr_data = (0x00a0|FORM_BLOCK2),
- AT_byte_size = (0x00b0|FORM_DATA4),
- AT_bit_offset = (0x00c0|FORM_DATA2),
- AT_bit_size = (0x00d0|FORM_DATA4),
- /* (0x00e0|FORM_xxxx) -- reserved */
- AT_element_list = (0x00f0|FORM_BLOCK4),
- AT_stmt_list = (0x0100|FORM_DATA4),
- AT_low_pc = (0x0110|FORM_ADDR),
- AT_high_pc = (0x0120|FORM_ADDR),
- AT_language = (0x0130|FORM_DATA4),
- AT_member = (0x0140|FORM_REF),
- AT_discr = (0x0150|FORM_REF),
- AT_discr_value = (0x0160|FORM_BLOCK2),
- /* (0x0170|FORM_xxxx) -- reserved */
- /* (0x0180|FORM_xxxx) -- reserved */
- AT_string_length = (0x0190|FORM_BLOCK2),
- AT_common_reference = (0x01a0|FORM_REF),
- AT_comp_dir = (0x01b0|FORM_STRING),
- AT_const_value_string = (0x01c0|FORM_STRING),
- AT_const_value_data2 = (0x01c0|FORM_DATA2),
- AT_const_value_data4 = (0x01c0|FORM_DATA4),
- AT_const_value_data8 = (0x01c0|FORM_DATA8),
- AT_const_value_block2 = (0x01c0|FORM_BLOCK2),
- AT_const_value_block4 = (0x01c0|FORM_BLOCK4),
- AT_containing_type = (0x01d0|FORM_REF),
- AT_default_value_addr = (0x01e0|FORM_ADDR),
- AT_default_value_data2 = (0x01e0|FORM_DATA2),
- AT_default_value_data4 = (0x01e0|FORM_DATA4),
- AT_default_value_data8 = (0x01e0|FORM_DATA8),
- AT_default_value_string = (0x01e0|FORM_STRING),
- AT_friends = (0x01f0|FORM_BLOCK2),
- AT_inline = (0x0200|FORM_STRING),
- AT_is_optional = (0x0210|FORM_STRING),
- AT_lower_bound_ref = (0x0220|FORM_REF),
- AT_lower_bound_data2 = (0x0220|FORM_DATA2),
- AT_lower_bound_data4 = (0x0220|FORM_DATA4),
- AT_lower_bound_data8 = (0x0220|FORM_DATA8),
- AT_private = (0x0240|FORM_STRING),
- AT_producer = (0x0250|FORM_STRING),
- AT_program = (0x0230|FORM_STRING),
- AT_protected = (0x0260|FORM_STRING),
- AT_prototyped = (0x0270|FORM_STRING),
- AT_public = (0x0280|FORM_STRING),
- AT_pure_virtual = (0x0290|FORM_STRING),
- AT_return_addr = (0x02a0|FORM_BLOCK2),
- AT_abstract_origin = (0x02b0|FORM_REF),
- AT_start_scope = (0x02c0|FORM_DATA4),
- AT_stride_size = (0x02e0|FORM_DATA4),
- AT_upper_bound_ref = (0x02f0|FORM_REF),
- AT_upper_bound_data2 = (0x02f0|FORM_DATA2),
- AT_upper_bound_data4 = (0x02f0|FORM_DATA4),
- AT_upper_bound_data8 = (0x02f0|FORM_DATA8),
- AT_virtual = (0x0300|FORM_STRING),
-
- /* GNU extensions. */
-
- AT_sf_names = (0x8000|FORM_DATA4),
- AT_src_info = (0x8010|FORM_DATA4),
- AT_mac_info = (0x8020|FORM_DATA4),
- AT_src_coords = (0x8030|FORM_DATA4),
- AT_body_begin = (0x8040|FORM_ADDR),
- AT_body_end = (0x8050|FORM_ADDR)
-};
-
-#define AT_lo_user 0x2000 /* implementation-defined range start */
-#define AT_hi_user 0x3ff0 /* implementation-defined range end */
-
-/* Location atom names and codes. */
-
-enum dwarf_location_atom {
- OP_REG = 0x01,
- OP_BASEREG = 0x02,
- OP_ADDR = 0x03,
- OP_CONST = 0x04,
- OP_DEREF2 = 0x05,
- OP_DEREF4 = 0x06,
- OP_ADD = 0x07,
-
- /* GNU extensions. */
-
- OP_MULT = 0x80
-};
-
-#define OP_LO_USER 0x80 /* implementation-defined range start */
-#define OP_HI_USER 0xff /* implementation-defined range end */
-
-/* Fundamental type names and codes. */
-
-enum dwarf_fundamental_type {
- FT_char = 0x0001,
- FT_signed_char = 0x0002,
- FT_unsigned_char = 0x0003,
- FT_short = 0x0004,
- FT_signed_short = 0x0005,
- FT_unsigned_short = 0x0006,
- FT_integer = 0x0007,
- FT_signed_integer = 0x0008,
- FT_unsigned_integer = 0x0009,
- FT_long = 0x000a,
- FT_signed_long = 0x000b,
- FT_unsigned_long = 0x000c,
- FT_pointer = 0x000d, /* an alias for (void *) */
- FT_float = 0x000e,
- FT_dbl_prec_float = 0x000f,
- FT_ext_prec_float = 0x0010, /* breaks "classic" svr4 SDB */
- FT_complex = 0x0011, /* breaks "classic" svr4 SDB */
- FT_dbl_prec_complex = 0x0012, /* breaks "classic" svr4 SDB */
- /* 0x0013 -- reserved */
- FT_void = 0x0014,
- FT_boolean = 0x0015, /* breaks "classic" svr4 SDB */
- FT_ext_prec_complex = 0x0016, /* breaks "classic" svr4 SDB */
- FT_label = 0x0017,
-
- /* GNU extensions
- The low order byte must indicate the size (in bytes) for the type.
- All of these types will probably break "classic" svr4 SDB. */
-
- FT_long_long = 0x8008,
- FT_signed_long_long = 0x8108,
- FT_unsigned_long_long = 0x8208,
-
- FT_int8 = 0x9001,
- FT_signed_int8 = 0x9101,
- FT_unsigned_int8 = 0x9201,
- FT_int16 = 0x9302,
- FT_signed_int16 = 0x9402,
- FT_unsigned_int16 = 0x9502,
- FT_int32 = 0x9604,
- FT_signed_int32 = 0x9704,
- FT_unsigned_int32 = 0x9804,
- FT_int64 = 0x9908,
- FT_signed_int64 = 0x9a08,
- FT_unsigned_int64 = 0x9b08,
- FT_int128 = 0x9c10,
- FT_signed_int128 = 0x9d10,
- FT_unsigned_int128 = 0x9e10,
-
- FT_real32 = 0xa004,
- FT_real64 = 0xa108,
- FT_real96 = 0xa20c,
- FT_real128 = 0xa310
-};
-
-#define FT_lo_user 0x8000 /* implementation-defined range start */
-#define FT_hi_user 0xffff /* implementation defined range end */
-
-/* Type modifier names and codes. */
-
-enum dwarf_type_modifier {
- MOD_pointer_to = 0x01,
- MOD_reference_to = 0x02,
- MOD_const = 0x03,
- MOD_volatile = 0x04
-};
-
-#define MOD_lo_user 0x80 /* implementation-defined range start */
-#define MOD_hi_user 0xff /* implementation-defined range end */
-
-/* Array ordering names and codes. */
-
-enum dwarf_array_dim_ordering {
- ORD_row_major = 0,
- ORD_col_major = 1
-};
-
-/* Array subscript format names and codes. */
-
-enum dwarf_subscr_data_formats {
- FMT_FT_C_C = 0x0,
- FMT_FT_C_X = 0x1,
- FMT_FT_X_C = 0x2,
- FMT_FT_X_X = 0x3,
- FMT_UT_C_C = 0x4,
- FMT_UT_C_X = 0x5,
- FMT_UT_X_C = 0x6,
- FMT_UT_X_X = 0x7,
- FMT_ET = 0x8
-};
-
-/* Derived from above for ease of use. */
-
-#define FMT_CODE(_FUNDAMENTAL_TYPE_P, _LB_CONST_P, _UB_CONST_P) \
- (((_FUNDAMENTAL_TYPE_P) ? 0 : 4) \
- | ((_LB_CONST_P) ? 0 : 2) \
- | ((_UB_CONST_P) ? 0 : 1))
-
-/* Source language names and codes. */
-
-enum dwarf_source_language {
- LANG_C89 = 0x00000001,
- LANG_C = 0x00000002,
- LANG_ADA83 = 0x00000003,
- LANG_C_PLUS_PLUS = 0x00000004,
- LANG_COBOL74 = 0x00000005,
- LANG_COBOL85 = 0x00000006,
- LANG_FORTRAN77 = 0x00000007,
- LANG_FORTRAN90 = 0x00000008,
- LANG_PASCAL83 = 0x00000009,
- LANG_MODULA2 = 0x0000000a,
- LANG_JAVA = 0x0000000b
-};
-
-#define LANG_lo_user 0x00008000 /* implementation-defined range start */
-#define LANG_hi_user 0x0000ffff /* implementation-defined range end */
-
-/* Names and codes for GNU "macinfo" extension. */
-
-enum dwarf_macinfo_record_type {
- MACINFO_start = 's',
- MACINFO_resume = 'r',
- MACINFO_define = 'd',
- MACINFO_undef = 'u'
-};
-
-#endif /* _ELF_DWARF_H */
diff --git a/include/elf/epiphany.h b/include/elf/epiphany.h
deleted file mode 100755
index bb2dcffee..000000000
--- a/include/elf/epiphany.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/* Adapteva EPIPHANY ELF support for BFD.
- Copyright (C) 2009, 2011 Free Software Foundation, Inc.
- Contributed by Embecosm on behalf of Adapteva, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _ELF_EPIPHANY_H
-#define _ELF_EPIPHANY_H
-
-#include "elf/reloc-macros.h"
-
-/* Relocations. */
-START_RELOC_NUMBERS (elf_epiphany_reloc_type)
- RELOC_NUMBER (R_EPIPHANY_NONE, 0)
-
- /* Absolute address relocations. */
- RELOC_NUMBER (R_EPIPHANY_8, 1)
- RELOC_NUMBER (R_EPIPHANY_16, 2)
- RELOC_NUMBER (R_EPIPHANY_32, 3)
-
- /* PC-relative relocations. */
- RELOC_NUMBER (R_EPIPHANY_8_PCREL, 4)
- RELOC_NUMBER (R_EPIPHANY_16_PCREL,5)
- RELOC_NUMBER (R_EPIPHANY_32_PCREL,6)
-
- /* special forms for 8/24 bit branch displacements. */
- RELOC_NUMBER (R_EPIPHANY_SIMM8, 7)
- RELOC_NUMBER (R_EPIPHANY_SIMM24, 8)
-
- /* HIGH and LOW relocations taking part of a 32 bit address and
- depositing it into the IMM16 field of a destination. */
- RELOC_NUMBER (R_EPIPHANY_HIGH, 9)
- RELOC_NUMBER (R_EPIPHANY_LOW,10)
-
- /* 11 bit signed immediate value. */
- RELOC_NUMBER (R_EPIPHANY_SIMM11, 11)
- /* 11 bit magnitude addressing displacement. */
- RELOC_NUMBER (R_EPIPHANY_IMM11, 12)
-
- /* 8 bit immediate for MOV.S R,IMM8. */
- RELOC_NUMBER (R_EPIPHANY_IMM8, 13)
-
-END_RELOC_NUMBERS(R_EPIPHANY_max)
-
-#endif /* _ELF_EPIPHANY_H */
diff --git a/include/elf/external.h b/include/elf/external.h
deleted file mode 100644
index ef7724e94..000000000
--- a/include/elf/external.h
+++ /dev/null
@@ -1,288 +0,0 @@
-/* ELF support for BFD.
- Copyright 1991, 1992, 1993, 1995, 1997, 1998, 1999, 2001, 2003, 2005,
- 2008, 2010 Free Software Foundation, Inc.
-
- Written by Fred Fish @ Cygnus Support, from information published
- in "UNIX System V Release 4, Programmers Guide: ANSI C and
- Programming Support Tools".
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-/* This file is part of ELF support for BFD, and contains the portions
- that describe how ELF is represented externally by the BFD library.
- I.E. it describes the in-file representation of ELF. It requires
- the elf/common.h file which contains the portions that are common to
- both the internal and external representations. */
-
-/* The 64-bit stuff is kind of random. Perhaps someone will publish a
- spec someday. */
-
-#ifndef _ELF_EXTERNAL_H
-#define _ELF_EXTERNAL_H
-
-/* Special section indices, which may show up in st_shndx fields, among
- other places. */
-
-#define SHN_LORESERVE 0xFF00 /* Begin range of reserved indices */
-#define SHN_LOPROC 0xFF00 /* Begin range of appl-specific */
-#define SHN_HIPROC 0xFF1F /* End range of appl-specific */
-#define SHN_LOOS 0xFF20 /* OS specific semantics, lo */
-#define SHN_HIOS 0xFF3F /* OS specific semantics, hi */
-#define SHN_ABS 0xFFF1 /* Associated symbol is absolute */
-#define SHN_COMMON 0xFFF2 /* Associated symbol is in common */
-#define SHN_XINDEX 0xFFFF /* Section index is held elsewhere */
-#define SHN_HIRESERVE 0xFFFF /* End range of reserved indices */
-
-/* ELF Header (32-bit implementations) */
-
-typedef struct {
- unsigned char e_ident[16]; /* ELF "magic number" */
- unsigned char e_type[2]; /* Identifies object file type */
- unsigned char e_machine[2]; /* Specifies required architecture */
- unsigned char e_version[4]; /* Identifies object file version */
- unsigned char e_entry[4]; /* Entry point virtual address */
- unsigned char e_phoff[4]; /* Program header table file offset */
- unsigned char e_shoff[4]; /* Section header table file offset */
- unsigned char e_flags[4]; /* Processor-specific flags */
- unsigned char e_ehsize[2]; /* ELF header size in bytes */
- unsigned char e_phentsize[2]; /* Program header table entry size */
- unsigned char e_phnum[2]; /* Program header table entry count */
- unsigned char e_shentsize[2]; /* Section header table entry size */
- unsigned char e_shnum[2]; /* Section header table entry count */
- unsigned char e_shstrndx[2]; /* Section header string table index */
-} Elf32_External_Ehdr;
-
-typedef struct {
- unsigned char e_ident[16]; /* ELF "magic number" */
- unsigned char e_type[2]; /* Identifies object file type */
- unsigned char e_machine[2]; /* Specifies required architecture */
- unsigned char e_version[4]; /* Identifies object file version */
- unsigned char e_entry[8]; /* Entry point virtual address */
- unsigned char e_phoff[8]; /* Program header table file offset */
- unsigned char e_shoff[8]; /* Section header table file offset */
- unsigned char e_flags[4]; /* Processor-specific flags */
- unsigned char e_ehsize[2]; /* ELF header size in bytes */
- unsigned char e_phentsize[2]; /* Program header table entry size */
- unsigned char e_phnum[2]; /* Program header table entry count */
- unsigned char e_shentsize[2]; /* Section header table entry size */
- unsigned char e_shnum[2]; /* Section header table entry count */
- unsigned char e_shstrndx[2]; /* Section header string table index */
-} Elf64_External_Ehdr;
-
-/* Program header */
-
-typedef struct {
- unsigned char p_type[4]; /* Identifies program segment type */
- unsigned char p_offset[4]; /* Segment file offset */
- unsigned char p_vaddr[4]; /* Segment virtual address */
- unsigned char p_paddr[4]; /* Segment physical address */
- unsigned char p_filesz[4]; /* Segment size in file */
- unsigned char p_memsz[4]; /* Segment size in memory */
- unsigned char p_flags[4]; /* Segment flags */
- unsigned char p_align[4]; /* Segment alignment, file & memory */
-} Elf32_External_Phdr;
-
-typedef struct {
- unsigned char p_type[4]; /* Identifies program segment type */
- unsigned char p_flags[4]; /* Segment flags */
- unsigned char p_offset[8]; /* Segment file offset */
- unsigned char p_vaddr[8]; /* Segment virtual address */
- unsigned char p_paddr[8]; /* Segment physical address */
- unsigned char p_filesz[8]; /* Segment size in file */
- unsigned char p_memsz[8]; /* Segment size in memory */
- unsigned char p_align[8]; /* Segment alignment, file & memory */
-} Elf64_External_Phdr;
-
-/* Section header */
-
-typedef struct {
- unsigned char sh_name[4]; /* Section name, index in string tbl */
- unsigned char sh_type[4]; /* Type of section */
- unsigned char sh_flags[4]; /* Miscellaneous section attributes */
- unsigned char sh_addr[4]; /* Section virtual addr at execution */
- unsigned char sh_offset[4]; /* Section file offset */
- unsigned char sh_size[4]; /* Size of section in bytes */
- unsigned char sh_link[4]; /* Index of another section */
- unsigned char sh_info[4]; /* Additional section information */
- unsigned char sh_addralign[4]; /* Section alignment */
- unsigned char sh_entsize[4]; /* Entry size if section holds table */
-} Elf32_External_Shdr;
-
-typedef struct {
- unsigned char sh_name[4]; /* Section name, index in string tbl */
- unsigned char sh_type[4]; /* Type of section */
- unsigned char sh_flags[8]; /* Miscellaneous section attributes */
- unsigned char sh_addr[8]; /* Section virtual addr at execution */
- unsigned char sh_offset[8]; /* Section file offset */
- unsigned char sh_size[8]; /* Size of section in bytes */
- unsigned char sh_link[4]; /* Index of another section */
- unsigned char sh_info[4]; /* Additional section information */
- unsigned char sh_addralign[8]; /* Section alignment */
- unsigned char sh_entsize[8]; /* Entry size if section holds table */
-} Elf64_External_Shdr;
-
-/* Symbol table entry */
-
-typedef struct {
- unsigned char st_name[4]; /* Symbol name, index in string tbl */
- unsigned char st_value[4]; /* Value of the symbol */
- unsigned char st_size[4]; /* Associated symbol size */
- unsigned char st_info[1]; /* Type and binding attributes */
- unsigned char st_other[1]; /* No defined meaning, 0 */
- unsigned char st_shndx[2]; /* Associated section index */
-} Elf32_External_Sym;
-
-typedef struct {
- unsigned char st_name[4]; /* Symbol name, index in string tbl */
- unsigned char st_info[1]; /* Type and binding attributes */
- unsigned char st_other[1]; /* No defined meaning, 0 */
- unsigned char st_shndx[2]; /* Associated section index */
- unsigned char st_value[8]; /* Value of the symbol */
- unsigned char st_size[8]; /* Associated symbol size */
-} Elf64_External_Sym;
-
-typedef struct {
- unsigned char est_shndx[4]; /* Section index */
-} Elf_External_Sym_Shndx;
-
-/* Note segments */
-
-typedef struct {
- unsigned char namesz[4]; /* Size of entry's owner string */
- unsigned char descsz[4]; /* Size of the note descriptor */
- unsigned char type[4]; /* Interpretation of the descriptor */
- char name[1]; /* Start of the name+desc data */
-} Elf_External_Note;
-
-/* Relocation Entries */
-typedef struct {
- unsigned char r_offset[4]; /* Location at which to apply the action */
- unsigned char r_info[4]; /* index and type of relocation */
-} Elf32_External_Rel;
-
-typedef struct {
- unsigned char r_offset[4]; /* Location at which to apply the action */
- unsigned char r_info[4]; /* index and type of relocation */
- unsigned char r_addend[4]; /* Constant addend used to compute value */
-} Elf32_External_Rela;
-
-typedef struct {
- unsigned char r_offset[8]; /* Location at which to apply the action */
- unsigned char r_info[8]; /* index and type of relocation */
-} Elf64_External_Rel;
-
-typedef struct {
- unsigned char r_offset[8]; /* Location at which to apply the action */
- unsigned char r_info[8]; /* index and type of relocation */
- unsigned char r_addend[8]; /* Constant addend used to compute value */
-} Elf64_External_Rela;
-
-/* dynamic section structure */
-
-typedef struct {
- unsigned char d_tag[4]; /* entry tag value */
- union {
- unsigned char d_val[4];
- unsigned char d_ptr[4];
- } d_un;
-} Elf32_External_Dyn;
-
-typedef struct {
- unsigned char d_tag[8]; /* entry tag value */
- union {
- unsigned char d_val[8];
- unsigned char d_ptr[8];
- } d_un;
-} Elf64_External_Dyn;
-
-/* The version structures are currently size independent. They are
- named without a 32 or 64. If that ever changes, these structures
- will need to be renamed. */
-
-/* This structure appears in a SHT_GNU_verdef section. */
-
-typedef struct {
- unsigned char vd_version[2];
- unsigned char vd_flags[2];
- unsigned char vd_ndx[2];
- unsigned char vd_cnt[2];
- unsigned char vd_hash[4];
- unsigned char vd_aux[4];
- unsigned char vd_next[4];
-} Elf_External_Verdef;
-
-/* This structure appears in a SHT_GNU_verdef section. */
-
-typedef struct {
- unsigned char vda_name[4];
- unsigned char vda_next[4];
-} Elf_External_Verdaux;
-
-/* This structure appears in a SHT_GNU_verneed section. */
-
-typedef struct {
- unsigned char vn_version[2];
- unsigned char vn_cnt[2];
- unsigned char vn_file[4];
- unsigned char vn_aux[4];
- unsigned char vn_next[4];
-} Elf_External_Verneed;
-
-/* This structure appears in a SHT_GNU_verneed section. */
-
-typedef struct {
- unsigned char vna_hash[4];
- unsigned char vna_flags[2];
- unsigned char vna_other[2];
- unsigned char vna_name[4];
- unsigned char vna_next[4];
-} Elf_External_Vernaux;
-
-/* This structure appears in a SHT_GNU_versym section. This is not a
- standard ELF structure; ELF just uses Elf32_Half. */
-
-typedef struct {
- unsigned char vs_vers[2];
-} ATTRIBUTE_PACKED Elf_External_Versym;
-
-/* Structure for syminfo section. */
-typedef struct
-{
- unsigned char si_boundto[2];
- unsigned char si_flags[2];
-} Elf_External_Syminfo;
-
-
-/* This structure appears on the stack and in NT_AUXV core file notes. */
-typedef struct
-{
- unsigned char a_type[4];
- unsigned char a_val[4];
-} Elf32_External_Auxv;
-
-typedef struct
-{
- unsigned char a_type[8];
- unsigned char a_val[8];
-} Elf64_External_Auxv;
-
-/* Size of SHT_GROUP section entry. */
-
-#define GRP_ENTRY_SIZE 4
-
-#endif /* _ELF_EXTERNAL_H */
diff --git a/include/elf/fr30.h b/include/elf/fr30.h
deleted file mode 100644
index 918ac977f..000000000
--- a/include/elf/fr30.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/* FR30 ELF support for BFD.
- Copyright 1998, 1999, 2000, 2010 Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _ELF_FR30_H
-#define _ELF_FR30_H
-
-#include "elf/reloc-macros.h"
-
-/* Relocations. */
-START_RELOC_NUMBERS (elf_fr30_reloc_type)
- RELOC_NUMBER (R_FR30_NONE, 0)
- RELOC_NUMBER (R_FR30_8, 1)
- RELOC_NUMBER (R_FR30_20, 2)
- RELOC_NUMBER (R_FR30_32, 3)
- RELOC_NUMBER (R_FR30_48, 4)
- RELOC_NUMBER (R_FR30_6_IN_4, 5)
- RELOC_NUMBER (R_FR30_8_IN_8, 6)
- RELOC_NUMBER (R_FR30_9_IN_8, 7)
- RELOC_NUMBER (R_FR30_10_IN_8, 8)
- RELOC_NUMBER (R_FR30_9_PCREL, 9)
- RELOC_NUMBER (R_FR30_12_PCREL, 10)
- RELOC_NUMBER (R_FR30_GNU_VTINHERIT, 11)
- RELOC_NUMBER (R_FR30_GNU_VTENTRY, 12)
-END_RELOC_NUMBERS (R_FR30_max)
-
-#endif /* _ELF_FR30_H */
diff --git a/include/elf/frv.h b/include/elf/frv.h
deleted file mode 100644
index b79e51d06..000000000
--- a/include/elf/frv.h
+++ /dev/null
@@ -1,130 +0,0 @@
-/* FRV ELF support for BFD.
- Copyright (C) 2002, 2003, 2004, 2005, 2010 Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _ELF_FRV_H
-#define _ELF_FRV_H
-
-#include "elf/reloc-macros.h"
-
-/* Relocations. */
-START_RELOC_NUMBERS (elf_frv_reloc_type)
- RELOC_NUMBER (R_FRV_NONE, 0)
- RELOC_NUMBER (R_FRV_32, 1)
- RELOC_NUMBER (R_FRV_LABEL16, 2)
- RELOC_NUMBER (R_FRV_LABEL24, 3)
- RELOC_NUMBER (R_FRV_LO16, 4)
- RELOC_NUMBER (R_FRV_HI16, 5)
- RELOC_NUMBER (R_FRV_GPREL12, 6)
- RELOC_NUMBER (R_FRV_GPRELU12, 7)
- RELOC_NUMBER (R_FRV_GPREL32, 8)
- RELOC_NUMBER (R_FRV_GPRELHI, 9)
- RELOC_NUMBER (R_FRV_GPRELLO, 10)
- RELOC_NUMBER (R_FRV_GOT12, 11)
- RELOC_NUMBER (R_FRV_GOTHI, 12)
- RELOC_NUMBER (R_FRV_GOTLO, 13)
- RELOC_NUMBER (R_FRV_FUNCDESC, 14)
- RELOC_NUMBER (R_FRV_FUNCDESC_GOT12, 15)
- RELOC_NUMBER (R_FRV_FUNCDESC_GOTHI, 16)
- RELOC_NUMBER (R_FRV_FUNCDESC_GOTLO, 17)
- RELOC_NUMBER (R_FRV_FUNCDESC_VALUE, 18)
- RELOC_NUMBER (R_FRV_FUNCDESC_GOTOFF12, 19)
- RELOC_NUMBER (R_FRV_FUNCDESC_GOTOFFHI, 20)
- RELOC_NUMBER (R_FRV_FUNCDESC_GOTOFFLO, 21)
- RELOC_NUMBER (R_FRV_GOTOFF12, 22)
- RELOC_NUMBER (R_FRV_GOTOFFHI, 23)
- RELOC_NUMBER (R_FRV_GOTOFFLO, 24)
- RELOC_NUMBER (R_FRV_GETTLSOFF, 25)
- RELOC_NUMBER (R_FRV_TLSDESC_VALUE, 26)
- RELOC_NUMBER (R_FRV_GOTTLSDESC12, 27)
- RELOC_NUMBER (R_FRV_GOTTLSDESCHI, 28)
- RELOC_NUMBER (R_FRV_GOTTLSDESCLO, 29)
- RELOC_NUMBER (R_FRV_TLSMOFF12, 30)
- RELOC_NUMBER (R_FRV_TLSMOFFHI, 31)
- RELOC_NUMBER (R_FRV_TLSMOFFLO, 32)
- RELOC_NUMBER (R_FRV_GOTTLSOFF12, 33)
- RELOC_NUMBER (R_FRV_GOTTLSOFFHI, 34)
- RELOC_NUMBER (R_FRV_GOTTLSOFFLO, 35)
- RELOC_NUMBER (R_FRV_TLSOFF, 36)
- RELOC_NUMBER (R_FRV_TLSDESC_RELAX, 37)
- RELOC_NUMBER (R_FRV_GETTLSOFF_RELAX, 38)
- RELOC_NUMBER (R_FRV_TLSOFF_RELAX, 39)
- RELOC_NUMBER (R_FRV_TLSMOFF, 40)
- RELOC_NUMBER (R_FRV_GNU_VTINHERIT, 200)
- RELOC_NUMBER (R_FRV_GNU_VTENTRY, 201)
-END_RELOC_NUMBERS(R_FRV_max)
-
-/* Processor specific flags for the ELF header e_flags field. */
- /* gpr support */
-#define EF_FRV_GPR_MASK 0x00000003 /* mask for # of gprs */
-#define EF_FRV_GPR_32 0x00000001 /* -mgpr-32 */
-#define EF_FRV_GPR_64 0x00000002 /* -mgpr-64 */
-
- /* fpr support */
-#define EF_FRV_FPR_MASK 0x0000000c /* mask for # of fprs */
-#define EF_FRV_FPR_32 0x00000004 /* -mfpr-32 */
-#define EF_FRV_FPR_64 0x00000008 /* -mfpr-64 */
-#define EF_FRV_FPR_NONE 0x0000000c /* -msoft-float */
-
- /* double word support */
-#define EF_FRV_DWORD_MASK 0x00000030 /* mask for dword support */
-#define EF_FRV_DWORD_YES 0x00000010 /* use double word insns */
-#define EF_FRV_DWORD_NO 0x00000020 /* don't use double word insn*/
-
-#define EF_FRV_DOUBLE 0x00000040 /* -mdouble */
-#define EF_FRV_MEDIA 0x00000080 /* -mmedia */
-
-#define EF_FRV_PIC 0x00000100 /* -fpic */
-#define EF_FRV_NON_PIC_RELOCS 0x00000200 /* used non pic safe relocs */
-
-#define EF_FRV_MULADD 0x00000400 /* -mmuladd */
-#define EF_FRV_BIGPIC 0x00000800 /* -fPIC */
-#define EF_FRV_LIBPIC 0x00001000 /* -mlibrary-pic */
-#define EF_FRV_G0 0x00002000 /* -G 0, no small data ptr */
-#define EF_FRV_NOPACK 0x00004000 /* -mnopack */
-#define EF_FRV_FDPIC 0x00008000 /* -mfdpic */
-
-#define EF_FRV_CPU_MASK 0xff000000 /* specific cpu bits */
-#define EF_FRV_CPU_GENERIC 0x00000000 /* generic FRV */
-#define EF_FRV_CPU_FR500 0x01000000 /* FRV500 */
-#define EF_FRV_CPU_FR300 0x02000000 /* FRV300 */
-#define EF_FRV_CPU_SIMPLE 0x03000000 /* SIMPLE */
-#define EF_FRV_CPU_TOMCAT 0x04000000 /* Tomcat, FR500 prototype */
-#define EF_FRV_CPU_FR400 0x05000000 /* FRV400 */
-#define EF_FRV_CPU_FR550 0x06000000 /* FRV550 */
-#define EF_FRV_CPU_FR405 0x07000000
-#define EF_FRV_CPU_FR450 0x08000000
-
- /* Mask of PIC related bits */
-#define EF_FRV_PIC_FLAGS (EF_FRV_PIC | EF_FRV_LIBPIC | EF_FRV_BIGPIC \
- | EF_FRV_FDPIC)
-
- /* Mask of all flags */
-#define EF_FRV_ALL_FLAGS (EF_FRV_GPR_MASK | \
- EF_FRV_FPR_MASK | \
- EF_FRV_DWORD_MASK | \
- EF_FRV_DOUBLE | \
- EF_FRV_MEDIA | \
- EF_FRV_PIC_FLAGS | \
- EF_FRV_NON_PIC_RELOCS | \
- EF_FRV_MULADD | \
- EF_FRV_G0 | \
- EF_FRV_NOPACK | \
- EF_FRV_CPU_MASK)
-
-#endif /* _ELF_FRV_H */
diff --git a/include/elf/h8.h b/include/elf/h8.h
deleted file mode 100644
index 2a3d905eb..000000000
--- a/include/elf/h8.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/* H8300/h8500 ELF support for BFD.
- Copyright 2001-2013 Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _ELF_H8_H
-#define _ELF_H8_H
-
-#include "elf/reloc-macros.h"
-
-/* Relocations. */
-/* Relocations 59..64 are GNU extensions. */
-START_RELOC_NUMBERS (elf_h8_reloc_type)
- RELOC_NUMBER (R_H8_NONE, 0)
- RELOC_NUMBER (R_H8_DIR32, 1)
- RELOC_NUMBER (R_H8_DIR32_28, 2)
- RELOC_NUMBER (R_H8_DIR32_24, 3)
- RELOC_NUMBER (R_H8_DIR32_16, 4)
- RELOC_NUMBER (R_H8_DIR32U, 6)
- RELOC_NUMBER (R_H8_DIR32U_28, 7)
- RELOC_NUMBER (R_H8_DIR32U_24, 8)
- RELOC_NUMBER (R_H8_DIR32U_20, 9)
- RELOC_NUMBER (R_H8_DIR32U_16, 10)
- RELOC_NUMBER (R_H8_DIR24, 11)
- RELOC_NUMBER (R_H8_DIR24_20, 12)
- RELOC_NUMBER (R_H8_DIR24_16, 13)
- RELOC_NUMBER (R_H8_DIR24U, 14)
- RELOC_NUMBER (R_H8_DIR24U_20, 15)
- RELOC_NUMBER (R_H8_DIR24U_16, 16)
- RELOC_NUMBER (R_H8_DIR16, 17)
- RELOC_NUMBER (R_H8_DIR16U, 18)
- RELOC_NUMBER (R_H8_DIR16S_32, 19)
- RELOC_NUMBER (R_H8_DIR16S_28, 20)
- RELOC_NUMBER (R_H8_DIR16S_24, 21)
- RELOC_NUMBER (R_H8_DIR16S_20, 22)
- RELOC_NUMBER (R_H8_DIR16S, 23)
- RELOC_NUMBER (R_H8_DIR8, 24)
- RELOC_NUMBER (R_H8_DIR8U, 25)
- RELOC_NUMBER (R_H8_DIR8Z_32, 26)
- RELOC_NUMBER (R_H8_DIR8Z_28, 27)
- RELOC_NUMBER (R_H8_DIR8Z_24, 28)
- RELOC_NUMBER (R_H8_DIR8Z_20, 29)
- RELOC_NUMBER (R_H8_DIR8Z_16, 30)
- RELOC_NUMBER (R_H8_PCREL16, 31)
- RELOC_NUMBER (R_H8_PCREL8, 32)
- RELOC_NUMBER (R_H8_BPOS, 33)
- FAKE_RELOC (R_H8_FIRST_INVALID_DIR_RELOC, 34)
- FAKE_RELOC (R_H8_LAST_INVALID_DIR_RELOC, 58)
- RELOC_NUMBER (R_H8_DIR16A8, 59)
- RELOC_NUMBER (R_H8_DIR16R8, 60)
- RELOC_NUMBER (R_H8_DIR24A8, 61)
- RELOC_NUMBER (R_H8_DIR24R8, 62)
- RELOC_NUMBER (R_H8_DIR32A16, 63)
- RELOC_NUMBER (R_H8_DISP32A16, 64)
- RELOC_NUMBER (R_H8_ABS32, 65)
- RELOC_NUMBER (R_H8_ABS32A16, 127)
- RELOC_NUMBER (R_H8_SYM, 128)
- RELOC_NUMBER (R_H8_OPneg, 129)
- RELOC_NUMBER (R_H8_OPadd, 130)
- RELOC_NUMBER (R_H8_OPsub, 131)
- RELOC_NUMBER (R_H8_OPmul, 132)
- RELOC_NUMBER (R_H8_OPdiv, 133)
- RELOC_NUMBER (R_H8_OPshla, 134)
- RELOC_NUMBER (R_H8_OPshra, 135)
- RELOC_NUMBER (R_H8_OPsctsize, 136)
- RELOC_NUMBER (R_H8_OPhword, 137)
- RELOC_NUMBER (R_H8_OPlword, 138)
- RELOC_NUMBER (R_H8_OPhigh, 139)
- RELOC_NUMBER (R_H8_OPlow, 140)
- RELOC_NUMBER (R_H8_OPscttop, 141)
-END_RELOC_NUMBERS (R_H8_max)
-
-/* Machine variant if we know it. This field was invented at Cygnus,
- but it is hoped that other vendors will adopt it. If some standard
- is developed, this code should be changed to follow it. */
-
-#define EF_H8_MACH 0x00FF0000
-
-#define E_H8_MACH_H8300 0x00800000
-#define E_H8_MACH_H8300H 0x00810000
-#define E_H8_MACH_H8300S 0x00820000
-#define E_H8_MACH_H8300HN 0x00830000
-#define E_H8_MACH_H8300SN 0x00840000
-#define E_H8_MACH_H8300SX 0x00850000
-#define E_H8_MACH_H8300SXN 0x00860000
-
-#endif
diff --git a/include/elf/hppa.h b/include/elf/hppa.h
deleted file mode 100644
index 8d3ea45f4..000000000
--- a/include/elf/hppa.h
+++ /dev/null
@@ -1,635 +0,0 @@
-/* HPPA ELF support for BFD.
- Copyright 1993, 1994, 1995, 1998, 1999, 2000, 2005, 2006, 2008, 2010
- Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-/* This file holds definitions specific to the HPPA ELF ABI. Note
- that most of this is not actually implemented by BFD. */
-
-#ifndef _ELF_HPPA_H
-#define _ELF_HPPA_H
-
-/* Processor specific flags for the ELF header e_flags field. */
-
-/* Trap null address dereferences. */
-#define EF_PARISC_TRAPNIL 0x00010000
-
-/* .PARISC.archext section is present. */
-#define EF_PARISC_EXT 0x00020000
-
-/* Program expects little-endian mode. */
-#define EF_PARISC_LSB 0x00040000
-
-/* Program expects wide mode. */
-#define EF_PARISC_WIDE 0x00080000
-
-/* Do not allow kernel-assisted branch prediction. */
-#define EF_PARISC_NO_KABP 0x00100000
-
-/* Allow lazy swap for dynamically allocated program segments. */
-#define EF_PARISC_LAZYSWAP 0x00400000
-
-/* Architecture version */
-#define EF_PARISC_ARCH 0x0000ffff
-
-#define EFA_PARISC_1_0 0x020b
-#define EFA_PARISC_1_1 0x0210
-#define EFA_PARISC_2_0 0x0214
-
-/* Special section indices. */
-/* A symbol that has been declared as a tentative definition in an ANSI C
- compilation. */
-#define SHN_PARISC_ANSI_COMMON SHN_LORESERVE
-
-/* A symbol that has been declared as a common block using the
- huge memory model. */
-#define SHN_PARISC_HUGE_COMMON (SHN_LORESERVE + 1)
-
-/* Processor specific section types. */
-
-/* Section contains product specific extension bits. */
-#define SHT_PARISC_EXT 0x70000000
-
-/* Section contains unwind table entries. */
-#define SHT_PARISC_UNWIND 0x70000001
-
-/* Section contains debug information for optimized code. */
-#define SHT_PARISC_DOC 0x70000002
-
-/* Section contains code annotations. */
-#define SHT_PARISC_ANNOT 0x70000003
-
-/* DLKM special section. */
-#define SHT_PARISC_DLKM 0x70000004
-
-/* These are strictly for compatibility with the older elf32-hppa
- implementation. Hopefully we can eliminate them in the future. */
-/* Optional section holding argument location/relocation info. */
-#define SHT_PARISC_SYMEXTN SHT_LOPROC + 8
-
-/* Option section for linker stubs. */
-#define SHT_PARISC_STUBS SHT_LOPROC + 9
-
-/* Processor specific section flags. */
-
-/* Section contains code compiled for static branch prediction. */
-#define SHF_PARISC_SBP 0x80000000
-
-/* Section should be allocated from from GP. */
-#define SHF_PARISC_HUGE 0x40000000
-
-/* Section should go near GP. */
-#define SHF_PARISC_SHORT 0x20000000
-
-/* Section is weak ordered. */
-#define SHF_PARISC_WEAKORDER 0x10000000
-
-/* Identifies the entry point of a millicode routine. */
-#define STT_PARISC_MILLI 13
-
-/* ELF/HPPA relocation types */
-
-/* Note: PA-ELF is defined to use only RELA relocations. */
-#include "elf/reloc-macros.h"
-
-START_RELOC_NUMBERS (elf_hppa_reloc_type)
-RELOC_NUMBER (R_PARISC_NONE, 0) /* No reloc */
-
-/* Data / Inst. Format Relocation Expression */
-
-RELOC_NUMBER (R_PARISC_DIR32, 1)
-/* 32-bit word symbol + addend */
-
-RELOC_NUMBER (R_PARISC_DIR21L, 2)
-/* long immediate (7) LR(symbol, addend) */
-
-RELOC_NUMBER (R_PARISC_DIR17R, 3)
-/* branch external (19) RR(symbol, addend) */
-
-RELOC_NUMBER (R_PARISC_DIR17F, 4)
-/* branch external (19) symbol + addend */
-
-RELOC_NUMBER (R_PARISC_DIR14R, 6)
-/* load/store (1) RR(symbol, addend) */
-
-RELOC_NUMBER (R_PARISC_DIR14F, 7)
-/* load/store (1) symbol, addend */
-
-/* PC-relative relocation types
- Typically used for calls.
- Note PCREL17C and PCREL17F differ only in overflow handling.
- PCREL17C never reports a relocation error.
-
- When supporting argument relocations, function calls must be
- accompanied by parameter relocation information. This information is
- carried in the ten high-order bits of the addend field. The remaining
- 22 bits of of the addend field are sign-extended to form the Addend.
-
- Note the code to build argument relocations depends on the
- addend being zero. A consequence of this limitation is GAS
- can not perform relocation reductions for function symbols. */
-
-RELOC_NUMBER (R_PARISC_PCREL12F, 8)
-/* op & branch (17) symbol - PC - 8 + addend */
-
-RELOC_NUMBER (R_PARISC_PCREL32, 9)
-/* 32-bit word symbol - PC - 8 + addend */
-
-RELOC_NUMBER (R_PARISC_PCREL21L, 10)
-/* long immediate (7) L(symbol - PC - 8 + addend) */
-
-RELOC_NUMBER (R_PARISC_PCREL17R, 11)
-/* branch external (19) R(symbol - PC - 8 + addend) */
-
-RELOC_NUMBER (R_PARISC_PCREL17F, 12)
-/* branch (20) symbol - PC - 8 + addend */
-
-RELOC_NUMBER (R_PARISC_PCREL17C, 13)
-/* branch (20) symbol - PC - 8 + addend */
-
-RELOC_NUMBER (R_PARISC_PCREL14R, 14)
-/* load/store (1) R(symbol - PC - 8 + addend) */
-
-RELOC_NUMBER (R_PARISC_PCREL14F, 15)
-/* load/store (1) symbol - PC - 8 + addend */
-
-
-/* DP-relative relocation types. */
-RELOC_NUMBER (R_PARISC_DPREL21L, 18)
-/* long immediate (7) LR(symbol - GP, addend) */
-
-RELOC_NUMBER (R_PARISC_DPREL14WR, 19)
-/* load/store mod. comp. (2) RR(symbol - GP, addend) */
-
-RELOC_NUMBER (R_PARISC_DPREL14DR, 20)
-/* load/store doubleword (3) RR(symbol - GP, addend) */
-
-RELOC_NUMBER (R_PARISC_DPREL14R, 22)
-/* load/store (1) RR(symbol - GP, addend) */
-
-RELOC_NUMBER (R_PARISC_DPREL14F, 23)
-/* load/store (1) symbol - GP + addend */
-
-
-/* Data linkage table (DLT) relocation types
-
- SOM DLT_REL fixup requests are used to for static data references
- from position-independent code within shared libraries. They are
- similar to the GOT relocation types in some SVR4 implementations. */
-
-RELOC_NUMBER (R_PARISC_DLTREL21L, 26)
-/* long immediate (7) LR(symbol - GP, addend) */
-
-RELOC_NUMBER (R_PARISC_DLTREL14R, 30)
-/* load/store (1) RR(symbol - GP, addend) */
-
-RELOC_NUMBER (R_PARISC_DLTREL14F, 31)
-/* load/store (1) symbol - GP + addend */
-
-
-/* DLT indirect relocation types */
-RELOC_NUMBER (R_PARISC_DLTIND21L, 34)
-/* long immediate (7) L(ltoff(symbol + addend)) */
-
-RELOC_NUMBER (R_PARISC_DLTIND14R, 38)
-/* load/store (1) R(ltoff(symbol + addend)) */
-
-RELOC_NUMBER (R_PARISC_DLTIND14F, 39)
-/* load/store (1) ltoff(symbol + addend) */
-
-
-/* Base relative relocation types. Ugh. These imply lots of state */
-RELOC_NUMBER (R_PARISC_SETBASE, 40)
-/* none no reloc; base := sym */
-
-RELOC_NUMBER (R_PARISC_SECREL32, 41)
-/* 32-bit word symbol - SECT + addend */
-
-RELOC_NUMBER (R_PARISC_BASEREL21L, 42)
-/* long immediate (7) LR(symbol - base, addend) */
-
-RELOC_NUMBER (R_PARISC_BASEREL17R, 43)
-/* branch external (19) RR(symbol - base, addend) */
-
-RELOC_NUMBER (R_PARISC_BASEREL17F, 44)
-/* branch external (19) symbol - base + addend */
-
-RELOC_NUMBER (R_PARISC_BASEREL14R, 46)
-/* load/store (1) RR(symbol - base, addend) */
-
-RELOC_NUMBER (R_PARISC_BASEREL14F, 47)
-/* load/store (1) symbol - base, addend */
-
-
-/* Segment relative relocation types. */
-RELOC_NUMBER (R_PARISC_SEGBASE, 48)
-/* none no relocation; SB := sym */
-
-RELOC_NUMBER (R_PARISC_SEGREL32, 49)
-/* 32-bit word symbol - SB + addend */
-
-
-/* Offsets from the PLT. */
-RELOC_NUMBER (R_PARISC_PLTOFF21L, 50)
-/* long immediate (7) LR(pltoff(symbol), addend) */
-
-RELOC_NUMBER (R_PARISC_PLTOFF14R, 54)
-/* load/store (1) RR(pltoff(symbol), addend) */
-
-RELOC_NUMBER (R_PARISC_PLTOFF14F, 55)
-/* load/store (1) pltoff(symbol) + addend */
-
-
-RELOC_NUMBER (R_PARISC_LTOFF_FPTR32, 57)
-/* 32-bit word ltoff(fptr(symbol+addend)) */
-
-RELOC_NUMBER (R_PARISC_LTOFF_FPTR21L, 58)
-/* long immediate (7) L(ltoff(fptr(symbol+addend))) */
-
-RELOC_NUMBER (R_PARISC_LTOFF_FPTR14R, 62)
-/* load/store (1) R(ltoff(fptr(symbol+addend))) */
-
-
-RELOC_NUMBER (R_PARISC_FPTR64, 64)
-/* 64-bit doubleword fptr(symbol+addend) */
-
-
-/* Plabel relocation types. */
-RELOC_NUMBER (R_PARISC_PLABEL32, 65)
-/* 32-bit word fptr(symbol) */
-
-RELOC_NUMBER (R_PARISC_PLABEL21L, 66)
-/* long immediate (7) L(fptr(symbol)) */
-
-RELOC_NUMBER (R_PARISC_PLABEL14R, 70)
-/* load/store (1) R(fptr(symbol)) */
-
-
-/* PCREL relocations. */
-RELOC_NUMBER (R_PARISC_PCREL64, 72)
-/* 64-bit doubleword symbol - PC - 8 + addend */
-
-RELOC_NUMBER (R_PARISC_PCREL22C, 73)
-/* branch & link (21) symbol - PC - 8 + addend */
-
-RELOC_NUMBER (R_PARISC_PCREL22F, 74)
-/* branch & link (21) symbol - PC - 8 + addend */
-
-RELOC_NUMBER (R_PARISC_PCREL14WR, 75)
-/* load/store mod. comp. (2) R(symbol - PC - 8 + addend) */
-
-RELOC_NUMBER (R_PARISC_PCREL14DR, 76)
-/* load/store doubleword (3) R(symbol - PC - 8 + addend) */
-
-RELOC_NUMBER (R_PARISC_PCREL16F, 77)
-/* load/store (1) symbol - PC - 8 + addend */
-
-RELOC_NUMBER (R_PARISC_PCREL16WF, 78)
-/* load/store mod. comp. (2) symbol - PC - 8 + addend */
-
-RELOC_NUMBER (R_PARISC_PCREL16DF, 79)
-/* load/store doubleword (3) symbol - PC - 8 + addend */
-
-
-RELOC_NUMBER (R_PARISC_DIR64, 80)
-/* 64-bit doubleword symbol + addend */
-
-RELOC_NUMBER (R_PARISC_DIR14WR, 83)
-/* load/store mod. comp. (2) RR(symbol, addend) */
-
-RELOC_NUMBER (R_PARISC_DIR14DR, 84)
-/* load/store doubleword (3) RR(symbol, addend) */
-
-RELOC_NUMBER (R_PARISC_DIR16F, 85)
-/* load/store (1) symbol + addend */
-
-RELOC_NUMBER (R_PARISC_DIR16WF, 86)
-/* load/store mod. comp. (2) symbol + addend */
-
-RELOC_NUMBER (R_PARISC_DIR16DF, 87)
-/* load/store doubleword (3) symbol + addend */
-
-RELOC_NUMBER (R_PARISC_GPREL64, 88)
-/* 64-bit doubleword symbol - GP + addend */
-
-RELOC_NUMBER (R_PARISC_DLTREL14WR, 91)
-/* load/store mod. comp. (2) RR(symbol - GP, addend) */
-
-RELOC_NUMBER (R_PARISC_DLTREL14DR, 92)
-/* load/store doubleword (3) RR(symbol - GP, addend) */
-
-RELOC_NUMBER (R_PARISC_GPREL16F, 93)
-/* load/store (1) symbol - GP + addend */
-
-RELOC_NUMBER (R_PARISC_GPREL16WF, 94)
-/* load/store mod. comp. (2) symbol - GP + addend */
-
-RELOC_NUMBER (R_PARISC_GPREL16DF, 95)
-/* load/store doubleword (3) symbol - GP + addend */
-
-
-RELOC_NUMBER (R_PARISC_LTOFF64, 96)
-/* 64-bit doubleword ltoff(symbol + addend) */
-
-RELOC_NUMBER (R_PARISC_DLTIND14WR, 99)
-/* load/store mod. comp. (2) R(ltoff(symbol + addend)) */
-
-RELOC_NUMBER (R_PARISC_DLTIND14DR, 100)
-/* load/store doubleword (3) R(ltoff(symbol + addend)) */
-
-RELOC_NUMBER (R_PARISC_LTOFF16F, 101)
-/* load/store (1) ltoff(symbol + addend) */
-
-RELOC_NUMBER (R_PARISC_LTOFF16WF, 102)
-/* load/store mod. comp. (2) ltoff(symbol + addend) */
-
-RELOC_NUMBER (R_PARISC_LTOFF16DF, 103)
-/* load/store doubleword (3) ltoff(symbol + addend) */
-
-
-RELOC_NUMBER (R_PARISC_SECREL64, 104)
-/* 64-bit doubleword symbol - SECT + addend */
-
-RELOC_NUMBER (R_PARISC_BASEREL14WR, 107)
-/* load/store mod. comp. (2) RR(symbol - base, addend) */
-
-RELOC_NUMBER (R_PARISC_BASEREL14DR, 108)
-/* load/store doubleword (3) RR(symbol - base, addend) */
-
-
-RELOC_NUMBER (R_PARISC_SEGREL64, 112)
-/* 64-bit doubleword symbol - SB + addend */
-
-RELOC_NUMBER (R_PARISC_PLTOFF14WR, 115)
-/* load/store mod. comp. (2) RR(pltoff(symbol), addend) */
-
-RELOC_NUMBER (R_PARISC_PLTOFF14DR, 116)
-/* load/store doubleword (3) RR(pltoff(symbol), addend) */
-
-RELOC_NUMBER (R_PARISC_PLTOFF16F, 117)
-/* load/store (1) pltoff(symbol) + addend */
-
-RELOC_NUMBER (R_PARISC_PLTOFF16WF, 118)
-/* load/store mod. comp. (2) pltoff(symbol) + addend */
-
-RELOC_NUMBER (R_PARISC_PLTOFF16DF, 119)
-/* load/store doubleword (3) pltoff(symbol) + addend */
-
-
-RELOC_NUMBER (R_PARISC_LTOFF_FPTR64, 120)
-/* 64-bit doubleword ltoff(fptr(symbol+addend)) */
-
-RELOC_NUMBER (R_PARISC_LTOFF_FPTR14WR, 123)
-/* load/store mod. comp. (2) R(ltoff(fptr(symbol+addend))) */
-
-RELOC_NUMBER (R_PARISC_LTOFF_FPTR14DR, 124)
-/* load/store doubleword (3) R(ltoff(fptr(symbol+addend))) */
-
-RELOC_NUMBER (R_PARISC_LTOFF_FPTR16F, 125)
-/* load/store (1) ltoff(fptr(symbol+addend)) */
-
-RELOC_NUMBER (R_PARISC_LTOFF_FPTR16WF, 126)
-/* load/store mod. comp. (2) ltoff(fptr(symbol+addend)) */
-
-RELOC_NUMBER (R_PARISC_LTOFF_FPTR16DF, 127)
-/* load/store doubleword (3) ltoff(fptr(symbol+addend)) */
-
-
-RELOC_NUMBER (R_PARISC_COPY, 128)
-/* data Dynamic relocations only */
-
-RELOC_NUMBER (R_PARISC_IPLT, 129)
-/* plt */
-
-RELOC_NUMBER (R_PARISC_EPLT, 130)
-/* plt */
-
-
-RELOC_NUMBER (R_PARISC_TPREL32, 153)
-/* 32-bit word symbol - TP + addend */
-
-RELOC_NUMBER (R_PARISC_TPREL21L, 154)
-/* long immediate (7) LR(symbol - TP, addend) */
-
-RELOC_NUMBER (R_PARISC_TPREL14R, 158)
-/* load/store (1) RR(symbol - TP, addend) */
-
-
-RELOC_NUMBER (R_PARISC_LTOFF_TP21L, 162)
-/* long immediate (7) L(ltoff(symbol - TP + addend)) */
-
-RELOC_NUMBER (R_PARISC_LTOFF_TP14R, 166)
-/* load/store (1) R(ltoff(symbol - TP + addend)) */
-
-RELOC_NUMBER (R_PARISC_LTOFF_TP14F, 167)
-/* load/store (1) ltoff(symbol - TP + addend) */
-
-
-RELOC_NUMBER (R_PARISC_TPREL64, 216)
-/* 64-bit word symbol - TP + addend */
-
-RELOC_NUMBER (R_PARISC_TPREL14WR, 219)
-/* load/store mod. comp. (2) RR(symbol - TP, addend) */
-
-RELOC_NUMBER (R_PARISC_TPREL14DR, 220)
-/* load/store doubleword (3) RR(symbol - TP, addend) */
-
-RELOC_NUMBER (R_PARISC_TPREL16F, 221)
-/* load/store (1) symbol - TP + addend */
-
-RELOC_NUMBER (R_PARISC_TPREL16WF, 222)
-/* load/store mod. comp. (2) symbol - TP + addend */
-
-RELOC_NUMBER (R_PARISC_TPREL16DF, 223)
-/* load/store doubleword (3) symbol - TP + addend */
-
-
-RELOC_NUMBER (R_PARISC_LTOFF_TP64, 224)
-/* 64-bit doubleword ltoff(symbol - TP + addend) */
-
-RELOC_NUMBER (R_PARISC_LTOFF_TP14WR, 227)
-/* load/store mod. comp. (2) R(ltoff(symbol - TP + addend)) */
-
-RELOC_NUMBER (R_PARISC_LTOFF_TP14DR, 228)
-/* load/store doubleword (3) R(ltoff(symbol - TP + addend)) */
-
-RELOC_NUMBER (R_PARISC_LTOFF_TP16F, 229)
-/* load/store (1) ltoff(symbol - TP + addend) */
-
-RELOC_NUMBER (R_PARISC_LTOFF_TP16WF, 230)
-/* load/store mod. comp. (2) ltoff(symbol - TP + addend) */
-
-RELOC_NUMBER (R_PARISC_LTOFF_TP16DF, 231)
-/* load/store doubleword (3) ltoff(symbol - TP + addend) */
-
-RELOC_NUMBER (R_PARISC_GNU_VTENTRY, 232)
-RELOC_NUMBER (R_PARISC_GNU_VTINHERIT, 233)
-
-RELOC_NUMBER (R_PARISC_TLS_GD21L, 234)
-RELOC_NUMBER (R_PARISC_TLS_GD14R, 235)
-RELOC_NUMBER (R_PARISC_TLS_GDCALL, 236)
-RELOC_NUMBER (R_PARISC_TLS_LDM21L, 237)
-RELOC_NUMBER (R_PARISC_TLS_LDM14R, 238)
-RELOC_NUMBER (R_PARISC_TLS_LDMCALL, 239)
-RELOC_NUMBER (R_PARISC_TLS_LDO21L, 240)
-RELOC_NUMBER (R_PARISC_TLS_LDO14R, 241)
-RELOC_NUMBER (R_PARISC_TLS_DTPMOD32, 242)
-RELOC_NUMBER (R_PARISC_TLS_DTPMOD64, 243)
-RELOC_NUMBER (R_PARISC_TLS_DTPOFF32, 244)
-RELOC_NUMBER (R_PARISC_TLS_DTPOFF64, 245)
-
-END_RELOC_NUMBERS (R_PARISC_UNIMPLEMENTED)
-
-#define R_PARISC_TLS_LE21L R_PARISC_TPREL21L
-#define R_PARISC_TLS_LE14R R_PARISC_TPREL14R
-#define R_PARISC_TLS_IE21L R_PARISC_LTOFF_TP21L
-#define R_PARISC_TLS_IE14R R_PARISC_LTOFF_TP14R
-#define R_PARISC_TLS_TPREL32 R_PARISC_TPREL32
-#define R_PARISC_TLS_TPREL64 R_PARISC_TPREL64
-
-#ifndef RELOC_MACROS_GEN_FUNC
-typedef enum elf_hppa_reloc_type elf_hppa_reloc_type;
-#endif
-
-#define PT_PARISC_ARCHEXT 0x70000000
-#define PT_PARISC_UNWIND 0x70000001
-#define PT_PARISC_WEAKORDER 0x70000002
-
-/* Flag bits in sh_flags of ElfXX_Shdr. */
-#define SHF_HP_TLS 0x01000000
-#define SHF_HP_NEAR_SHARED 0x02000000
-#define SHF_HP_FAR_SHARED 0x04000000
-#define SHF_HP_COMDAT 0x08000000
-#define SHF_HP_CONST 0x00800000
-
-/* Reserved section header indices. */
-#define SHN_TLS_COMMON (SHN_LOOS + 0x0)
-#define SHN_NS_COMMON (SHN_LOOS + 0x1)
-#define SHN_FS_COMMON (SHN_LOOS + 0x2)
-#define SHN_NS_UNDEF (SHN_LOOS + 0x3)
-#define SHN_FS_UNDEF (SHN_LOOS + 0x4)
-#define SHN_HP_EXTERN (SHN_LOOS + 0x5)
-#define SHN_HP_EXTHINT (SHN_LOOS + 0x6)
-#define SHN_HP_UNDEF_BIND_IMM (SHN_LOOS + 0x7)
-
-/* Values of sh_type in ElfXX_Shdr. */
-#define SHT_HP_OVLBITS (SHT_LOOS + 0x0)
-#define SHT_HP_DLKM (SHT_LOOS + 0x1)
-#define SHT_HP_COMDAT (SHT_LOOS + 0x2)
-#define SHT_HP_OBJDICT (SHT_LOOS + 0x3)
-#define SHT_HP_ANNOT (SHT_LOOS + 0x4)
-
-/* Flag bits in p_flags of ElfXX_Phdr. */
-#define PF_HP_CODE 0x00040000
-#define PF_HP_MODIFY 0x00080000
-#define PF_HP_PAGE_SIZE 0x00100000
-#define PF_HP_FAR_SHARED 0x00200000
-#define PF_HP_NEAR_SHARED 0x00400000
-#define PF_HP_LAZYSWAP 0x00800000
-#define PF_HP_CODE_DEPR 0x01000000
-#define PF_HP_MODIFY_DEPR 0x02000000
-#define PF_HP_LAZYSWAP_DEPR 0x04000000
-#define PF_PARISC_SBP 0x08000000
-#define PF_HP_SBP 0x08000000
-
-
-/* Processor specific dynamic array tags. */
-
-/* Arggh. HP's tools define these symbols based on the
- old value of DT_LOOS. So we must do the same to be
- compatible. */
-#define DT_HP_LOAD_MAP (OLD_DT_LOOS + 0x0)
-#define DT_HP_DLD_FLAGS (OLD_DT_LOOS + 0x1)
-#define DT_HP_DLD_HOOK (OLD_DT_LOOS + 0x2)
-#define DT_HP_UX10_INIT (OLD_DT_LOOS + 0x3)
-#define DT_HP_UX10_INITSZ (OLD_DT_LOOS + 0x4)
-#define DT_HP_PREINIT (OLD_DT_LOOS + 0x5)
-#define DT_HP_PREINITSZ (OLD_DT_LOOS + 0x6)
-#define DT_HP_NEEDED (OLD_DT_LOOS + 0x7)
-#define DT_HP_TIME_STAMP (OLD_DT_LOOS + 0x8)
-#define DT_HP_CHECKSUM (OLD_DT_LOOS + 0x9)
-#define DT_HP_GST_SIZE (OLD_DT_LOOS + 0xa)
-#define DT_HP_GST_VERSION (OLD_DT_LOOS + 0xb)
-#define DT_HP_GST_HASHVAL (OLD_DT_LOOS + 0xc)
-#define DT_HP_EPLTREL (OLD_DT_LOOS + 0xd)
-#define DT_HP_EPLTRELSZ (OLD_DT_LOOS + 0xe)
-#define DT_HP_FILTERED (OLD_DT_LOOS + 0xf)
-#define DT_HP_FILTER_TLS (OLD_DT_LOOS + 0x10)
-#define DT_HP_COMPAT_FILTERED (OLD_DT_LOOS + 0x11)
-#define DT_HP_LAZYLOAD (OLD_DT_LOOS + 0x12)
-#define DT_HP_BIND_NOW_COUNT (OLD_DT_LOOS + 0x13)
-#define DT_PLT (OLD_DT_LOOS + 0x14)
-#define DT_PLT_SIZE (OLD_DT_LOOS + 0x15)
-#define DT_DLT (OLD_DT_LOOS + 0x16)
-#define DT_DLT_SIZE (OLD_DT_LOOS + 0x17)
-
-/* Values for DT_HP_DLD_FLAGS. */
-#define DT_HP_DEBUG_PRIVATE 0x00001 /* Map text private */
-#define DT_HP_DEBUG_CALLBACK 0x00002 /* Callback */
-#define DT_HP_DEBUG_CALLBACK_BOR 0x00004 /* BOR callback */
-#define DT_HP_NO_ENVVAR 0x00008 /* No env var */
-#define DT_HP_BIND_NOW 0x00010 /* Bind now */
-#define DT_HP_BIND_NONFATAL 0x00020 /* Bind non-fatal */
-#define DT_HP_BIND_VERBOSE 0x00040 /* Bind verbose */
-#define DT_HP_BIND_RESTRICTED 0x00080 /* Bind restricted */
-#define DT_HP_BIND_SYMBOLIC 0x00100 /* Bind symbolic */
-#define DT_HP_RPATH_FIRST 0x00200 /* RPATH first */
-#define DT_HP_BIND_DEPTH_FIRST 0x00400 /* Bind depth-first */
-#define DT_HP_GST 0x00800 /* Dld global sym table */
-#define DT_HP_SHLIB_FIXED 0x01000 /* shared vtable support */
-#define DT_HP_MERGE_SHLIB_SEG 0x02000 /* merge shlib data segs */
-#define DT_HP_NODELETE 0x04000 /* never unload */
-#define DT_HP_GROUP 0x08000 /* bind only within group */
-#define DT_HP_PROTECT_LINKAGE_TABLE 0x10000 /* protected linkage table */
-
-/* Program header extensions. */
-#define PT_HP_TLS (PT_LOOS + 0x0)
-#define PT_HP_CORE_NONE (PT_LOOS + 0x1)
-#define PT_HP_CORE_VERSION (PT_LOOS + 0x2)
-#define PT_HP_CORE_KERNEL (PT_LOOS + 0x3)
-#define PT_HP_CORE_COMM (PT_LOOS + 0x4)
-#define PT_HP_CORE_PROC (PT_LOOS + 0x5)
-#define PT_HP_CORE_LOADABLE (PT_LOOS + 0x6)
-#define PT_HP_CORE_STACK (PT_LOOS + 0x7)
-#define PT_HP_CORE_SHM (PT_LOOS + 0x8)
-#define PT_HP_CORE_MMF (PT_LOOS + 0x9)
-#define PT_HP_PARALLEL (PT_LOOS + 0x10)
-#define PT_HP_FASTBIND (PT_LOOS + 0x11)
-#define PT_HP_OPT_ANNOT (PT_LOOS + 0x12)
-#define PT_HP_HSL_ANNOT (PT_LOOS + 0x13)
-#define PT_HP_STACK (PT_LOOS + 0x14)
-#define PT_HP_CORE_UTSNAME (PT_LOOS + 0x15)
-
-/* Binding information. */
-#define STB_HP_ALIAS (STB_LOOS + 0x0)
-
-/* Additional symbol types. */
-#define STT_HP_OPAQUE (STT_LOOS + 0x1)
-#define STT_HP_STUB (STT_LOOS + 0x2)
-
-/* Note types. */
-#define NT_HP_COMPILER 1
-#define NT_HP_COPYRIGHT 2
-#define NT_HP_VERSION 3
-#define NT_HP_SRCFILE_INFO 4
-#define NT_HP_LINKER 5
-#define NT_HP_INSTRUMENTED 6
-#define NT_HP_UX_OPTIONS 7
-
-#endif /* _ELF_HPPA_H */
diff --git a/include/elf/i370.h b/include/elf/i370.h
deleted file mode 100644
index 7b451ff9d..000000000
--- a/include/elf/i370.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/* i370 ELF support for BFD.
- Copyright 2000, 2002, 2010 Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-/* This file holds definitions specific to the i370 ELF ABI. Note
- that most of this is not actually implemented by BFD. */
-
-#ifndef _ELF_I370_H
-#define _ELF_I370_H
-
-#include "elf/reloc-macros.h"
-
-/* Processor specific section headers, sh_type field */
-
-#define SHT_ORDERED SHT_HIPROC /* Link editor is to sort the \
- entries in this section \
- based on the address \
- specified in the associated \
- symbol table entry. */
-
-#define EF_I370_RELOCATABLE 0x00010000 /* i370 -mrelocatable flag */
-#define EF_I370_RELOCATABLE_LIB 0x00008000 /* i370 -mrelocatable-lib flag */
-
-/* i370 relocations
- Note that there is really just one relocation that we currently
- support (and only one that we seem to need, at the moment), and
- that is the 31-bit address relocation. Note that the 370/390
- only supports a 31-bit (2GB) address space. */
-
-START_RELOC_NUMBERS (i370_reloc_type)
- RELOC_NUMBER (R_I370_NONE, 0)
- RELOC_NUMBER (R_I370_ADDR31, 1)
- RELOC_NUMBER (R_I370_ADDR32, 2)
- RELOC_NUMBER (R_I370_ADDR16, 3)
- RELOC_NUMBER (R_I370_REL31, 4)
- RELOC_NUMBER (R_I370_REL32, 5)
- RELOC_NUMBER (R_I370_ADDR12, 6)
- RELOC_NUMBER (R_I370_REL12, 7)
- RELOC_NUMBER (R_I370_ADDR8, 8)
- RELOC_NUMBER (R_I370_REL8, 9)
- RELOC_NUMBER (R_I370_COPY, 10)
- RELOC_NUMBER (R_I370_RELATIVE, 11)
-END_RELOC_NUMBERS (R_I370_max)
-
-#endif /* _ELF_I370_H */
diff --git a/include/elf/i386.h b/include/elf/i386.h
deleted file mode 100644
index c4750925f..000000000
--- a/include/elf/i386.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/* ix86 ELF support for BFD.
- Copyright 1998, 1999, 2000, 2002, 2004, 2005, 2006, 2009, 2010
- Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _ELF_I386_H
-#define _ELF_I386_H
-
-#include "elf/reloc-macros.h"
-
-START_RELOC_NUMBERS (elf_i386_reloc_type)
- RELOC_NUMBER (R_386_NONE, 0) /* No reloc */
- RELOC_NUMBER (R_386_32, 1) /* Direct 32 bit */
- RELOC_NUMBER (R_386_PC32, 2) /* PC relative 32 bit */
- RELOC_NUMBER (R_386_GOT32, 3) /* 32 bit GOT entry */
- RELOC_NUMBER (R_386_PLT32, 4) /* 32 bit PLT address */
- RELOC_NUMBER (R_386_COPY, 5) /* Copy symbol at runtime */
- RELOC_NUMBER (R_386_GLOB_DAT, 6) /* Create GOT entry */
- RELOC_NUMBER (R_386_JUMP_SLOT, 7) /* Create PLT entry */
- RELOC_NUMBER (R_386_RELATIVE, 8) /* Adjust by program base */
- RELOC_NUMBER (R_386_GOTOFF, 9) /* 32 bit offset to GOT */
- RELOC_NUMBER (R_386_GOTPC, 10) /* 32 bit PC relative offset to GOT */
- RELOC_NUMBER (R_386_32PLT, 11) /* Used by Sun */
- FAKE_RELOC (FIRST_INVALID_RELOC, 12)
- FAKE_RELOC (LAST_INVALID_RELOC, 13)
- RELOC_NUMBER (R_386_TLS_TPOFF,14)
- RELOC_NUMBER (R_386_TLS_IE, 15)
- RELOC_NUMBER (R_386_TLS_GOTIE,16)
- RELOC_NUMBER (R_386_TLS_LE, 17)
- RELOC_NUMBER (R_386_TLS_GD, 18)
- RELOC_NUMBER (R_386_TLS_LDM, 19)
- RELOC_NUMBER (R_386_16, 20)
- RELOC_NUMBER (R_386_PC16, 21)
- RELOC_NUMBER (R_386_8, 22)
- RELOC_NUMBER (R_386_PC8, 23)
- RELOC_NUMBER (R_386_TLS_GD_32, 24)
- RELOC_NUMBER (R_386_TLS_GD_PUSH, 25)
- RELOC_NUMBER (R_386_TLS_GD_CALL, 26)
- RELOC_NUMBER (R_386_TLS_GD_POP, 27)
- RELOC_NUMBER (R_386_TLS_LDM_32, 28)
- RELOC_NUMBER (R_386_TLS_LDM_PUSH, 29)
- RELOC_NUMBER (R_386_TLS_LDM_CALL, 30)
- RELOC_NUMBER (R_386_TLS_LDM_POP, 31)
- RELOC_NUMBER (R_386_TLS_LDO_32, 32)
- RELOC_NUMBER (R_386_TLS_IE_32, 33)
- RELOC_NUMBER (R_386_TLS_LE_32, 34)
- RELOC_NUMBER (R_386_TLS_DTPMOD32, 35)
- RELOC_NUMBER (R_386_TLS_DTPOFF32, 36)
- RELOC_NUMBER (R_386_TLS_TPOFF32, 37)
- RELOC_NUMBER (R_386_SIZE32, 38) /* 32-bit symbol size */
- RELOC_NUMBER (R_386_TLS_GOTDESC, 39)
- RELOC_NUMBER (R_386_TLS_DESC_CALL,40)
- RELOC_NUMBER (R_386_TLS_DESC, 41)
- RELOC_NUMBER (R_386_IRELATIVE, 42) /* Adjust indirectly by program base */
-
- /* Used by Intel. */
- RELOC_NUMBER (R_386_USED_BY_INTEL_200, 200)
-
- /* These are GNU extensions to enable C++ vtable garbage collection. */
- RELOC_NUMBER (R_386_GNU_VTINHERIT, 250)
- RELOC_NUMBER (R_386_GNU_VTENTRY, 251)
-END_RELOC_NUMBERS (R_386_max)
-
-#endif
diff --git a/include/elf/i860.h b/include/elf/i860.h
deleted file mode 100644
index 834c77660..000000000
--- a/include/elf/i860.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/* i860 ELF support for BFD.
- Copyright 2000, 2010 Free Software Foundation, Inc.
-
- Contributed by Jason Eckhardt <jle@cygnus.com>.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _ELF_I860_H
-#define _ELF_I860_H
-
-/* Note: i860 ELF is defined to use only RELA relocations. */
-
-#include "elf/reloc-macros.h"
-
-START_RELOC_NUMBERS (elf_i860_reloc_type)
- RELOC_NUMBER (R_860_NONE, 0x00) /* No reloc */
- RELOC_NUMBER (R_860_32, 0x01) /* S+A */
- RELOC_NUMBER (R_860_COPY, 0x02) /* No calculation */
- RELOC_NUMBER (R_860_GLOB_DAT, 0x03) /* S, Create GOT entry */
- RELOC_NUMBER (R_860_JUMP_SLOT, 0x04) /* S+A, Create PLT entry */
- RELOC_NUMBER (R_860_RELATIVE, 0x05) /* B+A, Adj by program base */
- RELOC_NUMBER (R_860_PC26, 0x30) /* (S+A-P) >> 2 */
- RELOC_NUMBER (R_860_PLT26, 0x31) /* (L+A-P) >> 2 */
- RELOC_NUMBER (R_860_PC16, 0x32) /* (S+A-P) >> 2 */
- RELOC_NUMBER (R_860_LOW0, 0x40) /* S+A */
- RELOC_NUMBER (R_860_SPLIT0, 0x42) /* S+A */
- RELOC_NUMBER (R_860_LOW1, 0x44) /* S+A */
- RELOC_NUMBER (R_860_SPLIT1, 0x46) /* S+A */
- RELOC_NUMBER (R_860_LOW2, 0x48) /* S+A */
- RELOC_NUMBER (R_860_SPLIT2, 0x4A) /* S+A */
- RELOC_NUMBER (R_860_LOW3, 0x4C) /* S+A */
- RELOC_NUMBER (R_860_LOGOT0, 0x50) /* G */
- RELOC_NUMBER (R_860_SPGOT0, 0x52) /* G */
- RELOC_NUMBER (R_860_LOGOT1, 0x54) /* G */
- RELOC_NUMBER (R_860_SPGOT1, 0x56) /* G */
- RELOC_NUMBER (R_860_LOGOTOFF0, 0x60) /* O */
- RELOC_NUMBER (R_860_SPGOTOFF0, 0x62) /* O */
- RELOC_NUMBER (R_860_LOGOTOFF1, 0x64) /* O */
- RELOC_NUMBER (R_860_SPGOTOFF1, 0x66) /* O */
- RELOC_NUMBER (R_860_LOGOTOFF2, 0x68) /* O */
- RELOC_NUMBER (R_860_LOGOTOFF3, 0x6C) /* O */
- RELOC_NUMBER (R_860_LOPC, 0x70) /* (S+A-P) >> 2 */
- RELOC_NUMBER (R_860_HIGHADJ, 0x80) /* hiadj(S+A) */
- RELOC_NUMBER (R_860_HAGOT, 0x90) /* hiadj(G) */
- RELOC_NUMBER (R_860_HAGOTOFF, 0xA0) /* hiadj(O) */
- RELOC_NUMBER (R_860_HAPC, 0xB0) /* hiadj((S+A-P) >> 2) */
- RELOC_NUMBER (R_860_HIGH, 0xC0) /* (S+A) >> 16 */
- RELOC_NUMBER (R_860_HIGOT, 0xD0) /* G >> 16 */
- RELOC_NUMBER (R_860_HIGOTOFF, 0xE0) /* O */
-END_RELOC_NUMBERS (R_860_max)
-
-#endif
diff --git a/include/elf/i960.h b/include/elf/i960.h
deleted file mode 100644
index c319b3226..000000000
--- a/include/elf/i960.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/* Intel 960 ELF support for BFD.
- Copyright 1999, 2000, 2010 Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _ELF_I960_H
-#define _ELF_I960_H
-
-#include "elf/reloc-macros.h"
-
-
-START_RELOC_NUMBERS (elf_i960_reloc_type)
- RELOC_NUMBER (R_960_NONE, 0)
- RELOC_NUMBER (R_960_12, 1)
- RELOC_NUMBER (R_960_32, 2)
- RELOC_NUMBER (R_960_IP24, 3)
- RELOC_NUMBER (R_960_SUB, 4)
- RELOC_NUMBER (R_960_OPTCALL, 5)
- RELOC_NUMBER (R_960_OPTCALLX, 6)
- RELOC_NUMBER (R_960_OPTCALLXA, 7)
-END_RELOC_NUMBERS (R_960_max)
-
-#endif /* _ELF_I960_H */
diff --git a/include/elf/ia64.h b/include/elf/ia64.h
deleted file mode 100644
index 7f2453d0e..000000000
--- a/include/elf/ia64.h
+++ /dev/null
@@ -1,416 +0,0 @@
-/* IA-64 ELF support for BFD.
- Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2008, 2009, 2010
- Free Software Foundation, Inc.
- Contributed by David Mosberger-Tang <davidm@hpl.hp.com>
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef _ELF_IA64_H
-#define _ELF_IA64_H
-
-/* Bits in the e_flags field of the Elf64_Ehdr: */
-
-#define EF_IA_64_MASKOS 0x0000000f /* OS-specific flags. */
-#define EF_IA_64_ARCH 0xff000000 /* Arch. version mask. */
-#define EF_IA_64_ARCHVER_1 (1 << 24) /* Arch. version level 1 compat. */
-
-/* ??? These four definitions are not part of the SVR4 ABI.
- They were present in David's initial code drop, so it is probable
- that they are used by HP/UX. */
-#define EF_IA_64_TRAPNIL (1 << 0) /* Trap NIL pointer dereferences. */
-#define EF_IA_64_EXT (1 << 2) /* Program uses arch. extensions. */
-#define EF_IA_64_BE (1 << 3) /* PSR BE bit set (big-endian). */
-#define EFA_IA_64_EAS2_3 0x23000000 /* IA64 EAS 2.3. */
-
-#define EF_IA_64_ABI64 (1 << 4) /* 64-bit ABI. */
-/* Not used yet. */
-#define EF_IA_64_REDUCEDFP (1 << 5) /* Only FP6-FP11 used. */
-#define EF_IA_64_CONS_GP (1 << 6) /* gp as program wide constant. */
-#define EF_IA_64_NOFUNCDESC_CONS_GP (1 << 7) /* And no function descriptors. */
-/* Not used yet. */
-#define EF_IA_64_ABSOLUTE (1 << 8) /* Load at absolute addresses. */
-
-/* OpenVMS speficic. */
-#define EF_IA_64_VMS_COMCOD 0x03 /* Completion code. */
-#define EF_IA_64_VMS_COMCOD_SUCCESS 0
-#define EF_IA_64_VMS_COMCOD_WARNING 1
-#define EF_IA_64_VMS_COMCOD_ERROR 2
-#define EF_IA_64_VMS_COMCOD_ABORT 3
-#define EF_IA_64_VMS_LINKAGES 0x04 /* Contains VMS linkages info. */
-
-#define ELF_STRING_ia64_archext ".IA_64.archext"
-#define ELF_STRING_ia64_pltoff ".IA_64.pltoff"
-#define ELF_STRING_ia64_unwind ".IA_64.unwind"
-#define ELF_STRING_ia64_unwind_info ".IA_64.unwind_info"
-#define ELF_STRING_ia64_unwind_once ".gnu.linkonce.ia64unw."
-#define ELF_STRING_ia64_unwind_info_once ".gnu.linkonce.ia64unwi."
-/* .IA_64.unwind_hdr is only used by HP-UX. */
-#define ELF_STRING_ia64_unwind_hdr ".IA_64.unwind_hdr"
-
-/* Bits in the sh_flags field of Elf64_Shdr: */
-
-#define SHF_IA_64_SHORT 0x10000000 /* Section near gp. */
-#define SHF_IA_64_NORECOV 0x20000000 /* Spec insns w/o recovery. */
-
-#define SHF_IA_64_HP_TLS 0x01000000 /* HP specific TLS flag. */
-
-#define SHF_IA_64_VMS_GLOBAL 0x0100000000ULL /* Global for clustering. */
-#define SHF_IA_64_VMS_OVERLAID 0x0200000000ULL /* To be overlaid. */
-#define SHF_IA_64_VMS_SHARED 0x0400000000ULL /* Shared btw processes. */
-#define SHF_IA_64_VMS_VECTOR 0x0800000000ULL /* Priv change mode vect. */
-#define SHF_IA_64_VMS_ALLOC_64BIT 0x1000000000ULL /* Allocate beyond 2GB. */
-#define SHF_IA_64_VMS_PROTECTED 0x2000000000ULL /* Export from sharable. */
-
-/* Possible values for sh_type in Elf64_Shdr: */
-
-#define SHT_IA_64_EXT (SHT_LOPROC + 0) /* Extension bits. */
-#define SHT_IA_64_UNWIND (SHT_LOPROC + 1) /* Unwind bits. */
-#define SHT_IA_64_LOPSREG (SHT_LOPROC + 0x8000000)
-/* ABI says (SHT_LOPROC + 0xfffffff) but I think it's a typo -- this makes sense. */
-#define SHT_IA_64_HIPSREG (SHT_LOPROC + 0x8ffffff)
-#define SHT_IA_64_PRIORITY_INIT (SHT_LOPROC + 0x9000000)
-
-/* SHT_IA_64_HP_OPT_ANOT is only generated by HPUX compilers for its
- optimization annotation section. GCC does not generate it but we
- want readelf to know what they are. Do not use two capital Ns in
- annotate or sed will turn it into 32 or 64 during the build. */
-#define SHT_IA_64_HP_OPT_ANOT 0x60000004
-
-/* OpenVMS section types. */
-/* The section contains PC-to-source correlation information for use by the
- VMS RTL's traceback facility. */
-#define SHT_IA_64_VMS_TRACE 0x60000000
-/* The section contains routine signature information for use by the
- translated image executive. */
-#define SHT_IA_64_VMS_TIE_SIGNATURES 0x60000001
-/* The section contains dwarf-3 information. */
-#define SHT_IA_64_VMS_DEBUG 0x60000002
-/* The section contains the dwarf-3 string table. */
-#define SHT_IA_64_VMS_DEBUG_STR 0x60000003
-/* The section contains linkage information to perform consistency checking
- accross object modules. */
-#define SHT_IA_64_VMS_LINKAGES 0x60000004
-/* The section allows the symbol vector in an image to be location through
- the section table. */
-#define SHT_IA_64_VMS_SYMBOL_VECTOR 0x60000005
-/* The section contains inter-image fixups. */
-#define SHT_IA_64_VMS_FIXUP 0x60000006
-/* The section contains unmangled name info. */
-#define SHT_IA_64_VMS_DISPLAY_NAME_INFO 0x60000007
-
-/* Bits in the p_flags field of Elf64_Phdr: */
-
-#define PF_IA_64_NORECOV 0x80000000
-
-/* Possible values for p_type in Elf64_Phdr: */
-
-#define PT_IA_64_ARCHEXT (PT_LOPROC + 0) /* Arch extension bits, */
-#define PT_IA_64_UNWIND (PT_LOPROC + 1) /* IA64 unwind bits. */
-
-/* HP-UX specific values for p_type in Elf64_Phdr.
- These values are currently just used to make
- readelf more usable on HP-UX. */
-
-#define PT_IA_64_HP_OPT_ANOT (PT_LOOS + 0x12)
-#define PT_IA_64_HP_HSL_ANOT (PT_LOOS + 0x13)
-#define PT_IA_64_HP_STACK (PT_LOOS + 0x14)
-
-/* Possible values for d_tag in Elf64_Dyn: */
-
-#define DT_IA_64_PLT_RESERVE (DT_LOPROC + 0)
-
-/* VMS specific values for d_tag in Elf64_Dyn: */
-
-#define DT_IA_64_VMS_SUBTYPE (DT_LOOS + 0)
-#define DT_IA_64_VMS_IMGIOCNT (DT_LOOS + 2)
-#define DT_IA_64_VMS_LNKFLAGS (DT_LOOS + 8)
-#define DT_IA_64_VMS_VIR_MEM_BLK_SIZ (DT_LOOS + 10)
-#define DT_IA_64_VMS_IDENT (DT_LOOS + 12)
-#define DT_IA_64_VMS_NEEDED_IDENT (DT_LOOS + 16)
-#define DT_IA_64_VMS_IMG_RELA_CNT (DT_LOOS + 18)
-#define DT_IA_64_VMS_SEG_RELA_CNT (DT_LOOS + 20)
-#define DT_IA_64_VMS_FIXUP_RELA_CNT (DT_LOOS + 22)
-#define DT_IA_64_VMS_FIXUP_NEEDED (DT_LOOS + 24)
-#define DT_IA_64_VMS_SYMVEC_CNT (DT_LOOS + 26)
-#define DT_IA_64_VMS_XLATED (DT_LOOS + 30)
-#define DT_IA_64_VMS_STACKSIZE (DT_LOOS + 32)
-#define DT_IA_64_VMS_UNWINDSZ (DT_LOOS + 34)
-#define DT_IA_64_VMS_UNWIND_CODSEG (DT_LOOS + 36)
-#define DT_IA_64_VMS_UNWIND_INFOSEG (DT_LOOS + 38)
-#define DT_IA_64_VMS_LINKTIME (DT_LOOS + 40)
-#define DT_IA_64_VMS_SEG_NO (DT_LOOS + 42)
-#define DT_IA_64_VMS_SYMVEC_OFFSET (DT_LOOS + 44)
-#define DT_IA_64_VMS_SYMVEC_SEG (DT_LOOS + 46)
-#define DT_IA_64_VMS_UNWIND_OFFSET (DT_LOOS + 48)
-#define DT_IA_64_VMS_UNWIND_SEG (DT_LOOS + 50)
-#define DT_IA_64_VMS_STRTAB_OFFSET (DT_LOOS + 52)
-#define DT_IA_64_VMS_SYSVER_OFFSET (DT_LOOS + 54)
-#define DT_IA_64_VMS_IMG_RELA_OFF (DT_LOOS + 56)
-#define DT_IA_64_VMS_SEG_RELA_OFF (DT_LOOS + 58)
-#define DT_IA_64_VMS_FIXUP_RELA_OFF (DT_LOOS + 60)
-#define DT_IA_64_VMS_PLTGOT_OFFSET (DT_LOOS + 62)
-#define DT_IA_64_VMS_PLTGOT_SEG (DT_LOOS + 64)
-#define DT_IA_64_VMS_FPMODE (DT_LOOS + 66)
-
-/* Values for DT_IA_64_LNKFLAGS. */
-#define VMS_LF_CALL_DEBUG 0x0001 /* Activate and call the debugger. */
-#define VMS_LF_NOP0BUFS 0x0002 /* RMS use of P0 for i/o disabled. */
-#define VMS_LF_P0IMAGE 0x0004 /* Image in P0 space only. */
-#define VMS_LF_MKTHREADS 0x0008 /* Multiple kernel threads enabled. */
-#define VMS_LF_UPCALLS 0x0010 /* Upcalls enabled. */
-#define VMS_LF_IMGSTA 0x0020 /* Use SYS$IMGSTA. */
-#define VMS_LF_INITIALIZE 0x0040 /* Image uses tfradr2. */
-#define VMS_LF_MAIN 0x0080 /* Image uses tfradr3. */
-#define VMS_LF_EXE_INIT 0x0200 /* Image uses tfradr4. */
-#define VMS_LF_TBK_IN_IMG 0x0400 /* Traceback records in image. */
-#define VMS_LF_DBG_IN_IMG 0x0800 /* Debug records in image. */
-#define VMS_LF_TBK_IN_DSF 0x1000 /* Traceback records in DSF. */
-#define VMS_LF_DBG_IN_DSF 0x2000 /* Debug records in DSF. */
-#define VMS_LF_SIGNATURES 0x4000 /* Signatures present. */
-#define VMS_LF_REL_SEG_OFF 0x8000 /* Maintain relative pos of seg. */
-
-/* This section only used by HP-UX, The HP linker gives weak symbols
- precedence over regular common symbols. We want common to override
- weak. Using this common instead of SHN_COMMON does that. */
-#define SHN_IA_64_ANSI_COMMON SHN_LORESERVE
-
-/* This section is only used by OpenVMS. Symbol is defined in the symbol
- vector (only possible for image files). */
-#define SHN_IA_64_VMS_SYMVEC SHN_LOOS
-
-/* OpenVMS IA64-specific symbol attributes. */
-#define VMS_STO_VISIBILITY 3 /* Alias of the standard field. */
-#define VMS_ST_VISIBILITY(o) ((o) & VMS_STO_VISIBILITY)
-#define VMS_STO_FUNC_TYPE 0x30 /* Function type. */
-#define VMS_ST_FUNC_TYPE(o) (((o) & VMS_STO_FUNC_TYPE) >> 4)
-# define VMS_SFT_CODE_ADDR 0 /* Symbol value is a code address. */
-# define VMS_SFT_SYMV_IDX 1 /* Symbol value is a symbol vector index. */
-# define VMS_SFT_FD 2 /* Symbol value is a function descriptor. */
-# define VMS_SFT_RESERVE 3 /* Reserved. */
-#define VMS_STO_LINKAGE 0xc0
-#define VMS_ST_LINKAGE(o) (((o) & VMS_STO_LINKAGE) >> 6)
-# define VMS_STL_IGNORE 0 /* No associated linkage. */
-# define VMS_STL_RESERVE 1
-# define VMS_STL_STD 2 /* Standard linkage with return value. */
-# define VMS_STL_LNK 3 /* Explicit represented in .vms_linkages. */
-
-/* OpenVMS specific symbol binding values. */
-#define STB_VMS_WEAK 11 /* VMS weak symbol. */
-#define STB_VMS_SYSTEM 12 /* System symbol. */
-
-/* OpenVMS specific fixup and relocation structures. */
-
-typedef struct
-{
- unsigned char fixup_offset[8];
- unsigned char type[4];
- unsigned char fixup_seg[4];
- unsigned char addend[8];
- unsigned char symvec_index[4];
- unsigned char data_type[4];
-} Elf64_External_VMS_IMAGE_FIXUP;
-
-typedef struct
-{
- unsigned char rela_offset[8];
- unsigned char type[4];
- unsigned char rela_seg[4];
- unsigned char addend[8];
- unsigned char sym_offset[8];
- unsigned char sym_seg[4];
- unsigned char fill_1[4];
-} Elf64_External_VMS_IMAGE_RELA;
-
-/* Note segments. VMS is special as it uses 64-bit entries. */
-
-typedef struct {
- unsigned char namesz[8]; /* Size of entry's owner string */
- unsigned char descsz[8]; /* Size of the note descriptor */
- unsigned char type[8]; /* Interpretation of the descriptor */
- char name[1]; /* Start of the name+desc data */
-} Elf64_External_VMS_Note;
-
-#define NT_VMS_MHD 1 /* Object module name, version, and date/time. */
-#define NT_VMS_LNM 2 /* Language processor name. */
-#define NT_VMS_SRC 3 /* Source files. */
-#define NT_VMS_TITLE 4 /* Title text. */
-#define NT_VMS_EIDC 5 /* Entity ident consistency check. */
-#define NT_VMS_FPMODE 6 /* Whole program floating-point mode. */
-#define NT_VMS_LINKTIME 101 /* Date/time image was linked. */
-#define NT_VMS_IMGNAM 102 /* Image name string. */
-#define NT_VMS_IMGID 103 /* Image ident string. */
-#define NT_VMS_LINKID 104 /* Linker ident string. */
-#define NT_VMS_IMGBID 105 /* Image build ident string. */
-#define NT_VMS_GSTNAM 106 /* Global Symbol Table Name. */
-#define NT_VMS_ORIG_DYN 107 /* Original setting of dynamic data. */
-#define NT_VMS_PATCHTIME 108 /* Date/time of last patch. */
-
-/* Corresponding data for NT_VMS_ORIG_DYM. */
-
-typedef struct {
- unsigned char major_id[4]; /* Should be 1. */
- unsigned char minor_id[4]; /* Should be 3. */
- unsigned char manipulation_date[8]; /* Original NT_VMS_LNKTIME. */
- unsigned char link_flags[8]; /* Original NT_VMS_LNKFLAGS. */
- unsigned char elf_flags[4]; /* Original ehdr flags. */
- unsigned char _pad[4];
- unsigned char imgid[1]; /* Original NT_VMS_IMGID. */
-} Elf64_External_VMS_ORIG_DYN_Note;
-
-/* IA64-specific relocation types: */
-
-/* Relocs apply to specific instructions within a bundle. The least
- significant 2 bits of the address indicate which instruction in the
- bundle the reloc refers to (0=first slot, 1=second slow, 2=third
- slot, 3=undefined) and the remaining bits give the address of the
- bundle (16 byte aligned).
-
- The top 5 bits of the reloc code specifies the expression type, the
- low 3 bits the format of the data word being relocated. */
-
-#include "elf/reloc-macros.h"
-
-START_RELOC_NUMBERS (elf_ia64_reloc_type)
- RELOC_NUMBER (R_IA64_NONE, 0x00) /* none */
-
- RELOC_NUMBER (R_IA64_IMM14, 0x21) /* symbol + addend, add imm14 */
- RELOC_NUMBER (R_IA64_IMM22, 0x22) /* symbol + addend, add imm22 */
- RELOC_NUMBER (R_IA64_IMM64, 0x23) /* symbol + addend, mov imm64 */
- RELOC_NUMBER (R_IA64_DIR32MSB, 0x24) /* symbol + addend, data4 MSB */
- RELOC_NUMBER (R_IA64_DIR32LSB, 0x25) /* symbol + addend, data4 LSB */
- RELOC_NUMBER (R_IA64_DIR64MSB, 0x26) /* symbol + addend, data8 MSB */
- RELOC_NUMBER (R_IA64_DIR64LSB, 0x27) /* symbol + addend, data8 LSB */
-
- RELOC_NUMBER (R_IA64_GPREL22, 0x2a) /* @gprel(sym+add), add imm22 */
- RELOC_NUMBER (R_IA64_GPREL64I, 0x2b) /* @gprel(sym+add), mov imm64 */
- RELOC_NUMBER (R_IA64_GPREL32MSB, 0x2c) /* @gprel(sym+add), data4 MSB */
- RELOC_NUMBER (R_IA64_GPREL32LSB, 0x2d) /* @gprel(sym+add), data4 LSB */
- RELOC_NUMBER (R_IA64_GPREL64MSB, 0x2e) /* @gprel(sym+add), data8 MSB */
- RELOC_NUMBER (R_IA64_GPREL64LSB, 0x2f) /* @gprel(sym+add), data8 LSB */
-
- RELOC_NUMBER (R_IA64_LTOFF22, 0x32) /* @ltoff(sym+add), add imm22 */
- RELOC_NUMBER (R_IA64_LTOFF64I, 0x33) /* @ltoff(sym+add), mov imm64 */
-
- RELOC_NUMBER (R_IA64_PLTOFF22, 0x3a) /* @pltoff(sym+add), add imm22 */
- RELOC_NUMBER (R_IA64_PLTOFF64I, 0x3b) /* @pltoff(sym+add), mov imm64 */
- RELOC_NUMBER (R_IA64_PLTOFF64MSB, 0x3e) /* @pltoff(sym+add), data8 MSB */
- RELOC_NUMBER (R_IA64_PLTOFF64LSB, 0x3f) /* @pltoff(sym+add), data8 LSB */
-
- RELOC_NUMBER (R_IA64_FPTR64I, 0x43) /* @fptr(sym+add), mov imm64 */
- RELOC_NUMBER (R_IA64_FPTR32MSB, 0x44) /* @fptr(sym+add), data4 MSB */
- RELOC_NUMBER (R_IA64_FPTR32LSB, 0x45) /* @fptr(sym+add), data4 LSB */
- RELOC_NUMBER (R_IA64_FPTR64MSB, 0x46) /* @fptr(sym+add), data8 MSB */
- RELOC_NUMBER (R_IA64_FPTR64LSB, 0x47) /* @fptr(sym+add), data8 LSB */
-
- RELOC_NUMBER (R_IA64_PCREL60B, 0x48) /* @pcrel(sym+add), brl */
- RELOC_NUMBER (R_IA64_PCREL21B, 0x49) /* @pcrel(sym+add), ptb, call */
- RELOC_NUMBER (R_IA64_PCREL21M, 0x4a) /* @pcrel(sym+add), chk.s */
- RELOC_NUMBER (R_IA64_PCREL21F, 0x4b) /* @pcrel(sym+add), fchkf */
- RELOC_NUMBER (R_IA64_PCREL32MSB, 0x4c) /* @pcrel(sym+add), data4 MSB */
- RELOC_NUMBER (R_IA64_PCREL32LSB, 0x4d) /* @pcrel(sym+add), data4 LSB */
- RELOC_NUMBER (R_IA64_PCREL64MSB, 0x4e) /* @pcrel(sym+add), data8 MSB */
- RELOC_NUMBER (R_IA64_PCREL64LSB, 0x4f) /* @pcrel(sym+add), data8 LSB */
-
- RELOC_NUMBER (R_IA64_LTOFF_FPTR22, 0x52) /* @ltoff(@fptr(s+a)), imm22 */
- RELOC_NUMBER (R_IA64_LTOFF_FPTR64I, 0x53) /* @ltoff(@fptr(s+a)), imm64 */
- RELOC_NUMBER (R_IA64_LTOFF_FPTR32MSB, 0x54) /* @ltoff(@fptr(s+a)), 4 MSB */
- RELOC_NUMBER (R_IA64_LTOFF_FPTR32LSB, 0x55) /* @ltoff(@fptr(s+a)), 4 LSB */
- RELOC_NUMBER (R_IA64_LTOFF_FPTR64MSB, 0x56) /* @ltoff(@fptr(s+a)), 8 MSB */
- RELOC_NUMBER (R_IA64_LTOFF_FPTR64LSB, 0x57) /* @ltoff(@fptr(s+a)), 8 LSB */
-
- RELOC_NUMBER (R_IA64_SEGREL32MSB, 0x5c) /* @segrel(sym+add), data4 MSB */
- RELOC_NUMBER (R_IA64_SEGREL32LSB, 0x5d) /* @segrel(sym+add), data4 LSB */
- RELOC_NUMBER (R_IA64_SEGREL64MSB, 0x5e) /* @segrel(sym+add), data8 MSB */
- RELOC_NUMBER (R_IA64_SEGREL64LSB, 0x5f) /* @segrel(sym+add), data8 LSB */
-
- RELOC_NUMBER (R_IA64_SECREL32MSB, 0x64) /* @secrel(sym+add), data4 MSB */
- RELOC_NUMBER (R_IA64_SECREL32LSB, 0x65) /* @secrel(sym+add), data4 LSB */
- RELOC_NUMBER (R_IA64_SECREL64MSB, 0x66) /* @secrel(sym+add), data8 MSB */
- RELOC_NUMBER (R_IA64_SECREL64LSB, 0x67) /* @secrel(sym+add), data8 LSB */
-
- RELOC_NUMBER (R_IA64_REL32MSB, 0x6c) /* data 4 + REL */
- RELOC_NUMBER (R_IA64_REL32LSB, 0x6d) /* data 4 + REL */
- RELOC_NUMBER (R_IA64_REL64MSB, 0x6e) /* data 8 + REL */
- RELOC_NUMBER (R_IA64_REL64LSB, 0x6f) /* data 8 + REL */
-
- RELOC_NUMBER (R_IA64_LTV32MSB, 0x74) /* symbol + addend, data4 MSB */
- RELOC_NUMBER (R_IA64_LTV32LSB, 0x75) /* symbol + addend, data4 LSB */
- RELOC_NUMBER (R_IA64_LTV64MSB, 0x76) /* symbol + addend, data8 MSB */
- RELOC_NUMBER (R_IA64_LTV64LSB, 0x77) /* symbol + addend, data8 LSB */
-
- RELOC_NUMBER (R_IA64_PCREL21BI, 0x79) /* @pcrel(sym+add), ptb, call */
- RELOC_NUMBER (R_IA64_PCREL22, 0x7a) /* @pcrel(sym+add), imm22 */
- RELOC_NUMBER (R_IA64_PCREL64I, 0x7b) /* @pcrel(sym+add), imm64 */
-
- RELOC_NUMBER (R_IA64_IPLTMSB, 0x80) /* dynamic reloc, imported PLT, MSB */
- RELOC_NUMBER (R_IA64_IPLTLSB, 0x81) /* dynamic reloc, imported PLT, LSB */
- RELOC_NUMBER (R_IA64_COPY, 0x84) /* dynamic reloc, data copy */
- RELOC_NUMBER (R_IA64_LTOFF22X, 0x86) /* LTOFF22, relaxable. */
- RELOC_NUMBER (R_IA64_LDXMOV, 0x87) /* Use of LTOFF22X. */
-
- RELOC_NUMBER (R_IA64_TPREL14, 0x91) /* @tprel(sym+add), add imm14 */
- RELOC_NUMBER (R_IA64_TPREL22, 0x92) /* @tprel(sym+add), add imm22 */
- RELOC_NUMBER (R_IA64_TPREL64I, 0x93) /* @tprel(sym+add), add imm64 */
- RELOC_NUMBER (R_IA64_TPREL64MSB, 0x96) /* @tprel(sym+add), data8 MSB */
- RELOC_NUMBER (R_IA64_TPREL64LSB, 0x97) /* @tprel(sym+add), data8 LSB */
-
- RELOC_NUMBER (R_IA64_LTOFF_TPREL22, 0x9a) /* @ltoff(@tprel(s+a)), add imm22 */
-
- RELOC_NUMBER (R_IA64_DTPMOD64MSB, 0xa6) /* @dtpmod(sym+add), data8 MSB */
- RELOC_NUMBER (R_IA64_DTPMOD64LSB, 0xa7) /* @dtpmod(sym+add), data8 LSB */
- RELOC_NUMBER (R_IA64_LTOFF_DTPMOD22, 0xaa) /* @ltoff(@dtpmod(s+a)), imm22 */
-
- RELOC_NUMBER (R_IA64_DTPREL14, 0xb1) /* @dtprel(sym+add), imm14 */
- RELOC_NUMBER (R_IA64_DTPREL22, 0xb2) /* @dtprel(sym+add), imm22 */
- RELOC_NUMBER (R_IA64_DTPREL64I, 0xb3) /* @dtprel(sym+add), imm64 */
- RELOC_NUMBER (R_IA64_DTPREL32MSB, 0xb4) /* @dtprel(sym+add), data4 MSB */
- RELOC_NUMBER (R_IA64_DTPREL32LSB, 0xb5) /* @dtprel(sym+add), data4 LSB */
- RELOC_NUMBER (R_IA64_DTPREL64MSB, 0xb6) /* @dtprel(sym+add), data8 MSB */
- RELOC_NUMBER (R_IA64_DTPREL64LSB, 0xb7) /* @dtprel(sym+add), data8 LSB */
-
- RELOC_NUMBER (R_IA64_LTOFF_DTPREL22, 0xba) /* @ltoff(@dtprel(s+a)), imm22 */
-
- FAKE_RELOC (R_IA64_MAX_RELOC_CODE, 0xba)
-
- /* OpenVMS specific relocs. */
- RELOC_NUMBER (R_IA64_VMS_DIR8, 0x70000000) /* S + A */
- RELOC_NUMBER (R_IA64_VMS_DIR16LSB, 0x70000001) /* S + A */
- RELOC_NUMBER (R_IA64_VMS_CALL_SIGNATURE, 0x70000002)
- RELOC_NUMBER (R_IA64_VMS_EXECLET_FUNC, 0x70000003)
- RELOC_NUMBER (R_IA64_VMS_EXECLET_DATA, 0x70000004)
- RELOC_NUMBER (R_IA64_VMS_FIX8, 0x70000005) /* S + A */
- RELOC_NUMBER (R_IA64_VMS_FIX16, 0x70000006) /* S + A */
- RELOC_NUMBER (R_IA64_VMS_FIX32, 0x70000007) /* S + A */
- RELOC_NUMBER (R_IA64_VMS_FIX64, 0x70000008) /* S + A */
- RELOC_NUMBER (R_IA64_VMS_FIXFD, 0x70000009)
- RELOC_NUMBER (R_IA64_VMS_ACC_LOAD, 0x7000000a) /* ACC = S + A */
- RELOC_NUMBER (R_IA64_VMS_ACC_ADD, 0x7000000b) /* ACC += S + A */
- RELOC_NUMBER (R_IA64_VMS_ACC_SUB, 0x7000000c) /* ACC -= S + A */
- RELOC_NUMBER (R_IA64_VMS_ACC_MUL, 0x7000000d) /* ACC *= S + A */
- RELOC_NUMBER (R_IA64_VMS_ACC_DIV, 0x7000000e) /* ACC /= S + A */
- RELOC_NUMBER (R_IA64_VMS_ACC_AND, 0x7000000f) /* ACC &= S + A */
- RELOC_NUMBER (R_IA64_VMS_ACC_IOR, 0x70000010) /* ACC |= S + A */
- RELOC_NUMBER (R_IA64_VMS_ACC_EOR, 0x70000011) /* ACC ^= S + A */
- RELOC_NUMBER (R_IA64_VMS_ACC_ASH, 0x70000012) /* ACC >>= S + A */
- RELOC_NUMBER (R_IA64_VMS_ACC_STO8, 0x70000014) /* ACC */
- RELOC_NUMBER (R_IA64_VMS_ACC_STO16LSH, 0x70000015) /* ACC */
- RELOC_NUMBER (R_IA64_VMS_ACC_STO32LSH, 0x70000016) /* ACC */
- RELOC_NUMBER (R_IA64_VMS_ACC_STO64LSH, 0x70000017) /* ACC */
-END_RELOC_NUMBERS (R_IA64_max)
-
-#endif /* _ELF_IA64_H */
diff --git a/include/elf/internal.h b/include/elf/internal.h
deleted file mode 100644
index 461503783..000000000
--- a/include/elf/internal.h
+++ /dev/null
@@ -1,360 +0,0 @@
-/* ELF support for BFD.
- Copyright 1991, 1992, 1993, 1994, 1995, 1997, 1998, 2000, 2001, 2002,
- 2003, 2006, 2007, 2008, 2010, 2011 Free Software Foundation, Inc.
-
- Written by Fred Fish @ Cygnus Support, from information published
- in "UNIX System V Release 4, Programmers Guide: ANSI C and
- Programming Support Tools".
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-/* This file is part of ELF support for BFD, and contains the portions
- that describe how ELF is represented internally in the BFD library.
- I.E. it describes the in-memory representation of ELF. It requires
- the elf-common.h file which contains the portions that are common to
- both the internal and external representations. */
-
-/* NOTE that these structures are not kept in the same order as they appear
- in the object file. In some cases they've been reordered for more optimal
- packing under various circumstances. */
-
-#ifndef _ELF_INTERNAL_H
-#define _ELF_INTERNAL_H
-
-/* Special section indices, which may show up in st_shndx fields, among
- other places. */
-
-#undef SHN_UNDEF
-#undef SHN_LORESERVE
-#undef SHN_LOPROC
-#undef SHN_HIPROC
-#undef SHN_LOOS
-#undef SHN_HIOS
-#undef SHN_ABS
-#undef SHN_COMMON
-#undef SHN_XINDEX
-#undef SHN_HIRESERVE
-#define SHN_UNDEF 0 /* Undefined section reference */
-#define SHN_LORESERVE (-0x100u) /* Begin range of reserved indices */
-#define SHN_LOPROC (-0x100u) /* Begin range of appl-specific */
-#define SHN_HIPROC (-0xE1u) /* End range of appl-specific */
-#define SHN_LOOS (-0xE0u) /* OS specific semantics, lo */
-#define SHN_HIOS (-0xC1u) /* OS specific semantics, hi */
-#define SHN_ABS (-0xFu) /* Associated symbol is absolute */
-#define SHN_COMMON (-0xEu) /* Associated symbol is in common */
-#define SHN_XINDEX (-0x1u) /* Section index is held elsewhere */
-#define SHN_HIRESERVE (-0x1u) /* End range of reserved indices */
-#define SHN_BAD (-0x101u) /* Used internally by bfd */
-
-/* ELF Header */
-
-#define EI_NIDENT 16 /* Size of e_ident[] */
-
-typedef struct elf_internal_ehdr {
- unsigned char e_ident[EI_NIDENT]; /* ELF "magic number" */
- bfd_vma e_entry; /* Entry point virtual address */
- bfd_size_type e_phoff; /* Program header table file offset */
- bfd_size_type e_shoff; /* Section header table file offset */
- unsigned long e_version; /* Identifies object file version */
- unsigned long e_flags; /* Processor-specific flags */
- unsigned short e_type; /* Identifies object file type */
- unsigned short e_machine; /* Specifies required architecture */
- unsigned int e_ehsize; /* ELF header size in bytes */
- unsigned int e_phentsize; /* Program header table entry size */
- unsigned int e_phnum; /* Program header table entry count */
- unsigned int e_shentsize; /* Section header table entry size */
- unsigned int e_shnum; /* Section header table entry count */
- unsigned int e_shstrndx; /* Section header string table index */
-} Elf_Internal_Ehdr;
-
-/* Program header */
-
-struct elf_internal_phdr {
- unsigned long p_type; /* Identifies program segment type */
- unsigned long p_flags; /* Segment flags */
- bfd_vma p_offset; /* Segment file offset */
- bfd_vma p_vaddr; /* Segment virtual address */
- bfd_vma p_paddr; /* Segment physical address */
- bfd_vma p_filesz; /* Segment size in file */
- bfd_vma p_memsz; /* Segment size in memory */
- bfd_vma p_align; /* Segment alignment, file & memory */
-};
-
-typedef struct elf_internal_phdr Elf_Internal_Phdr;
-
-/* Section header */
-
-typedef struct elf_internal_shdr {
- unsigned int sh_name; /* Section name, index in string tbl */
- unsigned int sh_type; /* Type of section */
- bfd_vma sh_flags; /* Miscellaneous section attributes */
- bfd_vma sh_addr; /* Section virtual addr at execution */
- file_ptr sh_offset; /* Section file offset */
- bfd_size_type sh_size; /* Size of section in bytes */
- unsigned int sh_link; /* Index of another section */
- unsigned int sh_info; /* Additional section information */
- bfd_vma sh_addralign; /* Section alignment */
- bfd_size_type sh_entsize; /* Entry size if section holds table */
-
- /* The internal rep also has some cached info associated with it. */
- asection * bfd_section; /* Associated BFD section. */
- unsigned char *contents; /* Section contents. */
-} Elf_Internal_Shdr;
-
-/* Symbol table entry */
-
-struct elf_internal_sym {
- bfd_vma st_value; /* Value of the symbol */
- bfd_vma st_size; /* Associated symbol size */
- unsigned long st_name; /* Symbol name, index in string tbl */
- unsigned char st_info; /* Type and binding attributes */
- unsigned char st_other; /* Visibilty, and target specific */
- unsigned char st_target_internal; /* Internal-only information */
- unsigned int st_shndx; /* Associated section index */
-};
-
-typedef struct elf_internal_sym Elf_Internal_Sym;
-
-/* Note segments */
-
-typedef struct elf_internal_note {
- unsigned long namesz; /* Size of entry's owner string */
- unsigned long descsz; /* Size of the note descriptor */
- unsigned long type; /* Interpretation of the descriptor */
- char * namedata; /* Start of the name+desc data */
- char * descdata; /* Start of the desc data */
- bfd_vma descpos; /* File offset of the descdata */
-} Elf_Internal_Note;
-
-/* Relocation Entries */
-
-typedef struct elf_internal_rela {
- bfd_vma r_offset; /* Location at which to apply the action */
- bfd_vma r_info; /* Index and Type of relocation */
- bfd_vma r_addend; /* Constant addend used to compute value */
-} Elf_Internal_Rela;
-
-/* dynamic section structure */
-
-typedef struct elf_internal_dyn {
- /* This needs to support 64-bit values in elf64. */
- bfd_vma d_tag; /* entry tag value */
- union {
- /* This needs to support 64-bit values in elf64. */
- bfd_vma d_val;
- bfd_vma d_ptr;
- } d_un;
-} Elf_Internal_Dyn;
-
-/* This structure appears in a SHT_GNU_verdef section. */
-
-typedef struct elf_internal_verdef {
- unsigned short vd_version; /* Version number of structure. */
- unsigned short vd_flags; /* Flags (VER_FLG_*). */
- unsigned short vd_ndx; /* Version index. */
- unsigned short vd_cnt; /* Number of verdaux entries. */
- unsigned long vd_hash; /* Hash of name. */
- unsigned long vd_aux; /* Offset to verdaux entries. */
- unsigned long vd_next; /* Offset to next verdef. */
-
- /* These fields are set up when BFD reads in the structure. FIXME:
- It would be cleaner to store these in a different structure. */
- bfd *vd_bfd; /* BFD. */
- const char *vd_nodename; /* Version name. */
- struct elf_internal_verdef *vd_nextdef; /* vd_next as pointer. */
- struct elf_internal_verdaux *vd_auxptr; /* vd_aux as pointer. */
- unsigned int vd_exp_refno; /* Used by the linker. */
-} Elf_Internal_Verdef;
-
-/* This structure appears in a SHT_GNU_verdef section. */
-
-typedef struct elf_internal_verdaux {
- unsigned long vda_name; /* String table offset of name. */
- unsigned long vda_next; /* Offset to next verdaux. */
-
- /* These fields are set up when BFD reads in the structure. FIXME:
- It would be cleaner to store these in a different structure. */
- const char *vda_nodename; /* vda_name as pointer. */
- struct elf_internal_verdaux *vda_nextptr; /* vda_next as pointer. */
-} Elf_Internal_Verdaux;
-
-/* This structure appears in a SHT_GNU_verneed section. */
-
-typedef struct elf_internal_verneed {
- unsigned short vn_version; /* Version number of structure. */
- unsigned short vn_cnt; /* Number of vernaux entries. */
- unsigned long vn_file; /* String table offset of library name. */
- unsigned long vn_aux; /* Offset to vernaux entries. */
- unsigned long vn_next; /* Offset to next verneed. */
-
- /* These fields are set up when BFD reads in the structure. FIXME:
- It would be cleaner to store these in a different structure. */
- bfd *vn_bfd; /* BFD. */
- const char *vn_filename; /* vn_file as pointer. */
- struct elf_internal_vernaux *vn_auxptr; /* vn_aux as pointer. */
- struct elf_internal_verneed *vn_nextref; /* vn_nextref as pointer. */
-} Elf_Internal_Verneed;
-
-/* This structure appears in a SHT_GNU_verneed section. */
-
-typedef struct elf_internal_vernaux {
- unsigned long vna_hash; /* Hash of dependency name. */
- unsigned short vna_flags; /* Flags (VER_FLG_*). */
- unsigned short vna_other; /* Unused. */
- unsigned long vna_name; /* String table offset to version name. */
- unsigned long vna_next; /* Offset to next vernaux. */
-
- /* These fields are set up when BFD reads in the structure. FIXME:
- It would be cleaner to store these in a different structure. */
- const char *vna_nodename; /* vna_name as pointer. */
- struct elf_internal_vernaux *vna_nextptr; /* vna_next as pointer. */
-} Elf_Internal_Vernaux;
-
-/* This structure appears in a SHT_GNU_versym section. This is not a
- standard ELF structure; ELF just uses Elf32_Half. */
-
-typedef struct elf_internal_versym {
- unsigned short vs_vers;
-} Elf_Internal_Versym;
-
-/* Structure for syminfo section. */
-typedef struct
-{
- unsigned short int si_boundto;
- unsigned short int si_flags;
-} Elf_Internal_Syminfo;
-
-/* This structure appears on the stack and in NT_AUXV core file notes. */
-typedef struct
-{
- bfd_vma a_type;
- bfd_vma a_val;
-} Elf_Internal_Auxv;
-
-
-/* This structure is used to describe how sections should be assigned
- to program segments. */
-
-struct elf_segment_map
-{
- /* Next program segment. */
- struct elf_segment_map *next;
- /* Program segment type. */
- unsigned long p_type;
- /* Program segment flags. */
- unsigned long p_flags;
- /* Program segment physical address. */
- bfd_vma p_paddr;
- /* Program segment virtual address offset from section vma. */
- bfd_vma p_vaddr_offset;
- /* Program segment alignment. */
- bfd_vma p_align;
- /* Segment size in file and memory */
- bfd_vma p_size;
- /* Required size of filehdr + phdrs, if non-zero */
- bfd_vma header_size;
- /* Whether the p_flags field is valid; if not, the flags are based
- on the section flags. */
- unsigned int p_flags_valid : 1;
- /* Whether the p_paddr field is valid; if not, the physical address
- is based on the section lma values. */
- unsigned int p_paddr_valid : 1;
- /* Whether the p_align field is valid; if not, PT_LOAD segment
- alignment is based on the default maximum page size. */
- unsigned int p_align_valid : 1;
- /* Whether the p_size field is valid; if not, the size are based
- on the section sizes. */
- unsigned int p_size_valid : 1;
- /* Whether this segment includes the file header. */
- unsigned int includes_filehdr : 1;
- /* Whether this segment includes the program headers. */
- unsigned int includes_phdrs : 1;
- /* Number of sections (may be 0). */
- unsigned int count;
- /* Sections. Actual number of elements is in count field. */
- asection *sections[1];
-};
-
-/* .tbss is special. It doesn't contribute memory space to normal
- segments and it doesn't take file space in normal segments. */
-#define ELF_TBSS_SPECIAL(sec_hdr, segment) \
- (((sec_hdr)->sh_flags & SHF_TLS) != 0 \
- && (sec_hdr)->sh_type == SHT_NOBITS \
- && (segment)->p_type != PT_TLS)
-
-#define ELF_SECTION_SIZE(sec_hdr, segment) \
- (ELF_TBSS_SPECIAL(sec_hdr, segment) ? 0 : (sec_hdr)->sh_size)
-
-/* Decide if the section SEC_HDR is in SEGMENT. If CHECK_VMA, then
- VMAs are checked for alloc sections. If STRICT, then a zero size
- section won't match at the end of a segment, unless the segment
- is also zero size. Regardless of STRICT and CHECK_VMA, zero size
- sections won't match at the start or end of PT_DYNAMIC, unless
- PT_DYNAMIC is itself zero sized. */
-#define ELF_SECTION_IN_SEGMENT_1(sec_hdr, segment, check_vma, strict) \
- ((/* Only PT_LOAD, PT_GNU_RELRO and PT_TLS segments can contain \
- SHF_TLS sections. */ \
- ((((sec_hdr)->sh_flags & SHF_TLS) != 0) \
- && ((segment)->p_type == PT_TLS \
- || (segment)->p_type == PT_GNU_RELRO \
- || (segment)->p_type == PT_LOAD)) \
- /* PT_TLS segment contains only SHF_TLS sections, PT_PHDR no \
- sections at all. */ \
- || (((sec_hdr)->sh_flags & SHF_TLS) == 0 \
- && (segment)->p_type != PT_TLS \
- && (segment)->p_type != PT_PHDR)) \
- /* Any section besides one of type SHT_NOBITS must have file \
- offsets within the segment. */ \
- && ((sec_hdr)->sh_type == SHT_NOBITS \
- || ((bfd_vma) (sec_hdr)->sh_offset >= (segment)->p_offset \
- && (!(strict) \
- || ((sec_hdr)->sh_offset - (segment)->p_offset \
- <= (segment)->p_filesz - 1)) \
- && (((sec_hdr)->sh_offset - (segment)->p_offset \
- + ELF_SECTION_SIZE(sec_hdr, segment)) \
- <= (segment)->p_filesz))) \
- /* SHF_ALLOC sections must have VMAs within the segment. */ \
- && (!(check_vma) \
- || ((sec_hdr)->sh_flags & SHF_ALLOC) == 0 \
- || ((sec_hdr)->sh_addr >= (segment)->p_vaddr \
- && (!(strict) \
- || ((sec_hdr)->sh_addr - (segment)->p_vaddr \
- <= (segment)->p_memsz - 1)) \
- && (((sec_hdr)->sh_addr - (segment)->p_vaddr \
- + ELF_SECTION_SIZE(sec_hdr, segment)) \
- <= (segment)->p_memsz))) \
- /* No zero size sections at start or end of PT_DYNAMIC. */ \
- && ((segment)->p_type != PT_DYNAMIC \
- || (sec_hdr)->sh_size != 0 \
- || (segment)->p_memsz == 0 \
- || (((sec_hdr)->sh_type == SHT_NOBITS \
- || ((bfd_vma) (sec_hdr)->sh_offset > (segment)->p_offset \
- && ((sec_hdr)->sh_offset - (segment)->p_offset \
- < (segment)->p_filesz))) \
- && (((sec_hdr)->sh_flags & SHF_ALLOC) == 0 \
- || ((sec_hdr)->sh_addr > (segment)->p_vaddr \
- && ((sec_hdr)->sh_addr - (segment)->p_vaddr \
- < (segment)->p_memsz))))))
-
-#define ELF_SECTION_IN_SEGMENT(sec_hdr, segment) \
- (ELF_SECTION_IN_SEGMENT_1 (sec_hdr, segment, 1, 0))
-
-#define ELF_SECTION_IN_SEGMENT_STRICT(sec_hdr, segment) \
- (ELF_SECTION_IN_SEGMENT_1 (sec_hdr, segment, 1, 1))
-
-#endif /* _ELF_INTERNAL_H */
diff --git a/include/elf/ip2k.h b/include/elf/ip2k.h
deleted file mode 100644
index 8b4f36ef3..000000000
--- a/include/elf/ip2k.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/* IP2xxx ELF support for BFD.
- Copyright (C) 2000, 2002, 2010 Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _ELF_IP2K_H
-#define _ELF_IP2K_H
-
-#include "elf/reloc-macros.h"
-
-/* Relocations. */
-START_RELOC_NUMBERS (elf_ip2k_reloc_type)
- RELOC_NUMBER (R_IP2K_NONE, 0)
- RELOC_NUMBER (R_IP2K_16, 1)
- RELOC_NUMBER (R_IP2K_32, 2)
- RELOC_NUMBER (R_IP2K_FR9, 3)
- RELOC_NUMBER (R_IP2K_BANK, 4)
- RELOC_NUMBER (R_IP2K_ADDR16CJP, 5)
- RELOC_NUMBER (R_IP2K_PAGE3, 6)
- RELOC_NUMBER (R_IP2K_LO8DATA, 7)
- RELOC_NUMBER (R_IP2K_HI8DATA, 8)
- RELOC_NUMBER (R_IP2K_LO8INSN, 9)
- RELOC_NUMBER (R_IP2K_HI8INSN, 10)
- RELOC_NUMBER (R_IP2K_PC_SKIP, 11)
- RELOC_NUMBER (R_IP2K_TEXT, 12)
- RELOC_NUMBER (R_IP2K_FR_OFFSET, 13)
- RELOC_NUMBER (R_IP2K_EX8DATA, 14)
-END_RELOC_NUMBERS(R_IP2K_max)
-
-
-/* Define the data & instruction memory discriminator. In a linked
- executable, an symbol should be deemed to point to an instruction
- if ((address & IP2K_INSN_MASK) == IP2K_INSN_VALUE), and similarly
- for the data space. See also `ld/emulparams/elf32ip2k.sh'. */
-/* ??? Consider extending the _MASK values to include all the
- intermediate bits that must be zero due to the limited physical
- memory size on the IP2K. */
-
-#define IP2K_DATA_MASK 0xff000000
-#define IP2K_DATA_VALUE 0x01000000
-#define IP2K_INSN_MASK 0xff000000
-#define IP2K_INSN_VALUE 0x02000000
-
-/* The location of the memory mapped hardware stack. */
-#define IP2K_STACK_VALUE 0x0f000000
-#define IP2K_STACK_SIZE 0x20
-
-#endif /* _ELF_IP2K_H */
diff --git a/include/elf/iq2000.h b/include/elf/iq2000.h
deleted file mode 100644
index 0f8e69714..000000000
--- a/include/elf/iq2000.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* IQ2000 ELF support for BFD.
- Copyright (C) 2002, 2003, 2010 Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _ELF_IQ2000_H
-#define _ELF_IQ2000_H
-
-#include "elf/reloc-macros.h"
-
-/* Relocations. */
-START_RELOC_NUMBERS (elf_iq2000_reloc_type)
- RELOC_NUMBER (R_IQ2000_NONE, 0)
- RELOC_NUMBER (R_IQ2000_16, 1)
- RELOC_NUMBER (R_IQ2000_32, 2)
- RELOC_NUMBER (R_IQ2000_26, 3)
- RELOC_NUMBER (R_IQ2000_PC16, 4)
- RELOC_NUMBER (R_IQ2000_HI16, 5)
- RELOC_NUMBER (R_IQ2000_LO16, 6)
- RELOC_NUMBER (R_IQ2000_OFFSET_16, 7)
- RELOC_NUMBER (R_IQ2000_OFFSET_21, 8)
- RELOC_NUMBER (R_IQ2000_UHI16, 9)
- RELOC_NUMBER (R_IQ2000_32_DEBUG, 10)
- RELOC_NUMBER (R_IQ2000_GNU_VTINHERIT, 200)
- RELOC_NUMBER (R_IQ2000_GNU_VTENTRY, 201)
-END_RELOC_NUMBERS(R_IQ2000_max)
-
-#define EF_IQ2000_CPU_IQ2000 0x00000001 /* default */
-#define EF_IQ2000_CPU_IQ10 0x00000002 /* IQ10 */
-#define EF_IQ2000_CPU_MASK 0x00000003 /* specific cpu bits */
-#define EF_IQ2000_ALL_FLAGS (EF_IQ2000_CPU_MASK)
-
-/* Define the data & instruction memory discriminator. In a linked
- executable, an symbol should be deemed to point to an instruction
- if ((address & IQ2000_INSN_MASK) == IQ2000_INSN_VALUE), and similarly
- for the data space. */
-
-#define IQ2000_DATA_MASK 0x80000000
-#define IQ2000_DATA_VALUE 0x00000000
-#define IQ2000_INSN_MASK 0x80000000
-#define IQ2000_INSN_VALUE 0x80000000
-
-
-#endif /* _ELF_IQ2000_H */
diff --git a/include/elf/lm32.h b/include/elf/lm32.h
deleted file mode 100644
index 6ed34ec49..000000000
--- a/include/elf/lm32.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/* Lattice Mico32 ELF support for BFD.
- Copyright 2008, 2010 Free Software Foundation, Inc.
- Contributed by Jon Beniston <jon@beniston.com>
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _ELF_LM32_H
-#define _ELF_LM32_H
-
-#include "elf/reloc-macros.h"
-
-/* Relocations. */
-START_RELOC_NUMBERS (elf_lm32_reloc_type)
- RELOC_NUMBER (R_LM32_NONE, 0)
- RELOC_NUMBER (R_LM32_8, 1)
- RELOC_NUMBER (R_LM32_16, 2)
- RELOC_NUMBER (R_LM32_32, 3)
- RELOC_NUMBER (R_LM32_HI16, 4)
- RELOC_NUMBER (R_LM32_LO16, 5)
- RELOC_NUMBER (R_LM32_GPREL16, 6)
- RELOC_NUMBER (R_LM32_CALL, 7)
- RELOC_NUMBER (R_LM32_BRANCH, 8)
- RELOC_NUMBER (R_LM32_GNU_VTINHERIT, 9)
- RELOC_NUMBER (R_LM32_GNU_VTENTRY, 10)
- RELOC_NUMBER (R_LM32_16_GOT, 11)
- RELOC_NUMBER (R_LM32_GOTOFF_HI16, 12)
- RELOC_NUMBER (R_LM32_GOTOFF_LO16, 13)
- RELOC_NUMBER (R_LM32_COPY, 14)
- RELOC_NUMBER (R_LM32_GLOB_DAT, 15)
- RELOC_NUMBER (R_LM32_JMP_SLOT, 16)
- RELOC_NUMBER (R_LM32_RELATIVE, 17)
-END_RELOC_NUMBERS (R_LM32_max)
-
-/* Processor specific flags for the ELF header e_flags field. */
-
-#define EF_LM32_MACH 0x00000001
-
-/* Various CPU types. */
-
-#define E_LM32_MACH 0x1
-
-#endif /* _ELF_LM32_H */
diff --git a/include/elf/m32c.h b/include/elf/m32c.h
deleted file mode 100644
index 29b80a679..000000000
--- a/include/elf/m32c.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/* M32C ELF support for BFD.
- Copyright (C) 2004, 2010 Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _ELF_M32C_H
-#define _ELF_M32C_H
-
-#include "elf/reloc-macros.h"
-
- /* Relocations. */
- START_RELOC_NUMBERS (elf_m32c_reloc_type)
- RELOC_NUMBER (R_M32C_NONE, 0)
- RELOC_NUMBER (R_M32C_16, 1)
- RELOC_NUMBER (R_M32C_24, 2)
- RELOC_NUMBER (R_M32C_32, 3)
- RELOC_NUMBER (R_M32C_8_PCREL, 4)
- RELOC_NUMBER (R_M32C_16_PCREL, 5)
-
- /* 8 bit unsigned address, used for dsp8[a0] etc */
- RELOC_NUMBER (R_M32C_8, 6)
- /* Bits 0..15 of an address, for SMOVF's A0, A1A0, etc. */
- RELOC_NUMBER (R_M32C_LO16, 7)
- /* Bits 16..23 of an address, for SMOVF's R1H etc. */
- RELOC_NUMBER (R_M32C_HI8, 8)
- /* Bits 16..31 of an address, for LDE's A1A0 etc. */
- RELOC_NUMBER (R_M32C_HI16, 9)
-
- /* These are relocs we need when relaxing. */
- /* Marks various jump opcodes. */
- RELOC_NUMBER (R_M32C_RL_JUMP, 10)
- /* Marks standard one-address form. */
- RELOC_NUMBER (R_M32C_RL_1ADDR, 11)
- /* Marks standard two-address form. */
- RELOC_NUMBER (R_M32C_RL_2ADDR, 12)
-
- END_RELOC_NUMBERS (R_M32C_max)
-
-#define EF_M32C_CPU_M16C 0x00000075 /* default */
-#define EF_M32C_CPU_M32C 0x00000078 /* m32c */
-#define EF_M32C_CPU_MASK 0x0000007F /* specific cpu bits */
-#define EF_M32C_ALL_FLAGS (EF_M32C_CPU_MASK)
-
-/* Define the data & instruction memory discriminator. In a linked
- executable, an symbol should be deemed to point to an instruction
- if ((address & M16C_INSN_MASK) == M16C_INSN_VALUE), and similarly
- for the data space. See also `ld/emulparams/elf32m32c.sh'. */
-#define M32C_DATA_MASK 0xffc00000
-#define M32C_DATA_VALUE 0x00000000
-#define M32C_INSN_MASK 0xffc00000
-#define M32C_INSN_VALUE 0x00400000
-
-#endif /* _ELF_M32C_H */
diff --git a/include/elf/m32r.h b/include/elf/m32r.h
deleted file mode 100644
index 7e06e3f31..000000000
--- a/include/elf/m32r.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/* M32R ELF support for BFD.
- Copyright 1996, 1997, 1998, 1999, 2000, 2003, 2004, 2008, 2010
- Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _ELF_M32R_H
-#define _ELF_M32R_H
-
-#include "elf/reloc-macros.h"
-
-/* Relocations. */
-START_RELOC_NUMBERS (elf_m32r_reloc_type)
- RELOC_NUMBER (R_M32R_NONE, 0)
- /* REL relocations */
- RELOC_NUMBER (R_M32R_16, 1) /* For backwards compatibility. */
- RELOC_NUMBER (R_M32R_32, 2) /* For backwards compatibility. */
- RELOC_NUMBER (R_M32R_24, 3) /* For backwards compatibility. */
- RELOC_NUMBER (R_M32R_10_PCREL, 4) /* For backwards compatibility. */
- RELOC_NUMBER (R_M32R_18_PCREL, 5) /* For backwards compatibility. */
- RELOC_NUMBER (R_M32R_26_PCREL, 6) /* For backwards compatibility. */
- RELOC_NUMBER (R_M32R_HI16_ULO, 7) /* For backwards compatibility. */
- RELOC_NUMBER (R_M32R_HI16_SLO, 8) /* For backwards compatibility. */
- RELOC_NUMBER (R_M32R_LO16, 9) /* For backwards compatibility. */
- RELOC_NUMBER (R_M32R_SDA16, 10) /* For backwards compatibility. */
- RELOC_NUMBER (R_M32R_GNU_VTINHERIT, 11)/* For backwards compatibility. */
- RELOC_NUMBER (R_M32R_GNU_VTENTRY, 12) /* For backwards compatibility. */
-
- /* RELA relocations */
- RELOC_NUMBER (R_M32R_16_RELA, 33)
- RELOC_NUMBER (R_M32R_32_RELA, 34)
- RELOC_NUMBER (R_M32R_24_RELA, 35)
- RELOC_NUMBER (R_M32R_10_PCREL_RELA, 36)
- RELOC_NUMBER (R_M32R_18_PCREL_RELA, 37)
- RELOC_NUMBER (R_M32R_26_PCREL_RELA, 38)
- RELOC_NUMBER (R_M32R_HI16_ULO_RELA, 39)
- RELOC_NUMBER (R_M32R_HI16_SLO_RELA, 40)
- RELOC_NUMBER (R_M32R_LO16_RELA, 41)
- RELOC_NUMBER (R_M32R_SDA16_RELA, 42)
- RELOC_NUMBER (R_M32R_RELA_GNU_VTINHERIT, 43)
- RELOC_NUMBER (R_M32R_RELA_GNU_VTENTRY, 44)
-
- RELOC_NUMBER (R_M32R_REL32, 45)
-
- RELOC_NUMBER (R_M32R_GOT24, 48)
- RELOC_NUMBER (R_M32R_26_PLTREL, 49)
- RELOC_NUMBER (R_M32R_COPY, 50)
- RELOC_NUMBER (R_M32R_GLOB_DAT, 51)
- RELOC_NUMBER (R_M32R_JMP_SLOT, 52)
- RELOC_NUMBER (R_M32R_RELATIVE, 53)
- RELOC_NUMBER (R_M32R_GOTOFF, 54)
- RELOC_NUMBER (R_M32R_GOTPC24, 55)
- RELOC_NUMBER (R_M32R_GOT16_HI_ULO, 56)
- RELOC_NUMBER (R_M32R_GOT16_HI_SLO, 57)
- RELOC_NUMBER (R_M32R_GOT16_LO, 58)
- RELOC_NUMBER (R_M32R_GOTPC_HI_ULO, 59)
- RELOC_NUMBER (R_M32R_GOTPC_HI_SLO, 60)
- RELOC_NUMBER (R_M32R_GOTPC_LO, 61)
- RELOC_NUMBER (R_M32R_GOTOFF_HI_ULO, 62)
- RELOC_NUMBER (R_M32R_GOTOFF_HI_SLO, 63)
- RELOC_NUMBER (R_M32R_GOTOFF_LO, 64)
-
-END_RELOC_NUMBERS (R_M32R_max)
-
-/* Processor specific section indices. These sections do not actually
- exist. Symbols with a st_shndx field corresponding to one of these
- values have a special meaning. */
-
-/* Small common symbol. */
-#define SHN_M32R_SCOMMON SHN_LORESERVE
-
-/* Processor specific section flags. */
-
-/* This section contains sufficient relocs to be relaxed.
- When relaxing, even relocs of branch instructions the assembler could
- complete must be present because relaxing may cause the branch target to
- move. */
-#define SHF_M32R_CAN_RELAX 0x10000000
-
-/* Processor specific flags for the ELF header e_flags field. */
-
-/* Two bit m32r architecture field. */
-#define EF_M32R_ARCH 0x30000000
-
-/* m32r code. */
-#define E_M32R_ARCH 0x00000000
-/* m32rx code. */
-#define E_M32RX_ARCH 0x10000000
-/* m32r2 code. */
-#define E_M32R2_ARCH 0x20000000
-
-/* 12 bit m32r new instructions field. */
-#define EF_M32R_INST 0x0FFF0000
-/* Parallel instructions. */
-#define E_M32R_HAS_PARALLEL 0x00010000
-/* Hidden instructions for m32rx:
- jc, jnc, macwhi-a, macwlo-a, mulwhi-a, mulwlo-a, sth+, shb+, sat, pcmpbz,
- sc, snc. */
-#define E_M32R_HAS_HIDDEN_INST 0x00020000
-/* New bit instructions:
- clrpsw, setpsw, bset, bclr, btst. */
-#define E_M32R_HAS_BIT_INST 0x00040000
-/* Floating point instructions. */
-#define E_M32R_HAS_FLOAT_INST 0x00080000
-
-/* 4 bit m32r ignore to check field. */
-#define EF_M32R_IGNORE 0x0000000F
-
-#endif
diff --git a/include/elf/m68hc11.h b/include/elf/m68hc11.h
deleted file mode 100644
index 58d882088..000000000
--- a/include/elf/m68hc11.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/* m68hc11 & m68hc12 ELF support for BFD.
- Copyright 1999, 2000, 2001, 2002, 2010, 2012 Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _ELF_M68HC11_H
-#define _ELF_M68HC11_H
-
-#include "elf/reloc-macros.h"
-
-/* Relocation types. */
-START_RELOC_NUMBERS (elf_m68hc11_reloc_type)
- RELOC_NUMBER (R_M68HC11_NONE, 0)
- RELOC_NUMBER (R_M68HC11_8, 1)
- RELOC_NUMBER (R_M68HC11_HI8, 2)
- RELOC_NUMBER (R_M68HC11_LO8, 3)
- RELOC_NUMBER (R_M68HC11_PCREL_8, 4)
- RELOC_NUMBER (R_M68HC11_16, 5)
- RELOC_NUMBER (R_M68HC11_32, 6)
- RELOC_NUMBER (R_M68HC11_3B, 7)
- RELOC_NUMBER (R_M68HC11_PCREL_16, 8)
-
- /* These are GNU extensions to enable C++ vtable garbage collection. */
- RELOC_NUMBER (R_M68HC11_GNU_VTINHERIT, 9)
- RELOC_NUMBER (R_M68HC11_GNU_VTENTRY, 10)
-
- RELOC_NUMBER (R_M68HC11_24, 11)
- RELOC_NUMBER (R_M68HC11_LO16, 12)
- RELOC_NUMBER (R_M68HC11_PAGE, 13)
-
- RELOC_NUMBER (R_M68HC12_16B, 15)
- RELOC_NUMBER (R_M68HC12_PCREL_9, 16)
- RELOC_NUMBER (R_M68HC12_PCREL_10, 17)
- RELOC_NUMBER (R_M68HC12_HI8XG, 18)
- RELOC_NUMBER (R_M68HC12_LO8XG, 19)
-
- /* GNU extension for linker relaxation.
- Mark beginning of a jump instruction (any form). */
- RELOC_NUMBER (R_M68HC11_RL_JUMP, 20)
-
- /* Mark beginning of Gcc relaxation group instruction. */
- RELOC_NUMBER (R_M68HC11_RL_GROUP, 21)
-END_RELOC_NUMBERS (R_M68HC11_max)
-
-/* Processor specific flags for the ELF header e_flags field. */
-
-/* ABI identification. */
-#define EF_M68HC11_ABI 0x00000000F
-
-/* Integers are 32-bit long. */
-#define E_M68HC11_I32 0x000000001
-
-/* Doubles are 64-bit long. */
-#define E_M68HC11_F64 0x000000002
-
-/* Uses 68HC12 memory banks. */
-#define E_M68HC12_BANKS 0x000000004
-
-/* XGATE ram offsetting. */
-#define E_M68HC11_XGATE_RAMOFFSET 0x000000100
-
-/* Suppress warnings */
-#define E_M68HC11_NO_BANK_WARNING 0x000000200
-
-#define EF_M68HC11_MACH_MASK 0xF0
-#define EF_M68HC11_GENERIC 0x00 /* Generic 68HC12/backward compatibility. */
-#define EF_M68HC12_MACH 0x10 /* 68HC12 microcontroller. */
-#define EF_M68HCS12_MACH 0x20 /* 68HCS12 microcontroller. */
-#define EF_M68HC11_MACH(mach) ((mach) & EF_M68HC11_MACH_MASK)
-
-/* True if we can merge machines. A generic HC12 can work on any proc
- but once we have specific code, merge is not possible. */
-#define EF_M68HC11_CAN_MERGE_MACH(mach1, mach2) \
- ((EF_M68HC11_MACH (mach1) == EF_M68HC11_MACH (mach2)) \
- || (EF_M68HC11_MACH (mach1) == EF_M68HC11_GENERIC) \
- || (EF_M68HC11_MACH (mach2) == EF_M68HC11_GENERIC))
-
-#define EF_M68HC11_MERGE_MACH(mach1, mach2) \
- (((EF_M68HC11_MACH (mach1) == EF_M68HC11_MACH (mach2)) \
- || (EF_M68HC11_MACH (mach1) == EF_M68HC11_GENERIC)) ? \
- EF_M68HC11_MACH (mach2) : EF_M68HC11_MACH (mach1))
-
-
-/* Special values for the st_other field in the symbol table. These
- are used for 68HC12 to identify far functions (must be called with
- 'call' and returns with 'rtc'). */
-#define STO_M68HC12_FAR 0x80
-
-/* Identify interrupt handlers. This is used by the debugger to
- correctly compute the stack frame. */
-#define STO_M68HC12_INTERRUPT 0x40
-
-#endif
diff --git a/include/elf/m68k.h b/include/elf/m68k.h
deleted file mode 100644
index f6f37ccf4..000000000
--- a/include/elf/m68k.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/* MC68k ELF support for BFD.
- Copyright 1998, 1999, 2000, 2002, 2005, 2006, 2007, 2009, 2010
- Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _ELF_M68K_H
-#define _ELF_M68K_H
-
-#include "elf/reloc-macros.h"
-
-/* Relocation types. */
-START_RELOC_NUMBERS (elf_m68k_reloc_type)
- RELOC_NUMBER (R_68K_NONE, 0) /* No reloc */
- RELOC_NUMBER (R_68K_32, 1) /* Direct 32 bit */
- RELOC_NUMBER (R_68K_16, 2) /* Direct 16 bit */
- RELOC_NUMBER (R_68K_8, 3) /* Direct 8 bit */
- RELOC_NUMBER (R_68K_PC32, 4) /* PC relative 32 bit */
- RELOC_NUMBER (R_68K_PC16, 5) /* PC relative 16 bit */
- RELOC_NUMBER (R_68K_PC8, 6) /* PC relative 8 bit */
- RELOC_NUMBER (R_68K_GOT32, 7) /* 32 bit PC relative GOT entry */
- RELOC_NUMBER (R_68K_GOT16, 8) /* 16 bit PC relative GOT entry */
- RELOC_NUMBER (R_68K_GOT8, 9) /* 8 bit PC relative GOT entry */
- RELOC_NUMBER (R_68K_GOT32O, 10) /* 32 bit GOT offset */
- RELOC_NUMBER (R_68K_GOT16O, 11) /* 16 bit GOT offset */
- RELOC_NUMBER (R_68K_GOT8O, 12) /* 8 bit GOT offset */
- RELOC_NUMBER (R_68K_PLT32, 13) /* 32 bit PC relative PLT address */
- RELOC_NUMBER (R_68K_PLT16, 14) /* 16 bit PC relative PLT address */
- RELOC_NUMBER (R_68K_PLT8, 15) /* 8 bit PC relative PLT address */
- RELOC_NUMBER (R_68K_PLT32O, 16) /* 32 bit PLT offset */
- RELOC_NUMBER (R_68K_PLT16O, 17) /* 16 bit PLT offset */
- RELOC_NUMBER (R_68K_PLT8O, 18) /* 8 bit PLT offset */
- RELOC_NUMBER (R_68K_COPY, 19) /* Copy symbol at runtime */
- RELOC_NUMBER (R_68K_GLOB_DAT, 20) /* Create GOT entry */
- RELOC_NUMBER (R_68K_JMP_SLOT, 21) /* Create PLT entry */
- RELOC_NUMBER (R_68K_RELATIVE, 22) /* Adjust by program base */
- /* These are GNU extensions to enable C++ vtable garbage collection. */
- RELOC_NUMBER (R_68K_GNU_VTINHERIT, 23)
- RELOC_NUMBER (R_68K_GNU_VTENTRY, 24)
- /* TLS static relocations. */
- RELOC_NUMBER (R_68K_TLS_GD32, 25)
- RELOC_NUMBER (R_68K_TLS_GD16, 26)
- RELOC_NUMBER (R_68K_TLS_GD8, 27)
- RELOC_NUMBER (R_68K_TLS_LDM32, 28)
- RELOC_NUMBER (R_68K_TLS_LDM16, 29)
- RELOC_NUMBER (R_68K_TLS_LDM8, 30)
- RELOC_NUMBER (R_68K_TLS_LDO32, 31)
- RELOC_NUMBER (R_68K_TLS_LDO16, 32)
- RELOC_NUMBER (R_68K_TLS_LDO8, 33)
- RELOC_NUMBER (R_68K_TLS_IE32, 34)
- RELOC_NUMBER (R_68K_TLS_IE16, 35)
- RELOC_NUMBER (R_68K_TLS_IE8, 36)
- RELOC_NUMBER (R_68K_TLS_LE32, 37)
- RELOC_NUMBER (R_68K_TLS_LE16, 38)
- RELOC_NUMBER (R_68K_TLS_LE8, 39)
- RELOC_NUMBER (R_68K_TLS_DTPMOD32, 40)
- RELOC_NUMBER (R_68K_TLS_DTPREL32, 41)
- RELOC_NUMBER (R_68K_TLS_TPREL32, 42)
-END_RELOC_NUMBERS (R_68K_max)
-
-/* We use the top 24 bits to encode information about the
- architecture variant. */
-#define EF_M68K_CPU32 0x00810000
-#define EF_M68K_M68000 0x01000000
-#define EF_M68K_CFV4E 0x00008000
-#define EF_M68K_FIDO 0x02000000
-#define EF_M68K_ARCH_MASK \
- (EF_M68K_M68000 | EF_M68K_CPU32 | EF_M68K_CFV4E | EF_M68K_FIDO)
-
-/* We use the bottom 8 bits to encode information about the
- coldfire variant. If we use any of these bits, the top 24 bits are
- either 0 or EF_M68K_CFV4E. */
-#define EF_M68K_CF_ISA_MASK 0x0F /* Which ISA */
-#define EF_M68K_CF_ISA_A_NODIV 0x01 /* ISA A except for div */
-#define EF_M68K_CF_ISA_A 0x02
-#define EF_M68K_CF_ISA_A_PLUS 0x03
-#define EF_M68K_CF_ISA_B_NOUSP 0x04 /* ISA_B except for USP */
-#define EF_M68K_CF_ISA_B 0x05
-#define EF_M68K_CF_ISA_C 0x06
-#define EF_M68K_CF_ISA_C_NODIV 0x07 /* ISA C except for div */
-#define EF_M68K_CF_MAC_MASK 0x30
-#define EF_M68K_CF_MAC 0x10 /* MAC */
-#define EF_M68K_CF_EMAC 0x20 /* EMAC */
-#define EF_M68K_CF_EMAC_B 0x30 /* EMAC_B */
-#define EF_M68K_CF_FLOAT 0x40 /* Has float insns */
-#define EF_M68K_CF_MASK 0xFF
-
-#endif
diff --git a/include/elf/mcore.h b/include/elf/mcore.h
deleted file mode 100644
index 2745feebd..000000000
--- a/include/elf/mcore.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/* Motorola MCore support for BFD.
- Copyright 1995, 1999, 2000, 2010 Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-/* This file holds definitions specific to the MCore ELF ABI. */
-#ifndef _ELF_MORE_H
-#define _ELF_MORE_H
-
-#include "elf/reloc-macros.h"
-
-/* Relocations. */
-START_RELOC_NUMBERS (elf_mcore_reloc_type)
- RELOC_NUMBER (R_MCORE_NONE, 0)
- RELOC_NUMBER (R_MCORE_ADDR32, 1)
- RELOC_NUMBER (R_MCORE_PCRELIMM8BY4, 2)
- RELOC_NUMBER (R_MCORE_PCRELIMM11BY2, 3)
- RELOC_NUMBER (R_MCORE_PCRELIMM4BY2, 4)
- RELOC_NUMBER (R_MCORE_PCREL32, 5)
- RELOC_NUMBER (R_MCORE_PCRELJSR_IMM11BY2, 6)
- RELOC_NUMBER (R_MCORE_GNU_VTINHERIT, 7)
- RELOC_NUMBER (R_MCORE_GNU_VTENTRY, 8)
- RELOC_NUMBER (R_MCORE_RELATIVE, 9)
- RELOC_NUMBER (R_MCORE_COPY, 10)
- RELOC_NUMBER (R_MCORE_GLOB_DAT, 11)
- RELOC_NUMBER (R_MCORE_JUMP_SLOT, 12)
-END_RELOC_NUMBERS (R_MCORE_max)
-
-/* Section Attributes. */
-#define SHF_MCORE_NOREAD 0x80000000
-
-#endif /* _ELF_MCORE_H */
diff --git a/include/elf/mep.h b/include/elf/mep.h
deleted file mode 100644
index b0e42adc3..000000000
--- a/include/elf/mep.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/* Toshiba MeP ELF support for BFD.
- Copyright (C) 2001, 2004, 2005, 2007, 2009, 2010
- Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _ELF_MEP_H
-#define _ELF_MEP_H
-
-/* Bits in the sh_flags field of Elf32_Shdr: */
-
-#define SHF_MEP_VLIW 0x10000000 /* contains vliw code */
-
-/* This bit is reserved by BFD for processor specific stuff. Name
- it properly so that we can easily stay consistent elsewhere. */
-#define SEC_MEP_VLIW SEC_TIC54X_BLOCK
-
-#include "elf/reloc-macros.h"
-
-/* Note: The comments in this file are used by bfd/mep-relocs.pl to
- build parts of bfd/elf32-mep.c. */
-
-/* Relocations. */
-START_RELOC_NUMBERS (elf_mep_reloc_type)
-
- /* These two must appear first so that they are not processed by bfd/mep-relocs.pl. */
- RELOC_NUMBER (R_MEP_NONE, 0)
- RELOC_NUMBER (R_RELC, 1)
-
- RELOC_NUMBER (R_MEP_8, 2) /* 7654 3210 U */
- RELOC_NUMBER (R_MEP_16, 3) /* fedc ba98 7654 3210 U */
- RELOC_NUMBER (R_MEP_32, 4) /* vuts rqpo nmlk jihg fedc ba98 7654 3210 U */
-
- RELOC_NUMBER (R_MEP_PCREL8A2, 5) /* ---- ---- 7654 321- S PC-REL */
- RELOC_NUMBER (R_MEP_PCREL12A2, 6) /* ---- ba98 7654 321- S PC-REL */
- RELOC_NUMBER (R_MEP_PCREL17A2, 7) /* ---- ---- ---- ---- gfed cba9 8765 4321 S PC-REL */
- RELOC_NUMBER (R_MEP_PCREL24A2, 8) /* ---- -765 4321 ---- nmlk jihg fedc ba98 S PC-REL */
- RELOC_NUMBER (R_MEP_PCABS24A2, 9) /* ---- -765 4321 ---- nmlk jihg fedc ba98 U */
-
- RELOC_NUMBER (R_MEP_LOW16, 10) /* ---- ---- ---- ---- fedc ba98 7654 3210 U no-overflow */
- RELOC_NUMBER (R_MEP_HI16U, 11) /* ---- ---- ---- ---- vuts rqpo nmlk jihg U no-overflow */
- RELOC_NUMBER (R_MEP_HI16S, 12) /* ---- ---- ---- ---- vuts rqpo nmlk jihg S no-overflow */
- RELOC_NUMBER (R_MEP_GPREL, 13) /* ---- ---- ---- ---- fedc ba98 7654 3210 S GP-REL*/
- RELOC_NUMBER (R_MEP_TPREL, 14) /* ---- ---- ---- ---- fedc ba98 7654 3210 S TP-REL*/
-
- RELOC_NUMBER (R_MEP_TPREL7, 15) /* ---- ---- -654 3210 U TP-REL */
- RELOC_NUMBER (R_MEP_TPREL7A2, 16) /* ---- ---- -654 321- U TP-REL */
- RELOC_NUMBER (R_MEP_TPREL7A4, 17) /* ---- ---- -654 32-- U TP-REL */
-
- RELOC_NUMBER (R_MEP_UIMM24, 18) /* ---- ---- 7654 3210 nmlk jihg fedc ba98 U */
- RELOC_NUMBER (R_MEP_ADDR24A4, 19) /* ---- ---- 7654 32-- nmlk jihg fedc ba98 U */
-
- RELOC_NUMBER (R_MEP_GNU_VTINHERIT, 20) /* ---- ---- ---- ---- U no-overflow */
- RELOC_NUMBER (R_MEP_GNU_VTENTRY, 21) /* ---- ---- ---- ---- U no-overflow */
-
-END_RELOC_NUMBERS(R_MEP_max)
-
-#define EF_MEP_CPU_MASK 0xff000000 /* specific cpu bits */
-#define EF_MEP_CPU_MEP 0x00000000 /* generic MEP */
-#define EF_MEP_CPU_C2 0x01000000 /* MEP c2 */
-#define EF_MEP_CPU_C3 0x02000000 /* MEP c3 */
-#define EF_MEP_CPU_C4 0x04000000 /* MEP c4 */
-/* 5..7 are reseved */
-#define EF_MEP_CPU_C5 0x08000000 /* MEP c5 */
-#define EF_MEP_CPU_H1 0x10000000 /* MEP h1 */
-
-#define EF_MEP_COP_MASK 0x00ff0000
-#define EF_MEP_COP_NONE 0x00000000
-#define EF_MEP_COP_AVC 0x00010000
-#define EF_MEP_COP_AVC2 0x00020000
-#define EF_MEP_COP_FMAX 0x00030000
-/* 4..5 are reserved. */
-#define EF_MEP_COP_IVC2 0x00060000
-
-#define EF_MEP_LIBRARY 0x00000100 /* Built as a library */
-
-#define EF_MEP_INDEX_MASK 0x000000ff /* Configuration index */
-
-#define EF_MEP_ALL_FLAGS 0xffff01ff
-
-#endif /* _ELF_MEP_H */
diff --git a/include/elf/metag.h b/include/elf/metag.h
deleted file mode 100644
index 7ea699df4..000000000
--- a/include/elf/metag.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/* Meta ELF support for BFD.
- Copyright (C) 2013 Free Software Foundation, Inc.
- Contributed by Imagination Technologies Ltd.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _ELF_METAG_H
-#define _ELF_METAG_H
-
-#include "elf/reloc-macros.h"
-
-/* Relocation types. */
-
-START_RELOC_NUMBERS (elf_metag_reloc_type)
- RELOC_NUMBER (R_METAG_HIADDR16, 0)
- RELOC_NUMBER (R_METAG_LOADDR16, 1)
- RELOC_NUMBER (R_METAG_ADDR32, 2)
- RELOC_NUMBER (R_METAG_NONE, 3)
- RELOC_NUMBER (R_METAG_RELBRANCH, 4)
- RELOC_NUMBER (R_METAG_GETSETOFF, 5)
-
- /* Backward compatability */
- RELOC_NUMBER (R_METAG_REG32OP1, 6)
- RELOC_NUMBER (R_METAG_REG32OP2, 7)
- RELOC_NUMBER (R_METAG_REG32OP3, 8)
- RELOC_NUMBER (R_METAG_REG16OP1, 9)
- RELOC_NUMBER (R_METAG_REG16OP2, 10)
- RELOC_NUMBER (R_METAG_REG16OP3, 11)
- RELOC_NUMBER (R_METAG_REG32OP4, 12)
-
- RELOC_NUMBER (R_METAG_HIOG, 13)
- RELOC_NUMBER (R_METAG_LOOG, 14)
-
- RELOC_NUMBER (R_METAG_REL8, 15)
- RELOC_NUMBER (R_METAG_REL16, 16)
-
- /* GNU */
- RELOC_NUMBER (R_METAG_GNU_VTINHERIT,30)
- RELOC_NUMBER (R_METAG_GNU_VTENTRY, 31)
-
- /* PIC relocations */
- RELOC_NUMBER (R_METAG_HI16_GOTOFF, 32)
- RELOC_NUMBER (R_METAG_LO16_GOTOFF, 33)
- RELOC_NUMBER (R_METAG_GETSET_GOTOFF,34)
- RELOC_NUMBER (R_METAG_GETSET_GOT, 35)
- RELOC_NUMBER (R_METAG_HI16_GOTPC, 36)
- RELOC_NUMBER (R_METAG_LO16_GOTPC, 37)
- RELOC_NUMBER (R_METAG_HI16_PLT, 38)
- RELOC_NUMBER (R_METAG_LO16_PLT, 39)
- RELOC_NUMBER (R_METAG_RELBRANCH_PLT,40)
- RELOC_NUMBER (R_METAG_GOTOFF, 41)
- RELOC_NUMBER (R_METAG_PLT, 42)
- RELOC_NUMBER (R_METAG_COPY, 43)
- RELOC_NUMBER (R_METAG_JMP_SLOT, 44)
- RELOC_NUMBER (R_METAG_RELATIVE, 45)
- RELOC_NUMBER (R_METAG_GLOB_DAT, 46)
-
- /* TLS relocations */
- RELOC_NUMBER (R_METAG_TLS_GD, 47)
- RELOC_NUMBER (R_METAG_TLS_LDM, 48)
- RELOC_NUMBER (R_METAG_TLS_LDO_HI16, 49)
- RELOC_NUMBER (R_METAG_TLS_LDO_LO16, 50)
- RELOC_NUMBER (R_METAG_TLS_LDO, 51)
- RELOC_NUMBER (R_METAG_TLS_IE, 52)
- RELOC_NUMBER (R_METAG_TLS_IENONPIC, 53)
- RELOC_NUMBER (R_METAG_TLS_IENONPIC_HI16,54)
- RELOC_NUMBER (R_METAG_TLS_IENONPIC_LO16,55)
- RELOC_NUMBER (R_METAG_TLS_TPOFF, 56)
- RELOC_NUMBER (R_METAG_TLS_DTPMOD, 57)
- RELOC_NUMBER (R_METAG_TLS_DTPOFF, 58)
- RELOC_NUMBER (R_METAG_TLS_LE, 59)
- RELOC_NUMBER (R_METAG_TLS_LE_HI16, 60)
- RELOC_NUMBER (R_METAG_TLS_LE_LO16, 61)
-
-END_RELOC_NUMBERS (R_METAG_MAX)
-
-#endif /* _ELF_METAG_H */
diff --git a/include/elf/microblaze.h b/include/elf/microblaze.h
deleted file mode 100644
index c4d98213a..000000000
--- a/include/elf/microblaze.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/* Xilinx MicroBlaze support for BFD.
-
- Copyright 2009, 2010 Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA
- 02110-1301, USA. */
-
-/* This file holds definitions specific to the MICROBLAZE ELF ABI. */
-
-#ifndef _ELF_MICROBLAZE_H
-#define _ELF_MICROBLAZE_H
-
-#include "elf/reloc-macros.h"
-
-/* Relocations. */
-START_RELOC_NUMBERS (elf_microblaze_reloc_type)
- RELOC_NUMBER (R_MICROBLAZE_NONE, 0)
- RELOC_NUMBER (R_MICROBLAZE_32, 1)
- RELOC_NUMBER (R_MICROBLAZE_32_PCREL, 2)
- RELOC_NUMBER (R_MICROBLAZE_64_PCREL, 3)
- RELOC_NUMBER (R_MICROBLAZE_32_PCREL_LO, 4)
- RELOC_NUMBER (R_MICROBLAZE_64, 5)
- RELOC_NUMBER (R_MICROBLAZE_32_LO, 6)
- RELOC_NUMBER (R_MICROBLAZE_SRO32, 7)
- RELOC_NUMBER (R_MICROBLAZE_SRW32, 8)
- RELOC_NUMBER (R_MICROBLAZE_64_NONE, 9)
- RELOC_NUMBER (R_MICROBLAZE_32_SYM_OP_SYM, 10)
- RELOC_NUMBER (R_MICROBLAZE_GNU_VTINHERIT, 11)
- RELOC_NUMBER (R_MICROBLAZE_GNU_VTENTRY, 12)
- RELOC_NUMBER (R_MICROBLAZE_GOTPC_64, 13) /* PC-relative GOT offset. */
- RELOC_NUMBER (R_MICROBLAZE_GOT_64, 14) /* GOT entry offset. */
- RELOC_NUMBER (R_MICROBLAZE_PLT_64, 15) /* PLT offset (PC-relative). */
- RELOC_NUMBER (R_MICROBLAZE_REL, 16) /* Adjust by program base. */
- RELOC_NUMBER (R_MICROBLAZE_JUMP_SLOT, 17) /* Create PLT entry. */
- RELOC_NUMBER (R_MICROBLAZE_GLOB_DAT, 18) /* Create GOT entry. */
- RELOC_NUMBER (R_MICROBLAZE_GOTOFF_64, 19) /* Offset relative to GOT. */
- RELOC_NUMBER (R_MICROBLAZE_GOTOFF_32, 20) /* Offset relative to GOT. */
- RELOC_NUMBER (R_MICROBLAZE_COPY, 21) /* Runtime copy. */
- RELOC_NUMBER (R_MICROBLAZE_TLS, 22) /* TLS Reloc */
- RELOC_NUMBER (R_MICROBLAZE_TLSGD, 23) /* TLS General Dynamic */
- RELOC_NUMBER (R_MICROBLAZE_TLSLD, 24) /* TLS Local Dynamic */
- RELOC_NUMBER (R_MICROBLAZE_TLSDTPMOD32, 25) /* TLS Module ID */
- RELOC_NUMBER (R_MICROBLAZE_TLSDTPREL32, 26) /* TLS Offset Within TLS Block */
- RELOC_NUMBER (R_MICROBLAZE_TLSDTPREL64, 27) /* TLS Offset Within TLS Block */
- RELOC_NUMBER (R_MICROBLAZE_TLSGOTTPREL32, 28) /* TLS Offset From Thread Pointer */
- RELOC_NUMBER (R_MICROBLAZE_TLSTPREL32, 29) /* TLS Offset From Thread Pointer */
-
-END_RELOC_NUMBERS (R_MICROBLAZE_max)
-
-/* Global base address names. */
-#define RO_SDA_ANCHOR_NAME "_SDA2_BASE_"
-#define RW_SDA_ANCHOR_NAME "_SDA_BASE_"
-
-/* Section Attributes. */
-#define SHF_MICROBLAZE_NOREAD 0x80000000
-
-#endif /* _ELF_MICROBLAZE_H */
diff --git a/include/elf/mips.h b/include/elf/mips.h
deleted file mode 100644
index 2c5a9a621..000000000
--- a/include/elf/mips.h
+++ /dev/null
@@ -1,1172 +0,0 @@
-/* MIPS ELF support for BFD.
- Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
- 2003, 2004, 2005, 2008, 2009, 2010, 2013
- Free Software Foundation, Inc.
-
- By Ian Lance Taylor, Cygnus Support, <ian@cygnus.com>, from
- information in the System V Application Binary Interface, MIPS
- Processor Supplement.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-/* This file holds definitions specific to the MIPS ELF ABI. Note
- that most of this is not actually implemented by BFD. */
-
-#ifndef _ELF_MIPS_H
-#define _ELF_MIPS_H
-
-#include "elf/reloc-macros.h"
-
-/* Relocation types. */
-START_RELOC_NUMBERS (elf_mips_reloc_type)
- RELOC_NUMBER (R_MIPS_NONE, 0)
- RELOC_NUMBER (R_MIPS_16, 1)
- RELOC_NUMBER (R_MIPS_32, 2) /* In Elf 64: alias R_MIPS_ADD */
- RELOC_NUMBER (R_MIPS_REL32, 3) /* In Elf 64: alias R_MIPS_REL */
- RELOC_NUMBER (R_MIPS_26, 4)
- RELOC_NUMBER (R_MIPS_HI16, 5)
- RELOC_NUMBER (R_MIPS_LO16, 6)
- RELOC_NUMBER (R_MIPS_GPREL16, 7) /* In Elf 64: alias R_MIPS_GPREL */
- RELOC_NUMBER (R_MIPS_LITERAL, 8)
- RELOC_NUMBER (R_MIPS_GOT16, 9) /* In Elf 64: alias R_MIPS_GOT */
- RELOC_NUMBER (R_MIPS_PC16, 10)
- RELOC_NUMBER (R_MIPS_CALL16, 11) /* In Elf 64: alias R_MIPS_CALL */
- RELOC_NUMBER (R_MIPS_GPREL32, 12)
- /* The remaining relocs are defined on Irix, although they are not
- in the MIPS ELF ABI. */
- RELOC_NUMBER (R_MIPS_UNUSED1, 13)
- RELOC_NUMBER (R_MIPS_UNUSED2, 14)
- RELOC_NUMBER (R_MIPS_UNUSED3, 15)
- RELOC_NUMBER (R_MIPS_SHIFT5, 16)
- RELOC_NUMBER (R_MIPS_SHIFT6, 17)
- RELOC_NUMBER (R_MIPS_64, 18)
- RELOC_NUMBER (R_MIPS_GOT_DISP, 19)
- RELOC_NUMBER (R_MIPS_GOT_PAGE, 20)
- RELOC_NUMBER (R_MIPS_GOT_OFST, 21)
- RELOC_NUMBER (R_MIPS_GOT_HI16, 22)
- RELOC_NUMBER (R_MIPS_GOT_LO16, 23)
- RELOC_NUMBER (R_MIPS_SUB, 24)
- RELOC_NUMBER (R_MIPS_INSERT_A, 25)
- RELOC_NUMBER (R_MIPS_INSERT_B, 26)
- RELOC_NUMBER (R_MIPS_DELETE, 27)
- RELOC_NUMBER (R_MIPS_HIGHER, 28)
- RELOC_NUMBER (R_MIPS_HIGHEST, 29)
- RELOC_NUMBER (R_MIPS_CALL_HI16, 30)
- RELOC_NUMBER (R_MIPS_CALL_LO16, 31)
- RELOC_NUMBER (R_MIPS_SCN_DISP, 32)
- RELOC_NUMBER (R_MIPS_REL16, 33)
- RELOC_NUMBER (R_MIPS_ADD_IMMEDIATE, 34)
- RELOC_NUMBER (R_MIPS_PJUMP, 35)
- RELOC_NUMBER (R_MIPS_RELGOT, 36)
- RELOC_NUMBER (R_MIPS_JALR, 37)
- /* TLS relocations. */
- RELOC_NUMBER (R_MIPS_TLS_DTPMOD32, 38)
- RELOC_NUMBER (R_MIPS_TLS_DTPREL32, 39)
- RELOC_NUMBER (R_MIPS_TLS_DTPMOD64, 40)
- RELOC_NUMBER (R_MIPS_TLS_DTPREL64, 41)
- RELOC_NUMBER (R_MIPS_TLS_GD, 42)
- RELOC_NUMBER (R_MIPS_TLS_LDM, 43)
- RELOC_NUMBER (R_MIPS_TLS_DTPREL_HI16, 44)
- RELOC_NUMBER (R_MIPS_TLS_DTPREL_LO16, 45)
- RELOC_NUMBER (R_MIPS_TLS_GOTTPREL, 46)
- RELOC_NUMBER (R_MIPS_TLS_TPREL32, 47)
- RELOC_NUMBER (R_MIPS_TLS_TPREL64, 48)
- RELOC_NUMBER (R_MIPS_TLS_TPREL_HI16, 49)
- RELOC_NUMBER (R_MIPS_TLS_TPREL_LO16, 50)
- RELOC_NUMBER (R_MIPS_GLOB_DAT, 51)
- FAKE_RELOC (R_MIPS_max, 52)
- /* These relocs are used for the mips16. */
- FAKE_RELOC (R_MIPS16_min, 100)
- RELOC_NUMBER (R_MIPS16_26, 100)
- RELOC_NUMBER (R_MIPS16_GPREL, 101)
- RELOC_NUMBER (R_MIPS16_GOT16, 102)
- RELOC_NUMBER (R_MIPS16_CALL16, 103)
- RELOC_NUMBER (R_MIPS16_HI16, 104)
- RELOC_NUMBER (R_MIPS16_LO16, 105)
- RELOC_NUMBER (R_MIPS16_TLS_GD, 106)
- RELOC_NUMBER (R_MIPS16_TLS_LDM, 107)
- RELOC_NUMBER (R_MIPS16_TLS_DTPREL_HI16, 108)
- RELOC_NUMBER (R_MIPS16_TLS_DTPREL_LO16, 109)
- RELOC_NUMBER (R_MIPS16_TLS_GOTTPREL, 110)
- RELOC_NUMBER (R_MIPS16_TLS_TPREL_HI16, 111)
- RELOC_NUMBER (R_MIPS16_TLS_TPREL_LO16, 112)
- FAKE_RELOC (R_MIPS16_max, 113)
- /* These relocations are specific to VxWorks. */
- RELOC_NUMBER (R_MIPS_COPY, 126)
- RELOC_NUMBER (R_MIPS_JUMP_SLOT, 127)
-
- /* These relocations are specific to microMIPS. */
- FAKE_RELOC (R_MICROMIPS_min, 130)
- RELOC_NUMBER (R_MICROMIPS_26_S1, 133)
- RELOC_NUMBER (R_MICROMIPS_HI16, 134)
- RELOC_NUMBER (R_MICROMIPS_LO16, 135)
- RELOC_NUMBER (R_MICROMIPS_GPREL16, 136) /* In Elf 64:
- alias R_MICROMIPS_GPREL */
- RELOC_NUMBER (R_MICROMIPS_LITERAL, 137)
- RELOC_NUMBER (R_MICROMIPS_GOT16, 138) /* In Elf 64:
- alias R_MICROMIPS_GOT */
- RELOC_NUMBER (R_MICROMIPS_PC7_S1, 139)
- RELOC_NUMBER (R_MICROMIPS_PC10_S1, 140)
- RELOC_NUMBER (R_MICROMIPS_PC16_S1, 141)
- RELOC_NUMBER (R_MICROMIPS_CALL16, 142) /* In Elf 64:
- alias R_MICROMIPS_CALL */
- RELOC_NUMBER (R_MICROMIPS_GOT_DISP, 145)
- RELOC_NUMBER (R_MICROMIPS_GOT_PAGE, 146)
- RELOC_NUMBER (R_MICROMIPS_GOT_OFST, 147)
- RELOC_NUMBER (R_MICROMIPS_GOT_HI16, 148)
- RELOC_NUMBER (R_MICROMIPS_GOT_LO16, 149)
- RELOC_NUMBER (R_MICROMIPS_SUB, 150)
- RELOC_NUMBER (R_MICROMIPS_HIGHER, 151)
- RELOC_NUMBER (R_MICROMIPS_HIGHEST, 152)
- RELOC_NUMBER (R_MICROMIPS_CALL_HI16, 153)
- RELOC_NUMBER (R_MICROMIPS_CALL_LO16, 154)
- RELOC_NUMBER (R_MICROMIPS_SCN_DISP, 155)
- RELOC_NUMBER (R_MICROMIPS_JALR, 156)
- RELOC_NUMBER (R_MICROMIPS_HI0_LO16, 157)
- /* TLS relocations. */
- RELOC_NUMBER (R_MICROMIPS_TLS_GD, 162)
- RELOC_NUMBER (R_MICROMIPS_TLS_LDM, 163)
- RELOC_NUMBER (R_MICROMIPS_TLS_DTPREL_HI16, 164)
- RELOC_NUMBER (R_MICROMIPS_TLS_DTPREL_LO16, 165)
- RELOC_NUMBER (R_MICROMIPS_TLS_GOTTPREL, 166)
- RELOC_NUMBER (R_MICROMIPS_TLS_TPREL_HI16, 169)
- RELOC_NUMBER (R_MICROMIPS_TLS_TPREL_LO16, 170)
- /* microMIPS GP- and PC-relative relocations. */
- RELOC_NUMBER (R_MICROMIPS_GPREL7_S2, 172)
- RELOC_NUMBER (R_MICROMIPS_PC23_S2, 173)
- FAKE_RELOC (R_MICROMIPS_max, 174)
-
- /* This was a GNU extension used by embedded-PIC. It was co-opted by
- mips-linux for exception-handling data. GCC stopped using it in
- May, 2004, then started using it again for compact unwind tables. */
- RELOC_NUMBER (R_MIPS_PC32, 248)
- RELOC_NUMBER (R_MIPS_EH, 249)
- /* FIXME: this relocation is used internally by gas. */
- RELOC_NUMBER (R_MIPS_GNU_REL16_S2, 250)
- /* These are GNU extensions to enable C++ vtable garbage collection. */
- RELOC_NUMBER (R_MIPS_GNU_VTINHERIT, 253)
- RELOC_NUMBER (R_MIPS_GNU_VTENTRY, 254)
-END_RELOC_NUMBERS (R_MIPS_maxext)
-
-/* Processor specific flags for the ELF header e_flags field. */
-
-/* At least one .noreorder directive appears in the source. */
-#define EF_MIPS_NOREORDER 0x00000001
-
-/* File contains position independent code. */
-#define EF_MIPS_PIC 0x00000002
-
-/* Code in file uses the standard calling sequence for calling
- position independent code. */
-#define EF_MIPS_CPIC 0x00000004
-
-/* ??? Unknown flag, set in IRIX 6's BSDdup2.o in libbsd.a. */
-#define EF_MIPS_XGOT 0x00000008
-
-/* Code in file uses UCODE (obsolete) */
-#define EF_MIPS_UCODE 0x00000010
-
-/* Code in file uses new ABI (-n32 on Irix 6). */
-#define EF_MIPS_ABI2 0x00000020
-
-/* Process the .MIPS.options section first by ld */
-#define EF_MIPS_OPTIONS_FIRST 0x00000080
-
-/* Indicates code compiled for a 64-bit machine in 32-bit mode
- (regs are 32-bits wide). */
-#define EF_MIPS_32BITMODE 0x00000100
-
-/* 32-bit machine but FP registers are 64 bit (-mfp64). */
-#define EF_MIPS_FP64 0x00000200
-
-/* Code in file uses the IEEE 754-2008 NaN encoding convention. */
-#define EF_MIPS_NAN2008 0x00000400
-
-/* Architectural Extensions used by this file */
-#define EF_MIPS_ARCH_ASE 0x0f000000
-
-/* Use MDMX multimedia extensions */
-#define EF_MIPS_ARCH_ASE_MDMX 0x08000000
-
-/* Use MIPS-16 ISA extensions */
-#define EF_MIPS_ARCH_ASE_M16 0x04000000
-
-/* Use MICROMIPS ISA extensions. */
-#define EF_MIPS_ARCH_ASE_MICROMIPS 0x02000000
-
-/* Four bit MIPS architecture field. */
-#define EF_MIPS_ARCH 0xf0000000
-
-/* -mips1 code. */
-#define E_MIPS_ARCH_1 0x00000000
-
-/* -mips2 code. */
-#define E_MIPS_ARCH_2 0x10000000
-
-/* -mips3 code. */
-#define E_MIPS_ARCH_3 0x20000000
-
-/* -mips4 code. */
-#define E_MIPS_ARCH_4 0x30000000
-
-/* -mips5 code. */
-#define E_MIPS_ARCH_5 0x40000000
-
-/* -mips32 code. */
-#define E_MIPS_ARCH_32 0x50000000
-
-/* -mips64 code. */
-#define E_MIPS_ARCH_64 0x60000000
-
-/* -mips32r2 code. */
-#define E_MIPS_ARCH_32R2 0x70000000
-
-/* -mips64r2 code. */
-#define E_MIPS_ARCH_64R2 0x80000000
-
-/* The ABI of the file. Also see EF_MIPS_ABI2 above. */
-#define EF_MIPS_ABI 0x0000F000
-
-/* The original o32 abi. */
-#define E_MIPS_ABI_O32 0x00001000
-
-/* O32 extended to work on 64 bit architectures */
-#define E_MIPS_ABI_O64 0x00002000
-
-/* EABI in 32 bit mode */
-#define E_MIPS_ABI_EABI32 0x00003000
-
-/* EABI in 64 bit mode */
-#define E_MIPS_ABI_EABI64 0x00004000
-
-
-/* Machine variant if we know it. This field was invented at Cygnus,
- but it is hoped that other vendors will adopt it. If some standard
- is developed, this code should be changed to follow it. */
-
-#define EF_MIPS_MACH 0x00FF0000
-
-/* Cygnus is choosing values between 80 and 9F;
- 00 - 7F should be left for a future standard;
- the rest are open. */
-
-#define E_MIPS_MACH_3900 0x00810000
-#define E_MIPS_MACH_4010 0x00820000
-#define E_MIPS_MACH_4100 0x00830000
-#define E_MIPS_MACH_4650 0x00850000
-#define E_MIPS_MACH_4120 0x00870000
-#define E_MIPS_MACH_4111 0x00880000
-#define E_MIPS_MACH_SB1 0x008a0000
-#define E_MIPS_MACH_OCTEON 0x008b0000
-#define E_MIPS_MACH_XLR 0x008c0000
-#define E_MIPS_MACH_OCTEON2 0x008d0000
-#define E_MIPS_MACH_5400 0x00910000
-#define E_MIPS_MACH_5900 0x00920000
-#define E_MIPS_MACH_5500 0x00980000
-#define E_MIPS_MACH_9000 0x00990000
-#define E_MIPS_MACH_LS2E 0x00A00000
-#define E_MIPS_MACH_LS2F 0x00A10000
-#define E_MIPS_MACH_LS3A 0x00A20000
-
-/* Processor specific section indices. These sections do not actually
- exist. Symbols with a st_shndx field corresponding to one of these
- values have a special meaning. */
-
-/* Defined and allocated common symbol. Value is virtual address. If
- relocated, alignment must be preserved. */
-#define SHN_MIPS_ACOMMON SHN_LORESERVE
-
-/* Defined and allocated text symbol. Value is virtual address.
- Occur in the dynamic symbol table of Alpha OSF/1 and Irix 5 executables. */
-#define SHN_MIPS_TEXT (SHN_LORESERVE + 1)
-
-/* Defined and allocated data symbol. Value is virtual address.
- Occur in the dynamic symbol table of Alpha OSF/1 and Irix 5 executables. */
-#define SHN_MIPS_DATA (SHN_LORESERVE + 2)
-
-/* Small common symbol. */
-#define SHN_MIPS_SCOMMON (SHN_LORESERVE + 3)
-
-/* Small undefined symbol. */
-#define SHN_MIPS_SUNDEFINED (SHN_LORESERVE + 4)
-
-/* Processor specific section types. */
-
-/* Section contains the set of dynamic shared objects used when
- statically linking. */
-#define SHT_MIPS_LIBLIST 0x70000000
-
-/* I'm not sure what this is, but it's used on Irix 5. */
-#define SHT_MIPS_MSYM 0x70000001
-
-/* Section contains list of symbols whose definitions conflict with
- symbols defined in shared objects. */
-#define SHT_MIPS_CONFLICT 0x70000002
-
-/* Section contains the global pointer table. */
-#define SHT_MIPS_GPTAB 0x70000003
-
-/* Section contains microcode information. The exact format is
- unspecified. */
-#define SHT_MIPS_UCODE 0x70000004
-
-/* Section contains some sort of debugging information. The exact
- format is unspecified. It's probably ECOFF symbols. */
-#define SHT_MIPS_DEBUG 0x70000005
-
-/* Section contains register usage information. */
-#define SHT_MIPS_REGINFO 0x70000006
-
-/* ??? */
-#define SHT_MIPS_PACKAGE 0x70000007
-
-/* ??? */
-#define SHT_MIPS_PACKSYM 0x70000008
-
-/* ??? */
-#define SHT_MIPS_RELD 0x70000009
-
-/* Section contains interface information. */
-#define SHT_MIPS_IFACE 0x7000000b
-
-/* Section contains description of contents of another section. */
-#define SHT_MIPS_CONTENT 0x7000000c
-
-/* Section contains miscellaneous options. */
-#define SHT_MIPS_OPTIONS 0x7000000d
-
-/* ??? */
-#define SHT_MIPS_SHDR 0x70000010
-
-/* ??? */
-#define SHT_MIPS_FDESC 0x70000011
-
-/* ??? */
-#define SHT_MIPS_EXTSYM 0x70000012
-
-/* ??? */
-#define SHT_MIPS_DENSE 0x70000013
-
-/* ??? */
-#define SHT_MIPS_PDESC 0x70000014
-
-/* ??? */
-#define SHT_MIPS_LOCSYM 0x70000015
-
-/* ??? */
-#define SHT_MIPS_AUXSYM 0x70000016
-
-/* ??? */
-#define SHT_MIPS_OPTSYM 0x70000017
-
-/* ??? */
-#define SHT_MIPS_LOCSTR 0x70000018
-
-/* ??? */
-#define SHT_MIPS_LINE 0x70000019
-
-/* ??? */
-#define SHT_MIPS_RFDESC 0x7000001a
-
-/* Delta C++: symbol table */
-#define SHT_MIPS_DELTASYM 0x7000001b
-
-/* Delta C++: instance table */
-#define SHT_MIPS_DELTAINST 0x7000001c
-
-/* Delta C++: class table */
-#define SHT_MIPS_DELTACLASS 0x7000001d
-
-/* DWARF debugging section. */
-#define SHT_MIPS_DWARF 0x7000001e
-
-/* Delta C++: declarations */
-#define SHT_MIPS_DELTADECL 0x7000001f
-
-/* List of libraries the binary depends on. Includes a time stamp, version
- number. */
-#define SHT_MIPS_SYMBOL_LIB 0x70000020
-
-/* Events section. */
-#define SHT_MIPS_EVENTS 0x70000021
-
-/* ??? */
-#define SHT_MIPS_TRANSLATE 0x70000022
-
-/* Special pixie sections */
-#define SHT_MIPS_PIXIE 0x70000023
-
-/* Address translation table (for debug info) */
-#define SHT_MIPS_XLATE 0x70000024
-
-/* SGI internal address translation table (for debug info) */
-#define SHT_MIPS_XLATE_DEBUG 0x70000025
-
-/* Intermediate code */
-#define SHT_MIPS_WHIRL 0x70000026
-
-/* C++ exception handling region info */
-#define SHT_MIPS_EH_REGION 0x70000027
-
-/* Obsolete address translation table (for debug info) */
-#define SHT_MIPS_XLATE_OLD 0x70000028
-
-/* Runtime procedure descriptor table exception information (ucode) ??? */
-#define SHT_MIPS_PDR_EXCEPTION 0x70000029
-
-
-/* A section of type SHT_MIPS_LIBLIST contains an array of the
- following structure. The sh_link field is the section index of the
- string table. The sh_info field is the number of entries in the
- section. */
-typedef struct
-{
- /* String table index for name of shared object. */
- unsigned long l_name;
- /* Time stamp. */
- unsigned long l_time_stamp;
- /* Checksum of symbol names and common sizes. */
- unsigned long l_checksum;
- /* String table index for version. */
- unsigned long l_version;
- /* Flags. */
- unsigned long l_flags;
-} Elf32_Lib;
-
-/* The external version of Elf32_Lib. */
-typedef struct
-{
- unsigned char l_name[4];
- unsigned char l_time_stamp[4];
- unsigned char l_checksum[4];
- unsigned char l_version[4];
- unsigned char l_flags[4];
-} Elf32_External_Lib;
-
-/* The l_flags field of an Elf32_Lib structure may contain the
- following flags. */
-
-/* Require an exact match at runtime. */
-#define LL_EXACT_MATCH 0x00000001
-
-/* Ignore version incompatibilities at runtime. */
-#define LL_IGNORE_INT_VER 0x00000002
-
-/* Require matching minor version number. */
-#define LL_REQUIRE_MINOR 0x00000004
-
-/* ??? */
-#define LL_EXPORTS 0x00000008
-
-/* Delay loading of this library until really needed. */
-#define LL_DELAY_LOAD 0x00000010
-
-/* ??? Delta C++ stuff ??? */
-#define LL_DELTA 0x00000020
-
-
-/* A section of type SHT_MIPS_CONFLICT is an array of indices into the
- .dynsym section. Each element has the following type. */
-typedef unsigned long Elf32_Conflict;
-typedef unsigned char Elf32_External_Conflict[4];
-
-typedef unsigned long Elf64_Conflict;
-typedef unsigned char Elf64_External_Conflict[8];
-
-/* A section of type SHT_MIPS_GPTAB contains information about how
- much GP space would be required for different -G arguments. This
- information is only used so that the linker can provide informative
- suggestions as to the best -G value to use. The sh_info field is
- the index of the section for which this information applies. The
- contents of the section are an array of the following union. The
- first element uses the gt_header field. The remaining elements use
- the gt_entry field. */
-typedef union
-{
- struct
- {
- /* -G value actually used for this object file. */
- unsigned long gt_current_g_value;
- /* Unused. */
- unsigned long gt_unused;
- } gt_header;
- struct
- {
- /* If this -G argument has been used... */
- unsigned long gt_g_value;
- /* ...this many GP section bytes would be required. */
- unsigned long gt_bytes;
- } gt_entry;
-} Elf32_gptab;
-
-/* The external version of Elf32_gptab. */
-
-typedef union
-{
- struct
- {
- unsigned char gt_current_g_value[4];
- unsigned char gt_unused[4];
- } gt_header;
- struct
- {
- unsigned char gt_g_value[4];
- unsigned char gt_bytes[4];
- } gt_entry;
-} Elf32_External_gptab;
-
-/* A section of type SHT_MIPS_REGINFO contains the following
- structure. */
-typedef struct
-{
- /* Mask of general purpose registers used. */
- unsigned long ri_gprmask;
- /* Mask of co-processor registers used. */
- unsigned long ri_cprmask[4];
- /* GP register value for this object file. */
- long ri_gp_value;
-} Elf32_RegInfo;
-
-/* The external version of the Elf_RegInfo structure. */
-typedef struct
-{
- unsigned char ri_gprmask[4];
- unsigned char ri_cprmask[4][4];
- unsigned char ri_gp_value[4];
-} Elf32_External_RegInfo;
-
-/* MIPS ELF .reginfo swapping routines. */
-extern void bfd_mips_elf32_swap_reginfo_in
- (bfd *, const Elf32_External_RegInfo *, Elf32_RegInfo *);
-extern void bfd_mips_elf32_swap_reginfo_out
- (bfd *, const Elf32_RegInfo *, Elf32_External_RegInfo *);
-
-/* Processor specific section flags. */
-
-/* This section must be in the global data area. */
-#define SHF_MIPS_GPREL 0x10000000
-
-/* This section should be merged. */
-#define SHF_MIPS_MERGE 0x20000000
-
-/* This section contains address data of size implied by section
- element size. */
-#define SHF_MIPS_ADDR 0x40000000
-
-/* This section contains string data. */
-#define SHF_MIPS_STRING 0x80000000
-
-/* This section may not be stripped. */
-#define SHF_MIPS_NOSTRIP 0x08000000
-
-/* This section is local to threads. */
-#define SHF_MIPS_LOCAL 0x04000000
-
-/* Linker should generate implicit weak names for this section. */
-#define SHF_MIPS_NAMES 0x02000000
-
-/* Section contais text/data which may be replicated in other sections.
- Linker should retain only one copy. */
-#define SHF_MIPS_NODUPES 0x01000000
-
-/* Processor specific program header types. */
-
-/* Register usage information. Identifies one .reginfo section. */
-#define PT_MIPS_REGINFO 0x70000000
-
-/* Runtime procedure table. */
-#define PT_MIPS_RTPROC 0x70000001
-
-/* .MIPS.options section. */
-#define PT_MIPS_OPTIONS 0x70000002
-
-/* Processor specific dynamic array tags. */
-
-/* 32 bit version number for runtime linker interface. */
-#define DT_MIPS_RLD_VERSION 0x70000001
-
-/* Time stamp. */
-#define DT_MIPS_TIME_STAMP 0x70000002
-
-/* Checksum of external strings and common sizes. */
-#define DT_MIPS_ICHECKSUM 0x70000003
-
-/* Index of version string in string table. */
-#define DT_MIPS_IVERSION 0x70000004
-
-/* 32 bits of flags. */
-#define DT_MIPS_FLAGS 0x70000005
-
-/* Base address of the segment. */
-#define DT_MIPS_BASE_ADDRESS 0x70000006
-
-/* ??? */
-#define DT_MIPS_MSYM 0x70000007
-
-/* Address of .conflict section. */
-#define DT_MIPS_CONFLICT 0x70000008
-
-/* Address of .liblist section. */
-#define DT_MIPS_LIBLIST 0x70000009
-
-/* Number of local global offset table entries. */
-#define DT_MIPS_LOCAL_GOTNO 0x7000000a
-
-/* Number of entries in the .conflict section. */
-#define DT_MIPS_CONFLICTNO 0x7000000b
-
-/* Number of entries in the .liblist section. */
-#define DT_MIPS_LIBLISTNO 0x70000010
-
-/* Number of entries in the .dynsym section. */
-#define DT_MIPS_SYMTABNO 0x70000011
-
-/* Index of first external dynamic symbol not referenced locally. */
-#define DT_MIPS_UNREFEXTNO 0x70000012
-
-/* Index of first dynamic symbol in global offset table. */
-#define DT_MIPS_GOTSYM 0x70000013
-
-/* Number of page table entries in global offset table. */
-#define DT_MIPS_HIPAGENO 0x70000014
-
-/* Address of run time loader map, used for debugging. */
-#define DT_MIPS_RLD_MAP 0x70000016
-
-/* Delta C++ class definition. */
-#define DT_MIPS_DELTA_CLASS 0x70000017
-
-/* Number of entries in DT_MIPS_DELTA_CLASS. */
-#define DT_MIPS_DELTA_CLASS_NO 0x70000018
-
-/* Delta C++ class instances. */
-#define DT_MIPS_DELTA_INSTANCE 0x70000019
-
-/* Number of entries in DT_MIPS_DELTA_INSTANCE. */
-#define DT_MIPS_DELTA_INSTANCE_NO 0x7000001a
-
-/* Delta relocations. */
-#define DT_MIPS_DELTA_RELOC 0x7000001b
-
-/* Number of entries in DT_MIPS_DELTA_RELOC. */
-#define DT_MIPS_DELTA_RELOC_NO 0x7000001c
-
-/* Delta symbols that Delta relocations refer to. */
-#define DT_MIPS_DELTA_SYM 0x7000001d
-
-/* Number of entries in DT_MIPS_DELTA_SYM. */
-#define DT_MIPS_DELTA_SYM_NO 0x7000001e
-
-/* Delta symbols that hold class declarations. */
-#define DT_MIPS_DELTA_CLASSSYM 0x70000020
-
-/* Number of entries in DT_MIPS_DELTA_CLASSSYM. */
-#define DT_MIPS_DELTA_CLASSSYM_NO 0x70000021
-
-/* Flags indicating information about C++ flavor. */
-#define DT_MIPS_CXX_FLAGS 0x70000022
-
-/* Pixie information (???). */
-#define DT_MIPS_PIXIE_INIT 0x70000023
-
-/* Address of .MIPS.symlib */
-#define DT_MIPS_SYMBOL_LIB 0x70000024
-
-/* The GOT index of the first PTE for a segment */
-#define DT_MIPS_LOCALPAGE_GOTIDX 0x70000025
-
-/* The GOT index of the first PTE for a local symbol */
-#define DT_MIPS_LOCAL_GOTIDX 0x70000026
-
-/* The GOT index of the first PTE for a hidden symbol */
-#define DT_MIPS_HIDDEN_GOTIDX 0x70000027
-
-/* The GOT index of the first PTE for a protected symbol */
-#define DT_MIPS_PROTECTED_GOTIDX 0x70000028
-
-/* Address of `.MIPS.options'. */
-#define DT_MIPS_OPTIONS 0x70000029
-
-/* Address of `.interface'. */
-#define DT_MIPS_INTERFACE 0x7000002a
-
-/* ??? */
-#define DT_MIPS_DYNSTR_ALIGN 0x7000002b
-
-/* Size of the .interface section. */
-#define DT_MIPS_INTERFACE_SIZE 0x7000002c
-
-/* Size of rld_text_resolve function stored in the GOT. */
-#define DT_MIPS_RLD_TEXT_RESOLVE_ADDR 0x7000002d
-
-/* Default suffix of DSO to be added by rld on dlopen() calls. */
-#define DT_MIPS_PERF_SUFFIX 0x7000002e
-
-/* Size of compact relocation section (O32). */
-#define DT_MIPS_COMPACT_SIZE 0x7000002f
-
-/* GP value for auxiliary GOTs. */
-#define DT_MIPS_GP_VALUE 0x70000030
-
-/* Address of auxiliary .dynamic. */
-#define DT_MIPS_AUX_DYNAMIC 0x70000031
-
-/* Address of the base of the PLTGOT. */
-#define DT_MIPS_PLTGOT 0x70000032
-
-/* Points to the base of a writable PLT. */
-#define DT_MIPS_RWPLT 0x70000034
-
-/* Flags which may appear in a DT_MIPS_FLAGS entry. */
-
-/* No flags. */
-#define RHF_NONE 0x00000000
-
-/* Uses shortcut pointers. */
-#define RHF_QUICKSTART 0x00000001
-
-/* Hash size is not a power of two. */
-#define RHF_NOTPOT 0x00000002
-
-/* Ignore LD_LIBRARY_PATH. */
-#define RHS_NO_LIBRARY_REPLACEMENT 0x00000004
-
-/* DSO address may not be relocated. */
-#define RHF_NO_MOVE 0x00000008
-
-/* SGI specific features. */
-#define RHF_SGI_ONLY 0x00000010
-
-/* Guarantee that .init will finish executing before any non-init
- code in DSO is called. */
-#define RHF_GUARANTEE_INIT 0x00000020
-
-/* Contains Delta C++ code. */
-#define RHF_DELTA_C_PLUS_PLUS 0x00000040
-
-/* Guarantee that .init will start executing before any non-init
- code in DSO is called. */
-#define RHF_GUARANTEE_START_INIT 0x00000080
-
-/* Generated by pixie. */
-#define RHF_PIXIE 0x00000100
-
-/* Delay-load DSO by default. */
-#define RHF_DEFAULT_DELAY_LOAD 0x00000200
-
-/* Object may be requickstarted */
-#define RHF_REQUICKSTART 0x00000400
-
-/* Object has been requickstarted */
-#define RHF_REQUICKSTARTED 0x00000800
-
-/* Generated by cord. */
-#define RHF_CORD 0x00001000
-
-/* Object contains no unresolved undef symbols. */
-#define RHF_NO_UNRES_UNDEF 0x00002000
-
-/* Symbol table is in a safe order. */
-#define RHF_RLD_ORDER_SAFE 0x00004000
-
-/* Special values for the st_other field in the symbol table. These
- are used in an Irix 5 dynamic symbol table. */
-
-#define STO_DEFAULT STV_DEFAULT
-#define STO_INTERNAL STV_INTERNAL
-#define STO_HIDDEN STV_HIDDEN
-#define STO_PROTECTED STV_PROTECTED
-
-/* Two topmost bits denote the MIPS ISA for .text symbols:
- + 00 -- standard MIPS code,
- + 10 -- microMIPS code,
- + 11 -- MIPS16 code; requires the following two bits to be set too.
- Note that one of the MIPS16 bits overlaps with STO_MIPS_PIC. See below
- for details. */
-#define STO_MIPS_ISA (3 << 6)
-
-/* The mask spanning the rest of MIPS psABI flags. At most one is expected
- to be set except for STO_MIPS16. */
-#define STO_MIPS_FLAGS (~(STO_MIPS_ISA | ELF_ST_VISIBILITY (-1)))
-
-/* The MIPS psABI was updated in 2008 with support for PLTs and copy
- relocs. There are therefore two types of nonzero SHN_UNDEF functions:
- PLT entries and traditional MIPS lazy binding stubs. We mark the former
- with STO_MIPS_PLT to distinguish them from the latter. */
-#define STO_MIPS_PLT 0x8
-#define ELF_ST_IS_MIPS_PLT(other) \
- ((ELF_ST_IS_MIPS16 (other) \
- ? ((other) & (~STO_MIPS16 & STO_MIPS_FLAGS)) \
- : ((other) & STO_MIPS_FLAGS)) == STO_MIPS_PLT)
-#define ELF_ST_SET_MIPS_PLT(other) \
- ((ELF_ST_IS_MIPS16 (other) \
- ? ((other) & (STO_MIPS16 | ~STO_MIPS_FLAGS)) \
- : ((other) & ~STO_MIPS_FLAGS)) | STO_MIPS_PLT)
-
-/* This value is used to mark PIC functions in an object that mixes
- PIC and non-PIC. Note that this bit overlaps with STO_MIPS16,
- although MIPS16 symbols are never considered to be MIPS_PIC. */
-#define STO_MIPS_PIC 0x20
-#define ELF_ST_IS_MIPS_PIC(other) (((other) & STO_MIPS_FLAGS) == STO_MIPS_PIC)
-#define ELF_ST_SET_MIPS_PIC(other) \
- ((ELF_ST_IS_MIPS16 (other) \
- ? ((other) & ~(STO_MIPS16 | STO_MIPS_FLAGS)) \
- : ((other) & ~STO_MIPS_FLAGS)) | STO_MIPS_PIC)
-
-/* This value is used for a mips16 .text symbol. */
-#define STO_MIPS16 0xf0
-#define ELF_ST_IS_MIPS16(other) (((other) & STO_MIPS16) == STO_MIPS16)
-#define ELF_ST_SET_MIPS16(other) ((other) | STO_MIPS16)
-
-/* This value is used for a microMIPS .text symbol. To distinguish from
- STO_MIPS16, we set top two bits to be 10 to denote STO_MICROMIPS. The
- mask is STO_MIPS_ISA. */
-#define STO_MICROMIPS (2 << 6)
-#define ELF_ST_IS_MICROMIPS(other) (((other) & STO_MIPS_ISA) == STO_MICROMIPS)
-#define ELF_ST_SET_MICROMIPS(other) (((other) & ~STO_MIPS_ISA) | STO_MICROMIPS)
-
-/* Whether code compression (either of the MIPS16 or the microMIPS ASEs)
- has been indicated for a .text symbol. */
-#define ELF_ST_IS_COMPRESSED(other) \
- (ELF_ST_IS_MIPS16 (other) || ELF_ST_IS_MICROMIPS (other))
-
-/* This bit is used on Irix to indicate a symbol whose definition
- is optional - if, at final link time, it cannot be found, no
- error message should be produced. */
-#define STO_OPTIONAL (1 << 2)
-/* A macro to examine the STO_OPTIONAL bit. */
-#define ELF_MIPS_IS_OPTIONAL(other) ((other) & STO_OPTIONAL)
-
-/* The 64-bit MIPS ELF ABI uses an unusual reloc format. Each
- relocation entry specifies up to three actual relocations, all at
- the same address. The first relocation which required a symbol
- uses the symbol in the r_sym field. The second relocation which
- requires a symbol uses the symbol in the r_ssym field. If all
- three relocations require a symbol, the third one uses a zero
- value. */
-
-/* An entry in a 64 bit SHT_REL section. */
-
-typedef struct
-{
- /* Address of relocation. */
- unsigned char r_offset[8];
- /* Symbol index. */
- unsigned char r_sym[4];
- /* Special symbol. */
- unsigned char r_ssym[1];
- /* Third relocation. */
- unsigned char r_type3[1];
- /* Second relocation. */
- unsigned char r_type2[1];
- /* First relocation. */
- unsigned char r_type[1];
-} Elf64_Mips_External_Rel;
-
-typedef struct
-{
- /* Address of relocation. */
- bfd_vma r_offset;
- /* Symbol index. */
- unsigned long r_sym;
- /* Special symbol. */
- unsigned char r_ssym;
- /* Third relocation. */
- unsigned char r_type3;
- /* Second relocation. */
- unsigned char r_type2;
- /* First relocation. */
- unsigned char r_type;
-} Elf64_Mips_Internal_Rel;
-
-/* An entry in a 64 bit SHT_RELA section. */
-
-typedef struct
-{
- /* Address of relocation. */
- unsigned char r_offset[8];
- /* Symbol index. */
- unsigned char r_sym[4];
- /* Special symbol. */
- unsigned char r_ssym[1];
- /* Third relocation. */
- unsigned char r_type3[1];
- /* Second relocation. */
- unsigned char r_type2[1];
- /* First relocation. */
- unsigned char r_type[1];
- /* Addend. */
- unsigned char r_addend[8];
-} Elf64_Mips_External_Rela;
-
-typedef struct
-{
- /* Address of relocation. */
- bfd_vma r_offset;
- /* Symbol index. */
- unsigned long r_sym;
- /* Special symbol. */
- unsigned char r_ssym;
- /* Third relocation. */
- unsigned char r_type3;
- /* Second relocation. */
- unsigned char r_type2;
- /* First relocation. */
- unsigned char r_type;
- /* Addend. */
- bfd_signed_vma r_addend;
-} Elf64_Mips_Internal_Rela;
-
-/* MIPS ELF 64 relocation info access macros. */
-#define ELF64_MIPS_R_SSYM(i) (((i) >> 24) & 0xff)
-#define ELF64_MIPS_R_TYPE3(i) (((i) >> 16) & 0xff)
-#define ELF64_MIPS_R_TYPE2(i) (((i) >> 8) & 0xff)
-#define ELF64_MIPS_R_TYPE(i) ((i) & 0xff)
-
-/* Values found in the r_ssym field of a relocation entry. */
-
-/* No relocation. */
-#define RSS_UNDEF 0
-
-/* Value of GP. */
-#define RSS_GP 1
-
-/* Value of GP in object being relocated. */
-#define RSS_GP0 2
-
-/* Address of location being relocated. */
-#define RSS_LOC 3
-
-/* A SHT_MIPS_OPTIONS section contains a series of options, each of
- which starts with this header. */
-
-typedef struct
-{
- /* Type of option. */
- unsigned char kind[1];
- /* Size of option descriptor, including header. */
- unsigned char size[1];
- /* Section index of affected section, or 0 for global option. */
- unsigned char section[2];
- /* Information specific to this kind of option. */
- unsigned char info[4];
-} Elf_External_Options;
-
-typedef struct
-{
- /* Type of option. */
- unsigned char kind;
- /* Size of option descriptor, including header. */
- unsigned char size;
- /* Section index of affected section, or 0 for global option. */
- unsigned short section;
- /* Information specific to this kind of option. */
- unsigned long info;
-} Elf_Internal_Options;
-
-/* MIPS ELF option header swapping routines. */
-extern void bfd_mips_elf_swap_options_in
- (bfd *, const Elf_External_Options *, Elf_Internal_Options *);
-extern void bfd_mips_elf_swap_options_out
- (bfd *, const Elf_Internal_Options *, Elf_External_Options *);
-
-/* Values which may appear in the kind field of an Elf_Options
- structure. */
-
-/* Undefined. */
-#define ODK_NULL 0
-
-/* Register usage and GP value. */
-#define ODK_REGINFO 1
-
-/* Exception processing information. */
-#define ODK_EXCEPTIONS 2
-
-/* Section padding information. */
-#define ODK_PAD 3
-
-/* Hardware workarounds performed. */
-#define ODK_HWPATCH 4
-
-/* Fill value used by the linker. */
-#define ODK_FILL 5
-
-/* Reserved space for desktop tools. */
-#define ODK_TAGS 6
-
-/* Hardware workarounds, AND bits when merging. */
-#define ODK_HWAND 7
-
-/* Hardware workarounds, OR bits when merging. */
-#define ODK_HWOR 8
-
-/* GP group to use for text/data sections. */
-#define ODK_GP_GROUP 9
-
-/* ID information. */
-#define ODK_IDENT 10
-
-/* In the 32 bit ABI, an ODK_REGINFO option is just a Elf32_RegInfo
- structure. In the 64 bit ABI, it is the following structure. The
- info field of the options header is not used. */
-
-typedef struct
-{
- /* Mask of general purpose registers used. */
- unsigned char ri_gprmask[4];
- /* Padding. */
- unsigned char ri_pad[4];
- /* Mask of co-processor registers used. */
- unsigned char ri_cprmask[4][4];
- /* GP register value for this object file. */
- unsigned char ri_gp_value[8];
-} Elf64_External_RegInfo;
-
-typedef struct
-{
- /* Mask of general purpose registers used. */
- unsigned long ri_gprmask;
- /* Padding. */
- unsigned long ri_pad;
- /* Mask of co-processor registers used. */
- unsigned long ri_cprmask[4];
- /* GP register value for this object file. */
- bfd_vma ri_gp_value;
-} Elf64_Internal_RegInfo;
-
-typedef struct
-{
- /* The hash value computed from the name of the corresponding
- dynamic symbol. */
- unsigned char ms_hash_value[4];
- /* Contains both the dynamic relocation index and the symbol flags
- field. The macros ELF32_MS_REL_INDEX and ELF32_MS_FLAGS are used
- to access the individual values. The dynamic relocation index
- identifies the first entry in the .rel.dyn section that
- references the dynamic symbol corresponding to this msym entry.
- If the index is 0, no dynamic relocations are associated with the
- symbol. The symbol flags field is reserved for future use. */
- unsigned char ms_info[4];
-} Elf32_External_Msym;
-
-typedef struct
-{
- /* The hash value computed from the name of the corresponding
- dynamic symbol. */
- unsigned long ms_hash_value;
- /* Contains both the dynamic relocation index and the symbol flags
- field. The macros ELF32_MS_REL_INDEX and ELF32_MS_FLAGS are used
- to access the individual values. The dynamic relocation index
- identifies the first entry in the .rel.dyn section that
- references the dynamic symbol corresponding to this msym entry.
- If the index is 0, no dynamic relocations are associated with the
- symbol. The symbol flags field is reserved for future use. */
- unsigned long ms_info;
-} Elf32_Internal_Msym;
-
-#define ELF32_MS_REL_INDEX(i) ((i) >> 8)
-#define ELF32_MS_FLAGS(i) (i) & 0xff)
-#define ELF32_MS_INFO(r, f) (((r) << 8) + ((f) & 0xff))
-
-/* MIPS ELF reginfo swapping routines. */
-extern void bfd_mips_elf64_swap_reginfo_in
- (bfd *, const Elf64_External_RegInfo *, Elf64_Internal_RegInfo *);
-extern void bfd_mips_elf64_swap_reginfo_out
- (bfd *, const Elf64_Internal_RegInfo *, Elf64_External_RegInfo *);
-
-/* Masks for the info work of an ODK_EXCEPTIONS descriptor. */
-#define OEX_FPU_MIN 0x1f /* FPEs which must be enabled. */
-#define OEX_FPU_MAX 0x1f00 /* FPEs which may be enabled. */
-#define OEX_PAGE0 0x10000 /* Page zero must be mapped. */
-#define OEX_SMM 0x20000 /* Force sequential memory mode. */
-#define OEX_FPDBUG 0x40000 /* Force precise floating-point
- exceptions (debug mode). */
-#define OEX_DISMISS 0x80000 /* Dismiss invalid address faults. */
-
-/* Masks of the FP exceptions for OEX_FPU_MIN and OEX_FPU_MAX. */
-#define OEX_FPU_INVAL 0x10 /* Invalid operation exception. */
-#define OEX_FPU_DIV0 0x08 /* Division by zero exception. */
-#define OEX_FPU_OFLO 0x04 /* Overflow exception. */
-#define OEX_FPU_UFLO 0x02 /* Underflow exception. */
-#define OEX_FPU_INEX 0x01 /* Inexact exception. */
-
-/* Masks for the info word of an ODK_PAD descriptor. */
-#define OPAD_PREFIX 0x01
-#define OPAD_POSTFIX 0x02
-#define OPAD_SYMBOL 0x04
-
-/* Masks for the info word of an ODK_HWPATCH descriptor. */
-#define OHW_R4KEOP 0x00000001 /* R4000 end-of-page patch. */
-#define OHW_R8KPFETCH 0x00000002 /* May need R8000 prefetch patch. */
-#define OHW_R5KEOP 0x00000004 /* R5000 end-of-page patch. */
-#define OHW_R5KCVTL 0x00000008 /* R5000 cvt.[ds].l bug
- (clean == 1). */
-#define OHW_R10KLDL 0x00000010 /* Needs R10K misaligned
- load patch. */
-
-/* Masks for the info word of an ODK_IDENT/ODK_GP_GROUP descriptor. */
-#define OGP_GROUP 0x0000ffff /* GP group number. */
-#define OGP_SELF 0xffff0000 /* Self-contained GP groups. */
-
-/* Masks for the info word of an ODK_HWAND/ODK_HWOR descriptor. */
-#define OHWA0_R4KEOP_CHECKED 0x00000001
-#define OHWA0_R4KEOP_CLEAN 0x00000002
-
-
-/* Object attribute tags. */
-enum
-{
- /* 0-3 are generic. */
-
- /* Floating-point ABI used by this object file. */
- Tag_GNU_MIPS_ABI_FP = 4,
-
- /* MSA ABI used by this object file. */
- Tag_GNU_MIPS_ABI_MSA = 8,
-};
-
-/* Object attribute values. */
-enum
-{
- /* Values defined for Tag_GNU_MIPS_ABI_FP. */
-
- /* Not tagged or not using any ABIs affected by the differences. */
- Val_GNU_MIPS_ABI_FP_ANY = 0,
-
- /* Using hard-float -mdouble-float. */
- Val_GNU_MIPS_ABI_FP_DOUBLE = 1,
-
- /* Using hard-float -msingle-float. */
- Val_GNU_MIPS_ABI_FP_SINGLE = 2,
-
- /* Using soft-float. */
- Val_GNU_MIPS_ABI_FP_SOFT = 3,
-
- /* Using -mips32r2 -mfp64. */
- Val_GNU_MIPS_ABI_FP_64 = 4,
-
- /* Values defined for Tag_GNU_MIPS_ABI_MSA. */
-
- /* Not tagged or not using any ABIs affected by the differences. */
- Val_GNU_MIPS_ABI_MSA_ANY = 0,
-
- /* Using 128-bit MSA. */
- Val_GNU_MIPS_ABI_MSA_128 = 1,
-};
-
-#endif /* _ELF_MIPS_H */
diff --git a/include/elf/mmix.h b/include/elf/mmix.h
deleted file mode 100644
index 6d15f7ae4..000000000
--- a/include/elf/mmix.h
+++ /dev/null
@@ -1,173 +0,0 @@
-/* MMIX support for BFD.
- Copyright 2001, 2002, 2003, 2010 Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-/* This file holds definitions specific to the MMIX ELF ABI. */
-
-#ifndef ELF_MMIX_H
-#define ELF_MMIX_H
-
-#include "elf/reloc-macros.h"
-
-/* Relocations. See the reloc table in bfd/elf64-mmix.c for details. */
-START_RELOC_NUMBERS (elf_mmix_reloc_type)
- RELOC_NUMBER (R_MMIX_NONE, 0)
-
- /* Standard absolute relocations. */
- RELOC_NUMBER (R_MMIX_8, 1)
- RELOC_NUMBER (R_MMIX_16, 2)
- RELOC_NUMBER (R_MMIX_24, 3)
- RELOC_NUMBER (R_MMIX_32, 4)
- RELOC_NUMBER (R_MMIX_64, 5)
-
- /* Standard relative relocations. */
- RELOC_NUMBER (R_MMIX_PC_8, 6)
- RELOC_NUMBER (R_MMIX_PC_16, 7)
- RELOC_NUMBER (R_MMIX_PC_24, 8)
- RELOC_NUMBER (R_MMIX_PC_32, 9)
- RELOC_NUMBER (R_MMIX_PC_64, 10)
-
- /* GNU extensions for C++ vtables. */
- RELOC_NUMBER (R_MMIX_GNU_VTINHERIT, 11)
- RELOC_NUMBER (R_MMIX_GNU_VTENTRY, 12)
-
- /* A GETA instruction. */
- RELOC_NUMBER (R_MMIX_GETA, 13)
- RELOC_NUMBER (R_MMIX_GETA_1, 14)
- RELOC_NUMBER (R_MMIX_GETA_2, 15)
- RELOC_NUMBER (R_MMIX_GETA_3, 16)
-
- /* A conditional branch instruction. */
- RELOC_NUMBER (R_MMIX_CBRANCH, 17)
- RELOC_NUMBER (R_MMIX_CBRANCH_J, 18)
- RELOC_NUMBER (R_MMIX_CBRANCH_1, 19)
- RELOC_NUMBER (R_MMIX_CBRANCH_2, 20)
- RELOC_NUMBER (R_MMIX_CBRANCH_3, 21)
-
- /* A PUSHJ instruction. */
- RELOC_NUMBER (R_MMIX_PUSHJ, 22)
- RELOC_NUMBER (R_MMIX_PUSHJ_1, 23)
- RELOC_NUMBER (R_MMIX_PUSHJ_2, 24)
- RELOC_NUMBER (R_MMIX_PUSHJ_3, 25)
-
- /* A JMP instruction. */
- RELOC_NUMBER (R_MMIX_JMP, 26)
- RELOC_NUMBER (R_MMIX_JMP_1, 27)
- RELOC_NUMBER (R_MMIX_JMP_2, 28)
- RELOC_NUMBER (R_MMIX_JMP_3, 29)
-
- /* A relative address such as in a GETA or a branch. */
- RELOC_NUMBER (R_MMIX_ADDR19, 30)
-
- /* A relative address such as in a JMP (only). */
- RELOC_NUMBER (R_MMIX_ADDR27, 31)
-
- /* A general register or a number 0..255. */
- RELOC_NUMBER (R_MMIX_REG_OR_BYTE, 32)
-
- /* A general register. */
- RELOC_NUMBER (R_MMIX_REG, 33)
-
- /* A global register and an offset, the global register (allocated at
- link time) contents plus the offset made equivalent to the relocation
- expression at link time. The relocation must point at the Y field of
- an instruction. */
- RELOC_NUMBER (R_MMIX_BASE_PLUS_OFFSET, 34)
-
- /* A LOCAL assertion. */
- RELOC_NUMBER (R_MMIX_LOCAL, 35)
-
- /* A PUSHJ instruction, generating a stub if it does not reach. */
- RELOC_NUMBER (R_MMIX_PUSHJ_STUBBABLE, 36)
-END_RELOC_NUMBERS (R_MMIX_max)
-
-
-/* Section Attributes. */
-/* A section containing necessary information for relaxation. */
-#define SHF_MMIX_CANRELAX 0x80000000
-
-/* Symbol attributes. */
-/* A symbol with this section-index is a register. */
-#define SHN_REGISTER SHN_LOPROC
-
-/* This section holds contents for each initialized register, at VMA
- regno*8. A symbol relative to this section will be transformed to an
- absolute symbol with the value corresponding to the register number at
- final link time. A symbol with a value outside the inclusive range
- 32*8 .. 254*8 is an error. It is highly recommended to only use an
- upper bound of 253*8 or lower as specified in the (currently
- unspecified) ABI. */
-#define MMIX_REG_CONTENTS_SECTION_NAME ".MMIX.reg_contents"
-
-/* At link time, a section by this name is created, expected to be
- included in MMIX_REG_CONTENTS_SECTION_NAME in the output. */
-#define MMIX_LD_ALLOCATED_REG_CONTENTS_SECTION_NAME \
- ".MMIX.reg_contents.linker_allocated"
-
-/* This is a faked section holding symbols with SHN_REGISTER. Don't
- confuse it with MMIX_REG_CONTENTS_SECTION_NAME; this one has no
- contents, just values. It is an error for a value in this section to
- be outside the range 32..255 and it must never become an actual section
- in an object file. */
-#define MMIX_REG_SECTION_NAME "*REG*"
-
-/* Appended with a number N=0..65535, this is a representation of the
- mmixal "BSPEC N" ... "ESPEC" directive pair; the contents go into an
- ELF section by name ".MMIX.spec_data.N". */
-#define MMIX_OTHER_SPEC_SECTION_PREFIX ".MMIX.spec_data."
-
-/* A section SECNAME is noted to start at "__.MMIX.start.SECNAME" by the
- presence of this symbol. Currently only implemented for ".text"
- through the symbol "__.MMIX.start..text". */
-#define MMIX_LOC_SECTION_START_SYMBOL_PREFIX "__.MMIX.start."
-
-/* This symbol is always a function. */
-#define MMIX_START_SYMBOL_NAME "Main"
-
-
-/* We smuggle in a few MMO specifics here. We don't make a specific MMO
- file, since we can't reasonably support MMO without ELF; we have to
- include this file anyway. */
-
-#define MMO_TEXT_SECTION_NAME ".text"
-#define MMO_DATA_SECTION_NAME ".data"
-
-/* A definition for the flags we put in spec data in files. A copy of our
- own of some flags to keep immune to BFD flag changes. See section.c of
- 2001-07-18 for flag documentation. */
-#define MMO_SEC_ALLOC 0x001
-#define MMO_SEC_LOAD 0x002
-#define MMO_SEC_RELOC 0x004
-#define MMO_SEC_READONLY 0x010
-#define MMO_SEC_CODE 0x020
-#define MMO_SEC_DATA 0x040
-#define MMO_SEC_NEVER_LOAD 0x400
-#define MMO_SEC_IS_COMMON 0x8000
-#define MMO_SEC_DEBUGGING 0x10000
-
-#ifdef BFD_ARCH_SIZE
-extern bfd_boolean _bfd_mmix_before_linker_allocation
- (bfd *, struct bfd_link_info *);
-extern bfd_boolean _bfd_mmix_after_linker_allocation
- (bfd *, struct bfd_link_info *);
-extern bfd_boolean _bfd_mmix_check_all_relocs
- (bfd *, struct bfd_link_info *);
-#endif
-
-#endif /* ELF_MMIX_H */
diff --git a/include/elf/mn10200.h b/include/elf/mn10200.h
deleted file mode 100644
index 24972b689..000000000
--- a/include/elf/mn10200.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/* MN10200 ELF support for BFD.
- Copyright 1998, 2000, 2010 Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-/* This file holds definitions specific to the MN10200 ELF ABI. */
-
-#ifndef _ELF_MN10200_H
-#define _ELF_MN10200_H
-
-#include "elf/reloc-macros.h"
-
-/* Relocations. */
-START_RELOC_NUMBERS (elf_mn10200_reloc_type)
- RELOC_NUMBER (R_MN10200_NONE, 0)
- RELOC_NUMBER (R_MN10200_32, 1)
- RELOC_NUMBER (R_MN10200_16, 2)
- RELOC_NUMBER (R_MN10200_8, 3)
- RELOC_NUMBER (R_MN10200_24, 4)
- RELOC_NUMBER (R_MN10200_PCREL8, 5)
- RELOC_NUMBER (R_MN10200_PCREL16, 6)
- RELOC_NUMBER (R_MN10200_PCREL24, 7)
-END_RELOC_NUMBERS (R_MN10200_max)
-
-#endif /* _ELF_MN10200_H */
diff --git a/include/elf/mn10300.h b/include/elf/mn10300.h
deleted file mode 100644
index 529b3897b..000000000
--- a/include/elf/mn10300.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/* MN10300 ELF support for BFD.
- Copyright 1998, 1999, 2000, 2003, 2007 Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-/* This file holds definitions specific to the MN10300 ELF ABI. */
-
-#ifndef _ELF_MN10300_H
-#define _ELF_MN10300_H
-
-#include "elf/reloc-macros.h"
-
-/* Relocations. */
-START_RELOC_NUMBERS (elf_mn10300_reloc_type)
- RELOC_NUMBER (R_MN10300_NONE, 0)
- RELOC_NUMBER (R_MN10300_32, 1)
- RELOC_NUMBER (R_MN10300_16, 2)
- RELOC_NUMBER (R_MN10300_8, 3)
- RELOC_NUMBER (R_MN10300_PCREL32, 4)
- RELOC_NUMBER (R_MN10300_PCREL16, 5)
- RELOC_NUMBER (R_MN10300_PCREL8, 6)
- RELOC_NUMBER (R_MN10300_GNU_VTINHERIT, 7)
- RELOC_NUMBER (R_MN10300_GNU_VTENTRY, 8)
- RELOC_NUMBER (R_MN10300_24, 9)
- RELOC_NUMBER (R_MN10300_GOTPC32, 10)
- RELOC_NUMBER (R_MN10300_GOTPC16, 11)
- RELOC_NUMBER (R_MN10300_GOTOFF32, 12)
- RELOC_NUMBER (R_MN10300_GOTOFF24, 13)
- RELOC_NUMBER (R_MN10300_GOTOFF16, 14)
- RELOC_NUMBER (R_MN10300_PLT32, 15)
- RELOC_NUMBER (R_MN10300_PLT16, 16)
- RELOC_NUMBER (R_MN10300_GOT32, 17)
- RELOC_NUMBER (R_MN10300_GOT24, 18)
- RELOC_NUMBER (R_MN10300_GOT16, 19)
- RELOC_NUMBER (R_MN10300_COPY, 20)
- RELOC_NUMBER (R_MN10300_GLOB_DAT, 21)
- RELOC_NUMBER (R_MN10300_JMP_SLOT, 22)
- RELOC_NUMBER (R_MN10300_RELATIVE, 23)
- RELOC_NUMBER (R_MN10300_TLS_GD, 24)
- RELOC_NUMBER (R_MN10300_TLS_LD, 25)
- RELOC_NUMBER (R_MN10300_TLS_LDO, 26)
- RELOC_NUMBER (R_MN10300_TLS_GOTIE, 27)
- RELOC_NUMBER (R_MN10300_TLS_IE, 28)
- RELOC_NUMBER (R_MN10300_TLS_LE, 29)
- RELOC_NUMBER (R_MN10300_TLS_DTPMOD, 30)
- RELOC_NUMBER (R_MN10300_TLS_DTPOFF, 31)
- RELOC_NUMBER (R_MN10300_TLS_TPOFF, 32)
- RELOC_NUMBER (R_MN10300_SYM_DIFF, 33)
- RELOC_NUMBER (R_MN10300_ALIGN, 34)
-END_RELOC_NUMBERS (R_MN10300_MAX)
-
-/* Machine variant if we know it. This field was invented at Cygnus,
- but it is hoped that other vendors will adopt it. If some standard
- is developed, this code should be changed to follow it. */
-
-#define EF_MN10300_MACH 0x00FF0000
-
-/* Cygnus is choosing values between 80 and 9F;
- 00 - 7F should be left for a future standard;
- the rest are open. */
-
-#define E_MN10300_MACH_MN10300 0x00810000
-#define E_MN10300_MACH_AM33 0x00820000
-#define E_MN10300_MACH_AM33_2 0x00830000
-#endif /* _ELF_MN10300_H */
diff --git a/include/elf/moxie.h b/include/elf/moxie.h
deleted file mode 100644
index 0b3eb3810..000000000
--- a/include/elf/moxie.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/* moxie ELF support for BFD.
- Copyright 2009, 2010 Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _ELF_MOXIE_H
-#define _ELF_MOXIE_H
-
-#include "elf/reloc-macros.h"
-
-/* Relocation types. */
-START_RELOC_NUMBERS (elf_moxie_reloc_type)
- RELOC_NUMBER (R_MOXIE_NONE, 0)
- RELOC_NUMBER (R_MOXIE_32, 1)
- RELOC_NUMBER (R_MOXIE_PCREL10, 2)
-END_RELOC_NUMBERS (R_MOXIE_max)
-
-#endif /* _ELF_MOXIE_H */
diff --git a/include/elf/msp430.h b/include/elf/msp430.h
deleted file mode 100644
index ac8e28c31..000000000
--- a/include/elf/msp430.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/* MSP430 ELF support for BFD.
- Copyright (C) 2002-2013 Free Software Foundation, Inc.
- Contributed by Dmitry Diky <diwil@mail.ru>
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _ELF_MSP430_H
-#define _ELF_MSP430_H
-
-#include "elf/reloc-macros.h"
-
-/* Processor specific flags for the ELF header e_flags field. */
-#define EF_MSP430_MACH 0xff
-
-#define E_MSP430_MACH_MSP430x11 11
-#define E_MSP430_MACH_MSP430x11x1 110
-#define E_MSP430_MACH_MSP430x12 12
-#define E_MSP430_MACH_MSP430x13 13
-#define E_MSP430_MACH_MSP430x14 14
-#define E_MSP430_MACH_MSP430x15 15
-#define E_MSP430_MACH_MSP430x16 16
-#define E_MSP430_MACH_MSP430x20 20
-#define E_MSP430_MACH_MSP430x22 22
-#define E_MSP430_MACH_MSP430x23 23
-#define E_MSP430_MACH_MSP430x24 24
-#define E_MSP430_MACH_MSP430x26 26
-#define E_MSP430_MACH_MSP430x31 31
-#define E_MSP430_MACH_MSP430x32 32
-#define E_MSP430_MACH_MSP430x33 33
-#define E_MSP430_MACH_MSP430x41 41
-#define E_MSP430_MACH_MSP430x42 42
-#define E_MSP430_MACH_MSP430x43 43
-#define E_MSP430_MACH_MSP430x44 44
-#define E_MSP430_MACH_MSP430X 45
-#define E_MSP430_MACH_MSP430x46 46
-#define E_MSP430_MACH_MSP430x47 47
-#define E_MSP430_MACH_MSP430x54 54
-
-#define SHT_MSP430_ATTRIBUTES 0x70000003 /* Section holds ABI attributes. */
-#define SHT_MSP430_SEC_FLAGS 0x7f000005 /* Holds TI compiler's section flags. */
-#define SHT_MSP430_SYM_ALIASES 0x7f000006 /* Holds TI compiler's symbol aliases. */
-
-/* Tag values for an attribute section. */
-#define OFBA_MSPABI_Tag_ISA 4
-#define OFBA_MSPABI_Tag_Code_Model 6
-#define OFBA_MSPABI_Tag_Data_Model 8
-
-/* Relocations. */
-START_RELOC_NUMBERS (elf_msp430_reloc_type)
- RELOC_NUMBER (R_MSP430_NONE, 0)
- RELOC_NUMBER (R_MSP430_32, 1)
- RELOC_NUMBER (R_MSP430_10_PCREL, 2)
- RELOC_NUMBER (R_MSP430_16, 3)
- RELOC_NUMBER (R_MSP430_16_PCREL, 4)
- RELOC_NUMBER (R_MSP430_16_BYTE, 5)
- RELOC_NUMBER (R_MSP430_16_PCREL_BYTE, 6)
- RELOC_NUMBER (R_MSP430_2X_PCREL, 7)
- RELOC_NUMBER (R_MSP430_RL_PCREL, 8)
- RELOC_NUMBER (R_MSP430_8, 9)
- RELOC_NUMBER (R_MSP430_SYM_DIFF, 10)
-END_RELOC_NUMBERS (R_MSP430_max)
-
-START_RELOC_NUMBERS (elf_msp430x_reloc_type)
- RELOC_NUMBER (R_MSP430_ABS32, 1) /* aka R_MSP430_32 */
- RELOC_NUMBER (R_MSP430_ABS16, 2) /* aka R_MSP430_16 */
- RELOC_NUMBER (R_MSP430_ABS8, 3)
- RELOC_NUMBER (R_MSP430_PCR16, 4) /* aka R_MSP430_16_PCREL */
- RELOC_NUMBER (R_MSP430X_PCR20_EXT_SRC, 5)
- RELOC_NUMBER (R_MSP430X_PCR20_EXT_DST, 6)
- RELOC_NUMBER (R_MSP430X_PCR20_EXT_ODST, 7)
- RELOC_NUMBER (R_MSP430X_ABS20_EXT_SRC, 8)
- RELOC_NUMBER (R_MSP430X_ABS20_EXT_DST, 9)
- RELOC_NUMBER (R_MSP430X_ABS20_EXT_ODST, 10)
- RELOC_NUMBER (R_MSP430X_ABS20_ADR_SRC, 11)
- RELOC_NUMBER (R_MSP430X_ABS20_ADR_DST, 12)
- RELOC_NUMBER (R_MSP430X_PCR16, 13) /* Like R_MSP430_PCR16 but with overflow checking. */
- RELOC_NUMBER (R_MSP430X_PCR20_CALL, 14)
- RELOC_NUMBER (R_MSP430X_ABS16, 15) /* Like R_MSP430_ABS16 but with overflow checking. */
- RELOC_NUMBER (R_MSP430_ABS_HI16, 16)
- RELOC_NUMBER (R_MSP430_PREL31, 17)
- RELOC_NUMBER (R_MSP430_EHTYPE, 18) /* Mentioned in ABI. */
- RELOC_NUMBER (R_MSP430X_10_PCREL, 19) /* Red Hat invention. Used for Jump instructions. */
- RELOC_NUMBER (R_MSP430X_2X_PCREL, 20) /* Red Hat invention. Used for relaxing jumps. */
- RELOC_NUMBER (R_MSP430X_SYM_DIFF, 21) /* Red Hat invention. Used for relaxing debug info. */
-END_RELOC_NUMBERS (R_MSP430x_max)
-
-#endif /* _ELF_MSP430_H */
diff --git a/include/elf/mt.h b/include/elf/mt.h
deleted file mode 100644
index 2bc09f42d..000000000
--- a/include/elf/mt.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/* MS1 ELF support for BFD.
- Copyright (C) 2000, 2005, 2010 Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _ELF_MT_H
-#define _ELF_MT_H
-
-#include "elf/reloc-macros.h"
-
-/* Relocations. */
-START_RELOC_NUMBERS (elf_mt_reloc_type)
- RELOC_NUMBER (R_MT_NONE, 0)
- RELOC_NUMBER (R_MT_16, 1)
- RELOC_NUMBER (R_MT_32, 2)
- RELOC_NUMBER (R_MT_32_PCREL, 3)
- RELOC_NUMBER (R_MT_PC16, 4)
- RELOC_NUMBER (R_MT_HI16, 5)
- RELOC_NUMBER (R_MT_LO16, 6)
-END_RELOC_NUMBERS(R_MT_max)
-
-#define EF_MT_CPU_MRISC 0x00000001 /* default */
-#define EF_MT_CPU_MRISC2 0x00000002 /* MRISC2 */
-#define EF_MT_CPU_MS2 0x00000003 /* MS2 */
-#define EF_MT_CPU_MASK 0x00000003 /* specific cpu bits */
-#define EF_MT_ALL_FLAGS (EF_MT_CPU_MASK)
-
-/* The location of the memory mapped hardware stack. */
-#define MT_STACK_VALUE 0x0f000000
-#define MT_STACK_SIZE 0x20
-
-#endif /* _ELF_MT_H */
diff --git a/include/elf/nios2.h b/include/elf/nios2.h
deleted file mode 100644
index ff5947bf7..000000000
--- a/include/elf/nios2.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/* Altera Nios II ELF support for BFD.
- Copyright (C) 2012, 2013 Free Software Foundation, Inc.
- Contributed by Nigel Gray (ngray@altera.com).
- Contributed by Mentor Graphics, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-
-/* This file holds definitions specific to the Altera Nios II ELF ABI. Note
- that most of this is not actually implemented by BFD. */
-
-#ifndef _ELF_NIOS2_H
-#define _ELF_NIOS2_H
-
-#include "elf/reloc-macros.h"
-
-/* The order of these numbers must match the order in
- the elf_nios2_howto_table_rel table for the lookup
- function to work properly. */
-
-START_RELOC_NUMBERS (elf_nios2_reloc_type)
- RELOC_NUMBER (R_NIOS2_NONE, 0)
- RELOC_NUMBER (R_NIOS2_S16, 1)
- RELOC_NUMBER (R_NIOS2_U16, 2)
- RELOC_NUMBER (R_NIOS2_PCREL16, 3)
- RELOC_NUMBER (R_NIOS2_CALL26, 4)
- RELOC_NUMBER (R_NIOS2_IMM5, 5)
- RELOC_NUMBER (R_NIOS2_CACHE_OPX, 6)
- RELOC_NUMBER (R_NIOS2_IMM6, 7)
- RELOC_NUMBER (R_NIOS2_IMM8, 8)
- RELOC_NUMBER (R_NIOS2_HI16, 9)
- RELOC_NUMBER (R_NIOS2_LO16, 10)
- RELOC_NUMBER (R_NIOS2_HIADJ16, 11)
- RELOC_NUMBER (R_NIOS2_BFD_RELOC_32, 12)
- RELOC_NUMBER (R_NIOS2_BFD_RELOC_16, 13)
- RELOC_NUMBER (R_NIOS2_BFD_RELOC_8, 14)
- RELOC_NUMBER (R_NIOS2_GPREL, 15)
- RELOC_NUMBER (R_NIOS2_GNU_VTINHERIT, 16)
- RELOC_NUMBER (R_NIOS2_GNU_VTENTRY, 17)
- RELOC_NUMBER (R_NIOS2_UJMP, 18)
- RELOC_NUMBER (R_NIOS2_CJMP, 19)
- RELOC_NUMBER (R_NIOS2_CALLR, 20)
- RELOC_NUMBER (R_NIOS2_ALIGN, 21)
- RELOC_NUMBER (R_NIOS2_GOT16, 22)
- RELOC_NUMBER (R_NIOS2_CALL16, 23)
- RELOC_NUMBER (R_NIOS2_GOTOFF_LO, 24)
- RELOC_NUMBER (R_NIOS2_GOTOFF_HA, 25)
- RELOC_NUMBER (R_NIOS2_PCREL_LO, 26)
- RELOC_NUMBER (R_NIOS2_PCREL_HA, 27)
- RELOC_NUMBER (R_NIOS2_TLS_GD16, 28)
- RELOC_NUMBER (R_NIOS2_TLS_LDM16, 29)
- RELOC_NUMBER (R_NIOS2_TLS_LDO16, 30)
- RELOC_NUMBER (R_NIOS2_TLS_IE16, 31)
- RELOC_NUMBER (R_NIOS2_TLS_LE16, 32)
- RELOC_NUMBER (R_NIOS2_TLS_DTPMOD, 33)
- RELOC_NUMBER (R_NIOS2_TLS_DTPREL, 34)
- RELOC_NUMBER (R_NIOS2_TLS_TPREL, 35)
- RELOC_NUMBER (R_NIOS2_COPY, 36)
- RELOC_NUMBER (R_NIOS2_GLOB_DAT, 37)
- RELOC_NUMBER (R_NIOS2_JUMP_SLOT, 38)
- RELOC_NUMBER (R_NIOS2_RELATIVE, 39)
- RELOC_NUMBER (R_NIOS2_GOTOFF, 40)
- RELOC_NUMBER (R_NIOS2_ILLEGAL, 41)
-END_RELOC_NUMBERS (R_NIOS2_maxext)
-
-/* Processor-specific section flags. */
-
-/* This is used to mark gp-relative sections. */
-#define SHF_NIOS2_GPREL 0x10000000
-
-/* Processor-specific dynamic array tags. */
-
-/* Address of _gp. */
-#define DT_NIOS2_GP 0x70000002
-
-#endif /* _ELF_NIOS2_H */
diff --git a/include/elf/openrisc.h b/include/elf/openrisc.h
deleted file mode 100644
index 87969e8b8..000000000
--- a/include/elf/openrisc.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/* OpenRISC ELF support for BFD.
- Copyright 2001, 2010 Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _ELF_OPENRISC_H
-#define _ELF_OPENRISC_H
-
-#include "elf/reloc-macros.h"
-
-/* Relocations. */
-START_RELOC_NUMBERS (elf_openrisc_reloc_type)
- RELOC_NUMBER (R_OPENRISC_NONE, 0)
- RELOC_NUMBER (R_OPENRISC_INSN_REL_26, 1)
- RELOC_NUMBER (R_OPENRISC_INSN_ABS_26, 2)
- RELOC_NUMBER (R_OPENRISC_LO_16_IN_INSN, 3)
- RELOC_NUMBER (R_OPENRISC_HI_16_IN_INSN, 4)
- RELOC_NUMBER (R_OPENRISC_8, 5)
- RELOC_NUMBER (R_OPENRISC_16, 6)
- RELOC_NUMBER (R_OPENRISC_32, 7)
- RELOC_NUMBER (R_OPENRISC_GNU_VTINHERIT, 8)
- RELOC_NUMBER (R_OPENRISC_GNU_VTENTRY, 9)
-END_RELOC_NUMBERS (R_OPENRISC_max)
-
-#endif /* _ELF_OPENRISC_H */
diff --git a/include/elf/or32.h b/include/elf/or32.h
deleted file mode 100644
index 9f1c2f3f7..000000000
--- a/include/elf/or32.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/* OR1K ELF support for BFD. Derived from ppc.h.
- Copyright (C) 2002, 2010 Free Software Foundation, Inc.
- Contributed by Ivan Guzvinec <ivang@opencores.org>
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef _ELF_OR1K_H
-#define _ELF_OR1K_H
-
-#include "elf/reloc-macros.h"
-
-/* Relocations. */
-START_RELOC_NUMBERS (elf_or32_reloc_type)
- RELOC_NUMBER (R_OR32_NONE, 0)
- RELOC_NUMBER (R_OR32_32, 1)
- RELOC_NUMBER (R_OR32_16, 2)
- RELOC_NUMBER (R_OR32_8, 3)
- RELOC_NUMBER (R_OR32_CONST, 4)
- RELOC_NUMBER (R_OR32_CONSTH, 5)
- RELOC_NUMBER (R_OR32_JUMPTARG, 6)
- RELOC_NUMBER (R_OR32_GNU_VTENTRY, 7)
- RELOC_NUMBER (R_OR32_GNU_VTINHERIT, 8)
-END_RELOC_NUMBERS (R_OR32_max)
-
-/* Four bit OR32 machine type field. */
-#define EF_OR32_MACH 0x0000000f
-
-/* Various CPU types. */
-#define E_OR32_MACH_BASE 0x00000000
-#define E_OR32_MACH_UNUSED1 0x00000001
-#define E_OR32_MACH_UNUSED2 0x00000002
-#define E_OR32_MACH_UNUSED4 0x00000003
-
-/* Processor specific section headers, sh_type field */
-#define SHT_ORDERED SHT_HIPROC /* Link editor is to sort the \
- entries in this section \
- based on the address \
- specified in the associated \
- symbol table entry. */
-
-#endif /* _ELF_OR1K_H */
diff --git a/include/elf/pj.h b/include/elf/pj.h
deleted file mode 100644
index afd19e8dc..000000000
--- a/include/elf/pj.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/* picoJava ELF support for BFD.
- Copyright 1999, 2000, 2010 Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _ELF_PJ_H
-#define _ELF_PJ_H
-
-#include "elf/reloc-macros.h"
-
-/* Relocations. */
-
-START_RELOC_NUMBERS (elf_pj_reloc_type)
- RELOC_NUMBER (R_PJ_NONE, 0)
- RELOC_NUMBER (R_PJ_DATA_DIR32, 1)
- RELOC_NUMBER (R_PJ_CODE_REL32, 2)
- RELOC_NUMBER (R_PJ_CODE_REL16, 3)
- RELOC_NUMBER (R_PJ_CODE_DIR32, 6)
- RELOC_NUMBER (R_PJ_CODE_DIR16, 7)
- RELOC_NUMBER (R_PJ_CODE_LO16, 13)
- RELOC_NUMBER (R_PJ_CODE_HI16, 14)
- RELOC_NUMBER (R_PJ_GNU_VTINHERIT, 15)
- RELOC_NUMBER (R_PJ_GNU_VTENTRY, 16)
-END_RELOC_NUMBERS (R_PJ_max)
-
-#define EF_PICOJAVA_ARCH 0x0000000f
-#define EF_PICOJAVA_NEWCALLS 0x00000010
-#define EF_PICOJAVA_GNUCALLS 0x00000020 /* The (currently) non standard GNU calling convention */
-
-#endif
diff --git a/include/elf/ppc.h b/include/elf/ppc.h
deleted file mode 100644
index f80a1e8a3..000000000
--- a/include/elf/ppc.h
+++ /dev/null
@@ -1,223 +0,0 @@
-/* PPC ELF support for BFD.
- Copyright 1995, 1996, 1998, 2000, 2001, 2002, 2003, 2005, 2007, 2008,
- 2009, 2010 Free Software Foundation, Inc.
-
- By Michael Meissner, Cygnus Support, <meissner@cygnus.com>,
- from information in the System V Application Binary Interface,
- PowerPC Processor Supplement and the PowerPC Embedded Application
- Binary Interface (eabi).
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-/* This file holds definitions specific to the PPC ELF ABI. Note
- that most of this is not actually implemented by BFD. */
-
-#ifndef _ELF_PPC_H
-#define _ELF_PPC_H
-
-#include "elf/reloc-macros.h"
-
-/* Relocations. */
-START_RELOC_NUMBERS (elf_ppc_reloc_type)
- RELOC_NUMBER (R_PPC_NONE, 0)
- RELOC_NUMBER (R_PPC_ADDR32, 1)
- RELOC_NUMBER (R_PPC_ADDR24, 2)
- RELOC_NUMBER (R_PPC_ADDR16, 3)
- RELOC_NUMBER (R_PPC_ADDR16_LO, 4)
- RELOC_NUMBER (R_PPC_ADDR16_HI, 5)
- RELOC_NUMBER (R_PPC_ADDR16_HA, 6)
- RELOC_NUMBER (R_PPC_ADDR14, 7)
- RELOC_NUMBER (R_PPC_ADDR14_BRTAKEN, 8)
- RELOC_NUMBER (R_PPC_ADDR14_BRNTAKEN, 9)
- RELOC_NUMBER (R_PPC_REL24, 10)
- RELOC_NUMBER (R_PPC_REL14, 11)
- RELOC_NUMBER (R_PPC_REL14_BRTAKEN, 12)
- RELOC_NUMBER (R_PPC_REL14_BRNTAKEN, 13)
- RELOC_NUMBER (R_PPC_GOT16, 14)
- RELOC_NUMBER (R_PPC_GOT16_LO, 15)
- RELOC_NUMBER (R_PPC_GOT16_HI, 16)
- RELOC_NUMBER (R_PPC_GOT16_HA, 17)
- RELOC_NUMBER (R_PPC_PLTREL24, 18)
- RELOC_NUMBER (R_PPC_COPY, 19)
- RELOC_NUMBER (R_PPC_GLOB_DAT, 20)
- RELOC_NUMBER (R_PPC_JMP_SLOT, 21)
- RELOC_NUMBER (R_PPC_RELATIVE, 22)
- RELOC_NUMBER (R_PPC_LOCAL24PC, 23)
- RELOC_NUMBER (R_PPC_UADDR32, 24)
- RELOC_NUMBER (R_PPC_UADDR16, 25)
- RELOC_NUMBER (R_PPC_REL32, 26)
- RELOC_NUMBER (R_PPC_PLT32, 27)
- RELOC_NUMBER (R_PPC_PLTREL32, 28)
- RELOC_NUMBER (R_PPC_PLT16_LO, 29)
- RELOC_NUMBER (R_PPC_PLT16_HI, 30)
- RELOC_NUMBER (R_PPC_PLT16_HA, 31)
- RELOC_NUMBER (R_PPC_SDAREL16, 32)
- RELOC_NUMBER (R_PPC_SECTOFF, 33)
- RELOC_NUMBER (R_PPC_SECTOFF_LO, 34)
- RELOC_NUMBER (R_PPC_SECTOFF_HI, 35)
- RELOC_NUMBER (R_PPC_SECTOFF_HA, 36)
- RELOC_NUMBER (R_PPC_ADDR30, 37)
-
-#ifndef RELOC_MACROS_GEN_FUNC
-/* Fake relocations for branch stubs, only used internally by ld. */
- RELOC_NUMBER (R_PPC_RELAX, 48)
- RELOC_NUMBER (R_PPC_RELAX_PLT, 49)
- RELOC_NUMBER (R_PPC_RELAX_PLTREL24, 50)
-#endif
-
- /* Relocs added to support TLS. */
- RELOC_NUMBER (R_PPC_TLS, 67)
- RELOC_NUMBER (R_PPC_DTPMOD32, 68)
- RELOC_NUMBER (R_PPC_TPREL16, 69)
- RELOC_NUMBER (R_PPC_TPREL16_LO, 70)
- RELOC_NUMBER (R_PPC_TPREL16_HI, 71)
- RELOC_NUMBER (R_PPC_TPREL16_HA, 72)
- RELOC_NUMBER (R_PPC_TPREL32, 73)
- RELOC_NUMBER (R_PPC_DTPREL16, 74)
- RELOC_NUMBER (R_PPC_DTPREL16_LO, 75)
- RELOC_NUMBER (R_PPC_DTPREL16_HI, 76)
- RELOC_NUMBER (R_PPC_DTPREL16_HA, 77)
- RELOC_NUMBER (R_PPC_DTPREL32, 78)
- RELOC_NUMBER (R_PPC_GOT_TLSGD16, 79)
- RELOC_NUMBER (R_PPC_GOT_TLSGD16_LO, 80)
- RELOC_NUMBER (R_PPC_GOT_TLSGD16_HI, 81)
- RELOC_NUMBER (R_PPC_GOT_TLSGD16_HA, 82)
- RELOC_NUMBER (R_PPC_GOT_TLSLD16, 83)
- RELOC_NUMBER (R_PPC_GOT_TLSLD16_LO, 84)
- RELOC_NUMBER (R_PPC_GOT_TLSLD16_HI, 85)
- RELOC_NUMBER (R_PPC_GOT_TLSLD16_HA, 86)
- RELOC_NUMBER (R_PPC_GOT_TPREL16, 87)
- RELOC_NUMBER (R_PPC_GOT_TPREL16_LO, 88)
- RELOC_NUMBER (R_PPC_GOT_TPREL16_HI, 89)
- RELOC_NUMBER (R_PPC_GOT_TPREL16_HA, 90)
- RELOC_NUMBER (R_PPC_GOT_DTPREL16, 91)
- RELOC_NUMBER (R_PPC_GOT_DTPREL16_LO, 92)
- RELOC_NUMBER (R_PPC_GOT_DTPREL16_HI, 93)
- RELOC_NUMBER (R_PPC_GOT_DTPREL16_HA, 94)
- RELOC_NUMBER (R_PPC_TLSGD, 95)
- RELOC_NUMBER (R_PPC_TLSLD, 96)
-
-/* The remaining relocs are from the Embedded ELF ABI, and are not
- in the SVR4 ELF ABI. */
- RELOC_NUMBER (R_PPC_EMB_NADDR32, 101)
- RELOC_NUMBER (R_PPC_EMB_NADDR16, 102)
- RELOC_NUMBER (R_PPC_EMB_NADDR16_LO, 103)
- RELOC_NUMBER (R_PPC_EMB_NADDR16_HI, 104)
- RELOC_NUMBER (R_PPC_EMB_NADDR16_HA, 105)
- RELOC_NUMBER (R_PPC_EMB_SDAI16, 106)
- RELOC_NUMBER (R_PPC_EMB_SDA2I16, 107)
- RELOC_NUMBER (R_PPC_EMB_SDA2REL, 108)
- RELOC_NUMBER (R_PPC_EMB_SDA21, 109)
- RELOC_NUMBER (R_PPC_EMB_MRKREF, 110)
- RELOC_NUMBER (R_PPC_EMB_RELSEC16, 111)
- RELOC_NUMBER (R_PPC_EMB_RELST_LO, 112)
- RELOC_NUMBER (R_PPC_EMB_RELST_HI, 113)
- RELOC_NUMBER (R_PPC_EMB_RELST_HA, 114)
- RELOC_NUMBER (R_PPC_EMB_BIT_FLD, 115)
- RELOC_NUMBER (R_PPC_EMB_RELSDA, 116)
-
-/* PowerPC VLE relocations. */
- RELOC_NUMBER (R_PPC_VLE_REL8, 216)
- RELOC_NUMBER (R_PPC_VLE_REL15, 217)
- RELOC_NUMBER (R_PPC_VLE_REL24, 218)
- RELOC_NUMBER (R_PPC_VLE_LO16A, 219)
- RELOC_NUMBER (R_PPC_VLE_LO16D, 220)
- RELOC_NUMBER (R_PPC_VLE_HI16A, 221)
- RELOC_NUMBER (R_PPC_VLE_HI16D, 222)
- RELOC_NUMBER (R_PPC_VLE_HA16A, 223)
- RELOC_NUMBER (R_PPC_VLE_HA16D, 224)
- RELOC_NUMBER (R_PPC_VLE_SDA21, 225)
- RELOC_NUMBER (R_PPC_VLE_SDA21_LO, 226)
- RELOC_NUMBER (R_PPC_VLE_SDAREL_LO16A, 227)
- RELOC_NUMBER (R_PPC_VLE_SDAREL_LO16D, 228)
- RELOC_NUMBER (R_PPC_VLE_SDAREL_HI16A, 229)
- RELOC_NUMBER (R_PPC_VLE_SDAREL_HI16D, 230)
- RELOC_NUMBER (R_PPC_VLE_SDAREL_HA16A, 231)
- RELOC_NUMBER (R_PPC_VLE_SDAREL_HA16D, 232)
-
-/* Support STT_GNU_IFUNC plt calls. */
- RELOC_NUMBER (R_PPC_IRELATIVE, 248)
-
-/* These are GNU extensions used in PIC code sequences. */
- RELOC_NUMBER (R_PPC_REL16, 249)
- RELOC_NUMBER (R_PPC_REL16_LO, 250)
- RELOC_NUMBER (R_PPC_REL16_HI, 251)
- RELOC_NUMBER (R_PPC_REL16_HA, 252)
-
-/* These are GNU extensions to enable C++ vtable garbage collection. */
- RELOC_NUMBER (R_PPC_GNU_VTINHERIT, 253)
- RELOC_NUMBER (R_PPC_GNU_VTENTRY, 254)
-
-/* This is a phony reloc to handle any old fashioned TOC16 references
- that may still be in object files. */
- RELOC_NUMBER (R_PPC_TOC16, 255)
-
-END_RELOC_NUMBERS (R_PPC_max)
-
-#define IS_PPC_TLS_RELOC(R) \
- ((R) >= R_PPC_TLS && (R) <= R_PPC_GOT_DTPREL16_HA)
-
-/* Specify the value of _GLOBAL_OFFSET_TABLE_. */
-#define DT_PPC_GOT (DT_LOPROC)
-
-/* Specify that tls descriptors should be optimized. */
-#define DT_PPC_TLSOPT (DT_LOPROC + 1)
-
-/* Processor specific flags for the ELF header e_flags field. */
-
-#define EF_PPC_EMB 0x80000000 /* PowerPC embedded flag. */
-
-#define EF_PPC_RELOCATABLE 0x00010000 /* PowerPC -mrelocatable flag. */
-#define EF_PPC_RELOCATABLE_LIB 0x00008000 /* PowerPC -mrelocatable-lib flag. */
-
-/* Processor specific program headers, p_flags field. */
-#define PF_PPC_VLE 0x10000000 /* PowerPC VLE. */
-
-/* Processor specific section headers, sh_flags field. */
-#define SHF_PPC_VLE 0x10000000 /* PowerPC VLE text section. */
-
-/* Processor specific section headers, sh_type field. */
-
-#define SHT_ORDERED SHT_HIPROC /* Link editor is to sort the \
- entries in this section \
- based on the address \
- specified in the associated \
- symbol table entry. */
-
-/* Object attribute tags. */
-enum
-{
- /* 0-3 are generic. */
- Tag_GNU_Power_ABI_FP = 4, /* Value 1 for hard-float, 2 for
- soft-float, 3 for single=precision
- hard-float; 0 for not tagged or not
- using any ABIs affected by the
- differences. */
-
- /* Value 1 for general purpose registers only, 2 for AltiVec
- registers, 3 for SPE registers; 0 for not tagged or not using any
- ABIs affected by the differences. */
- Tag_GNU_Power_ABI_Vector = 8,
-
- /* Value 1 for ABIs using r3/r4 for returning structures <= 8 bytes,
- 2 for ABIs using memory; 0 for not tagged or not using any ABIs
- affected by the differences. */
- Tag_GNU_Power_ABI_Struct_Return = 12
-};
-
-#endif /* _ELF_PPC_H */
diff --git a/include/elf/ppc64.h b/include/elf/ppc64.h
deleted file mode 100644
index f1c80f188..000000000
--- a/include/elf/ppc64.h
+++ /dev/null
@@ -1,177 +0,0 @@
-/* PPC64 ELF support for BFD.
- Copyright 2003, 2005, 2009, 2010, 2011 Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef _ELF_PPC64_H
-#define _ELF_PPC64_H
-
-#include "elf/reloc-macros.h"
-
-/* Relocations. */
-START_RELOC_NUMBERS (elf_ppc64_reloc_type)
- RELOC_NUMBER (R_PPC64_NONE, 0)
- RELOC_NUMBER (R_PPC64_ADDR32, 1)
- RELOC_NUMBER (R_PPC64_ADDR24, 2)
- RELOC_NUMBER (R_PPC64_ADDR16, 3)
- RELOC_NUMBER (R_PPC64_ADDR16_LO, 4)
- RELOC_NUMBER (R_PPC64_ADDR16_HI, 5)
- RELOC_NUMBER (R_PPC64_ADDR16_HA, 6)
- RELOC_NUMBER (R_PPC64_ADDR14, 7)
- RELOC_NUMBER (R_PPC64_ADDR14_BRTAKEN, 8)
- RELOC_NUMBER (R_PPC64_ADDR14_BRNTAKEN, 9)
- RELOC_NUMBER (R_PPC64_REL24, 10)
- RELOC_NUMBER (R_PPC64_REL14, 11)
- RELOC_NUMBER (R_PPC64_REL14_BRTAKEN, 12)
- RELOC_NUMBER (R_PPC64_REL14_BRNTAKEN, 13)
- RELOC_NUMBER (R_PPC64_GOT16, 14)
- RELOC_NUMBER (R_PPC64_GOT16_LO, 15)
- RELOC_NUMBER (R_PPC64_GOT16_HI, 16)
- RELOC_NUMBER (R_PPC64_GOT16_HA, 17)
- /* 18 unused. 32-bit reloc is R_PPC_PLTREL24. */
- RELOC_NUMBER (R_PPC64_COPY, 19)
- RELOC_NUMBER (R_PPC64_GLOB_DAT, 20)
- RELOC_NUMBER (R_PPC64_JMP_SLOT, 21)
- RELOC_NUMBER (R_PPC64_RELATIVE, 22)
- /* 23 unused. 32-bit reloc is R_PPC_LOCAL24PC. */
- RELOC_NUMBER (R_PPC64_UADDR32, 24)
- RELOC_NUMBER (R_PPC64_UADDR16, 25)
- RELOC_NUMBER (R_PPC64_REL32, 26)
- RELOC_NUMBER (R_PPC64_PLT32, 27)
- RELOC_NUMBER (R_PPC64_PLTREL32, 28)
- RELOC_NUMBER (R_PPC64_PLT16_LO, 29)
- RELOC_NUMBER (R_PPC64_PLT16_HI, 30)
- RELOC_NUMBER (R_PPC64_PLT16_HA, 31)
- /* 32 unused. 32-bit reloc is R_PPC_SDAREL16. */
- RELOC_NUMBER (R_PPC64_SECTOFF, 33)
- RELOC_NUMBER (R_PPC64_SECTOFF_LO, 34)
- RELOC_NUMBER (R_PPC64_SECTOFF_HI, 35)
- RELOC_NUMBER (R_PPC64_SECTOFF_HA, 36)
- RELOC_NUMBER (R_PPC64_REL30, 37)
- RELOC_NUMBER (R_PPC64_ADDR64, 38)
- RELOC_NUMBER (R_PPC64_ADDR16_HIGHER, 39)
- RELOC_NUMBER (R_PPC64_ADDR16_HIGHERA, 40)
- RELOC_NUMBER (R_PPC64_ADDR16_HIGHEST, 41)
- RELOC_NUMBER (R_PPC64_ADDR16_HIGHESTA, 42)
- RELOC_NUMBER (R_PPC64_UADDR64, 43)
- RELOC_NUMBER (R_PPC64_REL64, 44)
- RELOC_NUMBER (R_PPC64_PLT64, 45)
- RELOC_NUMBER (R_PPC64_PLTREL64, 46)
- RELOC_NUMBER (R_PPC64_TOC16, 47)
- RELOC_NUMBER (R_PPC64_TOC16_LO, 48)
- RELOC_NUMBER (R_PPC64_TOC16_HI, 49)
- RELOC_NUMBER (R_PPC64_TOC16_HA, 50)
- RELOC_NUMBER (R_PPC64_TOC, 51)
- RELOC_NUMBER (R_PPC64_PLTGOT16, 52)
- RELOC_NUMBER (R_PPC64_PLTGOT16_LO, 53)
- RELOC_NUMBER (R_PPC64_PLTGOT16_HI, 54)
- RELOC_NUMBER (R_PPC64_PLTGOT16_HA, 55)
-
- /* The following relocs were added in the 64-bit PowerPC ELF ABI
- revision 1.2. */
- RELOC_NUMBER (R_PPC64_ADDR16_DS, 56)
- RELOC_NUMBER (R_PPC64_ADDR16_LO_DS, 57)
- RELOC_NUMBER (R_PPC64_GOT16_DS, 58)
- RELOC_NUMBER (R_PPC64_GOT16_LO_DS, 59)
- RELOC_NUMBER (R_PPC64_PLT16_LO_DS, 60)
- RELOC_NUMBER (R_PPC64_SECTOFF_DS, 61)
- RELOC_NUMBER (R_PPC64_SECTOFF_LO_DS, 62)
- RELOC_NUMBER (R_PPC64_TOC16_DS, 63)
- RELOC_NUMBER (R_PPC64_TOC16_LO_DS, 64)
- RELOC_NUMBER (R_PPC64_PLTGOT16_DS, 65)
- RELOC_NUMBER (R_PPC64_PLTGOT16_LO_DS, 66)
-
- /* Relocs added to support TLS. PowerPC64 ELF ABI revision 1.5. */
- RELOC_NUMBER (R_PPC64_TLS, 67)
- RELOC_NUMBER (R_PPC64_DTPMOD64, 68)
- RELOC_NUMBER (R_PPC64_TPREL16, 69)
- RELOC_NUMBER (R_PPC64_TPREL16_LO, 70)
- RELOC_NUMBER (R_PPC64_TPREL16_HI, 71)
- RELOC_NUMBER (R_PPC64_TPREL16_HA, 72)
- RELOC_NUMBER (R_PPC64_TPREL64, 73)
- RELOC_NUMBER (R_PPC64_DTPREL16, 74)
- RELOC_NUMBER (R_PPC64_DTPREL16_LO, 75)
- RELOC_NUMBER (R_PPC64_DTPREL16_HI, 76)
- RELOC_NUMBER (R_PPC64_DTPREL16_HA, 77)
- RELOC_NUMBER (R_PPC64_DTPREL64, 78)
- RELOC_NUMBER (R_PPC64_GOT_TLSGD16, 79)
- RELOC_NUMBER (R_PPC64_GOT_TLSGD16_LO, 80)
- RELOC_NUMBER (R_PPC64_GOT_TLSGD16_HI, 81)
- RELOC_NUMBER (R_PPC64_GOT_TLSGD16_HA, 82)
- RELOC_NUMBER (R_PPC64_GOT_TLSLD16, 83)
- RELOC_NUMBER (R_PPC64_GOT_TLSLD16_LO, 84)
- RELOC_NUMBER (R_PPC64_GOT_TLSLD16_HI, 85)
- RELOC_NUMBER (R_PPC64_GOT_TLSLD16_HA, 86)
- RELOC_NUMBER (R_PPC64_GOT_TPREL16_DS, 87)
- RELOC_NUMBER (R_PPC64_GOT_TPREL16_LO_DS, 88)
- RELOC_NUMBER (R_PPC64_GOT_TPREL16_HI, 89)
- RELOC_NUMBER (R_PPC64_GOT_TPREL16_HA, 90)
- RELOC_NUMBER (R_PPC64_GOT_DTPREL16_DS, 91)
- RELOC_NUMBER (R_PPC64_GOT_DTPREL16_LO_DS, 92)
- RELOC_NUMBER (R_PPC64_GOT_DTPREL16_HI, 93)
- RELOC_NUMBER (R_PPC64_GOT_DTPREL16_HA, 94)
- RELOC_NUMBER (R_PPC64_TPREL16_DS, 95)
- RELOC_NUMBER (R_PPC64_TPREL16_LO_DS, 96)
- RELOC_NUMBER (R_PPC64_TPREL16_HIGHER, 97)
- RELOC_NUMBER (R_PPC64_TPREL16_HIGHERA, 98)
- RELOC_NUMBER (R_PPC64_TPREL16_HIGHEST, 99)
- RELOC_NUMBER (R_PPC64_TPREL16_HIGHESTA, 100)
- RELOC_NUMBER (R_PPC64_DTPREL16_DS, 101)
- RELOC_NUMBER (R_PPC64_DTPREL16_LO_DS, 102)
- RELOC_NUMBER (R_PPC64_DTPREL16_HIGHER, 103)
- RELOC_NUMBER (R_PPC64_DTPREL16_HIGHERA, 104)
- RELOC_NUMBER (R_PPC64_DTPREL16_HIGHEST, 105)
- RELOC_NUMBER (R_PPC64_DTPREL16_HIGHESTA, 106)
- RELOC_NUMBER (R_PPC64_TLSGD, 107)
- RELOC_NUMBER (R_PPC64_TLSLD, 108)
- RELOC_NUMBER (R_PPC64_TOCSAVE, 109)
-
-#ifndef RELOC_MACROS_GEN_FUNC
-/* Fake relocation only used internally by ld. */
- RELOC_NUMBER (R_PPC64_LO_DS_OPT, 128)
-#endif
-/* Support STT_GNU_IFUNC plt calls. */
- RELOC_NUMBER (R_PPC64_JMP_IREL, 247)
- RELOC_NUMBER (R_PPC64_IRELATIVE, 248)
-
-/* These are GNU extensions used in PIC code sequences. */
- RELOC_NUMBER (R_PPC64_REL16, 249)
- RELOC_NUMBER (R_PPC64_REL16_LO, 250)
- RELOC_NUMBER (R_PPC64_REL16_HI, 251)
- RELOC_NUMBER (R_PPC64_REL16_HA, 252)
-
- /* These are GNU extensions to enable C++ vtable garbage collection. */
- RELOC_NUMBER (R_PPC64_GNU_VTINHERIT, 253)
- RELOC_NUMBER (R_PPC64_GNU_VTENTRY, 254)
-
-END_RELOC_NUMBERS (R_PPC64_max)
-
-#define IS_PPC64_TLS_RELOC(R) \
- ((R) >= R_PPC64_TLS && (R) <= R_PPC64_DTPREL16_HIGHESTA)
-
-/* Specify the start of the .glink section. */
-#define DT_PPC64_GLINK DT_LOPROC
-
-/* Specify the start and size of the .opd section. */
-#define DT_PPC64_OPD (DT_LOPROC + 1)
-#define DT_PPC64_OPDSZ (DT_LOPROC + 2)
-
-/* Specify that tls descriptors should be optimized. */
-#define DT_PPC64_TLSOPT (DT_LOPROC + 3)
-
-#endif /* _ELF_PPC64_H */
diff --git a/include/elf/reloc-macros.h b/include/elf/reloc-macros.h
deleted file mode 100644
index 92fc9c145..000000000
--- a/include/elf/reloc-macros.h
+++ /dev/null
@@ -1,129 +0,0 @@
-/* Generic relocation support for BFD.
- Copyright 1998, 1999, 2000, 2003, 2010, 2011 Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-/* These macros are used by the various *.h target specific header
- files to either generate an enum containing all the known relocations
- for that target, or if RELOC_MACROS_GEN_FUNC is defined, a recognition
- function is generated instead. (This is used by binutils/readelf.c)
-
- Given a header file like this:
-
- START_RELOC_NUMBERS (foo)
- RELOC_NUMBER (R_foo_NONE, 0)
- RELOC_NUMBER (R_foo_32, 1)
- EMPTY_RELOC (R_foo_good)
- FAKE_RELOC (R_foo_illegal, 9)
- END_RELOC_NUMBERS (R_foo_count)
-
- Then the following will be produced by default (ie if
- RELOC_MACROS_GEN_FUNC is *not* defined).
-
- enum foo
- {
- R_foo_NONE = 0,
- R_foo_32 = 1,
- R_foo_good,
- R_foo_illegal = 9,
- R_foo_count
- };
-
- Note: The value of the symbol defined in the END_RELOC_NUMBERS
- macro (R_foo_count in the case of the example above) will be
- set to the value of the whichever *_RELOC macro precedes it plus
- one. Therefore if you intend to use the symbol as a sentinel for
- the highest valid macro value you should make sure that the
- preceding *_RELOC macro is the highest valid number. ie a
- declaration like this:
-
- START_RELOC_NUMBERS (foo)
- RELOC_NUMBER (R_foo_NONE, 0)
- RELOC_NUMBER (R_foo_32, 1)
- FAKE_RELOC (R_foo_illegal, 9)
- FAKE_RELOC (R_foo_synonym, 0)
- END_RELOC_NUMBERS (R_foo_count)
-
- will result in R_foo_count having a value of 1 (R_foo_synonym + 1)
- rather than 10 or 2 as might be expected.
-
- Alternatively you can assign a value to END_RELOC_NUMBERS symbol
- explicitly, like this:
-
- START_RELOC_NUMBERS (foo)
- RELOC_NUMBER (R_foo_NONE, 0)
- RELOC_NUMBER (R_foo_32, 1)
- FAKE_RELOC (R_foo_illegal, 9)
- FAKE_RELOC (R_foo_synonym, 0)
- END_RELOC_NUMBERS (R_foo_count = 2)
-
- If RELOC_MACROS_GEN_FUNC *is* defined, then instead the
- following function will be generated:
-
- static const char *foo (unsigned long rtype);
- static const char *
- foo (unsigned long rtype)
- {
- switch (rtype)
- {
- case 0: return "R_foo_NONE";
- case 1: return "R_foo_32";
- default: return NULL;
- }
- }
- */
-
-#ifndef _RELOC_MACROS_H
-#define _RELOC_MACROS_H
-
-#ifdef RELOC_MACROS_GEN_FUNC
-
-/* This function takes the relocation number and returns the
- string version name of the name of that relocation. If
- the relocation is not recognised, NULL is returned. */
-
-#define START_RELOC_NUMBERS(name) \
-static const char *name (unsigned long rtype); \
-static const char * \
-name (unsigned long rtype) \
-{ \
- switch (rtype) \
- {
-
-#define RELOC_NUMBER(name, number) \
- case number: return #name;
-
-#define FAKE_RELOC(name, number)
-#define EMPTY_RELOC(name)
-
-#define END_RELOC_NUMBERS(name) \
- default: return NULL; \
- } \
-}
-
-
-#else /* Default to generating enum. */
-
-#define START_RELOC_NUMBERS(name) enum name {
-#define RELOC_NUMBER(name, number) name = number,
-#define FAKE_RELOC(name, number) name = number,
-#define EMPTY_RELOC(name) name,
-#define END_RELOC_NUMBERS(name) name };
-
-#endif
-
-#endif /* _RELOC_MACROS_H */
diff --git a/include/elf/rl78.h b/include/elf/rl78.h
deleted file mode 100644
index b281d3af6..000000000
--- a/include/elf/rl78.h
+++ /dev/null
@@ -1,120 +0,0 @@
-/* RL78 ELF support for BFD.
- Copyright (C) 2008-2013 Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _ELF_RL78_H
-#define _ELF_RL78_H
-
-#include "elf/reloc-macros.h"
-
-/* Note that there are a few internal relocation types used by the
- linker to do link-time relaxation. If you update this file, please
- check elf32-rl78.c to see if any of the internal relocations need to
- be, er, relocated. */
-
-/* Preliminary relocations. */
-START_RELOC_NUMBERS (elf_rl78_reloc_type)
-
- RELOC_NUMBER (R_RL78_NONE, 0x00)
- /* These are for data, and are bi-endian. */
- RELOC_NUMBER (R_RL78_DIR32, 0x01) /* Was: R_RL78_32. */
- RELOC_NUMBER (R_RL78_DIR24S, 0x02) /* Was: R_RL78_24. */
- RELOC_NUMBER (R_RL78_DIR16, 0x03)
- RELOC_NUMBER (R_RL78_DIR16U, 0x04) /* Was: R_RL78_16_UNS. */
- RELOC_NUMBER (R_RL78_DIR16S, 0x05) /* Was: R_RL78_16. */
- RELOC_NUMBER (R_RL78_DIR8, 0x06)
- RELOC_NUMBER (R_RL78_DIR8U, 0x07) /* Was: R_RL78_8_UNS. */
- RELOC_NUMBER (R_RL78_DIR8S, 0x08) /* Was: R_RL78_8. */
-
- /* Signed pc-relative values. */
- RELOC_NUMBER (R_RL78_DIR24S_PCREL, 0x09) /* Was: R_RL78_24_PCREL. */
- RELOC_NUMBER (R_RL78_DIR16S_PCREL, 0x0a) /* Was: R_RL78_16_PCREL. */
- RELOC_NUMBER (R_RL78_DIR8S_PCREL, 0x0b) /* Was: R_RL78_8_PCREL. */
-
- /* These are for fields in the instructions. */
- RELOC_NUMBER (R_RL78_DIR16UL, 0x0c)
- RELOC_NUMBER (R_RL78_DIR16UW, 0x0d)
- RELOC_NUMBER (R_RL78_DIR8UL, 0x0e)
- RELOC_NUMBER (R_RL78_DIR8UW, 0x0f)
- RELOC_NUMBER (R_RL78_DIR32_REV, 0x10)
- RELOC_NUMBER (R_RL78_DIR16_REV, 0x11)
- RELOC_NUMBER (R_RL78_DIR3U_PCREL, 0x12)
-
- /* These are extensions added by Red Hat. */
- RELOC_NUMBER (R_RL78_RH_RELAX, 0x2d) /* Marks opcodes suitable for linker relaxation. */
- RELOC_NUMBER (R_RL78_RH_SFR, 0x2e) /* SFR addresses - internal use only. */
- RELOC_NUMBER (R_RL78_RH_SADDR, 0x2f) /* SADDR addresses - internal use only.. */
-
- /* These are for complex relocs. */
- RELOC_NUMBER (R_RL78_ABS32, 0x41)
- RELOC_NUMBER (R_RL78_ABS24S, 0x42)
- RELOC_NUMBER (R_RL78_ABS16, 0x43)
- RELOC_NUMBER (R_RL78_ABS16U, 0x44)
- RELOC_NUMBER (R_RL78_ABS16S, 0x45)
- RELOC_NUMBER (R_RL78_ABS8, 0x46)
- RELOC_NUMBER (R_RL78_ABS8U, 0x47)
- RELOC_NUMBER (R_RL78_ABS8S, 0x48)
- RELOC_NUMBER (R_RL78_ABS24S_PCREL, 0x49)
- RELOC_NUMBER (R_RL78_ABS16S_PCREL, 0x4a)
- RELOC_NUMBER (R_RL78_ABS8S_PCREL, 0x4b)
- RELOC_NUMBER (R_RL78_ABS16UL, 0x4c)
- RELOC_NUMBER (R_RL78_ABS16UW, 0x4d)
- RELOC_NUMBER (R_RL78_ABS8UL, 0x4e)
- RELOC_NUMBER (R_RL78_ABS8UW, 0x4f)
- RELOC_NUMBER (R_RL78_ABS32_REV, 0x50)
- RELOC_NUMBER (R_RL78_ABS16_REV, 0x51)
-
- RELOC_NUMBER (R_RL78_SYM, 0x80)
- RELOC_NUMBER (R_RL78_OPneg, 0x81)
- RELOC_NUMBER (R_RL78_OPadd, 0x82)
- RELOC_NUMBER (R_RL78_OPsub, 0x83)
- RELOC_NUMBER (R_RL78_OPmul, 0x84)
- RELOC_NUMBER (R_RL78_OPdiv, 0x85)
- RELOC_NUMBER (R_RL78_OPshla, 0x86)
- RELOC_NUMBER (R_RL78_OPshra, 0x87)
- RELOC_NUMBER (R_RL78_OPsctsize, 0x88)
- RELOC_NUMBER (R_RL78_OPscttop, 0x8d)
- RELOC_NUMBER (R_RL78_OPand, 0x90)
- RELOC_NUMBER (R_RL78_OPor, 0x91)
- RELOC_NUMBER (R_RL78_OPxor, 0x92)
- RELOC_NUMBER (R_RL78_OPnot, 0x93)
- RELOC_NUMBER (R_RL78_OPmod, 0x94)
- RELOC_NUMBER (R_RL78_OPromtop, 0x95)
- RELOC_NUMBER (R_RL78_OPramtop, 0x96)
-
-END_RELOC_NUMBERS (R_RL78_max)
-
-#define EF_RL78_CPU_RL78 0x00000079 /* FIXME: correct value? */
-#define EF_RL78_CPU_MASK 0x0000007F /* specific cpu bits. */
-#define EF_RL78_ALL_FLAGS (EF_RL78_CPU_MASK)
-
-/* Values for the e_flags field in the ELF header. */
-#define E_FLAG_RL78_64BIT_DOUBLES (1 << 0)
-#define E_FLAG_RL78_DSP (1 << 1) /* Defined in the RL78 CPU Object file specification, but not explained. */
-#define E_FLAG_RL78_G10 (1 << 2) /* CPU is missing register banks 1-3, so uses different ABI. */
-
-/* These define the addend field of R_RL78_RH_RELAX relocations. */
-#define RL78_RELAXA_BRA 0x00000010 /* Any type of branch (must be decoded). */
-#define RL78_RELAXA_ADDR16 0x00000020 /* addr16->sfr/saddr opportunity */
-#define RL78_RELAXA_RNUM 0x0000000f /* Number of associated relocations. */
-/* These mark the place where alignment is requested, and the place where the filler bytes end. */
-#define RL78_RELAXA_ALIGN 0x10000000 /* Start alignment; the remaining bits are the alignment value. */
-#define RL78_RELAXA_ELIGN 0x20000000 /* End alignment; the remaining bits are the alignment value. */
-#define RL78_RELAXA_ANUM 0x00ffffff /* Alignment amount, in bytes (i.e. .balign). */
-
-#endif /* _ELF_RL78_H */
diff --git a/include/elf/rx.h b/include/elf/rx.h
deleted file mode 100644
index 83980853e..000000000
--- a/include/elf/rx.h
+++ /dev/null
@@ -1,136 +0,0 @@
-/* RX ELF support for BFD.
- Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _ELF_RX_H
-#define _ELF_RX_H
-
-#include "elf/reloc-macros.h"
-
-/* Note that there are a few internal relocation types used by the
- linker to do link-time relaxation. If you update this file, please
- check elf32-rx.c to see if any of the internal relocations need to
- be, er, relocated. */
-
-/* Preliminary relocations. */
-START_RELOC_NUMBERS (elf_rx_reloc_type)
-
- RELOC_NUMBER (R_RX_NONE, 0x00)
- /* These are for data, and are bi-endian. */
- RELOC_NUMBER (R_RX_DIR32, 0x01) /* Was: R_RX_32. */
- RELOC_NUMBER (R_RX_DIR24S, 0x02) /* Was: R_RX_24. */
- RELOC_NUMBER (R_RX_DIR16, 0x03)
- RELOC_NUMBER (R_RX_DIR16U, 0x04) /* Was: R_RX_16_UNS. */
- RELOC_NUMBER (R_RX_DIR16S, 0x05) /* Was: R_RX_16. */
- RELOC_NUMBER (R_RX_DIR8, 0x06)
- RELOC_NUMBER (R_RX_DIR8U, 0x07) /* Was: R_RX_8_UNS. */
- RELOC_NUMBER (R_RX_DIR8S, 0x08) /* Was: R_RX_8. */
-
- /* Signed pc-relative values. */
- RELOC_NUMBER (R_RX_DIR24S_PCREL, 0x09) /* Was: R_RX_24_PCREL. */
- RELOC_NUMBER (R_RX_DIR16S_PCREL, 0x0a) /* Was: R_RX_16_PCREL. */
- RELOC_NUMBER (R_RX_DIR8S_PCREL, 0x0b) /* Was: R_RX_8_PCREL. */
-
- /* These are for fields in the instructions. */
- RELOC_NUMBER (R_RX_DIR16UL, 0x0c)
- RELOC_NUMBER (R_RX_DIR16UW, 0x0d)
- RELOC_NUMBER (R_RX_DIR8UL, 0x0e)
- RELOC_NUMBER (R_RX_DIR8UW, 0x0f)
- RELOC_NUMBER (R_RX_DIR32_REV, 0x10)
- RELOC_NUMBER (R_RX_DIR16_REV, 0x11)
- RELOC_NUMBER (R_RX_DIR3U_PCREL, 0x12)
-
- /* These are extensions added by Red Hat. */
- RELOC_NUMBER (R_RX_RH_3_PCREL, 0x20) /* Like R_RX_DIR8S_PCREL but only 3-bits. */
- RELOC_NUMBER (R_RX_RH_16_OP, 0x21) /* Like R_RX_DIR16 but for opcodes - always big endian. */
- RELOC_NUMBER (R_RX_RH_24_OP, 0x22) /* Like R_RX_DIR24S but for opcodes - always big endian. */
- RELOC_NUMBER (R_RX_RH_32_OP, 0x23) /* Like R_RX_DIR32 but for opcodes - always big endian. */
- RELOC_NUMBER (R_RX_RH_24_UNS, 0x24) /* Like R_RX_DIR24S but for unsigned values. */
- RELOC_NUMBER (R_RX_RH_8_NEG, 0x25) /* Like R_RX_DIR8 but -x is stored. */
- RELOC_NUMBER (R_RX_RH_16_NEG, 0x26) /* Like R_RX_DIR16 but -x is stored. */
- RELOC_NUMBER (R_RX_RH_24_NEG, 0x27) /* Like R_RX_DIR24S but -x is stored. */
- RELOC_NUMBER (R_RX_RH_32_NEG, 0x28) /* Like R_RX_DIR32 but -x is stored. */
- RELOC_NUMBER (R_RX_RH_DIFF, 0x29) /* Subtract from a previous relocation. */
- RELOC_NUMBER (R_RX_RH_GPRELB, 0x2a) /* Byte value, relative to __gp. */
- RELOC_NUMBER (R_RX_RH_GPRELW, 0x2b) /* Word value, relative to __gp. */
- RELOC_NUMBER (R_RX_RH_GPRELL, 0x2c) /* Long value, relative to __gp. */
- RELOC_NUMBER (R_RX_RH_RELAX, 0x2d) /* Marks opcodes suitable for linker relaxation. */
-
- /* These are for complex relocs. */
- RELOC_NUMBER (R_RX_ABS32, 0x41)
- RELOC_NUMBER (R_RX_ABS24S, 0x42)
- RELOC_NUMBER (R_RX_ABS16, 0x43)
- RELOC_NUMBER (R_RX_ABS16U, 0x44)
- RELOC_NUMBER (R_RX_ABS16S, 0x45)
- RELOC_NUMBER (R_RX_ABS8, 0x46)
- RELOC_NUMBER (R_RX_ABS8U, 0x47)
- RELOC_NUMBER (R_RX_ABS8S, 0x48)
- RELOC_NUMBER (R_RX_ABS24S_PCREL, 0x49)
- RELOC_NUMBER (R_RX_ABS16S_PCREL, 0x4a)
- RELOC_NUMBER (R_RX_ABS8S_PCREL, 0x4b)
- RELOC_NUMBER (R_RX_ABS16UL, 0x4c)
- RELOC_NUMBER (R_RX_ABS16UW, 0x4d)
- RELOC_NUMBER (R_RX_ABS8UL, 0x4e)
- RELOC_NUMBER (R_RX_ABS8UW, 0x4f)
- RELOC_NUMBER (R_RX_ABS32_REV, 0x50)
- RELOC_NUMBER (R_RX_ABS16_REV, 0x51)
-
- RELOC_NUMBER (R_RX_SYM, 0x80)
- RELOC_NUMBER (R_RX_OPneg, 0x81)
- RELOC_NUMBER (R_RX_OPadd, 0x82)
- RELOC_NUMBER (R_RX_OPsub, 0x83)
- RELOC_NUMBER (R_RX_OPmul, 0x84)
- RELOC_NUMBER (R_RX_OPdiv, 0x85)
- RELOC_NUMBER (R_RX_OPshla, 0x86)
- RELOC_NUMBER (R_RX_OPshra, 0x87)
- RELOC_NUMBER (R_RX_OPsctsize, 0x88)
- RELOC_NUMBER (R_RX_OPscttop, 0x8d)
- RELOC_NUMBER (R_RX_OPand, 0x90)
- RELOC_NUMBER (R_RX_OPor, 0x91)
- RELOC_NUMBER (R_RX_OPxor, 0x92)
- RELOC_NUMBER (R_RX_OPnot, 0x93)
- RELOC_NUMBER (R_RX_OPmod, 0x94)
- RELOC_NUMBER (R_RX_OPromtop, 0x95)
- RELOC_NUMBER (R_RX_OPramtop, 0x96)
-
-END_RELOC_NUMBERS (R_RX_max)
-
-#define EF_RX_CPU_RX 0x00000079 /* FIXME: this collides with the E_FLAG_RX_... values below. */
-#define EF_RX_CPU_MASK 0x0000007F /* specific cpu bits. */
-#define EF_RX_ALL_FLAGS (EF_RX_CPU_MASK)
-
-/* Values for the e_flags field in the ELF header. */
-#define E_FLAG_RX_64BIT_DOUBLES (1 << 0)
-#define E_FLAG_RX_DSP (1 << 1) /* Defined in the RX CPU Object file specification, but not explained. */
-#define E_FLAG_RX_PID (1 << 2) /* Unofficial - DJ */
-#define E_FLAG_RX_ABI (1 << 3) /* Binary passes stacked arguments using natural alignment. Unofficial - NC. */
-
-/* These define the addend field of R_RX_RH_RELAX relocations. */
-#define RX_RELAXA_IMM6 0x00000010 /* Imm8/16/24/32 at bit offset 6. */
-#define RX_RELAXA_IMM12 0x00000020 /* Imm8/16/24/32 at bit offset 12. */
-#define RX_RELAXA_DSP4 0x00000040 /* Dsp0/8/16 at bit offset 4. */
-#define RX_RELAXA_DSP6 0x00000080 /* Dsp0/8/16 at bit offset 6. */
-#define RX_RELAXA_DSP14 0x00000100 /* Dsp0/8/16 at bit offset 14. */
-#define RX_RELAXA_BRA 0x00000200 /* Any type of branch (must be decoded). */
-#define RX_RELAXA_RNUM 0x0000000f /* Number of associated relocations. */
-/* These mark the place where alignment is requested, and the place where the filler bytes end. */
-#define RX_RELAXA_ALIGN 0x10000000 /* Start alignment; the remaining bits are the alignment value. */
-#define RX_RELAXA_ELIGN 0x20000000 /* End alignment; the remaining bits are the alignment value. */
-#define RX_RELAXA_ANUM 0x00ffffff /* Alignment amount, in bytes (i.e. .balign). */
-
-#endif /* _ELF_RX_H */
diff --git a/include/elf/s390.h b/include/elf/s390.h
deleted file mode 100644
index 9128f8680..000000000
--- a/include/elf/s390.h
+++ /dev/null
@@ -1,134 +0,0 @@
-/* 390 ELF support for BFD.
- Copyright 2000, 2001, 2003, 2010 Free Software Foundation, Inc.
- Contributed by Carl B. Pedersen and Martin Schwidefsky.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA
- 02110-1301, USA. */
-
-#ifndef _ELF_390_H
-#define _ELF_390_H
-
-/* Processor specific flags for the ELF header e_flags field. */
-
-/* Symbol types. */
-
-#define STACK_REG 15 /* Global Stack reg */
-#define BACKL_REG 14 /* Global Backlink reg */
-#define BASE_REG 13 /* Global Base reg */
-#define GOT_REG 12 /* Holds addr of GOT */
-
-#include "elf/reloc-macros.h"
-
-/* Processor specific flags for the ELF header e_flags field. */
-
-#define EF_S390_HIGH_GPRS 0x00000001
-
-/* Relocation types. */
-
-START_RELOC_NUMBERS (elf_s390_reloc_type)
- RELOC_NUMBER (R_390_NONE, 0) /* No reloc. */
- RELOC_NUMBER (R_390_8, 1) /* Direct 8 bit. */
- RELOC_NUMBER (R_390_12, 2) /* Direct 12 bit. */
- RELOC_NUMBER (R_390_16, 3) /* Direct 16 bit. */
- RELOC_NUMBER (R_390_32, 4) /* Direct 32 bit. */
- RELOC_NUMBER (R_390_PC32, 5) /* PC relative 32 bit. */
- RELOC_NUMBER (R_390_GOT12, 6) /* 12 bit GOT offset. */
- RELOC_NUMBER (R_390_GOT32, 7) /* 32 bit GOT offset. */
- RELOC_NUMBER (R_390_PLT32, 8) /* 32 bit PC relative PLT address. */
- RELOC_NUMBER (R_390_COPY, 9) /* Copy symbol at runtime. */
- RELOC_NUMBER (R_390_GLOB_DAT, 10) /* Create GOT entry. */
- RELOC_NUMBER (R_390_JMP_SLOT, 11) /* Create PLT entry. */
- RELOC_NUMBER (R_390_RELATIVE, 12) /* Adjust by program base. */
- RELOC_NUMBER (R_390_GOTOFF32, 13) /* 32 bit offset to GOT. */
- RELOC_NUMBER (R_390_GOTPC, 14) /* 32 bit PC relative offset to GOT. */
- RELOC_NUMBER (R_390_GOT16, 15) /* 16 bit GOT offset. */
- RELOC_NUMBER (R_390_PC16, 16) /* PC relative 16 bit. */
- RELOC_NUMBER (R_390_PC12DBL, 62) /* PC relative 12 bit shifted by 1. */
- RELOC_NUMBER (R_390_PLT12DBL, 63) /* 12 bit PC rel. PLT shifted by 1. */
- RELOC_NUMBER (R_390_PC16DBL, 17) /* PC relative 16 bit shifted by 1. */
- RELOC_NUMBER (R_390_PLT16DBL, 18) /* 16 bit PC rel. PLT shifted by 1. */
- RELOC_NUMBER (R_390_PC24DBL, 64) /* PC relative 24 bit shifted by 1. */
- RELOC_NUMBER (R_390_PLT24DBL, 65) /* 24 bit PC rel. PLT shifted by 1. */
- RELOC_NUMBER (R_390_PC32DBL, 19) /* PC relative 32 bit shifted by 1. */
- RELOC_NUMBER (R_390_PLT32DBL, 20) /* 32 bit PC rel. PLT shifted by 1. */
- RELOC_NUMBER (R_390_GOTPCDBL, 21) /* 32 bit PC rel. GOT shifted by 1. */
- RELOC_NUMBER (R_390_64, 22) /* Direct 64 bit. */
- RELOC_NUMBER (R_390_PC64, 23) /* PC relative 64 bit. */
- RELOC_NUMBER (R_390_GOT64, 24) /* 64 bit GOT offset. */
- RELOC_NUMBER (R_390_PLT64, 25) /* 64 bit PC relative PLT address. */
- RELOC_NUMBER (R_390_GOTENT, 26) /* 32 bit PC rel. to GOT entry >> 1. */
- RELOC_NUMBER (R_390_GOTOFF16, 27) /* 16 bit offset to GOT. */
- RELOC_NUMBER (R_390_GOTOFF64, 28) /* 64 bit offset to GOT. */
- RELOC_NUMBER (R_390_GOTPLT12, 29) /* 12 bit offset to jump slot. */
- RELOC_NUMBER (R_390_GOTPLT16, 30) /* 16 bit offset to jump slot. */
- RELOC_NUMBER (R_390_GOTPLT32, 31) /* 32 bit offset to jump slot. */
- RELOC_NUMBER (R_390_GOTPLT64, 32) /* 64 bit offset to jump slot. */
- RELOC_NUMBER (R_390_GOTPLTENT, 33) /* 32 bit rel. offset to jump slot. */
- RELOC_NUMBER (R_390_PLTOFF16, 34) /* 16 bit offset from GOT to PLT. */
- RELOC_NUMBER (R_390_PLTOFF32, 35) /* 32 bit offset from GOT to PLT. */
- RELOC_NUMBER (R_390_PLTOFF64, 36) /* 16 bit offset from GOT to PLT. */
- RELOC_NUMBER (R_390_TLS_LOAD, 37) /* Tag for load insn in TLS code. */
- RELOC_NUMBER (R_390_TLS_GDCALL, 38) /* Tag for function call in general
- dynamic TLS code. */
- RELOC_NUMBER (R_390_TLS_LDCALL, 39) /* Tag for function call in local
- dynamic TLS code. */
- RELOC_NUMBER (R_390_TLS_GD32, 40) /* Direct 32 bit for general dynamic
- thread local data. */
- RELOC_NUMBER (R_390_TLS_GD64, 41) /* Direct 64 bit for general dynamic
- thread local data. */
- RELOC_NUMBER (R_390_TLS_GOTIE12, 42)/* 12 bit GOT offset for static TLS
- block offset. */
- RELOC_NUMBER (R_390_TLS_GOTIE32, 43)/* 32 bit GOT offset for static TLS
- block offset. */
- RELOC_NUMBER (R_390_TLS_GOTIE64, 44)/* 64 bit GOT offset for static TLS
- block offset. */
- RELOC_NUMBER (R_390_TLS_LDM32, 45) /* Direct 32 bit for local dynamic
- thread local data in LD code. */
- RELOC_NUMBER (R_390_TLS_LDM64, 46) /* Direct 64 bit for local dynamic
- thread local data in LD code. */
- RELOC_NUMBER (R_390_TLS_IE32, 47) /* 32 bit address of GOT entry for
- negated static TLS block offset. */
- RELOC_NUMBER (R_390_TLS_IE64, 48) /* 64 bit address of GOT entry for
- negated static TLS block offset. */
- RELOC_NUMBER (R_390_TLS_IEENT, 49) /* 32 bit rel. offset to GOT entry for
- negated static TLS block offset. */
- RELOC_NUMBER (R_390_TLS_LE32, 50) /* 32 bit negated offset relative to
- static TLS block. */
- RELOC_NUMBER (R_390_TLS_LE64, 51) /* 64 bit negated offset relative to
- static TLS block. */
- RELOC_NUMBER (R_390_TLS_LDO32, 52) /* 32 bit offset relative to TLS
- block. */
- RELOC_NUMBER (R_390_TLS_LDO64, 53) /* 64 bit offset relative to TLS
- block. */
- RELOC_NUMBER (R_390_TLS_DTPMOD, 54) /* ID of module containing symbol. */
- RELOC_NUMBER (R_390_TLS_DTPOFF, 55) /* Offset in TLS block. */
- RELOC_NUMBER (R_390_TLS_TPOFF, 56) /* Negate offset in static TLS
- block. */
- RELOC_NUMBER (R_390_20, 57) /* Direct 20 bit. */
- RELOC_NUMBER (R_390_GOT20, 58) /* 20 bit GOT offset. */
- RELOC_NUMBER (R_390_GOTPLT20, 59) /* 20 bit offset to jump slot. */
- RELOC_NUMBER (R_390_TLS_GOTIE20, 60)/* 20 bit GOT offset for statis TLS
- block offset. */
- RELOC_NUMBER (R_390_IRELATIVE, 61) /* IFUNC relocation. */
- /* These are GNU extensions to enable C++ vtable garbage collection. */
- RELOC_NUMBER (R_390_GNU_VTINHERIT, 250)
- RELOC_NUMBER (R_390_GNU_VTENTRY, 251)
-END_RELOC_NUMBERS (R_390_max)
-
-#endif /* _ELF_390_H */
-
-
diff --git a/include/elf/score.h b/include/elf/score.h
deleted file mode 100644
index 8d9c026bb..000000000
--- a/include/elf/score.h
+++ /dev/null
@@ -1,130 +0,0 @@
-/* Score ELF support for BFD.
- Copyright 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
- Contributed by
- Brain.lin (brain.lin@sunplusct.com)
- Mei Ligang (ligang@sunnorth.com.cn)
- Pei-Lin Tsai (pltsai@sunplus.com)
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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,
- Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _ELF_SCORE_H
-#define _ELF_SCORE_H
-
-#include "elf/reloc-macros.h"
-
-#define SCORE_SIMULATOR_ACTIVE 1
-#define OPC_PTMASK 0xc0000000 /* Parity-bit Mask. */
-#define OPC16_PTMASK 0x00008000
-/* The parity-bit denotes. */
-#define OPC_32 0xc0000000 /* Denotes 32b instruction, (default). */
-#define OPC_16 0x00000000 /* Denotes 16b instruction. */
-#define OPC_PE 0x8000 /* Denotes parallel-execution instructions. */
-#define GP_DISP_LABEL "_gp_disp"
-
-/* Processor specific flags for the ELF header e_flags field: */
-#define EF_SCORE_MACH 0xffff0000
-#define EF_OMIT_PIC_FIXDD 0x0fff0000
-#define E_SCORE_MACH_SCORE3 0x00030000
-#define E_SCORE_MACH_SCORE7 0x00070000
-
-/* File contains position independent code. */
-#define EF_SCORE_PIC 0x80000000
-
-/* Fix data dependency. */
-#define EF_SCORE_FIXDEP 0x40000000
-
-/* Defined and allocated common symbol. Value is virtual address. If
- relocated, alignment must be preserved. */
-#define SHN_SCORE_TEXT (SHN_LORESERVE + 1)
-#define SHN_SCORE_DATA (SHN_LORESERVE + 2)
-/* Small common symbol. */
-#define SHN_SCORE_SCOMMON (SHN_LORESERVE + 3)
-
-/* Processor specific section flags. */
-
-/* This section must be in the global data area. */
-#define SHF_SCORE_GPREL 0x10000000
-
-/* This section should be merged. */
-#define SHF_SCORE_MERGE 0x20000000
-
-/* This section contains address data of size implied by section
- element size. */
-#define SHF_SCORE_ADDR 0x40000000
-
-/* This section contains string data. */
-#define SHF_SCORE_STRING 0x80000000
-
-/* This section may not be stripped. */
-#define SHF_SCORE_NOSTRIP 0x08000000
-
-/* This section is local to threads. */
-#define SHF_SCORE_LOCAL 0x04000000
-
-/* Linker should generate implicit weak names for this section. */
-#define SHF_SCORE_NAMES 0x02000000
-
-/* Section contais text/data which may be replicated in other sections.
- Linker should retain only one copy. */
-#define SHF_SCORE_NODUPES 0x01000000
-
-/* Processor specific dynamic array tags. */
-
-/* Base address of the segment. */
-#define DT_SCORE_BASE_ADDRESS 0x70000001
-/* Number of local global offset table entries. */
-#define DT_SCORE_LOCAL_GOTNO 0x70000002
-/* Number of entries in the .dynsym section. */
-#define DT_SCORE_SYMTABNO 0x70000003
-/* Index of first dynamic symbol in global offset table. */
-#define DT_SCORE_GOTSYM 0x70000004
-/* Index of first external dynamic symbol not referenced locally. */
-#define DT_SCORE_UNREFEXTNO 0x70000005
-/* Number of page table entries in global offset table. */
-#define DT_SCORE_HIPAGENO 0x70000006
-
-
-/* Processor specific section types. */
-
-
-/* Relocation types. */
-START_RELOC_NUMBERS (elf_score_reloc_type)
- RELOC_NUMBER (R_SCORE_NONE, 0)
- RELOC_NUMBER (R_SCORE_HI16, 1)
- RELOC_NUMBER (R_SCORE_LO16, 2)
- RELOC_NUMBER (R_SCORE_BCMP, 3)
- RELOC_NUMBER (R_SCORE_24, 4)
- RELOC_NUMBER (R_SCORE_PC19, 5)
- RELOC_NUMBER (R_SCORE16_11, 6)
- RELOC_NUMBER (R_SCORE16_PC8, 7)
- RELOC_NUMBER (R_SCORE_ABS32, 8)
- RELOC_NUMBER (R_SCORE_ABS16, 9)
- RELOC_NUMBER (R_SCORE_DUMMY2, 10)
- RELOC_NUMBER (R_SCORE_GP15, 11)
- RELOC_NUMBER (R_SCORE_GNU_VTINHERIT, 12)
- RELOC_NUMBER (R_SCORE_GNU_VTENTRY, 13)
- RELOC_NUMBER (R_SCORE_GOT15, 14)
- RELOC_NUMBER (R_SCORE_GOT_LO16, 15)
- RELOC_NUMBER (R_SCORE_CALL15, 16)
- RELOC_NUMBER (R_SCORE_GPREL32, 17)
- RELOC_NUMBER (R_SCORE_REL32, 18)
- RELOC_NUMBER (R_SCORE_DUMMY_HI16, 19)
- RELOC_NUMBER (R_SCORE_IMM30, 20)
- RELOC_NUMBER (R_SCORE_IMM32, 21)
-END_RELOC_NUMBERS (R_SCORE_max)
-
-#endif /* _ELF_SCORE_H */
diff --git a/include/elf/sh.h b/include/elf/sh.h
deleted file mode 100644
index c2bd50d2a..000000000
--- a/include/elf/sh.h
+++ /dev/null
@@ -1,250 +0,0 @@
-/* SH ELF support for BFD.
- Copyright 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2010
- Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _ELF_SH_H
-#define _ELF_SH_H
-
-/* Processor specific flags for the ELF header e_flags field. */
-
-#define EF_SH_MACH_MASK 0x1f
-#define EF_SH_UNKNOWN 0 /* For backwards compatibility. */
-#define EF_SH1 1
-#define EF_SH2 2
-#define EF_SH3 3
-#define EF_SH_DSP 4
-#define EF_SH3_DSP 5
-#define EF_SH4AL_DSP 6
-#define EF_SH3E 8
-#define EF_SH4 9
-#define EF_SH2E 11
-#define EF_SH4A 12
-#define EF_SH2A 13
-
-#define EF_SH4_NOFPU 16
-#define EF_SH4A_NOFPU 17
-#define EF_SH4_NOMMU_NOFPU 18
-#define EF_SH2A_NOFPU 19
-#define EF_SH3_NOMMU 20
-
-#define EF_SH2A_SH4_NOFPU 21
-#define EF_SH2A_SH3_NOFPU 22
-#define EF_SH2A_SH4 23
-#define EF_SH2A_SH3E 24
-
-/* This one can only mix in objects from other EF_SH5 objects. */
-#define EF_SH5 10
-
-/* Define the mapping from ELF to bfd mach numbers.
- bfd_mach_* are defined in bfd_in2.h (generated from
- archures.c). */
-#define EF_SH_BFD_TABLE \
-/* EF_SH_UNKNOWN */ bfd_mach_sh , \
-/* EF_SH1 */ bfd_mach_sh , \
-/* EF_SH2 */ bfd_mach_sh2 , \
-/* EF_SH3 */ bfd_mach_sh3 , \
-/* EF_SH_DSP */ bfd_mach_sh_dsp , \
-/* EF_SH3_DSP */ bfd_mach_sh3_dsp , \
-/* EF_SHAL_DSP */ bfd_mach_sh4al_dsp , \
-/* 7 */ 0, \
-/* EF_SH3E */ bfd_mach_sh3e , \
-/* EF_SH4 */ bfd_mach_sh4 , \
-/* EF_SH5 */ 0, \
-/* EF_SH2E */ bfd_mach_sh2e , \
-/* EF_SH4A */ bfd_mach_sh4a , \
-/* EF_SH2A */ bfd_mach_sh2a , \
-/* 14, 15 */ 0, 0, \
-/* EF_SH4_NOFPU */ bfd_mach_sh4_nofpu , \
-/* EF_SH4A_NOFPU */ bfd_mach_sh4a_nofpu , \
-/* EF_SH4_NOMMU_NOFPU */ bfd_mach_sh4_nommu_nofpu, \
-/* EF_SH2A_NOFPU */ bfd_mach_sh2a_nofpu , \
-/* EF_SH3_NOMMU */ bfd_mach_sh3_nommu , \
-/* EF_SH2A_SH4_NOFPU */ bfd_mach_sh2a_nofpu_or_sh4_nommu_nofpu, \
-/* EF_SH2A_SH3_NOFPU */ bfd_mach_sh2a_nofpu_or_sh3_nommu, \
-/* EF_SH2A_SH4 */ bfd_mach_sh2a_or_sh4 , \
-/* EF_SH2A_SH3E */ bfd_mach_sh2a_or_sh3e
-
-/* Convert arch_sh* into EF_SH*. */
-int sh_find_elf_flags (unsigned int arch_set);
-
-/* Convert bfd_mach_* into EF_SH*. */
-int sh_elf_get_flags_from_mach (unsigned long mach);
-
-/* Other e_flags bits. */
-
-#define EF_SH_PIC 0x100 /* Segments of an FDPIC binary may
- be relocated independently. */
-#define EF_SH_FDPIC 0x8000 /* Uses the FDPIC ABI. */
-
-/* Flags for the st_other symbol field.
- Keep away from the STV_ visibility flags (bit 0..1). */
-
-/* A reference to this symbol should by default add 1. */
-#define STO_SH5_ISA32 (1 << 2)
-
-/* Section contains only SHmedia code (no SHcompact code). */
-#define SHF_SH5_ISA32 0x40000000
-
-/* Section contains both SHmedia and SHcompact code, and possibly also
- constants. */
-#define SHF_SH5_ISA32_MIXED 0x20000000
-
-/* If applied to a .cranges section, marks that the section is sorted by
- increasing cr_addr values. */
-#define SHT_SH5_CR_SORTED 0x80000001
-
-/* Symbol should be handled as DataLabel (attached to global SHN_UNDEF
- symbols). */
-#define STT_DATALABEL STT_LOPROC
-
-#include "elf/reloc-macros.h"
-
-/* Relocations. */
-/* Relocations 10-32 and 128-255 are GNU extensions.
- 25..32 and 10 are used for relaxation. */
-START_RELOC_NUMBERS (elf_sh_reloc_type)
- RELOC_NUMBER (R_SH_NONE, 0)
- RELOC_NUMBER (R_SH_DIR32, 1)
- RELOC_NUMBER (R_SH_REL32, 2)
- RELOC_NUMBER (R_SH_DIR8WPN, 3)
- RELOC_NUMBER (R_SH_IND12W, 4)
- RELOC_NUMBER (R_SH_DIR8WPL, 5)
- RELOC_NUMBER (R_SH_DIR8WPZ, 6)
- RELOC_NUMBER (R_SH_DIR8BP, 7)
- RELOC_NUMBER (R_SH_DIR8W, 8)
- RELOC_NUMBER (R_SH_DIR8L, 9)
-
- RELOC_NUMBER (R_SH_LOOP_START, 10)
- RELOC_NUMBER (R_SH_LOOP_END, 11)
-
- FAKE_RELOC (R_SH_FIRST_INVALID_RELOC, 12)
- FAKE_RELOC (R_SH_LAST_INVALID_RELOC, 21)
-
- RELOC_NUMBER (R_SH_GNU_VTINHERIT, 22)
- RELOC_NUMBER (R_SH_GNU_VTENTRY, 23)
- RELOC_NUMBER (R_SH_SWITCH8, 24)
- RELOC_NUMBER (R_SH_SWITCH16, 25)
- RELOC_NUMBER (R_SH_SWITCH32, 26)
- RELOC_NUMBER (R_SH_USES, 27)
- RELOC_NUMBER (R_SH_COUNT, 28)
- RELOC_NUMBER (R_SH_ALIGN, 29)
- RELOC_NUMBER (R_SH_CODE, 30)
- RELOC_NUMBER (R_SH_DATA, 31)
- RELOC_NUMBER (R_SH_LABEL, 32)
-
- RELOC_NUMBER (R_SH_DIR16, 33)
- RELOC_NUMBER (R_SH_DIR8, 34)
- RELOC_NUMBER (R_SH_DIR8UL, 35)
- RELOC_NUMBER (R_SH_DIR8UW, 36)
- RELOC_NUMBER (R_SH_DIR8U, 37)
- RELOC_NUMBER (R_SH_DIR8SW, 38)
- RELOC_NUMBER (R_SH_DIR8S, 39)
- RELOC_NUMBER (R_SH_DIR4UL, 40)
- RELOC_NUMBER (R_SH_DIR4UW, 41)
- RELOC_NUMBER (R_SH_DIR4U, 42)
- RELOC_NUMBER (R_SH_PSHA, 43)
- RELOC_NUMBER (R_SH_PSHL, 44)
- RELOC_NUMBER (R_SH_DIR5U, 45)
- RELOC_NUMBER (R_SH_DIR6U, 46)
- RELOC_NUMBER (R_SH_DIR6S, 47)
- RELOC_NUMBER (R_SH_DIR10S, 48)
- RELOC_NUMBER (R_SH_DIR10SW, 49)
- RELOC_NUMBER (R_SH_DIR10SL, 50)
- RELOC_NUMBER (R_SH_DIR10SQ, 51)
- FAKE_RELOC (R_SH_FIRST_INVALID_RELOC_2, 52)
- FAKE_RELOC (R_SH_LAST_INVALID_RELOC_2, 52)
- RELOC_NUMBER (R_SH_DIR16S, 53)
- FAKE_RELOC (R_SH_FIRST_INVALID_RELOC_3, 54)
- FAKE_RELOC (R_SH_LAST_INVALID_RELOC_3, 143)
- RELOC_NUMBER (R_SH_TLS_GD_32, 144)
- RELOC_NUMBER (R_SH_TLS_LD_32, 145)
- RELOC_NUMBER (R_SH_TLS_LDO_32, 146)
- RELOC_NUMBER (R_SH_TLS_IE_32, 147)
- RELOC_NUMBER (R_SH_TLS_LE_32, 148)
- RELOC_NUMBER (R_SH_TLS_DTPMOD32, 149)
- RELOC_NUMBER (R_SH_TLS_DTPOFF32, 150)
- RELOC_NUMBER (R_SH_TLS_TPOFF32, 151)
- FAKE_RELOC (R_SH_FIRST_INVALID_RELOC_4, 152)
- FAKE_RELOC (R_SH_LAST_INVALID_RELOC_4, 159)
- RELOC_NUMBER (R_SH_GOT32, 160)
- RELOC_NUMBER (R_SH_PLT32, 161)
- RELOC_NUMBER (R_SH_COPY, 162)
- RELOC_NUMBER (R_SH_GLOB_DAT, 163)
- RELOC_NUMBER (R_SH_JMP_SLOT, 164)
- RELOC_NUMBER (R_SH_RELATIVE, 165)
- RELOC_NUMBER (R_SH_GOTOFF, 166)
- RELOC_NUMBER (R_SH_GOTPC, 167)
- RELOC_NUMBER (R_SH_GOTPLT32, 168)
- RELOC_NUMBER (R_SH_GOT_LOW16, 169)
- RELOC_NUMBER (R_SH_GOT_MEDLOW16, 170)
- RELOC_NUMBER (R_SH_GOT_MEDHI16, 171)
- RELOC_NUMBER (R_SH_GOT_HI16, 172)
- RELOC_NUMBER (R_SH_GOTPLT_LOW16, 173)
- RELOC_NUMBER (R_SH_GOTPLT_MEDLOW16, 174)
- RELOC_NUMBER (R_SH_GOTPLT_MEDHI16, 175)
- RELOC_NUMBER (R_SH_GOTPLT_HI16, 176)
- RELOC_NUMBER (R_SH_PLT_LOW16, 177)
- RELOC_NUMBER (R_SH_PLT_MEDLOW16, 178)
- RELOC_NUMBER (R_SH_PLT_MEDHI16, 179)
- RELOC_NUMBER (R_SH_PLT_HI16, 180)
- RELOC_NUMBER (R_SH_GOTOFF_LOW16, 181)
- RELOC_NUMBER (R_SH_GOTOFF_MEDLOW16, 182)
- RELOC_NUMBER (R_SH_GOTOFF_MEDHI16, 183)
- RELOC_NUMBER (R_SH_GOTOFF_HI16, 184)
- RELOC_NUMBER (R_SH_GOTPC_LOW16, 185)
- RELOC_NUMBER (R_SH_GOTPC_MEDLOW16, 186)
- RELOC_NUMBER (R_SH_GOTPC_MEDHI16, 187)
- RELOC_NUMBER (R_SH_GOTPC_HI16, 188)
- RELOC_NUMBER (R_SH_GOT10BY4, 189)
- RELOC_NUMBER (R_SH_GOTPLT10BY4, 190)
- RELOC_NUMBER (R_SH_GOT10BY8, 191)
- RELOC_NUMBER (R_SH_GOTPLT10BY8, 192)
- RELOC_NUMBER (R_SH_COPY64, 193)
- RELOC_NUMBER (R_SH_GLOB_DAT64, 194)
- RELOC_NUMBER (R_SH_JMP_SLOT64, 195)
- RELOC_NUMBER (R_SH_RELATIVE64, 196)
- FAKE_RELOC (R_SH_FIRST_INVALID_RELOC_5, 197)
- FAKE_RELOC (R_SH_LAST_INVALID_RELOC_5, 200)
- RELOC_NUMBER (R_SH_GOT20, 201)
- RELOC_NUMBER (R_SH_GOTOFF20, 202)
- RELOC_NUMBER (R_SH_GOTFUNCDESC, 203)
- RELOC_NUMBER (R_SH_GOTFUNCDESC20, 204)
- RELOC_NUMBER (R_SH_GOTOFFFUNCDESC, 205)
- RELOC_NUMBER (R_SH_GOTOFFFUNCDESC20, 206)
- RELOC_NUMBER (R_SH_FUNCDESC, 207)
- RELOC_NUMBER (R_SH_FUNCDESC_VALUE, 208)
- FAKE_RELOC (R_SH_FIRST_INVALID_RELOC_6, 209)
- FAKE_RELOC (R_SH_LAST_INVALID_RELOC_6, 241)
- RELOC_NUMBER (R_SH_SHMEDIA_CODE, 242)
- RELOC_NUMBER (R_SH_PT_16, 243)
- RELOC_NUMBER (R_SH_IMMS16, 244)
- RELOC_NUMBER (R_SH_IMMU16, 245)
- RELOC_NUMBER (R_SH_IMM_LOW16, 246)
- RELOC_NUMBER (R_SH_IMM_LOW16_PCREL, 247)
- RELOC_NUMBER (R_SH_IMM_MEDLOW16, 248)
- RELOC_NUMBER (R_SH_IMM_MEDLOW16_PCREL, 249)
- RELOC_NUMBER (R_SH_IMM_MEDHI16, 250)
- RELOC_NUMBER (R_SH_IMM_MEDHI16_PCREL, 251)
- RELOC_NUMBER (R_SH_IMM_HI16, 252)
- RELOC_NUMBER (R_SH_IMM_HI16_PCREL, 253)
- RELOC_NUMBER (R_SH_64, 254)
- RELOC_NUMBER (R_SH_64_PCREL, 255)
-END_RELOC_NUMBERS (R_SH_max)
-
-#endif
diff --git a/include/elf/sparc.h b/include/elf/sparc.h
deleted file mode 100644
index d182f4d76..000000000
--- a/include/elf/sparc.h
+++ /dev/null
@@ -1,231 +0,0 @@
-/* SPARC ELF support for BFD.
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2008, 2010,
- 2011
- Free Software Foundation, Inc.
- By Doug Evans, Cygnus Support, <dje@cygnus.com>.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef _ELF_SPARC_H
-#define _ELF_SPARC_H
-
-/* Processor specific flags for the ELF header e_flags field. */
-
-/* These are defined by Sun. */
-
-#define EF_SPARC_32PLUS_MASK 0xffff00 /* bits indicating V8+ type */
-#define EF_SPARC_32PLUS 0x000100 /* generic V8+ features */
-#define EF_SPARC_SUN_US1 0x000200 /* Sun UltraSPARC1 extensions */
-#define EF_SPARC_HAL_R1 0x000400 /* HAL R1 extensions */
-#define EF_SPARC_SUN_US3 0x000800 /* Sun UltraSPARCIII extensions */
-
-#define EF_SPARC_LEDATA 0x800000 /* little endian data */
-
-/* This name is used in the V9 ABI. */
-#define EF_SPARC_EXT_MASK 0xffff00 /* reserved for vendor extensions */
-
-/* V9 memory models */
-#define EF_SPARCV9_MM 0x3 /* memory model mask */
-#define EF_SPARCV9_TSO 0x0 /* total store ordering */
-#define EF_SPARCV9_PSO 0x1 /* partial store ordering */
-#define EF_SPARCV9_RMO 0x2 /* relaxed store ordering */
-
-/* Section indices. */
-
-#define SHN_BEFORE SHN_LORESERVE /* Used with SHF_ORDERED and... */
-#define SHN_AFTER (SHN_LORESERVE + 1) /* SHF_LINK_ORDER section flags. */
-
-/* Section flags. */
-
-#define SHF_ORDERED 0x40000000 /* treat sh_link,sh_info specially */
-
-/* Symbol types. */
-
-#define STT_REGISTER 13 /* global reg reserved to app. */
-
-#include "elf/reloc-macros.h"
-
-/* Relocation types. */
-START_RELOC_NUMBERS (elf_sparc_reloc_type)
- RELOC_NUMBER (R_SPARC_NONE, 0)
- RELOC_NUMBER (R_SPARC_8, 1)
- RELOC_NUMBER (R_SPARC_16, 2)
- RELOC_NUMBER (R_SPARC_32, 3)
- RELOC_NUMBER (R_SPARC_DISP8, 4)
- RELOC_NUMBER (R_SPARC_DISP16, 5)
- RELOC_NUMBER (R_SPARC_DISP32, 6)
- RELOC_NUMBER (R_SPARC_WDISP30, 7)
- RELOC_NUMBER (R_SPARC_WDISP22, 8)
- RELOC_NUMBER (R_SPARC_HI22, 9)
- RELOC_NUMBER (R_SPARC_22, 10)
- RELOC_NUMBER (R_SPARC_13, 11)
- RELOC_NUMBER (R_SPARC_LO10, 12)
- RELOC_NUMBER (R_SPARC_GOT10, 13)
- RELOC_NUMBER (R_SPARC_GOT13, 14)
- RELOC_NUMBER (R_SPARC_GOT22, 15)
- RELOC_NUMBER (R_SPARC_PC10, 16)
- RELOC_NUMBER (R_SPARC_PC22, 17)
- RELOC_NUMBER (R_SPARC_WPLT30, 18)
- RELOC_NUMBER (R_SPARC_COPY, 19)
- RELOC_NUMBER (R_SPARC_GLOB_DAT, 20)
- RELOC_NUMBER (R_SPARC_JMP_SLOT, 21)
- RELOC_NUMBER (R_SPARC_RELATIVE, 22)
- RELOC_NUMBER (R_SPARC_UA32, 23)
-
- /* ??? These 6 relocs are new but not currently used. For binary
- compatibility in the sparc64-elf toolchain, we leave them out.
- A non-binary upward compatible change is expected for sparc64-elf. */
-#ifndef SPARC64_OLD_RELOCS
- /* ??? New relocs on the UltraSPARC. Not sure what they're for yet. */
- RELOC_NUMBER (R_SPARC_PLT32, 24)
- RELOC_NUMBER (R_SPARC_HIPLT22, 25)
- RELOC_NUMBER (R_SPARC_LOPLT10, 26)
- RELOC_NUMBER (R_SPARC_PCPLT32, 27)
- RELOC_NUMBER (R_SPARC_PCPLT22, 28)
- RELOC_NUMBER (R_SPARC_PCPLT10, 29)
-#endif
-
- /* v9 relocs */
- RELOC_NUMBER (R_SPARC_10, 30)
- RELOC_NUMBER (R_SPARC_11, 31)
- RELOC_NUMBER (R_SPARC_64, 32)
- RELOC_NUMBER (R_SPARC_OLO10, 33)
- RELOC_NUMBER (R_SPARC_HH22, 34)
- RELOC_NUMBER (R_SPARC_HM10, 35)
- RELOC_NUMBER (R_SPARC_LM22, 36)
- RELOC_NUMBER (R_SPARC_PC_HH22, 37)
- RELOC_NUMBER (R_SPARC_PC_HM10, 38)
- RELOC_NUMBER (R_SPARC_PC_LM22, 39)
- RELOC_NUMBER (R_SPARC_WDISP16, 40)
- RELOC_NUMBER (R_SPARC_WDISP19, 41)
- RELOC_NUMBER (R_SPARC_UNUSED_42, 42)
- RELOC_NUMBER (R_SPARC_7, 43)
- RELOC_NUMBER (R_SPARC_5, 44)
- RELOC_NUMBER (R_SPARC_6, 45)
- RELOC_NUMBER (R_SPARC_DISP64, 46)
- RELOC_NUMBER (R_SPARC_PLT64, 47)
- RELOC_NUMBER (R_SPARC_HIX22, 48)
- RELOC_NUMBER (R_SPARC_LOX10, 49)
- RELOC_NUMBER (R_SPARC_H44, 50)
- RELOC_NUMBER (R_SPARC_M44, 51)
- RELOC_NUMBER (R_SPARC_L44, 52)
- RELOC_NUMBER (R_SPARC_REGISTER, 53)
- RELOC_NUMBER (R_SPARC_UA64, 54)
- RELOC_NUMBER (R_SPARC_UA16, 55)
-
- RELOC_NUMBER (R_SPARC_TLS_GD_HI22, 56)
- RELOC_NUMBER (R_SPARC_TLS_GD_LO10, 57)
- RELOC_NUMBER (R_SPARC_TLS_GD_ADD, 58)
- RELOC_NUMBER (R_SPARC_TLS_GD_CALL, 59)
- RELOC_NUMBER (R_SPARC_TLS_LDM_HI22, 60)
- RELOC_NUMBER (R_SPARC_TLS_LDM_LO10, 61)
- RELOC_NUMBER (R_SPARC_TLS_LDM_ADD, 62)
- RELOC_NUMBER (R_SPARC_TLS_LDM_CALL, 63)
- RELOC_NUMBER (R_SPARC_TLS_LDO_HIX22, 64)
- RELOC_NUMBER (R_SPARC_TLS_LDO_LOX10, 65)
- RELOC_NUMBER (R_SPARC_TLS_LDO_ADD, 66)
- RELOC_NUMBER (R_SPARC_TLS_IE_HI22, 67)
- RELOC_NUMBER (R_SPARC_TLS_IE_LO10, 68)
- RELOC_NUMBER (R_SPARC_TLS_IE_LD, 69)
- RELOC_NUMBER (R_SPARC_TLS_IE_LDX, 70)
- RELOC_NUMBER (R_SPARC_TLS_IE_ADD, 71)
- RELOC_NUMBER (R_SPARC_TLS_LE_HIX22, 72)
- RELOC_NUMBER (R_SPARC_TLS_LE_LOX10, 73)
- RELOC_NUMBER (R_SPARC_TLS_DTPMOD32, 74)
- RELOC_NUMBER (R_SPARC_TLS_DTPMOD64, 75)
- RELOC_NUMBER (R_SPARC_TLS_DTPOFF32, 76)
- RELOC_NUMBER (R_SPARC_TLS_DTPOFF64, 77)
- RELOC_NUMBER (R_SPARC_TLS_TPOFF32, 78)
- RELOC_NUMBER (R_SPARC_TLS_TPOFF64, 79)
-
- RELOC_NUMBER (R_SPARC_GOTDATA_HIX22, 80)
- RELOC_NUMBER (R_SPARC_GOTDATA_LOX10, 81)
- RELOC_NUMBER (R_SPARC_GOTDATA_OP_HIX22, 82)
- RELOC_NUMBER (R_SPARC_GOTDATA_OP_LOX10, 83)
- RELOC_NUMBER (R_SPARC_GOTDATA_OP, 84)
-
- RELOC_NUMBER (R_SPARC_H34, 85)
- RELOC_NUMBER (R_SPARC_SIZE32, 86)
- RELOC_NUMBER (R_SPARC_SIZE64, 87)
- RELOC_NUMBER (R_SPARC_WDISP10, 88)
-
- EMPTY_RELOC (R_SPARC_max_std)
-
- RELOC_NUMBER (R_SPARC_JMP_IREL, 248)
- RELOC_NUMBER (R_SPARC_IRELATIVE, 249)
- RELOC_NUMBER (R_SPARC_GNU_VTINHERIT, 250)
- RELOC_NUMBER (R_SPARC_GNU_VTENTRY, 251)
- RELOC_NUMBER (R_SPARC_REV32, 252)
-
-END_RELOC_NUMBERS (R_SPARC_max)
-
-/* Relocation macros. */
-
-#define ELF64_R_TYPE_DATA(info) \
- (((bfd_signed_vma)(ELF64_R_TYPE(info) >> 8) ^ 0x800000) - 0x800000)
-#define ELF64_R_TYPE_ID(info) \
- ((info) & 0xff)
-#define ELF64_R_TYPE_INFO(data, type) \
- (((bfd_vma) ((data) & 0xffffff) << 8) | (bfd_vma) (type))
-
-/* Values for Elf64_Dyn.d_tag. */
-
-#define DT_SPARC_REGISTER 0x70000001
-
-/* Object attribute tags. */
-enum
-{
- /* 0-3 are generic. */
- Tag_GNU_Sparc_HWCAPS = 4,
-};
-
-/* These values match the AV_SPARC_* hwcap bits defined under Solaris. */
-#define ELF_SPARC_HWCAP_MUL32 0x00000001 /* umul/umulcc/smul/smulcc insns */
-#define ELF_SPARC_HWCAP_DIV32 0x00000002 /* udiv/udivcc/sdiv/sdivcc insns */
-#define ELF_SPARC_HWCAP_FSMULD 0x00000004 /* 'fsmuld' insn */
-#define ELF_SPARC_HWCAP_V8PLUS 0x00000008 /* v9 insns available to 32bit */
-#define ELF_SPARC_HWCAP_POPC 0x00000010 /* 'popc' insn */
-#define ELF_SPARC_HWCAP_VIS 0x00000020 /* VIS insns */
-#define ELF_SPARC_HWCAP_VIS2 0x00000040 /* VIS2 insns */
-#define ELF_SPARC_HWCAP_ASI_BLK_INIT \
- 0x00000080 /* block init ASIs */
-#define ELF_SPARC_HWCAP_FMAF 0x00000100 /* fused multiply-add */
-#define ELF_SPARC_HWCAP_VIS3 0x00000400 /* VIS3 insns */
-#define ELF_SPARC_HWCAP_HPC 0x00000800 /* HPC insns */
-#define ELF_SPARC_HWCAP_RANDOM 0x00001000 /* 'random' insn */
-#define ELF_SPARC_HWCAP_TRANS 0x00002000 /* transaction insns */
-#define ELF_SPARC_HWCAP_FJFMAU 0x00004000 /* unfused multiply-add */
-#define ELF_SPARC_HWCAP_IMA 0x00008000 /* integer multiply-add */
-#define ELF_SPARC_HWCAP_ASI_CACHE_SPARING \
- 0x00010000 /* cache sparing ASIs */
-#define ELF_SPARC_HWCAP_AES 0x00020000 /* AES crypto insns */
-#define ELF_SPARC_HWCAP_DES 0x00040000 /* DES crypto insns */
-#define ELF_SPARC_HWCAP_KASUMI 0x00080000 /* KASUMI crypto insns */
-#define ELF_SPARC_HWCAP_CAMELLIA \
- 0x00100000 /* CAMELLIA crypto insns */
-#define ELF_SPARC_HWCAP_MD5 0x00200000 /* MD5 hashing insns */
-#define ELF_SPARC_HWCAP_SHA1 0x00400000 /* SHA1 hashing insns */
-#define ELF_SPARC_HWCAP_SHA256 0x00800000 /* SHA256 hashing insns */
-#define ELF_SPARC_HWCAP_SHA512 0x01000000 /* SHA512 hashing insns */
-#define ELF_SPARC_HWCAP_MPMUL 0x02000000 /* Multiple Precision Multiply */
-#define ELF_SPARC_HWCAP_MONT 0x04000000 /* Montgomery Mult/Sqrt */
-#define ELF_SPARC_HWCAP_PAUSE 0x08000000 /* Pause insn */
-#define ELF_SPARC_HWCAP_CBCOND 0x10000000 /* Compare and Branch insns */
-#define ELF_SPARC_HWCAP_CRC32C 0x20000000 /* CRC32C insn */
-
-#endif /* _ELF_SPARC_H */
diff --git a/include/elf/spu.h b/include/elf/spu.h
deleted file mode 100644
index 0618ec8fc..000000000
--- a/include/elf/spu.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/* SPU ELF support for BFD.
-
- Copyright 2006, 2007, 2009, 2010 Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _ELF_SPU_H
-#define _ELF_SPU_H
-
-#include "elf/reloc-macros.h"
-
-/* elf32-spu.c depends on these being consecutive. */
-START_RELOC_NUMBERS (elf_spu_reloc_type)
- RELOC_NUMBER (R_SPU_NONE, 0)
- RELOC_NUMBER (R_SPU_ADDR10, 1)
- RELOC_NUMBER (R_SPU_ADDR16, 2)
- RELOC_NUMBER (R_SPU_ADDR16_HI, 3)
- RELOC_NUMBER (R_SPU_ADDR16_LO, 4)
- RELOC_NUMBER (R_SPU_ADDR18, 5)
- RELOC_NUMBER (R_SPU_ADDR32, 6)
- RELOC_NUMBER (R_SPU_REL16, 7)
- RELOC_NUMBER (R_SPU_ADDR7, 8)
- RELOC_NUMBER (R_SPU_REL9, 9)
- RELOC_NUMBER (R_SPU_REL9I, 10)
- RELOC_NUMBER (R_SPU_ADDR10I, 11)
- RELOC_NUMBER (R_SPU_ADDR16I, 12)
- RELOC_NUMBER (R_SPU_REL32, 13)
- RELOC_NUMBER (R_SPU_ADDR16X, 14)
- RELOC_NUMBER (R_SPU_PPU32, 15)
- RELOC_NUMBER (R_SPU_PPU64, 16)
- RELOC_NUMBER (R_SPU_ADD_PIC, 17)
-END_RELOC_NUMBERS (R_SPU_max)
-
-/* Program header extensions */
-
-/* Mark a PT_LOAD segment as containing an overlay which should not
- initially be loaded. */
-#define PF_OVERLAY (1 << 27)
-
-/* SPU Dynamic Object Information. */
-#define PT_SPU_INFO 0x70000000
-
-/* SPU plugin information */
-#define SPU_PLUGIN_NAME "SPUNAME"
-#define SPU_PTNOTE_SPUNAME ".note.spu_name"
-
-#endif /* _ELF_SPU_H */
diff --git a/include/elf/tic6x-attrs.h b/include/elf/tic6x-attrs.h
deleted file mode 100644
index 21ce1e4f5..000000000
--- a/include/elf/tic6x-attrs.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/* TI C6X ELF attributes.
- Copyright 2010
- Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-/* Define the TAG macro before including this file; it takes a tag
- name and value. */
-
-TAG(Tag_ISA, 4)
-TAG(Tag_ABI_wchar_t, 6)
-TAG(Tag_ABI_stack_align_needed, 8)
-TAG(Tag_ABI_stack_align_preserved, 10)
-TAG(Tag_ABI_DSBT, 12)
-TAG(Tag_ABI_PID, 14)
-TAG(Tag_ABI_PIC, 16)
-TAG(Tag_ABI_array_object_alignment, 18)
-TAG(Tag_ABI_array_object_align_expected, 20)
-TAG(Tag_ABI_compatibility, 32)
-TAG(Tag_ABI_conformance, 67)
diff --git a/include/elf/tic6x.h b/include/elf/tic6x.h
deleted file mode 100644
index e686cc3a5..000000000
--- a/include/elf/tic6x.h
+++ /dev/null
@@ -1,167 +0,0 @@
-/* TI C6X ELF support for BFD.
- Copyright 2010, 2011
- Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef _ELF_TIC6X_H
-#define _ELF_TIC6X_H
-
-#include "elf/reloc-macros.h"
-
-/* Relocation types. */
-START_RELOC_NUMBERS (elf_tic6x_reloc_type)
- RELOC_NUMBER (R_C6000_NONE, 0)
- RELOC_NUMBER (R_C6000_ABS32, 1)
- RELOC_NUMBER (R_C6000_ABS16, 2)
- RELOC_NUMBER (R_C6000_ABS8, 3)
- RELOC_NUMBER (R_C6000_PCR_S21, 4)
- RELOC_NUMBER (R_C6000_PCR_S12, 5)
- RELOC_NUMBER (R_C6000_PCR_S10, 6)
- RELOC_NUMBER (R_C6000_PCR_S7, 7)
- RELOC_NUMBER (R_C6000_ABS_S16, 8)
- RELOC_NUMBER (R_C6000_ABS_L16, 9)
- RELOC_NUMBER (R_C6000_ABS_H16, 10)
- RELOC_NUMBER (R_C6000_SBR_U15_B, 11)
- RELOC_NUMBER (R_C6000_SBR_U15_H, 12)
- RELOC_NUMBER (R_C6000_SBR_U15_W, 13)
- RELOC_NUMBER (R_C6000_SBR_S16, 14)
- RELOC_NUMBER (R_C6000_SBR_L16_B, 15)
- RELOC_NUMBER (R_C6000_SBR_L16_H, 16)
- RELOC_NUMBER (R_C6000_SBR_L16_W, 17)
- RELOC_NUMBER (R_C6000_SBR_H16_B, 18)
- RELOC_NUMBER (R_C6000_SBR_H16_H, 19)
- RELOC_NUMBER (R_C6000_SBR_H16_W, 20)
- RELOC_NUMBER (R_C6000_SBR_GOT_U15_W, 21)
- RELOC_NUMBER (R_C6000_SBR_GOT_L16_W, 22)
- RELOC_NUMBER (R_C6000_SBR_GOT_H16_W, 23)
- RELOC_NUMBER (R_C6000_DSBT_INDEX, 24)
- RELOC_NUMBER (R_C6000_PREL31, 25)
- RELOC_NUMBER (R_C6000_COPY, 26)
- RELOC_NUMBER (R_C6000_JUMP_SLOT, 27)
- RELOC_NUMBER (R_C6000_EHTYPE, 28)
- RELOC_NUMBER (R_C6000_PCR_H16, 29)
- RELOC_NUMBER (R_C6000_PCR_L16, 30)
- RELOC_NUMBER (R_C6000_ALIGN, 253)
- RELOC_NUMBER (R_C6000_FPHEAD, 254)
- RELOC_NUMBER (R_C6000_NOCMP, 255)
-END_RELOC_NUMBERS (R_TIC6X_max)
-
-/* Processor-specific flags. */
-
-/* File contains static relocation information. */
-#define EF_C6000_REL 0x1
-
-/* Processor-specific section types. */
-
-/* Unwind function table for stack unwinding. */
-#define SHT_C6000_UNWIND 0x70000001
-
-/* DLL dynamic linking pre-emption map. */
-#define SHT_C6000_PREEMPTMAP 0x70000002
-
-/* Object file compatibility attributes. */
-#define SHT_C6000_ATTRIBUTES 0x70000003
-
-/* Intermediate code for link-time optimization. */
-#define SHT_TI_ICODE 0x7F000000
-
-/* Symbolic cross reference information. */
-#define SHT_TI_XREF 0x7F000001
-
-/* Reserved. */
-#define SHT_TI_HANDLER 0x7F000002
-
-/* Compressed data for initializing C variables. */
-#define SHT_TI_INITINFO 0x7F000003
-
-/* Extended program header attributes. */
-#define SHT_TI_PHATTRS 0x7F000004
-
-/* Processor specific section indices. These sections do not actually
- exist. Symbols with a st_shndx field corresponding to one of these
- values have a special meaning. */
-
-/* Small data area common symbol. */
-#define SHN_TIC6X_SCOMMON SHN_LORESERVE
-
-/* Processor-specific segment types. */
-
-/* Extended Segment Attributes. */
-#define PT_C6000_PHATTR 0x70000000
-
-/* Processor-specific dynamic tags. */
-
-/* Undocumented. */
-#define DT_C6000_GSYM_OFFSET 0x6000000D
-
-/* Undocumented. */
-#define DT_C6000_GSTR_OFFSET 0x6000000F
-
-/* Statically linked base address of data segment. */
-#define DT_C6000_DSBT_BASE 0x70000000
-
-/* Number of entries in this module's DSBT. */
-#define DT_C6000_DSBT_SIZE 0x70000001
-
-/* Undocumented. */
-#define DT_C6000_PREEMPTMAP 0x70000002
-
-/* The hard-coded DSBT index for this module, if any. */
-#define DT_C6000_DSBT_INDEX 0x70000003
-
-/* Extended program header attributes. */
-
-/* Terminate a segment. */
-#define PHA_NULL 0x0
-
-/* Segment's address bound to the final address. */
-#define PHA_BOUND 0x1
-
-/* Segment cannot be further relocated. */
-#define PHA_READONLY 0x2
-
-/* Build attributes. */
-enum
- {
-#define TAG(tag, value) tag = value,
-#include "elf/tic6x-attrs.h"
-#undef TAG
- Tag_C6XABI_last
- };
-
-/* Values for Tag_ISA. GNU-specific names; the ABI does not specify
- names for these values. */
-enum
- {
- C6XABI_Tag_ISA_none = 0,
- C6XABI_Tag_ISA_C62X = 1,
- C6XABI_Tag_ISA_C67X = 3,
- C6XABI_Tag_ISA_C67XP = 4,
- C6XABI_Tag_ISA_C64X = 6,
- C6XABI_Tag_ISA_C64XP = 7,
- C6XABI_Tag_ISA_C674X = 8
- };
-
-/* Special section names. */
-#define ELF_STRING_C6000_unwind ".c6xabi.exidx"
-#define ELF_STRING_C6000_unwind_info ".c6xabi.extab"
-#define ELF_STRING_C6000_unwind_once ".gnu.linkonce.c6xabi.exidx."
-#define ELF_STRING_C6000_unwind_info_once ".gnu.linkonce.c6xabi.extab."
-
-#endif /* _ELF_TIC6X_H */
diff --git a/include/elf/tilegx.h b/include/elf/tilegx.h
deleted file mode 100644
index e838b8097..000000000
--- a/include/elf/tilegx.h
+++ /dev/null
@@ -1,176 +0,0 @@
-/* TILE-Gx ELF support for BFD.
- Copyright 2011 Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef _ELF_TILEGX_H
-#define _ELF_TILEGX_H
-
-#include "elf/reloc-macros.h"
-
-/* Relocations. */
-START_RELOC_NUMBERS (elf_tilegx_reloc_type)
- RELOC_NUMBER (R_TILEGX_NONE, 0)
-
- /* Standard relocations */
- RELOC_NUMBER (R_TILEGX_64, 1)
- RELOC_NUMBER (R_TILEGX_32, 2)
- RELOC_NUMBER (R_TILEGX_16, 3)
- RELOC_NUMBER (R_TILEGX_8, 4)
- RELOC_NUMBER (R_TILEGX_64_PCREL, 5)
- RELOC_NUMBER (R_TILEGX_32_PCREL, 6)
- RELOC_NUMBER (R_TILEGX_16_PCREL, 7)
- RELOC_NUMBER (R_TILEGX_8_PCREL, 8)
-
- /* Custom relocations */
-
- RELOC_NUMBER (R_TILEGX_HW0, 9)
- RELOC_NUMBER (R_TILEGX_HW1, 10)
- RELOC_NUMBER (R_TILEGX_HW2, 11)
- RELOC_NUMBER (R_TILEGX_HW3, 12)
- RELOC_NUMBER (R_TILEGX_HW0_LAST, 13)
- RELOC_NUMBER (R_TILEGX_HW1_LAST, 14)
- RELOC_NUMBER (R_TILEGX_HW2_LAST, 15)
-
- RELOC_NUMBER (R_TILEGX_COPY, 16)
- RELOC_NUMBER (R_TILEGX_GLOB_DAT, 17)
- RELOC_NUMBER (R_TILEGX_JMP_SLOT, 18)
- RELOC_NUMBER (R_TILEGX_RELATIVE, 19)
-
- /* Branch/jump offsets */
- RELOC_NUMBER (R_TILEGX_BROFF_X1, 20)
- RELOC_NUMBER (R_TILEGX_JUMPOFF_X1, 21)
- RELOC_NUMBER (R_TILEGX_JUMPOFF_X1_PLT, 22)
-
- /* Immediate operands. */
- RELOC_NUMBER (R_TILEGX_IMM8_X0, 23)
- RELOC_NUMBER (R_TILEGX_IMM8_Y0, 24)
- RELOC_NUMBER (R_TILEGX_IMM8_X1, 25)
- RELOC_NUMBER (R_TILEGX_IMM8_Y1, 26)
- RELOC_NUMBER (R_TILEGX_DEST_IMM8_X1, 27)
- RELOC_NUMBER (R_TILEGX_MT_IMM14_X1, 28)
- RELOC_NUMBER (R_TILEGX_MF_IMM14_X1, 29)
- RELOC_NUMBER (R_TILEGX_MMSTART_X0, 30)
- RELOC_NUMBER (R_TILEGX_MMEND_X0, 31)
- RELOC_NUMBER (R_TILEGX_SHAMT_X0, 32)
- RELOC_NUMBER (R_TILEGX_SHAMT_X1, 33)
- RELOC_NUMBER (R_TILEGX_SHAMT_Y0, 34)
- RELOC_NUMBER (R_TILEGX_SHAMT_Y1, 35)
-
- RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0, 36)
- RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0, 37)
- RELOC_NUMBER (R_TILEGX_IMM16_X0_HW1, 38)
- RELOC_NUMBER (R_TILEGX_IMM16_X1_HW1, 39)
- RELOC_NUMBER (R_TILEGX_IMM16_X0_HW2, 40)
- RELOC_NUMBER (R_TILEGX_IMM16_X1_HW2, 41)
- RELOC_NUMBER (R_TILEGX_IMM16_X0_HW3, 42)
- RELOC_NUMBER (R_TILEGX_IMM16_X1_HW3, 43)
- RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0_LAST, 44)
- RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0_LAST, 45)
- RELOC_NUMBER (R_TILEGX_IMM16_X0_HW1_LAST, 46)
- RELOC_NUMBER (R_TILEGX_IMM16_X1_HW1_LAST, 47)
- RELOC_NUMBER (R_TILEGX_IMM16_X0_HW2_LAST, 48)
- RELOC_NUMBER (R_TILEGX_IMM16_X1_HW2_LAST, 49)
-
- RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0_PCREL, 50)
- RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0_PCREL, 51)
- RELOC_NUMBER (R_TILEGX_IMM16_X0_HW1_PCREL, 52)
- RELOC_NUMBER (R_TILEGX_IMM16_X1_HW1_PCREL, 53)
- RELOC_NUMBER (R_TILEGX_IMM16_X0_HW2_PCREL, 54)
- RELOC_NUMBER (R_TILEGX_IMM16_X1_HW2_PCREL, 55)
- RELOC_NUMBER (R_TILEGX_IMM16_X0_HW3_PCREL, 56)
- RELOC_NUMBER (R_TILEGX_IMM16_X1_HW3_PCREL, 57)
- RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0_LAST_PCREL, 58)
- RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0_LAST_PCREL, 59)
- RELOC_NUMBER (R_TILEGX_IMM16_X0_HW1_LAST_PCREL, 60)
- RELOC_NUMBER (R_TILEGX_IMM16_X1_HW1_LAST_PCREL, 61)
- RELOC_NUMBER (R_TILEGX_IMM16_X0_HW2_LAST_PCREL, 62)
- RELOC_NUMBER (R_TILEGX_IMM16_X1_HW2_LAST_PCREL, 63)
-
- RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0_GOT, 64)
- RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0_GOT, 65)
-
- RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0_PLT_PCREL, 66)
- RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0_PLT_PCREL, 67)
- RELOC_NUMBER (R_TILEGX_IMM16_X0_HW1_PLT_PCREL, 68)
- RELOC_NUMBER (R_TILEGX_IMM16_X1_HW1_PLT_PCREL, 69)
- RELOC_NUMBER (R_TILEGX_IMM16_X0_HW2_PLT_PCREL, 70)
- RELOC_NUMBER (R_TILEGX_IMM16_X1_HW2_PLT_PCREL, 71)
-
- RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0_LAST_GOT, 72)
- RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0_LAST_GOT, 73)
- RELOC_NUMBER (R_TILEGX_IMM16_X0_HW1_LAST_GOT, 74)
- RELOC_NUMBER (R_TILEGX_IMM16_X1_HW1_LAST_GOT, 75)
-
- RELOC_NUMBER (R_TILEGX_IMM16_X0_HW3_PLT_PCREL, 76)
- RELOC_NUMBER (R_TILEGX_IMM16_X1_HW3_PLT_PCREL, 77)
-
- RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0_TLS_GD, 78)
- RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0_TLS_GD, 79)
- RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0_TLS_LE, 80)
- RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0_TLS_LE, 81)
- RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0_LAST_TLS_LE, 82)
- RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0_LAST_TLS_LE, 83)
- RELOC_NUMBER (R_TILEGX_IMM16_X0_HW1_LAST_TLS_LE, 84)
- RELOC_NUMBER (R_TILEGX_IMM16_X1_HW1_LAST_TLS_LE, 85)
- RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0_LAST_TLS_GD, 86)
- RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0_LAST_TLS_GD, 87)
- RELOC_NUMBER (R_TILEGX_IMM16_X0_HW1_LAST_TLS_GD, 88)
- RELOC_NUMBER (R_TILEGX_IMM16_X1_HW1_LAST_TLS_GD, 89)
- /* Relocs 90-91 are currently not defined. */
-
- RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0_TLS_IE, 92)
- RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0_TLS_IE, 93)
-
- RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0_LAST_PLT_PCREL, 94)
- RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0_LAST_PLT_PCREL, 95)
- RELOC_NUMBER (R_TILEGX_IMM16_X0_HW1_LAST_PLT_PCREL, 96)
- RELOC_NUMBER (R_TILEGX_IMM16_X1_HW1_LAST_PLT_PCREL, 97)
- RELOC_NUMBER (R_TILEGX_IMM16_X0_HW2_LAST_PLT_PCREL, 98)
- RELOC_NUMBER (R_TILEGX_IMM16_X1_HW2_LAST_PLT_PCREL, 99)
-
- RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0_LAST_TLS_IE, 100)
- RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0_LAST_TLS_IE, 101)
- RELOC_NUMBER (R_TILEGX_IMM16_X0_HW1_LAST_TLS_IE, 102)
- RELOC_NUMBER (R_TILEGX_IMM16_X1_HW1_LAST_TLS_IE, 103)
- /* Relocs 104-105 are currently not defined. */
-
- RELOC_NUMBER (R_TILEGX_TLS_DTPMOD64, 106)
- RELOC_NUMBER (R_TILEGX_TLS_DTPOFF64, 107)
- RELOC_NUMBER (R_TILEGX_TLS_TPOFF64, 108)
- RELOC_NUMBER (R_TILEGX_TLS_DTPMOD32, 109)
- RELOC_NUMBER (R_TILEGX_TLS_DTPOFF32, 110)
- RELOC_NUMBER (R_TILEGX_TLS_TPOFF32, 111)
-
- RELOC_NUMBER (R_TILEGX_TLS_GD_CALL, 112)
- RELOC_NUMBER (R_TILEGX_IMM8_X0_TLS_GD_ADD, 113)
- RELOC_NUMBER (R_TILEGX_IMM8_X1_TLS_GD_ADD, 114)
- RELOC_NUMBER (R_TILEGX_IMM8_Y0_TLS_GD_ADD, 115)
- RELOC_NUMBER (R_TILEGX_IMM8_Y1_TLS_GD_ADD, 116)
- RELOC_NUMBER (R_TILEGX_TLS_IE_LOAD, 117)
- RELOC_NUMBER (R_TILEGX_IMM8_X0_TLS_ADD, 118)
- RELOC_NUMBER (R_TILEGX_IMM8_X1_TLS_ADD, 119)
- RELOC_NUMBER (R_TILEGX_IMM8_Y0_TLS_ADD, 120)
- RELOC_NUMBER (R_TILEGX_IMM8_Y1_TLS_ADD, 121)
-
-/* These are GNU extensions to enable C++ vtable garbage collection. */
- RELOC_NUMBER (R_TILEGX_GNU_VTINHERIT, 128)
- RELOC_NUMBER (R_TILEGX_GNU_VTENTRY, 129)
-END_RELOC_NUMBERS (R_TILEGX_max)
-
-#endif /* _ELF_TILEGX_H */
diff --git a/include/elf/tilepro.h b/include/elf/tilepro.h
deleted file mode 100644
index 0079a2fe4..000000000
--- a/include/elf/tilepro.h
+++ /dev/null
@@ -1,144 +0,0 @@
-/* TILEPro ELF support for BFD.
- Copyright 2011 Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef _ELF_TILEPRO_H
-#define _ELF_TILEPRO_H
-
-#include "elf/reloc-macros.h"
-
-/* Relocations. */
-START_RELOC_NUMBERS (elf_tilepro_reloc_type)
- RELOC_NUMBER (R_TILEPRO_NONE, 0)
-
- /* Standard relocations */
- RELOC_NUMBER (R_TILEPRO_32, 1)
- RELOC_NUMBER (R_TILEPRO_16, 2)
- RELOC_NUMBER (R_TILEPRO_8, 3)
- RELOC_NUMBER (R_TILEPRO_32_PCREL, 4)
- RELOC_NUMBER (R_TILEPRO_16_PCREL, 5)
- RELOC_NUMBER (R_TILEPRO_8_PCREL, 6)
-
- RELOC_NUMBER (R_TILEPRO_LO16, 7)
- RELOC_NUMBER (R_TILEPRO_HI16, 8)
- RELOC_NUMBER (R_TILEPRO_HA16, 9)
-
- RELOC_NUMBER (R_TILEPRO_COPY, 10)
- RELOC_NUMBER (R_TILEPRO_GLOB_DAT, 11)
- RELOC_NUMBER (R_TILEPRO_JMP_SLOT, 12)
- RELOC_NUMBER (R_TILEPRO_RELATIVE, 13)
-
- /* Branch/jump offsets */
- RELOC_NUMBER (R_TILEPRO_BROFF_X1, 14)
- RELOC_NUMBER (R_TILEPRO_JOFFLONG_X1, 15)
- RELOC_NUMBER (R_TILEPRO_JOFFLONG_X1_PLT, 16)
-
- /* Immediate operands. */
- RELOC_NUMBER (R_TILEPRO_IMM8_X0, 17)
- RELOC_NUMBER (R_TILEPRO_IMM8_Y0, 18)
- RELOC_NUMBER (R_TILEPRO_IMM8_X1, 19)
- RELOC_NUMBER (R_TILEPRO_IMM8_Y1, 20)
- RELOC_NUMBER (R_TILEPRO_MT_IMM15_X1, 21)
- RELOC_NUMBER (R_TILEPRO_MF_IMM15_X1, 22)
-
- RELOC_NUMBER (R_TILEPRO_IMM16_X0, 23)
- RELOC_NUMBER (R_TILEPRO_IMM16_X1, 24)
- RELOC_NUMBER (R_TILEPRO_IMM16_X0_LO, 25)
- RELOC_NUMBER (R_TILEPRO_IMM16_X1_LO, 26)
- RELOC_NUMBER (R_TILEPRO_IMM16_X0_HI, 27)
- RELOC_NUMBER (R_TILEPRO_IMM16_X1_HI, 28)
- RELOC_NUMBER (R_TILEPRO_IMM16_X0_HA, 29)
- RELOC_NUMBER (R_TILEPRO_IMM16_X1_HA, 30)
-
- RELOC_NUMBER (R_TILEPRO_IMM16_X0_PCREL, 31)
- RELOC_NUMBER (R_TILEPRO_IMM16_X1_PCREL, 32)
- RELOC_NUMBER (R_TILEPRO_IMM16_X0_LO_PCREL, 33)
- RELOC_NUMBER (R_TILEPRO_IMM16_X1_LO_PCREL, 34)
- RELOC_NUMBER (R_TILEPRO_IMM16_X0_HI_PCREL, 35)
- RELOC_NUMBER (R_TILEPRO_IMM16_X1_HI_PCREL, 36)
- RELOC_NUMBER (R_TILEPRO_IMM16_X0_HA_PCREL, 37)
- RELOC_NUMBER (R_TILEPRO_IMM16_X1_HA_PCREL, 38)
-
- RELOC_NUMBER (R_TILEPRO_IMM16_X0_GOT, 39)
- RELOC_NUMBER (R_TILEPRO_IMM16_X1_GOT, 40)
- RELOC_NUMBER (R_TILEPRO_IMM16_X0_GOT_LO, 41)
- RELOC_NUMBER (R_TILEPRO_IMM16_X1_GOT_LO, 42)
- RELOC_NUMBER (R_TILEPRO_IMM16_X0_GOT_HI, 43)
- RELOC_NUMBER (R_TILEPRO_IMM16_X1_GOT_HI, 44)
- RELOC_NUMBER (R_TILEPRO_IMM16_X0_GOT_HA, 45)
- RELOC_NUMBER (R_TILEPRO_IMM16_X1_GOT_HA, 46)
-
- RELOC_NUMBER (R_TILEPRO_MMSTART_X0, 47)
- RELOC_NUMBER (R_TILEPRO_MMEND_X0, 48)
- RELOC_NUMBER (R_TILEPRO_MMSTART_X1, 49)
- RELOC_NUMBER (R_TILEPRO_MMEND_X1, 50)
-
- RELOC_NUMBER (R_TILEPRO_SHAMT_X0, 51)
- RELOC_NUMBER (R_TILEPRO_SHAMT_X1, 52)
- RELOC_NUMBER (R_TILEPRO_SHAMT_Y0, 53)
- RELOC_NUMBER (R_TILEPRO_SHAMT_Y1, 54)
-
- RELOC_NUMBER (R_TILEPRO_DEST_IMM8_X1, 55)
-
- /* Relocs 56-59 are currently not defined. */
-
- RELOC_NUMBER (R_TILEPRO_TLS_GD_CALL, 60)
- RELOC_NUMBER (R_TILEPRO_IMM8_X0_TLS_GD_ADD, 61)
- RELOC_NUMBER (R_TILEPRO_IMM8_X1_TLS_GD_ADD, 62)
- RELOC_NUMBER (R_TILEPRO_IMM8_Y0_TLS_GD_ADD, 63)
- RELOC_NUMBER (R_TILEPRO_IMM8_Y1_TLS_GD_ADD, 64)
- RELOC_NUMBER (R_TILEPRO_TLS_IE_LOAD, 65)
-
- RELOC_NUMBER (R_TILEPRO_IMM16_X0_TLS_GD, 66)
- RELOC_NUMBER (R_TILEPRO_IMM16_X1_TLS_GD, 67)
- RELOC_NUMBER (R_TILEPRO_IMM16_X0_TLS_GD_LO, 68)
- RELOC_NUMBER (R_TILEPRO_IMM16_X1_TLS_GD_LO, 69)
- RELOC_NUMBER (R_TILEPRO_IMM16_X0_TLS_GD_HI, 70)
- RELOC_NUMBER (R_TILEPRO_IMM16_X1_TLS_GD_HI, 71)
- RELOC_NUMBER (R_TILEPRO_IMM16_X0_TLS_GD_HA, 72)
- RELOC_NUMBER (R_TILEPRO_IMM16_X1_TLS_GD_HA, 73)
-
- RELOC_NUMBER (R_TILEPRO_IMM16_X0_TLS_IE, 74)
- RELOC_NUMBER (R_TILEPRO_IMM16_X1_TLS_IE, 75)
- RELOC_NUMBER (R_TILEPRO_IMM16_X0_TLS_IE_LO, 76)
- RELOC_NUMBER (R_TILEPRO_IMM16_X1_TLS_IE_LO, 77)
- RELOC_NUMBER (R_TILEPRO_IMM16_X0_TLS_IE_HI, 78)
- RELOC_NUMBER (R_TILEPRO_IMM16_X1_TLS_IE_HI, 79)
- RELOC_NUMBER (R_TILEPRO_IMM16_X0_TLS_IE_HA, 80)
- RELOC_NUMBER (R_TILEPRO_IMM16_X1_TLS_IE_HA, 81)
-
- RELOC_NUMBER (R_TILEPRO_TLS_DTPMOD32, 82)
- RELOC_NUMBER (R_TILEPRO_TLS_DTPOFF32, 83)
- RELOC_NUMBER (R_TILEPRO_TLS_TPOFF32, 84)
-
- RELOC_NUMBER (R_TILEPRO_IMM16_X0_TLS_LE, 85)
- RELOC_NUMBER (R_TILEPRO_IMM16_X1_TLS_LE, 86)
- RELOC_NUMBER (R_TILEPRO_IMM16_X0_TLS_LE_LO, 87)
- RELOC_NUMBER (R_TILEPRO_IMM16_X1_TLS_LE_LO, 88)
- RELOC_NUMBER (R_TILEPRO_IMM16_X0_TLS_LE_HI, 89)
- RELOC_NUMBER (R_TILEPRO_IMM16_X1_TLS_LE_HI, 90)
- RELOC_NUMBER (R_TILEPRO_IMM16_X0_TLS_LE_HA, 91)
- RELOC_NUMBER (R_TILEPRO_IMM16_X1_TLS_LE_HA, 92)
-
-/* These are GNU extensions to enable C++ vtable garbage collection. */
- RELOC_NUMBER (R_TILEPRO_GNU_VTINHERIT, 128)
- RELOC_NUMBER (R_TILEPRO_GNU_VTENTRY, 129)
-END_RELOC_NUMBERS (R_TILEPRO_max)
-
-#endif /* _ELF_TILEPRO_H */
diff --git a/include/elf/v850.h b/include/elf/v850.h
deleted file mode 100644
index 5a0882029..000000000
--- a/include/elf/v850.h
+++ /dev/null
@@ -1,283 +0,0 @@
-/* V850 ELF support for BFD.
- Copyright 1997-2013 Free Software Foundation, Inc.
- Created by Michael Meissner, Cygnus Support <meissner@cygnus.com>
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-/* This file holds definitions specific to the MIPS ELF ABI. Note
- that most of this is not actually implemented by BFD. */
-
-#ifndef _ELF_V850_H
-#define _ELF_V850_H
-
-/* Processor specific flags for the ELF header e_flags field. */
-
-/* Four bit V850 architecture field. */
-#define EF_V850_ARCH 0xf0000000
-
-/* v850 code. */
-#define E_V850_ARCH 0x00000000
-
-/* v850e code. */
-#define E_V850E_ARCH 0x10000000
-
-/* v850e1 code. */
-#define E_V850E1_ARCH 0x20000000
-
-/* v850e2 code. */
-#define E_V850E2_ARCH 0x30000000
-
-/* v850e2v3 code. */
-#define E_V850E2V3_ARCH 0x40000000
-
-/* v850e3v5 code. */
-#define E_V850E3V5_ARCH 0x60000000
-
-/* Flags for the st_other field. */
-#define V850_OTHER_SDA 0x10 /* Symbol had SDA relocations. */
-#define V850_OTHER_ZDA 0x20 /* Symbol had ZDA relocations. */
-#define V850_OTHER_TDA 0x40 /* Symbol had TDA relocations. */
-#define V850_OTHER_ERROR 0x80 /* Symbol had an error reported. */
-
-/* V850 relocations. */
-#include "elf/reloc-macros.h"
-
-START_RELOC_NUMBERS (v850_reloc_type)
- RELOC_NUMBER (R_V850_NONE, 0)
- RELOC_NUMBER (R_V850_9_PCREL, 1)
- RELOC_NUMBER (R_V850_22_PCREL, 2)
- RELOC_NUMBER (R_V850_HI16_S, 3)
- RELOC_NUMBER (R_V850_HI16, 4)
- RELOC_NUMBER (R_V850_LO16, 5)
- RELOC_NUMBER (R_V850_ABS32, 6)
- RELOC_NUMBER (R_V850_16, 7)
- RELOC_NUMBER (R_V850_8, 8)
- RELOC_NUMBER( R_V850_SDA_16_16_OFFSET, 9) /* For ld.b, st.b, set1, clr1, not1, tst1, movea, movhi */
- RELOC_NUMBER( R_V850_SDA_15_16_OFFSET, 10) /* For ld.w, ld.h, ld.hu, st.w, st.h */
- RELOC_NUMBER( R_V850_ZDA_16_16_OFFSET, 11) /* For ld.b, st.b, set1, clr1, not1, tst1, movea, movhi */
- RELOC_NUMBER( R_V850_ZDA_15_16_OFFSET, 12) /* For ld.w, ld.h, ld.hu, st.w, st.h */
- RELOC_NUMBER( R_V850_TDA_6_8_OFFSET, 13) /* For sst.w, sld.w */
- RELOC_NUMBER( R_V850_TDA_7_8_OFFSET, 14) /* For sst.h, sld.h */
- RELOC_NUMBER( R_V850_TDA_7_7_OFFSET, 15) /* For sst.b, sld.b */
- RELOC_NUMBER( R_V850_TDA_16_16_OFFSET, 16) /* For set1, clr1, not1, tst1, movea, movhi */
- RELOC_NUMBER( R_V850_TDA_4_5_OFFSET, 17) /* For sld.hu */
- RELOC_NUMBER( R_V850_TDA_4_4_OFFSET, 18) /* For sld.bu */
- RELOC_NUMBER( R_V850_SDA_16_16_SPLIT_OFFSET, 19) /* For ld.bu */
- RELOC_NUMBER( R_V850_ZDA_16_16_SPLIT_OFFSET, 20) /* For ld.bu */
- RELOC_NUMBER( R_V850_CALLT_6_7_OFFSET, 21) /* For callt */
- RELOC_NUMBER( R_V850_CALLT_16_16_OFFSET, 22) /* For callt */
- RELOC_NUMBER (R_V850_GNU_VTINHERIT, 23)
- RELOC_NUMBER (R_V850_GNU_VTENTRY, 24)
- RELOC_NUMBER (R_V850_LONGCALL, 25)
- RELOC_NUMBER (R_V850_LONGJUMP, 26)
- RELOC_NUMBER (R_V850_ALIGN, 27)
- RELOC_NUMBER (R_V850_REL32, 28)
- RELOC_NUMBER (R_V850_LO16_SPLIT_OFFSET, 29) /* For ld.bu */
- RELOC_NUMBER (R_V850_16_PCREL, 30) /* For loop */
- RELOC_NUMBER (R_V850_17_PCREL, 31) /* For br */
- RELOC_NUMBER (R_V850_23, 32) /* For 23bit ld.[w,h,hu,b,bu],st.[w,h,b] */
- RELOC_NUMBER (R_V850_32_PCREL, 33) /* For jr32, jarl32 */
- RELOC_NUMBER (R_V850_32_ABS, 34) /* For jmp32 */
- RELOC_NUMBER (R_V850_16_SPLIT_OFFSET, 35) /* For ld.bu */
- RELOC_NUMBER (R_V850_16_S1, 36) /* For ld.w, ld.h st.w st.h */
- RELOC_NUMBER (R_V850_LO16_S1, 37) /* For ld.w, ld.h st.w st.h */
- RELOC_NUMBER (R_V850_CALLT_15_16_OFFSET, 38) /* For ld.w, ld.h, ld.hu, st.w, st.h */
- RELOC_NUMBER (R_V850_32_GOTPCREL, 39) /* GLOBAL_OFFSET_TABLE from pc */
- RELOC_NUMBER (R_V850_16_GOT, 40) /* GOT ENTRY from gp */
- RELOC_NUMBER (R_V850_32_GOT, 41)
- RELOC_NUMBER (R_V850_22_PLT, 42) /* For jr */
- RELOC_NUMBER (R_V850_32_PLT, 43) /* For jr32 */
- RELOC_NUMBER (R_V850_COPY, 44)
- RELOC_NUMBER (R_V850_GLOB_DAT, 45)
- RELOC_NUMBER (R_V850_JMP_SLOT, 46)
- RELOC_NUMBER (R_V850_RELATIVE, 47)
- RELOC_NUMBER (R_V850_16_GOTOFF, 48) /* From gp */
- RELOC_NUMBER (R_V850_32_GOTOFF, 49)
- RELOC_NUMBER (R_V850_CODE, 50)
- RELOC_NUMBER (R_V850_DATA, 51) /* For loop */
-
-END_RELOC_NUMBERS (R_V850_max)
-
-
-/* Processor specific section indices. These sections do not actually
- exist. Symbols with a st_shndx field corresponding to one of these
- values have a special meaning. */
-
-/* Small data area common symbol. */
-#define SHN_V850_SCOMMON SHN_LORESERVE
-
-/* Tiny data area common symbol. */
-#define SHN_V850_TCOMMON (SHN_LORESERVE + 1)
-
-/* Zero data area common symbol. */
-#define SHN_V850_ZCOMMON (SHN_LORESERVE + 2)
-
-
-/* Processor specific section types. */
-
-/* Section contains the .scommon data. */
-#define SHT_V850_SCOMMON 0x70000000
-
-/* Section contains the .scommon data. */
-#define SHT_V850_TCOMMON 0x70000001
-
-/* Section contains the .scommon data. */
-#define SHT_V850_ZCOMMON 0x70000002
-
-/* Processor specific section flags. */
-
-/* This section must be in the small data area (pointed to by GP). */
-#define SHF_V850_GPREL 0x10000000
-
-/* This section must be in the tiny data area (pointed to by EP). */
-#define SHF_V850_EPREL 0x20000000
-
-/* This section must be in the zero data area (pointed to by R0). */
-#define SHF_V850_R0REL 0x40000000
-
-/* Alternative versions of the above definitions, as specified by the RH850 ABI. */
-
-#define EF_RH850_ABI 0xF0000000
-
-#define EF_V800_850E3 0x00100000
-
-#define EF_RH850_FPU_DOUBLE 0x00000001 /* sizeof(double) == 8. */
-#define EF_RH850_FPU_SINGLE 0x00000002 /* sizeof(double) == 4. */
-#define EF_RH850_SIMD 0x00000004
-#define EF_RH850_CACHE 0x00000008
-#define EF_RH850_MMU 0x00000010
-#define EF_RH850_REGMODE22 0x00000020 /* Registers r15-r24 (inclusive) are not used. */
-#define EF_RH850_REGMODE32 0x00000040
-#define EF_RH850_DATA_ALIGN8 0x00000080 /* 8-byte alignment supported. */
-#define EF_RH850_GP_FIX 0x00000100 /* r4 is fixed. */
-#define EF_RH850_GP_NOFIX 0x00000200 /* r4 is callee save. */
-#define EF_RH850_EP_FIX 0x00000400 /* r30 is fixed. */
-#define EF_RH850_EP_NOFIX 0x00000800 /* r30 is callee save. */
-#define EF_RH850_TP_FIX 0x00001000 /* r5 is fixed. */
-#define EF_RH850_TP_NOFIX 0x00002000 /* r5 is callee save. */
-#define EF_RH850_REG2_RESERVE 0x00004000 /* r2 is fixed. */
-#define EF_RH850_REG2_NORESERVE 0x00008000 /* r2 is callee saved. */
-
-#define SHT_RNESAS_IOP SHT_LOUSER /* Used by Renesas linker. */
-
-#define SHF_RENESAS_ABS 0x80000000 /* Absolute section. */
-#define SHF_GHS_ABS 0x00000400 /* Use unknown. */
-
-#define STT_RENESAS_ENTRY 14 /* Set for functions called at reset time. */
-
-START_RELOC_NUMBERS (v800_reloc_type)
-
- RELOC_NUMBER (R_V800_NONE, 0x00)
- RELOC_NUMBER (R_V810_NONE, 0x30)
- RELOC_NUMBER (R_V810_BYTE, 0x31)
- RELOC_NUMBER (R_V810_HWORD, 0x32)
- RELOC_NUMBER (R_V810_WORD, 0x33)
- RELOC_NUMBER (R_V810_WLO, 0x34)
- RELOC_NUMBER (R_V810_WHI, 0x35)
- RELOC_NUMBER (R_V810_WHI1, 0x36)
- RELOC_NUMBER (R_V810_GPBYTE, 0x37)
- RELOC_NUMBER (R_V810_GPHWORD, 0x38)
- RELOC_NUMBER (R_V810_GPWORD, 0x39)
- RELOC_NUMBER (R_V810_GPWLO, 0x3a)
- RELOC_NUMBER (R_V810_GPWHI, 0x3b)
- RELOC_NUMBER (R_V810_GPWHI1, 0x3c)
- RELOC_NUMBER (R_V850_HWLO, 0x3d)
- FAKE_RELOC (R_V810_reserved1, 0x3e)
- RELOC_NUMBER (R_V850_EP7BIT, 0x3f)
- RELOC_NUMBER (R_V850_EPHBYTE, 0x40)
- RELOC_NUMBER (R_V850_EPWBYTE, 0x41)
- RELOC_NUMBER (R_V850_REGHWLO, 0x42)
- FAKE_RELOC (R_V810_reserved2, 0x43)
- RELOC_NUMBER (R_V850_GPHWLO, 0x44)
- FAKE_RELOC (R_V810_reserved3, 0x45)
- RELOC_NUMBER (R_V850_PCR22, 0x46)
- RELOC_NUMBER (R_V850_BLO, 0x47)
- RELOC_NUMBER (R_V850_EP4BIT, 0x48)
- RELOC_NUMBER (R_V850_EP5BIT, 0x49)
- RELOC_NUMBER (R_V850_REGBLO, 0x4a)
- RELOC_NUMBER (R_V850_GPBLO, 0x4b)
- RELOC_NUMBER (R_V810_WLO_1, 0x4c)
- RELOC_NUMBER (R_V810_GPWLO_1, 0x4d)
- RELOC_NUMBER (R_V850_BLO_1, 0x4e)
- RELOC_NUMBER (R_V850_HWLO_1, 0x4f)
- FAKE_RELOC (R_V810_reserved4, 0x50)
- RELOC_NUMBER (R_V850_GPBLO_1, 0x51)
- RELOC_NUMBER (R_V850_GPHWLO_1, 0x52)
- FAKE_RELOC (R_V810_reserved5, 0x53)
- RELOC_NUMBER (R_V850_EPBLO, 0x54)
- RELOC_NUMBER (R_V850_EPHWLO, 0x55)
- FAKE_RELOC (R_V810_reserved6, 0x56)
- RELOC_NUMBER (R_V850_EPWLO_N, 0x57)
- RELOC_NUMBER (R_V850_PC32, 0x58)
- RELOC_NUMBER (R_V850_W23BIT, 0x59)
- RELOC_NUMBER (R_V850_GPW23BIT, 0x5a)
- RELOC_NUMBER (R_V850_EPW23BIT, 0x5b)
- RELOC_NUMBER (R_V850_B23BIT, 0x5c)
- RELOC_NUMBER (R_V850_GPB23BIT, 0x5d)
- RELOC_NUMBER (R_V850_EPB23BIT, 0x5e)
- RELOC_NUMBER (R_V850_PC16U, 0x5f)
- RELOC_NUMBER (R_V850_PC17, 0x60)
- RELOC_NUMBER (R_V850_DW8, 0x61)
- RELOC_NUMBER (R_V850_GPDW8, 0x62)
- RELOC_NUMBER (R_V850_EPDW8, 0x63)
- RELOC_NUMBER (R_V850_PC9, 0x64)
- RELOC_NUMBER (R_V810_REGBYTE, 0x65)
- RELOC_NUMBER (R_V810_REGHWORD, 0x66)
- RELOC_NUMBER (R_V810_REGWORD, 0x67)
- RELOC_NUMBER (R_V810_REGWLO, 0x68)
- RELOC_NUMBER (R_V810_REGWHI, 0x69)
- RELOC_NUMBER (R_V810_REGWHI1, 0x6a)
- RELOC_NUMBER (R_V850_REGW23BIT, 0x6b)
- RELOC_NUMBER (R_V850_REGB23BIT, 0x6c)
- RELOC_NUMBER (R_V850_REGDW8, 0x6d)
- RELOC_NUMBER (R_V810_EPBYTE, 0x6e)
- RELOC_NUMBER (R_V810_EPHWORD, 0x6f)
- RELOC_NUMBER (R_V810_EPWORD, 0x70)
- RELOC_NUMBER (R_V850_WLO23, 0x71)
- RELOC_NUMBER (R_V850_WORD_E, 0x72)
- RELOC_NUMBER (R_V850_REGWORD_E, 0x73)
- RELOC_NUMBER (R_V850_WORD, 0x74)
- RELOC_NUMBER (R_V850_GPWORD, 0x75)
- RELOC_NUMBER (R_V850_REGWORD, 0x76)
- RELOC_NUMBER (R_V850_EPWORD, 0x77)
- RELOC_NUMBER (R_V810_TPBYTE, 0x78)
- RELOC_NUMBER (R_V810_TPHWORD, 0x79)
- RELOC_NUMBER (R_V810_TPWORD, 0x7a)
- RELOC_NUMBER (R_V810_TPWLO, 0x7b)
- RELOC_NUMBER (R_V810_TPWHI, 0x7c)
- RELOC_NUMBER (R_V810_TPWHI1, 0x7d)
- RELOC_NUMBER (R_V850_TPHWLO, 0x7e)
- RELOC_NUMBER (R_V850_TPBLO, 0x7f)
- RELOC_NUMBER (R_V810_TPWLO_1, 0x80)
- RELOC_NUMBER (R_V850_TPBLO_1, 0x81)
- RELOC_NUMBER (R_V850_TPHWLO_1, 0x82)
- RELOC_NUMBER (R_V850_TP23BIT, 0x83)
- RELOC_NUMBER (R_V850_TPW23BIT, 0x84)
- RELOC_NUMBER (R_V850_TPDW8, 0x85)
-
-/* These are defined by the RH850 ABI, but not used. */
- RELOC_NUMBER (R_V810_ABS32, 0xa0)
- RELOC_NUMBER (R_V850_SYM, 0xe0)
- RELOC_NUMBER (R_V850_OPadd, 0xe1)
- RELOC_NUMBER (R_V850_OPsub, 0xe2)
- RELOC_NUMBER (R_V850_OPsctsize, 0xe3)
- RELOC_NUMBER (R_V850_OPscttop, 0xe4)
-
-END_RELOC_NUMBERS (R_V800_max)
-
-#endif /* _ELF_V850_H */
diff --git a/include/elf/vax.h b/include/elf/vax.h
deleted file mode 100644
index e44c48e7b..000000000
--- a/include/elf/vax.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/* VAX ELF support for BFD.
- Copyright (C) 2002, 2010 Free Software Foundation, Inc.
- Contributed by Matt Thomas <matt@3am-software.com>.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _ELF_VAX_H
-#define _ELF_VAX_H
-
-#include "elf/reloc-macros.h"
-
-/* Relocation types. */
-START_RELOC_NUMBERS (elf_vax_reloc_type)
- RELOC_NUMBER (R_VAX_NONE, 0) /* No reloc */
- RELOC_NUMBER (R_VAX_32, 1) /* Direct 32 bit */
- RELOC_NUMBER (R_VAX_16, 2) /* Direct 16 bit */
- RELOC_NUMBER (R_VAX_8, 3) /* Direct 8 bit */
- RELOC_NUMBER (R_VAX_PC32, 4) /* PC relative 32 bit */
- RELOC_NUMBER (R_VAX_PC16, 5) /* PC relative 16 bit */
- RELOC_NUMBER (R_VAX_PC8, 6) /* PC relative 8 bit */
- RELOC_NUMBER (R_VAX_GOT32, 7) /* 32 bit PC relative GOT entry */
- RELOC_NUMBER (R_VAX_PLT32, 13) /* 32 bit PC relative PLT address */
- RELOC_NUMBER (R_VAX_COPY, 19) /* Copy symbol at runtime */
- RELOC_NUMBER (R_VAX_GLOB_DAT, 20) /* Create GOT entry */
- RELOC_NUMBER (R_VAX_JMP_SLOT, 21) /* Create PLT entry */
- RELOC_NUMBER (R_VAX_RELATIVE, 22) /* Adjust by program base */
- /* These are GNU extensions to enable C++ vtable garbage collection. */
- RELOC_NUMBER (R_VAX_GNU_VTINHERIT, 23)
- RELOC_NUMBER (R_VAX_GNU_VTENTRY, 24)
-END_RELOC_NUMBERS (R_VAX_max)
-
-/* Processor specific flags for the ELF header e_flags field. */
-#define EF_VAX_NONPIC 0x0001 /* Object contains non-PIC code */
-#define EF_VAX_DFLOAT 0x0100 /* Object contains D-Float insn. */
-#define EF_VAX_GFLOAT 0x0200 /* Object contains G-Float insn. */
-
-#endif
diff --git a/include/elf/vxworks.h b/include/elf/vxworks.h
deleted file mode 100644
index f25f01295..000000000
--- a/include/elf/vxworks.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/* VxWorks ELF support for BFD.
- Copyright 2007, 2010
- Free Software Foundation, Inc.
-
- Contributed by Nathan Sidwell <nathan@codesourcery.com>
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef _ELF_VXWORKS_H
-#define _ELF_VXWORKS_H
-
-#define DT_VX_WRS_TLS_DATA_START 0x60000010
-#define DT_VX_WRS_TLS_DATA_SIZE 0x60000011
-#define DT_VX_WRS_TLS_DATA_ALIGN 0x60000015
-#define DT_VX_WRS_TLS_VARS_START 0x60000012
-#define DT_VX_WRS_TLS_VARS_SIZE 0x60000013
-
-#endif /* _ELF_VXWORKS_H */
diff --git a/include/elf/x86-64.h b/include/elf/x86-64.h
deleted file mode 100644
index 0ce92cd54..000000000
--- a/include/elf/x86-64.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/* x86_64 ELF support for BFD.
- Copyright (C) 2000, 2001, 2002, 2004, 2005, 2006, 2008, 2009, 2010
- Free Software Foundation, Inc.
- Contributed by Jan Hubicka <jh@suse.cz>
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _ELF_X86_64_H
-#define _ELF_X86_64_H
-
-#include "elf/reloc-macros.h"
-
-START_RELOC_NUMBERS (elf_x86_64_reloc_type)
- RELOC_NUMBER (R_X86_64_NONE, 0) /* No reloc */
- RELOC_NUMBER (R_X86_64_64, 1) /* Direct 64 bit */
- RELOC_NUMBER (R_X86_64_PC32, 2) /* PC relative 32 bit signed */
- RELOC_NUMBER (R_X86_64_GOT32, 3) /* 32 bit GOT entry */
- RELOC_NUMBER (R_X86_64_PLT32, 4) /* 32 bit PLT address */
- RELOC_NUMBER (R_X86_64_COPY, 5) /* Copy symbol at runtime */
- RELOC_NUMBER (R_X86_64_GLOB_DAT, 6) /* Create GOT entry */
- RELOC_NUMBER (R_X86_64_JUMP_SLOT,7) /* Create PLT entry */
- RELOC_NUMBER (R_X86_64_RELATIVE, 8) /* Adjust by program base */
- RELOC_NUMBER (R_X86_64_GOTPCREL, 9) /* 32 bit signed pc relative
- offset to GOT entry */
- RELOC_NUMBER (R_X86_64_32, 10) /* Direct 32 bit zero extended */
- RELOC_NUMBER (R_X86_64_32S, 11) /* Direct 32 bit sign extended */
- RELOC_NUMBER (R_X86_64_16, 12) /* Direct 16 bit zero extended */
- RELOC_NUMBER (R_X86_64_PC16, 13) /* 16 bit sign extended pc relative*/
- RELOC_NUMBER (R_X86_64_8, 14) /* Direct 8 bit sign extended */
- RELOC_NUMBER (R_X86_64_PC8, 15) /* 8 bit sign extended pc relative*/
- RELOC_NUMBER (R_X86_64_DTPMOD64, 16) /* ID of module containing symbol */
- RELOC_NUMBER (R_X86_64_DTPOFF64, 17) /* Offset in TLS block */
- RELOC_NUMBER (R_X86_64_TPOFF64, 18) /* Offset in initial TLS block */
- RELOC_NUMBER (R_X86_64_TLSGD, 19) /* PC relative offset to GD GOT block */
- RELOC_NUMBER (R_X86_64_TLSLD, 20) /* PC relative offset to LD GOT block */
- RELOC_NUMBER (R_X86_64_DTPOFF32, 21) /* Offset in TLS block */
- RELOC_NUMBER (R_X86_64_GOTTPOFF, 22) /* PC relative offset to IE GOT entry */
- RELOC_NUMBER (R_X86_64_TPOFF32, 23) /* Offset in initial TLS block */
- RELOC_NUMBER (R_X86_64_PC64, 24) /* PC relative 64 bit */
- RELOC_NUMBER (R_X86_64_GOTOFF64, 25) /* 64 bit offset to GOT */
- RELOC_NUMBER (R_X86_64_GOTPC32, 26) /* 32 bit signed pc relative
- offset to GOT */
- RELOC_NUMBER (R_X86_64_GOT64, 27) /* 64 bit GOT entry offset */
- RELOC_NUMBER (R_X86_64_GOTPCREL64, 28) /* 64 bit signed pc relative
- offset to GOT entry */
- RELOC_NUMBER (R_X86_64_GOTPC64, 29) /* 64 bit signed pc relative
- offset to GOT */
- RELOC_NUMBER (R_X86_64_GOTPLT64, 30) /* like GOT64, but indicates
- that PLT entry is needed */
- RELOC_NUMBER (R_X86_64_PLTOFF64, 31) /* 64 bit GOT relative offset
- to PLT entry */
- RELOC_NUMBER (R_X86_64_SIZE32, 32) /* 32-bit symbol size */
- RELOC_NUMBER (R_X86_64_SIZE64, 33) /* 64-bit symbol size */
- RELOC_NUMBER (R_X86_64_GOTPC32_TLSDESC, 34)
- /* 32 bit signed pc relative
- offset to TLS descriptor
- in the GOT. */
- RELOC_NUMBER (R_X86_64_TLSDESC_CALL, 35) /* Relaxable call through TLS
- descriptor. */
- RELOC_NUMBER (R_X86_64_TLSDESC, 36) /* 2x64-bit TLS descriptor. */
- RELOC_NUMBER (R_X86_64_IRELATIVE, 37) /* Adjust indirectly by program base */
- RELOC_NUMBER (R_X86_64_RELATIVE64, 38) /* 64bit adjust by program base */
- RELOC_NUMBER (R_X86_64_GNU_VTINHERIT, 250) /* GNU C++ hack */
- RELOC_NUMBER (R_X86_64_GNU_VTENTRY, 251) /* GNU C++ hack */
-END_RELOC_NUMBERS (R_X86_64_max)
-
-/* Processor specific section types. */
-
-#define SHT_X86_64_UNWIND 0x70000001 /* unwind information */
-
-/* Like SHN_COMMON but the symbol will be allocated in the .lbss
- section. */
-#define SHN_X86_64_LCOMMON (SHN_LORESERVE + 2)
-
-#define SHF_X86_64_LARGE 0x10000000
-#endif
diff --git a/include/elf/xc16x.h b/include/elf/xc16x.h
deleted file mode 100644
index b46d90352..000000000
--- a/include/elf/xc16x.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/* Infineon XC16X ELF support for BFD.
- Copyright 2006, 2010 Free Software Foundation, Inc.
- Contributed by KPIT Cummins Infosystems
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _ELF_XC16X_H
-#define _ELF_XC16X_H
-
-#include "elf/reloc-macros.h"
-
-/* Relocations. */
-START_RELOC_NUMBERS (elf_xc16x_reloc_type)
- RELOC_NUMBER (R_XC16X_NONE, 0)
- RELOC_NUMBER (R_XC16X_ABS_8, 1)
- RELOC_NUMBER (R_XC16X_ABS_16, 2)
- RELOC_NUMBER (R_XC16X_ABS_32, 3)
- RELOC_NUMBER (R_XC16X_8_PCREL, 4)
- RELOC_NUMBER (R_XC16X_PAG, 5)
- RELOC_NUMBER (R_XC16X_POF, 6)
- RELOC_NUMBER (R_XC16X_SEG, 7)
- RELOC_NUMBER (R_XC16X_SOF, 8)
-
-END_RELOC_NUMBERS (R_XC16X_max)
-
-#endif /* _ELF_XC16X_H */
diff --git a/include/elf/xgate.h b/include/elf/xgate.h
deleted file mode 100644
index 33286a8d0..000000000
--- a/include/elf/xgate.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/* XGATE ELF support for BFD.
- Copyright 2010, 2011, 2012 Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _ELF_XGATE_H
-#define _ELF_XGATE_H
-
-#include "elf/reloc-macros.h"
-
-/* Relocation types. */
-START_RELOC_NUMBERS (elf_xgate_reloc_type)
- RELOC_NUMBER (R_XGATE_NONE, 0)
- RELOC_NUMBER (R_XGATE_8, 1)
- RELOC_NUMBER (R_XGATE_PCREL_8, 2)
- RELOC_NUMBER (R_XGATE_16, 3)
- RELOC_NUMBER (R_XGATE_32, 4)
- RELOC_NUMBER (R_XGATE_PCREL_16, 5)
- /* These are GNU extensions to enable C++ vtable garbage collection. */
- RELOC_NUMBER (R_XGATE_GNU_VTINHERIT, 6)
- RELOC_NUMBER (R_XGATE_GNU_VTENTRY, 7)
-
- RELOC_NUMBER (R_XGATE_24, 8)
- RELOC_NUMBER (R_XGATE_LO16, 9)
- RELOC_NUMBER (R_XGATE_GPAGE, 10)
- RELOC_NUMBER (R_XGATE_PCREL_9, 11)
- RELOC_NUMBER (R_XGATE_PCREL_10, 12)
- RELOC_NUMBER (R_XGATE_IMM8_LO, 13)
- RELOC_NUMBER (R_XGATE_IMM8_HI, 14)
- RELOC_NUMBER (R_XGATE_IMM3, 15)
- RELOC_NUMBER (R_XGATE_IMM4, 16)
- RELOC_NUMBER (R_XGATE_IMM5, 17)
-
- /* GNU extension for linker relaxation.
- Mark beginning of a jump instruction (any form). */
- RELOC_NUMBER (R_XGATE_RL_JUMP, 18)
-
- /* Mark beginning of Gcc relaxation group instruction. */
- RELOC_NUMBER (R_XGATE_RL_GROUP, 19)
-END_RELOC_NUMBERS (R_XGATE_max)
-
-/* Processor specific flags for the ELF header e_flags field. */
-
-/* ABI identification. */
-#define EF_XGATE_ABI 0x00000000F
-
-/* Integers are 32-bit long. */
-#define E_XGATE_I32 0x000000001
-
-/* Doubles are 64-bit long. */
-#define E_XGATE_F64 0x000000002
-
-#define EF_XGATE_MACH_MASK 0xF0
-
-#define EF_XGATE_MACH 0x80 /* XGATE microcontroller. */
-
-#define E_M68HCS12X_GLOBAL 0x100
-
-/* Identify interrupt handlers. This is used by the debugger to
- correctly compute the stack frame. */
-#define STO_XGATE_INTERRUPT 0x40
-
-#endif
diff --git a/include/elf/xstormy16.h b/include/elf/xstormy16.h
deleted file mode 100644
index 0ae0def86..000000000
--- a/include/elf/xstormy16.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/* XSTORMY16 ELF support for BFD.
- Copyright (C) 2001, 2002, 2010 Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _ELF_XSTORMY16_H
-#define _ELF_XSTORMY16_H
-
-#include "elf/reloc-macros.h"
-
-/* Relocations. */
-START_RELOC_NUMBERS (elf_xstormy16_reloc_type)
- RELOC_NUMBER (R_XSTORMY16_NONE, 0)
-
- RELOC_NUMBER (R_XSTORMY16_32, 1)
- RELOC_NUMBER (R_XSTORMY16_16, 2)
- RELOC_NUMBER (R_XSTORMY16_8, 3)
- RELOC_NUMBER (R_XSTORMY16_PC32, 4)
- RELOC_NUMBER (R_XSTORMY16_PC16, 5)
- RELOC_NUMBER (R_XSTORMY16_PC8, 6)
-
- RELOC_NUMBER (R_XSTORMY16_REL_12, 7)
- RELOC_NUMBER (R_XSTORMY16_24, 8)
- RELOC_NUMBER (R_XSTORMY16_FPTR16, 9)
-
- RELOC_NUMBER (R_XSTORMY16_LO16, 10)
- RELOC_NUMBER (R_XSTORMY16_HI16, 11)
- RELOC_NUMBER (R_XSTORMY16_12, 12)
-
- RELOC_NUMBER (R_XSTORMY16_GNU_VTINHERIT, 128)
- RELOC_NUMBER (R_XSTORMY16_GNU_VTENTRY, 129)
-END_RELOC_NUMBERS (R_XSTORMY16_max)
-
-/* Define the data & instruction memory discriminator. In a linked
- executable, an symbol should be deemed to point to an instruction
- if ((address & XSTORMY16_INSN_MASK) == XSTORMY16_INSN_VALUE), and similarly
- for the data space. See also `ld/emulparams/elf32xstormy16.sh'. */
-#define XSTORMY16_DATA_MASK 0xffc00000
-#define XSTORMY16_DATA_VALUE 0x00000000
-#define XSTORMY16_INSN_MASK 0xffc00000
-#define XSTORMY16_INSN_VALUE 0x00400000
-
-#endif /* _ELF_XSTORMY16_H */
diff --git a/include/elf/xtensa.h b/include/elf/xtensa.h
deleted file mode 100644
index 0d35f7abc..000000000
--- a/include/elf/xtensa.h
+++ /dev/null
@@ -1,208 +0,0 @@
-/* Xtensa ELF support for BFD.
- Copyright 2003, 2004, 2007, 2008, 2010 Free Software Foundation, Inc.
- Contributed by Bob Wilson (bwilson@tensilica.com) at Tensilica.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-/* This file holds definitions specific to the Xtensa ELF ABI. */
-
-#ifndef _ELF_XTENSA_H
-#define _ELF_XTENSA_H
-
-#include "elf/reloc-macros.h"
-
-/* Relocations. */
-START_RELOC_NUMBERS (elf_xtensa_reloc_type)
- RELOC_NUMBER (R_XTENSA_NONE, 0)
- RELOC_NUMBER (R_XTENSA_32, 1)
- RELOC_NUMBER (R_XTENSA_RTLD, 2)
- RELOC_NUMBER (R_XTENSA_GLOB_DAT, 3)
- RELOC_NUMBER (R_XTENSA_JMP_SLOT, 4)
- RELOC_NUMBER (R_XTENSA_RELATIVE, 5)
- RELOC_NUMBER (R_XTENSA_PLT, 6)
- RELOC_NUMBER (R_XTENSA_OP0, 8)
- RELOC_NUMBER (R_XTENSA_OP1, 9)
- RELOC_NUMBER (R_XTENSA_OP2, 10)
- RELOC_NUMBER (R_XTENSA_ASM_EXPAND, 11)
- RELOC_NUMBER (R_XTENSA_ASM_SIMPLIFY, 12)
- RELOC_NUMBER (R_XTENSA_32_PCREL, 14)
- RELOC_NUMBER (R_XTENSA_GNU_VTINHERIT, 15)
- RELOC_NUMBER (R_XTENSA_GNU_VTENTRY, 16)
- RELOC_NUMBER (R_XTENSA_DIFF8, 17)
- RELOC_NUMBER (R_XTENSA_DIFF16, 18)
- RELOC_NUMBER (R_XTENSA_DIFF32, 19)
- RELOC_NUMBER (R_XTENSA_SLOT0_OP, 20)
- RELOC_NUMBER (R_XTENSA_SLOT1_OP, 21)
- RELOC_NUMBER (R_XTENSA_SLOT2_OP, 22)
- RELOC_NUMBER (R_XTENSA_SLOT3_OP, 23)
- RELOC_NUMBER (R_XTENSA_SLOT4_OP, 24)
- RELOC_NUMBER (R_XTENSA_SLOT5_OP, 25)
- RELOC_NUMBER (R_XTENSA_SLOT6_OP, 26)
- RELOC_NUMBER (R_XTENSA_SLOT7_OP, 27)
- RELOC_NUMBER (R_XTENSA_SLOT8_OP, 28)
- RELOC_NUMBER (R_XTENSA_SLOT9_OP, 29)
- RELOC_NUMBER (R_XTENSA_SLOT10_OP, 30)
- RELOC_NUMBER (R_XTENSA_SLOT11_OP, 31)
- RELOC_NUMBER (R_XTENSA_SLOT12_OP, 32)
- RELOC_NUMBER (R_XTENSA_SLOT13_OP, 33)
- RELOC_NUMBER (R_XTENSA_SLOT14_OP, 34)
- RELOC_NUMBER (R_XTENSA_SLOT0_ALT, 35)
- RELOC_NUMBER (R_XTENSA_SLOT1_ALT, 36)
- RELOC_NUMBER (R_XTENSA_SLOT2_ALT, 37)
- RELOC_NUMBER (R_XTENSA_SLOT3_ALT, 38)
- RELOC_NUMBER (R_XTENSA_SLOT4_ALT, 39)
- RELOC_NUMBER (R_XTENSA_SLOT5_ALT, 40)
- RELOC_NUMBER (R_XTENSA_SLOT6_ALT, 41)
- RELOC_NUMBER (R_XTENSA_SLOT7_ALT, 42)
- RELOC_NUMBER (R_XTENSA_SLOT8_ALT, 43)
- RELOC_NUMBER (R_XTENSA_SLOT9_ALT, 44)
- RELOC_NUMBER (R_XTENSA_SLOT10_ALT, 45)
- RELOC_NUMBER (R_XTENSA_SLOT11_ALT, 46)
- RELOC_NUMBER (R_XTENSA_SLOT12_ALT, 47)
- RELOC_NUMBER (R_XTENSA_SLOT13_ALT, 48)
- RELOC_NUMBER (R_XTENSA_SLOT14_ALT, 49)
- RELOC_NUMBER (R_XTENSA_TLSDESC_FN, 50)
- RELOC_NUMBER (R_XTENSA_TLSDESC_ARG, 51)
- RELOC_NUMBER (R_XTENSA_TLS_DTPOFF, 52)
- RELOC_NUMBER (R_XTENSA_TLS_TPOFF, 53)
- RELOC_NUMBER (R_XTENSA_TLS_FUNC, 54)
- RELOC_NUMBER (R_XTENSA_TLS_ARG, 55)
- RELOC_NUMBER (R_XTENSA_TLS_CALL, 56)
-END_RELOC_NUMBERS (R_XTENSA_max)
-
-/* Processor-specific flags for the ELF header e_flags field. */
-
-/* Four-bit Xtensa machine type field. */
-#define EF_XTENSA_MACH 0x0000000f
-
-/* Various CPU types. */
-#define E_XTENSA_MACH 0x00000000
-
-/* Leave bits 0xf0 alone in case we ever have more than 16 cpu types.
- Highly unlikely, but what the heck. */
-
-#define EF_XTENSA_XT_INSN 0x00000100
-#define EF_XTENSA_XT_LIT 0x00000200
-
-
-/* Processor-specific dynamic array tags. */
-
-/* Offset of the table that records the GOT location(s). */
-#define DT_XTENSA_GOT_LOC_OFF 0x70000000
-
-/* Number of entries in the GOT location table. */
-#define DT_XTENSA_GOT_LOC_SZ 0x70000001
-
-
-/* Definitions for instruction and literal property tables. The
- tables for ".gnu.linkonce.*" sections are placed in the following
- sections:
-
- instruction tables: .gnu.linkonce.x.*
- literal tables: .gnu.linkonce.p.*
-*/
-
-#define XTENSA_INSN_SEC_NAME ".xt.insn"
-#define XTENSA_LIT_SEC_NAME ".xt.lit"
-#define XTENSA_PROP_SEC_NAME ".xt.prop"
-
-typedef struct property_table_entry_t
-{
- bfd_vma address;
- bfd_vma size;
- flagword flags;
-} property_table_entry;
-
-/* Flags in the property tables to specify whether blocks of memory are
- literals, instructions, data, or unreachable. For instructions,
- blocks that begin loop targets and branch targets are designated.
- Blocks that do not allow density instructions, instruction reordering
- or transformation are also specified. Finally, for branch targets,
- branch target alignment priority is included. Alignment of the next
- block is specified in the current block and the size of the current
- block does not include any fill required to align to the next
- block. */
-
-#define XTENSA_PROP_LITERAL 0x00000001
-#define XTENSA_PROP_INSN 0x00000002
-#define XTENSA_PROP_DATA 0x00000004
-#define XTENSA_PROP_UNREACHABLE 0x00000008
-/* Instruction-only properties at beginning of code. */
-#define XTENSA_PROP_INSN_LOOP_TARGET 0x00000010
-#define XTENSA_PROP_INSN_BRANCH_TARGET 0x00000020
-/* Instruction-only properties about code. */
-#define XTENSA_PROP_INSN_NO_DENSITY 0x00000040
-#define XTENSA_PROP_INSN_NO_REORDER 0x00000080
-/* Historically, NO_TRANSFORM was a property of instructions,
- but it should apply to literals under certain circumstances. */
-#define XTENSA_PROP_NO_TRANSFORM 0x00000100
-
-/* Branch target alignment information. This transmits information
- to the linker optimization about the priority of aligning a
- particular block for branch target alignment: None, low priority,
- high priority, or required. These only need to be checked in
- instruction blocks marked as XTENSA_PROP_INSN_BRANCH_TARGET.
- Common usage is:
-
- switch (GET_XTENSA_PROP_BT_ALIGN(flags))
- case XTENSA_PROP_BT_ALIGN_NONE:
- case XTENSA_PROP_BT_ALIGN_LOW:
- case XTENSA_PROP_BT_ALIGN_HIGH:
- case XTENSA_PROP_BT_ALIGN_REQUIRE:
-*/
-#define XTENSA_PROP_BT_ALIGN_MASK 0x00000600
-
-/* No branch target alignment. */
-#define XTENSA_PROP_BT_ALIGN_NONE 0x0
-/* Low priority branch target alignment. */
-#define XTENSA_PROP_BT_ALIGN_LOW 0x1
-/* High priority branch target alignment. */
-#define XTENSA_PROP_BT_ALIGN_HIGH 0x2
-/* Required branch target alignment. */
-#define XTENSA_PROP_BT_ALIGN_REQUIRE 0x3
-
-#define GET_XTENSA_PROP_BT_ALIGN(flag) \
- (((unsigned)((flag) & (XTENSA_PROP_BT_ALIGN_MASK))) >> 9)
-#define SET_XTENSA_PROP_BT_ALIGN(flag, align) \
- (((flag) & (~XTENSA_PROP_BT_ALIGN_MASK)) | \
- (((align) << 9) & XTENSA_PROP_BT_ALIGN_MASK))
-
-/* Alignment is specified in the block BEFORE the one that needs
- alignment. Up to 5 bits. Use GET_XTENSA_PROP_ALIGNMENT(flags) to
- get the required alignment specified as a power of 2. Use
- SET_XTENSA_PROP_ALIGNMENT(flags, pow2) to set the required
- alignment. Be careful of side effects since the SET will evaluate
- flags twice. Also, note that the SIZE of a block in the property
- table does not include the alignment size, so the alignment fill
- must be calculated to determine if two blocks are contiguous.
- TEXT_ALIGN is not currently implemented but is a placeholder for a
- possible future implementation. */
-
-#define XTENSA_PROP_ALIGN 0x00000800
-
-#define XTENSA_PROP_ALIGNMENT_MASK 0x0001f000
-
-#define GET_XTENSA_PROP_ALIGNMENT(flag) \
- (((unsigned)((flag) & (XTENSA_PROP_ALIGNMENT_MASK))) >> 12)
-#define SET_XTENSA_PROP_ALIGNMENT(flag, align) \
- (((flag) & (~XTENSA_PROP_ALIGNMENT_MASK)) | \
- (((align) << 12) & XTENSA_PROP_ALIGNMENT_MASK))
-
-#define XTENSA_PROP_INSN_ABSLIT 0x00020000
-
-#endif /* _ELF_XTENSA_H */
diff --git a/include/fibheap.h b/include/fibheap.h
deleted file mode 100644
index a3d09dd9d..000000000
--- a/include/fibheap.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/* A Fibonacci heap datatype.
- Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2009
- Free Software Foundation, Inc.
- Contributed by Daniel Berlin (dan@cgsoftware.com).
-
-This file is part of GCC.
-
-GCC 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.
-
-GCC 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 GCC; see the file COPYING. If not, write to
-the Free Software Foundation, 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-/* Fibonacci heaps are somewhat complex, but, there's an article in
- DDJ that explains them pretty well:
-
- http://www.ddj.com/articles/1997/9701/9701o/9701o.htm?topic=algoritms
-
- Introduction to algorithms by Corman and Rivest also goes over them.
-
- The original paper that introduced them is "Fibonacci heaps and their
- uses in improved network optimization algorithms" by Tarjan and
- Fredman (JACM 34(3), July 1987).
-
- Amortized and real worst case time for operations:
-
- ExtractMin: O(lg n) amortized. O(n) worst case.
- DecreaseKey: O(1) amortized. O(lg n) worst case.
- Insert: O(2) amortized. O(1) actual.
- Union: O(1) amortized. O(1) actual. */
-
-#ifndef _FIBHEAP_H_
-#define _FIBHEAP_H_
-
-#include "ansidecl.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef long fibheapkey_t;
-
-typedef struct fibheap
-{
- size_t nodes;
- struct fibnode *min;
- struct fibnode *root;
-} *fibheap_t;
-
-typedef struct fibnode
-{
- struct fibnode *parent;
- struct fibnode *child;
- struct fibnode *left;
- struct fibnode *right;
- fibheapkey_t key;
- void *data;
-#if defined (__GNUC__) && (!defined (SIZEOF_INT) || SIZEOF_INT < 4)
- __extension__ unsigned long int degree : 31;
- __extension__ unsigned long int mark : 1;
-#else
- unsigned int degree : 31;
- unsigned int mark : 1;
-#endif
-} *fibnode_t;
-
-extern fibheap_t fibheap_new (void);
-extern fibnode_t fibheap_insert (fibheap_t, fibheapkey_t, void *);
-extern int fibheap_empty (fibheap_t);
-extern fibheapkey_t fibheap_min_key (fibheap_t);
-extern fibheapkey_t fibheap_replace_key (fibheap_t, fibnode_t,
- fibheapkey_t);
-extern void *fibheap_replace_key_data (fibheap_t, fibnode_t,
- fibheapkey_t, void *);
-extern void *fibheap_extract_min (fibheap_t);
-extern void *fibheap_min (fibheap_t);
-extern void *fibheap_replace_data (fibheap_t, fibnode_t, void *);
-extern void *fibheap_delete_node (fibheap_t, fibnode_t);
-extern void fibheap_delete (fibheap_t);
-extern fibheap_t fibheap_union (fibheap_t, fibheap_t);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _FIBHEAP_H_ */
diff --git a/include/filenames.h b/include/filenames.h
deleted file mode 100644
index 470c5e091..000000000
--- a/include/filenames.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/* Macros for taking apart, interpreting and processing file names.
-
- These are here because some non-Posix (a.k.a. DOSish) systems have
- drive letter brain-damage at the beginning of an absolute file name,
- use forward- and back-slash in path names interchangeably, and
- some of them have case-insensitive file names.
-
- Copyright 2000, 2001, 2007, 2010 Free Software Foundation, Inc.
-
-This file is part of BFD, the Binary File Descriptor library.
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef FILENAMES_H
-#define FILENAMES_H
-
-#include "hashtab.h" /* for hashval_t */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#if defined(__MSDOS__) || defined(_WIN32) || defined(__OS2__) || defined (__CYGWIN__)
-# ifndef HAVE_DOS_BASED_FILE_SYSTEM
-# define HAVE_DOS_BASED_FILE_SYSTEM 1
-# endif
-# ifndef HAVE_CASE_INSENSITIVE_FILE_SYSTEM
-# define HAVE_CASE_INSENSITIVE_FILE_SYSTEM 1
-# endif
-# define HAS_DRIVE_SPEC(f) HAS_DOS_DRIVE_SPEC (f)
-# define IS_DIR_SEPARATOR(c) IS_DOS_DIR_SEPARATOR (c)
-# define IS_ABSOLUTE_PATH(f) IS_DOS_ABSOLUTE_PATH (f)
-#else /* not DOSish */
-# if defined(__APPLE__)
-# ifndef HAVE_CASE_INSENSITIVE_FILE_SYSTEM
-# define HAVE_CASE_INSENSITIVE_FILE_SYSTEM 1
-# endif
-# endif /* __APPLE__ */
-# define HAS_DRIVE_SPEC(f) (0)
-# define IS_DIR_SEPARATOR(c) IS_UNIX_DIR_SEPARATOR (c)
-# define IS_ABSOLUTE_PATH(f) IS_UNIX_ABSOLUTE_PATH (f)
-#endif
-
-#define IS_DIR_SEPARATOR_1(dos_based, c) \
- (((c) == '/') \
- || (((c) == '\\') && (dos_based)))
-
-#define HAS_DRIVE_SPEC_1(dos_based, f) \
- ((f)[0] && ((f)[1] == ':') && (dos_based))
-
-/* Remove the drive spec from F, assuming HAS_DRIVE_SPEC (f).
- The result is a pointer to the remainder of F. */
-#define STRIP_DRIVE_SPEC(f) ((f) + 2)
-
-#define IS_DOS_DIR_SEPARATOR(c) IS_DIR_SEPARATOR_1 (1, c)
-#define IS_DOS_ABSOLUTE_PATH(f) IS_ABSOLUTE_PATH_1 (1, f)
-#define HAS_DOS_DRIVE_SPEC(f) HAS_DRIVE_SPEC_1 (1, f)
-
-#define IS_UNIX_DIR_SEPARATOR(c) IS_DIR_SEPARATOR_1 (0, c)
-#define IS_UNIX_ABSOLUTE_PATH(f) IS_ABSOLUTE_PATH_1 (0, f)
-
-/* Note that when DOS_BASED is true, IS_ABSOLUTE_PATH accepts d:foo as
- well, although it is only semi-absolute. This is because the users
- of IS_ABSOLUTE_PATH want to know whether to prepend the current
- working directory to a file name, which should not be done with a
- name like d:foo. */
-#define IS_ABSOLUTE_PATH_1(dos_based, f) \
- (IS_DIR_SEPARATOR_1 (dos_based, (f)[0]) \
- || HAS_DRIVE_SPEC_1 (dos_based, f))
-
-extern int filename_cmp (const char *s1, const char *s2);
-#define FILENAME_CMP(s1, s2) filename_cmp(s1, s2)
-
-extern int filename_ncmp (const char *s1, const char *s2,
- size_t n);
-
-extern hashval_t filename_hash (const void *s);
-
-extern int filename_eq (const void *s1, const void *s2);
-
-extern int canonical_filename_eq (const char *a, const char *b);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* FILENAMES_H */
diff --git a/include/floatformat.h b/include/floatformat.h
deleted file mode 100644
index 04db61a26..000000000
--- a/include/floatformat.h
+++ /dev/null
@@ -1,152 +0,0 @@
-/* IEEE floating point support declarations, for GDB, the GNU Debugger.
- Copyright 1991, 1994, 1995, 1997, 2000, 2003, 2005, 2010
- 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#if !defined (FLOATFORMAT_H)
-#define FLOATFORMAT_H 1
-
-#include "ansidecl.h"
-
-/* A floatformat consists of a sign bit, an exponent and a mantissa. Once the
- bytes are concatenated according to the byteorder flag, then each of those
- fields is contiguous. We number the bits with 0 being the most significant
- (i.e. BITS_BIG_ENDIAN type numbering), and specify which bits each field
- contains with the *_start and *_len fields. */
-
-/* What is the order of the bytes? */
-
-enum floatformat_byteorders {
- /* Standard little endian byte order.
- EX: 1.2345678e10 => 00 00 80 c5 e0 fe 06 42 */
- floatformat_little,
-
- /* Standard big endian byte order.
- EX: 1.2345678e10 => 42 06 fe e0 c5 80 00 00 */
- floatformat_big,
-
- /* Little endian byte order but big endian word order.
- EX: 1.2345678e10 => e0 fe 06 42 00 00 80 c5 */
- floatformat_littlebyte_bigword,
-
- /* VAX byte order. Little endian byte order with 16-bit words. The
- following example is an illustration of the byte order only; VAX
- doesn't have a fully IEEE compliant floating-point format.
- EX: 1.2345678e10 => 80 c5 00 00 06 42 e0 fe */
- floatformat_vax
-};
-
-enum floatformat_intbit { floatformat_intbit_yes, floatformat_intbit_no };
-
-struct floatformat
-{
- enum floatformat_byteorders byteorder;
- unsigned int totalsize; /* Total size of number in bits */
-
- /* Sign bit is always one bit long. 1 means negative, 0 means positive. */
- unsigned int sign_start;
-
- unsigned int exp_start;
- unsigned int exp_len;
- /* Bias added to a "true" exponent to form the biased exponent. It
- is intentionally signed as, otherwize, -exp_bias can turn into a
- very large number (e.g., given the exp_bias of 0x3fff and a 64
- bit long, the equation (long)(1 - exp_bias) evaluates to
- 4294950914) instead of -16382). */
- int exp_bias;
- /* Exponent value which indicates NaN. This is the actual value stored in
- the float, not adjusted by the exp_bias. This usually consists of all
- one bits. */
- unsigned int exp_nan;
-
- unsigned int man_start;
- unsigned int man_len;
-
- /* Is the integer bit explicit or implicit? */
- enum floatformat_intbit intbit;
-
- /* Internal name for debugging. */
- const char *name;
-
- /* Validator method. */
- int (*is_valid) (const struct floatformat *fmt, const void *from);
-
- /* Is the format actually the sum of two smaller floating point
- formats (IBM long double, as described in
- gcc/config/rs6000/darwin-ldouble-format)? If so, this is the
- smaller format in question, and the fields sign_start through
- intbit describe the first half. If not, this is NULL. */
- const struct floatformat *split_half;
-};
-
-/* floatformats for IEEE single and double, big and little endian. */
-
-extern const struct floatformat floatformat_ieee_half_big;
-extern const struct floatformat floatformat_ieee_half_little;
-extern const struct floatformat floatformat_ieee_single_big;
-extern const struct floatformat floatformat_ieee_single_little;
-extern const struct floatformat floatformat_ieee_double_big;
-extern const struct floatformat floatformat_ieee_double_little;
-
-/* floatformat for ARM IEEE double, little endian bytes and big endian words */
-
-extern const struct floatformat floatformat_ieee_double_littlebyte_bigword;
-
-/* floatformats for VAX. */
-
-extern const struct floatformat floatformat_vax_f;
-extern const struct floatformat floatformat_vax_d;
-extern const struct floatformat floatformat_vax_g;
-
-/* floatformats for various extendeds. */
-
-extern const struct floatformat floatformat_i387_ext;
-extern const struct floatformat floatformat_m68881_ext;
-extern const struct floatformat floatformat_i960_ext;
-extern const struct floatformat floatformat_m88110_ext;
-extern const struct floatformat floatformat_m88110_harris_ext;
-extern const struct floatformat floatformat_arm_ext_big;
-extern const struct floatformat floatformat_arm_ext_littlebyte_bigword;
-/* IA-64 Floating Point register spilt into memory. */
-extern const struct floatformat floatformat_ia64_spill_big;
-extern const struct floatformat floatformat_ia64_spill_little;
-extern const struct floatformat floatformat_ia64_quad_big;
-extern const struct floatformat floatformat_ia64_quad_little;
-/* IBM long double (double+double). */
-extern const struct floatformat floatformat_ibm_long_double_big;
-extern const struct floatformat floatformat_ibm_long_double_little;
-
-/* Convert from FMT to a double.
- FROM is the address of the extended float.
- Store the double in *TO. */
-
-extern void
-floatformat_to_double (const struct floatformat *, const void *, double *);
-
-/* The converse: convert the double *FROM to FMT
- and store where TO points. */
-
-extern void
-floatformat_from_double (const struct floatformat *, const double *, void *);
-
-/* Return non-zero iff the data at FROM is a valid number in format FMT. */
-
-extern int
-floatformat_is_valid (const struct floatformat *fmt, const void *from);
-
-#endif /* defined (FLOATFORMAT_H) */
diff --git a/include/fnmatch.h b/include/fnmatch.h
deleted file mode 100644
index 5b9953ca3..000000000
--- a/include/fnmatch.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/* Copyright 1991, 1992, 1993, 1996 Free Software Foundation, Inc.
-
-NOTE: The canonical source of this file is maintained with the GNU C Library.
-Bugs can be reported to bug-glibc@prep.ai.mit.edu.
-
-This program is free software; you can redistribute it and/or modify it
-under the terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option) any
-later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-#ifndef _FNMATCH_H
-
-#define _FNMATCH_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#if defined (__cplusplus) || (defined (__STDC__) && __STDC__)
-#undef __P
-#define __P(args) args
-#else /* Not C++ or ANSI C. */
-#undef __P
-#define __P(args) ()
-/* We can get away without defining `const' here only because in this file
- it is used only inside the prototype for `fnmatch', which is elided in
- non-ANSI C where `const' is problematical. */
-#endif /* C++ or ANSI C. */
-
-
-/* We #undef these before defining them because some losing systems
- (HP-UX A.08.07 for example) define these in <unistd.h>. */
-#undef FNM_PATHNAME
-#undef FNM_NOESCAPE
-#undef FNM_PERIOD
-
-/* Bits set in the FLAGS argument to `fnmatch'. */
-#define FNM_PATHNAME (1 << 0) /* No wildcard can ever match `/'. */
-#define FNM_NOESCAPE (1 << 1) /* Backslashes don't quote special chars. */
-#define FNM_PERIOD (1 << 2) /* Leading `.' is matched only explicitly. */
-
-#if !defined (_POSIX_C_SOURCE) || _POSIX_C_SOURCE < 2 || defined (_GNU_SOURCE)
-#define FNM_FILE_NAME FNM_PATHNAME /* Preferred GNU name. */
-#define FNM_LEADING_DIR (1 << 3) /* Ignore `/...' after a match. */
-#define FNM_CASEFOLD (1 << 4) /* Compare without regard to case. */
-#endif
-
-/* Value returned by `fnmatch' if STRING does not match PATTERN. */
-#define FNM_NOMATCH 1
-
-/* Match STRING against the filename pattern PATTERN,
- returning zero if it matches, FNM_NOMATCH if not. */
-extern int fnmatch __P ((const char *__pattern, const char *__string,
- int __flags));
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* fnmatch.h */
diff --git a/include/fopen-bin.h b/include/fopen-bin.h
deleted file mode 100644
index 8f5f77100..000000000
--- a/include/fopen-bin.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/* Macros for the 'type' part of an fopen, freopen or fdopen.
-
- <Read|Write>[Update]<Binary file|text file>
-
- This version is for "binary" systems, where text and binary files are
- different. An example is Mess-Dose. Many Unix systems could also
- cope with a "b" in the string, indicating binary files, but some reject this
- (and thereby don't conform to ANSI C, but what else is new?).
-
- Copyright 1996-2012 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street - Fifth Floor,
- Boston, MA 02110-1301, USA. */
-
-/* This file is designed for inclusion by host-dependent .h files. No
- user application should include it directly, since that would make
- the application unable to be configured for both "same" and "binary"
- variant systems. */
-
-#define FOPEN_RB "rb"
-#define FOPEN_WB "wb"
-#define FOPEN_AB "ab"
-#define FOPEN_RUB "r+b"
-#define FOPEN_WUB "w+b"
-#define FOPEN_AUB "a+b"
-
-#define FOPEN_RT "r"
-#define FOPEN_WT "w"
-#define FOPEN_AT "a"
-#define FOPEN_RUT "r+"
-#define FOPEN_WUT "w+"
-#define FOPEN_AUT "a+"
diff --git a/include/fopen-same.h b/include/fopen-same.h
deleted file mode 100644
index d139e02ec..000000000
--- a/include/fopen-same.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/* Macros for the 'type' part of an fopen, freopen or fdopen.
-
- <Read|Write>[Update]<Binary file|text file>
-
- This version is for "same" systems, where text and binary files are
- the same. An example is Unix. Many Unix systems could also add a
- "b" to the string, indicating binary files, but some reject this
- (and thereby don't conform to ANSI C, but what else is new?).
-
- Copyright 1996-2012 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street - Fifth Floor,
- Boston, MA 02110-1301, USA. */
-
-/* This file is designed for inclusion by host-dependent .h files. No
- user application should include it directly, since that would make
- the application unable to be configured for both "same" and "binary"
- variant systems. */
-
-#define FOPEN_RB "r"
-#define FOPEN_WB "w"
-#define FOPEN_AB "a"
-#define FOPEN_RUB "r+"
-#define FOPEN_WUB "w+"
-#define FOPEN_AUB "a+"
-
-#define FOPEN_RT "r"
-#define FOPEN_WT "w"
-#define FOPEN_AT "a"
-#define FOPEN_RUT "r+"
-#define FOPEN_WUT "w+"
-#define FOPEN_AUT "a+"
diff --git a/include/fopen-vms.h b/include/fopen-vms.h
deleted file mode 100644
index e2b2dc7ad..000000000
--- a/include/fopen-vms.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/* Macros for the 'type' part of an fopen, freopen or fdopen.
-
- <Read|Write>[Update]<Binary file|text file>
-
- This version is for VMS systems, where text and binary files are
- different.
-
- Copyright 1996-2012 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street - Fifth Floor,
- Boston, MA 02110-1301, USA. */
-
-/* This file is designed for inclusion by host-dependent .h files. No
- user application should include it directly, since that would make
- the application unable to be configured for both "same" and "binary"
- variant systems. */
-
-#define FOPEN_RB "rb,rfm=udf,rat=none"
-#define FOPEN_WB "wb,rfm=udf,rat=none"
-#define FOPEN_AB "ab,rfm=udf,rat=none"
-#define FOPEN_RUB "r+b,rfm=udf,rat=none"
-#define FOPEN_WUB "w+b,rfm=udf,rat=none"
-#define FOPEN_AUB "a+b,rfm=udf,rat=none"
-
-#define FOPEN_RT "r"
-#define FOPEN_WT "w"
-#define FOPEN_AT "a"
-#define FOPEN_RUT "r+"
-#define FOPEN_WUT "w+"
-#define FOPEN_AUT "a+"
diff --git a/include/gcc-c-fe.def b/include/gcc-c-fe.def
deleted file mode 100644
index 19cb8674d..000000000
--- a/include/gcc-c-fe.def
+++ /dev/null
@@ -1,197 +0,0 @@
-/* Interface between GCC C FE and GDB -*- c -*-
-
- Copyright (C) 2014 Free Software Foundation, Inc.
-
- This file is part of GCC.
-
- 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 3 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, see <http://www.gnu.org/licenses/>. */
-
-
-
-/* Create a new "decl" in GCC. A decl is a declaration, basically a
- kind of symbol.
-
- NAME is the name of the new symbol. SYM_KIND is the kind of
- symbol being requested. SYM_TYPE is the new symbol's C type;
- except for labels, where this is not meaningful and should be
- zero. If SUBSTITUTION_NAME is not NULL, then a reference to this
- decl in the source will later be substituted with a dereference
- of a variable of the given name. Otherwise, for symbols having
- an address (e.g., functions), ADDRESS is the address. FILENAME
- and LINE_NUMBER refer to the symbol's source location. If this
- is not known, FILENAME can be NULL and LINE_NUMBER can be 0.
- This function returns the new decl. */
-
-GCC_METHOD7 (gcc_decl, build_decl,
- const char *, /* Argument NAME. */
- enum gcc_c_symbol_kind, /* Argument SYM_KIND. */
- gcc_type, /* Argument SYM_TYPE. */
- const char *, /* Argument SUBSTITUTION_NAME. */
- gcc_address, /* Argument ADDRESS. */
- const char *, /* Argument FILENAME. */
- unsigned int) /* Argument LINE_NUMBER. */
-
-/* Insert a GCC decl into the symbol table. DECL is the decl to
- insert. IS_GLOBAL is true if this is an outermost binding, and
- false if it is a possibly-shadowing binding. */
-
-GCC_METHOD2 (int /* bool */, bind,
- gcc_decl, /* Argument DECL. */
- int /* bool */) /* Argument IS_GLOBAL. */
-
-/* Insert a tagged type into the symbol table. NAME is the tag name
- of the type and TAGGED_TYPE is the type itself. TAGGED_TYPE must
- be either a struct, union, or enum type, as these are the only
- types that have tags. FILENAME and LINE_NUMBER refer to the type's
- source location. If this is not known, FILENAME can be NULL and
- LINE_NUMBER can be 0. */
-
-GCC_METHOD4 (int /* bool */, tagbind,
- const char *, /* Argument NAME. */
- gcc_type, /* Argument TAGGED_TYPE. */
- const char *, /* Argument FILENAME. */
- unsigned int) /* Argument LINE_NUMBER. */
-
-/* Return the type of a pointer to a given base type. */
-
-GCC_METHOD1 (gcc_type, build_pointer_type,
- gcc_type) /* Argument BASE_TYPE. */
-
-/* Create a new 'struct' type. Initially it has no fields. */
-
-GCC_METHOD0 (gcc_type, build_record_type)
-
-/* Create a new 'union' type. Initially it has no fields. */
-
-GCC_METHOD0 (gcc_type, build_union_type)
-
-/* Add a field to a struct or union type. FIELD_NAME is the field's
- name. FIELD_TYPE is the type of the field. BITSIZE and BITPOS
- indicate where in the struct the field occurs. */
-
-GCC_METHOD5 (int /* bool */, build_add_field,
- gcc_type, /* Argument RECORD_OR_UNION_TYPE. */
- const char *, /* Argument FIELD_NAME. */
- gcc_type, /* Argument FIELD_TYPE. */
- unsigned long, /* Argument BITSIZE. */
- unsigned long) /* Argument BITPOS. */
-
-/* After all the fields have been added to a struct or union, the
- struct or union type must be "finished". This does some final
- cleanups in GCC. */
-
-GCC_METHOD2 (int /* bool */, finish_record_or_union,
- gcc_type, /* Argument RECORD_OR_UNION_TYPE. */
- unsigned long) /* Argument SIZE_IN_BYTES. */
-
-/* Create a new 'enum' type. The new type initially has no
- associated constants. */
-
-GCC_METHOD1 (gcc_type, build_enum_type,
- gcc_type) /* Argument UNDERLYING_INT_TYPE. */
-
-/* Add a new constant to an enum type. NAME is the constant's
- name and VALUE is its value. */
-
-GCC_METHOD3 (int /* bool */, build_add_enum_constant,
- gcc_type, /* Argument ENUM_TYPE. */
- const char *, /* Argument NAME. */
- unsigned long) /* Argument VALUE. */
-
-/* After all the constants have been added to an enum, the type must
- be "finished". This does some final cleanups in GCC. */
-
-GCC_METHOD1 (int /* bool */, finish_enum_type,
- gcc_type) /* Argument ENUM_TYPE. */
-
-/* Create a new function type. RETURN_TYPE is the type returned by
- the function, and ARGUMENT_TYPES is a vector, of length NARGS, of
- the argument types. IS_VARARGS is true if the function is
- varargs. */
-
-GCC_METHOD3 (gcc_type, build_function_type,
- gcc_type, /* Argument RETURN_TYPE. */
- const struct gcc_type_array *, /* Argument ARGUMENT_TYPES. */
- int /* bool */) /* Argument IS_VARARGS. */
-
-/* Return an integer type with the given properties. */
-
-GCC_METHOD2 (gcc_type, int_type,
- int /* bool */, /* Argument IS_UNSIGNED. */
- unsigned long) /* Argument SIZE_IN_BYTES. */
-
-/* Return a floating point type with the given properties. */
-
-GCC_METHOD1 (gcc_type, float_type,
- unsigned long) /* Argument SIZE_IN_BYTES. */
-
-/* Return the 'void' type. */
-
-GCC_METHOD0 (gcc_type, void_type)
-
-/* Return the 'bool' type. */
-
-GCC_METHOD0 (gcc_type, bool_type)
-
-/* Create a new array type. If NUM_ELEMENTS is -1, then the array
- is assumed to have an unknown length. */
-
-GCC_METHOD2 (gcc_type, build_array_type,
- gcc_type, /* Argument ELEMENT_TYPE. */
- int) /* Argument NUM_ELEMENTS. */
-
-/* Create a new variably-sized array type. UPPER_BOUND_NAME is the
- name of a local variable that holds the upper bound of the array;
- it is one less than the array size. */
-
-GCC_METHOD2 (gcc_type, build_vla_array_type,
- gcc_type, /* Argument ELEMENT_TYPE. */
- const char *) /* Argument UPPER_BOUND_NAME. */
-
-/* Return a qualified variant of a given base type. QUALIFIERS says
- which qualifiers to use; it is composed of or'd together
- constants from 'enum gcc_qualifiers'. */
-
-GCC_METHOD2 (gcc_type, build_qualified_type,
- gcc_type, /* Argument UNQUALIFIED_TYPE. */
- enum gcc_qualifiers) /* Argument QUALIFIERS. */
-
-/* Build a complex type given its element type. */
-
-GCC_METHOD1 (gcc_type, build_complex_type,
- gcc_type) /* Argument ELEMENT_TYPE. */
-
-/* Build a vector type given its element type and number of
- elements. */
-
-GCC_METHOD2 (gcc_type, build_vector_type,
- gcc_type, /* Argument ELEMENT_TYPE. */
- int) /* Argument NUM_ELEMENTS. */
-
-/* Build a constant. NAME is the constant's name and VALUE is its
- value. FILENAME and LINE_NUMBER refer to the type's source
- location. If this is not known, FILENAME can be NULL and
- LINE_NUMBER can be 0. */
-
-GCC_METHOD5 (int /* bool */, build_constant,
- gcc_type, /* Argument TYPE. */
- const char *, /* Argument NAME. */
- unsigned long, /* Argument VALUE. */
- const char *, /* Argument FILENAME. */
- unsigned int) /* Argument LINE_NUMBER. */
-
-/* Emit an error and return an error type object. */
-
-GCC_METHOD1 (gcc_type, error,
- const char *) /* Argument MESSAGE. */
diff --git a/include/gcc-c-interface.h b/include/gcc-c-interface.h
deleted file mode 100644
index 25ef62f6e..000000000
--- a/include/gcc-c-interface.h
+++ /dev/null
@@ -1,220 +0,0 @@
-/* Interface between GCC C FE and GDB
-
- Copyright (C) 2014 Free Software Foundation, Inc.
-
- This file is part of GCC.
-
- 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 3 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, see <http://www.gnu.org/licenses/>. */
-
-#ifndef GCC_C_INTERFACE_H
-#define GCC_C_INTERFACE_H
-
-#include "gcc-interface.h"
-
-/* This header defines the interface to the GCC API. It must be both
- valid C and valid C++, because it is included by both programs. */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Forward declaration. */
-
-struct gcc_c_context;
-
-/*
- * Definitions and declarations for the C front end.
- */
-
-/* Defined versions of the C front-end API. */
-
-enum gcc_c_api_version
-{
- GCC_C_FE_VERSION_0 = 0
-};
-
-/* Qualifiers. */
-
-enum gcc_qualifiers
-{
- GCC_QUALIFIER_CONST = 1,
- GCC_QUALIFIER_VOLATILE = 2,
- GCC_QUALIFIER_RESTRICT = 4
-};
-
-/* This enumerates the kinds of decls that GDB can create. */
-
-enum gcc_c_symbol_kind
-{
- /* A function. */
-
- GCC_C_SYMBOL_FUNCTION,
-
- /* A variable. */
-
- GCC_C_SYMBOL_VARIABLE,
-
- /* A typedef. */
-
- GCC_C_SYMBOL_TYPEDEF,
-
- /* A label. */
-
- GCC_C_SYMBOL_LABEL
-};
-
-/* This enumerates the types of symbols that GCC might request from
- GDB. */
-
-enum gcc_c_oracle_request
-{
- /* An ordinary symbol -- a variable, function, typedef, or enum
- constant. */
-
- GCC_C_ORACLE_SYMBOL,
-
- /* A struct, union, or enum tag. */
-
- GCC_C_ORACLE_TAG,
-
- /* A label. */
-
- GCC_C_ORACLE_LABEL
-};
-
-/* The type of the function called by GCC to ask GDB for a symbol's
- definition. DATUM is an arbitrary value supplied when the oracle
- function is registered. CONTEXT is the GCC context in which the
- request is being made. REQUEST specifies what sort of symbol is
- being requested, and IDENTIFIER is the name of the symbol. */
-
-typedef void gcc_c_oracle_function (void *datum,
- struct gcc_c_context *context,
- enum gcc_c_oracle_request request,
- const char *identifier);
-
-/* The type of the function called by GCC to ask GDB for a symbol's
- address. This should return 0 if the address is not known. */
-
-typedef gcc_address gcc_c_symbol_address_function (void *datum,
- struct gcc_c_context *ctxt,
- const char *identifier);
-
-/* An array of types used for creating a function type. */
-
-struct gcc_type_array
-{
- /* Number of elements. */
-
- int n_elements;
-
- /* The elements. */
-
- gcc_type *elements;
-};
-
-/* The vtable used by the C front end. */
-
-struct gcc_c_fe_vtable
-{
- /* The version of the C interface. The value is one of the
- gcc_c_api_version constants. */
-
- unsigned int c_version;
-
- /* Set the callbacks for this context.
-
- The binding oracle is called whenever the C parser needs to look
- up a symbol. This gives the caller a chance to lazily
- instantiate symbols using other parts of the gcc_c_fe_interface
- API.
-
- The address oracle is called whenever the C parser needs to look
- up a symbol. This is only called for symbols not provided by the
- symbol oracle -- that is, just built-in functions where GCC
- provides the declaration.
-
- DATUM is an arbitrary piece of data that is passed back verbatim
- to the callbakcs in requests. */
-
- void (*set_callbacks) (struct gcc_c_context *self,
- gcc_c_oracle_function *binding_oracle,
- gcc_c_symbol_address_function *address_oracle,
- void *datum);
-
-#define GCC_METHOD0(R, N) \
- R (*N) (struct gcc_c_context *);
-#define GCC_METHOD1(R, N, A) \
- R (*N) (struct gcc_c_context *, A);
-#define GCC_METHOD2(R, N, A, B) \
- R (*N) (struct gcc_c_context *, A, B);
-#define GCC_METHOD3(R, N, A, B, C) \
- R (*N) (struct gcc_c_context *, A, B, C);
-#define GCC_METHOD4(R, N, A, B, C, D) \
- R (*N) (struct gcc_c_context *, A, B, C, D);
-#define GCC_METHOD5(R, N, A, B, C, D, E) \
- R (*N) (struct gcc_c_context *, A, B, C, D, E);
-#define GCC_METHOD7(R, N, A, B, C, D, E, F, G) \
- R (*N) (struct gcc_c_context *, A, B, C, D, E, F, G);
-
-#include "gcc-c-fe.def"
-
-#undef GCC_METHOD0
-#undef GCC_METHOD1
-#undef GCC_METHOD2
-#undef GCC_METHOD3
-#undef GCC_METHOD4
-#undef GCC_METHOD5
-#undef GCC_METHOD7
-
-};
-
-/* The C front end object. */
-
-struct gcc_c_context
-{
- /* Base class. */
-
- struct gcc_base_context base;
-
- /* Our vtable. This is a separate field because this is simpler
- than implementing a vtable inheritance scheme in C. */
-
- const struct gcc_c_fe_vtable *c_ops;
-};
-
-/* The name of the .so that the compiler builds. We dlopen this
- later. */
-
-#define GCC_C_FE_LIBCC libcc1.so
-
-/* The compiler exports a single initialization function. This macro
- holds its name as a symbol. */
-
-#define GCC_C_FE_CONTEXT gcc_c_fe_context
-
-/* The type of the initialization function. The caller passes in the
- desired base version and desired C-specific version. If the
- request can be satisfied, a compatible gcc_context object will be
- returned. Otherwise, the function returns NULL. */
-
-typedef struct gcc_c_context *gcc_c_fe_context_function
- (enum gcc_base_api_version,
- enum gcc_c_api_version);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* GCC_C_INTERFACE_H */
diff --git a/include/gcc-interface.h b/include/gcc-interface.h
deleted file mode 100644
index 34010f247..000000000
--- a/include/gcc-interface.h
+++ /dev/null
@@ -1,127 +0,0 @@
-/* Generic interface between GCC and GDB
-
- Copyright (C) 2014 Free Software Foundation, Inc.
-
- This file is part of GCC.
-
- 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 3 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, see <http://www.gnu.org/licenses/>. */
-
-#ifndef GCC_INTERFACE_H
-#define GCC_INTERFACE_H
-
-/* This header defines the interface to the GCC API. It must be both
- valid C and valid C++, because it is included by both programs. */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Opaque typedefs for objects passed through the interface. */
-
-typedef unsigned long long gcc_type;
-typedef unsigned long long gcc_decl;
-
-/* An address in the inferior. */
-
-typedef unsigned long long gcc_address;
-
-/* Forward declaration. */
-
-struct gcc_base_context;
-
-/* Defined versions of the generic API. */
-
-enum gcc_base_api_version
-{
- GCC_FE_VERSION_0 = 0
-};
-
-/* The operations defined by the GCC base API. This is the vtable for
- the real context structure which is passed around.
-
- The "base" API is concerned with basics shared by all compiler
- front ends: setting command-line arguments, the file names, etc.
-
- Front-end-specific interfaces inherit from this one. */
-
-struct gcc_base_vtable
-{
- /* The actual version implemented in this interface. This field can
- be relied on not to move, so users can always check it if they
- desire. The value is one of the gcc_base_api_version constants.
- */
-
- unsigned int version;
-
- /* Set the compiler's command-line options for the next compilation.
- TRIPLET_REGEXP is a regular expression that is used to match the
- configury triplet prefix to the compiler.
- The arguments are copied by GCC. ARGV need not be
- NULL-terminated. The arguments must be set separately for each
- compilation; that is, after a compile is requested, the
- previously-set arguments cannot be reused.
-
- This returns NULL on success. On failure, returns a malloc()d
- error message. The caller is responsible for freeing it. */
-
- char *(*set_arguments) (struct gcc_base_context *self,
- const char *triplet_regexp,
- int argc, char **argv);
-
- /* Set the file name of the program to compile. The string is
- copied by the method implementation, but the caller must
- guarantee that the file exists through the compilation. */
-
- void (*set_source_file) (struct gcc_base_context *self, const char *file);
-
- /* Set a callback to use for printing error messages. DATUM is
- passed through to the callback unchanged. */
-
- void (*set_print_callback) (struct gcc_base_context *self,
- void (*print_function) (void *datum,
- const char *message),
- void *datum);
-
- /* Perform the compilation. FILENAME is the name of the resulting
- object file. VERBOSE can be set to cause GCC to print some
- information as it works. Returns true on success, false on
- error. */
-
- int /* bool */ (*compile) (struct gcc_base_context *self,
- const char *filename,
- int /* bool */ verbose);
-
- /* Destroy this object. */
-
- void (*destroy) (struct gcc_base_context *self);
-};
-
-/* The GCC object. */
-
-struct gcc_base_context
-{
- /* The virtual table. */
-
- const struct gcc_base_vtable *ops;
-};
-
-/* The name of the dummy wrapper function generated by gdb. */
-
-#define GCC_FE_WRAPPER_FUNCTION "_gdb_expr"
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* GCC_INTERFACE_H */
diff --git a/include/gdb/ChangeLog b/include/gdb/ChangeLog
deleted file mode 100644
index 142f87ae3..000000000
--- a/include/gdb/ChangeLog
+++ /dev/null
@@ -1,272 +0,0 @@
-2013-03-15 Steve Ellcey <sellcey@mips.com>
-
- * gdb/remote-sim.h (sim_command_completer): Make char arguments const.
-
-2013-01-01 Joel Brobecker <brobecker@adacore.com>
-
- Update year range in copyright notice of all files.
-
-2012-06-23 Doug Evans <dje@google.com>
-
- * gdb-index.h: New file.
-
-2012-05-24 Pedro Alves <palves@redhat.com>
-
- PR gdb/7205
-
- Replace TARGET_SIGNAL_ with GDB_SIGNAL_ throughout.
-
-2012-05-24 Pedro Alves <palves@redhat.com>
-
- PR gdb/7205
-
- Replace target_signal with gdb_signal throughout.
-
-2012-04-12 Mike Frysinger <vapier@gentoo.org>
-
- * callback.h (CB_SYS_argc, CB_SYS_argnlen, CB_SYS_argn): Define.
-
-2012-02-03 Kevin Buettner <kevinb@redhat.com>
-
- * sim-rl78.h: New file.
-
-2011-12-03 Mike Frysinger <vapier@gentoo.org>
-
- * callback.h (cb_get_string): New prototype.
-
-2011-04-14 Mike Frysinger <vapier@gentoo.org>
-
- * remote-sim.h (sim_complete_command): New prototype.
-
-2011-03-05 Mike Frysinger <vapier@gentoo.org>
-
- * sim-bfin.h: New file.
-
-2011-01-11 Andrew Burgess <aburgess@broadcom.com>
-
- * remote-sim.h (sim_store_register): Update the API
- documentation for this function.
-
-2010-09-06 Pedro Alves <pedro@codesourcery.com>
-
- * signals.def: Replace all ANY uses by SET with specific numbers.
- * signals.h (ANY): Remove.
-
-2010-07-31 Jan Kratochvil <jan.kratochvil@redhat.com>
-
- * signals.h (enum target_signal): Move the content to signals.def.
- Include it.
- * signals.def: New file.
-
-2010-06-24 Kevin Buettner <kevinb@redhat.com>
-
- * sim-rx.h (sim_rx_regnum): Add sim_rx_acc_regnum. Adjust
- register order.
-
-2010-04-13 Mike Frysinger <vapier@gentoo.org>
-
- * callback.h: Strip PARAMS from prototypes.
- * remote-sim.h: Likewise.
-
-2010-04-13 Mike Frysinger <vapier@gentoo.org>
-
- * remote-sim.h (sim_write): Add const to buf arg.
-
-2009-11-24 DJ Delorie <dj@redhat.com>
-
- * sim-rx.h: New.
-
-2009-05-18 Jon Beniston <jon@beniston.com>
-
- * sim-lm32.h: New file.
-
-2009-01-07 Hans-Peter Nilsson <hp@axis.com>
-
- * callback.h (struct host_callback_struct): Mark member error as
- pointing to a noreturn function.
-
-2008-02-12 M Ranga Swami Reddy <MR.Swami.Reddy@nsc.com>
-
- * sim-cr16.h: New file.
-
-2008-01-01 Daniel Jacobowitz <dan@codesourcery.com>
-
- Updated copyright notices for most files.
-
-2007-10-15 Daniel Jacobowitz <dan@codesourcery.com>
-
- * sim-ppc.h (sim_spr_register_name): New prototype.
-
-2007-10-11 Jesper Nilsson <jesper.nilsson@axis.com>
-
- * callback.h (cb_is_stdin, cb_is_stdout, cb_is_stderr): Add prototypes.
-
-2007-08-23 Joel Brobecker <brobecker@adacore.com>
-
- Switch the license of all .h files to GPLv3.
-
-2007-01-09 Daniel Jacobowitz <dan@codesourcery.com>
-
- Updated copyright notices for most files.
-
-2005-07-08 Ben Elliston <bje@au.ibm.com>
-
- * callback.h: Remove ANSI_PROTOTYPES conditional code.
-
-2005-01-28 Hans-Peter Nilsson <hp@axis.com>
-
- * callback.h (struct host_callback_struct): New members pipe,
- pipe_empty, pipe_nonempty, ispipe, pipe_buffer and
- target_sizeof_int.
- (CB_SYS_pipe): New macro.
-
- * callback.h: Include "bfd.h".
- (struct host_callback_struct): New member target_endian.
- (cb_store_target_endian): Declare.
-
-2004-12-15 Hans-Peter Nilsson <hp@axis.com>
-
- * callback.h (CB_SYS_truncate, CB_SYS_ftruncate): New macros.
-
-2004-12-13 Hans-Peter Nilsson <hp@axis.com>
-
- * callback.h (struct host_callback_struct): New member lstat.
- (CB_SYS_lstat): New macro.
- (CB_SYS_rename): New macro.
-
-2004-09-08 Michael Snyder <msnyder@redhat.com>
-
- Commited by Corinna Vinschen <vinschen@redhat.com>
- * sim-sh.h: Add new sh2a banked registers.
-
-2004-08-04 Andrew Cagney <cagney@gnu.org>
-
- * sim-ppc.h: Add extern "C" wrapper.
- (enum sim_ppc_regnum): Add full list of SPRs.
-
-2004-08-04 Jim Blandy <jimb@redhat.com>
-
- * sim-ppc.h: New file.
-
-2004-06-25 J"orn Rennecke <joern.rennecke@superh.com>
-
- * callback.h (host_callback_struct): Replace members fdopen and
- alwaysopen with fd_buddy.
- [sim/common: * callback.c: Changed all users. ]
-
-2003-10-31 Kevin Buettner <kevin@redhat.com>
-
- * sim-frv.h: New file.
-
-2003-10-15 J"orn Rennecke <joern.rennecke@superh.com>
-
- * callback.h (struct host_callback_struct): New members ftruncate
- and truncate.
-
-2003-06-10 Corinna Vinschen <vinschen@redhat.com>
-
- * gdb/fileio.h: New file.
-
-2003-05-07 Andrew Cagney <cagney@redhat.com>
-
- * sim-d10v.h (sim_d10v_translate_addr): Add regcache parameter.
- (sim_d10v_translate_imap_addr): Add regcache parameter.
- (sim_d10v_translate_dmap_addr): Ditto.
-
-2003-03-27 Nick Clifton <nickc@redhat.com>
-
- * sim-arm.h (sim_arm_regs): Add iWMMXt registers.
-
-2003-03-20 Nick Clifton <nickc@redhat.com>
-
- * sim-arm.h (sim_arm_regs): Add Maverick co-processor
- registers.
-
-2003-02-27 Andrew Cagney <cagney@redhat.com>
-
- * remote-sim.h (sim_open, sim_load, sim_create_inferior): Rename
- _bfd to bfd.
-
-2003-02-20 Andrew Cagney <ac131313@redhat.com>
-
- * remote-sim.h (SIM_RC): Delete unused SIM_RC_UNKNOWN_BREAKPOINT,
- SIM_RC_INSUFFICIENT_RESOURCES and SIM_RC_DUPLICATE_BREAKPOINT.
- (sim_set_breakpoint, sim_clear_breakpoint): Delete declarations.
- (sim_clear_all_breakpoints, sim_enable_breakpoint): Ditto.
- (sim_enable_all_breakpoints, sim_disable_breakpoint): Ditto.
- (sim_disable_all_breakpoints): Ditto.
-
-2002-12-26 Kazu Hirata <kazu@cs.umass.edu>
-
- * sim-h8300.h: Remove ^M.
-
-2002-07-29 Andrey Volkov <avolkov@transas.com>
-
- * sim-h8300.h: Rename all enums from H8300_ to SIM_H8300_
- prefix.
-
-2002-07-23 Andrey Volkov <avolkov@transas.com>
-
- * sim-h8300.h: New file.
-
-2002-07-17 Andrew Cagney <cagney@redhat.com>
-
- * remote-sim.h: Update copyright.
- (sim_set_callbacks, sim_size, sim_trace)
- (sim_set_trace, sim_set_profile_size, sim_kill): Delete. Moved to
- "sim/common/run-sim.h".
-
-Wed Jul 17 19:36:38 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * sim-sh.h: Add enum constants for sh[1-4], sh3e, sh3?-dsp,
- renumbering the sh-dsp registers to use distinct numbers.
-
-2002-06-15 Andrew Cagney <ac131313@redhat.com>
-
- * sim-arm.h (enum sim_arm_regs): Rename sim_arm_regnum.
-
-2002-06-12 Andrew Cagney <ac131313@redhat.com>
-
- * sim-arm.h: New file.
-
-2002-06-08 Andrew Cagney <cagney@redhat.com>
-
- * callback.h: Copy to here from directory above.
- * remote-sim.h: Copy to here from directory above.
-
-2002-06-01 Andrew Cagney <ac131313@redhat.com>
-
- * sim-d10v.h (sim_d10v_regs): Expand to include all registers.
- Update copyright.
-
-2002-05-23 Andrew Cagney <ac131313@redhat.com>
-
- * sim-d10v.h: New file. Moved from include/sim-d10v.h.
-
-2002-05-10 Elena Zannoni <ezannoni@redhat.com>
-
- * sim-sh.h: New file, for sh gdb<->sim interface.
-
-2002-05-09 Daniel Jacobowitz <drow@mvista.com>
-
- * signals.h: Update comments.
- (enum target_signal): Remove conditional compilation around
- Mach-specific signals. Move them to after TARGET_SIGNAL_DEFAULT.
-
-2002-03-10 Daniel Jacobowitz <drow@mvista.com>
-
- * signals.h: New file, from gdb/defs.h.
-
-
-Copyright (C) 2002-2013 Free Software Foundation, Inc.
-
-Copying and distribution of this file, with or without modification,
-are permitted in any medium without royalty provided the copyright
-notice and this notice are preserved.
-
-Local Variables:
-mode: change-log
-left-margin: 8
-fill-column: 74
-version-control: never
-End:
diff --git a/include/gdb/callback.h b/include/gdb/callback.h
deleted file mode 100644
index f830398aa..000000000
--- a/include/gdb/callback.h
+++ /dev/null
@@ -1,338 +0,0 @@
-/* Remote target system call callback support.
- Copyright 1997-2013 Free Software Foundation, Inc.
- Contributed by Cygnus Solutions.
-
- This file is part of GDB.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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, see <http://www.gnu.org/licenses/>. */
-
-/* This interface isn't intended to be specific to any particular kind
- of remote (hardware, simulator, whatever). As such, support for it
- (e.g. sim/common/callback.c) should *not* live in the simulator source
- tree, nor should it live in the gdb source tree. */
-
-/* There are various ways to handle system calls:
-
- 1) Have a simulator intercept the appropriate trap instruction and
- directly perform the system call on behalf of the target program.
- This is the typical way of handling system calls for embedded targets.
- [Handling system calls for embedded targets isn't that much of an
- oxymoron as running compiler testsuites make use of the capability.]
-
- This method of system call handling is done when STATE_ENVIRONMENT
- is ENVIRONMENT_USER.
-
- 2) Have a simulator emulate the hardware as much as possible.
- If the program running on the real hardware communicates with some sort
- of target manager, one would want to be able to run this program on the
- simulator as well.
-
- This method of system call handling is done when STATE_ENVIRONMENT
- is ENVIRONMENT_OPERATING.
-*/
-
-#ifndef CALLBACK_H
-#define CALLBACK_H
-
-/* ??? The reason why we check for va_start here should be documented. */
-
-#ifndef va_start
-#include <ansidecl.h>
-#include <stdarg.h>
-#endif
-/* Needed for enum bfd_endian. */
-#include "bfd.h"
-
-/* Mapping of host/target values. */
-/* ??? For debugging purposes, one might want to add a string of the
- name of the symbol. */
-
-typedef struct {
- int host_val;
- int target_val;
-} CB_TARGET_DEFS_MAP;
-
-#define MAX_CALLBACK_FDS 10
-
-/* Forward decl for stat/fstat. */
-struct stat;
-
-typedef struct host_callback_struct host_callback;
-
-struct host_callback_struct
-{
- int (*close) (host_callback *,int);
- int (*get_errno) (host_callback *);
- int (*isatty) (host_callback *, int);
- int (*lseek) (host_callback *, int, long , int);
- int (*open) (host_callback *, const char*, int mode);
- int (*read) (host_callback *,int, char *, int);
- int (*read_stdin) ( host_callback *, char *, int);
- int (*rename) (host_callback *, const char *, const char *);
- int (*system) (host_callback *, const char *);
- long (*time) (host_callback *, long *);
- int (*unlink) (host_callback *, const char *);
- int (*write) (host_callback *,int, const char *, int);
- int (*write_stdout) (host_callback *, const char *, int);
- void (*flush_stdout) (host_callback *);
- int (*write_stderr) (host_callback *, const char *, int);
- void (*flush_stderr) (host_callback *);
- int (*stat) (host_callback *, const char *, struct stat *);
- int (*fstat) (host_callback *, int, struct stat *);
- int (*lstat) (host_callback *, const char *, struct stat *);
- int (*ftruncate) (host_callback *, int, long);
- int (*truncate) (host_callback *, const char *, long);
- int (*pipe) (host_callback *, int *);
-
- /* Called by the framework when a read call has emptied a pipe buffer. */
- void (*pipe_empty) (host_callback *, int read_fd, int write_fd);
-
- /* Called by the framework when a write call makes a pipe buffer
- non-empty. */
- void (*pipe_nonempty) (host_callback *, int read_fd, int write_fd);
-
- /* When present, call to the client to give it the oportunity to
- poll any io devices for a request to quit (indicated by a nonzero
- return value). */
- int (*poll_quit) (host_callback *);
-
- /* Used when the target has gone away, so we can close open
- handles and free memory etc etc. */
- int (*shutdown) (host_callback *);
- int (*init) (host_callback *);
-
- /* depreciated, use vprintf_filtered - Talk to the user on a console. */
- void (*printf_filtered) (host_callback *, const char *, ...);
-
- /* Talk to the user on a console. */
- void (*vprintf_filtered) (host_callback *, const char *, va_list);
-
- /* Same as vprintf_filtered but to stderr. */
- void (*evprintf_filtered) (host_callback *, const char *, va_list);
-
- /* Print an error message and "exit".
- In the case of gdb "exiting" means doing a longjmp back to the main
- command loop. */
- void (*error) (host_callback *, const char *, ...)
-#ifdef __GNUC__
- __attribute__ ((__noreturn__))
-#endif
- ;
-
- int last_errno; /* host format */
-
- int fdmap[MAX_CALLBACK_FDS];
- /* fd_buddy is used to contruct circular lists of target fds that point to
- the same host fd. A uniquely mapped fd points to itself; for a closed
- one, fd_buddy has the value -1. The host file descriptors for stdin /
- stdout / stderr are never closed by the simulators, so they are put
- in a special fd_buddy circular list which also has MAX_CALLBACK_FDS
- as a member. */
- /* ??? We don't have a callback entry for dup, although it is trival to
- implement now. */
- short fd_buddy[MAX_CALLBACK_FDS+1];
-
- /* 0 = none, >0 = reader (index of writer),
- <0 = writer (negative index of reader).
- If abs (ispipe[N]) == N, then N is an end of a pipe whose other
- end is closed. */
- short ispipe[MAX_CALLBACK_FDS];
-
- /* A writer stores the buffer at its index. Consecutive writes
- realloc the buffer and add to the size. The reader indicates the
- read part in its .size, until it has consumed it all, at which
- point it deallocates the buffer and zeroes out both sizes. */
- struct pipe_write_buffer
- {
- int size;
- char *buffer;
- } pipe_buffer[MAX_CALLBACK_FDS];
-
- /* System call numbers. */
- CB_TARGET_DEFS_MAP *syscall_map;
- /* Errno values. */
- CB_TARGET_DEFS_MAP *errno_map;
- /* Flags to the open system call. */
- CB_TARGET_DEFS_MAP *open_map;
- /* Signal numbers. */
- CB_TARGET_DEFS_MAP *signal_map;
- /* Layout of `stat' struct.
- The format is a series of "name,length" pairs separated by colons.
- Empty space is indicated with a `name' of "space".
- All padding must be explicitly mentioned.
- Lengths are in bytes. If this needs to be extended to bits,
- use "name.bits".
- Example: "st_dev,4:st_ino,4:st_mode,4:..." */
- const char *stat_map;
-
- enum bfd_endian target_endian;
-
- /* Size of an "int" on the target (for syscalls whose ABI uses "int").
- This must include padding, and only padding-at-higher-address is
- supported. For example, a 64-bit target with 32-bit int:s which
- are padded to 64 bits when in an array, should supposedly set this
- to 8. The default is 4 which matches ILP32 targets and 64-bit
- targets with 32-bit ints and no padding. */
- int target_sizeof_int;
-
- /* Marker for those wanting to do sanity checks.
- This should remain the last member of this struct to help catch
- miscompilation errors. */
-#define HOST_CALLBACK_MAGIC 4705 /* teds constant */
- int magic;
-};
-
-extern host_callback default_callback;
-
-/* Canonical versions of system call numbers.
- It's not intended to willy-nilly throw every system call ever heard
- of in here. Only include those that have an important use.
- ??? One can certainly start a discussion over the ones that are currently
- here, but that will always be true. */
-
-/* These are used by the ANSI C support of libc. */
-#define CB_SYS_exit 1
-#define CB_SYS_open 2
-#define CB_SYS_close 3
-#define CB_SYS_read 4
-#define CB_SYS_write 5
-#define CB_SYS_lseek 6
-#define CB_SYS_unlink 7
-#define CB_SYS_getpid 8
-#define CB_SYS_kill 9
-#define CB_SYS_fstat 10
-/*#define CB_SYS_sbrk 11 - not currently a system call, but reserved. */
-
-/* ARGV support. */
-#define CB_SYS_argvlen 12
-#define CB_SYS_argv 13
-
-/* These are extras added for one reason or another. */
-#define CB_SYS_chdir 14
-#define CB_SYS_stat 15
-#define CB_SYS_chmod 16
-#define CB_SYS_utime 17
-#define CB_SYS_time 18
-
-/* More standard syscalls. */
-#define CB_SYS_lstat 19
-#define CB_SYS_rename 20
-#define CB_SYS_truncate 21
-#define CB_SYS_ftruncate 22
-#define CB_SYS_pipe 23
-
-/* New ARGV support. */
-#define CB_SYS_argc 24
-#define CB_SYS_argnlen 25
-#define CB_SYS_argn 26
-
-/* Struct use to pass and return information necessary to perform a
- system call. */
-/* FIXME: Need to consider target word size. */
-
-typedef struct cb_syscall {
- /* The target's value of what system call to perform. */
- int func;
- /* The arguments to the syscall. */
- long arg1, arg2, arg3, arg4;
-
- /* The result. */
- long result;
- /* Some system calls have two results. */
- long result2;
- /* The target's errno value, or 0 if success.
- This is converted to the target's value with host_to_target_errno. */
- int errcode;
-
- /* Working space to be used by memory read/write callbacks. */
- PTR p1;
- PTR p2;
- long x1,x2;
-
- /* Callbacks for reading/writing memory (e.g. for read/write syscalls).
- ??? long or unsigned long might be better to use for the `count'
- argument here. We mimic sim_{read,write} for now. Be careful to
- test any changes with -Wall -Werror, mixed signed comparisons
- will get you. */
- int (*read_mem) (host_callback * /*cb*/, struct cb_syscall * /*sc*/,
- unsigned long /*taddr*/, char * /*buf*/,
- int /*bytes*/);
- int (*write_mem) (host_callback * /*cb*/, struct cb_syscall * /*sc*/,
- unsigned long /*taddr*/, const char * /*buf*/,
- int /*bytes*/);
-
- /* For sanity checking, should be last entry. */
- int magic;
-} CB_SYSCALL;
-
-/* Magic number sanity checker. */
-#define CB_SYSCALL_MAGIC 0x12344321
-
-/* Macro to initialize CB_SYSCALL. Called first, before filling in
- any fields. */
-#define CB_SYSCALL_INIT(sc) \
-do { \
- memset ((sc), 0, sizeof (*(sc))); \
- (sc)->magic = CB_SYSCALL_MAGIC; \
-} while (0)
-
-/* Return codes for various interface routines. */
-
-typedef enum {
- CB_RC_OK = 0,
- /* generic error */
- CB_RC_ERR,
- /* either file not found or no read access */
- CB_RC_ACCESS,
- CB_RC_NO_MEM
-} CB_RC;
-
-/* Read in target values for system call numbers, errno values, signals. */
-CB_RC cb_read_target_syscall_maps (host_callback *, const char *);
-
-/* Translate target to host syscall function numbers. */
-int cb_target_to_host_syscall (host_callback *, int);
-
-/* Translate host to target errno value. */
-int cb_host_to_target_errno (host_callback *, int);
-
-/* Translate target to host open flags. */
-int cb_target_to_host_open (host_callback *, int);
-
-/* Translate target signal number to host. */
-int cb_target_to_host_signal (host_callback *, int);
-
-/* Translate host signal number to target. */
-int cb_host_to_gdb_signal (host_callback *, int);
-
-/* Translate host stat struct to target.
- If stat struct ptr is NULL, just compute target stat struct size.
- Result is size of target stat struct or 0 if error. */
-int cb_host_to_target_stat (host_callback *, const struct stat *, PTR);
-
-/* Translate a value to target endian. */
-void cb_store_target_endian (host_callback *, char *, int, long);
-
-/* Tests for special fds. */
-int cb_is_stdin (host_callback *, int);
-int cb_is_stdout (host_callback *, int);
-int cb_is_stderr (host_callback *, int);
-
-/* Read a string out of the target. */
-int cb_get_string (host_callback *, CB_SYSCALL *, char *, int, unsigned long);
-
-/* Perform a system call. */
-CB_RC cb_syscall (host_callback *, CB_SYSCALL *);
-
-#endif
diff --git a/include/gdb/fileio.h b/include/gdb/fileio.h
deleted file mode 100644
index 73275d436..000000000
--- a/include/gdb/fileio.h
+++ /dev/null
@@ -1,144 +0,0 @@
-/* Hosted File I/O interface definitions, for GDB, the GNU Debugger.
-
- Copyright 2003-2013 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 3 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, see <http://www.gnu.org/licenses/>. */
-
-#ifndef GDB_FILEIO_H_
-#define GDB_FILEIO_H_
-
-/* The following flags are defined to be independent of the host
- as well as the target side implementation of these constants.
- All constants are defined with a leading FILEIO_ in the name
- to allow the usage of these constants together with the
- corresponding implementation dependent constants in one module. */
-
-/* open(2) flags */
-#define FILEIO_O_RDONLY 0x0
-#define FILEIO_O_WRONLY 0x1
-#define FILEIO_O_RDWR 0x2
-#define FILEIO_O_APPEND 0x8
-#define FILEIO_O_CREAT 0x200
-#define FILEIO_O_TRUNC 0x400
-#define FILEIO_O_EXCL 0x800
-#define FILEIO_O_SUPPORTED (FILEIO_O_RDONLY | FILEIO_O_WRONLY| \
- FILEIO_O_RDWR | FILEIO_O_APPEND| \
- FILEIO_O_CREAT | FILEIO_O_TRUNC| \
- FILEIO_O_EXCL)
-
-/* mode_t bits */
-#define FILEIO_S_IFREG 0100000
-#define FILEIO_S_IFDIR 040000
-#define FILEIO_S_IFCHR 020000
-#define FILEIO_S_IRUSR 0400
-#define FILEIO_S_IWUSR 0200
-#define FILEIO_S_IXUSR 0100
-#define FILEIO_S_IRWXU 0700
-#define FILEIO_S_IRGRP 040
-#define FILEIO_S_IWGRP 020
-#define FILEIO_S_IXGRP 010
-#define FILEIO_S_IRWXG 070
-#define FILEIO_S_IROTH 04
-#define FILEIO_S_IWOTH 02
-#define FILEIO_S_IXOTH 01
-#define FILEIO_S_IRWXO 07
-#define FILEIO_S_SUPPORTED (FILEIO_S_IFREG|FILEIO_S_IFDIR| \
- FILEIO_S_IRWXU|FILEIO_S_IRWXG| \
- FILEIO_S_IRWXO)
-
-/* lseek(2) flags */
-#define FILEIO_SEEK_SET 0
-#define FILEIO_SEEK_CUR 1
-#define FILEIO_SEEK_END 2
-
-/* errno values */
-#define FILEIO_EPERM 1
-#define FILEIO_ENOENT 2
-#define FILEIO_EINTR 4
-#define FILEIO_EIO 5
-#define FILEIO_EBADF 9
-#define FILEIO_EACCES 13
-#define FILEIO_EFAULT 14
-#define FILEIO_EBUSY 16
-#define FILEIO_EEXIST 17
-#define FILEIO_ENODEV 19
-#define FILEIO_ENOTDIR 20
-#define FILEIO_EISDIR 21
-#define FILEIO_EINVAL 22
-#define FILEIO_ENFILE 23
-#define FILEIO_EMFILE 24
-#define FILEIO_EFBIG 27
-#define FILEIO_ENOSPC 28
-#define FILEIO_ESPIPE 29
-#define FILEIO_EROFS 30
-#define FILEIO_ENOSYS 88
-#define FILEIO_ENAMETOOLONG 91
-#define FILEIO_EUNKNOWN 9999
-
-/* limits */
-#define FILEIO_INT_MIN -2147483648L
-#define FILEIO_INT_MAX 2147483647L
-#define FILEIO_UINT_MAX 4294967295UL
-#define FILEIO_LONG_MIN -9223372036854775808LL
-#define FILEIO_LONG_MAX 9223372036854775807LL
-#define FILEIO_ULONG_MAX 18446744073709551615ULL
-
-/* Integral types as used in protocol. */
-#if 0
-typedef __int32_t fio_int_t;
-typedef __uint32_t fio_uint_t, fio_mode_t, fio_time_t;
-typedef __int64_t fio_long_t;
-typedef __uint64_t fio_ulong_t;
-#endif
-
-#define FIO_INT_LEN 4
-#define FIO_UINT_LEN 4
-#define FIO_MODE_LEN 4
-#define FIO_TIME_LEN 4
-#define FIO_LONG_LEN 8
-#define FIO_ULONG_LEN 8
-
-typedef char fio_int_t[FIO_INT_LEN];
-typedef char fio_uint_t[FIO_UINT_LEN];
-typedef char fio_mode_t[FIO_MODE_LEN];
-typedef char fio_time_t[FIO_TIME_LEN];
-typedef char fio_long_t[FIO_LONG_LEN];
-typedef char fio_ulong_t[FIO_ULONG_LEN];
-
-/* Struct stat as used in protocol. For complete independence
- of host/target systems, it's defined as an array with offsets
- to the members. */
-
-struct fio_stat {
- fio_uint_t fst_dev;
- fio_uint_t fst_ino;
- fio_mode_t fst_mode;
- fio_uint_t fst_nlink;
- fio_uint_t fst_uid;
- fio_uint_t fst_gid;
- fio_uint_t fst_rdev;
- fio_ulong_t fst_size;
- fio_ulong_t fst_blksize;
- fio_ulong_t fst_blocks;
- fio_time_t fst_atime;
- fio_time_t fst_mtime;
- fio_time_t fst_ctime;
-};
-
-struct fio_timeval {
- fio_time_t ftv_sec;
- fio_long_t ftv_usec;
-};
-
-#endif /* GDB_FILEIO_H_ */
diff --git a/include/gdb/gdb-index.h b/include/gdb/gdb-index.h
deleted file mode 100644
index b43c68f9e..000000000
--- a/include/gdb/gdb-index.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/* Public attributes of the .gdb_index section.
- Copyright 2012 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 3 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, see <http://www.gnu.org/licenses/>. */
-
-/* This file contains values for understanding the .gdb_index section
- needed by more than just GDB, e.g. readelf. */
-
-#ifndef GDB_INDEX_H
-#define GDB_INDEX_H
-
-/* Each symbol in .gdb_index refers to a set of CUs that defines the symbol.
- Each CU is represented by a 32 bit number that is the index of the CU in
- the CU table, plus some attributes of the use of the symbol in that CU.
-
- The values are defined such that if all the bits are zero, then no
- special meaning is assigned to any of them. This is done to preserve
- compatibility with older indices. The way this is done is to specify
- that if the GDB_INDEX_SYMBOL_KIND value is zero then all other attribute
- bits must be zero.
-
- 0-23 CU index
- 24-27 reserved
- 28-30 symbol kind
- 31 0 == global, 1 == static
-
- Bits 24-27 are reserved because it's easier to relax restrictions than
- it is to impose them after the fact. At present 24 bits to represent
- the CU index is plenty. If we need more bits for the CU index or for
- attributes then we have them. */
-
-/* Whether the symbol is in GLOBAL_BLOCK (== 0) or STATIC_BLOCK (== 1). */
-#define GDB_INDEX_SYMBOL_STATIC_SHIFT 31
-#define GDB_INDEX_SYMBOL_STATIC_MASK 1
-#define GDB_INDEX_SYMBOL_STATIC_VALUE(cu_index) \
- (((cu_index) >> GDB_INDEX_SYMBOL_STATIC_SHIFT) & GDB_INDEX_SYMBOL_STATIC_MASK)
-#define GDB_INDEX_SYMBOL_STATIC_SET_VALUE(cu_index, value) \
- do { \
- (cu_index) |= (((value) & GDB_INDEX_SYMBOL_STATIC_MASK) \
- << GDB_INDEX_SYMBOL_STATIC_SHIFT); \
- } while (0)
-
-/* The kind of the symbol.
- We don't use GDB's internal values as these numbers are published
- so that other tools can build and read .gdb_index. */
-
-typedef enum {
- /* Special value to indicate no attributes are present. */
- GDB_INDEX_SYMBOL_KIND_NONE = 0,
- GDB_INDEX_SYMBOL_KIND_TYPE = 1,
- GDB_INDEX_SYMBOL_KIND_VARIABLE = 2,
- GDB_INDEX_SYMBOL_KIND_FUNCTION = 3,
- GDB_INDEX_SYMBOL_KIND_OTHER = 4,
- /* We currently allocate 3 bits to record the symbol kind.
- Give the unused bits a value so gdb will print them sensibly. */
- GDB_INDEX_SYMBOL_KIND_UNUSED5 = 5,
- GDB_INDEX_SYMBOL_KIND_UNUSED6 = 6,
- GDB_INDEX_SYMBOL_KIND_UNUSED7 = 7
-} gdb_index_symbol_kind;
-
-#define GDB_INDEX_SYMBOL_KIND_SHIFT 28
-#define GDB_INDEX_SYMBOL_KIND_MASK 7
-#define GDB_INDEX_SYMBOL_KIND_VALUE(cu_index) \
- ((gdb_index_symbol_kind) (((cu_index) >> GDB_INDEX_SYMBOL_KIND_SHIFT) \
- & GDB_INDEX_SYMBOL_KIND_MASK))
-#define GDB_INDEX_SYMBOL_KIND_SET_VALUE(cu_index, value) \
- do { \
- (cu_index) |= (((value) & GDB_INDEX_SYMBOL_KIND_MASK) \
- << GDB_INDEX_SYMBOL_KIND_SHIFT); \
- } while (0)
-
-#define GDB_INDEX_RESERVED_SHIFT 24
-#define GDB_INDEX_RESERVED_MASK 15
-#define GDB_INDEX_RESERVED_VALUE(cu_index) \
- (((cu_index) >> GDB_INDEX_RESERVED_SHIFT) & GDB_INDEX_RESERVED_MASK)
-
-/* CU index. */
-#define GDB_INDEX_CU_BITSIZE 24
-#define GDB_INDEX_CU_MASK ((1 << GDB_INDEX_CU_BITSIZE) - 1)
-#define GDB_INDEX_CU_VALUE(cu_index) ((cu_index) & GDB_INDEX_CU_MASK)
-#define GDB_INDEX_CU_SET_VALUE(cu_index, value) \
- do { \
- (cu_index) |= (value) & GDB_INDEX_CU_MASK; \
- } while (0)
-
-#endif /* GDB_INDEX_H */
diff --git a/include/gdb/remote-sim.h b/include/gdb/remote-sim.h
deleted file mode 100644
index 113030c82..000000000
--- a/include/gdb/remote-sim.h
+++ /dev/null
@@ -1,287 +0,0 @@
-/* This file defines the interface between the simulator and gdb.
-
- Copyright 1993-2013 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 3 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, see <http://www.gnu.org/licenses/>. */
-
-#if !defined (REMOTE_SIM_H)
-#define REMOTE_SIM_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* This file is used when building stand-alone simulators, so isolate this
- file from gdb. */
-
-/* Pick up CORE_ADDR_TYPE if defined (from gdb), otherwise use same value as
- gdb does (unsigned int - from defs.h). */
-
-#ifndef CORE_ADDR_TYPE
-typedef unsigned int SIM_ADDR;
-#else
-typedef CORE_ADDR_TYPE SIM_ADDR;
-#endif
-
-
-/* Semi-opaque type used as result of sim_open and passed back to all
- other routines. "desc" is short for "descriptor".
- It is up to each simulator to define `sim_state'. */
-
-typedef struct sim_state *SIM_DESC;
-
-
-/* Values for `kind' arg to sim_open. */
-
-typedef enum {
- SIM_OPEN_STANDALONE, /* simulator used standalone (run.c) */
- SIM_OPEN_DEBUG /* simulator used by debugger (gdb) */
-} SIM_OPEN_KIND;
-
-
-/* Return codes from various functions. */
-
-typedef enum {
- SIM_RC_FAIL = 0,
- SIM_RC_OK = 1
-} SIM_RC;
-
-
-/* The bfd struct, as an opaque type. */
-
-struct bfd;
-
-
-/* Main simulator entry points. */
-
-
-/* Create a fully initialized simulator instance.
-
- (This function is called when the simulator is selected from the
- gdb command line.)
-
- KIND specifies how the simulator shall be used. Currently there
- are only two kinds: stand-alone and debug.
-
- CALLBACK specifies a standard host callback (defined in callback.h).
-
- ABFD, when non NULL, designates a target program. The program is
- not loaded.
-
- ARGV is a standard ARGV pointer such as that passed from the
- command line. The syntax of the argument list is is assumed to be
- ``SIM-PROG { SIM-OPTION } [ TARGET-PROGRAM { TARGET-OPTION } ]''.
- The trailing TARGET-PROGRAM and args are only valid for a
- stand-alone simulator.
-
- On success, the result is a non NULL descriptor that shall be
- passed to the other sim_foo functions. While the simulator
- configuration can be parameterized by (in decreasing precedence)
- ARGV's SIM-OPTION, ARGV's TARGET-PROGRAM and the ABFD argument, the
- successful creation of the simulator shall not dependent on the
- presence of any of these arguments/options.
-
- Hardware simulator: The created simulator shall be sufficiently
- initialized to handle, with out restrictions any client requests
- (including memory reads/writes, register fetch/stores and a
- resume).
-
- Process simulator: that process is not created until a call to
- sim_create_inferior. FIXME: What should the state of the simulator
- be? */
-
-SIM_DESC sim_open (SIM_OPEN_KIND kind, struct host_callback_struct *callback, struct bfd *abfd, char **argv);
-
-
-/* Destory a simulator instance.
-
- QUITTING is non-zero if we cannot hang on errors.
-
- This may involve freeing target memory and closing any open files
- and mmap'd areas. You cannot assume sim_kill has already been
- called. */
-
-void sim_close (SIM_DESC sd, int quitting);
-
-
-/* Load program PROG into the simulators memory.
-
- If ABFD is non-NULL, the bfd for the file has already been opened.
- The result is a return code indicating success.
-
- Hardware simulator: Normally, each program section is written into
- memory according to that sections LMA using physical (direct)
- addressing. The exception being systems, such as PPC/CHRP, which
- support more complicated program loaders. A call to this function
- should not effect the state of the processor registers. Multiple
- calls to this function are permitted and have an accumulative
- effect.
-
- Process simulator: Calls to this function may be ignored.
-
- FIXME: Most hardware simulators load the image at the VMA using
- virtual addressing.
-
- FIXME: For some hardware targets, before a loaded program can be
- executed, it requires the manipulation of VM registers and tables.
- Such manipulation should probably (?) occure in
- sim_create_inferior. */
-
-SIM_RC sim_load (SIM_DESC sd, char *prog, struct bfd *abfd, int from_tty);
-
-
-/* Prepare to run the simulated program.
-
- ABFD, if not NULL, provides initial processor state information.
- ARGV and ENV, if non NULL, are NULL terminated lists of pointers.
-
- Hardware simulator: This function shall initialize the processor
- registers to a known value. The program counter and possibly stack
- pointer shall be set using information obtained from ABFD (or
- hardware reset defaults). ARGV and ENV, dependant on the target
- ABI, may be written to memory.
-
- Process simulator: After a call to this function, a new process
- instance shall exist. The TEXT, DATA, BSS and stack regions shall
- all be initialized, ARGV and ENV shall be written to process
- address space (according to the applicable ABI) and the program
- counter and stack pointer set accordingly. */
-
-SIM_RC sim_create_inferior (SIM_DESC sd, struct bfd *abfd, char **argv, char **env);
-
-
-/* Fetch LENGTH bytes of the simulated program's memory. Start fetch
- at virtual address MEM and store in BUF. Result is number of bytes
- read, or zero if error. */
-
-int sim_read (SIM_DESC sd, SIM_ADDR mem, unsigned char *buf, int length);
-
-
-/* Store LENGTH bytes from BUF into the simulated program's
- memory. Store bytes starting at virtual address MEM. Result is
- number of bytes write, or zero if error. */
-
-int sim_write (SIM_DESC sd, SIM_ADDR mem, const unsigned char *buf, int length);
-
-
-/* Fetch register REGNO storing its raw (target endian) value in the
- LENGTH byte buffer BUF. Return the actual size of the register or
- zero if REGNO is not applicable.
-
- Legacy implementations ignore LENGTH and always return -1.
-
- If LENGTH does not match the size of REGNO no data is transfered
- (the actual register size is still returned). */
-
-int sim_fetch_register (SIM_DESC sd, int regno, unsigned char *buf, int length);
-
-
-/* Store register REGNO from the raw (target endian) value in BUF.
-
- Return the actual size of the register, any size not equal to
- LENGTH indicates the register was not updated correctly.
-
- Return a LENGTH of -1 to indicate the register was not updated
- and an error has occurred.
-
- Return a LENGTH of 0 to indicate the register was not updated
- but no error has occurred. */
-
-int sim_store_register (SIM_DESC sd, int regno, unsigned char *buf, int length);
-
-
-/* Print whatever statistics the simulator has collected.
-
- VERBOSE is currently unused and must always be zero. */
-
-void sim_info (SIM_DESC sd, int verbose);
-
-
-/* Run (or resume) the simulated program.
-
- STEP, when non-zero indicates that only a single simulator cycle
- should be emulated.
-
- SIGGNAL, if non-zero is a (HOST) SIGRC value indicating the type of
- event (hardware interrupt, signal) to be delivered to the simulated
- program.
-
- Hardware simulator: If the SIGRC value returned by
- sim_stop_reason() is passed back to the simulator via SIGGNAL then
- the hardware simulator shall correctly deliver the hardware event
- indicated by that signal. If a value of zero is passed in then the
- simulation will continue as if there were no outstanding signal.
- The effect of any other SIGGNAL value is is implementation
- dependant.
-
- Process simulator: If SIGRC is non-zero then the corresponding
- signal is delivered to the simulated program and execution is then
- continued. A zero SIGRC value indicates that the program should
- continue as normal. */
-
-void sim_resume (SIM_DESC sd, int step, int siggnal);
-
-
-/* Asynchronous request to stop the simulation.
- A nonzero return indicates that the simulator is able to handle
- the request */
-
-int sim_stop (SIM_DESC sd);
-
-
-/* Fetch the REASON why the program stopped.
-
- SIM_EXITED: The program has terminated. SIGRC indicates the target
- dependant exit status.
-
- SIM_STOPPED: The program has stopped. SIGRC uses the host's signal
- numbering as a way of identifying the reaon: program interrupted by
- user via a sim_stop request (SIGINT); a breakpoint instruction
- (SIGTRAP); a completed single step (SIGTRAP); an internal error
- condition (SIGABRT); an illegal instruction (SIGILL); Access to an
- undefined memory region (SIGSEGV); Mis-aligned memory access
- (SIGBUS). For some signals information in addition to the signal
- number may be retained by the simulator (e.g. offending address),
- that information is not directly accessable via this interface.
-
- SIM_SIGNALLED: The program has been terminated by a signal. The
- simulator has encountered target code that causes the the program
- to exit with signal SIGRC.
-
- SIM_RUNNING, SIM_POLLING: The return of one of these values
- indicates a problem internal to the simulator. */
-
-enum sim_stop { sim_running, sim_polling, sim_exited, sim_stopped, sim_signalled };
-
-void sim_stop_reason (SIM_DESC sd, enum sim_stop *reason, int *sigrc);
-
-
-/* Passthru for other commands that the simulator might support.
- Simulators should be prepared to deal with any combination of NULL
- or empty CMD. */
-
-void sim_do_command (SIM_DESC sd, char *cmd);
-
-/* Complete a command based on the available sim commands. Returns an
- array of possible matches. */
-
-char **sim_complete_command (SIM_DESC sd, const char *text, const char *word);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* !defined (REMOTE_SIM_H) */
diff --git a/include/gdb/signals.def b/include/gdb/signals.def
deleted file mode 100644
index 637d00def..000000000
--- a/include/gdb/signals.def
+++ /dev/null
@@ -1,200 +0,0 @@
-/* Target signal numbers for GDB and the GDB remote protocol.
- Copyright 2010-2013 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 3 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, see <http://www.gnu.org/licenses/>. */
-
-/* Used some places (e.g. stop_signal) to record the concept that
- there is no signal. */
-SET (GDB_SIGNAL_0, 0, "0", "Signal 0")
-#define GDB_SIGNAL_FIRST GDB_SIGNAL_0
-SET (GDB_SIGNAL_HUP, 1, "SIGHUP", "Hangup")
-SET (GDB_SIGNAL_INT, 2, "SIGINT", "Interrupt")
-SET (GDB_SIGNAL_QUIT, 3, "SIGQUIT", "Quit")
-SET (GDB_SIGNAL_ILL, 4, "SIGILL", "Illegal instruction")
-SET (GDB_SIGNAL_TRAP, 5, "SIGTRAP", "Trace/breakpoint trap")
-SET (GDB_SIGNAL_ABRT, 6, "SIGABRT", "Aborted")
-SET (GDB_SIGNAL_EMT, 7, "SIGEMT", "Emulation trap")
-SET (GDB_SIGNAL_FPE, 8, "SIGFPE", "Arithmetic exception")
-SET (GDB_SIGNAL_KILL, 9, "SIGKILL", "Killed")
-SET (GDB_SIGNAL_BUS, 10, "SIGBUS", "Bus error")
-SET (GDB_SIGNAL_SEGV, 11, "SIGSEGV", "Segmentation fault")
-SET (GDB_SIGNAL_SYS, 12, "SIGSYS", "Bad system call")
-SET (GDB_SIGNAL_PIPE, 13, "SIGPIPE", "Broken pipe")
-SET (GDB_SIGNAL_ALRM, 14, "SIGALRM", "Alarm clock")
-SET (GDB_SIGNAL_TERM, 15, "SIGTERM", "Terminated")
-SET (GDB_SIGNAL_URG, 16, "SIGURG", "Urgent I/O condition")
-SET (GDB_SIGNAL_STOP, 17, "SIGSTOP", "Stopped (signal)")
-SET (GDB_SIGNAL_TSTP, 18, "SIGTSTP", "Stopped (user)")
-SET (GDB_SIGNAL_CONT, 19, "SIGCONT", "Continued")
-SET (GDB_SIGNAL_CHLD, 20, "SIGCHLD", "Child status changed")
-SET (GDB_SIGNAL_TTIN, 21, "SIGTTIN", "Stopped (tty input)")
-SET (GDB_SIGNAL_TTOU, 22, "SIGTTOU", "Stopped (tty output)")
-SET (GDB_SIGNAL_IO, 23, "SIGIO", "I/O possible")
-SET (GDB_SIGNAL_XCPU, 24, "SIGXCPU", "CPU time limit exceeded")
-SET (GDB_SIGNAL_XFSZ, 25, "SIGXFSZ", "File size limit exceeded")
-SET (GDB_SIGNAL_VTALRM, 26, "SIGVTALRM", "Virtual timer expired")
-SET (GDB_SIGNAL_PROF, 27, "SIGPROF", "Profiling timer expired")
-SET (GDB_SIGNAL_WINCH, 28, "SIGWINCH", "Window size changed")
-SET (GDB_SIGNAL_LOST, 29, "SIGLOST", "Resource lost")
-SET (GDB_SIGNAL_USR1, 30, "SIGUSR1", "User defined signal 1")
-SET (GDB_SIGNAL_USR2, 31, "SIGUSR2", "User defined signal 2")
-SET (GDB_SIGNAL_PWR, 32, "SIGPWR", "Power fail/restart")
-/* Similar to SIGIO. Perhaps they should have the same number. */
-SET (GDB_SIGNAL_POLL, 33, "SIGPOLL", "Pollable event occurred")
-SET (GDB_SIGNAL_WIND, 34, "SIGWIND", "SIGWIND")
-SET (GDB_SIGNAL_PHONE, 35, "SIGPHONE", "SIGPHONE")
-SET (GDB_SIGNAL_WAITING, 36, "SIGWAITING", "Process's LWPs are blocked")
-SET (GDB_SIGNAL_LWP, 37, "SIGLWP", "Signal LWP")
-SET (GDB_SIGNAL_DANGER, 38, "SIGDANGER", "Swap space dangerously low")
-SET (GDB_SIGNAL_GRANT, 39, "SIGGRANT", "Monitor mode granted")
-SET (GDB_SIGNAL_RETRACT, 40, "SIGRETRACT",
- "Need to relinquish monitor mode")
-SET (GDB_SIGNAL_MSG, 41, "SIGMSG", "Monitor mode data available")
-SET (GDB_SIGNAL_SOUND, 42, "SIGSOUND", "Sound completed")
-SET (GDB_SIGNAL_SAK, 43, "SIGSAK", "Secure attention")
-SET (GDB_SIGNAL_PRIO, 44, "SIGPRIO", "SIGPRIO")
-SET (GDB_SIGNAL_REALTIME_33, 45, "SIG33", "Real-time event 33")
-SET (GDB_SIGNAL_REALTIME_34, 46, "SIG34", "Real-time event 34")
-SET (GDB_SIGNAL_REALTIME_35, 47, "SIG35", "Real-time event 35")
-SET (GDB_SIGNAL_REALTIME_36, 48, "SIG36", "Real-time event 36")
-SET (GDB_SIGNAL_REALTIME_37, 49, "SIG37", "Real-time event 37")
-SET (GDB_SIGNAL_REALTIME_38, 50, "SIG38", "Real-time event 38")
-SET (GDB_SIGNAL_REALTIME_39, 51, "SIG39", "Real-time event 39")
-SET (GDB_SIGNAL_REALTIME_40, 52, "SIG40", "Real-time event 40")
-SET (GDB_SIGNAL_REALTIME_41, 53, "SIG41", "Real-time event 41")
-SET (GDB_SIGNAL_REALTIME_42, 54, "SIG42", "Real-time event 42")
-SET (GDB_SIGNAL_REALTIME_43, 55, "SIG43", "Real-time event 43")
-SET (GDB_SIGNAL_REALTIME_44, 56, "SIG44", "Real-time event 44")
-SET (GDB_SIGNAL_REALTIME_45, 57, "SIG45", "Real-time event 45")
-SET (GDB_SIGNAL_REALTIME_46, 58, "SIG46", "Real-time event 46")
-SET (GDB_SIGNAL_REALTIME_47, 59, "SIG47", "Real-time event 47")
-SET (GDB_SIGNAL_REALTIME_48, 60, "SIG48", "Real-time event 48")
-SET (GDB_SIGNAL_REALTIME_49, 61, "SIG49", "Real-time event 49")
-SET (GDB_SIGNAL_REALTIME_50, 62, "SIG50", "Real-time event 50")
-SET (GDB_SIGNAL_REALTIME_51, 63, "SIG51", "Real-time event 51")
-SET (GDB_SIGNAL_REALTIME_52, 64, "SIG52", "Real-time event 52")
-SET (GDB_SIGNAL_REALTIME_53, 65, "SIG53", "Real-time event 53")
-SET (GDB_SIGNAL_REALTIME_54, 66, "SIG54", "Real-time event 54")
-SET (GDB_SIGNAL_REALTIME_55, 67, "SIG55", "Real-time event 55")
-SET (GDB_SIGNAL_REALTIME_56, 68, "SIG56", "Real-time event 56")
-SET (GDB_SIGNAL_REALTIME_57, 69, "SIG57", "Real-time event 57")
-SET (GDB_SIGNAL_REALTIME_58, 70, "SIG58", "Real-time event 58")
-SET (GDB_SIGNAL_REALTIME_59, 71, "SIG59", "Real-time event 59")
-SET (GDB_SIGNAL_REALTIME_60, 72, "SIG60", "Real-time event 60")
-SET (GDB_SIGNAL_REALTIME_61, 73, "SIG61", "Real-time event 61")
-SET (GDB_SIGNAL_REALTIME_62, 74, "SIG62", "Real-time event 62")
-SET (GDB_SIGNAL_REALTIME_63, 75, "SIG63", "Real-time event 63")
-
-/* Used internally by Solaris threads. See signal(5) on Solaris. */
-SET (GDB_SIGNAL_CANCEL, 76, "SIGCANCEL", "LWP internal signal")
-
-/* Yes, this pains me, too. But LynxOS didn't have SIG32, and now
- GNU/Linux does, and we can't disturb the numbering, since it's
- part of the remote protocol. Note that in some GDB's
- GDB_SIGNAL_REALTIME_32 is number 76. */
-SET (GDB_SIGNAL_REALTIME_32, 77, "SIG32", "Real-time event 32")
-/* Yet another pain, IRIX 6 has SIG64. */
-SET (GDB_SIGNAL_REALTIME_64, 78, "SIG64", "Real-time event 64")
-/* Yet another pain, GNU/Linux MIPS might go up to 128. */
-SET (GDB_SIGNAL_REALTIME_65, 79, "SIG65", "Real-time event 65")
-SET (GDB_SIGNAL_REALTIME_66, 80, "SIG66", "Real-time event 66")
-SET (GDB_SIGNAL_REALTIME_67, 81, "SIG67", "Real-time event 67")
-SET (GDB_SIGNAL_REALTIME_68, 82, "SIG68", "Real-time event 68")
-SET (GDB_SIGNAL_REALTIME_69, 83, "SIG69", "Real-time event 69")
-SET (GDB_SIGNAL_REALTIME_70, 84, "SIG70", "Real-time event 70")
-SET (GDB_SIGNAL_REALTIME_71, 85, "SIG71", "Real-time event 71")
-SET (GDB_SIGNAL_REALTIME_72, 86, "SIG72", "Real-time event 72")
-SET (GDB_SIGNAL_REALTIME_73, 87, "SIG73", "Real-time event 73")
-SET (GDB_SIGNAL_REALTIME_74, 88, "SIG74", "Real-time event 74")
-SET (GDB_SIGNAL_REALTIME_75, 89, "SIG75", "Real-time event 75")
-SET (GDB_SIGNAL_REALTIME_76, 90, "SIG76", "Real-time event 76")
-SET (GDB_SIGNAL_REALTIME_77, 91, "SIG77", "Real-time event 77")
-SET (GDB_SIGNAL_REALTIME_78, 92, "SIG78", "Real-time event 78")
-SET (GDB_SIGNAL_REALTIME_79, 93, "SIG79", "Real-time event 79")
-SET (GDB_SIGNAL_REALTIME_80, 94, "SIG80", "Real-time event 80")
-SET (GDB_SIGNAL_REALTIME_81, 95, "SIG81", "Real-time event 81")
-SET (GDB_SIGNAL_REALTIME_82, 96, "SIG82", "Real-time event 82")
-SET (GDB_SIGNAL_REALTIME_83, 97, "SIG83", "Real-time event 83")
-SET (GDB_SIGNAL_REALTIME_84, 98, "SIG84", "Real-time event 84")
-SET (GDB_SIGNAL_REALTIME_85, 99, "SIG85", "Real-time event 85")
-SET (GDB_SIGNAL_REALTIME_86, 100, "SIG86", "Real-time event 86")
-SET (GDB_SIGNAL_REALTIME_87, 101, "SIG87", "Real-time event 87")
-SET (GDB_SIGNAL_REALTIME_88, 102, "SIG88", "Real-time event 88")
-SET (GDB_SIGNAL_REALTIME_89, 103, "SIG89", "Real-time event 89")
-SET (GDB_SIGNAL_REALTIME_90, 104, "SIG90", "Real-time event 90")
-SET (GDB_SIGNAL_REALTIME_91, 105, "SIG91", "Real-time event 91")
-SET (GDB_SIGNAL_REALTIME_92, 106, "SIG92", "Real-time event 92")
-SET (GDB_SIGNAL_REALTIME_93, 107, "SIG93", "Real-time event 93")
-SET (GDB_SIGNAL_REALTIME_94, 108, "SIG94", "Real-time event 94")
-SET (GDB_SIGNAL_REALTIME_95, 109, "SIG95", "Real-time event 95")
-SET (GDB_SIGNAL_REALTIME_96, 110, "SIG96", "Real-time event 96")
-SET (GDB_SIGNAL_REALTIME_97, 111, "SIG97", "Real-time event 97")
-SET (GDB_SIGNAL_REALTIME_98, 112, "SIG98", "Real-time event 98")
-SET (GDB_SIGNAL_REALTIME_99, 113, "SIG99", "Real-time event 99")
-SET (GDB_SIGNAL_REALTIME_100, 114, "SIG100", "Real-time event 100")
-SET (GDB_SIGNAL_REALTIME_101, 115, "SIG101", "Real-time event 101")
-SET (GDB_SIGNAL_REALTIME_102, 116, "SIG102", "Real-time event 102")
-SET (GDB_SIGNAL_REALTIME_103, 117, "SIG103", "Real-time event 103")
-SET (GDB_SIGNAL_REALTIME_104, 118, "SIG104", "Real-time event 104")
-SET (GDB_SIGNAL_REALTIME_105, 119, "SIG105", "Real-time event 105")
-SET (GDB_SIGNAL_REALTIME_106, 120, "SIG106", "Real-time event 106")
-SET (GDB_SIGNAL_REALTIME_107, 121, "SIG107", "Real-time event 107")
-SET (GDB_SIGNAL_REALTIME_108, 122, "SIG108", "Real-time event 108")
-SET (GDB_SIGNAL_REALTIME_109, 123, "SIG109", "Real-time event 109")
-SET (GDB_SIGNAL_REALTIME_110, 124, "SIG110", "Real-time event 110")
-SET (GDB_SIGNAL_REALTIME_111, 125, "SIG111", "Real-time event 111")
-SET (GDB_SIGNAL_REALTIME_112, 126, "SIG112", "Real-time event 112")
-SET (GDB_SIGNAL_REALTIME_113, 127, "SIG113", "Real-time event 113")
-SET (GDB_SIGNAL_REALTIME_114, 128, "SIG114", "Real-time event 114")
-SET (GDB_SIGNAL_REALTIME_115, 129, "SIG115", "Real-time event 115")
-SET (GDB_SIGNAL_REALTIME_116, 130, "SIG116", "Real-time event 116")
-SET (GDB_SIGNAL_REALTIME_117, 131, "SIG117", "Real-time event 117")
-SET (GDB_SIGNAL_REALTIME_118, 132, "SIG118", "Real-time event 118")
-SET (GDB_SIGNAL_REALTIME_119, 133, "SIG119", "Real-time event 119")
-SET (GDB_SIGNAL_REALTIME_120, 134, "SIG120", "Real-time event 120")
-SET (GDB_SIGNAL_REALTIME_121, 135, "SIG121", "Real-time event 121")
-SET (GDB_SIGNAL_REALTIME_122, 136, "SIG122", "Real-time event 122")
-SET (GDB_SIGNAL_REALTIME_123, 137, "SIG123", "Real-time event 123")
-SET (GDB_SIGNAL_REALTIME_124, 138, "SIG124", "Real-time event 124")
-SET (GDB_SIGNAL_REALTIME_125, 139, "SIG125", "Real-time event 125")
-SET (GDB_SIGNAL_REALTIME_126, 140, "SIG126", "Real-time event 126")
-SET (GDB_SIGNAL_REALTIME_127, 141, "SIG127", "Real-time event 127")
-
-SET (GDB_SIGNAL_INFO, 142, "SIGINFO", "Information request")
-
-/* Some signal we don't know about. */
-SET (GDB_SIGNAL_UNKNOWN, 143, NULL, "Unknown signal")
-
-/* Use whatever signal we use when one is not specifically specified
- (for passing to proceed and so on). */
-SET (GDB_SIGNAL_DEFAULT, 144, NULL,
- "Internal error: printing GDB_SIGNAL_DEFAULT")
-
-/* Mach exceptions. In versions of GDB before 5.2, these were just before
- GDB_SIGNAL_INFO if you were compiling on a Mach host (and missing
- otherwise). */
-SET (TARGET_EXC_BAD_ACCESS, 145, "EXC_BAD_ACCESS", "Could not access memory")
-SET (TARGET_EXC_BAD_INSTRUCTION, 146, "EXC_BAD_INSTRUCTION",
- "Illegal instruction/operand")
-SET (TARGET_EXC_ARITHMETIC, 147, "EXC_ARITHMETIC", "Arithmetic exception")
-SET (TARGET_EXC_EMULATION, 148, "EXC_EMULATION", "Emulation instruction")
-SET (TARGET_EXC_SOFTWARE, 149, "EXC_SOFTWARE", "Software generated exception")
-SET (TARGET_EXC_BREAKPOINT, 150, "EXC_BREAKPOINT", "Breakpoint")
-
-/* If you are adding a new signal, add it just above this comment. */
-
-/* Last and unused enum value, for sizing arrays, etc. */
-SET (GDB_SIGNAL_LAST, 151, NULL, "GDB_SIGNAL_MAGIC")
diff --git a/include/gdb/signals.h b/include/gdb/signals.h
deleted file mode 100644
index 1ee2c161d..000000000
--- a/include/gdb/signals.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* Target signal numbers for GDB and the GDB remote protocol.
- Copyright 1986-2013 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 3 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, see <http://www.gnu.org/licenses/>. */
-
-#ifndef GDB_SIGNALS_H
-#define GDB_SIGNALS_H
-
-/* The numbering of these signals is chosen to match traditional unix
- signals (insofar as various unices use the same numbers, anyway).
- It is also the numbering of the GDB remote protocol. Other remote
- protocols, if they use a different numbering, should make sure to
- translate appropriately.
-
- Since these numbers have actually made it out into other software
- (stubs, etc.), you mustn't disturb the assigned numbering. If you
- need to add new signals here, add them to the end of the explicitly
- numbered signals, at the comment marker. Add them unconditionally,
- not within any #if or #ifdef.
-
- This is based strongly on Unix/POSIX signals for several reasons:
- (1) This set of signals represents a widely-accepted attempt to
- represent events of this sort in a portable fashion, (2) we want a
- signal to make it from wait to child_wait to the user intact, (3) many
- remote protocols use a similar encoding. However, it is
- recognized that this set of signals has limitations (such as not
- distinguishing between various kinds of SIGSEGV, or not
- distinguishing hitting a breakpoint from finishing a single step).
- So in the future we may get around this either by adding additional
- signals for breakpoint, single-step, etc., or by adding signal
- codes; the latter seems more in the spirit of what BSD, System V,
- etc. are doing to address these issues. */
-
-/* For an explanation of what each signal means, see
- gdb_signal_to_string. */
-
-enum gdb_signal
- {
-#define SET(symbol, constant, name, string) \
- symbol = constant,
-#include "gdb/signals.def"
-#undef SET
- };
-
-#endif /* #ifndef GDB_SIGNALS_H */
diff --git a/include/gdb/sim-arm.h b/include/gdb/sim-arm.h
deleted file mode 100644
index cae062f16..000000000
--- a/include/gdb/sim-arm.h
+++ /dev/null
@@ -1,112 +0,0 @@
-/* This file defines the interface between the Arm simulator and GDB.
-
- Copyright 2002-2013 Free Software Foundation, Inc.
-
- Contributed by Red Hat.
-
- 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 3 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, see <http://www.gnu.org/licenses/>. */
-
-#if !defined (SIM_ARM_H)
-#define SIM_ARM_H
-
-#ifdef __cplusplus
-extern "C" { // }
-#endif
-
-enum sim_arm_regs
-{
- SIM_ARM_R0_REGNUM,
- SIM_ARM_R1_REGNUM,
- SIM_ARM_R2_REGNUM,
- SIM_ARM_R3_REGNUM,
- SIM_ARM_R4_REGNUM,
- SIM_ARM_R5_REGNUM,
- SIM_ARM_R6_REGNUM,
- SIM_ARM_R7_REGNUM,
- SIM_ARM_R8_REGNUM,
- SIM_ARM_R9_REGNUM,
- SIM_ARM_R10_REGNUM,
- SIM_ARM_R11_REGNUM,
- SIM_ARM_R12_REGNUM,
- SIM_ARM_R13_REGNUM,
- SIM_ARM_R14_REGNUM,
- SIM_ARM_R15_REGNUM, /* PC */
- SIM_ARM_FP0_REGNUM,
- SIM_ARM_FP1_REGNUM,
- SIM_ARM_FP2_REGNUM,
- SIM_ARM_FP3_REGNUM,
- SIM_ARM_FP4_REGNUM,
- SIM_ARM_FP5_REGNUM,
- SIM_ARM_FP6_REGNUM,
- SIM_ARM_FP7_REGNUM,
- SIM_ARM_FPS_REGNUM,
- SIM_ARM_PS_REGNUM,
- SIM_ARM_MAVERIC_COP0R0_REGNUM,
- SIM_ARM_MAVERIC_COP0R1_REGNUM,
- SIM_ARM_MAVERIC_COP0R2_REGNUM,
- SIM_ARM_MAVERIC_COP0R3_REGNUM,
- SIM_ARM_MAVERIC_COP0R4_REGNUM,
- SIM_ARM_MAVERIC_COP0R5_REGNUM,
- SIM_ARM_MAVERIC_COP0R6_REGNUM,
- SIM_ARM_MAVERIC_COP0R7_REGNUM,
- SIM_ARM_MAVERIC_COP0R8_REGNUM,
- SIM_ARM_MAVERIC_COP0R9_REGNUM,
- SIM_ARM_MAVERIC_COP0R10_REGNUM,
- SIM_ARM_MAVERIC_COP0R11_REGNUM,
- SIM_ARM_MAVERIC_COP0R12_REGNUM,
- SIM_ARM_MAVERIC_COP0R13_REGNUM,
- SIM_ARM_MAVERIC_COP0R14_REGNUM,
- SIM_ARM_MAVERIC_COP0R15_REGNUM,
- SIM_ARM_MAVERIC_DSPSC_REGNUM,
- SIM_ARM_IWMMXT_COP0R0_REGNUM,
- SIM_ARM_IWMMXT_COP0R1_REGNUM,
- SIM_ARM_IWMMXT_COP0R2_REGNUM,
- SIM_ARM_IWMMXT_COP0R3_REGNUM,
- SIM_ARM_IWMMXT_COP0R4_REGNUM,
- SIM_ARM_IWMMXT_COP0R5_REGNUM,
- SIM_ARM_IWMMXT_COP0R6_REGNUM,
- SIM_ARM_IWMMXT_COP0R7_REGNUM,
- SIM_ARM_IWMMXT_COP0R8_REGNUM,
- SIM_ARM_IWMMXT_COP0R9_REGNUM,
- SIM_ARM_IWMMXT_COP0R10_REGNUM,
- SIM_ARM_IWMMXT_COP0R11_REGNUM,
- SIM_ARM_IWMMXT_COP0R12_REGNUM,
- SIM_ARM_IWMMXT_COP0R13_REGNUM,
- SIM_ARM_IWMMXT_COP0R14_REGNUM,
- SIM_ARM_IWMMXT_COP0R15_REGNUM,
- SIM_ARM_IWMMXT_COP1R0_REGNUM,
- SIM_ARM_IWMMXT_COP1R1_REGNUM,
- SIM_ARM_IWMMXT_COP1R2_REGNUM,
- SIM_ARM_IWMMXT_COP1R3_REGNUM,
- SIM_ARM_IWMMXT_COP1R4_REGNUM,
- SIM_ARM_IWMMXT_COP1R5_REGNUM,
- SIM_ARM_IWMMXT_COP1R6_REGNUM,
- SIM_ARM_IWMMXT_COP1R7_REGNUM,
- SIM_ARM_IWMMXT_COP1R8_REGNUM,
- SIM_ARM_IWMMXT_COP1R9_REGNUM,
- SIM_ARM_IWMMXT_COP1R10_REGNUM,
- SIM_ARM_IWMMXT_COP1R11_REGNUM,
- SIM_ARM_IWMMXT_COP1R12_REGNUM,
- SIM_ARM_IWMMXT_COP1R13_REGNUM,
- SIM_ARM_IWMMXT_COP1R14_REGNUM,
- SIM_ARM_IWMMXT_COP1R15_REGNUM
-};
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/include/gdb/sim-bfin.h b/include/gdb/sim-bfin.h
deleted file mode 100644
index ef2a11546..000000000
--- a/include/gdb/sim-bfin.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/* This file defines the interface between the Blackfin simulator and GDB.
-
- Copyright (C) 2005-2013 Free Software Foundation, Inc.
- Contributed by Analog Devices.
-
- 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 3 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, see <http://www.gnu.org/licenses/>. */
-
-enum sim_bfin_regnum {
- SIM_BFIN_R0_REGNUM = 0,
- SIM_BFIN_R1_REGNUM,
- SIM_BFIN_R2_REGNUM,
- SIM_BFIN_R3_REGNUM,
- SIM_BFIN_R4_REGNUM,
- SIM_BFIN_R5_REGNUM,
- SIM_BFIN_R6_REGNUM,
- SIM_BFIN_R7_REGNUM,
- SIM_BFIN_P0_REGNUM,
- SIM_BFIN_P1_REGNUM,
- SIM_BFIN_P2_REGNUM,
- SIM_BFIN_P3_REGNUM,
- SIM_BFIN_P4_REGNUM,
- SIM_BFIN_P5_REGNUM,
- SIM_BFIN_SP_REGNUM,
- SIM_BFIN_FP_REGNUM,
- SIM_BFIN_I0_REGNUM,
- SIM_BFIN_I1_REGNUM,
- SIM_BFIN_I2_REGNUM,
- SIM_BFIN_I3_REGNUM,
- SIM_BFIN_M0_REGNUM,
- SIM_BFIN_M1_REGNUM,
- SIM_BFIN_M2_REGNUM,
- SIM_BFIN_M3_REGNUM,
- SIM_BFIN_B0_REGNUM,
- SIM_BFIN_B1_REGNUM,
- SIM_BFIN_B2_REGNUM,
- SIM_BFIN_B3_REGNUM,
- SIM_BFIN_L0_REGNUM,
- SIM_BFIN_L1_REGNUM,
- SIM_BFIN_L2_REGNUM,
- SIM_BFIN_L3_REGNUM,
- SIM_BFIN_A0_DOT_X_REGNUM,
- SIM_BFIN_A0_DOT_W_REGNUM,
- SIM_BFIN_A1_DOT_X_REGNUM,
- SIM_BFIN_A1_DOT_W_REGNUM,
- SIM_BFIN_ASTAT_REGNUM,
- SIM_BFIN_RETS_REGNUM,
- SIM_BFIN_LC0_REGNUM,
- SIM_BFIN_LT0_REGNUM,
- SIM_BFIN_LB0_REGNUM,
- SIM_BFIN_LC1_REGNUM,
- SIM_BFIN_LT1_REGNUM,
- SIM_BFIN_LB1_REGNUM,
- SIM_BFIN_CYCLES_REGNUM,
- SIM_BFIN_CYCLES2_REGNUM,
- SIM_BFIN_USP_REGNUM,
- SIM_BFIN_SEQSTAT_REGNUM,
- SIM_BFIN_SYSCFG_REGNUM,
- SIM_BFIN_RETI_REGNUM,
- SIM_BFIN_RETX_REGNUM,
- SIM_BFIN_RETN_REGNUM,
- SIM_BFIN_RETE_REGNUM,
- SIM_BFIN_PC_REGNUM,
- SIM_BFIN_CC_REGNUM,
- SIM_BFIN_TEXT_ADDR,
- SIM_BFIN_TEXT_END_ADDR,
- SIM_BFIN_DATA_ADDR,
- SIM_BFIN_IPEND_REGNUM
-};
-
diff --git a/include/gdb/sim-cr16.h b/include/gdb/sim-cr16.h
deleted file mode 100644
index 1503657a0..000000000
--- a/include/gdb/sim-cr16.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/* This file defines the interface between the cr16 simulator and gdb.
-
- Copyright 2008-2013 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 3 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, see <http://www.gnu.org/licenses/>. */
-
-#if !defined (SIM_CR16_H)
-#define SIM_CR16_H
-
-#ifdef __cplusplus
-extern "C" { // }
-#endif
-
-enum
- {
- SIM_CR16_MEMORY_UNIFIED = 0x00000000,
- SIM_CR16_MEMORY_INSN = 0x10000000,
- SIM_CR16_MEMORY_DATA = 0x10000000,
- SIM_CR16_MEMORY_DMAP = 0x10000000,
- SIM_CR16_MEMORY_IMAP = 0x10000000
- };
-
-extern unsigned long sim_cr16_translate_dmap_addr
- (unsigned long offset,
- int nr_bytes,
- unsigned long *phys,
- void *regcache,
- unsigned long (*dmap_register) (void *regcache, int reg_nr));
-
-extern unsigned long sim_cr16_translate_imap_addr
- (unsigned long offset,
- int nr_bytes,
- unsigned long *phys,
- void *regcache,
- unsigned long (*imap_register) (void *regcache, int reg_nr));
-
-extern unsigned long sim_cr16_translate_addr
- (unsigned long vaddr,
- int nr_bytes,
- unsigned long *phys,
- void *regcache,
- unsigned long (*dmap_register) (void *regcache, int reg_nr),
- unsigned long (*imap_register) (void *regcache, int reg_nr));
-
-
-/* The simulator makes use of the following register information. */
-
-enum sim_cr16_regs
-{
- SIM_CR16_R0_REGNUM,
- SIM_CR16_R1_REGNUM,
- SIM_CR16_R2_REGNUM,
- SIM_CR16_R3_REGNUM,
- SIM_CR16_R4_REGNUM,
- SIM_CR16_R5_REGNUM,
- SIM_CR16_R6_REGNUM,
- SIM_CR16_R7_REGNUM,
- SIM_CR16_R8_REGNUM,
- SIM_CR16_R9_REGNUM,
- SIM_CR16_R10_REGNUM,
- SIM_CR16_R11_REGNUM,
- SIM_CR16_R12_REGNUM,
- SIM_CR16_R13_REGNUM,
- SIM_CR16_R14_REGNUM,
- SIM_CR16_R15_REGNUM,
-
- SIM_CR16_PC_REGNUM,
- SIM_CR16_ISP_REGNUM,
- SIM_CR16_USP_REGNUM,
- SIM_CR16_INTBASE_REGNUM,
- SIM_CR16_PSR_REGNUM,
- SIM_CR16_CFG_REGNUM,
- SIM_CR16_DBS_REGNUM,
- SIM_CR16_DCR_REGNUM,
- SIM_CR16_DSR_REGNUM,
- SIM_CR16_CAR0_REGNUM,
- SIM_CR16_CAR1_REGNUM
-};
-
-enum
-{
- SIM_CR16_NR_R_REGS = 16,
- SIM_CR16_NR_A_REGS = 2,
- SIM_CR16_NR_IMAP_REGS = 2,
- SIM_CR16_NR_DMAP_REGS = 4,
- SIM_CR16_NR_CR_REGS = 11
-};
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/include/gdb/sim-d10v.h b/include/gdb/sim-d10v.h
deleted file mode 100644
index 12eaa63ec..000000000
--- a/include/gdb/sim-d10v.h
+++ /dev/null
@@ -1,141 +0,0 @@
-/* This file defines the interface between the d10v simulator and gdb.
-
- Copyright 1999-2013 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 3 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, see <http://www.gnu.org/licenses/>. */
-
-#if !defined (SIM_D10V_H)
-#define SIM_D10V_H
-
-#ifdef __cplusplus
-extern "C" { // }
-#endif
-
-/* GDB interprets addresses as:
-
- 0x00xxxxxx: Physical unified memory segment (Unified memory)
- 0x01xxxxxx: Physical instruction memory segment (On-chip insn memory)
- 0x02xxxxxx: Physical data memory segment (On-chip data memory)
- 0x10xxxxxx: Logical data address segment (DMAP translated memory)
- 0x11xxxxxx: Logical instruction address segment (IMAP translated memory)
-
- The remote d10v board interprets addresses as:
-
- 0x00xxxxxx: Physical unified memory segment (Unified memory)
- 0x01xxxxxx: Physical instruction memory segment (On-chip insn memory)
- 0x02xxxxxx: Physical data memory segment (On-chip data memory)
-
- The following translate a virtual DMAP/IMAP offset into a physical
- memory segment assigning the translated address to PHYS. Since a
- memory access may cross a page boundrary the number of bytes for
- which the translation is applicable (or 0 for an invalid virtual
- offset) is returned. */
-
-enum
- {
- SIM_D10V_MEMORY_UNIFIED = 0x00000000,
- SIM_D10V_MEMORY_INSN = 0x01000000,
- SIM_D10V_MEMORY_DATA = 0x02000000,
- SIM_D10V_MEMORY_DMAP = 0x10000000,
- SIM_D10V_MEMORY_IMAP = 0x11000000
- };
-
-extern unsigned long sim_d10v_translate_dmap_addr
- (unsigned long offset,
- int nr_bytes,
- unsigned long *phys,
- void *regcache,
- unsigned long (*dmap_register) (void *regcache, int reg_nr));
-
-extern unsigned long sim_d10v_translate_imap_addr
- (unsigned long offset,
- int nr_bytes,
- unsigned long *phys,
- void *regcache,
- unsigned long (*imap_register) (void *regcache, int reg_nr));
-
-extern unsigned long sim_d10v_translate_addr
- (unsigned long vaddr,
- int nr_bytes,
- unsigned long *phys,
- void *regcache,
- unsigned long (*dmap_register) (void *regcache, int reg_nr),
- unsigned long (*imap_register) (void *regcache, int reg_nr));
-
-
-/* The simulator makes use of the following register information. */
-
-enum sim_d10v_regs
-{
- SIM_D10V_R0_REGNUM,
- SIM_D10V_R1_REGNUM,
- SIM_D10V_R2_REGNUM,
- SIM_D10V_R3_REGNUM,
- SIM_D10V_R4_REGNUM,
- SIM_D10V_R5_REGNUM,
- SIM_D10V_R6_REGNUM,
- SIM_D10V_R7_REGNUM,
- SIM_D10V_R8_REGNUM,
- SIM_D10V_R9_REGNUM,
- SIM_D10V_R10_REGNUM,
- SIM_D10V_R11_REGNUM,
- SIM_D10V_R12_REGNUM,
- SIM_D10V_R13_REGNUM,
- SIM_D10V_R14_REGNUM,
- SIM_D10V_R15_REGNUM,
- SIM_D10V_CR0_REGNUM,
- SIM_D10V_CR1_REGNUM,
- SIM_D10V_CR2_REGNUM,
- SIM_D10V_CR3_REGNUM,
- SIM_D10V_CR4_REGNUM,
- SIM_D10V_CR5_REGNUM,
- SIM_D10V_CR6_REGNUM,
- SIM_D10V_CR7_REGNUM,
- SIM_D10V_CR8_REGNUM,
- SIM_D10V_CR9_REGNUM,
- SIM_D10V_CR10_REGNUM,
- SIM_D10V_CR11_REGNUM,
- SIM_D10V_CR12_REGNUM,
- SIM_D10V_CR13_REGNUM,
- SIM_D10V_CR14_REGNUM,
- SIM_D10V_CR15_REGNUM,
- SIM_D10V_A0_REGNUM,
- SIM_D10V_A1_REGNUM,
- SIM_D10V_SPI_REGNUM,
- SIM_D10V_SPU_REGNUM,
- SIM_D10V_IMAP0_REGNUM,
- SIM_D10V_IMAP1_REGNUM,
- SIM_D10V_DMAP0_REGNUM,
- SIM_D10V_DMAP1_REGNUM,
- SIM_D10V_DMAP2_REGNUM,
- SIM_D10V_DMAP3_REGNUM,
- SIM_D10V_TS2_DMAP_REGNUM
-};
-
-enum
-{
- SIM_D10V_NR_R_REGS = 16,
- SIM_D10V_NR_A_REGS = 2,
- SIM_D10V_NR_IMAP_REGS = 2,
- SIM_D10V_NR_DMAP_REGS = 4,
- SIM_D10V_NR_CR_REGS = 16
-};
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/include/gdb/sim-frv.h b/include/gdb/sim-frv.h
deleted file mode 100644
index bdb17f8ee..000000000
--- a/include/gdb/sim-frv.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/* This file defines the interface between the FR-V simulator and GDB.
-
- Copyright 2003-2013 Free Software Foundation, Inc.
-
- Contributed by Red Hat.
-
- 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 3 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, see <http://www.gnu.org/licenses/>. */
-
-#if !defined (SIM_FRV_H)
-#define SIM_FRV_H
-
-#ifdef __cplusplus
-extern "C" { // }
-#endif
-
-enum sim_frv_regs
-{
- SIM_FRV_GR0_REGNUM = 0,
- SIM_FRV_GR63_REGNUM = 63,
- SIM_FRV_FR0_REGNUM = 64,
- SIM_FRV_FR63_REGNUM = 127,
- SIM_FRV_PC_REGNUM = 128,
-
- /* An FR-V architecture may have up to 4096 special purpose registers
- (SPRs). In order to determine a specific constant used to access
- a particular SPR, one of the H_SPR_ prefixed offsets defined in
- opcodes/frv-desc.h should be added to SIM_FRV_SPR0_REGNUM. So,
- for example, the number that GDB uses to fetch the link register
- from the simulator is (SIM_FRV_SPR0_REGNUM + H_SPR_LR). */
- SIM_FRV_SPR0_REGNUM = 129,
- SIM_FRV_SPR4095_REGNUM = SIM_FRV_SPR0_REGNUM + 4095
-};
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/include/gdb/sim-h8300.h b/include/gdb/sim-h8300.h
deleted file mode 100644
index 1649b52e6..000000000
--- a/include/gdb/sim-h8300.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/* This file defines the interface between the h8300 simulator and gdb.
- Copyright (C) 2002-2013 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 3 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, see <http://www.gnu.org/licenses/>. */
-
-#if !defined (SIM_H8300_H)
-#define SIM_H8300_H
-
-#ifdef __cplusplus
-extern "C" { //}
-#endif
-
-/* The simulator makes use of the following register information. */
-
- enum sim_h8300_regs
- {
- /* Registers common to all the H8 variants. */
- /* Start here: */
- SIM_H8300_R0_REGNUM,
- SIM_H8300_R1_REGNUM,
- SIM_H8300_R2_REGNUM,
- SIM_H8300_R3_REGNUM,
- SIM_H8300_R4_REGNUM,
- SIM_H8300_R5_REGNUM,
- SIM_H8300_R6_REGNUM,
- SIM_H8300_R7_REGNUM,
-
- SIM_H8300_CCR_REGNUM, /* Contains processor status */
- SIM_H8300_PC_REGNUM, /* Contains program counter */
- /* End here */
-
- SIM_H8300_EXR_REGNUM, /* Contains extended processor status
- H8S and higher */
- SIM_H8300_MACL_REGNUM, /* Lower part of MAC register (26xx only)*/
- SIM_H8300_MACH_REGNUM, /* High part of MAC register (26xx only) */
-
- SIM_H8300_CYCLE_REGNUM,
- SIM_H8300_INST_REGNUM,
- SIM_H8300_TICK_REGNUM
- };
-
- enum
- {
- SIM_H8300_ARG_FIRST_REGNUM = SIM_H8300_R0_REGNUM, /* first reg in which an arg
- may be passed */
- SIM_H8300_ARG_LAST_REGNUM = SIM_H8300_R3_REGNUM, /* last reg in which an arg
- may be passed */
- SIM_H8300_FP_REGNUM = SIM_H8300_R6_REGNUM, /* Contain address of executing
- stack frame */
- SIM_H8300_SP_REGNUM = SIM_H8300_R7_REGNUM /* Contains address of top of stack */
- };
-
- enum
- {
- SIM_H8300_NUM_COMMON_REGS = 10,
- SIM_H8300_S_NUM_REGS = 13,
- SIM_H8300_NUM_REGS = 16
- };
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* SIM_H8300_H */
diff --git a/include/gdb/sim-lm32.h b/include/gdb/sim-lm32.h
deleted file mode 100644
index b04d8d61d..000000000
--- a/include/gdb/sim-lm32.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/* This file defines the interface between the LM32 simulator and GDB.
- Contributed by Jon Beniston <jon@beniston.com>
-
- Copyright (C) 2009-2013 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 3 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, see <http://www.gnu.org/licenses/>. */
-
-#ifndef SIM_LM32_H
-#define SIM_LM32_H
-
-#ifdef __cplusplus
-extern "C" { // }
-#endif
-
-enum sim_lm32_regs
-{
- SIM_LM32_R0_REGNUM,
- SIM_LM32_R1_REGNUM,
- SIM_LM32_R2_REGNUM,
- SIM_LM32_R3_REGNUM,
- SIM_LM32_R4_REGNUM,
- SIM_LM32_R5_REGNUM,
- SIM_LM32_R6_REGNUM,
- SIM_LM32_R7_REGNUM,
- SIM_LM32_R8_REGNUM,
- SIM_LM32_R9_REGNUM,
- SIM_LM32_R10_REGNUM,
- SIM_LM32_R11_REGNUM,
- SIM_LM32_R12_REGNUM,
- SIM_LM32_R13_REGNUM,
- SIM_LM32_R14_REGNUM,
- SIM_LM32_R15_REGNUM,
- SIM_LM32_R16_REGNUM,
- SIM_LM32_R17_REGNUM,
- SIM_LM32_R18_REGNUM,
- SIM_LM32_R19_REGNUM,
- SIM_LM32_R20_REGNUM,
- SIM_LM32_R21_REGNUM,
- SIM_LM32_R22_REGNUM,
- SIM_LM32_R23_REGNUM,
- SIM_LM32_R24_REGNUM,
- SIM_LM32_R25_REGNUM,
- SIM_LM32_GP_REGNUM,
- SIM_LM32_FP_REGNUM,
- SIM_LM32_SP_REGNUM,
- SIM_LM32_RA_REGNUM,
- SIM_LM32_BA_REGNUM,
- SIM_LM32_EA_REGNUM,
- SIM_LM32_PC_REGNUM,
- SIM_LM32_EID_REGNUM,
- SIM_LM32_EBA_REGNUM,
- SIM_LM32_DEBA_REGNUM,
- SIM_LM32_IE_REGNUM,
- SIM_LM32_IM_REGNUM,
- SIM_LM32_IP_REGNUM,
- SIM_LM32_NUM_REGS
-};
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/include/gdb/sim-m32c.h b/include/gdb/sim-m32c.h
deleted file mode 100644
index 963ae047d..000000000
--- a/include/gdb/sim-m32c.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/* This file defines the interface between the m32c simulator and gdb.
- Copyright (C) 2005-2013 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 3 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, see <http://www.gnu.org/licenses/>. */
-
-#ifndef SIM_M32C_H
-#define SIM_M32C_H
-
-enum m32c_sim_reg {
- m32c_sim_reg_r0_bank0,
- m32c_sim_reg_r1_bank0,
- m32c_sim_reg_r2_bank0,
- m32c_sim_reg_r3_bank0,
- m32c_sim_reg_a0_bank0,
- m32c_sim_reg_a1_bank0,
- m32c_sim_reg_fb_bank0,
- m32c_sim_reg_sb_bank0,
- m32c_sim_reg_r0_bank1,
- m32c_sim_reg_r1_bank1,
- m32c_sim_reg_r2_bank1,
- m32c_sim_reg_r3_bank1,
- m32c_sim_reg_a0_bank1,
- m32c_sim_reg_a1_bank1,
- m32c_sim_reg_fb_bank1,
- m32c_sim_reg_sb_bank1,
- m32c_sim_reg_usp,
- m32c_sim_reg_isp,
- m32c_sim_reg_pc,
- m32c_sim_reg_intb,
- m32c_sim_reg_flg,
- m32c_sim_reg_svf,
- m32c_sim_reg_svp,
- m32c_sim_reg_vct,
- m32c_sim_reg_dmd0,
- m32c_sim_reg_dmd1,
- m32c_sim_reg_dct0,
- m32c_sim_reg_dct1,
- m32c_sim_reg_drc0,
- m32c_sim_reg_drc1,
- m32c_sim_reg_dma0,
- m32c_sim_reg_dma1,
- m32c_sim_reg_dsa0,
- m32c_sim_reg_dsa1,
- m32c_sim_reg_dra0,
- m32c_sim_reg_dra1,
- m32c_sim_reg_num_regs
-};
-
-#endif /* SIM_M32C_H */
diff --git a/include/gdb/sim-ppc.h b/include/gdb/sim-ppc.h
deleted file mode 100644
index 188eb49da..000000000
--- a/include/gdb/sim-ppc.h
+++ /dev/null
@@ -1,773 +0,0 @@
-/* sim-ppc.h --- interface between PowerPC simulator and GDB.
-
- Copyright 2004-2013 Free Software Foundation, Inc.
-
- Contributed by Red Hat.
-
- 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 3 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, see <http://www.gnu.org/licenses/>. */
-
-#if !defined (SIM_PPC_H)
-#define SIM_PPC_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* The register access functions, sim_fetch_register and
- sim_store_register, use the following numbering for PowerPC
- registers. */
-
-enum sim_ppc_regnum
- {
- /* General-purpose registers, r0 -- r31. */
- sim_ppc_r0_regnum,
- sim_ppc_r1_regnum,
- sim_ppc_r2_regnum,
- sim_ppc_r3_regnum,
- sim_ppc_r4_regnum,
- sim_ppc_r5_regnum,
- sim_ppc_r6_regnum,
- sim_ppc_r7_regnum,
- sim_ppc_r8_regnum,
- sim_ppc_r9_regnum,
- sim_ppc_r10_regnum,
- sim_ppc_r11_regnum,
- sim_ppc_r12_regnum,
- sim_ppc_r13_regnum,
- sim_ppc_r14_regnum,
- sim_ppc_r15_regnum,
- sim_ppc_r16_regnum,
- sim_ppc_r17_regnum,
- sim_ppc_r18_regnum,
- sim_ppc_r19_regnum,
- sim_ppc_r20_regnum,
- sim_ppc_r21_regnum,
- sim_ppc_r22_regnum,
- sim_ppc_r23_regnum,
- sim_ppc_r24_regnum,
- sim_ppc_r25_regnum,
- sim_ppc_r26_regnum,
- sim_ppc_r27_regnum,
- sim_ppc_r28_regnum,
- sim_ppc_r29_regnum,
- sim_ppc_r30_regnum,
- sim_ppc_r31_regnum,
-
- /* Floating-point registers, f0 -- f31. */
- sim_ppc_f0_regnum,
- sim_ppc_f1_regnum,
- sim_ppc_f2_regnum,
- sim_ppc_f3_regnum,
- sim_ppc_f4_regnum,
- sim_ppc_f5_regnum,
- sim_ppc_f6_regnum,
- sim_ppc_f7_regnum,
- sim_ppc_f8_regnum,
- sim_ppc_f9_regnum,
- sim_ppc_f10_regnum,
- sim_ppc_f11_regnum,
- sim_ppc_f12_regnum,
- sim_ppc_f13_regnum,
- sim_ppc_f14_regnum,
- sim_ppc_f15_regnum,
- sim_ppc_f16_regnum,
- sim_ppc_f17_regnum,
- sim_ppc_f18_regnum,
- sim_ppc_f19_regnum,
- sim_ppc_f20_regnum,
- sim_ppc_f21_regnum,
- sim_ppc_f22_regnum,
- sim_ppc_f23_regnum,
- sim_ppc_f24_regnum,
- sim_ppc_f25_regnum,
- sim_ppc_f26_regnum,
- sim_ppc_f27_regnum,
- sim_ppc_f28_regnum,
- sim_ppc_f29_regnum,
- sim_ppc_f30_regnum,
- sim_ppc_f31_regnum,
-
- /* Altivec vector registers, vr0 -- vr31. */
- sim_ppc_vr0_regnum,
- sim_ppc_vr1_regnum,
- sim_ppc_vr2_regnum,
- sim_ppc_vr3_regnum,
- sim_ppc_vr4_regnum,
- sim_ppc_vr5_regnum,
- sim_ppc_vr6_regnum,
- sim_ppc_vr7_regnum,
- sim_ppc_vr8_regnum,
- sim_ppc_vr9_regnum,
- sim_ppc_vr10_regnum,
- sim_ppc_vr11_regnum,
- sim_ppc_vr12_regnum,
- sim_ppc_vr13_regnum,
- sim_ppc_vr14_regnum,
- sim_ppc_vr15_regnum,
- sim_ppc_vr16_regnum,
- sim_ppc_vr17_regnum,
- sim_ppc_vr18_regnum,
- sim_ppc_vr19_regnum,
- sim_ppc_vr20_regnum,
- sim_ppc_vr21_regnum,
- sim_ppc_vr22_regnum,
- sim_ppc_vr23_regnum,
- sim_ppc_vr24_regnum,
- sim_ppc_vr25_regnum,
- sim_ppc_vr26_regnum,
- sim_ppc_vr27_regnum,
- sim_ppc_vr28_regnum,
- sim_ppc_vr29_regnum,
- sim_ppc_vr30_regnum,
- sim_ppc_vr31_regnum,
-
- /* SPE APU GPR upper halves. These are the upper 32 bits of the
- gprs; there is one upper-half register for each gpr, so it is
- appropriate to use sim_ppc_num_gprs for iterating through
- these. */
- sim_ppc_rh0_regnum,
- sim_ppc_rh1_regnum,
- sim_ppc_rh2_regnum,
- sim_ppc_rh3_regnum,
- sim_ppc_rh4_regnum,
- sim_ppc_rh5_regnum,
- sim_ppc_rh6_regnum,
- sim_ppc_rh7_regnum,
- sim_ppc_rh8_regnum,
- sim_ppc_rh9_regnum,
- sim_ppc_rh10_regnum,
- sim_ppc_rh11_regnum,
- sim_ppc_rh12_regnum,
- sim_ppc_rh13_regnum,
- sim_ppc_rh14_regnum,
- sim_ppc_rh15_regnum,
- sim_ppc_rh16_regnum,
- sim_ppc_rh17_regnum,
- sim_ppc_rh18_regnum,
- sim_ppc_rh19_regnum,
- sim_ppc_rh20_regnum,
- sim_ppc_rh21_regnum,
- sim_ppc_rh22_regnum,
- sim_ppc_rh23_regnum,
- sim_ppc_rh24_regnum,
- sim_ppc_rh25_regnum,
- sim_ppc_rh26_regnum,
- sim_ppc_rh27_regnum,
- sim_ppc_rh28_regnum,
- sim_ppc_rh29_regnum,
- sim_ppc_rh30_regnum,
- sim_ppc_rh31_regnum,
-
- /* SPE APU GPR full registers. Each of these registers is the
- 64-bit concatenation of a 32-bit GPR (providing the lower bits)
- and a 32-bit upper-half register (providing the higher bits).
- As for the upper-half registers, it is appropriate to use
- sim_ppc_num_gprs with these. */
- sim_ppc_ev0_regnum,
- sim_ppc_ev1_regnum,
- sim_ppc_ev2_regnum,
- sim_ppc_ev3_regnum,
- sim_ppc_ev4_regnum,
- sim_ppc_ev5_regnum,
- sim_ppc_ev6_regnum,
- sim_ppc_ev7_regnum,
- sim_ppc_ev8_regnum,
- sim_ppc_ev9_regnum,
- sim_ppc_ev10_regnum,
- sim_ppc_ev11_regnum,
- sim_ppc_ev12_regnum,
- sim_ppc_ev13_regnum,
- sim_ppc_ev14_regnum,
- sim_ppc_ev15_regnum,
- sim_ppc_ev16_regnum,
- sim_ppc_ev17_regnum,
- sim_ppc_ev18_regnum,
- sim_ppc_ev19_regnum,
- sim_ppc_ev20_regnum,
- sim_ppc_ev21_regnum,
- sim_ppc_ev22_regnum,
- sim_ppc_ev23_regnum,
- sim_ppc_ev24_regnum,
- sim_ppc_ev25_regnum,
- sim_ppc_ev26_regnum,
- sim_ppc_ev27_regnum,
- sim_ppc_ev28_regnum,
- sim_ppc_ev29_regnum,
- sim_ppc_ev30_regnum,
- sim_ppc_ev31_regnum,
-
- /* Segment registers, sr0 -- sr15. */
- sim_ppc_sr0_regnum,
- sim_ppc_sr1_regnum,
- sim_ppc_sr2_regnum,
- sim_ppc_sr3_regnum,
- sim_ppc_sr4_regnum,
- sim_ppc_sr5_regnum,
- sim_ppc_sr6_regnum,
- sim_ppc_sr7_regnum,
- sim_ppc_sr8_regnum,
- sim_ppc_sr9_regnum,
- sim_ppc_sr10_regnum,
- sim_ppc_sr11_regnum,
- sim_ppc_sr12_regnum,
- sim_ppc_sr13_regnum,
- sim_ppc_sr14_regnum,
- sim_ppc_sr15_regnum,
-
- /* Miscellaneous --- but non-SPR --- registers. */
- sim_ppc_pc_regnum,
- sim_ppc_ps_regnum,
- sim_ppc_cr_regnum,
- sim_ppc_fpscr_regnum,
- sim_ppc_acc_regnum,
- sim_ppc_vscr_regnum,
-
- /* Special-purpose registers. */
- sim_ppc_spr0_regnum, sim_ppc_spr1_regnum,
- sim_ppc_spr2_regnum, sim_ppc_spr3_regnum,
- sim_ppc_spr4_regnum, sim_ppc_spr5_regnum,
- sim_ppc_spr6_regnum, sim_ppc_spr7_regnum,
- sim_ppc_spr8_regnum, sim_ppc_spr9_regnum,
- sim_ppc_spr10_regnum, sim_ppc_spr11_regnum,
- sim_ppc_spr12_regnum, sim_ppc_spr13_regnum,
- sim_ppc_spr14_regnum, sim_ppc_spr15_regnum,
- sim_ppc_spr16_regnum, sim_ppc_spr17_regnum,
- sim_ppc_spr18_regnum, sim_ppc_spr19_regnum,
- sim_ppc_spr20_regnum, sim_ppc_spr21_regnum,
- sim_ppc_spr22_regnum, sim_ppc_spr23_regnum,
- sim_ppc_spr24_regnum, sim_ppc_spr25_regnum,
- sim_ppc_spr26_regnum, sim_ppc_spr27_regnum,
- sim_ppc_spr28_regnum, sim_ppc_spr29_regnum,
- sim_ppc_spr30_regnum, sim_ppc_spr31_regnum,
- sim_ppc_spr32_regnum, sim_ppc_spr33_regnum,
- sim_ppc_spr34_regnum, sim_ppc_spr35_regnum,
- sim_ppc_spr36_regnum, sim_ppc_spr37_regnum,
- sim_ppc_spr38_regnum, sim_ppc_spr39_regnum,
- sim_ppc_spr40_regnum, sim_ppc_spr41_regnum,
- sim_ppc_spr42_regnum, sim_ppc_spr43_regnum,
- sim_ppc_spr44_regnum, sim_ppc_spr45_regnum,
- sim_ppc_spr46_regnum, sim_ppc_spr47_regnum,
- sim_ppc_spr48_regnum, sim_ppc_spr49_regnum,
- sim_ppc_spr50_regnum, sim_ppc_spr51_regnum,
- sim_ppc_spr52_regnum, sim_ppc_spr53_regnum,
- sim_ppc_spr54_regnum, sim_ppc_spr55_regnum,
- sim_ppc_spr56_regnum, sim_ppc_spr57_regnum,
- sim_ppc_spr58_regnum, sim_ppc_spr59_regnum,
- sim_ppc_spr60_regnum, sim_ppc_spr61_regnum,
- sim_ppc_spr62_regnum, sim_ppc_spr63_regnum,
- sim_ppc_spr64_regnum, sim_ppc_spr65_regnum,
- sim_ppc_spr66_regnum, sim_ppc_spr67_regnum,
- sim_ppc_spr68_regnum, sim_ppc_spr69_regnum,
- sim_ppc_spr70_regnum, sim_ppc_spr71_regnum,
- sim_ppc_spr72_regnum, sim_ppc_spr73_regnum,
- sim_ppc_spr74_regnum, sim_ppc_spr75_regnum,
- sim_ppc_spr76_regnum, sim_ppc_spr77_regnum,
- sim_ppc_spr78_regnum, sim_ppc_spr79_regnum,
- sim_ppc_spr80_regnum, sim_ppc_spr81_regnum,
- sim_ppc_spr82_regnum, sim_ppc_spr83_regnum,
- sim_ppc_spr84_regnum, sim_ppc_spr85_regnum,
- sim_ppc_spr86_regnum, sim_ppc_spr87_regnum,
- sim_ppc_spr88_regnum, sim_ppc_spr89_regnum,
- sim_ppc_spr90_regnum, sim_ppc_spr91_regnum,
- sim_ppc_spr92_regnum, sim_ppc_spr93_regnum,
- sim_ppc_spr94_regnum, sim_ppc_spr95_regnum,
- sim_ppc_spr96_regnum, sim_ppc_spr97_regnum,
- sim_ppc_spr98_regnum, sim_ppc_spr99_regnum,
- sim_ppc_spr100_regnum, sim_ppc_spr101_regnum,
- sim_ppc_spr102_regnum, sim_ppc_spr103_regnum,
- sim_ppc_spr104_regnum, sim_ppc_spr105_regnum,
- sim_ppc_spr106_regnum, sim_ppc_spr107_regnum,
- sim_ppc_spr108_regnum, sim_ppc_spr109_regnum,
- sim_ppc_spr110_regnum, sim_ppc_spr111_regnum,
- sim_ppc_spr112_regnum, sim_ppc_spr113_regnum,
- sim_ppc_spr114_regnum, sim_ppc_spr115_regnum,
- sim_ppc_spr116_regnum, sim_ppc_spr117_regnum,
- sim_ppc_spr118_regnum, sim_ppc_spr119_regnum,
- sim_ppc_spr120_regnum, sim_ppc_spr121_regnum,
- sim_ppc_spr122_regnum, sim_ppc_spr123_regnum,
- sim_ppc_spr124_regnum, sim_ppc_spr125_regnum,
- sim_ppc_spr126_regnum, sim_ppc_spr127_regnum,
- sim_ppc_spr128_regnum, sim_ppc_spr129_regnum,
- sim_ppc_spr130_regnum, sim_ppc_spr131_regnum,
- sim_ppc_spr132_regnum, sim_ppc_spr133_regnum,
- sim_ppc_spr134_regnum, sim_ppc_spr135_regnum,
- sim_ppc_spr136_regnum, sim_ppc_spr137_regnum,
- sim_ppc_spr138_regnum, sim_ppc_spr139_regnum,
- sim_ppc_spr140_regnum, sim_ppc_spr141_regnum,
- sim_ppc_spr142_regnum, sim_ppc_spr143_regnum,
- sim_ppc_spr144_regnum, sim_ppc_spr145_regnum,
- sim_ppc_spr146_regnum, sim_ppc_spr147_regnum,
- sim_ppc_spr148_regnum, sim_ppc_spr149_regnum,
- sim_ppc_spr150_regnum, sim_ppc_spr151_regnum,
- sim_ppc_spr152_regnum, sim_ppc_spr153_regnum,
- sim_ppc_spr154_regnum, sim_ppc_spr155_regnum,
- sim_ppc_spr156_regnum, sim_ppc_spr157_regnum,
- sim_ppc_spr158_regnum, sim_ppc_spr159_regnum,
- sim_ppc_spr160_regnum, sim_ppc_spr161_regnum,
- sim_ppc_spr162_regnum, sim_ppc_spr163_regnum,
- sim_ppc_spr164_regnum, sim_ppc_spr165_regnum,
- sim_ppc_spr166_regnum, sim_ppc_spr167_regnum,
- sim_ppc_spr168_regnum, sim_ppc_spr169_regnum,
- sim_ppc_spr170_regnum, sim_ppc_spr171_regnum,
- sim_ppc_spr172_regnum, sim_ppc_spr173_regnum,
- sim_ppc_spr174_regnum, sim_ppc_spr175_regnum,
- sim_ppc_spr176_regnum, sim_ppc_spr177_regnum,
- sim_ppc_spr178_regnum, sim_ppc_spr179_regnum,
- sim_ppc_spr180_regnum, sim_ppc_spr181_regnum,
- sim_ppc_spr182_regnum, sim_ppc_spr183_regnum,
- sim_ppc_spr184_regnum, sim_ppc_spr185_regnum,
- sim_ppc_spr186_regnum, sim_ppc_spr187_regnum,
- sim_ppc_spr188_regnum, sim_ppc_spr189_regnum,
- sim_ppc_spr190_regnum, sim_ppc_spr191_regnum,
- sim_ppc_spr192_regnum, sim_ppc_spr193_regnum,
- sim_ppc_spr194_regnum, sim_ppc_spr195_regnum,
- sim_ppc_spr196_regnum, sim_ppc_spr197_regnum,
- sim_ppc_spr198_regnum, sim_ppc_spr199_regnum,
- sim_ppc_spr200_regnum, sim_ppc_spr201_regnum,
- sim_ppc_spr202_regnum, sim_ppc_spr203_regnum,
- sim_ppc_spr204_regnum, sim_ppc_spr205_regnum,
- sim_ppc_spr206_regnum, sim_ppc_spr207_regnum,
- sim_ppc_spr208_regnum, sim_ppc_spr209_regnum,
- sim_ppc_spr210_regnum, sim_ppc_spr211_regnum,
- sim_ppc_spr212_regnum, sim_ppc_spr213_regnum,
- sim_ppc_spr214_regnum, sim_ppc_spr215_regnum,
- sim_ppc_spr216_regnum, sim_ppc_spr217_regnum,
- sim_ppc_spr218_regnum, sim_ppc_spr219_regnum,
- sim_ppc_spr220_regnum, sim_ppc_spr221_regnum,
- sim_ppc_spr222_regnum, sim_ppc_spr223_regnum,
- sim_ppc_spr224_regnum, sim_ppc_spr225_regnum,
- sim_ppc_spr226_regnum, sim_ppc_spr227_regnum,
- sim_ppc_spr228_regnum, sim_ppc_spr229_regnum,
- sim_ppc_spr230_regnum, sim_ppc_spr231_regnum,
- sim_ppc_spr232_regnum, sim_ppc_spr233_regnum,
- sim_ppc_spr234_regnum, sim_ppc_spr235_regnum,
- sim_ppc_spr236_regnum, sim_ppc_spr237_regnum,
- sim_ppc_spr238_regnum, sim_ppc_spr239_regnum,
- sim_ppc_spr240_regnum, sim_ppc_spr241_regnum,
- sim_ppc_spr242_regnum, sim_ppc_spr243_regnum,
- sim_ppc_spr244_regnum, sim_ppc_spr245_regnum,
- sim_ppc_spr246_regnum, sim_ppc_spr247_regnum,
- sim_ppc_spr248_regnum, sim_ppc_spr249_regnum,
- sim_ppc_spr250_regnum, sim_ppc_spr251_regnum,
- sim_ppc_spr252_regnum, sim_ppc_spr253_regnum,
- sim_ppc_spr254_regnum, sim_ppc_spr255_regnum,
- sim_ppc_spr256_regnum, sim_ppc_spr257_regnum,
- sim_ppc_spr258_regnum, sim_ppc_spr259_regnum,
- sim_ppc_spr260_regnum, sim_ppc_spr261_regnum,
- sim_ppc_spr262_regnum, sim_ppc_spr263_regnum,
- sim_ppc_spr264_regnum, sim_ppc_spr265_regnum,
- sim_ppc_spr266_regnum, sim_ppc_spr267_regnum,
- sim_ppc_spr268_regnum, sim_ppc_spr269_regnum,
- sim_ppc_spr270_regnum, sim_ppc_spr271_regnum,
- sim_ppc_spr272_regnum, sim_ppc_spr273_regnum,
- sim_ppc_spr274_regnum, sim_ppc_spr275_regnum,
- sim_ppc_spr276_regnum, sim_ppc_spr277_regnum,
- sim_ppc_spr278_regnum, sim_ppc_spr279_regnum,
- sim_ppc_spr280_regnum, sim_ppc_spr281_regnum,
- sim_ppc_spr282_regnum, sim_ppc_spr283_regnum,
- sim_ppc_spr284_regnum, sim_ppc_spr285_regnum,
- sim_ppc_spr286_regnum, sim_ppc_spr287_regnum,
- sim_ppc_spr288_regnum, sim_ppc_spr289_regnum,
- sim_ppc_spr290_regnum, sim_ppc_spr291_regnum,
- sim_ppc_spr292_regnum, sim_ppc_spr293_regnum,
- sim_ppc_spr294_regnum, sim_ppc_spr295_regnum,
- sim_ppc_spr296_regnum, sim_ppc_spr297_regnum,
- sim_ppc_spr298_regnum, sim_ppc_spr299_regnum,
- sim_ppc_spr300_regnum, sim_ppc_spr301_regnum,
- sim_ppc_spr302_regnum, sim_ppc_spr303_regnum,
- sim_ppc_spr304_regnum, sim_ppc_spr305_regnum,
- sim_ppc_spr306_regnum, sim_ppc_spr307_regnum,
- sim_ppc_spr308_regnum, sim_ppc_spr309_regnum,
- sim_ppc_spr310_regnum, sim_ppc_spr311_regnum,
- sim_ppc_spr312_regnum, sim_ppc_spr313_regnum,
- sim_ppc_spr314_regnum, sim_ppc_spr315_regnum,
- sim_ppc_spr316_regnum, sim_ppc_spr317_regnum,
- sim_ppc_spr318_regnum, sim_ppc_spr319_regnum,
- sim_ppc_spr320_regnum, sim_ppc_spr321_regnum,
- sim_ppc_spr322_regnum, sim_ppc_spr323_regnum,
- sim_ppc_spr324_regnum, sim_ppc_spr325_regnum,
- sim_ppc_spr326_regnum, sim_ppc_spr327_regnum,
- sim_ppc_spr328_regnum, sim_ppc_spr329_regnum,
- sim_ppc_spr330_regnum, sim_ppc_spr331_regnum,
- sim_ppc_spr332_regnum, sim_ppc_spr333_regnum,
- sim_ppc_spr334_regnum, sim_ppc_spr335_regnum,
- sim_ppc_spr336_regnum, sim_ppc_spr337_regnum,
- sim_ppc_spr338_regnum, sim_ppc_spr339_regnum,
- sim_ppc_spr340_regnum, sim_ppc_spr341_regnum,
- sim_ppc_spr342_regnum, sim_ppc_spr343_regnum,
- sim_ppc_spr344_regnum, sim_ppc_spr345_regnum,
- sim_ppc_spr346_regnum, sim_ppc_spr347_regnum,
- sim_ppc_spr348_regnum, sim_ppc_spr349_regnum,
- sim_ppc_spr350_regnum, sim_ppc_spr351_regnum,
- sim_ppc_spr352_regnum, sim_ppc_spr353_regnum,
- sim_ppc_spr354_regnum, sim_ppc_spr355_regnum,
- sim_ppc_spr356_regnum, sim_ppc_spr357_regnum,
- sim_ppc_spr358_regnum, sim_ppc_spr359_regnum,
- sim_ppc_spr360_regnum, sim_ppc_spr361_regnum,
- sim_ppc_spr362_regnum, sim_ppc_spr363_regnum,
- sim_ppc_spr364_regnum, sim_ppc_spr365_regnum,
- sim_ppc_spr366_regnum, sim_ppc_spr367_regnum,
- sim_ppc_spr368_regnum, sim_ppc_spr369_regnum,
- sim_ppc_spr370_regnum, sim_ppc_spr371_regnum,
- sim_ppc_spr372_regnum, sim_ppc_spr373_regnum,
- sim_ppc_spr374_regnum, sim_ppc_spr375_regnum,
- sim_ppc_spr376_regnum, sim_ppc_spr377_regnum,
- sim_ppc_spr378_regnum, sim_ppc_spr379_regnum,
- sim_ppc_spr380_regnum, sim_ppc_spr381_regnum,
- sim_ppc_spr382_regnum, sim_ppc_spr383_regnum,
- sim_ppc_spr384_regnum, sim_ppc_spr385_regnum,
- sim_ppc_spr386_regnum, sim_ppc_spr387_regnum,
- sim_ppc_spr388_regnum, sim_ppc_spr389_regnum,
- sim_ppc_spr390_regnum, sim_ppc_spr391_regnum,
- sim_ppc_spr392_regnum, sim_ppc_spr393_regnum,
- sim_ppc_spr394_regnum, sim_ppc_spr395_regnum,
- sim_ppc_spr396_regnum, sim_ppc_spr397_regnum,
- sim_ppc_spr398_regnum, sim_ppc_spr399_regnum,
- sim_ppc_spr400_regnum, sim_ppc_spr401_regnum,
- sim_ppc_spr402_regnum, sim_ppc_spr403_regnum,
- sim_ppc_spr404_regnum, sim_ppc_spr405_regnum,
- sim_ppc_spr406_regnum, sim_ppc_spr407_regnum,
- sim_ppc_spr408_regnum, sim_ppc_spr409_regnum,
- sim_ppc_spr410_regnum, sim_ppc_spr411_regnum,
- sim_ppc_spr412_regnum, sim_ppc_spr413_regnum,
- sim_ppc_spr414_regnum, sim_ppc_spr415_regnum,
- sim_ppc_spr416_regnum, sim_ppc_spr417_regnum,
- sim_ppc_spr418_regnum, sim_ppc_spr419_regnum,
- sim_ppc_spr420_regnum, sim_ppc_spr421_regnum,
- sim_ppc_spr422_regnum, sim_ppc_spr423_regnum,
- sim_ppc_spr424_regnum, sim_ppc_spr425_regnum,
- sim_ppc_spr426_regnum, sim_ppc_spr427_regnum,
- sim_ppc_spr428_regnum, sim_ppc_spr429_regnum,
- sim_ppc_spr430_regnum, sim_ppc_spr431_regnum,
- sim_ppc_spr432_regnum, sim_ppc_spr433_regnum,
- sim_ppc_spr434_regnum, sim_ppc_spr435_regnum,
- sim_ppc_spr436_regnum, sim_ppc_spr437_regnum,
- sim_ppc_spr438_regnum, sim_ppc_spr439_regnum,
- sim_ppc_spr440_regnum, sim_ppc_spr441_regnum,
- sim_ppc_spr442_regnum, sim_ppc_spr443_regnum,
- sim_ppc_spr444_regnum, sim_ppc_spr445_regnum,
- sim_ppc_spr446_regnum, sim_ppc_spr447_regnum,
- sim_ppc_spr448_regnum, sim_ppc_spr449_regnum,
- sim_ppc_spr450_regnum, sim_ppc_spr451_regnum,
- sim_ppc_spr452_regnum, sim_ppc_spr453_regnum,
- sim_ppc_spr454_regnum, sim_ppc_spr455_regnum,
- sim_ppc_spr456_regnum, sim_ppc_spr457_regnum,
- sim_ppc_spr458_regnum, sim_ppc_spr459_regnum,
- sim_ppc_spr460_regnum, sim_ppc_spr461_regnum,
- sim_ppc_spr462_regnum, sim_ppc_spr463_regnum,
- sim_ppc_spr464_regnum, sim_ppc_spr465_regnum,
- sim_ppc_spr466_regnum, sim_ppc_spr467_regnum,
- sim_ppc_spr468_regnum, sim_ppc_spr469_regnum,
- sim_ppc_spr470_regnum, sim_ppc_spr471_regnum,
- sim_ppc_spr472_regnum, sim_ppc_spr473_regnum,
- sim_ppc_spr474_regnum, sim_ppc_spr475_regnum,
- sim_ppc_spr476_regnum, sim_ppc_spr477_regnum,
- sim_ppc_spr478_regnum, sim_ppc_spr479_regnum,
- sim_ppc_spr480_regnum, sim_ppc_spr481_regnum,
- sim_ppc_spr482_regnum, sim_ppc_spr483_regnum,
- sim_ppc_spr484_regnum, sim_ppc_spr485_regnum,
- sim_ppc_spr486_regnum, sim_ppc_spr487_regnum,
- sim_ppc_spr488_regnum, sim_ppc_spr489_regnum,
- sim_ppc_spr490_regnum, sim_ppc_spr491_regnum,
- sim_ppc_spr492_regnum, sim_ppc_spr493_regnum,
- sim_ppc_spr494_regnum, sim_ppc_spr495_regnum,
- sim_ppc_spr496_regnum, sim_ppc_spr497_regnum,
- sim_ppc_spr498_regnum, sim_ppc_spr499_regnum,
- sim_ppc_spr500_regnum, sim_ppc_spr501_regnum,
- sim_ppc_spr502_regnum, sim_ppc_spr503_regnum,
- sim_ppc_spr504_regnum, sim_ppc_spr505_regnum,
- sim_ppc_spr506_regnum, sim_ppc_spr507_regnum,
- sim_ppc_spr508_regnum, sim_ppc_spr509_regnum,
- sim_ppc_spr510_regnum, sim_ppc_spr511_regnum,
- sim_ppc_spr512_regnum, sim_ppc_spr513_regnum,
- sim_ppc_spr514_regnum, sim_ppc_spr515_regnum,
- sim_ppc_spr516_regnum, sim_ppc_spr517_regnum,
- sim_ppc_spr518_regnum, sim_ppc_spr519_regnum,
- sim_ppc_spr520_regnum, sim_ppc_spr521_regnum,
- sim_ppc_spr522_regnum, sim_ppc_spr523_regnum,
- sim_ppc_spr524_regnum, sim_ppc_spr525_regnum,
- sim_ppc_spr526_regnum, sim_ppc_spr527_regnum,
- sim_ppc_spr528_regnum, sim_ppc_spr529_regnum,
- sim_ppc_spr530_regnum, sim_ppc_spr531_regnum,
- sim_ppc_spr532_regnum, sim_ppc_spr533_regnum,
- sim_ppc_spr534_regnum, sim_ppc_spr535_regnum,
- sim_ppc_spr536_regnum, sim_ppc_spr537_regnum,
- sim_ppc_spr538_regnum, sim_ppc_spr539_regnum,
- sim_ppc_spr540_regnum, sim_ppc_spr541_regnum,
- sim_ppc_spr542_regnum, sim_ppc_spr543_regnum,
- sim_ppc_spr544_regnum, sim_ppc_spr545_regnum,
- sim_ppc_spr546_regnum, sim_ppc_spr547_regnum,
- sim_ppc_spr548_regnum, sim_ppc_spr549_regnum,
- sim_ppc_spr550_regnum, sim_ppc_spr551_regnum,
- sim_ppc_spr552_regnum, sim_ppc_spr553_regnum,
- sim_ppc_spr554_regnum, sim_ppc_spr555_regnum,
- sim_ppc_spr556_regnum, sim_ppc_spr557_regnum,
- sim_ppc_spr558_regnum, sim_ppc_spr559_regnum,
- sim_ppc_spr560_regnum, sim_ppc_spr561_regnum,
- sim_ppc_spr562_regnum, sim_ppc_spr563_regnum,
- sim_ppc_spr564_regnum, sim_ppc_spr565_regnum,
- sim_ppc_spr566_regnum, sim_ppc_spr567_regnum,
- sim_ppc_spr568_regnum, sim_ppc_spr569_regnum,
- sim_ppc_spr570_regnum, sim_ppc_spr571_regnum,
- sim_ppc_spr572_regnum, sim_ppc_spr573_regnum,
- sim_ppc_spr574_regnum, sim_ppc_spr575_regnum,
- sim_ppc_spr576_regnum, sim_ppc_spr577_regnum,
- sim_ppc_spr578_regnum, sim_ppc_spr579_regnum,
- sim_ppc_spr580_regnum, sim_ppc_spr581_regnum,
- sim_ppc_spr582_regnum, sim_ppc_spr583_regnum,
- sim_ppc_spr584_regnum, sim_ppc_spr585_regnum,
- sim_ppc_spr586_regnum, sim_ppc_spr587_regnum,
- sim_ppc_spr588_regnum, sim_ppc_spr589_regnum,
- sim_ppc_spr590_regnum, sim_ppc_spr591_regnum,
- sim_ppc_spr592_regnum, sim_ppc_spr593_regnum,
- sim_ppc_spr594_regnum, sim_ppc_spr595_regnum,
- sim_ppc_spr596_regnum, sim_ppc_spr597_regnum,
- sim_ppc_spr598_regnum, sim_ppc_spr599_regnum,
- sim_ppc_spr600_regnum, sim_ppc_spr601_regnum,
- sim_ppc_spr602_regnum, sim_ppc_spr603_regnum,
- sim_ppc_spr604_regnum, sim_ppc_spr605_regnum,
- sim_ppc_spr606_regnum, sim_ppc_spr607_regnum,
- sim_ppc_spr608_regnum, sim_ppc_spr609_regnum,
- sim_ppc_spr610_regnum, sim_ppc_spr611_regnum,
- sim_ppc_spr612_regnum, sim_ppc_spr613_regnum,
- sim_ppc_spr614_regnum, sim_ppc_spr615_regnum,
- sim_ppc_spr616_regnum, sim_ppc_spr617_regnum,
- sim_ppc_spr618_regnum, sim_ppc_spr619_regnum,
- sim_ppc_spr620_regnum, sim_ppc_spr621_regnum,
- sim_ppc_spr622_regnum, sim_ppc_spr623_regnum,
- sim_ppc_spr624_regnum, sim_ppc_spr625_regnum,
- sim_ppc_spr626_regnum, sim_ppc_spr627_regnum,
- sim_ppc_spr628_regnum, sim_ppc_spr629_regnum,
- sim_ppc_spr630_regnum, sim_ppc_spr631_regnum,
- sim_ppc_spr632_regnum, sim_ppc_spr633_regnum,
- sim_ppc_spr634_regnum, sim_ppc_spr635_regnum,
- sim_ppc_spr636_regnum, sim_ppc_spr637_regnum,
- sim_ppc_spr638_regnum, sim_ppc_spr639_regnum,
- sim_ppc_spr640_regnum, sim_ppc_spr641_regnum,
- sim_ppc_spr642_regnum, sim_ppc_spr643_regnum,
- sim_ppc_spr644_regnum, sim_ppc_spr645_regnum,
- sim_ppc_spr646_regnum, sim_ppc_spr647_regnum,
- sim_ppc_spr648_regnum, sim_ppc_spr649_regnum,
- sim_ppc_spr650_regnum, sim_ppc_spr651_regnum,
- sim_ppc_spr652_regnum, sim_ppc_spr653_regnum,
- sim_ppc_spr654_regnum, sim_ppc_spr655_regnum,
- sim_ppc_spr656_regnum, sim_ppc_spr657_regnum,
- sim_ppc_spr658_regnum, sim_ppc_spr659_regnum,
- sim_ppc_spr660_regnum, sim_ppc_spr661_regnum,
- sim_ppc_spr662_regnum, sim_ppc_spr663_regnum,
- sim_ppc_spr664_regnum, sim_ppc_spr665_regnum,
- sim_ppc_spr666_regnum, sim_ppc_spr667_regnum,
- sim_ppc_spr668_regnum, sim_ppc_spr669_regnum,
- sim_ppc_spr670_regnum, sim_ppc_spr671_regnum,
- sim_ppc_spr672_regnum, sim_ppc_spr673_regnum,
- sim_ppc_spr674_regnum, sim_ppc_spr675_regnum,
- sim_ppc_spr676_regnum, sim_ppc_spr677_regnum,
- sim_ppc_spr678_regnum, sim_ppc_spr679_regnum,
- sim_ppc_spr680_regnum, sim_ppc_spr681_regnum,
- sim_ppc_spr682_regnum, sim_ppc_spr683_regnum,
- sim_ppc_spr684_regnum, sim_ppc_spr685_regnum,
- sim_ppc_spr686_regnum, sim_ppc_spr687_regnum,
- sim_ppc_spr688_regnum, sim_ppc_spr689_regnum,
- sim_ppc_spr690_regnum, sim_ppc_spr691_regnum,
- sim_ppc_spr692_regnum, sim_ppc_spr693_regnum,
- sim_ppc_spr694_regnum, sim_ppc_spr695_regnum,
- sim_ppc_spr696_regnum, sim_ppc_spr697_regnum,
- sim_ppc_spr698_regnum, sim_ppc_spr699_regnum,
- sim_ppc_spr700_regnum, sim_ppc_spr701_regnum,
- sim_ppc_spr702_regnum, sim_ppc_spr703_regnum,
- sim_ppc_spr704_regnum, sim_ppc_spr705_regnum,
- sim_ppc_spr706_regnum, sim_ppc_spr707_regnum,
- sim_ppc_spr708_regnum, sim_ppc_spr709_regnum,
- sim_ppc_spr710_regnum, sim_ppc_spr711_regnum,
- sim_ppc_spr712_regnum, sim_ppc_spr713_regnum,
- sim_ppc_spr714_regnum, sim_ppc_spr715_regnum,
- sim_ppc_spr716_regnum, sim_ppc_spr717_regnum,
- sim_ppc_spr718_regnum, sim_ppc_spr719_regnum,
- sim_ppc_spr720_regnum, sim_ppc_spr721_regnum,
- sim_ppc_spr722_regnum, sim_ppc_spr723_regnum,
- sim_ppc_spr724_regnum, sim_ppc_spr725_regnum,
- sim_ppc_spr726_regnum, sim_ppc_spr727_regnum,
- sim_ppc_spr728_regnum, sim_ppc_spr729_regnum,
- sim_ppc_spr730_regnum, sim_ppc_spr731_regnum,
- sim_ppc_spr732_regnum, sim_ppc_spr733_regnum,
- sim_ppc_spr734_regnum, sim_ppc_spr735_regnum,
- sim_ppc_spr736_regnum, sim_ppc_spr737_regnum,
- sim_ppc_spr738_regnum, sim_ppc_spr739_regnum,
- sim_ppc_spr740_regnum, sim_ppc_spr741_regnum,
- sim_ppc_spr742_regnum, sim_ppc_spr743_regnum,
- sim_ppc_spr744_regnum, sim_ppc_spr745_regnum,
- sim_ppc_spr746_regnum, sim_ppc_spr747_regnum,
- sim_ppc_spr748_regnum, sim_ppc_spr749_regnum,
- sim_ppc_spr750_regnum, sim_ppc_spr751_regnum,
- sim_ppc_spr752_regnum, sim_ppc_spr753_regnum,
- sim_ppc_spr754_regnum, sim_ppc_spr755_regnum,
- sim_ppc_spr756_regnum, sim_ppc_spr757_regnum,
- sim_ppc_spr758_regnum, sim_ppc_spr759_regnum,
- sim_ppc_spr760_regnum, sim_ppc_spr761_regnum,
- sim_ppc_spr762_regnum, sim_ppc_spr763_regnum,
- sim_ppc_spr764_regnum, sim_ppc_spr765_regnum,
- sim_ppc_spr766_regnum, sim_ppc_spr767_regnum,
- sim_ppc_spr768_regnum, sim_ppc_spr769_regnum,
- sim_ppc_spr770_regnum, sim_ppc_spr771_regnum,
- sim_ppc_spr772_regnum, sim_ppc_spr773_regnum,
- sim_ppc_spr774_regnum, sim_ppc_spr775_regnum,
- sim_ppc_spr776_regnum, sim_ppc_spr777_regnum,
- sim_ppc_spr778_regnum, sim_ppc_spr779_regnum,
- sim_ppc_spr780_regnum, sim_ppc_spr781_regnum,
- sim_ppc_spr782_regnum, sim_ppc_spr783_regnum,
- sim_ppc_spr784_regnum, sim_ppc_spr785_regnum,
- sim_ppc_spr786_regnum, sim_ppc_spr787_regnum,
- sim_ppc_spr788_regnum, sim_ppc_spr789_regnum,
- sim_ppc_spr790_regnum, sim_ppc_spr791_regnum,
- sim_ppc_spr792_regnum, sim_ppc_spr793_regnum,
- sim_ppc_spr794_regnum, sim_ppc_spr795_regnum,
- sim_ppc_spr796_regnum, sim_ppc_spr797_regnum,
- sim_ppc_spr798_regnum, sim_ppc_spr799_regnum,
- sim_ppc_spr800_regnum, sim_ppc_spr801_regnum,
- sim_ppc_spr802_regnum, sim_ppc_spr803_regnum,
- sim_ppc_spr804_regnum, sim_ppc_spr805_regnum,
- sim_ppc_spr806_regnum, sim_ppc_spr807_regnum,
- sim_ppc_spr808_regnum, sim_ppc_spr809_regnum,
- sim_ppc_spr810_regnum, sim_ppc_spr811_regnum,
- sim_ppc_spr812_regnum, sim_ppc_spr813_regnum,
- sim_ppc_spr814_regnum, sim_ppc_spr815_regnum,
- sim_ppc_spr816_regnum, sim_ppc_spr817_regnum,
- sim_ppc_spr818_regnum, sim_ppc_spr819_regnum,
- sim_ppc_spr820_regnum, sim_ppc_spr821_regnum,
- sim_ppc_spr822_regnum, sim_ppc_spr823_regnum,
- sim_ppc_spr824_regnum, sim_ppc_spr825_regnum,
- sim_ppc_spr826_regnum, sim_ppc_spr827_regnum,
- sim_ppc_spr828_regnum, sim_ppc_spr829_regnum,
- sim_ppc_spr830_regnum, sim_ppc_spr831_regnum,
- sim_ppc_spr832_regnum, sim_ppc_spr833_regnum,
- sim_ppc_spr834_regnum, sim_ppc_spr835_regnum,
- sim_ppc_spr836_regnum, sim_ppc_spr837_regnum,
- sim_ppc_spr838_regnum, sim_ppc_spr839_regnum,
- sim_ppc_spr840_regnum, sim_ppc_spr841_regnum,
- sim_ppc_spr842_regnum, sim_ppc_spr843_regnum,
- sim_ppc_spr844_regnum, sim_ppc_spr845_regnum,
- sim_ppc_spr846_regnum, sim_ppc_spr847_regnum,
- sim_ppc_spr848_regnum, sim_ppc_spr849_regnum,
- sim_ppc_spr850_regnum, sim_ppc_spr851_regnum,
- sim_ppc_spr852_regnum, sim_ppc_spr853_regnum,
- sim_ppc_spr854_regnum, sim_ppc_spr855_regnum,
- sim_ppc_spr856_regnum, sim_ppc_spr857_regnum,
- sim_ppc_spr858_regnum, sim_ppc_spr859_regnum,
- sim_ppc_spr860_regnum, sim_ppc_spr861_regnum,
- sim_ppc_spr862_regnum, sim_ppc_spr863_regnum,
- sim_ppc_spr864_regnum, sim_ppc_spr865_regnum,
- sim_ppc_spr866_regnum, sim_ppc_spr867_regnum,
- sim_ppc_spr868_regnum, sim_ppc_spr869_regnum,
- sim_ppc_spr870_regnum, sim_ppc_spr871_regnum,
- sim_ppc_spr872_regnum, sim_ppc_spr873_regnum,
- sim_ppc_spr874_regnum, sim_ppc_spr875_regnum,
- sim_ppc_spr876_regnum, sim_ppc_spr877_regnum,
- sim_ppc_spr878_regnum, sim_ppc_spr879_regnum,
- sim_ppc_spr880_regnum, sim_ppc_spr881_regnum,
- sim_ppc_spr882_regnum, sim_ppc_spr883_regnum,
- sim_ppc_spr884_regnum, sim_ppc_spr885_regnum,
- sim_ppc_spr886_regnum, sim_ppc_spr887_regnum,
- sim_ppc_spr888_regnum, sim_ppc_spr889_regnum,
- sim_ppc_spr890_regnum, sim_ppc_spr891_regnum,
- sim_ppc_spr892_regnum, sim_ppc_spr893_regnum,
- sim_ppc_spr894_regnum, sim_ppc_spr895_regnum,
- sim_ppc_spr896_regnum, sim_ppc_spr897_regnum,
- sim_ppc_spr898_regnum, sim_ppc_spr899_regnum,
- sim_ppc_spr900_regnum, sim_ppc_spr901_regnum,
- sim_ppc_spr902_regnum, sim_ppc_spr903_regnum,
- sim_ppc_spr904_regnum, sim_ppc_spr905_regnum,
- sim_ppc_spr906_regnum, sim_ppc_spr907_regnum,
- sim_ppc_spr908_regnum, sim_ppc_spr909_regnum,
- sim_ppc_spr910_regnum, sim_ppc_spr911_regnum,
- sim_ppc_spr912_regnum, sim_ppc_spr913_regnum,
- sim_ppc_spr914_regnum, sim_ppc_spr915_regnum,
- sim_ppc_spr916_regnum, sim_ppc_spr917_regnum,
- sim_ppc_spr918_regnum, sim_ppc_spr919_regnum,
- sim_ppc_spr920_regnum, sim_ppc_spr921_regnum,
- sim_ppc_spr922_regnum, sim_ppc_spr923_regnum,
- sim_ppc_spr924_regnum, sim_ppc_spr925_regnum,
- sim_ppc_spr926_regnum, sim_ppc_spr927_regnum,
- sim_ppc_spr928_regnum, sim_ppc_spr929_regnum,
- sim_ppc_spr930_regnum, sim_ppc_spr931_regnum,
- sim_ppc_spr932_regnum, sim_ppc_spr933_regnum,
- sim_ppc_spr934_regnum, sim_ppc_spr935_regnum,
- sim_ppc_spr936_regnum, sim_ppc_spr937_regnum,
- sim_ppc_spr938_regnum, sim_ppc_spr939_regnum,
- sim_ppc_spr940_regnum, sim_ppc_spr941_regnum,
- sim_ppc_spr942_regnum, sim_ppc_spr943_regnum,
- sim_ppc_spr944_regnum, sim_ppc_spr945_regnum,
- sim_ppc_spr946_regnum, sim_ppc_spr947_regnum,
- sim_ppc_spr948_regnum, sim_ppc_spr949_regnum,
- sim_ppc_spr950_regnum, sim_ppc_spr951_regnum,
- sim_ppc_spr952_regnum, sim_ppc_spr953_regnum,
- sim_ppc_spr954_regnum, sim_ppc_spr955_regnum,
- sim_ppc_spr956_regnum, sim_ppc_spr957_regnum,
- sim_ppc_spr958_regnum, sim_ppc_spr959_regnum,
- sim_ppc_spr960_regnum, sim_ppc_spr961_regnum,
- sim_ppc_spr962_regnum, sim_ppc_spr963_regnum,
- sim_ppc_spr964_regnum, sim_ppc_spr965_regnum,
- sim_ppc_spr966_regnum, sim_ppc_spr967_regnum,
- sim_ppc_spr968_regnum, sim_ppc_spr969_regnum,
- sim_ppc_spr970_regnum, sim_ppc_spr971_regnum,
- sim_ppc_spr972_regnum, sim_ppc_spr973_regnum,
- sim_ppc_spr974_regnum, sim_ppc_spr975_regnum,
- sim_ppc_spr976_regnum, sim_ppc_spr977_regnum,
- sim_ppc_spr978_regnum, sim_ppc_spr979_regnum,
- sim_ppc_spr980_regnum, sim_ppc_spr981_regnum,
- sim_ppc_spr982_regnum, sim_ppc_spr983_regnum,
- sim_ppc_spr984_regnum, sim_ppc_spr985_regnum,
- sim_ppc_spr986_regnum, sim_ppc_spr987_regnum,
- sim_ppc_spr988_regnum, sim_ppc_spr989_regnum,
- sim_ppc_spr990_regnum, sim_ppc_spr991_regnum,
- sim_ppc_spr992_regnum, sim_ppc_spr993_regnum,
- sim_ppc_spr994_regnum, sim_ppc_spr995_regnum,
- sim_ppc_spr996_regnum, sim_ppc_spr997_regnum,
- sim_ppc_spr998_regnum, sim_ppc_spr999_regnum,
- sim_ppc_spr1000_regnum, sim_ppc_spr1001_regnum,
- sim_ppc_spr1002_regnum, sim_ppc_spr1003_regnum,
- sim_ppc_spr1004_regnum, sim_ppc_spr1005_regnum,
- sim_ppc_spr1006_regnum, sim_ppc_spr1007_regnum,
- sim_ppc_spr1008_regnum, sim_ppc_spr1009_regnum,
- sim_ppc_spr1010_regnum, sim_ppc_spr1011_regnum,
- sim_ppc_spr1012_regnum, sim_ppc_spr1013_regnum,
- sim_ppc_spr1014_regnum, sim_ppc_spr1015_regnum,
- sim_ppc_spr1016_regnum, sim_ppc_spr1017_regnum,
- sim_ppc_spr1018_regnum, sim_ppc_spr1019_regnum,
- sim_ppc_spr1020_regnum, sim_ppc_spr1021_regnum,
- sim_ppc_spr1022_regnum, sim_ppc_spr1023_regnum
- };
-
-
-/* Sizes of various register sets. */
-enum
- {
- sim_ppc_num_gprs = 32,
- sim_ppc_num_fprs = 32,
- sim_ppc_num_vrs = 32,
- sim_ppc_num_srs = 16,
- sim_ppc_num_sprs = 1024,
- };
-
-
-/* Return the register name for the supplied SPR number if any, or
- NULL if none. */
-extern const char *sim_spr_register_name (int);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* SIM_PPC_H */
diff --git a/include/gdb/sim-rl78.h b/include/gdb/sim-rl78.h
deleted file mode 100644
index c52a2a7ff..000000000
--- a/include/gdb/sim-rl78.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/* sim-rx.h --- interface between rl78 simulator and GDB.
-
- Copyright 2011-2013 Free Software Foundation, Inc.
-
- Contributed by Red Hat.
-
- 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 3 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, see <http://www.gnu.org/licenses/>. */
-
-#if !defined (SIM_RL78_H)
-#define SIM_RL78_H
-
-enum sim_rl78_regnum
-{
- sim_rl78_bank0_r0_regnum,
- sim_rl78_bank0_r1_regnum,
- sim_rl78_bank0_r2_regnum,
- sim_rl78_bank0_r3_regnum,
- sim_rl78_bank0_r4_regnum,
- sim_rl78_bank0_r5_regnum,
- sim_rl78_bank0_r6_regnum,
- sim_rl78_bank0_r7_regnum,
-
- sim_rl78_bank1_r0_regnum,
- sim_rl78_bank1_r1_regnum,
- sim_rl78_bank1_r2_regnum,
- sim_rl78_bank1_r3_regnum,
- sim_rl78_bank1_r4_regnum,
- sim_rl78_bank1_r5_regnum,
- sim_rl78_bank1_r6_regnum,
- sim_rl78_bank1_r7_regnum,
-
- sim_rl78_bank2_r0_regnum,
- sim_rl78_bank2_r1_regnum,
- sim_rl78_bank2_r2_regnum,
- sim_rl78_bank2_r3_regnum,
- sim_rl78_bank2_r4_regnum,
- sim_rl78_bank2_r5_regnum,
- sim_rl78_bank2_r6_regnum,
- sim_rl78_bank2_r7_regnum,
-
- sim_rl78_bank3_r0_regnum,
- sim_rl78_bank3_r1_regnum,
- sim_rl78_bank3_r2_regnum,
- sim_rl78_bank3_r3_regnum,
- sim_rl78_bank3_r4_regnum,
- sim_rl78_bank3_r5_regnum,
- sim_rl78_bank3_r6_regnum,
- sim_rl78_bank3_r7_regnum,
-
- sim_rl78_psw_regnum,
- sim_rl78_es_regnum,
- sim_rl78_cs_regnum,
- sim_rl78_pc_regnum,
-
- sim_rl78_spl_regnum,
- sim_rl78_sph_regnum,
- sim_rl78_pmc_regnum,
- sim_rl78_mem_regnum,
-
- sim_rl78_num_regs
-};
-
-#endif /* SIM_RL78_H */
diff --git a/include/gdb/sim-rx.h b/include/gdb/sim-rx.h
deleted file mode 100644
index c4d855f76..000000000
--- a/include/gdb/sim-rx.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/* sim-rx.h --- interface between RX simulator and GDB.
-
- Copyright 2008-2013 Free Software Foundation, Inc.
-
- Contributed by Red Hat.
-
- 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 3 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, see <http://www.gnu.org/licenses/>. */
-
-#if !defined (SIM_RX_H)
-#define SIM_RX_H
-
-enum sim_rx_regnum
- {
- sim_rx_r0_regnum,
- sim_rx_r1_regnum,
- sim_rx_r2_regnum,
- sim_rx_r3_regnum,
- sim_rx_r4_regnum,
- sim_rx_r5_regnum,
- sim_rx_r6_regnum,
- sim_rx_r7_regnum,
- sim_rx_r8_regnum,
- sim_rx_r9_regnum,
- sim_rx_r10_regnum,
- sim_rx_r11_regnum,
- sim_rx_r12_regnum,
- sim_rx_r13_regnum,
- sim_rx_r14_regnum,
- sim_rx_r15_regnum,
- sim_rx_usp_regnum,
- sim_rx_isp_regnum,
- sim_rx_ps_regnum,
- sim_rx_pc_regnum,
- sim_rx_intb_regnum,
- sim_rx_bpsw_regnum,
- sim_rx_bpc_regnum,
- sim_rx_fintv_regnum,
- sim_rx_fpsw_regnum,
- sim_rx_acc_regnum,
- sim_rx_num_regs
- };
-
-#endif /* SIM_RX_H */
diff --git a/include/gdb/sim-sh.h b/include/gdb/sim-sh.h
deleted file mode 100644
index 4e37992ed..000000000
--- a/include/gdb/sim-sh.h
+++ /dev/null
@@ -1,169 +0,0 @@
-/* This file defines the interface between the sh simulator and gdb.
- Copyright (C) 2000-2013 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 3 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, see <http://www.gnu.org/licenses/>. */
-
-#if !defined (SIM_SH_H)
-#define SIM_SH_H
-
-#ifdef __cplusplus
-extern "C" { // }
-#endif
-
-/* The simulator makes use of the following register information. */
-
-enum
-{
- SIM_SH_R0_REGNUM = 0,
- SIM_SH_R1_REGNUM,
- SIM_SH_R2_REGNUM,
- SIM_SH_R3_REGNUM,
- SIM_SH_R4_REGNUM,
- SIM_SH_R5_REGNUM,
- SIM_SH_R6_REGNUM,
- SIM_SH_R7_REGNUM,
- SIM_SH_R8_REGNUM,
- SIM_SH_R9_REGNUM,
- SIM_SH_R10_REGNUM,
- SIM_SH_R11_REGNUM,
- SIM_SH_R12_REGNUM,
- SIM_SH_R13_REGNUM,
- SIM_SH_R14_REGNUM,
- SIM_SH_R15_REGNUM,
- SIM_SH_PC_REGNUM,
- SIM_SH_PR_REGNUM,
- SIM_SH_GBR_REGNUM,
- SIM_SH_VBR_REGNUM,
- SIM_SH_MACH_REGNUM,
- SIM_SH_MACL_REGNUM,
- SIM_SH_SR_REGNUM,
- SIM_SH_FPUL_REGNUM,
- SIM_SH_FPSCR_REGNUM,
- SIM_SH_FR0_REGNUM, /* FRn registers: sh3e / sh4 */
- SIM_SH_FR1_REGNUM,
- SIM_SH_FR2_REGNUM,
- SIM_SH_FR3_REGNUM,
- SIM_SH_FR4_REGNUM,
- SIM_SH_FR5_REGNUM,
- SIM_SH_FR6_REGNUM,
- SIM_SH_FR7_REGNUM,
- SIM_SH_FR8_REGNUM,
- SIM_SH_FR9_REGNUM,
- SIM_SH_FR10_REGNUM,
- SIM_SH_FR11_REGNUM,
- SIM_SH_FR12_REGNUM,
- SIM_SH_FR13_REGNUM,
- SIM_SH_FR14_REGNUM,
- SIM_SH_FR15_REGNUM,
- SIM_SH_SSR_REGNUM, /* sh3{,e,-dsp}, sh4 */
- SIM_SH_SPC_REGNUM, /* sh3{,e,-dsp}, sh4 */
- SIM_SH_R0_BANK0_REGNUM, /* SIM_SH_Rn_BANKm_REGNUM: sh3[e] / sh4 */
- SIM_SH_R1_BANK0_REGNUM,
- SIM_SH_R2_BANK0_REGNUM,
- SIM_SH_R3_BANK0_REGNUM,
- SIM_SH_R4_BANK0_REGNUM,
- SIM_SH_R5_BANK0_REGNUM,
- SIM_SH_R6_BANK0_REGNUM,
- SIM_SH_R7_BANK0_REGNUM,
- SIM_SH_R0_BANK1_REGNUM,
- SIM_SH_R1_BANK1_REGNUM,
- SIM_SH_R2_BANK1_REGNUM,
- SIM_SH_R3_BANK1_REGNUM,
- SIM_SH_R4_BANK1_REGNUM,
- SIM_SH_R5_BANK1_REGNUM,
- SIM_SH_R6_BANK1_REGNUM,
- SIM_SH_R7_BANK1_REGNUM,
- SIM_SH_XF0_REGNUM,
- SIM_SH_XF1_REGNUM,
- SIM_SH_XF2_REGNUM,
- SIM_SH_XF3_REGNUM,
- SIM_SH_XF4_REGNUM,
- SIM_SH_XF5_REGNUM,
- SIM_SH_XF6_REGNUM,
- SIM_SH_XF7_REGNUM,
- SIM_SH_XF8_REGNUM,
- SIM_SH_XF9_REGNUM,
- SIM_SH_XF10_REGNUM,
- SIM_SH_XF11_REGNUM,
- SIM_SH_XF12_REGNUM,
- SIM_SH_XF13_REGNUM,
- SIM_SH_XF14_REGNUM,
- SIM_SH_XF15_REGNUM,
- SIM_SH_SGR_REGNUM,
- SIM_SH_DBR_REGNUM,
- SIM_SH4_NUM_REGS, /* 77 */
-
- /* sh[3]-dsp */
- SIM_SH_DSR_REGNUM,
- SIM_SH_A0G_REGNUM,
- SIM_SH_A0_REGNUM,
- SIM_SH_A1G_REGNUM,
- SIM_SH_A1_REGNUM,
- SIM_SH_M0_REGNUM,
- SIM_SH_M1_REGNUM,
- SIM_SH_X0_REGNUM,
- SIM_SH_X1_REGNUM,
- SIM_SH_Y0_REGNUM,
- SIM_SH_Y1_REGNUM,
- SIM_SH_MOD_REGNUM,
- SIM_SH_RS_REGNUM,
- SIM_SH_RE_REGNUM,
- SIM_SH_R0_BANK_REGNUM,
- SIM_SH_R1_BANK_REGNUM,
- SIM_SH_R2_BANK_REGNUM,
- SIM_SH_R3_BANK_REGNUM,
- SIM_SH_R4_BANK_REGNUM,
- SIM_SH_R5_BANK_REGNUM,
- SIM_SH_R6_BANK_REGNUM,
- SIM_SH_R7_BANK_REGNUM,
- /* 109..127: room for expansion. */
- SIM_SH_TBR_REGNUM,
- SIM_SH_IBNR_REGNUM,
- SIM_SH_IBCR_REGNUM,
- SIM_SH_BANK_REGNUM,
- SIM_SH_BANK_MACL_REGNUM,
- SIM_SH_BANK_GBR_REGNUM,
- SIM_SH_BANK_PR_REGNUM,
- SIM_SH_BANK_IVN_REGNUM,
- SIM_SH_BANK_MACH_REGNUM
-};
-
-enum
-{
- SIM_SH64_R0_REGNUM = 0,
- SIM_SH64_SP_REGNUM = 15,
- SIM_SH64_PC_REGNUM = 64,
- SIM_SH64_SR_REGNUM = 65,
- SIM_SH64_SSR_REGNUM = 66,
- SIM_SH64_SPC_REGNUM = 67,
- SIM_SH64_TR0_REGNUM = 68,
- SIM_SH64_FPCSR_REGNUM = 76,
- SIM_SH64_FR0_REGNUM = 77
-};
-
-enum
-{
- SIM_SH64_NR_REGS = 141, /* total number of architectural registers */
- SIM_SH64_NR_R_REGS = 64, /* number of general registers */
- SIM_SH64_NR_TR_REGS = 8, /* number of target registers */
- SIM_SH64_NR_FP_REGS = 64 /* number of floating point registers */
-};
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/include/gdbm.h b/include/gdbm.h
deleted file mode 100644
index d2a600639..000000000
--- a/include/gdbm.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/* GNU DBM - DataBase Manager include file
- Copyright 1989, 1991 Free Software Foundation, Inc.
- Written by Philip A. Nelson.
-
-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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-/* You may contact the author by:
- e-mail: phil@wwu.edu
- us-mail: Philip A. Nelson
- Computer Science Department
- Western Washington University
- Bellingham, WA 98226
- phone: (206) 676-3035
-
-*************************************************************************/
-
-/* Parameters to gdbm_open for READERS, WRITERS, and WRITERS who
- can create the database. */
-#define GDBM_READER 0
-#define GDBM_WRITER 1
-#define GDBM_WRCREAT 2
-#define GDBM_NEWDB 3
-
-/* Parameters to gdbm_store for simple insertion or replacement. */
-#define GDBM_INSERT 0
-#define GDBM_REPLACE 1
-
-
-/* The data and key structure. This structure is defined for compatibility. */
-typedef struct {
- char *dptr;
- int dsize;
- } datum;
-
-
-/* The file information header. This is good enough for most applications. */
-typedef struct {int dummy[10];} *GDBM_FILE;
-
-
-/* These are the routines! */
-
-extern GDBM_FILE gdbm_open ();
-
-extern void gdbm_close ();
-
-extern datum gdbm_fetch ();
-
-extern int gdbm_store ();
-
-extern int gdbm_delete ();
-
-extern datum gdbm_firstkey ();
-
-extern datum gdbm_nextkey ();
-
-extern int gdbm_reorganize ();
-
-
-/* gdbm sends back the following error codes in the variable gdbm_errno. */
-typedef enum { NO_ERROR,
- MALLOC_ERROR,
- BLOCK_SIZE_ERROR,
- FILE_OPEN_ERROR,
- FILE_WRITE_ERROR,
- FILE_SEEK_ERROR,
- FILE_READ_ERROR,
- BAD_MAGIC_NUMBER,
- EMPTY_DATABASE,
- CANT_BE_READER,
- CANT_BE_WRITER,
- READER_CANT_RECOVER,
- READER_CANT_DELETE,
- READER_CANT_STORE,
- READER_CANT_REORGANIZE,
- UNKNOWN_UPDATE,
- ITEM_NOT_FOUND,
- REORGANIZE_FAILED,
- CANNOT_REPLACE}
- gdbm_error;
diff --git a/include/getopt.h b/include/getopt.h
deleted file mode 100644
index 5421cabed..000000000
--- a/include/getopt.h
+++ /dev/null
@@ -1,144 +0,0 @@
-/* Declarations for getopt.
- Copyright 1989, 1990, 1991, 1992, 1993, 1994, 1996, 1997, 1998, 2000,
- 2002 Free Software Foundation, Inc.
-
- NOTE: The canonical source of this file is maintained with the GNU C Library.
- Bugs can be reported to bug-glibc@gnu.org.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by the
- Free Software Foundation; either version 2, or (at your option) any
- later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-#ifndef _GETOPT_H
-#define _GETOPT_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* For communication from `getopt' to the caller.
- When `getopt' finds an option that takes an argument,
- the argument value is returned here.
- Also, when `ordering' is RETURN_IN_ORDER,
- each non-option ARGV-element is returned here. */
-
-extern char *optarg;
-
-/* Index in ARGV of the next element to be scanned.
- This is used for communication to and from the caller
- and for communication between successive calls to `getopt'.
-
- On entry to `getopt', zero means this is the first call; initialize.
-
- When `getopt' returns -1, this is the index of the first of the
- non-option elements that the caller should itself scan.
-
- Otherwise, `optind' communicates from one call to the next
- how much of ARGV has been scanned so far. */
-
-extern int optind;
-
-/* Callers store zero here to inhibit the error message `getopt' prints
- for unrecognized options. */
-
-extern int opterr;
-
-/* Set to an option character which was unrecognized. */
-
-extern int optopt;
-
-/* Describe the long-named options requested by the application.
- The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
- of `struct option' terminated by an element containing a name which is
- zero.
-
- The field `has_arg' is:
- no_argument (or 0) if the option does not take an argument,
- required_argument (or 1) if the option requires an argument,
- optional_argument (or 2) if the option takes an optional argument.
-
- If the field `flag' is not NULL, it points to a variable that is set
- to the value given in the field `val' when the option is found, but
- left unchanged if the option is not found.
-
- To have a long-named option do something other than set an `int' to
- a compiled-in constant, such as set a value from `optarg', set the
- option's `flag' field to zero and its `val' field to a nonzero
- value (the equivalent single-letter option character, if there is
- one). For long options that have a zero `flag' field, `getopt'
- returns the contents of the `val' field. */
-
-struct option
-{
-#if defined (__STDC__) && __STDC__
- const char *name;
-#else
- char *name;
-#endif
- /* has_arg can't be an enum because some compilers complain about
- type mismatches in all the code that assumes it is an int. */
- int has_arg;
- int *flag;
- int val;
-};
-
-/* Names for the values of the `has_arg' field of `struct option'. */
-
-#define no_argument 0
-#define required_argument 1
-#define optional_argument 2
-
-#if defined (__STDC__) && __STDC__
-/* HAVE_DECL_* is a three-state macro: undefined, 0 or 1. If it is
- undefined, we haven't run the autoconf check so provide the
- declaration without arguments. If it is 0, we checked and failed
- to find the declaration so provide a fully prototyped one. If it
- is 1, we found it so don't provide any declaration at all. */
-#if !HAVE_DECL_GETOPT
-#if defined (__GNU_LIBRARY__) || defined (HAVE_DECL_GETOPT)
-/* Many other libraries have conflicting prototypes for getopt, with
- differences in the consts, in unistd.h. To avoid compilation
- errors, only prototype getopt for the GNU C library. */
-extern int getopt (int argc, char *const *argv, const char *shortopts);
-#else
-#ifndef __cplusplus
-extern int getopt ();
-#endif /* __cplusplus */
-#endif
-#endif /* !HAVE_DECL_GETOPT */
-
-extern int getopt_long (int argc, char *const *argv, const char *shortopts,
- const struct option *longopts, int *longind);
-extern int getopt_long_only (int argc, char *const *argv,
- const char *shortopts,
- const struct option *longopts, int *longind);
-
-/* Internal only. Users should not call this directly. */
-extern int _getopt_internal (int argc, char *const *argv,
- const char *shortopts,
- const struct option *longopts, int *longind,
- int long_only);
-#else /* not __STDC__ */
-extern int getopt ();
-extern int getopt_long ();
-extern int getopt_long_only ();
-
-extern int _getopt_internal ();
-#endif /* __STDC__ */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* getopt.h */
diff --git a/include/hashtab.h b/include/hashtab.h
deleted file mode 100644
index 188b8494d..000000000
--- a/include/hashtab.h
+++ /dev/null
@@ -1,205 +0,0 @@
-/* An expandable hash tables datatype.
- Copyright (C) 1999, 2000, 2002, 2003, 2004, 2005, 2009, 2010
- Free Software Foundation, Inc.
- Contributed by Vladimir Makarov (vmakarov@cygnus.com).
-
-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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-/* This package implements basic hash table functionality. It is possible
- to search for an entry, create an entry and destroy an entry.
-
- Elements in the table are generic pointers.
-
- The size of the table is not fixed; if the occupancy of the table
- grows too high the hash table will be expanded.
-
- The abstract data implementation is based on generalized Algorithm D
- from Knuth's book "The art of computer programming". Hash table is
- expanded by creation of new hash table and transferring elements from
- the old table to the new table. */
-
-#ifndef __HASHTAB_H__
-#define __HASHTAB_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-#include "ansidecl.h"
-
-/* The type for a hash code. */
-typedef unsigned int hashval_t;
-
-/* Callback function pointer types. */
-
-/* Calculate hash of a table entry. */
-typedef hashval_t (*htab_hash) (const void *);
-
-/* Compare a table entry with a possible entry. The entry already in
- the table always comes first, so the second element can be of a
- different type (but in this case htab_find and htab_find_slot
- cannot be used; instead the variants that accept a hash value
- must be used). */
-typedef int (*htab_eq) (const void *, const void *);
-
-/* Cleanup function called whenever a live element is removed from
- the hash table. */
-typedef void (*htab_del) (void *);
-
-/* Function called by htab_traverse for each live element. The first
- arg is the slot of the element (which can be passed to htab_clear_slot
- if desired), the second arg is the auxiliary pointer handed to
- htab_traverse. Return 1 to continue scan, 0 to stop. */
-typedef int (*htab_trav) (void **, void *);
-
-/* Memory-allocation function, with the same functionality as calloc().
- Iff it returns NULL, the hash table implementation will pass an error
- code back to the user, so if your code doesn't handle errors,
- best if you use xcalloc instead. */
-typedef void *(*htab_alloc) (size_t, size_t);
-
-/* We also need a free() routine. */
-typedef void (*htab_free) (void *);
-
-/* Memory allocation and deallocation; variants which take an extra
- argument. */
-typedef void *(*htab_alloc_with_arg) (void *, size_t, size_t);
-typedef void (*htab_free_with_arg) (void *, void *);
-
-/* This macro defines reserved value for empty table entry. */
-
-#define HTAB_EMPTY_ENTRY ((PTR) 0)
-
-/* This macro defines reserved value for table entry which contained
- a deleted element. */
-
-#define HTAB_DELETED_ENTRY ((PTR) 1)
-
-/* Hash tables are of the following type. The structure
- (implementation) of this type is not needed for using the hash
- tables. All work with hash table should be executed only through
- functions mentioned below. The size of this structure is subject to
- change. */
-
-struct htab {
- /* Pointer to hash function. */
- htab_hash hash_f;
-
- /* Pointer to comparison function. */
- htab_eq eq_f;
-
- /* Pointer to cleanup function. */
- htab_del del_f;
-
- /* Table itself. */
- void **entries;
-
- /* Current size (in entries) of the hash table. */
- size_t size;
-
- /* Current number of elements including also deleted elements. */
- size_t n_elements;
-
- /* Current number of deleted elements in the table. */
- size_t n_deleted;
-
- /* The following member is used for debugging. Its value is number
- of all calls of `htab_find_slot' for the hash table. */
- unsigned int searches;
-
- /* The following member is used for debugging. Its value is number
- of collisions fixed for time of work with the hash table. */
- unsigned int collisions;
-
- /* Pointers to allocate/free functions. */
- htab_alloc alloc_f;
- htab_free free_f;
-
- /* Alternate allocate/free functions, which take an extra argument. */
- void *alloc_arg;
- htab_alloc_with_arg alloc_with_arg_f;
- htab_free_with_arg free_with_arg_f;
-
- /* Current size (in entries) of the hash table, as an index into the
- table of primes. */
- unsigned int size_prime_index;
-};
-
-typedef struct htab *htab_t;
-
-/* An enum saying whether we insert into the hash table or not. */
-enum insert_option {NO_INSERT, INSERT};
-
-/* The prototypes of the package functions. */
-
-extern htab_t htab_create_alloc (size_t, htab_hash,
- htab_eq, htab_del,
- htab_alloc, htab_free);
-
-extern htab_t htab_create_alloc_ex (size_t, htab_hash,
- htab_eq, htab_del,
- void *, htab_alloc_with_arg,
- htab_free_with_arg);
-
-extern htab_t htab_create_typed_alloc (size_t, htab_hash, htab_eq, htab_del,
- htab_alloc, htab_alloc, htab_free);
-
-/* Backward-compatibility functions. */
-extern htab_t htab_create (size_t, htab_hash, htab_eq, htab_del);
-extern htab_t htab_try_create (size_t, htab_hash, htab_eq, htab_del);
-
-extern void htab_set_functions_ex (htab_t, htab_hash,
- htab_eq, htab_del,
- void *, htab_alloc_with_arg,
- htab_free_with_arg);
-
-extern void htab_delete (htab_t);
-extern void htab_empty (htab_t);
-
-extern void * htab_find (htab_t, const void *);
-extern void ** htab_find_slot (htab_t, const void *, enum insert_option);
-extern void * htab_find_with_hash (htab_t, const void *, hashval_t);
-extern void ** htab_find_slot_with_hash (htab_t, const void *,
- hashval_t, enum insert_option);
-extern void htab_clear_slot (htab_t, void **);
-extern void htab_remove_elt (htab_t, void *);
-extern void htab_remove_elt_with_hash (htab_t, void *, hashval_t);
-
-extern void htab_traverse (htab_t, htab_trav, void *);
-extern void htab_traverse_noresize (htab_t, htab_trav, void *);
-
-extern size_t htab_size (htab_t);
-extern size_t htab_elements (htab_t);
-extern double htab_collisions (htab_t);
-
-/* A hash function for pointers. */
-extern htab_hash htab_hash_pointer;
-
-/* An equality function for pointers. */
-extern htab_eq htab_eq_pointer;
-
-/* A hash function for null-terminated strings. */
-extern hashval_t htab_hash_string (const void *);
-
-/* An iterative hash function for arbitrary data. */
-extern hashval_t iterative_hash (const void *, size_t, hashval_t);
-/* Shorthand for hashing something with an intrinsic size. */
-#define iterative_hash_object(OB,INIT) iterative_hash (&OB, sizeof (OB), INIT)
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* __HASHTAB_H */
diff --git a/include/hp-symtab.h b/include/hp-symtab.h
deleted file mode 100644
index e944e9091..000000000
--- a/include/hp-symtab.h
+++ /dev/null
@@ -1,1867 +0,0 @@
-/* Definitions and structures for reading debug symbols from the
- native HP C compiler.
-
- Written by the Center for Software Science at the University of Utah
- and by Cygnus Support.
-
- Copyright 1994, 1995, 1998, 1999, 2003 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef HP_SYMTAB_INCLUDED
-#define HP_SYMTAB_INCLUDED
-
-/* General information:
-
- This header file defines and describes only the data structures
- necessary to read debug symbols produced by the HP C compiler,
- HP ANSI C++ compiler, and HP FORTRAN 90 compiler using the
- SOM object file format.
- (For a full description of the debug format, ftp hpux-symtab.h from
- jaguar.cs.utah.edu:/dist).
-
- Additional notes (Rich Title)
- This file is a reverse-engineered version of a file called
- "symtab.h" which exists internal to HP's Computer Languages Organization
- in /CLO/Components/DDE/obj/som/symtab.h. Because HP's version of
- the file is copyrighted and not distributed, it is necessary for
- GDB to use the reverse-engineered version that follows.
- Work was done by Cygnus to reverse-engineer the C subset of symtab.h.
- The WDB project has extended this to also contain the C++
- symbol definitions, the F90 symbol definitions,
- and the DOC (debugging-optimized-code) symbol definitions.
- In some cases (the C++ symbol definitions)
- I have added internal documentation here that
- goes beyond what is supplied in HP's symtab.h. If we someday
- unify these files again, the extra comments should be merged back
- into HP's symtab.h.
-
- -------------------------------------------------------------------
-
- Debug symbols are contained entirely within an unloadable space called
- $DEBUG$. $DEBUG$ contains several subspaces which group related
- debug symbols.
-
- $GNTT$ contains information for global variables, types and contants.
-
- $LNTT$ contains information for procedures (including nesting), scoping
- information, local variables, types, and constants.
-
- $SLT$ contains source line information so that code addresses may be
- mapped to source lines.
-
- $VT$ contains various strings and constants for named objects (variables,
- typedefs, functions, etc). Strings are stored as null-terminated character
- lists. Constants always begin on word boundaries. The first byte of
- the VT must be zero (a null string).
-
- $XT$ is not currently used by GDB.
-
- Many structures within the subspaces point to other structures within
- the same subspace, or to structures within a different subspace. These
- pointers are represented as a structure index from the beginning of
- the appropriate subspace. */
-
-/* Used to describe where a constant is stored. */
-enum location_type
-{
- LOCATION_IMMEDIATE,
- LOCATION_PTR,
- LOCATION_VT,
-};
-
-/* Languages supported by this debug format. Within the data structures
- this type is limited to 4 bits for a maximum of 16 languages. */
-enum hp_language
-{
- HP_LANGUAGE_UNKNOWN,
- HP_LANGUAGE_C,
- HP_LANGUAGE_FORTRAN,
- HP_LANGUAGE_F77 = HP_LANGUAGE_FORTRAN,
- HP_LANGUAGE_PASCAL,
- HP_LANGUAGE_MODCAL,
- HP_LANGUAGE_COBOL,
- HP_LANGUAGE_BASIC,
- HP_LANGUAGE_ADA,
- HP_LANGUAGE_CPLUSPLUS,
- HP_LANGUAGE_DMPASCAL
-};
-
-
-/* Basic data types available in this debug format. Within the data
- structures this type is limited to 5 bits for a maximum of 32 basic
- data types. */
-enum hp_type
-{
- HP_TYPE_UNDEFINED, /* 0 */
- HP_TYPE_BOOLEAN, /* 1 */
- HP_TYPE_CHAR, /* 2 */
- HP_TYPE_INT, /* 3 */
- HP_TYPE_UNSIGNED_INT, /* 4 */
- HP_TYPE_REAL, /* 5 */
- HP_TYPE_COMPLEX, /* 6 */
- HP_TYPE_STRING200, /* 7 */
- HP_TYPE_LONGSTRING200, /* 8 */
- HP_TYPE_TEXT, /* 9 */
- HP_TYPE_FLABEL, /* 10 */
- HP_TYPE_FTN_STRING_SPEC, /* 11 */
- HP_TYPE_MOD_STRING_SPEC, /* 12 */
- HP_TYPE_PACKED_DECIMAL, /* 13 */
- HP_TYPE_REAL_3000, /* 14 */
- HP_TYPE_MOD_STRING_3000, /* 15 */
- HP_TYPE_ANYPOINTER, /* 16 */
- HP_TYPE_GLOBAL_ANYPOINTER, /* 17 */
- HP_TYPE_LOCAL_ANYPOINTER, /* 18 */
- HP_TYPE_COMPLEXS3000, /* 19 */
- HP_TYPE_FTN_STRING_S300_COMPAT, /* 20 */
- HP_TYPE_FTN_STRING_VAX_COMPAT, /* 21 */
- HP_TYPE_BOOLEAN_S300_COMPAT, /* 22 */
- HP_TYPE_BOOLEAN_VAX_COMPAT, /* 23 */
- HP_TYPE_WIDE_CHAR, /* 24 */
- HP_TYPE_LONG, /* 25 */
- HP_TYPE_UNSIGNED_LONG, /* 26 */
- HP_TYPE_DOUBLE, /* 27 */
- HP_TYPE_TEMPLATE_ARG, /* 28 */
- HP_TYPE_VOID /* 29 */
-};
-
-/* An immediate name and type table entry.
-
- extension and immediate will always be one.
- global will always be zero.
- hp_type is the basic type this entry describes.
- bitlength is the length in bits for the basic type. */
-struct dnttp_immediate
-{
- unsigned int extension: 1;
- unsigned int immediate: 1;
- unsigned int global: 1;
- unsigned int type: 5;
- unsigned int bitlength: 24;
-};
-
-/* A nonimmediate name and type table entry.
-
- extension will always be one.
- immediate will always be zero.
- if global is zero, this entry points into the LNTT
- if global is one, this entry points into the GNTT
- index is the index within the GNTT or LNTT for this entry. */
-struct dnttp_nonimmediate
-{
- unsigned int extension: 1;
- unsigned int immediate: 1;
- unsigned int global: 1;
- unsigned int index: 29;
-};
-
-/* A pointer to an entry in the GNTT and LNTT tables. It has two
- forms depending on the type being described.
-
- The immediate form is used for simple entries and is one
- word.
-
- The nonimmediate form is used for complex entries and contains
- an index into the LNTT or GNTT which describes the entire type.
-
- If a dnttpointer is -1, then it is a NIL entry. */
-
-#define DNTTNIL (-1)
-typedef union dnttpointer
-{
- struct dnttp_immediate dntti;
- struct dnttp_nonimmediate dnttp;
- int word;
-} dnttpointer;
-
-/* An index into the source line table. As with dnttpointers, a sltpointer
- of -1 indicates a NIL entry. */
-#define SLTNIL (-1)
-typedef int sltpointer;
-
-/* Index into DOC (= "Debugging Optimized Code") line table. */
-#define LTNIL (-1)
-typedef int ltpointer;
-
-/* Index into context table. */
-#define CTXTNIL (-1)
-typedef int ctxtpointer;
-
-/* Unsigned byte offset into the VT. */
-typedef unsigned int vtpointer;
-
-/* A DNTT entry (used within the GNTT and LNTT).
-
- DNTT entries are variable sized objects, but are always a multiple
- of 3 words (we call each group of 3 words a "block").
-
- The first bit in each block is an extension bit. This bit is zero
- for the first block of a DNTT entry. If the entry requires more
- than one block, then this bit is set to one in all blocks after
- the first one. */
-
-/* Each DNTT entry describes a particular debug symbol (beginning of
- a source file, a function, variables, structures, etc.
-
- The type of the DNTT entry is stored in the "kind" field within the
- DNTT entry itself. */
-
-enum dntt_entry_type
-{
- DNTT_TYPE_NIL = -1,
- DNTT_TYPE_SRCFILE,
- DNTT_TYPE_MODULE,
- DNTT_TYPE_FUNCTION,
- DNTT_TYPE_ENTRY,
- DNTT_TYPE_BEGIN,
- DNTT_TYPE_END,
- DNTT_TYPE_IMPORT,
- DNTT_TYPE_LABEL,
- DNTT_TYPE_FPARAM,
- DNTT_TYPE_SVAR,
- DNTT_TYPE_DVAR,
- DNTT_TYPE_HOLE1,
- DNTT_TYPE_CONST,
- DNTT_TYPE_TYPEDEF,
- DNTT_TYPE_TAGDEF,
- DNTT_TYPE_POINTER,
- DNTT_TYPE_ENUM,
- DNTT_TYPE_MEMENUM,
- DNTT_TYPE_SET,
- DNTT_TYPE_SUBRANGE,
- DNTT_TYPE_ARRAY,
- DNTT_TYPE_STRUCT,
- DNTT_TYPE_UNION,
- DNTT_TYPE_FIELD,
- DNTT_TYPE_VARIANT,
- DNTT_TYPE_FILE,
- DNTT_TYPE_FUNCTYPE,
- DNTT_TYPE_WITH,
- DNTT_TYPE_COMMON,
- DNTT_TYPE_COBSTRUCT,
- DNTT_TYPE_XREF,
- DNTT_TYPE_SA,
- DNTT_TYPE_MACRO,
- DNTT_TYPE_BLOCKDATA,
- DNTT_TYPE_CLASS_SCOPE,
- DNTT_TYPE_REFERENCE,
- DNTT_TYPE_PTRMEM,
- DNTT_TYPE_PTRMEMFUNC,
- DNTT_TYPE_CLASS,
- DNTT_TYPE_GENFIELD,
- DNTT_TYPE_VFUNC,
- DNTT_TYPE_MEMACCESS,
- DNTT_TYPE_INHERITANCE,
- DNTT_TYPE_FRIEND_CLASS,
- DNTT_TYPE_FRIEND_FUNC,
- DNTT_TYPE_MODIFIER,
- DNTT_TYPE_OBJECT_ID,
- DNTT_TYPE_MEMFUNC,
- DNTT_TYPE_TEMPLATE,
- DNTT_TYPE_TEMPLATE_ARG,
- DNTT_TYPE_FUNC_TEMPLATE,
- DNTT_TYPE_LINK,
- DNTT_TYPE_DYN_ARRAY_DESC,
- DNTT_TYPE_DESC_SUBRANGE,
- DNTT_TYPE_BEGIN_EXT,
- DNTT_TYPE_INLN,
- DNTT_TYPE_INLN_LIST,
- DNTT_TYPE_ALIAS,
- DNTT_TYPE_DOC_FUNCTION,
- DNTT_TYPE_DOC_MEMFUNC,
- DNTT_TYPE_MAX
-};
-
-/* DNTT_TYPE_SRCFILE:
-
- One DNTT_TYPE_SRCFILE symbol is output for the start of each source
- file and at the begin and end of an included file. A DNTT_TYPE_SRCFILE
- entry is also output before each DNTT_TYPE_FUNC symbol so that debuggers
- can determine what file a function was defined in.
-
- LANGUAGE describes the source file's language.
-
- NAME points to an VT entry providing the source file's name.
-
- Note the name used for DNTT_TYPE_SRCFILE entries are exactly as seen
- by the compiler (ie they may be relative or absolute). C include files
- via <> inclusion must use absolute paths.
-
- ADDRESS points to an SLT entry from which line number and code locations
- may be determined. */
-
-struct dntt_type_srcfile
-{
- unsigned int extension: 1;
- unsigned int kind: 10; /* DNTT_TYPE_SRCFILE */
- unsigned int language: 4;
- unsigned int unused: 17;
- vtpointer name;
- sltpointer address;
-};
-
-/* DNTT_TYPE_MODULE:
-
- A DNTT_TYPE_MODULE symbol is emitted for the start of a pascal
- module or C source file. A module indicates a compilation unit
- for name-scoping purposes; in that regard there should be
- a 1-1 correspondence between GDB "symtab"'s and MODULE symbol records.
-
- Each DNTT_TYPE_MODULE must have an associated DNTT_TYPE_END symbol.
-
- NAME points to a VT entry providing the module's name. Note C
- source files are considered nameless modules.
-
- ALIAS point to a VT entry providing a secondary name.
-
- ADDRESS points to an SLT entry from which line number and code locations
- may be determined. */
-
-struct dntt_type_module
-{
- unsigned int extension: 1;
- unsigned int kind: 10; /* DNTT_TYPE_MODULE */
- unsigned int unused: 21;
- vtpointer name;
- vtpointer alias;
- dnttpointer unused2;
- sltpointer address;
-};
-
-/* DNTT_TYPE_FUNCTION,
- DNTT_TYPE_ENTRY,
- DNTT_TYPE_BLOCKDATA,
- DNTT_TYPE_MEMFUNC:
-
- A DNTT_TYPE_FUNCTION symbol is emitted for each function definition;
- a DNTT_TYPE_ENTRY symbols is used for secondary entry points. Both
- symbols used the dntt_type_function structure.
- A DNTT_TYPE_BLOCKDATA symbol is emitted ...?
- A DNTT_TYPE_MEMFUNC symbol is emitted for inlined member functions (C++).
-
- Each of DNTT_TYPE_FUNCTION must have a matching DNTT_TYPE_END.
-
- GLOBAL is nonzero if the function has global scope.
-
- LANGUAGE describes the function's source language.
-
- OPT_LEVEL describes the optimization level the function was compiled
- with.
-
- VARARGS is nonzero if the function uses varargs.
-
- NAME points to a VT entry providing the function's name.
-
- ALIAS points to a VT entry providing a secondary name for the function.
-
- FIRSTPARAM points to a LNTT entry which describes the parameter list.
-
- ADDRESS points to an SLT entry from which line number and code locations
- may be determined.
-
- ENTRYADDR is the memory address corresponding the function's entry point
-
- RETVAL points to a LNTT entry describing the function's return value.
-
- LOWADDR is the lowest memory address associated with this function.
-
- HIADDR is the highest memory address associated with this function. */
-
-struct dntt_type_function
-{
- unsigned int extension: 1;
- unsigned int kind: 10; /* DNTT_TYPE_FUNCTION,
- DNTT_TYPE_ENTRY,
- DNTT_TYPE_BLOCKDATA
- or DNTT_TYPE_MEMFUNC */
- unsigned int global: 1;
- unsigned int language: 4;
- unsigned int nest_level: 5;
- unsigned int opt_level: 2;
- unsigned int varargs: 1;
- unsigned int lang_info: 4;
- unsigned int inlined: 1;
- unsigned int localalloc: 1;
- unsigned int expansion: 1;
- unsigned int unused: 1;
- vtpointer name;
- vtpointer alias;
- dnttpointer firstparam;
- sltpointer address;
- CORE_ADDR entryaddr;
- dnttpointer retval;
- CORE_ADDR lowaddr;
- CORE_ADDR hiaddr;
-};
-
-/* DNTT_TYPE_BEGIN:
-
- A DNTT_TYPE_BEGIN symbol is emitted to begin a new nested scope.
- Every DNTT_TYPE_BEGIN symbol must have a matching DNTT_TYPE_END symbol.
-
- CLASSFLAG is nonzero if this is the beginning of a c++ class definition.
-
- ADDRESS points to an SLT entry from which line number and code locations
- may be determined. */
-
-struct dntt_type_begin
-{
- unsigned int extension: 1;
- unsigned int kind: 10;
- unsigned int classflag: 1;
- unsigned int unused: 20;
- sltpointer address;
-};
-
-/* DNTT_TYPE_END:
-
- A DNTT_TYPE_END symbol is emitted when closing a scope started by
- a DNTT_TYPE_MODULE, DNTT_TYPE_FUNCTION, DNTT_TYPE_WITH,
- DNTT_TYPE_COMMON, DNTT_TYPE_BEGIN, and DNTT_TYPE_CLASS_SCOPE symbols.
-
- ENDKIND describes what type of scope the DNTT_TYPE_END is closing
- (one of the above 6 kinds).
-
- CLASSFLAG is nonzero if this is the end of a c++ class definition.
-
- ADDRESS points to an SLT entry from which line number and code locations
- may be determined.
-
- BEGINSCOPE points to the LNTT entry which opened the scope. */
-
-struct dntt_type_end
-{
- unsigned int extension: 1;
- unsigned int kind: 10;
- unsigned int endkind: 10;
- unsigned int classflag: 1;
- unsigned int unused: 10;
- sltpointer address;
- dnttpointer beginscope;
-};
-
-/* DNTT_TYPE_IMPORT is unused by GDB. */
-/* DNTT_TYPE_LABEL is unused by GDB. */
-
-/* DNTT_TYPE_FPARAM:
-
- A DNTT_TYPE_FPARAM symbol is emitted for a function argument. When
- chained together the symbols represent an argument list for a function.
-
- REGPARAM is nonzero if this parameter was passed in a register.
-
- INDIRECT is nonzero if this parameter is a pointer to the parameter
- (pass by reference or pass by value for large items).
-
- LONGADDR is nonzero if the parameter is a 64bit pointer.
-
- NAME is a pointer into the VT for the parameter's name.
-
- LOCATION describes where the parameter is stored. Depending on the
- parameter type LOCATION could be a register number, or an offset
- from the stack pointer.
-
- TYPE points to a NTT entry describing the type of this parameter.
-
- NEXTPARAM points to the LNTT entry describing the next parameter. */
-
-struct dntt_type_fparam
-{
- unsigned int extension: 1;
- unsigned int kind: 10;
- unsigned int regparam: 1;
- unsigned int indirect: 1;
- unsigned int longaddr: 1;
- unsigned int copyparam: 1;
- unsigned int dflt: 1;
- unsigned int doc_ranges: 1;
- unsigned int misc_kind: 1;
- unsigned int unused: 14;
- vtpointer name;
- CORE_ADDR location;
- dnttpointer type;
- dnttpointer nextparam;
- int misc;
-};
-
-/* DNTT_TYPE_SVAR:
-
- A DNTT_TYPE_SVAR is emitted to describe a variable in static storage.
-
- GLOBAL is nonzero if the variable has global scope.
-
- INDIRECT is nonzero if the variable is a pointer to an object.
-
- LONGADDR is nonzero if the variable is in long pointer space.
-
- STATICMEM is nonzero if the variable is a member of a class.
-
- A_UNION is nonzero if the variable is an anonymous union member.
-
- NAME is a pointer into the VT for the variable's name.
-
- LOCATION provides the memory address for the variable.
-
- TYPE is a pointer into either the GNTT or LNTT which describes
- the type of this variable. */
-
-struct dntt_type_svar
-{
- unsigned int extension: 1;
- unsigned int kind: 10;
- unsigned int global: 1;
- unsigned int indirect: 1;
- unsigned int longaddr: 1;
- unsigned int staticmem: 1;
- unsigned int a_union: 1;
- unsigned int unused1: 1;
- unsigned int thread_specific: 1;
- unsigned int unused2: 14;
- vtpointer name;
- CORE_ADDR location;
- dnttpointer type;
- unsigned int offset;
- unsigned int displacement;
-};
-
-/* DNTT_TYPE_DVAR:
-
- A DNTT_TYPE_DVAR is emitted to describe automatic variables and variables
- held in registers.
-
- GLOBAL is nonzero if the variable has global scope.
-
- INDIRECT is nonzero if the variable is a pointer to an object.
-
- REGVAR is nonzero if the variable is in a register.
-
- A_UNION is nonzero if the variable is an anonymous union member.
-
- NAME is a pointer into the VT for the variable's name.
-
- LOCATION provides the memory address or register number for the variable.
-
- TYPE is a pointer into either the GNTT or LNTT which describes
- the type of this variable. */
-
-struct dntt_type_dvar
-{
- unsigned int extension: 1;
- unsigned int kind: 10;
- unsigned int global: 1;
- unsigned int indirect: 1;
- unsigned int regvar: 1;
- unsigned int a_union: 1;
- unsigned int unused: 17;
- vtpointer name;
- int location;
- dnttpointer type;
- unsigned int offset;
-};
-
-/* DNTT_TYPE_CONST:
-
- A DNTT_TYPE_CONST symbol is emitted for program constants.
-
- GLOBAL is nonzero if the constant has global scope.
-
- INDIRECT is nonzero if the constant is a pointer to an object.
-
- LOCATION_TYPE describes where to find the constant's value
- (in the VT, memory, or embedded in an instruction).
-
- CLASSMEM is nonzero if the constant is a member of a class.
-
- NAME is a pointer into the VT for the constant's name.
-
- LOCATION provides the memory address, register number or pointer
- into the VT for the constant's value.
-
- TYPE is a pointer into either the GNTT or LNTT which describes
- the type of this variable. */
-
-struct dntt_type_const
-{
- unsigned int extension: 1;
- unsigned int kind: 10;
- unsigned int global: 1;
- unsigned int indirect: 1;
- unsigned int location_type: 3;
- unsigned int classmem: 1;
- unsigned int unused: 15;
- vtpointer name;
- CORE_ADDR location;
- dnttpointer type;
- unsigned int offset;
- unsigned int displacement;
-};
-
-/* DNTT_TYPE_TYPEDEF and DNTT_TYPE_TAGDEF:
-
- The same structure is used to describe typedefs and tagdefs.
-
- DNTT_TYPE_TYPEDEFS are associated with C "typedefs".
-
- DNTT_TYPE_TAGDEFs are associated with C "struct", "union", and "enum"
- tags, which may have the same name as a typedef in the same scope.
- Also they are associated with C++ "class" tags, which implicitly have
- the same name as the class type.
-
- GLOBAL is nonzero if the typedef/tagdef has global scope.
-
- TYPEINFO is used to determine if full type information is available
- for a tag. (usually 1, but can be zero for opaque types in C).
-
- NAME is a pointer into the VT for the constant's name.
-
- TYPE points to the underlying type for the typedef/tagdef in the
- GNTT or LNTT. */
-
-struct dntt_type_type
-{
- unsigned int extension: 1;
- unsigned int kind: 10; /* DNTT_TYPE_TYPEDEF or
- DNTT_TYPE_TAGDEF. */
- unsigned int global: 1;
- unsigned int typeinfo: 1;
- unsigned int unused: 19;
- vtpointer name;
- dnttpointer type; /* Underlying type, which for TAGDEF's may be
- DNTT_TYPE_STRUCT, DNTT_TYPE_UNION,
- DNTT_TYPE_ENUM, or DNTT_TYPE_CLASS.
- For TYPEDEF's other underlying types
- are also possible. */
-};
-
-/* DNTT_TYPE_POINTER:
-
- Used to describe a pointer to an underlying type.
-
- POINTSTO is a pointer into the GNTT or LNTT for the type which this
- pointer points to.
-
- BITLENGTH is the length of the pointer (not the underlying type). */
-
-struct dntt_type_pointer
-{
- unsigned int extension: 1;
- unsigned int kind: 10;
- unsigned int unused: 21;
- dnttpointer pointsto;
- unsigned int bitlength;
-};
-
-
-/* DNTT_TYPE_ENUM:
-
- Used to describe enumerated types.
-
- FIRSTMEM is a pointer to a DNTT_TYPE_MEMENUM in the GNTT/LNTT which
- describes the first member (and contains a pointer to the chain of
- members).
-
- BITLENGTH is the number of bits used to hold the values of the enum's
- members. */
-
-struct dntt_type_enum
-{
- unsigned int extension: 1;
- unsigned int kind: 10;
- unsigned int unused: 21;
- dnttpointer firstmem;
- unsigned int bitlength;
-};
-
-/* DNTT_TYPE_MEMENUM
-
- Used to describe members of an enumerated type.
-
- CLASSMEM is nonzero if this member is part of a class.
-
- NAME points into the VT for the name of this member.
-
- VALUE is the value of this enumeration member.
-
- NEXTMEM points to the next DNTT_TYPE_MEMENUM in the chain. */
-
-struct dntt_type_memenum
-{
- unsigned int extension: 1;
- unsigned int kind: 10;
- unsigned int classmem: 1;
- unsigned int unused: 20;
- vtpointer name;
- unsigned int value;
- dnttpointer nextmem;
-};
-
-/* DNTT_TYPE_SET
-
- Used to describe PASCAL "set" type.
-
- DECLARATION describes the bitpacking of the set.
-
- SUBTYPE points to a DNTT entry describing the type of the members.
-
- BITLENGTH is the size of the set. */
-
-struct dntt_type_set
-{
- unsigned int extension: 1;
- unsigned int kind: 10;
- unsigned int declaration: 2;
- unsigned int unused: 19;
- dnttpointer subtype;
- unsigned int bitlength;
-};
-
-/* DNTT_TYPE_SUBRANGE
-
- Used to describe subrange type.
-
- DYN_LOW describes the lower bound of the subrange:
-
- 00 for a constant lower bound (found in LOWBOUND).
-
- 01 for a dynamic lower bound with the lower bound found in the
- memory address pointed to by LOWBOUND.
-
- 10 for a dynamic lower bound described by an variable found in the
- DNTT/LNTT (LOWBOUND would be a pointer into the DNTT/LNTT).
-
- DYN_HIGH is similar to DYN_LOW, except it describes the upper bound.
-
- SUBTYPE points to the type of the subrange.
-
- BITLENGTH is the length in bits needed to describe the subrange's
- values. */
-
-struct dntt_type_subrange
-{
- unsigned int extension: 1;
- unsigned int kind: 10;
- unsigned int dyn_low: 2;
- unsigned int dyn_high: 2;
- unsigned int unused: 17;
- int lowbound;
- int highbound;
- dnttpointer subtype;
- unsigned int bitlength;
-};
-
-/* DNTT_TYPE_ARRAY
-
- Used to describe an array type.
-
- DECLARATION describes the bit packing used in the array.
-
- ARRAYISBYTES is nonzero if the field in arraylength describes the
- length in bytes rather than in bits. A value of zero is used to
- describe an array with size 2**32.
-
- ELEMISBYTES is nonzero if the length if each element in the array
- is describes in bytes rather than bits. A value of zero is used
- to an element with size 2**32.
-
- ELEMORDER is nonzero if the elements are indexed in increasing order.
-
- JUSTIFIED if the elements are left justified to index zero.
-
- ARRAYLENGTH is the length of the array.
-
- INDEXTYPE is a DNTT pointer to the type used to index the array.
-
- ELEMTYPE is a DNTT pointer to the type for the array elements.
-
- ELEMLENGTH is the length of each element in the array (including
- any padding).
-
- Multi-dimensional arrays are represented by ELEMTYPE pointing to
- another DNTT_TYPE_ARRAY. */
-
-struct dntt_type_array
-{
- unsigned int extension: 1;
- unsigned int kind: 10;
- unsigned int declaration: 2;
- unsigned int dyn_low: 2;
- unsigned int dyn_high: 2;
- unsigned int arrayisbytes: 1;
- unsigned int elemisbytes: 1;
- unsigned int elemorder: 1;
- unsigned int justified: 1;
- unsigned int unused: 11;
- unsigned int arraylength;
- dnttpointer indextype;
- dnttpointer elemtype;
- unsigned int elemlength;
-};
-
-/* DNTT_TYPE_STRUCT
-
- DNTT_TYPE_STRUCT is used to describe a C structure.
-
- DECLARATION describes the bitpacking used.
-
- FIRSTFIELD is a DNTT pointer to the first field of the structure
- (each field contains a pointer to the next field, walk the list
- to access all fields of the structure).
-
- VARTAGFIELD and VARLIST are used for Pascal variant records.
-
- BITLENGTH is the size of the structure in bits. */
-
-struct dntt_type_struct
-{
- unsigned int extension: 1;
- unsigned int kind: 10;
- unsigned int declaration: 2;
- unsigned int unused: 19;
- dnttpointer firstfield;
- dnttpointer vartagfield;
- dnttpointer varlist;
- unsigned int bitlength;
-};
-
-/* DNTT_TYPE_UNION
-
- DNTT_TYPE_UNION is used to describe a C union.
-
- FIRSTFIELD is a DNTT pointer to the beginning of the field chain.
-
- BITLENGTH is the size of the union in bits. */
-
-struct dntt_type_union
-{
- unsigned int extension: 1;
- unsigned int kind: 10;
- unsigned int unused: 21;
- dnttpointer firstfield;
- unsigned int bitlength;
-};
-
-/* DNTT_TYPE_FIELD
-
- DNTT_TYPE_FIELD describes one field in a structure or union
- or C++ class.
-
- VISIBILITY is used to describe the visibility of the field
- (for c++. public = 0, protected = 1, private = 2).
-
- A_UNION is nonzero if this field is a member of an anonymous union.
-
- STATICMEM is nonzero if this field is a static member of a template.
-
- NAME is a pointer into the VT for the name of the field.
-
- BITOFFSET gives the offset of this field in bits from the beginning
- of the structure or union this field is a member of.
-
- TYPE is a DNTT pointer to the type describing this field.
-
- BITLENGTH is the size of the entry in bits.
-
- NEXTFIELD is a DNTT pointer to the next field in the chain. */
-
-struct dntt_type_field
-{
- unsigned int extension: 1;
- unsigned int kind: 10;
- unsigned int visibility: 2;
- unsigned int a_union: 1;
- unsigned int staticmem: 1;
- unsigned int unused: 17;
- vtpointer name;
- unsigned int bitoffset;
- dnttpointer type;
- unsigned int bitlength;
- dnttpointer nextfield;
-};
-
-/* DNTT_TYPE_VARIANT is unused by GDB. */
-/* DNTT_TYPE_FILE is unused by GDB. */
-
-/* DNTT_TYPE_FUNCTYPE
-
- I think this is used to describe a function type (e.g., would
- be emitted as part of a function-pointer description).
-
- VARARGS is nonzero if this function uses varargs.
-
- FIRSTPARAM is a DNTT pointer to the first entry in the parameter
- chain.
-
- RETVAL is a DNTT pointer to the type of the return value. */
-
-struct dntt_type_functype
-{
- unsigned int extension: 1;
- unsigned int kind: 10;
- unsigned int varargs: 1;
- unsigned int info: 4;
- unsigned int unused: 16;
- unsigned int bitlength;
- dnttpointer firstparam;
- dnttpointer retval;
-};
-
-/* DNTT_TYPE_WITH is emitted by C++ to indicate "with" scoping semantics.
- (Probably also emitted by PASCAL to support "with"...).
-
- C++ example: Say "memfunc" is a method of class "c", and say
- "m" is a data member of class "c". Then from within "memfunc",
- it is legal to reference "m" directly (e.g. you don't have to
- say "this->m". The symbol table indicates
- this by emitting a DNTT_TYPE_WITH symbol within the function "memfunc",
- pointing to the type symbol for class "c".
-
- In GDB, this symbol record is unnecessary,
- because GDB's symbol lookup algorithm
- infers the "with" semantics when it sees a "this" argument to the member
- function. So GDB can safely ignore the DNTT_TYPE_WITH record.
-
- A DNTT_TYPE_WITH has a matching DNTT_TYPE_END symbol. */
-
-struct dntt_type_with
-{
- unsigned int extension: 1; /* always zero */
- unsigned int kind: 10; /* always DNTT_TYPE_WITH */
- unsigned int addrtype: 2; /* 0 => STATTYPE */
- /* 1 => DYNTYPE */
- /* 2 => REGTYPE */
- unsigned int indirect: 1; /* 1 => pointer to object */
- unsigned int longaddr: 1; /* 1 => in long pointer space */
- unsigned int nestlevel: 6; /* # of nesting levels back */
- unsigned int doc_ranges: 1; /* 1 => location is range list */
- unsigned int unused: 10;
- long location; /* where stored (allocated) */
- sltpointer address;
- dnttpointer type; /* type of with expression */
- vtpointer name; /* name of with expression */
- unsigned long offset; /* byte offset from location */
-};
-
-/* DNTT_TYPE_COMMON is unsupported by GDB. */
-/* A DNTT_TYPE_COMMON symbol must have a matching DNTT_TYPE_END symbol */
-
-/* DNTT_TYPE_COBSTRUCT is unsupported by GDB. */
-/* DNTT_TYPE_XREF is unsupported by GDB. */
-/* DNTT_TYPE_SA is unsupported by GDB. */
-/* DNTT_TYPE_MACRO is unsupported by GDB */
-
-/* DNTT_TYPE_BLOCKDATA has the same structure as DNTT_TYPE_FUNCTION */
-
-/* The following are the C++ specific SOM records */
-
-/* The purpose of the DNTT_TYPE_CLASS_SCOPE is to bracket C++ methods
- and indicate the method name belongs in the "class scope" rather
- than in the module they are being defined in. For example:
-
- class c {
- ...
- void memfunc(); // member function
- };
-
- void c::memfunc() // definition of class c's "memfunc"
- {
- ...
- }
-
- main()
- {
- ...
- }
-
- In the above, the name "memfunc" is not directly visible from "main".
- I.e., you have to say "break c::memfunc".
- If it were a normal function (not a method), it would be visible
- via the simple "break memfunc". Since "memfunc" otherwise looks
- like a normal FUNCTION in the symbol table, the bracketing
- CLASS_SCOPE is what is used to indicate it is really a method.
-
-
- A DNTT_TYPE_CLASS_SCOPE symbol must have a matching DNTT_TYPE_END symbol. */
-
-struct dntt_type_class_scope
-{
- unsigned int extension: 1; /* Always zero. */
- unsigned int kind: 10; /* Always DNTT_TYPE_CLASS_SCOPE. */
- unsigned int unused: 21;
- sltpointer address ; /* Pointer to SLT entry. */
- dnttpointer type ; /* Pointer to class type DNTT. */
-};
-
-/* C++ reference parameter.
- The structure of this record is the same as DNTT_TYPE_POINTER -
- refer to struct dntt_type_pointer. */
-
-/* The next two describe C++ pointer-to-data-member type, and
- pointer-to-member-function type, respectively.
- DNTT_TYPE_PTRMEM and DNTT_TYPE_PTRMEMFUNC have the same structure. */
-
-struct dntt_type_ptrmem
-{
- unsigned int extension: 1; /* Always zero. */
- unsigned int kind: 10; /* Always DNTT_TYPE_PTRMEM. */
- unsigned int unused: 21;
- dnttpointer pointsto ; /* Pointer to class DNTT. */
- dnttpointer memtype ; /* Type of member. */
-};
-
-struct dntt_type_ptrmemfunc
-{
- unsigned int extension: 1; /* Always zero. */
- unsigned int kind: 10; /* Always DNTT_TYPE_PTRMEMFUNC. */
- unsigned int unused: 21;
- dnttpointer pointsto ; /* Pointer to class DNTT. */
- dnttpointer memtype ; /* Type of member. */
-};
-
-/* The DNTT_TYPE_CLASS symbol is emitted to describe a class type.
- "memberlist" points to a chained list of FIELD or GENFIELD records
- indicating the class members. "parentlist" points to a chained list
- of INHERITANCE records indicating classes from which we inherit
- fields. */
-
-struct dntt_type_class
-{
- unsigned int extension: 1; /* Always zero. */
- unsigned int kind: 10; /* Always DNTT_TYPE_CLASS. */
- unsigned int abstract: 1; /* Is this an abstract class? */
- unsigned int class_decl: 2; /* 0=class,1=union,2=struct. */
- unsigned int expansion: 1; /* 1=template expansion. */
- unsigned int unused: 17;
- dnttpointer memberlist ; /* Ptr to chain of [GEN]FIELDs. */
- unsigned long vtbl_loc ; /* Offset in obj of ptr to vtbl. */
- dnttpointer parentlist ; /* Ptr to K_INHERITANCE list. */
- unsigned long bitlength ; /* Total at this level. */
- dnttpointer identlist ; /* Ptr to chain of class ident's. */
- dnttpointer friendlist ; /* Ptr to K_FRIEND list. */
- dnttpointer templateptr ; /* Ptr to template. */
- dnttpointer nextexp ; /* Ptr to next expansion. */
-};
-
-/* Class members are indicated via either the FIELD record (for
- data members, same as for C struct fields), or by the GENFIELD record
- (for member functions). */
-
-struct dntt_type_genfield
-{
- unsigned int extension: 1; /* Always zero. */
- unsigned int kind: 10; /* Always DNTT_TYPE_GENFIELD. */
- unsigned int visibility: 2; /* Pub = 0, prot = 1, priv = 2. */
- unsigned int a_union: 1; /* 1 => anonymous union member. */
- unsigned int unused: 18;
- dnttpointer field ; /* Pointer to field or qualifier. */
- dnttpointer nextfield ; /* Pointer to next field. */
-};
-
-/* C++ virtual functions. */
-
-struct dntt_type_vfunc
-{
- unsigned int extension: 1; /* always zero */
- unsigned int kind: 10; /* always DNTT_TYPE_VFUNC */
- unsigned int pure: 1; /* pure virtual function ? */
- unsigned int unused: 20;
- dnttpointer funcptr ; /* points to FUNCTION symbol */
- unsigned long vtbl_offset ; /* offset into vtbl for virtual */
-};
-
-/* Not precisely sure what this is intended for - DDE ignores it. */
-
-struct dntt_type_memaccess
-{
- unsigned int extension: 1; /* always zero */
- unsigned int kind: 10; /* always DNTT_TYPE_MEMACCESS */
- unsigned int unused: 21;
- dnttpointer classptr ; /* pointer to base class */
- dnttpointer field ; /* pointer field */
-};
-
-/* The DNTT_TYPE_INHERITANCE record describes derived classes.
- In particular, the "parentlist" field of the CLASS record points
- to a list of INHERITANCE records for classes from which we
- inherit members. */
-
-struct dntt_type_inheritance
-{
- unsigned int extension: 1; /* always zero */
- unsigned int kind: 10; /* always DNTT_TYPE_INHERITANCE */
- unsigned int Virtual: 1; /* virtual base class ? */
- unsigned int visibility: 2; /* pub = 0, prot = 1, priv = 2 */
- unsigned int unused: 18;
- dnttpointer classname ; /* first parent class, if any */
- unsigned long offset ; /* offset to start of base class */
- dnttpointer next ; /* pointer to next K_INHERITANCE */
- unsigned long future[2] ; /* padding to 3-word block end */
-};
-
-/* C++ "friend" classes ... */
-
-struct dntt_type_friend_class
-{
- unsigned int extension: 1; /* always zero */
- unsigned int kind: 10; /* always DNTT_TYPE_FRIEND_CLASS */
- unsigned int unused: 21;
- dnttpointer classptr ; /* pointer to class DNTT */
- dnttpointer next ; /* next DNTT_FRIEND */
-};
-
-struct dntt_type_friend_func
-{
- unsigned int extension: 1; /* always zero */
- unsigned int kind: 10; /* always DNTT_TYPE_FRIEND_FUNC */
- unsigned int unused: 21;
- dnttpointer funcptr ; /* pointer to function */
- dnttpointer classptr ; /* pointer to class DNTT */
- dnttpointer next ; /* next DNTT_FRIEND */
- unsigned long future[2] ; /* padding to 3-word block end */
-};
-
-/* DDE appears to ignore the DNTT_TYPE_MODIFIER record.
- It could perhaps be used to give better "ptype" output in GDB;
- otherwise it is probably safe for GDB to ignore it also. */
-
-struct dntt_type_modifier
-{
- unsigned int extension: 1; /* always zero */
- unsigned int kind: 10; /* always DNTT_TYPE_MODIFIER */
- unsigned int m_const: 1; /* const */
- unsigned int m_static: 1; /* static */
- unsigned int m_void: 1; /* void */
- unsigned int m_volatile: 1; /* volatile */
- unsigned int m_duplicate: 1; /* duplicate */
- unsigned int unused: 16;
- dnttpointer type ; /* subtype */
- unsigned long future ; /* padding to 3-word block end */
-};
-
-/* I'm not sure what this was intended for - DDE ignores it. */
-
-struct dntt_type_object_id
-{
- unsigned int extension: 1; /* always zero */
- unsigned int kind: 10; /* always DNTT_TYPE_OBJECT_ID */
- unsigned int indirect: 1; /* Is object_ident addr of addr? */
- unsigned int unused: 20;
- unsigned long object_ident ; /* object identifier */
- unsigned long offset ; /* offset to start of base class */
- dnttpointer next ; /* pointer to next K_OBJECT_ID */
- unsigned long segoffset ; /* for linker fixup */
- unsigned long future ; /* padding to 3-word block end */
-};
-
-/* No separate dntt_type_memfunc; same as dntt_type_func */
-
-/* Symbol records to support templates. These only get used
- in DDE's "describe" output (like GDB's "ptype"). */
-
-/* The TEMPLATE record is the header for a template-class.
- Like the CLASS record, a TEMPLATE record has a memberlist that
- points to a list of template members. It also has an arglist
- pointing to a list of TEMPLATE_ARG records. */
-
-struct dntt_type_template
-{
- unsigned int extension: 1; /* always zero */
- unsigned int kind: 10; /* always DNTT_TYPE_TEMPLATE */
- unsigned int abstract: 1; /* is this an abstract class? */
- unsigned int class_decl: 2; /* 0=class,1=union,2=struct */
- unsigned int unused: 18;
- dnttpointer memberlist ; /* ptr to chain of K_[GEN]FIELDs */
- long unused2 ; /* offset in obj of ptr to vtbl */
- dnttpointer parentlist ; /* ptr to K_INHERITANCE list */
- unsigned long bitlength ; /* total at this level */
- dnttpointer identlist ; /* ptr to chain of class ident's */
- dnttpointer friendlist ; /* ptr to K_FRIEND list */
- dnttpointer arglist ; /* ptr to argument list */
- dnttpointer expansions ; /* ptr to expansion list */
-};
-
-/* Template-class arguments are a list of TEMPL_ARG records
- chained together. The "name" field is the name of the formal.
- E.g.:
-
- template <class T> class q { ... };
-
- Then "T" is the name of the formal argument. */
-
-struct dntt_type_templ_arg
-{
- unsigned int extension: 1; /* always zero */
- unsigned int kind: 10; /* always DNTT_TYPE_TEMPL_ARG */
- unsigned int usagetype: 1; /* 0 type-name 1 expression */
- unsigned int unused: 20;
- vtpointer name ; /* name of argument */
- dnttpointer type ; /* for non type arguments */
- dnttpointer nextarg ; /* Next argument if any */
- long future[2] ; /* padding to 3-word block end */
-};
-
-/* FUNC_TEMPLATE records are sort of like FUNCTION, but are emitted
- for template member functions. E.g.,
-
- template <class T> class q
- {
- ...
- void f();
- ...
- };
-
- Within the list of FIELDs/GENFIELDs defining the member list
- of the template "q", "f" would appear as a FUNC_TEMPLATE.
- We'll also see instances of FUNCTION "f" records for each
- instantiation of the template. */
-
-struct dntt_type_func_template
-{
- unsigned int extension: 1; /* always zero */
- unsigned int kind: 10; /* always DNTT_TYPE_FUNC_TEMPLATE */
- unsigned int public: 1; /* 1 => globally visible */
- unsigned int language: 4; /* type of language */
- unsigned int level: 5; /* nesting level (top level = 0)*/
- unsigned int optimize: 2; /* level of optimization */
- unsigned int varargs: 1; /* ellipses. Pascal/800 later */
- unsigned int info: 4; /* lang-specific stuff; F_xxxx */
- unsigned int inlined: 1;
- unsigned int localloc: 1; /* 0 at top, 1 at end of block */
- unsigned int unused: 2;
- vtpointer name ; /* name of function */
- vtpointer alias ; /* alternate name, if any */
- dnttpointer firstparam ; /* first FPARAM, if any */
- dnttpointer retval ; /* return type, if any */
- dnttpointer arglist ; /* ptr to argument list */
-};
-
-/* LINK is apparently intended to link together function template
- definitions with their instantiations. However, it is not clear
- why this would be needed, except to provide the information on
- a "ptype" command. And as far as I can tell, aCC does not
- generate this record. */
-
-struct dntt_type_link
-{
- unsigned int extension: 1; /* always zero */
- unsigned int kind: 10; /* always DNTT_TYPE_LINK */
- unsigned int linkKind: 4; /* always LINK_UNKNOWN */
- unsigned int unused: 17;
- long future1 ; /* expansion */
- dnttpointer ptr1 ; /* link from template */
- dnttpointer ptr2 ; /* to expansion */
- long future[2] ; /* padding to 3-word block end */
-};
-
-/* end of C++ specific SOM's. */
-
-/* DNTT_TYPE_DYN_ARRAY_DESC is unused by GDB */
-/* DNTT_TYPE_DESC_SUBRANGE is unused by GDB */
-/* DNTT_TYPE_BEGIN_EXT is unused by GDB */
-/* DNTT_TYPE_INLN is unused by GDB */
-/* DNTT_TYPE_INLN_LIST is unused by GDB */
-/* DNTT_TYPE_ALIAS is unused by GDB */
-
-struct dntt_type_doc_function
-{
- unsigned int extension: 1; /* always zero */
- unsigned int kind: 10; /* K_DOC_FUNCTION or */
- /* K_DOC_MEMFUNC */
- unsigned int global: 1; /* 1 => globally visible */
- unsigned int language: 4; /* type of language */
- unsigned int level: 5; /* nesting level (top level = 0)*/
- unsigned int optimize: 2; /* level of optimization */
- unsigned int varargs: 1; /* ellipses. Pascal/800 later */
- unsigned int info: 4; /* lang-specific stuff; F_xxxx */
- unsigned int inlined: 1;
- unsigned int localloc: 1; /* 0 at top, 1 at end of block */
- unsigned int expansion: 1; /* 1 = function expansion */
- unsigned int doc_clone: 1;
- vtpointer name; /* name of function */
- vtpointer alias; /* alternate name, if any */
- dnttpointer firstparam; /* first FPARAM, if any */
- sltpointer address; /* code and text locations */
- CORE_ADDR entryaddr; /* address of entry point */
- dnttpointer retval; /* return type, if any */
- CORE_ADDR lowaddr; /* lowest address of function */
- CORE_ADDR hiaddr; /* highest address of function */
- dnttpointer inline_list; /* pointer to first inline */
- ltpointer lt_offset; /* start of frag/cp line table */
- ctxtpointer ctxt_offset; /* start of context table for this routine */
-};
-
-/* DNTT_TYPE_DOC_MEMFUNC is unused by GDB */
-
-/* DNTT_TYPE_GENERIC and DNTT_TYPE_BLOCK are convience structures
- so we can examine a DNTT entry in a generic fashion. */
-struct dntt_type_generic
-{
- unsigned int word[9];
-};
-
-struct dntt_type_block
-{
- unsigned int extension: 1;
- unsigned int kind: 10;
- unsigned int unused: 21;
- unsigned int word[2];
-};
-
-/* One entry in a DNTT (either the LNTT or GNTT).
- This is a union of the above 60 or so structure definitions. */
-
-union dnttentry
-{
- struct dntt_type_srcfile dsfile;
- struct dntt_type_module dmodule;
- struct dntt_type_function dfunc;
- struct dntt_type_function dentry;
- struct dntt_type_begin dbegin;
- struct dntt_type_end dend;
- struct dntt_type_fparam dfparam;
- struct dntt_type_svar dsvar;
- struct dntt_type_dvar ddvar;
- struct dntt_type_const dconst;
- struct dntt_type_type dtype;
- struct dntt_type_type dtag;
- struct dntt_type_pointer dptr;
- struct dntt_type_enum denum;
- struct dntt_type_memenum dmember;
- struct dntt_type_set dset;
- struct dntt_type_subrange dsubr;
- struct dntt_type_array darray;
- struct dntt_type_struct dstruct;
- struct dntt_type_union dunion;
- struct dntt_type_field dfield;
- struct dntt_type_functype dfunctype;
- struct dntt_type_with dwith;
- struct dntt_type_function dblockdata;
- struct dntt_type_class_scope dclass_scope;
- struct dntt_type_pointer dreference;
- struct dntt_type_ptrmem dptrmem;
- struct dntt_type_ptrmemfunc dptrmemfunc;
- struct dntt_type_class dclass;
- struct dntt_type_genfield dgenfield;
- struct dntt_type_vfunc dvfunc;
- struct dntt_type_memaccess dmemaccess;
- struct dntt_type_inheritance dinheritance;
- struct dntt_type_friend_class dfriend_class;
- struct dntt_type_friend_func dfriend_func;
- struct dntt_type_modifier dmodifier;
- struct dntt_type_object_id dobject_id;
- struct dntt_type_template dtemplate;
- struct dntt_type_templ_arg dtempl_arg;
- struct dntt_type_func_template dfunc_template;
- struct dntt_type_link dlink;
- struct dntt_type_doc_function ddocfunc;
- struct dntt_type_generic dgeneric;
- struct dntt_type_block dblock;
-};
-
-/* Source line entry types. */
-enum slttype
-{
- SLT_NORMAL,
- SLT_SRCFILE,
- SLT_MODULE,
- SLT_FUNCTION,
- SLT_ENTRY,
- SLT_BEGIN,
- SLT_END,
- SLT_WITH,
- SLT_EXIT,
- SLT_ASSIST,
- SLT_MARKER,
- SLT_CLASS_SCOPE,
- SLT_INLN,
- SLT_NORMAL_OFFSET,
-};
-
-/* A normal source line entry. Simply provides a mapping of a source
- line number to a code address.
-
- SLTDESC will always be SLT_NORMAL or SLT_EXIT. */
-
-struct slt_normal
-{
- unsigned int sltdesc: 4;
- unsigned int line: 28;
- CORE_ADDR address;
-};
-
-struct slt_normal_off
-{
- unsigned int sltdesc: 4;
- unsigned int offset: 6;
- unsigned int line: 22;
- CORE_ADDR address;
-};
-
-/* A special source line entry. Provides a mapping of a declaration
- to a line number. These entries point back into the DNTT which
- references them. */
-
-struct slt_special
-{
- unsigned int sltdesc: 4;
- unsigned int line: 28;
- dnttpointer backptr;
-};
-
-/* Used to describe nesting.
-
- For nested languages, an slt_assist entry must follow each SLT_FUNC
- entry in the SLT. The address field will point forward to the
- first slt_normal entry within the function's scope. */
-
-struct slt_assist
-{
- unsigned int sltdesc: 4;
- unsigned int unused: 28;
- sltpointer address;
-};
-
-struct slt_generic
-{
- unsigned int word[2];
-};
-
-union sltentry
-{
- struct slt_normal snorm;
- struct slt_normal_off snormoff;
- struct slt_special sspec;
- struct slt_assist sasst;
- struct slt_generic sgeneric;
-};
-
-/* $LINES$ declarations
- This is the line table used for optimized code, which is only present
- in the new $PROGRAM_INFO$ debug space. */
-
-#define DST_LN_ESCAPE_FLAG1 15
-#define DST_LN_ESCAPE_FLAG2 14
-#define DST_LN_CTX_SPEC1 13
-#define DST_LN_CTX_SPEC2 12
-
-/* Escape function codes: */
-
-typedef enum
-{
- dst_ln_pad, /* pad byte */
- dst_ln_escape_1, /* reserved */
- dst_ln_dpc1_dln1, /* 1 byte line delta, 1 byte pc delta */
- dst_ln_dpc2_dln2, /* 2 bytes line delta, 2 bytes pc delta */
- dst_ln_pc4_ln4, /* 4 bytes ABSOLUTE line number, 4 bytes ABSOLUTE pc */
- dst_ln_dpc0_dln1, /* 1 byte line delta, pc delta = 0 */
- dst_ln_ln_off_1, /* statement escape, stmt # = 1 (2nd stmt on line) */
- dst_ln_ln_off, /* statement escape, stmt # = next byte */
- dst_ln_entry, /* entry escape, next byte is entry number */
- dst_ln_exit, /* exit escape */
- dst_ln_stmt_end, /* gap escape, 4 bytes pc delta */
- dst_ln_stmt_cp, /* current stmt is a critical point */
- dst_ln_escape_12, /* reserved */
- dst_ln_escape_13, /* this is an exception site record */
- dst_ln_nxt_byte, /* next byte contains the real escape code */
- dst_ln_end, /* end escape, final entry follows */
- dst_ln_escape1_END_OF_ENUM
-}
-dst_ln_escape1_t;
-
-typedef enum
-{
- dst_ln_ctx_1, /* next byte describes context switch with 5-bit */
- /* index into the image table and 3-bit run length. */
- /* If run length is 0, end with another cxt specifier or ctx_end */
- dst_ln_ctx_2, /* next 2 bytes switch context: 13 bit index, 3 bit run length */
- dst_ln_ctx_4, /* next 4 bytes switch context: 29 bit index, 3 bit run length */
- dst_ln_ctx_end, /* end current context */
- dst_ln_col_run_1, /* next byte is column position of start of next statement, */
- /* following byte is length of statement */
- dst_ln_col_run_2, /* next 2 bytes is column position of start of next statement, */
- /* following 2 bytes is length of statement */
- dst_ln_init_base1, /* next 4 bytes are absolute PC, followed by 1 byte of line number */
- dst_ln_init_base2, /* next 4 bytes are absolute PC, followed by 2 bytes of line number */
- dst_ln_init_base3, /* next 4 bytes are absolute PC, followed by 3 bytes of line number */
- dst_ln_escape2_END_OF_ENUM
-}
-dst_ln_escape2_t;
-
-typedef union
-{
- struct
- {
- unsigned int pc_delta : 4; /* 4 bit pc delta */
- int ln_delta : 4; /* 4 bit line number delta */
- }
- delta;
-
- struct
- {
- unsigned int esc_flag : 4; /* alias for pc_delta */
- unsigned int esc_code : 4; /* escape function code (dst_ln_escape1_t, or ...2_t */
- }
- esc;
-
- struct
- {
- unsigned int esc_flag : 4; /* dst_ln_ctx_spec1, or dst_ln_ctx_spec2 */
- unsigned int run_length : 2;
- unsigned int ctx_index : 2; /* ...spec2 contains index; ...spec1, index - 4 */
- }
- ctx_spec;
-
- char sdata; /* signed data byte */
- unsigned char udata; /* unsigned data byte */
-}
-dst_ln_entry_t,
- * dst_ln_entry_ptr_t;
-
-/* Warning: although the above union occupies only 1 byte the compiler treats
- it as having size 2 (the minimum size of a struct). Therefore a sequence of
- dst_ln_entry_t's cannot be described as an array, and walking through such a
- sequence requires convoluted code such as
- ln_ptr = (dst_ln_entry_ptr_t) (char*) ln_ptr + 1
- We regret the inconvenience. */
-
-/* Structure for interpreting the byte following a dst_ln_ctx1 entry. */
-typedef struct
-{
- unsigned int ctx1_index : 5; /* 5 bit index into context table */
- unsigned int ctx1_run_length : 3; /* 3 bit run length */
-} dst_ln_ctx1_t,
- *dst_ln_ctx1_ptr_t;
-
-/* Structure for interpreting the bytes following a dst_ln_ctx2 entry. */
-typedef struct
-{
- unsigned int ctx2_index : 13; /* 13 bit index into context table */
- unsigned int ctx2_run_length : 3; /* 3 bit run length */
-} dst_ln_ctx2_t,
- *dst_ln_ctx2_ptr_t;
-
-/* Structure for interpreting the bytes following a dst_ln_ctx4 entry. */
-typedef struct
-{
- unsigned int ctx4_index : 29; /* 29 bit index into context table */
- unsigned int ctx4_run_length : 3; /* 3 bit run length */
-} dst_ln_ctx4_t,
- *dst_ln_ctx4_ptr_t;
-
-
-/* PXDB definitions.
-
- PXDB is a post-processor which takes the executable file
- and massages the debug information so that the debugger may
- start up and run more efficiently. Some of the tasks
- performed by PXDB are:
-
- o Remove duplicate global type and variable information
- from the GNTT,
-
- o Append the GNTT onto the end of the LNTT and place both
- back in the LNTT section,
-
- o Build quick look-up tables (description follows) for
- files, procedures, modules, and paragraphs (for Cobol),
- placing these in the GNTT section,
-
- o Reconstruct the header appearing in the header section
- to access this information.
-
- The "quick look-up" tables are in the $GNTT$ sub-space, in
- the following order:
-
- Procedures -sorted by address
- Source files -sorted by address (of the
- generated code from routines)
- Modules -sorted by address
- Classes -<unsorted?>
- Address Alias -sorted by index <?>
- Object IDs -sorted by object identifier
-
- Most quick entries have (0-based) indices into the LNTT tables to
- the full entries for the item it describes.
-
- The post-PXDB header is in the $HEADER$ sub-space. Alas, it
- occurs in different forms, depending on the optimization level
- in the compilation step and whether PXDB was run or not. The
- worst part is the forms aren't self-describing, so we'll have
- to grovel in the bits to figure out what kind we're looking at
- (see hp_get_header in hp-psymtab-read.c). */
-
-/* PXDB versions. */
-
-#define PXDB_VERSION_CPLUSPLUS 1
-#define PXDB_VERSION_7_4 2
-#define PXDB_VERSION_CPP_30 3
-#define PXDB_VERSION_DDE_3_2A 4
-#define PXDB_VERSION_DDE_3_2 5
-#define PXDB_VERSION_DDE_4_0 6
-
-#define PXDB_VERSION_2_1 1
-
-/* Header version for the case that there is no DOC info
- but the executable has been processed by pxdb (the easy
- case, from "cc -g"). */
-
-typedef struct PXDB_struct
-{
- int pd_entries; /* # of entries in function look-up table */
- int fd_entries; /* # of entries in file look-up table */
- int md_entries; /* # of entries in module look-up table */
- unsigned int pxdbed : 1; /* 1 => file has been preprocessed */
- unsigned int bighdr : 1; /* 1 => this header contains 'time' word */
- unsigned int sa_header : 1;/* 1 => created by SA version of pxdb */
- /* used for version check in xdb */
- unsigned int inlined: 1; /* one or more functions have been inlined */
- unsigned int spare:12;
- short version; /* pxdb header version */
- int globals; /* index into the DNTT where GNTT begins */
- unsigned int time; /* modify time of file before being pxdbed */
- int pg_entries; /* # of entries in label look-up table */
- int functions; /* actual number of functions */
- int files; /* actual number of files */
- int cd_entries; /* # of entries in class look-up table */
- int aa_entries; /* # of entries in addr alias look-up table */
- int oi_entries; /* # of entries in object id look-up table */
-} PXDB_header, *PXDB_header_ptr;
-
-/* Header version for the case that there is no DOC info and the
- executable has NOT been processed by pxdb. */
-
-typedef struct XDB_header_struct
-{
- long gntt_length;
- long lntt_length;
- long slt_length;
- long vt_length;
- long xt_length;
-} XDB_header;
-
-/* Header version for the case that there is DOC info and the
- executable has been processed by pxdb. */
-
-typedef struct DOC_info_PXDB_header_struct
-{
- unsigned int xdb_header: 1; /* bit set if this is post-3.1 xdb */
- unsigned int doc_header: 1; /* bit set if this is doc-style header */
- unsigned int version: 8; /* version of pxdb see defines
- PXDB_VERSION_* in this file. */
- unsigned int reserved_for_flags: 16;/* for future use; -- must be
- set to zero. */
- unsigned int has_aux_pd_table: 1; /* $GNTT$ has aux PD table */
- unsigned int has_expr_table: 1; /* space has $EXPR$ */
- unsigned int has_range_table: 1; /* space has $RANGE$ */
- unsigned int has_context_table: 1; /* space has $SRC_CTXT$ */
- unsigned int has_lines_table: 1; /* space contains a $LINES$
- subspace for line tables. */
- unsigned int has_lt_offset_map: 1; /* space contains an lt_offset
- subspace for line table mapping. */
- /* The following fields are the same as those in the PXDB_header in $DEBUG$ */
- int pd_entries; /* # of entries in function look-up table */
- int fd_entries; /* # of entries in file look-up table */
- int md_entries; /* # of entries in module look-up table */
- unsigned int pxdbed : 1; /* 1 => file has been preprocessed */
- unsigned int bighdr : 1; /* 1 => this header contains 'time' word */
- unsigned int sa_header : 1;/* 1 => created by SA version of pxdb */
- /* used for version check in xdb */
- unsigned int inlined: 1; /* one or more functions have been inlined */
- unsigned int spare : 28;
- int globals; /* index into the DNTT where GNTT begins */
- unsigned int time; /* modify time of file before being pxdbed */
- int pg_entries; /* # of entries in label look-up table */
- int functions; /* actual number of functions */
- int files; /* actual number of files */
- int cd_entries; /* # of entries in class look-up table */
- int aa_entries; /* # of entries in addr alias look-up table */
- int oi_entries; /* # of entries in object id look-up table */
-} DOC_info_PXDB_header;
-
-/* Header version for the case that there is DOC info and the
- executable has NOT been processed by pxdb. */
-
-typedef struct DOC_info_header_struct
-{
- unsigned int xdb_header: 1; /* bit set if this is post-3.1 xdb */
- unsigned int doc_header: 1; /* bit set if this is doc-style header*/
- unsigned int version: 8; /* version of debug/header
- format. For 10.0 the value
- will be 1. For "Davis" the value is 2. */
- unsigned int reserved_for_flags: 18; /* for future use; -- must be set to zero. */
- unsigned int has_range_table: 1; /* space contains a $RANGE$ subspace for variable ranges. */
- unsigned int has_context_table: 1; /* space contains a $CTXT$ subspace for context/inline table. */
- unsigned int has_lines_table: 1; /* space contains a $LINES$ subspace for line tables. */
- unsigned int has_lt_offset_map: 1; /* space contains an lt_offset subspace for line table mapping. */
-
- long gntt_length; /* same as old header */
- long lntt_length; /* same as old header */
- long slt_length; /* same as old header */
- long vt_length; /* same as old header */
- long xt_length; /* same as old header */
- long ctxt_length; /* present only if version >= 2 */
- long range_length; /* present only if version >= 2 */
- long expr_length; /* present only if version >= 2 */
-
-} DOC_info_header;
-
-typedef union GenericDebugHeader_union
-{
- PXDB_header no_doc;
- DOC_info_PXDB_header doc;
- XDB_header no_pxdb_no_doc;
- DOC_info_header no_pxdb_doc;
-} GenericDebugHeader;
-
-
-/* Procedure Descriptor:
- An element of the procedure quick look-up table. */
-
-typedef struct quick_procedure
-{
- long isym; /* 0-based index of first symbol
- for procedure in $LNTT$,
- i.e. the procedure itself. */
- CORE_ADDR adrStart; /* memory adr of start of proc */
- CORE_ADDR adrEnd; /* memory adr of end of proc */
- char *sbAlias; /* alias name of procedure */
- char *sbProc; /* real name of procedure */
- CORE_ADDR adrBp; /* address of entry breakpoint */
- CORE_ADDR adrExitBp; /* address of exit breakpoint */
- int icd; /* member of this class (index) */
- unsigned int ipd; /* index of template for this */
- /* function (index) */
- unsigned int unused: 5;
- unsigned int no_lt_offset: 1;/* no entry in lt_offset table */
- unsigned int fTemplate: 1; /* function template */
- unsigned int fExpansion: 1; /* function expansion */
- unsigned int linked : 1; /* linked with other expansions */
- unsigned int duplicate: 1; /* clone of another procedure */
- unsigned int overloaded:1; /* overloaded function */
- unsigned int member: 1; /* class member function */
- unsigned int constructor:1; /* constructor function */
- unsigned int destructor:1; /* destructor function */
- unsigned int Static: 1; /* static function */
- unsigned int Virtual: 1; /* virtual function */
- unsigned int constant: 1; /* constant function */
- unsigned int pure: 1; /* pure (virtual) function */
- unsigned int language: 4; /* procedure's language */
- unsigned int inlined: 1; /* function has been inlined */
- unsigned int Operator: 1; /* operator function */
- unsigned int stub: 1; /* bodyless function */
- unsigned int optimize: 2; /* optimization level */
- unsigned int level: 5; /* nesting level (top=0) */
-} quick_procedure_entry, *quick_procedure_entry_ptr;
-
-/* Source File Descriptor:
- An element of the source file quick look-up table. */
-
-typedef struct quick_source
-{
- long isym; /* 0-based index in $LNTT$ of
- first symbol for this file. */
- CORE_ADDR adrStart; /* mem adr of start of file's code */
- CORE_ADDR adrEnd; /* mem adr of end of file's code */
- char *sbFile; /* name of source file */
- unsigned int fHasDecl: 1; /* do we have a .d file? */
- unsigned int fWarned: 1; /* have warned about age problems? */
- unsigned int fSrcfile: 1; /* 0 => include 1=> source */
- unsigned short ilnMac; /* lines in file (0 if don't know) */
- int ipd; /* 0-based index of first procedure
- in this file, in the quick
- look-up table of procedures. */
- unsigned int *rgLn; /* line pointer array, if any */
-} quick_file_entry, *quick_file_entry_ptr;
-
-/* Module Descriptor:
- An element of the module quick reference table. */
-
-typedef struct quick_module
-{
- long isym; /* 0-based index of first
- symbol for module. */
- CORE_ADDR adrStart; /* adr of start of mod. */
- CORE_ADDR adrEnd; /* adr of end of mod. */
- char *sbAlias; /* alias name of module */
- char *sbMod; /* real name of module */
- unsigned int imports: 1; /* module have any imports? */
- unsigned int vars_in_front: 1; /* module globals in front? */
- unsigned int vars_in_gaps: 1; /* module globals in gaps? */
- unsigned int language: 4; /* type of language */
- unsigned int unused : 25;
- unsigned int unused2; /* space for future stuff */
-} quick_module_entry, *quick_module_entry_ptr;
-
-/* Auxiliary Procedure Descriptor:
- An element of the auxiliary procedure quick look-up table. */
-
-typedef struct quick_aux_procedure
-{
- long isym_inln; /* start on inline list for proc */
- long spare;
-} quick_aux_procedure_entry, *quick_aux_procedure_entry_ptr;
-
-/* Paragraph Descriptor:
- An element of the paragraph quick look-up table. */
-
-typedef struct quick_paragraph
-{
- long isym; /* first symbol for label (index) */
- CORE_ADDR adrStart; /* memory adr of start of label */
- CORE_ADDR adrEnd; /* memory adr of end of label */
- char *sbLab; /* name of label */
- unsigned int inst; /* Used in xdb to store inst @ bp */
- unsigned int sect: 1; /* true = section, false = parag. */
- unsigned int unused: 31; /* future use */
-} quick_paragraph_entry, *quick_paragraph_entry_ptr;
-
-/* Class Descriptor:
- An element of the class quick look-up table. */
-
-typedef struct quick_class
-{
- char *sbClass; /* name of class */
- long isym; /* class symbol (tag) */
- unsigned int type : 2; /* 0=class, 1=union, 2=struct */
- unsigned int fTemplate : 1;/* class template */
- unsigned int expansion : 1;/* template expansion */
- unsigned int unused :28;
- sltpointer lowscope; /* beginning of defined scope */
- sltpointer hiscope; /* end of defined scope */
-} quick_class_entry, *quick_class_entry_ptr;
-
-/* Address Alias Entry
- An element of the address alias quick look-up table. */
-
-typedef struct quick_alias
-{
- CORE_ADDR low;
- CORE_ADDR high;
- int index;
- unsigned int unused : 31;
- unsigned int alternate : 1; /* alternate unnamed aliases? */
-} quick_alias_entry, *quick_alias_entry_ptr;
-
-/* Object Identification Entry
- An element of the object identification quick look-up table. */
-
-typedef struct quick_obj_ID
-{
- CORE_ADDR obj_ident; /* class identifier */
- long isym; /* class symbol */
- long offset; /* offset to object start */
-} quick_obj_ID_entry, *quick_obj_ID_entry_ptr;
-
-#endif /* HP_SYMTAB_INCLUDED */
diff --git a/include/ieee.h b/include/ieee.h
deleted file mode 100644
index 72fcad420..000000000
--- a/include/ieee.h
+++ /dev/null
@@ -1,165 +0,0 @@
-/* IEEE Standard 695-1980 "Universal Format for Object Modules" header file
-
- Copyright 2001 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street - Fifth Floor,
- Boston, MA 02110-1301, USA.
-
- Contributed by Cygnus Support. */
-
-#define N_W_VARIABLES 8
-#define Module_Beginning 0xe0
-
-typedef struct ieee_module
- {
- char *processor;
- char *module_name;
- }
-ieee_module_begin_type;
-
-#define Address_Descriptor 0xec
-typedef struct ieee_address
- {
- bfd_vma number_of_bits_mau;
- bfd_vma number_of_maus_in_address;
-
- unsigned char byte_order;
-#define IEEE_LITTLE 0xcc
-#define IEEE_BIG 0xcd
- }
-ieee_address_descriptor_type;
-
-typedef union ieee_w_variable
- {
- file_ptr offset[N_W_VARIABLES];
-
- struct
- {
- file_ptr extension_record;
- file_ptr environmental_record;
- file_ptr section_part;
- file_ptr external_part;
- file_ptr debug_information_part;
- file_ptr data_part;
- file_ptr trailer_part;
- file_ptr me_record;
- }
- r;
- }
-ieee_w_variable_type;
-
-typedef enum ieee_record
- {
- ieee_number_start_enum = 0x00,
- ieee_number_end_enum=0x7f,
- ieee_number_repeat_start_enum = 0x80,
- ieee_number_repeat_end_enum = 0x88,
- ieee_number_repeat_4_enum = 0x84,
- ieee_number_repeat_3_enum = 0x83,
- ieee_number_repeat_2_enum = 0x82,
- ieee_number_repeat_1_enum = 0x81,
- ieee_module_beginning_enum = 0xe0,
- ieee_module_end_enum = 0xe1,
- ieee_extension_length_1_enum = 0xde,
- ieee_extension_length_2_enum = 0xdf,
- ieee_section_type_enum = 0xe6,
- ieee_section_alignment_enum = 0xe7,
- ieee_external_symbol_enum = 0xe8,
- ieee_comma = 0x90,
- ieee_external_reference_enum = 0xe9,
- ieee_set_current_section_enum = 0xe5,
- ieee_address_descriptor_enum = 0xec,
- ieee_load_constant_bytes_enum = 0xed,
- ieee_load_with_relocation_enum = 0xe4,
-
- ieee_variable_A_enum = 0xc1,
- ieee_variable_B_enum = 0xc2,
- ieee_variable_C_enum = 0xc3,
- ieee_variable_D_enum = 0xc4,
- ieee_variable_E_enum = 0xc5,
- ieee_variable_F_enum = 0xc6,
- ieee_variable_G_enum = 0xc7,
- ieee_variable_H_enum = 0xc8,
- ieee_variable_I_enum = 0xc9,
- ieee_variable_J_enum = 0xca,
- ieee_variable_K_enum = 0xcb,
- ieee_variable_L_enum = 0xcc,
- ieee_variable_M_enum = 0xcd,
- ieee_variable_N_enum = 0xce,
- ieee_variable_O_enum = 0xcf,
- ieee_variable_P_enum = 0xd0,
- ieee_variable_Q_enum = 0xd1,
- ieee_variable_R_enum = 0xd2,
- ieee_variable_S_enum = 0xd3,
- ieee_variable_T_enum = 0xd4,
- ieee_variable_U_enum = 0xd5,
- ieee_variable_V_enum = 0xd6,
- ieee_variable_W_enum = 0xd7,
- ieee_variable_X_enum = 0xd8,
- ieee_variable_Y_enum = 0xd9,
- ieee_variable_Z_enum = 0xda,
- ieee_function_plus_enum = 0xa5,
- ieee_function_minus_enum = 0xa6,
- ieee_function_signed_open_b_enum = 0xba,
- ieee_function_signed_close_b_enum = 0xbb,
-
- ieee_function_unsigned_open_b_enum = 0xbc,
- ieee_function_unsigned_close_b_enum = 0xbd,
-
- ieee_function_either_open_b_enum = 0xbe,
- ieee_function_either_close_b_enum = 0xbf,
- ieee_record_seperator_enum = 0xdb,
-
- ieee_e2_first_byte_enum = 0xe2,
- ieee_section_size_enum = 0xe2d3,
- ieee_physical_region_size_enum = 0xe2c1,
- ieee_region_base_address_enum = 0xe2c2,
- ieee_mau_size_enum = 0xe2c6,
- ieee_m_value_enum = 0xe2cd,
- ieee_section_base_address_enum = 0xe2cc,
- ieee_asn_record_enum = 0xe2ce,
- ieee_section_offset_enum = 0xe2d2,
- ieee_value_starting_address_enum = 0xe2c7,
- ieee_assign_value_to_variable_enum = 0xe2d7,
- ieee_set_current_pc_enum = 0xe2d0,
- ieee_value_record_enum = 0xe2c9,
- ieee_nn_record = 0xf0,
- ieee_at_record_enum = 0xf1,
- ieee_ty_record_enum = 0xf2,
- ieee_attribute_record_enum = 0xf1c9,
- ieee_atn_record_enum = 0xf1ce,
- ieee_external_reference_info_record_enum = 0xf1d8,
- ieee_weak_external_reference_enum= 0xf4,
- ieee_repeat_data_enum = 0xf7,
- ieee_bb_record_enum = 0xf8,
- ieee_be_record_enum = 0xf9
- }
-ieee_record_enum_type;
-
-typedef struct ieee_section
- {
- unsigned int section_index;
- unsigned int section_type;
- char * section_name;
- unsigned int parent_section_index;
- unsigned int sibling_section_index;
- unsigned int context_index;
- }
-ieee_section_type;
-
-#define IEEE_REFERENCE_BASE 11
-#define IEEE_PUBLIC_BASE 32
-#define IEEE_SECTION_NUMBER_BASE 1
-
diff --git a/include/leb128.h b/include/leb128.h
deleted file mode 100644
index f584f72e5..000000000
--- a/include/leb128.h
+++ /dev/null
@@ -1,136 +0,0 @@
-/* Utilities for reading leb128 values.
- Copyright (C) 2012 Free Software Foundation, Inc.
-
-This file is part of the libiberty library.
-Libiberty is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
-
-Libiberty is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with libiberty; see the file COPYING.LIB. If not, write
-to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-/* The functions defined here can be speed critical.
- Since they are all pretty small we keep things simple and just define
- them all as "static inline".
-
- WARNING: This file is used by GDB which is stuck at C90. :-(
- Though it can use stdint.h, inttypes.h.
- Therefore if you want to add support for "long long" you need
- to wrap it in #ifdef CC_HAS_LONG_LONG. */
-
-#ifndef LEB128_H
-#define LEB128_H
-
-/* Get a definition for inline. */
-#include "ansidecl.h"
-
-/* Get a definition for NULL, size_t. */
-#include <stddef.h>
-
-#ifdef HAVE_STDINT_H
-#include <stdint.h>
-#endif
-#ifdef HAVE_INTTYPES_H
-#include <inttypes.h>
-#endif
-
-/* Decode the unsigned LEB128 constant at BUF into the variable pointed to
- by R, and return the number of bytes read.
- If we read off the end of the buffer, zero is returned,
- and nothing is stored in R.
-
- Note: The result is an int instead of a pointer to the next byte to be
- read to avoid const-vs-non-const problems. */
-
-static inline size_t
-read_uleb128_to_uint64 (const unsigned char *buf, const unsigned char *buf_end,
- uint64_t *r)
-{
- const unsigned char *p = buf;
- unsigned int shift = 0;
- uint64_t result = 0;
- unsigned char byte;
-
- while (1)
- {
- if (p >= buf_end)
- return 0;
-
- byte = *p++;
- result |= ((uint64_t) (byte & 0x7f)) << shift;
- if ((byte & 0x80) == 0)
- break;
- shift += 7;
- }
-
- *r = result;
- return p - buf;
-}
-
-/* Decode the signed LEB128 constant at BUF into the variable pointed to
- by R, and return the number of bytes read.
- If we read off the end of the buffer, zero is returned,
- and nothing is stored in R.
-
- Note: The result is an int instead of a pointer to the next byte to be
- read to avoid const-vs-non-const problems. */
-
-static inline size_t
-read_sleb128_to_int64 (const unsigned char *buf, const unsigned char *buf_end,
- int64_t *r)
-{
- const unsigned char *p = buf;
- unsigned int shift = 0;
- int64_t result = 0;
- unsigned char byte;
-
- while (1)
- {
- if (p >= buf_end)
- return 0;
-
- byte = *p++;
- result |= ((uint64_t) (byte & 0x7f)) << shift;
- shift += 7;
- if ((byte & 0x80) == 0)
- break;
- }
- if (shift < (sizeof (*r) * 8) && (byte & 0x40) != 0)
- result |= -(((uint64_t) 1) << shift);
-
- *r = result;
- return p - buf;
-}
-
-/* Return the number of bytes to read to skip past an LEB128 number in BUF.
- If the end isn't found before reaching BUF_END, return zero.
-
- Note: The result is an int instead of a pointer to the next byte to be
- read to avoid const-vs-non-const problems. */
-
-static inline size_t
-skip_leb128 (const unsigned char *buf, const unsigned char *buf_end)
-{
- const unsigned char *p = buf;
- unsigned char byte;
-
- while (1)
- {
- if (p == buf_end)
- return 0;
-
- byte = *p++;
- if ((byte & 0x80) == 0)
- return p - buf;
- }
-}
-
-#endif /* LEB128_H */
diff --git a/include/libiberty.h b/include/libiberty.h
deleted file mode 100644
index b9694f0f0..000000000
--- a/include/libiberty.h
+++ /dev/null
@@ -1,735 +0,0 @@
-/* Function declarations for libiberty.
-
- Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
- 2006, 2007, 2008, 2009, 2010, 2011, 2013 Free Software Foundation, Inc.
-
- Note - certain prototypes declared in this header file are for
- functions whoes implementation copyright does not belong to the
- FSF. Those prototypes are present in this file for reference
- purposes only and their presence in this file should not construed
- as an indication of ownership by the FSF of the implementation of
- those functions in any way or form whatsoever.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street - Fifth Floor,
- Boston, MA 02110-1301, USA.
-
- Written by Cygnus Support, 1994.
-
- The libiberty library provides a number of functions which are
- missing on some operating systems. We do not declare those here,
- to avoid conflicts with the system header files on operating
- systems that do support those functions. In this file we only
- declare those functions which are specific to libiberty. */
-
-#ifndef LIBIBERTY_H
-#define LIBIBERTY_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "ansidecl.h"
-
-/* Get a definition for size_t. */
-#include <stddef.h>
-/* Get a definition for va_list. */
-#include <stdarg.h>
-
-#include <stdio.h>
-
-/* If the OS supports it, ensure that the supplied stream is setup to
- avoid any multi-threaded locking. Otherwise leave the FILE pointer
- unchanged. If the stream is NULL do nothing. */
-
-extern void unlock_stream (FILE *);
-
-/* If the OS supports it, ensure that the standard I/O streams, stdin,
- stdout and stderr are setup to avoid any multi-threaded locking.
- Otherwise do nothing. */
-
-extern void unlock_std_streams (void);
-
-/* Open and return a FILE pointer. If the OS supports it, ensure that
- the stream is setup to avoid any multi-threaded locking. Otherwise
- return the FILE pointer unchanged. */
-
-extern FILE *fopen_unlocked (const char *, const char *);
-extern FILE *fdopen_unlocked (int, const char *);
-extern FILE *freopen_unlocked (const char *, const char *, FILE *);
-
-/* Build an argument vector from a string. Allocates memory using
- malloc. Use freeargv to free the vector. */
-
-extern char **buildargv (const char *) ATTRIBUTE_MALLOC;
-
-/* Free a vector returned by buildargv. */
-
-extern void freeargv (char **);
-
-/* Duplicate an argument vector. Allocates memory using malloc. Use
- freeargv to free the vector. */
-
-extern char **dupargv (char **) ATTRIBUTE_MALLOC;
-
-/* Expand "@file" arguments in argv. */
-
-extern void expandargv (int *, char ***);
-
-/* Write argv to an @-file, inserting necessary quoting. */
-
-extern int writeargv (char **, FILE *);
-
-/* Return the number of elements in argv. */
-
-extern int countargv (char**);
-
-/* Return the last component of a path name. Note that we can't use a
- prototype here because the parameter is declared inconsistently
- across different systems, sometimes as "char *" and sometimes as
- "const char *" */
-
-/* HAVE_DECL_* is a three-state macro: undefined, 0 or 1. If it is
- undefined, we haven't run the autoconf check so provide the
- declaration without arguments. If it is 0, we checked and failed
- to find the declaration so provide a fully prototyped one. If it
- is 1, we found it so don't provide any declaration at all. */
-#if !HAVE_DECL_BASENAME
-#if defined (__GNU_LIBRARY__ ) || defined (__linux__) \
- || defined (__FreeBSD__) || defined (__OpenBSD__) || defined (__NetBSD__) \
- || defined (__CYGWIN__) || defined (__CYGWIN32__) || defined (__MINGW32__) \
- || defined (__DragonFly__) || defined (HAVE_DECL_BASENAME)
-extern char *basename (const char *) ATTRIBUTE_RETURNS_NONNULL ATTRIBUTE_NONNULL(1);
-#else
-/* Do not allow basename to be used if there is no prototype seen. We
- either need to use the above prototype or have one from
- autoconf which would result in HAVE_DECL_BASENAME being set. */
-#define basename basename_cannot_be_used_without_a_prototype
-#endif
-#endif
-
-/* A well-defined basename () that is always compiled in. */
-
-extern const char *lbasename (const char *) ATTRIBUTE_RETURNS_NONNULL ATTRIBUTE_NONNULL(1);
-
-/* Same, but assumes DOS semantics (drive name, backslash is also a
- dir separator) regardless of host. */
-
-extern const char *dos_lbasename (const char *) ATTRIBUTE_RETURNS_NONNULL ATTRIBUTE_NONNULL(1);
-
-/* Same, but assumes Unix semantics (absolute paths always start with
- a slash, only forward slash is accepted as dir separator)
- regardless of host. */
-
-extern const char *unix_lbasename (const char *) ATTRIBUTE_RETURNS_NONNULL ATTRIBUTE_NONNULL(1);
-
-/* A well-defined realpath () that is always compiled in. */
-
-extern char *lrealpath (const char *);
-
-/* Concatenate an arbitrary number of strings. You must pass NULL as
- the last argument of this function, to terminate the list of
- strings. Allocates memory using xmalloc. */
-
-extern char *concat (const char *, ...) ATTRIBUTE_MALLOC ATTRIBUTE_RETURNS_NONNULL ATTRIBUTE_SENTINEL;
-
-/* Concatenate an arbitrary number of strings. You must pass NULL as
- the last argument of this function, to terminate the list of
- strings. Allocates memory using xmalloc. The first argument is
- not one of the strings to be concatenated, but if not NULL is a
- pointer to be freed after the new string is created, similar to the
- way xrealloc works. */
-
-extern char *reconcat (char *, const char *, ...) ATTRIBUTE_MALLOC ATTRIBUTE_RETURNS_NONNULL ATTRIBUTE_SENTINEL;
-
-/* Determine the length of concatenating an arbitrary number of
- strings. You must pass NULL as the last argument of this function,
- to terminate the list of strings. */
-
-extern unsigned long concat_length (const char *, ...) ATTRIBUTE_SENTINEL;
-
-/* Concatenate an arbitrary number of strings into a SUPPLIED area of
- memory. You must pass NULL as the last argument of this function,
- to terminate the list of strings. The supplied memory is assumed
- to be large enough. */
-
-extern char *concat_copy (char *, const char *, ...) ATTRIBUTE_RETURNS_NONNULL ATTRIBUTE_NONNULL(1) ATTRIBUTE_SENTINEL;
-
-/* Concatenate an arbitrary number of strings into a GLOBAL area of
- memory. You must pass NULL as the last argument of this function,
- to terminate the list of strings. The supplied memory is assumed
- to be large enough. */
-
-extern char *concat_copy2 (const char *, ...) ATTRIBUTE_RETURNS_NONNULL ATTRIBUTE_SENTINEL;
-
-/* This is the global area used by concat_copy2. */
-
-extern char *libiberty_concat_ptr;
-
-/* Concatenate an arbitrary number of strings. You must pass NULL as
- the last argument of this function, to terminate the list of
- strings. Allocates memory using alloca. The arguments are
- evaluated twice! */
-#define ACONCAT(ACONCAT_PARAMS) \
- (libiberty_concat_ptr = (char *) alloca (concat_length ACONCAT_PARAMS + 1), \
- concat_copy2 ACONCAT_PARAMS)
-
-/* Check whether two file descriptors refer to the same file. */
-
-extern int fdmatch (int fd1, int fd2);
-
-/* Return the position of the first bit set in the argument. */
-/* Prototypes vary from system to system, so we only provide a
- prototype on systems where we know that we need it. */
-#if defined (HAVE_DECL_FFS) && !HAVE_DECL_FFS
-extern int ffs(int);
-#endif
-
-/* Get the working directory. The result is cached, so don't call
- chdir() between calls to getpwd(). */
-
-extern char * getpwd (void);
-
-/* Get the current time. */
-/* Prototypes vary from system to system, so we only provide a
- prototype on systems where we know that we need it. */
-#ifdef __MINGW32__
-/* Forward declaration to avoid #include <sys/time.h>. */
-struct timeval;
-extern int gettimeofday (struct timeval *, void *);
-#endif
-
-/* Get the amount of time the process has run, in microseconds. */
-
-extern long get_run_time (void);
-
-/* Generate a relocated path to some installation directory. Allocates
- return value using malloc. */
-
-extern char *make_relative_prefix (const char *, const char *,
- const char *) ATTRIBUTE_MALLOC;
-
-/* Generate a relocated path to some installation directory without
- attempting to follow any soft links. Allocates
- return value using malloc. */
-
-extern char *make_relative_prefix_ignore_links (const char *, const char *,
- const char *) ATTRIBUTE_MALLOC;
-
-/* Returns a pointer to a directory path suitable for creating temporary
- files in. */
-
-extern const char *choose_tmpdir (void) ATTRIBUTE_RETURNS_NONNULL;
-
-/* Choose a temporary directory to use for scratch files. */
-
-extern char *choose_temp_base (void) ATTRIBUTE_MALLOC ATTRIBUTE_RETURNS_NONNULL;
-
-/* Return a temporary file name or NULL if unable to create one. */
-
-extern char *make_temp_file (const char *) ATTRIBUTE_MALLOC;
-
-/* Remove a link to a file unless it is special. */
-
-extern int unlink_if_ordinary (const char *);
-
-/* Allocate memory filled with spaces. Allocates using malloc. */
-
-extern const char *spaces (int count);
-
-/* Return the maximum error number for which strerror will return a
- string. */
-
-extern int errno_max (void);
-
-/* Return the name of an errno value (e.g., strerrno (EINVAL) returns
- "EINVAL"). */
-
-extern const char *strerrno (int);
-
-/* Given the name of an errno value, return the value. */
-
-extern int strtoerrno (const char *);
-
-/* ANSI's strerror(), but more robust. */
-
-extern char *xstrerror (int) ATTRIBUTE_RETURNS_NONNULL;
-
-/* Return the maximum signal number for which strsignal will return a
- string. */
-
-extern int signo_max (void);
-
-/* Return a signal message string for a signal number
- (e.g., strsignal (SIGHUP) returns something like "Hangup"). */
-/* This is commented out as it can conflict with one in system headers.
- We still document its existence though. */
-
-/*extern const char *strsignal (int);*/
-
-/* Return the name of a signal number (e.g., strsigno (SIGHUP) returns
- "SIGHUP"). */
-
-extern const char *strsigno (int);
-
-/* Given the name of a signal, return its number. */
-
-extern int strtosigno (const char *);
-
-/* Register a function to be run by xexit. Returns 0 on success. */
-
-extern int xatexit (void (*fn) (void));
-
-/* Exit, calling all the functions registered with xatexit. */
-
-extern void xexit (int status) ATTRIBUTE_NORETURN;
-
-/* Set the program name used by xmalloc. */
-
-extern void xmalloc_set_program_name (const char *);
-
-/* Report an allocation failure. */
-extern void xmalloc_failed (size_t) ATTRIBUTE_NORETURN;
-
-/* Allocate memory without fail. If malloc fails, this will print a
- message to stderr (using the name set by xmalloc_set_program_name,
- if any) and then call xexit. */
-
-extern void *xmalloc (size_t) ATTRIBUTE_MALLOC ATTRIBUTE_RETURNS_NONNULL;
-
-/* Reallocate memory without fail. This works like xmalloc. Note,
- realloc type functions are not suitable for attribute malloc since
- they may return the same address across multiple calls. */
-
-extern void *xrealloc (void *, size_t) ATTRIBUTE_RETURNS_NONNULL;
-
-/* Allocate memory without fail and set it to zero. This works like
- xmalloc. */
-
-extern void *xcalloc (size_t, size_t) ATTRIBUTE_MALLOC ATTRIBUTE_RETURNS_NONNULL;
-
-/* Copy a string into a memory buffer without fail. */
-
-extern char *xstrdup (const char *) ATTRIBUTE_MALLOC ATTRIBUTE_RETURNS_NONNULL;
-
-/* Copy at most N characters from string into a buffer without fail. */
-
-extern char *xstrndup (const char *, size_t) ATTRIBUTE_MALLOC ATTRIBUTE_RETURNS_NONNULL;
-
-/* Copy an existing memory buffer to a new memory buffer without fail. */
-
-extern void *xmemdup (const void *, size_t, size_t) ATTRIBUTE_MALLOC ATTRIBUTE_RETURNS_NONNULL;
-
-/* Physical memory routines. Return values are in BYTES. */
-extern double physmem_total (void);
-extern double physmem_available (void);
-
-/* Compute the 32-bit CRC of a block of memory. */
-extern unsigned int xcrc32 (const unsigned char *, int, unsigned int);
-
-/* These macros provide a K&R/C89/C++-friendly way of allocating structures
- with nice encapsulation. The XDELETE*() macros are technically
- superfluous, but provided here for symmetry. Using them consistently
- makes it easier to update client code to use different allocators such
- as new/delete and new[]/delete[]. */
-
-/* Scalar allocators. */
-
-#define XALLOCA(T) ((T *) alloca (sizeof (T)))
-#define XNEW(T) ((T *) xmalloc (sizeof (T)))
-#define XCNEW(T) ((T *) xcalloc (1, sizeof (T)))
-#define XDUP(T, P) ((T *) xmemdup ((P), sizeof (T), sizeof (T)))
-#define XDELETE(P) free ((void*) (P))
-
-/* Array allocators. */
-
-#define XALLOCAVEC(T, N) ((T *) alloca (sizeof (T) * (N)))
-#define XNEWVEC(T, N) ((T *) xmalloc (sizeof (T) * (N)))
-#define XCNEWVEC(T, N) ((T *) xcalloc ((N), sizeof (T)))
-#define XDUPVEC(T, P, N) ((T *) xmemdup ((P), sizeof (T) * (N), sizeof (T) * (N)))
-#define XRESIZEVEC(T, P, N) ((T *) xrealloc ((void *) (P), sizeof (T) * (N)))
-#define XDELETEVEC(P) free ((void*) (P))
-
-/* Allocators for variable-sized structures and raw buffers. */
-
-#define XALLOCAVAR(T, S) ((T *) alloca ((S)))
-#define XNEWVAR(T, S) ((T *) xmalloc ((S)))
-#define XCNEWVAR(T, S) ((T *) xcalloc (1, (S)))
-#define XDUPVAR(T, P, S1, S2) ((T *) xmemdup ((P), (S1), (S2)))
-#define XRESIZEVAR(T, P, S) ((T *) xrealloc ((P), (S)))
-
-/* Type-safe obstack allocator. */
-
-#define XOBNEW(O, T) ((T *) obstack_alloc ((O), sizeof (T)))
-#define XOBNEWVEC(O, T, N) ((T *) obstack_alloc ((O), sizeof (T) * (N)))
-#define XOBNEWVAR(O, T, S) ((T *) obstack_alloc ((O), (S)))
-#define XOBFINISH(O, T) ((T) obstack_finish ((O)))
-
-/* hex character manipulation routines */
-
-#define _hex_array_size 256
-#define _hex_bad 99
-extern const unsigned char _hex_value[_hex_array_size];
-extern void hex_init (void);
-#define hex_p(c) (hex_value (c) != _hex_bad)
-/* If you change this, note well: Some code relies on side effects in
- the argument being performed exactly once. */
-#define hex_value(c) ((unsigned int) _hex_value[(unsigned char) (c)])
-
-/* Flags for pex_init. These are bits to be or'ed together. */
-
-/* Record subprocess times, if possible. */
-#define PEX_RECORD_TIMES 0x1
-
-/* Use pipes for communication between processes, if possible. */
-#define PEX_USE_PIPES 0x2
-
-/* Save files used for communication between processes. */
-#define PEX_SAVE_TEMPS 0x4
-
-/* Prepare to execute one or more programs, with standard output of
- each program fed to standard input of the next.
- FLAGS As above.
- PNAME The name of the program to report in error messages.
- TEMPBASE A base name to use for temporary files; may be NULL to
- use a random name.
- Returns NULL on error. */
-
-extern struct pex_obj *pex_init (int flags, const char *pname,
- const char *tempbase) ATTRIBUTE_RETURNS_NONNULL;
-
-/* Flags for pex_run. These are bits to be or'ed together. */
-
-/* Last program in pipeline. Standard output of program goes to
- OUTNAME, or, if OUTNAME is NULL, to standard output of caller. Do
- not set this if you want to call pex_read_output. After this is
- set, pex_run may no longer be called with the same struct
- pex_obj. */
-#define PEX_LAST 0x1
-
-/* Search for program in executable search path. */
-#define PEX_SEARCH 0x2
-
-/* OUTNAME is a suffix. */
-#define PEX_SUFFIX 0x4
-
-/* Send program's standard error to standard output. */
-#define PEX_STDERR_TO_STDOUT 0x8
-
-/* Input file should be opened in binary mode. This flag is ignored
- on Unix. */
-#define PEX_BINARY_INPUT 0x10
-
-/* Output file should be opened in binary mode. This flag is ignored
- on Unix. For proper behaviour PEX_BINARY_INPUT and
- PEX_BINARY_OUTPUT have to match appropriately--i.e., a call using
- PEX_BINARY_OUTPUT should be followed by a call using
- PEX_BINARY_INPUT. */
-#define PEX_BINARY_OUTPUT 0x20
-
-/* Capture stderr to a pipe. The output can be read by
- calling pex_read_err and reading from the returned
- FILE object. This flag may be specified only for
- the last program in a pipeline.
-
- This flag is supported only on Unix and Windows. */
-#define PEX_STDERR_TO_PIPE 0x40
-
-/* Capture stderr in binary mode. This flag is ignored
- on Unix. */
-#define PEX_BINARY_ERROR 0x80
-
-/* Append stdout to existing file instead of truncating it. */
-#define PEX_STDOUT_APPEND 0x100
-
-/* Thes same as PEX_STDOUT_APPEND, but for STDERR. */
-#define PEX_STDERR_APPEND 0x200
-
-/* Execute one program. Returns NULL on success. On error returns an
- error string (typically just the name of a system call); the error
- string is statically allocated.
-
- OBJ Returned by pex_init.
-
- FLAGS As above.
-
- EXECUTABLE The program to execute.
-
- ARGV NULL terminated array of arguments to pass to the program.
-
- OUTNAME Sets the output file name as follows:
-
- PEX_SUFFIX set (OUTNAME may not be NULL):
- TEMPBASE parameter to pex_init not NULL:
- Output file name is the concatenation of TEMPBASE
- and OUTNAME.
- TEMPBASE is NULL:
- Output file name is a random file name ending in
- OUTNAME.
- PEX_SUFFIX not set:
- OUTNAME not NULL:
- Output file name is OUTNAME.
- OUTNAME NULL, TEMPBASE not NULL:
- Output file name is randomly chosen using
- TEMPBASE.
- OUTNAME NULL, TEMPBASE NULL:
- Output file name is randomly chosen.
-
- If PEX_LAST is not set, the output file name is the
- name to use for a temporary file holding stdout, if
- any (there will not be a file if PEX_USE_PIPES is set
- and the system supports pipes). If a file is used, it
- will be removed when no longer needed unless
- PEX_SAVE_TEMPS is set.
-
- If PEX_LAST is set, and OUTNAME is not NULL, standard
- output is written to the output file name. The file
- will not be removed. If PEX_LAST and PEX_SUFFIX are
- both set, TEMPBASE may not be NULL.
-
- ERRNAME If not NULL, this is the name of a file to which
- standard error is written. If NULL, standard error of
- the program is standard error of the caller.
-
- ERR On an error return, *ERR is set to an errno value, or
- to 0 if there is no relevant errno.
-*/
-
-extern const char *pex_run (struct pex_obj *obj, int flags,
- const char *executable, char * const *argv,
- const char *outname, const char *errname,
- int *err);
-
-/* As for pex_run (), but takes an extra parameter to enable the
- environment for the child process to be specified.
-
- ENV The environment for the child process, specified as
- an array of character pointers. Each element of the
- array should point to a string of the form VAR=VALUE,
- with the exception of the last element which must be
- a null pointer.
-*/
-
-extern const char *pex_run_in_environment (struct pex_obj *obj, int flags,
- const char *executable,
- char * const *argv,
- char * const *env,
- const char *outname,
- const char *errname, int *err);
-
-/* Return a stream for a temporary file to pass to the first program
- in the pipeline as input. The file name is chosen as for pex_run.
- pex_run closes the file automatically; don't close it yourself. */
-
-extern FILE *pex_input_file (struct pex_obj *obj, int flags,
- const char *in_name);
-
-/* Return a stream for a pipe connected to the standard input of the
- first program in the pipeline. You must have passed
- `PEX_USE_PIPES' to `pex_init'. Close the returned stream
- yourself. */
-
-extern FILE *pex_input_pipe (struct pex_obj *obj, int binary);
-
-/* Read the standard output of the last program to be executed.
- pex_run can not be called after this. BINARY should be non-zero if
- the file should be opened in binary mode; this is ignored on Unix.
- Returns NULL on error. Don't call fclose on the returned FILE; it
- will be closed by pex_free. */
-
-extern FILE *pex_read_output (struct pex_obj *, int binary);
-
-/* Read the standard error of the last program to be executed.
- pex_run can not be called after this. BINARY should be non-zero if
- the file should be opened in binary mode; this is ignored on Unix.
- Returns NULL on error. Don't call fclose on the returned FILE; it
- will be closed by pex_free. */
-
-extern FILE *pex_read_err (struct pex_obj *, int binary);
-
-/* Return exit status of all programs in VECTOR. COUNT indicates the
- size of VECTOR. The status codes in the vector are in the order of
- the calls to pex_run. Returns 0 on error, 1 on success. */
-
-extern int pex_get_status (struct pex_obj *, int count, int *vector);
-
-/* Return times of all programs in VECTOR. COUNT indicates the size
- of VECTOR. struct pex_time is really just struct timeval, but that
- is not portable to all systems. Returns 0 on error, 1 on
- success. */
-
-struct pex_time
-{
- unsigned long user_seconds;
- unsigned long user_microseconds;
- unsigned long system_seconds;
- unsigned long system_microseconds;
-};
-
-extern int pex_get_times (struct pex_obj *, int count,
- struct pex_time *vector);
-
-/* Clean up a pex_obj. If you have not called pex_get_times or
- pex_get_status, this will try to kill the subprocesses. */
-
-extern void pex_free (struct pex_obj *);
-
-/* Just execute one program. Return value is as for pex_run.
- FLAGS Combination of PEX_SEARCH and PEX_STDERR_TO_STDOUT.
- EXECUTABLE As for pex_run.
- ARGV As for pex_run.
- PNAME As for pex_init.
- OUTNAME As for pex_run when PEX_LAST is set.
- ERRNAME As for pex_run.
- STATUS Set to exit status on success.
- ERR As for pex_run.
-*/
-
-extern const char *pex_one (int flags, const char *executable,
- char * const *argv, const char *pname,
- const char *outname, const char *errname,
- int *status, int *err);
-
-/* pexecute and pwait are the old pexecute interface, still here for
- backward compatibility. Don't use these for new code. Instead,
- use pex_init/pex_run/pex_get_status/pex_free, or pex_one. */
-
-/* Definitions used by the pexecute routine. */
-
-#define PEXECUTE_FIRST 1
-#define PEXECUTE_LAST 2
-#define PEXECUTE_ONE (PEXECUTE_FIRST + PEXECUTE_LAST)
-#define PEXECUTE_SEARCH 4
-#define PEXECUTE_VERBOSE 8
-
-/* Execute a program. */
-
-extern int pexecute (const char *, char * const *, const char *,
- const char *, char **, char **, int);
-
-/* Wait for pexecute to finish. */
-
-extern int pwait (int, int *, int);
-
-#if !HAVE_DECL_ASPRINTF
-/* Like sprintf but provides a pointer to malloc'd storage, which must
- be freed by the caller. */
-
-extern int asprintf (char **, const char *, ...) ATTRIBUTE_PRINTF_2;
-#endif
-
-#if !HAVE_DECL_VASPRINTF
-/* Like vsprintf but provides a pointer to malloc'd storage, which
- must be freed by the caller. */
-
-extern int vasprintf (char **, const char *, va_list) ATTRIBUTE_PRINTF(2,0);
-#endif
-
-/* Like vasprintf but allocates memory without fail. This works like
- xmalloc. */
-
-extern char *xvasprintf (const char *, va_list) ATTRIBUTE_MALLOC ATTRIBUTE_PRINTF(1,0);
-
-#if defined(HAVE_DECL_SNPRINTF) && !HAVE_DECL_SNPRINTF
-/* Like sprintf but prints at most N characters. */
-extern int snprintf (char *, size_t, const char *, ...) ATTRIBUTE_PRINTF_3;
-#endif
-
-#if defined(HAVE_DECL_VSNPRINTF) && !HAVE_DECL_VSNPRINTF
-/* Like vsprintf but prints at most N characters. */
-extern int vsnprintf (char *, size_t, const char *, va_list) ATTRIBUTE_PRINTF(3,0);
-#endif
-
-#if defined (HAVE_DECL_STRNLEN) && !HAVE_DECL_STRNLEN
-extern size_t strnlen (const char *, size_t);
-#endif
-
-#if defined(HAVE_DECL_STRVERSCMP) && !HAVE_DECL_STRVERSCMP
-/* Compare version strings. */
-extern int strverscmp (const char *, const char *);
-#endif
-
-#if defined(HAVE_DECL_STRTOL) && !HAVE_DECL_STRTOL
-extern long int strtol (const char *nptr,
- char **endptr, int base);
-#endif
-
-#if defined(HAVE_DECL_STRTOUL) && !HAVE_DECL_STRTOUL
-extern unsigned long int strtoul (const char *nptr,
- char **endptr, int base);
-#endif
-
-#if defined(HAVE_LONG_LONG) && defined(HAVE_DECL_STRTOLL) && !HAVE_DECL_STRTOLL
-__extension__
-extern long long int strtoll (const char *nptr,
- char **endptr, int base);
-#endif
-
-#if defined(HAVE_LONG_LONG) && defined(HAVE_DECL_STRTOULL) && !HAVE_DECL_STRTOULL
-__extension__
-extern unsigned long long int strtoull (const char *nptr,
- char **endptr, int base);
-#endif
-
-#if defined(HAVE_DECL_STRVERSCMP) && !HAVE_DECL_STRVERSCMP
-/* Compare version strings. */
-extern int strverscmp (const char *, const char *);
-#endif
-
-/* Set the title of a process */
-extern void setproctitle (const char *name, ...);
-
-/* Increase stack limit if possible. */
-extern void stack_limit_increase (unsigned long);
-
-#define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0]))
-
-/* Drastically simplified alloca configurator. If we're using GCC,
- we use __builtin_alloca; otherwise we use the C alloca. The C
- alloca is always available. You can override GCC by defining
- USE_C_ALLOCA yourself. The canonical autoconf macro C_ALLOCA is
- also set/unset as it is often used to indicate whether code needs
- to call alloca(0). */
-extern void *C_alloca (size_t) ATTRIBUTE_MALLOC;
-#undef alloca
-#if GCC_VERSION >= 2000 && !defined USE_C_ALLOCA
-# define alloca(x) __builtin_alloca(x)
-# undef C_ALLOCA
-# define ASTRDUP(X) \
- (__extension__ ({ const char *const libiberty_optr = (X); \
- const unsigned long libiberty_len = strlen (libiberty_optr) + 1; \
- char *const libiberty_nptr = (char *const) alloca (libiberty_len); \
- (char *) memcpy (libiberty_nptr, libiberty_optr, libiberty_len); }))
-#else
-# define alloca(x) C_alloca(x)
-# undef USE_C_ALLOCA
-# define USE_C_ALLOCA 1
-# undef C_ALLOCA
-# define C_ALLOCA 1
-extern const char *libiberty_optr;
-extern char *libiberty_nptr;
-extern unsigned long libiberty_len;
-# define ASTRDUP(X) \
- (libiberty_optr = (X), \
- libiberty_len = strlen (libiberty_optr) + 1, \
- libiberty_nptr = (char *) alloca (libiberty_len), \
- (char *) memcpy (libiberty_nptr, libiberty_optr, libiberty_len))
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif /* ! defined (LIBIBERTY_H) */
diff --git a/include/longlong.h b/include/longlong.h
deleted file mode 100644
index 8cd2c7989..000000000
--- a/include/longlong.h
+++ /dev/null
@@ -1,1745 +0,0 @@
-/* longlong.h -- definitions for mixed size 32/64 bit arithmetic.
- Copyright (C) 1991-2014 Free Software Foundation, Inc.
-
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- In addition to the permissions in the GNU Lesser General Public
- License, the Free Software Foundation gives you unlimited
- permission to link the compiled version of this file into
- combinations with other programs, and to distribute those
- combinations without any restriction coming from the use of this
- file. (The Lesser General Public License restrictions do apply in
- other respects; for example, they cover modification of the file,
- and distribution when not linked into a combine executable.)
-
- The GNU C Library 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-/* You have to define the following before including this file:
-
- UWtype -- An unsigned type, default type for operations (typically a "word")
- UHWtype -- An unsigned type, at least half the size of UWtype.
- UDWtype -- An unsigned type, at least twice as large a UWtype
- W_TYPE_SIZE -- size in bits of UWtype
-
- UQItype -- Unsigned 8 bit type.
- SItype, USItype -- Signed and unsigned 32 bit types.
- DItype, UDItype -- Signed and unsigned 64 bit types.
-
- On a 32 bit machine UWtype should typically be USItype;
- on a 64 bit machine, UWtype should typically be UDItype. */
-
-#define __BITS4 (W_TYPE_SIZE / 4)
-#define __ll_B ((UWtype) 1 << (W_TYPE_SIZE / 2))
-#define __ll_lowpart(t) ((UWtype) (t) & (__ll_B - 1))
-#define __ll_highpart(t) ((UWtype) (t) >> (W_TYPE_SIZE / 2))
-
-#ifndef W_TYPE_SIZE
-#define W_TYPE_SIZE 32
-#define UWtype USItype
-#define UHWtype USItype
-#define UDWtype UDItype
-#endif
-
-/* Used in glibc only. */
-#ifndef attribute_hidden
-#define attribute_hidden
-#endif
-
-extern const UQItype __clz_tab[256] attribute_hidden;
-
-/* Define auxiliary asm macros.
-
- 1) umul_ppmm(high_prod, low_prod, multiplier, multiplicand) multiplies two
- UWtype integers MULTIPLIER and MULTIPLICAND, and generates a two UWtype
- word product in HIGH_PROD and LOW_PROD.
-
- 2) __umulsidi3(a,b) multiplies two UWtype integers A and B, and returns a
- UDWtype product. This is just a variant of umul_ppmm.
-
- 3) udiv_qrnnd(quotient, remainder, high_numerator, low_numerator,
- denominator) divides a UDWtype, composed by the UWtype integers
- HIGH_NUMERATOR and LOW_NUMERATOR, by DENOMINATOR and places the quotient
- in QUOTIENT and the remainder in REMAINDER. HIGH_NUMERATOR must be less
- than DENOMINATOR for correct operation. If, in addition, the most
- significant bit of DENOMINATOR must be 1, then the pre-processor symbol
- UDIV_NEEDS_NORMALIZATION is defined to 1.
-
- 4) sdiv_qrnnd(quotient, remainder, high_numerator, low_numerator,
- denominator). Like udiv_qrnnd but the numbers are signed. The quotient
- is rounded towards 0.
-
- 5) count_leading_zeros(count, x) counts the number of zero-bits from the
- msb to the first nonzero bit in the UWtype X. This is the number of
- steps X needs to be shifted left to set the msb. Undefined for X == 0,
- unless the symbol COUNT_LEADING_ZEROS_0 is defined to some value.
-
- 6) count_trailing_zeros(count, x) like count_leading_zeros, but counts
- from the least significant end.
-
- 7) add_ssaaaa(high_sum, low_sum, high_addend_1, low_addend_1,
- high_addend_2, low_addend_2) adds two UWtype integers, composed by
- HIGH_ADDEND_1 and LOW_ADDEND_1, and HIGH_ADDEND_2 and LOW_ADDEND_2
- respectively. The result is placed in HIGH_SUM and LOW_SUM. Overflow
- (i.e. carry out) is not stored anywhere, and is lost.
-
- 8) sub_ddmmss(high_difference, low_difference, high_minuend, low_minuend,
- high_subtrahend, low_subtrahend) subtracts two two-word UWtype integers,
- composed by HIGH_MINUEND_1 and LOW_MINUEND_1, and HIGH_SUBTRAHEND_2 and
- LOW_SUBTRAHEND_2 respectively. The result is placed in HIGH_DIFFERENCE
- and LOW_DIFFERENCE. Overflow (i.e. carry out) is not stored anywhere,
- and is lost.
-
- If any of these macros are left undefined for a particular CPU,
- C macros are used. */
-
-/* The CPUs come in alphabetical order below.
-
- Please add support for more CPUs here, or improve the current support
- for the CPUs below!
- (E.g. WE32100, IBM360.) */
-
-#if defined (__GNUC__) && !defined (NO_ASM)
-
-/* We sometimes need to clobber "cc" with gcc2, but that would not be
- understood by gcc1. Use cpp to avoid major code duplication. */
-#if __GNUC__ < 2
-#define __CLOBBER_CC
-#define __AND_CLOBBER_CC
-#else /* __GNUC__ >= 2 */
-#define __CLOBBER_CC : "cc"
-#define __AND_CLOBBER_CC , "cc"
-#endif /* __GNUC__ < 2 */
-
-#if defined (__aarch64__)
-
-#if W_TYPE_SIZE == 32
-#define count_leading_zeros(COUNT, X) ((COUNT) = __builtin_clz (X))
-#define count_trailing_zeros(COUNT, X) ((COUNT) = __builtin_ctz (X))
-#define COUNT_LEADING_ZEROS_0 32
-#endif /* W_TYPE_SIZE == 32 */
-
-#if W_TYPE_SIZE == 64
-#define count_leading_zeros(COUNT, X) ((COUNT) = __builtin_clzll (X))
-#define count_trailing_zeros(COUNT, X) ((COUNT) = __builtin_ctzll (X))
-#define COUNT_LEADING_ZEROS_0 64
-#endif /* W_TYPE_SIZE == 64 */
-
-#endif /* __aarch64__ */
-
-#if defined (__alpha) && W_TYPE_SIZE == 64
-/* There is a bug in g++ before version 5 that
- errors on __builtin_alpha_umulh. */
-#if !defined(__cplusplus) || __GNUC__ >= 5
-#define umul_ppmm(ph, pl, m0, m1) \
- do { \
- UDItype __m0 = (m0), __m1 = (m1); \
- (ph) = __builtin_alpha_umulh (__m0, __m1); \
- (pl) = __m0 * __m1; \
- } while (0)
-#define UMUL_TIME 46
-#endif /* !c++ */
-#ifndef LONGLONG_STANDALONE
-#define udiv_qrnnd(q, r, n1, n0, d) \
- do { UDItype __r; \
- (q) = __udiv_qrnnd (&__r, (n1), (n0), (d)); \
- (r) = __r; \
- } while (0)
-extern UDItype __udiv_qrnnd (UDItype *, UDItype, UDItype, UDItype);
-#define UDIV_TIME 220
-#endif /* LONGLONG_STANDALONE */
-#ifdef __alpha_cix__
-#define count_leading_zeros(COUNT,X) ((COUNT) = __builtin_clzl (X))
-#define count_trailing_zeros(COUNT,X) ((COUNT) = __builtin_ctzl (X))
-#define COUNT_LEADING_ZEROS_0 64
-#else
-#define count_leading_zeros(COUNT,X) \
- do { \
- UDItype __xr = (X), __t, __a; \
- __t = __builtin_alpha_cmpbge (0, __xr); \
- __a = __clz_tab[__t ^ 0xff] - 1; \
- __t = __builtin_alpha_extbl (__xr, __a); \
- (COUNT) = 64 - (__clz_tab[__t] + __a*8); \
- } while (0)
-#define count_trailing_zeros(COUNT,X) \
- do { \
- UDItype __xr = (X), __t, __a; \
- __t = __builtin_alpha_cmpbge (0, __xr); \
- __t = ~__t & -~__t; \
- __a = ((__t & 0xCC) != 0) * 2; \
- __a += ((__t & 0xF0) != 0) * 4; \
- __a += ((__t & 0xAA) != 0); \
- __t = __builtin_alpha_extbl (__xr, __a); \
- __a <<= 3; \
- __t &= -__t; \
- __a += ((__t & 0xCC) != 0) * 2; \
- __a += ((__t & 0xF0) != 0) * 4; \
- __a += ((__t & 0xAA) != 0); \
- (COUNT) = __a; \
- } while (0)
-#endif /* __alpha_cix__ */
-#endif /* __alpha */
-
-#if defined (__arc__) && W_TYPE_SIZE == 32
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- __asm__ ("add.f %1, %4, %5\n\tadc %0, %2, %3" \
- : "=r" ((USItype) (sh)), \
- "=&r" ((USItype) (sl)) \
- : "%r" ((USItype) (ah)), \
- "rIJ" ((USItype) (bh)), \
- "%r" ((USItype) (al)), \
- "rIJ" ((USItype) (bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- __asm__ ("sub.f %1, %4, %5\n\tsbc %0, %2, %3" \
- : "=r" ((USItype) (sh)), \
- "=&r" ((USItype) (sl)) \
- : "r" ((USItype) (ah)), \
- "rIJ" ((USItype) (bh)), \
- "r" ((USItype) (al)), \
- "rIJ" ((USItype) (bl)))
-
-#define __umulsidi3(u,v) ((UDItype)(USItype)u*(USItype)v)
-#ifdef __ARC_NORM__
-#define count_leading_zeros(count, x) \
- do \
- { \
- SItype c_; \
- \
- __asm__ ("norm.f\t%0,%1\n\tmov.mi\t%0,-1" : "=r" (c_) : "r" (x) : "cc");\
- (count) = c_ + 1; \
- } \
- while (0)
-#define COUNT_LEADING_ZEROS_0 32
-#endif
-#endif
-
-#if defined (__arm__) && (defined (__thumb2__) || !defined (__thumb__)) \
- && W_TYPE_SIZE == 32
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- __asm__ ("adds %1, %4, %5\n\tadc %0, %2, %3" \
- : "=r" ((USItype) (sh)), \
- "=&r" ((USItype) (sl)) \
- : "%r" ((USItype) (ah)), \
- "rI" ((USItype) (bh)), \
- "%r" ((USItype) (al)), \
- "rI" ((USItype) (bl)) __CLOBBER_CC)
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- __asm__ ("subs %1, %4, %5\n\tsbc %0, %2, %3" \
- : "=r" ((USItype) (sh)), \
- "=&r" ((USItype) (sl)) \
- : "r" ((USItype) (ah)), \
- "rI" ((USItype) (bh)), \
- "r" ((USItype) (al)), \
- "rI" ((USItype) (bl)) __CLOBBER_CC)
-# if defined(__ARM_ARCH_2__) || defined(__ARM_ARCH_2A__) \
- || defined(__ARM_ARCH_3__)
-# define umul_ppmm(xh, xl, a, b) \
- do { \
- register USItype __t0, __t1, __t2; \
- __asm__ ("%@ Inlined umul_ppmm\n" \
- " mov %2, %5, lsr #16\n" \
- " mov %0, %6, lsr #16\n" \
- " bic %3, %5, %2, lsl #16\n" \
- " bic %4, %6, %0, lsl #16\n" \
- " mul %1, %3, %4\n" \
- " mul %4, %2, %4\n" \
- " mul %3, %0, %3\n" \
- " mul %0, %2, %0\n" \
- " adds %3, %4, %3\n" \
- " addcs %0, %0, #65536\n" \
- " adds %1, %1, %3, lsl #16\n" \
- " adc %0, %0, %3, lsr #16" \
- : "=&r" ((USItype) (xh)), \
- "=r" ((USItype) (xl)), \
- "=&r" (__t0), "=&r" (__t1), "=r" (__t2) \
- : "r" ((USItype) (a)), \
- "r" ((USItype) (b)) __CLOBBER_CC ); \
- } while (0)
-# define UMUL_TIME 20
-# else
-# define umul_ppmm(xh, xl, a, b) \
- do { \
- /* Generate umull, under compiler control. */ \
- register UDItype __t0 = (UDItype)(USItype)(a) * (USItype)(b); \
- (xl) = (USItype)__t0; \
- (xh) = (USItype)(__t0 >> 32); \
- } while (0)
-# define UMUL_TIME 3
-# endif
-# define UDIV_TIME 100
-#endif /* __arm__ */
-
-#if defined(__arm__)
-/* Let gcc decide how best to implement count_leading_zeros. */
-#define count_leading_zeros(COUNT,X) ((COUNT) = __builtin_clz (X))
-#define count_trailing_zeros(COUNT,X) ((COUNT) = __builtin_ctz (X))
-#define COUNT_LEADING_ZEROS_0 32
-#endif
-
-#if defined (__AVR__)
-
-#if W_TYPE_SIZE == 16
-#define count_leading_zeros(COUNT,X) ((COUNT) = __builtin_clz (X))
-#define count_trailing_zeros(COUNT,X) ((COUNT) = __builtin_ctz (X))
-#define COUNT_LEADING_ZEROS_0 16
-#endif /* W_TYPE_SIZE == 16 */
-
-#if W_TYPE_SIZE == 32
-#define count_leading_zeros(COUNT,X) ((COUNT) = __builtin_clzl (X))
-#define count_trailing_zeros(COUNT,X) ((COUNT) = __builtin_ctzl (X))
-#define COUNT_LEADING_ZEROS_0 32
-#endif /* W_TYPE_SIZE == 32 */
-
-#if W_TYPE_SIZE == 64
-#define count_leading_zeros(COUNT,X) ((COUNT) = __builtin_clzll (X))
-#define count_trailing_zeros(COUNT,X) ((COUNT) = __builtin_ctzll (X))
-#define COUNT_LEADING_ZEROS_0 64
-#endif /* W_TYPE_SIZE == 64 */
-
-#endif /* defined (__AVR__) */
-
-#if defined (__CRIS__)
-
-#if __CRIS_arch_version >= 3
-#define count_leading_zeros(COUNT, X) ((COUNT) = __builtin_clz (X))
-#define COUNT_LEADING_ZEROS_0 32
-#endif /* __CRIS_arch_version >= 3 */
-
-#if __CRIS_arch_version >= 8
-#define count_trailing_zeros(COUNT, X) ((COUNT) = __builtin_ctz (X))
-#endif /* __CRIS_arch_version >= 8 */
-
-#if __CRIS_arch_version >= 10
-#define __umulsidi3(u,v) ((UDItype)(USItype) (u) * (UDItype)(USItype) (v))
-#else
-#define __umulsidi3 __umulsidi3
-extern UDItype __umulsidi3 (USItype, USItype);
-#endif /* __CRIS_arch_version >= 10 */
-
-#define umul_ppmm(w1, w0, u, v) \
- do { \
- UDItype __x = __umulsidi3 (u, v); \
- (w0) = (USItype) (__x); \
- (w1) = (USItype) (__x >> 32); \
- } while (0)
-
-/* FIXME: defining add_ssaaaa and sub_ddmmss should be advantageous for
- DFmode ("double" intrinsics, avoiding two of the three insns handling
- carry), but defining them as open-code C composing and doing the
- operation in DImode (UDImode) shows that the DImode needs work:
- register pressure from requiring neighboring registers and the
- traffic to and from them come to dominate, in the 4.7 series. */
-
-#endif /* defined (__CRIS__) */
-
-#if defined (__hppa) && W_TYPE_SIZE == 32
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- __asm__ ("add %4,%5,%1\n\taddc %2,%3,%0" \
- : "=r" ((USItype) (sh)), \
- "=&r" ((USItype) (sl)) \
- : "%rM" ((USItype) (ah)), \
- "rM" ((USItype) (bh)), \
- "%rM" ((USItype) (al)), \
- "rM" ((USItype) (bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- __asm__ ("sub %4,%5,%1\n\tsubb %2,%3,%0" \
- : "=r" ((USItype) (sh)), \
- "=&r" ((USItype) (sl)) \
- : "rM" ((USItype) (ah)), \
- "rM" ((USItype) (bh)), \
- "rM" ((USItype) (al)), \
- "rM" ((USItype) (bl)))
-#if defined (_PA_RISC1_1)
-#define umul_ppmm(w1, w0, u, v) \
- do { \
- union \
- { \
- UDItype __f; \
- struct {USItype __w1, __w0;} __w1w0; \
- } __t; \
- __asm__ ("xmpyu %1,%2,%0" \
- : "=x" (__t.__f) \
- : "x" ((USItype) (u)), \
- "x" ((USItype) (v))); \
- (w1) = __t.__w1w0.__w1; \
- (w0) = __t.__w1w0.__w0; \
- } while (0)
-#define UMUL_TIME 8
-#else
-#define UMUL_TIME 30
-#endif
-#define UDIV_TIME 40
-#define count_leading_zeros(count, x) \
- do { \
- USItype __tmp; \
- __asm__ ( \
- "ldi 1,%0\n" \
-" extru,= %1,15,16,%%r0 ; Bits 31..16 zero?\n" \
-" extru,tr %1,15,16,%1 ; No. Shift down, skip add.\n"\
-" ldo 16(%0),%0 ; Yes. Perform add.\n" \
-" extru,= %1,23,8,%%r0 ; Bits 15..8 zero?\n" \
-" extru,tr %1,23,8,%1 ; No. Shift down, skip add.\n"\
-" ldo 8(%0),%0 ; Yes. Perform add.\n" \
-" extru,= %1,27,4,%%r0 ; Bits 7..4 zero?\n" \
-" extru,tr %1,27,4,%1 ; No. Shift down, skip add.\n"\
-" ldo 4(%0),%0 ; Yes. Perform add.\n" \
-" extru,= %1,29,2,%%r0 ; Bits 3..2 zero?\n" \
-" extru,tr %1,29,2,%1 ; No. Shift down, skip add.\n"\
-" ldo 2(%0),%0 ; Yes. Perform add.\n" \
-" extru %1,30,1,%1 ; Extract bit 1.\n" \
-" sub %0,%1,%0 ; Subtract it.\n" \
- : "=r" (count), "=r" (__tmp) : "1" (x)); \
- } while (0)
-#endif
-
-#if (defined (__i370__) || defined (__s390__) || defined (__mvs__)) && W_TYPE_SIZE == 32
-#if !defined (__zarch__)
-#define smul_ppmm(xh, xl, m0, m1) \
- do { \
- union {DItype __ll; \
- struct {USItype __h, __l;} __i; \
- } __x; \
- __asm__ ("lr %N0,%1\n\tmr %0,%2" \
- : "=&r" (__x.__ll) \
- : "r" (m0), "r" (m1)); \
- (xh) = __x.__i.__h; (xl) = __x.__i.__l; \
- } while (0)
-#define sdiv_qrnnd(q, r, n1, n0, d) \
- do { \
- union {DItype __ll; \
- struct {USItype __h, __l;} __i; \
- } __x; \
- __x.__i.__h = n1; __x.__i.__l = n0; \
- __asm__ ("dr %0,%2" \
- : "=r" (__x.__ll) \
- : "0" (__x.__ll), "r" (d)); \
- (q) = __x.__i.__l; (r) = __x.__i.__h; \
- } while (0)
-#else
-#define smul_ppmm(xh, xl, m0, m1) \
- do { \
- register SItype __r0 __asm__ ("0"); \
- register SItype __r1 __asm__ ("1") = (m0); \
- \
- __asm__ ("mr\t%%r0,%3" \
- : "=r" (__r0), "=r" (__r1) \
- : "r" (__r1), "r" (m1)); \
- (xh) = __r0; (xl) = __r1; \
- } while (0)
-
-#define sdiv_qrnnd(q, r, n1, n0, d) \
- do { \
- register SItype __r0 __asm__ ("0") = (n1); \
- register SItype __r1 __asm__ ("1") = (n0); \
- \
- __asm__ ("dr\t%%r0,%4" \
- : "=r" (__r0), "=r" (__r1) \
- : "r" (__r0), "r" (__r1), "r" (d)); \
- (q) = __r1; (r) = __r0; \
- } while (0)
-#endif /* __zarch__ */
-#endif
-
-#if (defined (__i386__) || defined (__i486__)) && W_TYPE_SIZE == 32
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- __asm__ ("add{l} {%5,%1|%1,%5}\n\tadc{l} {%3,%0|%0,%3}" \
- : "=r" ((USItype) (sh)), \
- "=&r" ((USItype) (sl)) \
- : "%0" ((USItype) (ah)), \
- "g" ((USItype) (bh)), \
- "%1" ((USItype) (al)), \
- "g" ((USItype) (bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- __asm__ ("sub{l} {%5,%1|%1,%5}\n\tsbb{l} {%3,%0|%0,%3}" \
- : "=r" ((USItype) (sh)), \
- "=&r" ((USItype) (sl)) \
- : "0" ((USItype) (ah)), \
- "g" ((USItype) (bh)), \
- "1" ((USItype) (al)), \
- "g" ((USItype) (bl)))
-#define umul_ppmm(w1, w0, u, v) \
- __asm__ ("mul{l} %3" \
- : "=a" ((USItype) (w0)), \
- "=d" ((USItype) (w1)) \
- : "%0" ((USItype) (u)), \
- "rm" ((USItype) (v)))
-#define udiv_qrnnd(q, r, n1, n0, dv) \
- __asm__ ("div{l} %4" \
- : "=a" ((USItype) (q)), \
- "=d" ((USItype) (r)) \
- : "0" ((USItype) (n0)), \
- "1" ((USItype) (n1)), \
- "rm" ((USItype) (dv)))
-#define count_leading_zeros(count, x) ((count) = __builtin_clz (x))
-#define count_trailing_zeros(count, x) ((count) = __builtin_ctz (x))
-#define UMUL_TIME 40
-#define UDIV_TIME 40
-#endif /* 80x86 */
-
-#if defined (__x86_64__) && W_TYPE_SIZE == 64
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- __asm__ ("add{q} {%5,%1|%1,%5}\n\tadc{q} {%3,%0|%0,%3}" \
- : "=r" ((UDItype) (sh)), \
- "=&r" ((UDItype) (sl)) \
- : "%0" ((UDItype) (ah)), \
- "rme" ((UDItype) (bh)), \
- "%1" ((UDItype) (al)), \
- "rme" ((UDItype) (bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- __asm__ ("sub{q} {%5,%1|%1,%5}\n\tsbb{q} {%3,%0|%0,%3}" \
- : "=r" ((UDItype) (sh)), \
- "=&r" ((UDItype) (sl)) \
- : "0" ((UDItype) (ah)), \
- "rme" ((UDItype) (bh)), \
- "1" ((UDItype) (al)), \
- "rme" ((UDItype) (bl)))
-#define umul_ppmm(w1, w0, u, v) \
- __asm__ ("mul{q} %3" \
- : "=a" ((UDItype) (w0)), \
- "=d" ((UDItype) (w1)) \
- : "%0" ((UDItype) (u)), \
- "rm" ((UDItype) (v)))
-#define udiv_qrnnd(q, r, n1, n0, dv) \
- __asm__ ("div{q} %4" \
- : "=a" ((UDItype) (q)), \
- "=d" ((UDItype) (r)) \
- : "0" ((UDItype) (n0)), \
- "1" ((UDItype) (n1)), \
- "rm" ((UDItype) (dv)))
-#define count_leading_zeros(count, x) ((count) = __builtin_clzll (x))
-#define count_trailing_zeros(count, x) ((count) = __builtin_ctzll (x))
-#define UMUL_TIME 40
-#define UDIV_TIME 40
-#endif /* x86_64 */
-
-#if defined (__i960__) && W_TYPE_SIZE == 32
-#define umul_ppmm(w1, w0, u, v) \
- ({union {UDItype __ll; \
- struct {USItype __l, __h;} __i; \
- } __xx; \
- __asm__ ("emul %2,%1,%0" \
- : "=d" (__xx.__ll) \
- : "%dI" ((USItype) (u)), \
- "dI" ((USItype) (v))); \
- (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;})
-#define __umulsidi3(u, v) \
- ({UDItype __w; \
- __asm__ ("emul %2,%1,%0" \
- : "=d" (__w) \
- : "%dI" ((USItype) (u)), \
- "dI" ((USItype) (v))); \
- __w; })
-#endif /* __i960__ */
-
-#if defined (__ia64) && W_TYPE_SIZE == 64
-/* This form encourages gcc (pre-release 3.4 at least) to emit predicated
- "sub r=r,r" and "sub r=r,r,1", giving a 2 cycle latency. The generic
- code using "al<bl" arithmetically comes out making an actual 0 or 1 in a
- register, which takes an extra cycle. */
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- do { \
- UWtype __x; \
- __x = (al) - (bl); \
- if ((al) < (bl)) \
- (sh) = (ah) - (bh) - 1; \
- else \
- (sh) = (ah) - (bh); \
- (sl) = __x; \
- } while (0)
-
-/* Do both product parts in assembly, since that gives better code with
- all gcc versions. Some callers will just use the upper part, and in
- that situation we waste an instruction, but not any cycles. */
-#define umul_ppmm(ph, pl, m0, m1) \
- __asm__ ("xma.hu %0 = %2, %3, f0\n\txma.l %1 = %2, %3, f0" \
- : "=&f" (ph), "=f" (pl) \
- : "f" (m0), "f" (m1))
-#define count_leading_zeros(count, x) \
- do { \
- UWtype _x = (x), _y, _a, _c; \
- __asm__ ("mux1 %0 = %1, @rev" : "=r" (_y) : "r" (_x)); \
- __asm__ ("czx1.l %0 = %1" : "=r" (_a) : "r" (-_y | _y)); \
- _c = (_a - 1) << 3; \
- _x >>= _c; \
- if (_x >= 1 << 4) \
- _x >>= 4, _c += 4; \
- if (_x >= 1 << 2) \
- _x >>= 2, _c += 2; \
- _c += _x >> 1; \
- (count) = W_TYPE_SIZE - 1 - _c; \
- } while (0)
-/* similar to what gcc does for __builtin_ffs, but 0 based rather than 1
- based, and we don't need a special case for x==0 here */
-#define count_trailing_zeros(count, x) \
- do { \
- UWtype __ctz_x = (x); \
- __asm__ ("popcnt %0 = %1" \
- : "=r" (count) \
- : "r" ((__ctz_x-1) & ~__ctz_x)); \
- } while (0)
-#define UMUL_TIME 14
-#endif
-
-#if defined (__M32R__) && W_TYPE_SIZE == 32
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- /* The cmp clears the condition bit. */ \
- __asm__ ("cmp %0,%0\n\taddx %1,%5\n\taddx %0,%3" \
- : "=r" ((USItype) (sh)), \
- "=&r" ((USItype) (sl)) \
- : "0" ((USItype) (ah)), \
- "r" ((USItype) (bh)), \
- "1" ((USItype) (al)), \
- "r" ((USItype) (bl)) \
- : "cbit")
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- /* The cmp clears the condition bit. */ \
- __asm__ ("cmp %0,%0\n\tsubx %1,%5\n\tsubx %0,%3" \
- : "=r" ((USItype) (sh)), \
- "=&r" ((USItype) (sl)) \
- : "0" ((USItype) (ah)), \
- "r" ((USItype) (bh)), \
- "1" ((USItype) (al)), \
- "r" ((USItype) (bl)) \
- : "cbit")
-#endif /* __M32R__ */
-
-#if defined (__mc68000__) && W_TYPE_SIZE == 32
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- __asm__ ("add%.l %5,%1\n\taddx%.l %3,%0" \
- : "=d" ((USItype) (sh)), \
- "=&d" ((USItype) (sl)) \
- : "%0" ((USItype) (ah)), \
- "d" ((USItype) (bh)), \
- "%1" ((USItype) (al)), \
- "g" ((USItype) (bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- __asm__ ("sub%.l %5,%1\n\tsubx%.l %3,%0" \
- : "=d" ((USItype) (sh)), \
- "=&d" ((USItype) (sl)) \
- : "0" ((USItype) (ah)), \
- "d" ((USItype) (bh)), \
- "1" ((USItype) (al)), \
- "g" ((USItype) (bl)))
-
-/* The '020, '030, '040, '060 and CPU32 have 32x32->64 and 64/32->32q-32r. */
-#if (defined (__mc68020__) && !defined (__mc68060__))
-#define umul_ppmm(w1, w0, u, v) \
- __asm__ ("mulu%.l %3,%1:%0" \
- : "=d" ((USItype) (w0)), \
- "=d" ((USItype) (w1)) \
- : "%0" ((USItype) (u)), \
- "dmi" ((USItype) (v)))
-#define UMUL_TIME 45
-#define udiv_qrnnd(q, r, n1, n0, d) \
- __asm__ ("divu%.l %4,%1:%0" \
- : "=d" ((USItype) (q)), \
- "=d" ((USItype) (r)) \
- : "0" ((USItype) (n0)), \
- "1" ((USItype) (n1)), \
- "dmi" ((USItype) (d)))
-#define UDIV_TIME 90
-#define sdiv_qrnnd(q, r, n1, n0, d) \
- __asm__ ("divs%.l %4,%1:%0" \
- : "=d" ((USItype) (q)), \
- "=d" ((USItype) (r)) \
- : "0" ((USItype) (n0)), \
- "1" ((USItype) (n1)), \
- "dmi" ((USItype) (d)))
-
-#elif defined (__mcoldfire__) /* not mc68020 */
-
-#define umul_ppmm(xh, xl, a, b) \
- __asm__ ("| Inlined umul_ppmm\n" \
- " move%.l %2,%/d0\n" \
- " move%.l %3,%/d1\n" \
- " move%.l %/d0,%/d2\n" \
- " swap %/d0\n" \
- " move%.l %/d1,%/d3\n" \
- " swap %/d1\n" \
- " move%.w %/d2,%/d4\n" \
- " mulu %/d3,%/d4\n" \
- " mulu %/d1,%/d2\n" \
- " mulu %/d0,%/d3\n" \
- " mulu %/d0,%/d1\n" \
- " move%.l %/d4,%/d0\n" \
- " clr%.w %/d0\n" \
- " swap %/d0\n" \
- " add%.l %/d0,%/d2\n" \
- " add%.l %/d3,%/d2\n" \
- " jcc 1f\n" \
- " add%.l %#65536,%/d1\n" \
- "1: swap %/d2\n" \
- " moveq %#0,%/d0\n" \
- " move%.w %/d2,%/d0\n" \
- " move%.w %/d4,%/d2\n" \
- " move%.l %/d2,%1\n" \
- " add%.l %/d1,%/d0\n" \
- " move%.l %/d0,%0" \
- : "=g" ((USItype) (xh)), \
- "=g" ((USItype) (xl)) \
- : "g" ((USItype) (a)), \
- "g" ((USItype) (b)) \
- : "d0", "d1", "d2", "d3", "d4")
-#define UMUL_TIME 100
-#define UDIV_TIME 400
-#else /* not ColdFire */
-/* %/ inserts REGISTER_PREFIX, %# inserts IMMEDIATE_PREFIX. */
-#define umul_ppmm(xh, xl, a, b) \
- __asm__ ("| Inlined umul_ppmm\n" \
- " move%.l %2,%/d0\n" \
- " move%.l %3,%/d1\n" \
- " move%.l %/d0,%/d2\n" \
- " swap %/d0\n" \
- " move%.l %/d1,%/d3\n" \
- " swap %/d1\n" \
- " move%.w %/d2,%/d4\n" \
- " mulu %/d3,%/d4\n" \
- " mulu %/d1,%/d2\n" \
- " mulu %/d0,%/d3\n" \
- " mulu %/d0,%/d1\n" \
- " move%.l %/d4,%/d0\n" \
- " eor%.w %/d0,%/d0\n" \
- " swap %/d0\n" \
- " add%.l %/d0,%/d2\n" \
- " add%.l %/d3,%/d2\n" \
- " jcc 1f\n" \
- " add%.l %#65536,%/d1\n" \
- "1: swap %/d2\n" \
- " moveq %#0,%/d0\n" \
- " move%.w %/d2,%/d0\n" \
- " move%.w %/d4,%/d2\n" \
- " move%.l %/d2,%1\n" \
- " add%.l %/d1,%/d0\n" \
- " move%.l %/d0,%0" \
- : "=g" ((USItype) (xh)), \
- "=g" ((USItype) (xl)) \
- : "g" ((USItype) (a)), \
- "g" ((USItype) (b)) \
- : "d0", "d1", "d2", "d3", "d4")
-#define UMUL_TIME 100
-#define UDIV_TIME 400
-
-#endif /* not mc68020 */
-
-/* The '020, '030, '040 and '060 have bitfield insns.
- cpu32 disguises as a 68020, but lacks them. */
-#if defined (__mc68020__) && !defined (__mcpu32__)
-#define count_leading_zeros(count, x) \
- __asm__ ("bfffo %1{%b2:%b2},%0" \
- : "=d" ((USItype) (count)) \
- : "od" ((USItype) (x)), "n" (0))
-/* Some ColdFire architectures have a ff1 instruction supported via
- __builtin_clz. */
-#elif defined (__mcfisaaplus__) || defined (__mcfisac__)
-#define count_leading_zeros(count,x) ((count) = __builtin_clz (x))
-#define COUNT_LEADING_ZEROS_0 32
-#endif
-#endif /* mc68000 */
-
-#if defined (__m88000__) && W_TYPE_SIZE == 32
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- __asm__ ("addu.co %1,%r4,%r5\n\taddu.ci %0,%r2,%r3" \
- : "=r" ((USItype) (sh)), \
- "=&r" ((USItype) (sl)) \
- : "%rJ" ((USItype) (ah)), \
- "rJ" ((USItype) (bh)), \
- "%rJ" ((USItype) (al)), \
- "rJ" ((USItype) (bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- __asm__ ("subu.co %1,%r4,%r5\n\tsubu.ci %0,%r2,%r3" \
- : "=r" ((USItype) (sh)), \
- "=&r" ((USItype) (sl)) \
- : "rJ" ((USItype) (ah)), \
- "rJ" ((USItype) (bh)), \
- "rJ" ((USItype) (al)), \
- "rJ" ((USItype) (bl)))
-#define count_leading_zeros(count, x) \
- do { \
- USItype __cbtmp; \
- __asm__ ("ff1 %0,%1" \
- : "=r" (__cbtmp) \
- : "r" ((USItype) (x))); \
- (count) = __cbtmp ^ 31; \
- } while (0)
-#define COUNT_LEADING_ZEROS_0 63 /* sic */
-#if defined (__mc88110__)
-#define umul_ppmm(wh, wl, u, v) \
- do { \
- union {UDItype __ll; \
- struct {USItype __h, __l;} __i; \
- } __xx; \
- __asm__ ("mulu.d %0,%1,%2" \
- : "=r" (__xx.__ll) \
- : "r" ((USItype) (u)), \
- "r" ((USItype) (v))); \
- (wh) = __xx.__i.__h; \
- (wl) = __xx.__i.__l; \
- } while (0)
-#define udiv_qrnnd(q, r, n1, n0, d) \
- ({union {UDItype __ll; \
- struct {USItype __h, __l;} __i; \
- } __xx; \
- USItype __q; \
- __xx.__i.__h = (n1); __xx.__i.__l = (n0); \
- __asm__ ("divu.d %0,%1,%2" \
- : "=r" (__q) \
- : "r" (__xx.__ll), \
- "r" ((USItype) (d))); \
- (r) = (n0) - __q * (d); (q) = __q; })
-#define UMUL_TIME 5
-#define UDIV_TIME 25
-#else
-#define UMUL_TIME 17
-#define UDIV_TIME 150
-#endif /* __mc88110__ */
-#endif /* __m88000__ */
-
-#if defined (__mn10300__)
-# if defined (__AM33__)
-# define count_leading_zeros(COUNT,X) ((COUNT) = __builtin_clz (X))
-# define umul_ppmm(w1, w0, u, v) \
- asm("mulu %3,%2,%1,%0" : "=r"(w0), "=r"(w1) : "r"(u), "r"(v))
-# define smul_ppmm(w1, w0, u, v) \
- asm("mul %3,%2,%1,%0" : "=r"(w0), "=r"(w1) : "r"(u), "r"(v))
-# else
-# define umul_ppmm(w1, w0, u, v) \
- asm("nop; nop; mulu %3,%0" : "=d"(w0), "=z"(w1) : "%0"(u), "d"(v))
-# define smul_ppmm(w1, w0, u, v) \
- asm("nop; nop; mul %3,%0" : "=d"(w0), "=z"(w1) : "%0"(u), "d"(v))
-# endif
-# define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- do { \
- DWunion __s, __a, __b; \
- __a.s.low = (al); __a.s.high = (ah); \
- __b.s.low = (bl); __b.s.high = (bh); \
- __s.ll = __a.ll + __b.ll; \
- (sl) = __s.s.low; (sh) = __s.s.high; \
- } while (0)
-# define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- do { \
- DWunion __s, __a, __b; \
- __a.s.low = (al); __a.s.high = (ah); \
- __b.s.low = (bl); __b.s.high = (bh); \
- __s.ll = __a.ll - __b.ll; \
- (sl) = __s.s.low; (sh) = __s.s.high; \
- } while (0)
-# define udiv_qrnnd(q, r, nh, nl, d) \
- asm("divu %2,%0" : "=D"(q), "=z"(r) : "D"(d), "0"(nl), "1"(nh))
-# define sdiv_qrnnd(q, r, nh, nl, d) \
- asm("div %2,%0" : "=D"(q), "=z"(r) : "D"(d), "0"(nl), "1"(nh))
-# define UMUL_TIME 3
-# define UDIV_TIME 38
-#endif
-
-#if defined (__mips__) && W_TYPE_SIZE == 32
-#define umul_ppmm(w1, w0, u, v) \
- do { \
- UDItype __x = (UDItype) (USItype) (u) * (USItype) (v); \
- (w1) = (USItype) (__x >> 32); \
- (w0) = (USItype) (__x); \
- } while (0)
-#define UMUL_TIME 10
-#define UDIV_TIME 100
-
-#if (__mips == 32 || __mips == 64) && ! defined (__mips16)
-#define count_leading_zeros(COUNT,X) ((COUNT) = __builtin_clz (X))
-#define COUNT_LEADING_ZEROS_0 32
-#endif
-#endif /* __mips__ */
-
-#if defined (__ns32000__) && W_TYPE_SIZE == 32
-#define umul_ppmm(w1, w0, u, v) \
- ({union {UDItype __ll; \
- struct {USItype __l, __h;} __i; \
- } __xx; \
- __asm__ ("meid %2,%0" \
- : "=g" (__xx.__ll) \
- : "%0" ((USItype) (u)), \
- "g" ((USItype) (v))); \
- (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;})
-#define __umulsidi3(u, v) \
- ({UDItype __w; \
- __asm__ ("meid %2,%0" \
- : "=g" (__w) \
- : "%0" ((USItype) (u)), \
- "g" ((USItype) (v))); \
- __w; })
-#define udiv_qrnnd(q, r, n1, n0, d) \
- ({union {UDItype __ll; \
- struct {USItype __l, __h;} __i; \
- } __xx; \
- __xx.__i.__h = (n1); __xx.__i.__l = (n0); \
- __asm__ ("deid %2,%0" \
- : "=g" (__xx.__ll) \
- : "0" (__xx.__ll), \
- "g" ((USItype) (d))); \
- (r) = __xx.__i.__l; (q) = __xx.__i.__h; })
-#define count_trailing_zeros(count,x) \
- do { \
- __asm__ ("ffsd %2,%0" \
- : "=r" ((USItype) (count)) \
- : "0" ((USItype) 0), \
- "r" ((USItype) (x))); \
- } while (0)
-#endif /* __ns32000__ */
-
-/* FIXME: We should test _IBMR2 here when we add assembly support for the
- system vendor compilers.
- FIXME: What's needed for gcc PowerPC VxWorks? __vxworks__ is not good
- enough, since that hits ARM and m68k too. */
-#if (defined (_ARCH_PPC) /* AIX */ \
- || defined (__powerpc__) /* gcc */ \
- || defined (__POWERPC__) /* BEOS */ \
- || defined (__ppc__) /* Darwin */ \
- || (defined (PPC) && ! defined (CPU_FAMILY)) /* gcc 2.7.x GNU&SysV */ \
- || (defined (PPC) && defined (CPU_FAMILY) /* VxWorks */ \
- && CPU_FAMILY == PPC) \
- ) && W_TYPE_SIZE == 32
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- do { \
- if (__builtin_constant_p (bh) && (bh) == 0) \
- __asm__ ("add%I4c %1,%3,%4\n\taddze %0,%2" \
- : "=r" (sh), "=&r" (sl) : "r" (ah), "%r" (al), "rI" (bl));\
- else if (__builtin_constant_p (bh) && (bh) == ~(USItype) 0) \
- __asm__ ("add%I4c %1,%3,%4\n\taddme %0,%2" \
- : "=r" (sh), "=&r" (sl) : "r" (ah), "%r" (al), "rI" (bl));\
- else \
- __asm__ ("add%I5c %1,%4,%5\n\tadde %0,%2,%3" \
- : "=r" (sh), "=&r" (sl) \
- : "%r" (ah), "r" (bh), "%r" (al), "rI" (bl)); \
- } while (0)
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- do { \
- if (__builtin_constant_p (ah) && (ah) == 0) \
- __asm__ ("subf%I3c %1,%4,%3\n\tsubfze %0,%2" \
- : "=r" (sh), "=&r" (sl) : "r" (bh), "rI" (al), "r" (bl));\
- else if (__builtin_constant_p (ah) && (ah) == ~(USItype) 0) \
- __asm__ ("subf%I3c %1,%4,%3\n\tsubfme %0,%2" \
- : "=r" (sh), "=&r" (sl) : "r" (bh), "rI" (al), "r" (bl));\
- else if (__builtin_constant_p (bh) && (bh) == 0) \
- __asm__ ("subf%I3c %1,%4,%3\n\taddme %0,%2" \
- : "=r" (sh), "=&r" (sl) : "r" (ah), "rI" (al), "r" (bl));\
- else if (__builtin_constant_p (bh) && (bh) == ~(USItype) 0) \
- __asm__ ("subf%I3c %1,%4,%3\n\taddze %0,%2" \
- : "=r" (sh), "=&r" (sl) : "r" (ah), "rI" (al), "r" (bl));\
- else \
- __asm__ ("subf%I4c %1,%5,%4\n\tsubfe %0,%3,%2" \
- : "=r" (sh), "=&r" (sl) \
- : "r" (ah), "r" (bh), "rI" (al), "r" (bl)); \
- } while (0)
-#define count_leading_zeros(count, x) \
- __asm__ ("cntlzw %0,%1" : "=r" (count) : "r" (x))
-#define COUNT_LEADING_ZEROS_0 32
-#if defined (_ARCH_PPC) || defined (__powerpc__) || defined (__POWERPC__) \
- || defined (__ppc__) \
- || (defined (PPC) && ! defined (CPU_FAMILY)) /* gcc 2.7.x GNU&SysV */ \
- || (defined (PPC) && defined (CPU_FAMILY) /* VxWorks */ \
- && CPU_FAMILY == PPC)
-#define umul_ppmm(ph, pl, m0, m1) \
- do { \
- USItype __m0 = (m0), __m1 = (m1); \
- __asm__ ("mulhwu %0,%1,%2" : "=r" (ph) : "%r" (m0), "r" (m1)); \
- (pl) = __m0 * __m1; \
- } while (0)
-#define UMUL_TIME 15
-#define smul_ppmm(ph, pl, m0, m1) \
- do { \
- SItype __m0 = (m0), __m1 = (m1); \
- __asm__ ("mulhw %0,%1,%2" : "=r" (ph) : "%r" (m0), "r" (m1)); \
- (pl) = __m0 * __m1; \
- } while (0)
-#define SMUL_TIME 14
-#define UDIV_TIME 120
-#endif
-#endif /* 32-bit POWER architecture variants. */
-
-/* We should test _IBMR2 here when we add assembly support for the system
- vendor compilers. */
-#if (defined (_ARCH_PPC64) || defined (__powerpc64__)) && W_TYPE_SIZE == 64
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- do { \
- if (__builtin_constant_p (bh) && (bh) == 0) \
- __asm__ ("add%I4c %1,%3,%4\n\taddze %0,%2" \
- : "=r" (sh), "=&r" (sl) : "r" (ah), "%r" (al), "rI" (bl));\
- else if (__builtin_constant_p (bh) && (bh) == ~(UDItype) 0) \
- __asm__ ("add%I4c %1,%3,%4\n\taddme %0,%2" \
- : "=r" (sh), "=&r" (sl) : "r" (ah), "%r" (al), "rI" (bl));\
- else \
- __asm__ ("add%I5c %1,%4,%5\n\tadde %0,%2,%3" \
- : "=r" (sh), "=&r" (sl) \
- : "%r" (ah), "r" (bh), "%r" (al), "rI" (bl)); \
- } while (0)
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- do { \
- if (__builtin_constant_p (ah) && (ah) == 0) \
- __asm__ ("subf%I3c %1,%4,%3\n\tsubfze %0,%2" \
- : "=r" (sh), "=&r" (sl) : "r" (bh), "rI" (al), "r" (bl));\
- else if (__builtin_constant_p (ah) && (ah) == ~(UDItype) 0) \
- __asm__ ("subf%I3c %1,%4,%3\n\tsubfme %0,%2" \
- : "=r" (sh), "=&r" (sl) : "r" (bh), "rI" (al), "r" (bl));\
- else if (__builtin_constant_p (bh) && (bh) == 0) \
- __asm__ ("subf%I3c %1,%4,%3\n\taddme %0,%2" \
- : "=r" (sh), "=&r" (sl) : "r" (ah), "rI" (al), "r" (bl));\
- else if (__builtin_constant_p (bh) && (bh) == ~(UDItype) 0) \
- __asm__ ("subf%I3c %1,%4,%3\n\taddze %0,%2" \
- : "=r" (sh), "=&r" (sl) : "r" (ah), "rI" (al), "r" (bl));\
- else \
- __asm__ ("subf%I4c %1,%5,%4\n\tsubfe %0,%3,%2" \
- : "=r" (sh), "=&r" (sl) \
- : "r" (ah), "r" (bh), "rI" (al), "r" (bl)); \
- } while (0)
-#define count_leading_zeros(count, x) \
- __asm__ ("cntlzd %0,%1" : "=r" (count) : "r" (x))
-#define COUNT_LEADING_ZEROS_0 64
-#define umul_ppmm(ph, pl, m0, m1) \
- do { \
- UDItype __m0 = (m0), __m1 = (m1); \
- __asm__ ("mulhdu %0,%1,%2" : "=r" (ph) : "%r" (m0), "r" (m1)); \
- (pl) = __m0 * __m1; \
- } while (0)
-#define UMUL_TIME 15
-#define smul_ppmm(ph, pl, m0, m1) \
- do { \
- DItype __m0 = (m0), __m1 = (m1); \
- __asm__ ("mulhd %0,%1,%2" : "=r" (ph) : "%r" (m0), "r" (m1)); \
- (pl) = __m0 * __m1; \
- } while (0)
-#define SMUL_TIME 14 /* ??? */
-#define UDIV_TIME 120 /* ??? */
-#endif /* 64-bit PowerPC. */
-
-#if defined (__ibm032__) /* RT/ROMP */ && W_TYPE_SIZE == 32
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- __asm__ ("a %1,%5\n\tae %0,%3" \
- : "=r" ((USItype) (sh)), \
- "=&r" ((USItype) (sl)) \
- : "%0" ((USItype) (ah)), \
- "r" ((USItype) (bh)), \
- "%1" ((USItype) (al)), \
- "r" ((USItype) (bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- __asm__ ("s %1,%5\n\tse %0,%3" \
- : "=r" ((USItype) (sh)), \
- "=&r" ((USItype) (sl)) \
- : "0" ((USItype) (ah)), \
- "r" ((USItype) (bh)), \
- "1" ((USItype) (al)), \
- "r" ((USItype) (bl)))
-#define umul_ppmm(ph, pl, m0, m1) \
- do { \
- USItype __m0 = (m0), __m1 = (m1); \
- __asm__ ( \
- "s r2,r2\n" \
-" mts r10,%2\n" \
-" m r2,%3\n" \
-" m r2,%3\n" \
-" m r2,%3\n" \
-" m r2,%3\n" \
-" m r2,%3\n" \
-" m r2,%3\n" \
-" m r2,%3\n" \
-" m r2,%3\n" \
-" m r2,%3\n" \
-" m r2,%3\n" \
-" m r2,%3\n" \
-" m r2,%3\n" \
-" m r2,%3\n" \
-" m r2,%3\n" \
-" m r2,%3\n" \
-" m r2,%3\n" \
-" cas %0,r2,r0\n" \
-" mfs r10,%1" \
- : "=r" ((USItype) (ph)), \
- "=r" ((USItype) (pl)) \
- : "%r" (__m0), \
- "r" (__m1) \
- : "r2"); \
- (ph) += ((((SItype) __m0 >> 31) & __m1) \
- + (((SItype) __m1 >> 31) & __m0)); \
- } while (0)
-#define UMUL_TIME 20
-#define UDIV_TIME 200
-#define count_leading_zeros(count, x) \
- do { \
- if ((x) >= 0x10000) \
- __asm__ ("clz %0,%1" \
- : "=r" ((USItype) (count)) \
- : "r" ((USItype) (x) >> 16)); \
- else \
- { \
- __asm__ ("clz %0,%1" \
- : "=r" ((USItype) (count)) \
- : "r" ((USItype) (x))); \
- (count) += 16; \
- } \
- } while (0)
-#endif
-
-#if defined(__sh__) && !__SHMEDIA__ && W_TYPE_SIZE == 32
-#ifndef __sh1__
-#define umul_ppmm(w1, w0, u, v) \
- __asm__ ( \
- "dmulu.l %2,%3\n\tsts%M1 macl,%1\n\tsts%M0 mach,%0" \
- : "=r<" ((USItype)(w1)), \
- "=r<" ((USItype)(w0)) \
- : "r" ((USItype)(u)), \
- "r" ((USItype)(v)) \
- : "macl", "mach")
-#define UMUL_TIME 5
-#endif
-
-/* This is the same algorithm as __udiv_qrnnd_c. */
-#define UDIV_NEEDS_NORMALIZATION 1
-
-#define udiv_qrnnd(q, r, n1, n0, d) \
- do { \
- extern UWtype __udiv_qrnnd_16 (UWtype, UWtype) \
- __attribute__ ((visibility ("hidden"))); \
- /* r0: rn r1: qn */ /* r0: n1 r4: n0 r5: d r6: d1 */ /* r2: __m */ \
- __asm__ ( \
- "mov%M4 %4,r5\n" \
-" swap.w %3,r4\n" \
-" swap.w r5,r6\n" \
-" jsr @%5\n" \
-" shll16 r6\n" \
-" swap.w r4,r4\n" \
-" jsr @%5\n" \
-" swap.w r1,%0\n" \
-" or r1,%0" \
- : "=r" (q), "=&z" (r) \
- : "1" (n1), "r" (n0), "rm" (d), "r" (&__udiv_qrnnd_16) \
- : "r1", "r2", "r4", "r5", "r6", "pr", "t"); \
- } while (0)
-
-#define UDIV_TIME 80
-
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- __asm__ ("clrt;subc %5,%1; subc %4,%0" \
- : "=r" (sh), "=r" (sl) \
- : "0" (ah), "1" (al), "r" (bh), "r" (bl) : "t")
-
-#endif /* __sh__ */
-
-#if defined (__SH5__) && __SHMEDIA__ && W_TYPE_SIZE == 32
-#define __umulsidi3(u,v) ((UDItype)(USItype)u*(USItype)v)
-#define count_leading_zeros(count, x) \
- do \
- { \
- UDItype x_ = (USItype)(x); \
- SItype c_; \
- \
- __asm__ ("nsb %1, %0" : "=r" (c_) : "r" (x_)); \
- (count) = c_ - 31; \
- } \
- while (0)
-#define COUNT_LEADING_ZEROS_0 32
-#endif
-
-#if defined (__sparc__) && !defined (__arch64__) && !defined (__sparcv9) \
- && W_TYPE_SIZE == 32
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- __asm__ ("addcc %r4,%5,%1\n\taddx %r2,%3,%0" \
- : "=r" ((USItype) (sh)), \
- "=&r" ((USItype) (sl)) \
- : "%rJ" ((USItype) (ah)), \
- "rI" ((USItype) (bh)), \
- "%rJ" ((USItype) (al)), \
- "rI" ((USItype) (bl)) \
- __CLOBBER_CC)
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- __asm__ ("subcc %r4,%5,%1\n\tsubx %r2,%3,%0" \
- : "=r" ((USItype) (sh)), \
- "=&r" ((USItype) (sl)) \
- : "rJ" ((USItype) (ah)), \
- "rI" ((USItype) (bh)), \
- "rJ" ((USItype) (al)), \
- "rI" ((USItype) (bl)) \
- __CLOBBER_CC)
-#if defined (__sparc_v9__)
-#define umul_ppmm(w1, w0, u, v) \
- do { \
- register USItype __g1 asm ("g1"); \
- __asm__ ("umul\t%2,%3,%1\n\t" \
- "srlx\t%1, 32, %0" \
- : "=r" ((USItype) (w1)), \
- "=r" (__g1) \
- : "r" ((USItype) (u)), \
- "r" ((USItype) (v))); \
- (w0) = __g1; \
- } while (0)
-#define udiv_qrnnd(__q, __r, __n1, __n0, __d) \
- __asm__ ("mov\t%2,%%y\n\t" \
- "udiv\t%3,%4,%0\n\t" \
- "umul\t%0,%4,%1\n\t" \
- "sub\t%3,%1,%1" \
- : "=&r" ((USItype) (__q)), \
- "=&r" ((USItype) (__r)) \
- : "r" ((USItype) (__n1)), \
- "r" ((USItype) (__n0)), \
- "r" ((USItype) (__d)))
-#else
-#if defined (__sparc_v8__)
-#define umul_ppmm(w1, w0, u, v) \
- __asm__ ("umul %2,%3,%1;rd %%y,%0" \
- : "=r" ((USItype) (w1)), \
- "=r" ((USItype) (w0)) \
- : "r" ((USItype) (u)), \
- "r" ((USItype) (v)))
-#define udiv_qrnnd(__q, __r, __n1, __n0, __d) \
- __asm__ ("mov %2,%%y;nop;nop;nop;udiv %3,%4,%0;umul %0,%4,%1;sub %3,%1,%1"\
- : "=&r" ((USItype) (__q)), \
- "=&r" ((USItype) (__r)) \
- : "r" ((USItype) (__n1)), \
- "r" ((USItype) (__n0)), \
- "r" ((USItype) (__d)))
-#else
-#if defined (__sparclite__)
-/* This has hardware multiply but not divide. It also has two additional
- instructions scan (ffs from high bit) and divscc. */
-#define umul_ppmm(w1, w0, u, v) \
- __asm__ ("umul %2,%3,%1;rd %%y,%0" \
- : "=r" ((USItype) (w1)), \
- "=r" ((USItype) (w0)) \
- : "r" ((USItype) (u)), \
- "r" ((USItype) (v)))
-#define udiv_qrnnd(q, r, n1, n0, d) \
- __asm__ ("! Inlined udiv_qrnnd\n" \
-" wr %%g0,%2,%%y ! Not a delayed write for sparclite\n" \
-" tst %%g0\n" \
-" divscc %3,%4,%%g1\n" \
-" divscc %%g1,%4,%%g1\n" \
-" divscc %%g1,%4,%%g1\n" \
-" divscc %%g1,%4,%%g1\n" \
-" divscc %%g1,%4,%%g1\n" \
-" divscc %%g1,%4,%%g1\n" \
-" divscc %%g1,%4,%%g1\n" \
-" divscc %%g1,%4,%%g1\n" \
-" divscc %%g1,%4,%%g1\n" \
-" divscc %%g1,%4,%%g1\n" \
-" divscc %%g1,%4,%%g1\n" \
-" divscc %%g1,%4,%%g1\n" \
-" divscc %%g1,%4,%%g1\n" \
-" divscc %%g1,%4,%%g1\n" \
-" divscc %%g1,%4,%%g1\n" \
-" divscc %%g1,%4,%%g1\n" \
-" divscc %%g1,%4,%%g1\n" \
-" divscc %%g1,%4,%%g1\n" \
-" divscc %%g1,%4,%%g1\n" \
-" divscc %%g1,%4,%%g1\n" \
-" divscc %%g1,%4,%%g1\n" \
-" divscc %%g1,%4,%%g1\n" \
-" divscc %%g1,%4,%%g1\n" \
-" divscc %%g1,%4,%%g1\n" \
-" divscc %%g1,%4,%%g1\n" \
-" divscc %%g1,%4,%%g1\n" \
-" divscc %%g1,%4,%%g1\n" \
-" divscc %%g1,%4,%%g1\n" \
-" divscc %%g1,%4,%%g1\n" \
-" divscc %%g1,%4,%%g1\n" \
-" divscc %%g1,%4,%%g1\n" \
-" divscc %%g1,%4,%0\n" \
-" rd %%y,%1\n" \
-" bl,a 1f\n" \
-" add %1,%4,%1\n" \
-"1: ! End of inline udiv_qrnnd" \
- : "=r" ((USItype) (q)), \
- "=r" ((USItype) (r)) \
- : "r" ((USItype) (n1)), \
- "r" ((USItype) (n0)), \
- "rI" ((USItype) (d)) \
- : "g1" __AND_CLOBBER_CC)
-#define UDIV_TIME 37
-#define count_leading_zeros(count, x) \
- do { \
- __asm__ ("scan %1,1,%0" \
- : "=r" ((USItype) (count)) \
- : "r" ((USItype) (x))); \
- } while (0)
-/* Early sparclites return 63 for an argument of 0, but they warn that future
- implementations might change this. Therefore, leave COUNT_LEADING_ZEROS_0
- undefined. */
-#else
-/* SPARC without integer multiplication and divide instructions.
- (i.e. at least Sun4/20,40,60,65,75,110,260,280,330,360,380,470,490) */
-#define umul_ppmm(w1, w0, u, v) \
- __asm__ ("! Inlined umul_ppmm\n" \
-" wr %%g0,%2,%%y ! SPARC has 0-3 delay insn after a wr\n"\
-" sra %3,31,%%o5 ! Don't move this insn\n" \
-" and %2,%%o5,%%o5 ! Don't move this insn\n" \
-" andcc %%g0,0,%%g1 ! Don't move this insn\n" \
-" mulscc %%g1,%3,%%g1\n" \
-" mulscc %%g1,%3,%%g1\n" \
-" mulscc %%g1,%3,%%g1\n" \
-" mulscc %%g1,%3,%%g1\n" \
-" mulscc %%g1,%3,%%g1\n" \
-" mulscc %%g1,%3,%%g1\n" \
-" mulscc %%g1,%3,%%g1\n" \
-" mulscc %%g1,%3,%%g1\n" \
-" mulscc %%g1,%3,%%g1\n" \
-" mulscc %%g1,%3,%%g1\n" \
-" mulscc %%g1,%3,%%g1\n" \
-" mulscc %%g1,%3,%%g1\n" \
-" mulscc %%g1,%3,%%g1\n" \
-" mulscc %%g1,%3,%%g1\n" \
-" mulscc %%g1,%3,%%g1\n" \
-" mulscc %%g1,%3,%%g1\n" \
-" mulscc %%g1,%3,%%g1\n" \
-" mulscc %%g1,%3,%%g1\n" \
-" mulscc %%g1,%3,%%g1\n" \
-" mulscc %%g1,%3,%%g1\n" \
-" mulscc %%g1,%3,%%g1\n" \
-" mulscc %%g1,%3,%%g1\n" \
-" mulscc %%g1,%3,%%g1\n" \
-" mulscc %%g1,%3,%%g1\n" \
-" mulscc %%g1,%3,%%g1\n" \
-" mulscc %%g1,%3,%%g1\n" \
-" mulscc %%g1,%3,%%g1\n" \
-" mulscc %%g1,%3,%%g1\n" \
-" mulscc %%g1,%3,%%g1\n" \
-" mulscc %%g1,%3,%%g1\n" \
-" mulscc %%g1,%3,%%g1\n" \
-" mulscc %%g1,%3,%%g1\n" \
-" mulscc %%g1,0,%%g1\n" \
-" add %%g1,%%o5,%0\n" \
-" rd %%y,%1" \
- : "=r" ((USItype) (w1)), \
- "=r" ((USItype) (w0)) \
- : "%rI" ((USItype) (u)), \
- "r" ((USItype) (v)) \
- : "g1", "o5" __AND_CLOBBER_CC)
-#define UMUL_TIME 39 /* 39 instructions */
-/* It's quite necessary to add this much assembler for the sparc.
- The default udiv_qrnnd (in C) is more than 10 times slower! */
-#define udiv_qrnnd(__q, __r, __n1, __n0, __d) \
- __asm__ ("! Inlined udiv_qrnnd\n" \
-" mov 32,%%g1\n" \
-" subcc %1,%2,%%g0\n" \
-"1: bcs 5f\n" \
-" addxcc %0,%0,%0 ! shift n1n0 and a q-bit in lsb\n" \
-" sub %1,%2,%1 ! this kills msb of n\n" \
-" addx %1,%1,%1 ! so this can't give carry\n" \
-" subcc %%g1,1,%%g1\n" \
-"2: bne 1b\n" \
-" subcc %1,%2,%%g0\n" \
-" bcs 3f\n" \
-" addxcc %0,%0,%0 ! shift n1n0 and a q-bit in lsb\n" \
-" b 3f\n" \
-" sub %1,%2,%1 ! this kills msb of n\n" \
-"4: sub %1,%2,%1\n" \
-"5: addxcc %1,%1,%1\n" \
-" bcc 2b\n" \
-" subcc %%g1,1,%%g1\n" \
-"! Got carry from n. Subtract next step to cancel this carry.\n" \
-" bne 4b\n" \
-" addcc %0,%0,%0 ! shift n1n0 and a 0-bit in lsb\n" \
-" sub %1,%2,%1\n" \
-"3: xnor %0,0,%0\n" \
-" ! End of inline udiv_qrnnd" \
- : "=&r" ((USItype) (__q)), \
- "=&r" ((USItype) (__r)) \
- : "r" ((USItype) (__d)), \
- "1" ((USItype) (__n1)), \
- "0" ((USItype) (__n0)) : "g1" __AND_CLOBBER_CC)
-#define UDIV_TIME (3+7*32) /* 7 instructions/iteration. 32 iterations. */
-#endif /* __sparclite__ */
-#endif /* __sparc_v8__ */
-#endif /* __sparc_v9__ */
-#endif /* sparc32 */
-
-#if ((defined (__sparc__) && defined (__arch64__)) || defined (__sparcv9)) \
- && W_TYPE_SIZE == 64
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- do { \
- UDItype __carry = 0; \
- __asm__ ("addcc\t%r5,%6,%1\n\t" \
- "add\t%r3,%4,%0\n\t" \
- "movcs\t%%xcc, 1, %2\n\t" \
- "add\t%0, %2, %0" \
- : "=r" ((UDItype)(sh)), \
- "=&r" ((UDItype)(sl)), \
- "+r" (__carry) \
- : "%rJ" ((UDItype)(ah)), \
- "rI" ((UDItype)(bh)), \
- "%rJ" ((UDItype)(al)), \
- "rI" ((UDItype)(bl)) \
- __CLOBBER_CC); \
- } while (0)
-
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- do { \
- UDItype __carry = 0; \
- __asm__ ("subcc\t%r5,%6,%1\n\t" \
- "sub\t%r3,%4,%0\n\t" \
- "movcs\t%%xcc, 1, %2\n\t" \
- "sub\t%0, %2, %0" \
- : "=r" ((UDItype)(sh)), \
- "=&r" ((UDItype)(sl)), \
- "+r" (__carry) \
- : "%rJ" ((UDItype)(ah)), \
- "rI" ((UDItype)(bh)), \
- "%rJ" ((UDItype)(al)), \
- "rI" ((UDItype)(bl)) \
- __CLOBBER_CC); \
- } while (0)
-
-#define umul_ppmm(wh, wl, u, v) \
- do { \
- UDItype tmp1, tmp2, tmp3, tmp4; \
- __asm__ __volatile__ ( \
- "srl %7,0,%3\n\t" \
- "mulx %3,%6,%1\n\t" \
- "srlx %6,32,%2\n\t" \
- "mulx %2,%3,%4\n\t" \
- "sllx %4,32,%5\n\t" \
- "srl %6,0,%3\n\t" \
- "sub %1,%5,%5\n\t" \
- "srlx %5,32,%5\n\t" \
- "addcc %4,%5,%4\n\t" \
- "srlx %7,32,%5\n\t" \
- "mulx %3,%5,%3\n\t" \
- "mulx %2,%5,%5\n\t" \
- "sethi %%hi(0x80000000),%2\n\t" \
- "addcc %4,%3,%4\n\t" \
- "srlx %4,32,%4\n\t" \
- "add %2,%2,%2\n\t" \
- "movcc %%xcc,%%g0,%2\n\t" \
- "addcc %5,%4,%5\n\t" \
- "sllx %3,32,%3\n\t" \
- "add %1,%3,%1\n\t" \
- "add %5,%2,%0" \
- : "=r" ((UDItype)(wh)), \
- "=&r" ((UDItype)(wl)), \
- "=&r" (tmp1), "=&r" (tmp2), "=&r" (tmp3), "=&r" (tmp4) \
- : "r" ((UDItype)(u)), \
- "r" ((UDItype)(v)) \
- __CLOBBER_CC); \
- } while (0)
-#define UMUL_TIME 96
-#define UDIV_TIME 230
-#endif /* sparc64 */
-
-#if defined (__vax__) && W_TYPE_SIZE == 32
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- __asm__ ("addl2 %5,%1\n\tadwc %3,%0" \
- : "=g" ((USItype) (sh)), \
- "=&g" ((USItype) (sl)) \
- : "%0" ((USItype) (ah)), \
- "g" ((USItype) (bh)), \
- "%1" ((USItype) (al)), \
- "g" ((USItype) (bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- __asm__ ("subl2 %5,%1\n\tsbwc %3,%0" \
- : "=g" ((USItype) (sh)), \
- "=&g" ((USItype) (sl)) \
- : "0" ((USItype) (ah)), \
- "g" ((USItype) (bh)), \
- "1" ((USItype) (al)), \
- "g" ((USItype) (bl)))
-#define umul_ppmm(xh, xl, m0, m1) \
- do { \
- union { \
- UDItype __ll; \
- struct {USItype __l, __h;} __i; \
- } __xx; \
- USItype __m0 = (m0), __m1 = (m1); \
- __asm__ ("emul %1,%2,$0,%0" \
- : "=r" (__xx.__ll) \
- : "g" (__m0), \
- "g" (__m1)); \
- (xh) = __xx.__i.__h; \
- (xl) = __xx.__i.__l; \
- (xh) += ((((SItype) __m0 >> 31) & __m1) \
- + (((SItype) __m1 >> 31) & __m0)); \
- } while (0)
-#define sdiv_qrnnd(q, r, n1, n0, d) \
- do { \
- union {DItype __ll; \
- struct {SItype __l, __h;} __i; \
- } __xx; \
- __xx.__i.__h = n1; __xx.__i.__l = n0; \
- __asm__ ("ediv %3,%2,%0,%1" \
- : "=g" (q), "=g" (r) \
- : "g" (__xx.__ll), "g" (d)); \
- } while (0)
-#endif /* __vax__ */
-
-#ifdef _TMS320C6X
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- do \
- { \
- UDItype __ll; \
- __asm__ ("addu .l1 %1, %2, %0" \
- : "=a" (__ll) : "a" (al), "a" (bl)); \
- (sl) = (USItype)__ll; \
- (sh) = ((USItype)(__ll >> 32)) + (ah) + (bh); \
- } \
- while (0)
-
-#ifdef _TMS320C6400_PLUS
-#define __umulsidi3(u,v) ((UDItype)(USItype)u*(USItype)v)
-#define umul_ppmm(w1, w0, u, v) \
- do { \
- UDItype __x = (UDItype) (USItype) (u) * (USItype) (v); \
- (w1) = (USItype) (__x >> 32); \
- (w0) = (USItype) (__x); \
- } while (0)
-#endif /* _TMS320C6400_PLUS */
-
-#define count_leading_zeros(count, x) ((count) = __builtin_clz (x))
-#ifdef _TMS320C6400
-#define count_trailing_zeros(count, x) ((count) = __builtin_ctz (x))
-#endif
-#define UMUL_TIME 4
-#define UDIV_TIME 40
-#endif /* _TMS320C6X */
-
-#if defined (__xtensa__) && W_TYPE_SIZE == 32
-/* This code is not Xtensa-configuration-specific, so rely on the compiler
- to expand builtin functions depending on what configuration features
- are available. This avoids library calls when the operation can be
- performed in-line. */
-#define umul_ppmm(w1, w0, u, v) \
- do { \
- DWunion __w; \
- __w.ll = __builtin_umulsidi3 (u, v); \
- w1 = __w.s.high; \
- w0 = __w.s.low; \
- } while (0)
-#define __umulsidi3(u, v) __builtin_umulsidi3 (u, v)
-#define count_leading_zeros(COUNT, X) ((COUNT) = __builtin_clz (X))
-#define count_trailing_zeros(COUNT, X) ((COUNT) = __builtin_ctz (X))
-#endif /* __xtensa__ */
-
-#if defined xstormy16
-extern UHItype __stormy16_count_leading_zeros (UHItype);
-#define count_leading_zeros(count, x) \
- do \
- { \
- UHItype size; \
- \
- /* We assume that W_TYPE_SIZE is a multiple of 16... */ \
- for ((count) = 0, size = W_TYPE_SIZE; size; size -= 16) \
- { \
- UHItype c; \
- \
- c = __clzhi2 ((x) >> (size - 16)); \
- (count) += c; \
- if (c != 16) \
- break; \
- } \
- } \
- while (0)
-#define COUNT_LEADING_ZEROS_0 W_TYPE_SIZE
-#endif
-
-#if defined (__z8000__) && W_TYPE_SIZE == 16
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- __asm__ ("add %H1,%H5\n\tadc %H0,%H3" \
- : "=r" ((unsigned int)(sh)), \
- "=&r" ((unsigned int)(sl)) \
- : "%0" ((unsigned int)(ah)), \
- "r" ((unsigned int)(bh)), \
- "%1" ((unsigned int)(al)), \
- "rQR" ((unsigned int)(bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- __asm__ ("sub %H1,%H5\n\tsbc %H0,%H3" \
- : "=r" ((unsigned int)(sh)), \
- "=&r" ((unsigned int)(sl)) \
- : "0" ((unsigned int)(ah)), \
- "r" ((unsigned int)(bh)), \
- "1" ((unsigned int)(al)), \
- "rQR" ((unsigned int)(bl)))
-#define umul_ppmm(xh, xl, m0, m1) \
- do { \
- union {long int __ll; \
- struct {unsigned int __h, __l;} __i; \
- } __xx; \
- unsigned int __m0 = (m0), __m1 = (m1); \
- __asm__ ("mult %S0,%H3" \
- : "=r" (__xx.__i.__h), \
- "=r" (__xx.__i.__l) \
- : "%1" (__m0), \
- "rQR" (__m1)); \
- (xh) = __xx.__i.__h; (xl) = __xx.__i.__l; \
- (xh) += ((((signed int) __m0 >> 15) & __m1) \
- + (((signed int) __m1 >> 15) & __m0)); \
- } while (0)
-#endif /* __z8000__ */
-
-#endif /* __GNUC__ */
-
-/* If this machine has no inline assembler, use C macros. */
-
-#if !defined (add_ssaaaa)
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- do { \
- UWtype __x; \
- __x = (al) + (bl); \
- (sh) = (ah) + (bh) + (__x < (al)); \
- (sl) = __x; \
- } while (0)
-#endif
-
-#if !defined (sub_ddmmss)
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- do { \
- UWtype __x; \
- __x = (al) - (bl); \
- (sh) = (ah) - (bh) - (__x > (al)); \
- (sl) = __x; \
- } while (0)
-#endif
-
-/* If we lack umul_ppmm but have smul_ppmm, define umul_ppmm in terms of
- smul_ppmm. */
-#if !defined (umul_ppmm) && defined (smul_ppmm)
-#define umul_ppmm(w1, w0, u, v) \
- do { \
- UWtype __w1; \
- UWtype __xm0 = (u), __xm1 = (v); \
- smul_ppmm (__w1, w0, __xm0, __xm1); \
- (w1) = __w1 + (-(__xm0 >> (W_TYPE_SIZE - 1)) & __xm1) \
- + (-(__xm1 >> (W_TYPE_SIZE - 1)) & __xm0); \
- } while (0)
-#endif
-
-/* If we still don't have umul_ppmm, define it using plain C. */
-#if !defined (umul_ppmm)
-#define umul_ppmm(w1, w0, u, v) \
- do { \
- UWtype __x0, __x1, __x2, __x3; \
- UHWtype __ul, __vl, __uh, __vh; \
- \
- __ul = __ll_lowpart (u); \
- __uh = __ll_highpart (u); \
- __vl = __ll_lowpart (v); \
- __vh = __ll_highpart (v); \
- \
- __x0 = (UWtype) __ul * __vl; \
- __x1 = (UWtype) __ul * __vh; \
- __x2 = (UWtype) __uh * __vl; \
- __x3 = (UWtype) __uh * __vh; \
- \
- __x1 += __ll_highpart (__x0);/* this can't give carry */ \
- __x1 += __x2; /* but this indeed can */ \
- if (__x1 < __x2) /* did we get it? */ \
- __x3 += __ll_B; /* yes, add it in the proper pos. */ \
- \
- (w1) = __x3 + __ll_highpart (__x1); \
- (w0) = __ll_lowpart (__x1) * __ll_B + __ll_lowpart (__x0); \
- } while (0)
-#endif
-
-#if !defined (__umulsidi3)
-#define __umulsidi3(u, v) \
- ({DWunion __w; \
- umul_ppmm (__w.s.high, __w.s.low, u, v); \
- __w.ll; })
-#endif
-
-/* Define this unconditionally, so it can be used for debugging. */
-#define __udiv_qrnnd_c(q, r, n1, n0, d) \
- do { \
- UWtype __d1, __d0, __q1, __q0; \
- UWtype __r1, __r0, __m; \
- __d1 = __ll_highpart (d); \
- __d0 = __ll_lowpart (d); \
- \
- __r1 = (n1) % __d1; \
- __q1 = (n1) / __d1; \
- __m = (UWtype) __q1 * __d0; \
- __r1 = __r1 * __ll_B | __ll_highpart (n0); \
- if (__r1 < __m) \
- { \
- __q1--, __r1 += (d); \
- if (__r1 >= (d)) /* i.e. we didn't get carry when adding to __r1 */\
- if (__r1 < __m) \
- __q1--, __r1 += (d); \
- } \
- __r1 -= __m; \
- \
- __r0 = __r1 % __d1; \
- __q0 = __r1 / __d1; \
- __m = (UWtype) __q0 * __d0; \
- __r0 = __r0 * __ll_B | __ll_lowpart (n0); \
- if (__r0 < __m) \
- { \
- __q0--, __r0 += (d); \
- if (__r0 >= (d)) \
- if (__r0 < __m) \
- __q0--, __r0 += (d); \
- } \
- __r0 -= __m; \
- \
- (q) = (UWtype) __q1 * __ll_B | __q0; \
- (r) = __r0; \
- } while (0)
-
-/* If the processor has no udiv_qrnnd but sdiv_qrnnd, go through
- __udiv_w_sdiv (defined in libgcc or elsewhere). */
-#if !defined (udiv_qrnnd) && defined (sdiv_qrnnd)
-#define udiv_qrnnd(q, r, nh, nl, d) \
- do { \
- extern UWtype __udiv_w_sdiv (UWtype *, UWtype, UWtype, UWtype); \
- UWtype __r; \
- (q) = __udiv_w_sdiv (&__r, nh, nl, d); \
- (r) = __r; \
- } while (0)
-#endif
-
-/* If udiv_qrnnd was not defined for this processor, use __udiv_qrnnd_c. */
-#if !defined (udiv_qrnnd)
-#define UDIV_NEEDS_NORMALIZATION 1
-#define udiv_qrnnd __udiv_qrnnd_c
-#endif
-
-#if !defined (count_leading_zeros)
-#define count_leading_zeros(count, x) \
- do { \
- UWtype __xr = (x); \
- UWtype __a; \
- \
- if (W_TYPE_SIZE <= 32) \
- { \
- __a = __xr < ((UWtype)1<<2*__BITS4) \
- ? (__xr < ((UWtype)1<<__BITS4) ? 0 : __BITS4) \
- : (__xr < ((UWtype)1<<3*__BITS4) ? 2*__BITS4 : 3*__BITS4); \
- } \
- else \
- { \
- for (__a = W_TYPE_SIZE - 8; __a > 0; __a -= 8) \
- if (((__xr >> __a) & 0xff) != 0) \
- break; \
- } \
- \
- (count) = W_TYPE_SIZE - (__clz_tab[__xr >> __a] + __a); \
- } while (0)
-#define COUNT_LEADING_ZEROS_0 W_TYPE_SIZE
-#endif
-
-#if !defined (count_trailing_zeros)
-/* Define count_trailing_zeros using count_leading_zeros. The latter might be
- defined in asm, but if it is not, the C version above is good enough. */
-#define count_trailing_zeros(count, x) \
- do { \
- UWtype __ctz_x = (x); \
- UWtype __ctz_c; \
- count_leading_zeros (__ctz_c, __ctz_x & -__ctz_x); \
- (count) = W_TYPE_SIZE - 1 - __ctz_c; \
- } while (0)
-#endif
-
-#ifndef UDIV_NEEDS_NORMALIZATION
-#define UDIV_NEEDS_NORMALIZATION 0
-#endif
diff --git a/include/lto-symtab.h b/include/lto-symtab.h
deleted file mode 100644
index 9312c5d9d..000000000
--- a/include/lto-symtab.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Data types used in the IL symbol table.
- Copyright (C) 2009 Free Software Foundation, Inc.
- Contributed by Rafael Espindola <espindola@google.com>
-
-This file is part of GCC.
-
-GCC 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 3, or (at your option) any later
-version.
-
-GCC 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 GCC; see the file COPYING3. If not see
-<http://www.gnu.org/licenses/>. */
-
-#ifndef GCC_LTO_SYMTAB_H
-#define GCC_LTO_SYMTAB_H
-
-enum gcc_plugin_symbol_kind
- {
- GCCPK_DEF,
- GCCPK_WEAKDEF,
- GCCPK_UNDEF,
- GCCPK_WEAKUNDEF,
- GCCPK_COMMON
- };
-
-enum gcc_plugin_symbol_visibility
- {
- GCCPV_DEFAULT,
- GCCPV_PROTECTED,
- GCCPV_INTERNAL,
- GCCPV_HIDDEN
- };
-
-#endif /* GCC_LTO_SYMTAB_H */
diff --git a/include/mach-o/ChangeLog b/include/mach-o/ChangeLog
deleted file mode 100644
index a36c54613..000000000
--- a/include/mach-o/ChangeLog
+++ /dev/null
@@ -1,81 +0,0 @@
-2012-11-14 Tristan Gingold <gingold@adacore.com>
-
- * external.h (mach_o_entry_point_command_external)
- (mach_o_source_version_command_external)
- (mach_o_data_in_code_entry_external): New structures.
-
- * loader.h (bfd_mach_o_load_command_type): Add
- BFD_MACH_O_LC_MAIN, BFD_MACH_O_LC_DATA_IN_CODE,
- BFD_MACH_O_LC_SOURCE_VERSION and BFD_MACH_O_LC_DYLIB_CODE_SIGN_DRS.
- (BFD_MACH_O_REFERENCE_MASK): Adjust value.
- (BFD_MACH_O_N_REF_TO_WEAK): New definition.
- (BFD_MACH_O_N_ARM_THUMB_DEF, BFD_MACH_O_N_SYMBOL_RESOLVER): Likewise.
- (bfd_mach_o_data_in_code_entry_kind): New enum.
-
-2012-11-14 Tristan Gingold <gingold@adacore.com>
-
- * arm.h: New file.
-
-2012-02-23 Iain Sandoe <idsandoe@googlemail.com>
-
- * external.h: Add comments about relocations fields. Add macros
- for non-scattered relocations. Move scattered relocation macros to
- here.
- * reloc.h: Remove macros related to external representation of reloc
- fields.
-
-2012-01-12 Iain Sandoe <idsandoe@googlemail.com>
-
- * loader.h (BFD_MACH_O_INDIRECT_SYM_LOCAL): New.
- (BFD_MACH_O_INDIRECT_SYM_ABS): New
-
-2012-01-04 Tristan Gingold <gingold@adacore.com>
-
- * external.h (mach_o_fvmlib_command_external): New structure.
-
-2012-01-04 Tristan Gingold <gingold@adacore.com>
-
- * loader.h: Update copyright year.
- (bfd_mach_o_cpu_subtype): Add ARM subtypes.
-
-2012-01-04 Tristan Gingold <gingold@adacore.com>
-
- * external.h: Update copyright year.
- (mach_o_symtab_command_external): Add comments.
- (mach_o_encryption_info_command_external): New structure.
-
-2011-12-16 Tristan Gingold <gingold@adacore.com>
-
- * codesign.h: New file.
-
-2011-08-08 Tristan Gingold <gingold@adacore.com>
-
- * loader.h (bfd_mach_o_load_command_type): Add
- BFD_MACH_O_LC_LOAD_UPWARD_DYLIB, BFD_MACH_O_LC_VERSION_MIN_MACOSX,
- BFD_MACH_O_LC_VERSION_MIN_IPHONEOS, BFD_MACH_O_LC_FUNCTION_STARTS,
- and BFD_MACH_O_LC_DYLD_ENVIRONMENT.
- * external.h (mach_o_version_min_command_external): New structure.
-
-2011-08-08 Tristan Gingold <gingold@adacore.com>
-
- * loader.h: Reorder declarations.
- * x86-64.h: New file.
- * external.h: New file.
- * reloc.h: New file.
-
-2011-07-06 Tristan Gingold <gingold@adacore.com>
-
- * loader.h: New file.
-
-Copyright (C) 2011-2012 Free Software Foundation, Inc.
-
-Copying and distribution of this file, with or without modification,
-are permitted in any medium without royalty provided the copyright
-notice and this notice are preserved.
-
-Local Variables:
-mode: change-log
-left-margin: 8
-fill-column: 74
-version-control: never
-End:
diff --git a/include/mach-o/arm.h b/include/mach-o/arm.h
deleted file mode 100644
index f37ff77e2..000000000
--- a/include/mach-o/arm.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/* Mach-O arm declarations for BFD.
- Copyright 2012
- Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef _MACH_O_ARM_H
-#define _MACH_O_ARM_H
-
-/* ARM relocations. */
-#define BFD_MACH_O_ARM_RELOC_VANILLA 0 /* Generic relocation. */
-#define BFD_MACH_O_ARM_RELOC_PAIR 1 /* Second entry in a pair. */
-#define BFD_MACH_O_ARM_RELOC_SECTDIFF 2 /* Substract with a PAIR. */
-#define BFD_MACH_O_ARM_RELOC_LOCAL_SECTDIFF 3 /* Like above, but local ref. */
-#define BFD_MACH_O_ARM_RELOC_PB_LA_PTR 4 /* Prebound lazy pointer. */
-#define BFD_MACH_O_ARM_RELOC_BR24 5 /* 24bit branch. */
-#define BFD_MACH_O_THUMB_RELOC_BR22 6 /* 22bit branch. */
-#define BFD_MACH_O_THUMB_32BIT_BRANCH 7 /* Obselete. */
-#define BFD_MACH_O_ARM_RELOC_HALF 8
-#define BFD_MACH_O_ARM_RELOC_HALF_SECTDIFF 9
-
-#endif /* _MACH_O_ARM_H */
diff --git a/include/mach-o/codesign.h b/include/mach-o/codesign.h
deleted file mode 100644
index ee2f792ac..000000000
--- a/include/mach-o/codesign.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/* Mach-O support for BFD.
- Copyright 2011
- Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef _MACH_O_CODESIGN_H
-#define _MACH_O_CODESIGN_H
-
-/* Codesign blob magics. */
-
-/* Superblob containing all the components. */
-#define BFD_MACH_O_CS_MAGIC_EMBEDDED_SIGNATURE 0xfade0cc0
-
-/* Individual code requirement. */
-#define BFD_MACH_O_CS_MAGIC_REQUIREMENT 0xfade0c00
-
-/* Collection of code requirements, indexed by type. */
-#define BFD_MACH_O_CS_MAGIC_REQUIREMENTS 0xfade0c01
-
-/* Directory. */
-#define BFD_MACH_O_CS_MAGIC_CODEDIRECTORY 0xfade0c02
-
-/* Entitlements blob. */
-#define BFD_MACH_O_CS_MAGIC_EMBEDDED_ENTITLEMENTS 0xfade7171
-
-/* Blob container. */
-#define BFD_MACH_O_CS_MAGIC_BLOB_WRAPPER 0xfade0b01
-
-struct mach_o_codesign_codedirectory_external_v1
-{
- /* All the fields are in network byte order (big endian). */
- unsigned char version[4];
- unsigned char flags[4];
- unsigned char hash_offset[4];
- unsigned char ident_offset[4];
- unsigned char nbr_special_slots[4];
- unsigned char nbr_code_slots[4];
- unsigned char code_limit[4];
- unsigned char hash_size[1];
- unsigned char hash_type[1];
- unsigned char spare1[1];
- unsigned char page_size[1];
- unsigned char spare2[4];
-};
-
-struct mach_o_codesign_codedirectory_v1
-{
- unsigned int version;
- unsigned int flags;
- unsigned int hash_offset;
- unsigned int ident_offset;
- unsigned int nbr_special_slots;
- unsigned int nbr_code_slots;
- unsigned int code_limit;
- unsigned char hash_size;
- unsigned char hash_type;
- unsigned char spare1;
- unsigned char page_size;
- unsigned int spare2;
-};
-
-/* Value for hash_type. */
-#define BFD_MACH_O_CS_NO_HASH 0
-#define BFD_MACH_O_CS_HASH_SHA1 1
-#define BFD_MACH_O_CS_HASH_SHA256 2
-#define BFD_MACH_O_CS_HASH_PRESTANDARD_SKEIN_160x256 32 /* Skein, 160 bits */
-#define BFD_MACH_O_CS_HASH_PRESTANDARD_SKEIN_256x512 33 /* Skein, 256 bits */
-
-#endif /* _MACH_O_CODESIGN_H */
diff --git a/include/mach-o/external.h b/include/mach-o/external.h
deleted file mode 100644
index 4b0a83e80..000000000
--- a/include/mach-o/external.h
+++ /dev/null
@@ -1,348 +0,0 @@
-/* Mach-O support for BFD.
- Copyright 2011, 2012
- Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef _MACH_O_EXTERNAL_H
-#define _MACH_O_EXTERNAL_H
-
-struct mach_o_header_external
-{
- unsigned char magic[4]; /* Magic number. */
- unsigned char cputype[4]; /* CPU that this object is for. */
- unsigned char cpusubtype[4]; /* CPU subtype. */
- unsigned char filetype[4]; /* Type of file. */
- unsigned char ncmds[4]; /* Number of load commands. */
- unsigned char sizeofcmds[4]; /* Total size of load commands. */
- unsigned char flags[4]; /* Flags. */
- unsigned char reserved[4]; /* Reserved (on 64-bit version only). */
-};
-
-#define BFD_MACH_O_HEADER_SIZE 28
-#define BFD_MACH_O_HEADER_64_SIZE 32
-
-/* 32-bit section header. */
-
-struct mach_o_section_32_external
-{
- unsigned char sectname[16]; /* Section name. */
- unsigned char segname[16]; /* Segment that the section belongs to. */
- unsigned char addr[4]; /* Address of this section in memory. */
- unsigned char size[4]; /* Size in bytes of this section. */
- unsigned char offset[4]; /* File offset of this section. */
- unsigned char align[4]; /* log2 of this section's alignment. */
- unsigned char reloff[4]; /* File offset of this section's relocs. */
- unsigned char nreloc[4]; /* Number of relocs for this section. */
- unsigned char flags[4]; /* Section flags/attributes. */
- unsigned char reserved1[4];
- unsigned char reserved2[4];
-};
-#define BFD_MACH_O_SECTION_SIZE 68
-
-/* 64-bit section header. */
-
-struct mach_o_section_64_external
-{
- unsigned char sectname[16]; /* Section name. */
- unsigned char segname[16]; /* Segment that the section belongs to. */
- unsigned char addr[8]; /* Address of this section in memory. */
- unsigned char size[8]; /* Size in bytes of this section. */
- unsigned char offset[4]; /* File offset of this section. */
- unsigned char align[4]; /* log2 of this section's alignment. */
- unsigned char reloff[4]; /* File offset of this section's relocs. */
- unsigned char nreloc[4]; /* Number of relocs for this section. */
- unsigned char flags[4]; /* Section flags/attributes. */
- unsigned char reserved1[4];
- unsigned char reserved2[4];
- unsigned char reserved3[4];
-};
-#define BFD_MACH_O_SECTION_64_SIZE 80
-
-struct mach_o_load_command_external
-{
- unsigned char cmd[4]; /* The type of load command. */
- unsigned char cmdsize[4]; /* Size in bytes of entire command. */
-};
-#define BFD_MACH_O_LC_SIZE 8
-
-struct mach_o_segment_command_32_external
-{
- unsigned char segname[16]; /* Name of this segment. */
- unsigned char vmaddr[4]; /* Virtual memory address of this segment. */
- unsigned char vmsize[4]; /* Size there, in bytes. */
- unsigned char fileoff[4]; /* Offset in bytes of the data to be mapped. */
- unsigned char filesize[4]; /* Size in bytes on disk. */
- unsigned char maxprot[4]; /* Maximum permitted vm protection. */
- unsigned char initprot[4]; /* Initial vm protection. */
- unsigned char nsects[4]; /* Number of sections in this segment. */
- unsigned char flags[4]; /* Flags that affect the loading. */
-};
-#define BFD_MACH_O_LC_SEGMENT_SIZE 56 /* Include the header. */
-
-struct mach_o_segment_command_64_external
-{
- unsigned char segname[16]; /* Name of this segment. */
- unsigned char vmaddr[8]; /* Virtual memory address of this segment. */
- unsigned char vmsize[8]; /* Size there, in bytes. */
- unsigned char fileoff[8]; /* Offset in bytes of the data to be mapped. */
- unsigned char filesize[8]; /* Size in bytes on disk. */
- unsigned char maxprot[4]; /* Maximum permitted vm protection. */
- unsigned char initprot[4]; /* Initial vm protection. */
- unsigned char nsects[4]; /* Number of sections in this segment. */
- unsigned char flags[4]; /* Flags that affect the loading. */
-};
-#define BFD_MACH_O_LC_SEGMENT_64_SIZE 72 /* Include the header. */
-
-struct mach_o_reloc_info_external
-{
- unsigned char r_address[4];
- unsigned char r_symbolnum[4];
-};
-#define BFD_MACH_O_RELENT_SIZE 8
-
-/* Relocations are based on 'address' being a section offset and an assumption
- that sections are never more than 2^24-1 bytes in size. Relocation data
- also carry information on type/size/PC-relative/extern and whether scattered
- or not [stored in the MSB of the r_address]. */
-
-#define BFD_MACH_O_SR_SCATTERED 0x80000000
-
-/* For a non-scattered reloc, the relocation info is found in r_symbolnum.
- Bytes 1 to 3 contain the symbol number (0xffffff, in a non-scattered PAIR).
- Byte 4 contains the relocation info - but with differing bit-positions
- dependent on target endian-ness - as below. */
-
-#define BFD_MACH_O_LE_PCREL 0x01
-#define BFD_MACH_O_LE_LENGTH_SHIFT 1
-#define BFD_MACH_O_LE_EXTERN 0x08
-#define BFD_MACH_O_LE_TYPE_SHIFT 4
-
-#define BFD_MACH_O_BE_PCREL 0x80
-#define BFD_MACH_O_BE_LENGTH_SHIFT 5
-#define BFD_MACH_O_BE_EXTERN 0x10
-#define BFD_MACH_O_BE_TYPE_SHIFT 0
-
-/* The field sizes are the same for both BE and LE. */
-#define BFD_MACH_O_LENGTH_MASK 0x03
-#define BFD_MACH_O_TYPE_MASK 0x0f
-
-/* For a scattered reloc entry the info is contained in r_address. There
- is no need to discriminate on target endian-ness, since the design was
- arranged to produce the same layout on both. Scattered relocations are
- only used for local items, therefore there is no 'extern' field. */
-
-#define BFD_MACH_O_SR_PCREL 0x40000000
-#define BFD_MACH_O_GET_SR_LENGTH(s) (((s) >> 28) & 0x3)
-#define BFD_MACH_O_GET_SR_TYPE(s) (((s) >> 24) & 0x0f)
-#define BFD_MACH_O_GET_SR_ADDRESS(s) ((s) & 0x00ffffff)
-#define BFD_MACH_O_SET_SR_LENGTH(l) (((l) & 0x3) << 28)
-#define BFD_MACH_O_SET_SR_TYPE(t) (((t) & 0xf) << 24)
-#define BFD_MACH_O_SET_SR_ADDRESS(s) ((s) & 0x00ffffff)
-
-struct mach_o_symtab_command_external
-{
- unsigned char symoff[4]; /* File offset of the symbol table. */
- unsigned char nsyms[4]; /* Number of symbols. */
- unsigned char stroff[4]; /* File offset of the string table. */
- unsigned char strsize[4]; /* String table size. */
-};
-
-struct mach_o_nlist_external
-{
- unsigned char n_strx[4];
- unsigned char n_type[1];
- unsigned char n_sect[1];
- unsigned char n_desc[2];
- unsigned char n_value[4];
-};
-#define BFD_MACH_O_NLIST_SIZE 12
-
-struct mach_o_nlist_64_external
-{
- unsigned char n_strx[4];
- unsigned char n_type[1];
- unsigned char n_sect[1];
- unsigned char n_desc[2];
- unsigned char n_value[8];
-};
-#define BFD_MACH_O_NLIST_64_SIZE 16
-
-struct mach_o_thread_command_external
-{
- unsigned char flavour[4];
- unsigned char count[4];
-};
-
-/* For commands that just have a string or a path. */
-struct mach_o_str_command_external
-{
- unsigned char str[4];
-};
-
-struct mach_o_dylib_command_external
-{
- unsigned char name[4];
- unsigned char timestamp[4];
- unsigned char current_version[4];
- unsigned char compatibility_version[4];
-};
-
-struct mach_o_dysymtab_command_external
-{
- unsigned char ilocalsym[4]; /* Index of. */
- unsigned char nlocalsym[4]; /* Number of. */
- unsigned char iextdefsym[4];
- unsigned char nextdefsym[4];
- unsigned char iundefsym[4];
- unsigned char nundefsym[4];
- unsigned char tocoff[4];
- unsigned char ntoc[4];
- unsigned char modtaboff[4];
- unsigned char nmodtab[4];
- unsigned char extrefsymoff[4];
- unsigned char nextrefsyms[4];
- unsigned char indirectsymoff[4];
- unsigned char nindirectsyms[4];
- unsigned char extreloff[4];
- unsigned char nextrel[4];
- unsigned char locreloff[4];
- unsigned char nlocrel[4];
-};
-
-struct mach_o_dylib_module_external
-{
- unsigned char module_name[4];
- unsigned char iextdefsym[4];
- unsigned char nextdefsym[4];
- unsigned char irefsym[4];
- unsigned char nrefsym[4];
- unsigned char ilocalsym[4];
- unsigned char nlocalsym[4];
- unsigned char iextrel[4];
- unsigned char nextrel[4];
- unsigned char iinit_iterm[4];
- unsigned char ninit_nterm[4];
- unsigned char objc_module_info_addr[4];
- unsigned char objc_module_info_size[4];
-};
-#define BFD_MACH_O_DYLIB_MODULE_SIZE 52
-
-struct mach_o_dylib_module_64_external
-{
- unsigned char module_name[4];
- unsigned char iextdefsym[4];
- unsigned char nextdefsym[4];
- unsigned char irefsym[4];
- unsigned char nrefsym[4];
- unsigned char ilocalsym[4];
- unsigned char nlocalsym[4];
- unsigned char iextrel[4];
- unsigned char nextrel[4];
- unsigned char iinit_iterm[4];
- unsigned char ninit_nterm[4];
- unsigned char objc_module_info_size[4];
- unsigned char objc_module_info_addr[8];
-};
-#define BFD_MACH_O_DYLIB_MODULE_64_SIZE 56
-
-struct mach_o_dylib_table_of_contents_external
-{
- unsigned char symbol_index[4];
- unsigned char module_index[4];
-};
-#define BFD_MACH_O_TABLE_OF_CONTENT_SIZE 8
-
-struct mach_o_linkedit_data_command_external
-{
- unsigned char dataoff[4];
- unsigned char datasize[4];
-};
-
-struct mach_o_dyld_info_command_external
-{
- unsigned char rebase_off[4];
- unsigned char rebase_size[4];
- unsigned char bind_off[4];
- unsigned char bind_size[4];
- unsigned char weak_bind_off[4];
- unsigned char weak_bind_size[4];
- unsigned char lazy_bind_off[4];
- unsigned char lazy_bind_size[4];
- unsigned char export_off[4];
- unsigned char export_size[4];
-};
-
-struct mach_o_version_min_command_external
-{
- unsigned char version[4];
- unsigned char reserved[4];
-};
-
-struct mach_o_encryption_info_command_external
-{
- unsigned char cryptoff[4]; /* File offset of the encrypted area. */
- unsigned char cryptsize[4]; /* Size of the encrypted area. */
- unsigned char cryptid[4]; /* Encryption method. */
-};
-
-struct mach_o_fvmlib_command_external
-{
- unsigned char name[4]; /* Offset of the name. */
- unsigned char minor_version[4];
- unsigned char header_addr[4];
-};
-
-struct mach_o_entry_point_command_external
-{
- unsigned char entryoff[8]; /* File offset of the entry point. */
- unsigned char stacksize[8]; /* Initial stack size, if no null. */
-};
-
-struct mach_o_source_version_command_external
-{
- unsigned char version[8]; /* Version A.B.C.D.E, with 10 bits for B-E,
- and 24 bits for A. */
-};
-
-/* The LD_DATA_IN_CODE command use a linkedit_data_command that points to
- a table of entries. */
-
-struct mach_o_data_in_code_entry_external
-{
- unsigned char offset[4]; /* Offset from the mach_header. */
- unsigned char length[2]; /* Number of bytes. */
- unsigned char kind[2]; /* Kind. See BFD_MACH_O_DICE_ values. */
-};
-
-struct mach_o_fat_header_external
-{
- unsigned char magic[4];
- unsigned char nfat_arch[4]; /* Number of components. */
-};
-
-struct mach_o_fat_arch_external
-{
- unsigned char cputype[4];
- unsigned char cpusubtype[4];
- unsigned char offset[4]; /* File offset of the member. */
- unsigned char size[4]; /* Size of the member. */
- unsigned char align[4]; /* Power of 2. */
-};
-
-#endif /* _MACH_O_EXTERNAL_H */
diff --git a/include/mach-o/loader.h b/include/mach-o/loader.h
deleted file mode 100644
index 952bc8f4f..000000000
--- a/include/mach-o/loader.h
+++ /dev/null
@@ -1,378 +0,0 @@
-/* Mach-O support for BFD.
- Copyright 2011, 2012
- Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef _MACH_O_LOADER_H
-#define _MACH_O_LOADER_H
-
-/* Constants for header. */
-
-typedef enum bfd_mach_o_mach_header_magic
-{
- BFD_MACH_O_MH_MAGIC = 0xfeedface,
- BFD_MACH_O_MH_CIGAM = 0xcefaedfe,
- BFD_MACH_O_MH_MAGIC_64 = 0xfeedfacf,
- BFD_MACH_O_MH_CIGAM_64 = 0xcffaedfe
-}
-bfd_mach_o_mach_header_magic;
-
-#define BFD_MACH_O_CPU_IS64BIT 0x1000000
-
-typedef enum bfd_mach_o_cpu_type
-{
- BFD_MACH_O_CPU_TYPE_VAX = 1,
- BFD_MACH_O_CPU_TYPE_MC680x0 = 6,
- BFD_MACH_O_CPU_TYPE_I386 = 7,
- BFD_MACH_O_CPU_TYPE_MIPS = 8,
- BFD_MACH_O_CPU_TYPE_MC98000 = 10,
- BFD_MACH_O_CPU_TYPE_HPPA = 11,
- BFD_MACH_O_CPU_TYPE_ARM = 12,
- BFD_MACH_O_CPU_TYPE_MC88000 = 13,
- BFD_MACH_O_CPU_TYPE_SPARC = 14,
- BFD_MACH_O_CPU_TYPE_I860 = 15,
- BFD_MACH_O_CPU_TYPE_ALPHA = 16,
- BFD_MACH_O_CPU_TYPE_POWERPC = 18,
- BFD_MACH_O_CPU_TYPE_POWERPC_64 = (BFD_MACH_O_CPU_TYPE_POWERPC | BFD_MACH_O_CPU_IS64BIT),
- BFD_MACH_O_CPU_TYPE_X86_64 = (BFD_MACH_O_CPU_TYPE_I386 | BFD_MACH_O_CPU_IS64BIT)
-}
-bfd_mach_o_cpu_type;
-
-typedef enum bfd_mach_o_cpu_subtype
-{
- /* i386. */
- BFD_MACH_O_CPU_SUBTYPE_X86_ALL = 3,
-
- /* arm. */
- BFD_MACH_O_CPU_SUBTYPE_ARM_ALL = 0,
- BFD_MACH_O_CPU_SUBTYPE_ARM_V4T = 5,
- BFD_MACH_O_CPU_SUBTYPE_ARM_V6 = 6,
- BFD_MACH_O_CPU_SUBTYPE_ARM_V5TEJ = 7,
- BFD_MACH_O_CPU_SUBTYPE_ARM_XSCALE = 8,
- BFD_MACH_O_CPU_SUBTYPE_ARM_V7 = 9
-}
-bfd_mach_o_cpu_subtype;
-
-typedef enum bfd_mach_o_filetype
-{
- BFD_MACH_O_MH_OBJECT = 0x01,
- BFD_MACH_O_MH_EXECUTE = 0x02,
- BFD_MACH_O_MH_FVMLIB = 0x03,
- BFD_MACH_O_MH_CORE = 0x04,
- BFD_MACH_O_MH_PRELOAD = 0x05,
- BFD_MACH_O_MH_DYLIB = 0x06,
- BFD_MACH_O_MH_DYLINKER = 0x07,
- BFD_MACH_O_MH_BUNDLE = 0x08,
- BFD_MACH_O_MH_DYLIB_STUB = 0x09,
- BFD_MACH_O_MH_DSYM = 0x0a,
- BFD_MACH_O_MH_KEXT_BUNDLE = 0x0b
-}
-bfd_mach_o_filetype;
-
-typedef enum bfd_mach_o_header_flags
-{
- BFD_MACH_O_MH_NOUNDEFS = 0x0000001,
- BFD_MACH_O_MH_INCRLINK = 0x0000002,
- BFD_MACH_O_MH_DYLDLINK = 0x0000004,
- BFD_MACH_O_MH_BINDATLOAD = 0x0000008,
- BFD_MACH_O_MH_PREBOUND = 0x0000010,
- BFD_MACH_O_MH_SPLIT_SEGS = 0x0000020,
- BFD_MACH_O_MH_LAZY_INIT = 0x0000040,
- BFD_MACH_O_MH_TWOLEVEL = 0x0000080,
- BFD_MACH_O_MH_FORCE_FLAT = 0x0000100,
- BFD_MACH_O_MH_NOMULTIDEFS = 0x0000200,
- BFD_MACH_O_MH_NOFIXPREBINDING = 0x0000400,
- BFD_MACH_O_MH_PREBINDABLE = 0x0000800,
- BFD_MACH_O_MH_ALLMODSBOUND = 0x0001000,
- BFD_MACH_O_MH_SUBSECTIONS_VIA_SYMBOLS = 0x0002000,
- BFD_MACH_O_MH_CANONICAL = 0x0004000,
- BFD_MACH_O_MH_WEAK_DEFINES = 0x0008000,
- BFD_MACH_O_MH_BINDS_TO_WEAK = 0x0010000,
- BFD_MACH_O_MH_ALLOW_STACK_EXECUTION = 0x0020000,
- BFD_MACH_O_MH_ROOT_SAFE = 0x0040000,
- BFD_MACH_O_MH_SETUID_SAFE = 0x0080000,
- BFD_MACH_O_MH_NO_REEXPORTED_DYLIBS = 0x0100000,
- BFD_MACH_O_MH_PIE = 0x0200000,
- BFD_MACH_O_MH_DEAD_STRIPPABLE_DYLIB = 0x0400000,
- BFD_MACH_O_MH_HAS_TLV_DESCRIPTORS = 0x0800000,
- BFD_MACH_O_MH_NO_HEAP_EXECUTION = 0x1000000
-}
-bfd_mach_o_header_flags;
-
-/* Load command constants. */
-#define BFD_MACH_O_LC_REQ_DYLD 0x80000000
-
-typedef enum bfd_mach_o_load_command_type
-{
- BFD_MACH_O_LC_SEGMENT = 0x1, /* File segment to be mapped. */
- BFD_MACH_O_LC_SYMTAB = 0x2, /* Link-edit stab symbol table info (obsolete). */
- BFD_MACH_O_LC_SYMSEG = 0x3, /* Link-edit gdb symbol table info. */
- BFD_MACH_O_LC_THREAD = 0x4, /* Thread. */
- BFD_MACH_O_LC_UNIXTHREAD = 0x5, /* UNIX thread (includes a stack). */
- BFD_MACH_O_LC_LOADFVMLIB = 0x6, /* Load a fixed VM shared library. */
- BFD_MACH_O_LC_IDFVMLIB = 0x7, /* Fixed VM shared library id. */
- BFD_MACH_O_LC_IDENT = 0x8, /* Object identification information (obsolete). */
- BFD_MACH_O_LC_FVMFILE = 0x9, /* Fixed VM file inclusion. */
- BFD_MACH_O_LC_PREPAGE = 0xa, /* Prepage command (internal use). */
- BFD_MACH_O_LC_DYSYMTAB = 0xb, /* Dynamic link-edit symbol table info. */
- BFD_MACH_O_LC_LOAD_DYLIB = 0xc, /* Load a dynamically linked shared library. */
- BFD_MACH_O_LC_ID_DYLIB = 0xd, /* Dynamically linked shared lib identification. */
- BFD_MACH_O_LC_LOAD_DYLINKER = 0xe, /* Load a dynamic linker. */
- BFD_MACH_O_LC_ID_DYLINKER = 0xf, /* Dynamic linker identification. */
- BFD_MACH_O_LC_PREBOUND_DYLIB = 0x10, /* Modules prebound for a dynamically. */
- BFD_MACH_O_LC_ROUTINES = 0x11, /* Image routines. */
- BFD_MACH_O_LC_SUB_FRAMEWORK = 0x12, /* Sub framework. */
- BFD_MACH_O_LC_SUB_UMBRELLA = 0x13, /* Sub umbrella. */
- BFD_MACH_O_LC_SUB_CLIENT = 0x14, /* Sub client. */
- BFD_MACH_O_LC_SUB_LIBRARY = 0x15, /* Sub library. */
- BFD_MACH_O_LC_TWOLEVEL_HINTS = 0x16, /* Two-level namespace lookup hints. */
- BFD_MACH_O_LC_PREBIND_CKSUM = 0x17, /* Prebind checksum. */
- /* Load a dynamically linked shared library that is allowed to be
- missing (weak). */
- BFD_MACH_O_LC_LOAD_WEAK_DYLIB = 0x18,
- BFD_MACH_O_LC_SEGMENT_64 = 0x19, /* 64-bit segment of this file to be
- mapped. */
- BFD_MACH_O_LC_ROUTINES_64 = 0x1a, /* Address of the dyld init routine
- in a dylib. */
- BFD_MACH_O_LC_UUID = 0x1b, /* 128-bit UUID of the executable. */
- BFD_MACH_O_LC_RPATH = 0x1c, /* Run path addiions. */
- BFD_MACH_O_LC_CODE_SIGNATURE = 0x1d, /* Local of code signature. */
- BFD_MACH_O_LC_SEGMENT_SPLIT_INFO = 0x1e, /* Local of info to split seg. */
- BFD_MACH_O_LC_REEXPORT_DYLIB = 0x1f, /* Load and re-export lib. */
- BFD_MACH_O_LC_LAZY_LOAD_DYLIB = 0x20, /* Delay load of lib until use. */
- BFD_MACH_O_LC_ENCRYPTION_INFO = 0x21, /* Encrypted segment info. */
- BFD_MACH_O_LC_DYLD_INFO = 0x22, /* Compressed dyld information. */
- BFD_MACH_O_LC_LOAD_UPWARD_DYLIB = 0x23, /* Load upward dylib. */
- BFD_MACH_O_LC_VERSION_MIN_MACOSX = 0x24, /* Minimal MacOSX version. */
- BFD_MACH_O_LC_VERSION_MIN_IPHONEOS = 0x25, /* Minimal IOS version. */
- BFD_MACH_O_LC_FUNCTION_STARTS = 0x26, /* Compressed table of func start. */
- BFD_MACH_O_LC_DYLD_ENVIRONMENT = 0x27, /* Env variable string for dyld. */
- BFD_MACH_O_LC_MAIN = 0x28, /* Entry point. */
- BFD_MACH_O_LC_DATA_IN_CODE = 0x29, /* Table of non-instructions. */
- BFD_MACH_O_LC_SOURCE_VERSION = 0x2a, /* Source version. */
- BFD_MACH_O_LC_DYLIB_CODE_SIGN_DRS = 0x2b /* DRs from dylibs. */
-}
-bfd_mach_o_load_command_type;
-
-/* Section constants. */
-/* Constants for the type of a section. */
-
-typedef enum bfd_mach_o_section_type
-{
- /* Regular section. */
- BFD_MACH_O_S_REGULAR = 0x0,
-
- /* Zero fill on demand section. */
- BFD_MACH_O_S_ZEROFILL = 0x1,
-
- /* Section with only literal C strings. */
- BFD_MACH_O_S_CSTRING_LITERALS = 0x2,
-
- /* Section with only 4 byte literals. */
- BFD_MACH_O_S_4BYTE_LITERALS = 0x3,
-
- /* Section with only 8 byte literals. */
- BFD_MACH_O_S_8BYTE_LITERALS = 0x4,
-
- /* Section with only pointers to literals. */
- BFD_MACH_O_S_LITERAL_POINTERS = 0x5,
-
- /* For the two types of symbol pointers sections and the symbol stubs
- section they have indirect symbol table entries. For each of the
- entries in the section the indirect symbol table entries, in
- corresponding order in the indirect symbol table, start at the index
- stored in the reserved1 field of the section structure. Since the
- indirect symbol table entries correspond to the entries in the
- section the number of indirect symbol table entries is inferred from
- the size of the section divided by the size of the entries in the
- section. For symbol pointers sections the size of the entries in
- the section is 4 bytes and for symbol stubs sections the byte size
- of the stubs is stored in the reserved2 field of the section
- structure. */
-
- /* Section with only non-lazy symbol pointers. */
- BFD_MACH_O_S_NON_LAZY_SYMBOL_POINTERS = 0x6,
-
- /* Section with only lazy symbol pointers. */
- BFD_MACH_O_S_LAZY_SYMBOL_POINTERS = 0x7,
-
- /* Section with only symbol stubs, byte size of stub in the reserved2
- field. */
- BFD_MACH_O_S_SYMBOL_STUBS = 0x8,
-
- /* Section with only function pointers for initialization. */
- BFD_MACH_O_S_MOD_INIT_FUNC_POINTERS = 0x9,
-
- /* Section with only function pointers for termination. */
- BFD_MACH_O_S_MOD_FINI_FUNC_POINTERS = 0xa,
-
- /* Section contains symbols that are coalesced by the linkers. */
- BFD_MACH_O_S_COALESCED = 0xb,
-
- /* Zero fill on demand section (possibly larger than 4 GB). */
- BFD_MACH_O_S_GB_ZEROFILL = 0xc,
-
- /* Section with only pairs of function pointers for interposing. */
- BFD_MACH_O_S_INTERPOSING = 0xd,
-
- /* Section with only 16 byte literals. */
- BFD_MACH_O_S_16BYTE_LITERALS = 0xe,
-
- /* Section contains DTrace Object Format. */
- BFD_MACH_O_S_DTRACE_DOF = 0xf,
-
- /* Section with only lazy symbol pointers to lazy loaded dylibs. */
- BFD_MACH_O_S_LAZY_DYLIB_SYMBOL_POINTERS = 0x10
-}
-bfd_mach_o_section_type;
-
-/* The flags field of a section structure is separated into two parts a section
- type and section attributes. The section types are mutually exclusive (it
- can only have one type) but the section attributes are not (it may have more
- than one attribute). */
-
-#define BFD_MACH_O_SECTION_TYPE_MASK 0x000000ff
-
-/* Constants for the section attributes part of the flags field of a section
- structure. */
-#define BFD_MACH_O_SECTION_ATTRIBUTES_MASK 0xffffff00
-/* System setable attributes. */
-#define BFD_MACH_O_SECTION_ATTRIBUTES_SYS 0x00ffff00
-/* User attributes. */
-#define BFD_MACH_O_SECTION_ATTRIBUTES_USR 0xff000000
-
-typedef enum bfd_mach_o_section_attribute
-{
- /* Section has no specified attibutes. */
- BFD_MACH_O_S_ATTR_NONE = 0,
-
- /* Section has local relocation entries. */
- BFD_MACH_O_S_ATTR_LOC_RELOC = 0x00000100,
-
- /* Section has external relocation entries. */
- BFD_MACH_O_S_ATTR_EXT_RELOC = 0x00000200,
-
- /* Section contains some machine instructions. */
- BFD_MACH_O_S_ATTR_SOME_INSTRUCTIONS = 0x00000400,
-
- /* A debug section. */
- BFD_MACH_O_S_ATTR_DEBUG = 0x02000000,
-
- /* Used with i386 stubs. */
- BFD_MACH_O_S_SELF_MODIFYING_CODE = 0x04000000,
-
- /* Blocks are live if they reference live blocks. */
- BFD_MACH_O_S_ATTR_LIVE_SUPPORT = 0x08000000,
-
- /* No dead stripping. */
- BFD_MACH_O_S_ATTR_NO_DEAD_STRIP = 0x10000000,
-
- /* Section symbols can be stripped in files with MH_DYLDLINK flag. */
- BFD_MACH_O_S_ATTR_STRIP_STATIC_SYMS = 0x20000000,
-
- /* Section contains coalesced symbols that are not to be in the TOC of an
- archive. */
- BFD_MACH_O_S_ATTR_NO_TOC = 0x40000000,
-
- /* Section contains only true machine instructions. */
- BFD_MACH_O_S_ATTR_PURE_INSTRUCTIONS = 0x80000000
-}
-bfd_mach_o_section_attribute;
-
-/* Symbol constants. */
-
-/* Symbol n_type values. */
-#define BFD_MACH_O_N_STAB 0xe0 /* If any of these bits set, a symbolic debugging entry. */
-#define BFD_MACH_O_N_PEXT 0x10 /* Private external symbol bit. */
-#define BFD_MACH_O_N_TYPE 0x0e /* Mask for the type bits. */
-#define BFD_MACH_O_N_EXT 0x01 /* External symbol bit, set for external symbols. */
-#define BFD_MACH_O_N_UNDF 0x00 /* Undefined, n_sect == NO_SECT. */
-#define BFD_MACH_O_N_ABS 0x02 /* Absolute, n_sect == NO_SECT. */
-#define BFD_MACH_O_N_INDR 0x0a /* Indirect. */
-#define BFD_MACH_O_N_PBUD 0x0c /* Prebound undefined (defined in a dylib). */
-#define BFD_MACH_O_N_SECT 0x0e /* Defined in section number n_sect. */
-
-#define BFD_MACH_O_NO_SECT 0 /* Symbol not in any section of the image. */
-
-/* Symbol n_desc reference flags. */
-#define BFD_MACH_O_REFERENCE_MASK 0x07
-#define BFD_MACH_O_REFERENCE_FLAG_UNDEFINED_NON_LAZY 0x00
-#define BFD_MACH_O_REFERENCE_FLAG_UNDEFINED_LAZY 0x01
-#define BFD_MACH_O_REFERENCE_FLAG_DEFINED 0x02
-#define BFD_MACH_O_REFERENCE_FLAG_PRIVATE_DEFINED 0x03
-#define BFD_MACH_O_REFERENCE_FLAG_PRIVATE_UNDEFINED_NON_LAZY 0x04
-#define BFD_MACH_O_REFERENCE_FLAG_PRIVATE_UNDEFINED_LAZY 0x05
-
-#define BFD_MACH_O_REFERENCED_DYNAMICALLY 0x10
-#define BFD_MACH_O_N_DESC_DISCARDED 0x20
-#define BFD_MACH_O_N_NO_DEAD_STRIP 0x20
-#define BFD_MACH_O_N_WEAK_REF 0x40
-#define BFD_MACH_O_N_WEAK_DEF 0x80
-#define BFD_MACH_O_N_REF_TO_WEAK 0x80
-
-#define BFD_MACH_O_N_ARM_THUMB_DEF 0x08
-#define BFD_MACH_O_N_SYMBOL_RESOLVER 0x100
-
-#define BFD_MACH_O_INDIRECT_SYM_LOCAL 0x80000000
-#define BFD_MACH_O_INDIRECT_SYM_ABS 0x40000000
-
-/* Constants for DATA_IN_CODE entries. */
-typedef enum bfd_mach_o_data_in_code_entry_kind
-{
- BFD_MACH_O_DICE_KIND_DATA = 0x0001, /* Data */
- BFD_MACH_O_DICE_JUMP_TABLES8 = 0x0002, /* 1 byte jump tables. */
- BFD_MACH_O_DICE_JUMP_TABLES16 = 0x0003, /* 2 bytes. */
- BFD_MACH_O_DICE_JUMP_TABLES32 = 0x0004, /* 4 bytes. */
- BFD_MACH_O_DICE_ABS_JUMP_TABLES32 = 0x0005 /* Absolute jump table. */
-} bfd_mach_o_data_in_code_entry_kind;
-
-/* Thread constants. */
-
-typedef enum bfd_mach_o_ppc_thread_flavour
-{
- BFD_MACH_O_PPC_THREAD_STATE = 1,
- BFD_MACH_O_PPC_FLOAT_STATE = 2,
- BFD_MACH_O_PPC_EXCEPTION_STATE = 3,
- BFD_MACH_O_PPC_VECTOR_STATE = 4,
- BFD_MACH_O_PPC_THREAD_STATE64 = 5,
- BFD_MACH_O_PPC_EXCEPTION_STATE64 = 6,
- BFD_MACH_O_PPC_THREAD_STATE_NONE = 7
-}
-bfd_mach_o_ppc_thread_flavour;
-
-/* Defined in <mach/i386/thread_status.h> */
-typedef enum bfd_mach_o_i386_thread_flavour
-{
- BFD_MACH_O_x86_THREAD_STATE32 = 1,
- BFD_MACH_O_x86_FLOAT_STATE32 = 2,
- BFD_MACH_O_x86_EXCEPTION_STATE32 = 3,
- BFD_MACH_O_x86_THREAD_STATE64 = 4,
- BFD_MACH_O_x86_FLOAT_STATE64 = 5,
- BFD_MACH_O_x86_EXCEPTION_STATE64 = 6,
- BFD_MACH_O_x86_THREAD_STATE = 7,
- BFD_MACH_O_x86_FLOAT_STATE = 8,
- BFD_MACH_O_x86_EXCEPTION_STATE = 9,
- BFD_MACH_O_x86_DEBUG_STATE32 = 10,
- BFD_MACH_O_x86_DEBUG_STATE64 = 11,
- BFD_MACH_O_x86_DEBUG_STATE = 12,
- BFD_MACH_O_x86_THREAD_STATE_NONE = 13
-}
-bfd_mach_o_i386_thread_flavour;
-
-#endif /* _MACH_O_LOADER_H */
diff --git a/include/mach-o/reloc.h b/include/mach-o/reloc.h
deleted file mode 100644
index bab31efeb..000000000
--- a/include/mach-o/reloc.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/* Mach-O support for BFD.
- Copyright 2011, 2012
- Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef _MACH_O_RELOC_H
-#define _MACH_O_RELOC_H
-
-/* Generic relocation types (used by i386). */
-#define BFD_MACH_O_GENERIC_RELOC_VANILLA 0
-#define BFD_MACH_O_GENERIC_RELOC_PAIR 1
-#define BFD_MACH_O_GENERIC_RELOC_SECTDIFF 2
-#define BFD_MACH_O_GENERIC_RELOC_PB_LA_PTR 3
-#define BFD_MACH_O_GENERIC_RELOC_LOCAL_SECTDIFF 4
-#define BFD_MACH_O_GENERIC_RELOC_TLV 5
-
-#endif /* _MACH_O_RELOC_H */
diff --git a/include/mach-o/x86-64.h b/include/mach-o/x86-64.h
deleted file mode 100644
index d06bc26a7..000000000
--- a/include/mach-o/x86-64.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/* Mach-O support for BFD.
- Copyright 2011
- Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef _MACH_O_X86_64_H
-#define _MACH_O_X86_64_H
-
-/* X86-64 relocations. */
-#define BFD_MACH_O_X86_64_RELOC_UNSIGNED 0 /* Absolute addresses. */
-#define BFD_MACH_O_X86_64_RELOC_SIGNED 1 /* 32-bit disp. */
-#define BFD_MACH_O_X86_64_RELOC_BRANCH 2 /* 32-bit pcrel disp. */
-#define BFD_MACH_O_X86_64_RELOC_GOT_LOAD 3 /* Movq load of a GOT entry. */
-#define BFD_MACH_O_X86_64_RELOC_GOT 4 /* GOT reference. */
-#define BFD_MACH_O_X86_64_RELOC_SUBTRACTOR 5 /* Symbol difference. */
-#define BFD_MACH_O_X86_64_RELOC_SIGNED_1 6 /* 32-bit signed disp -1. */
-#define BFD_MACH_O_X86_64_RELOC_SIGNED_2 7 /* 32-bit signed disp -2. */
-#define BFD_MACH_O_X86_64_RELOC_SIGNED_4 8 /* 32-bit signed disp -4. */
-#define BFD_MACH_O_X86_64_RELOC_TLV 9 /* Thread local variables. */
-
-#endif /* _MACH_O_X86_64_H */
diff --git a/include/md5.h b/include/md5.h
deleted file mode 100644
index 6da2fefe1..000000000
--- a/include/md5.h
+++ /dev/null
@@ -1,154 +0,0 @@
-/* md5.h - Declaration of functions and data types used for MD5 sum
- computing library functions.
- Copyright 1995, 1996, 2000 Free Software Foundation, Inc.
- NOTE: The canonical source of this file is maintained with the GNU C
- Library. Bugs can be reported to bug-glibc@prep.ai.mit.edu.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by the
- Free Software Foundation; either version 2, or (at your option) any
- later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _MD5_H
-#define _MD5_H 1
-
-#include <stdio.h>
-
-#if defined HAVE_LIMITS_H || _LIBC
-# include <limits.h>
-#endif
-
-#include "ansidecl.h"
-
-/* The following contortions are an attempt to use the C preprocessor
- to determine an unsigned integral type that is 32 bits wide. An
- alternative approach is to use autoconf's AC_CHECK_SIZEOF macro, but
- doing that would require that the configure script compile and *run*
- the resulting executable. Locally running cross-compiled executables
- is usually not possible. */
-
-#ifdef _LIBC
-# include <sys/types.h>
-typedef u_int32_t md5_uint32;
-typedef uintptr_t md5_uintptr;
-#elif defined (HAVE_SYS_TYPES_H) && defined (HAVE_STDINT_H)
-#include <stdint.h>
-#include <sys/types.h>
-typedef uint32_t md5_uint32;
-typedef uintptr_t md5_uintptr;
-#else
-# define INT_MAX_32_BITS 2147483647
-
-/* If UINT_MAX isn't defined, assume it's a 32-bit type.
- This should be valid for all systems GNU cares about because
- that doesn't include 16-bit systems, and only modern systems
- (that certainly have <limits.h>) have 64+-bit integral types. */
-
-# ifndef INT_MAX
-# define INT_MAX INT_MAX_32_BITS
-# endif
-
-# if INT_MAX == INT_MAX_32_BITS
- typedef unsigned int md5_uint32;
-# else
-# if SHRT_MAX == INT_MAX_32_BITS
- typedef unsigned short md5_uint32;
-# else
-# if LONG_MAX == INT_MAX_32_BITS
- typedef unsigned long md5_uint32;
-# else
- /* The following line is intended to evoke an error.
- Using #error is not portable enough. */
- "Cannot determine unsigned 32-bit data type."
-# endif
-# endif
-# endif
-/* We have to make a guess about the integer type equivalent in size
- to pointers which should always be correct. */
-typedef unsigned long int md5_uintptr;
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Structure to save state of computation between the single steps. */
-struct md5_ctx
-{
- md5_uint32 A;
- md5_uint32 B;
- md5_uint32 C;
- md5_uint32 D;
-
- md5_uint32 total[2];
- md5_uint32 buflen;
- char buffer[128] ATTRIBUTE_ALIGNED_ALIGNOF(md5_uint32);
-};
-
-/*
- * The following three functions are build up the low level used in
- * the functions `md5_stream' and `md5_buffer'.
- */
-
-/* Initialize structure containing state of computation.
- (RFC 1321, 3.3: Step 3) */
-extern void md5_init_ctx (struct md5_ctx *ctx);
-
-/* Starting with the result of former calls of this function (or the
- initialization function update the context for the next LEN bytes
- starting at BUFFER.
- It is necessary that LEN is a multiple of 64!!! */
-extern void md5_process_block (const void *buffer, size_t len,
- struct md5_ctx *ctx);
-
-/* Starting with the result of former calls of this function (or the
- initialization function update the context for the next LEN bytes
- starting at BUFFER.
- It is NOT required that LEN is a multiple of 64. */
-extern void md5_process_bytes (const void *buffer, size_t len,
- struct md5_ctx *ctx);
-
-/* Process the remaining bytes in the buffer and put result from CTX
- in first 16 bytes following RESBUF. The result is always in little
- endian byte order, so that a byte-wise output yields to the wanted
- ASCII representation of the message digest.
-
- IMPORTANT: On some systems it is required that RESBUF is correctly
- aligned for a 32 bits value. */
-extern void *md5_finish_ctx (struct md5_ctx *ctx, void *resbuf);
-
-
-/* Put result from CTX in first 16 bytes following RESBUF. The result is
- always in little endian byte order, so that a byte-wise output yields
- to the wanted ASCII representation of the message digest.
-
- IMPORTANT: On some systems it is required that RESBUF is correctly
- aligned for a 32 bits value. */
-extern void *md5_read_ctx (const struct md5_ctx *ctx, void *resbuf);
-
-
-/* Compute MD5 message digest for bytes read from STREAM. The
- resulting message digest number will be written into the 16 bytes
- beginning at RESBLOCK. */
-extern int md5_stream (FILE *stream, void *resblock);
-
-/* Compute MD5 message digest for LEN bytes beginning at BUFFER. The
- result is always in little endian byte order, so that a byte-wise
- output yields to the wanted ASCII representation of the message
- digest. */
-extern void *md5_buffer (const char *buffer, size_t len, void *resblock);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/include/nlm/ChangeLog b/include/nlm/ChangeLog
deleted file mode 100644
index 9d5f54b17..000000000
--- a/include/nlm/ChangeLog
+++ /dev/null
@@ -1,119 +0,0 @@
-2010-04-15 Nick Clifton <nickc@redhat.com>
-
- * alpha-ext.h: Update copyright notice to use GPLv3.
- * common.h: Likewise.
- * external.h: Likewise.
- * i386-ext.h: Likewise.
- * internal.h: Likewise.
- * ppc-ext.h: Likewise.
- * sparc32-ext.h: Likewise.
-
-2005-05-10 Nick Clifton <nickc@redhat.com>
-
- * Update the address and phone number of the FSF organization in
- the GPL notices in the following files:
- alpha-ext.h, common.h, external.h, i386-ext.h, internal.h,
- ppc-ext.h, sparc32-ext.h
-
-2003-08-07 Alan Modra <amodra@bigpond.net.au>
-
- * internal.h (Nlm_Internal_Custom_Header): Replace PTR with void *.
-
-2001-10-02 Alan Modra <amodra@bigpond.net.au>
-
- * common.h (NLM_CAT, NLM_CAT3): Don't define.
- (NLM_CAT4): Update conditions under which this is defined. Document
- why CONCAT4 can't be used.
-
-1994-05-06 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * external.h (nlmNAME(External_Custom_Header)): Add length,
- dataOffset, and dataStamp field.
- (nlmNAME(External_Cygnus_Ext_Header)): Remove.
- * internal.h (Nlm_Internal_Custom_Header): Add hdrLength,
- dataOffset, dataStamp and hdr fields.
-
-1994-04-22 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * external.h (struct nlmNAME(external_cygnus_ext_header)): Rename
- from nlmNAME(external_cygnus_section_header). Change stamp field
- to 8 bytes. Add bytes field.
- * internal.h (nlm_internal_cygnus_ext_header): Rename from
- nlm_internal_cygnus_section_header. Change stamp field to 8
- bytes.
-
-1994-04-21 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * internal.h (struct nlm_internal_cygnus_section_header): Define.
- * external.h (struct nlmNAME(external_cygnus_section_header):
- Define.
-
-1994-04-20 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * internal.h (struct nlm_internal_custom_header): Remove
- debugRecOffset and debugRecLength fields. Add data field.
- * external.h (struct nlmNAME(external_custom_header)): Remove
- debugRecOffset and debugRecLength fields.
-
-1994-02-07 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- * internal.h: Change HOST_64_BIT to BFD_HOST_64_BIT.
-
-1993-12-02 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * alpha-ext.h: New file describing formats of information in Alpha
- NetWare files.
- * common.h: Define some non-external Alpha information.
-
-1993-11-17 Sean Eric Fagan (sef@cygnus.com)
-
- * external.h: Don't define external_fixed_header here.
- * i386-ext.h, sparc32-ext.h: New header files to define
- external_fixed_header for particular CPU's.
-
-1993-10-27 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * internal.h (Nlm_Internal_Extended_Header): Added fields
- sharedDebugRecordOffset and sharedDebugRecordCount.
- * external.h (NlmNAME(External_Extended_Header)): Likewise.
-
- * common.h (NLM_SIGNATURE): Do not define (it's different for each
- backend).
-
-1993-08-31 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * internal.h: Change length fields of type char to type unsigned
- char.
-
-1993-07-31 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * common.h (NLM_HIBIT, NLM_HEADER_VERSION): Define.
-
-1993-07-22 Fred Fish (fnf@deneb.cygnus.com)
-
- * common.h (NLM_CAT*, NLM_ARCH_SIZE, NLM_TARGET_LONG_SIZE,
- NLM_TARGET_ADDRESS_SIZE, NLM_NAME, NlmNAME, nlmNAME): New
- macros.
- * external.h (TARGET_LONG_SIZE, TARGET_ADDRESS_SIZE): Remove
- macros, convert usages to NLM_ equivalents.
- * external.h: Use nlmNAME and NlmNAME macros to derive both
- 32 and 64 bit versions.
-
-1993-07-20 Fred Fish (fnf@deneb.cygnus.com)
-
- * (common.h, external.h, internal.h): New files for NLM/NetWare
- support.
-
-
-Copyright (C) 1993-2012 Free Software Foundation, Inc.
-
-Copying and distribution of this file, with or without modification,
-are permitted in any medium without royalty provided the copyright
-notice and this notice are preserved.
-
-Local Variables:
-mode: change-log
-left-margin: 8
-fill-column: 74
-version-control: never
-End:
diff --git a/include/nlm/alpha-ext.h b/include/nlm/alpha-ext.h
deleted file mode 100644
index 7dc65688f..000000000
--- a/include/nlm/alpha-ext.h
+++ /dev/null
@@ -1,167 +0,0 @@
-/* Alpha NLM (NetWare Loadable Module) support for BFD.
- Copyright 1993, 2005, 2010 Free Software Foundation, Inc.
- By Ian Lance Taylor, Cygnus Support
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-/* An Alpha NLM starts with an instance of this structure. */
-
-struct nlm32_alpha_external_prefix_header
-{
- /* Magic number. Must be NLM32_ALPHA_MAGIC. */
- unsigned char magic[4];
- /* Format descriptor. Current value is 2. */
- unsigned char format[4];
- /* Size of prefix header. */
- unsigned char size[4];
- /* Padding. */
- unsigned char pad1[4];
- /* More fields may be added later, supposedly. */
-};
-
-/* The external format of an Alpha NLM reloc. This is the same as an
- Alpha ECOFF reloc. */
-
-struct nlm32_alpha_external_reloc
-{
- unsigned char r_vaddr[8];
- unsigned char r_symndx[4];
- unsigned char r_bits[4];
-};
-
-/* Constants to unpack the r_bits field of a reloc. */
-
-#define RELOC_BITS0_TYPE_LITTLE 0xff
-#define RELOC_BITS0_TYPE_SH_LITTLE 0
-
-#define RELOC_BITS1_EXTERN_LITTLE 0x01
-
-#define RELOC_BITS1_OFFSET_LITTLE 0x7e
-#define RELOC_BITS1_OFFSET_SH_LITTLE 1
-
-#define RELOC_BITS1_RESERVED_LITTLE 0x80
-#define RELOC_BITS1_RESERVED_SH_LITTLE 7
-#define RELOC_BITS2_RESERVED_LITTLE 0xff
-#define RELOC_BITS2_RESERVED_SH_LEFT_LITTLE 1
-#define RELOC_BITS3_RESERVED_LITTLE 0x03
-#define RELOC_BITS3_RESERVED_SH_LEFT_LITTLE 9
-
-#define RELOC_BITS3_SIZE_LITTLE 0xfc
-#define RELOC_BITS3_SIZE_SH_LITTLE 2
-
-/* The external format of the fixed header. */
-
-typedef struct nlm32_alpha_external_fixed_header
-{
-
- /* The signature field identifies the file as an NLM. It must contain
- the signature string, which depends upon the NLM target. */
-
- unsigned char signature[24];
-
- /* The version of the header. At this time, the highest version number
- is 4. */
-
- unsigned char version[4];
-
- /* The name of the module, which must be a DOS name (1-8 characters followed
- by a period and a 1-3 character extension). The first byte is the byte
- length of the name and the last byte is a null terminator byte. This
- field is fixed length, and any unused bytes should be null bytes. The
- value is set by the OUTPUT keyword to NLMLINK. */
-
- unsigned char moduleName[14];
-
- /* Padding to make it come out correct. */
-
- unsigned char pad1[2];
-
- /* The byte offset of the code image from the start of the file. */
-
- unsigned char codeImageOffset[4];
-
- /* The size of the code image, in bytes. */
-
- unsigned char codeImageSize[4];
-
- /* The byte offset of the data image from the start of the file. */
-
- unsigned char dataImageOffset[4];
-
- /* The size of the data image, in bytes. */
-
- unsigned char dataImageSize[4];
-
- /* The size of the uninitialized data region that the loader is to be
- allocated at load time. Uninitialized data follows the initialized
- data in the NLM address space. */
-
- unsigned char uninitializedDataSize[4];
-
- /* The byte offset of the custom data from the start of the file. The
- custom data is set by the CUSTOM keyword to NLMLINK. It is possible
- for this to be EOF if there is no custom data. */
-
- unsigned char customDataOffset[4];
-
- /* The size of the custom data, in bytes. */
-
- unsigned char customDataSize[4];
-
- /* The byte offset of the module dependencies from the start of the file.
- The module dependencies are determined by the MODULE keyword in
- NLMLINK. */
-
- unsigned char moduleDependencyOffset[4];
-
- /* The number of module dependencies at the moduleDependencyOffset. */
-
- unsigned char numberOfModuleDependencies[4];
-
- /* The byte offset of the relocation fixup data from the start of the file */
-
- unsigned char relocationFixupOffset[4];
-
- unsigned char numberOfRelocationFixups[4];
-
- unsigned char externalReferencesOffset[4];
-
- unsigned char numberOfExternalReferences[4];
-
- unsigned char publicsOffset[4];
-
- unsigned char numberOfPublics[4];
-
- /* The byte offset of the internal debug info from the start of the file.
- It is possible for this to be EOF if there is no debug info. */
-
- unsigned char debugInfoOffset[4];
-
- unsigned char numberOfDebugRecords[4];
-
- unsigned char codeStartOffset[4];
-
- unsigned char exitProcedureOffset[4];
-
- unsigned char checkUnloadProcedureOffset[4];
-
- unsigned char moduleType[4];
-
- unsigned char flags[4];
-
-} Nlm32_alpha_External_Fixed_Header;
diff --git a/include/nlm/common.h b/include/nlm/common.h
deleted file mode 100644
index fcd290e0c..000000000
--- a/include/nlm/common.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/* NLM (NetWare Loadable Module) support for BFD.
- Copyright 1993, 2001, 2005, 2010 Free Software Foundation, Inc.
-
- Written by Fred Fish @ Cygnus Support
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-/* This file is part of NLM support for BFD, and contains the portions
- that are common to both the internal and external representations. */
-
-/* If NLM_ARCH_SIZE is not defined, default to 32. NLM_ARCH_SIZE is
- optionally defined by the application. */
-
-#ifndef NLM_ARCH_SIZE
-# define NLM_ARCH_SIZE 32
-#endif
-
-/* Due to horrible details of ANSI macro expansion, we can't use CONCAT4
- for NLM_NAME. CONCAT2 is used in BFD_JUMP_TABLE macros, and some of
- them will expand to tokens that themselves are macros defined in terms
- of NLM_NAME. If NLM_NAME were defined using CONCAT4 (which is itself
- defined in bfd-in.h using CONCAT2), ANSI preprocessor rules say that
- the CONCAT2 within NLM_NAME should not be expanded.
- So use another name. */
-#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
-#ifdef SABER
-#define NLM_CAT4(a,b,c,d) a##b##c##d
-#else
-/* This hack is to avoid a problem with some strict ANSI C preprocessors.
- The problem is, "32_" is not a valid preprocessing token, and we don't
- want extra underscores (e.g., "nlm_32_"). The NLM_XCAT2 macro will
- cause the inner CAT2 macros to be evaluated first, producing
- still-valid pp-tokens. Then the final concatenation can be done. */
-#define NLM_CAT2(a,b) a##b
-#define NLM_XCAT2(a,b) NLM_CAT2(a,b)
-#define NLM_CAT4(a,b,c,d) NLM_XCAT2(NLM_CAT2(a,b),NLM_CAT2(c,d))
-#endif
-#else
-#define NLM_CAT4(a,b,c,d) a/**/b/**/c/**/d
-#endif
-
-#if NLM_ARCH_SIZE == 32
-# define NLM_TARGET_LONG_SIZE 4
-# define NLM_TARGET_ADDRESS_SIZE 4
-# define NLM_NAME(x,y) NLM_CAT4(x,32,_,y)
-# define NLM_HIBIT (((bfd_vma) 1) << 31)
-#endif
-#if NLM_ARCH_SIZE == 64
-# define NLM_TARGET_LONG_SIZE 8
-# define NLM_TARGET_ADDRESS_SIZE 8
-# define NLM_NAME(x,y) NLM_CAT4(x,64,_,y)
-# define NLM_HIBIT (((bfd_vma) 1) << 63)
-#endif
-
-#define NlmNAME(X) NLM_NAME(Nlm,X)
-#define nlmNAME(X) NLM_NAME(nlm,X)
-
-/* Give names to things that should not change. */
-
-#define NLM_MAX_DESCRIPTION_LENGTH 127
-#define NLM_MAX_SCREEN_NAME_LENGTH 71
-#define NLM_MAX_THREAD_NAME_LENGTH 71
-#define NLM_MAX_COPYRIGHT_MESSAGE_LENGTH 255
-#define NLM_OTHER_DATA_LENGTH 400 /* FIXME */
-#define NLM_OLD_THREAD_NAME_LENGTH 5
-#define NLM_SIGNATURE_SIZE 24
-#define NLM_HEADER_VERSION 4
-#define NLM_MODULE_NAME_SIZE 14
-#define NLM_DEFAULT_STACKSIZE (8 * 1024)
-
-/* Alpha information. This should probably be in a separate Alpha
- header file, but it can't go in alpha-ext.h because some of it is
- needed by nlmconv.c. */
-
-/* Magic number in Alpha prefix header. */
-#define NLM32_ALPHA_MAGIC (0x83561840)
-
-/* The r_type field in an Alpha reloc is one of the following values. */
-#define ALPHA_R_IGNORE 0
-#define ALPHA_R_REFLONG 1
-#define ALPHA_R_REFQUAD 2
-#define ALPHA_R_GPREL32 3
-#define ALPHA_R_LITERAL 4
-#define ALPHA_R_LITUSE 5
-#define ALPHA_R_GPDISP 6
-#define ALPHA_R_BRADDR 7
-#define ALPHA_R_HINT 8
-#define ALPHA_R_SREL16 9
-#define ALPHA_R_SREL32 10
-#define ALPHA_R_SREL64 11
-#define ALPHA_R_OP_PUSH 12
-#define ALPHA_R_OP_STORE 13
-#define ALPHA_R_OP_PSUB 14
-#define ALPHA_R_OP_PRSHIFT 15
-#define ALPHA_R_GPVALUE 16
-#define ALPHA_R_NW_RELOC 250
-
-/* A local reloc, other than ALPHA_R_GPDISP or ALPHA_R_IGNORE, must be
- against one of these symbol indices. */
-#define ALPHA_RELOC_SECTION_TEXT 1
-#define ALPHA_RELOC_SECTION_DATA 3
-
-/* An ALPHA_R_NW_RELOC has one of these values in the size field. If
- it is SETGP, the r_vaddr field holds the GP value to use. If it is
- LITA, the r_vaddr field holds the address of the .lita section and
- the r_symndx field holds the size of the .lita section. */
-#define ALPHA_R_NW_RELOC_SETGP 1
-#define ALPHA_R_NW_RELOC_LITA 2
diff --git a/include/nlm/external.h b/include/nlm/external.h
deleted file mode 100644
index eebd1cca9..000000000
--- a/include/nlm/external.h
+++ /dev/null
@@ -1,172 +0,0 @@
-/* NLM (NetWare Loadable Module) support for BFD.
- Copyright 1993, 1994, 2005, 2010 Free Software Foundation, Inc.
-
- Written by Fred Fish @ Cygnus Support
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-/* This file is part of NLM support for BFD, and contains the portions
- that describe how NLM is represented externally by the BFD library.
- I.E. it describes the in-file representation of NLM. It requires
- the nlm/common.h file which contains the portions that are common to
- both the internal and external representations.
-
- Note that an NLM header consists of three parts:
-
- (1) A fixed length header that has specific fields of known length,
- at specific offsets in the file.
-
- (2) A variable length header that has specific fields in a specific
- order, but some fields may be variable length.
-
- (3) A auxiliary header that has various optional fields in no specific
- order. There is no way to identify the end of the auxiliary headers
- except by finding a header without a recognized 'stamp'.
-
- The exact format of the fixed length header unfortunately varies
- from one NLM target to another, due to padding. Each target
- defines the correct external format in a separate header file. */
-
-/* NLM Header. */
-
-/* The version header is one of the optional auxiliary headers and
- follows the fixed length and variable length NLM headers. */
-
-typedef struct nlmNAME(external_version_header)
-{
-
- /* The header is recognized by "VeRsIoN#" in the stamp field. */
- char stamp[8];
-
- unsigned char majorVersion[NLM_TARGET_LONG_SIZE];
-
- unsigned char minorVersion[NLM_TARGET_LONG_SIZE];
-
- unsigned char revision[NLM_TARGET_LONG_SIZE];
-
- unsigned char year[NLM_TARGET_LONG_SIZE];
-
- unsigned char month[NLM_TARGET_LONG_SIZE];
-
- unsigned char day[NLM_TARGET_LONG_SIZE];
-
-} NlmNAME(External_Version_Header);
-
-
-typedef struct nlmNAME(external_copyright_header)
-{
-
- /* The header is recognized by "CoPyRiGhT=" in the stamp field. */
-
- char stamp[10];
-
- unsigned char copyrightMessageLength[1];
-
- /* There is a variable length field here called 'copyrightMessage'
- that is the length specified by copyrightMessageLength. */
-
-} NlmNAME(External_Copyright_Header);
-
-
-typedef struct nlmNAME(external_extended_header)
-{
-
- /* The header is recognized by "MeSsAgEs" in the stamp field. */
-
- char stamp[8];
-
- unsigned char languageID[NLM_TARGET_LONG_SIZE];
-
- unsigned char messageFileOffset[NLM_TARGET_LONG_SIZE];
-
- unsigned char messageFileLength[NLM_TARGET_LONG_SIZE];
-
- unsigned char messageCount[NLM_TARGET_LONG_SIZE];
-
- unsigned char helpFileOffset[NLM_TARGET_LONG_SIZE];
-
- unsigned char helpFileLength[NLM_TARGET_LONG_SIZE];
-
- unsigned char RPCDataOffset[NLM_TARGET_LONG_SIZE];
-
- unsigned char RPCDataLength[NLM_TARGET_LONG_SIZE];
-
- unsigned char sharedCodeOffset[NLM_TARGET_LONG_SIZE];
-
- unsigned char sharedCodeLength[NLM_TARGET_LONG_SIZE];
-
- unsigned char sharedDataOffset[NLM_TARGET_LONG_SIZE];
-
- unsigned char sharedDataLength[NLM_TARGET_LONG_SIZE];
-
- unsigned char sharedRelocationFixupOffset[NLM_TARGET_LONG_SIZE];
-
- unsigned char sharedRelocationFixupCount[NLM_TARGET_LONG_SIZE];
-
- unsigned char sharedExternalReferenceOffset[NLM_TARGET_LONG_SIZE];
-
- unsigned char sharedExternalReferenceCount[NLM_TARGET_LONG_SIZE];
-
- unsigned char sharedPublicsOffset[NLM_TARGET_LONG_SIZE];
-
- unsigned char sharedPublicsCount[NLM_TARGET_LONG_SIZE];
-
- unsigned char sharedDebugRecordOffset[NLM_TARGET_LONG_SIZE];
-
- unsigned char sharedDebugRecordCount[NLM_TARGET_LONG_SIZE];
-
- unsigned char sharedInitializationOffset[NLM_TARGET_ADDRESS_SIZE];
-
- unsigned char SharedExitProcedureOffset[NLM_TARGET_ADDRESS_SIZE];
-
- unsigned char productID[NLM_TARGET_LONG_SIZE];
-
- unsigned char reserved0[NLM_TARGET_LONG_SIZE];
-
- unsigned char reserved1[NLM_TARGET_LONG_SIZE];
-
- unsigned char reserved2[NLM_TARGET_LONG_SIZE];
-
- unsigned char reserved3[NLM_TARGET_LONG_SIZE];
-
- unsigned char reserved4[NLM_TARGET_LONG_SIZE];
-
- unsigned char reserved5[NLM_TARGET_LONG_SIZE];
-
-} NlmNAME(External_Extended_Header);
-
-
-typedef struct nlmNAME(external_custom_header)
-{
-
- /* The header is recognized by "CuStHeAd" in the stamp field. */
- char stamp[8];
-
- /* Length of this header. */
- unsigned char length[NLM_TARGET_LONG_SIZE];
-
- /* Offset to data. */
- unsigned char dataOffset[NLM_TARGET_LONG_SIZE];
-
- /* Length of data. */
- unsigned char dataLength[NLM_TARGET_LONG_SIZE];
-
- /* Stamp for this customer header--we recognize "CyGnUsEx". */
- char dataStamp[8];
-
-} NlmNAME(External_Custom_Header);
diff --git a/include/nlm/i386-ext.h b/include/nlm/i386-ext.h
deleted file mode 100644
index 4de8b340d..000000000
--- a/include/nlm/i386-ext.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/* i386 NLM (NetWare Loadable Module) support for BFD.
- Copyright 1993, 2005, 2010 Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-/* The external format of the fixed header. */
-
-typedef struct nlm32_i386_external_fixed_header
-{
-
- /* The signature field identifies the file as an NLM. It must contain
- the signature string, which depends upon the NLM target. */
-
- unsigned char signature[24];
-
- /* The version of the header. At this time, the highest version number
- is 4. */
-
- unsigned char version[4];
-
- /* The name of the module, which must be a DOS name (1-8 characters followed
- by a period and a 1-3 character extension). The first byte is the byte
- length of the name and the last byte is a null terminator byte. This
- field is fixed length, and any unused bytes should be null bytes. The
- value is set by the OUTPUT keyword to NLMLINK. */
-
- unsigned char moduleName[14];
-
- /* The byte offset of the code image from the start of the file. */
-
- unsigned char codeImageOffset[4];
-
- /* The size of the code image, in bytes. */
-
- unsigned char codeImageSize[4];
-
- /* The byte offset of the data image from the start of the file. */
-
- unsigned char dataImageOffset[4];
-
- /* The size of the data image, in bytes. */
-
- unsigned char dataImageSize[4];
-
- /* The size of the uninitialized data region that the loader is to be
- allocated at load time. Uninitialized data follows the initialized
- data in the NLM address space. */
-
- unsigned char uninitializedDataSize[4];
-
- /* The byte offset of the custom data from the start of the file. The
- custom data is set by the CUSTOM keyword to NLMLINK. It is possible
- for this to be EOF if there is no custom data. */
-
- unsigned char customDataOffset[4];
-
- /* The size of the custom data, in bytes. */
-
- unsigned char customDataSize[4];
-
- /* The byte offset of the module dependencies from the start of the file.
- The module dependencies are determined by the MODULE keyword in
- NLMLINK. */
-
- unsigned char moduleDependencyOffset[4];
-
- /* The number of module dependencies at the moduleDependencyOffset. */
-
- unsigned char numberOfModuleDependencies[4];
-
- /* The byte offset of the relocation fixup data from the start of the file */
-
- unsigned char relocationFixupOffset[4];
-
- unsigned char numberOfRelocationFixups[4];
-
- unsigned char externalReferencesOffset[4];
-
- unsigned char numberOfExternalReferences[4];
-
- unsigned char publicsOffset[4];
-
- unsigned char numberOfPublics[4];
-
- /* The byte offset of the internal debug info from the start of the file.
- It is possible for this to be EOF if there is no debug info. */
-
- unsigned char debugInfoOffset[4];
-
- unsigned char numberOfDebugRecords[4];
-
- unsigned char codeStartOffset[4];
-
- unsigned char exitProcedureOffset[4];
-
- unsigned char checkUnloadProcedureOffset[4];
-
- unsigned char moduleType[4];
-
- unsigned char flags[4];
-
-} Nlm32_i386_External_Fixed_Header;
diff --git a/include/nlm/internal.h b/include/nlm/internal.h
deleted file mode 100644
index 51e1f00e9..000000000
--- a/include/nlm/internal.h
+++ /dev/null
@@ -1,309 +0,0 @@
-/* NLM (NetWare Loadable Module) support for BFD.
- Copyright 1993, 1994, 2003, 2005, 2010 Free Software Foundation, Inc.
-
- Written by Fred Fish @ Cygnus Support.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-/* This file is part of NLM support for BFD, and contains the portions
- that describe how NLM is represented internally in the BFD library.
- I.E. it describes the in-memory representation of NLM. It requires
- the nlm/common.h file which contains the portions that are common to
- both the internal and external representations. */
-
-#if 0
-
-/* Types used by various structures, functions, etc. */
-
-typedef unsigned long Nlm32_Addr; /* Unsigned program address */
-typedef unsigned long Nlm32_Off; /* Unsigned file offset */
-typedef long Nlm32_Sword; /* Signed large integer */
-typedef unsigned long Nlm32_Word; /* Unsigned large integer */
-typedef unsigned short Nlm32_Half; /* Unsigned medium integer */
-typedef unsigned char Nlm32_Char; /* Unsigned tiny integer */
-
-#ifdef BFD_HOST_64_BIT
-typedef unsigned BFD_HOST_64_BIT Nlm64_Addr;
-typedef unsigned BFD_HOST_64_BIT Nlm64_Off;
-typedef BFD_HOST_64_BIT Nlm64_Sxword;
-typedef unsigned BFD_HOST_64_BIT Nlm64_Xword;
-#endif
-typedef long Nlm64_Sword;
-typedef unsigned long Nlm64_Word;
-typedef unsigned short Nlm64_Half;
-
-#endif /* 0 */
-
-/* This structure contains the internal form of the portion of the NLM
- header that is fixed length. */
-
-typedef struct nlm_internal_fixed_header
-{
- /* The signature field identifies the file as an NLM. It must contain
- the signature string, which depends upon the NLM target. */
-
- char signature[NLM_SIGNATURE_SIZE];
-
- /* The version of the header. At this time, the highest version number
- is 4. */
-
- long version;
-
- /* The name of the module, which must be a DOS name (1-8 characters followed
- by a period and a 1-3 character extension. The first byte is the byte
- length of the name and the last byte is a null terminator byte. This
- field is fixed length, and any unused bytes should be null bytes. The
- value is set by the OUTPUT keyword to NLMLINK. */
-
- char moduleName[NLM_MODULE_NAME_SIZE];
-
- /* The byte offset of the code image from the start of the file. */
-
- file_ptr codeImageOffset;
-
- /* The size of the code image, in bytes. */
-
- bfd_size_type codeImageSize;
-
- /* The byte offset of the data image from the start of the file. */
-
- file_ptr dataImageOffset;
-
- /* The size of the data image, in bytes. */
-
- bfd_size_type dataImageSize;
-
- /* The size of the uninitialized data region that the loader is to be
- allocated at load time. Uninitialized data follows the initialized
- data in the NLM address space. */
-
- bfd_size_type uninitializedDataSize;
-
- /* The byte offset of the custom data from the start of the file. The
- custom data is set by the CUSTOM keyword to NLMLINK. */
-
- file_ptr customDataOffset;
-
- /* The size of the custom data, in bytes. */
-
- bfd_size_type customDataSize;
-
- /* The byte offset of the module dependencies from the start of the file.
- The module dependencies are determined by the MODULE keyword in
- NLMLINK. */
-
- file_ptr moduleDependencyOffset;
-
- /* The number of module dependencies at the moduleDependencyOffset. */
-
- long numberOfModuleDependencies;
-
- /* The byte offset of the relocation fixup data from the start of the file */
-
- file_ptr relocationFixupOffset;
- long numberOfRelocationFixups;
- file_ptr externalReferencesOffset;
- long numberOfExternalReferences;
- file_ptr publicsOffset;
- long numberOfPublics;
- file_ptr debugInfoOffset;
- long numberOfDebugRecords;
- file_ptr codeStartOffset;
- file_ptr exitProcedureOffset;
- file_ptr checkUnloadProcedureOffset;
- long moduleType;
- long flags;
-} Nlm_Internal_Fixed_Header;
-
-#define nlm32_internal_fixed_header nlm_internal_fixed_header
-#define Nlm32_Internal_Fixed_Header Nlm_Internal_Fixed_Header
-#define nlm64_internal_fixed_header nlm_internal_fixed_header
-#define Nlm64_Internal_Fixed_Header Nlm_Internal_Fixed_Header
-
-/* This structure contains the portions of the NLM header that are either
- variable in size in the external representation, or else are not at a
- fixed offset relative to the start of the NLM header due to preceding
- variable sized fields.
-
- Note that all the fields must exist in the external header, and in
- the order used here (the same order is used in the internal form
- for consistency, not out of necessity). */
-
-typedef struct nlm_internal_variable_header
-{
-
- /* The descriptionLength field contains the length of the text in
- descriptionText, excluding the null terminator. The descriptionText
- field contains the NLM description obtained from the DESCRIPTION
- keyword in NLMLINK plus the null byte terminator. The descriptionText
- can be up to NLM_MAX_DESCRIPTION_LENGTH characters. */
-
- unsigned char descriptionLength;
- char descriptionText[NLM_MAX_DESCRIPTION_LENGTH + 1];
-
- /* The stackSize field contains the size of the stack in bytes, as
- specified by the STACK or STACKSIZE keyword in NLMLINK. If no size
- is specified, the default is NLM_DEFAULT_STACKSIZE. */
-
- long stackSize;
-
- /* The reserved field is included only for completeness. It should contain
- zero. */
-
- long reserved;
-
- /* This field is fixed length, should contain " LONG" (note leading
- space), and is unused. */
-
- char oldThreadName[NLM_OLD_THREAD_NAME_LENGTH];
-
- /* The screenNameLength field contains the length of the actual text stored
- in the screenName field, excluding the null byte terminator. The
- screenName field contains the screen name as specified by the SCREENNAME
- keyword in NLMLINK, and can be up to NLM_MAX_SCREEN_NAME_LENGTH
- characters. */
-
- unsigned char screenNameLength;
- char screenName[NLM_MAX_SCREEN_NAME_LENGTH + 1];
-
- /* The threadNameLength field contains the length of the actual text stored
- in the threadName field, excluding the null byte terminator. The
- threadName field contains the thread name as specified by the THREADNAME
- keyword in NLMLINK, and can be up to NLM_MAX_THREAD_NAME_LENGTH
- characters. */
-
- unsigned char threadNameLength;
- char threadName[NLM_MAX_THREAD_NAME_LENGTH + 1];
-
-} Nlm_Internal_Variable_Header;
-
-#define nlm32_internal_variable_header nlm_internal_variable_header
-#define Nlm32_Internal_Variable_Header Nlm_Internal_Variable_Header
-#define nlm64_internal_variable_header nlm_internal_variable_header
-#define Nlm64_Internal_Variable_Header Nlm_Internal_Variable_Header
-
-/* The version header is one of the optional auxiliary headers and
- follows the fixed length and variable length NLM headers. */
-
-typedef struct nlm_internal_version_header
-{
- /* The header is recognized by "VeRsIoN#" in the stamp field. */
- char stamp[8];
- long majorVersion;
- long minorVersion;
- long revision;
- long year;
- long month;
- long day;
-} Nlm_Internal_Version_Header;
-
-#define nlm32_internal_version_header nlm_internal_version_header
-#define Nlm32_Internal_Version_Header Nlm_Internal_Version_Header
-#define nlm64_internal_version_header nlm_internal_version_header
-#define Nlm64_Internal_Version_Header Nlm_Internal_Version_Header
-
-typedef struct nlm_internal_copyright_header
-{
- /* The header is recognized by "CoPyRiGhT=" in the stamp field. */
- char stamp[10];
- unsigned char copyrightMessageLength;
- char copyrightMessage[NLM_MAX_COPYRIGHT_MESSAGE_LENGTH];
-} Nlm_Internal_Copyright_Header;
-
-#define nlm32_internal_copyright_header nlm_internal_copyright_header
-#define Nlm32_Internal_Copyright_Header Nlm_Internal_Copyright_Header
-#define nlm64_internal_copyright_header nlm_internal_copyright_header
-#define Nlm64_Internal_Copyright_Header Nlm_Internal_Copyright_Header
-
-typedef struct nlm_internal_extended_header
-{
- /* The header is recognized by "MeSsAgEs" in the stamp field. */
- char stamp[8];
- long languageID;
- file_ptr messageFileOffset;
- bfd_size_type messageFileLength;
- long messageCount;
- file_ptr helpFileOffset;
- bfd_size_type helpFileLength;
- file_ptr RPCDataOffset;
- bfd_size_type RPCDataLength;
- file_ptr sharedCodeOffset;
- bfd_size_type sharedCodeLength;
- file_ptr sharedDataOffset;
- bfd_size_type sharedDataLength;
- file_ptr sharedRelocationFixupOffset;
- long sharedRelocationFixupCount;
- file_ptr sharedExternalReferenceOffset;
- long sharedExternalReferenceCount;
- file_ptr sharedPublicsOffset;
- long sharedPublicsCount;
- file_ptr sharedDebugRecordOffset;
- long sharedDebugRecordCount;
- bfd_vma SharedInitializationOffset;
- bfd_vma SharedExitProcedureOffset;
- long productID;
- long reserved0;
- long reserved1;
- long reserved2;
- long reserved3;
- long reserved4;
- long reserved5;
-} Nlm_Internal_Extended_Header;
-
-#define nlm32_internal_extended_header nlm_internal_extended_header
-#define Nlm32_Internal_Extended_Header Nlm_Internal_Extended_Header
-#define nlm64_internal_extended_header nlm_internal_extended_header
-#define Nlm64_Internal_Extended_Header Nlm_Internal_Extended_Header
-
-/* The format of a custom header as stored internally is different
- from the external format. This is how we store a custom header
- which we do not recognize. */
-
-typedef struct nlm_internal_custom_header
-{
- /* The header is recognized by "CuStHeAd" in the stamp field. */
- char stamp[8];
- bfd_size_type hdrLength;
- file_ptr dataOffset;
- bfd_size_type dataLength;
- char dataStamp[8];
- void *hdr;
-} Nlm_Internal_Custom_Header;
-
-#define nlm32_internal_custom_header nlm_internal_custom_header
-#define Nlm32_Internal_Custom_Header Nlm_Internal_Custom_Header
-#define nlm64_internal_custom_header nlm_internal_custom_header
-#define Nlm64_Internal_Custom_Header Nlm_Internal_Custom_Header
-
-/* The internal Cygnus header is written out externally as a custom
- header. We don't try to replicate that structure here. */
-
-typedef struct nlm_internal_cygnus_ext_header
-{
- /* The header is recognized by "CyGnUsEx" in the stamp field. */
- char stamp[8];
- /* File location of debugging information. */
- file_ptr offset;
- /* Length of debugging information. */
- bfd_size_type length;
-} Nlm_Internal_Cygnus_Ext_Header;
-
-#define nlm32_internal_cygnus_ext_header nlm_internal_cygnus_ext_header
-#define Nlm32_Internal_Cygnus_Ext_Header Nlm_Internal_Cygnus_Ext_Header
-#define nlm64_internal_cygnus_ext_header nlm_internal_cygnus_ext_header
-#define Nlm64_Internal_Cygnus_Ext_Header Nlm_Internal_Cygnus_Ext_Header
diff --git a/include/nlm/ppc-ext.h b/include/nlm/ppc-ext.h
deleted file mode 100644
index 026984b85..000000000
--- a/include/nlm/ppc-ext.h
+++ /dev/null
@@ -1,164 +0,0 @@
-/* PowerPC NLM (NetWare Loadable Module) support for BFD.
- Copyright (C) 1994, 2005, 2010 Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifdef OLDFORMAT
-
-/* The format of a PowerPC NLM changed. These structures are only
- used in the old format. */
-
-/* A PowerPC NLM starts with an instance of this structure. */
-
-struct nlm32_powerpc_external_prefix_header
-{
- /* Signature. Must be "AppleNLM". */
- char signature[8];
- /* Version number. Current value is 1. */
- unsigned char headerVersion[4];
- /* ??. Should be set to 0. */
- unsigned char origins[4];
- /* File creation date in standard Unix time format (seconds since
- 1/1/70). */
- unsigned char date[4];
-};
-
-#define NLM32_POWERPC_SIGNATURE "AppleNLM"
-#define NLM32_POWERPC_HEADER_VERSION 1
-
-/* The external format of a PowerPC NLM reloc. This is the same as an
- XCOFF dynamic reloc. */
-
-struct nlm32_powerpc_external_reloc
-{
- /* Address. */
- unsigned char l_vaddr[4];
- /* Symbol table index. This is 0 for .text and 1 for .data. 2
- means .bss, but I don't know if it is used. In XCOFF, larger
- numbers are indices into the dynamic symbol table, but they are
- presumably not used in an NLM. */
- unsigned char l_symndx[4];
- /* Relocation type. */
- unsigned char l_rtype[2];
- /* Section number being relocated. */
- unsigned char l_rsecnm[2];
-};
-
-#endif /* OLDFORMAT */
-
-/* The external format of the fixed header. */
-
-typedef struct nlm32_powerpc_external_fixed_header
-{
-
- /* The signature field identifies the file as an NLM. It must contain
- the signature string, which depends upon the NLM target. */
-
- unsigned char signature[24];
-
- /* The version of the header. At this time, the highest version number
- is 4. */
-
- unsigned char version[4];
-
- /* The name of the module, which must be a DOS name (1-8 characters followed
- by a period and a 1-3 character extension). The first byte is the byte
- length of the name and the last byte is a null terminator byte. This
- field is fixed length, and any unused bytes should be null bytes. The
- value is set by the OUTPUT keyword to NLMLINK. */
-
- unsigned char moduleName[14];
-
- /* Padding to make it come out correct. */
-
- unsigned char pad1[2];
-
- /* The byte offset of the code image from the start of the file. */
-
- unsigned char codeImageOffset[4];
-
- /* The size of the code image, in bytes. */
-
- unsigned char codeImageSize[4];
-
- /* The byte offset of the data image from the start of the file. */
-
- unsigned char dataImageOffset[4];
-
- /* The size of the data image, in bytes. */
-
- unsigned char dataImageSize[4];
-
- /* The size of the uninitialized data region that the loader is to be
- allocated at load time. Uninitialized data follows the initialized
- data in the NLM address space. */
-
- unsigned char uninitializedDataSize[4];
-
- /* The byte offset of the custom data from the start of the file. The
- custom data is set by the CUSTOM keyword to NLMLINK. It is possible
- for this to be EOF if there is no custom data. */
-
- unsigned char customDataOffset[4];
-
- /* The size of the custom data, in bytes. */
-
- unsigned char customDataSize[4];
-
- /* The byte offset of the module dependencies from the start of the file.
- The module dependencies are determined by the MODULE keyword in
- NLMLINK. */
-
- unsigned char moduleDependencyOffset[4];
-
- /* The number of module dependencies at the moduleDependencyOffset. */
-
- unsigned char numberOfModuleDependencies[4];
-
- /* The byte offset of the relocation fixup data from the start of the file */
-
- unsigned char relocationFixupOffset[4];
-
- unsigned char numberOfRelocationFixups[4];
-
- unsigned char externalReferencesOffset[4];
-
- unsigned char numberOfExternalReferences[4];
-
- unsigned char publicsOffset[4];
-
- unsigned char numberOfPublics[4];
-
- /* The byte offset of the internal debug info from the start of the file.
- It is possible for this to be EOF if there is no debug info. */
-
- unsigned char debugInfoOffset[4];
-
- unsigned char numberOfDebugRecords[4];
-
- unsigned char codeStartOffset[4];
-
- unsigned char exitProcedureOffset[4];
-
- unsigned char checkUnloadProcedureOffset[4];
-
- unsigned char moduleType[4];
-
- unsigned char flags[4];
-
-} Nlm32_powerpc_External_Fixed_Header;
diff --git a/include/nlm/sparc32-ext.h b/include/nlm/sparc32-ext.h
deleted file mode 100644
index a5c78e34b..000000000
--- a/include/nlm/sparc32-ext.h
+++ /dev/null
@@ -1,121 +0,0 @@
-/* SPARC NLM (NetWare Loadable Module) support for BFD.
- Copyright 1993, 2005, 2010 Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-/* The external format of the fixed header. */
-
-typedef struct nlm32_sparc_external_fixed_header
-{
-
- /* The signature field identifies the file as an NLM. It must contain
- the signature string, which depends upon the NLM target. */
-
- unsigned char signature[24];
-
- /* The version of the header. At this time, the highest version number
- is 4. */
-
- unsigned char version[4];
-
- /* The name of the module, which must be a DOS name (1-8 characters followed
- by a period and a 1-3 character extension). The first byte is the byte
- length of the name and the last byte is a null terminator byte. This
- field is fixed length, and any unused bytes should be null bytes. The
- value is set by the OUTPUT keyword to NLMLINK. */
-
- unsigned char moduleName[14];
-
- /* Padding to make it come out correct. */
-
- unsigned char pad1[2];
-
- /* The byte offset of the code image from the start of the file. */
-
- unsigned char codeImageOffset[4];
-
- /* The size of the code image, in bytes. */
-
- unsigned char codeImageSize[4];
-
- /* The byte offset of the data image from the start of the file. */
-
- unsigned char dataImageOffset[4];
-
- /* The size of the data image, in bytes. */
-
- unsigned char dataImageSize[4];
-
- /* The size of the uninitialized data region that the loader is to be
- allocated at load time. Uninitialized data follows the initialized
- data in the NLM address space. */
-
- unsigned char uninitializedDataSize[4];
-
- /* The byte offset of the custom data from the start of the file. The
- custom data is set by the CUSTOM keyword to NLMLINK. It is possible
- for this to be EOF if there is no custom data. */
-
- unsigned char customDataOffset[4];
-
- /* The size of the custom data, in bytes. */
-
- unsigned char customDataSize[4];
-
- /* The byte offset of the module dependencies from the start of the file.
- The module dependencies are determined by the MODULE keyword in
- NLMLINK. */
-
- unsigned char moduleDependencyOffset[4];
-
- /* The number of module dependencies at the moduleDependencyOffset. */
-
- unsigned char numberOfModuleDependencies[4];
-
- /* The byte offset of the relocation fixup data from the start of the file */
-
- unsigned char relocationFixupOffset[4];
-
- unsigned char numberOfRelocationFixups[4];
-
- unsigned char externalReferencesOffset[4];
-
- unsigned char numberOfExternalReferences[4];
-
- unsigned char publicsOffset[4];
-
- unsigned char numberOfPublics[4];
-
- /* The byte offset of the internal debug info from the start of the file.
- It is possible for this to be EOF if there is no debug info. */
-
- unsigned char debugInfoOffset[4];
-
- unsigned char numberOfDebugRecords[4];
-
- unsigned char codeStartOffset[4];
-
- unsigned char exitProcedureOffset[4];
-
- unsigned char checkUnloadProcedureOffset[4];
-
- unsigned char moduleType[4];
-
- unsigned char flags[4];
-
-} Nlm32_sparc_External_Fixed_Header;
diff --git a/include/oasys.h b/include/oasys.h
deleted file mode 100644
index 92d5c266f..000000000
--- a/include/oasys.h
+++ /dev/null
@@ -1,192 +0,0 @@
-/* Oasys object format header file for BFD.
-
- Copyright 2001, 2010 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 3, 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., 51 Franklin Street - Fifth Floor,
- Boston, MA 02110-1301, USA.
-
- Contributed by Cygnus Support. */
-
-#define OASYS_MAX_SEC_COUNT 16
-/* **** */
-
-typedef struct oasys_archive_header
- {
- unsigned int version;
- char create_date[12];
- char revision_date[12];
- unsigned int mod_count;
- file_ptr mod_tbl_offset;
- unsigned int sym_tbl_size;
- unsigned int sym_count;
- file_ptr sym_tbl_offset;
- unsigned int xref_count;
- file_ptr xref_lst_offset;
- }
-oasys_archive_header_type;
-
-typedef struct oasys_extarchive_header
- {
- bfd_byte version[4];
- bfd_byte create_date[12];
- bfd_byte revision_date[12];
- bfd_byte mod_count[4];
- bfd_byte mod_tbl_offset[4];
- bfd_byte sym_tbl_size[4];
- bfd_byte sym_count[4];
- bfd_byte sym_tbl_offset[4];
- bfd_byte xref_count[4];
- bfd_byte xref_lst_offset[4];
- }
-oasys_extarchive_header_type;
-
-typedef struct oasys_module_table
- {
- int mod_number;
- char mod_date[12];
- unsigned int mod_size;
- unsigned int dep_count;
- unsigned int depee_count;
- file_ptr file_offset;
- unsigned int sect_count;
- char *module_name;
- unsigned int module_name_size;
- }
-oasys_module_table_type;
-
-typedef struct oasys_extmodule_table_a
- {
- bfd_byte mod_number[4];
- bfd_byte mod_date[12];
- bfd_byte mod_size[4];
- bfd_byte dep_count[4];
- bfd_byte depee_count[4];
- bfd_byte sect_count[4];
- bfd_byte file_offset[4];
- bfd_byte mod_name[32];
- }
-oasys_extmodule_table_type_a_type;
-
-typedef struct oasys_extmodule_table_b
- {
- bfd_byte mod_number[4];
- bfd_byte mod_date[12];
- bfd_byte mod_size[4];
- bfd_byte dep_count[4];
- bfd_byte depee_count[4];
- bfd_byte sect_count[4];
- bfd_byte file_offset[4];
- bfd_byte mod_name_length[4];
- }
-oasys_extmodule_table_type_b_type;
-
-typedef enum oasys_record
- {
- oasys_record_is_end_enum = 0,
- oasys_record_is_data_enum = 1,
- oasys_record_is_symbol_enum = 2,
- oasys_record_is_header_enum = 3,
- oasys_record_is_named_section_enum = 4,
- oasys_record_is_com_enum = 5,
- oasys_record_is_debug_enum = 6,
- oasys_record_is_section_enum = 7,
- oasys_record_is_debug_file_enum = 8,
- oasys_record_is_module_enum = 9,
- oasys_record_is_local_enum = 10
- }
-oasys_record_enum_type;
-
-typedef struct oasys_record_header
- {
- unsigned char length;
- unsigned char check_sum;
- unsigned char type;
- unsigned char fill;
- }
-oasys_record_header_type;
-
-typedef struct oasys_data_record
- {
- oasys_record_header_type header;
- unsigned char relb;
- bfd_byte addr[4];
- /* maximum total size of data record is 255 bytes */
- bfd_byte data[246];
- }
-oasys_data_record_type;
-
-typedef struct oasys_header_record
- {
- oasys_record_header_type header;
- unsigned char version_number;
- unsigned char rev_number;
- char module_name[26-6];
- char description[64-26];
- }
-oasys_header_record_type;
-
-#define OASYS_VERSION_NUMBER 0
-#define OASYS_REV_NUMBER 0
-
-typedef struct oasys_symbol_record
- {
- oasys_record_header_type header;
- unsigned char relb;
- bfd_byte value[4];
- bfd_byte refno[2];
- char name[64];
- }
-oasys_symbol_record_type;
-
-#define RELOCATION_PCREL_BIT 0x80
-#define RELOCATION_32BIT_BIT 0x40
-#define RELOCATION_TYPE_BITS 0x30
-#define RELOCATION_TYPE_ABS 0x00
-#define RELOCATION_TYPE_REL 0x10
-#define RELOCATION_TYPE_UND 0x20
-#define RELOCATION_TYPE_COM 0x30
-#define RELOCATION_SECT_BITS 0x0f
-
-typedef struct oasys_section_record
- {
- oasys_record_header_type header;
- unsigned char relb;
- bfd_byte value[4];
- bfd_byte vma[4];
- bfd_byte fill[3];
- }
-oasys_section_record_type;
-
-typedef struct oasys_end_record
- {
- oasys_record_header_type header;
- unsigned char relb;
- bfd_byte entry[4];
- bfd_byte fill[2];
- bfd_byte zero;
- }
-oasys_end_record_type;
-
-typedef union oasys_record_union
- {
- oasys_record_header_type header;
- oasys_data_record_type data;
- oasys_section_record_type section;
- oasys_symbol_record_type symbol;
- oasys_header_record_type first;
- oasys_end_record_type end;
- bfd_byte pad[256];
- }
-oasys_record_union_type;
diff --git a/include/objalloc.h b/include/objalloc.h
deleted file mode 100644
index 52857663b..000000000
--- a/include/objalloc.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/* objalloc.h -- routines to allocate memory for objects
- Copyright 1997-2012 Free Software Foundation, Inc.
- Written by Ian Lance Taylor, Cygnus Solutions.
-
-This program is free software; you can redistribute it and/or modify it
-under the terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option) any
-later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-#ifndef OBJALLOC_H
-#define OBJALLOC_H
-
-#include "ansidecl.h"
-
-/* These routines allocate space for an object. The assumption is
- that the object will want to allocate space as it goes along, but
- will never want to free any particular block. There is a function
- to free a block, which also frees all more recently allocated
- blocks. There is also a function to free all the allocated space.
-
- This is essentially a specialization of obstacks. The main
- difference is that a block may not be allocated a bit at a time.
- Another difference is that these routines are always built on top
- of malloc, and always pass an malloc failure back to the caller,
- unlike more recent versions of obstacks. */
-
-/* This is what an objalloc structure looks like. Callers should not
- refer to these fields, nor should they allocate these structure
- themselves. Instead, they should only create them via
- objalloc_init, and only access them via the functions and macros
- listed below. The structure is only defined here so that we can
- access it via macros. */
-
-struct objalloc
-{
- char *current_ptr;
- unsigned int current_space;
- void *chunks;
-};
-
-/* Work out the required alignment. */
-
-struct objalloc_align { char x; double d; };
-
-#if defined (__STDC__) && __STDC__
-#ifndef offsetof
-#include <stddef.h>
-#endif
-#endif
-#ifndef offsetof
-#define offsetof(TYPE, MEMBER) ((unsigned long) &((TYPE *)0)->MEMBER)
-#endif
-#define OBJALLOC_ALIGN offsetof (struct objalloc_align, d)
-
-/* Create an objalloc structure. Returns NULL if malloc fails. */
-
-extern struct objalloc *objalloc_create (void);
-
-/* Allocate space from an objalloc structure. Returns NULL if malloc
- fails. */
-
-extern void *_objalloc_alloc (struct objalloc *, unsigned long);
-
-/* The macro version of objalloc_alloc. We only define this if using
- gcc, because otherwise we would have to evaluate the arguments
- multiple times, or use a temporary field as obstack.h does. */
-
-#if defined (__GNUC__) && defined (__STDC__) && __STDC__
-
-/* NextStep 2.0 cc is really gcc 1.93 but it defines __GNUC__ = 2 and
- does not implement __extension__. But that compiler doesn't define
- __GNUC_MINOR__. */
-#if __GNUC__ < 2 || (__NeXT__ && !__GNUC_MINOR__)
-#define __extension__
-#endif
-
-#define objalloc_alloc(o, l) \
- __extension__ \
- ({ struct objalloc *__o = (o); \
- unsigned long __len = (l); \
- if (__len == 0) \
- __len = 1; \
- __len = (__len + OBJALLOC_ALIGN - 1) &~ (OBJALLOC_ALIGN - 1); \
- (__len != 0 && __len <= __o->current_space \
- ? (__o->current_ptr += __len, \
- __o->current_space -= __len, \
- (void *) (__o->current_ptr - __len)) \
- : _objalloc_alloc (__o, __len)); })
-
-#else /* ! __GNUC__ */
-
-#define objalloc_alloc(o, l) _objalloc_alloc ((o), (l))
-
-#endif /* ! __GNUC__ */
-
-/* Free an entire objalloc structure. */
-
-extern void objalloc_free (struct objalloc *);
-
-/* Free a block allocated by objalloc_alloc. This also frees all more
- recently allocated blocks. */
-
-extern void objalloc_free_block (struct objalloc *, void *);
-
-#endif /* OBJALLOC_H */
diff --git a/include/obstack.h b/include/obstack.h
deleted file mode 100644
index 23487ba4f..000000000
--- a/include/obstack.h
+++ /dev/null
@@ -1,545 +0,0 @@
-/* obstack.h - object stack macros
- Copyright 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1996, 1997, 1998,
- 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008
- Free Software Foundation, Inc.
-
-
- NOTE: The canonical source of this file is maintained with the GNU C Library.
- Bugs can be reported to bug-glibc@gnu.org.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by the
- Free Software Foundation; either version 2, or (at your option) any
- later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-/* Summary:
-
-All the apparent functions defined here are macros. The idea
-is that you would use these pre-tested macros to solve a
-very specific set of problems, and they would run fast.
-Caution: no side-effects in arguments please!! They may be
-evaluated MANY times!!
-
-These macros operate a stack of objects. Each object starts life
-small, and may grow to maturity. (Consider building a word syllable
-by syllable.) An object can move while it is growing. Once it has
-been "finished" it never changes address again. So the "top of the
-stack" is typically an immature growing object, while the rest of the
-stack is of mature, fixed size and fixed address objects.
-
-These routines grab large chunks of memory, using a function you
-supply, called `obstack_chunk_alloc'. On occasion, they free chunks,
-by calling `obstack_chunk_free'. You must define them and declare
-them before using any obstack macros.
-
-Each independent stack is represented by a `struct obstack'.
-Each of the obstack macros expects a pointer to such a structure
-as the first argument.
-
-One motivation for this package is the problem of growing char strings
-in symbol tables. Unless you are "fascist pig with a read-only mind"
---Gosper's immortal quote from HAKMEM item 154, out of context--you
-would not like to put any arbitrary upper limit on the length of your
-symbols.
-
-In practice this often means you will build many short symbols and a
-few long symbols. At the time you are reading a symbol you don't know
-how long it is. One traditional method is to read a symbol into a
-buffer, realloc()ating the buffer every time you try to read a symbol
-that is longer than the buffer. This is beaut, but you still will
-want to copy the symbol from the buffer to a more permanent
-symbol-table entry say about half the time.
-
-With obstacks, you can work differently. Use one obstack for all symbol
-names. As you read a symbol, grow the name in the obstack gradually.
-When the name is complete, finalize it. Then, if the symbol exists already,
-free the newly read name.
-
-The way we do this is to take a large chunk, allocating memory from
-low addresses. When you want to build a symbol in the chunk you just
-add chars above the current "high water mark" in the chunk. When you
-have finished adding chars, because you got to the end of the symbol,
-you know how long the chars are, and you can create a new object.
-Mostly the chars will not burst over the highest address of the chunk,
-because you would typically expect a chunk to be (say) 100 times as
-long as an average object.
-
-In case that isn't clear, when we have enough chars to make up
-the object, THEY ARE ALREADY CONTIGUOUS IN THE CHUNK (guaranteed)
-so we just point to it where it lies. No moving of chars is
-needed and this is the second win: potentially long strings need
-never be explicitly shuffled. Once an object is formed, it does not
-change its address during its lifetime.
-
-When the chars burst over a chunk boundary, we allocate a larger
-chunk, and then copy the partly formed object from the end of the old
-chunk to the beginning of the new larger chunk. We then carry on
-accreting characters to the end of the object as we normally would.
-
-A special macro is provided to add a single char at a time to a
-growing object. This allows the use of register variables, which
-break the ordinary 'growth' macro.
-
-Summary:
- We allocate large chunks.
- We carve out one object at a time from the current chunk.
- Once carved, an object never moves.
- We are free to append data of any size to the currently
- growing object.
- Exactly one object is growing in an obstack at any one time.
- You can run one obstack per control block.
- You may have as many control blocks as you dare.
- Because of the way we do it, you can `unwind' an obstack
- back to a previous state. (You may remove objects much
- as you would with a stack.)
-*/
-
-
-/* Don't do the contents of this file more than once. */
-
-#ifndef _OBSTACK_H
-#define _OBSTACK_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* We use subtraction of (char *) 0 instead of casting to int
- because on word-addressable machines a simple cast to int
- may ignore the byte-within-word field of the pointer. */
-
-#ifndef __PTR_TO_INT
-# define __PTR_TO_INT(P) ((P) - (char *) 0)
-#endif
-
-#ifndef __INT_TO_PTR
-# define __INT_TO_PTR(P) ((P) + (char *) 0)
-#endif
-
-/* We need the type of the resulting object. If __PTRDIFF_TYPE__ is
- defined, as with GNU C, use that; that way we don't pollute the
- namespace with <stddef.h>'s symbols. Otherwise, if <stddef.h> is
- available, include it and use ptrdiff_t. In traditional C, long is
- the best that we can do. */
-
-#ifdef __PTRDIFF_TYPE__
-# define PTR_INT_TYPE __PTRDIFF_TYPE__
-#else
-# ifdef HAVE_STDDEF_H
-# include <stddef.h>
-# define PTR_INT_TYPE ptrdiff_t
-# else
-# define PTR_INT_TYPE long
-# endif
-#endif
-
-#if defined _LIBC || defined HAVE_STRING_H
-# include <string.h>
-# define _obstack_memcpy(To, From, N) memcpy ((To), (From), (N))
-#else
-# ifdef memcpy
-# define _obstack_memcpy(To, From, N) memcpy ((To), (char *)(From), (N))
-# else
-# define _obstack_memcpy(To, From, N) bcopy ((char *)(From), (To), (N))
-# endif
-#endif
-
-struct _obstack_chunk /* Lives at front of each chunk. */
-{
- char *limit; /* 1 past end of this chunk */
- struct _obstack_chunk *prev; /* address of prior chunk or NULL */
- char contents[4]; /* objects begin here */
-};
-
-struct obstack /* control current object in current chunk */
-{
- long chunk_size; /* preferred size to allocate chunks in */
- struct _obstack_chunk *chunk; /* address of current struct obstack_chunk */
- char *object_base; /* address of object we are building */
- char *next_free; /* where to add next char to current object */
- char *chunk_limit; /* address of char after current chunk */
- PTR_INT_TYPE temp; /* Temporary for some macros. */
- int alignment_mask; /* Mask of alignment for each object. */
- /* These prototypes vary based on `use_extra_arg', and we use
- casts to the prototypeless function type in all assignments,
- but having prototypes here quiets -Wstrict-prototypes. */
- struct _obstack_chunk *(*chunkfun) (void *, long);
- void (*freefun) (void *, struct _obstack_chunk *);
- void *extra_arg; /* first arg for chunk alloc/dealloc funcs */
- unsigned use_extra_arg:1; /* chunk alloc/dealloc funcs take extra arg */
- unsigned maybe_empty_object:1;/* There is a possibility that the current
- chunk contains a zero-length object. This
- prevents freeing the chunk if we allocate
- a bigger chunk to replace it. */
- unsigned alloc_failed:1; /* No longer used, as we now call the failed
- handler on error, but retained for binary
- compatibility. */
-};
-
-/* Declare the external functions we use; they are in obstack.c. */
-
-extern void _obstack_newchunk (struct obstack *, int);
-extern void _obstack_free (struct obstack *, void *);
-extern int _obstack_begin (struct obstack *, int, int,
- void *(*) (long), void (*) (void *));
-extern int _obstack_begin_1 (struct obstack *, int, int,
- void *(*) (void *, long),
- void (*) (void *, void *), void *);
-extern int _obstack_memory_used (struct obstack *);
-
-/* Do the function-declarations after the structs
- but before defining the macros. */
-
-void obstack_init (struct obstack *obstack);
-
-void * obstack_alloc (struct obstack *obstack, int size);
-
-void * obstack_copy (struct obstack *obstack, void *address, int size);
-void * obstack_copy0 (struct obstack *obstack, void *address, int size);
-
-void obstack_free (struct obstack *obstack, void *block);
-
-void obstack_blank (struct obstack *obstack, int size);
-
-void obstack_grow (struct obstack *obstack, void *data, int size);
-void obstack_grow0 (struct obstack *obstack, void *data, int size);
-
-void obstack_1grow (struct obstack *obstack, int data_char);
-void obstack_ptr_grow (struct obstack *obstack, void *data);
-void obstack_int_grow (struct obstack *obstack, int data);
-
-void * obstack_finish (struct obstack *obstack);
-
-int obstack_object_size (struct obstack *obstack);
-
-int obstack_room (struct obstack *obstack);
-void obstack_make_room (struct obstack *obstack, int size);
-void obstack_1grow_fast (struct obstack *obstack, int data_char);
-void obstack_ptr_grow_fast (struct obstack *obstack, void *data);
-void obstack_int_grow_fast (struct obstack *obstack, int data);
-void obstack_blank_fast (struct obstack *obstack, int size);
-
-void * obstack_base (struct obstack *obstack);
-void * obstack_next_free (struct obstack *obstack);
-int obstack_alignment_mask (struct obstack *obstack);
-int obstack_chunk_size (struct obstack *obstack);
-int obstack_memory_used (struct obstack *obstack);
-
-/* Error handler called when `obstack_chunk_alloc' failed to allocate
- more memory. This can be set to a user defined function. The
- default action is to print a message and abort. */
-extern void (*obstack_alloc_failed_handler) (void);
-
-/* Exit value used when `print_and_abort' is used. */
-extern int obstack_exit_failure;
-
-/* Pointer to beginning of object being allocated or to be allocated next.
- Note that this might not be the final address of the object
- because a new chunk might be needed to hold the final size. */
-
-#define obstack_base(h) ((h)->object_base)
-
-/* Size for allocating ordinary chunks. */
-
-#define obstack_chunk_size(h) ((h)->chunk_size)
-
-/* Pointer to next byte not yet allocated in current chunk. */
-
-#define obstack_next_free(h) ((h)->next_free)
-
-/* Mask specifying low bits that should be clear in address of an object. */
-
-#define obstack_alignment_mask(h) ((h)->alignment_mask)
-
-/* To prevent prototype warnings provide complete argument list in
- standard C version. */
-# define obstack_init(h) \
- _obstack_begin ((h), 0, 0, \
- (void *(*) (long)) obstack_chunk_alloc, (void (*) (void *)) obstack_chunk_free)
-
-# define obstack_begin(h, size) \
- _obstack_begin ((h), (size), 0, \
- (void *(*) (long)) obstack_chunk_alloc, (void (*) (void *)) obstack_chunk_free)
-
-# define obstack_specify_allocation(h, size, alignment, chunkfun, freefun) \
- _obstack_begin ((h), (size), (alignment), \
- (void *(*) (long)) (chunkfun), (void (*) (void *)) (freefun))
-
-# define obstack_specify_allocation_with_arg(h, size, alignment, chunkfun, freefun, arg) \
- _obstack_begin_1 ((h), (size), (alignment), \
- (void *(*) (void *, long)) (chunkfun), \
- (void (*) (void *, void *)) (freefun), (arg))
-
-# define obstack_chunkfun(h, newchunkfun) \
- ((h) -> chunkfun = (struct _obstack_chunk *(*)(void *, long)) (newchunkfun))
-
-# define obstack_freefun(h, newfreefun) \
- ((h) -> freefun = (void (*)(void *, struct _obstack_chunk *)) (newfreefun))
-
-#define obstack_1grow_fast(h,achar) (*((h)->next_free)++ = (achar))
-
-#define obstack_blank_fast(h,n) ((h)->next_free += (n))
-
-#define obstack_memory_used(h) _obstack_memory_used (h)
-
-#if defined __GNUC__ && defined __STDC__ && __STDC__
-/* NextStep 2.0 cc is really gcc 1.93 but it defines __GNUC__ = 2 and
- does not implement __extension__. But that compiler doesn't define
- __GNUC_MINOR__. */
-# if __GNUC__ < 2 || (__NeXT__ && !__GNUC_MINOR__)
-# define __extension__
-# endif
-
-/* For GNU C, if not -traditional,
- we can define these macros to compute all args only once
- without using a global variable.
- Also, we can avoid using the `temp' slot, to make faster code. */
-
-# define obstack_object_size(OBSTACK) \
- __extension__ \
- ({ struct obstack *__o = (OBSTACK); \
- (unsigned) (__o->next_free - __o->object_base); })
-
-# define obstack_room(OBSTACK) \
- __extension__ \
- ({ struct obstack *__o = (OBSTACK); \
- (unsigned) (__o->chunk_limit - __o->next_free); })
-
-# define obstack_make_room(OBSTACK,length) \
-__extension__ \
-({ struct obstack *__o = (OBSTACK); \
- int __len = (length); \
- if (__o->chunk_limit - __o->next_free < __len) \
- _obstack_newchunk (__o, __len); \
- (void) 0; })
-
-# define obstack_empty_p(OBSTACK) \
- __extension__ \
- ({ struct obstack *__o = (OBSTACK); \
- (__o->chunk->prev == 0 && __o->next_free - __o->chunk->contents == 0); })
-
-# define obstack_grow(OBSTACK,where,length) \
-__extension__ \
-({ struct obstack *__o = (OBSTACK); \
- int __len = (length); \
- if (__o->next_free + __len > __o->chunk_limit) \
- _obstack_newchunk (__o, __len); \
- _obstack_memcpy (__o->next_free, (where), __len); \
- __o->next_free += __len; \
- (void) 0; })
-
-# define obstack_grow0(OBSTACK,where,length) \
-__extension__ \
-({ struct obstack *__o = (OBSTACK); \
- int __len = (length); \
- if (__o->next_free + __len + 1 > __o->chunk_limit) \
- _obstack_newchunk (__o, __len + 1); \
- _obstack_memcpy (__o->next_free, (where), __len); \
- __o->next_free += __len; \
- *(__o->next_free)++ = 0; \
- (void) 0; })
-
-# define obstack_1grow(OBSTACK,datum) \
-__extension__ \
-({ struct obstack *__o = (OBSTACK); \
- if (__o->next_free + 1 > __o->chunk_limit) \
- _obstack_newchunk (__o, 1); \
- obstack_1grow_fast (__o, datum); \
- (void) 0; })
-
-/* These assume that the obstack alignment is good enough for pointers or ints,
- and that the data added so far to the current object
- shares that much alignment. */
-
-# define obstack_ptr_grow(OBSTACK,datum) \
-__extension__ \
-({ struct obstack *__o = (OBSTACK); \
- if (__o->next_free + sizeof (void *) > __o->chunk_limit) \
- _obstack_newchunk (__o, sizeof (void *)); \
- obstack_ptr_grow_fast (__o, datum); })
-
-# define obstack_int_grow(OBSTACK,datum) \
-__extension__ \
-({ struct obstack *__o = (OBSTACK); \
- if (__o->next_free + sizeof (int) > __o->chunk_limit) \
- _obstack_newchunk (__o, sizeof (int)); \
- obstack_int_grow_fast (__o, datum); })
-
-# define obstack_ptr_grow_fast(OBSTACK,aptr) \
-__extension__ \
-({ struct obstack *__o1 = (OBSTACK); \
- *(const void **) __o1->next_free = (aptr); \
- __o1->next_free += sizeof (const void *); \
- (void) 0; })
-
-# define obstack_int_grow_fast(OBSTACK,aint) \
-__extension__ \
-({ struct obstack *__o1 = (OBSTACK); \
- *(int *) __o1->next_free = (aint); \
- __o1->next_free += sizeof (int); \
- (void) 0; })
-
-# define obstack_blank(OBSTACK,length) \
-__extension__ \
-({ struct obstack *__o = (OBSTACK); \
- int __len = (length); \
- if (__o->chunk_limit - __o->next_free < __len) \
- _obstack_newchunk (__o, __len); \
- obstack_blank_fast (__o, __len); \
- (void) 0; })
-
-# define obstack_alloc(OBSTACK,length) \
-__extension__ \
-({ struct obstack *__h = (OBSTACK); \
- obstack_blank (__h, (length)); \
- obstack_finish (__h); })
-
-# define obstack_copy(OBSTACK,where,length) \
-__extension__ \
-({ struct obstack *__h = (OBSTACK); \
- obstack_grow (__h, (where), (length)); \
- obstack_finish (__h); })
-
-# define obstack_copy0(OBSTACK,where,length) \
-__extension__ \
-({ struct obstack *__h = (OBSTACK); \
- obstack_grow0 (__h, (where), (length)); \
- obstack_finish (__h); })
-
-/* The local variable is named __o1 to avoid a name conflict
- when obstack_blank is called. */
-# define obstack_finish(OBSTACK) \
-__extension__ \
-({ struct obstack *__o1 = (OBSTACK); \
- void *value; \
- value = (void *) __o1->object_base; \
- if (__o1->next_free == value) \
- __o1->maybe_empty_object = 1; \
- __o1->next_free \
- = __INT_TO_PTR ((__PTR_TO_INT (__o1->next_free)+__o1->alignment_mask)\
- & ~ (__o1->alignment_mask)); \
- if (__o1->next_free - (char *)__o1->chunk \
- > __o1->chunk_limit - (char *)__o1->chunk) \
- __o1->next_free = __o1->chunk_limit; \
- __o1->object_base = __o1->next_free; \
- value; })
-
-# define obstack_free(OBSTACK, OBJ) \
-__extension__ \
-({ struct obstack *__o = (OBSTACK); \
- void *__obj = (void *) (OBJ); \
- if (__obj > (void *)__o->chunk && __obj < (void *)__o->chunk_limit) \
- __o->next_free = __o->object_base = (char *) __obj; \
- else (obstack_free) (__o, __obj); })
-
-#else /* not __GNUC__ or not __STDC__ */
-
-# define obstack_object_size(h) \
- (unsigned) ((h)->next_free - (h)->object_base)
-
-# define obstack_room(h) \
- (unsigned) ((h)->chunk_limit - (h)->next_free)
-
-# define obstack_empty_p(h) \
- ((h)->chunk->prev == 0 && (h)->next_free - (h)->chunk->contents == 0)
-
-/* Note that the call to _obstack_newchunk is enclosed in (..., 0)
- so that we can avoid having void expressions
- in the arms of the conditional expression.
- Casting the third operand to void was tried before,
- but some compilers won't accept it. */
-
-# define obstack_make_room(h,length) \
-( (h)->temp = (length), \
- (((h)->next_free + (h)->temp > (h)->chunk_limit) \
- ? (_obstack_newchunk ((h), (h)->temp), 0) : 0))
-
-# define obstack_grow(h,where,length) \
-( (h)->temp = (length), \
- (((h)->next_free + (h)->temp > (h)->chunk_limit) \
- ? (_obstack_newchunk ((h), (h)->temp), 0) : 0), \
- _obstack_memcpy ((h)->next_free, (where), (h)->temp), \
- (h)->next_free += (h)->temp)
-
-# define obstack_grow0(h,where,length) \
-( (h)->temp = (length), \
- (((h)->next_free + (h)->temp + 1 > (h)->chunk_limit) \
- ? (_obstack_newchunk ((h), (h)->temp + 1), 0) : 0), \
- _obstack_memcpy ((h)->next_free, (where), (h)->temp), \
- (h)->next_free += (h)->temp, \
- *((h)->next_free)++ = 0)
-
-# define obstack_1grow(h,datum) \
-( (((h)->next_free + 1 > (h)->chunk_limit) \
- ? (_obstack_newchunk ((h), 1), 0) : 0), \
- obstack_1grow_fast (h, datum))
-
-# define obstack_ptr_grow(h,datum) \
-( (((h)->next_free + sizeof (char *) > (h)->chunk_limit) \
- ? (_obstack_newchunk ((h), sizeof (char *)), 0) : 0), \
- obstack_ptr_grow_fast (h, datum))
-
-# define obstack_int_grow(h,datum) \
-( (((h)->next_free + sizeof (int) > (h)->chunk_limit) \
- ? (_obstack_newchunk ((h), sizeof (int)), 0) : 0), \
- obstack_int_grow_fast (h, datum))
-
-# define obstack_ptr_grow_fast(h,aptr) \
- (((const void **) ((h)->next_free += sizeof (void *)))[-1] = (aptr))
-
-# define obstack_int_grow_fast(h,aint) \
- (((int *) ((h)->next_free += sizeof (int)))[-1] = (aptr))
-
-# define obstack_blank(h,length) \
-( (h)->temp = (length), \
- (((h)->chunk_limit - (h)->next_free < (h)->temp) \
- ? (_obstack_newchunk ((h), (h)->temp), 0) : 0), \
- obstack_blank_fast (h, (h)->temp))
-
-# define obstack_alloc(h,length) \
- (obstack_blank ((h), (length)), obstack_finish ((h)))
-
-# define obstack_copy(h,where,length) \
- (obstack_grow ((h), (where), (length)), obstack_finish ((h)))
-
-# define obstack_copy0(h,where,length) \
- (obstack_grow0 ((h), (where), (length)), obstack_finish ((h)))
-
-# define obstack_finish(h) \
-( ((h)->next_free == (h)->object_base \
- ? (((h)->maybe_empty_object = 1), 0) \
- : 0), \
- (h)->temp = __PTR_TO_INT ((h)->object_base), \
- (h)->next_free \
- = __INT_TO_PTR ((__PTR_TO_INT ((h)->next_free)+(h)->alignment_mask) \
- & ~ ((h)->alignment_mask)), \
- (((h)->next_free - (char *) (h)->chunk \
- > (h)->chunk_limit - (char *) (h)->chunk) \
- ? ((h)->next_free = (h)->chunk_limit) : 0), \
- (h)->object_base = (h)->next_free, \
- (void *) __INT_TO_PTR ((h)->temp))
-
-# define obstack_free(h,obj) \
-( (h)->temp = (char *) (obj) - (char *) (h)->chunk, \
- (((h)->temp > 0 && (h)->temp < (h)->chunk_limit - (char *) (h)->chunk)\
- ? (((h)->next_free = (h)->object_base \
- = (h)->temp + (char *) (h)->chunk), 0) \
- : ((obstack_free) ((h), (h)->temp + (char *) (h)->chunk), 0)))
-
-#endif /* not __GNUC__ or not __STDC__ */
-
-#ifdef __cplusplus
-} /* C++ */
-#endif
-
-#endif /* obstack.h */
diff --git a/include/opcode/ChangeLog b/include/opcode/ChangeLog
deleted file mode 100644
index f645a7e7e..000000000
--- a/include/opcode/ChangeLog
+++ /dev/null
@@ -1,1916 +0,0 @@
-2013-10-14 Chao-ying Fu <Chao-ying.Fu@imgtec.com>
-
- * mips.h (mips_operand_type): Add OP_IMM_INDEX and OP_REG_INDEX.
- (mips_reg_operand_type): Add OP_REG_MSA and OP_REG_MSA_CTRL.
- For MIPS, add comments for +d, +e, +h, +k, +l, +n, +o, +u, +v, +w,
- +T, +U, +V, +W, +~, +!, +@, +#, +$, +%, +^, +&, +*, +|.
- For MIPS, update extension character sequences after +.
- (ASE_MSA): New define.
- (ASE_MSA64): New define.
- For microMIPS, add comments for +d, +e, +h, +k, +l, +n, +o, +u, +v, +w,
- +x, +T, +U, +V, +W, +~, +!, +@, +#, +$, +%, +^, +&, +*, +|.
- For microMIPS, update extension character sequences after +.
-
-2013-08-23 Yuri Chornoivan <yurchor@ukr.net>
-
- PR binutils/15834
- * i960.h: Fix typos.
-
-2013-08-19 Richard Sandiford <rdsandiford@googlemail.com>
-
- * mips.h: Remove references to "+I" and imm2_expr.
-
-2013-08-19 Richard Sandiford <rdsandiford@googlemail.com>
-
- * mips.h (M_DEXT, M_DINS): Delete.
-
-2013-08-19 Richard Sandiford <rdsandiford@googlemail.com>
-
- * mips.h (OP_OPTIONAL_REG): New mips_operand_type.
- (mips_optional_operand_p): New function.
-
-2013-08-04 Jürgen Urban <JuergenUrban@gmx.de>
- Richard Sandiford <rdsandiford@googlemail.com>
-
- * mips.h: Document new VU0 operand characters.
- (OP_VU0_SUFFIX, OP_VU0_MATCH_SUFFIX): New mips_operand_types.
- (OP_REG_VF, OP_REG_VI, OP_REG_R5900_I, OP_REG_R5900_Q, OP_REG_R5900_R)
- (OP_REG_R5900_ACC): New mips_reg_operand_types.
- (INSN2_VU0_CHANNEL_SUFFIX): New macro.
- (mips_vu0_channel_mask): Declare.
-
-2013-08-03 Richard Sandiford <rdsandiford@googlemail.com>
-
- * mips.h (mips_pcrel_operand): Inherit from mips_int_operand.
- (mips_int_operand_min, mips_int_operand_max): New functions.
- (mips_decode_pcrel_operand): Use mips_decode_int_operand.
-
-2013-08-01 Richard Sandiford <rdsandiford@googlemail.com>
-
- * mips.h (mips_decode_reg_operand): New function.
- (INSN_WRITE_SHIFT, INSN_WRITE_1, INSN_WRITE_2, INSN_WRITE_ALL)
- (INSN_READ_SHIFT, INSN_READ_1, INSN_READ_2, INSN_READ_3, INSN_READ_4)
- (INSN_READ_ALL, INSN_READ_GPR_24, INSN_WRITE_GPR_24, INSN_UDI):
- New macros.
- (INSN_WRITE_GPR_D, INSN_WRITE_GPR_T, INSN_WRITE_FPR_D)
- (INSN_WRITE_FPR_S, INSN_WRITE_FPR_T, INSN_READ_GPR_S, INSN_READ_GPR_T)
- (INSN_READ_FPR_S, INSN_READ_FPR_T, INSN_READ_FPR_R, INSN_WRITE_GPR_S)
- (INSN2_WRITE_GPR_Z, INSN2_WRITE_FPR_Z, INSN2_READ_GPR_Z)
- (INSN2_READ_FPR_Z, INSN2_READ_GPR_D, INSN2_READ_FPR_D)
- (INSN2_WRITE_GPR_MB, INSN2_READ_GPR_MC, INSN2_MOD_GPR_MD)
- (INSN2_READ_GPR_ME, INSN2_MOD_GPR_MF, INSN2_READ_GPR_MG)
- (INSN2_READ_GPR_MJ, INSN2_WRITE_GPR_MJ, INSN2_READ_GPR_MP)
- (INSN2_WRITE_GPR_MP, INSN2_READ_GPR_MQ, INSN2_READ_GP)
- (INSN2_WRITE_GPR_MH, INSN2_READ_GPR_MMN): Delete. Renumber other
- macros to cover the gaps.
- (INSN2_MOD_SP): Replace with...
- (INSN2_WRITE_SP, INSN2_READ_SP): ...these new macros.
- (MIPS16_INSN_WRITE_X, MIPS16_INSN_WRITE_Y, MIPS16_INSN_WRITE_Z)
- (MIPS16_INSN_WRITE_T, MIPS16_INSN_WRITE_31, MIPS16_INSN_WRITE_GPR_Y)
- (MIPS16_INSN_READ_X, MIPS16_INSN_READ_Y, MIPS16_INSN_READ_Z)
- (MIPS16_INSN_READ_T, MIPS16_INSN_READ_SP, MIPS16_INSN_READ_GPR_X):
- Delete.
-
-2013-08-01 Richard Sandiford <rdsandiford@googlemail.com>
-
- * mips.h (MIPS16_INSN_WRITE_SP, MIPS16_INSN_READ_31)
- (MIPS16_INSN_READ_PC, MIPS16_INSN_UNCOND_BRANCH)
- (MIPS16_INSN_COND_BRANCH): Delete.
-
-2013-07-24 Anna Tikhonova <anna.tikhonova@intel.com>
- Kirill Yukhin <kirill.yukhin@intel.com>
- Michael Zolotukhin <michael.v.zolotukhin@intel.com>
-
- * i386.h (BND_PREFIX_OPCODE): New.
-
-2013-07-14 Richard Sandiford <rdsandiford@googlemail.com>
-
- * mips.h (mips_operand_type): Add OP_ENTRY_EXIT_LIST and
- OP_SAVE_RESTORE_LIST.
- (decode_mips16_operand): Declare.
-
-2013-07-14 Richard Sandiford <rdsandiford@googlemail.com>
-
- * mips.h (mips_operand_type, mips_reg_operand_type): New enums.
- (mips_operand, mips_int_operand, mips_mapped_int_operand)
- (mips_msb_operand, mips_reg_operand, mips_reg_pair_operand)
- (mips_pcrel_operand): New structures.
- (mips_insert_operand, mips_extract_operand, mips_signed_operand)
- (mips_decode_int_operand, mips_decode_pcrel_operand): New functions.
- (decode_mips_operand, decode_micromips_operand): Declare.
-
-2013-07-14 Richard Sandiford <rdsandiford@googlemail.com>
-
- * mips.h: Document MIPS16 "I" opcode.
-
-2013-07-07 Richard Sandiford <rdsandiford@googlemail.com>
-
- * mips.h (M_ACLR_OB, M_ASET_OB, M_CACHE_OB, M_CACHEE_OB, M_L_DOB)
- (M_LB_A, M_LBE_OB, M_LBU_A, M_LBUE_OB, M_LD_A, M_LD_OB, M_LDC2_OB)
- (M_LDL_OB, M_LDM_OB, M_LDP_OB, M_LDR_OB, M_LH_A, M_LHE_OB, M_LHU_A)
- (M_LHUE_OB, M_LL_OB, M_LLD_OB, M_LLE_OB, M_LS_A, M_LW_A, M_LWE_OB)
- (M_LWC0_A, M_LWC1_A, M_LWC2_A, M_LWC2_OB, M_LWC3_A, M_LWL_A, M_LWL_OB)
- (M_LWLE_OB, M_LWM_OB, M_LWP_OB, M_LWR_A, M_LWR_OB, M_LWRE_OB, M_LWU_OB)
- (M_PREF_OB, M_PREFE_OB, M_S_DOB, M_SAA_OB, M_SAAD_OB, M_SC_OB)
- (M_SCD_OB, M_SCE_OB, M_SD_A, M_SD_OB, M_SDC2_OB, M_SDL_OB, M_SDM_OB)
- (M_SDP_OB, M_SDR_OB, M_SB_A, M_SBE_OB, M_SH_A, M_SHE_OB, M_SW_A)
- (M_SWE_OB, M_SWC0_A, M_SWC1_A, M_SWC2_A, M_SWC2_OB, M_SWC3_A, M_SWL_A)
- (M_SWL_OB, M_SWLE_OB, M_SWM_OB, M_SWP_OB, M_SWR_A, M_SWR_OB, M_SWRE_OB)
- (M_ULD, M_ULH, M_ULHU, M_ULW, M_USH, M_USW, M_USD): Delete.
- (M_ULD_A, M_ULH_A, M_ULHU_A, M_ULW_A, M_USH_A, M_USW_A, M_USD_A):
- Rename to...
- (M_ULD_AB, M_ULH_AB, M_ULHU_AB, M_ULW_AB, M_USH_AB, M_USW_AB)
- (M_USD_AB): ...these.
-
-2013-07-07 Richard Sandiford <rdsandiford@googlemail.com>
-
- * mips.h: Remove documentation of "[" and "]". Update documentation
- of "k" and the MDMX formats.
-
-2013-07-07 Richard Sandiford <rdsandiford@googlemail.com>
-
- * mips.h: Update documentation of "+s" and "+S".
-
-2013-07-07 Richard Sandiford <rdsandiford@googlemail.com>
-
- * mips.h: Document "+i".
-
-2013-07-07 Richard Sandiford <rdsandiford@googlemail.com>
-
- * mips.h: Remove "mi" documentation. Update "mh" documentation.
- (OP_MASK_MI, OP_SH_MI, MICROMIPSOP_MASK_MI, MICROMIPSOP_MASK_MI):
- Delete.
- (INSN2_WRITE_GPR_MHI): Rename to...
- (INSN2_WRITE_GPR_MH): ...this.
-
-2013-07-07 Richard Sandiford <rdsandiford@googlemail.com>
-
- * mips.h: Remove documentation of "+D" and "+T".
-
-2013-06-26 Richard Sandiford <rdsandiford@googlemail.com>
-
- * mips.h: Fix comment for "1": it is now STYPE rather than SHAMT.
- Use "source" rather than "destination" for microMIPS "G".
-
-2013-06-25 Maciej W. Rozycki <macro@codesourcery.com>
-
- * mips.h: Add M_JRADDIUSP, M_JRC and M_MOVEP anonymous enum
- values.
-
-2013-06-23 Richard Sandiford <rdsandiford@googlemail.com>
-
- * mips.h: Fix comment typo: "G" is _RS rather than _RD for microMIPS.
-
-2013-06-17 Catherine Moore <clm@codesourcery.com>
- Maciej W. Rozycki <macro@codesourcery.com>
- Chao-Ying Fu <fu@mips.com>
-
- * mips.h (OP_SH_EVAOFFSET): Define.
- (OP_MASK_EVAOFFSET): Define.
- (INSN_ASE_MASK): Delete.
- (ASE_EVA): Define.
- (M_CACHEE_AB, M_CACHEE_OB): New.
- (M_LBE_OB, M_LBE_AB): New.
- (M_LBUE_OB, M_LBUE_AB): New.
- (M_LHE_OB, M_LHE_AB): New.
- (M_LHUE_OB, M_LHUE_AB): New.
- (M_LLE_AB, M_LLE_OB): New.
- (M_LWE_OB, M_LWE_AB): New.
- (M_LWLE_AB, M_LWLE_OB): New.
- (M_LWRE_AB, M_LWRE_OB): New.
- (M_PREFE_AB, M_PREFE_OB): New.
- (M_SCE_AB, M_SCE_OB): New.
- (M_SBE_OB, M_SBE_AB): New.
- (M_SHE_OB, M_SHE_AB): New.
- (M_SWE_OB, M_SWE_AB): New.
- (M_SWLE_AB, M_SWLE_OB): New.
- (M_SWRE_AB, M_SWRE_OB): New.
- (MICROMIPSOP_SH_EVAOFFSET): Define.
- (MICROMIPSOP_MASK_EVAOFFSET): Define.
-
-2013-06-12 Sandra Loosemore <sandra@codesourcery.com>
-
- * nios2.h (OP_MATCH_ERET): Correct eret encoding.
-
-2013-05-22 Jürgen Urban <JuergenUrban@gmx.de>
-
- * mips.h (M_LQC2_AB, M_SQC2_AB): New macros.
-
-2013-05-09 Andrew Pinski <apinski@cavium.com>
-
- * mips.h (OP_MASK_CODE10): Correct definition.
- (OP_SH_CODE10): Likewise.
- Add a comment that "+J" is used now for OP_*CODE10.
- (INSN_ASE_MASK): Update.
- (INSN_VIRT): New macro.
- (INSN_VIRT64): New macro
-
-2013-05-02 Nick Clifton <nickc@redhat.com>
-
- * msp430.h: Add patterns for MSP430X instructions.
-
-2013-04-06 David S. Miller <davem@davemloft.net>
-
- * sparc.h (F_PREFERRED): Define.
- (F_PREF_ALIAS): Define.
-
-2013-04-03 Nick Clifton <nickc@redhat.com>
-
- * v850.h (V850_INVERSE_PCREL): Define.
-
-2013-03-27 Alexis Deruelle <alexis.deruelle@gmail.com>
-
- PR binutils/15068
- * tic6x-opcode-table.h: Fix patterns for add, ldnw and xor.
-
-2013-03-27 Alexis Deruelle <alexis.deruelle@gmail.com>
-
- PR binutils/15068
- * tic6xc-insn-formats.h (FLD): Add use of bitfield array.
- Add 16-bit opcodes.
- * tic6xc-opcode-table.h: Add 16-bit insns.
- * tic6x.h: Add support for 16-bit insns.
-
-2013-03-21 Michael Schewe <michael.schewe@gmx.net>
-
- * h8300.h: Add MEMRELAX flag for mov.b/w/l @(d:32,ERs),Rd
- and mov.b/w/l Rs,@(d:32,ERd).
-
-2013-03-20 Alexis Deruelle <alexis.deruelle@gmail.com>
-
- PR gas/15082
- * tic6x-opcode-table.h: Rename mpydp's specific operand type macro
- from ORREGD1324 to ORXREGD1324 and make it cross-path-able through
- tic6x_operand_xregpair operand coding type.
- Make mpydp instruction cross-path-able, ie: remove the FIXed 'x'
- opcode field, usu ORXREGD1324 for the src2 operand and remove the
- TIC6X_FLAG_NO_CROSS.
-
-2013-03-20 Alexis Deruelle <alexis.deruelle@gmail.com>
-
- PR gas/15095
- * tic6x.h (enum tic6x_coding_method): Add
- tic6x_coding_dreg_(msb|lsb) field coding type in order to encode
- separately the msb and lsb of a register pair. This is needed to
- encode the opcodes in the same way as TI assembler does.
- * tic6x-opcode-table.h: Modify absdp, dpint, dpsp, dptrunc, rcpdp
- and rsqrdp opcodes to use the new field coding types.
-
-2013-03-11 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
-
- * arm.h (CRC_EXT_ARMV8): New constant.
- (ARCH_CRC_ARMV8): New macro.
-
-2013-02-28 Yufeng Zhang <yufeng.zhang@arm.com>
-
- * aarch64.h (AARCH64_FEATURE_CRC): New macro.
-
-2013-02-06 Sandra Loosemore <sandra@codesourcery.com>
- Andrew Jenner <andrew@codesourcery.com>
-
- Based on patches from Altera Corporation.
-
- * nios2.h: New file.
-
-2013-01-30 Yufeng Zhang <yufeng.zhang@arm.com>
-
- * aarch64.h (aarch64_op): Add OP_SXTL, OP_SXTL2, OP_UXTL and OP_UXTL2.
-
-2013-01-28 Alexis Deruelle <alexis.deruelle@gmail.com>
-
- PR gas/15069
- * tic6x-opcode-table.h: Fix encoding of BNOP instruction.
-
-2013-01-24 Nick Clifton <nickc@redhat.com>
-
- * v850.h: Add e3v5 support.
-
-2013-01-17 Yufeng Zhang <yufeng.zhang@arm.com>
-
- * aarch64.h (aarch64_op): Remove OP_V_MOVI_B.
-
-2013-01-10 Peter Bergner <bergner@vnet.ibm.com>
-
- * ppc.h (PPC_OPCODE_POWER8): New define.
- (PPC_OPCODE_HTM): Likewise.
-
-2013-01-10 Will Newton <will.newton@imgtec.com>
-
- * metag.h: New file.
-
-2013-01-07 Kaushik Phatak <kaushik.phatak@kpitcummins.com>
-
- * cr16.h (make_instruction): Rename to cr16_make_instruction.
- (match_opcode): Rename to cr16_match_opcode.
-
-2013-01-04 Juergen Urban <JuergenUrban@gmx.de>
-
- * mips.h: Add support for r5900 instructions including lq and sq.
-
-2013-01-02 Kaushik Phatak <kaushik.phatak@kpitcummins.com>
-
- * cr16.h (dwordU,wordU): Moved typedefs from cr16-dis.c
- (make_instruction,match_opcode): Added function prototypes.
- (cr16_words,cr16_allWords,cr16_currInsn): Declare as extern.
-
-2012-11-23 Alan Modra <amodra@gmail.com>
-
- * ppc.h (ppc_parse_cpu): Update prototype.
-
-2012-10-14 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
-
- * hppa.h (pa_opcodes): Use "cX" completer instead of "cx" in fstqx
- opcodes. Likewise, use "cM" instead of "cm" in fstqs opcodes.
-
-2012-10-04 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
-
- * s390.h (s390_opcode_cpu_val): Add S390_OPCODE_ZEC12.
-
-2012-09-04 Sergey A. Guriev <sergey.a.guriev@intel.com>
-
- * ia64.h (ia64_opnd): Add new operand types.
-
-2012-08-21 David S. Miller <davem@davemloft.net>
-
- * sparc.h (F3F4): New macro.
-
-2012-08-13 Ian Bolton <ian.bolton@arm.com>
- Laurent Desnogues <laurent.desnogues@arm.com>
- Jim MacArthur <jim.macarthur@arm.com>
- Marcus Shawcroft <marcus.shawcroft@arm.com>
- Nigel Stephens <nigel.stephens@arm.com>
- Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
- Richard Earnshaw <rearnsha@arm.com>
- Sofiane Naci <sofiane.naci@arm.com>
- Tejas Belagod <tejas.belagod@arm.com>
- Yufeng Zhang <yufeng.zhang@arm.com>
-
- * aarch64.h: New file.
-
-2012-08-13 Richard Sandiford <rdsandiford@googlemail.com>
- Maciej W. Rozycki <macro@codesourcery.com>
-
- * mips.h (mips_opcode): Add the exclusions field.
- (OPCODE_IS_MEMBER): Remove macro.
- (cpu_is_member): New inline function.
- (opcode_is_member): Likewise.
-
-2012-07-31 Chao-Ying Fu <fu@mips.com>
- Catherine Moore <clm@codesourcery.com>
- Maciej W. Rozycki <macro@codesourcery.com>
-
- * mips.h: Document microMIPS DSP ASE usage.
- (MICROMIPSOP_MASK_DSPACC, MICROMIPSOP_SH_DSPACC): Update for
- microMIPS DSP ASE support.
- (MICROMIPSOP_MASK_DSPSFT, MICROMIPSOP_SH_DSPSFT): Likewise.
- (MICROMIPSOP_MASK_SA3, MICROMIPSOP_SH_SA3): Likewise.
- (MICROMIPSOP_MASK_SA4, MICROMIPSOP_SH_SA4): Likewise.
- (MICROMIPSOP_MASK_IMM8, MICROMIPSOP_SH_IMM8): Likewise.
- (MICROMIPSOP_MASK_IMM10, MICROMIPSOP_SH_IMM10): Likewise.
- (MICROMIPSOP_MASK_WRDSP, MICROMIPSOP_SH_WRDSP): Likewise.
- (MICROMIPSOP_MASK_BP, MICROMIPSOP_SH_BP): Likewise.
-
-2012-07-06 Maciej W. Rozycki <macro@codesourcery.com>
-
- * mips.h: Fix a typo in description.
-
-2012-06-07 Georg-Johann Lay <avr@gjlay.de>
-
- * avr.h: (AVR_ISA_XCH): New define.
- (AVR_ISA_XMEGA): Use it.
- (XCH, LAS, LAT, LAC): New XMEGA opcodes.
-
-2012-05-15 James Murray <jsm@jsm-net.demon.co.uk>
-
- * m68hc11.h: Add XGate definitions.
- (struct m68hc11_opcode): Add xg_mask field.
-
-2012-05-14 Catherine Moore <clm@codesourcery.com>
- Maciej W. Rozycki <macro@codesourcery.com>
- Rhonda Wittels <rhonda@codesourcery.com>
-
- * ppc.h (PPC_OPCODE_VLE): New definition.
- (PPC_OP_SA): New macro.
- (PPC_OP_SE_VLE): New macro.
- (PPC_OP): Use a variable shift amount.
- (powerpc_operand): Update comments.
- (PPC_OPSHIFT_INV): New macro.
- (PPC_OPERAND_CR): Replace with...
- (PPC_OPERAND_CR_BIT): ...this and
- (PPC_OPERAND_CR_REG): ...this.
-
-
-2012-05-03 Sean Keys <skeys@ipdatasys.com>
-
- * xgate.h: Header file for XGATE assembler.
-
-2012-04-27 David S. Miller <davem@davemloft.net>
-
- * sparc.h: Document new arg code' )' for crypto RS3
- immediates.
-
- * sparc.h (struct sparc_opcode): New field 'hwcaps'.
- F_MUL32, F_DIV32, F_FDMULD, F_V8PLUS, F_POPC, F_VIS, F_VIS2,
- F_ASI_BLK_INIT, F_FMAF, F_VIS3, F_HPC, F_RANDOM, F_TRANS,
- F_FJFMAU, F_IMA, F_ASI_CACHE_SPARING, F_HWCAP_MASK): Delete.
- (HWCAP_MUL32, HWCAP_DIV32, HWCAP_FSMULD, HWCAP_V8PLUS, HWCAP_POPC,
- HWCAP_VIS, HWCAP_VIS2, HWCAP_ASI_BLK_INIT, HWCAP_FMAF,
- HWCAP_VIS3, HWCAP_HPC, HWCAP_RANDOM, HWCAP_TRANS, HWCAP_FJFMAU,
- HWCAP_IMA, HWCAP_ASI_CACHE_SPARING, HWCAP_AES, HWCAP_DES,
- HWCAP_KASUMI, HWCAP_CAMELLIA, HWCAP_MD5, HWCAP_SHA1,
- HWCAP_SHA256, HWCAP_SHA512, HWCAP_MPMUL, HWCAP_MONT, HWCAP_PAUSE,
- HWCAP_CBCOND, HWCAP_CRC32): New defines.
-
-2012-03-10 Edmar Wienskoski <edmar@freescale.com>
-
- * ppc.h: Add PPC_OPCODE_ALTIVEC2, PPC_OPCODE_E6500, PPC_OPCODE_TMR.
-
-2012-02-27 Alan Modra <amodra@gmail.com>
-
- * crx.h (cst4_map): Update declaration.
-
-2012-02-25 Walter Lee <walt@tilera.com>
-
- * tilegx.h (tilegx_mnemonic): Add TILEGX_OPC_LD4S_TLS,
- TILEGX_OPC_LD_TLS.
- * tilepro.h (tilepro_mnemonic): Add TILEPRO_OPC_LW_TLS,
- TILEPRO_OPC_LW_TLS_SN.
-
-2012-02-08 H.J. Lu <hongjiu.lu@intel.com>
-
- * i386.h (XACQUIRE_PREFIX_OPCODE): New.
- (XRELEASE_PREFIX_OPCODE): Likewise.
-
-2011-12-08 Andrew Pinski <apinski@cavium.com>
- Adam Nemet <anemet@caviumnetworks.com>
-
- * mips.h (INSN_CHIP_MASK): Update according to INSN_OCTEON2.
- (INSN_OCTEON2): New macro.
- (CPU_OCTEON2): New macro.
- (OPCODE_IS_MEMBER): Add Octeon2.
-
-2011-11-29 Andrew Pinski <apinski@cavium.com>
-
- * mips.h (INSN_CHIP_MASK): Update according to INSN_OCTEONP.
- (INSN_OCTEONP): New macro.
- (CPU_OCTEONP): New macro.
- (OPCODE_IS_MEMBER): Add Octeon+.
- (M_SAA_AB, M_SAAD_AB, M_SAA_OB, M_SAAD_OB): New enum values.
-
-2011-11-01 DJ Delorie <dj@redhat.com>
-
- * rl78.h: New file.
-
-2011-10-24 Maciej W. Rozycki <macro@codesourcery.com>
-
- * mips.h: Fix a typo in description.
-
-2011-09-21 David S. Miller <davem@davemloft.net>
-
- * sparc.h (struct sparc_opcode): Expand 'flags' to unsigned int.
- (F_MUL32, F_DIV32, F_FSMULD, F_V8PLUS, F_POPC, F_VIS, F_VIS2,
- F_ASI_BLK_INIT, F_FMAF, F_VIS3, F_HPC, F_RANDOM, F_TRANS,
- F_FJFMAU, F_IMA, F_ASI_CACHE_SPARING): New flag bits.
-
-2011-08-09 Chao-ying Fu <fu@mips.com>
- Maciej W. Rozycki <macro@codesourcery.com>
-
- * mips.h (OP_MASK_3BITPOS, OP_SH_3BITPOS): New macros.
- (OP_MASK_OFFSET12, OP_SH_OFFSET12): Redefine.
- (INSN_ASE_MASK): Add the MCU bit.
- (INSN_MCU): New macro.
- (M_ACLR_AB, M_ACLR_OB, M_ASET_AB, M_ASET_OB): New enum values.
- (MICROMIPSOP_MASK_3BITPOS, MICROMIPSOP_SH_3BITPOS): New macros.
-
-2011-08-09 Maciej W. Rozycki <macro@codesourcery.com>
-
- * mips.h (INSN_WRITE_GPR_S, INSN2_WRITE_GPR_MB): New macros.
- (INSN2_READ_GPR_MC, INSN2_READ_GPR_ME): Likewise.
- (INSN2_WRITE_GPR_MF, INSN2_READ_GPR_MG): Likewise.
- (INSN2_READ_GPR_MJ, INSN2_WRITE_GPR_MJ): Likewise.
- (INSN2_READ_GPR_MP, INSN2_WRITE_GPR_MP): Likewise.
- (INSN2_READ_GPR_MQ, INSN2_WRITE_GPR_MHI): Likewise.
- (INSN2_READ_GPR_MMN): Likewise.
- (INSN2_READ_FPR_D): Change the bit used.
- (INSN2_MOD_GPR_MD, INSN2_MOD_GPR_MF): Likewise.
- (INSN2_MOD_SP, INSN2_READ_GPR_31, INSN2_READ_GP): Likewise.
- (INSN2_READ_PC, INSN2_UNCOND_BRANCH): Likewise.
- (INSN2_COND_BRANCH): Likewise.
- (INSN2_WRITE_GPR_S, INSN2_MOD_GPR_MB): Remove macros.
- (INSN2_MOD_GPR_MC, INSN2_MOD_GPR_ME, INSN2_MOD_GPR_MG): Likewise.
- (INSN2_MOD_GPR_MJ, INSN2_MOD_GPR_MP, INSN2_MOD_GPR_MQ): Likewise.
- (INSN2_MOD_GPR_MHI, INSN2_MOD_GPR_MM): Likewise.
- (INSN2_MOD_GPR_MN): Likewise.
-
-2011-08-05 David S. Miller <davem@davemloft.net>
-
- * sparc.h: Document new format codes '4', '5', and '('.
- (OPF_LOW4, RS3): New macros.
-
-2011-08-03 Maciej W. Rozycki <macro@codesourcery.com>
-
- * mips.h: Document the use of FP_D in MIPS16 mode. Adjust the
- order of flags documented.
-
-2011-07-29 Maciej W. Rozycki <macro@codesourcery.com>
-
- * mips.h: Clarify the description of microMIPS instruction
- manipulation macros.
- (MICROMIPSOP_MASK_MAJOR, MICROMIPSOP_SH_MAJOR): Remove macros.
-
-2011-07-24 Chao-ying Fu <fu@mips.com>
- Maciej W. Rozycki <macro@codesourcery.com>
-
- * mips.h (OP_MASK_EXTLSB, OP_SH_EXTLSB): New macros.
- (OP_MASK_STYPE, OP_SH_STYPE): Likewise.
- (OP_MASK_CODE10, OP_SH_CODE10): Likewise.
- (OP_MASK_TRAP, OP_SH_TRAP): Likewise.
- (OP_MASK_OFFSET12, OP_SH_OFFSET12): Likewise.
- (OP_MASK_OFFSET10, OP_SH_OFFSET10): Likewise.
- (OP_MASK_RS3, OP_SH_RS3): Likewise.
- (OP_MASK_MB, OP_SH_MB, OP_MASK_MC, OP_SH_MC): Likewise.
- (OP_MASK_MD, OP_SH_MD, OP_MASK_ME, OP_SH_ME): Likewise.
- (OP_MASK_MF, OP_SH_MF, OP_MASK_MG, OP_SH_MG): Likewise.
- (OP_MASK_MJ, OP_SH_MJ, OP_MASK_ML, OP_SH_ML): Likewise.
- (OP_MASK_MP, OP_SH_MP, OP_MASK_MQ, OP_SH_MQ): Likewise.
- (OP_MASK_IMMA, OP_SH_IMMA, OP_MASK_IMMB, OP_SH_IMMB): Likewise.
- (OP_MASK_IMMC, OP_SH_IMMC, OP_MASK_IMMF, OP_SH_IMMF): Likewise.
- (OP_MASK_IMMG, OP_SH_IMMG, OP_MASK_IMMH, OP_SH_IMMH): Likewise.
- (OP_MASK_IMMI, OP_SH_IMMI, OP_MASK_IMMJ, OP_SH_IMMJ): Likewise.
- (OP_MASK_IMML, OP_SH_IMML, OP_MASK_IMMM, OP_SH_IMMM): Likewise.
- (OP_MASK_IMMN, OP_SH_IMMN, OP_MASK_IMMO, OP_SH_IMMO): Likewise.
- (OP_MASK_IMMP, OP_SH_IMMP, OP_MASK_IMMQ, OP_SH_IMMQ): Likewise.
- (OP_MASK_IMMU, OP_SH_IMMU, OP_MASK_IMMW, OP_SH_IMMW): Likewise.
- (OP_MASK_IMMX, OP_SH_IMMX, OP_MASK_IMMY, OP_SH_IMMY): Likewise.
- (INSN_WRITE_GPR_S): New macro.
- (INSN2_BRANCH_DELAY_16BIT, INSN2_BRANCH_DELAY_32BIT): Likewise.
- (INSN2_READ_FPR_D): Likewise.
- (INSN2_MOD_GPR_MB, INSN2_MOD_GPR_MC): Likewise.
- (INSN2_MOD_GPR_MD, INSN2_MOD_GPR_ME): Likewise.
- (INSN2_MOD_GPR_MF, INSN2_MOD_GPR_MG): Likewise.
- (INSN2_MOD_GPR_MJ, INSN2_MOD_GPR_MP): Likewise.
- (INSN2_MOD_GPR_MQ, INSN2_MOD_SP): Likewise.
- (INSN2_READ_GPR_31, INSN2_READ_GP, INSN2_READ_PC): Likewise.
- (INSN2_UNCOND_BRANCH, INSN2_COND_BRANCH): Likewise.
- (INSN2_MOD_GPR_MHI, INSN2_MOD_GPR_MM, INSN2_MOD_GPR_MN): Likewise.
- (CPU_MICROMIPS): New macro.
- (M_BC1FL, M_BC1TL, M_BC2FL, M_BC2TL): New enum values.
- (M_BEQL, M_BGEZ, M_BGEZL, M_BGEZALL, M_BGTZ, M_BGTZL): Likewise.
- (M_BLEZ, M_BLEZL, M_BLTZ, M_BLTZL, M_BLTZALL, M_BNEL): Likewise.
- (M_CACHE_OB, M_JALS_1, M_JALS_2, M_JALS_A): Likewise.
- (M_LDC2_OB, M_LDL_OB, M_LDM_AB, M_LDM_OB): Likewise.
- (M_LDP_AB, M_LDP_OB, M_LDR_OB, M_LL_OB, M_LLD_OB): Likewise.
- (M_LWC2_OB, M_LWL_OB, M_LWM_AB, M_LWM_OB): Likewise.
- (M_LWP_AB, M_LWP_OB, M_LWR_OB): Likewise.
- (M_LWU_OB, M_PREF_OB, M_SC_OB, M_SCD_OB): Likewise.
- (M_SDC2_OB, M_SDL_OB, M_SDM_AB, M_SDM_OB): Likewise.
- (M_SDP_AB, M_SDP_OB, M_SDR_OB): Likewise.
- (M_SWC2_OB, M_SWL_OB, M_SWM_AB, M_SWM_OB): Likewise.
- (M_SWP_AB, M_SWP_OB, M_SWR_OB): Likewise.
- (MICROMIPSOP_MASK_MAJOR, MICROMIPSOP_SH_MAJOR): New macros.
- (MICROMIPSOP_MASK_IMMEDIATE, MICROMIPSOP_SH_IMMEDIATE): Likewise.
- (MICROMIPSOP_MASK_DELTA, MICROMIPSOP_SH_DELTA): Likewise.
- (MICROMIPSOP_MASK_CODE10, MICROMIPSOP_SH_CODE10): Likewise.
- (MICROMIPSOP_MASK_TRAP, MICROMIPSOP_SH_TRAP): Likewise.
- (MICROMIPSOP_MASK_SHAMT, MICROMIPSOP_SH_SHAMT): Likewise.
- (MICROMIPSOP_MASK_TARGET, MICROMIPSOP_SH_TARGET): Likewise.
- (MICROMIPSOP_MASK_EXTLSB, MICROMIPSOP_SH_EXTLSB): Likewise.
- (MICROMIPSOP_MASK_EXTMSBD, MICROMIPSOP_SH_EXTMSBD): Likewise.
- (MICROMIPSOP_MASK_INSMSB, MICROMIPSOP_SH_INSMSB): Likewise.
- (MICROMIPSOP_MASK_CODE, MICROMIPSOP_SH_CODE): Likewise.
- (MICROMIPSOP_MASK_CODE2, MICROMIPSOP_SH_CODE2): Likewise.
- (MICROMIPSOP_MASK_CACHE, MICROMIPSOP_SH_CACHE): Likewise.
- (MICROMIPSOP_MASK_SEL, MICROMIPSOP_SH_SEL): Likewise.
- (MICROMIPSOP_MASK_OFFSET12, MICROMIPSOP_SH_OFFSET12): Likewise.
- (MICROMIPSOP_MASK_3BITPOS, MICROMIPSOP_SH_3BITPOS): Likewise.
- (MICROMIPSOP_MASK_STYPE, MICROMIPSOP_SH_STYPE): Likewise.
- (MICROMIPSOP_MASK_OFFSET10, MICROMIPSOP_SH_OFFSET10): Likewise.
- (MICROMIPSOP_MASK_RS, MICROMIPSOP_SH_RS): Likewise.
- (MICROMIPSOP_MASK_RT, MICROMIPSOP_SH_RT): Likewise.
- (MICROMIPSOP_MASK_RD, MICROMIPSOP_SH_RD): Likewise.
- (MICROMIPSOP_MASK_FS, MICROMIPSOP_SH_FS): Likewise.
- (MICROMIPSOP_MASK_FT, MICROMIPSOP_SH_FT): Likewise.
- (MICROMIPSOP_MASK_FD, MICROMIPSOP_SH_FD): Likewise.
- (MICROMIPSOP_MASK_FR, MICROMIPSOP_SH_FR): Likewise.
- (MICROMIPSOP_MASK_RS3, MICROMIPSOP_SH_RS3): Likewise.
- (MICROMIPSOP_MASK_PREFX, MICROMIPSOP_SH_PREFX): Likewise.
- (MICROMIPSOP_MASK_BCC, MICROMIPSOP_SH_BCC): Likewise.
- (MICROMIPSOP_MASK_CCC, MICROMIPSOP_SH_CCC): Likewise.
- (MICROMIPSOP_MASK_COPZ, MICROMIPSOP_SH_COPZ): Likewise.
- (MICROMIPSOP_MASK_MB, MICROMIPSOP_SH_MB): Likewise.
- (MICROMIPSOP_MASK_MC, MICROMIPSOP_SH_MC): Likewise.
- (MICROMIPSOP_MASK_MD, MICROMIPSOP_SH_MD): Likewise.
- (MICROMIPSOP_MASK_ME, MICROMIPSOP_SH_ME): Likewise.
- (MICROMIPSOP_MASK_MF, MICROMIPSOP_SH_MF): Likewise.
- (MICROMIPSOP_MASK_MG, MICROMIPSOP_SH_MG): Likewise.
- (MICROMIPSOP_MASK_MH, MICROMIPSOP_SH_MH): Likewise.
- (MICROMIPSOP_MASK_MI, MICROMIPSOP_SH_MI): Likewise.
- (MICROMIPSOP_MASK_MJ, MICROMIPSOP_SH_MJ): Likewise.
- (MICROMIPSOP_MASK_ML, MICROMIPSOP_SH_ML): Likewise.
- (MICROMIPSOP_MASK_MM, MICROMIPSOP_SH_MM): Likewise.
- (MICROMIPSOP_MASK_MN, MICROMIPSOP_SH_MN): Likewise.
- (MICROMIPSOP_MASK_MP, MICROMIPSOP_SH_MP): Likewise.
- (MICROMIPSOP_MASK_MQ, MICROMIPSOP_SH_MQ): Likewise.
- (MICROMIPSOP_MASK_IMMA, MICROMIPSOP_SH_IMMA): Likewise.
- (MICROMIPSOP_MASK_IMMB, MICROMIPSOP_SH_IMMB): Likewise.
- (MICROMIPSOP_MASK_IMMC, MICROMIPSOP_SH_IMMC): Likewise.
- (MICROMIPSOP_MASK_IMMD, MICROMIPSOP_SH_IMMD): Likewise.
- (MICROMIPSOP_MASK_IMME, MICROMIPSOP_SH_IMME): Likewise.
- (MICROMIPSOP_MASK_IMMF, MICROMIPSOP_SH_IMMF): Likewise.
- (MICROMIPSOP_MASK_IMMG, MICROMIPSOP_SH_IMMG): Likewise.
- (MICROMIPSOP_MASK_IMMH, MICROMIPSOP_SH_IMMH): Likewise.
- (MICROMIPSOP_MASK_IMMI, MICROMIPSOP_SH_IMMI): Likewise.
- (MICROMIPSOP_MASK_IMMJ, MICROMIPSOP_SH_IMMJ): Likewise.
- (MICROMIPSOP_MASK_IMML, MICROMIPSOP_SH_IMML): Likewise.
- (MICROMIPSOP_MASK_IMMM, MICROMIPSOP_SH_IMMM): Likewise.
- (MICROMIPSOP_MASK_IMMN, MICROMIPSOP_SH_IMMN): Likewise.
- (MICROMIPSOP_MASK_IMMO, MICROMIPSOP_SH_IMMO): Likewise.
- (MICROMIPSOP_MASK_IMMP, MICROMIPSOP_SH_IMMP): Likewise.
- (MICROMIPSOP_MASK_IMMQ, MICROMIPSOP_SH_IMMQ): Likewise.
- (MICROMIPSOP_MASK_IMMU, MICROMIPSOP_SH_IMMU): Likewise.
- (MICROMIPSOP_MASK_IMMW, MICROMIPSOP_SH_IMMW): Likewise.
- (MICROMIPSOP_MASK_IMMX, MICROMIPSOP_SH_IMMX): Likewise.
- (MICROMIPSOP_MASK_IMMY, MICROMIPSOP_SH_IMMY): Likewise.
- (MICROMIPSOP_MASK_CODE, MICROMIPSOP_SH_CODE): Likewise.
- (MICROMIPSOP_MASK_CODE2, MICROMIPSOP_SH_CODE2): Likewise.
- (MICROMIPSOP_MASK_CACHE, MICROMIPSOP_SH_CACHE): Likewise.
- (MICROMIPSOP_MASK_CODE20, MICROMIPSOP_SH_CODE20): Likewise.
- (MICROMIPSOP_MASK_PERFREG, MICROMIPSOP_SH_PERFREG): Likewise.
- (MICROMIPSOP_MASK_CODE19, MICROMIPSOP_SH_CODE19): Likewise.
- (MICROMIPSOP_MASK_ALN, MICROMIPSOP_SH_ALN): Likewise.
- (MICROMIPSOP_MASK_VECBYTE, MICROMIPSOP_SH_VECBYTE): Likewise.
- (MICROMIPSOP_MASK_VECALIGN, MICROMIPSOP_SH_VECALIGN): Likewise.
- (MICROMIPSOP_MASK_DSPACC, MICROMIPSOP_SH_DSPACC): Likewise.
- (MICROMIPSOP_MASK_DSPACC_S, MICROMIPSOP_SH_DSPACC_S): Likewise.
- (MICROMIPSOP_MASK_DSPSFT, MICROMIPSOP_SH_DSPSFT): Likewise.
- (MICROMIPSOP_MASK_DSPSFT_7, MICROMIPSOP_SH_DSPSFT_7): Likewise.
- (MICROMIPSOP_MASK_SA3, MICROMIPSOP_SH_SA3): Likewise.
- (MICROMIPSOP_MASK_SA4, MICROMIPSOP_SH_SA4): Likewise.
- (MICROMIPSOP_MASK_IMM8, MICROMIPSOP_SH_IMM8): Likewise.
- (MICROMIPSOP_MASK_IMM10, MICROMIPSOP_SH_IMM10): Likewise.
- (MICROMIPSOP_MASK_WRDSP, MICROMIPSOP_SH_WRDSP): Likewise.
- (MICROMIPSOP_MASK_RDDSP, MICROMIPSOP_SH_RDDSP): Likewise.
- (MICROMIPSOP_MASK_BP, MICROMIPSOP_SH_BP): Likewise.
- (MICROMIPSOP_MASK_MT_U, MICROMIPSOP_SH_MT_U): Likewise.
- (MICROMIPSOP_MASK_MT_H, MICROMIPSOP_SH_MT_H): Likewise.
- (MICROMIPSOP_MASK_MTACC_T, MICROMIPSOP_SH_MTACC_T): Likewise.
- (MICROMIPSOP_MASK_MTACC_D, MICROMIPSOP_SH_MTACC_D): Likewise.
- (MICROMIPSOP_MASK_BBITIND, MICROMIPSOP_SH_BBITIND): Likewise.
- (MICROMIPSOP_MASK_CINSPOS, MICROMIPSOP_SH_CINSPOS): Likewise.
- (MICROMIPSOP_MASK_CINSLM1, MICROMIPSOP_SH_CINSLM1): Likewise.
- (MICROMIPSOP_MASK_SEQI, MICROMIPSOP_SH_SEQI): Likewise.
- (micromips_opcodes): New declaration.
- (bfd_micromips_num_opcodes): Likewise.
-
-2011-07-24 Maciej W. Rozycki <macro@codesourcery.com>
-
- * mips.h (INSN_TRAP): Rename to...
- (INSN_NO_DELAY_SLOT): ... this.
- (INSN_SYNC): Remove macro.
-
-2011-07-01 Eric B. Weddington <eric.weddington@atmel.com>
-
- * avr.h (AVR_ISA_AVR6): Remove AVR_ISA_SPMX as it was actually
- a duplicate of AVR_ISA_SPM.
-
-2011-07-01 Nick Clifton <nickc@redhat.com>
-
- * avr.h (AVR_ISA_AVR6): Fix typo, adding AVR_ISA_SPMX.
-
-2011-06-18 Robin Getz <robin.getz@analog.com>
-
- * bfin.h (is_macmod_signed): New func
-
-2011-06-18 Mike Frysinger <vapier@gentoo.org>
-
- * bfin.h (is_macmod_pmove): Add missing space before func args.
- (is_macmod_hmove): Likewise.
-
-2011-06-13 Walter Lee <walt@tilera.com>
-
- * tilegx.h: New file.
- * tilepro.h: New file.
-
-2011-05-31 Paul Brook <paul@codesourcery.com>
-
- * arm.h (ARM_ARCH_V7R_IDIV): Define.
-
-2011-05-24 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
-
- * s390.h: Replace S390_OPERAND_REG_EVEN with
- S390_OPERAND_REG_PAIR.
-
-2011-05-24 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
-
- * s390.h: Add S390_OPCODE_REG_EVEN flag.
-
-2011-04-18 Julian Brown <julian@codesourcery.com>
-
- * arm.h (ARM_AEXT_V7_ARM): Remove ARM_EXT_OS from bitmask.
-
-2011-04-11 Dan McDonald <dan@wellkeeper.com>
-
- PR gas/12296
- * arm.h (ARM_AEXT_V7_ARM): Add ARM_EXT_OS.
-
-2011-03-22 Eric B. Weddington <eric.weddington@atmel.com>
-
- * avr.h (AVR_ISA_SPMX,AVR_ISA_DES,AVR_ISA_M256,AVR_ISA_XMEGA):
- New instruction set flags.
- (AVR_INSN): Add new instructions for SPM Z+, DES for XMEGA.
-
-2011-02-28 Maciej W. Rozycki <macro@codesourcery.com>
-
- * mips.h (M_PREF_AB): New enum value.
-
-2011-02-12 Mike Frysinger <vapier@gentoo.org>
-
- * bfin.h (M_S2RND, M_T, M_W32, M_FU, M_TFU, M_IS, M_ISS2, M_IH,
- M_IU): Define.
- (is_macmod_pmove, is_macmod_hmove): New functions.
-
-2011-02-11 Mike Frysinger <vapier@gentoo.org>
-
- * bfin.h: Add OPCODE_BFIN_H ifdef multiple include protection.
-
-2011-02-04 Bernd Schmidt <bernds@codesourcery.com>
-
- * tic6x-opcode-table.h (cmtl, ll, sl): Available on C64XP.
- * tic6x.h (TIC6X_INSN_ATOMIC): Remove.
-
-2010-12-31 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
-
- PR gas/11395
- * hppa.h (pa_opcodes): Revert last change. Exchange 32 and 64-bit
- "bb" entries.
-
-2010-12-26 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
-
- PR gas/11395
- * hppa.h: Clear "d" bit in "add" and "sub" patterns.
-
-2010-12-18 Richard Sandiford <rdsandiford@googlemail.com>
-
- * mips.h: Update commentary after last commit.
-
-2010-12-18 Mingjie Xing <mingjie.xing@gmail.com>
-
- * mips.h (OP_*_OFFSET_A, OP_*_OFFSET_B, OP_*_OFFSET_C)
- (OP_*_RZ, OP_*_FZ, INSN2_M_FP_D, INSN2_WRITE_GPR_Z, INSN2_WRITE_FPR_Z)
- (INSN2_READ_GPR_Z, INSN2_READ_FPR_Z, INSN2_READ_GPR_D): Define.
-
-2010-11-25 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
-
- * s390.h (enum s390_opcode_cpu_val): Add S390_OPCODE_MAXCPU.
-
-2010-11-23 Richard Sandiford <rdsandiford@googlemail.com>
-
- * mips.h: Fix previous commit.
-
-2010-11-23 Maciej W. Rozycki <macro@linux-mips.org>
-
- * mips.h (INSN_CHIP_MASK): Update according to INSN_LOONGSON_3A.
- (INSN_LOONGSON_3A): Clear bit 31.
-
-2010-11-15 Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
-
- PR gas/12198
- * arm.h (ARM_AEXT_V6M_ONLY): New define.
- (ARM_AEXT_V6M): Rewrite in terms of ARM_AEXT_V6M_ONLY.
- (ARM_ARCH_V6M_ONLY): New define.
-
-2010-11-11 Mingming Sun <mingm.sun@gmail.com>
-
- * mips.h (INSN_LOONGSON_3A): Defined.
- (CPU_LOONGSON_3A): Defined.
- (OPCODE_IS_MEMBER): Add LOONGSON_3A.
-
-2010-10-09 Matt Rice <ratmice@gmail.com>
-
- * cgen.h (CGEN_ATTR, CGEN_ATTR_TYPE): Rename bool attribute to bool_.
- (CGEN_ATTR_BOOLS, CGEN_ATTR_CGEN_INSN_ALIAS_VALUE): Likewise.
-
-2010-09-23 Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
-
- * arm.h (ARM_EXT_VIRT): New define.
- (ARM_ARCH_V7A_IDIV_MP_SEC): Rename...
- (ARM_ARCH_V7A_IDIV_MP_SEC_VIRT): ...to this and include Virtualization
- Extensions.
-
-2010-09-23 Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
-
- * arm.h (ARM_AEXT_ADIV): New define.
- (ARM_ARCH_V7A_IDIV_MP_SEC): Likewise.
-
-2010-09-23 Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
-
- * arm.h (ARM_EXT_OS): New define.
- (ARM_AEXT_V6SM): Likewise.
- (ARM_ARCH_V6SM): Likewise.
-
-2010-09-23 Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
-
- * arm.h (ARM_EXT_MP): Add.
- (ARM_ARCH_V7A_MP): Likewise.
-
-2010-09-22 Mike Frysinger <vapier@gentoo.org>
-
- * bfin.h: Declare pseudoChr structs/defines.
-
-2010-09-21 Mike Frysinger <vapier@gentoo.org>
-
- * bfin.h: Strip trailing whitespace.
-
-2010-07-29 DJ Delorie <dj@redhat.com>
-
- * rx.h (RX_Operand_Type): Add TwoReg.
- (RX_Opcode_ID): Remove ediv and ediv2.
-
-2010-07-27 DJ Delorie <dj@redhat.com>
-
- * rx.h (RX_Opcode_ID): Add nop2 and nop3 for statistics.
-
-2010-07-23 Naveen.H.S <naveen.S@kpitcummins.com>
- Ina Pandit <ina.pandit@kpitcummins.com>
-
- * v850.h: Define PROCESSOR_MASK, PROCESSOR_OPTION_EXTENSION,
- PROCESSOR_OPTION_ALIAS, PROCESSOR_V850E2, PROCESSOR_V850E2V3 and
- PROCESSOR_V850E2_ALL.
- Remove PROCESSOR_V850EA support.
- (v850_operand): Define V850_OPERAND_EP, V850_OPERAND_FLOAT_CC,
- V850_OPERAND_VREG, V850E_IMMEDIATE16, V850E_IMMEDIATE16HI,
- V850E_IMMEDIATE23, V850E_IMMEDIATE32, V850_OPERAND_SIGNED,
- V850_OPERAND_DISP, V850_PCREL, V850_REG_EVEN, V850E_PUSH_POP,
- V850_NOT_IMM0, V850_NOT_SA, V850_OPERAND_BANG and
- V850_OPERAND_PERCENT.
- Update V850_OPERAND_SRG, V850_OPERAND_CC, V850_OPERAND_RELAX and
- V850_NOT_R0.
- Remove V850_OPERAND_SIGNED, V850_OPERAND_EP, V850_OPERAND_DISP
- and V850E_PUSH_POP
-
-2010-07-06 Maciej W. Rozycki <macro@codesourcery.com>
-
- * mips.h (MIPS16_INSN_UNCOND_BRANCH): New macro.
- (MIPS16_INSN_BRANCH): Rename to...
- (MIPS16_INSN_COND_BRANCH): ... this.
-
-2010-07-03 Alan Modra <amodra@gmail.com>
-
- * ppc.h (PPC_OPCODE_32, PPC_OPCODE_BOOKE64, PPC_OPCODE_CLASSIC): Delete.
- Renumber other PPC_OPCODE defines.
-
-2010-07-03 Alan Modra <amodra@gmail.com>
-
- * ppc.h (PPC_OPCODE_COMMON): Expand comment.
-
-2010-06-29 Alan Modra <amodra@gmail.com>
-
- * maxq.h: Delete file.
-
-2010-06-14 Sebastian Andrzej Siewior <bigeasy@linutronix.de>
-
- * ppc.h (PPC_OPCODE_E500): Define.
-
-2010-05-26 Catherine Moore <clm@codesourcery.com>
-
- * opcode/mips.h (INSN_MIPS16): Remove.
-
-2010-04-21 Joseph Myers <joseph@codesourcery.com>
-
- * tic6x-insn-formats.h (s_branch): Correct typo in bitmask.
-
-2010-04-15 Nick Clifton <nickc@redhat.com>
-
- * alpha.h: Update copyright notice to use GPLv3.
- * arc.h: Likewise.
- * arm.h: Likewise.
- * avr.h: Likewise.
- * bfin.h: Likewise.
- * cgen.h: Likewise.
- * convex.h: Likewise.
- * cr16.h: Likewise.
- * cris.h: Likewise.
- * crx.h: Likewise.
- * d10v.h: Likewise.
- * d30v.h: Likewise.
- * dlx.h: Likewise.
- * h8300.h: Likewise.
- * hppa.h: Likewise.
- * i370.h: Likewise.
- * i386.h: Likewise.
- * i860.h: Likewise.
- * i960.h: Likewise.
- * ia64.h: Likewise.
- * m68hc11.h: Likewise.
- * m68k.h: Likewise.
- * m88k.h: Likewise.
- * maxq.h: Likewise.
- * mips.h: Likewise.
- * mmix.h: Likewise.
- * mn10200.h: Likewise.
- * mn10300.h: Likewise.
- * msp430.h: Likewise.
- * np1.h: Likewise.
- * ns32k.h: Likewise.
- * or32.h: Likewise.
- * pdp11.h: Likewise.
- * pj.h: Likewise.
- * pn.h: Likewise.
- * ppc.h: Likewise.
- * pyr.h: Likewise.
- * rx.h: Likewise.
- * s390.h: Likewise.
- * score-datadep.h: Likewise.
- * score-inst.h: Likewise.
- * sparc.h: Likewise.
- * spu-insns.h: Likewise.
- * spu.h: Likewise.
- * tic30.h: Likewise.
- * tic4x.h: Likewise.
- * tic54x.h: Likewise.
- * tic80.h: Likewise.
- * v850.h: Likewise.
- * vax.h: Likewise.
-
-2010-03-25 Joseph Myers <joseph@codesourcery.com>
-
- * tic6x-control-registers.h, tic6x-insn-formats.h,
- tic6x-opcode-table.h, tic6x.h: New.
-
-2010-02-25 Wu Zhangjin <wuzhangjin@gmail.com>
-
- * mips.h: (LOONGSON2F_NOP_INSN): New macro.
-
-2010-02-08 Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
-
- * opcode/ppc.h (PPC_OPCODE_TITAN): Define.
-
-2010-01-14 H.J. Lu <hongjiu.lu@intel.com>
-
- * ia64.h (ia64_find_opcode): Remove argument name.
- (ia64_find_next_opcode): Likewise.
- (ia64_dis_opcode): Likewise.
- (ia64_free_opcode): Likewise.
- (ia64_find_dependency): Likewise.
-
-2009-11-22 Doug Evans <dje@sebabeach.org>
-
- * cgen.h: Include bfd_stdint.h.
- (CGEN_INSN_LGSINT, CGEN_INSN_LGUINT): New types.
-
-2009-11-18 Paul Brook <paul@codesourcery.com>
-
- * arm.h (FPU_VFP_V4_SP_D16, FPU_ARCH_VFP_V4_SP_D16): Define.
-
-2009-11-17 Paul Brook <paul@codesourcery.com>
- Daniel Jacobowitz <dan@codesourcery.com>
-
- * arm.h (ARM_EXT_V6_DSP): Define.
- (ARM_AEXT_V6T2, ARM_AEXT_NOTM): Include ARM_EXT_V6_DSP.
- (ARM_AEXT_V7EM, ARM_ARCH_V7EM): Define.
-
-2009-11-04 DJ Delorie <dj@redhat.com>
-
- * rx.h (rx_decode_opcode) (mvtipl): Add.
- (mvtcp, mvfcp, opecp): Remove.
-
-2009-11-02 Paul Brook <paul@codesourcery.com>
-
- * arm.h (FPU_VFP_EXT_V3xD, FPU_VFP_EXT_FP16, FPU_NEON_EXT_FMA,
- FPU_VFP_EXT_FMA, FPU_VFP_V3xD, FPU_VFP_V4D16, FPU_VFP_V4): Define.
- (FPU_ARCH_VFP_V3D16_FP16, FPU_ARCH_VFP_V3_FP16, FPU_ARCH_VFP_V3xD,
- FPU_ARCH_VFP_V3xD_FP16, FPU_ARCH_VFP_V4, FPU_ARCH_VFP_V4D16,
- FPU_ARCH_NEON_VFP_V4): Define.
-
-2009-10-23 Doug Evans <dje@sebabeach.org>
-
- * cgen-bitset.h: Delete, moved to ../cgen/bitset.h.
- * cgen.h: Update. Improve multi-inclusion macro name.
-
-2009-10-02 Peter Bergner <bergner@vnet.ibm.com>
-
- * ppc.h (PPC_OPCODE_476): Define.
-
-2009-10-01 Peter Bergner <bergner@vnet.ibm.com>
-
- * ppc.h (PPC_OPCODE_A2): Rename from PPC_OPCODE_PPCA2.
-
-2009-09-29 DJ Delorie <dj@redhat.com>
-
- * rx.h: New file.
-
-2009-09-22 Peter Bergner <bergner@vnet.ibm.com>
-
- * ppc.h (ppc_cpu_t): Typedef to uint64_t.
-
-2009-09-21 Ben Elliston <bje@au.ibm.com>
-
- * ppc.h (PPC_OPCODE_PPCA2): New.
-
-2009-09-05 Martin Thuresson <martin@mtme.org>
-
- * ia64.h (struct ia64_operand): Renamed member class to op_class.
-
-2009-08-29 Martin Thuresson <martin@mtme.org>
-
- * tic30.h (template): Rename type template to
- insn_template. Updated code to use new name.
- * tic54x.h (template): Rename type template to
- insn_template.
-
-2009-08-20 Nick Hudson <nick.hudson@gmx.co.uk>
-
- * hppa.h (pa_opcodes): Add a pa10 bb without FLAG_STRICT.
-
-2009-06-11 Anthony Green <green@moxielogic.com>
-
- * moxie.h (MOXIE_F3_PCREL): Define.
- (moxie_form3_opc_info): Grow.
-
-2009-06-06 Anthony Green <green@moxielogic.com>
-
- * moxie.h (MOXIE_F1_M): Define.
-
-2009-04-15 Anthony Green <green@moxielogic.com>
-
- * moxie.h: Created.
-
-2009-04-06 DJ Delorie <dj@redhat.com>
-
- * h8300.h: Add relaxation attributes to MOVA opcodes.
-
-2009-03-10 Alan Modra <amodra@bigpond.net.au>
-
- * ppc.h (ppc_parse_cpu): Declare.
-
-2009-03-02 Qinwei <qinwei@sunnorth.com.cn>
-
- * score-inst.h (score_insn_type, score_data_type): Add Ra_I9_I5
- and _IMM11 for mbitclr and mbitset.
- * score-datadep.h: Update dependency information.
-
-2009-02-26 Peter Bergner <bergner@vnet.ibm.com>
-
- * ppc.h (PPC_OPCODE_POWER7): New.
-
-2009-02-06 Doug Evans <dje@google.com>
-
- * i386.h: Add comment regarding sse* insns and prefixes.
-
-2009-02-03 Sandip Matte <sandip@rmicorp.com>
-
- * mips.h (INSN_XLR): Define.
- (INSN_CHIP_MASK): Update.
- (CPU_XLR): Define.
- (OPCODE_IS_MEMBER): Update.
- (M_MSGSND, M_MSGLD, M_MSGLD_T, M_MSGWAIT, M_MSGWAIT_T): Define.
-
-2009-01-28 Doug Evans <dje@google.com>
-
- * opcode/i386.h: Add multiple inclusion protection.
- (EAX_REG_NUM,ECX_REG_NUM,EDX_REGNUM,EBX_REG_NUM,ESI_REG_NUM)
- (EDI_REG_NUM): New macros.
- (MODRM_MOD_FIELD,MODRM_REG_FIELD,MODRM_RM_FIELD): New macros.
- (SIB_SCALE_FIELD,SIB_INDEX_FIELD,SIB_BASE_FIELD): New macros.
- (REX_PREFIX_P): New macro.
-
-2009-01-09 Peter Bergner <bergner@vnet.ibm.com>
-
- * ppc.h (struct powerpc_opcode): New field "deprecated".
- (PPC_OPCODE_NOPOWER4): Delete.
-
-2008-11-28 Joshua Kinard <kumba@gentoo.org>
-
- * mips.h: Define CPU_R14000, CPU_R16000.
- (OPCODE_IS_MEMBER): Include R14000, R16000 in test.
-
-2008-11-18 Catherine Moore <clm@codesourcery.com>
-
- * arm.h (FPU_NEON_FP16): New.
- (FPU_ARCH_NEON_FP16): New.
-
-2008-11-06 Chao-ying Fu <fu@mips.com>
-
- * mips.h: Doucument '1' for 5-bit sync type.
-
-2008-08-28 H.J. Lu <hongjiu.lu@intel.com>
-
- * ia64.h (ia64_resource_specifier): Add IA64_RS_CR_IIB. Update
- IA64_RS_CR.
-
-2008-08-01 Peter Bergner <bergner@vnet.ibm.com>
-
- * ppc.h (PPC_OPCODE_VSX, PPC_OPERAND_VSR): New.
-
-2008-07-30 Michael J. Eager <eager@eagercon.com>
-
- * ppc.h (PPC_OPCODE_405): Define.
- (PPC_OPERAND_FSL, PPC_OPERAND_FCR, PPC_OPERAND_UDI): Define.
-
-2008-06-13 Peter Bergner <bergner@vnet.ibm.com>
-
- * ppc.h (ppc_cpu_t): New typedef.
- (struct powerpc_opcode <flags>): Use it.
- (struct powerpc_operand <insert, extract>): Likewise.
- (struct powerpc_macro <flags>): Likewise.
-
-2008-06-12 Adam Nemet <anemet@caviumnetworks.com>
-
- * mips.h: Document new field descriptors +x, +X, +p, +P, +s, +S.
- Update comment before MIPS16 field descriptors to mention MIPS16.
- (OP_SH_BBITIND, OP_MASK_BBITIND): New bit mask and shift count for
- BBIT.
- (OP_SH_CINSPOS, OP_MASK_CINSPOS, OP_SH_CINSLM1, OP_MASK_CINSLM1):
- New bit masks and shift counts for cins and exts.
-
- * mips.h: Document new field descriptors +Q.
- (OP_SH_SEQI, OP_MASK_SEQI): New bit mask and shift count for SEQI.
-
-2008-04-28 Adam Nemet <anemet@caviumnetworks.com>
-
- * mips.h (INSN_MACRO): Move it up to the pinfo macros.
- (INSN2_M_FP_S, INSN2_M_FP_D): New pinfo2 macros.
-
-2008-04-14 Edmar Wienskoski <edmar@freescale.com>
-
- * ppc.h: (PPC_OPCODE_E500MC): New.
-
-2008-04-03 H.J. Lu <hongjiu.lu@intel.com>
-
- * i386.h (MAX_OPERANDS): Set to 5.
- (MAX_MNEM_SIZE): Changed to 20.
-
-2008-03-28 Eric B. Weddington <eric.weddington@atmel.com>
-
- * avr.h (AVR_ISA_TINY3): Define new opcode set for attiny167.
-
-2008-03-09 Paul Brook <paul@codesourcery.com>
-
- * arm.h (FPU_VFP_EXT_D32, FPU_VFP_V3D16, FPU_ARCH_VFP_V3D16): Define.
-
-2008-03-04 Paul Brook <paul@codesourcery.com>
-
- * arm.h (ARM_EXT_V6M, ARM_EXT_BARRIER, ARM_EXT_THUMB_MSR): Define.
- (ARM_AEXT_V6T2, ARM_AEXT_V7_ARM, ARM_AEXT_V7M): Use new flags.
- (ARM_AEXT_V6M, ARM_ARCH_V6M): Define.
-
-2008-02-27 Denis Vlasenko <vda.linux@googlemail.com>
- Nick Clifton <nickc@redhat.com>
-
- PR 3134
- * h8300.h (h8_opcodes): Add an encoding for a mov.l instruction
- with a 32-bit displacement but without the top bit of the 4th byte
- set.
-
-2008-02-18 M R Swami Reddy <MR.Swami.Reddy@nsc.com>
-
- * cr16.h (cr16_num_optab): Declared.
-
-2008-02-14 Hakan Ardo <hakan@debian.org>
-
- PR gas/2626
- * avr.h (AVR_ISA_2xxe): Define.
-
-2008-02-04 Adam Nemet <anemet@caviumnetworks.com>
-
- * mips.h: Update copyright.
- (INSN_CHIP_MASK): New macro.
- (INSN_OCTEON): New macro.
- (CPU_OCTEON): New macro.
- (OPCODE_IS_MEMBER): Handle Octeon instructions.
-
-2008-01-23 Eric B. Weddington <eric.weddington@atmel.com>
-
- * avr.h (AVR_ISA_RF401): Add new opcode set for at86rf401.
-
-2008-01-03 Eric B. Weddington <eric.weddington@atmel.com>
-
- * avr.h (AVR_ISA_USB162): Add new opcode set.
- (AVR_ISA_AVR3): Likewise.
-
-2007-11-29 Mark Shinwell <shinwell@codesourcery.com>
-
- * mips.h (INSN_LOONGSON_2E): New.
- (INSN_LOONGSON_2F): New.
- (CPU_LOONGSON_2E): New.
- (CPU_LOONGSON_2F): New.
- (OPCODE_IS_MEMBER): Update for Loongson-2E and -2F flags.
-
-2007-11-29 Mark Shinwell <shinwell@codesourcery.com>
-
- * mips.h (INSN_ISA*): Redefine certain values as an
- enumeration. Update comments.
- (mips_isa_table): New.
- (ISA_MIPS*): Redefine to match enumeration.
- (OPCODE_IS_MEMBER): Modify to correctly test new INSN_ISA*
- values.
-
-2007-08-08 Ben Elliston <bje@au.ibm.com>
-
- * ppc.h (PPC_OPCODE_PPCPS): New.
-
-2007-07-03 Nathan Sidwell <nathan@codesourcery.com>
-
- * m68k.h: Document j K & E.
-
-2007-06-29 M R Swami Reddy <MR.Swami.Reddy@nsc.com>
-
- * cr16.h: New file for CR16 target.
-
-2007-05-02 Alan Modra <amodra@bigpond.net.au>
-
- * ppc.h (PPC_OPERAND_PLUS1): Update comment.
-
-2007-04-23 Nathan Sidwell <nathan@codesourcery.com>
-
- * m68k.h (mcfisa_c): New.
- (mcfusp, mcf_mask): Adjust.
-
-2007-04-20 Alan Modra <amodra@bigpond.net.au>
-
- * ppc.h (struct powerpc_operand): Replace "bits" with "bitm".
- (num_powerpc_operands): Declare.
- (PPC_OPERAND_SIGNED et al): Redefine as hex.
- (PPC_OPERAND_PLUS1): Define.
-
-2007-03-21 H.J. Lu <hongjiu.lu@intel.com>
-
- * i386.h (REX_MODE64): Renamed to ...
- (REX_W): This.
- (REX_EXTX): Renamed to ...
- (REX_R): This.
- (REX_EXTY): Renamed to ...
- (REX_X): This.
- (REX_EXTZ): Renamed to ...
- (REX_B): This.
-
-2007-03-15 H.J. Lu <hongjiu.lu@intel.com>
-
- * i386.h: Add entries from config/tc-i386.h and move tables
- to opcodes/i386-opc.h.
-
-2007-03-13 H.J. Lu <hongjiu.lu@intel.com>
-
- * i386.h (FloatDR): Removed.
- (i386_optab): Use FloatD and FloatD|FloatR instead of FloatDR.
-
-2007-03-01 Alan Modra <amodra@bigpond.net.au>
-
- * spu-insns.h: Add soma double-float insns.
-
-2007-02-20 Thiemo Seufer <ths@mips.com>
- Chao-Ying Fu <fu@mips.com>
-
- * mips.h (OP_SH_BP, OP_MASK_BP): Add support for balign instruction.
- (INSN_DSPR2): Add flag for DSP R2 instructions.
- (M_BALIGN): New macro.
-
-2007-02-14 Alan Modra <amodra@bigpond.net.au>
-
- * i386.h (i386_optab): Replace all occurrences of Seg2ShortForm
- and Seg3ShortFrom with Shortform.
-
-2007-02-11 H.J. Lu <hongjiu.lu@intel.com>
-
- PR gas/4027
- * i386.h (i386_optab): Put the real "test" before the pseudo
- one.
-
-2007-01-08 Kazu Hirata <kazu@codesourcery.com>
-
- * m68k.h (m68010up): OR fido_a.
-
-2006-12-25 Kazu Hirata <kazu@codesourcery.com>
-
- * m68k.h (fido_a): New.
-
-2006-12-24 Kazu Hirata <kazu@codesourcery.com>
-
- * m68k.h (mcfmac, mcfemac, cfloat, mcfhwdiv, mcfisa_a,
- mcfisa_aa, mcfisa_b, mcfusp, mcf_mask): Double the defined
- values.
-
-2006-11-08 H.J. Lu <hongjiu.lu@intel.com>
-
- * i386.h (i386_optab): Replace CpuPNI with CpuSSE3.
-
-2006-10-31 Mei Ligang <ligang@sunnorth.com.cn>
-
- * score-inst.h (enum score_insn_type): Add Insn_internal.
-
-2006-10-25 Trevor Smigiel <Trevor_Smigiel@playstation.sony.com>
- Yukishige Shibata <shibata@rd.scei.sony.co.jp>
- Nobuhisa Fujinami <fnami@rd.scei.sony.co.jp>
- Takeaki Fukuoka <fukuoka@rd.scei.sony.co.jp>
- Alan Modra <amodra@bigpond.net.au>
-
- * spu-insns.h: New file.
- * spu.h: New file.
-
-2006-10-24 Andrew Pinski <andrew_pinski@playstation.sony.com>
-
- * ppc.h (PPC_OPCODE_CELL): Define.
-
-2006-10-23 Dwarakanath Rajagopal <dwarak.rajagopal@amd.com>
-
- * i386.h : Modify opcode to support for the change in POPCNT opcode
- in amdfam10 architecture.
-
-2006-09-28 H.J. Lu <hongjiu.lu@intel.com>
-
- * i386.h: Replace CpuMNI with CpuSSSE3.
-
-2006-09-26 Mark Shinwell <shinwell@codesourcery.com>
- Joseph Myers <joseph@codesourcery.com>
- Ian Lance Taylor <ian@wasabisystems.com>
- Ben Elliston <bje@wasabisystems.com>
-
- * arm.h (ARM_CEXT_IWMMXT2, ARM_ARCH_IWMMXT2): Define.
-
-2006-09-17 Mei Ligang <ligang@sunnorth.com.cn>
-
- * score-datadep.h: New file.
- * score-inst.h: New file.
-
-2006-07-14 H.J. Lu <hongjiu.lu@intel.com>
-
- * i386.h (i386_optab): Remove InvMem from maskmovq, movhlps,
- movlhps, movmskps, pextrw, pmovmskb, movmskpd, maskmovdqu,
- movdq2q and movq2dq.
-
-2006-07-10 Dwarakanath Rajagopal <dwarak.rajagopal@amd.com>
- Michael Meissner <michael.meissner@amd.com>
-
- * i386.h: Add amdfam10 new instructions (SSE4a and ABM instructions).
-
-2006-06-12 H.J. Lu <hongjiu.lu@intel.com>
-
- * i386.h (i386_optab): Add "nop" with memory reference.
-
-2006-06-12 H.J. Lu <hongjiu.lu@intel.com>
-
- * i386.h (i386_optab): Update comment for 64bit NOP.
-
-2006-06-06 Ben Elliston <bje@au.ibm.com>
- Anton Blanchard <anton@samba.org>
-
- * ppc.h (PPC_OPCODE_POWER6): Define.
- Adjust whitespace.
-
-2006-06-05 Thiemo Seufer <ths@mips.com>
-
- * mips.h: Improve description of MT flags.
-
-2006-05-25 Richard Sandiford <richard@codesourcery.com>
-
- * m68k.h (mcf_mask): Define.
-
-2006-05-05 Thiemo Seufer <ths@mips.com>
- David Ung <davidu@mips.com>
-
- * mips.h (enum): Add macro M_CACHE_AB.
-
-2006-05-04 Thiemo Seufer <ths@mips.com>
- Nigel Stephens <nigel@mips.com>
- David Ung <davidu@mips.com>
-
- * mips.h: Add INSN_SMARTMIPS define.
-
-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.
-
-2006-03-28 Nathan Sidwell <nathan@codesourcery.com>
-
- * m68k.h (cpu_m68k, cpu_cf, cpu_m68000, cpu_m68008, cpu_m68010,
- cpu_m68020, cpu_m68ec030, cpu_m68040, cpu_m68060, cpu_m68851,
- cpu_m68881, cpu_m68882, cpu_cpu32, cpu_cf5200, cpu_cf5206e,
- cpu_cf5208, cpu_cf521x, cpu_cf5213, cpu_cf5249, cpu_cf528x,
- cpu_cf5307, cpu_cf5329, cpu_cf5407, cpu_cf547x, cpu_cf548x): Remove.
-
-2006-03-10 Paul Brook <paul@codesourcery.com>
-
- * arm.h (ARM_AEXT_V7_ARM): Include v6ZK extensions.
-
-2006-03-04 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
-
- * hppa.h (pa_opcodes): Reorder bb opcodes so that pa10 opcodes come
- first. Correct mask of bb "B" opcode.
-
-2006-02-27 H.J. Lu <hongjiu.lu@intel.com>
-
- * i386.h (i386_optab): Support Intel Merom New Instructions.
-
-2006-02-24 Paul Brook <paul@codesourcery.com>
-
- * arm.h: Add V7 feature bits.
-
-2006-02-23 H.J. Lu <hongjiu.lu@intel.com>
-
- * ia64.h (ia64_opnd): Add IA64_OPND_IMMU5b.
-
-2006-01-31 Paul Brook <paul@codesourcery.com>
- Richard Earnshaw <rearnsha@arm.com>
-
- * arm.h: Use ARM_CPU_FEATURE.
- (ARM_AEXT_*, FPU_ENDIAN_PURE, FPU_VFP_HARD): New.
- (arm_feature_set): Change to a structure.
- (ARM_CPU_HAS_FEATURE, ARM_MERGE_FEATURE_SETS, ARM_CLEAR_FEATURE,
- ARM_FEATURE): New macros.
-
-2005-12-07 Hans-Peter Nilsson <hp@axis.com>
-
- * cris.h (MOVE_M_TO_PREG_OPCODE, MOVE_M_TO_PREG_ZBITS)
- (MOVE_PC_INCR_OPCODE_PREFIX, MOVE_PC_INCR_OPCODE_SUFFIX): New macros.
- (ADD_PC_INCR_OPCODE): Don't define.
-
-2005-12-06 H.J. Lu <hongjiu.lu@intel.com>
-
- PR gas/1874
- * i386.h (i386_optab): Add 64bit support for monitor and mwait.
-
-2005-11-14 David Ung <davidu@mips.com>
-
- * mips.h: Assign 'm'/'M' codes to MIPS16e save/restore
- instructions. Define MIPS16_ALL_ARGS and MIPS16_ALL_STATICS for
- save/restore encoding of the args field.
-
-2005-10-28 Dave Brolley <brolley@redhat.com>
-
- Contribute the following changes:
- 2005-02-16 Dave Brolley <brolley@redhat.com>
-
- * cgen-bitset.h: Rename CGEN_ISA_MASK to CGEN_BITSET. Rename
- cgen_isa_mask_* to cgen_bitset_*.
- * cgen.h: Likewise.
-
- 2003-10-21 Richard Sandiford <rsandifo@redhat.com>
-
- * cgen.h (CGEN_BITSET_ATTR_VALUE): Fix definition.
- (CGEN_ATTR_ENTRY): Change "value" to type "unsigned".
- (CGEN_CPU_TABLE): Make isas a ponter.
-
- 2003-09-29 Dave Brolley <brolley@redhat.com>
-
- * cgen.h (CGEN_ATTR_VALUE_BITSET_TYPE): New typedef.
- (CGEN_ATTR_VALUE_ENUM_TYPE): Ditto.
- (CGEN_ATTR_VALUE_TYPE): Use these new typedefs.
-
- 2002-12-13 Dave Brolley <brolley@redhat.com>
-
- * cgen.h (symcat.h): #include it.
- (cgen-bitset.h): #include it.
- (CGEN_ATTR_VALUE_TYPE): Now a union.
- (CGEN_ATTR_VALUE): Reference macros generated in opcodes/<arch>-desc.h.
- (CGEN_ATTR_ENTRY): 'value' now unsigned.
- (cgen_cpu_desc): 'isas' now (CGEN_ISA_MASK*).
- * cgen-bitset.h: New file.
-
-2005-09-30 Catherine Moore <clm@cm00re.com>
-
- * bfin.h: New file.
-
-2005-10-24 Jan Beulich <jbeulich@novell.com>
-
- * ia64.h (enum ia64_opnd): Move memory operand out of set of
- indirect operands.
-
-2005-10-16 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
-
- * hppa.h (pa_opcodes): Add two fcmp opcodes. Reorder ftest opcodes.
- Add FLAG_STRICT to pa10 ftest opcode.
-
-2005-10-12 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
-
- * hppa.h (pa_opcodes): Remove lha entries.
-
-2005-10-08 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
-
- * hppa.h (FLAG_STRICT): Revise comment.
- (pa_opcode): Revise ordering rules. Add/move strict pa10 variants
- before corresponding pa11 opcodes. Add strict pa10 register-immediate
- entries for "fdc".
-
-2005-09-30 Catherine Moore <clm@cm00re.com>
-
- * bfin.h: New file.
-
-2005-09-24 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
-
- * hppa.h (pa_opcodes): Add new "fdc" and "fic" opcode entries.
-
-2005-09-06 Chao-ying Fu <fu@mips.com>
-
- * mips.h (OP_SH_MT_U, OP_MASK_MT_U, OP_SH_MT_H, OP_MASK_MT_H,
- OP_SH_MTACC_T, OP_MASK_MTACC_T, OP_SH_MTACC_D, OP_MASK_MTACC_D): New
- define.
- Document !, $, *, &, g, +t, +T operand formats for MT instructions.
- (INSN_ASE_MASK): Update to include INSN_MT.
- (INSN_MT): New define for MT ASE.
-
-2005-08-25 Chao-ying Fu <fu@mips.com>
-
- * mips.h (OP_SH_DSPACC, OP_MASK_DSPACC, OP_SH_DSPACC_S,
- OP_MASK_DSPACC_S, OP_SH_DSPSFT, OP_MASK_DSPSFT, OP_SH_DSPSFT_7,
- OP_MASK_DSPSFT_7, OP_SH_SA3, OP_MASK_SA3, OP_SH_SA4, OP_MASK_SA4,
- OP_SH_IMM8, OP_MASK_IMM8, OP_SH_IMM10, OP_MASK_IMM10, OP_SH_WRDSP,
- OP_MASK_WRDSP, OP_SH_RDDSP, OP_MASK_RDDSP): New define.
- Document 3, 4, 5, 6, 7, 8, 9, 0, :, ', @ operand formats for DSP
- instructions.
- (INSN_DSP): New define for DSP ASE.
-
-2005-08-18 Alan Modra <amodra@bigpond.net.au>
-
- * a29k.h: Delete.
-
-2005-08-15 Daniel Jacobowitz <dan@codesourcery.com>
-
- * ppc.h (PPC_OPCODE_E300): Define.
-
-2005-08-12 Martin Schwidefsky <schwidefsky@de.ibm.com>
-
- * s390.h (s390_opcode_cpu_val): Add enum for cpu type z9-109.
-
-2005-07-28 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
-
- PR gas/336
- * hppa.h (pa_opcodes): Allow 0 immediates in PA 2.0 variants of pdtlb
- and pitlb.
-
-2005-07-27 Jan Beulich <jbeulich@novell.com>
-
- * i386.h (i386_optab): Add comment to movd. Use LongMem for all
- movd-s. Add NoRex64 to movq-s dealing only with mmx or xmm registers.
- Add movq-s as 64-bit variants of movd-s.
-
-2005-07-18 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
-
- * hppa.h: Fix punctuation in comment.
-
- * hppa.h (pa_opcode): Add rules for opcode ordering. Check first for
- implicit space-register addressing. Set space-register bits on opcodes
- using implicit space-register addressing. Add various missing pa20
- long-immediate opcodes. Remove various opcodes using implicit 3-bit
- space-register addressing. Use "fE" instead of "fe" in various
- fstw opcodes.
-
-2005-07-18 Jan Beulich <jbeulich@novell.com>
-
- * i386.h (i386_optab): Operands of aam and aad are unsigned.
-
-2007-07-15 H.J. Lu <hongjiu.lu@intel.com>
-
- * i386.h (i386_optab): Support Intel VMX Instructions.
-
-2005-07-10 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
-
- * hppa.h (pa_opcode): Don't set FLAG_STRICT in pa10 loads and stores.
-
-2005-07-05 Jan Beulich <jbeulich@novell.com>
-
- * i386.h (i386_optab): Add new insns.
-
-2005-07-01 Nick Clifton <nickc@redhat.com>
-
- * sparc.h: Add typedefs to structure declarations.
-
-2005-06-20 H.J. Lu <hongjiu.lu@intel.com>
-
- PR 1013
- * i386.h (i386_optab): Update comments for 64bit addressing on
- mov. Allow 64bit addressing for mov and movq.
-
-2005-06-11 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
-
- * hppa.h (pa_opcodes): Use cM and cX instead of cm and cx,
- respectively, in various floating-point load and store patterns.
-
-2005-05-23 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
-
- * hppa.h (FLAG_STRICT): Correct comment.
- (pa_opcodes): Update load and store entries to allow both PA 1.X and
- PA 2.0 mneumonics when equivalent. Entries with cache control
- completers now require PA 1.1. Adjust whitespace.
-
-2005-05-19 Anton Blanchard <anton@samba.org>
-
- * ppc.h (PPC_OPCODE_POWER5): Define.
-
-2005-05-10 Nick Clifton <nickc@redhat.com>
-
- * Update the address and phone number of the FSF organization in
- the GPL notices in the following files:
- a29k.h, alpha.h, arc.h, arm.h, avr.h, cgen.h, convex.h, cris.h,
- crx.h, d10v.h, d30v.h, dlx.h, h8300.h, hppa.h, i370.h, i386.h,
- i860.h, i960.h, m68hc11.h, m68k.h, m88k.h, maxq.h, mips.h, mmix.h,
- mn10200.h, mn10300.h, msp430.h, np1.h, ns32k.h, or32.h, pdp11.h,
- pj.h, pn.h, ppc.h, pyr.h, s390.h, sparc.h, tic30.h, tic4x.h,
- tic54x.h, tic80.h, v850.h, vax.h
-
-2005-05-09 Jan Beulich <jbeulich@novell.com>
-
- * i386.h (i386_optab): Add ht and hnt.
-
-2005-04-18 Mark Kettenis <kettenis@gnu.org>
-
- * i386.h: Insert hyphens into selected VIA PadLock extensions.
- Add xcrypt-ctr. Provide aliases without hyphens.
-
-2005-04-13 H.J. Lu <hongjiu.lu@intel.com>
-
- Moved from ../ChangeLog
-
- 2005-04-12 Paul Brook <paul@codesourcery.com>
- * m88k.h: Rename psr macros to avoid conflicts.
-
- 2005-03-12 Zack Weinberg <zack@codesourcery.com>
- * arm.h: Adjust comments for ARM_EXT_V4T and ARM_EXT_V5T.
- Add ARM_EXT_V6T2, ARM_ARCH_V6T2, ARM_ARCH_V6KT2, ARM_ARCH_V6ZT2,
- and ARM_ARCH_V6ZKT2.
-
- 2004-11-29 Tomer Levi <Tomer.Levi@nsc.com>
- * crx.h (enum operand_type): Rename rbase_cst4 to rbase_dispu4.
- Remove redundant instruction types.
- (struct argument): X_op - new field.
- (struct cst4_entry): Remove.
- (no_op_insn): Declare.
-
- 2004-11-05 Tomer Levi <Tomer.Levi@nsc.com>
- * crx.h (enum argtype): Rename types, remove unused types.
-
- 2004-10-27 Tomer Levi <Tomer.Levi@nsc.com>
- * crx.h (enum reg): Rearrange registers, remove 'ccfg' and `'pc'.
- (enum reg_type): Remove CRX_PC_REGTYPE, CRX_MTPR_REGTYPE.
- (enum operand_type): Rearrange operands, edit comments.
- replace us<N> with ui<N> for unsigned immediate.
- replace d<N> with disps<N>/dispu<N>/dispe<N> for signed/unsigned/escaped
- displacements (respectively).
- replace rbase_ridx_scl2_dispu<N> with rindex_disps<N> for register index.
- (instruction type): Add NO_TYPE_INS.
- (instruction flags): Add USER_REG, CST4MAP, NO_SP, NO_RPTR.
- (operand_entry): New field - 'flags'.
- (operand flags): New.
-
- 2004-10-21 Tomer Levi <Tomer.Levi@nsc.com>
- * crx.h (operand_type): Remove redundant types i3, i4,
- i5, i8, i12.
- Add new unsigned immediate types us3, us4, us5, us16.
-
-2005-04-12 Mark Kettenis <kettenis@gnu.org>
-
- * i386.h (i386_optab): Mark VIA PadLock instructions as ImmExt and
- adjust them accordingly.
-
-2005-04-01 Jan Beulich <jbeulich@novell.com>
-
- * i386.h (i386_optab): Add rdtscp.
-
-2005-03-29 H.J. Lu <hongjiu.lu@intel.com>
-
- * i386.h (i386_optab): Don't allow the `l' suffix for moving
- between memory and segment register. Allow movq for moving between
- general-purpose register and segment register.
-
-2005-02-09 Jan Beulich <jbeulich@novell.com>
-
- PR gas/707
- * i386.h (i386_optab): Add x_Suf to fbld and fbstp. Add w_Suf and
- FloatMF to fldcw, fstcw, fnstcw, and the memory formas of fstsw and
- fnstsw.
-
-2006-02-07 Nathan Sidwell <nathan@codesourcery.com>
-
- * m68k.h (m68008, m68ec030, m68882): Remove.
- (m68k_mask): New.
- (cpu_m68k, cpu_cf): New.
- (mcf5200, mcf5206e, mcf521x, mcf5249, mcf528x, mcf5307, mcf5407,
- mcf5470, mcf5480): Rename to cpu_<foo>. Add m680x0 variants.
-
-2005-01-25 Alexandre Oliva <aoliva@redhat.com>
-
- 2004-11-10 Alexandre Oliva <aoliva@redhat.com>
- * cgen.h (enum cgen_parse_operand_type): Add
- CGEN_PARSE_OPERAND_SYMBOLIC.
-
-2005-01-21 Fred Fish <fnf@specifixinc.com>
-
- * mips.h: Change INSN_ALIAS to INSN2_ALIAS.
- Change INSN_WRITE_MDMX_ACC to INSN2_WRITE_MDMX_ACC.
- Change INSN_READ_MDMX_ACC to INSN2_READ_MDMX_ACC.
-
-2005-01-19 Fred Fish <fnf@specifixinc.com>
-
- * mips.h (struct mips_opcode): Add new pinfo2 member.
- (INSN_ALIAS): New define for opcode table entries that are
- specific instances of another entry, such as 'move' for an 'or'
- with a zero operand.
- (INSN_READ_MDMX_ACC): Redefine from 0 to 0x2.
- (INSN_WRITE_MDMX_ACC): Redefine from 0 to 0x4.
-
-2004-12-09 Ian Lance Taylor <ian@wasabisystems.com>
-
- * mips.h (CPU_RM9000): Define.
- (OPCODE_IS_MEMBER): Handle CPU_RM9000.
-
-2004-11-25 Jan Beulich <jbeulich@novell.com>
-
- * i386.h: CpuNo64 mov can't reasonably have a 'q' suffix. Moves
- to/from test registers are illegal in 64-bit mode. Add missing
- NoRex64 to sidt. fxsave/fxrstor now allow for a 'q' suffix
- (previously one had to explicitly encode a rex64 prefix). Re-enable
- lahf/sahf in 64-bit mode as at least some Athlon64/Opteron steppings
- support it there. Add cmpxchg16b as per Intel's 64-bit documentation.
-
-2004-11-23 Jan Beulich <jbeulich@novell.com>
-
- * i386.h (i386_optab): paddq and psubq, even in their MMX form, are
- available only with SSE2. Change the MMX additions introduced by SSE
- and 3DNow!A to CpuMMX2 (rather than CpuMMX). Indicate the 3DNow!A
- instructions by their now designated identifier (since combining i686
- and 3DNow! does not really imply 3DNow!A).
-
-2004-11-19 Alan Modra <amodra@bigpond.net.au>
-
- * msp430.h (struct rcodes_s, MSP430_RLC, msp430_rcodes,
- struct hcodes_s, msp430_hcodes): Move to gas/config/tc-msp430.c.
-
-2004-11-08 Inderpreet Singh <inderpreetb@nioda.hcltech.com>
- Vineet Sharma <vineets@noida.hcltech.com>
-
- * maxq.h: New file: Disassembly information for the maxq port.
-
-2004-11-05 H.J. Lu <hongjiu.lu@intel.com>
-
- * i386.h (i386_optab): Put back "movzb".
-
-2004-11-04 Hans-Peter Nilsson <hp@axis.com>
-
- * cris.h (enum cris_insn_version_usage): Tweak formatting and
- comments. Remove member cris_ver_sim. Add members
- cris_ver_sim_v0_10, cris_ver_v0_10, cris_ver_v3_10,
- cris_ver_v8_10, cris_ver_v10, cris_ver_v10p.
- (struct cris_support_reg, struct cris_cond15): New types.
- (cris_conds15): Declare.
- (JUMP_PC_INCR_OPCODE_V32, BA_DWORD_OPCODE, NOP_OPCODE_COMMON)
- (NOP_OPCODE_ZBITS_COMMON, LAPC_DWORD_OPCODE, LAPC_DWORD_Z_BITS)
- (NOP_OPCODE_V32, NOP_Z_BITS_V32): New macros.
- (NOP_Z_BITS): Define in terms of NOP_OPCODE.
- (cris_imm_oprnd_size_type): New members SIZE_FIELD_SIGNED and
- SIZE_FIELD_UNSIGNED.
-
-2004-11-04 Jan Beulich <jbeulich@novell.com>
-
- * i386.h (sldx_Suf): Remove.
- (FP, l_FP, sl_FP, x_FP): Don't imply IgnoreSize.
- (q_FP): Define, implying no REX64.
- (x_FP, sl_FP): Imply FloatMF.
- (i386_optab): Split reg and mem forms of moving from segment registers
- so that the memory forms can ignore the 16-/32-bit operand size
- distinction. Adjust a few others for Intel mode. Remove *FP uses from
- all non-floating-point instructions. Unite 32- and 64-bit forms of
- movsx, movzx, and movd. Adjust floating point operations for the above
- changes to the *FP macros. Add DefaultSize to floating point control
- insns operating on larger memory ranges. Remove left over comments
- hinting at certain insns being Intel-syntax ones where the ones
- actually meant are already gone.
-
-2004-10-07 Tomer Levi <Tomer.Levi@nsc.com>
-
- * crx.h: Add COPS_REG_INS - Coprocessor Special register
- instruction type.
-
-2004-09-30 Paul Brook <paul@codesourcery.com>
-
- * arm.h (ARM_EXT_V6K, ARM_EXT_V6Z): Define.
- (ARM_ARCH_V6K, ARM_ARCH_V6Z, ARM_ARCH_V6ZK): Define.
-
-2004-09-11 Theodore A. Roth <troth@openavr.org>
-
- * avr.h: Add support for
- atmega48, atmega88, atmega168, attiny13, attiny2313, at90can128.
-
-2004-09-09 Segher Boessenkool <segher@kernel.crashing.org>
-
- * ppc.h (PPC_OPERAND_OPTIONAL): Fix comment.
-
-2004-08-24 Dmitry Diky <diwil@spec.ru>
-
- * msp430.h (msp430_opc): Add new instructions.
- (msp430_rcodes): Declare new instructions.
- (msp430_hcodes): Likewise..
-
-2004-08-13 Nick Clifton <nickc@redhat.com>
-
- PR/301
- * h8300.h (O_JSR): Do not allow VECIND addressing for non-SX
- processors.
-
-2004-08-30 Michal Ludvig <mludvig@suse.cz>
-
- * i386.h (i386_optab): Added montmul/xsha1/xsha256 insns.
-
-2004-07-22 H.J. Lu <hongjiu.lu@intel.com>
-
- * i386.h (i386_optab): Allow cs/ds in 64bit for branch hints.
-
-2004-07-21 Jan Beulich <jbeulich@novell.com>
-
- * i386.h: Adjust instruction descriptions to better match the
- specification.
-
-2004-07-16 Richard Earnshaw <rearnsha@arm.com>
-
- * arm.h: Remove all old content. Replace with architecture defines
- from gas/config/tc-arm.c.
-
-2004-07-09 Andreas Schwab <schwab@suse.de>
-
- * m68k.h: Fix comment.
-
-2004-07-07 Tomer Levi <Tomer.Levi@nsc.com>
-
- * crx.h: New file.
-
-2004-06-24 Alan Modra <amodra@bigpond.net.au>
-
- * i386.h (i386_optab): Remove fildd, fistpd and fisttpd.
-
-2004-05-24 Peter Barada <peter@the-baradas.com>
-
- * m68k.h: Add 'size' to m68k_opcode.
-
-2004-05-05 Peter Barada <peter@the-baradas.com>
-
- * m68k.h: Switch from ColdFire chip name to core variant.
-
-2004-04-22 Peter Barada <peter@the-baradas.com>
-
- * m68k.h: Add mcfmac/mcfemac definitions. Update operand
- descriptions for new EMAC cases.
- Remove ColdFire macmw/macml/msacmw/msacmw hacks and properly
- handle Motorola MAC syntax.
- Allow disassembly of ColdFire V4e object files.
-
-2004-03-16 Alan Modra <amodra@bigpond.net.au>
-
- * ppc.h (PPC_OPERAND_GPR_0): Define. Bump other operand defines.
-
-2004-03-12 Jakub Jelinek <jakub@redhat.com>
-
- * i386.h (i386_optab): Remove CpuNo64 from sysenter and sysexit.
-
-2004-03-12 Michal Ludvig <mludvig@suse.cz>
-
- * i386.h (i386_optab): Added xstore as an alias for xstorerng.
-
-2004-03-12 Michal Ludvig <mludvig@suse.cz>
-
- * i386.h (i386_optab): Added xstore/xcrypt insns.
-
-2004-02-09 Anil Paranjpe <anilp1@KPITCummins.com>
-
- * h8300.h (32bit ldc/stc): Add relaxing support.
-
-2004-01-12 Anil Paranjpe <anilp1@KPITCummins.com>
-
- * h8300.h (BITOP): Pass MEMRELAX flag.
-
-2004-01-09 Anil Paranjpe <anilp1@KPITCummins.com>
-
- * h8300.h (BITOP): Dissallow operations on @aa:16 and @aa:32
- except for the H8S.
-
-For older changes see ChangeLog-9103
-
-Copyright (C) 2004-2012 Free Software Foundation, Inc.
-
-Copying and distribution of this file, with or without modification,
-are permitted in any medium without royalty provided the copyright
-notice and this notice are preserved.
-
-Local Variables:
-mode: change-log
-left-margin: 8
-fill-column: 74
-version-control: never
-End:
diff --git a/include/opcode/ChangeLog-9103 b/include/opcode/ChangeLog-9103
deleted file mode 100644
index b56e7d533..000000000
--- a/include/opcode/ChangeLog-9103
+++ /dev/null
@@ -1,3131 +0,0 @@
-2005-04-13 H.J. Lu <hongjiu.lu@intel.com>
-
- 2003-11-18 Maciej W. Rozycki <macro@ds2.pg.gda.pl>
- * mips.h: Define new enum members, M_LCA_AB and M_DLCA_AB.
-
- 2003-04-04 Svein E. Seldal <Svein.Seldal@solidas.com>
- * tic4x.h: Namespace cleanup. Replace s/c4x/tic4x
-
- 2002-11-16 Klee Dienes <kdienes@apple.com>
- * m88k.h (INSTAB): Remove 'next' field.
- (instruction): Remove definition; replace with extern declaration
- and mark as const.
-
- 2002-08-28 Michael Hayes <m.hayes@elec.canterbury.ac.nz>
- * tic4x.h: New file.
-
- 2002-07-25 Richard Sandiford <rsandifo@redhat.com>
- * mips.h (CPU_R2000): Remove.
-
-2003-10-21 Peter Barada <pbarada@mail.wm.sps.mot.com>
- Bernardo Innocenti <bernie@develer.com>
-
- * m68k.h: Add MCFv4/MCF5528x support.
-
-2003-10-19 Hans-Peter Nilsson <hp@bitrange.com>
-
- * mmix.h (JMP_INSN_BYTE): Define.
-
-2003-09-30 Chris Demetriou <cgd@broadcom.com>
-
- * mips.h: Document +E, +F, +G, +H, and +I operand types.
- Update documentation of I, +B and +C operand types.
- (INSN_ISA64R2, ISA_MIPS64R2, CPU_MIPS64R2): New defines.
- (M_DEXT, M_DINS): New enum values.
-
-2003-09-04 Nick Clifton <nickc@redhat.com>
-
- * v850.h (PROCESSOR_V850E1): Define.
-
-2003-08-19 Alan Modra <amodra@bigpond.net.au>
-
- * ppc.h (PPC_OPCODE_440): Define. Formatting. Use hex for other
- PPC_OPCODE_* defines.
-
-2003-08-16 Jason Eckhardt <jle@rice.edu>
-
- * i860.h (fmov.ds): Expand as famov.ds.
- (fmov.sd): Expand as famov.sd.
- (pfmov.ds): Expand as pfamov.ds.
-
-2003-08-07 Michael Meissner <gnu@the-meissners.org>
-
- * cgen.h: Remove PARAM macro usage in all prototypes.
- (CGEN_EXTRACT_INFO): Use void * instead of PTR.
- (cgen_print_fn): Ditto.
- (CGEN_HW_ENTRY): Ditto.
- (CGEN_MAYBE_MULTI_IFLD): Ditto.
- (struct cgen_insn): Ditto.
- (CGEN_CPU_TABLE): Ditto.
-
-2003-08-07 Alan Modra <amodra@bigpond.net.au>
-
- * alpha.h: Remove PARAMS macro.
- * arc.h: Likewise.
- * d10v.h: Likewise.
- * d30v.h: Likewise.
- * i370.h: Likewise.
- * or32.h: Likewise.
- * pj.h: Likewise.
- * ppc.h: Likewise.
- * sparc.h: Likewise.
- * tic80.h: Likewise.
- * v850.h: Likewise.
-
-2003-07-18 Michael Snyder <msnyder@redhat.com>
-
- * include/opcode/h8sx.h (DO_MOVA1, DO_MOVA2): Reformatting.
-
-2003-07-15 Richard Sandiford <rsandifo@redhat.com>
-
- * mips.h (CPU_RM7000): New macro.
- (OPCODE_IS_MEMBER): Match CPU_RM7000 against 4650 insns.
-
-2003-07-09 Alexandre Oliva <aoliva@redhat.com>
-
- 2000-04-01 Alexandre Oliva <aoliva@cygnus.com>
- * mn10300.h (AM33_2): Renamed from AM33.
- 2000-03-31 Alexandre Oliva <aoliva@cygnus.com>
- * mn10300.h (AM332, FMT_D3): Defined.
- (MN10300_OPERAND_FSREG, MN10300_OPERAND_FDREG): Likewise.
- (MN10300_OPERAND_FPCR): Likewise.
-
-2003-07-01 Martin Schwidefsky <schwidefsky@de.ibm.com>
-
- * s390.h (s390_opcode_cpu_val): Add enum for cpu type z990.
-
-2003-06-25 Richard Sandiford <rsandifo@redhat.com>
-
- * h8300.h (IMM2_NS, IMM8_NS, IMM16_NS): Remove.
- (IMM8U, IMM8U_NS): Define.
- (h8_opcodes): Use IMM8U_NS for mov.[wl] #xx:8,@yy.
-
-2003-06-25 Richard Sandiford <rsandifo@redhat.com>
-
- * h8300.h (h8_opcodes): Fix the mov.l @(dd:32,ERs),ERd and
- mov.l ERs,@(dd:32,ERd) entries.
-
-2003-06-23 H.J. Lu <hongjiu.lu@intel.com>
-
- * i386.h (i386_optab): Support Intel Precott New Instructions.
-
-2003-06-10 Gary Hade <garyhade@us.ibm.com>
-
- * ppc.h (PPC_OPERAND_DQ): Define.
-
-2003-06-10 Richard Sandiford <rsandifo@redhat.com>
-
- * h8300.h (IMM4_NS, IMM8_NS): New.
- (h8_opcodes): Replace IMM4 with IMM4_NS in mov.b and mov.w entries.
- Likewise IMM8 for mov.w and mov.l. Likewise IMM16U for mov.l.
-
-2003-06-03 Michael Snyder <msnyder@redhat.com>
-
- * h8300.h (enum h8_model): Add AV_H8S to distinguish from H8H.
- (ldc): Split ccr ops from exr ops (which are only available
- on H8S or H8SX).
- (stc): Ditto.
- (andc, orc, xorc): Ditto.
- (ldmac, stmac, clrmac, mac): Change access to AV_H8S.
-
-2003-06-03 Michael Snyder <msnyder@redhat.com>
- and Bernd Schmidt <bernds@redhat.com>
- and Alexandre Oliva <aoliva@redhat.com>
- * h8300.h: Add support for h8300sx instruction set.
-
-2003-05-23 Jason Eckhardt <jle@rice.edu>
-
- * i860.h (expand_type): Add XP_ONLY.
- (scyc.b): New XP instruction.
- (ldio.l): Likewise.
- (ldio.s): Likewise.
- (ldio.b): Likewise.
- (ldint.l): Likewise.
- (ldint.s): Likewise.
- (ldint.b): Likewise.
- (stio.l): Likewise.
- (stio.s): Likewise.
- (stio.b): Likewise.
- (pfld.q): Likewise.
-
-2003-05-20 Jason Eckhardt <jle@rice.edu>
-
- * i860.h (flush): Set lower 3 bits properly and use 'L'
- for the immediate operand type instead of 'i'.
-
-2003-05-20 Jason Eckhardt <jle@rice.edu>
-
- * i860.h (fzchks): Both S and R bits must be set.
- (pfzchks): Likewise.
- (faddp): Likewise.
- (pfaddp): Likewise.
- (fix.ss): Remove (invalid instruction).
- (pfix.ss): Likewise.
- (ftrunc.ss): Likewise.
- (pftrunc.ss): Likewise.
-
-2003-05-18 Jason Eckhardt <jle@rice.edu>
-
- * i860.h (form, pform): Add missing .dd suffix.
-
-2003-05-13 Stephane Carrez <stcarrez@nerim.fr>
-
- * m68hc11.h (M68HC12_BANK_VIRT): Define to 0x010000
-
-2003-04-07 Michael Snyder <msnyder@redhat.com>
-
- * h8300.h (ldc/stc): Fix up src/dst swaps.
-
-2003-04-09 J. Grant <jg-binutils@jguk.org>
-
- * mips.h: Correct comment typo.
-
-2003-03-21 Martin Schwidefsky <schwidefsky@de.ibm.com>
-
- * s390.h (s390_opcode_arch_val): Rename to s390_opcode_mode_val.
- (S390_OPCODE_ESAME): Rename to S390_OPCODE_ZARCH.
- (s390_opcode): Remove architecture. Add modes and min_cpu.
-
-2003-03-17 D.Venkatasubramanian <dvenkat@noida.hcltech.com>
-
- * h8300.h (O_SYS_CMDLINE): New pseudo opcode for command line
- processing.
-
-2003-02-21 Noida D.Venkatasubramanian <dvenkat@noida.hcltech.com>
-
- * h8300.h (ldmac, stmac): Replace MACREG with MS32 and MD32.
-
-2003-01-23 Alan Modra <amodra@bigpond.net.au>
-
- * m68hc11.h (cpu6812s): Define.
-
-2003-01-07 Chris Demetriou <cgd@broadcom.com>
-
- * mips.h: Fix missing space in comment.
- (INSN_ISA1, INSN_ISA2, INSN_ISA3, INSN_ISA4, INSN_ISA5)
- (INSN_ISA32, INSN_ISA32R2, INSN_ISA64): Shift values right
- by four bits.
-
-2003-01-02 Chris Demetriou <cgd@broadcom.com>
-
- * mips.h: Update copyright years to include 2002 (which had
- been missed previously) and 2003. Make comments about "+A",
- "+B", and "+C" operand types more descriptive.
-
-2002-12-31 Chris Demetriou <cgd@broadcom.com>
-
- * mips.h: Note that the "+D" operand type name is now used.
-
-2002-12-30 Chris Demetriou <cgd@broadcom.com>
-
- * mips.h: Document "+" as the start of two-character operand
- type names, and add new "K", "+A", "+B", and "+C" operand types.
- (OP_MASK_INSMSB, OP_SH_INSMSB, OP_MASK_EXTMSB)
- (OP_SH_EXTMSB, INSN_ISA32R2, ISA_MIPS32R2, CPU_MIPS32R2): New
- defines.
-
-2002-12-24 Dmitry Diky <diwil@mail.ru>
-
- * msp430.h: New file. Defines msp430 opcodes.
-
-2002-12-30 D.Venkatasubramanian <dvenkat@noida.hcltech.com>
-
- * h8300.h: Added some more pseudo opcodes for system call
- processing.
-
-2002-12-19 Chris Demetriou <cgd@broadcom.com>
-
- * mips.h (OP_OP_COP0, OP_OP_COP1, OP_OP_COP2, OP_OP_COP3)
- (OP_OP_LWC1, OP_OP_LWC2, OP_OP_LWC3, OP_OP_LDC1, OP_OP_LDC2)
- (OP_OP_LDC3, OP_OP_SWC1, OP_OP_SWC2, OP_OP_SWC3, OP_OP_SDC1)
- (OP_OP_SDC2, OP_OP_SDC3): Define.
-
-2002-12-16 Alan Modra <amodra@bigpond.net.au>
-
- * hppa.h (completer_chars): #if 0 out.
-
- * ns32k.h (struct ns32k_opcode): Constify "name", "operands" and
- "default_args".
- (struct not_wot): Constify "args".
- (struct not): Constify "name".
- (numopcodes): Delete.
- (endop): Delete.
-
-2002-12-13 Alan Modra <amodra@bigpond.net.au>
-
- * pj.h (pj_opc_info_t): Add union.
-
-2002-12-04 David Mosberger <davidm@hpl.hp.com>
-
- * ia64.h: Fix copyright message.
- (IA64_OPND_AR_CSD): New operand kind.
-
-2002-12-03 Richard Henderson <rth@redhat.com>
-
- * ia64.h (enum ia64_opnd): Add IA64_OPND_LDXMOV.
-
-2002-12-03 Alan Modra <amodra@bigpond.net.au>
-
- * cgen.h (struct cgen_maybe_multi_ifield): Add "const PTR p" to union.
- Constify "leaf" and "multi".
-
-2002-11-19 Klee Dienes <kdienes@apple.com>
-
- * h8300.h (h8_opcode): Remove 'noperands', 'idx', and 'size'
- fields.
- (h8_opcodes). Modify initializer and initializer macros to no
- longer initialize the removed fields.
-
-2002-11-19 Svein E. Seldal <Svein.Seldal@solidas.com>
-
- * tic4x.h (c4x_insts): Fixed LDHI constraint
-
-2002-11-18 Klee Dienes <kdienes@apple.com>
-
- * h8300.h (h8_opcode): Remove 'length' field.
- (h8_opcodes): Mark as 'const' (both the declaration and
- definition). Modify initializer and initializer macros to no
- longer initialize the length field.
-
-2002-11-18 Klee Dienes <kdienes@apple.com>
-
- * arc.h (arc_ext_opcodes): Declare as extern.
- (arc_ext_operands): Declare as extern.
- * i860.h (i860_opcodes): Declare as const.
-
-2002-11-18 Svein E. Seldal <Svein.Seldal@solidas.com>
-
- * tic4x.h: File reordering. Added enhanced opcodes.
-
-2002-11-16 Svein E. Seldal <Svein.Seldal@solidas.com>
-
- * tic4x.h: Major rewrite of entire file. Define instruction
- classes, and put each instruction into a class.
-
-2002-11-11 Svein E. Seldal <Svein.Seldal@solidas.com>
-
- * tic4x.h: Added new opcodes and corrected some bugs. Add support
- for new DSP types.
-
-2002-10-14 Alan Modra <amodra@bigpond.net.au>
-
- * cgen.h: Test __BFD_H_SEEN__ rather than BFD_VERSION_DATE.
-
-2002-09-30 Gavin Romig-Koch <gavin@redhat.com>
- Ken Raeburn <raeburn@cygnus.com>
- Aldy Hernandez <aldyh@redhat.com>
- Eric Christopher <echristo@redhat.com>
- Richard Sandiford <rsandifo@redhat.com>
-
- * mips.h: Update comment for new opcodes.
- (OP_MASK_VECBYTE, OP_SH_VECBYTE): New.
- (OP_MASK_VECALIGN, OP_SH_VECALIGN): New.
- (INSN_4111, INSN_4120, INSN_5400, INSN_5500): New.
- (CPU_VR4120, CPU_VR5400, CPU_VR5500): New.
- (OPCODE_IS_MEMBER): Handle the new CPU_* values and INSN_* flags.
- Don't match CPU_R4111 with INSN_4100.
-
-2002-08-19 Elena Zannoni <ezannoni@redhat.com>
-
- From matthew green <mrg@redhat.com>
-
- * ppc.h (PPC_OPCODE_SPE): New opcode flag for Powerpc e500
- instructions.
- (PPC_OPCODE_ISEL, PPC_OPCODE_BRLOCK, PPC_OPCODE_PMR,
- PPC_OPCODE_CACHELCK, PPC_OPCODE_RFMCI): New opcode flags for the
- e500x2 Integer select, branch locking, performance monitor,
- cache locking and machine check APUs, respectively.
- (PPC_OPCODE_EFS): New opcode type for efs* instructions.
- (PPC_OPCODE_CLASSIC): New opcode type for Classic PowerPC instructions.
-
-2002-08-13 Stephane Carrez <stcarrez@nerim.fr>
-
- * m68hc11.h (M6812_OP_PAGE): Define to identify call operand.
- (M68HC12_BANK_VIRT, M68HC12_BANK_MASK, M68HC12_BANK_BASE,
- M68HC12_BANK_SHIFT, M68HC12_BANK_PAGE_MASK): Define for 68HC12
- memory banks.
- (M6811_OC1M5, M6811_OC1M4, M6811_MODF): Fix value.
-
-2002-07-09 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
-
- * mips.h (INSN_MIPS16): New define.
-
-2002-07-08 Alan Modra <amodra@bigpond.net.au>
-
- * i386.h: Remove IgnoreSize from movsx and movzx.
-
-2002-06-08 Alan Modra <amodra@bigpond.net.au>
-
- * a29k.h: Replace CONST with const.
- (CONST): Don't define.
- * convex.h: Replace CONST with const.
- (CONST): Don't define.
- * dlx.h: Replace CONST with const.
- * or32.h (CONST): Don't define.
-
-2002-05-30 Chris G. Demetriou <cgd@broadcom.com>
-
- * mips.h (OP_SH_ALN, OP_MASK_ALN, OP_SH_VSEL, OP_MASK_VSEL)
- (MDMX_FMTSEL_IMM_QH, MDMX_FMTSEL_IMM_OB, MDMX_FMTSEL_VEC_QH)
- (MDMX_FMTSEL_VEC_OB, INSN_READ_MDMX_ACC, INSN_WRITE_MDMX_ACC)
- (INSN_MDMX): New constants, for MDMX support.
- (opcode character list): Add "O", "Q", "X", "Y", and "Z" for MDMX.
-
-2002-05-28 Kuang Hwa Lin <kuang@sbcglobal.net>
-
- * dlx.h: New file.
-
-2002-05-25 Alan Modra <amodra@bigpond.net.au>
-
- * ia64.h: Use #include "" instead of <> for local header files.
- * sparc.h: Likewise.
-
-2002-05-22 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
-
- * mips.h: Add M_DROL, M_DROL_I, M_DROR, M_DROR_I macro cases.
-
-2002-05-17 Andrey Volkov <avolkov@sources.redhat.com>
-
- * h8300.h: Corrected defs of all control regs
- and eepmov instr.
-
-2002-04-11 Alan Modra <amodra@bigpond.net.au>
-
- * i386.h: Add intel mode cmpsd and movsd.
- Put them before SSE2 insns, so that rep prefix works.
-
-2002-03-15 Chris G. Demetriou <cgd@broadcom.com>
-
- * mips.h (INSN_MIPS3D): New definition used to mark MIPS-3D
- instructions.
- (OPCODE_IS_MEMBER): Adjust comments to indicate that ASE bit masks
- may be passed along with the ISA bitmask.
-
-2002-03-05 Paul Koning <pkoning@equallogic.com>
-
- * pdp11.h: Add format codes for float instruction formats.
-
-2002-02-25 Alan Modra <amodra@bigpond.net.au>
-
- * ppc.h (PPC_OPCODE_POWER4, PPC_OPCODE_NOPOWER4): Define.
-
-Mon Feb 18 17:31:48 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.h (push,pop): Fix Reg64 to WordReg to allow 16bit operands.
-
-Mon Feb 11 12:53:19 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.h (push,pop): Allow 16bit operands in 64bit mode.
- (xchg): Fix.
- (in, out): Disable 64bit operands.
- (call, jmp): Avoid REX prefixes.
- (jcxz): Prohibit in 64bit mode
- (jrcxz, loop): Add 64bit variants.
- (movq): Fix patterns.
- (movmskps, pextrw, pinstrw): Add 64bit variants.
-
-2002-01-31 Ivan Guzvinec <ivang@opencores.org>
-
- * or32.h: New file.
-
-2002-01-22 Graydon Hoare <graydon@redhat.com>
-
- * cgen.h (CGEN_MAYBE_MULTI_IFLD): New structure.
- (CGEN_OPERAND): Add CGEN_MAYBE_MULTI_IFLD field.
-
-2002-01-21 Thomas Klausner <wiz@danbala.ifoer.tuwien.ac.at>
-
- * h8300.h: Comment typo fix.
-
-2002-01-03 matthew green <mrg@redhat.com>
-
- * ppc.h (PPC_OPCODE_BOOKE): BookE is not Motorola specific.
- (PPC_OPCODE_BOOKE64): Likewise.
-
-Mon Dec 31 16:45:41 2001 Jeffrey A Law (law@cygnus.com)
-
- * hppa.h (call, ret): Move to end of table.
- (addb, addib): PA2.0 variants should have been PA2.0W.
- (ldw, ldh, ldb, stw, sth, stb, stwa): Reorder to keep disassembler
- happy.
- (fldw, fldd, fstw, fstd, bb): Likewise.
- (short loads/stores): Tweak format specifier slightly to keep
- disassembler happy.
- (indexed loads/stores): Likewise.
- (absolute loads/stores): Likewise.
-
-2001-12-04 Alexandre Oliva <aoliva@redhat.com>
-
- * d10v.h (OPERAND_NOSP): New macro.
-
-2001-11-29 Alexandre Oliva <aoliva@redhat.com>
-
- * d10v.h (OPERAND_SP): New macro.
-
-2001-11-15 Alan Modra <amodra@bigpond.net.au>
-
- * ppc.h (struct powerpc_operand <insert, extract>): Add dialect param.
-
-2001-11-11 Timothy Wall <twall@alum.mit.edu>
-
- * tic54x.h: Revise opcode layout; don't really need a separate
- structure for parallel opcodes.
-
-2001-11-13 Zack Weinberg <zack@codesourcery.com>
- Alan Modra <amodra@bigpond.net.au>
-
- * i386.h (i386_optab): Add entries for "sldr", "smsw" and "str" to
- accept WordReg.
-
-2001-11-04 Chris Demetriou <cgd@broadcom.com>
-
- * mips.h (OPCODE_IS_MEMBER): Remove extra space.
-
-2001-10-30 Hans-Peter Nilsson <hp@bitrange.com>
-
- * mmix.h: New file.
-
-2001-10-18 Chris Demetriou <cgd@broadcom.com>
-
- * mips.h (OPCODE_IS_MEMBER): Add a no-op term to the end
- of the expression, to make source code merging easier.
-
-2001-10-17 Chris Demetriou <cgd@broadcom.com>
-
- * mips.h: Sort coprocessor instruction argument characters
- in comment, add a few more words of description for "H".
-
-2001-10-17 Chris Demetriou <cgd@broadcom.com>
-
- * mips.h (INSN_SB1): New cpu-specific instruction bit.
- (OPCODE_IS_MEMBER): Allow instructions matching INSN_SB1
- if cpu is CPU_SB1.
-
-2001-10-17 matthew green <mrg@redhat.com>
-
- * ppc.h (PPC_OPCODE_BOOKE64): Fix typo.
-
-2001-10-12 matthew green <mrg@redhat.com>
-
- * ppc.h (PPC_OPCODE_BOOKE, PPC_OPCODE_BOOKE64, PPC_OPCODE_403): New
- opcode flags for BookE 32-bit, BookE 64-bit and PowerPC 403
- instructions, respectively.
-
-2001-09-27 Nick Clifton <nickc@cambridge.redhat.com>
-
- * v850.h: Remove spurious comment.
-
-2001-09-21 Nick Clifton <nickc@cambridge.redhat.com>
-
- * h8300.h: Fix compile time warning messages
-
-2001-09-04 Richard Henderson <rth@redhat.com>
-
- * alpha.h (struct alpha_operand): Pack elements into bitfields.
-
-2001-08-31 Eric Christopher <echristo@redhat.com>
-
- * mips.h: Remove CPU_MIPS32_4K.
-
-2001-08-27 Torbjorn Granlund <tege@swox.com>
-
- * ppc.h (PPC_OPERAND_DS): Define.
-
-2001-08-25 Andreas Jaeger <aj@suse.de>
-
- * d30v.h: Fix declaration of reg_name_cnt.
-
- * d10v.h: Fix declaration of d10v_reg_name_cnt.
-
- * arc.h: Add prototypes from opcodes/arc-opc.c.
-
-2001-08-16 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
-
- * mips.h (INSN_10000): Define.
- (OPCODE_IS_MEMBER): Check for INSN_10000.
-
-2001-08-10 Alan Modra <amodra@one.net.au>
-
- * ppc.h: Revert 2001-08-08.
-
-2001-08-10 Richard Sandiford <rsandifo@redhat.com>
-
- * mips.h (INSN_GP32): Remove.
- (OPCODE_IS_MEMBER): Remove gp32 parameter.
- (M_MOVE): New macro identifier.
-
-2001-08-08 Alan Modra <amodra@one.net.au>
-
- 1999-10-25 Torbjorn Granlund <tege@swox.com>
- * ppc.h (struct powerpc_operand): New field `reloc'.
-
-2001-08-01 Aldy Hernandez <aldyh@redhat.com>
-
- * mips.h (INSN_ISA_MASK): Nuke bits 12-15.
-
-2001-07-12 Jeff Johnston <jjohnstn@redhat.com>
-
- * cgen.h (CGEN_INSN): Add regex support.
- (build_insn_regex): Declare.
-
-2001-07-11 Frank Ch. Eigler <fche@redhat.com>
-
- * cgen.h (CGEN_MACH): Add insn_chunk_bitsize field.
- (cgen_cpu_desc): Ditto.
-
-2001-07-07 Ben Elliston <bje@redhat.com>
-
- * m88k.h: Clean up and reformat. Remove unused code.
-
-2001-06-14 Geoffrey Keating <geoffk@redhat.com>
-
- * cgen.h (cgen_keyword): Add nonalpha_chars field.
-
-2001-05-23 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
-
- * mips.h (CPU_R12000): Define.
-
-2001-05-23 John Healy <jhealy@redhat.com>
-
- * cgen.h: Increased CGEN_MAX_SYNTAX_ELEMENTS to 48.
-
-2001-05-15 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
-
- * mips.h (INSN_ISA_MASK): Define.
-
-2001-05-12 Alan Modra <amodra@one.net.au>
-
- * i386.h (i386_optab): Second operand of cvtps2dq is an xmm reg,
- not an mmx reg. Swap xmm/mmx regs on both movdq2q and movq2dq,
- and use InvMem as these insns must have register operands.
-
-2001-05-04 Alan Modra <amodra@one.net.au>
-
- * i386.h (i386_optab): Move InvMem to first operand of pmovmskb
- and pextrw to swap reg/rm assignments.
-
-2001-04-05 Hans-Peter Nilsson <hp@axis.com>
-
- * cris.h (enum cris_insn_version_usage): Correct comment for
- cris_ver_v3p.
-
-2001-03-24 Alan Modra <alan@linuxcare.com.au>
-
- * i386.h (i386_optab): Correct entry for "movntdq". Add "punpcklqdq".
- Add InvMem to first operand of "maskmovdqu".
-
-2001-03-22 Hans-Peter Nilsson <hp@axis.com>
-
- * cris.h (ADD_PC_INCR_OPCODE): New macro.
-
-2001-03-21 Kazu Hirata <kazu@hxi.com>
-
- * h8300.h: Fix formatting.
-
-2001-03-22 Alan Modra <alan@linuxcare.com.au>
-
- * i386.h (i386_optab): Add paddq, psubq.
-
-2001-03-19 Alan Modra <alan@linuxcare.com.au>
-
- * i386.h (REGNAM_AL, REGNAM_AX, REGNAM_EAX): Define.
-
-2001-02-28 Igor Shevlyakov <igor@windriver.com>
-
- * m68k.h: new defines for Coldfire V4. Update mcf to know
- about mcf5407.
-
-2001-02-18 lars brinkhoff <lars@nocrew.org>
-
- * pdp11.h: New file.
-
-2001-02-12 Jan Hubicka <jh@suse.cz>
-
- * i386.h (i386_optab): SSE integer converison instructions have
- 64bit versions on x86-64.
-
-2001-02-10 Nick Clifton <nickc@redhat.com>
-
- * mips.h: Remove extraneous whitespace. Formating change to allow
- for future contribution.
-
-2001-02-09 Martin Schwidefsky <schwidefsky@de.ibm.com>
-
- * s390.h: New file.
-
-2001-02-02 Patrick Macdonald <patrickm@redhat.com>
-
- * cgen.h (CGEN_SYNTAX_CHAR_TYPE): Typedef as unsigned short.
- (CGEN_MAX_SYNTAX_ELEMENTS): Rename from CGEN_MAX_SYNTAX_BYTES.
- (CGEN_SYNTAX): Define using CGEN_MAX_SYNTAX_ELEMENTS.
-
-2001-01-24 Karsten Keil <kkeil@suse.de>
-
- * i386.h (i386_optab): Fix swapgs
-
-2001-01-14 Alan Modra <alan@linuxcare.com.au>
-
- * hppa.h: Describe new '<' and '>' operand types, and tidy
- existing comments.
- (pa_opcodes): Add entries for missing wide mode ldi,ldo,ldw,stw.
- Remove duplicate "ldw j(s,b),x". Sort some entries.
-
-2001-01-13 Jan Hubicka <jh@suse.cz>
-
- * i386.h (i386_optab): Fix pusha and ret templates.
-
-2001-01-11 Peter Targett <peter.targett@arccores.com>
-
- * arc.h (ARC_MACH_5, ARC_MACH_6, ARC_MACH_7, ARC_MACH_8): New
- definitions for masking cpu type.
- (arc_ext_operand_value) New structure for storing extended
- operands.
- (ARC_OPERAND_*) Flags for operand values.
-
-2001-01-10 Jan Hubicka <jh@suse.cz>
-
- * i386.h (pinsrw): Add.
- (pshufw): Remove.
- (cvttpd2dq): Fix operands.
- (cvttps2dq): Likewise.
- (movq2q): Rename to movdq2q.
-
-2001-01-10 Richard Schaal <richard.schaal@intel.com>
-
- * i386.h: Correct movnti instruction.
-
-2001-01-09 Jeff Johnston <jjohnstn@redhat.com>
-
- * cgen.h (CGEN_SYNTAX_CHAR_TYPE): New typedef based on max number
- of operands (unsigned char or unsigned short).
- (CGEN_SYNTAX): Changed to make array CGEN_SYNTAX_CHAR_TYPE.
- (CGEN_SYNTAX_CHAR): Changed to cast to unsigned char.
-
-2001-01-05 Jan Hubicka <jh@suse.cz>
-
- * i386.h (i386_optab): Make [sml]fence template to use immext field.
-
-2001-01-03 Jan Hubicka <jh@suse.cz>
-
- * i386.h (i386_optab): Fix 64bit pushf template; Add instructions
- introduced by Pentium4
-
-2000-12-30 Jan Hubicka <jh@suse.cz>
-
- * i386.h (i386_optab): Add "rex*" instructions;
- add swapgs; disable jmp/call far direct instructions for
- 64bit mode; add syscall and sysret; disable registers for 0xc6
- template. Add 'q' suffixes to extendable instructions, disable
- obsolete instructions, add new sign/zero extension ones.
- (i386_regtab): Add extended registers.
- (*Suf): Add No_qSuf.
- (q_Suf, wlq_Suf, bwlq_Suf): New.
-
-2000-12-20 Jan Hubicka <jh@suse.cz>
-
- * i386.h (i386_optab): Replace "Imm" with "EncImm".
- (i386_regtab): Add flags field.
-
-2000-12-12 Nick Clifton <nickc@redhat.com>
-
- * mips.h: Fix formatting.
-
-2000-12-01 Chris Demetriou <cgd@sibyte.com>
-
- mips.h (OP_MASK_SYSCALL, OP_SH_SYSCALL): Delete.
- (OP_MASK_CODE20, OP_SH_CODE20): Define, with values of old
- OP_*_SYSCALL definitions.
- (OP_SH_CODE19, OP_MASK_CODE19): Define, for use as
- 19 bit wait codes.
- (MIPS operand specifier comments): Remove 'm', add 'U' and
- 'J', and update the meaning of 'B' so that it's more general.
-
- * mips.h (INSN_ISA1, INSN_ISA2, INSN_ISA3, INSN_ISA4,
- INSN_ISA5): Renumber, redefine to mean the ISA at which the
- instruction was added.
- (INSN_ISA32): New constant.
- (INSN_4650, INSN_4010, INSN_4100, INSN_3900, INSN_GP32):
- Renumber to avoid new and/or renumbered INSN_* constants.
- (INSN_MIPS32): Delete.
- (ISA_UNKNOWN): New constant to indicate unknown ISA.
- (ISA_MIPS1, ISA_MIPS2, ISA_MIPS3, ISA_MIPS4, ISA_MIPS5,
- ISA_MIPS32): New constants, defined to be the mask of INSN_*
- constants available at that ISA level.
- (CPU_UNKNOWN): New constant to indicate unknown CPU.
- (CPU_4K, CPU_MIPS32_4K): Rename the former to the latter,
- define it with a unique value.
- (OPCODE_IS_MEMBER): Update for new ISA membership-related
- constant meanings.
-
- * mips.h (INSN_ISA64, ISA_MIPS5, ISA_MIPS64): New
- definitions.
-
- * mips.h (CPU_SB1): New constant.
-
-2000-10-20 Jakub Jelinek <jakub@redhat.com>
-
- * sparc.h (enum sparc_opcode_arch_val): Add SPARC_OPCODE_ARCH_V9B.
- Note that '3' is used for siam operand.
-
-2000-09-22 Jim Wilson <wilson@cygnus.com>
-
- * ia64.h (enum ia64_dependency_semantics): Add IA64_DVS_STOP.
-
-2000-09-13 Anders Norlander <anorland@acc.umu.se>
-
- * mips.h: Use defines instead of hard-coded processor numbers.
- (CPU_R2000, CPU_R3000, CPU_R3900, CPU_R4000, CPU_R4010,
- CPU_VR4100, CPU_R4111, CPU_R4300, CPU_R4400, CPU_R4600, CPU_R4650,
- CPU_R5000, CPU_R6000, CPU_R8000, CPU_R10000, CPU_MIPS32, CPU_4K,
- CPU_4KC, CPU_4KM, CPU_4KP): Define..
- (OPCODE_IS_MEMBER): Use new defines.
- (OP_MASK_SEL, OP_SH_SEL): Define.
- (OP_MASK_CODE20, OP_SH_CODE20): Define.
- Add 'P' to used characters.
- Use 'H' for coprocessor select field.
- Use 'm' for 20 bit breakpoint code.
- Document new arg characters and add to used characters.
- (INSN_MIPS32): New define for MIPS32 extensions.
- (OPCODE_IS_MEMBER): Recognize MIPS32 instructions.
-
-2000-09-05 Alan Modra <alan@linuxcare.com.au>
-
- * hppa.h: Mention cz completer.
-
-2000-08-16 Jim Wilson <wilson@cygnus.com>
-
- * ia64.h (IA64_OPCODE_POSTINC): New.
-
-2000-08-15 H.J. Lu <hjl@gnu.org>
-
- * i386.h: Swap the Intel syntax "movsx"/"movzx" due to the
- IgnoreSize change.
-
-2000-08-08 Jason Eckhardt <jle@cygnus.com>
-
- * i860.h: Small formatting adjustments.
-
-2000-07-29 Marek Michalkiewicz <marekm@linux.org.pl>
-
- * avr.h (AVR_UNDEF_P, AVR_SKIP_P, AVR_DISP0_P): New macros.
- Move related opcodes closer to each other.
- Minor changes in comments, list undefined opcodes.
-
-2000-07-26 Dave Brolley <brolley@redhat.com>
-
- * cgen.h (cgen_hw_lookup_by_num): Second parameter is unsigned.
-
-2000-07-22 Jason Eckhardt <jle@cygnus.com>
-
- * i860.h (btne, bte, bla): Changed these opcodes
- to use sbroff ('r') instead of split16 ('s').
- (J, K, L, M): New operand types for 16-bit aligned fields.
- (ld.x, {p}fld.x, fst.x, pst.d): Changed these opcodes to
- use I, J, K, L, M instead of just I.
- (T, U): New operand types for split 16-bit aligned fields.
- (st.x): Changed these opcodes to use S, T, U instead of just S.
- (andh, andnoth, orh, xorh): Deleted 3-register forms as they do not
- exist on the i860.
- (pfgt.sd, pfle.sd): Deleted these as they do not exist on the i860.
- (pfeq.ss, pfeq.dd): New opcodes.
- (st.s): Fixed incorrect mask bits.
- (fmlow): Fixed incorrect mask bits.
- (fzchkl, pfzchkl): Fixed incorrect mask bits.
- (faddz, pfaddz): Fixed incorrect mask bits.
- (form, pform): Fixed incorrect mask bits.
- (pfld.l): Fixed incorrect mask bits.
- (fst.q): Fixed incorrect mask bits.
- (all floating point opcodes): Fixed incorrect mask bits for
- handling of dual bit.
-
-2000-07-20 Hans-Peter Nilsson <hp@axis.com>
-
- cris.h: New file.
-
-2000-06-26 Marek Michalkiewicz <marekm@linux.org.pl>
-
- * avr.h (AVR_ISA_WRAP): Remove, now assumed if not AVR_ISA_MEGA.
- (AVR_ISA_ESPM): Remove, because ESPM removed in databook update.
- (AVR_ISA_85xx): Remove, all uses changed back to AVR_ISA_2xxx.
- (AVR_ISA_M83): Define for ATmega83, ATmega85.
- (espm): Remove, because ESPM removed in databook update.
- (eicall, eijmp): Move to the end of opcode table.
-
-2000-06-18 Stephane Carrez <stcarrez@worldnet.fr>
-
- * m68hc11.h: New file for support of Motorola 68hc11.
-
-Fri Jun 9 21:51:50 2000 Denis Chertykov <denisc@overta.ru>
-
- * avr.h: clr,lsl,rol, ... moved after add,adc, ...
-
-Wed Jun 7 21:39:54 2000 Denis Chertykov <denisc@overta.ru>
-
- * avr.h: New file with AVR opcodes.
-
-Wed Apr 12 17:11:20 2000 Donald Lindsay <dlindsay@hound.cygnus.com>
-
- * d10v.h: added ALONE attribute for d10v_opcode.exec_type.
-
-2000-05-23 Maciej W. Rozycki <macro@ds2.pg.gda.pl>
-
- * i386.h: Allow d suffix on iret, and add DefaultSize modifier.
-
-2000-05-17 Maciej W. Rozycki <macro@ds2.pg.gda.pl>
-
- * i386.h: Use sl_FP, not sl_Suf for fild.
-
-2000-05-16 Frank Ch. Eigler <fche@redhat.com>
-
- * cgen.h (CGEN_MAX_SYNTAX_BYTES): Increase to 32. Check that
- it exceeds CGEN_ACTUAL_MAX_SYNTAX_BYTES, if set.
- (CGEN_MAX_IFMT_OPERANDS): Increase to 16. Check that it exceeds
- CGEN_ACTUAL_MAX_IFMT_OPERANDS, if set.
-
-2000-05-13 Alan Modra <alan@linuxcare.com.au>,
-
- * i386.h (i386_optab): Cpu686 for sysenter,sysexit,fxsave,fxrestore.
-
-2000-05-13 Alan Modra <alan@linuxcare.com.au>,
- Alexander Sokolov <robocop@netlink.ru>
-
- * i386.h (i386_optab): Add cpu_flags for all instructions.
-
-2000-05-13 Alan Modra <alan@linuxcare.com.au>
-
- From Gavin Romig-Koch <gavin@cygnus.com>
- * i386.h (wld_Suf): Define. Use on pushf, popf, pusha, popa.
-
-2000-05-04 Timothy Wall <twall@cygnus.com>
-
- * tic54x.h: New.
-
-2000-05-03 J.T. Conklin <jtc@redback.com>
-
- * ppc.h (PPC_OPCODE_ALTIVEC): New opcode flag for vector unit.
- (PPC_OPERAND_VR): New operand flag for vector registers.
-
-2000-05-01 Kazu Hirata <kazu@hxi.com>
-
- * h8300.h (EOP): Add missing initializer.
-
-Fri Apr 21 15:03:37 2000 Jason Eckhardt <jle@cygnus.com>
-
- * hppa.h (pa_opcodes): New opcodes for PA2.0 wide mode
- forms of ld/st{b,h,w,d} and fld/fst{w,d} (16-bit displacements).
- New operand types l,y,&,fe,fE,fx added to support above forms.
- (pa_opcodes): Replaced usage of 'x' as source/target for
- floating point double-word loads/stores with 'fx'.
-
-Fri Apr 21 13:20:53 2000 Richard Henderson <rth@cygnus.com>
- David Mosberger <davidm@hpl.hp.com>
- Timothy Wall <twall@cygnus.com>
- Jim Wilson <wilson@cygnus.com>
-
- * ia64.h: New file.
-
-2000-03-27 Nick Clifton <nickc@cygnus.com>
-
- * d30v.h (SHORT_A1): Fix value.
- (SHORT_AR): Renumber so that it is at the end of the list of short
- instructions, not the end of the list of long instructions.
-
-2000-03-26 Alan Modra <alan@linuxcare.com>
-
- * i386.h: (UNIXWARE_COMPAT): Rename to SYSV386_COMPAT as the
- problem isn't really specific to Unixware.
- (OLDGCC_COMPAT): Define.
- (i386_optab): If !OLDGCC_COMPAT, don't handle fsubp etc. with
- destination %st(0).
- Fix lots of comments.
-
-2000-03-02 J"orn Rennecke <amylaar@cygnus.co.uk>
-
- * d30v.h:
- (SHORT_B2r, SHORT_B3, SHORT_B3r, SHORT_B3b, SHORT_B3br): Updated.
- (SHORT_D1r, SHORT_D2, SHORT_D2r, SHORT_D2Br, SHORT_U): Updated.
- (SHORT_F, SHORT_AF, SHORT_T, SHORT_A5, SHORT_CMP, SHORT_CMPU): Updated.
- (SHORT_A1, SHORT_AA, SHORT_RA, SHORT_MODINC, SHORT_MODDEC): Updated.
- (SHORT_C1, SHORT_C2, SHORT_UF, SHORT_A2, SHORT_NONE, LONG): Updated.
- (LONG_U, LONG_Ur, LONG_CMP, LONG_M, LONG_M2, LONG_2, LONG_2r): Updated.
- (LONG_2b, LONG_2br, LONG_D, LONG_Dr, LONG_Dbr): Updated.
-
-2000-02-25 Alan Modra <alan@spri.levels.unisa.edu.au>
-
- * i386.h (fild, fistp): Change intel d_Suf form to fildd and
- fistpd without suffix.
-
-2000-02-24 Nick Clifton <nickc@cygnus.com>
-
- * cgen.h (cgen_cpu_desc): Rename field 'flags' to
- 'signed_overflow_ok_p'.
- Delete prototypes for cgen_set_flags() and cgen_get_flags().
-
-2000-02-24 Andrew Haley <aph@cygnus.com>
-
- * cgen.h (CGEN_INSN_MACH_HAS_P): New macro.
- (CGEN_CPU_TABLE): flags: new field.
- Add prototypes for new functions.
-
-2000-02-24 Alan Modra <alan@spri.levels.unisa.edu.au>
-
- * i386.h: Add some more UNIXWARE_COMPAT comments.
-
-2000-02-23 Linas Vepstas <linas@linas.org>
-
- * i370.h: New file.
-
-2000-02-22 Chandra Chavva <cchavva@cygnus.com>
-
- * d30v.h (FLAG_NOT_WITH_ADDSUBppp): Redefined as operation
- cannot be combined in parallel with ADD/SUBppp.
-
-2000-02-22 Andrew Haley <aph@cygnus.com>
-
- * mips.h: (OPCODE_IS_MEMBER): Add comment.
-
-1999-12-30 Andrew Haley <aph@cygnus.com>
-
- * mips.h (OPCODE_IS_MEMBER): Add gp32 arg, which determines
- whether synthetic opcodes (e.g. move) generate 32-bit or 64-bit
- insns.
-
-2000-01-15 Alan Modra <alan@spri.levels.unisa.edu.au>
-
- * i386.h: Qualify intel mode far call and jmp with x_Suf.
-
-1999-12-27 Alan Modra <alan@spri.levels.unisa.edu.au>
-
- * i386.h: Add JumpAbsolute qualifier to all non-intel mode
- indirect jumps and calls. Add FF/3 call for intel mode.
-
-Wed Dec 1 03:05:25 1999 Jeffrey A Law (law@cygnus.com)
-
- * mn10300.h: Add new operand types. Add new instruction formats.
-
-Wed Nov 24 20:28:58 1999 Jeffrey A Law (law@cygnus.com)
-
- * hppa.h (pa_opcodes): Correctly handle immediate for PA2.0 "bb"
- instruction.
-
-1999-11-18 Gavin Romig-Koch <gavin@cygnus.com>
-
- * mips.h (INSN_ISA5): New.
-
-1999-11-01 Gavin Romig-Koch <gavin@cygnus.com>
-
- * mips.h (OPCODE_IS_MEMBER): New.
-
-1999-10-29 Nick Clifton <nickc@cygnus.com>
-
- * d30v.h (SHORT_AR): Define.
-
-1999-10-18 Michael Meissner <meissner@cygnus.com>
-
- * alpha.h (alpha_num_opcodes): Convert to unsigned.
- (alpha_num_operands): Ditto.
-
-Sun Oct 10 01:46:56 1999 Jerry Quinn <jerry.quinn.adv91@alum.dartmouth.org>
-
- * hppa.h (pa_opcodes): Add load and store cache control to
- instructions. Add ordered access load and store.
-
- * hppa.h (pa_opcode): Add new entries for addb and addib.
-
- * hppa.h (pa_opcodes): Fix cmpb and cmpib entries.
-
- * hppa.h (pa_opcodes): Add entries for cmpb and cmpib.
-
-Thu Oct 7 00:12:25 MDT 1999 Diego Novillo <dnovillo@cygnus.com>
-
- * d10v.h: Add flag RESTRICTED_NUM3 for imm3 operands.
-
-Thu Sep 23 07:08:38 1999 Jerry Quinn <jquinn@nortelnetworks.com>
-
- * hppa.h (pa_opcodes): Add "call" and "ret". Clean up "b", "bve"
- and "be" using completer prefixes.
-
- * hppa.h (pa_opcodes): Add initializers to silence compiler.
-
- * hppa.h: Update comments about character usage.
-
-Mon Sep 20 03:55:31 1999 Jeffrey A Law (law@cygnus.com)
-
- * hppa.h (pa_opcodes): Fix minor thinkos introduced while cleaning
- up the new fstw & bve instructions.
-
-Sun Sep 19 10:40:59 1999 Jeffrey A Law (law@cygnus.com)
-
- * hppa.h (pa_opcodes): Add remaining PA2.0 integer load/store
- instructions.
-
- * hppa.h (pa_opcodes): Add remaining PA2.0 FP load/store instructions.
-
- * hppa.h (pa_opcodes): Add long offset double word load/store
- instructions.
-
- * hppa.h (pa_opcodes): Add FLAG_STRICT variants of FP loads and
- stores.
-
- * hppa.h (pa_opcodes): Handle PA2.0 fcnv, fcmp and ftest insns.
-
- * hppa.h (pa_opcodes): Finish support for PA2.0 "b" instructions.
-
- * hppa.h (pa_opcodes): Handle PA2.0 "bve" instructions.
-
- * hppa.h (pa_opcodes): Add new syntax "be" instructions.
-
- * hppa.h (pa_opcodes): Note use of 'M' and 'L'.
-
- * hppa.h (pa_opcodes): Add support for "b,l".
-
- * hppa.h (pa_opcodes): Add support for "b,gate".
-
-Sat Sep 18 11:41:16 1999 Jeffrey A Law (law@cygnus.com)
-
- * hppa.h (pa_opcodes): Use 'fX' for first register operand
- in xmpyu.
-
- * hppa.h (pa_opcodes): Fix mask for probe and probei.
-
- * hppa.h (pa_opcodes): Fix mask for depwi.
-
-Tue Sep 7 13:44:25 1999 Jeffrey A Law (law@cygnus.com)
-
- * hppa.h (pa_opcodes): Add "addil" variant which has the %r1 as
- an explicit output argument.
-
-Mon Sep 6 04:41:42 1999 Jeffrey A Law (law@cygnus.com)
-
- * hppa.h: Add strict variants of PA1.0/PA1.1 loads and stores.
- Add a few PA2.0 loads and store variants.
-
-1999-09-04 Steve Chamberlain <sac@pobox.com>
-
- * pj.h: New file.
-
-1999-08-29 Alan Modra <alan@spri.levels.unisa.edu.au>
-
- * i386.h (i386_regtab): Move %st to top of table, and split off
- other fp reg entries.
- (i386_float_regtab): To here.
-
-Sat Aug 28 00:25:25 1999 Jerry Quinn <jquinn@nortelnetworks.com>
-
- * hppa.h (pa_opcodes): Replace 'f' by 'v'. Prefix float register args
- by 'f'.
-
- * hppa.h (pa_opcodes): Add extrd, extrw, depd, depdi, depw, depwi.
- Add supporting args.
-
- * hppa.h: Document new completers and args.
- * hppa.h (pa_opcodes): Add 64 bit patterns and pa2.0 syntax for uxor,
- uaddcm, dcor, addi, add, sub, subi, shladd, rfi, and probe. Add pa2.0
- extensions for ssm, rsm, pdtlb, pitlb. Add performance instructions
- pmenb and pmdis.
-
- * hppa.h (pa_opcodes): Add pa2.0 instructions hadd, hshl,
- hshr, hsub, mixh, mixw, permh.
-
- * hppa.h (pa_opcodes): Change completers in instructions to
- use 'c' prefix.
-
- * hppa.h (pa_opcodes): Add popbts, new forms of bb, havg,
- hshladd, hshradd, shrpd, and shrpw instructions. Update arg comments.
-
- * hppa.h (pa_opcodes): Change fmpyfadd, fmpynfadd, fneg,
- fnegabs to use 'I' instead of 'F'.
-
-1999-08-21 Alan Modra <alan@spri.levels.unisa.edu.au>
-
- * i386.h: Add AMD athlon instructions, pfnacc, pfpnacc, pswapd.
- Document pf2iw and pi2fw as athlon insns. Remove pswapw.
- Alphabetically sort PIII insns.
-
-Wed Aug 18 18:14:40 1999 Doug Evans <devans@canuck.cygnus.com>
-
- * cgen.h (CGEN_INSN_MACH_HAS_P): New macro.
-
-Fri Aug 6 09:46:35 1999 Jerry Quinn <jquinn@nortelnetworks.com>
-
- * hppa.h (pa_opcodes): Add 64 bit versions of or, xor, and,
- and andcm. Add 32 and 64 bit version of cmpclr, cmpiclr.
-
- * hppa.h: Document 64 bit condition completers.
-
-Thu Aug 5 16:56:07 1999 Jerry Quinn <jquinn@nortelnetworks.com>
-
- * hppa.h (pa_opcodes): Change condition args to use '?' prefix.
-
-1999-08-04 Alan Modra <alan@spri.levels.unisa.edu.au>
-
- * i386.h (i386_optab): Add DefaultSize modifier to all insns
- that implicitly modify %esp. #undef d_Suf, x_suf, sld_suf,
- sldx_suf, bwld_Suf, d_FP, x_FP, sld_FP, sldx_FP at end of table.
-
-Wed Jul 28 02:04:24 1999 Jerry Quinn <jquinn@nortelnetworks.com>
- Jeff Law <law@cygnus.com>
-
- * hppa.h (pa_opcodes): Add "pushnom" and "pushbts".
-
- * hppa.h (pa_opcodes): Mark all PA2.0 opcodes with FLAG_STRICT.
-
- * hppa.h (pa_opcodes): Change xmpyu, fmpyfadd,
- and fmpynfadd to use 'J' and 'K' instead of 'E' and 'X'.
-
-1999-07-13 Alan Modra <alan@spri.levels.unisa.edu.au>
-
- * i386.h: Add "undocumented" AMD 3DNow! pf2iw, pi2fw, pswapw insns.
-
-Thu Jul 1 00:17:24 1999 Jeffrey A Law (law@cygnus.com)
-
- * hppa.h (struct pa_opcode): Add new field "flags".
- (FLAGS_STRICT): Define.
-
-Fri Jun 25 04:22:04 1999 Jerry Quinn <jquinn@nortelnetworks.com>
- Jeff Law <law@cygnus.com>
-
- * hppa.h (pa_opcodes): Add pa2.0 clrbts instruction.
-
- * hppa.h (pa_opcodes): Add entries for mfia and mtsarcm instructions.
-
-1999-06-23 Alan Modra <alan@spri.levels.unisa.edu.au>
-
- * i386.h: Allow `l' suffix on bswap. Allow `w' suffix on arpl,
- lldt, lmsw, ltr, str, verr, verw. Add FP flag to fcmov*. Add FP
- flag to fcomi and friends.
-
-Fri May 28 15:26:11 1999 Jeffrey A Law (law@cygnus.com)
-
- * hppa.h (pa_opcodes): Move integer arithmetic instructions after
- integer logical instructions.
-
-1999-05-28 Linus Nordberg <linus.nordberg@canit.se>
-
- * m68k.h: Document new formats `E', `G', `H' and new places `N',
- `n', `o'.
-
- * m68k.h: Define mcf5206e, mcf5307, mcf. Document new format `u'
- and new places `m', `M', `h'.
-
-Thu May 27 04:13:54 1999 Joel Sherrill (joel@OARcorp.com
-
- * hppa.h (pa_opcodes): Add several processor specific system
- instructions.
-
-Wed May 26 16:57:44 1999 Jeffrey A Law (law@cygnus.com)
-
- * hppa.h (pa_opcodes): Add second entry for "comb", "comib",
- "addb", and "addib" to be used by the disassembler.
-
-1999-05-12 Alan Modra <alan@apri.levels.unisa.edu.au>
-
- * i386.h (ReverseModrm): Remove all occurences.
- (InvMem): Add to control/debug/test mov insns, movhlps, movlhps,
- movmskps, pextrw, pmovmskb, maskmovq.
- Change NoSuf to FP on all MMX, XMM and AMD insns as these all
- ignore the data size prefix.
-
- * i386.h (i386_optab, i386_regtab): Add support for PIII SIMD.
- Mostly stolen from Doug Ledford <dledford@redhat.com>
-
-Sat May 8 23:27:35 1999 Richard Henderson <rth@cygnus.com>
-
- * ppc.h (PPC_OPCODE_64_BRIDGE): New.
-
-1999-04-14 Doug Evans <devans@casey.cygnus.com>
-
- * cgen.h (CGEN_ATTR): Delete member num_nonbools.
- (CGEN_ATTR_TYPE): Update.
- (CGEN_ATTR_MASK): Number booleans starting at 0.
- (CGEN_ATTR_VALUE): Update.
- (CGEN_INSN_ATTR): Update.
-
-Mon Apr 12 23:43:27 1999 Jeffrey A Law (law@cygnus.com)
-
- * hppa.h (fmpyfadd, fmpynfadd, fneg, fnegabs): New PA2.0
- instructions.
-
-Tue Mar 23 11:24:38 1999 Jeffrey A Law (law@cygnus.com)
-
- * hppa.h (bb, bvb): Tweak opcode/mask.
-
-
-1999-03-22 Doug Evans <devans@casey.cygnus.com>
-
- * cgen.h (CGEN_ISA,CGEN_MACH): New typedefs.
- (struct cgen_cpu_desc): Rename member mach to machs. New member isas.
- New members word_bitsize,default_insn_bitsize,base_insn-bitsize,
- min_insn_bitsize,max_insn_bitsize,isa_table,mach_table,rebuild_tables.
- Delete member max_insn_size.
- (enum cgen_cpu_open_arg): New enum.
- (cpu_open): Update prototype.
- (cpu_open_1): Declare.
- (cgen_set_cpu): Delete.
-
-1999-03-11 Doug Evans <devans@casey.cygnus.com>
-
- * cgen.h (CGEN_HW_TABLE): Delete `num_init_entries' member.
- (CGEN_OPERAND_NIL): New macro.
- (CGEN_OPERAND): New member `type'.
- (@arch@_cgen_operand_table): Delete decl.
- (CGEN_OPERAND_INDEX,CGEN_OPERAND_TYPE,CGEN_OPERAND_ENTRY): Delete.
- (CGEN_OPERAND_TABLE): New struct.
- (cgen_operand_lookup_by_name,cgen_operand_lookup_by_num): Declare.
- (CGEN_OPINST): Pointer to operand table entry replaced with enum.
- (CGEN_CPU_TABLE): New member `isa'. Change member `operand_table',
- now a CGEN_OPERAND_TABLE. Add CGEN_CPU_DESC arg to
- {get,set}_{int,vma}_operand.
- (@arch@_cgen_cpu_open): New arg `isa'.
- (cgen_set_cpu): Ditto.
-
-Fri Feb 26 02:36:45 1999 Richard Henderson <rth@cygnus.com>
-
- * i386.h: Fill in cmov and fcmov alternates. Add fcomi short forms.
-
-1999-02-25 Doug Evans <devans@casey.cygnus.com>
-
- * cgen.h (enum cgen_asm_type): Add CGEN_ASM_NONE.
- (CGEN_HW_ENTRY): Delete member `next'. Change type of `type' to
- enum cgen_hw_type.
- (CGEN_HW_TABLE): New struct.
- (hw_table): Delete declaration.
- (CGEN_OPERAND): Change member hw to hw_type, change type from pointer
- to table entry to enum.
- (CGEN_OPINST): Ditto.
- (CGEN_CPU_TABLE): Change member hw_list to hw_table.
-
-Sat Feb 13 14:13:44 1999 Richard Henderson <rth@cygnus.com>
-
- * alpha.h (AXP_OPCODE_EV6): New.
- (AXP_OPCODE_NOPAL): Include it.
-
-1999-02-09 Doug Evans <devans@casey.cygnus.com>
-
- * cgen.h (CGEN_CPU_DESC): Renamed from CGEN_OPCODE_DESC.
- All uses updated. New members int_insn_p, max_insn_size,
- parse_operand,insert_operand,extract_operand,print_operand,
- sizeof_fields,set_fields_bitsize,get_int_operand,set_int_operand,
- get_vma_operand,set_vma_operand,parse_handlers,insert_handlers,
- extract_handlers,print_handlers.
- (CGEN_ATTR): Change type of num_nonbools to unsigned int.
- (CGEN_ATTR_BOOL_OFFSET): New macro.
- (CGEN_ATTR_MASK): Subtract it to compute bit number.
- (CGEN_ATTR_VALUE): Redo bool/nonbool attr calculation.
- (cgen_opcode_handler): Renamed from cgen_base.
- (CGEN_HW_ATTR_VALUE): Renamed from CGEN_HW_ATTR, all uses updated.
- (CGEN_OPERAND_ATTR_VALUE): Renamed from CGEN_OPERAND_ATTR,
- all uses updated.
- (CGEN_OPERAND_INDEX): Rewrite to use table entry, not global.
- (enum cgen_opinst_type): Renamed from cgen_operand_instance_type.
- (CGEN_IFLD_ATTR_VALUE): Renamed from CGEN_IFLD_ATTR, all uses updated.
- (CGEN_OPCODE,CGEN_IBASE): New types.
- (CGEN_INSN): Rewrite.
- (CGEN_{ASM,DIS}_HASH*): Delete.
- (init_opcode_table,init_ibld_table): Declare.
- (CGEN_INSN_ATTR): New type.
-
-Mon Feb 1 21:09:14 1999 Catherine Moore <clm@cygnus.com>
-
- * i386.h (d_Suf, x_Suf, sld_Suf, sldx_Suf, bwld_Suf): Define.
- (x_FP, d_FP, dls_FP, sldx_FP): Define.
- Change *Suf definitions to include x and d suffixes.
- (movsx): Use w_Suf and b_Suf.
- (movzx): Likewise.
- (movs): Use bwld_Suf.
- (fld): Change ordering. Use sld_FP.
- (fild): Add Intel Syntax equivalent of fildq.
- (fst): Use sld_FP.
- (fist): Use sld_FP.
- (fstp): Use sld_FP. Add x_FP version.
- (fistp): LLongMem version for Intel Syntax.
- (fcom, fcomp): Use sld_FP.
- (fadd, fiadd, fsub): Use sld_FP.
- (fsubr): Use sld_FP.
- (fmul, fimul, fdvi, fidiv, fdivr): Use sld_FP.
-
-1999-01-27 Doug Evans <devans@casey.cygnus.com>
-
- * cgen.h (enum cgen_mode): Add CGEN_MODE_TARGET_MAX, CGEN_MODE_INT,
- CGEN_MODE_UINT.
-
-1999-01-16 Jeffrey A Law (law@cygnus.com)
-
- * hppa.h (bv): Fix mask.
-
-1999-01-05 Doug Evans <devans@casey.cygnus.com>
-
- * cgen.h (CGEN_ATTR_VALUE_TYPE): New typedef.
- (CGEN_ATTR): Use it.
- (CGEN_ATTR_TYPE,CGEN_ATTR_ENTRY): Ditto.
- (CGEN_ATTR_TABLE): New member dfault.
-
-1998-12-30 Gavin Romig-Koch <gavin@cygnus.com>
-
- * mips.h (MIPS16_INSN_BRANCH): New.
-
-Wed Dec 9 10:38:48 1998 David Taylor <taylor@texas.cygnus.com>
-
- The following is part of a change made by Edith Epstein
- <eepstein@sophia.cygnus.com> as part of a project to merge in
- changes by HP; HP did not create ChangeLog entries.
-
- * hppa.h (completer_chars): list of chars to not put a space
- after.
-
-Sun Dec 6 13:21:34 1998 Ian Lance Taylor <ian@cygnus.com>
-
- * i386.h (i386_optab): Permit w suffix on processor control and
- status word instructions.
-
-1998-11-30 Doug Evans <devans@casey.cygnus.com>
-
- * cgen.h (struct cgen_hw_entry): Delete const on attrs member.
- (struct cgen_keyword_entry): Ditto.
- (struct cgen_operand): Ditto.
- (CGEN_IFLD): New typedef, with associated access macros.
- (CGEN_IFMT): New typedef, with associated access macros.
- (CGEN_IFMT): Renamed from CGEN_FORMAT. New member `iflds'.
- (CGEN_IVALUE): New typedef.
- (struct cgen_insn): Delete const on syntax,attrs members.
- `format' now points to format data. Type of `value' is now
- CGEN_IVALUE.
- (struct cgen_opcode_table): New member ifld_table.
-
-1998-11-18 Doug Evans <devans@casey.cygnus.com>
-
- * cgen.h (cgen_extract_fn): Update type of `base_insn' arg.
- (CGEN_OPERAND_INSTANCE): New member `attrs'.
- (CGEN_OPERAND_INSTANCE_{ATTRS,ATTR}): New macros.
- (cgen_dis_lookup_insn): Update type of `base_insn' arg.
- (cgen_opcode_table): Update type of dis_hash fn.
- (extract_operand): Update type of `insn_value' arg.
-
-Thu Oct 29 11:38:36 1998 Doug Evans <devans@canuck.cygnus.com>
-
- * cgen.h (CGEN_VERSION_{MAJOR,MINOR,FIXLEVEL}): Delete.
-
-Tue Oct 27 08:57:59 1998 Gavin Romig-Koch <gavin@cygnus.com>
-
- * mips.h (INSN_MULT): Added.
-
-Tue Oct 20 11:31:34 1998 Alan Modra <alan@spri.levels.unisa.edu.au>
-
- * i386.h (MAX_MNEM_SIZE): Rename from MAX_OPCODE_SIZE.
-
-Mon Oct 19 12:50:00 1998 Doug Evans <devans@seba.cygnus.com>
-
- * cgen.h (CGEN_INSN_INT): New typedef.
- (CGEN_INT_INSN_P): Renamed from CGEN_INT_INSN.
- (CGEN_INSN_BYTES): Renamed from cgen_insn_t.
- (CGEN_INSN_BYTES_PTR): New typedef.
- (CGEN_EXTRACT_INFO): New typedef.
- (cgen_insert_fn,cgen_extract_fn): Update.
- (cgen_opcode_table): New member `insn_endian'.
- (assemble_insn,lookup_insn,lookup_get_insn_operands): Update.
- (insert_operand,extract_operand): Update.
- (cgen_get_insn_value,cgen_put_insn_value): Add prototypes.
-
-Fri Oct 9 13:38:13 1998 Doug Evans <devans@seba.cygnus.com>
-
- * cgen.h (CGEN_ATTR_BOOLS): New macro.
- (struct CGEN_HW_ENTRY): New member `attrs'.
- (CGEN_HW_ATTR): New macro.
- (struct CGEN_OPERAND_INSTANCE): New member `name'.
- (CGEN_INSN_INVALID_P): New macro.
-
-Mon Oct 5 00:21:07 1998 Jeffrey A Law (law@cygnus.com)
-
- * hppa.h: Add "fid".
-
-Sun Oct 4 21:00:00 1998 Alan Modra <alan@spri.levels.unisa.edu.au>
-
- From Robert Andrew Dale <rob@nb.net>
- * i386.h (i386_optab): Add AMD 3DNow! instructions.
- (AMD_3DNOW_OPCODE): Define.
-
-Tue Sep 22 17:53:47 1998 Nick Clifton <nickc@cygnus.com>
-
- * d30v.h (EITHER_BUT_PREFER_MU): Define.
-
-Mon Aug 10 14:09:38 1998 Doug Evans <devans@canuck.cygnus.com>
-
- * cgen.h (cgen_insn): #if 0 out element `cdx'.
-
-Mon Aug 3 12:21:57 1998 Doug Evans <devans@seba.cygnus.com>
-
- Move all global state data into opcode table struct, and treat
- opcode table as something that is "opened/closed".
- * cgen.h (CGEN_OPCODE_DESC): New type.
- (all fns): New first arg of opcode table descriptor.
- (cgen_set_parse_operand_fn): Add prototype.
- (cgen_current_machine,cgen_current_endian): Delete.
- (CGEN_OPCODE_TABLE): New members mach,endian,operand_table,
- parse_operand_fn,asm_hash_table,asm_hash_table_entries,
- dis_hash_table,dis_hash_table_entries.
- (opcode_open,opcode_close): Add prototypes.
-
- * cgen.h (cgen_insn): New element `cdx'.
-
-Thu Jul 30 21:44:25 1998 Frank Ch. Eigler <fche@cygnus.com>
-
- * d30v.h (FLAG_LKR): New flag for "left-kills-right" instructions.
-
-Tue Jul 28 10:59:07 1998 Jeffrey A Law (law@cygnus.com)
-
- * mn10300.h: Add "no_match_operands" field for instructions.
- (MN10300_MAX_OPERANDS): Define.
-
-Fri Jul 24 11:44:24 1998 Doug Evans <devans@canuck.cygnus.com>
-
- * cgen.h (cgen_macro_insn_count): Declare.
-
-Tue Jul 21 13:12:13 1998 Doug Evans <devans@seba.cygnus.com>
-
- * cgen.h (CGEN_VERSION_{MAJOR,MINOR,FIXLEVEL}): Define.
- (cgen_insert_fn,cgen_extract_fn): New arg `pc'.
- (get_operand,put_operand): Replaced with get_{int,vma}_operand,
- set_{int,vma}_operand.
-
-Fri Jun 26 11:09:06 1998 Jeffrey A Law (law@cygnus.com)
-
- * mn10300.h: Add "machine" field for instructions.
- (MN103, AM30): Define machine types.
-
-Fri Jun 19 16:09:09 1998 Alan Modra <alan@spri.levels.unisa.edu.au>
-
- * i386.h: Use FP, not sl_Suf, for fxsave and fxrstor.
-
-1998-06-18 Ulrich Drepper <drepper@cygnus.com>
-
- * i386.h: Add support for fxsave, fxrstor, sysenter and sysexit.
-
-Sat Jun 13 11:31:35 1998 Alan Modra <alan@spri.levels.unisa.edu.au>
-
- * i386.h (i386_optab): Add general form of aad and aam. Add ud2a
- and ud2b.
- (i386_regtab): Allow cr0..7, db0..7, dr0..7, tr0..7, not just
- those that happen to be implemented on pentiums.
-
-Tue Jun 9 12:16:01 1998 Alan Modra <alan@spri.levels.unisa.edu.au>
-
- * i386.h: Change occurences of Data16 to Size16, Data32 to Size32,
- IgnoreDataSize to IgnoreSize. Flag address and data size prefixes
- with Size16|IgnoreSize or Size32|IgnoreSize.
-
-Mon Jun 8 12:15:52 1998 Alan Modra <alan@spri.levels.unisa.edu.au>
-
- * i386.h (REPNE): Rename to REPNE_PREFIX_OPCODE.
- (REPE): Rename to REPE_PREFIX_OPCODE.
- (i386_regtab_end): Remove.
- (i386_prefixtab, i386_prefixtab_end): Remove.
- (i386_optab): Use NULL as sentinel rather than "" to suit rewrite
- of md_begin.
- (MAX_OPCODE_SIZE): Define.
- (i386_optab_end): Remove.
- (sl_Suf): Define.
- (sl_FP): Use sl_Suf.
-
- * i386.h (i386_optab): Allow 16 bit displacement for `mov
- mem,acc'. Combine 16 and 32 bit forms of various insns. Allow 16
- bit form of ljmp. Add IsPrefix modifier to prefixes. Add addr32,
- data32, dword, and adword prefixes.
- (i386_regtab): Add BaseIndex modifier to valid 16 bit base/index
- regs.
-
-Fri Jun 5 23:42:43 1998 Alan Modra <alan@spri.levels.unisa.edu.au>
-
- * i386.h (i386_regtab): Remove BaseIndex modifier from esp.
-
- * i386.h: Allow `l' suffix on fld, fst, fstp, fcom, fcomp with
- register operands, because this is a common idiom. Flag them with
- a warning. Allow illegal faddp, fsubp, fsubrp, fmulp, fdivp,
- fdivrp because gcc erroneously generates them. Also flag with a
- warning.
-
- * i386.h: Add suffix modifiers to most insns, and tighter operand
- checks in some cases. Fix a number of UnixWare compatibility
- issues with float insns. Merge some floating point opcodes, using
- new FloatMF modifier.
- (WORD_PREFIX_OPCODE): Rename to DATA_PREFIX_OPCODE for
- consistency.
-
- * i386.h: Change occurence of ShortformW to W|ShortForm. Add
- IgnoreDataSize where appropriate.
-
-Wed Jun 3 18:28:45 1998 Alan Modra <alan@spri.levels.unisa.edu.au>
-
- * i386.h: (one_byte_segment_defaults): Remove.
- (two_byte_segment_defaults): Remove.
- (i386_regtab): Add BaseIndex to 32 bit regs reg_type.
-
-Fri May 15 15:59:04 1998 Doug Evans <devans@seba.cygnus.com>
-
- * cgen.h (cgen_hw_lookup_by_name): Renamed from cgen_hw_lookup.
- (cgen_hw_lookup_by_num): Declare.
-
-Thu May 7 09:27:58 1998 Frank Ch. Eigler <fche@cygnus.com>
-
- * mips.h (OP_{SH,MASK}_CODE2): Added "q" operand format for lower
- ten bits of MIPS ISA1 "break" instruction, and for "sdbbp"
-
-Thu May 7 02:14:08 1998 Doug Evans <devans@charmed.cygnus.com>
-
- * cgen.h (cgen_asm_init_parse): Delete.
- (cgen_save_fixups,cgen_restore_fixups,cgen_swap_fixups): Delete.
- (cgen_asm_record_register,cgen_asm_finish_insn): Delete.
-
-Mon Apr 27 10:13:11 1998 Doug Evans <devans@seba.cygnus.com>
-
- * cgen.h (CGEN_ATTR_TYPE): Delete `const', moved to uses.
- (cgen_asm_finish_insn): Update prototype.
- (cgen_insn): New members num, data.
- (CGEN_INSN_TABLE): Members asm_hash, asm_hash_table_size,
- dis_hash, dis_hash_table_size moved to ...
- (CGEN_OPCODE_TABLE). Here. Renamed from CGEN_OPCODE_DATA.
- All uses updated. New members asm_hash_p, dis_hash_p.
- (CGEN_MINSN_EXPANSION): New struct.
- (cgen_expand_macro_insn): Declare.
- (cgen_macro_insn_count): Declare.
- (get_insn_operands): Update prototype.
- (lookup_get_insn_operands): Declare.
-
-Tue Apr 21 17:11:32 1998 Alan Modra <alan@spri.levels.unisa.edu.au>
-
- * i386.h (i386_optab): Change iclrKludge and imulKludge to
- regKludge. Add operands types for string instructions.
-
-Mon Apr 20 14:40:29 1998 Tom Tromey <tromey@cygnus.com>
-
- * i386.h (X): Renamed from `Z_' to preserve formatting of opcode
- table.
-
-Sun Apr 19 13:54:06 1998 Tom Tromey <tromey@cygnus.com>
-
- * i386.h (Z_): Renamed from `_' to avoid clash with common alias
- for `gettext'.
-
-Fri Apr 3 12:04:48 1998 Alan Modra <alan@spri.levels.unisa.edu.au>
-
- * i386.h: Remove NoModrm flag from all insns: it's never checked.
- Add IsString flag to string instructions.
- (IS_STRING): Don't define.
- (LOCK_PREFIX_OPCODE, CS_PREFIX_OPCODE, DS_PREFIX_OPCODE): Define.
- (ES_PREFIX_OPCODE, FS_PREFIX_OPCODE, GS_PREFIX_OPCODE): Define.
- (SS_PREFIX_OPCODE): Define.
-
-Mon Mar 30 21:31:56 1998 Ian Lance Taylor <ian@cygnus.com>
-
- * i386.h: Revert March 24 patch; no more LinearAddress.
-
-Mon Mar 30 10:25:54 1998 Alan Modra <alan@spri.levels.unisa.edu.au>
-
- * i386.h (i386_optab): Remove fwait (9b) from all floating point
- instructions, and instead add FWait opcode modifier. Add short
- form of fldenv and fstenv.
- (FWAIT_OPCODE): Define.
-
- * i386.h (i386_optab): Change second operand constraint of `mov
- sreg,reg|mem' instruction from Reg16|Mem to WordReg|WordMem to
- allow legal instructions such as `movl %gs,%esi'
-
-Fri Mar 27 18:30:52 1998 Ian Lance Taylor <ian@cygnus.com>
-
- * h8300.h: Various changes to fully bracket initializers.
-
-Tue Mar 24 18:32:47 1998 H.J. Lu <hjl@gnu.org>
-
- * i386.h: Set LinearAddress for lidt and lgdt.
-
-Mon Mar 2 10:44:07 1998 Doug Evans <devans@seba.cygnus.com>
-
- * cgen.h (CGEN_BOOL_ATTR): New macro.
-
-Thu Feb 26 15:54:31 1998 Michael Meissner <meissner@cygnus.com>
-
- * d30v.h (FLAG_DELAY): New flag for delayed branches/jumps.
-
-Mon Feb 23 10:38:21 1998 Doug Evans <devans@seba.cygnus.com>
-
- * cgen.h (CGEN_CAT3): Delete. Use CONCAT3 now.
- (cgen_insn): Record syntax and format entries here, rather than
- separately.
-
-Tue Feb 17 21:42:56 1998 Nick Clifton <nickc@cygnus.com>
-
- * cgen.h (CGEN_SYNTAX_MAKE_FIELD): New macro.
-
-Tue Feb 17 16:00:56 1998 Doug Evans <devans@seba.cygnus.com>
-
- * cgen.h (cgen_insert_fn): Change type of result to const char *.
- (cgen_parse_{signed,unsigned}_integer): Delete min,max arguments.
- (CGEN_{INSN,KEYWORD,OPERAND}_NBOOL_ATTRS): Renamed from ..._MAX_ATTRS.
-
-Thu Feb 12 18:30:41 1998 Doug Evans <devans@canuck.cygnus.com>
-
- * cgen.h (lookup_insn): New argument alias_p.
-
-Thu Feb 12 03:41:00 1998 J"orn Rennecke <amylaar@cygnus.co.uk>
-
-Fix rac to accept only a0:
- * d10v.h (OPERAND_ACC): Split into:
- (OPERAND_ACC0, OPERAND_ACC1) .
- (OPERAND_GPR): Define.
-
-Wed Feb 11 17:31:53 1998 Doug Evans <devans@seba.cygnus.com>
-
- * cgen.h (CGEN_FIELDS): Define here.
- (CGEN_HW_ENTRY): New member `type'.
- (hw_list): Delete decl.
- (enum cgen_mode): Declare.
- (CGEN_OPERAND): New member `hw'.
- (enum cgen_operand_instance_type): Declare.
- (CGEN_OPERAND_INSTANCE): New type.
- (CGEN_INSN): New member `operands'.
- (CGEN_OPCODE_DATA): Make hw_list const.
- (get_insn_operands,lookup_insn): Add prototypes for.
-
-Tue Feb 3 17:11:23 1998 Doug Evans <devans@seba.cygnus.com>
-
- * cgen.h (CGEN_INSN_MAX_ATTRS): Renamed from CGEN_MAX_INSN_ATTRS.
- (CGEN_HW_ENTRY): Move `next' entry to end of struct.
- (CGEN_KEYWORD_MAX_ATTRS): Renamed from CGEN_MAX_KEYWORD_ATTRS.
- (CGEN_OPERAND_MAX_ATTRS): Renamed from CGEN_MAX_OPERAND_ATTRS.
-
-Mon Feb 2 19:19:15 1998 Ian Lance Taylor <ian@cygnus.com>
-
- * cgen.h: Correct typo in comment end marker.
-
-Mon Feb 2 17:10:38 1998 Steve Haworth <steve@pm.cse.rmit.EDU.AU>
-
- * tic30.h: New file.
-
-Thu Jan 22 17:54:56 1998 Nick Clifton <nickc@cygnus.com>
-
- * cgen.h: Add prototypes for cgen_save_fixups(),
- cgen_restore_fixups(), and cgen_swap_fixups(). Change prototype
- of cgen_asm_finish_insn() to return a char *.
-
-Wed Jan 14 17:21:43 1998 Nick Clifton <nickc@cygnus.com>
-
- * cgen.h: Formatting changes to improve readability.
-
-Mon Jan 12 11:37:36 1998 Doug Evans <devans@seba.cygnus.com>
-
- * cgen.h (*): Clean up pass over `struct foo' usage.
- (CGEN_ATTR): Make unsigned char.
- (CGEN_ATTR_TYPE): Update.
- (CGEN_ATTR_{ENTRY,TABLE}): New types.
- (cgen_base): Move member `attrs' to cgen_insn.
- (CGEN_KEYWORD): New member `null_entry'.
- (CGEN_{SYNTAX,FORMAT}): New types.
- (cgen_insn): Format and syntax separated from each other.
-
-Tue Dec 16 15:15:52 1997 Michael Meissner <meissner@cygnus.com>
-
- * d30v.h (d30v_opcode): Reorder flags somewhat, add new flags for
- 2 word load/store, ADDppp/SUBppp, 16/32 bit multiply. Make
- flags_{used,set} long.
- (d30v_operand): Make flags field long.
-
-Mon Dec 1 12:24:44 1997 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
-
- * m68k.h: Fix comment describing operand types.
-
-Sun Nov 23 22:31:27 1997 Michael Meissner <meissner@cygnus.com>
-
- * d30v.h (SHORT_CMPU): Add case for cmpu instruction, and move
- everything else after down.
-
-Tue Nov 18 18:45:14 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
-
- * d10v.h (OPERAND_FLAG): Split into:
- (OPERAND_FFLAG, OPERAND_CFLAG) .
-
-Thu Nov 13 11:04:24 1997 Gavin Koch <gavin@cygnus.com>
-
- * mips.h (struct mips_opcode): Changed comments to reflect new
- field usage.
-
-Fri Oct 24 22:36:20 1997 Ken Raeburn <raeburn@cygnus.com>
-
- * mips.h: Added to comments a quick-ref list of all assigned
- operand type characters.
- (OP_{MASK,SH}_PERFREG): New macros.
-
-Wed Oct 22 17:28:33 1997 Richard Henderson <rth@cygnus.com>
-
- * sparc.h: Add '_' and '/' for v9a asr's.
- Patch from David Miller <davem@vger.rutgers.edu>
-
-Tue Oct 14 13:22:29 1997 Jeffrey A Law (law@cygnus.com)
-
- * h8300.h: Bit ops with absolute addresses not in the 8 bit
- area are not available in the base model (H8/300).
-
-Thu Sep 25 13:03:41 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * m68k.h: Remove documentation of ` operand specifier.
-
-Wed Sep 24 19:00:34 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * m68k.h: Document q and v operand specifiers.
-
-Mon Sep 15 18:28:37 1997 Nick Clifton <nickc@cygnus.com>
-
- * v850.h (struct v850_opcode): Add processors field.
- (PROCESSOR_V850, PROCESSOR_ALL): New bit constants.
- (PROCESSOR_V850E, PROCESSOR_NOT_V850): New bit constants.
- (PROCESSOR_V850EA): New bit constants.
-
-Mon Sep 15 11:29:43 1997 Ken Raeburn <raeburn@cygnus.com>
-
- Merge changes from Martin Hunt:
-
- * d30v.h: Allow up to 64 control registers. Add
- SHORT_A5S format.
-
- * d30v.h (LONG_Db): New form for delayed branches.
-
- * d30v.h: (LONG_Db): New form for repeati.
-
- * d30v.h (SHORT_D2B): New form.
-
- * d30v.h (SHORT_A2): New form.
-
- * d30v.h (OPERAND_2REG): Add new operand to indicate 2
- registers are used. Needed for VLIW optimization.
-
-Mon Sep 8 14:05:45 1997 Doug Evans <dje@canuck.cygnus.com>
-
- * cgen.h: Move assembler interface section
- up so cgen_parse_operand_result is defined for cgen_parse_address.
- (cgen_parse_address): Update prototype.
-
-Tue Sep 2 15:32:32 1997 Nick Clifton <nickc@cygnus.com>
-
- * v850.h (V850_OPREAND_ADJUST_SHORT_MEMORY): Removed.
-
-Tue Aug 26 12:21:52 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * i386.h (two_byte_segment_defaults): Correct base register 5 in
- modes 1 and 2 to be ss rather than ds. From Gabriel Paubert
- <paubert@iram.es>.
-
- * i386.h: Set ud2 to 0x0f0b. From Gabriel Paubert
- <paubert@iram.es>.
-
- * i386.h: Comment fixes for ficom[p]?{s,l} from Gabriel Paubert
- <paubert@iram.es>.
-
- * i386.h (JUMP_ON_CX_ZERO): Uncomment (define again).
- (JUMP_ON_ECX_ZERO): Remove commented out macro.
-
-Fri Aug 22 10:38:29 1997 Nick Clifton <nickc@cygnus.com>
-
- * v850.h (V850_NOT_R0): New flag.
-
-Mon Aug 18 11:05:58 1997 Nick Clifton <nickc@cygnus.com>
-
- * v850.h (struct v850_opcode): Remove flags field.
-
-Wed Aug 13 18:45:48 1997 Nick Clifton <nickc@cygnus.com>
-
- * v850.h (struct v850_opcode): Add flags field.
- (struct v850_operand): Extend meaning of 'bits' and 'shift'
- fields.
- (V850E_INSTRUCTION, V850EA_INSTRUCTION): New flags.
- (V850E_PUSH_POP, V850E_IMMEDIATE16, V850E_IMMEDIATE32): New flags.
-
-Fri Aug 8 16:58:42 1997 Doug Evans <dje@canuck.cygnus.com>
-
- * arc.h: New file.
-
-Thu Jul 24 21:16:58 1997 Doug Evans <dje@canuck.cygnus.com>
-
- * sparc.h (sparc_opcodes): Declare as const.
-
-Thu Jul 10 12:53:25 1997 Jeffrey A Law (law@cygnus.com)
-
- * mips.h (FP_S, FP_D): Define. Bitmasks indicating if an insn
- uses single or double precision floating point resources.
- (INSN_NO_ISA, INSN_ISA1): Define.
- (cpu specific INSN macros): Tweak into bitmasks outside the range
- of INSN_ISA field.
-
-Mon Jun 16 14:10:00 1997 H.J. Lu <hjl@gnu.ai.mit.edu>
-
- * i386.h: Fix pand opcode.
-
-Mon Jun 2 11:35:09 1997 Gavin Koch <gavin@cygnus.com>
-
- * mips.h: Widen INSN_ISA and move it to a more convenient
- bit position. Add INSN_3900.
-
-Tue May 20 11:25:29 1997 Gavin Koch <gavin@cygnus.com>
-
- * mips.h (struct mips_opcode): added new field membership.
-
-Mon May 12 16:26:50 1997 H.J. Lu <hjl@gnu.ai.mit.edu>
-
- * i386.h (movd): only Reg32 is allowed.
-
- * i386.h: add fcomp and ud2. From Wayne Scott
- <wscott@ichips.intel.com>.
-
-Mon May 5 17:16:21 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * i386.h: Add MMX instructions.
-
-Mon May 5 12:45:19 1997 H.J. Lu <hjl@gnu.ai.mit.edu>
-
- * i386.h: Remove W modifier from conditional move instructions.
-
-Mon Apr 14 14:56:58 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * i386.h: Change the opcodes for fsubp, fsubrp, fdivp, and fdivrp
- with no arguments to match that generated by the UnixWare
- assembler.
-
-Thu Apr 10 14:35:00 1997 Doug Evans <dje@canuck.cygnus.com>
-
- * cgen.h (<cpu>_cgen_assemble_insn): New arg for errmsg.
- (cgen_parse_operand_fn): Declare.
- (cgen_init_parse_operand): Declare.
- (cgen_parse_operand): Renamed from cgen_asm_parse_operand,
- new argument `want'.
- (enum cgen_parse_operand_result): Renamed from cgen_asm_result.
- (enum cgen_parse_operand_type): New enum.
-
-Sat Apr 5 13:14:05 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * i386.h: Revert last patch for the NON_BROKEN_OPCODES cases.
-
-Fri Apr 4 11:46:11 1997 Doug Evans <dje@canuck.cygnus.com>
-
- * cgen.h: New file.
-
-Fri Apr 4 14:02:32 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * i386.h: Correct opcode values for fsubp, fsubrp, fdivp, and
- fdivrp.
-
-Tue Mar 25 22:57:26 1997 Stu Grossman (grossman@critters.cygnus.com)
-
- * v850.h (extract): Make unsigned.
-
-Mon Mar 24 14:38:15 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * i386.h: Add iclr.
-
-Thu Mar 20 19:49:10 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * i386.h: Change DW to W for cmpxchg and xadd, since they don't
- take a direction bit.
-
-Sat Mar 15 19:03:29 1997 H.J. Lu <hjl@lucon.org>
-
- * sparc.h (sparc_opcode_lookup_arch): Use full prototype.
-
-Fri Mar 14 15:22:01 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * sparc.h: Include <ansidecl.h>. Update function declarations to
- use prototypes, and to use const when appropriate.
-
-Thu Mar 6 14:18:30 1997 Jeffrey A Law (law@cygnus.com)
-
- * mn10300.h (MN10300_OPERAND_RELAX): Define.
-
-Mon Feb 24 15:15:56 1997 Martin M. Hunt <hunt@pizza.cygnus.com>
-
- * d10v.h: Change pre_defined_registers to
- d10v_predefined_registers and reg_name_cnt to d10v_reg_name_cnt.
-
-Sat Feb 22 21:25:00 1997 Dawn Perchik <dawn@cygnus.com>
-
- * mips.h: Add macros for cop0, cop1 cop2 and cop3.
- Change mips_opcodes from const array to a pointer,
- and change bfd_mips_num_opcodes from const int to int,
- so that we can increase the size of the mips opcodes table
- dynamically.
-
-Fri Feb 21 16:34:18 1997 Martin M. Hunt <hunt@pizza.cygnus.com>
-
- * d30v.h (FLAG_X): Remove unused flag.
-
-Tue Feb 18 17:37:20 1997 Martin M. Hunt <hunt@pizza.cygnus.com>
-
- * d30v.h: New file.
-
-Fri Feb 14 13:16:15 1997 Fred Fish <fnf@cygnus.com>
-
- * tic80.h (PDS_NAME): Macro to access name field of predefined symbols.
- (PDS_VALUE): Macro to access value field of predefined symbols.
- (tic80_next_predefined_symbol): Add prototype.
-
-Mon Feb 10 10:32:17 1997 Fred Fish <fnf@cygnus.com>
-
- * tic80.h (tic80_symbol_to_value): Change prototype to match
- change in function, added class parameter.
-
-Thu Feb 6 17:30:15 1997 Fred Fish <fnf@cygnus.com>
-
- * tic80.h (TIC80_OPERAND_ENDMASK): Add for flagging TIc80
- endmask fields, which are somewhat weird in that 0 and 32 are
- treated exactly the same.
-
-Thu Jan 30 13:46:18 1997 Fred Fish <fnf@cygnus.com>
-
- * tic80.h: Change all the OPERAND defines to use the form (1 << X)
- rather than a constant that is 2**X. Reorder them to put bits for
- operands that have symbolic names in the upper bits, so they can
- be packed into an int where the lower bits contain the value that
- corresponds to that symbolic name.
- (predefined_symbo): Add struct.
- (tic80_predefined_symbols): Declare array of translations.
- (tic80_num_predefined_symbols): Declare size of that array.
- (tic80_value_to_symbol): Declare function.
- (tic80_symbol_to_value): Declare function.
-
-Wed Jan 29 09:37:25 1997 Jeffrey A Law (law@cygnus.com)
-
- * mn10200.h (MN10200_OPERAND_RELAX): Define.
-
-Sat Jan 18 15:18:59 1997 Fred Fish <fnf@cygnus.com>
-
- * tic80.h (TIC80_NO_R0_DEST): Add for opcodes where r0 cannot
- be the destination register.
-
-Thu Jan 16 20:48:55 1997 Fred Fish <fnf@cygnus.com>
-
- * tic80.h (struct tic80_opcode): Change "format" field to "flags".
- (FMT_UNUSED, FMT_SI, FMT_LI, FMT_REG): Delete.
- (TIC80_VECTOR): Define a flag bit for the flags. This one means
- that the opcode can have two vector instructions in a single
- 32 bit word and we have to encode/decode both.
-
-Tue Jan 14 19:37:09 1997 Fred Fish <fnf@cygnus.com>
-
- * tic80.h (TIC80_OPERAND_PCREL): Renamed from
- TIC80_OPERAND_RELATIVE for PC relative.
- (TIC80_OPERAND_BASEREL): New flag bit for register
- base relative.
-
-Mon Jan 13 15:56:38 1997 Fred Fish <fnf@cygnus.com>
-
- * tic80.h (TIC80_OPERAND_FLOAT): Add for floating point operands.
-
-Mon Jan 6 10:51:15 1997 Fred Fish <fnf@cygnus.com>
-
- * tic80.h (TIC80_OPERAND_SCALED): Operand may have optional
- ":s" modifier for scaling.
-
-Sun Jan 5 12:12:19 1997 Fred Fish <fnf@cygnus.com>
-
- * tic80.h (TIC80_OPERAND_M_SI): Add operand modifier for ":m".
- (TIC80_OPERAND_M_LI): Ditto
-
-Sat Jan 4 19:02:44 1997 Fred Fish <fnf@cygnus.com>
-
- * tic80.h (TIC80_OPERAND_BITNUM): Renamed from TIC80_OPERAND_CC_SZ.
- (TIC80_OPERAND_CC): New define for condition code operand.
- (TIC80_OPERAND_CR): New define for control register operand.
-
-Fri Jan 3 16:22:23 1997 Fred Fish <fnf@cygnus.com>
-
- * tic80.h (struct tic80_opcode): Name changed.
- (struct tic80_opcode): Remove format field.
- (struct tic80_operand): Add insertion and extraction functions.
- (TIC80_OPERAND_*): Remove old bogus values, start adding new
- correct ones.
- (FMT_*): Ditto.
-
-Tue Dec 31 15:05:41 1996 Michael Meissner <meissner@tiktok.cygnus.com>
-
- * v850.h (V850_OPERAND_ADJUST_SHORT_MEMORY): New flag to adjust
- type IV instruction offsets.
-
-Fri Dec 27 22:23:10 1996 Fred Fish <fnf@cygnus.com>
-
- * tic80.h: New file.
-
-Wed Dec 18 10:06:31 1996 Jeffrey A Law (law@cygnus.com)
-
- * mn10200.h (MN10200_OPERAND_NOCHECK): Define.
-
-Sat Dec 14 10:48:31 1996 Fred Fish <fnf@ninemoons.com>
-
- * mn10200.h: Fix comment, mn10200_operand not powerpc_operand.
- * mn10300.h: Fix comment, mn10300_operand not powerpc_operand.
- * v850.h: Fix comment, v850_operand not powerpc_operand.
-
-Mon Dec 9 16:45:39 1996 Jeffrey A Law (law@cygnus.com)
-
- * mn10200.h: Flesh out structures and definitions needed by
- the mn10200 assembler & disassembler.
-
-Tue Nov 26 10:46:56 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * mips.h: Add mips16 definitions.
-
-Mon Nov 25 17:56:54 1996 J.T. Conklin <jtc@cygnus.com>
-
- * m68k.h: Document new <, >, m, n, o and p operand specifiers.
-
-Wed Nov 20 10:59:41 1996 Jeffrey A Law (law@cygnus.com)
-
- * mn10300.h (MN10300_OPERAND_PCREL): Define.
- (MN10300_OPERAND_MEMADDR): Define.
-
-Tue Nov 19 13:30:40 1996 Jeffrey A Law (law@cygnus.com)
-
- * mn10300.h (MN10300_OPERAND_REG_LIST): Define.
-
-Wed Nov 6 13:41:08 1996 Jeffrey A Law (law@cygnus.com)
-
- * mn10300.h (MN10300_OPERAND_SPLIT): Define.
-
-Tue Nov 5 13:26:12 1996 Jeffrey A Law (law@cygnus.com)
-
- * mn10300.h (MN10300_OPERAND_EXTENDED): Define.
-
-Mon Nov 4 12:52:48 1996 Jeffrey A Law (law@cygnus.com)
-
- * mn10300.h (MN10300_OPERAND_REPEATED): Define.
-
-Fri Nov 1 10:31:02 1996 Richard Henderson <rth@tamu.edu>
-
- * alpha.h: Don't include "bfd.h"; private relocation types are now
- negative to minimize problems with shared libraries. Organize
- instruction subsets by AMASK extensions and PALcode
- implementation.
- (struct alpha_operand): Move flags slot for better packing.
-
-Tue Oct 29 12:19:10 1996 Jeffrey A Law (law@cygnus.com)
-
- * v850.h (V850_OPERAND_RELAX): New operand flag.
-
-Thu Oct 10 14:29:11 1996 Jeffrey A Law (law@cygnus.com)
-
- * mn10300.h (FMT_*): Move operand format definitions
- here.
-
-Tue Oct 8 14:48:07 1996 Jeffrey A Law (law@cygnus.com)
-
- * mn10300.h (MN10300_OPERAND_PAREN): Define.
-
-Mon Oct 7 16:52:11 1996 Jeffrey A Law (law@cygnus.com)
-
- * mn10300.h (mn10300_opcode): Add "format" field.
- (MN10300_OPERAND_*): Define.
-
-Thu Oct 3 10:33:46 1996 Jeffrey A Law (law@cygnus.com)
-
- * mn10x00.h: Delete.
- * mn10200.h, mn10300.h: New files.
-
-Wed Oct 2 21:31:26 1996 Jeffrey A Law (law@cygnus.com)
-
- * mn10x00.h: New file.
-
-Fri Sep 27 18:26:46 1996 Stu Grossman (grossman@critters.cygnus.com)
-
- * v850.h: Add new flag to indicate this instruction uses a PC
- displacement.
-
-Fri Sep 13 14:58:13 1996 Jeffrey A Law (law@cygnus.com)
-
- * h8300.h (stmac): Add missing instruction.
-
-Sat Aug 31 16:02:03 1996 Jeffrey A Law (law@cygnus.com)
-
- * v850.h (v850_opcode): Remove "size" field. Add "memop"
- field.
-
-Fri Aug 23 10:39:08 1996 Jeffrey A Law (law@cygnus.com)
-
- * v850.h (V850_OPERAND_EP): Define.
-
- * v850.h (v850_opcode): Add size field.
-
-Thu Aug 22 16:51:25 1996 J.T. Conklin <jtc@rtl.cygnus.com>
-
- * v850.h (v850_operands): Add insert and extract fields, pointers
- to functions used to handle unusual operand encoding.
- (V850_OPERAND_REG, V850_OPERAND_SRG, V850_OPERAND_CC,
- V850_OPERAND_SIGNED): Defined.
-
-Wed Aug 21 17:45:10 1996 J.T. Conklin <jtc@rtl.cygnus.com>
-
- * v850.h (v850_operands): Add flags field.
- (OPERAND_REG, OPERAND_NUM): Defined.
-
-Tue Aug 20 14:52:02 1996 J.T. Conklin <jtc@rtl.cygnus.com>
-
- * v850.h: New file.
-
-Fri Aug 16 14:44:15 1996 James G. Smith <jsmith@cygnus.co.uk>
-
- * mips.h (OP_SH_LOCC, OP_SH_HICC, OP_MASK_CC, OP_SH_COP1NORM,
- OP_MASK_COP1NORM, OP_SH_COP1SPEC, OP_MASK_COP1SPEC,
- OP_MASK_COP1SCLR, OP_MASK_COP1CMP, OP_SH_COP1CMP, OP_SH_FORMAT,
- OP_MASK_FORMAT, OP_SH_TRUE, OP_MASK_TRUE, OP_SH_GE, OP_MASK_GE,
- OP_SH_UNSIGNED, OP_MASK_UNSIGNED, OP_SH_HINT, OP_MASK_HINT):
- Defined.
-
-Fri Aug 16 00:15:15 1996 Jeffrey A Law (law@cygnus.com)
-
- * hppa.h (pitlb, pitlbe, iitlba, iitlbp, fic, fice): Accept
- a 3 bit space id instead of a 2 bit space id.
-
-Thu Aug 15 13:11:46 1996 Martin M. Hunt <hunt@pizza.cygnus.com>
-
- * d10v.h: Add some additional defines to support the
- assembler in determining which operations can be done in parallel.
-
-Tue Aug 6 11:13:22 1996 Jeffrey A Law (law@cygnus.com)
-
- * h8300.h (SN): Define.
- (eepmov.b): Renamed from "eepmov"
- (nop, bpt, rte, rts, sleep, clrmac): These have no size associated
- with them.
-
-Fri Jul 26 11:47:10 1996 Martin M. Hunt <hunt@pizza.cygnus.com>
-
- * d10v.h (OPERAND_SHIFT): New operand flag.
-
-Thu Jul 25 12:06:22 1996 Martin M. Hunt <hunt@pizza.cygnus.com>
-
- * d10v.h: Changes for divs, parallel-only instructions, and
- signed numbers.
-
-Mon Jul 22 11:21:15 1996 Martin M. Hunt <hunt@pizza.cygnus.com>
-
- * d10v.h (pd_reg): Define. Putting the definition here allows
- the assembler and disassembler to share the same struct.
-
-Mon Jul 22 12:15:25 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * i960.h (i960_opcodes): "halt" takes an argument. From Stephen
- Williams <steve@icarus.com>.
-
-Wed Jul 17 14:46:38 1996 Martin M. Hunt <hunt@pizza.cygnus.com>
-
- * d10v.h: New file.
-
-Thu Jul 11 12:09:15 1996 Jeffrey A Law (law@cygnus.com)
-
- * h8300.h (band, bclr): Force high bit of immediate nibble to zero.
-
-Wed Jul 3 14:30:12 1996 J.T. Conklin <jtc@rtl.cygnus.com>
-
- * m68k.h (mcf5200): New macro.
- Document names of coldfire control registers.
-
-Tue Jul 2 23:05:45 1996 Jeffrey A Law (law@cygnus.com)
-
- * h8300.h (SRC_IN_DST): Define.
-
- * h8300.h (UNOP3): Mark the register operand in this insn
- as a source operand, not a destination operand.
- (SHIFT_2, SHIFT_IMM): Remove. Eliminate all references.
- (UNOP3): Change SHIFT_IMM to IMM for H8/S bitops. Mark
- register operand with SRC_IN_DST.
-
-Fri Jun 21 13:52:17 1996 Richard Henderson <rth@tamu.edu>
-
- * alpha.h: New file.
-
-Thu Jun 20 15:02:57 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * rs6k.h: Remove obsolete file.
-
-Wed Jun 19 15:29:38 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * i386.h: Correct opcode values for faddp, fsubp, fsubrp, fmulp,
- fdivp, and fdivrp. Add ffreep.
-
-Tue Jun 18 16:06:00 1996 Jeffrey A. Law <law@rtl.cygnus.com>
-
- * h8300.h: Reorder various #defines for readability.
- (ABS32SRC, ABS32DST, DSP32LIST, ABS32LIST, A32LIST): Define.
- (BITOP): Accept additional (unused) argument. All callers changed.
- (EBITOP): Likewise.
- (O_LAST): Bump.
- (ldc, stc, movb, movw, movl): Use 32bit offsets and absolutes.
-
- * h8300.h (EXR, SHIFT_2, MACREG, SHIFT_IMM, RDINC): Define.
- (O_TAS, O_CLRMAC, O_LDMAC, O_MAC, O_LDM, O_STM): Define.
- (BITOP, EBITOP): Handle new H8/S addressing modes for
- bit insns.
- (UNOP3): Handle new shift/rotate insns on the H8/S.
- (insns using exr): New instructions.
- (tas, mac, ldmac, clrmac, ldm, stm): New instructions.
-
-Thu May 23 16:56:48 1996 Jeffrey A Law (law@cygnus.com)
-
- * h8300.h (add.l): Undo Apr 5th change. The manual I had
- was incorrect.
-
-Mon May 6 23:38:22 1996 Jeffrey A Law (law@cygnus.com)
-
- * h8300.h (START): Remove.
- (MEMRELAX): Define. Mark absolute memory operands in mov.b, mov.w
- and mov.l insns that can be relaxed.
-
-Tue Apr 30 18:30:58 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * i386.h: Remove Abs32 from lcall.
-
-Mon Apr 22 17:09:23 1996 Doug Evans <dje@blues.cygnus.com>
-
- * sparc.h (SPARC_OPCODE_ARCH_V9_P): New macro.
- (SLCPOP): New macro.
- Mark X,Y opcode letters as in use.
-
-Thu Apr 11 17:28:18 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * sparc.h (F_FLOAT, F_FBR): Define.
-
-Fri Apr 5 16:55:34 1996 Jeffrey A Law (law@cygnus.com)
-
- * h8300.h (ABS8MEM): Renamed from ABSMOV. Remove ABSMOV
- from all insns.
- (ABS8SRC,ABS8DST): Add ABS8MEM.
- (add.l): Fix reg+reg variant.
- (eepmov.w): Renamed from eepmovw.
- (ldc,stc): Fix many cases.
-
-Sun Mar 31 13:30:03 1996 Doug Evans <dje@canuck.cygnus.com>
-
- * sparc.h (SPARC_OPCODE_ARCH_MASK): New macro.
-
-Thu Mar 7 15:08:23 1996 Doug Evans <dje@charmed.cygnus.com>
-
- * sparc.h (O): Mark operand letter as in use.
-
-Tue Feb 20 20:46:21 1996 Doug Evans <dje@charmed.cygnus.com>
-
- * sparc.h (sparc_{encode,decode}_sparclet_cpreg): Declare.
- Mark operand letters uU as in use.
-
-Mon Feb 19 01:59:08 1996 Doug Evans <dje@charmed.cygnus.com>
-
- * sparc.h (sparc_opcode_arch_val): Add SPARC_OPCODE_ARCH_SPARCLET.
- (sparc_opcode_arch): Delete member `conflicts'. Add `supported'.
- (SPARC_OPCODE_SUPPORTED): New macro.
- (SPARC_OPCODE_CONFLICT_P): Rewrite.
- (F_NOTV9): Delete.
-
-Fri Feb 16 12:23:34 1996 Jeffrey A Law (law@cygnus.com)
-
- * sparc.h (sparc_opcode_lookup_arch) Make return type in
- declaration consistent with return type in definition.
-
-Wed Feb 14 18:14:11 1996 Alan Modra <alan@spri.levels.unisa.edu.au>
-
- * i386.h (i386_optab): Remove Data32 from pushf and popf.
-
-Thu Feb 8 14:27:21 1996 James Carlson <carlson@xylogics.com>
-
- * i386.h (i386_regtab): Add 80486 test registers.
-
-Mon Feb 5 18:35:46 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * i960.h (I_HX): Define.
- (i960_opcodes): Add HX instruction.
-
-Mon Jan 29 12:43:39 1996 Ken Raeburn <raeburn@cygnus.com>
-
- * i386.h: Fix waiting forms of finit, fstenv, fsave, fstsw, fstcw,
- and fclex.
-
-Wed Jan 24 22:36:59 1996 Doug Evans <dje@charmed.cygnus.com>
-
- * sparc.h (enum sparc_opcode_arch_val): Replaces sparc_architecture.
- (SPARC_OPCODE_CONFLICT_P): Renamed from ARCHITECTURES_CONFLICT_P.
- (bfd_* defines): Delete.
- (sparc_opcode_archs): Replaces architecture_pname.
- (sparc_opcode_lookup_arch): Declare.
- (NUMOPCODES): Delete.
-
-Mon Jan 22 08:24:32 1996 Doug Evans <dje@charmed.cygnus.com>
-
- * sparc.h (enum sparc_architecture): Add v9a.
- (ARCHITECTURES_CONFLICT_P): Update.
-
-Thu Dec 28 13:27:53 1995 John Hassey <hassey@rtp.dg.com>
-
- * i386.h: Added Pentium Pro instructions.
-
-Thu Nov 2 22:59:22 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * m68k.h: Document new 'W' operand place.
-
-Tue Oct 24 10:49:10 1995 Jeffrey A Law (law@cygnus.com)
-
- * hppa.h: Add lci and syncdma instructions.
-
-Mon Oct 23 11:09:16 1995 James G. Smith <jsmith@pasanda.cygnus.co.uk>
-
- * mips.h: Added INSN_4100 flag to mark NEC VR4100 specific
- instructions.
-
-Mon Oct 16 10:28:15 1995 Michael Meissner <meissner@tiktok.cygnus.com>
-
- * ppc.h (PPC_OPCODE_{COMMON,ANY}): New opcode flags for
- assembler's -mcom and -many switches.
-
-Wed Oct 11 16:56:33 1995 Ken Raeburn <raeburn@cygnus.com>
-
- * i386.h: Fix cmpxchg8b extension opcode description.
-
-Thu Oct 5 18:03:36 1995 Ken Raeburn <raeburn@cygnus.com>
-
- * i386.h: Add Pentium instructions wrmsr, rdtsc, rdmsr, cmpxchg8b,
- and register cr4.
-
-Tue Sep 19 15:26:43 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * m68k.h: Change comment: split type P into types 0, 1 and 2.
-
-Wed Aug 30 13:50:55 1995 Doug Evans <dje@canuck.cygnus.com>
-
- * sparc.h (sparc_{encode,decode}_prefetch): Declare.
-
-Tue Aug 29 15:34:58 1995 Doug Evans <dje@canuck.cygnus.com>
-
- * sparc.h (sparc_{encode,decode}_{asi,membar}): Declare.
-
-Wed Aug 2 18:32:19 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * m68kmri.h: Remove.
-
- * m68k.h: Move tables into opcodes/m68k-opc.c, leaving just the
- declarations. Remove F_ALIAS and flag field of struct
- m68k_opcode. Change arch field of struct m68k_opcode to unsigned
- int. Make name and args fields of struct m68k_opcode const.
-
-Wed Aug 2 08:16:46 1995 Doug Evans <dje@canuck.cygnus.com>
-
- * sparc.h (F_NOTV9): Define.
-
-Tue Jul 11 14:20:42 1995 Jeff Spiegel <jeffs@lsil.com>
-
- * mips.h (INSN_4010): Define.
-
-Wed Jun 21 18:49:51 1995 Ken Raeburn <raeburn@cujo.cygnus.com>
-
- * m68k.h (TBL1): Reverse sense of "round" argument in result.
-
- Changes from Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>:
- * m68k.h: Fix argument descriptions of coprocessor
- instructions to allow only alterable operands where appropriate.
- [!NO_DEFAULT_SIZES]: An omitted size defaults to `w'.
- (m68k_opcode_aliases): Add more aliases.
-
-Fri Apr 14 22:15:34 1995 Ken Raeburn <raeburn@cujo.cygnus.com>
-
- * m68k.h: Added explcitly short-sized conditional branches, and a
- bunch of aliases (fmov*, ftest*, tdivul) to support gcc's
- svr4-based configurations.
-
-Mon Mar 13 21:30:01 1995 Ken Raeburn <raeburn@cujo.cygnus.com>
-
- Mon Feb 27 08:36:39 1995 Bryan Ford <baford@cs.utah.edu>
- * i386.h: added missing Data16/Data32 flags to a few instructions.
-
-Wed Mar 8 15:19:53 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * mips.h (OP_MASK_FR, OP_SH_FR): Define.
- (OP_MASK_BCC, OP_SH_BCC): Define.
- (OP_MASK_PREFX, OP_SH_PREFX): Define.
- (OP_MASK_CCC, OP_SH_CCC): Define.
- (INSN_READ_FPR_R): Define.
- (INSN_RFE): Delete.
-
-Wed Mar 8 03:13:23 1995 Ken Raeburn <raeburn@cujo.cygnus.com>
-
- * m68k.h (enum m68k_architecture): Deleted.
- (struct m68k_opcode_alias): New type.
- (m68k_opcodes): Now const. Deleted opcode aliases with exactly
- matching constraints, values and flags. As a side effect of this,
- the MOTOROLA_SYNTAX_ONLY and MIT_SYNTAX_ONLY macros, which so far
- as I know were never used, now may need re-examining.
- (numopcodes): Now const.
- (m68k_opcode_aliases, numaliases): New variables.
- (endop): Deleted.
- [DONT_DEFINE_TABLE]: Declare numopcodes, numaliases, and
- m68k_opcode_aliases; update declaration of m68k_opcodes.
-
-Mon Mar 6 10:02:00 1995 Jeff Law (law@snake.cs.utah.edu)
-
- * hppa.h (delay_type): Delete unused enumeration.
- (pa_opcode): Replace unused delayed field with an architecture
- field.
- (pa_opcodes): Mark each instruction as either PA1.0 or PA1.1.
-
-Fri Mar 3 16:10:24 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * mips.h (INSN_ISA4): Define.
-
-Fri Feb 24 19:13:37 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * mips.h (M_DLA_AB, M_DLI): Define.
-
-Thu Feb 23 17:33:09 1995 Jeff Law (law@snake.cs.utah.edu)
-
- * hppa.h (fstwx): Fix single-bit error.
-
-Wed Feb 15 12:19:52 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * mips.h (M_ULD, M_ULD_A, M_USD, M_USD_A): Define.
-
-Mon Feb 6 10:35:23 1995 J.T. Conklin <jtc@rtl.cygnus.com>
-
- * i386.h: added cpuid instruction , and dr[0-7] aliases for the
- debug registers. From Charles Hannum (mycroft@netbsd.org).
-
-Mon Feb 6 03:31:54 1995 Ken Raeburn <raeburn@cujo.cygnus.com>
-
- Changes from Bryan Ford <baford@schirf.cs.utah.edu> for 16-bit
- i386 support:
- * i386.h (MOV_AX_DISP32): New macro.
- (i386_optab): Added Data16 and Data32 as needed. Added "w" forms
- of several call/return instructions.
- (ADDR_PREFIX_OPCODE): New macro.
-
-Mon Jan 23 16:45:43 1995 Ken Raeburn <raeburn@cujo.cygnus.com>
-
- Sat Jan 21 17:50:38 1995 Pat Rankin (rankin@eql.caltech.edu)
-
- * vax.h (struct vot_wot, field `args'): Make it pointer to const
- char.
- (struct vot, field `name'): ditto.
-
-Thu Jan 19 14:47:53 1995 Ken Raeburn <raeburn@cujo.cygnus.com>
-
- * vax.h: Supply and properly group all values in end sentinel.
-
-Tue Jan 17 10:55:30 1995 Ian Lance Taylor <ian@sanguine.cygnus.com>
-
- * mips.h (INSN_ISA, INSN_4650): Define.
-
-Wed Oct 19 13:34:17 1994 Ian Lance Taylor <ian@sanguine.cygnus.com>
-
- * a29k.h: Add operand type 'I' for `inv' and `iretinv'. On
- systems with a separate instruction and data cache, such as the
- 29040, these instructions take an optional argument.
-
-Wed Sep 14 17:44:20 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
-
- * mips.h (INSN_STORE_MEMORY): Correct value to not conflict with
- INSN_TRAP.
-
-Tue Sep 6 11:39:08 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
-
- * mips.h (INSN_STORE_MEMORY): Define.
-
-Thu Jul 28 19:28:07 1994 Ken Raeburn (raeburn@cujo.cygnus.com)
-
- * sparc.h: Document new operand type 'x'.
-
-Tue Jul 26 17:48:05 1994 Ken Raeburn (raeburn@cujo.cygnus.com)
-
- * i960.h (I_CX2): New instruction category. It includes
- instructions available on Cx and Jx processors.
- (I_JX): New instruction category, for JX-only instructions.
- (i960_opcodes): Put eshro and sysctl in I_CX2 category. Added
- Jx-only instructions, in I_JX category.
-
-Wed Jul 13 18:43:47 1994 Ken Raeburn (raeburn@cujo.cygnus.com)
-
- * ns32k.h (endop): Made pointer const too.
-
-Sun Jul 10 11:01:09 1994 Ian Dall (dall@hfrd.dsto.gov.au)
-
- * ns32k.h: Drop Q operand type as there is no correct use
- for it. Add I and Z operand types which allow better checking.
-
-Thu Jul 7 12:34:48 1994 Steve Chamberlain (sac@jonny.cygnus.com)
-
- * h8300.h (xor.l) :fix bit pattern.
- (L_2): New size of operand.
- (trapa): Use it.
-
-Fri Jun 10 16:38:11 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * m68k.h: Move "trap" before "tpcc" to change disassembly.
-
-Fri Jun 3 15:57:36 1994 Ken Raeburn (raeburn@cujo.cygnus.com)
-
- * sparc.h: Include v9 definitions.
-
-Thu Jun 2 12:23:17 1994 Ken Raeburn (raeburn@cujo.cygnus.com)
-
- * m68k.h (m68060): Defined.
- (m68040up, mfloat, mmmu): Include it.
- (struct m68k_opcode): Widen `arch' field.
- (m68k_opcodes): Updated for M68060. Removed comments that were
- instructions commented out by "JF" years ago.
-
-Thu Apr 28 18:31:14 1994 Ken Raeburn (raeburn@cujo.cygnus.com)
-
- * m68k.h (struct m68k_opcode): Shorten `arch' field to 8 bits, and
- add a one-bit `flags' field.
- (F_ALIAS): New macro.
-
-Wed Apr 27 11:29:52 1994 Steve Chamberlain (sac@cygnus.com)
-
- * h8300.h (dec, inc): Get encoding right.
-
-Mon Apr 4 13:12:43 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * ppc.h (struct powerpc_operand): Removed signedp field; just use
- a flag instead.
- (PPC_OPERAND_SIGNED): Define.
- (PPC_OPERAND_SIGNOPT): Define.
-
-Thu Mar 31 19:34:08 1994 Ken Raeburn (raeburn@cujo.cygnus.com)
-
- * i386.h (IS_JUMP_ON_ECX_ZERO, "jcxz" pattern): Operand size
- prefix is 0x66, not 0x67. Patch from H.J. Lu (hlu@nynexst.com).
-
-Thu Mar 3 15:51:05 1994 Ken Raeburn (raeburn@cujo.cygnus.com)
-
- * i386.h: Reverse last change. It'll be handled in gas instead.
-
-Thu Feb 24 15:29:05 1994 Ken Raeburn (raeburn@cujo.cygnus.com)
-
- * i386.h (sar): Disabled the two-operand Imm1 form, since it was
- slower on the 486 and used the implicit shift count despite the
- explicit operand. The one-operand form is still available to get
- the shorter form with the implicit shift count.
-
-Thu Feb 17 12:27:52 1994 Torbjorn Granlund (tege@mexican.cygnus.com)
-
- * hppa.h: Fix typo in fstws arg string.
-
-Wed Feb 9 21:23:52 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * ppc.h (struct powerpc_opcode): Make operands field unsigned.
-
-Mon Feb 7 19:14:58 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * ppc.h (PPC_OPCODE_601): Define.
-
-Fri Feb 4 23:43:50 1994 Jeffrey A. Law (law@snake.cs.utah.edu)
-
- * hppa.h (addb): Use '@' for addb and addib pseudo ops.
- (so we can determine valid completers for both addb and addb[tf].)
-
- * hppa.h (xmpyu): No floating point format specifier for the
- xmpyu instruction.
-
-Fri Feb 4 23:36:52 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * ppc.h (PPC_OPERAND_NEXT): Define.
- (PPC_OPERAND_NEGATIVE): Change value to make room for above.
- (struct powerpc_macro): Define.
- (powerpc_macros, powerpc_num_macros): Declare.
-
-Fri Jan 21 19:13:50 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * ppc.h: New file. Header file for PowerPC opcode table.
-
-Mon Jan 17 00:14:23 1994 Jeffrey A. Law (law@snake.cs.utah.edu)
-
- * hppa.h: More minor template fixes for sfu and copr (to allow
- for easier disassembly).
-
- * hppa.h: Fix templates for all the sfu and copr instructions.
-
-Wed Dec 15 15:12:42 1993 Ken Raeburn (raeburn@cujo.cygnus.com)
-
- * i386.h (push): Permit Imm16 operand too.
-
-Sat Dec 11 16:14:06 1993 Steve Chamberlain (sac@thepub.cygnus.com)
-
- * h8300.h (andc): Exists in base arch.
-
-Wed Dec 1 12:15:32 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
-
- * From Hisashi MINAMINO <minamino@sramhc.sra.co.jp>
- * hppa.h: #undef NONE to avoid conflict with hiux include files.
-
-Sun Nov 21 22:06:57 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
-
- * hppa.h: Add FP quadword store instructions.
-
-Wed Nov 17 17:13:16 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * mips.h: (M_J_A): Added.
- (M_LA): Removed.
-
-Mon Nov 8 12:12:47 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * mips.h (OP_MASK_CACHE, OP_SH_CACHE): Define. From Ted Lemon
- <mellon@pepper.ncd.com>.
-
-Sun Nov 7 00:30:11 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
-
- * hppa.h: Immediate field in probei instructions is unsigned,
- not low-sign extended.
-
-Wed Nov 3 10:30:00 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- * m88k.h (RRI10MASK): Change from 0xfc00ffe0 to 0xfc00fc00.
-
-Tue Nov 2 12:41:30 1993 Ken Raeburn (raeburn@rover.cygnus.com)
-
- * i386.h: Add "fxch" without operand.
-
-Mon Nov 1 18:13:03 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * mips.h (M_JAL_1, M_JAL_2, M_JAL_A): Added.
-
-Sat Oct 2 22:26:11 1993 Jeffrey A Law (law@snake.cs.utah.edu)
-
- * hppa.h: Add gfw and gfr to the opcode table.
-
-Wed Sep 29 16:23:00 1993 K. Richard Pixley (rich@sendai.cygnus.com)
-
- * m88k.h: extended to handle m88110.
-
-Tue Sep 28 19:19:08 1993 Jeffrey A Law (law@snake.cs.utah.edu)
-
- * hppa.h (be, ble): Use operand type 'z' to denote absolute branch
- addresses.
-
-Tue Sep 14 14:04:35 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * i960.h (i960_opcodes): Properly bracket initializers.
-
-Mon Sep 13 12:50:52 1993 K. Richard Pixley (rich@sendai.cygnus.com)
-
- * m88k.h (BOFLAG): rewrite to avoid nested comment.
-
-Mon Sep 13 15:46:06 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * m68k.h (two): Protect second argument with parentheses.
-
-Fri Sep 10 16:29:47 1993 Ken Raeburn (raeburn@cambridge.cygnus.com)
-
- * i386.h (i386_optab): Added new instruction "rsm" (for i386sl).
- Deleted old in/out instructions in "#if 0" section.
-
-Thu Sep 9 17:42:19 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * i386.h (i386_optab): Properly bracket initializers.
-
-Wed Aug 25 13:50:56 1993 Ken Raeburn (raeburn@cambridge.cygnus.com)
-
- * hppa.h (pa_opcode): Use '|' for movb and movib insns. (From
- Jeff Law, law@cs.utah.edu).
-
-Mon Aug 23 16:55:03 1993 Ken Raeburn (raeburn@cambridge.cygnus.com)
-
- * i386.h (lcall): Accept Imm32 operand also.
-
-Mon Aug 23 12:43:11 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * mips.h (M_ABSU): Removed (absolute value of unsigned number??).
- (M_DABS): Added.
-
-Thu Aug 19 15:08:37 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * mips.h (INSN_*): Changed values. Removed unused definitions.
- Added INSN_COND_BRANCH_LIKELY, INSN_ISA2 and INSN_ISA3. Split
- INSN_LOAD_DELAY into INSN_LOAD_MEMORY_DELAY and
- INSN_LOAD_COPROC_DELAY. Split INSN_COPROC_DELAY into
- INSN_COPROC_MOVE_DELAY and INSN_COPROC_MEMORY_DELAY.
- (M_*): Added new values for r6000 and r4000 macros.
- (ANY_DELAY): Removed.
-
-Wed Aug 18 15:37:48 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * mips.h: Added M_LI_S and M_LI_SS.
-
-Tue Aug 17 07:08:08 1993 Steve Chamberlain (sac@phydeaux.cygnus.com)
-
- * h8300.h: Get some rare mov.bs correct.
-
-Thu Aug 5 09:15:17 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- * sparc.h: Don't define const ourself; rely on ansidecl.h having
- been included.
-
-Fri Jul 30 18:41:11 1993 John Gilmore (gnu@cygnus.com)
-
- * sparc.h (F_JSR, F_UNBR, F_CONDBR): Add new flags to mark
- jump instructions, for use in disassemblers.
-
-Thu Jul 22 07:25:27 1993 Ian Lance Taylor (ian@cygnus.com)
-
- * m88k.h: Make bitfields just unsigned, not unsigned long or
- unsigned short.
-
-Wed Jul 21 11:55:31 1993 Jim Kingdon (kingdon@deneb.cygnus.com)
-
- * hppa.h: New argument type 'y'. Use in various float instructions.
-
-Mon Jul 19 17:17:03 1993 Jim Kingdon (kingdon@deneb.cygnus.com)
-
- * hppa.h (break): First immediate field is unsigned.
-
- * hppa.h: Add rfir instruction.
-
-Sun Jul 18 16:28:08 1993 Jim Kingdon (kingdon@rtl.cygnus.com)
-
- * mips.h: Split the actual table out into ../../opcodes/mips-opc.c.
-
-Fri Jul 16 09:59:29 1993 Ian Lance Taylor (ian@cygnus.com)
-
- * mips.h: Reworked the hazard information somewhat, and fixed some
- bugs in the instruction hazard descriptions.
-
-Thu Jul 15 12:42:01 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * m88k.h: Corrected a couple of opcodes.
-
-Tue Jul 6 15:17:35 1993 Ian Lance Taylor (ian@cygnus.com)
-
- * mips.h: Replaced with version from Ralph Campbell and OSF. The
- new version includes instruction hazard information, but is
- otherwise reasonably similar.
-
-Thu Jul 1 20:36:17 1993 Doug Evans (dje@canuck.cygnus.com)
-
- * h8300.h: Fix typo in UNOP3 (affected sh[al][lr].l).
-
-Fri Jun 11 18:38:44 1993 Ken Raeburn (raeburn@cygnus.com)
-
- Patches from Jeff Law, law@cs.utah.edu:
- * hppa.h: Clean up some of the OLD_TABLE, non-OLD_TABLE braindamage.
- Make the tables be the same for the following instructions:
- "bb", "addb[tf]", "addib[tf]", "add", "add[loc]", "addco",
- "sh[123]add", "sh[123]add[lo]", "sub", "sub[obt]", "sub[bt]o",
- "ds", "comclr", "addi", "addi[ot]", "addito", "subi", "subio",
- "comiclr", "fadd", "fsub", "fmpy", "fdiv", "fsqrt", "fabs",
- "frnd", "fcpy", "fcnvff", "fcnvxf", "fcnvfx", "fcnvfxt",
- "fcmp", and "ftest".
-
- * hppa.h: Make new and old tables the same for "break", "mtctl",
- "mfctl", "bb", "ssm", "rsm", "xmpyu", "fmpyadd", "fmpysub".
- Fix typo in last patch. Collapse several #ifdefs into a
- single #ifdef.
-
- * hppa.h: Delete remaining OLD_TABLE code. Bring some
- of the comments up-to-date.
-
- * hppa.h: Update "free list" of letters and update
- comments describing each letter's function.
-
-Thu Jul 8 09:05:26 1993 Doug Evans (dje@canuck.cygnus.com)
-
- * h8300.h: Lots of little fixes for the h8/300h.
-
-Tue Jun 8 12:16:03 1993 Steve Chamberlain (sac@phydeaux.cygnus.com)
-
- Support for H8/300-H
- * h8300.h: Lots of new opcodes.
-
-Fri Jun 4 15:41:37 1993 Steve Chamberlain (sac@phydeaux.cygnus.com)
-
- * h8300.h: checkpoint, includes H8/300-H opcodes.
-
-Thu Jun 3 15:42:59 1993 Stu Grossman (grossman@cygnus.com)
-
- * Patches from Jeffrey Law <law@cs.utah.edu>.
- * hppa.h: Rework single precision FP
- instructions so that they correctly disassemble code
- PA1.1 code.
-
-Thu May 27 19:21:22 1993 Bruce Bauman (boot@osf.org)
-
- * i386.h (i386_optab, mov pattern): Remove Mem16 restriction from
- mov to allow instructions like mov ss,xyz(ecx) to assemble.
-
-Tue May 25 00:39:40 1993 Ken Raeburn (raeburn@cygnus.com)
-
- * hppa.h: Use new version from Utah if OLD_TABLE isn't defined;
- gdb will define it for now.
-
-Mon May 24 15:20:06 1993 Ken Raeburn (raeburn@cambridge.cygnus.com)
-
- * sparc.h: Don't end enumerator list with comma.
-
-Fri May 14 15:15:50 1993 Ian Lance Taylor (ian@cygnus.com)
-
- * Based on patches from davidj@ICSI.Berkeley.EDU (David Johnson):
- * mips.h (OP_MASK_COPZ, OP_SH_COPZ): Define.
- ("bc2t"): Correct typo.
- ("[ls]wc[023]"): Use T rather than t.
- ("c[0123]"): Define general coprocessor instructions.
-
-Mon May 10 06:02:25 1993 Ken Raeburn (raeburn@kr-pc.cygnus.com)
-
- * m68k.h: Move split point for gcc compilation more towards
- middle.
-
-Fri Apr 9 13:26:16 1993 Jim Kingdon (kingdon@cygnus.com)
-
- * rs6k.h: Clean up instructions for primary opcode 19 (many were
- simply wrong, ics, rfi, & rfsvc were missing).
- Add "a" to opr_ext for "bb". Doc fix.
-
-Thu Mar 18 13:45:31 1993 Per Bothner (bothner@rtl.cygnus.com)
-
- * i386.h: 486 extensions from John Hassey (hassey@dg-rtp.dg.com).
- * mips.h: Add casts, to suppress warnings about shifting too much.
- * m68k.h: Document the placement code '9'.
-
-Thu Feb 18 02:03:14 1993 John Gilmore (gnu@cygnus.com)
-
- * m68k.h (BREAK_UP_BIG_DECL, AND_OTHER_PART): Add kludge which
- allows callers to break up the large initialized struct full of
- opcodes into two half-sized ones. This permits GCC to compile
- this module, since it takes exponential space for initializers.
- (numopcodes, endop): Revise to use AND_OTHER_PART in size calcs.
-
-Thu Feb 4 02:06:56 1993 John Gilmore (gnu@cygnus.com)
-
- * a29k.h: Remove RCS crud, update GPL to v2, update copyrights.
- * convex.h: Added, from GDB's convx-opcode.h. Added CONST to all
- initialized structs in it.
-
-Thu Jan 28 21:32:22 1993 John Gilmore (gnu@cygnus.com)
-
- Delta 88 changes inspired by Carl Greco, <cgreco@Creighton.Edu>:
- * m88k.h (PMEM): Avoid previous definition from <sys/param.h>.
- (AND): Change to AND_ to avoid ansidecl.h `AND' conflict.
-
-Sat Jan 23 18:10:49 PST 1993 Ralph Campbell (ralphc@pyramid.com)
-
- * mips.h: document "i" and "j" operands correctly.
-
-Thu Jan 7 15:58:13 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * mips.h: Removed endianness dependency.
-
-Sun Jan 3 14:13:35 1993 Steve Chamberlain (sac@thepub.cygnus.com)
-
- * h8300.h: include info on number of cycles per instruction.
-
-Mon Dec 21 21:29:08 1992 Stu Grossman (grossman at cygnus.com)
-
- * hppa.h: Move handy aliases to the front. Fix masks for extract
- and deposit instructions.
-
-Sat Dec 12 16:09:48 1992 Ian Lance Taylor (ian@cygnus.com)
-
- * i386.h: accept shld and shrd both with and without the shift
- count argument, which is always %cl.
-
-Fri Nov 27 17:13:18 1992 Ken Raeburn (raeburn at cygnus.com)
-
- * i386.h (i386_optab_end, i386_regtab_end): Now const.
- (one_byte_segment_defaults, two_byte_segment_defaults,
- i386_prefixtab_end): Ditto.
-
-Mon Nov 23 10:47:25 1992 Ken Raeburn (raeburn@cygnus.com)
-
- * vax.h (bb*): Use "v" (bitfield type), not "a" (address operand)
- for operand 2; from John Carr, jfc@dsg.dec.com.
-
-Wed Nov 4 07:36:49 1992 Ken Raeburn (raeburn@cygnus.com)
-
- * m68k.h: Define FIXED_SIZE_BRANCH, so bsr and bra instructions
- always use 16-bit offsets. Makes calculated-size jump tables
- feasible.
-
-Fri Oct 16 22:52:43 1992 Ken Raeburn (raeburn@cygnus.com)
-
- * i386.h: Fix one-operand forms of in* and out* patterns.
-
-Tue Sep 22 14:08:14 1992 Ken Raeburn (raeburn@cambridge.cygnus.com)
-
- * m68k.h: Added CPU32 support.
-
-Tue Sep 22 00:38:41 1992 John Gilmore (gnu@cygnus.com)
-
- * mips.h (break): Disassemble the argument. Patch from
- jonathan@cs.stanford.edu (Jonathan Stone).
-
-Wed Sep 9 11:25:28 1992 Ian Lance Taylor (ian@cygnus.com)
-
- * m68k.h: merged Motorola and MIT syntax.
-
-Thu Sep 3 09:33:22 1992 Steve Chamberlain (sac@thepub.cygnus.com)
-
- * m68k.h (pmove): make the tests less strict, the 68k book is
- wrong.
-
-Tue Aug 25 23:25:19 1992 Ken Raeburn (raeburn@cambridge.cygnus.com)
-
- * m68k.h (m68ec030): Defined as alias for 68030.
- (m68k_opcodes): New type characters "3" for 68030 MMU regs and "t"
- for immediate 0-7 added. Set up some opcodes (ptest, bkpt) to use
- them. Tightened description of "fmovex" to distinguish it from
- some "pmove" encodings. Added "pmove" for 68030 MMU regs, cleaned
- up descriptions that claimed versions were available for chips not
- supporting them. Added "pmovefd".
-
-Mon Aug 24 12:04:51 1992 Steve Chamberlain (sac@thepub.cygnus.com)
-
- * m68k.h: fix where the . goes in divull
-
-Wed Aug 19 11:22:24 1992 Ian Lance Taylor (ian@cygnus.com)
-
- * m68k.h: the cas2 instruction is supposed to be written with
- indirection on the last two operands, which can be either data or
- address registers. Added a new operand type 'r' which accepts
- either register type. Added new cases for cas2l and cas2w which
- use them. Corrected masks for cas2 which failed to recognize use
- of address register.
-
-Fri Aug 14 14:20:38 1992 Per Bothner (bothner@cygnus.com)
-
- * m68k.h: Merged in patches (mostly m68040-specific) from
- Colin Smith <colin@wrs.com>.
-
- * m68k.h: Merged m68kmri.h and m68k.h (using the former as a
- base). Also cleaned up duplicates, re-ordered instructions for
- the sake of dis-assembling (so aliases come after standard names).
- * m68kmri.h: Now just defines some macros, and #includes m68k.h.
-
-Wed Aug 12 16:38:15 1992 Steve Chamberlain (sac@thepub.cygnus.com)
-
- * m68kmri.h: added various opcodes. Moved jbxx to bxxes. Filled in
- all missing .s
-
-Mon Aug 10 23:22:33 1992 Ken Raeburn (raeburn@cygnus.com)
-
- * sparc.h: Moved tables to BFD library.
-
- * i386.h (i386_optab): Add fildq, fistpq aliases used by gcc.
-
-Sun Jun 28 13:29:03 1992 Fred Fish (fnf@cygnus.com)
-
- * h8300.h: Finish filling in all the holes in the opcode table,
- so that the Lucid C compiler can digest this as well...
-
-Fri Jun 26 21:27:17 1992 John Gilmore (gnu at cygnus.com)
-
- * i386.h: Add setc, setnc, addr16, data16, repz, repnz aliases.
- Fix opcodes on various sizes of fild/fist instructions
- (16bit=no suffix, 32bit="l" suffix, 64bit="ll" suffix).
- Use tabs to indent for comments. Fixes suggested by Minh Tran-Le.
-
-Thu Jun 25 16:13:26 1992 Stu Grossman (grossman at cygnus.com)
-
- * h8300.h: Fill in all the holes in the opcode table so that the
- losing HPUX C compiler can digest this...
-
-Thu Jun 11 12:15:25 1992 John Gilmore (gnu at cygnus.com)
-
- * mips.h: Fix decoding of coprocessor instructions, somewhat.
- (Fix by Eric Anderson, 3jean@maas-neotek.arc.nasa.gov.)
-
-Thu May 28 11:17:44 1992 Jim Wilson (wilson@sphagnum.cygnus.com)
-
- * sparc.h: Add new architecture variant sparclite; add its scan
- and divscc opcodes. Define ARCHITECTURES_CONFLICT_P macro.
-
-Tue May 5 14:23:27 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * mips.h: Add some more opcode synonyms (from Frank Yellin,
- fy@lucid.com).
-
-Thu Apr 16 18:25:26 1992 Per Bothner (bothner@cygnus.com)
-
- * rs6k.h: New version from IBM (Metin).
-
-Thu Apr 9 00:31:19 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * rs6k.h: Fix incorrect extended opcode for instructions `fm'
- and `fd'. (From metin@ibmpa.awdpa.ibm.com (Metin G. Ozisik).)
-
-Tue Apr 7 13:38:47 1992 Stu Grossman (grossman at cygnus.com)
-
- * rs6k.h: Move from ../../gdb/rs6k-opcode.h.
-
-Fri Apr 3 11:30:20 1992 Fred Fish (fnf@cygnus.com)
-
- * m68k.h (one, two): Cast macro args to unsigned to suppress
- complaints from compiler and lint about integer overflow during
- shift.
-
-Sun Mar 29 12:22:08 1992 John Gilmore (gnu at cygnus.com)
-
- * sparc.h (OP): Avoid signed overflow when shifting to high order bit.
-
-Fri Mar 6 00:22:38 1992 John Gilmore (gnu at cygnus.com)
-
- * mips.h: Make bitfield layout depend on the HOST compiler,
- not on the TARGET system.
-
-Fri Feb 21 01:29:51 1992 K. Richard Pixley (rich@cygnus.com)
-
- * i386.h: added inb, inw, outb, outw opcodes, added att syntax for
- scmp, slod, smov, ssca, ssto. Curtesy Minh Tran-Le
- <TRANLE@INTELLICORP.COM>.
-
-Thu Jan 30 07:31:44 1992 Steve Chamberlain (sac at rtl.cygnus.com)
-
- * h8300.h: turned op_type enum into #define list
-
-Thu Jan 30 01:07:24 1992 John Gilmore (gnu at cygnus.com)
-
- * sparc.h: Remove "cypress" architecture. Remove "fitox" and
- similar instructions -- they've been renamed to "fitoq", etc.
- REALLY fix tsubcctv. Fix "fcmpeq" and "fcmpq" which had wrong
- number of arguments.
- * h8300.h: Remove extra ; which produces compiler warning.
-
-Tue Jan 28 22:59:22 1992 Stu Grossman (grossman at cygnus.com)
-
- * sparc.h: fix opcode for tsubcctv.
-
-Tue Jan 7 17:19:39 1992 K. Richard Pixley (rich at cygnus.com)
-
- * sparc.h: fba and cba are now aliases for fb and cb respectively.
-
-Fri Dec 27 10:55:50 1991 Per Bothner (bothner at cygnus.com)
-
- * sparc.h (nop): Made the 'lose' field be even tighter,
- so only a standard 'nop' is disassembled as a nop.
-
-Sun Dec 22 12:18:18 1991 Michael Tiemann (tiemann at cygnus.com)
-
- * sparc.h (nop): Add RD_GO to `lose' so that only %g0 in dest is
- disassembled as a nop.
-
-Wed Dec 18 17:19:44 1991 Stu Grossman (grossman at cygnus.com)
-
- * m68k.h, sparc.h: ANSIfy enums.
-
-Tue Dec 10 00:22:20 1991 K. Richard Pixley (rich at rtl.cygnus.com)
-
- * sparc.h: fix a typo.
-
-Sat Nov 30 20:40:51 1991 Steve Chamberlain (sac at rtl.cygnus.com)
-
- * a29k.h, arm.h, h8300.h, i386.h, i860.h, i960.h , m68k.h,
- m88k.h, mips.h , np1.h, ns32k.h, pn.h, pyr.h, sparc.h, tahoe.h,
- vax.h: Renamed from ../<foo>-opcode.h.
-
-
-Copyright (C) 1991-2003 Free Software Foundation, Inc.
-
-Copying and distribution of this file, with or without modification,
-are permitted in any medium without royalty provided the copyright
-notice and this notice are preserved.
-
-Local Variables:
-mode: change-log
-left-margin: 8
-fill-column: 74
-version-control: never
-End:
-
diff --git a/include/opcode/aarch64.h b/include/opcode/aarch64.h
deleted file mode 100644
index eaf3cda5d..000000000
--- a/include/opcode/aarch64.h
+++ /dev/null
@@ -1,932 +0,0 @@
-/* AArch64 assembler/disassembler support.
-
- Copyright 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc.
- Contributed by ARM Ltd.
-
- This file is part of GNU Binutils.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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; see the file COPYING3. If not,
- see <http://www.gnu.org/licenses/>. */
-
-#ifndef OPCODE_AARCH64_H
-#define OPCODE_AARCH64_H
-
-#include "bfd.h"
-#include "bfd_stdint.h"
-#include <assert.h>
-#include <stdlib.h>
-
-/* The offset for pc-relative addressing is currently defined to be 0. */
-#define AARCH64_PCREL_OFFSET 0
-
-typedef uint32_t aarch64_insn;
-
-/* The following bitmasks control CPU features. */
-#define AARCH64_FEATURE_V8 0x00000001 /* All processors. */
-#define AARCH64_FEATURE_CRYPTO 0x00010000 /* Crypto instructions. */
-#define AARCH64_FEATURE_FP 0x00020000 /* FP instructions. */
-#define AARCH64_FEATURE_SIMD 0x00040000 /* SIMD instructions. */
-#define AARCH64_FEATURE_CRC 0x00080000 /* CRC instructions. */
-
-/* Architectures are the sum of the base and extensions. */
-#define AARCH64_ARCH_V8 AARCH64_FEATURE (AARCH64_FEATURE_V8, \
- AARCH64_FEATURE_FP \
- | AARCH64_FEATURE_SIMD)
-#define AARCH64_ARCH_NONE AARCH64_FEATURE (0, 0)
-#define AARCH64_ANY AARCH64_FEATURE (-1, 0) /* Any basic core. */
-
-/* CPU-specific features. */
-typedef unsigned long aarch64_feature_set;
-
-#define AARCH64_CPU_HAS_FEATURE(CPU,FEAT) \
- (((CPU) & (FEAT)) != 0)
-
-#define AARCH64_MERGE_FEATURE_SETS(TARG,F1,F2) \
- do \
- { \
- (TARG) = (F1) | (F2); \
- } \
- while (0)
-
-#define AARCH64_CLEAR_FEATURE(TARG,F1,F2) \
- do \
- { \
- (TARG) = (F1) &~ (F2); \
- } \
- while (0)
-
-#define AARCH64_FEATURE(core,coproc) ((core) | (coproc))
-
-#define AARCH64_OPCODE_HAS_FEATURE(OPC,FEAT) \
- (((OPC) & (FEAT)) != 0)
-
-enum aarch64_operand_class
-{
- AARCH64_OPND_CLASS_NIL,
- AARCH64_OPND_CLASS_INT_REG,
- AARCH64_OPND_CLASS_MODIFIED_REG,
- AARCH64_OPND_CLASS_FP_REG,
- AARCH64_OPND_CLASS_SIMD_REG,
- AARCH64_OPND_CLASS_SIMD_ELEMENT,
- AARCH64_OPND_CLASS_SISD_REG,
- AARCH64_OPND_CLASS_SIMD_REGLIST,
- AARCH64_OPND_CLASS_CP_REG,
- AARCH64_OPND_CLASS_ADDRESS,
- AARCH64_OPND_CLASS_IMMEDIATE,
- AARCH64_OPND_CLASS_SYSTEM,
-};
-
-/* Operand code that helps both parsing and coding.
- Keep AARCH64_OPERANDS synced. */
-
-enum aarch64_opnd
-{
- AARCH64_OPND_NIL, /* no operand---MUST BE FIRST!*/
-
- AARCH64_OPND_Rd, /* Integer register as destination. */
- AARCH64_OPND_Rn, /* Integer register as source. */
- AARCH64_OPND_Rm, /* Integer register as source. */
- AARCH64_OPND_Rt, /* Integer register used in ld/st instructions. */
- AARCH64_OPND_Rt2, /* Integer register used in ld/st pair instructions. */
- AARCH64_OPND_Rs, /* Integer register used in ld/st exclusive. */
- AARCH64_OPND_Ra, /* Integer register used in ddp_3src instructions. */
- AARCH64_OPND_Rt_SYS, /* Integer register used in system instructions. */
-
- AARCH64_OPND_Rd_SP, /* Integer Rd or SP. */
- AARCH64_OPND_Rn_SP, /* Integer Rn or SP. */
- AARCH64_OPND_Rm_EXT, /* Integer Rm extended. */
- AARCH64_OPND_Rm_SFT, /* Integer Rm shifted. */
-
- AARCH64_OPND_Fd, /* Floating-point Fd. */
- AARCH64_OPND_Fn, /* Floating-point Fn. */
- AARCH64_OPND_Fm, /* Floating-point Fm. */
- AARCH64_OPND_Fa, /* Floating-point Fa. */
- AARCH64_OPND_Ft, /* Floating-point Ft. */
- AARCH64_OPND_Ft2, /* Floating-point Ft2. */
-
- AARCH64_OPND_Sd, /* AdvSIMD Scalar Sd. */
- AARCH64_OPND_Sn, /* AdvSIMD Scalar Sn. */
- AARCH64_OPND_Sm, /* AdvSIMD Scalar Sm. */
-
- AARCH64_OPND_Vd, /* AdvSIMD Vector Vd. */
- AARCH64_OPND_Vn, /* AdvSIMD Vector Vn. */
- AARCH64_OPND_Vm, /* AdvSIMD Vector Vm. */
- AARCH64_OPND_VdD1, /* AdvSIMD <Vd>.D[1]; for FMOV only. */
- AARCH64_OPND_VnD1, /* AdvSIMD <Vn>.D[1]; for FMOV only. */
- AARCH64_OPND_Ed, /* AdvSIMD Vector Element Vd. */
- AARCH64_OPND_En, /* AdvSIMD Vector Element Vn. */
- AARCH64_OPND_Em, /* AdvSIMD Vector Element Vm. */
- AARCH64_OPND_LVn, /* AdvSIMD Vector register list used in e.g. TBL. */
- AARCH64_OPND_LVt, /* AdvSIMD Vector register list used in ld/st. */
- AARCH64_OPND_LVt_AL, /* AdvSIMD Vector register list for loading single
- structure to all lanes. */
- AARCH64_OPND_LEt, /* AdvSIMD Vector Element list. */
-
- AARCH64_OPND_Cn, /* Co-processor register in CRn field. */
- AARCH64_OPND_Cm, /* Co-processor register in CRm field. */
-
- AARCH64_OPND_IDX, /* AdvSIMD EXT index operand. */
- AARCH64_OPND_IMM_VLSL,/* Immediate for shifting vector registers left. */
- AARCH64_OPND_IMM_VLSR,/* Immediate for shifting vector registers right. */
- AARCH64_OPND_SIMD_IMM,/* AdvSIMD modified immediate without shift. */
- AARCH64_OPND_SIMD_IMM_SFT, /* AdvSIMD modified immediate with shift. */
- AARCH64_OPND_SIMD_FPIMM,/* AdvSIMD 8-bit fp immediate. */
- AARCH64_OPND_SHLL_IMM,/* Immediate shift for AdvSIMD SHLL instruction
- (no encoding). */
- AARCH64_OPND_IMM0, /* Immediate for #0. */
- AARCH64_OPND_FPIMM0, /* Immediate for #0.0. */
- AARCH64_OPND_FPIMM, /* Floating-point Immediate. */
- AARCH64_OPND_IMMR, /* Immediate #<immr> in e.g. BFM. */
- AARCH64_OPND_IMMS, /* Immediate #<imms> in e.g. BFM. */
- AARCH64_OPND_WIDTH, /* Immediate #<width> in e.g. BFI. */
- AARCH64_OPND_IMM, /* Immediate. */
- AARCH64_OPND_UIMM3_OP1,/* Unsigned 3-bit immediate in the op1 field. */
- AARCH64_OPND_UIMM3_OP2,/* Unsigned 3-bit immediate in the op2 field. */
- AARCH64_OPND_UIMM4, /* Unsigned 4-bit immediate in the CRm field. */
- AARCH64_OPND_UIMM7, /* Unsigned 7-bit immediate in the CRm:op2 fields. */
- AARCH64_OPND_BIT_NUM, /* Immediate. */
- AARCH64_OPND_EXCEPTION,/* imm16 operand in exception instructions. */
- AARCH64_OPND_CCMP_IMM,/* Immediate in conditional compare instructions. */
- AARCH64_OPND_NZCV, /* Flag bit specifier giving an alternative value for
- each condition flag. */
-
- AARCH64_OPND_LIMM, /* Logical Immediate. */
- AARCH64_OPND_AIMM, /* Arithmetic immediate. */
- AARCH64_OPND_HALF, /* #<imm16>{, LSL #<shift>} operand in move wide. */
- AARCH64_OPND_FBITS, /* FP #<fbits> operand in e.g. SCVTF */
- AARCH64_OPND_IMM_MOV, /* Immediate operand for the MOV alias. */
-
- AARCH64_OPND_COND, /* Standard condition as the last operand. */
-
- AARCH64_OPND_ADDR_ADRP, /* Memory address for ADRP */
- AARCH64_OPND_ADDR_PCREL14, /* 14-bit PC-relative address for e.g. TBZ. */
- AARCH64_OPND_ADDR_PCREL19, /* 19-bit PC-relative address for e.g. LDR. */
- AARCH64_OPND_ADDR_PCREL21, /* 21-bit PC-relative address for e.g. ADR. */
- AARCH64_OPND_ADDR_PCREL26, /* 26-bit PC-relative address for e.g. BL. */
-
- AARCH64_OPND_ADDR_SIMPLE, /* Address of ld/st exclusive. */
- AARCH64_OPND_ADDR_REGOFF, /* Address of register offset. */
- AARCH64_OPND_ADDR_SIMM7, /* Address of signed 7-bit immediate. */
- AARCH64_OPND_ADDR_SIMM9, /* Address of signed 9-bit immediate. */
- AARCH64_OPND_ADDR_SIMM9_2, /* Same as the above, but the immediate is
- negative or unaligned and there is
- no writeback allowed. This operand code
- is only used to support the programmer-
- friendly feature of using LDR/STR as the
- the mnemonic name for LDUR/STUR instructions
- wherever there is no ambiguity. */
- AARCH64_OPND_ADDR_UIMM12, /* Address of unsigned 12-bit immediate. */
- AARCH64_OPND_SIMD_ADDR_SIMPLE,/* Address of ld/st multiple structures. */
- AARCH64_OPND_SIMD_ADDR_POST, /* Address of ld/st multiple post-indexed. */
-
- AARCH64_OPND_SYSREG, /* System register operand. */
- AARCH64_OPND_PSTATEFIELD, /* PSTATE field name operand. */
- AARCH64_OPND_SYSREG_AT, /* System register <at_op> operand. */
- AARCH64_OPND_SYSREG_DC, /* System register <dc_op> operand. */
- AARCH64_OPND_SYSREG_IC, /* System register <ic_op> operand. */
- AARCH64_OPND_SYSREG_TLBI, /* System register <tlbi_op> operand. */
- AARCH64_OPND_BARRIER, /* Barrier operand. */
- AARCH64_OPND_BARRIER_ISB, /* Barrier operand for ISB. */
- AARCH64_OPND_PRFOP, /* Prefetch operation. */
-};
-
-/* Qualifier constrains an operand. It either specifies a variant of an
- operand type or limits values available to an operand type.
-
- N.B. Order is important; keep aarch64_opnd_qualifiers synced. */
-
-enum aarch64_opnd_qualifier
-{
- /* Indicating no further qualification on an operand. */
- AARCH64_OPND_QLF_NIL,
-
- /* Qualifying an operand which is a general purpose (integer) register;
- indicating the operand data size or a specific register. */
- AARCH64_OPND_QLF_W, /* Wn, WZR or WSP. */
- AARCH64_OPND_QLF_X, /* Xn, XZR or XSP. */
- AARCH64_OPND_QLF_WSP, /* WSP. */
- AARCH64_OPND_QLF_SP, /* SP. */
-
- /* Qualifying an operand which is a floating-point register, a SIMD
- vector element or a SIMD vector element list; indicating operand data
- size or the size of each SIMD vector element in the case of a SIMD
- vector element list.
- These qualifiers are also used to qualify an address operand to
- indicate the size of data element a load/store instruction is
- accessing.
- They are also used for the immediate shift operand in e.g. SSHR. Such
- a use is only for the ease of operand encoding/decoding and qualifier
- sequence matching; such a use should not be applied widely; use the value
- constraint qualifiers for immediate operands wherever possible. */
- AARCH64_OPND_QLF_S_B,
- AARCH64_OPND_QLF_S_H,
- AARCH64_OPND_QLF_S_S,
- AARCH64_OPND_QLF_S_D,
- AARCH64_OPND_QLF_S_Q,
-
- /* Qualifying an operand which is a SIMD vector register or a SIMD vector
- register list; indicating register shape.
- They are also used for the immediate shift operand in e.g. SSHR. Such
- a use is only for the ease of operand encoding/decoding and qualifier
- sequence matching; such a use should not be applied widely; use the value
- constraint qualifiers for immediate operands wherever possible. */
- AARCH64_OPND_QLF_V_8B,
- AARCH64_OPND_QLF_V_16B,
- AARCH64_OPND_QLF_V_4H,
- AARCH64_OPND_QLF_V_8H,
- AARCH64_OPND_QLF_V_2S,
- AARCH64_OPND_QLF_V_4S,
- AARCH64_OPND_QLF_V_1D,
- AARCH64_OPND_QLF_V_2D,
- AARCH64_OPND_QLF_V_1Q,
-
- /* Constraint on value. */
- AARCH64_OPND_QLF_imm_0_7,
- AARCH64_OPND_QLF_imm_0_15,
- AARCH64_OPND_QLF_imm_0_31,
- AARCH64_OPND_QLF_imm_0_63,
- AARCH64_OPND_QLF_imm_1_32,
- AARCH64_OPND_QLF_imm_1_64,
-
- /* Indicate whether an AdvSIMD modified immediate operand is shift-zeros
- or shift-ones. */
- AARCH64_OPND_QLF_LSL,
- AARCH64_OPND_QLF_MSL,
-
- /* Special qualifier helping retrieve qualifier information during the
- decoding time (currently not in use). */
- AARCH64_OPND_QLF_RETRIEVE,
-};
-
-/* Instruction class. */
-
-enum aarch64_insn_class
-{
- addsub_carry,
- addsub_ext,
- addsub_imm,
- addsub_shift,
- asimdall,
- asimddiff,
- asimdelem,
- asimdext,
- asimdimm,
- asimdins,
- asimdmisc,
- asimdperm,
- asimdsame,
- asimdshf,
- asimdtbl,
- asisddiff,
- asisdelem,
- asisdlse,
- asisdlsep,
- asisdlso,
- asisdlsop,
- asisdmisc,
- asisdone,
- asisdpair,
- asisdsame,
- asisdshf,
- bitfield,
- branch_imm,
- branch_reg,
- compbranch,
- condbranch,
- condcmp_imm,
- condcmp_reg,
- condsel,
- cryptoaes,
- cryptosha2,
- cryptosha3,
- dp_1src,
- dp_2src,
- dp_3src,
- exception,
- extract,
- float2fix,
- float2int,
- floatccmp,
- floatcmp,
- floatdp1,
- floatdp2,
- floatdp3,
- floatimm,
- floatsel,
- ldst_immpost,
- ldst_immpre,
- ldst_imm9, /* immpost or immpre */
- ldst_pos,
- ldst_regoff,
- ldst_unpriv,
- ldst_unscaled,
- ldstexcl,
- ldstnapair_offs,
- ldstpair_off,
- ldstpair_indexed,
- loadlit,
- log_imm,
- log_shift,
- movewide,
- pcreladdr,
- ic_system,
- testbranch,
-};
-
-/* Opcode enumerators. */
-
-enum aarch64_op
-{
- OP_NIL,
- OP_STRB_POS,
- OP_LDRB_POS,
- OP_LDRSB_POS,
- OP_STRH_POS,
- OP_LDRH_POS,
- OP_LDRSH_POS,
- OP_STR_POS,
- OP_LDR_POS,
- OP_STRF_POS,
- OP_LDRF_POS,
- OP_LDRSW_POS,
- OP_PRFM_POS,
-
- OP_STURB,
- OP_LDURB,
- OP_LDURSB,
- OP_STURH,
- OP_LDURH,
- OP_LDURSH,
- OP_STUR,
- OP_LDUR,
- OP_STURV,
- OP_LDURV,
- OP_LDURSW,
- OP_PRFUM,
-
- OP_LDR_LIT,
- OP_LDRV_LIT,
- OP_LDRSW_LIT,
- OP_PRFM_LIT,
-
- OP_ADD,
- OP_B,
- OP_BL,
-
- OP_MOVN,
- OP_MOVZ,
- OP_MOVK,
-
- OP_MOV_IMM_LOG, /* MOV alias for moving bitmask immediate. */
- OP_MOV_IMM_WIDE, /* MOV alias for moving wide immediate. */
- OP_MOV_IMM_WIDEN, /* MOV alias for moving wide immediate (negated). */
-
- OP_MOV_V, /* MOV alias for moving vector register. */
-
- OP_ASR_IMM,
- OP_LSR_IMM,
- OP_LSL_IMM,
-
- OP_BIC,
-
- OP_UBFX,
- OP_BFXIL,
- OP_SBFX,
- OP_SBFIZ,
- OP_BFI,
- OP_UBFIZ,
- OP_UXTB,
- OP_UXTH,
- OP_UXTW,
-
- OP_CINC,
- OP_CINV,
- OP_CNEG,
- OP_CSET,
- OP_CSETM,
-
- OP_FCVT,
- OP_FCVTN,
- OP_FCVTN2,
- OP_FCVTL,
- OP_FCVTL2,
- OP_FCVTXN_S, /* Scalar version. */
-
- OP_ROR_IMM,
-
- OP_SXTL,
- OP_SXTL2,
- OP_UXTL,
- OP_UXTL2,
-
- OP_TOTAL_NUM, /* Pseudo. */
-};
-
-/* Maximum number of operands an instruction can have. */
-#define AARCH64_MAX_OPND_NUM 6
-/* Maximum number of qualifier sequences an instruction can have. */
-#define AARCH64_MAX_QLF_SEQ_NUM 10
-/* Operand qualifier typedef; optimized for the size. */
-typedef unsigned char aarch64_opnd_qualifier_t;
-/* Operand qualifier sequence typedef. */
-typedef aarch64_opnd_qualifier_t \
- aarch64_opnd_qualifier_seq_t [AARCH64_MAX_OPND_NUM];
-
-/* FIXME: improve the efficiency. */
-static inline bfd_boolean
-empty_qualifier_sequence_p (const aarch64_opnd_qualifier_t *qualifiers)
-{
- int i;
- for (i = 0; i < AARCH64_MAX_OPND_NUM; ++i)
- if (qualifiers[i] != AARCH64_OPND_QLF_NIL)
- return FALSE;
- return TRUE;
-}
-
-/* This structure holds information for a particular opcode. */
-
-struct aarch64_opcode
-{
- /* The name of the mnemonic. */
- const char *name;
-
- /* The opcode itself. Those bits which will be filled in with
- operands are zeroes. */
- aarch64_insn opcode;
-
- /* The opcode mask. This is used by the disassembler. This is a
- mask containing ones indicating those bits which must match the
- opcode field, and zeroes indicating those bits which need not
- match (and are presumably filled in by operands). */
- aarch64_insn mask;
-
- /* Instruction class. */
- enum aarch64_insn_class iclass;
-
- /* Enumerator identifier. */
- enum aarch64_op op;
-
- /* Which architecture variant provides this instruction. */
- const aarch64_feature_set *avariant;
-
- /* An array of operand codes. Each code is an index into the
- operand table. They appear in the order which the operands must
- appear in assembly code, and are terminated by a zero. */
- enum aarch64_opnd operands[AARCH64_MAX_OPND_NUM];
-
- /* A list of operand qualifier code sequence. Each operand qualifier
- code qualifies the corresponding operand code. Each operand
- qualifier sequence specifies a valid opcode variant and related
- constraint on operands. */
- aarch64_opnd_qualifier_seq_t qualifiers_list[AARCH64_MAX_QLF_SEQ_NUM];
-
- /* Flags providing information about this instruction */
- uint32_t flags;
-};
-
-typedef struct aarch64_opcode aarch64_opcode;
-
-/* Table describing all the AArch64 opcodes. */
-extern aarch64_opcode aarch64_opcode_table[];
-
-/* Opcode flags. */
-#define F_ALIAS (1 << 0)
-#define F_HAS_ALIAS (1 << 1)
-/* Disassembly preference priority 1-3 (the larger the higher). If nothing
- is specified, it is the priority 0 by default, i.e. the lowest priority. */
-#define F_P1 (1 << 2)
-#define F_P2 (2 << 2)
-#define F_P3 (3 << 2)
-/* Flag an instruction that is truly conditional executed, e.g. b.cond. */
-#define F_COND (1 << 4)
-/* Instruction has the field of 'sf'. */
-#define F_SF (1 << 5)
-/* Instruction has the field of 'size:Q'. */
-#define F_SIZEQ (1 << 6)
-/* Floating-point instruction has the field of 'type'. */
-#define F_FPTYPE (1 << 7)
-/* AdvSIMD scalar instruction has the field of 'size'. */
-#define F_SSIZE (1 << 8)
-/* AdvSIMD vector register arrangement specifier encoded in "imm5<3:0>:Q". */
-#define F_T (1 << 9)
-/* Size of GPR operand in AdvSIMD instructions encoded in Q. */
-#define F_GPRSIZE_IN_Q (1 << 10)
-/* Size of Rt load signed instruction encoded in opc[0], i.e. bit 22. */
-#define F_LDS_SIZE (1 << 11)
-/* Optional operand; assume maximum of 1 operand can be optional. */
-#define F_OPD0_OPT (1 << 12)
-#define F_OPD1_OPT (2 << 12)
-#define F_OPD2_OPT (3 << 12)
-#define F_OPD3_OPT (4 << 12)
-#define F_OPD4_OPT (5 << 12)
-/* Default value for the optional operand when omitted from the assembly. */
-#define F_DEFAULT(X) (((X) & 0x1f) << 15)
-/* Instruction that is an alias of another instruction needs to be
- encoded/decoded by converting it to/from the real form, followed by
- the encoding/decoding according to the rules of the real opcode.
- This compares to the direct coding using the alias's information.
- N.B. this flag requires F_ALIAS to be used together. */
-#define F_CONV (1 << 20)
-/* Use together with F_ALIAS to indicate an alias opcode is a programmer
- friendly pseudo instruction available only in the assembly code (thus will
- not show up in the disassembly). */
-#define F_PSEUDO (1 << 21)
-/* Instruction has miscellaneous encoding/decoding rules. */
-#define F_MISC (1 << 22)
-/* Instruction has the field of 'N'; used in conjunction with F_SF. */
-#define F_N (1 << 23)
-/* Opcode dependent field. */
-#define F_OD(X) (((X) & 0x7) << 24)
-/* Next bit is 27. */
-
-static inline bfd_boolean
-alias_opcode_p (const aarch64_opcode *opcode)
-{
- return (opcode->flags & F_ALIAS) ? TRUE : FALSE;
-}
-
-static inline bfd_boolean
-opcode_has_alias (const aarch64_opcode *opcode)
-{
- return (opcode->flags & F_HAS_ALIAS) ? TRUE : FALSE;
-}
-
-/* Priority for disassembling preference. */
-static inline int
-opcode_priority (const aarch64_opcode *opcode)
-{
- return (opcode->flags >> 2) & 0x3;
-}
-
-static inline bfd_boolean
-pseudo_opcode_p (const aarch64_opcode *opcode)
-{
- return (opcode->flags & F_PSEUDO) != 0lu ? TRUE : FALSE;
-}
-
-static inline bfd_boolean
-optional_operand_p (const aarch64_opcode *opcode, unsigned int idx)
-{
- return (((opcode->flags >> 12) & 0x7) == idx + 1)
- ? TRUE : FALSE;
-}
-
-static inline aarch64_insn
-get_optional_operand_default_value (const aarch64_opcode *opcode)
-{
- return (opcode->flags >> 15) & 0x1f;
-}
-
-static inline unsigned int
-get_opcode_dependent_value (const aarch64_opcode *opcode)
-{
- return (opcode->flags >> 24) & 0x7;
-}
-
-static inline bfd_boolean
-opcode_has_special_coder (const aarch64_opcode *opcode)
-{
- return (opcode->flags & (F_SF | F_SIZEQ | F_FPTYPE | F_SSIZE | F_T
- | F_GPRSIZE_IN_Q | F_LDS_SIZE | F_MISC | F_N | F_COND)) ? TRUE
- : FALSE;
-}
-
-struct aarch64_name_value_pair
-{
- const char * name;
- aarch64_insn value;
-};
-
-extern const struct aarch64_name_value_pair aarch64_operand_modifiers [];
-extern const struct aarch64_name_value_pair aarch64_sys_regs [];
-extern const struct aarch64_name_value_pair aarch64_pstatefields [];
-extern const struct aarch64_name_value_pair aarch64_barrier_options [16];
-extern const struct aarch64_name_value_pair aarch64_prfops [32];
-
-typedef struct
-{
- const char *template;
- uint32_t value;
- int has_xt;
-} aarch64_sys_ins_reg;
-
-extern const aarch64_sys_ins_reg aarch64_sys_regs_ic [];
-extern const aarch64_sys_ins_reg aarch64_sys_regs_dc [];
-extern const aarch64_sys_ins_reg aarch64_sys_regs_at [];
-extern const aarch64_sys_ins_reg aarch64_sys_regs_tlbi [];
-
-/* Shift/extending operator kinds.
- N.B. order is important; keep aarch64_operand_modifiers synced. */
-enum aarch64_modifier_kind
-{
- AARCH64_MOD_NONE,
- AARCH64_MOD_MSL,
- AARCH64_MOD_ROR,
- AARCH64_MOD_ASR,
- AARCH64_MOD_LSR,
- AARCH64_MOD_LSL,
- AARCH64_MOD_UXTB,
- AARCH64_MOD_UXTH,
- AARCH64_MOD_UXTW,
- AARCH64_MOD_UXTX,
- AARCH64_MOD_SXTB,
- AARCH64_MOD_SXTH,
- AARCH64_MOD_SXTW,
- AARCH64_MOD_SXTX,
-};
-
-bfd_boolean
-aarch64_extend_operator_p (enum aarch64_modifier_kind);
-
-enum aarch64_modifier_kind
-aarch64_get_operand_modifier (const struct aarch64_name_value_pair *);
-/* Condition. */
-
-typedef struct
-{
- /* A list of names with the first one as the disassembly preference;
- terminated by NULL if fewer than 3. */
- const char *names[3];
- aarch64_insn value;
-} aarch64_cond;
-
-extern const aarch64_cond aarch64_conds[16];
-
-const aarch64_cond* get_cond_from_value (aarch64_insn value);
-const aarch64_cond* get_inverted_cond (const aarch64_cond *cond);
-
-/* Structure representing an operand. */
-
-struct aarch64_opnd_info
-{
- enum aarch64_opnd type;
- aarch64_opnd_qualifier_t qualifier;
- int idx;
-
- union
- {
- struct
- {
- unsigned regno;
- } reg;
- struct
- {
- unsigned regno : 5;
- unsigned index : 4;
- } reglane;
- /* e.g. LVn. */
- struct
- {
- unsigned first_regno : 5;
- unsigned num_regs : 3;
- /* 1 if it is a list of reg element. */
- unsigned has_index : 1;
- /* Lane index; valid only when has_index is 1. */
- unsigned index : 4;
- } reglist;
- /* e.g. immediate or pc relative address offset. */
- struct
- {
- int64_t value;
- unsigned is_fp : 1;
- } imm;
- /* e.g. address in STR (register offset). */
- struct
- {
- unsigned base_regno;
- struct
- {
- union
- {
- int imm;
- unsigned regno;
- };
- unsigned is_reg;
- } offset;
- unsigned pcrel : 1; /* PC-relative. */
- unsigned writeback : 1;
- unsigned preind : 1; /* Pre-indexed. */
- unsigned postind : 1; /* Post-indexed. */
- } addr;
- const aarch64_cond *cond;
- /* The encoding of the system register. */
- aarch64_insn sysreg;
- /* The encoding of the PSTATE field. */
- aarch64_insn pstatefield;
- const aarch64_sys_ins_reg *sysins_op;
- const struct aarch64_name_value_pair *barrier;
- const struct aarch64_name_value_pair *prfop;
- };
-
- /* Operand shifter; in use when the operand is a register offset address,
- add/sub extended reg, etc. e.g. <R><m>{, <extend> {#<amount>}}. */
- struct
- {
- enum aarch64_modifier_kind kind;
- int amount;
- unsigned operator_present: 1; /* Only valid during encoding. */
- /* Value of the 'S' field in ld/st reg offset; used only in decoding. */
- unsigned amount_present: 1;
- } shifter;
-
- unsigned skip:1; /* Operand is not completed if there is a fixup needed
- to be done on it. In some (but not all) of these
- cases, we need to tell libopcodes to skip the
- constraint checking and the encoding for this
- operand, so that the libopcodes can pick up the
- right opcode before the operand is fixed-up. This
- flag should only be used during the
- assembling/encoding. */
- unsigned present:1; /* Whether this operand is present in the assembly
- line; not used during the disassembly. */
-};
-
-typedef struct aarch64_opnd_info aarch64_opnd_info;
-
-/* Structure representing an instruction.
-
- It is used during both the assembling and disassembling. The assembler
- fills an aarch64_inst after a successful parsing and then passes it to the
- encoding routine to do the encoding. During the disassembling, the
- disassembler calls the decoding routine to decode a binary instruction; on a
- successful return, such a structure will be filled with information of the
- instruction; then the disassembler uses the information to print out the
- instruction. */
-
-struct aarch64_inst
-{
- /* The value of the binary instruction. */
- aarch64_insn value;
-
- /* Corresponding opcode entry. */
- const aarch64_opcode *opcode;
-
- /* Condition for a truly conditional-executed instrutions, e.g. b.cond. */
- const aarch64_cond *cond;
-
- /* Operands information. */
- aarch64_opnd_info operands[AARCH64_MAX_OPND_NUM];
-};
-
-typedef struct aarch64_inst aarch64_inst;
-
-/* Diagnosis related declaration and interface. */
-
-/* Operand error kind enumerators.
-
- AARCH64_OPDE_RECOVERABLE
- Less severe error found during the parsing, very possibly because that
- GAS has picked up a wrong instruction template for the parsing.
-
- AARCH64_OPDE_SYNTAX_ERROR
- General syntax error; it can be either a user error, or simply because
- that GAS is trying a wrong instruction template.
-
- AARCH64_OPDE_FATAL_SYNTAX_ERROR
- Definitely a user syntax error.
-
- AARCH64_OPDE_INVALID_VARIANT
- No syntax error, but the operands are not a valid combination, e.g.
- FMOV D0,S0
-
- AARCH64_OPDE_OUT_OF_RANGE
- Error about some immediate value out of a valid range.
-
- AARCH64_OPDE_UNALIGNED
- Error about some immediate value not properly aligned (i.e. not being a
- multiple times of a certain value).
-
- AARCH64_OPDE_REG_LIST
- Error about the register list operand having unexpected number of
- registers.
-
- AARCH64_OPDE_OTHER_ERROR
- Error of the highest severity and used for any severe issue that does not
- fall into any of the above categories.
-
- The enumerators are only interesting to GAS. They are declared here (in
- libopcodes) because that some errors are detected (and then notified to GAS)
- by libopcodes (rather than by GAS solely).
-
- The first three errors are only deteced by GAS while the
- AARCH64_OPDE_INVALID_VARIANT error can only be spotted by libopcodes as
- only libopcodes has the information about the valid variants of each
- instruction.
-
- The enumerators have an increasing severity. This is helpful when there are
- multiple instruction templates available for a given mnemonic name (e.g.
- FMOV); this mechanism will help choose the most suitable template from which
- the generated diagnostics can most closely describe the issues, if any. */
-
-enum aarch64_operand_error_kind
-{
- AARCH64_OPDE_NIL,
- AARCH64_OPDE_RECOVERABLE,
- AARCH64_OPDE_SYNTAX_ERROR,
- AARCH64_OPDE_FATAL_SYNTAX_ERROR,
- AARCH64_OPDE_INVALID_VARIANT,
- AARCH64_OPDE_OUT_OF_RANGE,
- AARCH64_OPDE_UNALIGNED,
- AARCH64_OPDE_REG_LIST,
- AARCH64_OPDE_OTHER_ERROR
-};
-
-/* N.B. GAS assumes that this structure work well with shallow copy. */
-struct aarch64_operand_error
-{
- enum aarch64_operand_error_kind kind;
- int index;
- const char *error;
- int data[3]; /* Some data for extra information. */
-};
-
-typedef struct aarch64_operand_error aarch64_operand_error;
-
-/* Encoding entrypoint. */
-
-extern int
-aarch64_opcode_encode (const aarch64_opcode *, const aarch64_inst *,
- aarch64_insn *, aarch64_opnd_qualifier_t *,
- aarch64_operand_error *);
-
-extern const aarch64_opcode *
-aarch64_replace_opcode (struct aarch64_inst *,
- const aarch64_opcode *);
-
-/* Given the opcode enumerator OP, return the pointer to the corresponding
- opcode entry. */
-
-extern const aarch64_opcode *
-aarch64_get_opcode (enum aarch64_op);
-
-/* Generate the string representation of an operand. */
-extern void
-aarch64_print_operand (char *, size_t, bfd_vma, const aarch64_opcode *,
- const aarch64_opnd_info *, int, int *, bfd_vma *);
-
-/* Miscellaneous interface. */
-
-extern int
-aarch64_operand_index (const enum aarch64_opnd *, enum aarch64_opnd);
-
-extern aarch64_opnd_qualifier_t
-aarch64_get_expected_qualifier (const aarch64_opnd_qualifier_seq_t *, int,
- const aarch64_opnd_qualifier_t, int);
-
-extern int
-aarch64_num_of_operands (const aarch64_opcode *);
-
-extern int
-aarch64_stack_pointer_p (const aarch64_opnd_info *);
-
-extern
-int aarch64_zero_register_p (const aarch64_opnd_info *);
-
-/* Given an operand qualifier, return the expected data element size
- of a qualified operand. */
-extern unsigned char
-aarch64_get_qualifier_esize (aarch64_opnd_qualifier_t);
-
-extern enum aarch64_operand_class
-aarch64_get_operand_class (enum aarch64_opnd);
-
-extern const char *
-aarch64_get_operand_name (enum aarch64_opnd);
-
-extern const char *
-aarch64_get_operand_desc (enum aarch64_opnd);
-
-#ifdef DEBUG_AARCH64
-extern int debug_dump;
-
-extern void
-aarch64_verbose (const char *, ...) __attribute__ ((format (printf, 1, 2)));
-
-#define DEBUG_TRACE(M, ...) \
- { \
- if (debug_dump) \
- aarch64_verbose ("%s: " M ".", __func__, ##__VA_ARGS__); \
- }
-
-#define DEBUG_TRACE_IF(C, M, ...) \
- { \
- if (debug_dump && (C)) \
- aarch64_verbose ("%s: " M ".", __func__, ##__VA_ARGS__); \
- }
-#else /* !DEBUG_AARCH64 */
-#define DEBUG_TRACE(M, ...) ;
-#define DEBUG_TRACE_IF(C, M, ...) ;
-#endif /* DEBUG_AARCH64 */
-
-#endif /* OPCODE_AARCH64_H */
diff --git a/include/opcode/alpha.h b/include/opcode/alpha.h
deleted file mode 100644
index 2c0d4f6cc..000000000
--- a/include/opcode/alpha.h
+++ /dev/null
@@ -1,238 +0,0 @@
-/* alpha.h -- Header file for Alpha opcode table
- Copyright 1996, 1999, 2001, 2003, 2010 Free Software Foundation, Inc.
- Contributed by Richard Henderson <rth@tamu.edu>,
- patterned after the PPC opcode table written by Ian Lance Taylor.
-
- This file is part of GDB, GAS, and the GNU binutils.
-
- GDB, GAS, and the GNU binutils are free software; you can redistribute
- them and/or modify them under the terms of the GNU General Public
- License as published by the Free Software Foundation; either version 3,
- or (at your option) any later version.
-
- GDB, GAS, and the GNU binutils are distributed in the hope that they
- 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 file; see the file COPYING3. If not, write to the Free
- Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef OPCODE_ALPHA_H
-#define OPCODE_ALPHA_H
-
-/* The opcode table is an array of struct alpha_opcode. */
-
-struct alpha_opcode
-{
- /* The opcode name. */
- const char *name;
-
- /* The opcode itself. Those bits which will be filled in with
- operands are zeroes. */
- unsigned opcode;
-
- /* The opcode mask. This is used by the disassembler. This is a
- mask containing ones indicating those bits which must match the
- opcode field, and zeroes indicating those bits which need not
- match (and are presumably filled in by operands). */
- unsigned mask;
-
- /* One bit flags for the opcode. These are primarily used to
- indicate specific processors and environments support the
- instructions. The defined values are listed below. */
- unsigned flags;
-
- /* An array of operand codes. Each code is an index into the
- operand table. They appear in the order which the operands must
- appear in assembly code, and are terminated by a zero. */
- unsigned char operands[4];
-};
-
-/* The table itself is sorted by major opcode number, and is otherwise
- in the order in which the disassembler should consider
- instructions. */
-extern const struct alpha_opcode alpha_opcodes[];
-extern const unsigned alpha_num_opcodes;
-
-/* Values defined for the flags field of a struct alpha_opcode. */
-
-/* CPU Availability */
-#define AXP_OPCODE_BASE 0x0001 /* Base architecture -- all cpus. */
-#define AXP_OPCODE_EV4 0x0002 /* EV4 specific PALcode insns. */
-#define AXP_OPCODE_EV5 0x0004 /* EV5 specific PALcode insns. */
-#define AXP_OPCODE_EV6 0x0008 /* EV6 specific PALcode insns. */
-#define AXP_OPCODE_BWX 0x0100 /* Byte/word extension (amask bit 0). */
-#define AXP_OPCODE_CIX 0x0200 /* "Count" extension (amask bit 1). */
-#define AXP_OPCODE_MAX 0x0400 /* Multimedia extension (amask bit 8). */
-
-#define AXP_OPCODE_NOPAL (~(AXP_OPCODE_EV4|AXP_OPCODE_EV5|AXP_OPCODE_EV6))
-
-/* A macro to extract the major opcode from an instruction. */
-#define AXP_OP(i) (((i) >> 26) & 0x3F)
-
-/* The total number of major opcodes. */
-#define AXP_NOPS 0x40
-
-
-/* The operands table is an array of struct alpha_operand. */
-
-struct alpha_operand
-{
- /* The number of bits in the operand. */
- unsigned int bits : 5;
-
- /* How far the operand is left shifted in the instruction. */
- unsigned int shift : 5;
-
- /* The default relocation type for this operand. */
- signed int default_reloc : 16;
-
- /* One bit syntax flags. */
- unsigned int flags : 16;
-
- /* Insertion function. This is used by the assembler. To insert an
- operand value into an instruction, check this field.
-
- If it is NULL, execute
- i |= (op & ((1 << o->bits) - 1)) << o->shift;
- (i is the instruction which we are filling in, o is a pointer to
- this structure, and op is the opcode value; this assumes twos
- complement arithmetic).
-
- If this field is not NULL, then simply call it with the
- instruction and the operand value. It will return the new value
- of the instruction. If the ERRMSG argument is not NULL, then if
- the operand value is illegal, *ERRMSG will be set to a warning
- string (the operand will be inserted in any case). If the
- operand value is legal, *ERRMSG will be unchanged (most operands
- can accept any value). */
- unsigned (*insert) (unsigned instruction, int op, const char **errmsg);
-
- /* Extraction function. This is used by the disassembler. To
- extract this operand type from an instruction, check this field.
-
- If it is NULL, compute
- op = ((i) >> o->shift) & ((1 << o->bits) - 1);
- if ((o->flags & AXP_OPERAND_SIGNED) != 0
- && (op & (1 << (o->bits - 1))) != 0)
- op -= 1 << o->bits;
- (i is the instruction, o is a pointer to this structure, and op
- is the result; this assumes twos complement arithmetic).
-
- If this field is not NULL, then simply call it with the
- instruction value. It will return the value of the operand. If
- the INVALID argument is not NULL, *INVALID will be set to
- non-zero if this operand type can not actually be extracted from
- this operand (i.e., the instruction does not match). If the
- operand is valid, *INVALID will not be changed. */
- int (*extract) (unsigned instruction, int *invalid);
-};
-
-/* Elements in the table are retrieved by indexing with values from
- the operands field of the alpha_opcodes table. */
-
-extern const struct alpha_operand alpha_operands[];
-extern const unsigned alpha_num_operands;
-
-/* Values defined for the flags field of a struct alpha_operand. */
-
-/* Mask for selecting the type for typecheck purposes */
-#define AXP_OPERAND_TYPECHECK_MASK \
- (AXP_OPERAND_PARENS | AXP_OPERAND_COMMA | AXP_OPERAND_IR | \
- AXP_OPERAND_FPR | AXP_OPERAND_RELATIVE | AXP_OPERAND_SIGNED | \
- AXP_OPERAND_UNSIGNED)
-
-/* This operand does not actually exist in the assembler input. This
- is used to support extended mnemonics, for which two operands fields
- are identical. The assembler should call the insert function with
- any op value. The disassembler should call the extract function,
- ignore the return value, and check the value placed in the invalid
- argument. */
-#define AXP_OPERAND_FAKE 01
-
-/* The operand should be wrapped in parentheses rather than separated
- from the previous by a comma. This is used for the load and store
- instructions which want their operands to look like "Ra,disp(Rb)". */
-#define AXP_OPERAND_PARENS 02
-
-/* Used in combination with PARENS, this supresses the supression of
- the comma. This is used for "jmp Ra,(Rb),hint". */
-#define AXP_OPERAND_COMMA 04
-
-/* This operand names an integer register. */
-#define AXP_OPERAND_IR 010
-
-/* This operand names a floating point register. */
-#define AXP_OPERAND_FPR 020
-
-/* This operand is a relative branch displacement. The disassembler
- prints these symbolically if possible. */
-#define AXP_OPERAND_RELATIVE 040
-
-/* This operand takes signed values. */
-#define AXP_OPERAND_SIGNED 0100
-
-/* This operand takes unsigned values. This exists primarily so that
- a flags value of 0 can be treated as end-of-arguments. */
-#define AXP_OPERAND_UNSIGNED 0200
-
-/* Supress overflow detection on this field. This is used for hints. */
-#define AXP_OPERAND_NOOVERFLOW 0400
-
-/* Mask for optional argument default value. */
-#define AXP_OPERAND_OPTIONAL_MASK 07000
-
-/* This operand defaults to zero. This is used for jump hints. */
-#define AXP_OPERAND_DEFAULT_ZERO 01000
-
-/* This operand should default to the first (real) operand and is used
- in conjunction with AXP_OPERAND_OPTIONAL. This allows
- "and $0,3,$0" to be written as "and $0,3", etc. I don't like
- it, but it's what DEC does. */
-#define AXP_OPERAND_DEFAULT_FIRST 02000
-
-/* Similarly, this operand should default to the second (real) operand.
- This allows "negl $0" instead of "negl $0,$0". */
-#define AXP_OPERAND_DEFAULT_SECOND 04000
-
-
-/* Register common names */
-
-#define AXP_REG_V0 0
-#define AXP_REG_T0 1
-#define AXP_REG_T1 2
-#define AXP_REG_T2 3
-#define AXP_REG_T3 4
-#define AXP_REG_T4 5
-#define AXP_REG_T5 6
-#define AXP_REG_T6 7
-#define AXP_REG_T7 8
-#define AXP_REG_S0 9
-#define AXP_REG_S1 10
-#define AXP_REG_S2 11
-#define AXP_REG_S3 12
-#define AXP_REG_S4 13
-#define AXP_REG_S5 14
-#define AXP_REG_FP 15
-#define AXP_REG_A0 16
-#define AXP_REG_A1 17
-#define AXP_REG_A2 18
-#define AXP_REG_A3 19
-#define AXP_REG_A4 20
-#define AXP_REG_A5 21
-#define AXP_REG_T8 22
-#define AXP_REG_T9 23
-#define AXP_REG_T10 24
-#define AXP_REG_T11 25
-#define AXP_REG_RA 26
-#define AXP_REG_PV 27
-#define AXP_REG_T12 27
-#define AXP_REG_AT 28
-#define AXP_REG_GP 29
-#define AXP_REG_SP 30
-#define AXP_REG_ZERO 31
-
-#endif /* OPCODE_ALPHA_H */
diff --git a/include/opcode/arc.h b/include/opcode/arc.h
deleted file mode 100644
index 695fec1ea..000000000
--- a/include/opcode/arc.h
+++ /dev/null
@@ -1,322 +0,0 @@
-/* Opcode table for the ARC.
- Copyright 1994, 1995, 1997, 2001, 2002, 2003, 2010
- Free Software Foundation, Inc.
- Contributed by Doug Evans (dje@cygnus.com).
-
- This file is part of GAS, the GNU Assembler, GDB, the GNU debugger, and
- the GNU Binutils.
-
- GAS/GDB 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 3, or (at your option)
- any later version.
-
- GAS/GDB is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GAS or GDB; see the file COPYING3. If not, write to
- the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-/* List of the various cpu types.
- The tables currently use bit masks to say whether the instruction or
- whatever is supported by a particular cpu. This lets us have one entry
- apply to several cpus.
-
- The `base' cpu must be 0. The cpu type is treated independently of
- endianness. The complete `mach' number includes endianness.
- These values are internal to opcodes/bfd/binutils/gas. */
-#define ARC_MACH_5 0
-#define ARC_MACH_6 1
-#define ARC_MACH_7 2
-#define ARC_MACH_8 4
-
-/* Additional cpu values can be inserted here and ARC_MACH_BIG moved down. */
-#define ARC_MACH_BIG 16
-
-/* Mask of number of bits necessary to record cpu type. */
-#define ARC_MACH_CPU_MASK (ARC_MACH_BIG - 1)
-
-/* Mask of number of bits necessary to record cpu type + endianness. */
-#define ARC_MACH_MASK ((ARC_MACH_BIG << 1) - 1)
-
-/* Type to denote an ARC instruction (at least a 32 bit unsigned int). */
-
-typedef unsigned int arc_insn;
-
-struct arc_opcode {
- char *syntax; /* syntax of insn */
- unsigned long mask, value; /* recognize insn if (op&mask) == value */
- int flags; /* various flag bits */
-
-/* Values for `flags'. */
-
-/* Return CPU number, given flag bits. */
-#define ARC_OPCODE_CPU(bits) ((bits) & ARC_MACH_CPU_MASK)
-
-/* Return MACH number, given flag bits. */
-#define ARC_OPCODE_MACH(bits) ((bits) & ARC_MACH_MASK)
-
-/* First opcode flag bit available after machine mask. */
-#define ARC_OPCODE_FLAG_START (ARC_MACH_MASK + 1)
-
-/* This insn is a conditional branch. */
-#define ARC_OPCODE_COND_BRANCH (ARC_OPCODE_FLAG_START)
-#define SYNTAX_3OP (ARC_OPCODE_COND_BRANCH << 1)
-#define SYNTAX_LENGTH (SYNTAX_3OP )
-#define SYNTAX_2OP (SYNTAX_3OP << 1)
-#define OP1_MUST_BE_IMM (SYNTAX_2OP << 1)
-#define OP1_IMM_IMPLIED (OP1_MUST_BE_IMM << 1)
-#define SYNTAX_VALID (OP1_IMM_IMPLIED << 1)
-
-#define I(x) (((x) & 31) << 27)
-#define A(x) (((x) & ARC_MASK_REG) << ARC_SHIFT_REGA)
-#define B(x) (((x) & ARC_MASK_REG) << ARC_SHIFT_REGB)
-#define C(x) (((x) & ARC_MASK_REG) << ARC_SHIFT_REGC)
-#define R(x,b,m) (((x) & (m)) << (b)) /* value X, mask M, at bit B */
-
-/* These values are used to optimize assembly and disassembly. Each insn
- is on a list of related insns (same first letter for assembly, same
- insn code for disassembly). */
-
- struct arc_opcode *next_asm; /* Next instr to try during assembly. */
- struct arc_opcode *next_dis; /* Next instr to try during disassembly. */
-
-/* Macros to create the hash values for the lists. */
-#define ARC_HASH_OPCODE(string) \
- ((string)[0] >= 'a' && (string)[0] <= 'z' ? (string)[0] - 'a' : 26)
-#define ARC_HASH_ICODE(insn) \
- ((unsigned int) (insn) >> 27)
-
- /* Macros to access `next_asm', `next_dis' so users needn't care about the
- underlying mechanism. */
-#define ARC_OPCODE_NEXT_ASM(op) ((op)->next_asm)
-#define ARC_OPCODE_NEXT_DIS(op) ((op)->next_dis)
-};
-
-/* this is an "insert at front" linked list per Metaware spec
- that new definitions override older ones. */
-extern struct arc_opcode *arc_ext_opcodes;
-
-struct arc_operand_value {
- char *name; /* eg: "eq" */
- short value; /* eg: 1 */
- unsigned char type; /* index into `arc_operands' */
- unsigned char flags; /* various flag bits */
-
-/* Values for `flags'. */
-
-/* Return CPU number, given flag bits. */
-#define ARC_OPVAL_CPU(bits) ((bits) & ARC_MACH_CPU_MASK)
-/* Return MACH number, given flag bits. */
-#define ARC_OPVAL_MACH(bits) ((bits) & ARC_MACH_MASK)
-};
-
-struct arc_ext_operand_value {
- struct arc_ext_operand_value *next;
- struct arc_operand_value operand;
-};
-
-extern struct arc_ext_operand_value *arc_ext_operands;
-
-struct arc_operand {
-/* One of the insn format chars. */
- unsigned char fmt;
-
-/* The number of bits in the operand (may be unused for a modifier). */
- unsigned char bits;
-
-/* How far the operand is left shifted in the instruction, or
- the modifier's flag bit (may be unused for a modifier. */
- unsigned char shift;
-
-/* Various flag bits. */
- int flags;
-
-/* Values for `flags'. */
-
-/* This operand is a suffix to the opcode. */
-#define ARC_OPERAND_SUFFIX 1
-
-/* This operand is a relative branch displacement. The disassembler
- prints these symbolically if possible. */
-#define ARC_OPERAND_RELATIVE_BRANCH 2
-
-/* This operand is an absolute branch address. The disassembler
- prints these symbolically if possible. */
-#define ARC_OPERAND_ABSOLUTE_BRANCH 4
-
-/* This operand is an address. The disassembler
- prints these symbolically if possible. */
-#define ARC_OPERAND_ADDRESS 8
-
-/* This operand is a long immediate value. */
-#define ARC_OPERAND_LIMM 0x10
-
-/* This operand takes signed values. */
-#define ARC_OPERAND_SIGNED 0x20
-
-/* This operand takes signed values, but also accepts a full positive
- range of values. That is, if bits is 16, it takes any value from
- -0x8000 to 0xffff. */
-#define ARC_OPERAND_SIGNOPT 0x40
-
-/* This operand should be regarded as a negative number for the
- purposes of overflow checking (i.e., the normal most negative
- number is disallowed and one more than the normal most positive
- number is allowed). This flag will only be set for a signed
- operand. */
-#define ARC_OPERAND_NEGATIVE 0x80
-
-/* This operand doesn't really exist. The program uses these operands
- in special ways. */
-#define ARC_OPERAND_FAKE 0x100
-
-/* separate flags operand for j and jl instructions */
-#define ARC_OPERAND_JUMPFLAGS 0x200
-
-/* allow warnings and errors to be issued after call to insert_xxxxxx */
-#define ARC_OPERAND_WARN 0x400
-#define ARC_OPERAND_ERROR 0x800
-
-/* this is a load operand */
-#define ARC_OPERAND_LOAD 0x8000
-
-/* this is a store operand */
-#define ARC_OPERAND_STORE 0x10000
-
-/* Modifier values. */
-/* A dot is required before a suffix. Eg: .le */
-#define ARC_MOD_DOT 0x1000
-
-/* A normal register is allowed (not used, but here for completeness). */
-#define ARC_MOD_REG 0x2000
-
-/* An auxiliary register name is expected. */
-#define ARC_MOD_AUXREG 0x4000
-
-/* Sum of all ARC_MOD_XXX bits. */
-#define ARC_MOD_BITS 0x7000
-
-/* Non-zero if the operand type is really a modifier. */
-#define ARC_MOD_P(X) ((X) & ARC_MOD_BITS)
-
-/* enforce read/write only register restrictions */
-#define ARC_REGISTER_READONLY 0x01
-#define ARC_REGISTER_WRITEONLY 0x02
-#define ARC_REGISTER_NOSHORT_CUT 0x04
-
-/* Insertion function. This is used by the assembler. To insert an
- operand value into an instruction, check this field.
-
- If it is NULL, execute
- i |= (p & ((1 << o->bits) - 1)) << o->shift;
- (I is the instruction which we are filling in, O is a pointer to
- this structure, and OP is the opcode value; this assumes twos
- complement arithmetic).
-
- If this field is not NULL, then simply call it with the
- instruction and the operand value. It will return the new value
- of the instruction. If the ERRMSG argument is not NULL, then if
- the operand value is illegal, *ERRMSG will be set to a warning
- string (the operand will be inserted in any case). If the
- operand value is legal, *ERRMSG will be unchanged.
-
- REG is non-NULL when inserting a register value. */
-
- arc_insn (*insert)
- (arc_insn insn, const struct arc_operand *operand, int mods,
- const struct arc_operand_value *reg, long value, const char **errmsg);
-
-/* Extraction function. This is used by the disassembler. To
- extract this operand type from an instruction, check this field.
-
- If it is NULL, compute
- op = ((i) >> o->shift) & ((1 << o->bits) - 1);
- if ((o->flags & ARC_OPERAND_SIGNED) != 0
- && (op & (1 << (o->bits - 1))) != 0)
- op -= 1 << o->bits;
- (I is the instruction, O is a pointer to this structure, and OP
- is the result; this assumes twos complement arithmetic).
-
- If this field is not NULL, then simply call it with the
- instruction value. It will return the value of the operand. If
- the INVALID argument is not NULL, *INVALID will be set to
- non-zero if this operand type can not actually be extracted from
- this operand (i.e., the instruction does not match). If the
- operand is valid, *INVALID will not be changed.
-
- INSN is a pointer to an array of two `arc_insn's. The first element is
- the insn, the second is the limm if present.
-
- Operands that have a printable form like registers and suffixes have
- their struct arc_operand_value pointer stored in OPVAL. */
-
- long (*extract)
- (arc_insn *insn, const struct arc_operand *operand, int mods,
- const struct arc_operand_value **opval, int *invalid);
-};
-
-/* Bits that say what version of cpu we have. These should be passed to
- arc_init_opcode_tables. At present, all there is is the cpu type. */
-
-/* CPU number, given value passed to `arc_init_opcode_tables'. */
-#define ARC_HAVE_CPU(bits) ((bits) & ARC_MACH_CPU_MASK)
-/* MACH number, given value passed to `arc_init_opcode_tables'. */
-#define ARC_HAVE_MACH(bits) ((bits) & ARC_MACH_MASK)
-
-/* Special register values: */
-#define ARC_REG_SHIMM_UPDATE 61
-#define ARC_REG_SHIMM 63
-#define ARC_REG_LIMM 62
-
-/* Non-zero if REG is a constant marker. */
-#define ARC_REG_CONSTANT_P(REG) ((REG) >= 61)
-
-/* Positions and masks of various fields: */
-#define ARC_SHIFT_REGA 21
-#define ARC_SHIFT_REGB 15
-#define ARC_SHIFT_REGC 9
-#define ARC_MASK_REG 63
-
-/* Delay slot types. */
-#define ARC_DELAY_NONE 0 /* no delay slot */
-#define ARC_DELAY_NORMAL 1 /* delay slot in both cases */
-#define ARC_DELAY_JUMP 2 /* delay slot only if branch taken */
-
-/* Non-zero if X will fit in a signed 9 bit field. */
-#define ARC_SHIMM_CONST_P(x) ((long) (x) >= -256 && (long) (x) <= 255)
-
-extern const struct arc_operand arc_operands[];
-extern const int arc_operand_count;
-extern struct arc_opcode arc_opcodes[];
-extern const int arc_opcodes_count;
-extern const struct arc_operand_value arc_suffixes[];
-extern const int arc_suffixes_count;
-extern const struct arc_operand_value arc_reg_names[];
-extern const int arc_reg_names_count;
-extern unsigned char arc_operand_map[];
-
-/* Utility fns in arc-opc.c. */
-int arc_get_opcode_mach (int, int);
-
-/* `arc_opcode_init_tables' must be called before `arc_xxx_supported'. */
-void arc_opcode_init_tables (int);
-void arc_opcode_init_insert (void);
-void arc_opcode_init_extract (void);
-const struct arc_opcode *arc_opcode_lookup_asm (const char *);
-const struct arc_opcode *arc_opcode_lookup_dis (unsigned int);
-int arc_opcode_limm_p (long *);
-const struct arc_operand_value *arc_opcode_lookup_suffix
- (const struct arc_operand *type, int value);
-int arc_opcode_supported (const struct arc_opcode *);
-int arc_opval_supported (const struct arc_operand_value *);
-int arc_limm_fixup_adjust (arc_insn);
-int arc_insn_is_j (arc_insn);
-int arc_insn_not_jl (arc_insn);
-int arc_operand_type (int);
-struct arc_operand_value *get_ext_suffix (char *);
-int arc_get_noshortcut_flag (void);
diff --git a/include/opcode/arm.h b/include/opcode/arm.h
deleted file mode 100644
index 851fd3c85..000000000
--- a/include/opcode/arm.h
+++ /dev/null
@@ -1,289 +0,0 @@
-/* ARM assembler/disassembler support.
- Copyright 2004, 2010, 2011 Free Software Foundation, Inc.
-
- This file is part of GDB and GAS.
-
- GDB and GAS are 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 3, or (at
- your option) any later version.
-
- GDB and GAS are 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 GDB or GAS; see the file COPYING3. If not, write to the
- Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-/* The following bitmasks control CPU extensions: */
-#define ARM_EXT_V1 0x00000001 /* All processors (core set). */
-#define ARM_EXT_V2 0x00000002 /* Multiply instructions. */
-#define ARM_EXT_V2S 0x00000004 /* SWP instructions. */
-#define ARM_EXT_V3 0x00000008 /* MSR MRS. */
-#define ARM_EXT_V3M 0x00000010 /* Allow long multiplies. */
-#define ARM_EXT_V4 0x00000020 /* Allow half word loads. */
-#define ARM_EXT_V4T 0x00000040 /* Thumb. */
-#define ARM_EXT_V5 0x00000080 /* Allow CLZ, etc. */
-#define ARM_EXT_V5T 0x00000100 /* Improved interworking. */
-#define ARM_EXT_V5ExP 0x00000200 /* DSP core set. */
-#define ARM_EXT_V5E 0x00000400 /* DSP Double transfers. */
-#define ARM_EXT_V5J 0x00000800 /* Jazelle extension. */
-#define ARM_EXT_V6 0x00001000 /* ARM V6. */
-#define ARM_EXT_V6K 0x00002000 /* ARM V6K. */
-/* 0x00004000 Was ARM V6Z. */
-#define ARM_EXT_V8 0x00004000 /* is now ARMv8. */
-#define ARM_EXT_V6T2 0x00008000 /* Thumb-2. */
-#define ARM_EXT_DIV 0x00010000 /* Integer division. */
-/* The 'M' in Arm V7M stands for Microcontroller.
- On earlier architecture variants it stands for Multiply. */
-#define ARM_EXT_V5E_NOTM 0x00020000 /* Arm V5E but not Arm V7M. */
-#define ARM_EXT_V6_NOTM 0x00040000 /* Arm V6 but not Arm V7M. */
-#define ARM_EXT_V7 0x00080000 /* Arm V7. */
-#define ARM_EXT_V7A 0x00100000 /* Arm V7A. */
-#define ARM_EXT_V7R 0x00200000 /* Arm V7R. */
-#define ARM_EXT_V7M 0x00400000 /* Arm V7M. */
-#define ARM_EXT_V6M 0x00800000 /* ARM V6M. */
-#define ARM_EXT_BARRIER 0x01000000 /* DSB/DMB/ISB. */
-#define ARM_EXT_THUMB_MSR 0x02000000 /* Thumb MSR/MRS. */
-#define ARM_EXT_V6_DSP 0x04000000 /* ARM v6 (DSP-related),
- not in v7-M. */
-#define ARM_EXT_MP 0x08000000 /* Multiprocessing Extensions. */
-#define ARM_EXT_SEC 0x10000000 /* Security extensions. */
-#define ARM_EXT_OS 0x20000000 /* OS Extensions. */
-#define ARM_EXT_ADIV 0x40000000 /* Integer divide extensions in ARM
- state. */
-#define ARM_EXT_VIRT 0x80000000 /* Virtualization extensions. */
-
-/* Co-processor space extensions. */
-#define ARM_CEXT_XSCALE 0x00000001 /* Allow MIA etc. */
-#define ARM_CEXT_MAVERICK 0x00000002 /* Use Cirrus/DSP coprocessor. */
-#define ARM_CEXT_IWMMXT 0x00000004 /* Intel Wireless MMX technology coprocessor. */
-#define ARM_CEXT_IWMMXT2 0x00000008 /* Intel Wireless MMX technology coprocessor version 2. */
-
-#define FPU_ENDIAN_PURE 0x80000000 /* Pure-endian doubles. */
-#define FPU_ENDIAN_BIG 0 /* Double words-big-endian. */
-#define FPU_FPA_EXT_V1 0x40000000 /* Base FPA instruction set. */
-#define FPU_FPA_EXT_V2 0x20000000 /* LFM/SFM. */
-#define FPU_MAVERICK 0x10000000 /* Cirrus Maverick. */
-#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_V3xD 0x01000000 /* VFPv3 single-precision. */
-#define FPU_VFP_EXT_V3 0x00800000 /* VFPv3 double-precision. */
-#define FPU_NEON_EXT_V1 0x00400000 /* Neon (SIMD) insns. */
-#define FPU_VFP_EXT_D32 0x00200000 /* Registers D16-D31. */
-#define FPU_VFP_EXT_FP16 0x00100000 /* Half-precision extensions. */
-#define FPU_NEON_EXT_FMA 0x00080000 /* Neon fused multiply-add */
-#define FPU_VFP_EXT_FMA 0x00040000 /* VFP fused multiply-add */
-#define FPU_VFP_EXT_ARMV8 0x00020000 /* FP for ARMv8. */
-#define FPU_NEON_EXT_ARMV8 0x00010000 /* Neon for ARMv8. */
-#define FPU_CRYPTO_EXT_ARMV8 0x00008000 /* Crypto for ARMv8. */
-#define CRC_EXT_ARMV8 0x00004000 /* CRC32 for ARMv8. */
-
-/* Architectures are the sum of the base and extensions. The ARM ARM (rev E)
- defines the following: ARMv3, ARMv3M, ARMv4xM, ARMv4, ARMv4TxM, ARMv4T,
- ARMv5xM, ARMv5, ARMv5TxM, ARMv5T, ARMv5TExP, ARMv5TE. To these we add
- three more to cover cores prior to ARM6. Finally, there are cores which
- implement further extensions in the co-processor space. */
-#define ARM_AEXT_V1 ARM_EXT_V1
-#define ARM_AEXT_V2 (ARM_AEXT_V1 | ARM_EXT_V2)
-#define ARM_AEXT_V2S (ARM_AEXT_V2 | ARM_EXT_V2S)
-#define ARM_AEXT_V3 (ARM_AEXT_V2S | ARM_EXT_V3)
-#define ARM_AEXT_V3M (ARM_AEXT_V3 | ARM_EXT_V3M)
-#define ARM_AEXT_V4xM (ARM_AEXT_V3 | ARM_EXT_V4)
-#define ARM_AEXT_V4 (ARM_AEXT_V3M | ARM_EXT_V4)
-#define ARM_AEXT_V4TxM (ARM_AEXT_V4xM | ARM_EXT_V4T)
-#define ARM_AEXT_V4T (ARM_AEXT_V4 | ARM_EXT_V4T)
-#define ARM_AEXT_V5xM (ARM_AEXT_V4xM | ARM_EXT_V5)
-#define ARM_AEXT_V5 (ARM_AEXT_V4 | ARM_EXT_V5)
-#define ARM_AEXT_V5TxM (ARM_AEXT_V5xM | ARM_EXT_V4T | ARM_EXT_V5T)
-#define ARM_AEXT_V5T (ARM_AEXT_V5 | ARM_EXT_V4T | ARM_EXT_V5T)
-#define ARM_AEXT_V5TExP (ARM_AEXT_V5T | ARM_EXT_V5ExP)
-#define ARM_AEXT_V5TE (ARM_AEXT_V5TExP | ARM_EXT_V5E)
-#define ARM_AEXT_V5TEJ (ARM_AEXT_V5TE | ARM_EXT_V5J)
-#define ARM_AEXT_V6 (ARM_AEXT_V5TEJ | ARM_EXT_V6)
-#define ARM_AEXT_V6K (ARM_AEXT_V6 | ARM_EXT_V6K)
-#define ARM_AEXT_V6Z (ARM_AEXT_V6K | ARM_EXT_SEC)
-#define ARM_AEXT_V6ZK (ARM_AEXT_V6K | ARM_EXT_SEC)
-#define ARM_AEXT_V6T2 (ARM_AEXT_V6 \
- | ARM_EXT_V6T2 | ARM_EXT_V6_NOTM | ARM_EXT_THUMB_MSR \
- | ARM_EXT_V6_DSP )
-#define ARM_AEXT_V6KT2 (ARM_AEXT_V6T2 | ARM_EXT_V6K)
-#define ARM_AEXT_V6ZT2 (ARM_AEXT_V6T2 | ARM_EXT_SEC)
-#define ARM_AEXT_V6ZKT2 (ARM_AEXT_V6T2 | ARM_EXT_V6K | ARM_EXT_SEC)
-#define ARM_AEXT_V7_ARM (ARM_AEXT_V6KT2 | ARM_EXT_V7 | ARM_EXT_BARRIER)
-#define ARM_AEXT_V7A (ARM_AEXT_V7_ARM | ARM_EXT_V7A)
-#define ARM_AEXT_V7R (ARM_AEXT_V7_ARM | ARM_EXT_V7R | ARM_EXT_DIV)
-#define ARM_AEXT_NOTM \
- (ARM_AEXT_V4 | ARM_EXT_V5ExP | ARM_EXT_V5J | ARM_EXT_V6_NOTM \
- | ARM_EXT_V6_DSP )
-#define ARM_AEXT_V6M_ONLY \
- ((ARM_EXT_BARRIER | ARM_EXT_V6M | ARM_EXT_THUMB_MSR) & ~(ARM_AEXT_NOTM))
-#define ARM_AEXT_V6M \
- ((ARM_AEXT_V6K | ARM_AEXT_V6M_ONLY) & ~(ARM_AEXT_NOTM))
-#define ARM_AEXT_V6SM (ARM_AEXT_V6M | ARM_EXT_OS)
-#define ARM_AEXT_V7M \
- ((ARM_AEXT_V7_ARM | ARM_EXT_V6M | ARM_EXT_V7M | ARM_EXT_DIV) \
- & ~(ARM_AEXT_NOTM))
-#define ARM_AEXT_V7 (ARM_AEXT_V7A & ARM_AEXT_V7R & ARM_AEXT_V7M)
-#define ARM_AEXT_V7EM \
- (ARM_AEXT_V7M | ARM_EXT_V5ExP | ARM_EXT_V6_DSP)
-#define ARM_AEXT_V8A \
- (ARM_AEXT_V7A | ARM_EXT_MP | ARM_EXT_SEC | ARM_EXT_DIV | ARM_EXT_ADIV \
- | ARM_EXT_VIRT | ARM_EXT_V8)
-
-/* Processors with specific extensions in the co-processor space. */
-#define ARM_ARCH_XSCALE ARM_FEATURE (ARM_AEXT_V5TE, ARM_CEXT_XSCALE)
-#define ARM_ARCH_IWMMXT \
- ARM_FEATURE (ARM_AEXT_V5TE, ARM_CEXT_XSCALE | ARM_CEXT_IWMMXT)
-#define ARM_ARCH_IWMMXT2 \
- ARM_FEATURE (ARM_AEXT_V5TE, ARM_CEXT_XSCALE | ARM_CEXT_IWMMXT | ARM_CEXT_IWMMXT2)
-
-#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_V3D16 (FPU_VFP_V2 | FPU_VFP_EXT_V3xD | FPU_VFP_EXT_V3)
-#define FPU_VFP_V3 (FPU_VFP_V3D16 | FPU_VFP_EXT_D32)
-#define FPU_VFP_V3xD (FPU_VFP_V1xD | FPU_VFP_EXT_V2 | FPU_VFP_EXT_V3xD)
-#define FPU_VFP_V4D16 (FPU_VFP_V3D16 | FPU_VFP_EXT_FP16 | FPU_VFP_EXT_FMA)
-#define FPU_VFP_V4 (FPU_VFP_V3 | FPU_VFP_EXT_FP16 | FPU_VFP_EXT_FMA)
-#define FPU_VFP_V4_SP_D16 (FPU_VFP_V3xD | FPU_VFP_EXT_FP16 | FPU_VFP_EXT_FMA)
-#define FPU_VFP_ARMV8 (FPU_VFP_V4 | FPU_VFP_EXT_ARMV8)
-#define FPU_NEON_ARMV8 (FPU_NEON_EXT_V1 | FPU_NEON_EXT_FMA | FPU_NEON_EXT_ARMV8)
-#define FPU_CRYPTO_ARMV8 (FPU_CRYPTO_EXT_ARMV8)
-#define FPU_VFP_HARD (FPU_VFP_EXT_V1xD | FPU_VFP_EXT_V1 | FPU_VFP_EXT_V2 \
- | FPU_VFP_EXT_V3xD | FPU_VFP_EXT_FMA | FPU_NEON_EXT_FMA \
- | FPU_VFP_EXT_V3 | FPU_NEON_EXT_V1 | FPU_VFP_EXT_D32)
-#define FPU_FPA (FPU_FPA_EXT_V1 | FPU_FPA_EXT_V2)
-
-/* Deprecated. */
-#define FPU_ARCH_VFP ARM_FEATURE (0, FPU_ENDIAN_PURE)
-
-#define FPU_ARCH_FPE ARM_FEATURE (0, FPU_FPA_EXT_V1)
-#define FPU_ARCH_FPA ARM_FEATURE (0, FPU_FPA)
-
-#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_V3D16 ARM_FEATURE (0, FPU_VFP_V3D16)
-#define FPU_ARCH_VFP_V3D16_FP16 \
- ARM_FEATURE (0, FPU_VFP_V3D16 | FPU_VFP_EXT_FP16)
-#define FPU_ARCH_VFP_V3 ARM_FEATURE (0, FPU_VFP_V3)
-#define FPU_ARCH_VFP_V3_FP16 ARM_FEATURE (0, FPU_VFP_V3 | FPU_VFP_EXT_FP16)
-#define FPU_ARCH_VFP_V3xD ARM_FEATURE (0, FPU_VFP_V3xD)
-#define FPU_ARCH_VFP_V3xD_FP16 ARM_FEATURE (0, FPU_VFP_V3xD | FPU_VFP_EXT_FP16)
-#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_NEON_FP16 \
- ARM_FEATURE (0, FPU_VFP_V3 | FPU_NEON_EXT_V1 | FPU_VFP_EXT_FP16)
-#define FPU_ARCH_VFP_HARD ARM_FEATURE (0, FPU_VFP_HARD)
-#define FPU_ARCH_VFP_V4 ARM_FEATURE(0, FPU_VFP_V4)
-#define FPU_ARCH_VFP_V4D16 ARM_FEATURE(0, FPU_VFP_V4D16)
-#define FPU_ARCH_VFP_V4_SP_D16 ARM_FEATURE(0, FPU_VFP_V4_SP_D16)
-#define FPU_ARCH_NEON_VFP_V4 \
- ARM_FEATURE(0, FPU_VFP_V4 | FPU_NEON_EXT_V1 | FPU_NEON_EXT_FMA)
-#define FPU_ARCH_VFP_ARMV8 ARM_FEATURE(0, FPU_VFP_ARMV8)
-#define FPU_ARCH_NEON_VFP_ARMV8 ARM_FEATURE(0, FPU_NEON_ARMV8 | FPU_VFP_ARMV8)
-#define FPU_ARCH_CRYPTO_NEON_VFP_ARMV8 \
- ARM_FEATURE(0, FPU_CRYPTO_ARMV8 | FPU_NEON_ARMV8 | FPU_VFP_ARMV8)
-#define ARCH_CRC_ARMV8 ARM_FEATURE(0, CRC_EXT_ARMV8)
-
-#define FPU_ARCH_ENDIAN_PURE ARM_FEATURE (0, FPU_ENDIAN_PURE)
-
-#define FPU_ARCH_MAVERICK ARM_FEATURE (0, FPU_MAVERICK)
-
-#define ARM_ARCH_V1 ARM_FEATURE (ARM_AEXT_V1, 0)
-#define ARM_ARCH_V2 ARM_FEATURE (ARM_AEXT_V2, 0)
-#define ARM_ARCH_V2S ARM_FEATURE (ARM_AEXT_V2S, 0)
-#define ARM_ARCH_V3 ARM_FEATURE (ARM_AEXT_V3, 0)
-#define ARM_ARCH_V3M ARM_FEATURE (ARM_AEXT_V3M, 0)
-#define ARM_ARCH_V4xM ARM_FEATURE (ARM_AEXT_V4xM, 0)
-#define ARM_ARCH_V4 ARM_FEATURE (ARM_AEXT_V4, 0)
-#define ARM_ARCH_V4TxM ARM_FEATURE (ARM_AEXT_V4TxM, 0)
-#define ARM_ARCH_V4T ARM_FEATURE (ARM_AEXT_V4T, 0)
-#define ARM_ARCH_V5xM ARM_FEATURE (ARM_AEXT_V5xM, 0)
-#define ARM_ARCH_V5 ARM_FEATURE (ARM_AEXT_V5, 0)
-#define ARM_ARCH_V5TxM ARM_FEATURE (ARM_AEXT_V5TxM, 0)
-#define ARM_ARCH_V5T ARM_FEATURE (ARM_AEXT_V5T, 0)
-#define ARM_ARCH_V5TExP ARM_FEATURE (ARM_AEXT_V5TExP, 0)
-#define ARM_ARCH_V5TE ARM_FEATURE (ARM_AEXT_V5TE, 0)
-#define ARM_ARCH_V5TEJ ARM_FEATURE (ARM_AEXT_V5TEJ, 0)
-#define ARM_ARCH_V6 ARM_FEATURE (ARM_AEXT_V6, 0)
-#define ARM_ARCH_V6K ARM_FEATURE (ARM_AEXT_V6K, 0)
-#define ARM_ARCH_V6Z ARM_FEATURE (ARM_AEXT_V6Z, 0)
-#define ARM_ARCH_V6ZK ARM_FEATURE (ARM_AEXT_V6ZK, 0)
-#define ARM_ARCH_V6T2 ARM_FEATURE (ARM_AEXT_V6T2, 0)
-#define ARM_ARCH_V6KT2 ARM_FEATURE (ARM_AEXT_V6KT2, 0)
-#define ARM_ARCH_V6ZT2 ARM_FEATURE (ARM_AEXT_V6ZT2, 0)
-#define ARM_ARCH_V6ZKT2 ARM_FEATURE (ARM_AEXT_V6ZKT2, 0)
-#define ARM_ARCH_V6M ARM_FEATURE (ARM_AEXT_V6M, 0)
-#define ARM_ARCH_V6SM ARM_FEATURE (ARM_AEXT_V6SM, 0)
-#define ARM_ARCH_V7 ARM_FEATURE (ARM_AEXT_V7, 0)
-#define ARM_ARCH_V7A ARM_FEATURE (ARM_AEXT_V7A, 0)
-#define ARM_ARCH_V7R ARM_FEATURE (ARM_AEXT_V7R, 0)
-#define ARM_ARCH_V7M ARM_FEATURE (ARM_AEXT_V7M, 0)
-#define ARM_ARCH_V7EM ARM_FEATURE (ARM_AEXT_V7EM, 0)
-#define ARM_ARCH_V8A ARM_FEATURE (ARM_AEXT_V8A, 0)
-
-/* Some useful combinations: */
-#define ARM_ARCH_NONE ARM_FEATURE (0, 0)
-#define FPU_NONE ARM_FEATURE (0, 0)
-#define ARM_ANY ARM_FEATURE (-1, 0) /* Any basic core. */
-#define FPU_ANY_HARD ARM_FEATURE (0, FPU_FPA | FPU_VFP_HARD | FPU_MAVERICK)
-#define ARM_ARCH_THUMB2 ARM_FEATURE (ARM_EXT_V6T2 | ARM_EXT_V7 | ARM_EXT_V7A | ARM_EXT_V7R | ARM_EXT_V7M | ARM_EXT_DIV, 0)
-/* v7-a+sec. */
-#define ARM_ARCH_V7A_SEC ARM_FEATURE (ARM_AEXT_V7A | ARM_EXT_SEC, 0)
-/* v7-a+mp+sec. */
-#define ARM_ARCH_V7A_MP_SEC \
- ARM_FEATURE (ARM_AEXT_V7A | ARM_EXT_MP | ARM_EXT_SEC, \
- 0)
-/* v7-a+idiv+mp+sec+virt. */
-#define ARM_ARCH_V7A_IDIV_MP_SEC_VIRT \
- ARM_FEATURE (ARM_AEXT_V7A | ARM_EXT_MP | ARM_EXT_SEC \
- | ARM_EXT_DIV | ARM_EXT_ADIV \
- | ARM_EXT_VIRT, 0)
-/* v7-r+idiv. */
-#define ARM_ARCH_V7R_IDIV ARM_FEATURE (ARM_AEXT_V7R | ARM_EXT_ADIV, 0)
-/* Features that are present in v6M and v6S-M but not other v6 cores. */
-#define ARM_ARCH_V6M_ONLY ARM_FEATURE (ARM_AEXT_V6M_ONLY, 0)
-/* v8-a+fp. */
-#define ARM_ARCH_V8A_FP ARM_FEATURE (ARM_AEXT_V8A, FPU_ARCH_VFP_ARMV8)
-/* v8-a+simd (implies fp). */
-#define ARM_ARCH_V8A_SIMD ARM_FEATURE (ARM_AEXT_V8A, \
- FPU_ARCH_NEON_VFP_ARMV8)
-/* v8-a+crypto (implies simd+fp). */
-#define ARM_ARCH_V8A_CRYPTOV1 ARM_FEATURE (ARM_AEXT_V8A, \
- FPU_ARCH_CRYPTO_NEON_VFP_ARMV8)
-
-/* There are too many feature bits to fit in a single word, so use a
- structure. For simplicity we put all core features in one word and
- everything else in the other. */
-typedef struct
-{
- unsigned long core;
- unsigned long coproc;
-} arm_feature_set;
-
-#define ARM_CPU_HAS_FEATURE(CPU,FEAT) \
- (((CPU).core & (FEAT).core) != 0 || ((CPU).coproc & (FEAT).coproc) != 0)
-
-#define ARM_CPU_IS_ANY(CPU) \
- ((CPU).core == ((arm_feature_set)ARM_ANY).core)
-
-#define ARM_MERGE_FEATURE_SETS(TARG,F1,F2) \
- do { \
- (TARG).core = (F1).core | (F2).core; \
- (TARG).coproc = (F1).coproc | (F2).coproc; \
- } while (0)
-
-#define ARM_CLEAR_FEATURE(TARG,F1,F2) \
- do { \
- (TARG).core = (F1).core &~ (F2).core; \
- (TARG).coproc = (F1).coproc &~ (F2).coproc; \
- } while (0)
-
-#define ARM_FEATURE(core, coproc) {(core), (coproc)}
diff --git a/include/opcode/avr.h b/include/opcode/avr.h
deleted file mode 100644
index f1d73ad92..000000000
--- a/include/opcode/avr.h
+++ /dev/null
@@ -1,300 +0,0 @@
-/* Opcode table for the Atmel AVR micro controllers.
-
- Copyright 2000, 2001, 2004, 2006, 2008, 2010, 2012 Free Software Foundation, Inc.
- Contributed by Denis Chertykov <denisc@overta.ru>
-
- 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 3, 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#define AVR_ISA_1200 0x0001 /* In the beginning there was ... */
-#define AVR_ISA_LPM 0x0002 /* device has LPM */
-#define AVR_ISA_LPMX 0x0004 /* device has LPM Rd,Z[+] */
-#define AVR_ISA_SRAM 0x0008 /* device has SRAM (LD, ST, PUSH, POP, ...) */
-#define AVR_ISA_MEGA 0x0020 /* device has >8K program memory (JMP and CALL
- supported, no 8K wrap on RJMP and RCALL) */
-#define AVR_ISA_MUL 0x0040 /* device has new core (MUL, FMUL, ...) */
-#define AVR_ISA_ELPM 0x0080 /* device has >64K program memory (ELPM) */
-#define AVR_ISA_ELPMX 0x0100 /* device has ELPM Rd,Z[+] */
-#define AVR_ISA_SPM 0x0200 /* device can program itself */
-#define AVR_ISA_BRK 0x0400 /* device has BREAK (on-chip debug) */
-#define AVR_ISA_EIND 0x0800 /* device has >128K program memory (none yet) */
-#define AVR_ISA_MOVW 0x1000 /* device has MOVW */
-#define AVR_ISA_SPMX 0x2000 /* device has SPM Z[+] */
-#define AVR_ISA_DES 0x4000 /* device has DES */
-#define AVR_ISA_RMW 0x8000 /* device has RMW instructions XCH,LAC,LAS,LAT */
-
-#define AVR_ISA_TINY1 (AVR_ISA_1200 | AVR_ISA_LPM)
-#define AVR_ISA_2xxx (AVR_ISA_TINY1 | AVR_ISA_SRAM)
-/* For the attiny26 which is missing LPM Rd,Z+. */
-#define AVR_ISA_2xxe (AVR_ISA_2xxx | AVR_ISA_LPMX)
-#define AVR_ISA_RF401 (AVR_ISA_2xxx | AVR_ISA_MOVW | AVR_ISA_LPMX)
-#define AVR_ISA_TINY2 (AVR_ISA_2xxx | AVR_ISA_MOVW | AVR_ISA_LPMX | \
- AVR_ISA_SPM | AVR_ISA_BRK)
-#define AVR_ISA_M603 (AVR_ISA_2xxx | AVR_ISA_MEGA)
-#define AVR_ISA_M103 (AVR_ISA_M603 | AVR_ISA_ELPM)
-#define AVR_ISA_M8 (AVR_ISA_2xxx | AVR_ISA_MUL | AVR_ISA_MOVW | \
- AVR_ISA_LPMX | AVR_ISA_SPM)
-#define AVR_ISA_PWMx (AVR_ISA_M8 | AVR_ISA_BRK)
-#define AVR_ISA_M161 (AVR_ISA_M603 | AVR_ISA_MUL | AVR_ISA_MOVW | \
- AVR_ISA_LPMX | AVR_ISA_SPM)
-#define AVR_ISA_94K (AVR_ISA_M603 | AVR_ISA_MUL | AVR_ISA_MOVW | AVR_ISA_LPMX)
-#define AVR_ISA_M323 (AVR_ISA_M161 | AVR_ISA_BRK)
-#define AVR_ISA_M128 (AVR_ISA_M323 | AVR_ISA_ELPM | AVR_ISA_ELPMX)
-#define AVR_ISA_M256 (AVR_ISA_M128 | AVR_ISA_EIND)
-#define AVR_ISA_XMEGA (AVR_ISA_M256 | AVR_ISA_SPMX | AVR_ISA_DES)
-#define AVR_ISA_XMEGAU (AVR_ISA_XMEGA | AVR_ISA_RMW)
-
-#define AVR_ISA_AVR1 AVR_ISA_TINY1
-#define AVR_ISA_AVR2 AVR_ISA_2xxx
-#define AVR_ISA_AVR25 AVR_ISA_TINY2
-#define AVR_ISA_AVR3 AVR_ISA_M603
-#define AVR_ISA_AVR31 AVR_ISA_M103
-#define AVR_ISA_AVR35 (AVR_ISA_AVR3 | AVR_ISA_MOVW | \
- AVR_ISA_LPMX | AVR_ISA_SPM | AVR_ISA_BRK)
-#define AVR_ISA_AVR3_ALL (AVR_ISA_AVR3 | AVR_ISA_AVR31 | AVR_ISA_AVR35)
-#define AVR_ISA_AVR4 AVR_ISA_PWMx
-#define AVR_ISA_AVR5 AVR_ISA_M323
-#define AVR_ISA_AVR51 AVR_ISA_M128
-#define AVR_ISA_AVR6 (AVR_ISA_1200 | AVR_ISA_LPM | AVR_ISA_LPMX | \
- AVR_ISA_SRAM | AVR_ISA_MEGA | AVR_ISA_MUL | \
- AVR_ISA_ELPM | AVR_ISA_ELPMX | AVR_ISA_SPM | \
- AVR_ISA_BRK | AVR_ISA_EIND | AVR_ISA_MOVW)
-
-#define REGISTER_P(x) ((x) == 'r' \
- || (x) == 'd' \
- || (x) == 'w' \
- || (x) == 'a' \
- || (x) == 'v')
-
-/* Undefined combination of operands - does the register
- operand overlap with pre-decremented or post-incremented
- pointer register (like ld r31,Z+)? */
-#define AVR_UNDEF_P(x) (((x) & 0xFFED) == 0x91E5 || \
- ((x) & 0xFDEF) == 0x91AD || ((x) & 0xFDEF) == 0x91AE || \
- ((x) & 0xFDEF) == 0x91C9 || ((x) & 0xFDEF) == 0x91CA || \
- ((x) & 0xFDEF) == 0x91E1 || ((x) & 0xFDEF) == 0x91E2)
-
-/* Is this a skip instruction {cpse,sbic,sbis,sbrc,sbrs}? */
-#define AVR_SKIP_P(x) (((x) & 0xFC00) == 0x1000 || \
- ((x) & 0xFD00) == 0x9900 || ((x) & 0xFC08) == 0xFC00)
-
-/* Is this `ldd r,b+0' or `std b+0,r' (b={Y,Z}, disassembled as
- `ld r,b' or `st b,r' respectively - next opcode entry)? */
-#define AVR_DISP0_P(x) (((x) & 0xFC07) == 0x8000)
-
-/* constraint letters
- r - any register
- d - `ldi' register (r16-r31)
- v - `movw' even register (r0, r2, ..., r28, r30)
- a - `fmul' register (r16-r23)
- w - `adiw' register (r24,r26,r28,r30)
- e - pointer registers (X,Y,Z)
- b - base pointer register and displacement ([YZ]+disp)
- z - Z pointer register (for [e]lpm Rd,Z[+])
- M - immediate value from 0 to 255
- n - immediate value from 0 to 255 ( n = ~M ). Relocation impossible
- s - immediate value from 0 to 7
- P - Port address value from 0 to 63. (in, out)
- p - Port address value from 0 to 31. (cbi, sbi, sbic, sbis)
- K - immediate value from 0 to 63 (used in `adiw', `sbiw')
- i - immediate value
- l - signed pc relative offset from -64 to 63
- L - signed pc relative offset from -2048 to 2047
- h - absolute code address (call, jmp)
- S - immediate value from 0 to 7 (S = s << 4)
- E - immediate value from 0 to 15, shifted left by 4 (des)
- ? - use this opcode entry if no parameters, else use next opcode entry
-
- Order is important - some binary opcodes have more than one name,
- the disassembler will only see the first match.
-
- Remaining undefined opcodes (1699 total - some of them might work
- as normal instructions if not all of the bits are decoded):
-
- 0x0001...0x00ff (255) (known to be decoded as `nop' by the old core)
- "100100xxxxxxx011" (128) 0x9[0-3][0-9a-f][3b]
- "100100xxxxxx1000" (64) 0x9[0-3][0-9a-f]8
- "1001010xxxxx0100" (32) 0x9[45][0-9a-f]4
- "1001010x001x1001" (4) 0x9[45][23]9
- "1001010x01xx1001" (8) 0x9[45][4-7]9
- "1001010x1xxx1001" (16) 0x9[45][8-9a-f]9
- "1001010xxxxx1011" (32) 0x9[45][0-9a-f]b
- "10010101001x1000" (2) 0x95[23]8
- "1001010101xx1000" (4) 0x95[4-7]8
- "1001010110111000" (1) 0x95b8
- "1001010111111000" (1) 0x95f8 (`espm' removed in databook update)
- "11111xxxxxxx1xxx" (1024) 0xf[8-9a-f][0-9a-f][8-9a-f]
- */
-
-AVR_INSN (clc, "", "1001010010001000", 1, AVR_ISA_1200, 0x9488)
-AVR_INSN (clh, "", "1001010011011000", 1, AVR_ISA_1200, 0x94d8)
-AVR_INSN (cli, "", "1001010011111000", 1, AVR_ISA_1200, 0x94f8)
-AVR_INSN (cln, "", "1001010010101000", 1, AVR_ISA_1200, 0x94a8)
-AVR_INSN (cls, "", "1001010011001000", 1, AVR_ISA_1200, 0x94c8)
-AVR_INSN (clt, "", "1001010011101000", 1, AVR_ISA_1200, 0x94e8)
-AVR_INSN (clv, "", "1001010010111000", 1, AVR_ISA_1200, 0x94b8)
-AVR_INSN (clz, "", "1001010010011000", 1, AVR_ISA_1200, 0x9498)
-
-AVR_INSN (sec, "", "1001010000001000", 1, AVR_ISA_1200, 0x9408)
-AVR_INSN (seh, "", "1001010001011000", 1, AVR_ISA_1200, 0x9458)
-AVR_INSN (sei, "", "1001010001111000", 1, AVR_ISA_1200, 0x9478)
-AVR_INSN (sen, "", "1001010000101000", 1, AVR_ISA_1200, 0x9428)
-AVR_INSN (ses, "", "1001010001001000", 1, AVR_ISA_1200, 0x9448)
-AVR_INSN (set, "", "1001010001101000", 1, AVR_ISA_1200, 0x9468)
-AVR_INSN (sev, "", "1001010000111000", 1, AVR_ISA_1200, 0x9438)
-AVR_INSN (sez, "", "1001010000011000", 1, AVR_ISA_1200, 0x9418)
-
- /* Same as {cl,se}[chinstvz] above. */
-AVR_INSN (bclr, "S", "100101001SSS1000", 1, AVR_ISA_1200, 0x9488)
-AVR_INSN (bset, "S", "100101000SSS1000", 1, AVR_ISA_1200, 0x9408)
-
-AVR_INSN (icall,"", "1001010100001001", 1, AVR_ISA_2xxx, 0x9509)
-AVR_INSN (ijmp, "", "1001010000001001", 1, AVR_ISA_2xxx, 0x9409)
-
-AVR_INSN (lpm, "?", "1001010111001000", 1, AVR_ISA_TINY1,0x95c8)
-AVR_INSN (lpm, "r,z", "1001000ddddd010+", 1, AVR_ISA_LPMX, 0x9004)
-AVR_INSN (elpm, "?", "1001010111011000", 1, AVR_ISA_ELPM, 0x95d8)
-AVR_INSN (elpm, "r,z", "1001000ddddd011+", 1, AVR_ISA_ELPMX,0x9006)
-
-AVR_INSN (nop, "", "0000000000000000", 1, AVR_ISA_1200, 0x0000)
-AVR_INSN (ret, "", "1001010100001000", 1, AVR_ISA_1200, 0x9508)
-AVR_INSN (reti, "", "1001010100011000", 1, AVR_ISA_1200, 0x9518)
-AVR_INSN (sleep,"", "1001010110001000", 1, AVR_ISA_1200, 0x9588)
-AVR_INSN (break,"", "1001010110011000", 1, AVR_ISA_BRK, 0x9598)
-AVR_INSN (wdr, "", "1001010110101000", 1, AVR_ISA_1200, 0x95a8)
-AVR_INSN (spm, "?", "1001010111101000", 1, AVR_ISA_SPM, 0x95e8)
-AVR_INSN (spm, "z", "10010101111+1000", 1, AVR_ISA_SPMX, 0x95e8)
-
-AVR_INSN (adc, "r,r", "000111rdddddrrrr", 1, AVR_ISA_1200, 0x1c00)
-AVR_INSN (add, "r,r", "000011rdddddrrrr", 1, AVR_ISA_1200, 0x0c00)
-AVR_INSN (and, "r,r", "001000rdddddrrrr", 1, AVR_ISA_1200, 0x2000)
-AVR_INSN (cp, "r,r", "000101rdddddrrrr", 1, AVR_ISA_1200, 0x1400)
-AVR_INSN (cpc, "r,r", "000001rdddddrrrr", 1, AVR_ISA_1200, 0x0400)
-AVR_INSN (cpse, "r,r", "000100rdddddrrrr", 1, AVR_ISA_1200, 0x1000)
-AVR_INSN (eor, "r,r", "001001rdddddrrrr", 1, AVR_ISA_1200, 0x2400)
-AVR_INSN (mov, "r,r", "001011rdddddrrrr", 1, AVR_ISA_1200, 0x2c00)
-AVR_INSN (mul, "r,r", "100111rdddddrrrr", 1, AVR_ISA_MUL, 0x9c00)
-AVR_INSN (or, "r,r", "001010rdddddrrrr", 1, AVR_ISA_1200, 0x2800)
-AVR_INSN (sbc, "r,r", "000010rdddddrrrr", 1, AVR_ISA_1200, 0x0800)
-AVR_INSN (sub, "r,r", "000110rdddddrrrr", 1, AVR_ISA_1200, 0x1800)
-
- /* Shorthand for {eor,add,adc,and} r,r above. */
-AVR_INSN (clr, "r=r", "001001rdddddrrrr", 1, AVR_ISA_1200, 0x2400)
-AVR_INSN (lsl, "r=r", "000011rdddddrrrr", 1, AVR_ISA_1200, 0x0c00)
-AVR_INSN (rol, "r=r", "000111rdddddrrrr", 1, AVR_ISA_1200, 0x1c00)
-AVR_INSN (tst, "r=r", "001000rdddddrrrr", 1, AVR_ISA_1200, 0x2000)
-
-AVR_INSN (andi, "d,M", "0111KKKKddddKKKK", 1, AVR_ISA_1200, 0x7000)
- /*XXX special case*/
-AVR_INSN (cbr, "d,n", "0111KKKKddddKKKK", 1, AVR_ISA_1200, 0x7000)
-
-AVR_INSN (ldi, "d,M", "1110KKKKddddKKKK", 1, AVR_ISA_1200, 0xe000)
-AVR_INSN (ser, "d", "11101111dddd1111", 1, AVR_ISA_1200, 0xef0f)
-
-AVR_INSN (ori, "d,M", "0110KKKKddddKKKK", 1, AVR_ISA_1200, 0x6000)
-AVR_INSN (sbr, "d,M", "0110KKKKddddKKKK", 1, AVR_ISA_1200, 0x6000)
-
-AVR_INSN (cpi, "d,M", "0011KKKKddddKKKK", 1, AVR_ISA_1200, 0x3000)
-AVR_INSN (sbci, "d,M", "0100KKKKddddKKKK", 1, AVR_ISA_1200, 0x4000)
-AVR_INSN (subi, "d,M", "0101KKKKddddKKKK", 1, AVR_ISA_1200, 0x5000)
-
-AVR_INSN (sbrc, "r,s", "1111110rrrrr0sss", 1, AVR_ISA_1200, 0xfc00)
-AVR_INSN (sbrs, "r,s", "1111111rrrrr0sss", 1, AVR_ISA_1200, 0xfe00)
-AVR_INSN (bld, "r,s", "1111100ddddd0sss", 1, AVR_ISA_1200, 0xf800)
-AVR_INSN (bst, "r,s", "1111101ddddd0sss", 1, AVR_ISA_1200, 0xfa00)
-
-AVR_INSN (in, "r,P", "10110PPdddddPPPP", 1, AVR_ISA_1200, 0xb000)
-AVR_INSN (out, "P,r", "10111PPrrrrrPPPP", 1, AVR_ISA_1200, 0xb800)
-
-AVR_INSN (adiw, "w,K", "10010110KKddKKKK", 1, AVR_ISA_2xxx, 0x9600)
-AVR_INSN (sbiw, "w,K", "10010111KKddKKKK", 1, AVR_ISA_2xxx, 0x9700)
-
-AVR_INSN (cbi, "p,s", "10011000pppppsss", 1, AVR_ISA_1200, 0x9800)
-AVR_INSN (sbi, "p,s", "10011010pppppsss", 1, AVR_ISA_1200, 0x9a00)
-AVR_INSN (sbic, "p,s", "10011001pppppsss", 1, AVR_ISA_1200, 0x9900)
-AVR_INSN (sbis, "p,s", "10011011pppppsss", 1, AVR_ISA_1200, 0x9b00)
-
-AVR_INSN (brcc, "l", "111101lllllll000", 1, AVR_ISA_1200, 0xf400)
-AVR_INSN (brcs, "l", "111100lllllll000", 1, AVR_ISA_1200, 0xf000)
-AVR_INSN (breq, "l", "111100lllllll001", 1, AVR_ISA_1200, 0xf001)
-AVR_INSN (brge, "l", "111101lllllll100", 1, AVR_ISA_1200, 0xf404)
-AVR_INSN (brhc, "l", "111101lllllll101", 1, AVR_ISA_1200, 0xf405)
-AVR_INSN (brhs, "l", "111100lllllll101", 1, AVR_ISA_1200, 0xf005)
-AVR_INSN (brid, "l", "111101lllllll111", 1, AVR_ISA_1200, 0xf407)
-AVR_INSN (brie, "l", "111100lllllll111", 1, AVR_ISA_1200, 0xf007)
-AVR_INSN (brlo, "l", "111100lllllll000", 1, AVR_ISA_1200, 0xf000)
-AVR_INSN (brlt, "l", "111100lllllll100", 1, AVR_ISA_1200, 0xf004)
-AVR_INSN (brmi, "l", "111100lllllll010", 1, AVR_ISA_1200, 0xf002)
-AVR_INSN (brne, "l", "111101lllllll001", 1, AVR_ISA_1200, 0xf401)
-AVR_INSN (brpl, "l", "111101lllllll010", 1, AVR_ISA_1200, 0xf402)
-AVR_INSN (brsh, "l", "111101lllllll000", 1, AVR_ISA_1200, 0xf400)
-AVR_INSN (brtc, "l", "111101lllllll110", 1, AVR_ISA_1200, 0xf406)
-AVR_INSN (brts, "l", "111100lllllll110", 1, AVR_ISA_1200, 0xf006)
-AVR_INSN (brvc, "l", "111101lllllll011", 1, AVR_ISA_1200, 0xf403)
-AVR_INSN (brvs, "l", "111100lllllll011", 1, AVR_ISA_1200, 0xf003)
-
- /* Same as br?? above. */
-AVR_INSN (brbc, "s,l", "111101lllllllsss", 1, AVR_ISA_1200, 0xf400)
-AVR_INSN (brbs, "s,l", "111100lllllllsss", 1, AVR_ISA_1200, 0xf000)
-
-AVR_INSN (rcall, "L", "1101LLLLLLLLLLLL", 1, AVR_ISA_1200, 0xd000)
-AVR_INSN (rjmp, "L", "1100LLLLLLLLLLLL", 1, AVR_ISA_1200, 0xc000)
-
-AVR_INSN (call, "h", "1001010hhhhh111h", 2, AVR_ISA_MEGA, 0x940e)
-AVR_INSN (jmp, "h", "1001010hhhhh110h", 2, AVR_ISA_MEGA, 0x940c)
-
-AVR_INSN (asr, "r", "1001010rrrrr0101", 1, AVR_ISA_1200, 0x9405)
-AVR_INSN (com, "r", "1001010rrrrr0000", 1, AVR_ISA_1200, 0x9400)
-AVR_INSN (dec, "r", "1001010rrrrr1010", 1, AVR_ISA_1200, 0x940a)
-AVR_INSN (inc, "r", "1001010rrrrr0011", 1, AVR_ISA_1200, 0x9403)
-AVR_INSN (lsr, "r", "1001010rrrrr0110", 1, AVR_ISA_1200, 0x9406)
-AVR_INSN (neg, "r", "1001010rrrrr0001", 1, AVR_ISA_1200, 0x9401)
-AVR_INSN (pop, "r", "1001000rrrrr1111", 1, AVR_ISA_2xxx, 0x900f)
-AVR_INSN (push, "r", "1001001rrrrr1111", 1, AVR_ISA_2xxx, 0x920f)
-AVR_INSN (ror, "r", "1001010rrrrr0111", 1, AVR_ISA_1200, 0x9407)
-AVR_INSN (swap, "r", "1001010rrrrr0010", 1, AVR_ISA_1200, 0x9402)
-
- /* Atomic memory operations for XMEGA. List before `sts'. */
-AVR_INSN (xch, "z,r", "1001001rrrrr0100", 1, AVR_ISA_RMW, 0x9204)
-AVR_INSN (las, "z,r", "1001001rrrrr0101", 1, AVR_ISA_RMW, 0x9205)
-AVR_INSN (lac, "z,r", "1001001rrrrr0110", 1, AVR_ISA_RMW, 0x9206)
-AVR_INSN (lat, "z,r", "1001001rrrrr0111", 1, AVR_ISA_RMW, 0x9207)
-
- /* Known to be decoded as `nop' by the old core. */
-AVR_INSN (movw, "v,v", "00000001ddddrrrr", 1, AVR_ISA_MOVW, 0x0100)
-AVR_INSN (muls, "d,d", "00000010ddddrrrr", 1, AVR_ISA_MUL, 0x0200)
-AVR_INSN (mulsu,"a,a", "000000110ddd0rrr", 1, AVR_ISA_MUL, 0x0300)
-AVR_INSN (fmul, "a,a", "000000110ddd1rrr", 1, AVR_ISA_MUL, 0x0308)
-AVR_INSN (fmuls,"a,a", "000000111ddd0rrr", 1, AVR_ISA_MUL, 0x0380)
-AVR_INSN (fmulsu,"a,a","000000111ddd1rrr", 1, AVR_ISA_MUL, 0x0388)
-
-AVR_INSN (sts, "i,r", "1001001ddddd0000", 2, AVR_ISA_2xxx, 0x9200)
-AVR_INSN (lds, "r,i", "1001000ddddd0000", 2, AVR_ISA_2xxx, 0x9000)
-
- /* Special case for b+0, `e' must be next entry after `b',
- b={Y=1,Z=0}, ee={X=11,Y=10,Z=00}, !=1 if -e or e+ or X. */
-AVR_INSN (ldd, "r,b", "10o0oo0dddddbooo", 1, AVR_ISA_2xxx, 0x8000)
-AVR_INSN (ld, "r,e", "100!000dddddee-+", 1, AVR_ISA_1200, 0x8000)
-AVR_INSN (std, "b,r", "10o0oo1rrrrrbooo", 1, AVR_ISA_2xxx, 0x8200)
-AVR_INSN (st, "e,r", "100!001rrrrree-+", 1, AVR_ISA_1200, 0x8200)
-
- /* These are for devices that don't exist yet
- (>128K program memory, PC = EIND:Z). */
-AVR_INSN (eicall, "", "1001010100011001", 1, AVR_ISA_EIND, 0x9519)
-AVR_INSN (eijmp, "", "1001010000011001", 1, AVR_ISA_EIND, 0x9419)
-
-/* DES instruction for encryption and decryption */
-AVR_INSN (des, "E", "10010100EEEE1011", 1, AVR_ISA_DES, 0x940B)
-
diff --git a/include/opcode/bfin.h b/include/opcode/bfin.h
deleted file mode 100755
index 26f019381..000000000
--- a/include/opcode/bfin.h
+++ /dev/null
@@ -1,1761 +0,0 @@
-/* bfin.h -- Header file for ADI Blackfin opcode table
- Copyright 2005, 2010, 2011 Free Software Foundation, Inc.
-
- This file is part of GDB, GAS, and the GNU binutils.
-
- GDB, GAS, and the GNU binutils are free software; you can redistribute
- them and/or modify them under the terms of the GNU General Public
- License as published by the Free Software Foundation; either version 3,
- or (at your option) any later version.
-
- GDB, GAS, and the GNU binutils are distributed in the hope that they
- 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 file; see the file COPYING3. If not, write to the Free
- Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef OPCODE_BFIN_H
-#define OPCODE_BFIN_H
-
-/* Common to all DSP32 instructions. */
-#define BIT_MULTI_INS 0x0800
-
-/* This just sets the multi instruction bit of a DSP32 instruction. */
-#define SET_MULTI_INSTRUCTION_BIT(x) x->value |= BIT_MULTI_INS;
-
-
-/* DSP instructions (32 bit) */
-
-/* mmod field. */
-#define M_S2RND 1
-#define M_T 2
-#define M_W32 3
-#define M_FU 4
-#define M_TFU 6
-#define M_IS 8
-#define M_ISS2 9
-#define M_IH 11
-#define M_IU 12
-
-static inline int is_macmod_pmove (int x)
-{
- return (x == 0) || (x == M_IS) || (x == M_FU) || (x == M_S2RND)
- || (x == M_ISS2) || (x == M_IU);
-}
-
-static inline int is_macmod_hmove (int x)
-{
- return (x == 0) || (x == M_IS) || (x == M_FU) || (x == M_IU) || (x == M_T)
- || (x == M_TFU) || (x == M_S2RND) || (x == M_ISS2) || (x == M_IH);
-}
-
-static inline int is_macmod_signed (int x)
-{
- return (x == 0) || (x == M_IS) || (x == M_T) || (x == M_S2RND)
- || (x == M_ISS2) || (x == M_IH) || (x == M_W32);
-}
-
-/* dsp32mac
-+----+----+---+---|---+----+----+---|---+---+---+---|---+---+---+---+
-| 1 | 1 | 0 | 0 |.M.| 0 | 0 |.mmod..........|.MM|.P.|.w1|.op1...|
-|.h01|.h11|.w0|.op0...|.h00|.h10|.dst.......|.src0......|.src1......|
-+----+----+---+---|---+----+----+---|---+---+---+---|---+---+---+---+
-*/
-
-typedef struct
-{
- unsigned long opcode;
- int bits_src1;
- int mask_src1;
- int bits_src0;
- int mask_src0;
- int bits_dst;
- int mask_dst;
- int bits_h10;
- int mask_h10;
- int bits_h00;
- int mask_h00;
- int bits_op0;
- int mask_op0;
- int bits_w0;
- int mask_w0;
- int bits_h11;
- int mask_h11;
- int bits_h01;
- int mask_h01;
- int bits_op1;
- int mask_op1;
- int bits_w1;
- int mask_w1;
- int bits_P;
- int mask_P;
- int bits_MM;
- int mask_MM;
- int bits_mmod;
- int mask_mmod;
- int bits_code2;
- int mask_code2;
- int bits_M;
- int mask_M;
- int bits_code;
- int mask_code;
-} DSP32Mac;
-
-#define DSP32Mac_opcode 0xc0000000
-#define DSP32Mac_src1_bits 0
-#define DSP32Mac_src1_mask 0x7
-#define DSP32Mac_src0_bits 3
-#define DSP32Mac_src0_mask 0x7
-#define DSP32Mac_dst_bits 6
-#define DSP32Mac_dst_mask 0x7
-#define DSP32Mac_h10_bits 9
-#define DSP32Mac_h10_mask 0x1
-#define DSP32Mac_h00_bits 10
-#define DSP32Mac_h00_mask 0x1
-#define DSP32Mac_op0_bits 11
-#define DSP32Mac_op0_mask 0x3
-#define DSP32Mac_w0_bits 13
-#define DSP32Mac_w0_mask 0x1
-#define DSP32Mac_h11_bits 14
-#define DSP32Mac_h11_mask 0x1
-#define DSP32Mac_h01_bits 15
-#define DSP32Mac_h01_mask 0x1
-#define DSP32Mac_op1_bits 16
-#define DSP32Mac_op1_mask 0x3
-#define DSP32Mac_w1_bits 18
-#define DSP32Mac_w1_mask 0x1
-#define DSP32Mac_p_bits 19
-#define DSP32Mac_p_mask 0x1
-#define DSP32Mac_MM_bits 20
-#define DSP32Mac_MM_mask 0x1
-#define DSP32Mac_mmod_bits 21
-#define DSP32Mac_mmod_mask 0xf
-#define DSP32Mac_code2_bits 25
-#define DSP32Mac_code2_mask 0x3
-#define DSP32Mac_M_bits 27
-#define DSP32Mac_M_mask 0x1
-#define DSP32Mac_code_bits 28
-#define DSP32Mac_code_mask 0xf
-
-#define init_DSP32Mac \
-{ \
- DSP32Mac_opcode, \
- DSP32Mac_src1_bits, DSP32Mac_src1_mask, \
- DSP32Mac_src0_bits, DSP32Mac_src0_mask, \
- DSP32Mac_dst_bits, DSP32Mac_dst_mask, \
- DSP32Mac_h10_bits, DSP32Mac_h10_mask, \
- DSP32Mac_h00_bits, DSP32Mac_h00_mask, \
- DSP32Mac_op0_bits, DSP32Mac_op0_mask, \
- DSP32Mac_w0_bits, DSP32Mac_w0_mask, \
- DSP32Mac_h11_bits, DSP32Mac_h11_mask, \
- DSP32Mac_h01_bits, DSP32Mac_h01_mask, \
- DSP32Mac_op1_bits, DSP32Mac_op1_mask, \
- DSP32Mac_w1_bits, DSP32Mac_w1_mask, \
- DSP32Mac_p_bits, DSP32Mac_p_mask, \
- DSP32Mac_MM_bits, DSP32Mac_MM_mask, \
- DSP32Mac_mmod_bits, DSP32Mac_mmod_mask, \
- DSP32Mac_code2_bits, DSP32Mac_code2_mask, \
- DSP32Mac_M_bits, DSP32Mac_M_mask, \
- DSP32Mac_code_bits, DSP32Mac_code_mask \
-};
-
-/* dsp32mult
-+----+----+---+---|---+----+----+---|---+---+---+---|---+---+---+---+
-| 1 | 1 | 0 | 0 |.M.| 0 | 1 |.mmod..........|.MM|.P.|.w1|.op1...|
-|.h01|.h11|.w0|.op0...|.h00|.h10|.dst.......|.src0......|.src1......|
-+----+----+---+---|---+----+----+---|---+---+---+---|---+---+---+---+
-*/
-
-typedef DSP32Mac DSP32Mult;
-#define DSP32Mult_opcode 0xc2000000
-
-#define init_DSP32Mult \
-{ \
- DSP32Mult_opcode, \
- DSP32Mac_src1_bits, DSP32Mac_src1_mask, \
- DSP32Mac_src0_bits, DSP32Mac_src0_mask, \
- DSP32Mac_dst_bits, DSP32Mac_dst_mask, \
- DSP32Mac_h10_bits, DSP32Mac_h10_mask, \
- DSP32Mac_h00_bits, DSP32Mac_h00_mask, \
- DSP32Mac_op0_bits, DSP32Mac_op0_mask, \
- DSP32Mac_w0_bits, DSP32Mac_w0_mask, \
- DSP32Mac_h11_bits, DSP32Mac_h11_mask, \
- DSP32Mac_h01_bits, DSP32Mac_h01_mask, \
- DSP32Mac_op1_bits, DSP32Mac_op1_mask, \
- DSP32Mac_w1_bits, DSP32Mac_w1_mask, \
- DSP32Mac_p_bits, DSP32Mac_p_mask, \
- DSP32Mac_MM_bits, DSP32Mac_MM_mask, \
- DSP32Mac_mmod_bits, DSP32Mac_mmod_mask, \
- DSP32Mac_code2_bits, DSP32Mac_code2_mask, \
- DSP32Mac_M_bits, DSP32Mac_M_mask, \
- DSP32Mac_code_bits, DSP32Mac_code_mask \
-};
-
-/* dsp32alu
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-| 1 | 1 | 0 | 0 |.M.| 1 | 0 | - | - | - |.HL|.aopcde............|
-|.aop...|.s.|.x.|.dst0......|.dst1......|.src0......|.src1......|
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-*/
-
-typedef struct
-{
- unsigned long opcode;
- int bits_src1;
- int mask_src1;
- int bits_src0;
- int mask_src0;
- int bits_dst1;
- int mask_dst1;
- int bits_dst0;
- int mask_dst0;
- int bits_x;
- int mask_x;
- int bits_s;
- int mask_s;
- int bits_aop;
- int mask_aop;
- int bits_aopcde;
- int mask_aopcde;
- int bits_HL;
- int mask_HL;
- int bits_dontcare;
- int mask_dontcare;
- int bits_code2;
- int mask_code2;
- int bits_M;
- int mask_M;
- int bits_code;
- int mask_code;
-} DSP32Alu;
-
-#define DSP32Alu_opcode 0xc4000000
-#define DSP32Alu_src1_bits 0
-#define DSP32Alu_src1_mask 0x7
-#define DSP32Alu_src0_bits 3
-#define DSP32Alu_src0_mask 0x7
-#define DSP32Alu_dst1_bits 6
-#define DSP32Alu_dst1_mask 0x7
-#define DSP32Alu_dst0_bits 9
-#define DSP32Alu_dst0_mask 0x7
-#define DSP32Alu_x_bits 12
-#define DSP32Alu_x_mask 0x1
-#define DSP32Alu_s_bits 13
-#define DSP32Alu_s_mask 0x1
-#define DSP32Alu_aop_bits 14
-#define DSP32Alu_aop_mask 0x3
-#define DSP32Alu_aopcde_bits 16
-#define DSP32Alu_aopcde_mask 0x1f
-#define DSP32Alu_HL_bits 21
-#define DSP32Alu_HL_mask 0x1
-#define DSP32Alu_dontcare_bits 22
-#define DSP32Alu_dontcare_mask 0x7
-#define DSP32Alu_code2_bits 25
-#define DSP32Alu_code2_mask 0x3
-#define DSP32Alu_M_bits 27
-#define DSP32Alu_M_mask 0x1
-#define DSP32Alu_code_bits 28
-#define DSP32Alu_code_mask 0xf
-
-#define init_DSP32Alu \
-{ \
- DSP32Alu_opcode, \
- DSP32Alu_src1_bits, DSP32Alu_src1_mask, \
- DSP32Alu_src0_bits, DSP32Alu_src0_mask, \
- DSP32Alu_dst1_bits, DSP32Alu_dst1_mask, \
- DSP32Alu_dst0_bits, DSP32Alu_dst0_mask, \
- DSP32Alu_x_bits, DSP32Alu_x_mask, \
- DSP32Alu_s_bits, DSP32Alu_s_mask, \
- DSP32Alu_aop_bits, DSP32Alu_aop_mask, \
- DSP32Alu_aopcde_bits, DSP32Alu_aopcde_mask, \
- DSP32Alu_HL_bits, DSP32Alu_HL_mask, \
- DSP32Alu_dontcare_bits, DSP32Alu_dontcare_mask, \
- DSP32Alu_code2_bits, DSP32Alu_code2_mask, \
- DSP32Alu_M_bits, DSP32Alu_M_mask, \
- DSP32Alu_code_bits, DSP32Alu_code_mask \
-};
-
-/* dsp32shift
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-| 1 | 1 | 0 | 0 |.M.| 1 | 1 | 0 | 0 | - | - |.sopcde............|
-|.sop...|.HLs...|.dst0......| - | - | - |.src0......|.src1......|
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-*/
-
-typedef struct
-{
- unsigned long opcode;
- int bits_src1;
- int mask_src1;
- int bits_src0;
- int mask_src0;
- int bits_dst1;
- int mask_dst1;
- int bits_dst0;
- int mask_dst0;
- int bits_HLs;
- int mask_HLs;
- int bits_sop;
- int mask_sop;
- int bits_sopcde;
- int mask_sopcde;
- int bits_dontcare;
- int mask_dontcare;
- int bits_code2;
- int mask_code2;
- int bits_M;
- int mask_M;
- int bits_code;
- int mask_code;
-} DSP32Shift;
-
-#define DSP32Shift_opcode 0xc6000000
-#define DSP32Shift_src1_bits 0
-#define DSP32Shift_src1_mask 0x7
-#define DSP32Shift_src0_bits 3
-#define DSP32Shift_src0_mask 0x7
-#define DSP32Shift_dst1_bits 6
-#define DSP32Shift_dst1_mask 0x7
-#define DSP32Shift_dst0_bits 9
-#define DSP32Shift_dst0_mask 0x7
-#define DSP32Shift_HLs_bits 12
-#define DSP32Shift_HLs_mask 0x3
-#define DSP32Shift_sop_bits 14
-#define DSP32Shift_sop_mask 0x3
-#define DSP32Shift_sopcde_bits 16
-#define DSP32Shift_sopcde_mask 0x1f
-#define DSP32Shift_dontcare_bits 21
-#define DSP32Shift_dontcare_mask 0x3
-#define DSP32Shift_code2_bits 23
-#define DSP32Shift_code2_mask 0xf
-#define DSP32Shift_M_bits 27
-#define DSP32Shift_M_mask 0x1
-#define DSP32Shift_code_bits 28
-#define DSP32Shift_code_mask 0xf
-
-#define init_DSP32Shift \
-{ \
- DSP32Shift_opcode, \
- DSP32Shift_src1_bits, DSP32Shift_src1_mask, \
- DSP32Shift_src0_bits, DSP32Shift_src0_mask, \
- DSP32Shift_dst1_bits, DSP32Shift_dst1_mask, \
- DSP32Shift_dst0_bits, DSP32Shift_dst0_mask, \
- DSP32Shift_HLs_bits, DSP32Shift_HLs_mask, \
- DSP32Shift_sop_bits, DSP32Shift_sop_mask, \
- DSP32Shift_sopcde_bits, DSP32Shift_sopcde_mask, \
- DSP32Shift_dontcare_bits, DSP32Shift_dontcare_mask, \
- DSP32Shift_code2_bits, DSP32Shift_code2_mask, \
- DSP32Shift_M_bits, DSP32Shift_M_mask, \
- DSP32Shift_code_bits, DSP32Shift_code_mask \
-};
-
-/* dsp32shiftimm
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-| 1 | 1 | 0 | 0 |.M.| 1 | 1 | 0 | 1 | - | - |.sopcde............|
-|.sop...|.HLs...|.dst0......|.immag.................|.src1......|
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-*/
-
-typedef struct
-{
- unsigned long opcode;
- int bits_src1;
- int mask_src1;
- int bits_immag;
- int mask_immag;
- int bits_dst0;
- int mask_dst0;
- int bits_HLs;
- int mask_HLs;
- int bits_sop;
- int mask_sop;
- int bits_sopcde;
- int mask_sopcde;
- int bits_dontcare;
- int mask_dontcare;
- int bits_code2;
- int mask_code2;
- int bits_M;
- int mask_M;
- int bits_code;
- int mask_code;
-} DSP32ShiftImm;
-
-#define DSP32ShiftImm_opcode 0xc6800000
-#define DSP32ShiftImm_src1_bits 0
-#define DSP32ShiftImm_src1_mask 0x7
-#define DSP32ShiftImm_immag_bits 3
-#define DSP32ShiftImm_immag_mask 0x3f
-#define DSP32ShiftImm_dst0_bits 9
-#define DSP32ShiftImm_dst0_mask 0x7
-#define DSP32ShiftImm_HLs_bits 12
-#define DSP32ShiftImm_HLs_mask 0x3
-#define DSP32ShiftImm_sop_bits 14
-#define DSP32ShiftImm_sop_mask 0x3
-#define DSP32ShiftImm_sopcde_bits 16
-#define DSP32ShiftImm_sopcde_mask 0x1f
-#define DSP32ShiftImm_dontcare_bits 21
-#define DSP32ShiftImm_dontcare_mask 0x3
-#define DSP32ShiftImm_code2_bits 23
-#define DSP32ShiftImm_code2_mask 0xf
-#define DSP32ShiftImm_M_bits 27
-#define DSP32ShiftImm_M_mask 0x1
-#define DSP32ShiftImm_code_bits 28
-#define DSP32ShiftImm_code_mask 0xf
-
-#define init_DSP32ShiftImm \
-{ \
- DSP32ShiftImm_opcode, \
- DSP32ShiftImm_src1_bits, DSP32ShiftImm_src1_mask, \
- DSP32ShiftImm_immag_bits, DSP32ShiftImm_immag_mask, \
- DSP32ShiftImm_dst0_bits, DSP32ShiftImm_dst0_mask, \
- DSP32ShiftImm_HLs_bits, DSP32ShiftImm_HLs_mask, \
- DSP32ShiftImm_sop_bits, DSP32ShiftImm_sop_mask, \
- DSP32ShiftImm_sopcde_bits, DSP32ShiftImm_sopcde_mask, \
- DSP32ShiftImm_dontcare_bits, DSP32ShiftImm_dontcare_mask, \
- DSP32ShiftImm_code2_bits, DSP32ShiftImm_code2_mask, \
- DSP32ShiftImm_M_bits, DSP32ShiftImm_M_mask, \
- DSP32ShiftImm_code_bits, DSP32ShiftImm_code_mask \
-};
-
-/* LOAD / STORE */
-
-/* LDSTidxI
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-| 1 | 1 | 1 | 0 | 0 | 1 |.W.|.Z.|.sz....|.ptr.......|.reg.......|
-|.offset........................................................|
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-*/
-
-typedef struct
-{
- unsigned long opcode;
- int bits_offset;
- int mask_offset;
- int bits_reg;
- int mask_reg;
- int bits_ptr;
- int mask_ptr;
- int bits_sz;
- int mask_sz;
- int bits_Z;
- int mask_Z;
- int bits_W;
- int mask_W;
- int bits_code;
- int mask_code;
-} LDSTidxI;
-
-#define LDSTidxI_opcode 0xe4000000
-#define LDSTidxI_offset_bits 0
-#define LDSTidxI_offset_mask 0xffff
-#define LDSTidxI_reg_bits 16
-#define LDSTidxI_reg_mask 0x7
-#define LDSTidxI_ptr_bits 19
-#define LDSTidxI_ptr_mask 0x7
-#define LDSTidxI_sz_bits 22
-#define LDSTidxI_sz_mask 0x3
-#define LDSTidxI_Z_bits 24
-#define LDSTidxI_Z_mask 0x1
-#define LDSTidxI_W_bits 25
-#define LDSTidxI_W_mask 0x1
-#define LDSTidxI_code_bits 26
-#define LDSTidxI_code_mask 0x3f
-
-#define init_LDSTidxI \
-{ \
- LDSTidxI_opcode, \
- LDSTidxI_offset_bits, LDSTidxI_offset_mask, \
- LDSTidxI_reg_bits, LDSTidxI_reg_mask, \
- LDSTidxI_ptr_bits, LDSTidxI_ptr_mask, \
- LDSTidxI_sz_bits, LDSTidxI_sz_mask, \
- LDSTidxI_Z_bits, LDSTidxI_Z_mask, \
- LDSTidxI_W_bits, LDSTidxI_W_mask, \
- LDSTidxI_code_bits, LDSTidxI_code_mask \
-};
-
-
-/* LDST
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-| 1 | 0 | 0 | 1 |.sz....|.W.|.aop...|.Z.|.ptr.......|.reg.......|
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-*/
-
-typedef struct
-{
- unsigned short opcode;
- int bits_reg;
- int mask_reg;
- int bits_ptr;
- int mask_ptr;
- int bits_Z;
- int mask_Z;
- int bits_aop;
- int mask_aop;
- int bits_W;
- int mask_W;
- int bits_sz;
- int mask_sz;
- int bits_code;
- int mask_code;
-} LDST;
-
-#define LDST_opcode 0x9000
-#define LDST_reg_bits 0
-#define LDST_reg_mask 0x7
-#define LDST_ptr_bits 3
-#define LDST_ptr_mask 0x7
-#define LDST_Z_bits 6
-#define LDST_Z_mask 0x1
-#define LDST_aop_bits 7
-#define LDST_aop_mask 0x3
-#define LDST_W_bits 9
-#define LDST_W_mask 0x1
-#define LDST_sz_bits 10
-#define LDST_sz_mask 0x3
-#define LDST_code_bits 12
-#define LDST_code_mask 0xf
-
-#define init_LDST \
-{ \
- LDST_opcode, \
- LDST_reg_bits, LDST_reg_mask, \
- LDST_ptr_bits, LDST_ptr_mask, \
- LDST_Z_bits, LDST_Z_mask, \
- LDST_aop_bits, LDST_aop_mask, \
- LDST_W_bits, LDST_W_mask, \
- LDST_sz_bits, LDST_sz_mask, \
- LDST_code_bits, LDST_code_mask \
-};
-
-/* LDSTii
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-| 1 | 0 | 1 |.W.|.op....|.offset........|.ptr.......|.reg.......|
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-*/
-
-typedef struct
-{
- unsigned short opcode;
- int bits_reg;
- int mask_reg;
- int bits_ptr;
- int mask_ptr;
- int bits_offset;
- int mask_offset;
- int bits_op;
- int mask_op;
- int bits_W;
- int mask_W;
- int bits_code;
- int mask_code;
-} LDSTii;
-
-#define LDSTii_opcode 0xa000
-#define LDSTii_reg_bit 0
-#define LDSTii_reg_mask 0x7
-#define LDSTii_ptr_bit 3
-#define LDSTii_ptr_mask 0x7
-#define LDSTii_offset_bit 6
-#define LDSTii_offset_mask 0xf
-#define LDSTii_op_bit 10
-#define LDSTii_op_mask 0x3
-#define LDSTii_W_bit 12
-#define LDSTii_W_mask 0x1
-#define LDSTii_code_bit 13
-#define LDSTii_code_mask 0x7
-
-#define init_LDSTii \
-{ \
- LDSTii_opcode, \
- LDSTii_reg_bit, LDSTii_reg_mask, \
- LDSTii_ptr_bit, LDSTii_ptr_mask, \
- LDSTii_offset_bit, LDSTii_offset_mask, \
- LDSTii_op_bit, LDSTii_op_mask, \
- LDSTii_W_bit, LDSTii_W_mask, \
- LDSTii_code_bit, LDSTii_code_mask \
-};
-
-
-/* LDSTiiFP
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-| 1 | 0 | 1 | 1 | 1 | 0 |.W.|.offset............|.reg...........|
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-*/
-
-typedef struct
-{
- unsigned short opcode;
- int bits_reg;
- int mask_reg;
- int bits_offset;
- int mask_offset;
- int bits_W;
- int mask_W;
- int bits_code;
- int mask_code;
-} LDSTiiFP;
-
-#define LDSTiiFP_opcode 0xb800
-#define LDSTiiFP_reg_bits 0
-#define LDSTiiFP_reg_mask 0xf
-#define LDSTiiFP_offset_bits 4
-#define LDSTiiFP_offset_mask 0x1f
-#define LDSTiiFP_W_bits 9
-#define LDSTiiFP_W_mask 0x1
-#define LDSTiiFP_code_bits 10
-#define LDSTiiFP_code_mask 0x3f
-
-#define init_LDSTiiFP \
-{ \
- LDSTiiFP_opcode, \
- LDSTiiFP_reg_bits, LDSTiiFP_reg_mask, \
- LDSTiiFP_offset_bits, LDSTiiFP_offset_mask, \
- LDSTiiFP_W_bits, LDSTiiFP_W_mask, \
- LDSTiiFP_code_bits, LDSTiiFP_code_mask \
-};
-
-/* dspLDST
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-| 1 | 0 | 0 | 1 | 1 | 1 |.W.|.aop...|.m.....|.i.....|.reg.......|
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-*/
-
-typedef struct
-{
- unsigned short opcode;
- int bits_reg;
- int mask_reg;
- int bits_i;
- int mask_i;
- int bits_m;
- int mask_m;
- int bits_aop;
- int mask_aop;
- int bits_W;
- int mask_W;
- int bits_code;
- int mask_code;
-} DspLDST;
-
-#define DspLDST_opcode 0x9c00
-#define DspLDST_reg_bits 0
-#define DspLDST_reg_mask 0x7
-#define DspLDST_i_bits 3
-#define DspLDST_i_mask 0x3
-#define DspLDST_m_bits 5
-#define DspLDST_m_mask 0x3
-#define DspLDST_aop_bits 7
-#define DspLDST_aop_mask 0x3
-#define DspLDST_W_bits 9
-#define DspLDST_W_mask 0x1
-#define DspLDST_code_bits 10
-#define DspLDST_code_mask 0x3f
-
-#define init_DspLDST \
-{ \
- DspLDST_opcode, \
- DspLDST_reg_bits, DspLDST_reg_mask, \
- DspLDST_i_bits, DspLDST_i_mask, \
- DspLDST_m_bits, DspLDST_m_mask, \
- DspLDST_aop_bits, DspLDST_aop_mask, \
- DspLDST_W_bits, DspLDST_W_mask, \
- DspLDST_code_bits, DspLDST_code_mask \
-};
-
-
-/* LDSTpmod
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-| 1 | 0 | 0 | 0 |.W.|.aop...|.reg.......|.idx.......|.ptr.......|
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-*/
-
-typedef struct
-{
- unsigned short opcode;
- int bits_ptr;
- int mask_ptr;
- int bits_idx;
- int mask_idx;
- int bits_reg;
- int mask_reg;
- int bits_aop;
- int mask_aop;
- int bits_W;
- int mask_W;
- int bits_code;
- int mask_code;
-} LDSTpmod;
-
-#define LDSTpmod_opcode 0x8000
-#define LDSTpmod_ptr_bits 0
-#define LDSTpmod_ptr_mask 0x7
-#define LDSTpmod_idx_bits 3
-#define LDSTpmod_idx_mask 0x7
-#define LDSTpmod_reg_bits 6
-#define LDSTpmod_reg_mask 0x7
-#define LDSTpmod_aop_bits 9
-#define LDSTpmod_aop_mask 0x3
-#define LDSTpmod_W_bits 11
-#define LDSTpmod_W_mask 0x1
-#define LDSTpmod_code_bits 12
-#define LDSTpmod_code_mask 0xf
-
-#define init_LDSTpmod \
-{ \
- LDSTpmod_opcode, \
- LDSTpmod_ptr_bits, LDSTpmod_ptr_mask, \
- LDSTpmod_idx_bits, LDSTpmod_idx_mask, \
- LDSTpmod_reg_bits, LDSTpmod_reg_mask, \
- LDSTpmod_aop_bits, LDSTpmod_aop_mask, \
- LDSTpmod_W_bits, LDSTpmod_W_mask, \
- LDSTpmod_code_bits, LDSTpmod_code_mask \
-};
-
-
-/* LOGI2op
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-| 0 | 1 | 0 | 0 | 1 |.opc.......|.src...............|.dst.......|
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-*/
-
-typedef struct
-{
- unsigned short opcode;
- int bits_dst;
- int mask_dst;
- int bits_src;
- int mask_src;
- int bits_opc;
- int mask_opc;
- int bits_code;
- int mask_code;
-} LOGI2op;
-
-#define LOGI2op_opcode 0x4800
-#define LOGI2op_dst_bits 0
-#define LOGI2op_dst_mask 0x7
-#define LOGI2op_src_bits 3
-#define LOGI2op_src_mask 0x1f
-#define LOGI2op_opc_bits 8
-#define LOGI2op_opc_mask 0x7
-#define LOGI2op_code_bits 11
-#define LOGI2op_code_mask 0x1f
-
-#define init_LOGI2op \
-{ \
- LOGI2op_opcode, \
- LOGI2op_dst_bits, LOGI2op_dst_mask, \
- LOGI2op_src_bits, LOGI2op_src_mask, \
- LOGI2op_opc_bits, LOGI2op_opc_mask, \
- LOGI2op_code_bits, LOGI2op_code_mask \
-};
-
-
-/* ALU2op
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-| 0 | 1 | 0 | 0 | 0 | 0 |.opc...........|.src.......|.dst.......|
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-*/
-
-typedef struct
-{
- unsigned short opcode;
- int bits_dst;
- int mask_dst;
- int bits_src;
- int mask_src;
- int bits_opc;
- int mask_opc;
- int bits_code;
- int mask_code;
-} ALU2op;
-
-#define ALU2op_opcode 0x4000
-#define ALU2op_dst_bits 0
-#define ALU2op_dst_mask 0x7
-#define ALU2op_src_bits 3
-#define ALU2op_src_mask 0x7
-#define ALU2op_opc_bits 6
-#define ALU2op_opc_mask 0xf
-#define ALU2op_code_bits 10
-#define ALU2op_code_mask 0x3f
-
-#define init_ALU2op \
-{ \
- ALU2op_opcode, \
- ALU2op_dst_bits, ALU2op_dst_mask, \
- ALU2op_src_bits, ALU2op_src_mask, \
- ALU2op_opc_bits, ALU2op_opc_mask, \
- ALU2op_code_bits, ALU2op_code_mask \
-};
-
-
-/* BRCC
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-| 0 | 0 | 0 | 1 |.T.|.B.|.offset................................|
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-*/
-
-typedef struct
-{
- unsigned short opcode;
- int bits_offset;
- int mask_offset;
- int bits_B;
- int mask_B;
- int bits_T;
- int mask_T;
- int bits_code;
- int mask_code;
-} BRCC;
-
-#define BRCC_opcode 0x1000
-#define BRCC_offset_bits 0
-#define BRCC_offset_mask 0x3ff
-#define BRCC_B_bits 10
-#define BRCC_B_mask 0x1
-#define BRCC_T_bits 11
-#define BRCC_T_mask 0x1
-#define BRCC_code_bits 12
-#define BRCC_code_mask 0xf
-
-#define init_BRCC \
-{ \
- BRCC_opcode, \
- BRCC_offset_bits, BRCC_offset_mask, \
- BRCC_B_bits, BRCC_B_mask, \
- BRCC_T_bits, BRCC_T_mask, \
- BRCC_code_bits, BRCC_code_mask \
-};
-
-
-/* UJUMP
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-| 0 | 0 | 1 | 0 |.offset........................................|
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-*/
-
-typedef struct
-{
- unsigned short opcode;
- int bits_offset;
- int mask_offset;
- int bits_code;
- int mask_code;
-} UJump;
-
-#define UJump_opcode 0x2000
-#define UJump_offset_bits 0
-#define UJump_offset_mask 0xfff
-#define UJump_code_bits 12
-#define UJump_code_mask 0xf
-
-#define init_UJump \
-{ \
- UJump_opcode, \
- UJump_offset_bits, UJump_offset_mask, \
- UJump_code_bits, UJump_code_mask \
-};
-
-
-/* ProgCtrl
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |.prgfunc.......|.poprnd........|
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-*/
-
-typedef struct
-{
- unsigned short opcode;
- int bits_poprnd;
- int mask_poprnd;
- int bits_prgfunc;
- int mask_prgfunc;
- int bits_code;
- int mask_code;
-} ProgCtrl;
-
-#define ProgCtrl_opcode 0x0000
-#define ProgCtrl_poprnd_bits 0
-#define ProgCtrl_poprnd_mask 0xf
-#define ProgCtrl_prgfunc_bits 4
-#define ProgCtrl_prgfunc_mask 0xf
-#define ProgCtrl_code_bits 8
-#define ProgCtrl_code_mask 0xff
-
-#define init_ProgCtrl \
-{ \
- ProgCtrl_opcode, \
- ProgCtrl_poprnd_bits, ProgCtrl_poprnd_mask, \
- ProgCtrl_prgfunc_bits, ProgCtrl_prgfunc_mask, \
- ProgCtrl_code_bits, ProgCtrl_code_mask \
-};
-
-/* CALLa
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-| 1 | 1 | 1 | 0 | 0 | 0 | 1 |.S.|.msw...........................|
-|.lsw...........................................................|
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-*/
-
-
-typedef struct
-{
- unsigned long opcode;
- int bits_addr;
- int mask_addr;
- int bits_S;
- int mask_S;
- int bits_code;
- int mask_code;
-} CALLa;
-
-#define CALLa_opcode 0xe2000000
-#define CALLa_addr_bits 0
-#define CALLa_addr_mask 0xffffff
-#define CALLa_S_bits 24
-#define CALLa_S_mask 0x1
-#define CALLa_code_bits 25
-#define CALLa_code_mask 0x7f
-
-#define init_CALLa \
-{ \
- CALLa_opcode, \
- CALLa_addr_bits, CALLa_addr_mask, \
- CALLa_S_bits, CALLa_S_mask, \
- CALLa_code_bits, CALLa_code_mask \
-};
-
-
-/* pseudoDEBUG
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-| 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 |.fn....|.grp.......|.reg.......|
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-*/
-
-typedef struct
-{
- unsigned short opcode;
- int bits_reg;
- int mask_reg;
- int bits_grp;
- int mask_grp;
- int bits_fn;
- int mask_fn;
- int bits_code;
- int mask_code;
-} PseudoDbg;
-
-#define PseudoDbg_opcode 0xf800
-#define PseudoDbg_reg_bits 0
-#define PseudoDbg_reg_mask 0x7
-#define PseudoDbg_grp_bits 3
-#define PseudoDbg_grp_mask 0x7
-#define PseudoDbg_fn_bits 6
-#define PseudoDbg_fn_mask 0x3
-#define PseudoDbg_code_bits 8
-#define PseudoDbg_code_mask 0xff
-
-#define init_PseudoDbg \
-{ \
- PseudoDbg_opcode, \
- PseudoDbg_reg_bits, PseudoDbg_reg_mask, \
- PseudoDbg_grp_bits, PseudoDbg_grp_mask, \
- PseudoDbg_fn_bits, PseudoDbg_fn_mask, \
- PseudoDbg_code_bits, PseudoDbg_code_mask \
-};
-
-/* PseudoDbg_assert
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-| 1 | 1 | 1 | 1 | 0 | - | - | - | dbgop |.grp.......|.regtest...|
-|.expected......................................................|
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-*/
-
-typedef struct
-{
- unsigned long opcode;
- int bits_expected;
- int mask_expected;
- int bits_regtest;
- int mask_regtest;
- int bits_grp;
- int mask_grp;
- int bits_dbgop;
- int mask_dbgop;
- int bits_dontcare;
- int mask_dontcare;
- int bits_code;
- int mask_code;
-} PseudoDbg_Assert;
-
-#define PseudoDbg_Assert_opcode 0xf0000000
-#define PseudoDbg_Assert_expected_bits 0
-#define PseudoDbg_Assert_expected_mask 0xffff
-#define PseudoDbg_Assert_regtest_bits 16
-#define PseudoDbg_Assert_regtest_mask 0x7
-#define PseudoDbg_Assert_grp_bits 19
-#define PseudoDbg_Assert_grp_mask 0x7
-#define PseudoDbg_Assert_dbgop_bits 22
-#define PseudoDbg_Assert_dbgop_mask 0x3
-#define PseudoDbg_Assert_dontcare_bits 24
-#define PseudoDbg_Assert_dontcare_mask 0x7
-#define PseudoDbg_Assert_code_bits 27
-#define PseudoDbg_Assert_code_mask 0x1f
-
-#define init_PseudoDbg_Assert \
-{ \
- PseudoDbg_Assert_opcode, \
- PseudoDbg_Assert_expected_bits, PseudoDbg_Assert_expected_mask, \
- PseudoDbg_Assert_regtest_bits, PseudoDbg_Assert_regtest_mask, \
- PseudoDbg_Assert_grp_bits, PseudoDbg_Assert_grp_mask, \
- PseudoDbg_Assert_dbgop_bits, PseudoDbg_Assert_dbgop_mask, \
- PseudoDbg_Assert_dontcare_bits, PseudoDbg_Assert_dontcare_mask, \
- PseudoDbg_Assert_code_bits, PseudoDbg_Assert_code_mask \
-};
-
-/* pseudoChr
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-| 1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 |.ch............................|
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-*/
-
-typedef struct
-{
- unsigned short opcode;
- int bits_ch;
- int mask_ch;
- int bits_code;
- int mask_code;
-} PseudoChr;
-
-#define PseudoChr_opcode 0xf900
-#define PseudoChr_ch_bits 0
-#define PseudoChr_ch_mask 0xff
-#define PseudoChr_code_bits 8
-#define PseudoChr_code_mask 0xff
-
-#define init_PseudoChr \
-{ \
- PseudoChr_opcode, \
- PseudoChr_ch_bits, PseudoChr_ch_mask, \
- PseudoChr_code_bits, PseudoChr_code_mask \
-};
-
-/* CaCTRL
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-| 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 |.a.|.op....|.reg.......|
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-*/
-
-typedef struct
-{
- unsigned short opcode;
- int bits_reg;
- int mask_reg;
- int bits_op;
- int mask_op;
- int bits_a;
- int mask_a;
- int bits_code;
- int mask_code;
-} CaCTRL;
-
-#define CaCTRL_opcode 0x0240
-#define CaCTRL_reg_bits 0
-#define CaCTRL_reg_mask 0x7
-#define CaCTRL_op_bits 3
-#define CaCTRL_op_mask 0x3
-#define CaCTRL_a_bits 5
-#define CaCTRL_a_mask 0x1
-#define CaCTRL_code_bits 6
-#define CaCTRL_code_mask 0x3fff
-
-#define init_CaCTRL \
-{ \
- CaCTRL_opcode, \
- CaCTRL_reg_bits, CaCTRL_reg_mask, \
- CaCTRL_op_bits, CaCTRL_op_mask, \
- CaCTRL_a_bits, CaCTRL_a_mask, \
- CaCTRL_code_bits, CaCTRL_code_mask \
-};
-
-/* PushPopMultiple
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-| 0 | 0 | 0 | 0 | 0 | 1 | 0 |.d.|.p.|.W.|.dr........|.pr........|
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-*/
-
-typedef struct
-{
- unsigned short opcode;
- int bits_pr;
- int mask_pr;
- int bits_dr;
- int mask_dr;
- int bits_W;
- int mask_W;
- int bits_p;
- int mask_p;
- int bits_d;
- int mask_d;
- int bits_code;
- int mask_code;
-} PushPopMultiple;
-
-#define PushPopMultiple_opcode 0x0400
-#define PushPopMultiple_pr_bits 0
-#define PushPopMultiple_pr_mask 0x7
-#define PushPopMultiple_dr_bits 3
-#define PushPopMultiple_dr_mask 0x7
-#define PushPopMultiple_W_bits 6
-#define PushPopMultiple_W_mask 0x1
-#define PushPopMultiple_p_bits 7
-#define PushPopMultiple_p_mask 0x1
-#define PushPopMultiple_d_bits 8
-#define PushPopMultiple_d_mask 0x1
-#define PushPopMultiple_code_bits 8
-#define PushPopMultiple_code_mask 0x1
-
-#define init_PushPopMultiple \
-{ \
- PushPopMultiple_opcode, \
- PushPopMultiple_pr_bits, PushPopMultiple_pr_mask, \
- PushPopMultiple_dr_bits, PushPopMultiple_dr_mask, \
- PushPopMultiple_W_bits, PushPopMultiple_W_mask, \
- PushPopMultiple_p_bits, PushPopMultiple_p_mask, \
- PushPopMultiple_d_bits, PushPopMultiple_d_mask, \
- PushPopMultiple_code_bits, PushPopMultiple_code_mask \
-};
-
-/* PushPopReg
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |.W.|.grp.......|.reg.......|
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-*/
-
-typedef struct
-{
- unsigned short opcode;
- int bits_reg;
- int mask_reg;
- int bits_grp;
- int mask_grp;
- int bits_W;
- int mask_W;
- int bits_code;
- int mask_code;
-} PushPopReg;
-
-#define PushPopReg_opcode 0x0100
-#define PushPopReg_reg_bits 0
-#define PushPopReg_reg_mask 0x7
-#define PushPopReg_grp_bits 3
-#define PushPopReg_grp_mask 0x7
-#define PushPopReg_W_bits 6
-#define PushPopReg_W_mask 0x1
-#define PushPopReg_code_bits 7
-#define PushPopReg_code_mask 0x1ff
-
-#define init_PushPopReg \
-{ \
- PushPopReg_opcode, \
- PushPopReg_reg_bits, PushPopReg_reg_mask, \
- PushPopReg_grp_bits, PushPopReg_grp_mask, \
- PushPopReg_W_bits, PushPopReg_W_mask, \
- PushPopReg_code_bits, PushPopReg_code_mask, \
-};
-
-/* linkage
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-| 1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |.R.|
-|.framesize.....................................................|
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-*/
-
-typedef struct
-{
- unsigned long opcode;
- int bits_framesize;
- int mask_framesize;
- int bits_R;
- int mask_R;
- int bits_code;
- int mask_code;
-} Linkage;
-
-#define Linkage_opcode 0xe8000000
-#define Linkage_framesize_bits 0
-#define Linkage_framesize_mask 0xffff
-#define Linkage_R_bits 16
-#define Linkage_R_mask 0x1
-#define Linkage_code_bits 17
-#define Linkage_code_mask 0x7fff
-
-#define init_Linkage \
-{ \
- Linkage_opcode, \
- Linkage_framesize_bits, Linkage_framesize_mask, \
- Linkage_R_bits, Linkage_R_mask, \
- Linkage_code_bits, Linkage_code_mask \
-};
-
-/* LoopSetup
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-| 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 1 |.rop...|.c.|.soffset.......|
-|.reg...........| - | - |.eoffset...............................|
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-*/
-
-typedef struct
-{
- unsigned long opcode;
- int bits_eoffset;
- int mask_eoffset;
- int bits_dontcare;
- int mask_dontcare;
- int bits_reg;
- int mask_reg;
- int bits_soffset;
- int mask_soffset;
- int bits_c;
- int mask_c;
- int bits_rop;
- int mask_rop;
- int bits_code;
- int mask_code;
-} LoopSetup;
-
-#define LoopSetup_opcode 0xe0800000
-#define LoopSetup_eoffset_bits 0
-#define LoopSetup_eoffset_mask 0x3ff
-#define LoopSetup_dontcare_bits 10
-#define LoopSetup_dontcare_mask 0x3
-#define LoopSetup_reg_bits 12
-#define LoopSetup_reg_mask 0xf
-#define LoopSetup_soffset_bits 16
-#define LoopSetup_soffset_mask 0xf
-#define LoopSetup_c_bits 20
-#define LoopSetup_c_mask 0x1
-#define LoopSetup_rop_bits 21
-#define LoopSetup_rop_mask 0x3
-#define LoopSetup_code_bits 23
-#define LoopSetup_code_mask 0x1ff
-
-#define init_LoopSetup \
-{ \
- LoopSetup_opcode, \
- LoopSetup_eoffset_bits, LoopSetup_eoffset_mask, \
- LoopSetup_dontcare_bits, LoopSetup_dontcare_mask, \
- LoopSetup_reg_bits, LoopSetup_reg_mask, \
- LoopSetup_soffset_bits, LoopSetup_soffset_mask, \
- LoopSetup_c_bits, LoopSetup_c_mask, \
- LoopSetup_rop_bits, LoopSetup_rop_mask, \
- LoopSetup_code_bits, LoopSetup_code_mask \
-};
-
-/* LDIMMhalf
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-| 1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 |.Z.|.H.|.S.|.grp...|.reg.......|
-|.hword.........................................................|
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-*/
-
-typedef struct
-{
- unsigned long opcode;
- int bits_hword;
- int mask_hword;
- int bits_reg;
- int mask_reg;
- int bits_grp;
- int mask_grp;
- int bits_S;
- int mask_S;
- int bits_H;
- int mask_H;
- int bits_Z;
- int mask_Z;
- int bits_code;
- int mask_code;
-} LDIMMhalf;
-
-#define LDIMMhalf_opcode 0xe1000000
-#define LDIMMhalf_hword_bits 0
-#define LDIMMhalf_hword_mask 0xffff
-#define LDIMMhalf_reg_bits 16
-#define LDIMMhalf_reg_mask 0x7
-#define LDIMMhalf_grp_bits 19
-#define LDIMMhalf_grp_mask 0x3
-#define LDIMMhalf_S_bits 21
-#define LDIMMhalf_S_mask 0x1
-#define LDIMMhalf_H_bits 22
-#define LDIMMhalf_H_mask 0x1
-#define LDIMMhalf_Z_bits 23
-#define LDIMMhalf_Z_mask 0x1
-#define LDIMMhalf_code_bits 24
-#define LDIMMhalf_code_mask 0xff
-
-#define init_LDIMMhalf \
-{ \
- LDIMMhalf_opcode, \
- LDIMMhalf_hword_bits, LDIMMhalf_hword_mask, \
- LDIMMhalf_reg_bits, LDIMMhalf_reg_mask, \
- LDIMMhalf_grp_bits, LDIMMhalf_grp_mask, \
- LDIMMhalf_S_bits, LDIMMhalf_S_mask, \
- LDIMMhalf_H_bits, LDIMMhalf_H_mask, \
- LDIMMhalf_Z_bits, LDIMMhalf_Z_mask, \
- LDIMMhalf_code_bits, LDIMMhalf_code_mask \
-};
-
-
-/* CC2dreg
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-| 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |.op....|.reg.......|
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-*/
-
-typedef struct
-{
- unsigned short opcode;
- int bits_reg;
- int mask_reg;
- int bits_op;
- int mask_op;
- int bits_code;
- int mask_code;
-} CC2dreg;
-
-#define CC2dreg_opcode 0x0200
-#define CC2dreg_reg_bits 0
-#define CC2dreg_reg_mask 0x7
-#define CC2dreg_op_bits 3
-#define CC2dreg_op_mask 0x3
-#define CC2dreg_code_bits 5
-#define CC2dreg_code_mask 0x7fff
-
-#define init_CC2dreg \
-{ \
- CC2dreg_opcode, \
- CC2dreg_reg_bits, CC2dreg_reg_mask, \
- CC2dreg_op_bits, CC2dreg_op_mask, \
- CC2dreg_code_bits, CC2dreg_code_mask \
-};
-
-
-/* PTR2op
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-| 0 | 1 | 0 | 0 | 0 | 1 | 0 |.opc.......|.src.......|.dst.......|
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-*/
-
-typedef struct
-{
- unsigned short opcode;
- int bits_dst;
- int mask_dst;
- int bits_src;
- int mask_src;
- int bits_opc;
- int mask_opc;
- int bits_code;
- int mask_code;
-} PTR2op;
-
-#define PTR2op_opcode 0x4400
-#define PTR2op_dst_bits 0
-#define PTR2op_dst_mask 0x7
-#define PTR2op_src_bits 3
-#define PTR2op_src_mask 0x7
-#define PTR2op_opc_bits 6
-#define PTR2op_opc_mask 0x7
-#define PTR2op_code_bits 9
-#define PTR2op_code_mask 0x7f
-
-#define init_PTR2op \
-{ \
- PTR2op_opcode, \
- PTR2op_dst_bits, PTR2op_dst_mask, \
- PTR2op_src_bits, PTR2op_src_mask, \
- PTR2op_opc_bits, PTR2op_opc_mask, \
- PTR2op_code_bits, PTR2op_code_mask \
-};
-
-
-/* COMP3op
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-| 0 | 1 | 0 | 1 |.opc.......|.dst.......|.src1......|.src0......|
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-*/
-
-typedef struct
-{
- unsigned short opcode;
- int bits_src0;
- int mask_src0;
- int bits_src1;
- int mask_src1;
- int bits_dst;
- int mask_dst;
- int bits_opc;
- int mask_opc;
- int bits_code;
- int mask_code;
-} COMP3op;
-
-#define COMP3op_opcode 0x5000
-#define COMP3op_src0_bits 0
-#define COMP3op_src0_mask 0x7
-#define COMP3op_src1_bits 3
-#define COMP3op_src1_mask 0x7
-#define COMP3op_dst_bits 6
-#define COMP3op_dst_mask 0x7
-#define COMP3op_opc_bits 9
-#define COMP3op_opc_mask 0x7
-#define COMP3op_code_bits 12
-#define COMP3op_code_mask 0xf
-
-#define init_COMP3op \
-{ \
- COMP3op_opcode, \
- COMP3op_src0_bits, COMP3op_src0_mask, \
- COMP3op_src1_bits, COMP3op_src1_mask, \
- COMP3op_dst_bits, COMP3op_dst_mask, \
- COMP3op_opc_bits, COMP3op_opc_mask, \
- COMP3op_code_bits, COMP3op_code_mask \
-};
-
-/* ccMV
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-| 0 | 0 | 0 | 0 | 0 | 1 | 1 |.T.|.d.|.s.|.dst.......|.src.......|
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-*/
-
-typedef struct
-{
- unsigned short opcode;
- int bits_src;
- int mask_src;
- int bits_dst;
- int mask_dst;
- int bits_s;
- int mask_s;
- int bits_d;
- int mask_d;
- int bits_T;
- int mask_T;
- int bits_code;
- int mask_code;
-} CCmv;
-
-#define CCmv_opcode 0x0600
-#define CCmv_src_bits 0
-#define CCmv_src_mask 0x7
-#define CCmv_dst_bits 3
-#define CCmv_dst_mask 0x7
-#define CCmv_s_bits 6
-#define CCmv_s_mask 0x1
-#define CCmv_d_bits 7
-#define CCmv_d_mask 0x1
-#define CCmv_T_bits 8
-#define CCmv_T_mask 0x1
-#define CCmv_code_bits 9
-#define CCmv_code_mask 0x7f
-
-#define init_CCmv \
-{ \
- CCmv_opcode, \
- CCmv_src_bits, CCmv_src_mask, \
- CCmv_dst_bits, CCmv_dst_mask, \
- CCmv_s_bits, CCmv_s_mask, \
- CCmv_d_bits, CCmv_d_mask, \
- CCmv_T_bits, CCmv_T_mask, \
- CCmv_code_bits, CCmv_code_mask \
-};
-
-
-/* CCflag
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-| 0 | 0 | 0 | 0 | 1 |.I.|.opc.......|.G.|.y.........|.x.........|
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-*/
-
-typedef struct
-{
- unsigned short opcode;
- int bits_x;
- int mask_x;
- int bits_y;
- int mask_y;
- int bits_G;
- int mask_G;
- int bits_opc;
- int mask_opc;
- int bits_I;
- int mask_I;
- int bits_code;
- int mask_code;
-} CCflag;
-
-#define CCflag_opcode 0x0800
-#define CCflag_x_bits 0
-#define CCflag_x_mask 0x7
-#define CCflag_y_bits 3
-#define CCflag_y_mask 0x7
-#define CCflag_G_bits 6
-#define CCflag_G_mask 0x1
-#define CCflag_opc_bits 7
-#define CCflag_opc_mask 0x7
-#define CCflag_I_bits 10
-#define CCflag_I_mask 0x1
-#define CCflag_code_bits 11
-#define CCflag_code_mask 0x1f
-
-#define init_CCflag \
-{ \
- CCflag_opcode, \
- CCflag_x_bits, CCflag_x_mask, \
- CCflag_y_bits, CCflag_y_mask, \
- CCflag_G_bits, CCflag_G_mask, \
- CCflag_opc_bits, CCflag_opc_mask, \
- CCflag_I_bits, CCflag_I_mask, \
- CCflag_code_bits, CCflag_code_mask, \
-};
-
-
-/* CC2stat
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-| 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |.D.|.op....|.cbit..............|
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-*/
-
-typedef struct
-{
- unsigned short opcode;
- int bits_cbit;
- int mask_cbit;
- int bits_op;
- int mask_op;
- int bits_D;
- int mask_D;
- int bits_code;
- int mask_code;
-} CC2stat;
-
-#define CC2stat_opcode 0x0300
-#define CC2stat_cbit_bits 0
-#define CC2stat_cbit_mask 0x1f
-#define CC2stat_op_bits 5
-#define CC2stat_op_mask 0x3
-#define CC2stat_D_bits 7
-#define CC2stat_D_mask 0x1
-#define CC2stat_code_bits 8
-#define CC2stat_code_mask 0xff
-
-#define init_CC2stat \
-{ \
- CC2stat_opcode, \
- CC2stat_cbit_bits, CC2stat_cbit_mask, \
- CC2stat_op_bits, CC2stat_op_mask, \
- CC2stat_D_bits, CC2stat_D_mask, \
- CC2stat_code_bits, CC2stat_code_mask \
-};
-
-
-/* REGMV
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-| 0 | 0 | 1 | 1 |.gd........|.gs........|.dst.......|.src.......|
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-*/
-
-typedef struct
-{
- unsigned short opcode;
- int bits_src;
- int mask_src;
- int bits_dst;
- int mask_dst;
- int bits_gs;
- int mask_gs;
- int bits_gd;
- int mask_gd;
- int bits_code;
- int mask_code;
-} RegMv;
-
-#define RegMv_opcode 0x3000
-#define RegMv_src_bits 0
-#define RegMv_src_mask 0x7
-#define RegMv_dst_bits 3
-#define RegMv_dst_mask 0x7
-#define RegMv_gs_bits 6
-#define RegMv_gs_mask 0x7
-#define RegMv_gd_bits 9
-#define RegMv_gd_mask 0x7
-#define RegMv_code_bits 12
-#define RegMv_code_mask 0xf
-
-#define init_RegMv \
-{ \
- RegMv_opcode, \
- RegMv_src_bits, RegMv_src_mask, \
- RegMv_dst_bits, RegMv_dst_mask, \
- RegMv_gs_bits, RegMv_gs_mask, \
- RegMv_gd_bits, RegMv_gd_mask, \
- RegMv_code_bits, RegMv_code_mask \
-};
-
-
-/* COMPI2opD
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-| 0 | 1 | 1 | 0 | 0 |.op|.isrc......................|.dst.......|
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-*/
-
-typedef struct
-{
- unsigned short opcode;
- int bits_dst;
- int mask_dst;
- int bits_src;
- int mask_src;
- int bits_op;
- int mask_op;
- int bits_code;
- int mask_code;
-} COMPI2opD;
-
-#define COMPI2opD_opcode 0x6000
-#define COMPI2opD_dst_bits 0
-#define COMPI2opD_dst_mask 0x7
-#define COMPI2opD_src_bits 3
-#define COMPI2opD_src_mask 0x7f
-#define COMPI2opD_op_bits 10
-#define COMPI2opD_op_mask 0x1
-#define COMPI2opD_code_bits 11
-#define COMPI2opD_code_mask 0x1f
-
-#define init_COMPI2opD \
-{ \
- COMPI2opD_opcode, \
- COMPI2opD_dst_bits, COMPI2opD_dst_mask, \
- COMPI2opD_src_bits, COMPI2opD_src_mask, \
- COMPI2opD_op_bits, COMPI2opD_op_mask, \
- COMPI2opD_code_bits, COMPI2opD_code_mask \
-};
-
-/* COMPI2opP
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-| 0 | 1 | 1 | 0 | 1 |.op|.src.......................|.dst.......|
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-*/
-
-typedef COMPI2opD COMPI2opP;
-
-#define COMPI2opP_opcode 0x6800
-#define COMPI2opP_dst_bits 0
-#define COMPI2opP_dst_mask 0x7
-#define COMPI2opP_src_bits 3
-#define COMPI2opP_src_mask 0x7f
-#define COMPI2opP_op_bits 10
-#define COMPI2opP_op_mask 0x1
-#define COMPI2opP_code_bits 11
-#define COMPI2opP_code_mask 0x1f
-
-#define init_COMPI2opP \
-{ \
- COMPI2opP_opcode, \
- COMPI2opP_dst_bits, COMPI2opP_dst_mask, \
- COMPI2opP_src_bits, COMPI2opP_src_mask, \
- COMPI2opP_op_bits, COMPI2opP_op_mask, \
- COMPI2opP_code_bits, COMPI2opP_code_mask \
-};
-
-
-/* dagMODim
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-| 1 | 0 | 0 | 1 | 1 | 1 | 1 | 0 |.br| 1 | 1 |.op|.m.....|.i.....|
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-*/
-
-typedef struct
-{
- unsigned short opcode;
- int bits_i;
- int mask_i;
- int bits_m;
- int mask_m;
- int bits_op;
- int mask_op;
- int bits_code2;
- int mask_code2;
- int bits_br;
- int mask_br;
- int bits_code;
- int mask_code;
-} DagMODim;
-
-#define DagMODim_opcode 0x9e60
-#define DagMODim_i_bits 0
-#define DagMODim_i_mask 0x3
-#define DagMODim_m_bits 2
-#define DagMODim_m_mask 0x3
-#define DagMODim_op_bits 4
-#define DagMODim_op_mask 0x1
-#define DagMODim_code2_bits 5
-#define DagMODim_code2_mask 0x3
-#define DagMODim_br_bits 7
-#define DagMODim_br_mask 0x1
-#define DagMODim_code_bits 8
-#define DagMODim_code_mask 0xff
-
-#define init_DagMODim \
-{ \
- DagMODim_opcode, \
- DagMODim_i_bits, DagMODim_i_mask, \
- DagMODim_m_bits, DagMODim_m_mask, \
- DagMODim_op_bits, DagMODim_op_mask, \
- DagMODim_code2_bits, DagMODim_code2_mask, \
- DagMODim_br_bits, DagMODim_br_mask, \
- DagMODim_code_bits, DagMODim_code_mask \
-};
-
-/* dagMODik
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-| 1 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 0 |.op....|.i.....|
-+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
-*/
-
-typedef struct
-{
- unsigned short opcode;
- int bits_i;
- int mask_i;
- int bits_op;
- int mask_op;
- int bits_code;
- int mask_code;
-} DagMODik;
-
-#define DagMODik_opcode 0x9f60
-#define DagMODik_i_bits 0
-#define DagMODik_i_mask 0x3
-#define DagMODik_op_bits 2
-#define DagMODik_op_mask 0x3
-#define DagMODik_code_bits 3
-#define DagMODik_code_mask 0xfff
-
-#define init_DagMODik \
-{ \
- DagMODik_opcode, \
- DagMODik_i_bits, DagMODik_i_mask, \
- DagMODik_op_bits, DagMODik_op_mask, \
- DagMODik_code_bits, DagMODik_code_mask \
-};
-
-#endif
diff --git a/include/opcode/cgen.h b/include/opcode/cgen.h
deleted file mode 100644
index b7e82d4dd..000000000
--- a/include/opcode/cgen.h
+++ /dev/null
@@ -1,1480 +0,0 @@
-/* Header file for targets using CGEN: Cpu tools GENerator.
-
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2009, 2010
- Free Software Foundation, Inc.
-
- This file is part of GDB, the GNU debugger, and the GNU Binutils.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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.,
- 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef OPCODE_CGEN_H
-#define OPCODE_CGEN_H
-
-#include "symcat.h"
-#include "cgen/bitset.h"
-
-/* ??? IWBN to replace bfd in the name. */
-#include "bfd_stdint.h"
-
-/* ??? This file requires bfd.h but only to get bfd_vma.
- Seems like an awful lot to require just to get such a fundamental type.
- Perhaps the definition of bfd_vma can be moved outside of bfd.h.
- Or perhaps one could duplicate its definition in another file.
- Until such time, this file conditionally compiles definitions that require
- bfd_vma using __BFD_H_SEEN__. */
-
-/* Enums must be defined before they can be used.
- Allow them to be used in struct definitions, even though the enum must
- be defined elsewhere.
- If CGEN_ARCH isn't defined, this file is being included by something other
- than <arch>-desc.h. */
-
-/* Prepend the arch name, defined in <arch>-desc.h, and _cgen_ to symbol S.
- The lack of spaces in the arg list is important for non-stdc systems.
- This file is included by <arch>-desc.h.
- It can be included independently of <arch>-desc.h, in which case the arch
- dependent portions will be declared as "unknown_cgen_foo". */
-
-#ifndef CGEN_SYM
-#define CGEN_SYM(s) CONCAT3 (unknown,_cgen_,s)
-#endif
-
-/* This file contains the static (unchanging) pieces and as much other stuff
- as we can reasonably put here. It's generally cleaner to put stuff here
- rather than having it machine generated if possible. */
-
-/* The assembler syntax is made up of expressions (duh...).
- At the lowest level the values are mnemonics, register names, numbers, etc.
- Above that are subexpressions, if any (an example might be the
- "effective address" in m68k cpus). Subexpressions are wip.
- At the second highest level are the insns themselves. Above that are
- pseudo-insns, synthetic insns, and macros, if any. */
-
-/* Lots of cpu's have a fixed insn size, or one which rarely changes,
- and it's generally easier to handle these by treating the insn as an
- integer type, rather than an array of characters. So we allow targets
- to control this. When an integer type the value is in host byte order,
- when an array of characters the value is in target byte order. */
-
-typedef unsigned int CGEN_INSN_INT;
-typedef int64_t CGEN_INSN_LGSINT; /* large/long SINT */
-typedef uint64_t CGEN_INSN_LGUINT; /* large/long UINT */
-
-#if CGEN_INT_INSN_P
-typedef CGEN_INSN_INT CGEN_INSN_BYTES;
-typedef CGEN_INSN_INT *CGEN_INSN_BYTES_PTR;
-#else
-typedef unsigned char *CGEN_INSN_BYTES;
-typedef unsigned char *CGEN_INSN_BYTES_PTR;
-#endif
-
-#ifdef __GNUC__
-#define CGEN_INLINE __inline__
-#else
-#define CGEN_INLINE
-#endif
-
-enum cgen_endian
-{
- CGEN_ENDIAN_UNKNOWN,
- CGEN_ENDIAN_LITTLE,
- CGEN_ENDIAN_BIG
-};
-
-/* Forward decl. */
-
-typedef struct cgen_insn CGEN_INSN;
-
-/* Opaque pointer version for use by external world. */
-
-typedef struct cgen_cpu_desc *CGEN_CPU_DESC;
-
-/* Attributes.
- Attributes are used to describe various random things associated with
- an object (ifield, hardware, operand, insn, whatever) and are specified
- as name/value pairs.
- Integer attributes computed at compile time are currently all that's
- supported, though adding string attributes and run-time computation is
- straightforward. Integer attribute values are always host int's
- (signed or unsigned). For portability, this means 32 bits.
- Integer attributes are further categorized as boolean, bitset, integer,
- and enum types. Boolean attributes appear frequently enough that they're
- recorded in one host int. This limits the maximum number of boolean
- attributes to 32, though that's a *lot* of attributes. */
-
-/* Type of attribute values. */
-
-typedef CGEN_BITSET CGEN_ATTR_VALUE_BITSET_TYPE;
-typedef int CGEN_ATTR_VALUE_ENUM_TYPE;
-typedef union
-{
- CGEN_ATTR_VALUE_BITSET_TYPE bitset;
- CGEN_ATTR_VALUE_ENUM_TYPE nonbitset;
-} CGEN_ATTR_VALUE_TYPE;
-
-/* Struct to record attribute information. */
-
-typedef struct
-{
- /* Boolean attributes. */
- unsigned int bool_;
- /* Non-boolean integer attributes. */
- CGEN_ATTR_VALUE_TYPE nonbool[1];
-} CGEN_ATTR;
-
-/* Define a structure member for attributes with N non-boolean entries.
- There is no maximum number of non-boolean attributes.
- There is a maximum of 32 boolean attributes (since they are all recorded
- in one host int). */
-
-#define CGEN_ATTR_TYPE(n) \
-struct { unsigned int bool_; \
- CGEN_ATTR_VALUE_TYPE nonbool[(n) ? (n) : 1]; }
-
-/* Return the boolean attributes. */
-
-#define CGEN_ATTR_BOOLS(a) ((a)->bool_)
-
-/* Non-boolean attribute numbers are offset by this much. */
-
-#define CGEN_ATTR_NBOOL_OFFSET 32
-
-/* Given a boolean attribute number, return its mask. */
-
-#define CGEN_ATTR_MASK(attr) (1 << (attr))
-
-/* Return the value of boolean attribute ATTR in ATTRS. */
-
-#define CGEN_BOOL_ATTR(attrs, attr) ((CGEN_ATTR_MASK (attr) & (attrs)) != 0)
-
-/* Return value of attribute ATTR in ATTR_TABLE for OBJ.
- OBJ is a pointer to the entity that has the attributes
- (??? not used at present but is reserved for future purposes - eventually
- the goal is to allow recording attributes in source form and computing
- them lazily at runtime, not sure of the details yet). */
-
-#define CGEN_ATTR_VALUE(obj, attr_table, attr) \
-((unsigned int) (attr) < CGEN_ATTR_NBOOL_OFFSET \
- ? ((CGEN_ATTR_BOOLS (attr_table) & CGEN_ATTR_MASK (attr)) != 0) \
- : ((attr_table)->nonbool[(attr) - CGEN_ATTR_NBOOL_OFFSET].nonbitset))
-#define CGEN_BITSET_ATTR_VALUE(obj, attr_table, attr) \
- ((attr_table)->nonbool[(attr) - CGEN_ATTR_NBOOL_OFFSET].bitset)
-
-/* Attribute name/value tables.
- These are used to assist parsing of descriptions at run-time. */
-
-typedef struct
-{
- const char * name;
- unsigned value;
-} CGEN_ATTR_ENTRY;
-
-/* For each domain (ifld,hw,operand,insn), list of attributes. */
-
-typedef struct
-{
- const char * name;
- const CGEN_ATTR_ENTRY * dfault;
- const CGEN_ATTR_ENTRY * vals;
-} CGEN_ATTR_TABLE;
-
-/* Instruction set variants. */
-
-typedef struct {
- const char *name;
-
- /* Default instruction size (in bits).
- This is used by the assembler when it encounters an unknown insn. */
- unsigned int default_insn_bitsize;
-
- /* Base instruction size (in bits).
- For non-LIW cpus this is generally the length of the smallest insn.
- For LIW cpus its wip (work-in-progress). For the m32r its 32. */
- unsigned int base_insn_bitsize;
-
- /* Minimum/maximum instruction size (in bits). */
- unsigned int min_insn_bitsize;
- unsigned int max_insn_bitsize;
-} CGEN_ISA;
-
-/* Machine variants. */
-
-typedef struct {
- const char *name;
- /* The argument to bfd_arch_info->scan. */
- const char *bfd_name;
- /* one of enum mach_attr */
- int num;
- /* parameter from mach->cpu */
- unsigned int insn_chunk_bitsize;
-} CGEN_MACH;
-
-/* Parse result (also extraction result).
-
- The result of parsing an insn is stored here.
- To generate the actual insn, this is passed to the insert handler.
- When printing an insn, the result of extraction is stored here.
- To print the insn, this is passed to the print handler.
-
- It is machine generated so we don't define it here,
- but we do need a forward decl for the handler fns.
-
- There is one member for each possible field in the insn.
- The type depends on the field.
- Also recorded here is the computed length of the insn for architectures
- where it varies.
-*/
-
-typedef struct cgen_fields CGEN_FIELDS;
-
-/* Total length of the insn, as recorded in the `fields' struct. */
-/* ??? The field insert handler has lots of opportunities for optimization
- if it ever gets inlined. On architectures where insns all have the same
- size, may wish to detect that and make this macro a constant - to allow
- further optimizations. */
-
-#define CGEN_FIELDS_BITSIZE(fields) ((fields)->length)
-
-/* Extraction support for variable length insn sets. */
-
-/* When disassembling we don't know the number of bytes to read at the start.
- So the first CGEN_BASE_INSN_SIZE bytes are read at the start and the rest
- are read when needed. This struct controls this. It is basically the
- disassemble_info stuff, except that we provide a cache for values already
- read (since bytes can typically be read several times to fetch multiple
- operands that may be in them), and that extraction of fields is needed
- in contexts other than disassembly. */
-
-typedef struct {
- /* A pointer to the disassemble_info struct.
- We don't require dis-asm.h so we use void * for the type here.
- If NULL, BYTES is full of valid data (VALID == -1). */
- void *dis_info;
- /* Points to a working buffer of sufficient size. */
- unsigned char *insn_bytes;
- /* Mask of bytes that are valid in INSN_BYTES. */
- unsigned int valid;
-} CGEN_EXTRACT_INFO;
-
-/* Associated with each insn or expression is a set of "handlers" for
- performing operations like parsing, printing, etc. These require a bfd_vma
- value to be passed around but we don't want all applications to need bfd.h.
- So this stuff is only provided if bfd.h has been included. */
-
-/* Parse handler.
- CD is a cpu table descriptor.
- INSN is a pointer to a struct describing the insn being parsed.
- STRP is a pointer to a pointer to the text being parsed.
- FIELDS is a pointer to a cgen_fields struct in which the results are placed.
- If the expression is successfully parsed, *STRP is updated.
- If not it is left alone.
- The result is NULL if success or an error message. */
-typedef const char * (cgen_parse_fn)
- (CGEN_CPU_DESC, const CGEN_INSN *insn_,
- const char **strp_, CGEN_FIELDS *fields_);
-
-/* Insert handler.
- CD is a cpu table descriptor.
- INSN is a pointer to a struct describing the insn being parsed.
- FIELDS is a pointer to a cgen_fields struct from which the values
- are fetched.
- INSNP is a pointer to a buffer in which to place the insn.
- PC is the pc value of the insn.
- The result is an error message or NULL if success. */
-
-#ifdef __BFD_H_SEEN__
-typedef const char * (cgen_insert_fn)
- (CGEN_CPU_DESC, const CGEN_INSN *insn_,
- CGEN_FIELDS *fields_, CGEN_INSN_BYTES_PTR insnp_,
- bfd_vma pc_);
-#else
-typedef const char * (cgen_insert_fn) ();
-#endif
-
-/* Extract handler.
- CD is a cpu table descriptor.
- INSN is a pointer to a struct describing the insn being parsed.
- The second argument is a pointer to a struct controlling extraction
- (only used for variable length insns).
- EX_INFO is a pointer to a struct for controlling reading of further
- bytes for the insn.
- BASE_INSN is the first CGEN_BASE_INSN_SIZE bytes (host order).
- FIELDS is a pointer to a cgen_fields struct in which the results are placed.
- PC is the pc value of the insn.
- The result is the length of the insn in bits or zero if not recognized. */
-
-#ifdef __BFD_H_SEEN__
-typedef int (cgen_extract_fn)
- (CGEN_CPU_DESC, const CGEN_INSN *insn_,
- CGEN_EXTRACT_INFO *ex_info_, CGEN_INSN_INT base_insn_,
- CGEN_FIELDS *fields_, bfd_vma pc_);
-#else
-typedef int (cgen_extract_fn) ();
-#endif
-
-/* Print handler.
- CD is a cpu table descriptor.
- INFO is a pointer to the disassembly info.
- Eg: disassemble_info. It's defined as `PTR' so this file can be included
- without dis-asm.h.
- INSN is a pointer to a struct describing the insn being printed.
- FIELDS is a pointer to a cgen_fields struct.
- PC is the pc value of the insn.
- LEN is the length of the insn, in bits. */
-
-#ifdef __BFD_H_SEEN__
-typedef void (cgen_print_fn)
- (CGEN_CPU_DESC, void * info_, const CGEN_INSN *insn_,
- CGEN_FIELDS *fields_, bfd_vma pc_, int len_);
-#else
-typedef void (cgen_print_fn) ();
-#endif
-
-/* Parse/insert/extract/print handlers.
-
- Indices into the handler tables.
- We could use pointers here instead, but 90% of them are generally identical
- and that's a lot of redundant data. Making these unsigned char indices
- into tables of pointers saves a bit of space.
- Using indices also keeps assembler code out of the disassembler and
- vice versa. */
-
-struct cgen_opcode_handler
-{
- unsigned char parse, insert, extract, print;
-};
-
-/* Assembler interface.
-
- The interface to the assembler is intended to be clean in the sense that
- libopcodes.a is a standalone entity and could be used with any assembler.
- Not that one would necessarily want to do that but rather that it helps
- keep a clean interface. The interface will obviously be slanted towards
- GAS, but at least it's a start.
- ??? Note that one possible user of the assembler besides GAS is GDB.
-
- Parsing is controlled by the assembler which calls
- CGEN_SYM (assemble_insn). If it can parse and build the entire insn
- it doesn't call back to the assembler. If it needs/wants to call back
- to the assembler, cgen_parse_operand_fn is called which can either
-
- - return a number to be inserted in the insn
- - return a "register" value to be inserted
- (the register might not be a register per pe)
- - queue the argument and return a marker saying the expression has been
- queued (eg: a fix-up)
- - return an error message indicating the expression wasn't recognizable
-
- The result is an error message or NULL for success.
- The parsed value is stored in the bfd_vma *. */
-
-/* Values for indicating what the caller wants. */
-
-enum cgen_parse_operand_type
-{
- CGEN_PARSE_OPERAND_INIT,
- CGEN_PARSE_OPERAND_INTEGER,
- CGEN_PARSE_OPERAND_ADDRESS,
- CGEN_PARSE_OPERAND_SYMBOLIC
-};
-
-/* Values for indicating what was parsed. */
-
-enum cgen_parse_operand_result
-{
- CGEN_PARSE_OPERAND_RESULT_NUMBER,
- CGEN_PARSE_OPERAND_RESULT_REGISTER,
- CGEN_PARSE_OPERAND_RESULT_QUEUED,
- CGEN_PARSE_OPERAND_RESULT_ERROR
-};
-
-#ifdef __BFD_H_SEEN__ /* Don't require bfd.h unnecessarily. */
-typedef const char * (cgen_parse_operand_fn)
- (CGEN_CPU_DESC,
- enum cgen_parse_operand_type, const char **, int, int,
- enum cgen_parse_operand_result *, bfd_vma *);
-#else
-typedef const char * (cgen_parse_operand_fn) ();
-#endif
-
-/* Set the cgen_parse_operand_fn callback. */
-
-extern void cgen_set_parse_operand_fn
- (CGEN_CPU_DESC, cgen_parse_operand_fn);
-
-/* Called before trying to match a table entry with the insn. */
-
-extern void cgen_init_parse_operand (CGEN_CPU_DESC);
-
-/* Operand values (keywords, integers, symbols, etc.) */
-
-/* Types of assembler elements. */
-
-enum cgen_asm_type
-{
- CGEN_ASM_NONE, CGEN_ASM_KEYWORD, CGEN_ASM_MAX
-};
-
-#ifndef CGEN_ARCH
-enum cgen_hw_type { CGEN_HW_MAX };
-#endif
-
-/* List of hardware elements. */
-
-typedef struct
-{
- char *name;
- enum cgen_hw_type type;
- /* There is currently no example where both index specs and value specs
- are required, so for now both are clumped under "asm_data". */
- enum cgen_asm_type asm_type;
- void *asm_data;
-#ifndef CGEN_HW_NBOOL_ATTRS
-#define CGEN_HW_NBOOL_ATTRS 1
-#endif
- CGEN_ATTR_TYPE (CGEN_HW_NBOOL_ATTRS) attrs;
-#define CGEN_HW_ATTRS(hw) (&(hw)->attrs)
-} CGEN_HW_ENTRY;
-
-/* Return value of attribute ATTR in HW. */
-
-#define CGEN_HW_ATTR_VALUE(hw, attr) \
-CGEN_ATTR_VALUE ((hw), CGEN_HW_ATTRS (hw), (attr))
-
-/* Table of hardware elements for selected mach, computed at runtime.
- enum cgen_hw_type is an index into this table (specifically `entries'). */
-
-typedef struct {
- /* Pointer to null terminated table of all compiled in entries. */
- const CGEN_HW_ENTRY *init_entries;
- unsigned int entry_size; /* since the attribute member is variable sized */
- /* Array of all entries, initial and run-time added. */
- const CGEN_HW_ENTRY **entries;
- /* Number of elements in `entries'. */
- unsigned int num_entries;
- /* For now, xrealloc is called each time a new entry is added at runtime.
- ??? May wish to keep track of some slop to reduce the number of calls to
- xrealloc, except that there's unlikely to be many and not expected to be
- in speed critical code. */
-} CGEN_HW_TABLE;
-
-extern const CGEN_HW_ENTRY * cgen_hw_lookup_by_name
- (CGEN_CPU_DESC, const char *);
-extern const CGEN_HW_ENTRY * cgen_hw_lookup_by_num
- (CGEN_CPU_DESC, unsigned int);
-
-/* This struct is used to describe things like register names, etc. */
-
-typedef struct cgen_keyword_entry
-{
- /* Name (as in register name). */
- char * name;
-
- /* Value (as in register number).
- The value cannot be -1 as that is used to indicate "not found".
- IDEA: Have "FUNCTION" attribute? [function is called to fetch value]. */
- int value;
-
- /* Attributes.
- This should, but technically needn't, appear last. It is a variable sized
- array in that one architecture may have 1 nonbool attribute and another
- may have more. Having this last means the non-architecture specific code
- needn't care. The goal is to eventually record
- attributes in their raw form, evaluate them at run-time, and cache the
- values, so this worry will go away anyway. */
- /* ??? Moving this last should be done by treating keywords like insn lists
- and moving the `next' fields into a CGEN_KEYWORD_LIST struct. */
- /* FIXME: Not used yet. */
-#ifndef CGEN_KEYWORD_NBOOL_ATTRS
-#define CGEN_KEYWORD_NBOOL_ATTRS 1
-#endif
- CGEN_ATTR_TYPE (CGEN_KEYWORD_NBOOL_ATTRS) attrs;
-
- /* ??? Putting these here means compiled in entries can't be const.
- Not a really big deal, but something to consider. */
- /* Next name hash table entry. */
- struct cgen_keyword_entry *next_name;
- /* Next value hash table entry. */
- struct cgen_keyword_entry *next_value;
-} CGEN_KEYWORD_ENTRY;
-
-/* Top level struct for describing a set of related keywords
- (e.g. register names).
-
- This struct supports run-time entry of new values, and hashed lookups. */
-
-typedef struct cgen_keyword
-{
- /* Pointer to initial [compiled in] values. */
- CGEN_KEYWORD_ENTRY *init_entries;
-
- /* Number of entries in `init_entries'. */
- unsigned int num_init_entries;
-
- /* Hash table used for name lookup. */
- CGEN_KEYWORD_ENTRY **name_hash_table;
-
- /* Hash table used for value lookup. */
- CGEN_KEYWORD_ENTRY **value_hash_table;
-
- /* Number of entries in the hash_tables. */
- unsigned int hash_table_size;
-
- /* Pointer to null keyword "" entry if present. */
- const CGEN_KEYWORD_ENTRY *null_entry;
-
- /* String containing non-alphanumeric characters used
- in keywords.
- At present, the highest number of entries used is 1. */
- char nonalpha_chars[8];
-} CGEN_KEYWORD;
-
-/* Structure used for searching. */
-
-typedef struct
-{
- /* Table being searched. */
- const CGEN_KEYWORD *table;
-
- /* Specification of what is being searched for. */
- const char *spec;
-
- /* Current index in hash table. */
- unsigned int current_hash;
-
- /* Current element in current hash chain. */
- CGEN_KEYWORD_ENTRY *current_entry;
-} CGEN_KEYWORD_SEARCH;
-
-/* Lookup a keyword from its name. */
-
-const CGEN_KEYWORD_ENTRY *cgen_keyword_lookup_name
- (CGEN_KEYWORD *, const char *);
-
-/* Lookup a keyword from its value. */
-
-const CGEN_KEYWORD_ENTRY *cgen_keyword_lookup_value
- (CGEN_KEYWORD *, int);
-
-/* Add a keyword. */
-
-void cgen_keyword_add (CGEN_KEYWORD *, CGEN_KEYWORD_ENTRY *);
-
-/* Keyword searching.
- This can be used to retrieve every keyword, or a subset. */
-
-CGEN_KEYWORD_SEARCH cgen_keyword_search_init
- (CGEN_KEYWORD *, const char *);
-const CGEN_KEYWORD_ENTRY *cgen_keyword_search_next
- (CGEN_KEYWORD_SEARCH *);
-
-/* Operand value support routines. */
-
-extern const char *cgen_parse_keyword
- (CGEN_CPU_DESC, const char **, CGEN_KEYWORD *, long *);
-#ifdef __BFD_H_SEEN__ /* Don't require bfd.h unnecessarily. */
-extern const char *cgen_parse_signed_integer
- (CGEN_CPU_DESC, const char **, int, long *);
-extern const char *cgen_parse_unsigned_integer
- (CGEN_CPU_DESC, const char **, int, unsigned long *);
-extern const char *cgen_parse_address
- (CGEN_CPU_DESC, const char **, int, int,
- enum cgen_parse_operand_result *, bfd_vma *);
-extern const char *cgen_validate_signed_integer
- (long, long, long);
-extern const char *cgen_validate_unsigned_integer
- (unsigned long, unsigned long, unsigned long);
-#endif
-
-/* Operand modes. */
-
-/* ??? This duplicates the values in arch.h. Revisit.
- These however need the CGEN_ prefix [as does everything in this file]. */
-/* ??? Targets may need to add their own modes so we may wish to move this
- to <arch>-opc.h, or add a hook. */
-
-enum cgen_mode {
- CGEN_MODE_VOID, /* ??? rename simulator's VM to VOID? */
- CGEN_MODE_BI, CGEN_MODE_QI, CGEN_MODE_HI, CGEN_MODE_SI, CGEN_MODE_DI,
- CGEN_MODE_UBI, CGEN_MODE_UQI, CGEN_MODE_UHI, CGEN_MODE_USI, CGEN_MODE_UDI,
- CGEN_MODE_SF, CGEN_MODE_DF, CGEN_MODE_XF, CGEN_MODE_TF,
- CGEN_MODE_TARGET_MAX,
- CGEN_MODE_INT, CGEN_MODE_UINT,
- CGEN_MODE_MAX
-};
-
-/* FIXME: Until simulator is updated. */
-
-#define CGEN_MODE_VM CGEN_MODE_VOID
-
-/* Operands. */
-
-#ifndef CGEN_ARCH
-enum cgen_operand_type { CGEN_OPERAND_MAX };
-#endif
-
-/* "nil" indicator for the operand instance table */
-#define CGEN_OPERAND_NIL CGEN_OPERAND_MAX
-
-/* A tree of these structs represents the multi-ifield
- structure of an operand's hw-index value, if it exists. */
-
-struct cgen_ifld;
-
-typedef struct cgen_maybe_multi_ifield
-{
- int count; /* 0: indexed by single cgen_ifld (possibly null: dead entry);
- n: indexed by array of more cgen_maybe_multi_ifields. */
- union
- {
- const void *p;
- const struct cgen_maybe_multi_ifield * multi;
- const struct cgen_ifld * leaf;
- } val;
-}
-CGEN_MAYBE_MULTI_IFLD;
-
-/* This struct defines each entry in the operand table. */
-
-typedef struct
-{
- /* Name as it appears in the syntax string. */
- char *name;
-
- /* Operand type. */
- enum cgen_operand_type type;
-
- /* The hardware element associated with this operand. */
- enum cgen_hw_type hw_type;
-
- /* FIXME: We don't yet record ifield definitions, which we should.
- When we do it might make sense to delete start/length (since they will
- be duplicated in the ifield's definition) and replace them with a
- pointer to the ifield entry. */
-
- /* Bit position.
- This is just a hint, and may be unused in more complex operands.
- May be unused for a modifier. */
- unsigned char start;
-
- /* The number of bits in the operand.
- This is just a hint, and may be unused in more complex operands.
- May be unused for a modifier. */
- unsigned char length;
-
- /* The (possibly-multi) ifield used as an index for this operand, if it
- is indexed by a field at all. This substitutes / extends the start and
- length fields above, but unsure at this time whether they are used
- anywhere. */
- CGEN_MAYBE_MULTI_IFLD index_fields;
-#if 0 /* ??? Interesting idea but relocs tend to get too complicated,
- and ABI dependent, for simple table lookups to work. */
- /* Ideally this would be the internal (external?) reloc type. */
- int reloc_type;
-#endif
-
- /* Attributes.
- This should, but technically needn't, appear last. It is a variable sized
- array in that one architecture may have 1 nonbool attribute and another
- may have more. Having this last means the non-architecture specific code
- needn't care, now or tomorrow. The goal is to eventually record
- attributes in their raw form, evaluate them at run-time, and cache the
- values, so this worry will go away anyway. */
-#ifndef CGEN_OPERAND_NBOOL_ATTRS
-#define CGEN_OPERAND_NBOOL_ATTRS 1
-#endif
- CGEN_ATTR_TYPE (CGEN_OPERAND_NBOOL_ATTRS) attrs;
-#define CGEN_OPERAND_ATTRS(operand) (&(operand)->attrs)
-} CGEN_OPERAND;
-
-/* Return value of attribute ATTR in OPERAND. */
-
-#define CGEN_OPERAND_ATTR_VALUE(operand, attr) \
-CGEN_ATTR_VALUE ((operand), CGEN_OPERAND_ATTRS (operand), (attr))
-
-/* Table of operands for selected mach/isa, computed at runtime.
- enum cgen_operand_type is an index into this table (specifically
- `entries'). */
-
-typedef struct {
- /* Pointer to null terminated table of all compiled in entries. */
- const CGEN_OPERAND *init_entries;
- unsigned int entry_size; /* since the attribute member is variable sized */
- /* Array of all entries, initial and run-time added. */
- const CGEN_OPERAND **entries;
- /* Number of elements in `entries'. */
- unsigned int num_entries;
- /* For now, xrealloc is called each time a new entry is added at runtime.
- ??? May wish to keep track of some slop to reduce the number of calls to
- xrealloc, except that there's unlikely to be many and not expected to be
- in speed critical code. */
-} CGEN_OPERAND_TABLE;
-
-extern const CGEN_OPERAND * cgen_operand_lookup_by_name
- (CGEN_CPU_DESC, const char *);
-extern const CGEN_OPERAND * cgen_operand_lookup_by_num
- (CGEN_CPU_DESC, int);
-
-/* Instruction operand instances.
-
- For each instruction, a list of the hardware elements that are read and
- written are recorded. */
-
-/* The type of the instance. */
-
-enum cgen_opinst_type {
- /* End of table marker. */
- CGEN_OPINST_END = 0,
- CGEN_OPINST_INPUT, CGEN_OPINST_OUTPUT
-};
-
-typedef struct
-{
- /* Input or output indicator. */
- enum cgen_opinst_type type;
-
- /* Name of operand. */
- const char *name;
-
- /* The hardware element referenced. */
- enum cgen_hw_type hw_type;
-
- /* The mode in which the operand is being used. */
- enum cgen_mode mode;
-
- /* The operand table entry CGEN_OPERAND_NIL if there is none
- (i.e. an explicit hardware reference). */
- enum cgen_operand_type op_type;
-
- /* If `operand' is "nil", the index (e.g. into array of registers). */
- int index;
-
- /* Attributes.
- ??? This perhaps should be a real attribute struct but there's
- no current need, so we save a bit of space and just have a set of
- flags. The interface is such that this can easily be made attributes
- should it prove useful. */
- unsigned int attrs;
-#define CGEN_OPINST_ATTRS(opinst) ((opinst)->attrs)
-/* Return value of attribute ATTR in OPINST. */
-#define CGEN_OPINST_ATTR(opinst, attr) \
-((CGEN_OPINST_ATTRS (opinst) & (attr)) != 0)
-/* Operand is conditionally referenced (read/written). */
-#define CGEN_OPINST_COND_REF 1
-} CGEN_OPINST;
-
-/* Syntax string.
-
- Each insn format and subexpression has one of these.
-
- The syntax "string" consists of characters (n > 0 && n < 128), and operand
- values (n >= 128), and is terminated by 0. Operand values are 128 + index
- into the operand table. The operand table doesn't exist in C, per se, as
- the data is recorded in the parse/insert/extract/print switch statements. */
-
-/* This should be at least as large as necessary for any target. */
-#define CGEN_MAX_SYNTAX_ELEMENTS 48
-
-/* A target may know its own precise maximum. Assert that it falls below
- the above limit. */
-#ifdef CGEN_ACTUAL_MAX_SYNTAX_ELEMENTS
-#if CGEN_ACTUAL_MAX_SYNTAX_ELEMENTS > CGEN_MAX_SYNTAX_ELEMENTS
-#error "CGEN_ACTUAL_MAX_SYNTAX_ELEMENTS too high - enlarge CGEN_MAX_SYNTAX_ELEMENTS"
-#endif
-#endif
-
-typedef unsigned short CGEN_SYNTAX_CHAR_TYPE;
-
-typedef struct
-{
- CGEN_SYNTAX_CHAR_TYPE syntax[CGEN_MAX_SYNTAX_ELEMENTS];
-} CGEN_SYNTAX;
-
-#define CGEN_SYNTAX_STRING(syn) (syn->syntax)
-#define CGEN_SYNTAX_CHAR_P(c) ((c) < 128)
-#define CGEN_SYNTAX_CHAR(c) ((unsigned char)c)
-#define CGEN_SYNTAX_FIELD(c) ((c) - 128)
-#define CGEN_SYNTAX_MAKE_FIELD(c) ((c) + 128)
-
-/* ??? I can't currently think of any case where the mnemonic doesn't come
- first [and if one ever doesn't building the hash tables will be tricky].
- However, we treat mnemonics as just another operand of the instruction.
- A value of 1 means "this is where the mnemonic appears". 1 isn't
- special other than it's a non-printable ASCII char. */
-
-#define CGEN_SYNTAX_MNEMONIC 1
-#define CGEN_SYNTAX_MNEMONIC_P(ch) ((ch) == CGEN_SYNTAX_MNEMONIC)
-
-/* Instruction fields.
-
- ??? We currently don't allow adding fields at run-time.
- Easy to fix when needed. */
-
-typedef struct cgen_ifld {
- /* Enum of ifield. */
- int num;
-#define CGEN_IFLD_NUM(f) ((f)->num)
-
- /* Name of the field, distinguishes it from all other fields. */
- const char *name;
-#define CGEN_IFLD_NAME(f) ((f)->name)
-
- /* Default offset, in bits, from the start of the insn to the word
- containing the field. */
- int word_offset;
-#define CGEN_IFLD_WORD_OFFSET(f) ((f)->word_offset)
-
- /* Default length of the word containing the field. */
- int word_size;
-#define CGEN_IFLD_WORD_SIZE(f) ((f)->word_size)
-
- /* Default starting bit number.
- Whether lsb=0 or msb=0 is determined by CGEN_INSN_LSB0_P. */
- int start;
-#define CGEN_IFLD_START(f) ((f)->start)
-
- /* Length of the field, in bits. */
- int length;
-#define CGEN_IFLD_LENGTH(f) ((f)->length)
-
-#ifndef CGEN_IFLD_NBOOL_ATTRS
-#define CGEN_IFLD_NBOOL_ATTRS 1
-#endif
- CGEN_ATTR_TYPE (CGEN_IFLD_NBOOL_ATTRS) attrs;
-#define CGEN_IFLD_ATTRS(f) (&(f)->attrs)
-} CGEN_IFLD;
-
-/* Return value of attribute ATTR in IFLD. */
-#define CGEN_IFLD_ATTR_VALUE(ifld, attr) \
-CGEN_ATTR_VALUE ((ifld), CGEN_IFLD_ATTRS (ifld), (attr))
-
-/* Instruction data. */
-
-/* Instruction formats.
-
- Instructions are grouped by format. Associated with an instruction is its
- format. Each insn's opcode table entry contains a format table entry.
- ??? There is usually very few formats compared with the number of insns,
- so one can reduce the size of the opcode table by recording the format table
- as a separate entity. Given that we currently don't, format table entries
- are also distinguished by their operands. This increases the size of the
- table, but reduces the number of tables. It's all minutiae anyway so it
- doesn't really matter [at this point in time].
-
- ??? Support for variable length ISA's is wip. */
-
-/* Accompanying each iformat description is a list of its fields. */
-
-typedef struct {
- const CGEN_IFLD *ifld;
-#define CGEN_IFMT_IFLD_IFLD(ii) ((ii)->ifld)
-} CGEN_IFMT_IFLD;
-
-/* This should be at least as large as necessary for any target. */
-#define CGEN_MAX_IFMT_OPERANDS 16
-
-/* A target may know its own precise maximum. Assert that it falls below
- the above limit. */
-#ifdef CGEN_ACTUAL_MAX_IFMT_OPERANDS
-#if CGEN_ACTUAL_MAX_IFMT_OPERANDS > CGEN_MAX_IFMT_OPERANDS
-#error "CGEN_ACTUAL_MAX_IFMT_OPERANDS too high - enlarge CGEN_MAX_IFMT_OPERANDS"
-#endif
-#endif
-
-
-typedef struct
-{
- /* Length that MASK and VALUE have been calculated to
- [VALUE is recorded elsewhere].
- Normally it is base_insn_bitsize. On [V]LIW architectures where the base
- insn size may be larger than the size of an insn, this field is less than
- base_insn_bitsize. */
- unsigned char mask_length;
-#define CGEN_IFMT_MASK_LENGTH(ifmt) ((ifmt)->mask_length)
-
- /* Total length of instruction, in bits. */
- unsigned char length;
-#define CGEN_IFMT_LENGTH(ifmt) ((ifmt)->length)
-
- /* Mask to apply to the first MASK_LENGTH bits.
- Each insn's value is stored with the insn.
- The first step in recognizing an insn for disassembly is
- (opcode & mask) == value. */
- CGEN_INSN_INT mask;
-#define CGEN_IFMT_MASK(ifmt) ((ifmt)->mask)
-
- /* Instruction fields.
- +1 for trailing NULL. */
- CGEN_IFMT_IFLD iflds[CGEN_MAX_IFMT_OPERANDS + 1];
-#define CGEN_IFMT_IFLDS(ifmt) ((ifmt)->iflds)
-} CGEN_IFMT;
-
-/* Instruction values. */
-
-typedef struct
-{
- /* The opcode portion of the base insn. */
- CGEN_INSN_INT base_value;
-
-#ifdef CGEN_MAX_EXTRA_OPCODE_OPERANDS
- /* Extra opcode values beyond base_value. */
- unsigned long ifield_values[CGEN_MAX_EXTRA_OPCODE_OPERANDS];
-#endif
-} CGEN_IVALUE;
-
-/* Instruction opcode table.
- This contains the syntax and format data of an instruction. */
-
-/* ??? Some ports already have an opcode table yet still need to use the rest
- of what cgen_insn has. Plus keeping the opcode data with the operand
- instance data can create a pretty big file. So we keep them separately.
- Not sure this is a good idea in the long run. */
-
-typedef struct
-{
- /* Indices into parse/insert/extract/print handler tables. */
- struct cgen_opcode_handler handlers;
-#define CGEN_OPCODE_HANDLERS(opc) (& (opc)->handlers)
-
- /* Syntax string. */
- CGEN_SYNTAX syntax;
-#define CGEN_OPCODE_SYNTAX(opc) (& (opc)->syntax)
-
- /* Format entry. */
- const CGEN_IFMT *format;
-#define CGEN_OPCODE_FORMAT(opc) ((opc)->format)
-#define CGEN_OPCODE_MASK_BITSIZE(opc) CGEN_IFMT_MASK_LENGTH (CGEN_OPCODE_FORMAT (opc))
-#define CGEN_OPCODE_BITSIZE(opc) CGEN_IFMT_LENGTH (CGEN_OPCODE_FORMAT (opc))
-#define CGEN_OPCODE_IFLDS(opc) CGEN_IFMT_IFLDS (CGEN_OPCODE_FORMAT (opc))
-
- /* Instruction opcode value. */
- CGEN_IVALUE value;
-#define CGEN_OPCODE_VALUE(opc) (& (opc)->value)
-#define CGEN_OPCODE_BASE_VALUE(opc) (CGEN_OPCODE_VALUE (opc)->base_value)
-#define CGEN_OPCODE_BASE_MASK(opc) CGEN_IFMT_MASK (CGEN_OPCODE_FORMAT (opc))
-} CGEN_OPCODE;
-
-/* Instruction attributes.
- This is made a published type as applications can cache a pointer to
- the attributes for speed. */
-
-#ifndef CGEN_INSN_NBOOL_ATTRS
-#define CGEN_INSN_NBOOL_ATTRS 1
-#endif
-typedef CGEN_ATTR_TYPE (CGEN_INSN_NBOOL_ATTRS) CGEN_INSN_ATTR_TYPE;
-
-/* Enum of architecture independent attributes. */
-
-#ifndef CGEN_ARCH
-/* ??? Numbers here are recorded in two places. */
-typedef enum cgen_insn_attr {
- CGEN_INSN_ALIAS = 0
-} CGEN_INSN_ATTR;
-#define CGEN_ATTR_CGEN_INSN_ALIAS_VALUE(attrs) ((attrs)->bool_ & (1 << CGEN_INSN_ALIAS))
-#endif
-
-/* This struct defines each entry in the instruction table. */
-
-typedef struct
-{
- /* Each real instruction is enumerated. */
- /* ??? This may go away in time. */
- int num;
-#define CGEN_INSN_NUM(insn) ((insn)->base->num)
-
- /* Name of entry (that distinguishes it from all other entries). */
- /* ??? If mnemonics have operands, try to print full mnemonic. */
- const char *name;
-#define CGEN_INSN_NAME(insn) ((insn)->base->name)
-
- /* Mnemonic. This is used when parsing and printing the insn.
- In the case of insns that have operands on the mnemonics, this is
- only the constant part. E.g. for conditional execution of an `add' insn,
- where the full mnemonic is addeq, addne, etc., and the condition is
- treated as an operand, this is only "add". */
- const char *mnemonic;
-#define CGEN_INSN_MNEMONIC(insn) ((insn)->base->mnemonic)
-
- /* Total length of instruction, in bits. */
- int bitsize;
-#define CGEN_INSN_BITSIZE(insn) ((insn)->base->bitsize)
-
-#if 0 /* ??? Disabled for now as there is a problem with embedded newlines
- and the table is already pretty big. Should perhaps be moved
- to a file of its own. */
- /* Semantics, as RTL. */
- /* ??? Plain text or bytecodes? */
- /* ??? Note that the operand instance table could be computed at run-time
- if we parse this and cache the results. Something to eventually do. */
- const char *rtx;
-#define CGEN_INSN_RTX(insn) ((insn)->base->rtx)
-#endif
-
- /* Attributes.
- This must appear last. It is a variable sized array in that one
- architecture may have 1 nonbool attribute and another may have more.
- Having this last means the non-architecture specific code needn't
- care. The goal is to eventually record attributes in their raw form,
- evaluate them at run-time, and cache the values, so this worry will go
- away anyway. */
- CGEN_INSN_ATTR_TYPE attrs;
-#define CGEN_INSN_ATTRS(insn) (&(insn)->base->attrs)
-/* Return value of attribute ATTR in INSN. */
-#define CGEN_INSN_ATTR_VALUE(insn, attr) \
-CGEN_ATTR_VALUE ((insn), CGEN_INSN_ATTRS (insn), (attr))
-#define CGEN_INSN_BITSET_ATTR_VALUE(insn, attr) \
- CGEN_BITSET_ATTR_VALUE ((insn), CGEN_INSN_ATTRS (insn), (attr))
-} CGEN_IBASE;
-
-/* Return non-zero if INSN is the "invalid" insn marker. */
-
-#define CGEN_INSN_INVALID_P(insn) (CGEN_INSN_MNEMONIC (insn) == 0)
-
-/* Main struct contain instruction information.
- BASE is always present, the rest is present only if asked for. */
-
-struct cgen_insn
-{
- /* ??? May be of use to put a type indicator here.
- Then this struct could different info for different classes of insns. */
- /* ??? A speedup can be had by moving `base' into this struct.
- Maybe later. */
- const CGEN_IBASE *base;
- const CGEN_OPCODE *opcode;
- const CGEN_OPINST *opinst;
-
- /* Regex to disambiguate overloaded opcodes */
- void *rx;
-#define CGEN_INSN_RX(insn) ((insn)->rx)
-#define CGEN_MAX_RX_ELEMENTS (CGEN_MAX_SYNTAX_ELEMENTS * 5)
-};
-
-/* Instruction lists.
- This is used for adding new entries and for creating the hash lists. */
-
-typedef struct cgen_insn_list
-{
- struct cgen_insn_list *next;
- const CGEN_INSN *insn;
-} CGEN_INSN_LIST;
-
-/* Table of instructions. */
-
-typedef struct
-{
- const CGEN_INSN *init_entries;
- unsigned int entry_size; /* since the attribute member is variable sized */
- unsigned int num_init_entries;
- CGEN_INSN_LIST *new_entries;
-} CGEN_INSN_TABLE;
-
-/* Return number of instructions. This includes any added at run-time. */
-
-extern int cgen_insn_count (CGEN_CPU_DESC);
-extern int cgen_macro_insn_count (CGEN_CPU_DESC);
-
-/* Macros to access the other insn elements not recorded in CGEN_IBASE. */
-
-/* Fetch INSN's operand instance table. */
-/* ??? Doesn't handle insns added at runtime. */
-#define CGEN_INSN_OPERANDS(insn) ((insn)->opinst)
-
-/* Return INSN's opcode table entry. */
-#define CGEN_INSN_OPCODE(insn) ((insn)->opcode)
-
-/* Return INSN's handler data. */
-#define CGEN_INSN_HANDLERS(insn) CGEN_OPCODE_HANDLERS (CGEN_INSN_OPCODE (insn))
-
-/* Return INSN's syntax. */
-#define CGEN_INSN_SYNTAX(insn) CGEN_OPCODE_SYNTAX (CGEN_INSN_OPCODE (insn))
-
-/* Return size of base mask in bits. */
-#define CGEN_INSN_MASK_BITSIZE(insn) \
- CGEN_OPCODE_MASK_BITSIZE (CGEN_INSN_OPCODE (insn))
-
-/* Return mask of base part of INSN. */
-#define CGEN_INSN_BASE_MASK(insn) \
- CGEN_OPCODE_BASE_MASK (CGEN_INSN_OPCODE (insn))
-
-/* Return value of base part of INSN. */
-#define CGEN_INSN_BASE_VALUE(insn) \
- CGEN_OPCODE_BASE_VALUE (CGEN_INSN_OPCODE (insn))
-
-/* Standard way to test whether INSN is supported by MACH.
- MACH is one of enum mach_attr.
- The "|1" is because the base mach is always selected. */
-#define CGEN_INSN_MACH_HAS_P(insn, mach) \
-((CGEN_INSN_ATTR_VALUE ((insn), CGEN_INSN_MACH) & ((1 << (mach)) | 1)) != 0)
-
-/* Macro instructions.
- Macro insns aren't real insns, they map to one or more real insns.
- E.g. An architecture's "nop" insn may actually be an "mv r0,r0" or
- some such.
-
- Macro insns can expand to nothing (e.g. a nop that is optimized away).
- This is useful in multi-insn macros that build a constant in a register.
- Of course this isn't the default behaviour and must be explicitly enabled.
-
- Assembly of macro-insns is relatively straightforward. Disassembly isn't.
- However, disassembly of at least some kinds of macro insns is important
- in order that the disassembled code preserve the readability of the original
- insn. What is attempted here is to disassemble all "simple" macro-insns,
- where "simple" is currently defined to mean "expands to one real insn".
-
- Simple macro-insns are handled specially. They are emitted as ALIAS's
- of real insns. This simplifies their handling since there's usually more
- of them than any other kind of macro-insn, and proper disassembly of them
- falls out for free. */
-
-/* For each macro-insn there may be multiple expansion possibilities,
- depending on the arguments. This structure is accessed via the `data'
- member of CGEN_INSN. */
-
-typedef struct cgen_minsn_expansion {
- /* Function to do the expansion.
- If the expansion fails (e.g. "no match") NULL is returned.
- Space for the expansion is obtained with malloc.
- It is up to the caller to free it. */
- const char * (* fn)
- (const struct cgen_minsn_expansion *,
- const char *, const char **, int *,
- CGEN_OPERAND **);
-#define CGEN_MIEXPN_FN(ex) ((ex)->fn)
-
- /* Instruction(s) the macro expands to.
- The format of STR is defined by FN.
- It is typically the assembly code of the real insn, but it could also be
- the original Scheme expression or a tokenized form of it (with FN being
- an appropriate interpreter). */
- const char * str;
-#define CGEN_MIEXPN_STR(ex) ((ex)->str)
-} CGEN_MINSN_EXPANSION;
-
-/* Normal expander.
- When supported, this function will convert the input string to another
- string and the parser will be invoked recursively. The output string
- may contain further macro invocations. */
-
-extern const char * cgen_expand_macro_insn
- (CGEN_CPU_DESC, const struct cgen_minsn_expansion *,
- const char *, const char **, int *, CGEN_OPERAND **);
-
-/* The assembler insn table is hashed based on some function of the mnemonic
- (the actually hashing done is up to the target, but we provide a few
- examples like the first letter or a function of the entire mnemonic). */
-
-extern CGEN_INSN_LIST * cgen_asm_lookup_insn
- (CGEN_CPU_DESC, const char *);
-#define CGEN_ASM_LOOKUP_INSN(cd, string) cgen_asm_lookup_insn ((cd), (string))
-#define CGEN_ASM_NEXT_INSN(insn) ((insn)->next)
-
-/* The disassembler insn table is hashed based on some function of machine
- instruction (the actually hashing done is up to the target). */
-
-extern CGEN_INSN_LIST * cgen_dis_lookup_insn
- (CGEN_CPU_DESC, const char *, CGEN_INSN_INT);
-/* FIXME: delete these two */
-#define CGEN_DIS_LOOKUP_INSN(cd, buf, value) cgen_dis_lookup_insn ((cd), (buf), (value))
-#define CGEN_DIS_NEXT_INSN(insn) ((insn)->next)
-
-/* The CPU description.
- A copy of this is created when the cpu table is "opened".
- All global state information is recorded here.
- Access macros are provided for "public" members. */
-
-typedef struct cgen_cpu_desc
-{
- /* Bitmap of selected machine(s) (a la BFD machine number). */
- int machs;
-
- /* Bitmap of selected isa(s). */
- CGEN_BITSET *isas;
-#define CGEN_CPU_ISAS(cd) ((cd)->isas)
-
- /* Current endian. */
- enum cgen_endian endian;
-#define CGEN_CPU_ENDIAN(cd) ((cd)->endian)
-
- /* Current insn endian. */
- enum cgen_endian insn_endian;
-#define CGEN_CPU_INSN_ENDIAN(cd) ((cd)->insn_endian)
-
- /* Word size (in bits). */
- /* ??? Or maybe maximum word size - might we ever need to allow a cpu table
- to be opened for both sparc32/sparc64?
- ??? Another alternative is to create a table of selected machs and
- lazily fetch the data from there. */
- unsigned int word_bitsize;
-
- /* Instruction chunk size (in bits), for purposes of endianness
- conversion. */
- unsigned int insn_chunk_bitsize;
-
- /* Indicator if sizes are unknown.
- This is used by default_insn_bitsize,base_insn_bitsize if there is a
- difference between the selected isa's. */
-#define CGEN_SIZE_UNKNOWN 65535
-
- /* Default instruction size (in bits).
- This is used by the assembler when it encounters an unknown insn. */
- unsigned int default_insn_bitsize;
-
- /* Base instruction size (in bits).
- For non-LIW cpus this is generally the length of the smallest insn.
- For LIW cpus its wip (work-in-progress). For the m32r its 32. */
- unsigned int base_insn_bitsize;
-
- /* Minimum/maximum instruction size (in bits). */
- unsigned int min_insn_bitsize;
- unsigned int max_insn_bitsize;
-
- /* Instruction set variants. */
- const CGEN_ISA *isa_table;
-
- /* Machine variants. */
- const CGEN_MACH *mach_table;
-
- /* Hardware elements. */
- CGEN_HW_TABLE hw_table;
-
- /* Instruction fields. */
- const CGEN_IFLD *ifld_table;
-
- /* Operands. */
- CGEN_OPERAND_TABLE operand_table;
-
- /* Main instruction table. */
- CGEN_INSN_TABLE insn_table;
-#define CGEN_CPU_INSN_TABLE(cd) (& (cd)->insn_table)
-
- /* Macro instructions are defined separately and are combined with real
- insns during hash table computation. */
- CGEN_INSN_TABLE macro_insn_table;
-
- /* Copy of CGEN_INT_INSN_P. */
- int int_insn_p;
-
- /* Called to rebuild the tables after something has changed. */
- void (*rebuild_tables) (CGEN_CPU_DESC);
-
- /* Operand parser callback. */
- cgen_parse_operand_fn * parse_operand_fn;
-
- /* Parse/insert/extract/print cover fns for operands. */
- const char * (*parse_operand)
- (CGEN_CPU_DESC, int opindex_, const char **, CGEN_FIELDS *fields_);
-#ifdef __BFD_H_SEEN__
- const char * (*insert_operand)
- (CGEN_CPU_DESC, int opindex_, CGEN_FIELDS *fields_,
- CGEN_INSN_BYTES_PTR, bfd_vma pc_);
- int (*extract_operand)
- (CGEN_CPU_DESC, int opindex_, CGEN_EXTRACT_INFO *, CGEN_INSN_INT,
- CGEN_FIELDS *fields_, bfd_vma pc_);
- void (*print_operand)
- (CGEN_CPU_DESC, int opindex_, void * info_, CGEN_FIELDS * fields_,
- void const *attrs_, bfd_vma pc_, int length_);
-#else
- const char * (*insert_operand) ();
- int (*extract_operand) ();
- void (*print_operand) ();
-#endif
-#define CGEN_CPU_PARSE_OPERAND(cd) ((cd)->parse_operand)
-#define CGEN_CPU_INSERT_OPERAND(cd) ((cd)->insert_operand)
-#define CGEN_CPU_EXTRACT_OPERAND(cd) ((cd)->extract_operand)
-#define CGEN_CPU_PRINT_OPERAND(cd) ((cd)->print_operand)
-
- /* Size of CGEN_FIELDS struct. */
- unsigned int sizeof_fields;
-#define CGEN_CPU_SIZEOF_FIELDS(cd) ((cd)->sizeof_fields)
-
- /* Set the bitsize field. */
- void (*set_fields_bitsize) (CGEN_FIELDS *fields_, int size_);
-#define CGEN_CPU_SET_FIELDS_BITSIZE(cd) ((cd)->set_fields_bitsize)
-
- /* CGEN_FIELDS accessors. */
- int (*get_int_operand)
- (CGEN_CPU_DESC, int opindex_, const CGEN_FIELDS *fields_);
- void (*set_int_operand)
- (CGEN_CPU_DESC, int opindex_, CGEN_FIELDS *fields_, int value_);
-#ifdef __BFD_H_SEEN__
- bfd_vma (*get_vma_operand)
- (CGEN_CPU_DESC, int opindex_, const CGEN_FIELDS *fields_);
- void (*set_vma_operand)
- (CGEN_CPU_DESC, int opindex_, CGEN_FIELDS *fields_, bfd_vma value_);
-#else
- long (*get_vma_operand) ();
- void (*set_vma_operand) ();
-#endif
-#define CGEN_CPU_GET_INT_OPERAND(cd) ((cd)->get_int_operand)
-#define CGEN_CPU_SET_INT_OPERAND(cd) ((cd)->set_int_operand)
-#define CGEN_CPU_GET_VMA_OPERAND(cd) ((cd)->get_vma_operand)
-#define CGEN_CPU_SET_VMA_OPERAND(cd) ((cd)->set_vma_operand)
-
- /* Instruction parse/insert/extract/print handlers. */
- /* FIXME: make these types uppercase. */
- cgen_parse_fn * const *parse_handlers;
- cgen_insert_fn * const *insert_handlers;
- cgen_extract_fn * const *extract_handlers;
- cgen_print_fn * const *print_handlers;
-#define CGEN_PARSE_FN(cd, insn) (cd->parse_handlers[(insn)->opcode->handlers.parse])
-#define CGEN_INSERT_FN(cd, insn) (cd->insert_handlers[(insn)->opcode->handlers.insert])
-#define CGEN_EXTRACT_FN(cd, insn) (cd->extract_handlers[(insn)->opcode->handlers.extract])
-#define CGEN_PRINT_FN(cd, insn) (cd->print_handlers[(insn)->opcode->handlers.print])
-
- /* Return non-zero if insn should be added to hash table. */
- int (* asm_hash_p) (const CGEN_INSN *);
-
- /* Assembler hash function. */
- unsigned int (* asm_hash) (const char *);
-
- /* Number of entries in assembler hash table. */
- unsigned int asm_hash_size;
-
- /* Return non-zero if insn should be added to hash table. */
- int (* dis_hash_p) (const CGEN_INSN *);
-
- /* Disassembler hash function. */
- unsigned int (* dis_hash) (const char *, CGEN_INSN_INT);
-
- /* Number of entries in disassembler hash table. */
- unsigned int dis_hash_size;
-
- /* Assembler instruction hash table. */
- CGEN_INSN_LIST **asm_hash_table;
- CGEN_INSN_LIST *asm_hash_table_entries;
-
- /* Disassembler instruction hash table. */
- CGEN_INSN_LIST **dis_hash_table;
- CGEN_INSN_LIST *dis_hash_table_entries;
-
- /* This field could be turned into a bitfield if room for other flags is needed. */
- unsigned int signed_overflow_ok_p;
-
-} CGEN_CPU_TABLE;
-
-/* wip */
-#ifndef CGEN_WORD_ENDIAN
-#define CGEN_WORD_ENDIAN(cd) CGEN_CPU_ENDIAN (cd)
-#endif
-#ifndef CGEN_INSN_WORD_ENDIAN
-#define CGEN_INSN_WORD_ENDIAN(cd) CGEN_CPU_INSN_ENDIAN (cd)
-#endif
-
-/* Prototypes of major functions. */
-/* FIXME: Move more CGEN_SYM-defined functions into CGEN_CPU_DESC.
- Not the init fns though, as that would drag in things that mightn't be
- used and might not even exist. */
-
-/* Argument types to cpu_open. */
-
-enum cgen_cpu_open_arg {
- CGEN_CPU_OPEN_END,
- /* Select instruction set(s), arg is bitmap or 0 meaning "unspecified". */
- CGEN_CPU_OPEN_ISAS,
- /* Select machine(s), arg is bitmap or 0 meaning "unspecified". */
- CGEN_CPU_OPEN_MACHS,
- /* Select machine, arg is mach's bfd name.
- Multiple machines can be specified by repeated use. */
- CGEN_CPU_OPEN_BFDMACH,
- /* Select endian, arg is CGEN_ENDIAN_*. */
- CGEN_CPU_OPEN_ENDIAN
-};
-
-/* Open a cpu descriptor table for use.
- ??? We only support ISO C stdargs here, not K&R.
- Laziness, plus experiment to see if anything requires K&R - eventually
- K&R will no longer be supported - e.g. GDB is currently trying this. */
-
-extern CGEN_CPU_DESC CGEN_SYM (cpu_open) (enum cgen_cpu_open_arg, ...);
-
-/* Cover fn to handle simple case. */
-
-extern CGEN_CPU_DESC CGEN_SYM (cpu_open_1)
- (const char *mach_name_, enum cgen_endian endian_);
-
-/* Close it. */
-
-extern void CGEN_SYM (cpu_close) (CGEN_CPU_DESC);
-
-/* Initialize the opcode table for use.
- Called by init_asm/init_dis. */
-
-extern void CGEN_SYM (init_opcode_table) (CGEN_CPU_DESC cd_);
-
-/* build the insn selection regex.
- called by init_opcode_table */
-
-extern char * CGEN_SYM(build_insn_regex) (CGEN_INSN *insn_);
-
-/* Initialize the ibld table for use.
- Called by init_asm/init_dis. */
-
-extern void CGEN_SYM (init_ibld_table) (CGEN_CPU_DESC cd_);
-
-/* Initialize an cpu table for assembler or disassembler use.
- These must be called immediately after cpu_open. */
-
-extern void CGEN_SYM (init_asm) (CGEN_CPU_DESC);
-extern void CGEN_SYM (init_dis) (CGEN_CPU_DESC);
-
-/* Initialize the operand instance table for use. */
-
-extern void CGEN_SYM (init_opinst_table) (CGEN_CPU_DESC cd_);
-
-/* Assemble an instruction. */
-
-extern const CGEN_INSN * CGEN_SYM (assemble_insn)
- (CGEN_CPU_DESC, const char *, CGEN_FIELDS *,
- CGEN_INSN_BYTES_PTR, char **);
-
-extern const CGEN_KEYWORD CGEN_SYM (operand_mach);
-extern int CGEN_SYM (get_mach) (const char *);
-
-/* Operand index computation. */
-extern const CGEN_INSN * cgen_lookup_insn
- (CGEN_CPU_DESC, const CGEN_INSN * insn_,
- CGEN_INSN_INT int_value_, unsigned char *bytes_value_,
- int length_, CGEN_FIELDS *fields_, int alias_p_);
-extern void cgen_get_insn_operands
- (CGEN_CPU_DESC, const CGEN_INSN * insn_,
- const CGEN_FIELDS *fields_, int *indices_);
-extern const CGEN_INSN * cgen_lookup_get_insn_operands
- (CGEN_CPU_DESC, const CGEN_INSN *insn_,
- CGEN_INSN_INT int_value_, unsigned char *bytes_value_,
- int length_, int *indices_, CGEN_FIELDS *fields_);
-
-/* Cover fns to bfd_get/set. */
-
-extern CGEN_INSN_INT cgen_get_insn_value
- (CGEN_CPU_DESC, unsigned char *, int);
-extern void cgen_put_insn_value
- (CGEN_CPU_DESC, unsigned char *, int, CGEN_INSN_INT);
-
-/* Read in a cpu description file.
- ??? For future concerns, including adding instructions to the assembler/
- disassembler at run-time. */
-
-extern const char * cgen_read_cpu_file (CGEN_CPU_DESC, const char * filename_);
-
-/* Allow signed overflow of instruction fields. */
-extern void cgen_set_signed_overflow_ok (CGEN_CPU_DESC);
-
-/* Generate an error message if a signed field in an instruction overflows. */
-extern void cgen_clear_signed_overflow_ok (CGEN_CPU_DESC);
-
-/* Will an error message be generated if a signed field in an instruction overflows ? */
-extern unsigned int cgen_signed_overflow_ok_p (CGEN_CPU_DESC);
-
-#endif /* OPCODE_CGEN_H */
diff --git a/include/opcode/convex.h b/include/opcode/convex.h
deleted file mode 100644
index 4643f5e06..000000000
--- a/include/opcode/convex.h
+++ /dev/null
@@ -1,1708 +0,0 @@
-/* Information for instruction disassembly on the Convex.
- Copyright 1989, 1993, 2002, 2010 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#define xxx 0
-#define rrr 1
-#define rr 2
-#define rxr 3
-#define r 4
-#define nops 5
-#define nr 6
-#define pcrel 7
-#define lr 8
-#define rxl 9
-#define rlr 10
-#define rrl 11
-#define iml 12
-#define imr 13
-#define a1r 14
-#define a1l 15
-#define a2r 16
-#define a2l 17
-#define a3 18
-#define a4 19
-#define a5 20
-#define V 1
-#define S 2
-#define VM 3
-#define A 4
-#define VL 5
-#define VS 6
-#define VLS 7
-#define PSW 8
-/* Prevent an error during "make depend". */
-#if !defined (PC)
-#define PC 9
-#endif
-#define ITR 10
-#define VV 11
-#define ITSR 12
-#define TOC 13
-#define CIR 14
-#define TTR 15
-#define VMU 16
-#define VML 17
-#define ICR 18
-#define TCPU 19
-#define CPUID 20
-#define TID 21
-
-const char *op[] = {
- "",
- "v0\0v1\0v2\0v3\0v4\0v5\0v6\0v7",
- "s0\0s1\0s2\0s3\0s4\0s5\0s6\0s7",
- "vm",
- "sp\0a1\0a2\0a3\0a4\0a5\0ap\0fp",
- "vl",
- "vs",
- "vls",
- "psw",
- "pc",
- "itr",
- "vv",
- "itsr",
- "toc",
- "cir",
- "ttr",
- "vmu",
- "vml",
- "icr",
- "tcpu",
- "cpuid",
- "tid",
-};
-
-const struct formstr format0[] = {
- {0,0,rrr,V,S,S}, /* mov */
- {0,0,rrr,S,S,V}, /* mov */
- {1,1,rrr,V,V,V}, /* merg.t */
- {2,1,rrr,V,V,V}, /* mask.t */
- {1,2,rrr,V,S,V}, /* merg.f */
- {2,2,rrr,V,S,V}, /* mask.f */
- {1,1,rrr,V,S,V}, /* merg.t */
- {2,1,rrr,V,S,V}, /* mask.t */
- {3,3,rrr,V,V,V}, /* mul.s */
- {3,4,rrr,V,V,V}, /* mul.d */
- {4,3,rrr,V,V,V}, /* div.s */
- {4,4,rrr,V,V,V}, /* div.d */
- {3,3,rrr,V,S,V}, /* mul.s */
- {3,4,rrr,V,S,V}, /* mul.d */
- {4,3,rrr,V,S,V}, /* div.s */
- {4,4,rrr,V,S,V}, /* div.d */
- {5,0,rrr,V,V,V}, /* and */
- {6,0,rrr,V,V,V}, /* or */
- {7,0,rrr,V,V,V}, /* xor */
- {8,0,rrr,V,V,V}, /* shf */
- {5,0,rrr,V,S,V}, /* and */
- {6,0,rrr,V,S,V}, /* or */
- {7,0,rrr,V,S,V}, /* xor */
- {8,0,rrr,V,S,V}, /* shf */
- {9,3,rrr,V,V,V}, /* add.s */
- {9,4,rrr,V,V,V}, /* add.d */
- {10,3,rrr,V,V,V}, /* sub.s */
- {10,4,rrr,V,V,V}, /* sub.d */
- {9,3,rrr,V,S,V}, /* add.s */
- {9,4,rrr,V,S,V}, /* add.d */
- {10,3,rrr,V,S,V}, /* sub.s */
- {10,4,rrr,V,S,V}, /* sub.d */
- {9,5,rrr,V,V,V}, /* add.b */
- {9,6,rrr,V,V,V}, /* add.h */
- {9,7,rrr,V,V,V}, /* add.w */
- {9,8,rrr,V,V,V}, /* add.l */
- {9,5,rrr,V,S,V}, /* add.b */
- {9,6,rrr,V,S,V}, /* add.h */
- {9,7,rrr,V,S,V}, /* add.w */
- {9,8,rrr,V,S,V}, /* add.l */
- {10,5,rrr,V,V,V}, /* sub.b */
- {10,6,rrr,V,V,V}, /* sub.h */
- {10,7,rrr,V,V,V}, /* sub.w */
- {10,8,rrr,V,V,V}, /* sub.l */
- {10,5,rrr,V,S,V}, /* sub.b */
- {10,6,rrr,V,S,V}, /* sub.h */
- {10,7,rrr,V,S,V}, /* sub.w */
- {10,8,rrr,V,S,V}, /* sub.l */
- {3,5,rrr,V,V,V}, /* mul.b */
- {3,6,rrr,V,V,V}, /* mul.h */
- {3,7,rrr,V,V,V}, /* mul.w */
- {3,8,rrr,V,V,V}, /* mul.l */
- {3,5,rrr,V,S,V}, /* mul.b */
- {3,6,rrr,V,S,V}, /* mul.h */
- {3,7,rrr,V,S,V}, /* mul.w */
- {3,8,rrr,V,S,V}, /* mul.l */
- {4,5,rrr,V,V,V}, /* div.b */
- {4,6,rrr,V,V,V}, /* div.h */
- {4,7,rrr,V,V,V}, /* div.w */
- {4,8,rrr,V,V,V}, /* div.l */
- {4,5,rrr,V,S,V}, /* div.b */
- {4,6,rrr,V,S,V}, /* div.h */
- {4,7,rrr,V,S,V}, /* div.w */
- {4,8,rrr,V,S,V}, /* div.l */
-};
-
-const struct formstr format1[] = {
- {11,0,xxx,0,0,0}, /* exit */
- {12,0,a3,0,0,0}, /* jmp */
- {13,2,a3,0,0,0}, /* jmpi.f */
- {13,1,a3,0,0,0}, /* jmpi.t */
- {14,2,a3,0,0,0}, /* jmpa.f */
- {14,1,a3,0,0,0}, /* jmpa.t */
- {15,2,a3,0,0,0}, /* jmps.f */
- {15,1,a3,0,0,0}, /* jmps.t */
- {16,0,a3,0,0,0}, /* tac */
- {17,0,a1r,A,0,0}, /* ldea */
- {18,8,a1l,VLS,0,0}, /* ld.l */
- {18,9,a1l,VM,0,0}, /* ld.x */
- {19,0,a3,0,0,0}, /* tas */
- {20,0,a3,0,0,0}, /* pshea */
- {21,8,a2l,VLS,0,0}, /* st.l */
- {21,9,a2l,VM,0,0}, /* st.x */
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {22,0,a3,0,0,0}, /* call */
- {23,0,a3,0,0,0}, /* calls */
- {24,0,a3,0,0,0}, /* callq */
- {25,0,a1r,A,0,0}, /* pfork */
- {26,5,a2r,S,0,0}, /* ste.b */
- {26,6,a2r,S,0,0}, /* ste.h */
- {26,7,a2r,S,0,0}, /* ste.w */
- {26,8,a2r,S,0,0}, /* ste.l */
- {18,5,a1r,A,0,0}, /* ld.b */
- {18,6,a1r,A,0,0}, /* ld.h */
- {18,7,a1r,A,0,0}, /* ld.w */
- {27,7,a1r,A,0,0}, /* incr.w */
- {21,5,a2r,A,0,0}, /* st.b */
- {21,6,a2r,A,0,0}, /* st.h */
- {21,7,a2r,A,0,0}, /* st.w */
- {27,8,a1r,S,0,0}, /* incr.l */
- {18,5,a1r,S,0,0}, /* ld.b */
- {18,6,a1r,S,0,0}, /* ld.h */
- {18,7,a1r,S,0,0}, /* ld.w */
- {18,8,a1r,S,0,0}, /* ld.l */
- {21,5,a2r,S,0,0}, /* st.b */
- {21,6,a2r,S,0,0}, /* st.h */
- {21,7,a2r,S,0,0}, /* st.w */
- {21,8,a2r,S,0,0}, /* st.l */
- {18,5,a1r,V,0,0}, /* ld.b */
- {18,6,a1r,V,0,0}, /* ld.h */
- {18,7,a1r,V,0,0}, /* ld.w */
- {18,8,a1r,V,0,0}, /* ld.l */
- {21,5,a2r,V,0,0}, /* st.b */
- {21,6,a2r,V,0,0}, /* st.h */
- {21,7,a2r,V,0,0}, /* st.w */
- {21,8,a2r,V,0,0}, /* st.l */
-};
-
-const struct formstr format2[] = {
- {28,5,rr,A,A,0}, /* cvtw.b */
- {28,6,rr,A,A,0}, /* cvtw.h */
- {29,7,rr,A,A,0}, /* cvtb.w */
- {30,7,rr,A,A,0}, /* cvth.w */
- {28,5,rr,S,S,0}, /* cvtw.b */
- {28,6,rr,S,S,0}, /* cvtw.h */
- {29,7,rr,S,S,0}, /* cvtb.w */
- {30,7,rr,S,S,0}, /* cvth.w */
- {28,3,rr,S,S,0}, /* cvtw.s */
- {31,7,rr,S,S,0}, /* cvts.w */
- {32,3,rr,S,S,0}, /* cvtd.s */
- {31,4,rr,S,S,0}, /* cvts.d */
- {31,8,rr,S,S,0}, /* cvts.l */
- {32,8,rr,S,S,0}, /* cvtd.l */
- {33,3,rr,S,S,0}, /* cvtl.s */
- {33,4,rr,S,S,0}, /* cvtl.d */
- {34,0,rr,A,A,0}, /* ldpa */
- {8,0,nr,A,0,0}, /* shf */
- {18,6,nr,A,0,0}, /* ld.h */
- {18,7,nr,A,0,0}, /* ld.w */
- {33,7,rr,S,S,0}, /* cvtl.w */
- {28,8,rr,S,S,0}, /* cvtw.l */
- {35,1,rr,S,S,0}, /* plc.t */
- {36,0,rr,S,S,0}, /* tzc */
- {37,6,rr,A,A,0}, /* eq.h */
- {37,7,rr,A,A,0}, /* eq.w */
- {37,6,nr,A,0,0}, /* eq.h */
- {37,7,nr,A,0,0}, /* eq.w */
- {37,5,rr,S,S,0}, /* eq.b */
- {37,6,rr,S,S,0}, /* eq.h */
- {37,7,rr,S,S,0}, /* eq.w */
- {37,8,rr,S,S,0}, /* eq.l */
- {38,6,rr,A,A,0}, /* leu.h */
- {38,7,rr,A,A,0}, /* leu.w */
- {38,6,nr,A,0,0}, /* leu.h */
- {38,7,nr,A,0,0}, /* leu.w */
- {38,5,rr,S,S,0}, /* leu.b */
- {38,6,rr,S,S,0}, /* leu.h */
- {38,7,rr,S,S,0}, /* leu.w */
- {38,8,rr,S,S,0}, /* leu.l */
- {39,6,rr,A,A,0}, /* ltu.h */
- {39,7,rr,A,A,0}, /* ltu.w */
- {39,6,nr,A,0,0}, /* ltu.h */
- {39,7,nr,A,0,0}, /* ltu.w */
- {39,5,rr,S,S,0}, /* ltu.b */
- {39,6,rr,S,S,0}, /* ltu.h */
- {39,7,rr,S,S,0}, /* ltu.w */
- {39,8,rr,S,S,0}, /* ltu.l */
- {40,6,rr,A,A,0}, /* le.h */
- {40,7,rr,A,A,0}, /* le.w */
- {40,6,nr,A,0,0}, /* le.h */
- {40,7,nr,A,0,0}, /* le.w */
- {40,5,rr,S,S,0}, /* le.b */
- {40,6,rr,S,S,0}, /* le.h */
- {40,7,rr,S,S,0}, /* le.w */
- {40,8,rr,S,S,0}, /* le.l */
- {41,6,rr,A,A,0}, /* lt.h */
- {41,7,rr,A,A,0}, /* lt.w */
- {41,6,nr,A,0,0}, /* lt.h */
- {41,7,nr,A,0,0}, /* lt.w */
- {41,5,rr,S,S,0}, /* lt.b */
- {41,6,rr,S,S,0}, /* lt.h */
- {41,7,rr,S,S,0}, /* lt.w */
- {41,8,rr,S,S,0}, /* lt.l */
- {9,7,rr,S,A,0}, /* add.w */
- {8,0,rr,A,A,0}, /* shf */
- {0,0,rr,A,A,0}, /* mov */
- {0,0,rr,S,A,0}, /* mov */
- {0,7,rr,S,S,0}, /* mov.w */
- {8,0,rr,S,S,0}, /* shf */
- {0,0,rr,S,S,0}, /* mov */
- {0,0,rr,A,S,0}, /* mov */
- {5,0,rr,A,A,0}, /* and */
- {6,0,rr,A,A,0}, /* or */
- {7,0,rr,A,A,0}, /* xor */
- {42,0,rr,A,A,0}, /* not */
- {5,0,rr,S,S,0}, /* and */
- {6,0,rr,S,S,0}, /* or */
- {7,0,rr,S,S,0}, /* xor */
- {42,0,rr,S,S,0}, /* not */
- {40,3,rr,S,S,0}, /* le.s */
- {40,4,rr,S,S,0}, /* le.d */
- {41,3,rr,S,S,0}, /* lt.s */
- {41,4,rr,S,S,0}, /* lt.d */
- {9,3,rr,S,S,0}, /* add.s */
- {9,4,rr,S,S,0}, /* add.d */
- {10,3,rr,S,S,0}, /* sub.s */
- {10,4,rr,S,S,0}, /* sub.d */
- {37,3,rr,S,S,0}, /* eq.s */
- {37,4,rr,S,S,0}, /* eq.d */
- {43,6,rr,A,A,0}, /* neg.h */
- {43,7,rr,A,A,0}, /* neg.w */
- {3,3,rr,S,S,0}, /* mul.s */
- {3,4,rr,S,S,0}, /* mul.d */
- {4,3,rr,S,S,0}, /* div.s */
- {4,4,rr,S,S,0}, /* div.d */
- {9,6,rr,A,A,0}, /* add.h */
- {9,7,rr,A,A,0}, /* add.w */
- {9,6,nr,A,0,0}, /* add.h */
- {9,7,nr,A,0,0}, /* add.w */
- {9,5,rr,S,S,0}, /* add.b */
- {9,6,rr,S,S,0}, /* add.h */
- {9,7,rr,S,S,0}, /* add.w */
- {9,8,rr,S,S,0}, /* add.l */
- {10,6,rr,A,A,0}, /* sub.h */
- {10,7,rr,A,A,0}, /* sub.w */
- {10,6,nr,A,0,0}, /* sub.h */
- {10,7,nr,A,0,0}, /* sub.w */
- {10,5,rr,S,S,0}, /* sub.b */
- {10,6,rr,S,S,0}, /* sub.h */
- {10,7,rr,S,S,0}, /* sub.w */
- {10,8,rr,S,S,0}, /* sub.l */
- {3,6,rr,A,A,0}, /* mul.h */
- {3,7,rr,A,A,0}, /* mul.w */
- {3,6,nr,A,0,0}, /* mul.h */
- {3,7,nr,A,0,0}, /* mul.w */
- {3,5,rr,S,S,0}, /* mul.b */
- {3,6,rr,S,S,0}, /* mul.h */
- {3,7,rr,S,S,0}, /* mul.w */
- {3,8,rr,S,S,0}, /* mul.l */
- {4,6,rr,A,A,0}, /* div.h */
- {4,7,rr,A,A,0}, /* div.w */
- {4,6,nr,A,0,0}, /* div.h */
- {4,7,nr,A,0,0}, /* div.w */
- {4,5,rr,S,S,0}, /* div.b */
- {4,6,rr,S,S,0}, /* div.h */
- {4,7,rr,S,S,0}, /* div.w */
- {4,8,rr,S,S,0}, /* div.l */
-};
-
-const struct formstr format3[] = {
- {32,3,rr,V,V,0}, /* cvtd.s */
- {31,4,rr,V,V,0}, /* cvts.d */
- {33,4,rr,V,V,0}, /* cvtl.d */
- {32,8,rr,V,V,0}, /* cvtd.l */
- {0,0,rrl,S,S,VM}, /* mov */
- {0,0,rlr,S,VM,S}, /* mov */
- {0,0,0,0,0,0},
- {44,0,rr,S,S,0}, /* lop */
- {36,0,rr,V,V,0}, /* tzc */
- {44,0,rr,V,V,0}, /* lop */
- {0,0,0,0,0,0},
- {42,0,rr,V,V,0}, /* not */
- {8,0,rr,S,V,0}, /* shf */
- {35,1,rr,V,V,0}, /* plc.t */
- {45,2,rr,V,V,0}, /* cprs.f */
- {45,1,rr,V,V,0}, /* cprs.t */
- {37,3,rr,V,V,0}, /* eq.s */
- {37,4,rr,V,V,0}, /* eq.d */
- {43,3,rr,V,V,0}, /* neg.s */
- {43,4,rr,V,V,0}, /* neg.d */
- {37,3,rr,S,V,0}, /* eq.s */
- {37,4,rr,S,V,0}, /* eq.d */
- {43,3,rr,S,S,0}, /* neg.s */
- {43,4,rr,S,S,0}, /* neg.d */
- {40,3,rr,V,V,0}, /* le.s */
- {40,4,rr,V,V,0}, /* le.d */
- {41,3,rr,V,V,0}, /* lt.s */
- {41,4,rr,V,V,0}, /* lt.d */
- {40,3,rr,S,V,0}, /* le.s */
- {40,4,rr,S,V,0}, /* le.d */
- {41,3,rr,S,V,0}, /* lt.s */
- {41,4,rr,S,V,0}, /* lt.d */
- {37,5,rr,V,V,0}, /* eq.b */
- {37,6,rr,V,V,0}, /* eq.h */
- {37,7,rr,V,V,0}, /* eq.w */
- {37,8,rr,V,V,0}, /* eq.l */
- {37,5,rr,S,V,0}, /* eq.b */
- {37,6,rr,S,V,0}, /* eq.h */
- {37,7,rr,S,V,0}, /* eq.w */
- {37,8,rr,S,V,0}, /* eq.l */
- {40,5,rr,V,V,0}, /* le.b */
- {40,6,rr,V,V,0}, /* le.h */
- {40,7,rr,V,V,0}, /* le.w */
- {40,8,rr,V,V,0}, /* le.l */
- {40,5,rr,S,V,0}, /* le.b */
- {40,6,rr,S,V,0}, /* le.h */
- {40,7,rr,S,V,0}, /* le.w */
- {40,8,rr,S,V,0}, /* le.l */
- {41,5,rr,V,V,0}, /* lt.b */
- {41,6,rr,V,V,0}, /* lt.h */
- {41,7,rr,V,V,0}, /* lt.w */
- {41,8,rr,V,V,0}, /* lt.l */
- {41,5,rr,S,V,0}, /* lt.b */
- {41,6,rr,S,V,0}, /* lt.h */
- {41,7,rr,S,V,0}, /* lt.w */
- {41,8,rr,S,V,0}, /* lt.l */
- {43,5,rr,V,V,0}, /* neg.b */
- {43,6,rr,V,V,0}, /* neg.h */
- {43,7,rr,V,V,0}, /* neg.w */
- {43,8,rr,V,V,0}, /* neg.l */
- {43,5,rr,S,S,0}, /* neg.b */
- {43,6,rr,S,S,0}, /* neg.h */
- {43,7,rr,S,S,0}, /* neg.w */
- {43,8,rr,S,S,0}, /* neg.l */
-};
-
-const struct formstr format4[] = {
- {46,0,nops,0,0,0}, /* nop */
- {47,0,pcrel,0,0,0}, /* br */
- {48,2,pcrel,0,0,0}, /* bri.f */
- {48,1,pcrel,0,0,0}, /* bri.t */
- {49,2,pcrel,0,0,0}, /* bra.f */
- {49,1,pcrel,0,0,0}, /* bra.t */
- {50,2,pcrel,0,0,0}, /* brs.f */
- {50,1,pcrel,0,0,0}, /* brs.t */
-};
-
-const struct formstr format5[] = {
- {51,5,rr,V,V,0}, /* ldvi.b */
- {51,6,rr,V,V,0}, /* ldvi.h */
- {51,7,rr,V,V,0}, /* ldvi.w */
- {51,8,rr,V,V,0}, /* ldvi.l */
- {28,3,rr,V,V,0}, /* cvtw.s */
- {31,7,rr,V,V,0}, /* cvts.w */
- {28,8,rr,V,V,0}, /* cvtw.l */
- {33,7,rr,V,V,0}, /* cvtl.w */
- {52,5,rxr,V,V,0}, /* stvi.b */
- {52,6,rxr,V,V,0}, /* stvi.h */
- {52,7,rxr,V,V,0}, /* stvi.w */
- {52,8,rxr,V,V,0}, /* stvi.l */
- {52,5,rxr,S,V,0}, /* stvi.b */
- {52,6,rxr,S,V,0}, /* stvi.h */
- {52,7,rxr,S,V,0}, /* stvi.w */
- {52,8,rxr,S,V,0}, /* stvi.l */
-};
-
-const struct formstr format6[] = {
- {53,0,r,A,0,0}, /* ldsdr */
- {54,0,r,A,0,0}, /* ldkdr */
- {55,3,r,S,0,0}, /* ln.s */
- {55,4,r,S,0,0}, /* ln.d */
- {56,0,nops,0,0,0}, /* patu */
- {57,0,r,A,0,0}, /* pate */
- {58,0,nops,0,0,0}, /* pich */
- {59,0,nops,0,0,0}, /* plch */
- {0,0,lr,PSW,A,0}, /* mov */
- {0,0,rxl,A,PSW,0}, /* mov */
- {0,0,lr,PC,A,0}, /* mov */
- {60,0,r,S,0,0}, /* idle */
- {0,0,lr,ITR,S,0}, /* mov */
- {0,0,rxl,S,ITR,0}, /* mov */
- {0,0,0,0,0,0},
- {0,0,rxl,S,ITSR,0}, /* mov */
- {61,0,nops,0,0,0}, /* rtnq */
- {62,0,nops,0,0,0}, /* cfork */
- {63,0,nops,0,0,0}, /* rtn */
- {64,0,nops,0,0,0}, /* wfork */
- {65,0,nops,0,0,0}, /* join */
- {66,0,nops,0,0,0}, /* rtnc */
- {67,3,r,S,0,0}, /* exp.s */
- {67,4,r,S,0,0}, /* exp.d */
- {68,3,r,S,0,0}, /* sin.s */
- {68,4,r,S,0,0}, /* sin.d */
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {69,3,r,S,0,0}, /* cos.s */
- {69,4,r,S,0,0}, /* cos.d */
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {70,7,r,A,0,0}, /* psh.w */
- {0,0,0,0,0,0},
- {71,7,r,A,0,0}, /* pop.w */
- {0,0,0,0,0,0},
- {70,7,r,S,0,0}, /* psh.w */
- {70,8,r,S,0,0}, /* psh.l */
- {71,7,r,S,0,0}, /* pop.w */
- {71,8,r,S,0,0}, /* pop.l */
- {72,0,nops,0,0,0}, /* eni */
- {73,0,nops,0,0,0}, /* dsi */
- {74,0,nops,0,0,0}, /* bkpt */
- {75,0,nops,0,0,0}, /* msync */
- {76,0,r,S,0,0}, /* mski */
- {77,0,r,S,0,0}, /* xmti */
- {0,0,rxl,S,VV,0}, /* mov */
- {78,0,nops,0,0,0}, /* tstvv */
- {0,0,lr,VS,A,0}, /* mov */
- {0,0,rxl,A,VS,0}, /* mov */
- {0,0,lr,VL,A,0}, /* mov */
- {0,0,rxl,A,VL,0}, /* mov */
- {0,7,lr,VS,S,0}, /* mov.w */
- {0,7,rxl,S,VS,0}, /* mov.w */
- {0,7,lr,VL,S,0}, /* mov.w */
- {0,7,rxl,S,VL,0}, /* mov.w */
- {79,0,r,A,0,0}, /* diag */
- {80,0,nops,0,0,0}, /* pbkpt */
- {81,3,r,S,0,0}, /* sqrt.s */
- {81,4,r,S,0,0}, /* sqrt.d */
- {82,0,nops,0,0,0}, /* casr */
- {0,0,0,0,0,0},
- {83,3,r,S,0,0}, /* atan.s */
- {83,4,r,S,0,0}, /* atan.d */
-};
-
-const struct formstr format7[] = {
- {84,5,r,V,0,0}, /* sum.b */
- {84,6,r,V,0,0}, /* sum.h */
- {84,7,r,V,0,0}, /* sum.w */
- {84,8,r,V,0,0}, /* sum.l */
- {85,0,r,V,0,0}, /* all */
- {86,0,r,V,0,0}, /* any */
- {87,0,r,V,0,0}, /* parity */
- {0,0,0,0,0,0},
- {88,5,r,V,0,0}, /* max.b */
- {88,6,r,V,0,0}, /* max.h */
- {88,7,r,V,0,0}, /* max.w */
- {88,8,r,V,0,0}, /* max.l */
- {89,5,r,V,0,0}, /* min.b */
- {89,6,r,V,0,0}, /* min.h */
- {89,7,r,V,0,0}, /* min.w */
- {89,8,r,V,0,0}, /* min.l */
- {84,3,r,V,0,0}, /* sum.s */
- {84,4,r,V,0,0}, /* sum.d */
- {90,3,r,V,0,0}, /* prod.s */
- {90,4,r,V,0,0}, /* prod.d */
- {88,3,r,V,0,0}, /* max.s */
- {88,4,r,V,0,0}, /* max.d */
- {89,3,r,V,0,0}, /* min.s */
- {89,4,r,V,0,0}, /* min.d */
- {90,5,r,V,0,0}, /* prod.b */
- {90,6,r,V,0,0}, /* prod.h */
- {90,7,r,V,0,0}, /* prod.w */
- {90,8,r,V,0,0}, /* prod.l */
- {35,2,lr,VM,S,0}, /* plc.f */
- {35,1,lr,VM,S,0}, /* plc.t */
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
-};
-
-const struct formstr formatx[] = {
- {0,0,0,0,0,0},
-};
-
-const struct formstr format1a[] = {
- {91,0,imr,A,0,0}, /* halt */
- {92,0,a4,0,0,0}, /* sysc */
- {18,6,imr,A,0,0}, /* ld.h */
- {18,7,imr,A,0,0}, /* ld.w */
- {5,0,imr,A,0,0}, /* and */
- {6,0,imr,A,0,0}, /* or */
- {7,0,imr,A,0,0}, /* xor */
- {8,0,imr,A,0,0}, /* shf */
- {9,6,imr,A,0,0}, /* add.h */
- {9,7,imr,A,0,0}, /* add.w */
- {10,6,imr,A,0,0}, /* sub.h */
- {10,7,imr,A,0,0}, /* sub.w */
- {3,6,imr,A,0,0}, /* mul.h */
- {3,7,imr,A,0,0}, /* mul.w */
- {4,6,imr,A,0,0}, /* div.h */
- {4,7,imr,A,0,0}, /* div.w */
- {18,7,iml,VL,0,0}, /* ld.w */
- {18,7,iml,VS,0,0}, /* ld.w */
- {0,0,0,0,0,0},
- {8,7,imr,S,0,0}, /* shf.w */
- {93,0,a5,0,0,0}, /* trap */
- {0,0,0,0,0,0},
- {37,6,imr,A,0,0}, /* eq.h */
- {37,7,imr,A,0,0}, /* eq.w */
- {38,6,imr,A,0,0}, /* leu.h */
- {38,7,imr,A,0,0}, /* leu.w */
- {39,6,imr,A,0,0}, /* ltu.h */
- {39,7,imr,A,0,0}, /* ltu.w */
- {40,6,imr,A,0,0}, /* le.h */
- {40,7,imr,A,0,0}, /* le.w */
- {41,6,imr,A,0,0}, /* lt.h */
- {41,7,imr,A,0,0}, /* lt.w */
-};
-
-const struct formstr format1b[] = {
- {18,4,imr,S,0,0}, /* ld.d */
- {18,10,imr,S,0,0}, /* ld.u */
- {18,8,imr,S,0,0}, /* ld.l */
- {18,7,imr,S,0,0}, /* ld.w */
- {5,0,imr,S,0,0}, /* and */
- {6,0,imr,S,0,0}, /* or */
- {7,0,imr,S,0,0}, /* xor */
- {8,0,imr,S,0,0}, /* shf */
- {9,6,imr,S,0,0}, /* add.h */
- {9,7,imr,S,0,0}, /* add.w */
- {10,6,imr,S,0,0}, /* sub.h */
- {10,7,imr,S,0,0}, /* sub.w */
- {3,6,imr,S,0,0}, /* mul.h */
- {3,7,imr,S,0,0}, /* mul.w */
- {4,6,imr,S,0,0}, /* div.h */
- {4,7,imr,S,0,0}, /* div.w */
- {9,3,imr,S,0,0}, /* add.s */
- {10,3,imr,S,0,0}, /* sub.s */
- {3,3,imr,S,0,0}, /* mul.s */
- {4,3,imr,S,0,0}, /* div.s */
- {40,3,imr,S,0,0}, /* le.s */
- {41,3,imr,S,0,0}, /* lt.s */
- {37,6,imr,S,0,0}, /* eq.h */
- {37,7,imr,S,0,0}, /* eq.w */
- {38,6,imr,S,0,0}, /* leu.h */
- {38,7,imr,S,0,0}, /* leu.w */
- {39,6,imr,S,0,0}, /* ltu.h */
- {39,7,imr,S,0,0}, /* ltu.w */
- {40,6,imr,S,0,0}, /* le.h */
- {40,7,imr,S,0,0}, /* le.w */
- {41,6,imr,S,0,0}, /* lt.h */
- {41,7,imr,S,0,0}, /* lt.w */
-};
-
-const struct formstr e0_format0[] = {
- {10,3,rrr,S,V,V}, /* sub.s */
- {10,4,rrr,S,V,V}, /* sub.d */
- {4,3,rrr,S,V,V}, /* div.s */
- {4,4,rrr,S,V,V}, /* div.d */
- {10,11,rrr,S,V,V}, /* sub.s.f */
- {10,12,rrr,S,V,V}, /* sub.d.f */
- {4,11,rrr,S,V,V}, /* div.s.f */
- {4,12,rrr,S,V,V}, /* div.d.f */
- {3,11,rrr,V,V,V}, /* mul.s.f */
- {3,12,rrr,V,V,V}, /* mul.d.f */
- {4,11,rrr,V,V,V}, /* div.s.f */
- {4,12,rrr,V,V,V}, /* div.d.f */
- {3,11,rrr,V,S,V}, /* mul.s.f */
- {3,12,rrr,V,S,V}, /* mul.d.f */
- {4,11,rrr,V,S,V}, /* div.s.f */
- {4,12,rrr,V,S,V}, /* div.d.f */
- {5,2,rrr,V,V,V}, /* and.f */
- {6,2,rrr,V,V,V}, /* or.f */
- {7,2,rrr,V,V,V}, /* xor.f */
- {8,2,rrr,V,V,V}, /* shf.f */
- {5,2,rrr,V,S,V}, /* and.f */
- {6,2,rrr,V,S,V}, /* or.f */
- {7,2,rrr,V,S,V}, /* xor.f */
- {8,2,rrr,V,S,V}, /* shf.f */
- {9,11,rrr,V,V,V}, /* add.s.f */
- {9,12,rrr,V,V,V}, /* add.d.f */
- {10,11,rrr,V,V,V}, /* sub.s.f */
- {10,12,rrr,V,V,V}, /* sub.d.f */
- {9,11,rrr,V,S,V}, /* add.s.f */
- {9,12,rrr,V,S,V}, /* add.d.f */
- {10,11,rrr,V,S,V}, /* sub.s.f */
- {10,12,rrr,V,S,V}, /* sub.d.f */
- {9,13,rrr,V,V,V}, /* add.b.f */
- {9,14,rrr,V,V,V}, /* add.h.f */
- {9,15,rrr,V,V,V}, /* add.w.f */
- {9,16,rrr,V,V,V}, /* add.l.f */
- {9,13,rrr,V,S,V}, /* add.b.f */
- {9,14,rrr,V,S,V}, /* add.h.f */
- {9,15,rrr,V,S,V}, /* add.w.f */
- {9,16,rrr,V,S,V}, /* add.l.f */
- {10,13,rrr,V,V,V}, /* sub.b.f */
- {10,14,rrr,V,V,V}, /* sub.h.f */
- {10,15,rrr,V,V,V}, /* sub.w.f */
- {10,16,rrr,V,V,V}, /* sub.l.f */
- {10,13,rrr,V,S,V}, /* sub.b.f */
- {10,14,rrr,V,S,V}, /* sub.h.f */
- {10,15,rrr,V,S,V}, /* sub.w.f */
- {10,16,rrr,V,S,V}, /* sub.l.f */
- {3,13,rrr,V,V,V}, /* mul.b.f */
- {3,14,rrr,V,V,V}, /* mul.h.f */
- {3,15,rrr,V,V,V}, /* mul.w.f */
- {3,16,rrr,V,V,V}, /* mul.l.f */
- {3,13,rrr,V,S,V}, /* mul.b.f */
- {3,14,rrr,V,S,V}, /* mul.h.f */
- {3,15,rrr,V,S,V}, /* mul.w.f */
- {3,16,rrr,V,S,V}, /* mul.l.f */
- {4,13,rrr,V,V,V}, /* div.b.f */
- {4,14,rrr,V,V,V}, /* div.h.f */
- {4,15,rrr,V,V,V}, /* div.w.f */
- {4,16,rrr,V,V,V}, /* div.l.f */
- {4,13,rrr,V,S,V}, /* div.b.f */
- {4,14,rrr,V,S,V}, /* div.h.f */
- {4,15,rrr,V,S,V}, /* div.w.f */
- {4,16,rrr,V,S,V}, /* div.l.f */
-};
-
-const struct formstr e0_format1[] = {
- {0,0,0,0,0,0},
- {94,0,a3,0,0,0}, /* tst */
- {95,0,a3,0,0,0}, /* lck */
- {96,0,a3,0,0,0}, /* ulk */
- {17,0,a1r,S,0,0}, /* ldea */
- {97,0,a1r,A,0,0}, /* spawn */
- {98,0,a1r,A,0,0}, /* ldcmr */
- {99,0,a2r,A,0,0}, /* stcmr */
- {100,0,a1r,A,0,0}, /* popr */
- {101,0,a2r,A,0,0}, /* pshr */
- {102,7,a1r,A,0,0}, /* rcvr.w */
- {103,7,a2r,A,0,0}, /* matm.w */
- {104,7,a2r,A,0,0}, /* sndr.w */
- {104,8,a2r,S,0,0}, /* sndr.l */
- {102,8,a1r,S,0,0}, /* rcvr.l */
- {103,8,a2r,S,0,0}, /* matm.l */
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {105,7,a2r,A,0,0}, /* putr.w */
- {105,8,a2r,S,0,0}, /* putr.l */
- {106,7,a1r,A,0,0}, /* getr.w */
- {106,8,a1r,S,0,0}, /* getr.l */
- {26,13,a2r,S,0,0}, /* ste.b.f */
- {26,14,a2r,S,0,0}, /* ste.h.f */
- {26,15,a2r,S,0,0}, /* ste.w.f */
- {26,16,a2r,S,0,0}, /* ste.l.f */
- {107,7,a2r,A,0,0}, /* matr.w */
- {108,7,a2r,A,0,0}, /* mat.w */
- {109,7,a1r,A,0,0}, /* get.w */
- {110,7,a1r,A,0,0}, /* rcv.w */
- {0,0,0,0,0,0},
- {111,7,a1r,A,0,0}, /* inc.w */
- {112,7,a2r,A,0,0}, /* put.w */
- {113,7,a2r,A,0,0}, /* snd.w */
- {107,8,a2r,S,0,0}, /* matr.l */
- {108,8,a2r,S,0,0}, /* mat.l */
- {109,8,a1r,S,0,0}, /* get.l */
- {110,8,a1r,S,0,0}, /* rcv.l */
- {0,0,0,0,0,0},
- {111,8,a1r,S,0,0}, /* inc.l */
- {112,8,a2r,S,0,0}, /* put.l */
- {113,8,a2r,S,0,0}, /* snd.l */
- {18,13,a1r,V,0,0}, /* ld.b.f */
- {18,14,a1r,V,0,0}, /* ld.h.f */
- {18,15,a1r,V,0,0}, /* ld.w.f */
- {18,16,a1r,V,0,0}, /* ld.l.f */
- {21,13,a2r,V,0,0}, /* st.b.f */
- {21,14,a2r,V,0,0}, /* st.h.f */
- {21,15,a2r,V,0,0}, /* st.w.f */
- {21,16,a2r,V,0,0}, /* st.l.f */
-};
-
-const struct formstr e0_format2[] = {
- {28,5,rr,V,V,0}, /* cvtw.b */
- {28,6,rr,V,V,0}, /* cvtw.h */
- {29,7,rr,V,V,0}, /* cvtb.w */
- {30,7,rr,V,V,0}, /* cvth.w */
- {28,13,rr,V,V,0}, /* cvtw.b.f */
- {28,14,rr,V,V,0}, /* cvtw.h.f */
- {29,15,rr,V,V,0}, /* cvtb.w.f */
- {30,15,rr,V,V,0}, /* cvth.w.f */
- {31,8,rr,V,V,0}, /* cvts.l */
- {32,7,rr,V,V,0}, /* cvtd.w */
- {33,3,rr,V,V,0}, /* cvtl.s */
- {28,4,rr,V,V,0}, /* cvtw.d */
- {31,16,rr,V,V,0}, /* cvts.l.f */
- {32,15,rr,V,V,0}, /* cvtd.w.f */
- {33,11,rr,V,V,0}, /* cvtl.s.f */
- {28,12,rr,V,V,0}, /* cvtw.d.f */
- {114,0,rr,S,S,0}, /* enal */
- {8,7,rr,S,S,0}, /* shf.w */
- {115,0,rr,S,S,0}, /* enag */
- {0,0,0,0,0,0},
- {28,4,rr,S,S,0}, /* cvtw.d */
- {32,7,rr,S,S,0}, /* cvtd.w */
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {116,3,rr,S,S,0}, /* frint.s */
- {116,4,rr,S,S,0}, /* frint.d */
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {116,3,rr,V,V,0}, /* frint.s */
- {116,4,rr,V,V,0}, /* frint.d */
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {116,11,rr,V,V,0}, /* frint.s.f */
- {116,12,rr,V,V,0}, /* frint.d.f */
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {81,3,rr,V,V,0}, /* sqrt.s */
- {81,4,rr,V,V,0}, /* sqrt.d */
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {81,11,rr,V,V,0}, /* sqrt.s.f */
- {81,12,rr,V,V,0}, /* sqrt.d.f */
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
-};
-
-const struct formstr e0_format3[] = {
- {32,11,rr,V,V,0}, /* cvtd.s.f */
- {31,12,rr,V,V,0}, /* cvts.d.f */
- {33,12,rr,V,V,0}, /* cvtl.d.f */
- {32,16,rr,V,V,0}, /* cvtd.l.f */
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {36,2,rr,V,V,0}, /* tzc.f */
- {44,2,rr,V,V,0}, /* lop.f */
- {117,2,rr,V,V,0}, /* xpnd.f */
- {42,2,rr,V,V,0}, /* not.f */
- {8,2,rr,S,V,0}, /* shf.f */
- {35,17,rr,V,V,0}, /* plc.t.f */
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {37,11,rr,V,V,0}, /* eq.s.f */
- {37,12,rr,V,V,0}, /* eq.d.f */
- {43,11,rr,V,V,0}, /* neg.s.f */
- {43,12,rr,V,V,0}, /* neg.d.f */
- {37,11,rr,S,V,0}, /* eq.s.f */
- {37,12,rr,S,V,0}, /* eq.d.f */
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {40,11,rr,V,V,0}, /* le.s.f */
- {40,12,rr,V,V,0}, /* le.d.f */
- {41,11,rr,V,V,0}, /* lt.s.f */
- {41,12,rr,V,V,0}, /* lt.d.f */
- {40,11,rr,S,V,0}, /* le.s.f */
- {40,12,rr,S,V,0}, /* le.d.f */
- {41,11,rr,S,V,0}, /* lt.s.f */
- {41,12,rr,S,V,0}, /* lt.d.f */
- {37,13,rr,V,V,0}, /* eq.b.f */
- {37,14,rr,V,V,0}, /* eq.h.f */
- {37,15,rr,V,V,0}, /* eq.w.f */
- {37,16,rr,V,V,0}, /* eq.l.f */
- {37,13,rr,S,V,0}, /* eq.b.f */
- {37,14,rr,S,V,0}, /* eq.h.f */
- {37,15,rr,S,V,0}, /* eq.w.f */
- {37,16,rr,S,V,0}, /* eq.l.f */
- {40,13,rr,V,V,0}, /* le.b.f */
- {40,14,rr,V,V,0}, /* le.h.f */
- {40,15,rr,V,V,0}, /* le.w.f */
- {40,16,rr,V,V,0}, /* le.l.f */
- {40,13,rr,S,V,0}, /* le.b.f */
- {40,14,rr,S,V,0}, /* le.h.f */
- {40,15,rr,S,V,0}, /* le.w.f */
- {40,16,rr,S,V,0}, /* le.l.f */
- {41,13,rr,V,V,0}, /* lt.b.f */
- {41,14,rr,V,V,0}, /* lt.h.f */
- {41,15,rr,V,V,0}, /* lt.w.f */
- {41,16,rr,V,V,0}, /* lt.l.f */
- {41,13,rr,S,V,0}, /* lt.b.f */
- {41,14,rr,S,V,0}, /* lt.h.f */
- {41,15,rr,S,V,0}, /* lt.w.f */
- {41,16,rr,S,V,0}, /* lt.l.f */
- {43,13,rr,V,V,0}, /* neg.b.f */
- {43,14,rr,V,V,0}, /* neg.h.f */
- {43,15,rr,V,V,0}, /* neg.w.f */
- {43,16,rr,V,V,0}, /* neg.l.f */
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
-};
-
-const struct formstr e0_format4[] = {
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
-};
-
-const struct formstr e0_format5[] = {
- {51,13,rr,V,V,0}, /* ldvi.b.f */
- {51,14,rr,V,V,0}, /* ldvi.h.f */
- {51,15,rr,V,V,0}, /* ldvi.w.f */
- {51,16,rr,V,V,0}, /* ldvi.l.f */
- {28,11,rr,V,V,0}, /* cvtw.s.f */
- {31,15,rr,V,V,0}, /* cvts.w.f */
- {28,16,rr,V,V,0}, /* cvtw.l.f */
- {33,15,rr,V,V,0}, /* cvtl.w.f */
- {52,13,rxr,V,V,0}, /* stvi.b.f */
- {52,14,rxr,V,V,0}, /* stvi.h.f */
- {52,15,rxr,V,V,0}, /* stvi.w.f */
- {52,16,rxr,V,V,0}, /* stvi.l.f */
- {52,13,rxr,S,V,0}, /* stvi.b.f */
- {52,14,rxr,S,V,0}, /* stvi.h.f */
- {52,15,rxr,S,V,0}, /* stvi.w.f */
- {52,16,rxr,S,V,0}, /* stvi.l.f */
-};
-
-const struct formstr e0_format6[] = {
- {0,0,rxl,S,CIR,0}, /* mov */
- {0,0,lr,CIR,S,0}, /* mov */
- {0,0,lr,TOC,S,0}, /* mov */
- {0,0,lr,CPUID,S,0}, /* mov */
- {0,0,rxl,S,TTR,0}, /* mov */
- {0,0,lr,TTR,S,0}, /* mov */
- {118,0,nops,0,0,0}, /* ctrsl */
- {119,0,nops,0,0,0}, /* ctrsg */
- {0,0,rxl,S,VMU,0}, /* mov */
- {0,0,lr,VMU,S,0}, /* mov */
- {0,0,rxl,S,VML,0}, /* mov */
- {0,0,lr,VML,S,0}, /* mov */
- {0,0,rxl,S,ICR,0}, /* mov */
- {0,0,lr,ICR,S,0}, /* mov */
- {0,0,rxl,S,TCPU,0}, /* mov */
- {0,0,lr,TCPU,S,0}, /* mov */
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {120,0,nops,0,0,0}, /* stop */
- {0,0,0,0,0,0},
- {0,0,rxl,S,TID,0}, /* mov */
- {0,0,lr,TID,S,0}, /* mov */
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
-};
-
-const struct formstr e0_format7[] = {
- {84,13,r,V,0,0}, /* sum.b.f */
- {84,14,r,V,0,0}, /* sum.h.f */
- {84,15,r,V,0,0}, /* sum.w.f */
- {84,16,r,V,0,0}, /* sum.l.f */
- {85,2,r,V,0,0}, /* all.f */
- {86,2,r,V,0,0}, /* any.f */
- {87,2,r,V,0,0}, /* parity.f */
- {0,0,0,0,0,0},
- {88,13,r,V,0,0}, /* max.b.f */
- {88,14,r,V,0,0}, /* max.h.f */
- {88,15,r,V,0,0}, /* max.w.f */
- {88,16,r,V,0,0}, /* max.l.f */
- {89,13,r,V,0,0}, /* min.b.f */
- {89,14,r,V,0,0}, /* min.h.f */
- {89,15,r,V,0,0}, /* min.w.f */
- {89,16,r,V,0,0}, /* min.l.f */
- {84,11,r,V,0,0}, /* sum.s.f */
- {84,12,r,V,0,0}, /* sum.d.f */
- {90,11,r,V,0,0}, /* prod.s.f */
- {90,12,r,V,0,0}, /* prod.d.f */
- {88,11,r,V,0,0}, /* max.s.f */
- {88,12,r,V,0,0}, /* max.d.f */
- {89,11,r,V,0,0}, /* min.s.f */
- {89,12,r,V,0,0}, /* min.d.f */
- {90,13,r,V,0,0}, /* prod.b.f */
- {90,14,r,V,0,0}, /* prod.h.f */
- {90,15,r,V,0,0}, /* prod.w.f */
- {90,16,r,V,0,0}, /* prod.l.f */
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
-};
-
-const struct formstr e1_format0[] = {
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {10,18,rrr,S,V,V}, /* sub.s.t */
- {10,19,rrr,S,V,V}, /* sub.d.t */
- {4,18,rrr,S,V,V}, /* div.s.t */
- {4,19,rrr,S,V,V}, /* div.d.t */
- {3,18,rrr,V,V,V}, /* mul.s.t */
- {3,19,rrr,V,V,V}, /* mul.d.t */
- {4,18,rrr,V,V,V}, /* div.s.t */
- {4,19,rrr,V,V,V}, /* div.d.t */
- {3,18,rrr,V,S,V}, /* mul.s.t */
- {3,19,rrr,V,S,V}, /* mul.d.t */
- {4,18,rrr,V,S,V}, /* div.s.t */
- {4,19,rrr,V,S,V}, /* div.d.t */
- {5,1,rrr,V,V,V}, /* and.t */
- {6,1,rrr,V,V,V}, /* or.t */
- {7,1,rrr,V,V,V}, /* xor.t */
- {8,1,rrr,V,V,V}, /* shf.t */
- {5,1,rrr,V,S,V}, /* and.t */
- {6,1,rrr,V,S,V}, /* or.t */
- {7,1,rrr,V,S,V}, /* xor.t */
- {8,1,rrr,V,S,V}, /* shf.t */
- {9,18,rrr,V,V,V}, /* add.s.t */
- {9,19,rrr,V,V,V}, /* add.d.t */
- {10,18,rrr,V,V,V}, /* sub.s.t */
- {10,19,rrr,V,V,V}, /* sub.d.t */
- {9,18,rrr,V,S,V}, /* add.s.t */
- {9,19,rrr,V,S,V}, /* add.d.t */
- {10,18,rrr,V,S,V}, /* sub.s.t */
- {10,19,rrr,V,S,V}, /* sub.d.t */
- {9,20,rrr,V,V,V}, /* add.b.t */
- {9,21,rrr,V,V,V}, /* add.h.t */
- {9,22,rrr,V,V,V}, /* add.w.t */
- {9,23,rrr,V,V,V}, /* add.l.t */
- {9,20,rrr,V,S,V}, /* add.b.t */
- {9,21,rrr,V,S,V}, /* add.h.t */
- {9,22,rrr,V,S,V}, /* add.w.t */
- {9,23,rrr,V,S,V}, /* add.l.t */
- {10,20,rrr,V,V,V}, /* sub.b.t */
- {10,21,rrr,V,V,V}, /* sub.h.t */
- {10,22,rrr,V,V,V}, /* sub.w.t */
- {10,23,rrr,V,V,V}, /* sub.l.t */
- {10,20,rrr,V,S,V}, /* sub.b.t */
- {10,21,rrr,V,S,V}, /* sub.h.t */
- {10,22,rrr,V,S,V}, /* sub.w.t */
- {10,23,rrr,V,S,V}, /* sub.l.t */
- {3,20,rrr,V,V,V}, /* mul.b.t */
- {3,21,rrr,V,V,V}, /* mul.h.t */
- {3,22,rrr,V,V,V}, /* mul.w.t */
- {3,23,rrr,V,V,V}, /* mul.l.t */
- {3,20,rrr,V,S,V}, /* mul.b.t */
- {3,21,rrr,V,S,V}, /* mul.h.t */
- {3,22,rrr,V,S,V}, /* mul.w.t */
- {3,23,rrr,V,S,V}, /* mul.l.t */
- {4,20,rrr,V,V,V}, /* div.b.t */
- {4,21,rrr,V,V,V}, /* div.h.t */
- {4,22,rrr,V,V,V}, /* div.w.t */
- {4,23,rrr,V,V,V}, /* div.l.t */
- {4,20,rrr,V,S,V}, /* div.b.t */
- {4,21,rrr,V,S,V}, /* div.h.t */
- {4,22,rrr,V,S,V}, /* div.w.t */
- {4,23,rrr,V,S,V}, /* div.l.t */
-};
-
-const struct formstr e1_format1[] = {
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {26,20,a2r,S,0,0}, /* ste.b.t */
- {26,21,a2r,S,0,0}, /* ste.h.t */
- {26,22,a2r,S,0,0}, /* ste.w.t */
- {26,23,a2r,S,0,0}, /* ste.l.t */
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {18,20,a1r,V,0,0}, /* ld.b.t */
- {18,21,a1r,V,0,0}, /* ld.h.t */
- {18,22,a1r,V,0,0}, /* ld.w.t */
- {18,23,a1r,V,0,0}, /* ld.l.t */
- {21,20,a2r,V,0,0}, /* st.b.t */
- {21,21,a2r,V,0,0}, /* st.h.t */
- {21,22,a2r,V,0,0}, /* st.w.t */
- {21,23,a2r,V,0,0}, /* st.l.t */
-};
-
-const struct formstr e1_format2[] = {
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {28,20,rr,V,V,0}, /* cvtw.b.t */
- {28,21,rr,V,V,0}, /* cvtw.h.t */
- {29,22,rr,V,V,0}, /* cvtb.w.t */
- {30,22,rr,V,V,0}, /* cvth.w.t */
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {31,23,rr,V,V,0}, /* cvts.l.t */
- {32,22,rr,V,V,0}, /* cvtd.w.t */
- {33,18,rr,V,V,0}, /* cvtl.s.t */
- {28,19,rr,V,V,0}, /* cvtw.d.t */
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {116,18,rr,V,V,0}, /* frint.s.t */
- {116,19,rr,V,V,0}, /* frint.d.t */
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {81,18,rr,V,V,0}, /* sqrt.s.t */
- {81,19,rr,V,V,0}, /* sqrt.d.t */
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
-};
-
-const struct formstr e1_format3[] = {
- {32,18,rr,V,V,0}, /* cvtd.s.t */
- {31,19,rr,V,V,0}, /* cvts.d.t */
- {33,19,rr,V,V,0}, /* cvtl.d.t */
- {32,23,rr,V,V,0}, /* cvtd.l.t */
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {36,1,rr,V,V,0}, /* tzc.t */
- {44,1,rr,V,V,0}, /* lop.t */
- {117,1,rr,V,V,0}, /* xpnd.t */
- {42,1,rr,V,V,0}, /* not.t */
- {8,1,rr,S,V,0}, /* shf.t */
- {35,24,rr,V,V,0}, /* plc.t.t */
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {37,18,rr,V,V,0}, /* eq.s.t */
- {37,19,rr,V,V,0}, /* eq.d.t */
- {43,18,rr,V,V,0}, /* neg.s.t */
- {43,19,rr,V,V,0}, /* neg.d.t */
- {37,18,rr,S,V,0}, /* eq.s.t */
- {37,19,rr,S,V,0}, /* eq.d.t */
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {40,18,rr,V,V,0}, /* le.s.t */
- {40,19,rr,V,V,0}, /* le.d.t */
- {41,18,rr,V,V,0}, /* lt.s.t */
- {41,19,rr,V,V,0}, /* lt.d.t */
- {40,18,rr,S,V,0}, /* le.s.t */
- {40,19,rr,S,V,0}, /* le.d.t */
- {41,18,rr,S,V,0}, /* lt.s.t */
- {41,19,rr,S,V,0}, /* lt.d.t */
- {37,20,rr,V,V,0}, /* eq.b.t */
- {37,21,rr,V,V,0}, /* eq.h.t */
- {37,22,rr,V,V,0}, /* eq.w.t */
- {37,23,rr,V,V,0}, /* eq.l.t */
- {37,20,rr,S,V,0}, /* eq.b.t */
- {37,21,rr,S,V,0}, /* eq.h.t */
- {37,22,rr,S,V,0}, /* eq.w.t */
- {37,23,rr,S,V,0}, /* eq.l.t */
- {40,20,rr,V,V,0}, /* le.b.t */
- {40,21,rr,V,V,0}, /* le.h.t */
- {40,22,rr,V,V,0}, /* le.w.t */
- {40,23,rr,V,V,0}, /* le.l.t */
- {40,20,rr,S,V,0}, /* le.b.t */
- {40,21,rr,S,V,0}, /* le.h.t */
- {40,22,rr,S,V,0}, /* le.w.t */
- {40,23,rr,S,V,0}, /* le.l.t */
- {41,20,rr,V,V,0}, /* lt.b.t */
- {41,21,rr,V,V,0}, /* lt.h.t */
- {41,22,rr,V,V,0}, /* lt.w.t */
- {41,23,rr,V,V,0}, /* lt.l.t */
- {41,20,rr,S,V,0}, /* lt.b.t */
- {41,21,rr,S,V,0}, /* lt.h.t */
- {41,22,rr,S,V,0}, /* lt.w.t */
- {41,23,rr,S,V,0}, /* lt.l.t */
- {43,20,rr,V,V,0}, /* neg.b.t */
- {43,21,rr,V,V,0}, /* neg.h.t */
- {43,22,rr,V,V,0}, /* neg.w.t */
- {43,23,rr,V,V,0}, /* neg.l.t */
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
-};
-
-const struct formstr e1_format4[] = {
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
-};
-
-const struct formstr e1_format5[] = {
- {51,20,rr,V,V,0}, /* ldvi.b.t */
- {51,21,rr,V,V,0}, /* ldvi.h.t */
- {51,22,rr,V,V,0}, /* ldvi.w.t */
- {51,23,rr,V,V,0}, /* ldvi.l.t */
- {28,18,rr,V,V,0}, /* cvtw.s.t */
- {31,22,rr,V,V,0}, /* cvts.w.t */
- {28,23,rr,V,V,0}, /* cvtw.l.t */
- {33,22,rr,V,V,0}, /* cvtl.w.t */
- {52,20,rxr,V,V,0}, /* stvi.b.t */
- {52,21,rxr,V,V,0}, /* stvi.h.t */
- {52,22,rxr,V,V,0}, /* stvi.w.t */
- {52,23,rxr,V,V,0}, /* stvi.l.t */
- {52,20,rxr,S,V,0}, /* stvi.b.t */
- {52,21,rxr,S,V,0}, /* stvi.h.t */
- {52,22,rxr,S,V,0}, /* stvi.w.t */
- {52,23,rxr,S,V,0}, /* stvi.l.t */
-};
-
-const struct formstr e1_format6[] = {
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
-};
-
-const struct formstr e1_format7[] = {
- {84,20,r,V,0,0}, /* sum.b.t */
- {84,21,r,V,0,0}, /* sum.h.t */
- {84,22,r,V,0,0}, /* sum.w.t */
- {84,23,r,V,0,0}, /* sum.l.t */
- {85,1,r,V,0,0}, /* all.t */
- {86,1,r,V,0,0}, /* any.t */
- {87,1,r,V,0,0}, /* parity.t */
- {0,0,0,0,0,0},
- {88,20,r,V,0,0}, /* max.b.t */
- {88,21,r,V,0,0}, /* max.h.t */
- {88,22,r,V,0,0}, /* max.w.t */
- {88,23,r,V,0,0}, /* max.l.t */
- {89,20,r,V,0,0}, /* min.b.t */
- {89,21,r,V,0,0}, /* min.h.t */
- {89,22,r,V,0,0}, /* min.w.t */
- {89,23,r,V,0,0}, /* min.l.t */
- {84,18,r,V,0,0}, /* sum.s.t */
- {84,19,r,V,0,0}, /* sum.d.t */
- {90,18,r,V,0,0}, /* prod.s.t */
- {90,19,r,V,0,0}, /* prod.d.t */
- {88,18,r,V,0,0}, /* max.s.t */
- {88,19,r,V,0,0}, /* max.d.t */
- {89,18,r,V,0,0}, /* min.s.t */
- {89,19,r,V,0,0}, /* min.d.t */
- {90,20,r,V,0,0}, /* prod.b.t */
- {90,21,r,V,0,0}, /* prod.h.t */
- {90,22,r,V,0,0}, /* prod.w.t */
- {90,23,r,V,0,0}, /* prod.l.t */
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
- {0,0,0,0,0,0},
-};
-
-char *lop[] = {
- "mov", /* 0 */
- "merg", /* 1 */
- "mask", /* 2 */
- "mul", /* 3 */
- "div", /* 4 */
- "and", /* 5 */
- "or", /* 6 */
- "xor", /* 7 */
- "shf", /* 8 */
- "add", /* 9 */
- "sub", /* 10 */
- "exit", /* 11 */
- "jmp", /* 12 */
- "jmpi", /* 13 */
- "jmpa", /* 14 */
- "jmps", /* 15 */
- "tac", /* 16 */
- "ldea", /* 17 */
- "ld", /* 18 */
- "tas", /* 19 */
- "pshea", /* 20 */
- "st", /* 21 */
- "call", /* 22 */
- "calls", /* 23 */
- "callq", /* 24 */
- "pfork", /* 25 */
- "ste", /* 26 */
- "incr", /* 27 */
- "cvtw", /* 28 */
- "cvtb", /* 29 */
- "cvth", /* 30 */
- "cvts", /* 31 */
- "cvtd", /* 32 */
- "cvtl", /* 33 */
- "ldpa", /* 34 */
- "plc", /* 35 */
- "tzc", /* 36 */
- "eq", /* 37 */
- "leu", /* 38 */
- "ltu", /* 39 */
- "le", /* 40 */
- "lt", /* 41 */
- "not", /* 42 */
- "neg", /* 43 */
- "lop", /* 44 */
- "cprs", /* 45 */
- "nop", /* 46 */
- "br", /* 47 */
- "bri", /* 48 */
- "bra", /* 49 */
- "brs", /* 50 */
- "ldvi", /* 51 */
- "stvi", /* 52 */
- "ldsdr", /* 53 */
- "ldkdr", /* 54 */
- "ln", /* 55 */
- "patu", /* 56 */
- "pate", /* 57 */
- "pich", /* 58 */
- "plch", /* 59 */
- "idle", /* 60 */
- "rtnq", /* 61 */
- "cfork", /* 62 */
- "rtn", /* 63 */
- "wfork", /* 64 */
- "join", /* 65 */
- "rtnc", /* 66 */
- "exp", /* 67 */
- "sin", /* 68 */
- "cos", /* 69 */
- "psh", /* 70 */
- "pop", /* 71 */
- "eni", /* 72 */
- "dsi", /* 73 */
- "bkpt", /* 74 */
- "msync", /* 75 */
- "mski", /* 76 */
- "xmti", /* 77 */
- "tstvv", /* 78 */
- "diag", /* 79 */
- "pbkpt", /* 80 */
- "sqrt", /* 81 */
- "casr", /* 82 */
- "atan", /* 83 */
- "sum", /* 84 */
- "all", /* 85 */
- "any", /* 86 */
- "parity", /* 87 */
- "max", /* 88 */
- "min", /* 89 */
- "prod", /* 90 */
- "halt", /* 91 */
- "sysc", /* 92 */
- "trap", /* 93 */
- "tst", /* 94 */
- "lck", /* 95 */
- "ulk", /* 96 */
- "spawn", /* 97 */
- "ldcmr", /* 98 */
- "stcmr", /* 99 */
- "popr", /* 100 */
- "pshr", /* 101 */
- "rcvr", /* 102 */
- "matm", /* 103 */
- "sndr", /* 104 */
- "putr", /* 105 */
- "getr", /* 106 */
- "matr", /* 107 */
- "mat", /* 108 */
- "get", /* 109 */
- "rcv", /* 110 */
- "inc", /* 111 */
- "put", /* 112 */
- "snd", /* 113 */
- "enal", /* 114 */
- "enag", /* 115 */
- "frint", /* 116 */
- "xpnd", /* 117 */
- "ctrsl", /* 118 */
- "ctrsg", /* 119 */
- "stop", /* 120 */
-};
-
-char *rop[] = {
- "", /* 0 */
- ".t", /* 1 */
- ".f", /* 2 */
- ".s", /* 3 */
- ".d", /* 4 */
- ".b", /* 5 */
- ".h", /* 6 */
- ".w", /* 7 */
- ".l", /* 8 */
- ".x", /* 9 */
- ".u", /* 10 */
- ".s.f", /* 11 */
- ".d.f", /* 12 */
- ".b.f", /* 13 */
- ".h.f", /* 14 */
- ".w.f", /* 15 */
- ".l.f", /* 16 */
- ".t.f", /* 17 */
- ".s.t", /* 18 */
- ".d.t", /* 19 */
- ".b.t", /* 20 */
- ".h.t", /* 21 */
- ".w.t", /* 22 */
- ".l.t", /* 23 */
- ".t.t", /* 24 */
-};
diff --git a/include/opcode/cr16.h b/include/opcode/cr16.h
deleted file mode 100644
index 1f1191dc6..000000000
--- a/include/opcode/cr16.h
+++ /dev/null
@@ -1,451 +0,0 @@
-/* cr16.h -- Header file for CR16 opcode and register tables.
- Copyright 2007, 2008, 2010, 2013 Free Software Foundation, Inc.
- Contributed by M R Swami Reddy
-
- This file is part of GAS, GDB and the GNU binutils.
-
- GAS, GDB, and GNU binutils 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 3, or (at your
- option) any later version.
-
- GAS, GDB, and GNU binutils are distributed in the hope that they 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _CR16_H_
-#define _CR16_H_
-
-/* CR16 core Registers :
- The enums are used as indices to CR16 registers table (cr16_regtab).
- Therefore, order MUST be preserved. */
-
-typedef enum
-{
- /* 16-bit general purpose registers. */
- r0, r1, r2, r3,
- r4, r5, r6, r7,
- r8, r9, r10, r11,
- r12_L = 12, r13_L = 13, ra = 14, sp_L = 15,
-
- /* 32-bit general purpose registers. */
- r12 = 12, r13 = 13, r14 = 14, r15 = 15,
- era = 14, sp = 15, RA,
-
- /* Not a register. */
- nullregister,
- MAX_REG
-}
-reg;
-
-/* CR16 processor registers and special registers :
- The enums are used as indices to CR16 processor registers table
- (cr16_pregtab). Therefore, order MUST be preserved. */
-
-typedef enum
-{
- /* processor registers. */
- dbs = MAX_REG,
- dsr, dcrl, dcrh,
- car0l, car0h, car1l, car1h,
- cfg, psr, intbasel, intbaseh,
- ispl, isph, uspl, usph,
- dcr = dcrl,
- car0 = car0l,
- car1 = car1l,
- intbase = intbasel,
- isp = ispl,
- usp = uspl,
- /* Not a processor register. */
- nullpregister = usph + 1,
- MAX_PREG
-}
-preg;
-
-/* CR16 Register types. */
-
-typedef enum
-{
- CR16_R_REGTYPE, /* r<N> */
- CR16_RP_REGTYPE, /* reg pair */
- CR16_P_REGTYPE /* Processor register */
-}
-reg_type;
-
-/* CR16 argument types :
- The argument types correspond to instructions operands
-
- Argument types :
- r - register
- rp - register pair
- c - constant
- i - immediate
- idxr - index with register
- idxrp - index with register pair
- rbase - register base
- rpbase - register pair base
- pr - processor register. */
-
-typedef enum
-{
- arg_r,
- arg_c,
- arg_cr,
- arg_crp,
- arg_ic,
- arg_icr,
- arg_idxr,
- arg_idxrp,
- arg_rbase,
- arg_rpbase,
- arg_rp,
- arg_pr,
- arg_prp,
- arg_cc,
- arg_ra,
- /* Not an argument. */
- nullargs
-}
-argtype;
-
-/* CR16 operand types:The operand types correspond to instructions operands. */
-
-typedef enum
-{
- dummy,
- /* N-bit signed immediate. */
- imm3, imm4, imm5, imm6, imm16, imm20, imm32,
- /* N-bit unsigned immediate. */
- uimm3, uimm3_1, uimm4, uimm4_1, uimm5, uimm16, uimm20, uimm32,
- /* N-bit signed displacement. */
- disps5, disps17, disps25,
- /* N-bit unsigned displacement. */
- dispe9,
- /* N-bit absolute address. */
- abs20, abs24,
- /* Register relative. */
- rra, rbase, rbase_disps20, rbase_dispe20,
- /* Register pair relative. */
- rpbase_disps0, rpbase_dispe4, rpbase_disps4, rpbase_disps16,
- rpbase_disps20, rpbase_dispe20,
- /* Register index. */
- rindex7_abs20, rindex8_abs20,
- /* Register pair index. */
- rpindex_disps0, rpindex_disps14, rpindex_disps20,
- /* register. */
- regr,
- /* register pair. */
- regp,
- /* processor register. */
- pregr,
- /* processor register 32 bit. */
- pregrp,
- /* condition code - 4 bit. */
- cc,
- /* Not an operand. */
- nulloperand,
- /* Maximum supported operand. */
- MAX_OPRD
-}
-operand_type;
-
-/* CR16 instruction types. */
-
-#define NO_TYPE_INS 0
-#define ARITH_INS 1
-#define LD_STOR_INS 2
-#define BRANCH_INS 3
-#define ARITH_BYTE_INS 4
-#define SHIFT_INS 5
-#define BRANCH_NEQ_INS 6
-#define LD_STOR_INS_INC 7
-#define STOR_IMM_INS 8
-#define CSTBIT_INS 9
-
-/* Maximum value supported for instruction types. */
-#define CR16_INS_MAX (1 << 4)
-/* Mask to record an instruction type. */
-#define CR16_INS_MASK (CR16_INS_MAX - 1)
-/* Return instruction type, given instruction's attributes. */
-#define CR16_INS_TYPE(attr) ((attr) & CR16_INS_MASK)
-
-/* Indicates whether this instruction has a register list as parameter. */
-#define REG_LIST CR16_INS_MAX
-
-/* The operands in binary and assembly are placed in reverse order.
- load - (REVERSE_MATCH)/store - (! REVERSE_MATCH). */
-#define REVERSE_MATCH (1 << 5)
-
-/* Printing formats, where the instruction prefix isn't consecutive. */
-#define FMT_1 (1 << 9) /* 0xF0F00000 */
-#define FMT_2 (1 << 10) /* 0xFFF0FF00 */
-#define FMT_3 (1 << 11) /* 0xFFF00F00 */
-#define FMT_4 (1 << 12) /* 0xFFF0F000 */
-#define FMT_5 (1 << 13) /* 0xFFF0FFF0 */
-#define FMT_CR16 (FMT_1 | FMT_2 | FMT_3 | FMT_4 | FMT_5)
-
-/* Indicates whether this instruction can be relaxed. */
-#define RELAXABLE (1 << 14)
-
-/* Indicates that instruction uses user registers (and not
- general-purpose registers) as operands. */
-#define USER_REG (1 << 15)
-
-
-/* Instruction shouldn't allow 'sp' usage. */
-#define NO_SP (1 << 17)
-
-/* Instruction shouldn't allow to push a register which is used as a rptr. */
-#define NO_RPTR (1 << 18)
-
-/* Maximum operands per instruction. */
-#define MAX_OPERANDS 5
-/* Maximum register name length. */
-#define MAX_REGNAME_LEN 10
-/* Maximum instruction length. */
-#define MAX_INST_LEN 256
-
-
-/* Values defined for the flags field of a struct operand_entry. */
-
-/* Operand must be an unsigned number. */
-#define OP_UNSIGNED (1 << 0)
-/* Operand must be a signed number. */
-#define OP_SIGNED (1 << 1)
-/* Operand must be a negative number. */
-#define OP_NEG (1 << 2)
-/* A special load/stor 4-bit unsigned displacement operand. */
-#define OP_DEC (1 << 3)
-/* Operand must be an even number. */
-#define OP_EVEN (1 << 4)
-/* Operand is shifted right. */
-#define OP_SHIFT (1 << 5)
-/* Operand is shifted right and decremented. */
-#define OP_SHIFT_DEC (1 << 6)
-/* Operand has reserved escape sequences. */
-#define OP_ESC (1 << 7)
-/* Operand must be a ABS20 number. */
-#define OP_ABS20 (1 << 8)
-/* Operand must be a ABS24 number. */
-#define OP_ABS24 (1 << 9)
-/* Operand has reserved escape sequences type 1. */
-#define OP_ESC1 (1 << 10)
-
-/* Single operand description. */
-
-typedef struct
-{
- /* Operand type. */
- operand_type op_type;
- /* Operand location within the opcode. */
- unsigned int shift;
-}
-operand_desc;
-
-/* Instruction data structure used in instruction table. */
-
-typedef struct
-{
- /* Name. */
- const char *mnemonic;
- /* Size (in words). */
- unsigned int size;
- /* Constant prefix (matched by the disassembler). */
- unsigned long match; /* ie opcode */
- /* Match size (in bits). */
- /* MASK: if( (i & match_bits) == match ) then match */
- int match_bits;
- /* Attributes. */
- unsigned int flags;
- /* Operands (always last, so unreferenced operands are initialized). */
- operand_desc operands[MAX_OPERANDS];
-}
-inst;
-
-/* Data structure for a single instruction's arguments (Operands). */
-
-typedef struct
-{
- /* Register or base register. */
- reg r;
- /* Register pair register. */
- reg rp;
- /* Index register. */
- reg i_r;
- /* Processor register. */
- preg pr;
- /* Processor register. 32 bit */
- preg prp;
- /* Constant/immediate/absolute value. */
- long constant;
- /* CC code. */
- unsigned int cc;
- /* Scaled index mode. */
- unsigned int scale;
- /* Argument type. */
- argtype type;
- /* Size of the argument (in bits) required to represent. */
- int size;
- /* The type of the expression. */
- unsigned char X_op;
-}
-argument;
-
-/* Internal structure to hold the various entities
- corresponding to the current assembling instruction. */
-
-typedef struct
-{
- /* Number of arguments. */
- int nargs;
- /* The argument data structure for storing args (operands). */
- argument arg[MAX_OPERANDS];
-/* The following fields are required only by CR16-assembler. */
-#ifdef TC_CR16
- /* Expression used for setting the fixups (if any). */
- expressionS exp;
- bfd_reloc_code_real_type rtype;
-#endif /* TC_CR16 */
- /* Instruction size (in bytes). */
- int size;
-}
-ins;
-
-/* Structure to hold information about predefined operands. */
-
-typedef struct
-{
- /* Size (in bits). */
- unsigned int bit_size;
- /* Argument type. */
- argtype arg_type;
- /* One bit syntax flags. */
- int flags;
-}
-operand_entry;
-
-/* Structure to hold trap handler information. */
-
-typedef struct
-{
- /* Trap name. */
- char *name;
- /* Index in dispatch table. */
- unsigned int entry;
-}
-trap_entry;
-
-/* Structure to hold information about predefined registers. */
-
-typedef struct
-{
- /* Name (string representation). */
- char *name;
- /* Value (enum representation). */
- union
- {
- /* Register. */
- reg reg_val;
- /* processor register. */
- preg preg_val;
- } value;
- /* Register image. */
- int image;
- /* Register type. */
- reg_type type;
-}
-reg_entry;
-
-/* CR16 opcode table. */
-extern const inst cr16_instruction[];
-extern const unsigned int cr16_num_opcodes;
-#define NUMOPCODES cr16_num_opcodes
-
-/* CR16 operands table. */
-extern const operand_entry cr16_optab[];
-extern const unsigned int cr16_num_optab;
-
-/* CR16 registers table. */
-extern const reg_entry cr16_regtab[];
-extern const unsigned int cr16_num_regs;
-#define NUMREGS cr16_num_regs
-
-/* CR16 register pair table. */
-extern const reg_entry cr16_regptab[];
-extern const unsigned int cr16_num_regps;
-#define NUMREGPS cr16_num_regps
-
-/* CR16 processor registers table. */
-extern const reg_entry cr16_pregtab[];
-extern const unsigned int cr16_num_pregs;
-#define NUMPREGS cr16_num_pregs
-
-/* CR16 processor registers - 32 bit table. */
-extern const reg_entry cr16_pregptab[];
-extern const unsigned int cr16_num_pregps;
-#define NUMPREGPS cr16_num_pregps
-
-/* CR16 trap/interrupt table. */
-extern const trap_entry cr16_traps[];
-extern const unsigned int cr16_num_traps;
-#define NUMTRAPS cr16_num_traps
-
-/* CR16 CC - codes bit table. */
-extern const char * cr16_b_cond_tab[];
-extern const unsigned int cr16_num_cc;
-#define NUMCC cr16_num_cc;
-
-
-/* Table of instructions with no operands. */
-extern const char * cr16_no_op_insn[];
-
-/* Current instruction we're assembling. */
-extern const inst *instruction;
-
-/* A macro for representing the instruction "constant" opcode, that is,
- the FIXED part of the instruction. The "constant" opcode is represented
- as a 32-bit unsigned long, where OPC is expanded (by a left SHIFT)
- over that range. */
-#define BIN(OPC,SHIFT) (OPC << SHIFT)
-
-/* Is the current instruction type is TYPE ? */
-#define IS_INSN_TYPE(TYPE) \
- (CR16_INS_TYPE (instruction->flags) == TYPE)
-
-/* Is the current instruction mnemonic is MNEMONIC ? */
-#define IS_INSN_MNEMONIC(MNEMONIC) \
- (strcmp (instruction->mnemonic, MNEMONIC) == 0)
-
-/* Does the current instruction has register list ? */
-#define INST_HAS_REG_LIST \
- (instruction->flags & REG_LIST)
-
-
-/* Utility macros for string comparison. */
-#define streq(a, b) (strcmp (a, b) == 0)
-#define strneq(a, b, c) (strncmp (a, b, c) == 0)
-
-/* Long long type handling. */
-/* Replace all appearances of 'long long int' with LONGLONG. */
-typedef long long int LONGLONG;
-typedef unsigned long long ULONGLONG;
-
-/* Data types for opcode handling. */
-typedef unsigned long dwordU;
-typedef unsigned short wordU;
-
-/* Globals to store opcode data and build the instruction. */
-extern wordU cr16_words[3];
-extern ULONGLONG cr16_allWords;
-extern ins cr16_currInsn;
-
-/* Prototypes for function in cr16-dis.c. */
-extern void cr16_make_instruction (void);
-extern int cr16_match_opcode (void);
-
-#endif /* _CR16_H_ */
diff --git a/include/opcode/cris.h b/include/opcode/cris.h
deleted file mode 100644
index e57a8825c..000000000
--- a/include/opcode/cris.h
+++ /dev/null
@@ -1,367 +0,0 @@
-/* cris.h -- Header file for CRIS opcode and register tables.
- Copyright (C) 2000, 2001, 2004, 2010 Free Software Foundation, Inc.
- Contributed by Axis Communications AB, Lund, Sweden.
- Originally written for GAS 1.38.1 by Mikael Asker.
- Updated, BFDized and GNUified by Hans-Peter Nilsson.
-
- This file is part of GAS, GDB and the GNU binutils.
-
- GAS, GDB, and GNU binutils 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 3, or (at your
- option) any later version.
-
- GAS, GDB, and GNU binutils are distributed in the hope that they 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef __CRIS_H_INCLUDED_
-#define __CRIS_H_INCLUDED_
-
-#if !defined(__STDC__) && !defined(const)
-#define const
-#endif
-
-
-/* Registers. */
-#define MAX_REG (15)
-#define REG_SP (14)
-#define REG_PC (15)
-
-/* CPU version control of disassembly and assembly of instructions.
- May affect how the instruction is assembled, at least the size of
- immediate operands. */
-enum cris_insn_version_usage
-{
- /* Any version. */
- cris_ver_version_all=0,
-
- /* Indeterminate (intended for disassembly only, or obsolete). */
- cris_ver_warning,
-
- /* Only for v0..3 (Etrax 1..4). */
- cris_ver_v0_3,
-
- /* Only for v3 or higher (ETRAX 4 and beyond). */
- cris_ver_v3p,
-
- /* Only for v8 (Etrax 100). */
- cris_ver_v8,
-
- /* Only for v8 or higher (ETRAX 100, ETRAX 100 LX). */
- cris_ver_v8p,
-
- /* Only for v0..10. FIXME: Not sure what to do with this. */
- cris_ver_sim_v0_10,
-
- /* Only for v0..10. */
- cris_ver_v0_10,
-
- /* Only for v3..10. (ETRAX 4, ETRAX 100 and ETRAX 100 LX). */
- cris_ver_v3_10,
-
- /* Only for v8..10 (ETRAX 100 and ETRAX 100 LX). */
- cris_ver_v8_10,
-
- /* Only for v10 (ETRAX 100 LX) and same series. */
- cris_ver_v10,
-
- /* Only for v10 (ETRAX 100 LX) and same series. */
- cris_ver_v10p,
-
- /* Only for v32 or higher (codename GUINNESS).
- Of course some or all these of may change to cris_ver_v32p if/when
- there's a new revision. */
- cris_ver_v32p
-};
-
-
-/* Special registers. */
-struct cris_spec_reg
-{
- const char *const name;
- unsigned int number;
-
- /* The size of the register. */
- unsigned int reg_size;
-
- /* What CPU version the special register of that name is implemented
- in. If cris_ver_warning, emit an unimplemented-warning. */
- enum cris_insn_version_usage applicable_version;
-
- /* There might be a specific warning for using a special register
- here. */
- const char *const warning;
-};
-extern const struct cris_spec_reg cris_spec_regs[];
-
-
-/* Support registers (kind of special too, but not named as such). */
-struct cris_support_reg
-{
- const char *const name;
- unsigned int number;
-};
-extern const struct cris_support_reg cris_support_regs[];
-
-struct cris_cond15
-{
- /* The name of the condition. */
- const char *const name;
-
- /* What CPU version this condition name applies to. */
- enum cris_insn_version_usage applicable_version;
-};
-extern const struct cris_cond15 cris_conds15[];
-
-/* Opcode-dependent constants. */
-#define AUTOINCR_BIT (0x04)
-
-/* Prefixes. */
-#define BDAP_QUICK_OPCODE (0x0100)
-#define BDAP_QUICK_Z_BITS (0x0e00)
-
-#define BIAP_OPCODE (0x0540)
-#define BIAP_Z_BITS (0x0a80)
-
-#define DIP_OPCODE (0x0970)
-#define DIP_Z_BITS (0xf280)
-
-#define BDAP_INDIR_LOW (0x40)
-#define BDAP_INDIR_LOW_Z (0x80)
-#define BDAP_INDIR_HIGH (0x09)
-#define BDAP_INDIR_HIGH_Z (0x02)
-
-#define BDAP_INDIR_OPCODE (BDAP_INDIR_HIGH * 0x0100 + BDAP_INDIR_LOW)
-#define BDAP_INDIR_Z_BITS (BDAP_INDIR_HIGH_Z * 0x100 + BDAP_INDIR_LOW_Z)
-#define BDAP_PC_LOW (BDAP_INDIR_LOW + REG_PC)
-#define BDAP_INCR_HIGH (BDAP_INDIR_HIGH + AUTOINCR_BIT)
-
-/* No prefix must have this code for its "match" bits in the
- opcode-table. "BCC .+2" will do nicely. */
-#define NO_CRIS_PREFIX 0
-
-/* Definitions for condition codes. */
-#define CC_CC 0x0
-#define CC_HS 0x0
-#define CC_CS 0x1
-#define CC_LO 0x1
-#define CC_NE 0x2
-#define CC_EQ 0x3
-#define CC_VC 0x4
-#define CC_VS 0x5
-#define CC_PL 0x6
-#define CC_MI 0x7
-#define CC_LS 0x8
-#define CC_HI 0x9
-#define CC_GE 0xA
-#define CC_LT 0xB
-#define CC_GT 0xC
-#define CC_LE 0xD
-#define CC_A 0xE
-#define CC_EXT 0xF
-
-/* A table of strings "cc", "cs"... indexed with condition code
- values as above. */
-extern const char *const cris_cc_strings[];
-
-/* Bcc quick. */
-#define BRANCH_QUICK_LOW (0)
-#define BRANCH_QUICK_HIGH (0)
-#define BRANCH_QUICK_OPCODE (BRANCH_QUICK_HIGH * 0x0100 + BRANCH_QUICK_LOW)
-#define BRANCH_QUICK_Z_BITS (0x0F00)
-
-/* BA quick. */
-#define BA_QUICK_HIGH (BRANCH_QUICK_HIGH + CC_A * 0x10)
-#define BA_QUICK_OPCODE (BA_QUICK_HIGH * 0x100 + BRANCH_QUICK_LOW)
-
-/* Bcc [PC+]. */
-#define BRANCH_PC_LOW (0xFF)
-#define BRANCH_INCR_HIGH (0x0D)
-#define BA_PC_INCR_OPCODE \
- ((BRANCH_INCR_HIGH + CC_A * 0x10) * 0x0100 + BRANCH_PC_LOW)
-
-/* Jump. */
-/* Note that old versions generated special register 8 (in high bits)
- and not-that-old versions recognized it as a jump-instruction.
- That opcode now belongs to JUMPU. */
-#define JUMP_INDIR_OPCODE (0x0930)
-#define JUMP_INDIR_Z_BITS (0xf2c0)
-#define JUMP_PC_INCR_OPCODE \
- (JUMP_INDIR_OPCODE + AUTOINCR_BIT * 0x0100 + REG_PC)
-
-#define MOVE_M_TO_PREG_OPCODE 0x0a30
-#define MOVE_M_TO_PREG_ZBITS 0x01c0
-
-/* BDAP.D N,PC. */
-#define MOVE_PC_INCR_OPCODE_PREFIX \
- (((BDAP_INCR_HIGH | (REG_PC << 4)) << 8) | BDAP_PC_LOW | (2 << 4))
-#define MOVE_PC_INCR_OPCODE_SUFFIX \
- (MOVE_M_TO_PREG_OPCODE | REG_PC | (AUTOINCR_BIT << 8))
-
-#define JUMP_PC_INCR_OPCODE_V32 (0x0DBF)
-
-/* BA DWORD (V32). */
-#define BA_DWORD_OPCODE (0x0EBF)
-
-/* Nop. */
-#define NOP_OPCODE (0x050F)
-#define NOP_Z_BITS (0xFFFF ^ NOP_OPCODE)
-
-#define NOP_OPCODE_V32 (0x05B0)
-#define NOP_Z_BITS_V32 (0xFFFF ^ NOP_OPCODE_V32)
-
-/* For the compatibility mode, let's use "MOVE R0,P0". Doesn't affect
- registers or flags. Unfortunately shuts off interrupts for one cycle
- for < v32, but there doesn't seem to be any alternative without that
- effect. */
-#define NOP_OPCODE_COMMON (0x630)
-#define NOP_OPCODE_ZBITS_COMMON (0xffff & ~NOP_OPCODE_COMMON)
-
-/* LAPC.D */
-#define LAPC_DWORD_OPCODE (0x0D7F)
-#define LAPC_DWORD_Z_BITS (0x0fff & ~LAPC_DWORD_OPCODE)
-
-/* Structure of an opcode table entry. */
-enum cris_imm_oprnd_size_type
-{
- /* No size is applicable. */
- SIZE_NONE,
-
- /* Always 32 bits. */
- SIZE_FIX_32,
-
- /* Indicated by size of special register. */
- SIZE_SPEC_REG,
-
- /* Indicated by size field, signed. */
- SIZE_FIELD_SIGNED,
-
- /* Indicated by size field, unsigned. */
- SIZE_FIELD_UNSIGNED,
-
- /* Indicated by size field, no sign implied. */
- SIZE_FIELD
-};
-
-/* For GDB. FIXME: Is this the best way to handle opcode
- interpretation? */
-enum cris_op_type
-{
- cris_not_implemented_op = 0,
- cris_abs_op,
- cris_addi_op,
- cris_asr_op,
- cris_asrq_op,
- cris_ax_ei_setf_op,
- cris_bdap_prefix,
- cris_biap_prefix,
- cris_break_op,
- cris_btst_nop_op,
- cris_clearf_di_op,
- cris_dip_prefix,
- cris_dstep_logshift_mstep_neg_not_op,
- cris_eight_bit_offset_branch_op,
- cris_move_mem_to_reg_movem_op,
- cris_move_reg_to_mem_movem_op,
- cris_move_to_preg_op,
- cris_muls_op,
- cris_mulu_op,
- cris_none_reg_mode_add_sub_cmp_and_or_move_op,
- cris_none_reg_mode_clear_test_op,
- cris_none_reg_mode_jump_op,
- cris_none_reg_mode_move_from_preg_op,
- cris_quick_mode_add_sub_op,
- cris_quick_mode_and_cmp_move_or_op,
- cris_quick_mode_bdap_prefix,
- cris_reg_mode_add_sub_cmp_and_or_move_op,
- cris_reg_mode_clear_op,
- cris_reg_mode_jump_op,
- cris_reg_mode_move_from_preg_op,
- cris_reg_mode_test_op,
- cris_scc_op,
- cris_sixteen_bit_offset_branch_op,
- cris_three_operand_add_sub_cmp_and_or_op,
- cris_three_operand_bound_op,
- cris_two_operand_bound_op,
- cris_xor_op
-};
-
-struct cris_opcode
-{
- /* The name of the insn. */
- const char *name;
-
- /* Bits that must be 1 for a match. */
- unsigned int match;
-
- /* Bits that must be 0 for a match. */
- unsigned int lose;
-
- /* See the table in "opcodes/cris-opc.c". */
- const char *args;
-
- /* Nonzero if this is a delayed branch instruction. */
- char delayed;
-
- /* Size of immediate operands. */
- enum cris_imm_oprnd_size_type imm_oprnd_size;
-
- /* Indicates which version this insn was first implemented in. */
- enum cris_insn_version_usage applicable_version;
-
- /* What kind of operation this is. */
- enum cris_op_type op;
-};
-extern const struct cris_opcode cris_opcodes[];
-
-
-/* These macros are for the target-specific flags in disassemble_info
- used at disassembly. */
-
-/* This insn accesses memory. This flag is more trustworthy than
- checking insn_type for "dis_dref" which does not work for
- e.g. "JSR [foo]". */
-#define CRIS_DIS_FLAG_MEMREF (1 << 0)
-
-/* The "target" field holds a register number. */
-#define CRIS_DIS_FLAG_MEM_TARGET_IS_REG (1 << 1)
-
-/* The "target2" field holds a register number; add it to "target". */
-#define CRIS_DIS_FLAG_MEM_TARGET2_IS_REG (1 << 2)
-
-/* Yet another add-on: the register in "target2" must be multiplied
- by 2 before adding to "target". */
-#define CRIS_DIS_FLAG_MEM_TARGET2_MULT2 (1 << 3)
-
-/* Yet another add-on: the register in "target2" must be multiplied
- by 4 (mutually exclusive with .._MULT2). */
-#define CRIS_DIS_FLAG_MEM_TARGET2_MULT4 (1 << 4)
-
-/* The register in "target2" is an indirect memory reference (of the
- register there), add to "target". Assumed size is dword (mutually
- exclusive with .._MULT[24]). */
-#define CRIS_DIS_FLAG_MEM_TARGET2_MEM (1 << 5)
-
-/* Add-on to CRIS_DIS_FLAG_MEM_TARGET2_MEM; the memory access is "byte";
- sign-extended before adding to "target". */
-#define CRIS_DIS_FLAG_MEM_TARGET2_MEM_BYTE (1 << 6)
-
-/* Add-on to CRIS_DIS_FLAG_MEM_TARGET2_MEM; the memory access is "word";
- sign-extended before adding to "target". */
-#define CRIS_DIS_FLAG_MEM_TARGET2_MEM_WORD (1 << 7)
-
-#endif /* __CRIS_H_INCLUDED_ */
-
-/*
- * Local variables:
- * eval: (c-set-style "gnu")
- * indent-tabs-mode: t
- * End:
- */
diff --git a/include/opcode/crx.h b/include/opcode/crx.h
deleted file mode 100644
index 6081ea354..000000000
--- a/include/opcode/crx.h
+++ /dev/null
@@ -1,419 +0,0 @@
-/* crx.h -- Header file for CRX opcode and register tables.
- Copyright 2004, 2010, 2012 Free Software Foundation, Inc.
- Contributed by Tomer Levi, NSC, Israel.
- Originally written for GAS 2.12 by Tomer Levi, NSC, Israel.
- Updates, BFDizing, GNUifying and ELF support by Tomer Levi.
-
- This file is part of GAS, GDB and the GNU binutils.
-
- GAS, GDB, and GNU binutils 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 3, or (at your
- option) any later version.
-
- GAS, GDB, and GNU binutils are distributed in the hope that they 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef _CRX_H_
-#define _CRX_H_
-
-/* CRX core/debug Registers :
- The enums are used as indices to CRX registers table (crx_regtab).
- Therefore, order MUST be preserved. */
-
-typedef enum
- {
- /* 32-bit general purpose registers. */
- r0, r1, r2, r3, r4, r5, r6, r7, r8, r9,
- r10, r11, r12, r13, r14, r15, ra, sp,
- /* 32-bit user registers. */
- u0, u1, u2, u3, u4, u5, u6, u7, u8, u9,
- u10, u11, u12, u13, u14, u15, ura, usp,
- /* hi and lo registers. */
- hi, lo,
- /* hi and lo user registers. */
- uhi, ulo,
- /* Processor Status Register. */
- psr,
- /* Interrupt Base Register. */
- intbase,
- /* Interrupt Stack Pointer Register. */
- isp,
- /* Configuration Register. */
- cfg,
- /* Coprocessor Configuration Register. */
- cpcfg,
- /* Coprocessor Enable Register. */
- cen,
- /* Not a register. */
- nullregister,
- MAX_REG
- }
-reg;
-
-/* CRX Coprocessor registers and special registers :
- The enums are used as indices to CRX coprocessor registers table
- (crx_copregtab). Therefore, order MUST be preserved. */
-
-typedef enum
- {
- /* Coprocessor registers. */
- c0 = MAX_REG, c1, c2, c3, c4, c5, c6, c7, c8,
- c9, c10, c11, c12, c13, c14, c15,
- /* Coprocessor special registers. */
- cs0, cs1 ,cs2, cs3, cs4, cs5, cs6, cs7, cs8,
- cs9, cs10, cs11, cs12, cs13, cs14, cs15,
- /* Not a Coprocessor register. */
- nullcopregister,
- MAX_COPREG
- }
-copreg;
-
-/* CRX Register types. */
-
-typedef enum
- {
- CRX_R_REGTYPE, /* r<N> */
- CRX_U_REGTYPE, /* u<N> */
- CRX_C_REGTYPE, /* c<N> */
- CRX_CS_REGTYPE, /* cs<N> */
- CRX_CFG_REGTYPE /* configuration register */
- }
-reg_type;
-
-/* CRX argument types :
- The argument types correspond to instructions operands
-
- Argument types :
- r - register
- c - constant
- i - immediate
- idxr - index register
- rbase - register base
- s - star ('*')
- copr - coprocessor register
- copsr - coprocessor special register. */
-
-typedef enum
- {
- arg_r, arg_c, arg_cr, arg_ic, arg_icr, arg_sc,
- arg_idxr, arg_rbase, arg_copr, arg_copsr,
- /* Not an argument. */
- nullargs
- }
-argtype;
-
-/* CRX operand types :
- The operand types correspond to instructions operands. */
-
-typedef enum
- {
- dummy,
- /* 4-bit encoded constant. */
- cst4,
- /* N-bit immediate. */
- i16, i32,
- /* N-bit unsigned immediate. */
- ui3, ui4, ui5, ui16,
- /* N-bit signed displacement. */
- disps9, disps17, disps25, disps32,
- /* N-bit unsigned displacement. */
- dispu5,
- /* N-bit escaped displacement. */
- dispe9,
- /* N-bit absolute address. */
- abs16, abs32,
- /* Register relative. */
- rbase, rbase_dispu4,
- rbase_disps12, rbase_disps16, rbase_disps28, rbase_disps32,
- /* Register index. */
- rindex_disps6, rindex_disps22,
- /* 4-bit genaral-purpose register specifier. */
- regr,
- /* 8-bit register address space. */
- regr8,
- /* coprocessor register. */
- copregr,
- /* coprocessor special register. */
- copsregr,
- /* Not an operand. */
- nulloperand,
- /* Maximum supported operand. */
- MAX_OPRD
- }
-operand_type;
-
-/* CRX instruction types. */
-
-#define NO_TYPE_INS 0
-#define ARITH_INS 1
-#define LD_STOR_INS 2
-#define BRANCH_INS 3
-#define ARITH_BYTE_INS 4
-#define CMPBR_INS 5
-#define SHIFT_INS 6
-#define BRANCH_NEQ_INS 7
-#define LD_STOR_INS_INC 8
-#define STOR_IMM_INS 9
-#define CSTBIT_INS 10
-#define COP_BRANCH_INS 11
-#define COP_REG_INS 12
-#define COPS_REG_INS 13
-#define DCR_BRANCH_INS 14
-
-/* Maximum value supported for instruction types. */
-#define CRX_INS_MAX (1 << 4)
-/* Mask to record an instruction type. */
-#define CRX_INS_MASK (CRX_INS_MAX - 1)
-/* Return instruction type, given instruction's attributes. */
-#define CRX_INS_TYPE(attr) ((attr) & CRX_INS_MASK)
-
-/* Indicates whether this instruction has a register list as parameter. */
-#define REG_LIST CRX_INS_MAX
-/* The operands in binary and assembly are placed in reverse order.
- load - (REVERSE_MATCH)/store - (! REVERSE_MATCH). */
-#define REVERSE_MATCH (1 << 5)
-
-/* Kind of displacement map used DISPU[BWD]4. */
-#define DISPUB4 (1 << 6)
-#define DISPUW4 (1 << 7)
-#define DISPUD4 (1 << 8)
-#define DISPU4MAP (DISPUB4 | DISPUW4 | DISPUD4)
-
-/* Printing formats, where the instruction prefix isn't consecutive. */
-#define FMT_1 (1 << 9) /* 0xF0F00000 */
-#define FMT_2 (1 << 10) /* 0xFFF0FF00 */
-#define FMT_3 (1 << 11) /* 0xFFF00F00 */
-#define FMT_4 (1 << 12) /* 0xFFF0F000 */
-#define FMT_5 (1 << 13) /* 0xFFF0FFF0 */
-#define FMT_CRX (FMT_1 | FMT_2 | FMT_3 | FMT_4 | FMT_5)
-
-/* Indicates whether this instruction can be relaxed. */
-#define RELAXABLE (1 << 14)
-
-/* Indicates that instruction uses user registers (and not
- general-purpose registers) as operands. */
-#define USER_REG (1 << 15)
-
-/* Indicates that instruction can perfom a cst4 mapping. */
-#define CST4MAP (1 << 16)
-
-/* Instruction shouldn't allow 'sp' usage. */
-#define NO_SP (1 << 17)
-
-/* Instruction shouldn't allow to push a register which is used as a rptr. */
-#define NO_RPTR (1 << 18)
-
-/* Maximum operands per instruction. */
-#define MAX_OPERANDS 5
-/* Maximum register name length. */
-#define MAX_REGNAME_LEN 10
-/* Maximum instruction length. */
-#define MAX_INST_LEN 256
-
-
-/* Values defined for the flags field of a struct operand_entry. */
-
-/* Operand must be an unsigned number. */
-#define OP_UNSIGNED (1 << 0)
-/* Operand must be a signed number. */
-#define OP_SIGNED (1 << 1)
-/* A special arithmetic 4-bit constant operand. */
-#define OP_CST4 (1 << 2)
-/* A special load/stor 4-bit unsigned displacement operand. */
-#define OP_DISPU4 (1 << 3)
-/* Operand must be an even number. */
-#define OP_EVEN (1 << 4)
-/* Operand is shifted right. */
-#define OP_SHIFT (1 << 5)
-/* Operand is shifted right and decremented. */
-#define OP_SHIFT_DEC (1 << 6)
-/* Operand has reserved escape sequences. */
-#define OP_ESC (1 << 7)
-/* Operand is used only for the upper 64 KB (FFFF0000 to FFFFFFFF). */
-#define OP_UPPER_64KB (1 << 8)
-
-/* Single operand description. */
-
-typedef struct
- {
- /* Operand type. */
- operand_type op_type;
- /* Operand location within the opcode. */
- unsigned int shift;
- }
-operand_desc;
-
-/* Instruction data structure used in instruction table. */
-
-typedef struct
- {
- /* Name. */
- const char *mnemonic;
- /* Size (in words). */
- unsigned int size;
- /* Constant prefix (matched by the disassembler). */
- unsigned long match;
- /* Match size (in bits). */
- int match_bits;
- /* Attributes. */
- unsigned int flags;
- /* Operands (always last, so unreferenced operands are initialized). */
- operand_desc operands[MAX_OPERANDS];
- }
-inst;
-
-/* Data structure for a single instruction's arguments (Operands). */
-
-typedef struct
- {
- /* Register or base register. */
- reg r;
- /* Index register. */
- reg i_r;
- /* Coprocessor register. */
- copreg cr;
- /* Constant/immediate/absolute value. */
- long constant;
- /* Scaled index mode. */
- unsigned int scale;
- /* Argument type. */
- argtype type;
- /* Size of the argument (in bits) required to represent. */
- int size;
- /* The type of the expression. */
- unsigned char X_op;
- }
-argument;
-
-/* Internal structure to hold the various entities
- corresponding to the current assembling instruction. */
-
-typedef struct
- {
- /* Number of arguments. */
- int nargs;
- /* The argument data structure for storing args (operands). */
- argument arg[MAX_OPERANDS];
-/* The following fields are required only by CRX-assembler. */
-#ifdef TC_CRX
- /* Expression used for setting the fixups (if any). */
- expressionS exp;
- bfd_reloc_code_real_type rtype;
-#endif /* TC_CRX */
- /* Instruction size (in bytes). */
- int size;
- }
-ins;
-
-/* Structure to hold information about predefined operands. */
-
-typedef struct
- {
- /* Size (in bits). */
- unsigned int bit_size;
- /* Argument type. */
- argtype arg_type;
- /* One bit syntax flags. */
- int flags;
- }
-operand_entry;
-
-/* Structure to hold trap handler information. */
-
-typedef struct
- {
- /* Trap name. */
- char *name;
- /* Index in dispatch table. */
- unsigned int entry;
- }
-trap_entry;
-
-/* Structure to hold information about predefined registers. */
-
-typedef struct
- {
- /* Name (string representation). */
- char *name;
- /* Value (enum representation). */
- union
- {
- /* Register. */
- reg reg_val;
- /* Coprocessor register. */
- copreg copreg_val;
- } value;
- /* Register image. */
- int image;
- /* Register type. */
- reg_type type;
- }
-reg_entry;
-
-/* Structure to hold a cst4 operand mapping. */
-
-/* CRX opcode table. */
-extern const inst crx_instruction[];
-extern const int crx_num_opcodes;
-#define NUMOPCODES crx_num_opcodes
-
-/* CRX operands table. */
-extern const operand_entry crx_optab[];
-
-/* CRX registers table. */
-extern const reg_entry crx_regtab[];
-extern const int crx_num_regs;
-#define NUMREGS crx_num_regs
-
-/* CRX coprocessor registers table. */
-extern const reg_entry crx_copregtab[];
-extern const int crx_num_copregs;
-#define NUMCOPREGS crx_num_copregs
-
-/* CRX trap/interrupt table. */
-extern const trap_entry crx_traps[];
-extern const int crx_num_traps;
-#define NUMTRAPS crx_num_traps
-
-/* cst4 operand mapping. */
-extern const int cst4_map[];
-extern const int cst4_maps;
-
-/* Table of instructions with no operands. */
-extern const char* no_op_insn[];
-
-/* Current instruction we're assembling. */
-extern const inst *instruction;
-
-/* A macro for representing the instruction "constant" opcode, that is,
- the FIXED part of the instruction. The "constant" opcode is represented
- as a 32-bit unsigned long, where OPC is expanded (by a left SHIFT)
- over that range. */
-#define BIN(OPC,SHIFT) (OPC << SHIFT)
-
-/* Is the current instruction type is TYPE ? */
-#define IS_INSN_TYPE(TYPE) \
- (CRX_INS_TYPE(instruction->flags) == TYPE)
-
-/* Is the current instruction mnemonic is MNEMONIC ? */
-#define IS_INSN_MNEMONIC(MNEMONIC) \
- (strcmp(instruction->mnemonic,MNEMONIC) == 0)
-
-/* Does the current instruction has register list ? */
-#define INST_HAS_REG_LIST \
- (instruction->flags & REG_LIST)
-
-/* Long long type handling. */
-/* Replace all appearances of 'long long int' with LONGLONG. */
-typedef long long int LONGLONG;
-typedef unsigned long long ULONGLONG;
-
-#endif /* _CRX_H_ */
diff --git a/include/opcode/d10v.h b/include/opcode/d10v.h
deleted file mode 100644
index d0e115fab..000000000
--- a/include/opcode/d10v.h
+++ /dev/null
@@ -1,209 +0,0 @@
-/* d10v.h -- Header file for D10V opcode table
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2010
- Free Software Foundation, Inc.
- Written by Martin Hunt (hunt@cygnus.com), Cygnus Support
-
- This file is part of GDB, GAS, and the GNU binutils.
-
- GDB, GAS, and the GNU binutils are free software; you can redistribute
- them and/or modify them under the terms of the GNU General Public
- License as published by the Free Software Foundation; either version 3,
- or (at your option) any later version.
-
- GDB, GAS, and the GNU binutils are distributed in the hope that they
- 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 file; see the file COPYING3. If not, write to the Free
- Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef D10V_H
-#define D10V_H
-
-/* Format Specifier */
-#define FM00 0
-#define FM01 0x40000000
-#define FM10 0x80000000
-#define FM11 0xC0000000
-
-#define NOP 0x5e00
-#define OPCODE_DIVS 0x14002800
-
-/* The opcode table is an array of struct d10v_opcode. */
-
-struct d10v_opcode
-{
- /* The opcode name. */
- const char *name;
-
- /* the opcode format */
- int format;
-
- /* These numbers were picked so we can do if( i & SHORT_OPCODE) */
-#define SHORT_OPCODE 1
-#define LONG_OPCODE 8
-#define SHORT_2 1 /* short with 2 operands */
-#define SHORT_B 3 /* short with 8-bit branch */
-#define LONG_B 8 /* long with 16-bit branch */
-#define LONG_L 10 /* long with 3 operands */
-#define LONG_R 12 /* reserved */
-
- /* just a placeholder for variable-length instructions */
- /* for example, "bra" will be a fake for "bra.s" and bra.l" */
- /* which will immediately follow in the opcode table. */
-#define OPCODE_FAKE 32
-
- /* the number of cycles */
- int cycles;
-
- /* the execution unit(s) used */
- int unit;
-#define EITHER 0
-#define IU 1
-#define MU 2
-#define BOTH 3
-
- /* execution type; parallel or sequential */
- /* this field is used to decide if two instructions */
- /* can be executed in parallel */
- int exec_type;
-#define PARONLY 1 /* parallel only */
-#define SEQ 2 /* must be sequential */
-#define PAR 4 /* may be parallel */
-#define BRANCH_LINK 8 /* subroutine call. must be aligned */
-#define RMEM 16 /* reads memory */
-#define WMEM 32 /* writes memory */
-#define RF0 64 /* reads f0 */
-#define WF0 128 /* modifies f0 */
-#define WCAR 256 /* write Carry */
-#define BRANCH 512 /* branch, no link */
-#define ALONE 1024 /* short but pack with a NOP if on asm line alone */
-
- /* the opcode */
- long opcode;
-
- /* mask. if( (i & mask) == opcode ) then match */
- long mask;
-
- /* An array of operand codes. Each code is an index into the
- operand table. They appear in the order which the operands must
- appear in assembly code, and are terminated by a zero. */
- unsigned char operands[6];
-};
-
-/* The table itself is sorted by major opcode number, and is otherwise
- in the order in which the disassembler should consider
- instructions. */
-extern const struct d10v_opcode d10v_opcodes[];
-extern const int d10v_num_opcodes;
-
-/* The operands table is an array of struct d10v_operand. */
-struct d10v_operand
-{
- /* The number of bits in the operand. */
- int bits;
-
- /* How far the operand is left shifted in the instruction. */
- int shift;
-
- /* One bit syntax flags. */
- int flags;
-};
-
-/* Elements in the table are retrieved by indexing with values from
- the operands field of the d10v_opcodes table. */
-
-extern const struct d10v_operand d10v_operands[];
-
-/* Values defined for the flags field of a struct d10v_operand. */
-
-/* the operand must be an even number */
-#define OPERAND_EVEN (1)
-
-/* the operand must be an odd number */
-#define OPERAND_ODD (2)
-
-/* this is the destination register; it will be modified */
-/* this is used by the optimizer */
-#define OPERAND_DEST (4)
-
-/* number or symbol */
-#define OPERAND_NUM (8)
-
-/* address or label */
-#define OPERAND_ADDR (0x10)
-
-/* register */
-#define OPERAND_REG (0x20)
-
-/* postincrement + */
-#define OPERAND_PLUS (0x40)
-
-/* postdecrement - */
-#define OPERAND_MINUS (0x80)
-
-/* @ */
-#define OPERAND_ATSIGN (0x100)
-
-/* @( */
-#define OPERAND_ATPAR (0x200)
-
-/* accumulator 0 */
-#define OPERAND_ACC0 (0x400)
-
-/* accumulator 1 */
-#define OPERAND_ACC1 (0x800)
-
-/* f0 / f1 flag register */
-#define OPERAND_FFLAG (0x1000)
-
-/* c flag register */
-#define OPERAND_CFLAG (0x2000)
-
-/* control register */
-#define OPERAND_CONTROL (0x4000)
-
-/* predecrement mode '@-sp' */
-#define OPERAND_ATMINUS (0x8000)
-
-/* signed number */
-#define OPERAND_SIGNED (0x10000)
-
-/* special accumulator shifts need a 4-bit number */
-/* 1 <= x <= 16 */
-#define OPERAND_SHIFT (0x20000)
-
-/* general purpose register */
-#define OPERAND_GPR (0x40000)
-
-/* special imm3 values with range restricted to -2 <= imm3 <= 3 */
-/* needed for rac/rachi */
-#define RESTRICTED_NUM3 (0x80000)
-
-/* Pre-decrement is only supported for SP. */
-#define OPERAND_SP (0x100000)
-
-/* Post-decrement is not supported for SP. Like OPERAND_EVEN, and
- unlike OPERAND_SP, this flag doesn't prevent the instruction from
- matching, it only fails validation later on. */
-#define OPERAND_NOSP (0x200000)
-
-/* Structure to hold information about predefined registers. */
-struct pd_reg
-{
- char *name; /* name to recognize */
- char *pname; /* name to print for this register */
- int value;
-};
-
-extern const struct pd_reg d10v_predefined_registers[];
-int d10v_reg_name_cnt (void);
-
-/* an expressionS only has one register type, so we fake it */
-/* by setting high bits to indicate type */
-#define REGISTER_MASK 0xFF
-
-#endif /* D10V_H */
diff --git a/include/opcode/d30v.h b/include/opcode/d30v.h
deleted file mode 100644
index 62c041da9..000000000
--- a/include/opcode/d30v.h
+++ /dev/null
@@ -1,288 +0,0 @@
-/* d30v.h -- Header file for D30V opcode table
- Copyright 1997, 1998, 1999, 2000, 2001, 2003, 2010
- Free Software Foundation, Inc.
- Written by Martin Hunt (hunt@cygnus.com), Cygnus Solutions
-
- This file is part of GDB, GAS, and the GNU binutils.
-
- GDB, GAS, and the GNU binutils are free software; you can redistribute
- them and/or modify them under the terms of the GNU General Public
- License as published by the Free Software Foundation; either version 3,
- or (at your option) any later version.
-
- GDB, GAS, and the GNU binutils are distributed in the hope that they
- 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 file; see the file COPYING3. If not, write to the Free
- Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef D30V_H
-#define D30V_H
-
-#define NOP 0x00F00000
-
-/* Structure to hold information about predefined registers. */
-struct pd_reg
-{
- char *name; /* name to recognize */
- char *pname; /* name to print for this register */
- int value;
-};
-
-extern const struct pd_reg pre_defined_registers[];
-int reg_name_cnt (void);
-
-/* the number of control registers */
-#define MAX_CONTROL_REG 64
-
-/* define the format specifiers */
-#define FM00 0
-#define FM01 0x80000000
-#define FM10 0x8000000000000000LL
-#define FM11 0x8000000080000000LL
-
-/* define the opcode classes */
-#define BRA 0
-#define LOGIC 1
-#define IMEM 2
-#define IALU1 4
-#define IALU2 5
-
-/* define the execution condition codes */
-#define ECC_AL 0 /* ALways (default) */
-#define ECC_TX 1 /* F0=True, F1=Don't care */
-#define ECC_FX 2 /* F0=False, F1=Don't care */
-#define ECC_XT 3 /* F0=Don't care, F1=True */
-#define ECC_XF 4 /* F0=Don't care, F1=False */
-#define ECC_TT 5 /* F0=True, F1=True */
-#define ECC_TF 6 /* F0=True, F1=False */
-#define ECC_RESERVED 7 /* reserved */
-#define ECC_MAX ECC_RESERVED
-
-extern const char *d30v_ecc_names[];
-
-/* condition code table for CMP and CMPU */
-extern const char *d30v_cc_names[];
-
-/* The opcode table is an array of struct d30v_opcode. */
-struct d30v_opcode
-{
- /* The opcode name. */
- const char *name;
-
- /* the opcode */
- int op1; /* first part, "IALU1" for example */
- int op2; /* the rest of the opcode */
-
- /* opcode format(s). These numbers correspond to entries */
- /* in the d30v_format_table */
- unsigned char format[4];
-
-#define SHORT_M 1
-#define SHORT_M2 5 /* for ld2w and st2w */
-#define SHORT_A 9
-#define SHORT_B1 11
-#define SHORT_B2 12
-#define SHORT_B2r 13
-#define SHORT_B3 14
-#define SHORT_B3r 16
-#define SHORT_B3b 18
-#define SHORT_B3br 20
-#define SHORT_D1r 22
-#define SHORT_D2 24
-#define SHORT_D2r 26
-#define SHORT_D2Br 28
-#define SHORT_U 30 /* unary SHORT_A. ABS for example */
-#define SHORT_F 31 /* SHORT_A with flag registers */
-#define SHORT_AF 33 /* SHORT_A with only the first register a flag register */
-#define SHORT_T 35 /* for trap instruction */
-#define SHORT_A5 36 /* SHORT_A with a 5-bit immediate instead of 6 */
-#define SHORT_CMP 38 /* special form for CMPcc */
-#define SHORT_CMPU 40 /* special form for CMPUcc */
-#define SHORT_A1 42 /* special form of SHORT_A for MACa opcodes where a=1 */
-#define SHORT_AA 44 /* SHORT_A with the first register an accumulator */
-#define SHORT_RA 46 /* SHORT_A with the second register an accumulator */
-#define SHORT_MODINC 48
-#define SHORT_MODDEC 49
-#define SHORT_C1 50
-#define SHORT_C2 51
-#define SHORT_UF 52
-#define SHORT_A2 53
-#define SHORT_NONE 55 /* no operands */
-#define SHORT_AR 56 /* like SHORT_AA but only accept register as third parameter */
-#define LONG 57
-#define LONG_U 58 /* unary LONG */
-#define LONG_Ur 59 /* LONG pc-relative */
-#define LONG_CMP 60 /* special form for CMPcc and CMPUcc */
-#define LONG_M 61 /* Memory long for ldb, stb */
-#define LONG_M2 62 /* Memory long for ld2w, st2w */
-#define LONG_2 63 /* LONG with 2 operands; jmptnz */
-#define LONG_2r 64 /* LONG with 2 operands; bratnz */
-#define LONG_2b 65 /* LONG_2 with modifier of 3 */
-#define LONG_2br 66 /* LONG_2r with modifier of 3 */
-#define LONG_D 67 /* for DJMPI */
-#define LONG_Dr 68 /* for DBRAI */
-#define LONG_Dbr 69 /* for repeati */
-
- /* the execution unit(s) used */
- int unit;
-#define EITHER 0
-#define IU 1
-#define MU 2
-#define EITHER_BUT_PREFER_MU 3
-
- /* this field is used to decide if two instructions */
- /* can be executed in parallel */
- long flags_used;
- long flags_set;
-#define FLAG_0 (1L<<0)
-#define FLAG_1 (1L<<1)
-#define FLAG_2 (1L<<2)
-#define FLAG_3 (1L<<3)
-#define FLAG_4 (1L<<4) /* S (saturation) */
-#define FLAG_5 (1L<<5) /* V (overflow) */
-#define FLAG_6 (1L<<6) /* VA (accumulated overflow) */
-#define FLAG_7 (1L<<7) /* C (carry/borrow) */
-#define FLAG_SM (1L<<8) /* SM (stack mode) */
-#define FLAG_RP (1L<<9) /* RP (repeat enable) */
-#define FLAG_CONTROL (1L<<10) /* control registers */
-#define FLAG_A0 (1L<<11) /* A0 */
-#define FLAG_A1 (1L<<12) /* A1 */
-#define FLAG_JMP (1L<<13) /* instruction is a branch */
-#define FLAG_JSR (1L<<14) /* subroutine call. must be aligned */
-#define FLAG_MEM (1L<<15) /* reads/writes memory */
-#define FLAG_NOT_WITH_ADDSUBppp (1L<<16) /* Old meaning: a 2 word 4 byter operation
- New meaning: operation cannot be
- combined in parallel with ADD/SUBppp. */
-#define FLAG_MUL16 (1L<<17) /* 16 bit multiply */
-#define FLAG_MUL32 (1L<<18) /* 32 bit multiply */
-#define FLAG_ADDSUBppp (1L<<19) /* ADDppp or SUBppp */
-#define FLAG_DELAY (1L<<20) /* This is a delayed branch or jump */
-#define FLAG_LKR (1L<<21) /* insn in left slot kills right slot */
-#define FLAG_CVVA (FLAG_5|FLAG_6|FLAG_7)
-#define FLAG_C FLAG_7
-#define FLAG_ALL (FLAG_0 | \
- FLAG_1 | \
- FLAG_2 | \
- FLAG_3 | \
- FLAG_4 | \
- FLAG_5 | \
- FLAG_6 | \
- FLAG_7 | \
- FLAG_SM | \
- FLAG_RP | \
- FLAG_CONTROL)
-
- int reloc_flag;
-#define RELOC_PCREL 1
-#define RELOC_ABS 2
-};
-
-extern const struct d30v_opcode d30v_opcode_table[];
-extern const int d30v_num_opcodes;
-
-/* The operands table is an array of struct d30v_operand. */
-struct d30v_operand
-{
- /* the length of the field */
- int length;
-
- /* The number of significant bits in the operand. */
- int bits;
-
- /* position relative to Ra */
- int position;
-
- /* syntax flags. */
- long flags;
-};
-extern const struct d30v_operand d30v_operand_table[];
-
-/* Values defined for the flags field of a struct d30v_operand. */
-
-/* this is the destination register; it will be modified */
-/* this is used by the optimizer */
-#define OPERAND_DEST (1)
-
-/* number or symbol */
-#define OPERAND_NUM (2)
-
-/* address or label */
-#define OPERAND_ADDR (4)
-
-/* register */
-#define OPERAND_REG (8)
-
-/* postincrement + */
-#define OPERAND_PLUS (0x10)
-
-/* postdecrement - */
-#define OPERAND_MINUS (0x20)
-
-/* signed number */
-#define OPERAND_SIGNED (0x40)
-
-/* this operand must be shifted left by 3 */
-#define OPERAND_SHIFT (0x80)
-
-/* flag register */
-#define OPERAND_FLAG (0x100)
-
-/* control register */
-#define OPERAND_CONTROL (0x200)
-
-/* accumulator */
-#define OPERAND_ACC (0x400)
-
-/* @ */
-#define OPERAND_ATSIGN (0x800)
-
-/* @( */
-#define OPERAND_ATPAR (0x1000)
-
-/* predecrement mode '@-sp' */
-#define OPERAND_ATMINUS (0x2000)
-
-/* this operand changes the instruction name */
-/* for example, CPMcc, CMPUcc */
-#define OPERAND_NAME (0x4000)
-
-/* fake operand for mvtsys and mvfsys */
-#define OPERAND_SPECIAL (0x8000)
-
-/* let the optimizer know that two registers are affected */
-#define OPERAND_2REG (0x10000)
-
-/* This operand is pc-relative. Note that repeati can have two immediate
- operands, one of which is pcrel, the other (the IMM6U one) is not. */
-#define OPERAND_PCREL (0x20000)
-
-/* The format table is an array of struct d30v_format. */
-struct d30v_format
-{
- int form; /* SHORT_A, LONG, etc */
- int modifier; /* two bit modifier following opcode */
- unsigned char operands[5];
-};
-extern const struct d30v_format d30v_format_table[];
-
-
-/* an instruction is defined by an opcode and a format */
-/* for example, "add" has one opcode, but three different */
-/* formats, 2 SHORT_A forms and a LONG form. */
-struct d30v_insn
-{
- struct d30v_opcode *op; /* pointer to an entry in the opcode table */
- struct d30v_format *form; /* pointer to an entry in the format table */
- int ecc; /* execution condition code */
-};
-
-/* an expressionS only has one register type, so we fake it */
-/* by setting high bits to indicate type */
-#define REGISTER_MASK 0xFF
-
-#endif /* D30V_H */
diff --git a/include/opcode/dlx.h b/include/opcode/dlx.h
deleted file mode 100644
index 54dadd072..000000000
--- a/include/opcode/dlx.h
+++ /dev/null
@@ -1,283 +0,0 @@
-/* Table of opcodes for the DLX microprocess.
- Copyright 2002, 2010 Free Software Foundation, Inc.
-
- This file is part of GDB and GAS.
-
- 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA.
-
- Initially created by Kuang Hwa Lin, 2002. */
-
-/* Following are the function codes for the Special OP (ALU). */
-#define ALUOP 0x00000000
-#define SPECIALOP 0x00000000
-
-#define NOPF 0x00000000
-#define SLLF 0x00000004
-#define SRLF 0x00000006
-#define SRAF 0x00000007
-
-#define SEQUF 0x00000010
-#define SNEUF 0x00000011
-#define SLTUF 0x00000012
-#define SGTUF 0x00000013
-#define SLEUF 0x00000014
-#define SGEUF 0x00000015
-
-#define ADDF 0x00000020
-#define ADDUF 0x00000021
-#define SUBF 0x00000022
-#define SUBUF 0x00000023
-#define ANDF 0x00000024
-#define ORF 0x00000025
-#define XORF 0x00000026
-
-#define SEQF 0x00000028
-#define SNEF 0x00000029
-#define SLTF 0x0000002A
-#define SGTF 0x0000002B
-#define SLEF 0x0000002C
-#define SGEF 0x0000002D
- /* Following special functions was not mentioned in the
- Hennessy's book but was implemented in the RTL. */
-#define MVTSF 0x00000030
-#define MVFSF 0x00000031
-#define BSWAPF 0x00000032
-#define LUTF 0x00000033
-/* Following special functions was mentioned in the
- Hennessy's book but was not implemented in the RTL. */
-#define MULTF 0x00000005
-#define MULTUF 0x00000006
-#define DIVF 0x00000007
-#define DIVUF 0x00000008
-
-
-/* Following are the rest of the OPcodes:
- JOP = (0x002 << 26), JALOP = (0x003 << 26), BEQOP = (0x004 << 26), BNEOP = (0x005 << 26)
- ADDIOP = (0x008 << 26), ADDUIOP= (0x009 << 26), SUBIOP = (0x00A << 26), SUBUIOP= (0x00B << 26)
- ANDIOP = (0x00C << 26), ORIOP = (0x00D << 26), XORIOP = (0x00E << 26), LHIOP = (0x00F << 26)
- RFEOP = (0x010 << 26), TRAPOP = (0x011 << 26), JROP = (0x012 << 26), JALROP = (0x013 << 26)
- BREAKOP= (0x014 << 26)
- SEQIOP = (0x018 << 26), SNEIOP = (0x019 << 26), SLTIOP = (0x01A << 26), SGTIOP = (0x01B << 26)
- SLEIOP = (0x01C << 26), SGEIOP = (0x01D << 26)
- LBOP = (0x020 << 26), LHOP = (0x021 << 26), LWOP = (0x023 << 26), LBUOP = (0x024 << 26)
- LHUOP = (0x025 << 26), SBOP = (0x028 << 26), SHOP = (0x029 << 26), SWOP = (0x02B << 26)
- LSBUOP = (0x026 << 26), LSHU = (0x027 << 26), LSW = (0x02C << 26),
- SEQUIOP= (0x030 << 26), SNEUIOP= (0x031 << 26), SLTUIOP= (0x032 << 26), SGTUIOP= (0x033 << 26)
- SLEUIOP= (0x034 << 26), SGEUIOP= (0x035 << 26)
- SLLIOP = (0x036 << 26), SRLIOP = (0x037 << 26), SRAIOP = (0x038 << 26). */
-#define JOP 0x08000000
-#define JALOP 0x0c000000
-#define BEQOP 0x10000000
-#define BNEOP 0x14000000
-
-#define ADDIOP 0x20000000
-#define ADDUIOP 0x24000000
-#define SUBIOP 0x28000000
-#define SUBUIOP 0x2c000000
-#define ANDIOP 0x30000000
-#define ORIOP 0x34000000
-#define XORIOP 0x38000000
-#define LHIOP 0x3c000000
-#define RFEOP 0x40000000
-#define TRAPOP 0x44000000
-#define JROP 0x48000000
-#define JALROP 0x4c000000
-#define BREAKOP 0x50000000
-
-#define SEQIOP 0x60000000
-#define SNEIOP 0x64000000
-#define SLTIOP 0x68000000
-#define SGTIOP 0x6c000000
-#define SLEIOP 0x70000000
-#define SGEIOP 0x74000000
-
-#define LBOP 0x80000000
-#define LHOP 0x84000000
-#define LWOP 0x8c000000
-#define LBUOP 0x90000000
-#define LHUOP 0x94000000
-#define LDSTBU
-#define LDSTHU
-#define SBOP 0xa0000000
-#define SHOP 0xa4000000
-#define SWOP 0xac000000
-#define LDST
-
-#define SEQUIOP 0xc0000000
-#define SNEUIOP 0xc4000000
-#define SLTUIOP 0xc8000000
-#define SGTUIOP 0xcc000000
-#define SLEUIOP 0xd0000000
-#define SGEUIOP 0xd4000000
-
-#define SLLIOP 0xd8000000
-#define SRLIOP 0xdc000000
-#define SRAIOP 0xe0000000
-
-/* Following 3 ops was added to provide the MP atonmic operation. */
-#define LSBUOP 0x98000000
-#define LSHUOP 0x9c000000
-#define LSWOP 0xb0000000
-
-/* Following opcode was defined in the Hennessy's book as
- "normal" opcode but was implemented in the RTL as special
- functions. */
-#if 0
-#define MVTSOP 0x50000000
-#define MVFSOP 0x54000000
-#endif
-
-struct dlx_opcode
-{
- /* Name of the instruction. */
- char *name;
-
- /* Opcode word. */
- unsigned long opcode;
-
- /* A string of characters which describe the operands.
- Valid characters are:
- , Itself. The character appears in the assembly code.
- a rs1 The register number is in bits 21-25 of the instruction.
- b rs2/rd The register number is in bits 16-20 of the instruction.
- c rd. The register number is in bits 11-15 of the instruction.
- f FUNC bits 0-10 of the instruction.
- i An immediate operand is in bits 0-16 of the instruction. 0 extended
- I An immediate operand is in bits 0-16 of the instruction. sign extended
- d An 16 bit PC relative displacement.
- D An immediate operand is in bits 0-25 of the instruction.
- N No opperands needed, for nops.
- P it can be a register or a 16 bit operand. */
- char *args;
-};
-
-static const struct dlx_opcode dlx_opcodes[] =
- {
- /* Arithmetic and Logic R-TYPE instructions. */
- { "nop", (ALUOP|NOPF), "N" }, /* NOP */
- { "add", (ALUOP|ADDF), "c,a,b" }, /* Add */
- { "addu", (ALUOP|ADDUF), "c,a,b" }, /* Add Unsigned */
- { "sub", (ALUOP|SUBF), "c,a,b" }, /* SUB */
- { "subu", (ALUOP|SUBUF), "c,a,b" }, /* Sub Unsigned */
- { "mult", (ALUOP|MULTF), "c,a,b" }, /* MULTIPLY */
- { "multu", (ALUOP|MULTUF), "c,a,b" }, /* MULTIPLY Unsigned */
- { "div", (ALUOP|DIVF), "c,a,b" }, /* DIVIDE */
- { "divu", (ALUOP|DIVUF), "c,a,b" }, /* DIVIDE Unsigned */
- { "and", (ALUOP|ANDF), "c,a,b" }, /* AND */
- { "or", (ALUOP|ORF), "c,a,b" }, /* OR */
- { "xor", (ALUOP|XORF), "c,a,b" }, /* Exclusive OR */
- { "sll", (ALUOP|SLLF), "c,a,b" }, /* SHIFT LEFT LOGICAL */
- { "sra", (ALUOP|SRAF), "c,a,b" }, /* SHIFT RIGHT ARITHMETIC */
- { "srl", (ALUOP|SRLF), "c,a,b" }, /* SHIFT RIGHT LOGICAL */
- { "seq", (ALUOP|SEQF), "c,a,b" }, /* Set if equal */
- { "sne", (ALUOP|SNEF), "c,a,b" }, /* Set if not equal */
- { "slt", (ALUOP|SLTF), "c,a,b" }, /* Set if less */
- { "sgt", (ALUOP|SGTF), "c,a,b" }, /* Set if greater */
- { "sle", (ALUOP|SLEF), "c,a,b" }, /* Set if less or equal */
- { "sge", (ALUOP|SGEF), "c,a,b" }, /* Set if greater or equal */
- { "sequ", (ALUOP|SEQUF), "c,a,b" }, /* Set if equal unsigned */
- { "sneu", (ALUOP|SNEUF), "c,a,b" }, /* Set if not equal unsigned */
- { "sltu", (ALUOP|SLTUF), "c,a,b" }, /* Set if less unsigned */
- { "sgtu", (ALUOP|SGTUF), "c,a,b" }, /* Set if greater unsigned */
- { "sleu", (ALUOP|SLEUF), "c,a,b" }, /* Set if less or equal unsigned*/
- { "sgeu", (ALUOP|SGEUF), "c,a,b" }, /* Set if greater or equal */
- { "mvts", (ALUOP|MVTSF), "c,a" }, /* Move to special register */
- { "mvfs", (ALUOP|MVFSF), "c,a" }, /* Move from special register */
- { "bswap", (ALUOP|BSWAPF), "c,a,b" }, /* ??? Was not documented */
- { "lut", (ALUOP|LUTF), "c,a,b" }, /* ????? same as above */
-
- /* Arithmetic and Logical Immediate I-TYPE instructions. */
- { "addi", ADDIOP, "b,a,I" }, /* Add Immediate */
- { "addui", ADDUIOP, "b,a,i" }, /* Add Usigned Immediate */
- { "subi", SUBIOP, "b,a,I" }, /* Sub Immediate */
- { "subui", SUBUIOP, "b,a,i" }, /* Sub Unsigned Immedated */
- { "andi", ANDIOP, "b,a,i" }, /* AND Immediate */
- { "ori", ORIOP, "b,a,i" }, /* OR Immediate */
- { "xori", XORIOP, "b,a,i" }, /* Exclusive OR Immediate */
- { "slli", SLLIOP, "b,a,i" }, /* SHIFT LEFT LOCICAL Immediate */
- { "srai", SRAIOP, "b,a,i" }, /* SHIFT RIGHT ARITH. Immediate */
- { "srli", SRLIOP, "b,a,i" }, /* SHIFT RIGHT LOGICAL Immediate*/
- { "seqi", SEQIOP, "b,a,i" }, /* Set if equal */
- { "snei", SNEIOP, "b,a,i" }, /* Set if not equal */
- { "slti", SLTIOP, "b,a,i" }, /* Set if less */
- { "sgti", SGTIOP, "b,a,i" }, /* Set if greater */
- { "slei", SLEIOP, "b,a,i" }, /* Set if less or equal */
- { "sgei", SGEIOP, "b,a,i" }, /* Set if greater or equal */
- { "sequi", SEQUIOP, "b,a,i" }, /* Set if equal */
- { "sneui", SNEUIOP, "b,a,i" }, /* Set if not equal */
- { "sltui", SLTUIOP, "b,a,i" }, /* Set if less */
- { "sgtui", SGTUIOP, "b,a,i" }, /* Set if greater */
- { "sleui", SLEUIOP, "b,a,i" }, /* Set if less or equal */
- { "sgeui", SGEUIOP, "b,a,i" }, /* Set if greater or equal */
- /* Macros for I type instructions. */
- { "mov", ADDIOP, "b,P" }, /* a move macro */
- { "movu", ADDUIOP, "b,P" }, /* a move macro, unsigned */
-
-#if 0
- /* Move special. */
- { "mvts", MVTSOP, "b,a" }, /* Move From Integer to Special */
- { "mvfs", MVFSOP, "b,a" }, /* Move From Special to Integer */
-#endif
-
- /* Load high Immediate I-TYPE instruction. */
- { "lhi", LHIOP, "b,i" }, /* Load High Immediate */
- { "lui", LHIOP, "b,i" }, /* Load High Immediate */
- { "sethi", LHIOP, "b,i" }, /* Load High Immediate */
-
- /* LOAD/STORE BYTE 8 bits I-TYPE. */
- { "lb", LBOP, "b,a,I" }, /* Load Byte */
- { "lbu", LBUOP, "b,a,I" }, /* Load Byte Unsigned */
- { "ldstbu", LSBUOP, "b,a,I" }, /* Load store Byte Unsigned */
- { "sb", SBOP, "b,a,I" }, /* Store Byte */
-
- /* LOAD/STORE HALFWORD 16 bits. */
- { "lh", LHOP, "b,a,I" }, /* Load Halfword */
- { "lhu", LHUOP, "b,a,I" }, /* Load Halfword Unsigned */
- { "ldsthu", LSHUOP, "b,a,I" }, /* Load Store Halfword Unsigned */
- { "sh", SHOP, "b,a,I" }, /* Store Halfword */
-
- /* LOAD/STORE WORD 32 bits. */
- { "lw", LWOP, "b,a,I" }, /* Load Word */
- { "sw", SWOP, "b,a,I" }, /* Store Word */
- { "ldstw", LSWOP, "b,a,I" }, /* Load Store Word */
-
- /* Branch PC-relative, 16 bits offset. */
- { "beqz", BEQOP, "a,d" }, /* Branch if a == 0 */
- { "bnez", BNEOP, "a,d" }, /* Branch if a != 0 */
- { "beq", BEQOP, "a,d" }, /* Branch if a == 0 */
- { "bne", BNEOP, "a,d" }, /* Branch if a != 0 */
-
- /* Jumps Trap and RFE J-TYPE. */
- { "j", JOP, "D" }, /* Jump, PC-relative 26 bits */
- { "jal", JALOP, "D" }, /* JAL, PC-relative 26 bits */
- { "break", BREAKOP, "D" }, /* break to OS */
- { "trap" , TRAPOP, "D" }, /* TRAP to OS */
- { "rfe", RFEOP, "N" }, /* Return From Exception */
- /* Macros. */
- { "call", JOP, "D" }, /* Jump, PC-relative 26 bits */
-
- /* Jumps Trap and RFE I-TYPE. */
- { "jr", JROP, "a" }, /* Jump Register, Abs (32 bits) */
- { "jalr", JALROP, "a" }, /* JALR, Abs (32 bits) */
- /* Macros. */
- { "retr", JROP, "a" }, /* Jump Register, Abs (32 bits) */
-
- { "", 0x0, "" } /* Dummy entry, not included in NUM_OPCODES.
- This lets code examine entry i + 1 without
- checking if we've run off the end of the table. */
- };
-
-const unsigned int num_dlx_opcodes = (((sizeof dlx_opcodes) / (sizeof dlx_opcodes[0])) - 1);
diff --git a/include/opcode/h8300.h b/include/opcode/h8300.h
deleted file mode 100644
index 3296debae..000000000
--- a/include/opcode/h8300.h
+++ /dev/null
@@ -1,1892 +0,0 @@
-/* Opcode table for the H8/300
- Copyright 1991-2013 Free Software Foundation, Inc.
- Written by Steve Chamberlain <sac@cygnus.com>.
-
- This file is part of GDB, the GNU Debugger and GAS, the GNU Assembler.
-
- 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 3 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., 51 Franklin Street - Fifth Floor, Boston, MA
- 02110-1301, USA. */
-
-/* Instructions are stored as a sequence of nibbles.
- If the nibble has value 15 or less than the representation is complete.
- Otherwise, we record what it contains with several flags. */
-
-typedef int op_type;
-
-enum h8_flags
-{
- L_2 = 0x10,
- L_3 = 0x20,
- /* 3 bit constant, zero not accepted. */
- L_3NZ = 0x30,
- L_4 = 0x40,
- L_5 = 0x50,
- L_8 = 0x60,
- L_8U = 0x70,
- L_16 = 0x80,
- L_16U = 0x90,
- L_24 = 0xA0,
- L_32 = 0xB0,
- L_P = 0xC0,
-
- /* Mask to isolate the L_x size bits. */
- SIZE = 0xF0,
-
- REG = 0x0100,
- ABS = 0x0200,
- MEMIND = 0x0300,
- IMM = 0x0400,
- DISP = 0x0500,
- IND = 0x0600,
- POSTINC = 0x0700,
- POSTDEC = 0x0800,
- PREINC = 0x0900,
- PREDEC = 0x0A00,
- PCREL = 0x0B00,
- KBIT = 0x0C00,
- DBIT = 0x0D00,
- CONST_2 = 0x0E00,
- CONST_4 = 0x0F00,
- CONST_8 = 0x1000,
- CONST_16 = 0x1100,
- INDEXB = 0x1200,
- INDEXW = 0x1300,
- INDEXL = 0x1400,
- PCIDXB = 0x1500,
- PCIDXW = 0x1600,
- PCIDXL = 0x1700,
- VECIND = 0x1800,
- LOWREG = 0x1900,
- DATA = 0x2000,
-
- /* Synonyms. */
- INC = POSTINC,
- DEC = PREDEC,
- /* Control Registers. */
- CCR = 0x4000,
- EXR = 0x4100,
- MACH = 0x4200,
- MACL = 0x4300,
- RESERV1 = 0x4400,
- RESERV2 = 0x4500,
- VBR = 0x4600,
- SBR = 0x4700,
- MACREG = 0x4800,
- CCR_EXR = 0x4900,
- VBR_SBR = 0x4A00,
- CC_EX_VB_SB = 0x4B00,
- RESERV3 = 0x4C00,
- RESERV4 = 0x4D00,
- RESERV5 = 0x4E00,
- RESERV6 = 0x4F00,
-
- /* Mask to isolate the addressing mode bits (REG .. PREDEC). */
- MODE = 0x7F00,
-
- CTRL = 0x4000,
-
- NO_SYMBOLS = 0x8000,
- SRC = 0x10000,
- DST = 0x20000,
- OP3 = 0x40000,
- MEMRELAX = 0x80000, /* Move insn which may relax. */
-
- DISPREG = 0x100000,
- IGNORE = 0x200000,
- ABSJMP = 0x400000,
-
- B00 = 0x800000, /* Bit 0 must be low. */
- B01 = 0x1000000, /* Bit 0 must be high. */
- B10 = 0x2000000, /* Bit 1 must be low. */
- B11 = 0x4000000, /* Bit 1 must be high. */
- B20 = 0x8000000, /* Bit 2 must be low. */
- B21 = 0x10000000, /* Bit 2 must be high. */
- B30 = 0x20000000, /* Bit 3 must be low. */
- B31 = 0x40000000, /* Bit 3 must be high. */
- E = 0x80000000, /* End of nibble sequence. */
-
- /* Immediates smaller than 8 bits are always unsigned. */
- IMM3 = IMM | L_3,
- IMM4 = IMM | L_4,
- IMM5 = IMM | L_5,
- IMM3NZ = IMM | L_3NZ,
- IMM2 = IMM | L_2,
-
- IMM8 = IMM | SRC | L_8,
- IMM8U = IMM | SRC | L_8U,
- IMM16 = IMM | SRC | L_16,
- IMM16U = IMM | SRC | L_16U,
- IMM32 = IMM | SRC | L_32,
-
- IMM3NZ_NS = IMM3NZ | NO_SYMBOLS,
- IMM4_NS = IMM4 | NO_SYMBOLS,
- IMM8U_NS = IMM8U | NO_SYMBOLS,
- IMM16U_NS = IMM16U | NO_SYMBOLS,
-
- RD8 = DST | L_8 | REG,
- RD16 = DST | L_16 | REG,
- RD32 = DST | L_32 | REG,
- R3_8 = OP3 | L_8 | REG,
- R3_16 = OP3 | L_16 | REG,
- R3_32 = OP3 | L_32 | REG,
- RS8 = SRC | L_8 | REG,
- RS16 = SRC | L_16 | REG,
- RS32 = SRC | L_32 | REG,
-
- RSP = SRC | L_P | REG,
- RDP = DST | L_P | REG,
-
- PCREL8 = PCREL | L_8,
- PCREL16 = PCREL | L_16,
-
- OP3PCREL8 = OP3 | PCREL | L_8,
- OP3PCREL16 = OP3 | PCREL | L_16,
-
- INDEXB16 = INDEXB | L_16,
- INDEXW16 = INDEXW | L_16,
- INDEXL16 = INDEXL | L_16,
- INDEXB16D = INDEXB | L_16 | DST,
- INDEXW16D = INDEXW | L_16 | DST,
- INDEXL16D = INDEXL | L_16 | DST,
-
- INDEXB32 = INDEXB | L_32,
- INDEXW32 = INDEXW | L_32,
- INDEXL32 = INDEXL | L_32,
- INDEXB32D = INDEXB | L_32 | DST,
- INDEXW32D = INDEXW | L_32 | DST,
- INDEXL32D = INDEXL | L_32 | DST,
-
- DISP2SRC = DISP | L_2 | SRC,
- DISP16SRC = DISP | L_16 | SRC,
- DISP32SRC = DISP | L_32 | SRC,
-
- DISP2DST = DISP | L_2 | DST,
- DISP16DST = DISP | L_16 | DST,
- DISP32DST = DISP | L_32 | DST,
-
- DSTDISPREG = DST | DISPREG,
- SRCDISPREG = SRC | DISPREG,
-
- ABS8SRC = SRC | ABS | L_8,
- ABS16SRC = SRC | ABS | L_16U,
- ABS24SRC = SRC | ABS | L_24,
- ABS32SRC = SRC | ABS | L_32,
-
- ABS8DST = DST | ABS | L_8,
- ABS16DST = DST | ABS | L_16U,
- ABS24DST = DST | ABS | L_24,
- ABS32DST = DST | ABS | L_32,
-
- ABS8OP3 = OP3 | ABS | L_8,
- ABS16OP3 = OP3 | ABS | L_16U,
- ABS24OP3 = OP3 | ABS | L_24,
- ABS32OP3 = OP3 | ABS | L_32,
-
- RDDEC = DST | DEC,
- RSINC = SRC | INC,
- RDINC = DST | INC,
-
- RSPOSTINC = SRC | POSTINC,
- RDPOSTINC = DST | POSTINC,
- RSPREINC = SRC | PREINC,
- RDPREINC = DST | PREINC,
- RSPOSTDEC = SRC | POSTDEC,
- RDPOSTDEC = DST | POSTDEC,
- RSPREDEC = SRC | PREDEC,
- RDPREDEC = DST | PREDEC,
-
- RSIND = SRC | IND,
- RDIND = DST | IND,
- R3_IND = OP3 | IND,
-
-#define MS32 (SRC | L_32 | MACREG)
-#define MD32 (DST | L_32 | MACREG)
-
-#if 1
- OR8 = RS8, /* ??? OR as in One Register. */
- OR16 = RS16,
- OR32 = RS32,
-#else
- OR8 = RD8,
- OR16 = RD16,
- OR32 = RD32
-#endif
-};
-
-enum ctrlreg
-{
- C_CCR = 0,
- C_EXR = 1,
- C_MACH = 2,
- C_MACL = 3,
- C_VBR = 6,
- C_SBR = 7
-};
-
-enum {MAX_CODE_NIBBLES = 33};
-
-struct code
-{
- op_type nib[MAX_CODE_NIBBLES];
-};
-
-struct arg
-{
- op_type nib[3];
-};
-
-/* Availability of instructions on processor models. */
-enum h8_model
-{
- AV_H8,
- AV_H8H,
- AV_H8S,
- AV_H8SX
-};
-
-struct h8_opcode
-{
- int how;
- enum h8_model available;
- int time;
- char *name;
- struct arg args;
- struct code data;
-};
-
-#ifdef DEFINE_TABLE
-
-#define DATA2 DATA, DATA
-#define DATA3 DATA, DATA, DATA
-#define DATA5 DATA, DATA, DATA, DATA, DATA
-#define DATA7 DATA, DATA, DATA, DATA, DATA, DATA, DATA
-
-#define IMM8LIST IMM8, DATA
-#define IMM16LIST IMM16, DATA3
-#define IMM16ULIST IMM16U, DATA3
-#define IMM24LIST IMM24, DATA5
-#define IMM32LIST IMM32, DATA7
-
-#define DISP16LIST DISP | L_16, DATA3
-#define DISP24LIST DISP | L_24, DATA5
-#define DISP32LIST DISP | L_32, DATA7
-
-#define ABS8LIST ABS | L_8, DATA
-#define ABS16LIST ABS | L_16U, DATA3
-#define ABS24LIST ABS | L_24, DATA5
-#define ABS32LIST ABS | L_32, DATA7
-
-#define DSTABS8LIST DST | ABS | L_8, DATA
-#define DSTABS16LIST DST | ABS | L_16U, DATA3
-#define DSTABS24LIST DST | ABS | L_24, DATA5
-#define DSTABS32LIST DST | ABS | L_32, DATA7
-
-#define OP3ABS8LIST OP3 | ABS | L_8, DATA
-#define OP3ABS16LIST OP3 | ABS | L_16, DATA3
-#define OP3ABS24LIST OP3 | ABS | L_24, DATA5
-#define OP3ABS32LIST OP3 | ABS | L_32, DATA7
-
-#define DSTDISP16LIST DST | DISP | L_16, DATA3
-#define DSTDISP24LIST DST | DISP | L_24, DATA5
-#define DSTDISP32LIST DST | DISP | L_32, DATA7
-
-#define A16LIST L_16, DATA3
-#define A24LIST L_24, DATA5
-#define A32LIST L_32, DATA7
-
-/* Extended Operand Prefixes: */
-
-#define PREFIX_010 0x0, 0x1, 0x0
-#define PREFIX_015 0x0, 0x1, 0x5
-#define PREFIX_017 0x0, 0x1, 0x7
-
-#define PREFIX_0100 0x0, 0x1, 0x0, 0x0
-#define PREFIX_010_D2 0x0, 0x1, 0x0, B30 | B21 | DISP2SRC
-#define PREFIX_0101 0x0, 0x1, 0x0, 0x1
-#define PREFIX_0102 0x0, 0x1, 0x0, 0x2
-#define PREFIX_0103 0x0, 0x1, 0x0, 0x3
-#define PREFIX_0104 0x0, 0x1, 0x0, 0x4
-#define PREFIX_0105 0x0, 0x1, 0x0, 0x5
-#define PREFIX_0106 0x0, 0x1, 0x0, 0x6
-#define PREFIX_0107 0x0, 0x1, 0x0, 0x7
-#define PREFIX_0108 0x0, 0x1, 0x0, 0x8
-#define PREFIX_0109 0x0, 0x1, 0x0, 0x9
-#define PREFIX_010A 0x0, 0x1, 0x0, 0xa
-#define PREFIX_010D 0x0, 0x1, 0x0, 0xd
-#define PREFIX_010E 0x0, 0x1, 0x0, 0xe
-
-#define PREFIX_0150 0x0, 0x1, 0x5, 0x0
-#define PREFIX_015_D2 0x0, 0x1, 0x5, B30 | B21 | DISP2SRC
-#define PREFIX_0151 0x0, 0x1, 0x5, 0x1
-#define PREFIX_0152 0x0, 0x1, 0x5, 0x2
-#define PREFIX_0153 0x0, 0x1, 0x5, 0x3
-#define PREFIX_0154 0x0, 0x1, 0x5, 0x4
-#define PREFIX_0155 0x0, 0x1, 0x5, 0x5
-#define PREFIX_0156 0x0, 0x1, 0x5, 0x6
-#define PREFIX_0157 0x0, 0x1, 0x5, 0x7
-#define PREFIX_0158 0x0, 0x1, 0x5, 0x8
-#define PREFIX_0159 0x0, 0x1, 0x5, 0x9
-#define PREFIX_015A 0x0, 0x1, 0x5, 0xa
-#define PREFIX_015D 0x0, 0x1, 0x5, 0xd
-#define PREFIX_015E 0x0, 0x1, 0x5, 0xe
-#define PREFIX_015F 0x0, 0x1, 0x5, 0xf
-
-#define PREFIX_0170 0x0, 0x1, 0x7, 0x0
-#define PREFIX_017_D2S 0x0, 0x1, 0x7, B30 | B21 | DISP2SRC
-#define PREFIX_017_D2D 0x0, 0x1, 0x7, B30 | B21 | DISP2DST
-#define PREFIX_0171 0x0, 0x1, 0x7, 0x1
-#define PREFIX_0172 0x0, 0x1, 0x7, 0x2
-#define PREFIX_0173 0x0, 0x1, 0x7, 0x3
-#define PREFIX_0174 0x0, 0x1, 0x7, 0x4
-#define PREFIX_0175 0x0, 0x1, 0x7, 0x5
-#define PREFIX_0176 0x0, 0x1, 0x7, 0x6
-#define PREFIX_0177 0x0, 0x1, 0x7, 0x7
-#define PREFIX_0178 0x0, 0x1, 0x7, 0x8
-#define PREFIX_0179 0x0, 0x1, 0x7, 0x9
-#define PREFIX_017A 0x0, 0x1, 0x7, 0xa
-#define PREFIX_017D 0x0, 0x1, 0x7, 0xd
-#define PREFIX_017E 0x0, 0x1, 0x7, 0xe
-#define PREFIX_017F 0x0, 0x1, 0x7, 0xf
-
-#define PREFIX_6A15 0x6, 0xa, 0x1, 0x5
-#define PREFIX_6A35 0x6, 0xa, 0x3, 0x5
-#define PREFIX_6B15 0x6, 0xb, 0x1, 0x5
-#define PREFIX_6B35 0x6, 0xb, 0x3, 0x5
-
-#define PREFIX_78R4 0x7, 0x8, B31 | DISPREG, 0x4
-#define PREFIX_78R5 0x7, 0x8, B31 | DISPREG, 0x5
-#define PREFIX_78R6 0x7, 0x8, B31 | DISPREG, 0x6
-#define PREFIX_78R7 0x7, 0x8, B31 | DISPREG, 0x7
-
-#define PREFIX_78R4W 0x7, 0x8, B30 | DISPREG, 0x4
-#define PREFIX_78R5W 0x7, 0x8, B30 | DISPREG, 0x5
-#define PREFIX_78R6W 0x7, 0x8, B30 | DISPREG, 0x6
-#define PREFIX_78R7W 0x7, 0x8, B30 | DISPREG, 0x7
-
-#define PREFIX_78R4WD 0x7, 0x8, B30 | DSTDISPREG, 0x4
-#define PREFIX_78R5WD 0x7, 0x8, B30 | DSTDISPREG, 0x5
-#define PREFIX_78R6WD 0x7, 0x8, B30 | DSTDISPREG, 0x6
-#define PREFIX_78R7WD 0x7, 0x8, B30 | DSTDISPREG, 0x7
-
-#define PREFIX_7974 0x7, 0x9, 0x7, 0x4
-#define PREFIX_7A74 0x7, 0xa, 0x7, 0x4
-#define PREFIX_7A7C 0x7, 0xa, 0x7, 0xc
-
-
-/* Source standard fragment: */
-#define FROM_IND 0, RSIND
-#define FROM_POSTINC 8, RSPOSTINC
-#define FROM_POSTDEC 10, RSPOSTDEC
-#define FROM_PREINC 9, RSPREINC
-#define FROM_PREDEC 11, RSPREDEC
-#define FROM_DISP2 B30 | B20 | DISP2SRC, DISPREG
-#define FROM_DISP16 12, B30 | DISPREG
-#define FROM_DISP32 12, B31 | DISPREG
-#define FROM_DISP16B 13, B30 | DISPREG
-#define FROM_DISP16W 14, B30 | DISPREG
-#define FROM_DISP16L 15, B30 | DISPREG
-#define FROM_DISP32B 13, B31 | DISPREG
-#define FROM_DISP32W 14, B31 | DISPREG
-#define FROM_DISP32L 15, B31 | DISPREG
-#define FROM_ABS16 4, B30 | IGNORE
-#define FROM_ABS32 4, B31 | IGNORE
-
-/* Destination standard fragment: */
-#define TO_IND 0, RDIND
-#define TO_IND_MOV 0, RDIND | B30
-#define TO_POSTINC 8, RDPOSTINC
-#define TO_POSTINC_MOV 8, RDPOSTINC | B30
-#define TO_POSTDEC 10, RDPOSTDEC
-#define TO_POSTDEC_MOV 10, RDPOSTDEC | B30
-#define TO_PREINC 9, RDPREINC
-#define TO_PREINC_MOV 9, RDPREINC | B30
-#define TO_PREDEC 11, RDPREDEC
-#define TO_PREDEC_MOV 11, RDPREDEC | B30
-#define TO_DISP2 B30 | B20 | DISP2DST, DSTDISPREG
-#define TO_DISP2_MOV B30 | B20 | DISP2DST, DSTDISPREG | B30
-#define TO_DISP16 12, B30 | DSTDISPREG
-#define TO_DISP32 12, B31 | DSTDISPREG
-#define TO_DISP16B 13, B30 | DSTDISPREG
-#define TO_DISP16W 14, B30 | DSTDISPREG
-#define TO_DISP16L 15, B30 | DSTDISPREG
-#define TO_DISP32B 13, B31 | DSTDISPREG
-#define TO_DISP32W 14, B31 | DSTDISPREG
-#define TO_DISP32L 15, B31 | DSTDISPREG
-#define TO_ABS16 4, B30 | IGNORE
-#define TO_ABS32 4, B31 | IGNORE
-
-/* Source fragment for three-word instruction: */
-#define TFROM_IND 6, 9, B30 | RSIND, 12
-#define TFROM_DISP2 6, 9, B30 | DISPREG, 12
-#define TFROM_ABS16 6, 11, B30 | B20 | B10 | IGNORE, 12, ABS16LIST
-#define TFROM_ABS32 6, 11, B30 | B20 | B11 | IGNORE, 12, ABS32LIST
-#define TFROM_POSTINC 6, 13, B30 | RSPOSTINC, 12
-#define TFROM_PREINC 6, 13, B30 | RSPREINC, 12
-#define TFROM_POSTDEC 6, 13, B30 | RSPOSTDEC, 12
-#define TFROM_PREDEC 6, 13, B30 | RSPREDEC, 12
-#define TFROM_DISP16 6, 15, B30 | DISPREG, 12, DISP16LIST
-#define TFROM_DISP32 6, 11, 2, 12, DISP32LIST
-#define TFROM_DISP16B 6, 15, B30 | DISPREG, 12, DISP16LIST
-#define TFROM_DISP16W 6, 15, B30 | DISPREG, 12, DISP16LIST
-#define TFROM_DISP16L 6, 15, B30 | DISPREG, 12, DISP16LIST
-#define TFROM_DISP32B 6, 11, 2, 12, DISP32LIST
-#define TFROM_DISP32W 6, 11, 2, 12, DISP32LIST
-#define TFROM_DISP32L 6, 11, 2, 12, DISP32LIST
-#define TFROM_ABS16W 6, 11, 1, 12, ABS16LIST
-#define TFROM_ABS32W 6, 11, 3, 12, ABS32LIST
-
-/* Source fragment for three-word instruction: */
-#define TFROM_IND_B 6, 8, B30 | RSIND, 12
-#define TFROM_ABS16_B 6, 10, B30 | B20 | B10 | IGNORE, 12, ABS16LIST
-#define TFROM_ABS32_B 6, 10, B30 | B20 | B11 | IGNORE, 12, ABS32LIST
-
-#define TFROM_DISP2_B 6, 8, B30 | DISPREG, 12
-#define TFROM_POSTINC_B 6, 12, B30 | RSPOSTINC, 12
-#define TFROM_PREINC_B 6, 12, B30 | RSPREINC, 12
-#define TFROM_POSTDEC_B 6, 12, B30 | RSPOSTDEC, 12
-#define TFROM_PREDEC_B 6, 12, B30 | RSPREDEC, 12
-#define TFROM_DISP16_B 6, 14, B30 | DISPREG, 12, DISP16LIST
-#define TFROM_DISP32_B 6, 10, 2, 12, DISP32LIST
-#define TFROM_DISP16B_B 6, 14, B30 | DISPREG, 12, DISP16LIST
-#define TFROM_DISP16W_B 6, 14, B30 | DISPREG, 12, DISP16LIST
-#define TFROM_DISP16L_B 6, 14, B30 | DISPREG, 12, DISP16LIST
-#define TFROM_DISP32B_B 6, 10, 2, 12, DISP32LIST
-#define TFROM_DISP32W_B 6, 10, 2, 12, DISP32LIST
-#define TFROM_DISP32L_B 6, 10, 2, 12, DISP32LIST
-
-#define TFROM_ABS16W_B 6, 10, 1, 12, ABS16LIST
-#define TFROM_ABS32W_B 6, 10, 3, 12, ABS32LIST
-
-/* Extended Operand Class Expanders: */
-
-#define MOVFROM_STD(CODE, PREFIX, NAME, SRC, SRC_INFIX) \
- {CODE, AV_H8SX, 0, NAME, {{SRC, RDIND, E}}, {{PREFIX, SRC_INFIX, TO_IND_MOV, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, RDPOSTINC, E}}, {{PREFIX, SRC_INFIX, TO_POSTINC_MOV, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, RDPOSTDEC, E}}, {{PREFIX, SRC_INFIX, TO_POSTDEC_MOV, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, RDPREINC, E}}, {{PREFIX, SRC_INFIX, TO_PREINC_MOV, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, RDPREDEC, E}}, {{PREFIX, SRC_INFIX, TO_PREDEC_MOV, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, DISP2DST, E}}, {{PREFIX, SRC_INFIX, TO_DISP2_MOV, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, DISP16DST, E}}, {{PREFIX, SRC_INFIX, TO_DISP16, DSTDISP16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, DISP32DST, E}}, {{PREFIX, SRC_INFIX, TO_DISP32, DSTDISP32LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXB16D, E}}, {{PREFIX, SRC_INFIX, TO_DISP16B, DSTDISP16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXW16D, E}}, {{PREFIX, SRC_INFIX, TO_DISP16W, DSTDISP16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXL16D, E}}, {{PREFIX, SRC_INFIX, TO_DISP16L, DSTDISP16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXB32D, E}}, {{PREFIX, SRC_INFIX, TO_DISP32B, DSTDISP32LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXW32D, E}}, {{PREFIX, SRC_INFIX, TO_DISP32W, DSTDISP32LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXL32D, E}}, {{PREFIX, SRC_INFIX, TO_DISP32L, DSTDISP32LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, ABS16DST, E}}, {{PREFIX, SRC_INFIX, TO_ABS16, DSTABS16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, ABS32DST, E}}, {{PREFIX, SRC_INFIX, TO_ABS32, DSTABS32LIST, E}}}
-
-#define MOVFROM_AD(CODE, PREFIX, NAME, SRC, SRC_INFIX, SRC_SUFFIX) \
- {CODE, AV_H8SX, 0, NAME, {{SRC, RDIND, E}}, {{PREFIX, SRC_INFIX, TO_IND_MOV, SRC_SUFFIX, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, RDPOSTINC, E}}, {{PREFIX, SRC_INFIX, TO_POSTINC_MOV, SRC_SUFFIX, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, RDPOSTDEC, E}}, {{PREFIX, SRC_INFIX, TO_POSTDEC_MOV, SRC_SUFFIX, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, RDPREINC, E}}, {{PREFIX, SRC_INFIX, TO_PREINC_MOV, SRC_SUFFIX, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, RDPREDEC, E}}, {{PREFIX, SRC_INFIX, TO_PREDEC_MOV, SRC_SUFFIX, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, DISP2DST, E}}, {{PREFIX, SRC_INFIX, TO_DISP2_MOV, SRC_SUFFIX, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, DISP16DST, E}}, {{PREFIX, SRC_INFIX, TO_DISP16, SRC_SUFFIX, DSTDISP16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, DISP32DST, E}}, {{PREFIX, SRC_INFIX, TO_DISP32, SRC_SUFFIX, DSTDISP32LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXB16D, E}}, {{PREFIX, SRC_INFIX, TO_DISP16B, SRC_SUFFIX, DSTDISP16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXW16D, E}}, {{PREFIX, SRC_INFIX, TO_DISP16W, SRC_SUFFIX, DSTDISP16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXL16D, E}}, {{PREFIX, SRC_INFIX, TO_DISP16L, SRC_SUFFIX, DSTDISP16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXB32D, E}}, {{PREFIX, SRC_INFIX, TO_DISP32B, SRC_SUFFIX, DSTDISP32LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXW32D, E}}, {{PREFIX, SRC_INFIX, TO_DISP32W, SRC_SUFFIX, DSTDISP32LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXL32D, E}}, {{PREFIX, SRC_INFIX, TO_DISP32L, SRC_SUFFIX, DSTDISP32LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, ABS16DST, E}}, {{PREFIX, SRC_INFIX, TO_ABS16, SRC_SUFFIX, DSTABS16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, ABS32DST, E}}, {{PREFIX, SRC_INFIX, TO_ABS32, SRC_SUFFIX, DSTABS32LIST, E}}}
-
-#define MOVFROM_IMM8(CODE, PREFIX, NAME, SRC) \
- {CODE, AV_H8SX, 0, NAME, {{SRC, RDIND, E}}, {{PREFIX, 0, RDIND, IMM8LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, RDPOSTINC, E}}, {{PREFIX, 8, RDPOSTINC, IMM8LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, RDPOSTDEC, E}}, {{PREFIX, 10, RDPOSTDEC, IMM8LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, RDPREINC, E}}, {{PREFIX, 9, RDPREINC, IMM8LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, RDPREDEC, E}}, {{PREFIX, 11, RDPREDEC, IMM8LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, DISP2DST, E}}, {{PREFIX, B30 | B20 | DISP2DST, DSTDISPREG, IMM8LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, DISP16DST, E}}, {{PREFIX, 12, B30 | DSTDISPREG, IMM8LIST, DSTDISP16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, DISP32DST, E}}, {{PREFIX, 12, B31 | DSTDISPREG, IMM8LIST, DSTDISP32LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXB16D, E}}, {{PREFIX, 13, B30 | DSTDISPREG, IMM8LIST, DSTDISP16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXW16D, E}}, {{PREFIX, 14, B30 | DSTDISPREG, IMM8LIST, DSTDISP16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXL16D, E}}, {{PREFIX, 15, B30 | DSTDISPREG, IMM8LIST, DSTDISP16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXB32D, E}}, {{PREFIX, 13, B31 | DSTDISPREG, IMM8LIST, DSTDISP32LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXW32D, E}}, {{PREFIX, 14, B31 | DSTDISPREG, IMM8LIST, DSTDISP32LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXL32D, E}}, {{PREFIX, 15, B31 | DSTDISPREG, IMM8LIST, DSTDISP32LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, ABS16DST, E}}, {{PREFIX, 4, B30 | IGNORE, IMM8LIST, DSTABS16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, ABS32DST, E}}, {{PREFIX, 4, B31 | IGNORE, IMM8LIST, DSTABS32LIST, E}}}
-
-#define MOVFROM_IMM(CODE, PREFIX, NAME, SRC, LIST) \
- {CODE, AV_H8SX, 0, NAME, {{SRC, RDIND, E}}, {{PREFIX, LIST, 0, RDIND, DATA2, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, RDPOSTINC, E}}, {{PREFIX, LIST, 8, RDPOSTINC, DATA2, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, RDPOSTDEC, E}}, {{PREFIX, LIST, 10, RDPOSTDEC, DATA2, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, RDPREINC, E}}, {{PREFIX, LIST, 9, RDPREINC, DATA2, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, RDPREDEC, E}}, {{PREFIX, LIST, 11, RDPREDEC, DATA2, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, DISP2DST, E}}, {{PREFIX, LIST, B30 | B20 | DISP2DST, DSTDISPREG, DATA2, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, DISP16DST, E}}, {{PREFIX, LIST, 12, B30 | DSTDISPREG, DATA2, DSTDISP16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, DISP32DST, E}}, {{PREFIX, LIST, 12, B31 | DSTDISPREG, DATA2, DSTDISP32LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXB16D, E}}, {{PREFIX, LIST, 13, B30 | DSTDISPREG, DATA2, DSTDISP16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXW16D, E}}, {{PREFIX, LIST, 14, B30 | DSTDISPREG, DATA2, DSTDISP16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXL16D, E}}, {{PREFIX, LIST, 15, B30 | DSTDISPREG, DATA2, DSTDISP16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXB32D, E}}, {{PREFIX, LIST, 13, B31 | DSTDISPREG, DATA2, DSTDISP32LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXW32D, E}}, {{PREFIX, LIST, 14, B31 | DSTDISPREG, DATA2, DSTDISP32LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXL32D, E}}, {{PREFIX, LIST, 15, B31 | DSTDISPREG, DATA2, DSTDISP32LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, ABS16DST, E}}, {{PREFIX, LIST, 4, B30 | IGNORE, DATA2, DSTABS16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, ABS32DST, E}}, {{PREFIX, LIST, 4, B31 | IGNORE, DATA2, DSTABS32LIST, E}}}
-
-#define MOVFROM_REG_BW(CODE, NAME, SRC, PREFIX, OP1, OP2, OP3, OP4, RELAX16) \
- {CODE, AV_H8, 4, NAME, {{SRC, RDIND, E}}, {{ 6, OP1, B31 | RDIND, SRC, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, RDPOSTINC, E}}, {{PREFIX, 3, 6, OP3, B31 | RDPOSTINC, SRC, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, RDPOSTDEC, E}}, {{PREFIX, 1, 6, OP3, B31 | RDPOSTDEC, SRC, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, RDPREINC, E}}, {{PREFIX, 2, 6, OP3, B31 | RDPREINC, SRC, E}}}, \
- {CODE, AV_H8, 6, NAME, {{SRC, RDPREDEC, E}}, {{ 6, OP3, B31 | RDPREDEC, SRC, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, DISP2DST, E}}, {{PREFIX, B30 | B20 | DISP2DST, 6, OP1, B31 | DSTDISPREG, SRC, E}}}, \
- {CODE, AV_H8, 6, NAME, {{SRC, DISP16DST, E}}, {{ 6, OP4, B31 | DSTDISPREG, SRC, DSTDISP16LIST, E}}}, \
- {CODE, AV_H8, 6, NAME, {{SRC, DISP32DST, E}}, {{7, 8, B30 | DSTDISPREG, 0, 6, OP2, 10, SRC, MEMRELAX | DSTDISP32LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXB16D, E}}, {{PREFIX, 1, 6, OP4, B31 | DSTDISPREG, SRC, DSTDISP16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXW16D, E}}, {{PREFIX, 2, 6, OP4, B31 | DSTDISPREG, SRC, DSTDISP16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXL16D, E}}, {{PREFIX, 3, 6, OP4, B31 | DSTDISPREG, SRC, DSTDISP16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXB32D, E}}, {{7, 8, B30 | DSTDISPREG, 1, 6, OP2, 10, SRC, DSTDISP32LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXW32D, E}}, {{7, 8, B30 | DSTDISPREG, 2, 6, OP2, 10, SRC, DSTDISP32LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXL32D, E}}, {{7, 8, B30 | DSTDISPREG, 3, 6, OP2, 10, SRC, DSTDISP32LIST, E}}}, \
- {CODE, AV_H8, 4, NAME, {{SRC, ABS16DST, E}}, {{ 6, OP2, 8, SRC, RELAX16 | DSTABS16LIST, E}}}, \
- {CODE, AV_H8, 6, NAME, {{SRC, ABS32DST, E}}, {{ 6, OP2, 10, SRC, MEMRELAX | DSTABS32LIST, E}}}
-
-#define MOVTO_REG_BW(CODE, NAME, DST, PREFIX, OP1, OP2, OP3, OP4, RELAX16) \
- {CODE, AV_H8, 4, NAME, {{RSIND, DST, E}}, {{ 6, OP1, B30 | RSIND, DST, E}}}, \
- {CODE, AV_H8, 6, NAME, {{RSPOSTINC, DST, E}}, {{ 6, OP3, B30 | RSPOSTINC, DST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{RSPOSTDEC, DST, E}}, {{PREFIX, 2, 6, OP3, B30 | RSPOSTDEC, DST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{RSPREINC, DST, E}}, {{PREFIX, 1, 6, OP3, B30 | RSPREINC, DST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{RSPREDEC, DST, E}}, {{PREFIX, 3, 6, OP3, B30 | RSPREDEC, DST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{DISP2SRC, DST, E}}, {{PREFIX, B30 | B20 | DISP2SRC, 6, OP1, B30 | DISPREG, DST, E}}}, \
- {CODE, AV_H8, 6, NAME, {{DISP16SRC, DST, E}}, {{ 6, OP4, B30 | DISPREG, DST, DISP16LIST, E}}}, \
- {CODE, AV_H8, 6, NAME, {{DISP32SRC, DST, E}}, {{7, 8, B30 | DISPREG, 0, 6, OP2, 2, DST, MEMRELAX | DISP32LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{INDEXB16, DST, E}}, {{PREFIX, 1, 6, OP4, B30 | DISPREG, DST, DISP16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{INDEXW16, DST, E}}, {{PREFIX, 2, 6, OP4, B30 | DISPREG, DST, DISP16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{INDEXL16, DST, E}}, {{PREFIX, 3, 6, OP4, B30 | DISPREG, DST, DISP16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{INDEXB32, DST, E}}, {{7, 8, B30 | DISPREG, 1, 6, OP2, 2, DST, DISP32LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{INDEXW32, DST, E}}, {{7, 8, B30 | DISPREG, 2, 6, OP2, 2, DST, DISP32LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{INDEXL32, DST, E}}, {{7, 8, B30 | DISPREG, 3, 6, OP2, 2, DST, DISP32LIST, E}}}, \
- {CODE, AV_H8, 4, NAME, {{ABS16SRC, DST, E}}, {{ 6, OP2, 0, DST, RELAX16 | ABS16LIST, E}}}, \
- {CODE, AV_H8, 6, NAME, {{ABS32SRC, DST, E}}, {{ 6, OP2, 2, DST, MEMRELAX | ABS32LIST, E}}}
-
-/* Expansion macros for two-word (plus data) instructions. */
-
-/* Expansion from one source to "standard" destinations. */
-#define EXPAND2_STD_SRC(CODE, WEIGHT, NAME, SRC, PREFIX, NIB1, NIB2) \
- {CODE, AV_H8SX, 0, NAME, {{SRC, RDPOSTINC, E}}, {{PREFIX, TO_POSTINC, NIB1, NIB2, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, RDPOSTDEC, E}}, {{PREFIX, TO_POSTDEC, NIB1, NIB2, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, RDPREINC, E}}, {{PREFIX, TO_PREINC, NIB1, NIB2, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, RDPREDEC, E}}, {{PREFIX, TO_PREDEC, NIB1, NIB2, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, DISP2DST, E}}, {{PREFIX, TO_DISP2, NIB1, NIB2, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, DISP16DST, E}}, {{PREFIX, TO_DISP16, NIB1, NIB2, DSTDISP16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, DISP32DST, E}}, {{PREFIX, TO_DISP32, NIB1, NIB2, DSTDISP32LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXB16D, E}}, {{PREFIX, TO_DISP16B, NIB1, NIB2, DSTDISP16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXW16D, E}}, {{PREFIX, TO_DISP16W, NIB1, NIB2, DSTDISP16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXL16D, E}}, {{PREFIX, TO_DISP16L, NIB1, NIB2, DSTDISP16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXB32D, E}}, {{PREFIX, TO_DISP32B, NIB1, NIB2, DSTDISP32LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXW32D, E}}, {{PREFIX, TO_DISP32W, NIB1, NIB2, DSTDISP32LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXL32D, E}}, {{PREFIX, TO_DISP32L, NIB1, NIB2, DSTDISP32LIST, E}}}
-
-/* Expansion from one destination to "standard" sources. */
-#define EXPAND2_STD_DST(CODE, WEIGHT, NAME, DST, PREFIX, NIB1, NIB2) \
- {CODE, AV_H8SX, 0, NAME, {{RSPOSTINC, DST, E}}, {{PREFIX, FROM_POSTINC, NIB1, NIB2, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{RSPOSTDEC, DST, E}}, {{PREFIX, FROM_POSTDEC, NIB1, NIB2, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{RSPREINC, DST, E}}, {{PREFIX, FROM_PREINC, NIB1, NIB2, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{RSPREDEC, DST, E}}, {{PREFIX, FROM_PREDEC, NIB1, NIB2, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{DISP2SRC, DST, E}}, {{PREFIX, FROM_DISP2, NIB1, NIB2, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{DISP16SRC, DST, E}}, {{PREFIX, FROM_DISP16, NIB1, NIB2, DISP16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{DISP32SRC, DST, E}}, {{PREFIX, FROM_DISP32, NIB1, NIB2, DISP32LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{INDEXB16, DST, E}}, {{PREFIX, FROM_DISP16B, NIB1, NIB2, DISP16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{INDEXW16, DST, E}}, {{PREFIX, FROM_DISP16W, NIB1, NIB2, DISP16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{INDEXL16, DST, E}}, {{PREFIX, FROM_DISP16L, NIB1, NIB2, DISP16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{INDEXB32, DST, E}}, {{PREFIX, FROM_DISP32B, NIB1, NIB2, DISP32LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{INDEXW32, DST, E}}, {{PREFIX, FROM_DISP32W, NIB1, NIB2, DISP32LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{INDEXL32, DST, E}}, {{PREFIX, FROM_DISP32L, NIB1, NIB2, DISP32LIST, E}}}
-
-/* Expansion from immediate source to "standard" destinations. */
-#define EXPAND2_STD_IMM(CODE, WEIGHT, NAME, SRC, PREFIX, OPCODE, IGN, IMMLIST) \
- {CODE, AV_H8SX, 0, NAME, {{SRC, RDPOSTINC, E}}, {{PREFIX, TO_POSTINC, OPCODE, IGN, IMMLIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, RDPOSTDEC, E}}, {{PREFIX, TO_POSTDEC, OPCODE, IGN, IMMLIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, RDPREINC, E}}, {{PREFIX, TO_PREINC, OPCODE, IGN, IMMLIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, RDPREDEC, E}}, {{PREFIX, TO_PREDEC, OPCODE, IGN, IMMLIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, DISP2DST, E}}, {{PREFIX, TO_DISP2, OPCODE, IGN, IMMLIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, DISP16DST, E}}, {{PREFIX, TO_DISP16, OPCODE, IGN, DSTDISP16LIST, IMMLIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, DISP32DST, E}}, {{PREFIX, TO_DISP32, OPCODE, IGN, DSTDISP32LIST, IMMLIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXB16D, E}}, {{PREFIX, TO_DISP16B, OPCODE, IGN, DSTDISP16LIST, IMMLIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXW16D, E}}, {{PREFIX, TO_DISP16W, OPCODE, IGN, DSTDISP16LIST, IMMLIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXL16D, E}}, {{PREFIX, TO_DISP16L, OPCODE, IGN, DSTDISP16LIST, IMMLIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXB32D, E}}, {{PREFIX, TO_DISP32B, OPCODE, IGN, DSTDISP32LIST, IMMLIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXW32D, E}}, {{PREFIX, TO_DISP32W, OPCODE, IGN, DSTDISP32LIST, IMMLIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXL32D, E}}, {{PREFIX, TO_DISP32L, OPCODE, IGN, DSTDISP32LIST, IMMLIST, E}}}
-
-/* Expansion from abs/disp source to "standard" destinations. */
-#define EXPAND2_STD_ABSDISP(CODE, WEIGHT, NAME, SRC, PREFIX, DSTLIST, NIB1, NIB2) \
- {CODE, AV_H8SX, 0, NAME, {{SRC, RDPOSTINC, E}}, {{PREFIX, DSTLIST, TO_POSTINC, NIB1, NIB2, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, RDPOSTDEC, E}}, {{PREFIX, DSTLIST, TO_POSTDEC, NIB1, NIB2, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, RDPREINC, E}}, {{PREFIX, DSTLIST, TO_PREINC, NIB1, NIB2, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, RDPREDEC, E}}, {{PREFIX, DSTLIST, TO_PREDEC, NIB1, NIB2, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, DISP2DST, E}}, {{PREFIX, DSTLIST, TO_DISP2, NIB1, NIB2, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, DISP16DST, E}}, {{PREFIX, DSTLIST, TO_DISP16, NIB1, NIB2, DSTDISP16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, DISP32DST, E}}, {{PREFIX, DSTLIST, TO_DISP32, NIB1, NIB2, DSTDISP32LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXB16D, E}}, {{PREFIX, DSTLIST, TO_DISP16B, NIB1, NIB2, DSTDISP16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXW16D, E}}, {{PREFIX, DSTLIST, TO_DISP16W, NIB1, NIB2, DSTDISP16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXL16D, E}}, {{PREFIX, DSTLIST, TO_DISP16L, NIB1, NIB2, DSTDISP16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXB32D, E}}, {{PREFIX, DSTLIST, TO_DISP32B, NIB1, NIB2, DSTDISP32LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXW32D, E}}, {{PREFIX, DSTLIST, TO_DISP32W, NIB1, NIB2, DSTDISP32LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXL32D, E}}, {{PREFIX, DSTLIST, TO_DISP32L, NIB1, NIB2, DSTDISP32LIST, E}}}
-
-/* Expansion from ind source to "standard" destinations. */
-#define EXPAND2_STD_IND(CODE, WEIGHT, NAME, OPCODE, BIT) \
- {CODE, AV_H8SX, 0, NAME, {{RSIND, RDPOSTINC, E}}, {{0x7, 0xc, BIT | RSIND, 0x5, TO_POSTINC, OPCODE, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{RSIND, RDPOSTDEC, E}}, {{0x7, 0xc, BIT | RSIND, 0x5, TO_POSTDEC, OPCODE, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{RSIND, RDPREINC, E}}, {{0x7, 0xc, BIT | RSIND, 0x5, TO_PREINC, OPCODE, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{RSIND, RDPREDEC, E}}, {{0x7, 0xc, BIT | RSIND, 0x5, TO_PREDEC, OPCODE, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{RSIND, DISP2DST, E}}, {{0x7, 0xc, BIT | RSIND, 0x5, TO_DISP2, OPCODE, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{RSIND, DISP16DST, E}}, {{0x7, 0xc, BIT | RSIND, 0x5, TO_DISP16, OPCODE, IGNORE, DSTDISP16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{RSIND, DISP32DST, E}}, {{0x7, 0xc, BIT | RSIND, 0x5, TO_DISP32, OPCODE, IGNORE, DSTDISP32LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{RSIND, INDEXB16D, E}}, {{0x7, 0xc, BIT | RSIND, 0x5, TO_DISP16B, OPCODE, IGNORE, DSTDISP16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{RSIND, INDEXW16D, E}}, {{0x7, 0xc, BIT | RSIND, 0x5, TO_DISP16W, OPCODE, IGNORE, DSTDISP16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{RSIND, INDEXL16D, E}}, {{0x7, 0xc, BIT | RSIND, 0x5, TO_DISP16L, OPCODE, IGNORE, DSTDISP16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{RSIND, INDEXB32D, E}}, {{0x7, 0xc, BIT | RSIND, 0x5, TO_DISP32B, OPCODE, IGNORE, DSTDISP32LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{RSIND, INDEXW32D, E}}, {{0x7, 0xc, BIT | RSIND, 0x5, TO_DISP32W, OPCODE, IGNORE, DSTDISP32LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{RSIND, INDEXL32D, E}}, {{0x7, 0xc, BIT | RSIND, 0x5, TO_DISP32L, OPCODE, IGNORE, DSTDISP32LIST, E}}}
-
-/* Expansion macros for three word (plus data) instructions. */
-
-#define EXPAND3_STD_SRC(CODE, WEIGHT, NAME, SRC, PREFIX, INFIX, OPCODE) \
- {CODE, AV_H8SX, 0, NAME, {{SRC, RDPOSTINC, E}}, {{PREFIX, INFIX, 8, RDPOSTINC, OPCODE, B30 | IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, RDPOSTDEC, E}}, {{PREFIX, INFIX, 10, RDPOSTDEC, OPCODE, B30 | IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, RDPREINC, E}}, {{PREFIX, INFIX, 9, RDPREINC, OPCODE, B30 | IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, RDPREDEC, E}}, {{PREFIX, INFIX, 11, RDPREDEC, OPCODE, B30 | IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, DISP2DST, E}}, {{PREFIX, INFIX, B30 | B20 | DISP2DST, DSTDISPREG, OPCODE, B30 | IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, DISP16DST, E}}, {{PREFIX, INFIX, 12, B30 | DSTDISPREG, OPCODE, B30 | IGNORE, DSTDISP16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, DISP32DST, E}}, {{PREFIX, INFIX, 12, B31 | DSTDISPREG, OPCODE, B30 | IGNORE, DSTDISP32LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXB16D, E}}, {{PREFIX, INFIX, 13, B30 | DSTDISPREG, OPCODE, B30 | IGNORE, DSTDISP16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXW16D, E}}, {{PREFIX, INFIX, 14, B30 | DSTDISPREG, OPCODE, B30 | IGNORE, DSTDISP16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXL16D, E}}, {{PREFIX, INFIX, 15, B30 | DSTDISPREG, OPCODE, B30 | IGNORE, DSTDISP16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXB32D, E}}, {{PREFIX, INFIX, 13, B31 | DSTDISPREG, OPCODE, B30 | IGNORE, DSTDISP32LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXW32D, E}}, {{PREFIX, INFIX, 14, B31 | DSTDISPREG, OPCODE, B30 | IGNORE, DSTDISP32LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXL32D, E}}, {{PREFIX, INFIX, 15, B31 | DSTDISPREG, OPCODE, B30 | IGNORE, DSTDISP32LIST, E}}}
-
-#define EXPAND3_L_SRC(CODE, WEIGHT, NAME, SRC, PREFIX, INFIX, OPCODE) \
- {CODE, AV_H8SX, 0, NAME, {{SRC, RDIND, E}}, {{PREFIX, INFIX, 0, RDIND, OPCODE, B30 | IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, RDPOSTINC, E}}, {{PREFIX, INFIX, 8, RDPOSTINC, OPCODE, B30 | IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, RDPOSTDEC, E}}, {{PREFIX, INFIX, 10, RDPOSTDEC, OPCODE, B30 | IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, RDPREINC, E}}, {{PREFIX, INFIX, 9, RDPREINC, OPCODE, B30 | IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, RDPREDEC, E}}, {{PREFIX, INFIX, 11, RDPREDEC, OPCODE, B30 | IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, DISP2DST, E}}, {{PREFIX, INFIX, B30 | B20 | DISP2DST, DSTDISPREG, OPCODE, B30 | IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, DISP16DST, E}}, {{PREFIX, INFIX, 12, B30 | DSTDISPREG, OPCODE, B30 | IGNORE, DSTDISP16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, DISP32DST, E}}, {{PREFIX, INFIX, 12, B31 | DSTDISPREG, OPCODE, B30 | IGNORE, DSTDISP32LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXB16D, E}}, {{PREFIX, INFIX, 13, B30 | DSTDISPREG, OPCODE, B30 | IGNORE, DSTDISP16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXW16D, E}}, {{PREFIX, INFIX, 14, B30 | DSTDISPREG, OPCODE, B30 | IGNORE, DSTDISP16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXL16D, E}}, {{PREFIX, INFIX, 15, B30 | DSTDISPREG, OPCODE, B30 | IGNORE, DSTDISP16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXB32D, E}}, {{PREFIX, INFIX, 13, B31 | DSTDISPREG, OPCODE, B30 | IGNORE, DSTDISP32LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXW32D, E}}, {{PREFIX, INFIX, 14, B31 | DSTDISPREG, OPCODE, B30 | IGNORE, DSTDISP32LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXL32D, E}}, {{PREFIX, INFIX, 15, B31 | DSTDISPREG, OPCODE, B30 | IGNORE, DSTDISP32LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, ABS16DST, E}}, {{PREFIX, INFIX, 4, B30 | IGNORE, OPCODE, B30 | IGNORE, DSTABS16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{SRC, ABS32DST, E}}, {{PREFIX, INFIX, 4, B31 | IGNORE, OPCODE, B30 | IGNORE, DSTABS32LIST, E}}}
-
-
-#define EXPAND_STD_MATRIX_L(CODE, NAME, OPCODE) \
- EXPAND3_L_SRC (CODE, 6, NAME, RSIND, PREFIX_0104, TFROM_IND, OPCODE), \
- EXPAND3_L_SRC (CODE, 6, NAME, RSPOSTINC, PREFIX_0104, TFROM_POSTINC, OPCODE), \
- EXPAND3_L_SRC (CODE, 6, NAME, RSPOSTDEC, PREFIX_0106, TFROM_POSTDEC, OPCODE), \
- EXPAND3_L_SRC (CODE, 6, NAME, RSPREINC, PREFIX_0105, TFROM_PREINC, OPCODE), \
- EXPAND3_L_SRC (CODE, 6, NAME, RSPREDEC, PREFIX_0107, TFROM_PREDEC, OPCODE), \
- EXPAND3_L_SRC (CODE, 6, NAME, DISP2SRC, PREFIX_010_D2, TFROM_DISP2, OPCODE), \
- EXPAND3_L_SRC (CODE, 6, NAME, DISP16SRC, PREFIX_0104, TFROM_DISP16, OPCODE), \
- EXPAND3_L_SRC (CODE, 6, NAME, DISP32SRC, PREFIX_78R4, TFROM_DISP32, OPCODE), \
- EXPAND3_L_SRC (CODE, 6, NAME, INDEXB16, PREFIX_0105, TFROM_DISP16B, OPCODE), \
- EXPAND3_L_SRC (CODE, 6, NAME, INDEXW16, PREFIX_0106, TFROM_DISP16W, OPCODE), \
- EXPAND3_L_SRC (CODE, 6, NAME, INDEXL16, PREFIX_0107, TFROM_DISP16L, OPCODE), \
- EXPAND3_L_SRC (CODE, 6, NAME, INDEXB32, PREFIX_78R5, TFROM_DISP32B, OPCODE), \
- EXPAND3_L_SRC (CODE, 6, NAME, INDEXW32, PREFIX_78R6, TFROM_DISP32W, OPCODE), \
- EXPAND3_L_SRC (CODE, 6, NAME, INDEXL32, PREFIX_78R7, TFROM_DISP32L, OPCODE), \
- EXPAND3_L_SRC (CODE, 6, NAME, ABS16SRC, PREFIX_0104, TFROM_ABS16, OPCODE), \
- EXPAND3_L_SRC (CODE, 6, NAME, ABS32SRC, PREFIX_0104, TFROM_ABS32, OPCODE)
-
-
-#define EXPAND_STD_MATRIX_W(CODE, NAME, OPCODE) \
- EXPAND3_L_SRC (CODE, 4, NAME, RSPOSTINC, PREFIX_0154, TFROM_POSTINC, OPCODE), \
- EXPAND3_L_SRC (CODE, 4, NAME, RSPOSTDEC, PREFIX_0156, TFROM_POSTDEC, OPCODE), \
- EXPAND3_L_SRC (CODE, 4, NAME, RSPREINC, PREFIX_0155, TFROM_PREINC, OPCODE), \
- EXPAND3_L_SRC (CODE, 4, NAME, RSPREDEC, PREFIX_0157, TFROM_PREDEC, OPCODE), \
- EXPAND3_L_SRC (CODE, 4, NAME, DISP2SRC, PREFIX_015_D2, TFROM_DISP2, OPCODE), \
- EXPAND3_L_SRC (CODE, 4, NAME, DISP16SRC, PREFIX_0154, TFROM_DISP16, OPCODE), \
- EXPAND3_L_SRC (CODE, 4, NAME, DISP32SRC, PREFIX_78R4W, TFROM_DISP32, OPCODE), \
- EXPAND3_L_SRC (CODE, 4, NAME, INDEXB16, PREFIX_0155, TFROM_DISP16B, OPCODE), \
- EXPAND3_L_SRC (CODE, 4, NAME, INDEXW16, PREFIX_0156, TFROM_DISP16W, OPCODE), \
- EXPAND3_L_SRC (CODE, 4, NAME, INDEXL16, PREFIX_0157, TFROM_DISP16L, OPCODE), \
- EXPAND3_L_SRC (CODE, 4, NAME, INDEXB32, PREFIX_78R5W, TFROM_DISP32B, OPCODE), \
- EXPAND3_L_SRC (CODE, 4, NAME, INDEXW32, PREFIX_78R6W, TFROM_DISP32W, OPCODE), \
- EXPAND3_L_SRC (CODE, 4, NAME, INDEXL32, PREFIX_78R7W, TFROM_DISP32L, OPCODE)
-
-#define EXPAND_STD_MATRIX_B(CODE, NAME, OPCODE) \
- EXPAND3_L_SRC (CODE, 4, NAME, RSPOSTINC, PREFIX_0174, TFROM_POSTINC_B, OPCODE), \
- EXPAND3_L_SRC (CODE, 4, NAME, RSPOSTDEC, PREFIX_0176, TFROM_POSTDEC_B, OPCODE), \
- EXPAND3_L_SRC (CODE, 4, NAME, RSPREINC, PREFIX_0175, TFROM_PREINC_B, OPCODE), \
- EXPAND3_L_SRC (CODE, 4, NAME, RSPREDEC, PREFIX_0177, TFROM_PREDEC_B, OPCODE), \
- EXPAND3_L_SRC (CODE, 4, NAME, DISP2SRC, PREFIX_017_D2S, TFROM_DISP2_B, OPCODE), \
- EXPAND3_L_SRC (CODE, 4, NAME, DISP16SRC, PREFIX_0174, TFROM_DISP16_B, OPCODE), \
- EXPAND3_L_SRC (CODE, 4, NAME, DISP32SRC, PREFIX_78R4W, TFROM_DISP32_B, OPCODE), \
- EXPAND3_L_SRC (CODE, 4, NAME, INDEXB16, PREFIX_0175, TFROM_DISP16B_B, OPCODE), \
- EXPAND3_L_SRC (CODE, 4, NAME, INDEXW16, PREFIX_0176, TFROM_DISP16W_B, OPCODE), \
- EXPAND3_L_SRC (CODE, 4, NAME, INDEXL16, PREFIX_0177, TFROM_DISP16L_B, OPCODE), \
- EXPAND3_L_SRC (CODE, 4, NAME, INDEXB32, PREFIX_78R5W, TFROM_DISP32B_B, OPCODE), \
- EXPAND3_L_SRC (CODE, 4, NAME, INDEXW32, PREFIX_78R6W, TFROM_DISP32W_B, OPCODE), \
- EXPAND3_L_SRC (CODE, 4, NAME, INDEXL32, PREFIX_78R7W, TFROM_DISP32L_B, OPCODE)
-
-
-/* Use the expansion macros to fill out the opcode table. */
-
-#define EXPAND_FROM_REG8(CODE, NAME, OP1, OP2, OP3) \
- {CODE, AV_H8SX, 0, NAME, {{RS8, RDIND, E}}, {{0x7, 0xd, B30 | RDIND, IGNORE, OP1, OP2, RS8, IGNORE, E}}}, \
- EXPAND2_STD_SRC (CODE, 2, NAME, RS8, PREFIX_0179, OP3, RS8), \
- {CODE, AV_H8SX, 0, NAME, {{RS8, ABS8DST, E}}, {{0x7, 0xf, DSTABS8LIST, OP1, OP2, RS8, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{RS8, ABS16DST, E}}, {{0x6, 0xa, 0x1, B31 | IGNORE, DSTABS16LIST, OP1, OP2, RS8, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{RS8, ABS32DST, E}}, {{0x6, 0xa, 0x3, B31 | IGNORE, DSTABS32LIST, OP1, OP2, RS8, IGNORE, E}}}
-
-#define EXPAND_TO_REG8(CODE, NAME, OP1, OP2, OP3) \
- {CODE, AV_H8SX, 0, NAME, {{RSIND, RD8, E}}, {{0x7, 0xc, B30 | RSIND, IGNORE, OP1, OP2, IGNORE, RD8, E}}}, \
- EXPAND2_STD_DST (CODE, 2, NAME, RD8, PREFIX_017A, OP3, RD8), \
- {CODE, AV_H8SX, 0, NAME, {{ABS8SRC, RD8, E}}, {{0x7, 0xe, ABS8LIST, OP1, OP2, IGNORE, RD8, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{ABS16SRC, RD8, E}}, {{0x6, 0xa, 0x1, B30 | IGNORE, ABS16LIST, OP1, OP2, IGNORE, RD8, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{ABS32SRC, RD8, E}}, {{0x6, 0xa, 0x3, B30 | IGNORE, ABS32LIST, OP1, OP2, IGNORE, RD8, E}}}
-
-#define EXPAND_FROM_IND8(CODE, NAME, OPCODE) \
- {CODE, AV_H8SX, 0, NAME, {{RSIND, RDIND, E}}, {{0x7, 0xc, B30 | RSIND, 0x5, TO_IND, OPCODE, IGNORE, E}}}, \
- EXPAND2_STD_IND (CODE, 2, NAME, OPCODE, B30), \
- {CODE, AV_H8SX, 0, NAME, {{RSIND, ABS16DST, E}}, {{0x7, 0xc, B30 | RSIND, 0x5, TO_ABS16, OPCODE, IGNORE, DSTABS16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{RSIND, ABS32DST, E}}, {{0x7, 0xc, B30 | RSIND, 0x5, TO_ABS32, OPCODE, IGNORE, DSTABS32LIST, E}}}
-
-#define EXPAND_FROM_ABS16_B(CODE, NAME, OPCODE) \
- {CODE, AV_H8SX, 0, NAME, {{ABS16SRC, RDIND, E}}, {{PREFIX_6A15, ABS16LIST, TO_IND, OPCODE, IGNORE, E}}}, \
- EXPAND2_STD_ABSDISP (CODE, 2, NAME, ABS16SRC, PREFIX_6A15, ABS16LIST, OPCODE, IGNORE), \
- {CODE, AV_H8SX, 0, NAME, {{ABS16SRC, ABS16DST, E}}, {{PREFIX_6A15, ABS16LIST, TO_ABS16, OPCODE, IGNORE, DSTABS16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{ABS16SRC, ABS32DST, E}}, {{PREFIX_6A15, ABS16LIST, TO_ABS32, OPCODE, IGNORE, DSTABS32LIST, E}}}
-
-#define EXPAND_FROM_ABS32_B(CODE, NAME, OPCODE) \
- {CODE, AV_H8SX, 0, NAME, {{ABS32SRC, RDIND, E}}, {{PREFIX_6A35, ABS32LIST, TO_IND, OPCODE, IGNORE, E}}}, \
- EXPAND2_STD_ABSDISP (CODE, 2, NAME, ABS32SRC, PREFIX_6A35, ABS32LIST, OPCODE, IGNORE), \
- {CODE, AV_H8SX, 0, NAME, {{ABS32SRC, ABS16DST, E}}, {{PREFIX_6A35, ABS32LIST, TO_ABS16, OPCODE, IGNORE, DSTABS16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{ABS32SRC, ABS32DST, E}}, {{PREFIX_6A35, ABS32LIST, TO_ABS32, OPCODE, IGNORE, DSTABS32LIST, E}}}
-
-#define EXPAND_FROM_IMM16_W(CODE, NAME, OPCODE) \
- {CODE, AV_H8SX, 0, NAME, {{IMM16, RDIND, E}}, {{PREFIX_015E, TO_IND, OPCODE, IGNORE, IMM16LIST, E}}}, \
- EXPAND2_STD_IMM (CODE, 2, NAME, IMM16, PREFIX_015E, OPCODE, IGNORE, IMM16LIST), \
- {CODE, AV_H8SX, 0, NAME, {{IMM16, ABS16DST, E}}, {{PREFIX_015E, TO_ABS16, OPCODE, IGNORE, DSTABS16LIST, IMM16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{IMM16, ABS32DST, E}}, {{PREFIX_015E, TO_ABS32, OPCODE, IGNORE, DSTABS32LIST, IMM16LIST, E}}}
-
-#define EXPAND_FROM_REG16(CODE, NAME, OP1, OP2, OP3) \
- {CODE, AV_H8, 2, NAME, {{RS16, RDIND, E}}, {{0x7, 0xd, B31 | RDIND, IGNORE, OP1, OP2, RS16, IGNORE, E}}}, \
- EXPAND2_STD_SRC (CODE, 2, NAME, RS16, PREFIX_0159, OP3, RS16), \
- {CODE, AV_H8SX, 0, NAME, {{RS16, ABS16DST, E}}, {{0x6, 0xb, 0x1, B31 | IGNORE, DSTABS16LIST, OP1, OP2, RS16, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{RS16, ABS32DST, E}}, {{0x6, 0xb, 0x3, B31 | IGNORE, DSTABS32LIST, OP1, OP2, RS16, IGNORE, E}}}
-
-#define EXPAND_TO_REG16(CODE, NAME, OP1, OP2, OP3) \
- {CODE, AV_H8SX, 0, NAME, {{RSIND, RD16, E}}, {{0x7, 0xc, B31 | RSIND, IGNORE, OP1, OP2, IGNORE, RD16, E}}}, \
- EXPAND2_STD_DST (CODE, 2, NAME, RD16, PREFIX_015A, OP3, RD16), \
- {CODE, AV_H8SX, 0, NAME, {{ABS16SRC, RD16, E}}, {{0x6, 0xb, 0x1, B30 | IGNORE, ABS16LIST, OP1, OP2, IGNORE, RD16, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{ABS32SRC, RD16, E}}, {{0x6, 0xb, 0x3, B30 | IGNORE, ABS32LIST, OP1, OP2, IGNORE, RD16, E}}}
-
-#define EXPAND_FROM_IND16(CODE, NAME, OPCODE) \
- {CODE, AV_H8SX, 0, NAME, {{RSIND, RDIND, E}}, {{0x7, 0xc, B31 | RSIND, 0x5, TO_IND, OPCODE, IGNORE, E}}}, \
- EXPAND2_STD_IND (CODE, 2, NAME, OPCODE, B31), \
- {CODE, AV_H8SX, 0, NAME, {{RSIND, ABS16DST, E}}, {{0x7, 0xc, B31 | RSIND, 0x5, TO_ABS16, OPCODE, IGNORE, DSTABS16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{RSIND, ABS32DST, E}}, {{0x7, 0xc, B31 | RSIND, 0x5, TO_ABS32, OPCODE, IGNORE, DSTABS32LIST, E}}}
-
-#define EXPAND_FROM_ABS16_W(CODE, NAME, OPCODE) \
- {CODE, AV_H8SX, 0, NAME, {{ABS16SRC, RDIND, E}}, {{PREFIX_6B15, ABS16LIST, TO_IND, OPCODE, IGNORE, E}}}, \
- EXPAND2_STD_ABSDISP (CODE, 2, NAME, ABS16SRC, PREFIX_6B15, ABS16LIST, OPCODE, IGNORE), \
- {CODE, AV_H8SX, 0, NAME, {{ABS16SRC, ABS16DST, E}}, {{PREFIX_6B15, ABS16LIST, TO_ABS16, OPCODE, IGNORE, DSTABS16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{ABS16SRC, ABS32DST, E}}, {{PREFIX_6B15, ABS16LIST, TO_ABS32, OPCODE, IGNORE, DSTABS32LIST, E}}}
-
-#define EXPAND_FROM_ABS32_W(CODE, NAME, OPCODE) \
- {CODE, AV_H8SX, 0, NAME, {{ABS32SRC, RDIND, E}}, {{PREFIX_6B35, ABS32LIST, TO_IND, OPCODE, IGNORE, E}}}, \
- EXPAND2_STD_ABSDISP (CODE, 2, NAME, ABS32SRC, PREFIX_6B35, ABS32LIST, OPCODE, IGNORE), \
- {CODE, AV_H8SX, 0, NAME, {{ABS32SRC, ABS16DST, E}}, {{PREFIX_6B35, ABS32LIST, TO_ABS16, OPCODE, IGNORE, DSTABS16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{ABS32SRC, ABS32DST, E}}, {{PREFIX_6B35, ABS32LIST, TO_ABS32, OPCODE, IGNORE, DSTABS32LIST, E}}}
-
-#define EXPAND_FROM_IMM16_L(CODE, NAME, OPCODE) \
- {CODE, AV_H8SX, 0, NAME, {{IMM16U_NS, RDIND, E}}, {{PREFIX_010E, TO_IND, OPCODE, B30 | IGNORE, IMM16ULIST, E}}}, \
- EXPAND2_STD_IMM (CODE, 2, NAME, IMM16U_NS, PREFIX_010E, OPCODE, B30 | IGNORE, IMM16ULIST), \
- {CODE, AV_H8SX, 0, NAME, {{IMM16U_NS, ABS16DST, E}}, {{PREFIX_010E, TO_ABS16, OPCODE, B30 | IGNORE, DSTABS16LIST, IMM16ULIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{IMM16U_NS, ABS32DST, E}}, {{PREFIX_010E, TO_ABS32, OPCODE, B30 | IGNORE, DSTABS32LIST, IMM16ULIST, E}}}
-
-#define EXPAND_FROM_IMM32_L(CODE, NAME, OPCODE) \
- {CODE, AV_H8SX, 0, NAME, {{IMM32, RDIND, E}}, {{PREFIX_010E, TO_IND, OPCODE, B31 | IGNORE, IMM32LIST, E}}}, \
- EXPAND2_STD_IMM (CODE, 2, NAME, IMM32, PREFIX_010E, OPCODE, B31 | IGNORE, IMM32LIST), \
- {CODE, AV_H8SX, 0, NAME, {{IMM32, ABS16DST, E}}, {{PREFIX_010E, TO_ABS16, OPCODE, B31 | IGNORE, DSTABS16LIST, IMM32LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{IMM32, ABS32DST, E}}, {{PREFIX_010E, TO_ABS32, OPCODE, B31 | IGNORE, DSTABS32LIST, IMM32LIST, E}}}
-
-#define EXPAND_FROM_REG32(CODE, NAME, OPCODE) \
- {CODE, AV_H8SX, 0, NAME, {{RS32, RDIND, E}}, {{PREFIX_0109, TO_IND, OPCODE, B30 | RS32, E}}}, \
- EXPAND2_STD_SRC (CODE, 2, NAME, RS32, PREFIX_0109, OPCODE, B30 | RS32), \
- {CODE, AV_H8SX, 0, NAME, {{RS32, ABS16DST, E}}, {{PREFIX_0109, TO_ABS16, OPCODE, B30 | RS32, DSTABS16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{RS32, ABS32DST, E}}, {{PREFIX_0109, TO_ABS32, OPCODE, B30 | RS32, DSTABS32LIST, E}}}
-
-#define EXPAND_TO_REG32(CODE, NAME, OPCODE) \
- {CODE, AV_H8SX, 0, NAME, {{RSIND, RD32, E}}, {{PREFIX_010A, FROM_IND, OPCODE, B30 | RD32, E}}}, \
- EXPAND2_STD_DST (CODE, 2, NAME, RD32, PREFIX_010A, OPCODE, B30 | RD32), \
- {CODE, AV_H8SX, 0, NAME, {{ABS16SRC, RD32, E}}, {{PREFIX_010A, FROM_ABS16, OPCODE, B30 | RD32, ABS16LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{ABS32SRC, RD32, E}}, {{PREFIX_010A, FROM_ABS32, OPCODE, B30 | RD32, ABS32LIST, E}}}
-
-
-#define EXPAND_TWOOP_B(CODE, NAME, OP1, OP2, OP3, OP4, BIT) \
- {CODE, AV_H8SX, 0, NAME, {{IMM8, RDIND, E}}, {{0x7, 0xd, B30 | RDIND, IGNORE, OP1, BIT | IGNORE, IMM8LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{IMM8, RDPOSTINC, E}}, {{PREFIX_0174, 0x6, 0xc, B30 | RDPOSTINC, B31 | B20 | IGNORE, OP1, BIT | IGNORE, IMM8LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{IMM8, RDPOSTDEC, E}}, {{PREFIX_0176, 0x6, 0xc, B30 | RDPOSTDEC, B31 | B20 | IGNORE, OP1, BIT | IGNORE, IMM8LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{IMM8, RDPREINC, E}}, {{PREFIX_0175, 0x6, 0xc, B30 | RDPREINC, B31 | B20 | IGNORE, OP1, BIT | IGNORE, IMM8LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{IMM8, RDPREDEC, E}}, {{PREFIX_0177, 0x6, 0xc, B30 | RDPREDEC, B31 | B20 | IGNORE, OP1, BIT | IGNORE, IMM8LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{IMM8, DISP2DST, E}}, {{PREFIX_017_D2D, 0x6, 0x8, B30 | DSTDISPREG, B31 | B20 | IGNORE, OP1, BIT | IGNORE, IMM8LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{IMM8, DISP16DST, E}}, {{PREFIX_0174, 0x6, 0xe, B30 | DSTDISPREG, B31 | B20 | IGNORE, DSTDISP16LIST, OP1, BIT | IGNORE, IMM8LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{IMM8, DISP32DST, E}}, {{PREFIX_78R4WD, 0x6, 0xa, 2, B31 | B20 | IGNORE, DSTDISP32LIST, OP1, BIT | IGNORE, IMM8LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{IMM8, INDEXB16D, E}}, {{PREFIX_0175, 0x6, 0xe, B30 | DSTDISPREG, B31 | B20 | IGNORE, DSTDISP16LIST, OP1, BIT | IGNORE, IMM8LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{IMM8, INDEXW16D, E}}, {{PREFIX_0176, 0x6, 0xe, B30 | DSTDISPREG, B31 | B20 | IGNORE, DSTDISP16LIST, OP1, BIT | IGNORE, IMM8LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{IMM8, INDEXL16D, E}}, {{PREFIX_0177, 0x6, 0xe, B30 | DSTDISPREG, B31 | B20 | IGNORE, DSTDISP16LIST, OP1, BIT | IGNORE, IMM8LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{IMM8, INDEXB32D, E}}, {{PREFIX_78R5WD, 0x6, 0xa, 2, B31 | B20 | IGNORE, DSTDISP32LIST, OP1, BIT | IGNORE, IMM8LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{IMM8, INDEXW32D, E}}, {{PREFIX_78R6WD, 0x6, 0xa, 2, B31 | B20 | IGNORE, DSTDISP32LIST, OP1, BIT | IGNORE, IMM8LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{IMM8, INDEXL32D, E}}, {{PREFIX_78R7WD, 0x6, 0xa, 2, B31 | B20 | IGNORE, DSTDISP32LIST, OP1, BIT | IGNORE, IMM8LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{IMM8, ABS8DST, E}}, {{0x7, 0xf, DSTABS8LIST, OP1, BIT | IGNORE, IMM8LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{IMM8, ABS16DST, E}}, {{0x6, 0xa, 0x1, B31 | B20 | IGNORE, DSTABS16LIST, OP1, BIT | IGNORE, IMM8LIST, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{IMM8, ABS32DST, E}}, {{0x6, 0xa, 0x3, B31 | B20 | IGNORE, DSTABS32LIST, OP1, BIT | IGNORE, IMM8LIST, E}}}, \
- {CODE, AV_H8, 2, NAME, {{RS8, RD8, E}}, {{OP2, OP3, RS8, RD8, E}}}, \
- EXPAND_FROM_REG8 (CODE, NAME, OP2, OP3, OP4), \
- EXPAND_TO_REG8 (CODE, NAME, OP2, OP3, OP4), \
- EXPAND_FROM_IND8 (CODE, NAME, OP4), \
- EXPAND_STD_MATRIX_B (CODE, NAME, OP4), \
- EXPAND_FROM_ABS16_B (CODE, NAME, OP4), \
- EXPAND_FROM_ABS32_B (CODE, NAME, OP4)
-
-#define EXPAND_TWOOP_W(CODE, NAME, OP1, OP2, OP3) \
- {CODE, AV_H8H, 6, NAME, {{IMM16, RD16, E}}, {{0x7, 0x9, OP3, RD16, IMM16LIST, E}}}, \
- EXPAND_FROM_IMM16_W (CODE, NAME, OP3), \
- EXPAND_FROM_REG16 (CODE, NAME, OP1, OP2, OP3), \
- EXPAND_TO_REG16 (CODE, NAME, OP1, OP2, OP3), \
- EXPAND_FROM_IND16 (CODE, NAME, OP3), \
- EXPAND_STD_MATRIX_W (CODE, NAME, OP3), \
- EXPAND_FROM_ABS16_W (CODE, NAME, OP3), \
- EXPAND_FROM_ABS32_W (CODE, NAME, OP3)
-
-#define EXPAND_TWOOP_L(CODE, NAME, OP1) \
- {CODE, AV_H8SX, 0, NAME, {{IMM16U_NS, RD32, E}}, {{0x7, 0xa, OP1, B31 | RD32, IMM16ULIST, E}}}, \
- {CODE, AV_H8H, 6, NAME, {{IMM32, RD32, E}}, {{0x7, 0xa, OP1, B30 | RD32, IMM32LIST, E}}}, \
- EXPAND_FROM_IMM16_L (CODE, NAME, OP1), \
- EXPAND_FROM_IMM32_L (CODE, NAME, OP1), \
- EXPAND_FROM_REG32 (CODE, NAME, OP1), \
- EXPAND_TO_REG32 (CODE, NAME, OP1), \
- EXPAND_STD_MATRIX_L (CODE, NAME, OP1)
-
-
-/* Old expanders: */
-
-#define BITOP(code, imm, name, op00, op01, op10, op11, op20, op21, op30, op4) \
- {code, AV_H8, 2, name, {{imm, RD8, E}}, {{op00, op01, imm, RD8, E}}}, \
- {code, AV_H8, 6, name, {{imm, RDIND, E}}, {{op10, op11, B30 | RDIND, 0, op00, op01, imm, 0, E}}}, \
- {code, AV_H8, 6, name, {{imm, ABS8DST, E}}, {{op20, op21, DSTABS8LIST, op00, op01, imm, 0, E}}}, \
- {code, AV_H8S, 6, name, {{imm, ABS16DST, E}}, {{0x6, 0xa, 0x1, op30, DST | MEMRELAX | ABS16LIST , op00, op01, imm, op4, E}}}, \
- {code, AV_H8S, 6, name, {{imm, ABS32DST, E}}, {{0x6, 0xa, 0x3, op30, DST | MEMRELAX | ABS32LIST , op00, op01, imm, op4, E}}}
-
-#define BITOP_B(code, imm, name, op00, op01, op10, op11, op20, op21, op30, op4) \
- {code, AV_H8SX, 0, name, {{imm, RDIND, E}}, {{op10, op11, B30 | RDIND, 0, op00, op01, imm, op4, E}}}, \
- {code, AV_H8SX, 0, name, {{imm, ABS8DST, E}}, {{op20, op21, DSTABS8LIST, op00, op01, imm, op4, E}}}, \
- {code, AV_H8SX, 0, name, {{imm, ABS16DST, E}}, {{0x6, 0xa, 0x1, op30, DST | ABS16LIST, op00, op01, imm, op4, E}}}, \
- {code, AV_H8SX, 0, name, {{imm, ABS32DST, E}}, {{0x6, 0xa, 0x3, op30, DST | ABS32LIST, op00, op01, imm, op4, E}}}
-
-#define EBITOP(code, imm, name, op00, op01, op10, op11, op20, op21, op30, op4) \
- BITOP(code, imm, name, op00+1, op01, op10, op11, op20, op21, op30, op4), \
- BITOP(code, RS8, name, op00, op01, op10, op11, op20, op21, op30, op4)
-
-#define EBITOP_B(code, imm, name, op00, op01, op10, op11, op20, op21, op30, op4) \
- BITOP_B(code, imm, name, op00+1, op01, op10, op11, op20, op21, op30, op4), \
- BITOP_B(code, RS8, name, op00, op01, op10, op11, op20, op21, op30, op4)
-
-#define WTWOP(code, name, op1, op2) \
- {code, AV_H8, 2, name, {{RS16, RD16, E}}, {{op1, op2, RS16, RD16, E}}}
-
-#define BRANCH(code, name, op) \
- {code, AV_H8H, 6, name, {{PCREL16, E}}, {{0x5, 0x8, op, 0x0, PCREL16, DATA3 | B00, E}}}, \
- {code, AV_H8, 4, name, {{PCREL8, E}}, {{0x4, op, PCREL8, DATA | B00, E}}}
-
-
-#define UNOP(code, name, op1, op2) \
- {code, AV_H8, 2, name, {{OR8, E}}, {{op1, op2, 0, OR8, E}}}
-
-#define EXPAND_UNOP_STD_B(CODE, NAME, PREFIX, OP1, OP2, OP3) \
- {CODE, AV_H8, 2, NAME, {{OR8, E}}, {{ OP1, OP2, OP3, OR8, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{RSIND, E}}, {{ 7, 13, B30 | RSIND, IGNORE, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{RSPOSTINC, E}}, {{PREFIX, 4, 6, 12, B30 | RSPOSTINC, B31 | IGNORE, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{RSPOSTDEC, E}}, {{PREFIX, 6, 6, 12, B30 | RSPOSTDEC, B31 | IGNORE, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{RSPREINC, E}}, {{PREFIX, 5, 6, 12, B30 | RSPREINC, B31 | IGNORE, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{RSPREDEC, E}}, {{PREFIX, 7, 6, 12, B30 | RSPREDEC, B31 | IGNORE, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{DISP2SRC, E}}, {{PREFIX, B30 | B21 | DISP2SRC, 6, 8, B30 | DISPREG, B31 | IGNORE, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{DISP16SRC, E}}, {{PREFIX, 4, 6, 14, B30 | DISPREG, B31 | IGNORE, DISP16LIST, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{DISP32SRC, E}}, {{7, 8, B30 | DISPREG, 4, 6, 10, 2, B31 | IGNORE, DISP32LIST, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{INDEXB16, E}}, {{PREFIX, 5, 6, 14, B30 | DISPREG, B31 | IGNORE, DISP16LIST, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{INDEXW16, E}}, {{PREFIX, 6, 6, 14, B30 | DISPREG, B31 | IGNORE, DISP16LIST, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{INDEXL16, E}}, {{PREFIX, 7, 6, 14, B30 | DISPREG, B31 | IGNORE, DISP16LIST, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{INDEXB32, E}}, {{7, 8, B30 | DISPREG, 5, 6, 10, 2, B31 | IGNORE, DISP32LIST, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{INDEXW32, E}}, {{7, 8, B30 | DISPREG, 6, 6, 10, 2, B31 | IGNORE, DISP32LIST, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{INDEXL32, E}}, {{7, 8, B30 | DISPREG, 7, 6, 10, 2, B31 | IGNORE, DISP32LIST, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{ABS8SRC, E}}, {{ 7, 15, ABS8LIST, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{ABS16SRC, E}}, {{ 6, 10, 1, B31 | IGNORE, ABS16LIST, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{ABS32SRC, E}}, {{ 6, 10, 3, B31 | IGNORE, ABS32LIST, OP1, OP2, OP3, IGNORE, E}}}
-
-#define EXPAND_UNOP_STD_W(CODE, NAME, PREFIX, OP1, OP2, OP3) \
- {CODE, AV_H8H, 2, NAME, {{OR16, E}}, {{ OP1, OP2, OP3, OR16, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{RSIND, E}}, {{ 7, 13, B31 | RSIND, IGNORE, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{RSPOSTINC, E}}, {{PREFIX, 4, 6, 13, B30 | RSPOSTINC, B31 | IGNORE, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{RSPOSTDEC, E}}, {{PREFIX, 6, 6, 13, B30 | RSPOSTDEC, B31 | IGNORE, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{RSPREINC, E}}, {{PREFIX, 5, 6, 13, B30 | RSPREINC, B31 | IGNORE, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{RSPREDEC, E}}, {{PREFIX, 7, 6, 13, B30 | RSPREDEC, B31 | IGNORE, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{DISP2SRC, E}}, {{PREFIX, B30 | B21 | DISP2SRC, 6, 9, B30 | DISPREG, B31 | IGNORE, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{DISP16SRC, E}}, {{PREFIX, 4, 6, 15, B30 | DISPREG, B31 | IGNORE, DISP16LIST, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{DISP32SRC, E}}, {{7, 8, B30 | DISPREG, 4, 6, 11, 2, B31 | IGNORE, DISP32LIST, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{INDEXB16, E}}, {{PREFIX, 5, 6, 15, B30 | DISPREG, B31 | IGNORE, DISP16LIST, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{INDEXW16, E}}, {{PREFIX, 6, 6, 15, B30 | DISPREG, B31 | IGNORE, DISP16LIST, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{INDEXL16, E}}, {{PREFIX, 7, 6, 15, B30 | DISPREG, B31 | IGNORE, DISP16LIST, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{INDEXB32, E}}, {{7, 8, B30 | DISPREG, 5, 6, 11, 2, B31 | IGNORE, DISP32LIST, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{INDEXW32, E}}, {{7, 8, B30 | DISPREG, 6, 6, 11, 2, B31 | IGNORE, DISP32LIST, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{INDEXL32, E}}, {{7, 8, B30 | DISPREG, 7, 6, 11, 2, B31 | IGNORE, DISP32LIST, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{ABS16SRC, E}}, {{ 6, 11, 1, B31 | IGNORE, ABS16LIST, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{ABS32SRC, E}}, {{ 6, 11, 3, B31 | IGNORE, ABS32LIST, OP1, OP2, OP3, IGNORE, E}}}
-
-#define EXPAND_UNOP_STD_L(CODE, NAME, PREFIX, OP1, OP2, OP3) \
- {CODE, AV_H8H, 2, NAME, {{OR32, E}}, {{ OP1, OP2, OP3, B30 | OR32, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{RSIND, E}}, {{PREFIX, 4, 6, 9, B30 | RSIND, B31 | IGNORE, OP1, OP2, OP3, B30 | IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{RSPOSTINC, E}}, {{PREFIX, 4, 6, 13, B30 | RSPOSTINC, B31 | IGNORE, OP1, OP2, OP3, B30 | IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{RSPOSTDEC, E}}, {{PREFIX, 6, 6, 13, B30 | RSPOSTDEC, B31 | IGNORE, OP1, OP2, OP3, B30 | IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{RSPREINC, E}}, {{PREFIX, 5, 6, 13, B30 | RSPREINC, B31 | IGNORE, OP1, OP2, OP3, B30 | IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{RSPREDEC, E}}, {{PREFIX, 7, 6, 13, B30 | RSPREDEC, B31 | IGNORE, OP1, OP2, OP3, B30 | IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{DISP2SRC, E}}, {{PREFIX, B30 | B21 | DISP2SRC, 6, 9, B30 | DISPREG, B31 | IGNORE, OP1, OP2, OP3, B30 | IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{DISP16SRC, E}}, {{PREFIX, 4, 6, 15, B30 | DISPREG, B31 | IGNORE, DISP16LIST, OP1, OP2, OP3, B30 | IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{DISP32SRC, E}}, {{7, 8, B31 | DISPREG, 4, 6, 11, 2, B31 | IGNORE, DISP32LIST, OP1, OP2, OP3, B30 | IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{INDEXB16, E}}, {{PREFIX, 5, 6, 15, B30 | DISPREG, B31 | IGNORE, DISP16LIST, OP1, OP2, OP3, B30 | IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{INDEXW16, E}}, {{PREFIX, 6, 6, 15, B30 | DISPREG, B31 | IGNORE, DISP16LIST, OP1, OP2, OP3, B30 | IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{INDEXL16, E}}, {{PREFIX, 7, 6, 15, B30 | DISPREG, B31 | IGNORE, DISP16LIST, OP1, OP2, OP3, B30 | IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{INDEXB32, E}}, {{7, 8, B31 | DISPREG, 5, 6, 11, 2, B31 | IGNORE, DISP32LIST, OP1, OP2, OP3, B30 | IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{INDEXW32, E}}, {{7, 8, B31 | DISPREG, 6, 6, 11, 2, B31 | IGNORE, DISP32LIST, OP1, OP2, OP3, B30 | IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{INDEXL32, E}}, {{7, 8, B31 | DISPREG, 7, 6, 11, 2, B31 | IGNORE, DISP32LIST, OP1, OP2, OP3, B30 | IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{ABS16SRC, E}}, {{PREFIX, 4, 6, 11, 0, B31 | IGNORE, ABS16LIST, OP1, OP2, OP3, B30 | IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{ABS32SRC, E}}, {{PREFIX, 4, 6, 11, 2, B31 | IGNORE, ABS32LIST, OP1, OP2, OP3, B30 | IGNORE, E}}}
-
-#define EXPAND_UNOP_EXTENDED_B(CODE, NAME, CONST, PREFIX, OP1, OP2, OP3) \
- {CODE, AV_H8, 2, NAME, {{CONST, RD8, E}}, {{ OP1, OP2, OP3, RD8, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{CONST, RDIND, E}}, {{ 7, 13, B30 | RDIND, IGNORE, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{CONST, RDPOSTINC, E}}, {{PREFIX, 4, 6, 12, B30 | RDPOSTINC, B31 | IGNORE, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{CONST, RDPOSTDEC, E}}, {{PREFIX, 6, 6, 12, B30 | RDPOSTDEC, B31 | IGNORE, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{CONST, RDPREINC, E}}, {{PREFIX, 5, 6, 12, B30 | RDPREINC, B31 | IGNORE, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{CONST, RDPREDEC, E}}, {{PREFIX, 7, 6, 12, B30 | RDPREDEC, B31 | IGNORE, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{CONST, DISP2DST, E}}, {{PREFIX, B30 | B21 | DISP2DST, 6, 8, B30 | DSTDISPREG, B31 | IGNORE, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{CONST, DISP16DST, E}}, {{PREFIX, 4, 6, 14, B30 | DSTDISPREG, B31 | IGNORE, DSTDISP16LIST, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{CONST, DISP32DST, E}}, {{7, 8, B30 | DSTDISPREG, 4, 6, 10, 2, B31 | IGNORE, DSTDISP32LIST, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{CONST, INDEXB16D, E}}, {{PREFIX, 5, 6, 14, B30 | DSTDISPREG, B31 | IGNORE, DSTDISP16LIST, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{CONST, INDEXW16D, E}}, {{PREFIX, 6, 6, 14, B30 | DSTDISPREG, B31 | IGNORE, DSTDISP16LIST, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{CONST, INDEXL16D, E}}, {{PREFIX, 7, 6, 14, B30 | DSTDISPREG, B31 | IGNORE, DSTDISP16LIST, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{CONST, INDEXB32D, E}}, {{7, 8, B30 | DSTDISPREG, 5, 6, 10, 2, B31 | IGNORE, DSTDISP32LIST, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{CONST, INDEXW32D, E}}, {{7, 8, B30 | DSTDISPREG, 6, 6, 10, 2, B31 | IGNORE, DSTDISP32LIST, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{CONST, INDEXL32D, E}}, {{7, 8, B30 | DSTDISPREG, 7, 6, 10, 2, B31 | IGNORE, DSTDISP32LIST, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{CONST, ABS8DST, E}}, {{ 7, 15, DSTABS8LIST, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{CONST, ABS16DST, E}}, {{ 6, 10, 1, B31 | IGNORE, DSTABS16LIST, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{CONST, ABS32DST, E}}, {{ 6, 10, 3, B31 | IGNORE, DSTABS32LIST, OP1, OP2, OP3, IGNORE, E}}}
-
-#define EXPAND_UNOP_EXTENDED_W(CODE, NAME, CONST, PREFIX, OP1, OP2, OP3) \
- {CODE, AV_H8, 2, NAME, {{CONST, RD16, E}}, {{ OP1, OP2, OP3, RD16, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{CONST, RDIND, E}}, {{ 7, 13, B31 | RDIND, IGNORE, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{CONST, RDPOSTINC, E}}, {{PREFIX, 4, 6, 13, B30 | RDPOSTINC, B31 | IGNORE, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{CONST, RDPOSTDEC, E}}, {{PREFIX, 6, 6, 13, B30 | RDPOSTDEC, B31 | IGNORE, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{CONST, RDPREINC, E}}, {{PREFIX, 5, 6, 13, B30 | RDPREINC, B31 | IGNORE, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{CONST, RDPREDEC, E}}, {{PREFIX, 7, 6, 13, B30 | RDPREDEC, B31 | IGNORE, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{CONST, DISP2DST, E}}, {{PREFIX, B30 | B21 | DISP2DST, 6, 9, B30 | DSTDISPREG, B31 | IGNORE, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{CONST, DISP16DST, E}}, {{PREFIX, 4, 6, 15, B30 | DSTDISPREG, B31 | IGNORE, DSTDISP16LIST, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{CONST, DISP32DST, E}}, {{7, 8, B30 | DSTDISPREG, 4, 6, 11, 2, B31 | IGNORE, DSTDISP32LIST, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{CONST, INDEXB16D, E}}, {{PREFIX, 5, 6, 15, B30 | DSTDISPREG, B31 | IGNORE, DSTDISP16LIST, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{CONST, INDEXW16D, E}}, {{PREFIX, 6, 6, 15, B30 | DSTDISPREG, B31 | IGNORE, DSTDISP16LIST, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{CONST, INDEXL16D, E}}, {{PREFIX, 7, 6, 15, B30 | DSTDISPREG, B31 | IGNORE, DSTDISP16LIST, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{CONST, INDEXB32D, E}}, {{7, 8, B30 | DSTDISPREG, 5, 6, 11, 2, B31 | IGNORE, DSTDISP32LIST, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{CONST, INDEXW32D, E}}, {{7, 8, B30 | DSTDISPREG, 6, 6, 11, 2, B31 | IGNORE, DSTDISP32LIST, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{CONST, INDEXL32D, E}}, {{7, 8, B30 | DSTDISPREG, 7, 6, 11, 2, B31 | IGNORE, DSTDISP32LIST, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{CONST, ABS16DST, E}}, {{ 6, 11, 1, B31 | IGNORE, DSTABS16LIST, OP1, OP2, OP3, IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{CONST, ABS32DST, E}}, {{ 6, 11, 3, B31 | IGNORE, DSTABS32LIST, OP1, OP2, OP3, IGNORE, E}}}
-
-#define EXPAND_UNOP_EXTENDED_L(CODE, NAME, CONST, PREFIX, OP1, OP2, OP3, BIT) \
- {CODE, AV_H8, 2, NAME, {{CONST, RD32, E}}, {{ OP1, OP2, OP3, BIT | RD32, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{CONST, RDIND, E}}, {{PREFIX, 4, 6, 9, B30 | RDIND, B31 | IGNORE, OP1, OP2, OP3, BIT | IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{CONST, RDPOSTINC, E}}, {{PREFIX, 4, 6, 13, B30 | RDPOSTINC, B31 | IGNORE, OP1, OP2, OP3, BIT | IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{CONST, RDPOSTDEC, E}}, {{PREFIX, 6, 6, 13, B30 | RDPOSTDEC, B31 | IGNORE, OP1, OP2, OP3, BIT | IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{CONST, RDPREINC, E}}, {{PREFIX, 5, 6, 13, B30 | RDPREINC, B31 | IGNORE, OP1, OP2, OP3, BIT | IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{CONST, RDPREDEC, E}}, {{PREFIX, 7, 6, 13, B30 | RDPREDEC, B31 | IGNORE, OP1, OP2, OP3, BIT | IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{CONST, DISP2DST, E}}, {{PREFIX, B30 | B21 | DISP2DST, 6, 9, B30 | DSTDISPREG, B31 | IGNORE, OP1, OP2, OP3, BIT | IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{CONST, DISP16DST, E}}, {{PREFIX, 4, 6, 15, B30 | DSTDISPREG, B31 | IGNORE, DSTDISP16LIST, OP1, OP2, OP3, BIT | IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{CONST, DISP32DST, E}}, {{7, 8, B31 | DSTDISPREG, 4, 6, 11, 2, B31 | IGNORE, DSTDISP32LIST, OP1, OP2, OP3, BIT | IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{CONST, INDEXB16D, E}}, {{PREFIX, 5, 6, 15, B30 | DSTDISPREG, B31 | IGNORE, DSTDISP16LIST, OP1, OP2, OP3, BIT | IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{CONST, INDEXW16D, E}}, {{PREFIX, 6, 6, 15, B30 | DSTDISPREG, B31 | IGNORE, DSTDISP16LIST, OP1, OP2, OP3, BIT | IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{CONST, INDEXL16D, E}}, {{PREFIX, 7, 6, 15, B30 | DSTDISPREG, B31 | IGNORE, DSTDISP16LIST, OP1, OP2, OP3, BIT | IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{CONST, INDEXB32D, E}}, {{7, 8, B31 | DSTDISPREG, 5, 6, 11, 2, B31 | IGNORE, DSTDISP32LIST, OP1, OP2, OP3, BIT | IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{CONST, INDEXW32D, E}}, {{7, 8, B31 | DSTDISPREG, 6, 6, 11, 2, B31 | IGNORE, DSTDISP32LIST, OP1, OP2, OP3, BIT | IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{CONST, INDEXL32D, E}}, {{7, 8, B31 | DSTDISPREG, 7, 6, 11, 2, B31 | IGNORE, DSTDISP32LIST, OP1, OP2, OP3, BIT | IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{CONST, ABS16DST, E}}, {{PREFIX, 4, 6, 11, 0, B31 | IGNORE, DSTABS16LIST, OP1, OP2, OP3, BIT | IGNORE, E}}}, \
- {CODE, AV_H8SX, 0, NAME, {{CONST, ABS32DST, E}}, {{PREFIX, 4, 6, 11, 2, B31 | IGNORE, DSTABS32LIST, OP1, OP2, OP3, BIT | IGNORE, E}}}
-
-#define PREFIXLDC 0x0, 0x1, 0x4, B30 | CCR_EXR | DST
-#define PREFIXSTC 0x0, 0x1, 0x4, B30 | CCR_EXR | SRC
-
-#define O(op, size) (op * 4 + size)
-#define OP_SIZE(HOW) (HOW % 4)
-#define OP_KIND(HOW) (HOW / 4)
-
-enum h8_asm_codes
-{
- O_RECOMPILE = 0,
- O_ADD,
- O_ADDX,
- O_AND,
- O_BAND,
- O_BRA,
- O_BRAB,
- O_BRAW,
- O_BRAL,
- O_BRAS,
- O_BRABC,
- O_BRABS,
- O_BSRBC,
- O_BSRBS,
- O_BRN,
- O_BHI,
- O_BLS,
- O_BCC,
- O_BCS,
- O_BNE,
- O_BVC,
- O_BVS,
- O_BPL,
- O_BMI,
- O_BGE,
- O_BLT,
- O_BGT,
- O_BLE,
- O_ANDC,
- O_BEQ,
- O_BCLR,
- O_BCLREQ,
- O_BCLRNE,
- O_BSETEQ,
- O_BSETNE,
- O_BFLD,
- O_BFST,
- O_BIAND,
- O_BILD,
- O_BIOR,
- O_BIXOR,
- O_BIST,
- O_BISTZ,
- O_BLD,
- O_BNOT,
- O_BOR,
- O_BSET,
- O_BSR,
- O_BXOR,
- O_CMP,
- O_DAA,
- O_DAS,
- O_DEC,
- O_DIVU,
- O_DIVS,
- O_DIVXU,
- O_DIVXS,
- O_INC,
- O_LDC,
- O_MOV,
- O_MOVAB,
- O_MOVAW,
- O_MOVAL,
- O_MOVMD,
- O_MOVSD,
- O_OR,
- O_ROTL,
- O_ROTR,
- O_ROTXL,
- O_ROTXR,
- O_BPT,
- O_SHAL,
- O_SHAR,
- O_SHLL,
- O_SHLR,
- O_SUB,
- O_SUBS,
- O_TRAPA,
- O_XOR,
- O_XORC,
- O_BST,
- O_BSTZ,
- O_BTST,
- O_EEPMOV,
- O_EXTS,
- O_EXTU,
- O_JMP,
- O_JSR,
- O_MULU,
- O_MULUU,
- O_MULS,
- O_MULSU,
- O_MULXU,
- O_MULXS,
- O_NOP,
- O_NOT,
- O_ORC,
- O_RTE,
- O_RTEL,
- O_STC,
- O_SUBX,
- O_NEG,
- O_RTS,
- O_RTSL,
- O_SLEEP,
- O_ILL,
- O_ADDS,
- O_SYSCALL,
- O_TAS,
- O_CLRMAC,
- O_LDMAC,
- O_MAC,
- O_LDM,
- O_STM,
- O_STMAC,
- O_LAST,
- /* Change made for System Call processing. */
- O_SYS_CREAT,
- O_SYS_OPEN,
- O_SYS_READ,
- O_SYS_WRITE,
- O_SYS_LSEEK,
- O_SYS_CLOSE,
- O_SYS_STAT,
- O_SYS_FSTAT,
-/* Space reserved for future file I/O system calls. */
- O_SYS_CMDLINE
- /* End of System Call specific Changes. */
-};
-
-enum h8_size
-{
- SB = 0,
- SW = 1,
- SL = 2,
- SN = 3
-};
-
-
-/* FIXME: Lots of insns have "E, 0, 0, 0, 0" in the nibble code sequences.
- Methinks the zeroes aren't necessary. Once confirmed, nuke 'em. */
-
-struct h8_opcode h8_opcodes[] =
-{
- {O (O_ADD, SB), AV_H8, 2, "add.b", {{IMM8, RD8, E}}, {{0x8, RD8, IMM8LIST, E}}},
- EXPAND_TWOOP_B (O (O_ADD, SB), "add.b", 0x8, 0x0, 0x8, 0x1, 0),
-
- {O (O_ADD, SW), AV_H8, 6, "add.w", {{RS16, RD16, E}}, {{0x0, 0x9, RS16, RD16, E}}},
- {O (O_ADD, SW), AV_H8SX, 0, "add.w", {{IMM3NZ_NS, RD16, E}}, {{0x0, 0xa, B30 | IMM3NZ, RD16, E}}},
- {O (O_ADD, SW), AV_H8SX, 0, "add.w", {{IMM3NZ_NS, RDIND, E}}, {{0x7, 0xd, B31 | RDIND, IGNORE, 0x0, 0xa, B30 | IMM3NZ, IGNORE, E}}},
- {O (O_ADD, SW), AV_H8SX, 0, "add.w", {{IMM3NZ_NS, ABS16DST, E}}, {{0x6, 0xb, 0x1, B31 | IGNORE, DSTABS16LIST, 0x0, 0xa, B30 | IMM3NZ, IGNORE, E}}},
- {O (O_ADD, SW), AV_H8SX, 0, "add.w", {{IMM3NZ_NS, ABS32DST, E}}, {{0x6, 0xb, 0x3, B31 | IGNORE, DSTABS32LIST, 0x0, 0xa, B30 | IMM3NZ, IGNORE, E}}},
- EXPAND_TWOOP_W (O (O_ADD, SW), "add.w", 0x0, 0x9, 0x1),
-
- {O (O_ADD, SL), AV_H8H, 6, "add.l", {{RS32, RD32, E}}, {{0x0, 0xa, B31 | RS32, B30 | RD32, E}}},
- {O (O_ADD, SL), AV_H8SX, 0, "add.l", {{IMM3NZ_NS, RD32, E}}, {{0x0, 0xa, B31 | IMM3NZ, B31 | RD32, E}}},
- EXPAND_TWOOP_L (O (O_ADD, SL), "add.l", 0x1),
-
- {O (O_ADDS, SL), AV_H8, 2, "adds", {{KBIT, RDP, E}}, {{0x0, 0xB,KBIT, RDP, E}}},
-
- {O (O_ADDX, SB), AV_H8, 2, "addx", {{IMM8, RD8, E}}, {{0x9, RD8, IMM8LIST, E}}},
- {O (O_ADDX, SB), AV_H8SX, 0, "addx.b", {{IMM8, RDIND, E}}, {{0x7, 0xd, B30 | RDIND, IGNORE, 0x9, IGNORE, IMM8LIST, E}}},
- {O (O_ADDX, SB), AV_H8SX, 0, "addx.b", {{IMM8, RDPOSTDEC, E}}, {{PREFIX_0176, 0x6, 0xc, B30 | RDPOSTDEC, B31 | IGNORE, 0x9, IGNORE, IMM8LIST, E}}},
- {O (O_ADDX, SB), AV_H8, 2, "addx", {{RS8, RD8, E}}, {{0x0, 0xe, RS8, RD8, E}}},
- {O (O_ADDX, SB), AV_H8SX, 0, "addx.b", {{RS8, RDIND, E}}, {{0x7, 0xd, B30 | RDIND, IGNORE, 0x0, 0xe, RS8, IGNORE, E}}},
- {O (O_ADDX, SB), AV_H8SX, 0, "addx.b", {{RS8, RDPOSTDEC, E}}, {{PREFIX_0176, 0x6, 0xc, B30 | RDPOSTDEC, B31 | IGNORE, 0x0, 0xe, RS8, IGNORE, E}}},
- {O (O_ADDX, SB), AV_H8SX, 0, "addx.b", {{RSIND, RD8, E}}, {{0x7, 0xc, B30 | RSIND, IGNORE, 0x0, 0xe, IGNORE, RD8, E}}},
- {O (O_ADDX, SB), AV_H8SX, 0, "addx.b", {{RSPOSTDEC, RD8, E}}, {{PREFIX_0176, 0x6, 0xc, B30 | RSPOSTDEC, B30 | B20 | IGNORE, 0x0, 0xe, IGNORE, RD8, E}}},
- {O (O_ADDX, SB), AV_H8SX, 0, "addx.b", {{RSIND, RDIND, E}}, {{PREFIX_0174, 0x6, 0x8, B30 | RSIND, 0xd, 0x0, RDIND, 0x1, IGNORE, E}}},
- {O (O_ADDX, SB), AV_H8SX, 0, "addx.b", {{RSPOSTDEC, RDPOSTDEC, E}}, {{PREFIX_0176, 0x6, 0xc, B30 | RSPOSTDEC, 0xd, 0xa, RDPOSTDEC, 0x1, IGNORE, E}}},
-
- {O (O_ADDX, SW), AV_H8SX, 0, "addx.w", {{IMM16, RD16, E}}, {{PREFIX_0151, 0x7, 0x9, 0x1, RD16, IMM16LIST, E}}},
- {O (O_ADDX, SW), AV_H8SX, 0, "addx.w", {{IMM16, RDIND, E}}, {{0x7, 0xd, B31 | RDIND, B01 | IGNORE, 0x7, 0x9, 0x1, IGNORE, IMM16LIST, E}}},
- {O (O_ADDX, SW), AV_H8SX, 0, "addx.w", {{IMM16, RDPOSTDEC, E}}, {{PREFIX_0156, 0x6, 0xd, B30 | RDPOSTDEC, B31 | B20 | B01 | IGNORE, 0x7, 0x9, 0x1, IGNORE, IMM16LIST, E}}},
- {O (O_ADDX, SW), AV_H8SX, 0, "addx.w", {{RS16, RD16, E}}, {{PREFIX_0151, 0x0, 0x9, RS16, RD16, E}}},
- {O (O_ADDX, SW), AV_H8SX, 0, "addx.w", {{RS16, RDIND, E}}, {{0x7, 0xd, B31 | RDIND, B01 | IGNORE, 0x0, 0x9, RS16, IGNORE, E}}},
- {O (O_ADDX, SW), AV_H8SX, 0, "addx.w", {{RS16, RDPOSTDEC, E}}, {{PREFIX_0156, 0x6, 0xd, B30 | RDPOSTDEC, B31 | B20 | B01 | IGNORE, 0x0, 0x9, RS16, IGNORE, E}}},
- {O (O_ADDX, SW), AV_H8SX, 0, "addx.w", {{RSIND, RD16, E}}, {{0x7, 0xc, B31 | RSIND, B01 | IGNORE, 0x0, 0x9, IGNORE, RD16, E}}},
- {O (O_ADDX, SW), AV_H8SX, 0, "addx.w", {{RSPOSTDEC, RD16, E}}, {{PREFIX_0156, 0x6, 0xd, B30 | RSPOSTDEC, B30 | B20 | B01 | IGNORE, 0x0, 0x9, IGNORE, RD16, E}}},
- {O (O_ADDX, SW), AV_H8SX, 0, "addx.w", {{RSIND, RDIND, E}}, {{PREFIX_0154, 0x6, 0x9, B30 | RSIND, 0xd, 0x0, RDIND, 0x1, IGNORE, E}}},
- {O (O_ADDX, SW), AV_H8SX, 0, "addx.w", {{RSPOSTDEC, RDPOSTDEC, E}}, {{PREFIX_0156, 0x6, 0xd, B30 | RSPOSTDEC, 0xd, 0xa, RDPOSTDEC, 0x1, IGNORE, E}}},
-
- {O (O_ADDX, SL), AV_H8SX, 0, "addx.l", {{IMM32, RD32, E}}, {{PREFIX_0101, 0x7, 0xa, 0x1, RD32, IMM32LIST, E}}},
- {O (O_ADDX, SL), AV_H8SX, 0, "addx.l", {{IMM32, RDIND, E}}, {{PREFIX_0104, 0x6, 0x9, B30 | RDIND, B31 | B20 | B01 | IGNORE, 0x7, 0xa, 0x1, IGNORE, IMM32LIST, E}}},
- {O (O_ADDX, SL), AV_H8SX, 0, "addx.l", {{IMM32, RDPOSTDEC, E}}, {{PREFIX_0106, 0x6, 0xd, B30 | RDPOSTDEC, B31 | B20 | B01 | IGNORE, 0x7, 0xa, 0x1, IGNORE, IMM32LIST, E}}},
- {O (O_ADDX, SL), AV_H8SX, 0, "addx.l", {{RS32, RD32, E}}, {{PREFIX_0101, 0x0, 0xa, B31 | RS32, B30 | RD32, E}}},
- {O (O_ADDX, SL), AV_H8SX, 0, "addx.l", {{RS32, RDIND, E}}, {{PREFIX_0104, 0x6, 0x9, B30 | RDIND, B31 | B20 | B01 | IGNORE, 0x0, 0xa, B31 | RS32, B30 | IGNORE, E}}},
- {O (O_ADDX, SL), AV_H8SX, 0, "addx.l", {{RS32, RDPOSTDEC, E}}, {{PREFIX_0106, 0x6, 0xd, B30 | RDPOSTDEC, B31 | B20 | B01 | IGNORE, 0x0, 0xa, B31 | RS32, B30 | IGNORE, E}}},
- {O (O_ADDX, SL), AV_H8SX, 0, "addx.l", {{RSIND, RD32, E}}, {{PREFIX_0104, 0x6, 0x9, B30 | RSIND, B30 | B20 | B01 | IGNORE, 0x0, 0xa, B31 | IGNORE, B30 | RD32, E}}},
- {O (O_ADDX, SL), AV_H8SX, 0, "addx.l", {{RSPOSTDEC, RD32, E}}, {{PREFIX_0106, 0x6, 0xd, B30 | RSPOSTDEC, B30 | B20 | B01 | IGNORE, 0x0, 0xa, B31 | IGNORE, B30 | RD32, E}}},
- {O (O_ADDX, SL), AV_H8SX, 0, "addx.l", {{RSIND, RDIND, E}}, {{PREFIX_0104, 0x6, 0x9, B30 | RSIND, 0xd, 0x0, RDIND, 0x1, IGNORE, E}}},
- {O (O_ADDX, SL), AV_H8SX, 0, "addx.l", {{RSPOSTDEC, RDPOSTDEC, E}}, {{PREFIX_0106, 0x6, 0xd, B30 | RSPOSTDEC, 0xd, 0xa, RDPOSTDEC, 0x1, IGNORE, E}}},
-
- {O (O_AND, SB), AV_H8, 2, "and.b", {{IMM8, RD8, E}}, {{0xe, RD8, IMM8LIST, E}}},
- EXPAND_TWOOP_B (O (O_AND, SB), "and.b", 0xe, 0x1, 0x6, 0x6, 0),
-
- {O (O_AND, SW), AV_H8, 2, "and.w", {{RS16, RD16, E}}, {{0x6, 0x6, RS16, RD16, E}}},
- EXPAND_TWOOP_W (O (O_AND, SW), "and.w", 0x6, 0x6, 0x6),
-
- {O (O_AND, SL), AV_H8H, 2, "and.l", {{RS32, RD32, E}}, {{0x0, 0x1, 0xF, 0x0, 0x6, 0x6, B30 | RS32, B30 | RD32, E}}},
- EXPAND_TWOOP_L (O (O_AND, SL), "and.l", 0x6),
-
- {O (O_ANDC, SB), AV_H8, 2, "andc", {{IMM8, CCR | DST, E}}, {{0x0, 0x6, IMM8LIST, E}}},
- {O (O_ANDC, SB), AV_H8S, 2, "andc", {{IMM8, EXR | DST, E}}, {{0x0, 0x1, 0x4, EXR | DST, 0x0, 0x6, IMM8LIST, E}}},
-
- BRANCH (O (O_BRA, SB), "bra", 0x0),
-
- {O (O_BRAB, SB), AV_H8SX, 0, "bra", {{LOWREG | L_8, E}}, {{0x5, 0x9, LOWREG | L_8 | B30, 0x5, E}}},
- {O (O_BRAW, SW), AV_H8SX, 0, "bra", {{LOWREG | L_16, E}}, {{0x5, 0x9, LOWREG | L_16 | B30, 0x6, E}}},
- {O (O_BRAL, SL), AV_H8SX, 0, "bra", {{RS32, E}}, {{0x5, 0x9, RS32 | B30, 0x7, E}}},
-
- {O (O_BRABC, SB), AV_H8SX, 0, "bra/bc", {{IMM3, RDIND, OP3PCREL8}}, {{0x7, 0xC, B30 | RDIND, 0x0, 0x4, B30 | IMM3, OP3PCREL8, DATA, E}}},
- {O (O_BRABC, SB), AV_H8SX, 0, "bra/bc", {{IMM3, ABS8DST, OP3PCREL8}}, {{0x7, 0xE, DSTABS8LIST, 0x4, B30 | IMM3, OP3PCREL8, DATA, E}}},
- {O (O_BRABC, SB), AV_H8SX, 0, "bra/bc", {{IMM3, ABS16DST, OP3PCREL8}}, {{0x6, 0xA, 0x1, 0x0, DSTABS16LIST, 0x4, B30 | IMM3, OP3PCREL8, DATA, E}}},
- {O (O_BRABC, SB), AV_H8SX, 0, "bra/bc", {{IMM3, ABS32DST, OP3PCREL8}}, {{0x6, 0xA, 0x3, 0x0, DSTABS32LIST, 0x4, B30 | IMM3, OP3PCREL8, DATA, E}}},
- {O (O_BRABS, SB), AV_H8SX, 0, "bra/bs", {{IMM3, RDIND, OP3PCREL8}}, {{0x7, 0xC, B30 | RDIND, 0x0, 0x4, B31 | IMM3, OP3PCREL8, DATA, E}}},
- {O (O_BRABS, SB), AV_H8SX, 0, "bra/bs", {{IMM3, ABS8DST, OP3PCREL8}}, {{0x7, 0xE, DSTABS8LIST, 0x4, B31 | IMM3, OP3PCREL8, DATA, E}}},
- {O (O_BRABS, SB), AV_H8SX, 0, "bra/bs", {{IMM3, ABS16DST, OP3PCREL8}}, {{0x6, 0xA, 0x1, 0x0, DSTABS16LIST, 0x4, B31 | IMM3, OP3PCREL8, DATA, E}}},
- {O (O_BRABS, SB), AV_H8SX, 0, "bra/bs", {{IMM3, ABS32DST, OP3PCREL8}}, {{0x6, 0xA, 0x3, 0x0, DSTABS32LIST, 0x4, B31 | IMM3, OP3PCREL8, DATA, E}}},
- {O (O_BRABC, SB), AV_H8SX, 0, "bra/bc", {{IMM3, RDIND, OP3PCREL16}}, {{0x7, 0xC, B30 | RDIND, 0x0, 0x5, 0x8, B30 | IMM3, 0x0, OP3PCREL16, DATA3, E}}},
- {O (O_BRABC, SB), AV_H8SX, 0, "bra/bc", {{IMM3, ABS8DST, OP3PCREL16}}, {{0x7, 0xE, DSTABS8LIST, 0x5, 0x8, B30 | IMM3, 0x0, OP3PCREL16, DATA3, E}}},
- {O (O_BRABC, SB), AV_H8SX, 0, "bra/bc", {{IMM3, ABS16DST, OP3PCREL16}}, {{0x6, 0xA, 0x1, 0x0, DSTABS16LIST, 0x5, 0x8, B30 | IMM3, 0x0, OP3PCREL16, DATA3, E}}},
- {O (O_BRABC, SB), AV_H8SX, 0, "bra/bc", {{IMM3, ABS32DST, OP3PCREL16}}, {{0x6, 0xA, 0x3, 0x0, DSTABS32LIST, 0x5, 0x8, B30 | IMM3, 0x0, OP3PCREL16, DATA3, E}}},
- {O (O_BRABS, SB), AV_H8SX, 0, "bra/bs", {{IMM3, RDIND, OP3PCREL16}}, {{0x7, 0xC, B30 | RDIND, 0x0, 0x5, 0x8, B31 | IMM3, 0x0, OP3PCREL16, DATA3, E}}},
- {O (O_BRABS, SB), AV_H8SX, 0, "bra/bs", {{IMM3, ABS8DST, OP3PCREL16}}, {{0x7, 0xE, DSTABS8LIST, 0x5, 0x8, B31 | IMM3, 0x0, OP3PCREL16, DATA3, E}}},
- {O (O_BRABS, SB), AV_H8SX, 0, "bra/bs", {{IMM3, ABS16DST, OP3PCREL16}}, {{0x6, 0xA, 0x1, 0x0, DSTABS16LIST, 0x5, 0x8, B31 | IMM3, 0x0, OP3PCREL16, DATA3, E}}},
- {O (O_BRABS, SB), AV_H8SX, 0, "bra/bs", {{IMM3, ABS32DST, OP3PCREL16}}, {{0x6, 0xA, 0x3, 0x0, DSTABS32LIST, 0x5, 0x8, B31 | IMM3, 0x0, OP3PCREL16, DATA3, E}}},
-
- {O (O_BRAS, SB), AV_H8SX, 0, "bra/s", {{PCREL8, E}}, {{0x4, 0x0, PCREL8, DATA | B01, E}}},
-
- {O (O_BSRBC, SB), AV_H8SX, 0, "bsr/bc", {{IMM3, RDIND, OP3PCREL16}}, {{0x7, 0xC, B30 | RDIND, 0x0, 0x5, 0xC, B30 | IMM3, 0x0, OP3PCREL16, DATA3, E}}},
- {O (O_BSRBC, SB), AV_H8SX, 0, "bsr/bc", {{IMM3, ABS8DST, OP3PCREL16}}, {{0x7, 0xE, DSTABS8LIST, 0x5, 0xC, B30 | IMM3, 0x0, OP3PCREL16, DATA3, E}}},
- {O (O_BSRBC, SB), AV_H8SX, 0, "bsr/bc", {{IMM3, ABS16DST, OP3PCREL16}}, {{0x6, 0xA, 0x1, 0x0, DSTABS16LIST, 0x5, 0xC, B30 | IMM3, 0x0, OP3PCREL16, DATA3, E}}},
- {O (O_BSRBC, SB), AV_H8SX, 0, "bsr/bc", {{IMM3, ABS32DST, OP3PCREL16}}, {{0x6, 0xA, 0x3, 0x0, DSTABS32LIST, 0x5, 0xC, B30 | IMM3, 0x0, OP3PCREL16, DATA3, E}}},
- {O (O_BSRBS, SB), AV_H8SX, 0, "bsr/bs", {{IMM3, RDIND, OP3PCREL16}}, {{0x7, 0xC, B30 | RDIND, 0x0, 0x5, 0xC, B31 | IMM3, 0x0, OP3PCREL16, DATA3, E}}},
- {O (O_BSRBS, SB), AV_H8SX, 0, "bsr/bs", {{IMM3, ABS8DST, OP3PCREL16}}, {{0x7, 0xE, DSTABS8LIST, 0x5, 0xC, B31 | IMM3, 0x0, OP3PCREL16, DATA3, E}}},
- {O (O_BSRBS, SB), AV_H8SX, 0, "bsr/bs", {{IMM3, ABS16DST, OP3PCREL16}}, {{0x6, 0xA, 0x1, 0x0, DSTABS16LIST, 0x5, 0xC, B31 | IMM3, 0x0, OP3PCREL16, DATA3, E}}},
- {O (O_BSRBS, SB), AV_H8SX, 0, "bsr/bs", {{IMM3, ABS32DST, OP3PCREL16}}, {{0x6, 0xA, 0x3, 0x0, DSTABS32LIST, 0x5, 0xC, B31 | IMM3, 0x0, OP3PCREL16, DATA3, E}}},
-
- BRANCH (O (O_BRA, SB), "bt", 0x0),
- BRANCH (O (O_BRN, SB), "brn", 0x1),
- BRANCH (O (O_BRN, SB), "bf", 0x1),
- BRANCH (O (O_BHI, SB), "bhi", 0x2),
- BRANCH (O (O_BLS, SB), "bls", 0x3),
- BRANCH (O (O_BCC, SB), "bcc", 0x4),
- BRANCH (O (O_BCC, SB), "bhs", 0x4),
- BRANCH (O (O_BCS, SB), "bcs", 0x5),
- BRANCH (O (O_BCS, SB), "blo", 0x5),
- BRANCH (O (O_BNE, SB), "bne", 0x6),
- BRANCH (O (O_BEQ, SB), "beq", 0x7),
- BRANCH (O (O_BVC, SB), "bvc", 0x8),
- BRANCH (O (O_BVS, SB), "bvs", 0x9),
- BRANCH (O (O_BPL, SB), "bpl", 0xA),
- BRANCH (O (O_BMI, SB), "bmi", 0xB),
- BRANCH (O (O_BGE, SB), "bge", 0xC),
- BRANCH (O (O_BLT, SB), "blt", 0xD),
- BRANCH (O (O_BGT, SB), "bgt", 0xE),
- BRANCH (O (O_BLE, SB), "ble", 0xF),
-
- EBITOP (O (O_BCLR, SB), IMM3 | B30, "bclr", 0x6, 0x2, 0x7, 0xD, 0x7, 0xF, 0x8, 0),
- BITOP (O (O_BAND, SB), IMM3 | B30, "band", 0x7, 0x6, 0x7, 0xC, 0x7, 0xE, 0x0, 0),
- BITOP (O (O_BIAND, SB), IMM3 | B31, "biand", 0x7, 0x6, 0x7, 0xC, 0x7, 0xE, 0x0, 0),
- BITOP (O (O_BILD, SB), IMM3 | B31, "bild", 0x7, 0x7, 0x7, 0xC, 0x7, 0xE, 0x0, 0),
- BITOP (O (O_BIOR, SB), IMM3 | B31, "bior", 0x7, 0x4, 0x7, 0xC, 0x7, 0xE, 0x0, 0),
- BITOP (O (O_BIST, SB), IMM3 | B31, "bist", 0x6, 0x7, 0x7, 0xD, 0x7, 0xF, 0x8, 0),
- BITOP (O (O_BIXOR, SB), IMM3 | B31, "bixor", 0x7, 0x5, 0x7, 0xC, 0x7, 0xE, 0x0, 0),
- BITOP (O (O_BLD, SB), IMM3 | B30, "bld", 0x7, 0x7, 0x7, 0xC, 0x7, 0xE, 0x0, 0),
- EBITOP (O (O_BNOT, SB), IMM3 | B30, "bnot", 0x6, 0x1, 0x7, 0xD, 0x7, 0xF, 0x8, 0),
- BITOP (O (O_BOR, SB), IMM3 | B30, "bor", 0x7, 0x4, 0x7, 0xC, 0x7, 0xE, 0x0, 0),
- EBITOP (O (O_BSET, SB), IMM3 | B30, "bset", 0x6, 0x0, 0x7, 0xD, 0x7, 0xF, 0x8, 0),
- BITOP (O (O_BST, SB), IMM3 | B30, "bst", 0x6, 0x7, 0x7, 0xD, 0x7, 0xF, 0x8, 0),
- EBITOP (O (O_BTST, SB), IMM3 | B30, "btst", 0x6, 0x3, 0x7, 0xC, 0x7, 0xE, 0x0, 0),
- BITOP (O (O_BXOR, SB), IMM3 | B30, "bxor", 0x7, 0x5, 0x7, 0xC, 0x7, 0xE, 0x0, 0),
-
- EBITOP_B (O (O_BCLREQ, SB), IMM3 | B30, "bclr/eq", 0x6, 0x2, 0x7, 0xD, 0x7, 0xF, 0x8, 0x7),
- EBITOP_B (O (O_BCLRNE, SB), IMM3 | B30, "bclr/ne", 0x6, 0x2, 0x7, 0xD, 0x7, 0xF, 0x8, 0x6),
- EBITOP_B (O (O_BSETEQ, SB), IMM3 | B30, "bset/eq", 0x6, 0x0, 0x7, 0xD, 0x7, 0xF, 0x8, 0x7),
- EBITOP_B (O (O_BSETNE, SB), IMM3 | B30, "bset/ne", 0x6, 0x0, 0x7, 0xD, 0x7, 0xF, 0x8, 0x6),
- BITOP_B (O (O_BISTZ, SB), IMM3 | B31, "bistz", 0x6, 0x7, 0x7, 0xD, 0x7, 0xF, 0x8, 0x7),
- BITOP_B (O (O_BSTZ, SB), IMM3 | B30, "bstz", 0x6, 0x7, 0x7, 0xD, 0x7, 0xF, 0x8, 0x7),
-
- {O (O_BFLD, SB), AV_H8SX, 0, "bfld", {{IMM8, RDIND, R3_8}}, {{0x7, 0xC, B30 | RDIND, 0x0, 0xF, R3_8, IMM8LIST, E}}},
- {O (O_BFLD, SB), AV_H8SX, 0, "bfld", {{IMM8, ABS8DST, R3_8}}, {{0x7, 0xE, DSTABS8LIST, 0xF, R3_8, IMM8LIST, E}}},
- {O (O_BFLD, SB), AV_H8SX, 0, "bfld", {{IMM8, ABS16DST, R3_8}}, {{0x6, 0xA, 0x1, 0x0, DSTABS16LIST, 0xF, R3_8, IMM8LIST, E}}},
- {O (O_BFLD, SB), AV_H8SX, 0, "bfld", {{IMM8, ABS32DST, R3_8}}, {{0x6, 0xA, 0x3, 0x0, DSTABS32LIST, 0xF, R3_8, IMM8LIST, E}}},
-
- /* Because the assembler treats SRC, DST and OP3 as ordinals,
- I must designate the second argument, an immediate value, as DST.
- May God have mercy on my soul. */
- {O (O_BFST, SB), AV_H8SX, 0, "bfst", {{RS8, DST | IMM8, R3_IND}}, {{0x7, 0xD, B30 | R3_IND, 0x0, 0xF, RS8, DST | IMM8LIST, E}}},
- {O (O_BFST, SB), AV_H8SX, 0, "bfst", {{RS8, DST | IMM8, ABS8OP3}}, {{0x7, 0xF, OP3ABS8LIST, 0xF, RS8, DST | IMM8LIST, E}}},
- {O (O_BFST, SB), AV_H8SX, 0, "bfst", {{RS8, DST | IMM8, ABS16OP3}}, {{0x6, 0xA, 0x1, 0x8, OP3ABS16LIST, 0xF, RS8, DST | IMM8LIST, E}}},
- {O (O_BFST, SB), AV_H8SX, 0, "bfst", {{RS8, DST | IMM8, ABS32OP3}}, {{0x6, 0xA, 0x3, 0x8, OP3ABS32LIST, 0xF, RS8, DST | IMM8LIST, E}}},
-
- {O (O_BSR, SB), AV_H8, 6, "bsr", {{PCREL8, E}}, {{0x5, 0x5, PCREL8, DATA, E}}},
- {O (O_BSR, SB), AV_H8, 6, "bsr", {{PCREL16, E}}, {{0x5, 0xC, 0x0, 0x0, PCREL16, DATA3, E}}},
- {O (O_BSR, SB), AV_H8SX, 0, "bsr", {{LOWREG | L_8, E}}, {{0x5, 0xd, B30 | LOWREG | L_8, 0x5, E}}},
- {O (O_BSR, SW), AV_H8SX, 0, "bsr", {{LOWREG | L_16, E}}, {{0x5, 0xd, B30 | LOWREG | L_16, 0x6, E}}},
- {O (O_BSR, SL), AV_H8SX, 0, "bsr", {{OR32, E}}, {{0x5, 0xd, B30 | OR32, 0x7, E}}},
-
- {O (O_CMP, SB), AV_H8, 2, "cmp.b", {{IMM8, RD8, E}}, {{0xa, RD8, IMM8LIST, E}}},
- EXPAND_TWOOP_B (O (O_CMP, SB), "cmp.b", 0xa, 0x1, 0xc, 0x2, B00),
-
- {O (O_CMP, SW), AV_H8, 2, "cmp.w", {{RS16, RD16, E}}, {{0x1, 0xd, RS16, RD16, E}}},
- {O (O_CMP, SW), AV_H8SX, 0, "cmp.w", {{IMM3NZ_NS, RD16, E}}, {{0x1, 0xf, B30 | IMM3NZ, RD16, E}}},
- {O (O_CMP, SW), AV_H8SX, 0, "cmp.w", {{IMM3NZ_NS, RDIND, E}}, {{0x7, 0xd, B31 | RDIND, IGNORE, 0x1, 0xf, B30 | IMM3NZ, IGNORE, E}}},
- {O (O_CMP, SW), AV_H8SX, 0, "cmp.w", {{IMM3NZ_NS, ABS16DST, E}}, {{0x6, 0xb, 0x1, B31 | IGNORE, DSTABS16LIST, 0x1, 0xf, B30 | IMM3NZ, IGNORE, E}}},
- {O (O_CMP, SW), AV_H8SX, 0, "cmp.w", {{IMM3NZ_NS, ABS32DST, E}}, {{0x6, 0xb, 0x3, B31 | IGNORE, DSTABS32LIST, 0x1, 0xf, B30 | IMM3NZ, IGNORE, E}}},
- EXPAND_TWOOP_W (O (O_CMP, SW), "cmp.w", 0x1, 0xd, 0x2),
-
- {O (O_CMP, SL), AV_H8H, 6, "cmp.l", {{RS32, RD32, E}}, {{0x1, 0xf, B31 | RS32, B30 | RD32, E}}},
- {O (O_CMP, SL), AV_H8SX, 0, "cmp.l", {{IMM3NZ_NS, RD32, E}}, {{0x1, 0xf, B31 | IMM3NZ, B31 | RD32, E}}},
- EXPAND_TWOOP_L (O (O_CMP, SL), "cmp.l", 0x2),
-
- UNOP (O (O_DAA, SB), "daa", 0x0, 0xF),
- UNOP (O (O_DAS, SB), "das", 0x1, 0xF),
- UNOP (O (O_DEC, SB), "dec.b", 0x1, 0xA),
-
- {O (O_DEC, SW), AV_H8H, 2, "dec.w", {{DBIT, RD16, E}}, {{0x1, 0xB, 0x5 | DBIT, RD16, E}}},
- {O (O_DEC, SL), AV_H8H, 2, "dec.l", {{DBIT, RD32, E}}, {{0x1, 0xB, 0x7 | DBIT, RD32 | B30, E}}},
-
- {O (O_DIVS, SW), AV_H8SX, 0, "divs.w", {{IMM4, RD16, E}}, {{0x0, 0x1, 0xd, 0x6, 0x5, 0x1, IMM4, RD16, E}}},
- {O (O_DIVS, SW), AV_H8SX, 0, "divs.w", {{RS16, RD16, E}}, {{0x0, 0x1, 0xd, 0x2, 0x5, 0x1, RS16, RD16, E}}},
- {O (O_DIVS, SL), AV_H8SX, 0, "divs.l", {{IMM4, RD32, E}}, {{0x0, 0x1, 0xd, 0x6, 0x5, 0x3, IMM4, B30 | RD32, E}}},
- {O (O_DIVS, SL), AV_H8SX, 0, "divs.l", {{RS32, RD32, E}}, {{0x0, 0x1, 0xd, 0x2, 0x5, 0x3, B30 | RS32, B30 | RD32, E}}},
-
- {O (O_DIVU, SW), AV_H8SX, 0, "divu.w", {{IMM4, RD16, E}}, {{0x0, 0x1, 0xd, 0xe, 0x5, 0x1, IMM4, RD16, E}}},
- {O (O_DIVU, SW), AV_H8SX, 0, "divu.w", {{RS16, RD16, E}}, {{0x0, 0x1, 0xd, 0xa, 0x5, 0x1, RS16, RD16, E}}},
- {O (O_DIVU, SL), AV_H8SX, 0, "divu.l", {{IMM4, RD32, E}}, {{0x0, 0x1, 0xd, 0xe, 0x5, 0x3, IMM4, B30 | RD32, E}}},
- {O (O_DIVU, SL), AV_H8SX, 0, "divu.l", {{RS32, RD32, E}}, {{0x0, 0x1, 0xd, 0xa, 0x5, 0x3, B30 | RS32, B30 | RD32, E}}},
-
- {O (O_DIVXS, SB), AV_H8SX, 0, "divxs.b", {{IMM4, RD16, E}}, {{0x0, 0x1, 0xD, 0x4, 0x5, 0x1, IMM4, RD16, E}}},
- {O (O_DIVXS, SB), AV_H8H, 13, "divxs.b", {{RS8, RD16, E}}, {{0x0, 0x1, 0xD, 0x0, 0x5, 0x1, RS8, RD16, E}}},
- {O (O_DIVXS, SW), AV_H8SX, 0, "divxs.w", {{IMM4, RD32, E}}, {{0x0, 0x1, 0xD, 0x4, 0x5, 0x3, IMM4, B30 | RD32, E}}},
- {O (O_DIVXS, SW), AV_H8H, 21, "divxs.w", {{RS16, RD32, E}}, {{0x0, 0x1, 0xD, 0x0, 0x5, 0x3, RS16, B30 | RD32, E}}},
-
- {O (O_DIVXU, SB), AV_H8SX, 0, "divxu.b", {{IMM4, RD16, E}}, {{0x0, 0x1, 0xD, 0xC, 0x5, 0x1, IMM4, RD16, E}}},
- {O (O_DIVXU, SB), AV_H8, 13, "divxu.b", {{RS8, RD16, E}}, {{0x5, 0x1, RS8, RD16, E}}},
- {O (O_DIVXU, SW), AV_H8SX, 0, "divxu.w", {{IMM4, RD32, E}}, {{0x0, 0x1, 0xD, 0xC, 0x5, 0x3, IMM4, B30 | RD32, E}}},
- {O (O_DIVXU, SW), AV_H8H, 21, "divxu.w", {{RS16, RD32, E}}, {{0x5, 0x3, RS16, B30 | RD32, E}}},
-
- {O (O_EEPMOV, SB), AV_H8, 4, "eepmov.b", {{E}}, {{0x7, 0xB, 0x5, 0xC, 0x5, 0x9, 0x8, 0xF, E}}},
- {O (O_EEPMOV, SW), AV_H8H, 4, "eepmov.w", {{E}}, {{0x7, 0xB, 0xD, 0x4, 0x5, 0x9, 0x8, 0xF, E}}},
-
- EXPAND_UNOP_STD_W (O (O_EXTS, SW), "exts.w", PREFIX_015, 0x1, 0x7, 0xd),
- EXPAND_UNOP_STD_L (O (O_EXTS, SL), "exts.l", PREFIX_010, 0x1, 0x7, 0xf),
- EXPAND_UNOP_EXTENDED_L (O (O_EXTS, SL), "exts.l", CONST_2, PREFIX_010, 0x1, 0x7, 0xe, 0),
- EXPAND_UNOP_STD_W (O (O_EXTU, SW), "extu.w", PREFIX_015, 0x1, 0x7, 0x5),
- EXPAND_UNOP_STD_L (O (O_EXTU, SL), "extu.l", PREFIX_010, 0x1, 0x7, 0x7),
- EXPAND_UNOP_EXTENDED_L (O (O_EXTU, SL), "extu.l", CONST_2, PREFIX_010, 0x1, 0x7, 0x6, 0),
-
- UNOP (O (O_INC, SB), "inc", 0x0, 0xA),
-
- {O (O_INC, SW), AV_H8H, 2, "inc.w", {{DBIT, RD16, E}}, {{0x0, 0xB, 0x5 | DBIT, RD16, E}}},
- {O (O_INC, SL), AV_H8H, 2, "inc.l", {{DBIT, RD32, E}}, {{0x0, 0xB, 0x7 | DBIT, RD32 | B30, E}}},
-
- {O (O_JMP, SN), AV_H8, 4, "jmp", {{RSIND, E}}, {{0x5, 0x9, B30 | RSIND, 0x0, E}}},
- {O (O_JMP, SN), AV_H8, 6, "jmp", {{ABSJMP | L_24, E}}, {{0x5, 0xA, SRC | ABSJMP | L_24, DATA5, E}}},
-
- {O (O_JMP, SN), AV_H8SX, 0, "jmp", {{ABSJMP | L_32, E}}, {{0x5, 0x9, 0x0, 0x8, ABSJMP | L_32, DATA7, E}}},
-
- {O (O_JMP, SN), AV_H8, 8, "jmp", {{MEMIND, E}}, {{0x5, 0xB, SRC | MEMIND, DATA, E}}},
- {O (O_JMP, SN), AV_H8SX, 0, "jmp", {{VECIND, E}}, {{0x5, 0x9, B31 | SRC | VECIND, DATA, E}}},
-
- {O (O_JSR, SN), AV_H8, 6, "jsr", {{RSIND, E}}, {{0x5, 0xD, B30 | RSIND, 0x0, E}}},
- {O (O_JSR, SN), AV_H8, 8, "jsr", {{ABSJMP | L_24, E}}, {{0x5, 0xE, SRC | ABSJMP | L_24, DATA5, E}}},
-
- {O (O_JSR, SN), AV_H8SX, 0, "jsr", {{ABSJMP | L_32, E}}, {{0x5, 0xD, 0x0, 0x8, ABSJMP | L_32, DATA7, E}}},
-
- {O (O_JSR, SN), AV_H8, 8, "jsr", {{MEMIND, E}}, {{0x5, 0xF, SRC | MEMIND, DATA, E}}},
- {O (O_JSR, SN), AV_H8SX, 8, "jsr", {{VECIND, E}}, {{0x5, 0xD, SRC | VECIND, DATA, E}}},
-
- {O (O_LDC, SB), AV_H8, 2, "ldc", {{IMM8, CCR | DST, E}}, {{ 0x0, 0x7, IMM8LIST, E}}},
- {O (O_LDC, SB), AV_H8S, 2, "ldc", {{IMM8, EXR | DST, E}}, {{0x0, 0x1, 0x4, EXR | DST, 0x0, 0x7, IMM8LIST, E}}},
- {O (O_LDC, SB), AV_H8, 2, "ldc", {{RS8, CCR | DST, E}}, {{0x0, 0x3, B30 | CCR | DST, RS8, E}}},
- {O (O_LDC, SB), AV_H8S, 2, "ldc", {{RS8, EXR | DST, E}}, {{0x0, 0x3, B30 | EXR | DST, RS8, E}}},
- {O (O_LDC, SW), AV_H8H, 2, "ldc", {{RSIND, CCR | DST, E}}, {{PREFIXLDC, 0x6, 0x9, B30 | RSIND, IGNORE, E}}},
- {O (O_LDC, SW), AV_H8S, 2, "ldc", {{RSIND, EXR | DST, E}}, {{PREFIXLDC, 0x6, 0x9, B30 | RSIND, IGNORE, E}}},
- {O (O_LDC, SW), AV_H8H, 2, "ldc", {{RSPOSTINC, CCR | DST, E}}, {{PREFIXLDC, 0x6, 0xD, B30 | RSPOSTINC, IGNORE, E}}},
- {O (O_LDC, SW), AV_H8S, 2, "ldc", {{RSPOSTINC, EXR | DST, E}}, {{PREFIXLDC, 0x6, 0xD, B30 | RSPOSTINC, IGNORE, E}}},
- {O (O_LDC, SW), AV_H8H, 2, "ldc", {{DISP16SRC, CCR | DST, E}}, {{PREFIXLDC, 0x6, 0xF, B30 | DISPREG, IGNORE, SRC | DISP16LIST, E}}},
- {O (O_LDC, SW), AV_H8S, 2, "ldc", {{DISP16SRC, EXR | DST, E}}, {{PREFIXLDC, 0x6, 0xF, B30 | DISPREG, IGNORE, SRC | DISP16LIST, E}}},
- {O (O_LDC, SW), AV_H8H, 2, "ldc", {{DISP32SRC, CCR | DST, E}}, {{PREFIXLDC, 0x7, 0x8, B30 | DISPREG, 0x0, 0x6, 0xB, 0x2, IGNORE, SRC | DISP32LIST, E}}},
- {O (O_LDC, SW), AV_H8S, 2, "ldc", {{DISP32SRC, EXR | DST, E}}, {{PREFIXLDC, 0x7, 0x8, B30 | DISPREG, 0x0, 0x6, 0xB, 0x2, IGNORE, SRC | DISP32LIST, E}}},
- {O (O_LDC, SW), AV_H8H, 2, "ldc", {{ABS16SRC, CCR | DST, E}}, {{PREFIXLDC, 0x6, 0xB, 0x0, IGNORE, SRC | ABS16LIST, E}}},
- {O (O_LDC, SW), AV_H8S, 2, "ldc", {{ABS16SRC, EXR | DST, E}}, {{PREFIXLDC, 0x6, 0xB, 0x0, IGNORE, SRC | ABS16LIST, E}}},
- {O (O_LDC, SW), AV_H8H, 2, "ldc", {{ABS32SRC, CCR | DST, E}}, {{PREFIXLDC, 0x6, 0xB, 0x2, IGNORE, SRC | MEMRELAX | ABS32LIST, E}}},
- {O (O_LDC, SW), AV_H8S, 2, "ldc", {{ABS32SRC, EXR | DST, E}}, {{PREFIXLDC, 0x6, 0xB, 0x2, IGNORE, SRC | MEMRELAX | ABS32LIST, E}}},
-
- {O (O_LDC, SL), AV_H8SX, 0, "ldc", {{RS32, B30 | VBR_SBR | DST, E}}, {{0x0, 0x3, B30 | VBR_SBR | DST, RS32, E}}},
-
-
- {O (O_MOV, SB), AV_H8, 2, "mov.b", {{IMM8, RD8, E}}, {{0xF, RD8, IMM8LIST, E}}},
- {O (O_MOV, SB), AV_H8SX, 0, "mov.b", {{IMM4_NS, ABS16DST, E}}, {{0x6, 0xa, 0xd, IMM4, DSTABS16LIST, E}}},
- {O (O_MOV, SB), AV_H8SX, 0, "mov.b", {{IMM4_NS, ABS32DST, E}}, {{0x6, 0xa, 0xf, IMM4, DSTABS32LIST, E}}},
- MOVFROM_IMM8 (O (O_MOV, SB), PREFIX_017D, "mov.b", IMM8),
-
- {O (O_MOV, SB), AV_H8, 2, "mov.b", {{RS8, RD8, E}}, {{0x0, 0xC, RS8, RD8, E}}},
- MOVFROM_REG_BW (O (O_MOV, SB), "mov.b", RS8, PREFIX_017, 8, 10, 12, 14, MEMRELAX),
- {O (O_MOV, SB), AV_H8, 4, "mov.b", {{RS8, ABS8DST, E}}, {{0x3, RS8, DSTABS8LIST, E}}},
- MOVTO_REG_BW (O (O_MOV, SB), "mov.b", RD8, PREFIX_017, 8, 10, 12, 14, MEMRELAX),
- {O (O_MOV, SB), AV_H8, 4, "mov.b", {{ABS8SRC, RD8, E}}, {{0x2, RD8, ABS8LIST, E}}},
-
- MOVFROM_STD (O (O_MOV, SB), PREFIX_0178, "mov.b", RSIND, FROM_IND),
- MOVFROM_STD (O (O_MOV, SB), PREFIX_0178, "mov.b", RSPOSTINC, FROM_POSTINC),
- MOVFROM_STD (O (O_MOV, SB), PREFIX_0178, "mov.b", RSPOSTDEC, FROM_POSTDEC),
- MOVFROM_STD (O (O_MOV, SB), PREFIX_0178, "mov.b", RSPREINC, FROM_PREINC),
- MOVFROM_STD (O (O_MOV, SB), PREFIX_0178, "mov.b", RSPREDEC, FROM_PREDEC),
- MOVFROM_STD (O (O_MOV, SB), PREFIX_0178, "mov.b", DISP2SRC, FROM_DISP2),
- MOVFROM_AD (O (O_MOV, SB), PREFIX_0178, "mov.b", DISP16SRC, FROM_DISP16, DISP16LIST),
- MOVFROM_AD (O (O_MOV, SB), PREFIX_0178, "mov.b", DISP32SRC, FROM_DISP32, DISP32LIST),
- MOVFROM_AD (O (O_MOV, SB), PREFIX_0178, "mov.b", INDEXB16, FROM_DISP16B, DISP16LIST),
- MOVFROM_AD (O (O_MOV, SB), PREFIX_0178, "mov.b", INDEXW16, FROM_DISP16W, DISP16LIST),
- MOVFROM_AD (O (O_MOV, SB), PREFIX_0178, "mov.b", INDEXL16, FROM_DISP16L, DISP16LIST),
- MOVFROM_AD (O (O_MOV, SB), PREFIX_0178, "mov.b", INDEXB32, FROM_DISP32B, DISP32LIST),
- MOVFROM_AD (O (O_MOV, SB), PREFIX_0178, "mov.b", INDEXW32, FROM_DISP32W, DISP32LIST),
- MOVFROM_AD (O (O_MOV, SB), PREFIX_0178, "mov.b", INDEXL32, FROM_DISP32L, DISP32LIST),
- MOVFROM_AD (O (O_MOV, SB), PREFIX_0178, "mov.b", ABS16SRC, FROM_ABS16, ABS16LIST),
- MOVFROM_AD (O (O_MOV, SB), PREFIX_0178, "mov.b", ABS32SRC, FROM_ABS32, ABS32LIST),
-
- {O (O_MOV, SW), AV_H8SX, 0, "mov.w", {{IMM3NZ_NS, RD16, E}}, {{0x0, 0xf, B30 | IMM3NZ, RD16, E}}},
- {O (O_MOV, SW), AV_H8, 4, "mov.w", {{IMM16, RD16, E}}, {{0x7, 0x9, 0x0, RD16, IMM16LIST, E}}},
- {O (O_MOV, SW), AV_H8SX, 0, "mov.w", {{IMM4_NS, ABS16DST, E}}, {{0x6, 0xb, 0xd, IMM4, DSTABS16LIST, E}}},
- {O (O_MOV, SW), AV_H8SX, 0, "mov.w", {{IMM4_NS, ABS32DST, E}}, {{0x6, 0xb, 0xf, IMM4, DSTABS32LIST, E}}},
-
- MOVFROM_IMM8 (O (O_MOV, SW), PREFIX_015D, "mov.w", IMM8U_NS),
- MOVFROM_IMM (O (O_MOV, SW), PREFIX_7974, "mov.w", IMM16, IMM16LIST),
-
- {O (O_MOV, SW), AV_H8, 2, "mov.w", {{RS16, RD16, E}}, {{0x0, 0xD, RS16, RD16, E}}},
- MOVFROM_REG_BW (O (O_MOV, SW), "mov.w", RS16, PREFIX_015, 9, 11, 13, 15, 0),
- MOVTO_REG_BW (O (O_MOV, SW), "mov.w", RD16, PREFIX_015, 9, 11, 13, 15, 0),
-
- MOVFROM_STD (O (O_MOV, SW), PREFIX_0158, "mov.w", RSIND, FROM_IND),
- MOVFROM_STD (O (O_MOV, SW), PREFIX_0158, "mov.w", RSPOSTINC, FROM_POSTINC),
- MOVFROM_STD (O (O_MOV, SW), PREFIX_0158, "mov.w", RSPOSTDEC, FROM_POSTDEC),
- MOVFROM_STD (O (O_MOV, SW), PREFIX_0158, "mov.w", RSPREINC, FROM_PREINC),
- MOVFROM_STD (O (O_MOV, SW), PREFIX_0158, "mov.w", RSPREDEC, FROM_PREDEC),
- MOVFROM_STD (O (O_MOV, SW), PREFIX_0158, "mov.w", DISP2SRC, FROM_DISP2),
- MOVFROM_AD (O (O_MOV, SW), PREFIX_0158, "mov.w", DISP16SRC, FROM_DISP16, DISP16LIST),
- MOVFROM_AD (O (O_MOV, SW), PREFIX_0158, "mov.w", DISP32SRC, FROM_DISP32, DISP32LIST),
- MOVFROM_AD (O (O_MOV, SW), PREFIX_0158, "mov.w", INDEXB16, FROM_DISP16B, DISP16LIST),
- MOVFROM_AD (O (O_MOV, SW), PREFIX_0158, "mov.w", INDEXW16, FROM_DISP16W, DISP16LIST),
- MOVFROM_AD (O (O_MOV, SW), PREFIX_0158, "mov.w", INDEXL16, FROM_DISP16L, DISP16LIST),
- MOVFROM_AD (O (O_MOV, SW), PREFIX_0158, "mov.w", INDEXB32, FROM_DISP32B, DISP32LIST),
- MOVFROM_AD (O (O_MOV, SW), PREFIX_0158, "mov.w", INDEXW32, FROM_DISP32W, DISP32LIST),
- MOVFROM_AD (O (O_MOV, SW), PREFIX_0158, "mov.w", INDEXL32, FROM_DISP32L, DISP32LIST),
- MOVFROM_AD (O (O_MOV, SW), PREFIX_0158, "mov.w", ABS16SRC, FROM_ABS16, ABS16LIST),
- MOVFROM_AD (O (O_MOV, SW), PREFIX_0158, "mov.w", ABS32SRC, FROM_ABS32, ABS32LIST),
-
- {O (O_MOV, SL), AV_H8SX, 0, "mov.l", {{IMM3NZ_NS, RD32, E}}, {{0x0, 0xf, B31 | IMM3NZ, B31 | RD32, E}}},
-
- MOVFROM_IMM8 (O (O_MOV, SL), PREFIX_010D, "mov.l", IMM8U_NS),
- MOVFROM_IMM (O (O_MOV, SL), PREFIX_7A7C, "mov.l", IMM16U_NS, IMM16ULIST),
-
- {O (O_MOV, SL), AV_H8SX, 0, "mov.l", {{IMM16U_NS, RD32, E}}, {{0x7, 0xa, 0x0, B31 | RD32, IMM16ULIST, E}}},
- {O (O_MOV, SL), AV_H8H, 4, "mov.l", {{IMM32, RD32, E}}, {{0x7, 0xa, 0x0, B30 | RD32, IMM32LIST, E}}},
-
- MOVFROM_IMM (O (O_MOV, SL), PREFIX_7A74, "mov.l", IMM32, IMM32LIST),
-
- {O (O_MOV, SL), AV_H8H, 2, "mov.l", {{RS32, RD32, E}}, {{0x0, 0xf, B31 | RS32, B30 | RD32, E}}},
-
- {O (O_MOV, SL), AV_H8H, 6, "mov.l", {{RS32, RDIND, E}}, {{PREFIX_0100, 0x6, 0x9, B31 | RDIND, B30 | RS32, E}}},
- {O (O_MOV, SL), AV_H8SX, 0, "mov.l", {{RS32, RDPOSTINC, E}}, {{PREFIX_0103, 0x6, 0xd, B31 | RDPOSTINC, RS32, E}}},
- {O (O_MOV, SL), AV_H8SX, 0, "mov.l", {{RS32, RDPOSTDEC, E}}, {{PREFIX_0101, 0x6, 0xd, B31 | RDPOSTDEC, RS32, E}}},
- {O (O_MOV, SL), AV_H8SX, 0, "mov.l", {{RS32, RDPREINC, E}}, {{PREFIX_0102, 0x6, 0xd, B31 | RDPREINC, RS32, E}}},
- {O (O_MOV, SL), AV_H8H, 6, "mov.l", {{RS32, RDPREDEC, E}}, {{PREFIX_0100, 0x6, 0xd, B31 | RDPREDEC, RS32, E}}},
- {O (O_MOV, SL), AV_H8SX, 0, "mov.l", {{RS32, DISP2DST, E}}, {{PREFIX_010, B30 | B20 | DISP2DST, 0x6, 0x9, B31 | DSTDISPREG, RS32, E}}},
- {O (O_MOV, SL), AV_H8H, 6, "mov.l", {{RS32, DISP16DST, E}}, {{PREFIX_0100, 0x6, 0xf, B31 | DSTDISPREG, RS32, DSTDISP16LIST, E}}},
- {O (O_MOV, SL), AV_H8SX, 6, "mov.l", {{RS32, DISP32DST, E}}, {{0x7, 0x8, B31 | DSTDISPREG, 0x0, 0x6, 0xb, 0xa, RS32, DSTDISP32LIST, E}}},
- {O (O_MOV, SL), AV_H8H, 6, "mov.l", {{RS32, DISP32DST, E}}, {{PREFIX_0100, 0x7, 0x8, B31 | DSTDISPREG, 0x0, 0x6, 0xb, 0xa, RS32, MEMRELAX | DSTDISP32LIST, E}}},
- {O (O_MOV, SL), AV_H8H, 6, "mov.l", {{RS32, DISP32DST, E}}, {{PREFIX_0100, 0x7, 0x8, DSTDISPREG, 0x0, 0x6, 0xb, 0xa, RS32, MEMRELAX | DSTDISP32LIST, E}}},
- {O (O_MOV, SL), AV_H8SX, 0, "mov.l", {{RS32, INDEXB16D, E}}, {{PREFIX_0101, 0x6, 0xf, B31 | DSTDISPREG, RS32, DSTDISP16LIST, E}}},
- {O (O_MOV, SL), AV_H8SX, 0, "mov.l", {{RS32, INDEXW16D, E}}, {{PREFIX_0102, 0x6, 0xf, B31 | DSTDISPREG, RS32, DSTDISP16LIST, E}}},
- {O (O_MOV, SL), AV_H8SX, 0, "mov.l", {{RS32, INDEXL16D, E}}, {{PREFIX_0103, 0x6, 0xf, B31 | DSTDISPREG, RS32, DSTDISP16LIST, E}}},
- {O (O_MOV, SL), AV_H8SX, 0, "mov.l", {{RS32, INDEXB32D, E}}, {{0x7, 0x8, B31 | DSTDISPREG, 0x1, 0x6, 0xb, 0xa, RS32, DSTDISP32LIST, E}}},
- {O (O_MOV, SL), AV_H8SX, 0, "mov.l", {{RS32, INDEXW32D, E}}, {{0x7, 0x8, B31 | DSTDISPREG, 0x2, 0x6, 0xb, 0xa, RS32, DSTDISP32LIST, E}}},
- {O (O_MOV, SL), AV_H8SX, 0, "mov.l", {{RS32, INDEXL32D, E}}, {{0x7, 0x8, B31 | DSTDISPREG, 0x3, 0x6, 0xb, 0xa, RS32, DSTDISP32LIST, E}}},
- {O (O_MOV, SL), AV_H8H, 6, "mov.l", {{RS32, ABS16DST, E}}, {{PREFIX_0100, 0x6, 0xb, 0x8, RS32, DSTABS16LIST, E}}},
- {O (O_MOV, SL), AV_H8H, 6, "mov.l", {{RS32, ABS32DST, E}}, {{PREFIX_0100, 0x6, 0xb, 0xa, RS32, MEMRELAX | DSTABS32LIST, E}}},
-
- {O (O_MOV, SL), AV_H8H, 4, "mov.l", {{RSIND, RD32, E}}, {{PREFIX_0100, 0x6, 0x9, B30 | RSIND, RD32, E}}},
- {O (O_MOV, SL), AV_H8H, 6, "mov.l", {{RSPOSTINC, RD32, E}}, {{PREFIX_0100, 0x6, 0xd, B30 | RSPOSTINC, RD32, E}}},
- {O (O_MOV, SL), AV_H8SX, 0, "mov.l", {{RSPOSTDEC, RD32, E}}, {{PREFIX_0102, 0x6, 0xd, B30 | RSPOSTDEC, RD32, E}}},
- {O (O_MOV, SL), AV_H8SX, 0, "mov.l", {{RSPREINC, RD32, E}}, {{PREFIX_0101, 0x6, 0xd, B30 | RSPREINC, RD32, E}}},
- {O (O_MOV, SL), AV_H8SX, 0, "mov.l", {{RSPREDEC, RD32, E}}, {{PREFIX_0103, 0x6, 0xd, B30 | RSPREDEC, RD32, E}}},
- {O (O_MOV, SL), AV_H8SX, 0, "mov.l", {{DISP2SRC, RD32, E}}, {{PREFIX_010, B30 | B20 | DISP2SRC, 0x6, 0x9, B30 | DISPREG, RD32, E}}},
- {O (O_MOV, SL), AV_H8H, 6, "mov.l", {{DISP16SRC, RD32, E}}, {{PREFIX_0100, 0x6, 0xf, B30 | DISPREG, RD32, SRC | DISP16LIST, E}}},
- {O (O_MOV, SL), AV_H8SX, 6, "mov.l", {{DISP32SRC, RD32, E}}, {{0x7, 0x8, B31 | DISPREG, 0x0, 0x6, 0xb, 0x2, RD32, SRC | DISP32LIST, E}}},
- {O (O_MOV, SL), AV_H8H, 6, "mov.l", {{DISP32SRC, RD32, E}}, {{PREFIX_0100, 0x7, 0x8, B30 | DISPREG, 0x0, 0x6, 0xb, 0x2, RD32, MEMRELAX | SRC | DISP32LIST, E}}},
- {O (O_MOV, SL), AV_H8SX, 0, "mov.l", {{INDEXB16, RD32, E}}, {{PREFIX_0101, 0x6, 0xf, B30 | DISPREG, RD32, SRC | DISP16LIST, E}}},
- {O (O_MOV, SL), AV_H8SX, 0, "mov.l", {{INDEXW16, RD32, E}}, {{PREFIX_0102, 0x6, 0xf, B30 | DISPREG, RD32, SRC | DISP16LIST, E}}},
- {O (O_MOV, SL), AV_H8SX, 0, "mov.l", {{INDEXL16, RD32, E}}, {{PREFIX_0103, 0x6, 0xf, B30 | DISPREG, RD32, SRC | DISP16LIST, E}}},
- {O (O_MOV, SL), AV_H8SX, 0, "mov.l", {{INDEXB32, RD32, E}}, {{0x7, 0x8, B31 | DISPREG, 0x1, 0x6, 0xb, 0x2, RD32, SRC | DISP32LIST, E}}},
- {O (O_MOV, SL), AV_H8SX, 0, "mov.l", {{INDEXW32, RD32, E}}, {{0x7, 0x8, B31 | DISPREG, 0x2, 0x6, 0xb, 0x2, RD32, SRC | DISP32LIST, E}}},
- {O (O_MOV, SL), AV_H8SX, 0, "mov.l", {{INDEXL32, RD32, E}}, {{0x7, 0x8, B31 | DISPREG, 0x3, 0x6, 0xb, 0x2, RD32, SRC | DISP32LIST, E}}},
- {O (O_MOV, SL), AV_H8H, 6, "mov.l", {{ABS16SRC, RD32, E}}, {{PREFIX_0100, 0x6, 0xb, 0x0, RD32, SRC | ABS16LIST, E}}},
- {O (O_MOV, SL), AV_H8H, 6, "mov.l", {{ABS32SRC, RD32, E}}, {{PREFIX_0100, 0x6, 0xb, 0x2, RD32, SRC | MEMRELAX | ABS32LIST, E}}},
-
- MOVFROM_STD (O (O_MOV, SL), PREFIX_0108, "mov.l", RSIND, FROM_IND),
- MOVFROM_STD (O (O_MOV, SL), PREFIX_0108, "mov.l", RSPOSTINC, FROM_POSTINC),
- MOVFROM_STD (O (O_MOV, SL), PREFIX_0108, "mov.l", RSPOSTDEC, FROM_POSTDEC),
- MOVFROM_STD (O (O_MOV, SL), PREFIX_0108, "mov.l", RSPREINC, FROM_PREINC),
- MOVFROM_STD (O (O_MOV, SL), PREFIX_0108, "mov.l", RSPREDEC, FROM_PREDEC),
- MOVFROM_STD (O (O_MOV, SL), PREFIX_0108, "mov.l", DISP2SRC, FROM_DISP2),
- MOVFROM_AD (O (O_MOV, SL), PREFIX_0108, "mov.l", DISP16SRC, FROM_DISP16, DISP16LIST),
- MOVFROM_AD (O (O_MOV, SL), PREFIX_0108, "mov.l", DISP32SRC, FROM_DISP32, DISP32LIST),
- MOVFROM_AD (O (O_MOV, SL), PREFIX_0108, "mov.l", INDEXB16, FROM_DISP16B, DISP16LIST),
- MOVFROM_AD (O (O_MOV, SL), PREFIX_0108, "mov.l", INDEXW16, FROM_DISP16W, DISP16LIST),
- MOVFROM_AD (O (O_MOV, SL), PREFIX_0108, "mov.l", INDEXL16, FROM_DISP16L, DISP16LIST),
- MOVFROM_AD (O (O_MOV, SL), PREFIX_0108, "mov.l", INDEXB32, FROM_DISP32B, DISP32LIST),
- MOVFROM_AD (O (O_MOV, SL), PREFIX_0108, "mov.l", INDEXW32, FROM_DISP32W, DISP32LIST),
- MOVFROM_AD (O (O_MOV, SL), PREFIX_0108, "mov.l", INDEXL32, FROM_DISP32L, DISP32LIST),
- MOVFROM_AD (O (O_MOV, SL), PREFIX_0108, "mov.l", ABS16SRC, FROM_ABS16, ABS16LIST),
- MOVFROM_AD (O (O_MOV, SL), PREFIX_0108, "mov.l", ABS32SRC, FROM_ABS32, ABS32LIST),
-
-#define DO_MOVA1(TYPE, OP0, OP1) \
- {O (O_MOVAB, SL), AV_H8SX, 0, "mova/b.l", {{INDEXB16, TYPE, R3_32}}, {{PREFIX_017F, OP0, OP1, 0x8, B30 | R3_32, MEMRELAX | DISP16LIST, E}}}, \
- {O (O_MOVAB, SL), AV_H8SX, 0, "mova/b.l", {{INDEXW16, TYPE, R3_32}}, {{PREFIX_015F, OP0, OP1, 0x9, B30 | R3_32, MEMRELAX | DISP16LIST, E}}}, \
- {O (O_MOVAW, SL), AV_H8SX, 0, "mova/w.l", {{INDEXB16, TYPE, R3_32}}, {{PREFIX_017F, OP0, OP1, 0xA, B30 | R3_32, MEMRELAX | DISP16LIST, E}}}, \
- {O (O_MOVAW, SL), AV_H8SX, 0, "mova/w.l", {{INDEXW16, TYPE, R3_32}}, {{PREFIX_015F, OP0, OP1, 0xB, B30 | R3_32, MEMRELAX | DISP16LIST, E}}}, \
- {O (O_MOVAL, SL), AV_H8SX, 0, "mova/l.l", {{INDEXB16, TYPE, R3_32}}, {{PREFIX_017F, OP0, OP1, 0xC, B30 | R3_32, MEMRELAX | DISP16LIST, E}}}, \
- {O (O_MOVAL, SL), AV_H8SX, 0, "mova/l.l", {{INDEXW16, TYPE, R3_32}}, {{PREFIX_015F, OP0, OP1, 0xD, B30 | R3_32, MEMRELAX | DISP16LIST, E}}}, \
-\
- {O (O_MOVAB, SL), AV_H8SX, 0, "mova/b.l", {{INDEXB32, TYPE, R3_32}}, {{PREFIX_017F, OP0, OP1, 0x8, B31 | R3_32, MEMRELAX | DISP32LIST, E}}}, \
- {O (O_MOVAB, SL), AV_H8SX, 0, "mova/b.l", {{INDEXW32, TYPE, R3_32}}, {{PREFIX_015F, OP0, OP1, 0x9, B31 | R3_32, MEMRELAX | DISP32LIST, E}}}, \
- {O (O_MOVAW, SL), AV_H8SX, 0, "mova/w.l", {{INDEXB32, TYPE, R3_32}}, {{PREFIX_017F, OP0, OP1, 0xA, B31 | R3_32, MEMRELAX | DISP32LIST, E}}}, \
- {O (O_MOVAW, SL), AV_H8SX, 0, "mova/w.l", {{INDEXW32, TYPE, R3_32}}, {{PREFIX_015F, OP0, OP1, 0xB, B31 | R3_32, MEMRELAX | DISP32LIST, E}}}, \
- {O (O_MOVAL, SL), AV_H8SX, 0, "mova/l.l", {{INDEXB32, TYPE, R3_32}}, {{PREFIX_017F, OP0, OP1, 0xC, B31 | R3_32, MEMRELAX | DISP32LIST, E}}}, \
- {O (O_MOVAL, SL), AV_H8SX, 0, "mova/l.l", {{INDEXW32, TYPE, R3_32}}, {{PREFIX_015F, OP0, OP1, 0xD, B31 | R3_32, MEMRELAX | DISP32LIST, E}}}
-
-#define DO_MOVA2(TYPE, OP0, OP1, OP2) \
- {O (O_MOVAB, SL), AV_H8SX, 0, "mova/b.l", {{INDEXB16, TYPE, R3_32}}, {{PREFIX_017F, OP0, OP1, 0x8, B30 | R3_32, OP2, MEMRELAX | DISP16LIST, E}}}, \
- {O (O_MOVAB, SL), AV_H8SX, 0, "mova/b.l", {{INDEXW16, TYPE, R3_32}}, {{PREFIX_015F, OP0, OP1, 0x9, B30 | R3_32, OP2, MEMRELAX | DISP16LIST, E}}}, \
- {O (O_MOVAW, SL), AV_H8SX, 0, "mova/w.l", {{INDEXB16, TYPE, R3_32}}, {{PREFIX_017F, OP0, OP1, 0xA, B30 | R3_32, OP2, MEMRELAX | DISP16LIST, E}}}, \
- {O (O_MOVAW, SL), AV_H8SX, 0, "mova/w.l", {{INDEXW16, TYPE, R3_32}}, {{PREFIX_015F, OP0, OP1, 0xB, B30 | R3_32, OP2, MEMRELAX | DISP16LIST, E}}}, \
- {O (O_MOVAL, SL), AV_H8SX, 0, "mova/l.l", {{INDEXB16, TYPE, R3_32}}, {{PREFIX_017F, OP0, OP1, 0xC, B30 | R3_32, OP2, MEMRELAX | DISP16LIST, E}}}, \
- {O (O_MOVAL, SL), AV_H8SX, 0, "mova/l.l", {{INDEXW16, TYPE, R3_32}}, {{PREFIX_015F, OP0, OP1, 0xD, B30 | R3_32, OP2, MEMRELAX | DISP16LIST, E}}}, \
-\
- {O (O_MOVAB, SL), AV_H8SX, 0, "mova/b.l", {{INDEXB32, TYPE, R3_32}}, {{PREFIX_017F, OP0, OP1, 0x8, B31 | R3_32, OP2, MEMRELAX | DISP32LIST, E}}}, \
- {O (O_MOVAB, SL), AV_H8SX, 0, "mova/b.l", {{INDEXW32, TYPE, R3_32}}, {{PREFIX_015F, OP0, OP1, 0x9, B31 | R3_32, OP2, MEMRELAX | DISP32LIST, E}}}, \
- {O (O_MOVAW, SL), AV_H8SX, 0, "mova/w.l", {{INDEXB32, TYPE, R3_32}}, {{PREFIX_017F, OP0, OP1, 0xA, B31 | R3_32, OP2, MEMRELAX | DISP32LIST, E}}}, \
- {O (O_MOVAW, SL), AV_H8SX, 0, "mova/w.l", {{INDEXW32, TYPE, R3_32}}, {{PREFIX_015F, OP0, OP1, 0xB, B31 | R3_32, OP2, MEMRELAX | DISP32LIST, E}}}, \
- {O (O_MOVAL, SL), AV_H8SX, 0, "mova/l.l", {{INDEXB32, TYPE, R3_32}}, {{PREFIX_017F, OP0, OP1, 0xC, B31 | R3_32, OP2, MEMRELAX | DISP32LIST, E}}}, \
- {O (O_MOVAL, SL), AV_H8SX, 0, "mova/l.l", {{INDEXW32, TYPE, R3_32}}, {{PREFIX_015F, OP0, OP1, 0xD, B31 | R3_32, OP2, MEMRELAX | DISP32LIST, E}}}
-
- {O (O_MOVAB, SL), AV_H8SX, 0, "mova/b.l", {{INDEXB16, E}}, {{0x7, 0xA, 0x8, B31 | DISPREG, MEMRELAX | DISP16LIST, E}}},
- {O (O_MOVAB, SL), AV_H8SX, 0, "mova/b.l", {{INDEXW16, E}}, {{0x7, 0xA, 0x9, B31 | DISPREG, MEMRELAX | DISP16LIST, E}}},
- {O (O_MOVAW, SL), AV_H8SX, 0, "mova/w.l", {{INDEXB16, E}}, {{0x7, 0xA, 0xA, B31 | DISPREG, MEMRELAX | DISP16LIST, E}}},
- {O (O_MOVAW, SL), AV_H8SX, 0, "mova/w.l", {{INDEXW16, E}}, {{0x7, 0xA, 0xB, B31 | DISPREG, MEMRELAX | DISP16LIST, E}}},
- {O (O_MOVAL, SL), AV_H8SX, 0, "mova/l.l", {{INDEXB16, E}}, {{0x7, 0xA, 0xC, B31 | DISPREG, MEMRELAX | DISP16LIST, E}}},
- {O (O_MOVAL, SL), AV_H8SX, 0, "mova/l.l", {{INDEXW16, E}}, {{0x7, 0xA, 0xD, B31 | DISPREG, MEMRELAX | DISP16LIST, E}}},
-
- {O (O_MOVAB, SL), AV_H8SX, 0, "mova/b.l", {{INDEXB32, E}}, {{0x7, 0xA, 0x8, B30 | DISPREG, MEMRELAX | DISP32LIST, E}}},
- {O (O_MOVAB, SL), AV_H8SX, 0, "mova/b.l", {{INDEXW32, E}}, {{0x7, 0xA, 0x9, B30 | DISPREG, MEMRELAX | DISP32LIST, E}}},
- {O (O_MOVAW, SL), AV_H8SX, 0, "mova/w.l", {{INDEXB32, E}}, {{0x7, 0xA, 0xA, B30 | DISPREG, MEMRELAX | DISP32LIST, E}}},
- {O (O_MOVAW, SL), AV_H8SX, 0, "mova/w.l", {{INDEXW32, E}}, {{0x7, 0xA, 0xB, B30 | DISPREG, MEMRELAX | DISP32LIST, E}}},
- {O (O_MOVAL, SL), AV_H8SX, 0, "mova/l.l", {{INDEXB32, E}}, {{0x7, 0xA, 0xC, B30 | DISPREG, MEMRELAX | DISP32LIST, E}}},
- {O (O_MOVAL, SL), AV_H8SX, 0, "mova/l.l", {{INDEXW32, E}}, {{0x7, 0xA, 0xD, B30 | DISPREG, MEMRELAX | DISP32LIST, E}}},
-
- {O (O_MOVAB, SL), AV_H8SX, 0, "mova/b.l", {{INDEXB16, RD8, R3_32}}, {{0x7, 0x8, RD8, 0x8, 0x7, 0xA, 0x8, B31 | R3_32, MEMRELAX | DISP16LIST, E}}},
- {O (O_MOVAB, SL), AV_H8SX, 0, "mova/b.l", {{INDEXW16, RD16, R3_32}}, {{0x7, 0x8, RD16, 0x9, 0x7, 0xA, 0x9, B31 | R3_32, MEMRELAX | DISP16LIST, E}}},
- {O (O_MOVAW, SL), AV_H8SX, 0, "mova/w.l", {{INDEXB16, RD8, R3_32}}, {{0x7, 0x8, RD8, 0x8, 0x7, 0xA, 0xA, B31 | R3_32, MEMRELAX | DISP16LIST, E}}},
- {O (O_MOVAW, SL), AV_H8SX, 0, "mova/w.l", {{INDEXW16, RD16, R3_32}}, {{0x7, 0x8, RD16, 0x9, 0x7, 0xA, 0xB, B31 | R3_32, MEMRELAX | DISP16LIST, E}}},
- {O (O_MOVAL, SL), AV_H8SX, 0, "mova/l.l", {{INDEXB16, RD8, R3_32}}, {{0x7, 0x8, RD8, 0x8, 0x7, 0xA, 0xC, B31 | R3_32, MEMRELAX | DISP16LIST, E}}},
- {O (O_MOVAL, SL), AV_H8SX, 0, "mova/l.l", {{INDEXW16, RD16, R3_32}}, {{0x7, 0x8, RD16, 0x9, 0x7, 0xA, 0xD, B31 | R3_32, MEMRELAX | DISP16LIST, E}}},
-
- {O (O_MOVAB, SL), AV_H8SX, 0, "mova/b.l", {{INDEXB32, RD8, R3_32}}, {{0x7, 0x8, RD8, 0x8, 0x7, 0xA, 0x8, B30 | R3_32, MEMRELAX | DISP32LIST, E}}},
- {O (O_MOVAB, SL), AV_H8SX, 0, "mova/b.l", {{INDEXW32, RD16, R3_32}}, {{0x7, 0x8, RD16, 0x9, 0x7, 0xA, 0x9, B30 | R3_32, MEMRELAX | DISP32LIST, E}}},
- {O (O_MOVAW, SL), AV_H8SX, 0, "mova/w.l", {{INDEXB32, RD8, R3_32}}, {{0x7, 0x8, RD8, 0x8, 0x7, 0xA, 0xA, B30 | R3_32, MEMRELAX | DISP32LIST, E}}},
- {O (O_MOVAW, SL), AV_H8SX, 0, "mova/w.l", {{INDEXW32, RD16, R3_32}}, {{0x7, 0x8, RD16, 0x9, 0x7, 0xA, 0xB, B30 | R3_32, MEMRELAX | DISP32LIST, E}}},
- {O (O_MOVAL, SL), AV_H8SX, 0, "mova/l.l", {{INDEXB32, RD8, R3_32}}, {{0x7, 0x8, RD8, 0x8, 0x7, 0xA, 0xC, B30 | R3_32, MEMRELAX | DISP32LIST, E}}},
- {O (O_MOVAL, SL), AV_H8SX, 0, "mova/l.l", {{INDEXW32, RD16, R3_32}}, {{0x7, 0x8, RD16, 0x9, 0x7, 0xA, 0xD, B30 | R3_32, MEMRELAX | DISP32LIST, E}}},
-
- DO_MOVA1 (RDIND, 0x0, B30 | RDIND),
- DO_MOVA1 (RDPOSTINC, 0x8, B30 | RDPOSTINC),
- DO_MOVA1 (RDPOSTDEC, 0xA, B30 | RDPOSTDEC),
- DO_MOVA1 (RDPREINC, 0x9, B30 | RDPREINC),
- DO_MOVA1 (RDPREDEC, 0xB, B30 | RDPREDEC),
- DO_MOVA1 (DISP2DST, B30 | B20 | DISP2DST, B30 | DSTDISPREG),
- DO_MOVA2 (DISP16DST, 0xC, B30 | DSTDISPREG, MEMRELAX | DSTDISP16LIST),
- DO_MOVA2 (DISP32DST, 0xC, B31 | DSTDISPREG, MEMRELAX | DSTDISP32LIST),
- DO_MOVA2 (INDEXB16D, 0xD, B30 | DSTDISPREG, MEMRELAX | DSTDISP16LIST),
- DO_MOVA2 (INDEXW16D, 0xE, B30 | DSTDISPREG, MEMRELAX | DSTDISP16LIST),
- DO_MOVA2 (INDEXL16D, 0xF, B30 | DSTDISPREG, MEMRELAX | DSTDISP16LIST),
- DO_MOVA2 (INDEXB32D, 0xD, B31 | DSTDISPREG, MEMRELAX | DSTDISP32LIST),
- DO_MOVA2 (INDEXW32D, 0xE, B31 | DSTDISPREG, MEMRELAX | DSTDISP32LIST),
- DO_MOVA2 (INDEXL32D, 0xF, B31 | DSTDISPREG, MEMRELAX | DSTDISP32LIST),
- DO_MOVA2 (ABS16DST, 0x4, 0x0, MEMRELAX | DSTABS16LIST),
- DO_MOVA2 (ABS32DST, 0x4, 0x8, MEMRELAX | DSTABS32LIST),
-
- {O (O_MOV, SB), AV_H8, 10, "movfpe", {{ABS16SRC, RD8, E}}, {{0x6, 0xA, 0x4, RD8, ABS16SRC, DATA3, E}}},
- {O (O_MOV, SB), AV_H8, 10, "movtpe", {{RS8, ABS16DST, E}}, {{0x6, 0xA, 0xC, RS8, ABS16DST, DATA3, E}}},
-
- {O (O_MOVMD, SB), AV_H8SX, 0, "movmd.b", {{E}}, {{0x7, 0xb, 0x9, 0x4, E}}},
- {O (O_MOVMD, SW), AV_H8SX, 0, "movmd.w", {{E}}, {{0x7, 0xb, 0xa, 0x4, E}}},
- {O (O_MOVMD, SL), AV_H8SX, 0, "movmd.l", {{E}}, {{0x7, 0xb, 0xb, 0x4, E}}},
- {O (O_MOVSD, SB), AV_H8SX, 0, "movsd.b", {{PCREL16, E}}, {{0x7, 0xb, 0x8, 0x4, PCREL16, DATA3, E}}},
-
- {O (O_MULS, SW), AV_H8SX, 0, "muls.w", {{IMM4, RD16, E}}, {{0x0, 0x1, 0xc, 0x6, 0x5, 0x0, IMM4, RD16, E}}},
- {O (O_MULS, SW), AV_H8SX, 0, "muls.w", {{RS16, RD16, E}}, {{0x0, 0x1, 0xc, 0x2, 0x5, 0x0, RS16, RD16, E}}},
- {O (O_MULS, SL), AV_H8SX, 0, "muls.l", {{IMM4, RD32, E}}, {{0x0, 0x1, 0xc, 0x6, 0x5, 0x2, IMM4, B30 | RD32, E}}},
- {O (O_MULS, SL), AV_H8SX, 0, "muls.l", {{RS32, RD32, E}}, {{0x0, 0x1, 0xc, 0x2, 0x5, 0x2, B30 | RS32, B30 | RD32, E}}},
-
- {O (O_MULU, SW), AV_H8SX, 0, "mulu.w", {{IMM4, RD16, E}}, {{0x0, 0x1, 0xc, 0xe, 0x5, 0x0, IMM4, RD16, E}}},
- {O (O_MULU, SW), AV_H8SX, 0, "mulu.w", {{RS16, RD16, E}}, {{0x0, 0x1, 0xc, 0xa, 0x5, 0x0, RS16, RD16, E}}},
- {O (O_MULU, SL), AV_H8SX, 0, "mulu.l", {{IMM4, RD32, E}}, {{0x0, 0x1, 0xc, 0xe, 0x5, 0x2, IMM4, B30 | RD32, E}}},
- {O (O_MULU, SL), AV_H8SX, 0, "mulu.l", {{RS32, RD32, E}}, {{0x0, 0x1, 0xc, 0xa, 0x5, 0x2, B30 | RS32, B30 | RD32, E}}},
-
- {O (O_MULSU, SL), AV_H8SX, 0, "muls/u.l", {{IMM4, RD32, E}}, {{0x0, 0x1, 0xc, 0x7, 0x5, 0x2, IMM4, B30 | RD32, E}}},
- {O (O_MULSU, SL), AV_H8SX, 0, "muls/u.l", {{RS32, RD32, E}}, {{0x0, 0x1, 0xc, 0x3, 0x5, 0x2, B30 | RS32, B30 | RD32, E}}},
- {O (O_MULUU, SL), AV_H8SX, 0, "mulu/u.l", {{IMM4, RD32, E}}, {{0x0, 0x1, 0xc, 0xf, 0x5, 0x2, IMM4, B30 | RD32, E}}},
- {O (O_MULUU, SL), AV_H8SX, 0, "mulu/u.l", {{RS32, RD32, E}}, {{0x0, 0x1, 0xc, 0xb, 0x5, 0x2, B30 | RS32, B30 | RD32, E}}},
-
- {O (O_MULXS, SB), AV_H8SX, 0, "mulxs.b", {{IMM4, RD16, E}}, {{0x0, 0x1, 0xc, 0x4, 0x5, 0x0, IMM4, RD16, E}}},
- {O (O_MULXS, SB), AV_H8H, 20, "mulxs.b", {{RS8, RD16, E}}, {{0x0, 0x1, 0xc, 0x0, 0x5, 0x0, RS8, RD16, E}}},
- {O (O_MULXS, SW), AV_H8SX, 0, "mulxs.w", {{IMM4, RD32, E}}, {{0x0, 0x1, 0xc, 0x4, 0x5, 0x2, IMM4, B30 | RD32, E}}},
- {O (O_MULXS, SW), AV_H8H, 20, "mulxs.w", {{RS16, RD32, E}}, {{0x0, 0x1, 0xc, 0x0, 0x5, 0x2, RS16, B30 | RD32, E}}},
-
- {O (O_MULXU, SB), AV_H8SX, 0, "mulxu.b", {{IMM4, RD16, E}}, {{0x0, 0x1, 0xc, 0xc, 0x5, 0x0, IMM4, RD16, E}}},
- {O (O_MULXU, SB), AV_H8, 14, "mulxu.b", {{RS8, RD16, E}}, {{0x5, 0x0, RS8, RD16, E}}},
- {O (O_MULXU, SW), AV_H8SX, 0, "mulxu.w", {{IMM4, RD32, E}}, {{0x0, 0x1, 0xc, 0xc, 0x5, 0x2, IMM4, B30 | RD32, E}}},
- {O (O_MULXU, SW), AV_H8H, 14, "mulxu.w", {{RS16, RD32, E}}, {{0x5, 0x2, RS16, B30 | RD32, E}}},
-
- EXPAND_UNOP_STD_B (O (O_NEG, SB), "neg.b", PREFIX_017, 0x1, 0x7, 0x8),
- EXPAND_UNOP_STD_W (O (O_NEG, SW), "neg.w", PREFIX_015, 0x1, 0x7, 0x9),
- EXPAND_UNOP_STD_L (O (O_NEG, SL), "neg.l", PREFIX_010, 0x1, 0x7, 0xb),
-
- {O (O_NOP, SN), AV_H8, 2, "nop", {{E}}, {{0x0, 0x0, 0x0, 0x0, E}}},
-
- EXPAND_UNOP_STD_B (O (O_NOT, SB), "not.b", PREFIX_017, 0x1, 0x7, 0x0),
- EXPAND_UNOP_STD_W (O (O_NOT, SW), "not.w", PREFIX_015, 0x1, 0x7, 0x1),
- EXPAND_UNOP_STD_L (O (O_NOT, SL), "not.l", PREFIX_010, 0x1, 0x7, 0x3),
-
- {O (O_OR, SB), AV_H8, 2, "or.b", {{IMM8, RD8, E}}, {{0xc, RD8, IMM8LIST, E}}},
- EXPAND_TWOOP_B (O (O_OR, SB), "or.b", 0xc, 0x1, 0x4, 0x4, 0),
-
- {O (O_OR, SW), AV_H8, 2, "or.w", {{RS16, RD16, E}}, {{0x6, 0x4, RS16, RD16, E}}},
- EXPAND_TWOOP_W (O (O_OR, SW), "or.w", 0x6, 0x4, 0x4),
-
- {O (O_OR, SL), AV_H8H, 2, "or.l", {{RS32, RD32, E}}, {{0x0, 0x1, 0xF, 0x0, 0x6, 0x4, B30 | RS32, B30 | RD32, E}}},
- EXPAND_TWOOP_L (O (O_OR, SL), "or.l", 0x4),
-
- {O (O_ORC, SB), AV_H8, 2, "orc", {{IMM8, CCR | DST, E}}, {{0x0, 0x4, IMM8LIST, E}}},
- {O (O_ORC, SB), AV_H8S, 2, "orc", {{IMM8, EXR | DST, E}}, {{0x0, 0x1, 0x4, EXR | DST, 0x0, 0x4, IMM8LIST, E}}},
-
- {O (O_MOV, SW), AV_H8, 6, "pop.w", {{OR16, E}}, {{0x6, 0xD, 0x7, OR16, E}}},
- {O (O_MOV, SL), AV_H8H, 6, "pop.l", {{OR32, E}}, {{PREFIX_0100, 0x6, 0xD, 0x7, OR32 | B30, E}}},
- {O (O_MOV, SW), AV_H8, 6, "push.w", {{OR16, E}}, {{0x6, 0xD, 0xF, OR16, E}}},
- {O (O_MOV, SL), AV_H8H, 6, "push.l", {{OR32, E}}, {{PREFIX_0100, 0x6, 0xD, 0xF, OR32 | B30, E}}},
-
- EXPAND_UNOP_STD_B (O (O_ROTL, SB), "rotl.b", PREFIX_017, 0x1, 0x2, 0x8),
- EXPAND_UNOP_EXTENDED_B (O (O_ROTL, SB), "rotl.b", CONST_2, PREFIX_017, 0x1, 0x2, 0xc),
- EXPAND_UNOP_STD_W (O (O_ROTL, SW), "rotl.w", PREFIX_015, 0x1, 0x2, 0x9),
- EXPAND_UNOP_EXTENDED_W (O (O_ROTL, SW), "rotl.w", CONST_2, PREFIX_015, 0x1, 0x2, 0xd),
- EXPAND_UNOP_STD_L (O (O_ROTL, SL), "rotl.l", PREFIX_010, 0x1, 0x2, 0xb),
- EXPAND_UNOP_EXTENDED_L (O (O_ROTL, SL), "rotl.l", CONST_2, PREFIX_010, 0x1, 0x2, 0xf, B30),
- EXPAND_UNOP_STD_B (O (O_ROTR, SB), "rotr.b", PREFIX_017, 0x1, 0x3, 0x8),
- EXPAND_UNOP_EXTENDED_B (O (O_ROTR, SB), "rotr.b", CONST_2, PREFIX_017, 0x1, 0x3, 0xc),
- EXPAND_UNOP_STD_W (O (O_ROTR, SW), "rotr.w", PREFIX_015, 0x1, 0x3, 0x9),
- EXPAND_UNOP_EXTENDED_W (O (O_ROTR, SW), "rotr.w", CONST_2, PREFIX_015, 0x1, 0x3, 0xd),
- EXPAND_UNOP_STD_L (O (O_ROTR, SL), "rotr.l", PREFIX_010, 0x1, 0x3, 0xb),
- EXPAND_UNOP_EXTENDED_L (O (O_ROTR, SL), "rotr.l", CONST_2, PREFIX_010, 0x1, 0x3, 0xf, B30),
- EXPAND_UNOP_STD_B (O (O_ROTXL, SB), "rotxl.b", PREFIX_017, 0x1, 0x2, 0x0),
- EXPAND_UNOP_EXTENDED_B (O (O_ROTXL, SB), "rotxl.b", CONST_2, PREFIX_017, 0x1, 0x2, 0x4),
- EXPAND_UNOP_STD_W (O (O_ROTXL, SW), "rotxl.w", PREFIX_015, 0x1, 0x2, 0x1),
- EXPAND_UNOP_EXTENDED_W (O (O_ROTXL, SW), "rotxl.w", CONST_2, PREFIX_015, 0x1, 0x2, 0x5),
- EXPAND_UNOP_STD_L (O (O_ROTXL, SL), "rotxl.l", PREFIX_010, 0x1, 0x2, 0x3),
- EXPAND_UNOP_EXTENDED_L (O (O_ROTXL, SL), "rotxl.l", CONST_2, PREFIX_010, 0x1, 0x2, 0x7, B30),
- EXPAND_UNOP_STD_B (O (O_ROTXR, SB), "rotxr.b", PREFIX_017, 0x1, 0x3, 0x0),
- EXPAND_UNOP_EXTENDED_B (O (O_ROTXR, SB), "rotxr.b", CONST_2, PREFIX_017, 0x1, 0x3, 0x4),
- EXPAND_UNOP_STD_W (O (O_ROTXR, SW), "rotxr.w", PREFIX_015, 0x1, 0x3, 0x1),
- EXPAND_UNOP_EXTENDED_W (O (O_ROTXR, SW), "rotxr.w", CONST_2, PREFIX_015, 0x1, 0x3, 0x5),
- EXPAND_UNOP_STD_L (O (O_ROTXR, SL), "rotxr.l", PREFIX_010, 0x1, 0x3, 0x3),
- EXPAND_UNOP_EXTENDED_L (O (O_ROTXR, SL), "rotxr.l", CONST_2, PREFIX_010, 0x1, 0x3, 0x7, B30),
-
-
- {O (O_BPT, SN), AV_H8, 10, "bpt", {{E}}, {{0x7, 0xA, 0xF, 0xF, E}}},
- {O (O_RTE, SN), AV_H8, 10, "rte", {{E}}, {{0x5, 0x6, 0x7, 0x0, E}}},
- {O (O_RTS, SN), AV_H8, 8, "rts", {{E}}, {{0x5, 0x4, 0x7, 0x0, E}}},
- {O (O_RTEL, SN), AV_H8SX, 0, "rte/l", {{RS32, RD32, E}}, {{0x5, 0x6, RS32 | B30, RD32 | B30, E}}},
- {O (O_RTSL, SN), AV_H8SX, 0, "rts/l", {{RS32, RD32, E}}, {{0x5, 0x4, RS32 | B30, RD32 | B30, E}}},
-
- EXPAND_UNOP_STD_B (O (O_SHAL, SB), "shal.b", PREFIX_017, 0x1, 0x0, 0x8),
- EXPAND_UNOP_EXTENDED_B (O (O_SHAL, SB), "shal.b", CONST_2, PREFIX_017, 0x1, 0x0, 0xc),
- EXPAND_UNOP_STD_W (O (O_SHAL, SW), "shal.w", PREFIX_015, 0x1, 0x0, 0x9),
- EXPAND_UNOP_EXTENDED_W (O (O_SHAL, SW), "shal.w", CONST_2, PREFIX_015, 0x1, 0x0, 0xd),
- EXPAND_UNOP_STD_L (O (O_SHAL, SL), "shal.l", PREFIX_010, 0x1, 0x0, 0xb),
- EXPAND_UNOP_EXTENDED_L (O (O_SHAL, SL), "shal.l", CONST_2, PREFIX_010, 0x1, 0x0, 0xf, B30),
- EXPAND_UNOP_STD_B (O (O_SHAR, SB), "shar.b", PREFIX_017, 0x1, 0x1, 0x8),
- EXPAND_UNOP_EXTENDED_B (O (O_SHAR, SB), "shar.b", CONST_2, PREFIX_017, 0x1, 0x1, 0xc),
- EXPAND_UNOP_STD_W (O (O_SHAR, SW), "shar.w", PREFIX_015, 0x1, 0x1, 0x9),
- EXPAND_UNOP_EXTENDED_W (O (O_SHAR, SW), "shar.w", CONST_2, PREFIX_015, 0x1, 0x1, 0xd),
- EXPAND_UNOP_STD_L (O (O_SHAR, SL), "shar.l", PREFIX_010, 0x1, 0x1, 0xb),
- EXPAND_UNOP_EXTENDED_L (O (O_SHAR, SL), "shar.l", CONST_2, PREFIX_010, 0x1, 0x1, 0xf, B30),
-
- EXPAND_UNOP_STD_B (O (O_SHLL, SB), "shll.b", PREFIX_017, 0x1, 0x0, 0x0),
-
- {O (O_SHLL, SB), AV_H8SX, 0, "shll.b", {{RS8, RD8, E}}, {{0x7, 0x8, RS8, 0x8, 0x1, 0x0, 0x0, RD8, E}}},
-
- EXPAND_UNOP_EXTENDED_B (O (O_SHLL, SB), "shll.b", CONST_2, PREFIX_017, 0x1, 0x0, 0x4),
- EXPAND_UNOP_EXTENDED_B (O (O_SHLL, SB), "shll.b", CONST_4, PREFIX_017, 0x1, 0x0, 0xa),
- {O (O_SHLL, SB), AV_H8SX, 0, "shll.b", {{IMM5, RD8, E}}, {{0x0, 0x3, B31 | IMM5, DATA, 0x1, 0x0, 0x0, RD8, E}}},
-
- EXPAND_UNOP_STD_W (O (O_SHLL, SW), "shll.w", PREFIX_015, 0x1, 0x0, 0x1),
-
- {O (O_SHLL, SW), AV_H8SX, 0, "shll.w", {{RS8, RD16, E}}, {{0x7, 0x8, RS8, 0x8, 0x1, 0x0, 0x1, RD16, E}}},
-
- EXPAND_UNOP_EXTENDED_W (O (O_SHLL, SW), "shll.w", CONST_2, PREFIX_015, 0x1, 0x0, 0x5),
- EXPAND_UNOP_EXTENDED_W (O (O_SHLL, SW), "shll.w", CONST_4, PREFIX_015, 0x1, 0x0, 0x2),
- EXPAND_UNOP_EXTENDED_W (O (O_SHLL, SW), "shll.w", CONST_8, PREFIX_015, 0x1, 0x0, 0x6),
- {O (O_SHLL, SW), AV_H8SX, 0, "shll.w", {{IMM5, RD16, E}}, {{0x0, 0x3, B31 | IMM5, DATA, 0x1, 0x0, 0x1, RD16, E}}},
-
- EXPAND_UNOP_STD_L (O (O_SHLL, SL), "shll.l", PREFIX_010, 0x1, 0x0, 0x3),
-
- {O (O_SHLL, SL), AV_H8SX, 0, "shll.l", {{RS8, RD32, E}}, {{0x7, 0x8, RS8, 0x8, 0x1, 0x0, 0x3, B30 | RD32, E}}},
-
- EXPAND_UNOP_EXTENDED_L (O (O_SHLL, SL), "shll.l", CONST_2, PREFIX_010, 0x1, 0x0, 0x7, B30),
- EXPAND_UNOP_EXTENDED_L (O (O_SHLL, SL), "shll.l", CONST_4, PREFIX_010, 0x1, 0x0, 0x3, B31),
- EXPAND_UNOP_EXTENDED_L (O (O_SHLL, SL), "shll.l", CONST_8, PREFIX_010, 0x1, 0x0, 0x7, B31),
- EXPAND_UNOP_EXTENDED_L (O (O_SHLL, SL), "shll.l", CONST_16, PREFIX_010, 0x1, 0x0, 0xf, B31),
- {O (O_SHLL, SL), AV_H8SX, 0, "shll.l", {{IMM5, RD32, E}}, {{0x0, 0x3, B31 | IMM5, DATA, 0x1, 0x0, 0x3, B30 | RD32, E}}},
-
- EXPAND_UNOP_STD_B (O (O_SHLR, SB), "shlr.b", PREFIX_017, 0x1, 0x1, 0x0),
-
- {O (O_SHLR, SB), AV_H8SX, 0, "shlr.b", {{RS8, RD8, E}}, {{0x7, 0x8, RS8, 0x8, 0x1, 0x1, 0x0, RD8, E}}},
-
- EXPAND_UNOP_EXTENDED_B (O (O_SHLR, SB), "shlr.b", CONST_2, PREFIX_017, 0x1, 0x1, 0x4),
- EXPAND_UNOP_EXTENDED_B (O (O_SHLR, SB), "shlr.b", CONST_4, PREFIX_017, 0x1, 0x1, 0xa),
- {O (O_SHLR, SB), AV_H8SX, 0, "shlr.b", {{IMM5, RD8, E}}, {{0x0, 0x3, B31 | IMM5, DATA, 0x1, 0x1, 0x0, RD8, E}}},
-
- EXPAND_UNOP_STD_W (O (O_SHLR, SW), "shlr.w", PREFIX_015, 0x1, 0x1, 0x1),
-
- {O (O_SHLR, SW), AV_H8SX, 0, "shlr.w", {{RS8, RD16, E}}, {{0x7, 0x8, RS8, 0x8, 0x1, 0x1, 0x1, RD16, E}}},
-
- EXPAND_UNOP_EXTENDED_W (O (O_SHLR, SW), "shlr.w", CONST_2, PREFIX_015, 0x1, 0x1, 0x5),
- EXPAND_UNOP_EXTENDED_W (O (O_SHLR, SW), "shlr.w", CONST_4, PREFIX_015, 0x1, 0x1, 0x2),
- EXPAND_UNOP_EXTENDED_W (O (O_SHLR, SW), "shlr.w", CONST_8, PREFIX_015, 0x1, 0x1, 0x6),
- {O (O_SHLR, SW), AV_H8SX, 0, "shlr.w", {{IMM5, RD16, E}}, {{0x0, 0x3, B31 | IMM5, DATA, 0x1, 0x1, 0x1, RD16, E}}},
-
- EXPAND_UNOP_STD_L (O (O_SHLR, SL), "shlr.l", PREFIX_010, 0x1, 0x1, 0x3),
-
- {O (O_SHLR, SL), AV_H8SX, 0, "shlr.l", {{RS8, RD32, E}}, {{0x7, 0x8, RS8, 0x8, 0x1, 0x1, 0x3, B30 | RD32, E}}},
-
- EXPAND_UNOP_EXTENDED_L (O (O_SHLR, SL), "shlr.l", CONST_2, PREFIX_010, 0x1, 0x1, 0x7, B30),
- EXPAND_UNOP_EXTENDED_L (O (O_SHLR, SL), "shlr.l", CONST_4, PREFIX_010, 0x1, 0x1, 0x3, B31),
- EXPAND_UNOP_EXTENDED_L (O (O_SHLR, SL), "shlr.l", CONST_8, PREFIX_010, 0x1, 0x1, 0x7, B31),
- EXPAND_UNOP_EXTENDED_L (O (O_SHLR, SL), "shlr.l", CONST_16, PREFIX_010, 0x1, 0x1, 0xf, B31),
- {O (O_SHLR, SL), AV_H8SX, 0, "shlr.l", {{IMM5, RD32, E}}, {{0x0, 0x3, B31 | IMM5, DATA, 0x1, 0x1, 0x3, B30 | RD32, E}}},
-
- {O (O_SLEEP, SN), AV_H8, 2, "sleep", {{E}}, {{0x0, 0x1, 0x8, 0x0, E}}},
-
- {O (O_STC, SB), AV_H8, 2, "stc", {{CCR | SRC, RD8, E}}, {{0x0, 0x2, B30 | CCR | SRC, RD8, E}}},
- {O (O_STC, SB), AV_H8S, 2, "stc", {{EXR | SRC, RD8, E}}, {{0x0, 0x2, B30 | EXR | SRC, RD8, E}}},
- {O (O_STC, SW), AV_H8H, 2, "stc", {{CCR | SRC, RDIND, E}}, {{PREFIXSTC, 0x6, 0x9, B31 | RDIND, IGNORE, E}}},
- {O (O_STC, SW), AV_H8S, 2, "stc", {{EXR | SRC, RDIND, E}}, {{PREFIXSTC, 0x6, 0x9, B31 | RDIND, IGNORE, E}}},
- {O (O_STC, SW), AV_H8H, 2, "stc", {{CCR | SRC, RDPREDEC, E}}, {{PREFIXSTC, 0x6, 0xD, B31 | RDPREDEC, IGNORE, E}}},
- {O (O_STC, SW), AV_H8S, 2, "stc", {{EXR | SRC, RDPREDEC, E}}, {{PREFIXSTC, 0x6, 0xD, B31 | RDPREDEC, IGNORE, E}}},
- {O (O_STC, SW), AV_H8H, 2, "stc", {{CCR | SRC, DISP16DST, E}}, {{PREFIXSTC, 0x6, 0xF, B31 | DSTDISPREG, IGNORE, DSTDISP16LIST, E}}},
- {O (O_STC, SW), AV_H8S, 2, "stc", {{EXR | SRC, DISP16DST, E}}, {{PREFIXSTC, 0x6, 0xF, B31 | DSTDISPREG, IGNORE, DSTDISP16LIST, E}}},
- {O (O_STC, SW), AV_H8H, 2, "stc", {{CCR | SRC, DISP32DST, E}}, {{PREFIXSTC, 0x7, 0x8, B30 | DSTDISPREG, 0, 0x6, 0xB, 0xA, IGNORE, DSTDISP32LIST, E}}},
- {O (O_STC, SW), AV_H8S, 2, "stc", {{EXR | SRC, DISP32DST, E}}, {{PREFIXSTC, 0x7, 0x8, B30 | DSTDISPREG, 0, 0x6, 0xB, 0xA, IGNORE, DSTDISP32LIST, E}}},
- {O (O_STC, SW), AV_H8H, 2, "stc", {{CCR | SRC, ABS16DST, E}}, {{PREFIXSTC, 0x6, 0xB, 0x8, IGNORE, DST | ABS16LIST, E}}},
- {O (O_STC, SW), AV_H8S, 2, "stc", {{EXR | SRC, ABS16DST, E}}, {{PREFIXSTC, 0x6, 0xB, 0x8, IGNORE, DST | ABS16LIST, E}}},
- {O (O_STC, SW), AV_H8H, 2, "stc", {{CCR | SRC, ABS32DST, E}}, {{PREFIXSTC, 0x6, 0xB, 0xA, IGNORE, DST | MEMRELAX | ABS32LIST, E}}},
- {O (O_STC, SW), AV_H8S, 2, "stc", {{EXR | SRC, ABS32DST, E}}, {{PREFIXSTC, 0x6, 0xB, 0xA, IGNORE, DST | MEMRELAX | ABS32LIST, E}}},
- {O (O_STC, SL), AV_H8SX, 0, "stc", {{B30 | VBR_SBR | SRC, RD32, E}}, {{0x0, 0x2, B30 | VBR_SBR | SRC, RD32, E}}},
-
-
- EXPAND_TWOOP_B (O (O_SUB, SB), "sub.b", 0xa, 0x1, 0x8, 0x3, B01),
-
- {O (O_SUB, SW), AV_H8, 2, "sub.w", {{RS16, RD16, E}}, {{0x1, 0x9, RS16, RD16, E}}},
- {O (O_SUB, SW), AV_H8SX, 0, "sub.w", {{IMM3NZ_NS, RD16, E}}, {{0x1, 0xa, B30 | IMM3NZ, RD16, E}}},
- {O (O_SUB, SW), AV_H8SX, 0, "sub.w", {{IMM3NZ_NS, RDIND, E}}, {{0x7, 0xd, B31 | RDIND, IGNORE, 0x1, 0xa, B30 | IMM3NZ, IGNORE, E}}},
- {O (O_SUB, SW), AV_H8SX, 0, "sub.w", {{IMM3NZ_NS, ABS16DST, E}}, {{0x6, 0xb, 0x1, B31 | IGNORE, DSTABS16LIST, 0x1, 0xa, B30 | IMM3NZ, IGNORE, E}}},
- {O (O_SUB, SW), AV_H8SX, 0, "sub.w", {{IMM3NZ_NS, ABS32DST, E}}, {{0x6, 0xb, 0x3, B31 | IGNORE, DSTABS32LIST, 0x1, 0xa, B30 | IMM3NZ, IGNORE, E}}},
- EXPAND_TWOOP_W (O (O_SUB, SW), "sub.w", 0x1, 0x9, 0x3),
-
- {O (O_SUB, SL), AV_H8H, 6, "sub.l", {{RS32, RD32, E}}, {{0x1, 0xa, B31 | RS32, B30 | RD32, E}}},
- {O (O_SUB, SL), AV_H8SX, 0, "sub.l", {{IMM3NZ_NS, RD32, E}}, {{0x1, 0xa, B31 | IMM3NZ, B31 | RD32, E}}},
- EXPAND_TWOOP_L (O (O_SUB, SL), "sub.l", 0x3),
-
- {O (O_SUBS, SL), AV_H8, 2, "subs", {{KBIT, RDP, E}}, {{0x1, 0xB,KBIT, RDP, E}}},
-
- {O (O_SUBX, SB), AV_H8, 2, "subx", {{IMM8, RD8, E}}, {{0xb, RD8, IMM8LIST, E}}},
- {O (O_SUBX, SB), AV_H8SX, 0, "subx.b", {{IMM8, RDIND, E}}, {{0x7, 0xd, B30 | RDIND, IGNORE, 0xb, IGNORE, IMM8LIST, E}}},
- {O (O_SUBX, SB), AV_H8SX, 0, "subx.b", {{IMM8, RDPOSTDEC, E}}, {{PREFIX_0176, 0x6, 0xc, B30 | RDPOSTDEC, B31 | IGNORE, 0xb, IGNORE, IMM8LIST, E}}},
- {O (O_SUBX, SB), AV_H8, 2, "subx", {{RS8, RD8, E}}, {{0x1, 0xe, RS8, RD8, E}}},
- {O (O_SUBX, SB), AV_H8SX, 0, "subx.b", {{RS8, RDIND, E}}, {{0x7, 0xd, B30 | RDIND, IGNORE, 0x1, 0xe, RS8, IGNORE, E}}},
- {O (O_SUBX, SB), AV_H8SX, 0, "subx.b", {{RS8, RDPOSTDEC, E}}, {{PREFIX_0176, 0x6, 0xc, B30 | RDPOSTDEC, B31 | IGNORE, 0x1, 0xe, RS8, IGNORE, E}}},
- {O (O_SUBX, SB), AV_H8SX, 0, "subx.b", {{RSIND, RD8, E}}, {{0x7, 0xc, B30 | RSIND, IGNORE, 0x1, 0xe, IGNORE, RD8, E}}},
- {O (O_SUBX, SB), AV_H8SX, 0, "subx.b", {{RSPOSTDEC, RD8, E}}, {{PREFIX_0176, 0x6, 0xc, B30 | RSPOSTDEC, B30 | B20 | IGNORE, 0x1, 0xe, IGNORE, RD8, E}}},
- {O (O_SUBX, SB), AV_H8SX, 0, "subx.b", {{RSIND, RDIND, E}}, {{PREFIX_0174, 0x6, 0x8, B30 | RSIND, 0xd, 0x0, RDIND, 0x3, IGNORE, E}}},
- {O (O_SUBX, SB), AV_H8SX, 0, "subx.b", {{RSPOSTDEC, RDPOSTDEC, E}}, {{PREFIX_0176, 0x6, 0xc, B30 | RSPOSTDEC, 0xd, 0xa, RDPOSTDEC, 0x3, IGNORE, E}}},
-
- {O (O_SUBX, SW), AV_H8SX, 0, "subx.w", {{IMM16, RD16, E}}, {{PREFIX_0151, 0x7, 0x9, 0x3, RD16, IMM16LIST, E}}},
- {O (O_SUBX, SW), AV_H8SX, 0, "subx.w", {{IMM16, RDIND, E}}, {{0x7, 0xd, B31 | RDIND, B01 | IGNORE, 0x7, 0x9, 0x3, IGNORE, IMM16LIST, E}}},
- {O (O_SUBX, SW), AV_H8SX, 0, "subx.w", {{IMM16, RDPOSTDEC, E}}, {{PREFIX_0156, 0x6, 0xd, B30 | RDPOSTDEC, B31 | B20 | B01 | IGNORE, 0x7, 0x9, 0x3, IGNORE, IMM16LIST, E}}},
- {O (O_SUBX, SW), AV_H8SX, 0, "subx.w", {{RS16, RD16, E}}, {{PREFIX_0151, 0x1, 0x9, RS16, RD16, E}}},
- {O (O_SUBX, SW), AV_H8SX, 0, "subx.w", {{RS16, RDIND, E}}, {{0x7, 0xd, B31 | RDIND, B01 | IGNORE, 0x1, 0x9, RS16, IGNORE, E}}},
- {O (O_SUBX, SW), AV_H8SX, 0, "subx.w", {{RS16, RDPOSTDEC, E}}, {{PREFIX_0156, 0x6, 0xd, B30 | RDPOSTDEC, B31 | B20 | B01 | IGNORE, 0x1, 0x9, RS16, IGNORE, E}}},
- {O (O_SUBX, SW), AV_H8SX, 0, "subx.w", {{RSIND, RD16, E}}, {{0x7, 0xc, B31 | RSIND, B01 | IGNORE, 0x1, 0x9, IGNORE, RD16, E}}},
- {O (O_SUBX, SW), AV_H8SX, 0, "subx.w", {{RSPOSTDEC, RD16, E}}, {{PREFIX_0156, 0x6, 0xd, B30 | RSPOSTDEC, B30 | B20 | B01 | IGNORE, 0x1, 0x9, IGNORE, RD16, E}}},
- {O (O_SUBX, SW), AV_H8SX, 0, "subx.w", {{RSIND, RDIND, E}}, {{PREFIX_0154, 0x6, 0x9, B30 | RSIND, 0xd, 0x0, RDIND, 0x3, IGNORE, E}}},
- {O (O_SUBX, SW), AV_H8SX, 0, "subx.w", {{RSPOSTDEC, RDPOSTDEC, E}}, {{PREFIX_0156, 0x6, 0xd, B30 | RSPOSTDEC, 0xd, 0xa, RDPOSTDEC, 0x3, IGNORE, E}}},
-
- {O (O_SUBX, SL), AV_H8SX, 0, "subx.l", {{IMM32, RD32, E}}, {{PREFIX_0101, 0x7, 0xa, 0x3, RD32, IMM32LIST, E}}},
- {O (O_SUBX, SL), AV_H8SX, 0, "subx.l", {{IMM32, RDIND, E}}, {{PREFIX_0104, 0x6, 0x9, B30 | RDIND, B31 | B20 | B01 | IGNORE, 0x7, 0xa, 0x3, IGNORE, IMM32LIST, E}}},
- {O (O_SUBX, SL), AV_H8SX, 0, "subx.l", {{IMM32, RDPOSTDEC, E}}, {{PREFIX_0106, 0x6, 0xd, B30 | RDPOSTDEC, B31 | B20 | B01 | IGNORE, 0x7, 0xa, 0x3, IGNORE, IMM32LIST, E}}},
- {O (O_SUBX, SL), AV_H8SX, 0, "subx.l", {{RS32, RD32, E}}, {{PREFIX_0101, 0x1, 0xa, B31 | RS32, B30 | RD32, E}}},
- {O (O_SUBX, SL), AV_H8SX, 0, "subx.l", {{RS32, RDIND, E}}, {{PREFIX_0104, 0x6, 0x9, B30 | RDIND, B31 | B20 | B01 | IGNORE, 0x1, 0xa, B31 | RS32, B30 | IGNORE, E}}},
- {O (O_SUBX, SL), AV_H8SX, 0, "subx.l", {{RS32, RDPOSTDEC, E}}, {{PREFIX_0106, 0x6, 0xd, B30 | RDPOSTDEC, B31 | B20 | B01 | IGNORE, 0x1, 0xa, B31 | RS32, B30 | IGNORE, E}}},
- {O (O_SUBX, SL), AV_H8SX, 0, "subx.l", {{RSIND, RD32, E}}, {{PREFIX_0104, 0x6, 0x9, B30 | RSIND, B30 | B20 | B01 | IGNORE, 0x1, 0xa, B31 | IGNORE, B30 | RD32, E}}},
- {O (O_SUBX, SL), AV_H8SX, 0, "subx.l", {{RSPOSTDEC, RD32, E}}, {{PREFIX_0106, 0x6, 0xd, B30 | RSPOSTDEC, B30 | B20 | B01 | IGNORE, 0x1, 0xa, B31 | IGNORE, B30 | RD32, E}}},
- {O (O_SUBX, SL), AV_H8SX, 0, "subx.l", {{RSIND, RDIND, E}}, {{PREFIX_0104, 0x6, 0x9, B30 | RSIND, 0xd, 0x0, RDIND, 0x3, IGNORE, E}}},
- {O (O_SUBX, SL), AV_H8SX, 0, "subx.l", {{RSPOSTDEC, RDPOSTDEC, E}}, {{PREFIX_0106, 0x6, 0xd, B30 | RSPOSTDEC, 0xd, 0xa, RDPOSTDEC, 0x3, IGNORE, E}}},
-
- {O (O_TRAPA, SB), AV_H8H, 2, "trapa", {{IMM2, E}}, {{0x5, 0x7, IMM2, IGNORE, E}}},
- {O (O_TAS, SB), AV_H8H, 2, "tas", {{RSIND, E}}, {{0x0, 0x1, 0xe, 0x0, 0x7, 0xb, B30 | RSIND, 0xc, E}}},
-
- {O (O_XOR, SB), AV_H8, 2, "xor.b", {{IMM8, RD8, E}}, {{0xd, RD8, IMM8LIST, E}}},
- EXPAND_TWOOP_B (O (O_XOR, SB), "xor.b", 0xd, 0x1, 0x5, 0x5, 0),
-
- {O (O_XOR, SW), AV_H8, 2, "xor.w", {{RS16, RD16, E}}, {{0x6, 0x5, RS16, RD16, E}}},
- EXPAND_TWOOP_W (O (O_XOR, SW), "xor.w", 0x6, 0x5, 0x5),
-
- {O (O_XOR, SL), AV_H8H, 2, "xor.l", {{RS32, RD32, E}}, {{0x0, 0x1, 0xF, 0x0, 0x6, 0x5, B30 | RS32, B30 | RD32, E}}},
- EXPAND_TWOOP_L (O (O_XOR, SL), "xor.l", 0x5),
-
- {O (O_XORC, SB), AV_H8, 2, "xorc", {{IMM8, CCR | DST, E}}, {{0x0, 0x5, IMM8LIST, E}}},
- {O (O_XORC, SB), AV_H8S, 2, "xorc", {{IMM8, EXR | DST, E}}, {{0x0, 0x1, 0x4, EXR | DST, 0x0, 0x5, IMM8LIST, E}}},
-
- {O (O_CLRMAC, SN), AV_H8S, 2, "clrmac", {{E}}, {{0x0, 0x1, 0xa, 0x0, E}}},
- {O (O_MAC, SW), AV_H8S, 2, "mac", {{RSPOSTINC, RDPOSTINC, E}}, {{0x0, 0x1, 0x6, 0x0, 0x6, 0xd, B30 | RSPOSTINC, B30 | RDPOSTINC, E}}},
- {O (O_LDMAC, SL), AV_H8S, 2, "ldmac", {{RS32, MD32, E}}, {{0x0, 0x3, MD32, RS32, E}}},
- {O (O_STMAC, SL), AV_H8S, 2, "stmac", {{MS32, RD32, E}}, {{0x0, 0x2, MS32, RD32, E}}},
- {O (O_LDM, SL), AV_H8H, 6, "ldm.l", {{RSPOSTINC, RD32, E}}, {{0x0, 0x1, DATA, 0x0, 0x6, 0xD, 0x7, B30 | RD32, E}}},
- {O (O_STM, SL), AV_H8H, 6, "stm.l", {{RS32, RDPREDEC, E}}, {{0x0, 0x1, DATA, 0x0, 0x6, 0xD, 0xF, B30 | RS32, E}}},
- {0, 0, 0, NULL, {{0, 0, 0}}, {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}}
-};
-#else
-extern const struct h8_opcode h8_opcodes[];
-#endif
-
diff --git a/include/opcode/hppa.h b/include/opcode/hppa.h
deleted file mode 100644
index 489ca550d..000000000
--- a/include/opcode/hppa.h
+++ /dev/null
@@ -1,1092 +0,0 @@
-/* Table of opcodes for the PA-RISC.
- Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000,
- 2001, 2002, 2003, 2004, 2005, 2006, 2009, 2010
- Free Software Foundation, Inc.
-
- Contributed by the Center for Software Science at the
- University of Utah (pa-gdb-bugs@cs.utah.edu).
-
- This file is part of GAS, the GNU Assembler, and GDB, the GNU disassembler.
-
- GAS/GDB 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 3, or (at your option)
- any later version.
-
- GAS/GDB is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GAS or GDB; see the file COPYING3. If not, write to
- the Free Software Foundation, 51 Franklin Street - Fifth Floor,
- Boston, MA 02110-1301, USA. */
-
-#if !defined(__STDC__) && !defined(const)
-#define const
-#endif
-
-/*
- * Structure of an opcode table entry.
- */
-
-/* There are two kinds of delay slot nullification: normal which is
- * controled by the nullification bit, and conditional, which depends
- * on the direction of the branch and its success or failure.
- *
- * NONE is unfortunately #defined in the hiux system include files.
- * #undef it away.
- */
-#undef NONE
-struct pa_opcode
-{
- const char *name;
- unsigned long int match; /* Bits that must be set... */
- unsigned long int mask; /* ... in these bits. */
- char *args;
- enum pa_arch arch;
- char flags;
-};
-
-/* Enables strict matching. Opcodes with match errors are skipped
- when this bit is set. */
-#define FLAG_STRICT 0x1
-
-/*
- All hppa opcodes are 32 bits.
-
- The match component is a mask saying which bits must match a
- particular opcode in order for an instruction to be an instance
- of that opcode.
-
- The args component is a string containing one character for each operand of
- the instruction. Characters used as a prefix allow any second character to
- be used without conflicting with the main operand characters.
-
- Bit positions in this description follow HP usage of lsb = 31,
- "at" is lsb of field.
-
- In the args field, the following characters must match exactly:
-
- '+,() '
-
- In the args field, the following characters are unused:
-
- ' " - / 34 6789:; '
- '@ C M [\] '
- '` e g } '
-
- Here are all the characters:
-
- ' !"#$%&'()*+-,./0123456789:;<=>?'
- '@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_'
- '`abcdefghijklmnopqrstuvwxyz{|}~ '
-
-Kinds of operands:
- x integer register field at 15.
- b integer register field at 10.
- t integer register field at 31.
- a integer register field at 10 and 15 (for PERMH)
- 5 5 bit immediate at 15.
- s 2 bit space specifier at 17.
- S 3 bit space specifier at 18.
- V 5 bit immediate value at 31
- i 11 bit immediate value at 31
- j 14 bit immediate value at 31
- k 21 bit immediate value at 31
- l 16 bit immediate value at 31 (wide mode only, unusual encoding).
- n nullification for branch instructions
- N nullification for spop and copr instructions
- w 12 bit branch displacement
- W 17 bit branch displacement (PC relative)
- X 22 bit branch displacement (PC relative)
- z 17 bit branch displacement (just a number, not an address)
-
-Also these:
-
- . 2 bit shift amount at 25
- * 4 bit shift amount at 25
- p 5 bit shift count at 26 (to support the SHD instruction) encoded as
- 31-p
- ~ 6 bit shift count at 20,22:26 encoded as 63-~.
- P 5 bit bit position at 26
- q 6 bit bit position at 20,22:26
- T 5 bit field length at 31 (encoded as 32-T)
- % 6 bit field length at 23,27:31 (variable extract/deposit)
- | 6 bit field length at 19,27:31 (fixed extract/deposit)
- A 13 bit immediate at 18 (to support the BREAK instruction)
- ^ like b, but describes a control register
- ! sar (cr11) register
- D 26 bit immediate at 31 (to support the DIAG instruction)
- $ 9 bit immediate at 28 (to support POPBTS)
-
- v 3 bit Special Function Unit identifier at 25
- O 20 bit Special Function Unit operation split between 15 bits at 20
- and 5 bits at 31
- o 15 bit Special Function Unit operation at 20
- 2 22 bit Special Function Unit operation split between 17 bits at 20
- and 5 bits at 31
- 1 15 bit Special Function Unit operation split between 10 bits at 20
- and 5 bits at 31
- 0 10 bit Special Function Unit operation split between 5 bits at 20
- and 5 bits at 31
- u 3 bit coprocessor unit identifier at 25
- F Source Floating Point Operand Format Completer encoded 2 bits at 20
- I Source Floating Point Operand Format Completer encoded 1 bits at 20
- (for 0xe format FP instructions)
- G Destination Floating Point Operand Format Completer encoded 2 bits at 18
- H Floating Point Operand Format at 26 for 'fmpyadd' and 'fmpysub'
- (very similar to 'F')
-
- r 5 bit immediate value at 31 (for the break instruction)
- (very similar to V above, except the value is unsigned instead of
- low_sign_ext)
- R 5 bit immediate value at 15 (for the ssm, rsm, probei instructions)
- (same as r above, except the value is in a different location)
- U 10 bit immediate value at 15 (for SSM, RSM on pa2.0)
- Q 5 bit immediate value at 10 (a bit position specified in
- the bb instruction. It's the same as r above, except the
- value is in a different location)
- B 5 bit immediate value at 10 (a bit position specified in
- the bb instruction. Similar to Q, but 64 bit handling is
- different.
- Z %r1 -- implicit target of addil instruction.
- L ,%r2 completer for new syntax branch
- { Source format completer for fcnv
- _ Destination format completer for fcnv
- h cbit for fcmp
- = gfx tests for ftest
- d 14 bit offset for single precision FP long load/store.
- # 14 bit offset for double precision FP load long/store.
- J Yet another 14 bit offset for load/store with ma,mb completers.
- K Yet another 14 bit offset for load/store with ma,mb completers.
- y 16 bit offset for word aligned load/store (PA2.0 wide).
- & 16 bit offset for dword aligned load/store (PA2.0 wide).
- < 16 bit offset for load/store with ma,mb completers (PA2.0 wide).
- > 16 bit offset for load/store with ma,mb completers (PA2.0 wide).
- Y %sr0,%r31 -- implicit target of be,l instruction.
- @ implicit immediate value of 0
-
-Completer operands all have 'c' as the prefix:
-
- cx indexed load and store completer.
- cX indexed load and store completer. Like cx, but emits a space
- after in disassembler.
- cm short load and store completer.
- cM short load and store completer. Like cm, but emits a space
- after in disassembler.
- cq long load and store completer (like cm, but inserted into a
- different location in the target instruction).
- cs store bytes short completer.
- cA store bytes short completer. Like cs, but emits a space
- after in disassembler.
- ce long load/store completer for LDW/STW with a different encoding
- than the others
- cc load cache control hint
- cd load and clear cache control hint
- cC store cache control hint
- co ordered access
-
- cp branch link and push completer
- cP branch pop completer
- cl branch link completer
- cg branch gate completer
-
- cw read/write completer for PROBE
- cW wide completer for MFCTL
- cL local processor completer for cache control
- cZ System Control Completer (to support LPA, LHA, etc.)
-
- ci correction completer for DCOR
- ca add completer
- cy 32 bit add carry completer
- cY 64 bit add carry completer
- cv signed overflow trap completer
- ct trap on condition completer for ADDI, SUB
- cT trap on condition completer for UADDCM
- cb 32 bit borrow completer for SUB
- cB 64 bit borrow completer for SUB
-
- ch left/right half completer
- cH signed/unsigned saturation completer
- cS signed/unsigned completer at 21
- cz zero/sign extension completer.
- c* permutation completer
-
-Condition operands all have '?' as the prefix:
-
- ?f Floating point compare conditions (encoded as 5 bits at 31)
-
- ?a add conditions
- ?A 64 bit add conditions
- ?@ add branch conditions followed by nullify
- ?d non-negated add branch conditions
- ?D negated add branch conditions
- ?w wide mode non-negated add branch conditions
- ?W wide mode negated add branch conditions
-
- ?s compare/subtract conditions
- ?S 64 bit compare/subtract conditions
- ?t non-negated compare and branch conditions
- ?n 32 bit compare and branch conditions followed by nullify
- ?N 64 bit compare and branch conditions followed by nullify
- ?Q 64 bit compare and branch conditions for CMPIB instruction
-
- ?l logical conditions
- ?L 64 bit logical conditions
-
- ?b branch on bit conditions
- ?B 64 bit branch on bit conditions
-
- ?x shift/extract/deposit conditions
- ?X 64 bit shift/extract/deposit conditions
- ?y shift/extract/deposit conditions followed by nullify for conditional
- branches
-
- ?u unit conditions
- ?U 64 bit unit conditions
-
-Floating point registers all have 'f' as a prefix:
-
- ft target register at 31
- fT target register with L/R halves at 31
- fa operand 1 register at 10
- fA operand 1 register with L/R halves at 10
- fX Same as fA, except prints a space before register during disasm
- fb operand 2 register at 15
- fB operand 2 register with L/R halves at 15
- fC operand 3 register with L/R halves at 16:18,21:23
- fe Like fT, but encoding is different.
- fE Same as fe, except prints a space before register during disasm.
- fx target register at 15 (only for PA 2.0 long format FLDD/FSTD).
-
-Float registers for fmpyadd and fmpysub:
-
- fi mult operand 1 register at 10
- fj mult operand 2 register at 15
- fk mult target register at 20
- fl add/sub operand register at 25
- fm add/sub target register at 31
-
-*/
-
-
-#if 0
-/* List of characters not to put a space after. Note that
- "," is included, as the "spopN" operations use literal
- commas in their completer sections. */
-static const char *const completer_chars = ",CcY<>?!@+&U~FfGHINnOoZMadu|/=0123%e$m}";
-#endif
-
-/* The order of the opcodes in this table is significant:
-
- * The assembler requires that all instances of the same mnemonic be
- consecutive. If they aren't, the assembler will bomb at runtime.
-
- * Immediate fields use pa_get_absolute_expression to parse the
- string. It will generate a "bad expression" error if passed
- a register name. Thus, register index variants of an opcode
- need to precede immediate variants.
-
- * The disassembler does not care about the order of the opcodes
- except in cases where implicit addressing is used.
-
- Here are the rules for ordering the opcodes of a mnemonic:
-
- 1) Opcodes with FLAG_STRICT should precede opcodes without
- FLAG_STRICT.
-
- 2) Opcodes with FLAG_STRICT should be ordered as follows:
- register index opcodes, short immediate opcodes, and finally
- long immediate opcodes. When both pa10 and pa11 variants
- of the same opcode are available, the pa10 opcode should
- come first for correct architectural promotion.
-
- 3) When implicit addressing is available for an opcode, the
- implicit opcode should precede the explicit opcode.
-
- 4) Opcodes without FLAG_STRICT should be ordered as follows:
- register index opcodes, long immediate opcodes, and finally
- short immediate opcodes. */
-
-static const struct pa_opcode pa_opcodes[] =
-{
-
-/* Pseudo-instructions. */
-
-{ "ldi", 0x34000000, 0xffe00000, "l,x", pa20w, 0},/* ldo val(r0),r */
-{ "ldi", 0x34000000, 0xffe0c000, "j,x", pa10, 0},/* ldo val(r0),r */
-
-{ "cmpib", 0xec000000, 0xfc000000, "?Qn5,b,w", pa20, FLAG_STRICT},
-{ "cmpib", 0x84000000, 0xf4000000, "?nn5,b,w", pa10, FLAG_STRICT},
-{ "comib", 0x84000000, 0xfc000000, "?nn5,b,w", pa10, 0}, /* comib{tf}*/
-/* This entry is for the disassembler only. It will never be used by
- assembler. */
-{ "comib", 0x8c000000, 0xfc000000, "?nn5,b,w", pa10, 0}, /* comib{tf}*/
-{ "cmpb", 0x9c000000, 0xdc000000, "?Nnx,b,w", pa20, FLAG_STRICT},
-{ "cmpb", 0x80000000, 0xf4000000, "?nnx,b,w", pa10, FLAG_STRICT},
-{ "comb", 0x80000000, 0xfc000000, "?nnx,b,w", pa10, 0}, /* comb{tf} */
-/* This entry is for the disassembler only. It will never be used by
- assembler. */
-{ "comb", 0x88000000, 0xfc000000, "?nnx,b,w", pa10, 0}, /* comb{tf} */
-{ "addb", 0xa0000000, 0xf4000000, "?Wnx,b,w", pa20w, FLAG_STRICT},
-{ "addb", 0xa0000000, 0xfc000000, "?@nx,b,w", pa10, 0}, /* addb{tf} */
-/* This entry is for the disassembler only. It will never be used by
- assembler. */
-{ "addb", 0xa8000000, 0xfc000000, "?@nx,b,w", pa10, 0},
-{ "addib", 0xa4000000, 0xf4000000, "?Wn5,b,w", pa20w, FLAG_STRICT},
-{ "addib", 0xa4000000, 0xfc000000, "?@n5,b,w", pa10, 0}, /* addib{tf}*/
-/* This entry is for the disassembler only. It will never be used by
- assembler. */
-{ "addib", 0xac000000, 0xfc000000, "?@n5,b,w", pa10, 0}, /* addib{tf}*/
-{ "nop", 0x08000240, 0xffffffff, "", pa10, 0}, /* or 0,0,0 */
-{ "copy", 0x08000240, 0xffe0ffe0, "x,t", pa10, 0}, /* or r,0,t */
-{ "mtsar", 0x01601840, 0xffe0ffff, "x", pa10, 0}, /* mtctl r,cr11 */
-
-/* Loads and Stores for integer registers. */
-
-{ "ldd", 0x0c0000c0, 0xfc00d3c0, "cxccx(b),t", pa20, FLAG_STRICT},
-{ "ldd", 0x0c0000c0, 0xfc0013c0, "cxccx(s,b),t", pa20, FLAG_STRICT},
-{ "ldd", 0x0c0010e0, 0xfc1ff3e0, "cocc@(b),t", pa20, FLAG_STRICT},
-{ "ldd", 0x0c0010e0, 0xfc1f33e0, "cocc@(s,b),t", pa20, FLAG_STRICT},
-{ "ldd", 0x0c0010c0, 0xfc00d3c0, "cmcc5(b),t", pa20, FLAG_STRICT},
-{ "ldd", 0x0c0010c0, 0xfc0013c0, "cmcc5(s,b),t", pa20, FLAG_STRICT},
-{ "ldd", 0x50000000, 0xfc000002, "cq&(b),x", pa20w, FLAG_STRICT},
-{ "ldd", 0x50000000, 0xfc00c002, "cq#(b),x", pa20, FLAG_STRICT},
-{ "ldd", 0x50000000, 0xfc000002, "cq#(s,b),x", pa20, FLAG_STRICT},
-{ "ldw", 0x0c000080, 0xfc00dfc0, "cXx(b),t", pa10, FLAG_STRICT},
-{ "ldw", 0x0c000080, 0xfc001fc0, "cXx(s,b),t", pa10, FLAG_STRICT},
-{ "ldw", 0x0c000080, 0xfc00d3c0, "cxccx(b),t", pa11, FLAG_STRICT},
-{ "ldw", 0x0c000080, 0xfc0013c0, "cxccx(s,b),t", pa11, FLAG_STRICT},
-{ "ldw", 0x0c0010a0, 0xfc1ff3e0, "cocc@(b),t", pa20, FLAG_STRICT},
-{ "ldw", 0x0c0010a0, 0xfc1f33e0, "cocc@(s,b),t", pa20, FLAG_STRICT},
-{ "ldw", 0x0c001080, 0xfc00dfc0, "cM5(b),t", pa10, FLAG_STRICT},
-{ "ldw", 0x0c001080, 0xfc001fc0, "cM5(s,b),t", pa10, FLAG_STRICT},
-{ "ldw", 0x0c001080, 0xfc00d3c0, "cmcc5(b),t", pa11, FLAG_STRICT},
-{ "ldw", 0x0c001080, 0xfc0013c0, "cmcc5(s,b),t", pa11, FLAG_STRICT},
-{ "ldw", 0x4c000000, 0xfc000000, "ce<(b),x", pa20w, FLAG_STRICT},
-{ "ldw", 0x5c000004, 0xfc000006, "ce>(b),x", pa20w, FLAG_STRICT},
-{ "ldw", 0x48000000, 0xfc000000, "l(b),x", pa20w, FLAG_STRICT},
-{ "ldw", 0x5c000004, 0xfc00c006, "ceK(b),x", pa20, FLAG_STRICT},
-{ "ldw", 0x5c000004, 0xfc000006, "ceK(s,b),x", pa20, FLAG_STRICT},
-{ "ldw", 0x4c000000, 0xfc00c000, "ceJ(b),x", pa10, FLAG_STRICT},
-{ "ldw", 0x4c000000, 0xfc000000, "ceJ(s,b),x", pa10, FLAG_STRICT},
-{ "ldw", 0x48000000, 0xfc00c000, "j(b),x", pa10, 0},
-{ "ldw", 0x48000000, 0xfc000000, "j(s,b),x", pa10, 0},
-{ "ldh", 0x0c000040, 0xfc00dfc0, "cXx(b),t", pa10, FLAG_STRICT},
-{ "ldh", 0x0c000040, 0xfc001fc0, "cXx(s,b),t", pa10, FLAG_STRICT},
-{ "ldh", 0x0c000040, 0xfc00d3c0, "cxccx(b),t", pa11, FLAG_STRICT},
-{ "ldh", 0x0c000040, 0xfc0013c0, "cxccx(s,b),t", pa11, FLAG_STRICT},
-{ "ldh", 0x0c001060, 0xfc1ff3e0, "cocc@(b),t", pa20, FLAG_STRICT},
-{ "ldh", 0x0c001060, 0xfc1f33e0, "cocc@(s,b),t", pa20, FLAG_STRICT},
-{ "ldh", 0x0c001040, 0xfc00dfc0, "cM5(b),t", pa10, FLAG_STRICT},
-{ "ldh", 0x0c001040, 0xfc001fc0, "cM5(s,b),t", pa10, FLAG_STRICT},
-{ "ldh", 0x0c001040, 0xfc00d3c0, "cmcc5(b),t", pa11, FLAG_STRICT},
-{ "ldh", 0x0c001040, 0xfc0013c0, "cmcc5(s,b),t", pa11, FLAG_STRICT},
-{ "ldh", 0x44000000, 0xfc000000, "l(b),x", pa20w, FLAG_STRICT},
-{ "ldh", 0x44000000, 0xfc00c000, "j(b),x", pa10, 0},
-{ "ldh", 0x44000000, 0xfc000000, "j(s,b),x", pa10, 0},
-{ "ldb", 0x0c000000, 0xfc00dfc0, "cXx(b),t", pa10, FLAG_STRICT},
-{ "ldb", 0x0c000000, 0xfc001fc0, "cXx(s,b),t", pa10, FLAG_STRICT},
-{ "ldb", 0x0c000000, 0xfc00d3c0, "cxccx(b),t", pa11, FLAG_STRICT},
-{ "ldb", 0x0c000000, 0xfc0013c0, "cxccx(s,b),t", pa11, FLAG_STRICT},
-{ "ldb", 0x0c001020, 0xfc1ff3e0, "cocc@(b),t", pa20, FLAG_STRICT},
-{ "ldb", 0x0c001020, 0xfc1f33e0, "cocc@(s,b),t", pa20, FLAG_STRICT},
-{ "ldb", 0x0c001000, 0xfc00dfc0, "cM5(b),t", pa10, FLAG_STRICT},
-{ "ldb", 0x0c001000, 0xfc001fc0, "cM5(s,b),t", pa10, FLAG_STRICT},
-{ "ldb", 0x0c001000, 0xfc00d3c0, "cmcc5(b),t", pa11, FLAG_STRICT},
-{ "ldb", 0x0c001000, 0xfc0013c0, "cmcc5(s,b),t", pa11, FLAG_STRICT},
-{ "ldb", 0x40000000, 0xfc000000, "l(b),x", pa20w, FLAG_STRICT},
-{ "ldb", 0x40000000, 0xfc00c000, "j(b),x", pa10, 0},
-{ "ldb", 0x40000000, 0xfc000000, "j(s,b),x", pa10, 0},
-{ "std", 0x0c0012e0, 0xfc00f3ff, "cocCx,@(b)", pa20, FLAG_STRICT},
-{ "std", 0x0c0012e0, 0xfc0033ff, "cocCx,@(s,b)", pa20, FLAG_STRICT},
-{ "std", 0x0c0012c0, 0xfc00d3c0, "cmcCx,V(b)", pa20, FLAG_STRICT},
-{ "std", 0x0c0012c0, 0xfc0013c0, "cmcCx,V(s,b)", pa20, FLAG_STRICT},
-{ "std", 0x70000000, 0xfc000002, "cqx,&(b)", pa20w, FLAG_STRICT},
-{ "std", 0x70000000, 0xfc00c002, "cqx,#(b)", pa20, FLAG_STRICT},
-{ "std", 0x70000000, 0xfc000002, "cqx,#(s,b)", pa20, FLAG_STRICT},
-{ "stw", 0x0c0012a0, 0xfc00f3ff, "cocCx,@(b)", pa20, FLAG_STRICT},
-{ "stw", 0x0c0012a0, 0xfc0033ff, "cocCx,@(s,b)", pa20, FLAG_STRICT},
-{ "stw", 0x0c001280, 0xfc00dfc0, "cMx,V(b)", pa10, FLAG_STRICT},
-{ "stw", 0x0c001280, 0xfc001fc0, "cMx,V(s,b)", pa10, FLAG_STRICT},
-{ "stw", 0x0c001280, 0xfc00d3c0, "cmcCx,V(b)", pa11, FLAG_STRICT},
-{ "stw", 0x0c001280, 0xfc0013c0, "cmcCx,V(s,b)", pa11, FLAG_STRICT},
-{ "stw", 0x6c000000, 0xfc000000, "cex,<(b)", pa20w, FLAG_STRICT},
-{ "stw", 0x7c000004, 0xfc000006, "cex,>(b)", pa20w, FLAG_STRICT},
-{ "stw", 0x68000000, 0xfc000000, "x,l(b)", pa20w, FLAG_STRICT},
-{ "stw", 0x7c000004, 0xfc00c006, "cex,K(b)", pa20, FLAG_STRICT},
-{ "stw", 0x7c000004, 0xfc000006, "cex,K(s,b)", pa20, FLAG_STRICT},
-{ "stw", 0x6c000000, 0xfc00c000, "cex,J(b)", pa10, FLAG_STRICT},
-{ "stw", 0x6c000000, 0xfc000000, "cex,J(s,b)", pa10, FLAG_STRICT},
-{ "stw", 0x68000000, 0xfc00c000, "x,j(b)", pa10, 0},
-{ "stw", 0x68000000, 0xfc000000, "x,j(s,b)", pa10, 0},
-{ "sth", 0x0c001260, 0xfc00f3ff, "cocCx,@(b)", pa20, FLAG_STRICT},
-{ "sth", 0x0c001260, 0xfc0033ff, "cocCx,@(s,b)", pa20, FLAG_STRICT},
-{ "sth", 0x0c001240, 0xfc00dfc0, "cMx,V(b)", pa10, FLAG_STRICT},
-{ "sth", 0x0c001240, 0xfc001fc0, "cMx,V(s,b)", pa10, FLAG_STRICT},
-{ "sth", 0x0c001240, 0xfc00d3c0, "cmcCx,V(b)", pa11, FLAG_STRICT},
-{ "sth", 0x0c001240, 0xfc0013c0, "cmcCx,V(s,b)", pa11, FLAG_STRICT},
-{ "sth", 0x64000000, 0xfc000000, "x,l(b)", pa20w, FLAG_STRICT},
-{ "sth", 0x64000000, 0xfc00c000, "x,j(b)", pa10, 0},
-{ "sth", 0x64000000, 0xfc000000, "x,j(s,b)", pa10, 0},
-{ "stb", 0x0c001220, 0xfc00f3ff, "cocCx,@(b)", pa20, FLAG_STRICT},
-{ "stb", 0x0c001220, 0xfc0033ff, "cocCx,@(s,b)", pa20, FLAG_STRICT},
-{ "stb", 0x0c001200, 0xfc00dfc0, "cMx,V(b)", pa10, FLAG_STRICT},
-{ "stb", 0x0c001200, 0xfc001fc0, "cMx,V(s,b)", pa10, FLAG_STRICT},
-{ "stb", 0x0c001200, 0xfc00d3c0, "cmcCx,V(b)", pa11, FLAG_STRICT},
-{ "stb", 0x0c001200, 0xfc0013c0, "cmcCx,V(s,b)", pa11, FLAG_STRICT},
-{ "stb", 0x60000000, 0xfc000000, "x,l(b)", pa20w, FLAG_STRICT},
-{ "stb", 0x60000000, 0xfc00c000, "x,j(b)", pa10, 0},
-{ "stb", 0x60000000, 0xfc000000, "x,j(s,b)", pa10, 0},
-{ "ldwm", 0x4c000000, 0xfc00c000, "j(b),x", pa10, 0},
-{ "ldwm", 0x4c000000, 0xfc000000, "j(s,b),x", pa10, 0},
-{ "stwm", 0x6c000000, 0xfc00c000, "x,j(b)", pa10, 0},
-{ "stwm", 0x6c000000, 0xfc000000, "x,j(s,b)", pa10, 0},
-{ "ldwx", 0x0c000080, 0xfc00dfc0, "cXx(b),t", pa10, FLAG_STRICT},
-{ "ldwx", 0x0c000080, 0xfc001fc0, "cXx(s,b),t", pa10, FLAG_STRICT},
-{ "ldwx", 0x0c000080, 0xfc00d3c0, "cxccx(b),t", pa11, FLAG_STRICT},
-{ "ldwx", 0x0c000080, 0xfc0013c0, "cxccx(s,b),t", pa11, FLAG_STRICT},
-{ "ldwx", 0x0c000080, 0xfc00dfc0, "cXx(b),t", pa10, 0},
-{ "ldwx", 0x0c000080, 0xfc001fc0, "cXx(s,b),t", pa10, 0},
-{ "ldhx", 0x0c000040, 0xfc00dfc0, "cXx(b),t", pa10, FLAG_STRICT},
-{ "ldhx", 0x0c000040, 0xfc001fc0, "cXx(s,b),t", pa10, FLAG_STRICT},
-{ "ldhx", 0x0c000040, 0xfc00d3c0, "cxccx(b),t", pa11, FLAG_STRICT},
-{ "ldhx", 0x0c000040, 0xfc0013c0, "cxccx(s,b),t", pa11, FLAG_STRICT},
-{ "ldhx", 0x0c000040, 0xfc00dfc0, "cXx(b),t", pa10, 0},
-{ "ldhx", 0x0c000040, 0xfc001fc0, "cXx(s,b),t", pa10, 0},
-{ "ldbx", 0x0c000000, 0xfc00dfc0, "cXx(b),t", pa10, FLAG_STRICT},
-{ "ldbx", 0x0c000000, 0xfc001fc0, "cXx(s,b),t", pa10, FLAG_STRICT},
-{ "ldbx", 0x0c000000, 0xfc00d3c0, "cxccx(b),t", pa11, FLAG_STRICT},
-{ "ldbx", 0x0c000000, 0xfc0013c0, "cxccx(s,b),t", pa11, FLAG_STRICT},
-{ "ldbx", 0x0c000000, 0xfc00dfc0, "cXx(b),t", pa10, 0},
-{ "ldbx", 0x0c000000, 0xfc001fc0, "cXx(s,b),t", pa10, 0},
-{ "ldwa", 0x0c000180, 0xfc00dfc0, "cXx(b),t", pa10, FLAG_STRICT},
-{ "ldwa", 0x0c000180, 0xfc00d3c0, "cxccx(b),t", pa11, FLAG_STRICT},
-{ "ldwa", 0x0c0011a0, 0xfc1ff3e0, "cocc@(b),t", pa20, FLAG_STRICT},
-{ "ldwa", 0x0c001180, 0xfc00dfc0, "cM5(b),t", pa10, FLAG_STRICT},
-{ "ldwa", 0x0c001180, 0xfc00d3c0, "cmcc5(b),t", pa11, FLAG_STRICT},
-{ "ldcw", 0x0c0001c0, 0xfc00dfc0, "cXx(b),t", pa10, FLAG_STRICT},
-{ "ldcw", 0x0c0001c0, 0xfc001fc0, "cXx(s,b),t", pa10, FLAG_STRICT},
-{ "ldcw", 0x0c0001c0, 0xfc00d3c0, "cxcdx(b),t", pa11, FLAG_STRICT},
-{ "ldcw", 0x0c0001c0, 0xfc0013c0, "cxcdx(s,b),t", pa11, FLAG_STRICT},
-{ "ldcw", 0x0c0011c0, 0xfc00dfc0, "cM5(b),t", pa10, FLAG_STRICT},
-{ "ldcw", 0x0c0011c0, 0xfc001fc0, "cM5(s,b),t", pa10, FLAG_STRICT},
-{ "ldcw", 0x0c0011c0, 0xfc00d3c0, "cmcd5(b),t", pa11, FLAG_STRICT},
-{ "ldcw", 0x0c0011c0, 0xfc0013c0, "cmcd5(s,b),t", pa11, FLAG_STRICT},
-{ "stwa", 0x0c0013a0, 0xfc00d3ff, "cocCx,@(b)", pa20, FLAG_STRICT},
-{ "stwa", 0x0c001380, 0xfc00dfc0, "cMx,V(b)", pa10, FLAG_STRICT},
-{ "stwa", 0x0c001380, 0xfc00d3c0, "cmcCx,V(b)", pa11, FLAG_STRICT},
-{ "stby", 0x0c001300, 0xfc00dfc0, "cAx,V(b)", pa10, FLAG_STRICT},
-{ "stby", 0x0c001300, 0xfc001fc0, "cAx,V(s,b)", pa10, FLAG_STRICT},
-{ "stby", 0x0c001300, 0xfc00d3c0, "cscCx,V(b)", pa11, FLAG_STRICT},
-{ "stby", 0x0c001300, 0xfc0013c0, "cscCx,V(s,b)", pa11, FLAG_STRICT},
-{ "ldda", 0x0c000100, 0xfc00d3c0, "cxccx(b),t", pa20, FLAG_STRICT},
-{ "ldda", 0x0c001120, 0xfc1ff3e0, "cocc@(b),t", pa20, FLAG_STRICT},
-{ "ldda", 0x0c001100, 0xfc00d3c0, "cmcc5(b),t", pa20, FLAG_STRICT},
-{ "ldcd", 0x0c000140, 0xfc00d3c0, "cxcdx(b),t", pa20, FLAG_STRICT},
-{ "ldcd", 0x0c000140, 0xfc0013c0, "cxcdx(s,b),t", pa20, FLAG_STRICT},
-{ "ldcd", 0x0c001140, 0xfc00d3c0, "cmcd5(b),t", pa20, FLAG_STRICT},
-{ "ldcd", 0x0c001140, 0xfc0013c0, "cmcd5(s,b),t", pa20, FLAG_STRICT},
-{ "stda", 0x0c0013e0, 0xfc00f3ff, "cocCx,@(b)", pa20, FLAG_STRICT},
-{ "stda", 0x0c0013c0, 0xfc00d3c0, "cmcCx,V(b)", pa20, FLAG_STRICT},
-{ "ldwax", 0x0c000180, 0xfc00dfc0, "cXx(b),t", pa10, FLAG_STRICT},
-{ "ldwax", 0x0c000180, 0xfc00d3c0, "cxccx(b),t", pa11, FLAG_STRICT},
-{ "ldwax", 0x0c000180, 0xfc00dfc0, "cXx(b),t", pa10, 0},
-{ "ldcwx", 0x0c0001c0, 0xfc00dfc0, "cXx(b),t", pa10, FLAG_STRICT},
-{ "ldcwx", 0x0c0001c0, 0xfc001fc0, "cXx(s,b),t", pa10, FLAG_STRICT},
-{ "ldcwx", 0x0c0001c0, 0xfc00d3c0, "cxcdx(b),t", pa11, FLAG_STRICT},
-{ "ldcwx", 0x0c0001c0, 0xfc0013c0, "cxcdx(s,b),t", pa11, FLAG_STRICT},
-{ "ldcwx", 0x0c0001c0, 0xfc00dfc0, "cXx(b),t", pa10, 0},
-{ "ldcwx", 0x0c0001c0, 0xfc001fc0, "cXx(s,b),t", pa10, 0},
-{ "ldws", 0x0c001080, 0xfc00dfc0, "cM5(b),t", pa10, FLAG_STRICT},
-{ "ldws", 0x0c001080, 0xfc001fc0, "cM5(s,b),t", pa10, FLAG_STRICT},
-{ "ldws", 0x0c001080, 0xfc00d3c0, "cmcc5(b),t", pa11, FLAG_STRICT},
-{ "ldws", 0x0c001080, 0xfc0013c0, "cmcc5(s,b),t", pa11, FLAG_STRICT},
-{ "ldws", 0x0c001080, 0xfc00dfc0, "cM5(b),t", pa10, 0},
-{ "ldws", 0x0c001080, 0xfc001fc0, "cM5(s,b),t", pa10, 0},
-{ "ldhs", 0x0c001040, 0xfc00dfc0, "cM5(b),t", pa10, FLAG_STRICT},
-{ "ldhs", 0x0c001040, 0xfc001fc0, "cM5(s,b),t", pa10, FLAG_STRICT},
-{ "ldhs", 0x0c001040, 0xfc00d3c0, "cmcc5(b),t", pa11, FLAG_STRICT},
-{ "ldhs", 0x0c001040, 0xfc0013c0, "cmcc5(s,b),t", pa11, FLAG_STRICT},
-{ "ldhs", 0x0c001040, 0xfc00dfc0, "cM5(b),t", pa10, 0},
-{ "ldhs", 0x0c001040, 0xfc001fc0, "cM5(s,b),t", pa10, 0},
-{ "ldbs", 0x0c001000, 0xfc00dfc0, "cM5(b),t", pa10, FLAG_STRICT},
-{ "ldbs", 0x0c001000, 0xfc001fc0, "cM5(s,b),t", pa10, FLAG_STRICT},
-{ "ldbs", 0x0c001000, 0xfc00d3c0, "cmcc5(b),t", pa11, FLAG_STRICT},
-{ "ldbs", 0x0c001000, 0xfc0013c0, "cmcc5(s,b),t", pa11, FLAG_STRICT},
-{ "ldbs", 0x0c001000, 0xfc00dfc0, "cM5(b),t", pa10, 0},
-{ "ldbs", 0x0c001000, 0xfc001fc0, "cM5(s,b),t", pa10, 0},
-{ "ldwas", 0x0c001180, 0xfc00dfc0, "cM5(b),t", pa10, FLAG_STRICT},
-{ "ldwas", 0x0c001180, 0xfc00d3c0, "cmcc5(b),t", pa11, FLAG_STRICT},
-{ "ldwas", 0x0c001180, 0xfc00dfc0, "cM5(b),t", pa10, 0},
-{ "ldcws", 0x0c0011c0, 0xfc00dfc0, "cM5(b),t", pa10, FLAG_STRICT},
-{ "ldcws", 0x0c0011c0, 0xfc001fc0, "cM5(s,b),t", pa10, FLAG_STRICT},
-{ "ldcws", 0x0c0011c0, 0xfc00d3c0, "cmcd5(b),t", pa11, FLAG_STRICT},
-{ "ldcws", 0x0c0011c0, 0xfc0013c0, "cmcd5(s,b),t", pa11, FLAG_STRICT},
-{ "ldcws", 0x0c0011c0, 0xfc00dfc0, "cM5(b),t", pa10, 0},
-{ "ldcws", 0x0c0011c0, 0xfc001fc0, "cM5(s,b),t", pa10, 0},
-{ "stws", 0x0c001280, 0xfc00dfc0, "cMx,V(b)", pa10, FLAG_STRICT},
-{ "stws", 0x0c001280, 0xfc001fc0, "cMx,V(s,b)", pa10, FLAG_STRICT},
-{ "stws", 0x0c001280, 0xfc00d3c0, "cmcCx,V(b)", pa11, FLAG_STRICT},
-{ "stws", 0x0c001280, 0xfc0013c0, "cmcCx,V(s,b)", pa11, FLAG_STRICT},
-{ "stws", 0x0c001280, 0xfc00dfc0, "cMx,V(b)", pa10, 0},
-{ "stws", 0x0c001280, 0xfc001fc0, "cMx,V(s,b)", pa10, 0},
-{ "sths", 0x0c001240, 0xfc00dfc0, "cMx,V(b)", pa10, FLAG_STRICT},
-{ "sths", 0x0c001240, 0xfc001fc0, "cMx,V(s,b)", pa10, FLAG_STRICT},
-{ "sths", 0x0c001240, 0xfc00d3c0, "cmcCx,V(b)", pa11, FLAG_STRICT},
-{ "sths", 0x0c001240, 0xfc0013c0, "cmcCx,V(s,b)", pa11, FLAG_STRICT},
-{ "sths", 0x0c001240, 0xfc00dfc0, "cMx,V(b)", pa10, 0},
-{ "sths", 0x0c001240, 0xfc001fc0, "cMx,V(s,b)", pa10, 0},
-{ "stbs", 0x0c001200, 0xfc00dfc0, "cMx,V(b)", pa10, FLAG_STRICT},
-{ "stbs", 0x0c001200, 0xfc001fc0, "cMx,V(s,b)", pa10, FLAG_STRICT},
-{ "stbs", 0x0c001200, 0xfc00d3c0, "cmcCx,V(b)", pa11, FLAG_STRICT},
-{ "stbs", 0x0c001200, 0xfc0013c0, "cmcCx,V(s,b)", pa11, FLAG_STRICT},
-{ "stbs", 0x0c001200, 0xfc00dfc0, "cMx,V(b)", pa10, 0},
-{ "stbs", 0x0c001200, 0xfc001fc0, "cMx,V(s,b)", pa10, 0},
-{ "stwas", 0x0c001380, 0xfc00dfc0, "cMx,V(b)", pa10, FLAG_STRICT},
-{ "stwas", 0x0c001380, 0xfc00d3c0, "cmcCx,V(b)", pa11, FLAG_STRICT},
-{ "stwas", 0x0c001380, 0xfc00dfc0, "cMx,V(b)", pa10, 0},
-{ "stdby", 0x0c001340, 0xfc00d3c0, "cscCx,V(b)", pa20, FLAG_STRICT},
-{ "stdby", 0x0c001340, 0xfc0013c0, "cscCx,V(s,b)", pa20, FLAG_STRICT},
-{ "stbys", 0x0c001300, 0xfc00dfc0, "cAx,V(b)", pa10, FLAG_STRICT},
-{ "stbys", 0x0c001300, 0xfc001fc0, "cAx,V(s,b)", pa10, FLAG_STRICT},
-{ "stbys", 0x0c001300, 0xfc00d3c0, "cscCx,V(b)", pa11, FLAG_STRICT},
-{ "stbys", 0x0c001300, 0xfc0013c0, "cscCx,V(s,b)", pa11, FLAG_STRICT},
-{ "stbys", 0x0c001300, 0xfc00dfc0, "cAx,V(b)", pa10, 0},
-{ "stbys", 0x0c001300, 0xfc001fc0, "cAx,V(s,b)", pa10, 0},
-
-/* Immediate instructions. */
-{ "ldo", 0x34000000, 0xfc000000, "l(b),x", pa20w, 0},
-{ "ldo", 0x34000000, 0xfc00c000, "j(b),x", pa10, 0},
-{ "ldil", 0x20000000, 0xfc000000, "k,b", pa10, 0},
-{ "addil", 0x28000000, 0xfc000000, "k,b,Z", pa10, 0},
-{ "addil", 0x28000000, 0xfc000000, "k,b", pa10, 0},
-
-/* Branching instructions. */
-{ "b", 0xe8008000, 0xfc00e000, "cpnXL", pa20, FLAG_STRICT},
-{ "b", 0xe800a000, 0xfc00e000, "clnXL", pa20, FLAG_STRICT},
-{ "b", 0xe8000000, 0xfc00e000, "clnW,b", pa10, FLAG_STRICT},
-{ "b", 0xe8002000, 0xfc00e000, "cgnW,b", pa10, FLAG_STRICT},
-{ "b", 0xe8000000, 0xffe0e000, "nW", pa10, 0}, /* b,l foo,r0 */
-{ "bl", 0xe8000000, 0xfc00e000, "nW,b", pa10, 0},
-{ "gate", 0xe8002000, 0xfc00e000, "nW,b", pa10, 0},
-{ "blr", 0xe8004000, 0xfc00e001, "nx,b", pa10, 0},
-{ "bv", 0xe800c000, 0xfc00fffd, "nx(b)", pa10, 0},
-{ "bv", 0xe800c000, 0xfc00fffd, "n(b)", pa10, 0},
-{ "bve", 0xe800f001, 0xfc1ffffd, "cpn(b)L", pa20, FLAG_STRICT},
-{ "bve", 0xe800f000, 0xfc1ffffd, "cln(b)L", pa20, FLAG_STRICT},
-{ "bve", 0xe800d001, 0xfc1ffffd, "cPn(b)", pa20, FLAG_STRICT},
-{ "bve", 0xe800d000, 0xfc1ffffd, "n(b)", pa20, FLAG_STRICT},
-{ "be", 0xe4000000, 0xfc000000, "clnz(S,b),Y", pa10, FLAG_STRICT},
-{ "be", 0xe4000000, 0xfc000000, "clnz(b),Y", pa10, FLAG_STRICT},
-{ "be", 0xe0000000, 0xfc000000, "nz(S,b)", pa10, 0},
-{ "be", 0xe0000000, 0xfc000000, "nz(b)", pa10, 0},
-{ "ble", 0xe4000000, 0xfc000000, "nz(S,b)", pa10, 0},
-{ "movb", 0xc8000000, 0xfc000000, "?ynx,b,w", pa10, 0},
-{ "movib", 0xcc000000, 0xfc000000, "?yn5,b,w", pa10, 0},
-{ "combt", 0x80000000, 0xfc000000, "?tnx,b,w", pa10, 0},
-{ "combf", 0x88000000, 0xfc000000, "?tnx,b,w", pa10, 0},
-{ "comibt", 0x84000000, 0xfc000000, "?tn5,b,w", pa10, 0},
-{ "comibf", 0x8c000000, 0xfc000000, "?tn5,b,w", pa10, 0},
-{ "addbt", 0xa0000000, 0xfc000000, "?dnx,b,w", pa10, 0},
-{ "addbf", 0xa8000000, 0xfc000000, "?dnx,b,w", pa10, 0},
-{ "addibt", 0xa4000000, 0xfc000000, "?dn5,b,w", pa10, 0},
-{ "addibf", 0xac000000, 0xfc000000, "?dn5,b,w", pa10, 0},
-{ "bb", 0xc0006000, 0xffe06000, "?Bnx,!,w", pa20, FLAG_STRICT},
-{ "bb", 0xc0004000, 0xffe06000, "?bnx,!,w", pa10, FLAG_STRICT},
-{ "bb", 0xc4004000, 0xfc004000, "?Bnx,B,w", pa20, FLAG_STRICT},
-{ "bb", 0xc4004000, 0xfc006000, "?bnx,Q,w", pa10, FLAG_STRICT},
-{ "bb", 0xc4004000, 0xfc006000, "?bnx,Q,w", pa10, 0},
-{ "bvb", 0xc0004000, 0xffe04000, "?bnx,w", pa10, 0},
-{ "clrbts", 0xe8004005, 0xffffffff, "", pa20, FLAG_STRICT},
-{ "popbts", 0xe8004005, 0xfffff007, "$", pa20, FLAG_STRICT},
-{ "pushnom", 0xe8004001, 0xffffffff, "", pa20, FLAG_STRICT},
-{ "pushbts", 0xe8004001, 0xffe0ffff, "x", pa20, FLAG_STRICT},
-
-/* Computation Instructions. */
-
-{ "cmpclr", 0x080008a0, 0xfc000fe0, "?Sx,b,t", pa20, FLAG_STRICT},
-{ "cmpclr", 0x08000880, 0xfc000fe0, "?sx,b,t", pa10, FLAG_STRICT},
-{ "comclr", 0x08000880, 0xfc000fe0, "?sx,b,t", pa10, 0},
-{ "or", 0x08000260, 0xfc000fe0, "?Lx,b,t", pa20, FLAG_STRICT},
-{ "or", 0x08000240, 0xfc000fe0, "?lx,b,t", pa10, 0},
-{ "xor", 0x080002a0, 0xfc000fe0, "?Lx,b,t", pa20, FLAG_STRICT},
-{ "xor", 0x08000280, 0xfc000fe0, "?lx,b,t", pa10, 0},
-{ "and", 0x08000220, 0xfc000fe0, "?Lx,b,t", pa20, FLAG_STRICT},
-{ "and", 0x08000200, 0xfc000fe0, "?lx,b,t", pa10, 0},
-{ "andcm", 0x08000020, 0xfc000fe0, "?Lx,b,t", pa20, FLAG_STRICT},
-{ "andcm", 0x08000000, 0xfc000fe0, "?lx,b,t", pa10, 0},
-{ "uxor", 0x080003a0, 0xfc000fe0, "?Ux,b,t", pa20, FLAG_STRICT},
-{ "uxor", 0x08000380, 0xfc000fe0, "?ux,b,t", pa10, 0},
-{ "uaddcm", 0x080009a0, 0xfc000fa0, "cT?Ux,b,t", pa20, FLAG_STRICT},
-{ "uaddcm", 0x08000980, 0xfc000fa0, "cT?ux,b,t", pa10, FLAG_STRICT},
-{ "uaddcm", 0x08000980, 0xfc000fe0, "?ux,b,t", pa10, 0},
-{ "uaddcmt", 0x080009c0, 0xfc000fe0, "?ux,b,t", pa10, 0},
-{ "dcor", 0x08000ba0, 0xfc1f0fa0, "ci?Ub,t", pa20, FLAG_STRICT},
-{ "dcor", 0x08000b80, 0xfc1f0fa0, "ci?ub,t", pa10, FLAG_STRICT},
-{ "dcor", 0x08000b80, 0xfc1f0fe0, "?ub,t", pa10, 0},
-{ "idcor", 0x08000bc0, 0xfc1f0fe0, "?ub,t", pa10, 0},
-{ "addi", 0xb0000000, 0xfc000000, "ct?ai,b,x", pa10, FLAG_STRICT},
-{ "addi", 0xb4000000, 0xfc000000, "cv?ai,b,x", pa10, FLAG_STRICT},
-{ "addi", 0xb4000000, 0xfc000800, "?ai,b,x", pa10, 0},
-{ "addio", 0xb4000800, 0xfc000800, "?ai,b,x", pa10, 0},
-{ "addit", 0xb0000000, 0xfc000800, "?ai,b,x", pa10, 0},
-{ "addito", 0xb0000800, 0xfc000800, "?ai,b,x", pa10, 0},
-{ "add", 0x08000720, 0xfc0007e0, "cY?Ax,b,t", pa20, FLAG_STRICT},
-{ "add", 0x08000700, 0xfc0007e0, "cy?ax,b,t", pa10, FLAG_STRICT},
-{ "add", 0x08000220, 0xfc0003e0, "ca?Ax,b,t", pa20, FLAG_STRICT},
-{ "add", 0x08000200, 0xfc0003e0, "ca?ax,b,t", pa10, FLAG_STRICT},
-{ "add", 0x08000600, 0xfc000fe0, "?ax,b,t", pa10, 0},
-{ "addl", 0x08000a00, 0xfc000fe0, "?ax,b,t", pa10, 0},
-{ "addo", 0x08000e00, 0xfc000fe0, "?ax,b,t", pa10, 0},
-{ "addc", 0x08000700, 0xfc000fe0, "?ax,b,t", pa10, 0},
-{ "addco", 0x08000f00, 0xfc000fe0, "?ax,b,t", pa10, 0},
-{ "sub", 0x080004e0, 0xfc0007e0, "ct?Sx,b,t", pa20, FLAG_STRICT},
-{ "sub", 0x080004c0, 0xfc0007e0, "ct?sx,b,t", pa10, FLAG_STRICT},
-{ "sub", 0x08000520, 0xfc0007e0, "cB?Sx,b,t", pa20, FLAG_STRICT},
-{ "sub", 0x08000500, 0xfc0007e0, "cb?sx,b,t", pa10, FLAG_STRICT},
-{ "sub", 0x08000420, 0xfc0007e0, "cv?Sx,b,t", pa20, FLAG_STRICT},
-{ "sub", 0x08000400, 0xfc0007e0, "cv?sx,b,t", pa10, FLAG_STRICT},
-{ "sub", 0x08000400, 0xfc000fe0, "?sx,b,t", pa10, 0},
-{ "subo", 0x08000c00, 0xfc000fe0, "?sx,b,t", pa10, 0},
-{ "subb", 0x08000500, 0xfc000fe0, "?sx,b,t", pa10, 0},
-{ "subbo", 0x08000d00, 0xfc000fe0, "?sx,b,t", pa10, 0},
-{ "subt", 0x080004c0, 0xfc000fe0, "?sx,b,t", pa10, 0},
-{ "subto", 0x08000cc0, 0xfc000fe0, "?sx,b,t", pa10, 0},
-{ "ds", 0x08000440, 0xfc000fe0, "?sx,b,t", pa10, 0},
-{ "subi", 0x94000000, 0xfc000000, "cv?si,b,x", pa10, FLAG_STRICT},
-{ "subi", 0x94000000, 0xfc000800, "?si,b,x", pa10, 0},
-{ "subio", 0x94000800, 0xfc000800, "?si,b,x", pa10, 0},
-{ "cmpiclr", 0x90000800, 0xfc000800, "?Si,b,x", pa20, FLAG_STRICT},
-{ "cmpiclr", 0x90000000, 0xfc000800, "?si,b,x", pa10, FLAG_STRICT},
-{ "comiclr", 0x90000000, 0xfc000800, "?si,b,x", pa10, 0},
-{ "shladd", 0x08000220, 0xfc000320, "ca?Ax,.,b,t", pa20, FLAG_STRICT},
-{ "shladd", 0x08000200, 0xfc000320, "ca?ax,.,b,t", pa10, FLAG_STRICT},
-{ "sh1add", 0x08000640, 0xfc000fe0, "?ax,b,t", pa10, 0},
-{ "sh1addl", 0x08000a40, 0xfc000fe0, "?ax,b,t", pa10, 0},
-{ "sh1addo", 0x08000e40, 0xfc000fe0, "?ax,b,t", pa10, 0},
-{ "sh2add", 0x08000680, 0xfc000fe0, "?ax,b,t", pa10, 0},
-{ "sh2addl", 0x08000a80, 0xfc000fe0, "?ax,b,t", pa10, 0},
-{ "sh2addo", 0x08000e80, 0xfc000fe0, "?ax,b,t", pa10, 0},
-{ "sh3add", 0x080006c0, 0xfc000fe0, "?ax,b,t", pa10, 0},
-{ "sh3addl", 0x08000ac0, 0xfc000fe0, "?ax,b,t", pa10, 0},
-{ "sh3addo", 0x08000ec0, 0xfc000fe0, "?ax,b,t", pa10, 0},
-
-/* Subword Operation Instructions. */
-
-{ "hadd", 0x08000300, 0xfc00ff20, "cHx,b,t", pa20, FLAG_STRICT},
-{ "havg", 0x080002c0, 0xfc00ffe0, "x,b,t", pa20, FLAG_STRICT},
-{ "hshl", 0xf8008800, 0xffe0fc20, "x,*,t", pa20, FLAG_STRICT},
-{ "hshladd", 0x08000700, 0xfc00ff20, "x,.,b,t", pa20, FLAG_STRICT},
-{ "hshr", 0xf800c800, 0xfc1ff820, "cSb,*,t", pa20, FLAG_STRICT},
-{ "hshradd", 0x08000500, 0xfc00ff20, "x,.,b,t", pa20, FLAG_STRICT},
-{ "hsub", 0x08000100, 0xfc00ff20, "cHx,b,t", pa20, FLAG_STRICT},
-{ "mixh", 0xf8008400, 0xfc009fe0, "chx,b,t", pa20, FLAG_STRICT},
-{ "mixw", 0xf8008000, 0xfc009fe0, "chx,b,t", pa20, FLAG_STRICT},
-{ "permh", 0xf8000000, 0xfc009020, "c*a,t", pa20, FLAG_STRICT},
-
-
-/* Extract and Deposit Instructions. */
-
-{ "shrpd", 0xd0000200, 0xfc001fe0, "?Xx,b,!,t", pa20, FLAG_STRICT},
-{ "shrpd", 0xd0000400, 0xfc001400, "?Xx,b,~,t", pa20, FLAG_STRICT},
-{ "shrpw", 0xd0000000, 0xfc001fe0, "?xx,b,!,t", pa10, FLAG_STRICT},
-{ "shrpw", 0xd0000800, 0xfc001c00, "?xx,b,p,t", pa10, FLAG_STRICT},
-{ "vshd", 0xd0000000, 0xfc001fe0, "?xx,b,t", pa10, 0},
-{ "shd", 0xd0000800, 0xfc001c00, "?xx,b,p,t", pa10, 0},
-{ "extrd", 0xd0001200, 0xfc001ae0, "cS?Xb,!,%,x", pa20, FLAG_STRICT},
-{ "extrd", 0xd8000000, 0xfc000000, "cS?Xb,q,|,x", pa20, FLAG_STRICT},
-{ "extrw", 0xd0001000, 0xfc001be0, "cS?xb,!,T,x", pa10, FLAG_STRICT},
-{ "extrw", 0xd0001800, 0xfc001800, "cS?xb,P,T,x", pa10, FLAG_STRICT},
-{ "vextru", 0xd0001000, 0xfc001fe0, "?xb,T,x", pa10, 0},
-{ "vextrs", 0xd0001400, 0xfc001fe0, "?xb,T,x", pa10, 0},
-{ "extru", 0xd0001800, 0xfc001c00, "?xb,P,T,x", pa10, 0},
-{ "extrs", 0xd0001c00, 0xfc001c00, "?xb,P,T,x", pa10, 0},
-{ "depd", 0xd4000200, 0xfc001ae0, "cz?Xx,!,%,b", pa20, FLAG_STRICT},
-{ "depd", 0xf0000000, 0xfc000000, "cz?Xx,~,|,b", pa20, FLAG_STRICT},
-{ "depdi", 0xd4001200, 0xfc001ae0, "cz?X5,!,%,b", pa20, FLAG_STRICT},
-{ "depdi", 0xf4000000, 0xfc000000, "cz?X5,~,|,b", pa20, FLAG_STRICT},
-{ "depw", 0xd4000000, 0xfc001be0, "cz?xx,!,T,b", pa10, FLAG_STRICT},
-{ "depw", 0xd4000800, 0xfc001800, "cz?xx,p,T,b", pa10, FLAG_STRICT},
-{ "depwi", 0xd4001000, 0xfc001be0, "cz?x5,!,T,b", pa10, FLAG_STRICT},
-{ "depwi", 0xd4001800, 0xfc001800, "cz?x5,p,T,b", pa10, FLAG_STRICT},
-{ "zvdep", 0xd4000000, 0xfc001fe0, "?xx,T,b", pa10, 0},
-{ "vdep", 0xd4000400, 0xfc001fe0, "?xx,T,b", pa10, 0},
-{ "zdep", 0xd4000800, 0xfc001c00, "?xx,p,T,b", pa10, 0},
-{ "dep", 0xd4000c00, 0xfc001c00, "?xx,p,T,b", pa10, 0},
-{ "zvdepi", 0xd4001000, 0xfc001fe0, "?x5,T,b", pa10, 0},
-{ "vdepi", 0xd4001400, 0xfc001fe0, "?x5,T,b", pa10, 0},
-{ "zdepi", 0xd4001800, 0xfc001c00, "?x5,p,T,b", pa10, 0},
-{ "depi", 0xd4001c00, 0xfc001c00, "?x5,p,T,b", pa10, 0},
-
-/* System Control Instructions. */
-
-{ "break", 0x00000000, 0xfc001fe0, "r,A", pa10, 0},
-{ "rfi", 0x00000c00, 0xffffff1f, "cr", pa10, FLAG_STRICT},
-{ "rfi", 0x00000c00, 0xffffffff, "", pa10, 0},
-{ "rfir", 0x00000ca0, 0xffffffff, "", pa11, 0},
-{ "ssm", 0x00000d60, 0xfc00ffe0, "U,t", pa20, FLAG_STRICT},
-{ "ssm", 0x00000d60, 0xffe0ffe0, "R,t", pa10, 0},
-{ "rsm", 0x00000e60, 0xfc00ffe0, "U,t", pa20, FLAG_STRICT},
-{ "rsm", 0x00000e60, 0xffe0ffe0, "R,t", pa10, 0},
-{ "mtsm", 0x00001860, 0xffe0ffff, "x", pa10, 0},
-{ "ldsid", 0x000010a0, 0xfc1fffe0, "(b),t", pa10, 0},
-{ "ldsid", 0x000010a0, 0xfc1f3fe0, "(s,b),t", pa10, 0},
-{ "mtsp", 0x00001820, 0xffe01fff, "x,S", pa10, 0},
-{ "mtctl", 0x00001840, 0xfc00ffff, "x,^", pa10, 0},
-{ "mtsarcm", 0x016018C0, 0xffe0ffff, "x", pa20, FLAG_STRICT},
-{ "mfia", 0x000014A0, 0xffffffe0, "t", pa20, FLAG_STRICT},
-{ "mfsp", 0x000004a0, 0xffff1fe0, "S,t", pa10, 0},
-{ "mfctl", 0x016048a0, 0xffffffe0, "cW!,t", pa20, FLAG_STRICT},
-{ "mfctl", 0x000008a0, 0xfc1fffe0, "^,t", pa10, 0},
-{ "sync", 0x00000400, 0xffffffff, "", pa10, 0},
-{ "syncdma", 0x00100400, 0xffffffff, "", pa10, 0},
-{ "probe", 0x04001180, 0xfc00ffa0, "cw(b),x,t", pa10, FLAG_STRICT},
-{ "probe", 0x04001180, 0xfc003fa0, "cw(s,b),x,t", pa10, FLAG_STRICT},
-{ "probei", 0x04003180, 0xfc00ffa0, "cw(b),R,t", pa10, FLAG_STRICT},
-{ "probei", 0x04003180, 0xfc003fa0, "cw(s,b),R,t", pa10, FLAG_STRICT},
-{ "prober", 0x04001180, 0xfc00ffe0, "(b),x,t", pa10, 0},
-{ "prober", 0x04001180, 0xfc003fe0, "(s,b),x,t", pa10, 0},
-{ "proberi", 0x04003180, 0xfc00ffe0, "(b),R,t", pa10, 0},
-{ "proberi", 0x04003180, 0xfc003fe0, "(s,b),R,t", pa10, 0},
-{ "probew", 0x040011c0, 0xfc00ffe0, "(b),x,t", pa10, 0},
-{ "probew", 0x040011c0, 0xfc003fe0, "(s,b),x,t", pa10, 0},
-{ "probewi", 0x040031c0, 0xfc00ffe0, "(b),R,t", pa10, 0},
-{ "probewi", 0x040031c0, 0xfc003fe0, "(s,b),R,t", pa10, 0},
-{ "lpa", 0x04001340, 0xfc00ffc0, "cZx(b),t", pa10, 0},
-{ "lpa", 0x04001340, 0xfc003fc0, "cZx(s,b),t", pa10, 0},
-{ "lci", 0x04001300, 0xfc00ffe0, "x(b),t", pa11, 0},
-{ "lci", 0x04001300, 0xfc003fe0, "x(s,b),t", pa11, 0},
-{ "pdtlb", 0x04001600, 0xfc00ffdf, "cLcZx(b)", pa20, FLAG_STRICT},
-{ "pdtlb", 0x04001600, 0xfc003fdf, "cLcZx(s,b)", pa20, FLAG_STRICT},
-{ "pdtlb", 0x04001600, 0xfc1fffdf, "cLcZ@(b)", pa20, FLAG_STRICT},
-{ "pdtlb", 0x04001600, 0xfc1f3fdf, "cLcZ@(s,b)", pa20, FLAG_STRICT},
-{ "pdtlb", 0x04001200, 0xfc00ffdf, "cZx(b)", pa10, 0},
-{ "pdtlb", 0x04001200, 0xfc003fdf, "cZx(s,b)", pa10, 0},
-{ "pitlb", 0x04000600, 0xfc001fdf, "cLcZx(S,b)", pa20, FLAG_STRICT},
-{ "pitlb", 0x04000600, 0xfc1f1fdf, "cLcZ@(S,b)", pa20, FLAG_STRICT},
-{ "pitlb", 0x04000200, 0xfc001fdf, "cZx(S,b)", pa10, 0},
-{ "pdtlbe", 0x04001240, 0xfc00ffdf, "cZx(b)", pa10, 0},
-{ "pdtlbe", 0x04001240, 0xfc003fdf, "cZx(s,b)", pa10, 0},
-{ "pitlbe", 0x04000240, 0xfc001fdf, "cZx(S,b)", pa10, 0},
-{ "idtlba", 0x04001040, 0xfc00ffff, "x,(b)", pa10, 0},
-{ "idtlba", 0x04001040, 0xfc003fff, "x,(s,b)", pa10, 0},
-{ "iitlba", 0x04000040, 0xfc001fff, "x,(S,b)", pa10, 0},
-{ "idtlbp", 0x04001000, 0xfc00ffff, "x,(b)", pa10, 0},
-{ "idtlbp", 0x04001000, 0xfc003fff, "x,(s,b)", pa10, 0},
-{ "iitlbp", 0x04000000, 0xfc001fff, "x,(S,b)", pa10, 0},
-{ "pdc", 0x04001380, 0xfc00ffdf, "cZx(b)", pa10, 0},
-{ "pdc", 0x04001380, 0xfc003fdf, "cZx(s,b)", pa10, 0},
-{ "fdc", 0x04001280, 0xfc00ffdf, "cZx(b)", pa10, FLAG_STRICT},
-{ "fdc", 0x04001280, 0xfc003fdf, "cZx(s,b)", pa10, FLAG_STRICT},
-{ "fdc", 0x04003280, 0xfc00ffff, "5(b)", pa20, FLAG_STRICT},
-{ "fdc", 0x04003280, 0xfc003fff, "5(s,b)", pa20, FLAG_STRICT},
-{ "fdc", 0x04001280, 0xfc00ffdf, "cZx(b)", pa10, 0},
-{ "fdc", 0x04001280, 0xfc003fdf, "cZx(s,b)", pa10, 0},
-{ "fic", 0x040013c0, 0xfc00dfdf, "cZx(b)", pa20, FLAG_STRICT},
-{ "fic", 0x04000280, 0xfc001fdf, "cZx(S,b)", pa10, 0},
-{ "fdce", 0x040012c0, 0xfc00ffdf, "cZx(b)", pa10, 0},
-{ "fdce", 0x040012c0, 0xfc003fdf, "cZx(s,b)", pa10, 0},
-{ "fice", 0x040002c0, 0xfc001fdf, "cZx(S,b)", pa10, 0},
-{ "diag", 0x14000000, 0xfc000000, "D", pa10, 0},
-{ "idtlbt", 0x04001800, 0xfc00ffff, "x,b", pa20, FLAG_STRICT},
-{ "iitlbt", 0x04000800, 0xfc00ffff, "x,b", pa20, FLAG_STRICT},
-
-/* These may be specific to certain versions of the PA. Joel claimed
- they were 72000 (7200?) specific. However, I'm almost certain the
- mtcpu/mfcpu were undocumented, but available in the older 700 machines. */
-{ "mtcpu", 0x14001600, 0xfc00ffff, "x,^", pa10, 0},
-{ "mfcpu", 0x14001A00, 0xfc00ffff, "^,x", pa10, 0},
-{ "tocen", 0x14403600, 0xffffffff, "", pa10, 0},
-{ "tocdis", 0x14401620, 0xffffffff, "", pa10, 0},
-{ "shdwgr", 0x14402600, 0xffffffff, "", pa10, 0},
-{ "grshdw", 0x14400620, 0xffffffff, "", pa10, 0},
-
-/* gfw and gfr are not in the HP PA 1.1 manual, but they are in either
- the Timex FPU or the Mustang ERS (not sure which) manual. */
-{ "gfw", 0x04001680, 0xfc00ffdf, "cZx(b)", pa11, 0},
-{ "gfw", 0x04001680, 0xfc003fdf, "cZx(s,b)", pa11, 0},
-{ "gfr", 0x04001a80, 0xfc00ffdf, "cZx(b)", pa11, 0},
-{ "gfr", 0x04001a80, 0xfc003fdf, "cZx(s,b)", pa11, 0},
-
-/* Floating Point Coprocessor Instructions. */
-
-{ "fldw", 0x24000000, 0xfc00df80, "cXx(b),fT", pa10, FLAG_STRICT},
-{ "fldw", 0x24000000, 0xfc001f80, "cXx(s,b),fT", pa10, FLAG_STRICT},
-{ "fldw", 0x24000000, 0xfc00d380, "cxccx(b),fT", pa11, FLAG_STRICT},
-{ "fldw", 0x24000000, 0xfc001380, "cxccx(s,b),fT", pa11, FLAG_STRICT},
-{ "fldw", 0x24001020, 0xfc1ff3a0, "cocc@(b),fT", pa20, FLAG_STRICT},
-{ "fldw", 0x24001020, 0xfc1f33a0, "cocc@(s,b),fT", pa20, FLAG_STRICT},
-{ "fldw", 0x24001000, 0xfc00df80, "cM5(b),fT", pa10, FLAG_STRICT},
-{ "fldw", 0x24001000, 0xfc001f80, "cM5(s,b),fT", pa10, FLAG_STRICT},
-{ "fldw", 0x24001000, 0xfc00d380, "cmcc5(b),fT", pa11, FLAG_STRICT},
-{ "fldw", 0x24001000, 0xfc001380, "cmcc5(s,b),fT", pa11, FLAG_STRICT},
-{ "fldw", 0x5c000000, 0xfc000004, "y(b),fe", pa20w, FLAG_STRICT},
-{ "fldw", 0x58000000, 0xfc000000, "cJy(b),fe", pa20w, FLAG_STRICT},
-{ "fldw", 0x5c000000, 0xfc00c004, "d(b),fe", pa20, FLAG_STRICT},
-{ "fldw", 0x5c000000, 0xfc000004, "d(s,b),fe", pa20, FLAG_STRICT},
-{ "fldw", 0x58000000, 0xfc00c000, "cJd(b),fe", pa20, FLAG_STRICT},
-{ "fldw", 0x58000000, 0xfc000000, "cJd(s,b),fe", pa20, FLAG_STRICT},
-{ "fldd", 0x2c000000, 0xfc00dfc0, "cXx(b),ft", pa10, FLAG_STRICT},
-{ "fldd", 0x2c000000, 0xfc001fc0, "cXx(s,b),ft", pa10, FLAG_STRICT},
-{ "fldd", 0x2c000000, 0xfc00d3c0, "cxccx(b),ft", pa11, FLAG_STRICT},
-{ "fldd", 0x2c000000, 0xfc0013c0, "cxccx(s,b),ft", pa11, FLAG_STRICT},
-{ "fldd", 0x2c001020, 0xfc1ff3e0, "cocc@(b),ft", pa20, FLAG_STRICT},
-{ "fldd", 0x2c001020, 0xfc1f33e0, "cocc@(s,b),ft", pa20, FLAG_STRICT},
-{ "fldd", 0x2c001000, 0xfc00dfc0, "cM5(b),ft", pa10, FLAG_STRICT},
-{ "fldd", 0x2c001000, 0xfc001fc0, "cM5(s,b),ft", pa10, FLAG_STRICT},
-{ "fldd", 0x2c001000, 0xfc00d3c0, "cmcc5(b),ft", pa11, FLAG_STRICT},
-{ "fldd", 0x2c001000, 0xfc0013c0, "cmcc5(s,b),ft", pa11, FLAG_STRICT},
-{ "fldd", 0x50000002, 0xfc000002, "cq&(b),fx", pa20w, FLAG_STRICT},
-{ "fldd", 0x50000002, 0xfc00c002, "cq#(b),fx", pa20, FLAG_STRICT},
-{ "fldd", 0x50000002, 0xfc000002, "cq#(s,b),fx", pa20, FLAG_STRICT},
-{ "fstw", 0x24000200, 0xfc00df80, "cXfT,x(b)", pa10, FLAG_STRICT},
-{ "fstw", 0x24000200, 0xfc001f80, "cXfT,x(s,b)", pa10, FLAG_STRICT},
-{ "fstw", 0x24000200, 0xfc00d380, "cxcCfT,x(b)", pa11, FLAG_STRICT},
-{ "fstw", 0x24000200, 0xfc001380, "cxcCfT,x(s,b)", pa11, FLAG_STRICT},
-{ "fstw", 0x24001220, 0xfc1ff3a0, "cocCfT,@(b)", pa20, FLAG_STRICT},
-{ "fstw", 0x24001220, 0xfc1f33a0, "cocCfT,@(s,b)", pa20, FLAG_STRICT},
-{ "fstw", 0x24001200, 0xfc00df80, "cMfT,5(b)", pa10, FLAG_STRICT},
-{ "fstw", 0x24001200, 0xfc001f80, "cMfT,5(s,b)", pa10, FLAG_STRICT},
-{ "fstw", 0x24001200, 0xfc00df80, "cMfT,5(b)", pa10, FLAG_STRICT},
-{ "fstw", 0x24001200, 0xfc001f80, "cMfT,5(s,b)", pa10, FLAG_STRICT},
-{ "fstw", 0x7c000000, 0xfc000004, "fE,y(b)", pa20w, FLAG_STRICT},
-{ "fstw", 0x78000000, 0xfc000000, "cJfE,y(b)", pa20w, FLAG_STRICT},
-{ "fstw", 0x7c000000, 0xfc00c004, "fE,d(b)", pa20, FLAG_STRICT},
-{ "fstw", 0x7c000000, 0xfc000004, "fE,d(s,b)", pa20, FLAG_STRICT},
-{ "fstw", 0x78000000, 0xfc00c000, "cJfE,d(b)", pa20, FLAG_STRICT},
-{ "fstw", 0x78000000, 0xfc000000, "cJfE,d(s,b)", pa20, FLAG_STRICT},
-{ "fstd", 0x2c000200, 0xfc00dfc0, "cXft,x(b)", pa10, FLAG_STRICT},
-{ "fstd", 0x2c000200, 0xfc001fc0, "cXft,x(s,b)", pa10, FLAG_STRICT},
-{ "fstd", 0x2c000200, 0xfc00d3c0, "cxcCft,x(b)", pa11, FLAG_STRICT},
-{ "fstd", 0x2c000200, 0xfc0013c0, "cxcCft,x(s,b)", pa11, FLAG_STRICT},
-{ "fstd", 0x2c001220, 0xfc1ff3e0, "cocCft,@(b)", pa20, FLAG_STRICT},
-{ "fstd", 0x2c001220, 0xfc1f33e0, "cocCft,@(s,b)", pa20, FLAG_STRICT},
-{ "fstd", 0x2c001200, 0xfc00dfc0, "cMft,5(b)", pa10, FLAG_STRICT},
-{ "fstd", 0x2c001200, 0xfc001fc0, "cMft,5(s,b)", pa10, FLAG_STRICT},
-{ "fstd", 0x2c001200, 0xfc00d3c0, "cmcCft,5(b)", pa11, FLAG_STRICT},
-{ "fstd", 0x2c001200, 0xfc0013c0, "cmcCft,5(s,b)", pa11, FLAG_STRICT},
-{ "fstd", 0x70000002, 0xfc000002, "cqfx,&(b)", pa20w, FLAG_STRICT},
-{ "fstd", 0x70000002, 0xfc00c002, "cqfx,#(b)", pa20, FLAG_STRICT},
-{ "fstd", 0x70000002, 0xfc000002, "cqfx,#(s,b)", pa20, FLAG_STRICT},
-{ "fldwx", 0x24000000, 0xfc00df80, "cXx(b),fT", pa10, FLAG_STRICT},
-{ "fldwx", 0x24000000, 0xfc001f80, "cXx(s,b),fT", pa10, FLAG_STRICT},
-{ "fldwx", 0x24000000, 0xfc00d380, "cxccx(b),fT", pa11, FLAG_STRICT},
-{ "fldwx", 0x24000000, 0xfc001380, "cxccx(s,b),fT", pa11, FLAG_STRICT},
-{ "fldwx", 0x24000000, 0xfc00df80, "cXx(b),fT", pa10, 0},
-{ "fldwx", 0x24000000, 0xfc001f80, "cXx(s,b),fT", pa10, 0},
-{ "flddx", 0x2c000000, 0xfc00dfc0, "cXx(b),ft", pa10, FLAG_STRICT},
-{ "flddx", 0x2c000000, 0xfc001fc0, "cXx(s,b),ft", pa10, FLAG_STRICT},
-{ "flddx", 0x2c000000, 0xfc00d3c0, "cxccx(b),ft", pa11, FLAG_STRICT},
-{ "flddx", 0x2c000000, 0xfc0013c0, "cxccx(s,b),ft", pa11, FLAG_STRICT},
-{ "flddx", 0x2c000000, 0xfc00dfc0, "cXx(b),ft", pa10, 0},
-{ "flddx", 0x2c000000, 0xfc001fc0, "cXx(s,b),ft", pa10, 0},
-{ "fstwx", 0x24000200, 0xfc00df80, "cxfT,x(b)", pa10, FLAG_STRICT},
-{ "fstwx", 0x24000200, 0xfc001f80, "cxfT,x(s,b)", pa10, FLAG_STRICT},
-{ "fstwx", 0x24000200, 0xfc00d380, "cxcCfT,x(b)", pa11, FLAG_STRICT},
-{ "fstwx", 0x24000200, 0xfc001380, "cxcCfT,x(s,b)", pa11, FLAG_STRICT},
-{ "fstwx", 0x24000200, 0xfc00df80, "cxfT,x(b)", pa10, 0},
-{ "fstwx", 0x24000200, 0xfc001f80, "cxfT,x(s,b)", pa10, 0},
-{ "fstdx", 0x2c000200, 0xfc00dfc0, "cxft,x(b)", pa10, FLAG_STRICT},
-{ "fstdx", 0x2c000200, 0xfc001fc0, "cxft,x(s,b)", pa10, FLAG_STRICT},
-{ "fstdx", 0x2c000200, 0xfc00d3c0, "cxcCft,x(b)", pa11, FLAG_STRICT},
-{ "fstdx", 0x2c000200, 0xfc0013c0, "cxcCft,x(s,b)", pa11, FLAG_STRICT},
-{ "fstdx", 0x2c000200, 0xfc00dfc0, "cxft,x(b)", pa10, 0},
-{ "fstdx", 0x2c000200, 0xfc001fc0, "cxft,x(s,b)", pa10, 0},
-{ "fstqx", 0x3c000200, 0xfc00dfc0, "cXft,x(b)", pa10, 0},
-{ "fstqx", 0x3c000200, 0xfc001fc0, "cXft,x(s,b)", pa10, 0},
-{ "fldws", 0x24001000, 0xfc00df80, "cm5(b),fT", pa10, FLAG_STRICT},
-{ "fldws", 0x24001000, 0xfc001f80, "cm5(s,b),fT", pa10, FLAG_STRICT},
-{ "fldws", 0x24001000, 0xfc00d380, "cmcc5(b),fT", pa11, FLAG_STRICT},
-{ "fldws", 0x24001000, 0xfc001380, "cmcc5(s,b),fT", pa11, FLAG_STRICT},
-{ "fldws", 0x24001000, 0xfc00df80, "cm5(b),fT", pa10, 0},
-{ "fldws", 0x24001000, 0xfc001f80, "cm5(s,b),fT", pa10, 0},
-{ "fldds", 0x2c001000, 0xfc00dfc0, "cm5(b),ft", pa10, FLAG_STRICT},
-{ "fldds", 0x2c001000, 0xfc001fc0, "cm5(s,b),ft", pa10, FLAG_STRICT},
-{ "fldds", 0x2c001000, 0xfc00d3c0, "cmcc5(b),ft", pa11, FLAG_STRICT},
-{ "fldds", 0x2c001000, 0xfc0013c0, "cmcc5(s,b),ft", pa11, FLAG_STRICT},
-{ "fldds", 0x2c001000, 0xfc00dfc0, "cm5(b),ft", pa10, 0},
-{ "fldds", 0x2c001000, 0xfc001fc0, "cm5(s,b),ft", pa10, 0},
-{ "fstws", 0x24001200, 0xfc00df80, "cmfT,5(b)", pa10, FLAG_STRICT},
-{ "fstws", 0x24001200, 0xfc001f80, "cmfT,5(s,b)", pa10, FLAG_STRICT},
-{ "fstws", 0x24001200, 0xfc00d380, "cmcCfT,5(b)", pa11, FLAG_STRICT},
-{ "fstws", 0x24001200, 0xfc001380, "cmcCfT,5(s,b)", pa11, FLAG_STRICT},
-{ "fstws", 0x24001200, 0xfc00df80, "cmfT,5(b)", pa10, 0},
-{ "fstws", 0x24001200, 0xfc001f80, "cmfT,5(s,b)", pa10, 0},
-{ "fstds", 0x2c001200, 0xfc00dfc0, "cmft,5(b)", pa10, FLAG_STRICT},
-{ "fstds", 0x2c001200, 0xfc001fc0, "cmft,5(s,b)", pa10, FLAG_STRICT},
-{ "fstds", 0x2c001200, 0xfc00d3c0, "cmcCft,5(b)", pa11, FLAG_STRICT},
-{ "fstds", 0x2c001200, 0xfc0013c0, "cmcCft,5(s,b)", pa11, FLAG_STRICT},
-{ "fstds", 0x2c001200, 0xfc00dfc0, "cmft,5(b)", pa10, 0},
-{ "fstds", 0x2c001200, 0xfc001fc0, "cmft,5(s,b)", pa10, 0},
-{ "fstqs", 0x3c001200, 0xfc00dfc0, "cMft,5(b)", pa10, 0},
-{ "fstqs", 0x3c001200, 0xfc001fc0, "cMft,5(s,b)", pa10, 0},
-{ "fadd", 0x30000600, 0xfc00e7e0, "Ffa,fb,fT", pa10, 0},
-{ "fadd", 0x38000600, 0xfc00e720, "IfA,fB,fT", pa10, 0},
-{ "fsub", 0x30002600, 0xfc00e7e0, "Ffa,fb,fT", pa10, 0},
-{ "fsub", 0x38002600, 0xfc00e720, "IfA,fB,fT", pa10, 0},
-{ "fmpy", 0x30004600, 0xfc00e7e0, "Ffa,fb,fT", pa10, 0},
-{ "fmpy", 0x38004600, 0xfc00e720, "IfA,fB,fT", pa10, 0},
-{ "fdiv", 0x30006600, 0xfc00e7e0, "Ffa,fb,fT", pa10, 0},
-{ "fdiv", 0x38006600, 0xfc00e720, "IfA,fB,fT", pa10, 0},
-{ "fsqrt", 0x30008000, 0xfc1fe7e0, "Ffa,fT", pa10, 0},
-{ "fsqrt", 0x38008000, 0xfc1fe720, "FfA,fT", pa10, 0},
-{ "fabs", 0x30006000, 0xfc1fe7e0, "Ffa,fT", pa10, 0},
-{ "fabs", 0x38006000, 0xfc1fe720, "FfA,fT", pa10, 0},
-{ "frem", 0x30008600, 0xfc00e7e0, "Ffa,fb,fT", pa10, 0},
-{ "frem", 0x38008600, 0xfc00e720, "FfA,fB,fT", pa10, 0},
-{ "frnd", 0x3000a000, 0xfc1fe7e0, "Ffa,fT", pa10, 0},
-{ "frnd", 0x3800a000, 0xfc1fe720, "FfA,fT", pa10, 0},
-{ "fcpy", 0x30004000, 0xfc1fe7e0, "Ffa,fT", pa10, 0},
-{ "fcpy", 0x38004000, 0xfc1fe720, "FfA,fT", pa10, 0},
-{ "fcnvff", 0x30000200, 0xfc1f87e0, "FGfa,fT", pa10, 0},
-{ "fcnvff", 0x38000200, 0xfc1f8720, "FGfA,fT", pa10, 0},
-{ "fcnvxf", 0x30008200, 0xfc1f87e0, "FGfa,fT", pa10, 0},
-{ "fcnvxf", 0x38008200, 0xfc1f8720, "FGfA,fT", pa10, 0},
-{ "fcnvfx", 0x30010200, 0xfc1f87e0, "FGfa,fT", pa10, 0},
-{ "fcnvfx", 0x38010200, 0xfc1f8720, "FGfA,fT", pa10, 0},
-{ "fcnvfxt", 0x30018200, 0xfc1f87e0, "FGfa,fT", pa10, 0},
-{ "fcnvfxt", 0x38018200, 0xfc1f8720, "FGfA,fT", pa10, 0},
-{ "fmpyfadd", 0xb8000000, 0xfc000020, "IfA,fB,fC,fT", pa20, FLAG_STRICT},
-{ "fmpynfadd", 0xb8000020, 0xfc000020, "IfA,fB,fC,fT", pa20, FLAG_STRICT},
-{ "fneg", 0x3000c000, 0xfc1fe7e0, "Ffa,fT", pa20, FLAG_STRICT},
-{ "fneg", 0x3800c000, 0xfc1fe720, "IfA,fT", pa20, FLAG_STRICT},
-{ "fnegabs", 0x3000e000, 0xfc1fe7e0, "Ffa,fT", pa20, FLAG_STRICT},
-{ "fnegabs", 0x3800e000, 0xfc1fe720, "IfA,fT", pa20, FLAG_STRICT},
-{ "fcnv", 0x30000200, 0xfc1c0720, "{_fa,fT", pa20, FLAG_STRICT},
-{ "fcnv", 0x38000200, 0xfc1c0720, "FGfA,fT", pa20, FLAG_STRICT},
-{ "fcmp", 0x30000400, 0xfc00e7e0, "F?ffa,fb", pa10, FLAG_STRICT},
-{ "fcmp", 0x38000400, 0xfc00e720, "I?ffA,fB", pa10, FLAG_STRICT},
-{ "fcmp", 0x30000400, 0xfc0007e0, "F?ffa,fb,h", pa20, FLAG_STRICT},
-{ "fcmp", 0x38000400, 0xfc000720, "I?ffA,fB,h", pa20, FLAG_STRICT},
-{ "fcmp", 0x30000400, 0xfc00e7e0, "F?ffa,fb", pa10, 0},
-{ "fcmp", 0x38000400, 0xfc00e720, "I?ffA,fB", pa10, 0},
-{ "xmpyu", 0x38004700, 0xfc00e720, "fX,fB,fT", pa11, 0},
-{ "fmpyadd", 0x18000000, 0xfc000000, "Hfi,fj,fk,fl,fm", pa11, 0},
-{ "fmpysub", 0x98000000, 0xfc000000, "Hfi,fj,fk,fl,fm", pa11, 0},
-{ "ftest", 0x30002420, 0xffffffff, "", pa10, FLAG_STRICT},
-{ "ftest", 0x30002420, 0xffffffe0, ",=", pa20, FLAG_STRICT},
-{ "ftest", 0x30000420, 0xffff1fff, "m", pa20, FLAG_STRICT},
-{ "fid", 0x30000000, 0xffffffff, "", pa11, 0},
-
-/* Performance Monitor Instructions. */
-
-{ "pmdis", 0x30000280, 0xffffffdf, "N", pa20, FLAG_STRICT},
-{ "pmenb", 0x30000680, 0xffffffff, "", pa20, FLAG_STRICT},
-
-/* Assist Instructions. */
-
-{ "spop0", 0x10000000, 0xfc000600, "v,ON", pa10, 0},
-{ "spop1", 0x10000200, 0xfc000600, "v,oNt", pa10, 0},
-{ "spop2", 0x10000400, 0xfc000600, "v,1Nb", pa10, 0},
-{ "spop3", 0x10000600, 0xfc000600, "v,0Nx,b", pa10, 0},
-{ "copr", 0x30000000, 0xfc000000, "u,2N", pa10, 0},
-{ "cldw", 0x24000000, 0xfc00de00, "ucXx(b),t", pa10, FLAG_STRICT},
-{ "cldw", 0x24000000, 0xfc001e00, "ucXx(s,b),t", pa10, FLAG_STRICT},
-{ "cldw", 0x24000000, 0xfc00d200, "ucxccx(b),t", pa11, FLAG_STRICT},
-{ "cldw", 0x24000000, 0xfc001200, "ucxccx(s,b),t", pa11, FLAG_STRICT},
-{ "cldw", 0x24001000, 0xfc00d200, "ucocc@(b),t", pa20, FLAG_STRICT},
-{ "cldw", 0x24001000, 0xfc001200, "ucocc@(s,b),t", pa20, FLAG_STRICT},
-{ "cldw", 0x24001000, 0xfc00de00, "ucM5(b),t", pa10, FLAG_STRICT},
-{ "cldw", 0x24001000, 0xfc001e00, "ucM5(s,b),t", pa10, FLAG_STRICT},
-{ "cldw", 0x24001000, 0xfc00d200, "ucmcc5(b),t", pa11, FLAG_STRICT},
-{ "cldw", 0x24001000, 0xfc001200, "ucmcc5(s,b),t", pa11, FLAG_STRICT},
-{ "cldd", 0x2c000000, 0xfc00de00, "ucXx(b),t", pa10, FLAG_STRICT},
-{ "cldd", 0x2c000000, 0xfc001e00, "ucXx(s,b),t", pa10, FLAG_STRICT},
-{ "cldd", 0x2c000000, 0xfc00d200, "ucxccx(b),t", pa11, FLAG_STRICT},
-{ "cldd", 0x2c000000, 0xfc001200, "ucxccx(s,b),t", pa11, FLAG_STRICT},
-{ "cldd", 0x2c001000, 0xfc00d200, "ucocc@(b),t", pa20, FLAG_STRICT},
-{ "cldd", 0x2c001000, 0xfc001200, "ucocc@(s,b),t", pa20, FLAG_STRICT},
-{ "cldd", 0x2c001000, 0xfc00de00, "ucM5(b),t", pa10, FLAG_STRICT},
-{ "cldd", 0x2c001000, 0xfc001e00, "ucM5(s,b),t", pa10, FLAG_STRICT},
-{ "cldd", 0x2c001000, 0xfc00d200, "ucmcc5(b),t", pa11, FLAG_STRICT},
-{ "cldd", 0x2c001000, 0xfc001200, "ucmcc5(s,b),t", pa11, FLAG_STRICT},
-{ "cstw", 0x24000200, 0xfc00de00, "ucXt,x(b)", pa10, FLAG_STRICT},
-{ "cstw", 0x24000200, 0xfc001e00, "ucXt,x(s,b)", pa10, FLAG_STRICT},
-{ "cstw", 0x24000200, 0xfc00d200, "ucxcCt,x(b)", pa11, FLAG_STRICT},
-{ "cstw", 0x24000200, 0xfc001200, "ucxcCt,x(s,b)", pa11, FLAG_STRICT},
-{ "cstw", 0x24001200, 0xfc00d200, "ucocCt,@(b)", pa20, FLAG_STRICT},
-{ "cstw", 0x24001200, 0xfc001200, "ucocCt,@(s,b)", pa20, FLAG_STRICT},
-{ "cstw", 0x24001200, 0xfc00de00, "ucMt,5(b)", pa10, FLAG_STRICT},
-{ "cstw", 0x24001200, 0xfc001e00, "ucMt,5(s,b)", pa10, FLAG_STRICT},
-{ "cstw", 0x24001200, 0xfc00d200, "ucmcCt,5(b)", pa11, FLAG_STRICT},
-{ "cstw", 0x24001200, 0xfc001200, "ucmcCt,5(s,b)", pa11, FLAG_STRICT},
-{ "cstd", 0x2c000200, 0xfc00de00, "ucXt,x(b)", pa10, FLAG_STRICT},
-{ "cstd", 0x2c000200, 0xfc001e00, "ucXt,x(s,b)", pa10, FLAG_STRICT},
-{ "cstd", 0x2c000200, 0xfc00d200, "ucxcCt,x(b)", pa11, FLAG_STRICT},
-{ "cstd", 0x2c000200, 0xfc001200, "ucxcCt,x(s,b)", pa11, FLAG_STRICT},
-{ "cstd", 0x2c001200, 0xfc00d200, "ucocCt,@(b)", pa20, FLAG_STRICT},
-{ "cstd", 0x2c001200, 0xfc001200, "ucocCt,@(s,b)", pa20, FLAG_STRICT},
-{ "cstd", 0x2c001200, 0xfc00de00, "ucMt,5(b)", pa10, FLAG_STRICT},
-{ "cstd", 0x2c001200, 0xfc001e00, "ucMt,5(s,b)", pa10, FLAG_STRICT},
-{ "cstd", 0x2c001200, 0xfc00d200, "ucmcCt,5(b)", pa11, FLAG_STRICT},
-{ "cstd", 0x2c001200, 0xfc001200, "ucmcCt,5(s,b)", pa11, FLAG_STRICT},
-{ "cldwx", 0x24000000, 0xfc00de00, "ucXx(b),t", pa10, FLAG_STRICT},
-{ "cldwx", 0x24000000, 0xfc001e00, "ucXx(s,b),t", pa10, FLAG_STRICT},
-{ "cldwx", 0x24000000, 0xfc00d200, "ucxccx(b),t", pa11, FLAG_STRICT},
-{ "cldwx", 0x24000000, 0xfc001200, "ucxccx(s,b),t", pa11, FLAG_STRICT},
-{ "cldwx", 0x24000000, 0xfc00de00, "ucXx(b),t", pa10, 0},
-{ "cldwx", 0x24000000, 0xfc001e00, "ucXx(s,b),t", pa10, 0},
-{ "clddx", 0x2c000000, 0xfc00de00, "ucXx(b),t", pa10, FLAG_STRICT},
-{ "clddx", 0x2c000000, 0xfc001e00, "ucXx(s,b),t", pa10, FLAG_STRICT},
-{ "clddx", 0x2c000000, 0xfc00d200, "ucxccx(b),t", pa11, FLAG_STRICT},
-{ "clddx", 0x2c000000, 0xfc001200, "ucxccx(s,b),t", pa11, FLAG_STRICT},
-{ "clddx", 0x2c000000, 0xfc00de00, "ucXx(b),t", pa10, 0},
-{ "clddx", 0x2c000000, 0xfc001e00, "ucXx(s,b),t", pa10, 0},
-{ "cstwx", 0x24000200, 0xfc00de00, "ucXt,x(b)", pa10, FLAG_STRICT},
-{ "cstwx", 0x24000200, 0xfc001e00, "ucXt,x(s,b)", pa10, FLAG_STRICT},
-{ "cstwx", 0x24000200, 0xfc00d200, "ucxcCt,x(b)", pa11, FLAG_STRICT},
-{ "cstwx", 0x24000200, 0xfc001200, "ucxcCt,x(s,b)", pa11, FLAG_STRICT},
-{ "cstwx", 0x24000200, 0xfc00de00, "ucXt,x(b)", pa10, 0},
-{ "cstwx", 0x24000200, 0xfc001e00, "ucXt,x(s,b)", pa10, 0},
-{ "cstdx", 0x2c000200, 0xfc00de00, "ucXt,x(b)", pa10, FLAG_STRICT},
-{ "cstdx", 0x2c000200, 0xfc001e00, "ucXt,x(s,b)", pa10, FLAG_STRICT},
-{ "cstdx", 0x2c000200, 0xfc00d200, "ucxcCt,x(b)", pa11, FLAG_STRICT},
-{ "cstdx", 0x2c000200, 0xfc001200, "ucxcCt,x(s,b)", pa11, FLAG_STRICT},
-{ "cstdx", 0x2c000200, 0xfc00de00, "ucXt,x(b)", pa10, 0},
-{ "cstdx", 0x2c000200, 0xfc001e00, "ucXt,x(s,b)", pa10, 0},
-{ "cldws", 0x24001000, 0xfc00de00, "ucM5(b),t", pa10, FLAG_STRICT},
-{ "cldws", 0x24001000, 0xfc001e00, "ucM5(s,b),t", pa10, FLAG_STRICT},
-{ "cldws", 0x24001000, 0xfc00d200, "ucmcc5(b),t", pa11, FLAG_STRICT},
-{ "cldws", 0x24001000, 0xfc001200, "ucmcc5(s,b),t", pa11, FLAG_STRICT},
-{ "cldws", 0x24001000, 0xfc00de00, "ucM5(b),t", pa10, 0},
-{ "cldws", 0x24001000, 0xfc001e00, "ucM5(s,b),t", pa10, 0},
-{ "cldds", 0x2c001000, 0xfc00de00, "ucM5(b),t", pa10, FLAG_STRICT},
-{ "cldds", 0x2c001000, 0xfc001e00, "ucM5(s,b),t", pa10, FLAG_STRICT},
-{ "cldds", 0x2c001000, 0xfc00d200, "ucmcc5(b),t", pa11, FLAG_STRICT},
-{ "cldds", 0x2c001000, 0xfc001200, "ucmcc5(s,b),t", pa11, FLAG_STRICT},
-{ "cldds", 0x2c001000, 0xfc00de00, "ucM5(b),t", pa10, 0},
-{ "cldds", 0x2c001000, 0xfc001e00, "ucM5(s,b),t", pa10, 0},
-{ "cstws", 0x24001200, 0xfc00de00, "ucMt,5(b)", pa10, FLAG_STRICT},
-{ "cstws", 0x24001200, 0xfc001e00, "ucMt,5(s,b)", pa10, FLAG_STRICT},
-{ "cstws", 0x24001200, 0xfc00d200, "ucmcCt,5(b)", pa11, FLAG_STRICT},
-{ "cstws", 0x24001200, 0xfc001200, "ucmcCt,5(s,b)", pa11, FLAG_STRICT},
-{ "cstws", 0x24001200, 0xfc00de00, "ucMt,5(b)", pa10, 0},
-{ "cstws", 0x24001200, 0xfc001e00, "ucMt,5(s,b)", pa10, 0},
-{ "cstds", 0x2c001200, 0xfc00de00, "ucMt,5(b)", pa10, FLAG_STRICT},
-{ "cstds", 0x2c001200, 0xfc001e00, "ucMt,5(s,b)", pa10, FLAG_STRICT},
-{ "cstds", 0x2c001200, 0xfc00d200, "ucmcCt,5(b)", pa11, FLAG_STRICT},
-{ "cstds", 0x2c001200, 0xfc001200, "ucmcCt,5(s,b)", pa11, FLAG_STRICT},
-{ "cstds", 0x2c001200, 0xfc00de00, "ucMt,5(b)", pa10, 0},
-{ "cstds", 0x2c001200, 0xfc001e00, "ucMt,5(s,b)", pa10, 0},
-
-/* More pseudo instructions which must follow the main table. */
-{ "call", 0xe800f000, 0xfc1ffffd, "n(b)", pa20, FLAG_STRICT},
-{ "call", 0xe800a000, 0xffe0e000, "nW", pa10, FLAG_STRICT},
-{ "ret", 0xe840d000, 0xfffffffd, "n", pa20, FLAG_STRICT},
-
-};
-
-#define NUMOPCODES ((sizeof pa_opcodes)/(sizeof pa_opcodes[0]))
-
-/* SKV 12/18/92. Added some denotations for various operands. */
-
-#define PA_IMM11_AT_31 'i'
-#define PA_IMM14_AT_31 'j'
-#define PA_IMM21_AT_31 'k'
-#define PA_DISP12 'w'
-#define PA_DISP17 'W'
-
-#define N_HPPA_OPERAND_FORMATS 5
diff --git a/include/opcode/i370.h b/include/opcode/i370.h
deleted file mode 100644
index e3b7166d2..000000000
--- a/include/opcode/i370.h
+++ /dev/null
@@ -1,267 +0,0 @@
-/* i370.h -- Header file for S/390 opcode table
- Copyright 1994, 1995, 1998, 1999, 2000, 2003, 2010
- Free Software Foundation, Inc.
- PowerPC version written by Ian Lance Taylor, Cygnus Support
- Rewritten for i370 ESA/390 support, Linas Vepstas <linas@linas.org>
-
- This file is part of GDB, GAS, and the GNU binutils.
-
- GDB, GAS, and the GNU binutils are free software; you can redistribute
- them and/or modify them under the terms of the GNU General Public
- License as published by the Free Software Foundation; either version 3,
- or (at your option) any later version.
-
- GDB, GAS, and the GNU binutils are distributed in the hope that they
- 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 file; see the file COPYING3. If not, write to the Free
- Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef I370_H
-#define I370_H
-
-/* The opcode table is an array of struct i370_opcode. */
-typedef union
-{
- unsigned int i[2];
- unsigned short s[4];
- unsigned char b[8];
-} i370_insn_t;
-
-struct i370_opcode
-{
- /* The opcode name. */
- const char *name;
-
- /* the length of the instruction */
- char len;
-
- /* The opcode itself. Those bits which will be filled in with
- operands are zeroes. */
- i370_insn_t opcode;
-
- /* The opcode mask. This is used by the disassembler. This is a
- mask containing ones indicating those bits which must match the
- opcode field, and zeroes indicating those bits which need not
- match (and are presumably filled in by operands). */
- i370_insn_t mask;
-
- /* One bit flags for the opcode. These are used to indicate which
- specific processors support the instructions. The defined values
- are listed below. */
- unsigned long flags;
-
- /* An array of operand codes. Each code is an index into the
- operand table. They appear in the order which the operands must
- appear in assembly code, and are terminated by a zero. */
- unsigned char operands[8];
-};
-
-/* The table itself is sorted by major opcode number, and is otherwise
- in the order in which the disassembler should consider
- instructions. */
-extern const struct i370_opcode i370_opcodes[];
-extern const int i370_num_opcodes;
-
-/* Values defined for the flags field of a struct i370_opcode. */
-
-/* Opcode is defined for the original 360 architecture. */
-#define I370_OPCODE_360 (0x01)
-
-/* Opcode is defined for the 370 architecture. */
-#define I370_OPCODE_370 (0x02)
-
-/* Opcode is defined for the 370-XA architecture. */
-#define I370_OPCODE_370_XA (0x04)
-
-/* Opcode is defined for the ESA/370 architecture. */
-#define I370_OPCODE_ESA370 (0x08)
-
-/* Opcode is defined for the ESA/390 architecture. */
-#define I370_OPCODE_ESA390 (0x10)
-
-/* Opcode is defined for the ESA/390 w/ BFP facility. */
-#define I370_OPCODE_ESA390_BF (0x20)
-
-/* Opcode is defined for the ESA/390 w/ branch & set authority facility. */
-#define I370_OPCODE_ESA390_BS (0x40)
-
-/* Opcode is defined for the ESA/390 w/ checksum facility. */
-#define I370_OPCODE_ESA390_CK (0x80)
-
-/* Opcode is defined for the ESA/390 w/ compare & move extended facility. */
-#define I370_OPCODE_ESA390_CM (0x100)
-
-/* Opcode is defined for the ESA/390 w/ flt.pt. support extensions facility. */
-#define I370_OPCODE_ESA390_FX (0x200)
-
-/* Opcode is defined for the ESA/390 w/ HFP facility. */
-#define I370_OPCODE_ESA390_HX (0x400)
-
-/* Opcode is defined for the ESA/390 w/ immediate & relative facility. */
-#define I370_OPCODE_ESA390_IR (0x800)
-
-/* Opcode is defined for the ESA/390 w/ move-inverse facility. */
-#define I370_OPCODE_ESA390_MI (0x1000)
-
-/* Opcode is defined for the ESA/390 w/ program-call-fast facility. */
-#define I370_OPCODE_ESA390_PC (0x2000)
-
-/* Opcode is defined for the ESA/390 w/ perform-locked-op facility. */
-#define I370_OPCODE_ESA390_PL (0x4000)
-
-/* Opcode is defined for the ESA/390 w/ square-root facility. */
-#define I370_OPCODE_ESA390_QR (0x8000)
-
-/* Opcode is defined for the ESA/390 w/ resume-program facility. */
-#define I370_OPCODE_ESA390_RP (0x10000)
-
-/* Opcode is defined for the ESA/390 w/ set-address-space-fast facility. */
-#define I370_OPCODE_ESA390_SA (0x20000)
-
-/* Opcode is defined for the ESA/390 w/ subspace group facility. */
-#define I370_OPCODE_ESA390_SG (0x40000)
-
-/* Opcode is defined for the ESA/390 w/ string facility. */
-#define I370_OPCODE_ESA390_SR (0x80000)
-
-/* Opcode is defined for the ESA/390 w/ trap facility. */
-#define I370_OPCODE_ESA390_TR (0x100000)
-
-#define I370_OPCODE_ESA390_SUPERSET (0x1fffff)
-
-
-/* The operands table is an array of struct i370_operand. */
-
-struct i370_operand
-{
- /* The number of bits in the operand. */
- int bits;
-
- /* How far the operand is left shifted in the instruction. */
- int shift;
-
- /* Insertion function. This is used by the assembler. To insert an
- operand value into an instruction, check this field.
-
- If it is NULL, execute
- i |= (op & ((1 << o->bits) - 1)) << o->shift;
- (i is the instruction which we are filling in, o is a pointer to
- this structure, and op is the opcode value; this assumes twos
- complement arithmetic).
-
- If this field is not NULL, then simply call it with the
- instruction and the operand value. It will return the new value
- of the instruction. If the ERRMSG argument is not NULL, then if
- the operand value is illegal, *ERRMSG will be set to a warning
- string (the operand will be inserted in any case). If the
- operand value is legal, *ERRMSG will be unchanged (most operands
- can accept any value). */
- i370_insn_t (*insert)
- (i370_insn_t instruction, long op, const char **errmsg);
-
- /* Extraction function. This is used by the disassembler. To
- extract this operand type from an instruction, check this field.
-
- If it is NULL, compute
- op = ((i) >> o->shift) & ((1 << o->bits) - 1);
- if ((o->flags & I370_OPERAND_SIGNED) != 0
- && (op & (1 << (o->bits - 1))) != 0)
- op -= 1 << o->bits;
- (i is the instruction, o is a pointer to this structure, and op
- is the result; this assumes twos complement arithmetic).
-
- If this field is not NULL, then simply call it with the
- instruction value. It will return the value of the operand. If
- the INVALID argument is not NULL, *INVALID will be set to
- non-zero if this operand type can not actually be extracted from
- this operand (i.e., the instruction does not match). If the
- operand is valid, *INVALID will not be changed. */
- long (*extract) (i370_insn_t instruction, int *invalid);
-
- /* One bit syntax flags. */
- unsigned long flags;
-
- /* name -- handy for debugging, otherwise pointless */
- char * name;
-};
-
-/* Elements in the table are retrieved by indexing with values from
- the operands field of the i370_opcodes table. */
-
-extern const struct i370_operand i370_operands[];
-
-/* Values defined for the flags field of a struct i370_operand. */
-
-/* This operand should be wrapped in parentheses rather than
- separated from the previous by a comma. This is used for S, RS and
- SS form instructions which want their operands to look like
- reg,displacement(basereg) */
-#define I370_OPERAND_SBASE (0x01)
-
-/* This operand is a base register. It may or may not appear next
- to an index register, i.e. either of the two forms
- reg,displacement(basereg)
- reg,displacement(index,basereg) */
-#define I370_OPERAND_BASE (0x02)
-
-/* This pair of operands should be wrapped in parentheses rather than
- separated from the last by a comma. This is used for the RX form
- instructions which want their operands to look like
- reg,displacement(index,basereg) */
-#define I370_OPERAND_INDEX (0x04)
-
-/* This operand names a register. The disassembler uses this to print
- register names with a leading 'r'. */
-#define I370_OPERAND_GPR (0x08)
-
-/* This operand names a floating point register. The disassembler
- prints these with a leading 'f'. */
-#define I370_OPERAND_FPR (0x10)
-
-/* This operand is a displacement. */
-#define I370_OPERAND_RELATIVE (0x20)
-
-/* This operand is a length, such as that in SS form instructions. */
-#define I370_OPERAND_LENGTH (0x40)
-
-/* This operand is optional, and is zero if omitted. This is used for
- the optional B2 field in the shift-left, shift-right instructions. The
- assembler must count the number of operands remaining on the line,
- and the number of operands remaining for the opcode, and decide
- whether this operand is present or not. The disassembler should
- print this operand out only if it is not zero. */
-#define I370_OPERAND_OPTIONAL (0x80)
-
-
-/* Define some misc macros. We keep them with the operands table
- for simplicity. The macro table is an array of struct i370_macro. */
-
-struct i370_macro
-{
- /* The macro name. */
- const char *name;
-
- /* The number of operands the macro takes. */
- unsigned int operands;
-
- /* One bit flags for the opcode. These are used to indicate which
- specific processors support the instructions. The values are the
- same as those for the struct i370_opcode flags field. */
- unsigned long flags;
-
- /* A format string to turn the macro into a normal instruction.
- Each %N in the string is replaced with operand number N (zero
- based). */
- const char *format;
-};
-
-extern const struct i370_macro i370_macros[];
-extern const int i370_num_macros;
-
-
-#endif /* I370_H */
diff --git a/include/opcode/i386.h b/include/opcode/i386.h
deleted file mode 100644
index 6021002bc..000000000
--- a/include/opcode/i386.h
+++ /dev/null
@@ -1,148 +0,0 @@
-/* opcode/i386.h -- Intel 80386 opcode macros
- Copyright 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
- Free Software Foundation, Inc.
-
- This file is part of GAS, the GNU Assembler, and GDB, the GNU Debugger.
-
- 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-/* The SystemV/386 SVR3.2 assembler, and probably all AT&T derived
- ix86 Unix assemblers, generate floating point instructions with
- reversed source and destination registers in certain cases.
- Unfortunately, gcc and possibly many other programs use this
- reversed syntax, so we're stuck with it.
-
- eg. `fsub %st(3),%st' results in st = st - st(3) as expected, but
- `fsub %st,%st(3)' results in st(3) = st - st(3), rather than
- the expected st(3) = st(3) - st
-
- This happens with all the non-commutative arithmetic floating point
- operations with two register operands, where the source register is
- %st, and destination register is %st(i).
-
- The affected opcode map is dceX, dcfX, deeX, defX. */
-
-#ifndef OPCODE_I386_H
-#define OPCODE_I386_H
-
-#ifndef SYSV386_COMPAT
-/* Set non-zero for broken, compatible instructions. Set to zero for
- non-broken opcodes at your peril. gcc generates SystemV/386
- compatible instructions. */
-#define SYSV386_COMPAT 1
-#endif
-#ifndef OLDGCC_COMPAT
-/* Set non-zero to cater for old (<= 2.8.1) versions of gcc that could
- generate nonsense fsubp, fsubrp, fdivp and fdivrp with operands
- reversed. */
-#define OLDGCC_COMPAT SYSV386_COMPAT
-#endif
-
-#define MOV_AX_DISP32 0xa0
-#define POP_SEG_SHORT 0x07
-#define JUMP_PC_RELATIVE 0xeb
-#define INT_OPCODE 0xcd
-#define INT3_OPCODE 0xcc
-/* The opcode for the fwait instruction, which disassembler treats as a
- prefix when it can. */
-#define FWAIT_OPCODE 0x9b
-
-/* Instruction prefixes.
- NOTE: For certain SSE* instructions, 0x66,0xf2,0xf3 are treated as
- part of the opcode. Other prefixes may still appear between them
- and the 0x0f part of the opcode. */
-#define ADDR_PREFIX_OPCODE 0x67
-#define DATA_PREFIX_OPCODE 0x66
-#define LOCK_PREFIX_OPCODE 0xf0
-#define CS_PREFIX_OPCODE 0x2e
-#define DS_PREFIX_OPCODE 0x3e
-#define ES_PREFIX_OPCODE 0x26
-#define FS_PREFIX_OPCODE 0x64
-#define GS_PREFIX_OPCODE 0x65
-#define SS_PREFIX_OPCODE 0x36
-#define REPNE_PREFIX_OPCODE 0xf2
-#define REPE_PREFIX_OPCODE 0xf3
-#define XACQUIRE_PREFIX_OPCODE 0xf2
-#define XRELEASE_PREFIX_OPCODE 0xf3
-#define BND_PREFIX_OPCODE 0xf2
-
-#define TWO_BYTE_OPCODE_ESCAPE 0x0f
-#define NOP_OPCODE (char) 0x90
-
-/* register numbers */
-#define EAX_REG_NUM 0
-#define ECX_REG_NUM 1
-#define EDX_REG_NUM 2
-#define EBX_REG_NUM 3
-#define ESP_REG_NUM 4
-#define EBP_REG_NUM 5
-#define ESI_REG_NUM 6
-#define EDI_REG_NUM 7
-
-/* modrm_byte.regmem for twobyte escape */
-#define ESCAPE_TO_TWO_BYTE_ADDRESSING ESP_REG_NUM
-/* index_base_byte.index for no index register addressing */
-#define NO_INDEX_REGISTER ESP_REG_NUM
-/* index_base_byte.base for no base register addressing */
-#define NO_BASE_REGISTER EBP_REG_NUM
-#define NO_BASE_REGISTER_16 6
-
-/* modrm.mode = REGMEM_FIELD_HAS_REG when a register is in there */
-#define REGMEM_FIELD_HAS_REG 0x3/* always = 0x3 */
-#define REGMEM_FIELD_HAS_MEM (~REGMEM_FIELD_HAS_REG)
-
-/* Extract fields from the mod/rm byte. */
-#define MODRM_MOD_FIELD(modrm) (((modrm) >> 6) & 3)
-#define MODRM_REG_FIELD(modrm) (((modrm) >> 3) & 7)
-#define MODRM_RM_FIELD(modrm) (((modrm) >> 0) & 7)
-
-/* Extract fields from the sib byte. */
-#define SIB_SCALE_FIELD(sib) (((sib) >> 6) & 3)
-#define SIB_INDEX_FIELD(sib) (((sib) >> 3) & 7)
-#define SIB_BASE_FIELD(sib) (((sib) >> 0) & 7)
-
-/* x86-64 extension prefix. */
-#define REX_OPCODE 0x40
-
-/* Non-zero if OPCODE is the rex prefix. */
-#define REX_PREFIX_P(opcode) (((opcode) & 0xf0) == REX_OPCODE)
-
-/* Indicates 64 bit operand size. */
-#define REX_W 8
-/* High extension to reg field of modrm byte. */
-#define REX_R 4
-/* High extension to SIB index field. */
-#define REX_X 2
-/* High extension to base field of modrm or SIB, or reg field of opcode. */
-#define REX_B 1
-
-/* max operands per insn */
-#define MAX_OPERANDS 5
-
-/* max immediates per insn (lcall, ljmp, insertq, extrq) */
-#define MAX_IMMEDIATE_OPERANDS 2
-
-/* max memory refs per insn (string ops) */
-#define MAX_MEMORY_OPERANDS 2
-
-/* max size of insn mnemonics. */
-#define MAX_MNEM_SIZE 20
-
-/* max size of register name in insn mnemonics. */
-#define MAX_REG_NAME_SIZE 8
-
-#endif /* OPCODE_I386_H */
diff --git a/include/opcode/i860.h b/include/opcode/i860.h
deleted file mode 100644
index 7f4aafd9c..000000000
--- a/include/opcode/i860.h
+++ /dev/null
@@ -1,507 +0,0 @@
-/* Table of opcodes for the i860.
- Copyright 1989, 1991, 2000, 2002, 2003, 2010
- Free Software Foundation, Inc.
-
- This file is part of GAS, the GNU Assembler, and GDB, the GNU disassembler.
-
- GAS/GDB 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 3, or (at your option)
- any later version.
-
- GAS/GDB is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GAS or GDB; see the file COPYING3. If not, write to
- the Free Software Foundation, 51 Franklin Street - Fifth Floor,
- Boston, MA 02110-1301, USA. */
-
-/* Structure of an opcode table entry. */
-struct i860_opcode
-{
- /* The opcode name. */
- const char *name;
-
- /* Bits that must be set. */
- unsigned long match;
-
- /* Bits that must not be set. */
- unsigned long lose;
-
- const char *args;
-
- /* Nonzero if this is a possible expand-instruction. */
- char expand;
-};
-
-
-enum expand_type
-{
- E_MOV = 1, E_ADDR, E_U32, E_AND, E_S32, E_DELAY, XP_ONLY
-};
-
-
-/* All i860 opcodes are 32 bits, except for the pseudo-instructions
- and the operations utilizing a 32-bit address expression, an
- unsigned 32-bit constant, or a signed 32-bit constant.
- These opcodes are expanded into a two-instruction sequence for
- any situation where the immediate operand does not fit in 32 bits.
- In the case of the add and subtract operations the expansion is
- to a three-instruction sequence (ex: orh, or, adds). In cases
- where the address is to be relocated, the instruction is
- expanded to handle the worse case, this could be optimized at
- the final link if the actual address were known.
-
- The pseudoinstructions are: mov, fmov, pmov, nop, and fnop.
- These instructions are implemented as a one or two instruction
- sequence of other operations.
-
- The match component is a mask saying which bits must match a
- particular opcode in order for an instruction to be an instance
- of that opcode.
-
- The args component is a string containing one character
- for each operand of the instruction.
-
-Kinds of operands:
- # Number used by optimizer. It is ignored.
- 1 src1 integer register.
- 2 src2 integer register.
- d dest register.
- c ctrlreg control register.
- i 16 bit immediate.
- I 16 bit immediate, aligned 2^0. (ld.b)
- J 16 bit immediate, aligned 2^1. (ld.s)
- K 16 bit immediate, aligned 2^2. (ld.l, {p}fld.l, fst.l)
- L 16 bit immediate, aligned 2^3. ({p}fld.d, fst.d)
- M 16 bit immediate, aligned 2^4. ({p}fld.q, fst.q)
- 5 5 bit immediate.
- l lbroff 26 bit PC relative immediate.
- r sbroff 16 bit PC relative immediate.
- s split 16 bit immediate.
- S split 16 bit immediate, aligned 2^0. (st.b)
- T split 16 bit immediate, aligned 2^1. (st.s)
- U split 16 bit immediate, aligned 2^2. (st.l)
- e src1 floating point register.
- f src2 floating point register.
- g dest floating point register. */
-
-
-/* The order of the opcodes in this table is significant. The assembler
- requires that all instances of the same mnemonic must be consecutive.
- If they aren't, the assembler will not function properly.
-
- The order of opcodes does not affect the disassembler. */
-
-static const struct i860_opcode i860_opcodes[] =
-{
-/* REG-Format Instructions. */
-{ "ld.c", 0x30000000, 0xcc000000, "c,d", 0 }, /* ld.c csrc2,idest */
-{ "ld.b", 0x00000000, 0xfc000000, "1(2),d", 0 }, /* ld.b isrc1(isrc2),idest */
-{ "ld.b", 0x04000000, 0xf8000000, "I(2),d", E_ADDR }, /* ld.b #const(isrc2),idest */
-{ "ld.s", 0x10000000, 0xec000001, "1(2),d", 0 }, /* ld.s isrc1(isrc2),idest */
-{ "ld.s", 0x14000000, 0xe8000001, "J(2),d", E_ADDR }, /* ld.s #const(isrc2),idest */
-{ "ld.l", 0x10000001, 0xec000000, "1(2),d", 0 }, /* ld.l isrc1(isrc2),idest */
-{ "ld.l", 0x14000001, 0xe8000000, "K(2),d", E_ADDR }, /* ld.l #const(isrc2),idest */
-
-{ "st.c", 0x38000000, 0xc4000000, "1,c", 0 }, /* st.c isrc1ni,csrc2 */
-{ "st.b", 0x0c000000, 0xf0000000, "1,S(2)", E_ADDR }, /* st.b isrc1ni,#const(isrc2) */
-{ "st.s", 0x1c000000, 0xe0000001, "1,T(2)", E_ADDR }, /* st.s isrc1ni,#const(isrc2) */
-{ "st.l", 0x1c000001, 0xe0000000, "1,U(2)", E_ADDR }, /* st.l isrc1ni,#const(isrc2) */
-
-{ "ixfr", 0x08000000, 0xf4000000, "1,g", 0 }, /* ixfr isrc1ni,fdest */
-
-{ "fld.l", 0x20000002, 0xdc000001, "1(2),g", 0 }, /* fld.l isrc1(isrc2),fdest */
-{ "fld.l", 0x24000002, 0xd8000001, "K(2),g", E_ADDR }, /* fld.l #const(isrc2),fdest */
-{ "fld.l", 0x20000003, 0xdc000000, "1(2)++,g", 0 }, /* fld.l isrc1(isrc2)++,fdest */
-{ "fld.l", 0x24000003, 0xd8000000, "K(2)++,g", E_ADDR }, /* fld.l #const(isrc2)++,fdest */
-{ "fld.d", 0x20000000, 0xdc000007, "1(2),g", 0 }, /* fld.d isrc1(isrc2),fdest */
-{ "fld.d", 0x24000000, 0xd8000007, "L(2),g", E_ADDR }, /* fld.d #const(isrc2),fdest */
-{ "fld.d", 0x20000001, 0xdc000006, "1(2)++,g", 0 }, /* fld.d isrc1(isrc2)++,fdest */
-{ "fld.d", 0x24000001, 0xd8000006, "L(2)++,g", E_ADDR }, /* fld.d #const(isrc2)++,fdest */
-{ "fld.q", 0x20000004, 0xdc000003, "1(2),g", 0 }, /* fld.q isrc1(isrc2),fdest */
-{ "fld.q", 0x24000004, 0xd8000003, "M(2),g", E_ADDR }, /* fld.q #const(isrc2),fdest */
-{ "fld.q", 0x20000005, 0xdc000002, "1(2)++,g", 0 }, /* fld.q isrc1(isrc2)++,fdest */
-{ "fld.q", 0x24000005, 0xd8000002, "M(2)++,g", E_ADDR }, /* fld.q #const(isrc2)++,fdest */
-
-{ "pfld.l", 0x60000002, 0x9c000001, "1(2),g", 0 }, /* pfld.l isrc1(isrc2),fdest */
-{ "pfld.l", 0x64000002, 0x98000001, "K(2),g", E_ADDR }, /* pfld.l #const(isrc2),fdest */
-{ "pfld.l", 0x60000003, 0x9c000000, "1(2)++,g", 0 }, /* pfld.l isrc1(isrc2)++,fdest */
-{ "pfld.l", 0x64000003, 0x98000000, "K(2)++,g", E_ADDR }, /* pfld.l #const(isrc2)++,fdest */
-{ "pfld.d", 0x60000000, 0x9c000007, "1(2),g", 0 }, /* pfld.d isrc1(isrc2),fdest */
-{ "pfld.d", 0x64000000, 0x98000007, "L(2),g", E_ADDR }, /* pfld.d #const(isrc2),fdest */
-{ "pfld.d", 0x60000001, 0x9c000006, "1(2)++,g", 0 }, /* pfld.d isrc1(isrc2)++,fdest */
-{ "pfld.d", 0x64000001, 0x98000006, "L(2)++,g", E_ADDR }, /* pfld.d #const(isrc2)++,fdest */
-{ "pfld.q", 0x60000004, 0x9c000003, "1(2),g", XP_ONLY }, /* pfld.q isrc1(isrc2),fdest */
-{ "pfld.q", 0x64000004, 0x98000003, "L(2),g", XP_ONLY }, /* pfld.q #const(isrc2),fdest */
-{ "pfld.q", 0x60000005, 0x9c000002, "1(2)++,g", XP_ONLY }, /* pfld.q isrc1(isrc2)++,fdest */
-{ "pfld.q", 0x64000005, 0x98000002, "L(2)++,g", XP_ONLY }, /* pfld.q #const(isrc2)++,fdest */
-
-{ "fst.l", 0x28000002, 0xd4000001, "g,1(2)", 0 }, /* fst.l fdest,isrc1(isrc2) */
-{ "fst.l", 0x2c000002, 0xd0000001, "g,K(2)", E_ADDR }, /* fst.l fdest,#const(isrc2) */
-{ "fst.l", 0x28000003, 0xd4000000, "g,1(2)++", 0 }, /* fst.l fdest,isrc1(isrc2)++ */
-{ "fst.l", 0x2c000003, 0xd0000000, "g,K(2)++", E_ADDR }, /* fst.l fdest,#const(isrc2)++ */
-{ "fst.d", 0x28000000, 0xd4000007, "g,1(2)", 0 }, /* fst.d fdest,isrc1(isrc2) */
-{ "fst.d", 0x2c000000, 0xd0000007, "g,L(2)", E_ADDR }, /* fst.d fdest,#const(isrc2) */
-{ "fst.d", 0x28000001, 0xd4000006, "g,1(2)++", 0 }, /* fst.d fdest,isrc1(isrc2)++ */
-{ "fst.d", 0x2c000001, 0xd0000006, "g,L(2)++", E_ADDR }, /* fst.d fdest,#const(isrc2)++ */
-{ "fst.q", 0x28000004, 0xd4000003, "g,1(2)", 0 }, /* fst.d fdest,isrc1(isrc2) */
-{ "fst.q", 0x2c000004, 0xd0000003, "g,M(2)", E_ADDR }, /* fst.d fdest,#const(isrc2) */
-{ "fst.q", 0x28000005, 0xd4000002, "g,1(2)++", 0 }, /* fst.d fdest,isrc1(isrc2)++ */
-{ "fst.q", 0x2c000005, 0xd0000002, "g,M(2)++", E_ADDR }, /* fst.d fdest,#const(isrc2)++ */
-
-{ "pst.d", 0x3c000000, 0xc0000007, "g,L(2)", E_ADDR }, /* pst.d fdest,#const(isrc2) */
-{ "pst.d", 0x3c000001, 0xc0000006, "g,L(2)++", E_ADDR }, /* pst.d fdest,#const(isrc2)++ */
-
-{ "addu", 0x80000000, 0x7c000000, "1,2,d", 0 }, /* addu isrc1,isrc2,idest */
-{ "addu", 0x84000000, 0x78000000, "i,2,d", E_S32 }, /* addu #const,isrc2,idest */
-{ "adds", 0x90000000, 0x6c000000, "1,2,d", 0 }, /* adds isrc1,isrc2,idest */
-{ "adds", 0x94000000, 0x68000000, "i,2,d", E_S32 }, /* adds #const,isrc2,idest */
-{ "subu", 0x88000000, 0x74000000, "1,2,d", 0 }, /* subu isrc1,isrc2,idest */
-{ "subu", 0x8c000000, 0x70000000, "i,2,d", E_S32 }, /* subu #const,isrc2,idest */
-{ "subs", 0x98000000, 0x64000000, "1,2,d", 0 }, /* subs isrc1,isrc2,idest */
-{ "subs", 0x9c000000, 0x60000000, "i,2,d", E_S32 }, /* subs #const,isrc2,idest */
-
-{ "shl", 0xa0000000, 0x5c000000, "1,2,d", 0 }, /* shl isrc1,isrc2,idest */
-{ "shl", 0xa4000000, 0x58000000, "i,2,d", 0 }, /* shl #const,isrc2,idest */
-{ "shr", 0xa8000000, 0x54000000, "1,2,d", 0 }, /* shr isrc1,isrc2,idest */
-{ "shr", 0xac000000, 0x50000000, "i,2,d", 0 }, /* shr #const,isrc2,idest */
-{ "shrd", 0xb0000000, 0x4c000000, "1,2,d", 0 }, /* shrd isrc1,isrc2,idest */
-{ "shra", 0xb8000000, 0x44000000, "1,2,d", 0 }, /* shra isrc1,isrc2,idest */
-{ "shra", 0xbc000000, 0x40000000, "i,2,d", 0 }, /* shra #const,isrc2,idest */
-
-{ "mov", 0xa0000000, 0x5c00f800, "2,d", 0 }, /* shl r0,isrc2,idest */
-{ "mov", 0x94000000, 0x69e00000, "i,d", E_MOV }, /* adds #const,r0,idest */
-{ "nop", 0xa0000000, 0x5ffff800, "", 0 }, /* shl r0,r0,r0 */
-{ "fnop", 0xb0000000, 0x4ffff800, "", 0 }, /* shrd r0,r0,r0 */
-
-{ "trap", 0x44000000, 0xb8000000, "1,2,d", 0 }, /* trap isrc1ni,isrc2,idest */
-
-{ "flush", 0x34000004, 0xc81f0003, "L(2)", E_ADDR }, /* flush #const(isrc2) */
-{ "flush", 0x34000005, 0xc81f0002, "L(2)++", E_ADDR }, /* flush #const(isrc2)++ */
-
-{ "and", 0xc0000000, 0x3c000000, "1,2,d", 0 }, /* and isrc1,isrc2,idest */
-{ "and", 0xc4000000, 0x38000000, "i,2,d", E_AND }, /* and #const,isrc2,idest */
-{ "andh", 0xcc000000, 0x30000000, "i,2,d", 0 }, /* andh #const,isrc2,idest */
-{ "andnot", 0xd0000000, 0x2c000000, "1,2,d", 0 }, /* andnot isrc1,isrc2,idest */
-{ "andnot", 0xd4000000, 0x28000000, "i,2,d", E_U32 }, /* andnot #const,isrc2,idest */
-{ "andnoth", 0xdc000000, 0x20000000, "i,2,d", 0 }, /* andnoth #const,isrc2,idest */
-{ "or", 0xe0000000, 0x1c000000, "1,2,d", 0 }, /* or isrc1,isrc2,idest */
-{ "or", 0xe4000000, 0x18000000, "i,2,d", E_U32 }, /* or #const,isrc2,idest */
-{ "orh", 0xec000000, 0x10000000, "i,2,d", 0 }, /* orh #const,isrc2,idest */
-{ "xor", 0xf0000000, 0x0c000000, "1,2,d", 0 }, /* xor isrc1,isrc2,idest */
-{ "xor", 0xf4000000, 0x08000000, "i,2,d", E_U32 }, /* xor #const,isrc2,idest */
-{ "xorh", 0xfc000000, 0x00000000, "i,2,d", 0 }, /* xorh #const,isrc2,idest */
-
-{ "bte", 0x58000000, 0xa4000000, "1,2,r", 0 }, /* bte isrc1s,isrc2,sbroff */
-{ "bte", 0x5c000000, 0xa0000000, "5,2,r", 0 }, /* bte #const5,isrc2,sbroff */
-{ "btne", 0x50000000, 0xac000000, "1,2,r", 0 }, /* btne isrc1s,isrc2,sbroff */
-{ "btne", 0x54000000, 0xa8000000, "5,2,r", 0 }, /* btne #const5,isrc2,sbroff */
-{ "bla", 0xb4000000, 0x48000000, "1,2,r", E_DELAY }, /* bla isrc1s,isrc2,sbroff */
-{ "bri", 0x40000000, 0xbc000000, "1", E_DELAY }, /* bri isrc1ni */
-
-/* Core Escape Instruction Format */
-{ "lock", 0x4c000001, 0xb000001e, "", 0 }, /* lock set BL in dirbase */
-{ "calli", 0x4c000002, 0xb000001d, "1", E_DELAY }, /* calli isrc1ni */
-{ "intovr", 0x4c000004, 0xb000001b, "", 0 }, /* intovr trap on integer overflow */
-{ "unlock", 0x4c000007, 0xb0000018, "", 0 }, /* unlock clear BL in dirbase */
-{ "ldio.l", 0x4c000408, 0xb00003f7, "2,d", XP_ONLY }, /* ldio.l isrc2,idest */
-{ "ldio.s", 0x4c000208, 0xb00005f7, "2,d", XP_ONLY }, /* ldio.s isrc2,idest */
-{ "ldio.b", 0x4c000008, 0xb00007f7, "2,d", XP_ONLY }, /* ldio.b isrc2,idest */
-{ "stio.l", 0x4c000409, 0xb00003f6, "1,2", XP_ONLY }, /* stio.l isrc1ni,isrc2 */
-{ "stio.s", 0x4c000209, 0xb00005f6, "1,2", XP_ONLY }, /* stio.s isrc1ni,isrc2 */
-{ "stio.b", 0x4c000009, 0xb00007f6, "1,2", XP_ONLY }, /* stio.b isrc1ni,isrc2 */
-{ "ldint.l", 0x4c00040a, 0xb00003f5, "2,d", XP_ONLY }, /* ldint.l isrc2,idest */
-{ "ldint.s", 0x4c00020a, 0xb00005f5, "2,d", XP_ONLY }, /* ldint.s isrc2,idest */
-{ "ldint.b", 0x4c00000a, 0xb00007f5, "2,d", XP_ONLY }, /* ldint.b isrc2,idest */
-{ "scyc.b", 0x4c00000b, 0xb00007f4, "2", XP_ONLY }, /* scyc.b isrc2 */
-
-/* CTRL-Format Instructions */
-{ "br", 0x68000000, 0x94000000, "l", E_DELAY }, /* br lbroff */
-{ "call", 0x6c000000, 0x90000000, "l", E_DELAY }, /* call lbroff */
-{ "bc", 0x70000000, 0x8c000000, "l", 0 }, /* bc lbroff */
-{ "bc.t", 0x74000000, 0x88000000, "l", E_DELAY }, /* bc.t lbroff */
-{ "bnc", 0x78000000, 0x84000000, "l", 0 }, /* bnc lbroff */
-{ "bnc.t", 0x7c000000, 0x80000000, "l", E_DELAY }, /* bnc.t lbroff */
-
-/* Floating Point Escape Instruction Format - pfam.p fsrc1,fsrc2,fdest. */
-{ "r2p1.ss", 0x48000400, 0xb40001ff, "e,f,g", 0 },
-{ "r2p1.sd", 0x48000480, 0xb400017f, "e,f,g", 0 },
-{ "r2p1.dd", 0x48000580, 0xb400007f, "e,f,g", 0 },
-{ "r2pt.ss", 0x48000401, 0xb40001fe, "e,f,g", 0 },
-{ "r2pt.sd", 0x48000481, 0xb400017e, "e,f,g", 0 },
-{ "r2pt.dd", 0x48000581, 0xb400007e, "e,f,g", 0 },
-{ "r2ap1.ss", 0x48000402, 0xb40001fd, "e,f,g", 0 },
-{ "r2ap1.sd", 0x48000482, 0xb400017d, "e,f,g", 0 },
-{ "r2ap1.dd", 0x48000582, 0xb400007d, "e,f,g", 0 },
-{ "r2apt.ss", 0x48000403, 0xb40001fc, "e,f,g", 0 },
-{ "r2apt.sd", 0x48000483, 0xb400017c, "e,f,g", 0 },
-{ "r2apt.dd", 0x48000583, 0xb400007c, "e,f,g", 0 },
-{ "i2p1.ss", 0x48000404, 0xb40001fb, "e,f,g", 0 },
-{ "i2p1.sd", 0x48000484, 0xb400017b, "e,f,g", 0 },
-{ "i2p1.dd", 0x48000584, 0xb400007b, "e,f,g", 0 },
-{ "i2pt.ss", 0x48000405, 0xb40001fa, "e,f,g", 0 },
-{ "i2pt.sd", 0x48000485, 0xb400017a, "e,f,g", 0 },
-{ "i2pt.dd", 0x48000585, 0xb400007a, "e,f,g", 0 },
-{ "i2ap1.ss", 0x48000406, 0xb40001f9, "e,f,g", 0 },
-{ "i2ap1.sd", 0x48000486, 0xb4000179, "e,f,g", 0 },
-{ "i2ap1.dd", 0x48000586, 0xb4000079, "e,f,g", 0 },
-{ "i2apt.ss", 0x48000407, 0xb40001f8, "e,f,g", 0 },
-{ "i2apt.sd", 0x48000487, 0xb4000178, "e,f,g", 0 },
-{ "i2apt.dd", 0x48000587, 0xb4000078, "e,f,g", 0 },
-{ "rat1p2.ss", 0x48000408, 0xb40001f7, "e,f,g", 0 },
-{ "rat1p2.sd", 0x48000488, 0xb4000177, "e,f,g", 0 },
-{ "rat1p2.dd", 0x48000588, 0xb4000077, "e,f,g", 0 },
-{ "m12apm.ss", 0x48000409, 0xb40001f6, "e,f,g", 0 },
-{ "m12apm.sd", 0x48000489, 0xb4000176, "e,f,g", 0 },
-{ "m12apm.dd", 0x48000589, 0xb4000076, "e,f,g", 0 },
-{ "ra1p2.ss", 0x4800040a, 0xb40001f5, "e,f,g", 0 },
-{ "ra1p2.sd", 0x4800048a, 0xb4000175, "e,f,g", 0 },
-{ "ra1p2.dd", 0x4800058a, 0xb4000075, "e,f,g", 0 },
-{ "m12ttpa.ss", 0x4800040b, 0xb40001f4, "e,f,g", 0 },
-{ "m12ttpa.sd", 0x4800048b, 0xb4000174, "e,f,g", 0 },
-{ "m12ttpa.dd", 0x4800058b, 0xb4000074, "e,f,g", 0 },
-{ "iat1p2.ss", 0x4800040c, 0xb40001f3, "e,f,g", 0 },
-{ "iat1p2.sd", 0x4800048c, 0xb4000173, "e,f,g", 0 },
-{ "iat1p2.dd", 0x4800058c, 0xb4000073, "e,f,g", 0 },
-{ "m12tpm.ss", 0x4800040d, 0xb40001f2, "e,f,g", 0 },
-{ "m12tpm.sd", 0x4800048d, 0xb4000172, "e,f,g", 0 },
-{ "m12tpm.dd", 0x4800058d, 0xb4000072, "e,f,g", 0 },
-{ "ia1p2.ss", 0x4800040e, 0xb40001f1, "e,f,g", 0 },
-{ "ia1p2.sd", 0x4800048e, 0xb4000171, "e,f,g", 0 },
-{ "ia1p2.dd", 0x4800058e, 0xb4000071, "e,f,g", 0 },
-{ "m12tpa.ss", 0x4800040f, 0xb40001f0, "e,f,g", 0 },
-{ "m12tpa.sd", 0x4800048f, 0xb4000170, "e,f,g", 0 },
-{ "m12tpa.dd", 0x4800058f, 0xb4000070, "e,f,g", 0 },
-
-/* Floating Point Escape Instruction Format - pfsm.p fsrc1,fsrc2,fdest. */
-{ "r2s1.ss", 0x48000410, 0xb40001ef, "e,f,g", 0 },
-{ "r2s1.sd", 0x48000490, 0xb400016f, "e,f,g", 0 },
-{ "r2s1.dd", 0x48000590, 0xb400006f, "e,f,g", 0 },
-{ "r2st.ss", 0x48000411, 0xb40001ee, "e,f,g", 0 },
-{ "r2st.sd", 0x48000491, 0xb400016e, "e,f,g", 0 },
-{ "r2st.dd", 0x48000591, 0xb400006e, "e,f,g", 0 },
-{ "r2as1.ss", 0x48000412, 0xb40001ed, "e,f,g", 0 },
-{ "r2as1.sd", 0x48000492, 0xb400016d, "e,f,g", 0 },
-{ "r2as1.dd", 0x48000592, 0xb400006d, "e,f,g", 0 },
-{ "r2ast.ss", 0x48000413, 0xb40001ec, "e,f,g", 0 },
-{ "r2ast.sd", 0x48000493, 0xb400016c, "e,f,g", 0 },
-{ "r2ast.dd", 0x48000593, 0xb400006c, "e,f,g", 0 },
-{ "i2s1.ss", 0x48000414, 0xb40001eb, "e,f,g", 0 },
-{ "i2s1.sd", 0x48000494, 0xb400016b, "e,f,g", 0 },
-{ "i2s1.dd", 0x48000594, 0xb400006b, "e,f,g", 0 },
-{ "i2st.ss", 0x48000415, 0xb40001ea, "e,f,g", 0 },
-{ "i2st.sd", 0x48000495, 0xb400016a, "e,f,g", 0 },
-{ "i2st.dd", 0x48000595, 0xb400006a, "e,f,g", 0 },
-{ "i2as1.ss", 0x48000416, 0xb40001e9, "e,f,g", 0 },
-{ "i2as1.sd", 0x48000496, 0xb4000169, "e,f,g", 0 },
-{ "i2as1.dd", 0x48000596, 0xb4000069, "e,f,g", 0 },
-{ "i2ast.ss", 0x48000417, 0xb40001e8, "e,f,g", 0 },
-{ "i2ast.sd", 0x48000497, 0xb4000168, "e,f,g", 0 },
-{ "i2ast.dd", 0x48000597, 0xb4000068, "e,f,g", 0 },
-{ "rat1s2.ss", 0x48000418, 0xb40001e7, "e,f,g", 0 },
-{ "rat1s2.sd", 0x48000498, 0xb4000167, "e,f,g", 0 },
-{ "rat1s2.dd", 0x48000598, 0xb4000067, "e,f,g", 0 },
-{ "m12asm.ss", 0x48000419, 0xb40001e6, "e,f,g", 0 },
-{ "m12asm.sd", 0x48000499, 0xb4000166, "e,f,g", 0 },
-{ "m12asm.dd", 0x48000599, 0xb4000066, "e,f,g", 0 },
-{ "ra1s2.ss", 0x4800041a, 0xb40001e5, "e,f,g", 0 },
-{ "ra1s2.sd", 0x4800049a, 0xb4000165, "e,f,g", 0 },
-{ "ra1s2.dd", 0x4800059a, 0xb4000065, "e,f,g", 0 },
-{ "m12ttsa.ss", 0x4800041b, 0xb40001e4, "e,f,g", 0 },
-{ "m12ttsa.sd", 0x4800049b, 0xb4000164, "e,f,g", 0 },
-{ "m12ttsa.dd", 0x4800059b, 0xb4000064, "e,f,g", 0 },
-{ "iat1s2.ss", 0x4800041c, 0xb40001e3, "e,f,g", 0 },
-{ "iat1s2.sd", 0x4800049c, 0xb4000163, "e,f,g", 0 },
-{ "iat1s2.dd", 0x4800059c, 0xb4000063, "e,f,g", 0 },
-{ "m12tsm.ss", 0x4800041d, 0xb40001e2, "e,f,g", 0 },
-{ "m12tsm.sd", 0x4800049d, 0xb4000162, "e,f,g", 0 },
-{ "m12tsm.dd", 0x4800059d, 0xb4000062, "e,f,g", 0 },
-{ "ia1s2.ss", 0x4800041e, 0xb40001e1, "e,f,g", 0 },
-{ "ia1s2.sd", 0x4800049e, 0xb4000161, "e,f,g", 0 },
-{ "ia1s2.dd", 0x4800059e, 0xb4000061, "e,f,g", 0 },
-{ "m12tsa.ss", 0x4800041f, 0xb40001e0, "e,f,g", 0 },
-{ "m12tsa.sd", 0x4800049f, 0xb4000160, "e,f,g", 0 },
-{ "m12tsa.dd", 0x4800059f, 0xb4000060, "e,f,g", 0 },
-
-/* Floating Point Escape Instruction Format - pfmam.p fsrc1,fsrc2,fdest. */
-{ "mr2p1.ss", 0x48000000, 0xb40005ff, "e,f,g", 0 },
-{ "mr2p1.sd", 0x48000080, 0xb400057f, "e,f,g", 0 },
-{ "mr2p1.dd", 0x48000180, 0xb400047f, "e,f,g", 0 },
-{ "mr2pt.ss", 0x48000001, 0xb40005fe, "e,f,g", 0 },
-{ "mr2pt.sd", 0x48000081, 0xb400057e, "e,f,g", 0 },
-{ "mr2pt.dd", 0x48000181, 0xb400047e, "e,f,g", 0 },
-{ "mr2mp1.ss", 0x48000002, 0xb40005fd, "e,f,g", 0 },
-{ "mr2mp1.sd", 0x48000082, 0xb400057d, "e,f,g", 0 },
-{ "mr2mp1.dd", 0x48000182, 0xb400047d, "e,f,g", 0 },
-{ "mr2mpt.ss", 0x48000003, 0xb40005fc, "e,f,g", 0 },
-{ "mr2mpt.sd", 0x48000083, 0xb400057c, "e,f,g", 0 },
-{ "mr2mpt.dd", 0x48000183, 0xb400047c, "e,f,g", 0 },
-{ "mi2p1.ss", 0x48000004, 0xb40005fb, "e,f,g", 0 },
-{ "mi2p1.sd", 0x48000084, 0xb400057b, "e,f,g", 0 },
-{ "mi2p1.dd", 0x48000184, 0xb400047b, "e,f,g", 0 },
-{ "mi2pt.ss", 0x48000005, 0xb40005fa, "e,f,g", 0 },
-{ "mi2pt.sd", 0x48000085, 0xb400057a, "e,f,g", 0 },
-{ "mi2pt.dd", 0x48000185, 0xb400047a, "e,f,g", 0 },
-{ "mi2mp1.ss", 0x48000006, 0xb40005f9, "e,f,g", 0 },
-{ "mi2mp1.sd", 0x48000086, 0xb4000579, "e,f,g", 0 },
-{ "mi2mp1.dd", 0x48000186, 0xb4000479, "e,f,g", 0 },
-{ "mi2mpt.ss", 0x48000007, 0xb40005f8, "e,f,g", 0 },
-{ "mi2mpt.sd", 0x48000087, 0xb4000578, "e,f,g", 0 },
-{ "mi2mpt.dd", 0x48000187, 0xb4000478, "e,f,g", 0 },
-{ "mrmt1p2.ss", 0x48000008, 0xb40005f7, "e,f,g", 0 },
-{ "mrmt1p2.sd", 0x48000088, 0xb4000577, "e,f,g", 0 },
-{ "mrmt1p2.dd", 0x48000188, 0xb4000477, "e,f,g", 0 },
-{ "mm12mpm.ss", 0x48000009, 0xb40005f6, "e,f,g", 0 },
-{ "mm12mpm.sd", 0x48000089, 0xb4000576, "e,f,g", 0 },
-{ "mm12mpm.dd", 0x48000189, 0xb4000476, "e,f,g", 0 },
-{ "mrm1p2.ss", 0x4800000a, 0xb40005f5, "e,f,g", 0 },
-{ "mrm1p2.sd", 0x4800008a, 0xb4000575, "e,f,g", 0 },
-{ "mrm1p2.dd", 0x4800018a, 0xb4000475, "e,f,g", 0 },
-{ "mm12ttpm.ss",0x4800000b, 0xb40005f4, "e,f,g", 0 },
-{ "mm12ttpm.sd",0x4800008b, 0xb4000574, "e,f,g", 0 },
-{ "mm12ttpm.dd",0x4800018b, 0xb4000474, "e,f,g", 0 },
-{ "mimt1p2.ss", 0x4800000c, 0xb40005f3, "e,f,g", 0 },
-{ "mimt1p2.sd", 0x4800008c, 0xb4000573, "e,f,g", 0 },
-{ "mimt1p2.dd", 0x4800018c, 0xb4000473, "e,f,g", 0 },
-{ "mm12tpm.ss", 0x4800000d, 0xb40005f2, "e,f,g", 0 },
-{ "mm12tpm.sd", 0x4800008d, 0xb4000572, "e,f,g", 0 },
-{ "mm12tpm.dd", 0x4800018d, 0xb4000472, "e,f,g", 0 },
-{ "mim1p2.ss", 0x4800000e, 0xb40005f1, "e,f,g", 0 },
-{ "mim1p2.sd", 0x4800008e, 0xb4000571, "e,f,g", 0 },
-{ "mim1p2.dd", 0x4800018e, 0xb4000471, "e,f,g", 0 },
-
-/* Floating Point Escape Instruction Format - pfmsm.p fsrc1,fsrc2,fdest. */
-{ "mr2s1.ss", 0x48000010, 0xb40005ef, "e,f,g", 0 },
-{ "mr2s1.sd", 0x48000090, 0xb400056f, "e,f,g", 0 },
-{ "mr2s1.dd", 0x48000190, 0xb400046f, "e,f,g", 0 },
-{ "mr2st.ss", 0x48000011, 0xb40005ee, "e,f,g", 0 },
-{ "mr2st.sd", 0x48000091, 0xb400056e, "e,f,g", 0 },
-{ "mr2st.dd", 0x48000191, 0xb400046e, "e,f,g", 0 },
-{ "mr2ms1.ss", 0x48000012, 0xb40005ed, "e,f,g", 0 },
-{ "mr2ms1.sd", 0x48000092, 0xb400056d, "e,f,g", 0 },
-{ "mr2ms1.dd", 0x48000192, 0xb400046d, "e,f,g", 0 },
-{ "mr2mst.ss", 0x48000013, 0xb40005ec, "e,f,g", 0 },
-{ "mr2mst.sd", 0x48000093, 0xb400056c, "e,f,g", 0 },
-{ "mr2mst.dd", 0x48000193, 0xb400046c, "e,f,g", 0 },
-{ "mi2s1.ss", 0x48000014, 0xb40005eb, "e,f,g", 0 },
-{ "mi2s1.sd", 0x48000094, 0xb400056b, "e,f,g", 0 },
-{ "mi2s1.dd", 0x48000194, 0xb400046b, "e,f,g", 0 },
-{ "mi2st.ss", 0x48000015, 0xb40005ea, "e,f,g", 0 },
-{ "mi2st.sd", 0x48000095, 0xb400056a, "e,f,g", 0 },
-{ "mi2st.dd", 0x48000195, 0xb400046a, "e,f,g", 0 },
-{ "mi2ms1.ss", 0x48000016, 0xb40005e9, "e,f,g", 0 },
-{ "mi2ms1.sd", 0x48000096, 0xb4000569, "e,f,g", 0 },
-{ "mi2ms1.dd", 0x48000196, 0xb4000469, "e,f,g", 0 },
-{ "mi2mst.ss", 0x48000017, 0xb40005e8, "e,f,g", 0 },
-{ "mi2mst.sd", 0x48000097, 0xb4000568, "e,f,g", 0 },
-{ "mi2mst.dd", 0x48000197, 0xb4000468, "e,f,g", 0 },
-{ "mrmt1s2.ss", 0x48000018, 0xb40005e7, "e,f,g", 0 },
-{ "mrmt1s2.sd", 0x48000098, 0xb4000567, "e,f,g", 0 },
-{ "mrmt1s2.dd", 0x48000198, 0xb4000467, "e,f,g", 0 },
-{ "mm12msm.ss", 0x48000019, 0xb40005e6, "e,f,g", 0 },
-{ "mm12msm.sd", 0x48000099, 0xb4000566, "e,f,g", 0 },
-{ "mm12msm.dd", 0x48000199, 0xb4000466, "e,f,g", 0 },
-{ "mrm1s2.ss", 0x4800001a, 0xb40005e5, "e,f,g", 0 },
-{ "mrm1s2.sd", 0x4800009a, 0xb4000565, "e,f,g", 0 },
-{ "mrm1s2.dd", 0x4800019a, 0xb4000465, "e,f,g", 0 },
-{ "mm12ttsm.ss",0x4800001b, 0xb40005e4, "e,f,g", 0 },
-{ "mm12ttsm.sd",0x4800009b, 0xb4000564, "e,f,g", 0 },
-{ "mm12ttsm.dd",0x4800019b, 0xb4000464, "e,f,g", 0 },
-{ "mimt1s2.ss", 0x4800001c, 0xb40005e3, "e,f,g", 0 },
-{ "mimt1s2.sd", 0x4800009c, 0xb4000563, "e,f,g", 0 },
-{ "mimt1s2.dd", 0x4800019c, 0xb4000463, "e,f,g", 0 },
-{ "mm12tsm.ss", 0x4800001d, 0xb40005e2, "e,f,g", 0 },
-{ "mm12tsm.sd", 0x4800009d, 0xb4000562, "e,f,g", 0 },
-{ "mm12tsm.dd", 0x4800019d, 0xb4000462, "e,f,g", 0 },
-{ "mim1s2.ss", 0x4800001e, 0xb40005e1, "e,f,g", 0 },
-{ "mim1s2.sd", 0x4800009e, 0xb4000561, "e,f,g", 0 },
-{ "mim1s2.dd", 0x4800019e, 0xb4000461, "e,f,g", 0 },
-
-{ "fmul.ss", 0x48000020, 0xb40005df, "e,f,g", 0 }, /* fmul.p fsrc1,fsrc2,fdest */
-{ "fmul.sd", 0x480000a0, 0xb400055f, "e,f,g", 0 }, /* fmul.p fsrc1,fsrc2,fdest */
-{ "fmul.dd", 0x480001a0, 0xb400045f, "e,f,g", 0 }, /* fmul.p fsrc1,fsrc2,fdest */
-{ "pfmul.ss", 0x48000420, 0xb40001df, "e,f,g", 0 }, /* pfmul.p fsrc1,fsrc2,fdest */
-{ "pfmul.sd", 0x480004a0, 0xb400015f, "e,f,g", 0 }, /* pfmul.p fsrc1,fsrc2,fdest */
-{ "pfmul.dd", 0x480005a0, 0xb400005f, "e,f,g", 0 }, /* pfmul.p fsrc1,fsrc2,fdest */
-{ "pfmul3.dd", 0x480005a4, 0xb400005b, "e,f,g", 0 }, /* pfmul3.p fsrc1,fsrc2,fdest */
-{ "fmlow.dd", 0x480001a1, 0xb400045e, "e,f,g", 0 }, /* fmlow.dd fsrc1,fsrc2,fdest */
-{ "frcp.ss", 0x48000022, 0xb40005dd, "f,g", 0 }, /* frcp.p fsrc2,fdest */
-{ "frcp.sd", 0x480000a2, 0xb400055d, "f,g", 0 }, /* frcp.p fsrc2,fdest */
-{ "frcp.dd", 0x480001a2, 0xb400045d, "f,g", 0 }, /* frcp.p fsrc2,fdest */
-{ "frsqr.ss", 0x48000023, 0xb40005dc, "f,g", 0 }, /* frsqr.p fsrc2,fdest */
-{ "frsqr.sd", 0x480000a3, 0xb400055c, "f,g", 0 }, /* frsqr.p fsrc2,fdest */
-{ "frsqr.dd", 0x480001a3, 0xb400045c, "f,g", 0 }, /* frsqr.p fsrc2,fdest */
-{ "fadd.ss", 0x48000030, 0xb40005cf, "e,f,g", 0 }, /* fadd.p fsrc1,fsrc2,fdest */
-{ "fadd.sd", 0x480000b0, 0xb400054f, "e,f,g", 0 }, /* fadd.p fsrc1,fsrc2,fdest */
-{ "fadd.dd", 0x480001b0, 0xb400044f, "e,f,g", 0 }, /* fadd.p fsrc1,fsrc2,fdest */
-{ "pfadd.ss", 0x48000430, 0xb40001cf, "e,f,g", 0 }, /* pfadd.p fsrc1,fsrc2,fdest */
-{ "pfadd.sd", 0x480004b0, 0xb400014f, "e,f,g", 0 }, /* pfadd.p fsrc1,fsrc2,fdest */
-{ "pfadd.dd", 0x480005b0, 0xb400004f, "e,f,g", 0 }, /* pfadd.p fsrc1,fsrc2,fdest */
-{ "fsub.ss", 0x48000031, 0xb40005ce, "e,f,g", 0 }, /* fsub.p fsrc1,fsrc2,fdest */
-{ "fsub.sd", 0x480000b1, 0xb400054e, "e,f,g", 0 }, /* fsub.p fsrc1,fsrc2,fdest */
-{ "fsub.dd", 0x480001b1, 0xb400044e, "e,f,g", 0 }, /* fsub.p fsrc1,fsrc2,fdest */
-{ "pfsub.ss", 0x48000431, 0xb40001ce, "e,f,g", 0 }, /* pfsub.p fsrc1,fsrc2,fdest */
-{ "pfsub.sd", 0x480004b1, 0xb400014e, "e,f,g", 0 }, /* pfsub.p fsrc1,fsrc2,fdest */
-{ "pfsub.dd", 0x480005b1, 0xb400004e, "e,f,g", 0 }, /* pfsub.p fsrc1,fsrc2,fdest */
-{ "fix.sd", 0x480000b2, 0xb400054d, "e,g", 0 }, /* fix.p fsrc1,fdest */
-{ "fix.dd", 0x480001b2, 0xb400044d, "e,g", 0 }, /* fix.p fsrc1,fdest */
-{ "pfix.sd", 0x480004b2, 0xb400014d, "e,g", 0 }, /* pfix.p fsrc1,fdest */
-{ "pfix.dd", 0x480005b2, 0xb400004d, "e,g", 0 }, /* pfix.p fsrc1,fdest */
-{ "famov.ss", 0x48000033, 0xb40005cc, "e,g", 0 }, /* famov.p fsrc1,fdest */
-{ "famov.ds", 0x48000133, 0xb40004cc, "e,g", 0 }, /* famov.p fsrc1,fdest */
-{ "famov.sd", 0x480000b3, 0xb400054c, "e,g", 0 }, /* famov.p fsrc1,fdest */
-{ "famov.dd", 0x480001b3, 0xb400044c, "e,g", 0 }, /* famov.p fsrc1,fdest */
-{ "pfamov.ss", 0x48000433, 0xb40001cc, "e,g", 0 }, /* pfamov.p fsrc1,fdest */
-{ "pfamov.ds", 0x48000533, 0xb40000cc, "e,g", 0 }, /* pfamov.p fsrc1,fdest */
-{ "pfamov.sd", 0x480004b3, 0xb400014c, "e,g", 0 }, /* pfamov.p fsrc1,fdest */
-{ "pfamov.dd", 0x480005b3, 0xb400004c, "e,g", 0 }, /* pfamov.p fsrc1,fdest */
-/* Opcode pfgt has R bit cleared; pfle has R bit set. */
-{ "pfgt.ss", 0x48000434, 0xb40001cb, "e,f,g", 0 }, /* pfgt.p fsrc1,fsrc2,fdest */
-{ "pfgt.dd", 0x48000534, 0xb40000cb, "e,f,g", 0 }, /* pfgt.p fsrc1,fsrc2,fdest */
-/* Opcode pfgt has R bit cleared; pfle has R bit set. */
-{ "pfle.ss", 0x480004b4, 0xb400014b, "e,f,g", 0 }, /* pfle.p fsrc1,fsrc2,fdest */
-{ "pfle.dd", 0x480005b4, 0xb400004b, "e,f,g", 0 }, /* pfle.p fsrc1,fsrc2,fdest */
-{ "pfeq.ss", 0x48000435, 0xb40001ca, "e,f,g", 0 }, /* pfeq.p fsrc1,fsrc2,fdest */
-{ "pfeq.dd", 0x48000535, 0xb40000ca, "e,f,g", 0 }, /* pfeq.p fsrc1,fsrc2,fdest */
-{ "ftrunc.sd", 0x480000ba, 0xb4000545, "e,g", 0 }, /* ftrunc.p fsrc1,fdest */
-{ "ftrunc.dd", 0x480001ba, 0xb4000445, "e,g", 0 }, /* ftrunc.p fsrc1,fdest */
-{ "pftrunc.sd", 0x480004ba, 0xb4000145, "e,g", 0 }, /* pftrunc.p fsrc1,fdest */
-{ "pftrunc.dd", 0x480005ba, 0xb4000045, "e,g", 0 }, /* pftrunc.p fsrc1,fdest */
-{ "fxfr", 0x48000040, 0xb40005bf, "e,d", 0 }, /* fxfr fsrc1,idest */
-{ "fiadd.ss", 0x48000049, 0xb40005b6, "e,f,g", 0 }, /* fiadd.w fsrc1,fsrc2,fdest */
-{ "fiadd.dd", 0x480001c9, 0xb4000436, "e,f,g", 0 }, /* fiadd.w fsrc1,fsrc2,fdest */
-{ "pfiadd.ss", 0x48000449, 0xb40001b6, "e,f,g", 0 }, /* pfiadd.w fsrc1,fsrc2,fdest */
-{ "pfiadd.dd", 0x480005c9, 0xb4000036, "e,f,g", 0 }, /* pfiadd.w fsrc1,fsrc2,fdest */
-{ "fisub.ss", 0x4800004d, 0xb40005b2, "e,f,g", 0 }, /* fisub.w fsrc1,fsrc2,fdest */
-{ "fisub.dd", 0x480001cd, 0xb4000432, "e,f,g", 0 }, /* fisub.w fsrc1,fsrc2,fdest */
-{ "pfisub.ss", 0x4800044d, 0xb40001b2, "e,f,g", 0 }, /* pfisub.w fsrc1,fsrc2,fdest */
-{ "pfisub.dd", 0x480005cd, 0xb4000032, "e,f,g", 0 }, /* pfisub.w fsrc1,fsrc2,fdest */
-{ "fzchkl", 0x480001d7, 0xb4000428, "e,f,g", 0 }, /* fzchkl fsrc1,fsrc2,fdest */
-{ "pfzchkl", 0x480005d7, 0xb4000028, "e,f,g", 0 }, /* pfzchkl fsrc1,fsrc2,fdest */
-{ "fzchks", 0x480001df, 0xb4000420, "e,f,g", 0 }, /* fzchks fsrc1,fsrc2,fdest */
-{ "pfzchks", 0x480005df, 0xb4000020, "e,f,g", 0 }, /* pfzchks fsrc1,fsrc2,fdest */
-{ "faddp", 0x480001d0, 0xb400042f, "e,f,g", 0 }, /* faddp fsrc1,fsrc2,fdest */
-{ "pfaddp", 0x480005d0, 0xb400002f, "e,f,g", 0 }, /* pfaddp fsrc1,fsrc2,fdest */
-{ "faddz", 0x480001d1, 0xb400042e, "e,f,g", 0 }, /* faddz fsrc1,fsrc2,fdest */
-{ "pfaddz", 0x480005d1, 0xb400002e, "e,f,g", 0 }, /* pfaddz fsrc1,fsrc2,fdest */
-{ "form", 0x480001da, 0xb4000425, "e,g", 0 }, /* form fsrc1,fdest */
-{ "pform", 0x480005da, 0xb4000025, "e,g", 0 }, /* pform fsrc1,fdest */
-
-/* Floating point pseudo-instructions. */
-{ "fmov.ss", 0x48000049, 0xb7e005b6, "e,g", 0 }, /* fiadd.ss fsrc1,f0,fdest */
-{ "fmov.dd", 0x480001c9, 0xb7e00436, "e,g", 0 }, /* fiadd.dd fsrc1,f0,fdest */
-{ "fmov.sd", 0x480000b3, 0xb400054c, "e,g", 0 }, /* famov.sd fsrc1,fdest */
-{ "fmov.ds", 0x48000133, 0xb40004cc, "e,g", 0 }, /* famov.ds fsrc1,fdest */
-{ "pfmov.ds", 0x48000533, 0xb40000cc, "e,g", 0 }, /* pfamov.ds fsrc1,fdest */
-{ "pfmov.dd", 0x480005c9, 0xb7e00036, "e,g", 0 }, /* pfiadd.dd fsrc1,f0,fdest */
-{ 0, 0, 0, 0, 0 },
-
-};
-
-#define NUMOPCODES ((sizeof i860_opcodes)/(sizeof i860_opcodes[0]))
-
-
diff --git a/include/opcode/i960.h b/include/opcode/i960.h
deleted file mode 100644
index 7b8e1f5d5..000000000
--- a/include/opcode/i960.h
+++ /dev/null
@@ -1,525 +0,0 @@
-/* Basic 80960 instruction formats.
-
- Copyright 2001-2013 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 3, 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., 51 Franklin Street - Fifth Floor,
- Boston, MA 02110-1301, USA. */
-
-/* The 'COJ' instructions are actually COBR instructions with the 'b' in
- the mnemonic replaced by a 'j'; they are ALWAYS "de-optimized" if
- necessary: if the displacement will not fit in 13 bits, the assembler will
- replace them with the corresponding compare and branch instructions.
-
- All of the 'MEMn' instructions are the same format; the 'n' in the name
- indicates the default index scale factor (the size of the datum operated on).
-
- The FBRA formats are not actually an instruction format. They are the
- "convenience directives" for branching on floating-point comparisons,
- each of which generates 2 instructions (a 'bno' and one other branch).
-
- The CALLJ format is not actually an instruction format. It indicates that
- the instruction generated (a CTRL-format 'call') should have its relocation
- specially flagged for link-time replacement with a 'bal' or 'calls' if
- appropriate. */
-
-#define CTRL 0
-#define COBR 1
-#define COJ 2
-#define REG 3
-#define MEM1 4
-#define MEM2 5
-#define MEM4 6
-#define MEM8 7
-#define MEM12 8
-#define MEM16 9
-#define FBRA 10
-#define CALLJ 11
-
-/* Masks for the mode bits in REG format instructions */
-#define M1 0x0800
-#define M2 0x1000
-#define M3 0x2000
-
-/* Generate the 12-bit opcode for a REG format instruction by placing the
- * high 8 bits in instruction bits 24-31, the low 4 bits in instruction bits
- * 7-10.
- */
-
-#define REG_OPC(opc) ((opc & 0xff0) << 20) | ((opc & 0xf) << 7)
-
-/* Generate a template for a REG format instruction: place the opcode bits
- * in the appropriate fields and OR in mode bits for the operands that will not
- * be used. I.e.,
- * set m1=1, if src1 will not be used
- * set m2=1, if src2 will not be used
- * set m3=1, if dst will not be used
- *
- * Setting the "unused" mode bits to 1 speeds up instruction execution(!).
- * The information is also useful to us because some 1-operand REG instructions
- * use the src1 field, others the dst field; and some 2-operand REG instructions
- * use src1/src2, others src1/dst. The set mode bits enable us to distinguish.
- */
-#define R_0(opc) ( REG_OPC(opc) | M1 | M2 | M3 ) /* No operands */
-#define R_1(opc) ( REG_OPC(opc) | M2 | M3 ) /* 1 operand: src1 */
-#define R_1D(opc) ( REG_OPC(opc) | M1 | M2 ) /* 1 operand: dst */
-#define R_2(opc) ( REG_OPC(opc) | M3 ) /* 2 ops: src1/src2 */
-#define R_2D(opc) ( REG_OPC(opc) | M2 ) /* 2 ops: src1/dst */
-#define R_3(opc) ( REG_OPC(opc) ) /* 3 operands */
-
-/* DESCRIPTOR BYTES FOR REGISTER OPERANDS
- *
- * Interpret names as follows:
- * R: global or local register only
- * RS: global, local, or (if target allows) special-function register only
- * RL: global or local register, or integer literal
- * RSL: global, local, or (if target allows) special-function register;
- * or integer literal
- * F: global, local, or floating-point register
- * FL: global, local, or floating-point register; or literal (including
- * floating point)
- *
- * A number appended to a name indicates that registers must be aligned,
- * as follows:
- * 2: register number must be multiple of 2
- * 4: register number must be multiple of 4
- */
-
-#define SFR 0x10 /* Mask for the "sfr-OK" bit */
-#define LIT 0x08 /* Mask for the "literal-OK" bit */
-#define FP 0x04 /* Mask for "floating-point-OK" bit */
-
-/* This macro ors the bits together. Note that 'align' is a mask
- * for the low 0, 1, or 2 bits of the register number, as appropriate.
- */
-#define OP(align,lit,fp,sfr) ( align | lit | fp | sfr )
-
-#define R OP( 0, 0, 0, 0 )
-#define RS OP( 0, 0, 0, SFR )
-#define RL OP( 0, LIT, 0, 0 )
-#define RSL OP( 0, LIT, 0, SFR )
-#define F OP( 0, 0, FP, 0 )
-#define FL OP( 0, LIT, FP, 0 )
-#define R2 OP( 1, 0, 0, 0 )
-#define RL2 OP( 1, LIT, 0, 0 )
-#define F2 OP( 1, 0, FP, 0 )
-#define FL2 OP( 1, LIT, FP, 0 )
-#define R4 OP( 3, 0, 0, 0 )
-#define RL4 OP( 3, LIT, 0, 0 )
-#define F4 OP( 3, 0, FP, 0 )
-#define FL4 OP( 3, LIT, FP, 0 )
-
-#define M 0x7f /* Memory operand (MEMA & MEMB format instructions) */
-
-/* Macros to extract info from the register operand descriptor byte 'od'.
- */
-#define SFR_OK(od) (od & SFR) /* TRUE if sfr operand allowed */
-#define LIT_OK(od) (od & LIT) /* TRUE if literal operand allowed */
-#define FP_OK(od) (od & FP) /* TRUE if floating-point op allowed */
-#define REG_ALIGN(od,n) ((od & 0x3 & n) == 0)
- /* TRUE if reg #n is properly aligned */
-#define MEMOP(od) (od == M) /* TRUE if operand is a memory operand*/
-
-/* Description of a single i80960 instruction */
-struct i960_opcode {
- long opcode; /* 32 bits, constant fields filled in, rest zeroed */
- char *name; /* Assembler mnemonic */
- short iclass; /* Class: see #defines below */
- char format; /* REG, COBR, CTRL, MEMn, COJ, FBRA, or CALLJ */
- char num_ops; /* Number of operands */
- char operand[3];/* Operand descriptors; same order as assembler instr */
-};
-
-/* Classes of 960 instructions:
- * - each instruction falls into one class.
- * - each target architecture supports one or more classes.
- *
- * EACH CONSTANT MUST CONTAIN 1 AND ONLY 1 SET BIT!: see targ_has_iclass().
- */
-#define I_BASE 0x01 /* 80960 base instruction set */
-#define I_CX 0x02 /* 80960Cx instruction */
-#define I_DEC 0x04 /* Decimal instruction */
-#define I_FP 0x08 /* Floating point instruction */
-#define I_KX 0x10 /* 80960Kx instruction */
-#define I_MIL 0x20 /* Military instruction */
-#define I_CASIM 0x40 /* CA simulator instruction */
-#define I_CX2 0x80 /* Cx/Jx/Hx instructions */
-#define I_JX 0x100 /* Jx/Hx instruction */
-#define I_HX 0x200 /* Hx instructions */
-
-/******************************************************************************
- *
- * TABLE OF i960 INSTRUCTION DESCRIPTIONS
- *
- ******************************************************************************/
-
-const struct i960_opcode i960_opcodes[] = {
-
- /* if a CTRL instruction has an operand, it's always a displacement */
-
- /* callj default=='call' */
- { 0x09000000, "callj", I_BASE, CALLJ, 1, { 0, 0, 0 } },
- { 0x08000000, "b", I_BASE, CTRL, 1, { 0, 0, 0 } },
- { 0x09000000, "call", I_BASE, CTRL, 1, { 0, 0, 0 } },
- { 0x0a000000, "ret", I_BASE, CTRL, 0, { 0, 0, 0 } },
- { 0x0b000000, "bal", I_BASE, CTRL, 1, { 0, 0, 0 } },
- { 0x10000000, "bno", I_BASE, CTRL, 1, { 0, 0, 0 } },
- /* bf same as bno */
- { 0x10000000, "bf", I_BASE, CTRL, 1, { 0, 0, 0 } },
- /* bru same as bno */
- { 0x10000000, "bru", I_BASE, CTRL, 1, { 0, 0, 0 } },
- { 0x11000000, "bg", I_BASE, CTRL, 1, { 0, 0, 0 } },
- /* brg same as bg */
- { 0x11000000, "brg", I_BASE, CTRL, 1, { 0, 0, 0 } },
- { 0x12000000, "be", I_BASE, CTRL, 1, { 0, 0, 0 } },
- /* bre same as be */
- { 0x12000000, "bre", I_BASE, CTRL, 1, { 0, 0, 0 } },
- { 0x13000000, "bge", I_BASE, CTRL, 1, { 0, 0, 0 } },
- /* brge same as bge */
- { 0x13000000, "brge", I_BASE, CTRL, 1, { 0, 0, 0 } },
- { 0x14000000, "bl", I_BASE, CTRL, 1, { 0, 0, 0 } },
- /* brl same as bl */
- { 0x14000000, "brl", I_BASE, CTRL, 1, { 0, 0, 0 } },
- { 0x15000000, "bne", I_BASE, CTRL, 1, { 0, 0, 0 } },
- /* brlg same as bne */
- { 0x15000000, "brlg", I_BASE, CTRL, 1, { 0, 0, 0 } },
- { 0x16000000, "ble", I_BASE, CTRL, 1, { 0, 0, 0 } },
- /* brle same as ble */
- { 0x16000000, "brle", I_BASE, CTRL, 1, { 0, 0, 0 } },
- { 0x17000000, "bo", I_BASE, CTRL, 1, { 0, 0, 0 } },
- /* bt same as bo */
- { 0x17000000, "bt", I_BASE, CTRL, 1, { 0, 0, 0 } },
- /* bro same as bo */
- { 0x17000000, "bro", I_BASE, CTRL, 1, { 0, 0, 0 } },
- { 0x18000000, "faultno", I_BASE, CTRL, 0, { 0, 0, 0 } },
- /* faultf same as faultno */
- { 0x18000000, "faultf", I_BASE, CTRL, 0, { 0, 0, 0 } },
- { 0x19000000, "faultg", I_BASE, CTRL, 0, { 0, 0, 0 } },
- { 0x1a000000, "faulte", I_BASE, CTRL, 0, { 0, 0, 0 } },
- { 0x1b000000, "faultge", I_BASE, CTRL, 0, { 0, 0, 0 } },
- { 0x1c000000, "faultl", I_BASE, CTRL, 0, { 0, 0, 0 } },
- { 0x1d000000, "faultne", I_BASE, CTRL, 0, { 0, 0, 0 } },
- { 0x1e000000, "faultle", I_BASE, CTRL, 0, { 0, 0, 0 } },
- { 0x1f000000, "faulto", I_BASE, CTRL, 0, { 0, 0, 0 } },
- /* faultt syn for faulto */
- { 0x1f000000, "faultt", I_BASE, CTRL, 0, { 0, 0, 0 } },
-
- { 0x01000000, "syscall", I_CASIM,CTRL, 0, { 0, 0, 0 } },
-
- /* If a COBR (or COJ) has 3 operands, the last one is always a
- * displacement and does not appear explicitly in the table.
- */
-
- { 0x20000000, "testno", I_BASE, COBR, 1, { R, 0, 0 } },
- { 0x21000000, "testg", I_BASE, COBR, 1, { R, 0, 0 } },
- { 0x22000000, "teste", I_BASE, COBR, 1, { R, 0, 0 } },
- { 0x23000000, "testge", I_BASE, COBR, 1, { R, 0, 0 } },
- { 0x24000000, "testl", I_BASE, COBR, 1, { R, 0, 0 } },
- { 0x25000000, "testne", I_BASE, COBR, 1, { R, 0, 0 } },
- { 0x26000000, "testle", I_BASE, COBR, 1, { R, 0, 0 } },
- { 0x27000000, "testo", I_BASE, COBR, 1, { R, 0, 0 } },
- { 0x30000000, "bbc", I_BASE, COBR, 3, { RL, RS, 0 } },
- { 0x31000000, "cmpobg", I_BASE, COBR, 3, { RL, RS, 0 } },
- { 0x32000000, "cmpobe", I_BASE, COBR, 3, { RL, RS, 0 } },
- { 0x33000000, "cmpobge", I_BASE, COBR, 3, { RL, RS, 0 } },
- { 0x34000000, "cmpobl", I_BASE, COBR, 3, { RL, RS, 0 } },
- { 0x35000000, "cmpobne", I_BASE, COBR, 3, { RL, RS, 0 } },
- { 0x36000000, "cmpoble", I_BASE, COBR, 3, { RL, RS, 0 } },
- { 0x37000000, "bbs", I_BASE, COBR, 3, { RL, RS, 0 } },
- { 0x38000000, "cmpibno", I_BASE, COBR, 3, { RL, RS, 0 } },
- { 0x39000000, "cmpibg", I_BASE, COBR, 3, { RL, RS, 0 } },
- { 0x3a000000, "cmpibe", I_BASE, COBR, 3, { RL, RS, 0 } },
- { 0x3b000000, "cmpibge", I_BASE, COBR, 3, { RL, RS, 0 } },
- { 0x3c000000, "cmpibl", I_BASE, COBR, 3, { RL, RS, 0 } },
- { 0x3d000000, "cmpibne", I_BASE, COBR, 3, { RL, RS, 0 } },
- { 0x3e000000, "cmpible", I_BASE, COBR, 3, { RL, RS, 0 } },
- { 0x3f000000, "cmpibo", I_BASE, COBR, 3, { RL, RS, 0 } },
- { 0x31000000, "cmpojg", I_BASE, COJ, 3, { RL, RS, 0 } },
- { 0x32000000, "cmpoje", I_BASE, COJ, 3, { RL, RS, 0 } },
- { 0x33000000, "cmpojge", I_BASE, COJ, 3, { RL, RS, 0 } },
- { 0x34000000, "cmpojl", I_BASE, COJ, 3, { RL, RS, 0 } },
- { 0x35000000, "cmpojne", I_BASE, COJ, 3, { RL, RS, 0 } },
- { 0x36000000, "cmpojle", I_BASE, COJ, 3, { RL, RS, 0 } },
- { 0x38000000, "cmpijno", I_BASE, COJ, 3, { RL, RS, 0 } },
- { 0x39000000, "cmpijg", I_BASE, COJ, 3, { RL, RS, 0 } },
- { 0x3a000000, "cmpije", I_BASE, COJ, 3, { RL, RS, 0 } },
- { 0x3b000000, "cmpijge", I_BASE, COJ, 3, { RL, RS, 0 } },
- { 0x3c000000, "cmpijl", I_BASE, COJ, 3, { RL, RS, 0 } },
- { 0x3d000000, "cmpijne", I_BASE, COJ, 3, { RL, RS, 0 } },
- { 0x3e000000, "cmpijle", I_BASE, COJ, 3, { RL, RS, 0 } },
- { 0x3f000000, "cmpijo", I_BASE, COJ, 3, { RL, RS, 0 } },
-
- { 0x80000000, "ldob", I_BASE, MEM1, 2, { M, R, 0 } },
- { 0x82000000, "stob", I_BASE, MEM1, 2, { R, M, 0 } },
- { 0x84000000, "bx", I_BASE, MEM1, 1, { M, 0, 0 } },
- { 0x85000000, "balx", I_BASE, MEM1, 2, { M, R, 0 } },
- { 0x86000000, "callx", I_BASE, MEM1, 1, { M, 0, 0 } },
- { 0x88000000, "ldos", I_BASE, MEM2, 2, { M, R, 0 } },
- { 0x8a000000, "stos", I_BASE, MEM2, 2, { R, M, 0 } },
- { 0x8c000000, "lda", I_BASE, MEM1, 2, { M, R, 0 } },
- { 0x90000000, "ld", I_BASE, MEM4, 2, { M, R, 0 } },
- { 0x92000000, "st", I_BASE, MEM4, 2, { R, M, 0 } },
- { 0x98000000, "ldl", I_BASE, MEM8, 2, { M, R2, 0 } },
- { 0x9a000000, "stl", I_BASE, MEM8, 2, { R2, M, 0 } },
- { 0xa0000000, "ldt", I_BASE, MEM12, 2, { M, R4, 0 } },
- { 0xa2000000, "stt", I_BASE, MEM12, 2, { R4, M, 0 } },
- { 0xb0000000, "ldq", I_BASE, MEM16, 2, { M, R4, 0 } },
- { 0xb2000000, "stq", I_BASE, MEM16, 2, { R4, M, 0 } },
- { 0xc0000000, "ldib", I_BASE, MEM1, 2, { M, R, 0 } },
- { 0xc2000000, "stib", I_BASE, MEM1, 2, { R, M, 0 } },
- { 0xc8000000, "ldis", I_BASE, MEM2, 2, { M, R, 0 } },
- { 0xca000000, "stis", I_BASE, MEM2, 2, { R, M, 0 } },
-
- { R_3(0x580), "notbit", I_BASE, REG, 3, { RSL,RSL,RS } },
- { R_3(0x581), "and", I_BASE, REG, 3, { RSL,RSL,RS } },
- { R_3(0x582), "andnot", I_BASE, REG, 3, { RSL,RSL,RS } },
- { R_3(0x583), "setbit", I_BASE, REG, 3, { RSL,RSL,RS } },
- { R_3(0x584), "notand", I_BASE, REG, 3, { RSL,RSL,RS } },
- { R_3(0x586), "xor", I_BASE, REG, 3, { RSL,RSL,RS } },
- { R_3(0x587), "or", I_BASE, REG, 3, { RSL,RSL,RS } },
- { R_3(0x588), "nor", I_BASE, REG, 3, { RSL,RSL,RS } },
- { R_3(0x589), "xnor", I_BASE, REG, 3, { RSL,RSL,RS } },
- { R_2D(0x58a), "not", I_BASE, REG, 2, { RSL,RS, 0 } },
- { R_3(0x58b), "ornot", I_BASE, REG, 3, { RSL,RSL,RS } },
- { R_3(0x58c), "clrbit", I_BASE, REG, 3, { RSL,RSL,RS } },
- { R_3(0x58d), "notor", I_BASE, REG, 3, { RSL,RSL,RS } },
- { R_3(0x58e), "nand", I_BASE, REG, 3, { RSL,RSL,RS } },
- { R_3(0x58f), "alterbit", I_BASE, REG, 3, { RSL,RSL,RS } },
- { R_3(0x590), "addo", I_BASE, REG, 3, { RSL,RSL,RS } },
- { R_3(0x591), "addi", I_BASE, REG, 3, { RSL,RSL,RS } },
- { R_3(0x592), "subo", I_BASE, REG, 3, { RSL,RSL,RS } },
- { R_3(0x593), "subi", I_BASE, REG, 3, { RSL,RSL,RS } },
- { R_3(0x598), "shro", I_BASE, REG, 3, { RSL,RSL,RS } },
- { R_3(0x59a), "shrdi", I_BASE, REG, 3, { RSL,RSL,RS } },
- { R_3(0x59b), "shri", I_BASE, REG, 3, { RSL,RSL,RS } },
- { R_3(0x59c), "shlo", I_BASE, REG, 3, { RSL,RSL,RS } },
- { R_3(0x59d), "rotate", I_BASE, REG, 3, { RSL,RSL,RS } },
- { R_3(0x59e), "shli", I_BASE, REG, 3, { RSL,RSL,RS } },
- { R_2(0x5a0), "cmpo", I_BASE, REG, 2, { RSL,RSL, 0 } },
- { R_2(0x5a1), "cmpi", I_BASE, REG, 2, { RSL,RSL, 0 } },
- { R_2(0x5a2), "concmpo", I_BASE, REG, 2, { RSL,RSL, 0 } },
- { R_2(0x5a3), "concmpi", I_BASE, REG, 2, { RSL,RSL, 0 } },
- { R_3(0x5a4), "cmpinco", I_BASE, REG, 3, { RSL,RSL,RS } },
- { R_3(0x5a5), "cmpinci", I_BASE, REG, 3, { RSL,RSL,RS } },
- { R_3(0x5a6), "cmpdeco", I_BASE, REG, 3, { RSL,RSL,RS } },
- { R_3(0x5a7), "cmpdeci", I_BASE, REG, 3, { RSL,RSL,RS } },
- { R_2(0x5ac), "scanbyte", I_BASE, REG, 2, { RSL,RSL, 0 } },
- { R_2(0x5ae), "chkbit", I_BASE, REG, 2, { RSL,RSL, 0 } },
- { R_3(0x5b0), "addc", I_BASE, REG, 3, { RSL,RSL,RS } },
- { R_3(0x5b2), "subc", I_BASE, REG, 3, { RSL,RSL,RS } },
- { R_2D(0x5cc), "mov", I_BASE, REG, 2, { RSL,RS, 0 } },
- { R_2D(0x5dc), "movl", I_BASE, REG, 2, { RL2,R2, 0 } },
- { R_2D(0x5ec), "movt", I_BASE, REG, 2, { RL4,R4, 0 } },
- { R_2D(0x5fc), "movq", I_BASE, REG, 2, { RL4,R4, 0 } },
- { R_3(0x610), "atmod", I_BASE, REG, 3, { RS, RSL,R } },
- { R_3(0x612), "atadd", I_BASE, REG, 3, { RS, RSL,RS } },
- { R_2D(0x640), "spanbit", I_BASE, REG, 2, { RSL,RS, 0 } },
- { R_2D(0x641), "scanbit", I_BASE, REG, 2, { RSL,RS, 0 } },
- { R_3(0x645), "modac", I_BASE, REG, 3, { RSL,RSL,RS } },
- { R_3(0x650), "modify", I_BASE, REG, 3, { RSL,RSL,R } },
- { R_3(0x651), "extract", I_BASE, REG, 3, { RSL,RSL,R } },
- { R_3(0x654), "modtc", I_BASE, REG, 3, { RSL,RSL,RS } },
- { R_3(0x655), "modpc", I_BASE, REG, 3, { RSL,RSL,R } },
- { R_1(0x660), "calls", I_BASE, REG, 1, { RSL, 0, 0 } },
- { R_0(0x66b), "mark", I_BASE, REG, 0, { 0, 0, 0 } },
- { R_0(0x66c), "fmark", I_BASE, REG, 0, { 0, 0, 0 } },
- { R_0(0x66d), "flushreg", I_BASE, REG, 0, { 0, 0, 0 } },
- { R_0(0x66f), "syncf", I_BASE, REG, 0, { 0, 0, 0 } },
- { R_3(0x670), "emul", I_BASE, REG, 3, { RSL,RSL,R2 } },
- { R_3(0x671), "ediv", I_BASE, REG, 3, { RSL,RL2,RS } },
- { R_2D(0x672), "cvtadr", I_CASIM,REG, 2, { RL, R2, 0 } },
- { R_3(0x701), "mulo", I_BASE, REG, 3, { RSL,RSL,RS } },
- { R_3(0x708), "remo", I_BASE, REG, 3, { RSL,RSL,RS } },
- { R_3(0x70b), "divo", I_BASE, REG, 3, { RSL,RSL,RS } },
- { R_3(0x741), "muli", I_BASE, REG, 3, { RSL,RSL,RS } },
- { R_3(0x748), "remi", I_BASE, REG, 3, { RSL,RSL,RS } },
- { R_3(0x749), "modi", I_BASE, REG, 3, { RSL,RSL,RS } },
- { R_3(0x74b), "divi", I_BASE, REG, 3, { RSL,RSL,RS } },
-
- /* Floating-point instructions */
-
- { R_2D(0x674), "cvtir", I_FP, REG, 2, { RL, F, 0 } },
- { R_2D(0x675), "cvtilr", I_FP, REG, 2, { RL, F, 0 } },
- { R_3(0x676), "scalerl", I_FP, REG, 3, { RL, FL2,F2 } },
- { R_3(0x677), "scaler", I_FP, REG, 3, { RL, FL, F } },
- { R_3(0x680), "atanr", I_FP, REG, 3, { FL, FL, F } },
- { R_3(0x681), "logepr", I_FP, REG, 3, { FL, FL, F } },
- { R_3(0x682), "logr", I_FP, REG, 3, { FL, FL, F } },
- { R_3(0x683), "remr", I_FP, REG, 3, { FL, FL, F } },
- { R_2(0x684), "cmpor", I_FP, REG, 2, { FL, FL, 0 } },
- { R_2(0x685), "cmpr", I_FP, REG, 2, { FL, FL, 0 } },
- { R_2D(0x688), "sqrtr", I_FP, REG, 2, { FL, F, 0 } },
- { R_2D(0x689), "expr", I_FP, REG, 2, { FL, F, 0 } },
- { R_2D(0x68a), "logbnr", I_FP, REG, 2, { FL, F, 0 } },
- { R_2D(0x68b), "roundr", I_FP, REG, 2, { FL, F, 0 } },
- { R_2D(0x68c), "sinr", I_FP, REG, 2, { FL, F, 0 } },
- { R_2D(0x68d), "cosr", I_FP, REG, 2, { FL, F, 0 } },
- { R_2D(0x68e), "tanr", I_FP, REG, 2, { FL, F, 0 } },
- { R_1(0x68f), "classr", I_FP, REG, 1, { FL, 0, 0 } },
- { R_3(0x690), "atanrl", I_FP, REG, 3, { FL2,FL2,F2 } },
- { R_3(0x691), "logeprl", I_FP, REG, 3, { FL2,FL2,F2 } },
- { R_3(0x692), "logrl", I_FP, REG, 3, { FL2,FL2,F2 } },
- { R_3(0x693), "remrl", I_FP, REG, 3, { FL2,FL2,F2 } },
- { R_2(0x694), "cmporl", I_FP, REG, 2, { FL2,FL2, 0 } },
- { R_2(0x695), "cmprl", I_FP, REG, 2, { FL2,FL2, 0 } },
- { R_2D(0x698), "sqrtrl", I_FP, REG, 2, { FL2,F2, 0 } },
- { R_2D(0x699), "exprl", I_FP, REG, 2, { FL2,F2, 0 } },
- { R_2D(0x69a), "logbnrl", I_FP, REG, 2, { FL2,F2, 0 } },
- { R_2D(0x69b), "roundrl", I_FP, REG, 2, { FL2,F2, 0 } },
- { R_2D(0x69c), "sinrl", I_FP, REG, 2, { FL2,F2, 0 } },
- { R_2D(0x69d), "cosrl", I_FP, REG, 2, { FL2,F2, 0 } },
- { R_2D(0x69e), "tanrl", I_FP, REG, 2, { FL2,F2, 0 } },
- { R_1(0x69f), "classrl", I_FP, REG, 1, { FL2, 0, 0 } },
- { R_2D(0x6c0), "cvtri", I_FP, REG, 2, { FL, R, 0 } },
- { R_2D(0x6c1), "cvtril", I_FP, REG, 2, { FL, R2, 0 } },
- { R_2D(0x6c2), "cvtzri", I_FP, REG, 2, { FL, R, 0 } },
- { R_2D(0x6c3), "cvtzril", I_FP, REG, 2, { FL, R2, 0 } },
- { R_2D(0x6c9), "movr", I_FP, REG, 2, { FL, F, 0 } },
- { R_2D(0x6d9), "movrl", I_FP, REG, 2, { FL2,F2, 0 } },
- { R_2D(0x6e1), "movre", I_FP, REG, 2, { FL4,F4, 0 } },
- { R_3(0x6e2), "cpysre", I_FP, REG, 3, { FL4,FL4,F4 } },
- { R_3(0x6e3), "cpyrsre", I_FP, REG, 3, { FL4,FL4,F4 } },
- { R_3(0x78b), "divr", I_FP, REG, 3, { FL, FL, F } },
- { R_3(0x78c), "mulr", I_FP, REG, 3, { FL, FL, F } },
- { R_3(0x78d), "subr", I_FP, REG, 3, { FL, FL, F } },
- { R_3(0x78f), "addr", I_FP, REG, 3, { FL, FL, F } },
- { R_3(0x79b), "divrl", I_FP, REG, 3, { FL2,FL2,F2 } },
- { R_3(0x79c), "mulrl", I_FP, REG, 3, { FL2,FL2,F2 } },
- { R_3(0x79d), "subrl", I_FP, REG, 3, { FL2,FL2,F2 } },
- { R_3(0x79f), "addrl", I_FP, REG, 3, { FL2,FL2,F2 } },
-
- /* These are the floating point branch instructions. Each actually
- * generates 2 branch instructions: the first a CTRL instruction with
- * the indicated opcode, and the second a 'bno'.
- */
-
- { 0x12000000, "brue", I_FP, FBRA, 1, { 0, 0, 0 } },
- { 0x11000000, "brug", I_FP, FBRA, 1, { 0, 0, 0 } },
- { 0x13000000, "bruge", I_FP, FBRA, 1, { 0, 0, 0 } },
- { 0x14000000, "brul", I_FP, FBRA, 1, { 0, 0, 0 } },
- { 0x16000000, "brule", I_FP, FBRA, 1, { 0, 0, 0 } },
- { 0x15000000, "brulg", I_FP, FBRA, 1, { 0, 0, 0 } },
-
-
- /* Decimal instructions */
-
- { R_3(0x642), "daddc", I_DEC, REG, 3, { RSL,RSL,RS } },
- { R_3(0x643), "dsubc", I_DEC, REG, 3, { RSL,RSL,RS } },
- { R_2D(0x644), "dmovt", I_DEC, REG, 2, { RSL,RS, 0 } },
-
-
- /* KX extensions */
-
- { R_2(0x600), "synmov", I_KX, REG, 2, { R, R, 0 } },
- { R_2(0x601), "synmovl", I_KX, REG, 2, { R, R, 0 } },
- { R_2(0x602), "synmovq", I_KX, REG, 2, { R, R, 0 } },
- { R_2D(0x615), "synld", I_KX, REG, 2, { R, R, 0 } },
-
-
- /* MC extensions */
-
- { R_3(0x603), "cmpstr", I_MIL, REG, 3, { R, R, RL } },
- { R_3(0x604), "movqstr", I_MIL, REG, 3, { R, R, RL } },
- { R_3(0x605), "movstr", I_MIL, REG, 3, { R, R, RL } },
- { R_2D(0x613), "inspacc", I_MIL, REG, 2, { R, R, 0 } },
- { R_2D(0x614), "ldphy", I_MIL, REG, 2, { R, R, 0 } },
- { R_3(0x617), "fill", I_MIL, REG, 3, { R, RL, RL } },
- { R_2D(0x646), "condrec", I_MIL, REG, 2, { R, R, 0 } },
- { R_2D(0x656), "receive", I_MIL, REG, 2, { R, R, 0 } },
- { R_3(0x662), "send", I_MIL, REG, 3, { R, RL, R } },
- { R_1(0x663), "sendserv", I_MIL, REG, 1, { R, 0, 0 } },
- { R_1(0x664), "resumprcs", I_MIL, REG, 1, { R, 0, 0 } },
- { R_1(0x665), "schedprcs", I_MIL, REG, 1, { R, 0, 0 } },
- { R_0(0x666), "saveprcs", I_MIL, REG, 0, { 0, 0, 0 } },
- { R_1(0x668), "condwait", I_MIL, REG, 1, { R, 0, 0 } },
- { R_1(0x669), "wait", I_MIL, REG, 1, { R, 0, 0 } },
- { R_1(0x66a), "signal", I_MIL, REG, 1, { R, 0, 0 } },
- { R_1D(0x673), "ldtime", I_MIL, REG, 1, { R2, 0, 0 } },
-
-
- /* CX extensions */
-
- { R_3(0x5d8), "eshro", I_CX2, REG, 3, { RSL,RSL,RS } },
- { R_3(0x630), "sdma", I_CX, REG, 3, { RSL,RSL,RL } },
- { R_3(0x631), "udma", I_CX, REG, 0, { 0, 0, 0 } },
- { R_3(0x659), "sysctl", I_CX2, REG, 3, { RSL,RSL,RL } },
-
-
- /* Jx extensions. */
- { R_3(0x780), "addono", I_JX, REG, 3, { RSL,RSL,RS } },
- { R_3(0x790), "addog", I_JX, REG, 3, { RSL,RSL,RS } },
- { R_3(0x7a0), "addoe", I_JX, REG, 3, { RSL,RSL,RS } },
- { R_3(0x7b0), "addoge", I_JX, REG, 3, { RSL,RSL,RS } },
- { R_3(0x7c0), "addol", I_JX, REG, 3, { RSL,RSL,RS } },
- { R_3(0x7d0), "addone", I_JX, REG, 3, { RSL,RSL,RS } },
- { R_3(0x7e0), "addole", I_JX, REG, 3, { RSL,RSL,RS } },
- { R_3(0x7f0), "addoo", I_JX, REG, 3, { RSL,RSL,RS } },
- { R_3(0x781), "addino", I_JX, REG, 3, { RSL,RSL,RS } },
- { R_3(0x791), "addig", I_JX, REG, 3, { RSL,RSL,RS } },
- { R_3(0x7a1), "addie", I_JX, REG, 3, { RSL,RSL,RS } },
- { R_3(0x7b1), "addige", I_JX, REG, 3, { RSL,RSL,RS } },
- { R_3(0x7c1), "addil", I_JX, REG, 3, { RSL,RSL,RS } },
- { R_3(0x7d1), "addine", I_JX, REG, 3, { RSL,RSL,RS } },
- { R_3(0x7e1), "addile", I_JX, REG, 3, { RSL,RSL,RS } },
- { R_3(0x7f1), "addio", I_JX, REG, 3, { RSL,RSL,RS } },
-
- { R_2D(0x5ad), "bswap", I_JX, REG, 2, { RSL, RS, 0 } },
-
- { R_2(0x594), "cmpob", I_JX, REG, 2, { RSL,RSL, 0 } },
- { R_2(0x595), "cmpib", I_JX, REG, 2, { RSL,RSL, 0 } },
- { R_2(0x596), "cmpos", I_JX, REG, 2, { RSL,RSL, 0 } },
- { R_2(0x597), "cmpis", I_JX, REG, 2, { RSL,RSL, 0 } },
-
- { R_3(0x784), "selno", I_JX, REG, 3, { RSL,RSL,RS } },
- { R_3(0x794), "selg", I_JX, REG, 3, { RSL,RSL,RS } },
- { R_3(0x7a4), "sele", I_JX, REG, 3, { RSL,RSL,RS } },
- { R_3(0x7b4), "selge", I_JX, REG, 3, { RSL,RSL,RS } },
- { R_3(0x7c4), "sell", I_JX, REG, 3, { RSL,RSL,RS } },
- { R_3(0x7d4), "selne", I_JX, REG, 3, { RSL,RSL,RS } },
- { R_3(0x7e4), "selle", I_JX, REG, 3, { RSL,RSL,RS } },
- { R_3(0x7f4), "selo", I_JX, REG, 3, { RSL,RSL,RS } },
-
- { R_3(0x782), "subono", I_JX, REG, 3, { RSL,RSL,RS } },
- { R_3(0x792), "subog", I_JX, REG, 3, { RSL,RSL,RS } },
- { R_3(0x7a2), "suboe", I_JX, REG, 3, { RSL,RSL,RS } },
- { R_3(0x7b2), "suboge", I_JX, REG, 3, { RSL,RSL,RS } },
- { R_3(0x7c2), "subol", I_JX, REG, 3, { RSL,RSL,RS } },
- { R_3(0x7d2), "subone", I_JX, REG, 3, { RSL,RSL,RS } },
- { R_3(0x7e2), "subole", I_JX, REG, 3, { RSL,RSL,RS } },
- { R_3(0x7f2), "suboo", I_JX, REG, 3, { RSL,RSL,RS } },
- { R_3(0x783), "subino", I_JX, REG, 3, { RSL,RSL,RS } },
- { R_3(0x793), "subig", I_JX, REG, 3, { RSL,RSL,RS } },
- { R_3(0x7a3), "subie", I_JX, REG, 3, { RSL,RSL,RS } },
- { R_3(0x7b3), "subige", I_JX, REG, 3, { RSL,RSL,RS } },
- { R_3(0x7c3), "subil", I_JX, REG, 3, { RSL,RSL,RS } },
- { R_3(0x7d3), "subine", I_JX, REG, 3, { RSL,RSL,RS } },
- { R_3(0x7e3), "subile", I_JX, REG, 3, { RSL,RSL,RS } },
- { R_3(0x7f3), "subio", I_JX, REG, 3, { RSL,RSL,RS } },
-
- { R_3(0x65c), "dcctl", I_JX, REG, 3, { RSL,RSL,RL } },
- { R_3(0x65b), "icctl", I_JX, REG, 3, { RSL,RSL,RS } },
- { R_2D(0x658), "intctl", I_JX, REG, 2, { RSL, RS, 0 } },
- { R_0(0x5b4), "intdis", I_JX, REG, 0, { 0, 0, 0 } },
- { R_0(0x5b5), "inten", I_JX, REG, 0, { 0, 0, 0 } },
- { R_0(0x65d), "halt", I_JX, REG, 1, { RSL, 0, 0 } },
-
- /* Hx extensions. */
- { 0xac000000, "dcinva", I_HX, MEM1, 1, { M, 0, 0 } },
-
- /* END OF TABLE */
-
- { 0, NULL, 0, 0, 0, { 0, 0, 0 } }
-};
-
- /* end of i960-opcode.h */
diff --git a/include/opcode/ia64.h b/include/opcode/ia64.h
deleted file mode 100644
index 433c5058a..000000000
--- a/include/opcode/ia64.h
+++ /dev/null
@@ -1,422 +0,0 @@
-/* ia64.h -- Header file for ia64 opcode table
- Copyright (C) 1998, 1999, 2000, 2002, 2005, 2006, 2010
- Free Software Foundation, Inc.
- Contributed by David Mosberger-Tang <davidm@hpl.hp.com>
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef opcode_ia64_h
-#define opcode_ia64_h
-
-#include <sys/types.h>
-
-#include "bfd.h"
-
-
-typedef BFD_HOST_U_64_BIT ia64_insn;
-
-enum ia64_insn_type
- {
- IA64_TYPE_NIL = 0, /* illegal type */
- IA64_TYPE_A, /* integer alu (I- or M-unit) */
- IA64_TYPE_I, /* non-alu integer (I-unit) */
- IA64_TYPE_M, /* memory (M-unit) */
- IA64_TYPE_B, /* branch (B-unit) */
- IA64_TYPE_F, /* floating-point (F-unit) */
- IA64_TYPE_X, /* long encoding (X-unit) */
- IA64_TYPE_DYN, /* Dynamic opcode */
- IA64_NUM_TYPES
- };
-
-enum ia64_unit
- {
- IA64_UNIT_NIL = 0, /* illegal unit */
- IA64_UNIT_I, /* integer unit */
- IA64_UNIT_M, /* memory unit */
- IA64_UNIT_B, /* branching unit */
- IA64_UNIT_F, /* floating-point unit */
- IA64_UNIT_L, /* long "unit" */
- IA64_UNIT_X, /* may be integer or branch unit */
- IA64_NUM_UNITS
- };
-
-/* Changes to this enumeration must be propagated to the operand table in
- bfd/cpu-ia64-opc.c
- */
-enum ia64_opnd
- {
- IA64_OPND_NIL, /* no operand---MUST BE FIRST!*/
-
- /* constants */
- IA64_OPND_AR_CSD, /* application register csd (ar.csd) */
- IA64_OPND_AR_CCV, /* application register ccv (ar.ccv) */
- IA64_OPND_AR_PFS, /* application register pfs (ar.pfs) */
- IA64_OPND_C1, /* the constant 1 */
- IA64_OPND_C8, /* the constant 8 */
- IA64_OPND_C16, /* the constant 16 */
- IA64_OPND_GR0, /* gr0 */
- IA64_OPND_IP, /* instruction pointer (ip) */
- IA64_OPND_PR, /* predicate register (pr) */
- IA64_OPND_PR_ROT, /* rotating predicate register (pr.rot) */
- IA64_OPND_PSR, /* processor status register (psr) */
- IA64_OPND_PSR_L, /* processor status register L (psr.l) */
- IA64_OPND_PSR_UM, /* processor status register UM (psr.um) */
-
- /* register operands: */
- IA64_OPND_AR3, /* third application register # (bits 20-26) */
- IA64_OPND_B1, /* branch register # (bits 6-8) */
- IA64_OPND_B2, /* branch register # (bits 13-15) */
- IA64_OPND_CR3, /* third control register # (bits 20-26) */
- IA64_OPND_F1, /* first floating-point register # */
- IA64_OPND_F2, /* second floating-point register # */
- IA64_OPND_F3, /* third floating-point register # */
- IA64_OPND_F4, /* fourth floating-point register # */
- IA64_OPND_P1, /* first predicate # */
- IA64_OPND_P2, /* second predicate # */
- IA64_OPND_R1, /* first register # */
- IA64_OPND_R2, /* second register # */
- IA64_OPND_R3, /* third register # */
- IA64_OPND_R3_2, /* third register # (limited to gr0-gr3) */
- IA64_OPND_DAHR3, /* dahr reg # ( bits 23-25) */
-
- /* memory operands: */
- IA64_OPND_MR3, /* memory at addr of third register # */
-
- /* indirect operands: */
- IA64_OPND_CPUID_R3, /* cpuid[reg] */
- IA64_OPND_DBR_R3, /* dbr[reg] */
- IA64_OPND_DTR_R3, /* dtr[reg] */
- IA64_OPND_ITR_R3, /* itr[reg] */
- IA64_OPND_IBR_R3, /* ibr[reg] */
- IA64_OPND_MSR_R3, /* msr[reg] */
- IA64_OPND_PKR_R3, /* pkr[reg] */
- IA64_OPND_PMC_R3, /* pmc[reg] */
- IA64_OPND_PMD_R3, /* pmd[reg] */
- IA64_OPND_DAHR_R3, /* dahr[reg] */
- IA64_OPND_RR_R3, /* rr[reg] */
-
- /* immediate operands: */
- IA64_OPND_CCNT5, /* 5-bit count (31 - bits 20-24) */
- IA64_OPND_CNT2a, /* 2-bit count (1 + bits 27-28) */
- IA64_OPND_CNT2b, /* 2-bit count (bits 27-28): 1, 2, 3 */
- IA64_OPND_CNT2c, /* 2-bit count (bits 30-31): 0, 7, 15, or 16 */
- IA64_OPND_CNT5, /* 5-bit count (bits 14-18) */
- IA64_OPND_CNT6, /* 6-bit count (bits 27-32) */
- IA64_OPND_CPOS6a, /* 6-bit count (63 - bits 20-25) */
- IA64_OPND_CPOS6b, /* 6-bit count (63 - bits 14-19) */
- IA64_OPND_CPOS6c, /* 6-bit count (63 - bits 31-36) */
- IA64_OPND_IMM1, /* signed 1-bit immediate (bit 36) */
- IA64_OPND_IMMU2, /* unsigned 2-bit immediate (bits 13-14) */
- IA64_OPND_IMMU5b, /* unsigned 5-bit immediate (32 + bits 14-18) */
- IA64_OPND_IMMU7a, /* unsigned 7-bit immediate (bits 13-19) */
- IA64_OPND_IMMU7b, /* unsigned 7-bit immediate (bits 20-26) */
- IA64_OPND_SOF, /* 8-bit stack frame size */
- IA64_OPND_SOL, /* 8-bit size of locals */
- IA64_OPND_SOR, /* 6-bit number of rotating registers (scaled by 8) */
- IA64_OPND_IMM8, /* signed 8-bit immediate (bits 13-19 & 36) */
- IA64_OPND_IMM8U4, /* cmp4*u signed 8-bit immediate (bits 13-19 & 36) */
- IA64_OPND_IMM8M1, /* signed 8-bit immediate -1 (bits 13-19 & 36) */
- IA64_OPND_IMM8M1U4, /* cmp4*u signed 8-bit immediate -1 (bits 13-19 & 36)*/
- IA64_OPND_IMM8M1U8, /* cmp*u signed 8-bit immediate -1 (bits 13-19 & 36) */
- IA64_OPND_IMMU9, /* unsigned 9-bit immediate (bits 33-34, 20-26) */
- IA64_OPND_IMM9a, /* signed 9-bit immediate (bits 6-12, 27, 36) */
- IA64_OPND_IMM9b, /* signed 9-bit immediate (bits 13-19, 27, 36) */
- IA64_OPND_IMM14, /* signed 14-bit immediate (bits 13-19, 27-32, 36) */
- IA64_OPND_IMMU16, /* unsigned 16-bit immediate (bits 6-9, 12-22, 36) */
- IA64_OPND_IMM17, /* signed 17-bit immediate (2*bits 6-12, 24-31, 36) */
- IA64_OPND_IMMU19, /* unsigned 19-bit immediate (bits 6-9, 12-25, 36) */
- IA64_OPND_IMMU21, /* unsigned 21-bit immediate (bits 6-25, 36) */
- IA64_OPND_IMM22, /* signed 22-bit immediate (bits 13-19, 22-36) */
- IA64_OPND_IMMU24, /* unsigned 24-bit immediate (bits 6-26, 31-32, 36) */
- IA64_OPND_IMM44, /* signed 44-bit immediate (2^16*bits 6-32, 36) */
- IA64_OPND_IMMU62, /* unsigned 62-bit immediate */
- IA64_OPND_IMMU64, /* unsigned 64-bit immediate (lotsa bits...) */
- IA64_OPND_INC3, /* signed 3-bit (bits 13-15): +/-1, 4, 8, 16 */
- IA64_OPND_LEN4, /* 4-bit count (bits 27-30 + 1) */
- IA64_OPND_LEN6, /* 6-bit count (bits 27-32 + 1) */
- IA64_OPND_MBTYPE4, /* 4-bit mux type (bits 20-23) */
- IA64_OPND_MHTYPE8, /* 8-bit mux type (bits 20-27) */
- IA64_OPND_POS6, /* 6-bit count (bits 14-19) */
- IA64_OPND_TAG13, /* signed 13-bit tag (ip + 16*bits 6-12, 33-34) */
- IA64_OPND_TAG13b, /* signed 13-bit tag (ip + 16*bits 24-32) */
- IA64_OPND_TGT25, /* signed 25-bit (ip + 16*bits 6-25, 36) */
- IA64_OPND_TGT25b, /* signed 25-bit (ip + 16*bits 6-12, 20-32, 36) */
- IA64_OPND_TGT25c, /* signed 25-bit (ip + 16*bits 13-32, 36) */
- IA64_OPND_TGT64, /* 64-bit (ip + 16*bits 13-32, 36, 2-40(L)) */
- IA64_OPND_LDXMOV, /* any symbol, generates R_IA64_LDXMOV. */
-
- IA64_OPND_CNT6a, /* 6-bit count (bits 6-11) */
- IA64_OPND_STRD5b, /* 5-bit stride (bits 13-17) */
-
- IA64_OPND_COUNT /* # of operand types (MUST BE LAST!) */
- };
-
-enum ia64_dependency_mode
-{
- IA64_DV_RAW,
- IA64_DV_WAW,
- IA64_DV_WAR,
-};
-
-enum ia64_dependency_semantics
-{
- IA64_DVS_NONE,
- IA64_DVS_IMPLIED,
- IA64_DVS_IMPLIEDF,
- IA64_DVS_DATA,
- IA64_DVS_INSTR,
- IA64_DVS_SPECIFIC,
- IA64_DVS_STOP,
- IA64_DVS_OTHER,
-};
-
-enum ia64_resource_specifier
-{
- IA64_RS_ANY,
- IA64_RS_AR_K,
- IA64_RS_AR_UNAT,
- IA64_RS_AR, /* 8-15, 20, 22-23, 31, 33-35, 37-39, 41-43, 45-47, 67-111 */
- IA64_RS_ARb, /* 48-63, 112-127 */
- IA64_RS_BR,
- IA64_RS_CFM,
- IA64_RS_CPUID,
- IA64_RS_CR_IIB,
- IA64_RS_CR_IRR,
- IA64_RS_CR_LRR,
- IA64_RS_CR, /* 3-7,10-15,18,28-63,75-79,82-127 */
- IA64_RS_DAHR,
- IA64_RS_DBR,
- IA64_RS_FR,
- IA64_RS_FRb,
- IA64_RS_GR0,
- IA64_RS_GR,
- IA64_RS_IBR,
- IA64_RS_INSERVICE, /* CR[EOI] or CR[IVR] */
- IA64_RS_MSR,
- IA64_RS_PKR,
- IA64_RS_PMC,
- IA64_RS_PMD,
- IA64_RS_PR, /* non-rotating, 1-15 */
- IA64_RS_PRr, /* rotating, 16-62 */
- IA64_RS_PR63,
- IA64_RS_RR,
-
- IA64_RS_ARX, /* ARs not in RS_AR or RS_ARb */
- IA64_RS_CRX, /* CRs not in RS_CR */
- IA64_RS_PSR, /* PSR bits */
- IA64_RS_RSE, /* implementation-specific RSE resources */
- IA64_RS_AR_FPSR,
-
-};
-
-enum ia64_rse_resource
-{
- IA64_RSE_N_STACKED_PHYS,
- IA64_RSE_BOF,
- IA64_RSE_STORE_REG,
- IA64_RSE_LOAD_REG,
- IA64_RSE_BSPLOAD,
- IA64_RSE_RNATBITINDEX,
- IA64_RSE_CFLE,
- IA64_RSE_NDIRTY,
-};
-
-/* Information about a given resource dependency */
-struct ia64_dependency
-{
- /* Name of the resource */
- const char *name;
- /* Does this dependency need further specification? */
- enum ia64_resource_specifier specifier;
- /* Mode of dependency */
- enum ia64_dependency_mode mode;
- /* Dependency semantics */
- enum ia64_dependency_semantics semantics;
- /* Register index, if applicable (distinguishes AR, CR, and PSR deps) */
-#define REG_NONE (-1)
- int regindex;
- /* Special info on semantics */
- const char *info;
-};
-
-/* Two arrays of indexes into the ia64_dependency table.
- chks are dependencies to check for conflicts when an opcode is
- encountered; regs are dependencies to register (mark as used) when an
- opcode is used. chks correspond to readers (RAW) or writers (WAW or
- WAR) of a resource, while regs correspond to writers (RAW or WAW) and
- readers (WAR) of a resource. */
-struct ia64_opcode_dependency
-{
- int nchks;
- const unsigned short *chks;
- int nregs;
- const unsigned short *regs;
-};
-
-/* encode/extract the note/index for a dependency */
-#define RDEP(N,X) (((N)<<11)|(X))
-#define NOTE(X) (((X)>>11)&0x1F)
-#define DEP(X) ((X)&0x7FF)
-
-/* A template descriptor describes the execution units that are active
- for each of the three slots. It also specifies the location of
- instruction group boundaries that may be present between two slots. */
-struct ia64_templ_desc
- {
- int group_boundary; /* 0=no boundary, 1=between slot 0 & 1, etc. */
- enum ia64_unit exec_unit[3];
- const char *name;
- };
-
-/* The opcode table is an array of struct ia64_opcode. */
-
-struct ia64_opcode
- {
- /* The opcode name. */
- const char *name;
-
- /* The type of the instruction: */
- enum ia64_insn_type type;
-
- /* Number of output operands: */
- int num_outputs;
-
- /* The opcode itself. Those bits which will be filled in with
- operands are zeroes. */
- ia64_insn opcode;
-
- /* The opcode mask. This is used by the disassembler. This is a
- mask containing ones indicating those bits which must match the
- opcode field, and zeroes indicating those bits which need not
- match (and are presumably filled in by operands). */
- ia64_insn mask;
-
- /* An array of operand codes. Each code is an index into the
- operand table. They appear in the order which the operands must
- appear in assembly code, and are terminated by a zero. */
- enum ia64_opnd operands[5];
-
- /* One bit flags for the opcode. These are primarily used to
- indicate specific processors and environments support the
- instructions. The defined values are listed below. */
- unsigned int flags;
-
- /* Used by ia64_find_next_opcode (). */
- short ent_index;
-
- /* Opcode dependencies. */
- const struct ia64_opcode_dependency *dependencies;
- };
-
-/* Values defined for the flags field of a struct ia64_opcode. */
-
-#define IA64_OPCODE_FIRST (1<<0) /* must be first in an insn group */
-#define IA64_OPCODE_X_IN_MLX (1<<1) /* insn is allowed in X slot of MLX */
-#define IA64_OPCODE_LAST (1<<2) /* must be last in an insn group */
-#define IA64_OPCODE_PRIV (1<<3) /* privileged instruct */
-#define IA64_OPCODE_SLOT2 (1<<4) /* insn allowed in slot 2 only */
-#define IA64_OPCODE_NO_PRED (1<<5) /* insn cannot be predicated */
-#define IA64_OPCODE_PSEUDO (1<<6) /* insn is a pseudo-op */
-#define IA64_OPCODE_F2_EQ_F3 (1<<7) /* constraint: F2 == F3 */
-#define IA64_OPCODE_LEN_EQ_64MCNT (1<<8) /* constraint: LEN == 64-CNT */
-#define IA64_OPCODE_MOD_RRBS (1<<9) /* modifies all rrbs in CFM */
-#define IA64_OPCODE_POSTINC (1<<10) /* postincrement MR3 operand */
-
-/* A macro to extract the major opcode from an instruction. */
-#define IA64_OP(i) (((i) >> 37) & 0xf)
-
-enum ia64_operand_class
- {
- IA64_OPND_CLASS_CST, /* constant */
- IA64_OPND_CLASS_REG, /* register */
- IA64_OPND_CLASS_IND, /* indirect register */
- IA64_OPND_CLASS_ABS, /* absolute value */
- IA64_OPND_CLASS_REL, /* IP-relative value */
- };
-
-/* The operands table is an array of struct ia64_operand. */
-
-struct ia64_operand
-{
- enum ia64_operand_class op_class;
-
- /* Set VALUE as the operand bits for the operand of type SELF in the
- instruction pointed to by CODE. If an error occurs, *CODE is not
- modified and the returned string describes the cause of the
- error. If no error occurs, NULL is returned. */
- const char *(*insert) (const struct ia64_operand *self, ia64_insn value,
- ia64_insn *code);
-
- /* Extract the operand bits for an operand of type SELF from
- instruction CODE store them in *VALUE. If an error occurs, the
- cause of the error is described by the string returned. If no
- error occurs, NULL is returned. */
- const char *(*extract) (const struct ia64_operand *self, ia64_insn code,
- ia64_insn *value);
-
- /* A string whose meaning depends on the operand class. */
-
- const char *str;
-
- struct bit_field
- {
- /* The number of bits in the operand. */
- int bits;
-
- /* How far the operand is left shifted in the instruction. */
- int shift;
- }
- field[4]; /* no operand has more than this many bit-fields */
-
- unsigned int flags;
-
- const char *desc; /* brief description */
-};
-
-/* Values defined for the flags field of a struct ia64_operand. */
-
-/* Disassemble as signed decimal (instead of hex): */
-#define IA64_OPND_FLAG_DECIMAL_SIGNED (1<<0)
-/* Disassemble as unsigned decimal (instead of hex): */
-#define IA64_OPND_FLAG_DECIMAL_UNSIGNED (1<<1)
-
-extern const struct ia64_templ_desc ia64_templ_desc[16];
-
-/* The tables are sorted by major opcode number and are otherwise in
- the order in which the disassembler should consider instructions. */
-extern struct ia64_opcode ia64_opcodes_a[];
-extern struct ia64_opcode ia64_opcodes_i[];
-extern struct ia64_opcode ia64_opcodes_m[];
-extern struct ia64_opcode ia64_opcodes_b[];
-extern struct ia64_opcode ia64_opcodes_f[];
-extern struct ia64_opcode ia64_opcodes_d[];
-
-
-extern struct ia64_opcode *ia64_find_opcode (const char *);
-extern struct ia64_opcode *ia64_find_next_opcode (struct ia64_opcode *);
-
-extern struct ia64_opcode *ia64_dis_opcode (ia64_insn,
- enum ia64_insn_type);
-
-extern void ia64_free_opcode (struct ia64_opcode *);
-extern const struct ia64_dependency *ia64_find_dependency (int);
-
-/* To avoid circular library dependencies, this array is implemented
- in bfd/cpu-ia64-opc.c: */
-extern const struct ia64_operand elf64_ia64_operands[IA64_OPND_COUNT];
-
-#endif /* opcode_ia64_h */
diff --git a/include/opcode/m68hc11.h b/include/opcode/m68hc11.h
deleted file mode 100644
index 1a002008c..000000000
--- a/include/opcode/m68hc11.h
+++ /dev/null
@@ -1,456 +0,0 @@
-/* m68hc11.h -- Header file for Motorola 68HC11 & 68HC12 opcode table
- Copyright 1999, 2000, 2002, 2003, 2010, 2012
- Free Software Foundation, Inc.
- Written by Stephane Carrez (stcarrez@nerim.fr)
-
- This file is part of GDB, GAS, and the GNU binutils.
-
- GDB, GAS, and the GNU binutils are free software; you can redistribute
- them and/or modify them under the terms of the GNU General Public
- License as published by the Free Software Foundation; either version 3,
- or (at your option) any later version.
-
- GDB, GAS, and the GNU binutils are distributed in the hope that they
- 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 file; see the file COPYING3. If not, write to the Free
- Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef _OPCODE_M68HC11_H
-#define _OPCODE_M68HC11_H
-
-/* Flags for the definition of the 68HC11 & 68HC12 CCR. */
-#define M6811_S_BIT 0x80 /* Stop disable */
-#define M6811_X_BIT 0x40 /* X-interrupt mask */
-#define M6811_H_BIT 0x20 /* Half carry flag */
-#define M6811_I_BIT 0x10 /* I-interrupt mask */
-#define M6811_N_BIT 0x08 /* Negative */
-#define M6811_Z_BIT 0x04 /* Zero */
-#define M6811_V_BIT 0x02 /* Overflow */
-#define M6811_C_BIT 0x01 /* Carry */
-
-/* 68HC11 register address offsets (range 0..0x3F or 0..64).
- The absolute address of the I/O register depends on the setting
- of the M6811_INIT register. At init time, the I/O registers are
- mapped at 0x1000. Address of registers is then:
-
- 0x1000 + M6811_xxx. */
-#define M6811_PORTA 0x00 /* Port A register */
-#define M6811__RES1 0x01 /* Unused/Reserved */
-#define M6811_PIOC 0x02 /* Parallel I/O Control register */
-#define M6811_PORTC 0x03 /* Port C register */
-#define M6811_PORTB 0x04 /* Port B register */
-#define M6811_PORTCL 0x05 /* Alternate latched port C */
-#define M6811__RES6 0x06 /* Unused/Reserved */
-#define M6811_DDRC 0x07 /* Data direction register for port C */
-#define M6811_PORTD 0x08 /* Port D register */
-#define M6811_DDRD 0x09 /* Data direction register for port D */
-#define M6811_PORTE 0x0A /* Port E input register */
-#define M6811_CFORC 0x0B /* Compare Force Register */
-#define M6811_OC1M 0x0C /* OC1 Action Mask register */
-#define M6811_OC1D 0x0D /* OC1 Action Data register */
-#define M6811_TCTN 0x0E /* Timer Counter Register */
-#define M6811_TCTN_H 0x0E /* " " " High part */
-#define M6811_TCTN_L 0x0F /* " " " Low part */
-#define M6811_TIC1 0x10 /* Input capture 1 register */
-#define M6811_TIC1_H 0x10 /* " " " High part */
-#define M6811_TIC1_L 0x11 /* " " " Low part */
-#define M6811_TIC2 0x12 /* Input capture 2 register */
-#define M6811_TIC2_H 0x12 /* " " " High part */
-#define M6811_TIC2_L 0x13 /* " " " Low part */
-#define M6811_TIC3 0x14 /* Input capture 3 register */
-#define M6811_TIC3_H 0x14 /* " " " High part */
-#define M6811_TIC3_L 0x15 /* " " " Low part */
-#define M6811_TOC1 0x16 /* Output Compare 1 register */
-#define M6811_TOC1_H 0x16 /* " " " High part */
-#define M6811_TOC1_L 0x17 /* " " " Low part */
-#define M6811_TOC2 0x18 /* Output Compare 2 register */
-#define M6811_TOC2_H 0x18 /* " " " High part */
-#define M6811_TOC2_L 0x19 /* " " " Low part */
-#define M6811_TOC3 0x1A /* Output Compare 3 register */
-#define M6811_TOC3_H 0x1A /* " " " High part */
-#define M6811_TOC3_L 0x1B /* " " " Low part */
-#define M6811_TOC4 0x1C /* Output Compare 4 register */
-#define M6811_TOC4_H 0x1C /* " " " High part */
-#define M6811_TOC4_L 0x1D /* " " " Low part */
-#define M6811_TOC5 0x1E /* Output Compare 5 register */
-#define M6811_TOC5_H 0x1E /* " " " High part */
-#define M6811_TOC5_L 0x1F /* " " " Low part */
-#define M6811_TCTL1 0x20 /* Timer Control register 1 */
-#define M6811_TCTL2 0x21 /* Timer Control register 2 */
-#define M6811_TMSK1 0x22 /* Timer Interrupt Mask Register 1 */
-#define M6811_TFLG1 0x23 /* Timer Interrupt Flag Register 1 */
-#define M6811_TMSK2 0x24 /* Timer Interrupt Mask Register 2 */
-#define M6811_TFLG2 0x25 /* Timer Interrupt Flag Register 2 */
-#define M6811_PACTL 0x26 /* Pulse Accumulator Control Register */
-#define M6811_PACNT 0x27 /* Pulse Accumulator Count Register */
-#define M6811_SPCR 0x28 /* SPI Control register */
-#define M6811_SPSR 0x29 /* SPI Status register */
-#define M6811_SPDR 0x2A /* SPI Data register */
-#define M6811_BAUD 0x2B /* SCI Baud register */
-#define M6811_SCCR1 0x2C /* SCI Control register 1 */
-#define M6811_SCCR2 0x2D /* SCI Control register 2 */
-#define M6811_SCSR 0x2E /* SCI Status register */
-#define M6811_SCDR 0x2F /* SCI Data (Read => RDR, Write => TDR) */
-#define M6811_ADCTL 0x30 /* A/D Control register */
-#define M6811_ADR1 0x31 /* A/D, Analog Result register 1 */
-#define M6811_ADR2 0x32 /* A/D, Analog Result register 2 */
-#define M6811_ADR3 0x33 /* A/D, Analog Result register 3 */
-#define M6811_ADR4 0x34 /* A/D, Analog Result register 4 */
-#define M6811__RES35 0x35
-#define M6811__RES36 0x36
-#define M6811__RES37 0x37
-#define M6811__RES38 0x38
-#define M6811_OPTION 0x39 /* System Configuration Options */
-#define M6811_COPRST 0x3A /* Arm/Reset COP Timer Circuitry */
-#define M6811_PPROG 0x3B /* EEPROM Programming Control Register */
-#define M6811_HPRIO 0x3C /* Highest priority I-Bit int and misc */
-#define M6811_INIT 0x3D /* Ram and I/O mapping register */
-#define M6811_TEST1 0x3E /* Factory test control register */
-#define M6811_CONFIG 0x3F /* COP, ROM and EEPROM enables */
-
-
-/* Flags of the CONFIG register (in EEPROM). */
-#define M6811_NOSEC 0x08 /* Security mode disable */
-#define M6811_NOCOP 0x04 /* COP system disable */
-#define M6811_ROMON 0x02 /* Enable on-chip rom */
-#define M6811_EEON 0x01 /* Enable on-chip eeprom */
-
-/* Flags of the PPROG register. */
-#define M6811_BYTE 0x10 /* Byte mode */
-#define M6811_ROW 0x08 /* Row mode */
-#define M6811_ERASE 0x04 /* Erase mode select (1 = erase, 0 = read) */
-#define M6811_EELAT 0x02 /* EEPROM Latch Control */
-#define M6811_EEPGM 0x01 /* EEPROM Programming Voltage Enable */
-
-/* Flags of the PIOC register. */
-#define M6811_STAF 0x80 /* Strobe A Interrupt Status Flag */
-#define M6811_STAI 0x40 /* Strobe A Interrupt Enable Mask */
-#define M6811_CWOM 0x20 /* Port C Wire OR mode */
-#define M6811_HNDS 0x10 /* Handshake mode */
-#define M6811_OIN 0x08 /* Output or Input handshaking */
-#define M6811_PLS 0x04 /* Pulse/Interlocked Handshake Operation */
-#define M6811_EGA 0x02 /* Active Edge for Strobe A */
-#define M6811_INVB 0x01 /* Invert Strobe B */
-
-/* Flags of the SCCR1 register. */
-#define M6811_R8 0x80 /* Receive Data bit 8 */
-#define M6811_T8 0x40 /* Transmit data bit 8 */
-#define M6811__SCCR1_5 0x20 /* Unused */
-#define M6811_M 0x10 /* SCI Character length */
-#define M6811_WAKE 0x08 /* Wake up method select (0=idle, 1=addr mark) */
-
-/* Flags of the SCCR2 register. */
-#define M6811_TIE 0x80 /* Transmit Interrupt enable */
-#define M6811_TCIE 0x40 /* Transmit Complete Interrupt Enable */
-#define M6811_RIE 0x20 /* Receive Interrupt Enable */
-#define M6811_ILIE 0x10 /* Idle Line Interrupt Enable */
-#define M6811_TE 0x08 /* Transmit Enable */
-#define M6811_RE 0x04 /* Receive Enable */
-#define M6811_RWU 0x02 /* Receiver Wake Up */
-#define M6811_SBK 0x01 /* Send Break */
-
-/* Flags of the SCSR register. */
-#define M6811_TDRE 0x80 /* Transmit Data Register Empty */
-#define M6811_TC 0x40 /* Transmit Complete */
-#define M6811_RDRF 0x20 /* Receive Data Register Full */
-#define M6811_IDLE 0x10 /* Idle Line Detect */
-#define M6811_OR 0x08 /* Overrun Error */
-#define M6811_NF 0x04 /* Noise Flag */
-#define M6811_FE 0x02 /* Framing Error */
-#define M6811__SCSR_0 0x01 /* Unused */
-
-/* Flags of the BAUD register. */
-#define M6811_TCLR 0x80 /* Clear Baud Rate (TEST mode) */
-#define M6811__BAUD_6 0x40 /* Not used */
-#define M6811_SCP1 0x20 /* SCI Baud rate prescaler select */
-#define M6811_SCP0 0x10
-#define M6811_RCKB 0x08 /* Baud Rate Clock Check (TEST mode) */
-#define M6811_SCR2 0x04 /* SCI Baud rate select */
-#define M6811_SCR1 0x02
-#define M6811_SCR0 0x01
-
-#define M6811_BAUD_DIV_1 (0)
-#define M6811_BAUD_DIV_3 (M6811_SCP0)
-#define M6811_BAUD_DIV_4 (M6811_SCP1)
-#define M6811_BAUD_DIV_13 (M6811_SCP1|M6811_SCP0)
-
-/* Flags of the SPCR register. */
-#define M6811_SPIE 0x80 /* Serial Peripheral Interrupt Enable */
-#define M6811_SPE 0x40 /* Serial Peripheral System Enable */
-#define M6811_DWOM 0x20 /* Port D Wire-OR mode option */
-#define M6811_MSTR 0x10 /* Master Mode Select */
-#define M6811_CPOL 0x08 /* Clock Polarity */
-#define M6811_CPHA 0x04 /* Clock Phase */
-#define M6811_SPR1 0x02 /* SPI Clock Rate Select */
-#define M6811_SPR0 0x01
-
-/* Flags of the SPSR register. */
-#define M6811_SPIF 0x80 /* SPI Transfer Complete flag */
-#define M6811_WCOL 0x40 /* Write Collision */
-#define M6811_MODF 0x10 /* Mode Fault */
-
-/* Flags of the ADCTL register. */
-#define M6811_CCF 0x80 /* Conversions Complete Flag */
-#define M6811_SCAN 0x20 /* Continuous Scan Control */
-#define M6811_MULT 0x10 /* Multiple Channel/Single Channel Control */
-#define M6811_CD 0x08 /* Channel Select D */
-#define M6811_CC 0x04 /* C */
-#define M6811_CB 0x02 /* B */
-#define M6811_CA 0x01 /* A */
-
-/* Flags of the CFORC register. */
-#define M6811_FOC1 0x80 /* Force Output Compare 1 */
-#define M6811_FOC2 0x40 /* 2 */
-#define M6811_FOC3 0x20 /* 3 */
-#define M6811_FOC4 0x10 /* 4 */
-#define M6811_FOC5 0x08 /* 5 */
-
-/* Flags of the OC1M register. */
-#define M6811_OC1M7 0x80 /* Output Compare 7 */
-#define M6811_OC1M6 0x40 /* 6 */
-#define M6811_OC1M5 0x20 /* 5 */
-#define M6811_OC1M4 0x10 /* 4 */
-#define M6811_OC1M3 0x08 /* 3 */
-
-/* Flags of the OC1D register. */
-#define M6811_OC1D7 0x80
-#define M6811_OC1D6 0x40
-#define M6811_OC1D5 0x20
-#define M6811_OC1D4 0x10
-#define M6811_OC1D3 0x08
-
-/* Flags of the TCTL1 register. */
-#define M6811_OM2 0x80 /* Output Mode 2 */
-#define M6811_OL2 0x40 /* Output Level 2 */
-#define M6811_OM3 0x20
-#define M6811_OL3 0x10
-#define M6811_OM4 0x08
-#define M6811_OL4 0x04
-#define M6811_OM5 0x02
-#define M6811_OL5 0x01
-
-/* Flags of the TCTL2 register. */
-#define M6811_EDG1B 0x20 /* Input Edge Capture Control 1 */
-#define M6811_EDG1A 0x10
-#define M6811_EDG2B 0x08 /* Input 2 */
-#define M6811_EDG2A 0x04
-#define M6811_EDG3B 0x02 /* Input 3 */
-#define M6811_EDG3A 0x01
-
-/* Flags of the TMSK1 register. */
-#define M6811_OC1I 0x80 /* Output Compare 1 Interrupt */
-#define M6811_OC2I 0x40 /* 2 */
-#define M6811_OC3I 0x20 /* 3 */
-#define M6811_OC4I 0x10 /* 4 */
-#define M6811_OC5I 0x08 /* 5 */
-#define M6811_IC1I 0x04 /* Input Capture 1 Interrupt */
-#define M6811_IC2I 0x02 /* 2 */
-#define M6811_IC3I 0x01 /* 3 */
-
-/* Flags of the TFLG1 register. */
-#define M6811_OC1F 0x80 /* Output Compare 1 Flag */
-#define M6811_OC2F 0x40 /* 2 */
-#define M6811_OC3F 0x20 /* 3 */
-#define M6811_OC4F 0x10 /* 4 */
-#define M6811_OC5F 0x08 /* 5 */
-#define M6811_IC1F 0x04 /* Input Capture 1 Flag */
-#define M6811_IC2F 0x02 /* 2 */
-#define M6811_IC3F 0x01 /* 3 */
-
-/* Flags of Timer Interrupt Mask Register 2 (TMSK2). */
-#define M6811_TOI 0x80 /* Timer Overflow Interrupt Enable */
-#define M6811_RTII 0x40 /* RTI Interrupt Enable */
-#define M6811_PAOVI 0x20 /* Pulse Accumulator Overflow Interrupt En. */
-#define M6811_PAII 0x10 /* Pulse Accumulator Interrupt Enable */
-#define M6811_PR1 0x02 /* Timer prescaler */
-#define M6811_PR0 0x01 /* Timer prescaler */
-#define M6811_TPR_1 0x00 /* " " prescale div 1 */
-#define M6811_TPR_4 0x01 /* " " prescale div 4 */
-#define M6811_TPR_8 0x02 /* " " prescale div 8 */
-#define M6811_TPR_16 0x03 /* " " prescale div 16 */
-
-/* Flags of Timer Interrupt Flag Register 2 (M6811_TFLG2). */
-#define M6811_TOF 0x80 /* Timer overflow bit */
-#define M6811_RTIF 0x40 /* Read time interrupt flag */
-#define M6811_PAOVF 0x20 /* Pulse accumulator overflow Interrupt flag */
-#define M6811_PAIF 0x10 /* Pulse accumulator Input Edge " " " */
-
-/* Flags of Pulse Accumulator Control Register (PACTL). */
-#define M6811_DDRA7 0x80 /* Data direction for port A bit 7 */
-#define M6811_PAEN 0x40 /* Pulse accumulator system enable */
-#define M6811_PAMOD 0x20 /* Pulse accumulator mode */
-#define M6811_PEDGE 0x10 /* Pulse accumulator edge control */
-#define M6811_RTR1 0x02 /* RTI Interrupt rates select */
-#define M6811_RTR0 0x01 /* " " " " */
-
-/* Flags of the Options register. */
-#define M6811_ADPU 0x80 /* A/D Powerup */
-#define M6811_CSEL 0x40 /* A/D/EE Charge pump clock source select */
-#define M6811_IRQE 0x20 /* IRQ Edge/Level sensitive */
-#define M6811_DLY 0x10 /* Stop exit turn on delay */
-#define M6811_CME 0x08 /* Clock Monitor enable */
-#define M6811_CR1 0x02 /* COP timer rate select */
-#define M6811_CR0 0x01 /* COP timer rate select */
-
-/* Flags of the HPRIO register. */
-#define M6811_RBOOT 0x80 /* Read Bootstrap ROM */
-#define M6811_SMOD 0x40 /* Special Mode */
-#define M6811_MDA 0x20 /* Mode Select A */
-#define M6811_IRV 0x10 /* Internal Read Visibility */
-#define M6811_PSEL3 0x08 /* Priority Select */
-#define M6811_PSEL2 0x04
-#define M6811_PSEL1 0x02
-#define M6811_PSEL0 0x01
-
-/* Some insns used by gas to turn relative branches into absolute ones. */
-#define M6811_BRA 0x20
-#define M6811_JMP 0x7e
-#define M6811_BSR 0x8d
-#define M6811_JSR 0xbd
-#define M6812_JMP 0x06
-#define M6812_BSR 0x07
-#define M6812_JSR 0x16
-
-/* Instruction code pages. Code page 1 is the default. */
-/*#define M6811_OPCODE_PAGE1 0x00*/
-#define M6811_OPCODE_PAGE2 0x18
-#define M6811_OPCODE_PAGE3 0x1A
-#define M6811_OPCODE_PAGE4 0xCD
-
-
-/* 68HC11 operands formats as stored in the m6811_opcode table. These
- flags do not correspond to anything in the 68HC11 or 68HC12.
- They are only used by GAS to recognize operands. */
-#define M6811_OP_NONE 0 /* No operand */
-#define M6811_OP_DIRECT 0x0001 /* Page 0 addressing: *<val-8bits> */
-#define M6811_OP_IMM8 0x0002 /* 8 bits immediat: #<val-8bits> */
-#define M6811_OP_IMM16 0x0004 /* 16 bits immediat: #<val-16bits> */
-#define M6811_OP_IND16 0x0008 /* Indirect abs: <val-16> */
-#define M6812_OP_IND16_P2 0x0010 /* Second parameter indirect abs. */
-#define M6812_OP_REG 0x0020 /* Register operand 1 */
-#define M6812_OP_REG_2 0x0040 /* Register operand 2 */
-
-#define M6811_OP_IX 0x0080 /* Indirect IX: <val-8>,x */
-#define M6811_OP_IY 0x0100 /* Indirect IY: <val-8>,y */
-#define M6812_OP_IDX 0x0200 /* Indirect: N,r N,[+-]r[+-] N:5-bits */
-#define M6812_OP_IDX_1 0x0400 /* N,r N:9-bits */
-#define M6812_OP_IDX_2 0x0800 /* N,r N:16-bits */
-#define M6812_OP_D_IDX 0x1000 /* Indirect indexed: [D,r] */
-#define M6812_OP_D_IDX_2 0x2000 /* [N,r] N:16-bits */
-#define M6812_OP_PAGE 0x4000 /* Page number */
-#define M6811_OP_MASK 0x07FFF
-#define M6811_OP_BRANCH 0x00008000 /* Branch, jsr, call */
-#define M6811_OP_BITMASK 0x00010000 /* Bitmask: #<val-8> */
-#define M6811_OP_JUMP_REL 0x00020000 /* Pc-Relative: <val-8> */
-#define M6812_OP_JUMP_REL16 0x00040000 /* Pc-relative: <val-16> */
-#define M6811_OP_PAGE1 0x0000
-#define M6811_OP_PAGE2 0x00080000 /* Need a page2 opcode before */
-#define M6811_OP_PAGE3 0x00100000 /* Need a page3 opcode before */
-#define M6811_OP_PAGE4 0x00200000 /* Need a page4 opcode before */
-#define M6811_MAX_OPERANDS 3 /* Max operands: brset <dst> <mask> <b> */
-
-#define M6812_ACC_OFFSET 0x00400000 /* A,r B,r D,r */
-#define M6812_ACC_IND 0x00800000 /* [D,r] */
-#define M6812_PRE_INC 0x01000000 /* n,+r n = -8..8 */
-#define M6812_PRE_DEC 0x02000000 /* n,-r */
-#define M6812_POST_INC 0x04000000 /* n,r+ */
-#define M6812_POST_DEC 0x08000000 /* n,r- */
-#define M6812_INDEXED_IND 0x10000000 /* [n,r] n = 16-bits */
-#define M6812_INDEXED 0x20000000 /* n,r n = 5, 9 or 16-bits */
-#define M6812_OP_IDX_P2 0x40000000
-
-/* XGATE defines.
- These overlap with HC11/12 as above but not used at the same time. */
-#define M68XG_OP_NONE 0x0001
-#define M68XG_OP_IMM3 0x0002
-#define M68XG_OP_R 0x0004
-#define M68XG_OP_R_R 0x0008
-#define M68XG_OP_R_IMM4 0x0010
-#define M68XG_OP_R_R_R 0x0020
-#define M68XG_OP_REL9 0x0040
-#define M68XG_OP_REL10 0x0080
-#define M68XG_OP_R_R_OFFS5 0x0100
-#define M68XG_OP_RD_RB_RI 0x0200
-#define M68XG_OP_RD_RB_RIp 0x0400
-#define M68XG_OP_RD_RB_mRI 0x0800
-#define M68XG_OP_R_IMM8 0x1000
-#define M68XG_OP_R_IMM16 0x2000
-#define M68XG_OP_REG 0x4000 /* Register operand 1. */
-#define M68XG_OP_REG_2 0x8000 /* Register operand 2. */
-#define M68XG_MAX_OPERANDS 3 /* Max operands of triadic r1, r2, r3. */
-
-/* Markers to identify some instructions. */
-#define M6812_OP_EXG_MARKER 0x01000000 /* exg r1,r2 */
-#define M6812_OP_TFR_MARKER 0x02000000 /* tfr r1,r2 */
-#define M6812_OP_SEX_MARKER 0x04000000 /* sex r1,r2 */
-
-#define M6812_OP_EQ_MARKER 0x80000000 /* dbeq/ibeq/tbeq */
-#define M6812_OP_DBCC_MARKER 0x04000000 /* dbeq/dbne */
-#define M6812_OP_IBCC_MARKER 0x02000000 /* ibeq/ibne */
-#define M6812_OP_TBCC_MARKER 0x01000000
-
-/* XGATE markers. */
-#define M68XG_OP_B_MARKER 0x04000000 /* bXX rel9 */
-#define M68XG_OP_BRA_MARKER 0x02000000 /* bra rel10 */
-
-#define M6812_OP_TRAP_ID 0x80000000 /* trap #N */
-
-#define M6811_OP_HIGH_ADDR 0x01000000 /* Used internally by gas. */
-#define M6811_OP_LOW_ADDR 0x02000000
-
-#define M68HC12_BANK_VIRT 0x010000
-#define M68HC12_BANK_MASK 0x00003fff
-#define M68HC12_BANK_BASE 0x00008000
-#define M68HC12_BANK_SHIFT 14
-#define M68HC12_BANK_PAGE_MASK 0x0ff
-
-
-/* CPU identification. */
-#define cpu6811 0x01
-#define cpu6812 0x02
-#define cpu6812s 0x04
-#define cpu9s12x 0x08 /* 9S12X main cpu. */
-#define cpuxgate 0x10 /* The XGATE module itself. */
-
-/* The opcode table is an array of struct m68hc11_opcode. */
-struct m68hc11_opcode
-{
- const char * name; /* Op-code name. */
- long format;
- unsigned char size;
- unsigned int opcode;
- unsigned char cycles_low;
- unsigned char cycles_high;
- unsigned char set_flags_mask;
- unsigned char clr_flags_mask;
- unsigned char chg_flags_mask;
- unsigned char arch;
- unsigned int xg_mask; /* Mask with zero in register place for xgate. */
-};
-
-/* Alias definition for 68HC12. */
-struct m68hc12_opcode_alias
-{
- const char* name;
- const char* translation;
- unsigned char size;
- unsigned char code1;
- unsigned char code2;
-};
-
-/* The opcode table. The table contains all the opcodes (all pages).
- You can't rely on the order. */
-extern const struct m68hc11_opcode m68hc11_opcodes[];
-extern const int m68hc11_num_opcodes;
-
-/* Alias table for 68HC12. It translates some 68HC11 insn which are not
- implemented in 68HC12 but have equivalent translations. */
-extern const struct m68hc12_opcode_alias m68hc12_alias[];
-extern const int m68hc12_num_alias;
-
-#endif /* _OPCODE_M68HC11_H */
diff --git a/include/opcode/m68k.h b/include/opcode/m68k.h
deleted file mode 100644
index f7bd8b450..000000000
--- a/include/opcode/m68k.h
+++ /dev/null
@@ -1,378 +0,0 @@
-/* Opcode table header for m680[01234]0/m6888[12]/m68851.
- Copyright 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1999, 2001,
- 2003, 2004, 2006, 2010 Free Software Foundation, Inc.
-
- This file is part of GDB, GAS, and the GNU binutils.
-
- GDB, GAS, and the GNU binutils are free software; you can redistribute
- them and/or modify them under the terms of the GNU General Public
- License as published by the Free Software Foundation; either version 3,
- or (at your option) any later version.
-
- GDB, GAS, and the GNU binutils are distributed in the hope that they
- 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 file; see the file COPYING3. If not, write to the Free
- Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
- 02110-1301, USA. */
-
-/* These are used as bit flags for the arch field in the m68k_opcode
- structure. */
-#define _m68k_undef 0
-#define m68000 0x001
-#define m68010 0x002
-#define m68020 0x004
-#define m68030 0x008
-#define m68040 0x010
-#define m68060 0x020
-#define m68881 0x040
-#define m68851 0x080
-#define cpu32 0x100 /* e.g., 68332 */
-#define fido_a 0x200
-#define m68k_mask 0x3ff
-
-#define mcfmac 0x400 /* ColdFire MAC. */
-#define mcfemac 0x800 /* ColdFire EMAC. */
-#define cfloat 0x1000 /* ColdFire FPU. */
-#define mcfhwdiv 0x2000 /* ColdFire hardware divide. */
-
-#define mcfisa_a 0x4000 /* ColdFire ISA_A. */
-#define mcfisa_aa 0x8000 /* ColdFire ISA_A+. */
-#define mcfisa_b 0x10000 /* ColdFire ISA_B. */
-#define mcfisa_c 0x20000 /* ColdFire ISA_C. */
-#define mcfusp 0x40000 /* ColdFire USP instructions. */
-#define mcf_mask 0x7e400
-
-/* Handy aliases. */
-#define m68040up (m68040 | m68060)
-#define m68030up (m68030 | m68040up)
-#define m68020up (m68020 | m68030up)
-#define m68010up (m68010 | cpu32 | fido_a | m68020up)
-#define m68000up (m68000 | m68010up)
-
-#define mfloat (m68881 | m68040 | m68060)
-#define mmmu (m68851 | m68030 | m68040 | m68060)
-
-/* The structure used to hold information for an opcode. */
-
-struct m68k_opcode
-{
- /* The opcode name. */
- const char *name;
- /* The pseudo-size of the instruction(in bytes). Used to determine
- number of bytes necessary to disassemble the instruction. */
- unsigned int size;
- /* The opcode itself. */
- unsigned long opcode;
- /* The mask used by the disassembler. */
- unsigned long match;
- /* The arguments. */
- const char *args;
- /* The architectures which support this opcode. */
- unsigned int arch;
-};
-
-/* The structure used to hold information for an opcode alias. */
-
-struct m68k_opcode_alias
-{
- /* The alias name. */
- const char *alias;
- /* The instruction for which this is an alias. */
- const char *primary;
-};
-
-/* We store four bytes of opcode for all opcodes because that is the
- most any of them need. The actual length of an instruction is
- always at least 2 bytes, and is as much longer as necessary to hold
- the operands it has.
-
- The match field is a mask saying which bits must match particular
- opcode in order for an instruction to be an instance of that
- opcode.
-
- The args field is a string containing two characters for each
- operand of the instruction. The first specifies the kind of
- operand; the second, the place it is stored.
-
- If the first char of args is '.', it indicates that the opcode is
- two words. This is only necessary when the match field does not
- have any bits set in the second opcode word. Such a '.' is skipped
- for operand processing. */
-
-/* Kinds of operands:
- Characters used: AaBbCcDdEeFfGgHIiJjKkLlMmnOopQqRrSsTtUuVvWwXxYyZz01234|*~%;@!&$?/<>#^+-
-
- D data register only. Stored as 3 bits.
- A address register only. Stored as 3 bits.
- a address register indirect only. Stored as 3 bits.
- R either kind of register. Stored as 4 bits.
- r either kind of register indirect only. Stored as 4 bits.
- At the moment, used only for cas2 instruction.
- F floating point coprocessor register only. Stored as 3 bits.
- O an offset (or width): immediate data 0-31 or data register.
- Stored as 6 bits in special format for BF... insns.
- + autoincrement only. Stored as 3 bits (number of the address register).
- - autodecrement only. Stored as 3 bits (number of the address register).
- Q quick immediate data. Stored as 3 bits.
- This matches an immediate operand only when value is in range 1 .. 8.
- M moveq immediate data. Stored as 8 bits.
- This matches an immediate operand only when value is in range -128..127
- T trap vector immediate data. Stored as 4 bits.
-
- k K-factor for fmove.p instruction. Stored as a 7-bit constant or
- a three bit register offset, depending on the field type.
-
- # immediate data. Stored in special places (b, w or l)
- which say how many bits to store.
- ^ immediate data for floating point instructions. Special places
- are offset by 2 bytes from '#'...
- B pc-relative address, converted to an offset
- that is treated as immediate data.
- d displacement and register. Stores the register as 3 bits
- and stores the displacement in the entire second word.
-
- C the CCR. No need to store it; this is just for filtering validity.
- S the SR. No need to store, just as with CCR.
- U the USP. No need to store, just as with CCR.
- E the MAC ACC. No need to store, just as with CCR.
- e the EMAC ACC[0123].
- G the MAC/EMAC MACSR. No need to store, just as with CCR.
- g the EMAC ACCEXT{01,23}.
- H the MASK. No need to store, just as with CCR.
- i the MAC/EMAC scale factor.
-
- I Coprocessor ID. Not printed if 1. The Coprocessor ID is always
- extracted from the 'd' field of word one, which means that an extended
- coprocessor opcode can be skipped using the 'i' place, if needed.
-
- s System Control register for the floating point coprocessor.
-
- J Misc register for movec instruction, stored in 'j' format.
- Possible values:
- 0x000 SFC Source Function Code reg [60, 40, 30, 20, 10]
- 0x001 DFC Data Function Code reg [60, 40, 30, 20, 10]
- 0x002 CACR Cache Control Register [60, 40, 30, 20, mcf]
- 0x003 TC MMU Translation Control [60, 40]
- 0x004 ITT0 Instruction Transparent
- Translation reg 0 [60, 40]
- 0x005 ITT1 Instruction Transparent
- Translation reg 1 [60, 40]
- 0x006 DTT0 Data Transparent
- Translation reg 0 [60, 40]
- 0x007 DTT1 Data Transparent
- Translation reg 1 [60, 40]
- 0x008 BUSCR Bus Control Register [60]
- 0x800 USP User Stack Pointer [60, 40, 30, 20, 10]
- 0x801 VBR Vector Base reg [60, 40, 30, 20, 10, mcf]
- 0x802 CAAR Cache Address Register [ 30, 20]
- 0x803 MSP Master Stack Pointer [ 40, 30, 20]
- 0x804 ISP Interrupt Stack Pointer [ 40, 30, 20]
- 0x805 MMUSR MMU Status reg [ 40]
- 0x806 URP User Root Pointer [60, 40]
- 0x807 SRP Supervisor Root Pointer [60, 40]
- 0x808 PCR Processor Configuration reg [60]
- 0xC00 ROMBAR ROM Base Address Register [520X]
- 0xC04 RAMBAR0 RAM Base Address Register 0 [520X]
- 0xC05 RAMBAR1 RAM Base Address Register 0 [520X]
- 0xC0F MBAR0 RAM Base Address Register 0 [520X]
- 0xC04 FLASHBAR FLASH Base Address Register [mcf528x]
- 0xC05 RAMBAR Static RAM Base Address Register [mcf528x]
-
- L Register list of the type d0-d7/a0-a7 etc.
- (New! Improved! Can also hold fp0-fp7, as well!)
- The assembler tries to see if the registers match the insn by
- looking at where the insn wants them stored.
-
- l Register list like L, but with all the bits reversed.
- Used for going the other way. . .
-
- c cache identifier which may be "nc" for no cache, "ic"
- for instruction cache, "dc" for data cache, or "bc"
- for both caches. Used in cinv and cpush. Always
- stored in position "d".
-
- u Any register, with ``upper'' or ``lower'' specification. Used
- in the mac instructions with size word.
-
- The remainder are all stored as 6 bits using an address mode and a
- register number; they differ in which addressing modes they match.
-
- * all (modes 0-6,7.0-4)
- ~ alterable memory (modes 2-6,7.0,7.1)
- (not 0,1,7.2-4)
- % alterable (modes 0-6,7.0,7.1)
- (not 7.2-4)
- ; data (modes 0,2-6,7.0-4)
- (not 1)
- @ data, but not immediate (modes 0,2-6,7.0-3)
- (not 1,7.4)
- ! control (modes 2,5,6,7.0-3)
- (not 0,1,3,4,7.4)
- & alterable control (modes 2,5,6,7.0,7.1)
- (not 0,1,3,4,7.2-4)
- $ alterable data (modes 0,2-6,7.0,7.1)
- (not 1,7.2-4)
- ? alterable control, or data register (modes 0,2,5,6,7.0,7.1)
- (not 1,3,4,7.2-4)
- / control, or data register (modes 0,2,5,6,7.0-3)
- (not 1,3,4,7.4)
- > *save operands (modes 2,4,5,6,7.0,7.1)
- (not 0,1,3,7.2-4)
- < *restore operands (modes 2,3,5,6,7.0-3)
- (not 0,1,4,7.4)
-
- coldfire move operands:
- m (modes 0-4)
- n (modes 5,7.2)
- o (modes 6,7.0,7.1,7.3,7.4)
- p (modes 0-5)
-
- coldfire bset/bclr/btst/mulsl/mulul operands:
- q (modes 0,2-5)
- v (modes 0,2-5,7.0,7.1)
- b (modes 0,2-5,7.2)
- w (modes 2-5,7.2)
- y (modes 2,5)
- z (modes 2,5,7.2)
- x mov3q immediate operand.
- j coprocessor ET operand.
- K coprocessor command number.
- 4 (modes 2,3,4,5)
- */
-
-/* For the 68851: */
-/* I didn't use much imagination in choosing the
- following codes, so many of them aren't very
- mnemonic. -rab
-
- 0 32 bit pmmu register
- Possible values:
- 000 TC Translation Control Register (68030, 68851)
-
- 1 16 bit pmmu register
- 111 AC Access Control (68851)
-
- 2 8 bit pmmu register
- 100 CAL Current Access Level (68851)
- 101 VAL Validate Access Level (68851)
- 110 SCC Stack Change Control (68851)
-
- 3 68030-only pmmu registers (32 bit)
- 010 TT0 Transparent Translation reg 0
- (aka Access Control reg 0 -- AC0 -- on 68ec030)
- 011 TT1 Transparent Translation reg 1
- (aka Access Control reg 1 -- AC1 -- on 68ec030)
-
- W wide pmmu registers
- Possible values:
- 001 DRP Dma Root Pointer (68851)
- 010 SRP Supervisor Root Pointer (68030, 68851)
- 011 CRP Cpu Root Pointer (68030, 68851)
-
- f function code register (68030, 68851)
- 0 SFC
- 1 DFC
-
- V VAL register only (68851)
-
- X BADx, BACx (16 bit)
- 100 BAD Breakpoint Acknowledge Data (68851)
- 101 BAC Breakpoint Acknowledge Control (68851)
-
- Y PSR (68851) (MMUSR on 68030) (ACUSR on 68ec030)
- Z PCSR (68851)
-
- | memory (modes 2-6, 7.*)
-
- t address test level (68030 only)
- Stored as 3 bits, range 0-7.
- Also used for breakpoint instruction now.
-
-*/
-
-/* Places to put an operand, for non-general operands:
- Characters used: BbCcDdFfGgHhIijkLlMmNnostWw123456789/
-
- s source, low bits of first word.
- d dest, shifted 9 in first word
- 1 second word, shifted 12
- 2 second word, shifted 6
- 3 second word, shifted 0
- 4 third word, shifted 12
- 5 third word, shifted 6
- 6 third word, shifted 0
- 7 second word, shifted 7
- 8 second word, shifted 10
- 9 second word, shifted 5
- E second word, shifted 9
- D store in both place 1 and place 3; for divul and divsl.
- B first word, low byte, for branch displacements
- W second word (entire), for branch displacements
- L second and third words (entire), for branch displacements
- (also overloaded for move16)
- b second word, low byte
- w second word (entire) [variable word/long branch offset for dbra]
- W second word (entire) (must be signed 16 bit value)
- l second and third word (entire)
- g variable branch offset for bra and similar instructions.
- The place to store depends on the magnitude of offset.
- t store in both place 7 and place 8; for floating point operations
- c branch offset for cpBcc operations.
- The place to store is word two if bit six of word one is zero,
- and words two and three if bit six of word one is one.
- i Increment by two, to skip over coprocessor extended operands. Only
- works with the 'I' format.
- k Dynamic K-factor field. Bits 6-4 of word 2, used as a register number.
- Also used for dynamic fmovem instruction.
- C floating point coprocessor constant - 7 bits. Also used for static
- K-factors...
- j Movec register #, stored in 12 low bits of second word.
- m For M[S]ACx; 4 bits split with MSB shifted 6 bits in first word
- and remaining 3 bits of register shifted 9 bits in first word.
- Indicate upper/lower in 1 bit shifted 7 bits in second word.
- Use with `R' or `u' format.
- n `m' withouth upper/lower indication. (For M[S]ACx; 4 bits split
- with MSB shifted 6 bits in first word and remaining 3 bits of
- register shifted 9 bits in first word. No upper/lower
- indication is done.) Use with `R' or `u' format.
- o For M[S]ACw; 4 bits shifted 12 in second word (like `1').
- Indicate upper/lower in 1 bit shifted 7 bits in second word.
- Use with `R' or `u' format.
- M For M[S]ACw; 4 bits in low bits of first word. Indicate
- upper/lower in 1 bit shifted 6 bits in second word. Use with
- `R' or `u' format.
- N For M[S]ACw; 4 bits in low bits of second word. Indicate
- upper/lower in 1 bit shifted 6 bits in second word. Use with
- `R' or `u' format.
- h shift indicator (scale factor), 1 bit shifted 10 in second word
-
- Places to put operand, for general operands:
- d destination, shifted 6 bits in first word
- b source, at low bit of first word, and immediate uses one byte
- w source, at low bit of first word, and immediate uses two bytes
- l source, at low bit of first word, and immediate uses four bytes
- s source, at low bit of first word.
- Used sometimes in contexts where immediate is not allowed anyway.
- f single precision float, low bit of 1st word, immediate uses 4 bytes
- F double precision float, low bit of 1st word, immediate uses 8 bytes
- x extended precision float, low bit of 1st word, immediate uses 12 bytes
- p packed float, low bit of 1st word, immediate uses 12 bytes
- G EMAC accumulator, load (bit 4 2nd word, !bit8 first word)
- H EMAC accumulator, non load (bit 4 2nd word, bit 8 first word)
- F EMAC ACCx
- f EMAC ACCy
- I MAC/EMAC scale factor
- / Like 's', but set 2nd word, bit 5 if trailing_ampersand set
- ] first word, bit 10
-*/
-
-extern const struct m68k_opcode m68k_opcodes[];
-extern const struct m68k_opcode_alias m68k_opcode_aliases[];
-
-extern const int m68k_numopcodes, m68k_numaliases;
-
-/* end of m68k-opcode.h */
diff --git a/include/opcode/m88k.h b/include/opcode/m88k.h
deleted file mode 100644
index 739c0e90a..000000000
--- a/include/opcode/m88k.h
+++ /dev/null
@@ -1,455 +0,0 @@
-/* Table of opcodes for the Motorola M88k family.
- Copyright 1989, 1990, 1991, 1993, 2001, 2002, 2010
- Free Software Foundation, Inc.
-
- This file is part of GDB and GAS.
-
- 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-/*
- * Disassembler Instruction Table
- *
- * The first field of the table is the opcode field. If an opcode
- * is specified which has any non-opcode bits on, a system error
- * will occur when the system attempts the install it into the
- * instruction table. The second parameter is a pointer to the
- * instruction mnemonic. Each operand is specified by offset, width,
- * and type. The offset is the bit number of the least significant
- * bit of the operand with bit 0 being the least significant bit of
- * the instruction. The width is the number of bits used to specify
- * the operand. The type specifies the output format to be used for
- * the operand. The valid formats are: register, register indirect,
- * hex constant, and bit field specification. The last field is a
- * pointer to the next instruction in the linked list. These pointers
- * are initialized by init_disasm().
- *
- * Revision History
- *
- * Revision 1.0 11/08/85 Creation date
- * 1.1 02/05/86 Updated instruction mnemonic table MD
- * 1.2 06/16/86 Updated SIM_FLAGS for floating point
- * 1.3 09/20/86 Updated for new encoding
- * 05/11/89 R. Trawick adapted from Motorola disassembler
- */
-
-#include <stdio.h>
-
-/* Define the number of bits in the primary opcode field of the instruction,
- the destination field, the source 1 and source 2 fields. */
-
-/* Size of opcode field. */
-#define OP 8
-
-/* Size of destination. */
-#define DEST 6
-
-/* Size of source1. */
-#define SOURCE1 6
-
-/* Size of source2. */
-#define SOURCE2 6
-
-/* Number of registers. */
-#define REGs 32
-
-/* Type definitions. */
-
-typedef unsigned int UINT;
-#define WORD long
-#define FLAG unsigned
-#define STATE short
-
-/* The next four equates define the priorities that the various classes
- * of instructions have regarding writing results back into registers and
- * signalling exceptions. */
-
-/* PMEM is also defined in <sys/param.h> on Delta 88's. Sigh! */
-#undef PMEM
-
-/* Integer priority. */
-#define PINT 0
-
-/* Floating point priority. */
-#define PFLT 1
-
-/* Memory priority. */
-#define PMEM 2
-
-/* Not applicable, instruction doesn't write to regs. */
-#define NA 3
-
-/* Highest of these priorities. */
-#define HIPRI 3
-
-/* The instruction registers are an artificial mechanism to speed up
- * simulator execution. In the real processor, an instruction register
- * is 32 bits wide. In the simulator, the 32 bit instruction is kept in
- * a structure field called rawop, and the instruction is partially decoded,
- * and split into various fields and flags which make up the other fields
- * of the structure.
- * The partial decode is done when the instructions are initially loaded
- * into simulator memory. The simulator code memory is not an array of
- * 32 bit words, but is an array of instruction register structures.
- * Yes this wastes memory, but it executes much quicker.
- */
-
-struct IR_FIELDS
-{
- unsigned op:OP,
- dest: DEST,
- src1: SOURCE1,
- src2: SOURCE2;
- int ltncy,
- extime,
- /* Writeback priority. */
- wb_pri;
- /* Immediate size. */
- unsigned imm_flags:2,
- /* Register source 1 used. */
- rs1_used:1,
- /* Register source 2 used. */
- rs2_used:1,
- /* Register source/dest. used. */
- rsd_used:1,
- /* Complement. */
- c_flag:1,
- /* Upper half word. */
- u_flag:1,
- /* Execute next. */
- n_flag:1,
- /* Uses writeback slot. */
- wb_flag:1,
- /* Dest size. */
- dest_64:1,
- /* Source 1 size. */
- s1_64:1,
- /* Source 2 size. */
- s2_64:1,
- scale_flag:1,
- /* Scaled register. */
- brk_flg:1;
-};
-
-struct mem_segs
-{
- /* Pointer (returned by calloc) to segment. */
- struct mem_wrd *seg;
-
- /* Base load address from file headers. */
- unsigned long baseaddr;
-
- /* Ending address of segment. */
- unsigned long endaddr;
-
- /* Segment control flags (none defined). */
- int flags;
-};
-
-#define MAXSEGS (10) /* max number of segment allowed */
-#define MEMSEGSIZE (sizeof(struct mem_segs))/* size of mem_segs structure */
-
-#if 0
-#define BRK_RD (0x01) /* break on memory read */
-#define BRK_WR (0x02) /* break on memory write */
-#define BRK_EXEC (0x04) /* break on execution */
-#define BRK_CNT (0x08) /* break on terminal count */
-#endif
-
-struct mem_wrd
-{
- /* Simulator instruction break down. */
- struct IR_FIELDS opcode;
- union {
- /* Memory element break down. */
- unsigned long l;
- unsigned short s[2];
- unsigned char c[4];
- } mem;
-};
-
-/* Size of each 32 bit memory model. */
-#define MEMWRDSIZE (sizeof (struct mem_wrd))
-
-extern struct mem_segs memory[];
-extern struct PROCESSOR m78000;
-
-struct PROCESSOR
-{
- unsigned WORD
- /* Execute instruction pointer. */
- ip,
- /* Vector base register. */
- vbr,
- /* Processor status register. */
- psr;
-
- /* Source 1. */
- WORD S1bus,
- /* Source 2. */
- S2bus,
- /* Destination. */
- Dbus,
- /* Data address bus. */
- DAbus,
- ALU,
- /* Data registers. */
- Regs[REGs],
- /* Max clocks before reg is available. */
- time_left[REGs],
- /* Writeback priority of reg. */
- wb_pri[REGs],
- /* Integer unit control regs. */
- SFU0_regs[REGs],
- /* Floating point control regs. */
- SFU1_regs[REGs],
- Scoreboard[REGs],
- Vbr;
- unsigned WORD scoreboard,
- Psw,
- Tpsw;
- /* Waiting for a jump instruction. */
- FLAG jump_pending:1;
-};
-
-/* Size of immediate field. */
-
-#define i26bit 1
-#define i16bit 2
-#define i10bit 3
-
-/* Definitions for fields in psr. */
-
-#define psr_mode 31
-#define psr_rbo 30
-#define psr_ser 29
-#define psr_carry 28
-#define psr_sf7m 11
-#define psr_sf6m 10
-#define psr_sf5m 9
-#define psr_sf4m 8
-#define psr_sf3m 7
-#define psr_sf2m 6
-#define psr_sf1m 5
-#define psr_mam 4
-#define psr_inm 3
-#define psr_exm 2
-#define psr_trm 1
-#define psr_ovfm 0
-
-/* The 1 clock operations. */
-
-#define ADDU 1
-#define ADDC 2
-#define ADDUC 3
-#define ADD 4
-
-#define SUBU ADD+1
-#define SUBB ADD+2
-#define SUBUB ADD+3
-#define SUB ADD+4
-
-#define AND_ ADD+5
-#define OR ADD+6
-#define XOR ADD+7
-#define CMP ADD+8
-
-/* Loads. */
-
-#define LDAB CMP+1
-#define LDAH CMP+2
-#define LDA CMP+3
-#define LDAD CMP+4
-
-#define LDB LDAD+1
-#define LDH LDAD+2
-#define LD LDAD+3
-#define LDD LDAD+4
-#define LDBU LDAD+5
-#define LDHU LDAD+6
-
-/* Stores. */
-
-#define STB LDHU+1
-#define STH LDHU+2
-#define ST LDHU+3
-#define STD LDHU+4
-
-/* Exchange. */
-
-#define XMEMBU LDHU+5
-#define XMEM LDHU+6
-
-/* Branches. */
-
-#define JSR STD+1
-#define BSR STD+2
-#define BR STD+3
-#define JMP STD+4
-#define BB1 STD+5
-#define BB0 STD+6
-#define RTN STD+7
-#define BCND STD+8
-
-/* Traps. */
-
-#define TB1 BCND+1
-#define TB0 BCND+2
-#define TCND BCND+3
-#define RTE BCND+4
-#define TBND BCND+5
-
-/* Misc. */
-
-#define MUL TBND + 1
-#define DIV MUL +2
-#define DIVU MUL +3
-#define MASK MUL +4
-#define FF0 MUL +5
-#define FF1 MUL +6
-#define CLR MUL +7
-#define SET MUL +8
-#define EXT MUL +9
-#define EXTU MUL +10
-#define MAK MUL +11
-#define ROT MUL +12
-
-/* Control register manipulations. */
-
-#define LDCR ROT +1
-#define STCR ROT +2
-#define XCR ROT +3
-
-#define FLDCR ROT +4
-#define FSTCR ROT +5
-#define FXCR ROT +6
-
-#define NOP XCR +1
-
-/* Floating point instructions. */
-
-#define FADD NOP +1
-#define FSUB NOP +2
-#define FMUL NOP +3
-#define FDIV NOP +4
-#define FSQRT NOP +5
-#define FCMP NOP +6
-#define FIP NOP +7
-#define FLT NOP +8
-#define INT NOP +9
-#define NINT NOP +10
-#define TRNC NOP +11
-#define FLDC NOP +12
-#define FSTC NOP +13
-#define FXC NOP +14
-
-#define UEXT(src,off,wid) \
- ((((unsigned int)(src)) >> (off)) & ((1 << (wid)) - 1))
-
-#define SEXT(src,off,wid) \
- (((((int)(src))<<(32 - ((off) + (wid)))) >>(32 - (wid))) )
-
-#define MAKE(src,off,wid) \
- ((((unsigned int)(src)) & ((1 << (wid)) - 1)) << (off))
-
-#define opword(n) (unsigned long) (memaddr->mem.l)
-
-/* Constants and masks. */
-
-#define SFU0 0x80000000
-#define SFU1 0x84000000
-#define SFU7 0x9c000000
-#define RRI10 0xf0000000
-#define RRR 0xf4000000
-#define SFUMASK 0xfc00ffe0
-#define RRRMASK 0xfc00ffe0
-#define RRI10MASK 0xfc00fc00
-#define DEFMASK 0xfc000000
-#define CTRL 0x0000f000
-#define CTRLMASK 0xfc00f800
-
-/* Operands types. */
-
-enum operand_type
-{
- HEX = 1,
- REG = 2,
- CONT = 3,
- IND = 3,
- BF = 4,
- /* Scaled register. */
- REGSC = 5,
- /* Control register. */
- CRREG = 6,
- /* Floating point control register. */
- FCRREG = 7,
- PCREL = 8,
- CONDMASK = 9,
- /* Extended register. */
- XREG = 10,
- /* Decimal. */
- DEC = 11
-};
-
-/* Hashing specification. */
-
-#define HASHVAL 79
-
-/* Structure templates. */
-
-typedef struct
-{
- unsigned int offset;
- unsigned int width;
- enum operand_type type;
-} OPSPEC;
-
-struct SIM_FLAGS
-{
- int ltncy, /* latency (max number of clocks needed to execute). */
- extime, /* execution time (min number of clocks needed to execute). */
- wb_pri; /* writeback slot priority. */
- unsigned op:OP, /* simulator version of opcode. */
- imm_flags:2, /* 10,16 or 26 bit immediate flags. */
- rs1_used:1, /* register source 1 used. */
- rs2_used:1, /* register source 2 used. */
- rsd_used:1, /* register source/dest used. */
- c_flag:1, /* complement. */
- u_flag:1, /* upper half word. */
- n_flag:1, /* execute next. */
- wb_flag:1, /* uses writeback slot. */
- dest_64:1, /* double precision dest. */
- s1_64:1, /* double precision source 1. */
- s2_64:1, /* double precision source 2. */
- scale_flag:1; /* register is scaled. */
-};
-
-typedef struct INSTRUCTAB {
- unsigned int opcode;
- char *mnemonic;
- OPSPEC op1,op2,op3;
- struct SIM_FLAGS flgs;
-} INSTAB;
-
-
-#define NO_OPERAND {0,0,0}
-
-extern const INSTAB instructions[];
-
-/*
- * Local Variables:
- * fill-column: 131
- * End:
- */
diff --git a/include/opcode/metag.h b/include/opcode/metag.h
deleted file mode 100644
index c9bb6680b..000000000
--- a/include/opcode/metag.h
+++ /dev/null
@@ -1,2079 +0,0 @@
-/* Imagination Technologies Meta opcode table.
- Copyright (C) 2013 Free Software Foundation, Inc.
- Contributed by Imagination Technologies Ltd.
-
- This file is part of GDB and GAS.
-
- GDB and GAS are 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 3, or (at
- your option) any later version.
-
- GDB and GAS are 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 GDB or GAS; see the file COPYING3. If not, write to the
- Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-enum metag_unit
-{
- UNIT_CT,
- UNIT_D0,
- UNIT_D1,
- UNIT_A0,
- UNIT_A1,
- UNIT_PC,
- UNIT_RD,
- UNIT_TR,
- UNIT_TT,
- UNIT_FX,
- UNIT_DT, /* DSP Template Table */
- UNIT_ACC_D0,
- UNIT_ACC_D1,
- UNIT_RAM_D0,
- UNIT_RAM_D1,
-};
-
-typedef struct
-{
- const char * name;
- enum metag_unit unit;
- unsigned int no;
-} metag_reg;
-
-static const metag_reg metag_regtab[] =
- {
- { "TXENABLE", UNIT_CT, 0 },
- { "CT.0", UNIT_CT, 0 },
- { "TXMODE", UNIT_CT, 1 },
- { "CT.1", UNIT_CT, 1 },
- { "TXSTATUS", UNIT_CT, 2 },
- { "CT.2", UNIT_CT, 2 },
- { "TXRPT", UNIT_CT, 3 },
- { "CT.3", UNIT_CT, 3 },
- { "TXTIMER", UNIT_CT, 4 },
- { "CT.4", UNIT_CT, 4 },
- { "TXL1START", UNIT_CT, 5 },
- { "CT.5", UNIT_CT, 5 },
- { "TXL1END", UNIT_CT, 6 },
- { "CT.6", UNIT_CT, 6 },
- { "TXL1COUNT", UNIT_CT, 7 },
- { "CT.7", UNIT_CT, 7 },
- { "TXL2START", UNIT_CT, 8 },
- { "CT.8", UNIT_CT, 8 },
- { "TXL2END", UNIT_CT, 9 },
- { "CT.9", UNIT_CT, 9 },
- { "TXL2COUNT", UNIT_CT, 10 },
- { "CT.10", UNIT_CT, 10 },
- { "TXBPOBITS", UNIT_CT, 11 },
- { "CT.11", UNIT_CT, 11 },
- { "TXMRSIZE", UNIT_CT, 12 },
- { "CT.12", UNIT_CT, 12 },
- { "TXTIMERI", UNIT_CT, 13 },
- { "CT.13", UNIT_CT, 13 },
- { "TXDRCTRL", UNIT_CT, 14 },
- { "CT.14", UNIT_CT, 14 },
- { "TXDRSIZE", UNIT_CT, 15 },
- { "CT.15", UNIT_CT, 15 },
- { "TXCATCH0", UNIT_CT, 16 },
- { "CT.16", UNIT_CT, 16 },
- { "TXCATCH1", UNIT_CT, 17 },
- { "CT.17", UNIT_CT, 17 },
- { "TXCATCH2", UNIT_CT, 18 },
- { "CT.18", UNIT_CT, 18 },
- { "TXCATCH3", UNIT_CT, 19 },
- { "CT.19", UNIT_CT, 19 },
- { "TXDEFR", UNIT_CT, 20 },
- { "CT.20", UNIT_CT, 20 },
- { "TXCPRS", UNIT_CT, 21 },
- { "CT.21", UNIT_CT, 21 },
- { "TXCLKCTRL", UNIT_CT, 22 },
- { "CT.22", UNIT_CT, 22 },
- { "TXINTERN0", UNIT_CT, 23 },
- { "TXSTATE", UNIT_CT, 23 },
- { "CT.23", UNIT_CT, 23 },
- { "TXAMAREG0", UNIT_CT, 24 },
- { "CT.24", UNIT_CT, 24 },
- { "TXAMAREG1", UNIT_CT, 25 },
- { "CT.25", UNIT_CT, 25 },
- { "TXAMAREG2", UNIT_CT, 26 },
- { "CT.26", UNIT_CT, 26 },
- { "TXAMAREG3", UNIT_CT, 27 },
- { "CT.27", UNIT_CT, 27 },
- { "TXDIVTIME", UNIT_CT, 28 },
- { "CT.28", UNIT_CT, 28 },
- { "TXPRIVEXT", UNIT_CT, 29 },
- { "CT.29", UNIT_CT, 29 },
- { "TXTACTCYC", UNIT_CT, 30 },
- { "TXACTCYC", UNIT_CT, 30 },
- { "CT.30", UNIT_CT, 30 },
- { "TXIDLECYC", UNIT_CT, 31 },
- { "CT.31", UNIT_CT, 31 },
-
- { "D0Re0", UNIT_D0, 0 },
- { "D0.0", UNIT_D0, 0 },
- { "D0Ar6", UNIT_D0, 1 },
- { "D0.1", UNIT_D0, 1 },
- { "D0Ar4", UNIT_D0, 2 },
- { "D0.2", UNIT_D0, 2 },
- { "D0Ar2", UNIT_D0, 3 },
- { "D0.3", UNIT_D0, 3 },
- { "D0FrT", UNIT_D0, 4 },
- { "D0.4", UNIT_D0, 4 },
- { "D0.5", UNIT_D0, 5 },
- { "D0.6", UNIT_D0, 6 },
- { "D0.7", UNIT_D0, 7 },
- { "D0.8", UNIT_D0, 8 },
- { "D0.9", UNIT_D0, 9 },
- { "D0.10", UNIT_D0, 10 },
- { "D0.11", UNIT_D0, 11 },
- { "D0.12", UNIT_D0, 12 },
- { "D0.13", UNIT_D0, 13 },
- { "D0.14", UNIT_D0, 14 },
- { "D0.15", UNIT_D0, 15 },
- { "D0.16", UNIT_D0, 16 },
- { "D0.17", UNIT_D0, 17 },
- { "D0.18", UNIT_D0, 18 },
- { "D0.19", UNIT_D0, 19 },
- { "D0.20", UNIT_D0, 20 },
- { "D0.21", UNIT_D0, 21 },
- { "D0.22", UNIT_D0, 22 },
- { "D0.23", UNIT_D0, 23 },
- { "D0.24", UNIT_D0, 24 },
- { "D0.25", UNIT_D0, 25 },
- { "D0.26", UNIT_D0, 26 },
- { "D0.27", UNIT_D0, 27 },
- { "D0.28", UNIT_D0, 28 },
- { "D0.29", UNIT_D0, 29 },
- { "D0.30", UNIT_D0, 30 },
- { "D0.31", UNIT_D0, 31 },
-
- { "D1Re0", UNIT_D1, 0 },
- { "D1.0", UNIT_D1, 0 },
- { "D1Ar5", UNIT_D1, 1 },
- { "D1.1", UNIT_D1, 1 },
- { "D1Ar3", UNIT_D1, 2 },
- { "D1.2", UNIT_D1, 2 },
- { "D1Ar1", UNIT_D1, 3 },
- { "D1.3", UNIT_D1, 3 },
- { "D1RtP", UNIT_D1, 4 },
- { "D1.4", UNIT_D1, 4 },
- { "D1.5", UNIT_D1, 5 },
- { "D1.6", UNIT_D1, 6 },
- { "D1.7", UNIT_D1, 7 },
- { "D1.8", UNIT_D1, 8 },
- { "D1.9", UNIT_D1, 9 },
- { "D1.10", UNIT_D1, 10 },
- { "D1.11", UNIT_D1, 11 },
- { "D1.12", UNIT_D1, 12 },
- { "D1.13", UNIT_D1, 13 },
- { "D1.14", UNIT_D1, 14 },
- { "D1.15", UNIT_D1, 15 },
- { "D1.16", UNIT_D1, 16 },
- { "D1.17", UNIT_D1, 17 },
- { "D1.18", UNIT_D1, 18 },
- { "D1.19", UNIT_D1, 19 },
- { "D1.20", UNIT_D1, 20 },
- { "D1.21", UNIT_D1, 21 },
- { "D1.22", UNIT_D1, 22 },
- { "D1.23", UNIT_D1, 23 },
- { "D1.24", UNIT_D1, 24 },
- { "D1.25", UNIT_D1, 25 },
- { "D1.26", UNIT_D1, 26 },
- { "D1.27", UNIT_D1, 27 },
- { "D1.28", UNIT_D1, 28 },
- { "D1.29", UNIT_D1, 29 },
- { "D1.30", UNIT_D1, 30 },
- { "D1.31", UNIT_D1, 31 },
-
- { "A0StP", UNIT_A0, 0 },
- { "A0.0", UNIT_A0, 0 },
- { "A0FrP", UNIT_A0, 1 },
- { "A0.1", UNIT_A0, 1 },
- { "A0.2", UNIT_A0, 2 },
- { "A0.3", UNIT_A0, 3 },
- { "A0.4", UNIT_A0, 4 },
- { "A0.5", UNIT_A0, 5 },
- { "A0.6", UNIT_A0, 6 },
- { "A0.7", UNIT_A0, 7 },
- { "A0.8", UNIT_A0, 8 },
- { "A0.9", UNIT_A0, 9 },
- { "A0.10", UNIT_A0, 10 },
- { "A0.11", UNIT_A0, 11 },
- { "A0.12", UNIT_A0, 12 },
- { "A0.13", UNIT_A0, 13 },
- { "A0.14", UNIT_A0, 14 },
- { "A0.15", UNIT_A0, 15 },
- { "CPC0", UNIT_A0, 16 },
-
- { "A1GbP", UNIT_A1, 0 },
- { "A1.0", UNIT_A1, 0 },
- { "A1LbP", UNIT_A1, 1 },
- { "A1.1", UNIT_A1, 1 },
- { "A1.2", UNIT_A1, 2 },
- { "A1.3", UNIT_A1, 3 },
- { "A1.4", UNIT_A1, 4 },
- { "A1.5", UNIT_A1, 5 },
- { "A1.6", UNIT_A1, 6 },
- { "A1.7", UNIT_A1, 7 },
- { "A1.8", UNIT_A1, 8 },
- { "A1.9", UNIT_A1, 9 },
- { "A1.10", UNIT_A1, 10 },
- { "A1.11", UNIT_A1, 11 },
- { "A1.12", UNIT_A1, 12 },
- { "A1.13", UNIT_A1, 13 },
- { "A1.14", UNIT_A1, 14 },
- { "A1.15", UNIT_A1, 15 },
- { "CPC1", UNIT_A1, 16 },
-
- { "PC", UNIT_PC, 0 },
- { "PCX", UNIT_PC, 1 },
-
- { "RD", UNIT_RD, 0 },
- { "RA", UNIT_RD, 16 },
- { "RD", UNIT_RD, 16 },
- { "RAPF", UNIT_RD, 17 },
- { "RAM8X32", UNIT_RD, 22 },
- { "RAM8X", UNIT_RD, 23 },
- { "RABZ", UNIT_RD, 24 },
- { "RAWZ", UNIT_RD, 25 },
- { "RADZ", UNIT_RD, 26 },
- { "RABX", UNIT_RD, 28 },
- { "RAWX", UNIT_RD, 29 },
- { "RADX", UNIT_RD, 30 },
- { "RAMX", UNIT_RD, 31 },
- { "RAM16X", UNIT_RD, 31 },
-
- { "TXSTAT", UNIT_TR, 0 },
- { "TR.0", UNIT_TR, 0 },
- { "TXMASK", UNIT_TR, 1 },
- { "TR.1", UNIT_TR, 1 },
- { "TXSTATI", UNIT_TR, 2 },
- { "TR.2", UNIT_TR, 2 },
- { "TXMASKI", UNIT_TR, 3 },
- { "TR.3", UNIT_TR, 3 },
- { "TXPOLL", UNIT_TR, 4 },
- { "TR.4", UNIT_TR, 4 },
- { "TXGPIOI", UNIT_TR, 5 },
- { "TR.5", UNIT_TR, 5 },
- { "TXPOLLI", UNIT_TR, 6 },
- { "TR.6", UNIT_TR, 6 },
- { "TXGPIOO", UNIT_TR, 7 },
- { "TR.7", UNIT_TR, 7 },
-
- { "TTEXEC", UNIT_TT, 0 },
- { "TT.0", UNIT_TT, 0 },
- { "TTCTRL", UNIT_TT, 1 },
- { "TT.1", UNIT_TT, 1 },
- { "TTMARK", UNIT_TT, 2 },
- { "TT.2", UNIT_TT, 2 },
- { "TTREC", UNIT_TT, 3 },
- { "TT.3", UNIT_TT, 3 },
- { "GTEXEC", UNIT_TT, 4 },
- { "TT.4", UNIT_TT, 4 },
-
- { "FX.0", UNIT_FX, 0 },
- { "FX.1", UNIT_FX, 1 },
- { "FX.2", UNIT_FX, 2 },
- { "FX.3", UNIT_FX, 3 },
- { "FX.4", UNIT_FX, 4 },
- { "FX.5", UNIT_FX, 5 },
- { "FX.6", UNIT_FX, 6 },
- { "FX.7", UNIT_FX, 7 },
- { "FX.8", UNIT_FX, 8 },
- { "FX.9", UNIT_FX, 9 },
- { "FX.10", UNIT_FX, 10 },
- { "FX.11", UNIT_FX, 11 },
- { "FX.12", UNIT_FX, 12 },
- { "FX.13", UNIT_FX, 13 },
- { "FX.14", UNIT_FX, 14 },
- { "FX.15", UNIT_FX, 15 },
- };
-
-static const metag_reg metag_dsp_regtab[] =
- {
- { "D0AR.0", UNIT_RAM_D0, 0 },
- { "D0AR.1", UNIT_RAM_D0, 1 },
- { "D0AW.0", UNIT_RAM_D0, 2 },
- { "D0AW.1", UNIT_RAM_D0, 3 },
- { "D0BR.0", UNIT_RAM_D0, 4 },
- { "D0BR.1", UNIT_RAM_D0, 5 },
- { "D0BW.0", UNIT_RAM_D0, 6 },
- { "D0BW.1", UNIT_RAM_D0, 7 },
- { "D0ARI.0", UNIT_RAM_D0, 8 },
- { "D0ARI.1", UNIT_RAM_D0, 9 },
- { "D0AWI.0", UNIT_RAM_D0, 10 },
- { "D0AWI.1", UNIT_RAM_D0, 11 },
- { "D0BRI.0", UNIT_RAM_D0, 12 },
- { "D0BRI.1", UNIT_RAM_D0, 13 },
- { "D0BWI.0", UNIT_RAM_D0, 14 },
- { "D0BWI.1", UNIT_RAM_D0, 15 },
-
- { "AC0.0", UNIT_ACC_D0, 16 },
- { "AC0.1", UNIT_ACC_D0, 17 },
- { "AC0.2", UNIT_ACC_D0, 18 },
- { "AC0.3", UNIT_ACC_D0, 19 },
-
- { "D1AR.0", UNIT_RAM_D1, 0 },
- { "D1AR.1", UNIT_RAM_D1, 1 },
- { "D1AW.0", UNIT_RAM_D1, 2 },
- { "D1AW.1", UNIT_RAM_D1, 3 },
- { "D1BR.0", UNIT_RAM_D1, 4 },
- { "D1BR.1", UNIT_RAM_D1, 5 },
- { "D1BW.0", UNIT_RAM_D1, 6 },
- { "D1BW.1", UNIT_RAM_D1, 7 },
- { "D1ARI.0", UNIT_RAM_D1, 8 },
- { "D1ARI.1", UNIT_RAM_D1, 9 },
- { "D1AWI.0", UNIT_RAM_D1, 10 },
- { "D1AWI.1", UNIT_RAM_D1, 11 },
- { "D1BRI.0", UNIT_RAM_D1, 12 },
- { "D1BRI.1", UNIT_RAM_D1, 13 },
- { "D1BWI.0", UNIT_RAM_D1, 14 },
- { "D1BWI.1", UNIT_RAM_D1, 15 },
-
- { "AC1.0", UNIT_ACC_D1, 16 },
- { "AC1.1", UNIT_ACC_D1, 17 },
- { "AC1.2", UNIT_ACC_D1, 18 },
- { "AC1.3", UNIT_ACC_D1, 19 },
-
- { "T0", UNIT_DT, 0 },
- { "T1", UNIT_DT, 1 },
- { "T2", UNIT_DT, 2 },
- { "T3", UNIT_DT, 3 },
- { "T4", UNIT_DT, 4 },
- { "T5", UNIT_DT, 5 },
- { "T6", UNIT_DT, 6 },
- { "T7", UNIT_DT, 7 },
- { "T8", UNIT_DT, 8 },
- { "T9", UNIT_DT, 9 },
- { "TA", UNIT_DT, 10 },
- { "TB", UNIT_DT, 11 },
- { "TC", UNIT_DT, 12 },
- { "TD", UNIT_DT, 13 },
- { "TE", UNIT_DT, 14 },
- { "TF", UNIT_DT, 15 },
- };
-
-/* This table differs from 'metag_dsp_regtab' in that the number
- fields in this table are suitable for insertion into DSPRAM
- template definition instruction encodings.
-
- The table is indexed by "load". The main benefit of this is that we
- can implicitly check that the correct DSPRAM register has been used
- when parsing, e.g. the read pointer only appears in the load table
- and the write pointer only exists in the store table.
-
- The ordering of the table entries might look a bit weird but it is
- based on matching the longest register string. */
-static const metag_reg metag_dsp_tmpl_regtab[2][56] =
- {
- {
- { "D0AW.0+D0AWI.0++", UNIT_RAM_D0, 18 },
- { "D0AW.0+D0AWI.0", UNIT_RAM_D0, 18 },
- { "D0AW.0+D0AWI.1++", UNIT_RAM_D0, 19 },
- { "D0AW.0+D0AWI.1", UNIT_RAM_D0, 19 },
- { "D0AW.0++", UNIT_RAM_D0, 17 },
- { "D0AW.0", UNIT_RAM_D0, 16 },
- { "D0AWI.0", UNIT_RAM_D0, 18 },
- { "D0AWI.1", UNIT_RAM_D0, 19 },
- { "D0AW.1+D0AWI.0++", UNIT_RAM_D0, 22 },
- { "D0AW.1+D0AWI.0", UNIT_RAM_D0, 22 },
- { "D0AW.1+D0AWI.1++", UNIT_RAM_D0, 23 },
- { "D0AW.1+D0AWI.1", UNIT_RAM_D0, 23 },
- { "D0AW.1++", UNIT_RAM_D0, 21 },
- { "D0AW.1", UNIT_RAM_D0, 20 },
- { "D0BW.0+D0BWI.0++", UNIT_RAM_D0, 26 },
- { "D0BW.0+D0BWI.0", UNIT_RAM_D0, 26 },
- { "D0BW.0+D0BWI.1++", UNIT_RAM_D0, 27 },
- { "D0BW.0+D0BWI.1", UNIT_RAM_D0, 27 },
- { "D0BW.0++", UNIT_RAM_D0, 25 },
- { "D0BW.0", UNIT_RAM_D0, 24 },
- { "D0BWI.0", UNIT_RAM_D0, 18 },
- { "D0BWI.1", UNIT_RAM_D0, 19 },
- { "D0BW.1+D0BWI.0++", UNIT_RAM_D0, 30 },
- { "D0BW.1+D0BWI.0", UNIT_RAM_D0, 30 },
- { "D0BW.1+D0BWI.1++", UNIT_RAM_D0, 31 },
- { "D0BW.1+D0BWI.1", UNIT_RAM_D0, 31 },
- { "D0BW.1++", UNIT_RAM_D0, 29 },
- { "D0BW.1", UNIT_RAM_D0, 28 },
-
- { "D1AW.0+D1AWI.0++", UNIT_RAM_D1, 18 },
- { "D1AW.0+D1AWI.0", UNIT_RAM_D1, 18 },
- { "D1AW.0+D1AWI.1++", UNIT_RAM_D1, 19 },
- { "D1AW.0+D1AWI.1", UNIT_RAM_D1, 19 },
- { "D1AW.0++", UNIT_RAM_D1, 17 },
- { "D1AW.0", UNIT_RAM_D1, 16 },
- { "D1AWI.0", UNIT_RAM_D1, 18 },
- { "D1AWI.1", UNIT_RAM_D1, 19 },
- { "D1AW.1+D1AWI.0++", UNIT_RAM_D1, 22 },
- { "D1AW.1+D1AWI.0", UNIT_RAM_D1, 22 },
- { "D1AW.1+D1AWI.1++", UNIT_RAM_D1, 23 },
- { "D1AW.1+D1AWI.1", UNIT_RAM_D1, 23 },
- { "D1AW.1++", UNIT_RAM_D1, 21 },
- { "D1AW.1", UNIT_RAM_D1, 20 },
- { "D1BW.0+D1BWI.0++", UNIT_RAM_D1, 26 },
- { "D1BW.0+D1BWI.0", UNIT_RAM_D1, 26 },
- { "D1BW.0+D1BWI.1++", UNIT_RAM_D1, 27 },
- { "D1BW.0+D1BWI.1", UNIT_RAM_D1, 27 },
- { "D1BW.0++", UNIT_RAM_D1, 25 },
- { "D1BW.0", UNIT_RAM_D1, 24 },
- { "D1BWI.0", UNIT_RAM_D1, 18 },
- { "D1BWI.1", UNIT_RAM_D1, 19 },
- { "D1BW.1+D1BWI.0++", UNIT_RAM_D1, 30 },
- { "D1BW.1+D1BWI.0", UNIT_RAM_D1, 30 },
- { "D1BW.1+D1BWI.1++", UNIT_RAM_D1, 31 },
- { "D1BW.1+D1BWI.1", UNIT_RAM_D1, 31 },
- { "D1BW.1++", UNIT_RAM_D1, 29 },
- { "D1BW.1", UNIT_RAM_D1, 28 },
- },
-
- {
- { "D0AR.0+D0ARI.0++", UNIT_RAM_D0, 18 },
- { "D0AR.0+D0ARI.0", UNIT_RAM_D0, 18 },
- { "D0AR.0+D0ARI.1++", UNIT_RAM_D0, 19 },
- { "D0AR.0+D0ARI.1", UNIT_RAM_D0, 19 },
- { "D0AR.0++", UNIT_RAM_D0, 17 },
- { "D0AR.0", UNIT_RAM_D0, 16 },
- { "D0ARI.0", UNIT_RAM_D0, 18 },
- { "D0ARI.1", UNIT_RAM_D0, 19 },
- { "D0AR.1+D0ARI.0++", UNIT_RAM_D0, 22 },
- { "D0AR.1+D0ARI.0", UNIT_RAM_D0, 22 },
- { "D0AR.1+D0ARI.1++", UNIT_RAM_D0, 23 },
- { "D0AR.1+D0ARI.1", UNIT_RAM_D0, 23 },
- { "D0AR.1++", UNIT_RAM_D0, 21 },
- { "D0AR.1", UNIT_RAM_D0, 20 },
- { "D0BR.0+D0BRI.0++", UNIT_RAM_D0, 26 },
- { "D0BR.0+D0BRI.0", UNIT_RAM_D0, 26 },
- { "D0BR.0+D0BRI.1++", UNIT_RAM_D0, 27 },
- { "D0BR.0+D0BRI.1", UNIT_RAM_D0, 27 },
- { "D0BR.0++", UNIT_RAM_D0, 25 },
- { "D0BR.0", UNIT_RAM_D0, 24 },
- { "D0BRI.0", UNIT_RAM_D0, 18 },
- { "D0BRI.1", UNIT_RAM_D0, 19 },
- { "D0BR.1+D0BRI.0++", UNIT_RAM_D0, 30 },
- { "D0BR.1+D0BRI.0", UNIT_RAM_D0, 30 },
- { "D0BR.1+D0BRI.1++", UNIT_RAM_D0, 31 },
- { "D0BR.1+D0BRI.1", UNIT_RAM_D0, 31 },
- { "D0BR.1++", UNIT_RAM_D0, 29 },
- { "D0BR.1", UNIT_RAM_D0, 28 },
-
- { "D1AR.0+D1ARI.0++", UNIT_RAM_D1, 18 },
- { "D1AR.0+D1ARI.0", UNIT_RAM_D1, 18 },
- { "D1AR.0+D1ARI.1++", UNIT_RAM_D1, 19 },
- { "D1AR.0+D1ARI.1", UNIT_RAM_D1, 19 },
- { "D1AR.0++", UNIT_RAM_D1, 17 },
- { "D1AR.0", UNIT_RAM_D1, 16 },
- { "D1ARI.0", UNIT_RAM_D1, 18 },
- { "D1ARI.1", UNIT_RAM_D1, 19 },
- { "D1AR.1+D1ARI.0++", UNIT_RAM_D1, 22 },
- { "D1AR.1+D1ARI.0", UNIT_RAM_D1, 22 },
- { "D1AR.1+D1ARI.1++", UNIT_RAM_D1, 23 },
- { "D1AR.1+D1ARI.1", UNIT_RAM_D1, 23 },
- { "D1AR.1++", UNIT_RAM_D1, 21 },
- { "D1AR.1", UNIT_RAM_D1, 20 },
- { "D1BR.0+D1BRI.0++", UNIT_RAM_D1, 26 },
- { "D1BR.0+D1BRI.0", UNIT_RAM_D1, 26 },
- { "D1BR.0+D1BRI.1++", UNIT_RAM_D1, 27 },
- { "D1BR.0+D1BRI.1", UNIT_RAM_D1, 27 },
- { "D1BR.0++", UNIT_RAM_D1, 25 },
- { "D1BR.0", UNIT_RAM_D1, 24 },
- { "D1BR.1+D1BRI.0++", UNIT_RAM_D1, 30 },
- { "D1BR.1+D1BRI.0", UNIT_RAM_D1, 30 },
- { "D1BR.1+D1BRI.1++", UNIT_RAM_D1, 31 },
- { "D1BR.1+D1BRI.1", UNIT_RAM_D1, 31 },
- { "D1BR.1++", UNIT_RAM_D1, 29 },
- { "D1BR.1", UNIT_RAM_D1, 28 },
- { "D1BRI.0", UNIT_RAM_D1, 18 },
- { "D1BRI.1", UNIT_RAM_D1, 19 },
- },
- };
-
-typedef struct
-{
- const char * name;
- unsigned int part;
-} metag_acf;
-
-static const metag_acf metag_acftab[] =
- {
- { "ACF.0", 0},
- { "ACF.1", 1},
- { "ACF.2", 2},
- { "ACF.3", 3},
- };
-
-enum insn_encoding
-{
- ENC_NONE,
- ENC_MOV_U2U,
- ENC_MOV_PORT,
- ENC_MMOV,
- ENC_MDRD,
- ENC_MOVL_TTREC,
- ENC_GET_SET,
- ENC_GET_SET_EXT,
- ENC_MGET_MSET,
- ENC_COND_SET,
- ENC_XFR,
- ENC_MOV_CT,
- ENC_SWAP,
- ENC_JUMP,
- ENC_CALLR,
- ENC_ALU,
- ENC_SHIFT,
- ENC_MIN_MAX,
- ENC_BITOP,
- ENC_CMP,
- ENC_BRANCH,
- ENC_KICK,
- ENC_SWITCH,
- ENC_CACHER,
- ENC_CACHEW,
- ENC_ICACHE,
- ENC_LNKGET,
- ENC_FMOV,
- ENC_FMMOV,
- ENC_FMOV_DATA,
- ENC_FMOV_I,
- ENC_FPACK,
- ENC_FSWAP,
- ENC_FCMP,
- ENC_FMINMAX,
- ENC_FCONV,
- ENC_FCONVX,
- ENC_FBARITH,
- ENC_FEARITH,
- ENC_FREC,
- ENC_FSIMD,
- ENC_FGET_SET_ACF,
- ENC_DGET_SET,
- ENC_DTEMPLATE,
- ENC_DALU,
- ENC_MAX,
-};
-
-enum insn_type
-{
- INSN_GP,
- INSN_FPU,
- INSN_DSP,
- INSN_DSP_FPU,
-};
-
-typedef struct
-{
- const char *name;
-
- unsigned int core_flags;
-#define CoreMeta11 0x1 /* The earliest Meta core we support */
-#define CoreMeta12 0x2
-#define CoreMeta21 0x4
-
-#define FpuMeta21 0x21
-
-#define DspMeta21 0x100
-
- unsigned int meta_opcode;
- unsigned int meta_mask;
-
- enum insn_type insn_type;
-
- enum insn_encoding encoding;
-
-#define DSP_ARGS_1 0x0000001 /* De.r,Dx.r,De.r (3 register operands) */
-#define DSP_ARGS_ACC2 0x0000002 /* Accumulator source operand 2 */
-#define DSP_ARGS_QR 0x0000004 /* QUICKRoT */
-#define DSP_ARGS_XACC 0x0000008 /* Cross-unit accumulator op */
-#define DSP_ARGS_DACC 0x0000010 /* Target accumulator as destination */
-#define DSP_ARGS_SRD 0x0000020 /* Source the RD port */
-#define DSP_ARGS_2 0x0000040 /* De.r,Dx.r (2 register operands) */
-#define DSP_ARGS_DSP_SRC1 0x0000080 /* Source a DSP register */
-#define DSP_ARGS_DSP_SRC2 0x0000100 /* Source a DSP register */
-#define DSP_ARGS_IMM 0x0000200 /* Immediate value for src 2 */
-#define DSP_ARGS_SPLIT8 0x0000400 /* Data unit split 8 operations */
-#define DSP_ARGS_12 0x0000800 /* De.r,Dx.r */
-#define DSP_ARGS_13 0x0001000 /* Dx.r,Rx.r */
-#define DSP_ARGS_14 0x0002000 /* DSPe.r,Dx.r */
-#define DSP_ARGS_15 0x0004000 /* DSPx.r,#I16 */
-#define DSP_ARGS_16 0x0008000 /* De.r,DSPx.r */
-#define DSP_ARGS_17 0x0010000 /* De.r|ACe.r,Dx.r,Rx.r|RD */
-#define DSP_ARGS_18 0x0020000 /* De.r,Dx.r|ACx.r */
-#define DSP_ARGS_20 0x0080000 /* De.r,Dx.r|ACx.r,De.r */
-#define DSP_ARGS_21 0x0100000 /* De.r,Dx.r|ACx.r,#I5 */
-#define DSP_ARGS_22 0x0200000 /* De.r,Dx.r|ACx.r,De.r|#I5 */
-#define DSP_ARGS_23 0x0400000 /* Ux.r,Dx.r|ACx.r,De.r|#I5 */
-#define GP_ARGS_QR 0x0000001 /* QUICKRoT */
- unsigned int arg_type;
-} insn_template;
-
-enum major_opcode
-{
- OPC_ADD,
- OPC_SUB,
- OPC_AND,
- OPC_OR,
- OPC_XOR,
- OPC_SHIFT,
- OPC_MUL,
- OPC_CMP,
- OPC_ADDR,
- OPC_9,
- OPC_MISC,
- OPC_SET,
- OPC_GET,
- OPC_XFR,
- OPC_CPR,
- OPC_FPU,
-};
-
-#define GET_EXT_MINOR 0x7
-#define MOV_EXT_MINOR 0x6
-#define MOVL_MINOR 0x2
-
-#define MAJOR_OPCODE(opcode) (((opcode) >> 28) & 0xf)
-#define MINOR_OPCODE(opcode) (((opcode) >> 24) & 0xf)
-
-enum cond_code
-{
- COND_A,
- COND_EQ,
- COND_NE,
- COND_CS,
- COND_CC,
- COND_MI,
- COND_PL,
- COND_VS,
- COND_VC,
- COND_HI,
- COND_LS,
- COND_GE,
- COND_LT,
- COND_GT,
- COND_LE,
- COND_NV,
-};
-
-enum scond_code
-{
- SCOND_A,
- SCOND_LEQ,
- SCOND_LNE,
- SCOND_LLO,
- SCOND_LHS,
- SCOND_HEQ,
- SCOND_HNE,
- SCOND_HLO,
- SCOND_HHS,
- SCOND_LGR,
- SCOND_LLE,
- SCOND_HGR,
- SCOND_HLE,
- SCOND_EEQ,
- SCOND_ELO,
- SCOND_NV,
-};
-
-typedef struct
-{
- const char *name;
- enum scond_code code;
-} split_condition;
-
-static const split_condition metag_scondtab[] =
- {
- { "LEQ", SCOND_LEQ },
- { "LEZ", SCOND_LEQ },
- { "LNE", SCOND_LNE },
- { "LNZ", SCOND_LNE },
- { "LLO", SCOND_LLO },
- { "LCS", SCOND_LLO },
- { "LHS", SCOND_LHS },
- { "LCC", SCOND_LHS },
- { "HEQ", SCOND_HEQ },
- { "HEZ", SCOND_HEQ },
- { "HNE", SCOND_HNE },
- { "HNZ", SCOND_HNE },
- { "HLO", SCOND_HLO },
- { "HCS", SCOND_HLO },
- { "HHS", SCOND_HHS },
- { "HCC", SCOND_HHS },
- { "LGR", SCOND_LGR },
- { "LHI", SCOND_LGR },
- { "LLE", SCOND_LLE },
- { "LLS", SCOND_LLE },
- { "HGR", SCOND_HGR },
- { "HHI", SCOND_HGR },
- { "HLE", SCOND_HLE },
- { "HLS", SCOND_HLE },
- { "EEQ", SCOND_EEQ },
- { "EEZ", SCOND_EEQ },
- { "ELO", SCOND_ELO },
- { "ECS", SCOND_ELO },
- };
-
-static const split_condition metag_dsp_scondtab[] =
- {
- { "LEQ", SCOND_LEQ },
- { "LEZ", SCOND_LEQ },
- { "LNE", SCOND_LNE },
- { "LNZ", SCOND_LNE },
- { "LCS", SCOND_LLO },
- { "LLO", SCOND_LLO },
- { "LCC", SCOND_LHS },
- { "LHS", SCOND_LHS },
- { "HEQ", SCOND_HEQ },
- { "HEZ", SCOND_HEQ },
- { "HNE", SCOND_HNE },
- { "HNZ", SCOND_HNE },
- { "HCS", SCOND_HLO },
- { "HLO", SCOND_HLO },
- { "HCC", SCOND_HHS },
- { "HHS", SCOND_HHS },
- { "LHI", SCOND_LGR },
- { "LGR", SCOND_LGR },
- { "LLS", SCOND_LLE },
- { "LLE", SCOND_LLE },
- { "HHI", SCOND_HGR },
- { "HGR", SCOND_HGR },
- { "HLS", SCOND_HLE },
- { "HLE", SCOND_HLE },
- { "EEQ", SCOND_EEQ },
- { "EEZ", SCOND_EEQ },
- { "ECS", SCOND_ELO },
- { "ELO", SCOND_ELO },
- };
-
-static const split_condition metag_fpu_scondtab[] =
- {
- { "LEQ", SCOND_LEQ },
- { "LEZ", SCOND_LEQ },
- { "LNE", SCOND_LNE },
- { "LNZ", SCOND_LNE },
- { "LLO", SCOND_LLO },
- { "LCS", SCOND_LLO },
- { "LHS", SCOND_LHS },
- { "LCC", SCOND_LHS },
- { "HEQ", SCOND_HEQ },
- { "HEZ", SCOND_HEQ },
- { "HNE", SCOND_HNE },
- { "HNZ", SCOND_HNE },
- { "HLO", SCOND_HLO },
- { "HCS", SCOND_HLO },
- { "HHS", SCOND_HHS },
- { "HCC", SCOND_HHS },
- { "LGR", SCOND_LGR },
- { "LHI", SCOND_LGR },
- { "LLE", SCOND_LLE },
- { "LLS", SCOND_LLE },
- { "HGR", SCOND_HGR },
- { "HHI", SCOND_HGR },
- { "HLE", SCOND_HLE },
- { "HLS", SCOND_HLE },
- { "EEQ", SCOND_EEQ },
- { "EEZ", SCOND_EEQ },
- { "ELO", SCOND_ELO },
- { "ECS", SCOND_ELO },
- };
-
-enum fcond_code
-{
- FCOND_A,
- FCOND_FEQ,
- FCOND_UNE,
- FCOND_FLT,
- FCOND_UGE,
-
- FCOND_UVS = 7,
- FCOND_FVC,
- FCOND_UGT,
- FCOND_FLE,
- FCOND_FGE,
- FCOND_ULT,
- FCOND_FGT,
- FCOND_ULE,
- FCOND_NV,
-};
-
-#define COND_INSN(mnemonic, suffix, field_shift, flags, meta_opcode, \
- meta_mask, insn_type, encoding, args) \
- { mnemonic suffix, flags, meta_opcode, meta_mask, \
- insn_type, encoding, args }, \
- { mnemonic "A" suffix, flags, meta_opcode, meta_mask, \
- insn_type, encoding, args }, \
- { mnemonic "EQ" suffix, flags, meta_opcode | (COND_EQ << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "Z" suffix, flags, meta_opcode | (COND_EQ << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "NE" suffix, flags, meta_opcode | (COND_NE << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "NZ" suffix, flags, meta_opcode | (COND_NE << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "CS" suffix, flags, meta_opcode | (COND_CS << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "LO" suffix, flags, meta_opcode | (COND_CS << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "CC" suffix, flags, meta_opcode | (COND_CC << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "HS" suffix, flags, meta_opcode | (COND_CC << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "MI" suffix, flags, meta_opcode | (COND_MI << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "N" suffix, flags, meta_opcode | (COND_MI << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "PL" suffix, flags, meta_opcode | (COND_PL << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "NC" suffix, flags, meta_opcode | (COND_PL << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "VS" suffix, flags, meta_opcode | (COND_VS << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "VC" suffix, flags, meta_opcode | (COND_VC << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "HI" suffix, flags, meta_opcode | (COND_HI << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "LS" suffix, flags, meta_opcode | (COND_LS << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "GE" suffix, flags, meta_opcode | (COND_GE << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "LT" suffix, flags, meta_opcode | (COND_LT << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "GT" suffix, flags, meta_opcode | (COND_GT << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "LE" suffix, flags, meta_opcode | (COND_LE << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "NV" suffix, flags, meta_opcode | (COND_NV << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "FEQ" suffix, flags, meta_opcode | \
- (FCOND_FEQ << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "FZ" suffix, flags, meta_opcode | \
- (FCOND_FEQ << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "UNE" suffix, flags, meta_opcode | \
- (FCOND_UNE << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "UNZ" suffix, flags, meta_opcode | \
- (FCOND_UNE << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "FLT" suffix, flags, meta_opcode | \
- (FCOND_FLT << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "FLO" suffix, flags, meta_opcode | \
- (FCOND_FLT << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "UGE" suffix, flags, meta_opcode | \
- (FCOND_UGE << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "UHS" suffix, flags, meta_opcode | \
- (FCOND_UGE << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "UVS" suffix, flags, meta_opcode | \
- (FCOND_UVS << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "FVC" suffix, flags, meta_opcode | \
- (FCOND_FVC << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "UGT" suffix, flags, meta_opcode | \
- (FCOND_UGT << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "UHI" suffix, flags, meta_opcode | \
- (FCOND_UGT << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "FLE" suffix, flags, meta_opcode | \
- (FCOND_FLE << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "FGE" suffix, flags, meta_opcode | \
- (FCOND_FGE << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "FHS" suffix, flags, meta_opcode | \
- (FCOND_FGE << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "ULT" suffix, flags, meta_opcode | \
- (FCOND_ULT << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "ULO" suffix, flags, meta_opcode | \
- (FCOND_ULT << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "FGT" suffix, flags, meta_opcode | \
- (FCOND_FGT << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "FHI" suffix, flags, meta_opcode | \
- (FCOND_FGT << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "ULE" suffix, flags, meta_opcode | \
- (FCOND_ULE << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "NV" suffix, flags, meta_opcode | \
- (FCOND_NV << field_shift), meta_mask, INSN_FPU, encoding, args }
-
-#define FCOND_INSN(mnemonic, suffix, field_shift, flags, meta_opcode, \
- meta_mask, insn_type, encoding, args) \
- { mnemonic suffix, flags, meta_opcode, meta_mask, \
- insn_type, encoding, args }, \
- { mnemonic "A" suffix, flags, meta_opcode, meta_mask, \
- insn_type, encoding, args }, \
- { mnemonic "FEQ" suffix, flags, meta_opcode | \
- (FCOND_FEQ << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "FZ" suffix, flags, meta_opcode | \
- (FCOND_FEQ << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "UNE" suffix, flags, meta_opcode | \
- (FCOND_UNE << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "UNZ" suffix, flags, meta_opcode | \
- (FCOND_UNE << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "FLO" suffix, flags, meta_opcode | \
- (FCOND_FLT << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "FLT" suffix, flags, meta_opcode | \
- (FCOND_FLT << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "UHS" suffix, flags, meta_opcode | \
- (FCOND_UGE << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "UGE" suffix, flags, meta_opcode | \
- (FCOND_UGE << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "UVS" suffix, flags, meta_opcode | \
- (FCOND_UVS << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "FVC" suffix, flags, meta_opcode | \
- (FCOND_FVC << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "UHI" suffix, flags, meta_opcode | \
- (FCOND_UGT << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "UGT" suffix, flags, meta_opcode | \
- (FCOND_UGT << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "FLE" suffix, flags, meta_opcode | \
- (FCOND_FLE << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "FGE" suffix, flags, meta_opcode | \
- (FCOND_FGE << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "FHS" suffix, flags, meta_opcode | \
- (FCOND_FGE << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "ULT" suffix, flags, meta_opcode | \
- (FCOND_ULT << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "ULO" suffix, flags, meta_opcode | \
- (FCOND_ULT << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "FGT" suffix, flags, meta_opcode | \
- (FCOND_FGT << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "FHI" suffix, flags, meta_opcode | \
- (FCOND_FGT << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "ULE" suffix, flags, meta_opcode | \
- (FCOND_ULE << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "NV" suffix, flags, meta_opcode | \
- (FCOND_NV << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "EQ" suffix, flags, meta_opcode | (COND_EQ << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "Z" suffix, flags, meta_opcode | (COND_EQ << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "NE" suffix, flags, meta_opcode | (COND_NE << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "NZ" suffix, flags, meta_opcode | (COND_NE << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "CS" suffix, flags, meta_opcode | (COND_CS << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "LO" suffix, flags, meta_opcode | (COND_CS << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "CC" suffix, flags, meta_opcode | (COND_CC << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "HS" suffix, flags, meta_opcode | (COND_CC << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "MI" suffix, flags, meta_opcode | (COND_MI << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "N" suffix, flags, meta_opcode | (COND_MI << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "PL" suffix, flags, meta_opcode | (COND_PL << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "NC" suffix, flags, meta_opcode | (COND_PL << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "VS" suffix, flags, meta_opcode | (COND_VS << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "VC" suffix, flags, meta_opcode | (COND_VC << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "HI" suffix, flags, meta_opcode | (COND_HI << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "LS" suffix, flags, meta_opcode | (COND_LS << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "GE" suffix, flags, meta_opcode | (COND_GE << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "LT" suffix, flags, meta_opcode | (COND_LT << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "GT" suffix, flags, meta_opcode | (COND_GT << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "LE" suffix, flags, meta_opcode | (COND_LE << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "NV" suffix, flags, meta_opcode | (COND_NV << field_shift), \
- meta_mask, insn_type, encoding, args }
-
-#define TEMPLATE_INSN(flags, meta_opcode, meta_mask, insn_type) \
- { "T0", flags, meta_opcode | 0x0, meta_mask, insn_type, ENC_DTEMPLATE, 0 }, \
- { "T1", flags, meta_opcode | 0x1, meta_mask, insn_type, ENC_DTEMPLATE, 0 }, \
- { "T2", flags, meta_opcode | 0x2, meta_mask, insn_type, ENC_DTEMPLATE, 0 }, \
- { "T3", flags, meta_opcode | 0x3, meta_mask, insn_type, ENC_DTEMPLATE, 0 }, \
- { "T4", flags, meta_opcode | 0x4, meta_mask, insn_type, ENC_DTEMPLATE, 0 }, \
- { "T5", flags, meta_opcode | 0x5, meta_mask, insn_type, ENC_DTEMPLATE, 0 }, \
- { "T6", flags, meta_opcode | 0x6, meta_mask, insn_type, ENC_DTEMPLATE, 0 }, \
- { "T7", flags, meta_opcode | 0x7, meta_mask, insn_type, ENC_DTEMPLATE, 0 }, \
- { "T8", flags, meta_opcode | 0x8, meta_mask, insn_type, ENC_DTEMPLATE, 0 }, \
- { "T9", flags, meta_opcode | 0x9, meta_mask, insn_type, ENC_DTEMPLATE, 0 }, \
- { "TA", flags, meta_opcode | 0xa, meta_mask, insn_type, ENC_DTEMPLATE, 0 }, \
- { "TB", flags, meta_opcode | 0xb, meta_mask, insn_type, ENC_DTEMPLATE, 0 }, \
- { "TC", flags, meta_opcode | 0xc, meta_mask, insn_type, ENC_DTEMPLATE, 0 }, \
- { "TD", flags, meta_opcode | 0xd, meta_mask, insn_type, ENC_DTEMPLATE, 0 }, \
- { "TE", flags, meta_opcode | 0xe, meta_mask, insn_type, ENC_DTEMPLATE, 0 }, \
- { "TF", flags, meta_opcode | 0xf, meta_mask, insn_type, ENC_DTEMPLATE, 0 }
-
-
-/* Unimplemented GP instructions:
- CPR - coprocessor read
- CPW - coprocessor write
- MORT - morton order operation
- VPACK, VADD, VSUB - vector instructions
-
- The order of the entries in this table is extremely important. DO
- NOT modify it unless you know what you're doing. If you do modify
- it, be sure to run the entire testsuite to make sure you haven't
- caused a regression. */
-
-static const insn_template metag_optab[] =
- {
- /* Port-to-unit MOV */
- COND_INSN ("MOVB", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa1800000, 0xfff83e1f, INSN_GP, ENC_MOV_PORT, 0),
- COND_INSN ("MOVW", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa1800001, 0xfff83e1f, INSN_GP, ENC_MOV_PORT, 0),
- COND_INSN ("MOVD", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa1800200, 0xfff83e1f, INSN_GP, ENC_MOV_PORT, 0),
- COND_INSN ("MOVL", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa2800000, 0xfff8019f, INSN_GP, ENC_MOV_PORT, 0),
-
- /* Read pipeline prime/drain */
- { "MMOVD", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xca000000, 0xff00001f, INSN_GP, ENC_MMOV, 0 },
- { "MMOVL", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xcb000000, 0xff00001f, INSN_GP, ENC_MMOV, 0 },
- { "MMOVD", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xcc000000, 0xff07c067, INSN_GP, ENC_MMOV, 0 },
- { "MMOVL", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xcd000000, 0xff07c067, INSN_GP, ENC_MMOV, 0 },
-
- /* Read pipeline flush */
- { "MDRD", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xcc000002, 0xffffc07f, INSN_GP, ENC_MDRD, 0 },
-
- /* Unit-to-TTREC MOVL */
- COND_INSN ("MOVL", "", 1, CoreMeta12|CoreMeta21,
- 0xa2002001, 0xff003e7f, INSN_GP, ENC_MOVL_TTREC, 0),
-
- /* MOV to RA (extended) */
- { "MOVB", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa6000000, 0xff00001e, INSN_GP, ENC_GET_SET_EXT, 0 },
- { "MOVW", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa6000002, 0xff00001e, INSN_GP, ENC_GET_SET_EXT, 0 },
- { "MOVD", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa6000004, 0xff00001e, INSN_GP, ENC_GET_SET_EXT, 0 },
- { "MOVL", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa6000006, 0xff00001e, INSN_GP, ENC_GET_SET_EXT, 0 },
-
- /* Extended GET */
- { "GETB", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa7000000, 0xff000006, INSN_GP, ENC_GET_SET_EXT, 0 },
- { "GETW", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa7000002, 0xff000006, INSN_GP, ENC_GET_SET_EXT, 0 },
- { "GETD", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa7000004, 0xff000006, INSN_GP, ENC_GET_SET_EXT, 0 },
- { "GETL", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa7000006, 0xff000006, INSN_GP, ENC_GET_SET_EXT, 0 },
-
- /* Extended SET */
- { "SETB", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa5000000, 0xff000006, INSN_GP, ENC_GET_SET_EXT, 0 },
- { "SETW", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa5000002, 0xff000006, INSN_GP, ENC_GET_SET_EXT, 0 },
- { "SETD", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa5000004, 0xff000006, INSN_GP, ENC_GET_SET_EXT, 0 },
- { "SETL", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa5000006, 0xff000006, INSN_GP, ENC_GET_SET_EXT, 0 },
-
- /* MOV to RA */
- { "MOVB", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xc000000c, 0xfd00001e, INSN_GP, ENC_GET_SET, 0 },
- { "MOVW", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xc100000c, 0xfd00001e, INSN_GP, ENC_GET_SET, 0 },
- { "MOVD", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xc400000c, 0xfd00001e, INSN_GP, ENC_GET_SET, 0 },
- { "MOVL", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xc500000c, 0xfd00001e, INSN_GP, ENC_GET_SET, 0 },
-
- /* Standard GET */
- { "GETB", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xc0000000, 0xfd000000, INSN_GP, ENC_GET_SET, 0 },
- { "GETW", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xc1000000, 0xfd000000, INSN_GP, ENC_GET_SET, 0 },
- { "GETD", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xc4000000, 0xfd000000, INSN_GP, ENC_GET_SET, 0 },
- /* GET is a synonym for GETD. */
- { "GET", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xc4000000, 0xfd000000, INSN_GP, ENC_GET_SET, 0 },
- { "GETL", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xc5000000, 0xfd000000, INSN_GP, ENC_GET_SET, 0 },
-
- /* Standard SET */
- { "SETB", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xb0000000, 0xfd000000, INSN_GP, ENC_GET_SET, 0 },
- { "SETW", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xb1000000, 0xfd000000, INSN_GP, ENC_GET_SET, 0 },
- { "SETD", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xb4000000, 0xfd000000, INSN_GP, ENC_GET_SET, 0 },
- /* SET is a synonym for SETD. */
- { "SET", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xb4000000, 0xfd000000, INSN_GP, ENC_GET_SET, 0 },
- { "SETL", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xb5000000, 0xfd000000, INSN_GP, ENC_GET_SET, 0 },
-
- /* Multiple GET */
- { "MGETD", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xc8000000, 0xff000007, INSN_GP, ENC_MGET_MSET, 0 },
- { "MGETL", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xc9000000, 0xff000007, INSN_GP, ENC_MGET_MSET, 0 },
-
- /* Multiple SET */
- { "MSETD", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xb8000000, 0xff000007, INSN_GP, ENC_MGET_MSET, 0 },
- { "MSETL", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xb9000000, 0xff000007, INSN_GP, ENC_MGET_MSET, 0 },
-
- /* Conditional SET */
- COND_INSN ("SETB", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa4000000, 0xff00039f, INSN_GP, ENC_COND_SET, 0),
- COND_INSN ("SETW", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa4000001, 0xff00039f, INSN_GP, ENC_COND_SET, 0),
- COND_INSN ("SETD", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa4000200, 0xff00039f, INSN_GP, ENC_COND_SET, 0),
- COND_INSN ("SETL", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa4000201, 0xff00039f, INSN_GP, ENC_COND_SET, 0),
- { "XFRD", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xd0000000, 0xf2000000, INSN_GP, ENC_XFR, 0 },
- { "XFRL", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xd2000000, 0xf2000000, INSN_GP, ENC_XFR, 0 },
-
- /* Fast control register setup */
- { "MOV", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa9000000, 0xff000005, INSN_GP, ENC_MOV_CT, 0 },
- { "MOVT", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa9000001, 0xff000005, INSN_GP, ENC_MOV_CT, 0 },
- { "MOV", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa9000004, 0xff000005, INSN_GP, ENC_MOV_CT, 0 },
- { "MOVT", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa9000005, 0xff000005, INSN_GP, ENC_MOV_CT, 0 },
-
- /* Internal transfer operations */
- { "JUMP", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xac000000, 0xff000004, INSN_GP, ENC_JUMP, 0 },
- { "CALL", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xac000004, 0xff000004, INSN_GP, ENC_JUMP, 0 },
- { "CALLR", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xab000000, 0xff000000, INSN_GP, ENC_CALLR, 0 },
-
- /* Address unit ALU operations */
- { "MOV", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x80000004, 0xfe0001fc, INSN_GP, ENC_ALU, 0 },
- { "MOV", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x82000004, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "MOVT", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x82000005, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "ADD", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x80000000, 0xfe0001fc, INSN_GP, ENC_ALU, 0 },
- { "ADD", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x82000000, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "ADDT", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x82000001, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "ADD", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x86000020, 0xfe000021, INSN_GP, ENC_ALU, 0 },
- COND_INSN ("ADD", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x84000000, 0xfe00001e, INSN_GP, ENC_ALU, 0),
- COND_INSN ("ADD", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x86000000, 0xfe00003f, INSN_GP, ENC_ALU, 0),
- { "NEG", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x88000004, 0xfe0001fc, INSN_GP, ENC_ALU, 0 },
- { "NEG", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x8a000004, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "NEGT", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x8a000005, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "SUB", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x88000000, 0xfe0001fc, INSN_GP, ENC_ALU, 0 },
- { "SUB", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x8a000000, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "SUBT", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x8a000001, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "SUB", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x8e000020, 0xfe000021, INSN_GP, ENC_ALU, 0 },
- COND_INSN ("SUB", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x8c000000, 0xfe00001e, INSN_GP, ENC_ALU, 0),
- COND_INSN ("SUB", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x8e000000, 0xfe00003f, INSN_GP, ENC_ALU, 0),
-
- /* Data unit ALU operations */
- { "MOV", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x00000004, 0xfe0001fc, INSN_GP, ENC_ALU, 0 },
- { "MOVS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x08000004, 0xfe0001fc, INSN_GP, ENC_ALU, 0 },
- { "MOV", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x02000004, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "MOVS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x0a000004, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "MOVT", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x02000005, 0xfe000007, INSN_GP, ENC_ALU, 0 },
- { "MOVST", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x0a000005, 0xfe000007, INSN_GP, ENC_ALU, 0 },
- { "ADD", DspMeta21,
- 0x00000100, 0xfe000104, INSN_DSP, ENC_DALU,
- DSP_ARGS_1|DSP_ARGS_ACC2|DSP_ARGS_XACC|DSP_ARGS_IMM },
- { "ADD", DspMeta21,
- 0x02000003, 0xfe000003, INSN_DSP, ENC_DALU,
- DSP_ARGS_1|DSP_ARGS_IMM },
- COND_INSN ("ADD", "", 1, DspMeta21,
- 0x040001e0, 0xfe0001fe, INSN_DSP, ENC_DALU, DSP_ARGS_1),
- { "ADD", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x00000000, 0xfe0001fc, INSN_GP, ENC_ALU, 0 },
- { "ADDS", DspMeta21,
- 0x08000100, 0xfe000104, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_ACC2 },
- { "ADDS", DspMeta21,
- 0x0a000003, 0xfe000003, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_IMM },
- { "ADDS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x08000000, 0xfe0001fc, INSN_GP, ENC_ALU, 0 },
- { "ADD", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x02000000, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "ADDS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x0a000000, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "ADDT", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x02000001, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "ADDST", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x0a000001, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "ADD", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x06000020, 0xfe000021, INSN_GP, ENC_ALU, 0 },
- COND_INSN ("ADDS", "", 1, DspMeta21,
- 0x0c0001e0, 0xfe0001fe, INSN_DSP, ENC_DALU, DSP_ARGS_1),
- { "ADDS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x0e000020, 0xfe000021, INSN_GP, ENC_ALU, 0 },
- COND_INSN ("ADD", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x04000000, 0xfe00001e, INSN_GP, ENC_ALU, 0),
- COND_INSN ("ADDS", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x0c000000, 0xfe00001e, INSN_GP, ENC_ALU, 0),
- COND_INSN ("ADD", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x06000000, 0xfe00003f, INSN_GP, ENC_ALU, 0),
- COND_INSN ("ADDS", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x0e000000, 0xfe00003f, INSN_GP, ENC_ALU, 0),
- { "NEG", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x10000004, 0xfe0001fc, INSN_GP, ENC_ALU, 0 },
- { "NEGS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x18000004, 0xfe0001fc, INSN_GP, ENC_ALU, 0 },
- { "NEG", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x12000004, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "NEGS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x1a000004, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "NEGT", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x12000005, 0xfe000007, INSN_GP, ENC_ALU, 0 },
- { "NEGST", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x1a000005, 0xfe000007, INSN_GP, ENC_ALU, 0 },
- { "SUB", DspMeta21,
- 0x10000100, 0xfe000104, INSN_DSP, ENC_DALU,
- DSP_ARGS_1|DSP_ARGS_ACC2|DSP_ARGS_XACC },
- { "SUB", DspMeta21,
- 0x12000003, 0xfe000003, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_IMM },
- { "SUB", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x10000000, 0xfe0001fc, INSN_GP, ENC_ALU, 0 },
- { "SUBS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x18000000, 0xfe0001fc, INSN_GP, ENC_ALU, 0 },
- { "SUB", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x12000000, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "SUBS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x1a000000, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "SUBT", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x12000001, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "SUBS", DspMeta21,
- 0x18000100, 0xfe000104, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_ACC2 },
- { "SUBS", DspMeta21,
- 0x1a000003, 0xfe000003, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_IMM },
- { "SUBST", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x1a000001, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "SUB", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x16000020, 0xfe000021, INSN_GP, ENC_ALU, 0 },
- { "SUBS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x1e000020, 0xfe000021, INSN_GP, ENC_ALU, 0 },
- COND_INSN ("SUBS", "", 1, DspMeta21,
- 0x1c0001e0, 0xfe0001fe, INSN_DSP, ENC_DALU, DSP_ARGS_1),
- COND_INSN ("SUB", "", 1, DspMeta21,
- 0x140001e0, 0xfe0001fe, INSN_DSP, ENC_DALU, DSP_ARGS_1),
- COND_INSN ("SUB", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x14000000, 0xfe00001e, INSN_GP, ENC_ALU, 0),
- COND_INSN ("SUBS", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x1c000000, 0xfe00001e, INSN_GP, ENC_ALU, 0),
- COND_INSN ("SUB", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x16000000, 0xfe00003f, INSN_GP, ENC_ALU, 0),
- COND_INSN ("SUBS", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x1e000000, 0xfe00003f, INSN_GP, ENC_ALU, 0),
- { "AND", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x20000000, 0xfe0001fe, INSN_GP, ENC_ALU, 0 },
- { "ANDS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x28000000, 0xfe0001fe, INSN_GP, ENC_ALU, 0 },
- { "ANDQ", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x20000040, 0xfe00017e, INSN_GP, ENC_ALU, GP_ARGS_QR },
- { "ANDSQ", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x28000040, 0xfe00017e, INSN_GP, ENC_ALU, GP_ARGS_QR },
- { "AND", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x22000000, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "ANDMB", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x22000004, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "ANDS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x2a000000, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "ANDSMB", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x2a000004, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "ANDT", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x22000001, 0xfe000007, INSN_GP, ENC_ALU, 0 },
- { "ANDMT", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x22000005, 0xfe000007, INSN_GP, ENC_ALU, 0 },
- { "ANDST", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x2a000001, 0xfe000007, INSN_GP, ENC_ALU, 0 },
- { "ANDSMT", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x2a000005, 0xfe000007, INSN_GP, ENC_ALU, 0 },
- { "AND", DspMeta21,
- 0x20000100, 0xfe00014c, INSN_DSP, ENC_DALU, DSP_ARGS_1 },
- { "AND", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x26000020, 0xfe000021, INSN_GP, ENC_ALU, 0 },
- { "ANDS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x2e000020, 0xfe000021, INSN_GP, ENC_ALU, 0 },
- { "ANDQ", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x26000021, 0xfe000021, INSN_GP, ENC_ALU, GP_ARGS_QR },
- { "ANDSQ", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x2e000021, 0xfe000021, INSN_GP, ENC_ALU, GP_ARGS_QR },
- { "ANDQ", DspMeta21,
- 0x20000140, 0xfe00014c, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_QR },
- COND_INSN ("ANDQ", "", 1, DspMeta21,
- 0x240001c0, 0xfe0001de, INSN_DSP, ENC_DALU,
- DSP_ARGS_1|DSP_ARGS_QR),
- COND_INSN ("AND", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x24000000, 0xfe00001e, INSN_GP, ENC_ALU, 0),
- { "ANDSQ", DspMeta21,
- 0x28000140, 0xfe00014c, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_QR },
- COND_INSN ("ANDSQ", "", 1, DspMeta21,
- 0x2c0001c0, 0xfe0001de, INSN_DSP, ENC_DALU,
- DSP_ARGS_1|DSP_ARGS_QR),
- COND_INSN ("ANDS", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x2c000000, 0xfe00001e, INSN_GP, ENC_ALU, 0),
- COND_INSN ("AND", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x26000000, 0xfe00003f, INSN_GP, ENC_ALU, 0),
- COND_INSN ("ANDS", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x2e000000, 0xfe00003f, INSN_GP, ENC_ALU, 0),
- COND_INSN ("ANDQ", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x26000001, 0xfe00003f, INSN_GP, ENC_ALU, GP_ARGS_QR),
- COND_INSN ("ANDSQ", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x2e000001, 0xfe00003f, INSN_GP, ENC_ALU, GP_ARGS_QR),
- { "OR", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x30000000, 0xfe0001fe, INSN_GP, ENC_ALU, 0 },
- { "ORS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x38000000, 0xfe0001fe, INSN_GP, ENC_ALU, 0 },
- { "ORQ", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x30000040, 0xfe00017e, INSN_GP, ENC_ALU, GP_ARGS_QR },
- { "ORSQ", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x38000040, 0xfe00017e, INSN_GP, ENC_ALU, GP_ARGS_QR },
- { "OR", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x32000000, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "ORMB", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x32000004, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "ORS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x3a000000, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "ORSMB", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x3a000004, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "ORT", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x32000001, 0xfe000007, INSN_GP, ENC_ALU, 0 },
- { "ORMT", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x32000005, 0xfe000007, INSN_GP, ENC_ALU, 0 },
- { "ORST", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x3a000001, 0xfe000007, INSN_GP, ENC_ALU, 0 },
- { "ORSMT", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x3a000005, 0xfe000007, INSN_GP, ENC_ALU, 0 },
- { "OR", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x36000020, 0xfe000021, INSN_GP, ENC_ALU, 0 },
- { "ORS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x3e000020, 0xfe000021, INSN_GP, ENC_ALU, 0 },
- { "ORQ", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x36000021, 0xfe000021, INSN_GP, ENC_ALU, GP_ARGS_QR },
- { "ORSQ", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x3e000021, 0xfe000021, INSN_GP, ENC_ALU, GP_ARGS_QR },
- { "ORQ", DspMeta21,
- 0x30000140, 0xfe00014c, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_QR },
- COND_INSN ("ORQ", "", 1, DspMeta21,
- 0x340001c0, 0xfe0001de, INSN_DSP, ENC_DALU,
- DSP_ARGS_1|DSP_ARGS_QR),
- COND_INSN ("OR", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x34000000, 0xfe00001e, INSN_GP, ENC_ALU, 0),
- { "ORSQ", DspMeta21,
- 0x38000140, 0xfe00014c, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_QR },
- COND_INSN ("ORSQ", "", 1, DspMeta21,
- 0x3c0001c0, 0xfe0001de, INSN_DSP, ENC_DALU,
- DSP_ARGS_1|DSP_ARGS_QR),
- COND_INSN ("ORS", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x3c000000, 0xfe00001e, INSN_GP, ENC_ALU, 0),
- COND_INSN ("OR", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x36000000, 0xfe00003f, INSN_GP, ENC_ALU, 0),
- COND_INSN ("ORS", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x3e000000, 0xfe00003f, INSN_GP, ENC_ALU, 0),
- COND_INSN ("ORQ", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x36000001, 0xfe00003f, INSN_GP, ENC_ALU, GP_ARGS_QR),
- COND_INSN ("ORSQ", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x3e000001, 0xfe00003f, INSN_GP, ENC_ALU, GP_ARGS_QR),
- { "XOR", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x40000000, 0xfe0001fe, INSN_GP, ENC_ALU, 0 },
- { "XORS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x48000000, 0xfe0001fe, INSN_GP, ENC_ALU, 0 },
- { "XORQ", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x40000040, 0xfe00017e, INSN_GP, ENC_ALU, GP_ARGS_QR },
- { "XORSQ", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x48000040, 0xfe00017e, INSN_GP, ENC_ALU, GP_ARGS_QR },
- { "XOR", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x42000000, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "XORMB", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x42000004, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "XORS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x4a000000, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "XORSMB", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x4a000004, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "XORT", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x42000001, 0xfe000007, INSN_GP, ENC_ALU, 0 },
- { "XORMT", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x42000005, 0xfe000007, INSN_GP, ENC_ALU, 0 },
- { "XORST", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x4a000001, 0xfe000007, INSN_GP, ENC_ALU, 0 },
- { "XORSMT", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x4a000005, 0xfe000007, INSN_GP, ENC_ALU, 0 },
- { "XOR", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x46000020, 0xfe000021, INSN_GP, ENC_ALU, 0 },
- { "XORS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x4e000020, 0xfe000021, INSN_GP, ENC_ALU, 0 },
- { "XORQ", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x46000021, 0xfe000021, INSN_GP, ENC_ALU, GP_ARGS_QR },
- { "XORSQ", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x4e000021, 0xfe000021, INSN_GP, ENC_ALU, GP_ARGS_QR },
- { "XORQ", DspMeta21,
- 0x40000140, 0xfe00014c, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_QR },
- COND_INSN ("XORQ", "", 1, DspMeta21,
- 0x440001c0, 0xfe0001de, INSN_DSP, ENC_DALU,
- DSP_ARGS_1|DSP_ARGS_QR),
- COND_INSN ("XOR", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x44000000, 0xfe00001e, INSN_GP, ENC_ALU, 0),
- { "XORSQ", DspMeta21,
- 0x48000140, 0xfe000140, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_QR },
- COND_INSN ("XORSQ", "", 1, DspMeta21,
- 0x4c0001c0, 0xfe0001de, INSN_DSP, ENC_DALU,
- DSP_ARGS_1|DSP_ARGS_QR),
- COND_INSN ("XORS", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x4c000000, 0xfe00001e, INSN_GP, ENC_ALU, 0),
- COND_INSN ("XOR", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x46000000, 0xfe00003f, INSN_GP, ENC_ALU, 0),
- COND_INSN ("XORS", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x4e000000, 0xfe00003f, INSN_GP, ENC_ALU, 0),
- COND_INSN ("XORQ", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x46000001, 0xfe00003f, INSN_GP, ENC_ALU, GP_ARGS_QR),
- COND_INSN ("XORSQ", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x4e000001, 0xfe00003f, INSN_GP, ENC_ALU, GP_ARGS_QR),
- { "LSL", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x50000000, 0xfc0001ff, INSN_GP, ENC_SHIFT, 0 },
- { "LSL", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x54000020, 0xfc0001e0, INSN_GP, ENC_SHIFT, 0 },
- COND_INSN ("LSL", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x54000000, 0xfc0001ff, INSN_GP, ENC_SHIFT, 0),
- { "LSLS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x58000000, 0xfc0001ff, INSN_GP, ENC_SHIFT, 0 },
- { "LSLS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x5c000020, 0xfc0001e0, INSN_GP, ENC_SHIFT, 0 },
- COND_INSN ("LSLS", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x5c000000, 0xfc0001ff, INSN_GP, ENC_SHIFT, 0),
- { "LSR", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x50000040, 0xfc0001ff, INSN_GP, ENC_SHIFT, 0 },
- { "LSR", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x54000060, 0xfc0001e0, INSN_GP, ENC_SHIFT, 0 },
- COND_INSN ("LSR", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x54000040, 0xfc0001ff, INSN_GP, ENC_SHIFT, 0),
- { "LSRS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x58000040, 0xfc0001ff, INSN_GP, ENC_SHIFT, 0 },
- { "LSRS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x5c000060, 0xfc0001e0, INSN_GP, ENC_SHIFT, 0 },
- COND_INSN ("LSRS", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x5c000040, 0xfc0001ff, INSN_GP, ENC_SHIFT, 0),
- { "ASL", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x50000080, 0xfc0001ff, INSN_GP, ENC_SHIFT, 0 },
- { "ASL", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x540000a0, 0xfc0001e0, INSN_GP, ENC_SHIFT, 0 },
- COND_INSN ("ASL", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x54000080, 0xfc0001ff, INSN_GP, ENC_SHIFT, 0),
- { "ASLS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x58000080, 0xfc0001ff, INSN_GP, ENC_SHIFT, 0 },
- { "ASLS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x5c0000a0, 0xfc0001e0, INSN_GP, ENC_SHIFT, 0 },
- COND_INSN ("ASLS", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x5c000080, 0xfc0001ff, INSN_GP, ENC_SHIFT, 0),
- { "ASR", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x500000c0, 0xfc0001ff, INSN_GP, ENC_SHIFT, 0 },
- { "ASR", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x540000e0, 0xfc0001e0, INSN_GP, ENC_SHIFT, 0 },
- COND_INSN ("ASR", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x540000c0, 0xfc0001ff, INSN_GP, ENC_SHIFT, 0),
- { "ASRS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x580000c0, 0xfc0001ff, INSN_GP, ENC_SHIFT, 0 },
- { "ASRS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x5c0000e0, 0xfc0001e0, INSN_GP, ENC_SHIFT, 0 },
- COND_INSN ("ASRS", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x5c0000c0, 0xfc0001ff, INSN_GP, ENC_SHIFT, 0),
- { "MULW", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x60000000, 0xfe0001fe, INSN_GP, ENC_ALU, 0 },
- { "MULD", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x60000040, 0xfe0001fe, INSN_GP, ENC_ALU, 0 },
- /* MUL is a synonym from MULD. */
- { "MUL", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x60000040, 0xfe0001fe, INSN_GP, ENC_ALU, 0 },
- { "MULW", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x62000000, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "MULD", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x62000004, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "MUL", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x62000004, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "MULWT", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x62000001, 0xfe000007, INSN_GP, ENC_ALU, 0 },
- { "MULDT", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x62000005, 0xfe000007, INSN_GP, ENC_ALU, 0 },
- { "MULT", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x62000005, 0xfe000007, INSN_GP, ENC_ALU, 0 },
- { "MULW", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x64000020, 0xfe0001e0, INSN_GP, ENC_ALU, 0 },
- { "MULD", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x64000060, 0xfe0001e0, INSN_GP, ENC_ALU, 0 },
- { "MUL", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x64000060, 0xfe0001e0, INSN_GP, ENC_ALU, 0 },
- { "MULW", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x66000020, 0xfe000021, INSN_GP, ENC_ALU, 0 },
- { "MULD", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x66000021, 0xfe000021, INSN_GP, ENC_ALU, 0 },
- { "MUL", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x66000021, 0xfe000021, INSN_GP, ENC_ALU, 0 },
- COND_INSN ("MULW", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x64000000, 0xfe0001fe, INSN_GP, ENC_ALU, 0),
- COND_INSN ("MULD", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x64000040, 0xfe0001fe, INSN_GP, ENC_ALU, 0),
- COND_INSN ("MUL", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x64000040, 0xfe0001fe, INSN_GP, ENC_ALU, 0),
- COND_INSN ("MULW", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x66000000, 0xfe00003f, INSN_GP, ENC_ALU, 0),
- COND_INSN ("MULD", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x66000001, 0xfe00003f, INSN_GP, ENC_ALU, 0),
- COND_INSN ("MUL", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x66000001, 0xfe00003f, INSN_GP, ENC_ALU, 0),
- { "MIN", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x70000020, 0xfe0001ff, INSN_GP, ENC_MIN_MAX, 0 },
- { "MAX", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x70000024, 0xfe0001ff, INSN_GP, ENC_MIN_MAX, 0 },
- { "FFB", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x70000004, 0xfe003fff, INSN_GP, ENC_BITOP, 0 },
- { "NORM", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x70000008, 0xfe003fff, INSN_GP, ENC_BITOP, 0 },
- { "ABS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x70000028, 0xfe003fff, INSN_GP, ENC_BITOP, 0 },
- { "XSDB", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xaa000000, 0xff003ffe, INSN_GP, ENC_BITOP, 0 },
- { "XSDSB", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xaa000008, 0xff003ffe, INSN_GP, ENC_BITOP, 0 },
- { "XSDW", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xaa000002, 0xff003ffe, INSN_GP, ENC_BITOP, 0 },
- { "XSDSW", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xaa00000a, 0xff003ffe, INSN_GP, ENC_BITOP, 0 },
- { "RTDW", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xaa000006, 0xff003ffe, INSN_GP, ENC_BITOP, 0 },
- { "RTDSW", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xaa00000e, 0xff003ffe, INSN_GP, ENC_BITOP, 0 },
- { "NMIN", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x7000002c, 0xfe0001ff, INSN_GP, ENC_MIN_MAX, 0 },
-
- /* Condition setting operations */
- { "CMP", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x70000000, 0xfef801fe, INSN_GP, ENC_CMP, 0 },
- { "TST", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x78000000, 0xfef801fe, INSN_GP, ENC_CMP, 0 },
- { "CMP", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x72000000, 0xfe000005, INSN_GP, ENC_CMP, 0 },
- { "CMPMB", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x72000004, 0xfe000005, INSN_GP, ENC_CMP, 0 },
- { "TST", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x7a000000, 0xfe000005, INSN_GP, ENC_CMP, 0 },
- { "TSTMB", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x7a000004, 0xfe000005, INSN_GP, ENC_CMP, 0 },
- { "CMPT", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x72000001, 0xfe000007, INSN_GP, ENC_CMP, 0 },
- { "CMPMT", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x72000005, 0xfe000007, INSN_GP, ENC_CMP, 0 },
- { "TSTT", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x7a000001, 0xfe000007, INSN_GP, ENC_CMP, 0 },
- { "TSTMT", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x7a000005, 0xfe000007, INSN_GP, ENC_CMP, 0 },
- COND_INSN ("CMP", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x74000000, 0xfef801fe, INSN_GP, ENC_CMP, 0),
- COND_INSN ("TST", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x7c000000, 0xfef801fe, INSN_GP, ENC_CMP, 0),
- COND_INSN ("CMP", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x76000000, 0xfef8003e, INSN_GP, ENC_CMP, 0),
- COND_INSN ("TST", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x7e000000, 0xfef8003e, INSN_GP, ENC_CMP, 0),
-
- /* No-op (BNV) */
- { "NOP", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa0fffffe, 0xffffffff, INSN_GP, ENC_NONE, 0 },
-
- /* Branch */
- COND_INSN ("B", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa0000000, 0xff00001f, INSN_GP, ENC_BRANCH, 0),
- COND_INSN ("B", "R", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa0000001, 0xff00001f, INSN_GP, ENC_BRANCH, 0),
-
- /* System operations */
- { "LOCK0", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa8000000, 0xffffffff, INSN_GP, ENC_NONE, 0 },
- { "LOCK1", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa8000001, 0xffffffff, INSN_GP, ENC_NONE, 0 },
- { "LOCK2", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa8000003, 0xffffffff, INSN_GP, ENC_NONE, 0 },
- { "RTI", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa3ffffff, 0xffffffff, INSN_GP, ENC_NONE, 0 },
- { "RTH", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa37fffff, 0xffffffff, INSN_GP, ENC_NONE, 0 },
- COND_INSN ("KICK", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa3000001, 0xff003e1f, INSN_GP, ENC_KICK, 0),
- { "SWITCH", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xaf000000, 0xff000000, INSN_GP, ENC_SWITCH, 0 },
- { "DCACHE", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xad000000, 0xff000087, INSN_GP, ENC_CACHEW, 0 },
- { "ICACHEEXIT", CoreMeta12|CoreMeta21,
- 0xae000000, 0xffffffff, INSN_GP, ENC_NONE, 0 },
- { "ICACHEEXITR", CoreMeta12|CoreMeta21,
- 0xae000001, 0xffffffff, INSN_GP, ENC_NONE, 0 },
- { "ICACHE", CoreMeta12|CoreMeta21,
- 0xae000000, 0xff0001e1, INSN_GP, ENC_ICACHE, 0 },
- { "ICACHER", CoreMeta12|CoreMeta21,
- 0xae000001, 0xff0001e1, INSN_GP, ENC_ICACHE, 0 },
-
- /* Meta 2 instructions */
- { "CACHERD", CoreMeta21,
- 0xad000081, 0xff000087, INSN_GP, ENC_CACHER, 0 },
- { "CACHERL", CoreMeta21,
- 0xad000083, 0xff000087, INSN_GP, ENC_CACHER, 0 },
- { "CACHEWD", CoreMeta21,
- 0xad000001, 0xff000087, INSN_GP, ENC_CACHEW, 0 },
- { "CACHEWL", CoreMeta21,
- 0xad000003, 0xff000087, INSN_GP, ENC_CACHEW, 0 },
- COND_INSN ("DEFR", "", 1, CoreMeta21,
- 0xa3002001, 0xff003e1f, INSN_GP, ENC_KICK, 0),
- { "BEXD", CoreMeta21,
- 0xaa000004, 0xff003ffe, INSN_GP, ENC_BITOP, 0 },
- { "BEXSD", CoreMeta21,
- 0xaa00000c, 0xff003ffe, INSN_GP, ENC_BITOP, 0 },
- { "BEXL", CoreMeta21,
- 0xaa000014, 0xff003ffe, INSN_GP, ENC_BITOP, 0 },
- { "BEXSL", CoreMeta21,
- 0xaa00001c, 0xff003ffe, INSN_GP, ENC_BITOP, 0 },
- { "LNKGETB", CoreMeta21,
- 0xad000080, 0xff000087, INSN_GP, ENC_LNKGET, 0 },
- { "LNKGETW", CoreMeta21,
- 0xad000082, 0xff000087, INSN_GP, ENC_LNKGET, 0 },
- { "LNKGETD", CoreMeta21,
- 0xad000084, 0xff000087, INSN_GP, ENC_LNKGET, 0 },
- { "LNKGETL", CoreMeta21,
- 0xad000086, 0xff000087, INSN_GP, ENC_LNKGET, 0 },
- COND_INSN ("LNKSETB", "", 1, CoreMeta21,
- 0xa4000080, 0xff00039f, INSN_GP, ENC_COND_SET, 0),
- COND_INSN ("LNKSETW", "", 1, CoreMeta21,
- 0xa4000081, 0xff00039f, INSN_GP, ENC_COND_SET, 0),
- COND_INSN ("LNKSETD", "", 1, CoreMeta21,
- 0xa4000280, 0xff00039f, INSN_GP, ENC_COND_SET, 0),
- COND_INSN ("LNKSETL", "", 1, CoreMeta21,
- 0xa4000281, 0xff00039f, INSN_GP, ENC_COND_SET, 0),
-
- /* Meta 2 FPU instructions */
-
- /* Port-to-unit MOV */
- COND_INSN ("MOVL", "", 1, FpuMeta21,
- 0xa1800201, 0xfff83e1f, INSN_FPU, ENC_MOV_PORT, 0),
-
- /* Read pipeline drain */
- { "MMOVD", FpuMeta21,
- 0xce000006, 0xfffc007f, INSN_FPU, ENC_MMOV, 0 },
- { "MMOVL", FpuMeta21,
- 0xcf000006, 0xfffc007f, INSN_FPU, ENC_MMOV, 0 },
-
- /* FP data movement instructions */
- FCOND_INSN ("ABS", "", 1, FpuMeta21,
- 0xf0000080, 0xff843f9f, INSN_FPU, ENC_FMOV, 0),
- { "MMOVD", FpuMeta21,
- 0xbe000002, 0xff84007e, INSN_FPU, ENC_FMMOV, 0 },
- { "MMOVL", FpuMeta21,
- 0xbf000002, 0xff84007e, INSN_FPU, ENC_FMMOV, 0 },
- { "MMOVD", FpuMeta21,
- 0xce000002, 0xff84007e, INSN_FPU, ENC_FMMOV, 0 },
- { "MMOVL", FpuMeta21,
- 0xcf000002, 0xff84007e, INSN_FPU, ENC_FMMOV, 0 },
- { "MOVD", FpuMeta21,
- 0x08000144, 0xfe03e1ff, INSN_FPU, ENC_FMOV_DATA, 0 },
- { "MOVD", FpuMeta21,
- 0x080001c4, 0xfe83c1ff, INSN_FPU, ENC_FMOV_DATA, 0 },
- { "MOVL", FpuMeta21,
- 0x08000154, 0xfe03e1ff, INSN_FPU, ENC_FMOV_DATA, 0 },
- { "MOVL", FpuMeta21,
- 0x080001d4, 0xfe83c1ff, INSN_FPU, ENC_FMOV_DATA, 0 },
- FCOND_INSN ("MOV", "", 1, FpuMeta21,
- 0xf0000000, 0xff843f9f, INSN_FPU, ENC_FMOV, 0),
- { "MOV", FpuMeta21,
- 0xf0000001, 0xff800001, INSN_FPU, ENC_FMOV_I, 0 },
- FCOND_INSN ("NEG", "", 1, FpuMeta21,
- 0xf0000100, 0xff843f9f, INSN_FPU, ENC_FMOV, 0),
- { "PACK", FpuMeta21,
- 0xf0000180, 0xff8c21ff, INSN_FPU, ENC_FPACK, 0 },
- { "SWAP", FpuMeta21,
- 0xf00001c0, 0xff8c7fff, INSN_FPU, ENC_FSWAP, 0 },
-
- /* FP comparison instructions */
- FCOND_INSN ("CMP", "", 1, FpuMeta21,
- 0xf3000000, 0xfff4201f, INSN_FPU, ENC_FCMP, 0),
- FCOND_INSN ("MAX", "", 1, FpuMeta21,
- 0xf3000081, 0xff84219f, INSN_FPU, ENC_FMINMAX, 0),
- FCOND_INSN ("MIN", "", 1, FpuMeta21,
- 0xf3000001, 0xff84219f, INSN_FPU, ENC_FMINMAX, 0),
-
- /* FP data conversion instructions */
- FCOND_INSN ("DTOF", "", 1, FpuMeta21,
- 0xf2000121, 0xff843fff, INSN_FPU, ENC_FCONV, 0),
- FCOND_INSN ("FTOD", "", 1, FpuMeta21,
- 0xf2000101, 0xff843fff, INSN_FPU, ENC_FCONV, 0),
- FCOND_INSN ("DTOH", "", 1, FpuMeta21,
- 0xf2000320, 0xff843fff, INSN_FPU, ENC_FCONV, 0),
- FCOND_INSN ("FTOH", "", 1, FpuMeta21,
- 0xf2000300, 0xff843fbf, INSN_FPU, ENC_FCONV, 0),
- FCOND_INSN ("DTOI", "", 1, FpuMeta21,
- 0xf2002120, 0xff842fff, INSN_FPU, ENC_FCONV, 0),
- FCOND_INSN ("FTOI", "", 1, FpuMeta21,
- 0xf2002100, 0xff842fbf, INSN_FPU, ENC_FCONV, 0),
- FCOND_INSN ("DTOL", "", 1, FpuMeta21,
- 0xf2002320, 0xff8c6fff, INSN_FPU, ENC_FCONV, 0),
-
- FCOND_INSN ("DTOX", "", 1, FpuMeta21,
- 0xf2000020, 0xff8401bf, INSN_FPU, ENC_FCONVX, 0),
- FCOND_INSN ("FTOX", "", 1, FpuMeta21,
- 0xf2000000, 0xff8401bf, INSN_FPU, ENC_FCONVX, 0),
- FCOND_INSN ("DTOXL", "", 1, FpuMeta21,
- 0xf20000a0, 0xff8c40ff, INSN_FPU, ENC_FCONVX, 0),
-
- FCOND_INSN ("HTOD", "", 1, FpuMeta21,
- 0xf2000321, 0xff843fff, INSN_FPU, ENC_FCONV, 0),
- FCOND_INSN ("HTOF", "", 1, FpuMeta21,
- 0xf2000301, 0xff843fbf, INSN_FPU, ENC_FCONV, 0),
- FCOND_INSN ("ITOD", "", 1, FpuMeta21,
- 0xf2002121, 0xff843fff, INSN_FPU, ENC_FCONV, 0),
- FCOND_INSN ("ITOF", "", 1, FpuMeta21,
- 0xf2002101, 0xff843fbf, INSN_FPU, ENC_FCONV, 0),
- FCOND_INSN ("LTOD", "", 1, FpuMeta21,
- 0xf2002321, 0xff8c7fff, INSN_FPU, ENC_FCONV, 0),
-
- FCOND_INSN ("XTOD", "", 1, FpuMeta21,
- 0xf2000021, 0xff8401bf, INSN_FPU, ENC_FCONVX, 0),
- FCOND_INSN ("XTOF", "", 1, FpuMeta21,
- 0xf2000001, 0xff8401bf, INSN_FPU, ENC_FCONVX, 0),
- FCOND_INSN ("XLTOD", "", 1, FpuMeta21,
- 0xf20000a1, 0xff8c40ff, INSN_FPU, ENC_FCONVX, 0),
-
- /* FP basic arithmetic instructions */
- FCOND_INSN ("ADD", "", 1, FpuMeta21,
- 0xf1000001, 0xff84211f, INSN_FPU, ENC_FBARITH, 0),
- FCOND_INSN ("MUL", "", 1, FpuMeta21,
- 0xf1000100, 0xff84211f, INSN_FPU, ENC_FBARITH, 0),
- FCOND_INSN ("SUB", "", 1, FpuMeta21,
- 0xf1000101, 0xff84211f, INSN_FPU, ENC_FBARITH, 0),
-
- /* FP extended arithmetic instructions */
- { "MAC", FpuMeta21,
- 0xf6000000, 0xfffc219f, INSN_FPU, ENC_FEARITH, 0 },
- { "MACS", FpuMeta21,
- 0xf6000100, 0xfffc219f, INSN_FPU, ENC_FEARITH, 0 },
-
- { "MAR", FpuMeta21,
- 0xf6000004, 0xff84211f, INSN_FPU, ENC_FEARITH, 0 },
- { "MARS", FpuMeta21,
- 0xf6000104, 0xff84211f, INSN_FPU, ENC_FEARITH, 0 },
-
- { "MAW", FpuMeta21,
- 0xf6000008, 0xff84219f, INSN_FPU, ENC_FEARITH, 0 },
- { "MAWS", FpuMeta21,
- 0xf6000108, 0xff84219f, INSN_FPU, ENC_FEARITH, 0 },
- { "MAW1", FpuMeta21,
- 0xf6000009, 0xff84219f, INSN_FPU, ENC_FEARITH, 0 },
- { "MAWS1", FpuMeta21,
- 0xf6000109, 0xff84219f, INSN_FPU, ENC_FEARITH, 0 },
-
- FCOND_INSN ("MXA", "", 1, FpuMeta21,
- 0xf5000000, 0xff84211f, INSN_FPU, ENC_FEARITH, 0),
- FCOND_INSN ("MXAS", "", 1, FpuMeta21,
- 0xf5000100, 0xff84211f, INSN_FPU, ENC_FEARITH, 0),
- FCOND_INSN ("MXA1", "", 1, FpuMeta21,
- 0xf5000001, 0xff84211f, INSN_FPU, ENC_FEARITH, 0),
- FCOND_INSN ("MXAS1", "", 1, FpuMeta21,
- 0xf5000101, 0xff84211f, INSN_FPU, ENC_FEARITH, 0),
-
- { "MUZ", FpuMeta21,
- 0xf6000010, 0xff84211d, INSN_FPU, ENC_FEARITH, 0 },
- { "MUZS", FpuMeta21,
- 0xf6000110, 0xff84211d, INSN_FPU, ENC_FEARITH, 0 },
- { "MUZ1", FpuMeta21,
- 0xf6000011, 0xff84211d, INSN_FPU, ENC_FEARITH, 0 },
- { "MUZS1", FpuMeta21,
- 0xf6000111, 0xff84211d, INSN_FPU, ENC_FEARITH, 0 },
-
- { "RCP", FpuMeta21,
- 0xf7000000, 0xff84391f, INSN_FPU, ENC_FREC, 0 },
- { "RSQ", FpuMeta21,
- 0xf7000100, 0xff84391f, INSN_FPU, ENC_FREC, 0 },
-
- /* FP SIMD arithmetic instructions */
- { "ADDRE", FpuMeta21,
- 0xf4000000, 0xff8c637f, INSN_FPU, ENC_FSIMD, 0 },
- { "MULRE", FpuMeta21,
- 0xf4000001, 0xff8c637f, INSN_FPU, ENC_FSIMD, 0 },
- { "SUBRE", FpuMeta21,
- 0xf4000100, 0xff8c637f, INSN_FPU, ENC_FSIMD, 0 },
-
- /* FP memory instructions */
- { "MGETD", FpuMeta21,
- 0xce000000, 0xff00001f, INSN_FPU, ENC_MGET_MSET, 0 },
- { "MGET", FpuMeta21,
- 0xce000000, 0xff00001f, INSN_FPU, ENC_MGET_MSET, 0 },
- { "MGETL", FpuMeta21,
- 0xcf000000, 0xff00001f, INSN_FPU, ENC_MGET_MSET, 0 },
-
- { "MSETD", FpuMeta21,
- 0xbe000000, 0xff00001f, INSN_FPU, ENC_MGET_MSET, 0 },
- { "MSET", FpuMeta21,
- 0xbe000000, 0xff00001f, INSN_FPU, ENC_MGET_MSET, 0 },
- { "MSETL", FpuMeta21,
- 0xbf000000, 0xff00001f, INSN_FPU, ENC_MGET_MSET, 0 },
-
- /* FP accumulator memory instructions */
- { "GETL", FpuMeta21,
- 0xcf000004, 0xffe03f9f, INSN_FPU, ENC_FGET_SET_ACF, 0 },
- { "SETL", FpuMeta21,
- 0xbf000004, 0xffe03f9f, INSN_FPU, ENC_FGET_SET_ACF, 0 },
-
- /* DSP FPU data movement */
- { "MOV", DspMeta21|FpuMeta21,
- 0x08000146, 0xfe0001ee, INSN_DSP_FPU, ENC_DALU,
- DSP_ARGS_2|DSP_ARGS_DSP_SRC1 },
- { "MOV", DspMeta21|FpuMeta21,
- 0x080001c6, 0xfe0001ee, INSN_DSP_FPU, ENC_DALU,
- DSP_ARGS_2|DSP_ARGS_DSP_SRC2 },
-
- /* Unit-to-unit MOV */
- COND_INSN ("MOV", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa3000000, 0xff00021f, INSN_GP, ENC_MOV_U2U, 0),
- COND_INSN ("TTMOV", "", 1, CoreMeta12|CoreMeta21,
- 0xa3000201, 0xff00021f, INSN_GP, ENC_MOV_U2U, 0),
- COND_INSN ("SWAP", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa3000200, 0xff00021f, INSN_GP, ENC_SWAP, 0),
-
- /* DSP memory instructions */
- { "GETD", DspMeta21,
- 0x94000100, 0xff0001fc, INSN_DSP, ENC_DGET_SET, 0 },
- { "SETD", DspMeta21,
- 0x94000000, 0xff0001fc, INSN_DSP, ENC_DGET_SET, 0 },
- { "GETL", DspMeta21,
- 0x94000104, 0xff0001fc, INSN_DSP, ENC_DGET_SET, 0 },
- { "SETL", DspMeta21,
- 0x94000004, 0xff0001fc, INSN_DSP, ENC_DGET_SET, 0 },
-
- /* DSP read pipeline prime/drain */
- { "MMOVD", DspMeta21,
- 0xca000001, 0xff00001f, INSN_DSP, ENC_MMOV, 0 },
- { "MMOVL", DspMeta21,
- 0xcb000001, 0xff00001f, INSN_DSP, ENC_MMOV, 0 },
- { "MMOVD", DspMeta21,
- 0xcc000001, 0xff07c067, INSN_DSP, ENC_MMOV, 0 },
- { "MMOVL", DspMeta21,
- 0xcd000001, 0xff07c067, INSN_DSP, ENC_MMOV, 0 },
-
- /* DSP Template instantiation */
- TEMPLATE_INSN (DspMeta21, 0x90000000, 0xff00000f, INSN_DSP),
- TEMPLATE_INSN (DspMeta21, 0x93000000, 0xff0001ff, INSN_DSP),
- TEMPLATE_INSN (DspMeta21, 0x95000000, 0xff00000f, INSN_DSP),
-
- { "AND", DspMeta21,
- 0x22000003, 0xfe000003, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_IMM },
- { "ANDS", DspMeta21,
- 0x28000100, 0xfe00014c, INSN_DSP, ENC_DALU, DSP_ARGS_1 },
- { "ANDS", DspMeta21,
- 0x2a000003, 0xfe000003, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_IMM },
- { "MAX", DspMeta21,
- 0x70000124, 0xfe0001ec, INSN_DSP, ENC_DALU, DSP_ARGS_1 },
- { "MIN", DspMeta21,
- 0x70000120, 0xfe0001ec, INSN_DSP, ENC_DALU, DSP_ARGS_1 },
- { "NMIN", DspMeta21,
- 0x7000012c, 0xfe0001ec, INSN_DSP, ENC_DALU, DSP_ARGS_1 },
- { "OR", DspMeta21,
- 0x30000100, 0xfe00014c, INSN_DSP, ENC_DALU, DSP_ARGS_1 },
- { "OR", DspMeta21,
- 0x32000003, 0xfe000003, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_IMM },
- { "ORS", DspMeta21,
- 0x38000100, 0xfe00014c, INSN_DSP, ENC_DALU, DSP_ARGS_1 },
- { "ORS", DspMeta21,
- 0x3a000003, 0xfe000003, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_IMM },
- { "XOR", DspMeta21,
- 0x40000100, 0xfe00014c, INSN_DSP, ENC_DALU, DSP_ARGS_1 },
- { "XOR", DspMeta21,
- 0x42000003, 0xfe000003, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_IMM },
- { "XORS", DspMeta21,
- 0x48000100, 0xfe00014c, INSN_DSP, ENC_DALU, DSP_ARGS_1 },
- { "XORS", DspMeta21,
- 0x4a000003, 0xfe000003, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_IMM },
- { "ADDB8", DspMeta21,
- 0x20000108, 0xfe00010c, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_SPLIT8 },
- { "ADDT8", DspMeta21,
- 0x2000010c, 0xfe00010c, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_SPLIT8 },
- { "ADDSB8", DspMeta21,
- 0x28000108, 0xfe00014c, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_SPLIT8 },
- { "ADDST8", DspMeta21,
- 0x2800010c, 0xfe00014c, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_SPLIT8 },
- { "MULB8", DspMeta21,
- 0x40000108, 0xfe00012c, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_SPLIT8 },
- { "MULT8", DspMeta21,
- 0x4000010c, 0xfe00012c, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_SPLIT8 },
- { "MULSB8", DspMeta21,
- 0x48000108, 0xfe00012c, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_SPLIT8 },
- { "MULST8", DspMeta21,
- 0x4800010c, 0xfe00012c, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_SPLIT8 },
- { "SUBB8", DspMeta21,
- 0x30000108, 0xfe00010c, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_SPLIT8 },
- { "SUBT8", DspMeta21,
- 0x3000010c, 0xfe00014c, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_SPLIT8 },
- { "SUBSB8", DspMeta21,
- 0x38000108, 0xfe00014c, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_SPLIT8 },
- { "SUBST8", DspMeta21,
- 0x3800010c, 0xfe00014c, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_SPLIT8 },
- { "MUL", DspMeta21,
- 0x60000100, 0xfe000100, INSN_DSP, ENC_DALU,
- DSP_ARGS_1|DSP_ARGS_DACC },
- { "MUL", DspMeta21,
- 0x62000003, 0xfe000003, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_IMM },
- { "ABS", DspMeta21,
- 0x70000128, 0xfe0001ec, INSN_DSP, ENC_DALU, DSP_ARGS_2 },
- { "FFB", DspMeta21,
- 0x70000104, 0xfe0001ec, INSN_DSP, ENC_DALU, DSP_ARGS_2 },
- { "NORM", DspMeta21,
- 0x70000108, 0xfe0001ec, INSN_DSP, ENC_DALU, DSP_ARGS_2 },
- { "CMP", DspMeta21,
- 0x70000000, 0xfe0000ec, INSN_DSP, ENC_DALU, DSP_ARGS_2|DSP_ARGS_IMM },
- { "CMP", DspMeta21,
- 0x72000003, 0xfe000003, INSN_DSP, ENC_DALU, DSP_ARGS_2|DSP_ARGS_IMM },
- { "TST", DspMeta21,
- 0x78000100, 0xfe0001ec, INSN_DSP, ENC_DALU, DSP_ARGS_2|DSP_ARGS_IMM },
- { "TST", DspMeta21,
- 0x7a000003, 0xfe000003, INSN_DSP, ENC_DALU, DSP_ARGS_2|DSP_ARGS_IMM },
- { "MOV", DspMeta21,
- 0x00000104, 0xfe078146, INSN_DSP, ENC_DALU,
- DSP_ARGS_2|DSP_ARGS_DSP_SRC1|DSP_ARGS_DSP_SRC2|DSP_ARGS_IMM },
- { "MOVS", DspMeta21,
- 0x08000104, 0xfe000146, INSN_DSP, ENC_DALU, DSP_ARGS_2|DSP_ARGS_DSP_SRC2 },
- { "MOV", DspMeta21,
- 0x91000000, 0xff000000, INSN_DSP, ENC_DALU,
- DSP_ARGS_2|DSP_ARGS_DSP_SRC1|DSP_ARGS_IMM },
- { "MOV", DspMeta21,
- 0x92000000, 0xff000000, INSN_DSP, ENC_DALU, DSP_ARGS_2|DSP_ARGS_DSP_SRC2 },
- { "NEG", DspMeta21,
- 0x10000104, 0xfe000146, INSN_DSP, ENC_DALU, DSP_ARGS_2|DSP_ARGS_DSP_SRC2 },
- { "NEGS", DspMeta21,
- 0x18000104, 0xfe000146, INSN_DSP, ENC_DALU, DSP_ARGS_2|DSP_ARGS_DSP_SRC2 },
- { "XSDB", DspMeta21,
- 0xaa000100, 0xff0001ee, INSN_DSP, ENC_DALU, DSP_ARGS_2 },
- { "XSD", DspMeta21,
- 0xaa000100, 0xff0001ee, INSN_DSP, ENC_DALU, DSP_ARGS_2 },
- { "XSDW", DspMeta21,
- 0xaa000102, 0xff0001ee, INSN_DSP, ENC_DALU, DSP_ARGS_2 },
- { "XSDSB", DspMeta21,
- 0xaa000108, 0xff0001ee, INSN_DSP, ENC_DALU, DSP_ARGS_2 },
- { "XSDS", DspMeta21,
- 0xaa000108, 0xff0001ee, INSN_DSP, ENC_DALU, DSP_ARGS_2 },
- { "XSDSW", DspMeta21,
- 0xaa00010a, 0xff0001ee, INSN_DSP, ENC_DALU, DSP_ARGS_2 },
- { "LSL", DspMeta21,
- 0x50000100, 0xfc0001c0, INSN_DSP, ENC_DALU, 0 },
- { "LSR", DspMeta21,
- 0x50000140, 0xfc0001c0, INSN_DSP, ENC_DALU, 0 },
- { "ASL", DspMeta21,
- 0x50000180, 0xfc0001c0, INSN_DSP, ENC_DALU, 0 },
- { "ASR", DspMeta21,
- 0x500001c0, 0xfc0001c0, INSN_DSP, ENC_DALU, 0 },
- { "LSL", DspMeta21,
- 0x54000120, 0xfc0001e0, INSN_DSP, ENC_DALU, DSP_ARGS_IMM },
- { "LSR", DspMeta21,
- 0x54000160, 0xfc0001e0, INSN_DSP, ENC_DALU, DSP_ARGS_IMM },
- { "ASL", DspMeta21,
- 0x540001a0, 0xfc0001e0, INSN_DSP, ENC_DALU, DSP_ARGS_IMM },
- { "ASR", DspMeta21,
- 0x540001e0, 0xfc0001e0, INSN_DSP, ENC_DALU, DSP_ARGS_IMM },
- COND_INSN ("LSL", "", 1, DspMeta21,
- 0x54000100, 0xfc0001fe, INSN_DSP, ENC_DALU, 0),
- COND_INSN ("LSR", "", 1, DspMeta21,
- 0x54000140, 0xfc0001fe, INSN_DSP, ENC_DALU, 0),
- COND_INSN ("ASL", "", 1, DspMeta21,
- 0x54000180, 0xfc0001fe, INSN_DSP, ENC_DALU, 0),
- COND_INSN ("ASR", "", 1, DspMeta21,
- 0x540001c0, 0xfc0001fe, INSN_DSP, ENC_DALU, 0),
- { "LSLS", DspMeta21,
- 0x58000100, 0xfc0001c0, INSN_DSP, ENC_DALU, 0 },
- { "LSRS", DspMeta21,
- 0x58000140, 0xfc0001c0, INSN_DSP, ENC_DALU, 0 },
- { "ASLS", DspMeta21,
- 0x58000180, 0xfc0001c0, INSN_DSP, ENC_DALU, 0 },
- { "ASRS", DspMeta21,
- 0x580001c0, 0xfc0001c0, INSN_DSP, ENC_DALU, 0 },
- COND_INSN ("LSLS", "", 1, DspMeta21,
- 0x5c000100, 0xfc0001fe, INSN_DSP, ENC_DALU, 0),
- COND_INSN ("LSRS", "", 1, DspMeta21,
- 0x5c000140, 0xfc0001fe, INSN_DSP, ENC_DALU, 0),
- COND_INSN ("ASLS", "", 1, DspMeta21,
- 0x5c000180, 0xfc0001fe, INSN_DSP, ENC_DALU, 0),
- COND_INSN ("ASRS", "", 1, DspMeta21,
- 0x5c0001c0, 0xfc0001fe, INSN_DSP, ENC_DALU, 0),
- { "LSLS", DspMeta21,
- 0x5c000120, 0xfc0001e0, INSN_DSP, ENC_DALU, 0 },
- { "LSRS", DspMeta21,
- 0x5c000160, 0xfc0001e0, INSN_DSP, ENC_DALU, 0 },
- { "ASLS", DspMeta21,
- 0x5c0001a0, 0xfc0001e0, INSN_DSP, ENC_DALU, 0 },
- { "ASRS", DspMeta21,
- 0x5c0001e0, 0xfc0001e0, INSN_DSP, ENC_DALU, 0 },
- { "RTDW", DspMeta21,
- 0xaa000106, 0xff00010e, INSN_DSP, ENC_DALU, DSP_ARGS_2 },
- { "RTDSW", DspMeta21,
- 0xaa00010e, 0xff00010e, INSN_DSP, ENC_DALU, DSP_ARGS_2 },
- };
-
-#define UNIT_MASK 0xf
-#define SHORT_UNIT_MASK 0x3
-#define EXT_BASE_REG_MASK 0x1
-#define REG_MASK 0x1f
-#define CC_MASK 0xf
-#define RMASK_MASK 0x7f
-#define GET_SET_IMM_MASK 0x3f
-#define GET_SET_IMM_BITS 6
-#define GET_SET_EXT_IMM_MASK 0xfff
-#define GET_SET_EXT_IMM_BITS 12
-#define DGET_SET_IMM_MASK 0x3
-#define DGET_SET_IMM_BITS 2
-#define MGET_MSET_MAX_REGS 8
-#define MMOV_MAX_REGS 8
-#define IMM16_MASK 0xffff
-#define IMM16_BITS 16
-#define IMM19_MASK 0x7ffff
-#define IMM19_BITS 19
-#define IMM8_MASK 0xff
-#define IMM8_BITS 8
-#define IMM24_MASK 0xffffff
-#define IMM24_BITS 24
-#define IMM5_MASK 0x1f
-#define IMM5_BITS 5
-#define IMM6_MASK 0x3f
-#define IMM6_BITS 6
-#define IMM15_MASK 0x7fff
-#define IMM15_BITS 15
-#define IMM4_MASK 0x1f
-#define IMM4_BITS 4
-#define CALLR_REG_MASK 0x7
-#define CPC_REG_MASK 0xf
-#define O2R_REG_MASK 0x7
-#define ACF_PART_MASK 0x3
-#define DSP_REG_MASK 0xf
-#define DSP_PART_MASK 0x17
-#define TEMPLATE_NUM_REGS 4
-#define TEMPLATE_REGS_MASK 0xf
-
-#define IS_TEMPLATE_DEF(insn) (insn->dsp_daoppame_flags & DSP_DAOPPAME_TEMP)
-
-unsigned int metag_get_set_size_bytes (unsigned int opcode);
-unsigned int metag_get_set_ext_size_bytes (unsigned int opcode);
-unsigned int metag_cond_set_size_bytes (unsigned int opcode);
diff --git a/include/opcode/mips.h b/include/opcode/mips.h
deleted file mode 100644
index cb16d2a45..000000000
--- a/include/opcode/mips.h
+++ /dev/null
@@ -1,2151 +0,0 @@
-/* mips.h. Mips opcode list for GDB, the GNU debugger.
- Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
- 2003, 2004, 2005, 2008, 2009, 2010, 2013
- Free Software Foundation, Inc.
- Contributed by Ralph Campbell and OSF
- Commented and modified by Ian Lance Taylor, Cygnus Support
-
- This file is part of GDB, GAS, and the GNU binutils.
-
- GDB, GAS, and the GNU binutils are free software; you can redistribute
- them and/or modify them under the terms of the GNU General Public
- License as published by the Free Software Foundation; either version 3,
- or (at your option) any later version.
-
- GDB, GAS, and the GNU binutils are distributed in the hope that they
- 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 file; see the file COPYING3. If not, write to the Free
- Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef _MIPS_H_
-#define _MIPS_H_
-
-#include "bfd.h"
-
-/* These are bit masks and shift counts to use to access the various
- fields of an instruction. To retrieve the X field of an
- instruction, use the expression
- (i >> OP_SH_X) & OP_MASK_X
- To set the same field (to j), use
- i = (i &~ (OP_MASK_X << OP_SH_X)) | (j << OP_SH_X)
-
- Make sure you use fields that are appropriate for the instruction,
- of course.
-
- The 'i' format uses OP, RS, RT and IMMEDIATE.
-
- The 'j' format uses OP and TARGET.
-
- The 'r' format uses OP, RS, RT, RD, SHAMT and FUNCT.
-
- The 'b' format uses OP, RS, RT and DELTA.
-
- The floating point 'i' format uses OP, RS, RT and IMMEDIATE.
-
- The floating point 'r' format uses OP, FMT, FT, FS, FD and FUNCT.
-
- A breakpoint instruction uses OP, CODE and SPEC (10 bits of the
- breakpoint instruction are not defined; Kane says the breakpoint
- code field in BREAK is 20 bits; yet MIPS assemblers and debuggers
- only use ten bits). An optional two-operand form of break/sdbbp
- allows the lower ten bits to be set too, and MIPS32 and later
- architectures allow 20 bits to be set with a signal operand
- (using CODE20).
-
- The syscall instruction uses CODE20.
-
- The general coprocessor instructions use COPZ. */
-
-#define OP_MASK_OP 0x3f
-#define OP_SH_OP 26
-#define OP_MASK_RS 0x1f
-#define OP_SH_RS 21
-#define OP_MASK_FR 0x1f
-#define OP_SH_FR 21
-#define OP_MASK_FMT 0x1f
-#define OP_SH_FMT 21
-#define OP_MASK_BCC 0x7
-#define OP_SH_BCC 18
-#define OP_MASK_CODE 0x3ff
-#define OP_SH_CODE 16
-#define OP_MASK_CODE2 0x3ff
-#define OP_SH_CODE2 6
-#define OP_MASK_RT 0x1f
-#define OP_SH_RT 16
-#define OP_MASK_FT 0x1f
-#define OP_SH_FT 16
-#define OP_MASK_CACHE 0x1f
-#define OP_SH_CACHE 16
-#define OP_MASK_RD 0x1f
-#define OP_SH_RD 11
-#define OP_MASK_FS 0x1f
-#define OP_SH_FS 11
-#define OP_MASK_PREFX 0x1f
-#define OP_SH_PREFX 11
-#define OP_MASK_CCC 0x7
-#define OP_SH_CCC 8
-#define OP_MASK_CODE20 0xfffff /* 20 bit syscall/breakpoint code. */
-#define OP_SH_CODE20 6
-#define OP_MASK_SHAMT 0x1f
-#define OP_SH_SHAMT 6
-#define OP_MASK_EXTLSB OP_MASK_SHAMT
-#define OP_SH_EXTLSB OP_SH_SHAMT
-#define OP_MASK_STYPE OP_MASK_SHAMT
-#define OP_SH_STYPE OP_SH_SHAMT
-#define OP_MASK_FD 0x1f
-#define OP_SH_FD 6
-#define OP_MASK_TARGET 0x3ffffff
-#define OP_SH_TARGET 0
-#define OP_MASK_COPZ 0x1ffffff
-#define OP_SH_COPZ 0
-#define OP_MASK_IMMEDIATE 0xffff
-#define OP_SH_IMMEDIATE 0
-#define OP_MASK_DELTA 0xffff
-#define OP_SH_DELTA 0
-#define OP_MASK_FUNCT 0x3f
-#define OP_SH_FUNCT 0
-#define OP_MASK_SPEC 0x3f
-#define OP_SH_SPEC 0
-#define OP_SH_LOCC 8 /* FP condition code. */
-#define OP_SH_HICC 18 /* FP condition code. */
-#define OP_MASK_CC 0x7
-#define OP_SH_COP1NORM 25 /* Normal COP1 encoding. */
-#define OP_MASK_COP1NORM 0x1 /* a single bit. */
-#define OP_SH_COP1SPEC 21 /* COP1 encodings. */
-#define OP_MASK_COP1SPEC 0xf
-#define OP_MASK_COP1SCLR 0x4
-#define OP_MASK_COP1CMP 0x3
-#define OP_SH_COP1CMP 4
-#define OP_SH_FORMAT 21 /* FP short format field. */
-#define OP_MASK_FORMAT 0x7
-#define OP_SH_TRUE 16
-#define OP_MASK_TRUE 0x1
-#define OP_SH_GE 17
-#define OP_MASK_GE 0x01
-#define OP_SH_UNSIGNED 16
-#define OP_MASK_UNSIGNED 0x1
-#define OP_SH_HINT 16
-#define OP_MASK_HINT 0x1f
-#define OP_SH_MMI 0 /* Multimedia (parallel) op. */
-#define OP_MASK_MMI 0x3f
-#define OP_SH_MMISUB 6
-#define OP_MASK_MMISUB 0x1f
-#define OP_MASK_PERFREG 0x1f /* Performance monitoring. */
-#define OP_SH_PERFREG 1
-#define OP_SH_SEL 0 /* Coprocessor select field. */
-#define OP_MASK_SEL 0x7 /* The sel field of mfcZ and mtcZ. */
-#define OP_SH_CODE19 6 /* 19 bit wait code. */
-#define OP_MASK_CODE19 0x7ffff
-#define OP_SH_ALN 21
-#define OP_MASK_ALN 0x7
-#define OP_SH_VSEL 21
-#define OP_MASK_VSEL 0x1f
-#define OP_MASK_VECBYTE 0x7 /* Selector field is really 4 bits,
- but 0x8-0xf don't select bytes. */
-#define OP_SH_VECBYTE 22
-#define OP_MASK_VECALIGN 0x7 /* Vector byte-align (alni.ob) op. */
-#define OP_SH_VECALIGN 21
-#define OP_MASK_INSMSB 0x1f /* "ins" MSB. */
-#define OP_SH_INSMSB 11
-#define OP_MASK_EXTMSBD 0x1f /* "ext" MSBD. */
-#define OP_SH_EXTMSBD 11
-
-/* MIPS DSP ASE */
-#define OP_SH_DSPACC 11
-#define OP_MASK_DSPACC 0x3
-#define OP_SH_DSPACC_S 21
-#define OP_MASK_DSPACC_S 0x3
-#define OP_SH_DSPSFT 20
-#define OP_MASK_DSPSFT 0x3f
-#define OP_SH_DSPSFT_7 19
-#define OP_MASK_DSPSFT_7 0x7f
-#define OP_SH_SA3 21
-#define OP_MASK_SA3 0x7
-#define OP_SH_SA4 21
-#define OP_MASK_SA4 0xf
-#define OP_SH_IMM8 16
-#define OP_MASK_IMM8 0xff
-#define OP_SH_IMM10 16
-#define OP_MASK_IMM10 0x3ff
-#define OP_SH_WRDSP 11
-#define OP_MASK_WRDSP 0x3f
-#define OP_SH_RDDSP 16
-#define OP_MASK_RDDSP 0x3f
-#define OP_SH_BP 11
-#define OP_MASK_BP 0x3
-
-/* MIPS MT ASE */
-#define OP_SH_MT_U 5
-#define OP_MASK_MT_U 0x1
-#define OP_SH_MT_H 4
-#define OP_MASK_MT_H 0x1
-#define OP_SH_MTACC_T 18
-#define OP_MASK_MTACC_T 0x3
-#define OP_SH_MTACC_D 13
-#define OP_MASK_MTACC_D 0x3
-
-/* MIPS MCU ASE */
-#define OP_MASK_3BITPOS 0x7
-#define OP_SH_3BITPOS 12
-#define OP_MASK_OFFSET12 0xfff
-#define OP_SH_OFFSET12 0
-
-#define OP_OP_COP0 0x10
-#define OP_OP_COP1 0x11
-#define OP_OP_COP2 0x12
-#define OP_OP_COP3 0x13
-#define OP_OP_LWC1 0x31
-#define OP_OP_LWC2 0x32
-#define OP_OP_LWC3 0x33 /* a.k.a. pref */
-#define OP_OP_LDC1 0x35
-#define OP_OP_LDC2 0x36
-#define OP_OP_LDC3 0x37 /* a.k.a. ld */
-#define OP_OP_SWC1 0x39
-#define OP_OP_SWC2 0x3a
-#define OP_OP_SWC3 0x3b
-#define OP_OP_SDC1 0x3d
-#define OP_OP_SDC2 0x3e
-#define OP_OP_SDC3 0x3f /* a.k.a. sd */
-
-/* MIPS VIRT ASE */
-#define OP_MASK_CODE10 0x3ff
-#define OP_SH_CODE10 11
-
-/* Values in the 'VSEL' field. */
-#define MDMX_FMTSEL_IMM_QH 0x1d
-#define MDMX_FMTSEL_IMM_OB 0x1e
-#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
-
-/* Octeon */
-#define OP_SH_BBITIND 16
-#define OP_MASK_BBITIND 0x1f
-#define OP_SH_CINSPOS 6
-#define OP_MASK_CINSPOS 0x1f
-#define OP_SH_CINSLM1 11
-#define OP_MASK_CINSLM1 0x1f
-#define OP_SH_SEQI 6
-#define OP_MASK_SEQI 0x3ff
-
-/* Loongson */
-#define OP_SH_OFFSET_A 6
-#define OP_MASK_OFFSET_A 0xff
-#define OP_SH_OFFSET_B 3
-#define OP_MASK_OFFSET_B 0xff
-#define OP_SH_OFFSET_C 6
-#define OP_MASK_OFFSET_C 0x1ff
-#define OP_SH_RZ 0
-#define OP_MASK_RZ 0x1f
-#define OP_SH_FZ 0
-#define OP_MASK_FZ 0x1f
-
-/* Every MICROMIPSOP_X definition requires a corresponding OP_X
- definition, and vice versa. This simplifies various parts
- of the operand handling in GAS. The fields below only exist
- in the microMIPS encoding, so define each one to have an empty
- range. */
-#define OP_MASK_TRAP 0
-#define OP_SH_TRAP 0
-#define OP_MASK_OFFSET10 0
-#define OP_SH_OFFSET10 0
-#define OP_MASK_RS3 0
-#define OP_SH_RS3 0
-#define OP_MASK_MB 0
-#define OP_SH_MB 0
-#define OP_MASK_MC 0
-#define OP_SH_MC 0
-#define OP_MASK_MD 0
-#define OP_SH_MD 0
-#define OP_MASK_ME 0
-#define OP_SH_ME 0
-#define OP_MASK_MF 0
-#define OP_SH_MF 0
-#define OP_MASK_MG 0
-#define OP_SH_MG 0
-#define OP_MASK_MH 0
-#define OP_SH_MH 0
-#define OP_MASK_MJ 0
-#define OP_SH_MJ 0
-#define OP_MASK_ML 0
-#define OP_SH_ML 0
-#define OP_MASK_MM 0
-#define OP_SH_MM 0
-#define OP_MASK_MN 0
-#define OP_SH_MN 0
-#define OP_MASK_MP 0
-#define OP_SH_MP 0
-#define OP_MASK_MQ 0
-#define OP_SH_MQ 0
-#define OP_MASK_IMMA 0
-#define OP_SH_IMMA 0
-#define OP_MASK_IMMB 0
-#define OP_SH_IMMB 0
-#define OP_MASK_IMMC 0
-#define OP_SH_IMMC 0
-#define OP_MASK_IMMF 0
-#define OP_SH_IMMF 0
-#define OP_MASK_IMMG 0
-#define OP_SH_IMMG 0
-#define OP_MASK_IMMH 0
-#define OP_SH_IMMH 0
-#define OP_MASK_IMMI 0
-#define OP_SH_IMMI 0
-#define OP_MASK_IMMJ 0
-#define OP_SH_IMMJ 0
-#define OP_MASK_IMML 0
-#define OP_SH_IMML 0
-#define OP_MASK_IMMM 0
-#define OP_SH_IMMM 0
-#define OP_MASK_IMMN 0
-#define OP_SH_IMMN 0
-#define OP_MASK_IMMO 0
-#define OP_SH_IMMO 0
-#define OP_MASK_IMMP 0
-#define OP_SH_IMMP 0
-#define OP_MASK_IMMQ 0
-#define OP_SH_IMMQ 0
-#define OP_MASK_IMMU 0
-#define OP_SH_IMMU 0
-#define OP_MASK_IMMW 0
-#define OP_SH_IMMW 0
-#define OP_MASK_IMMX 0
-#define OP_SH_IMMX 0
-#define OP_MASK_IMMY 0
-#define OP_SH_IMMY 0
-
-/* Enhanced VA Scheme */
-#define OP_SH_EVAOFFSET 7
-#define OP_MASK_EVAOFFSET 0x1ff
-
-/* Enumerates the various types of MIPS operand. */
-enum mips_operand_type {
- /* Described by mips_int_operand. */
- OP_INT,
-
- /* Described by mips_mapped_int_operand. */
- OP_MAPPED_INT,
-
- /* Described by mips_msb_operand. */
- OP_MSB,
-
- /* Described by mips_reg_operand. */
- OP_REG,
-
- /* Like OP_REG, but can be omitted if the register is the same as the
- previous operand. */
- OP_OPTIONAL_REG,
-
- /* Described by mips_reg_pair_operand. */
- OP_REG_PAIR,
-
- /* Described by mips_pcrel_operand. */
- OP_PCREL,
-
- /* A performance register. The field is 5 bits in size, but the supported
- values are much more restricted. */
- OP_PERF_REG,
-
- /* The final operand in a microMIPS ADDIUSP instruction. It mostly acts
- as a normal 9-bit signed offset that is multiplied by four, but there
- are four special cases:
-
- -2 * 4 => -258 * 4
- -1 * 4 => -257 * 4
- 0 * 4 => 256 * 4
- 1 * 4 => 257 * 4. */
- OP_ADDIUSP_INT,
-
- /* The target of a (D)CLO or (D)CLZ instruction. The operand spans two
- 5-bit register fields, both of which must be set to the destination
- register. */
- OP_CLO_CLZ_DEST,
-
- /* A register list for a microMIPS LWM or SWM instruction. The operand
- size determines whether the 16-bit or 32-bit encoding is required. */
- OP_LWM_SWM_LIST,
-
- /* The register list for an emulated MIPS16 ENTRY or EXIT instruction. */
- OP_ENTRY_EXIT_LIST,
-
- /* The register list and frame size for a MIPS16 SAVE or RESTORE
- instruction. */
- OP_SAVE_RESTORE_LIST,
-
- /* A 10-bit field VVVVVNNNNN used for octobyte and quadhalf instructions:
-
- V Meaning
- ----- -------
- 0EEE0 8 copies of $vN[E], OB format
- 0EE01 4 copies of $vN[E], QH format
- 10110 all 8 elements of $vN, OB format
- 10101 all 4 elements of $vN, QH format
- 11110 8 copies of immediate N, OB format
- 11101 4 copies of immediate N, QH format. */
- OP_MDMX_IMM_REG,
-
- /* A register operand that must match the destination register. */
- OP_REPEAT_DEST_REG,
-
- /* A register operand that must match the previous register. */
- OP_REPEAT_PREV_REG,
-
- /* $pc, which has no encoding in the architectural instruction. */
- OP_PC,
-
- /* A 4-bit XYZW channel mask or 2-bit XYZW index; the size determines
- which. */
- OP_VU0_SUFFIX,
-
- /* Like OP_VU0_SUFFIX, but used when the operand's value has already
- been set. Any suffix used here must match the previous value. */
- OP_VU0_MATCH_SUFFIX,
-
- /* An index selected by an integer, e.g. [1]. */
- OP_IMM_INDEX,
-
- /* An index selected by a register, e.g. [$2]. */
- OP_REG_INDEX
-};
-
-/* Enumerates the types of MIPS register. */
-enum mips_reg_operand_type {
- /* General registers $0-$31. Software names like $at can also be used. */
- OP_REG_GP,
-
- /* Floating-point registers $f0-$f31. */
- OP_REG_FP,
-
- /* Coprocessor condition code registers $cc0-$cc7. FPU condition codes
- can also be written $fcc0-$fcc7. */
- OP_REG_CCC,
-
- /* FPRs used in a vector capacity. They can be written $f0-$f31
- or $v0-$v31, although the latter form is not used for the VR5400
- vector instructions. */
- OP_REG_VEC,
-
- /* DSP accumulator registers $ac0-$ac3. */
- OP_REG_ACC,
-
- /* Coprocessor registers $0-$31. Mnemonic names like c0_cause can
- also be used in some contexts. */
- OP_REG_COPRO,
-
- /* Hardware registers $0-$31. Mnemonic names like hwr_cpunum can
- also be used in some contexts. */
- OP_REG_HW,
-
- /* Floating-point registers $vf0-$vf31. */
- OP_REG_VF,
-
- /* Integer registers $vi0-$vi31. */
- OP_REG_VI,
-
- /* R5900 VU0 registers $I, $Q, $R and $ACC. */
- OP_REG_R5900_I,
- OP_REG_R5900_Q,
- OP_REG_R5900_R,
- OP_REG_R5900_ACC,
-
- /* MSA registers $w0-$w31. */
- OP_REG_MSA,
-
- /* MSA control registers $0-$31. */
- OP_REG_MSA_CTRL
-};
-
-/* Base class for all operands. */
-struct mips_operand
-{
- /* The type of the operand. */
- enum mips_operand_type type;
-
- /* The operand occupies SIZE bits of the instruction, starting at LSB. */
- unsigned short size;
- unsigned short lsb;
-};
-
-/* Describes an integer operand with a regular encoding pattern. */
-struct mips_int_operand
-{
- struct mips_operand root;
-
- /* The low ROOT.SIZE bits of MAX_VAL encodes (MAX_VAL + BIAS) << SHIFT.
- The cyclically previous field value encodes 1 << SHIFT less than that,
- and so on. E.g.
-
- - for { { T, 4, L }, 14, 0, 0 }, field values 0...14 encode themselves,
- but 15 encodes -1.
-
- - { { T, 8, L }, 127, 0, 2 } is a normal signed 8-bit operand that is
- shifted left two places.
-
- - { { T, 3, L }, 8, 0, 0 } is a normal unsigned 3-bit operand except
- that 0 encodes 8.
-
- - { { ... }, 0, 1, 3 } means that N encodes (N + 1) << 3. */
- unsigned int max_val;
- int bias;
- unsigned int shift;
-
- /* True if the operand should be printed as hex rather than decimal. */
- bfd_boolean print_hex;
-};
-
-/* Uses a lookup table to describe a small integer operand. */
-struct mips_mapped_int_operand
-{
- struct mips_operand root;
-
- /* Maps each encoding value to the integer that it represents. */
- const int *int_map;
-
- /* True if the operand should be printed as hex rather than decimal. */
- bfd_boolean print_hex;
-};
-
-/* An operand that encodes the most significant bit position of a bitfield.
- Given a bitfield that spans bits [MSB, LSB], some operands of this type
- encode MSB directly while others encode MSB - LSB. Each operand of this
- type is preceded by an integer operand that specifies LSB.
-
- The assembly form varies between instructions. For some instructions,
- such as EXT, the operand is written as the bitfield size. For others,
- such as EXTS, it is written in raw MSB - LSB form. */
-struct mips_msb_operand
-{
- struct mips_operand root;
-
- /* The assembly-level operand encoded by a field value of 0. */
- int bias;
-
- /* True if the operand encodes MSB directly, false if it encodes
- MSB - LSB. */
- bfd_boolean add_lsb;
-
- /* The maximum value of MSB + 1. */
- unsigned int opsize;
-};
-
-/* Describes a single register operand. */
-struct mips_reg_operand
-{
- struct mips_operand root;
-
- /* The type of register. */
- enum mips_reg_operand_type reg_type;
-
- /* If nonnull, REG_MAP[N] gives the register associated with encoding N,
- otherwise the encoding is the same as the register number. */
- const unsigned char *reg_map;
-};
-
-/* Describes an operand that encodes a pair of registers. */
-struct mips_reg_pair_operand
-{
- struct mips_operand root;
-
- /* The type of register. */
- enum mips_reg_operand_type reg_type;
-
- /* Encoding N represents REG1_MAP[N], REG2_MAP[N]. */
- unsigned char *reg1_map;
- unsigned char *reg2_map;
-};
-
-/* Describes an operand that is calculated relative to a base PC.
- The base PC is usually the address of the following instruction,
- but the rules for MIPS16 instructions like ADDIUPC are more complicated. */
-struct mips_pcrel_operand
-{
- /* Encodes the offset. */
- struct mips_int_operand root;
-
- /* The low ALIGN_LOG2 bits of the base PC are cleared to give PC',
- which is then added to the offset encoded by ROOT. */
- unsigned int align_log2 : 8;
-
- /* If INCLUDE_ISA_BIT, the ISA bit of the original base PC is then
- reinstated. This is true for jumps and branches and false for
- PC-relative data instructions. */
- unsigned int include_isa_bit : 1;
-
- /* If FLIP_ISA_BIT, the ISA bit of the result is inverted.
- This is true for JALX and false otherwise. */
- unsigned int flip_isa_bit : 1;
-};
-
-/* Return true if the assembly syntax allows OPERAND to be omitted. */
-
-static inline bfd_boolean
-mips_optional_operand_p (const struct mips_operand *operand)
-{
- return (operand->type == OP_OPTIONAL_REG
- || operand->type == OP_REPEAT_PREV_REG);
-}
-
-/* Return a version of INSN in which the field specified by OPERAND
- has value UVAL. */
-
-static inline unsigned int
-mips_insert_operand (const struct mips_operand *operand, unsigned int insn,
- unsigned int uval)
-{
- unsigned int mask;
-
- mask = (1 << operand->size) - 1;
- insn &= ~(mask << operand->lsb);
- insn |= (uval & mask) << operand->lsb;
- return insn;
-}
-
-/* Extract OPERAND from instruction INSN. */
-
-static inline unsigned int
-mips_extract_operand (const struct mips_operand *operand, unsigned int insn)
-{
- return (insn >> operand->lsb) & ((1 << operand->size) - 1);
-}
-
-/* UVAL is the value encoded by OPERAND. Return it in signed form. */
-
-static inline int
-mips_signed_operand (const struct mips_operand *operand, unsigned int uval)
-{
- unsigned int sign_bit, mask;
-
- mask = (1 << operand->size) - 1;
- sign_bit = 1 << (operand->size - 1);
- return ((uval + sign_bit) & mask) - sign_bit;
-}
-
-/* Return the integer that OPERAND encodes as UVAL. */
-
-static inline int
-mips_decode_int_operand (const struct mips_int_operand *operand,
- unsigned int uval)
-{
- uval |= (operand->max_val - uval) & -(1 << operand->root.size);
- uval += operand->bias;
- uval <<= operand->shift;
- return uval;
-}
-
-/* Return the maximum value that can be encoded by OPERAND. */
-
-static inline int
-mips_int_operand_max (const struct mips_int_operand *operand)
-{
- return (operand->max_val + operand->bias) << operand->shift;
-}
-
-/* Return the minimum value that can be encoded by OPERAND. */
-
-static inline int
-mips_int_operand_min (const struct mips_int_operand *operand)
-{
- unsigned int mask;
-
- mask = (1 << operand->root.size) - 1;
- return mips_int_operand_max (operand) - (mask << operand->shift);
-}
-
-/* Return the register that OPERAND encodes as UVAL. */
-
-static inline int
-mips_decode_reg_operand (const struct mips_reg_operand *operand,
- unsigned int uval)
-{
- if (operand->reg_map)
- uval = operand->reg_map[uval];
- return uval;
-}
-
-/* PC-relative operand OPERAND has value UVAL and is relative to BASE_PC.
- Return the address that it encodes. */
-
-static inline bfd_vma
-mips_decode_pcrel_operand (const struct mips_pcrel_operand *operand,
- bfd_vma base_pc, unsigned int uval)
-{
- bfd_vma addr;
-
- addr = base_pc & -(1 << operand->align_log2);
- addr += mips_decode_int_operand (&operand->root, uval);
- if (operand->include_isa_bit)
- addr |= base_pc & 1;
- if (operand->flip_isa_bit)
- addr ^= 1;
- return addr;
-}
-
-/* This structure holds information for a particular instruction. */
-
-struct mips_opcode
-{
- /* The name of the instruction. */
- const char *name;
- /* A string describing the arguments for this instruction. */
- const char *args;
- /* The basic opcode for the instruction. When assembling, this
- opcode is modified by the arguments to produce the actual opcode
- that is used. If pinfo is INSN_MACRO, then this is 0. */
- unsigned long match;
- /* If pinfo is not INSN_MACRO, then this is a bit mask for the
- relevant portions of the opcode when disassembling. If the
- actual opcode anded with the match field equals the opcode field,
- then we have found the correct instruction. If pinfo is
- INSN_MACRO, then this field is the macro identifier. */
- unsigned long mask;
- /* For a macro, this is INSN_MACRO. Otherwise, it is a collection
- of bits describing the instruction, notably any relevant hazard
- information. */
- unsigned long pinfo;
- /* A collection of additional bits describing the instruction. */
- unsigned long pinfo2;
- /* A collection of bits describing the instruction sets of which this
- instruction or macro is a member. */
- unsigned long membership;
- /* A collection of bits describing the ASE of which this instruction
- or macro is a member. */
- unsigned long ase;
- /* A collection of bits describing the instruction sets of which this
- instruction or macro is not a member. */
- unsigned long exclusions;
-};
-
-/* These are the characters which may appear in the args field of an
- instruction. They appear in the order in which the fields appear
- when the instruction is used. Commas and parentheses in the args
- string are ignored when assembling, and written into the output
- when disassembling.
-
- Each of these characters corresponds to a mask field defined above.
-
- "1" 5 bit sync type (OP_*_STYPE)
- "<" 5 bit shift amount (OP_*_SHAMT)
- ">" shift amount between 32 and 63, stored after subtracting 32 (OP_*_SHAMT)
- "a" 26 bit target address (OP_*_TARGET)
- "+i" likewise, but flips bit 0
- "b" 5 bit base register (OP_*_RS)
- "c" 10 bit breakpoint code (OP_*_CODE)
- "d" 5 bit destination register specifier (OP_*_RD)
- "h" 5 bit prefx hint (OP_*_PREFX)
- "i" 16 bit unsigned immediate (OP_*_IMMEDIATE)
- "j" 16 bit signed immediate (OP_*_DELTA)
- "k" 5 bit cache opcode in target register position (OP_*_CACHE)
- "o" 16 bit signed offset (OP_*_DELTA)
- "p" 16 bit PC relative branch target address (OP_*_DELTA)
- "q" 10 bit extra breakpoint code (OP_*_CODE2)
- "r" 5 bit same register used as both source and target (OP_*_RS)
- "s" 5 bit source register specifier (OP_*_RS)
- "t" 5 bit target register (OP_*_RT)
- "u" 16 bit upper 16 bits of address (OP_*_IMMEDIATE)
- "v" 5 bit same register used as both source and destination (OP_*_RS)
- "w" 5 bit same register used as both target and destination (OP_*_RT)
- "U" 5 bit same destination register in both OP_*_RD and OP_*_RT
- (used by clo and clz)
- "C" 25 bit coprocessor function code (OP_*_COPZ)
- "B" 20 bit syscall/breakpoint function code (OP_*_CODE20)
- "J" 19 bit wait function code (OP_*_CODE19)
- "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/dins/dext/dinsm/dextm position, which becomes
- LSB (OP_*_SHAMT; OP_*_EXTLSB or OP_*_STYPE may be used for
- microMIPS compatibility).
- Enforces: 0 <= pos < 32.
- "+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/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 dinsu/dextu position, which becomes LSB-32 (OP_*_SHAMT).
- Enforces: 32 <= pos < 64.
- "+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).
- Requires that "+A" or "+E" occur first to set position.
- Enforces: 32 < (pos+size) <= 64.
- "+H" 5 bit "dextu" size, which becomes MSBD (OP_*_EXTMSBD).
- Requires that "+A" or "+E" occur first to set position.
- Enforces: 32 < (pos+size) <= 64.
-
- Floating point instructions:
- "D" 5 bit destination register (OP_*_FD)
- "M" 3 bit compare condition code (OP_*_CCC) (only used for mips4 and up)
- "N" 3 bit branch condition code (OP_*_BCC) (only used for mips4 and up)
- "S" 5 bit fs source 1 register (OP_*_FS)
- "T" 5 bit ft source 2 register (OP_*_FT)
- "R" 5 bit fr source 3 register (OP_*_FR)
- "V" 5 bit same register used as floating source and destination (OP_*_FS)
- "W" 5 bit same register used as floating target and destination (OP_*_FT)
-
- Coprocessor instructions:
- "E" 5 bit target register (OP_*_RT)
- "G" 5 bit destination register (OP_*_RD)
- "H" 3 bit sel field for (d)mtc* and (d)mfc* (OP_*_SEL)
- "P" 5 bit performance-monitor register (OP_*_PERFREG)
- "e" 5 bit vector register byte specifier (OP_*_VECBYTE)
- "%" 3 bit immediate vr5400 vector alignment operand (OP_*_VECALIGN)
-
- Macro instructions:
- "A" General 32 bit expression
- "I" 32 bit immediate (value placed in imm_expr).
- "F" 64 bit floating point constant in .rdata
- "L" 64 bit floating point constant in .lit8
- "f" 32 bit floating point constant
- "l" 32 bit floating point constant in .lit4
-
- MDMX and VR5400 instruction operands (note that while these use the
- FP register fields, the MDMX instructions accept both $fN and $vN names
- for the registers):
- "O" alignment offset (OP_*_ALN)
- "Q" vector/scalar/immediate source (OP_*_VSEL and OP_*_FT)
- "X" destination register (OP_*_FD)
- "Y" source register (OP_*_FS)
- "Z" source register (OP_*_FT)
-
- R5900 VU0 Macromode instructions:
- "+5" 5 bit floating point register (FD)
- "+6" 5 bit floating point register (FS)
- "+7" 5 bit floating point register (FT)
- "+8" 5 bit integer register (FD)
- "+9" 5 bit integer register (FS)
- "+0" 5 bit integer register (FT)
- "+K" match an existing 4-bit channel mask starting at bit 21
- "+L" 2-bit channel index starting at bit 21
- "+M" 2-bit channel index starting at bit 23
- "+N" match an existing 2-bit channel index starting at bit 0
- "+f" 15 bit immediate for VCALLMS
- "+g" 5 bit signed immediate for VIADDI
- "+m" $ACC register (syntax only)
- "+q" $Q register (syntax only)
- "+r" $R register (syntax only)
- "+y" $I register (syntax only)
- "#+" "++" decorator in ($reg++) sequence
- "#-" "--" decorator in (--$reg) sequence
-
- DSP ASE usage:
- "2" 2 bit unsigned immediate for byte align (OP_*_BP)
- "3" 3 bit unsigned immediate (OP_*_SA3)
- "4" 4 bit unsigned immediate (OP_*_SA4)
- "5" 8 bit unsigned immediate (OP_*_IMM8)
- "6" 5 bit unsigned immediate (OP_*_RS)
- "7" 2 bit dsp accumulator register (OP_*_DSPACC)
- "8" 6 bit unsigned immediate (OP_*_WRDSP)
- "9" 2 bit dsp accumulator register (OP_*_DSPACC_S)
- "0" 6 bit signed immediate (OP_*_DSPSFT)
- ":" 7 bit signed immediate (OP_*_DSPSFT_7)
- "'" 6 bit unsigned immediate (OP_*_RDDSP)
- "@" 10 bit signed immediate (OP_*_IMM10)
-
- MT ASE usage:
- "!" 1 bit usermode flag (OP_*_MT_U)
- "$" 1 bit load high flag (OP_*_MT_H)
- "*" 2 bit dsp/smartmips accumulator register (OP_*_MTACC_T)
- "&" 2 bit dsp/smartmips accumulator register (OP_*_MTACC_D)
- "g" 5 bit coprocessor 1 and 2 destination register (OP_*_RD)
- "+t" 5 bit coprocessor 0 destination register (OP_*_RT)
-
- MCU ASE usage:
- "~" 12 bit offset (OP_*_OFFSET12)
- "\" 3 bit position for aset and aclr (OP_*_3BITPOS)
-
- VIRT ASE usage:
- "+J" 10-bit hypcall code (OP_*CODE10)
-
- 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
-
- Octeon:
- "+x" Bit index field of bbit. Enforces: 0 <= index < 32.
- "+X" Bit index field of bbit aliasing bbit32. Matches if 32 <= index < 64,
- otherwise skips to next candidate.
- "+p" Position field of cins/cins32/exts/exts32. Enforces 0 <= pos < 32.
- "+P" Position field of cins/exts aliasing cins32/exts32. Matches if
- 32 <= pos < 64, otherwise skips to next candidate.
- "+Q" Immediate field of seqi/snei. Enforces -512 <= imm < 512.
- "+s" Length-minus-one field of cins32/exts32. Requires msb position
- of the field to be <= 31.
- "+S" Length-minus-one field of cins/exts. Requires msb position
- of the field to be <= 63.
-
- Loongson-3A:
- "+a" 8-bit signed offset in bit 6 (OP_*_OFFSET_A)
- "+b" 8-bit signed offset in bit 3 (OP_*_OFFSET_B)
- "+c" 9-bit signed offset in bit 6 (OP_*_OFFSET_C)
- "+z" 5-bit rz register (OP_*_RZ)
- "+Z" 5-bit fz register (OP_*_FZ)
-
- Enhanced VA Scheme:
- "+j" 9-bit signed offset in bit 7 (OP_*_EVAOFFSET)
-
- MSA Extension:
- "+d" 5-bit MSA register (FD)
- "+e" 5-bit MSA register (FS)
- "+h" 5-bit MSA register (FT)
- "+k" 5-bit GPR at bit 6
- "+l" 5-bit MSA control register at bit 6
- "+n" 5-bit MSA control register at bit 11
- "+o" 5-bit vector element index at bit 16
- "+u" 4-bit vector element index at bit 16
- "+v" 3-bit vector element index at bit 16
- "+w" 2-bit vector element index at bit 16
- "+T" (-512 .. 511) << 0 at bit 16
- "+U" (-512 .. 511) << 1 at bit 16
- "+V" (-512 .. 511) << 2 at bit 16
- "+W" (-512 .. 511) << 3 at bit 16
- "+~" 2 bit LSA/DLSA shift amount from 1 to 4 at bit 6
- "+!" 3 bit unsigned bit position at bit 16
- "+@" 4 bit unsigned bit position at bit 16
- "+#" 6 bit unsigned bit position at bit 16
- "+$" 5 bit unsigned immediate at bit 16
- "+%" 5 bit signed immediate at bit 16
- "+^" 10 bit signed immediate at bit 11
- "+&" 0 vector element index
- "+*" 5-bit register vector element index at bit 16
- "+|" 8-bit mask at bit 16
-
- Other:
- "()" parens surrounding optional value
- "," separates operands
- "+" Start of extension sequence.
-
- Characters used so far, for quick reference when adding more:
- "1234567890"
- "%[]<>(),+:'@!#$*&\~"
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- "abcdefghijklopqrstuvwxz"
-
- Extension character sequences used so far ("+" followed by the
- following), for quick reference when adding more:
- "1234567890"
- "~!@#$%^&*|"
- "ABCEFGHJKLMNPQSTUVWXZ"
- "abcdefghijklmnopqrstuvwxyz"
-*/
-
-/* These are the bits which may be set in the pinfo field of an
- instructions, if it is not equal to INSN_MACRO. */
-
-/* Writes to operand number N. */
-#define INSN_WRITE_SHIFT 0
-#define INSN_WRITE_1 0x00000001
-#define INSN_WRITE_2 0x00000002
-#define INSN_WRITE_ALL 0x00000003
-/* Reads from operand number N. */
-#define INSN_READ_SHIFT 2
-#define INSN_READ_1 0x00000004
-#define INSN_READ_2 0x00000008
-#define INSN_READ_3 0x00000010
-#define INSN_READ_4 0x00000020
-#define INSN_READ_ALL 0x0000003c
-/* Modifies general purpose register 31. */
-#define INSN_WRITE_GPR_31 0x00000040
-/* Modifies coprocessor condition code. */
-#define INSN_WRITE_COND_CODE 0x00000080
-/* Reads coprocessor condition code. */
-#define INSN_READ_COND_CODE 0x00000100
-/* TLB operation. */
-#define INSN_TLB 0x00000200
-/* Reads coprocessor register other than floating point register. */
-#define INSN_COP 0x00000400
-/* Instruction loads value from memory, requiring delay. */
-#define INSN_LOAD_MEMORY_DELAY 0x00000800
-/* Instruction loads value from coprocessor, requiring delay. */
-#define INSN_LOAD_COPROC_DELAY 0x00001000
-/* Instruction has unconditional branch delay slot. */
-#define INSN_UNCOND_BRANCH_DELAY 0x00002000
-/* Instruction has conditional branch delay slot. */
-#define INSN_COND_BRANCH_DELAY 0x00004000
-/* Conditional branch likely: if branch not taken, insn nullified. */
-#define INSN_COND_BRANCH_LIKELY 0x00008000
-/* Moves to coprocessor register, requiring delay. */
-#define INSN_COPROC_MOVE_DELAY 0x00010000
-/* Loads coprocessor register from memory, requiring delay. */
-#define INSN_COPROC_MEMORY_DELAY 0x00020000
-/* Reads the HI register. */
-#define INSN_READ_HI 0x00040000
-/* Reads the LO register. */
-#define INSN_READ_LO 0x00080000
-/* Modifies the HI register. */
-#define INSN_WRITE_HI 0x00100000
-/* Modifies the LO register. */
-#define INSN_WRITE_LO 0x00200000
-/* Not to be placed in a branch delay slot, either architecturally
- or for ease of handling (such as with instructions that take a trap). */
-#define INSN_NO_DELAY_SLOT 0x00400000
-/* Instruction stores value into memory. */
-#define INSN_STORE_MEMORY 0x00800000
-/* Instruction uses single precision floating point. */
-#define FP_S 0x01000000
-/* Instruction uses double precision floating point. */
-#define FP_D 0x02000000
-/* Instruction is part of the tx39's integer multiply family. */
-#define INSN_MULT 0x04000000
-/* Reads general purpose register 24. */
-#define INSN_READ_GPR_24 0x08000000
-/* Writes to general purpose register 24. */
-#define INSN_WRITE_GPR_24 0x10000000
-/* A user-defined instruction. */
-#define INSN_UDI 0x20000000
-/* Instruction is actually a macro. It should be ignored by the
- disassembler, and requires special treatment by the assembler. */
-#define INSN_MACRO 0xffffffff
-
-/* These are the bits which may be set in the pinfo2 field of an
- instruction. */
-
-/* Instruction is a simple alias (I.E. "move" for daddu/addu/or) */
-#define INSN2_ALIAS 0x00000001
-/* Instruction reads MDMX accumulator. */
-#define INSN2_READ_MDMX_ACC 0x00000002
-/* Instruction writes MDMX accumulator. */
-#define INSN2_WRITE_MDMX_ACC 0x00000004
-/* Macro uses single-precision floating-point instructions. This should
- only be set for macros. For instructions, FP_S in pinfo carries the
- same information. */
-#define INSN2_M_FP_S 0x00000008
-/* Macro uses double-precision floating-point instructions. This should
- only be set for macros. For instructions, FP_D in pinfo carries the
- same information. */
-#define INSN2_M_FP_D 0x00000010
-/* Instruction has a branch delay slot that requires a 16-bit instruction. */
-#define INSN2_BRANCH_DELAY_16BIT 0x00000020
-/* Instruction has a branch delay slot that requires a 32-bit instruction. */
-#define INSN2_BRANCH_DELAY_32BIT 0x00000040
-/* Writes to the stack pointer ($29). */
-#define INSN2_WRITE_SP 0x00000080
-/* Reads from the stack pointer ($29). */
-#define INSN2_READ_SP 0x00000100
-/* Reads the RA ($31) register. */
-#define INSN2_READ_GPR_31 0x00000200
-/* Reads the program counter ($pc). */
-#define INSN2_READ_PC 0x00000400
-/* Is an unconditional branch insn. */
-#define INSN2_UNCOND_BRANCH 0x00000800
-/* Is a conditional branch insn. */
-#define INSN2_COND_BRANCH 0x00001000
-/* Reads from $16. This is true of the MIPS16 0x6500 nop. */
-#define INSN2_READ_GPR_16 0x00002000
-/* Has an "\.x?y?z?w?" suffix based on mips_vu0_channel_mask. */
-#define INSN2_VU0_CHANNEL_SUFFIX 0x00004000
-
-/* Masks used to mark instructions to indicate which MIPS ISA level
- they were introduced in. INSN_ISA_MASK masks an enumeration that
- specifies the base ISA level(s). The remainder of a 32-bit
- word constructed using these macros is a bitmask of the remaining
- INSN_* values below. */
-
-#define INSN_ISA_MASK 0x0000000ful
-
-/* We cannot start at zero due to ISA_UNKNOWN below. */
-#define INSN_ISA1 1
-#define INSN_ISA2 2
-#define INSN_ISA3 3
-#define INSN_ISA4 4
-#define INSN_ISA5 5
-#define INSN_ISA32 6
-#define INSN_ISA32R2 7
-#define INSN_ISA64 8
-#define INSN_ISA64R2 9
-/* Below this point the INSN_* values correspond to combinations of ISAs.
- They are only for use in the opcodes table to indicate membership of
- a combination of ISAs that cannot be expressed using the usual inclusion
- ordering on the above INSN_* values. */
-#define INSN_ISA3_32 10
-#define INSN_ISA3_32R2 11
-#define INSN_ISA4_32 12
-#define INSN_ISA4_32R2 13
-#define INSN_ISA5_32R2 14
-
-/* Given INSN_ISA* values X and Y, where X ranges over INSN_ISA1 through
- INSN_ISA5_32R2 and Y ranges over INSN_ISA1 through INSN_ISA64R2,
- this table describes whether at least one of the ISAs described by X
- is/are implemented by ISA Y. (Think of Y as the ISA level supported by
- a particular core and X as the ISA level(s) at which a certain instruction
- is defined.) The ISA(s) described by X is/are implemented by Y iff
- (mips_isa_table[(Y & INSN_ISA_MASK) - 1] >> ((X & INSN_ISA_MASK) - 1)) & 1
- is non-zero. */
-static const unsigned int mips_isa_table[] =
- { 0x0001, 0x0003, 0x0607, 0x1e0f, 0x3e1f, 0x0a23, 0x3e63, 0x3ebf, 0x3fff };
-
-/* Masks used for Chip specific instructions. */
-#define INSN_CHIP_MASK 0xc3ff0f20
-
-/* Cavium Networks Octeon instructions. */
-#define INSN_OCTEON 0x00000800
-#define INSN_OCTEONP 0x00000200
-#define INSN_OCTEON2 0x00000100
-
-/* MIPS R5900 instruction */
-#define INSN_5900 0x00004000
-
-/* MIPS R4650 instruction. */
-#define INSN_4650 0x00010000
-/* LSI R4010 instruction. */
-#define INSN_4010 0x00020000
-/* NEC VR4100 instruction. */
-#define INSN_4100 0x00040000
-/* Toshiba R3900 instruction. */
-#define INSN_3900 0x00080000
-/* MIPS R10000 instruction. */
-#define INSN_10000 0x00100000
-/* Broadcom SB-1 instruction. */
-#define INSN_SB1 0x00200000
-/* NEC VR4111/VR4181 instruction. */
-#define INSN_4111 0x00400000
-/* NEC VR4120 instruction. */
-#define INSN_4120 0x00800000
-/* NEC VR5400 instruction. */
-#define INSN_5400 0x01000000
-/* NEC VR5500 instruction. */
-#define INSN_5500 0x02000000
-
-/* ST Microelectronics Loongson 2E. */
-#define INSN_LOONGSON_2E 0x40000000
-/* ST Microelectronics Loongson 2F. */
-#define INSN_LOONGSON_2F 0x80000000
-/* Loongson 3A. */
-#define INSN_LOONGSON_3A 0x00000400
-/* RMI Xlr instruction */
-#define INSN_XLR 0x00000020
-
-/* DSP ASE */
-#define ASE_DSP 0x00000001
-#define ASE_DSP64 0x00000002
-/* DSP R2 ASE */
-#define ASE_DSPR2 0x00000004
-/* Enhanced VA Scheme */
-#define ASE_EVA 0x00000008
-/* MCU (MicroController) ASE */
-#define ASE_MCU 0x00000010
-/* MDMX ASE */
-#define ASE_MDMX 0x00000020
-/* MIPS-3D ASE */
-#define ASE_MIPS3D 0x00000040
-/* MT ASE */
-#define ASE_MT 0x00000080
-/* SmartMIPS ASE */
-#define ASE_SMARTMIPS 0x00000100
-/* Virtualization ASE */
-#define ASE_VIRT 0x00000200
-#define ASE_VIRT64 0x00000400
-/* MSA Extension */
-#define ASE_MSA 0x00000800
-#define ASE_MSA64 0x00001000
-
-/* MIPS ISA defines, use instead of hardcoding ISA level. */
-
-#define ISA_UNKNOWN 0 /* Gas internal use. */
-#define ISA_MIPS1 INSN_ISA1
-#define ISA_MIPS2 INSN_ISA2
-#define ISA_MIPS3 INSN_ISA3
-#define ISA_MIPS4 INSN_ISA4
-#define ISA_MIPS5 INSN_ISA5
-
-#define ISA_MIPS32 INSN_ISA32
-#define ISA_MIPS64 INSN_ISA64
-
-#define ISA_MIPS32R2 INSN_ISA32R2
-#define ISA_MIPS64R2 INSN_ISA64R2
-
-
-/* CPU defines, use instead of hardcoding processor number. Keep this
- in sync with bfd/archures.c in order for machine selection to work. */
-#define CPU_UNKNOWN 0 /* Gas internal use. */
-#define CPU_R3000 3000
-#define CPU_R3900 3900
-#define CPU_R4000 4000
-#define CPU_R4010 4010
-#define CPU_VR4100 4100
-#define CPU_R4111 4111
-#define CPU_VR4120 4120
-#define CPU_R4300 4300
-#define CPU_R4400 4400
-#define CPU_R4600 4600
-#define CPU_R4650 4650
-#define CPU_R5000 5000
-#define CPU_VR5400 5400
-#define CPU_VR5500 5500
-#define CPU_R5900 5900
-#define CPU_R6000 6000
-#define CPU_RM7000 7000
-#define CPU_R8000 8000
-#define CPU_RM9000 9000
-#define CPU_R10000 10000
-#define CPU_R12000 12000
-#define CPU_R14000 14000
-#define CPU_R16000 16000
-#define CPU_MIPS16 16
-#define CPU_MIPS32 32
-#define CPU_MIPS32R2 33
-#define CPU_MIPS5 5
-#define CPU_MIPS64 64
-#define CPU_MIPS64R2 65
-#define CPU_SB1 12310201 /* octal 'SB', 01. */
-#define CPU_LOONGSON_2E 3001
-#define CPU_LOONGSON_2F 3002
-#define CPU_LOONGSON_3A 3003
-#define CPU_OCTEON 6501
-#define CPU_OCTEONP 6601
-#define CPU_OCTEON2 6502
-#define CPU_XLR 887682 /* decimal 'XLR' */
-
-/* Return true if the given CPU is included in INSN_* mask MASK. */
-
-static inline bfd_boolean
-cpu_is_member (int cpu, unsigned int mask)
-{
- switch (cpu)
- {
- case CPU_R4650:
- case CPU_RM7000:
- case CPU_RM9000:
- return (mask & INSN_4650) != 0;
-
- case CPU_R4010:
- return (mask & INSN_4010) != 0;
-
- case CPU_VR4100:
- return (mask & INSN_4100) != 0;
-
- case CPU_R3900:
- return (mask & INSN_3900) != 0;
-
- case CPU_R10000:
- case CPU_R12000:
- case CPU_R14000:
- case CPU_R16000:
- return (mask & INSN_10000) != 0;
-
- case CPU_SB1:
- return (mask & INSN_SB1) != 0;
-
- case CPU_R4111:
- return (mask & INSN_4111) != 0;
-
- case CPU_VR4120:
- return (mask & INSN_4120) != 0;
-
- case CPU_VR5400:
- return (mask & INSN_5400) != 0;
-
- case CPU_VR5500:
- return (mask & INSN_5500) != 0;
-
- case CPU_R5900:
- return (mask & INSN_5900) != 0;
-
- case CPU_LOONGSON_2E:
- return (mask & INSN_LOONGSON_2E) != 0;
-
- case CPU_LOONGSON_2F:
- return (mask & INSN_LOONGSON_2F) != 0;
-
- case CPU_LOONGSON_3A:
- return (mask & INSN_LOONGSON_3A) != 0;
-
- case CPU_OCTEON:
- return (mask & INSN_OCTEON) != 0;
-
- case CPU_OCTEONP:
- return (mask & INSN_OCTEONP) != 0;
-
- case CPU_OCTEON2:
- return (mask & INSN_OCTEON2) != 0;
-
- case CPU_XLR:
- return (mask & INSN_XLR) != 0;
-
- default:
- return FALSE;
- }
-}
-
-/* Test for membership in an ISA including chip specific ISAs. INSN
- is pointer to an element of the opcode table; ISA is the specified
- ISA/ASE bitmask to test against; and CPU is the CPU specific ISA to
- test, or zero if no CPU specific ISA test is desired. Return true
- if instruction INSN is available to the given ISA and CPU. */
-
-static inline bfd_boolean
-opcode_is_member (const struct mips_opcode *insn, int isa, int ase, int cpu)
-{
- if (!cpu_is_member (cpu, insn->exclusions))
- {
- /* Test for ISA level compatibility. */
- if ((isa & INSN_ISA_MASK) != 0
- && (insn->membership & INSN_ISA_MASK) != 0
- && ((mips_isa_table[(isa & INSN_ISA_MASK) - 1]
- >> ((insn->membership & INSN_ISA_MASK) - 1)) & 1) != 0)
- return TRUE;
-
- /* Test for ASE compatibility. */
- if ((ase & insn->ase) != 0)
- return TRUE;
-
- /* Test for processor-specific extensions. */
- if (cpu_is_member (cpu, insn->membership))
- return TRUE;
- }
- return FALSE;
-}
-
-/* This is a list of macro expanded instructions.
-
- _I appended means immediate
- _A appended means target address of a jump
- _AB appended means address with (possibly zero) base register
- _D appended means 64 bit floating point constant
- _S appended means 32 bit floating point constant. */
-
-enum
-{
- M_ABS,
- M_ACLR_AB,
- M_ADD_I,
- M_ADDU_I,
- M_AND_I,
- M_ASET_AB,
- M_BALIGN,
- M_BC1FL,
- M_BC1TL,
- M_BC2FL,
- M_BC2TL,
- M_BEQ,
- M_BEQ_I,
- M_BEQL,
- M_BEQL_I,
- M_BGE,
- M_BGEL,
- M_BGE_I,
- M_BGEL_I,
- M_BGEU,
- M_BGEUL,
- M_BGEU_I,
- M_BGEUL_I,
- M_BGEZ,
- M_BGEZL,
- M_BGEZALL,
- M_BGT,
- M_BGTL,
- M_BGT_I,
- M_BGTL_I,
- M_BGTU,
- M_BGTUL,
- M_BGTU_I,
- M_BGTUL_I,
- M_BGTZ,
- M_BGTZL,
- M_BLE,
- M_BLEL,
- M_BLE_I,
- M_BLEL_I,
- M_BLEU,
- M_BLEUL,
- M_BLEU_I,
- M_BLEUL_I,
- M_BLEZ,
- M_BLEZL,
- M_BLT,
- M_BLTL,
- M_BLT_I,
- M_BLTL_I,
- M_BLTU,
- M_BLTUL,
- M_BLTU_I,
- M_BLTUL_I,
- M_BLTZ,
- M_BLTZL,
- M_BLTZALL,
- M_BNE,
- M_BNEL,
- M_BNE_I,
- M_BNEL_I,
- M_CACHE_AB,
- M_CACHEE_AB,
- M_DABS,
- M_DADD_I,
- M_DADDU_I,
- M_DDIV_3,
- M_DDIV_3I,
- M_DDIVU_3,
- M_DDIVU_3I,
- M_DIV_3,
- M_DIV_3I,
- M_DIVU_3,
- M_DIVU_3I,
- M_DLA_AB,
- M_DLCA_AB,
- M_DLI,
- M_DMUL,
- M_DMUL_I,
- M_DMULO,
- M_DMULO_I,
- M_DMULOU,
- M_DMULOU_I,
- M_DREM_3,
- M_DREM_3I,
- M_DREMU_3,
- M_DREMU_3I,
- M_DSUB_I,
- M_DSUBU_I,
- M_DSUBU_I_2,
- M_J_A,
- M_JAL_1,
- M_JAL_2,
- M_JAL_A,
- M_JALS_1,
- M_JALS_2,
- M_JALS_A,
- M_JRADDIUSP,
- M_JRC,
- M_L_DAB,
- M_LA_AB,
- M_LB_AB,
- M_LBE_AB,
- M_LBU_AB,
- M_LBUE_AB,
- M_LCA_AB,
- M_LD_AB,
- M_LDC1_AB,
- M_LDC2_AB,
- M_LQC2_AB,
- M_LDC3_AB,
- M_LDL_AB,
- M_LDM_AB,
- M_LDP_AB,
- M_LDR_AB,
- M_LH_AB,
- M_LHE_AB,
- M_LHU_AB,
- M_LHUE_AB,
- M_LI,
- M_LI_D,
- M_LI_DD,
- M_LI_S,
- M_LI_SS,
- M_LL_AB,
- M_LLD_AB,
- M_LLE_AB,
- M_LQ_AB,
- M_LW_AB,
- M_LWE_AB,
- M_LWC0_AB,
- M_LWC1_AB,
- M_LWC2_AB,
- M_LWC3_AB,
- M_LWL_AB,
- M_LWLE_AB,
- M_LWM_AB,
- M_LWP_AB,
- M_LWR_AB,
- M_LWRE_AB,
- M_LWU_AB,
- M_MSGSND,
- M_MSGLD,
- M_MSGLD_T,
- M_MSGWAIT,
- M_MSGWAIT_T,
- M_MOVE,
- M_MOVEP,
- M_MUL,
- M_MUL_I,
- M_MULO,
- M_MULO_I,
- M_MULOU,
- M_MULOU_I,
- M_NOR_I,
- M_OR_I,
- M_PREF_AB,
- M_PREFE_AB,
- M_REM_3,
- M_REM_3I,
- M_REMU_3,
- M_REMU_3I,
- M_DROL,
- M_ROL,
- M_DROL_I,
- M_ROL_I,
- M_DROR,
- M_ROR,
- M_DROR_I,
- M_ROR_I,
- M_S_DA,
- M_S_DAB,
- M_S_S,
- M_SAA_AB,
- M_SAAD_AB,
- M_SC_AB,
- M_SCD_AB,
- M_SCE_AB,
- M_SD_AB,
- M_SDC1_AB,
- M_SDC2_AB,
- M_SQC2_AB,
- M_SDC3_AB,
- M_SDL_AB,
- M_SDM_AB,
- M_SDP_AB,
- M_SDR_AB,
- M_SEQ,
- M_SEQ_I,
- M_SGE,
- M_SGE_I,
- M_SGEU,
- M_SGEU_I,
- M_SGT,
- M_SGT_I,
- M_SGTU,
- M_SGTU_I,
- M_SLE,
- M_SLE_I,
- M_SLEU,
- M_SLEU_I,
- M_SLT_I,
- M_SLTU_I,
- M_SNE,
- M_SNE_I,
- M_SB_AB,
- M_SBE_AB,
- M_SH_AB,
- M_SHE_AB,
- M_SQ_AB,
- M_SW_AB,
- M_SWE_AB,
- M_SWC0_AB,
- M_SWC1_AB,
- M_SWC2_AB,
- M_SWC3_AB,
- M_SWL_AB,
- M_SWLE_AB,
- M_SWM_AB,
- M_SWP_AB,
- M_SWR_AB,
- M_SWRE_AB,
- M_SUB_I,
- M_SUBU_I,
- M_SUBU_I_2,
- M_TEQ_I,
- M_TGE_I,
- M_TGEU_I,
- M_TLT_I,
- M_TLTU_I,
- M_TNE_I,
- M_TRUNCWD,
- M_TRUNCWS,
- M_ULD_AB,
- M_ULH_AB,
- M_ULHU_AB,
- M_ULW_AB,
- M_USH_AB,
- M_USW_AB,
- M_USD_AB,
- M_XOR_I,
- M_COP0,
- M_COP1,
- M_COP2,
- M_COP3,
- M_NUM_MACROS
-};
-
-
-/* The order of overloaded instructions matters. Label arguments and
- register arguments look the same. Instructions that can have either
- for arguments must apear in the correct order in this table for the
- assembler to pick the right one. In other words, entries with
- immediate operands must apear after the same instruction with
- registers.
-
- Many instructions are short hand for other instructions (i.e., The
- jal <register> instruction is short for jalr <register>). */
-
-extern const struct mips_operand mips_vu0_channel_mask;
-extern const struct mips_operand *decode_mips_operand (const char *);
-extern const struct mips_opcode mips_builtin_opcodes[];
-extern const int bfd_mips_num_builtin_opcodes;
-extern struct mips_opcode *mips_opcodes;
-extern int bfd_mips_num_opcodes;
-#define NUMOPCODES bfd_mips_num_opcodes
-
-
-/* The rest of this file adds definitions for the mips16 TinyRISC
- processor. */
-
-/* These are the bitmasks and shift counts used for the different
- fields in the instruction formats. Other than OP, no masks are
- provided for the fixed portions of an instruction, since they are
- not needed.
-
- The I format uses IMM11.
-
- The RI format uses RX and IMM8.
-
- The RR format uses RX, and RY.
-
- The RRI format uses RX, RY, and IMM5.
-
- The RRR format uses RX, RY, and RZ.
-
- The RRI_A format uses RX, RY, and IMM4.
-
- The SHIFT format uses RX, RY, and SHAMT.
-
- The I8 format uses IMM8.
-
- The I8_MOVR32 format uses RY and REGR32.
-
- The IR_MOV32R format uses REG32R and MOV32Z.
-
- The I64 format uses IMM8.
-
- The RI64 format uses RY and IMM5.
- */
-
-#define MIPS16OP_MASK_OP 0x1f
-#define MIPS16OP_SH_OP 11
-#define MIPS16OP_MASK_IMM11 0x7ff
-#define MIPS16OP_SH_IMM11 0
-#define MIPS16OP_MASK_RX 0x7
-#define MIPS16OP_SH_RX 8
-#define MIPS16OP_MASK_IMM8 0xff
-#define MIPS16OP_SH_IMM8 0
-#define MIPS16OP_MASK_RY 0x7
-#define MIPS16OP_SH_RY 5
-#define MIPS16OP_MASK_IMM5 0x1f
-#define MIPS16OP_SH_IMM5 0
-#define MIPS16OP_MASK_RZ 0x7
-#define MIPS16OP_SH_RZ 2
-#define MIPS16OP_MASK_IMM4 0xf
-#define MIPS16OP_SH_IMM4 0
-#define MIPS16OP_MASK_REGR32 0x1f
-#define MIPS16OP_SH_REGR32 0
-#define MIPS16OP_MASK_REG32R 0x1f
-#define MIPS16OP_SH_REG32R 3
-#define MIPS16OP_EXTRACT_REG32R(i) ((((i) >> 5) & 7) | ((i) & 0x18))
-#define MIPS16OP_MASK_MOVE32Z 0x7
-#define MIPS16OP_SH_MOVE32Z 0
-#define MIPS16OP_MASK_IMM6 0x3f
-#define MIPS16OP_SH_IMM6 5
-
-/* These are the characters which may appears in the args field of a MIPS16
- instruction. They appear in the order in which the fields appear when the
- instruction is used. Commas and parentheses in the args string are ignored
- when assembling, and written into the output when disassembling.
-
- "y" 3 bit register (MIPS16OP_*_RY)
- "x" 3 bit register (MIPS16OP_*_RX)
- "z" 3 bit register (MIPS16OP_*_RZ)
- "Z" 3 bit register (MIPS16OP_*_MOVE32Z)
- "v" 3 bit same register as source and destination (MIPS16OP_*_RX)
- "w" 3 bit same register as source and destination (MIPS16OP_*_RY)
- "0" zero register ($0)
- "S" stack pointer ($sp or $29)
- "P" program counter
- "R" return address register ($ra or $31)
- "X" 5 bit MIPS register (MIPS16OP_*_REGR32)
- "Y" 5 bit MIPS register (MIPS16OP_*_REG32R)
- "6" 6 bit unsigned break code (MIPS16OP_*_IMM6)
- "a" 26 bit jump address
- "i" likewise, but flips bit 0
- "e" 11 bit extension value
- "l" register list for entry instruction
- "L" register list for exit instruction
-
- "I" an immediate value used for macros
-
- The remaining codes may be extended. Except as otherwise noted,
- the full extended operand is a 16 bit signed value.
- "<" 3 bit unsigned shift count * 0 (MIPS16OP_*_RZ) (full 5 bit unsigned)
- ">" 3 bit unsigned shift count * 0 (MIPS16OP_*_RX) (full 5 bit unsigned)
- "[" 3 bit unsigned shift count * 0 (MIPS16OP_*_RZ) (full 6 bit unsigned)
- "]" 3 bit unsigned shift count * 0 (MIPS16OP_*_RX) (full 6 bit unsigned)
- "4" 4 bit signed immediate * 0 (MIPS16OP_*_IMM4) (full 15 bit signed)
- "5" 5 bit unsigned immediate * 0 (MIPS16OP_*_IMM5)
- "H" 5 bit unsigned immediate * 2 (MIPS16OP_*_IMM5)
- "W" 5 bit unsigned immediate * 4 (MIPS16OP_*_IMM5)
- "D" 5 bit unsigned immediate * 8 (MIPS16OP_*_IMM5)
- "j" 5 bit signed immediate * 0 (MIPS16OP_*_IMM5)
- "8" 8 bit unsigned immediate * 0 (MIPS16OP_*_IMM8)
- "V" 8 bit unsigned immediate * 4 (MIPS16OP_*_IMM8)
- "C" 8 bit unsigned immediate * 8 (MIPS16OP_*_IMM8)
- "U" 8 bit unsigned immediate * 0 (MIPS16OP_*_IMM8) (full 16 bit unsigned)
- "k" 8 bit signed immediate * 0 (MIPS16OP_*_IMM8)
- "K" 8 bit signed immediate * 8 (MIPS16OP_*_IMM8)
- "p" 8 bit conditional branch address (MIPS16OP_*_IMM8)
- "q" 11 bit branch address (MIPS16OP_*_IMM11)
- "A" 8 bit PC relative address * 4 (MIPS16OP_*_IMM8)
- "B" 5 bit PC relative address * 8 (MIPS16OP_*_IMM5)
- "E" 5 bit PC relative address * 4 (MIPS16OP_*_IMM5)
- "m" 7 bit register list for save instruction (18 bit extended)
- "M" 7 bit register list for restore instruction (18 bit extended)
- */
-
-/* Save/restore encoding for the args field when all 4 registers are
- either saved as arguments or saved/restored as statics. */
-#define MIPS16_ALL_ARGS 0xe
-#define MIPS16_ALL_STATICS 0xb
-
-/* The following flags have the same value for the mips16 opcode
- table:
-
- INSN_ISA3
-
- INSN_UNCOND_BRANCH_DELAY
- INSN_COND_BRANCH_DELAY
- INSN_COND_BRANCH_LIKELY (never used)
- INSN_READ_HI
- INSN_READ_LO
- INSN_WRITE_HI
- INSN_WRITE_LO
- INSN_TRAP
- FP_D (never used)
- */
-
-extern const struct mips_operand *decode_mips16_operand (char, bfd_boolean);
-extern const struct mips_opcode mips16_opcodes[];
-extern const int bfd_mips16_num_opcodes;
-
-/* These are the bit masks and shift counts used for the different fields
- in the microMIPS instruction formats. No masks are provided for the
- fixed portions of an instruction, since they are not needed. */
-
-#define MICROMIPSOP_MASK_IMMEDIATE 0xffff
-#define MICROMIPSOP_SH_IMMEDIATE 0
-#define MICROMIPSOP_MASK_DELTA 0xffff
-#define MICROMIPSOP_SH_DELTA 0
-#define MICROMIPSOP_MASK_CODE10 0x3ff
-#define MICROMIPSOP_SH_CODE10 16 /* 10-bit wait code. */
-#define MICROMIPSOP_MASK_TRAP 0xf
-#define MICROMIPSOP_SH_TRAP 12 /* 4-bit trap code. */
-#define MICROMIPSOP_MASK_SHAMT 0x1f
-#define MICROMIPSOP_SH_SHAMT 11
-#define MICROMIPSOP_MASK_TARGET 0x3ffffff
-#define MICROMIPSOP_SH_TARGET 0
-#define MICROMIPSOP_MASK_EXTLSB 0x1f /* "ext" LSB. */
-#define MICROMIPSOP_SH_EXTLSB 6
-#define MICROMIPSOP_MASK_EXTMSBD 0x1f /* "ext" MSBD. */
-#define MICROMIPSOP_SH_EXTMSBD 11
-#define MICROMIPSOP_MASK_INSMSB 0x1f /* "ins" MSB. */
-#define MICROMIPSOP_SH_INSMSB 11
-#define MICROMIPSOP_MASK_CODE 0x3ff
-#define MICROMIPSOP_SH_CODE 16 /* 10-bit higher break code. */
-#define MICROMIPSOP_MASK_CODE2 0x3ff
-#define MICROMIPSOP_SH_CODE2 6 /* 10-bit lower break code. */
-#define MICROMIPSOP_MASK_CACHE 0x1f
-#define MICROMIPSOP_SH_CACHE 21 /* 5-bit cache op. */
-#define MICROMIPSOP_MASK_SEL 0x7
-#define MICROMIPSOP_SH_SEL 11
-#define MICROMIPSOP_MASK_OFFSET12 0xfff
-#define MICROMIPSOP_SH_OFFSET12 0
-#define MICROMIPSOP_MASK_3BITPOS 0x7
-#define MICROMIPSOP_SH_3BITPOS 21
-#define MICROMIPSOP_MASK_STYPE 0x1f
-#define MICROMIPSOP_SH_STYPE 16
-#define MICROMIPSOP_MASK_OFFSET10 0x3ff
-#define MICROMIPSOP_SH_OFFSET10 6
-#define MICROMIPSOP_MASK_RS 0x1f
-#define MICROMIPSOP_SH_RS 16
-#define MICROMIPSOP_MASK_RT 0x1f
-#define MICROMIPSOP_SH_RT 21
-#define MICROMIPSOP_MASK_RD 0x1f
-#define MICROMIPSOP_SH_RD 11
-#define MICROMIPSOP_MASK_FS 0x1f
-#define MICROMIPSOP_SH_FS 16
-#define MICROMIPSOP_MASK_FT 0x1f
-#define MICROMIPSOP_SH_FT 21
-#define MICROMIPSOP_MASK_FD 0x1f
-#define MICROMIPSOP_SH_FD 11
-#define MICROMIPSOP_MASK_FR 0x1f
-#define MICROMIPSOP_SH_FR 6
-#define MICROMIPSOP_MASK_RS3 0x1f
-#define MICROMIPSOP_SH_RS3 6
-#define MICROMIPSOP_MASK_PREFX 0x1f
-#define MICROMIPSOP_SH_PREFX 11
-#define MICROMIPSOP_MASK_BCC 0x7
-#define MICROMIPSOP_SH_BCC 18
-#define MICROMIPSOP_MASK_CCC 0x7
-#define MICROMIPSOP_SH_CCC 13
-#define MICROMIPSOP_MASK_COPZ 0x7fffff
-#define MICROMIPSOP_SH_COPZ 3
-
-#define MICROMIPSOP_MASK_MB 0x7
-#define MICROMIPSOP_SH_MB 23
-#define MICROMIPSOP_MASK_MC 0x7
-#define MICROMIPSOP_SH_MC 4
-#define MICROMIPSOP_MASK_MD 0x7
-#define MICROMIPSOP_SH_MD 7
-#define MICROMIPSOP_MASK_ME 0x7
-#define MICROMIPSOP_SH_ME 1
-#define MICROMIPSOP_MASK_MF 0x7
-#define MICROMIPSOP_SH_MF 3
-#define MICROMIPSOP_MASK_MG 0x7
-#define MICROMIPSOP_SH_MG 0
-#define MICROMIPSOP_MASK_MH 0x7
-#define MICROMIPSOP_SH_MH 7
-#define MICROMIPSOP_MASK_MJ 0x1f
-#define MICROMIPSOP_SH_MJ 0
-#define MICROMIPSOP_MASK_ML 0x7
-#define MICROMIPSOP_SH_ML 4
-#define MICROMIPSOP_MASK_MM 0x7
-#define MICROMIPSOP_SH_MM 1
-#define MICROMIPSOP_MASK_MN 0x7
-#define MICROMIPSOP_SH_MN 4
-#define MICROMIPSOP_MASK_MP 0x1f
-#define MICROMIPSOP_SH_MP 5
-#define MICROMIPSOP_MASK_MQ 0x7
-#define MICROMIPSOP_SH_MQ 7
-
-#define MICROMIPSOP_MASK_IMMA 0x7f
-#define MICROMIPSOP_SH_IMMA 0
-#define MICROMIPSOP_MASK_IMMB 0x7
-#define MICROMIPSOP_SH_IMMB 1
-#define MICROMIPSOP_MASK_IMMC 0xf
-#define MICROMIPSOP_SH_IMMC 0
-#define MICROMIPSOP_MASK_IMMD 0x3ff
-#define MICROMIPSOP_SH_IMMD 0
-#define MICROMIPSOP_MASK_IMME 0x7f
-#define MICROMIPSOP_SH_IMME 0
-#define MICROMIPSOP_MASK_IMMF 0xf
-#define MICROMIPSOP_SH_IMMF 0
-#define MICROMIPSOP_MASK_IMMG 0xf
-#define MICROMIPSOP_SH_IMMG 0
-#define MICROMIPSOP_MASK_IMMH 0xf
-#define MICROMIPSOP_SH_IMMH 0
-#define MICROMIPSOP_MASK_IMMI 0x7f
-#define MICROMIPSOP_SH_IMMI 0
-#define MICROMIPSOP_MASK_IMMJ 0xf
-#define MICROMIPSOP_SH_IMMJ 0
-#define MICROMIPSOP_MASK_IMML 0xf
-#define MICROMIPSOP_SH_IMML 0
-#define MICROMIPSOP_MASK_IMMM 0x7
-#define MICROMIPSOP_SH_IMMM 1
-#define MICROMIPSOP_MASK_IMMN 0x3
-#define MICROMIPSOP_SH_IMMN 4
-#define MICROMIPSOP_MASK_IMMO 0xf
-#define MICROMIPSOP_SH_IMMO 0
-#define MICROMIPSOP_MASK_IMMP 0x1f
-#define MICROMIPSOP_SH_IMMP 0
-#define MICROMIPSOP_MASK_IMMQ 0x7fffff
-#define MICROMIPSOP_SH_IMMQ 0
-#define MICROMIPSOP_MASK_IMMU 0x1f
-#define MICROMIPSOP_SH_IMMU 0
-#define MICROMIPSOP_MASK_IMMW 0x3f
-#define MICROMIPSOP_SH_IMMW 1
-#define MICROMIPSOP_MASK_IMMX 0xf
-#define MICROMIPSOP_SH_IMMX 1
-#define MICROMIPSOP_MASK_IMMY 0x1ff
-#define MICROMIPSOP_SH_IMMY 1
-
-/* MIPS DSP ASE */
-#define MICROMIPSOP_MASK_DSPACC 0x3
-#define MICROMIPSOP_SH_DSPACC 14
-#define MICROMIPSOP_MASK_DSPSFT 0x3f
-#define MICROMIPSOP_SH_DSPSFT 16
-#define MICROMIPSOP_MASK_SA3 0x7
-#define MICROMIPSOP_SH_SA3 13
-#define MICROMIPSOP_MASK_SA4 0xf
-#define MICROMIPSOP_SH_SA4 12
-#define MICROMIPSOP_MASK_IMM8 0xff
-#define MICROMIPSOP_SH_IMM8 13
-#define MICROMIPSOP_MASK_IMM10 0x3ff
-#define MICROMIPSOP_SH_IMM10 16
-#define MICROMIPSOP_MASK_WRDSP 0x3f
-#define MICROMIPSOP_SH_WRDSP 14
-#define MICROMIPSOP_MASK_BP 0x3
-#define MICROMIPSOP_SH_BP 14
-
-/* Placeholders for fields that only exist in the traditional 32-bit
- instruction encoding; see the comment above for details. */
-#define MICROMIPSOP_MASK_CODE20 0
-#define MICROMIPSOP_SH_CODE20 0
-#define MICROMIPSOP_MASK_PERFREG 0
-#define MICROMIPSOP_SH_PERFREG 0
-#define MICROMIPSOP_MASK_CODE19 0
-#define MICROMIPSOP_SH_CODE19 0
-#define MICROMIPSOP_MASK_ALN 0
-#define MICROMIPSOP_SH_ALN 0
-#define MICROMIPSOP_MASK_VECBYTE 0
-#define MICROMIPSOP_SH_VECBYTE 0
-#define MICROMIPSOP_MASK_VECALIGN 0
-#define MICROMIPSOP_SH_VECALIGN 0
-#define MICROMIPSOP_MASK_DSPACC_S 0
-#define MICROMIPSOP_SH_DSPACC_S 0
-#define MICROMIPSOP_MASK_DSPSFT_7 0
-#define MICROMIPSOP_SH_DSPSFT_7 0
-#define MICROMIPSOP_MASK_RDDSP 0
-#define MICROMIPSOP_SH_RDDSP 0
-#define MICROMIPSOP_MASK_MT_U 0
-#define MICROMIPSOP_SH_MT_U 0
-#define MICROMIPSOP_MASK_MT_H 0
-#define MICROMIPSOP_SH_MT_H 0
-#define MICROMIPSOP_MASK_MTACC_T 0
-#define MICROMIPSOP_SH_MTACC_T 0
-#define MICROMIPSOP_MASK_MTACC_D 0
-#define MICROMIPSOP_SH_MTACC_D 0
-#define MICROMIPSOP_MASK_BBITIND 0
-#define MICROMIPSOP_SH_BBITIND 0
-#define MICROMIPSOP_MASK_CINSPOS 0
-#define MICROMIPSOP_SH_CINSPOS 0
-#define MICROMIPSOP_MASK_CINSLM1 0
-#define MICROMIPSOP_SH_CINSLM1 0
-#define MICROMIPSOP_MASK_SEQI 0
-#define MICROMIPSOP_SH_SEQI 0
-#define MICROMIPSOP_SH_OFFSET_A 0
-#define MICROMIPSOP_MASK_OFFSET_A 0
-#define MICROMIPSOP_SH_OFFSET_B 0
-#define MICROMIPSOP_MASK_OFFSET_B 0
-#define MICROMIPSOP_SH_OFFSET_C 0
-#define MICROMIPSOP_MASK_OFFSET_C 0
-#define MICROMIPSOP_SH_RZ 0
-#define MICROMIPSOP_MASK_RZ 0
-#define MICROMIPSOP_SH_FZ 0
-#define MICROMIPSOP_MASK_FZ 0
-
-/* microMIPS Enhanced VA Scheme */
-#define MICROMIPSOP_SH_EVAOFFSET 0
-#define MICROMIPSOP_MASK_EVAOFFSET 0x1ff
-
-/* These are the characters which may appears in the args field of a microMIPS
- instruction. They appear in the order in which the fields appear
- when the instruction is used. Commas and parentheses in the args
- string are ignored when assembling, and written into the output
- when disassembling.
-
- The followings are for 16-bit microMIPS instructions.
-
- "ma" must be $28
- "mc" 3-bit MIPS registers 2-7, 16, 17 (MICROMIPSOP_*_MC) at bit 4
- The same register used as both source and target.
- "md" 3-bit MIPS registers 2-7, 16, 17 (MICROMIPSOP_*_MD) at bit 7
- "me" 3-bit MIPS registers 2-7, 16, 17 (MICROMIPSOP_*_ME) at bit 1
- The same register used as both source and target.
- "mf" 3-bit MIPS registers 2-7, 16, 17 (MICROMIPSOP_*_MF) at bit 3
- "mg" 3-bit MIPS registers 2-7, 16, 17 (MICROMIPSOP_*_MG) at bit 0
- "mh" 3-bit MIPS register pair (MICROMIPSOP_*_MH) at bit 7
- "mj" 5-bit MIPS registers (MICROMIPSOP_*_MJ) at bit 0
- "ml" 3-bit MIPS registers 2-7, 16, 17 (MICROMIPSOP_*_ML) at bit 4
- "mm" 3-bit MIPS registers 0, 2, 3, 16-20 (MICROMIPSOP_*_MM) at bit 1
- "mn" 3-bit MIPS registers 0, 2, 3, 16-20 (MICROMIPSOP_*_MN) at bit 4
- "mp" 5-bit MIPS registers (MICROMIPSOP_*_MP) at bit 5
- "mq" 3-bit MIPS registers 0, 2-7, 17 (MICROMIPSOP_*_MQ) at bit 7
- "mr" must be program counter
- "ms" must be $29
- "mt" must be the same as the previous register
- "mx" must be the same as the destination register
- "my" must be $31
- "mz" must be $0
-
- "mA" 7-bit immediate (-64 .. 63) << 2 (MICROMIPSOP_*_IMMA)
- "mB" 3-bit immediate (-1, 1, 4, 8, 12, 16, 20, 24) (MICROMIPSOP_*_IMMB)
- "mC" 4-bit immediate (1, 2, 3, 4, 7, 8, 15, 16, 31, 32, 63, 64, 128, 255,
- 32768, 65535) (MICROMIPSOP_*_IMMC)
- "mD" 10-bit branch address (-512 .. 511) << 1 (MICROMIPSOP_*_IMMD)
- "mE" 7-bit branch address (-64 .. 63) << 1 (MICROMIPSOP_*_IMME)
- "mF" 4-bit immediate (0 .. 15) (MICROMIPSOP_*_IMMF)
- "mG" 4-bit immediate (-1 .. 14) (MICROMIPSOP_*_IMMG)
- "mH" 4-bit immediate (0 .. 15) << 1 (MICROMIPSOP_*_IMMH)
- "mI" 7-bit immediate (-1 .. 126) (MICROMIPSOP_*_IMMI)
- "mJ" 4-bit immediate (0 .. 15) << 2 (MICROMIPSOP_*_IMMJ)
- "mL" 4-bit immediate (0 .. 15) (MICROMIPSOP_*_IMML)
- "mM" 3-bit immediate (1 .. 8) (MICROMIPSOP_*_IMMM)
- "mN" 2-bit immediate (0 .. 3) for register list (MICROMIPSOP_*_IMMN)
- "mO" 4-bit immediate (0 .. 15) (MICROMIPSOP_*_IMML)
- "mP" 5-bit immediate (0 .. 31) << 2 (MICROMIPSOP_*_IMMP)
- "mU" 5-bit immediate (0 .. 31) << 2 (MICROMIPSOP_*_IMMU)
- "mW" 6-bit immediate (0 .. 63) << 2 (MICROMIPSOP_*_IMMW)
- "mX" 4-bit immediate (-8 .. 7) (MICROMIPSOP_*_IMMX)
- "mY" 9-bit immediate (-258 .. -3, 2 .. 257) << 2 (MICROMIPSOP_*_IMMY)
- "mZ" must be zero
-
- In most cases 32-bit microMIPS instructions use the same characters
- as MIPS (with ADDIUPC being a notable exception, but there are some
- others too).
-
- "." 10-bit signed offset/number (MICROMIPSOP_*_OFFSET10)
- "1" 5-bit sync type (MICROMIPSOP_*_STYPE)
- "<" 5-bit shift amount (MICROMIPSOP_*_SHAMT)
- ">" shift amount between 32 and 63, stored after subtracting 32
- (MICROMIPSOP_*_SHAMT)
- "\" 3-bit position for ASET and ACLR (MICROMIPSOP_*_3BITPOS)
- "|" 4-bit trap code (MICROMIPSOP_*_TRAP)
- "~" 12-bit signed offset (MICROMIPSOP_*_OFFSET12)
- "a" 26-bit target address (MICROMIPSOP_*_TARGET)
- "+i" likewise, but flips bit 0
- "b" 5-bit base register (MICROMIPSOP_*_RS)
- "c" 10-bit higher breakpoint code (MICROMIPSOP_*_CODE)
- "d" 5-bit destination register specifier (MICROMIPSOP_*_RD)
- "h" 5-bit PREFX hint (MICROMIPSOP_*_PREFX)
- "i" 16-bit unsigned immediate (MICROMIPSOP_*_IMMEDIATE)
- "j" 16-bit signed immediate (MICROMIPSOP_*_DELTA)
- "k" 5-bit cache opcode in target register position (MICROMIPSOP_*_CACHE)
- "n" register list for 32-bit LWM/SWM instruction (MICROMIPSOP_*_RT)
- "o" 16-bit signed offset (MICROMIPSOP_*_DELTA)
- "p" 16-bit PC-relative branch target address (MICROMIPSOP_*_DELTA)
- "q" 10-bit lower breakpoint code (MICROMIPSOP_*_CODE2)
- "r" 5-bit same register used as both source and target (MICROMIPSOP_*_RS)
- "s" 5-bit source register specifier (MICROMIPSOP_*_RS)
- "t" 5-bit target register (MICROMIPSOP_*_RT)
- "u" 16-bit upper 16 bits of address (MICROMIPSOP_*_IMMEDIATE)
- "v" 5-bit same register used as both source and destination
- (MICROMIPSOP_*_RS)
- "w" 5-bit same register used as both target and destination
- (MICROMIPSOP_*_RT)
- "y" 5-bit source 3 register for ALNV.PS (MICROMIPSOP_*_RS3)
- "z" must be zero register
- "C" 23-bit coprocessor function code (MICROMIPSOP_*_COPZ)
- "B" 10-bit syscall/wait function code (MICROMIPSOP_*_CODE10)
- "K" 5-bit Hardware Register (RDHWR instruction) (MICROMIPSOP_*_RS)
-
- "+A" 5-bit INS/EXT/DINS/DEXT/DINSM/DEXTM position, which becomes
- LSB (MICROMIPSOP_*_EXTLSB).
- Enforces: 0 <= pos < 32.
- "+B" 5-bit INS/DINS size, which becomes MSB (MICROMIPSOP_*_INSMSB).
- Requires that "+A" or "+E" occur first to set position.
- Enforces: 0 < (pos+size) <= 32.
- "+C" 5-bit EXT/DEXT size, which becomes MSBD (MICROMIPSOP_*_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 DINSU/DEXTU position, which becomes LSB-32 (MICROMIPSOP_*_EXTLSB).
- Enforces: 32 <= pos < 64.
- "+F" 5-bit DINSM/DINSU size, which becomes MSB-32 (MICROMIPSOP_*_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 (MICROMIPSOP_*_EXTMSBD).
- Requires that "+A" or "+E" occur first to set position.
- Enforces: 32 < (pos+size) <= 64.
- "+H" 5-bit DEXTU size, which becomes MSBD (MICROMIPSOP_*_EXTMSBD).
- Requires that "+A" or "+E" occur first to set position.
- Enforces: 32 < (pos+size) <= 64.
-
- PC-relative addition (ADDIUPC) instruction:
- "mQ" 23-bit offset (-4194304 .. 4194303) << 2 (MICROMIPSOP_*_IMMQ)
- "mb" 3-bit MIPS registers 2-7, 16, 17 (MICROMIPSOP_*_MB) at bit 23
-
- Floating point instructions:
- "D" 5-bit destination register (MICROMIPSOP_*_FD)
- "M" 3-bit compare condition code (MICROMIPSOP_*_CCC)
- "N" 3-bit branch condition code (MICROMIPSOP_*_BCC)
- "R" 5-bit fr source 3 register (MICROMIPSOP_*_FR)
- "S" 5-bit fs source 1 register (MICROMIPSOP_*_FS)
- "T" 5-bit ft source 2 register (MICROMIPSOP_*_FT)
- "V" 5-bit same register used as floating source and destination or target
- (MICROMIPSOP_*_FS)
-
- Coprocessor instructions:
- "E" 5-bit target register (MICROMIPSOP_*_RT)
- "G" 5-bit source register (MICROMIPSOP_*_RS)
- "H" 3-bit sel field for (D)MTC* and (D)MFC* (MICROMIPSOP_*_SEL)
-
- Macro instructions:
- "A" general 32 bit expression
- "I" 32-bit immediate (value placed in imm_expr).
- "F" 64-bit floating point constant in .rdata
- "L" 64-bit floating point constant in .lit8
- "f" 32-bit floating point constant
- "l" 32-bit floating point constant in .lit4
-
- DSP ASE usage:
- "2" 2-bit unsigned immediate for byte align (MICROMIPSOP_*_BP)
- "3" 3-bit unsigned immediate (MICROMIPSOP_*_SA3)
- "4" 4-bit unsigned immediate (MICROMIPSOP_*_SA4)
- "5" 8-bit unsigned immediate (MICROMIPSOP_*_IMM8)
- "6" 5-bit unsigned immediate (MICROMIPSOP_*_RS)
- "7" 2-bit DSP accumulator register (MICROMIPSOP_*_DSPACC)
- "8" 6-bit unsigned immediate (MICROMIPSOP_*_WRDSP)
- "0" 6-bit signed immediate (MICROMIPSOP_*_DSPSFT)
- "@" 10-bit signed immediate (MICROMIPSOP_*_IMM10)
- "^" 5-bit unsigned immediate (MICROMIPSOP_*_RD)
-
- microMIPS Enhanced VA Scheme:
- "+j" 9-bit signed offset in bit 0 (OP_*_EVAOFFSET)
-
- MSA Extension:
- "+d" 5-bit MSA register (FD)
- "+e" 5-bit MSA register (FS)
- "+h" 5-bit MSA register (FT)
- "+k" 5-bit GPR at bit 6
- "+l" 5-bit MSA control register at bit 6
- "+n" 5-bit MSA control register at bit 11
- "+o" 5-bit vector element index at bit 16
- "+u" 4-bit vector element index at bit 16
- "+v" 3-bit vector element index at bit 16
- "+w" 2-bit vector element index at bit 16
- "+x" 5-bit shift amount at bit 16
- "+T" (-512 .. 511) << 0 at bit 16
- "+U" (-512 .. 511) << 1 at bit 16
- "+V" (-512 .. 511) << 2 at bit 16
- "+W" (-512 .. 511) << 3 at bit 16
- "+~" 2 bit LSA/DLSA shift amount from 1 to 4 at bit 6
- "+!" 3 bit unsigned bit position at bit 16
- "+@" 4 bit unsigned bit position at bit 16
- "+#" 6 bit unsigned bit position at bit 16
- "+$" 5 bit unsigned immediate at bit 16
- "+%" 5 bit signed immediate at bit 16
- "+^" 10 bit signed immediate at bit 11
- "+&" 0 vector element index
- "+*" 5-bit register vector element index at bit 16
- "+|" 8-bit mask at bit 16
-
- Other:
- "()" parens surrounding optional value
- "," separates operands
- "+" start of extension sequence
- "m" start of microMIPS extension sequence
-
- Characters used so far, for quick reference when adding more:
- "12345678 0"
- "<>(),+.@\^|~"
- "ABCDEFGHI KLMN RST V "
- "abcd f hijklmnopqrstuvw yz"
-
- Extension character sequences used so far ("+" followed by the
- following), for quick reference when adding more:
- ""
- "~!@#$%^&*|"
- "ABCEFGHTUVW"
- "dehijklnouvwx"
-
- Extension character sequences used so far ("m" followed by the
- following), for quick reference when adding more:
- ""
- ""
- " BCDEFGHIJ LMNOPQ U WXYZ"
- " bcdefghij lmn pq st xyz"
-*/
-
-extern const struct mips_operand *decode_micromips_operand (const char *);
-extern const struct mips_opcode micromips_opcodes[];
-extern const int bfd_micromips_num_opcodes;
-
-/* A NOP insn impemented as "or at,at,zero".
- Used to implement -mfix-loongson2f. */
-#define LOONGSON2F_NOP_INSN 0x00200825
-
-#endif /* _MIPS_H_ */
diff --git a/include/opcode/mmix.h b/include/opcode/mmix.h
deleted file mode 100644
index f931545d6..000000000
--- a/include/opcode/mmix.h
+++ /dev/null
@@ -1,187 +0,0 @@
-/* mmix.h -- Header file for MMIX opcode table
- Copyright (C) 2001, 2003, 2010 Free Software Foundation, Inc.
- Written by Hans-Peter Nilsson (hp@bitrange.com)
-
- This file is part of GDB, GAS, and the GNU binutils.
-
- GDB, GAS, and the GNU binutils are free software; you can redistribute
- them and/or modify them under the terms of the GNU General Public
- License as published by the Free Software Foundation; either version 3,
- or (at your option) any later version.
-
- GDB, GAS, and the GNU binutils are distributed in the hope that they
- 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 file; see the file COPYING3. If not, write to the Free
- Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-/* We could have just a char*[] table indexed by the register number, but
- that would not allow for synonyms. The table is terminated with an
- entry with a NULL name. */
-struct mmix_spec_reg
-{
- const char *name;
- unsigned int number;
-};
-
-/* General indication of the type of instruction. */
-enum mmix_insn_type
- {
- mmix_type_pseudo,
- mmix_type_normal,
- mmix_type_branch,
- mmix_type_condbranch,
- mmix_type_memaccess_octa,
- mmix_type_memaccess_tetra,
- mmix_type_memaccess_wyde,
- mmix_type_memaccess_byte,
- mmix_type_memaccess_block,
- mmix_type_jsr
- };
-
-/* Type of operands an instruction takes. Use when parsing assembly code
- and disassembling. */
-enum mmix_operands_type
- {
- mmix_operands_none = 0,
-
- /* All operands are registers: "$X,$Y,$Z". */
- mmix_operands_regs,
-
- /* "$X,YZ", like SETH. */
- mmix_operands_reg_yz,
-
- /* The regular "$X,$Y,$Z|Z".
- The Z is optional; if only "$X,$Y" is given, then "$X,$Y,0" is
- assumed. */
- mmix_operands_regs_z_opt,
-
- /* The regular "$X,$Y,$Z|Z". */
- mmix_operands_regs_z,
-
- /* "Address"; only JMP. Zero operands allowed unless GNU syntax. */
- mmix_operands_jmp,
-
- /* "$X|X,$Y,$Z|Z": PUSHGO; like "3", but X can be expressed as an
- integer. */
- mmix_operands_pushgo,
-
- /* Two registers or a register and a byte, like FLOT, possibly with
- rounding: "$X,$Z|Z" or "$X,ROUND_MODE,$Z|Z". */
- mmix_operands_roundregs_z,
-
- /* "X,YZ", POP. Unless GNU syntax, zero or one operand is allowed. */
- mmix_operands_pop,
-
- /* Two registers, possibly with rounding: "$X,$Z" or
- "$X,ROUND_MODE,$Z". */
- mmix_operands_roundregs,
-
- /* "XYZ", like SYNC. */
- mmix_operands_sync,
-
- /* "X,$Y,$Z|Z", like SYNCD. */
- mmix_operands_x_regs_z,
-
- /* "$X,Y,$Z|Z", like NEG and NEGU. The Y field is optional, default 0. */
- mmix_operands_neg,
-
- /* "$X,Address, like GETA or branches. */
- mmix_operands_regaddr,
-
- /* "$X|X,Address, like PUSHJ. */
- mmix_operands_pushj,
-
- /* "$X,spec_reg"; GET. */
- mmix_operands_get,
-
- /* "spec_reg,$Z|Z"; PUT. */
- mmix_operands_put,
-
- /* Two registers, "$X,$Y". */
- mmix_operands_set,
-
- /* "$X,0"; SAVE. */
- mmix_operands_save,
-
- /* "0,$Z"; UNSAVE. */
- mmix_operands_unsave,
-
- /* "X,Y,Z"; like SWYM or TRAP. Zero (or 1 if GNU syntax) to three
- operands, interpreted as 0; XYZ; X, YZ and X, Y, Z. */
- mmix_operands_xyz_opt,
-
- /* Just "Z", like RESUME. Unless GNU syntax, the operand can be omitted
- and will then be assumed zero. */
- mmix_operands_resume,
-
- /* These are specials to handle that pseudo-directives are specified
- like ordinary insns when being mmixal-compatible. They signify the
- specific pseudo-directive rather than the operands type. */
-
- /* LOC. */
- mmix_operands_loc,
-
- /* PREFIX. */
- mmix_operands_prefix,
-
- /* BYTE. */
- mmix_operands_byte,
-
- /* WYDE. */
- mmix_operands_wyde,
-
- /* TETRA. */
- mmix_operands_tetra,
-
- /* OCTA. */
- mmix_operands_octa,
-
- /* LOCAL. */
- mmix_operands_local,
-
- /* BSPEC. */
- mmix_operands_bspec,
-
- /* ESPEC. */
- mmix_operands_espec,
- };
-
-struct mmix_opcode
- {
- const char *name;
- unsigned long match;
- unsigned long lose;
- enum mmix_operands_type operands;
-
- /* This is used by the disassembly function. */
- enum mmix_insn_type type;
- };
-
-/* Declare the actual tables. */
-extern const struct mmix_opcode mmix_opcodes[];
-
-/* This one is terminated with an entry with a NULL name. */
-extern const struct mmix_spec_reg mmix_spec_regs[];
-
-/* Some insn values we use when padding and synthesizing address loads. */
-#define IMM_OFFSET_BIT 1
-#define COND_INV_BIT 0x8
-#define PRED_INV_BIT 0x10
-
-#define PUSHGO_INSN_BYTE 0xbe
-#define GO_INSN_BYTE 0x9e
-#define SETL_INSN_BYTE 0xe3
-#define INCML_INSN_BYTE 0xe6
-#define INCMH_INSN_BYTE 0xe5
-#define INCH_INSN_BYTE 0xe4
-#define SWYM_INSN_BYTE 0xfd
-#define JMP_INSN_BYTE 0xf0
-
-/* We can have 256 - 32 (local registers) - 1 ($255 is not allocatable)
- global registers. */
-#define MAX_GREGS 223
diff --git a/include/opcode/mn10200.h b/include/opcode/mn10200.h
deleted file mode 100644
index b597d7b4b..000000000
--- a/include/opcode/mn10200.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/* mn10200.h -- Header file for Matsushita 10200 opcode table
- Copyright 1996, 1997, 2010 Free Software Foundation, Inc.
- Written by Jeff Law, Cygnus Support
-
- This file is part of GDB, GAS, and the GNU binutils.
-
- GDB, GAS, and the GNU binutils are free software; you can redistribute
- them and/or modify them under the terms of the GNU General Public
- License as published by the Free Software Foundation; either version 3,
- or (at your option) any later version.
-
- GDB, GAS, and the GNU binutils are distributed in the hope that they
- 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 file; see the file COPYING3. If not, write to the Free
- Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef MN10200_H
-#define MN10200_H
-
-/* The opcode table is an array of struct mn10200_opcode. */
-
-struct mn10200_opcode
-{
- /* The opcode name. */
- const char *name;
-
- /* The opcode itself. Those bits which will be filled in with
- operands are zeroes. */
- unsigned long opcode;
-
- /* The opcode mask. This is used by the disassembler. This is a
- mask containing ones indicating those bits which must match the
- opcode field, and zeroes indicating those bits which need not
- match (and are presumably filled in by operands). */
- unsigned long mask;
-
- /* The format of this opcode. */
- unsigned char format;
-
- /* An array of operand codes. Each code is an index into the
- operand table. They appear in the order which the operands must
- appear in assembly code, and are terminated by a zero. */
- unsigned char operands[8];
-};
-
-/* The table itself is sorted by major opcode number, and is otherwise
- in the order in which the disassembler should consider
- instructions. */
-extern const struct mn10200_opcode mn10200_opcodes[];
-extern const int mn10200_num_opcodes;
-
-
-/* The operands table is an array of struct mn10200_operand. */
-
-struct mn10200_operand
-{
- /* The number of bits in the operand. */
- int bits;
-
- /* How far the operand is left shifted in the instruction. */
- int shift;
-
- /* One bit syntax flags. */
- int flags;
-};
-
-/* Elements in the table are retrieved by indexing with values from
- the operands field of the mn10200_opcodes table. */
-
-extern const struct mn10200_operand mn10200_operands[];
-
-/* Values defined for the flags field of a struct mn10200_operand. */
-#define MN10200_OPERAND_DREG 0x1
-
-#define MN10200_OPERAND_AREG 0x2
-
-#define MN10200_OPERAND_PSW 0x4
-
-#define MN10200_OPERAND_MDR 0x8
-
-#define MN10200_OPERAND_SIGNED 0x10
-
-#define MN10200_OPERAND_PROMOTE 0x20
-
-#define MN10200_OPERAND_PAREN 0x40
-
-#define MN10200_OPERAND_REPEATED 0x80
-
-#define MN10200_OPERAND_EXTENDED 0x100
-
-#define MN10200_OPERAND_NOCHECK 0x200
-
-#define MN10200_OPERAND_PCREL 0x400
-
-#define MN10200_OPERAND_MEMADDR 0x800
-
-#define MN10200_OPERAND_RELAX 0x1000
-
-#define FMT_1 1
-#define FMT_2 2
-#define FMT_3 3
-#define FMT_4 4
-#define FMT_5 5
-#define FMT_6 6
-#define FMT_7 7
-#endif /* MN10200_H */
diff --git a/include/opcode/mn10300.h b/include/opcode/mn10300.h
deleted file mode 100644
index 16a139bce..000000000
--- a/include/opcode/mn10300.h
+++ /dev/null
@@ -1,170 +0,0 @@
-/* mn10300.h -- Header file for Matsushita 10300 opcode table
- Copyright 1996, 1997, 1998, 1999, 2003, 2010 Free Software Foundation, Inc.
- Written by Jeff Law, Cygnus Support
-
- This file is part of GDB, GAS, and the GNU binutils.
-
- GDB, GAS, and the GNU binutils are free software; you can redistribute
- them and/or modify them under the terms of the GNU General Public
- License as published by the Free Software Foundation; either version 3,
- or (at your option) any later version.
-
- GDB, GAS, and the GNU binutils are distributed in the hope that they
- 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 file; see the file COPYING3. If not, write to the Free
- Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef MN10300_H
-#define MN10300_H
-
-/* The opcode table is an array of struct mn10300_opcode. */
-
-#define MN10300_MAX_OPERANDS 8
-struct mn10300_opcode
-{
- /* The opcode name. */
- const char *name;
-
- /* The opcode itself. Those bits which will be filled in with
- operands are zeroes. */
- unsigned long opcode;
-
- /* The opcode mask. This is used by the disassembler. This is a
- mask containing ones indicating those bits which must match the
- opcode field, and zeroes indicating those bits which need not
- match (and are presumably filled in by operands). */
- unsigned long mask;
-
- /* A bitmask. For each operand, nonzero if it must not have the same
- register specification as all other operands with a nonzero bit in
- this flag. ie 0x81 would indicate that operands 7 and 0 must not
- match. Note that we count operands from left to right as they appear
- in the operands specification below. */
- unsigned int no_match_operands;
-
- /* The format of this opcode. */
- unsigned char format;
-
- /* Bitmask indicating what cpu variants this opcode is available on.
- We assume mn10300 base opcodes are available everywhere, so we only
- have to note opcodes which are available on other variants. */
- unsigned int machine;
-
- /* An array of operand codes. Each code is an index into the
- operand table. They appear in the order which the operands must
- appear in assembly code, and are terminated by a zero. */
- unsigned char operands[MN10300_MAX_OPERANDS];
-};
-
-/* The table itself is sorted by major opcode number, and is otherwise
- in the order in which the disassembler should consider
- instructions. */
-extern const struct mn10300_opcode mn10300_opcodes[];
-extern const int mn10300_num_opcodes;
-
-
-/* The operands table is an array of struct mn10300_operand. */
-
-struct mn10300_operand
-{
- /* The number of bits in the operand. */
- int bits;
-
- /* How far the operand is left shifted in the instruction. */
- int shift;
-
- /* One bit syntax flags. */
- int flags;
-};
-
-/* Elements in the table are retrieved by indexing with values from
- the operands field of the mn10300_opcodes table. */
-
-extern const struct mn10300_operand mn10300_operands[];
-
-/* Values defined for the flags field of a struct mn10300_operand. */
-#define MN10300_OPERAND_DREG 0x1
-
-#define MN10300_OPERAND_AREG 0x2
-
-#define MN10300_OPERAND_SP 0x4
-
-#define MN10300_OPERAND_PSW 0x8
-
-#define MN10300_OPERAND_MDR 0x10
-
-#define MN10300_OPERAND_SIGNED 0x20
-
-#define MN10300_OPERAND_PROMOTE 0x40
-
-#define MN10300_OPERAND_PAREN 0x80
-
-#define MN10300_OPERAND_REPEATED 0x100
-
-#define MN10300_OPERAND_EXTENDED 0x200
-
-#define MN10300_OPERAND_SPLIT 0x400
-
-#define MN10300_OPERAND_REG_LIST 0x800
-
-#define MN10300_OPERAND_PCREL 0x1000
-
-#define MN10300_OPERAND_MEMADDR 0x2000
-
-#define MN10300_OPERAND_RELAX 0x4000
-
-#define MN10300_OPERAND_USP 0x8000
-
-#define MN10300_OPERAND_SSP 0x10000
-
-#define MN10300_OPERAND_MSP 0x20000
-
-#define MN10300_OPERAND_PC 0x40000
-
-#define MN10300_OPERAND_EPSW 0x80000
-
-#define MN10300_OPERAND_RREG 0x100000
-
-#define MN10300_OPERAND_XRREG 0x200000
-
-#define MN10300_OPERAND_PLUS 0x400000
-
-#define MN10300_OPERAND_24BIT 0x800000
-
-#define MN10300_OPERAND_FSREG 0x1000000
-
-#define MN10300_OPERAND_FDREG 0x2000000
-
-#define MN10300_OPERAND_FPCR 0x4000000
-
-/* Opcode Formats. */
-#define FMT_S0 1
-#define FMT_S1 2
-#define FMT_S2 3
-#define FMT_S4 4
-#define FMT_S6 5
-#define FMT_D0 6
-#define FMT_D1 7
-#define FMT_D2 8
-#define FMT_D4 9
-#define FMT_D5 10
-#define FMT_D6 11
-#define FMT_D7 12
-#define FMT_D8 13
-#define FMT_D9 14
-#define FMT_D10 15
-#define FMT_D3 16
-
-/* Variants of the mn10300 which have additional opcodes. */
-#define MN103 300
-#define AM30 300
-
-#define AM33 330
-#define AM33_2 332
-
-#endif /* MN10300_H */
diff --git a/include/opcode/moxie.h b/include/opcode/moxie.h
deleted file mode 100644
index dae40c8e8..000000000
--- a/include/opcode/moxie.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/* Definitions for decoding the moxie opcode table.
- Copyright 2009 Free Software Foundation, Inc.
- Contributed by Anthony Green (green@moxielogic.com).
-
- 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 3 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., 51 Franklin Street - Fifth Floor, Boston, MA
- 02110-1301, USA. */
-
-/* Form 1 instructions come in different flavors:
-
- Some have no arguments (MOXIE_F1_NARG)
- Some only use the A operand (MOXIE_F1_A)
- Some use A and B registers (MOXIE_F1_AB)
- Some use A and consume a 4 byte immediate value (MOXIE_F1_A4)
- Some use just a 4 byte immediate value (MOXIE_F1_4)
- Some use just a 4 byte memory address (MOXIE_F1_M)
- Some use B and an indirect A (MOXIE_F1_AiB)
- Some use A and an indirect B (MOXIE_F1_ABi)
- Some consume a 4 byte immediate value and use X (MOXIE_F1_4A)
- Some use B and an indirect A plus 4 bytes (MOXIE_F1_AiB4)
- Some use A and an indirect B plus 4 bytes (MOXIE_F1_ABi4)
-
- Form 2 instructions also come in different flavors:
-
- Some have no arguments (MOXIE_F2_NARG)
- Some use the A register and an 8-bit value (MOXIE_F2_A8V)
-
- Form 3 instructions also come in different flavors:
-
- Some have no arguments (MOXIE_F3_NARG)
- Some have a 10-bit PC relative operand (MOXIE_F3_PCREL). */
-
-#define MOXIE_F1_NARG 0x100
-#define MOXIE_F1_A 0x101
-#define MOXIE_F1_AB 0x102
-/* #define MOXIE_F1_ABC 0x103 */
-#define MOXIE_F1_A4 0x104
-#define MOXIE_F1_4 0x105
-#define MOXIE_F1_AiB 0x106
-#define MOXIE_F1_ABi 0x107
-#define MOXIE_F1_4A 0x108
-#define MOXIE_F1_AiB4 0x109
-#define MOXIE_F1_ABi4 0x10a
-#define MOXIE_F1_M 0x10b
-
-#define MOXIE_F2_NARG 0x200
-#define MOXIE_F2_A8V 0x201
-
-#define MOXIE_F3_NARG 0x300
-#define MOXIE_F3_PCREL 0x301
-
-#define MOXIE_BAD 0x400
-
-typedef struct moxie_opc_info_t
-{
- short opcode;
- unsigned itype;
- const char * name;
-} moxie_opc_info_t;
-
-extern const moxie_opc_info_t moxie_form1_opc_info[128];
-extern const moxie_opc_info_t moxie_form2_opc_info[4];
-extern const moxie_opc_info_t moxie_form3_opc_info[16];
diff --git a/include/opcode/msp430-decode.h b/include/opcode/msp430-decode.h
deleted file mode 100644
index 0653aded7..000000000
--- a/include/opcode/msp430-decode.h
+++ /dev/null
@@ -1,130 +0,0 @@
-/* Opcode decoder for the TI MSP430
- Copyright 2012-2013 Free Software Foundation, Inc.
- Written by DJ Delorie <dj@redhat.com>
-
- This file is part of GDB, the GNU Debugger.
-
- 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 3 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., 51 Franklin Street - Fifth Floor, Boston, MA
- 02110-1301, USA. */
-
-typedef enum
-{
- MSO_unknown,
- /* Double-operand instructions - all repeat .REPEATS times. */
- MSO_mov, /* dest = src */
- MSO_add, /* dest += src */
- MSO_addc, /* dest += src + carry */
- MSO_subc, /* dest -= (src-1) + carry */
- MSO_sub, /* dest -= src */
- MSO_cmp, /* dest - src -> status */
- MSO_dadd, /* dest += src (as BCD) */
- MSO_bit, /* dest & src -> status */
- MSO_bic, /* dest &= ~src (bit clear) */
- MSO_bis, /* dest |= src (bit set, OR) */
- MSO_xor, /* dest ^= src */
- MSO_and, /* dest &= src */
-
- /* Single-operand instructions. */
- MSO_rrc, /* Rotate through carry, dest >>= .REPEATS. */
- MSO_swpb, /* Swap lower bytes of operand. */
- MSO_rra, /* Signed shift dest >>= .REPEATS. */
- MSO_sxt, /* Sign extend lower byte. */
- MSO_push, /* Push .REPEATS registers (or other op) starting at SRC going towards R0. */
- MSO_pop, /* Pop .REPEATS registers starting at DEST going towards R15. */
- MSO_call,
- MSO_reti,
-
- /* Jumps. */
- MSO_jmp, /* PC = SRC if .COND true. */
-
- /* Extended single-operand instructions. */
- MSO_rru, /* Unsigned shift right, dest >>= .REPEATS. */
-
-} MSP430_Opcode_ID;
-
-typedef enum
-{
- MSP430_Operand_None,
- MSP430_Operand_Immediate,
- MSP430_Operand_Register,
- MSP430_Operand_Indirect,
- MSP430_Operand_Indirect_Postinc
-} MSP430_Operand_Type;
-
-typedef enum
-{
- MSR_0 = 0,
- MSR_PC = 0,
- MSR_SP = 1,
- MSR_SR = 2,
- MSR_CG = 3,
- MSR_None = 16,
-} MSP430_Register;
-
-typedef struct
-{
- MSP430_Operand_Type type;
- int addend;
- MSP430_Register reg : 8;
- MSP430_Register reg2 : 8;
- unsigned char bit_number : 4;
- unsigned char condition : 3;
-} MSP430_Opcode_Operand;
-
-typedef enum
-{
- MSP430_Byte = 0,
- MSP430_Word,
- MSP430_Addr
-} MSP430_Size;
-
-/* These numerically match the bit encoding. */
-typedef enum
-{
- MSC_nz = 0,
- MSC_z,
- MSC_nc,
- MSC_c,
- MSC_n,
- MSC_ge,
- MSC_l,
- MSC_true,
-} MSP430_Condition;
-
-#define MSP430_FLAG_C 0x01
-#define MSP430_FLAG_Z 0x02
-#define MSP430_FLAG_N 0x04
-#define MSP430_FLAG_V 0x80
-
-typedef struct
-{
- int lineno;
- MSP430_Opcode_ID id;
- unsigned flags_1:8; /* These flags are set to '1' by the insn. */
- unsigned flags_0:8; /* These flags are set to '0' by the insn. */
- unsigned flags_set:8; /* These flags are set appropriately by the insn. */
- unsigned zc:1; /* If set, pretend the carry bit is zero. */
- unsigned repeat_reg:1; /* If set, count is in REG[repeats]. */
- unsigned ofs_430x:1; /* If set, the offset in any operand is 430x (else use 430 compatibility mode). */
- unsigned repeats:5; /* Contains COUNT-1, or register number. */
- int n_bytes; /* Opcode size in BYTES. */
- char * syntax;
- MSP430_Size size; /* Operand size in BITS. */
- MSP430_Condition cond;
- /* By convention, these are [0]destination, [1]source. */
- MSP430_Opcode_Operand op[2];
-} MSP430_Opcode_Decoded;
-
-int msp430_decode_opcode (unsigned long, MSP430_Opcode_Decoded *, int (*)(void *), void *);
diff --git a/include/opcode/msp430.h b/include/opcode/msp430.h
deleted file mode 100644
index caddc42db..000000000
--- a/include/opcode/msp430.h
+++ /dev/null
@@ -1,194 +0,0 @@
-/* Opcode table for the TI MSP430 microcontrollers
-
- Copyright 2002-2013 Free Software Foundation, Inc.
- Contributed by Dmitry Diky <diwil@mail.ru>
-
- 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 3, 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef __MSP430_H_
-#define __MSP430_H_
-
-struct msp430_operand_s
-{
- int ol; /* Operand length words. */
- int am; /* Addr mode. */
- int reg; /* Register. */
- int mode; /* Pperand mode. */
-#define OP_REG 0
-#define OP_EXP 1
-#ifndef DASM_SECTION
- expressionS exp;
-#endif
-};
-
-#define BYTE_OPERATION (1 << 6) /* Byte operation flag for all instructions. */
-
-struct msp430_opcode_s
-{
- char *name;
- int fmt;
- int insn_opnumb;
- int bin_opcode;
- int bin_mask;
-};
-
-#define MSP_INSN(name, size, numb, bin, mask) { #name, size, numb, bin, mask }
-
-static struct msp430_opcode_s msp430_opcodes[] =
-{
- MSP_INSN (and, 1, 2, 0xf000, 0xf000),
- MSP_INSN (inv, 0, 1, 0xe330, 0xfff0),
- MSP_INSN (xor, 1, 2, 0xe000, 0xf000),
- MSP_INSN (setz, 0, 0, 0xd322, 0xffff),
- MSP_INSN (setc, 0, 0, 0xd312, 0xffff),
- MSP_INSN (eint, 0, 0, 0xd232, 0xffff),
- MSP_INSN (setn, 0, 0, 0xd222, 0xffff),
- MSP_INSN (bis, 1, 2, 0xd000, 0xf000),
- MSP_INSN (clrz, 0, 0, 0xc322, 0xffff),
- MSP_INSN (clrc, 0, 0, 0xc312, 0xffff),
- MSP_INSN (dint, 0, 0, 0xc232, 0xffff),
- MSP_INSN (clrn, 0, 0, 0xc222, 0xffff),
- MSP_INSN (bic, 1, 2, 0xc000, 0xf000),
- MSP_INSN (bit, 1, 2, 0xb000, 0xf000),
- MSP_INSN (dadc, 0, 1, 0xa300, 0xff30),
- MSP_INSN (dadd, 1, 2, 0xa000, 0xf000),
- MSP_INSN (tst, 0, 1, 0x9300, 0xff30),
- MSP_INSN (cmp, 1, 2, 0x9000, 0xf000),
- MSP_INSN (decd, 0, 1, 0x8320, 0xff30),
- MSP_INSN (dec, 0, 1, 0x8310, 0xff30),
- MSP_INSN (sub, 1, 2, 0x8000, 0xf000),
- MSP_INSN (sbc, 0, 1, 0x7300, 0xff30),
- MSP_INSN (subc, 1, 2, 0x7000, 0xf000),
- MSP_INSN (adc, 0, 1, 0x6300, 0xff30),
- MSP_INSN (rlc, 0, 2, 0x6000, 0xf000),
- MSP_INSN (addc, 1, 2, 0x6000, 0xf000),
- MSP_INSN (incd, 0, 1, 0x5320, 0xff30),
- MSP_INSN (inc, 0, 1, 0x5310, 0xff30),
- MSP_INSN (rla, 0, 2, 0x5000, 0xf000),
- MSP_INSN (add, 1, 2, 0x5000, 0xf000),
- MSP_INSN (nop, 0, 0, 0x4303, 0xffff),
- MSP_INSN (clr, 0, 1, 0x4300, 0xff30),
- MSP_INSN (ret, 0, 0, 0x4130, 0xff30),
- MSP_INSN (pop, 0, 1, 0x4130, 0xff30),
- MSP_INSN (br, 0, 3, 0x4000, 0xf000),
- MSP_INSN (mov, 1, 2, 0x4000, 0xf000),
- MSP_INSN (jmp, 3, 1, 0x3c00, 0xfc00),
- MSP_INSN (jl, 3, 1, 0x3800, 0xfc00),
- MSP_INSN (jge, 3, 1, 0x3400, 0xfc00),
- MSP_INSN (jn, 3, 1, 0x3000, 0xfc00),
- MSP_INSN (jc, 3, 1, 0x2c00, 0xfc00),
- MSP_INSN (jhs, 3, 1, 0x2c00, 0xfc00),
- MSP_INSN (jnc, 3, 1, 0x2800, 0xfc00),
- MSP_INSN (jlo, 3, 1, 0x2800, 0xfc00),
- MSP_INSN (jz, 3, 1, 0x2400, 0xfc00),
- MSP_INSN (jeq, 3, 1, 0x2400, 0xfc00),
- MSP_INSN (jnz, 3, 1, 0x2000, 0xfc00),
- MSP_INSN (jne, 3, 1, 0x2000, 0xfc00),
- MSP_INSN (reti, 2, 0, 0x1300, 0xffc0),
- MSP_INSN (call, 2, 1, 0x1280, 0xffc0),
- MSP_INSN (push, 2, 1, 0x1200, 0xff80),
- MSP_INSN (sxt, 2, 1, 0x1180, 0xffc0),
- MSP_INSN (rra, 2, 1, 0x1100, 0xff80),
- MSP_INSN (swpb, 2, 1, 0x1080, 0xffc0),
- MSP_INSN (rrc, 2, 1, 0x1000, 0xff80),
- /* Simple polymorphs. */
- MSP_INSN (beq, 4, 0, 0, 0xffff),
- MSP_INSN (bne, 4, 1, 0, 0xffff),
- MSP_INSN (blt, 4, 2, 0, 0xffff),
- MSP_INSN (bltu, 4, 3, 0, 0xffff),
- MSP_INSN (bge, 4, 4, 0, 0xffff),
- MSP_INSN (bgeu, 4, 5, 0, 0xffff),
- MSP_INSN (bltn, 4, 6, 0, 0xffff),
- MSP_INSN (jump, 4, 7, 0, 0xffff),
- /* Long polymorphs. */
- MSP_INSN (bgt, 5, 0, 0, 0xffff),
- MSP_INSN (bgtu, 5, 1, 0, 0xffff),
- MSP_INSN (bleu, 5, 2, 0, 0xffff),
- MSP_INSN (ble, 5, 3, 0, 0xffff),
-
- /* MSP430X instructions - these ones use an extension word.
- A negative format indicates an MSP430X instruction. */
- MSP_INSN (addcx, -2, 2, 0x6000, 0xf000),
- MSP_INSN (addx, -2, 2, 0x5000, 0xf000),
- MSP_INSN (andx, -2, 2, 0xf000, 0xf000),
- MSP_INSN (bicx, -2, 2, 0xc000, 0xf000),
- MSP_INSN (bisx, -2, 2, 0xd000, 0xf000),
- MSP_INSN (bitx, -2, 2, 0xb000, 0xf000),
- MSP_INSN (cmpx, -2, 2, 0x9000, 0xf000),
- MSP_INSN (daddx, -2, 2, 0xa000, 0xf000),
- MSP_INSN (movx, -2, 2, 0x4000, 0xf000),
- MSP_INSN (subcx, -2, 2, 0x7000, 0xf000),
- MSP_INSN (subx, -2, 2, 0x8000, 0xf000),
- MSP_INSN (xorx, -2, 2, 0xe000, 0xf000),
-
- /* MSP430X Synthetic instructions. */
- MSP_INSN (adcx, -1, 1, 0x6300, 0xff30),
- MSP_INSN (clra, -1, 1, 0x4300, 0xff30),
- MSP_INSN (clrx, -1, 1, 0x4300, 0xff30),
- MSP_INSN (dadcx, -1, 1, 0xa300, 0xff30),
- MSP_INSN (decx, -1, 1, 0x8310, 0xff30),
- MSP_INSN (decda, -1, 1, 0x8320, 0xff30),
- MSP_INSN (decdx, -1, 1, 0x8320, 0xff30),
- MSP_INSN (incx, -1, 1, 0x5310, 0xff30),
- MSP_INSN (incda, -1, 1, 0x5320, 0xff30),
- MSP_INSN (incdx, -1, 1, 0x5320, 0xff30),
- MSP_INSN (invx, -1, 1, 0xe330, 0xfff0),
- MSP_INSN (popx, -1, 1, 0x4130, 0xff30),
- MSP_INSN (rlax, -1, 2, 0x5000, 0xf000),
- MSP_INSN (rlcx, -1, 2, 0x6000, 0xf000),
- MSP_INSN (sbcx, -1, 1, 0x7300, 0xff30),
- MSP_INSN (tsta, -1, 1, 0x9300, 0xff30),
- MSP_INSN (tstx, -1, 1, 0x9300, 0xff30),
-
- MSP_INSN (pushx, -3, 1, 0x1200, 0xff80),
- MSP_INSN (rrax, -3, 1, 0x1100, 0xff80),
- MSP_INSN (rrcx, -3, 1, 0x1000, 0xff80),
- MSP_INSN (swpbx, -3, 1, 0x1080, 0xffc0),
- MSP_INSN (sxtx, -3, 1, 0x1180, 0xffc0),
-
- /* MSP430X Address instructions - no extension word needed.
- The insn_opnumb field is used to encode the nature of the
- instruction for assembly and disassembly purposes. */
- MSP_INSN (calla, -1, 4, 0x1300, 0xff00),
-
- MSP_INSN (popm, -1, 5, 0x1600, 0xfe00),
- MSP_INSN (pushm, -1, 5, 0x1400, 0xfe00),
-
- MSP_INSN (rrcm, -1, 6, 0x0040, 0xf3e0),
- MSP_INSN (rram, -1, 6, 0x0140, 0xf3e0),
- MSP_INSN (rlam, -1, 6, 0x0240, 0xf3e0),
- MSP_INSN (rrum, -1, 6, 0x0340, 0xf3e0),
-
- MSP_INSN (rrux, -1, 7, 0x0340, 0xffe0), /* Synthesized in terms of RRUM. */
-
- MSP_INSN (adda, -1, 8, 0x00a0, 0xf0b0),
- MSP_INSN (cmpa, -1, 8, 0x0090, 0xf0b0),
- MSP_INSN (suba, -1, 8, 0x00b0, 0xf0b0),
-
- MSP_INSN (reta, -1, 9, 0x0110, 0xffff),
- MSP_INSN (bra, -1, 9, 0x0000, 0xf0cf),
- MSP_INSN (mova, -1, 9, 0x0000, 0xf080),
- MSP_INSN (mova, -1, 9, 0x0080, 0xf0b0),
- MSP_INSN (mova, -1, 9, 0x00c0, 0xf0f0),
-
- /* Pseudo instruction to set the repeat field in the extension word. */
- MSP_INSN (rpt, -1, 10, 0x0000, 0x0000),
-
- /* End of instruction set. */
- { NULL, 0, 0, 0, 0 }
-};
-
-#endif
diff --git a/include/opcode/nios2.h b/include/opcode/nios2.h
deleted file mode 100644
index aa6709819..000000000
--- a/include/opcode/nios2.h
+++ /dev/null
@@ -1,522 +0,0 @@
-/* Nios II opcode list for GAS, the GNU assembler.
- Copyright (C) 2012, 2013 Free Software Foundation, Inc.
- Contributed by Nigel Gray (ngray@altera.com).
- Contributed by Mentor Graphics, Inc.
-
- This file is part of GAS, the GNU Assembler, and GDB, the GNU disassembler.
-
- GAS/GDB 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 3, or (at your option)
- any later version.
-
- GAS/GDB is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GAS or GDB; see the file COPYING3. If not, write to
- the Free Software Foundation, 51 Franklin Street - Fifth Floor,
- Boston, MA 02110-1301, USA. */
-
-#ifndef _NIOS2_H_
-#define _NIOS2_H_
-
-#include "bfd.h"
-
-/****************************************************************************
- * This file contains structures, bit masks and shift counts used
- * by the GNU toolchain to define the Nios II instruction set and
- * access various opcode fields.
- ****************************************************************************/
-
-/* Identify different overflow situations for error messages. */
-enum overflow_type
-{
- call_target_overflow = 0,
- branch_target_overflow,
- address_offset_overflow,
- signed_immed16_overflow,
- unsigned_immed16_overflow,
- unsigned_immed5_overflow,
- custom_opcode_overflow,
- no_overflow
-};
-
-/* This structure holds information for a particular instruction.
-
- The args field is a string describing the operands. The following
- letters can appear in the args:
- c - a 5-bit control register index
- d - a 5-bit destination register index
- s - a 5-bit left source register index
- t - a 5-bit right source register index
- i - a 16-bit signed immediate
- u - a 16-bit unsigned immediate
- o - a 16-bit signed program counter relative offset
- j - a 5-bit unsigned immediate
- b - a 5-bit break instruction constant
- l - a 8-bit custom instruction constant
- m - a 26-bit unsigned immediate
- Literal ',', '(', and ')' characters may also appear in the args as
- delimiters.
-
- The pinfo field is INSN_MACRO for a macro. Otherwise, it is a collection
- of bits describing the instruction, notably any relevant hazard
- information.
-
- When assembling, the match field contains the opcode template, which
- is modified by the arguments to produce the actual opcode
- that is emitted. If pinfo is INSN_MACRO, then this is 0.
-
- If pinfo is INSN_MACRO, the mask field stores the macro identifier.
- Otherwise this is a bit mask for the relevant portions of the opcode
- when disassembling. If the actual opcode anded with the match field
- equals the opcode field, then we have found the correct instruction. */
-
-struct nios2_opcode
-{
- const char *name; /* The name of the instruction. */
- const char *args; /* A string describing the arguments for this
- instruction. */
- const char *args_test; /* Like args, but with an extra argument for
- the expected opcode. */
- unsigned long num_args; /* The number of arguments the instruction
- takes. */
- unsigned long match; /* The basic opcode for the instruction. */
- unsigned long mask; /* Mask for the opcode field of the
- instruction. */
- unsigned long pinfo; /* Is this a real instruction or instruction
- macro? */
- enum overflow_type overflow_msg; /* Used to generate informative
- message when fixup overflows. */
-};
-
-/* This value is used in the nios2_opcode.pinfo field to indicate that the
- instruction is a macro or pseudo-op. This requires special treatment by
- the assembler, and is used by the disassembler to determine whether to
- check for a nop. */
-#define NIOS2_INSN_MACRO 0x80000000
-#define NIOS2_INSN_MACRO_MOV 0x80000001
-#define NIOS2_INSN_MACRO_MOVI 0x80000002
-#define NIOS2_INSN_MACRO_MOVIA 0x80000004
-
-#define NIOS2_INSN_RELAXABLE 0x40000000
-#define NIOS2_INSN_UBRANCH 0x00000010
-#define NIOS2_INSN_CBRANCH 0x00000020
-#define NIOS2_INSN_CALL 0x00000040
-
-#define NIOS2_INSN_ADDI 0x00000080
-#define NIOS2_INSN_ANDI 0x00000100
-#define NIOS2_INSN_ORI 0x00000200
-#define NIOS2_INSN_XORI 0x00000400
-
-
-/* Associates a register name ($6) with a 5-bit index (eg 6). */
-struct nios2_reg
-{
- const char *name;
- const int index;
-};
-
-
-/* These are bit masks and shift counts for accessing the various
- fields of a Nios II instruction. */
-
-/* Macros for getting and setting an instruction field. */
-#define GET_INSN_FIELD(X, i) \
- (((i) & OP_MASK_##X) >> OP_SH_##X)
-#define SET_INSN_FIELD(X, i, j) \
- ((i) = (((i) & ~OP_MASK_##X) | (((j) << OP_SH_##X) & OP_MASK_##X)))
-
-/* Instruction field definitions. */
-#define IW_A_LSB 27
-#define IW_A_MSB 31
-#define IW_A_SZ 5
-#define IW_A_MASK 0x1f
-
-#define IW_B_LSB 22
-#define IW_B_MSB 26
-#define IW_B_SZ 5
-#define IW_B_MASK 0x1f
-
-#define IW_C_LSB 17
-#define IW_C_MSB 21
-#define IW_C_SZ 5
-#define IW_C_MASK 0x1f
-
-#define IW_IMM16_LSB 6
-#define IW_IMM16_MSB 21
-#define IW_IMM16_SZ 16
-#define IW_IMM16_MASK 0xffff
-
-#define IW_IMM26_LSB 6
-#define IW_IMM26_MSB 31
-#define IW_IMM26_SZ 26
-#define IW_IMM26_MASK 0x3ffffff
-
-#define IW_OP_LSB 0
-#define IW_OP_MSB 5
-#define IW_OP_SZ 6
-#define IW_OP_MASK 0x3f
-
-#define IW_OPX_LSB 11
-#define IW_OPX_MSB 16
-#define IW_OPX_SZ 6
-#define IW_OPX_MASK 0x3f
-
-#define IW_SHIFT_IMM5_LSB 6
-#define IW_SHIFT_IMM5_MSB 10
-#define IW_SHIFT_IMM5_SZ 5
-#define IW_SHIFT_IMM5_MASK 0x1f
-
-#define IW_CONTROL_REGNUM_LSB 6
-#define IW_CONTROL_REGNUM_MSB 9
-#define IW_CONTROL_REGNUM_SZ 4
-#define IW_CONTROL_REGNUM_MASK 0xf
-
-/* Operator mask and shift. */
-#define OP_MASK_OP (IW_OP_MASK << IW_OP_LSB)
-#define OP_SH_OP IW_OP_LSB
-
-/* Masks and shifts for I-type instructions. */
-#define OP_MASK_IOP (IW_OP_MASK << IW_OP_LSB)
-#define OP_SH_IOP IW_OP_LSB
-
-#define OP_MASK_IMM16 (IW_IMM16_MASK << IW_IMM16_LSB)
-#define OP_SH_IMM16 IW_IMM16_LSB
-
-#define OP_MASK_IRD (IW_B_MASK << IW_B_LSB)
-#define OP_SH_IRD IW_B_LSB /* The same as T for I-type. */
-
-#define OP_MASK_IRT (IW_B_MASK << IW_B_LSB)
-#define OP_SH_IRT IW_B_LSB
-
-#define OP_MASK_IRS (IW_A_MASK << IW_A_LSB)
-#define OP_SH_IRS IW_A_LSB
-
-/* Masks and shifts for R-type instructions. */
-#define OP_MASK_ROP (IW_OP_MASK << IW_OP_LSB)
-#define OP_SH_ROP IW_OP_LSB
-
-#define OP_MASK_ROPX (IW_OPX_MASK << IW_OPX_LSB)
-#define OP_SH_ROPX IW_OPX_LSB
-
-#define OP_MASK_RRD (IW_C_MASK << IW_C_LSB)
-#define OP_SH_RRD IW_C_LSB
-
-#define OP_MASK_RRT (IW_B_MASK << IW_B_LSB)
-#define OP_SH_RRT IW_B_LSB
-
-#define OP_MASK_RRS (IW_A_MASK << IW_A_LSB)
-#define OP_SH_RRS IW_A_LSB
-
-/* Masks and shifts for J-type instructions. */
-#define OP_MASK_JOP (IW_OP_MASK << IW_OP_LSB)
-#define OP_SH_JOP IW_OP_LSB
-
-#define OP_MASK_IMM26 (IW_IMM26_MASK << IW_IMM26_LSB)
-#define OP_SH_IMM26 IW_IMM26_LSB
-
-/* Masks and shifts for CTL instructions. */
-#define OP_MASK_RCTL 0x000007c0
-#define OP_SH_RCTL 6
-
-/* Break instruction imm5 field. */
-#define OP_MASK_TRAP_IMM5 0x000007c0
-#define OP_SH_TRAP_IMM5 6
-
-/* Instruction imm5 field. */
-#define OP_MASK_IMM5 (IW_SHIFT_IMM5_MASK << IW_SHIFT_IMM5_LSB)
-#define OP_SH_IMM5 IW_SHIFT_IMM5_LSB
-
-/* Cache operation fields (type j,i(s)). */
-#define OP_MASK_CACHE_OPX (IW_B_MASK << IW_B_LSB)
-#define OP_SH_CACHE_OPX IW_B_LSB
-#define OP_MASK_CACHE_RRS (IW_A_MASK << IW_A_LSB)
-#define OP_SH_CACHE_RRS IW_A_LSB
-
-/* Custom instruction masks. */
-#define OP_MASK_CUSTOM_A 0x00010000
-#define OP_SH_CUSTOM_A 16
-
-#define OP_MASK_CUSTOM_B 0x00008000
-#define OP_SH_CUSTOM_B 15
-
-#define OP_MASK_CUSTOM_C 0x00004000
-#define OP_SH_CUSTOM_C 14
-
-#define OP_MASK_CUSTOM_N 0x00003fc0
-#define OP_SH_CUSTOM_N 6
-#define OP_MAX_CUSTOM_N 255
-
-/* OP instruction values. */
-#define OP_ADDI 4
-#define OP_ANDHI 44
-#define OP_ANDI 12
-#define OP_BEQ 38
-#define OP_BGE 14
-#define OP_BGEU 46
-#define OP_BLT 22
-#define OP_BLTU 54
-#define OP_BNE 30
-#define OP_BR 6
-#define OP_CALL 0
-#define OP_CMPEQI 32
-#define OP_CMPGEI 8
-#define OP_CMPGEUI 40
-#define OP_CMPLTI 16
-#define OP_CMPLTUI 48
-#define OP_CMPNEI 24
-#define OP_CUSTOM 50
-#define OP_FLUSHD 59
-#define OP_FLUSHDA 27
-#define OP_INITD 51
-#define OP_INITDA 19
-#define OP_JMPI 1
-#define OP_LDB 7
-#define OP_LDBIO 39
-#define OP_LDBU 3
-#define OP_LDBUIO 35
-#define OP_LDH 15
-#define OP_LDHIO 47
-#define OP_LDHU 11
-#define OP_LDHUIO 43
-#define OP_LDL 31
-#define OP_LDW 23
-#define OP_LDWIO 55
-#define OP_MULI 36
-#define OP_OPX 58
-#define OP_ORHI 52
-#define OP_ORI 20
-#define OP_RDPRS 56
-#define OP_STB 5
-#define OP_STBIO 37
-#define OP_STC 29
-#define OP_STH 13
-#define OP_STHIO 45
-#define OP_STW 21
-#define OP_STWIO 53
-#define OP_XORHI 60
-#define OP_XORI 28
-
-/* OPX instruction values. */
-#define OPX_ADD 49
-#define OPX_AND 14
-#define OPX_BREAK 52
-#define OPX_BRET 9
-#define OPX_CALLR 29
-#define OPX_CMPEQ 32
-#define OPX_CMPGE 8
-#define OPX_CMPGEU 40
-#define OPX_CMPLT 16
-#define OPX_CMPLTU 48
-#define OPX_CMPNE 24
-#define OPX_CRST 62
-#define OPX_DIV 37
-#define OPX_DIVU 36
-#define OPX_ERET 1
-#define OPX_FLUSHI 12
-#define OPX_FLUSHP 4
-#define OPX_HBREAK 53
-#define OPX_INITI 41
-#define OPX_INTR 61
-#define OPX_JMP 13
-#define OPX_MUL 39
-#define OPX_MULXSS 31
-#define OPX_MULXSU 23
-#define OPX_MULXUU 7
-#define OPX_NEXTPC 28
-#define OPX_NOR 6
-#define OPX_OR 22
-#define OPX_RDCTL 38
-#define OPX_RET 5
-#define OPX_ROL 3
-#define OPX_ROLI 2
-#define OPX_ROR 11
-#define OPX_SLL 19
-#define OPX_SLLI 18
-#define OPX_SRA 59
-#define OPX_SRAI 58
-#define OPX_SRL 27
-#define OPX_SRLI 26
-#define OPX_SUB 57
-#define OPX_SYNC 54
-#define OPX_TRAP 45
-#define OPX_WRCTL 46
-#define OPX_WRPRS 20
-#define OPX_XOR 30
-
-/* The following macros define the opcode matches for each
- instruction code & OP_MASK_INST == OP_MATCH_INST. */
-
-/* OP instruction matches. */
-#define OP_MATCH_ADDI OP_ADDI
-#define OP_MATCH_ANDHI OP_ANDHI
-#define OP_MATCH_ANDI OP_ANDI
-#define OP_MATCH_BEQ OP_BEQ
-#define OP_MATCH_BGE OP_BGE
-#define OP_MATCH_BGEU OP_BGEU
-#define OP_MATCH_BLT OP_BLT
-#define OP_MATCH_BLTU OP_BLTU
-#define OP_MATCH_BNE OP_BNE
-#define OP_MATCH_BR OP_BR
-#define OP_MATCH_FLUSHD OP_FLUSHD
-#define OP_MATCH_FLUSHDA OP_FLUSHDA
-#define OP_MATCH_INITD OP_INITD
-#define OP_MATCH_INITDA OP_INITDA
-#define OP_MATCH_CALL OP_CALL
-#define OP_MATCH_CMPEQI OP_CMPEQI
-#define OP_MATCH_CMPGEI OP_CMPGEI
-#define OP_MATCH_CMPGEUI OP_CMPGEUI
-#define OP_MATCH_CMPLTI OP_CMPLTI
-#define OP_MATCH_CMPLTUI OP_CMPLTUI
-#define OP_MATCH_CMPNEI OP_CMPNEI
-#define OP_MATCH_JMPI OP_JMPI
-#define OP_MATCH_LDB OP_LDB
-#define OP_MATCH_LDBIO OP_LDBIO
-#define OP_MATCH_LDBU OP_LDBU
-#define OP_MATCH_LDBUIO OP_LDBUIO
-#define OP_MATCH_LDH OP_LDH
-#define OP_MATCH_LDHIO OP_LDHIO
-#define OP_MATCH_LDHU OP_LDHU
-#define OP_MATCH_LDHUIO OP_LDHUIO
-#define OP_MATCH_LDL OP_LDL
-#define OP_MATCH_LDW OP_LDW
-#define OP_MATCH_LDWIO OP_LDWIO
-#define OP_MATCH_MULI OP_MULI
-#define OP_MATCH_OPX OP_OPX
-#define OP_MATCH_ORHI OP_ORHI
-#define OP_MATCH_ORI OP_ORI
-#define OP_MATCH_RDPRS OP_RDPRS
-#define OP_MATCH_STB OP_STB
-#define OP_MATCH_STBIO OP_STBIO
-#define OP_MATCH_STC OP_STC
-#define OP_MATCH_STH OP_STH
-#define OP_MATCH_STHIO OP_STHIO
-#define OP_MATCH_STW OP_STW
-#define OP_MATCH_STWIO OP_STWIO
-#define OP_MATCH_CUSTOM OP_CUSTOM
-#define OP_MATCH_XORHI OP_XORHI
-#define OP_MATCH_XORI OP_XORI
-#define OP_MATCH_OPX OP_OPX
-
-/* OPX instruction values. */
-#define OPX_MATCH(code) ((code << IW_OPX_LSB) | OP_OPX)
-
-#define OP_MATCH_ADD OPX_MATCH (OPX_ADD)
-#define OP_MATCH_AND OPX_MATCH (OPX_AND)
-#define OP_MATCH_BREAK ((0x1e << 17) | OPX_MATCH (OPX_BREAK))
-#define OP_MATCH_BRET (0xf0000000 | OPX_MATCH (OPX_BRET))
-#define OP_MATCH_CALLR ((0x1f << 17) | OPX_MATCH (OPX_CALLR))
-#define OP_MATCH_CMPEQ OPX_MATCH (OPX_CMPEQ)
-#define OP_MATCH_CMPGE OPX_MATCH (OPX_CMPGE)
-#define OP_MATCH_CMPGEU OPX_MATCH (OPX_CMPGEU)
-#define OP_MATCH_CMPLT OPX_MATCH (OPX_CMPLT)
-#define OP_MATCH_CMPLTU OPX_MATCH (OPX_CMPLTU)
-#define OP_MATCH_CMPNE OPX_MATCH (OPX_CMPNE)
-#define OP_MATCH_DIV OPX_MATCH (OPX_DIV)
-#define OP_MATCH_DIVU OPX_MATCH (OPX_DIVU)
-#define OP_MATCH_JMP OPX_MATCH (OPX_JMP)
-#define OP_MATCH_MUL OPX_MATCH (OPX_MUL)
-#define OP_MATCH_MULXSS OPX_MATCH (OPX_MULXSS)
-#define OP_MATCH_MULXSU OPX_MATCH (OPX_MULXSU)
-#define OP_MATCH_MULXUU OPX_MATCH (OPX_MULXUU)
-#define OP_MATCH_NEXTPC OPX_MATCH (OPX_NEXTPC)
-#define OP_MATCH_NOR OPX_MATCH (OPX_NOR)
-#define OP_MATCH_OR OPX_MATCH (OPX_OR)
-#define OP_MATCH_RDCTL OPX_MATCH (OPX_RDCTL)
-#define OP_MATCH_RET (0xf8000000 | OPX_MATCH (OPX_RET))
-#define OP_MATCH_ROL OPX_MATCH (OPX_ROL)
-#define OP_MATCH_ROLI OPX_MATCH (OPX_ROLI)
-#define OP_MATCH_ROR OPX_MATCH (OPX_ROR)
-#define OP_MATCH_SLL OPX_MATCH (OPX_SLL)
-#define OP_MATCH_SLLI OPX_MATCH (OPX_SLLI)
-#define OP_MATCH_SRA OPX_MATCH (OPX_SRA)
-#define OP_MATCH_SRAI OPX_MATCH (OPX_SRAI)
-#define OP_MATCH_SRL OPX_MATCH (OPX_SRL)
-#define OP_MATCH_SRLI OPX_MATCH (OPX_SRLI)
-#define OP_MATCH_SUB OPX_MATCH (OPX_SUB)
-#define OP_MATCH_SYNC OPX_MATCH (OPX_SYNC)
-#define OP_MATCH_TRAP ((0x1d << 17) | OPX_MATCH (OPX_TRAP))
-#define OP_MATCH_ERET (0xef800000 | OPX_MATCH (OPX_ERET))
-#define OP_MATCH_WRCTL OPX_MATCH (OPX_WRCTL)
-#define OP_MATCH_WRPRS OPX_MATCH (OPX_WRPRS)
-#define OP_MATCH_XOR OPX_MATCH (OPX_XOR)
-#define OP_MATCH_FLUSHI OPX_MATCH (OPX_FLUSHI)
-#define OP_MATCH_FLUSHP OPX_MATCH (OPX_FLUSHP)
-#define OP_MATCH_INITI OPX_MATCH (OPX_INITI)
-
-/* Some unusual op masks. */
-#define OP_MASK_BREAK ((OP_MASK_RRS | OP_MASK_RRT | OP_MASK_RRD \
- | OP_MASK_ROPX | OP_MASK_OP) \
- & 0xfffff03f)
-#define OP_MASK_CALLR ((OP_MASK_RRT | OP_MASK_RRD | OP_MASK_ROPX \
- | OP_MASK_OP))
-#define OP_MASK_JMP ((OP_MASK_RRT | OP_MASK_RRD | OP_MASK_ROPX \
- | OP_MASK_OP))
-#define OP_MASK_SYNC ((OP_MASK_RRT | OP_MASK_RRD | OP_MASK_ROPX \
- | OP_MASK_OP))
-#define OP_MASK_TRAP ((OP_MASK_RRS | OP_MASK_RRT | OP_MASK_RRD \
- | OP_MASK_ROPX | OP_MASK_OP) \
- & 0xfffff83f)
-#define OP_MASK_WRCTL ((OP_MASK_RRT | OP_MASK_RRD | OP_MASK_ROPX \
- | OP_MASK_OP)) /*& 0xfffff83f */
-#define OP_MASK_NEXTPC ((OP_MASK_RRS | OP_MASK_RRT | OP_MASK_ROPX \
- | OP_MASK_OP))
-#define OP_MASK_FLUSHI ((OP_MASK_RRT | OP_MASK_RRD | OP_MASK_ROPX \
- | OP_MASK_OP))
-#define OP_MASK_INITI ((OP_MASK_RRT | OP_MASK_RRD | OP_MASK_ROPX \
- | OP_MASK_OP))
-
-#define OP_MASK_ROLI ((OP_MASK_RRT | OP_MASK_ROPX | OP_MASK_OP))
-#define OP_MASK_SLLI ((OP_MASK_RRT | OP_MASK_ROPX | OP_MASK_OP))
-#define OP_MASK_SRAI ((OP_MASK_RRT | OP_MASK_ROPX | OP_MASK_OP))
-#define OP_MASK_SRLI ((OP_MASK_RRT | OP_MASK_ROPX | OP_MASK_OP))
-#define OP_MASK_RDCTL ((OP_MASK_RRS | OP_MASK_RRT | OP_MASK_ROPX \
- | OP_MASK_OP)) /*& 0xfffff83f */
-
-#ifndef OP_MASK
-#define OP_MASK 0xffffffff
-#endif
-
-/* These convenience macros to extract instruction fields are used by GDB. */
-#define GET_IW_A(Iw) \
- (((Iw) >> IW_A_LSB) & IW_A_MASK)
-#define GET_IW_B(Iw) \
- (((Iw) >> IW_B_LSB) & IW_B_MASK)
-#define GET_IW_C(Iw) \
- (((Iw) >> IW_C_LSB) & IW_C_MASK)
-#define GET_IW_CONTROL_REGNUM(Iw) \
- (((Iw) >> IW_CONTROL_REGNUM_LSB) & IW_CONTROL_REGNUM_MASK)
-#define GET_IW_IMM16(Iw) \
- (((Iw) >> IW_IMM16_LSB) & IW_IMM16_MASK)
-#define GET_IW_IMM26(Iw) \
- (((Iw) >> IW_IMM26_LSB) & IW_IMM26_MASK)
-#define GET_IW_OP(Iw) \
- (((Iw) >> IW_OP_LSB) & IW_OP_MASK)
-#define GET_IW_OPX(Iw) \
- (((Iw) >> IW_OPX_LSB) & IW_OPX_MASK)
-
-/* These are the data structures we use to hold the instruction information. */
-extern const struct nios2_opcode nios2_builtin_opcodes[];
-extern const int bfd_nios2_num_builtin_opcodes;
-extern struct nios2_opcode *nios2_opcodes;
-extern int bfd_nios2_num_opcodes;
-
-/* These are the data structures used to hold the register information. */
-extern const struct nios2_reg nios2_builtin_regs[];
-extern struct nios2_reg *nios2_regs;
-extern const int nios2_num_builtin_regs;
-extern int nios2_num_regs;
-
-/* Machine-independent macro for number of opcodes. */
-#define NUMOPCODES bfd_nios2_num_opcodes
-#define NUMREGISTERS nios2_num_regs;
-
-/* This is made extern so that the assembler can use it to find out
- what instruction caused an error. */
-extern const struct nios2_opcode *nios2_find_opcode_hash (unsigned long);
-
-#endif /* _NIOS2_H */
diff --git a/include/opcode/np1.h b/include/opcode/np1.h
deleted file mode 100644
index 6dadafde0..000000000
--- a/include/opcode/np1.h
+++ /dev/null
@@ -1,421 +0,0 @@
-/* Print GOULD NPL instructions for GDB, the GNU debugger.
- Copyright 1986, 1987, 1989, 1991, 2010 Free Software Foundation, Inc.
-
- This file is part of GDB.
-
- GDB 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 3, or (at your option)
- any later version.
-
- GDB 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 GDB; see the file COPYING3. If not, write to
- the Free Software Foundation, 51 Franklin Street - Fifth Floor,
- Boston, MA 02110-1301, USA. */
-
-struct gld_opcode
-{
- char *name;
- unsigned long opcode;
- unsigned long mask;
- char *args;
- int length;
-};
-
-/* We store four bytes of opcode for all opcodes because that
- is the most any of them need. The actual length of an instruction
- is always at least 2 bytes, and at most four. The length of the
- instruction is based on the opcode.
-
- The mask component is a mask saying which bits must match
- particular opcode in order for an instruction to be an instance
- of that opcode.
-
- The args component is a string containing characters
- that are used to format the arguments to the instruction. */
-
-/* Kinds of operands:
- r Register in first field
- R Register in second field
- b Base register in first field
- B Base register in second field
- v Vector register in first field
- V Vector register in first field
- A Optional address register (base register)
- X Optional index register
- I Immediate data (16bits signed)
- O Offset field (16bits signed)
- h Offset field (15bits signed)
- d Offset field (14bits signed)
- S Shift count field
-
- any other characters are printed as is... */
-
-/* The assembler requires that this array be sorted as follows:
- all instances of the same mnemonic must be consecutive.
- All instances of the same mnemonic with the same number of operands
- must be consecutive. */
-struct gld_opcode gld_opcodes[] =
-{
-{ "lb", 0xb4080000, 0xfc080000, "r,xOA,X", 4 },
-{ "lnb", 0xb8080000, 0xfc080000, "r,xOA,X", 4 },
-{ "lbs", 0xec080000, 0xfc080000, "r,xOA,X", 4 },
-{ "lh", 0xb4000001, 0xfc080001, "r,xOA,X", 4 },
-{ "lnh", 0xb8000001, 0xfc080001, "r,xOA,X", 4 },
-{ "lw", 0xb4000000, 0xfc080000, "r,xOA,X", 4 },
-{ "lnw", 0xb8000000, 0xfc080000, "r,xOA,X", 4 },
-{ "ld", 0xb4000002, 0xfc080002, "r,xOA,X", 4 },
-{ "lnd", 0xb8000002, 0xfc080002, "r,xOA,X", 4 },
-{ "li", 0xf8000000, 0xfc7f0000, "r,I", 4 },
-{ "lpa", 0x50080000, 0xfc080000, "r,xOA,X", 4 },
-{ "la", 0x50000000, 0xfc080000, "r,xOA,X", 4 },
-{ "labr", 0x58080000, 0xfc080000, "b,xOA,X", 4 },
-{ "lbp", 0x90080000, 0xfc080000, "r,xOA,X", 4 },
-{ "lhp", 0x90000001, 0xfc080001, "r,xOA,X", 4 },
-{ "lwp", 0x90000000, 0xfc080000, "r,xOA,X", 4 },
-{ "ldp", 0x90000002, 0xfc080002, "r,xOA,X", 4 },
-{ "suabr", 0x58000000, 0xfc080000, "b,xOA,X", 4 },
-{ "lf", 0xbc000000, 0xfc080000, "r,xOA,X", 4 },
-{ "lfbr", 0xbc080000, 0xfc080000, "b,xOA,X", 4 },
-{ "lwbr", 0x5c000000, 0xfc080000, "b,xOA,X", 4 },
-{ "stb", 0xd4080000, 0xfc080000, "r,xOA,X", 4 },
-{ "sth", 0xd4000001, 0xfc080001, "r,xOA,X", 4 },
-{ "stw", 0xd4000000, 0xfc080000, "r,xOA,X", 4 },
-{ "std", 0xd4000002, 0xfc080002, "r,xOA,X", 4 },
-{ "stf", 0xdc000000, 0xfc080000, "r,xOA,X", 4 },
-{ "stfbr", 0xdc080000, 0xfc080000, "b,xOA,X", 4 },
-{ "stwbr", 0x54000000, 0xfc080000, "b,xOA,X", 4 },
-{ "zmb", 0xd8080000, 0xfc080000, "r,xOA,X", 4 },
-{ "zmh", 0xd8000001, 0xfc080001, "r,xOA,X", 4 },
-{ "zmw", 0xd8000000, 0xfc080000, "r,xOA,X", 4 },
-{ "zmd", 0xd8000002, 0xfc080002, "r,xOA,X", 4 },
-{ "stbp", 0x94080000, 0xfc080000, "r,xOA,X", 4 },
-{ "sthp", 0x94000001, 0xfc080001, "r,xOA,X", 4 },
-{ "stwp", 0x94000000, 0xfc080000, "r,xOA,X", 4 },
-{ "stdp", 0x94000002, 0xfc080002, "r,xOA,X", 4 },
-{ "lil", 0xf80b0000, 0xfc7f0000, "r,D", 4 },
-{ "lwsl1", 0xec000000, 0xfc080000, "r,xOA,X", 4 },
-{ "lwsl2", 0xfc000000, 0xfc080000, "r,xOA,X", 4 },
-{ "lwsl3", 0xfc080000, 0xfc080000, "r,xOA,X", 4 },
-
-{ "lvb", 0xb0080000, 0xfc080000, "v,xOA,X", 4 },
-{ "lvh", 0xb0000001, 0xfc080001, "v,xOA,X", 4 },
-{ "lvw", 0xb0000000, 0xfc080000, "v,xOA,X", 4 },
-{ "lvd", 0xb0000002, 0xfc080002, "v,xOA,X", 4 },
-{ "liv", 0x3c040000, 0xfc0f0000, "v,R", 2 },
-{ "livf", 0x3c080000, 0xfc0f0000, "v,R", 2 },
-{ "stvb", 0xd0080000, 0xfc080000, "v,xOA,X", 4 },
-{ "stvh", 0xd0000001, 0xfc080001, "v,xOA,X", 4 },
-{ "stvw", 0xd0000000, 0xfc080000, "v,xOA,X", 4 },
-{ "stvd", 0xd0000002, 0xfc080002, "v,xOA,X", 4 },
-
-{ "trr", 0x2c000000, 0xfc0f0000, "r,R", 2 },
-{ "trn", 0x2c040000, 0xfc0f0000, "r,R", 2 },
-{ "trnd", 0x2c0c0000, 0xfc0f0000, "r,R", 2 },
-{ "trabs", 0x2c010000, 0xfc0f0000, "r,R", 2 },
-{ "trabsd", 0x2c090000, 0xfc0f0000, "r,R", 2 },
-{ "trc", 0x2c030000, 0xfc0f0000, "r,R", 2 },
-{ "xcr", 0x28040000, 0xfc0f0000, "r,R", 2 },
-{ "cxcr", 0x2c060000, 0xfc0f0000, "r,R", 2 },
-{ "cxcrd", 0x2c0e0000, 0xfc0f0000, "r,R", 2 },
-{ "tbrr", 0x2c020000, 0xfc0f0000, "r,B", 2 },
-{ "trbr", 0x28030000, 0xfc0f0000, "b,R", 2 },
-{ "xcbr", 0x28020000, 0xfc0f0000, "b,B", 2 },
-{ "tbrbr", 0x28010000, 0xfc0f0000, "b,B", 2 },
-
-{ "trvv", 0x28050000, 0xfc0f0000, "v,V", 2 },
-{ "trvvn", 0x2c050000, 0xfc0f0000, "v,V", 2 },
-{ "trvvnd", 0x2c0d0000, 0xfc0f0000, "v,V", 2 },
-{ "trvab", 0x2c070000, 0xfc0f0000, "v,V", 2 },
-{ "trvabd", 0x2c0f0000, 0xfc0f0000, "v,V", 2 },
-{ "cmpv", 0x14060000, 0xfc0f0000, "v,V", 2 },
-{ "expv", 0x14070000, 0xfc0f0000, "v,V", 2 },
-{ "mrvvlt", 0x10030000, 0xfc0f0000, "v,V", 2 },
-{ "mrvvle", 0x10040000, 0xfc0f0000, "v,V", 2 },
-{ "mrvvgt", 0x14030000, 0xfc0f0000, "v,V", 2 },
-{ "mrvvge", 0x14040000, 0xfc0f0000, "v,V", 2 },
-{ "mrvveq", 0x10050000, 0xfc0f0000, "v,V", 2 },
-{ "mrvvne", 0x10050000, 0xfc0f0000, "v,V", 2 },
-{ "mrvrlt", 0x100d0000, 0xfc0f0000, "v,R", 2 },
-{ "mrvrle", 0x100e0000, 0xfc0f0000, "v,R", 2 },
-{ "mrvrgt", 0x140d0000, 0xfc0f0000, "v,R", 2 },
-{ "mrvrge", 0x140e0000, 0xfc0f0000, "v,R", 2 },
-{ "mrvreq", 0x100f0000, 0xfc0f0000, "v,R", 2 },
-{ "mrvrne", 0x140f0000, 0xfc0f0000, "v,R", 2 },
-{ "trvr", 0x140b0000, 0xfc0f0000, "r,V", 2 },
-{ "trrv", 0x140c0000, 0xfc0f0000, "v,R", 2 },
-
-{ "bu", 0x40000000, 0xff880000, "xOA,X", 4 },
-{ "bns", 0x70080000, 0xff880000, "xOA,X", 4 },
-{ "bnco", 0x70880000, 0xff880000, "xOA,X", 4 },
-{ "bge", 0x71080000, 0xff880000, "xOA,X", 4 },
-{ "bne", 0x71880000, 0xff880000, "xOA,X", 4 },
-{ "bunge", 0x72080000, 0xff880000, "xOA,X", 4 },
-{ "bunle", 0x72880000, 0xff880000, "xOA,X", 4 },
-{ "bgt", 0x73080000, 0xff880000, "xOA,X", 4 },
-{ "bnany", 0x73880000, 0xff880000, "xOA,X", 4 },
-{ "bs" , 0x70000000, 0xff880000, "xOA,X", 4 },
-{ "bco", 0x70800000, 0xff880000, "xOA,X", 4 },
-{ "blt", 0x71000000, 0xff880000, "xOA,X", 4 },
-{ "beq", 0x71800000, 0xff880000, "xOA,X", 4 },
-{ "buge", 0x72000000, 0xff880000, "xOA,X", 4 },
-{ "bult", 0x72800000, 0xff880000, "xOA,X", 4 },
-{ "ble", 0x73000000, 0xff880000, "xOA,X", 4 },
-{ "bany", 0x73800000, 0xff880000, "xOA,X", 4 },
-{ "brlnk", 0x44000000, 0xfc080000, "r,xOA,X", 4 },
-{ "bib", 0x48000000, 0xfc080000, "r,xOA,X", 4 },
-{ "bih", 0x48080000, 0xfc080000, "r,xOA,X", 4 },
-{ "biw", 0x4c000000, 0xfc080000, "r,xOA,X", 4 },
-{ "bid", 0x4c080000, 0xfc080000, "r,xOA,X", 4 },
-{ "bivb", 0x60000000, 0xfc080000, "r,xOA,X", 4 },
-{ "bivh", 0x60080000, 0xfc080000, "r,xOA,X", 4 },
-{ "bivw", 0x64000000, 0xfc080000, "r,xOA,X", 4 },
-{ "bivd", 0x64080000, 0xfc080000, "r,xOA,X", 4 },
-{ "bvsb", 0x68000000, 0xfc080000, "r,xOA,X", 4 },
-{ "bvsh", 0x68080000, 0xfc080000, "r,xOA,X", 4 },
-{ "bvsw", 0x6c000000, 0xfc080000, "r,xOA,X", 4 },
-{ "bvsd", 0x6c080000, 0xfc080000, "r,xOA,X", 4 },
-
-{ "camb", 0x80080000, 0xfc080000, "r,xOA,X", 4 },
-{ "camh", 0x80000001, 0xfc080001, "r,xOA,X", 4 },
-{ "camw", 0x80000000, 0xfc080000, "r,xOA,X", 4 },
-{ "camd", 0x80000002, 0xfc080002, "r,xOA,X", 4 },
-{ "car", 0x10000000, 0xfc0f0000, "r,R", 2 },
-{ "card", 0x14000000, 0xfc0f0000, "r,R", 2 },
-{ "ci", 0xf8050000, 0xfc7f0000, "r,I", 4 },
-{ "chkbnd", 0x5c080000, 0xfc080000, "r,xOA,X", 4 },
-
-{ "cavv", 0x10010000, 0xfc0f0000, "v,V", 2 },
-{ "cavr", 0x10020000, 0xfc0f0000, "v,R", 2 },
-{ "cavvd", 0x10090000, 0xfc0f0000, "v,V", 2 },
-{ "cavrd", 0x100b0000, 0xfc0f0000, "v,R", 2 },
-
-{ "anmb", 0x84080000, 0xfc080000, "r,xOA,X", 4 },
-{ "anmh", 0x84000001, 0xfc080001, "r,xOA,X", 4 },
-{ "anmw", 0x84000000, 0xfc080000, "r,xOA,X", 4 },
-{ "anmd", 0x84000002, 0xfc080002, "r,xOA,X", 4 },
-{ "anr", 0x04000000, 0xfc0f0000, "r,R", 2 },
-{ "ani", 0xf8080000, 0xfc7f0000, "r,I", 4 },
-{ "ormb", 0xb8080000, 0xfc080000, "r,xOA,X", 4 },
-{ "ormh", 0xb8000001, 0xfc080001, "r,xOA,X", 4 },
-{ "ormw", 0xb8000000, 0xfc080000, "r,xOA,X", 4 },
-{ "ormd", 0xb8000002, 0xfc080002, "r,xOA,X", 4 },
-{ "orr", 0x08000000, 0xfc0f0000, "r,R", 2 },
-{ "oi", 0xf8090000, 0xfc7f0000, "r,I", 4 },
-{ "eomb", 0x8c080000, 0xfc080000, "r,xOA,X", 4 },
-{ "eomh", 0x8c000001, 0xfc080001, "r,xOA,X", 4 },
-{ "eomw", 0x8c000000, 0xfc080000, "r,xOA,X", 4 },
-{ "eomd", 0x8c000002, 0xfc080002, "r,xOA,X", 4 },
-{ "eor", 0x0c000000, 0xfc0f0000, "r,R", 2 },
-{ "eoi", 0xf80a0000, 0xfc7f0000, "r,I", 4 },
-
-{ "anvv", 0x04010000, 0xfc0f0000, "v,V", 2 },
-{ "anvr", 0x04020000, 0xfc0f0000, "v,R", 2 },
-{ "orvv", 0x08010000, 0xfc0f0000, "v,V", 2 },
-{ "orvr", 0x08020000, 0xfc0f0000, "v,R", 2 },
-{ "eovv", 0x0c010000, 0xfc0f0000, "v,V", 2 },
-{ "eovr", 0x0c020000, 0xfc0f0000, "v,R", 2 },
-
-{ "sacz", 0x100c0000, 0xfc0f0000, "r,R", 2 },
-{ "sla", 0x1c400000, 0xfc600000, "r,S", 2 },
-{ "sll", 0x1c600000, 0xfc600000, "r,S", 2 },
-{ "slc", 0x24400000, 0xfc600000, "r,S", 2 },
-{ "slad", 0x20400000, 0xfc600000, "r,S", 2 },
-{ "slld", 0x20600000, 0xfc600000, "r,S", 2 },
-{ "sra", 0x1c000000, 0xfc600000, "r,S", 2 },
-{ "srl", 0x1c200000, 0xfc600000, "r,S", 2 },
-{ "src", 0x24000000, 0xfc600000, "r,S", 2 },
-{ "srad", 0x20000000, 0xfc600000, "r,S", 2 },
-{ "srld", 0x20200000, 0xfc600000, "r,S", 2 },
-{ "sda", 0x3c030000, 0xfc0f0000, "r,R", 2 },
-{ "sdl", 0x3c020000, 0xfc0f0000, "r,R", 2 },
-{ "sdc", 0x3c010000, 0xfc0f0000, "r,R", 2 },
-{ "sdad", 0x3c0b0000, 0xfc0f0000, "r,R", 2 },
-{ "sdld", 0x3c0a0000, 0xfc0f0000, "r,R", 2 },
-
-{ "svda", 0x3c070000, 0xfc0f0000, "v,R", 2 },
-{ "svdl", 0x3c060000, 0xfc0f0000, "v,R", 2 },
-{ "svdc", 0x3c050000, 0xfc0f0000, "v,R", 2 },
-{ "svdad", 0x3c0e0000, 0xfc0f0000, "v,R", 2 },
-{ "svdld", 0x3c0d0000, 0xfc0f0000, "v,R", 2 },
-
-{ "sbm", 0xac080000, 0xfc080000, "f,xOA,X", 4 },
-{ "zbm", 0xac000000, 0xfc080000, "f,xOA,X", 4 },
-{ "tbm", 0xa8080000, 0xfc080000, "f,xOA,X", 4 },
-{ "incmb", 0xa0000000, 0xfc080000, "xOA,X", 4 },
-{ "incmh", 0xa0080000, 0xfc080000, "xOA,X", 4 },
-{ "incmw", 0xa4000000, 0xfc080000, "xOA,X", 4 },
-{ "incmd", 0xa4080000, 0xfc080000, "xOA,X", 4 },
-{ "sbmd", 0x7c080000, 0xfc080000, "r,xOA,X", 4 },
-{ "zbmd", 0x7c000000, 0xfc080000, "r,xOA,X", 4 },
-{ "tbmd", 0x78080000, 0xfc080000, "r,xOA,X", 4 },
-
-{ "ssm", 0x9c080000, 0xfc080000, "f,xOA,X", 4 },
-{ "zsm", 0x9c000000, 0xfc080000, "f,xOA,X", 4 },
-{ "tsm", 0x98080000, 0xfc080000, "f,xOA,X", 4 },
-
-{ "admb", 0xc8080000, 0xfc080000, "r,xOA,X", 4 },
-{ "admh", 0xc8000001, 0xfc080001, "r,xOA,X", 4 },
-{ "admw", 0xc8000000, 0xfc080000, "r,xOA,X", 4 },
-{ "admd", 0xc8000002, 0xfc080002, "r,xOA,X", 4 },
-{ "adr", 0x38000000, 0xfc0f0000, "r,R", 2 },
-{ "armb", 0xe8080000, 0xfc080000, "r,xOA,X", 4 },
-{ "armh", 0xe8000001, 0xfc080001, "r,xOA,X", 4 },
-{ "armw", 0xe8000000, 0xfc080000, "r,xOA,X", 4 },
-{ "armd", 0xe8000002, 0xfc080002, "r,xOA,X", 4 },
-{ "adi", 0xf8010000, 0xfc0f0000, "r,I", 4 },
-{ "sumb", 0xcc080000, 0xfc080000, "r,xOA,X", 4 },
-{ "sumh", 0xcc000001, 0xfc080001, "r,xOA,X", 4 },
-{ "sumw", 0xcc000000, 0xfc080000, "r,xOA,X", 4 },
-{ "sumd", 0xcc000002, 0xfc080002, "r,xOA,X", 4 },
-{ "sur", 0x3c000000, 0xfc0f0000, "r,R", 2 },
-{ "sui", 0xf8020000, 0xfc0f0000, "r,I", 4 },
-{ "mpmb", 0xc0080000, 0xfc080000, "r,xOA,X", 4 },
-{ "mpmh", 0xc0000001, 0xfc080001, "r,xOA,X", 4 },
-{ "mpmw", 0xc0000000, 0xfc080000, "r,xOA,X", 4 },
-{ "mpr", 0x38020000, 0xfc0f0000, "r,R", 2 },
-{ "mprd", 0x3c0f0000, 0xfc0f0000, "r,R", 2 },
-{ "mpi", 0xf8030000, 0xfc0f0000, "r,I", 4 },
-{ "dvmb", 0xc4080000, 0xfc080000, "r,xOA,X", 4 },
-{ "dvmh", 0xc4000001, 0xfc080001, "r,xOA,X", 4 },
-{ "dvmw", 0xc4000000, 0xfc080000, "r,xOA,X", 4 },
-{ "dvr", 0x380a0000, 0xfc0f0000, "r,R", 2 },
-{ "dvi", 0xf8040000, 0xfc0f0000, "r,I", 4 },
-{ "exs", 0x38080000, 0xfc0f0000, "r,R", 2 },
-
-{ "advv", 0x30000000, 0xfc0f0000, "v,V", 2 },
-{ "advvd", 0x30080000, 0xfc0f0000, "v,V", 2 },
-{ "adrv", 0x34000000, 0xfc0f0000, "v,R", 2 },
-{ "adrvd", 0x34080000, 0xfc0f0000, "v,R", 2 },
-{ "suvv", 0x30010000, 0xfc0f0000, "v,V", 2 },
-{ "suvvd", 0x30090000, 0xfc0f0000, "v,V", 2 },
-{ "surv", 0x34010000, 0xfc0f0000, "v,R", 2 },
-{ "survd", 0x34090000, 0xfc0f0000, "v,R", 2 },
-{ "mpvv", 0x30020000, 0xfc0f0000, "v,V", 2 },
-{ "mprv", 0x34020000, 0xfc0f0000, "v,R", 2 },
-
-{ "adfw", 0xe0080000, 0xfc080000, "r,xOA,X", 4 },
-{ "adfd", 0xe0080002, 0xfc080002, "r,xOA,X", 4 },
-{ "adrfw", 0x38010000, 0xfc0f0000, "r,R", 2 },
-{ "adrfd", 0x38090000, 0xfc0f0000, "r,R", 2 },
-{ "surfw", 0xe0000000, 0xfc080000, "r,xOA,X", 4 },
-{ "surfd", 0xe0000002, 0xfc080002, "r,xOA,X", 4 },
-{ "surfw", 0x38030000, 0xfc0f0000, "r,R", 2 },
-{ "surfd", 0x380b0000, 0xfc0f0000, "r,R", 2 },
-{ "mpfw", 0xe4080000, 0xfc080000, "r,xOA,X", 4 },
-{ "mpfd", 0xe4080002, 0xfc080002, "r,xOA,X", 4 },
-{ "mprfw", 0x38060000, 0xfc0f0000, "r,R", 2 },
-{ "mprfd", 0x380e0000, 0xfc0f0000, "r,R", 2 },
-{ "rfw", 0xe4000000, 0xfc080000, "r,xOA,X", 4 },
-{ "rfd", 0xe4000002, 0xfc080002, "r,xOA,X", 4 },
-{ "rrfw", 0x0c0e0000, 0xfc0f0000, "r", 2 },
-{ "rrfd", 0x0c0f0000, 0xfc0f0000, "r", 2 },
-
-{ "advvfw", 0x30040000, 0xfc0f0000, "v,V", 2 },
-{ "advvfd", 0x300c0000, 0xfc0f0000, "v,V", 2 },
-{ "adrvfw", 0x34040000, 0xfc0f0000, "v,R", 2 },
-{ "adrvfd", 0x340c0000, 0xfc0f0000, "v,R", 2 },
-{ "suvvfw", 0x30050000, 0xfc0f0000, "v,V", 2 },
-{ "suvvfd", 0x300d0000, 0xfc0f0000, "v,V", 2 },
-{ "survfw", 0x34050000, 0xfc0f0000, "v,R", 2 },
-{ "survfd", 0x340d0000, 0xfc0f0000, "v,R", 2 },
-{ "mpvvfw", 0x30060000, 0xfc0f0000, "v,V", 2 },
-{ "mpvvfd", 0x300e0000, 0xfc0f0000, "v,V", 2 },
-{ "mprvfw", 0x34060000, 0xfc0f0000, "v,R", 2 },
-{ "mprvfd", 0x340e0000, 0xfc0f0000, "v,R", 2 },
-{ "rvfw", 0x30070000, 0xfc0f0000, "v", 2 },
-{ "rvfd", 0x300f0000, 0xfc0f0000, "v", 2 },
-
-{ "fltw", 0x38070000, 0xfc0f0000, "r,R", 2 },
-{ "fltd", 0x380f0000, 0xfc0f0000, "r,R", 2 },
-{ "fixw", 0x38050000, 0xfc0f0000, "r,R", 2 },
-{ "fixd", 0x380d0000, 0xfc0f0000, "r,R", 2 },
-{ "cfpds", 0x3c090000, 0xfc0f0000, "r,R", 2 },
-
-{ "fltvw", 0x080d0000, 0xfc0f0000, "v,V", 2 },
-{ "fltvd", 0x080f0000, 0xfc0f0000, "v,V", 2 },
-{ "fixvw", 0x080c0000, 0xfc0f0000, "v,V", 2 },
-{ "fixvd", 0x080e0000, 0xfc0f0000, "v,V", 2 },
-{ "cfpvds", 0x0c0d0000, 0xfc0f0000, "v,V", 2 },
-
-{ "orvrn", 0x000a0000, 0xfc0f0000, "r,V", 2 },
-{ "andvrn", 0x00080000, 0xfc0f0000, "r,V", 2 },
-{ "frsteq", 0x04090000, 0xfc0f0000, "r,V", 2 },
-{ "sigma", 0x0c080000, 0xfc0f0000, "r,V", 2 },
-{ "sigmad", 0x0c0a0000, 0xfc0f0000, "r,V", 2 },
-{ "sigmf", 0x08080000, 0xfc0f0000, "r,V", 2 },
-{ "sigmfd", 0x080a0000, 0xfc0f0000, "r,V", 2 },
-{ "prodf", 0x04080000, 0xfc0f0000, "r,V", 2 },
-{ "prodfd", 0x040a0000, 0xfc0f0000, "r,V", 2 },
-{ "maxv", 0x10080000, 0xfc0f0000, "r,V", 2 },
-{ "maxvd", 0x100a0000, 0xfc0f0000, "r,V", 2 },
-{ "minv", 0x14080000, 0xfc0f0000, "r,V", 2 },
-{ "minvd", 0x140a0000, 0xfc0f0000, "r,V", 2 },
-
-{ "lpsd", 0xf0000000, 0xfc080000, "xOA,X", 4 },
-{ "ldc", 0xf0080000, 0xfc080000, "xOA,X", 4 },
-{ "spm", 0x040c0000, 0xfc0f0000, "r", 2 },
-{ "rpm", 0x040d0000, 0xfc0f0000, "r", 2 },
-{ "tritr", 0x00070000, 0xfc0f0000, "r", 2 },
-{ "trrit", 0x00060000, 0xfc0f0000, "r", 2 },
-{ "rpswt", 0x04080000, 0xfc0f0000, "r", 2 },
-{ "exr", 0xf8070000, 0xfc0f0000, "", 4 },
-{ "halt", 0x00000000, 0xfc0f0000, "", 2 },
-{ "wait", 0x00010000, 0xfc0f0000, "", 2 },
-{ "nop", 0x00020000, 0xfc0f0000, "", 2 },
-{ "eiae", 0x00030000, 0xfc0f0000, "", 2 },
-{ "efae", 0x000d0000, 0xfc0f0000, "", 2 },
-{ "diae", 0x000e0000, 0xfc0f0000, "", 2 },
-{ "dfae", 0x000f0000, 0xfc0f0000, "", 2 },
-{ "spvc", 0xf8060000, 0xfc0f0000, "r,T,N", 4 },
-{ "rdsts", 0x00090000, 0xfc0f0000, "r", 2 },
-{ "setcpu", 0x000c0000, 0xfc0f0000, "r", 2 },
-{ "cmc", 0x000b0000, 0xfc0f0000, "r", 2 },
-{ "trrcu", 0x00040000, 0xfc0f0000, "r", 2 },
-{ "attnio", 0x00050000, 0xfc0f0000, "", 2 },
-{ "fudit", 0x28080000, 0xfc0f0000, "", 2 },
-{ "break", 0x28090000, 0xfc0f0000, "", 2 },
-{ "frzss", 0x280a0000, 0xfc0f0000, "", 2 },
-{ "ripi", 0x04040000, 0xfc0f0000, "r,R", 2 },
-{ "xcp", 0x04050000, 0xfc0f0000, "r", 2 },
-{ "block", 0x04060000, 0xfc0f0000, "", 2 },
-{ "unblock", 0x04070000, 0xfc0f0000, "", 2 },
-{ "trsc", 0x08060000, 0xfc0f0000, "r,R", 2 },
-{ "tscr", 0x08070000, 0xfc0f0000, "r,R", 2 },
-{ "fq", 0x04080000, 0xfc0f0000, "r", 2 },
-{ "flupte", 0x2c080000, 0xfc0f0000, "r", 2 },
-{ "rviu", 0x040f0000, 0xfc0f0000, "", 2 },
-{ "ldel", 0x280c0000, 0xfc0f0000, "r,R", 2 },
-{ "ldu", 0x280d0000, 0xfc0f0000, "r,R", 2 },
-{ "stdecc", 0x280b0000, 0xfc0f0000, "r,R", 2 },
-{ "trpc", 0x08040000, 0xfc0f0000, "r", 2 },
-{ "tpcr", 0x08050000, 0xfc0f0000, "r", 2 },
-{ "ghalt", 0x0c050000, 0xfc0f0000, "r", 2 },
-{ "grun", 0x0c040000, 0xfc0f0000, "", 2 },
-{ "tmpr", 0x2c0a0000, 0xfc0f0000, "r,R", 2 },
-{ "trmp", 0x2c0b0000, 0xfc0f0000, "r,R", 2 },
-
-{ "trrve", 0x28060000, 0xfc0f0000, "r", 2 },
-{ "trver", 0x28070000, 0xfc0f0000, "r", 2 },
-{ "trvlr", 0x280f0000, 0xfc0f0000, "r", 2 },
-
-{ "linkfl", 0x18000000, 0xfc0f0000, "r,R", 2 },
-{ "linkbl", 0x18020000, 0xfc0f0000, "r,R", 2 },
-{ "linkfp", 0x18010000, 0xfc0f0000, "r,R", 2 },
-{ "linkbp", 0x18030000, 0xfc0f0000, "r,R", 2 },
-{ "linkpl", 0x18040000, 0xfc0f0000, "r,R", 2 },
-{ "ulinkl", 0x18080000, 0xfc0f0000, "r,R", 2 },
-{ "ulinkp", 0x18090000, 0xfc0f0000, "r,R", 2 },
-{ "ulinktl", 0x180a0000, 0xfc0f0000, "r,R", 2 },
-{ "ulinktp", 0x180b0000, 0xfc0f0000, "r,R", 2 },
-};
-
-int numopcodes = sizeof(gld_opcodes) / sizeof(gld_opcodes[0]);
-
-struct gld_opcode *endop = gld_opcodes + sizeof(gld_opcodes) /
- sizeof(gld_opcodes[0]);
diff --git a/include/opcode/ns32k.h b/include/opcode/ns32k.h
deleted file mode 100644
index 34c42f875..000000000
--- a/include/opcode/ns32k.h
+++ /dev/null
@@ -1,487 +0,0 @@
-/* ns32k-opcode.h -- Opcode table for National Semi 32k processor
- Copyright 1987, 1991, 1994, 2002, 2010 Free Software Foundation, Inc.
-
- This file is part of GAS, the GNU Assembler.
-
- GAS is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
-
- GAS is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GAS; see the file COPYING3. If not, write to
- the Free Software Foundation, 51 Franklin Street - Fifth Floor,
- Boston, MA 02110-1301, USA. */
-
-#ifdef SEQUENT_COMPATABILITY
-#define DEF_MODEC 20
-#define DEF_MODEL 21
-#endif
-
-#ifndef DEF_MODEC
-#define DEF_MODEC 20
-#endif
-
-#ifndef DEF_MODEL
-#define DEF_MODEL 20
-#endif
-/*
- After deciding the instruction entry (via hash.c) the instruction parser
- will try to match the operands after the instruction to the required set
- given in the entry operandfield. Every operand will result in a change in
- the opcode or the addition of data to the opcode.
- The operands in the source instruction are checked for inconsistent
- semantics.
-
- F : 32 bit float general form
- L : 64 bit float "
- B : byte "
- W : word "
- D : double-word "
- A : double-word gen-address-form ie no regs, no immediate
- I : integer writeable gen int except immediate (A + reg)
- Z : floating writeable gen float except immediate (Z + freg)
- d : displacement
- b : displacement - pc relative addressing acb
- p : displacement - pc relative addressing br bcond bsr cxp
- q : quick
- i : immediate (8 bits)
- This is not a standard ns32k operandtype, it is used to build
- instructions like svc arg1,arg2
- Svc is the instruction SuperVisorCall and is sometimes used to
- call OS-routines from usermode. Some args might be handy!
- r : register number (3 bits)
- O : setcfg instruction optionslist
- C : cinv instruction optionslist
- S : stringinstruction optionslist
- U : registerlist save,enter
- u : registerlist restore,exit
- M : mmu register
- P : cpu register
- g : 3:rd operand of inss or exts instruction
- G : 4:th operand of inss or exts instruction
- Those operands are encoded in the same byte.
- This byte is placed last in the instruction.
- f : operand of sfsr
- H : sequent-hack for bsr (Warning)
-
-column 1 instructions
- 2 number of bits in opcode.
- 3 number of bits in opcode explicitly
- determined by the instruction type.
- 4 opcodeseed, the number we build our opcode
- from.
- 5 operandtypes, used by operandparser.
- 6 size in bytes of immediate
-*/
-struct ns32k_opcode {
- const char *name;
- unsigned char opcode_id_size; /* not used by the assembler */
- unsigned char opcode_size;
- unsigned long opcode_seed;
- const char *operands;
- unsigned char im_size; /* not used by dissassembler */
- const char *default_args; /* default to those args when none given */
- char default_modec; /* default to this addr-mode when ambigous
- ie when the argument of a general addr-mode
- is a plain constant */
- char default_model; /* is a plain label */
-};
-
-#ifdef comment
-/* This section was from the gdb version of this file. */
-
-#ifndef ns32k_opcodeT
-#define ns32k_opcodeT int
-#endif /* no ns32k_opcodeT */
-
-struct not_wot /* ns32k opcode table: wot to do with this */
- /* particular opcode */
-{
- int obits; /* number of opcode bits */
- int ibits; /* number of instruction bits */
- ns32k_opcodeT code; /* op-code (may be > 8 bits!) */
- const char *args; /* how to compile said opcode */
-};
-
-struct not /* ns32k opcode text */
-{
- const char *name; /* opcode name: lowercase string [key] */
- struct not_wot detail; /* rest of opcode table [datum] */
-};
-
-/* Instructions look like this:
-
- basic instruction--1, 2, or 3 bytes
- index byte for operand A, if operand A is indexed--1 byte
- index byte for operand B, if operand B is indexed--1 byte
- addressing extension for operand A
- addressing extension for operand B
- implied operands
-
- Operand A is the operand listed first in the following opcode table.
- Operand B is the operand listed second in the following opcode table.
- All instructions have at most 2 general operands, so this is enough.
- The implied operands are associated with operands other than A and B.
-
- Each operand has a digit and a letter.
-
- The digit gives the position in the assembly language. The letter,
- one of the following, tells us what kind of operand it is. */
-
-/* F : 32 bit float
- * L : 64 bit float
- * B : byte
- * W : word
- * D : double-word
- * I : integer not immediate
- * Z : floating not immediate
- * d : displacement
- * q : quick
- * i : immediate (8 bits)
- * r : register number (3 bits)
- * p : displacement - pc relative addressing
-*/
-
-
-#endif /* comment */
-
-static const struct ns32k_opcode ns32k_opcodes[]=
-{
- { "absf", 14,24, 0x35be, "1F2Z", 4, "", DEF_MODEC,DEF_MODEL },
- { "absl", 14,24, 0x34be, "1L2Z", 8, "", DEF_MODEC,DEF_MODEL },
- { "absb", 14,24, 0x304e, "1B2I", 1, "", DEF_MODEC,DEF_MODEL },
- { "absw", 14,24, 0x314e, "1W2I", 2, "", DEF_MODEC,DEF_MODEL },
- { "absd", 14,24, 0x334e, "1D2I", 4, "", DEF_MODEC,DEF_MODEL },
- { "acbb", 7,16, 0x4c, "2I1q3p", 1, "", DEF_MODEC,DEF_MODEL },
- { "acbw", 7,16, 0x4d, "2I1q3p", 2, "", DEF_MODEC,DEF_MODEL },
- { "acbd", 7,16, 0x4f, "2I1q3p", 4, "", DEF_MODEC,DEF_MODEL },
- { "addf", 14,24, 0x01be, "1F2Z", 4, "", DEF_MODEC,DEF_MODEL },
- { "addl", 14,24, 0x00be, "1L2Z", 8, "", DEF_MODEC,DEF_MODEL },
- { "addb", 6,16, 0x00, "1B2I", 1, "", DEF_MODEC,DEF_MODEL },
- { "addw", 6,16, 0x01, "1W2I", 2, "", DEF_MODEC,DEF_MODEL },
- { "addd", 6,16, 0x03, "1D2I", 4, "", DEF_MODEC,DEF_MODEL },
- { "addcb", 6,16, 0x10, "1B2I", 1, "", DEF_MODEC,DEF_MODEL },
- { "addcw", 6,16, 0x11, "1W2I", 2, "", DEF_MODEC,DEF_MODEL },
- { "addcd", 6,16, 0x13, "1D2I", 4, "", DEF_MODEC,DEF_MODEL },
- { "addpb", 14,24, 0x3c4e, "1B2I", 1, "", DEF_MODEC,DEF_MODEL },
- { "addpw", 14,24, 0x3d4e, "1W2I", 2, "", DEF_MODEC,DEF_MODEL },
- { "addpd", 14,24, 0x3f4e, "1D2I", 4, "", DEF_MODEC,DEF_MODEL },
- { "addqb", 7,16, 0x0c, "2I1q", 1, "", DEF_MODEC,DEF_MODEL },
- { "addqw", 7,16, 0x0d, "2I1q", 2, "", DEF_MODEC,DEF_MODEL },
- { "addqd", 7,16, 0x0f, "2I1q", 4, "", DEF_MODEC,DEF_MODEL },
- { "addr", 6,16, 0x27, "1A2I", 4, "", 21,21 },
- { "adjspb", 11,16, 0x057c, "1B", 1, "", DEF_MODEC,DEF_MODEL },
- { "adjspw", 11,16, 0x057d, "1W", 2, "", DEF_MODEC,DEF_MODEL },
- { "adjspd", 11,16, 0x057f, "1D", 4, "", DEF_MODEC,DEF_MODEL },
- { "andb", 6,16, 0x28, "1B2I", 1, "", DEF_MODEC,DEF_MODEL },
- { "andw", 6,16, 0x29, "1W2I", 2, "", DEF_MODEC,DEF_MODEL },
- { "andd", 6,16, 0x2b, "1D2I", 4, "", DEF_MODEC,DEF_MODEL },
- { "ashb", 14,24, 0x044e, "1B2I", 1, "", DEF_MODEC,DEF_MODEL },
- { "ashw", 14,24, 0x054e, "1B2I", 1, "", DEF_MODEC,DEF_MODEL },
- { "ashd", 14,24, 0x074e, "1B2I", 1, "", DEF_MODEC,DEF_MODEL },
- { "beq", 8,8, 0x0a, "1p", 0, "", 21,21 },
- { "bne", 8,8, 0x1a, "1p", 0, "", 21,21 },
- { "bcs", 8,8, 0x2a, "1p", 0, "", 21,21 },
- { "bcc", 8,8, 0x3a, "1p", 0, "", 21,21 },
- { "bhi", 8,8, 0x4a, "1p", 0, "", 21,21 },
- { "bls", 8,8, 0x5a, "1p", 0, "", 21,21 },
- { "bgt", 8,8, 0x6a, "1p", 0, "", 21,21 },
- { "ble", 8,8, 0x7a, "1p", 0, "", 21,21 },
- { "bfs", 8,8, 0x8a, "1p", 0, "", 21,21 },
- { "bfc", 8,8, 0x9a, "1p", 0, "", 21,21 },
- { "blo", 8,8, 0xaa, "1p", 0, "", 21,21 },
- { "bhs", 8,8, 0xba, "1p", 0, "", 21,21 },
- { "blt", 8,8, 0xca, "1p", 0, "", 21,21 },
- { "bge", 8,8, 0xda, "1p", 0, "", 21,21 },
- { "but", 8,8, 0xea, "1p", 0, "", 21,21 },
- { "buf", 8,8, 0xfa, "1p", 0, "", 21,21 },
- { "bicb", 6,16, 0x08, "1B2I", 1, "", DEF_MODEC,DEF_MODEL },
- { "bicw", 6,16, 0x09, "1W2I", 2, "", DEF_MODEC,DEF_MODEL },
- { "bicd", 6,16, 0x0b, "1D2I", 4, "", DEF_MODEC,DEF_MODEL },
- { "bicpsrb", 11,16, 0x17c, "1B", 1, "", DEF_MODEC,DEF_MODEL },
- { "bicpsrw", 11,16, 0x17d, "1W", 2, "", DEF_MODEC,DEF_MODEL },
- { "bispsrb", 11,16, 0x37c, "1B", 1, "", DEF_MODEC,DEF_MODEL },
- { "bispsrw", 11,16, 0x37d, "1W", 2, "", DEF_MODEC,DEF_MODEL },
- { "bpt", 8,8, 0xf2, "", 0, "", DEF_MODEC,DEF_MODEL },
- { "br", 8,8, 0xea, "1p", 0, "", 21,21 },
-#ifdef SEQUENT_COMPATABILITY
- { "bsr", 8,8, 0x02, "1H", 0, "", 21,21 },
-#else
- { "bsr", 8,8, 0x02, "1p", 0, "", 21,21 },
-#endif
- { "caseb", 11,16, 0x77c, "1B", 1, "", DEF_MODEC,DEF_MODEL },
- { "casew", 11,16, 0x77d, "1W", 2, "", DEF_MODEC,DEF_MODEL },
- { "cased", 11,16, 0x77f, "1D", 4, "", DEF_MODEC,DEF_MODEL },
- { "cbitb", 14,24, 0x084e, "1B2I", 1, "", DEF_MODEC,DEF_MODEL },
- { "cbitw", 14,24, 0x094e, "1W2I", 2, "", DEF_MODEC,DEF_MODEL },
- { "cbitd", 14,24, 0x0b4e, "1D2I", 4, "", DEF_MODEC,DEF_MODEL },
- { "cbitib", 14,24, 0x0c4e, "1B2I", 1, "", DEF_MODEC,DEF_MODEL },
- { "cbitiw", 14,24, 0x0d4e, "1W2I", 2, "", DEF_MODEC,DEF_MODEL },
- { "cbitid", 14,24, 0x0f4e, "1D2I", 4, "", DEF_MODEC,DEF_MODEL },
- { "checkb", 11,24, 0x0ee, "2A3B1r", 1, "", DEF_MODEC,DEF_MODEL },
- { "checkw", 11,24, 0x1ee, "2A3W1r", 2, "", DEF_MODEC,DEF_MODEL },
- { "checkd", 11,24, 0x3ee, "2A3D1r", 4, "", DEF_MODEC,DEF_MODEL },
- { "cinv", 14,24, 0x271e, "2D1C", 4, "", DEF_MODEC,DEF_MODEL },
- { "cmpf", 14,24, 0x09be, "1F2F", 4, "", DEF_MODEC,DEF_MODEL },
- { "cmpl", 14,24, 0x08be, "1L2L", 8, "", DEF_MODEC,DEF_MODEL },
- { "cmpb", 6,16, 0x04, "1B2B", 1, "", DEF_MODEC,DEF_MODEL },
- { "cmpw", 6,16, 0x05, "1W2W", 2, "", DEF_MODEC,DEF_MODEL },
- { "cmpd", 6,16, 0x07, "1D2D", 4, "", DEF_MODEC,DEF_MODEL },
- { "cmpmb", 14,24, 0x04ce, "1A2A3b", 1, "", DEF_MODEC,DEF_MODEL },
- { "cmpmw", 14,24, 0x05ce, "1A2A3b", 2, "", DEF_MODEC,DEF_MODEL },
- { "cmpmd", 14,24, 0x07ce, "1A2A3b", 4, "", DEF_MODEC,DEF_MODEL },
- { "cmpqb", 7,16, 0x1c, "2B1q", 1, "", DEF_MODEC,DEF_MODEL },
- { "cmpqw", 7,16, 0x1d, "2W1q", 2, "", DEF_MODEC,DEF_MODEL },
- { "cmpqd", 7,16, 0x1f, "2D1q", 4, "", DEF_MODEC,DEF_MODEL },
- { "cmpsb", 16,24, 0x040e, "1S", 0, "[]", DEF_MODEC,DEF_MODEL },
- { "cmpsw", 16,24, 0x050e, "1S", 0, "[]", DEF_MODEC,DEF_MODEL },
- { "cmpsd", 16,24, 0x070e, "1S", 0, "[]", DEF_MODEC,DEF_MODEL },
- { "cmpst", 16,24, 0x840e, "1S", 0, "[]", DEF_MODEC,DEF_MODEL },
- { "comb", 14,24, 0x344e, "1B2I", 1, "", DEF_MODEC,DEF_MODEL },
- { "comw", 14,24, 0x354e, "1W2I", 2, "", DEF_MODEC,DEF_MODEL },
- { "comd", 14,24, 0x374e, "1D2I", 4, "", DEF_MODEC,DEF_MODEL },
- { "cvtp", 11,24, 0x036e, "2A3D1r", 4, "", DEF_MODEC,DEF_MODEL },
- { "cxp", 8,8, 0x22, "1p", 0, "", 21,21 },
- { "cxpd", 11,16, 0x07f, "1A", 4, "", DEF_MODEC,DEF_MODEL },
- { "deib", 14,24, 0x2cce, "1B2I", 1, "", DEF_MODEC,DEF_MODEL },
- { "deiw", 14,24, 0x2dce, "1W2I", 2, "", DEF_MODEC,DEF_MODEL },
- { "deid", 14,24, 0x2fce, "1D2I", 4, "", DEF_MODEC,DEF_MODEL },
- { "dia", 8,8, 0xc2, "", 1, "", DEF_MODEC,DEF_MODEL },
- { "divf", 14,24, 0x21be, "1F2Z", 4, "", DEF_MODEC,DEF_MODEL },
- { "divl", 14,24, 0x20be, "1L2Z", 8, "", DEF_MODEC,DEF_MODEL },
- { "divb", 14,24, 0x3cce, "1B2I", 1, "", DEF_MODEC,DEF_MODEL },
- { "divw", 14,24, 0x3dce, "1W2I", 2, "", DEF_MODEC,DEF_MODEL },
- { "divd", 14,24, 0x3fce, "1D2I", 4, "", DEF_MODEC,DEF_MODEL },
- { "enter", 8,8, 0x82, "1U2d", 0, "", DEF_MODEC,DEF_MODEL },
- { "exit", 8,8, 0x92, "1u", 0, "", DEF_MODEC,DEF_MODEL },
- { "extb", 11,24, 0x02e, "2I3B1r4d", 1, "", DEF_MODEC,DEF_MODEL },
- { "extw", 11,24, 0x12e, "2I3W1r4d", 2, "", DEF_MODEC,DEF_MODEL },
- { "extd", 11,24, 0x32e, "2I3D1r4d", 4, "", DEF_MODEC,DEF_MODEL },
- { "extsb", 14,24, 0x0cce, "1I2I4G3g", 1, "", DEF_MODEC,DEF_MODEL },
- { "extsw", 14,24, 0x0dce, "1I2I4G3g", 2, "", DEF_MODEC,DEF_MODEL },
- { "extsd", 14,24, 0x0fce, "1I2I4G3g", 4, "", DEF_MODEC,DEF_MODEL },
- { "ffsb", 14,24, 0x046e, "1B2I", 1, "", DEF_MODEC,DEF_MODEL },
- { "ffsw", 14,24, 0x056e, "1W2I", 2, "", DEF_MODEC,DEF_MODEL },
- { "ffsd", 14,24, 0x076e, "1D2I", 4, "", DEF_MODEC,DEF_MODEL },
- { "flag", 8,8, 0xd2, "", 0, "", DEF_MODEC,DEF_MODEL },
- { "floorfb", 14,24, 0x3c3e, "1F2I", 4, "", DEF_MODEC,DEF_MODEL },
- { "floorfw", 14,24, 0x3d3e, "1F2I", 4, "", DEF_MODEC,DEF_MODEL },
- { "floorfd", 14,24, 0x3f3e, "1F2I", 4, "", DEF_MODEC,DEF_MODEL },
- { "floorlb", 14,24, 0x383e, "1L2I", 8, "", DEF_MODEC,DEF_MODEL },
- { "floorlw", 14,24, 0x393e, "1L2I", 8, "", DEF_MODEC,DEF_MODEL },
- { "floorld", 14,24, 0x3b3e, "1L2I", 8, "", DEF_MODEC,DEF_MODEL },
- { "ibitb", 14,24, 0x384e, "1B2I", 1, "", DEF_MODEC,DEF_MODEL },
- { "ibitw", 14,24, 0x394e, "1W2I", 2, "", DEF_MODEC,DEF_MODEL },
- { "ibitd", 14,24, 0x3b4e, "1D2I", 4, "", DEF_MODEC,DEF_MODEL },
- { "indexb", 11,24, 0x42e, "2B3B1r", 1, "", DEF_MODEC,DEF_MODEL },
- { "indexw", 11,24, 0x52e, "2W3W1r", 2, "", DEF_MODEC,DEF_MODEL },
- { "indexd", 11,24, 0x72e, "2D3D1r", 4, "", DEF_MODEC,DEF_MODEL },
- { "insb", 11,24, 0x0ae, "2B3I1r4d", 1, "", DEF_MODEC,DEF_MODEL },
- { "insw", 11,24, 0x1ae, "2W3I1r4d", 2, "", DEF_MODEC,DEF_MODEL },
- { "insd", 11,24, 0x3ae, "2D3I1r4d", 4, "", DEF_MODEC,DEF_MODEL },
- { "inssb", 14,24, 0x08ce, "1B2I4G3g", 1, "", DEF_MODEC,DEF_MODEL },
- { "inssw", 14,24, 0x09ce, "1W2I4G3g", 2, "", DEF_MODEC,DEF_MODEL },
- { "inssd", 14,24, 0x0bce, "1D2I4G3g", 4, "", DEF_MODEC,DEF_MODEL },
- { "jsr", 11,16, 0x67f, "1A", 4, "", 21,21 },
- { "jump", 11,16, 0x27f, "1A", 4, "", 21,21 },
- { "lfsr", 19,24, 0x00f3e,"1D", 4, "", DEF_MODEC,DEF_MODEL },
- { "lmr", 15,24, 0x0b1e, "2D1M", 4, "", DEF_MODEC,DEF_MODEL },
- { "lprb", 7,16, 0x6c, "2B1P", 1, "", DEF_MODEC,DEF_MODEL },
- { "lprw", 7,16, 0x6d, "2W1P", 2, "", DEF_MODEC,DEF_MODEL },
- { "lprd", 7,16, 0x6f, "2D1P", 4, "", DEF_MODEC,DEF_MODEL },
- { "lshb", 14,24, 0x144e, "1B2I", 1, "", DEF_MODEC,DEF_MODEL },
- { "lshw", 14,24, 0x154e, "1B2I", 1, "", DEF_MODEC,DEF_MODEL },
- { "lshd", 14,24, 0x174e, "1B2I", 1, "", DEF_MODEC,DEF_MODEL },
- { "meib", 14,24, 0x24ce, "1B2I", 1, "", DEF_MODEC,DEF_MODEL },
- { "meiw", 14,24, 0x25ce, "1W2I", 2, "", DEF_MODEC,DEF_MODEL },
- { "meid", 14,24, 0x27ce, "1D2I", 4, "", DEF_MODEC,DEF_MODEL },
- { "modb", 14,24, 0x38ce, "1B2I", 1, "", DEF_MODEC,DEF_MODEL },
- { "modw", 14,24, 0x39ce, "1W2I", 2, "", DEF_MODEC,DEF_MODEL },
- { "modd", 14,24, 0x3bce, "1D2I", 4, "", DEF_MODEC,DEF_MODEL },
- { "movf", 14,24, 0x05be, "1F2Z", 4, "", DEF_MODEC,DEF_MODEL },
- { "movl", 14,24, 0x04be, "1L2Z", 8, "", DEF_MODEC,DEF_MODEL },
- { "movb", 6,16, 0x14, "1B2I", 1, "", DEF_MODEC,DEF_MODEL },
- { "movw", 6,16, 0x15, "1W2I", 2, "", DEF_MODEC,DEF_MODEL },
- { "movd", 6,16, 0x17, "1D2I", 4, "", DEF_MODEC,DEF_MODEL },
- { "movbf", 14,24, 0x043e, "1B2Z", 1, "", DEF_MODEC,DEF_MODEL },
- { "movwf", 14,24, 0x053e, "1W2Z", 2, "", DEF_MODEC,DEF_MODEL },
- { "movdf", 14,24, 0x073e, "1D2Z", 4, "", DEF_MODEC,DEF_MODEL },
- { "movbl", 14,24, 0x003e, "1B2Z", 1, "", DEF_MODEC,DEF_MODEL },
- { "movwl", 14,24, 0x013e, "1W2Z", 2, "", DEF_MODEC,DEF_MODEL },
- { "movdl", 14,24, 0x033e, "1D2Z", 4, "", DEF_MODEC,DEF_MODEL },
- { "movfl", 14,24, 0x1b3e, "1F2Z", 4, "", DEF_MODEC,DEF_MODEL },
- { "movlf", 14,24, 0x163e, "1L2Z", 8, "", DEF_MODEC,DEF_MODEL },
- { "movmb", 14,24, 0x00ce, "1A2A3b", 1, "", DEF_MODEC,DEF_MODEL },
- { "movmw", 14,24, 0x01ce, "1A2A3b", 2, "", DEF_MODEC,DEF_MODEL },
- { "movmd", 14,24, 0x03ce, "1A2A3b", 4, "", DEF_MODEC,DEF_MODEL },
- { "movqb", 7,16, 0x5c, "2I1q", 1, "", DEF_MODEC,DEF_MODEL },
- { "movqw", 7,16, 0x5d, "2I1q", 2, "", DEF_MODEC,DEF_MODEL },
- { "movqd", 7,16, 0x5f, "2I1q", 4, "", DEF_MODEC,DEF_MODEL },
- { "movsb", 16,24, 0x000e, "1S", 0, "[]", DEF_MODEC,DEF_MODEL },
- { "movsw", 16,24, 0x010e, "1S", 0, "[]", DEF_MODEC,DEF_MODEL },
- { "movsd", 16,24, 0x030e, "1S", 0, "[]", DEF_MODEC,DEF_MODEL },
- { "movst", 16,24, 0x800e, "1S", 0, "[]", DEF_MODEC,DEF_MODEL },
- { "movsub", 14,24, 0x0cae, "1A2A", 1, "", DEF_MODEC,DEF_MODEL },
- { "movsuw", 14,24, 0x0dae, "1A2A", 2, "", DEF_MODEC,DEF_MODEL },
- { "movsud", 14,24, 0x0fae, "1A2A", 4, "", DEF_MODEC,DEF_MODEL },
- { "movusb", 14,24, 0x1cae, "1A2A", 1, "", DEF_MODEC,DEF_MODEL },
- { "movusw", 14,24, 0x1dae, "1A2A", 2, "", DEF_MODEC,DEF_MODEL },
- { "movusd", 14,24, 0x1fae, "1A2A", 4, "", DEF_MODEC,DEF_MODEL },
- { "movxbd", 14,24, 0x1cce, "1B2I", 1, "", DEF_MODEC,DEF_MODEL },
- { "movxwd", 14,24, 0x1dce, "1W2I", 2, "", DEF_MODEC,DEF_MODEL },
- { "movxbw", 14,24, 0x10ce, "1B2I", 1, "", DEF_MODEC,DEF_MODEL },
- { "movzbd", 14,24, 0x18ce, "1B2I", 1, "", DEF_MODEC,DEF_MODEL },
- { "movzwd", 14,24, 0x19ce, "1W2I", 2, "", DEF_MODEC,DEF_MODEL },
- { "movzbw", 14,24, 0x14ce, "1B2I", 1, "", DEF_MODEC,DEF_MODEL },
- { "mulf", 14,24, 0x31be, "1F2Z", 4, "", DEF_MODEC,DEF_MODEL },
- { "mull", 14,24, 0x30be, "1L2Z", 8, "", DEF_MODEC,DEF_MODEL },
- { "mulb", 14,24, 0x20ce, "1B2I", 1, "", DEF_MODEC,DEF_MODEL },
- { "mulw", 14,24, 0x21ce, "1W2I", 2, "", DEF_MODEC,DEF_MODEL },
- { "muld", 14,24, 0x23ce, "1D2I", 4, "", DEF_MODEC,DEF_MODEL },
- { "negf", 14,24, 0x15be, "1F2Z", 4, "", DEF_MODEC,DEF_MODEL },
- { "negl", 14,24, 0x14be, "1L2Z", 8, "", DEF_MODEC,DEF_MODEL },
- { "negb", 14,24, 0x204e, "1B2I", 1, "", DEF_MODEC,DEF_MODEL },
- { "negw", 14,24, 0x214e, "1W2I", 2, "", DEF_MODEC,DEF_MODEL },
- { "negd", 14,24, 0x234e, "1D2I", 4, "", DEF_MODEC,DEF_MODEL },
- { "nop", 8,8, 0xa2, "", 0, "", DEF_MODEC,DEF_MODEL },
- { "notb", 14,24, 0x244e, "1B2I", 1, "", DEF_MODEC,DEF_MODEL },
- { "notw", 14,24, 0x254e, "1W2I", 2, "", DEF_MODEC,DEF_MODEL },
- { "notd", 14,24, 0x274e, "1D2I", 4, "", DEF_MODEC,DEF_MODEL },
- { "orb", 6,16, 0x18, "1B2I", 1, "", DEF_MODEC,DEF_MODEL },
- { "orw", 6,16, 0x19, "1W2I", 2, "", DEF_MODEC,DEF_MODEL },
- { "ord", 6,16, 0x1b, "1D2I", 4, "", DEF_MODEC,DEF_MODEL },
- { "quob", 14,24, 0x30ce, "1B2I", 1, "", DEF_MODEC,DEF_MODEL },
- { "quow", 14,24, 0x31ce, "1W2I", 2, "", DEF_MODEC,DEF_MODEL },
- { "quod", 14,24, 0x33ce, "1D2I", 4, "", DEF_MODEC,DEF_MODEL },
- { "rdval", 19,24, 0x0031e,"1A", 4, "", DEF_MODEC,DEF_MODEL },
- { "remb", 14,24, 0x34ce, "1B2I", 1, "", DEF_MODEC,DEF_MODEL },
- { "remw", 14,24, 0x35ce, "1W2I", 2, "", DEF_MODEC,DEF_MODEL },
- { "remd", 14,24, 0x37ce, "1D2I", 4, "", DEF_MODEC,DEF_MODEL },
- { "restore", 8,8, 0x72, "1u", 0, "", DEF_MODEC,DEF_MODEL },
- { "ret", 8,8, 0x12, "1d", 0, "", DEF_MODEC,DEF_MODEL },
- { "reti", 8,8, 0x52, "", 0, "", DEF_MODEC,DEF_MODEL },
- { "rett", 8,8, 0x42, "1d", 0, "", DEF_MODEC,DEF_MODEL },
- { "rotb", 14,24, 0x004e, "1B2I", 1, "", DEF_MODEC,DEF_MODEL },
- { "rotw", 14,24, 0x014e, "1B2I", 1, "", DEF_MODEC,DEF_MODEL },
- { "rotd", 14,24, 0x034e, "1B2I", 1, "", DEF_MODEC,DEF_MODEL },
- { "roundfb", 14,24, 0x243e, "1F2I", 4, "", DEF_MODEC,DEF_MODEL },
- { "roundfw", 14,24, 0x253e, "1F2I", 4, "", DEF_MODEC,DEF_MODEL },
- { "roundfd", 14,24, 0x273e, "1F2I", 4, "", DEF_MODEC,DEF_MODEL },
- { "roundlb", 14,24, 0x203e, "1L2I", 8, "", DEF_MODEC,DEF_MODEL },
- { "roundlw", 14,24, 0x213e, "1L2I", 8, "", DEF_MODEC,DEF_MODEL },
- { "roundld", 14,24, 0x233e, "1L2I", 8, "", DEF_MODEC,DEF_MODEL },
- { "rxp", 8,8, 0x32, "1d", 0, "", DEF_MODEC,DEF_MODEL },
- { "seqb", 11,16, 0x3c, "1B", 0, "", DEF_MODEC,DEF_MODEL },
- { "seqw", 11,16, 0x3d, "1W", 0, "", DEF_MODEC,DEF_MODEL },
- { "seqd", 11,16, 0x3f, "1D", 0, "", DEF_MODEC,DEF_MODEL },
- { "sneb", 11,16, 0xbc, "1B", 0, "", DEF_MODEC,DEF_MODEL },
- { "snew", 11,16, 0xbd, "1W", 0, "", DEF_MODEC,DEF_MODEL },
- { "sned", 11,16, 0xbf, "1D", 0, "", DEF_MODEC,DEF_MODEL },
- { "scsb", 11,16, 0x13c, "1B", 0, "", DEF_MODEC,DEF_MODEL },
- { "scsw", 11,16, 0x13d, "1W", 0, "", DEF_MODEC,DEF_MODEL },
- { "scsd", 11,16, 0x13f, "1D", 0, "", DEF_MODEC,DEF_MODEL },
- { "sccb", 11,16, 0x1bc, "1B", 0, "", DEF_MODEC,DEF_MODEL },
- { "sccw", 11,16, 0x1bd, "1W", 0, "", DEF_MODEC,DEF_MODEL },
- { "sccd", 11,16, 0x1bf, "1D", 0, "", DEF_MODEC,DEF_MODEL },
- { "shib", 11,16, 0x23c, "1B", 0, "", DEF_MODEC,DEF_MODEL },
- { "shiw", 11,16, 0x23d, "1W", 0, "", DEF_MODEC,DEF_MODEL },
- { "shid", 11,16, 0x23f, "1D", 0, "", DEF_MODEC,DEF_MODEL },
- { "slsb", 11,16, 0x2bc, "1B", 0, "", DEF_MODEC,DEF_MODEL },
- { "slsw", 11,16, 0x2bd, "1W", 0, "", DEF_MODEC,DEF_MODEL },
- { "slsd", 11,16, 0x2bf, "1D", 0, "", DEF_MODEC,DEF_MODEL },
- { "sgtb", 11,16, 0x33c, "1B", 0, "", DEF_MODEC,DEF_MODEL },
- { "sgtw", 11,16, 0x33d, "1W", 0, "", DEF_MODEC,DEF_MODEL },
- { "sgtd", 11,16, 0x33f, "1D", 0, "", DEF_MODEC,DEF_MODEL },
- { "sleb", 11,16, 0x3bc, "1B", 0, "", DEF_MODEC,DEF_MODEL },
- { "slew", 11,16, 0x3bd, "1W", 0, "", DEF_MODEC,DEF_MODEL },
- { "sled", 11,16, 0x3bf, "1D", 0, "", DEF_MODEC,DEF_MODEL },
- { "sfsb", 11,16, 0x43c, "1B", 0, "", DEF_MODEC,DEF_MODEL },
- { "sfsw", 11,16, 0x43d, "1W", 0, "", DEF_MODEC,DEF_MODEL },
- { "sfsd", 11,16, 0x43f, "1D", 0, "", DEF_MODEC,DEF_MODEL },
- { "sfcb", 11,16, 0x4bc, "1B", 0, "", DEF_MODEC,DEF_MODEL },
- { "sfcw", 11,16, 0x4bd, "1W", 0, "", DEF_MODEC,DEF_MODEL },
- { "sfcd", 11,16, 0x4bf, "1D", 0, "", DEF_MODEC,DEF_MODEL },
- { "slob", 11,16, 0x53c, "1B", 0, "", DEF_MODEC,DEF_MODEL },
- { "slow", 11,16, 0x53d, "1W", 0, "", DEF_MODEC,DEF_MODEL },
- { "slod", 11,16, 0x53f, "1D", 0, "", DEF_MODEC,DEF_MODEL },
- { "shsb", 11,16, 0x5bc, "1B", 0, "", DEF_MODEC,DEF_MODEL },
- { "shsw", 11,16, 0x5bd, "1W", 0, "", DEF_MODEC,DEF_MODEL },
- { "shsd", 11,16, 0x5bf, "1D", 0, "", DEF_MODEC,DEF_MODEL },
- { "sltb", 11,16, 0x63c, "1B", 0, "", DEF_MODEC,DEF_MODEL },
- { "sltw", 11,16, 0x63d, "1W", 0, "", DEF_MODEC,DEF_MODEL },
- { "sltd", 11,16, 0x63f, "1D", 0, "", DEF_MODEC,DEF_MODEL },
- { "sgeb", 11,16, 0x6bc, "1B", 0, "", DEF_MODEC,DEF_MODEL },
- { "sgew", 11,16, 0x6bd, "1W", 0, "", DEF_MODEC,DEF_MODEL },
- { "sged", 11,16, 0x6bf, "1D", 0, "", DEF_MODEC,DEF_MODEL },
- { "sutb", 11,16, 0x73c, "1B", 0, "", DEF_MODEC,DEF_MODEL },
- { "sutw", 11,16, 0x73d, "1W", 0, "", DEF_MODEC,DEF_MODEL },
- { "sutd", 11,16, 0x73f, "1D", 0, "", DEF_MODEC,DEF_MODEL },
- { "sufb", 11,16, 0x7bc, "1B", 0, "", DEF_MODEC,DEF_MODEL },
- { "sufw", 11,16, 0x7bd, "1W", 0, "", DEF_MODEC,DEF_MODEL },
- { "sufd", 11,16, 0x7bf, "1D", 0, "", DEF_MODEC,DEF_MODEL },
- { "save", 8,8, 0x62, "1U", 0, "", DEF_MODEC,DEF_MODEL },
- { "sbitb", 14,24, 0x184e, "1B2A", 1, "", DEF_MODEC,DEF_MODEL },
- { "sbitw", 14,24, 0x194e, "1W2A", 2, "", DEF_MODEC,DEF_MODEL },
- { "sbitd", 14,24, 0x1b4e, "1D2A", 4, "", DEF_MODEC,DEF_MODEL },
- { "sbitib", 14,24, 0x1c4e, "1B2A", 1, "", DEF_MODEC,DEF_MODEL },
- { "sbitiw", 14,24, 0x1d4e, "1W2A", 2, "", DEF_MODEC,DEF_MODEL },
- { "sbitid", 14,24, 0x1f4e, "1D2A", 4, "", DEF_MODEC,DEF_MODEL },
- { "setcfg", 15,24, 0x0b0e, "1O", 0, "", DEF_MODEC,DEF_MODEL },
- { "sfsr", 14,24, 0x373e, "1f", 0, "", DEF_MODEC,DEF_MODEL },
- { "skpsb", 16,24, 0x0c0e, "1S", 0, "[]", DEF_MODEC,DEF_MODEL },
- { "skpsw", 16,24, 0x0d0e, "1S", 0, "[]", DEF_MODEC,DEF_MODEL },
- { "skpsd", 16,24, 0x0f0e, "1S", 0, "[]", DEF_MODEC,DEF_MODEL },
- { "skpst", 16,24, 0x8c0e, "1S", 0, "[]", DEF_MODEC,DEF_MODEL },
- { "smr", 15,24, 0x0f1e, "2I1M", 4, "", DEF_MODEC,DEF_MODEL },
- { "sprb", 7,16, 0x2c, "2I1P", 1, "", DEF_MODEC,DEF_MODEL },
- { "sprw", 7,16, 0x2d, "2I1P", 2, "", DEF_MODEC,DEF_MODEL },
- { "sprd", 7,16, 0x2f, "2I1P", 4, "", DEF_MODEC,DEF_MODEL },
- { "subf", 14,24, 0x11be, "1F2Z", 4, "", DEF_MODEC,DEF_MODEL },
- { "subl", 14,24, 0x10be, "1L2Z", 8, "", DEF_MODEC,DEF_MODEL },
- { "subb", 6,16, 0x20, "1B2I", 1, "", DEF_MODEC,DEF_MODEL },
- { "subw", 6,16, 0x21, "1W2I", 2, "", DEF_MODEC,DEF_MODEL },
- { "subd", 6,16, 0x23, "1D2I", 4, "", DEF_MODEC,DEF_MODEL },
- { "subcb", 6,16, 0x30, "1B2I", 1, "", DEF_MODEC,DEF_MODEL },
- { "subcw", 6,16, 0x31, "1W2I", 2, "", DEF_MODEC,DEF_MODEL },
- { "subcd", 6,16, 0x33, "1D2I", 4, "", DEF_MODEC,DEF_MODEL },
- { "subpb", 14,24, 0x2c4e, "1B2I", 1, "", DEF_MODEC,DEF_MODEL },
- { "subpw", 14,24, 0x2d4e, "1W2I", 2, "", DEF_MODEC,DEF_MODEL },
- { "subpd", 14,24, 0x2f4e, "1D2I", 4, "", DEF_MODEC,DEF_MODEL },
-#ifdef NS32K_SVC_IMMED_OPERANDS
- { "svc", 8,8, 0xe2, "2i1i", 1, "", DEF_MODEC,DEF_MODEL }, /* not really, but some unix uses it */
-#else
- { "svc", 8,8, 0xe2, "", 0, "", DEF_MODEC,DEF_MODEL },
-#endif
- { "tbitb", 6,16, 0x34, "1B2A", 1, "", DEF_MODEC,DEF_MODEL },
- { "tbitw", 6,16, 0x35, "1W2A", 2, "", DEF_MODEC,DEF_MODEL },
- { "tbitd", 6,16, 0x37, "1D2A", 4, "", DEF_MODEC,DEF_MODEL },
- { "truncfb", 14,24, 0x2c3e, "1F2I", 4, "", DEF_MODEC,DEF_MODEL },
- { "truncfw", 14,24, 0x2d3e, "1F2I", 4, "", DEF_MODEC,DEF_MODEL },
- { "truncfd", 14,24, 0x2f3e, "1F2I", 4, "", DEF_MODEC,DEF_MODEL },
- { "trunclb", 14,24, 0x283e, "1L2I", 8, "", DEF_MODEC,DEF_MODEL },
- { "trunclw", 14,24, 0x293e, "1L2I", 8, "", DEF_MODEC,DEF_MODEL },
- { "truncld", 14,24, 0x2b3e, "1L2I", 8, "", DEF_MODEC,DEF_MODEL },
- { "wait", 8,8, 0xb2, "", 0, "", DEF_MODEC,DEF_MODEL },
- { "wrval", 19,24, 0x0071e,"1A", 0, "", DEF_MODEC,DEF_MODEL },
- { "xorb", 6,16, 0x38, "1B2I", 1, "", DEF_MODEC,DEF_MODEL },
- { "xorw", 6,16, 0x39, "1W2I", 2, "", DEF_MODEC,DEF_MODEL },
- { "xord", 6,16, 0x3b, "1D2I", 4, "", DEF_MODEC,DEF_MODEL },
- { "dotf", 14,24, 0x0dfe, "1F2F", 4, "", DEF_MODEC,DEF_MODEL },
- { "dotl", 14,24, 0x0cfe, "1L2L", 8, "", DEF_MODEC,DEF_MODEL },
- { "logbf", 14,24, 0x15fe, "1F2Z", 4, "", DEF_MODEC,DEF_MODEL },
- { "logbl", 14,24, 0x14fe, "1L2Z", 8, "", DEF_MODEC,DEF_MODEL },
- { "polyf", 14,24, 0x09fe, "1F2F", 4, "", DEF_MODEC,DEF_MODEL },
- { "polyl", 14,24, 0x08fe, "1L2L", 8, "", DEF_MODEC,DEF_MODEL },
- { "scalbf", 14,24, 0x11fe, "1F2Z", 4, "", DEF_MODEC,DEF_MODEL },
- { "scalbl", 14,24, 0x10fe, "1L2Z", 8, "", DEF_MODEC,DEF_MODEL },
-};
-
-#define MAX_ARGS 4
-#define ARG_LEN 50
-
diff --git a/include/opcode/or32.h b/include/opcode/or32.h
deleted file mode 100644
index 153d91ec4..000000000
--- a/include/opcode/or32.h
+++ /dev/null
@@ -1,181 +0,0 @@
-/* Table of opcodes for the OpenRISC 1000 ISA.
- Copyright 2002, 2003, 2010 Free Software Foundation, Inc.
- Contributed by Damjan Lampret (lampret@opencores.org).
-
- This file is part of or1k_gen_isa, or1ksim, GDB and GAS.
-
- 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-/* We treat all letters the same in encode/decode routines so
- we need to assign some characteristics to them like signess etc. */
-
-#ifndef OR32_H_ISA
-#define OR32_H_ISA
-
-#define NUM_UNSIGNED (0)
-#define NUM_SIGNED (1)
-
-#define MAX_GPRS 32
-#define PAGE_SIZE 4096
-#undef __HALF_WORD_INSN__
-
-#define OPERAND_DELIM (',')
-
-#define OR32_IF_DELAY (1)
-#define OR32_W_FLAG (2)
-#define OR32_R_FLAG (4)
-
-struct or32_letter
-{
- char letter;
- int sign;
- /* int reloc; relocation per letter ?? */
-};
-
-/* Main instruction specification array. */
-struct or32_opcode
-{
- /* Name of the instruction. */
- char *name;
-
- /* A string of characters which describe the operands.
- Valid characters are:
- ,() Itself. Characters appears in the assembly code.
- rA Register operand.
- rB Register operand.
- rD Register operand.
- I An immediate operand, range -32768 to 32767.
- J An immediate operand, range . (unused)
- K An immediate operand, range 0 to 65535.
- L An immediate operand, range 0 to 63.
- M An immediate operand, range . (unused)
- N An immediate operand, range -33554432 to 33554431.
- O An immediate operand, range . (unused). */
- char *args;
-
- /* Opcode and operand encoding. */
- char *encoding;
- void (*exec) (void);
- unsigned int flags;
-};
-
-#define OPTYPE_LAST (0x80000000)
-#define OPTYPE_OP (0x40000000)
-#define OPTYPE_REG (0x20000000)
-#define OPTYPE_SIG (0x10000000)
-#define OPTYPE_DIS (0x08000000)
-#define OPTYPE_DST (0x04000000)
-#define OPTYPE_SBIT (0x00001F00)
-#define OPTYPE_SHR (0x0000001F)
-#define OPTYPE_SBIT_SHR (8)
-
-/* MM: Data how to decode operands. */
-extern struct insn_op_struct
-{
- unsigned long type;
- unsigned long data;
-} **op_start;
-
-#ifdef HAS_EXECUTION
-extern void l_invalid (void);
-extern void l_sfne (void);
-extern void l_bf (void);
-extern void l_add (void);
-extern void l_sw (void);
-extern void l_sb (void);
-extern void l_sh (void);
-extern void l_lwz (void);
-extern void l_lbs (void);
-extern void l_lbz (void);
-extern void l_lhs (void);
-extern void l_lhz (void);
-extern void l_movhi (void);
-extern void l_and (void);
-extern void l_or (void);
-extern void l_xor (void);
-extern void l_sub (void);
-extern void l_mul (void);
-extern void l_div (void);
-extern void l_divu (void);
-extern void l_sll (void);
-extern void l_sra (void);
-extern void l_srl (void);
-extern void l_j (void);
-extern void l_jal (void);
-extern void l_jalr (void);
-extern void l_jr (void);
-extern void l_rfe (void);
-extern void l_nop (void);
-extern void l_bnf (void);
-extern void l_sfeq (void);
-extern void l_sfgts (void);
-extern void l_sfges (void);
-extern void l_sflts (void);
-extern void l_sfles (void);
-extern void l_sfgtu (void);
-extern void l_sfgeu (void);
-extern void l_sfltu (void);
-extern void l_sfleu (void);
-extern void l_mtspr (void);
-extern void l_mfspr (void);
-extern void l_sys (void);
-extern void l_trap (void); /* CZ 21/06/01. */
-extern void l_macrc (void);
-extern void l_mac (void);
-extern void l_msb (void);
-extern void l_invalid (void);
-extern void l_cust1 (void);
-extern void l_cust2 (void);
-extern void l_cust3 (void);
-extern void l_cust4 (void);
-#endif
-extern void l_none (void);
-
-extern const struct or32_letter or32_letters[];
-
-extern const struct or32_opcode or32_opcodes[];
-
-extern const unsigned int or32_num_opcodes;
-
-/* Calculates instruction length in bytes. Always 4 for OR32. */
-extern int insn_len (int);
-
-/* Is individual insn's operand signed or unsigned? */
-extern int letter_signed (char);
-
-/* Number of letters in the individual lettered operand. */
-extern int letter_range (char);
-
-/* MM: Returns index of given instruction name. */
-extern int insn_index (char *);
-
-/* MM: Returns instruction name from index. */
-extern const char *insn_name (int);
-
-/* MM: Constructs new FSM, based on or32_opcodes. */
-extern void build_automata (void);
-
-/* MM: Destructs FSM. */
-extern void destruct_automata (void);
-
-/* MM: Decodes instruction using FSM. Call build_automata first. */
-extern int insn_decode (unsigned int);
-
-/* Disassemble one instruction from insn to disassemble.
- Return the size of the instruction. */
-int disassemble_insn (unsigned long);
-
-#endif
diff --git a/include/opcode/pdp11.h b/include/opcode/pdp11.h
deleted file mode 100644
index 24e13b25a..000000000
--- a/include/opcode/pdp11.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/* PDP-11 opcde list.
- Copyright 2001, 2002, 2010 Free Software Foundation, Inc.
-
- This file is part of GDB and GAS.
-
- GDB and GAS are 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 3, or (at your option)
- any later version.
-
- GDB and GAS are 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 GDB or GAS; see the file COPYING3. If not, write to
- the Free Software Foundation, 51 Franklin Street - Fifth Floor,
- Boston, MA 02110-1301, USA. */
-
-/* PDP-11 opcode types. */
-
-#define PDP11_OPCODE_NO_OPS 0
-#define PDP11_OPCODE_REG 1 /* register */
-#define PDP11_OPCODE_OP 2 /* generic operand */
-#define PDP11_OPCODE_REG_OP 3 /* register and generic operand */
-#define PDP11_OPCODE_REG_OP_REV 4 /* register and generic operand,
- reversed syntax */
-#define PDP11_OPCODE_AC_FOP 5 /* fpu accumulator and generic float
- operand */
-#define PDP11_OPCODE_OP_OP 6 /* two generic operands */
-#define PDP11_OPCODE_DISPL 7 /* pc-relative displacement */
-#define PDP11_OPCODE_REG_DISPL 8 /* redister and pc-relative
- displacement */
-#define PDP11_OPCODE_IMM8 9 /* 8-bit immediate */
-#define PDP11_OPCODE_IMM6 10 /* 6-bit immediate */
-#define PDP11_OPCODE_IMM3 11 /* 3-bit immediate */
-#define PDP11_OPCODE_ILLEGAL 12 /* illegal instruction */
-#define PDP11_OPCODE_FOP_AC 13 /* generic float argument, then fpu
- accumulator */
-#define PDP11_OPCODE_FOP 14 /* generic float operand */
-#define PDP11_OPCODE_AC_OP 15 /* fpu accumulator and generic int
- operand */
-#define PDP11_OPCODE_OP_AC 16 /* generic int argument, then fpu
- accumulator */
-
-/*
- * PDP-11 instruction set extensions.
- *
- * Please keep the numbers low, as they are used as indices into
- * an array.
- */
-
-#define PDP11_NONE 0 /* not in instruction set */
-#define PDP11_BASIC 1 /* basic instruction set (11/20 etc) */
-#define PDP11_CSM 2 /* commercial instruction set */
-#define PDP11_CIS 3 /* commercial instruction set */
-#define PDP11_EIS 4 /* extended instruction set (11/45 etc) */
-#define PDP11_FIS 5 /* KEV11 floating-point instructions */
-#define PDP11_FPP 6 /* FP-11 floating-point instructions */
-#define PDP11_LEIS 7 /* limited extended instruction set
- (11/40 etc) */
-#define PDP11_MFPT 8 /* move from processor type */
-#define PDP11_MPROC 9 /* multiprocessor instructions: tstset,
- wrtlck */
-#define PDP11_MXPS 10 /* move from/to processor status */
-#define PDP11_SPL 11 /* set priority level */
-#define PDP11_UCODE 12 /* microcode instructions: ldub, med, xfc */
-#define PDP11_EXT_NUM 13 /* total number of extension types */
-
-struct pdp11_opcode
-{
- const char *name;
- int opcode;
- int mask;
- int type;
- int extension;
-};
-
-extern const struct pdp11_opcode pdp11_opcodes[];
-extern const struct pdp11_opcode pdp11_aliases[];
-extern const int pdp11_num_opcodes, pdp11_num_aliases;
-
-/* end of pdp11.h */
diff --git a/include/opcode/pj.h b/include/opcode/pj.h
deleted file mode 100644
index e6ffacc4b..000000000
--- a/include/opcode/pj.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/* Definitions for decoding the picoJava opcode table.
- Copyright 1999, 2002, 2003, 2010 Free Software Foundation, Inc.
- Contributed by Steve Chamberlain of Transmeta (sac@pobox.com).
-
- 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-/* Names used to describe the type of instruction arguments, used by
- the assembler and disassembler. Attributes are encoded in various fields. */
-
-/* reloc size pcrel uns */
-#define O_N 0
-#define O_16 (1<<4 | 2 | (0<<6) | (0<<3))
-#define O_U16 (1<<4 | 2 | (0<<6) | (1<<3))
-#define O_R16 (2<<4 | 2 | (1<<6) | (0<<3))
-#define O_8 (3<<4 | 1 | (0<<6) | (0<<3))
-#define O_U8 (3<<4 | 1 | (0<<6) | (1<<3))
-#define O_R8 (4<<4 | 1 | (0<<6) | (0<<3))
-#define O_R32 (5<<4 | 4 | (1<<6) | (0<<3))
-#define O_32 (6<<4 | 4 | (0<<6) | (0<<3))
-
-#define ASIZE(x) ((x) & 0x7)
-#define PCREL(x) (!!((x) & (1<<6)))
-#define UNS(x) (!!((x) & (1<<3)))
-
-
-typedef struct pj_opc_info_t
-{
- short opcode;
- short opcode_next;
- char len;
- unsigned char arg[2];
- union {
- const char *name;
- void (*func) (struct pj_opc_info_t *, char *);
- } u;
-} pj_opc_info_t;
diff --git a/include/opcode/pn.h b/include/opcode/pn.h
deleted file mode 100644
index 6674030c4..000000000
--- a/include/opcode/pn.h
+++ /dev/null
@@ -1,283 +0,0 @@
-/* Print GOULD PN (PowerNode) instructions for GDB, the GNU debugger.
- Copyright 1986, 1987, 1989, 1991, 2010 Free Software Foundation, Inc.
-
- This file is part of GDB.
-
- GDB 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 3, or (at your option)
- any later version.
-
- GDB 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 GDB; see the file COPYING3. If not, write to
- the Free Software Foundation, 51 Franklin Street - Fifth Floor,
- Boston, MA 02110-1301, USA. */
-
-struct gld_opcode
-{
- char *name;
- unsigned long opcode;
- unsigned long mask;
- char *args;
- int length;
-};
-
-/* We store four bytes of opcode for all opcodes because that
- is the most any of them need. The actual length of an instruction
- is always at least 2 bytes, and at most four. The length of the
- instruction is based on the opcode.
-
- The mask component is a mask saying which bits must match
- particular opcode in order for an instruction to be an instance
- of that opcode.
-
- The args component is a string containing characters
- that are used to format the arguments to the instruction. */
-
-/* Kinds of operands:
- r Register in first field
- R Register in second field
- b Base register in first field
- B Base register in second field
- v Vector register in first field
- V Vector register in first field
- A Optional address register (base register)
- X Optional index register
- I Immediate data (16bits signed)
- O Offset field (16bits signed)
- h Offset field (15bits signed)
- d Offset field (14bits signed)
- S Shift count field
-
- any other characters are printed as is...
-*/
-
-/* The assembler requires that this array be sorted as follows:
- all instances of the same mnemonic must be consecutive.
- All instances of the same mnemonic with the same number of operands
- must be consecutive.
- */
-struct gld_opcode gld_opcodes[] =
-{
-{ "abm", 0xa0080000, 0xfc080000, "f,xOA,X", 4 },
-{ "abr", 0x18080000, 0xfc0c0000, "r,f", 2 },
-{ "aci", 0xfc770000, 0xfc7f8000, "r,I", 4 },
-{ "adfd", 0xe0080002, 0xfc080002, "r,xOA,X", 4 },
-{ "adfw", 0xe0080000, 0xfc080000, "r,xOA,X", 4 },
-{ "adi", 0xc8010000, 0xfc7f0000, "r,I", 4 },
-{ "admb", 0xb8080000, 0xfc080000, "r,xOA,X", 4 },
-{ "admd", 0xb8000002, 0xfc080002, "r,xOA,X", 4 },
-{ "admh", 0xb8000001, 0xfc080001, "r,xOA,X", 4 },
-{ "admw", 0xb8000000, 0xfc080000, "r,xOA,X", 4 },
-{ "adr", 0x38000000, 0xfc0f0000, "r,R", 2 },
-{ "adrfd", 0x38090000, 0xfc0f0000, "r,R", 2 },
-{ "adrfw", 0x38010000, 0xfc0f0000, "r,R", 2 },
-{ "adrm", 0x38080000, 0xfc0f0000, "r,R", 2 },
-{ "ai", 0xfc030000, 0xfc07ffff, "I", 4 },
-{ "anmb", 0x84080000, 0xfc080000, "r,xOA,X", 4 },
-{ "anmd", 0x84000002, 0xfc080002, "r,xOA,X", 4 },
-{ "anmh", 0x84000001, 0xfc080001, "r,xOA,X", 4 },
-{ "anmw", 0x84000000, 0xfc080000, "r,xOA,X", 4 },
-{ "anr", 0x04000000, 0xfc0f0000, "r,R", 2 },
-{ "armb", 0xe8080000, 0xfc080000, "r,xOA,X", 4 },
-{ "armd", 0xe8000002, 0xfc080002, "r,xOA,X", 4 },
-{ "armh", 0xe8000001, 0xfc080001, "r,xOA,X", 4 },
-{ "armw", 0xe8000000, 0xfc080000, "r,xOA,X", 4 },
-{ "bcf", 0xf0000000, 0xfc080000, "I,xOA,X", 4 },
-{ "bct", 0xec000000, 0xfc080000, "I,xOA,X", 4 },
-{ "bei", 0x00060000, 0xffff0000, "", 2 },
-{ "bft", 0xf0000000, 0xff880000, "xOA,X", 4 },
-{ "bib", 0xf4000000, 0xfc780000, "r,xOA", 4 },
-{ "bid", 0xf4600000, 0xfc780000, "r,xOA", 4 },
-{ "bih", 0xf4200000, 0xfc780000, "r,xOA", 4 },
-{ "biw", 0xf4400000, 0xfc780000, "r,xOA", 4 },
-{ "bl", 0xf8800000, 0xff880000, "xOA,X", 4 },
-{ "bsub", 0x5c080000, 0xff8f0000, "", 2 },
-{ "bsubm", 0x28080000, 0xfc080000, "", 4 },
-{ "bu", 0xec000000, 0xff880000, "xOA,X", 4 },
-{ "call", 0x28080000, 0xfc0f0000, "", 2 },
-{ "callm", 0x5c080000, 0xff880000, "", 4 },
-{ "camb", 0x90080000, 0xfc080000, "r,xOA,X", 4 },
-{ "camd", 0x90000002, 0xfc080002, "r,xOA,X", 4 },
-{ "camh", 0x90000001, 0xfc080001, "r,xOA,X", 4 },
-{ "camw", 0x90000000, 0xfc080000, "r.xOA,X", 4 },
-{ "car", 0x10000000, 0xfc0f0000, "r,R", 2 },
-{ "cd", 0xfc060000, 0xfc070000, "r,f", 4 },
-{ "cea", 0x000f0000, 0xffff0000, "", 2 },
-{ "ci", 0xc8050000, 0xfc7f0000, "r,I", 4 },
-{ "cmc", 0x040a0000, 0xfc7f0000, "r", 2 },
-{ "cmmb", 0x94080000, 0xfc080000, "r,xOA,X", 4 },
-{ "cmmd", 0x94000002, 0xfc080002, "r,xOA,X", 4 },
-{ "cmmh", 0x94000001, 0xfc080001, "r,xOA,X", 4 },
-{ "cmmw", 0x94000000, 0xfc080000, "r,xOA,X", 4 },
-{ "cmr", 0x14000000, 0xfc0f0000, "r,R", 2 },
-{ "daci", 0xfc7f0000, 0xfc7f8000, "r,I", 4 },
-{ "dae", 0x000e0000, 0xffff0000, "", 2 },
-{ "dai", 0xfc040000, 0xfc07ffff, "I", 4 },
-{ "dci", 0xfc6f0000, 0xfc7f8000, "r,I", 4 },
-{ "di", 0xfc010000, 0xfc07ffff, "I", 4 },
-{ "dvfd", 0xe4000002, 0xfc080002, "r,xOA,X", 4 },
-{ "dvfw", 0xe4000000, 0xfc080000, "r,xOA,X", 4 },
-{ "dvi", 0xc8040000, 0xfc7f0000, "r,I", 4 },
-{ "dvmb", 0xc4080000, 0xfc080000, "r,xOA,X", 4 },
-{ "dvmh", 0xc4000001, 0xfc080001, "r,xOA,X", 4 },
-{ "dvmw", 0xc4000000, 0xfc080000, "r,xOA,X", 4 },
-{ "dvr", 0x380a0000, 0xfc0f0000, "r,R", 2 },
-{ "dvrfd", 0x380c0000, 0xfc0f0000, "r,R", 4 },
-{ "dvrfw", 0x38040000, 0xfc0f0000, "r,xOA,X", 4 },
-{ "eae", 0x00080000, 0xffff0000, "", 2 },
-{ "eci", 0xfc670000, 0xfc7f8080, "r,I", 4 },
-{ "ecwcs", 0xfc4f0000, 0xfc7f8000, "", 4 },
-{ "ei", 0xfc000000, 0xfc07ffff, "I", 4 },
-{ "eomb", 0x8c080000, 0xfc080000, "r,xOA,X", 4 },
-{ "eomd", 0x8c000002, 0xfc080002, "r,xOA,X", 4 },
-{ "eomh", 0x8c000001, 0xfc080001, "r,xOA,X", 4 },
-{ "eomw", 0x8c000000, 0xfc080000, "r,xOA,X", 4 },
-{ "eor", 0x0c000000, 0xfc0f0000, "r,R", 2 },
-{ "eorm", 0x0c080000, 0xfc0f0000, "r,R", 2 },
-{ "es", 0x00040000, 0xfc7f0000, "r", 2 },
-{ "exm", 0xa8000000, 0xff880000, "xOA,X", 4 },
-{ "exr", 0xc8070000, 0xfc7f0000, "r", 2 },
-{ "exrr", 0xc8070002, 0xfc7f0002, "r", 2 },
-{ "fixd", 0x380d0000, 0xfc0f0000, "r,R", 2 },
-{ "fixw", 0x38050000, 0xfc0f0000, "r,R", 2 },
-{ "fltd", 0x380f0000, 0xfc0f0000, "r,R", 2 },
-{ "fltw", 0x38070000, 0xfc0f0000, "r,R", 2 },
-{ "grio", 0xfc3f0000, 0xfc7f8000, "r,I", 4 },
-{ "halt", 0x00000000, 0xffff0000, "", 2 },
-{ "hio", 0xfc370000, 0xfc7f8000, "r,I", 4 },
-{ "jwcs", 0xfa080000, 0xff880000, "xOA,X", 4 },
-{ "la", 0x50000000, 0xfc000000, "r,xOA,X", 4 },
-{ "labr", 0x58080000, 0xfc080000, "b,xOA,X", 4 },
-{ "lb", 0xac080000, 0xfc080000, "r,xOA,X", 4 },
-{ "lcs", 0x00030000, 0xfc7f0000, "r", 2 },
-{ "ld", 0xac000002, 0xfc080002, "r,xOA,X", 4 },
-{ "lear", 0x80000000, 0xfc080000, "r,xOA,X", 4 },
-{ "lf", 0xcc000000, 0xfc080000, "r,xOA,X", 4 },
-{ "lfbr", 0xcc080000, 0xfc080000, "b,xOA,X", 4 },
-{ "lh", 0xac000001, 0xfc080001, "r,xOA,X", 4 },
-{ "li", 0xc8000000, 0xfc7f0000, "r,I", 4 },
-{ "lmap", 0x2c070000, 0xfc7f0000, "r", 2 },
-{ "lmb", 0xb0080000, 0xfc080000, "r,xOA,X", 4 },
-{ "lmd", 0xb0000002, 0xfc080002, "r,xOA,X", 4 },
-{ "lmh", 0xb0000001, 0xfc080001, "r,xOA,X", 4 },
-{ "lmw", 0xb0000000, 0xfc080000, "r,xOA,X", 4 },
-{ "lnb", 0xb4080000, 0xfc080000, "r,xOA,X", 4 },
-{ "lnd", 0xb4000002, 0xfc080002, "r,xOA,X", 4 },
-{ "lnh", 0xb4000001, 0xfc080001, "r,xOA,X", 4 },
-{ "lnw", 0xb4000000, 0xfc080000, "r,xOA,X", 4 },
-{ "lpsd", 0xf9800000, 0xff880000, "r,xOA,X", 4 },
-{ "lpsdcm", 0xfa800000, 0xff880000, "r,xOA,X", 4 },
-{ "lw", 0xac000000, 0xfc080000, "r,xOA,X", 4 },
-{ "lwbr", 0x5c000000, 0xfc080000, "b,xOA,X", 4 },
-{ "mpfd", 0xe4080002, 0xfc080002, "r,xOA,X", 4 },
-{ "mpfw", 0xe4080000, 0xfc080000, "r,xOA,X", 4 },
-{ "mpi", 0xc8030000, 0xfc7f0000, "r,I", 4 },
-{ "mpmb", 0xc0080000, 0xfc080000, "r,xOA,X", 4 },
-{ "mpmh", 0xc0000001, 0xfc080001, "r,xOA,X", 4 },
-{ "mpmw", 0xc0000000, 0xfc080000, "r,xOA,X", 4 },
-{ "mpr", 0x38020000, 0xfc0f0000, "r,R", 2 },
-{ "mprfd", 0x380e0000, 0xfc0f0000, "r,R", 2 },
-{ "mprfw", 0x38060000, 0xfc0f0000, "r,R", 2 },
-{ "nop", 0x00020000, 0xffff0000, "", 2 },
-{ "ormb", 0x88080000, 0xfc080000, "r,xOA,X", 4 },
-{ "ormd", 0x88000002, 0xfc080002, "r,xOA,X", 4 },
-{ "ormh", 0x88000001, 0xfc080001, "r,xOA,X", 4 },
-{ "ormw", 0x88000000, 0xfc080000, "r,xOA,X", 4 },
-{ "orr", 0x08000000, 0xfc0f0000, "r,R", 2 },
-{ "orrm", 0x08080000, 0xfc0f0000, "r,R", 2 },
-{ "rdsts", 0x00090000, 0xfc7f0000, "r", 2 },
-{ "return", 0x280e0000, 0xfc7f0000, "", 2 },
-{ "ri", 0xfc020000, 0xfc07ffff, "I", 4 },
-{ "rnd", 0x00050000, 0xfc7f0000, "r", 2 },
-{ "rpswt", 0x040b0000, 0xfc7f0000, "r", 2 },
-{ "rschnl", 0xfc2f0000, 0xfc7f8000, "r,I", 4 },
-{ "rsctl", 0xfc470000, 0xfc7f8000, "r,I", 4 },
-{ "rwcs", 0x000b0000, 0xfc0f0000, "r,R", 2 },
-{ "sacz", 0x10080000, 0xfc0f0000, "r,R", 2 },
-{ "sbm", 0x98080000, 0xfc080000, "f,xOA,X", 4 },
-{ "sbr", 0x18000000, 0xfc0c0000, "r,f", 4 },
-{ "sea", 0x000d0000, 0xffff0000, "", 2 },
-{ "setcpu", 0x2c090000, 0xfc7f0000, "r", 2 },
-{ "sio", 0xfc170000, 0xfc7f8000, "r,I", 4 },
-{ "sipu", 0x000a0000, 0xffff0000, "", 2 },
-{ "sla", 0x1c400000, 0xfc600000, "r,S", 2 },
-{ "slad", 0x20400000, 0xfc600000, "r,S", 2 },
-{ "slc", 0x24400000, 0xfc600000, "r,S", 2 },
-{ "sll", 0x1c600000, 0xfc600000, "r,S", 2 },
-{ "slld", 0x20600000, 0xfc600000, "r,S", 2 },
-{ "smc", 0x04070000, 0xfc070000, "", 2 },
-{ "sra", 0x1c000000, 0xfc600000, "r,S", 2 },
-{ "srad", 0x20000000, 0xfc600000, "r,S", 2 },
-{ "src", 0x24000000, 0xfc600000, "r,S", 2 },
-{ "srl", 0x1c200000, 0xfc600000, "r,S", 2 },
-{ "srld", 0x20200000, 0xfc600000, "r,S", 2 },
-{ "stb", 0xd4080000, 0xfc080000, "r,xOA,X", 4 },
-{ "std", 0xd4000002, 0xfc080002, "r,xOA,X", 4 },
-{ "stf", 0xdc000000, 0xfc080000, "r,xOA,X", 4 },
-{ "stfbr", 0x54000000, 0xfc080000, "b,xOA,X", 4 },
-{ "sth", 0xd4000001, 0xfc080001, "r,xOA,X", 4 },
-{ "stmb", 0xd8080000, 0xfc080000, "r,xOA,X", 4 },
-{ "stmd", 0xd8000002, 0xfc080002, "r,xOA,X", 4 },
-{ "stmh", 0xd8000001, 0xfc080001, "r,xOA,X", 4 },
-{ "stmw", 0xd8000000, 0xfc080000, "r,xOA,X", 4 },
-{ "stpio", 0xfc270000, 0xfc7f8000, "r,I", 4 },
-{ "stw", 0xd4000000, 0xfc080000, "r,xOA,X", 4 },
-{ "stwbr", 0x54000000, 0xfc080000, "b,xOA,X", 4 },
-{ "suabr", 0x58000000, 0xfc080000, "b,xOA,X", 4 },
-{ "sufd", 0xe0000002, 0xfc080002, "r,xOA,X", 4 },
-{ "sufw", 0xe0000000, 0xfc080000, "r,xOA,X", 4 },
-{ "sui", 0xc8020000, 0xfc7f0000, "r,I", 4 },
-{ "sumb", 0xbc080000, 0xfc080000, "r,xOA,X", 4 },
-{ "sumd", 0xbc000002, 0xfc080002, "r,xOA,X", 4 },
-{ "sumh", 0xbc000001, 0xfc080001, "r,xOA,X", 4 },
-{ "sumw", 0xbc000000, 0xfc080000, "r,xOA,X", 4 },
-{ "sur", 0x3c000000, 0xfc0f0000, "r,R", 2 },
-{ "surfd", 0x380b0000, 0xfc0f0000, "r,xOA,X", 4 },
-{ "surfw", 0x38030000, 0xfc0f0000, "r,R", 2 },
-{ "surm", 0x3c080000, 0xfc0f0000, "r,R", 2 },
-{ "svc", 0xc8060000, 0xffff0000, "", 4 },
-{ "tbm", 0xa4080000, 0xfc080000, "f,xOA,X", 4 },
-{ "tbr", 0x180c0000, 0xfc0c0000, "r,f", 2 },
-{ "tbrr", 0x2c020000, 0xfc0f0000, "r,B", 2 },
-{ "tccr", 0x28040000, 0xfc7f0000, "", 2 },
-{ "td", 0xfc050000, 0xfc070000, "r,f", 4 },
-{ "tio", 0xfc1f0000, 0xfc7f8000, "r,I", 4 },
-{ "tmapr", 0x2c0a0000, 0xfc0f0000, "r,R", 2 },
-{ "tpcbr", 0x280c0000, 0xfc7f0000, "r", 2 },
-{ "trbr", 0x2c010000, 0xfc0f0000, "b,R", 2 },
-{ "trc", 0x2c030000, 0xfc0f0000, "r,R", 2 },
-{ "trcc", 0x28050000, 0xfc7f0000, "", 2 },
-{ "trcm", 0x2c0b0000, 0xfc0f0000, "r,R", 2 },
-{ "trn", 0x2c040000, 0xfc0f0000, "r,R", 2 },
-{ "trnm", 0x2c0c0000, 0xfc0f0000, "r,R", 2 },
-{ "trr", 0x2c000000, 0xfc0f0000, "r,R", 2 },
-{ "trrm", 0x2c080000, 0xfc0f0000, "r,R", 2 },
-{ "trsc", 0x2c0e0000, 0xfc0f0000, "r,R", 2 },
-{ "trsw", 0x28000000, 0xfc7f0000, "r", 2 },
-{ "tscr", 0x2c0f0000, 0xfc0f0000, "r,R", 2 },
-{ "uei", 0x00070000, 0xffff0000, "", 2 },
-{ "wait", 0x00010000, 0xffff0000, "", 2 },
-{ "wcwcs", 0xfc5f0000, 0xfc7f8000, "", 4 },
-{ "wwcs", 0x000c0000, 0xfc0f0000, "r,R", 2 },
-{ "xcbr", 0x28020000, 0xfc0f0000, "b,B", 2 },
-{ "xcr", 0x2c050000, 0xfc0f0000, "r,R", 2 },
-{ "xcrm", 0x2c0d0000, 0xfc0f0000, "r,R", 2 },
-{ "zbm", 0x9c080000, 0xfc080000, "f,xOA,X", 4 },
-{ "zbr", 0x18040000, 0xfc0c0000, "r,f", 2 },
-{ "zmb", 0xf8080000, 0xfc080000, "r,xOA,X", 4 },
-{ "zmd", 0xf8000002, 0xfc080002, "r,xOA,X", 4 },
-{ "zmh", 0xf8000001, 0xfc080001, "r,xOA,X", 4 },
-{ "zmw", 0xf8000000, 0xfc080000, "r,xOA,X", 4 },
-{ "zr", 0x0c000000, 0xfc0f0000, "r", 2 },
-};
-
-int numopcodes = sizeof(gld_opcodes) / sizeof(gld_opcodes[0]);
-
-struct gld_opcode *endop = gld_opcodes + sizeof(gld_opcodes) /
- sizeof(gld_opcodes[0]);
diff --git a/include/opcode/ppc.h b/include/opcode/ppc.h
deleted file mode 100644
index df9713023..000000000
--- a/include/opcode/ppc.h
+++ /dev/null
@@ -1,413 +0,0 @@
-/* ppc.h -- Header file for PowerPC opcode table
- Copyright 1994, 1995, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2012 Free Software Foundation, Inc.
- Written by Ian Lance Taylor, Cygnus Support
-
- This file is part of GDB, GAS, and the GNU binutils.
-
- GDB, GAS, and the GNU binutils are free software; you can redistribute
- them and/or modify them under the terms of the GNU General Public
- License as published by the Free Software Foundation; either version 3,
- or (at your option) any later version.
-
- GDB, GAS, and the GNU binutils are distributed in the hope that they
- 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 file; see the file COPYING3. If not, write to the Free
- Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef PPC_H
-#define PPC_H
-
-#include "bfd_stdint.h"
-
-typedef uint64_t ppc_cpu_t;
-
-/* The opcode table is an array of struct powerpc_opcode. */
-
-struct powerpc_opcode
-{
- /* The opcode name. */
- const char *name;
-
- /* The opcode itself. Those bits which will be filled in with
- operands are zeroes. */
- unsigned long opcode;
-
- /* The opcode mask. This is used by the disassembler. This is a
- mask containing ones indicating those bits which must match the
- opcode field, and zeroes indicating those bits which need not
- match (and are presumably filled in by operands). */
- unsigned long mask;
-
- /* One bit flags for the opcode. These are used to indicate which
- specific processors support the instructions. The defined values
- are listed below. */
- ppc_cpu_t flags;
-
- /* One bit flags for the opcode. These are used to indicate which
- specific processors no longer support the instructions. The defined
- values are listed below. */
- ppc_cpu_t deprecated;
-
- /* An array of operand codes. Each code is an index into the
- operand table. They appear in the order which the operands must
- appear in assembly code, and are terminated by a zero. */
- unsigned char operands[8];
-};
-
-/* The table itself is sorted by major opcode number, and is otherwise
- in the order in which the disassembler should consider
- instructions. */
-extern const struct powerpc_opcode powerpc_opcodes[];
-extern const int powerpc_num_opcodes;
-extern const struct powerpc_opcode vle_opcodes[];
-extern const int vle_num_opcodes;
-
-/* Values defined for the flags field of a struct powerpc_opcode. */
-
-/* Opcode is defined for the PowerPC architecture. */
-#define PPC_OPCODE_PPC 1
-
-/* Opcode is defined for the POWER (RS/6000) architecture. */
-#define PPC_OPCODE_POWER 2
-
-/* Opcode is defined for the POWER2 (Rios 2) architecture. */
-#define PPC_OPCODE_POWER2 4
-
-/* Opcode is supported by the Motorola PowerPC 601 processor. The 601
- is assumed to support all PowerPC (PPC_OPCODE_PPC) instructions,
- but it also supports many additional POWER instructions. */
-#define PPC_OPCODE_601 8
-
-/* Opcode is supported in both the Power and PowerPC architectures
- (ie, compiler's -mcpu=common or assembler's -mcom). More than just
- the intersection of PPC_OPCODE_PPC with the union of PPC_OPCODE_POWER
- and PPC_OPCODE_POWER2 because many instructions changed mnemonics
- between POWER and POWERPC. */
-#define PPC_OPCODE_COMMON 0x10
-
-/* Opcode is supported for any Power or PowerPC platform (this is
- for the assembler's -many option, and it eliminates duplicates). */
-#define PPC_OPCODE_ANY 0x20
-
-/* Opcode is only defined on 64 bit architectures. */
-#define PPC_OPCODE_64 0x40
-
-/* Opcode is supported as part of the 64-bit bridge. */
-#define PPC_OPCODE_64_BRIDGE 0x80
-
-/* Opcode is supported by Altivec Vector Unit */
-#define PPC_OPCODE_ALTIVEC 0x100
-
-/* Opcode is supported by PowerPC 403 processor. */
-#define PPC_OPCODE_403 0x200
-
-/* Opcode is supported by PowerPC BookE processor. */
-#define PPC_OPCODE_BOOKE 0x400
-
-/* Opcode is supported by PowerPC 440 processor. */
-#define PPC_OPCODE_440 0x800
-
-/* Opcode is only supported by Power4 architecture. */
-#define PPC_OPCODE_POWER4 0x1000
-
-/* Opcode is only supported by Power7 architecture. */
-#define PPC_OPCODE_POWER7 0x2000
-
-/* Opcode is only supported by e500x2 Core. */
-#define PPC_OPCODE_SPE 0x4000
-
-/* Opcode is supported by e500x2 Integer select APU. */
-#define PPC_OPCODE_ISEL 0x8000
-
-/* Opcode is an e500 SPE floating point instruction. */
-#define PPC_OPCODE_EFS 0x10000
-
-/* Opcode is supported by branch locking APU. */
-#define PPC_OPCODE_BRLOCK 0x20000
-
-/* Opcode is supported by performance monitor APU. */
-#define PPC_OPCODE_PMR 0x40000
-
-/* Opcode is supported by cache locking APU. */
-#define PPC_OPCODE_CACHELCK 0x80000
-
-/* Opcode is supported by machine check APU. */
-#define PPC_OPCODE_RFMCI 0x100000
-
-/* Opcode is only supported by Power5 architecture. */
-#define PPC_OPCODE_POWER5 0x200000
-
-/* Opcode is supported by PowerPC e300 family. */
-#define PPC_OPCODE_E300 0x400000
-
-/* Opcode is only supported by Power6 architecture. */
-#define PPC_OPCODE_POWER6 0x800000
-
-/* Opcode is only supported by PowerPC Cell family. */
-#define PPC_OPCODE_CELL 0x1000000
-
-/* Opcode is supported by CPUs with paired singles support. */
-#define PPC_OPCODE_PPCPS 0x2000000
-
-/* Opcode is supported by Power E500MC */
-#define PPC_OPCODE_E500MC 0x4000000
-
-/* Opcode is supported by PowerPC 405 processor. */
-#define PPC_OPCODE_405 0x8000000
-
-/* Opcode is supported by Vector-Scalar (VSX) Unit */
-#define PPC_OPCODE_VSX 0x10000000
-
-/* Opcode is supported by A2. */
-#define PPC_OPCODE_A2 0x20000000
-
-/* Opcode is supported by PowerPC 476 processor. */
-#define PPC_OPCODE_476 0x40000000
-
-/* Opcode is supported by AppliedMicro Titan core */
-#define PPC_OPCODE_TITAN 0x80000000
-
-/* Opcode which is supported by the e500 family */
-#define PPC_OPCODE_E500 0x100000000ull
-
-/* Opcode is supported by Extended Altivec Vector Unit */
-#define PPC_OPCODE_ALTIVEC2 0x200000000ull
-
-/* Opcode is supported by Power E6500 */
-#define PPC_OPCODE_E6500 0x400000000ull
-
-/* Opcode is supported by Thread management APU */
-#define PPC_OPCODE_TMR 0x800000000ull
-
-/* Opcode which is supported by the VLE extension. */
-#define PPC_OPCODE_VLE 0x1000000000ull
-
-/* Opcode is only supported by Power8 architecture. */
-#define PPC_OPCODE_POWER8 0x2000000000ull
-
-/* Opcode which is supported by the Hardware Transactional Memory extension. */
-/* Currently, this is the same as the POWER8 mask. If another cpu comes out
- that isn't a superset of POWER8, we can define this to its own mask. */
-#define PPC_OPCODE_HTM PPC_OPCODE_POWER8
-
-/* A macro to extract the major opcode from an instruction. */
-#define PPC_OP(i) (((i) >> 26) & 0x3f)
-
-/* A macro to determine if the instruction is a 2-byte VLE insn. */
-#define PPC_OP_SE_VLE(m) ((m) <= 0xffff)
-
-/* A macro to extract the major opcode from a VLE instruction. */
-#define VLE_OP(i,m) (((i) >> ((m) <= 0xffff ? 10 : 26)) & 0x3f)
-
-/* A macro to convert a VLE opcode to a VLE opcode segment. */
-#define VLE_OP_TO_SEG(i) ((i) >> 1)
-
-/* The operands table is an array of struct powerpc_operand. */
-
-struct powerpc_operand
-{
- /* A bitmask of bits in the operand. */
- unsigned int bitm;
-
- /* The shift operation to be applied to the operand. No shift
- is made if this is zero. For positive values, the operand
- is shifted left by SHIFT. For negative values, the operand
- is shifted right by -SHIFT. Use PPC_OPSHIFT_INV to indicate
- that BITM and SHIFT cannot be used to determine where the
- operand goes in the insn. */
- int shift;
-
- /* Insertion function. This is used by the assembler. To insert an
- operand value into an instruction, check this field.
-
- If it is NULL, execute
- if (o->shift >= 0)
- i |= (op & o->bitm) << o->shift;
- else
- i |= (op & o->bitm) >> -o->shift;
- (i is the instruction which we are filling in, o is a pointer to
- this structure, and op is the operand value).
-
- If this field is not NULL, then simply call it with the
- instruction and the operand value. It will return the new value
- of the instruction. If the ERRMSG argument is not NULL, then if
- the operand value is illegal, *ERRMSG will be set to a warning
- string (the operand will be inserted in any case). If the
- operand value is legal, *ERRMSG will be unchanged (most operands
- can accept any value). */
- unsigned long (*insert)
- (unsigned long instruction, long op, ppc_cpu_t dialect, const char **errmsg);
-
- /* Extraction function. This is used by the disassembler. To
- extract this operand type from an instruction, check this field.
-
- If it is NULL, compute
- if (o->shift >= 0)
- op = (i >> o->shift) & o->bitm;
- else
- op = (i << -o->shift) & o->bitm;
- if ((o->flags & PPC_OPERAND_SIGNED) != 0)
- sign_extend (op);
- (i is the instruction, o is a pointer to this structure, and op
- is the result).
-
- If this field is not NULL, then simply call it with the
- instruction value. It will return the value of the operand. If
- the INVALID argument is not NULL, *INVALID will be set to
- non-zero if this operand type can not actually be extracted from
- this operand (i.e., the instruction does not match). If the
- operand is valid, *INVALID will not be changed. */
- long (*extract) (unsigned long instruction, ppc_cpu_t dialect, int *invalid);
-
- /* One bit syntax flags. */
- unsigned long flags;
-};
-
-/* Elements in the table are retrieved by indexing with values from
- the operands field of the powerpc_opcodes table. */
-
-extern const struct powerpc_operand powerpc_operands[];
-extern const unsigned int num_powerpc_operands;
-
-/* Use with the shift field of a struct powerpc_operand to indicate
- that BITM and SHIFT cannot be used to determine where the operand
- goes in the insn. */
-#define PPC_OPSHIFT_INV (-1 << 31)
-
-/* Values defined for the flags field of a struct powerpc_operand. */
-
-/* This operand takes signed values. */
-#define PPC_OPERAND_SIGNED (0x1)
-
-/* This operand takes signed values, but also accepts a full positive
- range of values when running in 32 bit mode. That is, if bits is
- 16, it takes any value from -0x8000 to 0xffff. In 64 bit mode,
- this flag is ignored. */
-#define PPC_OPERAND_SIGNOPT (0x2)
-
-/* This operand does not actually exist in the assembler input. This
- is used to support extended mnemonics such as mr, for which two
- operands fields are identical. The assembler should call the
- insert function with any op value. The disassembler should call
- the extract function, ignore the return value, and check the value
- placed in the valid argument. */
-#define PPC_OPERAND_FAKE (0x4)
-
-/* The next operand should be wrapped in parentheses rather than
- separated from this one by a comma. This is used for the load and
- store instructions which want their operands to look like
- reg,displacement(reg)
- */
-#define PPC_OPERAND_PARENS (0x8)
-
-/* This operand may use the symbolic names for the CR fields, which
- are
- lt 0 gt 1 eq 2 so 3 un 3
- cr0 0 cr1 1 cr2 2 cr3 3
- cr4 4 cr5 5 cr6 6 cr7 7
- These may be combined arithmetically, as in cr2*4+gt. These are
- only supported on the PowerPC, not the POWER. */
-#define PPC_OPERAND_CR_BIT (0x10)
-
-/* This operand names a register. The disassembler uses this to print
- register names with a leading 'r'. */
-#define PPC_OPERAND_GPR (0x20)
-
-/* Like PPC_OPERAND_GPR, but don't print a leading 'r' for r0. */
-#define PPC_OPERAND_GPR_0 (0x40)
-
-/* This operand names a floating point register. The disassembler
- prints these with a leading 'f'. */
-#define PPC_OPERAND_FPR (0x80)
-
-/* This operand is a relative branch displacement. The disassembler
- prints these symbolically if possible. */
-#define PPC_OPERAND_RELATIVE (0x100)
-
-/* This operand is an absolute branch address. The disassembler
- prints these symbolically if possible. */
-#define PPC_OPERAND_ABSOLUTE (0x200)
-
-/* This operand is optional, and is zero if omitted. This is used for
- example, in the optional BF field in the comparison instructions. The
- assembler must count the number of operands remaining on the line,
- and the number of operands remaining for the opcode, and decide
- whether this operand is present or not. The disassembler should
- print this operand out only if it is not zero. */
-#define PPC_OPERAND_OPTIONAL (0x400)
-
-/* This flag is only used with PPC_OPERAND_OPTIONAL. If this operand
- is omitted, then for the next operand use this operand value plus
- 1, ignoring the next operand field for the opcode. This wretched
- hack is needed because the Power rotate instructions can take
- either 4 or 5 operands. The disassembler should print this operand
- out regardless of the PPC_OPERAND_OPTIONAL field. */
-#define PPC_OPERAND_NEXT (0x800)
-
-/* This operand should be regarded as a negative number for the
- purposes of overflow checking (i.e., the normal most negative
- number is disallowed and one more than the normal most positive
- number is allowed). This flag will only be set for a signed
- operand. */
-#define PPC_OPERAND_NEGATIVE (0x1000)
-
-/* This operand names a vector unit register. The disassembler
- prints these with a leading 'v'. */
-#define PPC_OPERAND_VR (0x2000)
-
-/* This operand is for the DS field in a DS form instruction. */
-#define PPC_OPERAND_DS (0x4000)
-
-/* This operand is for the DQ field in a DQ form instruction. */
-#define PPC_OPERAND_DQ (0x8000)
-
-/* Valid range of operand is 0..n rather than 0..n-1. */
-#define PPC_OPERAND_PLUS1 (0x10000)
-
-/* Xilinx APU and FSL related operands */
-#define PPC_OPERAND_FSL (0x20000)
-#define PPC_OPERAND_FCR (0x40000)
-#define PPC_OPERAND_UDI (0x80000)
-
-/* This operand names a vector-scalar unit register. The disassembler
- prints these with a leading 'vs'. */
-#define PPC_OPERAND_VSR (0x100000)
-
-/* This is a CR FIELD that does not use symbolic names. */
-#define PPC_OPERAND_CR_REG (0x200000)
-
-/* The POWER and PowerPC assemblers use a few macros. We keep them
- with the operands table for simplicity. The macro table is an
- array of struct powerpc_macro. */
-
-struct powerpc_macro
-{
- /* The macro name. */
- const char *name;
-
- /* The number of operands the macro takes. */
- unsigned int operands;
-
- /* One bit flags for the opcode. These are used to indicate which
- specific processors support the instructions. The values are the
- same as those for the struct powerpc_opcode flags field. */
- ppc_cpu_t flags;
-
- /* A format string to turn the macro into a normal instruction.
- Each %N in the string is replaced with operand number N (zero
- based). */
- const char *format;
-};
-
-extern const struct powerpc_macro powerpc_macros[];
-extern const int powerpc_num_macros;
-
-extern ppc_cpu_t ppc_parse_cpu (ppc_cpu_t, ppc_cpu_t *, const char *);
-
-#endif /* PPC_H */
diff --git a/include/opcode/pyr.h b/include/opcode/pyr.h
deleted file mode 100644
index 2fffd9462..000000000
--- a/include/opcode/pyr.h
+++ /dev/null
@@ -1,305 +0,0 @@
-/* pyramid.opcode.h -- gdb initial attempt.
-
- Copyright 2001, 2010 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 3, 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., 51 Franklin Street - Fifth Floor,
- Boston, MA 02110-1301, USA. */
-
-/* pyramid opcode table: wot to do with this
- particular opcode */
-
-struct pyr_datum
-{
- char nargs;
- char * args; /* how to compile said opcode */
- unsigned long mask; /* Bit vector: which operand modes are valid
- for this opcode */
- unsigned char code; /* op-code (always 6(?) bits */
-};
-
-typedef struct pyr_insn_format
-{
- unsigned int mode :4;
- unsigned int operator :8;
- unsigned int index_scale :2;
- unsigned int index_reg :6;
- unsigned int operand_1 :6;
- unsigned int operand_2:6;
-} pyr_insn_format;
-
-
-/* We store four bytes of opcode for all opcodes.
- Pyramid is sufficiently RISCy that:
- - insns are always an integral number of words;
- - the length of any insn can be told from the first word of
- the insn. (ie, if there are zero, one, or two words of
- immediate operand/offset).
-
-
- The args component is a string containing two characters for each
- operand of the instruction. The first specifies the kind of operand;
- the second, the place it is stored. */
-
-/* Kinds of operands:
- mask assembler syntax description
- 0x0001: movw Rn,Rn register to register
- 0x0002: movw K,Rn quick immediate to register
- 0x0004: movw I,Rn long immediate to register
- 0x0008: movw (Rn),Rn register indirect to register
- movw (Rn)[x],Rn register indirect to register
- 0x0010: movw I(Rn),Rn offset register indirect to register
- movw I(Rn)[x],Rn offset register indirect, indexed, to register
-
- 0x0020: movw Rn,(Rn) register to register indirect
- 0x0040: movw K,(Rn) quick immediate to register indirect
- 0x0080: movw I,(Rn) long immediate to register indirect
- 0x0100: movw (Rn),(Rn) register indirect to-register indirect
- 0x0100: movw (Rn),(Rn) register indirect to-register indirect
- 0x0200: movw I(Rn),(Rn) register indirect+offset to register indirect
- 0x0200: movw I(Rn),(Rn) register indirect+offset to register indirect
-
- 0x0400: movw Rn,I(Rn) register to register indirect+offset
- 0x0800: movw K,I(Rn) quick immediate to register indirect+offset
- 0x1000: movw I,I(Rn) long immediate to register indirect+offset
- 0x1000: movw (Rn),I(Rn) register indirect to-register indirect+offset
- 0x1000: movw I(Rn),I(Rn) register indirect+offset to register indirect
- +offset
- 0x0000: (irregular) ???
-
-
- Each insn has a four-bit field encoding the type(s) of its operands.
-*/
-
-/* Some common combinations
- */
-
-/* the first 5,(0x1|0x2|0x4|0x8|0x10) ie (1|2|4|8|16), ie ( 32 -1)*/
-#define GEN_TO_REG (31)
-
-#define UNKNOWN ((unsigned long)-1)
-#define ANY (GEN_TO_REG | (GEN_TO_REG << 5) | (GEN_TO_REG << 15))
-
-#define CONVERT (1|8|0x10|0x20|0x200)
-
-#define K_TO_REG (2)
-#define I_TO_REG (4)
-#define NOTK_TO_REG (GEN_TO_REG & ~K_TO_REG)
-#define NOTI_TO_REG (GEN_TO_REG & ~I_TO_REG)
-
-/* The assembler requires that this array be sorted as follows:
- all instances of the same mnemonic must be consecutive.
- All instances of the same mnemonic with the same number of operands
- must be consecutive.
- */
-
-struct pyr_opcode /* pyr opcode text */
-{
- char * name; /* opcode name: lowercase string [key] */
- struct pyr_datum datum; /* rest of opcode table [datum] */
-};
-
-#define pyr_how args
-#define pyr_nargs nargs
-#define pyr_mask mask
-#define pyr_name name
-
-struct pyr_opcode pyr_opcodes[] =
-{
- {"movb", { 2, "", UNKNOWN, 0x11}, },
- {"movh", { 2, "", UNKNOWN, 0x12} },
- {"movw", { 2, "", ANY, 0x10} },
- {"movl", { 2, "", ANY, 0x13} },
- {"mnegw", { 2, "", (0x1|0x8|0x10), 0x14} },
- {"mnegf", { 2, "", 0x1, 0x15} },
- {"mnegd", { 2, "", 0x1, 0x16} },
- {"mcomw", { 2, "", (0x1|0x8|0x10), 0x17} },
- {"mabsw", { 2, "", (0x1|0x8|0x10), 0x18} },
- {"mabsf", { 2, "", 0x1, 0x19} },
- {"mabsd", { 2, "", 0x1, 0x1a} },
- {"mtstw", { 2, "", (0x1|0x8|0x10), 0x1c} },
- {"mtstf", { 2, "", 0x1, 0x1d} },
- {"mtstd", { 2, "", 0x1, 0x1e} },
- {"mova", { 2, "", 0x8|0x10, 0x1f} },
- {"movzbw", { 2, "", (0x1|0x8|0x10), 0x20} },
- {"movzhw", { 2, "", (0x1|0x8|0x10), 0x21} },
- /* 2 insns out of order here */
- {"movbl", { 2, "", 1, 0x4f} },
- {"filbl", { 2, "", 1, 0x4e} },
-
- {"cvtbw", { 2, "", CONVERT, 0x22} },
- {"cvthw", { 2, "", CONVERT, 0x23} },
- {"cvtwb", { 2, "", CONVERT, 0x24} },
- {"cvtwh", { 2, "", CONVERT, 0x25} },
- {"cvtwf", { 2, "", CONVERT, 0x26} },
- {"cvtwd", { 2, "", CONVERT, 0x27} },
- {"cvtfw", { 2, "", CONVERT, 0x28} },
- {"cvtfd", { 2, "", CONVERT, 0x29} },
- {"cvtdw", { 2, "", CONVERT, 0x2a} },
- {"cvtdf", { 2, "", CONVERT, 0x2b} },
-
- {"addw", { 2, "", GEN_TO_REG, 0x40} },
- {"addwc", { 2, "", GEN_TO_REG, 0x41} },
- {"subw", { 2, "", GEN_TO_REG, 0x42} },
- {"subwb", { 2, "", GEN_TO_REG, 0x43} },
- {"rsubw", { 2, "", GEN_TO_REG, 0x44} },
- {"mulw", { 2, "", GEN_TO_REG, 0x45} },
- {"emul", { 2, "", GEN_TO_REG, 0x47} },
- {"umulw", { 2, "", GEN_TO_REG, 0x46} },
- {"divw", { 2, "", GEN_TO_REG, 0x48} },
- {"ediv", { 2, "", GEN_TO_REG, 0x4a} },
- {"rdivw", { 2, "", GEN_TO_REG, 0x4b} },
- {"udivw", { 2, "", GEN_TO_REG, 0x49} },
- {"modw", { 2, "", GEN_TO_REG, 0x4c} },
- {"umodw", { 2, "", GEN_TO_REG, 0x4d} },
-
-
- {"addf", { 2, "", 1, 0x50} },
- {"addd", { 2, "", 1, 0x51} },
- {"subf", { 2, "", 1, 0x52} },
- {"subd", { 2, "", 1, 0x53} },
- {"mulf", { 2, "", 1, 0x56} },
- {"muld", { 2, "", 1, 0x57} },
- {"divf", { 2, "", 1, 0x58} },
- {"divd", { 2, "", 1, 0x59} },
-
-
- {"cmpb", { 2, "", UNKNOWN, 0x61} },
- {"cmph", { 2, "", UNKNOWN, 0x62} },
- {"cmpw", { 2, "", UNKNOWN, 0x60} },
- {"ucmpb", { 2, "", UNKNOWN, 0x66} },
- /* WHY no "ucmph"??? */
- {"ucmpw", { 2, "", UNKNOWN, 0x65} },
- {"xchw", { 2, "", UNKNOWN, 0x0f} },
-
-
- {"andw", { 2, "", GEN_TO_REG, 0x30} },
- {"orw", { 2, "", GEN_TO_REG, 0x31} },
- {"xorw", { 2, "", GEN_TO_REG, 0x32} },
- {"bicw", { 2, "", GEN_TO_REG, 0x33} },
- {"lshlw", { 2, "", GEN_TO_REG, 0x38} },
- {"ashlw", { 2, "", GEN_TO_REG, 0x3a} },
- {"ashll", { 2, "", GEN_TO_REG, 0x3c} },
- {"ashrw", { 2, "", GEN_TO_REG, 0x3b} },
- {"ashrl", { 2, "", GEN_TO_REG, 0x3d} },
- {"rotlw", { 2, "", GEN_TO_REG, 0x3e} },
- {"rotrw", { 2, "", GEN_TO_REG, 0x3f} },
-
- /* push and pop insns are "going away next release". */
- {"pushw", { 2, "", GEN_TO_REG, 0x0c} },
- {"popw", { 2, "", (0x1|0x8|0x10), 0x0d} },
- {"pusha", { 2, "", (0x8|0x10), 0x0e} },
-
- {"bitsw", { 2, "", UNKNOWN, 0x35} },
- {"bitcw", { 2, "", UNKNOWN, 0x36} },
- /* some kind of ibra/dbra insns??*/
- {"icmpw", { 2, "", UNKNOWN, 0x67} },
- {"dcmpw", { 2, "", (1|4|0x20|0x80|0x400|0x1000), 0x69} },/*FIXME*/
- {"acmpw", { 2, "", 1, 0x6b} },
-
- /* Call is written as a 1-op insn, but is always (dis)assembled as a 2-op
- insn with a 2nd op of tr14. The assembler will have to grok this. */
- {"call", { 2, "", GEN_TO_REG, 0x04} },
- {"call", { 1, "", GEN_TO_REG, 0x04} },
-
- {"callk", { 1, "", UNKNOWN, 0x06} },/* system call?*/
- /* Ret is usually written as a 0-op insn, but gets disassembled as a
- 1-op insn. The operand is always tr15. */
- {"ret", { 0, "", UNKNOWN, 0x09} },
- {"ret", { 1, "", UNKNOWN, 0x09} },
- {"adsf", { 2, "", (1|2|4), 0x08} },
- {"retd", { 2, "", UNKNOWN, 0x0a} },
- {"btc", { 2, "", UNKNOWN, 0x01} },
- {"bfc", { 2, "", UNKNOWN, 0x02} },
- /* Careful: halt is 0x00000000. Jump must have some other (mode?)bit set?? */
- {"jump", { 1, "", UNKNOWN, 0x00} },
- {"btp", { 2, "", UNKNOWN, 0xf00} },
- /* read control-stack pointer is another 1-or-2 operand insn. */
- {"rcsp", { 2, "", UNKNOWN, 0x01f} },
- {"rcsp", { 1, "", UNKNOWN, 0x01f} }
-};
-
-/* end: pyramid.opcode.h */
-/* One day I will have to take the time to find out what operands
- are valid for these insns, and guess at what they mean.
-
- I can't imagine what the "I???" insns (iglob, etc) do.
-
- the arithmetic-sounding insns ending in "p" sound awfully like BCD
- arithmetic insns:
- dshlp -> Decimal SHift Left Packed
- dshrp -> Decimal SHift Right Packed
- and cvtlp would be convert long to packed.
- I have no idea how the operands are interpreted; but having them be
- a long register with (address, length) of an in-memory packed BCD operand
- would not be surprising.
- They are unlikely to be a packed bcd string: 64 bits of long give
- is only 15 digits+sign, which isn't enough for COBOL.
- */
-#if 0
- {"wcsp", { 2, "", UNKNOWN, 0x00} }, /*write csp?*/
- /* The OSx Operating System Porting Guide claims SSL does things
- with tr12 (a register reserved to it) to do with static block-structure
- references. SSL=Set Static Link? It's "Going away next release". */
- {"ssl", { 2, "", UNKNOWN, 0x00} },
- {"ccmps", { 2, "", UNKNOWN, 0x00} },
- {"lcd", { 2, "", UNKNOWN, 0x00} },
- {"uemul", { 2, "", UNKNOWN, 0x00} }, /*unsigned emul*/
- {"srf", { 2, "", UNKNOWN, 0x00} }, /*Gidget time???*/
- {"mnegp", { 2, "", UNKNOWN, 0x00} }, /move-neg phys?*/
- {"ldp", { 2, "", UNKNOWN, 0x00} }, /*load phys?*/
- {"ldti", { 2, "", UNKNOWN, 0x00} },
- {"ldb", { 2, "", UNKNOWN, 0x00} },
- {"stp", { 2, "", UNKNOWN, 0x00} },
- {"stti", { 2, "", UNKNOWN, 0x00} },
- {"stb", { 2, "", UNKNOWN, 0x00} },
- {"stu", { 2, "", UNKNOWN, 0x00} },
- {"addp", { 2, "", UNKNOWN, 0x00} },
- {"subp", { 2, "", UNKNOWN, 0x00} },
- {"mulp", { 2, "", UNKNOWN, 0x00} },
- {"divp", { 2, "", UNKNOWN, 0x00} },
- {"dshlp", { 2, "", UNKNOWN, 0x00} }, /* dec shl packed? */
- {"dshrp", { 2, "", UNKNOWN, 0x00} }, /* dec shr packed? */
- {"movs", { 2, "", UNKNOWN, 0x00} }, /*move (string?)?*/
- {"cmpp", { 2, "", UNKNOWN, 0x00} }, /* cmp phys?*/
- {"cmps", { 2, "", UNKNOWN, 0x00} }, /* cmp (string?)?*/
- {"cvtlp", { 2, "", UNKNOWN, 0x00} }, /* cvt long to p??*/
- {"cvtpl", { 2, "", UNKNOWN, 0x00} }, /* cvt p to l??*/
- {"dintr", { 2, "", UNKNOWN, 0x00} }, /* ?? intr ?*/
- {"rphysw", { 2, "", UNKNOWN, 0x00} }, /* read phys word?*/
- {"wphysw", { 2, "", UNKNOWN, 0x00} }, /* write phys word?*/
- {"cmovs", { 2, "", UNKNOWN, 0x00} },
- {"rsubw", { 2, "", UNKNOWN, 0x00} },
- {"bicpsw", { 2, "", UNKNOWN, 0x00} }, /* clr bit in psw? */
- {"bispsw", { 2, "", UNKNOWN, 0x00} }, /* set bit in psw? */
- {"eio", { 2, "", UNKNOWN, 0x00} }, /* ?? ?io ? */
- {"callp", { 2, "", UNKNOWN, 0x00} }, /* call phys?*/
- {"callr", { 2, "", UNKNOWN, 0x00} },
- {"lpcxt", { 2, "", UNKNOWN, 0x00} }, /*load proc context*/
- {"rei", { 2, "", UNKNOWN, 0x00} }, /*ret from intrpt*/
- {"rport", { 2, "", UNKNOWN, 0x00} }, /*read-port?*/
- {"rtod", { 2, "", UNKNOWN, 0x00} }, /*read-time-of-day?*/
- {"ssi", { 2, "", UNKNOWN, 0x00} },
- {"vtpa", { 2, "", UNKNOWN, 0x00} }, /*virt-to-phys-addr?*/
- {"wicl", { 2, "", UNKNOWN, 0x00} }, /* write icl ? */
- {"wport", { 2, "", UNKNOWN, 0x00} }, /*write-port?*/
- {"wtod", { 2, "", UNKNOWN, 0x00} }, /*write-time-of-day?*/
- {"flic", { 2, "", UNKNOWN, 0x00} },
- {"iglob", { 2, "", UNKNOWN, 0x00} }, /* I global? */
- {"iphys", { 2, "", UNKNOWN, 0x00} }, /* I physical? */
- {"ipid", { 2, "", UNKNOWN, 0x00} }, /* I pid? */
- {"ivect", { 2, "", UNKNOWN, 0x00} }, /* I vector? */
- {"lamst", { 2, "", UNKNOWN, 0x00} },
- {"tio", { 2, "", UNKNOWN, 0x00} },
-#endif
diff --git a/include/opcode/rl78.h b/include/opcode/rl78.h
deleted file mode 100644
index 0f3c64d62..000000000
--- a/include/opcode/rl78.h
+++ /dev/null
@@ -1,168 +0,0 @@
-/* Opcode decoder for the Renesas RL78
- Copyright 2011
- Free Software Foundation, Inc.
- Written by DJ Delorie <dj@redhat.com>
-
- This file is part of GDB, the GNU Debugger and GAS, the GNU Assembler.
-
- 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 3 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., 51 Franklin Street - Fifth Floor, Boston, MA
- 02110-1301, USA. */
-
-/* The RL78 decoder in libopcodes is used by the simulator, gdb's
- analyzer, and the disassembler. Given an opcode data source, it
- decodes the next opcode into the following structures. */
-
-#ifndef RL78_OPCODES_H_INCLUDED
-#define RL78_OPCODES_H_INCLUDED
-
-/* For the purposes of these structures, the RL78 registers are as
- follows, despite most of these being memory-mapped and
- bank-switched: */
-typedef enum {
- RL78_Reg_None,
- /* The order of these matches the encodings. */
- RL78_Reg_X,
- RL78_Reg_A,
- RL78_Reg_C,
- RL78_Reg_B,
- RL78_Reg_E,
- RL78_Reg_D,
- RL78_Reg_L,
- RL78_Reg_H,
- /* The order of these matches the encodings. */
- RL78_Reg_AX,
- RL78_Reg_BC,
- RL78_Reg_DE,
- RL78_Reg_HL,
- /* Unordered. */
- RL78_Reg_SP,
- RL78_Reg_PSW,
- RL78_Reg_CS,
- RL78_Reg_ES,
- RL78_Reg_PMC,
- RL78_Reg_MEM
-} RL78_Register;
-
-typedef enum
-{
- RL78_Byte = 0,
- RL78_Word
-} RL78_Size;
-
-typedef enum {
- RL78_Condition_T,
- RL78_Condition_F,
- RL78_Condition_C,
- RL78_Condition_NC,
- RL78_Condition_H,
- RL78_Condition_NH,
- RL78_Condition_Z,
- RL78_Condition_NZ
-} RL78_Condition;
-
-typedef enum {
- RL78_Operand_None = 0,
- RL78_Operand_Immediate, /* #addend */
- RL78_Operand_Register, /* reg */
- RL78_Operand_Indirect, /* [reg + reg2 + addend] */
- RL78_Operand_Bit, /* reg.bit */
- RL78_Operand_BitIndirect, /* [reg+reg2+addend].bit */
- RL78_Operand_PreDec, /* [--reg] = push */
- RL78_Operand_PostInc /* [reg++] = pop */
-} RL78_Operand_Type;
-
-typedef enum
-{
- RLO_unknown,
- RLO_add, /* d += s */
- RLO_addc, /* d += s + CY */
- RLO_and, /* d &= s (byte, word, bit) */
- RLO_branch, /* pc = d */
- RLO_branch_cond, /* pc = d if cond(src) */
- RLO_branch_cond_clear, /* pc = d if cond(src), and clear(src) */
- RLO_break, /* BRK */
- RLO_call, /* call */
- RLO_cmp, /* cmp d, s */
- RLO_divhu, /* DIVHU */
- RLO_divwu, /* DIVWU */
- RLO_halt, /* HALT */
- RLO_mov, /* d = s */
- RLO_mach, /* MACH */
- RLO_machu, /* MACHU */
- RLO_mulu, /* MULU */
- RLO_mulh, /* MULH */
- RLO_mulhu, /* MULHU */
- RLO_nop, /* NOP */
- RLO_or, /* d |= s */
- RLO_ret, /* RET */
- RLO_reti, /* RETI */
- RLO_rol, /* d <<= s, MSB to LSB and CY */
- RLO_rolc, /* d <<= s, MSB to CY, CY, to LSB */
- RLO_ror, /* d >>= s, LSB to MSB and CY */
- RLO_rorc, /* d >>= s, LSB to CY, CY, to MSB */
- RLO_sar, /* d >>= s, signed */
- RLO_sel, /* rb = s */
- RLO_shr, /* d >>= s, unsigned */
- RLO_shl, /* d <<= s */
- RLO_skip, /* skip next insn is cond(s) */
- RLO_stop, /* STOP */
- RLO_sub, /* d -= s */
- RLO_subc, /* d -= s - CY */
- RLO_xch, /* swap d, s */
- RLO_xor, /* d ^= s */
-} RL78_Opcode_ID;
-
-typedef struct {
- RL78_Operand_Type type;
- int addend;
- RL78_Register reg : 8;
- RL78_Register reg2 : 8;
- unsigned char bit_number : 4;
- unsigned char condition : 3;
- unsigned char use_es : 1;
-} RL78_Opcode_Operand;
-
-/* PSW flag bits */
-#define RL78_PSW_IE 0x80
-#define RL78_PSW_Z 0x40
-#define RL78_PSW_RBS1 0x20
-#define RL78_PSW_AC 0x10
-#define RL78_PSW_RBS0 0x08
-#define RL78_PSW_ISP1 0x04
-#define RL78_PSW_ISP0 0x02
-#define RL78_PSW_CY 0x01
-
-#define RL78_SFR_SP 0xffff8
-#define RL78_SFR_PSW 0xffffa
-#define RL78_SFR_CS 0xffffc
-#define RL78_SFR_ES 0xffffd
-#define RL78_SFR_PMC 0xffffe
-#define RL78_SFR_MEM 0xfffff
-
-typedef struct
-{
- int lineno;
- RL78_Opcode_ID id:24;
- unsigned flags:8; /* PSW mask, for side effects only */
- int n_bytes;
- char * syntax;
- RL78_Size size;
- /* By convention, these are destination, source. */
- RL78_Opcode_Operand op[2];
-} RL78_Opcode_Decoded;
-
-int rl78_decode_opcode (unsigned long, RL78_Opcode_Decoded *, int (*)(void *), void *);
-
-#endif
diff --git a/include/opcode/rx.h b/include/opcode/rx.h
deleted file mode 100644
index aa85fe4a9..000000000
--- a/include/opcode/rx.h
+++ /dev/null
@@ -1,215 +0,0 @@
-/* Opcode decoder for the Renesas RX
- Copyright 2008, 2009, 2010
- Free Software Foundation, Inc.
- Written by DJ Delorie <dj@redhat.com>
-
- This file is part of GDB, the GNU Debugger and GAS, the GNU Assembler.
-
- 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 3 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., 51 Franklin Street - Fifth Floor, Boston, MA
- 02110-1301, USA. */
-
-/* The RX decoder in libopcodes is used by the simulator, gdb's
- analyzer, and the disassembler. Given an opcode data source,
- it decodes the next opcode into the following structures. */
-
-typedef enum
-{
- RX_AnySize = 0,
- RX_Byte, /* undefined extension */
- RX_UByte,
- RX_SByte,
- RX_Word, /* undefined extension */
- RX_UWord,
- RX_SWord,
- RX_3Byte,
- RX_Long,
-} RX_Size;
-
-typedef enum
-{
- RX_Operand_None,
- RX_Operand_Immediate, /* #addend */
- RX_Operand_Register, /* Rn */
- RX_Operand_Indirect, /* [Rn + addend] */
- RX_Operand_Postinc, /* [Rn+] */
- RX_Operand_Predec, /* [-Rn] */
- RX_Operand_Condition, /* eq, gtu, etc */
- RX_Operand_Flag, /* [UIOSZC] */
- RX_Operand_TwoReg, /* [Rn + scale*R2] */
-} RX_Operand_Type;
-
-typedef enum
-{
- RXO_unknown,
- RXO_mov, /* d = s (signed) */
- RXO_movbi, /* d = [s,s2] (signed) */
- RXO_movbir, /* [s,s2] = d (signed) */
- RXO_pushm, /* s..s2 */
- RXO_popm, /* s..s2 */
- RXO_xchg, /* s <-> d */
- RXO_stcc, /* d = s if cond(s2) */
- RXO_rtsd, /* rtsd, 1=imm, 2-0 = reg if reg type */
-
- /* These are all either d OP= s or, if s2 is set, d = s OP s2. Note
- that d may be "None". */
- RXO_and,
- RXO_or,
- RXO_xor,
- RXO_add,
- RXO_sub,
- RXO_mul,
- RXO_div,
- RXO_divu,
- RXO_shll,
- RXO_shar,
- RXO_shlr,
-
- RXO_adc, /* d = d + s + carry */
- RXO_sbb, /* d = d - s - ~carry */
- RXO_abs, /* d = |s| */
- RXO_max, /* d = max(d,s) */
- RXO_min, /* d = min(d,s) */
- RXO_emul, /* d:64 = d:32 * s */
- RXO_emulu, /* d:64 = d:32 * s (unsigned) */
-
- RXO_rolc, /* d <<= 1 through carry */
- RXO_rorc, /* d >>= 1 through carry*/
- RXO_rotl, /* d <<= #s without carry */
- RXO_rotr, /* d >>= #s without carry*/
- RXO_revw, /* d = revw(s) */
- RXO_revl, /* d = revl(s) */
- RXO_branch, /* pc = d if cond(s) */
- RXO_branchrel,/* pc += d if cond(s) */
- RXO_jsr, /* pc = d */
- RXO_jsrrel, /* pc += d */
- RXO_rts,
- RXO_nop,
- RXO_nop2,
- RXO_nop3,
-
- RXO_scmpu,
- RXO_smovu,
- RXO_smovb,
- RXO_suntil,
- RXO_swhile,
- RXO_smovf,
- RXO_sstr,
-
- RXO_rmpa,
- RXO_mulhi,
- RXO_mullo,
- RXO_machi,
- RXO_maclo,
- RXO_mvtachi,
- RXO_mvtaclo,
- RXO_mvfachi,
- RXO_mvfacmi,
- RXO_mvfaclo,
- RXO_racw,
-
- RXO_sat, /* sat(d) */
- RXO_satr,
-
- RXO_fadd, /* d op= s */
- RXO_fcmp,
- RXO_fsub,
- RXO_ftoi,
- RXO_fmul,
- RXO_fdiv,
- RXO_round,
- RXO_itof,
-
- RXO_bset, /* d |= (1<<s) */
- RXO_bclr, /* d &= ~(1<<s) */
- RXO_btst, /* s & (1<<s2) */
- RXO_bnot, /* d ^= (1<<s) */
- RXO_bmcc, /* d<s> = cond(s2) */
-
- RXO_clrpsw, /* flag index in d */
- RXO_setpsw, /* flag index in d */
- RXO_mvtipl, /* new IPL in s */
-
- RXO_rtfi,
- RXO_rte,
- RXO_rtd, /* undocumented */
- RXO_brk,
- RXO_dbt, /* undocumented */
- RXO_int, /* vector id in s */
- RXO_stop,
- RXO_wait,
-
- RXO_sccnd, /* d = cond(s) ? 1 : 0 */
-} RX_Opcode_ID;
-
-/* Condition bitpatterns, as registers. */
-#define RXC_eq 0
-#define RXC_z 0
-#define RXC_ne 1
-#define RXC_nz 1
-#define RXC_c 2
-#define RXC_nc 3
-#define RXC_gtu 4
-#define RXC_leu 5
-#define RXC_pz 6
-#define RXC_n 7
-#define RXC_ge 8
-#define RXC_lt 9
-#define RXC_gt 10
-#define RXC_le 11
-#define RXC_o 12
-#define RXC_no 13
-#define RXC_always 14
-#define RXC_never 15
-
-typedef struct
-{
- RX_Operand_Type type;
- int reg;
- int addend;
- RX_Size size;
-} RX_Opcode_Operand;
-
-typedef struct
-{
- RX_Opcode_ID id;
- int n_bytes;
- int prefix;
- char * syntax;
- RX_Size size;
- /* By convention, these are destination, source1, source2. */
- RX_Opcode_Operand op[3];
-
- /* The logic here is:
- newflags = (oldflags & ~(int)flags_0) | flags_1 | (op_flags & flags_s)
- Only the O, S, Z, and C flags are affected. */
- char flags_0; /* This also clears out flags-to-be-set. */
- char flags_1;
- char flags_s;
-} RX_Opcode_Decoded;
-
-/* Within the syntax, %c-style format specifiers are as follows:
-
- %% = '%' character
- %0 = operand[0] (destination)
- %1 = operand[1] (source)
- %2 = operand[2] (2nd source)
- %s = operation size (b/w/l)
- %SN = operand size [N] (N=0,1,2)
- %aN = op[N] as an address (N=0,1,2)
-
- Register numbers 0..15 are general registers. 16..31 are control
- registers. 32..47 are condition codes. */
-
-int rx_decode_opcode (unsigned long, RX_Opcode_Decoded *, int (*)(void *), void *);
diff --git a/include/opcode/s390.h b/include/opcode/s390.h
deleted file mode 100644
index 531011e0f..000000000
--- a/include/opcode/s390.h
+++ /dev/null
@@ -1,154 +0,0 @@
-/* s390.h -- Header file for S390 opcode table
- Copyright 2000, 2001, 2003, 2010 Free Software Foundation, Inc.
- Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA
- 02110-1301, USA. */
-
-#ifndef S390_H
-#define S390_H
-
-/* List of instruction sets variations. */
-
-enum s390_opcode_mode_val
- {
- S390_OPCODE_ESA = 0,
- S390_OPCODE_ZARCH
- };
-
-enum s390_opcode_cpu_val
- {
- S390_OPCODE_G5 = 0,
- S390_OPCODE_G6,
- S390_OPCODE_Z900,
- S390_OPCODE_Z990,
- S390_OPCODE_Z9_109,
- S390_OPCODE_Z9_EC,
- S390_OPCODE_Z10,
- S390_OPCODE_Z196,
- S390_OPCODE_ZEC12,
- S390_OPCODE_MAXCPU
- };
-
-/* The opcode table is an array of struct s390_opcode. */
-
-struct s390_opcode
- {
- /* The opcode name. */
- const char * name;
-
- /* The opcode itself. Those bits which will be filled in with
- operands are zeroes. */
- unsigned char opcode[6];
-
- /* The opcode mask. This is used by the disassembler. This is a
- mask containing ones indicating those bits which must match the
- opcode field, and zeroes indicating those bits which need not
- match (and are presumably filled in by operands). */
- unsigned char mask[6];
-
- /* The opcode length in bytes. */
- int oplen;
-
- /* An array of operand codes. Each code is an index into the
- operand table. They appear in the order which the operands must
- appear in assembly code, and are terminated by a zero. */
- unsigned char operands[6];
-
- /* Bitmask of execution modes this opcode is available for. */
- unsigned int modes;
-
- /* First cpu this opcode is available for. */
- enum s390_opcode_cpu_val min_cpu;
- };
-
-/* The table itself is sorted by major opcode number, and is otherwise
- in the order in which the disassembler should consider
- instructions. */
-extern const struct s390_opcode s390_opcodes[];
-extern const int s390_num_opcodes;
-
-/* A opcode format table for the .insn pseudo mnemonic. */
-extern const struct s390_opcode s390_opformats[];
-extern const int s390_num_opformats;
-
-/* Values defined for the flags field of a struct powerpc_opcode. */
-
-/* The operands table is an array of struct s390_operand. */
-
-struct s390_operand
- {
- /* The number of bits in the operand. */
- int bits;
-
- /* How far the operand is left shifted in the instruction. */
- int shift;
-
- /* One bit syntax flags. */
- unsigned long flags;
- };
-
-/* Elements in the table are retrieved by indexing with values from
- the operands field of the powerpc_opcodes table. */
-
-extern const struct s390_operand s390_operands[];
-
-/* Values defined for the flags field of a struct s390_operand. */
-
-/* This operand names a register. The disassembler uses this to print
- register names with a leading 'r'. */
-#define S390_OPERAND_GPR 0x1
-
-/* This operand names a floating point register. The disassembler
- prints these with a leading 'f'. */
-#define S390_OPERAND_FPR 0x2
-
-/* This operand names an access register. The disassembler
- prints these with a leading 'a'. */
-#define S390_OPERAND_AR 0x4
-
-/* This operand names a control register. The disassembler
- prints these with a leading 'c'. */
-#define S390_OPERAND_CR 0x8
-
-/* This operand is a displacement. */
-#define S390_OPERAND_DISP 0x10
-
-/* This operand names a base register. */
-#define S390_OPERAND_BASE 0x20
-
-/* This operand names an index register, it can be skipped. */
-#define S390_OPERAND_INDEX 0x40
-
-/* This operand is a relative branch displacement. The disassembler
- prints these symbolically if possible. */
-#define S390_OPERAND_PCREL 0x80
-
-/* This operand takes signed values. */
-#define S390_OPERAND_SIGNED 0x100
-
-/* This operand is a length. */
-#define S390_OPERAND_LENGTH 0x200
-
-/* This operand is optional. Only a single operand at the end of
- the instruction may be optional. */
-#define S390_OPERAND_OPTIONAL 0x400
-
-/* The operand needs to be a valid GP or FP register pair. */
-#define S390_OPERAND_REG_PAIR 0x800
-
- #endif /* S390_H */
diff --git a/include/opcode/score-datadep.h b/include/opcode/score-datadep.h
deleted file mode 100644
index 10ddf32f6..000000000
--- a/include/opcode/score-datadep.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/* score-datadep.h -- Score Instructions data dependency table
- Copyright 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
- Contributed by:
- Brain.lin (brain.lin@sunplusct.com)
- Mei Ligang (ligang@sunnorth.com.cn)
- Pei-Lin Tsai (pltsai@sunplus.com)
-
- This file is part of GAS, the GNU Assembler.
-
- GAS is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
-
- GAS is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GAS; see the file COPYING3. If not, write to the Free
- Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
- Boston, MA 02110-1301, USA. */
-
-#ifndef SCORE_DATA_DEPENDENCY_H
-#define SCORE_DATA_DEPENDENCY_H
-
-#define INSN_NAME_LEN 16
-
-enum insn_type_for_dependency
-{
- D_mtcr,
- D_all_insn
-};
-
-struct insn_to_dependency
-{
- char *insn_name;
- enum insn_type_for_dependency type;
-};
-
-struct data_dependency
-{
- enum insn_type_for_dependency pre_insn_type;
- char pre_reg[6];
- enum insn_type_for_dependency cur_insn_type;
- char cur_reg[6];
- int bubblenum_7;
- int bubblenum_3;
- int warn_or_error; /* warning - 0; error - 1 */
-};
-
-static const struct insn_to_dependency insn_to_dependency_table[] =
-{
- /* move spectial instruction. */
- {"mtcr", D_mtcr},
-};
-
-static const struct data_dependency data_dependency_table[] =
-{
- /* Status regiser. */
- {D_mtcr, "cr0", D_all_insn, "", 5, 1, 0},
-};
-
-#endif
diff --git a/include/opcode/score-inst.h b/include/opcode/score-inst.h
deleted file mode 100644
index ecb18da2a..000000000
--- a/include/opcode/score-inst.h
+++ /dev/null
@@ -1,236 +0,0 @@
-/* score-inst.h -- Score Instructions Table
- Copyright 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
- Contributed by:
- Brain.lin (brain.lin@sunplusct.com)
- Mei Ligang (ligang@sunnorth.com.cn)
- Pei-Lin Tsai (pltsai@sunplus.com)
-
- This file is part of GAS, the GNU Assembler.
-
- GAS is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
-
- GAS is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GAS; see the file COPYING3. If not, write to the Free
- Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
- 02110-1301, USA. */
-
-#ifndef SCORE_INST_H
-#define SCORE_INST_H
-
-#define LDST_UNALIGN_MASK 0x0000007f
-#define UA_LCB 0x00000060
-#define UA_LCW 0x00000062
-#define UA_LCE 0x00000066
-#define UA_SCB 0x00000068
-#define UA_SCW 0x0000006a
-#define UA_SCE 0x0000006e
-#define UA_LL 0x0000000c
-#define UA_SC 0x0000000e
-#define LDST16_RR_MASK 0x0000000f
-#define N16_LW 8
-#define N16_LH 9
-#define N16_POP 10
-#define N16_LBU 11
-#define N16_SW 12
-#define N16_SH 13
-#define N16_PUSH 14
-#define N16_SB 15
-#define LDST16_RI_MASK 0x7007
-#define N16_LWP 0x7000
-#define N16_LHP 0x7001
-#define N16_LBUP 0x7003
-#define N16_SWP 0x7004
-#define N16_SHP 0x7005
-#define N16_SBP 0x7007
-#define N16_LIU 0x5000
-
-#define OPC_PSEUDOLDST_MASK 0x00000007
-
-enum
-{
- INSN_LW = 0,
- INSN_LH = 1,
- INSN_LHU = 2,
- INSN_LB = 3,
- INSN_SW = 4,
- INSN_SH = 5,
- INSN_LBU = 6,
- INSN_SB = 7,
-};
-
-/* Sub opcdoe opcode. */
-enum
-{
- INSN16_LBU = 11,
- INSN16_LH = 9,
- INSN16_LW = 8,
- INSN16_SB = 15,
- INSN16_SH = 13,
- INSN16_SW = 12,
-};
-
-enum
-{
- LDST_NOUPDATE = 0,
- LDST_PRE = 1,
- LDST_POST = 2,
-};
-
-enum score_insn_type
-{
- Rd_I4,
- Rd_I5,
- Rd_rvalueBP_I5,
- Rd_lvalueBP_I5,
- Rd_Rs_I5,
- x_Rs_I5,
- x_I5_x,
- Rd_I8,
- Rd_Rs_I14,
- I15,
- Rd_I16,
- Rd_I30,
- Rd_I32,
- Rd_rvalueRs_SI10,
- Rd_lvalueRs_SI10,
- Rd_rvalueRs_preSI12,
- Rd_rvalueRs_postSI12,
- Rd_lvalueRs_preSI12,
- Rd_lvalueRs_postSI12,
- Rd_Rs_SI14,
- Rd_rvalueRs_SI15,
- Rd_lvalueRs_SI15,
- Rd_SI5,
- Rd_SI6,
- Rd_SI16,
- PC_DISP8div2,
- PC_DISP11div2,
- PC_DISP19div2,
- PC_DISP24div2,
- Rd_Rs_Rs,
- x_Rs_x,
- x_Rs_Rs,
- Rd_Rs_x,
- Rd_x_Rs,
- Rd_x_x,
- Rd_Rs,
- Rd_HighRs,
- Rd_lvalueRs,
- Rd_rvalueRs,
- Rd_lvalue32Rs,
- Rd_rvalue32Rs,
- x_Rs,
- NO_OPD,
- NO16_OPD,
- OP5_rvalueRs_SI15,
- I5_Rs_Rs_I5_OP5,
- x_rvalueRs_post4,
- Rd_rvalueRs_post4,
- Rd_x_I5,
- Rd_lvalueRs_post4,
- x_lvalueRs_post4,
- Rd_LowRs,
- Rd_Rs_Rs_imm,
- Insn_Type_PCE,
- Insn_Type_SYN,
- Insn_GP,
- Insn_PIC,
- Insn_internal,
- Insn_BCMP,
- Ra_I9_I5,
-};
-
-enum score_data_type
-{
- _IMM4 = 0,
- _IMM5,
- _IMM8,
- _IMM14,
- _IMM15,
- _IMM16,
- _SIMM10 = 6,
- _SIMM12,
- _SIMM14,
- _SIMM15,
- _SIMM16,
- _SIMM14_NEG = 11,
- _IMM16_NEG,
- _SIMM16_NEG,
- _IMM20,
- _IMM25,
- _DISP8div2 = 16,
- _DISP11div2,
- _DISP19div2,
- _DISP24div2,
- _VALUE,
- _VALUE_HI16,
- _VALUE_LO16,
- _VALUE_LDST_LO16 = 23,
- _SIMM16_LA,
- _IMM5_RSHIFT_1,
- _IMM5_RSHIFT_2,
- _SIMM16_LA_POS,
- _IMM5_RANGE_8_31,
- _IMM10_RSHIFT_2,
- _GP_IMM15 = 30,
- _GP_IMM14 = 31,
- _SIMM16_pic = 42, /* Index in score_df_range. */
- _IMM16_LO16_pic = 43,
- _IMM16_pic = 44,
-
- _SIMM5 = 45,
- _SIMM6 = 46,
- _IMM32 = 47,
- _SIMM32 = 48,
- _IMM11 = 49,
- _IMM5_MULTI_LOAD = 50,
-};
-
-#define REG_TMP 1
-
-#define OP_REG_TYPE (1 << 6)
-#define OP_IMM_TYPE (1 << 7)
-#define OP_SH_REGD (OP_REG_TYPE |20)
-#define OP_SH_REGS1 (OP_REG_TYPE |15)
-#define OP_SH_REGS2 (OP_REG_TYPE |10)
-#define OP_SH_I (OP_IMM_TYPE | 1)
-#define OP_SH_RI15 (OP_IMM_TYPE | 0)
-#define OP_SH_I12 (OP_IMM_TYPE | 3)
-#define OP_SH_DISP24 (OP_IMM_TYPE | 1)
-#define OP_SH_DISP19_p1 (OP_IMM_TYPE |15)
-#define OP_SH_DISP19_p2 (OP_IMM_TYPE | 1)
-#define OP_SH_I5 (OP_IMM_TYPE |10)
-#define OP_SH_I10 (OP_IMM_TYPE | 5)
-#define OP_SH_COPID (OP_IMM_TYPE | 5)
-#define OP_SH_TRAPI5 (OP_IMM_TYPE |15)
-#define OP_SH_I15 (OP_IMM_TYPE |10)
-
-#define OP16_SH_REGD (OP_REG_TYPE | 8)
-#define OP16_SH_REGS1 (OP_REG_TYPE | 4)
-#define OP16_SH_I45 (OP_IMM_TYPE | 3)
-#define OP16_SH_I8 (OP_IMM_TYPE | 0)
-#define OP16_SH_DISP8 (OP_IMM_TYPE | 0)
-#define OP16_SH_DISP11 (OP_IMM_TYPE | 1)
-
-enum insn_class
-{
- INSN_CLASS_16,
- INSN_CLASS_32,
- INSN_CLASS_48,
- INSN_CLASS_PCE,
- INSN_CLASS_SYN
-};
-
-/* s3_s7: Globals for both tc-score.c and elf32-score.c. */
-extern int score3;
-extern int score7;
-
-#endif
diff --git a/include/opcode/sparc.h b/include/opcode/sparc.h
deleted file mode 100644
index f05909fed..000000000
--- a/include/opcode/sparc.h
+++ /dev/null
@@ -1,280 +0,0 @@
-/* Definitions for opcode table for the sparc.
- Copyright 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 2000, 2002,
- 2003, 2005, 2010, 2011 Free Software Foundation, Inc.
-
- This file is part of GAS, the GNU Assembler, GDB, the GNU debugger, and
- the GNU Binutils.
-
- GAS/GDB 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 3, or (at your option)
- any later version.
-
- GAS/GDB is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GAS or GDB; see the file COPYING3. If not, write to
- the Free Software Foundation, 51 Franklin Street - Fifth Floor,
- Boston, MA 02110-1301, USA. */
-
-#include "ansidecl.h"
-
-/* The SPARC opcode table (and other related data) is defined in
- the opcodes library in sparc-opc.c. If you change anything here, make
- sure you fix up that file, and vice versa. */
-
- /* FIXME-someday: perhaps the ,a's and such should be embedded in the
- instruction's name rather than the args. This would make gas faster, pinsn
- slower, but would mess up some macros a bit. xoxorich. */
-
-/* List of instruction sets variations.
- These values are such that each element is either a superset of a
- preceding each one or they conflict in which case SPARC_OPCODE_CONFLICT_P
- returns non-zero.
- The values are indices into `sparc_opcode_archs' defined in sparc-opc.c.
- Don't change this without updating sparc-opc.c. */
-
-enum sparc_opcode_arch_val
-{
- SPARC_OPCODE_ARCH_V6 = 0,
- SPARC_OPCODE_ARCH_V7,
- SPARC_OPCODE_ARCH_V8,
- SPARC_OPCODE_ARCH_LEON,
- SPARC_OPCODE_ARCH_SPARCLET,
- SPARC_OPCODE_ARCH_SPARCLITE,
- /* V9 variants must appear last. */
- SPARC_OPCODE_ARCH_V9,
- SPARC_OPCODE_ARCH_V9A, /* V9 with ultrasparc additions. */
- SPARC_OPCODE_ARCH_V9B, /* V9 with ultrasparc and cheetah additions. */
- SPARC_OPCODE_ARCH_BAD /* Error return from sparc_opcode_lookup_arch. */
-};
-
-/* The highest architecture in the table. */
-#define SPARC_OPCODE_ARCH_MAX (SPARC_OPCODE_ARCH_BAD - 1)
-
-/* Given an enum sparc_opcode_arch_val, return the bitmask to use in
- insn encoding/decoding. */
-#define SPARC_OPCODE_ARCH_MASK(arch) (1 << (arch))
-
-/* Given a valid sparc_opcode_arch_val, return non-zero if it's v9. */
-#define SPARC_OPCODE_ARCH_V9_P(arch) ((arch) >= SPARC_OPCODE_ARCH_V9)
-
-/* Table of cpu variants. */
-
-typedef struct sparc_opcode_arch
-{
- const char *name;
- /* Mask of sparc_opcode_arch_val's supported.
- EG: For v7 this would be
- (SPARC_OPCODE_ARCH_MASK (..._V6) | SPARC_OPCODE_ARCH_MASK (..._V7)).
- These are short's because sparc_opcode.architecture is. */
- short supported;
-} sparc_opcode_arch;
-
-extern const struct sparc_opcode_arch sparc_opcode_archs[];
-
-/* Given architecture name, look up it's sparc_opcode_arch_val value. */
-extern enum sparc_opcode_arch_val sparc_opcode_lookup_arch (const char *);
-
-/* Return the bitmask of supported architectures for ARCH. */
-#define SPARC_OPCODE_SUPPORTED(ARCH) (sparc_opcode_archs[ARCH].supported)
-
-/* Non-zero if ARCH1 conflicts with ARCH2.
- IE: ARCH1 as a supported bit set that ARCH2 doesn't, and vice versa. */
-#define SPARC_OPCODE_CONFLICT_P(ARCH1, ARCH2) \
- (((SPARC_OPCODE_SUPPORTED (ARCH1) & SPARC_OPCODE_SUPPORTED (ARCH2)) \
- != SPARC_OPCODE_SUPPORTED (ARCH1)) \
- && ((SPARC_OPCODE_SUPPORTED (ARCH1) & SPARC_OPCODE_SUPPORTED (ARCH2)) \
- != SPARC_OPCODE_SUPPORTED (ARCH2)))
-
-/* Structure of an opcode table entry. */
-
-typedef struct sparc_opcode
-{
- const char *name;
- unsigned long match; /* Bits that must be set. */
- unsigned long lose; /* Bits that must not be set. */
- const char *args;
- /* This was called "delayed" in versions before the flags. */
- unsigned int flags;
- unsigned int hwcaps;
- short architecture; /* Bitmask of sparc_opcode_arch_val's. */
-} sparc_opcode;
-
-/* FIXME: Add F_ANACHRONISTIC flag for v9. */
-#define F_DELAYED 0x00000001 /* Delayed branch. */
-#define F_ALIAS 0x00000002 /* Alias for a "real" instruction. */
-#define F_UNBR 0x00000004 /* Unconditional branch. */
-#define F_CONDBR 0x00000008 /* Conditional branch. */
-#define F_JSR 0x00000010 /* Subroutine call. */
-#define F_FLOAT 0x00000020 /* Floating point instruction (not a branch). */
-#define F_FBR 0x00000040 /* Floating point branch. */
-#define F_PREFERRED 0x00000080 /* A preferred alias. */
-
-#define F_PREF_ALIAS (F_ALIAS|F_PREFERRED)
-
-/* These must match the HWCAP_* values precisely. */
-#define HWCAP_MUL32 0x00000001 /* umul/umulcc/smul/smulcc insns */
-#define HWCAP_DIV32 0x00000002 /* udiv/udivcc/sdiv/sdivcc insns */
-#define HWCAP_FSMULD 0x00000004 /* 'fsmuld' insn */
-#define HWCAP_V8PLUS 0x00000008 /* v9 insns available to 32bit */
-#define HWCAP_POPC 0x00000010 /* 'popc' insn */
-#define HWCAP_VIS 0x00000020 /* VIS insns */
-#define HWCAP_VIS2 0x00000040 /* VIS2 insns */
-#define HWCAP_ASI_BLK_INIT \
- 0x00000080 /* block init ASIs */
-#define HWCAP_FMAF 0x00000100 /* fused multiply-add */
-#define HWCAP_VIS3 0x00000400 /* VIS3 insns */
-#define HWCAP_HPC 0x00000800 /* HPC insns */
-#define HWCAP_RANDOM 0x00001000 /* 'random' insn */
-#define HWCAP_TRANS 0x00002000 /* transaction insns */
-#define HWCAP_FJFMAU 0x00004000 /* unfused multiply-add */
-#define HWCAP_IMA 0x00008000 /* integer multiply-add */
-#define HWCAP_ASI_CACHE_SPARING \
- 0x00010000 /* cache sparing ASIs */
-#define HWCAP_AES 0x00020000 /* AES crypto insns */
-#define HWCAP_DES 0x00040000 /* DES crypto insns */
-#define HWCAP_KASUMI 0x00080000 /* KASUMI crypto insns */
-#define HWCAP_CAMELLIA 0x00100000 /* CAMELLIA crypto insns */
-#define HWCAP_MD5 0x00200000 /* MD5 hashing insns */
-#define HWCAP_SHA1 0x00400000 /* SHA1 hashing insns */
-#define HWCAP_SHA256 0x00800000 /* SHA256 hashing insns */
-#define HWCAP_SHA512 0x01000000 /* SHA512 hashing insns */
-#define HWCAP_MPMUL 0x02000000 /* Multiple Precision Multiply */
-#define HWCAP_MONT 0x04000000 /* Montgomery Mult/Sqrt */
-#define HWCAP_PAUSE 0x08000000 /* Pause insn */
-#define HWCAP_CBCOND 0x10000000 /* Compare and Branch insns */
-#define HWCAP_CRC32C 0x20000000 /* CRC32C insn */
-
-/* All sparc opcodes are 32 bits, except for the `set' instruction (really a
- macro), which is 64 bits. It is handled as a special case.
-
- The match component is a mask saying which bits must match a particular
- opcode in order for an instruction to be an instance of that opcode.
-
- The args component is a string containing one character for each operand of the
- instruction.
-
- Kinds of operands:
- # Number used by optimizer. It is ignored.
- 1 rs1 register.
- 2 rs2 register.
- d rd register.
- e frs1 floating point register.
- v frs1 floating point register (double/even).
- V frs1 floating point register (quad/multiple of 4).
- f frs2 floating point register.
- B frs2 floating point register (double/even).
- R frs2 floating point register (quad/multiple of 4).
- 4 frs3 floating point register.
- 5 frs3 floating point register (doube/even).
- g frsd floating point register.
- H frsd floating point register (double/even).
- J frsd floating point register (quad/multiple of 4).
- b crs1 coprocessor register
- c crs2 coprocessor register
- D crsd coprocessor register
- m alternate space register (asr) in rd
- M alternate space register (asr) in rs1
- h 22 high bits.
- X 5 bit unsigned immediate
- Y 6 bit unsigned immediate
- 3 SIAM mode (3 bits). (v9b)
- K MEMBAR mask (7 bits). (v9)
- j 10 bit Immediate. (v9)
- I 11 bit Immediate. (v9)
- i 13 bit Immediate.
- n 22 bit immediate.
- k 2+14 bit PC relative immediate. (v9)
- G 19 bit PC relative immediate. (v9)
- l 22 bit PC relative immediate.
- L 30 bit PC relative immediate.
- a Annul. The annul bit is set.
- A Alternate address space. Stored as 8 bits.
- C Coprocessor state register.
- F floating point state register.
- p Processor state register.
- N Branch predict clear ",pn" (v9)
- T Branch predict set ",pt" (v9)
- z %icc. (v9)
- Z %xcc. (v9)
- q Floating point queue.
- r Single register that is both rs1 and rd.
- O Single register that is both rs2 and rd.
- Q Coprocessor queue.
- S Special case.
- t Trap base register.
- w Window invalid mask register.
- y Y register.
- u sparclet coprocessor registers in rd position
- U sparclet coprocessor registers in rs1 position
- E %ccr. (v9)
- s %fprs. (v9)
- P %pc. (v9)
- W %tick. (v9)
- o %asi. (v9)
- 6 %fcc0. (v9)
- 7 %fcc1. (v9)
- 8 %fcc2. (v9)
- 9 %fcc3. (v9)
- ! Privileged Register in rd (v9)
- ? Privileged Register in rs1 (v9)
- * Prefetch function constant. (v9)
- x OPF field (v9 impdep).
- 0 32/64 bit immediate for set or setx (v9) insns
- _ Ancillary state register in rd (v9a)
- / Ancillary state register in rs1 (v9a)
- ( entire floating point state register (%efsr)
- ) 5 bit immediate placed in RS3 field
- = 2+8 bit PC relative immediate. (v9) */
-
-#define OP2(x) (((x) & 0x7) << 22) /* Op2 field of format2 insns. */
-#define OP3(x) (((x) & 0x3f) << 19) /* Op3 field of format3 insns. */
-#define OP(x) ((unsigned) ((x) & 0x3) << 30) /* Op field of all insns. */
-#define OPF(x) (((x) & 0x1ff) << 5) /* Opf field of float insns. */
-#define OPF_LOW5(x) OPF ((x) & 0x1f) /* V9. */
-#define OPF_LOW4(x) OPF ((x) & 0xf) /* V9. */
-#define F3F(x, y, z) (OP (x) | OP3 (y) | OPF (z)) /* Format3 float insns. */
-#define F3F4(x, y, z) (OP (x) | OP3 (y) | OPF_LOW4 (z))
-#define F3I(x) (((x) & 0x1) << 13) /* Immediate field of format 3 insns. */
-#define F2(x, y) (OP (x) | OP2(y)) /* Format 2 insns. */
-#define F3(x, y, z) (OP (x) | OP3(y) | F3I(z)) /* Format3 insns. */
-#define F1(x) (OP (x))
-#define DISP30(x) ((x) & 0x3fffffff)
-#define ASI(x) (((x) & 0xff) << 5) /* Asi field of format3 insns. */
-#define RS2(x) ((x) & 0x1f) /* Rs2 field. */
-#define SIMM13(x) ((x) & 0x1fff) /* Simm13 field. */
-#define RD(x) (((x) & 0x1f) << 25) /* Destination register field. */
-#define RS1(x) (((x) & 0x1f) << 14) /* Rs1 field. */
-#define RS3(x) (((x) & 0x1f) << 9) /* Rs3 field. */
-#define ASI_RS2(x) (SIMM13 (x))
-#define MEMBAR(x) ((x) & 0x7f)
-#define SLCPOP(x) (((x) & 0x7f) << 6) /* Sparclet cpop. */
-
-#define ANNUL (1 << 29)
-#define BPRED (1 << 19) /* V9. */
-#define IMMED F3I (1)
-#define RD_G0 RD (~0)
-#define RS1_G0 RS1 (~0)
-#define RS2_G0 RS2 (~0)
-
-extern const struct sparc_opcode sparc_opcodes[];
-extern const int sparc_num_opcodes;
-
-extern int sparc_encode_asi (const char *);
-extern const char *sparc_decode_asi (int);
-extern int sparc_encode_membar (const char *);
-extern const char *sparc_decode_membar (int);
-extern int sparc_encode_prefetch (const char *);
-extern const char *sparc_decode_prefetch (int);
-extern int sparc_encode_sparclet_cpreg (const char *);
-extern const char *sparc_decode_sparclet_cpreg (int);
-
-/* Local Variables:
- fill-column: 131
- comment-column: 0
- End: */
-
diff --git a/include/opcode/spu-insns.h b/include/opcode/spu-insns.h
deleted file mode 100644
index d6c260aae..000000000
--- a/include/opcode/spu-insns.h
+++ /dev/null
@@ -1,417 +0,0 @@
-/* SPU ELF support for BFD.
-
- Copyright 2006, 2007, 2010 Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-/* SPU Opcode Table
-
--=-=-= FORMAT =-=-=-
-
- +----+-------+-------+-------+-------+ +------------+-------+-------+-------+
-RRR | op | RC | RB | RA | RT | RI7 | op | I7 | RA | RT |
- +----+-------+-------+-------+-------+ +------------+-------+-------+-------+
- 0 3 1 1 2 3 0 1 1 2 3
- 0 7 4 1 0 7 4 1
-
- +-----------+--------+-------+-------+ +---------+----------+-------+-------+
-RI8 | op | I8 | RA | RT | RI10 | op | I10 | RA | RT |
- +-----------+--------+-------+-------+ +---------+----------+-------+-------+
- 0 9 1 2 3 0 7 1 2 3
- 7 4 1 7 4 1
-
- +----------+-----------------+-------+ +--------+-------------------+-------+
-RI16 | op | I16 | RT | RI18 | op | I18 | RT |
- +----------+-----------------+-------+ +--------+-------------------+-------+
- 0 8 2 3 0 6 2 3
- 4 1 4 1
-
- +------------+-------+-------+-------+ +-------+--+-----------------+-------+
-RR | op | RB | RA | RT | LBT | op |RO| I16 | RO |
- +------------+-------+-------+-------+ +-------+--+-----------------+-------+
- 0 1 1 2 3 0 6 8 2 3
- 0 7 4 1 4 1
-
- +------------+----+--+-------+-------+
- LBTI | op | // |RO| RA | RO |
- +------------+----+--+-------+-------+
- 0 1 1 1 2 3
- 0 5 7 4 1
-
--=-=-= OPCODE =-=-=-
-
-OPCODE field specifies the most significant 11bit of the instruction. Some formats don't have 11bits for opcode field, and in this
-case, bit field other than op are defined as 0s. For example, opcode of fma instruction which is RRR format is defined as 0x700,
-since 0x700 -> 11'b11100000000, this means opcode is 4'b1110, and other 7bits are defined as 7'b0000000.
-
--=-=-= ASM_FORMAT =-=-=-
-
-RRR category RI7 category
- ASM_RRR mnemonic RC, RA, RB, RT ASM_RI4 mnemonic RT, RA, I4
- ASM_RI7 mnemonic RT, RA, I7
-
-RI8 category RI10 category
- ASM_RUI8 mnemonic RT, RA, UI8 ASM_AI10 mnemonic RA, I10
- ASM_RI10 mnemonic RT, RA, R10
- ASM_RI10IDX mnemonic RT, I10(RA)
-
-RI16 category RI18 category
- ASM_I16W mnemonic I16W ASM_RI18 mnemonic RT, I18
- ASM_RI16 mnemonic RT, I16
- ASM_RI16W mnemonic RT, I16W
-
-RR category LBT category
- ASM_MFSPR mnemonic RT, SA ASM_LBT mnemonic brinst, brtarg
- ASM_MTSPR mnemonic SA, RT
- ASM_NOOP mnemonic LBTI category
- ASM_RA mnemonic RA ASM_LBTI mnemonic brinst, RA
- ASM_RAB mnemonic RA, RB
- ASM_RDCH mnemonic RT, CA
- ASM_RR mnemonic RT, RA, RB
- ASM_RT mnemonic RT
- ASM_RTA mnemonic RT, RA
- ASM_WRCH mnemonic CA, RT
-
-Note that RRR instructions have the names for RC and RT reversed from
-what's in the ISA, in order to put RT in the same position it appears
-for other formats.
-
--=-=-= DEPENDENCY =-=-=-
-
-DEPENDENCY filed consists of 5 digits. This represents which register is used as source and which register is used as target.
-The first(most significant) digit is always 0. Then it is followd by RC, RB, RA and RT digits.
-If the digit is 0, this means the corresponding register is not used in the instruction.
-If the digit is 1, this means the corresponding register is used as a source in the instruction.
-If the digit is 2, this means the corresponding register is used as a target in the instruction.
-If the digit is 3, this means the corresponding register is used as both source and target in the instruction.
-For example, fms instruction has 00113 as the DEPENDENCY field. This means RC is not used in this operation, RB and RA are
-used as sources and RT is the target.
-
--=-=-= PIPE =-=-=-
-
-This field shows which execution pipe is used for the instruction
-
-pipe0 execution pipelines:
- FP6 SP floating pipeline
- FP7 integer operations executed in SP floating pipeline
- FPD DP floating pipeline
- FX2 FXU pipeline
- FX3 Rotate/Shift pipeline
- FXB Byte pipeline
- NOP No pipeline
-
-pipe1 execution pipelines:
- BR Branch pipeline
- LNOP No pipeline
- LS Load/Store pipeline
- SHUF Shuffle pipeline
- SPR SPR/CH pipeline
-
-*/
-
-#define _A0() {0}
-#define _A1(a) {1,a}
-#define _A2(a,b) {2,a,b}
-#define _A3(a,b,c) {3,a,b,c}
-#define _A4(a,b,c,d) {4,a,b,c,d}
-
-/* TAG FORMAT OPCODE MNEMONIC ASM_FORMAT DEPENDENCY PIPE COMMENT */
-/* 0[RC][RB][RA][RT] */
-/* 1:src, 2:target */
-
-APUOP(M_BR, RI16, 0x190, "br", _A1(A_R18), 00000, BR) /* BRel IP<-IP+I16 */
-APUOP(M_BRSL, RI16, 0x198, "brsl", _A2(A_T,A_R18), 00002, BR) /* BRelSetLink RT,IP<-IP,IP+I16 */
-APUOP(M_BRA, RI16, 0x180, "bra", _A1(A_S18), 00000, BR) /* BRAbs IP<-I16 */
-APUOP(M_BRASL, RI16, 0x188, "brasl", _A2(A_T,A_S18), 00002, BR) /* BRAbsSetLink RT,IP<-IP,I16 */
-APUOP(M_FSMBI, RI16, 0x194, "fsmbi", _A2(A_T,A_X16), 00002, SHUF) /* FormSelMask%I RT<-fsm(I16) */
-APUOP(M_LQA, RI16, 0x184, "lqa", _A2(A_T,A_S18), 00002, LS) /* LoadQAbs RT<-M[I16] */
-APUOP(M_LQR, RI16, 0x19C, "lqr", _A2(A_T,A_R18), 00002, LS) /* LoadQRel RT<-M[IP+I16] */
-APUOP(M_STOP, RR, 0x000, "stop", _A0(), 00000, BR) /* STOP stop */
-APUOP(M_STOP2, RR, 0x000, "stop", _A1(A_U14), 00000, BR) /* STOP stop */
-APUOP(M_STOPD, RR, 0x140, "stopd", _A3(A_T,A_A,A_B), 00111, BR) /* STOPD stop (with register dependencies) */
-APUOP(M_LNOP, RR, 0x001, "lnop", _A0(), 00000, LNOP) /* LNOP no_operation */
-APUOP(M_SYNC, RR, 0x002, "sync", _A0(), 00000, BR) /* SYNC flush_pipe */
-APUOP(M_DSYNC, RR, 0x003, "dsync", _A0(), 00000, BR) /* DSYNC flush_store_queue */
-APUOP(M_MFSPR, RR, 0x00c, "mfspr", _A2(A_T,A_S), 00002, SPR) /* MFSPR RT<-SA */
-APUOP(M_RDCH, RR, 0x00d, "rdch", _A2(A_T,A_H), 00002, SPR) /* ReaDCHannel RT<-CA:data */
-APUOP(M_RCHCNT, RR, 0x00f, "rchcnt", _A2(A_T,A_H), 00002, SPR) /* ReaDCHanCouNT RT<-CA:count */
-APUOP(M_HBRA, LBT, 0x080, "hbra", _A2(A_S11,A_S18), 00000, LS) /* HBRA BTB[B9]<-M[I16] */
-APUOP(M_HBRR, LBT, 0x090, "hbrr", _A2(A_S11,A_R18), 00000, LS) /* HBRR BTB[B9]<-M[IP+I16] */
-APUOP(M_BRZ, RI16, 0x100, "brz", _A2(A_T,A_R18), 00001, BR) /* BRZ IP<-IP+I16_if(RT) */
-APUOP(M_BRNZ, RI16, 0x108, "brnz", _A2(A_T,A_R18), 00001, BR) /* BRNZ IP<-IP+I16_if(RT) */
-APUOP(M_BRHZ, RI16, 0x110, "brhz", _A2(A_T,A_R18), 00001, BR) /* BRHZ IP<-IP+I16_if(RT) */
-APUOP(M_BRHNZ, RI16, 0x118, "brhnz", _A2(A_T,A_R18), 00001, BR) /* BRHNZ IP<-IP+I16_if(RT) */
-APUOP(M_STQA, RI16, 0x104, "stqa", _A2(A_T,A_S18), 00001, LS) /* SToreQAbs M[I16]<-RT */
-APUOP(M_STQR, RI16, 0x11C, "stqr", _A2(A_T,A_R18), 00001, LS) /* SToreQRel M[IP+I16]<-RT */
-APUOP(M_MTSPR, RR, 0x10c, "mtspr", _A2(A_S,A_T), 00001, SPR) /* MTSPR SA<-RT */
-APUOP(M_WRCH, RR, 0x10d, "wrch", _A2(A_H,A_T), 00001, SPR) /* ChanWRite CA<-RT */
-APUOP(M_LQD, RI10, 0x1a0, "lqd", _A4(A_T,A_S14,A_P,A_A), 00012, LS) /* LoadQDisp RT<-M[Ra+I10] */
-APUOP(M_BI, RR, 0x1a8, "bi", _A1(A_A), 00010, BR) /* BI IP<-RA */
-APUOP(M_BISL, RR, 0x1a9, "bisl", _A2(A_T,A_A), 00012, BR) /* BISL RT,IP<-IP,RA */
-APUOP(M_IRET, RR, 0x1aa, "iret", _A1(A_A), 00010, BR) /* IRET IP<-SRR0 */
-APUOP(M_IRET2, RR, 0x1aa, "iret", _A0(), 00010, BR) /* IRET IP<-SRR0 */
-APUOP(M_BISLED, RR, 0x1ab, "bisled", _A2(A_T,A_A), 00012, BR) /* BISLED RT,IP<-IP,RA_if(ext) */
-APUOP(M_HBR, LBTI, 0x1ac, "hbr", _A2(A_S11I,A_A), 00010, LS) /* HBR BTB[B9]<-M[Ra] */
-APUOP(M_FREST, RR, 0x1b8, "frest", _A2(A_T,A_A), 00012, SHUF) /* FREST RT<-recip(RA) */
-APUOP(M_FRSQEST, RR, 0x1b9, "frsqest", _A2(A_T,A_A), 00012, SHUF) /* FRSQEST RT<-rsqrt(RA) */
-APUOP(M_FSM, RR, 0x1b4, "fsm", _A2(A_T,A_A), 00012, SHUF) /* FormSelMask% RT<-expand(Ra) */
-APUOP(M_FSMH, RR, 0x1b5, "fsmh", _A2(A_T,A_A), 00012, SHUF) /* FormSelMask% RT<-expand(Ra) */
-APUOP(M_FSMB, RR, 0x1b6, "fsmb", _A2(A_T,A_A), 00012, SHUF) /* FormSelMask% RT<-expand(Ra) */
-APUOP(M_GB, RR, 0x1b0, "gb", _A2(A_T,A_A), 00012, SHUF) /* GatherBits% RT<-gather(RA) */
-APUOP(M_GBH, RR, 0x1b1, "gbh", _A2(A_T,A_A), 00012, SHUF) /* GatherBits% RT<-gather(RA) */
-APUOP(M_GBB, RR, 0x1b2, "gbb", _A2(A_T,A_A), 00012, SHUF) /* GatherBits% RT<-gather(RA) */
-APUOP(M_CBD, RI7, 0x1f4, "cbd", _A4(A_T,A_U7,A_P,A_A), 00012, SHUF) /* genCtl%%insD RT<-sta(Ra+I4,siz) */
-APUOP(M_CHD, RI7, 0x1f5, "chd", _A4(A_T,A_U7,A_P,A_A), 00012, SHUF) /* genCtl%%insD RT<-sta(Ra+I4,siz) */
-APUOP(M_CWD, RI7, 0x1f6, "cwd", _A4(A_T,A_U7,A_P,A_A), 00012, SHUF) /* genCtl%%insD RT<-sta(Ra+I4,siz) */
-APUOP(M_CDD, RI7, 0x1f7, "cdd", _A4(A_T,A_U7,A_P,A_A), 00012, SHUF) /* genCtl%%insD RT<-sta(Ra+I4,siz) */
-APUOP(M_ROTQBII, RI7, 0x1f8, "rotqbii", _A3(A_T,A_A,A_U3), 00012, SHUF) /* ROTQBII RT<-RA<<<I7 */
-APUOP(M_ROTQBYI, RI7, 0x1fc, "rotqbyi", _A3(A_T,A_A,A_S7N), 00012, SHUF) /* ROTQBYI RT<-RA<<<(I7*8) */
-APUOP(M_ROTQMBII, RI7, 0x1f9, "rotqmbii", _A3(A_T,A_A,A_S3), 00012, SHUF) /* ROTQMBII RT<-RA<<I7 */
-APUOP(M_ROTQMBYI, RI7, 0x1fd, "rotqmbyi", _A3(A_T,A_A,A_S6), 00012, SHUF) /* ROTQMBYI RT<-RA<<I7 */
-APUOP(M_SHLQBII, RI7, 0x1fb, "shlqbii", _A3(A_T,A_A,A_U3), 00012, SHUF) /* SHLQBII RT<-RA<<I7 */
-APUOP(M_SHLQBYI, RI7, 0x1ff, "shlqbyi", _A3(A_T,A_A,A_U5), 00012, SHUF) /* SHLQBYI RT<-RA<<I7 */
-APUOP(M_STQD, RI10, 0x120, "stqd", _A4(A_T,A_S14,A_P,A_A), 00011, LS) /* SToreQDisp M[Ra+I10]<-RT */
-APUOP(M_BIHNZ, RR, 0x12b, "bihnz", _A2(A_T,A_A), 00011, BR) /* BIHNZ IP<-RA_if(RT) */
-APUOP(M_BIHZ, RR, 0x12a, "bihz", _A2(A_T,A_A), 00011, BR) /* BIHZ IP<-RA_if(RT) */
-APUOP(M_BINZ, RR, 0x129, "binz", _A2(A_T,A_A), 00011, BR) /* BINZ IP<-RA_if(RT) */
-APUOP(M_BIZ, RR, 0x128, "biz", _A2(A_T,A_A), 00011, BR) /* BIZ IP<-RA_if(RT) */
-APUOP(M_CBX, RR, 0x1d4, "cbx", _A3(A_T,A_A,A_B), 00112, SHUF) /* genCtl%%insX RT<-sta(Ra+Rb,siz) */
-APUOP(M_CHX, RR, 0x1d5, "chx", _A3(A_T,A_A,A_B), 00112, SHUF) /* genCtl%%insX RT<-sta(Ra+Rb,siz) */
-APUOP(M_CWX, RR, 0x1d6, "cwx", _A3(A_T,A_A,A_B), 00112, SHUF) /* genCtl%%insX RT<-sta(Ra+Rb,siz) */
-APUOP(M_CDX, RR, 0x1d7, "cdx", _A3(A_T,A_A,A_B), 00112, SHUF) /* genCtl%%insX RT<-sta(Ra+Rb,siz) */
-APUOP(M_LQX, RR, 0x1c4, "lqx", _A3(A_T,A_A,A_B), 00112, LS) /* LoadQindeX RT<-M[Ra+Rb] */
-APUOP(M_ROTQBI, RR, 0x1d8, "rotqbi", _A3(A_T,A_A,A_B), 00112, SHUF) /* ROTQBI RT<-RA<<<Rb */
-APUOP(M_ROTQMBI, RR, 0x1d9, "rotqmbi", _A3(A_T,A_A,A_B), 00112, SHUF) /* ROTQMBI RT<-RA<<Rb */
-APUOP(M_SHLQBI, RR, 0x1db, "shlqbi", _A3(A_T,A_A,A_B), 00112, SHUF) /* SHLQBI RT<-RA<<Rb */
-APUOP(M_ROTQBY, RR, 0x1dc, "rotqby", _A3(A_T,A_A,A_B), 00112, SHUF) /* ROTQBY RT<-RA<<<(Rb*8) */
-APUOP(M_ROTQMBY, RR, 0x1dd, "rotqmby", _A3(A_T,A_A,A_B), 00112, SHUF) /* ROTQMBY RT<-RA<<Rb */
-APUOP(M_SHLQBY, RR, 0x1df, "shlqby", _A3(A_T,A_A,A_B), 00112, SHUF) /* SHLQBY RT<-RA<<Rb */
-APUOP(M_ROTQBYBI, RR, 0x1cc, "rotqbybi", _A3(A_T,A_A,A_B), 00112, SHUF) /* ROTQBYBI RT<-RA<<Rb */
-APUOP(M_ROTQMBYBI, RR, 0x1cd, "rotqmbybi", _A3(A_T,A_A,A_B), 00112, SHUF) /* ROTQMBYBI RT<-RA<<Rb */
-APUOP(M_SHLQBYBI, RR, 0x1cf, "shlqbybi", _A3(A_T,A_A,A_B), 00112, SHUF) /* SHLQBYBI RT<-RA<<Rb */
-APUOP(M_STQX, RR, 0x144, "stqx", _A3(A_T,A_A,A_B), 00111, LS) /* SToreQindeX M[Ra+Rb]<-RT */
-APUOP(M_SHUFB, RRR, 0x580, "shufb", _A4(A_C,A_A,A_B,A_T), 02111, SHUF) /* SHUFfleBytes RC<-f(RA,RB,RT) */
-APUOP(M_IL, RI16, 0x204, "il", _A2(A_T,A_S16), 00002, FX2) /* ImmLoad RT<-sxt(I16) */
-APUOP(M_ILH, RI16, 0x20c, "ilh", _A2(A_T,A_X16), 00002, FX2) /* ImmLoadH RT<-I16 */
-APUOP(M_ILHU, RI16, 0x208, "ilhu", _A2(A_T,A_X16), 00002, FX2) /* ImmLoadHUpper RT<-I16<<16 */
-APUOP(M_ILA, RI18, 0x210, "ila", _A2(A_T,A_U18), 00002, FX2) /* ImmLoadAddr RT<-zxt(I18) */
-APUOP(M_NOP, RR, 0x201, "nop", _A1(A_T), 00000, NOP) /* XNOP no_operation */
-APUOP(M_NOP2, RR, 0x201, "nop", _A0(), 00000, NOP) /* XNOP no_operation */
-APUOP(M_IOHL, RI16, 0x304, "iohl", _A2(A_T,A_X16), 00003, FX2) /* AddImmeXt RT<-RT+sxt(I16) */
-APUOP(M_ANDBI, RI10, 0x0b0, "andbi", _A3(A_T,A_A,A_S10B), 00012, FX2) /* AND%I RT<-RA&I10 */
-APUOP(M_ANDHI, RI10, 0x0a8, "andhi", _A3(A_T,A_A,A_S10), 00012, FX2) /* AND%I RT<-RA&I10 */
-APUOP(M_ANDI, RI10, 0x0a0, "andi", _A3(A_T,A_A,A_S10), 00012, FX2) /* AND%I RT<-RA&I10 */
-APUOP(M_ORBI, RI10, 0x030, "orbi", _A3(A_T,A_A,A_S10B), 00012, FX2) /* OR%I RT<-RA|I10 */
-APUOP(M_ORHI, RI10, 0x028, "orhi", _A3(A_T,A_A,A_S10), 00012, FX2) /* OR%I RT<-RA|I10 */
-APUOP(M_ORI, RI10, 0x020, "ori", _A3(A_T,A_A,A_S10), 00012, FX2) /* OR%I RT<-RA|I10 */
-APUOP(M_ORX, RR, 0x1f0, "orx", _A2(A_T,A_A), 00012, BR) /* ORX RT<-RA.w0|RA.w1|RA.w2|RA.w3 */
-APUOP(M_XORBI, RI10, 0x230, "xorbi", _A3(A_T,A_A,A_S10B), 00012, FX2) /* XOR%I RT<-RA^I10 */
-APUOP(M_XORHI, RI10, 0x228, "xorhi", _A3(A_T,A_A,A_S10), 00012, FX2) /* XOR%I RT<-RA^I10 */
-APUOP(M_XORI, RI10, 0x220, "xori", _A3(A_T,A_A,A_S10), 00012, FX2) /* XOR%I RT<-RA^I10 */
-APUOP(M_AHI, RI10, 0x0e8, "ahi", _A3(A_T,A_A,A_S10), 00012, FX2) /* Add%Immed RT<-RA+I10 */
-APUOP(M_AI, RI10, 0x0e0, "ai", _A3(A_T,A_A,A_S10), 00012, FX2) /* Add%Immed RT<-RA+I10 */
-APUOP(M_SFHI, RI10, 0x068, "sfhi", _A3(A_T,A_A,A_S10), 00012, FX2) /* SubFrom%Imm RT<-I10-RA */
-APUOP(M_SFI, RI10, 0x060, "sfi", _A3(A_T,A_A,A_S10), 00012, FX2) /* SubFrom%Imm RT<-I10-RA */
-APUOP(M_CGTBI, RI10, 0x270, "cgtbi", _A3(A_T,A_A,A_S10B), 00012, FX2) /* CGT%I RT<-(RA>I10) */
-APUOP(M_CGTHI, RI10, 0x268, "cgthi", _A3(A_T,A_A,A_S10), 00012, FX2) /* CGT%I RT<-(RA>I10) */
-APUOP(M_CGTI, RI10, 0x260, "cgti", _A3(A_T,A_A,A_S10), 00012, FX2) /* CGT%I RT<-(RA>I10) */
-APUOP(M_CLGTBI, RI10, 0x2f0, "clgtbi", _A3(A_T,A_A,A_S10B), 00012, FX2) /* CLGT%I RT<-(RA>I10) */
-APUOP(M_CLGTHI, RI10, 0x2e8, "clgthi", _A3(A_T,A_A,A_S10), 00012, FX2) /* CLGT%I RT<-(RA>I10) */
-APUOP(M_CLGTI, RI10, 0x2e0, "clgti", _A3(A_T,A_A,A_S10), 00012, FX2) /* CLGT%I RT<-(RA>I10) */
-APUOP(M_CEQBI, RI10, 0x3f0, "ceqbi", _A3(A_T,A_A,A_S10B), 00012, FX2) /* CEQ%I RT<-(RA=I10) */
-APUOP(M_CEQHI, RI10, 0x3e8, "ceqhi", _A3(A_T,A_A,A_S10), 00012, FX2) /* CEQ%I RT<-(RA=I10) */
-APUOP(M_CEQI, RI10, 0x3e0, "ceqi", _A3(A_T,A_A,A_S10), 00012, FX2) /* CEQ%I RT<-(RA=I10) */
-APUOP(M_HGTI, RI10, 0x278, "hgti", _A3(A_T,A_A,A_S10), 00010, FX2) /* HaltGTI halt_if(RA>I10) */
-APUOP(M_HGTI2, RI10, 0x278, "hgti", _A2(A_A,A_S10), 00010, FX2) /* HaltGTI halt_if(RA>I10) */
-APUOP(M_HLGTI, RI10, 0x2f8, "hlgti", _A3(A_T,A_A,A_S10), 00010, FX2) /* HaltLGTI halt_if(RA>I10) */
-APUOP(M_HLGTI2, RI10, 0x2f8, "hlgti", _A2(A_A,A_S10), 00010, FX2) /* HaltLGTI halt_if(RA>I10) */
-APUOP(M_HEQI, RI10, 0x3f8, "heqi", _A3(A_T,A_A,A_S10), 00010, FX2) /* HaltEQImm halt_if(RA=I10) */
-APUOP(M_HEQI2, RI10, 0x3f8, "heqi", _A2(A_A,A_S10), 00010, FX2) /* HaltEQImm halt_if(RA=I10) */
-APUOP(M_MPYI, RI10, 0x3a0, "mpyi", _A3(A_T,A_A,A_S10), 00012, FP7) /* MPYI RT<-RA*I10 */
-APUOP(M_MPYUI, RI10, 0x3a8, "mpyui", _A3(A_T,A_A,A_S10), 00012, FP7) /* MPYUI RT<-RA*I10 */
-APUOP(M_CFLTS, RI8, 0x3b0, "cflts", _A3(A_T,A_A,A_U7A), 00012, FP7) /* CFLTS RT<-int(RA,I8) */
-APUOP(M_CFLTU, RI8, 0x3b2, "cfltu", _A3(A_T,A_A,A_U7A), 00012, FP7) /* CFLTU RT<-int(RA,I8) */
-APUOP(M_CSFLT, RI8, 0x3b4, "csflt", _A3(A_T,A_A,A_U7B), 00012, FP7) /* CSFLT RT<-flt(RA,I8) */
-APUOP(M_CUFLT, RI8, 0x3b6, "cuflt", _A3(A_T,A_A,A_U7B), 00012, FP7) /* CUFLT RT<-flt(RA,I8) */
-APUOP(M_FESD, RR, 0x3b8, "fesd", _A2(A_T,A_A), 00012, FPD) /* FESD RT<-double(RA) */
-APUOP(M_FRDS, RR, 0x3b9, "frds", _A2(A_T,A_A), 00012, FPD) /* FRDS RT<-single(RA) */
-APUOP(M_FSCRRD, RR, 0x398, "fscrrd", _A1(A_T), 00002, FPD) /* FSCRRD RT<-FP_status */
-APUOP(M_FSCRWR, RR, 0x3ba, "fscrwr", _A2(A_T,A_A), 00010, FP7) /* FSCRWR FP_status<-RA */
-APUOP(M_FSCRWR2, RR, 0x3ba, "fscrwr", _A1(A_A), 00010, FP7) /* FSCRWR FP_status<-RA */
-APUOP(M_CLZ, RR, 0x2a5, "clz", _A2(A_T,A_A), 00012, FX2) /* CLZ RT<-clz(RA) */
-APUOP(M_CNTB, RR, 0x2b4, "cntb", _A2(A_T,A_A), 00012, FXB) /* CNT RT<-pop(RA) */
-APUOP(M_XSBH, RR, 0x2b6, "xsbh", _A2(A_T,A_A), 00012, FX2) /* eXtSignBtoH RT<-sign_ext(RA) */
-APUOP(M_XSHW, RR, 0x2ae, "xshw", _A2(A_T,A_A), 00012, FX2) /* eXtSignHtoW RT<-sign_ext(RA) */
-APUOP(M_XSWD, RR, 0x2a6, "xswd", _A2(A_T,A_A), 00012, FX2) /* eXtSignWtoD RT<-sign_ext(RA) */
-APUOP(M_ROTI, RI7, 0x078, "roti", _A3(A_T,A_A,A_S7N), 00012, FX3) /* ROT%I RT<-RA<<<I7 */
-APUOP(M_ROTMI, RI7, 0x079, "rotmi", _A3(A_T,A_A,A_S7), 00012, FX3) /* ROT%MI RT<-RA<<I7 */
-APUOP(M_ROTMAI, RI7, 0x07a, "rotmai", _A3(A_T,A_A,A_S7), 00012, FX3) /* ROTMA%I RT<-RA<<I7 */
-APUOP(M_SHLI, RI7, 0x07b, "shli", _A3(A_T,A_A,A_U6), 00012, FX3) /* SHL%I RT<-RA<<I7 */
-APUOP(M_ROTHI, RI7, 0x07c, "rothi", _A3(A_T,A_A,A_S7N), 00012, FX3) /* ROT%I RT<-RA<<<I7 */
-APUOP(M_ROTHMI, RI7, 0x07d, "rothmi", _A3(A_T,A_A,A_S6), 00012, FX3) /* ROT%MI RT<-RA<<I7 */
-APUOP(M_ROTMAHI, RI7, 0x07e, "rotmahi", _A3(A_T,A_A,A_S6), 00012, FX3) /* ROTMA%I RT<-RA<<I7 */
-APUOP(M_SHLHI, RI7, 0x07f, "shlhi", _A3(A_T,A_A,A_U5), 00012, FX3) /* SHL%I RT<-RA<<I7 */
-APUOP(M_A, RR, 0x0c0, "a", _A3(A_T,A_A,A_B), 00112, FX2) /* Add% RT<-RA+RB */
-APUOP(M_AH, RR, 0x0c8, "ah", _A3(A_T,A_A,A_B), 00112, FX2) /* Add% RT<-RA+RB */
-APUOP(M_SF, RR, 0x040, "sf", _A3(A_T,A_A,A_B), 00112, FX2) /* SubFrom% RT<-RB-RA */
-APUOP(M_SFH, RR, 0x048, "sfh", _A3(A_T,A_A,A_B), 00112, FX2) /* SubFrom% RT<-RB-RA */
-APUOP(M_CGT, RR, 0x240, "cgt", _A3(A_T,A_A,A_B), 00112, FX2) /* CGT% RT<-(RA>RB) */
-APUOP(M_CGTB, RR, 0x250, "cgtb", _A3(A_T,A_A,A_B), 00112, FX2) /* CGT% RT<-(RA>RB) */
-APUOP(M_CGTH, RR, 0x248, "cgth", _A3(A_T,A_A,A_B), 00112, FX2) /* CGT% RT<-(RA>RB) */
-APUOP(M_CLGT, RR, 0x2c0, "clgt", _A3(A_T,A_A,A_B), 00112, FX2) /* CLGT% RT<-(RA>RB) */
-APUOP(M_CLGTB, RR, 0x2d0, "clgtb", _A3(A_T,A_A,A_B), 00112, FX2) /* CLGT% RT<-(RA>RB) */
-APUOP(M_CLGTH, RR, 0x2c8, "clgth", _A3(A_T,A_A,A_B), 00112, FX2) /* CLGT% RT<-(RA>RB) */
-APUOP(M_CEQ, RR, 0x3c0, "ceq", _A3(A_T,A_A,A_B), 00112, FX2) /* CEQ% RT<-(RA=RB) */
-APUOP(M_CEQB, RR, 0x3d0, "ceqb", _A3(A_T,A_A,A_B), 00112, FX2) /* CEQ% RT<-(RA=RB) */
-APUOP(M_CEQH, RR, 0x3c8, "ceqh", _A3(A_T,A_A,A_B), 00112, FX2) /* CEQ% RT<-(RA=RB) */
-APUOP(M_HGT, RR, 0x258, "hgt", _A3(A_T,A_A,A_B), 00110, FX2) /* HaltGT halt_if(RA>RB) */
-APUOP(M_HGT2, RR, 0x258, "hgt", _A2(A_A,A_B), 00110, FX2) /* HaltGT halt_if(RA>RB) */
-APUOP(M_HLGT, RR, 0x2d8, "hlgt", _A3(A_T,A_A,A_B), 00110, FX2) /* HaltLGT halt_if(RA>RB) */
-APUOP(M_HLGT2, RR, 0x2d8, "hlgt", _A2(A_A,A_B), 00110, FX2) /* HaltLGT halt_if(RA>RB) */
-APUOP(M_HEQ, RR, 0x3d8, "heq", _A3(A_T,A_A,A_B), 00110, FX2) /* HaltEQ halt_if(RA=RB) */
-APUOP(M_HEQ2, RR, 0x3d8, "heq", _A2(A_A,A_B), 00110, FX2) /* HaltEQ halt_if(RA=RB) */
-APUOP(M_FCEQ, RR, 0x3c2, "fceq", _A3(A_T,A_A,A_B), 00112, FX2) /* FCEQ RT<-(RA=RB) */
-APUOP(M_FCMEQ, RR, 0x3ca, "fcmeq", _A3(A_T,A_A,A_B), 00112, FX2) /* FCMEQ RT<-(|RA|=|RB|) */
-APUOP(M_FCGT, RR, 0x2c2, "fcgt", _A3(A_T,A_A,A_B), 00112, FX2) /* FCGT RT<-(RA<RB) */
-APUOP(M_FCMGT, RR, 0x2ca, "fcmgt", _A3(A_T,A_A,A_B), 00112, FX2) /* FCMGT RT<-(|RA|<|RB|) */
-APUOP(M_AND, RR, 0x0c1, "and", _A3(A_T,A_A,A_B), 00112, FX2) /* AND RT<-RA&RB */
-APUOP(M_NAND, RR, 0x0c9, "nand", _A3(A_T,A_A,A_B), 00112, FX2) /* NAND RT<-!(RA&RB) */
-APUOP(M_OR, RR, 0x041, "or", _A3(A_T,A_A,A_B), 00112, FX2) /* OR RT<-RA|RB */
-APUOP(M_NOR, RR, 0x049, "nor", _A3(A_T,A_A,A_B), 00112, FX2) /* NOR RT<-!(RA&RB) */
-APUOP(M_XOR, RR, 0x241, "xor", _A3(A_T,A_A,A_B), 00112, FX2) /* XOR RT<-RA^RB */
-APUOP(M_EQV, RR, 0x249, "eqv", _A3(A_T,A_A,A_B), 00112, FX2) /* EQuiValent RT<-!(RA^RB) */
-APUOP(M_ANDC, RR, 0x2c1, "andc", _A3(A_T,A_A,A_B), 00112, FX2) /* ANDComplement RT<-RA&!RB */
-APUOP(M_ORC, RR, 0x2c9, "orc", _A3(A_T,A_A,A_B), 00112, FX2) /* ORComplement RT<-RA|!RB */
-APUOP(M_ABSDB, RR, 0x053, "absdb", _A3(A_T,A_A,A_B), 00112, FXB) /* ABSoluteDiff RT<-|RA-RB| */
-APUOP(M_AVGB, RR, 0x0d3, "avgb", _A3(A_T,A_A,A_B), 00112, FXB) /* AVG% RT<-(RA+RB+1)/2 */
-APUOP(M_SUMB, RR, 0x253, "sumb", _A3(A_T,A_A,A_B), 00112, FXB) /* SUM% RT<-f(RA,RB) */
-APUOP(M_DFA, RR, 0x2cc, "dfa", _A3(A_T,A_A,A_B), 00112, FPD) /* DFAdd RT<-RA+RB */
-APUOP(M_DFM, RR, 0x2ce, "dfm", _A3(A_T,A_A,A_B), 00112, FPD) /* DFMul RT<-RA*RB */
-APUOP(M_DFS, RR, 0x2cd, "dfs", _A3(A_T,A_A,A_B), 00112, FPD) /* DFSub RT<-RA-RB */
-APUOP(M_FA, RR, 0x2c4, "fa", _A3(A_T,A_A,A_B), 00112, FP6) /* FAdd RT<-RA+RB */
-APUOP(M_FM, RR, 0x2c6, "fm", _A3(A_T,A_A,A_B), 00112, FP6) /* FMul RT<-RA*RB */
-APUOP(M_FS, RR, 0x2c5, "fs", _A3(A_T,A_A,A_B), 00112, FP6) /* FSub RT<-RA-RB */
-APUOP(M_MPY, RR, 0x3c4, "mpy", _A3(A_T,A_A,A_B), 00112, FP7) /* MPY RT<-RA*RB */
-APUOP(M_MPYH, RR, 0x3c5, "mpyh", _A3(A_T,A_A,A_B), 00112, FP7) /* MPYH RT<-(RAh*RB)<<16 */
-APUOP(M_MPYHH, RR, 0x3c6, "mpyhh", _A3(A_T,A_A,A_B), 00112, FP7) /* MPYHH RT<-RAh*RBh */
-APUOP(M_MPYHHU, RR, 0x3ce, "mpyhhu", _A3(A_T,A_A,A_B), 00112, FP7) /* MPYHHU RT<-RAh*RBh */
-APUOP(M_MPYS, RR, 0x3c7, "mpys", _A3(A_T,A_A,A_B), 00112, FP7) /* MPYS RT<-(RA*RB)>>16 */
-APUOP(M_MPYU, RR, 0x3cc, "mpyu", _A3(A_T,A_A,A_B), 00112, FP7) /* MPYU RT<-RA*RB */
-APUOP(M_FI, RR, 0x3d4, "fi", _A3(A_T,A_A,A_B), 00112, FP7) /* FInterpolate RT<-f(RA,RB) */
-APUOP(M_ROT, RR, 0x058, "rot", _A3(A_T,A_A,A_B), 00112, FX3) /* ROT% RT<-RA<<<RB */
-APUOP(M_ROTM, RR, 0x059, "rotm", _A3(A_T,A_A,A_B), 00112, FX3) /* ROT%M RT<-RA<<Rb */
-APUOP(M_ROTMA, RR, 0x05a, "rotma", _A3(A_T,A_A,A_B), 00112, FX3) /* ROTMA% RT<-RA<<Rb */
-APUOP(M_SHL, RR, 0x05b, "shl", _A3(A_T,A_A,A_B), 00112, FX3) /* SHL% RT<-RA<<Rb */
-APUOP(M_ROTH, RR, 0x05c, "roth", _A3(A_T,A_A,A_B), 00112, FX3) /* ROT% RT<-RA<<<RB */
-APUOP(M_ROTHM, RR, 0x05d, "rothm", _A3(A_T,A_A,A_B), 00112, FX3) /* ROT%M RT<-RA<<Rb */
-APUOP(M_ROTMAH, RR, 0x05e, "rotmah", _A3(A_T,A_A,A_B), 00112, FX3) /* ROTMA% RT<-RA<<Rb */
-APUOP(M_SHLH, RR, 0x05f, "shlh", _A3(A_T,A_A,A_B), 00112, FX3) /* SHL% RT<-RA<<Rb */
-APUOP(M_MPYHHA, RR, 0x346, "mpyhha", _A3(A_T,A_A,A_B), 00113, FP7) /* MPYHHA RT<-RAh*RBh+RT */
-APUOP(M_MPYHHAU, RR, 0x34e, "mpyhhau", _A3(A_T,A_A,A_B), 00113, FP7) /* MPYHHAU RT<-RAh*RBh+RT */
-APUOP(M_DFMA, RR, 0x35c, "dfma", _A3(A_T,A_A,A_B), 00113, FPD) /* DFMAdd RT<-RT+RA*RB */
-APUOP(M_DFMS, RR, 0x35d, "dfms", _A3(A_T,A_A,A_B), 00113, FPD) /* DFMSub RT<-RA*RB-RT */
-APUOP(M_DFNMS, RR, 0x35e, "dfnms", _A3(A_T,A_A,A_B), 00113, FPD) /* DFNMSub RT<-RT-RA*RB */
-APUOP(M_DFNMA, RR, 0x35f, "dfnma", _A3(A_T,A_A,A_B), 00113, FPD) /* DFNMAdd RT<-(-RT)-RA*RB */
-APUOP(M_FMA, RRR, 0x700, "fma", _A4(A_C,A_A,A_B,A_T), 02111, FP6) /* FMAdd RC<-RT+RA*RB */
-APUOP(M_FMS, RRR, 0x780, "fms", _A4(A_C,A_A,A_B,A_T), 02111, FP6) /* FMSub RC<-RA*RB-RT */
-APUOP(M_FNMS, RRR, 0x680, "fnms", _A4(A_C,A_A,A_B,A_T), 02111, FP6) /* FNMSub RC<-RT-RA*RB */
-APUOP(M_MPYA, RRR, 0x600, "mpya", _A4(A_C,A_A,A_B,A_T), 02111, FP7) /* MPYA RC<-RA*RB+RT */
-APUOP(M_SELB, RRR, 0x400, "selb", _A4(A_C,A_A,A_B,A_T), 02111, FX2) /* SELectBits RC<-RA&RT|RB&!RT */
-/* for system function call, this uses op-code of mtspr */
-APUOP(M_SYSCALL, RI7, 0x10c, "syscall", _A3(A_T,A_A,A_S7N), 00002, SPR) /* System Call */
-/*
-pseudo instruction:
-system call
-value of I9 operation
-0 halt
-1 rt[0] = open(MEM[ra[0]], ra[1])
-2 rt[0] = close(ra[0])
-3 rt[0] = read(ra[0], MEM[ra[1]], ra[2])
-4 rt[0] = write(ra[0], MEM[ra[1]], ra[2])
-5 printf(MEM[ra[0]], ra[1], ra[2], ra[3])
-42 rt[0] = clock()
-52 rt[0] = lseek(ra0, ra1, ra2)
-
-*/
-
-
-/* new multiprecision add/sub */
-APUOP(M_ADDX, RR, 0x340, "addx", _A3(A_T,A_A,A_B), 00113, FX2) /* Add_eXtended RT<-RA+RB+RT */
-APUOP(M_CG, RR, 0x0c2, "cg", _A3(A_T,A_A,A_B), 00112, FX2) /* CarryGenerate RT<-cout(RA+RB) */
-APUOP(M_CGX, RR, 0x342, "cgx", _A3(A_T,A_A,A_B), 00113, FX2) /* CarryGen_eXtd RT<-cout(RA+RB+RT) */
-APUOP(M_SFX, RR, 0x341, "sfx", _A3(A_T,A_A,A_B), 00113, FX2) /* Add_eXtended RT<-RA+RB+RT */
-APUOP(M_BG, RR, 0x042, "bg", _A3(A_T,A_A,A_B), 00112, FX2) /* CarryGenerate RT<-cout(RA+RB) */
-APUOP(M_BGX, RR, 0x343, "bgx", _A3(A_T,A_A,A_B), 00113, FX2) /* CarryGen_eXtd RT<-cout(RA+RB+RT) */
-
-/*
-
-The following ops are a subset of above except with feature bits set.
-Feature bits are bits 11-17 of the instruction:
-
- 11 - C & P feature bit
- 12 - disable interrupts
- 13 - enable interrupts
-
-*/
-APUOPFB(M_BID, RR, 0x1a8, 0x20, "bid", _A1(A_A), 00010, BR) /* BI IP<-RA */
-APUOPFB(M_BIE, RR, 0x1a8, 0x10, "bie", _A1(A_A), 00010, BR) /* BI IP<-RA */
-APUOPFB(M_BISLD, RR, 0x1a9, 0x20, "bisld", _A2(A_T,A_A), 00012, BR) /* BISL RT,IP<-IP,RA */
-APUOPFB(M_BISLE, RR, 0x1a9, 0x10, "bisle", _A2(A_T,A_A), 00012, BR) /* BISL RT,IP<-IP,RA */
-APUOPFB(M_IRETD, RR, 0x1aa, 0x20, "iretd", _A1(A_A), 00010, BR) /* IRET IP<-SRR0 */
-APUOPFB(M_IRETD2, RR, 0x1aa, 0x20, "iretd", _A0(), 00010, BR) /* IRET IP<-SRR0 */
-APUOPFB(M_IRETE, RR, 0x1aa, 0x10, "irete", _A1(A_A), 00010, BR) /* IRET IP<-SRR0 */
-APUOPFB(M_IRETE2, RR, 0x1aa, 0x10, "irete", _A0(), 00010, BR) /* IRET IP<-SRR0 */
-APUOPFB(M_BISLEDD, RR, 0x1ab, 0x20, "bisledd", _A2(A_T,A_A), 00012, BR) /* BISLED RT,IP<-IP,RA_if(ext) */
-APUOPFB(M_BISLEDE, RR, 0x1ab, 0x10, "bislede", _A2(A_T,A_A), 00012, BR) /* BISLED RT,IP<-IP,RA_if(ext) */
-APUOPFB(M_BIHNZD, RR, 0x12b, 0x20, "bihnzd", _A2(A_T,A_A), 00011, BR) /* BIHNZ IP<-RA_if(RT) */
-APUOPFB(M_BIHNZE, RR, 0x12b, 0x10, "bihnze", _A2(A_T,A_A), 00011, BR) /* BIHNZ IP<-RA_if(RT) */
-APUOPFB(M_BIHZD, RR, 0x12a, 0x20, "bihzd", _A2(A_T,A_A), 00011, BR) /* BIHZ IP<-RA_if(RT) */
-APUOPFB(M_BIHZE, RR, 0x12a, 0x10, "bihze", _A2(A_T,A_A), 00011, BR) /* BIHZ IP<-RA_if(RT) */
-APUOPFB(M_BINZD, RR, 0x129, 0x20, "binzd", _A2(A_T,A_A), 00011, BR) /* BINZ IP<-RA_if(RT) */
-APUOPFB(M_BINZE, RR, 0x129, 0x10, "binze", _A2(A_T,A_A), 00011, BR) /* BINZ IP<-RA_if(RT) */
-APUOPFB(M_BIZD, RR, 0x128, 0x20, "bizd", _A2(A_T,A_A), 00011, BR) /* BIZ IP<-RA_if(RT) */
-APUOPFB(M_BIZE, RR, 0x128, 0x10, "bize", _A2(A_T,A_A), 00011, BR) /* BIZ IP<-RA_if(RT) */
-APUOPFB(M_SYNCC, RR, 0x002, 0x40, "syncc", _A0(), 00000, BR) /* SYNCC flush_pipe */
-APUOPFB(M_HBRP, LBTI, 0x1ac, 0x40, "hbrp", _A0(), 00010, LS) /* HBR BTB[B9]<-M[Ra] */
-
-/* Synonyms required by the AS manual. */
-APUOP(M_LR, RI10, 0x020, "lr", _A2(A_T,A_A), 00012, FX2) /* OR%I RT<-RA|I10 */
-APUOP(M_BIHT, RR, 0x12b, "biht", _A2(A_T,A_A), 00011, BR) /* BIHNZ IP<-RA_if(RT) */
-APUOP(M_BIHF, RR, 0x12a, "bihf", _A2(A_T,A_A), 00011, BR) /* BIHZ IP<-RA_if(RT) */
-APUOP(M_BIT, RR, 0x129, "bit", _A2(A_T,A_A), 00011, BR) /* BINZ IP<-RA_if(RT) */
-APUOP(M_BIF, RR, 0x128, "bif", _A2(A_T,A_A), 00011, BR) /* BIZ IP<-RA_if(RT) */
-APUOPFB(M_BIHTD, RR, 0x12b, 0x20, "bihtd", _A2(A_T,A_A), 00011, BR) /* BIHNF IP<-RA_if(RT) */
-APUOPFB(M_BIHTE, RR, 0x12b, 0x10, "bihte", _A2(A_T,A_A), 00011, BR) /* BIHNF IP<-RA_if(RT) */
-APUOPFB(M_BIHFD, RR, 0x12a, 0x20, "bihfd", _A2(A_T,A_A), 00011, BR) /* BIHZ IP<-RA_if(RT) */
-APUOPFB(M_BIHFE, RR, 0x12a, 0x10, "bihfe", _A2(A_T,A_A), 00011, BR) /* BIHZ IP<-RA_if(RT) */
-APUOPFB(M_BITD, RR, 0x129, 0x20, "bitd", _A2(A_T,A_A), 00011, BR) /* BINF IP<-RA_if(RT) */
-APUOPFB(M_BITE, RR, 0x129, 0x10, "bite", _A2(A_T,A_A), 00011, BR) /* BINF IP<-RA_if(RT) */
-APUOPFB(M_BIFD, RR, 0x128, 0x20, "bifd", _A2(A_T,A_A), 00011, BR) /* BIZ IP<-RA_if(RT) */
-APUOPFB(M_BIFE, RR, 0x128, 0x10, "bife", _A2(A_T,A_A), 00011, BR) /* BIZ IP<-RA_if(RT) */
-
-/* New soma double-float insns. */
-APUOP(M_DFCEQ, RR, 0x3c3, "dfceq", _A3(A_T,A_A,A_B), 00112, FX2) /* DFCEQ RT<-(RA=RB) */
-APUOP(M_DFCMEQ, RR, 0x3cb, "dfcmeq", _A3(A_T,A_A,A_B), 00112, FX2) /* DFCMEQ RT<-(|RA|=|RB|) */
-APUOP(M_DFCGT, RR, 0x2c3, "dfcgt", _A3(A_T,A_A,A_B), 00112, FX2) /* DFCGT RT<-(RA>RB) */
-APUOP(M_DFCMGT, RR, 0x2cb, "dfcmgt", _A3(A_T,A_A,A_B), 00112, FX2) /* DFCMGT RT<-(|RA|>|RB|) */
-APUOP(M_DFTSV, RI7, 0x3bf, "dftsv", _A3(A_T,A_A,A_U7), 00012, FX2) /* DFTSV RT<-testspecial(RA,I7) */
-
-#undef _A0
-#undef _A1
-#undef _A2
-#undef _A3
-#undef _A4
diff --git a/include/opcode/spu.h b/include/opcode/spu.h
deleted file mode 100644
index c6468303b..000000000
--- a/include/opcode/spu.h
+++ /dev/null
@@ -1,125 +0,0 @@
-/* SPU ELF support for BFD.
-
- Copyright 2006, 2010 Free Software Foundation, Inc.
-
- This file is part of GDB, GAS, and the GNU binutils.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-/* These two enums are from rel_apu/common/spu_asm_format.h */
-/* definition of instruction format */
-typedef enum {
- RRR,
- RI18,
- RI16,
- RI10,
- RI8,
- RI7,
- RR,
- LBT,
- LBTI,
- IDATA,
- UNKNOWN_IFORMAT
-} spu_iformat;
-
-/* These values describe assembly instruction arguments. They indicate
- * how to encode, range checking and which relocation to use. */
-typedef enum {
- A_T, /* register at pos 0 */
- A_A, /* register at pos 7 */
- A_B, /* register at pos 14 */
- A_C, /* register at pos 21 */
- A_S, /* special purpose register at pos 7 */
- A_H, /* channel register at pos 7 */
- A_P, /* parenthesis, this has to separate regs from immediates */
- A_S3,
- A_S6,
- A_S7N,
- A_S7,
- A_U7A,
- A_U7B,
- A_S10B,
- A_S10,
- A_S11,
- A_S11I,
- A_S14,
- A_S16,
- A_S18,
- A_R18,
- A_U3,
- A_U5,
- A_U6,
- A_U7,
- A_U14,
- A_X16,
- A_U18,
- A_MAX
-} spu_aformat;
-
-enum spu_insns {
-#define APUOP(TAG,MACFORMAT,OPCODE,MNEMONIC,ASMFORMAT,DEP,PIPE) \
- TAG,
-#define APUOPFB(TAG,MACFORMAT,OPCODE,FB,MNEMONIC,ASMFORMAT,DEP,PIPE) \
- TAG,
-#include "opcode/spu-insns.h"
-#undef APUOP
-#undef APUOPFB
- M_SPU_MAX
-};
-
-struct spu_opcode
-{
- spu_iformat insn_type;
- unsigned int opcode;
- char *mnemonic;
- int arg[5];
-};
-
-#define SIGNED_EXTRACT(insn,size,pos) (((int)((insn) << (32-size-pos))) >> (32-size))
-#define UNSIGNED_EXTRACT(insn,size,pos) (((insn) >> pos) & ((1 << size)-1))
-
-#define DECODE_INSN_RT(insn) (insn & 0x7f)
-#define DECODE_INSN_RA(insn) ((insn >> 7) & 0x7f)
-#define DECODE_INSN_RB(insn) ((insn >> 14) & 0x7f)
-#define DECODE_INSN_RC(insn) ((insn >> 21) & 0x7f)
-
-#define DECODE_INSN_I10(insn) SIGNED_EXTRACT(insn,10,14)
-#define DECODE_INSN_U10(insn) UNSIGNED_EXTRACT(insn,10,14)
-
-/* For branching, immediate loads, hbr and lqa/stqa. */
-#define DECODE_INSN_I16(insn) SIGNED_EXTRACT(insn,16,7)
-#define DECODE_INSN_U16(insn) UNSIGNED_EXTRACT(insn,16,7)
-
-/* for stop */
-#define DECODE_INSN_U14(insn) UNSIGNED_EXTRACT(insn,14,0)
-
-/* For ila */
-#define DECODE_INSN_I18(insn) SIGNED_EXTRACT(insn,18,7)
-#define DECODE_INSN_U18(insn) UNSIGNED_EXTRACT(insn,18,7)
-
-/* For rotate and shift and generate control mask */
-#define DECODE_INSN_I7(insn) SIGNED_EXTRACT(insn,7,14)
-#define DECODE_INSN_U7(insn) UNSIGNED_EXTRACT(insn,7,14)
-
-/* For float <-> int conversion */
-#define DECODE_INSN_I8(insn) SIGNED_EXTRACT(insn,8,14)
-#define DECODE_INSN_U8(insn) UNSIGNED_EXTRACT(insn,8,14)
-
-/* For hbr */
-#define DECODE_INSN_I9a(insn) ((SIGNED_EXTRACT(insn,2,23) << 7) | UNSIGNED_EXTRACT(insn,7,0))
-#define DECODE_INSN_I9b(insn) ((SIGNED_EXTRACT(insn,2,14) << 7) | UNSIGNED_EXTRACT(insn,7,0))
-#define DECODE_INSN_U9a(insn) ((UNSIGNED_EXTRACT(insn,2,23) << 7) | UNSIGNED_EXTRACT(insn,7,0))
-#define DECODE_INSN_U9b(insn) ((UNSIGNED_EXTRACT(insn,2,14) << 7) | UNSIGNED_EXTRACT(insn,7,0))
-
diff --git a/include/opcode/tahoe.h b/include/opcode/tahoe.h
deleted file mode 100644
index 70fcf623a..000000000
--- a/include/opcode/tahoe.h
+++ /dev/null
@@ -1,232 +0,0 @@
-/*
- * Ported by the State University of New York at Buffalo by the Distributed
- * Computer Systems Lab, Department of Computer Science, 1991.
- */
-/* Copyright 2012 Free Software Foundation, Inc.
-
- This file is part of GDB and BINUTILS.
-
- GDB and BINUTILS are free software; you can redistribute them and/or
- modify them under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 3, or (at
- your option) any later version.
-
- GDB and BINUTILS are 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 GDB or BINUTILS; see the file COPYING3. If not, write
- to the Free Software Foundation, 51 Franklin Street - Fifth Floor,
- Boston, MA 02110-1301, USA. */
-
-
-#ifndef tahoe_opcodeT
-#define tahoe_opcodeT int
-#endif /* no tahoe_opcodeT */
-
-struct vot_wot /* tahoe opcode table: wot to do with this */
- /* particular opcode */
-{
- char * args; /* how to compile said opcode */
- tahoe_opcodeT code; /* op-code (may be > 8 bits!) */
-};
-
-struct vot /* tahoe opcode text */
-{
- char * name; /* opcode name: lowercase string [key] */
- struct vot_wot detail; /* rest of opcode table [datum] */
-};
-
-#define vot_how args
-#define vot_code code
-#define vot_detail detail
-#define vot_name name
-
-static struct vot
-votstrs[] =
-{
-{ "halt", {"", 0x00 } },
-{ "sinf", {"", 0x05 } },
-{ "ldf", {"rl", 0x06 } },
-{ "ldd", {"rq", 0x07 } },
-{ "addb2", {"rbmb", 0x08 } },
-{ "movb", {"rbwb", 0x09 } },
-{ "addw2", {"rwmw", 0x0a } },
-{ "movw", {"rwww", 0x0b } },
-{ "addl2", {"rlml", 0x0c } },
-{ "movl", {"rlwl", 0x0d } },
-{ "bbs", {"rlvlbw", 0x0e } },
-{ "nop", {"", 0x10 } },
-{ "brb", {"bb", 0x11 } },
-{ "brw", {"bw", 0x13 } },
-{ "cosf", {"", 0x15 } },
-{ "lnf", {"rl", 0x16 } },
-{ "lnd", {"rq", 0x17 } },
-{ "addb3", {"rbrbwb", 0x18 } },
-{ "cmpb", {"rbwb", 0x19 } },
-{ "addw3", {"rwrwww", 0x1a } },
-{ "cmpw", {"rwww", 0x1b } },
-{ "addl3", {"rlrlwl", 0x1c } },
-{ "cmpl", {"rlwl", 0x1d } },
-{ "bbc", {"rlvlbw", 0x1e } },
-{ "rei", {"", 0x20 } },
-{ "bneq", {"bb", 0x21 } },
-{ "bnequ", {"bb", 0x21 } },
-{ "cvtwl", {"rwwl", 0x23 } },
-{ "stf", {"wl", 0x26 } },
-{ "std", {"wq", 0x27 } },
-{ "subb2", {"rbmb", 0x28 } },
-{ "mcomb", {"rbwb", 0x29 } },
-{ "subw2", {"rwmw", 0x2a } },
-{ "mcomw", {"rwww", 0x2b } },
-{ "subl2", {"rlml", 0x2c } },
-{ "mcoml", {"rlwl", 0x2d } },
-{ "emul", {"rlrlrlwq", 0x2e } },
-{ "aoblss", {"rlmlbw", 0x2f } },
-{ "bpt", {"", 0x30 } },
-{ "beql", {"bb", 0x31 } },
-{ "beqlu", {"bb", 0x31 } },
-{ "cvtwb", {"rwwb", 0x33 } },
-{ "logf", {"", 0x35 } },
-{ "cmpf", {"rl", 0x36 } },
-{ "cmpd", {"rq", 0x37 } },
-{ "subb3", {"rbrbwb", 0x38 } },
-{ "bitb", {"rbrb", 0x39 } },
-{ "subw3", {"rwrwww", 0x3a } },
-{ "bitw", {"rwrw", 0x3b } },
-{ "subl3", {"rlrlwl", 0x3c } },
-{ "bitl", {"rlrl", 0x3d } },
-{ "ediv", {"rlrqwlwl", 0x3e } },
-{ "aobleq", {"rlmlbw", 0x3f } },
-{ "ret", {"", 0x40 } },
-{ "bgtr", {"bb", 0x41 } },
-{ "sqrtf", {"", 0x45 } },
-{ "cmpf2", {"rl", 0x46 } },
-{ "cmpd2", {"rqrq", 0x47 } },
-{ "shll", {"rbrlwl", 0x48 } },
-{ "clrb", {"wb", 0x49 } },
-{ "shlq", {"rbrqwq", 0x4a } },
-{ "clrw", {"ww", 0x4b } },
-{ "mull2", {"rlml", 0x4c } },
-{ "clrl", {"wl", 0x4d } },
-{ "shal", {"rbrlwl", 0x4e } },
-{ "bleq", {"bb", 0x51 } },
-{ "expf", {"", 0x55 } },
-{ "tstf", {"", 0x56 } },
-{ "tstd", {"", 0x57 } },
-{ "shrl", {"rbrlwl", 0x58 } },
-{ "tstb", {"rb", 0x59 } },
-{ "shrq", {"rbrqwq", 0x5a } },
-{ "tstw", {"rw", 0x5b } },
-{ "mull3", {"rlrlwl", 0x5c } },
-{ "tstl", {"rl", 0x5d } },
-{ "shar", {"rbrlwl", 0x5e } },
-{ "bbssi", {"rlmlbw", 0x5f } },
-{ "ldpctx", {"", 0x60 } },
-{ "pushd", {"", 0x67 } },
-{ "incb", {"mb", 0x69 } },
-{ "incw", {"mw", 0x6b } },
-{ "divl2", {"rlml", 0x6c } },
-{ "incl", {"ml", 0x6d } },
-{ "cvtlb", {"rlwb", 0x6f } },
-{ "svpctx", {"", 0x70 } },
-{ "jmp", {"ab", 0x71 } },
-{ "cvlf", {"rl", 0x76 } },
-{ "cvld", {"rl", 0x77 } },
-{ "decb", {"mb", 0x79 } },
-{ "decw", {"mw", 0x7b } },
-{ "divl3", {"rlrlwl", 0x7c } },
-{ "decl", {"ml", 0x7d } },
-{ "cvtlw", {"rlww", 0x7f } },
-{ "bgeq", {"bb", 0x81 } },
-{ "movs2", {"abab", 0x82 } },
-{ "cvfl", {"wl", 0x86 } },
-{ "cvdl", {"wl", 0x87 } },
-{ "orb2", {"rbmb", 0x88 } },
-{ "cvtbl", {"rbwl", 0x89 } },
-{ "orw2", {"rwmw", 0x8a } },
-{ "bispsw", {"rw", 0x8b } },
-{ "orl2", {"rlml", 0x8c } },
-{ "adwc", {"rlml", 0x8d } },
-{ "adda", {"rlml", 0x8e } },
-{ "blss", {"bb", 0x91 } },
-{ "cmps2", {"abab", 0x92 } },
-{ "ldfd", {"rl", 0x97 } },
-{ "orb3", {"rbrbwb", 0x98 } },
-{ "cvtbw", {"rbww", 0x99 } },
-{ "orw3", {"rwrwww", 0x9a } },
-{ "bicpsw", {"rw", 0x9b } },
-{ "orl3", {"rlrlwl", 0x9c } },
-{ "sbwc", {"rlml", 0x9d } },
-{ "suba", {"rlml", 0x9e } },
-{ "bgtru", {"bb", 0xa1 } },
-{ "cvdf", {"", 0xa6 } },
-{ "andb2", {"rbmb", 0xa8 } },
-{ "movzbl", {"rbwl", 0xa9 } },
-{ "andw2", {"rwmw", 0xaa } },
-{ "loadr", {"rwal", 0xab } },
-{ "andl2", {"rlml", 0xac } },
-{ "mtpr", {"rlrl", 0xad } },
-{ "ffs", {"rlwl", 0xae } },
-{ "blequ", {"bb", 0xb1 } },
-{ "negf", {"", 0xb6 } },
-{ "negd", {"", 0xb7 } },
-{ "andb3", {"rbrbwb", 0xb8 } },
-{ "movzbw", {"rbww", 0xb9 } },
-{ "andw3", {"rwrwww", 0xba } },
-{ "storer", {"rwal", 0xbb } },
-{ "andl3", {"rlrlwl", 0xbc } },
-{ "mfpr", {"rlwl", 0xbd } },
-{ "ffc", {"rlwl", 0xbe } },
-{ "calls", {"rbab", 0xbf } },
-{ "prober", {"rbabrl", 0xc0 } },
-{ "bvc", {"bb", 0xc1 } },
-{ "movs3", {"ababrw", 0xc2 } },
-{ "movzwl", {"rwwl", 0xc3 } },
-{ "addf", {"rl", 0xc6 } },
-{ "addd", {"rq", 0xc7 } },
-{ "xorb2", {"rbmb", 0xc8 } },
-{ "movob", {"rbwb", 0xc9 } },
-{ "xorw2", {"rwmw", 0xca } },
-{ "movow", {"rwww", 0xcb } },
-{ "xorl2", {"rlml", 0xcc } },
-{ "movpsl", {"wl", 0xcd } },
-{ "kcall", {"rw", 0xcf } },
-{ "probew", {"rbabrl", 0xd0 } },
-{ "bvs", {"bb", 0xd1 } },
-{ "cmps3", {"ababrw", 0xd2 } },
-{ "subf", {"rq", 0xd6 } },
-{ "subd", {"rq", 0xd7 } },
-{ "xorb3", {"rbrbwb", 0xd8 } },
-{ "pushb", {"rb", 0xd9 } },
-{ "xorw3", {"rwrwww", 0xda } },
-{ "pushw", {"rw", 0xdb } },
-{ "xorl3", {"rlrlwl", 0xdc } },
-{ "pushl", {"rl", 0xdd } },
-{ "insque", {"abab", 0xe0 } },
-{ "bcs", {"bb", 0xe1 } },
-{ "bgequ", {"bb", 0xe1 } },
-{ "mulf", {"rq", 0xe6 } },
-{ "muld", {"rq", 0xe7 } },
-{ "mnegb", {"rbwb", 0xe8 } },
-{ "movab", {"abwl", 0xe9 } },
-{ "mnegw", {"rwww", 0xea } },
-{ "movaw", {"awwl", 0xeb } },
-{ "mnegl", {"rlwl", 0xec } },
-{ "moval", {"alwl", 0xed } },
-{ "remque", {"ab", 0xf0 } },
-{ "bcc", {"bb", 0xf1 } },
-{ "blssu", {"bb", 0xf1 } },
-{ "divf", {"rq", 0xf6 } },
-{ "divd", {"rq", 0xf7 } },
-{ "movblk", {"alalrw", 0xf8 } },
-{ "pushab", {"ab", 0xf9 } },
-{ "pushaw", {"aw", 0xfb } },
-{ "casel", {"rlrlrl", 0xfc } },
-{ "pushal", {"al", 0xfd } },
-{ "callf", {"rbab", 0xfe } },
-{ "" , "" } /* empty is end sentinel */
-
-};
diff --git a/include/opcode/tic30.h b/include/opcode/tic30.h
deleted file mode 100644
index 3f4d30715..000000000
--- a/include/opcode/tic30.h
+++ /dev/null
@@ -1,691 +0,0 @@
-/* tic30.h -- Header file for TI TMS320C30 opcode table
- Copyright 1998, 2005, 2009, 2010 Free Software Foundation, Inc.
- Contributed by Steven Haworth (steve@pm.cse.rmit.edu.au)
-
- This file is part of GDB, GAS, and the GNU binutils.
-
- GDB, GAS, and the GNU binutils are free software; you can redistribute
- them and/or modify them under the terms of the GNU General Public
- License as published by the Free Software Foundation; either version 3,
- or (at your option) any later version.
-
- GDB, GAS, and the GNU binutils are distributed in the hope that they
- 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 file; see the file COPYING3. If not, write to the Free
- Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
- 02110-1301, USA. */
-
-/* FIXME: The opcode table should be in opcodes/tic30-opc.c, not in a
- header file. */
-
-#ifndef _TMS320_H_
-#define _TMS320_H_
-
-struct _register
-{
- char *name;
- unsigned char opcode;
- unsigned char regtype;
-};
-
-typedef struct _register reg;
-
-#define REG_Rn 0x01
-#define REG_ARn 0x02
-#define REG_DP 0x03
-#define REG_OTHER 0x04
-
-static const reg tic30_regtab[] = {
- { "r0", 0x00, REG_Rn },
- { "r1", 0x01, REG_Rn },
- { "r2", 0x02, REG_Rn },
- { "r3", 0x03, REG_Rn },
- { "r4", 0x04, REG_Rn },
- { "r5", 0x05, REG_Rn },
- { "r6", 0x06, REG_Rn },
- { "r7", 0x07, REG_Rn },
- { "ar0",0x08, REG_ARn },
- { "ar1",0x09, REG_ARn },
- { "ar2",0x0A, REG_ARn },
- { "ar3",0x0B, REG_ARn },
- { "ar4",0x0C, REG_ARn },
- { "ar5",0x0D, REG_ARn },
- { "ar6",0x0E, REG_ARn },
- { "ar7",0x0F, REG_ARn },
- { "dp", 0x10, REG_DP },
- { "ir0",0x11, REG_OTHER },
- { "ir1",0x12, REG_OTHER },
- { "bk", 0x13, REG_OTHER },
- { "sp", 0x14, REG_OTHER },
- { "st", 0x15, REG_OTHER },
- { "ie", 0x16, REG_OTHER },
- { "if", 0x17, REG_OTHER },
- { "iof",0x18, REG_OTHER },
- { "rs", 0x19, REG_OTHER },
- { "re", 0x1A, REG_OTHER },
- { "rc", 0x1B, REG_OTHER },
- { "R0", 0x00, REG_Rn },
- { "R1", 0x01, REG_Rn },
- { "R2", 0x02, REG_Rn },
- { "R3", 0x03, REG_Rn },
- { "R4", 0x04, REG_Rn },
- { "R5", 0x05, REG_Rn },
- { "R6", 0x06, REG_Rn },
- { "R7", 0x07, REG_Rn },
- { "AR0",0x08, REG_ARn },
- { "AR1",0x09, REG_ARn },
- { "AR2",0x0A, REG_ARn },
- { "AR3",0x0B, REG_ARn },
- { "AR4",0x0C, REG_ARn },
- { "AR5",0x0D, REG_ARn },
- { "AR6",0x0E, REG_ARn },
- { "AR7",0x0F, REG_ARn },
- { "DP", 0x10, REG_DP },
- { "IR0",0x11, REG_OTHER },
- { "IR1",0x12, REG_OTHER },
- { "BK", 0x13, REG_OTHER },
- { "SP", 0x14, REG_OTHER },
- { "ST", 0x15, REG_OTHER },
- { "IE", 0x16, REG_OTHER },
- { "IF", 0x17, REG_OTHER },
- { "IOF",0x18, REG_OTHER },
- { "RS", 0x19, REG_OTHER },
- { "RE", 0x1A, REG_OTHER },
- { "RC", 0x1B, REG_OTHER },
- { "", 0, 0 }
-};
-
-static const reg *const tic30_regtab_end
- = tic30_regtab + sizeof(tic30_regtab)/sizeof(tic30_regtab[0]);
-
-/* Indirect Addressing Modes Modification Fields */
-/* Indirect Addressing with Displacement */
-#define PreDisp_Add 0x00
-#define PreDisp_Sub 0x01
-#define PreDisp_Add_Mod 0x02
-#define PreDisp_Sub_Mod 0x03
-#define PostDisp_Add_Mod 0x04
-#define PostDisp_Sub_Mod 0x05
-#define PostDisp_Add_Circ 0x06
-#define PostDisp_Sub_Circ 0x07
-/* Indirect Addressing with Index Register IR0 */
-#define PreIR0_Add 0x08
-#define PreIR0_Sub 0x09
-#define PreIR0_Add_Mod 0x0A
-#define PreIR0_Sub_Mod 0x0B
-#define PostIR0_Add_Mod 0x0C
-#define PostIR0_Sub_Mod 0x0D
-#define PostIR0_Add_Circ 0x0E
-#define PostIR0_Sub_Circ 0x0F
-/* Indirect Addressing with Index Register IR1 */
-#define PreIR1_Add 0x10
-#define PreIR1_Sub 0x11
-#define PreIR1_Add_Mod 0x12
-#define PreIR1_Sub_Mod 0x13
-#define PostIR1_Add_Mod 0x14
-#define PostIR1_Sub_Mod 0x15
-#define PostIR1_Add_Circ 0x16
-#define PostIR1_Sub_Circ 0x17
-/* Indirect Addressing (Special Cases) */
-#define IndirectOnly 0x18
-#define PostIR0_Add_BitRev 0x19
-
-typedef struct {
- char *syntax;
- unsigned char modfield;
- unsigned char displacement;
-} ind_addr_type;
-
-#define IMPLIED_DISP 0x01
-#define DISP_REQUIRED 0x02
-#define NO_DISP 0x03
-
-static const ind_addr_type tic30_indaddr_tab[] = {
- { "*+ar", PreDisp_Add, IMPLIED_DISP },
- { "*-ar", PreDisp_Sub, IMPLIED_DISP },
- { "*++ar", PreDisp_Add_Mod, IMPLIED_DISP },
- { "*--ar", PreDisp_Sub_Mod, IMPLIED_DISP },
- { "*ar++", PostDisp_Add_Mod, IMPLIED_DISP },
- { "*ar--", PostDisp_Sub_Mod, IMPLIED_DISP },
- { "*ar++%", PostDisp_Add_Circ, IMPLIED_DISP },
- { "*ar--%", PostDisp_Sub_Circ, IMPLIED_DISP },
- { "*+ar()", PreDisp_Add, DISP_REQUIRED },
- { "*-ar()", PreDisp_Sub, DISP_REQUIRED },
- { "*++ar()", PreDisp_Add_Mod, DISP_REQUIRED },
- { "*--ar()", PreDisp_Sub_Mod, DISP_REQUIRED },
- { "*ar++()", PostDisp_Add_Mod, DISP_REQUIRED },
- { "*ar--()", PostDisp_Sub_Mod, DISP_REQUIRED },
- { "*ar++()%", PostDisp_Add_Circ, DISP_REQUIRED },
- { "*ar--()%", PostDisp_Sub_Circ, DISP_REQUIRED },
- { "*+ar(ir0)", PreIR0_Add, NO_DISP },
- { "*-ar(ir0)", PreIR0_Sub, NO_DISP },
- { "*++ar(ir0)", PreIR0_Add_Mod, NO_DISP },
- { "*--ar(ir0)", PreIR0_Sub_Mod, NO_DISP },
- { "*ar++(ir0)", PostIR0_Add_Mod, NO_DISP },
- { "*ar--(ir0)", PostIR0_Sub_Mod, NO_DISP },
- { "*ar++(ir0)%",PostIR0_Add_Circ, NO_DISP },
- { "*ar--(ir0)%",PostIR0_Sub_Circ, NO_DISP },
- { "*+ar(ir1)", PreIR1_Add, NO_DISP },
- { "*-ar(ir1)", PreIR1_Sub, NO_DISP },
- { "*++ar(ir1)", PreIR1_Add_Mod, NO_DISP },
- { "*--ar(ir1)", PreIR1_Sub_Mod, NO_DISP },
- { "*ar++(ir1)", PostIR1_Add_Mod, NO_DISP },
- { "*ar--(ir1)", PostIR1_Sub_Mod, NO_DISP },
- { "*ar++(ir1)%",PostIR1_Add_Circ, NO_DISP },
- { "*ar--(ir1)%",PostIR1_Sub_Circ, NO_DISP },
- { "*ar", IndirectOnly, NO_DISP },
- { "*ar++(ir0)b",PostIR0_Add_BitRev, NO_DISP },
- { "", 0,0 }
-};
-
-static const ind_addr_type *const tic30_indaddrtab_end
- = tic30_indaddr_tab + sizeof(tic30_indaddr_tab)/sizeof(tic30_indaddr_tab[0]);
-
-/* Possible operand types */
-/* Register types */
-#define Rn 0x0001
-#define ARn 0x0002
-#define DPReg 0x0004
-#define OtherReg 0x0008
-/* Addressing mode types */
-#define Direct 0x0010
-#define Indirect 0x0020
-#define Imm16 0x0040
-#define Disp 0x0080
-#define Imm24 0x0100
-#define Abs24 0x0200
-/* 3 operand addressing mode types */
-#define op3T1 0x0400
-#define op3T2 0x0800
-/* Interrupt vector */
-#define IVector 0x1000
-/* Not required */
-#define NotReq 0x2000
-
-#define GAddr1 Rn | Direct | Indirect | Imm16
-#define GAddr2 GAddr1 | AllReg
-#define TAddr1 op3T1 | Rn | Indirect
-#define TAddr2 op3T2 | Rn | Indirect
-#define Reg Rn | ARn
-#define AllReg Reg | DPReg | OtherReg
-
-typedef struct _template
-{
- char *name;
- unsigned int operands; /* how many operands */
- unsigned int base_opcode; /* base_opcode is the fundamental opcode byte */
- /* the bits in opcode_modifier are used to generate the final opcode from
- the base_opcode. These bits also are used to detect alternate forms of
- the same instruction */
- unsigned int opcode_modifier;
-
- /* opcode_modifier bits: */
-#define AddressMode 0x00600000
-#define PCRel 0x02000000
-#define StackOp 0x001F0000
-#define Rotate StackOp
-
- /* operand_types[i] describes the type of operand i. This is made
- by OR'ing together all of the possible type masks. (e.g.
- 'operand_types[i] = Reg|Imm' specifies that operand i can be
- either a register or an immediate operand */
- unsigned int operand_types[3];
- /* This defines the number type of an immediate argument to an instruction. */
- int imm_arg_type;
-#define Imm_None 0
-#define Imm_Float 1
-#define Imm_SInt 2
-#define Imm_UInt 3
-}
-insn_template;
-
-static const insn_template tic30_optab[] = {
- { "absf" ,2,0x00000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float },
- { "absi" ,2,0x00800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt },
- { "addc" ,2,0x01000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt },
- { "addc3" ,3,0x20000000,AddressMode, { TAddr1|AllReg, TAddr2|AllReg, AllReg }, Imm_None },
- { "addf" ,2,0x01800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float },
- { "addf3" ,3,0x20800000,AddressMode, { TAddr1, TAddr2, Rn }, Imm_None },
- { "addi" ,2,0x02000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt },
- { "addi3" ,3,0x21000000,AddressMode, { TAddr1|AllReg, TAddr2|AllReg, AllReg }, Imm_None },
- { "and" ,2,0x02800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_UInt },
- { "and3" ,3,0x21800000,AddressMode, { TAddr1|AllReg, TAddr2|AllReg, AllReg }, Imm_None },
- { "andn" ,2,0x03000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_UInt },
- { "andn3" ,3,0x22000000,AddressMode, { TAddr1|AllReg, TAddr2|AllReg, AllReg }, Imm_None },
- { "ash" ,2,0x03800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt },
- { "ash3" ,3,0x22800000,AddressMode, { TAddr1|AllReg, TAddr2|AllReg, AllReg }, Imm_None },
- { "b" ,1,0x68000000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "bu" ,1,0x68000000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "blo" ,1,0x68010000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "bls" ,1,0x68020000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "bhi" ,1,0x68030000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "bhs" ,1,0x68040000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "beq" ,1,0x68050000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "bne" ,1,0x68060000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "blt" ,1,0x68070000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "ble" ,1,0x68080000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "bgt" ,1,0x68090000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "bge" ,1,0x680A0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "bz" ,1,0x68050000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "bnz" ,1,0x68060000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "bp" ,1,0x68090000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "bn" ,1,0x68070000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "bnn" ,1,0x680A0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "bnv" ,1,0x680C0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "bv" ,1,0x680D0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "bnuf" ,1,0x680E0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "buf" ,1,0x680F0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "bnc" ,1,0x68040000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "bc" ,1,0x68010000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "bnlv" ,1,0x68100000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "blv" ,1,0x68110000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "bnluf" ,1,0x68120000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "bluf" ,1,0x68130000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "bzuf" ,1,0x68140000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "bd" ,1,0x68200000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "bud" ,1,0x68200000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "blod" ,1,0x68210000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "blsd" ,1,0x68220000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "bhid" ,1,0x68230000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "bhsd" ,1,0x68240000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "beqd" ,1,0x68250000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "bned" ,1,0x68260000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "bltd" ,1,0x68270000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "bled" ,1,0x68280000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "bgtd" ,1,0x68290000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "bged" ,1,0x682A0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "bzd" ,1,0x68250000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "bnzd" ,1,0x68260000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "bpd" ,1,0x68290000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "bnd" ,1,0x68270000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "bnnd" ,1,0x682A0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "bnvd" ,1,0x682C0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "bvd" ,1,0x682D0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "bnufd" ,1,0x682E0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "bufd" ,1,0x682F0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "bncd" ,1,0x68240000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "bcd" ,1,0x68210000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "bnlvd" ,1,0x68300000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "blvd" ,1,0x68310000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "bnlufd" ,1,0x68320000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "blufd" ,1,0x68330000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "bzufd" ,1,0x68340000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None },
- { "br" ,1,0x60000000,0, { Imm24, 0, 0 }, Imm_UInt },
- { "brd" ,1,0x61000000,0, { Imm24, 0, 0 }, Imm_UInt },
- { "call" ,1,0x62000000,0, { Imm24, 0, 0 }, Imm_UInt },
- { "callu" ,1,0x70000000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt },
- { "calllo" ,1,0x70010000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt },
- { "callls" ,1,0x70020000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt },
- { "callhi" ,1,0x70030000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt },
- { "callhs" ,1,0x70040000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt },
- { "calleq" ,1,0x70050000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt },
- { "callne" ,1,0x70060000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt },
- { "calllt" ,1,0x70070000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt },
- { "callle" ,1,0x70080000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt },
- { "callgt" ,1,0x70090000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt },
- { "callge" ,1,0x700A0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt },
- { "callz" ,1,0x70050000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt },
- { "callnz" ,1,0x70060000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt },
- { "callp" ,1,0x70090000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt },
- { "calln" ,1,0x70070000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt },
- { "callnn" ,1,0x700A0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt },
- { "callnv" ,1,0x700C0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt },
- { "callv" ,1,0x700D0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt },
- { "callnuf",1,0x700E0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt },
- { "calluf" ,1,0x700F0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt },
- { "callnc" ,1,0x70040000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt },
- { "callc" ,1,0x70010000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt },
- { "callnlv",1,0x70100000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt },
- { "calllv" ,1,0x70110000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt },
- { "callnluf",1,0x70120000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt },
- { "callluf",1,0x70130000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt },
- { "callzuf",1,0x70140000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt },
- { "cmpf" ,2,0x04000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float },
- { "cmpf3" ,2,0x23000000,AddressMode, { TAddr1, TAddr2, 0 }, Imm_None },
- { "cmpi" ,2,0x04800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt },
- { "cmpi3" ,2,0x23800000,AddressMode, { TAddr1|AllReg, TAddr2|AllReg, 0 }, Imm_None },
- { "db" ,2,0x6C000000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dbu" ,2,0x6C000000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dblo" ,2,0x6C010000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dbls" ,2,0x6C020000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dbhi" ,2,0x6C030000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dbhs" ,2,0x6C040000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dbeq" ,2,0x6C050000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dbne" ,2,0x6C060000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dblt" ,2,0x6C070000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dble" ,2,0x6C080000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dbgt" ,2,0x6C090000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dbge" ,2,0x6C0A0000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dbz" ,2,0x6C050000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dbnz" ,2,0x6C060000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dbp" ,2,0x6C090000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dbn" ,2,0x6C070000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dbnn" ,2,0x6C0A0000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dbnv" ,2,0x6C0C0000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dbv" ,2,0x6C0D0000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dbnuf" ,2,0x6C0E0000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dbuf" ,2,0x6C0F0000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dbnc" ,2,0x6C040000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dbc" ,2,0x6C010000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dbnlv" ,2,0x6C100000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dblv" ,2,0x6C110000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dbnluf" ,2,0x6C120000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dbluf" ,2,0x6C130000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dbzuf" ,2,0x6C140000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dbd" ,2,0x6C200000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dbud" ,2,0x6C200000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dblod" ,2,0x6C210000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dblsd" ,2,0x6C220000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dbhid" ,2,0x6C230000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dbhsd" ,2,0x6C240000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dbeqd" ,2,0x6C250000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dbned" ,2,0x6C260000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dbltd" ,2,0x6C270000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dbled" ,2,0x6C280000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dbgtd" ,2,0x6C290000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dbged" ,2,0x6C2A0000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dbzd" ,2,0x6C250000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dbnzd" ,2,0x6C260000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dbpd" ,2,0x6C290000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dbnd" ,2,0x6C270000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dbnnd" ,2,0x6C2A0000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dbnvd" ,2,0x6C2C0000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dbvd" ,2,0x6C2D0000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dbnufd" ,2,0x6C2E0000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dbufd" ,2,0x6C2F0000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dbncd" ,2,0x6C240000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dbcd" ,2,0x6C210000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dbnlvd" ,2,0x6C300000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dblvd" ,2,0x6C310000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dbnlufd",2,0x6C320000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dblufd" ,2,0x6C330000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "dbzufd" ,2,0x6C340000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None },
- { "fix" ,2,0x05000000,AddressMode, { GAddr1, AllReg, 0 }, Imm_Float },
- { "float" ,2,0x05800000,AddressMode, { GAddr2, Rn, 0 }, Imm_SInt },
- { "iack" ,1,0x1B000000,AddressMode, { Direct|Indirect, 0, 0 }, Imm_None },
- { "idle" ,0,0x06000000,0, { 0, 0, 0 }, Imm_None },
- { "idle2" ,0,0x06000001,0, { 0, 0, 0 }, Imm_None }, /* LC31 Only */
- { "lde" ,2,0x06800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float },
- { "ldf" ,2,0x07000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float },
- { "ldfu" ,2,0x40000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float },
- { "ldflo" ,2,0x40800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float },
- { "ldfls" ,2,0x41000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float },
- { "ldfhi" ,2,0x41800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float },
- { "ldfhs" ,2,0x42000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float },
- { "ldfeq" ,2,0x42800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float },
- { "ldfne" ,2,0x43000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float },
- { "ldflt" ,2,0x43800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float },
- { "ldfle" ,2,0x44000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float },
- { "ldfgt" ,2,0x44800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float },
- { "ldfge" ,2,0x45000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float },
- { "ldfz" ,2,0x42800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float },
- { "ldfnz" ,2,0x43000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float },
- { "ldfp" ,2,0x44800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float },
- { "ldfn" ,2,0x43800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float },
- { "ldfnn" ,2,0x45000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float },
- { "ldfnv" ,2,0x46000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float },
- { "ldfv" ,2,0x46800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float },
- { "ldfnuf" ,2,0x47000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float },
- { "ldfuf" ,2,0x47800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float },
- { "ldfnc" ,2,0x42000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float },
- { "ldfc" ,2,0x40800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float },
- { "ldfnlv" ,2,0x48000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float },
- { "ldflv" ,2,0x48800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float },
- { "ldfnluf",2,0x49000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float },
- { "ldfluf" ,2,0x49800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float },
- { "ldfzuf" ,2,0x4A000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float },
- { "ldfi" ,2,0x07800000,AddressMode, { Direct|Indirect, Rn, 0 }, Imm_None },
- { "ldi" ,2,0x08000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt },
- { "ldiu" ,2,0x50000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt },
- { "ldilo" ,2,0x50800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt },
- { "ldils" ,2,0x51000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt },
- { "ldihi" ,2,0x51800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt },
- { "ldihs" ,2,0x52000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt },
- { "ldieq" ,2,0x52800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt },
- { "ldine" ,2,0x53000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt },
- { "ldilt" ,2,0x53800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt },
- { "ldile" ,2,0x54000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt },
- { "ldigt" ,2,0x54800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt },
- { "ldige" ,2,0x55000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt },
- { "ldiz" ,2,0x52800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt },
- { "ldinz" ,2,0x53000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt },
- { "ldip" ,2,0x54800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt },
- { "ldin" ,2,0x53800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt },
- { "ldinn" ,2,0x55000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt },
- { "ldinv" ,2,0x56000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt },
- { "ldiv" ,2,0x56800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt },
- { "ldinuf" ,2,0x57000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt },
- { "ldiuf" ,2,0x57800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt },
- { "ldinc" ,2,0x52000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt },
- { "ldic" ,2,0x50800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt },
- { "ldinlv" ,2,0x58000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt },
- { "ldilv" ,2,0x58800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt },
- { "ldinluf",2,0x59000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt },
- { "ldiluf" ,2,0x59800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt },
- { "ldizuf" ,2,0x5A000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt },
- { "ldii" ,2,0x08800000,AddressMode, { Direct|Indirect, AllReg, 0 }, Imm_None },
- { "ldm" ,2,0x09000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float },
- { "ldp" ,2,0x08700000,0, { Abs24|Direct, DPReg|NotReq, 0 }, Imm_UInt },
- { "lopower",0,0x10800001,0, { 0, 0, 0 }, Imm_None }, /* LC31 Only */
- { "lsh" ,2,0x09800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_UInt },
- { "lsh3" ,3,0x24000000,AddressMode, { TAddr1|AllReg, TAddr2|AllReg, AllReg }, Imm_None },
- { "maxspeed",0,0x10800000,0, { 0, 0, 0 }, Imm_None }, /* LC31 Only */
- { "mpyf" ,2,0x0A000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float },
- { "mpyf3" ,3,0x24800000,AddressMode, { TAddr1, TAddr2, Rn }, Imm_None },
- { "mpyi" ,2,0x0A800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt },
- { "mpyi3" ,3,0x25000000,AddressMode, { TAddr1|AllReg, TAddr2|AllReg, AllReg }, Imm_None },
- { "negb" ,2,0x0B000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt },
- { "negf" ,2,0x0B800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float },
- { "negi" ,2,0x0C000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt },
- { "nop" ,1,0x0C800000,AddressMode, { AllReg|Indirect|NotReq, 0, 0 }, Imm_None },
- { "norm" ,2,0x0D000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, /*Check another source*/
- { "not" ,2,0x0D800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_UInt },
- { "or" ,2,0x10000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_UInt },
- { "or3" ,3,0x25800000,AddressMode, { TAddr1|AllReg, TAddr2|AllReg, AllReg }, Imm_None },
- { "pop" ,1,0x0E200000,StackOp, { AllReg, 0, 0 }, Imm_None },
- { "popf" ,1,0x0EA00000,StackOp, { Rn, 0, 0 }, Imm_None },
- { "push" ,1,0x0F200000,StackOp, { AllReg, 0, 0 }, Imm_None },
- { "pushf" ,1,0x0FA00000,StackOp, { Rn, 0, 0 }, Imm_None },
- { "reti" ,0,0x78000000,0, { 0, 0, 0 }, Imm_None },
- { "retiu" ,0,0x78000000,0, { 0, 0, 0 }, Imm_None },
- { "retilo" ,0,0x78010000,0, { 0, 0, 0 }, Imm_None },
- { "retils" ,0,0x78020000,0, { 0, 0, 0 }, Imm_None },
- { "retihi" ,0,0x78030000,0, { 0, 0, 0 }, Imm_None },
- { "retihs" ,0,0x78040000,0, { 0, 0, 0 }, Imm_None },
- { "retieq" ,0,0x78050000,0, { 0, 0, 0 }, Imm_None },
- { "retine" ,0,0x78060000,0, { 0, 0, 0 }, Imm_None },
- { "retilt" ,0,0x78070000,0, { 0, 0, 0 }, Imm_None },
- { "retile" ,0,0x78080000,0, { 0, 0, 0 }, Imm_None },
- { "retigt" ,0,0x78090000,0, { 0, 0, 0 }, Imm_None },
- { "retige" ,0,0x780A0000,0, { 0, 0, 0 }, Imm_None },
- { "retiz" ,0,0x78050000,0, { 0, 0, 0 }, Imm_None },
- { "retinz" ,0,0x78060000,0, { 0, 0, 0 }, Imm_None },
- { "retip" ,0,0x78090000,0, { 0, 0, 0 }, Imm_None },
- { "retin" ,0,0x78070000,0, { 0, 0, 0 }, Imm_None },
- { "retinn" ,0,0x780A0000,0, { 0, 0, 0 }, Imm_None },
- { "retinv" ,0,0x780C0000,0, { 0, 0, 0 }, Imm_None },
- { "retiv" ,0,0x780D0000,0, { 0, 0, 0 }, Imm_None },
- { "retinuf",0,0x780E0000,0, { 0, 0, 0 }, Imm_None },
- { "retiuf" ,0,0x780F0000,0, { 0, 0, 0 }, Imm_None },
- { "retinc" ,0,0x78040000,0, { 0, 0, 0 }, Imm_None },
- { "retic" ,0,0x78010000,0, { 0, 0, 0 }, Imm_None },
- { "retinlv",0,0x78100000,0, { 0, 0, 0 }, Imm_None },
- { "retilv" ,0,0x78110000,0, { 0, 0, 0 }, Imm_None },
- { "retinluf",0,0x78120000,0, { 0, 0, 0 }, Imm_None },
- { "retiluf",0,0x78130000,0, { 0, 0, 0 }, Imm_None },
- { "retizuf",0,0x78140000,0, { 0, 0, 0 }, Imm_None },
- { "rets" ,0,0x78800000,0, { 0, 0, 0 }, Imm_None },
- { "retsu" ,0,0x78800000,0, { 0, 0, 0 }, Imm_None },
- { "retslo" ,0,0x78810000,0, { 0, 0, 0 }, Imm_None },
- { "retsls" ,0,0x78820000,0, { 0, 0, 0 }, Imm_None },
- { "retshi" ,0,0x78830000,0, { 0, 0, 0 }, Imm_None },
- { "retshs" ,0,0x78840000,0, { 0, 0, 0 }, Imm_None },
- { "retseq" ,0,0x78850000,0, { 0, 0, 0 }, Imm_None },
- { "retsne" ,0,0x78860000,0, { 0, 0, 0 }, Imm_None },
- { "retslt" ,0,0x78870000,0, { 0, 0, 0 }, Imm_None },
- { "retsle" ,0,0x78880000,0, { 0, 0, 0 }, Imm_None },
- { "retsgt" ,0,0x78890000,0, { 0, 0, 0 }, Imm_None },
- { "retsge" ,0,0x788A0000,0, { 0, 0, 0 }, Imm_None },
- { "retsz" ,0,0x78850000,0, { 0, 0, 0 }, Imm_None },
- { "retsnz" ,0,0x78860000,0, { 0, 0, 0 }, Imm_None },
- { "retsp" ,0,0x78890000,0, { 0, 0, 0 }, Imm_None },
- { "retsn" ,0,0x78870000,0, { 0, 0, 0 }, Imm_None },
- { "retsnn" ,0,0x788A0000,0, { 0, 0, 0 }, Imm_None },
- { "retsnv" ,0,0x788C0000,0, { 0, 0, 0 }, Imm_None },
- { "retsv" ,0,0x788D0000,0, { 0, 0, 0 }, Imm_None },
- { "retsnuf",0,0x788E0000,0, { 0, 0, 0 }, Imm_None },
- { "retsuf" ,0,0x788F0000,0, { 0, 0, 0 }, Imm_None },
- { "retsnc" ,0,0x78840000,0, { 0, 0, 0 }, Imm_None },
- { "retsc" ,0,0x78810000,0, { 0, 0, 0 }, Imm_None },
- { "retsnlv",0,0x78900000,0, { 0, 0, 0 }, Imm_None },
- { "retslv" ,0,0x78910000,0, { 0, 0, 0 }, Imm_None },
- { "retsnluf",0,0x78920000,0, { 0, 0, 0 }, Imm_None },
- { "retsluf",0,0x78930000,0, { 0, 0, 0 }, Imm_None },
- { "retszuf",0,0x78940000,0, { 0, 0, 0 }, Imm_None },
- { "rnd" ,2,0x11000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float },
- { "rol" ,1,0x11E00001,Rotate, { AllReg, 0, 0 }, Imm_None },
- { "rolc" ,1,0x12600001,Rotate, { AllReg, 0, 0 }, Imm_None },
- { "ror" ,1,0x12E0FFFF,Rotate, { AllReg, 0, 0 }, Imm_None },
- { "rorc" ,1,0x1360FFFF,Rotate, { AllReg, 0, 0 }, Imm_None },
- { "rptb" ,1,0x64000000,0, { Imm24, 0, 0 }, Imm_UInt },
- { "rpts" ,1,0x139B0000,AddressMode, { GAddr2, 0, 0 }, Imm_UInt },
- { "sigi" ,0,0x16000000,0, { 0, 0, 0 }, Imm_None },
- { "stf" ,2,0x14000000,AddressMode, { Rn, Direct|Indirect, 0 }, Imm_Float },
- { "stfi" ,2,0x14800000,AddressMode, { Rn, Direct|Indirect, 0 }, Imm_Float },
- { "sti" ,2,0x15000000,AddressMode, { AllReg, Direct|Indirect, 0 }, Imm_SInt },
- { "stii" ,2,0x15800000,AddressMode, { AllReg, Direct|Indirect, 0 }, Imm_SInt },
- { "subb" ,2,0x16800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt },
- { "subb3" ,3,0x26000000,AddressMode, { TAddr1|AllReg, TAddr2|AllReg, AllReg }, Imm_None },
- { "subc" ,2,0x17000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_UInt },
- { "subf" ,2,0x17800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float },
- { "subf3" ,3,0x26800000,AddressMode, { TAddr1, TAddr2, Rn }, Imm_None },
- { "subi" ,2,0x18000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt },
- { "subi3" ,3,0x27000000,AddressMode, { TAddr1|AllReg, TAddr2|AllReg, AllReg }, Imm_None },
- { "subrb" ,2,0x18800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt },
- { "subrf" ,2,0x19000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float },
- { "subri" ,2,0x19800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt },
- { "swi" ,0,0x66000000,0, { 0, 0, 0 }, Imm_None },
- { "trap" ,1,0x74800020,0, { IVector, 0, 0 }, Imm_None },
- { "trapu" ,1,0x74800020,0, { IVector, 0, 0 }, Imm_None },
- { "traplo" ,1,0x74810020,0, { IVector, 0, 0 }, Imm_None },
- { "trapls" ,1,0x74820020,0, { IVector, 0, 0 }, Imm_None },
- { "traphi" ,1,0x74830020,0, { IVector, 0, 0 }, Imm_None },
- { "traphs" ,1,0x74840020,0, { IVector, 0, 0 }, Imm_None },
- { "trapeq" ,1,0x74850020,0, { IVector, 0, 0 }, Imm_None },
- { "trapne" ,1,0x74860020,0, { IVector, 0, 0 }, Imm_None },
- { "traplt" ,1,0x74870020,0, { IVector, 0, 0 }, Imm_None },
- { "traple" ,1,0x74880020,0, { IVector, 0, 0 }, Imm_None },
- { "trapgt" ,1,0x74890020,0, { IVector, 0, 0 }, Imm_None },
- { "trapge" ,1,0x748A0020,0, { IVector, 0, 0 }, Imm_None },
- { "trapz" ,1,0x74850020,0, { IVector, 0, 0 }, Imm_None },
- { "trapnz" ,1,0x74860020,0, { IVector, 0, 0 }, Imm_None },
- { "trapp" ,1,0x74890020,0, { IVector, 0, 0 }, Imm_None },
- { "trapn" ,1,0x74870020,0, { IVector, 0, 0 }, Imm_None },
- { "trapnn" ,1,0x748A0020,0, { IVector, 0, 0 }, Imm_None },
- { "trapnv" ,1,0x748C0020,0, { IVector, 0, 0 }, Imm_None },
- { "trapv" ,1,0x748D0020,0, { IVector, 0, 0 }, Imm_None },
- { "trapnuf",1,0x748E0020,0, { IVector, 0, 0 }, Imm_None },
- { "trapuf" ,1,0x748F0020,0, { IVector, 0, 0 }, Imm_None },
- { "trapnc" ,1,0x74840020,0, { IVector, 0, 0 }, Imm_None },
- { "trapc" ,1,0x74810020,0, { IVector, 0, 0 }, Imm_None },
- { "trapnlv",1,0x74900020,0, { IVector, 0, 0 }, Imm_None },
- { "traplv" ,1,0x74910020,0, { IVector, 0, 0 }, Imm_None },
- { "trapnluf",1,0x74920020,0, { IVector, 0, 0 }, Imm_None },
- { "trapluf",1,0x74930020,0, { IVector, 0, 0 }, Imm_None },
- { "trapzuf",1,0x74940020,0, { IVector, 0, 0 }, Imm_None },
- { "tstb" ,2,0x1A000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_UInt },
- { "tstb3" ,2,0x27800000,AddressMode, { TAddr1|AllReg, TAddr2|AllReg, 0 }, Imm_None },
- { "xor" ,2,0x1A800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_UInt },
- { "xor3" ,3,0x28000000,AddressMode, { TAddr1|AllReg, TAddr2|AllReg, AllReg }, Imm_None },
- { "" ,0,0x00000000,0, { 0, 0, 0 }, 0 }
-};
-
-static const insn_template *const tic30_optab_end =
- tic30_optab + sizeof(tic30_optab)/sizeof(tic30_optab[0]);
-
-typedef struct {
- char *name;
- unsigned int operands_1;
- unsigned int operands_2;
- unsigned int base_opcode;
- unsigned int operand_types[2][3];
- /* Which operand fits into which part of the final opcode word. */
- int oporder;
-} partemplate;
-
-/* oporder defines - not very descriptive. */
-#define OO_4op1 0
-#define OO_4op2 1
-#define OO_4op3 2
-#define OO_5op1 3
-#define OO_5op2 4
-#define OO_PField 5
-
-static const partemplate tic30_paroptab[] = {
- { "q_absf_stf", 2,2,0xC8000000, { { Indirect, Rn, 0 }, { Rn, Indirect, 0 } },
- OO_4op1 },
- { "q_absi_sti", 2,2,0xCA000000, { { Indirect, Rn, 0 }, { Rn, Indirect, 0 } },
- OO_4op1 },
- { "q_addf3_stf", 3,2,0xCC000000, { { Indirect, Rn, Rn }, { Rn, Indirect, 0 } },
- OO_5op1 },
- { "q_addi3_sti", 3,2,0xCE000000, { { Indirect, Rn, Rn }, { Rn, Indirect, 0 } },
- OO_5op1 },
- { "q_and3_sti", 3,2,0xD0000000, { { Indirect, Rn, Rn }, { Rn, Indirect, 0 } },
- OO_5op1 },
- { "q_ash3_sti", 3,2,0xD2000000, { { Rn, Indirect, Rn }, { Rn, Indirect, 0 } },
- OO_5op2 },
- { "q_fix_sti", 2,2,0xD4000000, { { Indirect, Rn, 0 }, { Rn, Indirect, 0 } },
- OO_4op1 },
- { "q_float_stf", 2,2,0xD6000000, { { Indirect, Rn, 0 }, { Rn, Indirect, 0 } },
- OO_4op1 },
- { "q_ldf_ldf", 2,2,0xC4000000, { { Indirect, Rn, 0 }, { Indirect, Rn, 0 } },
- OO_4op2 },
- { "q_ldf_stf", 2,2,0xD8000000, { { Indirect, Rn, 0 }, { Rn, Indirect, 0 } },
- OO_4op1 },
- { "q_ldi_ldi", 2,2,0xC6000000, { { Indirect, Rn, 0 }, { Indirect, Rn, 0 } },
- OO_4op2 },
- { "q_ldi_sti", 2,2,0xDA000000, { { Indirect, Rn, 0 }, { Rn, Indirect, 0 } },
- OO_4op1 },
- { "q_lsh3_sti", 3,2,0xDC000000, { { Rn, Indirect, Rn }, { Rn, Indirect, 0 } },
- OO_5op2 },
- { "q_mpyf3_addf3",3,3,0x80000000, { { Rn | Indirect, Rn | Indirect, Rn },
- { Rn | Indirect, Rn | Indirect, Rn } }, OO_PField },
- { "q_mpyf3_stf", 3,2,0xDE000000, { { Indirect, Rn, Rn }, { Rn, Indirect, 0 } },
- OO_5op1 },
- { "q_mpyf3_subf3",3,3,0x84000000, { { Rn | Indirect, Rn | Indirect, Rn },
- { Rn | Indirect, Rn | Indirect, Rn } }, OO_PField },
- { "q_mpyi3_addi3",3,3,0x88000000, { { Rn | Indirect, Rn | Indirect, Rn },
- { Rn | Indirect, Rn | Indirect, Rn } }, OO_PField },
- { "q_mpyi3_sti", 3,2,0xE0000000, { { Indirect, Rn, Rn }, { Rn, Indirect, 0 } },
- OO_5op1 },
- { "q_mpyi3_subi3",3,3,0x8C000000, { { Rn | Indirect, Rn | Indirect, Rn },
- { Rn | Indirect, Rn | Indirect, Rn } }, OO_PField },
- { "q_negf_stf", 2,2,0xE2000000, { { Indirect, Rn, 0 }, { Rn, Indirect, 0 } },
- OO_4op1 },
- { "q_negi_sti", 2,2,0xE4000000, { { Indirect, Rn, 0 }, { Rn, Indirect, 0 } },
- OO_4op1 },
- { "q_not_sti", 2,2,0xE6000000, { { Indirect, Rn, 0 }, { Rn, Indirect, 0 } },
- OO_4op1 },
- { "q_or3_sti", 3,2,0xE8000000, { { Indirect, Rn, Rn }, { Rn, Indirect, 0 } },
- OO_5op1 },
- { "q_stf_stf", 2,2,0xC0000000, { { Rn, Indirect, 0 }, { Rn, Indirect, 0 } },
- OO_4op3 },
- { "q_sti_sti", 2,2,0xC2000000, { { Rn, Indirect, 0 }, { Rn, Indirect, 0 } },
- OO_4op3 },
- { "q_subf3_stf", 3,2,0xEA000000, { { Rn, Indirect, Rn }, { Rn, Indirect, 0 } },
- OO_5op2 },
- { "q_subi3_sti", 3,2,0xEC000000, { { Rn, Indirect, Rn }, { Rn, Indirect, 0 } },
- OO_5op2 },
- { "q_xor3_sti", 3,2,0xEE000000, { { Indirect, Rn, Rn }, { Rn, Indirect, 0 } },
- OO_5op1 },
- { "", 0,0,0x00000000, { { 0, 0, 0 }, { 0, 0, 0 } }, 0 }
-};
-
-static const partemplate *const tic30_paroptab_end =
- tic30_paroptab + sizeof(tic30_paroptab)/sizeof(tic30_paroptab[0]);
-
-#endif
diff --git a/include/opcode/tic4x.h b/include/opcode/tic4x.h
deleted file mode 100644
index 6f16fcb40..000000000
--- a/include/opcode/tic4x.h
+++ /dev/null
@@ -1,1079 +0,0 @@
-/* Table of opcodes for the Texas Instruments TMS320C[34]X family.
-
- Copyright (C) 2002, 2003, 2010 Free Software Foundation.
-
- Contributed by Michael P. Hayes (m.hayes@elec.canterbury.ac.nz)
-
- 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#define IS_CPU_TIC3X(v) ((v) == 30 || (v) == 31 || (v) == 32 || (v) == 33)
-#define IS_CPU_TIC4X(v) ((v) == 0 || (v) == 40 || (v) == 44)
-
-/* Define some bitfield extraction/insertion macros. */
-#define EXTR(inst, m, l) ((inst) << (31 - (m)) >> (31 - ((m) - (l))))
-#define EXTRU(inst, m, l) EXTR ((unsigned long)(inst), (m), (l))
-#define EXTRS(inst, m, l) EXTR ((long)(inst), (m), (l))
-#define INSERTU(inst, val, m, l) (inst |= ((val) << (l)))
-#define INSERTS(inst, val, m, l) INSERTU (inst, ((val) & ((1 << ((m) - (l) + 1)) - 1)), m, l)
-
-/* Define register numbers. */
-typedef enum
- {
- REG_R0, REG_R1, REG_R2, REG_R3,
- REG_R4, REG_R5, REG_R6, REG_R7,
- REG_AR0, REG_AR1, REG_AR2, REG_AR3,
- REG_AR4, REG_AR5, REG_AR6, REG_AR7,
- REG_DP, REG_IR0, REG_IR1, REG_BK,
- REG_SP, REG_ST, REG_DIE, REG_IIE,
- REG_IIF, REG_RS, REG_RE, REG_RC,
- REG_R8, REG_R9, REG_R10, REG_R11,
- REG_IVTP, REG_TVTP
- }
-c4x_reg_t;
-
-/* Note that the actual register numbers for IVTP is 0 and TVTP is 1. */
-
-#define REG_IE REG_DIE /* C3x only */
-#define REG_IF REG_IIE /* C3x only */
-#define REG_IOF REG_IIF /* C3x only */
-
-#define TIC3X_REG_MAX REG_RC
-#define TIC4X_REG_MAX REG_TVTP
-
-/* Register table size including C4x expansion regs. */
-#define REG_TABLE_SIZE (TIC4X_REG_MAX + 1)
-
-struct tic4x_register
-{
- char * name;
- unsigned long regno;
-};
-
-typedef struct tic4x_register tic4x_register_t;
-
-/* We could store register synonyms here. */
-static const tic4x_register_t tic3x_registers[] =
-{
- {"f0", REG_R0},
- {"r0", REG_R0},
- {"f1", REG_R1},
- {"r1", REG_R1},
- {"f2", REG_R2},
- {"r2", REG_R2},
- {"f3", REG_R3},
- {"r3", REG_R3},
- {"f4", REG_R4},
- {"r4", REG_R4},
- {"f5", REG_R5},
- {"r5", REG_R5},
- {"f6", REG_R6},
- {"r6", REG_R6},
- {"f7", REG_R7},
- {"r7", REG_R7},
- {"ar0", REG_AR0},
- {"ar1", REG_AR1},
- {"ar2", REG_AR2},
- {"ar3", REG_AR3},
- {"ar4", REG_AR4},
- {"ar5", REG_AR5},
- {"ar6", REG_AR6},
- {"ar7", REG_AR7},
- {"dp", REG_DP},
- {"ir0", REG_IR0},
- {"ir1", REG_IR1},
- {"bk", REG_BK},
- {"sp", REG_SP},
- {"st", REG_ST},
- {"ie", REG_IE},
- {"if", REG_IF},
- {"iof", REG_IOF},
- {"rs", REG_RS},
- {"re", REG_RE},
- {"rc", REG_RC},
- {"", 0}
-};
-
-const unsigned int tic3x_num_registers = (((sizeof tic3x_registers) / (sizeof tic3x_registers[0])) - 1);
-
-/* Define C4x registers in addition to C3x registers. */
-static const tic4x_register_t tic4x_registers[] =
-{
- {"die", REG_DIE}, /* Clobbers C3x REG_IE */
- {"iie", REG_IIE}, /* Clobbers C3x REG_IF */
- {"iif", REG_IIF}, /* Clobbers C3x REG_IOF */
- {"f8", REG_R8},
- {"r8", REG_R8},
- {"f9", REG_R9},
- {"r9", REG_R9},
- {"f10", REG_R10},
- {"r10", REG_R10},
- {"f11", REG_R11},
- {"r11", REG_R11},
- {"ivtp", REG_IVTP},
- {"tvtp", REG_TVTP},
- {"", 0}
-};
-
-const unsigned int tic4x_num_registers = (((sizeof tic4x_registers) / (sizeof tic4x_registers[0])) - 1);
-
-struct tic4x_cond
-{
- char * name;
- unsigned long cond;
-};
-
-typedef struct tic4x_cond tic4x_cond_t;
-
-/* Define conditional branch/load suffixes. Put desired form for
- disassembler last. */
-static const tic4x_cond_t tic4x_conds[] =
-{
- { "u", 0x00 },
- { "c", 0x01 }, { "lo", 0x01 },
- { "ls", 0x02 },
- { "hi", 0x03 },
- { "nc", 0x04 }, { "hs", 0x04 },
- { "z", 0x05 }, { "eq", 0x05 },
- { "nz", 0x06 }, { "ne", 0x06 },
- { "n", 0x07 }, { "l", 0x07 }, { "lt", 0x07 },
- { "le", 0x08 },
- { "p", 0x09 }, { "gt", 0x09 },
- { "nn", 0x0a }, { "ge", 0x0a },
- { "nv", 0x0c },
- { "v", 0x0d },
- { "nuf", 0x0e },
- { "uf", 0x0f },
- { "nlv", 0x10 },
- { "lv", 0x11 },
- { "nluf", 0x12 },
- { "luf", 0x13 },
- { "zuf", 0x14 },
- /* Dummy entry, not included in num_conds. This
- lets code examine entry i+1 without checking
- if we've run off the end of the table. */
- { "", 0x0}
-};
-
-const unsigned int tic4x_num_conds = (((sizeof tic4x_conds) / (sizeof tic4x_conds[0])) - 1);
-
-struct tic4x_indirect
-{
- char * name;
- unsigned long modn;
-};
-
-typedef struct tic4x_indirect tic4x_indirect_t;
-
-/* Define indirect addressing modes where:
- d displacement (signed)
- y ir0
- z ir1 */
-
-static const tic4x_indirect_t tic4x_indirects[] =
-{
- { "*+a(d)", 0x00 },
- { "*-a(d)", 0x01 },
- { "*++a(d)", 0x02 },
- { "*--a(d)", 0x03 },
- { "*a++(d)", 0x04 },
- { "*a--(d)", 0x05 },
- { "*a++(d)%", 0x06 },
- { "*a--(d)%", 0x07 },
- { "*+a(y)", 0x08 },
- { "*-a(y)", 0x09 },
- { "*++a(y)", 0x0a },
- { "*--a(y)", 0x0b },
- { "*a++(y)", 0x0c },
- { "*a--(y)", 0x0d },
- { "*a++(y)%", 0x0e },
- { "*a--(y)%", 0x0f },
- { "*+a(z)", 0x10 },
- { "*-a(z)", 0x11 },
- { "*++a(z)", 0x12 },
- { "*--a(z)", 0x13 },
- { "*a++(z)", 0x14 },
- { "*a--(z)", 0x15 },
- { "*a++(z)%", 0x16 },
- { "*a--(z)%", 0x17 },
- { "*a", 0x18 },
- { "*a++(y)b", 0x19 },
- /* Dummy entry, not included in num_indirects. This
- lets code examine entry i+1 without checking
- if we've run off the end of the table. */
- { "", 0x0}
-};
-
-#define TIC3X_MODN_MAX 0x19
-
-const unsigned int tic4x_num_indirects = (((sizeof tic4x_indirects) / (sizeof tic4x_indirects[0])) - 1);
-
-/* Instruction template. */
-struct tic4x_inst
-{
- char * name;
- unsigned long opcode;
- unsigned long opmask;
- char * args;
- unsigned long oplevel;
-};
-
-typedef struct tic4x_inst tic4x_inst_t;
-
-/* Opcode infix
- B condition 16--20 U,C,Z,LO,HI, etc.
- C condition 23--27 U,C,Z,LO,HI, etc.
-
- Arguments
- , required arg follows
- ; optional arg follows
-
- Argument types bits [classes] - example
- -----------------------------------------------------------
- * indirect (all) 0--15 [A,AB,AU,AF,A2,A3,A6,A7,AY,B,BA,BB,BI,B6,B7] - *+AR0(5), *++AR0(IR0)
- # direct (for LDP) 0--15 [Z] - @start, start
- @ direct 0--15 [A,AB,AU,AF,A3,A6,A7,AY,B,BA,BB,BI,B6,B7] - @start, start
- A address register 22--24 [D] - AR0, AR7
- B unsigned integer 0--23 [I,I2] - @start, start (absolute on C3x, relative on C4x)
- C indirect (disp - C4x) 0--7 [S,SC,S2,T,TC,T2,T2C] - *+AR0(5)
- E register (all) 0--7 [T,TC,T2,T2C] - R0, R7, R11, AR0, DP
- e register (0-11) 0--7 [S,SC,S2] - R0, R7, R11
- F short float immediate 0--15 [AF,B,BA,BB] - 3.5, 0e-3.5e-1
- G register (all) 8--15 [T,TC,T2,T2C] - R0, R7, R11, AR0, DP
- g register (0-11) 0--7 [S,SC,S2] - R0, R7, R11
- H register (0-7) 18--16 [LS,M,P,Q] - R0, R7
- I indirect (no disp) 0--7 [S,SC,S2,T,TC,T2,T2C] - *+AR0(1), *+AR0(IR0)
- i indirect (enhanced) 0--7 [LL,LS,M,P,Q,QC] - *+AR0(1), R5
- J indirect (no disp) 8--15 [LL,LS,P,Q,QC,S,SC,S2,T,TC,T2,T2C] - *+AR0(1), *+AR0(IR0)
- j indirect (enhanced) 8--15 [M] - *+AR0(1), R5
- K register 19--21 [LL,M,Q,QC] - R0, R7
- L register 22--24 [LL,LS,P,Q,QC] - R0, R7
- M register (R2,R3) 22--22 [M] R2, R3
- N register (R0,R1) 23--23 [M] R0, R1
- O indirect(disp - C4x) 8--15 [S,SC,S2,T,TC,T2] - *+AR0(5)
- P displacement (PC Rel) 0--15 [D,J,JS] - @start, start
- Q register (all) 0--15 [A,AB,AU,A2,A3,AY,BA,BI,D,I2,J,JS] - R0, AR0, DP, SP
- q register (0-11) 0--15 [AF,B,BB] - R0, R7, R11
- R register (all) 16--20 [A,AB,AU,AF,A6,A7,R,T,TC] - R0, AR0, DP, SP
- r register (0-11) 16--20 [B,BA,BB,BI,B6,B7,RF,S,SC] - R0, R1, R11
- S short int immediate 0--15 [A,AB,AY,BI] - -5, 5
- T integer (C4x) 16--20 [Z] - -5, 12
- U unsigned integer 0--15 [AU,A3] - 0, 65535
- V vector (C4x: 0--8) 0--4 [Z] - 25, 7
- W short int (C4x) 0--7 [T,TC,T2,T2C] - -3, 5
- X expansion reg (C4x) 0--4 [Z] - IVTP, TVTP
- Y address reg (C4x) 16--20 [Z] - AR0, DP, SP, IR0
- Z expansion reg (C4x) 16--20 [Z] - IVTP, TVTP
-*/
-
-#define TIC4X_OPERANDS_MAX 7 /* Max number of operands for an inst. */
-#define TIC4X_NAME_MAX 16 /* Max number of chars in parallel name. */
-
-/* Define the instruction level */
-#define OP_C3X 0x1 /* C30 support - supported by all */
-#define OP_C4X 0x2 /* C40 support - C40, C44 */
-#define OP_ENH 0x4 /* Class LL,LS,M,P,Q,QC enhancements. Argument type
- I and J is enhanced in these classes - C31>=6.0,
- C32>=2.0, C33 */
-#define OP_LPWR 0x8 /* Low power support (LOPOWER, MAXSPEED) - C30>=7.0,
- LC31, C31>=5.0, C32 */
-#define OP_IDLE2 0x10 /* Idle2 support (IDLE2) - C30>=7.0, LC31, C31>=5.0,
- C32, C33, C40>=5.0, C44 */
-
-/* The following class definition is a classification scheme for
- putting instructions with similar type of arguments together. It
- simplifies the op-code definitions significantly, as we then only
- need to use the class macroes for 95% of the DSP's opcodes.
-*/
-
-/* A: General 2-operand integer operations
- Syntax: <i> src, dst
- src = Register (Q), Direct (@), Indirect (*), Signed immediate (S)
- dst = Register (R)
- Instr: 15/8 - ABSI, ADDC, ADDI, ASH, CMPI, LDI, LSH, MPYI, NEGB, NEGI,
- SUBB, SUBC, SUBI, SUBRB, SUBRI, C4x: LBn, LHn, LWLn, LWRn,
- MBn, MHn, MPYSHI, MPYUHI
-*/
-#define A_CLASS_INSN(name, opcode, level) \
- { name, opcode|0x00000000, 0xffe00000, "Q;R", level }, \
- { name, opcode|0x00200000, 0xffe00000, "@,R", level }, \
- { name, opcode|0x00400000, 0xffe00000, "*,R", level }, \
- { name, opcode|0x00600000, 0xffe00000, "S,R", level }
-
-/* AB: General 2-operand integer operation with condition
- Syntax: <i>c src, dst
- c = Condition
- src = Register (Q), Direct (@), Indirect (*), Signed immediate (S)
- dst = Register (R)
- Instr: 1/0 - LDIc
-*/
-#define AB_CLASS_INSN(name, opcode, level) \
- { name, opcode|0x40000000, 0xf0600000, "Q;R", level }, \
- { name, opcode|0x40200000, 0xf0600000, "@,R", level }, \
- { name, opcode|0x40400000, 0xf0600000, "*,R", level }, \
- { name, opcode|0x40600000, 0xf0600000, "S,R", level }
-
-/* AU: General 2-operand unsigned integer operation
- Syntax: <i> src, dst
- src = Register (Q), Direct (@), Indirect (*), Unsigned immediate (U)
- dst = Register (R)
- Instr: 6/2 - AND, ANDN, NOT, OR, TSTB, XOR, C4x: LBUn, LHUn
-*/
-#define AU_CLASS_INSN(name, opcode, level) \
- { name, opcode|0x00000000, 0xffe00000, "Q;R", level }, \
- { name, opcode|0x00200000, 0xffe00000, "@,R", level }, \
- { name, opcode|0x00400000, 0xffe00000, "*,R", level }, \
- { name, opcode|0x00600000, 0xffe00000, "U,R", level }
-
-/* AF: General 2-operand float to integer operation
- Syntax: <i> src, dst
- src = Register 0-11 (q), Direct (@), Indirect (*), Float immediate (F)
- dst = Register (R)
- Instr: 1/0 - FIX
-*/
-#define AF_CLASS_INSN(name, opcode, level) \
- { name, opcode|0x00000000, 0xffe00000, "q;R", level }, \
- { name, opcode|0x00200000, 0xffe00000, "@,R", level }, \
- { name, opcode|0x00400000, 0xffe00000, "*,R", level }, \
- { name, opcode|0x00600000, 0xffe00000, "F,R", level }
-
-/* A2: Limited 1-operand (integer) operation
- Syntax: <i> src
- src = Register (Q), Indirect (*), None
- Instr: 1/0 - NOP
-*/
-#define A2_CLASS_INSN(name, opcode, level) \
- { name, opcode|0x00000000, 0xffe00000, "Q", level }, \
- { name, opcode|0x00400000, 0xffe00000, "*", level }, \
- { name, opcode|0x00000000, 0xffe00000, "" , level }
-
-/* A3: General 1-operand unsigned integer operation
- Syntax: <i> src
- src = Register (Q), Direct (@), Indirect (*), Unsigned immediate (U)
- Instr: 1/0 - RPTS
-*/
-#define A3_CLASS_INSN(name, opcode, level) \
- { name, opcode|0x00000000, 0xffff0000, "Q", level }, \
- { name, opcode|0x00200000, 0xffff0000, "@", level }, \
- { name, opcode|0x00400000, 0xffff0000, "*", level }, \
- { name, opcode|0x00600000, 0xffff0000, "U", level }
-
-/* A6: Limited 2-operand integer operation
- Syntax: <i> src, dst
- src = Direct (@), Indirect (*)
- dst = Register (R)
- Instr: 1/1 - LDII, C4x: SIGI
-*/
-#define A6_CLASS_INSN(name, opcode, level) \
- { name, opcode|0x00200000, 0xffe00000, "@,R", level }, \
- { name, opcode|0x00400000, 0xffe00000, "*,R", level }
-
-/* A7: Limited 2-operand integer store operation
- Syntax: <i> src, dst
- src = Register (R)
- dst = Direct (@), Indirect (*)
- Instr: 2/0 - STI, STII
-*/
-#define A7_CLASS_INSN(name, opcode, level) \
- { name, opcode|0x00200000, 0xffe00000, "R,@", level }, \
- { name, opcode|0x00400000, 0xffe00000, "R,*", level }
-
-/* AY: General 2-operand signed address load operation
- Syntax: <i> src, dst
- src = Register (Q), Direct (@), Indirect (*), Signed immediate (S)
- dst = Address register - ARx, IRx, DP, BK, SP (Y)
- Instr: 0/1 - C4x: LDA
- Note: Q and Y should *never* be the same register
-*/
-#define AY_CLASS_INSN(name, opcode, level) \
- { name, opcode|0x00000000, 0xffe00000, "Q,Y", level }, \
- { name, opcode|0x00200000, 0xffe00000, "@,Y", level }, \
- { name, opcode|0x00400000, 0xffe00000, "*,Y", level }, \
- { name, opcode|0x00600000, 0xffe00000, "S,Y", level }
-
-/* B: General 2-operand float operation
- Syntax: <i> src, dst
- src = Register 0-11 (q), Direct (@), Indirect (*), Float immediate (F)
- dst = Register 0-11 (r)
- Instr: 12/2 - ABSF, ADDF, CMPF, LDE, LDF, LDM, MPYF, NEGF, NORM, RND,
- SUBF, SUBRF, C4x: RSQRF, TOIEEE
-*/
-#define B_CLASS_INSN(name, opcode, level) \
- { name, opcode|0x00000000, 0xffe00000, "q;r", level }, \
- { name, opcode|0x00200000, 0xffe00000, "@,r", level }, \
- { name, opcode|0x00400000, 0xffe00000, "*,r", level }, \
- { name, opcode|0x00600000, 0xffe00000, "F,r", level }
-
-/* BA: General 2-operand integer to float operation
- Syntax: <i> src, dst
- src = Register (Q), Direct (@), Indirect (*), Float immediate (F)
- dst = Register 0-11 (r)
- Instr: 0/1 - C4x: CRCPF
-*/
-#define BA_CLASS_INSN(name, opcode, level) \
- { name, opcode|0x00000000, 0xffe00000, "Q;r", level }, \
- { name, opcode|0x00200000, 0xffe00000, "@,r", level }, \
- { name, opcode|0x00400000, 0xffe00000, "*,r", level }, \
- { name, opcode|0x00600000, 0xffe00000, "F,r", level }
-
-/* BB: General 2-operand conditional float operation
- Syntax: <i>c src, dst
- c = Condition
- src = Register 0-11 (q), Direct (@), Indirect (*), Float immediate (F)
- dst = Register 0-11 (r)
- Instr: 1/0 - LDFc
-*/
-#define BB_CLASS_INSN(name, opcode, level) \
- { name, opcode|0x40000000, 0xf0600000, "q;r", level }, \
- { name, opcode|0x40200000, 0xf0600000, "@,r", level }, \
- { name, opcode|0x40400000, 0xf0600000, "*,r", level }, \
- { name, opcode|0x40600000, 0xf0600000, "F,r", level }
-
-/* BI: General 2-operand integer to float operation (yet different to BA)
- Syntax: <i> src, dst
- src = Register (Q), Direct (@), Indirect (*), Signed immediate (S)
- dst = Register 0-11 (r)
- Instr: 1/0 - FLOAT
-*/
-#define BI_CLASS_INSN(name, opcode, level) \
- { name, opcode|0x00000000, 0xffe00000, "Q;r", level }, \
- { name, opcode|0x00200000, 0xffe00000, "@,r", level }, \
- { name, opcode|0x00400000, 0xffe00000, "*,r", level }, \
- { name, opcode|0x00600000, 0xffe00000, "S,r", level }
-
-/* B6: Limited 2-operand float operation
- Syntax: <i> src, dst
- src = Direct (@), Indirect (*)
- dst = Register 0-11 (r)
- Instr: 1/1 - LDFI, C4x: FRIEEE
-*/
-#define B6_CLASS_INSN(name, opcode, level) \
- { name, opcode|0x00200000, 0xffe00000, "@,r", level }, \
- { name, opcode|0x00400000, 0xffe00000, "*,r", level }
-
-/* B7: Limited 2-operand float store operation
- Syntax: <i> src, dst
- src = Register 0-11 (r)
- dst = Direct (@), Indirect (*)
- Instr: 2/0 - STF, STFI
-*/
-#define B7_CLASS_INSN(name, opcode, level) \
- { name, opcode|0x00200000, 0xffe00000, "r,@", level }, \
- { name, opcode|0x00400000, 0xffe00000, "r,*", level }
-
-/* D: Decrement and brach operations
- Syntax: <i>c ARn, dst
- c = condition
- ARn = AR register 0-7 (A)
- dst = Register (Q), PC-relative (P)
- Instr: 2/0 - DBc, DBcD
- Alias: <name1> <name2>
-*/
-#define D_CLASS_INSN(name1, name2, opcode, level) \
- { name1, opcode|0x00000000, 0xfe200000, "A,Q", level }, \
- { name1, opcode|0x02000000, 0xfe200000, "A,P", level }, \
- { name2, opcode|0x00000000, 0xfe200000, "A,Q", level }, \
- { name2, opcode|0x02000000, 0xfe200000, "A,P", level }
-
-/* I: General branch operations
- Syntax: <i> dst
- dst = Address (B)
- Instr: 3/1 - BR, BRD, CALL, C4x: LAJ
-*/
-
-/* I2: General branch operations (C4x addition)
- Syntax: <i> dst
- dst = Address (B), C4x: Register (Q)
- Instr: 2/0 - RPTB, RPTBD
-*/
-
-/* J: General conditional branch operations
- Syntax: <i>c dst
- c = Condition
- dst = Register (Q), PC-relative (P)
- Instr: 2/3 - Bc, BcD, C4x: BcAF, BcAT, LAJc
- Alias: <name1> <name2>
-*/
-#define J_CLASS_INSN(name1, name2, opcode, level) \
- { name1, opcode|0x00000000, 0xffe00000, "Q", level }, \
- { name1, opcode|0x02000000, 0xffe00000, "P", level }, \
- { name2, opcode|0x00000000, 0xffe00000, "Q", level }, \
- { name2, opcode|0x02000000, 0xffe00000, "P", level }
-
-/* JS: General conditional branch operations
- Syntax: <i>c dst
- c = Condition
- dst = Register (Q), PC-relative (P)
- Instr: 1/1 - CALLc, C4X: LAJc
-*/
-
-/* LL: Load-load parallell operation
- Syntax: <i> src2, dst2 || <i> src1, dst1
- src1 = Indirect 0,1,IR0,IR1 (J)
- dst1 = Register 0-7 (K)
- src2 = Indirect 0,1,IR0,IR1, ENH: Register (i)
- dst2 = Register 0-7 (L)
- Instr: 2/0 - LDF||LDF, LDI||LDI
- Alias: i||i, i1||i2, i2||i1
-*/
-#define LL_CLASS_INSN(name, opcode, level) \
- { name "_" name , opcode, 0xfe000000, "i;L|J,K", level }, \
- { name "2_" name "1", opcode, 0xfe000000, "i;L|J,K", level }, \
- { name "1_" name "2", opcode, 0xfe000000, "J,K|i;L", level }
-
-/* LS: Store-store parallell operation
- Syntax: <i> src2, dst2 || <i> src1, dst1
- src1 = Register 0-7 (H)
- dst1 = Indirect 0,1,IR0,IR1 (J)
- src2 = Register 0-7 (L)
- dst2 = Indirect 0,1,IR0,IR1, ENH: register (i)
- Instr: 2/0 - STF||STF, STI||STI
- Alias: i||i, i1||i2, i2||i1.
-*/
-#define LS_CLASS_INSN(name, opcode, level) \
- { name "_" name , opcode, 0xfe000000, "L;i|H,J", level }, \
- { name "2_" name "1", opcode, 0xfe000000, "L;i|H,J", level }, \
- { name "1_" name "2", opcode, 0xfe000000, "H,J|L;i", level }
-
-/* M: General multiply and add/sub operations
- Syntax: <ia> src3,src4,dst1 || <ib> src2,src1,dst2 [00] - Manual
- <ia> src3,src1,dst1 || <ib> src2,src4,dst2 [01] - Manual
- <ia> src1,src3,dst1 || <ib> src2,src4,dst2 [01]
- <ia> src1,src2,dst1 || <ib> src4,src3,dst2 [02] - Manual
- <ia> src3,src1,dst1 || <ib> src4,src2,dst2 [03] - Manual
- <ia> src1,src3,dst1 || <ib> src4,src2,dst2 [03]
- src1 = Register 0-7 (K)
- src2 = Register 0-7 (H)
- src3 = Indirect 0,1,IR0,IR1, ENH: register (j)
- src4 = Indirect 0,1,IR0,IR1, ENH: register (i)
- dst1 = Register 0-1 (N)
- dst2 = Register 2-3 (M)
- Instr: 4/0 - MPYF3||ADDF3, MPYF3||SUBF3, MPYI3||ADDI3, MPYI3||SUBI3
- Alias: a||b, a3||n, a||b3, a3||b3, b||a, b3||a, b||a3, b3||a3
-*/
-#define M_CLASS_INSN(namea, nameb, opcode, level) \
- { namea "_" nameb, opcode|0x00000000, 0xff000000, "i;j;N|H;K;M", level }, \
- { namea "_" nameb, opcode|0x01000000, 0xff000000, "j;K;N|H;i;M", level }, \
- { namea "_" nameb, opcode|0x01000000, 0xff000000, "K;j;N|H;i;M", level }, \
- { namea "_" nameb, opcode|0x02000000, 0xff000000, "H;K;N|i;j;M", level }, \
- { namea "_" nameb, opcode|0x03000000, 0xff000000, "j;K;N|i;H;M", level }, \
- { namea "_" nameb, opcode|0x03000000, 0xff000000, "K;j;N|i;H;M", level }, \
- { namea "3_" nameb, opcode|0x00000000, 0xff000000, "i;j;N|H;K;M", level }, \
- { namea "3_" nameb, opcode|0x01000000, 0xff000000, "j;K;N|H;i;M", level }, \
- { namea "3_" nameb, opcode|0x01000000, 0xff000000, "K;j;N|H;i;M", level }, \
- { namea "3_" nameb, opcode|0x02000000, 0xff000000, "H;K;N|i;j;M", level }, \
- { namea "3_" nameb, opcode|0x03000000, 0xff000000, "j;K;N|i;H;M", level }, \
- { namea "3_" nameb, opcode|0x03000000, 0xff000000, "K;j;N|i;H;M", level }, \
- { namea "_" nameb "3", opcode|0x00000000, 0xff000000, "i;j;N|H;K;M", level }, \
- { namea "_" nameb "3", opcode|0x01000000, 0xff000000, "j;K;N|H;i;M", level }, \
- { namea "_" nameb "3", opcode|0x01000000, 0xff000000, "K;j;N|H;i;M", level }, \
- { namea "_" nameb "3", opcode|0x02000000, 0xff000000, "H;K;N|i;j;M", level }, \
- { namea "_" nameb "3", opcode|0x03000000, 0xff000000, "j;K;N|i;H;M", level }, \
- { namea "_" nameb "3", opcode|0x03000000, 0xff000000, "K;j;N|i;H;M", level }, \
- { namea "3_" nameb "3", opcode|0x00000000, 0xff000000, "i;j;N|H;K;M", level }, \
- { namea "3_" nameb "3", opcode|0x01000000, 0xff000000, "j;K;N|H;i;M", level }, \
- { namea "3_" nameb "3", opcode|0x01000000, 0xff000000, "K;j;N|H;i;M", level }, \
- { namea "3_" nameb "3", opcode|0x02000000, 0xff000000, "H;K;N|i;j;M", level }, \
- { namea "3_" nameb "3", opcode|0x03000000, 0xff000000, "j;K;N|i;H;M", level }, \
- { namea "3_" nameb "3", opcode|0x03000000, 0xff000000, "K;j;N|i;H;M", level }, \
- { nameb "_" namea, opcode|0x00000000, 0xff000000, "H;K;M|i;j;N", level }, \
- { nameb "_" namea, opcode|0x01000000, 0xff000000, "H;i;M|j;K;N", level }, \
- { nameb "_" namea, opcode|0x01000000, 0xff000000, "H;i;M|K;j;N", level }, \
- { nameb "_" namea, opcode|0x02000000, 0xff000000, "i;j;M|H;K;N", level }, \
- { nameb "_" namea, opcode|0x03000000, 0xff000000, "i;H;M|j;K;N", level }, \
- { nameb "_" namea, opcode|0x03000000, 0xff000000, "i;H;M|K;j;N", level }, \
- { nameb "3_" namea, opcode|0x00000000, 0xff000000, "H;K;M|i;j;N", level }, \
- { nameb "3_" namea, opcode|0x01000000, 0xff000000, "H;i;M|j;K;N", level }, \
- { nameb "3_" namea, opcode|0x01000000, 0xff000000, "H;i;M|K;j;N", level }, \
- { nameb "3_" namea, opcode|0x02000000, 0xff000000, "i;j;M|H;K;N", level }, \
- { nameb "3_" namea, opcode|0x03000000, 0xff000000, "i;H;M|j;K;N", level }, \
- { nameb "3_" namea, opcode|0x03000000, 0xff000000, "i;H;M|K;j;N", level }, \
- { nameb "_" namea "3", opcode|0x00000000, 0xff000000, "H;K;M|i;j;N", level }, \
- { nameb "_" namea "3", opcode|0x01000000, 0xff000000, "H;i;M|j;K;N", level }, \
- { nameb "_" namea "3", opcode|0x01000000, 0xff000000, "H;i;M|K;j;N", level }, \
- { nameb "_" namea "3", opcode|0x02000000, 0xff000000, "i;j;M|H;K;N", level }, \
- { nameb "_" namea "3", opcode|0x03000000, 0xff000000, "i;H;M|j;K;N", level }, \
- { nameb "_" namea "3", opcode|0x03000000, 0xff000000, "i;H;M|K;j;N", level }, \
- { nameb "3_" namea "3", opcode|0x00000000, 0xff000000, "H;K;M|i;j;N", level }, \
- { nameb "3_" namea "3", opcode|0x01000000, 0xff000000, "H;i;M|j;K;N", level }, \
- { nameb "3_" namea "3", opcode|0x01000000, 0xff000000, "H;i;M|K;j;N", level }, \
- { nameb "3_" namea "3", opcode|0x02000000, 0xff000000, "i;j;M|H;K;N", level }, \
- { nameb "3_" namea "3", opcode|0x03000000, 0xff000000, "i;H;M|j;K;N", level }, \
- { nameb "3_" namea "3", opcode|0x03000000, 0xff000000, "i;H;M|K;j;N", level }
-
-/* P: General 2-operand operation with parallell store
- Syntax: <ia> src2, dst1 || <ib> src3, dst2
- src2 = Indirect 0,1,IR0,IR1, ENH: register (i)
- dst1 = Register 0-7 (L)
- src3 = Register 0-7 (H)
- dst2 = Indirect 0,1,IR0,IR1 (J)
- Instr: 9/2 - ABSF||STF, ABSI||STI, FIX||STI, FLOAT||STF, LDF||STF,
- LDI||STI, NEGF||STF, NEGI||STI, NOT||STI, C4x: FRIEEE||STF,
- TOIEEE||STF
- Alias: a||b, b||a
-*/
-#define P_CLASS_INSN(namea, nameb, opcode, level) \
- { namea "_" nameb, opcode, 0xfe000000, "i;L|H,J", level }, \
- { nameb "_" namea, opcode, 0xfe000000, "H,J|i;L", level }
-
-/* Q: General 3-operand operation with parallell store
- Syntax: <ia> src1, src2, dst1 || <ib> src3, dst2
- src1 = Register 0-7 (K)
- src2 = Indirect 0,1,IR0,IR1, ENH: register (i)
- dst1 = Register 0-7 (L)
- src3 = Register 0-7 (H)
- dst2 = Indirect 0,1,IR0,IR1 (J)
- Instr: 4/0 - ASH3||STI, LSH3||STI, SUBF3||STF, SUBI3||STI
- Alias: a||b, b||a, a3||b, b||a3
-*/
-#define Q_CLASS_INSN(namea, nameb, opcode, level) \
- { namea "_" nameb , opcode, 0xfe000000, "K,i;L|H,J", level }, \
- { nameb "_" namea , opcode, 0xfe000000, "H,J|K,i;L", level }, \
- { namea "3_" nameb , opcode, 0xfe000000, "K,i;L|H,J", level }, \
- { nameb "_" namea "3", opcode, 0xfe000000, "H,J|K,i;L", level }
-
-/* QC: General commutative 3-operand operation with parallell store
- Syntax: <ia> src2, src1, dst1 || <ib> src3, dst2
- <ia> src1, src2, dst1 || <ib> src3, dst2 - Manual
- src1 = Register 0-7 (K)
- src2 = Indirect 0,1,IR0,IR1, ENH: register (i)
- dst1 = Register 0-7 (L)
- src3 = Register 0-7 (H)
- dst2 = Indirect 0,1,IR0,IR1 (J)
- Instr: 7/0 - ADDF3||STF, ADDI3||STI, AND3||STI, MPYF3||STF, MPYI3||STI,
- OR3||STI, XOR3||STI
- Alias: a||b, b||a, a3||b, b||a3
-*/
-#define QC_CLASS_INSN(namea, nameb, opcode, level) \
- { namea "_" nameb , opcode, 0xfe000000, "i;K;L|H,J", level }, \
- { namea "_" nameb , opcode, 0xfe000000, "K;i;L|H,J", level }, \
- { nameb "_" namea , opcode, 0xfe000000, "H,J|i;K;L", level }, \
- { nameb "_" namea , opcode, 0xfe000000, "H,J|K;i;L", level }, \
- { namea "3_" nameb , opcode, 0xfe000000, "i;K;L|H,J", level }, \
- { namea "3_" nameb , opcode, 0xfe000000, "K;i;L|H,J", level }, \
- { nameb "_" namea "3", opcode, 0xfe000000, "H,J|i;K;L", level }, \
- { nameb "_" namea "3", opcode, 0xfe000000, "H,J|K;i;L", level }
-
-/* R: General register integer operation
- Syntax: <i> dst
- dst = Register (R)
- Instr: 6/0 - POP, PUSH, ROL, ROLC, ROR, RORC
-*/
-#define R_CLASS_INSN(name, opcode, level) \
- { name, opcode, 0xffe0ffff, "R", level }
-
-/* RF: General register float operation
- Syntax: <i> dst
- dst = Register 0-11 (r)
- Instr: 2/0 - POPF, PUSHF
-*/
-#define RF_CLASS_INSN(name, opcode, level) \
- { name, opcode, 0xffe0ffff, "r", level }
-
-/* S: General 3-operand float operation
- Syntax: <i> src2, src1, dst
- src2 = Register 0-11 (e), Indirect 0,1,IR0,IR1 (I), C4x T2: Indirect (C)
- src1 = Register 0-11 (g), Indirect 0,1,IR0,IR1 (J), C4x T2: Indirect (O)
- dst = Register 0-11 (r)
- Instr: 1/0 - SUBF3
- Alias: i, i3
-*/
-#define S_CLASS_INSN(name, opcode, level) \
- { name, opcode|0x20000000, 0xffe00000, "e,g;r", level }, \
- { name, opcode|0x20200000, 0xffe00000, "e,J,r", level }, \
- { name, opcode|0x20400000, 0xffe00000, "I,g;r", level }, \
- { name, opcode|0x20600000, 0xffe00000, "I,J,r", level }, \
- { name, opcode|0x30200000, 0xffe00000, "C,g;r", OP_C4X }, \
- { name, opcode|0x30600000, 0xffe00000, "C,O,r", OP_C4X }, \
- { name "3", opcode|0x20000000, 0xffe00000, "e,g;r", level }, \
- { name "3", opcode|0x20200000, 0xffe00000, "e,J,r", level }, \
- { name "3", opcode|0x20400000, 0xffe00000, "I,g;r", level }, \
- { name "3", opcode|0x20600000, 0xffe00000, "I,J,r", level }, \
- { name "3", opcode|0x30200000, 0xffe00000, "C,g;r", OP_C4X }, \
- { name "3", opcode|0x30600000, 0xffe00000, "C,O,r", OP_C4X }
-
-/* SC: General commutative 3-operand float operation
- Syntax: <i> src2, src1, dst - Manual
- <i> src1, src2, dst
- src2 = Register 0-11 (e), Indirect 0,1,IR0,IR1 (I), C4x T2: Indirect (C)
- src1 = Register 0-11 (g), Indirect 0,1,IR0,IR1 (J), C4x T2: Indirect (O)
- dst = Register 0-11 (r)
- Instr: 2/0 - ADDF3, MPYF3
- Alias: i, i3
-*/
-#define SC_CLASS_INSN(name, opcode, level) \
- { name, opcode|0x20000000, 0xffe00000, "e,g;r", level }, \
- { name, opcode|0x20200000, 0xffe00000, "e,J,r", level }, \
- { name, opcode|0x20400000, 0xffe00000, "I,g;r", level }, \
- { name, opcode|0x20600000, 0xffe00000, "I,J,r", level }, \
- { name, opcode|0x30200000, 0xffe00000, "C,g;r", OP_C4X }, \
- { name, opcode|0x30200000, 0xffe00000, "g,C,r", OP_C4X }, \
- { name, opcode|0x30600000, 0xffe00000, "C,O,r", OP_C4X }, \
- { name "3", opcode|0x20000000, 0xffe00000, "e,g;r", level }, \
- { name "3", opcode|0x20200000, 0xffe00000, "e,J,r", level }, \
- { name "3", opcode|0x20400000, 0xffe00000, "I,g;r", level }, \
- { name "3", opcode|0x20600000, 0xffe00000, "I,J,r", level }, \
- { name "3", opcode|0x30200000, 0xffe00000, "g,C,r", OP_C4X }, \
- { name "3", opcode|0x30200000, 0xffe00000, "C,g;r", OP_C4X }, \
- { name "3", opcode|0x30600000, 0xffe00000, "C,O,r", OP_C4X }
-
-/* S2: General 3-operand float operation with 2 args
- Syntax: <i> src2, src1
- src2 = Register 0-11 (e), Indirect 0,1,IR0,IR1 (I), C4x T2: Indirect (C)
- src1 = Register 0-11 (g), Indirect 0,1,IR0,IR1 (J), C4x T2: Indirect (O)
- Instr: 1/0 - CMPF3
- Alias: i, i3
-*/
-#define S2_CLASS_INSN(name, opcode, level) \
- { name, opcode|0x20000000, 0xffe00000, "e,g", level }, \
- { name, opcode|0x20200000, 0xffe00000, "e,J", level }, \
- { name, opcode|0x20400000, 0xffe00000, "I,g", level }, \
- { name, opcode|0x20600000, 0xffe00000, "I,J", level }, \
- { name, opcode|0x30200000, 0xffe00000, "C,g", OP_C4X }, \
- { name, opcode|0x30600000, 0xffe00000, "C,O", OP_C4X }, \
- { name "3", opcode|0x20000000, 0xffe00000, "e,g", level }, \
- { name "3", opcode|0x20200000, 0xffe00000, "e,J", level }, \
- { name "3", opcode|0x20400000, 0xffe00000, "I,g", level }, \
- { name "3", opcode|0x20600000, 0xffe00000, "I,J", level }, \
- { name "3", opcode|0x30200000, 0xffe00000, "C,g", OP_C4X }, \
- { name "3", opcode|0x30600000, 0xffe00000, "C,O", OP_C4X }
-
-/* T: General 3-operand integer operand
- Syntax: <i> src2, src1, dst
- src2 = Register (E), Indirect 0,1,IR0,IR1 (I), C4x T2: Indirect (C), Immediate (W)
- src1 = Register (G), Indirect 0,1,IR0,IR1 (J), C4x T2: Indirect (O)
- dst = Register (R)
- Instr: 5/0 - ANDN3, ASH3, LSH3, SUBB3, SUBI3
- Alias: i, i3
-*/
-#define T_CLASS_INSN(name, opcode, level) \
- { name, opcode|0x20000000, 0xffe00000, "E,G;R", level }, \
- { name, opcode|0x20200000, 0xffe00000, "E,J,R", level }, \
- { name, opcode|0x20400000, 0xffe00000, "I,G;R", level }, \
- { name, opcode|0x20600000, 0xffe00000, "I,J,R", level }, \
- { name, opcode|0x30000000, 0xffe00000, "W,G;R", OP_C4X }, \
- { name, opcode|0x30200000, 0xffe00000, "C,G;R", OP_C4X }, \
- { name, opcode|0x30400000, 0xffe00000, "W,O,R", OP_C4X }, \
- { name, opcode|0x30600000, 0xffe00000, "C,O,R", OP_C4X }, \
- { name "3", opcode|0x20000000, 0xffe00000, "E,G;R", level }, \
- { name "3", opcode|0x20200000, 0xffe00000, "E,J,R", level }, \
- { name "3", opcode|0x20400000, 0xffe00000, "I,G;R", level }, \
- { name "3", opcode|0x20600000, 0xffe00000, "I,J,R", level }, \
- { name "3", opcode|0x30000000, 0xffe00000, "W,G;R", OP_C4X }, \
- { name "3", opcode|0x30200000, 0xffe00000, "C,G;R", OP_C4X }, \
- { name "3", opcode|0x30400000, 0xffe00000, "W,O,R", OP_C4X }, \
- { name "3", opcode|0x30600000, 0xffe00000, "C,O,R", OP_C4X }
-
-/* TC: General commutative 3-operand integer operation
- Syntax: <i> src2, src1, dst
- <i> src1, src2, dst
- src2 = Register (E), Indirect 0,1,IR0,IR1 (I), C4x T2: Indirect (C), Immediate (W)
- src1 = Register (G), Indirect 0,1,IR0,IR1 (J), C4x T2: Indirect (O)
- dst = Register (R)
- Instr: 6/2 - ADDC3, ADDI3, AND3, MPYI3, OR3, XOR3, C4x: MPYSHI, MPYUHI
- Alias: i, i3
-*/
-#define TC_CLASS_INSN(name, opcode, level) \
- { name, opcode|0x20000000, 0xffe00000, "E,G;R", level }, \
- { name, opcode|0x20200000, 0xffe00000, "E,J,R", level }, \
- { name, opcode|0x20400000, 0xffe00000, "I,G;R", level }, \
- { name, opcode|0x20600000, 0xffe00000, "I,J,R", level }, \
- { name, opcode|0x30000000, 0xffe00000, "W,G;R", OP_C4X }, \
- { name, opcode|0x30000000, 0xffe00000, "G,W,R", OP_C4X }, \
- { name, opcode|0x30200000, 0xffe00000, "C,G;R", OP_C4X }, \
- { name, opcode|0x30200000, 0xffe00000, "G,C,R", OP_C4X }, \
- { name, opcode|0x30400000, 0xffe00000, "W,O,R", OP_C4X }, \
- { name, opcode|0x30400000, 0xffe00000, "O,W,R", OP_C4X }, \
- { name, opcode|0x30600000, 0xffe00000, "C,O,R", OP_C4X }, \
- { name "3", opcode|0x20000000, 0xffe00000, "E,G;R", level }, \
- { name "3", opcode|0x20200000, 0xffe00000, "E,J,R", level }, \
- { name "3", opcode|0x20400000, 0xffe00000, "I,G;R", level }, \
- { name "3", opcode|0x20600000, 0xffe00000, "I,J,R", level }, \
- { name "3", opcode|0x30000000, 0xffe00000, "W,G;R", OP_C4X }, \
- { name "3", opcode|0x30000000, 0xffe00000, "G,W,R", OP_C4X }, \
- { name "3", opcode|0x30200000, 0xffe00000, "C,G;R", OP_C4X }, \
- { name "3", opcode|0x30200000, 0xffe00000, "G,C,R", OP_C4X }, \
- { name "3", opcode|0x30400000, 0xffe00000, "W,O,R", OP_C4X }, \
- { name "3", opcode|0x30400000, 0xffe00000, "O,W,R", OP_C4X }, \
- { name "3", opcode|0x30600000, 0xffe00000, "C,O,R", OP_C4X }
-
-/* T2: General 3-operand integer operation with 2 args
- Syntax: <i> src2, src1
- src2 = Register (E), Indirect 0,1,IR0,IR1 (I), C4x T2: Indirect (C), Immediate (W)
- src1 = Register (G), Indirect 0,1,IR0,IR1 (J), C4x T2: Indirect (O)
- Instr: 1/0 - CMPI3
- Alias: i, i3
-*/
-#define T2_CLASS_INSN(name, opcode, level) \
- { name, opcode|0x20000000, 0xffe00000, "E,G", level }, \
- { name, opcode|0x20200000, 0xffe00000, "E,J", level }, \
- { name, opcode|0x20400000, 0xffe00000, "I,G", level }, \
- { name, opcode|0x20600000, 0xffe00000, "I,J", level }, \
- { name, opcode|0x30000000, 0xffe00000, "W,G", OP_C4X }, \
- { name, opcode|0x30200000, 0xffe00000, "C,G", OP_C4X }, \
- { name, opcode|0x30400000, 0xffe00000, "W,O", OP_C4X }, \
- { name, opcode|0x30600000, 0xffe00000, "C,O", OP_C4X }, \
- { name "3", opcode|0x20000000, 0xffe00000, "E,G", level }, \
- { name "3", opcode|0x20200000, 0xffe00000, "E,J", level }, \
- { name "3", opcode|0x20400000, 0xffe00000, "I,G", level }, \
- { name "3", opcode|0x20600000, 0xffe00000, "I,J", level }, \
- { name "3", opcode|0x30000000, 0xffe00000, "W,G", OP_C4X }, \
- { name "3", opcode|0x30200000, 0xffe00000, "C,G", OP_C4X }, \
- { name "3", opcode|0x30400000, 0xffe00000, "W,O", OP_C4X }, \
- { name "3", opcode|0x30600000, 0xffe00000, "C,O", OP_C4X }
-
-/* T2C: General commutative 3-operand integer operation with 2 args
- Syntax: <i> src2, src1 - Manual
- <i> src1, src2
- src2 = Register (E), Indirect 0,1,IR0,IR1 (I), C4x T2: Indirect (C), Immediate (W)
- src1 = Register (G), Indirect 0,1,IR0,IR1 (J), C4x T2: Indirect (0)
- Instr: 1/0 - TSTB3
- Alias: i, i3
-*/
-#define T2C_CLASS_INSN(name, opcode, level) \
- { name, opcode|0x20000000, 0xffe00000, "E,G", level }, \
- { name, opcode|0x20200000, 0xffe00000, "E,J", level }, \
- { name, opcode|0x20400000, 0xffe00000, "I,G", level }, \
- { name, opcode|0x20600000, 0xffe00000, "I,J", level }, \
- { name, opcode|0x30000000, 0xffe00000, "W,G", OP_C4X }, \
- { name, opcode|0x30000000, 0xffe00000, "G,W", OP_C4X }, \
- { name, opcode|0x30200000, 0xffe00000, "C,G", OP_C4X }, \
- { name, opcode|0x30200000, 0xffe00000, "G,C", OP_C4X }, \
- { name, opcode|0x30400000, 0xffe00000, "W,O", OP_C4X }, \
- { name, opcode|0x30400000, 0xffe00000, "O,W", OP_C4X }, \
- { name, opcode|0x30600000, 0xffe00000, "C,O", OP_C4X }, \
- { name "3", opcode|0x20000000, 0xffe00000, "E,G", level }, \
- { name "3", opcode|0x20200000, 0xffe00000, "E,J", level }, \
- { name "3", opcode|0x20400000, 0xffe00000, "I,G", level }, \
- { name "3", opcode|0x20600000, 0xffe00000, "I,J", level }, \
- { name "3", opcode|0x30000000, 0xffe00000, "W,G", OP_C4X }, \
- { name "3", opcode|0x30000000, 0xffe00000, "G,W", OP_C4X }, \
- { name "3", opcode|0x30200000, 0xffe00000, "C,G", OP_C4X }, \
- { name "3", opcode|0x30200000, 0xffe00000, "G,C", OP_C4X }, \
- { name "3", opcode|0x30400000, 0xffe00000, "W,O", OP_C4X }, \
- { name "3", opcode|0x30400000, 0xffe00000, "O,W", OP_C4X }, \
- { name "3", opcode|0x30600000, 0xffe00000, "C,O", OP_C4X }
-
-/* Z: Misc operations with or without arguments
- Syntax: <i> <arg1>,...
- Instr: 16 - RETIc, RETSc, SIGI(c3X), SWI, IDLE, IDLE2, RETIcD,
- TRAPc, LATc, LDEP, LDEHI, LDEPE, LDPK, STIK, LDP, IACK
-*/
-
-
-/* Define tic4x opcodes for assembler and disassembler. */
-static const tic4x_inst_t tic4x_insts[] =
-{
- /* Put synonyms after the desired forms in table so that they get
- overwritten in the lookup table. The disassembler will thus
- print the `proper' mnemonics. Note that the disassembler
- only decodes the 11 MSBs, so instructions like ldp @0x500 will
- be printed as ldiu 5, dp. Note that with parallel instructions,
- the second part is executed before the first part, unless
- the sti1||sti2 form is used. We also allow sti2||sti1
- which is equivalent to the default sti||sti form.
- */
- B_CLASS_INSN( "absf", 0x00000000, OP_C3X ),
- P_CLASS_INSN( "absf", "stf", 0xc8000000, OP_C3X ),
- A_CLASS_INSN( "absi", 0x00800000, OP_C3X ),
- P_CLASS_INSN( "absi", "sti", 0xca000000, OP_C3X ),
- A_CLASS_INSN( "addc", 0x01000000, OP_C3X ),
- TC_CLASS_INSN( "addc", 0x00000000, OP_C3X ),
- B_CLASS_INSN( "addf", 0x01800000, OP_C3X ),
- SC_CLASS_INSN( "addf", 0x00800000, OP_C3X ),
- QC_CLASS_INSN( "addf", "stf", 0xcc000000, OP_C3X ),
- A_CLASS_INSN( "addi", 0x02000000, OP_C3X ),
- TC_CLASS_INSN( "addi", 0x01000000, OP_C3X ),
- QC_CLASS_INSN( "addi", "sti", 0xce000000, OP_C3X ),
- AU_CLASS_INSN( "and", 0x02800000, OP_C3X ),
- TC_CLASS_INSN( "and", 0x01800000, OP_C3X ),
- QC_CLASS_INSN( "and", "sti", 0xd0000000, OP_C3X ),
- AU_CLASS_INSN( "andn", 0x03000000, OP_C3X ),
- T_CLASS_INSN( "andn", 0x02000000, OP_C3X ),
- A_CLASS_INSN( "ash", 0x03800000, OP_C3X ),
- T_CLASS_INSN( "ash", 0x02800000, OP_C3X ),
- Q_CLASS_INSN( "ash", "sti", 0xd2000000, OP_C3X ),
- J_CLASS_INSN( "bB", "b", 0x68000000, OP_C3X ),
- J_CLASS_INSN( "bBd", "bd", 0x68200000, OP_C3X ),
- J_CLASS_INSN( "bBaf", "baf", 0x68a00000, OP_C4X ),
- J_CLASS_INSN( "bBat", "bat", 0x68600000, OP_C4X ),
- { "br", 0x60000000, 0xff000000, "B" , OP_C3X }, /* I_CLASS */
- { "brd", 0x61000000, 0xff000000, "B" , OP_C3X }, /* I_CLASS */
- { "call", 0x62000000, 0xff000000, "B" , OP_C3X }, /* I_CLASS */
- { "callB", 0x70000000, 0xffe00000, "Q" , OP_C3X }, /* JS_CLASS */
- { "callB", 0x72000000, 0xffe00000, "P" , OP_C3X }, /* JS_CLASS */
- B_CLASS_INSN( "cmpf", 0x04000000, OP_C3X ),
- S2_CLASS_INSN( "cmpf", 0x03000000, OP_C3X ),
- A_CLASS_INSN( "cmpi", 0x04800000, OP_C3X ),
- T2_CLASS_INSN( "cmpi", 0x03800000, OP_C3X ),
- D_CLASS_INSN( "dbB", "db", 0x6c000000, OP_C3X ),
- D_CLASS_INSN( "dbBd", "dbd", 0x6c200000, OP_C3X ),
- AF_CLASS_INSN( "fix", 0x05000000, OP_C3X ),
- P_CLASS_INSN( "fix", "sti", 0xd4000000, OP_C3X ),
- BI_CLASS_INSN( "float", 0x05800000, OP_C3X ),
- P_CLASS_INSN( "float", "stf", 0xd6000000, OP_C3X ),
- B6_CLASS_INSN( "frieee", 0x1c000000, OP_C4X ),
- P_CLASS_INSN( "frieee","stf", 0xf2000000, OP_C4X ),
- { "iack", 0x1b200000, 0xffe00000, "@" , OP_C3X }, /* Z_CLASS */
- { "iack", 0x1b400000, 0xffe00000, "*" , OP_C3X }, /* Z_CLASS */
- { "idle", 0x06000000, 0xffffffff, "" , OP_C3X }, /* Z_CLASS */
- { "idlez", 0x06000000, 0xffffffff, "" , OP_C3X }, /* Z_CLASS */
- { "idle2", 0x06000001, 0xffffffff, "" , OP_IDLE2 }, /* Z_CLASS */
- { "laj", 0x63000000, 0xff000000, "B" , OP_C4X }, /* I_CLASS */
- { "lajB", 0x70200000, 0xffe00000, "Q" , OP_C4X }, /* JS_CLASS */
- { "lajB", 0x72200000, 0xffe00000, "P" , OP_C4X }, /* JS_CLASS */
- { "latB", 0x74800000, 0xffe00000, "V" , OP_C4X }, /* Z_CLASS */
- A_CLASS_INSN( "lb0", 0xb0000000, OP_C4X ),
- A_CLASS_INSN( "lb1", 0xb0800000, OP_C4X ),
- A_CLASS_INSN( "lb2", 0xb1000000, OP_C4X ),
- A_CLASS_INSN( "lb3", 0xb1800000, OP_C4X ),
- AU_CLASS_INSN( "lbu0", 0xb2000000, OP_C4X ),
- AU_CLASS_INSN( "lbu1", 0xb2800000, OP_C4X ),
- AU_CLASS_INSN( "lbu2", 0xb3000000, OP_C4X ),
- AU_CLASS_INSN( "lbu3", 0xb3800000, OP_C4X ),
- AY_CLASS_INSN( "lda", 0x1e800000, OP_C4X ),
- B_CLASS_INSN( "lde", 0x06800000, OP_C3X ),
- { "ldep", 0x76000000, 0xffe00000, "X,R" , OP_C4X }, /* Z_CLASS */
- B_CLASS_INSN( "ldf", 0x07000000, OP_C3X ),
- LL_CLASS_INSN( "ldf", 0xc4000000, OP_C3X ),
- P_CLASS_INSN( "ldf", "stf", 0xd8000000, OP_C3X ),
- BB_CLASS_INSN( "ldfC", 0x00000000, OP_C3X ),
- B6_CLASS_INSN( "ldfi", 0x07800000, OP_C3X ),
- { "ldhi", 0x1fe00000, 0xffe00000, "U,R" , OP_C4X }, /* Z_CLASS */
- { "ldhi", 0x1fe00000, 0xffe00000, "#,R" , OP_C4X }, /* Z_CLASS */
- A_CLASS_INSN( "ldi", 0x08000000, OP_C3X ),
- LL_CLASS_INSN( "ldi", 0xc6000000, OP_C3X ),
- P_CLASS_INSN( "ldi", "sti", 0xda000000, OP_C3X ),
- AB_CLASS_INSN( "ldiC", 0x10000000, OP_C3X ),
- A6_CLASS_INSN( "ldii", 0x08800000, OP_C3X ),
- { "ldp", 0x50700000, 0xffff0000, "#" , OP_C3X }, /* Z_CLASS - synonym for ldiu #,dp */
- B_CLASS_INSN( "ldm", 0x09000000, OP_C3X ),
- { "ldpe", 0x76800000, 0xffe00000, "Q,Z" , OP_C4X }, /* Z_CLASS */
- { "ldpk", 0x1F700000, 0xffff0000, "#" , OP_C4X }, /* Z_CLASS */
- A_CLASS_INSN( "lh0", 0xba000000, OP_C4X ),
- A_CLASS_INSN( "lh1", 0xba800000, OP_C4X ),
- AU_CLASS_INSN( "lhu0", 0xbb000000, OP_C4X ),
- AU_CLASS_INSN( "lhu1", 0xbb800000, OP_C4X ),
- { "lopower", 0x10800001,0xffffffff, "" , OP_LPWR }, /* Z_CLASS */
- A_CLASS_INSN( "lsh", 0x09800000, OP_C3X ),
- T_CLASS_INSN( "lsh", 0x04000000, OP_C3X ),
- Q_CLASS_INSN( "lsh", "sti", 0xdc000000, OP_C3X ),
- A_CLASS_INSN( "lwl0", 0xb4000000, OP_C4X ),
- A_CLASS_INSN( "lwl1", 0xb4800000, OP_C4X ),
- A_CLASS_INSN( "lwl2", 0xb5000000, OP_C4X ),
- A_CLASS_INSN( "lwl3", 0xb5800000, OP_C4X ),
- A_CLASS_INSN( "lwr0", 0xb6000000, OP_C4X ),
- A_CLASS_INSN( "lwr1", 0xb6800000, OP_C4X ),
- A_CLASS_INSN( "lwr2", 0xb7000000, OP_C4X ),
- A_CLASS_INSN( "lwr3", 0xb7800000, OP_C4X ),
- { "maxspeed",0x10800000,0xffffffff, "" , OP_LPWR }, /* Z_CLASS */
- A_CLASS_INSN( "mb0", 0xb8000000, OP_C4X ),
- A_CLASS_INSN( "mb1", 0xb8800000, OP_C4X ),
- A_CLASS_INSN( "mb2", 0xb9000000, OP_C4X ),
- A_CLASS_INSN( "mb3", 0xb9800000, OP_C4X ),
- A_CLASS_INSN( "mh0", 0xbc000000, OP_C4X ),
- A_CLASS_INSN( "mh1", 0xbc800000, OP_C4X ),
- A_CLASS_INSN( "mh2", 0xbd000000, OP_C4X ),
- A_CLASS_INSN( "mh3", 0xbd800000, OP_C4X ),
- B_CLASS_INSN( "mpyf", 0x0a000000, OP_C3X ),
- SC_CLASS_INSN( "mpyf", 0x04800000, OP_C3X ),
- M_CLASS_INSN( "mpyf", "addf", 0x80000000, OP_C3X ),
- QC_CLASS_INSN( "mpyf", "stf", 0xde000000, OP_C3X ),
- M_CLASS_INSN( "mpyf", "subf", 0x84000000, OP_C3X ),
- A_CLASS_INSN( "mpyi", 0x0a800000, OP_C3X ),
- TC_CLASS_INSN( "mpyi", 0x05000000, OP_C3X ),
- M_CLASS_INSN( "mpyi", "addi", 0x88000000, OP_C3X ),
- QC_CLASS_INSN( "mpyi", "sti", 0xe0000000, OP_C3X ),
- M_CLASS_INSN( "mpyi", "subi", 0x8c000000, OP_C3X ),
- A_CLASS_INSN( "mpyshi", 0x1d800000, OP_C4X ),
- TC_CLASS_INSN( "mpyshi", 0x28800000, OP_C4X ),
- A_CLASS_INSN( "mpyuhi", 0x1e000000, OP_C4X ),
- TC_CLASS_INSN( "mpyuhi", 0x29000000, OP_C4X ),
- A_CLASS_INSN( "negb", 0x0b000000, OP_C3X ),
- B_CLASS_INSN( "negf", 0x0b800000, OP_C3X ),
- P_CLASS_INSN( "negf", "stf", 0xe2000000, OP_C3X ),
- A_CLASS_INSN( "negi", 0x0c000000, OP_C3X ),
- P_CLASS_INSN( "negi", "sti", 0xe4000000, OP_C3X ),
- A2_CLASS_INSN( "nop", 0x0c800000, OP_C3X ),
- B_CLASS_INSN( "norm", 0x0d000000, OP_C3X ),
- AU_CLASS_INSN( "not", 0x0d800000, OP_C3X ),
- P_CLASS_INSN( "not", "sti", 0xe6000000, OP_C3X ),
- AU_CLASS_INSN( "or", 0x10000000, OP_C3X ),
- TC_CLASS_INSN( "or", 0x05800000, OP_C3X ),
- QC_CLASS_INSN( "or", "sti", 0xe8000000, OP_C3X ),
- R_CLASS_INSN( "pop", 0x0e200000, OP_C3X ),
- RF_CLASS_INSN( "popf", 0x0ea00000, OP_C3X ),
- R_CLASS_INSN( "push", 0x0f200000, OP_C3X ),
- RF_CLASS_INSN( "pushf", 0x0fa00000, OP_C3X ),
- BA_CLASS_INSN( "rcpf", 0x1d000000, OP_C4X ),
- { "retiB", 0x78000000, 0xffe00000, "" , OP_C3X }, /* Z_CLASS */
- { "reti", 0x78000000, 0xffe00000, "" , OP_C3X }, /* Z_CLASS - Alias for retiu */
- { "retiBd", 0x78200000, 0xffe00000, "" , OP_C4X }, /* Z_CLASS */
- { "retid", 0x78200000, 0xffe00000, "" , OP_C4X }, /* Z_CLASS - Alias for retiud */
- { "retsB", 0x78800000, 0xffe00000, "" , OP_C3X }, /* Z_CLASS */
- { "rets", 0x78800000, 0xffe00000, "" , OP_C3X }, /* Z_CLASS - Alias for retsu */
- B_CLASS_INSN( "rnd", 0x11000000, OP_C3X ),
- R_CLASS_INSN( "rol", 0x11e00001, OP_C3X ),
- R_CLASS_INSN( "rolc", 0x12600001, OP_C3X ),
- R_CLASS_INSN( "ror", 0x12e0ffff, OP_C3X ),
- R_CLASS_INSN( "rorc", 0x1360ffff, OP_C3X ),
- { "rptb", 0x64000000, 0xff000000, "B" , OP_C3X }, /* I2_CLASS */
- { "rptb", 0x79000000, 0xff000000, "Q" , OP_C4X }, /* I2_CLASS */
- { "rptbd", 0x65000000, 0xff000000, "B" , OP_C4X }, /* I2_CLASS */
- { "rptbd", 0x79800000, 0xff000000, "Q" , OP_C4X }, /* I2_CLASS */
- A3_CLASS_INSN( "rpts", 0x139b0000, OP_C3X ),
- B_CLASS_INSN( "rsqrf", 0x1c800000, OP_C4X ),
- { "sigi", 0x16000000, 0xffe00000, "" , OP_C3X }, /* Z_CLASS */
- A6_CLASS_INSN( "sigi", 0x16000000, OP_C4X ),
- B7_CLASS_INSN( "stf", 0x14000000, OP_C3X ),
- LS_CLASS_INSN( "stf", 0xc0000000, OP_C3X ),
- B7_CLASS_INSN( "stfi", 0x14800000, OP_C3X ),
- A7_CLASS_INSN( "sti", 0x15000000, OP_C3X ),
- { "sti", 0x15000000, 0xffe00000, "T,@" , OP_C4X }, /* Class A7 - Alias for stik */
- { "sti", 0x15600000, 0xffe00000, "T,*" , OP_C4X }, /* Class A7 */
- LS_CLASS_INSN( "sti", 0xc2000000, OP_C3X ),
- A7_CLASS_INSN( "stii", 0x15800000, OP_C3X ),
- { "stik", 0x15000000, 0xffe00000, "T,@" , OP_C4X }, /* Z_CLASS */
- { "stik", 0x15600000, 0xffe00000, "T,*" , OP_C4X }, /* Z_CLASS */
- A_CLASS_INSN( "subb", 0x16800000, OP_C3X ),
- T_CLASS_INSN( "subb", 0x06000000, OP_C3X ),
- A_CLASS_INSN( "subc", 0x17000000, OP_C3X ),
- B_CLASS_INSN( "subf", 0x17800000, OP_C3X ),
- S_CLASS_INSN( "subf", 0x06800000, OP_C3X ),
- Q_CLASS_INSN( "subf", "stf", 0xea000000, OP_C3X ),
- A_CLASS_INSN( "subi", 0x18000000, OP_C3X ),
- T_CLASS_INSN( "subi", 0x07000000, OP_C3X ),
- Q_CLASS_INSN( "subi", "sti", 0xec000000, OP_C3X ),
- A_CLASS_INSN( "subrb", 0x18800000, OP_C3X ),
- B_CLASS_INSN( "subrf", 0x19000000, OP_C3X ),
- A_CLASS_INSN( "subri", 0x19800000, OP_C3X ),
- { "swi", 0x66000000, 0xffffffff, "" , OP_C3X }, /* Z_CLASS */
- B_CLASS_INSN( "toieee", 0x1b800000, OP_C4X ),
- P_CLASS_INSN( "toieee","stf", 0xf0000000, OP_C4X ),
- { "trapB", 0x74000000, 0xffe00000, "V" , OP_C3X }, /* Z_CLASS */
- { "trap", 0x74000000, 0xffe00000, "V" , OP_C3X }, /* Z_CLASS - Alias for trapu */
- AU_CLASS_INSN( "tstb", 0x1a000000, OP_C3X ),
- T2C_CLASS_INSN("tstb", 0x07800000, OP_C3X ),
- AU_CLASS_INSN( "xor", 0x1a800000, OP_C3X ),
- TC_CLASS_INSN( "xor", 0x08000000, OP_C3X ),
- QC_CLASS_INSN( "xor", "sti", 0xee000000, OP_C3X ),
-
- /* Dummy entry, not included in tic4x_num_insts. This
- lets code examine entry i + 1 without checking
- if we've run off the end of the table. */
- { "", 0x0, 0x00, "", 0 }
-};
-
-const unsigned int tic4x_num_insts = (((sizeof tic4x_insts) / (sizeof tic4x_insts[0])) - 1);
diff --git a/include/opcode/tic54x.h b/include/opcode/tic54x.h
deleted file mode 100644
index f468714ee..000000000
--- a/include/opcode/tic54x.h
+++ /dev/null
@@ -1,163 +0,0 @@
-/* tic54x.h -- Header file for TI TMS320C54X opcode table
- Copyright 1999, 2000, 2001, 2005, 2009, 2010 Free Software Foundation, Inc.
- Written by Timothy Wall (twall@cygnus.com)
-
- This file is part of GDB, GAS, and the GNU binutils.
-
- GDB, GAS, and the GNU binutils are free software; you can redistribute
- them and/or modify them under the terms of the GNU General Public
- License as published by the Free Software Foundation; either version 3,
- or (at your option) any later version.
-
- GDB, GAS, and the GNU binutils are distributed in the hope that they
- 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 file; see the file COPYING3. If not, write to the Free
- Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
- 02110-1301, USA. */
-
-#ifndef _opcode_tic54x_h_
-#define _opcode_tic54x_h_
-
-typedef struct _symbol
-{
- const char *name;
- unsigned short value;
-} symbol;
-
-enum optype {
- OPT = 0x8000,
- OP_None = 0x0,
-
- OP_Xmem, /* AR3 or AR4, indirect */
- OP_Ymem, /* AR3 or AR4, indirect */
- OP_pmad, /* PROG mem, direct */
- OP_dmad, /* DATA mem, direct */
- OP_Smem,
- OP_Lmem, /* 32-bit single-addressed (direct/indirect) */
- OP_MMR,
- OP_PA,
- OP_Sind,
- OP_xpmad,
- OP_xpmad_ms7,
- OP_MMRX,
- OP_MMRY,
-
- OP_SRC1, /* src accumulator in bit 8 */
- OP_SRC, /* src accumulator in bit 9 */
- OP_RND, /* rounded result dst accumulator, opposite of bit 8 */
- OP_DST, /* dst accumulator in bit 8 */
- OP_ARX, /* arX in bits 0-3 */
- OP_SHIFT, /* -16 to 15 (SHIFT), bits 0-4 */
- OP_SHFT, /* 0 to 15 (SHIFT1 in summary), bits 0-3 */
- OP_B, /* ACC B only */
- OP_A, /* ACC A only */
-
- OP_lk, /* 16-bit immediate, '#' optional */
- OP_TS,
- OP_k8, /* -128 <= k <= 128 */
- OP_16, /* literal "16" */
- OP_BITC, /* 0 to 16 */
- OP_CC, /* condition code */
- OP_CC2, /* 4-bit condition code */
- OP_CC3, /* 2-bit condition code */
- OP_123, /* 1, 2, or 3 */
- OP_031, /* 0-31, numeric */
- OP_k5, /* 0 to 31 */
- OP_k8u, /* 0 to 255 */
- OP_ASM, /* "ASM" */
- OP_T, /* "T" */
- OP_DP, /* "DP" */
- OP_ARP, /* "ARP" */
- OP_k3, /* 0-7 */
- OP_lku, /* 0 to 65535 */
- OP_N, /* 0/1 or ST0/ST1 */
- OP_SBIT, /* status bit or 0-15 */
- OP_12, /* one or two */
- OP_k9, /* 9 bits of data page (DP) address */
- OP_TRN, /* "TRN" */
-
-};
-
-typedef struct _template
-{
- /* The opcode mnemonic */
- const char *name;
- unsigned int words; /* insn size in words */
- int minops, maxops; /* min/max operand count */
- /* The significant bits in the opcode. Other bits are zero.
- Instructions with more than 16 bits of opcode store the rest in the upper
- 16 bits.
- */
- unsigned short opcode;
-#define INDIRECT(OP) ((OP)&0x80)
-#define MOD(OP) (((OP)>>3)&0xF)
-#define ARF(OP) ((OP)&0x7)
-#define IS_LKADDR(OP) (INDIRECT(OP) && MOD(OP)>=12)
-#define SRC(OP) ((OP)&0x200)
-#define DST(OP) ((OP)&0x100)
-#define SRC1(OP) ((OP)&0x100)
-#define SHIFT(OP) (((OP)&0x10)?(((OP)&0x1F)-32):((OP)&0x1F))
-#define SHFT(OP) ((OP)&0xF)
-#define ARX(OP) ((OP)&0x7)
-#define XMEM(OP) (((OP)&0x00F0)>>4)
-#define YMEM(OP) ((OP)&0x000F)
-#define XMOD(C) (((C)&0xC)>>2)
-#define XARX(C) (((C)&0x3)+2)
-#define CC3(OP) (((OP)>>8)&0x3)
-#define SBIT(OP) ((OP)&0xF)
-#define MMR(OP) ((OP)&0x7F)
-#define MMRX(OP) ((((OP)>>4)&0xF)+16)
-#define MMRY(OP) (((OP)&0xF)+16)
-
-#define OPTYPE(X) ((X)&~OPT)
-
- /* Ones in this mask indicate which bits must match the opcode field.
- Zeroes indicate don't care bits (operands and/or opcode options) */
- unsigned short mask;
-
- /* An array of operand codes (at most 4 operands) */
-#define MAX_OPERANDS 4
- enum optype operand_types[MAX_OPERANDS];
-
- /* Special purpose flags (e.g. branch type, parallel, delay, etc)
- */
- unsigned short flags;
-#define B_NEXT 0 /* normal execution, next insn is next address */
-#define B_BRANCH 1 /* next insn is in opcode */
-#define B_RET 2 /* next insn is on stack */
-#define B_BACC 3 /* next insn is in acc */
-#define B_REPEAT 4 /* next insn repeats */
-#define FL_BMASK 0x07
-
-#define FL_DELAY 0x10 /* instruction uses delay slots */
-#define FL_EXT 0x20 /* instruction takes two words */
-#define FL_FAR 0x40 /* far mode addressing */
-#define FL_LP 0x80 /* LP-only instruction */
-#define FL_NR 0x100 /* no repeat allowed */
-#define FL_SMR 0x200 /* Smem read (for flagging write-only *+ARx */
-
-#define FL_PAR 0x400 /* Parallel instruction. */
-
- unsigned short opcode2, mask2; /* some insns have an extended opcode */
-
- const char* parname;
- enum optype paroperand_types[MAX_OPERANDS];
-
-} insn_template;
-
-extern const insn_template tic54x_unknown_opcode;
-extern const insn_template tic54x_optab[];
-extern const insn_template tic54x_paroptab[];
-extern const symbol mmregs[], regs[];
-extern const symbol condition_codes[], cc2_codes[], status_bits[];
-extern const symbol cc3_codes[];
-extern const char *misc_symbols[];
-struct disassemble_info;
-extern const insn_template* tic54x_get_insn (struct disassemble_info *,
- bfd_vma, unsigned short, int *);
-
-#endif /* _opcode_tic54x_h_ */
diff --git a/include/opcode/tic6x-control-registers.h b/include/opcode/tic6x-control-registers.h
deleted file mode 100644
index b4387779a..000000000
--- a/include/opcode/tic6x-control-registers.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/* TI C6X control register information.
- Copyright 2010
- 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-/* Define the CTRL macro before including this file; it takes as
- arguments the fields from tic6x_ctrl (defined in tic6x.h). The
- control register name is given as an identifier; the isa_variants
- field without the leading TIC6X_INSN_; the rw field without the
- leading tic6x_rw_. */
-
-CTRL(amr, C62X, read_write, 0x0, 0x10)
-CTRL(csr, C62X, read_write, 0x1, 0x10)
-CTRL(dnum, C64XP, read, 0x11, 0x1f)
-CTRL(ecr, C64XP, write, 0x1d, 0x1f)
-CTRL(efr, C64XP, read, 0x1d, 0x1f)
-CTRL(fadcr, C67X, read_write, 0x12, 0x1f)
-CTRL(faucr, C67X, read_write, 0x13, 0x1f)
-CTRL(fmcr, C67X, read_write, 0x14, 0x1f)
-CTRL(gfpgfr, C64X, read_write, 0x18, 0x1f)
-CTRL(gplya, C64XP, read_write, 0x16, 0x1f)
-CTRL(gplyb, C64XP, read_write, 0x17, 0x1f)
-CTRL(icr, C62X, write, 0x3, 0x10)
-CTRL(ier, C62X, read_write, 0x4, 0x10)
-CTRL(ierr, C64XP, read_write, 0x1f, 0x1f)
-CTRL(ifr, C62X, read, 0x2, 0x1d)
-CTRL(ilc, C64XP, read_write, 0xd, 0x1f)
-CTRL(irp, C62X, read_write, 0x6, 0x10)
-CTRL(isr, C62X, write, 0x2, 0x10)
-CTRL(istp, C62X, read_write, 0x5, 0x10)
-CTRL(itsr, C64XP, read_write, 0x1b, 0x1f)
-CTRL(nrp, C62X, read_write, 0x7, 0x10)
-CTRL(ntsr, C64XP, read_write, 0x1c, 0x1f)
-CTRL(pce1, C62X, read, 0x10, 0xf)
-CTRL(rep, C64XP, read_write, 0xf, 0x1f)
-CTRL(rilc, C64XP, read_write, 0xe, 0x1f)
-CTRL(ssr, C64XP, read_write, 0x15, 0x1f)
-CTRL(tsch, C64XP, read, 0xb, 0x1f)
-/* Contrary to Table 3-26 in SPRUFE8, this register is read-write, as
- documented in section 2.9.13. */
-CTRL(tscl, C64XP, read_write, 0xa, 0x1f)
-CTRL(tsr, C64XP, read_write, 0x1a, 0x1f)
diff --git a/include/opcode/tic6x-insn-formats.h b/include/opcode/tic6x-insn-formats.h
deleted file mode 100644
index 80bc9fac1..000000000
--- a/include/opcode/tic6x-insn-formats.h
+++ /dev/null
@@ -1,616 +0,0 @@
-/* TI C6X instruction format information.
- Copyright 2010-2013 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-/* Define the FMT macro before including this file; it takes a name
- and the fields from tic6x_insn_format (defined in tic6x.h). */
-
-/* Expansion fields values for 16 bits insn. */
-#define SAT(a) (((a) & 1) << TIC6X_COMPACT_SAT_POS)
-#define BR(a) (((a) & 1) << TIC6X_COMPACT_BR_POS)
-#define DSZ(a) (((a) & 7) << TIC6X_COMPACT_DSZ_POS)
-/* Composite fields for 16 bits insn. */
-#define BFLD(low_pos, width, pos) { (low_pos), (width), (pos) }
-#define BFLD1(a) 1, { a }
-#define BFLD2(a, b) 2, { a, b }
-#define BFLD3(a, b, c) 3, { a, b, c }
-#define BFLD4(a, b, c, d) 4, { a, b, c, d }
-#define COMPFLD(name, bitfields) { CONCAT2(tic6x_field_,name), bitfields }
-/**/
-#define FLD(name, pos, width) { CONCAT2(tic6x_field_,name), BFLD1(BFLD(pos, width, 0)) }
-#define CFLDS FLD(p, 0, 1), FLD(creg, 29, 3), FLD(z, 28, 1)
-#define CFLDS2(a, b) 5, { CFLDS, a, b }
-#define CFLDS3(a, b, c) 6, { CFLDS, a, b, c }
-#define CFLDS4(a, b, c, d) 7, { CFLDS, a, b, c, d }
-#define CFLDS5(a, b, c, d, e) 8, { CFLDS, a, b, c, d, e }
-#define CFLDS6(a, b, c, d, e, f) 9, { CFLDS, a, b, c, d, e, f }
-#define CFLDS7(a, b, c, d, e, f, g) 10, { CFLDS, a, b, c, d, e, f, g }
-#define CFLDS8(a, b, c, d, e, f, g, h) 11, { CFLDS, a, b, c, d, e, f, g, h }
-#define NFLDS FLD(p, 0, 1)
-#define NFLDS1(a) 2, { NFLDS, a }
-#define NFLDS2(a, b) 3, { NFLDS, a, b }
-#define NFLDS3(a, b, c) 4, { NFLDS, a, b, c }
-#define NFLDS5(a, b, c, d, e) 6, { NFLDS, a, b, c, d, e }
-#define NFLDS6(a, b, c, d, e, f) 7, { NFLDS, a, b, c, d, e, f }
-#define NFLDS7(a, b, c, d, e, f, g) 8, { NFLDS, a, b, c, d, e, f, g }
-/* 16 bits insn */
-#define FLDS1(a) 1, { a }
-#define FLDS2(a, b) 2, { a, b }
-#define FLDS3(a, b, c) 3, { a, b, c }
-#define FLDS4(a, b, c, d) 4, { a, b, c, d }
-#define FLDS5(a, b, c, d, e) 5, { a, b, c, d, e }
-#define SFLDS FLD(s, 0, 1)
-#define SFLDS1(a) 2, { SFLDS, a }
-#define SFLDS2(a, b) 3, { SFLDS, a, b }
-#define SFLDS3(a, b, c) 4, { SFLDS, a, b, c }
-#define SFLDS4(a, b, c, d) 5, { SFLDS, a, b, c, d }
-#define SFLDS5(a, b, c, d, e) 6, { SFLDS, a, b, c, d, e }
-#define SFLDS6(a, b, c, d, e, f) 7, { SFLDS, a, b, c, d, e, f }
-#define SFLDS7(a, b, c, d, e, f, g) 8, { SFLDS, a, b, c, d, e, f, g }
-/**/
-
-/* These are in the order from SPRUFE8, appendices C-H. */
-
-/* Appendix C 32-bit formats. */
-
-FMT(d_1_or_2_src, 32, 0x40, 0x7c,
- CFLDS5(FLD(s, 1, 1), FLD(op, 7, 6), FLD(src1, 13, 5), FLD(src2, 18, 5),
- FLD(dst, 23, 5)))
-FMT(d_ext_1_or_2_src, 32, 0x830, 0xc3c,
- CFLDS6(FLD(s, 1, 1), FLD(op, 6, 4), FLD(x, 12, 1), FLD(src1, 13, 5),
- FLD(src2, 18, 5), FLD(dst, 23, 5)))
-FMT(d_load_store, 32, 0x4, 0xc,
- CFLDS8(FLD(s, 1, 1), FLD(op, 4, 3), FLD(y, 7, 1), FLD(r, 8, 1),
- FLD(mode, 9, 4), FLD(offsetR, 13, 5), FLD(baseR, 18, 5),
- FLD(srcdst, 23, 5)))
-/* The nonaligned loads and stores have the formats shown in the
- individual instruction descriptions; the appendix is incorrect. */
-FMT(d_load_nonaligned, 32, 0x124, 0x17c,
- CFLDS7(FLD(s, 1, 1), FLD(y, 7, 1), FLD(mode, 9, 4), FLD(offsetR, 13, 5),
- FLD(baseR, 18, 5), FLD(sc, 23, 1), FLD(dst, 24, 4)))
-FMT(d_store_nonaligned, 32, 0x174, 0x17c,
- CFLDS7(FLD(s, 1, 1), FLD(y, 7, 1), FLD(mode, 9, 4), FLD(offsetR, 13, 5),
- FLD(baseR, 18, 5), FLD(sc, 23, 1), FLD(src, 24, 4)))
-FMT(d_load_store_long, 32, 0xc, 0xc,
- CFLDS5(FLD(s, 1, 1), FLD(op, 4, 3), FLD(y, 7, 1), FLD(offsetR, 8, 15),
- FLD(dst, 23, 5)))
-FMT(d_adda_long, 32, 0x1000000c, 0xf000000c,
- NFLDS5(FLD(s, 1, 1), FLD(op, 4, 3), FLD(y, 7, 1), FLD(offsetR, 8, 15),
- FLD(dst, 23, 5)))
-
-/* Appendix C 16-bit formats will go here. */
-
-/* C-8 */
-FMT(d_doff4_dsz_0xx, 16, DSZ(0) | 0x0004, DSZ(0x4) | 0x0406,
- SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1), FLD(t, 12, 1),
- COMPFLD(cst, BFLD2(BFLD(13, 3, 0), BFLD(11, 1, 3)))))
-FMT(d_doff4_dsz_100, 16, DSZ(4) | 0x0004, DSZ(0x7) | 0x0406,
- SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1), FLD(t, 12, 1),
- COMPFLD(cst, BFLD2(BFLD(13, 3, 0), BFLD(11, 1, 3)))))
-FMT(d_doff4_dsz_000, 16, DSZ(0) | 0x0004, DSZ(0x7) | 0x0406,
- SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1), FLD(t, 12, 1),
- COMPFLD(cst, BFLD2(BFLD(13, 3, 0), BFLD(11, 1, 3)))))
-FMT(d_doff4_dsz_x01, 16, DSZ(1) | 0x0004, DSZ(0x3) | 0x0406,
- SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1), FLD(t, 12, 1),
- COMPFLD(cst, BFLD2(BFLD(13, 3, 0), BFLD(11, 1, 3)))))
-FMT(d_doff4_dsz_01x, 16, DSZ(2) | 0x0004, DSZ(0x6) | 0x0406,
- SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1), FLD(t, 12, 1),
- COMPFLD(cst, BFLD2(BFLD(13, 3, 0), BFLD(11, 1, 3)))))
-FMT(d_doff4_dsz_111, 16, DSZ(7) | 0x0004, DSZ(0x7) | 0x0406,
- SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1), FLD(t, 12, 1),
- COMPFLD(cst, BFLD2(BFLD(13, 3, 0), BFLD(11, 1, 3)))))
-FMT(d_doff4_dsz_x11, 16, DSZ(3) | 0x0004, DSZ(0x3) | 0x0406,
- SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1), FLD(t, 12, 1),
- COMPFLD(cst, BFLD2(BFLD(13, 3, 0), BFLD(11, 1, 3)))))
-FMT(d_doff4_dsz_010, 16, DSZ(2) | 0x0004, DSZ(0x7) | 0x0406,
- SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1), FLD(t, 12, 1),
- COMPFLD(cst, BFLD2(BFLD(13, 3, 0), BFLD(11, 1, 3)))))
-FMT(d_doff4_dsz_110, 16, DSZ(6) | 0x0004, DSZ(0x7) | 0x0406,
- SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1), FLD(t, 12, 1),
- COMPFLD(cst, BFLD2(BFLD(13, 3, 0), BFLD(11, 1, 3)))))
-
-/* C-9 */
-FMT(d_doff4dw, 16, DSZ(4) | 0x0004, DSZ(0x4) | 0x0406,
- SFLDS7(FLD(op, 3, 1), FLD(na, 4, 1), FLD(srcdst, 5, 2), FLD(ptr, 7, 2), FLD(sz, 9, 1), FLD(t, 12, 1),
- COMPFLD(cst, BFLD2(BFLD(13, 3, 0), BFLD(11, 1, 3)))))
-
-/* C-10 */
-FMT(d_dind_dsz_0xx, 16, DSZ(0) | 0x0404, DSZ(0x4) | 0x0c06,
- SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
- FLD(t, 12, 1), FLD(src1, 13, 3)))
-
-FMT(d_dind_dsz_x01, 16, DSZ(1) | 0x0404, DSZ(0x3) | 0x0c06,
- SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
- FLD(t, 12, 1), FLD(src1, 13, 3)))
-
-FMT(d_dind_dsz_x11, 16, DSZ(3) | 0x0404, DSZ(0x3) | 0x0c06,
- SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
- FLD(t, 12, 1), FLD(src1, 13, 3)))
-
-FMT(d_dind_dsz_01x, 16, DSZ(2) | 0x0404, DSZ(0x6) | 0x0c06,
- SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
- FLD(t, 12, 1), FLD(src1, 13, 3)))
-
-FMT(d_dind_dsz_000, 16, DSZ(0) | 0x0404, DSZ(0x7) | 0x0c06,
- SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
- FLD(t, 12, 1), FLD(src1, 13, 3)))
-
-FMT(d_dind_dsz_010, 16, DSZ(2) | 0x0404, DSZ(0x7) | 0x0c06,
- SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
- FLD(t, 12, 1), FLD(src1, 13, 3)))
-
-FMT(d_dind_dsz_100, 16, DSZ(4) | 0x0404, DSZ(0x7) | 0x0c06,
- SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
- FLD(t, 12, 1), FLD(src1, 13, 3)))
-
-FMT(d_dind_dsz_110, 16, DSZ(6) | 0x0404, DSZ(0x7) | 0x0c06,
- SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
- FLD(t, 12, 1), FLD(src1, 13, 3)))
-
-FMT(d_dind_dsz_111, 16, DSZ(7) | 0x0404, DSZ(0x7) | 0x0c06,
- SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
- FLD(t, 12, 1), FLD(src1, 13, 3)))
-
-/* C-11 */
-FMT(d_dinddw, 16, DSZ(4) | 0x0404, DSZ(0x4) | 0x0c06,
- SFLDS7(FLD(op, 3, 1), FLD(na, 4, 1), FLD(srcdst, 5, 2), FLD(ptr, 7, 2),
- FLD(sz, 9, 1), FLD(t, 12, 1), FLD(src1, 13, 3)))
-
-/* C-12 */
-FMT(d_dinc_dsz_x01, 16, DSZ(1) | 0x0c04, DSZ(0x3) | 0xcc06,
- SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
- FLD(t, 12, 1), FLD(cst, 13, 1)))
-
-FMT(d_dinc_dsz_0xx, 16, DSZ(0) | 0x0c04, DSZ(0x4) | 0xcc06,
- SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
- FLD(t, 12, 1), FLD(cst, 13, 1)))
-
-FMT(d_dinc_dsz_01x, 16, DSZ(2) | 0x0c04, DSZ(0x6) | 0xcc06,
- SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
- FLD(t, 12, 1), FLD(cst, 13, 1)))
-
-FMT(d_dinc_dsz_x11,16, DSZ(3) | 0x0c04, DSZ(0x3) | 0xcc06,
- SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
- FLD(t, 12, 1), FLD(cst, 13, 1)))
-
-FMT(d_dinc_dsz_000, 16, DSZ(0) | 0x0c04, DSZ(0x7) | 0xcc06,
- SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
- FLD(t, 12, 1), FLD(cst, 13, 1)))
-
-FMT(d_dinc_dsz_010, 16, DSZ(2) | 0x0c04, DSZ(0x7) | 0xcc06,
- SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
- FLD(t, 12, 1), FLD(cst, 13, 1)))
-
-FMT(d_dinc_dsz_100, 16, DSZ(4) | 0x0c04, DSZ(0x7) | 0xcc06,
- SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
- FLD(t, 12, 1), FLD(cst, 13, 1)))
-
-FMT(d_dinc_dsz_110, 16, DSZ(6) | 0x0c04, DSZ(0x7) | 0xcc06,
- SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
- FLD(t, 12, 1), FLD(cst, 13, 1)))
-
-FMT(d_dinc_dsz_111, 16, DSZ(7) | 0x0c04, DSZ(0x7) | 0xcc06,
- SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
- FLD(t, 12, 1), FLD(cst, 13, 1)))
-
-/* C-13*/
-FMT(d_dincdw, 16, DSZ(4) | 0x0c04, DSZ(0x4) | 0xcc06,
- SFLDS7(FLD(op, 3, 1), FLD(na, 4, 1), FLD(srcdst, 5, 2), FLD(ptr, 7, 2),
- FLD(sz, 9, 1), FLD(t, 12, 1), FLD(cst, 13, 1)))
-
-/* C-14 */
-FMT(d_ddec_dsz_01x, 16, DSZ(2) | 0x4c04, DSZ(0x6) | 0xcc06,
- SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
- FLD(t, 12, 1), FLD(cst, 13, 1)))
-
-FMT(d_ddec_dsz_0xx, 16, DSZ(0) | 0x4c04, DSZ(0x4) | 0xcc06,
- SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
- FLD(t, 12, 1), FLD(cst, 13, 1)))
-
-FMT(d_ddec_dsz_x01, 16, DSZ(1) | 0x4c04, DSZ(0x3) | 0xcc06,
- SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
- FLD(t, 12, 1), FLD(cst, 13, 1)))
-
-FMT(d_ddec_dsz_x11, 16, DSZ(3) | 0x4c04, DSZ(0x3) | 0xcc06,
- SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
- FLD(t, 12, 1), FLD(cst, 13, 1)))
-
-FMT(d_ddec_dsz_000, 16, DSZ(0) | 0x4c04, DSZ(0x7) | 0xcc06,
- SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
- FLD(t, 12, 1), FLD(cst, 13, 1)))
-
-FMT(d_ddec_dsz_010, 16, DSZ(2) | 0x4c04, DSZ(0x7) | 0xcc06,
- SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
- FLD(t, 12, 1), FLD(cst, 13, 1)))
-
-FMT(d_ddec_dsz_100, 16, DSZ(4) | 0x4c04, DSZ(0x7) | 0xcc06,
- SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
- FLD(t, 12, 1), FLD(cst, 13, 1)))
-
-FMT(d_ddec_dsz_110, 16, DSZ(6) | 0x4c04, DSZ(0x7) | 0xcc06,
- SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
- FLD(t, 12, 1), FLD(cst, 13, 1)))
-
-FMT(d_ddec_dsz_111, 16, DSZ(7) | 0x4c04, DSZ(0x7) | 0xcc06,
- SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
- FLD(t, 12, 1), FLD(cst, 13, 1)))
-
-/* C-15 */
-FMT(d_ddecdw, 16, DSZ(4) | 0x4c04, DSZ(0x4) | 0xcc06,
- SFLDS7(FLD(op, 3, 1), FLD(na, 4, 1), FLD(srcdst, 5, 2), FLD(ptr, 7, 2),
- FLD(sz, 9, 1), FLD(t, 12, 1), FLD(cst, 13, 1)))
-
-/* C-16 */
-FMT(d_dstk, 16, 0x8c04, 0x8c06,
- SFLDS4(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(t, 12, 1),
- COMPFLD(cst, BFLD2(BFLD(7, 3, 2), BFLD(13, 2, 0)))))
-
-/* C-17 */
-FMT(d_dx2op, 16, 0x0036, 0x047e,
- SFLDS4(FLD(src2, 7, 3), FLD(op, 11, 1), FLD(x, 12, 1), FLD(srcdst, 13, 3)))
-
-/* C-18 */
-FMT(d_dx5, 16, 0x0436, 0x047e,
- SFLDS2(FLD(dst, 7, 3),
- COMPFLD(cst, BFLD2(BFLD(11, 2, 3), BFLD(13, 3, 0)))))
-
-/* C-19 */
-FMT(d_dx5p, 16, 0x0c76, 0x1c7e,
- SFLDS2(FLD(op, 7, 1),
- COMPFLD(cst, BFLD2(BFLD(8, 2, 3), BFLD(13, 3, 0)))))
-
-/* C-20 */
-FMT(d_dx1, 16, 0x1876, 0x1c7e,
- SFLDS2(FLD(srcdst, 7, 3), FLD(op, 13, 3)))
-
-/* C-21 */
-FMT(d_dpp, 16, 0x0077, 0x087f,
- SFLDS5(FLD(srcdst, 7, 4), FLD(t, 12, 1), FLD(cst, 13, 1), FLD(op, 14, 1),
- FLD(dw, 15, 1)))
-
-/* Appendix D 32-bit formats. */
-
-FMT(l_1_or_2_src, 32, 0x18, 0x1c,
- CFLDS6(FLD(s, 1, 1), FLD(op, 5, 7), FLD(x, 12, 1), FLD(src1, 13, 5),
- FLD(src2, 18, 5), FLD(dst, 23, 5)))
-FMT(l_1_or_2_src_noncond, 32, 0x10000018, 0xf000001c,
- NFLDS6(FLD(s, 1, 1), FLD(op, 5, 7), FLD(x, 12, 1), FLD(src1, 13, 5),
- FLD(src2, 18, 5), FLD(dst, 23, 5)))
-FMT(l_unary, 32, 0x358, 0xffc,
- CFLDS5(FLD(s, 1, 1), FLD(x, 12, 1), FLD(op, 13, 5), FLD(src2, 18, 5),
- FLD(dst, 23, 5)))
-
-/* Appendix D 16-bit formats will go here. */
-
-/* D-4 */
-FMT(l_l3_sat_0, 16, SAT(0) | 0x0000, SAT(1) | 0x040e,
- SFLDS5(FLD(dst, 4, 3), FLD(src2, 7, 3), FLD(op, 11, 1), FLD(x, 12, 1),
- FLD(src1, 13, 3)))
-
-FMT(l_l3_sat_1, 16, SAT(1) | 0x0000, SAT(1) | 0x040e,
- SFLDS5(FLD(dst, 4, 3), FLD(src2, 7, 3), FLD(op, 11, 1), FLD(x, 12, 1),
- FLD(src1, 13, 3)))
-
-/* D-5 - combine cst3 and n fields into a single field cst */
-FMT(l_l3i, 16, 0x0400, 0x040e,
- SFLDS5(FLD(dst, 4, 3), FLD(src2, 7, 3), FLD(sn, 11, 1), FLD(x, 12, 1),
- COMPFLD(cst, BFLD2(BFLD(13, 3, 0), BFLD(11, 1, 3)))))
-
-/* D-6 Mtbd ? */
-
-/* D-7 */
-FMT(l_l2c, 16, 0x0408, 0x040e,
- SFLDS5(FLD(dst, 4, 1), FLD(src2, 7, 3), FLD(x, 12, 1), FLD(src1, 13, 3),
- COMPFLD(op, BFLD2(BFLD(5, 2, 0), BFLD(11, 1, 2)))))
-
-/* D-8 */
-FMT(l_lx5, 16, 0x0426, 0x047e,
- SFLDS2(FLD(dst, 7, 3),
- COMPFLD(cst, BFLD2(BFLD(11, 2, 3), BFLD(13, 3, 0)))))
-
-/* D-9 */
-FMT(l_lx3c, 16, 0x0026, 0x147e,
- SFLDS3(FLD(src2, 7, 3), FLD(dst, 11, 1), FLD(cst, 13, 3)))
-
-/* D-10 */
-FMT(l_lx1c, 16, 0x1026, 0x147e,
- SFLDS4(FLD(src2, 7, 3), FLD(dst, 11, 1), FLD(cst, 13, 1), FLD(op, 14, 2)))
-
-/* D-11 */
-FMT(l_lx1, 16, 0x1866, 0x1c7e,
- SFLDS2(FLD(srcdst, 7, 3), FLD(op, 13, 3)))
-
-/* Appendix E 32-bit formats. */
-
-FMT(m_compound, 32, 0x30, 0x83c,
- CFLDS6(FLD(s, 1, 1), FLD(op, 6, 5), FLD(x, 12, 1), FLD(src1, 13, 5),
- FLD(src2, 18, 5), FLD(dst, 23, 5)))
-FMT(m_1_or_2_src, 32, 0x10000030, 0xf000083c,
- NFLDS6(FLD(s, 1, 1), FLD(op, 6, 5), FLD(x, 12, 1), FLD(src1, 13, 5),
- FLD(src2, 18, 5), FLD(dst, 23, 5)))
-/* Contrary to SPRUFE8, this does have predicate fields. */
-FMT(m_unary, 32, 0xf0, 0xffc,
- CFLDS5(FLD(s, 1, 1), FLD(x, 12, 1), FLD(op, 13, 5), FLD(src2, 18, 5),
- FLD(dst, 23, 5)))
-
-/* M-unit formats missing from Appendix E. */
-FMT(m_mpy, 32, 0x0, 0x7c,
- CFLDS6(FLD(s, 1, 1), FLD(op, 7, 5), FLD(x, 12, 1), FLD(src1, 13, 5),
- FLD(src2, 18, 5), FLD(dst, 23, 5)))
-
-/* Appendix E 16-bit formats will go here. */
-FMT(m_m3_sat_0, 16, SAT(0) | 0x001e, SAT(1) | 0x001e,
- SFLDS5(FLD(op, 5, 2), FLD(src2, 7, 3), FLD(dst, 10, 2),
- FLD(x, 12, 1), FLD(src1, 13, 3)))
-FMT(m_m3_sat_1, 16, SAT(1) | 0x001e, SAT(1) | 0x001e,
- SFLDS5(FLD(op, 5, 2), FLD(src2, 7, 3), FLD(dst, 10, 2),
- FLD(x, 12, 1), FLD(src1, 13, 3)))
-
-/* Appendix F 32-bit formats. */
-
-FMT(s_1_or_2_src, 32, 0x20, 0x3c,
- CFLDS6(FLD(s, 1, 1), FLD(op, 6, 6), FLD(x, 12, 1), FLD(src1, 13, 5),
- FLD(src2, 18, 5), FLD(dst, 23 ,5)))
-FMT(s_ext_1_or_2_src, 32, 0xc30, 0xc3c,
- CFLDS6(FLD(s, 1, 1), FLD(op, 6, 4), FLD(x, 12, 1), FLD(src1, 13, 5),
- FLD(src2, 18, 5), FLD(dst, 23, 5)))
-FMT(s_ext_1_or_2_src_noncond, 32, 0xc30, 0xe0000c3c,
- NFLDS7(FLD(s, 1, 1), FLD(op, 6, 4), FLD(x, 12, 1), FLD(src1, 13, 5),
- FLD(src2, 18, 5), FLD(dst, 23, 5), FLD(z, 28, 1)))
-FMT(s_unary, 32, 0xf20, 0xffc,
- CFLDS5(FLD(s, 1, 1), FLD(x, 12, 1), FLD(op, 13, 5), FLD(src2, 18, 5),
- FLD(dst, 23, 5)))
-FMT(s_ext_branch_cond_imm, 32, 0x10, 0x7c,
- CFLDS2(FLD(s, 1, 1), FLD(cst, 7, 21)))
-FMT(s_call_imm_nop, 32, 0x10, 0xe000007c,
- NFLDS3(FLD(s, 1, 1), FLD(cst, 7, 21), FLD(z, 28, 1)))
-FMT(s_branch_nop_cst, 32, 0x120, 0x1ffc,
- CFLDS3(FLD(s, 1, 1), FLD(src1, 13, 3), FLD(src2, 16, 12)))
-FMT(s_branch_nop_reg, 32, 0x800360, 0xf830ffc,
- CFLDS4(FLD(s, 1, 1), FLD(x, 12, 1), FLD(src1, 13, 3), FLD(src2, 18, 5)))
-FMT(s_branch, 32, 0x360, 0xf83effc,
- CFLDS3(FLD(s, 1, 1), FLD(x, 12, 1), FLD(src2, 18, 5)))
-FMT(s_mvk, 32, 0x28, 0x3c,
- CFLDS4(FLD(s, 1, 1), FLD(h, 6, 1), FLD(cst, 7, 16), FLD(dst, 23, 5)))
-FMT(s_field, 32, 0x8, 0x3c,
- CFLDS6(FLD(s, 1, 1), FLD(op, 6, 2), FLD(cstb, 8, 5), FLD(csta, 13, 5),
- FLD(src2, 18, 5), FLD(dst, 23, 5)))
-
-/* S-unit formats missing from Appendix F. */
-FMT(s_addk, 32, 0x50, 0x7c,
- CFLDS3(FLD(s, 1, 1), FLD(cst, 7, 16), FLD(dst, 23, 5)))
-FMT(s_addkpc, 32, 0x160, 0x1ffc,
- CFLDS4(FLD(s, 1, 1), FLD(src2, 13, 3), FLD(src1, 16, 7), FLD(dst, 23, 5)))
-FMT(s_b_irp, 32, 0x1800e0, 0x7feffc,
- CFLDS3(FLD(s, 1, 1), FLD(x, 12, 1), FLD(dst, 23, 5)))
-FMT(s_b_nrp, 32, 0x1c00e0, 0x7feffc,
- CFLDS3(FLD(s, 1, 1), FLD(x, 12, 1), FLD(dst, 23, 5)))
-FMT(s_bdec, 32, 0x1020, 0x1ffc,
- CFLDS3(FLD(s, 1, 1), FLD(src, 13, 10), FLD(dst, 23, 5)))
-FMT(s_bpos, 32, 0x20, 0x1ffc,
- CFLDS3(FLD(s, 1, 1), FLD(src, 13, 10), FLD(dst, 23, 5)))
-
-/* Appendix F 16-bit formats will go here. */
-
-/* F-17 Sbs7 Instruction Format */
-FMT(s_sbs7, 16, BR(1) | 0x000a, BR(1) | 0x003e,
- SFLDS2(FLD(cst, 6, 7), FLD(n, 13, 3)))
-
-/* F-18 Sbu8 Instruction Format */
-FMT(s_sbu8, 16, BR(1) | 0xc00a, BR(1) | 0xc03e,
- SFLDS1(FLD(cst, 6, 8)))
-
-/* F-19 Scs10 Instruction Format */
-FMT(s_scs10, 16, BR(1) | 0x001a, BR(1) | 0x003e,
- SFLDS1(FLD(cst, 6, 10)))
-
-/* F-20 Sbs7c Instruction Format */
-FMT(s_sbs7c, 16, BR(1) | 0x002a, BR(1) | 0x002e,
- SFLDS3(FLD(z, 4, 1), FLD(cst, 6, 7), FLD(n, 13, 3)))
-
-/* F-21 Sbu8c Instruction Format */
-FMT(s_sbu8c, 16, BR(1) | 0xc02a, BR(1) | 0xc02e,
- SFLDS2(FLD(z, 4, 1), FLD(cst, 6, 8)))
-
-/* F-22 S3 Instruction Format */
-FMT(s_s3, 16, BR(0) | 0x000a, BR(1) | 0x040e,
- SFLDS5(FLD(dst, 4, 3), FLD(src2, 7, 3), FLD(op, 11, 1), FLD(x, 12, 1),
- FLD(src1, 13, 3)))
-
-FMT(s_s3_sat_x, 16, BR(0) | SAT(0) | 0x000a, BR(1) | SAT(0) | 0x040e,
- SFLDS5(FLD(dst, 4, 3), FLD(src2, 7, 3), FLD(op, 11, 1), FLD(x, 12, 1),
- FLD(src1, 13, 3)))
-
-FMT(s_s3_sat_0, 16, BR(0) | SAT(0) | 0x000a, BR(1) | SAT(1) | 0x040e,
- SFLDS5(FLD(dst, 4, 3), FLD(src2, 7, 3), FLD(op, 11, 1), FLD(x, 12, 1),
- FLD(src1, 13, 3)))
-
-FMT(s_s3_sat_1, 16, BR(0) | SAT(1) | 0x000a, BR(1) | SAT(1) | 0x040e,
- SFLDS5(FLD(dst, 4, 3), FLD(src2, 7, 3), FLD(op, 11, 1), FLD(x, 12, 1),
- FLD(src1, 13, 3)))
-
-/* F-23 S3i Instruction Format */
-FMT(s_s3i, 16, BR(0) | 0x040a, BR(1) | 0x040e,
- SFLDS5(FLD(dst, 4, 3), FLD(src2, 7, 3), FLD(op, 11, 1), FLD(x, 12, 1),
- FLD(cst, 13, 3)))
-
-/* F-24 Smvk8 Instruction Format */
-FMT(s_smvk8, 16, 0x0012, 0x001e,
- SFLDS2(FLD(dst, 7, 3),
- COMPFLD(cst, BFLD4(BFLD(10, 1, 7), BFLD(5, 2, 5), BFLD(11, 2, 3), BFLD(13, 3, 0)))))
-
-/* F-25 Ssh5 Instruction Format */
-FMT(s_ssh5_sat_x, 16, SAT(0) | 0x0402, SAT(0) | 0x041e,
- SFLDS3(FLD(op, 5, 2), FLD(srcdst, 7, 3),
- COMPFLD(cst, BFLD2(BFLD(11, 2, 3), BFLD(13, 3, 0)))))
-FMT(s_ssh5_sat_0, 16, SAT(0) | 0x0402, SAT(1) | 0x041e,
- SFLDS3(FLD(op, 5, 2), FLD(srcdst, 7, 3),
- COMPFLD(cst, BFLD2(BFLD(11, 2, 3), BFLD(13, 3, 0)))))
-FMT(s_ssh5_sat_1, 16, SAT(1) | 0x0402, SAT(1) | 0x041e,
- SFLDS3(FLD(op, 5, 2), FLD(srcdst, 7, 3),
- COMPFLD(cst, BFLD2(BFLD(11, 2, 3), BFLD(13, 3, 0)))))
-
-/* F-26 S2sh Instruction Format */
-FMT(s_s2sh, 16, 0x0462, 0x047e,
- SFLDS3(FLD(srcdst, 7, 3), FLD(op, 11, 2), FLD(src1, 13, 3)))
-
-/* F-27 Sc5 Instruction Format */
-FMT(s_sc5, 16, 0x0002, 0x041e,
- SFLDS3(FLD(op, 5, 2), FLD(srcdst, 7, 3),
- COMPFLD(cst, BFLD2(BFLD(11, 2, 3), BFLD(13, 3, 0)))))
-
-/* F-28 S2ext Instruction Format */
-FMT(s_s2ext, 16, 0x0062, 0x047e,
- SFLDS3(FLD(src, 7, 3), FLD(op, 11, 2), FLD(dst, 13, 3)))
-
-/* F-29 Sx2op Instruction Format */
-FMT(s_sx2op, 16, 0x002e, 0x047e,
- SFLDS4(FLD(src2, 7, 3), FLD(op, 11, 1), FLD(x, 12, 1),
- FLD(srcdst, 13, 3)))
-
-/* F-30 Sx5 Instruction Format */
-FMT(s_sx5, 16, 0x042e, 0x047e,
- SFLDS2(FLD(dst, 7, 3),
- COMPFLD(cst, BFLD2(BFLD(11, 2, 3), BFLD(13, 3, 0)))))
-
-/* F-31 Sx1 Instruction Format */
-FMT(s_sx1, 16, 0x186e, 0x1c7e,
- SFLDS2(FLD(srcdst, 7, 3), FLD(op, 13, 3)))
-
-/* F-32 Sx1b Instruction Format */
-FMT(s_sx1b, 16, 0x006e, 0x187e,
- SFLDS2(FLD(src2, 7, 4), FLD(n, 13, 3)))
-
-/* Appendix G 16-bit formats will go here. */
-FMT(lsdmvto, 16, 0x0006, 0x0066,
- SFLDS4(FLD(unit, 3, 2),
- FLD(x, 12, 1), FLD(dst, 13, 3),
- COMPFLD(src2, BFLD2(BFLD(10, 2, 3), BFLD(7, 3, 0)))))
-
-FMT(lsdmvfr, 16, 0x0046, 0x0066,
- SFLDS4(FLD(unit, 3, 2), FLD(src2, 7, 3), FLD(x, 12, 1),
- COMPFLD(dst, BFLD2(BFLD(10, 2, 3), BFLD(13, 3, 0)))))
-
-/* G-3 */
-FMT(lsdx1c, 16, 0x0866, 0x1c66,
- SFLDS4(FLD(unit, 3, 2), FLD(dst, 7, 3), FLD(cst, 13, 1),
- FLD(cc, 14, 2)))
-
-/* G-4 */
-FMT(lsdx1, 16, 0x1866, 0x1c66,
- SFLDS3(FLD(unit, 3, 2), FLD(srcdst, 7, 3), FLD(op, 13, 3)))
-
-/* Appendix H 32-bit formats. */
-
-FMT(nfu_loop_buffer, 32, 0x00020000, 0x00021ffc,
- CFLDS4(FLD(s, 1, 1), FLD(op, 13, 4), FLD(csta, 18, 5), FLD(cstb, 23, 5)))
-/* Corrected relative to Appendix H. */
-FMT(nfu_nop_idle, 32, 0x00000000, 0xfffe1ffc,
- NFLDS2(FLD(s, 1, 1), FLD(op, 13, 4)))
-
-/* No-unit formats missing from Appendix H (given the NOP and IDLE
- correction). */
-FMT(nfu_dint, 32, 0x10004000, 0xfffffffc,
- NFLDS1(FLD(s, 1, 1)))
-FMT(nfu_rint, 32, 0x10006000, 0xfffffffc,
- NFLDS1(FLD(s, 1, 1)))
-FMT(nfu_swe, 32, 0x10000000, 0xfffffffc,
- NFLDS1(FLD(s, 1, 1)))
-FMT(nfu_swenr, 32, 0x10002000, 0xfffffffc,
- NFLDS1(FLD(s, 1, 1)))
-/* Although formally covered by the loop buffer format, the fields in
- that format are not useful for all such instructions and not all
- instructions can be predicated. */
-FMT(nfu_spkernel, 32, 0x00034000, 0xf03ffffc,
- NFLDS2(FLD(s, 1, 1), FLD(fstgfcyc, 22, 6)))
-FMT(nfu_spkernelr, 32, 0x00036000, 0xfffffffc,
- NFLDS1(FLD(s, 1, 1)))
-FMT(nfu_spmask, 32, 0x00020000, 0xfc021ffc,
- NFLDS3(FLD(s, 1, 1), FLD(op, 13, 4), FLD(mask, 18, 8)))
-
-/* Appendix H 16-bit formats will go here. */
-
-/* H-5 */
-FMT(nfu_uspl, 16, 0x0c66, 0xbc7e,
- FLDS2(FLD(op, 0, 1), COMPFLD(ii, BFLD2(BFLD(7, 3, 0), BFLD(14, 1, 3)))))
-
-/* H-6 */
-/* make up some fields to pretend to have s and z fields s for this format
- so as to fit in other predicated compact instruction to avoid special-
- casing this instruction in tic6x-dis.c
- use op field as a predicate adress register selector (s field)
- use the first zeroed bit as a z value as this insn only supports [a0]
- and [b0] predicate forms.
-*/
-FMT(nfu_uspldr, 16, 0x8c66, 0xbc7e,
- FLDS4(FLD(op, 0, 1), FLD(s, 0, 1), FLD(z, 3, 1),
- COMPFLD(ii, BFLD2(BFLD(7, 3, 0), BFLD(14, 1, 3)))))
-
-/* H-7 */
-FMT(nfu_uspk, 16, 0x1c66, 0x3c7e,
- FLDS1(COMPFLD(fstgfcyc, BFLD3(BFLD(0, 1, 0), BFLD(7, 3, 1), BFLD(14, 2, 4)))))
-
-/* H-8a */
-FMT(nfu_uspma, 16, 0x2c66, 0x3c7e,
- FLDS1(COMPFLD(mask, BFLD3(BFLD(0, 1, 0), BFLD(7, 3, 1), BFLD(14, 2, 4)))))
-
-/* H-8b */
-FMT(nfu_uspmb, 16, 0x3c66, 0x3c7e,
- FLDS1(COMPFLD(mask, BFLD3(BFLD(0, 1, 0), BFLD(7, 3, 1), BFLD(14, 2, 4)))))
-
-/* H-9 */
-FMT(nfu_unop, 16, 0x0c6e, 0x1fff,
- FLDS1(FLD(n, 13, 3)))
-
-#undef FLD
-#undef CFLDS
-#undef CFLDS2
-#undef CFLDS3
-#undef CFLDS4
-#undef CFLDS5
-#undef CFLDS6
-#undef CFLDS7
-#undef CFLDS8
-#undef NFLDS
-#undef NFLDS1
-#undef NFLDS2
-#undef NFLDS3
-#undef NFLDS5
-#undef NFLDS6
-#undef NFLDS7
-#undef SFLDS
-#undef SFLDS1
-#undef SFLDS2
-#undef SFLDS3
-#undef SFLDS4
-#undef SFLDS5
-#undef SFLDS6
-#undef SFLDS7
-#undef BFLD
-#undef BFLD1
-#undef BFLD2
-#undef BFLD3
-#undef BFLD4
-#undef FLDS1
-#undef FLDS2
-#undef FLDS3
-#undef FLDS4
-#undef FLDS5
-#undef COMPFLD
-#undef DSZ
-#undef BR
-#undef SAT
diff --git a/include/opcode/tic6x-opcode-table.h b/include/opcode/tic6x-opcode-table.h
deleted file mode 100644
index d876c564a..000000000
--- a/include/opcode/tic6x-opcode-table.h
+++ /dev/null
@@ -1,3677 +0,0 @@
-/* TI C6X opcode table.
- Copyright 2010-2013 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-/* Define the INSN macro before including this file; it takes as
- arguments the fields from tic6x_opcode (defined in tic6x.h). The
- name is given as an identifier; the subsequent four operands should
- have "tic6x_func_unit_", "tic6x_insn_format_", "tic6x_pipeline_"
- and "TIC6X_INSN_", respectively, prepended to them by the macro
- definition. Also define INSNE, which has a second argument that
- goes after tic6x_opcode_NAME_ to form the enumeration value for
- this instruction, where the value otherwise formed from the name,
- functional unit and format is ambiguous, but otherwise has the same
- arguments as INSN. */
-
-#define TIC6X_INSN_C64X_AND_C67X TIC6X_INSN_C64X|TIC6X_INSN_C67X
-#define tic6x_insn_format_nfu_s_branch_nop_cst \
- tic6x_insn_format_s_branch_nop_cst
-#define tic6x_insn_format_s_l_1_or_2_src tic6x_insn_format_l_1_or_2_src
-#define RAN(id, min, max) { CONCAT2(tic6x_field_,id), (min), (max) }
-#define FIX(id, val) RAN(id, val, val)
-#define FIX0() 0, { { 0, 0, 0 } }
-#define FIX1(a) 1, { a }
-#define FIX2(a, b) 2, { a, b }
-#define FIX3(a, b, c) 3, { a, b, c }
-#define FIX4(a, b, c, d) 4, { a, b, c, d }
-#define OP0() 0, { { 0, 0, FALSE, 0, 0, 0, 0 } }
-#define OP1(a) 1, { a }
-#define OP2(a, b) 2, { a, b }
-#define OP3(a, b, c) 3, { a, b, c }
-#define OP4(a, b, c, d) 4, { a, b, c, d }
-#define OACST { tic6x_operand_asm_const, 0, tic6x_rw_none, 0, 0, 0, 0 }
-#define OLCST { tic6x_operand_link_const, 0, tic6x_rw_none, 0, 0, 0, 0 }
-#define OHWCSTM1 { tic6x_operand_hw_const_minus_1, 0, tic6x_rw_none, 0, 0, 0, 0 }
-#define OHWCST0 { tic6x_operand_hw_const_0, 0, tic6x_rw_none, 0, 0, 0, 0 }
-#define OHWCST1 { tic6x_operand_hw_const_1, 0, tic6x_rw_none, 0, 0, 0, 0 }
-#define OHWCST5 { tic6x_operand_hw_const_5, 0, tic6x_rw_none, 0, 0, 0, 0 }
-#define OHWCST16 { tic6x_operand_hw_const_16, 0, tic6x_rw_none, 0, 0, 0, 0 }
-#define OHWCST24 { tic6x_operand_hw_const_24, 0, tic6x_rw_none, 0, 0, 0, 0 }
-#define OHWCST31 { tic6x_operand_hw_const_31, 0, tic6x_rw_none, 0, 0, 0, 0 }
-#define OFULIST { tic6x_operand_func_unit, 0, tic6x_rw_none, 0, 0, 0, 0 }
-#define ORIRP1 { tic6x_operand_irp, 4, tic6x_rw_read, 1, 1, 0, 0 }
-#define ORNRP1 { tic6x_operand_nrp, 4, tic6x_rw_read, 1, 1, 0, 0 }
-#define OWREG1 { tic6x_operand_reg, 4, tic6x_rw_write, 1, 1, 0, 0 }
-#define OWREG1Z { tic6x_operand_zreg, 4, tic6x_rw_write, 1, 1, 0, 0 }
-#define OWREG1NORS { tic6x_operand_reg_nors, 4, tic6x_rw_write, 1, 1, 0, 0 }
-#define ORREG1B { tic6x_operand_reg_bside, 4, tic6x_rw_write, 1, 1, 0, 0 }
-#define ORREG1BNORS { tic6x_operand_reg_bside_nors, 4, tic6x_rw_write, 1, 1, 0, 0 }
-#define OWRETREG1 { tic6x_operand_retreg, 4, tic6x_rw_write, 1, 1, 0, 0 }
-#define ORREG1 { tic6x_operand_reg, 4, tic6x_rw_read, 1, 1, 0, 0 }
-#define ORDREG1 { tic6x_operand_dreg, 4, tic6x_rw_read, 1, 1, 0, 0 }
-#define ORTREG1 { tic6x_operand_treg, 4, tic6x_rw_read, 1, 1, 0, 0 }
-#define ORWREG1 { tic6x_operand_reg, 4, tic6x_rw_read_write, 1, 1, 0, 0 }
-#define ORB15REG1 { tic6x_operand_b15reg, 4, tic6x_rw_read, 1, 1, 0, 0 }
-#define OWB15REG1 { tic6x_operand_b15reg, 4, tic6x_rw_write, 1, 1, 0, 0 }
-#define ORAREG1 { tic6x_operand_areg, 4, tic6x_rw_read, 1, 1, 0, 0 }
-#define ORXREG1 { tic6x_operand_xreg, 4, tic6x_rw_read, 1, 1, 0, 0 }
-#define ORREG12 { tic6x_operand_reg, 4, tic6x_rw_read, 1, 2, 0, 0 }
-#define ORREG14 { tic6x_operand_reg, 4, tic6x_rw_read, 1, 4, 0, 0 }
-#define ORXREG14 { tic6x_operand_xreg, 4, tic6x_rw_read, 1, 4, 0, 0 }
-#define OWREG2 { tic6x_operand_reg, 4, tic6x_rw_write, 2, 2, 0, 0 }
-#define OWREG4 { tic6x_operand_reg, 4, tic6x_rw_write, 4, 4, 0, 0 }
-#define OWREG9 { tic6x_operand_reg, 4, tic6x_rw_write, 9, 9, 0, 0 }
-#define OWDREG5 { tic6x_operand_dreg, 4, tic6x_rw_write, 5, 5, 0, 0 }
-#define OWTREG5 { tic6x_operand_treg, 4, tic6x_rw_write, 5, 5, 0, 0 }
-#define OWREGL1 { tic6x_operand_regpair, 5, tic6x_rw_write, 1, 1, 1, 1 }
-#define ORREGL1 { tic6x_operand_regpair, 5, tic6x_rw_read, 1, 1, 1, 1 }
-#define OWREGD1 { tic6x_operand_regpair, 8, tic6x_rw_write, 1, 1, 1, 1 }
-#define OWREGD12 { tic6x_operand_regpair, 8, tic6x_rw_write, 1, 1, 2, 2 }
-#define OWREGD4 { tic6x_operand_regpair, 8, tic6x_rw_write, 4, 4, 4, 4 }
-#define ORREGD1 { tic6x_operand_regpair, 8, tic6x_rw_read, 1, 1, 1, 1 }
-#define OWREGD45 { tic6x_operand_regpair, 8, tic6x_rw_write, 4, 4, 5, 5 }
-#define OWREGD67 { tic6x_operand_regpair, 8, tic6x_rw_write, 6, 6, 7, 7 }
-#define ORDREGD1 { tic6x_operand_dregpair, 8, tic6x_rw_read, 1, 1, 1, 1 }
-#define ORTREGD1 { tic6x_operand_tregpair, 8, tic6x_rw_read, 1, 1, 1, 1 }
-#define OWDREGD5 { tic6x_operand_dregpair, 8, tic6x_rw_write, 5, 5, 5, 5 }
-#define OWTREGD5 { tic6x_operand_tregpair, 8, tic6x_rw_write, 5, 5, 5, 5 }
-#define ORREGD12 { tic6x_operand_regpair, 8, tic6x_rw_read, 1, 1, 2, 2 }
-#define ORXREGD12 { tic6x_operand_xregpair, 8, tic6x_rw_read, 1, 1, 2, 2 }
-#define ORREGD1234 { tic6x_operand_regpair, 8, tic6x_rw_read, 1, 2, 3, 4 }
-#define ORXREGD1324 { tic6x_operand_xregpair, 8, tic6x_rw_read, 1, 3, 2, 4 }
-#define OWREGD910 { tic6x_operand_regpair, 8, tic6x_rw_write, 9, 9, 10, 10 }
-#define ORCREG1 { tic6x_operand_ctrl, 4, tic6x_rw_read, 1, 1, 0, 0 }
-#define OWCREG1 { tic6x_operand_ctrl, 4, tic6x_rw_write, 1, 1, 0, 0 }
-#define OWILC1 { tic6x_operand_ilc, 4, tic6x_rw_write, 1, 1, 0, 0 }
-#define ORMEMDW { tic6x_operand_mem_deref, 4, tic6x_rw_read, 3, 3, 0, 0 }
-#define OWMEMDW { tic6x_operand_mem_deref, 4, tic6x_rw_write, 3, 3, 0, 0 }
-#define ORMEMSB { tic6x_operand_mem_short, 1, tic6x_rw_read, 3, 3, 0, 0 }
-#define OWMEMSB { tic6x_operand_mem_short, 1, tic6x_rw_write, 3, 3, 0, 0 }
-#define ORMEMLB { tic6x_operand_mem_long, 1, tic6x_rw_read, 3, 3, 0, 0 }
-#define OWMEMLB { tic6x_operand_mem_long, 1, tic6x_rw_write, 3, 3, 0, 0 }
-#define ORMEMSH { tic6x_operand_mem_short, 2, tic6x_rw_read, 3, 3, 0, 0 }
-#define OWMEMSH { tic6x_operand_mem_short, 2, tic6x_rw_write, 3, 3, 0, 0 }
-#define ORMEMLH { tic6x_operand_mem_long, 2, tic6x_rw_read, 3, 3, 0, 0 }
-#define OWMEMLH { tic6x_operand_mem_long, 2, tic6x_rw_write, 3, 3, 0, 0 }
-#define ORMEMSW { tic6x_operand_mem_short, 4, tic6x_rw_read, 3, 3, 0, 0 }
-#define OWMEMSW { tic6x_operand_mem_short, 4, tic6x_rw_write, 3, 3, 0, 0 }
-#define ORMEMLW { tic6x_operand_mem_long, 4, tic6x_rw_read, 3, 3, 0, 0 }
-#define OWMEMLW { tic6x_operand_mem_long, 4, tic6x_rw_write, 3, 3, 0, 0 }
-#define ORMEMSD { tic6x_operand_mem_short, 8, tic6x_rw_read, 3, 3, 0, 0 }
-#define OWMEMSD { tic6x_operand_mem_short, 8, tic6x_rw_write, 3, 3, 0, 0 }
-#define ORMEMND { tic6x_operand_mem_ndw, 8, tic6x_rw_read, 3, 3, 0, 0 }
-#define OWMEMND { tic6x_operand_mem_ndw, 8, tic6x_rw_write, 3, 3, 0, 0 }
-#define ENC(id, meth, op) { \
- CONCAT2(tic6x_field_,id), \
- CONCAT2(tic6x_coding_,meth), \
- op \
- }
-#define ENC0() 0, { { 0, 0, 0 } }
-#define ENC1(a) 1, { a }
-#define ENC2(a, b) 2, { a, b }
-#define ENC3(a, b, c) 3, { a, b, c }
-#define ENC4(a, b, c, d) 4, { a, b, c, d }
-#define ENC5(a, b, c, d, e) 5, { a, b, c, d, e }
-#define ENC6(a, b, c, d, e, f) 6, { a, b, c, d, e, f }
-#define ENC7(a, b, c, d, e, f, g) 7, { a, b, c, d, e, f, g }
-
-INSN(abs, l, unary, 1cycle, C62X, 0,
- FIX1(FIX(op, 0)),
- OP2(ORXREG1, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(dst, reg, 1)))
-INSN(abs, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
- FIX3(FIX(op, 0x38), FIX(x, 0), FIX(src1, 0)),
- OP2(ORREGL1, OWREGL1),
- ENC3(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(dst, reg, 1)))
-
-INSN(abs2, l, unary, 1cycle, C64X, 0,
- FIX1(FIX(op, 0x4)),
- OP2(ORXREG1, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(dst, reg, 1)))
-
-INSN(absdp, s, 1_or_2_src, 2cycle_dp, C67X, TIC6X_FLAG_NO_CROSS,
- FIX2(FIX(op, 0x2c), FIX(x, 0)),
- OP2(ORREGD1, OWREGD12),
- ENC4(ENC(s, fu, 0), ENC(src2, regpair_msb, 0), ENC(src1, regpair_lsb, 0),
- ENC(dst, reg, 1)))
-
-INSN(abssp, s, unary, 1cycle, C67X, 0,
- FIX1(FIX(op, 0)),
- OP2(ORXREG1, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(dst, reg, 1)))
-
-INSNE(add, l_si_xsi_si, l, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x3)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(add, l_si_xsi_sl, l, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x23)),
- OP3(ORREG1, ORXREG1, OWREGL1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(add, l_xsi_sl_sl, l, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x21)),
- OP3(ORXREG1, ORREGL1, OWREGL1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(add, l_s5_xsi_si, l, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x2)),
- OP3(OACST, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(add, l_s5_sl_sl, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
- FIX2(FIX(op, 0x20), FIX(x, 0)),
- OP3(OACST, ORREGL1, OWREGL1),
- ENC4(ENC(s, fu, 0), ENC(src1, scst, 0), ENC(src2, reg, 1),
- ENC(dst, reg, 2)))
-INSNE(add, s_si_xsi_si, s, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x7)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(add, s_s5_xsi_si, s, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x6)),
- OP3(OACST, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(add, d_si_si_si, d, 1_or_2_src, 1cycle, C62X,
- TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1),
- FIX1(FIX(op, 0x10)),
- OP3(ORREG1, ORREG1, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, reg, 1),
- ENC(dst, reg, 2)))
-INSNE(add, d_si_u5_si, d, 1_or_2_src, 1cycle, C62X,
- TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1),
- FIX1(FIX(op, 0x12)),
- OP3(ORREG1, OACST, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1),
- ENC(dst, reg, 2)))
-INSNE(add, d_si_xsi_si, d, ext_1_or_2_src, 1cycle, C64X, TIC6X_FLAG_PREFER(0),
- FIX1(FIX(op, 0xa)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(add, d_xsi_s5_si, d, ext_1_or_2_src, 1cycle, C64X, TIC6X_FLAG_PREFER(0),
- FIX1(FIX(op, 0xb)),
- OP3(ORXREG1, OACST, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(src1, scst, 1), ENC(dst, reg, 2)))
-
-/* 16 bits insn */
-INSN(add, l, l3_sat_0, 1cycle, C64XP, 0,
- FIX1(FIX(op, 0x0)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSN(add, l, l3i, 1cycle, C64XP, 0,
- FIX0(),
- OP3(OACST, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(cst, scst_l3i, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSN(add, l, lx1, 1cycle, C64XP,
- TIC6X_FLAG_NO_CROSS,
- FIX1(FIX(op, 0x3)),
- OP3(OHWCSTM1, ORREG1, OWREG1),
- ENC3(ENC(s, fu, 0), ENC(srcdst, reg, 1), ENC(srcdst, reg, 2)))
-INSN(add, s, s3_sat_0, 1cycle, C64XP, 0,
- FIX1(FIX(op, 0x0)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSN(add, s, sx1, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS,
- FIX1(FIX(op, 0x3)),
- OP3(OHWCSTM1, ORREG1, OWREG1),
- ENC3(ENC(s, fu, 0), ENC(srcdst, reg, 1), ENC(srcdst, reg, 2)))
-INSN(add, s, sx2op, 1cycle, C64XP, 0,
- FIX1(FIX(op, 0x0)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(srcdst, reg, 0), ENC(srcdst, reg, 2),
- ENC(src2, reg, 1), ENC(x, xpath, 1)))
-INSN(add, d, dx2op, 1cycle, C64XP, 0,
- FIX1(FIX(op, 0x0)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 1), ENC(srcdst, reg, 0),
- ENC(src2, reg, 1), ENC(srcdst, reg, 2)))
-INSNU(add, l, lsdx1, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS,
- FIX2(FIX(op, 0x5), FIX(unit, 0x0)),
- OP3(ORREG1, OHWCST1, OWREG1),
- ENC3(ENC(s, fu, 0), ENC(srcdst, reg, 0), ENC(srcdst, reg, 2)))
-INSNU(add, s, lsdx1, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS,
- FIX2(FIX(op, 0x5), FIX(unit, 0x1)),
- OP3(ORREG1, OHWCST1, OWREG1),
- ENC3(ENC(s, fu, 0), ENC(srcdst, reg, 0), ENC(srcdst, reg, 2)))
-INSNU(add, d, lsdx1, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS,
- FIX2(FIX(op, 0x5), FIX(unit, 0x2)),
- OP3(ORREG1, OHWCST1, OWREG1),
- ENC3(ENC(s, fu, 0), ENC(srcdst, reg, 0), ENC(srcdst, reg, 2)))
-/**/
-
-INSNE(addab, d_si_si_si, d, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
- FIX1(FIX(op, 0x30)),
- OP3(ORREG1, ORREG1, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, reg, 1),
- ENC(dst, reg, 2)))
-INSNE(addab, d_si_u5_si, d, 1_or_2_src, 1cycle, C62X,
- TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1),
- FIX1(FIX(op, 0x32)),
- OP3(ORREG1, OACST, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1),
- ENC(dst, reg, 2)))
-INSN(addab, d, adda_long, 1cycle, C64XP, TIC6X_FLAG_PREFER(0),
- FIX1(FIX(op, 3)),
- OP3(ORAREG1, OLCST, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(y, areg, 0), ENC(offsetR, ulcst_dpr_byte, 1),
- ENC(dst, reg, 2)))
-
-INSNE(addad, d_si_si_si, d, 1_or_2_src, 1cycle, C64X_AND_C67X,
- TIC6X_FLAG_NO_CROSS,
- FIX1(FIX(op, 0x3c)),
- OP3(ORREG1, ORREG1, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, reg, 1),
- ENC(dst, reg, 2)))
-INSNE(addad, d_si_u5_si, d, 1_or_2_src, 1cycle, C64X_AND_C67X,
- TIC6X_FLAG_NO_CROSS,
- FIX1(FIX(op, 0x3d)),
- OP3(ORREG1, OACST, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1),
- ENC(dst, reg, 2)))
-
-INSNE(addah, d_si_si_si, d, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
- FIX1(FIX(op, 0x34)),
- OP3(ORREG1, ORREG1, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, reg, 1),
- ENC(dst, reg, 2)))
-INSNE(addah, d_si_u5_si, d, 1_or_2_src, 1cycle, C62X,
- TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1),
- FIX1(FIX(op, 0x36)),
- OP3(ORREG1, OACST, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1),
- ENC(dst, reg, 2)))
-INSN(addah, d, adda_long, 1cycle, C64XP, TIC6X_FLAG_PREFER(0),
- FIX1(FIX(op, 5)),
- OP3(ORAREG1, OLCST, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(y, areg, 0), ENC(offsetR, ulcst_dpr_half, 1),
- ENC(dst, reg, 2)))
-
-INSNE(addaw, d_si_si_si, d, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
- FIX1(FIX(op, 0x38)),
- OP3(ORREG1, ORREG1, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, reg, 1),
- ENC(dst, reg, 2)))
-INSNE(addaw, d_si_u5_si, d, 1_or_2_src, 1cycle, C62X,
- TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1),
- FIX1(FIX(op, 0x3a)),
- OP3(ORREG1, OACST, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1),
- ENC(dst, reg, 2)))
-INSN(addaw, d, adda_long, 1cycle, C64XP, TIC6X_FLAG_PREFER(0),
- FIX1(FIX(op, 7)),
- OP3(ORAREG1, OLCST, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(y, areg, 0), ENC(offsetR, ulcst_dpr_word, 1),
- ENC(dst, reg, 2)))
-
-/* 16 bits insn */
-INSN(addaw, d, dx5, 1cycle, C64XP, TIC6X_FLAG_INSN16_BSIDE,
- FIX0(),
- OP3(ORB15REG1, OACST, OWREG1),
- ENC3(ENC(s, fu, 0), ENC(cst, ucst, 1), ENC(dst, reg, 2)))
-INSN(addaw, d, dx5p, 1cycle, C64XP, TIC6X_FLAG_INSN16_BSIDE,
- FIX1(FIX(op, 0)),
- OP3(ORB15REG1, OACST, OWB15REG1),
- ENC2(ENC(s, fu, 0), ENC(cst, ucst, 1)))
-/**/
-
-INSN(adddp, l, 1_or_2_src, addsubdp, C67X, 0,
- FIX1(FIX(op, 0x18)),
- OP3(ORREGD12, ORXREGD12, OWREGD67),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSN(adddp, s, l_1_or_2_src, addsubdp, C67XP, 0,
- FIX1(FIX(op, 0x72)),
- OP3(ORREGD12, ORXREGD12, OWREGD67),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(addk, s, addk, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
- FIX0(),
- OP2(OLCST, OWREG1),
- ENC3(ENC(s, fu, 0), ENC(cst, scst, 0), ENC(dst, reg, 1)))
-
-/* 16 bits insn */
-INSN(addk, s, sx5, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS,
- FIX0(),
- OP2(OACST, OWREG1),
- ENC3(ENC(s, fu, 0), ENC(cst, ucst, 0), ENC(dst, reg, 1)))
-/**/
-
-INSN(addkpc, s, addkpc, 1cycle, C64X,
- TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MCNOP|TIC6X_FLAG_SIDE_B_ONLY,
- FIX1(FIX(s, 1)),
- OP3(OLCST, OWREG1, OACST),
- ENC3(ENC(src1, pcrel, 0), ENC(dst, reg, 1), ENC(src2, ucst, 2)))
-
-INSN(addsp, l, 1_or_2_src, 4cycle, C67X, 0,
- FIX1(FIX(op, 0x10)),
- OP3(ORREG1, ORXREG1, OWREG4),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSN(addsp, s, l_1_or_2_src, 4cycle, C67XP, 0,
- FIX1(FIX(op, 0x70)),
- OP3(ORREG1, ORXREG1, OWREG4),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(addsub, l, 1_or_2_src_noncond, 1cycle, C64XP, 0,
- FIX1(FIX(op, 0xc)),
- OP3(ORREG1, ORXREG1, OWREGD1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(addsub2, l, 1_or_2_src_noncond, 1cycle, C64XP, 0,
- FIX1(FIX(op, 0xd)),
- OP3(ORREG1, ORXREG1, OWREGD1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSNE(addu, l_ui_xui_ul, l, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x2b)),
- OP3(ORREG1, ORXREG1, OWREGL1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(addu, l_xui_ul_ul, l, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x29)),
- OP3(ORXREG1, ORREGL1, OWREGL1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(add2, s, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x1)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSN(add2, l, 1_or_2_src, 1cycle, C64X, 0,
- FIX1(FIX(op, 0x5)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSN(add2, d, ext_1_or_2_src, 1cycle, C64X, 0,
- FIX1(FIX(op, 0x4)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(add4, l, 1_or_2_src, 1cycle, C64X, 0,
- FIX1(FIX(op, 0x65)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSNE(and, l_ui_xui_ui, l, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x7b)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(and, l_s5_xui_ui, l, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x7a)),
- OP3(OACST, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(and, s_ui_xui_ui, s, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x1f)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(and, s_s5_xui_ui, s, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x1e)),
- OP3(OACST, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(and, d_ui_xui_ui, d, ext_1_or_2_src, 1cycle, C64X, 0,
- FIX1(FIX(op, 0x6)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(and, d_s5_xui_ui, d, ext_1_or_2_src, 1cycle, C64X, 0,
- FIX1(FIX(op, 0x7)),
- OP3(OACST, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-/* 16 bits insn */
-INSN(and, l, l2c, 1cycle, C64XP, 0,
- FIX1(FIX(op, 0)),
- OP3(ORREG1, ORXREG1, OWREG1NORS),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-/**/
-
-INSN(andn, l, 1_or_2_src, 1cycle, C64X, 0,
- FIX1(FIX(op, 0x7c)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSN(andn, s, ext_1_or_2_src, 1cycle, C64X, 0,
- FIX1(FIX(op, 0x6)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSN(andn, d, ext_1_or_2_src, 1cycle, C64X, 0,
- FIX1(FIX(op, 0x0)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(avg2, m, compound, 1616_m, C64X, 0,
- FIX1(FIX(op, 0x13)),
- OP3(ORREG1, ORXREG1, OWREG2),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(avgu4, m, compound, 1616_m, C64X, 0,
- FIX1(FIX(op, 0x12)),
- OP3(ORREG1, ORXREG1, OWREG2),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(b, s, ext_branch_cond_imm, branch, C62X, TIC6X_FLAG_NO_CROSS,
- FIX0(),
- OP1(OLCST),
- ENC2(ENC(s, fu, 0), ENC(cst, pcrel, 0)))
-INSN(b, s, branch, branch, C62X, TIC6X_FLAG_SIDE_B_ONLY,
- FIX1(FIX(s, 1)),
- OP1(ORXREG1),
- ENC2(ENC(x, xpath, 0), ENC(src2, reg, 0)))
-INSN(b, s, b_irp, branch, C62X, TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY,
- FIX3(FIX(s, 1), FIX(x, 0), FIX(dst, 0)),
- OP1(ORIRP1),
- ENC0())
-INSN(b, s, b_nrp, branch, C62X, TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY,
- FIX3(FIX(s, 1), FIX(x, 0), FIX(dst, 0)),
- OP1(ORNRP1),
- ENC0())
-
-INSN(bdec, s, bdec, branch, C64X, TIC6X_FLAG_NO_CROSS,
- FIX0(),
- OP2(OLCST, ORWREG1),
- ENC3(ENC(s, fu, 0), ENC(src, pcrel, 0), ENC(dst, reg, 1)))
-
-INSN(bitc4, m, unary, 1616_m, C64X, 0,
- FIX1(FIX(op, 0x1e)),
- OP2(ORXREG1, OWREG2),
- ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(dst, reg, 1)))
-
-INSN(bitr, m, unary, 1616_m, C64X, 0,
- FIX1(FIX(op, 0x1f)),
- OP2(ORXREG1, OWREG2),
- ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(dst, reg, 1)))
-
-INSN(bnop, s, branch_nop_cst, branch, C64X,
- TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MCNOP,
- FIX0(),
- OP2(OLCST, OACST),
- ENC3(ENC(s, fu, 0), ENC(src2, pcrel_half, 0), ENC(src1, ucst, 1)))
-INSN(bnop, nfu, s_branch_nop_cst, branch, C64XP,
- TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO|TIC6X_FLAG_MCNOP,
- FIX1(FIX(s, 0)),
- OP2(OLCST, OACST),
- ENC2(ENC(src2, pcrel, 0), ENC(src1, ucst, 1)))
-INSN(bnop, s, branch_nop_reg, branch, C64X,
- TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_MCNOP,
- FIX1(FIX(s, 1)),
- OP2(ORXREG1, OACST),
- ENC3(ENC(x, xpath, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1)))
-
-/* 16 bits insn format */
-INSN(bnop, s, sbu8, branch, C64XP,
- TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MCNOP,
- FIX0(),
- OP2(OLCST, OHWCST5),
- ENC2(ENC(s, fu, 0), ENC(cst, pcrel_half_unsigned, 0)))
-INSN(bnop, s, sbs7, branch, C64XP,
- TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MCNOP,
- FIX0(),
- OP2(OLCST, OACST),
- ENC3(ENC(s, fu, 0), ENC(cst, pcrel_half, 0), ENC(n, ucst, 1)))
-INSN(bnop, s, sbu8c, branch, C64XP,
- TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MCNOP|TIC6X_FLAG_INSN16_SPRED,
- FIX0(),
- OP2(OLCST, OHWCST5),
- ENC2(ENC(s, fu, 0), ENC(cst, pcrel_half_unsigned, 0)))
-INSN(bnop, s, sbs7c, branch, C64XP,
- TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MCNOP|TIC6X_FLAG_INSN16_SPRED,
- FIX0(),
- OP2(OLCST, OACST),
- ENC3(ENC(s, fu, 0), ENC(cst, pcrel_half, 0), ENC(n, ucst, 1)))
-INSN(bnop, s, sx1b, branch, C64XP,
- TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MCNOP,
- FIX0(),
- OP2(ORREG1BNORS, OACST),
- ENC3(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(n, ucst, 1)))
-/**/
-
-INSN(bpos, s, bpos, branch, C64X, TIC6X_FLAG_NO_CROSS,
- FIX0(),
- OP2(OLCST, ORREG1),
- ENC3(ENC(s, fu, 0), ENC(src, pcrel, 0), ENC(dst, reg, 1)))
-
-INSN(call, s, ext_branch_cond_imm, branch, C62X,
- TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO|TIC6X_FLAG_CALL,
- FIX0(),
- OP1(OLCST),
- ENC2(ENC(s, fu, 0), ENC(cst, pcrel, 0)))
-INSN(call, s, branch, branch, C62X,
- TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_MACRO|TIC6X_FLAG_CALL,
- FIX1(FIX(s, 1)),
- OP1(ORXREG1),
- ENC2(ENC(x, xpath, 0), ENC(src2, reg, 0)))
-INSN(call, s, b_irp, branch, C62X,
- TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_MACRO|TIC6X_FLAG_CALL,
- FIX3(FIX(s, 1), FIX(x, 0), FIX(dst, 0)),
- OP1(ORIRP1),
- ENC0())
-INSN(call, s, b_nrp, branch, C62X,
- TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_MACRO|TIC6X_FLAG_CALL,
- FIX3(FIX(s, 1), FIX(x, 0), FIX(dst, 0)),
- OP1(ORNRP1),
- ENC0())
-
-INSN(callnop, s, branch_nop_cst, branch, C64X,
- TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO|TIC6X_FLAG_MCNOP|TIC6X_FLAG_CALL,
- FIX0(),
- OP2(OLCST, OACST),
- ENC3(ENC(s, fu, 0), ENC(src2, pcrel, 0), ENC(src1, ucst, 1)))
-INSN(callnop, nfu, s_branch_nop_cst, branch, C64XP,
- TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO|TIC6X_FLAG_MCNOP|TIC6X_FLAG_CALL,
- FIX1(FIX(s, 0)),
- OP2(OLCST, OACST),
- ENC2(ENC(src2, pcrel, 0), ENC(src1, ucst, 1)))
-INSN(callnop, s, branch_nop_reg, branch, C64X,
- TIC6X_FLAG_MACRO|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_MCNOP|TIC6X_FLAG_CALL,
- FIX1(FIX(s, 1)),
- OP2(ORXREG1, OACST),
- ENC3(ENC(x, xpath, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1)))
-
-
-INSN(callp, s, call_imm_nop, branch, C64XP,
- TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MCNOP,
- FIX1(FIX(z, 1)),
- OP2(OLCST, OWRETREG1),
- ENC2(ENC(s, fu, 0), ENC(cst, pcrel, 0)))
-
-/* 16 bits insn format */
-INSN(callp, s, scs10, branch, C64XP,
- TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MCNOP,
- FIX0(),
- OP2(OLCST, OWRETREG1),
- ENC2(ENC(s, fu, 0), ENC(cst, pcrel, 0)))
-/**/
-
-INSN(callret, s, ext_branch_cond_imm, branch, C62X,
- TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO|TIC6X_FLAG_CALL|TIC6X_FLAG_RETURN,
- FIX0(),
- OP1(OLCST),
- ENC2(ENC(s, fu, 0), ENC(cst, pcrel, 0)))
-INSN(callret, s, branch, branch, C62X,
- TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_MACRO|TIC6X_FLAG_CALL|TIC6X_FLAG_RETURN,
- FIX1(FIX(s, 1)),
- OP1(ORXREG1),
- ENC2(ENC(x, xpath, 0), ENC(src2, reg, 0)))
-INSN(callret, s, b_irp, branch, C62X,
- TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_MACRO|TIC6X_FLAG_CALL|TIC6X_FLAG_RETURN,
- FIX3(FIX(s, 1), FIX(x, 0), FIX(dst, 0)),
- OP1(ORIRP1),
- ENC0())
-INSN(callret, s, b_nrp, branch, C62X,
- TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_MACRO|TIC6X_FLAG_CALL|TIC6X_FLAG_RETURN,
- FIX3(FIX(s, 1), FIX(x, 0), FIX(dst, 0)),
- OP1(ORNRP1),
- ENC0())
-
-INSN(clr, s, field, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
- FIX1(FIX(op, 0x3)),
- OP4(ORREG1, OACST, OACST, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(csta, ucst, 1),
- ENC(cstb, ucst, 2), ENC(dst, reg, 3)))
-INSN(clr, s, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x3f)),
- OP3(ORXREG1, ORREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(src1, reg, 1), ENC(dst, reg, 2)))
-
-/* 16 bits insn */
-INSN(clr, s, sc5, 1cycle, C64XP, 0,
- FIX1(FIX(op, 2)),
- OP4(ORREG1, OACST, OACST, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(srcdst, reg, 0), ENC(cst, ucst, 1),
- ENC(cst, ucst, 2), ENC(srcdst, reg, 3)))
-/**/
-
-INSNE(cmpeq, l_si_xsi_ui, l, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x53)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(cmpeq, l_s5_xsi_ui, l, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x52)),
- OP3(OACST, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(cmpeq, l_xsi_sl_ui, l, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x51)),
- OP3(ORXREG1, ORREGL1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(cmpeq, l_s5_sl_ui, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
- FIX2(FIX(op, 0x50), FIX(x, 0)),
- OP3(OACST, ORREGL1, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(src1, scst, 0), ENC(src2, reg, 1),
- ENC(dst, reg, 2)))
-
-/* 16 bits insn */
-INSN(cmpeq, l, lx3c, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS,
- FIX0(),
- OP3(OACST, ORXREG1, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(cst, ucst, 0), ENC(src2, reg, 1),
- ENC(dst, reg, 2)))
-
-INSN(cmpeq, l, l2c, 1cycle, C64XP, 0,
- FIX1(FIX(op, 3)),
- OP3(ORREG1, ORXREG1, OWREG1NORS),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-/**/
-
-INSN(cmpeq2, s, 1_or_2_src, 1cycle, C64X, 0,
- FIX1(FIX(op, 0x1d)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(cmpeq4, s, 1_or_2_src, 1cycle, C64X, 0,
- FIX1(FIX(op, 0x1c)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(cmpeqdp, s, 1_or_2_src, dpcmp, C67X, 0,
- FIX1(FIX(op, 0x28)),
- OP3(ORREGD12, ORXREGD12, OWREG2),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(cmpeqsp, s, 1_or_2_src, 1cycle, C67X, 0,
- FIX1(FIX(op, 0x38)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSNE(cmpgt, l_si_xsi_ui, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_PREFER(1),
- FIX1(FIX(op, 0x47)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(cmpgt, l_s5_xsi_ui, l, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x46)),
- OP3(OACST, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(cmpgt, l_xsi_sl_ui, l, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x45)),
- OP3(ORXREG1, ORREGL1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(cmpgt, l_s5_sl_ui, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
- FIX2(FIX(op, 0x44), FIX(x, 0)),
- OP3(OACST, ORREGL1, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(src1, scst, 0), ENC(src2, reg, 1),
- ENC(dst, reg, 2)))
-INSNE(cmpgt, l_xsi_si_ui, l, 1_or_2_src, 1cycle, C62X,
- TIC6X_FLAG_MACRO|TIC6X_FLAG_PREFER(0),
- FIX1(FIX(op, 0x57)),
- OP3(ORXREG1, ORREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 1),
- ENC(src2, reg, 0), ENC(dst, reg, 2)))
-INSNE(cmpgt, l_xsi_s5_ui, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_MACRO,
- FIX1(FIX(op, 0x56)),
- OP3(ORXREG1, OACST, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 1),
- ENC(src2, reg, 0), ENC(dst, reg, 2)))
-INSNE(cmpgt, l_sl_xsi_ui, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_MACRO,
- FIX1(FIX(op, 0x55)),
- OP3(ORREGL1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 1),
- ENC(src2, reg, 0), ENC(dst, reg, 2)))
-INSNE(cmpgt, l_sl_s5_ui, l, 1_or_2_src, 1cycle, C62X,
- TIC6X_FLAG_MACRO|TIC6X_FLAG_NO_CROSS,
- FIX2(FIX(op, 0x54), FIX(x, 0)),
- OP3(ORREGL1, OACST, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(src1, scst, 1), ENC(src2, reg, 0),
- ENC(dst, reg, 2)))
-
-/* 16 bits insn */
-INSN(cmpgt, l, lx1c, 1cycle, C64XP, 0,
- FIX1(FIX(op, 1)),
- OP3(OACST, ORREG1, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(cst, ucst, 0), ENC(src2, reg, 1),
- ENC(dst, reg, 2)))
-INSN(cmpgt, l, l2c, 1cycle, C64XP, 0,
- FIX1(FIX(op, 5)),
- OP3(ORREG1, ORXREG1, OWREG1NORS),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-/**/
-
-INSN(cmpgt2, s, 1_or_2_src, 1cycle, C64X, 0,
- FIX1(FIX(op, 0x14)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(cmpgtdp, s, 1_or_2_src, dpcmp, C67X, 0,
- FIX1(FIX(op, 0x29)),
- OP3(ORREGD12, ORXREGD12, OWREG2),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(cmpgtsp, s, 1_or_2_src, 1cycle, C67X, 0,
- FIX1(FIX(op, 0x39)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSNE(cmpgtu, l_ui_xui_ui, l, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x4f)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(cmpgtu, l_u4_xui_ui, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_PREFER(1),
- FIX2(FIX(op, 0x4e), RAN(src1, 0, 15)),
- OP3(OACST, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, ucst, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-/* Although not mentioned in SPRUFE8, CMPGTU and CMPLTU support a
- 5-bit unsigned constant operand on C64X and above. */
-INSNE(cmpgtu, l_u5_xui_ui, l, 1_or_2_src, 1cycle, C64X, 0,
- FIX2(FIX(op, 0x4e), RAN(src1, 16, 31)),
- OP3(OACST, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, ucst, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(cmpgtu, l_xui_ul_ui, l, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x4d)),
- OP3(ORXREG1, ORREGL1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(cmpgtu, l_u4_ul_ui, l, 1_or_2_src, 1cycle, C62X,
- TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1),
- FIX3(FIX(op, 0x4c), FIX(x, 0), RAN(src1, 0, 15)),
- OP3(OACST, ORREGL1, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(src1, ucst, 0), ENC(src2, reg, 1),
- ENC(dst, reg, 2)))
-INSNE(cmpgtu, l_u5_ul_ui, l, 1_or_2_src, 1cycle, C64X, TIC6X_FLAG_NO_CROSS,
- FIX3(FIX(op, 0x4c), FIX(x, 0), RAN(src1, 16, 31)),
- OP3(OACST, ORREGL1, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(src1, ucst, 0), ENC(src2, reg, 1),
- ENC(dst, reg, 2)))
-
-/* 16 bits insn */
-INSN(cmpgtu, l, lx1c, 1cycle, C64XP, 0,
- FIX1(FIX(op, 3)),
- OP3(OACST, ORREG1, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(cst, ucst, 0), ENC(src2, reg, 1),
- ENC(dst, reg, 2)))
-INSN(cmpgtu, l, l2c, 1cycle, C64XP, 0,
- FIX1(FIX(op, 7)),
- OP3(ORREG1, ORXREG1, OWREG1NORS),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-/**/
-
-INSN(cmpgtu4, s, 1_or_2_src, 1cycle, C64X, 0,
- FIX1(FIX(op, 0x15)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSNE(cmplt, l_si_xsi_ui, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_PREFER(1),
- FIX1(FIX(op, 0x57)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(cmplt, l_s5_xsi_ui, l, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x56)),
- OP3(OACST, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(cmplt, l_xsi_sl_ui, l, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x55)),
- OP3(ORXREG1, ORREGL1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(cmplt, l_s5_sl_ui, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
- FIX2(FIX(op, 0x54), FIX(x, 0)),
- OP3(OACST, ORREGL1, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(src1, scst, 0), ENC(src2, reg, 1),
- ENC(dst, reg, 2)))
-INSNE(cmplt, l_xsi_si_ui, l, 1_or_2_src, 1cycle, C62X,
- TIC6X_FLAG_MACRO|TIC6X_FLAG_PREFER(0),
- FIX1(FIX(op, 0x47)),
- OP3(ORXREG1, ORREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 1),
- ENC(src2, reg, 0), ENC(dst, reg, 2)))
-INSNE(cmplt, l_xsi_s5_ui, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_MACRO,
- FIX1(FIX(op, 0x46)),
- OP3(ORXREG1, OACST, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 1),
- ENC(src2, reg, 0), ENC(dst, reg, 2)))
-INSNE(cmplt, l_sl_xsi_ui, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_MACRO,
- FIX1(FIX(op, 0x45)),
- OP3(ORREGL1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 1),
- ENC(src2, reg, 0), ENC(dst, reg, 2)))
-INSNE(cmplt, l_sl_s5_ui, l, 1_or_2_src, 1cycle, C62X,
- TIC6X_FLAG_MACRO|TIC6X_FLAG_NO_CROSS,
- FIX2(FIX(op, 0x44), FIX(x, 0)),
- OP3(ORREGL1, OACST, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(src1, scst, 1), ENC(src2, reg, 0),
- ENC(dst, reg, 2)))
-
-/* 16 bits insn */
-INSN(cmplt, l, lx1c, 1cycle, C64XP, 0,
- FIX1(FIX(op, 0)),
- OP3(OACST, ORREG1, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(cst, ucst, 0), ENC(src2, reg, 1),
- ENC(dst, reg, 2)))
-INSN(cmplt, l, l2c, 1cycle, C64XP, 0,
- FIX1(FIX(op, 4)),
- OP3(ORREG1, ORXREG1, OWREG1NORS),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-/**/
-
-INSN(cmplt2, s, 1_or_2_src, 1cycle, C64X, TIC6X_FLAG_MACRO,
- FIX1(FIX(op, 0x14)),
- OP3(ORXREG1, ORREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(src1, reg, 1), ENC(dst, reg, 2)))
-
-INSN(cmpltdp, s, 1_or_2_src, dpcmp, C67X, 0,
- FIX1(FIX(op, 0x2a)),
- OP3(ORREGD12, ORXREGD12, OWREG2),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(cmpltsp, s, 1_or_2_src, 1cycle, C67X, 0,
- FIX1(FIX(op, 0x3a)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSNE(cmpltu, l_ui_xui_ui, l, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x5f)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(cmpltu, l_u4_xui_ui, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_PREFER(1),
- FIX2(FIX(op, 0x5e), RAN(src1, 0, 15)),
- OP3(OACST, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, ucst, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(cmpltu, l_u5_xui_ui, l, 1_or_2_src, 1cycle, C64X, 0,
- FIX2(FIX(op, 0x5e), RAN(src1, 16, 31)),
- OP3(OACST, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, ucst, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(cmpltu, l_xui_ul_ui, l, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x5d)),
- OP3(ORXREG1, ORREGL1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(cmpltu, l_u4_ul_ui, l, 1_or_2_src, 1cycle, C62X,
- TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1),
- FIX3(FIX(op, 0x5c), FIX(x, 0), RAN(src1, 0, 15)),
- OP3(OACST, ORREGL1, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(src1, ucst, 0), ENC(src2, reg, 1),
- ENC(dst, reg, 2)))
-INSNE(cmpltu, l_u5_ul_ui, l, 1_or_2_src, 1cycle, C64X, TIC6X_FLAG_NO_CROSS,
- FIX3(FIX(op, 0x5c), FIX(x, 0), RAN(src1, 16, 31)),
- OP3(OACST, ORREGL1, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(src1, ucst, 0), ENC(src2, reg, 1),
- ENC(dst, reg, 2)))
-
-/* 16 bits insn */
-INSN(cmpltu, l, lx1c, 1cycle, C64XP, 0,
- FIX1(FIX(op, 2)),
- OP3(OACST, ORREG1, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(cst, ucst, 0), ENC(src2, reg, 1),
- ENC(dst, reg, 2)))
-INSN(cmpltu, l, l2c, 1cycle, C64XP, 0,
- FIX1(FIX(op, 6)),
- OP3(ORREG1, ORXREG1, OWREG1NORS),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-/**/
-
-INSN(cmpltu4, s, 1_or_2_src, 1cycle, C64X, TIC6X_FLAG_MACRO,
- FIX1(FIX(op, 0x15)),
- OP3(ORXREG1, ORREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(src1, reg, 1), ENC(dst, reg, 2)))
-
-INSN(cmpy, m, 1_or_2_src, 4cycle, C64XP, 0,
- FIX1(FIX(op, 0xa)),
- OP3(ORREG1, ORXREG1, OWREGD4),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(cmpyr, m, 1_or_2_src, 4cycle, C64XP, 0,
- FIX1(FIX(op, 0xb)),
- OP3(ORREG1, ORXREG1, OWREG4),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(cmpyr1, m, 1_or_2_src, 4cycle, C64XP, 0,
- FIX1(FIX(op, 0xc)),
- OP3(ORREG1, ORXREG1, OWREG4),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(cmtl, d, 1_or_2_src, load, C64XP,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_SIDE_T2_ONLY|TIC6X_FLAG_NO_CROSS,
- FIX3(FIX(s, 1), FIX(op, 0xe), FIX(src1, 0)),
- OP2(ORMEMDW, OWDREG5),
- ENC2(ENC(src2, reg, 0), ENC(dst, reg, 1)))
-
-INSN(ddotp4, m, 1_or_2_src, 4cycle, C64XP, 0,
- FIX1(FIX(op, 0x18)),
- OP3(ORREG1, ORXREG1, OWREGD4),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(ddotph2, m, 1_or_2_src, 4cycle, C64XP, 0,
- FIX1(FIX(op, 0x17)),
- OP3(ORREGD1, ORXREG1, OWREGD4),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(ddotph2r, m, 1_or_2_src, 4cycle, C64XP, 0,
- FIX1(FIX(op, 0x15)),
- OP3(ORREGD1, ORXREG1, OWREG4),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(ddotpl2, m, 1_or_2_src, 4cycle, C64XP, 0,
- FIX1(FIX(op, 0x16)),
- OP3(ORREGD1, ORXREG1, OWREGD4),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(ddotpl2r, m, 1_or_2_src, 4cycle, C64XP, 0,
- FIX1(FIX(op, 0x14)),
- OP3(ORREGD1, ORXREG1, OWREG4),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(deal, m, unary, 1616_m, C64X, 0,
- FIX1(FIX(op, 0x1d)),
- OP2(ORXREG1, OWREG2),
- ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(dst, reg, 1)))
-
-INSN(dint, nfu, dint, 1cycle, C64XP, 0,
- FIX1(FIX(s, 0)),
- OP0(),
- ENC0())
-
-INSN(dmv, s, ext_1_or_2_src, 1cycle, C64XP, 0,
- FIX1(FIX(op, 0xb)),
- OP3(ORREG1, ORXREG1, OWREGD1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSNE(dotp2, m_s2_xs2_si, m, compound, 4cycle, C64X, 0,
- FIX1(FIX(op, 0xc)),
- OP3(ORREG1, ORXREG1, OWREG4),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(dotp2, m_s2_xs2_sll, m, compound, 4cycle, C64X, 0,
- FIX1(FIX(op, 0xb)),
- OP3(ORREG1, ORXREG1, OWREGD4),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(dotpn2, m, compound, 4cycle, C64X, 0,
- FIX1(FIX(op, 0x9)),
- OP3(ORREG1, ORXREG1, OWREG4),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(dotpnrsu2, m, compound, 4cycle, C64X, 0,
- FIX1(FIX(op, 0x7)),
- OP3(ORREG1, ORXREG1, OWREG4),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(dotpnrus2, m, compound, 4cycle, C64X, TIC6X_FLAG_MACRO,
- FIX1(FIX(op, 0x7)),
- OP3(ORXREG1, ORREG1, OWREG4),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(src1, reg, 1), ENC(dst, reg, 2)))
-
-INSN(dotprsu2, m, compound, 4cycle, C64X, 0,
- FIX1(FIX(op, 0xd)),
- OP3(ORREG1, ORXREG1, OWREG4),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(dotprus2, m, compound, 4cycle, C64X, TIC6X_FLAG_MACRO,
- FIX1(FIX(op, 0xd)),
- OP3(ORXREG1, ORREG1, OWREG4),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(src1, reg, 1), ENC(dst, reg, 2)))
-
-INSN(dotpsu4, m, compound, 4cycle, C64X, 0,
- FIX1(FIX(op, 0x2)),
- OP3(ORREG1, ORXREG1, OWREG4),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(dotpus4, m, compound, 4cycle, C64X, TIC6X_FLAG_MACRO,
- FIX1(FIX(op, 0x2)),
- OP3(ORXREG1, ORREG1, OWREG4),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(src1, reg, 1), ENC(dst, reg, 2)))
-
-INSN(dotpu4, m, compound, 4cycle, C64X, 0,
- FIX1(FIX(op, 0x6)),
- OP3(ORREG1, ORXREG1, OWREG4),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(dpack2, l, 1_or_2_src_noncond, 1cycle, C64XP, 0,
- FIX1(FIX(op, 0x34)),
- OP3(ORREG1, ORXREG1, OWREGD1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(dpackx2, l, 1_or_2_src_noncond, 1cycle, C64XP, 0,
- FIX1(FIX(op, 0x33)),
- OP3(ORREG1, ORXREG1, OWREGD1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(dpint, l, 1_or_2_src, 4cycle, C67X, TIC6X_FLAG_NO_CROSS,
- FIX2(FIX(op, 0x8), FIX(x, 0)),
- OP2(ORREGD1, OWREG4),
- ENC4(ENC(s, fu, 0), ENC(src2, regpair_msb, 0), ENC(src1, regpair_lsb, 0),
- ENC(dst, reg, 1)))
-
-INSN(dpsp, l, 1_or_2_src, 4cycle, C67X, TIC6X_FLAG_NO_CROSS,
- FIX2(FIX(op, 0x9), FIX(x, 0)),
- OP2(ORREGD1, OWREG4),
- ENC4(ENC(s, fu, 0), ENC(src2, regpair_msb, 0), ENC(src1, regpair_lsb, 0),
- ENC(dst, reg, 1)))
-
-INSN(dptrunc, l, 1_or_2_src, 4cycle, C67X, TIC6X_FLAG_NO_CROSS,
- FIX2(FIX(op, 0x1), FIX(x, 0)),
- OP2(ORREGD1, OWREG4),
- ENC4(ENC(s, fu, 0), ENC(src2, regpair_msb, 0), ENC(src1, regpair_lsb, 0),
- ENC(dst, reg, 1)))
-
-INSN(ext, s, field, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
- FIX1(FIX(op, 0x1)),
- OP4(ORREG1, OACST, OACST, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(csta, ucst, 1),
- ENC(cstb, ucst, 2), ENC(dst, reg, 3)))
-INSN(ext, s, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x2f)),
- OP3(ORXREG1, ORREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(src1, reg, 1), ENC(dst, reg, 2)))
-
-/* 16 bits insn */
-INSNE(ext, hwcst16, s, s2ext, 1cycle, C64XP, 0,
- FIX1(FIX(op, 0x0)),
- OP4(ORREG1, OHWCST16, OHWCST16, OWREG1),
- ENC3(ENC(s, fu, 0), ENC(src, reg, 0), ENC(dst, reg, 3)))
-INSNE(ext, hwcst24, s, s2ext, 1cycle, C64XP, 0,
- FIX1(FIX(op, 0x1)),
- OP4(ORREG1, OHWCST24, OHWCST24, OWREG1),
- ENC3(ENC(s, fu, 0), ENC(src, reg, 0), ENC(dst, reg, 3)))
-/**/
-
-INSN(extu, s, field, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
- FIX1(FIX(op, 0x0)),
- OP4(ORREG1, OACST, OACST, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(csta, ucst, 1),
- ENC(cstb, ucst, 2), ENC(dst, reg, 3)))
-INSN(extu, s, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x2b)),
- OP3(ORXREG1, ORREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(src1, reg, 1), ENC(dst, reg, 2)))
-
-/* 16 bits insn */
-INSNE(extu, hwcst16, s, s2ext, 1cycle, C64XP, 0,
- FIX1(FIX(op, 0x2)),
- OP4(ORREG1, OHWCST16, OHWCST16, OWREG1),
- ENC3(ENC(s, fu, 0), ENC(src, reg, 0), ENC(dst, reg, 3)))
-INSNE(extu, hwcst24, s, s2ext, 1cycle, C64XP, 0,
- FIX1(FIX(op, 0x3)),
- OP4(ORREG1, OHWCST24, OHWCST24, OWREG1),
- ENC3(ENC(s, fu, 0), ENC(src, reg, 0), ENC(dst, reg, 3)))
-INSN(extu, s, sc5, 1cycle, C64XP, 0,
- FIX1(FIX(op, 0)),
- OP4(ORREG1, OACST, OHWCST31, OWREG1Z),
- ENC3(ENC(s, fu, 0), ENC(srcdst, reg, 0), ENC(cst, ucst, 1)))
-/**/
-
-INSN(gmpy, m, 1_or_2_src, 4cycle, C64XP, TIC6X_FLAG_NO_CROSS,
- FIX2(FIX(op, 0x1f), FIX(x, 0)),
- OP3(ORREG1, ORREG1, OWREG4),
- ENC4(ENC(s, fu, 0), ENC(src1, reg, 0), ENC(src2, reg, 1),
- ENC(dst, reg, 2)))
-
-/* This instruction can be predicated as usual; SPRUFE8 is incorrect
- where it shows the "z" field as fixed to 1. */
-INSN(gmpy4, m, compound, 4cycle, C64X, 0,
- FIX1(FIX(op, 0x11)),
- OP3(ORREG1, ORXREG1, OWREG4),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(idle, nfu, nop_idle, nop, C62X, TIC6X_FLAG_MCNOP,
- FIX2(FIX(s, 0), FIX(op, 0xf)),
- OP0(),
- ENC0())
-
-INSN(intdp, l, 1_or_2_src, intdp, C67X, 0,
- FIX2(FIX(op, 0x39), FIX(src1, 0)),
- OP2(ORXREG1, OWREGD45),
- ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(dst, reg, 1)))
-
-INSN(intdpu, l, 1_or_2_src, intdp, C67X, 0,
- FIX2(FIX(op, 0x3b), FIX(src1, 0)),
- OP2(ORXREG1, OWREGD45),
- ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(dst, reg, 1)))
-
-INSN(intsp, l, 1_or_2_src, 4cycle, C67X, 0,
- FIX2(FIX(op, 0x4a), FIX(src1, 0)),
- OP2(ORXREG1, OWREG4),
- ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(dst, reg, 1)))
-
-INSN(intspu, l, 1_or_2_src, 4cycle, C67X, 0,
- FIX2(FIX(op, 0x49), FIX(src1, 0)),
- OP2(ORXREG1, OWREG4),
- ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(dst, reg, 1)))
-
-INSN(ldb, d, load_store, load, C62X,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1),
- FIX2(FIX(op, 2), FIX(r, 0)),
- OP2(ORMEMSB, OWDREG5),
- ENC6(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 0),
- ENC(offsetR, mem_offset, 0), ENC(baseR, reg, 0),
- ENC(srcdst, reg, 1)))
-INSN(ldb, d, load_store_long, load, C62X,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_PREFER(0),
- FIX1(FIX(op, 2)),
- OP2(ORMEMLB, OWDREG5),
- ENC4(ENC(s, data_fu, 0), ENC(y, areg, 0), ENC(offsetR, ulcst_dpr_byte, 0),
- ENC(dst, reg, 1)))
-
-/* 16 bits insn */
-INSN(ldb, d, doff4_dsz_x01, load, C64XP,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE),
- FIX2(FIX(op, 1), FIX(sz, 1)),
- OP2(ORMEMSB, OWTREG5),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1),
- ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset, 0)))
-INSN(ldb, d, dind_dsz_x01, load, C64XP,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE),
- FIX2(FIX(op, 1), FIX(sz, 1)),
- OP2(ORMEMSB, OWTREG5),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1),
- ENC(ptr, reg_ptr, 0), ENC(src1, mem_offset, 0)))
-INSN(ldb, d, dinc_dsz_x01, load, C64XP,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR),
- FIX2(FIX(op, 1), FIX(sz, 1)),
- OP2(ORMEMSB, OWTREG5),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1),
- ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset_minus_one, 0)))
-INSN(ldb, d, ddec_dsz_x01, load, C64XP,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR),
- FIX2(FIX(op, 1), FIX(sz, 1)),
- OP2(ORMEMSB, OWTREG5),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1),
- ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset_minus_one, 0)))
-/**/
-
-INSN(ldbu, d, load_store, load, C62X,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1),
- FIX2(FIX(op, 1), FIX(r, 0)),
- OP2(ORMEMSB, OWDREG5),
- ENC6(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 0),
- ENC(offsetR, mem_offset, 0), ENC(baseR, reg, 0),
- ENC(srcdst, reg, 1)))
-INSN(ldbu, d, load_store_long, load, C62X,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_PREFER(0),
- FIX1(FIX(op, 1)),
- OP2(ORMEMLB, OWDREG5),
- ENC4(ENC(s, data_fu, 0), ENC(y, areg, 0), ENC(offsetR, ulcst_dpr_byte, 0),
- ENC(dst, reg, 1)))
-
-/* 16 bits insn */
-INSN(ldbu, d, dinc_dsz_000, load, C64XP,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR),
- FIX2(FIX(op, 1), FIX(sz, 1)),
- OP2(ORMEMSB, OWTREG5),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(cst, mem_offset_minus_one, 0),
- ENC(ptr, reg_ptr, 0), ENC(srcdst, reg, 1)))
-INSN(ldbu, d, dind_dsz_000, load, C64XP,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE),
- FIX2(FIX(op, 1), FIX(sz, 1)),
- OP2(ORMEMSB, OWTREG5),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(src1, mem_offset, 0),
- ENC(ptr, reg_ptr, 0), ENC(srcdst, reg, 1)))
-INSN(ldbu, d, doff4_dsz_000, load, C64XP,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE),
- FIX2(FIX(op, 1), FIX(sz, 1)),
- OP2(ORMEMSB, OWTREG5),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(cst, mem_offset, 0),
- ENC(ptr, reg_ptr, 0), ENC(srcdst, reg, 1)))
-INSN(ldbu, d, ddec_dsz_000, load, C64XP,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR),
- FIX2(FIX(op, 1), FIX(sz, 1)),
- OP2(ORMEMSB, OWTREG5),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(cst, mem_offset_minus_one, 0),
- ENC(ptr, reg_ptr, 0), ENC(srcdst, reg, 1)))
-/**/
-
-INSN(lddw, d, load_store, load, C64X_AND_C67X,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS,
- FIX2(FIX(op, 6), FIX(r, 1)),
- OP2(ORMEMSD, OWDREGD5),
- ENC6(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 0),
- ENC(offsetR, mem_offset, 0), ENC(baseR, reg, 0),
- ENC(srcdst, reg, 1)))
-
-/* 16 bits insn */
-INSN(lddw, d, dpp, load, C64XP,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREINCR)|TIC6X_FLAG_INSN16_B15PTR|TIC6X_FLAG_INSN16_NORS,
- FIX2(FIX(op, 1), FIX(dw, 1)),
- OP2(ORMEMSD, OWDREGD5),
- ENC4(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1),
- ENC(cst, mem_offset_minus_one, 0)))
-INSN(lddw, d, ddecdw, load, C64XP,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR),
- FIX3(FIX(op, 1), FIX(na, 0), FIX(sz, 0)),
- OP2(ORMEMSD, OWTREGD5),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg_shift, 1),
- ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset_minus_one, 0)))
-INSN(lddw, d, dincdw, load, C64XP,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR),
- FIX3(FIX(op, 1), FIX(na, 0), FIX(sz, 0)),
- OP2(ORMEMSD, OWTREGD5),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg_shift, 1),
- ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset_minus_one, 0)))
-INSN(lddw, d, dinddw, load, C64XP,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE),
- FIX3(FIX(op, 1), FIX(na, 0), FIX(sz, 0)),
- OP2(ORMEMSD, OWTREGD5),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(src1, mem_offset, 0),
- ENC(ptr, reg_ptr, 0), ENC(srcdst, reg_shift, 1)))
-INSN(lddw, d, doff4dw, load, C64XP,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE),
- FIX3(FIX(op, 1), FIX(na, 0), FIX(sz, 0)),
- OP2(ORMEMSD, OWTREGD5),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(cst, mem_offset, 0),
- ENC(ptr, reg_ptr, 0), ENC(srcdst, reg_shift, 1)))
-/**/
-
-INSN(ldh, d, load_store, load, C62X,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1),
- FIX2(FIX(op, 4), FIX(r, 0)),
- OP2(ORMEMSH, OWDREG5),
- ENC6(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 0),
- ENC(offsetR, mem_offset, 0), ENC(baseR, reg, 0),
- ENC(srcdst, reg, 1)))
-INSN(ldh, d, load_store_long, load, C62X,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_PREFER(0),
- FIX1(FIX(op, 4)),
- OP2(ORMEMLH, OWDREG5),
- ENC4(ENC(s, data_fu, 0), ENC(y, areg, 0), ENC(offsetR, ulcst_dpr_half, 0),
- ENC(dst, reg, 1)))
-
-/* 16 bits insn */
-INSN(ldh, d, doff4_dsz_x11, load, C64XP,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE),
- FIX2(FIX(op, 1), FIX(sz, 1)),
- OP2(ORMEMSH, OWTREG5),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(cst, mem_offset, 0),
- ENC(ptr, reg_ptr, 0), ENC(srcdst, reg, 1)))
-INSN(ldh, d, dind_dsz_x11, load, C64XP,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE),
- FIX2(FIX(op, 1), FIX(sz, 1)),
- OP2(ORMEMSH, OWTREG5),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1),
- ENC(ptr, reg_ptr, 0), ENC(src1, mem_offset, 0)))
-INSN(ldh, d, dinc_dsz_x11, load, C64XP,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR),
- FIX2(FIX(op, 1), FIX(sz, 1)),
- OP2(ORMEMSH, OWTREG5),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1),
- ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset_minus_one, 0)))
-INSN(ldh, d, ddec_dsz_x11, load, C64XP,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR),
- FIX2(FIX(op, 1), FIX(sz, 1)),
- OP2(ORMEMSH, OWTREG5),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1),
- ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset_minus_one, 0)))
-/**/
-
-INSN(ldhu, d, load_store, load, C62X,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1),
- FIX2(FIX(op, 0), FIX(r, 0)),
- OP2(ORMEMSH, OWDREG5),
- ENC6(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 0),
- ENC(offsetR, mem_offset, 0), ENC(baseR, reg, 0),
- ENC(srcdst, reg, 1)))
-INSN(ldhu, d, load_store_long, load, C62X,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_PREFER(0),
- FIX1(FIX(op, 0)),
- OP2(ORMEMLH, OWDREG5),
- ENC4(ENC(s, data_fu, 0), ENC(y, areg, 0), ENC(offsetR, ulcst_dpr_half, 0),
- ENC(dst, reg, 1)))
-
-/* 16 bits insn */
-INSN(ldhu, d, doff4_dsz_010, load, C64XP,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE),
- FIX2(FIX(op, 1), FIX(sz, 1)),
- OP2(ORMEMSH, OWTREG5),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(cst, mem_offset, 0),
- ENC(ptr, reg_ptr, 0), ENC(srcdst, reg, 1)))
-INSN(ldhu, d, dind_dsz_010, load, C64XP,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE),
- FIX2(FIX(op, 1), FIX(sz, 1)),
- OP2(ORMEMSH, OWTREG5),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1),
- ENC(ptr, reg_ptr, 0), ENC(src1, mem_offset, 0)))
-INSN(ldhu, d, dinc_dsz_010, load, C64XP,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR),
- FIX2(FIX(op, 1), FIX(sz, 1)),
- OP2(ORMEMSH, OWTREG5),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1),
- ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset_minus_one, 0)))
-INSN(ldhu, d, ddec_dsz_010, load, C64XP,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR),
- FIX2(FIX(op, 1), FIX(sz, 1)),
- OP2(ORMEMSH, OWTREG5),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1),
- ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset_minus_one, 0)))
-/**/
-
-INSN(ldndw, d, load_nonaligned, load, C64X,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_UNALIGNED,
- FIX0(),
- OP2(ORMEMND, OWDREGD5),
- ENC7(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 0),
- ENC(offsetR, mem_offset_noscale, 0), ENC(baseR, reg, 0),
- ENC(sc, scaled, 0), ENC(dst, reg_shift, 1)))
-
-/* 16 bits insn */
-INSN(ldndw, d, ddecdw, load, C64XP,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR),
- FIX3(FIX(op, 1), FIX(na, 1), FIX(sz, 0)),
- OP2(ORMEMND, OWTREGD5),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg_shift, 1),
- ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset_minus_one_noscale, 0)))
-INSN(ldndw, d, dincdw, load, C64XP,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR),
- FIX3(FIX(op, 1), FIX(na, 1), FIX(sz, 0)),
- OP2(ORMEMND, OWTREGD5),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg_shift, 1),
- ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset_minus_one_noscale, 0)))
-INSN(ldndw, d, dinddw, load, C64XP,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_UNALIGNED|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE),
- FIX3(FIX(op, 1), FIX(na, 1), FIX(sz, 0)),
- OP2(ORMEMND, OWTREGD5),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(src1, mem_offset_noscale, 0),
- ENC(ptr, reg_ptr, 0), ENC(srcdst, reg_shift, 1)))
-INSN(ldndw, d, doff4dw, load, C64XP,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_UNALIGNED|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE),
- FIX3(FIX(op, 1), FIX(na, 1), FIX(sz, 0)),
- OP2(ORMEMND, OWTREGD5),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(cst, mem_offset_noscale, 0),
- ENC(ptr, reg_ptr, 0), ENC(srcdst, reg_shift, 1)))
-/**/
-
-INSN(ldnw, d, load_store, load, C64X,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_UNALIGNED,
- FIX2(FIX(op, 3), FIX(r, 1)),
- OP2(ORMEMSW, OWDREG5),
- ENC6(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 0),
- ENC(offsetR, mem_offset, 0), ENC(baseR, reg, 0),
- ENC(srcdst, reg, 1)))
-
-/* 16 bits insn */
-INSN(ldnw, d, doff4_dsz_110, load, C64XP,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE),
- FIX2(FIX(op, 1), FIX(sz, 1)),
- OP2(ORMEMSW, OWTREG5),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1),
- ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset, 0)))
-INSN(ldnw, d, dind_dsz_110, load, C64XP,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE),
- FIX2(FIX(op, 1), FIX(sz, 1)),
- OP2(ORMEMSW, OWTREG5),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1),
- ENC(ptr, reg_ptr, 0), ENC(src1, mem_offset, 0)))
-INSN(ldnw, d, dinc_dsz_110, load, C64XP,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR),
- FIX2(FIX(op, 1), FIX(sz, 1)),
- OP2(ORMEMSW, OWTREG5),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1),
- ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset_minus_one, 0)))
-INSN(ldnw, d, ddec_dsz_110, load, C64XP,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR),
- FIX2(FIX(op, 1), FIX(sz, 1)),
- OP2(ORMEMSW, OWTREG5),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1),
- ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset_minus_one, 0)))
-/**/
-
-INSN(ldw, d, load_store, load, C62X,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1),
- FIX2(FIX(op, 6), FIX(r, 0)),
- OP2(ORMEMSW, OWDREG5),
- ENC6(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 0),
- ENC(offsetR, mem_offset, 0), ENC(baseR, reg, 0),
- ENC(srcdst, reg, 1)))
-INSN(ldw, d, load_store_long, load, C62X,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_PREFER(0),
- FIX1(FIX(op, 6)),
- OP2(ORMEMLW, OWDREG5),
- ENC4(ENC(s, data_fu, 0), ENC(y, areg, 0), ENC(offsetR, ulcst_dpr_word, 0),
- ENC(dst, reg, 1)))
-
-/* 16 bits insn */
-INSN(ldw, d, doff4_dsz_0xx, load, C64XP,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE),
- FIX2(FIX(op, 1), FIX(sz, 0)),
- OP2(ORMEMSW, OWTREG5),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1),
- ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset, 0)))
-INSN(ldw, d, doff4_dsz_100, load, C64XP,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE),
- FIX2(FIX(op, 1), FIX(sz, 1)),
- OP2(ORMEMSW, OWTREG5),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1),
- ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset, 0)))
-INSN(ldw, d, dind_dsz_0xx, load, C64XP,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE),
- FIX2(FIX(op, 1), FIX(sz, 0)),
- OP2(ORMEMSW, OWTREG5),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1),
- ENC(ptr, reg_ptr, 0), ENC(src1, mem_offset, 0)))
-INSN(ldw, d, dind_dsz_100, load, C64XP,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE),
- FIX2(FIX(op, 1), FIX(sz, 1)),
- OP2(ORMEMSW, OWTREG5),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1),
- ENC(ptr, reg_ptr, 0), ENC(src1, mem_offset, 0)))
-INSN(ldw, d, dinc_dsz_0xx, load, C64XP,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR),
- FIX2(FIX(op, 1), FIX(sz, 0)),
- OP2(ORMEMSW, OWTREG5),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1),
- ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset_minus_one, 0)))
-INSN(ldw, d, dinc_dsz_100, load, C64XP,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR),
- FIX2(FIX(op, 1), FIX(sz, 1)),
- OP2(ORMEMSW, OWTREG5),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1),
- ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset_minus_one, 0)))
-INSN(ldw, d, ddec_dsz_0xx, load, C64XP,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR),
- FIX2(FIX(op, 1), FIX(sz, 0)),
- OP2(ORMEMSW, OWTREG5),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1),
- ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset_minus_one, 0)))
-INSN(ldw, d, ddec_dsz_100, load, C64XP,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR),
- FIX2(FIX(op, 1), FIX(sz, 1)),
- OP2(ORMEMSW, OWTREG5),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1),
- ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset_minus_one, 0)))
-INSN(ldw, d, dpp, load, C64XP,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREINCR)|TIC6X_FLAG_INSN16_B15PTR|TIC6X_FLAG_INSN16_NORS,
- FIX2(FIX(op, 1), FIX(dw, 0)),
- OP2(ORMEMSW, OWTREG5),
- ENC4(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1),
- ENC(cst, mem_offset_minus_one, 0)))
-INSN(ldw, d, dstk, load, C64XP,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE)|TIC6X_FLAG_INSN16_B15PTR,
- FIX2(FIX(op, 0x1), FIX(s, 1)),
- OP2(ORMEMSW, OWTREG5),
- ENC4(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1),
- ENC(cst, mem_offset, 0)))
-/**/
-
-INSN(ll, d, 1_or_2_src, load, C64XP,
- TIC6X_FLAG_LOAD|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_SIDE_T2_ONLY|TIC6X_FLAG_NO_CROSS,
- FIX3(FIX(s, 1), FIX(op, 0xc), FIX(src1, 0)),
- OP2(ORMEMDW, OWDREG5),
- ENC2(ENC(src2, reg, 0), ENC(dst, reg, 1)))
-
-INSNE(lmbd, l_ui_xui_ui, l, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x6b)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(lmbd, l_s5_xui_ui, l, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x6a)),
- OP3(OACST, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(max2, l, 1_or_2_src, 1cycle, C64X, 0,
- FIX1(FIX(op, 0x42)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSN(max2, s, ext_1_or_2_src, 1cycle, C64XP, 0,
- FIX1(FIX(op, 0xd)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(maxu4, l, 1_or_2_src, 1cycle, C64X, 0,
- FIX1(FIX(op, 0x43)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(min2, l, 1_or_2_src, 1cycle, C64X, 0,
- FIX1(FIX(op, 0x41)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSN(min2, s, ext_1_or_2_src, 1cycle, C64XP, 0,
- FIX1(FIX(op, 0xc)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(minu4, l, 1_or_2_src, 1cycle, C64X, 0,
- FIX1(FIX(op, 0x48)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSNE(mpy, m_sl16_xsl16_si, m, mpy, 1616_m, C62X, 0,
- FIX1(FIX(op, 0x19)),
- OP3(ORREG1, ORXREG1, OWREG2),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(mpy, m_s5_xsl16_si, m, mpy, 1616_m, C62X, 0,
- FIX1(FIX(op, 0x18)),
- OP3(OACST, ORXREG1, OWREG2),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-/* 16-bit insn. */
-INSN(mpy, m, m3_sat_0, 1616_m, C67X, 0,
- FIX1(FIX(op, 0x0)),
- OP3(ORREG1, ORXREG1, OWREG2),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg_shift, 2)))
-
-INSN(mpydp, m, mpy, mpydp, C67X, 0,
- FIX1(FIX(op, 0x0e)),
- OP3(ORREGD1234, ORXREGD1324, OWREGD910),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(mpyh, m, mpy, 1616_m, C62X, 0,
- FIX1(FIX(op, 0x01)),
- OP3(ORREG1, ORXREG1, OWREG2),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-/* 16 bits insn */
-INSN(mpyh, m, m3_sat_0, 1616_m, C67X, 0,
- FIX1(FIX(op, 0x1)),
- OP3(ORREG1, ORXREG1, OWREG2),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg_shift, 2)))
-/**/
-
-INSN(mpyhi, m, compound, 4cycle, C64X, 0,
- FIX1(FIX(op, 0x14)),
- OP3(ORREG1, ORXREG1, OWREGD4),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(mpyhir, m, compound, 4cycle, C64X, 0,
- FIX1(FIX(op, 0x10)),
- OP3(ORREG1, ORXREG1, OWREG4),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(mpyhl, m, mpy, 1616_m, C62X, 0,
- FIX1(FIX(op, 0x09)),
- OP3(ORREG1, ORXREG1, OWREG2),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-/* 16 bits insn */
-INSN(mpyhl, m, m3_sat_0, 1616_m, C67X, 0,
- FIX1(FIX(op, 0x3)),
- OP3(ORREG1, ORXREG1, OWREG2),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg_shift, 2)))
-/**/
-
-INSN(mpyhlu, m, mpy, 1616_m, C62X, 0,
- FIX1(FIX(op, 0x0f)),
- OP3(ORREG1, ORXREG1, OWREG2),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(mpyhslu, m, mpy, 1616_m, C62X, 0,
- FIX1(FIX(op, 0x0b)),
- OP3(ORREG1, ORXREG1, OWREG2),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(mpyhsu, m, mpy, 1616_m, C62X, 0,
- FIX1(FIX(op, 0x03)),
- OP3(ORREG1, ORXREG1, OWREG2),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(mpyhu, m, mpy, 1616_m, C62X, 0,
- FIX1(FIX(op, 0x07)),
- OP3(ORREG1, ORXREG1, OWREG2),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(mpyhuls, m, mpy, 1616_m, C62X, 0,
- FIX1(FIX(op, 0x0d)),
- OP3(ORREG1, ORXREG1, OWREG2),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(mpyhus, m, mpy, 1616_m, C62X, 0,
- FIX1(FIX(op, 0x05)),
- OP3(ORREG1, ORXREG1, OWREG2),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSNE(mpyi, m_si_xsi_si, m, mpy, mpyi, C67X, 0,
- FIX1(FIX(op, 0x04)),
- OP3(ORREG14, ORXREG14, OWREG9),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(mpyi, m_s5_xsi_si, m, mpy, mpyi, C67X, 0,
- FIX1(FIX(op, 0x06)),
- OP3(OACST, ORXREG14, OWREG9),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSNE(mpyid, m_si_xsi_sll, m, mpy, mpyid, C67X, 0,
- FIX1(FIX(op, 0x08)),
- OP3(ORREG14, ORXREG14, OWREGD910),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(mpyid, m_s5_xsi_sll, m, mpy, mpyid, C67X, 0,
- FIX1(FIX(op, 0x0c)),
- OP3(OACST, ORXREG14, OWREGD910),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(mpyih, m, compound, 4cycle, C64X, TIC6X_FLAG_MACRO,
- FIX1(FIX(op, 0x14)),
- OP3(ORXREG1, ORREG1, OWREGD4),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(src1, reg, 1), ENC(dst, reg, 2)))
-
-INSN(mpyihr, m, compound, 4cycle, C64X, TIC6X_FLAG_MACRO,
- FIX1(FIX(op, 0x10)),
- OP3(ORXREG1, ORREG1, OWREG4),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(src1, reg, 1), ENC(dst, reg, 2)))
-
-INSN(mpyil, m, compound, 4cycle, C64X, TIC6X_FLAG_MACRO,
- FIX1(FIX(op, 0x15)),
- OP3(ORXREG1, ORREG1, OWREGD4),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(src1, reg, 1), ENC(dst, reg, 2)))
-
-INSN(mpyilr, m, compound, 4cycle, C64X, TIC6X_FLAG_MACRO,
- FIX1(FIX(op, 0x0e)),
- OP3(ORXREG1, ORREG1, OWREG4),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(src1, reg, 1), ENC(dst, reg, 2)))
-
-INSN(mpylh, m, mpy, 1616_m, C62X, 0,
- FIX1(FIX(op, 0x11)),
- OP3(ORREG1, ORXREG1, OWREG2),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-/* 16 bits insn */
-INSN(mpylh, m, m3_sat_0, 1616_m, C67X, 0,
- FIX1(FIX(op, 0x2)),
- OP3(ORREG1, ORXREG1, OWREG2),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg_shift, 2)))
-/**/
-
-INSN(mpylhu, m, mpy, 1616_m, C62X, 0,
- FIX1(FIX(op, 0x17)),
- OP3(ORREG1, ORXREG1, OWREG2),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(mpyli, m, compound, 4cycle, C64X, 0,
- FIX1(FIX(op, 0x15)),
- OP3(ORREG1, ORXREG1, OWREGD4),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(mpylir, m, compound, 4cycle, C64X, 0,
- FIX1(FIX(op, 0x0e)),
- OP3(ORREG1, ORXREG1, OWREG4),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(mpylshu, m, mpy, 1616_m, C62X, 0,
- FIX1(FIX(op, 0x13)),
- OP3(ORREG1, ORXREG1, OWREG2),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(mpyluhs, m, mpy, 1616_m, C62X, 0,
- FIX1(FIX(op, 0x15)),
- OP3(ORREG1, ORXREG1, OWREG2),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(mpysp, m, mpy, 4cycle, C67X, 0,
- FIX1(FIX(op, 0x1c)),
- OP3(ORREG1, ORXREG1, OWREG4),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-/* Contrary to SPRU733A, MPYSPDP and MPYSP2DP are on both C67X and
- C67X+. */
-INSN(mpyspdp, m, compound, mpyspdp, C67X, 0,
- FIX1(FIX(op, 0x16)),
- OP3(ORREG12, ORXREGD12, OWREGD67),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(mpysp2dp, m, compound, mpyspdp, C67X, 0,
- FIX1(FIX(op, 0x17)),
- OP3(ORREG1, ORXREG1, OWREGD45),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSNE(mpysu, m_sl16_xul16_si, m, mpy, 1616_m, C62X, 0,
- FIX1(FIX(op, 0x1b)),
- OP3(ORREG1, ORXREG1, OWREG2),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(mpysu, m_s5_xul16_si, m, mpy, 1616_m, C62X, 0,
- FIX1(FIX(op, 0x1e)),
- OP3(OACST, ORXREG1, OWREG2),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(mpysu4, m, compound, 4cycle, C64X, 0,
- FIX1(FIX(op, 0x05)),
- OP3(ORREG1, ORXREG1, OWREGD4),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(mpyu, m, mpy, 1616_m, C62X, 0,
- FIX1(FIX(op, 0x1f)),
- OP3(ORREG1, ORXREG1, OWREG2),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(mpyu4, m, compound, 4cycle, C64X, 0,
- FIX1(FIX(op, 0x04)),
- OP3(ORREG1, ORXREG1, OWREGD4),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(mpyus, m, mpy, 1616_m, C62X, 0,
- FIX1(FIX(op, 0x1d)),
- OP3(ORREG1, ORXREG1, OWREG2),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(mpyus4, m, compound, 4cycle, C64X, TIC6X_FLAG_MACRO,
- FIX1(FIX(op, 0x05)),
- OP3(ORXREG1, ORREG1, OWREGD4),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(src1, reg, 1), ENC(dst, reg, 2)))
-
-INSN(mpy2, m, compound, 4cycle, C64X, 0,
- FIX1(FIX(op, 0x00)),
- OP3(ORREG1, ORXREG1, OWREGD4),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(mpy2ir, m, 1_or_2_src, 4cycle, C64XP, 0,
- FIX1(FIX(op, 0x0f)),
- OP3(ORREG1, ORXREG1, OWREGD4),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSNE(mpy32, 32_32_32, m, mpy, 4cycle, C64XP, 0,
- FIX1(FIX(op, 0x10)),
- OP3(ORREG1, ORXREG1, OWREG4),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(mpy32, 32_32_64, m, mpy, 4cycle, C64XP, 0,
- FIX1(FIX(op, 0x14)),
- OP3(ORREG1, ORXREG1, OWREGD4),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(mpy32su, m, mpy, 4cycle, C64XP, 0,
- FIX1(FIX(op, 0x16)),
- OP3(ORREG1, ORXREG1, OWREGD4),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(mpy32u, m, compound, 4cycle, C64XP, 0,
- FIX1(FIX(op, 0x18)),
- OP3(ORREG1, ORXREG1, OWREGD4),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(mpy32us, m, compound, 4cycle, C64XP, 0,
- FIX1(FIX(op, 0x19)),
- OP3(ORREG1, ORXREG1, OWREGD4),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-/* "or" forms of "mv" are preferred over "add" forms when available
- because "or" uses less power. However, 40-bit moves are only
- available through "add", and before C64X D-unit moves are only
- available through "add" (without cross paths being available). */
-INSNE(mv, l_xui_ui, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_MACRO,
- FIX2(FIX(op, 0x7e), FIX(src1, 0)),
- OP2(ORXREG1, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(dst, reg, 1)))
-INSNE(mv, l_sl_sl, l, 1_or_2_src, 1cycle, C62X,
- TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO,
- FIX3(FIX(op, 0x20), FIX(x, 0), FIX(src1, 0)),
- OP2(ORREGL1, OWREGL1),
- ENC3(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(dst, reg, 1)))
-INSNE(mv, s_xui_ui, s, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_MACRO,
- FIX2(FIX(op, 0x1a), FIX(src1, 0)),
- OP2(ORXREG1, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(dst, reg, 1)))
-INSNE(mv, d_si_si, d, 1_or_2_src, 1cycle, C62X,
- TIC6X_FLAG_MACRO|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(0),
- FIX2(FIX(op, 0x12), FIX(src1, 0)),
- OP2(ORREG1, OWREG1),
- ENC3(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(dst, reg, 1)))
-INSNE(mv, d_xui_ui, d, ext_1_or_2_src, 1cycle, C64X,
- TIC6X_FLAG_MACRO|TIC6X_FLAG_PREFER(1),
- FIX2(FIX(op, 0x3), FIX(src1, 0)),
- OP2(ORXREG1, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(dst, reg, 1)))
-
-/* 16 bits insn */
-INSNU(mv, l, lsdmvto, 1cycle, C64X, 0,
- FIX1(FIX(unit, 0x0)),
- OP2(ORXREG1, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(x, xpath, 0), ENC(dst, reg, 1)))
-
-INSNU(mv, s, lsdmvto, 1cycle, C64X, 0,
- FIX1(FIX(unit, 0x1)),
- OP2(ORXREG1, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(x, xpath, 0), ENC(dst, reg, 1)))
-
-INSNU(mv, d, lsdmvto, 1cycle, C64X, 0,
- FIX1(FIX(unit, 0x2)),
- OP2(ORXREG1, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(x, xpath, 0), ENC(dst, reg, 1)))
-
-INSNU(mv, l, lsdmvfr, 1cycle, C64X, 0,
- FIX1(FIX(unit, 0x0)),
- OP2(ORXREG1, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(x, xpath, 0), ENC(dst, reg, 1)))
-
-INSNU(mv, s, lsdmvfr, 1cycle, C64X, 0,
- FIX1(FIX(unit, 0x1)),
- OP2(ORXREG1, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(x, xpath, 0), ENC(dst, reg, 1)))
-
-INSNU(mv, d, lsdmvfr, 1cycle, C64X, 0,
- FIX1(FIX(unit, 0x2)),
- OP2(ORXREG1, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(x, xpath, 0), ENC(dst, reg, 1)))
-/**/
-
-INSNE(mvc, from_cr, s, 1_or_2_src, 1cycle, C62X,
- TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_NO_CROSS,
- FIX3(FIX(s, 1), FIX(op, 0x0f), FIX(x, 0)),
- OP2(ORCREG1, OWREG1),
- ENC3(ENC(src1, crhi, 0), ENC(src2, crlo, 0), ENC(dst, reg, 1)))
-INSNE(mvc, to_cr, s, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_SIDE_B_ONLY,
- FIX2(FIX(s, 1), FIX(op, 0x0e)),
- OP2(ORXREG1, OWCREG1),
- ENC4(ENC(x, xpath, 0), ENC(src2, reg, 0), ENC(src1, crhi, 1),
- ENC(dst, crlo, 1)))
-
-/* 16 bits insn */
-INSN(mvc, s, sx1, 1cycle, C64XP,
- TIC6X_FLAG_NO_CROSS,
- FIX1(FIX(op, 0x6)),
- OP2(ORREG1B, OWILC1),
- ENC2(ENC(s, fu, 0), ENC(srcdst, reg, 0)))
-/**/
-
-INSN(mvd, m, unary, 4cycle, C64X, 0,
- FIX1(FIX(op, 0x1a)),
- OP2(ORXREG1, OWREG4),
- ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(dst, reg, 1)))
-
-INSN(mvk, s, mvk, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
- FIX1(FIX(h, 0)),
- OP2(OLCST, OWREG1),
- ENC3(ENC(s, fu, 0), ENC(cst, scst, 0), ENC(dst, reg, 1)))
-INSN(mvk, l, unary, 1cycle, C64X, TIC6X_FLAG_NO_CROSS,
- FIX2(FIX(x, 0), FIX(op, 0x05)),
- OP2(OACST, OWREG1),
- ENC3(ENC(s, fu, 0), ENC(src2, scst, 0), ENC(dst, reg, 1)))
-INSN(mvk, d, 1_or_2_src, 1cycle, C64X, TIC6X_FLAG_NO_CROSS,
- FIX2(FIX(op, 0x00), FIX(src2, 0)),
- OP2(OACST, OWREG1),
- ENC3(ENC(s, fu, 0), ENC(src1, scst, 0), ENC(dst, reg, 1)))
-
-/* 16 bits insn */
-INSN(mvk, l, lx5, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS,
- FIX0(),
- OP2(OLCST, OWREG1),
- ENC3(ENC(s, fu, 0), ENC(cst, scst, 0), ENC(dst, reg, 1)))
-INSN(mvk, s, smvk8, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS,
- FIX0(),
- OP2(OLCST, OWREG1),
- ENC3(ENC(s, fu, 0), ENC(cst, ucst, 0), ENC(dst, reg, 1)))
-INSNU(mvk, l, lsdx1c, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_SPRED,
- FIX1(FIX(unit, 0x0)),
- OP2(OACST, OWREG1),
- ENC3(ENC(s, fu, 0), ENC(cst, ucst, 0), ENC(dst, reg, 1)))
-INSNU(mvk, s, lsdx1c, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_SPRED,
- FIX1(FIX(unit, 0x1)),
- OP2(OACST, OWREG1),
- ENC3(ENC(s, fu, 0), ENC(cst, ucst, 0), ENC(dst, reg, 1)))
-INSNU(mvk, d, lsdx1c, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_SPRED,
- FIX1(FIX(unit, 0x2)),
- OP2(OACST, OWREG1),
- ENC3(ENC(s, fu, 0), ENC(cst, ucst, 0), ENC(dst, reg, 1)))
-INSNUE(mvk, zero, l, lsdx1, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS,
- FIX2(FIX(op, 0), FIX(unit, 0x0)),
- OP2(OHWCST0, OWREG1),
- ENC2(ENC(s, fu, 0), ENC(srcdst, reg, 1)))
-INSNUE(mvk, zero, s, lsdx1, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS,
- FIX2(FIX(op, 0), FIX(unit, 0x1)),
- OP2(OHWCST0, OWREG1),
- ENC2(ENC(s, fu, 0), ENC(srcdst, reg, 1)))
-INSNUE(mvk, zero, d, lsdx1, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS,
- FIX2(FIX(op, 0), FIX(unit, 0x2)),
- OP2(OHWCST0, OWREG1),
- ENC2(ENC(s, fu, 0), ENC(srcdst, reg, 1)))
-INSNUE(mvk, one, l, lsdx1, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS,
- FIX2(FIX(op, 1), FIX(unit, 0x0)),
- OP2(OHWCST1, OWREG1),
- ENC2(ENC(s, fu, 0), ENC(srcdst, reg, 1)))
-INSNUE(mvk, one, s, lsdx1, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS,
- FIX2(FIX(op, 1), FIX(unit, 0x1)),
- OP2(OHWCST1, OWREG1),
- ENC2(ENC(s, fu, 0), ENC(srcdst, reg, 1)))
-INSNUE(mvk, one, d, lsdx1, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS,
- FIX2(FIX(op, 1), FIX(unit, 0x2)),
- OP2(OHWCST1, OWREG1),
- ENC2(ENC(s, fu, 0), ENC(srcdst, reg, 1)))
-/**/
-
-INSN(mvkh, s, mvk, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
- FIX1(FIX(h, 1)),
- OP2(OLCST, OWREG1),
- ENC3(ENC(s, fu, 0), ENC(cst, lcst_high16, 0), ENC(dst, reg, 1)))
-
-INSN(mvklh, s, mvk, 1cycle, C62X, TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO,
- FIX1(FIX(h, 1)),
- OP2(OLCST, OWREG1),
- ENC3(ENC(s, fu, 0), ENC(cst, lcst_low16, 0), ENC(dst, reg, 1)))
-
-INSN(mvkl, s, mvk, 1cycle, C62X, TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO,
- FIX1(FIX(h, 0)),
- OP2(OLCST, OWREG1),
- ENC3(ENC(s, fu, 0), ENC(cst, lcst_low16, 0), ENC(dst, reg, 1)))
-
-INSNE(neg, s_xsi_si, s, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_MACRO,
- FIX2(FIX(op, 0x16), FIX(src1, 0)),
- OP2(ORXREG1, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(dst, reg, 1)))
-INSNE(neg, l_xsi_si, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_MACRO,
- FIX2(FIX(op, 0x06), FIX(src1, 0)),
- OP2(ORXREG1, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(dst, reg, 1)))
-INSNE(neg, l_sl_sl, l, 1_or_2_src, 1cycle, C62X,
- TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO,
- FIX2(FIX(op, 0x24), FIX(src1, 0)),
- OP2(ORREGL1, OWREGL1),
- ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(dst, reg, 1)))
-
-INSN(nop, nfu, nop_idle, nop, C62X, 0,
- FIX2(FIX(s, 0), RAN(op, 0, 8)),
- OP1(OACST),
- ENC1(ENC(op, ucst_minus_one, 0)))
-INSNE(nop, 1, nfu, nop_idle, nop, C62X, TIC6X_FLAG_MACRO,
- FIX2(FIX(s, 0), FIX(op, 0)),
- OP0(),
- ENC0())
-
-/* 16 bits insn */
-/* contrary to sprufe8b.pdf p767, and accordingly to
- * dis6x.exe output, unop3 opcode is decoded as NOP N3 + 1 */
-INSN(nop, nfu, unop, nop, C64XP, 0,
- FIX0(),
- OP1(OACST),
- ENC1(ENC(n, ucst_minus_one, 0)))
-/**/
-
-INSNE(norm, l_xsi_ui, l, 1_or_2_src, 1cycle, C62X, 0,
- FIX2(FIX(op, 0x63), FIX(src1, 0)),
- OP2(ORXREG1, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(dst, reg, 1)))
-INSNE(norm, l_sl_ui, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
- FIX3(FIX(op, 0x60), FIX(x, 0), FIX(src1, 0)),
- OP2(ORREGL1, OWREG1),
- ENC3(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(dst, reg, 1)))
-
-INSN(not, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_MACRO,
- FIX2(FIX(op, 0x6e), FIX(src1, 0x1f)),
- OP2(ORXREG1, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(dst, reg, 1)))
-INSN(not, s, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_MACRO,
- FIX2(FIX(op, 0x0a), FIX(src1, 0x1f)),
- OP2(ORXREG1, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(dst, reg, 1)))
-INSN(not, d, ext_1_or_2_src, 1cycle, C64X, TIC6X_FLAG_MACRO,
- FIX2(FIX(op, 0xf), FIX(src1, 0x1f)),
- OP2(ORXREG1, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(dst, reg, 1)))
-
-INSNE(or, d_ui_xui_ui, d, ext_1_or_2_src, 1cycle, C64X, 0,
- FIX1(FIX(op, 0x2)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(or, d_s5_xui_ui, d, ext_1_or_2_src, 1cycle, C64X, 0,
- FIX1(FIX(op, 0x3)),
- OP3(OACST, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(or, l_ui_xui_ui, l, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x7f)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(or, l_s5_xui_ui, l, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x7e)),
- OP3(OACST, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(or, s_ui_xui_ui, s, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x1b)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(or, s_s5_xui_ui, s, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x1a)),
- OP3(OACST, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-/* 16 bits insn */
-INSN(or, l, l2c, 1cycle, C64XP, 0,
- FIX1(FIX(op, 1)),
- OP3(ORREG1, ORXREG1, OWREG1NORS),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-/**/
-
-INSN(pack2, l, 1_or_2_src, 1cycle, C64X, 0,
- FIX1(FIX(op, 0x0)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSN(pack2, s, ext_1_or_2_src, 1cycle, C64X, 0,
- FIX1(FIX(op, 0xf)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(packh2, l, 1_or_2_src, 1cycle, C64X, 0,
- FIX1(FIX(op, 0x1e)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSN(packh2, s, 1_or_2_src, 1cycle, C64X, 0,
- FIX1(FIX(op, 0x9)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(packh4, l, 1_or_2_src, 1cycle, C64X, 0,
- FIX1(FIX(op, 0x69)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(packhl2, l, 1_or_2_src, 1cycle, C64X, 0,
- FIX1(FIX(op, 0x1c)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSN(packhl2, s, 1_or_2_src, 1cycle, C64X, 0,
- FIX1(FIX(op, 0x8)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(packlh2, l, 1_or_2_src, 1cycle, C64X, 0,
- FIX1(FIX(op, 0x1b)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSN(packlh2, s, 1_or_2_src, 1cycle, C64X, 0,
- FIX1(FIX(op, 0x10)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(packl4, l, 1_or_2_src, 1cycle, C64X, 0,
- FIX1(FIX(op, 0x68)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(rcpdp, s, 1_or_2_src, 2cycle_dp, C67X, TIC6X_FLAG_NO_CROSS,
- FIX2(FIX(op, 0x2d), FIX(x, 0)),
- OP2(ORREGD1, OWREGD12),
- ENC4(ENC(s, fu, 0), ENC(src2, regpair_msb, 0), ENC(src1, regpair_lsb, 0),
- ENC(dst, reg, 1)))
-
-INSN(rcpsp, s, 1_or_2_src, 1cycle, C67X, 0,
- FIX2(FIX(op, 0x3d), FIX(src1, 0)),
- OP2(ORXREG1, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(dst, reg, 1)))
-
-INSN(ret, s, ext_branch_cond_imm, branch, C62X,
- TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO|TIC6X_FLAG_RETURN,
- FIX0(),
- OP1(OLCST),
- ENC2(ENC(s, fu, 0), ENC(cst, pcrel, 0)))
-INSN(ret, s, branch, branch, C62X,
- TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_MACRO|TIC6X_FLAG_RETURN,
- FIX1(FIX(s, 1)),
- OP1(ORXREG1),
- ENC2(ENC(x, xpath, 0), ENC(src2, reg, 0)))
-INSN(ret, s, b_irp, branch, C62X,
- TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_MACRO|TIC6X_FLAG_RETURN,
- FIX3(FIX(s, 1), FIX(x, 0), FIX(dst, 0)),
- OP1(ORIRP1),
- ENC0())
-INSN(ret, s, b_nrp, branch, C62X,
- TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_MACRO|TIC6X_FLAG_RETURN,
- FIX3(FIX(s, 1), FIX(x, 0), FIX(dst, 0)),
- OP1(ORNRP1),
- ENC0())
-
-INSN(retp, s, call_imm_nop, branch, C64XP,
- TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MCNOP|TIC6X_FLAG_MACRO|TIC6X_FLAG_RETURN,
- FIX1(FIX(z, 1)),
- OP2(OLCST, OWRETREG1),
- ENC2(ENC(s, fu, 0), ENC(cst, pcrel, 0)))
-
-INSN(rint, nfu, rint, 1cycle, C64XP, 0,
- FIX1(FIX(s, 0)),
- OP0(),
- ENC0())
-
-INSNE(rotl, m_ui_xui_ui, m, compound, 1616_m, C64X, 0,
- FIX1(FIX(op, 0x1d)),
- OP3(ORXREG1, ORREG1, OWREG2),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(src1, reg, 1), ENC(dst, reg, 2)))
-INSNE(rotl, m_u5_xui_ui, m, compound, 1616_m, C64X, 0,
- FIX1(FIX(op, 0x1e)),
- OP3(ORXREG1, OACST, OWREG2),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(src1, ucst, 1), ENC(dst, reg, 2)))
-
-INSN(rpack2, s, ext_1_or_2_src_noncond, 1cycle, C64XP, 0,
- FIX2(FIX(op, 0xb), FIX(z, 1)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(rsqrdp, s, 1_or_2_src, 2cycle_dp, C67X, TIC6X_FLAG_NO_CROSS,
- FIX2(FIX(op, 0x2e), FIX(x, 0)),
- OP2(ORREGD1, OWREGD12),
- ENC4(ENC(s, fu, 0), ENC(src2, regpair_msb, 0), ENC(src1, regpair_lsb, 0),
- ENC(dst, reg, 1)))
-
-INSN(rsqrsp, s, 1_or_2_src, 1cycle, C67X, 0,
- FIX2(FIX(op, 0x3e), FIX(src1, 0)),
- OP2(ORXREG1, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(dst, reg, 1)))
-
-INSNE(sadd, l_si_xsi_si, l, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x13)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(sadd, l_xsi_sl_sl, l, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x31)),
- OP3(ORXREG1, ORREGL1, OWREGL1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(sadd, l_s5_xsi_si, l, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x12)),
- OP3(OACST, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(sadd, l_s5_sl_sl, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
- FIX1(FIX(op, 0x30)),
- OP3(OACST, ORREGL1, OWREGL1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(sadd, s_si_xsi_si, s, 1_or_2_src, 1cycle, C64X, 0,
- FIX1(FIX(op, 0x20)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-/* 16 bits insn */
-INSN(sadd, l, l3_sat_1, 1cycle, C64XP, 0,
- FIX1(FIX(op, 0)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(sadd, s, s3_sat_1, 1cycle, C64XP,0,
- FIX1(FIX(op, 0x0)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-/**/
-
-INSN(sadd2, s, ext_1_or_2_src, 1cycle, C64X, 0,
- FIX1(FIX(op, 0x0)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(saddsub, l, 1_or_2_src_noncond, 1cycle, C64XP, 0,
- FIX1(FIX(op, 0x0e)),
- OP3(ORREG1, ORXREG1, OWREGD1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(saddsub2, l, 1_or_2_src_noncond, 1cycle, C64XP, 0,
- FIX1(FIX(op, 0x0f)),
- OP3(ORREG1, ORXREG1, OWREGD1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(saddsu2, s, ext_1_or_2_src, 1cycle, C64X, TIC6X_FLAG_MACRO,
- FIX1(FIX(op, 0x1)),
- OP3(ORXREG1, ORREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(src1, reg, 1), ENC(dst, reg, 2)))
-
-INSN(saddus2, s, ext_1_or_2_src, 1cycle, C64X, 0,
- FIX1(FIX(op, 0x1)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(saddu4, s, ext_1_or_2_src, 1cycle, C64X, 0,
- FIX1(FIX(op, 0x3)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(sat, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
- FIX3(FIX(op, 0x40), FIX(x, 0), FIX(src1, 0)),
- OP2(ORREGL1, OWREG1),
- ENC3(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(dst, reg, 1)))
-
-INSN(set, s, field, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
- FIX1(FIX(op, 0x2)),
- OP4(ORREG1, OACST, OACST, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(csta, ucst, 1),
- ENC(cstb, ucst, 2), ENC(dst, reg, 3)))
-INSN(set, s, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x3b)),
- OP3(ORXREG1, ORREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(src1, reg, 1), ENC(dst, reg, 2)))
-
-/* 16 bits insn */
-INSN(set, s, sc5, 1cycle, C64XP, 0,
- FIX1(FIX(op, 1)),
- OP4(ORREG1, OACST, OACST, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(srcdst, reg, 0), ENC(cst, ucst, 1),
- ENC(cst, ucst, 2), ENC(srcdst, reg, 3)))
-/**/
-
-INSN(shfl, m, unary, 1616_m, C64X, 0,
- FIX1(FIX(op, 0x1c)),
- OP2(ORXREG1, OWREG2),
- ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(dst, reg, 1)))
-
-INSN(shfl3, l, 1_or_2_src_noncond, 1cycle, C64XP, 0,
- FIX1(FIX(op, 0x36)),
- OP3(ORREG1, ORXREG1, OWREGD1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSNE(shl, s_xsi_ui_si, s, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x33)),
- OP3(ORXREG1, ORREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(src1, reg, 1), ENC(dst, reg, 2)))
-INSNE(shl, s_sl_ui_sl, s, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
- FIX2(FIX(op, 0x31), FIX(x, 0)),
- OP3(ORREGL1, ORREG1, OWREGL1),
- ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, reg, 1),
- ENC(dst, reg, 2)))
-INSNE(shl, s_xui_ui_ul, s, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x13)),
- OP3(ORXREG1, ORREG1, OWREGL1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(src1, reg, 1), ENC(dst, reg, 2)))
-INSNE(shl, s_xsi_u5_si, s, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x32)),
- OP3(ORXREG1, OACST, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(src1, ucst, 1), ENC(dst, reg, 2)))
-INSNE(shl, s_sl_u5_sl, s, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
- FIX2(FIX(op, 0x30), FIX(x, 0)),
- OP3(ORREGL1, OACST, OWREGL1),
- ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1),
- ENC(dst, reg, 2)))
-INSNE(shl, s_xui_u5_ul, s, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x12)),
- OP3(ORXREG1, OACST, OWREGL1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(src1, ucst, 1), ENC(dst, reg, 2)))
-
-/* 16bit insn */
-INSN(shl, s, s3i, 1cycle, C64XP, 0,
- FIX1(FIX(op, 0x0)),
- OP3(ORXREG1, OACST, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(cst, cst_s3i, 1), ENC(dst, reg, 2)))
-INSN(shl, s, ssh5_sat_x, 1cycle, C64XP,
- TIC6X_FLAG_NO_CROSS,
- FIX1(FIX(op, 0x0)),
- OP3(ORREG1, OACST, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(srcdst, reg, 0),
- ENC(cst, ucst, 1), ENC(srcdst, reg, 2)))
-INSN(shl, s, s2sh, 1cycle, C64XP, 0,
- FIX1(FIX(op, 0x0)),
- OP3(ORREG1, ORREG1, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(srcdst, reg, 0), ENC(src1, reg, 1),
- ENC(srcdst, reg, 2)))
-/**/
-
-INSN(shlmb, l, 1_or_2_src, 1cycle, C64X, 0,
- FIX1(FIX(op, 0x61)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSN(shlmb, s, ext_1_or_2_src, 1cycle, C64X, 0,
- FIX1(FIX(op, 0x9)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSNE(shr, s_xsi_ui_si, s, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x37)),
- OP3(ORXREG1, ORREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(src1, reg, 1), ENC(dst, reg, 2)))
-INSNE(shr, s_sl_ui_sl, s, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
- FIX2(FIX(op, 0x35), FIX(x, 0)),
- OP3(ORREGL1, ORREG1, OWREGL1),
- ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, reg, 1),
- ENC(dst, reg, 2)))
-INSNE(shr, s_xsi_u5_si, s, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x36)),
- OP3(ORXREG1, OACST, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(src1, ucst, 1), ENC(dst, reg, 2)))
-INSNE(shr, s_sl_u5_sl, s, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
- FIX2(FIX(op, 0x34), FIX(x, 0)),
- OP3(ORREGL1, OACST, OWREGL1),
- ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1),
- ENC(dst, reg, 2)))
-
-/* 16bit insn */
-INSN(shr, s, s3i, 1cycle, C64XP, 0,
- FIX1(FIX(op, 0x1)),
- OP3(ORXREG1, OACST, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(cst, cst_s3i, 1), ENC(dst, reg, 2)))
-INSN(shr, s, ssh5_sat_x, 1cycle, C64XP,
- TIC6X_FLAG_NO_CROSS,
- FIX1(FIX(op, 0x1)),
- OP3(ORREG1, OACST, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(srcdst, reg, 0),
- ENC(cst, ucst, 1), ENC(srcdst, reg, 2)))
-INSN(shr, s, s2sh, 1cycle, C64XP, 0,
- FIX1(FIX(op, 0x1)),
- OP3(ORREG1, ORREG1, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(srcdst, reg, 0), ENC(src1, reg, 1),
- ENC(srcdst, reg, 2)))
-/**/
-
-INSNE(shr2, s_xs2_ui_s2, s, ext_1_or_2_src, 1cycle, C64X, 0,
- FIX1(FIX(op, 0x7)),
- OP3(ORXREG1, ORREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(src1, reg, 1), ENC(dst, reg, 2)))
-INSNE(shr2, s_xs2_u5_s2, s, 1_or_2_src, 1cycle, C64X, 0,
- FIX1(FIX(op, 0x18)),
- OP3(ORXREG1, OACST, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(src1, ucst, 1), ENC(dst, reg, 2)))
-
-INSN(shrmb, l, 1_or_2_src, 1cycle, C64X, 0,
- FIX1(FIX(op, 0x62)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSN(shrmb, s, ext_1_or_2_src, 1cycle, C64X, 0,
- FIX1(FIX(op, 0xa)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSNE(shru, s_xui_ui_ui, s, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x27)),
- OP3(ORXREG1, ORREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(src1, reg, 1), ENC(dst, reg, 2)))
-INSNE(shru, s_ul_ui_ul, s, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
- FIX2(FIX(op, 0x25), FIX(x, 0)),
- OP3(ORREGL1, ORREG1, OWREGL1),
- ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, reg, 1),
- ENC(dst, reg, 2)))
-INSNE(shru, s_xui_u5_ui, s, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x26)),
- OP3(ORXREG1, OACST, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(src1, ucst, 1), ENC(dst, reg, 2)))
-INSNE(shru, s_ul_u5_ul, s, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
- FIX2(FIX(op, 0x24), FIX(x, 0)),
- OP3(ORREGL1, OACST, OWREGL1),
- ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1),
- ENC(dst, reg, 2)))
-
-/* 16 bits insn */
-INSN(shru, s, ssh5_sat_0, 1cycle, C64XP,
- TIC6X_FLAG_NO_CROSS,
- FIX1(FIX(op, 0x2)),
- OP3(ORREG1, OACST, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(srcdst, reg, 0),
- ENC(cst, ucst, 1), ENC(srcdst, reg, 2)))
-INSN(shru, s, s2sh, 1cycle, C64XP, 0,
- FIX1(FIX(op, 0x2)),
- OP3(ORREG1, ORREG1, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(srcdst, reg, 0), ENC(src1, reg, 1),
- ENC(srcdst, reg, 2)))
-/**/
-
-INSNE(shru2, s_xu2_ui_u2, s, ext_1_or_2_src, 1cycle, C64X, 0,
- FIX1(FIX(op, 0x8)),
- OP3(ORXREG1, ORREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(src1, reg, 1), ENC(dst, reg, 2)))
-INSNE(shru2, s_xu2_u5_u2, s, 1_or_2_src, 1cycle, C64X, 0,
- FIX1(FIX(op, 0x19)),
- OP3(ORXREG1, OACST, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(src1, ucst, 1), ENC(dst, reg, 2)))
-
-INSN(sl, d, 1_or_2_src, store, C64XP,
- TIC6X_FLAG_STORE|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_SIDE_T2_ONLY|TIC6X_FLAG_NO_CROSS,
- FIX3(FIX(s, 1), FIX(op, 0xd), FIX(src1, 0)),
- OP2(ORDREG1, OWMEMDW),
- ENC2(ENC(dst, reg, 0), ENC(src2, reg, 1)))
-
-INSN(smpy, m, mpy, 1616_m, C62X, 0,
- FIX1(FIX(op, 0x1a)),
- OP3(ORREG1, ORXREG1, OWREG2),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-/* 16 bits insn */
-INSN(smpy, m, m3_sat_1, 1616_m, C67X, 0,
- FIX1(FIX(op, 0x0)),
- OP3(ORREG1, ORXREG1, OWREG2),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg_shift, 2)))
-/**/
-
-INSN(smpyh, m, mpy, 1616_m, C62X, 0,
- FIX1(FIX(op, 0x02)),
- OP3(ORREG1, ORXREG1, OWREG2),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-/* 16 bits insn */
-INSN(smpyh, m, m3_sat_1, 1616_m, C67X, 0,
- FIX1(FIX(op, 0x1)),
- OP3(ORREG1, ORXREG1, OWREG2),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg_shift, 2)))
-/**/
-
-INSN(smpyhl, m, mpy, 1616_m, C62X, 0,
- FIX1(FIX(op, 0x0a)),
- OP3(ORREG1, ORXREG1, OWREG2),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-/* 16 bits insn */
-INSN(smpyhl, m, m3_sat_1, 1616_m, C67X, 0,
- FIX1(FIX(op, 0x3)),
- OP3(ORREG1, ORXREG1, OWREG2),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg_shift, 2)))
-/**/
-
-INSN(smpylh, m, mpy, 1616_m, C62X, 0,
- FIX1(FIX(op, 0x12)),
- OP3(ORREG1, ORXREG1, OWREG2),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-/* 16 bits insn */
-INSN(smpylh, m, m3_sat_1, 1616_m, C67X, 0,
- FIX1(FIX(op, 0x2)),
- OP3(ORREG1, ORXREG1, OWREG2),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg_shift, 2)))
-/**/
-
-INSN(smpy2, m, compound, 4cycle, C64X, 0,
- FIX1(FIX(op, 0x01)),
- OP3(ORREG1, ORXREG1, OWREGD4),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-/* Contrary to SPRUFE8, this is the correct operand order for this
- instruction. */
-INSN(smpy32, m, 1_or_2_src, 4cycle, C64XP, 0,
- FIX1(FIX(op, 0x19)),
- OP3(ORREG1, ORXREG1, OWREG4),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(spack2, s, ext_1_or_2_src, 1cycle, C64X, 0,
- FIX1(FIX(op, 0x2)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(spacku4, s, ext_1_or_2_src, 1cycle, C64X, 0,
- FIX1(FIX(op, 0x4)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(spdp, s, 1_or_2_src, 2cycle_dp, C67X, 0,
- FIX2(FIX(op, 0x02), FIX(src1, 0)),
- OP2(ORXREG1, OWREGD12),
- ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(dst, reg, 1)))
-
-INSN(spint, l, 1_or_2_src, 4cycle, C67X, 0,
- FIX2(FIX(op, 0x0a), FIX(src1, 0)),
- OP2(ORXREG1, OWREG4),
- ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(dst, reg, 1)))
-
-INSNE(spkernel, nfu_2, nfu, spkernel, 1cycle, C64XP,
- TIC6X_FLAG_FIRST|TIC6X_FLAG_NO_MCNOP|TIC6X_FLAG_SPKERNEL,
- FIX1(FIX(s, 0)),
- OP2(OACST, OACST),
- ENC2(ENC(fstgfcyc, fstg, 0), ENC(fstgfcyc, fcyc, 1)))
-INSNE(spkernel, nfu_0, nfu, spkernel, 1cycle, C64XP,
- TIC6X_FLAG_FIRST|TIC6X_FLAG_NO_MCNOP|TIC6X_FLAG_SPKERNEL|TIC6X_FLAG_MACRO,
- FIX2(FIX(s, 0), FIX(fstgfcyc, 0)),
- OP0(),
- ENC0())
-
-/* 16 bits insn */
-INSN(spkernel, nfu, uspk, 1cycle, C64XP,
- TIC6X_FLAG_FIRST|TIC6X_FLAG_NO_MCNOP|TIC6X_FLAG_SPKERNEL,
- FIX0(),
- OP2(OACST, OACST),
- ENC2(ENC(fstgfcyc, fstg, 0), ENC(fstgfcyc, fcyc, 1)))
-/**/
-
-INSN(spkernelr, nfu, spkernelr, 1cycle, C64XP,
- TIC6X_FLAG_FIRST|TIC6X_FLAG_NO_MCNOP|TIC6X_FLAG_SPKERNEL,
- FIX1(FIX(s, 0)),
- OP0(),
- ENC0())
-
-INSN(sploop, nfu, loop_buffer, 1cycle, C64XP,
- TIC6X_FLAG_FIRST|TIC6X_FLAG_NO_MCNOP|TIC6X_FLAG_SPLOOP,
- FIX4(FIX(s, 0), FIX(op, 0xc), FIX(csta, 0), RAN(cstb, 0, 13)),
- OP1(OACST),
- ENC1(ENC(cstb, ucst_minus_one, 0)))
-
-INSN(sploopd, nfu, loop_buffer, 1cycle, C64XP,
- TIC6X_FLAG_FIRST|TIC6X_FLAG_NO_MCNOP|TIC6X_FLAG_SPLOOP,
- FIX4(FIX(s, 0), FIX(op, 0xd), FIX(csta, 0), RAN(cstb, 0, 13)),
- OP1(OACST),
- ENC1(ENC(cstb, ucst_minus_one, 0)))
-
-INSN(sploopw, nfu, loop_buffer, 1cycle, C64XP,
- TIC6X_FLAG_FIRST|TIC6X_FLAG_NO_MCNOP|TIC6X_FLAG_SPLOOP,
- FIX4(FIX(s, 0), FIX(op, 0xf), FIX(csta, 0), RAN(cstb, 0, 13)),
- OP1(OACST),
- ENC1(ENC(cstb, ucst_minus_one, 0)))
-
-/* 16 bits insn */
-INSN(sploop, nfu, uspl, 1cycle, C64XP,
- TIC6X_FLAG_FIRST|TIC6X_FLAG_NO_MCNOP|TIC6X_FLAG_SPLOOP,
- FIX1(FIX(op, 0)),
- OP1(OACST),
- ENC1(ENC(ii, ucst_minus_one, 0)))
-
-INSN(sploopd, nfu, uspl, 1cycle, C64XP,
- TIC6X_FLAG_FIRST|TIC6X_FLAG_NO_MCNOP|TIC6X_FLAG_SPLOOP,
- FIX1(FIX(op, 1)),
- OP1(OACST),
- ENC1(ENC(ii, ucst_minus_one, 0)))
-
-INSN(sploopd, nfu, uspldr, 1cycle, C64XP,
- TIC6X_FLAG_FIRST|TIC6X_FLAG_NO_MCNOP|TIC6X_FLAG_SPLOOP|TIC6X_FLAG_INSN16_SPRED,
- FIX0(),
- OP1(OACST),
- ENC1(ENC(ii, ucst_minus_one, 0)))
-/**/
-
-
-/* Contrary to SPRUFE8, this is the correct encoding for this
- instruction. */
-INSN(spmask, nfu, spmask, 1cycle, C64XP, TIC6X_FLAG_FIRST|TIC6X_FLAG_SPMASK,
- FIX2(FIX(s, 0), FIX(op, 0x8)),
- OP1(OFULIST),
- ENC1(ENC(mask, spmask, 0)))
-
-/* 16 bits insn */
-INSN(spmask, nfu, uspma, 1cycle, C64XP, TIC6X_FLAG_FIRST|TIC6X_FLAG_SPMASK,
- FIX0(),
- OP1(OFULIST),
- ENC1(ENC(mask, spmask, 0)))
-/**/
-
-INSN(spmaskr, nfu, spmask, 1cycle, C64XP, TIC6X_FLAG_FIRST|TIC6X_FLAG_SPMASK,
- FIX2(FIX(s, 0), FIX(op, 0x9)),
- OP1(OFULIST),
- ENC1(ENC(mask, spmask, 0)))
-
-/* 16 bits insn */
-INSN(spmaskr, nfu, uspmb, 1cycle, C64XP, TIC6X_FLAG_FIRST|TIC6X_FLAG_SPMASK,
- FIX0(),
- OP1(OFULIST),
- ENC1(ENC(mask, spmask, 0)))
-/**/
-
-INSN(sptrunc, l, 1_or_2_src, 4cycle, C67X, 0,
- FIX2(FIX(op, 0x0b), FIX(src1, 0)),
- OP2(ORXREG1, OWREG4),
- ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(dst, reg, 1)))
-
-INSNE(sshl, s_xsi_ui_si, s, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x23)),
- OP3(ORXREG1, ORREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(src1, reg, 1), ENC(dst, reg, 2)))
-INSNE(sshl, s_xsi_u5_si, s, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x22)),
- OP3(ORXREG1, OACST, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(src1, ucst, 1), ENC(dst, reg, 2)))
-
-/* 16 bits insn */
-INSN(sshl, s, ssh5_sat_1, 1cycle, C64XP,
- TIC6X_FLAG_NO_CROSS,
- FIX1(FIX(op, 0x2)),
- OP3(ORREG1, OACST, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(srcdst, reg, 0),
- ENC(cst, ucst, 1), ENC(srcdst, reg, 2)))
-INSN(sshl, s, s2sh, 1cycle, C64XP, 0,
- FIX1(FIX(op, 0x3)),
- OP3(ORREG1, ORREG1, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(srcdst, reg, 0), ENC(src1, reg, 1),
- ENC(srcdst, reg, 2)))
-/**/
-
-INSN(sshvl, m, compound, 1616_m, C64X, 0,
- FIX1(FIX(op, 0x1c)),
- OP3(ORXREG1, ORREG1, OWREG2),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(src1, reg, 1), ENC(dst, reg, 2)))
-
-/* Contrary to SPRUFE8, this is the correct encoding for this
- instruction. */
-INSN(sshvr, m, compound, 1616_m, C64X, 0,
- FIX1(FIX(op, 0x1a)),
- OP3(ORXREG1, ORREG1, OWREG2),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(src1, reg, 1), ENC(dst, reg, 2)))
-
-INSNE(ssub, l_si_xsi_si, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_PREFER(1),
- FIX1(FIX(op, 0x0f)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(ssub, l_xsi_si_si, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_PREFER(0),
- FIX1(FIX(op, 0x1f)),
- OP3(ORXREG1, ORREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(ssub, l_s5_xsi_si, l, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x0e)),
- OP3(OACST, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(ssub, l_s5_sl_sl, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
- FIX1(FIX(op, 0x2c)),
- OP3(OACST, ORREGL1, OWREGL1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-/* 16 bits insn */
-INSN(ssub, l, l3_sat_1, 1cycle, C64XP, 0,
- FIX1(FIX(op, 1)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-/**/
-
-INSN(ssub2, l, 1_or_2_src, 1cycle, C64XP, 0,
- FIX1(FIX(op, 0x64)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(stb, d, load_store, store, C62X,
- TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1),
- FIX2(FIX(op, 3), FIX(r, 0)),
- OP2(ORDREG1, OWMEMSB),
- ENC6(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 1),
- ENC(offsetR, mem_offset, 1), ENC(baseR, reg, 1),
- ENC(srcdst, reg, 0)))
-INSN(stb, d, load_store_long, store, C62X,
- TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_PREFER(0),
- FIX1(FIX(op, 3)),
- OP2(ORDREG1, OWMEMLB),
- ENC4(ENC(s, data_fu, 0), ENC(y, areg, 1), ENC(offsetR, ulcst_dpr_byte, 1),
- ENC(dst, reg, 0)))
-
-/* 16 bits insn */
-INSN(stb, d, doff4_dsz_000, store, C64XP,
- TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE),
- FIX2(FIX(op, 0), FIX(sz, 1)),
- OP2(ORTREG1, OWMEMSB),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
- ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset, 1)))
-INSN(stb, d, doff4_dsz_x01, store, C64XP,
- TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE),
- FIX2(FIX(op, 0), FIX(sz, 1)),
- OP2(ORTREG1, OWMEMSB),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
- ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset, 1)))
-INSN(stb, d, dind_dsz_000, store, C64XP,
- TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE),
- FIX2(FIX(op, 0), FIX(sz, 1)),
- OP2(ORTREG1, OWMEMSB),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(src1, mem_offset, 1),
- ENC(ptr, reg_ptr, 1), ENC(srcdst, reg, 0)))
-INSN(stb, d, dind_dsz_x01, store, C64XP,
- TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE),
- FIX2(FIX(op, 0), FIX(sz, 1)),
- OP2(ORTREG1, OWMEMSB),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(src1, mem_offset, 1),
- ENC(ptr, reg_ptr, 1), ENC(srcdst, reg, 0)))
-INSN(stb, d, dinc_dsz_000, store, C64XP,
- TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR),
- FIX2(FIX(op, 0), FIX(sz, 1)),
- OP2(ORTREG1, OWMEMSB),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
- ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one, 1)))
-INSN(stb, d, dinc_dsz_x01, store, C64XP,
- TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR),
- FIX2(FIX(op, 0), FIX(sz, 1)),
- OP2(ORTREG1, OWMEMSB),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
- ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one, 1)))
-INSN(stb, d, ddec_dsz_000, store, C64XP,
- TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR),
- FIX2(FIX(op, 0), FIX(sz, 1)),
- OP2(ORTREG1, OWMEMSB),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
- ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one, 1)))
-INSN(stb, d, ddec_dsz_x01, store, C64XP,
- TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR),
- FIX2(FIX(op, 0), FIX(sz, 1)),
- OP2(ORTREG1, OWMEMSB),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
- ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one, 1)))
-/**/
-
-INSN(stdw, d, load_store, store, C64X, TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS,
- FIX2(FIX(op, 4), FIX(r, 1)),
- OP2(ORDREGD1, OWMEMSD),
- ENC6(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 1),
- ENC(offsetR, mem_offset, 1), ENC(baseR, reg, 1),
- ENC(srcdst, reg, 0)))
-
-/* 16 bits insn */
-INSN(stdw, d, dpp, store, C64XP,
- TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTDECR)|TIC6X_FLAG_INSN16_B15PTR|TIC6X_FLAG_INSN16_NORS,
- FIX3(FIX(op, 0), FIX(dw, 1), FIX(s, 1)),
- OP2(ORTREGD1, OWMEMSD),
- ENC4(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
- ENC(cst, mem_offset_minus_one, 1)))
-INSN(stdw, d, ddecdw, store, C64XP,
- TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR),
- FIX3(FIX(op, 0), FIX(na, 0), FIX(sz, 0)),
- OP2(ORTREGD1, OWMEMSD),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg_shift, 0),
- ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one, 1)))
-INSN(stdw, d, dincdw, store, C64XP,
- TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR),
- FIX3(FIX(op, 0), FIX(na, 0), FIX(sz, 0)),
- OP2(ORTREGD1, OWMEMSD),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg_shift, 0),
- ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one, 1)))
-INSN(stdw, d, dinddw, store, C64XP,
- TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE),
- FIX3(FIX(op, 0), FIX(na, 0), FIX(sz, 0)),
- OP2(ORTREGD1, OWMEMSD),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(src1, mem_offset, 1),
- ENC(ptr, reg_ptr, 1), ENC(srcdst, reg_shift, 0)))
-INSN(stdw, d, doff4dw, store, C64XP,
- TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE),
- FIX3(FIX(op, 0), FIX(na, 0), FIX(sz, 0)),
- OP2(ORTREGD1, OWMEMSD),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(cst, mem_offset, 1),
- ENC(ptr, reg_ptr, 1), ENC(srcdst, reg_shift, 0)))
-/**/
-
-INSN(sth, d, load_store, store, C62X,
- TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1),
- FIX2(FIX(op, 5), FIX(r, 0)),
- OP2(ORDREG1, OWMEMSH),
- ENC6(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 1),
- ENC(offsetR, mem_offset, 1), ENC(baseR, reg, 1),
- ENC(srcdst, reg, 0)))
-INSN(sth, d, load_store_long, store, C62X,
- TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_PREFER(0),
- FIX1(FIX(op, 5)),
- OP2(ORDREG1, OWMEMLH),
- ENC4(ENC(s, data_fu, 0), ENC(y, areg, 1), ENC(offsetR, ulcst_dpr_half, 1),
- ENC(dst, reg, 0)))
-
-/* 16 bits insn */
-INSN(sth, d, doff4_dsz_01x, store, C64XP,
- TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE),
- FIX2(FIX(op, 0), FIX(sz, 1)),
- OP2(ORTREG1, OWMEMSH),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
- ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset, 1)))
-INSN(sth, d, doff4_dsz_111, store, C64XP,
- TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE),
- FIX2(FIX(op, 0), FIX(sz, 1)),
- OP2(ORTREG1, OWMEMSH),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
- ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset, 1)))
-INSN(sth, d, dind_dsz_01x, store, C64XP,
- TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE),
- FIX2(FIX(op, 0), FIX(sz, 1)),
- OP2(ORTREG1, OWMEMSH),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
- ENC(ptr, reg_ptr, 1), ENC(src1, mem_offset, 1)))
-INSN(sth, d, dind_dsz_111, store, C64XP,
- TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE),
- FIX2(FIX(op, 0), FIX(sz, 1)),
- OP2(ORTREG1, OWMEMSH),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
- ENC(ptr, reg_ptr, 1), ENC(src1, mem_offset, 1)))
-INSN(sth, d, dinc_dsz_01x, store, C64XP,
- TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR),
- FIX2(FIX(op, 0), FIX(sz, 1)),
- OP2(ORTREG1, OWMEMSH),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
- ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one, 1)))
-INSN(sth, d, dinc_dsz_111, store, C64XP,
- TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR),
- FIX2(FIX(op, 0), FIX(sz, 1)),
- OP2(ORTREG1, OWMEMSH),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
- ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one, 1)))
-INSN(sth, d, ddec_dsz_01x, store, C64XP,
- TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR),
- FIX2(FIX(op, 0), FIX(sz, 1)),
- OP2(ORTREG1, OWMEMSH),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
- ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one, 1)))
-INSN(sth, d, ddec_dsz_111, store, C64XP,
- TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR),
- FIX2(FIX(op, 0), FIX(sz, 1)),
- OP2(ORTREG1, OWMEMSH),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
- ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one, 1)))
-/**/
-
-INSN(stndw, d, store_nonaligned, store, C64X,
- TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_UNALIGNED,
- FIX0(),
- OP2(ORDREGD1, OWMEMND),
- ENC7(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 1),
- ENC(offsetR, mem_offset_noscale, 1), ENC(baseR, reg, 1),
- ENC(sc, scaled, 1), ENC(src, reg_shift, 0)))
-
-/* 16 bits insn */
-INSN(stndw, d, ddecdw, store, C64XP,
- TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_UNALIGNED|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR),
- FIX3(FIX(op, 0), FIX(na, 1), FIX(sz, 0)),
- OP2(ORTREGD1, OWMEMND),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg_shift, 0),
- ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one_noscale, 1)))
-INSN(stndw, d, dincdw, store, C64XP,
- TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_UNALIGNED|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR),
- FIX3(FIX(op, 0), FIX(na, 1), FIX(sz, 0)),
- OP2(ORTREGD1, OWMEMND),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg_shift, 0),
- ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one_noscale, 1)))
-INSN(stndw, d, dinddw, store, C64XP,
- TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_UNALIGNED|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE),
- FIX3(FIX(op, 0), FIX(na, 1), FIX(sz, 0)),
- OP2(ORTREGD1, OWMEMND),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(src1, mem_offset_noscale, 1),
- ENC(ptr, reg_ptr, 1), ENC(srcdst, reg_shift, 0)))
-INSN(stndw, d, doff4dw, store, C64XP,
- TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_UNALIGNED|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE),
- FIX3(FIX(op, 0), FIX(na, 1), FIX(sz, 0)),
- OP2(ORTREGD1, OWMEMND),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(cst, mem_offset_noscale, 1),
- ENC(ptr, reg_ptr, 1), ENC(srcdst, reg_shift, 0)))
-/**/
-
-INSN(stnw, d, load_store, store, C64X,
- TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_UNALIGNED,
- FIX2(FIX(op, 5), FIX(r, 1)),
- OP2(ORDREG1, OWMEMSW),
- ENC6(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 1),
- ENC(offsetR, mem_offset, 1), ENC(baseR, reg, 1),
- ENC(srcdst, reg, 0)))
-
-/* 16 bits insn */
-INSN(stnw, d, doff4_dsz_110, store, C64XP,
- TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE),
- FIX2(FIX(op, 0), FIX(sz, 1)),
- OP2(ORTREG1, OWMEMSW),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
- ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset, 1)))
-INSN(stnw, d, dind_dsz_110, store, C64XP,
- TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE),
- FIX2(FIX(op, 0), FIX(sz, 1)),
- OP2(ORTREG1, OWMEMSW),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
- ENC(ptr, reg_ptr, 1), ENC(src1, mem_offset, 1)))
-INSN(stnw, d, dinc_dsz_110, store, C64XP,
- TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR),
- FIX2(FIX(op, 0), FIX(sz, 1)),
- OP2(ORTREG1, OWMEMSW),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
- ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one, 1)))
-INSN(stnw, d, ddec_dsz_110, store, C64XP,
- TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR),
- FIX2(FIX(op, 0), FIX(sz, 1)),
- OP2(ORTREG1, OWMEMSW),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
- ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one, 1)))
-/**/
-
-INSN(stw, d, load_store, store, C62X,
- TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1),
- FIX2(FIX(op, 7), FIX(r, 0)),
- OP2(ORDREG1, OWMEMSW),
- ENC6(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 1),
- ENC(offsetR, mem_offset, 1), ENC(baseR, reg, 1),
- ENC(srcdst, reg, 0)))
-INSN(stw, d, load_store_long, store, C62X,
- TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_PREFER(0),
- FIX1(FIX(op, 7)),
- OP2(ORDREG1, OWMEMLW),
- ENC4(ENC(s, data_fu, 0), ENC(y, areg, 1), ENC(offsetR, ulcst_dpr_word, 1),
- ENC(dst, reg, 0)))
-
-/* 16 bits insn */
-INSN(stw, d, doff4_dsz_0xx, store, C64XP,
- TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE),
- FIX2(FIX(op, 0), FIX(sz, 0)),
- OP2(ORTREG1, OWMEMSW),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
- ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset, 1)))
-INSN(stw, d, doff4_dsz_100, store, C64XP,
- TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE),
- FIX2(FIX(op, 0), FIX(sz, 1)),
- OP2(ORTREG1, OWMEMSW),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
- ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset, 1)))
-INSN(stw, d, dind_dsz_0xx, store, C64XP,
- TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE),
- FIX2(FIX(op, 0), FIX(sz, 0)),
- OP2(ORTREG1, OWMEMSW),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
- ENC(ptr, reg_ptr, 1), ENC(src1, mem_offset, 1)))
-INSN(stw, d, dind_dsz_100, store, C64XP,
- TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE),
- FIX2(FIX(op, 0), FIX(sz, 1)),
- OP2(ORTREG1, OWMEMSW),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
- ENC(ptr, reg_ptr, 1), ENC(src1, mem_offset, 1)))
-INSN(stw, d, dinc_dsz_0xx, store, C64XP,
- TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR),
- FIX2(FIX(op, 0), FIX(sz, 0)),
- OP2(ORTREG1, OWMEMSW),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
- ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one, 1)))
-INSN(stw, d, dinc_dsz_100, store, C64XP,
- TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR),
- FIX2(FIX(op, 0), FIX(sz, 1)),
- OP2(ORTREG1, OWMEMSW),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
- ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one, 1)))
-INSN(stw, d, ddec_dsz_0xx, store, C64XP,
- TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR),
- FIX2(FIX(op, 0), FIX(sz, 0)),
- OP2(ORTREG1, OWMEMSW),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
- ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one, 1)))
-INSN(stw, d, ddec_dsz_100, store, C64XP,
- TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR),
- FIX2(FIX(op, 0), FIX(sz, 1)),
- OP2(ORTREG1, OWMEMSW),
- ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
- ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one, 1)))
-INSN(stw, d, dpp, store, C64XP,
- TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTDECR)|TIC6X_FLAG_INSN16_B15PTR|TIC6X_FLAG_INSN16_NORS,
- FIX2(FIX(op, 0), FIX(dw, 0)),
- OP2(ORTREG1, OWMEMSW),
- ENC4(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
- ENC(cst, mem_offset_minus_one, 1)))
-INSN(stw, d, dstk, store, C64XP,
- TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE)|TIC6X_FLAG_INSN16_B15PTR,
- FIX2(FIX(op, 0x0), FIX(s, 1)),
- OP2(ORTREG1, OWMEMSW),
- ENC4(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
- ENC(cst, mem_offset, 1)))
-/**/
-
-INSNE(sub, l_si_xsi_si, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_PREFER(1),
- FIX1(FIX(op, 0x07)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(sub, l_xsi_si_si, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_PREFER(0),
- FIX1(FIX(op, 0x17)),
- OP3(ORXREG1, ORREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(sub, l_si_xsi_sl, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_PREFER(1),
- FIX1(FIX(op, 0x27)),
- OP3(ORREG1, ORXREG1, OWREGL1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(sub, l_xsi_si_sl, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_PREFER(0),
- FIX1(FIX(op, 0x37)),
- OP3(ORXREG1, ORREG1, OWREGL1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(sub, l_s5_xsi_si, l, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x06)),
- OP3(OACST, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(sub, l_s5_sl_sl, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
- FIX1(FIX(op, 0x24)),
- OP3(OACST, ORREGL1, OWREGL1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(sub, l_xsi_s5_si, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_MACRO,
- FIX1(FIX(op, 0x2)),
- OP3(ORXREG1, OACST, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst_negate, 1),
- ENC(src2, reg, 0), ENC(dst, reg, 2)))
-INSNE(sub, l_sl_s5_sl, l, 1_or_2_src, 1cycle, C62X,
- TIC6X_FLAG_MACRO|TIC6X_FLAG_NO_CROSS,
- FIX2(FIX(op, 0x20), FIX(x, 0)),
- OP3(ORREGL1, OACST, OWREGL1),
- ENC4(ENC(s, fu, 0), ENC(src1, scst_negate, 1), ENC(src2, reg, 0),
- ENC(dst, reg, 2)))
-INSNE(sub, s_si_xsi_si, s, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_PREFER(1),
- FIX1(FIX(op, 0x17)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(sub, s_s5_xsi_si, s, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x16)),
- OP3(OACST, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-/* Contrary to SPRUFE8, this is the correct encoding for this
- instruction; this instruction can be predicated. */
-INSNE(sub, s_xsi_si_si, s, ext_1_or_2_src, 1cycle, C64X, TIC6X_FLAG_PREFER(0),
- FIX1(FIX(op, 0x5)),
- OP3(ORXREG1, ORREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(src1, reg, 1), ENC(dst, reg, 2)))
-INSNE(sub, s_xsi_s5_si, s, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_MACRO,
- FIX1(FIX(op, 0x6)),
- OP3(ORXREG1, OACST, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst_negate, 1),
- ENC(src2, reg, 0), ENC(dst, reg, 2)))
-INSNE(sub, d_si_si_si, d, 1_or_2_src, 1cycle, C62X,
- TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1),
- FIX1(FIX(op, 0x11)),
- OP3(ORREG1, ORREG1, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, reg, 1),
- ENC(dst, reg, 2)))
-INSNE(sub, d_si_u5_si, d, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
- FIX1(FIX(op, 0x13)),
- OP3(ORREG1, OACST, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1),
- ENC(dst, reg, 2)))
-INSNE(sub, d_si_xsi_si, d, ext_1_or_2_src, 1cycle, C64X, TIC6X_FLAG_PREFER(0),
- FIX1(FIX(op, 0xc)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-/* 16 bits insn */
-INSN(sub, l, l3_sat_0, 1cycle, C64XP, 0,
- FIX1(FIX(op, 0x1)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSN(sub, l, lx1, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS,
- FIX1(FIX(op, 0x2)),
- OP3(OHWCST0, ORREG1, OWREG1),
- ENC3(ENC(s, fu, 0), ENC(srcdst, reg, 1), ENC(srcdst, reg, 2)))
-INSN(sub, s, sx1, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS,
- FIX1(FIX(op, 0x2)),
- OP3(OHWCST0, ORREG1, OWREG1),
- ENC3(ENC(s, fu, 0), ENC(srcdst, reg, 1), ENC(srcdst, reg, 2)))
-INSN(sub, s, sx2op, 1cycle, C64XP, 0,
- FIX1(FIX(op, 0x1)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(srcdst, reg, 0), ENC(srcdst, reg, 2),
- ENC(src2, reg, 1), ENC(x, xpath, 1)))
-INSN(sub, s, s3_sat_x, 1cycle, C64XP, 0,
- FIX1(FIX(op, 0x1)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSN(sub, d, dx1, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS,
- FIX1(FIX(op, 0x3)),
- OP3(ORREG1, OHWCST1, OWREG1),
- ENC3(ENC(s, fu, 0), ENC(srcdst, reg, 0), ENC(srcdst, reg, 2)))
-INSN(sub, d, dx2op, 1cycle, C64XP, 0,
- FIX1(FIX(op, 0x1)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(srcdst, reg, 0),
- ENC(src2, reg, 1), ENC(srcdst, reg, 2)))
-/**/
-
-INSNE(subab, d_si_si_si, d, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
- FIX1(FIX(op, 0x31)),
- OP3(ORREG1, ORREG1, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, reg, 1),
- ENC(dst, reg, 2)))
-INSNE(subab, d_si_u5_si, d, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
- FIX1(FIX(op, 0x33)),
- OP3(ORREG1, OACST, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1),
- ENC(dst, reg, 2)))
-
-INSN(subabs4, l, 1_or_2_src, 1cycle, C64X, 0,
- FIX1(FIX(op, 0x5a)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSNE(subah, d_si_si_si, d, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
- FIX1(FIX(op, 0x35)),
- OP3(ORREG1, ORREG1, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, reg, 1),
- ENC(dst, reg, 2)))
-INSNE(subah, d_si_u5_si, d, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
- FIX1(FIX(op, 0x37)),
- OP3(ORREG1, OACST, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1),
- ENC(dst, reg, 2)))
-
-INSNE(subaw, d_si_si_si, d, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
- FIX1(FIX(op, 0x39)),
- OP3(ORREG1, ORREG1, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, reg, 1),
- ENC(dst, reg, 2)))
-INSNE(subaw, d_si_u5_si, d, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
- FIX1(FIX(op, 0x3b)),
- OP3(ORREG1, OACST, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1),
- ENC(dst, reg, 2)))
-
-/* 16 bits insn */
-INSN(subaw, d, dx5p, 1cycle, C64XP, 0,
- FIX1(FIX(op, 1)),
- OP3(ORB15REG1, OACST, OWB15REG1),
- ENC2(ENC(s, fu, 0), ENC(cst, ucst, 1)))
-/**/
-
-INSN(subc, l, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x4b)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSNE(subdp, l_dp_xdp_dp, l, 1_or_2_src, addsubdp, C67X, TIC6X_FLAG_PREFER(1),
- FIX1(FIX(op, 0x19)),
- OP3(ORREGD12, ORXREGD12, OWREGD67),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(subdp, l_xdp_dp_dp, l, 1_or_2_src, addsubdp, C67X, TIC6X_FLAG_PREFER(0),
- FIX1(FIX(op, 0x1d)),
- OP3(ORXREGD12, ORREGD12, OWREGD67),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(subdp, s_dp_xdp_dp, s, l_1_or_2_src, addsubdp, C67XP,
- TIC6X_FLAG_PREFER(1),
- FIX1(FIX(op, 0x73)),
- OP3(ORREGD12, ORXREGD12, OWREGD67),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(subdp, s_xdp_dp_dp, s, l_1_or_2_src, addsubdp, C67XP,
- TIC6X_FLAG_PREFER(0),
- FIX1(FIX(op, 0x77)),
- OP3(ORXREGD12, ORREGD12, OWREGD67),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(src1, reg, 1), ENC(dst, reg, 2)))
-
-INSNE(subsp, l_sp_xsp_sp, l, 1_or_2_src, 4cycle, C67X, TIC6X_FLAG_PREFER(1),
- FIX1(FIX(op, 0x11)),
- OP3(ORREG1, ORXREG1, OWREG4),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(subsp, l_xsp_sp_sp, l, 1_or_2_src, 4cycle, C67X, TIC6X_FLAG_PREFER(0),
- FIX1(FIX(op, 0x15)),
- OP3(ORXREG1, ORREG1, OWREG4),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(subsp, s_sp_xsp_sp, s, l_1_or_2_src, 4cycle, C67XP,
- TIC6X_FLAG_PREFER(1),
- FIX1(FIX(op, 0x71)),
- OP3(ORREG1, ORXREG1, OWREG4),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(subsp, s_xsp_sp_sp, s, l_1_or_2_src, 4cycle, C67XP,
- TIC6X_FLAG_PREFER(0),
- FIX1(FIX(op, 0x75)),
- OP3(ORXREG1, ORREG1, OWREG4),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(src1, reg, 1), ENC(dst, reg, 2)))
-
-INSNE(subu, l_ui_xui_ul, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_PREFER(1),
- FIX1(FIX(op, 0x2f)),
- OP3(ORREG1, ORXREG1, OWREGL1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(subu, l_xui_ui_ul, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_PREFER(0),
- FIX1(FIX(op, 0x3f)),
- OP3(ORXREG1, ORREG1, OWREGL1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(sub2, l, 1_or_2_src, 1cycle, C64X, 0,
- FIX1(FIX(op, 0x04)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSN(sub2, s, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x11)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSN(sub2, d, ext_1_or_2_src, 1cycle, C64X, 0,
- FIX1(FIX(op, 0x5)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(sub4, l, 1_or_2_src, 1cycle, C64X, 0,
- FIX1(FIX(op, 0x66)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(swap2, l, 1_or_2_src, 1cycle, C64X, TIC6X_FLAG_MACRO|TIC6X_FLAG_NO_CROSS,
- FIX2(FIX(op, 0x1b), FIX(x, 0)),
- OP2(ORREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 0), ENC(dst, reg, 1)))
-INSN(swap2, s, 1_or_2_src, 1cycle, C64X, TIC6X_FLAG_MACRO|TIC6X_FLAG_NO_CROSS,
- FIX2(FIX(op, 0x10), FIX(x, 0)),
- OP2(ORREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 0), ENC(dst, reg, 1)))
-
-/* Contrary to SPRUFE8, this is the correct encoding for this
- instruction. */
-INSN(swap4, l, unary, 1cycle, C64X, 0,
- FIX1(FIX(op, 0x1)),
- OP2(ORXREG1, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(dst, reg, 1)))
-
-INSN(swe, nfu, swe, 1cycle, C64XP, 0,
- FIX1(FIX(s, 0)),
- OP0(),
- ENC0())
-
-INSN(swenr, nfu, swenr, 1cycle, C64XP, 0,
- FIX1(FIX(s, 0)),
- OP0(),
- ENC0())
-
-INSN(unpkhu4, l, unary, 1cycle, C64X, 0,
- FIX1(FIX(op, 0x03)),
- OP2(ORXREG1, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(dst, reg, 1)))
-INSN(unpkhu4, s, unary, 1cycle, C64X, 0,
- FIX1(FIX(op, 0x03)),
- OP2(ORXREG1, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(dst, reg, 1)))
-
-INSN(unpklu4, l, unary, 1cycle, C64X, 0,
- FIX1(FIX(op, 0x02)),
- OP2(ORXREG1, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(dst, reg, 1)))
-INSN(unpklu4, s, unary, 1cycle, C64X, 0,
- FIX1(FIX(op, 0x02)),
- OP2(ORXREG1, OWREG1),
- ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(dst, reg, 1)))
-
-INSNE(xor, l_ui_xui_ui, l, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x6f)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(xor, l_s5_xui_ui, l, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x6e)),
- OP3(OACST, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(xor, s_ui_xui_ui, s, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x0b)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(xor, s_s5_xui_ui, s, 1_or_2_src, 1cycle, C62X, 0,
- FIX1(FIX(op, 0x0a)),
- OP3(OACST, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(xor, d_ui_xui_ui, d, ext_1_or_2_src, 1cycle, C64X, 0,
- FIX1(FIX(op, 0xe)),
- OP3(ORREG1, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNE(xor, d_s5_xui_ui, d, ext_1_or_2_src, 1cycle, C64X, 0,
- FIX1(FIX(op, 0xf)),
- OP3(OACST, ORXREG1, OWREG1),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-/* 16 bits insn */
-INSN(xor, l, l2c, 1cycle, C64XP, 0,
- FIX1(FIX(op, 0x2)),
- OP3(ORREG1, ORXREG1, OWREG1NORS),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-INSNU(xor, l, lsdx1, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS,
- FIX2(FIX(op, 0x7), FIX(unit, 0x0)),
- OP3(ORREG1, OHWCST1, OWREG1),
- ENC3(ENC(s, fu, 0), ENC(srcdst, reg, 0), ENC(srcdst, reg, 2)))
-INSNU(xor, s, lsdx1, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS,
- FIX2(FIX(op, 0x7), FIX(unit, 0x1)),
- OP3(ORREG1, OHWCST1, OWREG1),
- ENC3(ENC(s, fu, 0), ENC(srcdst, reg, 0), ENC(srcdst, reg, 2)))
-INSNU(xor, d, lsdx1, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS,
- FIX2(FIX(op, 0x7), FIX(unit, 0x2)),
- OP3(ORREG1, OHWCST1, OWREG1),
- ENC3(ENC(s, fu, 0), ENC(srcdst, reg, 0), ENC(srcdst, reg, 2)))
-/**/
-
-INSN(xormpy, m, 1_or_2_src, 4cycle, C64XP, 0,
- FIX1(FIX(op, 0x1b)),
- OP3(ORREG1, ORXREG1, OWREG4),
- ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
- ENC(src2, reg, 1), ENC(dst, reg, 2)))
-
-INSN(xpnd2, m, unary, 1616_m, C64X, 0,
- FIX1(FIX(op, 0x19)),
- OP2(ORXREG1, OWREG2),
- ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(dst, reg, 1)))
-
-INSN(xpnd4, m, unary, 1616_m, C64X, 0,
- FIX1(FIX(op, 0x18)),
- OP2(ORXREG1, OWREG2),
- ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
- ENC(dst, reg, 1)))
-
-INSN(zero, s, mvk, 1cycle, C62X, TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO,
- FIX2(FIX(h, 0), FIX(cst, 0)),
- OP1(OWREG1),
- ENC2(ENC(s, fu, 0), ENC(dst, reg, 0)))
-INSN(zero, l, unary, 1cycle, C64X,
- TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO|TIC6X_FLAG_PREFER(1),
- FIX3(FIX(x, 0), FIX(op, 0x05), FIX(src2, 0)),
- OP1(OWREG1),
- ENC2(ENC(s, fu, 0), ENC(dst, reg, 0)))
-INSNE(zero, l_sub, l, 1_or_2_src, 1cycle, C62X,
- TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO|TIC6X_FLAG_PREFER(0),
- FIX2(FIX(op, 0x07), FIX(x, 0)),
- OP1(OWREG1),
- ENC4(ENC(s, fu, 0), ENC(src1, reg_unused, 0), ENC(src2, reg_unused, 0),
- ENC(dst, reg, 0)))
-INSNE(zero, l_sub_sl, l, 1_or_2_src, 1cycle, C62X,
- TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO,
- FIX2(FIX(op, 0x27), FIX(x, 0)),
- OP1(OWREGL1),
- ENC4(ENC(s, fu, 0), ENC(src1, reg_unused, 0), ENC(src2, reg_unused, 0),
- ENC(dst, reg, 0)))
-INSNE(zero, d_mvk, d, 1_or_2_src, 1cycle, C64X,
- TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO|TIC6X_FLAG_PREFER(1),
- FIX3(FIX(op, 0x00), FIX(src1, 0), FIX(src2, 0)),
- OP1(OWREG1),
- ENC2(ENC(s, fu, 0), ENC(dst, reg, 0)))
-INSNE(zero, d_sub, d, 1_or_2_src, 1cycle, C62X,
- TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO|TIC6X_FLAG_PREFER(0),
- FIX1(FIX(op, 0x11)),
- OP1(OWREG1),
- ENC4(ENC(s, fu, 0), ENC(src2, reg_unused, 0), ENC(src1, reg_unused, 0),
- ENC(dst, reg, 0)))
-
-#undef TIC6X_INSN_C64X_AND_C67X
-#undef tic6x_insn_format_nfu_s_branch_nop_cst
-#undef tic6x_insn_format_s_l_1_or_2_src
-#undef RAN
-#undef FIX
-#undef FIX0
-#undef FIX1
-#undef FIX2
-#undef FIX3
-#undef FIX4
-#undef OP0
-#undef OP1
-#undef OP2
-#undef OP3
-#undef OP4
-#undef OACST
-#undef OLCST
-#undef OHWCSTM1
-#undef OHWCST0
-#undef OHWCST1
-#undef OHWCST5
-#undef OHWCST16
-#undef OHWCST24
-#undef OHWCST31
-#undef OFULIST
-#undef ORIRP1
-#undef ORNRP1
-#undef OWREG1
-#undef OWRETREG1
-#undef ORREG1
-#undef ORDREG1
-#undef ORWREG1
-#undef ORAREG1
-#undef ORXREG1
-#undef ORREG12
-#undef ORREG14
-#undef ORXREG14
-#undef OWREG2
-#undef OWREG4
-#undef OWREG9
-#undef OWDREG5
-#undef OWREGL1
-#undef ORREGL1
-#undef OWREGD1
-#undef ORTREG1
-#undef ORTREGD1
-#undef OWTREG5
-#undef OWTREGD5
-#undef OWREGD12
-#undef OWREGD4
-#undef ORREGD1
-#undef OWREGD45
-#undef OWREGD67
-#undef ORDREGD1
-#undef OWDREGD5
-#undef ORREGD12
-#undef ORXREGD12
-#undef ORXREGD1234
-#undef ORREGD1324
-#undef OWREGD910
-#undef OWILC1
-#undef ORCREG1
-#undef OWCREG1
-#undef OWREG1Z
-#undef ORB15REG1
-#undef OWB15REG1
-#undef ORMEMDW
-#undef OWMEMDW
-#undef ORMEMSB
-#undef OWMEMSB
-#undef ORMEMLB
-#undef OWMEMLB
-#undef ORMEMSH
-#undef OWMEMSH
-#undef ORMEMLH
-#undef OWMEMLH
-#undef ORMEMSW
-#undef OWMEMSW
-#undef ORMEMLW
-#undef OWMEMLW
-#undef ORMEMSD
-#undef OWMEMSD
-#undef ORMEMND
-#undef OWMEMND
-#undef ENC
-#undef ENC0
-#undef ENC1
-#undef ENC2
-#undef ENC3
-#undef ENC4
-#undef ENC5
-#undef ENC6
-#undef ENC7
diff --git a/include/opcode/tic6x.h b/include/opcode/tic6x.h
deleted file mode 100644
index d76c5e1aa..000000000
--- a/include/opcode/tic6x.h
+++ /dev/null
@@ -1,718 +0,0 @@
-/* TI C6X opcode information.
- Copyright 2010-2013 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef OPCODE_TIC6X_H
-#define OPCODE_TIC6X_H
-
-#include "bfd.h"
-#include "symcat.h"
-
-/* A field in an instruction format. The names are based on those
- used in the architecture manuals. */
-typedef enum
- {
- tic6x_field_baseR,
- tic6x_field_cc,
- tic6x_field_creg,
- tic6x_field_cst,
- tic6x_field_csta,
- tic6x_field_cstb,
- tic6x_field_dst,
- tic6x_field_dstms,
- tic6x_field_dw,
- tic6x_field_fstgfcyc,
- tic6x_field_h,
- tic6x_field_ii,
- tic6x_field_mask,
- tic6x_field_mode,
- tic6x_field_n,
- tic6x_field_na,
- tic6x_field_offsetR,
- tic6x_field_op,
- tic6x_field_p,
- tic6x_field_ptr,
- tic6x_field_r,
- tic6x_field_s,
- tic6x_field_sc,
- tic6x_field_src,
- tic6x_field_src1,
- tic6x_field_src2,
- tic6x_field_srcdst,
- tic6x_field_srcms,
- tic6x_field_sn,
- tic6x_field_sz,
- tic6x_field_unit,
- tic6x_field_t,
- tic6x_field_x,
- tic6x_field_y,
- tic6x_field_z
- } tic6x_insn_field_id;
-
-typedef struct
-{
- /* The least-significant bit position in the field. */
- unsigned short low_pos;
-
- /* The number of bits in the field. */
- unsigned short width;
- /* The position of the bitfield in the field. */
- unsigned short pos;
-} tic6x_bitfield;
-
-/* Maximum number of subfields in composite field. */
-#define TIC6X_MAX_BITFIELDS 4
-
-typedef struct
-{
- /* The name used to reference the field. */
- tic6x_insn_field_id field_id;
- unsigned int num_bitfields;
- tic6x_bitfield bitfields[TIC6X_MAX_BITFIELDS];
-} tic6x_insn_field;
-
-/* Maximum number of variable fields in an instruction format. */
-#define TIC6X_MAX_INSN_FIELDS 11
-
-/* A particular instruction format. */
-typedef struct
-{
- /* How many bits in the instruction. */
- unsigned int num_bits;
-
- /* Constant bits in the instruction. */
- unsigned int cst_bits;
-
- /* Mask matching those bits. */
- unsigned int mask;
-
- /* The number of instruction fields. */
- unsigned int num_fields;
-
- /* Descriptions of instruction fields. */
- tic6x_insn_field fields[TIC6X_MAX_INSN_FIELDS];
-} tic6x_insn_format;
-
-/* An index into the table of instruction formats. */
-typedef enum
- {
-#define FMT(name, num_bits, cst_bits, mask, fields) \
- CONCAT2(tic6x_insn_format_, name),
-#include "tic6x-insn-formats.h"
-#undef FMT
- tic6x_insn_format_max
- } tic6x_insn_format_id;
-
-/* The table itself. */
-extern const tic6x_insn_format tic6x_insn_format_table[tic6x_insn_format_max];
-
-/* If instruction format FMT has a field FIELD, return a pointer to
- the description of that field; otherwise return NULL. */
-
-const tic6x_insn_field *tic6x_field_from_fmt (const tic6x_insn_format *fmt,
- tic6x_insn_field_id field);
-
-/* Description of a field (in an instruction format) whose value is
- fixed, or constrained to be in a particular range, in a particular
- opcode. */
-typedef struct
-{
- /* The name of the field. */
- tic6x_insn_field_id field_id;
-
- /* The least value of the field in this instruction. */
- unsigned int min_val;
-
- /* The greatest value of the field in this instruction. */
- unsigned int max_val;
-} tic6x_fixed_field;
-
-/* Pseudo opcode fields position for compact instructions
- If 16 bits instruction detected, the opcode is enriched
- [DSZ/3][BR][SAT][opcode] */
-#define TIC6X_COMPACT_SAT_POS 16
-#define TIC6X_COMPACT_BR_POS 17
-#define TIC6X_COMPACT_DSZ_POS 18
-
-/* Bit-masks for defining instructions present on some subset of
- processors; each indicates an instruction present on that processor
- and those that are supersets of it. The options passed to the
- assembler determine a bit-mask ANDed with the bit-mask indicating
- when the instruction was added to determine whether the instruction
- is enabled. */
-#define TIC6X_INSN_C62X 0x0001
-#define TIC6X_INSN_C64X 0x0002
-#define TIC6X_INSN_C64XP 0x0004
-#define TIC6X_INSN_C67X 0x0008
-#define TIC6X_INSN_C67XP 0x0010
-#define TIC6X_INSN_C674X 0x0020
-
-/* Flags with further information about an opcode table entry. */
-
-/* Only used by the assembler, not the disassembler. */
-#define TIC6X_FLAG_MACRO 0x0001
-
-/* Must be first in its execute packet. */
-#define TIC6X_FLAG_FIRST 0x0002
-
-/* Multi-cycle NOP (not used for the NOP n instruction itself, which
- is only a multicycle NOP if n > 1). */
-#define TIC6X_FLAG_MCNOP 0x0004
-
-/* Cannot be in parallel with a multi-cycle NOP. */
-#define TIC6X_FLAG_NO_MCNOP 0x0008
-
-/* Load instruction. */
-#define TIC6X_FLAG_LOAD 0x0010
-
-/* Store instruction. */
-#define TIC6X_FLAG_STORE 0x0020
-
-/* Unaligned memory operation. */
-#define TIC6X_FLAG_UNALIGNED 0x0040
-
-/* Only on side B. */
-#define TIC6X_FLAG_SIDE_B_ONLY 0x0080
-
-/* Only on data path T2. */
-#define TIC6X_FLAG_SIDE_T2_ONLY 0x0100
-
-/* Does not support cross paths. */
-#define TIC6X_FLAG_NO_CROSS 0x0200
-
-/* Annotate this branch instruction as a call. */
-#define TIC6X_FLAG_CALL 0x0400
-
-/* Annotate this branch instruction as a return. */
-#define TIC6X_FLAG_RETURN 0x0800
-
-/* This instruction starts a software pipelined loop. */
-#define TIC6X_FLAG_SPLOOP 0x1000
-
-/* This instruction ends a software pipelined loop. */
-#define TIC6X_FLAG_SPKERNEL 0x2000
-
-/* This instruction takes a list of functional units as parameters;
- although described as having one parameter, the number may be 0 to
- 8. */
-#define TIC6X_FLAG_SPMASK 0x4000
-
-/* When more than one opcode matches the assembly source, prefer the
- one with the highest value for this bit-field. If two opcode table
- entries can match the same syntactic form, they must have different
- values here. */
-#define TIC6X_PREFER_VAL(n) (((n) & 0x8000) >> 15)
-#define TIC6X_FLAG_PREFER(n) ((n) << 15)
-
-/* 16 bits opcode is predicated by register a0 (s = 0) or b0 (s = 1) */
-#define TIC6X_FLAG_INSN16_SPRED 0x00100000
-/* 16 bits opcode ignores RS bit of fetch packet header */
-#define TIC6X_FLAG_INSN16_NORS 0x00200000
-/* 16 bits opcode only on side B */
-#define TIC6X_FLAG_INSN16_BSIDE 0x00400000
-/* 16 bits opcode ptr reg is b15 */
-#define TIC6X_FLAG_INSN16_B15PTR 0x00800000
-/* 16 bits opcode memory access modes */
-#define TIC6X_INSN16_MEM_MODE(n) ((n) << 16)
-#define TIC6X_INSN16_MEM_MODE_VAL(n) (((n) & 0x000F0000) >> 16)
-#define TIC6X_MEM_MODE_NEGATIVE 0
-#define TIC6X_MEM_MODE_POSITIVE 1
-#define TIC6X_MEM_MODE_REG_NEGATIVE 4
-#define TIC6X_MEM_MODE_REG_POSITIVE 5
-#define TIC6X_MEM_MODE_PREDECR 8
-#define TIC6X_MEM_MODE_PREINCR 9
-#define TIC6X_MEM_MODE_POSTDECR 10
-#define TIC6X_MEM_MODE_POSTINCR 11
-
-#define TIC6X_FLAG_INSN16_MEM_MODE(mode) TIC6X_INSN16_MEM_MODE(TIC6X_MEM_MODE_##mode)
-
-#define TIC6X_NUM_PREFER 2
-
-/* Maximum number of fixed fields for a particular opcode. */
-#define TIC6X_MAX_FIXED_FIELDS 4
-
-/* Maximum number of operands in the opcode table for a particular
- opcode. */
-#define TIC6X_MAX_OPERANDS 4
-
-/* Maximum number of operands in the source code for a particular
- opcode (different from the number in the opcode table for SPMASK
- and SPMASKR). */
-#define TIC6X_MAX_SOURCE_OPERANDS 8
-
-/* Maximum number of variable fields for a particular opcode. */
-#define TIC6X_MAX_VAR_FIELDS 7
-
-/* Which functional units an opcode uses. This only describes the
- basic choice of D, L, M, S or no functional unit; other fields are
- used to describe further restrictions (instructions only operating
- on one side), use of cross paths and load/store instructions using
- one side for the address and the other side for the source or
- destination register. */
-typedef enum
- {
- tic6x_func_unit_d,
- tic6x_func_unit_l,
- tic6x_func_unit_m,
- tic6x_func_unit_s,
- tic6x_func_unit_nfu
- } tic6x_func_unit_base;
-
-/* Possible forms of source operand. */
-typedef enum
- {
- /* An assembly-time constant. */
- tic6x_operand_asm_const,
- /* A link-time constant. */
- tic6x_operand_link_const,
- /* A register, from the same side as the functional unit
- selected. */
- tic6x_operand_reg,
- /* A register, from the same side as the functional unit
- selected that ignore RS header bit */
- tic6x_operand_reg_nors,
- /* A register, from the b side */
- tic6x_operand_reg_bside,
- /* A register, from the b side and from the low register set */
- tic6x_operand_reg_bside_nors,
- /* A register, that is from the other side if a cross path is
- used. */
- tic6x_operand_xreg,
- /* A register, that is from the side of the data path
- selected. */
- tic6x_operand_dreg,
- /* An address register usable with 15-bit offsets (B14 or B15).
- This is from the same side as the functional unit if a cross
- path is not used, and the other side if a cross path is
- used. */
- tic6x_operand_areg,
- /* The B15 register */
- tic6x_operand_b15reg,
- /* A register coded as an offset from either A16 or B16 depending
- on the value of the t bit. */
- tic6x_operand_treg,
- /* A register (A0 or B0), from the same side as the
- functional unit selected. */
- tic6x_operand_zreg,
- /* A return address register (A3 or B3), from the same side as the
- functional unit selected. */
- tic6x_operand_retreg,
- /* A register pair, from the same side as the functional unit
- selected. */
- tic6x_operand_regpair,
- /* A register pair, that is from the other side if a cross path is
- used. */
- tic6x_operand_xregpair,
- /* A register pair, from the side of the data path selected. */
- tic6x_operand_dregpair,
- /* A register pair coded as an offset from either A16 or B16 depending
- on the value of the t bit. */
- tic6x_operand_tregpair,
- /* The literal string "irp" (case-insensitive). */
- tic6x_operand_irp,
- /* The literal string "nrp" (case-insensitive). */
- tic6x_operand_nrp,
- /* The literal string "ilc" (case-insensitive). */
- tic6x_operand_ilc,
- /* A control register. */
- tic6x_operand_ctrl,
- /* A memory reference (base and offset registers from the side of
- the functional unit selected), using either unsigned 5-bit
- constant or register offset, if any offset; register offsets
- cannot use unscaled () syntax. */
- tic6x_operand_mem_short,
- /* A memory reference (base and offset registers from the side of
- the functional unit selected), using either unsigned 5-bit
- constant or register offset, if any offset; register offsets
- can use unscaled () syntax (for LDNDW and STNDW). */
- tic6x_operand_mem_ndw,
- /* A memory reference using 15-bit link-time constant offset
- relative to B14 or B15. */
- tic6x_operand_mem_long,
- /* A memory reference that only dereferences a register with no
- further adjustments (*REG), that register being from the side
- of the functional unit selected. */
- tic6x_operand_mem_deref,
- /* A functional unit name or a list thereof (for SPMASK and
- SPMASKR). */
- tic6x_operand_func_unit,
- /* Hardwired constant '5' in Sbu8 Scs10 and Sbu8c 16 bits
- instruction formats - spru732j.pdf Appendix F.4 */
- tic6x_operand_hw_const_minus_1,
- tic6x_operand_hw_const_0,
- tic6x_operand_hw_const_1,
- tic6x_operand_hw_const_5,
- tic6x_operand_hw_const_16,
- tic6x_operand_hw_const_24,
- tic6x_operand_hw_const_31
- } tic6x_operand_form;
-
-/* Whether something is, or can be, read or written. */
-typedef enum
- {
- tic6x_rw_none,
- tic6x_rw_read,
- tic6x_rw_write,
- tic6x_rw_read_write
- } tic6x_rw;
-
-/* Description of a source operand and how it is used. */
-typedef struct
-{
- /* The syntactic form of the operand. */
- tic6x_operand_form form;
-
- /* For non-constant operands, the size in bytes (1, 2, 4, 5 or
- 8). Ignored for constant operands. */
- unsigned int size;
-
- /* Whether the operand is read, written or both. In addition to the
- operations described here, address registers are read on cycle 1
- regardless of when the memory operand is read or written, and may
- be modified as described by the addressing mode, and control
- registers may be implicitly read by some instructions. There are
- also some special cases not fully described by this
- structure.
-
- - For mpydp, the low part of src2 is read on cycles 1 and 3 but
- not 2, and the high part on cycles 2 and 4 but not 3.
-
- - The swap2 pseudo-operation maps to packlh2, reading the first
- operand of swap2 twice. */
- tic6x_rw rw;
-
- /* The first and last cycles (1 for E1, etc.) at which the operand,
- or the low part for two-register operands, is read or
- written. */
- unsigned short low_first;
- unsigned short low_last;
-
- /* Likewise, for the high part. */
- unsigned short high_first;
- unsigned short high_last;
-} tic6x_operand_info;
-
-/* Ways of converting an operand or functional unit specifier to a
- field value. */
-typedef enum
- {
- /* Store an unsigned assembly-time constant (which must fit) in
- the field. */
- tic6x_coding_ucst,
- /* Store a signed constant (which must fit) in the field. This
- may be used both for assembly-time constants and for link-time
- constants. */
- tic6x_coding_scst,
- /* Subtract one from an unsigned assembly-time constant (which
- must be strictly positive before the subtraction) and store the
- value (which must fit) in the field. */
- tic6x_coding_ucst_minus_one,
- /* Negate a signed assembly-time constant, and store the result of
- negation (which must fit) in the field. Used only for
- pseudo-operations. */
- tic6x_coding_scst_negate,
- /* Store an unsigned link-time constant, implicitly DP-relative
- and counting in bytes, in the field. For expression operands,
- assembly-time constants are encoded as-is. For memory
- reference operands, the offset is encoded as-is if [] syntax is
- used and shifted if () is used. */
- tic6x_coding_ulcst_dpr_byte,
- /* Store an unsigned link-time constant, implicitly DP-relative
- and counting in half-words, in the field. For expression
- operands, assembly-time constants are encoded as-is. For
- memory reference operands, the offset is encoded as-is if []
- syntax is used and shifted if () is used. */
- tic6x_coding_ulcst_dpr_half,
- /* Store an unsigned link-time constant, implicitly DP-relative
- and counting in words, in the field. For expression operands,
- assembly-time constants are encoded as-is. For memory
- reference operands, the offset is encoded as-is if [] syntax is
- used and shifted if () is used. */
- tic6x_coding_ulcst_dpr_word,
- /* Store the low 16 bits of a link-time constant in the field;
- considered unsigned for disassembly. */
- tic6x_coding_lcst_low16,
- /* Store the high 16 bits of a link-time constant in the field;
- considered unsigned for disassembly. */
- tic6x_coding_lcst_high16,
- /* Store a signed PC-relative value (address of label minus
- address of fetch packet containing the current instruction,
- counted in words) in the field. */
- tic6x_coding_pcrel,
- /* Likewise, but counting in half-words if in a header-based fetch
- packet. */
- tic6x_coding_pcrel_half,
- /* Store an unsigned PC-relative value used in compact insn */
- tic6x_coding_pcrel_half_unsigned,
- /* Encode the register number (even number for a register pair) in
- the field. When applied to a memory reference, encode the base
- register. */
- tic6x_coding_reg,
- /* Encode the register-pair's lsb (even register) for instructions
- that use src1 as port for loading lsb of double-precision
- operand value (absdp, dpint, dpsp, dptrunc, rcpdp, rsqrdp). */
- tic6x_coding_regpair_lsb,
- /* Encode the register-pair's msb (odd register), see above. */
- tic6x_coding_regpair_msb,
- /* Store 0 for register B14, 1 for register B15. When applied to
- a memory reference, encode the base register. */
- tic6x_coding_areg,
- /* Compact instruction offset base register */
- tic6x_coding_reg_ptr,
- /* Store the low part of a control register address. */
- tic6x_coding_crlo,
- /* Store the high part of a control register address. */
- tic6x_coding_crhi,
- /* Encode the even register number for a register pair, shifted
- right by one bit. */
- tic6x_coding_reg_shift,
- /* Store either the offset register or the 5-bit unsigned offset
- for a memory reference. If an offset uses the unscaled ()
- form, which is only permitted with constants, it is scaled
- according to the access size of the operand before being
- stored. */
- tic6x_coding_mem_offset,
- /* Store either the offset register or the 5-bit unsigned offset
- for a memory reference, but with no scaling applied to the
- offset (for nonaligned doubleword operations). */
- tic6x_coding_mem_offset_noscale,
- /* Store the addressing mode for a memory reference. */
- tic6x_coding_mem_mode,
- /* Store whether a memory reference is scaled. */
- tic6x_coding_scaled,
- /* Store the stage in an SPKERNEL instruction in the upper part of
- the field. */
- tic6x_coding_fstg,
- /* Store the cycle in an SPKERNEL instruction in the lower part of
- the field. */
- tic6x_coding_fcyc,
- /* Store the mask bits for functional units in the field in an
- SPMASK or SPMASKR instruction. */
- tic6x_coding_spmask,
- /* Store the number of a register that is unused, or minimally
- used, in this execute packet. The number must be the same for
- all uses of this coding in a single instruction, but may be
- different for different instructions in the execute packet.
- This is for the "zero" pseudo-operation. This is not safe when
- reads may occur from instructions in previous execute packets;
- in such cases the programmer or compiler should use explicit
- "sub" instructions for those cases of "zero" that cannot be
- implemented as "mvk" for the processor specified. */
- tic6x_coding_reg_unused,
- /* Store 1 if the functional unit used is on side B, 0 for side
- A. */
- tic6x_coding_fu,
- /* Store 1 if the data path used (source register for store,
- destination for load) is on side B, 0 for side A. */
- tic6x_coding_data_fu,
- /* Store 1 if the cross path is being used, 0 otherwise. */
- tic6x_coding_xpath,
- /* L3i constant coding */
- tic6x_coding_scst_l3i,
- /* S3i constant coding */
- tic6x_coding_cst_s3i,
- /* mem offset minus 1 */
- tic6x_coding_mem_offset_minus_one,
- /* non aligned mem offset minus 1 */
- tic6x_coding_mem_offset_minus_one_noscale,
- tic6x_coding_rside
- } tic6x_coding_method;
-
-/* How to generate the value of a particular field. */
-typedef struct
-{
- /* The name of the field. */
- tic6x_insn_field_id field_id;
-
- /* How it is encoded. */
- tic6x_coding_method coding_method;
-
- /* Source operand number, if any. */
- unsigned int operand_num;
-} tic6x_coding_field;
-
-/* Types of instruction for pipeline purposes. The type determines
- functional unit and cross path latency (when the same functional
- unit can be used by other instructions, when the same cross path
- can be used by other instructions). */
-typedef enum
- {
- tic6x_pipeline_nop,
- tic6x_pipeline_1cycle,
- tic6x_pipeline_1616_m,
- tic6x_pipeline_store,
- tic6x_pipeline_mul_ext,
- tic6x_pipeline_load,
- tic6x_pipeline_branch,
- tic6x_pipeline_2cycle_dp,
- tic6x_pipeline_4cycle,
- tic6x_pipeline_intdp,
- tic6x_pipeline_dpcmp,
- tic6x_pipeline_addsubdp,
- tic6x_pipeline_mpyi,
- tic6x_pipeline_mpyid,
- tic6x_pipeline_mpydp,
- tic6x_pipeline_mpyspdp,
- tic6x_pipeline_mpysp2dp
- } tic6x_pipeline_type;
-
-/* Description of a control register. */
-typedef struct
-{
- /* The name of the register. */
- const char *name;
-
- /* Which ISA variants include this control register. */
- unsigned short isa_variants;
-
- /* Whether it can be read, written or both (in supervisor mode).
- Some registers use the same address, but different names, for
- reading and writing. */
- tic6x_rw rw;
-
- /* crlo value for this register. */
- unsigned int crlo;
-
- /* Mask that, ANDed with the crhi value in the instruction, must be
- 0. 0 is always generated when generating code. */
- unsigned int crhi_mask;
-} tic6x_ctrl;
-
-/* An index into the table of control registers. */
-typedef enum
- {
-#define CTRL(name, isa, rw, crlo, crhi_mask) \
- CONCAT2(tic6x_ctrl_,name),
-#include "tic6x-control-registers.h"
-#undef CTRL
- tic6x_ctrl_max
- } tic6x_ctrl_id;
-
-/* The table itself. */
-extern const tic6x_ctrl tic6x_ctrl_table[tic6x_ctrl_max];
-
-/* An entry in the opcode table. */
-typedef struct
-{
- /* The name of the instruction. */
- const char *name;
-
- /* Functional unit used by this instruction (basic information). */
- tic6x_func_unit_base func_unit;
-
- /* The format of this instruction. */
- tic6x_insn_format_id format;
-
- /* The pipeline type of this instruction. */
- tic6x_pipeline_type type;
-
- /* Which ISA variants include this instruction. */
- unsigned short isa_variants;
-
- /* Flags for this instruction. */
- unsigned int flags;
-
- /* Number of fixed fields, or fields with restricted value ranges,
- for this instruction. */
- unsigned int num_fixed_fields;
-
- /* Values of fields fixed for this instruction. */
- tic6x_fixed_field fixed_fields[TIC6X_MAX_FIXED_FIELDS];
-
- /* The number of operands in the source form of this
- instruction. */
- unsigned int num_operands;
-
- /* Information about individual operands. */
- tic6x_operand_info operand_info[TIC6X_MAX_OPERANDS];
-
- /* The number of variable fields for this instruction with encoding
- instructions explicitly given. */
- unsigned int num_variable_fields;
-
- /* How fields (other than ones with fixed value) are computed from
- the source operands and functional unit specifiers. In addition
- to fields specified here:
-
- - creg, if present, is set from the predicate, along with z which
- must be present if creg is present.
-
- - p, if present (on all non-compact instructions), is set from
- the parallel bars.
- */
- tic6x_coding_field variable_fields[TIC6X_MAX_VAR_FIELDS];
-} tic6x_opcode;
-
-/* An index into the table of opcodes. */
-typedef enum
- {
-#define INSN(name, func_unit, format, type, isa, flags, fixed, ops, var) \
- CONCAT6(tic6x_opcode_,name,_,func_unit,_,format),
-#define INSNE(name, e, func_unit, format, type, isa, flags, fixed, ops, var) \
- CONCAT4(tic6x_opcode_,name,_,e),
-#define INSNU(name, func_unit, format, type, isa, flags, fixed, ops, var) \
- CONCAT6(tic6x_opcode_,name,_,func_unit,_,format),
-#define INSNUE(name, e, func_unit, format, type, isa, flags, fixed, ops, var) \
- CONCAT6(tic6x_opcode_,name,_,func_unit,_,e),
-#include "tic6x-opcode-table.h"
-#undef INSN
-#undef INSNE
-#undef INSNU
-#undef INSNUE
- tic6x_opcode_max
- } tic6x_opcode_id;
-
-/* The table itself. */
-extern const tic6x_opcode tic6x_opcode_table[tic6x_opcode_max];
-
-/* A linked list of opcodes. */
-typedef struct tic6x_opcode_list_tag
-{
- tic6x_opcode_id id;
- struct tic6x_opcode_list_tag *next;
-} tic6x_opcode_list;
-
-/* The information from a fetch packet header. */
-typedef struct
-{
- /* The header itself. */
- unsigned int header;
-
- /* Whether each word uses compact instructions. */
- bfd_boolean word_compact[7];
-
- /* Whether loads are protected. */
- bfd_boolean prot;
-
- /* Whether instructions use the high register set. */
- bfd_boolean rs;
-
- /* Data size. */
- unsigned int dsz;
-
- /* Whether compact instructions in the S unit are decoded as
- branches. */
- bfd_boolean br;
-
- /* Whether compact instructions saturate. */
- bfd_boolean sat;
-
- /* P-bits. */
- bfd_boolean p_bits[14];
-} tic6x_fetch_packet_header;
-
-#endif /* OPCODE_TIC6X_H */
diff --git a/include/opcode/tic80.h b/include/opcode/tic80.h
deleted file mode 100644
index 43c84be57..000000000
--- a/include/opcode/tic80.h
+++ /dev/null
@@ -1,283 +0,0 @@
-/* tic80.h -- Header file for TI TMS320C80 (MV) opcode table
- Copyright 1996, 1997, 2003, 2010 Free Software Foundation, Inc.
- Written by Fred Fish (fnf@cygnus.com), Cygnus Support
-
- This file is part of GDB, GAS, and the GNU binutils.
-
- GDB, GAS, and the GNU binutils are free software; you can redistribute
- them and/or modify them under the terms of the GNU General Public
- License as published by the Free Software Foundation; either version 3,
- or (at your option) any later version.
-
- GDB, GAS, and the GNU binutils are distributed in the hope that they
- 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 file; see the file COPYING3. If not, write to the Free
- Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef TIC80_H
-#define TIC80_H
-
-/* The opcode table is an array of struct tic80_opcode. */
-
-struct tic80_opcode
-{
- /* The opcode name. */
-
- const char *name;
-
- /* The opcode itself. Those bits which will be filled in with operands
- are zeroes. */
-
- unsigned long opcode;
-
- /* The opcode mask. This is used by the disassembler. This is a mask
- containing ones indicating those bits which must match the opcode
- field, and zeroes indicating those bits which need not match (and are
- presumably filled in by operands). */
-
- unsigned long mask;
-
- /* Special purpose flags for this opcode. */
-
- unsigned char flags;
-
- /* An array of operand codes. Each code is an index into the operand
- table. They appear in the order which the operands must appear in
- assembly code, and are terminated by a zero. FIXME: Adjust size to
- match actual requirements when TIc80 support is complete */
-
- unsigned char operands[8];
-};
-
-/* The table itself is sorted by major opcode number, and is otherwise in
- the order in which the disassembler should consider instructions.
- FIXME: This isn't currently true. */
-
-extern const struct tic80_opcode tic80_opcodes[];
-extern const int tic80_num_opcodes;
-
-
-/* The operands table is an array of struct tic80_operand. */
-
-struct tic80_operand
-{
- /* The number of bits in the operand. */
-
- int bits;
-
- /* How far the operand is left shifted in the instruction. */
-
- int shift;
-
- /* Insertion function. This is used by the assembler. To insert an
- operand value into an instruction, check this field.
-
- If it is NULL, execute
- i |= (op & ((1 << o->bits) - 1)) << o->shift;
- (i is the instruction which we are filling in, o is a pointer to
- this structure, and op is the opcode value; this assumes twos
- complement arithmetic).
-
- If this field is not NULL, then simply call it with the
- instruction and the operand value. It will return the new value
- of the instruction. If the ERRMSG argument is not NULL, then if
- the operand value is illegal, *ERRMSG will be set to a warning
- string (the operand will be inserted in any case). If the
- operand value is legal, *ERRMSG will be unchanged (most operands
- can accept any value). */
-
- unsigned long (*insert)
- (unsigned long instruction, long op, const char **errmsg);
-
- /* Extraction function. This is used by the disassembler. To
- extract this operand type from an instruction, check this field.
-
- If it is NULL, compute
- op = ((i) >> o->shift) & ((1 << o->bits) - 1);
- if ((o->flags & TIC80_OPERAND_SIGNED) != 0
- && (op & (1 << (o->bits - 1))) != 0)
- op -= 1 << o->bits;
- (i is the instruction, o is a pointer to this structure, and op
- is the result; this assumes twos complement arithmetic).
-
- If this field is not NULL, then simply call it with the
- instruction value. It will return the value of the operand. If
- the INVALID argument is not NULL, *INVALID will be set to
- non-zero if this operand type can not actually be extracted from
- this operand (i.e., the instruction does not match). If the
- operand is valid, *INVALID will not be changed. */
-
- long (*extract) (unsigned long instruction, int *invalid);
-
- /* One bit syntax flags. */
-
- unsigned long flags;
-};
-
-/* Elements in the table are retrieved by indexing with values from
- the operands field of the tic80_opcodes table. */
-
-extern const struct tic80_operand tic80_operands[];
-
-
-/* Values defined for the flags field of a struct tic80_operand.
-
- Note that flags for all predefined symbols, such as the general purpose
- registers (ex: r10), control registers (ex: FPST), condition codes (ex:
- eq0.b), bit numbers (ex: gt.b), etc are large enough that they can be
- or'd into an int where the lower bits contain the actual numeric value
- that correponds to this predefined symbol. This way a single int can
- contain both the value of the symbol and it's type.
- */
-
-/* This operand must be an even register number. Floating point numbers
- for example are stored in even/odd register pairs. */
-
-#define TIC80_OPERAND_EVEN (1 << 0)
-
-/* This operand must be an odd register number and must be one greater than
- the register number of the previous operand. I.E. the second register in
- an even/odd register pair. */
-
-#define TIC80_OPERAND_ODD (1 << 1)
-
-/* This operand takes signed values. */
-
-#define TIC80_OPERAND_SIGNED (1 << 2)
-
-/* This operand may be either a predefined constant name or a numeric value.
- An example would be a condition code like "eq0.b" which has the numeric
- value 0x2. */
-
-#define TIC80_OPERAND_NUM (1 << 3)
-
-/* This operand should be wrapped in parentheses rather than separated
- from the previous one by a comma. This is used for various
- instructions, like the load and store instructions, which want
- their operands to look like "displacement(reg)" */
-
-#define TIC80_OPERAND_PARENS (1 << 4)
-
-/* This operand is a PC relative branch offset. The disassembler prints
- these symbolically if possible. Note that the offsets are taken as word
- offsets. */
-
-#define TIC80_OPERAND_PCREL (1 << 5)
-
-/* This flag is a hint to the disassembler for using hex as the prefered
- printing format, even for small positive or negative immediate values.
- Normally values in the range -999 to 999 are printed as signed decimal
- values and other values are printed in hex. */
-
-#define TIC80_OPERAND_BITFIELD (1 << 6)
-
-/* This operand may have a ":m" modifier specified by bit 17 in a short
- immediate form instruction. */
-
-#define TIC80_OPERAND_M_SI (1 << 7)
-
-/* This operand may have a ":m" modifier specified by bit 15 in a long
- immediate or register form instruction. */
-
-#define TIC80_OPERAND_M_LI (1 << 8)
-
-/* This operand may have a ":s" modifier specified in bit 11 in a long
- immediate or register form instruction. */
-
-#define TIC80_OPERAND_SCALED (1 << 9)
-
-/* This operand is a floating point value */
-
-#define TIC80_OPERAND_FLOAT (1 << 10)
-
-/* This operand is an byte offset from a base relocation. The lower
- two bits of the final relocated address are ignored when the value is
- written to the program counter. */
-
-#define TIC80_OPERAND_BASEREL (1 << 11)
-
-/* This operand is an "endmask" field for a shift instruction.
- It is treated special in that it can have values of 0-32,
- where 0 and 32 result in the same instruction. The assembler
- must be able to accept both endmask values. This disassembler
- has no way of knowing from the instruction which value was
- given at assembly time, so it just uses '0'. */
-
-#define TIC80_OPERAND_ENDMASK (1 << 12)
-
-/* This operand is one of the 32 general purpose registers.
- The disassembler prints these with a leading 'r'. */
-
-#define TIC80_OPERAND_GPR (1 << 27)
-
-/* This operand is a floating point accumulator register.
- The disassembler prints these with a leading 'a'. */
-
-#define TIC80_OPERAND_FPA ( 1 << 28)
-
-/* This operand is a control register number, either numeric or
- symbolic (like "EIF", "EPC", etc).
- The disassembler prints these symbolically. */
-
-#define TIC80_OPERAND_CR (1 << 29)
-
-/* This operand is a condition code, either numeric or
- symbolic (like "eq0.b", "ne0.w", etc).
- The disassembler prints these symbolically. */
-
-#define TIC80_OPERAND_CC (1 << 30)
-
-/* This operand is a bit number, either numeric or
- symbolic (like "eq.b", "or.f", etc).
- The disassembler prints these symbolically.
- Note that they appear in the instruction in 1's complement relative
- to the values given in the manual. */
-
-#define TIC80_OPERAND_BITNUM (1 << 31)
-
-/* This mask is used to strip operand bits from an int that contains
- both operand bits and a numeric value in the lsbs. */
-
-#define TIC80_OPERAND_MASK (TIC80_OPERAND_GPR | TIC80_OPERAND_FPA | TIC80_OPERAND_CR | TIC80_OPERAND_CC | TIC80_OPERAND_BITNUM)
-
-
-/* Flag bits for the struct tic80_opcode flags field. */
-
-#define TIC80_VECTOR 01 /* Is a vector instruction */
-#define TIC80_NO_R0_DEST 02 /* Register r0 cannot be a destination register */
-
-
-/* The opcodes library contains a table that allows translation from predefined
- symbol names to numeric values, and vice versa. */
-
-/* Structure to hold information about predefined symbols. */
-
-struct predefined_symbol
-{
- char *name; /* name to recognize */
- int value;
-};
-
-#define PDS_NAME(pdsp) ((pdsp) -> name)
-#define PDS_VALUE(pdsp) ((pdsp) -> value)
-
-/* Translation array. */
-extern const struct predefined_symbol tic80_predefined_symbols[];
-/* How many members in the array. */
-extern const int tic80_num_predefined_symbols;
-
-/* Translate value to symbolic name. */
-const char *tic80_value_to_symbol (int val, int class);
-
-/* Translate symbolic name to value. */
-int tic80_symbol_to_value (char *name, int class);
-
-const struct predefined_symbol *tic80_next_predefined_symbol
- (const struct predefined_symbol *);
-
-#endif /* TIC80_H */
diff --git a/include/opcode/tilegx.h b/include/opcode/tilegx.h
deleted file mode 100644
index c11fc1661..000000000
--- a/include/opcode/tilegx.h
+++ /dev/null
@@ -1,1304 +0,0 @@
-/* TILE-Gx opcode information.
- *
- * Copyright 2011 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#ifndef opcode_tile_h
-#define opcode_tile_h
-
-typedef unsigned long long tilegx_bundle_bits;
-
-
-enum
-{
- TILEGX_MAX_OPERANDS = 4 /* bfexts */
-};
-
-typedef enum
-{
- TILEGX_OPC_BPT,
- TILEGX_OPC_INFO,
- TILEGX_OPC_INFOL,
- TILEGX_OPC_LD4S_TLS,
- TILEGX_OPC_LD_TLS,
- TILEGX_OPC_MOVE,
- TILEGX_OPC_MOVEI,
- TILEGX_OPC_MOVELI,
- TILEGX_OPC_PREFETCH,
- TILEGX_OPC_PREFETCH_ADD_L1,
- TILEGX_OPC_PREFETCH_ADD_L1_FAULT,
- TILEGX_OPC_PREFETCH_ADD_L2,
- TILEGX_OPC_PREFETCH_ADD_L2_FAULT,
- TILEGX_OPC_PREFETCH_ADD_L3,
- TILEGX_OPC_PREFETCH_ADD_L3_FAULT,
- TILEGX_OPC_PREFETCH_L1,
- TILEGX_OPC_PREFETCH_L1_FAULT,
- TILEGX_OPC_PREFETCH_L2,
- TILEGX_OPC_PREFETCH_L2_FAULT,
- TILEGX_OPC_PREFETCH_L3,
- TILEGX_OPC_PREFETCH_L3_FAULT,
- TILEGX_OPC_RAISE,
- TILEGX_OPC_ADD,
- TILEGX_OPC_ADDI,
- TILEGX_OPC_ADDLI,
- TILEGX_OPC_ADDX,
- TILEGX_OPC_ADDXI,
- TILEGX_OPC_ADDXLI,
- TILEGX_OPC_ADDXSC,
- TILEGX_OPC_AND,
- TILEGX_OPC_ANDI,
- TILEGX_OPC_BEQZ,
- TILEGX_OPC_BEQZT,
- TILEGX_OPC_BFEXTS,
- TILEGX_OPC_BFEXTU,
- TILEGX_OPC_BFINS,
- TILEGX_OPC_BGEZ,
- TILEGX_OPC_BGEZT,
- TILEGX_OPC_BGTZ,
- TILEGX_OPC_BGTZT,
- TILEGX_OPC_BLBC,
- TILEGX_OPC_BLBCT,
- TILEGX_OPC_BLBS,
- TILEGX_OPC_BLBST,
- TILEGX_OPC_BLEZ,
- TILEGX_OPC_BLEZT,
- TILEGX_OPC_BLTZ,
- TILEGX_OPC_BLTZT,
- TILEGX_OPC_BNEZ,
- TILEGX_OPC_BNEZT,
- TILEGX_OPC_CLZ,
- TILEGX_OPC_CMOVEQZ,
- TILEGX_OPC_CMOVNEZ,
- TILEGX_OPC_CMPEQ,
- TILEGX_OPC_CMPEQI,
- TILEGX_OPC_CMPEXCH,
- TILEGX_OPC_CMPEXCH4,
- TILEGX_OPC_CMPLES,
- TILEGX_OPC_CMPLEU,
- TILEGX_OPC_CMPLTS,
- TILEGX_OPC_CMPLTSI,
- TILEGX_OPC_CMPLTU,
- TILEGX_OPC_CMPLTUI,
- TILEGX_OPC_CMPNE,
- TILEGX_OPC_CMUL,
- TILEGX_OPC_CMULA,
- TILEGX_OPC_CMULAF,
- TILEGX_OPC_CMULF,
- TILEGX_OPC_CMULFR,
- TILEGX_OPC_CMULH,
- TILEGX_OPC_CMULHR,
- TILEGX_OPC_CRC32_32,
- TILEGX_OPC_CRC32_8,
- TILEGX_OPC_CTZ,
- TILEGX_OPC_DBLALIGN,
- TILEGX_OPC_DBLALIGN2,
- TILEGX_OPC_DBLALIGN4,
- TILEGX_OPC_DBLALIGN6,
- TILEGX_OPC_DRAIN,
- TILEGX_OPC_DTLBPR,
- TILEGX_OPC_EXCH,
- TILEGX_OPC_EXCH4,
- TILEGX_OPC_FDOUBLE_ADD_FLAGS,
- TILEGX_OPC_FDOUBLE_ADDSUB,
- TILEGX_OPC_FDOUBLE_MUL_FLAGS,
- TILEGX_OPC_FDOUBLE_PACK1,
- TILEGX_OPC_FDOUBLE_PACK2,
- TILEGX_OPC_FDOUBLE_SUB_FLAGS,
- TILEGX_OPC_FDOUBLE_UNPACK_MAX,
- TILEGX_OPC_FDOUBLE_UNPACK_MIN,
- TILEGX_OPC_FETCHADD,
- TILEGX_OPC_FETCHADD4,
- TILEGX_OPC_FETCHADDGEZ,
- TILEGX_OPC_FETCHADDGEZ4,
- TILEGX_OPC_FETCHAND,
- TILEGX_OPC_FETCHAND4,
- TILEGX_OPC_FETCHOR,
- TILEGX_OPC_FETCHOR4,
- TILEGX_OPC_FINV,
- TILEGX_OPC_FLUSH,
- TILEGX_OPC_FLUSHWB,
- TILEGX_OPC_FNOP,
- TILEGX_OPC_FSINGLE_ADD1,
- TILEGX_OPC_FSINGLE_ADDSUB2,
- TILEGX_OPC_FSINGLE_MUL1,
- TILEGX_OPC_FSINGLE_MUL2,
- TILEGX_OPC_FSINGLE_PACK1,
- TILEGX_OPC_FSINGLE_PACK2,
- TILEGX_OPC_FSINGLE_SUB1,
- TILEGX_OPC_ICOH,
- TILEGX_OPC_ILL,
- TILEGX_OPC_INV,
- TILEGX_OPC_IRET,
- TILEGX_OPC_J,
- TILEGX_OPC_JAL,
- TILEGX_OPC_JALR,
- TILEGX_OPC_JALRP,
- TILEGX_OPC_JR,
- TILEGX_OPC_JRP,
- TILEGX_OPC_LD,
- TILEGX_OPC_LD1S,
- TILEGX_OPC_LD1S_ADD,
- TILEGX_OPC_LD1U,
- TILEGX_OPC_LD1U_ADD,
- TILEGX_OPC_LD2S,
- TILEGX_OPC_LD2S_ADD,
- TILEGX_OPC_LD2U,
- TILEGX_OPC_LD2U_ADD,
- TILEGX_OPC_LD4S,
- TILEGX_OPC_LD4S_ADD,
- TILEGX_OPC_LD4U,
- TILEGX_OPC_LD4U_ADD,
- TILEGX_OPC_LD_ADD,
- TILEGX_OPC_LDNA,
- TILEGX_OPC_LDNA_ADD,
- TILEGX_OPC_LDNT,
- TILEGX_OPC_LDNT1S,
- TILEGX_OPC_LDNT1S_ADD,
- TILEGX_OPC_LDNT1U,
- TILEGX_OPC_LDNT1U_ADD,
- TILEGX_OPC_LDNT2S,
- TILEGX_OPC_LDNT2S_ADD,
- TILEGX_OPC_LDNT2U,
- TILEGX_OPC_LDNT2U_ADD,
- TILEGX_OPC_LDNT4S,
- TILEGX_OPC_LDNT4S_ADD,
- TILEGX_OPC_LDNT4U,
- TILEGX_OPC_LDNT4U_ADD,
- TILEGX_OPC_LDNT_ADD,
- TILEGX_OPC_LNK,
- TILEGX_OPC_MF,
- TILEGX_OPC_MFSPR,
- TILEGX_OPC_MM,
- TILEGX_OPC_MNZ,
- TILEGX_OPC_MTSPR,
- TILEGX_OPC_MUL_HS_HS,
- TILEGX_OPC_MUL_HS_HU,
- TILEGX_OPC_MUL_HS_LS,
- TILEGX_OPC_MUL_HS_LU,
- TILEGX_OPC_MUL_HU_HU,
- TILEGX_OPC_MUL_HU_LS,
- TILEGX_OPC_MUL_HU_LU,
- TILEGX_OPC_MUL_LS_LS,
- TILEGX_OPC_MUL_LS_LU,
- TILEGX_OPC_MUL_LU_LU,
- TILEGX_OPC_MULA_HS_HS,
- TILEGX_OPC_MULA_HS_HU,
- TILEGX_OPC_MULA_HS_LS,
- TILEGX_OPC_MULA_HS_LU,
- TILEGX_OPC_MULA_HU_HU,
- TILEGX_OPC_MULA_HU_LS,
- TILEGX_OPC_MULA_HU_LU,
- TILEGX_OPC_MULA_LS_LS,
- TILEGX_OPC_MULA_LS_LU,
- TILEGX_OPC_MULA_LU_LU,
- TILEGX_OPC_MULAX,
- TILEGX_OPC_MULX,
- TILEGX_OPC_MZ,
- TILEGX_OPC_NAP,
- TILEGX_OPC_NOP,
- TILEGX_OPC_NOR,
- TILEGX_OPC_OR,
- TILEGX_OPC_ORI,
- TILEGX_OPC_PCNT,
- TILEGX_OPC_REVBITS,
- TILEGX_OPC_REVBYTES,
- TILEGX_OPC_ROTL,
- TILEGX_OPC_ROTLI,
- TILEGX_OPC_SHL,
- TILEGX_OPC_SHL16INSLI,
- TILEGX_OPC_SHL1ADD,
- TILEGX_OPC_SHL1ADDX,
- TILEGX_OPC_SHL2ADD,
- TILEGX_OPC_SHL2ADDX,
- TILEGX_OPC_SHL3ADD,
- TILEGX_OPC_SHL3ADDX,
- TILEGX_OPC_SHLI,
- TILEGX_OPC_SHLX,
- TILEGX_OPC_SHLXI,
- TILEGX_OPC_SHRS,
- TILEGX_OPC_SHRSI,
- TILEGX_OPC_SHRU,
- TILEGX_OPC_SHRUI,
- TILEGX_OPC_SHRUX,
- TILEGX_OPC_SHRUXI,
- TILEGX_OPC_SHUFFLEBYTES,
- TILEGX_OPC_ST,
- TILEGX_OPC_ST1,
- TILEGX_OPC_ST1_ADD,
- TILEGX_OPC_ST2,
- TILEGX_OPC_ST2_ADD,
- TILEGX_OPC_ST4,
- TILEGX_OPC_ST4_ADD,
- TILEGX_OPC_ST_ADD,
- TILEGX_OPC_STNT,
- TILEGX_OPC_STNT1,
- TILEGX_OPC_STNT1_ADD,
- TILEGX_OPC_STNT2,
- TILEGX_OPC_STNT2_ADD,
- TILEGX_OPC_STNT4,
- TILEGX_OPC_STNT4_ADD,
- TILEGX_OPC_STNT_ADD,
- TILEGX_OPC_SUB,
- TILEGX_OPC_SUBX,
- TILEGX_OPC_SUBXSC,
- TILEGX_OPC_SWINT0,
- TILEGX_OPC_SWINT1,
- TILEGX_OPC_SWINT2,
- TILEGX_OPC_SWINT3,
- TILEGX_OPC_TBLIDXB0,
- TILEGX_OPC_TBLIDXB1,
- TILEGX_OPC_TBLIDXB2,
- TILEGX_OPC_TBLIDXB3,
- TILEGX_OPC_V1ADD,
- TILEGX_OPC_V1ADDI,
- TILEGX_OPC_V1ADDUC,
- TILEGX_OPC_V1ADIFFU,
- TILEGX_OPC_V1AVGU,
- TILEGX_OPC_V1CMPEQ,
- TILEGX_OPC_V1CMPEQI,
- TILEGX_OPC_V1CMPLES,
- TILEGX_OPC_V1CMPLEU,
- TILEGX_OPC_V1CMPLTS,
- TILEGX_OPC_V1CMPLTSI,
- TILEGX_OPC_V1CMPLTU,
- TILEGX_OPC_V1CMPLTUI,
- TILEGX_OPC_V1CMPNE,
- TILEGX_OPC_V1DDOTPU,
- TILEGX_OPC_V1DDOTPUA,
- TILEGX_OPC_V1DDOTPUS,
- TILEGX_OPC_V1DDOTPUSA,
- TILEGX_OPC_V1DOTP,
- TILEGX_OPC_V1DOTPA,
- TILEGX_OPC_V1DOTPU,
- TILEGX_OPC_V1DOTPUA,
- TILEGX_OPC_V1DOTPUS,
- TILEGX_OPC_V1DOTPUSA,
- TILEGX_OPC_V1INT_H,
- TILEGX_OPC_V1INT_L,
- TILEGX_OPC_V1MAXU,
- TILEGX_OPC_V1MAXUI,
- TILEGX_OPC_V1MINU,
- TILEGX_OPC_V1MINUI,
- TILEGX_OPC_V1MNZ,
- TILEGX_OPC_V1MULTU,
- TILEGX_OPC_V1MULU,
- TILEGX_OPC_V1MULUS,
- TILEGX_OPC_V1MZ,
- TILEGX_OPC_V1SADAU,
- TILEGX_OPC_V1SADU,
- TILEGX_OPC_V1SHL,
- TILEGX_OPC_V1SHLI,
- TILEGX_OPC_V1SHRS,
- TILEGX_OPC_V1SHRSI,
- TILEGX_OPC_V1SHRU,
- TILEGX_OPC_V1SHRUI,
- TILEGX_OPC_V1SUB,
- TILEGX_OPC_V1SUBUC,
- TILEGX_OPC_V2ADD,
- TILEGX_OPC_V2ADDI,
- TILEGX_OPC_V2ADDSC,
- TILEGX_OPC_V2ADIFFS,
- TILEGX_OPC_V2AVGS,
- TILEGX_OPC_V2CMPEQ,
- TILEGX_OPC_V2CMPEQI,
- TILEGX_OPC_V2CMPLES,
- TILEGX_OPC_V2CMPLEU,
- TILEGX_OPC_V2CMPLTS,
- TILEGX_OPC_V2CMPLTSI,
- TILEGX_OPC_V2CMPLTU,
- TILEGX_OPC_V2CMPLTUI,
- TILEGX_OPC_V2CMPNE,
- TILEGX_OPC_V2DOTP,
- TILEGX_OPC_V2DOTPA,
- TILEGX_OPC_V2INT_H,
- TILEGX_OPC_V2INT_L,
- TILEGX_OPC_V2MAXS,
- TILEGX_OPC_V2MAXSI,
- TILEGX_OPC_V2MINS,
- TILEGX_OPC_V2MINSI,
- TILEGX_OPC_V2MNZ,
- TILEGX_OPC_V2MULFSC,
- TILEGX_OPC_V2MULS,
- TILEGX_OPC_V2MULTS,
- TILEGX_OPC_V2MZ,
- TILEGX_OPC_V2PACKH,
- TILEGX_OPC_V2PACKL,
- TILEGX_OPC_V2PACKUC,
- TILEGX_OPC_V2SADAS,
- TILEGX_OPC_V2SADAU,
- TILEGX_OPC_V2SADS,
- TILEGX_OPC_V2SADU,
- TILEGX_OPC_V2SHL,
- TILEGX_OPC_V2SHLI,
- TILEGX_OPC_V2SHLSC,
- TILEGX_OPC_V2SHRS,
- TILEGX_OPC_V2SHRSI,
- TILEGX_OPC_V2SHRU,
- TILEGX_OPC_V2SHRUI,
- TILEGX_OPC_V2SUB,
- TILEGX_OPC_V2SUBSC,
- TILEGX_OPC_V4ADD,
- TILEGX_OPC_V4ADDSC,
- TILEGX_OPC_V4INT_H,
- TILEGX_OPC_V4INT_L,
- TILEGX_OPC_V4PACKSC,
- TILEGX_OPC_V4SHL,
- TILEGX_OPC_V4SHLSC,
- TILEGX_OPC_V4SHRS,
- TILEGX_OPC_V4SHRU,
- TILEGX_OPC_V4SUB,
- TILEGX_OPC_V4SUBSC,
- TILEGX_OPC_WH64,
- TILEGX_OPC_XOR,
- TILEGX_OPC_XORI,
- TILEGX_OPC_NONE
-} tilegx_mnemonic;
-
-/* 64-bit pattern for a { bpt ; nop } bundle. */
-#define TILEGX_BPT_BUNDLE 0x286a44ae51485000ULL
-
-
-
-static __inline unsigned int
-get_BFEnd_X0(tilegx_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 12)) & 0x3f);
-}
-
-static __inline unsigned int
-get_BFOpcodeExtension_X0(tilegx_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 24)) & 0xf);
-}
-
-static __inline unsigned int
-get_BFStart_X0(tilegx_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 18)) & 0x3f);
-}
-
-static __inline unsigned int
-get_BrOff_X1(tilegx_bundle_bits n)
-{
- return (((unsigned int)(n >> 31)) & 0x0000003f) |
- (((unsigned int)(n >> 37)) & 0x0001ffc0);
-}
-
-static __inline unsigned int
-get_BrType_X1(tilegx_bundle_bits n)
-{
- return (((unsigned int)(n >> 54)) & 0x1f);
-}
-
-static __inline unsigned int
-get_Dest_Imm8_X1(tilegx_bundle_bits n)
-{
- return (((unsigned int)(n >> 31)) & 0x0000003f) |
- (((unsigned int)(n >> 43)) & 0x000000c0);
-}
-
-static __inline unsigned int
-get_Dest_X0(tilegx_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 0)) & 0x3f);
-}
-
-static __inline unsigned int
-get_Dest_X1(tilegx_bundle_bits n)
-{
- return (((unsigned int)(n >> 31)) & 0x3f);
-}
-
-static __inline unsigned int
-get_Dest_Y0(tilegx_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 0)) & 0x3f);
-}
-
-static __inline unsigned int
-get_Dest_Y1(tilegx_bundle_bits n)
-{
- return (((unsigned int)(n >> 31)) & 0x3f);
-}
-
-static __inline unsigned int
-get_Imm16_X0(tilegx_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 12)) & 0xffff);
-}
-
-static __inline unsigned int
-get_Imm16_X1(tilegx_bundle_bits n)
-{
- return (((unsigned int)(n >> 43)) & 0xffff);
-}
-
-static __inline unsigned int
-get_Imm8OpcodeExtension_X0(tilegx_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 20)) & 0xff);
-}
-
-static __inline unsigned int
-get_Imm8OpcodeExtension_X1(tilegx_bundle_bits n)
-{
- return (((unsigned int)(n >> 51)) & 0xff);
-}
-
-static __inline unsigned int
-get_Imm8_X0(tilegx_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 12)) & 0xff);
-}
-
-static __inline unsigned int
-get_Imm8_X1(tilegx_bundle_bits n)
-{
- return (((unsigned int)(n >> 43)) & 0xff);
-}
-
-static __inline unsigned int
-get_Imm8_Y0(tilegx_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 12)) & 0xff);
-}
-
-static __inline unsigned int
-get_Imm8_Y1(tilegx_bundle_bits n)
-{
- return (((unsigned int)(n >> 43)) & 0xff);
-}
-
-static __inline unsigned int
-get_JumpOff_X1(tilegx_bundle_bits n)
-{
- return (((unsigned int)(n >> 31)) & 0x7ffffff);
-}
-
-static __inline unsigned int
-get_JumpOpcodeExtension_X1(tilegx_bundle_bits n)
-{
- return (((unsigned int)(n >> 58)) & 0x1);
-}
-
-static __inline unsigned int
-get_MF_Imm14_X1(tilegx_bundle_bits n)
-{
- return (((unsigned int)(n >> 37)) & 0x3fff);
-}
-
-static __inline unsigned int
-get_MT_Imm14_X1(tilegx_bundle_bits n)
-{
- return (((unsigned int)(n >> 31)) & 0x0000003f) |
- (((unsigned int)(n >> 37)) & 0x00003fc0);
-}
-
-static __inline unsigned int
-get_Mode(tilegx_bundle_bits n)
-{
- return (((unsigned int)(n >> 62)) & 0x3);
-}
-
-static __inline unsigned int
-get_Opcode_X0(tilegx_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 28)) & 0x7);
-}
-
-static __inline unsigned int
-get_Opcode_X1(tilegx_bundle_bits n)
-{
- return (((unsigned int)(n >> 59)) & 0x7);
-}
-
-static __inline unsigned int
-get_Opcode_Y0(tilegx_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 27)) & 0xf);
-}
-
-static __inline unsigned int
-get_Opcode_Y1(tilegx_bundle_bits n)
-{
- return (((unsigned int)(n >> 58)) & 0xf);
-}
-
-static __inline unsigned int
-get_Opcode_Y2(tilegx_bundle_bits n)
-{
- return (((n >> 26)) & 0x00000001) |
- (((unsigned int)(n >> 56)) & 0x00000002);
-}
-
-static __inline unsigned int
-get_RRROpcodeExtension_X0(tilegx_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 18)) & 0x3ff);
-}
-
-static __inline unsigned int
-get_RRROpcodeExtension_X1(tilegx_bundle_bits n)
-{
- return (((unsigned int)(n >> 49)) & 0x3ff);
-}
-
-static __inline unsigned int
-get_RRROpcodeExtension_Y0(tilegx_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 18)) & 0x3);
-}
-
-static __inline unsigned int
-get_RRROpcodeExtension_Y1(tilegx_bundle_bits n)
-{
- return (((unsigned int)(n >> 49)) & 0x3);
-}
-
-static __inline unsigned int
-get_ShAmt_X0(tilegx_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 12)) & 0x3f);
-}
-
-static __inline unsigned int
-get_ShAmt_X1(tilegx_bundle_bits n)
-{
- return (((unsigned int)(n >> 43)) & 0x3f);
-}
-
-static __inline unsigned int
-get_ShAmt_Y0(tilegx_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 12)) & 0x3f);
-}
-
-static __inline unsigned int
-get_ShAmt_Y1(tilegx_bundle_bits n)
-{
- return (((unsigned int)(n >> 43)) & 0x3f);
-}
-
-static __inline unsigned int
-get_ShiftOpcodeExtension_X0(tilegx_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 18)) & 0x3ff);
-}
-
-static __inline unsigned int
-get_ShiftOpcodeExtension_X1(tilegx_bundle_bits n)
-{
- return (((unsigned int)(n >> 49)) & 0x3ff);
-}
-
-static __inline unsigned int
-get_ShiftOpcodeExtension_Y0(tilegx_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 18)) & 0x3);
-}
-
-static __inline unsigned int
-get_ShiftOpcodeExtension_Y1(tilegx_bundle_bits n)
-{
- return (((unsigned int)(n >> 49)) & 0x3);
-}
-
-static __inline unsigned int
-get_SrcA_X0(tilegx_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 6)) & 0x3f);
-}
-
-static __inline unsigned int
-get_SrcA_X1(tilegx_bundle_bits n)
-{
- return (((unsigned int)(n >> 37)) & 0x3f);
-}
-
-static __inline unsigned int
-get_SrcA_Y0(tilegx_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 6)) & 0x3f);
-}
-
-static __inline unsigned int
-get_SrcA_Y1(tilegx_bundle_bits n)
-{
- return (((unsigned int)(n >> 37)) & 0x3f);
-}
-
-static __inline unsigned int
-get_SrcA_Y2(tilegx_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 20)) & 0x3f);
-}
-
-static __inline unsigned int
-get_SrcBDest_Y2(tilegx_bundle_bits n)
-{
- return (((unsigned int)(n >> 51)) & 0x3f);
-}
-
-static __inline unsigned int
-get_SrcB_X0(tilegx_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 12)) & 0x3f);
-}
-
-static __inline unsigned int
-get_SrcB_X1(tilegx_bundle_bits n)
-{
- return (((unsigned int)(n >> 43)) & 0x3f);
-}
-
-static __inline unsigned int
-get_SrcB_Y0(tilegx_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 12)) & 0x3f);
-}
-
-static __inline unsigned int
-get_SrcB_Y1(tilegx_bundle_bits n)
-{
- return (((unsigned int)(n >> 43)) & 0x3f);
-}
-
-static __inline unsigned int
-get_UnaryOpcodeExtension_X0(tilegx_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 12)) & 0x3f);
-}
-
-static __inline unsigned int
-get_UnaryOpcodeExtension_X1(tilegx_bundle_bits n)
-{
- return (((unsigned int)(n >> 43)) & 0x3f);
-}
-
-static __inline unsigned int
-get_UnaryOpcodeExtension_Y0(tilegx_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 12)) & 0x3f);
-}
-
-static __inline unsigned int
-get_UnaryOpcodeExtension_Y1(tilegx_bundle_bits n)
-{
- return (((unsigned int)(n >> 43)) & 0x3f);
-}
-
-
-static __inline int
-sign_extend(int n, int num_bits)
-{
- int shift = (int)(sizeof(int) * 8 - num_bits);
- return (n << shift) >> shift;
-}
-
-
-
-static __inline tilegx_bundle_bits
-create_BFEnd_X0(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0x3f) << 12);
-}
-
-static __inline tilegx_bundle_bits
-create_BFOpcodeExtension_X0(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0xf) << 24);
-}
-
-static __inline tilegx_bundle_bits
-create_BFStart_X0(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0x3f) << 18);
-}
-
-static __inline tilegx_bundle_bits
-create_BrOff_X1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilegx_bundle_bits)(n & 0x0000003f)) << 31) |
- (((tilegx_bundle_bits)(n & 0x0001ffc0)) << 37);
-}
-
-static __inline tilegx_bundle_bits
-create_BrType_X1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilegx_bundle_bits)(n & 0x1f)) << 54);
-}
-
-static __inline tilegx_bundle_bits
-create_Dest_Imm8_X1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilegx_bundle_bits)(n & 0x0000003f)) << 31) |
- (((tilegx_bundle_bits)(n & 0x000000c0)) << 43);
-}
-
-static __inline tilegx_bundle_bits
-create_Dest_X0(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0x3f) << 0);
-}
-
-static __inline tilegx_bundle_bits
-create_Dest_X1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilegx_bundle_bits)(n & 0x3f)) << 31);
-}
-
-static __inline tilegx_bundle_bits
-create_Dest_Y0(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0x3f) << 0);
-}
-
-static __inline tilegx_bundle_bits
-create_Dest_Y1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilegx_bundle_bits)(n & 0x3f)) << 31);
-}
-
-static __inline tilegx_bundle_bits
-create_Imm16_X0(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0xffff) << 12);
-}
-
-static __inline tilegx_bundle_bits
-create_Imm16_X1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilegx_bundle_bits)(n & 0xffff)) << 43);
-}
-
-static __inline tilegx_bundle_bits
-create_Imm8OpcodeExtension_X0(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0xff) << 20);
-}
-
-static __inline tilegx_bundle_bits
-create_Imm8OpcodeExtension_X1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilegx_bundle_bits)(n & 0xff)) << 51);
-}
-
-static __inline tilegx_bundle_bits
-create_Imm8_X0(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0xff) << 12);
-}
-
-static __inline tilegx_bundle_bits
-create_Imm8_X1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilegx_bundle_bits)(n & 0xff)) << 43);
-}
-
-static __inline tilegx_bundle_bits
-create_Imm8_Y0(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0xff) << 12);
-}
-
-static __inline tilegx_bundle_bits
-create_Imm8_Y1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilegx_bundle_bits)(n & 0xff)) << 43);
-}
-
-static __inline tilegx_bundle_bits
-create_JumpOff_X1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilegx_bundle_bits)(n & 0x7ffffff)) << 31);
-}
-
-static __inline tilegx_bundle_bits
-create_JumpOpcodeExtension_X1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilegx_bundle_bits)(n & 0x1)) << 58);
-}
-
-static __inline tilegx_bundle_bits
-create_MF_Imm14_X1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilegx_bundle_bits)(n & 0x3fff)) << 37);
-}
-
-static __inline tilegx_bundle_bits
-create_MT_Imm14_X1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilegx_bundle_bits)(n & 0x0000003f)) << 31) |
- (((tilegx_bundle_bits)(n & 0x00003fc0)) << 37);
-}
-
-static __inline tilegx_bundle_bits
-create_Mode(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilegx_bundle_bits)(n & 0x3)) << 62);
-}
-
-static __inline tilegx_bundle_bits
-create_Opcode_X0(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0x7) << 28);
-}
-
-static __inline tilegx_bundle_bits
-create_Opcode_X1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilegx_bundle_bits)(n & 0x7)) << 59);
-}
-
-static __inline tilegx_bundle_bits
-create_Opcode_Y0(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0xf) << 27);
-}
-
-static __inline tilegx_bundle_bits
-create_Opcode_Y1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilegx_bundle_bits)(n & 0xf)) << 58);
-}
-
-static __inline tilegx_bundle_bits
-create_Opcode_Y2(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0x00000001) << 26) |
- (((tilegx_bundle_bits)(n & 0x00000002)) << 56);
-}
-
-static __inline tilegx_bundle_bits
-create_RRROpcodeExtension_X0(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0x3ff) << 18);
-}
-
-static __inline tilegx_bundle_bits
-create_RRROpcodeExtension_X1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilegx_bundle_bits)(n & 0x3ff)) << 49);
-}
-
-static __inline tilegx_bundle_bits
-create_RRROpcodeExtension_Y0(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0x3) << 18);
-}
-
-static __inline tilegx_bundle_bits
-create_RRROpcodeExtension_Y1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilegx_bundle_bits)(n & 0x3)) << 49);
-}
-
-static __inline tilegx_bundle_bits
-create_ShAmt_X0(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0x3f) << 12);
-}
-
-static __inline tilegx_bundle_bits
-create_ShAmt_X1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilegx_bundle_bits)(n & 0x3f)) << 43);
-}
-
-static __inline tilegx_bundle_bits
-create_ShAmt_Y0(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0x3f) << 12);
-}
-
-static __inline tilegx_bundle_bits
-create_ShAmt_Y1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilegx_bundle_bits)(n & 0x3f)) << 43);
-}
-
-static __inline tilegx_bundle_bits
-create_ShiftOpcodeExtension_X0(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0x3ff) << 18);
-}
-
-static __inline tilegx_bundle_bits
-create_ShiftOpcodeExtension_X1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilegx_bundle_bits)(n & 0x3ff)) << 49);
-}
-
-static __inline tilegx_bundle_bits
-create_ShiftOpcodeExtension_Y0(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0x3) << 18);
-}
-
-static __inline tilegx_bundle_bits
-create_ShiftOpcodeExtension_Y1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilegx_bundle_bits)(n & 0x3)) << 49);
-}
-
-static __inline tilegx_bundle_bits
-create_SrcA_X0(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0x3f) << 6);
-}
-
-static __inline tilegx_bundle_bits
-create_SrcA_X1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilegx_bundle_bits)(n & 0x3f)) << 37);
-}
-
-static __inline tilegx_bundle_bits
-create_SrcA_Y0(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0x3f) << 6);
-}
-
-static __inline tilegx_bundle_bits
-create_SrcA_Y1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilegx_bundle_bits)(n & 0x3f)) << 37);
-}
-
-static __inline tilegx_bundle_bits
-create_SrcA_Y2(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0x3f) << 20);
-}
-
-static __inline tilegx_bundle_bits
-create_SrcBDest_Y2(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilegx_bundle_bits)(n & 0x3f)) << 51);
-}
-
-static __inline tilegx_bundle_bits
-create_SrcB_X0(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0x3f) << 12);
-}
-
-static __inline tilegx_bundle_bits
-create_SrcB_X1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilegx_bundle_bits)(n & 0x3f)) << 43);
-}
-
-static __inline tilegx_bundle_bits
-create_SrcB_Y0(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0x3f) << 12);
-}
-
-static __inline tilegx_bundle_bits
-create_SrcB_Y1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilegx_bundle_bits)(n & 0x3f)) << 43);
-}
-
-static __inline tilegx_bundle_bits
-create_UnaryOpcodeExtension_X0(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0x3f) << 12);
-}
-
-static __inline tilegx_bundle_bits
-create_UnaryOpcodeExtension_X1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilegx_bundle_bits)(n & 0x3f)) << 43);
-}
-
-static __inline tilegx_bundle_bits
-create_UnaryOpcodeExtension_Y0(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0x3f) << 12);
-}
-
-static __inline tilegx_bundle_bits
-create_UnaryOpcodeExtension_Y1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilegx_bundle_bits)(n & 0x3f)) << 43);
-}
-
-
-typedef enum
-{
- TILEGX_PIPELINE_X0,
- TILEGX_PIPELINE_X1,
- TILEGX_PIPELINE_Y0,
- TILEGX_PIPELINE_Y1,
- TILEGX_PIPELINE_Y2,
-} tilegx_pipeline;
-
-#define tilegx_is_x_pipeline(p) ((int)(p) <= (int)TILEGX_PIPELINE_X1)
-
-typedef enum
-{
- TILEGX_OP_TYPE_REGISTER,
- TILEGX_OP_TYPE_IMMEDIATE,
- TILEGX_OP_TYPE_ADDRESS,
- TILEGX_OP_TYPE_SPR
-} tilegx_operand_type;
-
-/* These are the bits that determine if a bundle is in the X encoding. */
-#define TILEGX_BUNDLE_MODE_MASK ((tilegx_bundle_bits)3 << 62)
-
-enum
-{
- /* Maximum number of instructions in a bundle (2 for X, 3 for Y). */
- TILEGX_MAX_INSTRUCTIONS_PER_BUNDLE = 3,
-
- /* How many different pipeline encodings are there? X0, X1, Y0, Y1, Y2. */
- TILEGX_NUM_PIPELINE_ENCODINGS = 5,
-
- /* Log base 2 of TILEGX_BUNDLE_SIZE_IN_BYTES. */
- TILEGX_LOG2_BUNDLE_SIZE_IN_BYTES = 3,
-
- /* Instructions take this many bytes. */
- TILEGX_BUNDLE_SIZE_IN_BYTES = 1 << TILEGX_LOG2_BUNDLE_SIZE_IN_BYTES,
-
- /* Log base 2 of TILEGX_BUNDLE_ALIGNMENT_IN_BYTES. */
- TILEGX_LOG2_BUNDLE_ALIGNMENT_IN_BYTES = 3,
-
- /* Bundles should be aligned modulo this number of bytes. */
- TILEGX_BUNDLE_ALIGNMENT_IN_BYTES =
- (1 << TILEGX_LOG2_BUNDLE_ALIGNMENT_IN_BYTES),
-
- /* Number of registers (some are magic, such as network I/O). */
- TILEGX_NUM_REGISTERS = 64,
-};
-
-
-struct tilegx_operand
-{
- /* Is this operand a register, immediate or address? */
- tilegx_operand_type type;
-
- /* The default relocation type for this operand. */
- signed int default_reloc : 16;
-
- /* How many bits is this value? (used for range checking) */
- unsigned int num_bits : 5;
-
- /* Is the value signed? (used for range checking) */
- unsigned int is_signed : 1;
-
- /* Is this operand a source register? */
- unsigned int is_src_reg : 1;
-
- /* Is this operand written? (i.e. is it a destination register) */
- unsigned int is_dest_reg : 1;
-
- /* Is this operand PC-relative? */
- unsigned int is_pc_relative : 1;
-
- /* By how many bits do we right shift the value before inserting? */
- unsigned int rightshift : 2;
-
- /* Return the bits for this operand to be ORed into an existing bundle. */
- tilegx_bundle_bits (*insert) (int op);
-
- /* Extract this operand and return it. */
- unsigned int (*extract) (tilegx_bundle_bits bundle);
-};
-
-
-extern const struct tilegx_operand tilegx_operands[];
-
-/* One finite-state machine per pipe for rapid instruction decoding. */
-extern const unsigned short * const
-tilegx_bundle_decoder_fsms[TILEGX_NUM_PIPELINE_ENCODINGS];
-
-
-struct tilegx_opcode
-{
- /* The opcode mnemonic, e.g. "add" */
- const char *name;
-
- /* The enum value for this mnemonic. */
- tilegx_mnemonic mnemonic;
-
- /* A bit mask of which of the five pipes this instruction
- is compatible with:
- X0 0x01
- X1 0x02
- Y0 0x04
- Y1 0x08
- Y2 0x10 */
- unsigned char pipes;
-
- /* How many operands are there? */
- unsigned char num_operands;
-
- /* Which register does this write implicitly, or TREG_ZERO if none? */
- unsigned char implicitly_written_register;
-
- /* Can this be bundled with other instructions (almost always true). */
- unsigned char can_bundle;
-
- /* The description of the operands. Each of these is an
- * index into the tilegx_operands[] table. */
- unsigned char operands[TILEGX_NUM_PIPELINE_ENCODINGS][TILEGX_MAX_OPERANDS];
-
-#if !defined(__KERNEL__) && !defined(_LIBC)
- /* A mask of which bits have predefined values for each pipeline.
- * This is useful for disassembly. */
- tilegx_bundle_bits fixed_bit_masks[TILEGX_NUM_PIPELINE_ENCODINGS];
-
- /* For each bit set in fixed_bit_masks, what the value is for this
- * instruction. */
- tilegx_bundle_bits fixed_bit_values[TILEGX_NUM_PIPELINE_ENCODINGS];
-#endif
-};
-
-extern const struct tilegx_opcode tilegx_opcodes[];
-
-/* Used for non-textual disassembly into structs. */
-struct tilegx_decoded_instruction
-{
- const struct tilegx_opcode *opcode;
- const struct tilegx_operand *operands[TILEGX_MAX_OPERANDS];
- long long operand_values[TILEGX_MAX_OPERANDS];
-};
-
-
-/* Disassemble a bundle into a struct for machine processing. */
-extern int parse_insn_tilegx(tilegx_bundle_bits bits,
- unsigned long long pc,
- struct tilegx_decoded_instruction
- decoded[TILEGX_MAX_INSTRUCTIONS_PER_BUNDLE]);
-
-
-#if !defined(__KERNEL__) && !defined(_LIBC)
-/* Canonical names of all the registers. */
-/* ISSUE: This table lives in "tile-dis.c" */
-extern const char * const tilegx_register_names[];
-
-/* Descriptor for a special-purpose register. */
-struct tilegx_spr
-{
- /* The number */
- int number;
-
- /* The name */
- const char *name;
-};
-
-/* List of all the SPRs; ordered by increasing number. */
-extern const struct tilegx_spr tilegx_sprs[];
-
-/* Number of special-purpose registers. */
-extern const int tilegx_num_sprs;
-
-extern const char *
-get_tilegx_spr_name (int num);
-#endif /* !__KERNEL__ && !_LIBC */
-
-/* Make a few "tile_" variables to simply common code between
- architectures. */
-
-typedef tilegx_bundle_bits tile_bundle_bits;
-#define TILE_BUNDLE_SIZE_IN_BYTES TILEGX_BUNDLE_SIZE_IN_BYTES
-#define TILE_BUNDLE_ALIGNMENT_IN_BYTES TILEGX_BUNDLE_ALIGNMENT_IN_BYTES
-#define TILE_LOG2_BUNDLE_ALIGNMENT_IN_BYTES \
- TILEGX_LOG2_BUNDLE_ALIGNMENT_IN_BYTES
-
-#endif /* opcode_tilegx_h */
diff --git a/include/opcode/tilepro.h b/include/opcode/tilepro.h
deleted file mode 100644
index 767926bda..000000000
--- a/include/opcode/tilepro.h
+++ /dev/null
@@ -1,1638 +0,0 @@
-/* TILEPro opcode information.
- *
- * Copyright 2011 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#ifndef opcode_tilepro_h
-#define opcode_tilepro_h
-
-typedef unsigned long long tilepro_bundle_bits;
-
-
-enum
-{
- TILEPRO_MAX_OPERANDS = 5 /* mm */
-};
-
-typedef enum
-{
- TILEPRO_OPC_BPT,
- TILEPRO_OPC_INFO,
- TILEPRO_OPC_INFOL,
- TILEPRO_OPC_J,
- TILEPRO_OPC_JAL,
- TILEPRO_OPC_LW_TLS,
- TILEPRO_OPC_LW_TLS_SN,
- TILEPRO_OPC_MOVE,
- TILEPRO_OPC_MOVE_SN,
- TILEPRO_OPC_MOVEI,
- TILEPRO_OPC_MOVEI_SN,
- TILEPRO_OPC_MOVELI,
- TILEPRO_OPC_MOVELI_SN,
- TILEPRO_OPC_MOVELIS,
- TILEPRO_OPC_PREFETCH,
- TILEPRO_OPC_RAISE,
- TILEPRO_OPC_ADD,
- TILEPRO_OPC_ADD_SN,
- TILEPRO_OPC_ADDB,
- TILEPRO_OPC_ADDB_SN,
- TILEPRO_OPC_ADDBS_U,
- TILEPRO_OPC_ADDBS_U_SN,
- TILEPRO_OPC_ADDH,
- TILEPRO_OPC_ADDH_SN,
- TILEPRO_OPC_ADDHS,
- TILEPRO_OPC_ADDHS_SN,
- TILEPRO_OPC_ADDI,
- TILEPRO_OPC_ADDI_SN,
- TILEPRO_OPC_ADDIB,
- TILEPRO_OPC_ADDIB_SN,
- TILEPRO_OPC_ADDIH,
- TILEPRO_OPC_ADDIH_SN,
- TILEPRO_OPC_ADDLI,
- TILEPRO_OPC_ADDLI_SN,
- TILEPRO_OPC_ADDLIS,
- TILEPRO_OPC_ADDS,
- TILEPRO_OPC_ADDS_SN,
- TILEPRO_OPC_ADIFFB_U,
- TILEPRO_OPC_ADIFFB_U_SN,
- TILEPRO_OPC_ADIFFH,
- TILEPRO_OPC_ADIFFH_SN,
- TILEPRO_OPC_AND,
- TILEPRO_OPC_AND_SN,
- TILEPRO_OPC_ANDI,
- TILEPRO_OPC_ANDI_SN,
- TILEPRO_OPC_AULI,
- TILEPRO_OPC_AVGB_U,
- TILEPRO_OPC_AVGB_U_SN,
- TILEPRO_OPC_AVGH,
- TILEPRO_OPC_AVGH_SN,
- TILEPRO_OPC_BBNS,
- TILEPRO_OPC_BBNS_SN,
- TILEPRO_OPC_BBNST,
- TILEPRO_OPC_BBNST_SN,
- TILEPRO_OPC_BBS,
- TILEPRO_OPC_BBS_SN,
- TILEPRO_OPC_BBST,
- TILEPRO_OPC_BBST_SN,
- TILEPRO_OPC_BGEZ,
- TILEPRO_OPC_BGEZ_SN,
- TILEPRO_OPC_BGEZT,
- TILEPRO_OPC_BGEZT_SN,
- TILEPRO_OPC_BGZ,
- TILEPRO_OPC_BGZ_SN,
- TILEPRO_OPC_BGZT,
- TILEPRO_OPC_BGZT_SN,
- TILEPRO_OPC_BITX,
- TILEPRO_OPC_BITX_SN,
- TILEPRO_OPC_BLEZ,
- TILEPRO_OPC_BLEZ_SN,
- TILEPRO_OPC_BLEZT,
- TILEPRO_OPC_BLEZT_SN,
- TILEPRO_OPC_BLZ,
- TILEPRO_OPC_BLZ_SN,
- TILEPRO_OPC_BLZT,
- TILEPRO_OPC_BLZT_SN,
- TILEPRO_OPC_BNZ,
- TILEPRO_OPC_BNZ_SN,
- TILEPRO_OPC_BNZT,
- TILEPRO_OPC_BNZT_SN,
- TILEPRO_OPC_BYTEX,
- TILEPRO_OPC_BYTEX_SN,
- TILEPRO_OPC_BZ,
- TILEPRO_OPC_BZ_SN,
- TILEPRO_OPC_BZT,
- TILEPRO_OPC_BZT_SN,
- TILEPRO_OPC_CLZ,
- TILEPRO_OPC_CLZ_SN,
- TILEPRO_OPC_CRC32_32,
- TILEPRO_OPC_CRC32_32_SN,
- TILEPRO_OPC_CRC32_8,
- TILEPRO_OPC_CRC32_8_SN,
- TILEPRO_OPC_CTZ,
- TILEPRO_OPC_CTZ_SN,
- TILEPRO_OPC_DRAIN,
- TILEPRO_OPC_DTLBPR,
- TILEPRO_OPC_DWORD_ALIGN,
- TILEPRO_OPC_DWORD_ALIGN_SN,
- TILEPRO_OPC_FINV,
- TILEPRO_OPC_FLUSH,
- TILEPRO_OPC_FNOP,
- TILEPRO_OPC_ICOH,
- TILEPRO_OPC_ILL,
- TILEPRO_OPC_INTHB,
- TILEPRO_OPC_INTHB_SN,
- TILEPRO_OPC_INTHH,
- TILEPRO_OPC_INTHH_SN,
- TILEPRO_OPC_INTLB,
- TILEPRO_OPC_INTLB_SN,
- TILEPRO_OPC_INTLH,
- TILEPRO_OPC_INTLH_SN,
- TILEPRO_OPC_INV,
- TILEPRO_OPC_IRET,
- TILEPRO_OPC_JALB,
- TILEPRO_OPC_JALF,
- TILEPRO_OPC_JALR,
- TILEPRO_OPC_JALRP,
- TILEPRO_OPC_JB,
- TILEPRO_OPC_JF,
- TILEPRO_OPC_JR,
- TILEPRO_OPC_JRP,
- TILEPRO_OPC_LB,
- TILEPRO_OPC_LB_SN,
- TILEPRO_OPC_LB_U,
- TILEPRO_OPC_LB_U_SN,
- TILEPRO_OPC_LBADD,
- TILEPRO_OPC_LBADD_SN,
- TILEPRO_OPC_LBADD_U,
- TILEPRO_OPC_LBADD_U_SN,
- TILEPRO_OPC_LH,
- TILEPRO_OPC_LH_SN,
- TILEPRO_OPC_LH_U,
- TILEPRO_OPC_LH_U_SN,
- TILEPRO_OPC_LHADD,
- TILEPRO_OPC_LHADD_SN,
- TILEPRO_OPC_LHADD_U,
- TILEPRO_OPC_LHADD_U_SN,
- TILEPRO_OPC_LNK,
- TILEPRO_OPC_LNK_SN,
- TILEPRO_OPC_LW,
- TILEPRO_OPC_LW_SN,
- TILEPRO_OPC_LW_NA,
- TILEPRO_OPC_LW_NA_SN,
- TILEPRO_OPC_LWADD,
- TILEPRO_OPC_LWADD_SN,
- TILEPRO_OPC_LWADD_NA,
- TILEPRO_OPC_LWADD_NA_SN,
- TILEPRO_OPC_MAXB_U,
- TILEPRO_OPC_MAXB_U_SN,
- TILEPRO_OPC_MAXH,
- TILEPRO_OPC_MAXH_SN,
- TILEPRO_OPC_MAXIB_U,
- TILEPRO_OPC_MAXIB_U_SN,
- TILEPRO_OPC_MAXIH,
- TILEPRO_OPC_MAXIH_SN,
- TILEPRO_OPC_MF,
- TILEPRO_OPC_MFSPR,
- TILEPRO_OPC_MINB_U,
- TILEPRO_OPC_MINB_U_SN,
- TILEPRO_OPC_MINH,
- TILEPRO_OPC_MINH_SN,
- TILEPRO_OPC_MINIB_U,
- TILEPRO_OPC_MINIB_U_SN,
- TILEPRO_OPC_MINIH,
- TILEPRO_OPC_MINIH_SN,
- TILEPRO_OPC_MM,
- TILEPRO_OPC_MNZ,
- TILEPRO_OPC_MNZ_SN,
- TILEPRO_OPC_MNZB,
- TILEPRO_OPC_MNZB_SN,
- TILEPRO_OPC_MNZH,
- TILEPRO_OPC_MNZH_SN,
- TILEPRO_OPC_MTSPR,
- TILEPRO_OPC_MULHH_SS,
- TILEPRO_OPC_MULHH_SS_SN,
- TILEPRO_OPC_MULHH_SU,
- TILEPRO_OPC_MULHH_SU_SN,
- TILEPRO_OPC_MULHH_UU,
- TILEPRO_OPC_MULHH_UU_SN,
- TILEPRO_OPC_MULHHA_SS,
- TILEPRO_OPC_MULHHA_SS_SN,
- TILEPRO_OPC_MULHHA_SU,
- TILEPRO_OPC_MULHHA_SU_SN,
- TILEPRO_OPC_MULHHA_UU,
- TILEPRO_OPC_MULHHA_UU_SN,
- TILEPRO_OPC_MULHHSA_UU,
- TILEPRO_OPC_MULHHSA_UU_SN,
- TILEPRO_OPC_MULHL_SS,
- TILEPRO_OPC_MULHL_SS_SN,
- TILEPRO_OPC_MULHL_SU,
- TILEPRO_OPC_MULHL_SU_SN,
- TILEPRO_OPC_MULHL_US,
- TILEPRO_OPC_MULHL_US_SN,
- TILEPRO_OPC_MULHL_UU,
- TILEPRO_OPC_MULHL_UU_SN,
- TILEPRO_OPC_MULHLA_SS,
- TILEPRO_OPC_MULHLA_SS_SN,
- TILEPRO_OPC_MULHLA_SU,
- TILEPRO_OPC_MULHLA_SU_SN,
- TILEPRO_OPC_MULHLA_US,
- TILEPRO_OPC_MULHLA_US_SN,
- TILEPRO_OPC_MULHLA_UU,
- TILEPRO_OPC_MULHLA_UU_SN,
- TILEPRO_OPC_MULHLSA_UU,
- TILEPRO_OPC_MULHLSA_UU_SN,
- TILEPRO_OPC_MULLL_SS,
- TILEPRO_OPC_MULLL_SS_SN,
- TILEPRO_OPC_MULLL_SU,
- TILEPRO_OPC_MULLL_SU_SN,
- TILEPRO_OPC_MULLL_UU,
- TILEPRO_OPC_MULLL_UU_SN,
- TILEPRO_OPC_MULLLA_SS,
- TILEPRO_OPC_MULLLA_SS_SN,
- TILEPRO_OPC_MULLLA_SU,
- TILEPRO_OPC_MULLLA_SU_SN,
- TILEPRO_OPC_MULLLA_UU,
- TILEPRO_OPC_MULLLA_UU_SN,
- TILEPRO_OPC_MULLLSA_UU,
- TILEPRO_OPC_MULLLSA_UU_SN,
- TILEPRO_OPC_MVNZ,
- TILEPRO_OPC_MVNZ_SN,
- TILEPRO_OPC_MVZ,
- TILEPRO_OPC_MVZ_SN,
- TILEPRO_OPC_MZ,
- TILEPRO_OPC_MZ_SN,
- TILEPRO_OPC_MZB,
- TILEPRO_OPC_MZB_SN,
- TILEPRO_OPC_MZH,
- TILEPRO_OPC_MZH_SN,
- TILEPRO_OPC_NAP,
- TILEPRO_OPC_NOP,
- TILEPRO_OPC_NOR,
- TILEPRO_OPC_NOR_SN,
- TILEPRO_OPC_OR,
- TILEPRO_OPC_OR_SN,
- TILEPRO_OPC_ORI,
- TILEPRO_OPC_ORI_SN,
- TILEPRO_OPC_PACKBS_U,
- TILEPRO_OPC_PACKBS_U_SN,
- TILEPRO_OPC_PACKHB,
- TILEPRO_OPC_PACKHB_SN,
- TILEPRO_OPC_PACKHS,
- TILEPRO_OPC_PACKHS_SN,
- TILEPRO_OPC_PACKLB,
- TILEPRO_OPC_PACKLB_SN,
- TILEPRO_OPC_PCNT,
- TILEPRO_OPC_PCNT_SN,
- TILEPRO_OPC_RL,
- TILEPRO_OPC_RL_SN,
- TILEPRO_OPC_RLI,
- TILEPRO_OPC_RLI_SN,
- TILEPRO_OPC_S1A,
- TILEPRO_OPC_S1A_SN,
- TILEPRO_OPC_S2A,
- TILEPRO_OPC_S2A_SN,
- TILEPRO_OPC_S3A,
- TILEPRO_OPC_S3A_SN,
- TILEPRO_OPC_SADAB_U,
- TILEPRO_OPC_SADAB_U_SN,
- TILEPRO_OPC_SADAH,
- TILEPRO_OPC_SADAH_SN,
- TILEPRO_OPC_SADAH_U,
- TILEPRO_OPC_SADAH_U_SN,
- TILEPRO_OPC_SADB_U,
- TILEPRO_OPC_SADB_U_SN,
- TILEPRO_OPC_SADH,
- TILEPRO_OPC_SADH_SN,
- TILEPRO_OPC_SADH_U,
- TILEPRO_OPC_SADH_U_SN,
- TILEPRO_OPC_SB,
- TILEPRO_OPC_SBADD,
- TILEPRO_OPC_SEQ,
- TILEPRO_OPC_SEQ_SN,
- TILEPRO_OPC_SEQB,
- TILEPRO_OPC_SEQB_SN,
- TILEPRO_OPC_SEQH,
- TILEPRO_OPC_SEQH_SN,
- TILEPRO_OPC_SEQI,
- TILEPRO_OPC_SEQI_SN,
- TILEPRO_OPC_SEQIB,
- TILEPRO_OPC_SEQIB_SN,
- TILEPRO_OPC_SEQIH,
- TILEPRO_OPC_SEQIH_SN,
- TILEPRO_OPC_SH,
- TILEPRO_OPC_SHADD,
- TILEPRO_OPC_SHL,
- TILEPRO_OPC_SHL_SN,
- TILEPRO_OPC_SHLB,
- TILEPRO_OPC_SHLB_SN,
- TILEPRO_OPC_SHLH,
- TILEPRO_OPC_SHLH_SN,
- TILEPRO_OPC_SHLI,
- TILEPRO_OPC_SHLI_SN,
- TILEPRO_OPC_SHLIB,
- TILEPRO_OPC_SHLIB_SN,
- TILEPRO_OPC_SHLIH,
- TILEPRO_OPC_SHLIH_SN,
- TILEPRO_OPC_SHR,
- TILEPRO_OPC_SHR_SN,
- TILEPRO_OPC_SHRB,
- TILEPRO_OPC_SHRB_SN,
- TILEPRO_OPC_SHRH,
- TILEPRO_OPC_SHRH_SN,
- TILEPRO_OPC_SHRI,
- TILEPRO_OPC_SHRI_SN,
- TILEPRO_OPC_SHRIB,
- TILEPRO_OPC_SHRIB_SN,
- TILEPRO_OPC_SHRIH,
- TILEPRO_OPC_SHRIH_SN,
- TILEPRO_OPC_SLT,
- TILEPRO_OPC_SLT_SN,
- TILEPRO_OPC_SLT_U,
- TILEPRO_OPC_SLT_U_SN,
- TILEPRO_OPC_SLTB,
- TILEPRO_OPC_SLTB_SN,
- TILEPRO_OPC_SLTB_U,
- TILEPRO_OPC_SLTB_U_SN,
- TILEPRO_OPC_SLTE,
- TILEPRO_OPC_SLTE_SN,
- TILEPRO_OPC_SLTE_U,
- TILEPRO_OPC_SLTE_U_SN,
- TILEPRO_OPC_SLTEB,
- TILEPRO_OPC_SLTEB_SN,
- TILEPRO_OPC_SLTEB_U,
- TILEPRO_OPC_SLTEB_U_SN,
- TILEPRO_OPC_SLTEH,
- TILEPRO_OPC_SLTEH_SN,
- TILEPRO_OPC_SLTEH_U,
- TILEPRO_OPC_SLTEH_U_SN,
- TILEPRO_OPC_SLTH,
- TILEPRO_OPC_SLTH_SN,
- TILEPRO_OPC_SLTH_U,
- TILEPRO_OPC_SLTH_U_SN,
- TILEPRO_OPC_SLTI,
- TILEPRO_OPC_SLTI_SN,
- TILEPRO_OPC_SLTI_U,
- TILEPRO_OPC_SLTI_U_SN,
- TILEPRO_OPC_SLTIB,
- TILEPRO_OPC_SLTIB_SN,
- TILEPRO_OPC_SLTIB_U,
- TILEPRO_OPC_SLTIB_U_SN,
- TILEPRO_OPC_SLTIH,
- TILEPRO_OPC_SLTIH_SN,
- TILEPRO_OPC_SLTIH_U,
- TILEPRO_OPC_SLTIH_U_SN,
- TILEPRO_OPC_SNE,
- TILEPRO_OPC_SNE_SN,
- TILEPRO_OPC_SNEB,
- TILEPRO_OPC_SNEB_SN,
- TILEPRO_OPC_SNEH,
- TILEPRO_OPC_SNEH_SN,
- TILEPRO_OPC_SRA,
- TILEPRO_OPC_SRA_SN,
- TILEPRO_OPC_SRAB,
- TILEPRO_OPC_SRAB_SN,
- TILEPRO_OPC_SRAH,
- TILEPRO_OPC_SRAH_SN,
- TILEPRO_OPC_SRAI,
- TILEPRO_OPC_SRAI_SN,
- TILEPRO_OPC_SRAIB,
- TILEPRO_OPC_SRAIB_SN,
- TILEPRO_OPC_SRAIH,
- TILEPRO_OPC_SRAIH_SN,
- TILEPRO_OPC_SUB,
- TILEPRO_OPC_SUB_SN,
- TILEPRO_OPC_SUBB,
- TILEPRO_OPC_SUBB_SN,
- TILEPRO_OPC_SUBBS_U,
- TILEPRO_OPC_SUBBS_U_SN,
- TILEPRO_OPC_SUBH,
- TILEPRO_OPC_SUBH_SN,
- TILEPRO_OPC_SUBHS,
- TILEPRO_OPC_SUBHS_SN,
- TILEPRO_OPC_SUBS,
- TILEPRO_OPC_SUBS_SN,
- TILEPRO_OPC_SW,
- TILEPRO_OPC_SWADD,
- TILEPRO_OPC_SWINT0,
- TILEPRO_OPC_SWINT1,
- TILEPRO_OPC_SWINT2,
- TILEPRO_OPC_SWINT3,
- TILEPRO_OPC_TBLIDXB0,
- TILEPRO_OPC_TBLIDXB0_SN,
- TILEPRO_OPC_TBLIDXB1,
- TILEPRO_OPC_TBLIDXB1_SN,
- TILEPRO_OPC_TBLIDXB2,
- TILEPRO_OPC_TBLIDXB2_SN,
- TILEPRO_OPC_TBLIDXB3,
- TILEPRO_OPC_TBLIDXB3_SN,
- TILEPRO_OPC_TNS,
- TILEPRO_OPC_TNS_SN,
- TILEPRO_OPC_WH64,
- TILEPRO_OPC_XOR,
- TILEPRO_OPC_XOR_SN,
- TILEPRO_OPC_XORI,
- TILEPRO_OPC_XORI_SN,
- TILEPRO_OPC_NONE
-} tilepro_mnemonic;
-
-/* 64-bit pattern for a { bpt ; nop } bundle. */
-#define TILEPRO_BPT_BUNDLE 0x400b3cae70166000ULL
-
-#ifndef DISASM_ONLY
-
-enum
-{
- TILEPRO_SN_MAX_OPERANDS = 6 /* route */
-};
-
-typedef enum
-{
- TILEPRO_SN_OPC_BZ,
- TILEPRO_SN_OPC_BNZ,
- TILEPRO_SN_OPC_JRR,
- TILEPRO_SN_OPC_FNOP,
- TILEPRO_SN_OPC_BLZ,
- TILEPRO_SN_OPC_NOP,
- TILEPRO_SN_OPC_MOVEI,
- TILEPRO_SN_OPC_MOVE,
- TILEPRO_SN_OPC_BGEZ,
- TILEPRO_SN_OPC_JR,
- TILEPRO_SN_OPC_BLEZ,
- TILEPRO_SN_OPC_BBNS,
- TILEPRO_SN_OPC_JALRR,
- TILEPRO_SN_OPC_BPT,
- TILEPRO_SN_OPC_JALR,
- TILEPRO_SN_OPC_SHR1,
- TILEPRO_SN_OPC_BGZ,
- TILEPRO_SN_OPC_BBS,
- TILEPRO_SN_OPC_SHL8II,
- TILEPRO_SN_OPC_ADDI,
- TILEPRO_SN_OPC_HALT,
- TILEPRO_SN_OPC_ROUTE,
- TILEPRO_SN_OPC_NONE
-} tilepro_sn_mnemonic;
-
-extern const unsigned char tilepro_sn_route_encode[6 * 6 * 6];
-extern const signed char tilepro_sn_route_decode[256][3];
-extern const char tilepro_sn_direction_names[6][5];
-extern const signed char tilepro_sn_dest_map[6][6];
-#endif /* DISASM_ONLY */
-
-
-static __inline unsigned int
-get_BrOff_SN(tilepro_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 0)) & 0x3ff);
-}
-
-static __inline unsigned int
-get_BrOff_X1(tilepro_bundle_bits n)
-{
- return (((unsigned int)(n >> 43)) & 0x00007fff) |
- (((unsigned int)(n >> 20)) & 0x00018000);
-}
-
-static __inline unsigned int
-get_BrType_X1(tilepro_bundle_bits n)
-{
- return (((unsigned int)(n >> 31)) & 0xf);
-}
-
-static __inline unsigned int
-get_Dest_Imm8_X1(tilepro_bundle_bits n)
-{
- return (((unsigned int)(n >> 31)) & 0x0000003f) |
- (((unsigned int)(n >> 43)) & 0x000000c0);
-}
-
-static __inline unsigned int
-get_Dest_SN(tilepro_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 2)) & 0x3);
-}
-
-static __inline unsigned int
-get_Dest_X0(tilepro_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 0)) & 0x3f);
-}
-
-static __inline unsigned int
-get_Dest_X1(tilepro_bundle_bits n)
-{
- return (((unsigned int)(n >> 31)) & 0x3f);
-}
-
-static __inline unsigned int
-get_Dest_Y0(tilepro_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 0)) & 0x3f);
-}
-
-static __inline unsigned int
-get_Dest_Y1(tilepro_bundle_bits n)
-{
- return (((unsigned int)(n >> 31)) & 0x3f);
-}
-
-static __inline unsigned int
-get_Imm16_X0(tilepro_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 12)) & 0xffff);
-}
-
-static __inline unsigned int
-get_Imm16_X1(tilepro_bundle_bits n)
-{
- return (((unsigned int)(n >> 43)) & 0xffff);
-}
-
-static __inline unsigned int
-get_Imm8_SN(tilepro_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 0)) & 0xff);
-}
-
-static __inline unsigned int
-get_Imm8_X0(tilepro_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 12)) & 0xff);
-}
-
-static __inline unsigned int
-get_Imm8_X1(tilepro_bundle_bits n)
-{
- return (((unsigned int)(n >> 43)) & 0xff);
-}
-
-static __inline unsigned int
-get_Imm8_Y0(tilepro_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 12)) & 0xff);
-}
-
-static __inline unsigned int
-get_Imm8_Y1(tilepro_bundle_bits n)
-{
- return (((unsigned int)(n >> 43)) & 0xff);
-}
-
-static __inline unsigned int
-get_ImmOpcodeExtension_X0(tilepro_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 20)) & 0x7f);
-}
-
-static __inline unsigned int
-get_ImmOpcodeExtension_X1(tilepro_bundle_bits n)
-{
- return (((unsigned int)(n >> 51)) & 0x7f);
-}
-
-static __inline unsigned int
-get_ImmRROpcodeExtension_SN(tilepro_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 8)) & 0x3);
-}
-
-static __inline unsigned int
-get_JOffLong_X1(tilepro_bundle_bits n)
-{
- return (((unsigned int)(n >> 43)) & 0x00007fff) |
- (((unsigned int)(n >> 20)) & 0x00018000) |
- (((unsigned int)(n >> 14)) & 0x001e0000) |
- (((unsigned int)(n >> 16)) & 0x07e00000) |
- (((unsigned int)(n >> 31)) & 0x18000000);
-}
-
-static __inline unsigned int
-get_JOff_X1(tilepro_bundle_bits n)
-{
- return (((unsigned int)(n >> 43)) & 0x00007fff) |
- (((unsigned int)(n >> 20)) & 0x00018000) |
- (((unsigned int)(n >> 14)) & 0x001e0000) |
- (((unsigned int)(n >> 16)) & 0x07e00000) |
- (((unsigned int)(n >> 31)) & 0x08000000);
-}
-
-static __inline unsigned int
-get_MF_Imm15_X1(tilepro_bundle_bits n)
-{
- return (((unsigned int)(n >> 37)) & 0x00003fff) |
- (((unsigned int)(n >> 44)) & 0x00004000);
-}
-
-static __inline unsigned int
-get_MMEnd_X0(tilepro_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 18)) & 0x1f);
-}
-
-static __inline unsigned int
-get_MMEnd_X1(tilepro_bundle_bits n)
-{
- return (((unsigned int)(n >> 49)) & 0x1f);
-}
-
-static __inline unsigned int
-get_MMStart_X0(tilepro_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 23)) & 0x1f);
-}
-
-static __inline unsigned int
-get_MMStart_X1(tilepro_bundle_bits n)
-{
- return (((unsigned int)(n >> 54)) & 0x1f);
-}
-
-static __inline unsigned int
-get_MT_Imm15_X1(tilepro_bundle_bits n)
-{
- return (((unsigned int)(n >> 31)) & 0x0000003f) |
- (((unsigned int)(n >> 37)) & 0x00003fc0) |
- (((unsigned int)(n >> 44)) & 0x00004000);
-}
-
-static __inline unsigned int
-get_Mode(tilepro_bundle_bits n)
-{
- return (((unsigned int)(n >> 63)) & 0x1);
-}
-
-static __inline unsigned int
-get_NoRegOpcodeExtension_SN(tilepro_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 0)) & 0xf);
-}
-
-static __inline unsigned int
-get_Opcode_SN(tilepro_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 10)) & 0x3f);
-}
-
-static __inline unsigned int
-get_Opcode_X0(tilepro_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 28)) & 0x7);
-}
-
-static __inline unsigned int
-get_Opcode_X1(tilepro_bundle_bits n)
-{
- return (((unsigned int)(n >> 59)) & 0xf);
-}
-
-static __inline unsigned int
-get_Opcode_Y0(tilepro_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 27)) & 0xf);
-}
-
-static __inline unsigned int
-get_Opcode_Y1(tilepro_bundle_bits n)
-{
- return (((unsigned int)(n >> 59)) & 0xf);
-}
-
-static __inline unsigned int
-get_Opcode_Y2(tilepro_bundle_bits n)
-{
- return (((unsigned int)(n >> 56)) & 0x7);
-}
-
-static __inline unsigned int
-get_RROpcodeExtension_SN(tilepro_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 4)) & 0xf);
-}
-
-static __inline unsigned int
-get_RRROpcodeExtension_X0(tilepro_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 18)) & 0x1ff);
-}
-
-static __inline unsigned int
-get_RRROpcodeExtension_X1(tilepro_bundle_bits n)
-{
- return (((unsigned int)(n >> 49)) & 0x1ff);
-}
-
-static __inline unsigned int
-get_RRROpcodeExtension_Y0(tilepro_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 18)) & 0x3);
-}
-
-static __inline unsigned int
-get_RRROpcodeExtension_Y1(tilepro_bundle_bits n)
-{
- return (((unsigned int)(n >> 49)) & 0x3);
-}
-
-static __inline unsigned int
-get_RouteOpcodeExtension_SN(tilepro_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 0)) & 0x3ff);
-}
-
-static __inline unsigned int
-get_S_X0(tilepro_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 27)) & 0x1);
-}
-
-static __inline unsigned int
-get_S_X1(tilepro_bundle_bits n)
-{
- return (((unsigned int)(n >> 58)) & 0x1);
-}
-
-static __inline unsigned int
-get_ShAmt_X0(tilepro_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 12)) & 0x1f);
-}
-
-static __inline unsigned int
-get_ShAmt_X1(tilepro_bundle_bits n)
-{
- return (((unsigned int)(n >> 43)) & 0x1f);
-}
-
-static __inline unsigned int
-get_ShAmt_Y0(tilepro_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 12)) & 0x1f);
-}
-
-static __inline unsigned int
-get_ShAmt_Y1(tilepro_bundle_bits n)
-{
- return (((unsigned int)(n >> 43)) & 0x1f);
-}
-
-static __inline unsigned int
-get_SrcA_X0(tilepro_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 6)) & 0x3f);
-}
-
-static __inline unsigned int
-get_SrcA_X1(tilepro_bundle_bits n)
-{
- return (((unsigned int)(n >> 37)) & 0x3f);
-}
-
-static __inline unsigned int
-get_SrcA_Y0(tilepro_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 6)) & 0x3f);
-}
-
-static __inline unsigned int
-get_SrcA_Y1(tilepro_bundle_bits n)
-{
- return (((unsigned int)(n >> 37)) & 0x3f);
-}
-
-static __inline unsigned int
-get_SrcA_Y2(tilepro_bundle_bits n)
-{
- return (((n >> 26)) & 0x00000001) |
- (((unsigned int)(n >> 50)) & 0x0000003e);
-}
-
-static __inline unsigned int
-get_SrcBDest_Y2(tilepro_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 20)) & 0x3f);
-}
-
-static __inline unsigned int
-get_SrcB_X0(tilepro_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 12)) & 0x3f);
-}
-
-static __inline unsigned int
-get_SrcB_X1(tilepro_bundle_bits n)
-{
- return (((unsigned int)(n >> 43)) & 0x3f);
-}
-
-static __inline unsigned int
-get_SrcB_Y0(tilepro_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 12)) & 0x3f);
-}
-
-static __inline unsigned int
-get_SrcB_Y1(tilepro_bundle_bits n)
-{
- return (((unsigned int)(n >> 43)) & 0x3f);
-}
-
-static __inline unsigned int
-get_Src_SN(tilepro_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 0)) & 0x3);
-}
-
-static __inline unsigned int
-get_UnOpcodeExtension_X0(tilepro_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 12)) & 0x1f);
-}
-
-static __inline unsigned int
-get_UnOpcodeExtension_X1(tilepro_bundle_bits n)
-{
- return (((unsigned int)(n >> 43)) & 0x1f);
-}
-
-static __inline unsigned int
-get_UnOpcodeExtension_Y0(tilepro_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 12)) & 0x1f);
-}
-
-static __inline unsigned int
-get_UnOpcodeExtension_Y1(tilepro_bundle_bits n)
-{
- return (((unsigned int)(n >> 43)) & 0x1f);
-}
-
-static __inline unsigned int
-get_UnShOpcodeExtension_X0(tilepro_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 17)) & 0x3ff);
-}
-
-static __inline unsigned int
-get_UnShOpcodeExtension_X1(tilepro_bundle_bits n)
-{
- return (((unsigned int)(n >> 48)) & 0x3ff);
-}
-
-static __inline unsigned int
-get_UnShOpcodeExtension_Y0(tilepro_bundle_bits num)
-{
- const unsigned int n = (unsigned int)num;
- return (((n >> 17)) & 0x7);
-}
-
-static __inline unsigned int
-get_UnShOpcodeExtension_Y1(tilepro_bundle_bits n)
-{
- return (((unsigned int)(n >> 48)) & 0x7);
-}
-
-
-static __inline int
-sign_extend(int n, int num_bits)
-{
- int shift = (int)(sizeof(int) * 8 - num_bits);
- return (n << shift) >> shift;
-}
-
-
-
-static __inline tilepro_bundle_bits
-create_BrOff_SN(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0x3ff) << 0);
-}
-
-static __inline tilepro_bundle_bits
-create_BrOff_X1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilepro_bundle_bits)(n & 0x00007fff)) << 43) |
- (((tilepro_bundle_bits)(n & 0x00018000)) << 20);
-}
-
-static __inline tilepro_bundle_bits
-create_BrType_X1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilepro_bundle_bits)(n & 0xf)) << 31);
-}
-
-static __inline tilepro_bundle_bits
-create_Dest_Imm8_X1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilepro_bundle_bits)(n & 0x0000003f)) << 31) |
- (((tilepro_bundle_bits)(n & 0x000000c0)) << 43);
-}
-
-static __inline tilepro_bundle_bits
-create_Dest_SN(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0x3) << 2);
-}
-
-static __inline tilepro_bundle_bits
-create_Dest_X0(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0x3f) << 0);
-}
-
-static __inline tilepro_bundle_bits
-create_Dest_X1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilepro_bundle_bits)(n & 0x3f)) << 31);
-}
-
-static __inline tilepro_bundle_bits
-create_Dest_Y0(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0x3f) << 0);
-}
-
-static __inline tilepro_bundle_bits
-create_Dest_Y1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilepro_bundle_bits)(n & 0x3f)) << 31);
-}
-
-static __inline tilepro_bundle_bits
-create_Imm16_X0(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0xffff) << 12);
-}
-
-static __inline tilepro_bundle_bits
-create_Imm16_X1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilepro_bundle_bits)(n & 0xffff)) << 43);
-}
-
-static __inline tilepro_bundle_bits
-create_Imm8_SN(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0xff) << 0);
-}
-
-static __inline tilepro_bundle_bits
-create_Imm8_X0(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0xff) << 12);
-}
-
-static __inline tilepro_bundle_bits
-create_Imm8_X1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilepro_bundle_bits)(n & 0xff)) << 43);
-}
-
-static __inline tilepro_bundle_bits
-create_Imm8_Y0(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0xff) << 12);
-}
-
-static __inline tilepro_bundle_bits
-create_Imm8_Y1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilepro_bundle_bits)(n & 0xff)) << 43);
-}
-
-static __inline tilepro_bundle_bits
-create_ImmOpcodeExtension_X0(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0x7f) << 20);
-}
-
-static __inline tilepro_bundle_bits
-create_ImmOpcodeExtension_X1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilepro_bundle_bits)(n & 0x7f)) << 51);
-}
-
-static __inline tilepro_bundle_bits
-create_ImmRROpcodeExtension_SN(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0x3) << 8);
-}
-
-static __inline tilepro_bundle_bits
-create_JOffLong_X1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilepro_bundle_bits)(n & 0x00007fff)) << 43) |
- (((tilepro_bundle_bits)(n & 0x00018000)) << 20) |
- (((tilepro_bundle_bits)(n & 0x001e0000)) << 14) |
- (((tilepro_bundle_bits)(n & 0x07e00000)) << 16) |
- (((tilepro_bundle_bits)(n & 0x18000000)) << 31);
-}
-
-static __inline tilepro_bundle_bits
-create_JOff_X1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilepro_bundle_bits)(n & 0x00007fff)) << 43) |
- (((tilepro_bundle_bits)(n & 0x00018000)) << 20) |
- (((tilepro_bundle_bits)(n & 0x001e0000)) << 14) |
- (((tilepro_bundle_bits)(n & 0x07e00000)) << 16) |
- (((tilepro_bundle_bits)(n & 0x08000000)) << 31);
-}
-
-static __inline tilepro_bundle_bits
-create_MF_Imm15_X1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilepro_bundle_bits)(n & 0x00003fff)) << 37) |
- (((tilepro_bundle_bits)(n & 0x00004000)) << 44);
-}
-
-static __inline tilepro_bundle_bits
-create_MMEnd_X0(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0x1f) << 18);
-}
-
-static __inline tilepro_bundle_bits
-create_MMEnd_X1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilepro_bundle_bits)(n & 0x1f)) << 49);
-}
-
-static __inline tilepro_bundle_bits
-create_MMStart_X0(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0x1f) << 23);
-}
-
-static __inline tilepro_bundle_bits
-create_MMStart_X1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilepro_bundle_bits)(n & 0x1f)) << 54);
-}
-
-static __inline tilepro_bundle_bits
-create_MT_Imm15_X1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilepro_bundle_bits)(n & 0x0000003f)) << 31) |
- (((tilepro_bundle_bits)(n & 0x00003fc0)) << 37) |
- (((tilepro_bundle_bits)(n & 0x00004000)) << 44);
-}
-
-static __inline tilepro_bundle_bits
-create_Mode(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilepro_bundle_bits)(n & 0x1)) << 63);
-}
-
-static __inline tilepro_bundle_bits
-create_NoRegOpcodeExtension_SN(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0xf) << 0);
-}
-
-static __inline tilepro_bundle_bits
-create_Opcode_SN(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0x3f) << 10);
-}
-
-static __inline tilepro_bundle_bits
-create_Opcode_X0(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0x7) << 28);
-}
-
-static __inline tilepro_bundle_bits
-create_Opcode_X1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilepro_bundle_bits)(n & 0xf)) << 59);
-}
-
-static __inline tilepro_bundle_bits
-create_Opcode_Y0(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0xf) << 27);
-}
-
-static __inline tilepro_bundle_bits
-create_Opcode_Y1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilepro_bundle_bits)(n & 0xf)) << 59);
-}
-
-static __inline tilepro_bundle_bits
-create_Opcode_Y2(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilepro_bundle_bits)(n & 0x7)) << 56);
-}
-
-static __inline tilepro_bundle_bits
-create_RROpcodeExtension_SN(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0xf) << 4);
-}
-
-static __inline tilepro_bundle_bits
-create_RRROpcodeExtension_X0(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0x1ff) << 18);
-}
-
-static __inline tilepro_bundle_bits
-create_RRROpcodeExtension_X1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilepro_bundle_bits)(n & 0x1ff)) << 49);
-}
-
-static __inline tilepro_bundle_bits
-create_RRROpcodeExtension_Y0(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0x3) << 18);
-}
-
-static __inline tilepro_bundle_bits
-create_RRROpcodeExtension_Y1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilepro_bundle_bits)(n & 0x3)) << 49);
-}
-
-static __inline tilepro_bundle_bits
-create_RouteOpcodeExtension_SN(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0x3ff) << 0);
-}
-
-static __inline tilepro_bundle_bits
-create_S_X0(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0x1) << 27);
-}
-
-static __inline tilepro_bundle_bits
-create_S_X1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilepro_bundle_bits)(n & 0x1)) << 58);
-}
-
-static __inline tilepro_bundle_bits
-create_ShAmt_X0(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0x1f) << 12);
-}
-
-static __inline tilepro_bundle_bits
-create_ShAmt_X1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilepro_bundle_bits)(n & 0x1f)) << 43);
-}
-
-static __inline tilepro_bundle_bits
-create_ShAmt_Y0(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0x1f) << 12);
-}
-
-static __inline tilepro_bundle_bits
-create_ShAmt_Y1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilepro_bundle_bits)(n & 0x1f)) << 43);
-}
-
-static __inline tilepro_bundle_bits
-create_SrcA_X0(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0x3f) << 6);
-}
-
-static __inline tilepro_bundle_bits
-create_SrcA_X1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilepro_bundle_bits)(n & 0x3f)) << 37);
-}
-
-static __inline tilepro_bundle_bits
-create_SrcA_Y0(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0x3f) << 6);
-}
-
-static __inline tilepro_bundle_bits
-create_SrcA_Y1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilepro_bundle_bits)(n & 0x3f)) << 37);
-}
-
-static __inline tilepro_bundle_bits
-create_SrcA_Y2(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0x00000001) << 26) |
- (((tilepro_bundle_bits)(n & 0x0000003e)) << 50);
-}
-
-static __inline tilepro_bundle_bits
-create_SrcBDest_Y2(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0x3f) << 20);
-}
-
-static __inline tilepro_bundle_bits
-create_SrcB_X0(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0x3f) << 12);
-}
-
-static __inline tilepro_bundle_bits
-create_SrcB_X1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilepro_bundle_bits)(n & 0x3f)) << 43);
-}
-
-static __inline tilepro_bundle_bits
-create_SrcB_Y0(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0x3f) << 12);
-}
-
-static __inline tilepro_bundle_bits
-create_SrcB_Y1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilepro_bundle_bits)(n & 0x3f)) << 43);
-}
-
-static __inline tilepro_bundle_bits
-create_Src_SN(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0x3) << 0);
-}
-
-static __inline tilepro_bundle_bits
-create_UnOpcodeExtension_X0(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0x1f) << 12);
-}
-
-static __inline tilepro_bundle_bits
-create_UnOpcodeExtension_X1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilepro_bundle_bits)(n & 0x1f)) << 43);
-}
-
-static __inline tilepro_bundle_bits
-create_UnOpcodeExtension_Y0(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0x1f) << 12);
-}
-
-static __inline tilepro_bundle_bits
-create_UnOpcodeExtension_Y1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilepro_bundle_bits)(n & 0x1f)) << 43);
-}
-
-static __inline tilepro_bundle_bits
-create_UnShOpcodeExtension_X0(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0x3ff) << 17);
-}
-
-static __inline tilepro_bundle_bits
-create_UnShOpcodeExtension_X1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilepro_bundle_bits)(n & 0x3ff)) << 48);
-}
-
-static __inline tilepro_bundle_bits
-create_UnShOpcodeExtension_Y0(int num)
-{
- const unsigned int n = (unsigned int)num;
- return ((n & 0x7) << 17);
-}
-
-static __inline tilepro_bundle_bits
-create_UnShOpcodeExtension_Y1(int num)
-{
- const unsigned int n = (unsigned int)num;
- return (((tilepro_bundle_bits)(n & 0x7)) << 48);
-}
-
-
-
-typedef enum
-{
- TILEPRO_PIPELINE_X0,
- TILEPRO_PIPELINE_X1,
- TILEPRO_PIPELINE_Y0,
- TILEPRO_PIPELINE_Y1,
- TILEPRO_PIPELINE_Y2,
-} tilepro_pipeline;
-
-#define tilepro_is_x_pipeline(p) ((int)(p) <= (int)TILEPRO_PIPELINE_X1)
-
-typedef enum
-{
- TILEPRO_OP_TYPE_REGISTER,
- TILEPRO_OP_TYPE_IMMEDIATE,
- TILEPRO_OP_TYPE_ADDRESS,
- TILEPRO_OP_TYPE_SPR
-} tilepro_operand_type;
-
-/* This is the bit that determines if a bundle is in the Y encoding. */
-#define TILEPRO_BUNDLE_Y_ENCODING_MASK ((tilepro_bundle_bits)1 << 63)
-
-enum
-{
- /* Maximum number of instructions in a bundle (2 for X, 3 for Y). */
- TILEPRO_MAX_INSTRUCTIONS_PER_BUNDLE = 3,
-
- /* How many different pipeline encodings are there? X0, X1, Y0, Y1, Y2. */
- TILEPRO_NUM_PIPELINE_ENCODINGS = 5,
-
- /* Log base 2 of TILEPRO_BUNDLE_SIZE_IN_BYTES. */
- TILEPRO_LOG2_BUNDLE_SIZE_IN_BYTES = 3,
-
- /* Instructions take this many bytes. */
- TILEPRO_BUNDLE_SIZE_IN_BYTES = 1 << TILEPRO_LOG2_BUNDLE_SIZE_IN_BYTES,
-
- /* Log base 2 of TILEPRO_BUNDLE_ALIGNMENT_IN_BYTES. */
- TILEPRO_LOG2_BUNDLE_ALIGNMENT_IN_BYTES = 3,
-
- /* Bundles should be aligned modulo this number of bytes. */
- TILEPRO_BUNDLE_ALIGNMENT_IN_BYTES =
- (1 << TILEPRO_LOG2_BUNDLE_ALIGNMENT_IN_BYTES),
-
- /* Log base 2 of TILEPRO_SN_INSTRUCTION_SIZE_IN_BYTES. */
- TILEPRO_LOG2_SN_INSTRUCTION_SIZE_IN_BYTES = 1,
-
- /* Static network instructions take this many bytes. */
- TILEPRO_SN_INSTRUCTION_SIZE_IN_BYTES =
- (1 << TILEPRO_LOG2_SN_INSTRUCTION_SIZE_IN_BYTES),
-
- /* Number of registers (some are magic, such as network I/O). */
- TILEPRO_NUM_REGISTERS = 64,
-
- /* Number of static network registers. */
- TILEPRO_NUM_SN_REGISTERS = 4
-};
-
-
-struct tilepro_operand
-{
- /* Is this operand a register, immediate or address? */
- tilepro_operand_type type;
-
- /* The default relocation type for this operand. */
- signed int default_reloc : 16;
-
- /* How many bits is this value? (used for range checking) */
- unsigned int num_bits : 5;
-
- /* Is the value signed? (used for range checking) */
- unsigned int is_signed : 1;
-
- /* Is this operand a source register? */
- unsigned int is_src_reg : 1;
-
- /* Is this operand written? (i.e. is it a destination register) */
- unsigned int is_dest_reg : 1;
-
- /* Is this operand PC-relative? */
- unsigned int is_pc_relative : 1;
-
- /* By how many bits do we right shift the value before inserting? */
- unsigned int rightshift : 2;
-
- /* Return the bits for this operand to be ORed into an existing bundle. */
- tilepro_bundle_bits (*insert) (int op);
-
- /* Extract this operand and return it. */
- unsigned int (*extract) (tilepro_bundle_bits bundle);
-};
-
-
-extern const struct tilepro_operand tilepro_operands[];
-
-/* One finite-state machine per pipe for rapid instruction decoding. */
-extern const unsigned short * const
-tilepro_bundle_decoder_fsms[TILEPRO_NUM_PIPELINE_ENCODINGS];
-
-
-struct tilepro_opcode
-{
- /* The opcode mnemonic, e.g. "add" */
- const char *name;
-
- /* The enum value for this mnemonic. */
- tilepro_mnemonic mnemonic;
-
- /* A bit mask of which of the five pipes this instruction
- is compatible with:
- X0 0x01
- X1 0x02
- Y0 0x04
- Y1 0x08
- Y2 0x10 */
- unsigned char pipes;
-
- /* How many operands are there? */
- unsigned char num_operands;
-
- /* Which register does this write implicitly, or TREG_ZERO if none? */
- unsigned char implicitly_written_register;
-
- /* Can this be bundled with other instructions (almost always true). */
- unsigned char can_bundle;
-
- /* The description of the operands. Each of these is an
- * index into the tilepro_operands[] table. */
- unsigned char operands[TILEPRO_NUM_PIPELINE_ENCODINGS][TILEPRO_MAX_OPERANDS];
-
-#if !defined(__KERNEL__) && !defined(_LIBC)
- /* A mask of which bits have predefined values for each pipeline.
- * This is useful for disassembly. */
- tilepro_bundle_bits fixed_bit_masks[TILEPRO_NUM_PIPELINE_ENCODINGS];
-
- /* For each bit set in fixed_bit_masks, what the value is for this
- * instruction. */
- tilepro_bundle_bits fixed_bit_values[TILEPRO_NUM_PIPELINE_ENCODINGS];
-#endif
-};
-
-extern const struct tilepro_opcode tilepro_opcodes[];
-
-#if !defined(__KERNEL__) && !defined(_LIBC)
-
-typedef unsigned short tilepro_sn_instruction_bits;
-
-struct tilepro_sn_opcode
-{
- /* The opcode mnemonic, e.g. "add" */
- const char *name;
-
- /* The enum value for this mnemonic. */
- tilepro_sn_mnemonic mnemonic;
-
- /* How many operands are there? */
- unsigned char num_operands;
-
- /* The description of the operands. Each of these is an
- * index into the tilepro_operands[] table. */
- unsigned char operands[TILEPRO_SN_MAX_OPERANDS];
-
- /* A mask of which bits have predefined values.
- * This is useful for disassembly. */
- tilepro_sn_instruction_bits fixed_bit_mask;
-
- /* For each bit set in fixed_bit_masks, what its value is. */
- tilepro_sn_instruction_bits fixed_bit_values;
-};
-
-extern const struct tilepro_sn_opcode tilepro_sn_opcodes[];
-
-#endif /* !__KERNEL__ && !_LIBC */
-
-/* Used for non-textual disassembly into structs. */
-struct tilepro_decoded_instruction
-{
- const struct tilepro_opcode *opcode;
- const struct tilepro_operand *operands[TILEPRO_MAX_OPERANDS];
- int operand_values[TILEPRO_MAX_OPERANDS];
-};
-
-
-/* Disassemble a bundle into a struct for machine processing. */
-extern int parse_insn_tilepro(tilepro_bundle_bits bits,
- unsigned int pc,
- struct tilepro_decoded_instruction
- decoded[TILEPRO_MAX_INSTRUCTIONS_PER_BUNDLE]);
-
-
-/* Given a set of bundle bits and a specific pipe, returns which
- * instruction the bundle contains in that pipe.
- */
-extern const struct tilepro_opcode *
-find_opcode(tilepro_bundle_bits bits, tilepro_pipeline pipe);
-
-
-#if !defined(__KERNEL__) && !defined(_LIBC)
-/* Canonical names of all the registers. */
-/* ISSUE: This table lives in "tilepro-dis.c" */
-extern const char * const tilepro_register_names[];
-
-/* Descriptor for a special-purpose register. */
-struct tilepro_spr
-{
- /* The number */
- int number;
-
- /* The name */
- const char *name;
-};
-
-/* List of all the SPRs; ordered by increasing number. */
-extern const struct tilepro_spr tilepro_sprs[];
-
-/* Number of special-purpose registers. */
-extern const int tilepro_num_sprs;
-
-extern const char *
-get_tilepro_spr_name (int num);
-#endif /* !__KERNEL__ && !_LIBC */
-
-/* Make a few "tile_" variables to simply common code between
- architectures. */
-
-typedef tilepro_bundle_bits tile_bundle_bits;
-#define TILE_BUNDLE_SIZE_IN_BYTES TILEPRO_BUNDLE_SIZE_IN_BYTES
-#define TILE_BUNDLE_ALIGNMENT_IN_BYTES TILEPRO_BUNDLE_ALIGNMENT_IN_BYTES
-#define TILE_LOG2_BUNDLE_ALIGNMENT_IN_BYTES \
- TILEPRO_LOG2_BUNDLE_ALIGNMENT_IN_BYTES
-
-#endif /* opcode_tilepro_h */
diff --git a/include/opcode/v850.h b/include/opcode/v850.h
deleted file mode 100644
index 02ef3d4cc..000000000
--- a/include/opcode/v850.h
+++ /dev/null
@@ -1,240 +0,0 @@
-/* v850.h -- Header file for NEC V850 opcode table
- Copyright 1996-2013 Free Software Foundation, Inc.
- Written by J.T. Conklin, Cygnus Support
-
- This file is part of GDB, GAS, and the GNU binutils.
-
- GDB, GAS, and the GNU binutils are free software; you can redistribute
- them and/or modify them under the terms of the GNU General Public
- License as published by the Free Software Foundation; either version 3,
- or (at your option) any later version.
-
- GDB, GAS, and the GNU binutils are distributed in the hope that they
- 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 file; see the file COPYING3. If not, write to the Free
- Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef V850_H
-#define V850_H
-
-/* The opcode table is an array of struct v850_opcode. */
-
-struct v850_opcode
-{
- /* The opcode name. */
- const char *name;
-
- /* The opcode itself. Those bits which will be filled in with
- operands are zeroes. */
- unsigned long opcode;
-
- /* The opcode mask. This is used by the disassembler. This is a
- mask containing ones indicating those bits which must match the
- opcode field, and zeroes indicating those bits which need not
- match (and are presumably filled in by operands). */
- unsigned long mask;
-
- /* An array of operand codes. Each code is an index into the
- operand table. They appear in the order which the operands must
- appear in assembly code, and are terminated by a zero. */
- unsigned char operands[8];
-
- /* Which (if any) operand is a memory operand. */
- unsigned int memop;
-
- /* Target processor(s). A bit field of processors which support
- this instruction. Note a bit field is used as some instructions
- are available on multiple, different processor types, whereas
- other instructions are only available on one specific type. */
- unsigned int processors;
-};
-
-/* Values for architecture number. */
-#define arch_V850 0
-#define arch_V850E (arch_V850 + 1)
-#define arch_V850E1 (arch_V850E + 1)
-#define arch_V850E2 (arch_V850E1 + 1)
-#define arch_V850E2V3 (arch_V850E2 + 1)
-#define arch_V850E3V5 (arch_V850E2V3 + 1)
-#define arch_separator (arch_V850E3V5 + 1)
-
-#define opt_EXTENSION (arch_separator)
-#define opt_ALIAS (opt_EXTENSION + 1)
-
-/* Values for the processors field in the v850_opcode structure. */
-#define PROCESSOR_V850 (1 << (arch_V850)) /* Just the V850. */
-#define PROCESSOR_V850E (1 << (arch_V850E)) /* Just the V850E. */
-#define PROCESSOR_V850E1 (1 << (arch_V850E1)) /* Just the V850E1. */
-#define PROCESSOR_V850E2 (1 << (arch_V850E2)) /* Just the V850E2. */
-#define PROCESSOR_V850E2V3 (1 << (arch_V850E2V3)) /* Just the V850E2V3. */
-#define PROCESSOR_V850E3V5 (1 << (arch_V850E3V5)) /* Just the V850E3V5. */
-
-/* UPPERS */
-#define PROCESSOR_V850E3V5_UP (PROCESSOR_V850E3V5)
-#define PROCESSOR_V850E2V3_UP (PROCESSOR_V850E2V3 | PROCESSOR_V850E3V5_UP)
-#define PROCESSOR_V850E2_UP (PROCESSOR_V850E2 | PROCESSOR_V850E2V3_UP)
-#define PROCESSOR_V850E_UP (PROCESSOR_V850E | PROCESSOR_V850E1 | PROCESSOR_V850E2_UP)
-#define PROCESSOR_ALL (PROCESSOR_V850 | PROCESSOR_V850E_UP)
-
-#define PROCESSOR_MASK (PROCESSOR_ALL)
-#define PROCESSOR_NOT_V850 (PROCESSOR_ALL & (~ PROCESSOR_V850)) /* Any processor except the V850. */
-
-#define PROCESSOR_UNKNOWN ~(PROCESSOR_MASK)
-
-/* OPTIONS */
-#define PROCESSOR_OPTION_EXTENSION (1 << (opt_EXTENSION)) /* Enable extension opcodes. */
-#define PROCESSOR_OPTION_ALIAS (1 << (opt_ALIAS)) /* Enable alias opcodes. */
-
-#define SET_PROCESSOR_MASK(mask,set) ((mask) = ((mask) & ~PROCESSOR_MASK) | (set))
-
-/* The table itself is sorted by major opcode number, and is otherwise
- in the order in which the disassembler should consider
- instructions. */
-extern const struct v850_opcode v850_opcodes[];
-extern const int v850_num_opcodes;
-
-
-/* The operands table is an array of struct v850_operand. */
-
-struct v850_operand
-{
- /* The number of bits in the operand. */
- /* If this value is -1 then the operand's bits are in a discontinous
- distribution in the instruction. */
- int bits;
-
- /* (bits >= 0): How far the operand is left shifted in the instruction. */
- /* (bits == -1): Bit mask of the bits in the operand. */
- int shift;
-
- /* Insertion function. This is used by the assembler. To insert an
- operand value into an instruction, check this field.
-
- If it is NULL, execute
- i |= (op & ((1 << o->bits) - 1)) << o->shift;
- (i is the instruction which we are filling in, o is a pointer to
- this structure, and op is the opcode value; this assumes twos
- complement arithmetic).
-
- If this field is not NULL, then simply call it with the
- instruction and the operand value. It will return the new value
- of the instruction. If the ERRMSG argument is not NULL, then if
- the operand value is illegal, *ERRMSG will be set to a warning
- string (the operand will be inserted in any case). If the
- operand value is legal, *ERRMSG will be unchanged (most operands
- can accept any value). */
- unsigned long (* insert)
- (unsigned long instruction, long op, const char ** errmsg);
-
- /* Extraction function. This is used by the disassembler. To
- extract this operand type from an instruction, check this field.
-
- If it is NULL, compute
- op = o->bits == -1 ? ((i) & o->shift) : ((i) >> o->shift) & ((1 << o->bits) - 1);
- if (o->flags & V850_OPERAND_SIGNED)
- op = (op << (32 - o->bits)) >> (32 - o->bits);
- (i is the instruction, o is a pointer to this structure, and op
- is the result; this assumes twos complement arithmetic).
-
- If this field is not NULL, then simply call it with the
- instruction value. It will return the value of the operand. If
- the INVALID argument is not NULL, *INVALID will be set to
- non-zero if this operand type can not actually be extracted from
- this operand (i.e., the instruction does not match). If the
- operand is valid, *INVALID will not be changed. */
- unsigned long (* extract) (unsigned long instruction, int * invalid);
-
- /* One bit syntax flags. */
- int flags;
-
- int default_reloc;
-};
-
-/* Elements in the table are retrieved by indexing with values from
- the operands field of the v850_opcodes table. */
-
-extern const struct v850_operand v850_operands[];
-
-/* Values defined for the flags field of a struct v850_operand. */
-
-/* This operand names a general purpose register. */
-#define V850_OPERAND_REG 0x01
-
-/* This operand is the ep register. */
-#define V850_OPERAND_EP 0x02
-
-/* This operand names a system register. */
-#define V850_OPERAND_SRG 0x04
-
-/* Prologue eilogue type instruction, V850E specific. */
-#define V850E_OPERAND_REG_LIST 0x08
-
-/* This operand names a condition code used in the setf instruction. */
-#define V850_OPERAND_CC 0x10
-
-#define V850_OPERAND_FLOAT_CC 0x20
-
-/* This operand names a vector purpose register. */
-#define V850_OPERAND_VREG 0x40
-
-/* 16 bit immediate follows instruction, V850E specific. */
-#define V850E_IMMEDIATE16 0x80
-
-/* hi16 bit immediate follows instruction, V850E specific. */
-#define V850E_IMMEDIATE16HI 0x100
-
-/* 23 bit immediate follows instruction, V850E specific. */
-#define V850E_IMMEDIATE23 0x200
-
-/* 32 bit immediate follows instruction, V850E specific. */
-#define V850E_IMMEDIATE32 0x400
-
-/* This is a relaxable operand. Only used for D9->D22 branch relaxing
- right now. We may need others in the future (or maybe handle them like
- promoted operands on the mn10300?). */
-#define V850_OPERAND_RELAX 0x800
-
-/* This operand takes signed values. */
-#define V850_OPERAND_SIGNED 0x1000
-
-/* This operand is a displacement. */
-#define V850_OPERAND_DISP 0x2000
-
-/* This operand is a PC displacement. */
-#define V850_PCREL 0x4000
-
-/* The register specified must be even number. */
-#define V850_REG_EVEN 0x8000
-
-/* The register specified must not be r0. */
-#define V850_NOT_R0 0x20000
-
-/* The register specified must not be 0. */
-#define V850_NOT_IMM0 0x40000
-
-/* The condition code must not be SA CONDITION. */
-#define V850_NOT_SA 0x80000
-
-/* The operand has '!' prefix. */
-#define V850_OPERAND_BANG 0x100000
-
-/* The operand has '%' prefix. */
-#define V850_OPERAND_PERCENT 0x200000
-
-/* This operand is a cache oparation. */
-#define V850_OPERAND_CACHEOP 0x400000
-
-/* This operand is a prefetch oparation. */
-#define V850_OPERAND_PREFOP 0x800000
-
-/* A PC-relative displacement where a positive value indicates a backwards displacement. */
-#define V850_INVERSE_PCREL 0x1000000
-
-extern int v850_msg_is_out_of_range (const char *);
-
-#endif /* V850_H */
diff --git a/include/opcode/vax.h b/include/opcode/vax.h
deleted file mode 100644
index f5cdd2439..000000000
--- a/include/opcode/vax.h
+++ /dev/null
@@ -1,383 +0,0 @@
-/* Vax opcde list.
- Copyright 1989, 1991, 1992, 1995, 2010 Free Software Foundation, Inc.
-
- This file is part of GDB and GAS.
-
- GDB and GAS are 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 3, or (at your option)
- any later version.
-
- GDB and GAS are 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 GDB or GAS; see the file COPYING3. If not, write to
- the Free Software Foundation, 51 Franklin Street - Fifth Floor,
- Boston, MA 02110-1301, USA. */
-
-#ifndef vax_opcodeT
-#define vax_opcodeT int
-#endif /* no vax_opcodeT */
-
-struct vot_wot /* vax opcode table: wot to do with this */
- /* particular opcode */
-{
- const char *args; /* how to compile said opcode */
- vax_opcodeT code; /* op-code (may be > 8 bits!) */
-};
-
-struct vot /* vax opcode text */
-{
- const char *name; /* opcode name: lowercase string [key] */
- struct vot_wot detail; /* rest of opcode table [datum] */
-};
-
-#define vot_how args
-#define vot_code code
-#define vot_detail detail
-#define vot_name name
-
-static const struct vot
-votstrs[] =
-{
-{ "halt", {"", 0x00 } },
-{ "nop", {"", 0x01 } },
-{ "rei", {"", 0x02 } },
-{ "bpt", {"", 0x03 } },
-{ "ret", {"", 0x04 } },
-{ "rsb", {"", 0x05 } },
-{ "ldpctx", {"", 0x06 } },
-{ "svpctx", {"", 0x07 } },
-{ "cvtps", {"rwabrwab", 0x08 } },
-{ "cvtsp", {"rwabrwab", 0x09 } },
-{ "index", {"rlrlrlrlrlwl", 0x0a } },
-{ "crc", {"abrlrwab", 0x0b } },
-{ "prober", {"rbrwab", 0x0c } },
-{ "probew", {"rbrwab", 0x0d } },
-{ "insque", {"abab", 0x0e } },
-{ "remque", {"abwl", 0x0f } },
-{ "bsbb", {"bb", 0x10 } },
-{ "brb", {"bb", 0x11 } },
-{ "bneq", {"bb", 0x12 } },
-{ "bnequ", {"bb", 0x12 } },
-{ "beql", {"bb", 0x13 } },
-{ "beqlu", {"bb", 0x13 } },
-{ "bgtr", {"bb", 0x14 } },
-{ "bleq", {"bb", 0x15 } },
-{ "jsb", {"ab", 0x16 } },
-{ "jmp", {"ab", 0x17 } },
-{ "bgeq", {"bb", 0x18 } },
-{ "blss", {"bb", 0x19 } },
-{ "bgtru", {"bb", 0x1a } },
-{ "blequ", {"bb", 0x1b } },
-{ "bvc", {"bb", 0x1c } },
-{ "bvs", {"bb", 0x1d } },
-{ "bcc", {"bb", 0x1e } },
-{ "bgequ", {"bb", 0x1e } },
-{ "blssu", {"bb", 0x1f } },
-{ "bcs", {"bb", 0x1f } },
-{ "addp4", {"rwabrwab", 0x20 } },
-{ "addp6", {"rwabrwabrwab", 0x21 } },
-{ "subp4", {"rwabrwab", 0x22 } },
-{ "subp6", {"rwabrwabrwab", 0x23 } },
-{ "cvtpt", {"rwababrwab", 0x24 } },
-{ "mulp", {"rwabrwabrwab", 0x25 } },
-{ "cvttp", {"rwababrwab", 0x26 } },
-{ "divp", {"rwabrwabrwab", 0x27 } },
-{ "movc3", {"rwabab", 0x28 } },
-{ "cmpc3", {"rwabab", 0x29 } },
-{ "scanc", {"rwababrb", 0x2a } },
-{ "spanc", {"rwababrb", 0x2b } },
-{ "movc5", {"rwabrbrwab", 0x2c } },
-{ "cmpc5", {"rwabrbrwab", 0x2d } },
-{ "movtc", {"rwabrbabrwab", 0x2e } },
-{ "movtuc", {"rwabrbabrwab", 0x2f } },
-{ "bsbw", {"bw", 0x30 } },
-{ "brw", {"bw", 0x31 } },
-{ "cvtwl", {"rwwl", 0x32 } },
-{ "cvtwb", {"rwwb", 0x33 } },
-{ "movp", {"rwabab", 0x34 } },
-{ "cmpp3", {"rwabab", 0x35 } },
-{ "cvtpl", {"rwabwl", 0x36 } },
-{ "cmpp4", {"rwabrwab", 0x37 } },
-{ "editpc", {"rwababab", 0x38 } },
-{ "matchc", {"rwabrwab", 0x39 } },
-{ "locc", {"rbrwab", 0x3a } },
-{ "skpc", {"rbrwab", 0x3b } },
-{ "movzwl", {"rwwl", 0x3c } },
-{ "acbw", {"rwrwmwbw", 0x3d } },
-{ "movaw", {"awwl", 0x3e } },
-{ "pushaw", {"aw", 0x3f } },
-{ "addf2", {"rfmf", 0x40 } },
-{ "addf3", {"rfrfwf", 0x41 } },
-{ "subf2", {"rfmf", 0x42 } },
-{ "subf3", {"rfrfwf", 0x43 } },
-{ "mulf2", {"rfmf", 0x44 } },
-{ "mulf3", {"rfrfwf", 0x45 } },
-{ "divf2", {"rfmf", 0x46 } },
-{ "divf3", {"rfrfwf", 0x47 } },
-{ "cvtfb", {"rfwb", 0x48 } },
-{ "cvtfw", {"rfww", 0x49 } },
-{ "cvtfl", {"rfwl", 0x4a } },
-{ "cvtrfl", {"rfwl", 0x4b } },
-{ "cvtbf", {"rbwf", 0x4c } },
-{ "cvtwf", {"rwwf", 0x4d } },
-{ "cvtlf", {"rlwf", 0x4e } },
-{ "acbf", {"rfrfmfbw", 0x4f } },
-{ "movf", {"rfwf", 0x50 } },
-{ "cmpf", {"rfrf", 0x51 } },
-{ "mnegf", {"rfwf", 0x52 } },
-{ "tstf", {"rf", 0x53 } },
-{ "emodf", {"rfrbrfwlwf", 0x54 } },
-{ "polyf", {"rfrwab", 0x55 } },
-{ "cvtfd", {"rfwd", 0x56 } },
- /* opcode 57 is not defined yet */
-{ "adawi", {"rwmw", 0x58 } },
- /* opcode 59 is not defined yet */
- /* opcode 5a is not defined yet */
- /* opcode 5b is not defined yet */
-{ "insqhi", {"abaq", 0x5c } },
-{ "insqti", {"abaq", 0x5d } },
-{ "remqhi", {"aqwl", 0x5e } },
-{ "remqti", {"aqwl", 0x5f } },
-{ "addd2", {"rdmd", 0x60 } },
-{ "addd3", {"rdrdwd", 0x61 } },
-{ "subd2", {"rdmd", 0x62 } },
-{ "subd3", {"rdrdwd", 0x63 } },
-{ "muld2", {"rdmd", 0x64 } },
-{ "muld3", {"rdrdwd", 0x65 } },
-{ "divd2", {"rdmd", 0x66 } },
-{ "divd3", {"rdrdwd", 0x67 } },
-{ "cvtdb", {"rdwb", 0x68 } },
-{ "cvtdw", {"rdww", 0x69 } },
-{ "cvtdl", {"rdwl", 0x6a } },
-{ "cvtrdl", {"rdwl", 0x6b } },
-{ "cvtbd", {"rbwd", 0x6c } },
-{ "cvtwd", {"rwwd", 0x6d } },
-{ "cvtld", {"rlwd", 0x6e } },
-{ "acbd", {"rdrdmdbw", 0x6f } },
-{ "movd", {"rdwd", 0x70 } },
-{ "cmpd", {"rdrd", 0x71 } },
-{ "mnegd", {"rdwd", 0x72 } },
-{ "tstd", {"rd", 0x73 } },
-{ "emodd", {"rdrbrdwlwd", 0x74 } },
-{ "polyd", {"rdrwab", 0x75 } },
-{ "cvtdf", {"rdwf", 0x76 } },
- /* opcode 77 is not defined yet */
-{ "ashl", {"rbrlwl", 0x78 } },
-{ "ashq", {"rbrqwq", 0x79 } },
-{ "emul", {"rlrlrlwq", 0x7a } },
-{ "ediv", {"rlrqwlwl", 0x7b } },
-{ "clrd", {"wd", 0x7c } },
-{ "clrg", {"wg", 0x7c } },
-{ "clrq", {"wd", 0x7c } },
-{ "movq", {"rqwq", 0x7d } },
-{ "movaq", {"aqwl", 0x7e } },
-{ "movad", {"adwl", 0x7e } },
-{ "pushaq", {"aq", 0x7f } },
-{ "pushad", {"ad", 0x7f } },
-{ "addb2", {"rbmb", 0x80 } },
-{ "addb3", {"rbrbwb", 0x81 } },
-{ "subb2", {"rbmb", 0x82 } },
-{ "subb3", {"rbrbwb", 0x83 } },
-{ "mulb2", {"rbmb", 0x84 } },
-{ "mulb3", {"rbrbwb", 0x85 } },
-{ "divb2", {"rbmb", 0x86 } },
-{ "divb3", {"rbrbwb", 0x87 } },
-{ "bisb2", {"rbmb", 0x88 } },
-{ "bisb3", {"rbrbwb", 0x89 } },
-{ "bicb2", {"rbmb", 0x8a } },
-{ "bicb3", {"rbrbwb", 0x8b } },
-{ "xorb2", {"rbmb", 0x8c } },
-{ "xorb3", {"rbrbwb", 0x8d } },
-{ "mnegb", {"rbwb", 0x8e } },
-{ "caseb", {"rbrbrb", 0x8f } },
-{ "movb", {"rbwb", 0x90 } },
-{ "cmpb", {"rbrb", 0x91 } },
-{ "mcomb", {"rbwb", 0x92 } },
-{ "bitb", {"rbrb", 0x93 } },
-{ "clrb", {"wb", 0x94 } },
-{ "tstb", {"rb", 0x95 } },
-{ "incb", {"mb", 0x96 } },
-{ "decb", {"mb", 0x97 } },
-{ "cvtbl", {"rbwl", 0x98 } },
-{ "cvtbw", {"rbww", 0x99 } },
-{ "movzbl", {"rbwl", 0x9a } },
-{ "movzbw", {"rbww", 0x9b } },
-{ "rotl", {"rbrlwl", 0x9c } },
-{ "acbb", {"rbrbmbbw", 0x9d } },
-{ "movab", {"abwl", 0x9e } },
-{ "pushab", {"ab", 0x9f } },
-{ "addw2", {"rwmw", 0xa0 } },
-{ "addw3", {"rwrwww", 0xa1 } },
-{ "subw2", {"rwmw", 0xa2 } },
-{ "subw3", {"rwrwww", 0xa3 } },
-{ "mulw2", {"rwmw", 0xa4 } },
-{ "mulw3", {"rwrwww", 0xa5 } },
-{ "divw2", {"rwmw", 0xa6 } },
-{ "divw3", {"rwrwww", 0xa7 } },
-{ "bisw2", {"rwmw", 0xa8 } },
-{ "bisw3", {"rwrwww", 0xa9 } },
-{ "bicw2", {"rwmw", 0xaa } },
-{ "bicw3", {"rwrwww", 0xab } },
-{ "xorw2", {"rwmw", 0xac } },
-{ "xorw3", {"rwrwww", 0xad } },
-{ "mnegw", {"rwww", 0xae } },
-{ "casew", {"rwrwrw", 0xaf } },
-{ "movw", {"rwww", 0xb0 } },
-{ "cmpw", {"rwrw", 0xb1 } },
-{ "mcomw", {"rwww", 0xb2 } },
-{ "bitw", {"rwrw", 0xb3 } },
-{ "clrw", {"ww", 0xb4 } },
-{ "tstw", {"rw", 0xb5 } },
-{ "incw", {"mw", 0xb6 } },
-{ "decw", {"mw", 0xb7 } },
-{ "bispsw", {"rw", 0xb8 } },
-{ "bicpsw", {"rw", 0xb9 } },
-{ "popr", {"rw", 0xba } },
-{ "pushr", {"rw", 0xbb } },
-{ "chmk", {"rw", 0xbc } },
-{ "chme", {"rw", 0xbd } },
-{ "chms", {"rw", 0xbe } },
-{ "chmu", {"rw", 0xbf } },
-{ "addl2", {"rlml", 0xc0 } },
-{ "addl3", {"rlrlwl", 0xc1 } },
-{ "subl2", {"rlml", 0xc2 } },
-{ "subl3", {"rlrlwl", 0xc3 } },
-{ "mull2", {"rlml", 0xc4 } },
-{ "mull3", {"rlrlwl", 0xc5 } },
-{ "divl2", {"rlml", 0xc6 } },
-{ "divl3", {"rlrlwl", 0xc7 } },
-{ "bisl2", {"rlml", 0xc8 } },
-{ "bisl3", {"rlrlwl", 0xc9 } },
-{ "bicl2", {"rlml", 0xca } },
-{ "bicl3", {"rlrlwl", 0xcb } },
-{ "xorl2", {"rlml", 0xcc } },
-{ "xorl3", {"rlrlwl", 0xcd } },
-{ "mnegl", {"rlwl", 0xce } },
-{ "casel", {"rlrlrl", 0xcf } },
-{ "movl", {"rlwl", 0xd0 } },
-{ "cmpl", {"rlrl", 0xd1 } },
-{ "mcoml", {"rlwl", 0xd2 } },
-{ "bitl", {"rlrl", 0xd3 } },
-{ "clrf", {"wf", 0xd4 } },
-{ "clrl", {"wl", 0xd4 } },
-{ "tstl", {"rl", 0xd5 } },
-{ "incl", {"ml", 0xd6 } },
-{ "decl", {"ml", 0xd7 } },
-{ "adwc", {"rlml", 0xd8 } },
-{ "sbwc", {"rlml", 0xd9 } },
-{ "mtpr", {"rlrl", 0xda } },
-{ "mfpr", {"rlwl", 0xdb } },
-{ "movpsl", {"wl", 0xdc } },
-{ "pushl", {"rl", 0xdd } },
-{ "moval", {"alwl", 0xde } },
-{ "movaf", {"afwl", 0xde } },
-{ "pushal", {"al", 0xdf } },
-{ "pushaf", {"af", 0xdf } },
-{ "bbs", {"rlvbbb", 0xe0 } },
-{ "bbc", {"rlvbbb", 0xe1 } },
-{ "bbss", {"rlvbbb", 0xe2 } },
-{ "bbcs", {"rlvbbb", 0xe3 } },
-{ "bbsc", {"rlvbbb", 0xe4 } },
-{ "bbcc", {"rlvbbb", 0xe5 } },
-{ "bbssi", {"rlvbbb", 0xe6 } },
-{ "bbcci", {"rlvbbb", 0xe7 } },
-{ "blbs", {"rlbb", 0xe8 } },
-{ "blbc", {"rlbb", 0xe9 } },
-{ "ffs", {"rlrbvbwl", 0xea } },
-{ "ffc", {"rlrbvbwl", 0xeb } },
-{ "cmpv", {"rlrbvbrl", 0xec } },
-{ "cmpzv", {"rlrbvbrl", 0xed } },
-{ "extv", {"rlrbvbwl", 0xee } },
-{ "extzv", {"rlrbvbwl", 0xef } },
-{ "insv", {"rlrlrbvb", 0xf0 } },
-{ "acbl", {"rlrlmlbw", 0xf1 } },
-{ "aoblss", {"rlmlbb", 0xf2 } },
-{ "aobleq", {"rlmlbb", 0xf3 } },
-{ "sobgeq", {"mlbb", 0xf4 } },
-{ "sobgtr", {"mlbb", 0xf5 } },
-{ "cvtlb", {"rlwb", 0xf6 } },
-{ "cvtlw", {"rlww", 0xf7 } },
-{ "ashp", {"rbrwabrbrwab", 0xf8 } },
-{ "cvtlp", {"rlrwab", 0xf9 } },
-{ "callg", {"abab", 0xfa } },
-{ "calls", {"rlab", 0xfb } },
-{ "xfc", {"", 0xfc } },
- /* undefined opcodes here */
-{ "cvtdh", {"rdwh", 0x32fd } },
-{ "cvtgf", {"rgwh", 0x33fd } },
-{ "addg2", {"rgmg", 0x40fd } },
-{ "addg3", {"rgrgwg", 0x41fd } },
-{ "subg2", {"rgmg", 0x42fd } },
-{ "subg3", {"rgrgwg", 0x43fd } },
-{ "mulg2", {"rgmg", 0x44fd } },
-{ "mulg3", {"rgrgwg", 0x45fd } },
-{ "divg2", {"rgmg", 0x46fd } },
-{ "divg3", {"rgrgwg", 0x47fd } },
-{ "cvtgb", {"rgwb", 0x48fd } },
-{ "cvtgw", {"rgww", 0x49fd } },
-{ "cvtgl", {"rgwl", 0x4afd } },
-{ "cvtrgl", {"rgwl", 0x4bfd } },
-{ "cvtbg", {"rbwg", 0x4cfd } },
-{ "cvtwg", {"rwwg", 0x4dfd } },
-{ "cvtlg", {"rlwg", 0x4efd } },
-{ "acbg", {"rgrgmgbw", 0x4ffd } },
-{ "movg", {"rgwg", 0x50fd } },
-{ "cmpg", {"rgrg", 0x51fd } },
-{ "mnegg", {"rgwg", 0x52fd } },
-{ "tstg", {"rg", 0x53fd } },
-{ "emodg", {"rgrwrgwlwg", 0x54fd } },
-{ "polyg", {"rgrwab", 0x55fd } },
-{ "cvtgh", {"rgwh", 0x56fd } },
- /* undefined opcodes here */
-{ "addh2", {"rhmh", 0x60fd } },
-{ "addh3", {"rhrhwh", 0x61fd } },
-{ "subh2", {"rhmh", 0x62fd } },
-{ "subh3", {"rhrhwh", 0x63fd } },
-{ "mulh2", {"rhmh", 0x64fd } },
-{ "mulh3", {"rhrhwh", 0x65fd } },
-{ "divh2", {"rhmh", 0x66fd } },
-{ "divh3", {"rhrhwh", 0x67fd } },
-{ "cvthb", {"rhwb", 0x68fd } },
-{ "cvthw", {"rhww", 0x69fd } },
-{ "cvthl", {"rhwl", 0x6afd } },
-{ "cvtrhl", {"rhwl", 0x6bfd } },
-{ "cvtbh", {"rbwh", 0x6cfd } },
-{ "cvtwh", {"rwwh", 0x6dfd } },
-{ "cvtlh", {"rlwh", 0x6efd } },
-{ "acbh", {"rhrhmhbw", 0x6ffd } },
-{ "movh", {"rhwh", 0x70fd } },
-{ "cmph", {"rhrh", 0x71fd } },
-{ "mnegh", {"rhwh", 0x72fd } },
-{ "tsth", {"rh", 0x73fd } },
-{ "emodh", {"rhrwrhwlwh", 0x74fd } },
-{ "polyh", {"rhrwab", 0x75fd } },
-{ "cvthg", {"rhwg", 0x76fd } },
- /* undefined opcodes here */
-{ "clrh", {"wh", 0x7cfd } },
-{ "clro", {"wo", 0x7cfd } },
-{ "movo", {"rowo", 0x7dfd } },
-{ "movah", {"ahwl", 0x7efd } },
-{ "movao", {"aowl", 0x7efd } },
-{ "pushah", {"ah", 0x7ffd } },
-{ "pushao", {"ao", 0x7ffd } },
- /* undefined opcodes here */
-{ "cvtfh", {"rfwh", 0x98fd } },
-{ "cvtfg", {"rfwg", 0x99fd } },
- /* undefined opcodes here */
-{ "cvthf", {"rhwf", 0xf6fd } },
-{ "cvthd", {"rhwd", 0xf7fd } },
- /* undefined opcodes here */
-{ "bugl", {"rl", 0xfdff } },
-{ "bugw", {"rw", 0xfeff } },
- /* undefined opcodes here */
-
-{ "", {"", 0} } /* empty is end sentinel */
-
-}; /* votstrs */
-
-/* end: vax.opcode.h */
diff --git a/include/opcode/xgate.h b/include/opcode/xgate.h
deleted file mode 100644
index 8451e66c4..000000000
--- a/include/opcode/xgate.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/* xgate.h -- Freescale XGATE opcode list
- Copyright 2010, 2011, 2012 Free Software Foundation, Inc.
- Written by Sean Keys (skeys@ipdatasys.com)
-
- This file is part of the GNU opcodes library.
-
- This library 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 3, or (at your option)
- any later version.
-
- It 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 file; see the file COPYING. If not, write to the
- Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef _OPCODE_XGATE_H
-#define _OPCODE_XGATE_H
-
-/* XGATE CCR flag definitions. */
-#define XGATE_N_BIT 0x08 /* XGN - Sign Flag */
-#define XGATE_Z_BIT 0x04 /* XGZ - Zero Flag */
-#define XGATE_V_BIT 0x02 /* XGV - Overflow Flag */
-#define XGATE_C_BIT 0x01 /* XGC - Carry Flag */
-
-/* Access Detail Notation
- V — Vector fetch: always an aligned word read, lasts for at least one RISC core cycle
- P — Program word fetch: always an aligned word read, lasts for at least one RISC core cycle
- r — 8-bit data read: lasts for at least one RISC core cycle
- R — 16-bit data read: lasts for at least one RISC core cycle
- w — 8-bit data write: lasts for at least one RISC core cycle
- W — 16-bit data write: lasts for at least one RISC core cycle
- A — Alignment cycle: no read or write, lasts for zero or one RISC core cycles
- f — Free cycle: no read or write, lasts for one RISC core cycles. */
-#define XGATE_CYCLE_V 0x01
-#define XGATE_CYCLE_P 0x02
-#define XGATE_CYCLE_r 0x04
-#define XGATE_CYCLE_R 0x08
-#define XGATE_CYCLE_w 0x10
-#define XGATE_CYCLE_W 0x20
-#define XGATE_CYCLE_A 0x40
-#define XGATE_CYCLE_f 0x80
-
-/* XGATE operand formats as stored in the XGATE_opcode table.
- They are only used by GAS to recognize operands. */
-#define XGATE_OP_INH "" /* Inherent. */
-#define XGATE_OP_TRI "r,r,r" /* Register followed by two registers. */
-#define XGATE_OP_DYA "r,r" /* Register followed by a register. */
-#define XGATE_OP_IMM16 "r,if" /* Register followed by 16-bit value. */
-#define XGATE_OP_IMM8 "r,i8" /* Register followed by 8-bit value. */
-#define XGATE_OP_IMM4 "r,i4" /* Register followed by 4-bit value. */
-#define XGATE_OP_IMM3 "i3" /* Register followed by 3-bit value. */
-#define XGATE_OP_MON "r" /* Single register. */
-#define XGATE_OP_MON_R_C "r,c" /* General register followed by ccr register. */
-#define XGATE_OP_MON_C_R "c,r" /* CCR register followed by a general register. */
-#define XGATE_OP_MON_R_P "r,p" /* General register followed by pc register. */
-#define XGATE_OP_IDR "r,r,+" /* Three registers with the third having a -/+ directive. */
-#define XGATE_OP_IDO5 "r,r,i5" /* Two general registers followed by an immediate value. */
-#define XGATE_OP_REL9 "b9" /* 9-bit value that is relative to the current pc. */
-#define XGATE_OP_REL10 "ba" /* 10-bit value that is relative to the current pc. */
-#define XGATE_OP_DYA_MON "=r"
-/* Macro definitions. */
-#define XGATE_OP_IMM16mADD "r,if; addl addh"
-#define XGATE_OP_IMM16mAND "r,if; andl andh"
-#define XGATE_OP_IMM16mCPC "r,if; cmpl cpch"
-#define XGATE_OP_IMM16mSUB "r,if; subl subh"
-#define XGATE_OP_IMM16mLDW "r,if; ldl ldh"
-
-/* CPU variant identification. */
-#define XGATE_V1 0x1
-#define XGATE_V2 0x2
-#define XGATE_V3 0x4
-
-/* The opcode table definitions. */
-struct xgate_opcode
-{
- char * name; /* Op-code name. */
- char * constraints; /* Constraint chars. */
- char * format; /* Bit definitions. */
- unsigned int size; /* Opcode size in bytes. */
- unsigned int bin_opcode; /* Binary opcode with operands masked off. */
- unsigned char cycles_min; /* Minimum cpu cycles needed. */
- unsigned char cycles_max; /* Maximum cpu cycles needed. */
- unsigned char set_flags_mask; /* CCR flags set. */
- unsigned char clr_flags_mask; /* CCR flags cleared. */
- unsigned char chg_flags_mask; /* CCR flags changed. */
- unsigned char arch; /* CPU variant. */
-};
-
-/* The opcode table. The table contains all the opcodes (all pages).
- You can't rely on the order. */
-extern const struct xgate_opcode xgate_opcodes[];
-extern const int xgate_num_opcodes;
-
-#endif /* _OPCODE_XGATE_H */
diff --git a/include/os9k.h b/include/os9k.h
deleted file mode 100644
index e8baee17f..000000000
--- a/include/os9k.h
+++ /dev/null
@@ -1,181 +0,0 @@
-/* os9k.h - OS-9000 i386 module header definitions
- Copyright 2000 Free Software Foundation, Inc.
-
-This file is part of GNU CC.
-
-GNU CC is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU CC is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU CC; see the file COPYING. If not, write to
-the Free Software Foundation, 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-#if !defined(_MODULE_H)
-#define _MODULE_H
-
-#define _MPF386
-
-/* Size of common header less parity field. */
-#define N_M_PARITY (sizeof(mh_com)-sizeof(unisgned short))
-#define OLD_M_PARITY 46
-#define M_PARITY N_M_PARITY
-
-#ifdef _MPF68K
-#define MODSYNC 0x4afc /* Module header sync code for 680x0 processors. */
-#endif
-
-#ifdef _MPF386
-#define MODSYNC 0x4afc /* Module header sync code for 80386 processors. */
-#endif
-
-#define MODREV 1 /* Module format revision 1. */
-#define CRCCON 0x800063 /* CRC polynomial constant. */
-
-/* Module access permission values. */
-#define MP_OWNER_READ 0x0001
-#define MP_OWNER_WRITE 0x0002
-#define MP_OWNER_EXEC 0x0004
-#define MP_GROUP_READ 0x0010
-#define MP_GROUP_WRITE 0x0020
-#define MP_GROUP_EXEC 0x0040
-#define MP_WORLD_READ 0x0100
-#define MP_WORLD_WRITE 0x0200
-#define MP_WORLD_EXEC 0x0400
-#define MP_WORLD_ACCESS 0x0777
-#define MP_OWNER_MASK 0x000f
-#define MP_GROUP_MASK 0x00f0
-#define MP_WORLD_MASK 0x0f00
-#define MP_SYSTM_MASK 0xf000
-
-/* Module Type/Language values. */
-#define MT_ANY 0
-#define MT_PROGRAM 0x0001
-#define MT_SUBROUT 0x0002
-#define MT_MULTI 0x0003
-#define MT_DATA 0x0004
-#define MT_TRAPLIB 0x000b
-#define MT_SYSTEM 0x000c
-#define MT_FILEMAN 0x000d
-#define MT_DEVDRVR 0x000e
-#define MT_DEVDESC 0x000f
-#define MT_MASK 0xff00
-
-#define ML_ANY 0
-#define ML_OBJECT 1
-#define ML_ICODE 2
-#define ML_PCODE 3
-#define ML_CCODE 4
-#define ML_CBLCODE 5
-#define ML_FRTNCODE 6
-#define ML_MASK 0x00ff
-
-#define mktypelang(type, lang) (((type) << 8) | (lang))
-
-/* Module Attribute values. */
-#define MA_REENT 0x80
-#define MA_GHOST 0x40
-#define MA_SUPER 0x20
-#define MA_MASK 0xff00
-#define MR_MASK 0x00ff
-
-#define mkattrevs(attr, revs) (((attr) << 8) | (revs))
-
-#define m_user m_owner.grp_usr.usr
-#define m_group m_owner.grp_usr.grp
-#define m_group_user m_owner.group_user
-
-/* Macro definitions for accessing module header fields. */
-#define MODNAME(mod) ((u_char*)((u_char*)mod + ((Mh_com)mod)->m_name))
-#if 0
-/* Appears not to be used, and the u_int32 typedef is gone (because it
- conflicted with a Mach header. */
-#define MODSIZE(mod) ((u_int32)((Mh_com)mod)->m_size)
-#endif /* 0 */
-#define MHCOM_BYTES_SIZE 80
-#define N_BADMAG(a) (((a).a_info) != MODSYNC)
-
-typedef struct mh_com
-{
- /* Sync bytes ($4afc). */
- unsigned char m_sync[2];
- unsigned char m_sysrev[2]; /* System revision check value. */
- unsigned char m_size[4]; /* Module size. */
- unsigned char m_owner[4]; /* Group/user id. */
- unsigned char m_name[4]; /* Offset to module name. */
- unsigned char m_access[2]; /* Access permissions. */
- unsigned char m_tylan[2]; /* Type/lang. */
- unsigned char m_attrev[2]; /* Rev/attr. */
- unsigned char m_edit[2]; /* Edition. */
- unsigned char m_needs[4]; /* Module hardware requirements flags. (reserved). */
- unsigned char m_usage[4]; /* Comment string offset. */
- unsigned char m_symbol[4]; /* Symbol table offset. */
- unsigned char m_exec[4]; /* Offset to execution entry point. */
- unsigned char m_excpt[4]; /* Offset to exception entry point. */
- unsigned char m_data[4]; /* Data storage requirement. */
- unsigned char m_stack[4]; /* Stack size. */
- unsigned char m_idata[4]; /* Offset to initialized data. */
- unsigned char m_idref[4]; /* Offset to data reference lists. */
- unsigned char m_init[4]; /* Initialization routine offset. */
- unsigned char m_term[4]; /* Termination routine offset. */
- unsigned char m_ident[2]; /* Ident code for ident program. */
- char m_spare[8]; /* Reserved bytes. */
- unsigned char m_parity[2]; /* Header parity. */
-} mh_com,*Mh_com;
-
-/* Executable memory module. */
-typedef mh_com *Mh_exec,mh_exec;
-
-/* Data memory module. */
-typedef mh_com *Mh_data,mh_data;
-
-/* File manager memory module. */
-typedef mh_com *Mh_fman,mh_fman;
-
-/* Device driver module. */
-typedef mh_com *Mh_drvr,mh_drvr;
-
-/* Trap handler module. */
-typedef mh_com mh_trap, *Mh_trap;
-
-/* Device descriptor module. */
-typedef mh_com *Mh_dev,mh_dev;
-
-/* Configuration module. */
-typedef mh_com *Mh_config, mh_config;
-
-#if 0
-
-#if !defined(_MODDIR_H)
-/* Go get _os_fmod (and others). */
-#include <moddir.h>
-#endif
-
-error_code _os_crc (void *, u_int32, int *);
-error_code _os_datmod (char *, u_int32, u_int16 *, u_int16 *, u_int32, void **, mh_data **);
-error_code _os_get_moddir (void *, u_int32 *);
-error_code _os_initdata (mh_com *, void *);
-error_code _os_link (char **, mh_com **, void **, u_int16 *, u_int16 *);
-error_code _os_linkm (mh_com *, void **, u_int16 *, u_int16 *);
-error_code _os_load (char *, mh_com **, void **, u_int32, u_int16 *, u_int16 *, u_int32);
-error_code _os_mkmodule (char *, u_int32, u_int16 *, u_int16 *, u_int32, void **, mh_com **, u_int32);
-error_code _os_modaddr (void *, mh_com **);
-error_code _os_setcrc (mh_com *);
-error_code _os_slink (u_int32, char *, void **, void **, mh_com **);
-error_code _os_slinkm (u_int32, mh_com *, void **, void **);
-error_code _os_unlink (mh_com *);
-error_code _os_unload (char *, u_int32);
-error_code _os_tlink (u_int32, char *, void **, mh_trap **, void *, u_int32);
-error_code _os_tlinkm (u_int32, mh_com *, void **, void *, u_int32);
-error_code _os_iodel (mh_com *);
-error_code _os_vmodul (mh_com *, mh_com *, u_int32);
-#endif /* 0 */
-
-#endif
diff --git a/include/partition.h b/include/partition.h
deleted file mode 100644
index d8b554f8f..000000000
--- a/include/partition.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/* List implementation of a partition of consecutive integers.
- Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
- Contributed by CodeSourcery, LLC.
-
- This file is part of GCC.
-
- GCC 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.
-
- GCC 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 GCC; see the file COPYING. If not, write to
- the Free Software Foundation, 51 Franklin Street - Fifth Floor,
- Boston, MA 02110-1301, USA. */
-
-/* This package implements a partition of consecutive integers. The
- elements are partitioned into classes. Each class is represented
- by one of its elements, the canonical element, which is chosen
- arbitrarily from elements in the class. The principal operations
- on a partition are FIND, which takes an element, determines its
- class, and returns the canonical element for that class, and UNION,
- which unites the two classes that contain two given elements into a
- single class.
-
- The list implementation used here provides constant-time finds. By
- storing the size of each class with the class's canonical element,
- it is able to perform unions over all the classes in the partition
- in O (N log N) time. */
-
-#ifndef _PARTITION_H
-#define _PARTITION_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-#include "ansidecl.h"
-#include <stdio.h>
-
-struct partition_elem
-{
- /* The canonical element that represents the class containing this
- element. */
- int class_element;
- /* The next element in this class. Elements in each class form a
- circular list. */
- struct partition_elem* next;
- /* The number of elements in this class. Valid only if this is the
- canonical element for its class. */
- unsigned class_count;
-};
-
-typedef struct partition_def
-{
- /* The number of elements in this partition. */
- int num_elements;
- /* The elements in the partition. */
- struct partition_elem elements[1];
-} *partition;
-
-extern partition partition_new (int);
-extern void partition_delete (partition);
-extern int partition_union (partition, int, int);
-extern void partition_print (partition, FILE*);
-
-/* Returns the canonical element corresponding to the class containing
- ELEMENT__ in PARTITION__. */
-
-#define partition_find(partition__, element__) \
- ((partition__)->elements[(element__)].class_element)
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* _PARTITION_H */
diff --git a/include/plugin-api.h b/include/plugin-api.h
deleted file mode 100644
index 5797d4dce..000000000
--- a/include/plugin-api.h
+++ /dev/null
@@ -1,432 +0,0 @@
-/* plugin-api.h -- External linker plugin API. */
-
-/* Copyright 2009, 2010 Free Software Foundation, Inc.
- Written by Cary Coutant <ccoutant@google.com>.
-
- This file is part of binutils.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-/* This file defines the interface for writing a linker plugin, which is
- described at < http://gcc.gnu.org/wiki/whopr/driver >. */
-
-#ifndef PLUGIN_API_H
-#define PLUGIN_API_H
-
-#ifdef HAVE_STDINT_H
-#include <stdint.h>
-#elif defined(HAVE_INTTYPES_H)
-#include <inttypes.h>
-#endif
-#include <sys/types.h>
-#if !defined(HAVE_STDINT_H) && !defined(HAVE_INTTYPES_H) && \
- !defined(UINT64_MAX) && !defined(uint64_t)
-#error can not find uint64_t type
-#endif
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/* Status code returned by most API routines. */
-
-enum ld_plugin_status
-{
- LDPS_OK = 0,
- LDPS_NO_SYMS, /* Attempt to get symbols that haven't been added. */
- LDPS_BAD_HANDLE, /* No claimed object associated with given handle. */
- LDPS_ERR
- /* Additional Error codes TBD. */
-};
-
-/* The version of the API specification. */
-
-enum ld_plugin_api_version
-{
- LD_PLUGIN_API_VERSION = 1
-};
-
-/* The type of output file being generated by the linker. */
-
-enum ld_plugin_output_file_type
-{
- LDPO_REL,
- LDPO_EXEC,
- LDPO_DYN,
- LDPO_PIE
-};
-
-/* An input file managed by the plugin library. */
-
-struct ld_plugin_input_file
-{
- const char *name;
- int fd;
- off_t offset;
- off_t filesize;
- void *handle;
-};
-
-/* A symbol belonging to an input file managed by the plugin library. */
-
-struct ld_plugin_symbol
-{
- char *name;
- char *version;
- int def;
- int visibility;
- uint64_t size;
- char *comdat_key;
- int resolution;
-};
-
-/* An object's section. */
-
-struct ld_plugin_section
-{
- const void* handle;
- unsigned int shndx;
-};
-
-/* Whether the symbol is a definition, reference, or common, weak or not. */
-
-enum ld_plugin_symbol_kind
-{
- LDPK_DEF,
- LDPK_WEAKDEF,
- LDPK_UNDEF,
- LDPK_WEAKUNDEF,
- LDPK_COMMON
-};
-
-/* The visibility of the symbol. */
-
-enum ld_plugin_symbol_visibility
-{
- LDPV_DEFAULT,
- LDPV_PROTECTED,
- LDPV_INTERNAL,
- LDPV_HIDDEN
-};
-
-/* How a symbol is resolved. */
-
-enum ld_plugin_symbol_resolution
-{
- LDPR_UNKNOWN = 0,
-
- /* Symbol is still undefined at this point. */
- LDPR_UNDEF,
-
- /* This is the prevailing definition of the symbol, with references from
- regular object code. */
- LDPR_PREVAILING_DEF,
-
- /* This is the prevailing definition of the symbol, with no
- references from regular objects. It is only referenced from IR
- code. */
- LDPR_PREVAILING_DEF_IRONLY,
-
- /* This definition was pre-empted by a definition in a regular
- object file. */
- LDPR_PREEMPTED_REG,
-
- /* This definition was pre-empted by a definition in another IR file. */
- LDPR_PREEMPTED_IR,
-
- /* This symbol was resolved by a definition in another IR file. */
- LDPR_RESOLVED_IR,
-
- /* This symbol was resolved by a definition in a regular object
- linked into the main executable. */
- LDPR_RESOLVED_EXEC,
-
- /* This symbol was resolved by a definition in a shared object. */
- LDPR_RESOLVED_DYN,
-
- /* This is the prevailing definition of the symbol, with no
- references from regular objects. It is only referenced from IR
- code, but the symbol is exported and may be referenced from
- a dynamic object (not seen at link time). */
- LDPR_PREVAILING_DEF_IRONLY_EXP
-};
-
-/* The plugin library's "claim file" handler. */
-
-typedef
-enum ld_plugin_status
-(*ld_plugin_claim_file_handler) (
- const struct ld_plugin_input_file *file, int *claimed);
-
-/* The plugin library's "all symbols read" handler. */
-
-typedef
-enum ld_plugin_status
-(*ld_plugin_all_symbols_read_handler) (void);
-
-/* The plugin library's cleanup handler. */
-
-typedef
-enum ld_plugin_status
-(*ld_plugin_cleanup_handler) (void);
-
-/* The linker's interface for registering the "claim file" handler. */
-
-typedef
-enum ld_plugin_status
-(*ld_plugin_register_claim_file) (ld_plugin_claim_file_handler handler);
-
-/* The linker's interface for registering the "all symbols read" handler. */
-
-typedef
-enum ld_plugin_status
-(*ld_plugin_register_all_symbols_read) (
- ld_plugin_all_symbols_read_handler handler);
-
-/* The linker's interface for registering the cleanup handler. */
-
-typedef
-enum ld_plugin_status
-(*ld_plugin_register_cleanup) (ld_plugin_cleanup_handler handler);
-
-/* The linker's interface for adding symbols from a claimed input file. */
-
-typedef
-enum ld_plugin_status
-(*ld_plugin_add_symbols) (void *handle, int nsyms,
- const struct ld_plugin_symbol *syms);
-
-/* The linker's interface for getting the input file information with
- an open (possibly re-opened) file descriptor. */
-
-typedef
-enum ld_plugin_status
-(*ld_plugin_get_input_file) (const void *handle,
- struct ld_plugin_input_file *file);
-
-typedef
-enum ld_plugin_status
-(*ld_plugin_get_view) (const void *handle, const void **viewp);
-
-/* The linker's interface for releasing the input file. */
-
-typedef
-enum ld_plugin_status
-(*ld_plugin_release_input_file) (const void *handle);
-
-/* The linker's interface for retrieving symbol resolution information. */
-
-typedef
-enum ld_plugin_status
-(*ld_plugin_get_symbols) (const void *handle, int nsyms,
- struct ld_plugin_symbol *syms);
-
-/* The linker's interface for adding a compiled input file. */
-
-typedef
-enum ld_plugin_status
-(*ld_plugin_add_input_file) (const char *pathname);
-
-/* The linker's interface for adding a library that should be searched. */
-
-typedef
-enum ld_plugin_status
-(*ld_plugin_add_input_library) (const char *libname);
-
-/* The linker's interface for adding a library path that should be searched. */
-
-typedef
-enum ld_plugin_status
-(*ld_plugin_set_extra_library_path) (const char *path);
-
-/* The linker's interface for issuing a warning or error message. */
-
-typedef
-enum ld_plugin_status
-(*ld_plugin_message) (int level, const char *format, ...);
-
-/* The linker's interface for retrieving the number of sections in an object.
- The handle is obtained in the claim_file handler. This interface should
- only be invoked in the claim_file handler. This function sets *COUNT to
- the number of sections in the object. */
-
-typedef
-enum ld_plugin_status
-(*ld_plugin_get_input_section_count) (const void* handle, unsigned int *count);
-
-/* The linker's interface for retrieving the section type of a specific
- section in an object. This interface should only be invoked in the
- claim_file handler. This function sets *TYPE to an ELF SHT_xxx value. */
-
-typedef
-enum ld_plugin_status
-(*ld_plugin_get_input_section_type) (const struct ld_plugin_section section,
- unsigned int *type);
-
-/* The linker's interface for retrieving the name of a specific section in
- an object. This interface should only be invoked in the claim_file handler.
- This function sets *SECTION_NAME_PTR to a null-terminated buffer allocated
- by malloc. The plugin must free *SECTION_NAME_PTR. */
-
-typedef
-enum ld_plugin_status
-(*ld_plugin_get_input_section_name) (const struct ld_plugin_section section,
- char **section_name_ptr);
-
-/* The linker's interface for retrieving the contents of a specific section
- in an object. This interface should only be invoked in the claim_file
- handler. This function sets *SECTION_CONTENTS to point to a buffer that is
- valid until clam_file handler returns. It sets *LEN to the size of the
- buffer. */
-
-typedef
-enum ld_plugin_status
-(*ld_plugin_get_input_section_contents) (const struct ld_plugin_section section,
- const unsigned char **section_contents,
- size_t* len);
-
-/* The linker's interface for specifying the desired order of sections.
- The sections should be specifed using the array SECTION_LIST in the
- order in which they should appear in the final layout. NUM_SECTIONS
- specifies the number of entries in each array. This should be invoked
- in the all_symbols_read handler. */
-
-typedef
-enum ld_plugin_status
-(*ld_plugin_update_section_order) (const struct ld_plugin_section *section_list,
- unsigned int num_sections);
-
-/* The linker's interface for specifying that reordering of sections is
- desired so that the linker can prepare for it. This should be invoked
- before update_section_order, preferably in the claim_file handler. */
-
-typedef
-enum ld_plugin_status
-(*ld_plugin_allow_section_ordering) (void);
-
-/* The linker's interface for specifying that a subset of sections is
- to be mapped to a unique segment. If the plugin wants to call
- unique_segment_for_sections, it must call this function from a
- claim_file_handler or when it is first loaded. */
-
-typedef
-enum ld_plugin_status
-(*ld_plugin_allow_unique_segment_for_sections) (void);
-
-/* The linker's interface for specifying that a specific set of sections
- must be mapped to a unique segment. ELF segments do not have names
- and the NAME is used as the name of the newly created output section
- that is then placed in the unique PT_LOAD segment. FLAGS is used to
- specify if any additional segment flags need to be set. For instance,
- a specific segment flag can be set to identify this segment. Unsetting
- segment flags that would be set by default is not possible. The
- parameter SEGMENT_ALIGNMENT when non-zero will override the default. */
-
-typedef
-enum ld_plugin_status
-(*ld_plugin_unique_segment_for_sections) (
- const char* segment_name,
- uint64_t segment_flags,
- uint64_t segment_alignment,
- const struct ld_plugin_section * section_list,
- unsigned int num_sections);
-
-enum ld_plugin_level
-{
- LDPL_INFO,
- LDPL_WARNING,
- LDPL_ERROR,
- LDPL_FATAL
-};
-
-/* Values for the tv_tag field of the transfer vector. */
-
-enum ld_plugin_tag
-{
- LDPT_NULL = 0,
- LDPT_API_VERSION = 1,
- LDPT_GOLD_VERSION = 2,
- LDPT_LINKER_OUTPUT = 3,
- LDPT_OPTION = 4,
- LDPT_REGISTER_CLAIM_FILE_HOOK = 5,
- LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK = 6,
- LDPT_REGISTER_CLEANUP_HOOK = 7,
- LDPT_ADD_SYMBOLS = 8,
- LDPT_GET_SYMBOLS = 9,
- LDPT_ADD_INPUT_FILE = 10,
- LDPT_MESSAGE = 11,
- LDPT_GET_INPUT_FILE = 12,
- LDPT_RELEASE_INPUT_FILE = 13,
- LDPT_ADD_INPUT_LIBRARY = 14,
- LDPT_OUTPUT_NAME = 15,
- LDPT_SET_EXTRA_LIBRARY_PATH = 16,
- LDPT_GNU_LD_VERSION = 17,
- LDPT_GET_VIEW = 18,
- LDPT_GET_INPUT_SECTION_COUNT = 19,
- LDPT_GET_INPUT_SECTION_TYPE = 20,
- LDPT_GET_INPUT_SECTION_NAME = 21,
- LDPT_GET_INPUT_SECTION_CONTENTS = 22,
- LDPT_UPDATE_SECTION_ORDER = 23,
- LDPT_ALLOW_SECTION_ORDERING = 24,
- LDPT_GET_SYMBOLS_V2 = 25,
- LDPT_ALLOW_UNIQUE_SEGMENT_FOR_SECTIONS = 26,
- LDPT_UNIQUE_SEGMENT_FOR_SECTIONS = 27
-};
-
-/* The plugin transfer vector. */
-
-struct ld_plugin_tv
-{
- enum ld_plugin_tag tv_tag;
- union
- {
- int tv_val;
- const char *tv_string;
- ld_plugin_register_claim_file tv_register_claim_file;
- ld_plugin_register_all_symbols_read tv_register_all_symbols_read;
- ld_plugin_register_cleanup tv_register_cleanup;
- ld_plugin_add_symbols tv_add_symbols;
- ld_plugin_get_symbols tv_get_symbols;
- ld_plugin_add_input_file tv_add_input_file;
- ld_plugin_message tv_message;
- ld_plugin_get_input_file tv_get_input_file;
- ld_plugin_get_view tv_get_view;
- ld_plugin_release_input_file tv_release_input_file;
- ld_plugin_add_input_library tv_add_input_library;
- ld_plugin_set_extra_library_path tv_set_extra_library_path;
- ld_plugin_get_input_section_count tv_get_input_section_count;
- ld_plugin_get_input_section_type tv_get_input_section_type;
- ld_plugin_get_input_section_name tv_get_input_section_name;
- ld_plugin_get_input_section_contents tv_get_input_section_contents;
- ld_plugin_update_section_order tv_update_section_order;
- ld_plugin_allow_section_ordering tv_allow_section_ordering;
- ld_plugin_allow_unique_segment_for_sections tv_allow_unique_segment_for_sections;
- ld_plugin_unique_segment_for_sections tv_unique_segment_for_sections;
- } tv_u;
-};
-
-/* The plugin library's "onload" entry point. */
-
-typedef
-enum ld_plugin_status
-(*ld_plugin_onload) (struct ld_plugin_tv *tv);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* !defined(PLUGIN_API_H) */
diff --git a/include/progress.h b/include/progress.h
deleted file mode 100644
index 80ffbe24a..000000000
--- a/include/progress.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Default definitions for progress macros.
- Copyright 1994, 2010 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-/* The default definitions below are intended to be replaced by real
- definitions, if building the tools for an interactive programming
- environment. */
-
-#ifndef _PROGRESS_H
-#define _PROGRESS_H
-
-#ifndef START_PROGRESS
-#define START_PROGRESS(STR,N)
-#endif
-
-#ifndef PROGRESS
-#define PROGRESS(X)
-#endif
-
-#ifndef END_PROGRESS
-#define END_PROGRESS(STR)
-#endif
-
-#endif /* _PROGRESS_H */
diff --git a/include/safe-ctype.h b/include/safe-ctype.h
deleted file mode 100644
index 0266bf1aa..000000000
--- a/include/safe-ctype.h
+++ /dev/null
@@ -1,150 +0,0 @@
-/* <ctype.h> replacement macros.
-
- Copyright (C) 2000, 2001 Free Software Foundation, Inc.
- Contributed by Zack Weinberg <zackw@stanford.edu>.
-
-This file is part of the libiberty library.
-Libiberty is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
-
-Libiberty is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with libiberty; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-/* This is a compatible replacement of the standard C library's <ctype.h>
- with the following properties:
-
- - Implements all isxxx() macros required by C99.
- - Also implements some character classes useful when
- parsing C-like languages.
- - Does not change behavior depending on the current locale.
- - Behaves properly for all values in the range of a signed or
- unsigned char.
-
- To avoid conflicts, this header defines the isxxx functions in upper
- case, e.g. ISALPHA not isalpha. */
-
-#ifndef SAFE_CTYPE_H
-#define SAFE_CTYPE_H
-
-/* Determine host character set. */
-#define HOST_CHARSET_UNKNOWN 0
-#define HOST_CHARSET_ASCII 1
-#define HOST_CHARSET_EBCDIC 2
-
-#if '\n' == 0x0A && ' ' == 0x20 && '0' == 0x30 \
- && 'A' == 0x41 && 'a' == 0x61 && '!' == 0x21
-# define HOST_CHARSET HOST_CHARSET_ASCII
-#else
-# if '\n' == 0x15 && ' ' == 0x40 && '0' == 0xF0 \
- && 'A' == 0xC1 && 'a' == 0x81 && '!' == 0x5A
-# define HOST_CHARSET HOST_CHARSET_EBCDIC
-# else
-# define HOST_CHARSET HOST_CHARSET_UNKNOWN
-# endif
-#endif
-
-/* Categories. */
-
-enum {
- /* In C99 */
- _sch_isblank = 0x0001, /* space \t */
- _sch_iscntrl = 0x0002, /* nonprinting characters */
- _sch_isdigit = 0x0004, /* 0-9 */
- _sch_islower = 0x0008, /* a-z */
- _sch_isprint = 0x0010, /* any printing character including ' ' */
- _sch_ispunct = 0x0020, /* all punctuation */
- _sch_isspace = 0x0040, /* space \t \n \r \f \v */
- _sch_isupper = 0x0080, /* A-Z */
- _sch_isxdigit = 0x0100, /* 0-9A-Fa-f */
-
- /* Extra categories useful to cpplib. */
- _sch_isidst = 0x0200, /* A-Za-z_ */
- _sch_isvsp = 0x0400, /* \n \r */
- _sch_isnvsp = 0x0800, /* space \t \f \v \0 */
-
- /* Combinations of the above. */
- _sch_isalpha = _sch_isupper|_sch_islower, /* A-Za-z */
- _sch_isalnum = _sch_isalpha|_sch_isdigit, /* A-Za-z0-9 */
- _sch_isidnum = _sch_isidst|_sch_isdigit, /* A-Za-z0-9_ */
- _sch_isgraph = _sch_isalnum|_sch_ispunct, /* isprint and not space */
- _sch_iscppsp = _sch_isvsp|_sch_isnvsp, /* isspace + \0 */
- _sch_isbasic = _sch_isprint|_sch_iscppsp /* basic charset of ISO C
- (plus ` and @) */
-};
-
-/* Character classification. */
-extern const unsigned short _sch_istable[256];
-
-#define _sch_test(c, bit) (_sch_istable[(c) & 0xff] & (unsigned short)(bit))
-
-#define ISALPHA(c) _sch_test(c, _sch_isalpha)
-#define ISALNUM(c) _sch_test(c, _sch_isalnum)
-#define ISBLANK(c) _sch_test(c, _sch_isblank)
-#define ISCNTRL(c) _sch_test(c, _sch_iscntrl)
-#define ISDIGIT(c) _sch_test(c, _sch_isdigit)
-#define ISGRAPH(c) _sch_test(c, _sch_isgraph)
-#define ISLOWER(c) _sch_test(c, _sch_islower)
-#define ISPRINT(c) _sch_test(c, _sch_isprint)
-#define ISPUNCT(c) _sch_test(c, _sch_ispunct)
-#define ISSPACE(c) _sch_test(c, _sch_isspace)
-#define ISUPPER(c) _sch_test(c, _sch_isupper)
-#define ISXDIGIT(c) _sch_test(c, _sch_isxdigit)
-
-#define ISIDNUM(c) _sch_test(c, _sch_isidnum)
-#define ISIDST(c) _sch_test(c, _sch_isidst)
-#define IS_ISOBASIC(c) _sch_test(c, _sch_isbasic)
-#define IS_VSPACE(c) _sch_test(c, _sch_isvsp)
-#define IS_NVSPACE(c) _sch_test(c, _sch_isnvsp)
-#define IS_SPACE_OR_NUL(c) _sch_test(c, _sch_iscppsp)
-
-/* Character transformation. */
-extern const unsigned char _sch_toupper[256];
-extern const unsigned char _sch_tolower[256];
-#define TOUPPER(c) _sch_toupper[(c) & 0xff]
-#define TOLOWER(c) _sch_tolower[(c) & 0xff]
-
-/* Prevent the users of safe-ctype.h from accidently using the routines
- from ctype.h. Initially, the approach was to produce an error when
- detecting that ctype.h has been included. But this was causing
- trouble as ctype.h might get indirectly included as a result of
- including another system header (for instance gnulib's stdint.h).
- So we include ctype.h here and then immediately redefine its macros. */
-
-#include <ctype.h>
-#undef isalpha
-#define isalpha(c) do_not_use_isalpha_with_safe_ctype
-#undef isalnum
-#define isalnum(c) do_not_use_isalnum_with_safe_ctype
-#undef iscntrl
-#define iscntrl(c) do_not_use_iscntrl_with_safe_ctype
-#undef isdigit
-#define isdigit(c) do_not_use_isdigit_with_safe_ctype
-#undef isgraph
-#define isgraph(c) do_not_use_isgraph_with_safe_ctype
-#undef islower
-#define islower(c) do_not_use_islower_with_safe_ctype
-#undef isprint
-#define isprint(c) do_not_use_isprint_with_safe_ctype
-#undef ispunct
-#define ispunct(c) do_not_use_ispunct_with_safe_ctype
-#undef isspace
-#define isspace(c) do_not_use_isspace_with_safe_ctype
-#undef isupper
-#define isupper(c) do_not_use_isupper_with_safe_ctype
-#undef isxdigit
-#define isxdigit(c) do_not_use_isxdigit_with_safe_ctype
-#undef toupper
-#define toupper(c) do_not_use_toupper_with_safe_ctype
-#undef tolower
-#define tolower(c) do_not_use_tolower_with_safe_ctype
-
-#endif /* SAFE_CTYPE_H */
diff --git a/include/sha1.h b/include/sha1.h
deleted file mode 100644
index 4da5c37f3..000000000
--- a/include/sha1.h
+++ /dev/null
@@ -1,146 +0,0 @@
-/* Declarations of functions and data types used for SHA1 sum
- library functions.
- Copyright (C) 2000, 2001, 2003, 2005, 2006, 2008, 2010
- 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 3, 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef SHA1_H
-# define SHA1_H 1
-
-#include <stdio.h>
-
-#if defined HAVE_LIMITS_H || _LIBC
-# include <limits.h>
-#endif
-
-#include "ansidecl.h"
-
-/* The following contortions are an attempt to use the C preprocessor
- to determine an unsigned integral type that is 32 bits wide. An
- alternative approach is to use autoconf's AC_CHECK_SIZEOF macro, but
- doing that would require that the configure script compile and *run*
- the resulting executable. Locally running cross-compiled executables
- is usually not possible. */
-
-#ifdef _LIBC
-# include <sys/types.h>
-typedef u_int32_t sha1_uint32;
-typedef uintptr_t sha1_uintptr;
-#elif defined (HAVE_SYS_TYPES_H) && defined (HAVE_STDINT_H)
-#include <stdint.h>
-#include <sys/types.h>
-typedef uint32_t sha1_uint32;
-typedef uintptr_t sha1_uintptr;
-#else
-# define INT_MAX_32_BITS 2147483647
-
-/* If UINT_MAX isn't defined, assume it's a 32-bit type.
- This should be valid for all systems GNU cares about because
- that doesn't include 16-bit systems, and only modern systems
- (that certainly have <limits.h>) have 64+-bit integral types. */
-
-# ifndef INT_MAX
-# define INT_MAX INT_MAX_32_BITS
-# endif
-
-# if INT_MAX == INT_MAX_32_BITS
- typedef unsigned int sha1_uint32;
-# else
-# if SHRT_MAX == INT_MAX_32_BITS
- typedef unsigned short sha1_uint32;
-# else
-# if LONG_MAX == INT_MAX_32_BITS
- typedef unsigned long sha1_uint32;
-# else
- /* The following line is intended to evoke an error.
- Using #error is not portable enough. */
- "Cannot determine unsigned 32-bit data type."
-# endif
-# endif
-# endif
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Structure to save state of computation between the single steps. */
-struct sha1_ctx
-{
- sha1_uint32 A;
- sha1_uint32 B;
- sha1_uint32 C;
- sha1_uint32 D;
- sha1_uint32 E;
-
- sha1_uint32 total[2];
- sha1_uint32 buflen;
- sha1_uint32 buffer[32];
-};
-
-
-/* Initialize structure containing state of computation. */
-extern void sha1_init_ctx (struct sha1_ctx *ctx);
-
-/* Starting with the result of former calls of this function (or the
- initialization function update the context for the next LEN bytes
- starting at BUFFER.
- It is necessary that LEN is a multiple of 64!!! */
-extern void sha1_process_block (const void *buffer, size_t len,
- struct sha1_ctx *ctx);
-
-/* Starting with the result of former calls of this function (or the
- initialization function update the context for the next LEN bytes
- starting at BUFFER.
- It is NOT required that LEN is a multiple of 64. */
-extern void sha1_process_bytes (const void *buffer, size_t len,
- struct sha1_ctx *ctx);
-
-/* Process the remaining bytes in the buffer and put result from CTX
- in first 20 bytes following RESBUF. The result is always in little
- endian byte order, so that a byte-wise output yields to the wanted
- ASCII representation of the message digest.
-
- IMPORTANT: On some systems it is required that RESBUF be correctly
- aligned for a 32 bits value. */
-extern void *sha1_finish_ctx (struct sha1_ctx *ctx, void *resbuf);
-
-
-/* Put result from CTX in first 20 bytes following RESBUF. The result is
- always in little endian byte order, so that a byte-wise output yields
- to the wanted ASCII representation of the message digest.
-
- IMPORTANT: On some systems it is required that RESBUF is correctly
- aligned for a 32 bits value. */
-extern void *sha1_read_ctx (const struct sha1_ctx *ctx, void *resbuf);
-
-
-/* Compute SHA1 message digest for bytes read from STREAM. The
- resulting message digest number will be written into the 20 bytes
- beginning at RESBLOCK. */
-extern int sha1_stream (FILE *stream, void *resblock);
-
-/* Compute SHA1 message digest for LEN bytes beginning at BUFFER. The
- result is always in little endian byte order, so that a byte-wise
- output yields to the wanted ASCII representation of the message
- digest. */
-extern void *sha1_buffer (const char *buffer, size_t len, void *resblock);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/include/simple-object.h b/include/simple-object.h
deleted file mode 100644
index c4786757a..000000000
--- a/include/simple-object.h
+++ /dev/null
@@ -1,204 +0,0 @@
-/* simple-object.h -- simple routines to read and write object files
- Copyright 2010 Free Software Foundation, Inc.
- Written by Ian Lance Taylor, Google.
-
-This program is free software; you can redistribute it and/or modify it
-under the terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option) any
-later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-#ifndef SIMPLE_OBJECT_H
-#define SIMPLE_OBJECT_H
-
-#include <stddef.h>
-#include <sys/types.h>
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* This header file provides four types with associated functions.
- They are used to read and write object files. This is a minimal
- interface, intended to support the needs of gcc without bringing in
- all the power and complexity of BFD. */
-
-/* The type simple_object_read * is used to read an existing object
- file. */
-
-typedef struct simple_object_read_struct simple_object_read;
-
-/* Create an simple_object_read given DESCRIPTOR, an open file
- descriptor, and OFFSET, an offset within the file. The offset is
- for use with archives, and should be 0 for an ordinary object file.
- The descriptor must remain open until done with the returned
- simple_object_read. SEGMENT_NAME is used on Mach-O and is required
- on that platform: it means to only look at sections within the
- segment with that name. It is ignored for other object file
- formats. On error, this function returns NULL, and sets *ERRMSG to
- an error string and sets *ERR to an errno value or 0 if there is no
- relevant errno. */
-
-extern simple_object_read *
-simple_object_start_read (int descriptor, off_t offset,
- const char *segment_name, const char **errmsg,
- int *err);
-
-/* Call PFN for each section in SIMPLE_OBJECT, passing it the section
- name, offset within the file of the section contents, and length of
- the section contents. The offset within the file is relative to
- the offset passed to simple_object_start_read. The DATA argument
- to simple_object_find_sections is passed on to PFN. If PFN returns
- 0, the loop is stopped and simple_object_find_sections returns. If
- PFN returns non-zero, the loop continues. On success this returns
- NULL. On error it returns an error string, and sets *ERR to an
- errno value or 0 if there is no relevant errno. */
-
-extern const char *
-simple_object_find_sections (simple_object_read *simple_object,
- int (*pfn) (void *data, const char *,
- off_t offset, off_t length),
- void *data,
- int *err);
-
-/* Look for the section NAME in SIMPLE_OBJECT. This returns
- information for the first section NAME in SIMPLE_OBJECT. Note that
- calling this multiple times is inefficient; use
- simple_object_find_sections instead.
-
- If found, return 1 and set *OFFSET to the offset in the file of the
- section contents and set *LENGTH to the length of the section
- contents. *OFFSET will be relative to the offset passed to
- simple_object_start_read.
-
- If the section is not found, and no error occurs, return 0 and set
- *ERRMSG to NULL.
-
- If an error occurs, return 0, set *ERRMSG to an error message, and
- set *ERR to an errno value or 0 if there is no relevant errno. */
-
-extern int
-simple_object_find_section (simple_object_read *simple_object,
- const char *name, off_t *offset, off_t *length,
- const char **errmsg, int *err);
-
-/* Release all resources associated with SIMPLE_OBJECT. This does not
- close the file descriptor. */
-
-extern void
-simple_object_release_read (simple_object_read *);
-
-/* The type simple_object_attributes holds the attributes of an object
- file that matter for creating a file or ensuring that two files are
- compatible. This is a set of magic numbers. */
-
-typedef struct simple_object_attributes_struct simple_object_attributes;
-
-/* Fetch the attributes of SIMPLE_OBJECT. This information will
- persist until simple_object_attributes_release is called, even if
- SIMPLE_OBJECT is closed. On error this returns NULL, sets *ERRMSG
- to an error message, and sets *ERR to an errno value or 0 if there
- isn't one. */
-
-extern simple_object_attributes *
-simple_object_fetch_attributes (simple_object_read *simple_object,
- const char **errmsg, int *err);
-
-/* Merge the FROM attributes into TO. If two objects with these
- attributes could be linked together without error, returns NULL.
- Otherwise, returns an error message, and sets *ERR to an errno
- value or 0 if there isn't one. */
-
-extern const char *
-simple_object_attributes_merge (simple_object_attributes *to,
- simple_object_attributes *from,
- int *err);
-
-/* Release all resources associated with ATTRS. */
-
-extern void
-simple_object_release_attributes (simple_object_attributes *attrs);
-
-/* The type simple_object_write is used to create a new object file. */
-
-typedef struct simple_object_write_struct simple_object_write;
-
-/* Start creating a new object file which is like ATTRS. You must
- fetch attribute information from an existing object file before you
- can create a new one. There is currently no support for creating
- an object file de novo. The segment name is only used on Mach-O,
- where it is required. It means that all sections are created
- within that segment. It is ignored for other object file formats.
- On error this function returns NULL, sets *ERRMSG to an error
- message, and sets *ERR to an errno value or 0 if there isn't
- one. */
-
-extern simple_object_write *
-simple_object_start_write (simple_object_attributes *attrs,
- const char *segment_name,
- const char **errmsg, int *err);
-
-/* The type simple_object_write_section is a handle for a section
- which is being written. */
-
-typedef struct simple_object_write_section_struct simple_object_write_section;
-
-/* Add a section to SIMPLE_OBJECT. NAME is the name of the new
- section. ALIGN is the required alignment expressed as the number
- of required low-order 0 bits (e.g., 2 for alignment to a 32-bit
- boundary). The section is created as containing data, readable,
- not writable, not executable, not loaded at runtime. On error this
- returns NULL, sets *ERRMSG to an error message, and sets *ERR to an
- errno value or 0 if there isn't one. */
-
-extern simple_object_write_section *
-simple_object_write_create_section (simple_object_write *simple_object,
- const char *name, unsigned int align,
- const char **errmsg, int *err);
-
-/* Add data BUFFER/SIZE to SECTION in SIMPLE_OBJECT. If COPY is
- non-zero, the data will be copied into memory if necessary. If
- COPY is zero, BUFFER must persist until SIMPLE_OBJECT is released.
- On success this returns NULL. On error this returns an error
- message, and sets *ERR to an errno value or 0 if there isn't
- one. */
-
-extern const char *
-simple_object_write_add_data (simple_object_write *simple_object,
- simple_object_write_section *section,
- const void *buffer, size_t size,
- int copy, int *err);
-
-/* Write the complete object file to DESCRIPTOR, an open file
- descriptor. This returns NULL on success. On error this returns
- an error message, and sets *ERR to an errno value or 0 if there
- isn't one. */
-
-extern const char *
-simple_object_write_to_file (simple_object_write *simple_object,
- int descriptor, int *err);
-
-/* Release all resources associated with SIMPLE_OBJECT, including any
- simple_object_write_section's that may have been created. */
-
-extern void
-simple_object_release_write (simple_object_write *);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/include/som/ChangeLog b/include/som/ChangeLog
deleted file mode 100644
index e1f1ec59a..000000000
--- a/include/som/ChangeLog
+++ /dev/null
@@ -1,20 +0,0 @@
-2010-06-10 Tristan Gingold <gingold@adacore.com>
-
- * aout.h: New file.
- * clock.h: Likewise.
- * lst.h: Likewise.
- * reloc.h: Likewise.
- * internal.h: Likewise.
-
-Copyright (C) 2010-2012 Free Software Foundation, Inc.
-
-Copying and distribution of this file, with or without modification,
-are permitted in any medium without royalty provided the copyright
-notice and this notice are preserved.
-
-Local Variables:
-mode: change-log
-left-margin: 8
-fill-column: 74
-version-control: never
-End:
diff --git a/include/som/aout.h b/include/som/aout.h
deleted file mode 100644
index c3845edf6..000000000
--- a/include/som/aout.h
+++ /dev/null
@@ -1,249 +0,0 @@
-/* SOM a.out definitions for BFD.
- Copyright 2010 Free Software Foundation, Inc.
- Contributed by Tristan Gingold <gingold@adacore.com>, AdaCore.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _SOM_AOUT_H
-#define _SOM_AOUT_H
-
-#include "clock.h"
-
-/* Note: SOM uses bit-field in its structure. All you need to know is:
- - CPUs supported by SOM (hppa) are big-endian,
- - the MSB is numbered 0. */
-
-struct som_external_header
-{
- unsigned char system_id[2];
- unsigned char a_magic[2];
- unsigned char version_id[4];
- struct som_external_clock file_time;
- unsigned char entry_space[4];
- unsigned char entry_subspace[4];
- unsigned char entry_offset[4];
- unsigned char aux_header_location[4];
- unsigned char aux_header_size[4];
- unsigned char som_length[4];
- unsigned char presumed_dp[4];
- unsigned char space_location[4];
- unsigned char space_total[4];
- unsigned char subspace_location[4];
- unsigned char subspace_total[4];
- unsigned char loader_fixup_location[4];
- unsigned char loader_fixup_total[4];
- unsigned char space_strings_location[4];
- unsigned char space_strings_size[4];
- unsigned char init_array_location[4];
- unsigned char init_array_total[4];
- unsigned char compiler_location[4];
- unsigned char compiler_total[4];
- unsigned char symbol_location[4];
- unsigned char symbol_total[4];
- unsigned char fixup_request_location[4];
- unsigned char fixup_request_total[4];
- unsigned char symbol_strings_location[4];
- unsigned char symbol_strings_size[4];
- unsigned char unloadable_sp_location[4];
- unsigned char unloadable_sp_size[4];
- unsigned char checksum[4];
-};
-
-#define OLD_VERSION_ID 85082112
-#define NEW_VERSION_ID 87102412
-
-#define EXECLIBMAGIC 0x0104
-#define RELOC_MAGIC 0x0106
-#define EXEC_MAGIC 0x0107
-#define SHARE_MAGIC 0x0108
-#define SHMEM_MAGIC 0x0109
-#define DEMAND_MAGIC 0x010b
-#define DL_MAGIC 0x010d
-#define SHL_MAGIC 0x010e
-
-struct som_external_aux_id
-{
- unsigned char flags[4];
- unsigned char length[4];
-};
-
-/* Aux id types. */
-#define VERSION_AUX_ID 6
-#define COPYRIGHT_AUX_ID 9
-
-/* Aux id flags. */
-#define SOM_AUX_ID_MANDATORY (1 << 31)
-#define SOM_AUX_ID_COPY (1 << 30)
-#define SOM_AUX_ID_APPEND (1 << 29)
-#define SOM_AUX_ID_IGNORE (1 << 28)
-#define SOM_AUX_ID_TYPE_SH 0
-#define SOM_AUX_ID_TYPE_MASK 0xffff
-
-struct som_external_string_auxhdr
-{
- struct som_external_aux_id header_id;
-
- /* Length of the string, without the NUL. */
- unsigned char string_length[4];
-
- /* The string. */
-};
-
-struct som_external_exec_auxhdr
-{
- struct som_external_aux_id som_auxhdr;
-
- unsigned char exec_tsize[4];
- unsigned char exec_tmem[4];
- unsigned char exec_tfile[4];
- unsigned char exec_dsize[4];
- unsigned char exec_dmem[4];
- unsigned char exec_dfile[4];
- unsigned char exec_bsize[4];
- unsigned char exec_entry[4];
- unsigned char exec_flags[4];
- unsigned char exec_bfill[4];
-};
-
-#define AUX_HDR_SIZE sizeof (struct som_external_exec_auxhdr)
-
-struct som_external_space_dictionary_record
-{
- unsigned char name[4];
- unsigned char flags[4];
- unsigned char space_number[4];
- unsigned char subspace_index[4];
- unsigned char subspace_quantity[4];
- unsigned char loader_fix_index[4];
- unsigned char loader_fix_quantity[4];
- unsigned char init_pointer_index[4];
- unsigned char init_pointer_quantity[4];
-};
-
-#define SOM_SPACE_IS_LOADABLE (1 << 31)
-#define SOM_SPACE_IS_DEFINED (1 << 30)
-#define SOM_SPACE_IS_PRIVATE (1 << 29)
-#define SOM_SPACE_HAS_INTERMEDIATE_CODE (1 << 28)
-#define SOM_SPACE_IS_TSPECIFIC (1 << 27)
-#define SOM_SPACE_SORT_KEY_SH 8
-#define SOM_SPACE_SORT_KEY_MASK 0xff
-
-struct som_external_subspace_dictionary_record
-{
- unsigned char space_index[4];
- unsigned char flags[4];
- unsigned char file_loc_init_value[4];
- unsigned char initialization_length[4];
- unsigned char subspace_start[4];
- unsigned char subspace_length[4];
- unsigned char alignment[4];
- unsigned char name[4];
- unsigned char fixup_request_index[4];
- unsigned char fixup_request_quantity[4];
-};
-
-#define SOM_SUBSPACE_ACCESS_CONTROL_BITS_SH 25
-#define SOM_SUBSPACE_ACCESS_CONTROL_BITS_MASK 0x7f
-#define SOM_SUBSPACE_MEMORY_RESIDENT (1 << 24)
-#define SOM_SUBSPACE_DUP_COMMON (1 << 23)
-#define SOM_SUBSPACE_IS_COMMON (1 << 22)
-#define SOM_SUBSPACE_IS_LOADABLE (1 << 21)
-#define SOM_SUBSPACE_QUADRANT_SH 19
-#define SOM_SUBSPACE_QUADRANT_MASK 0x3
-#define SOM_SUBSPACE_INITIALLY_FROZEN (1 << 18)
-#define SOM_SUBSPACE_IS_FIRST (1 << 17)
-#define SOM_SUBSPACE_CODE_ONLY (1 << 16)
-#define SOM_SUBSPACE_SORT_KEY_SH 8
-#define SOM_SUBSPACE_SORT_KEY_MASK 0xff
-#define SOM_SUBSPACE_REPLICATE_INIT (1 << 7)
-#define SOM_SUBSPACE_CONTINUATION (1 << 6)
-#define SOM_SUBSPACE_IS_TSPECIFIC (1 << 5)
-#define SOM_SUBSPACE_IS_COMDAT (1 << 4)
-
-struct som_external_compilation_unit
-{
- unsigned char name[4];
- unsigned char language_name[4];
- unsigned char product_id[4];
- unsigned char version_id[4];
- unsigned char flags[4];
- struct som_external_clock compile_time;
- struct som_external_clock source_time;
-};
-
-struct som_external_symbol_dictionary_record
-{
- unsigned char flags[4];
- unsigned char name[4];
- unsigned char qualifier_name[4];
- unsigned char info[4];
- unsigned char symbol_value[4];
-};
-
-/* Flags fields. */
-#define SOM_SYMBOL_HIDDEN (1 << 31)
-#define SOM_SYMBOL_SECONDARY_DEF (1 << 30)
-#define SOM_SYMBOL_TYPE_SH 24
-#define SOM_SYMBOL_TYPE_MASK 0x3f
-#define SOM_SYMBOL_SCOPE_SH 20
-#define SOM_SYMBOL_SCOPE_MASK 0xf
-#define SOM_SYMBOL_CHECK_LEVEL_SH 17
-#define SOM_SYMBOL_CHECK_LEVEL_MASK 0x7
-#define SOM_SYMBOL_MUST_QUALIFY (1 << 16)
-#define SOM_SYMBOL_INITIALLY_FROZEN (1 << 15)
-#define SOM_SYMBOL_MEMORY_RESIDENT (1 << 14)
-#define SOM_SYMBOL_IS_COMMON (1 << 13)
-#define SOM_SYMBOL_DUP_COMMON (1 << 12)
-#define SOM_SYMBOL_XLEAST_SH 10
-#define SOM_SYMBOL_XLEAT_MASK 0x3
-#define SOM_SYMBOL_ARG_RELOC_SH 0
-#define SOM_SYMBOL_ARG_RELOC_MASK 0x3ff
-
-/* Info fields. */
-#define SOM_SYMBOL_HAS_LONG_RETURN (1 << 31)
-#define SOM_SYMBOL_NO_RELOCATION (1 << 30)
-#define SOM_SYMBOL_IS_COMDAT (1 << 29)
-#define SOM_SYMBOL_SYMBOL_INFO_SH 0
-#define SOM_SYMBOL_SYMBOL_INFO_MASK 0xffffff
-
-/* Symbol type definition. */
-#define ST_NULL 0
-#define ST_ABSOLUTE 1
-#define ST_DATA 2
-#define ST_CODE 3
-#define ST_PRI_PROG 4
-#define ST_SEC_PROG 5
-#define ST_ENTRY 6
-#define ST_STORAGE 7
-#define ST_STUB 8
-#define ST_MODULE 9
-#define ST_SYM_EXT 10
-#define ST_ARG_EXT 11
-#define ST_MILLICODE 12
-#define ST_PLABEL 13
-#define ST_OCT_DIS 14
-#define ST_MILLI_EXT 15
-#define ST_TSTORAGE 16
-#define ST_COMDAT 17
-
-/* Symbol scope. */
-#define SS_UNSAT 0
-#define SS_EXTERNAL 1
-#define SS_LOCAL 2
-#define SS_UNIVERSAL 3
-
-#endif /* _SOM_AOUT_H */
diff --git a/include/som/clock.h b/include/som/clock.h
deleted file mode 100644
index e2a7ba6d4..000000000
--- a/include/som/clock.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/* SOM clock definition for BFD.
- Copyright 2010 Free Software Foundation, Inc.
- Contributed by Tristan Gingold <gingold@adacore.com>, AdaCore.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _SOM_CLOCK_H
-#define _SOM_CLOCK_H
-
-struct som_external_clock
-{
- unsigned char secs[4];
- unsigned char nanosecs[4];
-};
-
-#endif /* _SOM_CLOCK_H */
diff --git a/include/som/internal.h b/include/som/internal.h
deleted file mode 100644
index e3889fb59..000000000
--- a/include/som/internal.h
+++ /dev/null
@@ -1,206 +0,0 @@
-/* SOM internal definitions for BFD.
- Copyright 2010 Free Software Foundation, Inc.
- Contributed by Tristan Gingold <gingold@adacore.com>, AdaCore.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _SOM_INTERNAL_H
-#define _SOM_INTERNAL_H
-
-struct som_clock
-{
- unsigned int secs;
- unsigned int nanosecs;
-};
-
-struct som_header
-{
- unsigned short system_id;
- unsigned short a_magic;
- unsigned int version_id;
- struct som_clock file_time;
- unsigned int entry_space;
- unsigned int entry_subspace;
- unsigned int entry_offset;
- unsigned int aux_header_location;
- unsigned int aux_header_size;
- unsigned int som_length;
- unsigned int presumed_dp;
- unsigned int space_location;
- unsigned int space_total;
- unsigned int subspace_location;
- unsigned int subspace_total;
- unsigned int loader_fixup_location;
- unsigned int loader_fixup_total;
- unsigned int space_strings_location;
- unsigned int space_strings_size;
- unsigned int init_array_location;
- unsigned int init_array_total;
- unsigned int compiler_location;
- unsigned int compiler_total;
- unsigned int symbol_location;
- unsigned int symbol_total;
- unsigned int fixup_request_location;
- unsigned int fixup_request_total;
- unsigned int symbol_strings_location;
- unsigned int symbol_strings_size;
- unsigned int unloadable_sp_location;
- unsigned int unloadable_sp_size;
- unsigned int checksum;
-};
-
-struct som_aux_id
-{
- unsigned int mandatory : 1;
- unsigned int copy : 1;
- unsigned int append : 1;
- unsigned int ignore : 1;
- unsigned int reserved : 12;
-
- /* Header type. */
- unsigned int type : 16;
-
- /* Length of the header in bytes, without the two word identifier. */
- unsigned int length;
-};
-
-/* Generic auxiliary string header. */
-struct som_string_auxhdr
-{
- struct som_aux_id header_id;
-
- /* Length of the string, without the NUL. */
- unsigned int string_length;
-
- /* The string. */
- char string[1];
-};
-
-struct som_name_pt
-{
- char *name;
- unsigned int strx;
-};
-
-struct som_compilation_unit
-{
- /* Source file that produced the SOM. */
- struct som_name_pt name;
-
- /* Name of the language used when creating this SOM. */
- struct som_name_pt language_name;
-
- /* Identificaton of the compiler. */
- struct som_name_pt product_id;
-
- /* Version id of the compiler. */
- struct som_name_pt version_id;
-
- unsigned int flags;
- struct som_clock compile_time;
- struct som_clock source_time;
-};
-
-struct som_exec_auxhdr
-{
- struct som_aux_id som_auxhdr;
-
- long exec_tsize;
- long exec_tmem;
- long exec_tfile;
- long exec_dsize;
- long exec_dmem;
- long exec_dfile;
- long exec_bsize;
- long exec_entry;
- long exec_flags;
- long exec_bfill;
-};
-
-struct som_space_dictionary_record
-{
- unsigned int name;
- unsigned int is_loadable : 1;
- unsigned int is_defined : 1;
- unsigned int is_private : 1;
- unsigned int has_intermediate_code : 1;
- unsigned int is_tspecific : 1;
- unsigned int reserved : 11;
- unsigned int sort_key : 8;
- unsigned int reserved2 : 8;
- int space_number;
- int subspace_index;
- unsigned int subspace_quantity;
- int loader_fix_index;
- unsigned int loader_fix_quantity;
- int init_pointer_index;
- unsigned int init_pointer_quantity;
-};
-
-struct som_subspace_dictionary_record
-{
- int space_index;
- unsigned int access_control_bits : 7;
- unsigned int memory_resident : 1;
- unsigned int dup_common : 1;
- unsigned int is_common : 1;
- unsigned int is_loadable : 1;
- unsigned int quadrant : 2;
- unsigned int initially_frozen : 1;
- unsigned int is_first : 1;
- unsigned int code_only : 1;
- unsigned int sort_key : 8;
- unsigned int replicate_init : 1;
- unsigned int continuation : 1;
- unsigned int is_tspecific : 1;
- unsigned int is_comdat : 1;
- unsigned int reserved : 4;
- int file_loc_init_value;
- unsigned int initialization_length;
- unsigned int subspace_start;
- unsigned int subspace_length;
- unsigned int reserved2 : 5;
- unsigned int alignment : 27;
- unsigned int name;
- int fixup_request_index;
- unsigned int fixup_request_quantity;
-};
-
-struct som_lst_header
-{
- unsigned short system_id;
- unsigned short a_magic;
- unsigned int version_id;
- struct som_clock file_time;
- unsigned int hash_loc;
- unsigned int hash_size;
- unsigned int module_count;
- unsigned int module_limit;
- unsigned int dir_loc;
- unsigned int export_loc;
- unsigned int export_count;
- unsigned int import_loc;
- unsigned int aux_loc;
- unsigned int aux_size;
- unsigned int string_loc;
- unsigned int string_size;
- unsigned int free_list;
- unsigned int file_end;
- unsigned int checksum;
-};
-
-#endif /* _SOM_INTERNAL_H */
diff --git a/include/som/lst.h b/include/som/lst.h
deleted file mode 100644
index 6088b47c4..000000000
--- a/include/som/lst.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/* SOM lst definitions for BFD.
- Copyright 2010 Free Software Foundation, Inc.
- Contributed by Tristan Gingold <gingold@adacore.com>, AdaCore.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _SOM_LST_H
-#define _SOM_LST_H
-
-#include "clock.h"
-
-/* See 4.2 Libraray Symbol Table Header Record. */
-struct som_external_lst_header
-{
- unsigned char system_id[2];
- unsigned char a_magic[2];
- unsigned char version_id[4];
- struct som_external_clock file_time;
- unsigned char hash_loc[4];
- unsigned char hash_size[4];
- unsigned char module_count[4];
- unsigned char module_limit[4];
- unsigned char dir_loc[4];
- unsigned char export_loc[4];
- unsigned char export_count[4];
- unsigned char import_loc[4];
- unsigned char aux_loc[4];
- unsigned char aux_size[4];
- unsigned char string_loc[4];
- unsigned char string_size[4];
- unsigned char free_list[4];
- unsigned char file_end[4];
- unsigned char checksum[4];
-};
-
-#define VERSION_ID 85082112
-#define LIBMAGIC 0x0619
-#define LIBMAGIC_EXEC 0x0104
-
-struct som_external_lst_symbol_record
-{
- unsigned char flags[4];
- unsigned char name[4];
- unsigned char qualifier_name[4];
- unsigned char symbol_info[4];
- unsigned char symbol_value[4];
- unsigned char symbol_descriptor[4];
- unsigned char reserved;
- unsigned char max_num_args;
- unsigned char min_num_args;
- unsigned char num_args;
- unsigned char som_index[4];
- unsigned char symbol_key[4];
- unsigned char next_entry[4];
-};
-
-/* Fields of flags. */
-#define LST_SYMBOL_HIDDEN (1 << 31)
-#define LST_SYMBOL_SECONDARY_DEF (1 << 30)
-#define LST_SYMBOL_SYMBOL_TYPE_SH 24
-#define LST_SYMBOL_SYMBOL_SCOPE_SH 20
-#define LST_SYMBOL_CHECK_LEVEL_SH 17
-#define LST_SYMBOL_MUST_QUALIFY (1 << 16)
-#define LST_SYMBOL_INITIALY_FROZEN (1 << 15)
-#define LST_SYMBOL_MEMORY_RESIDENT (1 << 14)
-#define LST_SYMBOL_IS_COMMON (1 << 13)
-#define LST_SYMBOL_DUP_COMMON (1 << 12)
-#define LST_SYMBOL_XLEAST_SH 10
-#define LST_SYMBOL_ARG_RELOC_SH 0
-
-/* According to 4.3.2 SOM Directory. */
-
-struct som_external_som_entry
-{
- unsigned char location[4];
- unsigned char length[4];
-};
-
-#endif /* _SOM_LST_H */
diff --git a/include/som/reloc.h b/include/som/reloc.h
deleted file mode 100644
index 417b5ee1a..000000000
--- a/include/som/reloc.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/* SOM relocation definitions for BFD.
- Copyright 2010 Free Software Foundation, Inc.
- Contributed by Tristan Gingold <gingold@adacore.com>, AdaCore.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _SOM_RELOC_H
-#define _SOM_RELOC_H
-
-#define R_NO_RELOCATION 0
-#define R_ZEROES 0x20
-#define R_UNINIT 0x22
-#define R_RELOCATION 0x24
-#define R_DATA_ONE_SYMBOL 0x25
-#define R_DATA_PLABEL 0x27
-#define R_SPACE_REF 0x29
-#define R_REPEATED_INIT 0x2a
-#define R_PCREL_CALL 0x30
-#define R_SHORT_PCREL_MODE 0x3e
-#define R_LONG_PCREL_MODE 0x3f
-#define R_ABS_CALL 0x40
-#define R_DP_RELATIVE 0x50
-#define R_DATA_GPREL 0x72
-#define R_INDIRECT_CALL 0x76
-#define R_PLT_REL 0x77
-#define R_DLT_REL 0x78
-#define R_CODE_ONE_SYMBOL 0x80
-#define R_MILLI_REL 0xae
-#define R_CODE_PLABEL 0xb0
-#define R_BREAKPOINT 0xb2
-#define R_ENTRY 0xb3
-#define R_ALT_ENTRY 0xb5
-#define R_EXIT 0xb6
-#define R_BEGIN_TRY 0xb7
-#define R_END_TRY 0xb8
-#define R_BEGIN_BRTAB 0xbb
-#define R_END_BRTAB 0xbc
-#define R_STATEMENT 0xbd
-#define R_DATA_EXPR 0xc0
-#define R_CODE_EXPR 0xc1
-#define R_FSEL 0xc2
-#define R_LSEL 0xc3
-#define R_RSEL 0xc4
-#define R_N_MODE 0xc5
-#define R_S_MODE 0xc6
-#define R_D_MODE 0xc7
-#define R_R_MODE 0xc8
-#define R_DATA_OVERRIDE 0xc9
-#define R_TRANSLATED 0xce
-#define R_AUX_UNWIND 0xcf
-#define R_COMP1 0xd0
-#define R_COMP2 0xd1
-#define R_COMP3 0xd2
-#define R_PREV_FIXUP 0xd3
-#define R_SEC_STMT 0xd7
-#define R_N0SEL 0xd8
-#define R_N1SEL 0xd9
-#define R_LINETAB 0xda
-#define R_LINETAB_ESC 0xdb
-#define R_LTP_OVERRIDE 0xdc
-#define R_COMMENT 0xdd
-#define R_TP_OVERRIDE 0xde
-#define R_RESERVED 0xdf
-
-#endif /* _SOM_RELOC_H */
diff --git a/include/sort.h b/include/sort.h
deleted file mode 100644
index 582af8162..000000000
--- a/include/sort.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/* Sorting algorithms.
- Copyright (C) 2000, 2002 Free Software Foundation, Inc.
- Contributed by Mark Mitchell <mark@codesourcery.com>.
-
-This file is part of GCC.
-
-GCC 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.
-
-GCC 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 GCC; see the file COPYING. If not, write to
-the Free Software Foundation, 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-#ifndef SORT_H
-#define SORT_H
-
-#include <sys/types.h> /* For size_t */
-#ifdef __STDC__
-#include <stddef.h>
-#endif /* __STDC__ */
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-#include "ansidecl.h"
-
-/* Sort an array of pointers. */
-
-extern void sort_pointers (size_t, void **, void **);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* SORT_H */
-
-
-
-
diff --git a/include/splay-tree.h b/include/splay-tree.h
deleted file mode 100644
index ec48a1fa5..000000000
--- a/include/splay-tree.h
+++ /dev/null
@@ -1,157 +0,0 @@
-/* A splay-tree datatype.
- Copyright 1998, 1999, 2000, 2002, 2005, 2007, 2009, 2010
- Free Software Foundation, Inc.
- Contributed by Mark Mitchell (mark@markmitchell.com).
-
- This file is part of GCC.
-
- GCC 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.
-
- GCC 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 GCC; see the file COPYING. If not, write to
- the Free Software Foundation, 51 Franklin Street - Fifth Floor,
- Boston, MA 02110-1301, USA. */
-
-/* For an easily readable description of splay-trees, see:
-
- Lewis, Harry R. and Denenberg, Larry. Data Structures and Their
- Algorithms. Harper-Collins, Inc. 1991.
-
- The major feature of splay trees is that all basic tree operations
- are amortized O(log n) time for a tree with n nodes. */
-
-#ifndef _SPLAY_TREE_H
-#define _SPLAY_TREE_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-#include "ansidecl.h"
-
-#ifdef HAVE_STDINT_H
-#include <stdint.h>
-#endif
-#ifdef HAVE_INTTYPES_H
-#include <inttypes.h>
-#endif
-
-/* Use typedefs for the key and data types to facilitate changing
- these types, if necessary. These types should be sufficiently wide
- that any pointer or scalar can be cast to these types, and then
- cast back, without loss of precision. */
-typedef uintptr_t splay_tree_key;
-typedef uintptr_t splay_tree_value;
-
-/* Forward declaration for a node in the tree. */
-typedef struct splay_tree_node_s *splay_tree_node;
-
-/* The type of a function which compares two splay-tree keys. The
- function should return values as for qsort. */
-typedef int (*splay_tree_compare_fn) (splay_tree_key, splay_tree_key);
-
-/* The type of a function used to deallocate any resources associated
- with the key. */
-typedef void (*splay_tree_delete_key_fn) (splay_tree_key);
-
-/* The type of a function used to deallocate any resources associated
- with the value. */
-typedef void (*splay_tree_delete_value_fn) (splay_tree_value);
-
-/* The type of a function used to iterate over the tree. */
-typedef int (*splay_tree_foreach_fn) (splay_tree_node, void*);
-
-/* The type of a function used to allocate memory for tree root and
- node structures. The first argument is the number of bytes needed;
- the second is a data pointer the splay tree functions pass through
- to the allocator. This function must never return zero. */
-typedef void *(*splay_tree_allocate_fn) (int, void *);
-
-/* The type of a function used to free memory allocated using the
- corresponding splay_tree_allocate_fn. The first argument is the
- memory to be freed; the latter is a data pointer the splay tree
- functions pass through to the freer. */
-typedef void (*splay_tree_deallocate_fn) (void *, void *);
-
-/* The nodes in the splay tree. */
-struct splay_tree_node_s {
- /* The key. */
- splay_tree_key key;
-
- /* The value. */
- splay_tree_value value;
-
- /* The left and right children, respectively. */
- splay_tree_node left;
- splay_tree_node right;
-};
-
-/* The splay tree itself. */
-struct splay_tree_s {
- /* The root of the tree. */
- splay_tree_node root;
-
- /* The comparision function. */
- splay_tree_compare_fn comp;
-
- /* The deallocate-key function. NULL if no cleanup is necessary. */
- splay_tree_delete_key_fn delete_key;
-
- /* The deallocate-value function. NULL if no cleanup is necessary. */
- splay_tree_delete_value_fn delete_value;
-
- /* Node allocate function. Takes allocate_data as a parameter. */
- splay_tree_allocate_fn allocate;
-
- /* Free function for nodes and trees. Takes allocate_data as a parameter. */
- splay_tree_deallocate_fn deallocate;
-
- /* Parameter for allocate/free functions. */
- void *allocate_data;
-};
-
-typedef struct splay_tree_s *splay_tree;
-
-extern splay_tree splay_tree_new (splay_tree_compare_fn,
- splay_tree_delete_key_fn,
- splay_tree_delete_value_fn);
-extern splay_tree splay_tree_new_with_allocator (splay_tree_compare_fn,
- splay_tree_delete_key_fn,
- splay_tree_delete_value_fn,
- splay_tree_allocate_fn,
- splay_tree_deallocate_fn,
- void *);
-extern splay_tree splay_tree_new_typed_alloc (splay_tree_compare_fn,
- splay_tree_delete_key_fn,
- splay_tree_delete_value_fn,
- splay_tree_allocate_fn,
- splay_tree_allocate_fn,
- splay_tree_deallocate_fn,
- void *);
-extern void splay_tree_delete (splay_tree);
-extern splay_tree_node splay_tree_insert (splay_tree,
- splay_tree_key,
- splay_tree_value);
-extern void splay_tree_remove (splay_tree, splay_tree_key);
-extern splay_tree_node splay_tree_lookup (splay_tree, splay_tree_key);
-extern splay_tree_node splay_tree_predecessor (splay_tree, splay_tree_key);
-extern splay_tree_node splay_tree_successor (splay_tree, splay_tree_key);
-extern splay_tree_node splay_tree_max (splay_tree);
-extern splay_tree_node splay_tree_min (splay_tree);
-extern int splay_tree_foreach (splay_tree, splay_tree_foreach_fn, void*);
-extern int splay_tree_compare_ints (splay_tree_key, splay_tree_key);
-extern int splay_tree_compare_pointers (splay_tree_key, splay_tree_key);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* _SPLAY_TREE_H */
diff --git a/include/symcat.h b/include/symcat.h
deleted file mode 100644
index b46128796..000000000
--- a/include/symcat.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/* Symbol concatenation utilities.
-
- Copyright (C) 1998, 2000, 2010 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, Inc.,
- 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef SYM_CAT_H
-#define SYM_CAT_H
-
-#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
-#define CONCAT2(a,b) a##b
-#define CONCAT3(a,b,c) a##b##c
-#define CONCAT4(a,b,c,d) a##b##c##d
-#define CONCAT5(a,b,c,d,e) a##b##c##d##e
-#define CONCAT6(a,b,c,d,e,f) a##b##c##d##e##f
-#define STRINGX(s) #s
-#else
-/* Note one should never pass extra whitespace to the CONCATn macros,
- e.g. CONCAT2(foo, bar) because traditonal C will keep the space between
- the two labels instead of concatenating them. Instead, make sure to
- write CONCAT2(foo,bar). */
-#define CONCAT2(a,b) a/**/b
-#define CONCAT3(a,b,c) a/**/b/**/c
-#define CONCAT4(a,b,c,d) a/**/b/**/c/**/d
-#define CONCAT5(a,b,c,d,e) a/**/b/**/c/**/d/**/e
-#define CONCAT6(a,b,c,d,e,f) a/**/b/**/c/**/d/**/e/**/f
-#define STRINGX(s) "s"
-#endif
-
-#define XCONCAT2(a,b) CONCAT2(a,b)
-#define XCONCAT3(a,b,c) CONCAT3(a,b,c)
-#define XCONCAT4(a,b,c,d) CONCAT4(a,b,c,d)
-#define XCONCAT5(a,b,c,d,e) CONCAT5(a,b,c,d,e)
-#define XCONCAT6(a,b,c,d,e,f) CONCAT6(a,b,c,d,e,f)
-
-/* Note the layer of indirection here is typically used to allow
- stringification of the expansion of macros. I.e. "#define foo
- bar", "XSTRING(foo)", to yield "bar". Be aware that this only
- works for __STDC__, not for traditional C which will still resolve
- to "foo". */
-#define XSTRING(s) STRINGX(s)
-
-#endif /* SYM_CAT_H */
diff --git a/include/timeval-utils.h b/include/timeval-utils.h
deleted file mode 100644
index 1caf9b36d..000000000
--- a/include/timeval-utils.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/* Basic struct timeval utilities.
- Copyright (C) 2011 Free Software Foundation, Inc.
-
-This file is part of the libiberty library.
-Libiberty is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
-
-Libiberty is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with libiberty; see the file COPYING.LIB. If not,
-write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-#ifndef TIMEVAL_UTILS_H
-#define TIMEVAL_UTILS_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-/* forward decl */
-struct timeval;
-
-extern void timeval_add (struct timeval *result,
- const struct timeval *a, const struct timeval *b);
-
-extern void timeval_sub (struct timeval *result,
- const struct timeval *a, const struct timeval *b);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* TIMEVAL_UTILS_H */
diff --git a/include/vms/ChangeLog b/include/vms/ChangeLog
deleted file mode 100644
index 8d5e91d31..000000000
--- a/include/vms/ChangeLog
+++ /dev/null
@@ -1,87 +0,0 @@
-2012-03-08 Tristan Gingold <gingold@adacore.com>
-
- * lbr.h (struct vms_lhd): Add comments.
-
-2010-05-27 Tristan Gingold <gingold@adacore.com>
-
- * lbr.h: Improve comments.
-
-2010-05-17 Tristan Gingold <gingold@adacore.com>
-
- * eidc.h: New file.
- * esgps.h: New file.
-
-2010-05-03 Tristan Gingold <gingold@adacore.com>
-
- * dmt.h: Improve comments.
-
-2010-04-30 Tristan Gingold <gingold@adacore.com>
-
- * lbr.h (struct vms_kbn): New structure.
-
-2010-04-30 Tristan Gingold <gingold@adacore.com>
-
- * lbr.h (LBR__C_TYP_ISHSTB): Added.
- (LHD_SANEID4): Renamed to ...
- (LHD_SANEID6): ... this.
- (LBR_MAJORID, LBR_ELFMAJORID): New macros.
- (struct vms_rfa): New structure.
- (struct vms_idxdef): Renamed to ...
- (struct vms_idx): ... this.
- (struct vms_idxdef2): Renamed to ...
- (struct vms_elfidx): ... this.
- (ELFIDX__WEAK, ELFIDX__GROUP, ELFIDX__LISTRFA, ELFIDX__SYMESC): New
- macros.
- (struct vms_lhs, struct vms_lns): New structures.
- (struct vms_mhd): Add missing fields.
- (MHD__C_MHDLEN): New macro.
-
-2010-03-31 Tristan Gingold <gingold@adacore.com>
-
- * dcx.h: New file.
- * dsc.h: New file.
- * esdfm.h: New file.
- * esdfv.h: New file.
- * internal.h: New file.
- * lbr.h: New file.
- * prt.h: New file.
- * shl.h (struct vms_shl): Add comments.
- * esrf.h (ESRF__B_NAMLNG): New macro.
- * esdf.h (ESDF__B_NAMLNG): New macro.
- * emh.h: Add macros for fields maximum value.
- * eisd.h (EISD__M_PROTECT): Fix typo in comment.
- Add macros for offsets, version, section type and match control.
- Merge vms_eisd_ext into vms_eisd.
- * eihvn.h (EIHVN__MULTI_PROCESSING_BIT, EIHVN__GALAXY_BIT): Added.
- * eihs.h: Remove blank line.
- * eihd.h (struct vms_eihd): Add comments, add image subtype names.
- * eiha.h (struct vms_eiha): Add inishr and inishr_h fields.
- * eiaf.h (struct vms_eiaf): Fix base_va size.
- * egsy.h: Add comments.
- * egsd.h: Remove blank line.
- * egps.h: Add flag names.
- * eeom.h (EEOM__M_WKTFR): Added.
- * dst.h (DST__K_CXX): Added, and reident languages.
- (DST__K_SRC_INCRLNUM_B): Added.
- Indent and order pcline commands.
- Add record begin/end, enumerations, type specification, value
- specification, label, discontinue range definitions.
-
-2010-02-17 Tristan Gingold <gingold@adacore.com>
-
- * dmt.h, dst.h, eeom.h, egps.h, egsd.h, egst.h, egsy.h: New Files.
- * eiaf.h, eicp.h, eiha.h, eihd.h, eihi.h, eihs.h, eihvn.h: Ditto.
- * eisd.h, emh.h, eobjrec.h, esdf.h, esrf.h, etir.h, shl.h: Ditto.
-
-Copyright (C) 2010-2012 Free Software Foundation, Inc.
-
-Copying and distribution of this file, with or without modification,
-are permitted in any medium without royalty provided the copyright
-notice and this notice are preserved.
-
-Local Variables:
-mode: change-log
-left-margin: 8
-fill-column: 74
-version-control: never
-End:
diff --git a/include/vms/dcx.h b/include/vms/dcx.h
deleted file mode 100644
index b6f373ab5..000000000
--- a/include/vms/dcx.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/* Alpha VMS external format for DeCompression.
-
- Copyright 2010 Free Software Foundation, Inc.
- Written by Tristan Gingold <gingold@adacore.com>, AdaCore.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef _VMS_DCX_H
-#define _VMS_DCX_H
-
-struct vms_dcxmap
-{
- unsigned char size[4];
- unsigned char version[2];
-
- unsigned char pad[2];
- unsigned char sanity[4];
- unsigned char flags[4];
- unsigned char nsubs[2];
- unsigned char sub0[2];
-};
-
-struct vms_dcxsbm
-{
- unsigned char size[2];
- unsigned char min_char;
- unsigned char max_char;
- unsigned char escape;
- unsigned char flags_bits;
- unsigned char flags[2];
- unsigned char nodes[2];
- unsigned char next[2];
-};
-
-#endif /* _VMS_DCX_H */
diff --git a/include/vms/dmt.h b/include/vms/dmt.h
deleted file mode 100644
index f2aad6e99..000000000
--- a/include/vms/dmt.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/* Alpha VMS external format of Debug Module Table.
-
- Copyright 2010 Free Software Foundation, Inc.
- Written by Tristan Gingold <gingold@adacore.com>, AdaCore.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef _VMS_DMT_H
-#define _VMS_DMT_H
-
-struct vms_dmt_header
-{
- /* Offset in the DST of the module. */
- unsigned char modbeg[4];
-
- /* Size of the DST chunk for this module. */
- unsigned char size[4];
-
- /* Number of psect for this module. */
- unsigned char psect_count[2];
-
- unsigned char mbz[2];
-};
-
-struct vms_dmt_psect
-{
- /* Address of the psect. */
- unsigned char start[4];
-
- /* Length of the psect. */
- unsigned char length[4];
-};
-#endif /* _VMS_DMT_H */
diff --git a/include/vms/dsc.h b/include/vms/dsc.h
deleted file mode 100644
index 5a1b0e238..000000000
--- a/include/vms/dsc.h
+++ /dev/null
@@ -1,129 +0,0 @@
-/* Alpha VMS external format of Descriptors.
-
- Copyright 2010 Free Software Foundation, Inc.
- Written by Tristan Gingold <gingold@adacore.com>, AdaCore.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef _VMS_DSC_H
-#define _VMS_DSC_H
-
-/* Descriptors. */
-#define DSC__K_DTYPE_Z 0 /* Unspecified. */
-#define DSC__K_DTYPE_V 1 /* Bit. */
-#define DSC__K_DTYPE_BU 2 /* Byte logical. */
-#define DSC__K_DTYPE_WU 3 /* Word logical. */
-#define DSC__K_DTYPE_LU 4 /* Longword logical. */
-#define DSC__K_DTYPE_QU 5 /* Quadword logical. */
-#define DSC__K_DTYPE_B 6 /* Byte integer. */
-#define DSC__K_DTYPE_W 7 /* Word integer. */
-#define DSC__K_DTYPE_L 8 /* Longword integer. */
-#define DSC__K_DTYPE_Q 9 /* Quadword integer. */
-#define DSC__K_DTYPE_F 10 /* Single-precision floating. */
-#define DSC__K_DTYPE_D 11 /* Double-precision floating. */
-#define DSC__K_DTYPE_FC 12 /* Complex. */
-#define DSC__K_DTYPE_DC 13 /* Double-precision Complex. */
-#define DSC__K_DTYPE_T 14 /* ASCII text string. */
-#define DSC__K_DTYPE_NU 15 /* Numeric string, unsigned. */
-#define DSC__K_DTYPE_NL 16 /* Numeric string, left separate sign. */
-#define DSC__K_DTYPE_NLO 17 /* Numeric string, left overpunched sign. */
-#define DSC__K_DTYPE_NR 18 /* Numeric string, right separate sign. */
-#define DSC__K_DTYPE_NRO 19 /* Numeric string, right overpunched sign. */
-#define DSC__K_DTYPE_NZ 20 /* Numeric string, zoned sign. */
-#define DSC__K_DTYPE_P 21 /* Packed decimal string. */
-#define DSC__K_DTYPE_ZI 22 /* Sequence of instructions. */
-#define DSC__K_DTYPE_ZEM 23 /* Procedure entry mask. */
-#define DSC__K_DTYPE_DSC 24 /* Descriptor, used for arrays of dyn strings. */
-#define DSC__K_DTYPE_OU 25 /* Octaword logical. */
-#define DSC__K_DTYPE_O 26 /* Octaword integer. */
-#define DSC__K_DTYPE_G 27 /* Double precision G floating, 64 bit. */
-#define DSC__K_DTYPE_H 28 /* Quadruple precision floating, 128 bit. */
-#define DSC__K_DTYPE_GC 29 /* Double precision complex, G floating. */
-#define DSC__K_DTYPE_HC 30 /* Quadruple precision complex, H floating. */
-#define DSC__K_DTYPE_CIT 31 /* COBOL intermediate temporary. */
-#define DSC__K_DTYPE_BPV 32 /* Bound Procedure Value. */
-#define DSC__K_DTYPE_BLV 33 /* Bound Label Value. */
-#define DSC__K_DTYPE_VU 34 /* Bit Unaligned. */
-#define DSC__K_DTYPE_ADT 35 /* Absolute Date-Time. */
-#define DSC__K_DTYPE_VT 37 /* Varying Text. */
-#define DSC__K_DTYPE_T2 38 /* 16-bit char. */
-#define DSC__K_DTYPE_VT2 39 /* 16-bit varying char. */
-
-#define DSC__K_CLASS_S 1 /* Fixed-length scalar/string. */
-#define DSC__K_CLASS_D 2 /* Dynamic string. */
-#define DSC__K_CLASS_V 3 /* Reserved. */
-#define DSC__K_CLASS_A 4 /* Contiguous array. */
-#define DSC__K_CLASS_P 5 /* Procedure argument descriptor. */
-#define DSC__K_CLASS_PI 6 /* Procedure incarnation descriptor. */
-#define DSC__K_CLASS_J 7 /* Reserved. */
-#define DSC__K_CLASS_JI 8 /* Obsolete. */
-#define DSC__K_CLASS_SD 9 /* Decimal (scalar) string. */
-#define DSC__K_CLASS_NCA 10 /* Non-contiguous array. */
-#define DSC__K_CLASS_VS 11 /* Varying string. */
-#define DSC__K_CLASS_VSA 12 /* Varying string array. */
-#define DSC__K_CLASS_UBS 13 /* Unaligned bit string. */
-#define DSC__K_CLASS_UBA 14 /* Unaligned bit array. */
-#define DSC__K_CLASS_SB 15 /* String with bounds. */
-#define DSC__K_CLASS_UBSB 16 /* Unaligned bit string with bounds. */
-
-/* Common part. */
-
-struct vms_dsc
-{
- unsigned char length[2];
- unsigned char dtype;
- unsigned char bclass;
- unsigned char pointer[4];
-};
-
-struct vms_dsc64
-{
- unsigned char mbo[2];
- unsigned char dtype;
- unsigned char bclass;
- unsigned char mbmo[4];
- unsigned char length[8];
- unsigned char pointer[8];
-};
-
-struct vms_dsc_nca
-{
- unsigned char length[2];
- unsigned char dtype;
- unsigned char bclass;
- unsigned char pointer[4];
-
- unsigned char scale;
- unsigned char digits;
- unsigned char aflags;
- unsigned char dimct;
-
- unsigned char arsize[4];
- unsigned char a0[4];
-};
-
-struct vms_dsc_ubs
-{
- unsigned char length[2];
- unsigned char dtype;
- unsigned char bclass;
- unsigned char base[4];
- unsigned char pos[4];
-};
-
-#endif /* _VMS_DSC_H */
diff --git a/include/vms/dst.h b/include/vms/dst.h
deleted file mode 100644
index 231d39708..000000000
--- a/include/vms/dst.h
+++ /dev/null
@@ -1,274 +0,0 @@
-/* Alpha VMS external format of Debug Symbol Table.
-
- Copyright 2010 Free Software Foundation, Inc.
- Written by Tristan Gingold <gingold@adacore.com>, AdaCore.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef _VMS_DST_H
-#define _VMS_DST_H
-
-/* Also available in vms freeware v5.0 debug/alpha_dstrecrds.sdl. */
-
-struct vms_dst_header
-{
- /* Length. */
- unsigned char length[2];
-
- /* Type. */
- unsigned char type[2];
-};
-
-/* Beginning of module. */
-#define DST__K_MODBEG 188
-
-/* Some well known languages. */
-#define DST__K_MACRO 0
-#define DST__K_BLISS 2
-#define DST__K_C 7
-#define DST__K_ADA 9
-#define DST__K_CXX 15
-
-struct vms_dst_modbeg
-{
- unsigned char flags;
- unsigned char unused;
- unsigned char language[4];
- unsigned char major[2];
- unsigned char minor[2];
- /* Module name ASCIC. */
- /* Ident name ASCIC. */
-};
-
-/* Routine begin. */
-#define DST__K_RTNBEG 190
-
-struct vms_dst_rtnbeg
-{
- unsigned char flags;
-
- /* Address of the code. */
- unsigned char address[4];
-
- /* Procedure descriptor address. */
- unsigned char pd_address[4];
-
- /* Name: ASCIC */
-};
-
-/* Line number. */
-#define DST__K_LINE_NUM 185
-
-struct vms_dst_pcline
-{
- unsigned char pcline_command;
- unsigned char field[4];
-};
-
-#define DST__K_DELTA_PC_W 1
-#define DST__K_INCR_LINUM 2
-#define DST__K_INCR_LINUM_W 3
-#define DST__K_SET_LINUM_INCR 4
-#define DST__K_SET_LINUM_INCR_W 5
-#define DST__K_RESET_LINUM_INCR 6
-#define DST__K_BEG_STMT_MODE 7
-#define DST__K_END_STMT_MODE 8
-#define DST__K_SET_LINUM 9
-#define DST__K_SET_PC 10
-#define DST__K_SET_PC_W 11
-#define DST__K_SET_PC_L 12
-#define DST__K_SET_STMTNUM 13
-#define DST__K_TERM 14
-#define DST__K_TERM_W 15
-#define DST__K_SET_ABS_PC 16
-#define DST__K_DELTA_PC_L 17
-#define DST__K_INCR_LINUM_L 18
-#define DST__K_SET_LINUM_B 19
-#define DST__K_SET_LINUM_L 20
-#define DST__K_TERM_L 21
-
-/* Routine end. */
-#define DST__K_RTNEND 191
-
-struct vms_dst_rtnend
-{
- unsigned char unused;
- unsigned char size[4];
-};
-
-/* Prologue. */
-#define DST__K_PROLOG 162
-
-struct vms_dst_prolog
-{
- unsigned char bkpt_addr[4];
-};
-
-/* Epilog. */
-#define DST__K_EPILOG 127
-
-struct vms_dst_epilog
-{
- unsigned char flags;
- unsigned char count[4];
-};
-
-/* Module end. */
-#define DST__K_MODEND 189
-
-/* Block begin. */
-#define DST__K_BLKBEG 176
-
-struct vms_dst_blkbeg
-{
- unsigned char unused;
- unsigned char address[4];
- /* Name ASCIC. */
-};
-
-/* Block end. */
-#define DST__K_BLKEND 177
-
-struct vms_dst_blkend
-{
- unsigned char unused;
- unsigned char size[4];
-};
-
-/* Source correlation. */
-#define DST__K_SOURCE 155
-
-#define DST__K_SRC_DECLFILE 1
-#define DST__K_SRC_SETFILE 2
-#define DST__K_SRC_SETREC_L 3
-#define DST__K_SRC_SETREC_W 4
-#define DST__K_SRC_SETLNUM_L 5
-#define DST__K_SRC_SETLNUM_W 6
-#define DST__K_SRC_INCRLNUM_B 7
-#define DST__K_SRC_DEFLINES_W 10
-#define DST__K_SRC_DEFLINES_B 11
-#define DST__K_SRC_FORMFEED 16
-
-struct vms_dst_src_decl_src
-{
- unsigned char length;
- unsigned char flags;
- unsigned char fileid[2];
- unsigned char rms_cdt[8];
- unsigned char rms_ebk[4];
- unsigned char rms_ffb[2];
- unsigned char rms_rfo;
- /* Filename ASCIC. */
-};
-
-/* Record begin. */
-#define DST__K_RECBEG 171
-
-struct vms_dst_recbeg
-{
- unsigned char vflags;
- unsigned char value[4];
- /* Filename ASCIC. */
-};
-
-/* Record end. */
-#define DST__K_RECEND 172
-
-/* Enumeration begin. */
-#define DST__K_ENUMBEG 165
-
-/* Enumeration element. */
-#define DST__K_ENUMELT 164
-
-/* Enumeration end. */
-#define DST__K_ENUMEND 166
-
-/* Separate type specification. */
-#define DST__K_SEPTYP 163
-
-/* Type specification. */
-#define DST__K_TYPSPEC 175
-
-#define DST__K_TS_ATOM 1 /* Atomic. */
-#define DST__K_TS_DSC 2 /* VMS Standard descriptor. */
-#define DST__K_TS_IND 3 /* Indirect. */
-#define DST__K_TS_TPTR 4 /* Typed pointer. */
-#define DST__K_TS_PTR 5 /* Pointer. */
-#define DST__K_TS_PIC 6 /* Pictured. */
-#define DST__K_TS_ARRAY 7
-#define DST__K_TS_SET 8
-#define DST__K_TS_SUBRANGE 9 /* Subrange. */
-#define DST__K_TS_ADA_DSC 10 /* Ada descriptor. */
-#define DST__K_TS_FILE 11
-#define DST__K_TS_AREA 12 /* Area (PL/I). */
-#define DST__K_TS_OFFSET 13 /* Offset (PL/I). */
-#define DST__K_TS_NOV_LENG 14 /* Novel Length. */
-#define DST__K_TS_IND_TSPEC 15 /* Internal to debugger. */
-#define DST__K_TS_SELF_REL_LABEL 16 /* Self-relative label (PL/I). */
-#define DST__K_TS_RFA 17 /* (Basic). */
-#define DST__K_TS_TASK 18 /* (Ada). */
-#define DST__K_TS_ADA_ARRAY 19
-#define DST__K_TS_XMOD_IND 20 /* Cross-module indirect type spec. */
-#define DST__K_TS_CONSTRAINED 21 /* (Ada). */
-#define DST__K_TS_MAYBE_CONSTR 22 /* Might-be-constrained (Ada). */
-#define DST__K_TS_DYN_LOV_LENG 23
-#define DST__K_TS_TPTR_D 24 /* Typed pointer to descriptor. */
-#define DST__K_TS_SCAN_TREE 25
-#define DST__K_TS_SCAN_TREEPTR 26
-#define DST__K_TS_INCOMPLETE 27
-#define DST__K_TS_BLISS_BLOCK 28
-#define DST__K_TS_TPTR_64 29
-#define DST__K_TS_PTR_64 30
-#define DST__K_TS_REF 31 /* C++ referenced type. */
-#define DST__K_TS_REF_64 32
-
-/* Value Specification. */
-#define DST__K_VFLAGS_NOVAL 128 /* No value. */
-#define DST__K_VFLAGS_NOTACTIVE 248 /* Not active at current PC. */
-#define DST__K_VFLAGS_UNALLOC 249 /* Not allocated. */
-#define DST__K_VFLAGS_DSC 250 /* Descriptor format. */
-#define DST__K_VFLAGS_TVS 251 /* Trailing value spec. */
-#define DST__K_VS_FOLLOWS 253 /* Value specification follow. */
-#define DST__K_VFLAGS_BITOFFS 255 /* Value is a bit offset. */
-
-/* Vflags fields. */
-#define DST__K_VALKIND_MASK 0x03
-#define DST__K_INDIR 0x04
-#define DST__K_DISP 0x08
-#define DST__K_REGNUM_MASK 0xf0
-#define DST__K_REGNUM_SHIFT 4
-
-#define DST__K_VALKIND_LITERAL 0
-#define DST__K_VALKIND_ADDR 1
-#define DST__K_VALKIND_DESC 2
-#define DST__K_VALKIND_REG 3
-
-/* Label. */
-#define DST__K_LABEL 187
-
-struct vms_dst_label
-{
- unsigned char unused;
-
- unsigned char value[4];
- unsigned char name[1];
-};
-
-/* Discontiguous range. */
-#define DST__K_DIS_RANGE 118
-#endif /* _VMS_DST_H */
diff --git a/include/vms/eeom.h b/include/vms/eeom.h
deleted file mode 100644
index 807e44855..000000000
--- a/include/vms/eeom.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/* Alpha VMS external format of Extended End Of Module.
-
- Copyright 2010 Free Software Foundation, Inc.
- Written by Tristan Gingold <gingold@adacore.com>, AdaCore.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef _VMS_EEOM_H
-#define _VMS_EEOM_H
-
-/* Completion flags. */
-#define EEOM__C_SUCCESS 0
-#define EEOM__C_WARNING 1
-#define EEOM__C_ERROR 2
-#define EEOM__C_ABORT 3
-
-struct vms_eeom
-{
- /* Record type. */
- unsigned char rectyp[2];
-
- /* Record size. */
- unsigned char size[2];
-
- /* Number of conditional linkage pairs. */
- unsigned char total_lps[4];
-
- /* Completion code. */
- unsigned char comcod[2];
-
-
- /* Transfer address flags. */
- unsigned char tfrflg;
-
- /* Pad for alignment. */
- unsigned char temp;
-
- /* Psect of transfer address. */
- unsigned char psindx[4];
-
- /* Transfer address. */
- unsigned char tfradr[8];
-};
-
-#define EEOM__M_WKTFR (1 << 0) /* Transfer address is weak. */
-
-#endif /* _VMS_EEOM_H */
diff --git a/include/vms/egps.h b/include/vms/egps.h
deleted file mode 100644
index e92df810b..000000000
--- a/include/vms/egps.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Alpha VMS external format of Extended Program Section Definition.
-
- Copyright 2010 Free Software Foundation, Inc.
- Written by Tristan Gingold <gingold@adacore.com>, AdaCore.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef _VMS_EGPS_H
-#define _VMS_EGPS_H
-
-struct vms_egps
-{
- /* Entry type. */
- unsigned char gsdtyp[2];
-
- /* Length of the entry. */
- unsigned char gsdsiz[2];
-
- /* Psect alignment. */
- unsigned char align;
-
- /* Pad for alignment. */
- unsigned char temp;
-
- unsigned char flags[2];
-
- /* Length of this contribution. */
- unsigned char alloc[4];
-
- /* Name. */
- unsigned char namlng;
- unsigned char name[31];
-};
-
-#define EGPS__V_PIC (1 << 0) /* Not meaningful. */
-#define EGPS__V_LIB (1 << 1) /* Defined in a shareable image. */
-#define EGPS__V_OVR (1 << 2) /* Overlaid contribution. */
-#define EGPS__V_REL (1 << 3) /* Relocatable. */
-#define EGPS__V_GBL (1 << 4) /* Global. */
-#define EGPS__V_SHR (1 << 5) /* Shareable. */
-#define EGPS__V_EXE (1 << 6) /* Executable. */
-#define EGPS__V_RD (1 << 7) /* Readable. */
-#define EGPS__V_WRT (1 << 8) /* Writable. */
-#define EGPS__V_VEC (1 << 9) /* Change mode dispatch or message vectors. */
-#define EGPS__V_NOMOD (1 << 10) /* Demand-zero. */
-#define EGPS__V_COM (1 << 11) /* Conditional storage. */
-#define EGPS__V_ALLOC_64BIT (1 << 12) /* Allocated in 64-bit space. */
-
-#endif /* _VMS_EGPS_H */
diff --git a/include/vms/egsd.h b/include/vms/egsd.h
deleted file mode 100644
index f9be3981a..000000000
--- a/include/vms/egsd.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/* Alpha VMS external format of Extended Global Symbol Directory.
-
- Copyright 2010 Free Software Foundation, Inc.
- Written by Tristan Gingold <gingold@adacore.com>, AdaCore.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef _VMS_EGSD_H
-#define _VMS_EGSD_H
-
-#define EGSD__K_ENTRIES 2 /* Offset to first entry in record. */
-#define EGSD__C_ENTRIES 2 /* Offset to first entry in record. */
-#define EGSD__C_PSC 0 /* Psect definition. */
-#define EGSD__C_SYM 1 /* Symbol specification. */
-#define EGSD__C_IDC 2 /* Random entity check. */
-#define EGSD__C_SPSC 5 /* Shareable image psect definition. */
-#define EGSD__C_SYMV 6 /* Vectored (dual-valued) versions of SYM. */
-#define EGSD__C_SYMM 7 /* Masked versions of SYM. */
-#define EGSD__C_SYMG 8 /* EGST - gst version of SYM. */
-#define EGSD__C_MAXRECTYP 8 /* Maximum entry type defined. */
-
-struct vms_egsd
-{
- /* Record type. */
- unsigned char rectyp[2];
-
- /* Record size. */
- unsigned char recsiz[2];
-
- /* Padding for alignment. */
- unsigned char alignlw[4];
-
- /* Followed by egsd entries. */
-};
-
-struct vms_egsd_entry
-{
- /* Entry type. */
- unsigned char gsdtyp[2];
-
- /* Length of the entry. */
- unsigned char gsdsiz[2];
-};
-
-#endif /* _VMS_EGSD_H */
diff --git a/include/vms/egst.h b/include/vms/egst.h
deleted file mode 100644
index d4244842e..000000000
--- a/include/vms/egst.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/* Alpha VMS external format of Extended Global Symbol Definition.
-
- Copyright 2010 Free Software Foundation, Inc.
- Written by Tristan Gingold <gingold@adacore.com>, AdaCore.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef _VMS_EGST_H
-#define _VMS_EGST_H
-
-struct vms_egst
-{
- struct vms_egsy header;
-
- unsigned char value[8];
- unsigned char lp_1[8];
- unsigned char lp_2[8];
-
- unsigned char psindx[4];
- unsigned char namlng;
- unsigned char name[31];
-};
-
-#endif /* _VMS_EGST_H */
diff --git a/include/vms/egsy.h b/include/vms/egsy.h
deleted file mode 100644
index dd36ab218..000000000
--- a/include/vms/egsy.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/* Alpha VMS external format of Extended Global Symbol.
-
- Copyright 2010 Free Software Foundation, Inc.
- Written by Tristan Gingold <gingold@adacore.com>, AdaCore.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef _VMS_EGSY_H
-#define _VMS_EGSY_H
-
-#define EGSY__W_FLAGS 6
-
-#define EGSY__V_WEAK 0x0001 /* Weak symbol definition. */
-#define EGSY__V_DEF 0x0002 /* Symbol definition. */
-#define EGSY__V_UNI 0x0004 /* Reserved. */
-#define EGSY__V_REL 0x0008 /* Relocatable (vs absolute). */
-#define EGSY__V_COMM 0x0010 /* Conditional symbol def. */
-#define EGSY__V_VECEP 0x0020 /* Reserved. */
-#define EGSY__V_NORM 0x0040 /* Normal procedure definition. */
-#define EGSY__V_QUAD_VAL 0x0080 /* Value exceed 32 bits. */
-
-struct vms_egsy
-{
- /* Entry type. */
- unsigned char gsdtyp[2];
-
- /* Length of the entry. */
- unsigned char gsdsiz[2];
-
- /* Data type. */
- unsigned char datyp;
-
- /* Pad for alignment. */
- unsigned char temp;
-
- unsigned char flags[2];
-};
-
-#endif /* _VMS_EGSY_H */
diff --git a/include/vms/eiaf.h b/include/vms/eiaf.h
deleted file mode 100644
index c3c39884c..000000000
--- a/include/vms/eiaf.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/* Alpha VMS external format of Extended Image Activator Fixup section.
-
- Copyright 2010 Free Software Foundation, Inc.
- Written by Tristan Gingold <gingold@adacore.com>, AdaCore.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef _VMS_EIAF_H
-#define _VMS_EIAF_H
-
-struct vms_eiaf
-{
- /* Version. */
- unsigned char majorid[4];
- unsigned char minorid[4];
-
- /* Link for image activator use. */
- unsigned char iaflink[8];
-
- /* Link for sharable image fixups. */
- unsigned char fixuplnk[8];
-
- /* Size of EIAF fixed part. */
- unsigned char size[4];
-
- /* Flags. */
- unsigned char flags[4];
-
- /* Offsets to quadword and longword relocation fixup data. */
- unsigned char qrelfixoff[4];
- unsigned char lrelfixoff[4];
-
- /* Offsets to quardword and longword .address fixup data. */
- unsigned char qdotadroff[4];
- unsigned char ldotadroff[4];
-
- /* Offset to code address fixup data. */
- unsigned char codeadroff[4];
-
- /* Offset to linkage part fixup data. */
- unsigned char lpfixoff[4];
-
- /* Offset to isect change protection data. */
- unsigned char chgprtoff[4];
-
- /* Offset to shareable image list. */
- unsigned char shlstoff[4];
-
- /* Number of shareable images. */
- unsigned char shrimgcnt[4];
-
- /* Number of extra shareable images allowed. */
- unsigned char shlextra[4];
-
- /* Permanent shareable image context. */
- unsigned char permctx[4];
-
- /* Base address of the image itself. */
- unsigned char base_va[4];
-
- /* Offset to linkage pair with procedure signature fixups. */
- unsigned char lppsbfixoff[4];
-};
-
-#endif /* _VMS_EIAF_H */
diff --git a/include/vms/eicp.h b/include/vms/eicp.h
deleted file mode 100644
index 9c769f768..000000000
--- a/include/vms/eicp.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Alpha VMS external format of Extended Image section Change Protection.
-
- Copyright 2010 Free Software Foundation, Inc.
- Written by Tristan Gingold <gingold@adacore.com>, AdaCore.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef _VMS_EICP_H
-#define _VMS_EICP_H
-
-struct vms_eicp
-{
- /* Start of section. */
- unsigned char baseva[8];
-
- /* Size in bytes of the image section. */
- unsigned char size[4];
-
- /* New protections. */
- unsigned char newprt[4];
-};
-
-#endif /* _VMS_EICP_H */
diff --git a/include/vms/eidc.h b/include/vms/eidc.h
deleted file mode 100644
index 987e8c24e..000000000
--- a/include/vms/eidc.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/* Alpha VMS external format of Ident Consistency check.
-
- Copyright 2010 Free Software Foundation, Inc.
- Written by Tristan Gingold <gingold@adacore.com>, AdaCore.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef _VMS_EIDC_H
-#define _VMS_EIDC_H
-
-struct vms_eidc
-{
- /* Record type. */
- unsigned char rectyp[2];
-
- /* Record size. */
- unsigned char recsiz[2];
-
- unsigned char flags[4];
-
- /* Entity name (ASCIC). */
- /* Object name (ASCIC). */
- /* Ident string (ASCIC or binary BINIDENT set). */
- unsigned char name[1];
-};
-
-/* Fields of flags. */
-#define EIDC__V_BINIDENT (1 << 0) /* Ident is a longword. */
-#define EIDC__V_IDMATCH_SH 1 /* Ident match control. */
-#define EIDC__V_IDMATCH_MASK 3
-#define EIDC__V_ERRSEV_SH 3 /* Error severity. */
-#define EIDC__V_ERRSEV_MASK 7
-
-#endif /* _VMS_EIDC_H */
diff --git a/include/vms/eiha.h b/include/vms/eiha.h
deleted file mode 100644
index 5965ef979..000000000
--- a/include/vms/eiha.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/* Alpha VMS external format of Extended Image Activation.
-
- Copyright 2010 Free Software Foundation, Inc.
- Written by Tristan Gingold <gingold@adacore.com>, AdaCore.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef _VMS_EIHA_H
-#define _VMS_EIHA_H
-
-struct vms_eiha
-{
- /* Size of the struct. */
- unsigned char size[4];
-
- unsigned char spare[4];
-
- /* First transfer address. */
- unsigned char tfradr1[4];
- unsigned char tfradr1_h[4];
-
- /* Second. */
- unsigned char tfradr2[4];
- unsigned char tfradr2_h[4];
-
- /* Third. */
- unsigned char tfradr3[4];
- unsigned char tfradr3_h[4];
-
- /* Fourth (must be 0). */
- unsigned char tfradr4[4];
- unsigned char tfradr4_h[4];
-
- /* Shared image initialization (only if EIHD__V_INISHR is set). */
- unsigned char inishr[4];
- unsigned char inishr_h[4];
-};
-
-#endif /* _VMS_EIHA_H */
diff --git a/include/vms/eihd.h b/include/vms/eihd.h
deleted file mode 100644
index fdb3a6ec7..000000000
--- a/include/vms/eihd.h
+++ /dev/null
@@ -1,145 +0,0 @@
-/* Alpha VMS external format of Extended Image Header.
-
- Copyright 2010 Free Software Foundation, Inc.
- Written by Tristan Gingold <gingold@adacore.com>, AdaCore.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef _VMS_EIHD_H
-#define _VMS_EIHD_H
-
-/* Extended Image Header (eihd) structure. */
-struct vms_eihd
-{
- /* Version of this EIHD. */
- unsigned char majorid[4];
- unsigned char minorid[4];
-
- /* Size in bytes of the header. */
- unsigned char size[4];
-
- /* Byte offset to ISD (Image Section Descriptors) list. */
- unsigned char isdoff[4];
-
- /* Byte offset to activation data (off=16). */
- unsigned char activoff[4];
-
- /* Byte offset to symbol table and debugging data. */
- unsigned char symdbgoff[4];
-
- /* Byte offset to image ident. */
- unsigned char imgidoff[4];
-
- /* Byte offset to patch data. */
- unsigned char patchoff[4];
-
- /* RVA of fixup info (off=32). */
- unsigned char iafva[8];
-
- /* RVA of symbol vector. */
- unsigned char symvva[8];
-
- /* Byte offset to version number array (off=48). */
- unsigned char version_array_off[4];
-
- /* Image type. */
- unsigned char imgtype[4];
-
- /* Image subtype. */
- unsigned char subtype[4];
-
- /* Size in bytes of image I/O section requested. */
- unsigned char imgiocnt[4];
-
- /* Nbr of channels requested (off=64). */
- unsigned char iochancnt[4];
-
- /* Requested privilege mask. */
- unsigned char privreqs[8];
-
- /* Number of header diskblocks. */
- unsigned char hdrblkcnt[4];
-
- /* Linker produced image flags. */
- unsigned char lnkflags[4];
-
- /* GBL SEC ident value for linkable image. */
- unsigned char ident[4];
-
- /* SYS$K_VERSION or 0 if not linked with exec. */
- unsigned char sysver[4];
-
- /* Linker match control. */
- unsigned char matchctl;
- unsigned char fill_1[3];
-
- /* Size of the symbol vector in bytes. */
- unsigned char symvect_size[4];
-
- /* Value of /BPAGE. */
- unsigned char virt_mem_block_size[4];
-
- /* Byte offset to extended fixup data. */
- unsigned char ext_fixup_off[4];
-
- /* Byte offset to no_optimize psect table. */
- unsigned char noopt_psect_off[4];
-
- unsigned char fill_2[398];
-
- /* CODE identifies image type to MOM. */
- unsigned char alias[2];
-};
-
-#define EIHD__K_MAJORID 3 /* Major id constant */
-#define EIHD__K_MINORID 0 /* Minor id constant */
-
-/* Image type. */
-#define EIHD__K_EXE 1 /* Executable image */
-#define EIHD__K_LIM 2 /* Linkable image. */
-
-/* Image subtype. */
-#define EIHD__C_NATIVE 0 /* Alpha native image. */
-#define EIHD__C_CLI 1 /* Image is a CLI, run LOGINOUT. */
-
-/* Linker image flags. */
-#define EIHD__M_LNKDEBUG 0x0001 /* Full debugging requested. */
-#define EIHD__M_LNKNOTFR 0x0002 /* No first transfer address. */
-#define EIHD__M_NOP0BUFS 0x0004 /* No RMS use of P0 for image I/O. */
-#define EIHD__M_PICIMG 0x0008 /* PIC image. */
-#define EIHD__M_P0IMAGE 0x0010 /* P0 only image. */
-#define EIHD__M_DBGDMT 0x0020 /* Image header has dmt fields. */
-#define EIHD__M_INISHR 0x0040 /* Transfer array contains LNISHR. */
-#define EIHD__M_XLATED 0x0080 /* Translated image. */
-#define EIHD__M_BIND_CODE_SEC 0x0100 /* EXE sect can be put into S0. */
-#define EIHD__M_BIND_DATA_SEC 0x0200 /* DATA sect can be put into S0. */
-#define EIHD__M_MKTHREADS 0x0400 /* Multiple kernel threads. */
-#define EIHD__M_UPCALLS 0x0800 /* Upcalls enabled. */
-#define EIHD__M_OMV_READY 0x1000 /* Can be processed by OMV. */
-#define EIHD__M_EXT_BIND_SECT 0x2000 /* May be moved, using ext fixups. */
-
-/* Offsets of some fields. */
-#define EIHD__L_SIZE 8
-#define EIHD__L_ISDOFF 12
-#define EIHD__L_SYMDBGOFF 20
-#define EIHD__Q_SYMVVA 40
-#define EIHD__L_IMGTYPE 52
-
-#define EIHD__C_LENGTH 104
-
-#endif /* _VMS_EIHD_H */
diff --git a/include/vms/eihi.h b/include/vms/eihi.h
deleted file mode 100644
index 97d3d8958..000000000
--- a/include/vms/eihi.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/* Alpha VMS external format of Extended Image Identification.
-
- Copyright 2010 Free Software Foundation, Inc.
- Written by Tristan Gingold <gingold@adacore.com>, AdaCore.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef _VMS_EIHI_H
-#define _VMS_EIHI_H
-
-#define EIHI__K_MAJORID 1
-#define EIHI__K_MINORID 2
-
-struct vms_eihi
-{
- unsigned char majorid[4];
- unsigned char minorid[4];
-
- /* Time when this image was linked. */
- unsigned char linktime[8];
-
- /* Image name. */
- unsigned char imgnam[40];
-
- /* Image ident. */
- unsigned char imgid[16];
-
- /* Linker ident. */
- unsigned char linkid[16];
-
- /* Image build ident. */
- unsigned char imgbid[16];
-};
-
-#endif /* _VMS_EIHI_H */
diff --git a/include/vms/eihs.h b/include/vms/eihs.h
deleted file mode 100644
index cf048b13d..000000000
--- a/include/vms/eihs.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/* Alpha VMS external format of Extended Image Symbols and debug table.
-
- Copyright 2010 Free Software Foundation, Inc.
- Written by Tristan Gingold <gingold@adacore.com>, AdaCore.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef _VMS_EIHS_H
-#define _VMS_EIHS_H
-
-#define EIHS__K_MAJORID 1
-#define EIHS__K_MINORID 1
-
-struct vms_eihs
-{
- unsigned char majorid[4];
- unsigned char minorid[4];
-
- /* Debug symbol table virtual block number (vbn). */
- unsigned char dstvbn[4];
-
- /* Debug symbol table size. */
- unsigned char dstsize[4];
-
- /* Global symbol table vbn. */
- unsigned char gstvbn[4];
-
- /* Global symtol table size. */
- unsigned char gstsize[4];
-
- /* Debug module table vbn. */
- unsigned char dmtvbn[4];
-
- /* Debug module table size. */
- unsigned char dmtsize[4];
-};
-
-/* Various offsets. */
-
-#define EIHS__L_DSTVBN 8
-#define EIHS__L_DSTSIZE 12
-#define EIHS__L_GSTVBN 16
-#define EIHS__L_GSTSIZE 20
-#define EIHS__L_DMTVBN 24
-#define EIHS__L_DMTBYTES 28
-
-#endif /* _VMS_EIHS_H */
diff --git a/include/vms/eihvn.h b/include/vms/eihvn.h
deleted file mode 100644
index 07f9eeed2..000000000
--- a/include/vms/eihvn.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* Alpha VMS external format of Extended Image Header Version.
-
- Copyright 2010 Free Software Foundation, Inc.
- Written by Tristan Gingold <gingold@adacore.com>, AdaCore.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef _VMS_EIHVN_H
-#define _VMS_EIHVN_H
-
-struct vms_eihvn
-{
- unsigned char subsystem_mask[4];
-};
-
-struct vms_eihvn_subversion
-{
- unsigned char minor[2];
- unsigned char major[2];
-};
-
-#define EIHVN__BASE_IMAGE_BIT 0
-#define EIHVN__MEMORY_MANAGEMENT_BIT 1
-#define EIHVN__IO_BIT 2
-#define EIHVN__FILES_VOLUMES_BIT 3
-#define EIHVN__PROCESS_SCHED_BIT 4
-#define EIHVN__SYSGEN_BIT 5
-#define EIHVN__CLUSTERS_LOCKMGR_BIT 6
-#define EIHVN__LOGICAL_NAMES_BIT 7
-#define EIHVN__SECURITY_BIT 8
-#define EIHVN__IMAGE_ACTIVATOR_BIT 9
-#define EIHVN__NETWORKS_BIT 10
-#define EIHVN__COUNTERS_BIT 11
-#define EIHVN__STABLE_BIT 12
-#define EIHVN__MISC_BIT 13
-#define EIHVN__CPU_BIT 14
-#define EIHVN__VOLATILE_BIT 15
-#define EIHVN__SHELL_BIT 16
-#define EIHVN__POSIX_BIT 17
-#define EIHVN__MULTI_PROCESSING_BIT 18
-#define EIHVN__GALAXY_BIT 19
-
-#endif /* _VMS_EIHVN_H */
diff --git a/include/vms/eisd.h b/include/vms/eisd.h
deleted file mode 100644
index 7579e72b8..000000000
--- a/include/vms/eisd.h
+++ /dev/null
@@ -1,118 +0,0 @@
-/* Alpha VMS external format of Extended Image Section Descriptor.
-
- Copyright 2010 Free Software Foundation, Inc.
- Written by Tristan Gingold <gingold@adacore.com>, AdaCore.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef _VMS_EISD_H
-#define _VMS_EISD_H
-
-/* Flags. */
-#define EISD__M_GBL 0x0001 /* Global. */
-#define EISD__M_CRF 0x0002 /* Copy on reference. */
-#define EISD__M_DZRO 0x0004 /* Demand zero page. */
-#define EISD__M_WRT 0x0008 /* Writable. */
-#define EISD__M_INITALCODE 0x0010 /* Part of initialization code. */
-#define EISD__M_BASED 0x0020 /* Isect is based. */
-#define EISD__M_FIXUPVEC 0x0040 /* Isect is fixup section. */
-#define EISD__M_RESIDENT 0x0080 /* Isect is memory resident. */
-#define EISD__M_VECTOR 0x0100 /* Vector contained in isect. */
-#define EISD__M_PROTECT 0x0200 /* Isect is protected. */
-#define EISD__M_LASTCLU 0x0400 /* Last cluster. */
-#define EISD__M_EXE 0x0800 /* Code isect. */
-#define EISD__M_NONSHRADR 0x1000 /* Contains non-shareable data. */
-#define EISD__M_QUAD_LENGTH 0x2000 /* Quad length field valid. */
-#define EISD__M_ALLOC_64BIT 0x4000 /* Allocate 64-bit space. */
-
-#define EISD__K_LEN 36
-#define EISD__K_LENEND 12 /* For end marker or next block. */
-#define EISD__K_MAXLENGLBL 84
-
-#define EISD__K_GBLNAMLEN 44 /* Size of the field. */
-
-struct vms_eisd
-{
- unsigned char majorid[4];
- unsigned char minorid[4];
-
- /* Size (in bytes) of this eisd. */
- unsigned char eisdsize[4];
-
- /* Size (in bytes) of the section. */
- unsigned char secsize[4];
-
- /* Virtual address of the section. */
- unsigned char virt_addr[8];
-
- /* Flags. */
- unsigned char flags[4];
-
- /* Base virtual block number. */
- unsigned char vbn[4];
-
- /* Page fault cluster. */
- unsigned char pfc;
-
- /* Linker match control. */
- unsigned char matchctl;
-
- /* Section type. */
- unsigned char type;
-
- unsigned char fill_1;
-
- /* End of structure for normal records. */
-
- /* Ident for global section. */
- unsigned char ident[4];
-
- /* Global name ascic. First 8 bytes are quad length field. */
- unsigned char gblnam[EISD__K_GBLNAMLEN];
-};
-
-/* Versions. */
-#define EISD__K_MAJORID 1
-#define EISD__K_MINORID 1
-
-/* Match control. */
-#define EISD__K_MATALL 0 /* Match always. */
-#define EISD__K_MATEQU 1 /* Match if equal. */
-#define EISD__K_MATLEQ 2 /* Match if less or equal. */
-#define EISD__K_MATNEV 3 /* Match never. */
-
-/* Section type. */
-#define EISD__K_NORMAL 0 /* Normal program image section. */
-#define EISD__K_SHRFXD 1 /* Shareable fixed section. */
-#define EISD__K_PRVFXD 2 /* Private fixed section. */
-#define EISD__K_SHRPIC 3 /* Shareable pic section. */
-#define EISD__K_PRVPIC 4 /* Private PIC section. */
-#define EISD__K_USRSTACK 253 /* User stack section. */
-
-/* EISD offsets. */
-
-#define EISD__L_EISDSIZE 8
-#define EISD__L_SECSIZE 12
-#define EISD__Q_VIR_ADDR 16
-#define EISD__L_FLAGS 24
-#define EISD__L_VBN 28
-#define EISD__R_CONTROL 32
-#define EISD__L_IDENT 36
-#define EISD__T_GBLNAM 40
-
-#endif /* _VMS_EISD_H */
diff --git a/include/vms/emh.h b/include/vms/emh.h
deleted file mode 100644
index 973d71ea6..000000000
--- a/include/vms/emh.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/* Alpha VMS external format of Extended Module Header.
-
- Copyright 2010 Free Software Foundation, Inc.
- Written by Tristan Gingold <gingold@adacore.com>, AdaCore.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef _VMS_EMH_H
-#define _VMS_EMH_H
-
-#define EMH__C_MHD 0 /* Main header record. */
-#define EMH__C_LNM 1 /* Language name and version. */
-#define EMH__C_SRC 2 /* Source file specification. */
-#define EMH__C_TTL 3 /* Title text of module. */
-#define EMH__C_CPR 4 /* Copyright notice. */
-#define EMH__C_MTC 5 /* Maintenance status. */
-#define EMH__C_GTX 6 /* General text. */
-#define EMH__C_MAXHDRTYP 6 /* Maximum allowable type. */
-
-struct vms_emh_common
-{
- /* Record type. */
- unsigned char rectyp[2];
-
- /* Record size. */
- unsigned char size[2];
-
- /* Subtype. */
- unsigned char subtyp[2];
-};
-
-struct vms_emh_mhd
-{
- struct vms_emh_common common;
-
- unsigned char strlvl;
-
- unsigned char temp;
-
- unsigned char arch1[4];
- unsigned char arch2[4];
-
- unsigned char recsiz[4];
-
- /* Module name: ASCIC. */
- /* Module version: ASCIC. */
- /* Compile data: ASCIC. */
-};
-
-#define EOBJ__C_MAXRECSIZ 8192 /* Maximum legal record size. */
-#define EOBJ__C_STRLVL 2 /* Structure level. */
-#define EOBJ__C_SYMSIZ 64 /* Maximum symbol length. */
-#define EOBJ__C_SECSIZ 31 /* Maximum section name length. */
-#define EOBJ__C_STOREPLIM -1 /* Maximum repeat count on store commands. */
-#define EOBJ__C_PSCALILIM 16 /* Maximum p-sect alignment. */
-
-struct vms_emh_lnm
-{
- struct vms_emh_common common;
-
- /* Language processor name: ASCII. */
-};
-
-#endif /* _VMS_EMH_H */
diff --git a/include/vms/eobjrec.h b/include/vms/eobjrec.h
deleted file mode 100644
index 985fda782..000000000
--- a/include/vms/eobjrec.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/* Alpha VMS external format of Extended Object Records.
-
- Copyright 2010 Free Software Foundation, Inc.
- Written by Tristan Gingold <gingold@adacore.com>, AdaCore.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef _VMS_EOBJREC_H
-#define _VMS_EOBJREC_H
-
-#define EOBJ__C_EMH 8 /* EVAX mdule header record. */
-#define EOBJ__C_EEOM 9 /* EVAX ed of module record. */
-#define EOBJ__C_EGSD 10 /* EVAX gobal symbol definition record. */
-#define EOBJ__C_ETIR 11 /* EVAX txt information record. */
-#define EOBJ__C_EDBG 12 /* EVAX Dbugger information record. */
-#define EOBJ__C_ETBT 13 /* EVAX Taceback information record. */
-#define EOBJ__C_MAXRECTYP 13 /* EVAX Lst assigned record type. */
-
-struct vms_eobjrec
-{
- /* Record type. */
- unsigned char rectyp[2];
-
- /* Record size. */
- unsigned char size[2];
-
-#if 0
- /* Record subtype. */
- unsigned char subtyp[2];
-#endif
-};
-
-#endif /* _VMS_EOBJREC_H */
diff --git a/include/vms/esdf.h b/include/vms/esdf.h
deleted file mode 100644
index 79ee3d610..000000000
--- a/include/vms/esdf.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Alpha VMS external format of Extended GSD Global Symbol Definition.
-
- Copyright 2010 Free Software Foundation, Inc.
- Written by Tristan Gingold <gingold@adacore.com>, AdaCore.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef _VMS_ESDF_H
-#define _VMS_ESDF_H
-
-struct vms_esdf
-{
- struct vms_egsy header;
-
- unsigned char value[8];
- unsigned char code_address[8];
- unsigned char ca_psindx[4];
-
- unsigned char psindx[4];
- unsigned char namlng;
- unsigned char name[31];
-};
-
-#define ESDF__B_NAMLNG 32
-
-#endif /* _VMS_ESDF_H */
diff --git a/include/vms/esdfm.h b/include/vms/esdfm.h
deleted file mode 100644
index e00e44a13..000000000
--- a/include/vms/esdfm.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/* Alpha VMS external format of Extended Symbol Definition for version Mask.
-
- Copyright 2010 Free Software Foundation, Inc.
- Written by Tristan Gingold <gingold@adacore.com>, AdaCore.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef _VMS_ESDFM_H
-#define _VMS_ESDFM_H
-
-struct vms_esdfm
-{
- /* Entry type. */
- unsigned char gsdtyp[2];
-
- /* Length of the entry. */
- unsigned char size[2];
-
- /* Data type. */
- unsigned char datyp;
-
- /* Pad for alignment. */
- unsigned char temp;
-
- unsigned char flags[2];
-
- unsigned char value[8];
- unsigned char psindx[4];
- unsigned char version_mask[4];
- unsigned char namlng;
- unsigned char name[31];
-};
-
-#endif /* _VMS_ESDFM_H */
diff --git a/include/vms/esdfv.h b/include/vms/esdfv.h
deleted file mode 100644
index fae0dbc18..000000000
--- a/include/vms/esdfv.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/* Alpha VMS external format of Extended Symbol Def for Vectored symbols.
-
- Copyright 2010 Free Software Foundation, Inc.
- Written by Tristan Gingold <gingold@adacore.com>, AdaCore.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef _VMS_ESDFV_H
-#define _VMS_ESDFV_H
-
-struct vms_esdfv
-{
- /* Entry type. */
- unsigned char gsdtyp[2];
-
- /* Length of the entry. */
- unsigned char size[2];
-
- /* Data type. */
- unsigned char datyp;
-
- /* Pad for alignment. */
- unsigned char temp;
-
- unsigned char flags[2];
-
- unsigned char value[8];
- unsigned char psindx[4];
- unsigned char vector[4];
- unsigned char namlng;
- unsigned char name[31];
-};
-
-#endif /* _VMS_ESDFV_H */
diff --git a/include/vms/esgps.h b/include/vms/esgps.h
deleted file mode 100644
index e668a8748..000000000
--- a/include/vms/esgps.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/* Alpha VMS external format of Extended Shared Program Section Definition.
-
- Copyright 2010 Free Software Foundation, Inc.
- Written by Tristan Gingold <gingold@adacore.com>, AdaCore.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef _VMS_ESGPS_H
-#define _VMS_ESGPS_H
-
-struct vms_esgps
-{
- /* Entry type. */
- unsigned char gsdtyp[2];
-
- /* Length of the entry. */
- unsigned char gsdsiz[2];
-
- /* Psect alignment. */
- unsigned char align;
-
- /* Pad for alignment. */
- unsigned char temp;
-
- unsigned char flags[2];
-
- /* Length of this contribution. */
- unsigned char alloc[4];
-
- /* Image offset of the psect. */
- unsigned char base[4];
-
- /* Symbol vector offset. */
- unsigned char value[8];
-
- /* Name. */
- unsigned char namlng;
- unsigned char name[31];
-};
-
-/* These are the same as EGPS flags. */
-
-#define ESGPS__V_PIC (1 << 0) /* Not meaningful. */
-#define ESGPS__V_LIB (1 << 1) /* Defined in a shareable image. */
-#define ESGPS__V_OVR (1 << 2) /* Overlaid contribution. */
-#define ESGPS__V_REL (1 << 3) /* Relocatable. */
-#define ESGPS__V_GBL (1 << 4) /* Global. */
-#define ESGPS__V_SHR (1 << 5) /* Shareable. */
-#define ESGPS__V_EXE (1 << 6) /* Executable. */
-#define ESGPS__V_RD (1 << 7) /* Readable. */
-#define ESGPS__V_WRT (1 << 8) /* Writable. */
-#define ESGPS__V_VEC (1 << 9) /* Change mode dispatch or message vectors. */
-#define ESGPS__V_NOMOD (1 << 10) /* Demand-zero. */
-#define ESGPS__V_COM (1 << 11) /* Conditional storage. */
-#define ESGPS__V_ALLOC_64BIT (1 << 12) /* Allocated in 64-bit space. */
-
-#endif /* _VMS_ESGPS_H */
diff --git a/include/vms/esrf.h b/include/vms/esrf.h
deleted file mode 100644
index 291250c96..000000000
--- a/include/vms/esrf.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Alpha VMS external format of Extended GSD Global Symbol Reference.
-
- Copyright 2010 Free Software Foundation, Inc.
- Written by Tristan Gingold <gingold@adacore.com>, AdaCore.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef _VMS_ESRF_H
-#define _VMS_ESRF_H
-
-struct vms_esrf
-{
- struct vms_egsy header;
-
- unsigned char namlng;
- unsigned char name[31];
-};
-
-#define ESRF__B_NAMLNG 8
-
-#endif /* _VMS_ESRF_H */
diff --git a/include/vms/etir.h b/include/vms/etir.h
deleted file mode 100644
index 4d922dc3e..000000000
--- a/include/vms/etir.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/* Alpha VMS external format of Extended Text Information and Relocation.
-
- Copyright 2010 Free Software Foundation, Inc.
- Written by Tristan Gingold <gingold@adacore.com>, AdaCore.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef _VMS_ETIR_H
-#define _VMS_ETIR_H
-
-#define ETIR__C_MINSTACOD 0 /* Minimum stack code. */
-#define ETIR__C_STA_GBL 0 /* Stack global symbol value. */
-#define ETIR__C_STA_LW 1 /* Stack longword. */
-#define ETIR__C_STA_QW 2 /* Stack quadword. */
-#define ETIR__C_STA_PQ 3 /* Stack psect base + quadword off. */
-#define ETIR__C_STA_LI 4 /* Stack literal. */
-#define ETIR__C_STA_MOD 5 /* Stack module. */
-#define ETIR__C_STA_CKARG 6 /* Check Arguments. */
-#define ETIR__C_MAXSTACOD 6 /* Maximum stack code. */
-
-#define ETIR__C_MINSTOCOD 50 /* Minimum store code. */
-#define ETIR__C_STO_B 50 /* Store byte. */
-#define ETIR__C_STO_W 51 /* Store word. */
-#define ETIR__C_STO_LW 52 /* Store longword. */
-#define ETIR__C_STO_QW 53 /* Store quadword. */
-#define ETIR__C_STO_IMMR 54 /* Store immediate Repeated. */
-#define ETIR__C_STO_GBL 55 /* Store global. */
-#define ETIR__C_STO_CA 56 /* Store code address. */
-#define ETIR__C_STO_RB 57 /* Store relative branch. */
-#define ETIR__C_STO_AB 58 /* Store absolute branch. */
-#define ETIR__C_STO_OFF 59 /* Store offset within psect. */
-#define ETIR__C_STO_IMM 61 /* Store immediate. */
-#define ETIR__C_STO_GBL_LW 62 /* Store global Longword. */
-#define ETIR__C_STO_LP_PSB 63 /* STO_LP_PSB not valid in level 2 use STC_LP_PSB. */
-#define ETIR__C_STO_HINT_GBL 64 /* Store 14 bit HINT at global address. */
-#define ETIR__C_STO_HINT_PS 65 /* Store 14 bit HINT at psect + offset */
-#define ETIR__C_MAXSTOCOD 65 /* Maximum store code. */
-
-/* Operate codes. */
-#define ETIR__C_MINOPRCOD 100 /* Minimum operate code. */
-#define ETIR__C_OPR_NOP 100 /* No-op. */
-#define ETIR__C_OPR_ADD 101 /* Add. */
-#define ETIR__C_OPR_SUB 102 /* Subtract. */
-#define ETIR__C_OPR_MUL 103 /* Multiply. */
-#define ETIR__C_OPR_DIV 104 /* Divide. */
-#define ETIR__C_OPR_AND 105 /* Logical AND. */
-#define ETIR__C_OPR_IOR 106 /* Logical inclusive OR. */
-#define ETIR__C_OPR_EOR 107 /* Logical exclusive OR. */
-#define ETIR__C_OPR_NEG 108 /* Negate. */
-#define ETIR__C_OPR_COM 109 /* Complement. */
-#define ETIR__C_OPR_INSV 110 /* Insert bit field. */
-#define ETIR__C_OPR_ASH 111 /* Arithmetic shift. */
-#define ETIR__C_OPR_USH 112 /* Unsigned shift. */
-#define ETIR__C_OPR_ROT 113 /* Rotate. */
-#define ETIR__C_OPR_SEL 114 /* Select one of 3 long on top of stack. */
-#define ETIR__C_OPR_REDEF 115 /* Redefine this symbol after pass 2. */
-#define ETIR__C_OPR_DFLIT 116 /* Define a literal. */
-#define ETIR__C_MAXOPRCOD 116 /* Maximum operate code. */
-
-/* Control codes. */
-#define ETIR__C_MINCTLCOD 150 /* Minimum control code. */
-#define ETIR__C_CTL_SETRB 150 /* Set relocation base. */
-#define ETIR__C_CTL_AUGRB 151 /* Augment relocation base. */
-#define ETIR__C_CTL_DFLOC 152 /* Define debug location. */
-#define ETIR__C_CTL_STLOC 153 /* Set debug location. */
-#define ETIR__C_CTL_STKDL 154 /* Stack debug location. */
-#define ETIR__C_MAXCTLCOD 154 /* Maximum control code. */
-
-/* Store-conditional (STC) codes. */
-#define ETIR__C_MINSTCCOD 200 /* Minimum store-conditional code. */
-#define ETIR__C_STC_LP 200 /* STC Linkage Pair. */
-#define ETIR__C_STC_LP_PSB 201 /* STC Linkage Pair with Proc Signature. */
-#define ETIR__C_STC_GBL 202 /* STC Address at global address. */
-#define ETIR__C_STC_GCA 203 /* STC Code Address at global address. */
-#define ETIR__C_STC_PS 204 /* STC Address at psect + offset. */
-#define ETIR__C_STC_NOP_GBL 205 /* STC NOP at address of global. */
-#define ETIR__C_STC_NOP_PS 206 /* STC NOP at pect + offset. */
-#define ETIR__C_STC_BSR_GBL 207 /* STC BSR at global address. */
-#define ETIR__C_STC_BSR_PS 208 /* STC BSR at pect + offset. */
-#define ETIR__C_STC_LDA_GBL 209 /* STC LDA at global address. */
-#define ETIR__C_STC_LDA_PS 210 /* STC LDA at psect + offset. */
-#define ETIR__C_STC_BOH_GBL 211 /* STC BSR or Hint at global address. */
-#define ETIR__C_STC_BOH_PS 212 /* STC BSR or Hint at pect + offset. */
-#define ETIR__C_STC_NBH_GBL 213 /* STC NOP,BSR or HINT at global address. */
-#define ETIR__C_STC_NBH_PS 214 /* STC NOP,BSR or HINT at psect + offset. */
-#define ETIR__C_MAXSTCCOD 214 /* Maximum store-conditional code. */
-
-#define ETIR__C_HEADER_SIZE 4 /* Size of the header of a command */
-
-struct vms_etir
-{
- /* Commands. See above. */
- unsigned char rectyp[2];
-
- /* Size (including this header). */
- unsigned char size[2];
-};
-
-#endif /* _VMS_ETIR_H */
diff --git a/include/vms/internal.h b/include/vms/internal.h
deleted file mode 100644
index 1c8c47245..000000000
--- a/include/vms/internal.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* Alpha VMS internal format.
-
- Copyright 2010 Free Software Foundation, Inc.
- Written by Tristan Gingold <gingold@adacore.com>, AdaCore.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef _VMS_INTERNAL_H
-#define _VMS_INTERNAL_H
-
-struct vms_internal_eisd
-{
- unsigned int majorid; /* Version. */
- unsigned int minorid;
- unsigned int eisdsize; /* Size (in bytes) of this eisd. */
- unsigned int secsize; /* Size (in bytes) of the section. */
- bfd_vma virt_addr; /* Virtual address of the section. */
- unsigned int flags; /* Flags. */
- unsigned int vbn; /* Base virtual block number. */
- unsigned char pfc; /* Page fault cluster. */
- unsigned char matchctl; /* Linker match control. */
- unsigned char type; /* Section type. */
-};
-
-struct vms_internal_gbl_eisd
-{
- struct vms_internal_eisd common;
-
- unsigned int ident; /* Ident for global section. */
- unsigned char gblnam[44]; /* Global name ascic. */
-};
-
-struct vms_internal_eisd_map
-{
- /* Next eisd in the list. */
- struct vms_internal_eisd_map *next;
-
- /* Offset in output file. */
- file_ptr file_pos;
-
- union
- {
- struct vms_internal_eisd eisd;
- struct vms_internal_gbl_eisd gbl_eisd;
- } u;
-};
-
-#endif /* _VMS_INTERNAL_H */
diff --git a/include/vms/lbr.h b/include/vms/lbr.h
deleted file mode 100644
index fd3c256ad..000000000
--- a/include/vms/lbr.h
+++ /dev/null
@@ -1,332 +0,0 @@
-/* Alpha VMS external format of Libraries.
-
- Copyright 2010 Free Software Foundation, Inc.
- Written by Tristan Gingold <gingold@adacore.com>, AdaCore.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef _VMS_LBR_H
-#define _VMS_LBR_H
-
-/* Libray HeaDer. */
-
-/* Magic numbers. Should match the major version. */
-
-#define LHD_SANEID_DCX 319232342
-#define LHD_SANEID3 233579905
-#define LHD_SANEID6 233579911
-
-/* Library type. */
-#define LBR__C_TYP_UNK 0 /* Unknown / unspecified. */
-#define LBR__C_TYP_OBJ 1 /* Vax object. */
-#define LBR__C_TYP_MLB 2 /* Macro. */
-#define LBR__C_TYP_HLP 3 /* Help. */
-#define LBR__C_TYP_TXT 4 /* Text. */
-#define LBR__C_TYP_SHSTB 5 /* Vax shareable image. */
-#define LBR__C_TYP_NCS 6 /* NCS. */
-#define LBR__C_TYP_EOBJ 7 /* Alpha object. */
-#define LBR__C_TYP_ESHSTB 8 /* Alpha shareable image. */
-#define LBR__C_TYP_IOBJ 9 /* IA-64 object. */
-#define LBR__C_TYP_ISHSTB 10 /* IA-64 shareable image. */
-
-struct vms_lhd
-{
- /* Type of the library. See above. */
- unsigned char type;
-
- /* Number of indexes. Generally 1, 2 for object libraries. */
- unsigned char nindex;
-
- unsigned char fill_1[2];
-
- /* Sanity Id. */
- unsigned char sanity[4];
-
- /* Version. */
- unsigned char majorid[2];
- unsigned char minorid[2];
-
- /* Tool name. */
- unsigned char lbrver[32];
-
- /* Create time. */
- unsigned char credat[8];
-
- /* Update time. */
- unsigned char updtim[8];
-
- /* Size of the MHD. */
- unsigned char mhdusz;
-
- unsigned char idxblkf[2]; /* Unused. */
- unsigned char fill_2;
- unsigned char closerror[2];
-
- unsigned char spareword[2];
-
- /* First free block, and number of free blocks. */
- unsigned char freevbn[4];
- unsigned char freeblk[4];
-
- unsigned char nextrfa[6];
- unsigned char nextvbn[4];
-
- /* Free pre-allocated index block. */
- /* Number of free blocks. */
- unsigned char freidxblk[4];
- /* VBN of a simply linked list of free blocks. The list is terminated by a
- nul VBN. */
- unsigned char freeidx[4];
-
- /* Highest pre-allocated index block and in use. */
- unsigned char hipreal[4];
- unsigned char hiprusd[4];
-
- /* Number of index blocks in use. */
- unsigned char idxblks[4];
-
- /* Number of index entries. */
- unsigned char idxcnt[4];
-
- /* Number of modules entries. */
- unsigned char modcnt[4];
-
- unsigned char fill_3[2];
-
- /* Number of module headers. */
- unsigned char modhdrs[4];
-
- /* Overhead index pointers. */
- unsigned char idxovh[4];
-
- /* Update history records. */
- unsigned char maxluhrec[2];
- unsigned char numluhrec[2];
- unsigned char begluhrfa[6];
- unsigned char endluhrfa[6];
-
- /* DCX map. */
- unsigned char dcxmapvbn[4];
-
- unsigned char fill_4[4 * 13];
-};
-
-/* Known major ids. */
-#define LBR_MAJORID 3 /* Alpha libraries. */
-#define LBR_ELFMAJORID 6 /* Elf libraries (new index, new data). */
-
-/* Offset of the first IDD. */
-#define LHD_IDXDESC 196
-
-/* InDex Description. */
-struct vms_idd
-{
- unsigned char flags[2];
-
- /* Max length of the key. */
- unsigned char keylen[2];
-
- /* First index block. */
- unsigned char vbn[4];
-};
-
-/* IDD flags. */
-#define IDD__FLAGS_ASCII 1
-#define IDD__FLAGS_LOCKED 2
-#define IDD__FLAGS_VARLENIDX 4
-#define IDD__FLAGS_NOCASECMP 8
-#define IDD__FLAGS_NOCASENTR 16
-#define IDD__FLAGS_UPCASNTRY 32
-
-#define IDD_LENGTH 8
-
-/* Index block. */
-#define INDEXDEF__LENGTH 512
-#define INDEXDEF__BLKSIZ 500
-
-struct vms_indexdef
-{
- /* Number of bytes used. */
- unsigned char used[2];
-
- /* VBN of the parent. */
- unsigned char parent[4];
-
- unsigned char fill_1[6];
-
- /* The key field contains vms_idx/vms_elfidx structures, which are
- simply a key (= a string) and a rfa. */
- unsigned char keys[INDEXDEF__BLKSIZ];
-};
-
-/* An offset in a file. */
-
-struct vms_rfa
-{
- /* Logical block number, 1 based.
- 0 means that the field is absent. Block size is 512. */
- unsigned char vbn[4];
-
- /* Offset within the block. */
- unsigned char offset[2];
-};
-
-/* Index keys. For version 3. */
-
-struct vms_idx
-{
- /* Offset from the start of the vbn, so minimum should be
- DATA__DATA (ie 6). */
- struct vms_rfa rfa;
-
- unsigned char keylen;
- /* The length of this field is in fact keylen. */
- unsigned char keyname[256];
-};
-
-/* Index keys, for version 4 and later. */
-
-struct vms_elfidx
-{
- struct vms_rfa rfa;
-
- unsigned char keylen[2];
- unsigned char flags;
- unsigned char keyname[256];
-};
-
-/* Flags of elfidx. */
-
-#define ELFIDX__WEAK 0x01 /* Weak symbol. */
-#define ELFIDX__GROUP 0x02 /* Group symbol. */
-#define ELFIDX__LISTRFA 0x04 /* RFA field points to an LHS. */
-#define ELFIDX__SYMESC 0x08 /* Long symbol. */
-
-#define RFADEF__C_INDEX 0xffff
-
-/* List head structure. That's what is pointed by rfa when LISTRFA flag
- is set in elfidx. */
-
-struct vms_lhs
-{
- struct vms_rfa ng_g_rfa; /* Non-group global. */
- struct vms_rfa ng_wk_rfa; /* Non-group weak. */
- struct vms_rfa g_g_rfa; /* Group global. */
- struct vms_rfa g_wk_rfa; /* Group weak. */
- unsigned char flags;
-};
-
-/* List node structure. Fields of LHS point to this structure. */
-
-struct vms_lns
-{
- /* Next node in the list. */
- struct vms_rfa nxtrfa;
-
- /* Module associated with the key. */
- struct vms_rfa modrfa;
-};
-
-struct vms_datadef
-{
- /* Number of records in this block. */
- unsigned char recs;
- unsigned char fill_1;
-
- /* Next vbn. */
- unsigned char link[4];
-
- /* Data. The first word is the record length, followed by record
- data and a possible pad byte so that record length is always aligned. */
- unsigned char data[506];
-};
-#define DATA__LENGTH 512
-#define DATA__DATA 6
-
-/* Key name block. This is used for keys longer than 128 bytes. */
-
-struct vms_kbn
-{
- /* Length of the key chunk. */
- unsigned char keylen[2];
-
- /* RFA of the next chunk. */
- struct vms_rfa rfa;
-
- /* Followed by the key chunk. */
-};
-
-/* Module header. */
-struct vms_mhd
-{
- /* Fixed part. */
- unsigned char lbrflag;
- unsigned char id;
- unsigned char fill_1[2];
- unsigned char refcnt[4];
- unsigned char datim[8];
-
- unsigned char objstat;
- /* Ident or GSMATCH. */
- unsigned char objidlng;
- unsigned char objid[31];
-
- unsigned char pad1[3];
- unsigned char otherefcnt[4];
- unsigned char modsize[4];
- unsigned char pad2[4];
-};
-
-#define MHD__C_MHDID 0xad /* Value for id. */
-#define MHD__C_MHDLEN 16 /* Fixed part length. */
-#define MHD__C_USRDAT 16
-
-/* Flags for objstat. */
-#define MHD__M_SELSRC 0x1 /* Selective search. */
-#define MHD__M_OBJTIR 0x2
-#define MHD__M_WKSYM 0x4
-
-struct vms_luh
-{
- unsigned char nxtluhblk[4];
- unsigned char spare[2];
- unsigned char data[506];
-};
-
-struct vms_luhdef
-{
- unsigned char rechdr[2];
- unsigned char reclen[2];
-};
-#define LUH__RECHDRLEN 4
-#define LUH__RECHDRMRK 0xabba
-#define LUH__DATAFLDLEN 506
-
-/* Entry in the history. */
-
-struct vms_leh
-{
- unsigned char date[8];
- unsigned char nbr_units[2];
- unsigned char action[2]; /* 1: delete, 2: insert, 3: replaced. */
- unsigned char idlen;
- /* username
- modules... */
-};
-
-#endif /* _VMS_LBR_H */
diff --git a/include/vms/prt.h b/include/vms/prt.h
deleted file mode 100644
index 8b8d27b56..000000000
--- a/include/vms/prt.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/* Alpha VMS external format of Protection values.
-
- Copyright 2010 Free Software Foundation, Inc.
- Written by Tristan Gingold <gingold@adacore.com>, AdaCore.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef _VMS_PRT_H
-#define _VMS_PRT_H
-
-#define PRT__C_NA 0 /* No access. */
-#define PRT__C_RESERVED 1
-#define PRT__C_KW 2 /* Kernel RW. */
-#define PRT__C_KR 3 /* Kernel RO. */
-#define PRT__C_UW 4 /* User RW. */
-#define PRT__C_EW 5 /* Executive RW. */
-#define PRT__C_ERKW 6 /* Executive RO, Kernel RW. */
-#define PRT__C_ER 7 /* Executive RO. */
-#define PRT__C_SW 8 /* Supervisor RW. */
-#define PRT__C_SREW 9 /* Supervisor RO, Executive RW. */
-#define PRT__C_SRKW 10 /* Supervisor RO, Kernel RW. */
-#define PRT__C_SR 11 /* Supervisor RO. */
-#define PRT__C_URSW 12 /* User RO, Supervisor RW. */
-#define PRT__C_UREW 13 /* User RO, Executive RW. */
-#define PRT__C_URKW 14 /* User RO, Kernel RW. */
-#define PRT__C_UR 15 /* User RO. */
-
-#endif /* _VMS_PRT_H */
diff --git a/include/vms/shl.h b/include/vms/shl.h
deleted file mode 100644
index d1d9fae92..000000000
--- a/include/vms/shl.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/* Alpha VMS external format of Shareable image List.
-
- Copyright 2010 Free Software Foundation, Inc.
- Written by Tristan Gingold <gingold@adacore.com>, AdaCore.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
-
-#ifndef _VMS_SHL_H
-#define _VMS_SHL_H
-
-struct vms_shl
-{
- /* Base address of this shareable image. */
- unsigned char baseva[4];
-
- /* Point in SHL shareable image to SHL in executable image. */
- unsigned char shlptr[4];
-
- /* GSMATCH. */
- unsigned char ident[4];
-
- /* Permanent shareable image context. */
- unsigned char permctx[4];
-
- /* Size of this structure. */
- unsigned char size;
-
- unsigned char fill_1[2];
-
- /* Flags. */
- unsigned char flags;
-
- /* Address of the image control block (in memory). */
- unsigned char icb[4];
-
- /* Image name. ASCIC. */
- unsigned char imgnam[40];
-};
-
-#endif /* _VMS_SHL_H */
diff --git a/include/vtv-change-permission.h b/include/vtv-change-permission.h
deleted file mode 100644
index 1adcb9745..000000000
--- a/include/vtv-change-permission.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/* Copyright (C) 2013
- Free Software Foundation
-
- This file is part of GCC.
-
- modify it under the terms of the GNU Library General Public License
- as published by the Free Software Foundation; either version 2, or
- (at your option) any later version.
-
- In addition to the permissions in the GNU Library General Public
- License, the Free Software Foundation gives you unlimited
- permission to link the compiled version of this file into
- combinations with other programs, and to distribute those
- combinations without any restriction coming from the use of this
- file. (The Library Public License restrictions do apply in other
- respects; for example, they cover modification of the file, and
- distribution when not linked into a combined executable.)
-
- 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
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
- 02110-1301, USA. */
-
-
-#ifndef __VTV_H__
-#define __VTV_H__
-
-/* We could have used an enumeration here but it just makes it more
- difficult for the compiler to generate a call to this. These are
- used as arguments to the function __VLTChangePermission, declared
- below. */
-#define __VLTP_READ_ONLY 0
-#define __VLTP_READ_WRITE 1
-
-#ifdef __cplusplus
-extern "C" void __VLTChangePermission (int);
-#else
-extern void __VLTChangePermission (int);
-#endif
-
-#ifdef BIG_PAGE_SIZE
-/* TODO - Replace '4096' below with correct big page size. */
-#define VTV_PAGE_SIZE 4096
-#else
-#define VTV_PAGE_SIZE 4096
-#endif
-
-
-
-#endif /* __VTV_H__ */
diff --git a/include/xregex.h b/include/xregex.h
deleted file mode 100644
index 4c5ef9345..000000000
--- a/include/xregex.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/* This file redefines all regex external names before including
- a renamed copy of glibc's regex.h. */
-
-#ifndef _XREGEX_H
-#define _XREGEX_H 1
-
-# define regfree xregfree
-# define regexec xregexec
-# define regcomp xregcomp
-# define regerror xregerror
-# define regoff_t xregoff_t
-# define re_set_registers xre_set_registers
-# define re_match_2 xre_match_2
-# define re_match xre_match
-# define re_search xre_search
-# define re_compile_pattern xre_compile_pattern
-# define re_set_syntax xre_set_syntax
-# define re_search_2 xre_search_2
-# define re_compile_fastmap xre_compile_fastmap
-# define re_syntax_options xre_syntax_options
-# define re_max_failures xre_max_failures
-
-# define _REGEX_RE_COMP
-# define re_comp xre_comp
-# define re_exec xre_exec
-
-#include "xregex2.h"
-
-#endif /* xregex.h */
diff --git a/include/xregex2.h b/include/xregex2.h
deleted file mode 100644
index d3d0da14a..000000000
--- a/include/xregex2.h
+++ /dev/null
@@ -1,565 +0,0 @@
-/* Definitions for data structures and routines for the regular
- expression library, version 0.12.
-
- Copyright (C) 1985, 1989, 1990, 1991, 1992, 1993, 1995, 1996, 1997,
- 1998, 2000, 2005 Free Software Foundation, Inc.
-
- This file is part of the GNU C Library. Its master source is NOT part of
- the C library, however. The master source lives in /gd/gnu/lib.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, write to the Free
- Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- 02110-1301 USA. */
-
-#ifndef _REGEX_H
-#define _REGEX_H 1
-
-/* Allow the use in C++ code. */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* POSIX says that <sys/types.h> must be included (by the caller) before
- <regex.h>. */
-
-#if !defined _POSIX_C_SOURCE && !defined _POSIX_SOURCE && defined VMS
-/* VMS doesn't have `size_t' in <sys/types.h>, even though POSIX says it
- should be there. */
-# include <stddef.h>
-#endif
-
-/* The following two types have to be signed and unsigned integer type
- wide enough to hold a value of a pointer. For most ANSI compilers
- ptrdiff_t and size_t should be likely OK. Still size of these two
- types is 2 for Microsoft C. Ugh... */
-typedef long int s_reg_t;
-typedef unsigned long int active_reg_t;
-
-/* The following bits are used to determine the regexp syntax we
- recognize. The set/not-set meanings are chosen so that Emacs syntax
- remains the value 0. The bits are given in alphabetical order, and
- the definitions shifted by one from the previous bit; thus, when we
- add or remove a bit, only one other definition need change. */
-typedef unsigned long int reg_syntax_t;
-
-/* If this bit is not set, then \ inside a bracket expression is literal.
- If set, then such a \ quotes the following character. */
-#define RE_BACKSLASH_ESCAPE_IN_LISTS ((unsigned long int) 1)
-
-/* If this bit is not set, then + and ? are operators, and \+ and \? are
- literals.
- If set, then \+ and \? are operators and + and ? are literals. */
-#define RE_BK_PLUS_QM (RE_BACKSLASH_ESCAPE_IN_LISTS << 1)
-
-/* If this bit is set, then character classes are supported. They are:
- [:alpha:], [:upper:], [:lower:], [:digit:], [:alnum:], [:xdigit:],
- [:space:], [:print:], [:punct:], [:graph:], and [:cntrl:].
- If not set, then character classes are not supported. */
-#define RE_CHAR_CLASSES (RE_BK_PLUS_QM << 1)
-
-/* If this bit is set, then ^ and $ are always anchors (outside bracket
- expressions, of course).
- If this bit is not set, then it depends:
- ^ is an anchor if it is at the beginning of a regular
- expression or after an open-group or an alternation operator;
- $ is an anchor if it is at the end of a regular expression, or
- before a close-group or an alternation operator.
-
- This bit could be (re)combined with RE_CONTEXT_INDEP_OPS, because
- POSIX draft 11.2 says that * etc. in leading positions is undefined.
- We already implemented a previous draft which made those constructs
- invalid, though, so we haven't changed the code back. */
-#define RE_CONTEXT_INDEP_ANCHORS (RE_CHAR_CLASSES << 1)
-
-/* If this bit is set, then special characters are always special
- regardless of where they are in the pattern.
- If this bit is not set, then special characters are special only in
- some contexts; otherwise they are ordinary. Specifically,
- * + ? and intervals are only special when not after the beginning,
- open-group, or alternation operator. */
-#define RE_CONTEXT_INDEP_OPS (RE_CONTEXT_INDEP_ANCHORS << 1)
-
-/* If this bit is set, then *, +, ?, and { cannot be first in an re or
- immediately after an alternation or begin-group operator. */
-#define RE_CONTEXT_INVALID_OPS (RE_CONTEXT_INDEP_OPS << 1)
-
-/* If this bit is set, then . matches newline.
- If not set, then it doesn't. */
-#define RE_DOT_NEWLINE (RE_CONTEXT_INVALID_OPS << 1)
-
-/* If this bit is set, then . doesn't match NUL.
- If not set, then it does. */
-#define RE_DOT_NOT_NULL (RE_DOT_NEWLINE << 1)
-
-/* If this bit is set, nonmatching lists [^...] do not match newline.
- If not set, they do. */
-#define RE_HAT_LISTS_NOT_NEWLINE (RE_DOT_NOT_NULL << 1)
-
-/* If this bit is set, either \{...\} or {...} defines an
- interval, depending on RE_NO_BK_BRACES.
- If not set, \{, \}, {, and } are literals. */
-#define RE_INTERVALS (RE_HAT_LISTS_NOT_NEWLINE << 1)
-
-/* If this bit is set, +, ? and | aren't recognized as operators.
- If not set, they are. */
-#define RE_LIMITED_OPS (RE_INTERVALS << 1)
-
-/* If this bit is set, newline is an alternation operator.
- If not set, newline is literal. */
-#define RE_NEWLINE_ALT (RE_LIMITED_OPS << 1)
-
-/* If this bit is set, then `{...}' defines an interval, and \{ and \}
- are literals.
- If not set, then `\{...\}' defines an interval. */
-#define RE_NO_BK_BRACES (RE_NEWLINE_ALT << 1)
-
-/* If this bit is set, (...) defines a group, and \( and \) are literals.
- If not set, \(...\) defines a group, and ( and ) are literals. */
-#define RE_NO_BK_PARENS (RE_NO_BK_BRACES << 1)
-
-/* If this bit is set, then \<digit> matches <digit>.
- If not set, then \<digit> is a back-reference. */
-#define RE_NO_BK_REFS (RE_NO_BK_PARENS << 1)
-
-/* If this bit is set, then | is an alternation operator, and \| is literal.
- If not set, then \| is an alternation operator, and | is literal. */
-#define RE_NO_BK_VBAR (RE_NO_BK_REFS << 1)
-
-/* If this bit is set, then an ending range point collating higher
- than the starting range point, as in [z-a], is invalid.
- If not set, then when ending range point collates higher than the
- starting range point, the range is ignored. */
-#define RE_NO_EMPTY_RANGES (RE_NO_BK_VBAR << 1)
-
-/* If this bit is set, then an unmatched ) is ordinary.
- If not set, then an unmatched ) is invalid. */
-#define RE_UNMATCHED_RIGHT_PAREN_ORD (RE_NO_EMPTY_RANGES << 1)
-
-/* If this bit is set, succeed as soon as we match the whole pattern,
- without further backtracking. */
-#define RE_NO_POSIX_BACKTRACKING (RE_UNMATCHED_RIGHT_PAREN_ORD << 1)
-
-/* If this bit is set, do not process the GNU regex operators.
- If not set, then the GNU regex operators are recognized. */
-#define RE_NO_GNU_OPS (RE_NO_POSIX_BACKTRACKING << 1)
-
-/* If this bit is set, turn on internal regex debugging.
- If not set, and debugging was on, turn it off.
- This only works if regex.c is compiled -DDEBUG.
- We define this bit always, so that all that's needed to turn on
- debugging is to recompile regex.c; the calling code can always have
- this bit set, and it won't affect anything in the normal case. */
-#define RE_DEBUG (RE_NO_GNU_OPS << 1)
-
-/* If this bit is set, a syntactically invalid interval is treated as
- a string of ordinary characters. For example, the ERE 'a{1' is
- treated as 'a\{1'. */
-#define RE_INVALID_INTERVAL_ORD (RE_DEBUG << 1)
-
-/* This global variable defines the particular regexp syntax to use (for
- some interfaces). When a regexp is compiled, the syntax used is
- stored in the pattern buffer, so changing this does not affect
- already-compiled regexps. */
-extern reg_syntax_t re_syntax_options;
-
-/* Define combinations of the above bits for the standard possibilities.
- (The [[[ comments delimit what gets put into the Texinfo file, so
- don't delete them!) */
-/* [[[begin syntaxes]]] */
-#define RE_SYNTAX_EMACS 0
-
-#define RE_SYNTAX_AWK \
- (RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DOT_NOT_NULL \
- | RE_NO_BK_PARENS | RE_NO_BK_REFS \
- | RE_NO_BK_VBAR | RE_NO_EMPTY_RANGES \
- | RE_DOT_NEWLINE | RE_CONTEXT_INDEP_ANCHORS \
- | RE_UNMATCHED_RIGHT_PAREN_ORD | RE_NO_GNU_OPS)
-
-#define RE_SYNTAX_GNU_AWK \
- ((RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DEBUG) \
- & ~(RE_DOT_NOT_NULL | RE_INTERVALS | RE_CONTEXT_INDEP_OPS))
-
-#define RE_SYNTAX_POSIX_AWK \
- (RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS \
- | RE_INTERVALS | RE_NO_GNU_OPS)
-
-#define RE_SYNTAX_GREP \
- (RE_BK_PLUS_QM | RE_CHAR_CLASSES \
- | RE_HAT_LISTS_NOT_NEWLINE | RE_INTERVALS \
- | RE_NEWLINE_ALT)
-
-#define RE_SYNTAX_EGREP \
- (RE_CHAR_CLASSES | RE_CONTEXT_INDEP_ANCHORS \
- | RE_CONTEXT_INDEP_OPS | RE_HAT_LISTS_NOT_NEWLINE \
- | RE_NEWLINE_ALT | RE_NO_BK_PARENS \
- | RE_NO_BK_VBAR)
-
-#define RE_SYNTAX_POSIX_EGREP \
- (RE_SYNTAX_EGREP | RE_INTERVALS | RE_NO_BK_BRACES \
- | RE_INVALID_INTERVAL_ORD)
-
-/* P1003.2/D11.2, section 4.20.7.1, lines 5078ff. */
-#define RE_SYNTAX_ED RE_SYNTAX_POSIX_BASIC
-
-#define RE_SYNTAX_SED RE_SYNTAX_POSIX_BASIC
-
-/* Syntax bits common to both basic and extended POSIX regex syntax. */
-#define _RE_SYNTAX_POSIX_COMMON \
- (RE_CHAR_CLASSES | RE_DOT_NEWLINE | RE_DOT_NOT_NULL \
- | RE_INTERVALS | RE_NO_EMPTY_RANGES)
-
-#define RE_SYNTAX_POSIX_BASIC \
- (_RE_SYNTAX_POSIX_COMMON | RE_BK_PLUS_QM)
-
-/* Differs from ..._POSIX_BASIC only in that RE_BK_PLUS_QM becomes
- RE_LIMITED_OPS, i.e., \? \+ \| are not recognized. Actually, this
- isn't minimal, since other operators, such as \`, aren't disabled. */
-#define RE_SYNTAX_POSIX_MINIMAL_BASIC \
- (_RE_SYNTAX_POSIX_COMMON | RE_LIMITED_OPS)
-
-#define RE_SYNTAX_POSIX_EXTENDED \
- (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \
- | RE_CONTEXT_INDEP_OPS | RE_NO_BK_BRACES \
- | RE_NO_BK_PARENS | RE_NO_BK_VBAR \
- | RE_CONTEXT_INVALID_OPS | RE_UNMATCHED_RIGHT_PAREN_ORD)
-
-/* Differs from ..._POSIX_EXTENDED in that RE_CONTEXT_INDEP_OPS is
- removed and RE_NO_BK_REFS is added. */
-#define RE_SYNTAX_POSIX_MINIMAL_EXTENDED \
- (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \
- | RE_CONTEXT_INVALID_OPS | RE_NO_BK_BRACES \
- | RE_NO_BK_PARENS | RE_NO_BK_REFS \
- | RE_NO_BK_VBAR | RE_UNMATCHED_RIGHT_PAREN_ORD)
-/* [[[end syntaxes]]] */
-
-/* Maximum number of duplicates an interval can allow. Some systems
- (erroneously) define this in other header files, but we want our
- value, so remove any previous define. */
-#ifdef RE_DUP_MAX
-# undef RE_DUP_MAX
-#endif
-/* If sizeof(int) == 2, then ((1 << 15) - 1) overflows. */
-#define RE_DUP_MAX (0x7fff)
-
-
-/* POSIX `cflags' bits (i.e., information for `regcomp'). */
-
-/* If this bit is set, then use extended regular expression syntax.
- If not set, then use basic regular expression syntax. */
-#define REG_EXTENDED 1
-
-/* If this bit is set, then ignore case when matching.
- If not set, then case is significant. */
-#define REG_ICASE (REG_EXTENDED << 1)
-
-/* If this bit is set, then anchors do not match at newline
- characters in the string.
- If not set, then anchors do match at newlines. */
-#define REG_NEWLINE (REG_ICASE << 1)
-
-/* If this bit is set, then report only success or fail in regexec.
- If not set, then returns differ between not matching and errors. */
-#define REG_NOSUB (REG_NEWLINE << 1)
-
-
-/* POSIX `eflags' bits (i.e., information for regexec). */
-
-/* If this bit is set, then the beginning-of-line operator doesn't match
- the beginning of the string (presumably because it's not the
- beginning of a line).
- If not set, then the beginning-of-line operator does match the
- beginning of the string. */
-#define REG_NOTBOL 1
-
-/* Like REG_NOTBOL, except for the end-of-line. */
-#define REG_NOTEOL (1 << 1)
-
-
-/* If any error codes are removed, changed, or added, update the
- `re_error_msg' table in regex.c. */
-typedef enum
-{
-#ifdef _XOPEN_SOURCE
- REG_ENOSYS = -1, /* This will never happen for this implementation. */
-#endif
-
- REG_NOERROR = 0, /* Success. */
- REG_NOMATCH, /* Didn't find a match (for regexec). */
-
- /* POSIX regcomp return error codes. (In the order listed in the
- standard.) */
- REG_BADPAT, /* Invalid pattern. */
- REG_ECOLLATE, /* Not implemented. */
- REG_ECTYPE, /* Invalid character class name. */
- REG_EESCAPE, /* Trailing backslash. */
- REG_ESUBREG, /* Invalid back reference. */
- REG_EBRACK, /* Unmatched left bracket. */
- REG_EPAREN, /* Parenthesis imbalance. */
- REG_EBRACE, /* Unmatched \{. */
- REG_BADBR, /* Invalid contents of \{\}. */
- REG_ERANGE, /* Invalid range end. */
- REG_ESPACE, /* Ran out of memory. */
- REG_BADRPT, /* No preceding re for repetition op. */
-
- /* Error codes we've added. */
- REG_EEND, /* Premature end. */
- REG_ESIZE, /* Compiled pattern bigger than 2^16 bytes. */
- REG_ERPAREN /* Unmatched ) or \); not returned from regcomp. */
-} reg_errcode_t;
-
-/* This data structure represents a compiled pattern. Before calling
- the pattern compiler, the fields `buffer', `allocated', `fastmap',
- `translate', and `no_sub' can be set. After the pattern has been
- compiled, the `re_nsub' field is available. All other fields are
- private to the regex routines. */
-
-#ifndef RE_TRANSLATE_TYPE
-# define RE_TRANSLATE_TYPE char *
-#endif
-
-struct re_pattern_buffer
-{
-/* [[[begin pattern_buffer]]] */
- /* Space that holds the compiled pattern. It is declared as
- `unsigned char *' because its elements are
- sometimes used as array indexes. */
- unsigned char *buffer;
-
- /* Number of bytes to which `buffer' points. */
- unsigned long int allocated;
-
- /* Number of bytes actually used in `buffer'. */
- unsigned long int used;
-
- /* Syntax setting with which the pattern was compiled. */
- reg_syntax_t syntax;
-
- /* Pointer to a fastmap, if any, otherwise zero. re_search uses
- the fastmap, if there is one, to skip over impossible
- starting points for matches. */
- char *fastmap;
-
- /* Either a translate table to apply to all characters before
- comparing them, or zero for no translation. The translation
- is applied to a pattern when it is compiled and to a string
- when it is matched. */
- RE_TRANSLATE_TYPE translate;
-
- /* Number of subexpressions found by the compiler. */
- size_t re_nsub;
-
- /* Zero if this pattern cannot match the empty string, one else.
- Well, in truth it's used only in `re_search_2', to see
- whether or not we should use the fastmap, so we don't set
- this absolutely perfectly; see `re_compile_fastmap' (the
- `duplicate' case). */
- unsigned can_be_null : 1;
-
- /* If REGS_UNALLOCATED, allocate space in the `regs' structure
- for `max (RE_NREGS, re_nsub + 1)' groups.
- If REGS_REALLOCATE, reallocate space if necessary.
- If REGS_FIXED, use what's there. */
-#define REGS_UNALLOCATED 0
-#define REGS_REALLOCATE 1
-#define REGS_FIXED 2
- unsigned regs_allocated : 2;
-
- /* Set to zero when `regex_compile' compiles a pattern; set to one
- by `re_compile_fastmap' if it updates the fastmap. */
- unsigned fastmap_accurate : 1;
-
- /* If set, `re_match_2' does not return information about
- subexpressions. */
- unsigned no_sub : 1;
-
- /* If set, a beginning-of-line anchor doesn't match at the
- beginning of the string. */
- unsigned not_bol : 1;
-
- /* Similarly for an end-of-line anchor. */
- unsigned not_eol : 1;
-
- /* If true, an anchor at a newline matches. */
- unsigned newline_anchor : 1;
-
-/* [[[end pattern_buffer]]] */
-};
-
-typedef struct re_pattern_buffer regex_t;
-
-/* Type for byte offsets within the string. POSIX mandates this. */
-typedef int regoff_t;
-
-
-/* This is the structure we store register match data in. See
- regex.texinfo for a full description of what registers match. */
-struct re_registers
-{
- unsigned num_regs;
- regoff_t *start;
- regoff_t *end;
-};
-
-
-/* If `regs_allocated' is REGS_UNALLOCATED in the pattern buffer,
- `re_match_2' returns information about at least this many registers
- the first time a `regs' structure is passed. */
-#ifndef RE_NREGS
-# define RE_NREGS 30
-#endif
-
-
-/* POSIX specification for registers. Aside from the different names than
- `re_registers', POSIX uses an array of structures, instead of a
- structure of arrays. */
-typedef struct
-{
- regoff_t rm_so; /* Byte offset from string's start to substring's start. */
- regoff_t rm_eo; /* Byte offset from string's start to substring's end. */
-} regmatch_t;
-
-/* Declarations for routines. */
-
-/* To avoid duplicating every routine declaration -- once with a
- prototype (if we are ANSI), and once without (if we aren't) -- we
- use the following macro to declare argument types. This
- unfortunately clutters up the declarations a bit, but I think it's
- worth it. */
-
-/* Sets the current default syntax to SYNTAX, and return the old syntax.
- You can also simply assign to the `re_syntax_options' variable. */
-extern reg_syntax_t re_set_syntax (reg_syntax_t syntax);
-
-/* Compile the regular expression PATTERN, with length LENGTH
- and syntax given by the global `re_syntax_options', into the buffer
- BUFFER. Return NULL if successful, and an error string if not. */
-extern const char *re_compile_pattern (const char *pattern, size_t length,
- struct re_pattern_buffer *buffer);
-
-
-/* Compile a fastmap for the compiled pattern in BUFFER; used to
- accelerate searches. Return 0 if successful and -2 if was an
- internal error. */
-extern int re_compile_fastmap (struct re_pattern_buffer *buffer);
-
-
-/* Search in the string STRING (with length LENGTH) for the pattern
- compiled into BUFFER. Start searching at position START, for RANGE
- characters. Return the starting position of the match, -1 for no
- match, or -2 for an internal error. Also return register
- information in REGS (if REGS and BUFFER->no_sub are nonzero). */
-extern int re_search (struct re_pattern_buffer *buffer, const char *string,
- int length, int start, int range,
- struct re_registers *regs);
-
-
-/* Like `re_search', but search in the concatenation of STRING1 and
- STRING2. Also, stop searching at index START + STOP. */
-extern int re_search_2 (struct re_pattern_buffer *buffer, const char *string1,
- int length1, const char *string2, int length2,
- int start, int range, struct re_registers *regs,
- int stop);
-
-
-/* Like `re_search', but return how many characters in STRING the regexp
- in BUFFER matched, starting at position START. */
-extern int re_match (struct re_pattern_buffer *buffer, const char *string,
- int length, int start, struct re_registers *regs);
-
-
-/* Relates to `re_match' as `re_search_2' relates to `re_search'. */
-extern int re_match_2 (struct re_pattern_buffer *buffer, const char *string1,
- int length1, const char *string2, int length2,
- int start, struct re_registers *regs, int stop);
-
-
-/* Set REGS to hold NUM_REGS registers, storing them in STARTS and
- ENDS. Subsequent matches using BUFFER and REGS will use this memory
- for recording register information. STARTS and ENDS must be
- allocated with malloc, and must each be at least `NUM_REGS * sizeof
- (regoff_t)' bytes long.
-
- If NUM_REGS == 0, then subsequent matches should allocate their own
- register data.
-
- Unless this function is called, the first search or match using
- PATTERN_BUFFER will allocate its own register data, without
- freeing the old data. */
-extern void re_set_registers (struct re_pattern_buffer *buffer,
- struct re_registers *regs,
- unsigned num_regs, regoff_t *starts,
- regoff_t *ends);
-
-#if defined _REGEX_RE_COMP || defined _LIBC
-# ifndef _CRAY
-/* 4.2 bsd compatibility. */
-extern char *re_comp (const char *);
-extern int re_exec (const char *);
-# endif
-#endif
-
-/* GCC 2.95 and later have "__restrict"; C99 compilers have
- "restrict", and "configure" may have defined "restrict". */
-#ifndef __restrict
-# if ! (2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__))
-# if defined restrict || 199901L <= __STDC_VERSION__
-# define __restrict restrict
-# else
-# define __restrict
-# endif
-# endif
-#endif
-
-/* GCC 3.1 and later support declaring arrays as non-overlapping
- using the syntax array_name[restrict] */
-#ifndef __restrict_arr
-# if ! (3 < __GNUC__ || (3 == __GNUC__ && 1 <= __GNUC_MINOR__)) || defined (__GNUG__)
-# define __restrict_arr
-# else
-# define __restrict_arr __restrict
-# endif
-#endif
-
-/* POSIX compatibility. */
-extern int regcomp (regex_t *__restrict __preg,
- const char *__restrict __pattern,
- int __cflags);
-
-#if (__GNUC__)
-__extension__
-#endif
-extern int regexec (const regex_t *__restrict __preg,
- const char *__restrict __string, size_t __nmatch,
- regmatch_t __pmatch[__restrict_arr],
- int __eflags);
-
-extern size_t regerror (int __errcode, const regex_t *__preg,
- char *__errbuf, size_t __errbuf_size);
-
-extern void regfree (regex_t *__preg);
-
-
-#ifdef __cplusplus
-}
-#endif /* C++ */
-
-#endif /* regex.h */
-
-/*
-Local variables:
-make-backup-files: t
-version-control: t
-trim-versions-without-asking: nil
-End:
-*/
diff --git a/include/xtensa-config.h b/include/xtensa-config.h
deleted file mode 100644
index 30f4f41a2..000000000
--- a/include/xtensa-config.h
+++ /dev/null
@@ -1,177 +0,0 @@
-/* Xtensa configuration settings.
- Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2010
- Free Software Foundation, Inc.
- Contributed by Bob Wilson (bob.wilson@acm.org) at Tensilica.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef XTENSA_CONFIG_H
-#define XTENSA_CONFIG_H
-
-/* The macros defined here match those with the same names in the Xtensa
- compile-time HAL (Hardware Abstraction Layer). Please refer to the
- Xtensa System Software Reference Manual for documentation of these
- macros. */
-
-#undef XCHAL_HAVE_BE
-#define XCHAL_HAVE_BE 1
-
-#undef XCHAL_HAVE_DENSITY
-#define XCHAL_HAVE_DENSITY 1
-
-#undef XCHAL_HAVE_CONST16
-#define XCHAL_HAVE_CONST16 0
-
-#undef XCHAL_HAVE_ABS
-#define XCHAL_HAVE_ABS 1
-
-#undef XCHAL_HAVE_ADDX
-#define XCHAL_HAVE_ADDX 1
-
-#undef XCHAL_HAVE_L32R
-#define XCHAL_HAVE_L32R 1
-
-#undef XSHAL_USE_ABSOLUTE_LITERALS
-#define XSHAL_USE_ABSOLUTE_LITERALS 0
-
-#undef XSHAL_HAVE_TEXT_SECTION_LITERALS
-#define XSHAL_HAVE_TEXT_SECTION_LITERALS 1 /* Set if there is some memory that allows both code and literals. */
-
-#undef XCHAL_HAVE_MAC16
-#define XCHAL_HAVE_MAC16 0
-
-#undef XCHAL_HAVE_MUL16
-#define XCHAL_HAVE_MUL16 1
-
-#undef XCHAL_HAVE_MUL32
-#define XCHAL_HAVE_MUL32 1
-
-#undef XCHAL_HAVE_MUL32_HIGH
-#define XCHAL_HAVE_MUL32_HIGH 0
-
-#undef XCHAL_HAVE_DIV32
-#define XCHAL_HAVE_DIV32 1
-
-#undef XCHAL_HAVE_NSA
-#define XCHAL_HAVE_NSA 1
-
-#undef XCHAL_HAVE_MINMAX
-#define XCHAL_HAVE_MINMAX 1
-
-#undef XCHAL_HAVE_SEXT
-#define XCHAL_HAVE_SEXT 1
-
-#undef XCHAL_HAVE_LOOPS
-#define XCHAL_HAVE_LOOPS 1
-
-#undef XCHAL_HAVE_THREADPTR
-#define XCHAL_HAVE_THREADPTR 1
-
-#undef XCHAL_HAVE_RELEASE_SYNC
-#define XCHAL_HAVE_RELEASE_SYNC 1
-
-#undef XCHAL_HAVE_S32C1I
-#define XCHAL_HAVE_S32C1I 1
-
-#undef XCHAL_HAVE_BOOLEANS
-#define XCHAL_HAVE_BOOLEANS 0
-
-#undef XCHAL_HAVE_FP
-#define XCHAL_HAVE_FP 0
-
-#undef XCHAL_HAVE_FP_DIV
-#define XCHAL_HAVE_FP_DIV 0
-
-#undef XCHAL_HAVE_FP_RECIP
-#define XCHAL_HAVE_FP_RECIP 0
-
-#undef XCHAL_HAVE_FP_SQRT
-#define XCHAL_HAVE_FP_SQRT 0
-
-#undef XCHAL_HAVE_FP_RSQRT
-#define XCHAL_HAVE_FP_RSQRT 0
-
-#undef XCHAL_HAVE_DFP_accel
-#define XCHAL_HAVE_DFP_accel 0
-#undef XCHAL_HAVE_WINDOWED
-#define XCHAL_HAVE_WINDOWED 1
-
-#undef XCHAL_NUM_AREGS
-#define XCHAL_NUM_AREGS 32
-
-#undef XCHAL_HAVE_WIDE_BRANCHES
-#define XCHAL_HAVE_WIDE_BRANCHES 0
-
-#undef XCHAL_HAVE_PREDICTED_BRANCHES
-#define XCHAL_HAVE_PREDICTED_BRANCHES 0
-
-
-#undef XCHAL_ICACHE_SIZE
-#define XCHAL_ICACHE_SIZE 16384
-
-#undef XCHAL_DCACHE_SIZE
-#define XCHAL_DCACHE_SIZE 16384
-
-#undef XCHAL_ICACHE_LINESIZE
-#define XCHAL_ICACHE_LINESIZE 32
-
-#undef XCHAL_DCACHE_LINESIZE
-#define XCHAL_DCACHE_LINESIZE 32
-
-#undef XCHAL_ICACHE_LINEWIDTH
-#define XCHAL_ICACHE_LINEWIDTH 5
-
-#undef XCHAL_DCACHE_LINEWIDTH
-#define XCHAL_DCACHE_LINEWIDTH 5
-
-#undef XCHAL_DCACHE_IS_WRITEBACK
-#define XCHAL_DCACHE_IS_WRITEBACK 1
-
-
-#undef XCHAL_HAVE_MMU
-#define XCHAL_HAVE_MMU 1
-
-#undef XCHAL_MMU_MIN_PTE_PAGE_SIZE
-#define XCHAL_MMU_MIN_PTE_PAGE_SIZE 12
-
-
-#undef XCHAL_HAVE_DEBUG
-#define XCHAL_HAVE_DEBUG 1
-
-#undef XCHAL_NUM_IBREAK
-#define XCHAL_NUM_IBREAK 2
-
-#undef XCHAL_NUM_DBREAK
-#define XCHAL_NUM_DBREAK 2
-
-#undef XCHAL_DEBUGLEVEL
-#define XCHAL_DEBUGLEVEL 6
-
-
-#undef XCHAL_MAX_INSTRUCTION_SIZE
-#define XCHAL_MAX_INSTRUCTION_SIZE 3
-
-#undef XCHAL_INST_FETCH_WIDTH
-#define XCHAL_INST_FETCH_WIDTH 4
-
-
-#undef XSHAL_ABI
-#undef XTHAL_ABI_WINDOWED
-#undef XTHAL_ABI_CALL0
-#define XSHAL_ABI XTHAL_ABI_WINDOWED
-#define XTHAL_ABI_WINDOWED 0
-#define XTHAL_ABI_CALL0 1
-
-#endif /* !XTENSA_CONFIG_H */
diff --git a/include/xtensa-isa-internal.h b/include/xtensa-isa-internal.h
deleted file mode 100644
index 6c727366b..000000000
--- a/include/xtensa-isa-internal.h
+++ /dev/null
@@ -1,234 +0,0 @@
-/* Internal definitions for configurable Xtensa ISA support.
- Copyright 2003, 2004, 2005, 2008, 2010 Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-#ifndef XTENSA_ISA_INTERNAL_H
-#define XTENSA_ISA_INTERNAL_H
-
-/* Flags. */
-
-#define XTENSA_OPERAND_IS_REGISTER 0x00000001
-#define XTENSA_OPERAND_IS_PCRELATIVE 0x00000002
-#define XTENSA_OPERAND_IS_INVISIBLE 0x00000004
-#define XTENSA_OPERAND_IS_UNKNOWN 0x00000008
-
-#define XTENSA_OPCODE_IS_BRANCH 0x00000001
-#define XTENSA_OPCODE_IS_JUMP 0x00000002
-#define XTENSA_OPCODE_IS_LOOP 0x00000004
-#define XTENSA_OPCODE_IS_CALL 0x00000008
-
-#define XTENSA_STATE_IS_EXPORTED 0x00000001
-#define XTENSA_STATE_IS_SHARED_OR 0x00000002
-
-#define XTENSA_INTERFACE_HAS_SIDE_EFFECT 0x00000001
-
-/* Function pointer typedefs */
-typedef void (*xtensa_format_encode_fn) (xtensa_insnbuf);
-typedef void (*xtensa_get_slot_fn) (const xtensa_insnbuf, xtensa_insnbuf);
-typedef void (*xtensa_set_slot_fn) (xtensa_insnbuf, const xtensa_insnbuf);
-typedef int (*xtensa_opcode_decode_fn) (const xtensa_insnbuf);
-typedef uint32 (*xtensa_get_field_fn) (const xtensa_insnbuf);
-typedef void (*xtensa_set_field_fn) (xtensa_insnbuf, uint32);
-typedef int (*xtensa_immed_decode_fn) (uint32 *);
-typedef int (*xtensa_immed_encode_fn) (uint32 *);
-typedef int (*xtensa_do_reloc_fn) (uint32 *, uint32);
-typedef int (*xtensa_undo_reloc_fn) (uint32 *, uint32);
-typedef void (*xtensa_opcode_encode_fn) (xtensa_insnbuf);
-typedef int (*xtensa_format_decode_fn) (const xtensa_insnbuf);
-typedef int (*xtensa_length_decode_fn) (const unsigned char *);
-
-typedef struct xtensa_format_internal_struct
-{
- const char *name; /* Instruction format name. */
- int length; /* Instruction length in bytes. */
- xtensa_format_encode_fn encode_fn;
- int num_slots;
- int *slot_id; /* Array[num_slots] of slot IDs. */
-} xtensa_format_internal;
-
-typedef struct xtensa_slot_internal_struct
-{
- const char *name; /* Not necessarily unique. */
- const char *format;
- int position;
- xtensa_get_slot_fn get_fn;
- xtensa_set_slot_fn set_fn;
- xtensa_get_field_fn *get_field_fns; /* Array[field_id]. */
- xtensa_set_field_fn *set_field_fns; /* Array[field_id]. */
- xtensa_opcode_decode_fn opcode_decode_fn;
- const char *nop_name;
-} xtensa_slot_internal;
-
-typedef struct xtensa_operand_internal_struct
-{
- const char *name;
- int field_id;
- xtensa_regfile regfile; /* Register file. */
- int num_regs; /* Usually 1; 2 for reg pairs, etc. */
- uint32 flags; /* See XTENSA_OPERAND_* flags. */
- xtensa_immed_encode_fn encode; /* Encode the operand value. */
- xtensa_immed_decode_fn decode; /* Decode the value from the field. */
- xtensa_do_reloc_fn do_reloc; /* Perform a PC-relative reloc. */
- xtensa_undo_reloc_fn undo_reloc; /* Undo a PC-relative relocation. */
-} xtensa_operand_internal;
-
-typedef struct xtensa_arg_internal_struct
-{
- union {
- int operand_id; /* For normal operands. */
- xtensa_state state; /* For stateOperands. */
- } u;
- char inout; /* Direction: 'i', 'o', or 'm'. */
-} xtensa_arg_internal;
-
-typedef struct xtensa_iclass_internal_struct
-{
- int num_operands; /* Size of "operands" array. */
- xtensa_arg_internal *operands; /* Array[num_operands]. */
-
- int num_stateOperands; /* Size of "stateOperands" array. */
- xtensa_arg_internal *stateOperands; /* Array[num_stateOperands]. */
-
- int num_interfaceOperands; /* Size of "interfaceOperands". */
- xtensa_interface *interfaceOperands; /* Array[num_interfaceOperands]. */
-} xtensa_iclass_internal;
-
-typedef struct xtensa_opcode_internal_struct
-{
- const char *name; /* Opcode mnemonic. */
- int iclass_id; /* Iclass for this opcode. */
- uint32 flags; /* See XTENSA_OPCODE_* flags. */
- xtensa_opcode_encode_fn *encode_fns; /* Array[slot_id]. */
- int num_funcUnit_uses; /* Number of funcUnit_use entries. */
- xtensa_funcUnit_use *funcUnit_uses; /* Array[num_funcUnit_uses]. */
-} xtensa_opcode_internal;
-
-typedef struct xtensa_regfile_internal_struct
-{
- const char *name; /* Full name of the regfile. */
- const char *shortname; /* Abbreviated name. */
- xtensa_regfile parent; /* View parent (or identity). */
- int num_bits; /* Width of the registers. */
- int num_entries; /* Number of registers. */
-} xtensa_regfile_internal;
-
-typedef struct xtensa_interface_internal_struct
-{
- const char *name; /* Interface name. */
- int num_bits; /* Width of the interface. */
- uint32 flags; /* See XTENSA_INTERFACE_* flags. */
- int class_id; /* Class of related interfaces. */
- char inout; /* "i" or "o". */
-} xtensa_interface_internal;
-
-typedef struct xtensa_funcUnit_internal_struct
-{
- const char *name; /* Functional unit name. */
- int num_copies; /* Number of instances. */
-} xtensa_funcUnit_internal;
-
-typedef struct xtensa_state_internal_struct
-{
- const char *name; /* State name. */
- int num_bits; /* Number of state bits. */
- uint32 flags; /* See XTENSA_STATE_* flags. */
-} xtensa_state_internal;
-
-typedef struct xtensa_sysreg_internal_struct
-{
- const char *name; /* Register name. */
- int number; /* Register number. */
- int is_user; /* Non-zero if a "user register". */
-} xtensa_sysreg_internal;
-
-typedef struct xtensa_lookup_entry_struct
-{
- const char *key;
- union
- {
- xtensa_opcode opcode; /* Internal opcode number. */
- xtensa_sysreg sysreg; /* Internal sysreg number. */
- xtensa_state state; /* Internal state number. */
- xtensa_interface intf; /* Internal interface number. */
- xtensa_funcUnit fun; /* Internal funcUnit number. */
- } u;
-} xtensa_lookup_entry;
-
-typedef struct xtensa_isa_internal_struct
-{
- int is_big_endian; /* Endianness. */
- int insn_size; /* Maximum length in bytes. */
- int insnbuf_size; /* Number of insnbuf_words. */
-
- int num_formats;
- xtensa_format_internal *formats;
- xtensa_format_decode_fn format_decode_fn;
- xtensa_length_decode_fn length_decode_fn;
-
- int num_slots;
- xtensa_slot_internal *slots;
-
- int num_fields;
-
- int num_operands;
- xtensa_operand_internal *operands;
-
- int num_iclasses;
- xtensa_iclass_internal *iclasses;
-
- int num_opcodes;
- xtensa_opcode_internal *opcodes;
- xtensa_lookup_entry *opname_lookup_table;
-
- int num_regfiles;
- xtensa_regfile_internal *regfiles;
-
- int num_states;
- xtensa_state_internal *states;
- xtensa_lookup_entry *state_lookup_table;
-
- int num_sysregs;
- xtensa_sysreg_internal *sysregs;
- xtensa_lookup_entry *sysreg_lookup_table;
-
- /* The current Xtensa ISA only supports 256 of each kind of sysreg so
- we can get away with implementing lookups with tables indexed by
- the register numbers. If we ever allow larger sysreg numbers, this
- may have to be reimplemented. The first entry in the following
- arrays corresponds to "special" registers and the second to "user"
- registers. */
- int max_sysreg_num[2];
- xtensa_sysreg *sysreg_table[2];
-
- int num_interfaces;
- xtensa_interface_internal *interfaces;
- xtensa_lookup_entry *interface_lookup_table;
-
- int num_funcUnits;
- xtensa_funcUnit_internal *funcUnits;
- xtensa_lookup_entry *funcUnit_lookup_table;
-
-} xtensa_isa_internal;
-
-extern int xtensa_isa_name_compare (const void *, const void *);
-
-extern xtensa_isa_status xtisa_errno;
-extern char xtisa_error_msg[];
-
-#endif /* !XTENSA_ISA_INTERNAL_H */
diff --git a/include/xtensa-isa.h b/include/xtensa-isa.h
deleted file mode 100644
index c3c740da4..000000000
--- a/include/xtensa-isa.h
+++ /dev/null
@@ -1,813 +0,0 @@
-/* Interface definition for configurable Xtensa ISA support.
- Copyright 2003, 2004, 2005, 2006, 2008, 2010 Free Software Foundation, Inc.
-
- This file is part of BFD, the Binary File Descriptor library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-#ifndef XTENSA_LIBISA_H
-#define XTENSA_LIBISA_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Version number: This is intended to help support code that works with
- versions of this library from multiple Xtensa releases. */
-
-#define XTENSA_ISA_VERSION 7000
-
-#ifndef uint32
-#define uint32 unsigned int
-#endif
-
-/* This file defines the interface to the Xtensa ISA library. This
- library contains most of the ISA-specific information for a
- particular Xtensa processor. For example, the set of valid
- instructions, their opcode encodings and operand fields are all
- included here.
-
- This interface basically defines a number of abstract data types.
-
- . an instruction buffer - for holding the raw instruction bits
- . ISA info - information about the ISA as a whole
- . instruction formats - instruction size and slot structure
- . opcodes - information about individual instructions
- . operands - information about register and immediate instruction operands
- . stateOperands - information about processor state instruction operands
- . interfaceOperands - information about interface instruction operands
- . register files - register file information
- . processor states - internal processor state information
- . system registers - "special registers" and "user registers"
- . interfaces - TIE interfaces that are external to the processor
- . functional units - TIE shared functions
-
- The interface defines a set of functions to access each data type.
- With the exception of the instruction buffer, the internal
- representations of the data structures are hidden. All accesses must
- be made through the functions defined here. */
-
-typedef struct xtensa_isa_opaque { int unused; } *xtensa_isa;
-
-
-/* Most of the Xtensa ISA entities (e.g., opcodes, regfiles, etc.) are
- represented here using sequential integers beginning with 0. The
- specific values are only fixed for a particular instantiation of an
- xtensa_isa structure, so these values should only be used
- internally. */
-
-typedef int xtensa_opcode;
-typedef int xtensa_format;
-typedef int xtensa_regfile;
-typedef int xtensa_state;
-typedef int xtensa_sysreg;
-typedef int xtensa_interface;
-typedef int xtensa_funcUnit;
-
-
-/* Define a unique value for undefined items. */
-
-#define XTENSA_UNDEFINED -1
-
-
-/* Overview of using this interface to decode/encode instructions:
-
- Each Xtensa instruction is associated with a particular instruction
- format, where the format defines a fixed number of slots for
- operations. The formats for the core Xtensa ISA have only one slot,
- but FLIX instructions may have multiple slots. Within each slot,
- there is a single opcode and some number of associated operands.
-
- The encoding and decoding functions operate on instruction buffers,
- not on the raw bytes of the instructions. The same instruction
- buffer data structure is used for both entire instructions and
- individual slots in those instructions -- the contents of a slot need
- to be extracted from or inserted into the buffer for the instruction
- as a whole.
-
- Decoding an instruction involves first finding the format, which
- identifies the number of slots, and then decoding each slot
- separately. A slot is decoded by finding the opcode and then using
- the opcode to determine how many operands there are. For example:
-
- xtensa_insnbuf_from_chars
- xtensa_format_decode
- for each slot {
- xtensa_format_get_slot
- xtensa_opcode_decode
- for each operand {
- xtensa_operand_get_field
- xtensa_operand_decode
- }
- }
-
- Encoding an instruction is roughly the same procedure in reverse:
-
- xtensa_format_encode
- for each slot {
- xtensa_opcode_encode
- for each operand {
- xtensa_operand_encode
- xtensa_operand_set_field
- }
- xtensa_format_set_slot
- }
- xtensa_insnbuf_to_chars
-*/
-
-
-/* Error handling. */
-
-/* Error codes. The code for the most recent error condition can be
- retrieved with the "errno" function. For any result other than
- xtensa_isa_ok, an error message containing additional information
- about the problem can be retrieved using the "error_msg" function.
- The error messages are stored in an internal buffer, which should
- not be freed and may be overwritten by subsequent operations. */
-
-typedef enum xtensa_isa_status_enum
-{
- xtensa_isa_ok = 0,
- xtensa_isa_bad_format,
- xtensa_isa_bad_slot,
- xtensa_isa_bad_opcode,
- xtensa_isa_bad_operand,
- xtensa_isa_bad_field,
- xtensa_isa_bad_iclass,
- xtensa_isa_bad_regfile,
- xtensa_isa_bad_sysreg,
- xtensa_isa_bad_state,
- xtensa_isa_bad_interface,
- xtensa_isa_bad_funcUnit,
- xtensa_isa_wrong_slot,
- xtensa_isa_no_field,
- xtensa_isa_out_of_memory,
- xtensa_isa_buffer_overflow,
- xtensa_isa_internal_error,
- xtensa_isa_bad_value
-} xtensa_isa_status;
-
-extern xtensa_isa_status
-xtensa_isa_errno (xtensa_isa isa);
-
-extern char *
-xtensa_isa_error_msg (xtensa_isa isa);
-
-
-
-/* Instruction buffers. */
-
-typedef uint32 xtensa_insnbuf_word;
-typedef xtensa_insnbuf_word *xtensa_insnbuf;
-
-
-/* Get the size in "insnbuf_words" of the xtensa_insnbuf array. */
-
-extern int
-xtensa_insnbuf_size (xtensa_isa isa);
-
-
-/* Allocate an xtensa_insnbuf of the right size. */
-
-extern xtensa_insnbuf
-xtensa_insnbuf_alloc (xtensa_isa isa);
-
-
-/* Release an xtensa_insnbuf. */
-
-extern void
-xtensa_insnbuf_free (xtensa_isa isa, xtensa_insnbuf buf);
-
-
-/* Conversion between raw memory (char arrays) and our internal
- instruction representation. This is complicated by the Xtensa ISA's
- variable instruction lengths. When converting to chars, the buffer
- must contain a valid instruction so we know how many bytes to copy;
- thus, the "to_chars" function returns the number of bytes copied or
- XTENSA_UNDEFINED on error. The "from_chars" function first reads the
- minimal number of bytes required to decode the instruction length and
- then proceeds to copy the entire instruction into the buffer; if the
- memory does not contain a valid instruction, it copies the maximum
- number of bytes required for the longest Xtensa instruction. The
- "num_chars" argument may be used to limit the number of bytes that
- can be read or written. Otherwise, if "num_chars" is zero, the
- functions may read or write past the end of the code. */
-
-extern int
-xtensa_insnbuf_to_chars (xtensa_isa isa, const xtensa_insnbuf insn,
- unsigned char *cp, int num_chars);
-
-extern void
-xtensa_insnbuf_from_chars (xtensa_isa isa, xtensa_insnbuf insn,
- const unsigned char *cp, int num_chars);
-
-
-
-/* ISA information. */
-
-/* Initialize the ISA information. */
-
-extern xtensa_isa
-xtensa_isa_init (xtensa_isa_status *errno_p, char **error_msg_p);
-
-
-/* Deallocate an xtensa_isa structure. */
-
-extern void
-xtensa_isa_free (xtensa_isa isa);
-
-
-/* Get the maximum instruction size in bytes. */
-
-extern int
-xtensa_isa_maxlength (xtensa_isa isa);
-
-
-/* Decode the length in bytes of an instruction in raw memory (not an
- insnbuf). This function reads only the minimal number of bytes
- required to decode the instruction length. Returns
- XTENSA_UNDEFINED on error. */
-
-extern int
-xtensa_isa_length_from_chars (xtensa_isa isa, const unsigned char *cp);
-
-
-/* Get the number of stages in the processor's pipeline. The pipeline
- stage values returned by other functions in this library will range
- from 0 to N-1, where N is the value returned by this function.
- Note that the stage numbers used here may not correspond to the
- actual processor hardware, e.g., the hardware may have additional
- stages before stage 0. Returns XTENSA_UNDEFINED on error. */
-
-extern int
-xtensa_isa_num_pipe_stages (xtensa_isa isa);
-
-
-/* Get the number of various entities that are defined for this processor. */
-
-extern int
-xtensa_isa_num_formats (xtensa_isa isa);
-
-extern int
-xtensa_isa_num_opcodes (xtensa_isa isa);
-
-extern int
-xtensa_isa_num_regfiles (xtensa_isa isa);
-
-extern int
-xtensa_isa_num_states (xtensa_isa isa);
-
-extern int
-xtensa_isa_num_sysregs (xtensa_isa isa);
-
-extern int
-xtensa_isa_num_interfaces (xtensa_isa isa);
-
-extern int
-xtensa_isa_num_funcUnits (xtensa_isa isa);
-
-
-
-/* Instruction formats. */
-
-/* Get the name of a format. Returns null on error. */
-
-extern const char *
-xtensa_format_name (xtensa_isa isa, xtensa_format fmt);
-
-
-/* Given a format name, return the format number. Returns
- XTENSA_UNDEFINED if the name is not a valid format. */
-
-extern xtensa_format
-xtensa_format_lookup (xtensa_isa isa, const char *fmtname);
-
-
-/* Decode the instruction format from a binary instruction buffer.
- Returns XTENSA_UNDEFINED if the format is not recognized. */
-
-extern xtensa_format
-xtensa_format_decode (xtensa_isa isa, const xtensa_insnbuf insn);
-
-
-/* Set the instruction format field(s) in a binary instruction buffer.
- All the other fields are set to zero. Returns non-zero on error. */
-
-extern int
-xtensa_format_encode (xtensa_isa isa, xtensa_format fmt, xtensa_insnbuf insn);
-
-
-/* Find the length (in bytes) of an instruction. Returns
- XTENSA_UNDEFINED on error. */
-
-extern int
-xtensa_format_length (xtensa_isa isa, xtensa_format fmt);
-
-
-/* Get the number of slots in an instruction. Returns XTENSA_UNDEFINED
- on error. */
-
-extern int
-xtensa_format_num_slots (xtensa_isa isa, xtensa_format fmt);
-
-
-/* Get the opcode for a no-op in a particular slot.
- Returns XTENSA_UNDEFINED on error. */
-
-extern xtensa_opcode
-xtensa_format_slot_nop_opcode (xtensa_isa isa, xtensa_format fmt, int slot);
-
-
-/* Get the bits for a specified slot out of an insnbuf for the
- instruction as a whole and put them into an insnbuf for that one
- slot, and do the opposite to set a slot. Return non-zero on error. */
-
-extern int
-xtensa_format_get_slot (xtensa_isa isa, xtensa_format fmt, int slot,
- const xtensa_insnbuf insn, xtensa_insnbuf slotbuf);
-
-extern int
-xtensa_format_set_slot (xtensa_isa isa, xtensa_format fmt, int slot,
- xtensa_insnbuf insn, const xtensa_insnbuf slotbuf);
-
-
-
-/* Opcode information. */
-
-/* Translate a mnemonic name to an opcode. Returns XTENSA_UNDEFINED if
- the name is not a valid opcode mnemonic. */
-
-extern xtensa_opcode
-xtensa_opcode_lookup (xtensa_isa isa, const char *opname);
-
-
-/* Decode the opcode for one instruction slot from a binary instruction
- buffer. Returns the opcode or XTENSA_UNDEFINED if the opcode is
- illegal. */
-
-extern xtensa_opcode
-xtensa_opcode_decode (xtensa_isa isa, xtensa_format fmt, int slot,
- const xtensa_insnbuf slotbuf);
-
-
-/* Set the opcode field(s) for an instruction slot. All other fields
- in the slot are set to zero. Returns non-zero if the opcode cannot
- be encoded. */
-
-extern int
-xtensa_opcode_encode (xtensa_isa isa, xtensa_format fmt, int slot,
- xtensa_insnbuf slotbuf, xtensa_opcode opc);
-
-
-/* Get the mnemonic name for an opcode. Returns null on error. */
-
-extern const char *
-xtensa_opcode_name (xtensa_isa isa, xtensa_opcode opc);
-
-
-/* Check various properties of opcodes. These functions return 0 if
- the condition is false, 1 if the condition is true, and
- XTENSA_UNDEFINED on error. The instructions are classified as
- follows:
-
- branch: conditional branch; may fall through to next instruction (B*)
- jump: unconditional branch (J, JX, RET*, RF*)
- loop: zero-overhead loop (LOOP*)
- call: unconditional call; control returns to next instruction (CALL*)
-
- For the opcodes that affect control flow in some way, the branch
- target may be specified by an immediate operand or it may be an
- address stored in a register. You can distinguish these by
- checking if the instruction has a PC-relative immediate
- operand. */
-
-extern int
-xtensa_opcode_is_branch (xtensa_isa isa, xtensa_opcode opc);
-
-extern int
-xtensa_opcode_is_jump (xtensa_isa isa, xtensa_opcode opc);
-
-extern int
-xtensa_opcode_is_loop (xtensa_isa isa, xtensa_opcode opc);
-
-extern int
-xtensa_opcode_is_call (xtensa_isa isa, xtensa_opcode opc);
-
-
-/* Find the number of ordinary operands, state operands, and interface
- operands for an instruction. These return XTENSA_UNDEFINED on
- error. */
-
-extern int
-xtensa_opcode_num_operands (xtensa_isa isa, xtensa_opcode opc);
-
-extern int
-xtensa_opcode_num_stateOperands (xtensa_isa isa, xtensa_opcode opc);
-
-extern int
-xtensa_opcode_num_interfaceOperands (xtensa_isa isa, xtensa_opcode opc);
-
-
-/* Get functional unit usage requirements for an opcode. Each "use"
- is identified by a <functional unit, pipeline stage> pair. The
- "num_funcUnit_uses" function returns the number of these "uses" or
- XTENSA_UNDEFINED on error. The "funcUnit_use" function returns
- a pointer to a "use" pair or null on error. */
-
-typedef struct xtensa_funcUnit_use_struct
-{
- xtensa_funcUnit unit;
- int stage;
-} xtensa_funcUnit_use;
-
-extern int
-xtensa_opcode_num_funcUnit_uses (xtensa_isa isa, xtensa_opcode opc);
-
-extern xtensa_funcUnit_use *
-xtensa_opcode_funcUnit_use (xtensa_isa isa, xtensa_opcode opc, int u);
-
-
-
-/* Operand information. */
-
-/* Get the name of an operand. Returns null on error. */
-
-extern const char *
-xtensa_operand_name (xtensa_isa isa, xtensa_opcode opc, int opnd);
-
-
-/* Some operands are "invisible", i.e., not explicitly specified in
- assembly language. When assembling an instruction, you need not set
- the values of invisible operands, since they are either hardwired or
- derived from other field values. The values of invisible operands
- can be examined in the same way as other operands, but remember that
- an invisible operand may get its value from another visible one, so
- the entire instruction must be available before examining the
- invisible operand values. This function returns 1 if an operand is
- visible, 0 if it is invisible, or XTENSA_UNDEFINED on error. Note
- that whether an operand is visible is orthogonal to whether it is
- "implicit", i.e., whether it is encoded in a field in the
- instruction. */
-
-extern int
-xtensa_operand_is_visible (xtensa_isa isa, xtensa_opcode opc, int opnd);
-
-
-/* Check if an operand is an input ('i'), output ('o'), or inout ('m')
- operand. Note: The output operand of a conditional assignment
- (e.g., movnez) appears here as an inout ('m') even if it is declared
- in the TIE code as an output ('o'); this allows the compiler to
- properly handle register allocation for conditional assignments.
- Returns 0 on error. */
-
-extern char
-xtensa_operand_inout (xtensa_isa isa, xtensa_opcode opc, int opnd);
-
-
-/* Get and set the raw (encoded) value of the field for the specified
- operand. The "set" function does not check if the value fits in the
- field; that is done by the "encode" function below. Both of these
- functions return non-zero on error, e.g., if the field is not defined
- for the specified slot. */
-
-extern int
-xtensa_operand_get_field (xtensa_isa isa, xtensa_opcode opc, int opnd,
- xtensa_format fmt, int slot,
- const xtensa_insnbuf slotbuf, uint32 *valp);
-
-extern int
-xtensa_operand_set_field (xtensa_isa isa, xtensa_opcode opc, int opnd,
- xtensa_format fmt, int slot,
- xtensa_insnbuf slotbuf, uint32 val);
-
-
-/* Encode and decode operands. The raw bits in the operand field may
- be encoded in a variety of different ways. These functions hide
- the details of that encoding. The result values are returned through
- the argument pointer. The return value is non-zero on error. */
-
-extern int
-xtensa_operand_encode (xtensa_isa isa, xtensa_opcode opc, int opnd,
- uint32 *valp);
-
-extern int
-xtensa_operand_decode (xtensa_isa isa, xtensa_opcode opc, int opnd,
- uint32 *valp);
-
-
-/* An operand may be either a register operand or an immediate of some
- sort (e.g., PC-relative or not). The "is_register" function returns
- 0 if the operand is an immediate, 1 if it is a register, and
- XTENSA_UNDEFINED on error. The "regfile" function returns the
- regfile for a register operand, or XTENSA_UNDEFINED on error. */
-
-extern int
-xtensa_operand_is_register (xtensa_isa isa, xtensa_opcode opc, int opnd);
-
-extern xtensa_regfile
-xtensa_operand_regfile (xtensa_isa isa, xtensa_opcode opc, int opnd);
-
-
-/* Register operands may span multiple consecutive registers, e.g., a
- 64-bit data type may occupy two 32-bit registers. Only the first
- register is encoded in the operand field. This function specifies
- the number of consecutive registers occupied by this operand. For
- non-register operands, the return value is undefined. Returns
- XTENSA_UNDEFINED on error. */
-
-extern int
-xtensa_operand_num_regs (xtensa_isa isa, xtensa_opcode opc, int opnd);
-
-
-/* Some register operands do not completely identify the register being
- accessed. For example, the operand value may be added to an internal
- state value. By definition, this implies that the corresponding
- regfile is not allocatable. Unknown registers should generally be
- treated with worst-case assumptions. The function returns 0 if the
- register value is unknown, 1 if known, and XTENSA_UNDEFINED on
- error. */
-
-extern int
-xtensa_operand_is_known_reg (xtensa_isa isa, xtensa_opcode opc, int opnd);
-
-
-/* Check if an immediate operand is PC-relative. Returns 0 for register
- operands and non-PC-relative immediates, 1 for PC-relative
- immediates, and XTENSA_UNDEFINED on error. */
-
-extern int
-xtensa_operand_is_PCrelative (xtensa_isa isa, xtensa_opcode opc, int opnd);
-
-
-/* For PC-relative offset operands, the interpretation of the offset may
- vary between opcodes, e.g., is it relative to the current PC or that
- of the next instruction? The following functions are defined to
- perform PC-relative relocations and to undo them (as in the
- disassembler). The "do_reloc" function takes the desired address
- value and the PC of the current instruction and sets the value to the
- corresponding PC-relative offset (which can then be encoded and
- stored into the operand field). The "undo_reloc" function takes the
- unencoded offset value and the current PC and sets the value to the
- appropriate address. The return values are non-zero on error. Note
- that these functions do not replace the encode/decode functions; the
- operands must be encoded/decoded separately and the encode functions
- are responsible for detecting invalid operand values. */
-
-extern int
-xtensa_operand_do_reloc (xtensa_isa isa, xtensa_opcode opc, int opnd,
- uint32 *valp, uint32 pc);
-
-extern int
-xtensa_operand_undo_reloc (xtensa_isa isa, xtensa_opcode opc, int opnd,
- uint32 *valp, uint32 pc);
-
-
-
-/* State Operands. */
-
-/* Get the state accessed by a state operand. Returns XTENSA_UNDEFINED
- on error. */
-
-extern xtensa_state
-xtensa_stateOperand_state (xtensa_isa isa, xtensa_opcode opc, int stOp);
-
-
-/* Check if a state operand is an input ('i'), output ('o'), or inout
- ('m') operand. Returns 0 on error. */
-
-extern char
-xtensa_stateOperand_inout (xtensa_isa isa, xtensa_opcode opc, int stOp);
-
-
-
-/* Interface Operands. */
-
-/* Get the external interface accessed by an interface operand.
- Returns XTENSA_UNDEFINED on error. */
-
-extern xtensa_interface
-xtensa_interfaceOperand_interface (xtensa_isa isa, xtensa_opcode opc,
- int ifOp);
-
-
-
-/* Register Files. */
-
-/* Regfiles include both "real" regfiles and "views", where a view
- allows a group of adjacent registers in a real "parent" regfile to be
- viewed as a single register. A regfile view has all the same
- properties as its parent except for its (long) name, bit width, number
- of entries, and default ctype. You can use the parent function to
- distinguish these two classes. */
-
-/* Look up a regfile by either its name or its abbreviated "short name".
- Returns XTENSA_UNDEFINED on error. The "lookup_shortname" function
- ignores "view" regfiles since they always have the same shortname as
- their parents. */
-
-extern xtensa_regfile
-xtensa_regfile_lookup (xtensa_isa isa, const char *name);
-
-extern xtensa_regfile
-xtensa_regfile_lookup_shortname (xtensa_isa isa, const char *shortname);
-
-
-/* Get the name or abbreviated "short name" of a regfile.
- Returns null on error. */
-
-extern const char *
-xtensa_regfile_name (xtensa_isa isa, xtensa_regfile rf);
-
-extern const char *
-xtensa_regfile_shortname (xtensa_isa isa, xtensa_regfile rf);
-
-
-/* Get the parent regfile of a "view" regfile. If the regfile is not a
- view, the result is the same as the input parameter. Returns
- XTENSA_UNDEFINED on error. */
-
-extern xtensa_regfile
-xtensa_regfile_view_parent (xtensa_isa isa, xtensa_regfile rf);
-
-
-/* Get the bit width of a regfile or regfile view.
- Returns XTENSA_UNDEFINED on error. */
-
-extern int
-xtensa_regfile_num_bits (xtensa_isa isa, xtensa_regfile rf);
-
-
-/* Get the number of regfile entries. Returns XTENSA_UNDEFINED on
- error. */
-
-extern int
-xtensa_regfile_num_entries (xtensa_isa isa, xtensa_regfile rf);
-
-
-
-/* Processor States. */
-
-/* Look up a state by name. Returns XTENSA_UNDEFINED on error. */
-
-extern xtensa_state
-xtensa_state_lookup (xtensa_isa isa, const char *name);
-
-
-/* Get the name for a processor state. Returns null on error. */
-
-extern const char *
-xtensa_state_name (xtensa_isa isa, xtensa_state st);
-
-
-/* Get the bit width for a processor state.
- Returns XTENSA_UNDEFINED on error. */
-
-extern int
-xtensa_state_num_bits (xtensa_isa isa, xtensa_state st);
-
-
-/* Check if a state is exported from the processor core. Returns 0 if
- the condition is false, 1 if the condition is true, and
- XTENSA_UNDEFINED on error. */
-
-extern int
-xtensa_state_is_exported (xtensa_isa isa, xtensa_state st);
-
-
-/* Check for a "shared_or" state. Returns 0 if the condition is false,
- 1 if the condition is true, and XTENSA_UNDEFINED on error. */
-
-extern int
-xtensa_state_is_shared_or (xtensa_isa isa, xtensa_state st);
-
-
-
-/* Sysregs ("special registers" and "user registers"). */
-
-/* Look up a register by its number and whether it is a "user register"
- or a "special register". Returns XTENSA_UNDEFINED if the sysreg does
- not exist. */
-
-extern xtensa_sysreg
-xtensa_sysreg_lookup (xtensa_isa isa, int num, int is_user);
-
-
-/* Check if there exists a sysreg with a given name.
- If not, this function returns XTENSA_UNDEFINED. */
-
-extern xtensa_sysreg
-xtensa_sysreg_lookup_name (xtensa_isa isa, const char *name);
-
-
-/* Get the name of a sysreg. Returns null on error. */
-
-extern const char *
-xtensa_sysreg_name (xtensa_isa isa, xtensa_sysreg sysreg);
-
-
-/* Get the register number. Returns XTENSA_UNDEFINED on error. */
-
-extern int
-xtensa_sysreg_number (xtensa_isa isa, xtensa_sysreg sysreg);
-
-
-/* Check if a sysreg is a "special register" or a "user register".
- Returns 0 for special registers, 1 for user registers and
- XTENSA_UNDEFINED on error. */
-
-extern int
-xtensa_sysreg_is_user (xtensa_isa isa, xtensa_sysreg sysreg);
-
-
-
-/* Interfaces. */
-
-/* Find an interface by name. The return value is XTENSA_UNDEFINED if
- the specified interface is not found. */
-
-extern xtensa_interface
-xtensa_interface_lookup (xtensa_isa isa, const char *ifname);
-
-
-/* Get the name of an interface. Returns null on error. */
-
-extern const char *
-xtensa_interface_name (xtensa_isa isa, xtensa_interface intf);
-
-
-/* Get the bit width for an interface.
- Returns XTENSA_UNDEFINED on error. */
-
-extern int
-xtensa_interface_num_bits (xtensa_isa isa, xtensa_interface intf);
-
-
-/* Check if an interface is an input ('i') or output ('o') with respect
- to the Xtensa processor core. Returns 0 on error. */
-
-extern char
-xtensa_interface_inout (xtensa_isa isa, xtensa_interface intf);
-
-
-/* Check if accessing an interface has potential side effects.
- Currently "data" interfaces have side effects and "control"
- interfaces do not. Returns 1 if there are side effects, 0 if not,
- and XTENSA_UNDEFINED on error. */
-
-extern int
-xtensa_interface_has_side_effect (xtensa_isa isa, xtensa_interface intf);
-
-
-/* Some interfaces may be related such that accessing one interface
- has side effects on a set of related interfaces. The interfaces
- are partitioned into equivalence classes of related interfaces, and
- each class is assigned a unique identifier number. This function
- returns the class identifier for an interface, or XTENSA_UNDEFINED
- on error. These identifiers can be compared to determine if two
- interfaces are related; the specific values of the identifiers have
- no particular meaning otherwise. */
-
-extern int
-xtensa_interface_class_id (xtensa_isa isa, xtensa_interface intf);
-
-
-
-/* Functional Units. */
-
-/* Find a functional unit by name. The return value is XTENSA_UNDEFINED if
- the specified unit is not found. */
-
-extern xtensa_funcUnit
-xtensa_funcUnit_lookup (xtensa_isa isa, const char *fname);
-
-
-/* Get the name of a functional unit. Returns null on error. */
-
-extern const char *
-xtensa_funcUnit_name (xtensa_isa isa, xtensa_funcUnit fun);
-
-
-/* Functional units may be replicated. See how many instances of a
- particular function unit exist. Returns XTENSA_UNDEFINED on error. */
-
-extern int
-xtensa_funcUnit_num_copies (xtensa_isa isa, xtensa_funcUnit fun);
-
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* XTENSA_LIBISA_H */
diff --git a/winsup/COPYING b/winsup/COPYING
deleted file mode 100644
index 94a9ed024..000000000
--- a/winsup/COPYING
+++ /dev/null
@@ -1,674 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
- The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works. By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users. We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors. You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
- To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights. Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received. You must make sure that they, too, receive
-or can get the source code. And you must show them these terms so they
-know their rights.
-
- Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
- For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software. For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
- Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so. This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software. The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable. Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products. If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
- Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary. To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- TERMS AND CONDITIONS
-
- 0. Definitions.
-
- "This License" refers to version 3 of the GNU General Public License.
-
- "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
- "The Program" refers to any copyrightable work licensed under this
-License. Each licensee is addressed as "you". "Licensees" and
-"recipients" may be individuals or organizations.
-
- To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy. The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
- A "covered work" means either the unmodified Program or a work based
-on the Program.
-
- To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy. Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
- To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies. Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
- An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License. If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
- 1. Source Code.
-
- The "source code" for a work means the preferred form of the work
-for making modifications to it. "Object code" means any non-source
-form of a work.
-
- A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
- The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form. A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
- The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities. However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work. For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
- The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
- The Corresponding Source for a work in source code form is that
-same work.
-
- 2. Basic Permissions.
-
- All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met. This License explicitly affirms your unlimited
-permission to run the unmodified Program. The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work. This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
- You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force. You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright. Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
- Conveying under any other circumstances is permitted solely under
-the conditions stated below. Sublicensing is not allowed; section 10
-makes it unnecessary.
-
- 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
- No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
- When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
- 4. Conveying Verbatim Copies.
-
- You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
- You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
- 5. Conveying Modified Source Versions.
-
- You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
- a) The work must carry prominent notices stating that you modified
- it, and giving a relevant date.
-
- b) The work must carry prominent notices stating that it is
- released under this License and any conditions added under section
- 7. This requirement modifies the requirement in section 4 to
- "keep intact all notices".
-
- c) You must license the entire work, as a whole, under this
- License to anyone who comes into possession of a copy. This
- License will therefore apply, along with any applicable section 7
- additional terms, to the whole of the work, and all its parts,
- regardless of how they are packaged. This License gives no
- permission to license the work in any other way, but it does not
- invalidate such permission if you have separately received it.
-
- d) If the work has interactive user interfaces, each must display
- Appropriate Legal Notices; however, if the Program has interactive
- interfaces that do not display Appropriate Legal Notices, your
- work need not make them do so.
-
- A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit. Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
- 6. Conveying Non-Source Forms.
-
- You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
- a) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by the
- Corresponding Source fixed on a durable physical medium
- customarily used for software interchange.
-
- b) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by a
- written offer, valid for at least three years and valid for as
- long as you offer spare parts or customer support for that product
- model, to give anyone who possesses the object code either (1) a
- copy of the Corresponding Source for all the software in the
- product that is covered by this License, on a durable physical
- medium customarily used for software interchange, for a price no
- more than your reasonable cost of physically performing this
- conveying of source, or (2) access to copy the
- Corresponding Source from a network server at no charge.
-
- c) Convey individual copies of the object code with a copy of the
- written offer to provide the Corresponding Source. This
- alternative is allowed only occasionally and noncommercially, and
- only if you received the object code with such an offer, in accord
- with subsection 6b.
-
- d) Convey the object code by offering access from a designated
- place (gratis or for a charge), and offer equivalent access to the
- Corresponding Source in the same way through the same place at no
- further charge. You need not require recipients to copy the
- Corresponding Source along with the object code. If the place to
- copy the object code is a network server, the Corresponding Source
- may be on a different server (operated by you or a third party)
- that supports equivalent copying facilities, provided you maintain
- clear directions next to the object code saying where to find the
- Corresponding Source. Regardless of what server hosts the
- Corresponding Source, you remain obligated to ensure that it is
- available for as long as needed to satisfy these requirements.
-
- e) Convey the object code using peer-to-peer transmission, provided
- you inform other peers where the object code and Corresponding
- Source of the work are being offered to the general public at no
- charge under subsection 6d.
-
- A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
- A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling. In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage. For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product. A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
- "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source. The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
- If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information. But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
- The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed. Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
- Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
- 7. Additional Terms.
-
- "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law. If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
- When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it. (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.) You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
- Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
- a) Disclaiming warranty or limiting liability differently from the
- terms of sections 15 and 16 of this License; or
-
- b) Requiring preservation of specified reasonable legal notices or
- author attributions in that material or in the Appropriate Legal
- Notices displayed by works containing it; or
-
- c) Prohibiting misrepresentation of the origin of that material, or
- requiring that modified versions of such material be marked in
- reasonable ways as different from the original version; or
-
- d) Limiting the use for publicity purposes of names of licensors or
- authors of the material; or
-
- e) Declining to grant rights under trademark law for use of some
- trade names, trademarks, or service marks; or
-
- f) Requiring indemnification of licensors and authors of that
- material by anyone who conveys the material (or modified versions of
- it) with contractual assumptions of liability to the recipient, for
- any liability that these contractual assumptions directly impose on
- those licensors and authors.
-
- All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10. If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term. If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
- If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
- Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
- 8. Termination.
-
- You may not propagate or modify a covered work except as expressly
-provided under this License. Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
- However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
- Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
- Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License. If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
- 9. Acceptance Not Required for Having Copies.
-
- You are not required to accept this License in order to receive or
-run a copy of the Program. Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance. However,
-nothing other than this License grants you permission to propagate or
-modify any covered work. These actions infringe copyright if you do
-not accept this License. Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
- 10. Automatic Licensing of Downstream Recipients.
-
- Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License. You are not responsible
-for enforcing compliance by third parties with this License.
-
- An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations. If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
- You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License. For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
- 11. Patents.
-
- A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based. The
-work thus licensed is called the contributor's "contributor version".
-
- A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version. For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
- Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
- In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement). To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
- If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients. "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
- If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
- A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License. You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
- Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
- 12. No Surrender of Others' Freedom.
-
- If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all. For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
- 13. Use with the GNU Affero General Public License.
-
- Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work. The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
- 14. Revised Versions of this License.
-
- The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
- Each version is given a distinguishing version number. If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation. If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
- If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
- Later license versions may give you additional or different
-permissions. However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
- 15. Disclaimer of Warranty.
-
- THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. Limitation of Liability.
-
- IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
- 17. Interpretation of Sections 15 and 16.
-
- If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- 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 3 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, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
- If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
- <program> Copyright (C) <year> <name of author>
- This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
- You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
- The GNU General Public License does not permit incorporating your program
-into proprietary programs. If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library. If this is what you want to do, use the GNU Lesser General
-Public License instead of this License. But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/winsup/CYGWIN_LICENSE b/winsup/CYGWIN_LICENSE
deleted file mode 100644
index d1bf9d9f6..000000000
--- a/winsup/CYGWIN_LICENSE
+++ /dev/null
@@ -1,70 +0,0 @@
-Cygwin is free software. Red Hat, Inc. licenses Cygwin to you under the
-terms of the GNU General Public License as published by the Free Software
-Foundation; you can redistribute it and/or modify it under the terms of
-the GNU General Public License either version 3 of the license, or (at your
-option) any later version (GPLv3+), along with the additional permissions
-given below.
-
-There is NO WARRANTY for this software, express or implied, including
-the implied warranties 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, see <http://gnu.org/licenses/>.
-
-
-Additional Permissions:
-
-
-1. Linking Exception.
-
-As a special exception to GPLv3+, Red Hat grants you permission to link
-software whose sources are distributed under a license that satisfies
-the Open Source Definition with libcygwin.a, without libcygwin.a
-itself causing the resulting program to be covered by GPLv3+.
-
-This means that you can port an Open Source application to Cygwin, and
-distribute that executable as if it didn't include a copy of
-libcygwin.a linked into it. Note that this does not apply to the
-Cygwin DLL itself. If you distribute a (possibly modified) version of
-the Cygwin DLL, you must adhere to the terms of GPLv3+, including the
-requirement to provide sources for the Cygwin DLL, unless you have obtained
-a special Cygwin license to distribute the Cygwin DLL in only its binary
-form (see below).
-
-See http://www.opensource.org/docs/osd/ for the precise Open Source
-Definition referenced above.
-
-
-2. Files Excluded from GPL Coverage.
-
-Red Hat grants you permission to distribute Cygwin with the following
-files, which are not considered part of Cygwin and are not governed by
-GPLv3+, in source or binary form.
-
-winsup\testsuite\winsup.api\msgtest.c
-winsup\testsuite\winsup.api\semtest.c
-winsup\testsuite\winsup.api\shmtest.c
-
-Red Hat grants you permission to link or combine code in Cygwin with
-code in or corresponding to the following files, which are not
-considered part of Cygwin and are not governed by GPLv3+, and to
-distribute such combinations under terms of your choice, provided that
-such terms are otherwise consistent with the application of GPLv3+ to
-Cygwin itself. You must comply with GPLv3+ with respect to all
-portions of such combinations other than those that correspond to or
-are derived from such non-Cygwin code but which do not correspond to
-or are not derived from Cygwin itself.
-
-winsup\cygserver\sysv_shm.cc
-
-
-3. Alternative License.
-
-Red Hat sells a special Cygwin License for customers who are unable to
-provide their application in open source code form. For more
-information, please see: http://www.redhat.com/software/cygwin/, or call
-+1-866-2REDHAT ext. 45300 (toll-free in the US).
-
-Outside the US call your regional Red Hat office, see
-http://www.redhat.com/about/contact/ww/
diff --git a/winsup/ChangeLog b/winsup/ChangeLog
deleted file mode 100644
index 4756573aa..000000000
--- a/winsup/ChangeLog
+++ /dev/null
@@ -1,635 +0,0 @@
-2014-11-13 Corinna Vinschen <corinna@vinschen.de>
-
- * configure.ac: Convert to new AC_INIT style.
- * configure: Regenerate.
-
-2014-08-07 Yaakov Selkowitz <yselkowi@redhat.com>
-
- * Makefile.common (COMPILE.cc): Add -fno-use-cxa-atexit.
-
-2014-02-18 Christopher Faylor <me.cygwin2014@cgf.cx>
-
- * Makefile.in: Ignore errors on doc install.
-
-2013-01-22 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.common: Don't drop -gFOO switches when filtering CFLAGS
- and CXXFLAGS.
-
-2013-11-06 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * Makefile.in: Properly cd to directory sans install_ prefix. Report
- on errors on doc install. Only 'all' is special.
-
-2013-11-06 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * configure.ac: Detect windows headers/libs after we've figured out the
- C compiler.
- * configure: Regenerate.
- * aclocal.m4: Regenerate.
- * configure.cygwin: Default to '.' if can't find a winsup directory.
-
-2013-11-06 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * Makefile.in: Reinstate ignoring of errors for doc target.
-
-2013-06-18 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.common: Add rule to build assembler code.
- (.SUFFIXES): Add .S.
-
-2012-11-26 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * Makefile.in (Makefile): Rely on 'configure' not 'configure.in'.
-
-2012-11-26 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * configure.ac: Rename from configure.in.
- * configure.in: Delete.
- * configure: Regenerate.
-
-2012-11-26 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * ccwrap: Don't drop mingw header file paths unless we've specified
- them with --with-windows-headers.
-
-2012-11-12 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * Makefile.common: Revamp for new configury. Add default compilation
- targets, include .E processing. Add magic for allowing "CFLAGS" to
- control optimization options in "CXXFLAGS".
- * configure.cygwin: New include for Cygwin configure.in's.
- * acinclude.m4: Delete old definitions. Implement AC_WINDOWS_HEADERS,
- AC_WINDOWS_LIBS, AC_CYGWIN_INCLUDES, target_builddir, winsup_srcdir.
- * aclocal.m4: Regenerate.
- * autogen.sh: New file.
- * ccwrap: New script.
- * c++wrap: New script.
- * config.guess: New script.
- * config.sub: New script.
- * configure: Regenerate.
- * configure.in: Eliminate LIB_AC_PROG_* calls in favor of standard.
- Delete ancient target test.
- * install-sh: New script.
-
-2012-11-07 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * mingw: Delete obsolete directory.
- * w32api: Ditto.
-
-2012-11-07 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.common (zlib_source): Remove.
- (zlib_build): Remove.
- (bz2lib_source): Remove.
- (bz2lib_build): Remove.
- (w32api_source): Remove.
- (w32api_build): Remove.
- (w32api_lib): Remove.
- (mingw_build): Remove.
- (mingw_source): Remove.
- ($(w32api_lib)/%.a): Remove rule.
- * Makefile.in (ZLIB): Remove.
- ($(SUBDIRS)): Drop mingw check.
- (mingw): Remove rule.
- (install_mingw): Ditto.
- * configure.in: Remove support for mingw as build target.
- * configure: Regenerate.
-
-2012-10-24 Kai Tietz <ktietz70@googlemail.com>
- Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
- Corinna Vinschen <corinna@vinschen.de>
-
- * configure.in [cygwin*]: Always build cygserver, lsaauth,
- utils, and doc. Do not build mingw or w32api.
- [mingw*]: Build w32api if present.
- * configure: Regenerate.
- * Makefile.common: Remove references to mingw and w32api
- directories.
- (MINGW_LDFLAGS): Redefine as -static to force static linking
- with libgcc and libstdc++.
- * Makefile.in: Remove references to mingw and w32api directories
- from Cygwin targets.
-
-2012-07-30 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * Makefile.common (CFLAGS_COMMON): Add temporary define to work around
- w32api problem.
-
-2012-07-06 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.common (ALL_CFLAGS): Change := to = to allow overriding in
- dependent Makefiles.
-
-2012-01-09 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.common (MINGW_LDFLAGS): Correctly use -L rather than -B here.
-
-2011-04-19 Corinna Vinschen <corinna@vinschen.de>
-
- * COPYING: Replace with the GPLv3 definition.
- * CYGWIN_LICENSE: Move Cygwin to GPLv3+. Align text to FSF speak.
-
-2011-01-28 Peter Foley <jpfoley2@verizon.net>
-
- * configure.in: Configure winsup/cygserver regardless of cross_host.
- * configure: Regenerate.
-
-2009-07-07 Dave Korn <dave.korn.cygwin@gmail.com>
-
- * Makefile.common (COMPILE_CXX): Add support for per-file overrides
- to exclude $(nostdinc) and $(nostdincxx) from compiler flags.
- (COMPILE_CC): Likewise for $(nostdinc).
-
-2009-02-23 Sjors Gielen <mailinglist@dazjorz.com>
-
- * Makefile.in: Add DESTDIR functionality.
-
-2009-01-21 Corinna Vinschen <corinna@vinschen.de>
-
- * configure.in: Remove --enable-server option. Allways add the
- cygserver directory to $SUBDIRS.
- * configure: Regenerate.
-
-2008-10-12 Christopher Faylor <me+cygwin@cgf.cx>
-
- * Makefile.in: Revert erroneous checkin.
- * Makefile.common: Tweak to work better with new utils/mingw front-end.
-
-2008-10-11 Christopher Faylor <me+cygwin@cgf.cx>
-
- * Makefile.in: Tweak to work better with new utils/mingw front-end.
-
-2008-05-16 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (install-license): Install COPYING file as well.
-
-2008-05-16 Corinna Vinschen <corinna@vinschen.de>
-
- * CYGWIN_LICENSE: New text.
-
-2007-08-31 Christopher Faylor <me+cygwin@cgf.cx>
-
- * configure: Regenerate.
-
-2007-07-06 Corinna Vinschen <corinna@vinschen.de>
-
- * CYGWIN_LICENSE: Fix URL to world-wide offices.
-
-2007-07-06 Corinna Vinschen <corinna@vinschen.de>
-
- * CYGWIN_LICENSE: Fix URL to open source definition.
-
-2006-12-12 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (subauth): Drop rule.
- * configure.in: Remove subauth related check.
- * configure: Regenerate.
-
-2006-11-27 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in: Add dependencies for lsaauth.
- * configure.in: Disable building subauth. Add building lsaauth.
- * configure: Regenerate.
-
-2006-08-30 Christopher Faylor <cgf@timesys.com>
-
- * Makefile.in: Make install-license .PHONY. Make sure that doc
- directory is created before copying to it.
-
-2006-08-30 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in: Make installation of CYGWIN_LICENSE configurable.
- * aclocal.m4: Regenerate.
- * configure.in: Add GCC_NO_EXECUTABLES call. Add configuration for
- INSTALL_LICENSE. Make cygwin subdirectory optional. Add sanity
- check for cygwin resp. mingw subdirectories dependent of the target.
- * configure: Regenerate.
-
-2006-08-02 Christopher Faylor <cgf@timesys.com>
-
- * Makefile.in (subauth): Add dependency on mingw.
-
-2006-07-23 Christopher Faylor <cgf@timesys.com>
-
- * Makefile.in: Update copyright. Fix 'check' target so that it will
- once-again create a working testsuite directory. Add a comment this
- time to explain the unusual behavior.
-
-2006-07-14 Corinna Vinschen <corinna@vinschen.de>
-
- * configure.in: Reenable building the subauth subdir.
- * configure: Regenerate.
-
-2006-05-24 Christopher Faylor <cgf@timesys.com>
-
- * configure.in: Update to newer autoconf.
- (thanks to Steve Ellcey)
- * Makefile.in: Ditto.
- * configure: Regenerate.
- * acinclude.m4: New file.
- * aclocal.m4: Ditto.
-
-2006-01-29 Christopher Faylor <cgf@timesys.com>
-
- * CYGWIN_LICENSE: Restrict to v2.
- * COPYING: Add.
-
-2006-01-16 Corinna Vinschen <corinna@vinschen.de>
-
- * configure.in: Add AC_PROG_INSTALL handling.
- * configure: Regenerate.
- * Makefile.in (install): Install CYGWIN_LICENSE.
-
-2006-01-16 Corinna Vinschen <corinna@vinschen.de>
-
- * CYGWIN_LICENSE: Fix contact information.
-
-2005-10-11 Christopher Faylor <cgf@timesys.com>
-
- * Makefile.common (CFLAGS_COMMON): Add -Wstrict-aliasing.
-
-2005-03-22 Christopher Faylor <cgf@timesys.com>
-
- * Makefile.common: Add -dD to options when creating preprocess files.
-
-2003-11-23 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in: Make cygserver depending on cygwin.
-
-2003-11-20 Christopher Faylor <cgf@redhat.com>
-
- * configure.in: Make --use-server the default.
- * configure: Regenerate.
-
-2003-08-05 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.common: Hmm. Older compilers seem to need -nostdinc.
-
-2003-08-05 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.common: Don't use -nostdinc with g++.
-
-2003-07-25 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Only use localhost when building mingw with distcc or
- gcc won't be able to find .exp files on other hosts.
-
-2003-07-18 Vaclav Haisman <V.Haisman@sh.cvut.cz>
-
- * Makefile.common (CFLAGS_COMMON): Remove -march=i386.
-
-2003-07-01 Christopher Faylor <cgf@redhat.com>
-
- * configure.in: Add --enable-server option.
- * configure: Regenerate.
-
-2003-07-01 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.common (CFLAGS_COMMON): Remove -Winline since it is too
- noisy on newer versions of gcc.
-
-2003-07-01 Christopher Faylor <cgf@redhat.com>
-
- * configure.in: Add cygserver subdir.
- * Makefile.in: Ditto.
- * configure: Regenerate.
-
- * Makefile.common: Remove debugging statements.
-
-2003-05-12 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.common: Remove newlib_sys_include and
- newlib_sys_include_include entirely. Set CRT0 to cygwin/crt0.o.
-
-2003-04-18 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Reorganize to try to allow lack of mingw/w32api to work.
-
-2003-04-11 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.common (w32api_lib): Fix w32api detection.
-
-2003-03-28 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.common (ALL_CXXFLAGS): Make normal '=' type variable so that
- CXXFLAGS is properly interpreted.
-
-2003-03-17 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.common (w32api_lib): Default to system w32api directory if
- w32api is missing from source.
-
-2003-03-17 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.common: Fix typo from previous checkin.
-
-2003-03-17 Christopher Faylor <cgf@redhat.com>
-
- * configure.in: w32api directory was already optional. Semi-revert
- 2003-02-06 change.
- * configure: Regenerate.
- * Makefile.common: Don't specific -nostdinc if there is no w32api
- directory.
-
-2003-03-09 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.common: Avoid double slashes in GCC_INCLUDE.
-
-2003-02-12 Christopher Faylor <cgf@redhat.com>
-
- * MAINTAINERS: Remove out-of-date file.
-
-2003-02-06 Christopher Faylor <cgf@redhat.com>
-
- * configure.in: Make w32api directory optional.
- * configure: Regenerate.
-
-2003-01-22 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.common (MINGW_LDFLAGS): Add mingw/mingwex builddir.
-
-2002-12-21 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.common: Don't attempt to pretty-print c++ errors.
-
-2002-12-12 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.common: Define MINGW_LDFLAGS.
- * configure.in: Reorder SUBDIRS to have mingw before cygwin.
- * configure: Regenerate from configure.in.
-
-2002-09-27 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in (check): Be more defensive when creating testsuite
- config.status.
-
-2002-08-16 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Change COMPILE_C* definitions.
-
-2002-08-10 Earnie Boyd <earnie@users.sf.net>
-
- * w32sdk: New winsup module.
-
-2002-07-06 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.common (MINGW_INCLUDES): Simplify.
- (MINGW_CFLAGS): New.
- (MINGW_CXXFLAGS): Ditto.
-
-2002-06-02 Christopher Faylor <cgf@redhat.com>
-
- * configure.in: Complain about lack of w32api directory.
- * configure: Regenerate.
-
-2002-04-25 Christopher Faylor <cgf@redhat.com>
-
- * configure.in: Remove cinstall target.
- * Makefile.in: Ditto.
- * configure: Regenerate.
-
-2002-02-19 Christopher Faylor <cgf@redhat.com>
-
- * configure.in: Avoid building w32api or mingw if they don't exist.
- * configure: Regenerate.
-
-2001-12-18 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Don't attempt to use zlib directory as a dependency if
- it doesn't exist.
-
-2001-12-14 Christopher Faylor <cgf@redhat.com>
-
- * configure.in: Detect zlib subdirectory.
- * configure: Regenerate
- * Makefile.in: Exit immediately if a sub-make fails.
- * Makefile.common: Add automatic rules for bz2lib and zlib.
-
-2001-11-04 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Force configure in testsuite directory if config.status
- does not exist.
-
-2001-11-03 Christopher Faylor <cgf@redhat.com>
-
- * configure.in: Disable subauth directory test.
- * configure: Regenerate.
- * Makefile.in: Use MAKE variable in directory builds.
-
-2001-11-03 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Add directory dependencies to ensure ordering when using
- 'make -jN'.
-
-2001-11-03 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.common: Remove preferred-stack-boundary setting since gcc
- 2.95.3 doesn't work well with it.
-
-2001-11-01 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.common: Add some stuff to common CFLAGS.
-
-2001-10-29 Egor Duda <deo@logos-m.ru>
-
- * Makefile.in: Propagate 'clean' to subdirs properly.
-
-2001-10-26 Corinna Vinschen <corinna@vinschen.de>
-
- * configure: Regenerate, removing erroneous SUBDIRS substitution.
-
-2001-10-24 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Only build testsuite directory on first 'make check'.
- * configure.in: Remove testsuite from SUBDIRS.
- * configure: Regenerate.
-
-2001-10-12 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Add -nostdinc to CXXFLAGS.
-
-2001-10-12 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.common: Perform more include file testing trickery.
-
-Sun Oct 7 23:08:46 2001 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.common: Avoid adding -I options to compile if they already
- exist in CC or C*FLAGS. This prevents warnings from newer versions of
- gcc.
-
-Tue May 15 01:09:56 2001 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.common: Change method for finding current directory.
-
-Sat May 5 00:14:03 2001 Christopher Faylor <cgf@cygnus.com>
-
- * configure.in: Fix typo.
- * configure: Regenerate.
-
-Fri May 4 11:24:53 2001 Christopher Faylor <cgf@cygnus.com>
-
- * configure.in: Make subauth configuration optional.
- * configure: Regenerate.
-
-Fri May 4 15:06:00 Corinna Vinschen <corinna@vinschen.de>
-
- * subauth: New subdirectory.
- * configure.in: Add subauth to the list of subdirectories.
- * configure: Regenerated from configure.in.
-
-Wed Apr 18 18:45:07 2001 Christopher Faylor <cgf@cygnus.com>
-
- * configure.in: Add bz2lib.
-
-2001-03-19 DJ Delorie <dj@redhat.com>
-
- * configure: fix regeneration bug.
-
-Thu Feb 22 13:36:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.common: Revert previous change.
-
-Wed Feb 21 22:41:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.common: Add `-fvtable-thunks' to COMPILE_CXX.
-
-Sun Dec 3 00:21:31 2000 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.common: Eliminate checks for libgcc.a and libstdc++.a. Use
- CXX for g++ compiles.
- * configure.in: Find correct c++ compiler.
- * configure: Regenerate.
-
-Mon Oct 23 00:50:02 2000 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.common (LIBGCC): Acommodate older gcc's that don't need
- libstdc++.a.
-
-Sat Oct 21 18:01:22 2000 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.common (LIBGCC): Find libstdc++.a as well as libc.a since
- builtin functions are in this library in newer gcc's.
-
-Sun Oct 1 22:02:38 2000 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.common: Extend VERBOSE default.
- * Makefile.in: Don't clean the testsuite separately. It's already part
- of CLEAN_SUBDIRS.
-
-2000-09-30 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.common: Default to VERBOSE when part of overall source
- tree build.
-
-2000-09-02 Egor Duda <deo@logos-m.ru>
-
- * Makefile.in: Add new goal "check"
- * configure.in: When doing native build do configure in
- testsuite subdirectory
- * configure: Regenerate.
-
-Fri Sep 1 10:15:37 2000 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: More normalization.
-
-Thu Aug 31 16:37:31 2000 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Normalize 'pwd' based on location of winsup.
-
-Thu Aug 24 15:02:26 2000 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.common: Add bupdir2 to reference above the i686-pc-cygwin
- directory.
-
-Thu Jun 22 18:28:06 2000 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Add dummy info targets.
-
-Tue Jun 20 13:36:23 2000 Christopher Faylor <cgf@cygnus.com>
-
- * configure.in: Bow to necessity and build w32api before anything else.
- * configure: Regenerate.
-
-Sat Jun 17 13:50:04 2000 Christopher Faylor <cgf@cygnus.com>
-
- * configure.in: Detect "cross-hosting" situation and add a subset of
- directories to SUBDIRS.
- * configure: Regenerate.
-
-Thu May 25 18:39:24 2000 Christopher Faylor <cgf@cygnus.com>
-
- * configure.in: Don't assume that cinstall directory exists.
- * configure: Regenerate
-
-2000-05-24 DJ Delorie <dj@cygnus.com>
-
- * Makefile.common (%.o): further simplify, add "..." to make it obvious
- it's an abbreviated command line.
-
-Thu May 18 14:33:05 2000 Christopher Faylor <cgf@cygnus.com>
-
- * MAINTAINERS: Add Corinna to general list.
-
-2000-04-17 DJ Delorie <dj@cygnus.com>
-
- * Makefile.common (srcdir): remove dependence on where pwd is
-
-Sun Apr 9 23:47:45 2000 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.common: Resolve srcdir to absolute path or it will confuse
- usages when passed to submakes. Eliminate vestigal use of
- MAKEOVERRIDES.
-
-Sun Apr 9 02:06:49 2000 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Work around MAKEOVERRIDES problem with older versions
- of make.
- * Makefile.common: Ditto.
-
-Fri Apr 7 17:04:02 Ron Parker <rdparker@sourceware.cygnus.com>
-
- * configure.in: Added cinstall to the list of subdirs.
- * configure: Regenerate.
-
-Thu Mar 30 23:45:00 2000 Christopher Faylor <cgf@cygnus.com>
-
- * MAINTAINERS: Add Ron Parker as maintainer of cinstall stuff.
-
-Sun Feb 6 18:15:44 2000 Christopher Faylor <cgf@cygnus.com>
-
- * configure.in: Do the standard CC/CFLAGS stuff for propagation to
- sub-configures.
- * configure: Regenerate.
-
-2000-01-26 DJ Delorie <dj@cygnus.com>
-
- * doc/Makefile.in: fix doctool -d options
-
-Fri Jan 21 12:51:32 2000 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.common: No need to rerun Makefile if config.status changes.
- That should happen automatically.
- * Makefile.in: Ditto.
-
-Sat Jan 8 14:40:01 2000 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.common: Remove cygwin DLL specific stuff. Make Makefile
- target PRECIOUS.
- * Makefile.in: Make Makefile target PRECIOUS.
-
-Fri Jan 7 21:00:49 2000 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.common: Remove cygwin DLL specific stuff. Correctly deal
- with updir stuff when building in the same directory as the source.
-
-Thu Jan 6 19:04:35 2000 Christopher Faylor <cgf@cygnus.com>
-
- Create new directory structure
- * Makefile.in: New file.
- * configure.in: New file.
- * configure: New file.
- * Makefile.common: New file.
- * cygwin: New directory.
- * w32api: New directory.
diff --git a/winsup/Makefile.common b/winsup/Makefile.common
deleted file mode 100644
index d3a46e740..000000000
--- a/winsup/Makefile.common
+++ /dev/null
@@ -1,55 +0,0 @@
-# Makefile.common - common definitions for the winsup directory
-#
-# Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2009, 2012 Red Hat, Inc.
-#
-# This file is part of Cygwin.
-#
-# This software is a copyrighted work licensed under the terms of the
-# Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-# details.
-
-define justdir
-$(patsubst %/,%,$(dir $1))
-endef
-
-define libname
-$(realpath $(shell ${CC} --print-file-name=$1 $2))
-endef
-
-export PATH:=${winsup_srcdir}:${PATH}
-
-# Allow CFLAGS=-O,-g to control CXXFLAGS too
-opt=$(filter -O%,${CFLAGS}) $(filter -g%,${CFLAGS})
-override CXXFLAGS:=${filter-out -g%,$(filter-out -O%,${CXXFLAGS})} ${opt}
-
-cflags_common:=-Wall -Wstrict-aliasing -Wwrite-strings -fno-common -pipe -fbuiltin -fmessage-length=0
-COMPILE.cc=c++wrap ${CXXFLAGS} -fno-rtti -fno-exceptions -fno-use-cxa-atexit ${cflags_common}
-COMPILE.c=ccwrap ${CFLAGS} ${cflags_common}
-
-top_srcdir:=$(call justdir,${winsup_srcdir})
-top_builddir:=$(call justdir,${target_builddir})
-
-cygwin_build:=${target_builddir}/winsup/cygwin
-newlib_build:=${target_builddir}/newlib
-
-nostdlib:=-nostdlib
-
-VPATH:=${srcdir}
-
-.SUFFIXES:
-.SUFFIXES: .c .cc .def .S .a .o .d .s .E
-
-%.o: %.cc
- $(strip ${COMPILE.cc} -c -o $@ $<)
-
-%.o: %.c
- $(strip ${COMPILE.c} -c -o $@ $<)
-
-%.E: %.cc
- $(strip ${COMPILE.cc} -E -dD -o $@ $<)
-
-%.E: %.c
- $(strip ${COMPILE.c} -E -dD -o $@ $<)
-
-%.o: %.S
- $(strip ${COMPILE.S} -c -o $@ $<)
diff --git a/winsup/Makefile.in b/winsup/Makefile.in
deleted file mode 100644
index 29ef22abe..000000000
--- a/winsup/Makefile.in
+++ /dev/null
@@ -1,129 +0,0 @@
-# Makefile.in for windows stuff
-# Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2006, 2007,
-# 2008, 2009, 2012, 2013 Red Hat, Inc.
-#
-# This file is part of Cygwin.
-#
-# This software is a copyrighted work licensed under the terms of the
-# Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-# details.
-
-# This makefile requires GNU make.
-
-SHELL:=@SHELL@
-VPATH:=@srcdir@
-srcdir:=@srcdir@
-objdir:=.
-
-target_alias:=@target_alias@
-build_alias:=@build_alias@
-host_alias:=@host_alias@
-prefix:=@prefix@
-
-program_transform_name:=@program_transform_name@
-exec_prefix:=@exec_prefix@
-bindir:=@bindir@
-libdir:=@libdir@
-ifeq ($(target_alias),$(host_alias))
-ifeq ($(build_alias),$(host_alias))
-tooldir:=$(exec_prefix)
-else
-tooldir:=$(exec_prefix)/$(target_alias)
-endif
-else
-tooldir:=$(exec_prefix)/$(target_alias)
-endif
-datadir:=@datadir@
-infodir:=@infodir@
-includedir:=@includedir@
-
-INSTALL:=@INSTALL@
-INSTALL_PROGRAM:=@INSTALL_PROGRAM@
-INSTALL_DATA:=@INSTALL_DATA@
-
-SUBDIRS=@subdirs@
-INSTALL_SUBDIRS=${patsubst %,install_%,$(SUBDIRS)}
-CLEAN_SUBDIRS=${patsubst %,clean_%,$(SUBDIRS)}
-
-INSTALL_LICENSE:=@INSTALL_LICENSE@
-
-.PHONY: all install clean all-info info install-info install-license check \
- $(SUBDIRS) $(INSTALL_SUBDIRS) $(CLEAN_SUBDIRS)
-
-.SUFFIXES:
-
-MAKEOVERRIDES_WORKAROUND=${wordlist 2,1,a b c}
-
-ifneq ($(MAKEOVERRIDES_WORKAROUND),)
- override MAKE:=$(MAKE) $(MAKEOVERRIDES)
- MAKEOVERRIDES:=
- export MAKEOVERRIDES
-endif
-
-all: Makefile $(SUBDIRS)
-
-install-license: CYGWIN_LICENSE COPYING
- ${INSTALL} -d $(DESTDIR)$(prefix)/share/doc/Cygwin
- for i in $^; do \
- ${INSTALL} $$i $(DESTDIR)$(prefix)/share/doc/Cygwin ; \
- done
-
-install: Makefile $(INSTALL_LICENSE) $(INSTALL_SUBDIRS)
-
-clean: $(CLEAN_SUBDIRS)
-
-all-info:
-
-install-info:
-
-info:
-
-$(SUBDIRS):
- @${MAKE} -C $@ all || ([ "$@" == doc ] && echo "*** error ignored")
-
-$(INSTALL_SUBDIRS):
- @${MAKE} -C $(patsubst install_%,%,$@) install || ([ "$@" == install_doc ] && echo "*** error ignored")
-
-$(CLEAN_SUBDIRS):
- @if cd $(patsubst clean_%,%,$@) 2>/dev/null; then \
- $(MAKE) clean || exit 1; \
- fi || exit 0
-
-.PRECIOUS: Makefile
-
-Makefile: Makefile.in $(srcdir)/configure config.status
- $(SHELL) config.status
-
-config.status: configure
- $(SHELL) config.status --recheck
-
-# The below rule is intended to run configure only when "make check" is
-# actually specified, i.e., not in a cross-compilation environment. The
-# cygwin configuration is copied and modified to ensure that the same configuration
-# parameters are passed when the testsuite is configured as when cygwin was configured.
-check: cygwin
- @if [ -f testsuite/config.status ]; then \
- cd testsuite; \
- else \
- (mkdir testsuite 2>/dev/null || exit 0); \
- cd testsuite; \
- sed -e 's%winsup/cygwin\>%winsup/testsuite%g' ../cygwin/config.status > config.status; \
- chmod a+x config.status; \
- sh ./config.status --recheck; \
- sh ./config.status; \
- fi; \
- $(MAKE) check
-
-utils: cygwin
-
-cygwin:
-
-cygserver: cygwin
-
-install_utils: cygwin
-
-install_cygwin:
-
-install_cygserver: cygwin
-
-lsaauth:
diff --git a/winsup/README b/winsup/README
deleted file mode 100644
index 290275cd7..000000000
--- a/winsup/README
+++ /dev/null
@@ -1,9 +0,0 @@
-THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
-IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-
-Cygwin documentation is available on the net at http://cygwin.com
-You might especially be interested in
-
-http://cygwin.com/faq/faq.programming.html#faq.programming.building-cygwin
-
diff --git a/winsup/acinclude.m4 b/winsup/acinclude.m4
deleted file mode 100644
index 80c920e8c..000000000
--- a/winsup/acinclude.m4
+++ /dev/null
@@ -1,83 +0,0 @@
-dnl This provides configure definitions used by all the cygwin
-dnl configure.in files.
-
-AC_DEFUN([AC_WINDOWS_HEADERS],[
-AC_ARG_WITH(
- [windows-headers],
- [AS_HELP_STRING([--with-windows-headers=DIR],
- [specify where the windows includes are located])],
- [test -z "$withval" && AC_MSG_ERROR([must specify value for --with-windows-headers])]
-)
-])
-
-AC_DEFUN([AC_WINDOWS_LIBS],[
-AC_ARG_WITH(
- [windows-libs],
- [AS_HELP_STRING([--with-windows-libs=DIR],
- [specify where the windows libraries are located])],
- [test -z "$withval" && AC_MSG_ERROR([must specify value for --with-windows-libs])]
-)
-windows_libdir=$(realdirpath "$with_windows_libs")
-if test -z "$windows_libdir"; then
- windows_libdir=$(realdirpath $(${ac_cv_prog_CC:-$CC} -xc /dev/null -Wl,--verbose=1 -lntdll 2>&1 | sed -rn 's%^.*\s(\S+)/libntdll\..*succeeded%\1%p'))
- if test -z "$windows_libdir"; then
- AC_MSG_ERROR([cannot find windows library files])
- fi
-fi
-AC_SUBST(windows_libdir)
-]
-)
-
-AC_DEFUN([AC_CYGWIN_INCLUDES], [
-addto_CPPFLAGS -nostdinc
-: ${ac_cv_prog_CXX:=$CXX}
-: ${ac_cv_prog_CC:=$CC}
-
-cygwin_headers=$(realdirpath "$winsup_srcdir/cygwin/include")
-if test -z "$cygwin_headers"; then
- AC_MSG_ERROR([cannot find $winsup_srcdir/cygwin/include directory])
-fi
-
-newlib_headers=$(realdirpath $winsup_srcdir/../newlib/libc/include)
-if test -z "$newlib_headers"; then
- AC_MSG_ERROR([cannot find newlib source directory: $winsup_srcdir/../newlib/libc/include])
-fi
-newlib_headers="$target_builddir/newlib/targ-include $newlib_headers"
-
-if test -n "$with_windows_headers"; then
- if test -e "$with_windows_headers/windef.h"; then
- windows_headers="$with_windows_headers"
- else
- AC_MSG_ERROR([cannot find windef.h in specified --with-windows-headers path: $saw_windows_headers]);
- fi
-elif test -d "$winsup_srcdir/w32api/include/windef.h"; then
- windows_headers="$winsup_srcdir/w32api/include"
-else
- windows_headers=$(cd $($ac_cv_prog_CC -xc /dev/null -E -include windef.h 2>/dev/null | sed -n 's%^# 1 "\([^"]*\)/windef\.h".*$%\1%p' | head -n1) 2>/dev/null && pwd)
- if test -z "$windows_headers" -o ! -d "$windows_headers"; then
- AC_MSG_ERROR([cannot find windows header files])
- fi
-fi
-CC=$ac_cv_prog_CC
-CXX=$ac_cv_prog_CXX
-export CC
-export CXX
-AC_SUBST(windows_headers)
-AC_SUBST(newlib_headers)
-AC_SUBST(cygwin_headers)
-])
-
-AC_DEFUN([AC_CONFIGURE_ARGS], [
-configure_args=X
-for f in $ac_configure_args; do
- case "$f" in
- *--srcdir*) ;;
- *) configure_args="$configure_args $f" ;;
- esac
-done
-configure_args=$(/usr/bin/expr "$configure_args" : 'X \(.*\)')
-AC_SUBST(configure_args)
-])
-
-AC_SUBST(target_builddir)
-AC_SUBST(winsup_srcdir)
diff --git a/winsup/aclocal.m4 b/winsup/aclocal.m4
deleted file mode 100644
index e798741a7..000000000
--- a/winsup/aclocal.m4
+++ /dev/null
@@ -1,15 +0,0 @@
-# generated automatically by aclocal 1.11.6 -*- Autoconf -*-
-
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
-# Inc.
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-m4_include([acinclude.m4])
diff --git a/winsup/autogen.sh b/winsup/autogen.sh
deleted file mode 100755
index 12373891e..000000000
--- a/winsup/autogen.sh
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/sh -e
-if ! /usr/bin/test -e config.guess; then
- /usr/bin/wget -q -O config.guess 'http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD'
- /bin/chmod a+x config.guess
-fi
-if ! /usr/bin/test -e config.sub; then
- /usr/bin/wget -q -O config.sub 'http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD'
- /bin/chmod a+x config.sub
-fi
-/usr/bin/aclocal --force
-/usr/bin/autoconf -f
-/bin/rm -rf autom4te.cache
-res=0
-for d in cygwin utils cygserver; do
- (cd $d && exec ./autogen.sh) || res=1
-done
-exit $res
diff --git a/winsup/c++wrap b/winsup/c++wrap
deleted file mode 100755
index 987acb8c5..000000000
--- a/winsup/c++wrap
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/usr/bin/perl
-use strict;
-use File::Basename;
-my $pgm = basename($0);
-(my $wrapper = $pgm) =~ s/\+\+/c/o;
-exec $wrapper, '++', @ARGV;
diff --git a/winsup/ccwrap b/winsup/ccwrap
deleted file mode 100755
index 7580e7a3b..000000000
--- a/winsup/ccwrap
+++ /dev/null
@@ -1,55 +0,0 @@
-#!/usr/bin/perl
-use Cwd;
-use strict;
-my $cxx;
-my $ccorcxx;
-if ($ARGV[0] ne '++') {
- $ccorcxx = 'CC';
- $cxx = 0;
-} else {
- shift @ARGV;
- $ccorcxx = 'CXX';
- $cxx = 1;
-}
-die "$0: $ccorcxx environment variable does not exist\n" unless exists $ENV{$ccorcxx};
-my @compiler = split ' ', $ENV{$ccorcxx};
-if ("@ARGV" !~ / -nostdinc/o) {
- my $fd;
- push @compiler, ($cxx ? '-xc++' : '-xc');
- if (!open $fd, '-|') {
- open STDERR, '>&', \*STDOUT;
- exec @compiler, '/dev/null', '-v', '-E', '-o', '/dev/null' or die "*** error execing $compiler[0] - $!\n";
- }
- $compiler[1] =~ s/xc/nostdinc/o;
- push @compiler, '-nostdinc' if $cxx;
- push @compiler, '-I' . $_ for split ' ', $ENV{CCWRAP_HEADERS};
- push @compiler, '-isystem', $_ for split ' ', $ENV{CCWRAP_SYSTEM_HEADERS};
- my $finding_paths = 0;
- my $mingw_compiler = $compiler[0] =~ /mingw/o;
- my @dirafters;
- for my $d (split ' ', $ENV{CCWRAP_DIRAFTER_HEADERS}) {
- push @dirafters, '-isystem', $d if !$mingw_compiler || $d !~ /w32api/o;
- }
- while (<$fd>) {
- if (/^\*\*\*/o) {
- print;
- } elsif ($_ eq "#include <...> search starts here:\n") {
- $finding_paths = 1;
- } elsif (!$finding_paths) {
- next;
- } elsif ($_ eq "End of search list.\n") {
- last;
- } elsif (!@dirafters || !m%w32api|mingw.*/include%o) {
- chomp;
- s/^\s+//;
- push @compiler, '-isystem', Cwd::abs_path($_);
- }
- }
- push @compiler, @dirafters;
- close $fd;
-}
-
-push @compiler, @ARGV;
-
-print join(' ', '+', @compiler), "\n" if $ENV{CCWRAP_VERBOSE};
-exec @compiler or die "$0: $compiler[0] failed to execute\n";
diff --git a/winsup/config.guess b/winsup/config.guess
deleted file mode 100755
index 872b96a16..000000000
--- a/winsup/config.guess
+++ /dev/null
@@ -1,1537 +0,0 @@
-#! /bin/sh
-# Attempt to guess a canonical system name.
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
-# 2011, 2012 Free Software Foundation, Inc.
-
-timestamp='2012-09-25'
-
-# This file 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, see <http://www.gnu.org/licenses/>.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-
-# Originally written by Per Bothner. Please send patches (context
-# diff format) to <config-patches@gnu.org> and include a ChangeLog
-# entry.
-#
-# This script attempts to guess a canonical system name similar to
-# config.sub. If it succeeds, it prints the system name on stdout, and
-# exits with 0. Otherwise, it exits with 1.
-#
-# You can get the latest version of this script from:
-# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION]
-
-Output the configuration name of the system \`$me' is run on.
-
-Operation modes:
- -h, --help print this help, then exit
- -t, --time-stamp print date of last modification, then exit
- -v, --version print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.guess ($timestamp)
-
-Originally written by Per Bothner.
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
-Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions. There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
- case $1 in
- --time-stamp | --time* | -t )
- echo "$timestamp" ; exit ;;
- --version | -v )
- echo "$version" ; exit ;;
- --help | --h* | -h )
- echo "$usage"; exit ;;
- -- ) # Stop option processing
- shift; break ;;
- - ) # Use stdin as input.
- break ;;
- -* )
- echo "$me: invalid option $1$help" >&2
- exit 1 ;;
- * )
- break ;;
- esac
-done
-
-if test $# != 0; then
- echo "$me: too many arguments$help" >&2
- exit 1
-fi
-
-trap 'exit 1' 1 2 15
-
-# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
-# compiler to aid in system detection is discouraged as it requires
-# temporary files to be created and, as you can see below, it is a
-# headache to deal with in a portable fashion.
-
-# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
-# use `HOST_CC' if defined, but it is deprecated.
-
-# Portable tmp directory creation inspired by the Autoconf team.
-
-set_cc_for_build='
-trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
-trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
-: ${TMPDIR=/tmp} ;
- { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
- { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
- { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
- { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
-dummy=$tmp/dummy ;
-tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
-case $CC_FOR_BUILD,$HOST_CC,$CC in
- ,,) echo "int x;" > $dummy.c ;
- for c in cc gcc c89 c99 ; do
- if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
- CC_FOR_BUILD="$c"; break ;
- fi ;
- done ;
- if test x"$CC_FOR_BUILD" = x ; then
- CC_FOR_BUILD=no_compiler_found ;
- fi
- ;;
- ,,*) CC_FOR_BUILD=$CC ;;
- ,*,*) CC_FOR_BUILD=$HOST_CC ;;
-esac ; set_cc_for_build= ;'
-
-# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
-# (ghazi@noc.rutgers.edu 1994-08-24)
-if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
- PATH=$PATH:/.attbin ; export PATH
-fi
-
-UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
-UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
-UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
-UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
-
-# Note: order is significant - the case branches are not exclusive.
-
-case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
- *:NetBSD:*:*)
- # NetBSD (nbsd) targets should (where applicable) match one or
- # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
- # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
- # switched to ELF, *-*-netbsd* would select the old
- # object file format. This provides both forward
- # compatibility and a consistent mechanism for selecting the
- # object file format.
- #
- # Note: NetBSD doesn't particularly care about the vendor
- # portion of the name. We always set it to "unknown".
- sysctl="sysctl -n hw.machine_arch"
- UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
- /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
- case "${UNAME_MACHINE_ARCH}" in
- armeb) machine=armeb-unknown ;;
- arm*) machine=arm-unknown ;;
- sh3el) machine=shl-unknown ;;
- sh3eb) machine=sh-unknown ;;
- sh5el) machine=sh5le-unknown ;;
- *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
- esac
- # The Operating System including object format, if it has switched
- # to ELF recently, or will in the future.
- case "${UNAME_MACHINE_ARCH}" in
- arm*|i386|m68k|ns32k|sh3*|sparc|vax)
- eval $set_cc_for_build
- if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
- | grep -q __ELF__
- then
- # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
- # Return netbsd for either. FIX?
- os=netbsd
- else
- os=netbsdelf
- fi
- ;;
- *)
- os=netbsd
- ;;
- esac
- # The OS release
- # Debian GNU/NetBSD machines have a different userland, and
- # thus, need a distinct triplet. However, they do not need
- # kernel version information, so it can be replaced with a
- # suitable tag, in the style of linux-gnu.
- case "${UNAME_VERSION}" in
- Debian*)
- release='-gnu'
- ;;
- *)
- release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
- ;;
- esac
- # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
- # contains redundant information, the shorter form:
- # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
- echo "${machine}-${os}${release}"
- exit ;;
- *:Bitrig:*:*)
- UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
- echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE}
- exit ;;
- *:OpenBSD:*:*)
- UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
- echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
- exit ;;
- *:ekkoBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
- exit ;;
- *:SolidBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
- exit ;;
- macppc:MirBSD:*:*)
- echo powerpc-unknown-mirbsd${UNAME_RELEASE}
- exit ;;
- *:MirBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
- exit ;;
- alpha:OSF1:*:*)
- case $UNAME_RELEASE in
- *4.0)
- UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
- ;;
- *5.*)
- UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
- ;;
- esac
- # According to Compaq, /usr/sbin/psrinfo has been available on
- # OSF/1 and Tru64 systems produced since 1995. I hope that
- # covers most systems running today. This code pipes the CPU
- # types through head -n 1, so we only detect the type of CPU 0.
- ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`
- case "$ALPHA_CPU_TYPE" in
- "EV4 (21064)")
- UNAME_MACHINE="alpha" ;;
- "EV4.5 (21064)")
- UNAME_MACHINE="alpha" ;;
- "LCA4 (21066/21068)")
- UNAME_MACHINE="alpha" ;;
- "EV5 (21164)")
- UNAME_MACHINE="alphaev5" ;;
- "EV5.6 (21164A)")
- UNAME_MACHINE="alphaev56" ;;
- "EV5.6 (21164PC)")
- UNAME_MACHINE="alphapca56" ;;
- "EV5.7 (21164PC)")
- UNAME_MACHINE="alphapca57" ;;
- "EV6 (21264)")
- UNAME_MACHINE="alphaev6" ;;
- "EV6.7 (21264A)")
- UNAME_MACHINE="alphaev67" ;;
- "EV6.8CB (21264C)")
- UNAME_MACHINE="alphaev68" ;;
- "EV6.8AL (21264B)")
- UNAME_MACHINE="alphaev68" ;;
- "EV6.8CX (21264D)")
- UNAME_MACHINE="alphaev68" ;;
- "EV6.9A (21264/EV69A)")
- UNAME_MACHINE="alphaev69" ;;
- "EV7 (21364)")
- UNAME_MACHINE="alphaev7" ;;
- "EV7.9 (21364A)")
- UNAME_MACHINE="alphaev79" ;;
- esac
- # A Pn.n version is a patched version.
- # A Vn.n version is a released version.
- # A Tn.n version is a released field test version.
- # A Xn.n version is an unreleased experimental baselevel.
- # 1.2 uses "1.2" for uname -r.
- echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
- # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
- exitcode=$?
- trap '' 0
- exit $exitcode ;;
- Alpha\ *:Windows_NT*:*)
- # How do we know it's Interix rather than the generic POSIX subsystem?
- # Should we change UNAME_MACHINE based on the output of uname instead
- # of the specific Alpha model?
- echo alpha-pc-interix
- exit ;;
- 21064:Windows_NT:50:3)
- echo alpha-dec-winnt3.5
- exit ;;
- Amiga*:UNIX_System_V:4.0:*)
- echo m68k-unknown-sysv4
- exit ;;
- *:[Aa]miga[Oo][Ss]:*:*)
- echo ${UNAME_MACHINE}-unknown-amigaos
- exit ;;
- *:[Mm]orph[Oo][Ss]:*:*)
- echo ${UNAME_MACHINE}-unknown-morphos
- exit ;;
- *:OS/390:*:*)
- echo i370-ibm-openedition
- exit ;;
- *:z/VM:*:*)
- echo s390-ibm-zvmoe
- exit ;;
- *:OS400:*:*)
- echo powerpc-ibm-os400
- exit ;;
- arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
- echo arm-acorn-riscix${UNAME_RELEASE}
- exit ;;
- arm*:riscos:*:*|arm*:RISCOS:*:*)
- echo arm-unknown-riscos
- exit ;;
- SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
- echo hppa1.1-hitachi-hiuxmpp
- exit ;;
- Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
- # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
- if test "`(/bin/universe) 2>/dev/null`" = att ; then
- echo pyramid-pyramid-sysv3
- else
- echo pyramid-pyramid-bsd
- fi
- exit ;;
- NILE*:*:*:dcosx)
- echo pyramid-pyramid-svr4
- exit ;;
- DRS?6000:unix:4.0:6*)
- echo sparc-icl-nx6
- exit ;;
- DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
- case `/usr/bin/uname -p` in
- sparc) echo sparc-icl-nx7; exit ;;
- esac ;;
- s390x:SunOS:*:*)
- echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit ;;
- sun4H:SunOS:5.*:*)
- echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit ;;
- sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
- echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit ;;
- i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
- echo i386-pc-auroraux${UNAME_RELEASE}
- exit ;;
- i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
- eval $set_cc_for_build
- SUN_ARCH="i386"
- # If there is a compiler, see if it is configured for 64-bit objects.
- # Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
- # This test works for both compilers.
- if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
- if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
- (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
- grep IS_64BIT_ARCH >/dev/null
- then
- SUN_ARCH="x86_64"
- fi
- fi
- echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit ;;
- sun4*:SunOS:6*:*)
- # According to config.sub, this is the proper way to canonicalize
- # SunOS6. Hard to guess exactly what SunOS6 will be like, but
- # it's likely to be more like Solaris than SunOS4.
- echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit ;;
- sun4*:SunOS:*:*)
- case "`/usr/bin/arch -k`" in
- Series*|S4*)
- UNAME_RELEASE=`uname -v`
- ;;
- esac
- # Japanese Language versions have a version number like `4.1.3-JL'.
- echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
- exit ;;
- sun3*:SunOS:*:*)
- echo m68k-sun-sunos${UNAME_RELEASE}
- exit ;;
- sun*:*:4.2BSD:*)
- UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
- test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
- case "`/bin/arch`" in
- sun3)
- echo m68k-sun-sunos${UNAME_RELEASE}
- ;;
- sun4)
- echo sparc-sun-sunos${UNAME_RELEASE}
- ;;
- esac
- exit ;;
- aushp:SunOS:*:*)
- echo sparc-auspex-sunos${UNAME_RELEASE}
- exit ;;
- # The situation for MiNT is a little confusing. The machine name
- # can be virtually everything (everything which is not
- # "atarist" or "atariste" at least should have a processor
- # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
- # to the lowercase version "mint" (or "freemint"). Finally
- # the system name "TOS" denotes a system which is actually not
- # MiNT. But MiNT is downward compatible to TOS, so this should
- # be no problem.
- atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
- exit ;;
- atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
- exit ;;
- *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
- exit ;;
- milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
- echo m68k-milan-mint${UNAME_RELEASE}
- exit ;;
- hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
- echo m68k-hades-mint${UNAME_RELEASE}
- exit ;;
- *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
- echo m68k-unknown-mint${UNAME_RELEASE}
- exit ;;
- m68k:machten:*:*)
- echo m68k-apple-machten${UNAME_RELEASE}
- exit ;;
- powerpc:machten:*:*)
- echo powerpc-apple-machten${UNAME_RELEASE}
- exit ;;
- RISC*:Mach:*:*)
- echo mips-dec-mach_bsd4.3
- exit ;;
- RISC*:ULTRIX:*:*)
- echo mips-dec-ultrix${UNAME_RELEASE}
- exit ;;
- VAX*:ULTRIX*:*:*)
- echo vax-dec-ultrix${UNAME_RELEASE}
- exit ;;
- 2020:CLIX:*:* | 2430:CLIX:*:*)
- echo clipper-intergraph-clix${UNAME_RELEASE}
- exit ;;
- mips:*:*:UMIPS | mips:*:*:RISCos)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
-#ifdef __cplusplus
-#include <stdio.h> /* for printf() prototype */
- int main (int argc, char *argv[]) {
-#else
- int main (argc, argv) int argc; char *argv[]; {
-#endif
- #if defined (host_mips) && defined (MIPSEB)
- #if defined (SYSTYPE_SYSV)
- printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
- #endif
- #if defined (SYSTYPE_SVR4)
- printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
- #endif
- #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
- printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
- #endif
- #endif
- exit (-1);
- }
-EOF
- $CC_FOR_BUILD -o $dummy $dummy.c &&
- dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
- SYSTEM_NAME=`$dummy $dummyarg` &&
- { echo "$SYSTEM_NAME"; exit; }
- echo mips-mips-riscos${UNAME_RELEASE}
- exit ;;
- Motorola:PowerMAX_OS:*:*)
- echo powerpc-motorola-powermax
- exit ;;
- Motorola:*:4.3:PL8-*)
- echo powerpc-harris-powermax
- exit ;;
- Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
- echo powerpc-harris-powermax
- exit ;;
- Night_Hawk:Power_UNIX:*:*)
- echo powerpc-harris-powerunix
- exit ;;
- m88k:CX/UX:7*:*)
- echo m88k-harris-cxux7
- exit ;;
- m88k:*:4*:R4*)
- echo m88k-motorola-sysv4
- exit ;;
- m88k:*:3*:R3*)
- echo m88k-motorola-sysv3
- exit ;;
- AViiON:dgux:*:*)
- # DG/UX returns AViiON for all architectures
- UNAME_PROCESSOR=`/usr/bin/uname -p`
- if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
- then
- if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
- [ ${TARGET_BINARY_INTERFACE}x = x ]
- then
- echo m88k-dg-dgux${UNAME_RELEASE}
- else
- echo m88k-dg-dguxbcs${UNAME_RELEASE}
- fi
- else
- echo i586-dg-dgux${UNAME_RELEASE}
- fi
- exit ;;
- M88*:DolphinOS:*:*) # DolphinOS (SVR3)
- echo m88k-dolphin-sysv3
- exit ;;
- M88*:*:R3*:*)
- # Delta 88k system running SVR3
- echo m88k-motorola-sysv3
- exit ;;
- XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
- echo m88k-tektronix-sysv3
- exit ;;
- Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
- echo m68k-tektronix-bsd
- exit ;;
- *:IRIX*:*:*)
- echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
- exit ;;
- ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
- echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
- exit ;; # Note that: echo "'`uname -s`'" gives 'AIX '
- i*86:AIX:*:*)
- echo i386-ibm-aix
- exit ;;
- ia64:AIX:*:*)
- if [ -x /usr/bin/oslevel ] ; then
- IBM_REV=`/usr/bin/oslevel`
- else
- IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
- fi
- echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
- exit ;;
- *:AIX:2:3)
- if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #include <sys/systemcfg.h>
-
- main()
- {
- if (!__power_pc())
- exit(1);
- puts("powerpc-ibm-aix3.2.5");
- exit(0);
- }
-EOF
- if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
- then
- echo "$SYSTEM_NAME"
- else
- echo rs6000-ibm-aix3.2.5
- fi
- elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
- echo rs6000-ibm-aix3.2.4
- else
- echo rs6000-ibm-aix3.2
- fi
- exit ;;
- *:AIX:*:[4567])
- IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
- if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
- IBM_ARCH=rs6000
- else
- IBM_ARCH=powerpc
- fi
- if [ -x /usr/bin/oslevel ] ; then
- IBM_REV=`/usr/bin/oslevel`
- else
- IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
- fi
- echo ${IBM_ARCH}-ibm-aix${IBM_REV}
- exit ;;
- *:AIX:*:*)
- echo rs6000-ibm-aix
- exit ;;
- ibmrt:4.4BSD:*|romp-ibm:BSD:*)
- echo romp-ibm-bsd4.4
- exit ;;
- ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
- echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
- exit ;; # report: romp-ibm BSD 4.3
- *:BOSX:*:*)
- echo rs6000-bull-bosx
- exit ;;
- DPX/2?00:B.O.S.:*:*)
- echo m68k-bull-sysv3
- exit ;;
- 9000/[34]??:4.3bsd:1.*:*)
- echo m68k-hp-bsd
- exit ;;
- hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
- echo m68k-hp-bsd4.4
- exit ;;
- 9000/[34678]??:HP-UX:*:*)
- HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
- case "${UNAME_MACHINE}" in
- 9000/31? ) HP_ARCH=m68000 ;;
- 9000/[34]?? ) HP_ARCH=m68k ;;
- 9000/[678][0-9][0-9])
- if [ -x /usr/bin/getconf ]; then
- sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
- sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
- case "${sc_cpu_version}" in
- 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
- 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
- 532) # CPU_PA_RISC2_0
- case "${sc_kernel_bits}" in
- 32) HP_ARCH="hppa2.0n" ;;
- 64) HP_ARCH="hppa2.0w" ;;
- '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20
- esac ;;
- esac
- fi
- if [ "${HP_ARCH}" = "" ]; then
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
-
- #define _HPUX_SOURCE
- #include <stdlib.h>
- #include <unistd.h>
-
- int main ()
- {
- #if defined(_SC_KERNEL_BITS)
- long bits = sysconf(_SC_KERNEL_BITS);
- #endif
- long cpu = sysconf (_SC_CPU_VERSION);
-
- switch (cpu)
- {
- case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
- case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
- case CPU_PA_RISC2_0:
- #if defined(_SC_KERNEL_BITS)
- switch (bits)
- {
- case 64: puts ("hppa2.0w"); break;
- case 32: puts ("hppa2.0n"); break;
- default: puts ("hppa2.0"); break;
- } break;
- #else /* !defined(_SC_KERNEL_BITS) */
- puts ("hppa2.0"); break;
- #endif
- default: puts ("hppa1.0"); break;
- }
- exit (0);
- }
-EOF
- (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
- test -z "$HP_ARCH" && HP_ARCH=hppa
- fi ;;
- esac
- if [ ${HP_ARCH} = "hppa2.0w" ]
- then
- eval $set_cc_for_build
-
- # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
- # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler
- # generating 64-bit code. GNU and HP use different nomenclature:
- #
- # $ CC_FOR_BUILD=cc ./config.guess
- # => hppa2.0w-hp-hpux11.23
- # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
- # => hppa64-hp-hpux11.23
-
- if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
- grep -q __LP64__
- then
- HP_ARCH="hppa2.0w"
- else
- HP_ARCH="hppa64"
- fi
- fi
- echo ${HP_ARCH}-hp-hpux${HPUX_REV}
- exit ;;
- ia64:HP-UX:*:*)
- HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
- echo ia64-hp-hpux${HPUX_REV}
- exit ;;
- 3050*:HI-UX:*:*)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #include <unistd.h>
- int
- main ()
- {
- long cpu = sysconf (_SC_CPU_VERSION);
- /* The order matters, because CPU_IS_HP_MC68K erroneously returns
- true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
- results, however. */
- if (CPU_IS_PA_RISC (cpu))
- {
- switch (cpu)
- {
- case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
- case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
- case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
- default: puts ("hppa-hitachi-hiuxwe2"); break;
- }
- }
- else if (CPU_IS_HP_MC68K (cpu))
- puts ("m68k-hitachi-hiuxwe2");
- else puts ("unknown-hitachi-hiuxwe2");
- exit (0);
- }
-EOF
- $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
- { echo "$SYSTEM_NAME"; exit; }
- echo unknown-hitachi-hiuxwe2
- exit ;;
- 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
- echo hppa1.1-hp-bsd
- exit ;;
- 9000/8??:4.3bsd:*:*)
- echo hppa1.0-hp-bsd
- exit ;;
- *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
- echo hppa1.0-hp-mpeix
- exit ;;
- hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
- echo hppa1.1-hp-osf
- exit ;;
- hp8??:OSF1:*:*)
- echo hppa1.0-hp-osf
- exit ;;
- i*86:OSF1:*:*)
- if [ -x /usr/sbin/sysversion ] ; then
- echo ${UNAME_MACHINE}-unknown-osf1mk
- else
- echo ${UNAME_MACHINE}-unknown-osf1
- fi
- exit ;;
- parisc*:Lites*:*:*)
- echo hppa1.1-hp-lites
- exit ;;
- C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
- echo c1-convex-bsd
- exit ;;
- C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
- if getsysinfo -f scalar_acc
- then echo c32-convex-bsd
- else echo c2-convex-bsd
- fi
- exit ;;
- C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
- echo c34-convex-bsd
- exit ;;
- C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
- echo c38-convex-bsd
- exit ;;
- C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
- echo c4-convex-bsd
- exit ;;
- CRAY*Y-MP:*:*:*)
- echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- CRAY*[A-Z]90:*:*:*)
- echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
- | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
- -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
- -e 's/\.[^.]*$/.X/'
- exit ;;
- CRAY*TS:*:*:*)
- echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- CRAY*T3E:*:*:*)
- echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- CRAY*SV1:*:*:*)
- echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- *:UNICOS/mp:*:*)
- echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
- FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
- FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
- echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- exit ;;
- 5000:UNIX_System_V:4.*:*)
- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
- FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
- echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- exit ;;
- i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
- echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
- exit ;;
- sparc*:BSD/OS:*:*)
- echo sparc-unknown-bsdi${UNAME_RELEASE}
- exit ;;
- *:BSD/OS:*:*)
- echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
- exit ;;
- *:FreeBSD:*:*)
- UNAME_PROCESSOR=`/usr/bin/uname -p`
- case ${UNAME_PROCESSOR} in
- amd64)
- echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
- *)
- echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
- esac
- exit ;;
- i*:CYGWIN*:*)
- echo ${UNAME_MACHINE}-pc-cygwin
- exit ;;
- *:MINGW64*:*)
- echo ${UNAME_MACHINE}-pc-mingw64
- exit ;;
- *:MINGW*:*)
- echo ${UNAME_MACHINE}-pc-mingw32
- exit ;;
- i*:MSYS*:*)
- echo ${UNAME_MACHINE}-pc-msys
- exit ;;
- i*:windows32*:*)
- # uname -m includes "-pc" on this system.
- echo ${UNAME_MACHINE}-mingw32
- exit ;;
- i*:PW*:*)
- echo ${UNAME_MACHINE}-pc-pw32
- exit ;;
- *:Interix*:*)
- case ${UNAME_MACHINE} in
- x86)
- echo i586-pc-interix${UNAME_RELEASE}
- exit ;;
- authenticamd | genuineintel | EM64T)
- echo x86_64-unknown-interix${UNAME_RELEASE}
- exit ;;
- IA64)
- echo ia64-unknown-interix${UNAME_RELEASE}
- exit ;;
- esac ;;
- [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
- echo i${UNAME_MACHINE}-pc-mks
- exit ;;
- 8664:Windows_NT:*)
- echo x86_64-pc-mks
- exit ;;
- i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
- # How do we know it's Interix rather than the generic POSIX subsystem?
- # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
- # UNAME_MACHINE based on the output of uname instead of i386?
- echo i586-pc-interix
- exit ;;
- i*:UWIN*:*)
- echo ${UNAME_MACHINE}-pc-uwin
- exit ;;
- amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
- echo x86_64-unknown-cygwin
- exit ;;
- p*:CYGWIN*:*)
- echo powerpcle-unknown-cygwin
- exit ;;
- prep*:SunOS:5.*:*)
- echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit ;;
- *:GNU:*:*)
- # the GNU system
- echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
- exit ;;
- *:GNU/*:*:*)
- # other systems with GNU libc and userland
- echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
- exit ;;
- i*86:Minix:*:*)
- echo ${UNAME_MACHINE}-pc-minix
- exit ;;
- aarch64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- aarch64_be:Linux:*:*)
- UNAME_MACHINE=aarch64_be
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- alpha:Linux:*:*)
- case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
- EV5) UNAME_MACHINE=alphaev5 ;;
- EV56) UNAME_MACHINE=alphaev56 ;;
- PCA56) UNAME_MACHINE=alphapca56 ;;
- PCA57) UNAME_MACHINE=alphapca56 ;;
- EV6) UNAME_MACHINE=alphaev6 ;;
- EV67) UNAME_MACHINE=alphaev67 ;;
- EV68*) UNAME_MACHINE=alphaev68 ;;
- esac
- objdump --private-headers /bin/sh | grep -q ld.so.1
- if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
- echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
- exit ;;
- arm*:Linux:*:*)
- eval $set_cc_for_build
- if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
- | grep -q __ARM_EABI__
- then
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- else
- if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
- | grep -q __ARM_PCS_VFP
- then
- echo ${UNAME_MACHINE}-unknown-linux-gnueabi
- else
- echo ${UNAME_MACHINE}-unknown-linux-gnueabihf
- fi
- fi
- exit ;;
- avr32*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- cris:Linux:*:*)
- echo ${UNAME_MACHINE}-axis-linux-gnu
- exit ;;
- crisv32:Linux:*:*)
- echo ${UNAME_MACHINE}-axis-linux-gnu
- exit ;;
- frv:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- hexagon:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- i*86:Linux:*:*)
- LIBC=gnu
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #ifdef __dietlibc__
- LIBC=dietlibc
- #endif
-EOF
- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
- echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
- exit ;;
- ia64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- m32r*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- m68*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- mips:Linux:*:* | mips64:Linux:*:*)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #undef CPU
- #undef ${UNAME_MACHINE}
- #undef ${UNAME_MACHINE}el
- #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
- CPU=${UNAME_MACHINE}el
- #else
- #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
- CPU=${UNAME_MACHINE}
- #else
- CPU=
- #endif
- #endif
-EOF
- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
- test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
- ;;
- or32:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- padre:Linux:*:*)
- echo sparc-unknown-linux-gnu
- exit ;;
- parisc64:Linux:*:* | hppa64:Linux:*:*)
- echo hppa64-unknown-linux-gnu
- exit ;;
- parisc:Linux:*:* | hppa:Linux:*:*)
- # Look for CPU level
- case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
- PA7*) echo hppa1.1-unknown-linux-gnu ;;
- PA8*) echo hppa2.0-unknown-linux-gnu ;;
- *) echo hppa-unknown-linux-gnu ;;
- esac
- exit ;;
- ppc64:Linux:*:*)
- echo powerpc64-unknown-linux-gnu
- exit ;;
- ppc:Linux:*:*)
- echo powerpc-unknown-linux-gnu
- exit ;;
- s390:Linux:*:* | s390x:Linux:*:*)
- echo ${UNAME_MACHINE}-ibm-linux
- exit ;;
- sh64*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- sh*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- sparc:Linux:*:* | sparc64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- tile*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- vax:Linux:*:*)
- echo ${UNAME_MACHINE}-dec-linux-gnu
- exit ;;
- x86_64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- xtensa*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- i*86:DYNIX/ptx:4*:*)
- # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
- # earlier versions are messed up and put the nodename in both
- # sysname and nodename.
- echo i386-sequent-sysv4
- exit ;;
- i*86:UNIX_SV:4.2MP:2.*)
- # Unixware is an offshoot of SVR4, but it has its own version
- # number series starting with 2...
- # I am not positive that other SVR4 systems won't match this,
- # I just have to hope. -- rms.
- # Use sysv4.2uw... so that sysv4* matches it.
- echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
- exit ;;
- i*86:OS/2:*:*)
- # If we were able to find `uname', then EMX Unix compatibility
- # is probably installed.
- echo ${UNAME_MACHINE}-pc-os2-emx
- exit ;;
- i*86:XTS-300:*:STOP)
- echo ${UNAME_MACHINE}-unknown-stop
- exit ;;
- i*86:atheos:*:*)
- echo ${UNAME_MACHINE}-unknown-atheos
- exit ;;
- i*86:syllable:*:*)
- echo ${UNAME_MACHINE}-pc-syllable
- exit ;;
- i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
- echo i386-unknown-lynxos${UNAME_RELEASE}
- exit ;;
- i*86:*DOS:*:*)
- echo ${UNAME_MACHINE}-pc-msdosdjgpp
- exit ;;
- i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
- UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
- if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
- echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
- else
- echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
- fi
- exit ;;
- i*86:*:5:[678]*)
- # UnixWare 7.x, OpenUNIX and OpenServer 6.
- case `/bin/uname -X | grep "^Machine"` in
- *486*) UNAME_MACHINE=i486 ;;
- *Pentium) UNAME_MACHINE=i586 ;;
- *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
- esac
- echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
- exit ;;
- i*86:*:3.2:*)
- if test -f /usr/options/cb.name; then
- UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
- echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
- elif /bin/uname -X 2>/dev/null >/dev/null ; then
- UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
- (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
- (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
- && UNAME_MACHINE=i586
- (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
- && UNAME_MACHINE=i686
- (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
- && UNAME_MACHINE=i686
- echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
- else
- echo ${UNAME_MACHINE}-pc-sysv32
- fi
- exit ;;
- pc:*:*:*)
- # Left here for compatibility:
- # uname -m prints for DJGPP always 'pc', but it prints nothing about
- # the processor, so we play safe by assuming i586.
- # Note: whatever this is, it MUST be the same as what config.sub
- # prints for the "djgpp" host, or else GDB configury will decide that
- # this is a cross-build.
- echo i586-pc-msdosdjgpp
- exit ;;
- Intel:Mach:3*:*)
- echo i386-pc-mach3
- exit ;;
- paragon:*:*:*)
- echo i860-intel-osf1
- exit ;;
- i860:*:4.*:*) # i860-SVR4
- if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
- echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
- else # Add other i860-SVR4 vendors below as they are discovered.
- echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
- fi
- exit ;;
- mini*:CTIX:SYS*5:*)
- # "miniframe"
- echo m68010-convergent-sysv
- exit ;;
- mc68k:UNIX:SYSTEM5:3.51m)
- echo m68k-convergent-sysv
- exit ;;
- M680?0:D-NIX:5.3:*)
- echo m68k-diab-dnix
- exit ;;
- M68*:*:R3V[5678]*:*)
- test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
- 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
- OS_REL=''
- test -r /etc/.relid \
- && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
- /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
- && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
- 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && { echo i486-ncr-sysv4; exit; } ;;
- NCR*:*:4.2:* | MPRAS*:*:4.2:*)
- OS_REL='.3'
- test -r /etc/.relid \
- && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
- /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
- && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
- /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
- && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
- m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
- echo m68k-unknown-lynxos${UNAME_RELEASE}
- exit ;;
- mc68030:UNIX_System_V:4.*:*)
- echo m68k-atari-sysv4
- exit ;;
- TSUNAMI:LynxOS:2.*:*)
- echo sparc-unknown-lynxos${UNAME_RELEASE}
- exit ;;
- rs6000:LynxOS:2.*:*)
- echo rs6000-unknown-lynxos${UNAME_RELEASE}
- exit ;;
- PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
- echo powerpc-unknown-lynxos${UNAME_RELEASE}
- exit ;;
- SM[BE]S:UNIX_SV:*:*)
- echo mips-dde-sysv${UNAME_RELEASE}
- exit ;;
- RM*:ReliantUNIX-*:*:*)
- echo mips-sni-sysv4
- exit ;;
- RM*:SINIX-*:*:*)
- echo mips-sni-sysv4
- exit ;;
- *:SINIX-*:*:*)
- if uname -p 2>/dev/null >/dev/null ; then
- UNAME_MACHINE=`(uname -p) 2>/dev/null`
- echo ${UNAME_MACHINE}-sni-sysv4
- else
- echo ns32k-sni-sysv
- fi
- exit ;;
- PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
- # says <Richard.M.Bartel@ccMail.Census.GOV>
- echo i586-unisys-sysv4
- exit ;;
- *:UNIX_System_V:4*:FTX*)
- # From Gerald Hewes <hewes@openmarket.com>.
- # How about differentiating between stratus architectures? -djm
- echo hppa1.1-stratus-sysv4
- exit ;;
- *:*:*:FTX*)
- # From seanf@swdc.stratus.com.
- echo i860-stratus-sysv4
- exit ;;
- i*86:VOS:*:*)
- # From Paul.Green@stratus.com.
- echo ${UNAME_MACHINE}-stratus-vos
- exit ;;
- *:VOS:*:*)
- # From Paul.Green@stratus.com.
- echo hppa1.1-stratus-vos
- exit ;;
- mc68*:A/UX:*:*)
- echo m68k-apple-aux${UNAME_RELEASE}
- exit ;;
- news*:NEWS-OS:6*:*)
- echo mips-sony-newsos6
- exit ;;
- R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
- if [ -d /usr/nec ]; then
- echo mips-nec-sysv${UNAME_RELEASE}
- else
- echo mips-unknown-sysv${UNAME_RELEASE}
- fi
- exit ;;
- BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
- echo powerpc-be-beos
- exit ;;
- BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
- echo powerpc-apple-beos
- exit ;;
- BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
- echo i586-pc-beos
- exit ;;
- BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
- echo i586-pc-haiku
- exit ;;
- x86_64:Haiku:*:*)
- echo x86_64-unknown-haiku
- exit ;;
- SX-4:SUPER-UX:*:*)
- echo sx4-nec-superux${UNAME_RELEASE}
- exit ;;
- SX-5:SUPER-UX:*:*)
- echo sx5-nec-superux${UNAME_RELEASE}
- exit ;;
- SX-6:SUPER-UX:*:*)
- echo sx6-nec-superux${UNAME_RELEASE}
- exit ;;
- SX-7:SUPER-UX:*:*)
- echo sx7-nec-superux${UNAME_RELEASE}
- exit ;;
- SX-8:SUPER-UX:*:*)
- echo sx8-nec-superux${UNAME_RELEASE}
- exit ;;
- SX-8R:SUPER-UX:*:*)
- echo sx8r-nec-superux${UNAME_RELEASE}
- exit ;;
- Power*:Rhapsody:*:*)
- echo powerpc-apple-rhapsody${UNAME_RELEASE}
- exit ;;
- *:Rhapsody:*:*)
- echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
- exit ;;
- *:Darwin:*:*)
- UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
- case $UNAME_PROCESSOR in
- i386)
- eval $set_cc_for_build
- if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
- if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
- (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
- grep IS_64BIT_ARCH >/dev/null
- then
- UNAME_PROCESSOR="x86_64"
- fi
- fi ;;
- unknown) UNAME_PROCESSOR=powerpc ;;
- esac
- echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
- exit ;;
- *:procnto*:*:* | *:QNX:[0123456789]*:*)
- UNAME_PROCESSOR=`uname -p`
- if test "$UNAME_PROCESSOR" = "x86"; then
- UNAME_PROCESSOR=i386
- UNAME_MACHINE=pc
- fi
- echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
- exit ;;
- *:QNX:*:4*)
- echo i386-pc-qnx
- exit ;;
- NEO-?:NONSTOP_KERNEL:*:*)
- echo neo-tandem-nsk${UNAME_RELEASE}
- exit ;;
- NSE-*:NONSTOP_KERNEL:*:*)
- echo nse-tandem-nsk${UNAME_RELEASE}
- exit ;;
- NSR-?:NONSTOP_KERNEL:*:*)
- echo nsr-tandem-nsk${UNAME_RELEASE}
- exit ;;
- *:NonStop-UX:*:*)
- echo mips-compaq-nonstopux
- exit ;;
- BS2000:POSIX*:*:*)
- echo bs2000-siemens-sysv
- exit ;;
- DS/*:UNIX_System_V:*:*)
- echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
- exit ;;
- *:Plan9:*:*)
- # "uname -m" is not consistent, so use $cputype instead. 386
- # is converted to i386 for consistency with other x86
- # operating systems.
- if test "$cputype" = "386"; then
- UNAME_MACHINE=i386
- else
- UNAME_MACHINE="$cputype"
- fi
- echo ${UNAME_MACHINE}-unknown-plan9
- exit ;;
- *:TOPS-10:*:*)
- echo pdp10-unknown-tops10
- exit ;;
- *:TENEX:*:*)
- echo pdp10-unknown-tenex
- exit ;;
- KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
- echo pdp10-dec-tops20
- exit ;;
- XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
- echo pdp10-xkl-tops20
- exit ;;
- *:TOPS-20:*:*)
- echo pdp10-unknown-tops20
- exit ;;
- *:ITS:*:*)
- echo pdp10-unknown-its
- exit ;;
- SEI:*:*:SEIUX)
- echo mips-sei-seiux${UNAME_RELEASE}
- exit ;;
- *:DragonFly:*:*)
- echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
- exit ;;
- *:*VMS:*:*)
- UNAME_MACHINE=`(uname -p) 2>/dev/null`
- case "${UNAME_MACHINE}" in
- A*) echo alpha-dec-vms ; exit ;;
- I*) echo ia64-dec-vms ; exit ;;
- V*) echo vax-dec-vms ; exit ;;
- esac ;;
- *:XENIX:*:SysV)
- echo i386-pc-xenix
- exit ;;
- i*86:skyos:*:*)
- echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
- exit ;;
- i*86:rdos:*:*)
- echo ${UNAME_MACHINE}-pc-rdos
- exit ;;
- i*86:AROS:*:*)
- echo ${UNAME_MACHINE}-pc-aros
- exit ;;
- x86_64:VMkernel:*:*)
- echo ${UNAME_MACHINE}-unknown-esx
- exit ;;
-esac
-
-eval $set_cc_for_build
-cat >$dummy.c <<EOF
-#ifdef _SEQUENT_
-# include <sys/types.h>
-# include <sys/utsname.h>
-#endif
-main ()
-{
-#if defined (sony)
-#if defined (MIPSEB)
- /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
- I don't know.... */
- printf ("mips-sony-bsd\n"); exit (0);
-#else
-#include <sys/param.h>
- printf ("m68k-sony-newsos%s\n",
-#ifdef NEWSOS4
- "4"
-#else
- ""
-#endif
- ); exit (0);
-#endif
-#endif
-
-#if defined (__arm) && defined (__acorn) && defined (__unix)
- printf ("arm-acorn-riscix\n"); exit (0);
-#endif
-
-#if defined (hp300) && !defined (hpux)
- printf ("m68k-hp-bsd\n"); exit (0);
-#endif
-
-#if defined (NeXT)
-#if !defined (__ARCHITECTURE__)
-#define __ARCHITECTURE__ "m68k"
-#endif
- int version;
- version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
- if (version < 4)
- printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
- else
- printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
- exit (0);
-#endif
-
-#if defined (MULTIMAX) || defined (n16)
-#if defined (UMAXV)
- printf ("ns32k-encore-sysv\n"); exit (0);
-#else
-#if defined (CMU)
- printf ("ns32k-encore-mach\n"); exit (0);
-#else
- printf ("ns32k-encore-bsd\n"); exit (0);
-#endif
-#endif
-#endif
-
-#if defined (__386BSD__)
- printf ("i386-pc-bsd\n"); exit (0);
-#endif
-
-#if defined (sequent)
-#if defined (i386)
- printf ("i386-sequent-dynix\n"); exit (0);
-#endif
-#if defined (ns32000)
- printf ("ns32k-sequent-dynix\n"); exit (0);
-#endif
-#endif
-
-#if defined (_SEQUENT_)
- struct utsname un;
-
- uname(&un);
-
- if (strncmp(un.version, "V2", 2) == 0) {
- printf ("i386-sequent-ptx2\n"); exit (0);
- }
- if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
- printf ("i386-sequent-ptx1\n"); exit (0);
- }
- printf ("i386-sequent-ptx\n"); exit (0);
-
-#endif
-
-#if defined (vax)
-# if !defined (ultrix)
-# include <sys/param.h>
-# if defined (BSD)
-# if BSD == 43
- printf ("vax-dec-bsd4.3\n"); exit (0);
-# else
-# if BSD == 199006
- printf ("vax-dec-bsd4.3reno\n"); exit (0);
-# else
- printf ("vax-dec-bsd\n"); exit (0);
-# endif
-# endif
-# else
- printf ("vax-dec-bsd\n"); exit (0);
-# endif
-# else
- printf ("vax-dec-ultrix\n"); exit (0);
-# endif
-#endif
-
-#if defined (alliant) && defined (i860)
- printf ("i860-alliant-bsd\n"); exit (0);
-#endif
-
- exit (1);
-}
-EOF
-
-$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
- { echo "$SYSTEM_NAME"; exit; }
-
-# Apollos put the system type in the environment.
-
-test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
-
-# Convex versions that predate uname can use getsysinfo(1)
-
-if [ -x /usr/convex/getsysinfo ]
-then
- case `getsysinfo -f cpu_type` in
- c1*)
- echo c1-convex-bsd
- exit ;;
- c2*)
- if getsysinfo -f scalar_acc
- then echo c32-convex-bsd
- else echo c2-convex-bsd
- fi
- exit ;;
- c34*)
- echo c34-convex-bsd
- exit ;;
- c38*)
- echo c38-convex-bsd
- exit ;;
- c4*)
- echo c4-convex-bsd
- exit ;;
- esac
-fi
-
-cat >&2 <<EOF
-$0: unable to guess system type
-
-This script, last modified $timestamp, has failed to recognize
-the operating system you are using. It is advised that you
-download the most up to date version of the config scripts from
-
- http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
-and
- http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
-
-If the version you run ($0) is already up to date, please
-send the following data and any information you think might be
-pertinent to <config-patches@gnu.org> in order to provide the needed
-information to handle your system.
-
-config.guess timestamp = $timestamp
-
-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`
-/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
-
-hostinfo = `(hostinfo) 2>/dev/null`
-/bin/universe = `(/bin/universe) 2>/dev/null`
-/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
-/bin/arch = `(/bin/arch) 2>/dev/null`
-/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
-
-UNAME_MACHINE = ${UNAME_MACHINE}
-UNAME_RELEASE = ${UNAME_RELEASE}
-UNAME_SYSTEM = ${UNAME_SYSTEM}
-UNAME_VERSION = ${UNAME_VERSION}
-EOF
-
-exit 1
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/winsup/config.sub b/winsup/config.sub
deleted file mode 100755
index 89b128630..000000000
--- a/winsup/config.sub
+++ /dev/null
@@ -1,1789 +0,0 @@
-#! /bin/sh
-# Configuration validation subroutine script.
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
-# 2011, 2012 Free Software Foundation, Inc.
-
-timestamp='2012-10-10'
-
-# This file is (in principle) common to ALL GNU software.
-# The presence of a machine in this file suggests that SOME GNU software
-# can handle that machine. It does not imply ALL GNU software can.
-#
-# This file 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, see <http://www.gnu.org/licenses/>.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-
-# Please send patches to <config-patches@gnu.org>. Submit a context
-# diff and a properly formatted GNU ChangeLog entry.
-#
-# Configuration subroutine to validate and canonicalize a configuration type.
-# Supply the specified configuration type as an argument.
-# If it is invalid, we print an error message on stderr and exit with code 1.
-# Otherwise, we print the canonical config type on stdout and succeed.
-
-# You can get the latest version of this script from:
-# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
-
-# This file is supposed to be the same for all GNU packages
-# and recognize all the CPU types, system types and aliases
-# that are meaningful with *any* GNU software.
-# Each package is responsible for reporting which valid configurations
-# it does not support. The user should be able to distinguish
-# a failure to support a valid configuration from a meaningless
-# configuration.
-
-# The goal of this file is to map all the various variations of a given
-# machine specification into a single specification in the form:
-# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or in some cases, the newer four-part form:
-# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-# It is wrong to echo any other type of specification.
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION] CPU-MFR-OPSYS
- $0 [OPTION] ALIAS
-
-Canonicalize a configuration name.
-
-Operation modes:
- -h, --help print this help, then exit
- -t, --time-stamp print date of last modification, then exit
- -v, --version print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.sub ($timestamp)
-
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
-Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions. There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
- case $1 in
- --time-stamp | --time* | -t )
- echo "$timestamp" ; exit ;;
- --version | -v )
- echo "$version" ; exit ;;
- --help | --h* | -h )
- echo "$usage"; exit ;;
- -- ) # Stop option processing
- shift; break ;;
- - ) # Use stdin as input.
- break ;;
- -* )
- echo "$me: invalid option $1$help"
- exit 1 ;;
-
- *local*)
- # First pass through any local machine types.
- echo $1
- exit ;;
-
- * )
- break ;;
- esac
-done
-
-case $# in
- 0) echo "$me: missing argument$help" >&2
- exit 1;;
- 1) ;;
- *) echo "$me: too many arguments$help" >&2
- exit 1;;
-esac
-
-# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
-# Here we must recognize all the valid KERNEL-OS combinations.
-maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
-case $maybe_os in
- nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
- linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
- knetbsd*-gnu* | netbsd*-gnu* | \
- kopensolaris*-gnu* | \
- storm-chaos* | os2-emx* | rtmk-nova*)
- os=-$maybe_os
- basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
- ;;
- android-linux)
- os=-linux-android
- basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
- ;;
- *)
- basic_machine=`echo $1 | sed 's/-[^-]*$//'`
- if [ $basic_machine != $1 ]
- then os=`echo $1 | sed 's/.*-/-/'`
- else os=; fi
- ;;
-esac
-
-### Let's recognize common machines as not being operating systems so
-### that things like config.sub decstation-3100 work. We also
-### recognize some manufacturers as not being operating systems, so we
-### can provide default operating systems below.
-case $os in
- -sun*os*)
- # Prevent following clause from handling this invalid input.
- ;;
- -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
- -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
- -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
- -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
- -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
- -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
- -apple | -axis | -knuth | -cray | -microblaze*)
- os=
- basic_machine=$1
- ;;
- -bluegene*)
- os=-cnk
- ;;
- -sim | -cisco | -oki | -wec | -winbond)
- os=
- basic_machine=$1
- ;;
- -scout)
- ;;
- -wrs)
- os=-vxworks
- basic_machine=$1
- ;;
- -chorusos*)
- os=-chorusos
- basic_machine=$1
- ;;
- -chorusrdb)
- os=-chorusrdb
- basic_machine=$1
- ;;
- -hiux*)
- os=-hiuxwe2
- ;;
- -sco6)
- os=-sco5v6
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco5)
- os=-sco3.2v5
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco4)
- os=-sco3.2v4
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco3.2.[4-9]*)
- os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco3.2v[4-9]*)
- # Don't forget version if it is 3.2v4 or newer.
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco5v6*)
- # Don't forget version if it is 3.2v4 or newer.
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco*)
- os=-sco3.2v2
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -udk*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -isc)
- os=-isc2.2
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -clix*)
- basic_machine=clipper-intergraph
- ;;
- -isc*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -lynx*178)
- os=-lynxos178
- ;;
- -lynx*5)
- os=-lynxos5
- ;;
- -lynx*)
- os=-lynxos
- ;;
- -ptx*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
- ;;
- -windowsnt*)
- os=`echo $os | sed -e 's/windowsnt/winnt/'`
- ;;
- -psos*)
- os=-psos
- ;;
- -mint | -mint[0-9]*)
- basic_machine=m68k-atari
- os=-mint
- ;;
-esac
-
-# Decode aliases for certain CPU-COMPANY combinations.
-case $basic_machine in
- # Recognize the basic CPU types without company name.
- # Some are omitted here because they have special meanings below.
- 1750a | 580 \
- | a29k \
- | aarch64 | aarch64_be \
- | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
- | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
- | am33_2.0 \
- | arc \
- | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
- | avr | avr32 \
- | be32 | be64 \
- | bfin \
- | c4x | clipper \
- | d10v | d30v | dlx | dsp16xx \
- | epiphany \
- | fido | fr30 | frv \
- | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
- | hexagon \
- | i370 | i860 | i960 | ia64 \
- | ip2k | iq2000 \
- | le32 | le64 \
- | lm32 \
- | m32c | m32r | m32rle | m68000 | m68k | m88k \
- | maxq | mb | microblaze | microblazeel | mcore | mep | metag \
- | mips | mipsbe | mipseb | mipsel | mipsle \
- | mips16 \
- | mips64 | mips64el \
- | mips64octeon | mips64octeonel \
- | mips64orion | mips64orionel \
- | mips64r5900 | mips64r5900el \
- | mips64vr | mips64vrel \
- | mips64vr4100 | mips64vr4100el \
- | mips64vr4300 | mips64vr4300el \
- | mips64vr5000 | mips64vr5000el \
- | mips64vr5900 | mips64vr5900el \
- | mipsisa32 | mipsisa32el \
- | mipsisa32r2 | mipsisa32r2el \
- | mipsisa64 | mipsisa64el \
- | mipsisa64r2 | mipsisa64r2el \
- | mipsisa64sb1 | mipsisa64sb1el \
- | mipsisa64sr71k | mipsisa64sr71kel \
- | mipstx39 | mipstx39el \
- | mn10200 | mn10300 \
- | moxie \
- | mt \
- | msp430 \
- | nds32 | nds32le | nds32be \
- | nios | nios2 \
- | ns16k | ns32k \
- | open8 \
- | or32 \
- | pdp10 | pdp11 | pj | pjl \
- | powerpc | powerpc64 | powerpc64le | powerpcle \
- | pyramid \
- | rl78 | rx \
- | score \
- | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
- | sh64 | sh64le \
- | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
- | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
- | spu \
- | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
- | ubicom32 \
- | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
- | we32k \
- | x86 | xc16x | xstormy16 | xtensa \
- | z8k | z80)
- basic_machine=$basic_machine-unknown
- ;;
- c54x)
- basic_machine=tic54x-unknown
- ;;
- c55x)
- basic_machine=tic55x-unknown
- ;;
- c6x)
- basic_machine=tic6x-unknown
- ;;
- m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip)
- basic_machine=$basic_machine-unknown
- os=-none
- ;;
- m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
- ;;
- ms1)
- basic_machine=mt-unknown
- ;;
-
- strongarm | thumb | xscale)
- basic_machine=arm-unknown
- ;;
- xgate)
- basic_machine=$basic_machine-unknown
- os=-none
- ;;
- xscaleeb)
- basic_machine=armeb-unknown
- ;;
-
- xscaleel)
- basic_machine=armel-unknown
- ;;
-
- # We use `pc' rather than `unknown'
- # because (1) that's what they normally are, and
- # (2) the word "unknown" tends to confuse beginning users.
- i*86 | x86_64)
- basic_machine=$basic_machine-pc
- ;;
- # Object if more than one company name word.
- *-*-*)
- echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
- exit 1
- ;;
- # Recognize the basic CPU types with company name.
- 580-* \
- | a29k-* \
- | aarch64-* | aarch64_be-* \
- | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
- | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
- | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
- | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
- | avr-* | avr32-* \
- | be32-* | be64-* \
- | bfin-* | bs2000-* \
- | c[123]* | c30-* | [cjt]90-* | c4x-* \
- | clipper-* | craynv-* | cydra-* \
- | d10v-* | d30v-* | dlx-* \
- | elxsi-* \
- | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
- | h8300-* | h8500-* \
- | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
- | hexagon-* \
- | i*86-* | i860-* | i960-* | ia64-* \
- | ip2k-* | iq2000-* \
- | le32-* | le64-* \
- | lm32-* \
- | m32c-* | m32r-* | m32rle-* \
- | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
- | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
- | microblaze-* | microblazeel-* \
- | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
- | mips16-* \
- | mips64-* | mips64el-* \
- | mips64octeon-* | mips64octeonel-* \
- | mips64orion-* | mips64orionel-* \
- | mips64r5900-* | mips64r5900el-* \
- | mips64vr-* | mips64vrel-* \
- | mips64vr4100-* | mips64vr4100el-* \
- | mips64vr4300-* | mips64vr4300el-* \
- | mips64vr5000-* | mips64vr5000el-* \
- | mips64vr5900-* | mips64vr5900el-* \
- | mipsisa32-* | mipsisa32el-* \
- | mipsisa32r2-* | mipsisa32r2el-* \
- | mipsisa64-* | mipsisa64el-* \
- | mipsisa64r2-* | mipsisa64r2el-* \
- | mipsisa64sb1-* | mipsisa64sb1el-* \
- | mipsisa64sr71k-* | mipsisa64sr71kel-* \
- | mipstx39-* | mipstx39el-* \
- | mmix-* \
- | mt-* \
- | msp430-* \
- | nds32-* | nds32le-* | nds32be-* \
- | nios-* | nios2-* \
- | none-* | np1-* | ns16k-* | ns32k-* \
- | open8-* \
- | orion-* \
- | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
- | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
- | pyramid-* \
- | rl78-* | romp-* | rs6000-* | rx-* \
- | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
- | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
- | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
- | sparclite-* \
- | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
- | tahoe-* \
- | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
- | tile*-* \
- | tron-* \
- | ubicom32-* \
- | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
- | vax-* \
- | we32k-* \
- | x86-* | x86_64-* | xc16x-* | xps100-* \
- | xstormy16-* | xtensa*-* \
- | ymp-* \
- | z8k-* | z80-*)
- ;;
- # Recognize the basic CPU types without company name, with glob match.
- xtensa*)
- basic_machine=$basic_machine-unknown
- ;;
- # Recognize the various machine names and aliases which stand
- # for a CPU type and a company and sometimes even an OS.
- 386bsd)
- basic_machine=i386-unknown
- os=-bsd
- ;;
- 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
- basic_machine=m68000-att
- ;;
- 3b*)
- basic_machine=we32k-att
- ;;
- a29khif)
- basic_machine=a29k-amd
- os=-udi
- ;;
- abacus)
- basic_machine=abacus-unknown
- ;;
- adobe68k)
- basic_machine=m68010-adobe
- os=-scout
- ;;
- alliant | fx80)
- basic_machine=fx80-alliant
- ;;
- altos | altos3068)
- basic_machine=m68k-altos
- ;;
- am29k)
- basic_machine=a29k-none
- os=-bsd
- ;;
- amd64)
- basic_machine=x86_64-pc
- ;;
- amd64-*)
- basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- amdahl)
- basic_machine=580-amdahl
- os=-sysv
- ;;
- amiga | amiga-*)
- basic_machine=m68k-unknown
- ;;
- amigaos | amigados)
- basic_machine=m68k-unknown
- os=-amigaos
- ;;
- amigaunix | amix)
- basic_machine=m68k-unknown
- os=-sysv4
- ;;
- apollo68)
- basic_machine=m68k-apollo
- os=-sysv
- ;;
- apollo68bsd)
- basic_machine=m68k-apollo
- os=-bsd
- ;;
- aros)
- basic_machine=i386-pc
- os=-aros
- ;;
- aux)
- basic_machine=m68k-apple
- os=-aux
- ;;
- balance)
- basic_machine=ns32k-sequent
- os=-dynix
- ;;
- blackfin)
- basic_machine=bfin-unknown
- os=-linux
- ;;
- blackfin-*)
- basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
- os=-linux
- ;;
- bluegene*)
- basic_machine=powerpc-ibm
- os=-cnk
- ;;
- c54x-*)
- basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- c55x-*)
- basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- c6x-*)
- basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- c90)
- basic_machine=c90-cray
- os=-unicos
- ;;
- cegcc)
- basic_machine=arm-unknown
- os=-cegcc
- ;;
- convex-c1)
- basic_machine=c1-convex
- os=-bsd
- ;;
- convex-c2)
- basic_machine=c2-convex
- os=-bsd
- ;;
- convex-c32)
- basic_machine=c32-convex
- os=-bsd
- ;;
- convex-c34)
- basic_machine=c34-convex
- os=-bsd
- ;;
- convex-c38)
- basic_machine=c38-convex
- os=-bsd
- ;;
- cray | j90)
- basic_machine=j90-cray
- os=-unicos
- ;;
- craynv)
- basic_machine=craynv-cray
- os=-unicosmp
- ;;
- cr16 | cr16-*)
- basic_machine=cr16-unknown
- os=-elf
- ;;
- crds | unos)
- basic_machine=m68k-crds
- ;;
- crisv32 | crisv32-* | etraxfs*)
- basic_machine=crisv32-axis
- ;;
- cris | cris-* | etrax*)
- basic_machine=cris-axis
- ;;
- crx)
- basic_machine=crx-unknown
- os=-elf
- ;;
- da30 | da30-*)
- basic_machine=m68k-da30
- ;;
- decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
- basic_machine=mips-dec
- ;;
- decsystem10* | dec10*)
- basic_machine=pdp10-dec
- os=-tops10
- ;;
- decsystem20* | dec20*)
- basic_machine=pdp10-dec
- os=-tops20
- ;;
- delta | 3300 | motorola-3300 | motorola-delta \
- | 3300-motorola | delta-motorola)
- basic_machine=m68k-motorola
- ;;
- delta88)
- basic_machine=m88k-motorola
- os=-sysv3
- ;;
- dicos)
- basic_machine=i686-pc
- os=-dicos
- ;;
- djgpp)
- basic_machine=i586-pc
- os=-msdosdjgpp
- ;;
- dpx20 | dpx20-*)
- basic_machine=rs6000-bull
- os=-bosx
- ;;
- dpx2* | dpx2*-bull)
- basic_machine=m68k-bull
- os=-sysv3
- ;;
- ebmon29k)
- basic_machine=a29k-amd
- os=-ebmon
- ;;
- elxsi)
- basic_machine=elxsi-elxsi
- os=-bsd
- ;;
- encore | umax | mmax)
- basic_machine=ns32k-encore
- ;;
- es1800 | OSE68k | ose68k | ose | OSE)
- basic_machine=m68k-ericsson
- os=-ose
- ;;
- fx2800)
- basic_machine=i860-alliant
- ;;
- genix)
- basic_machine=ns32k-ns
- ;;
- gmicro)
- basic_machine=tron-gmicro
- os=-sysv
- ;;
- go32)
- basic_machine=i386-pc
- os=-go32
- ;;
- h3050r* | hiux*)
- basic_machine=hppa1.1-hitachi
- os=-hiuxwe2
- ;;
- h8300hms)
- basic_machine=h8300-hitachi
- os=-hms
- ;;
- h8300xray)
- basic_machine=h8300-hitachi
- os=-xray
- ;;
- h8500hms)
- basic_machine=h8500-hitachi
- os=-hms
- ;;
- harris)
- basic_machine=m88k-harris
- os=-sysv3
- ;;
- hp300-*)
- basic_machine=m68k-hp
- ;;
- hp300bsd)
- basic_machine=m68k-hp
- os=-bsd
- ;;
- hp300hpux)
- basic_machine=m68k-hp
- os=-hpux
- ;;
- hp3k9[0-9][0-9] | hp9[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hp9k2[0-9][0-9] | hp9k31[0-9])
- basic_machine=m68000-hp
- ;;
- hp9k3[2-9][0-9])
- basic_machine=m68k-hp
- ;;
- hp9k6[0-9][0-9] | hp6[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hp9k7[0-79][0-9] | hp7[0-79][0-9])
- basic_machine=hppa1.1-hp
- ;;
- hp9k78[0-9] | hp78[0-9])
- # FIXME: really hppa2.0-hp
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
- # FIXME: really hppa2.0-hp
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[0-9][13679] | hp8[0-9][13679])
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[0-9][0-9] | hp8[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hppa-next)
- os=-nextstep3
- ;;
- hppaosf)
- basic_machine=hppa1.1-hp
- os=-osf
- ;;
- hppro)
- basic_machine=hppa1.1-hp
- os=-proelf
- ;;
- i370-ibm* | ibm*)
- basic_machine=i370-ibm
- ;;
- i*86v32)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv32
- ;;
- i*86v4*)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv4
- ;;
- i*86v)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv
- ;;
- i*86sol2)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-solaris2
- ;;
- i386mach)
- basic_machine=i386-mach
- os=-mach
- ;;
- i386-vsta | vsta)
- basic_machine=i386-unknown
- os=-vsta
- ;;
- iris | iris4d)
- basic_machine=mips-sgi
- case $os in
- -irix*)
- ;;
- *)
- os=-irix4
- ;;
- esac
- ;;
- isi68 | isi)
- basic_machine=m68k-isi
- os=-sysv
- ;;
- m68knommu)
- basic_machine=m68k-unknown
- os=-linux
- ;;
- m68knommu-*)
- basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
- os=-linux
- ;;
- m88k-omron*)
- basic_machine=m88k-omron
- ;;
- magnum | m3230)
- basic_machine=mips-mips
- os=-sysv
- ;;
- merlin)
- basic_machine=ns32k-utek
- os=-sysv
- ;;
- microblaze*)
- basic_machine=microblaze-xilinx
- ;;
- mingw64)
- basic_machine=x86_64-pc
- os=-mingw64
- ;;
- mingw32)
- basic_machine=i386-pc
- os=-mingw32
- ;;
- mingw32ce)
- basic_machine=arm-unknown
- os=-mingw32ce
- ;;
- miniframe)
- basic_machine=m68000-convergent
- ;;
- *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
- basic_machine=m68k-atari
- os=-mint
- ;;
- mips3*-*)
- basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
- ;;
- mips3*)
- basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
- ;;
- monitor)
- basic_machine=m68k-rom68k
- os=-coff
- ;;
- morphos)
- basic_machine=powerpc-unknown
- os=-morphos
- ;;
- msdos)
- basic_machine=i386-pc
- os=-msdos
- ;;
- ms1-*)
- basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
- ;;
- msys)
- basic_machine=i386-pc
- os=-msys
- ;;
- mvs)
- basic_machine=i370-ibm
- os=-mvs
- ;;
- nacl)
- basic_machine=le32-unknown
- os=-nacl
- ;;
- ncr3000)
- basic_machine=i486-ncr
- os=-sysv4
- ;;
- netbsd386)
- basic_machine=i386-unknown
- os=-netbsd
- ;;
- netwinder)
- basic_machine=armv4l-rebel
- os=-linux
- ;;
- news | news700 | news800 | news900)
- basic_machine=m68k-sony
- os=-newsos
- ;;
- news1000)
- basic_machine=m68030-sony
- os=-newsos
- ;;
- news-3600 | risc-news)
- basic_machine=mips-sony
- os=-newsos
- ;;
- necv70)
- basic_machine=v70-nec
- os=-sysv
- ;;
- next | m*-next )
- basic_machine=m68k-next
- case $os in
- -nextstep* )
- ;;
- -ns2*)
- os=-nextstep2
- ;;
- *)
- os=-nextstep3
- ;;
- esac
- ;;
- nh3000)
- basic_machine=m68k-harris
- os=-cxux
- ;;
- nh[45]000)
- basic_machine=m88k-harris
- os=-cxux
- ;;
- nindy960)
- basic_machine=i960-intel
- os=-nindy
- ;;
- mon960)
- basic_machine=i960-intel
- os=-mon960
- ;;
- nonstopux)
- basic_machine=mips-compaq
- os=-nonstopux
- ;;
- np1)
- basic_machine=np1-gould
- ;;
- neo-tandem)
- basic_machine=neo-tandem
- ;;
- nse-tandem)
- basic_machine=nse-tandem
- ;;
- nsr-tandem)
- basic_machine=nsr-tandem
- ;;
- op50n-* | op60c-*)
- basic_machine=hppa1.1-oki
- os=-proelf
- ;;
- openrisc | openrisc-*)
- basic_machine=or32-unknown
- ;;
- os400)
- basic_machine=powerpc-ibm
- os=-os400
- ;;
- OSE68000 | ose68000)
- basic_machine=m68000-ericsson
- os=-ose
- ;;
- os68k)
- basic_machine=m68k-none
- os=-os68k
- ;;
- pa-hitachi)
- basic_machine=hppa1.1-hitachi
- os=-hiuxwe2
- ;;
- paragon)
- basic_machine=i860-intel
- os=-osf
- ;;
- parisc)
- basic_machine=hppa-unknown
- os=-linux
- ;;
- parisc-*)
- basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
- os=-linux
- ;;
- pbd)
- basic_machine=sparc-tti
- ;;
- pbb)
- basic_machine=m68k-tti
- ;;
- pc532 | pc532-*)
- basic_machine=ns32k-pc532
- ;;
- pc98)
- basic_machine=i386-pc
- ;;
- pc98-*)
- basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pentium | p5 | k5 | k6 | nexgen | viac3)
- basic_machine=i586-pc
- ;;
- pentiumpro | p6 | 6x86 | athlon | athlon_*)
- basic_machine=i686-pc
- ;;
- pentiumii | pentium2 | pentiumiii | pentium3)
- basic_machine=i686-pc
- ;;
- pentium4)
- basic_machine=i786-pc
- ;;
- pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
- basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pentiumpro-* | p6-* | 6x86-* | athlon-*)
- basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
- basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pentium4-*)
- basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pn)
- basic_machine=pn-gould
- ;;
- power) basic_machine=power-ibm
- ;;
- ppc | ppcbe) basic_machine=powerpc-unknown
- ;;
- ppc-* | ppcbe-*)
- basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ppcle | powerpclittle | ppc-le | powerpc-little)
- basic_machine=powerpcle-unknown
- ;;
- ppcle-* | powerpclittle-*)
- basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ppc64) basic_machine=powerpc64-unknown
- ;;
- ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ppc64le | powerpc64little | ppc64-le | powerpc64-little)
- basic_machine=powerpc64le-unknown
- ;;
- ppc64le-* | powerpc64little-*)
- basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ps2)
- basic_machine=i386-ibm
- ;;
- pw32)
- basic_machine=i586-unknown
- os=-pw32
- ;;
- rdos)
- basic_machine=i386-pc
- os=-rdos
- ;;
- rom68k)
- basic_machine=m68k-rom68k
- os=-coff
- ;;
- rm[46]00)
- basic_machine=mips-siemens
- ;;
- rtpc | rtpc-*)
- basic_machine=romp-ibm
- ;;
- s390 | s390-*)
- basic_machine=s390-ibm
- ;;
- s390x | s390x-*)
- basic_machine=s390x-ibm
- ;;
- sa29200)
- basic_machine=a29k-amd
- os=-udi
- ;;
- sb1)
- basic_machine=mipsisa64sb1-unknown
- ;;
- sb1el)
- basic_machine=mipsisa64sb1el-unknown
- ;;
- sde)
- basic_machine=mipsisa32-sde
- os=-elf
- ;;
- sei)
- basic_machine=mips-sei
- os=-seiux
- ;;
- sequent)
- basic_machine=i386-sequent
- ;;
- sh)
- basic_machine=sh-hitachi
- os=-hms
- ;;
- sh5el)
- basic_machine=sh5le-unknown
- ;;
- sh64)
- basic_machine=sh64-unknown
- ;;
- sparclite-wrs | simso-wrs)
- basic_machine=sparclite-wrs
- os=-vxworks
- ;;
- sps7)
- basic_machine=m68k-bull
- os=-sysv2
- ;;
- spur)
- basic_machine=spur-unknown
- ;;
- st2000)
- basic_machine=m68k-tandem
- ;;
- stratus)
- basic_machine=i860-stratus
- os=-sysv4
- ;;
- strongarm-* | thumb-*)
- basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- sun2)
- basic_machine=m68000-sun
- ;;
- sun2os3)
- basic_machine=m68000-sun
- os=-sunos3
- ;;
- sun2os4)
- basic_machine=m68000-sun
- os=-sunos4
- ;;
- sun3os3)
- basic_machine=m68k-sun
- os=-sunos3
- ;;
- sun3os4)
- basic_machine=m68k-sun
- os=-sunos4
- ;;
- sun4os3)
- basic_machine=sparc-sun
- os=-sunos3
- ;;
- sun4os4)
- basic_machine=sparc-sun
- os=-sunos4
- ;;
- sun4sol2)
- basic_machine=sparc-sun
- os=-solaris2
- ;;
- sun3 | sun3-*)
- basic_machine=m68k-sun
- ;;
- sun4)
- basic_machine=sparc-sun
- ;;
- sun386 | sun386i | roadrunner)
- basic_machine=i386-sun
- ;;
- sv1)
- basic_machine=sv1-cray
- os=-unicos
- ;;
- symmetry)
- basic_machine=i386-sequent
- os=-dynix
- ;;
- t3e)
- basic_machine=alphaev5-cray
- os=-unicos
- ;;
- t90)
- basic_machine=t90-cray
- os=-unicos
- ;;
- tile*)
- basic_machine=$basic_machine-unknown
- os=-linux-gnu
- ;;
- tx39)
- basic_machine=mipstx39-unknown
- ;;
- tx39el)
- basic_machine=mipstx39el-unknown
- ;;
- toad1)
- basic_machine=pdp10-xkl
- os=-tops20
- ;;
- tower | tower-32)
- basic_machine=m68k-ncr
- ;;
- tpf)
- basic_machine=s390x-ibm
- os=-tpf
- ;;
- udi29k)
- basic_machine=a29k-amd
- os=-udi
- ;;
- ultra3)
- basic_machine=a29k-nyu
- os=-sym1
- ;;
- v810 | necv810)
- basic_machine=v810-nec
- os=-none
- ;;
- vaxv)
- basic_machine=vax-dec
- os=-sysv
- ;;
- vms)
- basic_machine=vax-dec
- os=-vms
- ;;
- vpp*|vx|vx-*)
- basic_machine=f301-fujitsu
- ;;
- vxworks960)
- basic_machine=i960-wrs
- os=-vxworks
- ;;
- vxworks68)
- basic_machine=m68k-wrs
- os=-vxworks
- ;;
- vxworks29k)
- basic_machine=a29k-wrs
- os=-vxworks
- ;;
- w65*)
- basic_machine=w65-wdc
- os=-none
- ;;
- w89k-*)
- basic_machine=hppa1.1-winbond
- os=-proelf
- ;;
- xbox)
- basic_machine=i686-pc
- os=-mingw32
- ;;
- xps | xps100)
- basic_machine=xps100-honeywell
- ;;
- xscale-* | xscalee[bl]-*)
- basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`
- ;;
- ymp)
- basic_machine=ymp-cray
- os=-unicos
- ;;
- z8k-*-coff)
- basic_machine=z8k-unknown
- os=-sim
- ;;
- z80-*-coff)
- basic_machine=z80-unknown
- os=-sim
- ;;
- none)
- basic_machine=none-none
- os=-none
- ;;
-
-# Here we handle the default manufacturer of certain CPU types. It is in
-# some cases the only manufacturer, in others, it is the most popular.
- w89k)
- basic_machine=hppa1.1-winbond
- ;;
- op50n)
- basic_machine=hppa1.1-oki
- ;;
- op60c)
- basic_machine=hppa1.1-oki
- ;;
- romp)
- basic_machine=romp-ibm
- ;;
- mmix)
- basic_machine=mmix-knuth
- ;;
- rs6000)
- basic_machine=rs6000-ibm
- ;;
- vax)
- basic_machine=vax-dec
- ;;
- pdp10)
- # there are many clones, so DEC is not a safe bet
- basic_machine=pdp10-unknown
- ;;
- pdp11)
- basic_machine=pdp11-dec
- ;;
- we32k)
- basic_machine=we32k-att
- ;;
- sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
- basic_machine=sh-unknown
- ;;
- sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
- basic_machine=sparc-sun
- ;;
- cydra)
- basic_machine=cydra-cydrome
- ;;
- orion)
- basic_machine=orion-highlevel
- ;;
- orion105)
- basic_machine=clipper-highlevel
- ;;
- mac | mpw | mac-mpw)
- basic_machine=m68k-apple
- ;;
- pmac | pmac-mpw)
- basic_machine=powerpc-apple
- ;;
- *-unknown)
- # Make sure to match an already-canonicalized machine name.
- ;;
- *)
- echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
- exit 1
- ;;
-esac
-
-# Here we canonicalize certain aliases for manufacturers.
-case $basic_machine in
- *-digital*)
- basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
- ;;
- *-commodore*)
- basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
- ;;
- *)
- ;;
-esac
-
-# Decode manufacturer-specific aliases for certain operating systems.
-
-if [ x"$os" != x"" ]
-then
-case $os in
- # First match some system type aliases
- # that might get confused with valid system types.
- # -solaris* is a basic system type, with this one exception.
- -auroraux)
- os=-auroraux
- ;;
- -solaris1 | -solaris1.*)
- os=`echo $os | sed -e 's|solaris1|sunos4|'`
- ;;
- -solaris)
- os=-solaris2
- ;;
- -svr4*)
- os=-sysv4
- ;;
- -unixware*)
- os=-sysv4.2uw
- ;;
- -gnu/linux*)
- os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
- ;;
- # First accept the basic system types.
- # The portable systems comes first.
- # Each alternative MUST END IN A *, to match a version number.
- # -sysv* is not here because it comes later, after sysvr4.
- -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
- | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
- | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
- | -sym* | -kopensolaris* \
- | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
- | -aos* | -aros* \
- | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
- | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
- | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
- | -bitrig* | -openbsd* | -solidbsd* \
- | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
- | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
- | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
- | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
- | -chorusos* | -chorusrdb* | -cegcc* \
- | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
- | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
- | -linux-newlib* | -linux-musl* | -linux-uclibc* \
- | -uxpv* | -beos* | -mpeix* | -udk* \
- | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
- | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
- | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
- | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
- | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
- | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
- | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
- # Remember, each alternative MUST END IN *, to match a version number.
- ;;
- -qnx*)
- case $basic_machine in
- x86-* | i*86-*)
- ;;
- *)
- os=-nto$os
- ;;
- esac
- ;;
- -nto-qnx*)
- ;;
- -nto*)
- os=`echo $os | sed -e 's|nto|nto-qnx|'`
- ;;
- -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
- | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
- | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
- ;;
- -mac*)
- os=`echo $os | sed -e 's|mac|macos|'`
- ;;
- -linux-dietlibc)
- os=-linux-dietlibc
- ;;
- -linux*)
- os=`echo $os | sed -e 's|linux|linux-gnu|'`
- ;;
- -sunos5*)
- os=`echo $os | sed -e 's|sunos5|solaris2|'`
- ;;
- -sunos6*)
- os=`echo $os | sed -e 's|sunos6|solaris3|'`
- ;;
- -opened*)
- os=-openedition
- ;;
- -os400*)
- os=-os400
- ;;
- -wince*)
- os=-wince
- ;;
- -osfrose*)
- os=-osfrose
- ;;
- -osf*)
- os=-osf
- ;;
- -utek*)
- os=-bsd
- ;;
- -dynix*)
- os=-bsd
- ;;
- -acis*)
- os=-aos
- ;;
- -atheos*)
- os=-atheos
- ;;
- -syllable*)
- os=-syllable
- ;;
- -386bsd)
- os=-bsd
- ;;
- -ctix* | -uts*)
- os=-sysv
- ;;
- -nova*)
- os=-rtmk-nova
- ;;
- -ns2 )
- os=-nextstep2
- ;;
- -nsk*)
- os=-nsk
- ;;
- # Preserve the version number of sinix5.
- -sinix5.*)
- os=`echo $os | sed -e 's|sinix|sysv|'`
- ;;
- -sinix*)
- os=-sysv4
- ;;
- -tpf*)
- os=-tpf
- ;;
- -triton*)
- os=-sysv3
- ;;
- -oss*)
- os=-sysv3
- ;;
- -svr4)
- os=-sysv4
- ;;
- -svr3)
- os=-sysv3
- ;;
- -sysvr4)
- os=-sysv4
- ;;
- # This must come after -sysvr4.
- -sysv*)
- ;;
- -ose*)
- os=-ose
- ;;
- -es1800*)
- os=-ose
- ;;
- -xenix)
- os=-xenix
- ;;
- -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
- os=-mint
- ;;
- -aros*)
- os=-aros
- ;;
- -kaos*)
- os=-kaos
- ;;
- -zvmoe)
- os=-zvmoe
- ;;
- -dicos*)
- os=-dicos
- ;;
- -nacl*)
- ;;
- -none)
- ;;
- *)
- # Get rid of the `-' at the beginning of $os.
- os=`echo $os | sed 's/[^-]*-//'`
- echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
- exit 1
- ;;
-esac
-else
-
-# Here we handle the default operating systems that come with various machines.
-# The value should be what the vendor currently ships out the door with their
-# machine or put another way, the most popular os provided with the machine.
-
-# Note that if you're going to try to match "-MANUFACTURER" here (say,
-# "-sun"), then you have to tell the case statement up towards the top
-# that MANUFACTURER isn't an operating system. Otherwise, code above
-# will signal an error saying that MANUFACTURER isn't an operating
-# system, and we'll never get to this point.
-
-case $basic_machine in
- score-*)
- os=-elf
- ;;
- spu-*)
- os=-elf
- ;;
- *-acorn)
- os=-riscix1.2
- ;;
- arm*-rebel)
- os=-linux
- ;;
- arm*-semi)
- os=-aout
- ;;
- c4x-* | tic4x-*)
- os=-coff
- ;;
- hexagon-*)
- os=-elf
- ;;
- tic54x-*)
- os=-coff
- ;;
- tic55x-*)
- os=-coff
- ;;
- tic6x-*)
- os=-coff
- ;;
- # This must come before the *-dec entry.
- pdp10-*)
- os=-tops20
- ;;
- pdp11-*)
- os=-none
- ;;
- *-dec | vax-*)
- os=-ultrix4.2
- ;;
- m68*-apollo)
- os=-domain
- ;;
- i386-sun)
- os=-sunos4.0.2
- ;;
- m68000-sun)
- os=-sunos3
- ;;
- m68*-cisco)
- os=-aout
- ;;
- mep-*)
- os=-elf
- ;;
- mips*-cisco)
- os=-elf
- ;;
- mips*-*)
- os=-elf
- ;;
- or32-*)
- os=-coff
- ;;
- *-tti) # must be before sparc entry or we get the wrong os.
- os=-sysv3
- ;;
- sparc-* | *-sun)
- os=-sunos4.1.1
- ;;
- *-be)
- os=-beos
- ;;
- *-haiku)
- os=-haiku
- ;;
- *-ibm)
- os=-aix
- ;;
- *-knuth)
- os=-mmixware
- ;;
- *-wec)
- os=-proelf
- ;;
- *-winbond)
- os=-proelf
- ;;
- *-oki)
- os=-proelf
- ;;
- *-hp)
- os=-hpux
- ;;
- *-hitachi)
- os=-hiux
- ;;
- i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
- os=-sysv
- ;;
- *-cbm)
- os=-amigaos
- ;;
- *-dg)
- os=-dgux
- ;;
- *-dolphin)
- os=-sysv3
- ;;
- m68k-ccur)
- os=-rtu
- ;;
- m88k-omron*)
- os=-luna
- ;;
- *-next )
- os=-nextstep
- ;;
- *-sequent)
- os=-ptx
- ;;
- *-crds)
- os=-unos
- ;;
- *-ns)
- os=-genix
- ;;
- i370-*)
- os=-mvs
- ;;
- *-next)
- os=-nextstep3
- ;;
- *-gould)
- os=-sysv
- ;;
- *-highlevel)
- os=-bsd
- ;;
- *-encore)
- os=-bsd
- ;;
- *-sgi)
- os=-irix
- ;;
- *-siemens)
- os=-sysv4
- ;;
- *-masscomp)
- os=-rtu
- ;;
- f30[01]-fujitsu | f700-fujitsu)
- os=-uxpv
- ;;
- *-rom68k)
- os=-coff
- ;;
- *-*bug)
- os=-coff
- ;;
- *-apple)
- os=-macos
- ;;
- *-atari*)
- os=-mint
- ;;
- *)
- os=-none
- ;;
-esac
-fi
-
-# Here we handle the case where we know the os, and the CPU type, but not the
-# manufacturer. We pick the logical manufacturer.
-vendor=unknown
-case $basic_machine in
- *-unknown)
- case $os in
- -riscix*)
- vendor=acorn
- ;;
- -sunos*)
- vendor=sun
- ;;
- -cnk*|-aix*)
- vendor=ibm
- ;;
- -beos*)
- vendor=be
- ;;
- -hpux*)
- vendor=hp
- ;;
- -mpeix*)
- vendor=hp
- ;;
- -hiux*)
- vendor=hitachi
- ;;
- -unos*)
- vendor=crds
- ;;
- -dgux*)
- vendor=dg
- ;;
- -luna*)
- vendor=omron
- ;;
- -genix*)
- vendor=ns
- ;;
- -mvs* | -opened*)
- vendor=ibm
- ;;
- -os400*)
- vendor=ibm
- ;;
- -ptx*)
- vendor=sequent
- ;;
- -tpf*)
- vendor=ibm
- ;;
- -vxsim* | -vxworks* | -windiss*)
- vendor=wrs
- ;;
- -aux*)
- vendor=apple
- ;;
- -hms*)
- vendor=hitachi
- ;;
- -mpw* | -macos*)
- vendor=apple
- ;;
- -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
- vendor=atari
- ;;
- -vos*)
- vendor=stratus
- ;;
- esac
- basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
- ;;
-esac
-
-echo $basic_machine$os
-exit
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/winsup/configure b/winsup/configure
deleted file mode 100755
index 0887d66e3..000000000
--- a/winsup/configure
+++ /dev/null
@@ -1,4784 +0,0 @@
-#! /bin/sh
-# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for Cygwin toplevel 0.
-#
-# Report bugs to <cygwin@cygwin.com>.
-#
-#
-# Copyright (C) 1992-1996, 1998-2012 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 more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in #(
- *posix*) :
- set -o posix ;; #(
- *) :
- ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- PATH_SEPARATOR=:
- (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
- (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
- PATH_SEPARATOR=';'
- }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
-# Find who we are. Look in the path if we contain no directory separator.
-as_myself=
-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
-IFS=$as_save_IFS
-
- ;;
-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
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
- exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-# Use a proper internal environment variable to ensure we don't fall
- # into an infinite loop, continuously re-executing ourselves.
- if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
- _as_can_reexec=no; export _as_can_reexec;
- # We cannot yet assume a decent shell, so we have to provide a
-# neutralization value for shells without unset; and this also
-# works around shells that cannot unset nonexistent variables.
-# Preserve -v and -x to the replacement shell.
-BASH_ENV=/dev/null
-ENV=/dev/null
-(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-case $- in # ((((
- *v*x* | *x*v* ) as_opts=-vx ;;
- *v* ) as_opts=-v ;;
- *x* ) as_opts=-x ;;
- * ) as_opts= ;;
-esac
-exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
-# Admittedly, this is quite paranoid, since all the known shells bail
-# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-as_fn_exit 255
- fi
- # We don't want this to propagate to other subprocesses.
- { _as_can_reexec=; unset _as_can_reexec;}
-if test "x$CONFIG_SHELL" = x; then
- as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '\${1+\"\$@\"}'='\"\$@\"'
- setopt NO_GLOB_SUBST
-else
- case \`(set -o) 2>/dev/null\` in #(
- *posix*) :
- set -o posix ;; #(
- *) :
- ;;
-esac
-fi
-"
- as_required="as_fn_return () { (exit \$1); }
-as_fn_success () { as_fn_return 0; }
-as_fn_failure () { as_fn_return 1; }
-as_fn_ret_success () { return 0; }
-as_fn_ret_failure () { return 1; }
-
-exitcode=0
-as_fn_success || { exitcode=1; echo as_fn_success failed.; }
-as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
-as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
-as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
-if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
-
-else
- exitcode=1; echo positional parameters were not saved.
-fi
-test x\$exitcode = x0 || exit 1
-test -x / || exit 1"
- as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
- as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
- eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
- test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1"
- if (eval "$as_required") 2>/dev/null; then :
- as_have_required=yes
-else
- as_have_required=no
-fi
- if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
-
-else
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-as_found=false
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- as_found=:
- case $as_dir in #(
- /*)
- for as_base in sh bash ksh sh5; do
- # Try only shells that exist, to save several forks.
- as_shell=$as_dir/$as_base
- if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
- CONFIG_SHELL=$as_shell as_have_required=yes
- if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
- break 2
-fi
-fi
- done;;
- esac
- as_found=false
-done
-$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
- CONFIG_SHELL=$SHELL as_have_required=yes
-fi; }
-IFS=$as_save_IFS
-
-
- if test "x$CONFIG_SHELL" != x; then :
- export CONFIG_SHELL
- # We cannot yet assume a decent shell, so we have to provide a
-# neutralization value for shells without unset; and this also
-# works around shells that cannot unset nonexistent variables.
-# Preserve -v and -x to the replacement shell.
-BASH_ENV=/dev/null
-ENV=/dev/null
-(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-case $- in # ((((
- *v*x* | *x*v* ) as_opts=-vx ;;
- *v* ) as_opts=-v ;;
- *x* ) as_opts=-x ;;
- * ) as_opts= ;;
-esac
-exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
-# Admittedly, this is quite paranoid, since all the known shells bail
-# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-exit 255
-fi
-
- if test x$as_have_required = xno; then :
- $as_echo "$0: This script requires a shell more modern than all"
- $as_echo "$0: the shells that I found on your system."
- if test x${ZSH_VERSION+set} = xset ; then
- $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
- $as_echo "$0: be upgraded to zsh 4.3.4 or later."
- else
- $as_echo "$0: Please tell bug-autoconf@gnu.org and cygwin@cygwin.com
-$0: about your system, including any error possibly output
-$0: before this message. Then install a modern shell, or
-$0: manually run the script under such a shell if you do
-$0: have one."
- fi
- exit 1
-fi
-fi
-fi
-SHELL=${CONFIG_SHELL-/bin/sh}
-export SHELL
-# Unset more variables known to interfere with behavior of common tools.
-CLICOLOR_FORCE= GREP_OPTIONS=
-unset CLICOLOR_FORCE GREP_OPTIONS
-
-## --------------------- ##
-## M4sh Shell Functions. ##
-## --------------------- ##
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
- { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
- return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
- set +e
- as_fn_set_status $1
- exit $1
-} # as_fn_exit
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
- case $as_dir in #(
- -*) as_dir=./$as_dir;;
- esac
- test -d "$as_dir" || eval $as_mkdir_p || {
- as_dirs=
- while :; do
- case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
- *) as_qdir=$as_dir;;
- esac
- as_dirs="'$as_qdir' $as_dirs"
- as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- test -d "$as_dir" && break
- done
- test -z "$as_dirs" || eval "mkdir $as_dirs"
- } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-
-# as_fn_executable_p FILE
-# -----------------------
-# Test if FILE is an executable regular file.
-as_fn_executable_p ()
-{
- test -f "$1" && test -x "$1"
-} # as_fn_executable_p
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
- eval 'as_fn_append ()
- {
- eval $1+=\$2
- }'
-else
- as_fn_append ()
- {
- eval $1=\$$1\$2
- }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
- eval 'as_fn_arith ()
- {
- as_val=$(( $* ))
- }'
-else
- as_fn_arith ()
- {
- as_val=`expr "$@" || test $? -eq 1`
- }
-fi # as_fn_arith
-
-
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
-as_fn_error ()
-{
- as_status=$1; test $as_status -eq 0 && as_status=1
- if test "$4"; then
- as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
- fi
- $as_echo "$as_me: error: $2" >&2
- as_fn_exit $as_status
-} # as_fn_error
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; 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
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
- }
- /^X\/\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\/\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
-
-# 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
-
-
- as_lineno_1=$LINENO as_lineno_1a=$LINENO
- as_lineno_2=$LINENO as_lineno_2a=$LINENO
- eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
- test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
- # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
- sed -n '
- p
- /[$]LINENO/=
- ' <$as_myself |
- sed '
- s/[$]LINENO.*/&-/
- t lineno
- b
- :lineno
- N
- :loop
- s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
- t loop
- s/-\n.*//
- ' >$as_me.lineno &&
- chmod +x "$as_me.lineno" ||
- { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
-
- # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
- # already done that, so ensure we don't try to do so again and fall
- # in an infinite loop. This has already happened in practice.
- _as_can_reexec=no; export _as_can_reexec
- # 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 sensitive to this).
- . "./$as_me.lineno"
- # Exit status is that of the last command.
- exit
-}
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
- case `echo 'xy\c'` in
- *c*) ECHO_T=' ';; # ECHO_T is single tab character.
- xy) ECHO_C='\c';;
- *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
- ECHO_T=' ';;
- esac;;
-*)
- ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
- rm -f conf$$.dir/conf$$.file
-else
- rm -f conf$$.dir
- mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
- if ln -s conf$$.file conf$$ 2>/dev/null; then
- as_ln_s='ln -s'
- # ... but there are two gotchas:
- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -pR'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -pR'
- elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
- else
- as_ln_s='cp -pR'
- fi
-else
- as_ln_s='cp -pR'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p='mkdir -p "$as_dir"'
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-as_test_x='test -x'
-as_executable_p=as_fn_executable_p
-
-# 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'"
-
-
-test -n "$DJDIR" || exec 7<&0 </dev/null
-exec 6>&1
-
-# Name of the host.
-# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
-# so uname gets run too.
-ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
-
-#
-# Initializations.
-#
-ac_default_prefix=/usr/local
-ac_clean_files=
-ac_config_libobj_dir=.
-LIBOBJS=
-cross_compiling=no
-subdirs=
-MFLAGS=
-MAKEFLAGS=
-
-# Identity of this package.
-PACKAGE_NAME='Cygwin toplevel'
-PACKAGE_TARNAME='cygwin'
-PACKAGE_VERSION='0'
-PACKAGE_STRING='Cygwin toplevel 0'
-PACKAGE_BUGREPORT='cygwin@cygwin.com'
-PACKAGE_URL='https://cygwin.com'
-
-ac_unique_file="Makefile.in"
-ac_no_link=no
-enable_option_checking=no
-ac_subst_vars='LTLIBOBJS
-LIBOBJS
-SET_MAKE
-INSTALL_LICENSE
-subdirs
-cygwin_headers
-newlib_headers
-windows_headers
-windows_libdir
-CPP
-ac_ct_CXX
-CXXFLAGS
-CXX
-OBJEXT
-EXEEXT
-ac_ct_CC
-CPPFLAGS
-LDFLAGS
-CFLAGS
-CC
-target_os
-target_vendor
-target_cpu
-target
-host_os
-host_vendor
-host_cpu
-host
-build_os
-build_vendor
-build_cpu
-build
-INSTALL_DATA
-INSTALL_SCRIPT
-INSTALL_PROGRAM
-target_alias
-host_alias
-build_alias
-LIBS
-ECHO_T
-ECHO_N
-ECHO_C
-DEFS
-mandir
-localedir
-libdir
-psdir
-pdfdir
-dvidir
-htmldir
-infodir
-docdir
-oldincludedir
-includedir
-localstatedir
-sharedstatedir
-sysconfdir
-datadir
-datarootdir
-libexecdir
-sbindir
-bindir
-program_transform_name
-prefix
-exec_prefix
-PACKAGE_URL
-PACKAGE_BUGREPORT
-PACKAGE_STRING
-PACKAGE_VERSION
-PACKAGE_TARNAME
-PACKAGE_NAME
-PATH_SEPARATOR
-SHELL
-winsup_srcdir
-target_builddir'
-ac_subst_files=''
-ac_user_opts='
-enable_option_checking
-with_windows_headers
-with_windows_libs
-'
- ac_precious_vars='build_alias
-host_alias
-target_alias
-CC
-CFLAGS
-LDFLAGS
-LIBS
-CPPFLAGS
-CXX
-CXXFLAGS
-CCC
-CPP'
-ac_subdirs_all='cygwin utils cygserver lsaauth doc'
-
-# Initialize some variables set by options.
-ac_init_help=
-ac_init_version=false
-ac_unrecognized_opts=
-ac_unrecognized_sep=
-# 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.
-# (The list follows the same order as the GNU Coding Standards.)
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datarootdir='${prefix}/share'
-datadir='${datarootdir}'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
-infodir='${datarootdir}/info'
-htmldir='${docdir}'
-dvidir='${docdir}'
-pdfdir='${docdir}'
-psdir='${docdir}'
-libdir='${exec_prefix}/lib'
-localedir='${datarootdir}/locale'
-mandir='${datarootdir}/man'
-
-ac_prev=
-ac_dashdash=
-for ac_option
-do
- # If the previous option needs an argument, assign it.
- if test -n "$ac_prev"; then
- eval $ac_prev=\$ac_option
- ac_prev=
- continue
- fi
-
- case $ac_option in
- *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
- *=) ac_optarg= ;;
- *) ac_optarg=yes ;;
- esac
-
- # Accept the important Cygnus configure options, so we can diagnose typos.
-
- case $ac_dashdash$ac_option in
- --)
- ac_dashdash=yes ;;
-
- -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)
- ac_prev=datadir ;;
- -datadir=* | --datadir=* | --datadi=* | --datad=*)
- datadir=$ac_optarg ;;
-
- -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
- | --dataroo | --dataro | --datar)
- ac_prev=datarootdir ;;
- -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
- | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
- datarootdir=$ac_optarg ;;
-
- -disable-* | --disable-*)
- ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid feature name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"enable_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval enable_$ac_useropt=no ;;
-
- -docdir | --docdir | --docdi | --doc | --do)
- ac_prev=docdir ;;
- -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
- docdir=$ac_optarg ;;
-
- -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
- ac_prev=dvidir ;;
- -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
- dvidir=$ac_optarg ;;
-
- -enable-* | --enable-*)
- ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid feature name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"enable_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval enable_$ac_useropt=\$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 ;;
-
- -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
- ac_prev=htmldir ;;
- -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
- | --ht=*)
- htmldir=$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 ;;
-
- -localedir | --localedir | --localedi | --localed | --locale)
- ac_prev=localedir ;;
- -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
- localedir=$ac_optarg ;;
-
- -localstatedir | --localstatedir | --localstatedi | --localstated \
- | --localstate | --localstat | --localsta | --localst | --locals)
- ac_prev=localstatedir ;;
- -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
- | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
- 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 ;;
-
- -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
- ac_prev=pdfdir ;;
- -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
- pdfdir=$ac_optarg ;;
-
- -psdir | --psdir | --psdi | --psd | --ps)
- ac_prev=psdir ;;
- -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
- psdir=$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_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid package name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"with_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval with_$ac_useropt=\$ac_optarg ;;
-
- -without-* | --without-*)
- ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid package name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"with_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval with_$ac_useropt=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 ;;
-
- -*) as_fn_error $? "unrecognized option: \`$ac_option'
-Try \`$0 --help' for more information"
- ;;
-
- *=*)
- ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
- # Reject names that are not valid shell variable names.
- case $ac_envvar in #(
- '' | [0-9]* | *[!_$as_cr_alnum]* )
- as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
- esac
- eval $ac_envvar=\$ac_optarg
- export $ac_envvar ;;
-
- *)
- # FIXME: should be removed in autoconf 3.0.
- $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
- expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- $as_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'`
- as_fn_error $? "missing argument to $ac_option"
-fi
-
-if test -n "$ac_unrecognized_opts"; then
- case $enable_option_checking in
- no) ;;
- fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
- *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
- esac
-fi
-
-# Check all directory arguments for consistency.
-for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
- datadir sysconfdir sharedstatedir localstatedir includedir \
- oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
- libdir localedir mandir
-do
- eval ac_val=\$$ac_var
- # Remove trailing slashes.
- case $ac_val in
- */ )
- ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
- eval $ac_var=\$ac_val;;
- esac
- # Be sure to have absolute directory names.
- case $ac_val in
- [\\/$]* | ?:[\\/]* ) continue;;
- NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
- esac
- as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
-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
- 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
-
-
-ac_pwd=`pwd` && test -n "$ac_pwd" &&
-ac_ls_di=`ls -di .` &&
-ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
- as_fn_error $? "working directory cannot be determined"
-test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
- as_fn_error $? "pwd does not report name of working directory"
-
-
-# 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 the parent directory.
- ac_confdir=`$as_dirname -- "$as_myself" ||
-$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_myself" : 'X\(//\)[^/]' \| \
- X"$as_myself" : 'X\(//\)$' \| \
- X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_myself" |
- 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
- test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
- as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
-fi
-ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
-ac_abs_confdir=`(
- cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
- pwd)`
-# When building in place, set srcdir=.
-if test "$ac_abs_confdir" = "$ac_pwd"; then
- srcdir=.
-fi
-# Remove unnecessary trailing slashes from srcdir.
-# Double slashes in file names in object file debugging info
-# mess up M-x gdb in Emacs.
-case $srcdir in
-*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
-esac
-for ac_var in $ac_precious_vars; do
- eval ac_env_${ac_var}_set=\${${ac_var}+set}
- eval ac_env_${ac_var}_value=\$${ac_var}
- eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
- eval ac_cv_env_${ac_var}_value=\$${ac_var}
-done
-
-#
-# 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 Cygwin toplevel 0 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 \`..']
-
-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]
- --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]
- --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
- --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
- --infodir=DIR info documentation [DATAROOTDIR/info]
- --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
- --mandir=DIR man documentation [DATAROOTDIR/man]
- --docdir=DIR documentation root [DATAROOTDIR/doc/cygwin]
- --htmldir=DIR html documentation [DOCDIR]
- --dvidir=DIR dvi documentation [DOCDIR]
- --pdfdir=DIR pdf documentation [DOCDIR]
- --psdir=DIR ps documentation [DOCDIR]
-_ACEOF
-
- cat <<\_ACEOF
-
-System types:
- --build=BUILD configure for building on BUILD [guessed]
- --host=HOST cross-compile to build programs to run on HOST [BUILD]
- --target=TARGET configure for building compilers for TARGET [HOST]
-_ACEOF
-fi
-
-if test -n "$ac_init_help"; then
- case $ac_init_help in
- short | recursive ) echo "Configuration of Cygwin toplevel 0:";;
- esac
- cat <<\_ACEOF
-
-Optional Packages:
- --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
- --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
- --with-windows-headers=DIR
- specify where the windows includes are located
- --with-windows-libs=DIR specify where the windows libraries are located
-
-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>
- LIBS libraries to pass to the linker, e.g. -l<library>
- CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
- you have headers in a nonstandard directory <include dir>
- CXX C++ compiler command
- CXXFLAGS C++ compiler flags
- 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.
-
-Report bugs to <cygwin@cygwin.com>.
-Cygwin toplevel home page: <https://cygwin.com>.
-_ACEOF
-ac_status=$?
-fi
-
-if test "$ac_init_help" = "recursive"; then
- # If there are subdirs, report their specific --help.
- for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
- test -d "$ac_dir" ||
- { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
- continue
- ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
- # A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
- esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
- .) # We are building in place.
- ac_srcdir=.
- ac_top_srcdir=$ac_top_builddir_sub
- ac_abs_top_srcdir=$ac_pwd ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir
- ac_abs_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_build_prefix$srcdir
- ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
- cd "$ac_dir" || { ac_status=$?; continue; }
- # Check for guested 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
- else
- $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
- fi || ac_status=$?
- cd "$ac_pwd" || { ac_status=$?; break; }
- done
-fi
-
-test -n "$ac_init_help" && exit $ac_status
-if $ac_init_version; then
- cat <<\_ACEOF
-Cygwin toplevel configure 0
-generated by GNU Autoconf 2.69
-
-Copyright (C) 2012 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
-fi
-
-## ------------------------ ##
-## Autoconf initialization. ##
-## ------------------------ ##
-
-# ac_fn_c_try_compile LINENO
-# --------------------------
-# Try to compile conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_compile ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext
- if { { ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compile") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_compile
-
-# ac_fn_cxx_try_compile LINENO
-# ----------------------------
-# Try to compile conftest.$ac_ext, and return whether this succeeded.
-ac_fn_cxx_try_compile ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext
- if { { ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compile") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && {
- test -z "$ac_cxx_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_cxx_try_compile
-
-# ac_fn_c_try_cpp LINENO
-# ----------------------
-# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_cpp ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if { { ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } > conftest.i && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_cpp
-cat >config.log <<_ACEOF
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-
-It was created by Cygwin toplevel $as_me 0, which was
-generated by GNU Autoconf 2.69. Invocation command line was
-
- $ $0 $@
-
-_ACEOF
-exec 5>>config.log
-{
-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`
-/usr/bin/hostinfo = `(/usr/bin/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=.
- $as_echo "PATH: $as_dir"
- done
-IFS=$as_save_IFS
-
-} >&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_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=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- case $ac_pass in
- 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
- 2)
- as_fn_append 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
- as_fn_append ac_configure_args " '$ac_arg'"
- ;;
- esac
- done
-done
-{ ac_configure_args0=; unset ac_configure_args0;}
-{ ac_configure_args1=; unset 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: Use '\'' to represent an apostrophe within the trap.
-# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
-trap 'exit_status=$?
- # Save into config.log some information that might help in debugging.
- {
- echo
-
- $as_echo "## ---------------- ##
-## Cache variables. ##
-## ---------------- ##"
- echo
- # The following way of writing the cache mishandles newlines in values,
-(
- for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
- eval ac_val=\$$ac_var
- case $ac_val in #(
- *${as_nl}*)
- case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
- esac
- case $ac_var in #(
- _ | IFS | as_nl) ;; #(
- BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
- *) { eval $ac_var=; unset $ac_var;} ;;
- esac ;;
- esac
- done
- (set) 2>&1 |
- case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
- *${as_nl}ac_space=\ *)
- sed -n \
- "s/'\''/'\''\\\\'\'''\''/g;
- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
- ;; #(
- *)
- sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
- ;;
- esac |
- sort
-)
- echo
-
- $as_echo "## ----------------- ##
-## Output variables. ##
-## ----------------- ##"
- echo
- for ac_var in $ac_subst_vars
- do
- eval ac_val=\$$ac_var
- case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
- esac
- $as_echo "$ac_var='\''$ac_val'\''"
- done | sort
- echo
-
- if test -n "$ac_subst_files"; then
- $as_echo "## ------------------- ##
-## File substitutions. ##
-## ------------------- ##"
- echo
- for ac_var in $ac_subst_files
- do
- eval ac_val=\$$ac_var
- case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
- esac
- $as_echo "$ac_var='\''$ac_val'\''"
- done | sort
- echo
- fi
-
- if test -s confdefs.h; then
- $as_echo "## ----------- ##
-## confdefs.h. ##
-## ----------- ##"
- echo
- cat confdefs.h
- echo
- fi
- test "$ac_signal" != 0 &&
- $as_echo "$as_me: caught signal $ac_signal"
- $as_echo "$as_me: exit $exit_status"
- } >&5
- rm -f core *.core core.conftest.* &&
- rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
- exit $exit_status
-' 0
-for ac_signal in 1 2 13 15; do
- trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
-done
-ac_signal=0
-
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -f -r conftest* confdefs.h
-
-$as_echo "/* confdefs.h */" > 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
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_URL "$PACKAGE_URL"
-_ACEOF
-
-
-# Let the site file select an alternate cache file if it wants to.
-# Prefer an explicitly selected file to automatically selected ones.
-ac_site_file1=NONE
-ac_site_file2=NONE
-if test -n "$CONFIG_SITE"; then
- # We do not want a PATH search for config.site.
- case $CONFIG_SITE in #((
- -*) ac_site_file1=./$CONFIG_SITE;;
- */*) ac_site_file1=$CONFIG_SITE;;
- *) ac_site_file1=./$CONFIG_SITE;;
- esac
-elif test "x$prefix" != xNONE; then
- ac_site_file1=$prefix/share/config.site
- ac_site_file2=$prefix/etc/config.site
-else
- ac_site_file1=$ac_default_prefix/share/config.site
- ac_site_file2=$ac_default_prefix/etc/config.site
-fi
-for ac_site_file in "$ac_site_file1" "$ac_site_file2"
-do
- test "x$ac_site_file" = xNONE && continue
- if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
-$as_echo "$as_me: loading site script $ac_site_file" >&6;}
- sed 's/^/| /' "$ac_site_file" >&5
- . "$ac_site_file" \
- || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "failed to load site script $ac_site_file
-See \`config.log' for more details" "$LINENO" 5; }
- 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. DJGPP emulates it as a regular file.
- if test /dev/null != "$cache_file" && test -f "$cache_file"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
-$as_echo "$as_me: loading cache $cache_file" >&6;}
- case $cache_file in
- [\\/]* | ?:[\\/]* ) . "$cache_file";;
- *) . "./$cache_file";;
- esac
- fi
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
-$as_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 $ac_precious_vars; 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,)
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
- ac_cache_corrupted=: ;;
- ,set)
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
-$as_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
- # differences in whitespace do not lead to failure.
- ac_old_val_w=`echo x $ac_old_val`
- ac_new_val_w=`echo x $ac_new_val`
- if test "$ac_old_val_w" != "$ac_new_val_w"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
-$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
- ac_cache_corrupted=:
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
-$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
- eval $ac_var=\$ac_old_val
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
-$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
-$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
- fi;;
- esac
- # Pass precious variables to config.status.
- if test "$ac_new_set" = set; then
- case $ac_new_val in
- *\'*) ac_arg=$ac_var=`$as_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.
- *) as_fn_append ac_configure_args " '$ac_arg'" ;;
- esac
- fi
-done
-if $ac_cache_corrupted; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
-$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
- as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
-fi
-## -------------------- ##
-## Main body of script. ##
-## -------------------- ##
-
-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_aux_dir=
-for ac_dir in .. "$srcdir"/..; do
- if test -f "$ac_dir/install-sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install-sh -c"
- break
- elif test -f "$ac_dir/install.sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install.sh -c"
- break
- elif test -f "$ac_dir/shtool"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/shtool install -c"
- break
- fi
-done
-if test -z "$ac_aux_dir"; then
- as_fn_error $? "cannot find install-sh, install.sh, or shtool in .. \"$srcdir\"/.." "$LINENO" 5
-fi
-
-# These three variables are undocumented and unsupported,
-# and are intended to be withdrawn in a future Autoconf release.
-# They can cause serious problems if a builder's source tree is in a directory
-# whose full name contains unusual characters.
-ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
-ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
-ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
-
-
-
-. ${srcdir}/configure.cygwin
-
-# Find a good install program. We prefer a C program (faster),
-# so one script is as good as another. But avoid the broken or
-# incompatible versions:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if ${ac_cv_path_install+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
- ./ | .// | /[cC]/* | \
- /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
- ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
- /usr/ucb/* ) ;;
- *)
- # OSF1 and SCO ODT 3.0 have their own names for install.
- # Don't use installbsd from OSF since it installs stuff as root
- # by default.
- for ac_prog in ginstall scoinst install; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
- if test $ac_prog = install &&
- grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
- # AIX install. It has an incompatible calling convention.
- :
- elif test $ac_prog = install &&
- grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
- # program-specific install script used by HP pwplus--don't use.
- :
- else
- rm -rf conftest.one conftest.two conftest.dir
- echo one > conftest.one
- echo two > conftest.two
- mkdir conftest.dir
- if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
- test -s conftest.one && test -s conftest.two &&
- test -s conftest.dir/conftest.one &&
- test -s conftest.dir/conftest.two
- then
- ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
- break 3
- fi
- fi
- fi
- done
- done
- ;;
-esac
-
- done
-IFS=$as_save_IFS
-
-rm -rf conftest.one conftest.two conftest.dir
-
-fi
- if test "${ac_cv_path_install+set}" = set; then
- INSTALL=$ac_cv_path_install
- else
- # As a last resort, use the slow shell script. Don't cache a
- # value for INSTALL within a source directory, because that will
- # break other packages using the cache if that directory is
- # removed, or if the value is a relative name.
- INSTALL=$ac_install_sh
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-
-# Make sure we can run config.sub.
-$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
- as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
-$as_echo_n "checking build system type... " >&6; }
-if ${ac_cv_build+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_build_alias=$build_alias
-test "x$ac_build_alias" = x &&
- ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
-test "x$ac_build_alias" = x &&
- as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
-ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
- as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
-$as_echo "$ac_cv_build" >&6; }
-case $ac_cv_build in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
-esac
-build=$ac_cv_build
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_build
-shift
-build_cpu=$1
-build_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-build_os=$*
-IFS=$ac_save_IFS
-case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
-$as_echo_n "checking host system type... " >&6; }
-if ${ac_cv_host+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test "x$host_alias" = x; then
- ac_cv_host=$ac_cv_build
-else
- ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
- as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
-$as_echo "$ac_cv_host" >&6; }
-case $ac_cv_host in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
-esac
-host=$ac_cv_host
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_host
-shift
-host_cpu=$1
-host_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-host_os=$*
-IFS=$ac_save_IFS
-case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5
-$as_echo_n "checking target system type... " >&6; }
-if ${ac_cv_target+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test "x$target_alias" = x; then
- ac_cv_target=$ac_cv_host
-else
- ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` ||
- as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5
-$as_echo "$ac_cv_target" >&6; }
-case $ac_cv_target in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;;
-esac
-target=$ac_cv_target
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_target
-shift
-target_cpu=$1
-target_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-target_os=$*
-IFS=$ac_save_IFS
-case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac
-
-
-# The aliases save the names the user supplied, while $host etc.
-# will get canonicalized.
-test -n "$target_alias" &&
- test "$program_prefix$program_suffix$program_transform_name" = \
- NONENONEs,x,x, &&
- program_prefix=${target_alias}-
-
-
-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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="${ac_tool_prefix}gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
- $as_echo_n "(cached) " >&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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="${ac_tool_prefix}cc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- 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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&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_fn_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"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-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
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- for ac_prog in cl.exe
- 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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$CC" && break
- done
-fi
-if test -z "$CC"; then
- ac_ct_CC=$CC
- for ac_prog in cl.exe
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
- $as_echo_n "(cached) " >&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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$ac_ct_CC" && break
-done
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-fi
-
-fi
-
-
-test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "no acceptable C compiler found in \$PATH
-See \`config.log' for more details" "$LINENO" 5; }
-
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
- { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compiler $ac_option >&5") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- sed '10a\
-... rest of stderr output deleted ...
- 10q' conftest.err >conftest.er1
- cat conftest.er1 >&5
- fi
- rm -f conftest.er1 conftest.err
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
-done
-
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- ac_no_link=no
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.out.dSYM 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.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
-$as_echo_n "checking whether the C compiler works... " >&6; }
-ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-
-# The possible output files:
-ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
-
-ac_rmfiles=
-for ac_file in $ac_files
-do
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
- * ) ac_rmfiles="$ac_rmfiles $ac_file";;
- esac
-done
-rm -f $ac_rmfiles
-
-if { { ac_try="$ac_link_default"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link_default") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
- # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
-# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
-# in a Makefile. We should not override ac_cv_exeext if it was cached,
-# so that the user can short-circuit this test for compilers unknown to
-# Autoconf.
-for ac_file in $ac_files ''
-do
- test -f "$ac_file" || continue
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
- ;;
- [ab].out )
- # We found the default executable, but exeext='' is most
- # certainly right.
- break;;
- *.* )
- if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
- then :; else
- ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- fi
- # We set ac_cv_exeext here because the later test for it is not
- # safe: cross compilers may not add the suffix if given an `-o'
- # argument, so we may need to know it at that point already.
- # Even if this section looks crufty: it has the advantage of
- # actually working.
- break;;
- * )
- break;;
- esac
-done
-test "$ac_cv_exeext" = no && ac_cv_exeext=
-
-else
- ac_file=''
-fi
-if test -z "$ac_file"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-$as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "C compiler cannot create executables
-See \`config.log' for more details" "$LINENO" 5; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
-$as_echo_n "checking for C compiler default output file name... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
-ac_exeext=$ac_cv_exeext
-
-rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
-ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
-$as_echo_n "checking for suffix of executables... " >&6; }
-if { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; 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 | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
- *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- break;;
- * ) break;;
- esac
-done
-else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-rm -f conftest conftest$ac_cv_exeext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
-$as_echo "$ac_cv_exeext" >&6; }
-
-rm -f conftest.$ac_ext
-EXEEXT=$ac_cv_exeext
-ac_exeext=$EXEEXT
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdio.h>
-int
-main ()
-{
-FILE *f = fopen ("conftest.out", "w");
- return ferror (f) || fclose (f) != 0;
-
- ;
- return 0;
-}
-_ACEOF
-ac_clean_files="$ac_clean_files conftest.out"
-# Check that the compiler produces executables we can run. If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
-if test "$cross_compiling" != yes; then
- { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
- if { ac_try='./conftest$ac_cv_exeext'
- { { case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then
- cross_compiling=no
- else
- if test "$cross_compiling" = maybe; then
- cross_compiling=yes
- else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details" "$LINENO" 5; }
- fi
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
-
-rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
-ac_clean_files=$ac_clean_files_save
-
-else
- rm -f -r a.out a.exe b.out conftest.$ac_ext conftest.o conftest.obj conftest.dSYM
- ac_no_link=yes
- # Setting cross_compile will disable run tests; it will
- # also disable AC_CHECK_FILE but that's generally
- # correct if we can't link.
- cross_compiling=yes
- EXEEXT=
- # Check that the compiler produces executables we can run. If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
-if test "$cross_compiling" != yes; then
- { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
- if { ac_try='./conftest$ac_cv_exeext'
- { { case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then
- cross_compiling=no
- else
- if test "$cross_compiling" = maybe; then
- cross_compiling=yes
- else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details" "$LINENO" 5; }
- fi
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
-$as_echo_n "checking for suffix of object files... " >&6; }
-if ${ac_cv_objext+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.o conftest.obj
-if { { ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compile") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
- for ac_file in conftest.o conftest.obj conftest.*; do
- test -f "$ac_file" || continue;
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
- *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
- break;;
- esac
-done
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of object files: cannot compile
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
-$as_echo "$ac_cv_objext" >&6; }
-OBJEXT=$ac_cv_objext
-ac_objext=$OBJEXT
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
-$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if ${ac_cv_c_compiler_gnu+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-#ifndef __GNUC__
- choke me
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_compiler_gnu=yes
-else
- ac_compiler_gnu=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
-$as_echo "$ac_cv_c_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
- GCC=yes
-else
- GCC=
-fi
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if ${ac_cv_prog_cc_g+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_save_c_werror_flag=$ac_c_werror_flag
- ac_c_werror_flag=yes
- ac_cv_prog_cc_g=no
- CFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_g=yes
-else
- CFLAGS=""
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-else
- ac_c_werror_flag=$ac_save_c_werror_flag
- CFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_g=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_c_werror_flag=$ac_save_c_werror_flag
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
-$as_echo "$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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if ${ac_cv_prog_cc_c89+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_cv_prog_cc_c89=no
-ac_save_CC=$CC
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdarg.h>
-#include <stdio.h>
-struct stat;
-/* 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 -std 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 -std. */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
- inside strings and character constants. */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 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
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
- -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
- CC="$ac_save_CC $ac_arg"
- if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_c89=$ac_arg
-fi
-rm -f core conftest.err conftest.$ac_objext
- test "x$ac_cv_prog_cc_c89" != "xno" && break
-done
-rm -f conftest.$ac_ext
-CC=$ac_save_CC
-
-fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
- x)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
- xno)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
- *)
- CC="$CC $ac_cv_prog_cc_c89"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-if test "x$ac_cv_prog_cc_c89" != xno; then :
-
-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_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-if test -z "$CXX"; then
- if test -n "$CCC"; then
- CXX=$CCC
- else
- if test -n "$ac_tool_prefix"; then
- for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
- 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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CXX+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CXX"; then
- ac_cv_prog_CXX="$CXX" # 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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CXX=$ac_cv_prog_CXX
-if test -n "$CXX"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
-$as_echo "$CXX" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$CXX" && break
- done
-fi
-if test -z "$CXX"; then
- ac_ct_CXX=$CXX
- for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CXX+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_CXX"; then
- ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # 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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CXX="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
-if test -n "$ac_ct_CXX"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
-$as_echo "$ac_ct_CXX" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$ac_ct_CXX" && break
-done
-
- if test "x$ac_ct_CXX" = x; then
- CXX="g++"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CXX=$ac_ct_CXX
- fi
-fi
-
- fi
-fi
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
- { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compiler $ac_option >&5") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- sed '10a\
-... rest of stderr output deleted ...
- 10q' conftest.err >conftest.er1
- cat conftest.er1 >&5
- fi
- rm -f conftest.er1 conftest.err
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
-done
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
-$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
-if ${ac_cv_cxx_compiler_gnu+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-#ifndef __GNUC__
- choke me
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- ac_compiler_gnu=yes
-else
- ac_compiler_gnu=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
-$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
- GXX=yes
-else
- GXX=
-fi
-ac_test_CXXFLAGS=${CXXFLAGS+set}
-ac_save_CXXFLAGS=$CXXFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
-$as_echo_n "checking whether $CXX accepts -g... " >&6; }
-if ${ac_cv_prog_cxx_g+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_save_cxx_werror_flag=$ac_cxx_werror_flag
- ac_cxx_werror_flag=yes
- ac_cv_prog_cxx_g=no
- CXXFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- ac_cv_prog_cxx_g=yes
-else
- CXXFLAGS=""
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-
-else
- ac_cxx_werror_flag=$ac_save_cxx_werror_flag
- CXXFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- ac_cv_prog_cxx_g=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_cxx_werror_flag=$ac_save_cxx_werror_flag
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
-$as_echo "$ac_cv_prog_cxx_g" >&6; }
-if test "$ac_test_CXXFLAGS" = set; then
- CXXFLAGS=$ac_save_CXXFLAGS
-elif test $ac_cv_prog_cxx_g = yes; then
- if test "$GXX" = yes; then
- CXXFLAGS="-g -O2"
- else
- CXXFLAGS="-g"
- fi
-else
- if test "$GXX" = yes; then
- CXXFLAGS="-O2"
- else
- CXXFLAGS=
- fi
-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_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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
-$as_echo_n "checking how to run the C preprocessor... " >&6; }
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
- CPP=
-fi
-if test -z "$CPP"; then
- if ${ac_cv_prog_CPP+:} false; then :
- $as_echo_n "(cached) " >&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 confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- # Broken: success on invalid input.
-continue
-else
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i 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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
-$as_echo "$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 confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- # Broken: success on invalid input.
-continue
-else
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-
-else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details" "$LINENO" 5; }
-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_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
-
-
-
-
-# Check whether --with-windows-headers was given.
-if test "${with_windows_headers+set}" = set; then :
- withval=$with_windows_headers; test -z "$withval" && as_fn_error $? "must specify value for --with-windows-headers" "$LINENO" 5
-
-fi
-
-
-
-
-# Check whether --with-windows-libs was given.
-if test "${with_windows_libs+set}" = set; then :
- withval=$with_windows_libs; test -z "$withval" && as_fn_error $? "must specify value for --with-windows-libs" "$LINENO" 5
-
-fi
-
-windows_libdir=$(realdirpath "$with_windows_libs")
-if test -z "$windows_libdir"; then
- windows_libdir=$(realdirpath $(${ac_cv_prog_CC:-$CC} -xc /dev/null -Wl,--verbose=1 -lntdll 2>&1 | sed -rn 's%^.*\s(\S+)/libntdll\..*succeeded%\1%p'))
- if test -z "$windows_libdir"; then
- as_fn_error $? "cannot find windows library files" "$LINENO" 5
- fi
-fi
-
-
-
-
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-
-
-addto_CPPFLAGS -nostdinc
-: ${ac_cv_prog_CXX:=$CXX}
-: ${ac_cv_prog_CC:=$CC}
-
-cygwin_headers=$(realdirpath "$winsup_srcdir/cygwin/include")
-if test -z "$cygwin_headers"; then
- as_fn_error $? "cannot find $winsup_srcdir/cygwin/include directory" "$LINENO" 5
-fi
-
-newlib_headers=$(realdirpath $winsup_srcdir/../newlib/libc/include)
-if test -z "$newlib_headers"; then
- as_fn_error $? "cannot find newlib source directory: $winsup_srcdir/../newlib/libc/include" "$LINENO" 5
-fi
-newlib_headers="$target_builddir/newlib/targ-include $newlib_headers"
-
-if test -n "$with_windows_headers"; then
- if test -e "$with_windows_headers/windef.h"; then
- windows_headers="$with_windows_headers"
- else
- as_fn_error $? "cannot find windef.h in specified --with-windows-headers path: $saw_windows_headers" "$LINENO" 5;
- fi
-elif test -d "$winsup_srcdir/w32api/include/windef.h"; then
- windows_headers="$winsup_srcdir/w32api/include"
-else
- windows_headers=$(cd $($ac_cv_prog_CC -xc /dev/null -E -include windef.h 2>/dev/null | sed -n 's%^# 1 "\([^"]*\)/windef\.h".*$%\1%p' | head -n1) 2>/dev/null && pwd)
- if test -z "$windows_headers" -o ! -d "$windows_headers"; then
- as_fn_error $? "cannot find windows header files" "$LINENO" 5
- fi
-fi
-CC=$ac_cv_prog_CC
-CXX=$ac_cv_prog_CXX
-export CC
-export CXX
-
-
-
-
-
-
-
-subdirs="$subdirs cygwin utils cygserver lsaauth doc"
-
-INSTALL_LICENSE="install-license"
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
-$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
-set x ${MAKE-make}
-ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
-if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat >conftest.make <<\_ACEOF
-SHELL = /bin/sh
-all:
- @echo '@@@%%%=$(MAKE)=@@@%%%'
-_ACEOF
-# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
-case `${MAKE-make} -f conftest.make 2>/dev/null` in
- *@@@%%%=?*=@@@%%%*)
- eval ac_cv_prog_make_${ac_make}_set=yes;;
- *)
- eval ac_cv_prog_make_${ac_make}_set=no;;
-esac
-rm -f conftest.make
-fi
-if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- SET_MAKE=
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- SET_MAKE="MAKE=${MAKE-make}"
-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, we kill variables containing newlines.
-# 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.
-(
- for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
- eval ac_val=\$$ac_var
- case $ac_val in #(
- *${as_nl}*)
- case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
- esac
- case $ac_var in #(
- _ | IFS | as_nl) ;; #(
- BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
- *) { eval $ac_var=; unset $ac_var;} ;;
- esac ;;
- esac
- done
-
- (set) 2>&1 |
- case $as_nl`(ac_space=' '; set) 2>&1` in #(
- *${as_nl}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 "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
- ;;
- esac |
- sort
-) |
- sed '
- /^ac_cv_env_/b end
- t clear
- :clear
- s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
- t end
- s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
- :end' >>confcache
-if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
- if test -w "$cache_file"; then
- if test "x$cache_file" != "x/dev/null"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
-$as_echo "$as_me: updating cache $cache_file" >&6;}
- if test ! -f "$cache_file" || test -h "$cache_file"; then
- cat confcache >"$cache_file"
- else
- case $cache_file in #(
- */* | ?:*)
- mv -f confcache "$cache_file"$$ &&
- mv -f "$cache_file"$$ "$cache_file" ;; #(
- *)
- mv -f confcache "$cache_file" ;;
- esac
- fi
- fi
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
-$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
- 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}'
-
-# Transform confdefs.h into DEFS.
-# Protect against shell expansion while executing Makefile rules.
-# Protect against Makefile macro expansion.
-#
-# If the first sed substitution is executed (which looks for macros that
-# take arguments), then branch to the quote section. Otherwise,
-# look for a macro that doesn't take arguments.
-ac_script='
-:mline
-/\\$/{
- N
- s,\\\n,,
- b mline
-}
-t clear
-:clear
-s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g
-t quote
-s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g
-t quote
-b any
-:quote
-s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g
-s/\[/\\&/g
-s/\]/\\&/g
-s/\$/$$/g
-H
-:any
-${
- g
- s/^\n//
- s/\n/ /g
- p
-}
-'
-DEFS=`sed -n "$ac_script" confdefs.h`
-
-
-ac_libobjs=
-ac_ltlibobjs=
-U=
-for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
- # 1. Remove the extension, and $U if already installed.
- ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
- ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
- # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
- # will be set to the directory where LIBOBJS objects are built.
- as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
- as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
-done
-LIBOBJS=$ac_libobjs
-
-LTLIBOBJS=$ac_ltlibobjs
-
-
-
-: "${CONFIG_STATUS=./config.status}"
-ac_write_fail=0
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
-as_write_fail=0
-cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
-#! $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}
-export SHELL
-_ASEOF
-cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
-## -------------------- ##
-## M4sh Initialization. ##
-## -------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in #(
- *posix*) :
- set -o posix ;; #(
- *) :
- ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- PATH_SEPARATOR=:
- (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
- (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
- PATH_SEPARATOR=';'
- }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
-# Find who we are. Look in the path if we contain no directory separator.
-as_myself=
-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
-IFS=$as_save_IFS
-
- ;;
-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
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
- exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
-as_fn_error ()
-{
- as_status=$1; test $as_status -eq 0 && as_status=1
- if test "$4"; then
- as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
- fi
- $as_echo "$as_me: error: $2" >&2
- as_fn_exit $as_status
-} # as_fn_error
-
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
- return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
- set +e
- as_fn_set_status $1
- exit $1
-} # as_fn_exit
-
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
- { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
- eval 'as_fn_append ()
- {
- eval $1+=\$2
- }'
-else
- as_fn_append ()
- {
- eval $1=\$$1\$2
- }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
- eval 'as_fn_arith ()
- {
- as_val=$(( $* ))
- }'
-else
- as_fn_arith ()
- {
- as_val=`expr "$@" || test $? -eq 1`
- }
-fi # as_fn_arith
-
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; 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
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
- }
- /^X\/\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\/\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
-
-# 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
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
- case `echo 'xy\c'` in
- *c*) ECHO_T=' ';; # ECHO_T is single tab character.
- xy) ECHO_C='\c';;
- *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
- ECHO_T=' ';;
- esac;;
-*)
- ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
- rm -f conf$$.dir/conf$$.file
-else
- rm -f conf$$.dir
- mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
- if ln -s conf$$.file conf$$ 2>/dev/null; then
- as_ln_s='ln -s'
- # ... but there are two gotchas:
- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -pR'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -pR'
- elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
- else
- as_ln_s='cp -pR'
- fi
-else
- as_ln_s='cp -pR'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
- case $as_dir in #(
- -*) as_dir=./$as_dir;;
- esac
- test -d "$as_dir" || eval $as_mkdir_p || {
- as_dirs=
- while :; do
- case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
- *) as_qdir=$as_dir;;
- esac
- as_dirs="'$as_qdir' $as_dirs"
- as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- test -d "$as_dir" && break
- done
- test -z "$as_dirs" || eval "mkdir $as_dirs"
- } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p='mkdir -p "$as_dir"'
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-
-# as_fn_executable_p FILE
-# -----------------------
-# Test if FILE is an executable regular file.
-as_fn_executable_p ()
-{
- test -f "$1" && test -x "$1"
-} # as_fn_executable_p
-as_test_x='test -x'
-as_executable_p=as_fn_executable_p
-
-# 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'"
-
-
-exec 6>&1
-## ----------------------------------- ##
-## Main body of $CONFIG_STATUS script. ##
-## ----------------------------------- ##
-_ASEOF
-test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# Save the log message, to keep $0 and so on meaningful, and to
-# report actual input values of CONFIG_FILES etc. instead of their
-# values after options handling.
-ac_log="
-This file was extended by Cygwin toplevel $as_me 0, which was
-generated by GNU Autoconf 2.69. Invocation command line was
-
- CONFIG_FILES = $CONFIG_FILES
- CONFIG_HEADERS = $CONFIG_HEADERS
- CONFIG_LINKS = $CONFIG_LINKS
- CONFIG_COMMANDS = $CONFIG_COMMANDS
- $ $0 $@
-
-on `(hostname || uname -n) 2>/dev/null | sed 1q`
-"
-
-_ACEOF
-
-case $ac_config_files in *"
-"*) set x $ac_config_files; shift; ac_config_files=$*;;
-esac
-
-
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-# Files that config.status was made for.
-config_files="$ac_config_files"
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-ac_cs_usage="\
-\`$as_me' instantiates files and other configuration actions
-from templates according to the current configuration. Unless the files
-and actions are specified as TAGs, all are instantiated by default.
-
-Usage: $0 [OPTION]... [TAG]...
-
- -h, --help print this help, then exit
- -V, --version print version number and configuration settings, then exit
- --config print configuration, then exit
- -q, --quiet, --silent
- 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
-
-Configuration files:
-$config_files
-
-Report bugs to <cygwin@cygwin.com>.
-Cygwin toplevel home page: <https://cygwin.com>."
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
-ac_cs_version="\\
-Cygwin toplevel config.status 0
-configured by $0, generated by GNU Autoconf 2.69,
- with options \\"\$ac_cs_config\\"
-
-Copyright (C) 2012 Free Software Foundation, Inc.
-This config.status script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it."
-
-ac_pwd='$ac_pwd'
-srcdir='$srcdir'
-INSTALL='$INSTALL'
-test -n "\$AWK" || AWK=awk
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# The default lists apply if the user does not specify any file.
-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=`expr "X$1" : 'X\([^=]*\)='`
- ac_optarg=
- ac_shift=:
- ;;
- *)
- ac_option=$1
- ac_optarg=$2
- ac_shift=shift
- ;;
- esac
-
- case $ac_option in
- # Handling of the options.
- -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
- ac_cs_recheck=: ;;
- --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
- $as_echo "$ac_cs_version"; exit ;;
- --config | --confi | --conf | --con | --co | --c )
- $as_echo "$ac_cs_config"; exit ;;
- --debug | --debu | --deb | --de | --d | -d )
- debug=: ;;
- --file | --fil | --fi | --f )
- $ac_shift
- case $ac_optarg in
- *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
- '') as_fn_error $? "missing file argument" ;;
- esac
- as_fn_append CONFIG_FILES " '$ac_optarg'"
- ac_need_defaults=false;;
- --he | --h | --help | --hel | -h )
- $as_echo "$ac_cs_usage"; exit ;;
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil | --si | --s)
- ac_cs_silent=: ;;
-
- # This is an error.
- -*) as_fn_error $? "unrecognized option: \`$1'
-Try \`$0 --help' for more information." ;;
-
- *) as_fn_append ac_config_targets " $1"
- ac_need_defaults=false ;;
-
- 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 || ac_write_fail=1
-if \$ac_cs_recheck; then
- set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
- shift
- \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
- CONFIG_SHELL='$SHELL'
- export CONFIG_SHELL
- exec "\$@"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-exec 5>>config.log
-{
- echo
- sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
- $as_echo "$ac_log"
-} >&5
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-
-# Handling of arguments.
-for ac_config_target in $ac_config_targets
-do
- case $ac_config_target in
- "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
-
- *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
- 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
-fi
-
-# Have a temporary directory for convenience. Make it in the build tree
-# simply because there is no reason against having it here, and in addition,
-# creating and moving files from /tmp can sometimes cause problems.
-# Hook for its removal unless debugging.
-# Note that there is a small window in which the directory will not be cleaned:
-# after its creation but before its name has been assigned to `$tmp'.
-$debug ||
-{
- tmp= ac_tmp=
- trap 'exit_status=$?
- : "${ac_tmp:=$tmp}"
- { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
-' 0
- trap 'as_fn_exit 1' 1 2 13 15
-}
-# Create a (secure) tmp directory for tmp files.
-
-{
- tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
- test -d "$tmp"
-} ||
-{
- tmp=./conf$$-$RANDOM
- (umask 077 && mkdir "$tmp")
-} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
-ac_tmp=$tmp
-
-# Set up the scripts for CONFIG_FILES section.
-# No need to generate them if there are no CONFIG_FILES.
-# This happens for instance with `./config.status config.h'.
-if test -n "$CONFIG_FILES"; then
-
-
-ac_cr=`echo X | tr X '\015'`
-# On cygwin, bash can eat \r inside `` if the user requested igncr.
-# But we know of no other shell where ac_cr would be empty at this
-# point, so we can use a bashism as a fallback.
-if test "x$ac_cr" = x; then
- eval ac_cr=\$\'\\r\'
-fi
-ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
-if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
- ac_cs_awk_cr='\\r'
-else
- ac_cs_awk_cr=$ac_cr
-fi
-
-echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
-_ACEOF
-
-
-{
- echo "cat >conf$$subs.awk <<_ACEOF" &&
- echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
- echo "_ACEOF"
-} >conf$$subs.sh ||
- as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
-ac_delim='%!_!# '
-for ac_last_try in false false false false false :; do
- . ./conf$$subs.sh ||
- as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-
- ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
- if test $ac_delim_n = $ac_delim_num; then
- break
- elif $ac_last_try; then
- as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
- else
- ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
- fi
-done
-rm -f conf$$subs.sh
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
-_ACEOF
-sed -n '
-h
-s/^/S["/; s/!.*/"]=/
-p
-g
-s/^[^!]*!//
-:repl
-t repl
-s/'"$ac_delim"'$//
-t delim
-:nl
-h
-s/\(.\{148\}\)..*/\1/
-t more1
-s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
-p
-n
-b repl
-:more1
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t nl
-:delim
-h
-s/\(.\{148\}\)..*/\1/
-t more2
-s/["\\]/\\&/g; s/^/"/; s/$/"/
-p
-b
-:more2
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t delim
-' <conf$$subs.awk | sed '
-/^[^""]/{
- N
- s/\n//
-}
-' >>$CONFIG_STATUS || ac_write_fail=1
-rm -f conf$$subs.awk
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACAWK
-cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
- for (key in S) S_is_set[key] = 1
- FS = ""
-
-}
-{
- line = $ 0
- nfields = split(line, field, "@")
- substed = 0
- len = length(field[1])
- for (i = 2; i < nfields; i++) {
- key = field[i]
- keylen = length(key)
- if (S_is_set[key]) {
- value = S[key]
- line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
- len += length(value) + length(field[++i])
- substed = 1
- } else
- len += 1 + keylen
- }
-
- print line
-}
-
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
- sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
-else
- cat
-fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
- || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
-_ACEOF
-
-# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
-# ${srcdir} and @srcdir@ entries 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[ ]*=[ ]*/{
-h
-s///
-s/^/:/
-s/[ ]*$/:/
-s/:\$(srcdir):/:/g
-s/:\${srcdir}:/:/g
-s/:@srcdir@:/:/g
-s/^:*//
-s/:*$//
-x
-s/\(=[ ]*\).*/\1/
-G
-s/\n//
-s/^[^=]*=[ ]*$//
-}'
-fi
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-fi # test -n "$CONFIG_FILES"
-
-
-eval set X " :F $CONFIG_FILES "
-shift
-for ac_tag
-do
- case $ac_tag in
- :[FHLC]) ac_mode=$ac_tag; continue;;
- esac
- case $ac_mode$ac_tag in
- :[FHL]*:*);;
- :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
- :[FH]-) ac_tag=-:-;;
- :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
- esac
- ac_save_IFS=$IFS
- IFS=:
- set x $ac_tag
- IFS=$ac_save_IFS
- shift
- ac_file=$1
- shift
-
- case $ac_mode in
- :L) ac_source=$1;;
- :[FH])
- ac_file_inputs=
- for ac_f
- do
- case $ac_f in
- -) ac_f="$ac_tmp/stdin";;
- *) # Look for the file first in the build tree, then in the source tree
- # (if the path is not absolute). The absolute path cannot be DOS-style,
- # because $ac_f cannot contain `:'.
- test -f "$ac_f" ||
- case $ac_f in
- [\\/$]*) false;;
- *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
- esac ||
- as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
- esac
- case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
- as_fn_append ac_file_inputs " '$ac_f'"
- done
-
- # 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. */
- configure_input='Generated from '`
- $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
- `' by configure.'
- if test x"$ac_file" != x-; then
- configure_input="$ac_file. $configure_input"
- { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
-$as_echo "$as_me: creating $ac_file" >&6;}
- fi
- # Neutralize special characters interpreted by sed in replacement strings.
- case $configure_input in #(
- *\&* | *\|* | *\\* )
- ac_sed_conf_input=`$as_echo "$configure_input" |
- sed 's/[\\\\&|]/\\\\&/g'`;; #(
- *) ac_sed_conf_input=$configure_input;;
- esac
-
- case $ac_tag in
- *:-:* | *:-) cat >"$ac_tmp/stdin" \
- || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
- esac
- ;;
- esac
-
- ac_dir=`$as_dirname -- "$ac_file" ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$ac_file" : 'X\(//\)[^/]' \| \
- X"$ac_file" : 'X\(//\)$' \| \
- X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$ac_file" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- as_dir="$ac_dir"; as_fn_mkdir_p
- ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
- # A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
- esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
- .) # We are building in place.
- ac_srcdir=.
- ac_top_srcdir=$ac_top_builddir_sub
- ac_abs_top_srcdir=$ac_pwd ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir
- ac_abs_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_build_prefix$srcdir
- ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
-
- case $ac_mode in
- :F)
- #
- # CONFIG_FILE
- #
-
- case $INSTALL in
- [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
- *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
- esac
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# If the template does not know about datarootdir, expand it.
-# FIXME: This hack should be removed a few years after 2.60.
-ac_datarootdir_hack=; ac_datarootdir_seen=
-ac_sed_dataroot='
-/datarootdir/ {
- p
- q
-}
-/@datadir@/p
-/@docdir@/p
-/@infodir@/p
-/@localedir@/p
-/@mandir@/p'
-case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
-*datarootdir*) ac_datarootdir_seen=yes;;
-*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
- ac_datarootdir_hack='
- s&@datadir@&$datadir&g
- s&@docdir@&$docdir&g
- s&@infodir@&$infodir&g
- s&@localedir@&$localedir&g
- s&@mandir@&$mandir&g
- s&\\\${datarootdir}&$datarootdir&g' ;;
-esac
-_ACEOF
-
-# Neutralize VPATH when `$srcdir' = `.'.
-# Shell code in configure.ac might set extrasub.
-# FIXME: do we really want to maintain this feature?
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_sed_extra="$ac_vpsub
-$extrasub
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-:t
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s|@configure_input@|$ac_sed_conf_input|;t t
-s&@top_builddir@&$ac_top_builddir_sub&;t t
-s&@top_build_prefix@&$ac_top_build_prefix&;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&@abs_top_builddir@&$ac_abs_top_builddir&;t t
-s&@INSTALL@&$ac_INSTALL&;t t
-$ac_datarootdir_hack
-"
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
- >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
-
-test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
- { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
- { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
- "$ac_tmp/out"`; test -z "$ac_out"; } &&
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined. Please make sure it is defined" >&5
-$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined. Please make sure it is defined" >&2;}
-
- rm -f "$ac_tmp/stdin"
- case $ac_file in
- -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
- *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
- esac \
- || as_fn_error $? "could not create $ac_file" "$LINENO" 5
- ;;
-
-
-
- esac
-
-done # for ac_tag
-
-
-as_fn_exit 0
-_ACEOF
-ac_clean_files=$ac_clean_files_save
-
-test $ac_write_fail = 0 ||
- as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
-
-
-# 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 || as_fn_exit 1
-fi
-
-#
-# CONFIG_SUBDIRS section.
-#
-if test "$no_recursion" != yes; then
-
- # Remove --cache-file, --srcdir, and --disable-option-checking arguments
- # so they do not pile up.
- ac_sub_configure_args=
- ac_prev=
- eval "set x $ac_configure_args"
- shift
- for ac_arg
- do
- if test -n "$ac_prev"; then
- ac_prev=
- continue
- fi
- case $ac_arg in
- -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=*)
- ;;
- --config-cache | -C)
- ;;
- -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
- ac_prev=srcdir ;;
- -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
- ;;
- -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
- ac_prev=prefix ;;
- -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
- ;;
- --disable-option-checking)
- ;;
- *)
- case $ac_arg in
- *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- as_fn_append ac_sub_configure_args " '$ac_arg'" ;;
- esac
- done
-
- # Always prepend --prefix to ensure using the same prefix
- # in subdir configurations.
- ac_arg="--prefix=$prefix"
- case $ac_arg in
- *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- ac_sub_configure_args="'$ac_arg' $ac_sub_configure_args"
-
- # Pass --silent
- if test "$silent" = yes; then
- ac_sub_configure_args="--silent $ac_sub_configure_args"
- fi
-
- # Always prepend --disable-option-checking to silence warnings, since
- # different subdirs can have different --enable and --with options.
- ac_sub_configure_args="--disable-option-checking $ac_sub_configure_args"
-
- ac_popdir=`pwd`
- for ac_dir in : $subdirs; do test "x$ac_dir" = x: && continue
-
- # Do not complain, so a configure script can configure whichever
- # parts of a large source tree are present.
- test -d "$srcdir/$ac_dir" || continue
-
- ac_msg="=== configuring in $ac_dir (`pwd`/$ac_dir)"
- $as_echo "$as_me:${as_lineno-$LINENO}: $ac_msg" >&5
- $as_echo "$ac_msg" >&6
- as_dir="$ac_dir"; as_fn_mkdir_p
- ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
- # A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
- esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
- .) # We are building in place.
- ac_srcdir=.
- ac_top_srcdir=$ac_top_builddir_sub
- ac_abs_top_srcdir=$ac_pwd ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir
- ac_abs_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_build_prefix$srcdir
- ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
-
- cd "$ac_dir"
-
- # Check for guested configure; otherwise get Cygnus style configure.
- if test -f "$ac_srcdir/configure.gnu"; then
- ac_sub_configure=$ac_srcdir/configure.gnu
- elif test -f "$ac_srcdir/configure"; then
- ac_sub_configure=$ac_srcdir/configure
- elif test -f "$ac_srcdir/configure.in"; then
- # This should be Cygnus configure.
- ac_sub_configure=$ac_aux_dir/configure
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no configuration information is in $ac_dir" >&5
-$as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2;}
- ac_sub_configure=
- fi
-
- # The recursion is here.
- if test -n "$ac_sub_configure"; then
- # Make the cache file name correct relative to the subdirectory.
- case $cache_file in
- [\\/]* | ?:[\\/]* ) ac_sub_cache_file=$cache_file ;;
- *) # Relative name.
- ac_sub_cache_file=$ac_top_build_prefix$cache_file ;;
- esac
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&5
-$as_echo "$as_me: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&6;}
- # The eval makes quoting arguments work.
- eval "\$SHELL \"\$ac_sub_configure\" $ac_sub_configure_args \
- --cache-file=\"\$ac_sub_cache_file\" --srcdir=\"\$ac_srcdir\"" ||
- as_fn_error $? "$ac_sub_configure failed for $ac_dir" "$LINENO" 5
- fi
-
- cd "$ac_popdir"
- done
-fi
-if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
-$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
-fi
-
diff --git a/winsup/configure.ac b/winsup/configure.ac
deleted file mode 100755
index 43b95c5ce..000000000
--- a/winsup/configure.ac
+++ /dev/null
@@ -1,44 +0,0 @@
-dnl Autoconf configure script for Cygwin.
-dnl Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2006, 2009, 2010,
-dnl 2011, 2012, 2013, 2014 Red Hat, Inc.
-dnl
-dnl This file is part of Cygwin.
-dnl
-dnl This software is a copyrighted work licensed under the terms of the
-dnl Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-dnl details.
-dnl
-dnl Process this file with autoconf to produce a configure script.
-
-AC_PREREQ(2.59)dnl
-AC_INIT([Cygwin toplevel], 0,
- cygwin@cygwin.com, cygwin, https://cygwin.com)
-AC_CONFIG_SRCDIR(Makefile.in)
-AC_CONFIG_AUX_DIR(..)
-
-. ${srcdir}/configure.cygwin
-
-AC_PROG_INSTALL
-AC_NO_EXECUTABLES
-AC_CANONICAL_SYSTEM
-
-AC_PROG_CC
-AC_PROG_CXX
-AC_PROG_CPP
-AC_LANG(C)
-
-AC_WINDOWS_HEADERS
-AC_WINDOWS_LIBS
-
-AC_LANG(C++)
-
-AC_CYGWIN_INCLUDES
-
-AC_CONFIG_SUBDIRS(cygwin utils cygserver lsaauth doc)
-INSTALL_LICENSE="install-license"
-
-AC_SUBST(INSTALL_LICENSE)
-
-AC_PROG_MAKE_SET
-
-AC_OUTPUT(Makefile)
diff --git a/winsup/configure.cygwin b/winsup/configure.cygwin
deleted file mode 100755
index 06df92211..000000000
--- a/winsup/configure.cygwin
+++ /dev/null
@@ -1,48 +0,0 @@
-addto_CPPFLAGS() {
- local f
- for f; do
- case " $CPPFLAGS " in
- *\ $f\ *) ;;
- *) CPPFLAGS="$CPPFLAGS $f" ;;
- esac
- done
-}
-
-realdirpath() {
- [ -z "$1" ] && return 1
- (cd "$1" 2>/dev/null && pwd)
- if test $? -ne 0; then
- return 1
- else
- return 0
- fi
-}
-
-for d in . .. ../.. ../../..; do
- if test -e "$srcdir/$d/configure.cygwin"; then
- winsup_srcdir=$(realdirpath "$srcdir/$d")
- break
- fi
-done
-
-if test -z "$winsup_srcdir"; then
- echo "cannot find directory containing configure.cygwin" 1>&2
- exit 1
-fi
-
-case "$srcdir" in
- */newlib*) lookfor=newlib ;;
- */winsup*) lookfor=winsup ;;
- *) lookfor=. ;;
-esac
-
-for d in . .. ../.. ../../..; do
- if test -d "$d/$lookfor"; then
- target_builddir=$(realdirpath "$d")
- break
- fi
-done
-
-if test -z "$target_builddir"; then
- target_builddir=$(pwd)
-fi
diff --git a/winsup/cygserver/ChangeLog b/winsup/cygserver/ChangeLog
deleted file mode 100644
index 0b08894d2..000000000
--- a/winsup/cygserver/ChangeLog
+++ /dev/null
@@ -1,804 +0,0 @@
-2014-11-06 Florian Friesdorf <flo@chaoflow.net>
-
- * cygserver-config: Add -N option to allow different service name.
-
-2014-08-15 Corinna Vinschen <corinna@vinschen.de>
-
- * configure.ac: Convert to new AC_INIT style.
- * configure: Regenerate.
-
-2014-06-23 Corinna Vinschen <corinna@vinschen.de>
-
- * bsd_helper.cc (ipcexit_creat_hookthread): Delete shs in another error
- case to make Coverity really happy (CID 59993).
-
-2014-06-23 Corinna Vinschen <corinna@vinschen.de>
-
- * client.cc: Throughout, fix debug output of signed byte count value.
-
-2014-05-19 Corinna Vinschen <corinna@vinschen.de>
-
- * bsd_mutex.cc (msleep_sync_array::~msleep_sync_array): New destructor
- to make Coverity happy (CID 59838).
-
-2014-05-19 Corinna Vinschen <corinna@vinschen.de>
-
- * bsd_helper.cc (ipcexit_creat_hookthread): Delete shs to make
- Coverity happy (CID 59993).
- * transport_pipes.cc (transport_layer_pipes::listen): Make listen_pipe
- and connect_pipe statics to make Coverity happy (CID 60010/60011).
-
-2014-04-16 Corinna Vinschen <corinna@vinschen.de>
-
- * pwdgrp.cc (client_request_pwdgrp::pwd_serve): Add 1 to the message
- length to account for the trailing NUL.
-
-2014-04-16 Corinna Vinschen <corinna@vinschen.de>
-
- * cygserver-config: Use numeric id 18 instead of "system" in chown.
-
-2014-04-07 Corinna Vinschen <corinna@vinschen.de>
-
- * process.cc (process::process): Only notice that signal_arrived is
- NULL in debug output.
-
-2014-03-12 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (OBJS): Add pwdgrp.o.
- * client.cc (client_request::handle_request): Handle
- CYGSERVER_REQUEST_PWDGRP message.
- * pwdgrp.cc: New file implementing CYGSERVER_REQUEST_PWDGRP.
-
-2014-03-12 Corinna Vinschen <corinna@vinschen.de>
-
- * Throughout, fix format specifiers in debug statements to accommodate
- x86_64.
-
-2014-03-06 Corinna Vinschen <corinna@vinschen.de>
-
- * setpwd.cc (client_request_setpwd::serve): Use RtlSecureZeroMemory to
- delete password from memory.
-
-2013-11-06 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * configure.ac: Detect windows headers/libs after we've figured out the
- C compiler.
- * configure: Regenerate.
- * aclocal.m4: Regenerate.
-
-2013-04-23 Corinna Vinschen <corinna@vinschen.de>
-
- * Merge in cygwin-64bit-branch. See ChangeLog.64bit for details.
-
-2012-11-27 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * Makefile.in: Remove old from CFLAGS and move C*FLAGS so that they can
- be manipulated by Makefile.common.
-
-2012-11-26 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * configure.ac: Rename from configure.in.
- * configure.in: Delete.
- * configure: Regenerate.
-
-2012-11-26 Corinna Vinschen <corinna@vinschen.de>
-
- * transport_pipes.cc (pipe_instance_lock_once): Remove.
- (pipe_instance_lock): Remove.
- (pipe_instance): Remove.
- (initialise_pipe_instance_lock): Remove.
- (transport_layer_pipes::accept): Drop entire pipe_instance handling.
- (transport_layer_pipes::close): Ditto.
-
-2012-11-23 Corinna Vinschen <corinna@vinschen.de>
-
- * cygserver.cc (main): Call listen right after creating the
- transport.
- * transport_pipes.cc (transport_layer_pipes::listen): Create
- first instance of the named pipe here. Connect the client side
- to block it for further use by the system.
- (transport_layer_pipes::accept): Don't handle first pipe instance
- here. Change debug output accordingly.
-
-2012-11-23 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * Makefile.in: Use /bin/mkdir to make install directories.
-
-2012-11-23 Corinna Vinschen <corinna@vinschen.de>
-
- * sysv_sem.cc (semundo_clear): Move condition to break from
- inner loop to the right spot.
-
-2012-11-12 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * Makefile.in: Revamp for new configury.
- * configure.in: Revamp for new configury.
- * aclocal.m4: Regenerate.
- * configure: Ditto.
- * autogen.sh: New script.
-
-2012-10-25 Corinna Vinschen <corinna@vinschen.de>
-
- * bsd_helper.cc (adjust_identity_info): Fix typo in log message.
-
-2012-07-19 Corinna Vinschen <corinna@vinschen.de>
-
- * woutsup.h: Just include winlean.h.
-
-2012-03-19 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * client.cc: Revert sigproc.h inclusion since it was fixed elsewhere.
-
-2012-03-19 Corinna Vinschen <corinna@vinschen.de>
-
- * client.cc: Include sigproc.h if __INSIDE_CYGWIN__ is defined.
-
-2012-03-19 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * client.cc: Remove unneeded #include "sigproc.h".
-
-2012-02-14 Corinna Vinschen <corinna@vinschen.de>
-
- * transport_pipes.cc (transport_layer_pipes::transport_layer_pipes):
- Always use cygwin_internal to fetch installation key.
-
-2011-10-10 Corinna Vinschen <corinna@vinschen.de>
-
- * cygserver.cc (print_usage): Align output to utilities in utils
- directory.
- (print_version): Ditto.
-
-2011-08-18 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * sysv_shm.cc (ACCESSPERMS): Remove to fix redefined warning, as
- this is now defined in <sys/stat.h>.
-
-2011-02-07 Corinna Vinschen <corinna@vinschen.de>
-
- * configure.in: Remove AC_ALLOCA test and test for __builtin_memset.
- * configure: Regenerate.
-
-2010-04-19 Christopher Faylor <me+cygwin@cgf.cx>
-
- * transport_pipes.cc: Include ntdef.h to accommodate cygerrno.h.
-
-2009-11-16 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (cygserver.exe): Link with -static to avoid linking
- against cygstdc++-6.dll due to references to __cxa_pure_virtual.
-
-2009-11-06 Corinna Vinschen <corinna@vinschen.de>
-
- * transport_pipes.cc (transport_layer_pipes::transport_layer_pipes):
- Check cygwin_internal for returning 0 rather than for != 0.
- (transport_layer_pipes::accept): Add debug output.
- (transport_layer_pipes::connect): Ditto.
-
-2009-10-31 Corinna Vinschen <corinna@vinschen.de>
-
- * transport_pipes.h (PIPE_NAME_PREFIX): New define.
- (PIPE_NAME_SUFFIX): Ditto.
- (class transport_layer_pipes): Convert _pipe_name from char pointer
- to wchar_t array.
- * transport_pipes.cc (transport_layer_pipes::transport_layer_pipes):
- Accommodate the fact that _pipe_name is a wchar_t array, rather than
- a char pointer.
- (transport_layer_pipes::transport_layer_pipes): Initialize _pipe_name
- with variable pipe name based in installation key fetched from Cygwin
- DLL.
- (transport_layer_pipes::accept): Call CreateNamedPipeW explicitely.
- (transport_layer_pipes::connect): Call CreateFileW and WaitNamedPipeW
- explicitely.
-
-2009-08-18 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (CXXFLAGS): Allow override.
-
-2009-03-26 Yaakov Selkowitz <yselkowitz@cygwin.com>
-
- * README: Remove "How to use" section, as CYGWIN="server" is
- no longer required.
-
-2009-03-20 Corinna Vinschen <corinna@vinschen.de>
-
- * cygserver-config: Remove misleading text describing the
- "CYGWIN=server" setting for the client.
-
-2009-02-23 Sjors Gielen <mailinglist@dazjorz.com>
-
- * Makefile.in: Add DESTDIR functionality.
-
-2009-01-21 Corinna Vinschen <corinna@vinschen.de>
-
- * client.cc (allow_server): Remove variable.
- (client_request_get_version::client_request_get_version): Drop checking
- allow_server.
-
-2009-01-03 Christopher Faylor <me+cygwin@cgf.cx>
-
- * Makefile.in (CFLAGS): Look in cygwin's build directory for header
- files.
-
-2008-12-15 Corinna Vinschen <corinna@vinschen.de>
-
- * setpwd.cc (client_request_setpwd::serve): Don't treat removing
- non-existant private data as error.
-
-2008-12-15 Corinna Vinschen <corinna@vinschen.de>
-
- * setpwd.cc (client_request_setpwd::serve): Explicitely erase password
- buffer content after usage.
-
-2008-11-26 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (OBJS): Add setpwd.o.
- * README: Explain new service to store passwords in the LSA registry
- area.
- * bsd_helper.cc (get_token_info): Make externally available.
- * bsd_helper.h (get_token_info): Declare.
- * client.cc (client_request::handle_request): Add case for
- CYGSERVER_REQUEST_SETPWD request.
- * setpwd.cc: New file implementing the CYGSERVER_REQUEST_SETPWD
- request.
-
-2008-10-30 Christopher Faylor <me+cygwin@cgf.cx>
-
- * Makefile.in: Use -static-libgcc when creating cygserver.exe.
-
-2008-04-30 Corinna Vinschen <corinna@vinschen.de>
-
- * sysv_msg.cc: Add fix from upstream version 1.65.
- (msgsnd): Call msleep with timeout value. Handle EWOULDBLOCK. Make
- sure it's clear from where msleep has been called in debug output.
- (msgrcv): Make sure it's clear from where msleep has been called in
- debug output.
-
-2008-02-06 Corinna Vinschen <corinna@vinschen.de>
-
- * bsd_helper.cc: Replace %E __small_printf format specifier with %lu
- and call to GetLastError throughout.
- * bsd_mutex.cc: Ditto.
- * sysv_sem.cc (semget): Replace %X __small_printf format specifier
- with %llx.
-
-2008-02-06 Corinna Vinschen <corinna@vinschen.de>
-
- Remove dependency from Cygwin internal code.
- * Makefile.in (CYGWIN_OBJS): Remove smallprint.o.
- (cygserver.exe): Remove strfuncs.o
- (strfuncs.o): Drop rule.
- * bsd_log.cc (_vlog): Use snprintf/vsnprintf instead of
- __small_sprintf/__small_vsprintf.
- * sysv_sem.cc (seminit): Use sys_malloc instead of malloc. Use
- snprintf instead of __small_sprintf.
- (semunload): Free the above allocated sema_mtx names here.
-
-2008-02-03 Brian Dessent <brian@dessent.net>
-
- * Makefile.in: Don't link strfuncs.o from the Cygwin build dir.
- Build it again with __OUTSIDE_CYGWIN__ defined.
-
-2007-11-05 Corinna Vinschen <corinna@vinschen.de>
-
- * bsd_helper.cc (tunable_params): Add kern.ipc.shm_allow_removed as
- bool parameter.
- * cygserver.conf: Add a description for the kern.ipc.shm_allow_removed
- parameter.
- * sysv_shm.cc (shminit): Set shm_allow_removed variable according to
- kern.ipc.shm_allow_removed setting.
-
-2007-08-02 Corinna Vinschen <corinna@vinschen.de>
-
- * smallprint.c: Remove.
-
-2007-08-02 Christopher Faylor <me+cygwin@cgf.cx>
-
- * Makefile.in: Add -lntdll to link line.
- (CYGWIN_OBJS): Include strfuncs.o.
-
-2007-08-02 Corinna Vinschen <corinna@vinschen.de>
-
- * smallprint.c: New file.
- * Makefile.in (OBJS): Add smallprint.o.
- (CYGWIN_OBJS): Remove smallprint.o from Cygwin dir.
-
-2007-07-21 Corinna Vinschen <corinna@vinschen.de>
-
- * bsd_helper.cc: Drop unnecessary security.h include.
-
-2007-02-23 Corinna Vinschen <corinna@vinschen.de>
-
- Throughout remove using wincap.
- * Makefile.in (OBJS): Remove wincap.o.
- * README: Don't mention 9x.
- * bsd_mutex.cc (_mtx_unlock): Drop checking for 9x error codes.
- * cygserver.cc (server_submission_loop::request_loop): Add FIXME
- comment.
- * wincap.cc: Remove.
- * wincap.h: Remove.
- * woutsup.h: Don't include wincap.h.
-
-2007-02-22 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (OBJS): Drop transport_sockets.o.
- * sysv_shm.cc (shmget_allocate_segment): Remove spurious cast.
- * transport.cc: Don't include transport_sockets.h.
- (create_server_transport): Always create transport_layer_pipes.
- * transport_sockets.cc: Remove.
- * transport_sockets.h: Remove.
-
-2006-05-24 Christopher Faylor <cgf@timesys.com>
-
- * configure.in: Update to newer autoconf.
- (thanks to Steve Ellcey)
- * configure: Regenerate.
- * aclocal.m4: New file.
-
-2006-01-12 Corinna Vinschen <corinna@vinschen.de>
-
- * wincap.cc: New file.
- * wincap.h: New file.
- * Makefile.in: Accomodate having our own wincap implementation now.
-
-2006-01-09 Corinna Vinschen <corinna@vinschen.de>
-
- Check FreeBSD upstream changes and apply important patches.
- * sysv_sem.cc (__semctl): Check copyin return value (from 1.76).
- * sysv_shm.cc (shminit): Actually use the iterating variable in the
- for loop when trying to avoid overflow (from 1.102).
-
-2005-11-10 Corinna Vinschen <corinna@vinschen.de>
-
- * bsd_helper.cc (securityinit): New function. Move initialization
- of security related variables from ipcinit here.
- * bsd_helper.h (securityinit): Add prototype.
- * cygserver.cc (main): Call securityinit right after wincap.init.
-
-2005-11-10 Corinna Vinschen <corinna@vinschen.de>
-
- * bsd_log.cc (_vpanic): LOG_EMERG is overkill, use LOG_CRIT.
-
-2005-11-09 Corinna Vinschen <corinna@vinschen.de>
-
- * process.cc (process_cache::process): Fix maximum process condition.
-
-2005-10-24 Corinna Vinschen <corinna@vinschen.de>
-
- * README: Add description for new -p/--process-cache option.
- * bsd_helper.cc (default_tun_check): Add kern.srv.process_cache_size
- entry to tunable_params. Set max value of kern.srv.request_threads
- to 310.
- * cygserver.cc (SERVER_VERSION): Set to 1.20.
- (print_usage): Print usage of new parameter -p.
- (main): Add process cache parameter handling. Accomodate new max
- value of request threads.
- * cygserver.conf: Add kern.srv.process_cache_size tunable parameter.
- Accomodate new max value of kern.srv.request_threads.
- * process.cc: Fix a comment.
- (process_cache::process_cache): Add max process cache size parameter.
- Change _cache_add_trigger to manual reset event.
- (struct pcache_wait_t): New struct used as parameter to
- pcache_wait_thread.
- (pcache_wait_thread): New thread function used for threaded process
- cache.
- (process_cache::wait_for_processes): Use threaded waiting if number
- of processes to wait for is bigger than 62. Always check all processes
- to avoid race under heavy load.
- (process_cache::sync_wait_array): Remove useless assert. Reset
- _cache_add_trigger right at the start since it's manual reset now.
- Accomodate threaded waiting.
- * process.h (process_cache::process_cache): Add max_procs parameter.
- (process_cache::_max_process_count): New member.
- (process_cache::_wait_array: Raise to allow up to 5 wait threads.
- (process_cache::_process_array): Ditto.
-
-2005-08-08 Christopher Faylor <cgf@timesys.com>
-
- * cygserver.cc (main): Call wincap.init() earlier to avoid a NULL
- dereference.
-
-2005-06-14 Corinna Vinschen <corinna@vinschen.de>
-
- * sysv_sem.cc (semu_list): Define static to avoid gcc 4.x compiler
- warning.
-
-2005-04-08 Corinna Vinschen <corinna@vinschen.de>
-
- * bsd_mutex.cc (msleep_cnt): Remove.
- (msleep_max_cnt): Remove.
- (msleep_arr): Remove.
- (class msleep_sync_array): New class to encapsulate msleep/wakeup
- thread synchronization.
- (msleep_sync): New object pointer.
- (msleep_init): Initialize new msleep_sync object.
- (_mutex): Just call msleep_sync->enter() and msleep_sync->leave() for
- thread synchronization. Improve debug output a bit more.
- (wakeup): Just call msleep_sync->wakeup().
- (wakeup_all): Whitespace fix.
-
-2005-04-06 Corinna Vinschen <corinna@vinschen.de>
-
- * bsd_helper.cc (ipcexit_hookthread): Fix whitespace and handle leak.
- * bsd_mutex.cc: Include stdlib.h, sys/msg.h and sys/sem.h.
- (mtx_init): Initialize lock counter to 0.
- (_mtx_lock): Increment and log mutex lock counter.
- (mtx_owned): Add winpid argument. Return true only if mutex is
- actually owned by process winpid.
- (_mtx_assert): Add winpid argument accordingly.
- (_mtx_unlock): Log owner and lock count.
- (MSLEEP_MUTEX): Remove.
- (MSLEEP_SEM): Ditto.
- (MSLEEP_EVENT): Ditto.
- (msleep_event_name): Ditto.
- (msleep_cs): New global critical section.
- (msleep_cnt): New global variable indicating msleep record usage.
- (msleep_max_cnt): New global variable indicating msleep record size.
- (msleep_arr): New global pointer to msleep records.
- (msleep_init): Initialize msleep_cs. Allocate msleep_arr array.
- (_msleep): Rewrite using new msleep_cs/msleep_arr based thread
- synchronization. Don't be shy with debug output.
- (wakeup): Rewrite using new msleep_cs/msleep_arr based thread
- synchronization.
- * bsd_mutex.h (struct mtx): Add lock counter for better debugging.
- (mtx_owned): Declare with winpid argument.
- (_mtx_assert): Ditto.
- (mtx_assert): Define with winpid argument.
- * cygserver.cc (version): Remove.
- (SERVER_VERSION): New define, decoupling server version information
- from source code control system.
- (print_version): Simplify printing server version.
- * process.cc (process::process): Fix wrong bracketing (and handle leak).
- (process::~process): Only try to close _signal_arrived if valid.
- * sysv_sem.cc: Include sys/smallprint.h.
- (semundo_clear): Define with additional struct thread pointer argument.
- Accomodate throughout.
- (SEMUNDO_LOCKASSERT): Define with winpid argument. Accomodate
- throughout.
- (struct sem_undo): Define un_proc as pid_t on Cygwin. Accomodate
- throughout.
- (seminit): Improve debugging by adding the semid to the mutex name.
- (semget): Correctly print key value as 64 bit hex value in debug
- output.
- (semexit_myhook): Remove Cygwin specific unlocking of mutexes owned
- by exiting process. Keep semaphore global lock throughout whole
- function to avoid races.
- * sysv_shm.cc (GIANT_REQUIRED): Define empty on Cygwin. We know that
- Giant is locked.
-
-2005-04-01 Corinna Vinschen <corinna@vinschen.de>
-
- * bsd_mutex.cc (_msleep): Whitespace fix.
- * process.cc (process::process): Handle invalid signal_arrived values
- more gracefully.
-
-2004-12-30 Corinna Vinschen <corinna@vinschen.de>
-
- * bsd_mutex.cc: Include limits.h.
- (MSLEEP_MUTEX): New define for third parameter to msleep_event_name.
- (MSLEEP_SEM): Ditto.
- (MSLEEP_EVENT): Ditto.
- (msleep_event_name): Add third parameter to allow multiple
- synchronization objects per ident.
- (_msleep): Implement new synchronization technique to make sure
- that all threads have been woken up by a corresponding wakeup call.
- (wakeup): Ditto.
-
-2004-10-18 Corinna Vinschen <corinna@vinschen.de>
-
- * sysv_sem.cc: Redefine offsetof to circumvent build problems with
- gcc 3.4.
-
-2004-10-04 Corinna Vinschen <corinna@vinschen.de>
-
- * bsd_mutex.cc (_msleep): Simplify event creation. Revert change from
- 2004-08-24. It should be unnecessary now.
- * msg.cc (client_request_msg::serve): Release process critical
- section as early as possible.
- * sem.cc (client_request_sem::serve): Ditto.
- * shm.cc (client_request_shm::serve): Ditto.
- * process.cc: Use hold and release method calls instead of
- EnterCriticalSection/LeaveCriticalSection calls throughout.
- * process.h (_hold): Rename from hold. Take filename and linenumber
- parameter for logging. Define matching hold macro.
- (release): Ditto.
-
-2004-10-01 Corinna Vinschen <corinna@vinschen.de>
-
- * sysv_sem.cc: Update to FreeBSD version 1.69.
- 1.68: Reduce the overhead of semop() by using the kernel stack
- instead of malloc'd memory to store the operations array if it
- is small enough to fit.
- 1.69: Adjust the number of processes waiting on a semaphore properly
- if we're woken up in the middle of sleeping.
-
-2004-09-23 Corinna Vinschen <corinna@vinschen.de>
-
- * sysv_shm.cc (kern_shmat): Avoid compiler warning.
-
-2004-09-21 Corinna Vinschen <corinna@vinschen.de>
-
- * sysv_shm.cc (vm_object_reference): remove Cygwin specific define.
- (vm_map_find): Ditto.
- (vm_map_inherit): Ditto.
- (kern_shmat): On Cygwin, take shmaddr just as is. Don't call vm
- system calls on Cygwin. Add comment.
-
-2004-09-15 Corinna Vinschen <corinna@vinschen.de>
-
- Fix copyright throughout.
- Eliminate use of _impure_ptr outside Cygwin.
- * bsd_helper.cc: Include errno.h instead of cygerrno.h.
- * bsd_mutex.cc : Ditto.
- * client.cc: Ditto.
- * cygserver.cc: Ditto.
- * process.cc: Don't build functions inside Cygwin. Don't include
- cygerrno.h. Don't set errno.
- * transport_pipes.cc (SET_ERRNO): New define. Use througout.
- * transport_sockets.cc (SET_ERRNO): Ditto.
- (GET_ERRNO): Ditto.
-
-2004-09-06 Corinna Vinschen <corinna@vinschen.de>
-
- * bsd_mutex.cc (_msleep): Disable resetting event object for now.
-
-2004-08-31 Corinna Vinschen <corinna@vinschen.de>
-
- * sysv_shm.cc (kern_shmat): Add debug_printf's.
-
-2004-08-24 Corinna Vinschen <corinna@vinschen.de>
-
- * bsd_mutex.cc (_msleep): Release process object while waiting.
-
-2004-08-03 Corinna Vinschen <corinna@vinschen.de>
-
- * transport.cc (transport_layer_base::~transport_layer_base): Resurrect.
- * transport.h (transport_layer_base::~transport_layer_base): Ditto.
-
-2004-07-30 Corinna Vinschen <corinna@vinschen.de>
-
- * bsd_mutex.cc (_msleep): Reset event object and close it before
- entering mutex. Turn order of conditional for better readability.
-
-2004-07-26 Corinna Vinschen <corinna@vinschen.de>
-
- * cygserver.conf: Describe relation between shmmaxpgs and SHMMAX.
-
-2004-07-20 Corinna Vinschen <corinna@vinschen.de>
-
- * bsd_helper.cc: Whitespace fixes.
- * bsd_mutex.cc: Ditto.
-
-2004-07-19 Corinna Vinschen <corinna@vinschen.de>
-
- * transport.cc (transport_layer_base::~transport_layer_base): Remove.
- * transport.h (transport_layer_base::~transport_layer_base): Ditto.
-
-2004-07-19 Corinna Vinschen <corinna@vinschen.de>
-
- * bsd_mutex.cc (win_priority): Actually calculate p from priority.
-
-2004-06-03 Corinna Vinschen <corinna@vinschen.de>
-
- * shm.cc (shmget): Explicitely set td_retval[0] to -1 on error.
-
-2004-03-30 Corinna Vinschen <corinna@vinschen.de>
-
- * sysv_shm.cc (shmget): Allow to retrieve shared memory segments
- by shmid when IPC_KEY_IS_SHMID is set.
-
-2004-03-02 Corinna Vinschen <corinna@vinschen.de>
-
- * sysv_sem.cc (semundo_adjust): Check for process id instead of
- process struct pointer, which isn't fixed under Cygwin.
- (semexit_myhook): Ditto. Adjust debug print statements to print
- Cygwin and Windows PIDs instead of process pointer under Cygwin.
-
-2004-02-07 Corinna Vinschen <corinna@vinschen.de>
-
- * bsd_mutex.cc (win_priority): Move to msleep helper function section.
- (set_priority): Ditto. Fix formatting.
- (_msleep): Cleanup obj formatting. Rearrange obj order.
-
-2004-02-06 Corinna Vinschen <corinna@vinschen.de>
-
- * bsd_mutex.cc (_msleep): Handle PCATCH using signal_arrived event.
- * client.cc: Include sigproc.h.
- * msg.cc (client_request_msg::serve): Accomodate third parameter to
- process::process.
- * sem.cc (client_request_sem::serve): Ditto.
- * shm.cc (client_request_shm::serve): Ditto.
- * process.cc (process::process): Duplicate signal_arrived into
- Cygserver process space.
- (process::~process): Close _signal_arrived handle.
- (process_cache::process): Add signal_arrived handling.
- * process.h (process::process): Add signal_arrived parameter.
- (process:signal_arrived): New read accessor.
- (process:_signal_arrived): New member.
- (process_cache::process): Add signal_arrived parameter.
-
-2004-01-16 Corinna Vinschen <corinna@vinschen.de>
-
- * process.h (cleanup_routine::~cleanup_routine): Make pure virtual
- function to avoid miscompilation with certain versions of gcc.
- * process.cc (cleanup_routine::~cleanup_routine): Remove.
-
-2003-12-26 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in (CFLAGS, CXXFLAGS): Remove unneeded include.
- (CYGWIN_LIB): Delete.
- (cygserver.exe target): Add -L$(cygwin_build) to the link line to force
- linker to use build tree version of the library. Remove specific
- inclusion of libcygwin.a from the link line.
-
-2003-12-16 Corinna Vinschen <corinna@vinschen.de>
-
- * bsd_helper.cc (tunable_params): Add entries for kern.ipc.msgmnb and
- kern.ipc.msgtql. Raise max value for kern.ipc.msgseg to 65535.
- * cygserver.conf: Add kern.ipc.msgmnb and kern.ipc.msgtql.
- * sysv_msg.cc (msginit): Add TUNABLE_INT_FETCH call for
- kern.ipc.msgmnb and kern.ipc.msgtql.
-
-2003-11-26 Corinna Vinschen <corinna@vinschen.de>
-
- * cygserver.cc (main): Move call to ipcinit() up before installing
- any threads.
- * sysv_sem.cc: Update to FreeBSD version 1.67.
- (seminit): Initialize semaphore sequence numbers to 0.
-
-2003-11-26 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (CYGWIN_LIB): Variable pointing to libcygwin.a in
- the parallel cygwin dir.
- (cygserver.exe): Depend on and link against $CYGWIN_LIB.
-
-2003-11-25 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in (CXXFLAGS): Remove duplicate options handled in
- Makefile.common.
-
-2003-11-22 Corinna Vinschen <corinna@vinschen.de>
-
- * msg.cc (client_request_msg::serve): Add default case to msgop switch.
- * sem.cc (client_request_sem::serve): Add default case to semop switch.
- * shm.cc (client_request_shm::serve): Add default case to shmop switch.
-
-2003-11-21 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (install): Explicitely create directories. Install
- README to $(prefix)/share/doc/Cygwin.
- * README: New file.
-
-2003-11-21 Corinna Vinschen <corinna@vinschen.de>
-
- * cygserver.cc (print_usage): Fix scrambled output.
-
-2003-11-20 Corinna Vinschen <corinna@vinschen.de>
-
- * cygserver-config: Slightly modify printed message.
-
-2003-11-20 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (install): Install cygserver-config script to bindir.
- * cygserver-config: New script.
-
-2003-11-19 Corinna Vinschen <corinna@vinschen.de>
-
- Don't use safe_new but new throughout. Fix copyright dates
- throughout.
- * Makefile.in: Accomodate all new files and name changes.
- Add a *.d dependency.
- (sbindir): Add.
- (etcdir): Drop in favor of more appropriate sysconfdir definition.
- (sysconfdir): Add.
- (CXXFLAGS): Add -MMD flag. Add SYSCONFDIR definition.
- (.SUFFIXES): Add.
- (install): Add action items.
- (libclean): New target.
- (fullclean): Ditto.
- * bsd_helper.cc: New file.
- * bsd_helper.h: Ditto.
- * bsd_log.cc: Ditto.
- * bsd_log.h: Ditto.
- * bsd_mutex.cc: Ditto.
- * bsd_mutex.h: Ditto.
- * client.cc: Rearrange to build as less as possible if
- __INSIDE_CYGWIN__.
- (client_request::handle_request): Add Message Queue and Semaphore
- handling.
- * cygserver.cc: Rearrange to build as less as possible if
- __INSIDE_CYGWIN__. Use new debug/log/panic logging functions.
- (DEF_CONFIG_FILE): New definition for configuration file. Use
- throughout.
- (getfunc): Remove.
- (__cygserver__printf): Remove.
- (client_request_attach_tty::serve): Return error if impersonation
- fails.
- (print_usage): Pump up help message.
- (print_version): Add output of default configuration file.
- (main): Accommodate new options. Allow overwrite of threading options
- from config file. Call several new initialization functions. Drop
- printing dots. Don't define SIGHANDLE inline.
- * cygserver.conf: New file.
- * cygserver_process.h: Rename to process.h.
- * cygserver_transport.h: Rename to transport.h.
- * cygserver_transport_pipes.h: Rename to transport_pipes.h.
- * cygserver_transport_sockets.h: Rename to transport_sockets.h.
- * msg.cc: Rewrite.
- * sem.cc: Rewrite.
- * shm.cc: Rewrite.
- * sysv_msg.cc: New file, derived from FreeBSD version 1.52.
- * sysv_sem.cc: New file, derived from FreeBSD version 1.66.
- * sysv_shm.cc: New file, derived from FreeBSD version 1.89.
- * threaded_queue.cc: Rearrange to build as less as possible if
- __INSIDE_CYGWIN__.
- * transport.cc (transport_layer_base::impersonate_client): Define bool.
- (transport_layer_base::revert_to_self): Ditto.
- * transport.h (transport_layer_base::impersonate_client): Declare bool.
- (transport_layer_base::revert_to_self): Ditto.
- * transport_pipes.cc (transport_layer_pipes::transport_layer_pipes):
- Don't call init_security.
- (init_security): Remove.
- (transport_layer_pipes::accept): Use global sec_all_nih.
- (transport_layer_pipes::connect): Ditto.
- (transport_layer_pipes::impersonate_client): Define bool.
- (transport_layer_pipes::revert_to_self): Ditt.
- * transport_pipes.h (transport_layer_pipes::impersonate_client): Declare
- bool.
- (transport_layer_pipes::revert_to_self): Ditto.
- * woutsup.h: Include bsd compatibility headers.
- (SIGHANDLE): Add definition.
- (__cygserver__printf): Remove definition.
- (__noop_printf): Ditto.
- (debug_printf): Define using debug.
- (syscall_printf): Define using log.
- (system_printf): Ditto.
- Drop all other _printf definitions.
-
-2003-10-22 Corinna Vinschen <corinna@vinschen.de>
-
- Accomodate moving cygserver header files from cygwin/include/cygwin
- to here and cygwin dir.
- * Makefile.in (EXEEXT): Drop as unused.
- (EXEEXT_FOR_BUILD): Ditto.
- (all): Don't build libcygserver.a.
- * cygserver_process.h: Moved from cygwin/include/cygwin to here.
- * cygserver_transport.h: Ditto.
- * cygserver_transport_pipes.h: Ditto.
- * cygserver_transport_sockets.h: Ditto.
- * ipc.h: Moved to ../cygwin and renamed to cygserver_ipc.h.
- * shm.h: Moved to ../cygwin and renamed to cygserver_shm.h.
-
-2003-08-30 Christopher Faylor <cgf@redhat.com>
-
- * msg.cc: New file.
- * sem.cc: Ditto.
-
-2003-08-30 Christopher Faylor <cgf@redhat.com>
-
- * threaded_queue.h: New file.
-
-2003-08-25 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Build libcygserver.a.
- * client.cc: Rename allow_daemon to allow_server.
-
-2003-07-25 Christopher Faylor <cgf@redhat.com>
-
- * configure.in: Use 'install-sh -c'.
- * configure: Regenerate.
-
-2003-07-25 Christopher Faylor <cgf@redhat.com>
-
- * configure.in: Always use install-sh.
- * configure: Regenerate.
-
-2003-07-01 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in (OBJS): Move some more files from cygwin directory.
- * woutsup.h: Define _MT_SAFE.
-
-2003-07-01 Christopher Faylor <cgf@redhat.com>
-
- * configure.in: First pass.
- * Makefile.in: Ditto.
- * configure: Generate.
diff --git a/winsup/cygserver/ChangeLog.64bit b/winsup/cygserver/ChangeLog.64bit
deleted file mode 100644
index 7ab21bf54..000000000
--- a/winsup/cygserver/ChangeLog.64bit
+++ /dev/null
@@ -1,87 +0,0 @@
-2013-03-07 Corinna Vinschen <corinna@vinschen.de>
-
- * msg.cc (client_request_msg::serve): Revert change to refuse 64 bit
- processes on 32 bit systems.
- * sem.cc (client_request_sem::serve): Ditto.
- * shm.cc (client_request_shm::serve): Ditto.
-
-2013-03-01 Corinna Vinschen <corinna@vinschen.de>
-
- * client.cc: Revert changes to handle 32 bit processes on 64 bit
- systems.
- * sysv_msg.cc: Ditto.
- * sysv_sem.cc: Ditto.
- * sysv_shm.cc: Ditto.
-
-2013-02-13 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (cygserver.exe): Make cygwin_build a tooldir (-B instead
- of -L) to support bootstrapping.
-
-2013-02-09 Corinna Vinschen <corinna@vinschen.de>
-
- * configure: Regenerate to fix wrong ac_unique_file dependency.
-
-2012-12-06 Corinna Vinschen <corinna@vinschen.de>
-
- * sysv_msg.cc (conv_timespec32_to_timespec): Move implementation to
- cygserver_ipc.h.
- (conv_timespec_to_timespec32): Ditto.
- (conv_msqid_ds32_to_msqid_ds): Drop and move code into copyin_msqid_ds.
- (conv_msqid_ds_to_msqid_ds32): Drop and move code into copyout_msqid_ds.
- * sysv_sem.cc (copyin_semid_ds): New inline function on Cygwin.
- (copyout_semid_ds): Ditto.
- (__semctl): Use a conditional arg_size value rather than a fixed
- sizeof(real_arg) throughout, to accommodate 64/32 bit conversion.
- Use copyout_semid_ds and copyin_semid_ds to copy semid_ds
- structures from cygserver to client and vice versa on Cygwin.
- * sysv_shm.cc (copyin_shmid_ds): New inline function on Cygwin.
- (copyout_shmid_ds): Ditto.
- (shmctl): Use copyout_shmid_ds and copyin_shmid_ds to copy shmid_ds
- structures from cygserver to client and vice versa on Cygwin.
-
-2012-12-05 Corinna Vinschen <corinna@vinschen.de>
-
- * client.cc (client_request::header_t::header_t): Accommodate changes
- to msglen member.
- (client_request::handle_request): Ditto.
- (client_request::client_request): Zero out entire parameter block.
- Explain why.
- * sysv_msg.cc (conv_timespec32_to_timespec): New inline function on
- 64 bit Cygwin.
- (conv_timespec_to_timespec32): Ditto.
- (conv_msqid_ds32_to_msqid_ds): Ditto.
- (conv_msqid_ds_to_msqid_ds32): Ditto.
- (copyin_msqid_ds): New inline function on Cygwin.
- (copyout_msqid_ds): Ditto.
- (msgctl): Use copyout_msqid_ds and copyin_msqid_ds to copy msqid_ds
- structures from cygserver to client and vice versa on Cygwin.
- (msgsnd): Special case copyin of msg_type on 64 bit Cygwin.
- (msgrcv): Special case copyout of msg_type on 64 bit Cygwin.
-
-2012-12-04 Corinna Vinschen <corinna@vinschen.de>
-
- * bsd_helper.cc (tunable_int_fetch): Convert 2nd parameter to
- int32_t.
- * bsd_helper.h (tunable_int_fetch): Fix declaration accordingly.
- * bsd_log.cc (log_level): Change type to int32_t.
- * bsd_log.h (log_level): Fix declaration accordingly.
- * bsd_mutex.cc (msgmni): Change type to int32_t.
- (semmni): Ditto.
- * cygserver.cc: Fix debug output to be target agnostic. Use same
- style throughout.
- * msg.cc (client_request_msg::serve): Refuse to serve 64 bit processes
- from 32 bit cygserver.
- * sem.cc (client_request_sem::serve): Ditto.
- * shm.cc (client_request_shm::serve): Ditto.
- * sysv_shm.cc (shm_delete_mapping): Mark size as unused to make gcc
- happy.
- (kern_shmat): Ditto with flags.
- * process.h (class process): Change type of _cleaning_up member to LONG.
- * threaded_queue.h (class threaded_queue): Ditto for _workers_count.
-
-2012-08-14 Corinna Vinschen <corinna@vinschen.de>
-
- * configure.in: Add AC_NO_EXECUTABLES to allow bootstrap.
- * configure: Regenerate.
-
diff --git a/winsup/cygserver/Makefile.in b/winsup/cygserver/Makefile.in
deleted file mode 100644
index 816f5b3db..000000000
--- a/winsup/cygserver/Makefile.in
+++ /dev/null
@@ -1,94 +0,0 @@
-# Makefile for Cygwin server
-# Copyright 2003, 2006, 2007, 2008, 2009, 2014 Red Hat, Inc.
-
-# This file is part of Cygwin.
-
-# This software is a copyrighted work licensed under the terms of the
-# Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-# details.
-
-srcdir:=@srcdir@
-target_builddir:=@target_builddir@
-winsup_srcdir:=@winsup_srcdir@
-configure_args=@configure_args@
-
-export CC:=@CC@
-export CXX:=@CXX@
-
-CFLAGS:=@CFLAGS@
-override CXXFLAGS=@CXXFLAGS@
-override CXXFLAGS+=-MMD -D__OUTSIDE_CYGWIN__ -DSYSCONFDIR="\"$(sysconfdir)\""
-
-include ${srcdir}/../Makefile.common
-
-cygwin_build:=${target_builddir}/winsup/cygwin
-
-# environment variables used by ccwrap
-export CCWRAP_HEADERS:=$(dir ${srcdir})/cygwin ${cygwin_build}
-export CCWRAP_SYSTEM_HEADERS:=@cygwin_headers@ @newlib_headers@
-export CCWRAP_DIRAFTER_HEADERS:=@windows_headers@
-
-DESTDIR=
-prefix:=${DESTDIR}@prefix@
-exec_prefix:=${DESTDIR}@exec_prefix@
-bindir:=${DESTDIR}@bindir@
-sbindir:=${DESTDIR}@sbindir@
-sysconfdir:=${DESTDIR}@sysconfdir@
-program_transform_name:=@program_transform_name@
-
-INSTALL:=@INSTALL@
-INSTALL_PROGRAM:=@INSTALL_PROGRAM@
-INSTALL_DATA:=@INSTALL_DATA@
-
-AR:=@AR@
-
-
-OBJS:= cygserver.o client.o process.o msg.o sem.o shm.o threaded_queue.o \
- transport.o transport_pipes.o \
- bsd_helper.o bsd_log.o bsd_mutex.o \
- sysv_msg.o sysv_sem.o sysv_shm.o setpwd.o pwdgrp.o
-LIBOBJS:=${patsubst %.o,lib%.o,$(OBJS)}
-
-CYGWIN_OBJS:=$(cygwin_build)/version.o
-
-CYGWIN_LIB:=$(cygwin_build)/libcygwin.a
-
-all: cygserver.exe
-
-install: all cygserver.conf cygserver-config README
- /bin/mkdir -p $(DESTDIR)$(sbindir) $(DESTDIR)$(bindir) $(DESTDIR)$(sysconfdir)/defaults/etc $(DESTDIR)$(prefix)/share/doc/Cygwin
- $(INSTALL_PROGRAM) cygserver.exe $(DESTDIR)$(sbindir)/cygserver.exe
- $(INSTALL_PROGRAM) $(srcdir)/cygserver-config $(DESTDIR)$(bindir)/cygserver-config
- $(INSTALL_DATA) $(srcdir)/cygserver.conf $(DESTDIR)$(sysconfdir)/defaults/etc/cygserver.conf
- $(INSTALL_DATA) $(srcdir)/README $(DESTDIR)$(prefix)/share/doc/Cygwin/cygserver.README
-
-clean:
- rm -f $(OBJS) ${patsubst %.o,%.d,$(OBJS)} cygserver.exe
-
-libclean:
- rm -f $(LIBOBJS) ${patsubst %.o,%.d,$(LIBOBJS)} libcygserver.a
-
-fullclean: clean libclean
-
-cygserver.exe: $(CYGWIN_LIB) $(OBJS) $(CYGWIN_OBJS)
- $(CXX) -o $@ ${wordlist 2,999,$^} -static -static-libgcc -B$(cygwin_build) -lntdll
-
-$(cygwin_build)/%.o: $(cygwin_source)/%.cc
- @$(MAKE) -C $(@D) $(@F)
-
-$(cygwin_build)/%.o: $(cygwin_source)/%.c
- @$(MAKE) -C $(@D) $(@F)
-
-Makefile: Makefile.in configure
- ./config.status
-
-lib%.o: %.cc
- ${filter-out -D__OUTSIDE_CYGWIN__, $(COMPILE.cc)} -c -o $(@D)/${basename $(@F)}.o $<
-
-libcygserver.a: $(LIBOBJS)
- $(AR) crus $@ $?
-
-deps:=${wildcard *.d}
-ifneq (,$(deps))
-include $(deps)
-endif
diff --git a/winsup/cygserver/README b/winsup/cygserver/README
deleted file mode 100644
index b667cb08a..000000000
--- a/winsup/cygserver/README
+++ /dev/null
@@ -1,198 +0,0 @@
-What is Cygserver?
-
- Cygserver is a program which is designed to run as a background service.
- It provides Cygwin applications with services which require security
- arbitration or which need to persist while no other cygwin application
- is running.
-
- The implemented services so far are:
-
- - Control slave tty/pty handle dispersal from tty owner to other
- processes without compromising the owner processes' security.
- - XSI IPC Message Queues.
- - XSI IPC Semaphores.
- - XSI IPC Shared Memory.
- - Allows non-privileged users to store obfuscated passwords in the
- registry to be used for setuid(2) to create user tokens with network
- credentials. This service is used by `passwd -R'. Using the stored
- passwords in setuid(2) does not require running cygserver. The
- registry storage is the same as Windows uses to store passwords for
- accounts running Windows services.
-
-
-Cygserver command line options:
-
- Options to Cygserver take the normal UNIX-style `-X' or `--longoption' form.
- Nearly all options have a counterpart in the configuration file (see below)
- so setting them on the command line isn't really necessary. Command line
- options override settings from the Cygserver configuration file.
-
- The one-character options are prepended by a single dash, the long variants
- are prepended with two dashes. Arguments to options are marked in angle
- brackets below. These are not part of the actual syntax but are used only to
- denote the arguments. Note that all arguments are required. Cygserver
- has no options with optional arguments.
-
- The options recognized are:
-
- -f, --config-file <file>
-
- Use <file> as configuration file instead of the default configuration
- line. The default configuration file is /etc/cygserver.conf, typically.
- The --help and --version options will print the default configuration
- pathname.
-
- This option has no counterpart in the configuration file, for obvious
- reasons.
-
- -c, --cleanup-threads <num>
-
- Number of threads started to perform cleanup tasks. Default is 2.
- Configuration file option: kern.srv.cleanup_threads
-
- -r, --request-threads <num>
-
- Number of threads started to serve application requests. Default is 10.
- The -c and -r options can be used to play with Cygserver's performance
- under heavy load conditions or on slow machines.
- Configuration file option: kern.srv.request_threads
-
- -p, --process-cache <num>
-
- Number of processes which can connect concurrently to cygserver.
- Default is 62. Each process connected to cygserver is a synchronization
- object which has to be maintained. The data structure to maintain these
- processes is the so-called "process cache". In theory, an arbitrary
- number of processes could connect to cygserver, but due to the need to
- synchronize, the higher the number of connected processes, the more
- synchronization overhead exists. By using this option, you can set an
- upper limit to the synchronization effort. If more than 62 processes
- try to connect to cygserver concurrently, two additional synchronization
- threads are necessary, and one for each further 62 concurrent
- processes. So, useful values for the --process-cache option are 62, 124,
- 186, 248, 310. 310 is the maximum value.
- Configuration file option: kern.srv.process_cache_size
-
- NOTE: The number of child processes of a single parent process is limited
- to 256. So in case of taking advantage of a process cache size beyond 256,
- keep in mind that not all of these processes can be child processes of one
- single parent process.
-
- -d, --debug
-
- Log debug messages to stderr. These will clutter your stderr output with
- a lot of information, typically only useful to developers.
-
- -e, --stderr
-
- Force logging to stderr. This is the default if stderr is connected to
- a tty. Otherwise, the default is logging to the system log. By using
- the -e, -E, -y, -Y options (or the appropriate settings in the
- configuration file), you can explicitely set the logging output as you
- like, even to both, stderr and syslog.
- Configuration file option: kern.log.stderr
-
- -E, --no-stderr
-
- Don't log to stderr. Configuration file option: kern.log.stderr
-
- -y, --syslog
-
- Force logging to the system log. This is the default, if stderr is not
- connected to a tty, e. g. redirected to a file.
-
- -Y, --no-syslog
-
- Don't log to syslog. Configuration file option: kern.log.syslog
-
- -l, --log-level <level>
-
- Set the verbosity level of the logging output. Valid values are between
- 1 and 7. The default level is 6, which is relatively chatty. If you set
- it to 1, you will get only messages which are printed under severe conditions,
- which will result in stopping Cygserver itself.
- Configuration file option: kern.log.level
-
- -m, --no-sharedmem
-
- Don't start XSI IPC Shared Memory support. If you don't need XSI IPC
- Shared Memory support, you can switch it off here.
- Configuration file option: kern.srv.sharedmem
-
- -q, --no-msgqueues
-
- Don't start XSI IPC Message Queues.
- Configuration file option: kern.srv.msgqueues
-
- -s, --no-semaphores
-
- Don't start XSI IPC Semaphores.
- Configuration file option: kern.srv.semaphores
-
- -S, --shutdown
-
- Shutdown a running daemon and exit. Other methods are sending a SIGHUP
- to the Cygserver PID or, if running as service under NT, calling
- `net stop cygserver' or `cygrunsrv -E cygserver'.
-
- -h, --help
-
- Output usage information and exit.
-
- -v, --version
-
- Output version information and exit.
-
-
-How to start Cygserver:
-
- Before you run Cygserver for the first time, you should run the
- /usr/bin/cygserver-config script once. It creates the default
- configuration file and, upon request, installs Cygserver as service
- when running under NT. The script only performs a default install,
- with no further options given to Cygserver when running as service.
- Due to the wide configurability by changing the configuration file,
- that's typically not necessary.
-
- It's best practice to run Cygserver as a service under LocalSystem
- account. This is the way it is installed for you by the
- /usr/bin/cygserver-config script.
-
-
-The Cygserver configuration file:
-
- Cygserver has many options, which allow to customize the server
- to your needs. Customization is accomplished by editing the configuration
- file, which is by default /etc/cygserver.conf. This file is read only
- once on startup of Cygserver. There's no option to re-read the file on
- runtime by, say, sending a signal to Cygserver.
-
- The configuration file determines how Cygserver operates. There are
- options which set the number of threads running in parallel, options
- for setting how and what to log and options to set various maximum
- values for the IPC services.
-
- The default configuration file delivered with Cygserver is installed
- to /etc/defaults/etc. The /usr/bin/cygserver-config script copies it to
- /etc, giving you the option to overwrite an already existing file or to
- leave it alone. Therefore, the /etc file is safe to be changed by you,
- since it will not be overwritten by a later update installation.
-
- The default configuration file contains many comments which describe
- everything needed to understand the settings. A comment at the start of the
- file describes the syntax rules for the file. The default options are shown
- in the file but are commented out.
-
- It is generally a good idea to uncomment only options which you intend to
- change from the default values. Since reading the options file on Cygserver
- startup doesn't take much time, it's also considered good practice to keep
- all other comments in the file. This keeps you from searching for clues
- in other sources.
-
-
-If you have problems with Cygserver, or you have found a bug, or you
-think you have found a bug, or you don't understand configuration file
-options, the mailing list <cygwin@cygwin.com> is the right place to ask
-questions.
-
-Have fun!
diff --git a/winsup/cygserver/aclocal.m4 b/winsup/cygserver/aclocal.m4
deleted file mode 100644
index 5bf14e574..000000000
--- a/winsup/cygserver/aclocal.m4
+++ /dev/null
@@ -1,98 +0,0 @@
-# generated automatically by aclocal 1.11.6 -*- Autoconf -*-
-
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
-# Inc.
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-dnl This provides configure definitions used by all the cygwin
-dnl configure.in files.
-
-AC_DEFUN([AC_WINDOWS_HEADERS],[
-AC_ARG_WITH(
- [windows-headers],
- [AS_HELP_STRING([--with-windows-headers=DIR],
- [specify where the windows includes are located])],
- [test -z "$withval" && AC_MSG_ERROR([must specify value for --with-windows-headers])]
-)
-])
-
-AC_DEFUN([AC_WINDOWS_LIBS],[
-AC_ARG_WITH(
- [windows-libs],
- [AS_HELP_STRING([--with-windows-libs=DIR],
- [specify where the windows libraries are located])],
- [test -z "$withval" && AC_MSG_ERROR([must specify value for --with-windows-libs])]
-)
-windows_libdir=$(realdirpath "$with_windows_libs")
-if test -z "$windows_libdir"; then
- windows_libdir=$(realdirpath $(${ac_cv_prog_CC:-$CC} -xc /dev/null -Wl,--verbose=1 -lntdll 2>&1 | sed -rn 's%^.*\s(\S+)/libntdll\..*succeeded%\1%p'))
- if test -z "$windows_libdir"; then
- AC_MSG_ERROR([cannot find windows library files])
- fi
-fi
-AC_SUBST(windows_libdir)
-]
-)
-
-AC_DEFUN([AC_CYGWIN_INCLUDES], [
-addto_CPPFLAGS -nostdinc
-: ${ac_cv_prog_CXX:=$CXX}
-: ${ac_cv_prog_CC:=$CC}
-
-cygwin_headers=$(realdirpath "$winsup_srcdir/cygwin/include")
-if test -z "$cygwin_headers"; then
- AC_MSG_ERROR([cannot find $winsup_srcdir/cygwin/include directory])
-fi
-
-newlib_headers=$(realdirpath $winsup_srcdir/../newlib/libc/include)
-if test -z "$newlib_headers"; then
- AC_MSG_ERROR([cannot find newlib source directory: $winsup_srcdir/../newlib/libc/include])
-fi
-newlib_headers="$target_builddir/newlib/targ-include $newlib_headers"
-
-if test -n "$with_windows_headers"; then
- if test -e "$with_windows_headers/windef.h"; then
- windows_headers="$with_windows_headers"
- else
- AC_MSG_ERROR([cannot find windef.h in specified --with-windows-headers path: $saw_windows_headers]);
- fi
-elif test -d "$winsup_srcdir/w32api/include/windef.h"; then
- windows_headers="$winsup_srcdir/w32api/include"
-else
- windows_headers=$(cd $($ac_cv_prog_CC -xc /dev/null -E -include windef.h 2>/dev/null | sed -n 's%^# 1 "\([^"]*\)/windef\.h".*$%\1%p' | head -n1) 2>/dev/null && pwd)
- if test -z "$windows_headers" -o ! -d "$windows_headers"; then
- AC_MSG_ERROR([cannot find windows header files])
- fi
-fi
-CC=$ac_cv_prog_CC
-CXX=$ac_cv_prog_CXX
-export CC
-export CXX
-AC_SUBST(windows_headers)
-AC_SUBST(newlib_headers)
-AC_SUBST(cygwin_headers)
-])
-
-AC_DEFUN([AC_CONFIGURE_ARGS], [
-configure_args=X
-for f in $ac_configure_args; do
- case "$f" in
- *--srcdir*) ;;
- *) configure_args="$configure_args $f" ;;
- esac
-done
-configure_args=$(/usr/bin/expr "$configure_args" : 'X \(.*\)')
-AC_SUBST(configure_args)
-])
-
-AC_SUBST(target_builddir)
-AC_SUBST(winsup_srcdir)
-
diff --git a/winsup/cygserver/autogen.sh b/winsup/cygserver/autogen.sh
deleted file mode 100755
index 87a0d9c06..000000000
--- a/winsup/cygserver/autogen.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh -e
-/usr/bin/aclocal --acdir=..
-/usr/bin/autoconf -f
-exec /bin/rm -rf autom4te.cache
diff --git a/winsup/cygserver/bsd_helper.cc b/winsup/cygserver/bsd_helper.cc
deleted file mode 100644
index 524817f1d..000000000
--- a/winsup/cygserver/bsd_helper.cc
+++ /dev/null
@@ -1,693 +0,0 @@
-/* bsd_helper.cc
-
- Copyright 2003, 2004, 2005, 2007, 2012, 2014 Red Hat Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-#ifdef __OUTSIDE_CYGWIN__
-#include "woutsup.h"
-#include <errno.h>
-#define _KERNEL 1
-#define __BSD_VISIBLE 1
-#include <sys/smallprint.h>
-#include <sys/cygwin.h>
-#include <sys/ipc.h>
-#include <sys/param.h>
-#include <sys/msg.h>
-#include <sys/queue.h>
-#include <malloc.h>
-#include <unistd.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <ctype.h>
-
-#include "cygserver.h"
-#include "process.h"
-#include "cygserver_ipc.h"
-#include "cygserver_msg.h"
-#include "cygserver_sem.h"
-#include "cygserver_shm.h"
-
-/*
- * Copy a piece of memory from the client process into the server process.
- * Returns an error code.
- */
-int
-win_copyin (struct thread *td, const void *client_src,
- void *server_tgt, size_t len)
-{
- if (!ReadProcessMemory (td->client->handle (), client_src, server_tgt,
- len, NULL))
- return cygwin_internal (CW_GET_ERRNO_FROM_WINERROR,
- GetLastError (), EINVAL);
- return 0;
-}
-
-/*
- * Copy a piece of memory from the server process into the client process.
- * Returns an error code.
- */
-int
-win_copyout (struct thread *td, const void *server_src,
- void *client_tgt, size_t len)
-{
- if (!WriteProcessMemory (td->client->handle (), client_tgt, server_src,
- len, NULL))
- return cygwin_internal (CW_GET_ERRNO_FROM_WINERROR,
- GetLastError (), EINVAL);
- return 0;
-}
-
-#define enter_critical_section(c) _enter_critical_section((c),__FILE__,__LINE__)
-static void
-_enter_critical_section (LPCRITICAL_SECTION pcs, const char *file, int line)
-{
- _log (file, line, LOG_DEBUG, "Try enter critical section(%p)", pcs);
- EnterCriticalSection (pcs);
- _log (file, line, LOG_DEBUG, "Entered critical section(%p)", pcs);
-}
-
-#define leave_critical_section(c) _leave_critical_section((c),__FILE__,__LINE__)
-static void
-_leave_critical_section (LPCRITICAL_SECTION pcs, const char *file, int line)
-{
- LeaveCriticalSection (pcs);
- _log (file, line, LOG_DEBUG, "Left critical section(%p)", pcs);
-}
-
-CRITICAL_SECTION ipcht_cs;
-
-struct ipc_hookthread_storage {
- HANDLE process_hdl;
- proc ipcblk;
-};
-
-struct ipc_hookthread {
- SLIST_ENTRY (ipc_hookthread) sht_next;
- HANDLE thread;
- DWORD winpid;
- struct vmspace vmspace;
-};
-static SLIST_HEAD (, ipc_hookthread) ipcht_list; /* list of hook threads */
-
-static HANDLE ipcexit_event;
-
-struct vmspace *
-ipc_p_vmspace (struct proc *proc)
-{
- struct vmspace *ret = NULL;
- ipc_hookthread *ipcht_entry;
- enter_critical_section (&ipcht_cs);
- SLIST_FOREACH (ipcht_entry, &ipcht_list, sht_next)
- {
- if (ipcht_entry->winpid == proc->winpid)
- {
- ret = proc->p_vmspace = &ipcht_entry->vmspace;
- break;
- }
- }
- leave_critical_section (&ipcht_cs);
- return ret;
-}
-
-static DWORD WINAPI
-ipcexit_hookthread (const LPVOID param)
-{
- ipc_hookthread_storage *shs = (ipc_hookthread_storage *) param;
- HANDLE obj[2] = { ipcexit_event, shs->process_hdl };
- switch (WaitForMultipleObjects (2, obj, FALSE, INFINITE))
- {
- case WAIT_OBJECT_0:
- /* Cygserver shutdown. */
- /*FALLTHRU*/
- case WAIT_OBJECT_0 + 1:
- /* Process exited. Call semexit_myhook to handle SEM_UNDOs for the
- exiting process and shmexit_myhook to keep track of shared
- memory. */
- if (Giant.owner == shs->ipcblk.winpid)
- mtx_unlock (&Giant);
- if (support_semaphores == TUN_TRUE)
- semexit_myhook (NULL, &shs->ipcblk);
- if (support_sharedmem == TUN_TRUE)
- {
- _mtx_lock (&Giant, shs->ipcblk.winpid, __FILE__, __LINE__);
- ipc_p_vmspace (&shs->ipcblk);
- shmexit_myhook (shs->ipcblk.p_vmspace);
- mtx_unlock (&Giant);
- }
- break;
- default:
- /* FIXME: Panic? */
- break;
- }
- CloseHandle (shs->process_hdl);
- ipc_hookthread *ipcht_entry, *sav_entry;
- enter_critical_section (&ipcht_cs);
- SLIST_FOREACH_SAFE (ipcht_entry, &ipcht_list, sht_next, sav_entry)
- {
- if (ipcht_entry->winpid == shs->ipcblk.winpid)
- {
- SLIST_REMOVE (&ipcht_list, ipcht_entry, ipc_hookthread, sht_next);
- CloseHandle (ipcht_entry->thread);
- delete ipcht_entry;
- }
- }
- leave_critical_section (&ipcht_cs);
- delete shs;
- return 0;
-}
-
-/* Deletes all pending hook threads. Called by ipcunload() which in turn
- is called by the cygserver main routine. */
-static void
-ipcexit_dispose_hookthreads (void)
-{
- SetEvent (ipcexit_event);
- ipc_hookthread *ipcht_entry;
- enter_critical_section (&ipcht_cs);
- SLIST_FOREACH (ipcht_entry, &ipcht_list, sht_next)
- {
- WaitForSingleObject (ipcht_entry->thread, 1000);
- /* Don't bother removing the linked list on cygserver shutdown. */
- /* FIXME: Error handling? */
- }
- leave_critical_section (&ipcht_cs);
-}
-
-/* Creates the per process wait thread. Called by semget() under locked
- Giant mutex condition. */
-int
-ipcexit_creat_hookthread (struct thread *td)
-{
- ipc_hookthread *ipcht_entry;
- int ret = -1;
- enter_critical_section (&ipcht_cs);
- SLIST_FOREACH (ipcht_entry, &ipcht_list, sht_next)
- {
- if (ipcht_entry->winpid == td->ipcblk->winpid)
- ret = 0;
- }
- leave_critical_section (&ipcht_cs);
- if (!ret)
- return 0;
-
- DWORD tid;
- ipc_hookthread_storage *shs = new ipc_hookthread_storage;
- if (!DuplicateHandle (GetCurrentProcess (), td->client->handle (),
- GetCurrentProcess (), &shs->process_hdl,
- 0, FALSE, DUPLICATE_SAME_ACCESS))
- {
- delete shs;
- log (LOG_CRIT, "failed to duplicate process handle, error = %u",
- GetLastError ());
- return cygwin_internal (CW_GET_ERRNO_FROM_WINERROR,
- GetLastError (), ENOMEM);
- }
- shs->ipcblk = *td->ipcblk;
- HANDLE thread = CreateThread (NULL, 0, ipcexit_hookthread, shs, 0, &tid);
- if (!thread)
- {
- delete shs;
- log (LOG_CRIT, "failed to create thread, error = %u", GetLastError ());
- return cygwin_internal (CW_GET_ERRNO_FROM_WINERROR,
- GetLastError (), ENOMEM);
- }
- ipcht_entry = new ipc_hookthread;
- ipcht_entry->thread = thread;
- ipcht_entry->winpid = td->ipcblk->winpid;
- ipcht_entry->vmspace.vm_map = NULL;
- ipcht_entry->vmspace.vm_shm = NULL;
- enter_critical_section (&ipcht_cs);
- SLIST_INSERT_HEAD (&ipcht_list, ipcht_entry, sht_next);
- leave_critical_section (&ipcht_cs);
- return 0;
-}
-
-/*
- * Need the admins group SID to compare with groups in client token.
- */
-PSID admininstrator_group_sid;
-
-static void
-init_admin_sid (void)
-{
- SID_IDENTIFIER_AUTHORITY nt_auth = {SECURITY_NT_AUTHORITY};
- if (! AllocateAndInitializeSid (&nt_auth, 2, 32, 544, 0, 0, 0, 0, 0, 0,
- &admininstrator_group_sid))
- panic ("failed to create well known sids, error = %u",
- GetLastError ());
-}
-
-SECURITY_DESCRIPTOR sec_all_nih_sd;
-SECURITY_ATTRIBUTES sec_all_nih = { sizeof (SECURITY_ATTRIBUTES),
- &sec_all_nih_sd,
- FALSE };
-
-void
-securityinit ()
-{
- InitializeSecurityDescriptor (&sec_all_nih_sd, SECURITY_DESCRIPTOR_REVISION);
- SetSecurityDescriptorDacl (&sec_all_nih_sd, TRUE, 0, FALSE);
- init_admin_sid ();
-}
-
-/* Global vars, determining whether the IPC stuff should be started or not. */
-tun_bool_t support_sharedmem = TUN_UNDEF;
-tun_bool_t support_msgqueues = TUN_UNDEF;
-tun_bool_t support_semaphores = TUN_UNDEF;
-
-void
-ipcinit ()
-{
- mtx_init (&Giant, "Giant", NULL, MTX_DEF);
- msleep_init ();
- ipcexit_event = CreateEvent (NULL, TRUE, FALSE, NULL);
- if (!ipcexit_event)
- panic ("Failed to create ipcexit event object");
- InitializeCriticalSection (&ipcht_cs);
- if (support_msgqueues == TUN_TRUE)
- msginit ();
- if (support_semaphores == TUN_TRUE)
- seminit ();
- if (support_sharedmem == TUN_TRUE)
- shminit ();
-}
-
-int
-ipcunload ()
-{
- ipcexit_dispose_hookthreads ();
- CloseHandle (ipcexit_event);
- wakeup_all ();
- if (support_semaphores == TUN_TRUE)
- semunload ();
- if (support_sharedmem == TUN_TRUE)
- shmunload ();
- if (support_msgqueues == TUN_TRUE)
- msgunload ();
- mtx_destroy (&Giant);
- return 0;
-}
-
-/*
- * Helper function to find a gid in a list of gids.
- */
-static bool
-is_grp_member (gid_t grp, gid_t *grplist, int listsize)
-{
- if (grplist)
- for (; listsize > 0; --listsize)
- if (grp == grplist[listsize - 1])
- return true;
- return false;
-}
-
-/*
- * Helper function to get a specific token information from a token.
- * This function mallocs the necessary buffer spcae by itself. It
- * must be free'd by the calling function.
- */
-void *
-get_token_info (HANDLE tok, TOKEN_INFORMATION_CLASS tic)
-{
- void *buf;
- DWORD size;
-
- if (!GetTokenInformation (tok, tic, NULL, 0, &size)
- && GetLastError () != ERROR_INSUFFICIENT_BUFFER)
- return NULL;
- if (!(buf = malloc (size)))
- return NULL;
- if (!GetTokenInformation (tok, tic, buf, size, &size))
- {
- free (buf);
- return NULL;
- }
- return buf;
-}
-
-/*
- * Check if client user helds "mode" permission when accessing object
- * associated with "perm" permission record.
- * Returns an error code.
- */
-int
-ipcperm (struct thread *td, ipc_perm *perm, unsigned int mode)
-{
- proc *p = td->ipcblk;
-
- if (!suser (td))
- return 0;
- if (mode & IPC_M)
- {
- return (p->uid != perm->cuid && p->uid != perm->uid)
- ? EACCES : 0;
- }
- if (p->uid != perm->cuid && p->uid != perm->uid)
- {
- /* If the user is a member of the creator or owner group, test
- against group bits, otherwise against other bits. */
- mode >>= p->gid != perm->gid && p->gid != perm->cgid
- && !is_grp_member (perm->gid, p->gidlist, p->gidcnt)
- && !is_grp_member (perm->cgid, p->gidlist, p->gidcnt)
- ? 6 : 3;
- }
- return (mode & perm->mode) != mode ? EACCES : 0;
-}
-
-/*
- * Check for client user being superuser.
- * Returns an error code.
- */
-int
-suser (struct thread *td)
-{
- /* This value has been set at ImpersonateNamedPipeClient() time
- using the token information. See adjust_identity_info() below. */
- return td->ipcblk->is_admin ? 0 : EACCES;
-}
-
-/*
- * Retrieves user and group info from impersonated token and creates the
- * correct uid, gid, gidlist and is_admin entries in p from that.
- */
-bool
-adjust_identity_info (struct proc *p)
-{
- HANDLE tok;
-
- if (!OpenThreadToken (GetCurrentThread (), TOKEN_READ, TRUE, &tok))
- {
- debug ("Failed to open worker thread access token for pid %d, winpid %d",
- p->cygpid, p->winpid);
- return false;
- }
-
- /* Get uid from user SID in token. */
- PTOKEN_USER user;
- if (!(user = (PTOKEN_USER)get_token_info (tok, TokenUser)))
- goto faulty;
- p->uid = cygwin_internal (CW_GET_UID_FROM_SID, user->User.Sid);
- free (user);
- if (p->uid == (uid_t)-1)
- log (LOG_WARNING, "WARNING: User not found in /etc/passwd! Using uid -1!");
-
- /* Get gid from primary group SID in token. */
- PTOKEN_PRIMARY_GROUP pgrp;
- if (!(pgrp = (PTOKEN_PRIMARY_GROUP)get_token_info (tok, TokenPrimaryGroup)))
- goto faulty;
- p->gid = cygwin_internal (CW_GET_GID_FROM_SID, pgrp->PrimaryGroup);
- free (pgrp);
- if (p->gid == (gid_t)-1)
- log (LOG_WARNING,"WARNING: Group not found in /etc/group! Using gid -1!");
-
- /* Generate gid list from token group's SID list. Also look if the token
- has an enabled admin group SID. That means, the process has admin
- privileges. That knowledge is used in suser(). */
- PTOKEN_GROUPS gsids;
- if (!(gsids = (PTOKEN_GROUPS)get_token_info (tok, TokenGroups)))
- goto faulty;
- if (gsids->GroupCount)
- {
- p->gidlist = (gid_t *) calloc (gsids->GroupCount, sizeof (gid_t));
- if (p->gidlist)
- p->gidcnt = gsids->GroupCount;
- }
- for (DWORD i = 0; i < gsids->GroupCount; ++i)
- {
- if (p->gidlist)
- p->gidlist[i] = cygwin_internal (CW_GET_GID_FROM_SID,
- gsids->Groups[i].Sid);
- if (EqualSid (gsids->Groups[i].Sid, admininstrator_group_sid)
- && (gsids->Groups[i].Attributes & SE_GROUP_ENABLED))
- p->is_admin = true;
- }
- free (gsids);
-
- CloseHandle (tok);
- return true;
-
-faulty:
- CloseHandle (tok);
- log (LOG_CRIT, "Failed to get token information for pid %d, winpid %d",
- p->cygpid, p->winpid);
- return false;
-}
-
-/*
- * Windows wrapper implementation of the VM functions called by sysv_shm.cc.
- */
-
-vm_object_t
-_vm_pager_allocate (int size, int shmflg)
-{
- /* Create the file mapping object with full access for everyone. This is
- necessary to allow later calls to shmctl(..., IPC_SET,...) to
- change the access rights and ownership of a shared memory region.
- The access rights are tested at the beginning of every shm... function.
- Note that this does not influence the actual read or write access
- defined in a call to shmat. */
- vm_object_t object = CreateFileMapping (INVALID_HANDLE_VALUE, &sec_all_nih,
- PAGE_READWRITE, 0, size, NULL);
- if (!object)
- panic ("CreateFileMapping in _vm_pager_allocate failed, %u", GetLastError ());
- return object;
-}
-
-vm_object_t
-vm_object_duplicate (struct thread *td, vm_object_t object)
-{
- vm_object_t dup_object;
- if (!DuplicateHandle (GetCurrentProcess (), object,
- td->client->handle (), &dup_object,
- 0, TRUE, DUPLICATE_SAME_ACCESS))
- panic ("!DuplicateHandle in vm_object_duplicate failed, %u", GetLastError ());
- return dup_object;
-}
-
-void
-vm_object_deallocate (vm_object_t object)
-{
- if (object)
- CloseHandle (object);
-}
-
-/*
- * Tunable parameters are read from a system wide cygserver.conf file.
- * On the first call to tunable_int_fetch, the file is read and the
- * parameters are set accordingly. Each parameter has default, max and
- * min settings.
- */
-
-enum tun_params_type {
- TUN_NULL,
- TUN_INT,
- TUN_BOOL
-};
-
-union tun_value {
- long ival;
- tun_bool_t bval;
-};
-
-struct tun_struct {
- const char *name;
- tun_params_type type;
- union tun_value value;
- union tun_value min;
- union tun_value max;
- void (*check_func)(tun_struct *, char *, const char *);
-};
-
-static void
-default_tun_check (tun_struct *that, char *value, const char *fname)
-{
- char *c = NULL;
- tun_value val;
- switch (that->type)
- {
- case TUN_INT:
- val.ival = strtoul (value, &c, 10);
- if (!val.ival || (c && *c))
- panic ("Error in config file %s: Value of parameter %s malformed",
- fname, that->name);
- if (val.ival < that->min.ival || val.ival > that->max.ival)
- panic ("Error in config file %s: Value of parameter %s must be "
- "between %lu and %lu",
- fname, that->name, that->min.ival, that->max.ival);
- if (that->value.ival)
- panic ("Error in config file %s: Parameter %s set twice.\n",
- fname, that->name);
- that->value.ival = val.ival;
- break;
- case TUN_BOOL:
- if (!strcasecmp (value, "no") || !strcasecmp (value, "n")
- || !strcasecmp (value, "false") || !strcasecmp (value, "f")
- || !strcasecmp (value, "0"))
- val.bval = TUN_FALSE;
- else if (!strcasecmp (value, "yes") || !strcasecmp (value, "y")
- || !strcasecmp (value, "true") || !strcasecmp (value, "t")
- || !strcasecmp (value, "1"))
- val.bval = TUN_TRUE;
- else
- panic ("Error in config file %s: Value of parameter %s malformed\n"
- "Allowed values: \"yes\", \"no\", \"y\", \"n\", \"true\", \"false\", \"t\", \"f\", \"1\" and \"0\"", fname, that->name);
- that->value.bval = val.bval;
- break;
- default:
- /* Shouldn't happen. */
- panic ("Internal error: Wrong type of tunable parameter");
- break;
- }
-}
-
-static tun_struct tunable_params[] =
-{
- /* SRV */
- { "kern.srv.cleanup_threads", TUN_INT, {0}, {1}, {32}, default_tun_check},
- { "kern.srv.request_threads", TUN_INT, {0}, {1}, {310}, default_tun_check},
- { "kern.srv.process_cache_size", TUN_INT, {0}, {1}, {310}, default_tun_check},
- { "kern.srv.sharedmem", TUN_BOOL, {TUN_UNDEF}, {TUN_FALSE}, {TUN_TRUE}, default_tun_check},
- { "kern.srv.msgqueues", TUN_BOOL, {TUN_UNDEF}, {TUN_FALSE}, {TUN_TRUE}, default_tun_check},
- { "kern.srv.semaphores", TUN_BOOL, {TUN_UNDEF}, {TUN_FALSE}, {TUN_TRUE}, default_tun_check},
-
- /* LOG */
- { "kern.log.syslog", TUN_BOOL, {TUN_UNDEF}, {TUN_FALSE}, {TUN_TRUE}, default_tun_check},
- { "kern.log.stderr", TUN_BOOL, {TUN_UNDEF}, {TUN_FALSE}, {TUN_TRUE}, default_tun_check},
- { "kern.log.debug", TUN_BOOL, {TUN_UNDEF}, {TUN_FALSE}, {TUN_TRUE}, default_tun_check},
- { "kern.log.level", TUN_INT, {0}, {1}, {7}, default_tun_check},
-
- /* MSG */
- { "kern.ipc.msgseg", TUN_INT, {0}, {256}, {65535}, default_tun_check},
- { "kern.ipc.msgssz", TUN_INT, {0}, {8}, {1024}, default_tun_check},
- { "kern.ipc.msgmnb", TUN_INT, {0}, {1}, {65535}, default_tun_check},
- { "kern.ipc.msgmni", TUN_INT, {0}, {1}, {1024}, default_tun_check},
- { "kern.ipc.msgtql", TUN_INT, {0}, {1}, {1024}, default_tun_check},
-
- /* SEM */
- //{ "kern.ipc.semmap", TUN_INT, {0}, {1}, {1024}, default_tun_check},
- { "kern.ipc.semmni", TUN_INT, {0}, {1}, {1024}, default_tun_check},
- { "kern.ipc.semmns", TUN_INT, {0}, {1}, {1024}, default_tun_check},
- { "kern.ipc.semmnu", TUN_INT, {0}, {1}, {1024}, default_tun_check},
- { "kern.ipc.semmsl", TUN_INT, {0}, {1}, {1024}, default_tun_check},
- { "kern.ipc.semopm", TUN_INT, {0}, {1}, {1024}, default_tun_check},
- { "kern.ipc.semume", TUN_INT, {0}, {1}, {1024}, default_tun_check},
- //{ "kern.ipc.semusz", TUN_INT, {0}, {1}, {1024}, default_tun_check},
- { "kern.ipc.semvmx", TUN_INT, {0}, {1}, {32767}, default_tun_check},
- { "kern.ipc.semaem", TUN_INT, {0}, {1}, {32767}, default_tun_check},
-
- /* SHM */
- { "kern.ipc.shmmaxpgs", TUN_INT, {0}, {1}, {32767}, default_tun_check},
- //{ "kern.ipc.shmmin", TUN_INT, {0}, {1}, {32767}, default_tun_check},
- { "kern.ipc.shmmni", TUN_INT, {0}, {1}, {32767}, default_tun_check},
- { "kern.ipc.shmseg", TUN_INT, {0}, {1}, {32767}, default_tun_check},
- { "kern.ipc.shm_allow_removed", TUN_BOOL, {TUN_UNDEF}, {TUN_FALSE}, {TUN_TRUE}, default_tun_check},
- //{ "kern.ipc.shm_use_phys", TUN_INT, {0}, {1}, {32767}, default_tun_check},
- { NULL, TUN_NULL, {0}, {0}, {0}, NULL}
-};
-
-#define skip_whitespace(c) while (*(c) && isspace (*(c))) ++(c)
-#define skip_nonwhitespace(c) while (*(c) && !isspace (*(c)) && *(c) != '#') ++(c)
-#define end_of_content(c) (!*(c) || *(c) == '#')
-
-void
-tunable_param_init (const char *config_file, bool force)
-{
- FILE *fp = fopen (config_file, "rt");
- if (!fp)
- {
- if (force)
- panic ("can't open config file %s\n", config_file);
- return;
- }
- char line[1024];
- while (fgets (line, 1024, fp))
- {
- char *c = strrchr (line, '\n');
- if (!c)
- panic ("Line too long in confg file %s\n", config_file);
- /* Overwrite trailing NL. */
- *c = '\0';
- c = line;
- skip_whitespace (c);
- if (end_of_content (c))
- continue;
- /* So we are on the first character of a parameter name. */
- char *name = c;
- /* Find end of name. */
- skip_nonwhitespace (c);
- if (end_of_content (c))
- {
- *c++ = '\0';
- panic ("Error in config file %s: Parameter %s has no value.\n",
- config_file, name);
- }
- /* Mark end of name. */
- *c++ = '\0';
- skip_whitespace (c);
- if (end_of_content (c))
- panic ("Error in config file %s: Parameter %s has no value.\n",
- config_file, name);
- /* Now we are on the first character of a parameter's value. */
- char *value = c;
- /* This only works for simple parameters. If complex string parameters
- are added at one point, the scanning routine must be changed here. */
- /* Find end of value. */
- skip_nonwhitespace (c);
- /* Mark end of value. */
- *c++ = '\0';
- /* Now look if name is one from our list. */
- tun_struct *s;
- for (s = &tunable_params[0]; s->name; ++s)
- if (!strcmp (name, s->name))
- {
- /* Now read value and check for validity. check_func doesn't
- return on error. */
- s->check_func (s, value, config_file);
- break;
- }
- if (!s->name)
- panic ("Error in config file %s: Unknown parameter %s.\n",
- config_file, name);
- }
- fclose (fp);
-}
-
-void
-tunable_int_fetch (const char *name, int32_t *tunable_target)
-{
- tun_struct *s;
- for (s = &tunable_params[0]; s->name; ++s)
- if (!strcmp (name, s->name))
- break;
- if (!s) /* Not found */
- return;
- if (s->type != TUN_INT) /* Wrong type */
- return;
- if (!s->value.ival) /* Not set in config file */
- return;
- *tunable_target = s->value.ival;
- debug ("\nSet %s to %u\n", name, *tunable_target);
-}
-
-void
-tunable_bool_fetch (const char *name, tun_bool_t *tunable_target)
-{
- tun_struct *s;
- const char *tun_bool_val_string[] = { "undefined", "no", "yes" };
- for (s = &tunable_params[0]; s->name; ++s)
- if (!strcmp (name, s->name))
- break;
- if (!s) /* Not found */
- return;
- if (s->type != TUN_BOOL) /* Wrong type */
- return;
- if (!s->value.ival) /* Not set in config file */
- return;
- *tunable_target = s->value.bval;
- debug ("\nSet %s to %s\n", name, tun_bool_val_string[*tunable_target]);
-}
-#endif /* __OUTSIDE_CYGWIN__ */
diff --git a/winsup/cygserver/bsd_helper.h b/winsup/cygserver/bsd_helper.h
deleted file mode 100644
index bc8d22810..000000000
--- a/winsup/cygserver/bsd_helper.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/* bsd_helper.h: Helps integrating BSD kernel code
-
- Copyright 2003, 2012 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-#ifndef _BSD_HELPER_H
-#define _BSD_HELPER_H
-
-#include <sys/types.h>
-#include <sys/syslog.h>
-
-enum tun_bool_t {
- TUN_UNDEF = 0,
- TUN_FALSE = 1,
- TUN_TRUE = 2
-};
-
-#define TUNABLE_INT_FETCH(a,b) tunable_int_fetch((a),(b))
-#define TUNABLE_BOOL_FETCH(a,b) tunable_bool_fetch((a),(b))
-
-#define sys_malloc(a,b,c) (malloc(a)?:(panic("malloc failed in %s, line %d"),(void*)NULL))
-#define sys_free(a,b) free(a)
-
-#define jail_sysvipc_allowed true
-#define jailed(a) false
-
-extern const char *__progname;
-
-/* Global vars, determining whether the IPC stuff should be started or not. */
-extern tun_bool_t support_sharedmem;
-extern tun_bool_t support_msgqueues;
-extern tun_bool_t support_semaphores;
-
-extern SECURITY_ATTRIBUTES sec_all_nih;
-
-void securityinit (void);
-
-int win_copyin (struct thread *, const void *, void *, size_t);
-int win_copyout (struct thread *, const void *, void *, size_t);
-#define copyin(a,b,c) win_copyin((td),(a),(b),(c))
-#define copyout(a,b,c) win_copyout((td),(a),(b),(c))
-
-void *get_token_info (HANDLE, TOKEN_INFORMATION_CLASS);
-int ipcperm (struct thread *, struct ipc_perm *, unsigned int);
-int suser (struct thread *);
-bool adjust_identity_info (struct proc *p);
-
-struct vmspace *ipc_p_vmspace (struct proc *);
-int ipcexit_creat_hookthread(struct thread *);
-void ipcinit (void);
-int ipcunload (void);
-
-vm_object_t _vm_pager_allocate (int, int);
-#define vm_pager_allocate(a,b,s,c,d) _vm_pager_allocate((s),(mode))
-vm_object_t vm_object_duplicate (struct thread *td, vm_object_t object);
-void vm_object_deallocate (vm_object_t object);
-
-void tunable_param_init (const char *, bool);
-void tunable_int_fetch (const char *, int32_t *);
-void tunable_bool_fetch (const char *, tun_bool_t *);
-
-#endif /* _BSD_HELPER_H */
diff --git a/winsup/cygserver/bsd_log.cc b/winsup/cygserver/bsd_log.cc
deleted file mode 100644
index 18dc1a53b..000000000
--- a/winsup/cygserver/bsd_log.cc
+++ /dev/null
@@ -1,95 +0,0 @@
-/* bsd_log.cc
-
- Copyright 2003, 2004, 2012 Red Hat Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-#ifdef __OUTSIDE_CYGWIN__
-#include "woutsup.h"
-#define _KERNEL 1
-#define __BSD_VISIBLE 1
-#include <stdio.h>
-#include <stdlib.h>
-
-int32_t log_level = 8; /* Illegal value. Don't change! */
-tun_bool_t log_debug = TUN_UNDEF;
-tun_bool_t log_syslog = TUN_UNDEF;
-tun_bool_t log_stderr = TUN_UNDEF;
-
-void
-loginit (tun_bool_t opt_stderr, tun_bool_t opt_syslog)
-{
- if (log_debug == TUN_UNDEF)
- TUNABLE_BOOL_FETCH ("kern.log.debug", &log_debug);
- if (log_debug == TUN_UNDEF)
- log_debug = TUN_FALSE;
-
- if (opt_stderr != TUN_UNDEF)
- log_stderr = opt_stderr;
- else
- TUNABLE_BOOL_FETCH ("kern.log.stderr", &log_stderr);
- if (log_stderr == TUN_UNDEF)
- log_stderr = TUN_FALSE;
-
- if (opt_syslog != TUN_UNDEF)
- log_syslog = opt_syslog;
- else
- TUNABLE_BOOL_FETCH ("kern.log.syslog", &log_syslog);
- if (log_syslog == TUN_UNDEF)
- log_syslog = TUN_FALSE;
-
- if (log_level == 8)
- TUNABLE_INT_FETCH ("kern.log.level", &log_level);
- if (log_level == 8)
- log_level = 6;
-}
-
-void
-_vlog (const char *file, int line, int level,
- const char *fmt, va_list ap)
-{
- char buf[16384];
- char *pos;
-
- if ((level == LOG_DEBUG && log_debug != TUN_TRUE)
- || (level != LOG_DEBUG && level >= log_level))
- return;
- pos = stpcpy (buf, "cygserver: ");
- if (file && log_debug == TUN_TRUE)
- pos += snprintf (pos, 16384 - (pos - buf), "%s, line %d: ", file, line);
- vsnprintf (pos, 16384 - (pos - buf), fmt, ap);
- if (log_syslog == TUN_TRUE && level != LOG_DEBUG)
- syslog (level, buf);
- if (log_stderr == TUN_TRUE || level == LOG_DEBUG)
- {
- fputs (buf, stderr);
- fputc ('\n', stderr);
- }
-}
-
-void
-_log (const char *file, int line, int level, const char *fmt, ...)
-{
- va_list ap;
- va_start (ap, fmt);
- _vlog (file, line, level, fmt, ap);
-}
-
-void
-_vpanic (const char *file, int line, const char *fmt, va_list ap)
-{
- _vlog (file, line, LOG_CRIT, fmt, ap);
- exit (1);
-}
-
-void
-_panic (const char *file, int line, const char *fmt, ...)
-{
- va_list ap;
- va_start (ap, fmt);
- _vpanic (file, line, fmt, ap);
-}
-#endif /* __OUTSIDE_CYGWIN__ */
diff --git a/winsup/cygserver/bsd_log.h b/winsup/cygserver/bsd_log.h
deleted file mode 100644
index 0027d4ff5..000000000
--- a/winsup/cygserver/bsd_log.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/* bsd_log.h: Helps integrating BSD kernel code
-
- Copyright 2003, 2012 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-#ifndef _BSD_LOG_H
-#define _BSD_LOG_H
-
-#include <sys/types.h>
-#include <sys/syslog.h>
-
-extern int32_t log_level;
-extern tun_bool_t log_debug;
-extern tun_bool_t log_syslog;
-extern tun_bool_t log_stderr;
-
-void loginit (tun_bool_t, tun_bool_t);
-void _vlog (const char *, int, int, const char *, va_list);
-void _log (const char *, int, int, const char *, ...);
-void _vpanic (const char *, int, const char *, va_list) __attribute__ ((noreturn));
-void _panic (const char *, int, const char *, ...) __attribute__ ((noreturn));
-#define vlog(l,f,a) _vlog(NULL,0,(l),(f),(a))
-#define log(l,f,...) _log(NULL,0,(l),(f),##__VA_ARGS__)
-#define vdebug(f,a) _vlog(__FILE__,__LINE__,LOG_DEBUG,(f),(a))
-#define debug(f,...) _log(__FILE__,__LINE__,LOG_DEBUG,(f),##__VA_ARGS__)
-#define vpanic(f,a) _vpanic(__FILE__,__LINE__,(f),(a))
-#define panic(f,...) _panic(__FILE__,__LINE__,(f),##__VA_ARGS__)
-
-#endif /* _BSD_LOG_H */
diff --git a/winsup/cygserver/bsd_mutex.cc b/winsup/cygserver/bsd_mutex.cc
deleted file mode 100644
index 66c4b2398..000000000
--- a/winsup/cygserver/bsd_mutex.cc
+++ /dev/null
@@ -1,388 +0,0 @@
-/* bsd_mutex.cc
-
- Copyright 2003, 2004, 2005, 2007, 2012, 2014 Red Hat Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-#ifdef __OUTSIDE_CYGWIN__
-#include "woutsup.h"
-#include <errno.h>
-#define _KERNEL 1
-#define __BSD_VISIBLE 1
-#include <sys/smallprint.h>
-#include <limits.h>
-#include <stdlib.h>
-#include <sys/msg.h>
-#include <sys/sem.h>
-
-#include "process.h"
-#include "cygserver_ipc.h"
-
-/* A BSD kernel global mutex. */
-struct mtx Giant;
-
-void
-mtx_init (mtx *m, const char *name, const void *, int)
-{
- m->name = name;
- m->owner = 0;
- m->cnt = 0;
- /* Can't use Windows Mutexes here since Windows Mutexes are only
- unlockable by the lock owner. */
- m->h = CreateSemaphore (NULL, 1, 1, NULL);
- if (!m->h)
- panic ("couldn't allocate %s mutex, %u\n", name, GetLastError ());
-}
-
-void
-_mtx_lock (mtx *m, DWORD winpid, const char *file, int line)
-{
- _log (file, line, LOG_DEBUG, "Try locking mutex %s (%u) (hold: %u)",
- m->name, winpid, m->owner);
- if (WaitForSingleObject (m->h, INFINITE) != WAIT_OBJECT_0)
- _panic (file, line, "wait for %s in %d failed, %u", m->name, winpid,
- GetLastError ());
- m->owner = winpid;
- _log (file, line, LOG_DEBUG, "Locked mutex %s/%u (%u)",
- m->name, ++m->cnt, winpid);
-}
-
-int
-mtx_owned (mtx *m, DWORD winpid)
-{
- return m->owner == winpid;
-}
-
-void
-_mtx_assert (mtx *m, int what, DWORD winpid, const char *file, int line)
-{
- switch (what)
- {
- case MA_OWNED:
- if (!mtx_owned (m, winpid))
- _panic (file, line, "Mutex %s not owned", m->name);
- break;
- case MA_NOTOWNED:
- if (mtx_owned (m, winpid))
- _panic (file, line, "Mutex %s is owned", m->name);
- break;
- default:
- break;
- }
-}
-
-void
-_mtx_unlock (mtx *m, const char *file, int line)
-{
- DWORD owner = m->owner;
- unsigned long cnt = m->cnt;
- m->owner = 0;
- /* Cautiously check if mtx_destroy has been called (shutdown).
- In that case, m->h is NULL. */
- if (m->h && !ReleaseSemaphore (m->h, 1, NULL))
- {
- /* Check if the semaphore was already on it's max value. */
- if (GetLastError () != ERROR_TOO_MANY_POSTS)
- _panic (file, line, "release of mutex %s failed, %u", m->name,
- GetLastError ());
- }
- _log (file, line, LOG_DEBUG, "Unlocked mutex %s/%u (owner: %u)",
- m->name, cnt, owner);
-}
-
-void
-mtx_destroy (mtx *m)
-{
- HANDLE tmp = m->h;
- m->h = NULL;
- if (tmp)
- CloseHandle (tmp);
-}
-
-/*
- * Helper functions for msleep/wakeup.
- */
-
-static int
-win_priority (int priority)
-{
- int p = (int)((priority) & PRIO_MASK) - PZERO;
- /* Generating a valid priority value is a bit tricky. The only valid
- values on NT4 are -15, -2, -1, 0, 1, 2, 15. */
- switch (p)
- {
- case -15: case -14: case -13: case -12: case -11:
- return THREAD_PRIORITY_IDLE;
- case -10: case -9: case -8: case -7: case -6:
- return THREAD_PRIORITY_LOWEST;
- case -5: case -4: case -3: case -2: case -1:
- return THREAD_PRIORITY_BELOW_NORMAL;
- case 0:
- return THREAD_PRIORITY_NORMAL;
- case 1: case 2: case 3: case 4: case 5:
- return THREAD_PRIORITY_ABOVE_NORMAL;
- case 6: case 7: case 8: case 9: case 10:
- return THREAD_PRIORITY_HIGHEST;
- case 11: case 12: case 13: case 14: case 15:
- return THREAD_PRIORITY_TIME_CRITICAL;
- }
- return THREAD_PRIORITY_NORMAL;
-}
-
-/*
- * Sets the thread priority, returns the old priority.
- */
-static int
-set_priority (int priority)
-{
- int old_prio = GetThreadPriority (GetCurrentThread ());
- if (!SetThreadPriority (GetCurrentThread (), win_priority (priority)))
- log (LOG_WARNING,
- "Warning: Setting thread priority to %d failed with error %u\n",
- win_priority (priority), GetLastError ());
- return old_prio;
-}
-
-/*
- * Original description from BSD code:
- *
- * General sleep call. Suspends the current process until a wakeup is
- * performed on the specified identifier. The process will then be made
- * runnable with the specified priority. Sleeps at most timo/hz seconds
- * (0 means no timeout). If pri includes PCATCH flag, signals are checked
- * before and after sleeping, else signals are not checked. Returns 0 if
- * awakened, EWOULDBLOCK if the timeout expires. If PCATCH is set and a
- * signal needs to be delivered, ERESTART is returned if the current system
- * call should be restarted if possible, and EINTR is returned if the system
- * call should be interrupted by the signal (return EINTR).
- *
- * The mutex argument is exited before the caller is suspended, and
- * entered before msleep returns. If priority includes the PDROP
- * flag the mutex is not entered before returning.
- */
-static HANDLE msleep_glob_evt;
-
-class msleep_sync_array
-{
- enum msleep_action {
- MSLEEP_ENTER = 0,
- MSLEEP_LEAVE,
- MSLEEP_WAKEUP
- };
-
- CRITICAL_SECTION cs;
- long cnt;
- long max_cnt;
- struct msleep_record {
- void *ident;
- HANDLE wakeup_evt;
- LONG threads;
- } *a;
-
- int find_ident (void *ident, msleep_action action)
- {
- int i;
- for (i = 0; i < cnt; ++i)
- if (a[i].ident == ident)
- return i;
- if (i >= max_cnt)
- panic ("ident %x not found and run out of slots.", ident);
- if (i >= cnt && action == MSLEEP_LEAVE)
- panic ("ident %x not found (%d).", ident, action);
- return i;
- }
-
- HANDLE first_entry (int i, void *ident)
- {
- debug ("New ident %x, index %d", ident, i);
- a[i].ident = ident;
- a[i].wakeup_evt = CreateEvent (NULL, TRUE, FALSE, NULL);
- if (!a[i].wakeup_evt)
- panic ("CreateEvent failed: %u", GetLastError ());
- debug ("i = %d, CreateEvent: %x", i, a[i].wakeup_evt);
- a[i].threads = 1;
- ++cnt;
- return a[i].wakeup_evt;
- }
-
- HANDLE next_entry (int i)
- {
- if (a[i].ident && WaitForSingleObject (a[i].wakeup_evt, 0) != WAIT_OBJECT_0)
- {
- ++a[i].threads;
- return a[i].wakeup_evt;
- }
- return NULL;
- }
-
-public:
-
- msleep_sync_array (int count) : cnt (0), max_cnt (count)
- {
- InitializeCriticalSection (&cs);
- if (!(a = new msleep_record[count]))
- panic ("Allocating msleep records failed: %d", errno);
- }
-
- ~msleep_sync_array () { delete a; }
-
- HANDLE enter (void *ident)
- {
- HANDLE evt = NULL;
- while (!evt)
- {
- EnterCriticalSection (&cs);
- int i = find_ident (ident, MSLEEP_ENTER);
- if (i >= cnt)
- evt = first_entry (i, ident);
- else if (!(evt = next_entry (i)))
- {
- /* wakeup has been called, so sleep to wait until all
- formerly waiting threads have left and retry. */
- LeaveCriticalSection (&cs);
- Sleep (1L);
- }
- }
- LeaveCriticalSection (&cs);
- return evt;
- }
-
- void leave (void *ident)
- {
- EnterCriticalSection (&cs);
- int i = find_ident (ident, MSLEEP_LEAVE);
- if (--a[i].threads == 0)
- {
- debug ("i = %d, CloseEvent: %x", i, a[i].wakeup_evt);
- CloseHandle (a[i].wakeup_evt);
- a[i].ident = NULL;
- --cnt;
- if (i < cnt)
- a[i] = a[cnt];
- }
- LeaveCriticalSection (&cs);
- }
-
- void wakeup (void *ident)
- {
- EnterCriticalSection (&cs);
- int i = find_ident (ident, MSLEEP_WAKEUP);
- if (i < cnt && a[i].ident)
- SetEvent (a[i].wakeup_evt);
- LeaveCriticalSection (&cs);
- }
-};
-
-static msleep_sync_array *msleep_sync;
-
-void
-msleep_init (void)
-{
- extern struct msginfo msginfo;
- extern struct seminfo seminfo;
-
- msleep_glob_evt = CreateEvent (NULL, TRUE, FALSE, NULL);
- if (!msleep_glob_evt)
- panic ("CreateEvent in msleep_init failed: %u", GetLastError ());
- int32_t msgmni = support_msgqueues ? msginfo.msgmni : 0;
- int32_t semmni = support_semaphores ? seminfo.semmni : 0;
- TUNABLE_INT_FETCH ("kern.ipc.msgmni", &msgmni);
- TUNABLE_INT_FETCH ("kern.ipc.semmni", &semmni);
- debug ("Try allocating msgmni (%d) + semmni (%d) msleep records",
- msgmni, semmni);
- msleep_sync = new msleep_sync_array (msgmni + semmni);
- if (!msleep_sync)
- panic ("Allocating msleep records in msleep_init failed: %d", errno);
-}
-
-int
-_msleep (void *ident, struct mtx *mtx, int priority,
- const char *wmesg, int timo, struct thread *td)
-{
- int ret = -1;
-
- HANDLE evt = msleep_sync->enter (ident);
-
- if (mtx)
- mtx_unlock (mtx);
- int old_priority = set_priority (priority);
- HANDLE obj[4] =
- {
- evt,
- msleep_glob_evt,
- td->client->handle (),
- td->client->signal_arrived ()
- };
- /* PCATCH handling. If PCATCH is given and signal_arrived is a valid
- handle, then it's used in the WaitFor call and EINTR is returned. */
- int obj_cnt = 3;
- if ((priority & PCATCH)
- && td->client->signal_arrived () != INVALID_HANDLE_VALUE)
- obj_cnt = 4;
- switch (WaitForMultipleObjects (obj_cnt, obj, FALSE, timo ?: INFINITE))
- {
- case WAIT_OBJECT_0: /* wakeup() has been called. */
- ret = 0;
- debug ("msleep wakeup called for %d", td->td_proc->winpid);
- break;
- case WAIT_OBJECT_0 + 1: /* Shutdown event (triggered by wakeup_all). */
- priority |= PDROP;
- /*FALLTHRU*/
- case WAIT_OBJECT_0 + 2: /* The dependent process has exited. */
- debug ("msleep process exit or shutdown for %d", td->td_proc->winpid);
- ret = EIDRM;
- break;
- case WAIT_OBJECT_0 + 3: /* Signal for calling process arrived. */
- debug ("msleep process got signal for %d", td->td_proc->winpid);
- ret = EINTR;
- break;
- case WAIT_TIMEOUT:
- ret = EWOULDBLOCK;
- break;
- default:
- /* There's a chance that a process has been terminated before
- WaitForMultipleObjects has been called. In this case the handles
- might be invalid. The error code returned is ERROR_INVALID_HANDLE.
- Since we can trust the values of these handles otherwise, we
- treat an ERROR_INVALID_HANDLE as a normal process termination and
- hope for the best. */
- if (GetLastError () != ERROR_INVALID_HANDLE)
- panic ("wait in msleep (%s) failed, %u", wmesg, GetLastError ());
- debug ("wait in msleep (%s) failed for %d, %u", wmesg,
- td->td_proc->winpid, GetLastError ());
- ret = EIDRM;
- break;
- }
-
- msleep_sync->leave (ident);
-
- set_priority (old_priority);
-
- if (mtx && !(priority & PDROP))
- mtx_lock (mtx);
- return ret;
-}
-
-/*
- * Make all threads sleeping on the specified identifier runnable.
- */
-int
-wakeup (void *ident)
-{
- msleep_sync->wakeup (ident);
- return 0;
-}
-
-/*
- * Wakeup all sleeping threads. Only called in the context of cygserver
- * shutdown.
- */
-void
-wakeup_all (void)
-{
- SetEvent (msleep_glob_evt);
-}
-#endif /* __OUTSIDE_CYGWIN__ */
diff --git a/winsup/cygserver/bsd_mutex.h b/winsup/cygserver/bsd_mutex.h
deleted file mode 100644
index c9f501576..000000000
--- a/winsup/cygserver/bsd_mutex.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/* bsd_mutex.h: BSD Mutex helper
-
- Copyright 2003, 2005 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-#ifndef _BSD_MUTEX_H
-#define _BSD_MUTEX_H
-
-#define MTX_DEF 0
-
-#define MA_OWNED 1
-#define MA_NOTOWNED 2
-
-#define PZERO (0x20)
-#define PRIO_MASK (0x1f)
-#define PDROP 0x1000
-#define PCATCH 0x2000
-#define PLOCK 0x3000
-
-struct mtx {
- HANDLE h;
- const char *name;
- DWORD owner;
- unsigned long cnt;
-};
-
-/* Some BSD kernel global mutex. */
-extern struct mtx Giant;
-
-void mtx_init (mtx *, const char *, const void *, int);
-void _mtx_lock (mtx *, DWORD winpid, const char *, int);
-#define mtx_lock(m) _mtx_lock((m), (td->ipcblk->winpid), __FILE__, __LINE__)
-int mtx_owned (mtx *, DWORD);
-void _mtx_assert(mtx *, int, DWORD winpid, const char *, int);
-#define mtx_assert(m,w,p) _mtx_assert((m),(w),(p),__FILE__,__LINE__)
-void _mtx_unlock (mtx *, const char *, int);
-#define mtx_unlock(m) _mtx_unlock((m),__FILE__,__LINE__)
-
-void mtx_destroy (mtx *);
-
-void msleep_init (void);
-int _msleep (void *, struct mtx *, int, const char *, int, struct thread *);
-#define msleep(i,m,p,w,t) _msleep((i),(m),(p),(w),(t),(td))
-#define tsleep(i,p,w,t) _msleep((i),NULL,(p),(w),(t),(td))
-int wakeup (void *);
-void wakeup_all (void);
-
-#endif /* _BSD_MUTEX_H */
diff --git a/winsup/cygserver/client.cc b/winsup/cygserver/client.cc
deleted file mode 100644
index 0c6c24ba9..000000000
--- a/winsup/cygserver/client.cc
+++ /dev/null
@@ -1,526 +0,0 @@
-/* client.cc
-
- Copyright 2001, 2002, 2003, 2004, 2008, 2009, 2012, 2013, 2014 Red Hat Inc.
-
- Written by Egor Duda <deo@logos-m.ru>
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-/* to allow this to link into cygwin and the .dll, a little magic is needed. */
-#ifdef __OUTSIDE_CYGWIN__
-#include "woutsup.h"
-#else
-#include "winsup.h"
-#endif
-
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include <unistd.h>
-
-#include "cygserver_msg.h"
-#include "cygserver_sem.h"
-#include "cygserver_shm.h"
-#include "cygserver_setpwd.h"
-#include "cygserver_pwdgrp.h"
-
-#include "cygserver.h"
-#include "transport.h"
-
-int cygserver_running = CYGSERVER_UNKNOWN; // Nb: inherited by children.
-
-client_request_get_version::client_request_get_version ()
- : client_request (CYGSERVER_REQUEST_GET_VERSION, &version, sizeof (version))
-{
- msglen (0); // No parameters for request.
-
- // verbose: syscall_printf ("created");
-}
-
-/*
- * client_request_get_version::check_version ()
- *
- * The major version and API version numbers must match exactly. An
- * older than expected minor version number is accepted (as long as
- * the first numbers match, that is).
- */
-
-#ifdef __INSIDE_CYGWIN__
-
-bool
-client_request_get_version::check_version () const
-{
- const bool ok = (version.major == CYGWIN_SERVER_VERSION_MAJOR
- && version.api == CYGWIN_SERVER_VERSION_API
- && version.minor <= CYGWIN_SERVER_VERSION_MINOR);
-
- if (!ok)
- syscall_printf (("incompatible version of cygwin server: "
- "client version %d.%d.%d.%d, "
- "server version %d.%d.%d.%d"),
- CYGWIN_SERVER_VERSION_MAJOR,
- CYGWIN_SERVER_VERSION_API,
- CYGWIN_SERVER_VERSION_MINOR,
- CYGWIN_SERVER_VERSION_PATCH,
- version.major,
- version.api,
- version.minor,
- version.patch);
-
- return ok;
-}
-
-client_request_attach_tty::client_request_attach_tty (DWORD nmaster_pid,
- HANDLE nfrom_master,
- HANDLE nto_master)
- : client_request (CYGSERVER_REQUEST_ATTACH_TTY, &req, sizeof (req))
-{
- req.pid = GetCurrentProcessId ();
- req.master_pid = nmaster_pid;
- req.from_master = nfrom_master;
- req.to_master = nto_master;
-
- syscall_printf (("created: pid = %u, master_pid = %u, "
- "from_master = %p, to_master = %p"),
- req.pid, req.master_pid, req.from_master, req.to_master);
-}
-#endif /* __INSIDE_CYGWIN__ */
-
-/*
- * client_request_attach_tty::send ()
- *
- * Wraps the base method to provide error handling support. If the
- * reply contains a body but is flagged as an error, close any handles
- * that have been returned by cygserver and then discard the message
- * body, i.e. the client either sees a successful result with handles
- * or an unsuccessful result with no handles.
- */
-
-void
-client_request_attach_tty::send (transport_layer_base * const conn)
-{
- client_request::send (conn);
-
- if (msglen () && error_code ())
- {
- if (from_master ())
- CloseHandle (from_master ());
- if (to_master ())
- CloseHandle (to_master ());
- msglen (0);
- }
-}
-
-client_request::header_t::header_t (const request_code_t request_code,
- const size_t len)
- : request_code (request_code)
-{
- assert (request_code >= 0 && request_code < CYGSERVER_REQUEST_LAST);
- msglen = len;
-}
-
-// FIXME: also check write and read result for -1.
-
-void
-client_request::send (transport_layer_base * const conn)
-{
- assert (conn);
- assert (!(msglen () && !_buf)); // i.e., msglen () implies _buf
- assert (msglen () <= _buflen);
-
- {
- const ssize_t count = conn->write (&_header, sizeof (_header));
-
- if (count != sizeof (_header))
- {
- assert (errno);
- error_code (errno);
- syscall_printf (("request header write failure: "
- "only %ld bytes sent of %lu, "
- "error = %d(%u)"),
- count, sizeof (_header),
- errno, GetLastError ());
- return;
- }
- }
-
- if (msglen ())
- {
- const ssize_t count = conn->write (_buf, msglen ());
-
- if (count == -1 || (size_t) count != msglen ())
- {
- assert (errno);
- error_code (errno);
- syscall_printf (("request body write failure: "
- "only %ld bytes sent of %lu, "
- "error = %d(%u)"),
- count, msglen (),
- errno, GetLastError ());
- return;
- }
- }
-
- {
- const ssize_t count = conn->read (&_header, sizeof (_header));
-
- if (count != sizeof (_header))
- {
- assert (errno);
- error_code (errno);
- syscall_printf (("reply header read failure: "
- "only %ld bytes received of %lu, "
- "error = %d(%u)"),
- count, sizeof (_header),
- errno, GetLastError ());
- return;
- }
- }
-
- if (msglen () && !_buf)
- {
- system_printf ("no client buffer for reply body: %lu bytes needed",
- msglen ());
- error_code (EINVAL);
- return;
- }
-
- if (msglen () > _buflen)
- {
- system_printf (("client buffer too small for reply body: "
- "have %lu bytes and need %lu"),
- _buflen, msglen ());
- error_code (EINVAL);
- return;
- }
-
- if (msglen ())
- {
- const ssize_t count = conn->read (_buf, msglen ());
-
- if (count == -1 || (size_t) count != msglen ())
- {
- assert (errno);
- error_code (errno);
- syscall_printf (("reply body read failure: "
- "only %ld bytes received of %lu, "
- "error = %d(%u)"),
- count, msglen (),
- errno, GetLastError ());
- return;
- }
- }
-}
-
-#ifdef __OUTSIDE_CYGWIN__
-
-client_request_attach_tty::client_request_attach_tty ()
- : client_request (CYGSERVER_REQUEST_ATTACH_TTY, &req, sizeof (req))
-{
-}
-
-/*
- * client_request::handle_request ()
- *
- * A server-side method.
- *
- * This is a factory method for the client_request subclasses. It
- * reads the incoming request header and, based on its request code,
- * creates an instance of the appropriate class.
- *
- * FIXME: If the incoming packet is malformed, the server drops it on
- * the floor. Should it try and generate some sort of reply for the
- * client? As it is, the client will simply get a broken connection.
- *
- * FIXME: also check write and read result for -1.
- */
-
-/* static */ void
-client_request::handle_request (transport_layer_base *const conn,
- process_cache *const cache)
-{
- // verbose: debug_printf ("about to read");
-
- header_t header;
-
- {
- const ssize_t count = conn->read (&header, sizeof (header));
-
- if (count != sizeof (header))
- {
- syscall_printf (("request header read failure: "
- "only %ld bytes received of %lu, "
- "error = %d(%u)"),
- count, sizeof (header),
- errno, GetLastError ());
- return;
- }
- }
-
- client_request *req = NULL;
-
- switch (header.request_code)
- {
- case CYGSERVER_REQUEST_GET_VERSION:
- req = new client_request_get_version;
- break;
- case CYGSERVER_REQUEST_SHUTDOWN:
- req = new client_request_shutdown;
- break;
- case CYGSERVER_REQUEST_ATTACH_TTY:
- req = new client_request_attach_tty;
- break;
- case CYGSERVER_REQUEST_MSG:
- req = new client_request_msg;
- break;
- case CYGSERVER_REQUEST_SEM:
- req = new client_request_sem;
- break;
- case CYGSERVER_REQUEST_SHM:
- req = new client_request_shm;
- break;
- case CYGSERVER_REQUEST_SETPWD:
- req = new client_request_setpwd;
- break;
- case CYGSERVER_REQUEST_PWDGRP:
- req = new client_request_pwdgrp;
- break;
- default:
- syscall_printf ("unknown request code %d received: request ignored",
- header.request_code);
- return;
- }
-
- assert (req);
-
- req->msglen (header.msglen);
- req->handle (conn, cache);
-
- delete req;
-}
-
-/*
- * client_request::handle ()
- *
- * A server-side method.
- *
- * At this point, the header of an incoming request has been read and
- * an appropriate client_request object constructed. This method has
- * to read the request body into its buffer, if there is such a body,
- * then perform the request and send back the results to the client.
- *
- * FIXME: If the incoming packet is malformed, the server drops it on
- * the floor. Should it try and generate some sort of reply for the
- * client? As it is, the client will simply get a broken connection.
- *
- * FIXME: also check write and read result for -1.
- */
-
-void
-client_request::handle (transport_layer_base *const conn,
- process_cache *const cache)
-{
- if (msglen () && !_buf)
- {
- system_printf ("no buffer for request body: %lu bytes needed",
- msglen ());
- error_code (EINVAL);
- return;
- }
-
- if (msglen () > _buflen)
- {
- system_printf (("buffer too small for request body: "
- "have %lu bytes and need %lu"),
- _buflen, msglen ());
- error_code (EINVAL);
- return;
- }
-
- if (msglen ())
- {
- const ssize_t count = conn->read (_buf, msglen ());
-
- if (count == -1 || (size_t) count != msglen ())
- {
- assert (errno);
- error_code (errno);
- syscall_printf (("request body read failure: "
- "only %ld bytes received of %lu, "
- "error = %d(%u)"),
- count, msglen (),
- errno, GetLastError ());
- return;
- }
- }
-
- error_code (0); // Overwrites the _header.request_code field.
-
- /*
- * This is not allowed to fail. We must return ENOSYS at a minimum
- * to the client.
- */
- serve (conn, cache);
-
- {
- const ssize_t count = conn->write (&_header, sizeof (_header));
-
- if (count != sizeof (_header))
- {
- assert (errno);
- error_code (errno);
- syscall_printf (("reply header write failure: "
- "only %ld bytes sent of %lu, "
- "error = %d(%u)"),
- count, sizeof (_header),
- errno, GetLastError ());
- return;
- }
- }
-
- if (msglen ())
- {
- const ssize_t count = conn->write (_buf, msglen ());
-
- if (count == -1 || (size_t) count != msglen ())
- {
- assert (errno);
- error_code (errno);
- syscall_printf (("reply body write failure: "
- "only %ld bytes sent of %lu, "
- "error = %d(%u)"),
- count, msglen (),
- errno, GetLastError ());
- return;
- }
- }
-}
-
-/* The server side implementation of make_request. Very simple. */
-int
-client_request::make_request ()
-{
- transport_layer_base *const transport = create_server_transport ();
- assert (transport);
- if (transport->connect () == -1)
- {
- if (errno)
- error_code (errno);
- else
- error_code (ENOSYS);
- delete transport;
- return -1;
- }
- send (transport);
- delete transport;
- return 0;
-}
-#endif /* __OUTSIDE_CYGWIN__ */
-
-client_request::client_request (request_code_t const id,
- void * const buf,
- size_t const buflen)
- : _header (id, buflen),
- _buf (buf),
- _buflen (buflen)
-{
- assert ((!_buf && !_buflen) || (_buf && _buflen));
-}
-
-client_request::~client_request ()
-{}
-
-#ifdef __INSIDE_CYGWIN__
-int
-client_request::make_request ()
-{
- assert (cygserver_running == CYGSERVER_UNKNOWN \
- || cygserver_running == CYGSERVER_OK \
- || cygserver_running == CYGSERVER_UNAVAIL);
-
- if (cygserver_running == CYGSERVER_UNKNOWN)
- cygserver_init ();
-
- assert (cygserver_running == CYGSERVER_OK \
- || cygserver_running == CYGSERVER_UNAVAIL);
-
- /* Don't retry every request if the server's not there */
- if (cygserver_running == CYGSERVER_UNAVAIL)
- {
- syscall_printf ("cygserver un-available");
- error_code (ENOSYS);
- return -1;
- }
-
- transport_layer_base *const transport = create_server_transport ();
-
- assert (transport);
-
- if (transport->connect () == -1)
- {
- if (errno)
- error_code (errno);
- else
- error_code (ENOSYS);
- delete transport;
- return -1;
- }
-
- // verbose: debug_printf ("connected to server %p", transport);
-
- send (transport);
-
- delete transport;
-
- return 0;
-}
-
-bool
-check_cygserver_available ()
-{
- assert (cygserver_running == CYGSERVER_UNKNOWN \
- || cygserver_running == CYGSERVER_UNAVAIL);
-
- cygserver_running = CYGSERVER_OK; // For make_request ().
-
- client_request_get_version req;
-
- /* This indicates that we failed to connect to cygserver at all but
- * that's fine as cygwin doesn't need it to be running.
- */
- if (req.make_request () == -1)
- return false;
-
- /* We connected to the server but something went wrong after that
- * (in sending the message, in cygserver itself, or in receiving the
- * reply).
- */
- if (req.error_code ())
- {
- syscall_printf ("failure in cygserver version request: %d",
- req.error_code ());
- syscall_printf ("process will continue without cygserver support");
- return false;
- }
-
- return req.check_version ();
-}
-
-void
-cygserver_init ()
-{
- assert (cygserver_running == CYGSERVER_UNKNOWN \
- || cygserver_running == CYGSERVER_OK \
- || cygserver_running == CYGSERVER_UNAVAIL);
-
- if (cygserver_running == CYGSERVER_OK)
- return;
-
- if (!check_cygserver_available ())
- cygserver_running = CYGSERVER_UNAVAIL;
-}
-#endif /* __INSIDE_CYGWIN__ */
diff --git a/winsup/cygserver/configure b/winsup/cygserver/configure
deleted file mode 100755
index a4feae10b..000000000
--- a/winsup/cygserver/configure
+++ /dev/null
@@ -1,5326 +0,0 @@
-#! /bin/sh
-# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for Cygwin Cygserver 0.
-#
-# Report bugs to <cygwin@cygwin.com>.
-#
-#
-# Copyright (C) 1992-1996, 1998-2012 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 more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in #(
- *posix*) :
- set -o posix ;; #(
- *) :
- ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- PATH_SEPARATOR=:
- (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
- (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
- PATH_SEPARATOR=';'
- }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
-# Find who we are. Look in the path if we contain no directory separator.
-as_myself=
-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
-IFS=$as_save_IFS
-
- ;;
-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
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
- exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-# Use a proper internal environment variable to ensure we don't fall
- # into an infinite loop, continuously re-executing ourselves.
- if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
- _as_can_reexec=no; export _as_can_reexec;
- # We cannot yet assume a decent shell, so we have to provide a
-# neutralization value for shells without unset; and this also
-# works around shells that cannot unset nonexistent variables.
-# Preserve -v and -x to the replacement shell.
-BASH_ENV=/dev/null
-ENV=/dev/null
-(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-case $- in # ((((
- *v*x* | *x*v* ) as_opts=-vx ;;
- *v* ) as_opts=-v ;;
- *x* ) as_opts=-x ;;
- * ) as_opts= ;;
-esac
-exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
-# Admittedly, this is quite paranoid, since all the known shells bail
-# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-as_fn_exit 255
- fi
- # We don't want this to propagate to other subprocesses.
- { _as_can_reexec=; unset _as_can_reexec;}
-if test "x$CONFIG_SHELL" = x; then
- as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '\${1+\"\$@\"}'='\"\$@\"'
- setopt NO_GLOB_SUBST
-else
- case \`(set -o) 2>/dev/null\` in #(
- *posix*) :
- set -o posix ;; #(
- *) :
- ;;
-esac
-fi
-"
- as_required="as_fn_return () { (exit \$1); }
-as_fn_success () { as_fn_return 0; }
-as_fn_failure () { as_fn_return 1; }
-as_fn_ret_success () { return 0; }
-as_fn_ret_failure () { return 1; }
-
-exitcode=0
-as_fn_success || { exitcode=1; echo as_fn_success failed.; }
-as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
-as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
-as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
-if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
-
-else
- exitcode=1; echo positional parameters were not saved.
-fi
-test x\$exitcode = x0 || exit 1
-test -x / || exit 1"
- as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
- as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
- eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
- test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1"
- if (eval "$as_required") 2>/dev/null; then :
- as_have_required=yes
-else
- as_have_required=no
-fi
- if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
-
-else
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-as_found=false
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- as_found=:
- case $as_dir in #(
- /*)
- for as_base in sh bash ksh sh5; do
- # Try only shells that exist, to save several forks.
- as_shell=$as_dir/$as_base
- if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
- CONFIG_SHELL=$as_shell as_have_required=yes
- if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
- break 2
-fi
-fi
- done;;
- esac
- as_found=false
-done
-$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
- CONFIG_SHELL=$SHELL as_have_required=yes
-fi; }
-IFS=$as_save_IFS
-
-
- if test "x$CONFIG_SHELL" != x; then :
- export CONFIG_SHELL
- # We cannot yet assume a decent shell, so we have to provide a
-# neutralization value for shells without unset; and this also
-# works around shells that cannot unset nonexistent variables.
-# Preserve -v and -x to the replacement shell.
-BASH_ENV=/dev/null
-ENV=/dev/null
-(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-case $- in # ((((
- *v*x* | *x*v* ) as_opts=-vx ;;
- *v* ) as_opts=-v ;;
- *x* ) as_opts=-x ;;
- * ) as_opts= ;;
-esac
-exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
-# Admittedly, this is quite paranoid, since all the known shells bail
-# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-exit 255
-fi
-
- if test x$as_have_required = xno; then :
- $as_echo "$0: This script requires a shell more modern than all"
- $as_echo "$0: the shells that I found on your system."
- if test x${ZSH_VERSION+set} = xset ; then
- $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
- $as_echo "$0: be upgraded to zsh 4.3.4 or later."
- else
- $as_echo "$0: Please tell bug-autoconf@gnu.org and cygwin@cygwin.com
-$0: about your system, including any error possibly output
-$0: before this message. Then install a modern shell, or
-$0: manually run the script under such a shell if you do
-$0: have one."
- fi
- exit 1
-fi
-fi
-fi
-SHELL=${CONFIG_SHELL-/bin/sh}
-export SHELL
-# Unset more variables known to interfere with behavior of common tools.
-CLICOLOR_FORCE= GREP_OPTIONS=
-unset CLICOLOR_FORCE GREP_OPTIONS
-
-## --------------------- ##
-## M4sh Shell Functions. ##
-## --------------------- ##
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
- { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
- return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
- set +e
- as_fn_set_status $1
- exit $1
-} # as_fn_exit
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
- case $as_dir in #(
- -*) as_dir=./$as_dir;;
- esac
- test -d "$as_dir" || eval $as_mkdir_p || {
- as_dirs=
- while :; do
- case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
- *) as_qdir=$as_dir;;
- esac
- as_dirs="'$as_qdir' $as_dirs"
- as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- test -d "$as_dir" && break
- done
- test -z "$as_dirs" || eval "mkdir $as_dirs"
- } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-
-# as_fn_executable_p FILE
-# -----------------------
-# Test if FILE is an executable regular file.
-as_fn_executable_p ()
-{
- test -f "$1" && test -x "$1"
-} # as_fn_executable_p
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
- eval 'as_fn_append ()
- {
- eval $1+=\$2
- }'
-else
- as_fn_append ()
- {
- eval $1=\$$1\$2
- }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
- eval 'as_fn_arith ()
- {
- as_val=$(( $* ))
- }'
-else
- as_fn_arith ()
- {
- as_val=`expr "$@" || test $? -eq 1`
- }
-fi # as_fn_arith
-
-
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
-as_fn_error ()
-{
- as_status=$1; test $as_status -eq 0 && as_status=1
- if test "$4"; then
- as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
- fi
- $as_echo "$as_me: error: $2" >&2
- as_fn_exit $as_status
-} # as_fn_error
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; 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
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
- }
- /^X\/\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\/\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
-
-# 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
-
-
- as_lineno_1=$LINENO as_lineno_1a=$LINENO
- as_lineno_2=$LINENO as_lineno_2a=$LINENO
- eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
- test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
- # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
- sed -n '
- p
- /[$]LINENO/=
- ' <$as_myself |
- sed '
- s/[$]LINENO.*/&-/
- t lineno
- b
- :lineno
- N
- :loop
- s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
- t loop
- s/-\n.*//
- ' >$as_me.lineno &&
- chmod +x "$as_me.lineno" ||
- { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
-
- # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
- # already done that, so ensure we don't try to do so again and fall
- # in an infinite loop. This has already happened in practice.
- _as_can_reexec=no; export _as_can_reexec
- # 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 sensitive to this).
- . "./$as_me.lineno"
- # Exit status is that of the last command.
- exit
-}
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
- case `echo 'xy\c'` in
- *c*) ECHO_T=' ';; # ECHO_T is single tab character.
- xy) ECHO_C='\c';;
- *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
- ECHO_T=' ';;
- esac;;
-*)
- ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
- rm -f conf$$.dir/conf$$.file
-else
- rm -f conf$$.dir
- mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
- if ln -s conf$$.file conf$$ 2>/dev/null; then
- as_ln_s='ln -s'
- # ... but there are two gotchas:
- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -pR'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -pR'
- elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
- else
- as_ln_s='cp -pR'
- fi
-else
- as_ln_s='cp -pR'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p='mkdir -p "$as_dir"'
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-as_test_x='test -x'
-as_executable_p=as_fn_executable_p
-
-# 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'"
-
-
-test -n "$DJDIR" || exec 7<&0 </dev/null
-exec 6>&1
-
-# Name of the host.
-# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
-# so uname gets run too.
-ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
-
-#
-# Initializations.
-#
-ac_default_prefix=/usr/local
-ac_clean_files=
-ac_config_libobj_dir=.
-LIBOBJS=
-cross_compiling=no
-subdirs=
-MFLAGS=
-MAKEFLAGS=
-
-# Identity of this package.
-PACKAGE_NAME='Cygwin Cygserver'
-PACKAGE_TARNAME='cygwin'
-PACKAGE_VERSION='0'
-PACKAGE_STRING='Cygwin Cygserver 0'
-PACKAGE_BUGREPORT='cygwin@cygwin.com'
-PACKAGE_URL='https://cygwin.com'
-
-ac_unique_file="cygserver.cc"
-ac_no_link=no
-ac_subst_vars='LTLIBOBJS
-LIBOBJS
-configure_args
-SET_MAKE
-WINDRES
-DLLTOOL
-NM
-LD
-RANLIB
-AS
-AR
-install_host
-all_host
-cygwin_headers
-newlib_headers
-windows_headers
-windows_libdir
-CPP
-ac_ct_CXX
-CXXFLAGS
-CXX
-OBJEXT
-EXEEXT
-ac_ct_CC
-CPPFLAGS
-LDFLAGS
-CFLAGS
-CC
-target_os
-target_vendor
-target_cpu
-target
-host_os
-host_vendor
-host_cpu
-host
-build_os
-build_vendor
-build_cpu
-build
-INSTALL_DATA
-INSTALL_SCRIPT
-INSTALL_PROGRAM
-target_alias
-host_alias
-build_alias
-LIBS
-ECHO_T
-ECHO_N
-ECHO_C
-DEFS
-mandir
-localedir
-libdir
-psdir
-pdfdir
-dvidir
-htmldir
-infodir
-docdir
-oldincludedir
-includedir
-localstatedir
-sharedstatedir
-sysconfdir
-datadir
-datarootdir
-libexecdir
-sbindir
-bindir
-program_transform_name
-prefix
-exec_prefix
-PACKAGE_URL
-PACKAGE_BUGREPORT
-PACKAGE_STRING
-PACKAGE_VERSION
-PACKAGE_TARNAME
-PACKAGE_NAME
-PATH_SEPARATOR
-SHELL
-winsup_srcdir
-target_builddir'
-ac_subst_files=''
-ac_user_opts='
-enable_option_checking
-with_windows_headers
-with_windows_libs
-enable_debugging
-'
- ac_precious_vars='build_alias
-host_alias
-target_alias
-CC
-CFLAGS
-LDFLAGS
-LIBS
-CPPFLAGS
-CXX
-CXXFLAGS
-CCC
-CPP'
-
-
-# Initialize some variables set by options.
-ac_init_help=
-ac_init_version=false
-ac_unrecognized_opts=
-ac_unrecognized_sep=
-# 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.
-# (The list follows the same order as the GNU Coding Standards.)
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datarootdir='${prefix}/share'
-datadir='${datarootdir}'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
-infodir='${datarootdir}/info'
-htmldir='${docdir}'
-dvidir='${docdir}'
-pdfdir='${docdir}'
-psdir='${docdir}'
-libdir='${exec_prefix}/lib'
-localedir='${datarootdir}/locale'
-mandir='${datarootdir}/man'
-
-ac_prev=
-ac_dashdash=
-for ac_option
-do
- # If the previous option needs an argument, assign it.
- if test -n "$ac_prev"; then
- eval $ac_prev=\$ac_option
- ac_prev=
- continue
- fi
-
- case $ac_option in
- *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
- *=) ac_optarg= ;;
- *) ac_optarg=yes ;;
- esac
-
- # Accept the important Cygnus configure options, so we can diagnose typos.
-
- case $ac_dashdash$ac_option in
- --)
- ac_dashdash=yes ;;
-
- -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)
- ac_prev=datadir ;;
- -datadir=* | --datadir=* | --datadi=* | --datad=*)
- datadir=$ac_optarg ;;
-
- -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
- | --dataroo | --dataro | --datar)
- ac_prev=datarootdir ;;
- -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
- | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
- datarootdir=$ac_optarg ;;
-
- -disable-* | --disable-*)
- ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid feature name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"enable_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval enable_$ac_useropt=no ;;
-
- -docdir | --docdir | --docdi | --doc | --do)
- ac_prev=docdir ;;
- -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
- docdir=$ac_optarg ;;
-
- -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
- ac_prev=dvidir ;;
- -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
- dvidir=$ac_optarg ;;
-
- -enable-* | --enable-*)
- ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid feature name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"enable_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval enable_$ac_useropt=\$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 ;;
-
- -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
- ac_prev=htmldir ;;
- -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
- | --ht=*)
- htmldir=$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 ;;
-
- -localedir | --localedir | --localedi | --localed | --locale)
- ac_prev=localedir ;;
- -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
- localedir=$ac_optarg ;;
-
- -localstatedir | --localstatedir | --localstatedi | --localstated \
- | --localstate | --localstat | --localsta | --localst | --locals)
- ac_prev=localstatedir ;;
- -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
- | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
- 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 ;;
-
- -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
- ac_prev=pdfdir ;;
- -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
- pdfdir=$ac_optarg ;;
-
- -psdir | --psdir | --psdi | --psd | --ps)
- ac_prev=psdir ;;
- -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
- psdir=$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_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid package name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"with_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval with_$ac_useropt=\$ac_optarg ;;
-
- -without-* | --without-*)
- ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid package name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"with_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval with_$ac_useropt=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 ;;
-
- -*) as_fn_error $? "unrecognized option: \`$ac_option'
-Try \`$0 --help' for more information"
- ;;
-
- *=*)
- ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
- # Reject names that are not valid shell variable names.
- case $ac_envvar in #(
- '' | [0-9]* | *[!_$as_cr_alnum]* )
- as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
- esac
- eval $ac_envvar=\$ac_optarg
- export $ac_envvar ;;
-
- *)
- # FIXME: should be removed in autoconf 3.0.
- $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
- expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- $as_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'`
- as_fn_error $? "missing argument to $ac_option"
-fi
-
-if test -n "$ac_unrecognized_opts"; then
- case $enable_option_checking in
- no) ;;
- fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
- *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
- esac
-fi
-
-# Check all directory arguments for consistency.
-for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
- datadir sysconfdir sharedstatedir localstatedir includedir \
- oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
- libdir localedir mandir
-do
- eval ac_val=\$$ac_var
- # Remove trailing slashes.
- case $ac_val in
- */ )
- ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
- eval $ac_var=\$ac_val;;
- esac
- # Be sure to have absolute directory names.
- case $ac_val in
- [\\/$]* | ?:[\\/]* ) continue;;
- NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
- esac
- as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
-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
- 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
-
-
-ac_pwd=`pwd` && test -n "$ac_pwd" &&
-ac_ls_di=`ls -di .` &&
-ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
- as_fn_error $? "working directory cannot be determined"
-test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
- as_fn_error $? "pwd does not report name of working directory"
-
-
-# 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 the parent directory.
- ac_confdir=`$as_dirname -- "$as_myself" ||
-$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_myself" : 'X\(//\)[^/]' \| \
- X"$as_myself" : 'X\(//\)$' \| \
- X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_myself" |
- 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
- test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
- as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
-fi
-ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
-ac_abs_confdir=`(
- cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
- pwd)`
-# When building in place, set srcdir=.
-if test "$ac_abs_confdir" = "$ac_pwd"; then
- srcdir=.
-fi
-# Remove unnecessary trailing slashes from srcdir.
-# Double slashes in file names in object file debugging info
-# mess up M-x gdb in Emacs.
-case $srcdir in
-*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
-esac
-for ac_var in $ac_precious_vars; do
- eval ac_env_${ac_var}_set=\${${ac_var}+set}
- eval ac_env_${ac_var}_value=\$${ac_var}
- eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
- eval ac_cv_env_${ac_var}_value=\$${ac_var}
-done
-
-#
-# 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 Cygwin Cygserver 0 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 \`..']
-
-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]
- --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]
- --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
- --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
- --infodir=DIR info documentation [DATAROOTDIR/info]
- --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
- --mandir=DIR man documentation [DATAROOTDIR/man]
- --docdir=DIR documentation root [DATAROOTDIR/doc/cygwin]
- --htmldir=DIR html documentation [DOCDIR]
- --dvidir=DIR dvi documentation [DOCDIR]
- --pdfdir=DIR pdf documentation [DOCDIR]
- --psdir=DIR ps documentation [DOCDIR]
-_ACEOF
-
- cat <<\_ACEOF
-
-System types:
- --build=BUILD configure for building on BUILD [guessed]
- --host=HOST cross-compile to build programs to run on HOST [BUILD]
- --target=TARGET configure for building compilers for TARGET [HOST]
-_ACEOF
-fi
-
-if test -n "$ac_init_help"; then
- case $ac_init_help in
- short | recursive ) echo "Configuration of Cygwin Cygserver 0:";;
- esac
- cat <<\_ACEOF
-
-Optional Features:
- --disable-option-checking ignore unrecognized --enable/--with options
- --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
- --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
- --enable-debugging Build a cygwin DLL which has more consistency checking for debugging
-
-Optional Packages:
- --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
- --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
- --with-windows-headers=DIR
- specify where the windows includes are located
- --with-windows-libs=DIR specify where the windows libraries are located
-
-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>
- LIBS libraries to pass to the linker, e.g. -l<library>
- CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
- you have headers in a nonstandard directory <include dir>
- CXX C++ compiler command
- CXXFLAGS C++ compiler flags
- 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.
-
-Report bugs to <cygwin@cygwin.com>.
-Cygwin Cygserver home page: <https://cygwin.com>.
-_ACEOF
-ac_status=$?
-fi
-
-if test "$ac_init_help" = "recursive"; then
- # If there are subdirs, report their specific --help.
- for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
- test -d "$ac_dir" ||
- { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
- continue
- ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
- # A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
- esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
- .) # We are building in place.
- ac_srcdir=.
- ac_top_srcdir=$ac_top_builddir_sub
- ac_abs_top_srcdir=$ac_pwd ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir
- ac_abs_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_build_prefix$srcdir
- ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
- cd "$ac_dir" || { ac_status=$?; continue; }
- # Check for guested 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
- else
- $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
- fi || ac_status=$?
- cd "$ac_pwd" || { ac_status=$?; break; }
- done
-fi
-
-test -n "$ac_init_help" && exit $ac_status
-if $ac_init_version; then
- cat <<\_ACEOF
-Cygwin Cygserver configure 0
-generated by GNU Autoconf 2.69
-
-Copyright (C) 2012 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
-fi
-
-## ------------------------ ##
-## Autoconf initialization. ##
-## ------------------------ ##
-
-# ac_fn_c_try_compile LINENO
-# --------------------------
-# Try to compile conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_compile ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext
- if { { ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compile") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_compile
-
-# ac_fn_cxx_try_compile LINENO
-# ----------------------------
-# Try to compile conftest.$ac_ext, and return whether this succeeded.
-ac_fn_cxx_try_compile ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext
- if { { ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compile") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && {
- test -z "$ac_cxx_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_cxx_try_compile
-
-# ac_fn_c_try_cpp LINENO
-# ----------------------
-# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_cpp ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if { { ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } > conftest.i && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_cpp
-cat >config.log <<_ACEOF
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-
-It was created by Cygwin Cygserver $as_me 0, which was
-generated by GNU Autoconf 2.69. Invocation command line was
-
- $ $0 $@
-
-_ACEOF
-exec 5>>config.log
-{
-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`
-/usr/bin/hostinfo = `(/usr/bin/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=.
- $as_echo "PATH: $as_dir"
- done
-IFS=$as_save_IFS
-
-} >&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_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=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- case $ac_pass in
- 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
- 2)
- as_fn_append 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
- as_fn_append ac_configure_args " '$ac_arg'"
- ;;
- esac
- done
-done
-{ ac_configure_args0=; unset ac_configure_args0;}
-{ ac_configure_args1=; unset 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: Use '\'' to represent an apostrophe within the trap.
-# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
-trap 'exit_status=$?
- # Save into config.log some information that might help in debugging.
- {
- echo
-
- $as_echo "## ---------------- ##
-## Cache variables. ##
-## ---------------- ##"
- echo
- # The following way of writing the cache mishandles newlines in values,
-(
- for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
- eval ac_val=\$$ac_var
- case $ac_val in #(
- *${as_nl}*)
- case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
- esac
- case $ac_var in #(
- _ | IFS | as_nl) ;; #(
- BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
- *) { eval $ac_var=; unset $ac_var;} ;;
- esac ;;
- esac
- done
- (set) 2>&1 |
- case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
- *${as_nl}ac_space=\ *)
- sed -n \
- "s/'\''/'\''\\\\'\'''\''/g;
- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
- ;; #(
- *)
- sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
- ;;
- esac |
- sort
-)
- echo
-
- $as_echo "## ----------------- ##
-## Output variables. ##
-## ----------------- ##"
- echo
- for ac_var in $ac_subst_vars
- do
- eval ac_val=\$$ac_var
- case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
- esac
- $as_echo "$ac_var='\''$ac_val'\''"
- done | sort
- echo
-
- if test -n "$ac_subst_files"; then
- $as_echo "## ------------------- ##
-## File substitutions. ##
-## ------------------- ##"
- echo
- for ac_var in $ac_subst_files
- do
- eval ac_val=\$$ac_var
- case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
- esac
- $as_echo "$ac_var='\''$ac_val'\''"
- done | sort
- echo
- fi
-
- if test -s confdefs.h; then
- $as_echo "## ----------- ##
-## confdefs.h. ##
-## ----------- ##"
- echo
- cat confdefs.h
- echo
- fi
- test "$ac_signal" != 0 &&
- $as_echo "$as_me: caught signal $ac_signal"
- $as_echo "$as_me: exit $exit_status"
- } >&5
- rm -f core *.core core.conftest.* &&
- rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
- exit $exit_status
-' 0
-for ac_signal in 1 2 13 15; do
- trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
-done
-ac_signal=0
-
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -f -r conftest* confdefs.h
-
-$as_echo "/* confdefs.h */" > 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
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_URL "$PACKAGE_URL"
-_ACEOF
-
-
-# Let the site file select an alternate cache file if it wants to.
-# Prefer an explicitly selected file to automatically selected ones.
-ac_site_file1=NONE
-ac_site_file2=NONE
-if test -n "$CONFIG_SITE"; then
- # We do not want a PATH search for config.site.
- case $CONFIG_SITE in #((
- -*) ac_site_file1=./$CONFIG_SITE;;
- */*) ac_site_file1=$CONFIG_SITE;;
- *) ac_site_file1=./$CONFIG_SITE;;
- esac
-elif test "x$prefix" != xNONE; then
- ac_site_file1=$prefix/share/config.site
- ac_site_file2=$prefix/etc/config.site
-else
- ac_site_file1=$ac_default_prefix/share/config.site
- ac_site_file2=$ac_default_prefix/etc/config.site
-fi
-for ac_site_file in "$ac_site_file1" "$ac_site_file2"
-do
- test "x$ac_site_file" = xNONE && continue
- if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
-$as_echo "$as_me: loading site script $ac_site_file" >&6;}
- sed 's/^/| /' "$ac_site_file" >&5
- . "$ac_site_file" \
- || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "failed to load site script $ac_site_file
-See \`config.log' for more details" "$LINENO" 5; }
- 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. DJGPP emulates it as a regular file.
- if test /dev/null != "$cache_file" && test -f "$cache_file"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
-$as_echo "$as_me: loading cache $cache_file" >&6;}
- case $cache_file in
- [\\/]* | ?:[\\/]* ) . "$cache_file";;
- *) . "./$cache_file";;
- esac
- fi
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
-$as_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 $ac_precious_vars; 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,)
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
- ac_cache_corrupted=: ;;
- ,set)
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
-$as_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
- # differences in whitespace do not lead to failure.
- ac_old_val_w=`echo x $ac_old_val`
- ac_new_val_w=`echo x $ac_new_val`
- if test "$ac_old_val_w" != "$ac_new_val_w"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
-$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
- ac_cache_corrupted=:
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
-$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
- eval $ac_var=\$ac_old_val
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
-$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
-$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
- fi;;
- esac
- # Pass precious variables to config.status.
- if test "$ac_new_set" = set; then
- case $ac_new_val in
- *\'*) ac_arg=$ac_var=`$as_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.
- *) as_fn_append ac_configure_args " '$ac_arg'" ;;
- esac
- fi
-done
-if $ac_cache_corrupted; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
-$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
- as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
-fi
-## -------------------- ##
-## Main body of script. ##
-## -------------------- ##
-
-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_aux_dir=
-for ac_dir in .. "$srcdir"/..; do
- if test -f "$ac_dir/install-sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install-sh -c"
- break
- elif test -f "$ac_dir/install.sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install.sh -c"
- break
- elif test -f "$ac_dir/shtool"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/shtool install -c"
- break
- fi
-done
-if test -z "$ac_aux_dir"; then
- as_fn_error $? "cannot find install-sh, install.sh, or shtool in .. \"$srcdir\"/.." "$LINENO" 5
-fi
-
-# These three variables are undocumented and unsupported,
-# and are intended to be withdrawn in a future Autoconf release.
-# They can cause serious problems if a builder's source tree is in a directory
-# whose full name contains unusual characters.
-ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
-ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
-ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
-
-
-
-. ${srcdir}/../configure.cygwin
-
-# Find a good install program. We prefer a C program (faster),
-# so one script is as good as another. But avoid the broken or
-# incompatible versions:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if ${ac_cv_path_install+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
- ./ | .// | /[cC]/* | \
- /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
- ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
- /usr/ucb/* ) ;;
- *)
- # OSF1 and SCO ODT 3.0 have their own names for install.
- # Don't use installbsd from OSF since it installs stuff as root
- # by default.
- for ac_prog in ginstall scoinst install; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
- if test $ac_prog = install &&
- grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
- # AIX install. It has an incompatible calling convention.
- :
- elif test $ac_prog = install &&
- grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
- # program-specific install script used by HP pwplus--don't use.
- :
- else
- rm -rf conftest.one conftest.two conftest.dir
- echo one > conftest.one
- echo two > conftest.two
- mkdir conftest.dir
- if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
- test -s conftest.one && test -s conftest.two &&
- test -s conftest.dir/conftest.one &&
- test -s conftest.dir/conftest.two
- then
- ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
- break 3
- fi
- fi
- fi
- done
- done
- ;;
-esac
-
- done
-IFS=$as_save_IFS
-
-rm -rf conftest.one conftest.two conftest.dir
-
-fi
- if test "${ac_cv_path_install+set}" = set; then
- INSTALL=$ac_cv_path_install
- else
- # As a last resort, use the slow shell script. Don't cache a
- # value for INSTALL within a source directory, because that will
- # break other packages using the cache if that directory is
- # removed, or if the value is a relative name.
- INSTALL=$ac_install_sh
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-
-# Make sure we can run config.sub.
-$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
- as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
-$as_echo_n "checking build system type... " >&6; }
-if ${ac_cv_build+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_build_alias=$build_alias
-test "x$ac_build_alias" = x &&
- ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
-test "x$ac_build_alias" = x &&
- as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
-ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
- as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
-$as_echo "$ac_cv_build" >&6; }
-case $ac_cv_build in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
-esac
-build=$ac_cv_build
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_build
-shift
-build_cpu=$1
-build_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-build_os=$*
-IFS=$ac_save_IFS
-case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
-$as_echo_n "checking host system type... " >&6; }
-if ${ac_cv_host+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test "x$host_alias" = x; then
- ac_cv_host=$ac_cv_build
-else
- ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
- as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
-$as_echo "$ac_cv_host" >&6; }
-case $ac_cv_host in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
-esac
-host=$ac_cv_host
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_host
-shift
-host_cpu=$1
-host_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-host_os=$*
-IFS=$ac_save_IFS
-case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5
-$as_echo_n "checking target system type... " >&6; }
-if ${ac_cv_target+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test "x$target_alias" = x; then
- ac_cv_target=$ac_cv_host
-else
- ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` ||
- as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5
-$as_echo "$ac_cv_target" >&6; }
-case $ac_cv_target in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;;
-esac
-target=$ac_cv_target
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_target
-shift
-target_cpu=$1
-target_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-target_os=$*
-IFS=$ac_save_IFS
-case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac
-
-
-# The aliases save the names the user supplied, while $host etc.
-# will get canonicalized.
-test -n "$target_alias" &&
- test "$program_prefix$program_suffix$program_transform_name" = \
- NONENONEs,x,x, &&
- program_prefix=${target_alias}-
-
-
-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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="${ac_tool_prefix}gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
- $as_echo_n "(cached) " >&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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="${ac_tool_prefix}cc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- 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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&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_fn_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"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-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
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- for ac_prog in cl.exe
- 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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$CC" && break
- done
-fi
-if test -z "$CC"; then
- ac_ct_CC=$CC
- for ac_prog in cl.exe
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
- $as_echo_n "(cached) " >&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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$ac_ct_CC" && break
-done
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-fi
-
-fi
-
-
-test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "no acceptable C compiler found in \$PATH
-See \`config.log' for more details" "$LINENO" 5; }
-
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
- { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compiler $ac_option >&5") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- sed '10a\
-... rest of stderr output deleted ...
- 10q' conftest.err >conftest.er1
- cat conftest.er1 >&5
- fi
- rm -f conftest.er1 conftest.err
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
-done
-
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- ac_no_link=no
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.out.dSYM 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.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
-$as_echo_n "checking whether the C compiler works... " >&6; }
-ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-
-# The possible output files:
-ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
-
-ac_rmfiles=
-for ac_file in $ac_files
-do
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
- * ) ac_rmfiles="$ac_rmfiles $ac_file";;
- esac
-done
-rm -f $ac_rmfiles
-
-if { { ac_try="$ac_link_default"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link_default") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
- # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
-# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
-# in a Makefile. We should not override ac_cv_exeext if it was cached,
-# so that the user can short-circuit this test for compilers unknown to
-# Autoconf.
-for ac_file in $ac_files ''
-do
- test -f "$ac_file" || continue
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
- ;;
- [ab].out )
- # We found the default executable, but exeext='' is most
- # certainly right.
- break;;
- *.* )
- if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
- then :; else
- ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- fi
- # We set ac_cv_exeext here because the later test for it is not
- # safe: cross compilers may not add the suffix if given an `-o'
- # argument, so we may need to know it at that point already.
- # Even if this section looks crufty: it has the advantage of
- # actually working.
- break;;
- * )
- break;;
- esac
-done
-test "$ac_cv_exeext" = no && ac_cv_exeext=
-
-else
- ac_file=''
-fi
-if test -z "$ac_file"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-$as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "C compiler cannot create executables
-See \`config.log' for more details" "$LINENO" 5; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
-$as_echo_n "checking for C compiler default output file name... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
-ac_exeext=$ac_cv_exeext
-
-rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
-ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
-$as_echo_n "checking for suffix of executables... " >&6; }
-if { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; 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 | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
- *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- break;;
- * ) break;;
- esac
-done
-else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-rm -f conftest conftest$ac_cv_exeext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
-$as_echo "$ac_cv_exeext" >&6; }
-
-rm -f conftest.$ac_ext
-EXEEXT=$ac_cv_exeext
-ac_exeext=$EXEEXT
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdio.h>
-int
-main ()
-{
-FILE *f = fopen ("conftest.out", "w");
- return ferror (f) || fclose (f) != 0;
-
- ;
- return 0;
-}
-_ACEOF
-ac_clean_files="$ac_clean_files conftest.out"
-# Check that the compiler produces executables we can run. If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
-if test "$cross_compiling" != yes; then
- { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
- if { ac_try='./conftest$ac_cv_exeext'
- { { case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then
- cross_compiling=no
- else
- if test "$cross_compiling" = maybe; then
- cross_compiling=yes
- else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details" "$LINENO" 5; }
- fi
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
-
-rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
-ac_clean_files=$ac_clean_files_save
-
-else
- rm -f -r a.out a.exe b.out conftest.$ac_ext conftest.o conftest.obj conftest.dSYM
- ac_no_link=yes
- # Setting cross_compile will disable run tests; it will
- # also disable AC_CHECK_FILE but that's generally
- # correct if we can't link.
- cross_compiling=yes
- EXEEXT=
- # Check that the compiler produces executables we can run. If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
-if test "$cross_compiling" != yes; then
- { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
- if { ac_try='./conftest$ac_cv_exeext'
- { { case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then
- cross_compiling=no
- else
- if test "$cross_compiling" = maybe; then
- cross_compiling=yes
- else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details" "$LINENO" 5; }
- fi
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
-$as_echo_n "checking for suffix of object files... " >&6; }
-if ${ac_cv_objext+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.o conftest.obj
-if { { ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compile") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
- for ac_file in conftest.o conftest.obj conftest.*; do
- test -f "$ac_file" || continue;
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
- *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
- break;;
- esac
-done
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of object files: cannot compile
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
-$as_echo "$ac_cv_objext" >&6; }
-OBJEXT=$ac_cv_objext
-ac_objext=$OBJEXT
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
-$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if ${ac_cv_c_compiler_gnu+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-#ifndef __GNUC__
- choke me
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_compiler_gnu=yes
-else
- ac_compiler_gnu=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
-$as_echo "$ac_cv_c_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
- GCC=yes
-else
- GCC=
-fi
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if ${ac_cv_prog_cc_g+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_save_c_werror_flag=$ac_c_werror_flag
- ac_c_werror_flag=yes
- ac_cv_prog_cc_g=no
- CFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_g=yes
-else
- CFLAGS=""
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-else
- ac_c_werror_flag=$ac_save_c_werror_flag
- CFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_g=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_c_werror_flag=$ac_save_c_werror_flag
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
-$as_echo "$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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if ${ac_cv_prog_cc_c89+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_cv_prog_cc_c89=no
-ac_save_CC=$CC
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdarg.h>
-#include <stdio.h>
-struct stat;
-/* 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 -std 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 -std. */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
- inside strings and character constants. */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 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
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
- -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
- CC="$ac_save_CC $ac_arg"
- if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_c89=$ac_arg
-fi
-rm -f core conftest.err conftest.$ac_objext
- test "x$ac_cv_prog_cc_c89" != "xno" && break
-done
-rm -f conftest.$ac_ext
-CC=$ac_save_CC
-
-fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
- x)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
- xno)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
- *)
- CC="$CC $ac_cv_prog_cc_c89"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-if test "x$ac_cv_prog_cc_c89" != xno; then :
-
-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_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-if test -z "$CXX"; then
- if test -n "$CCC"; then
- CXX=$CCC
- else
- if test -n "$ac_tool_prefix"; then
- for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
- 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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CXX+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CXX"; then
- ac_cv_prog_CXX="$CXX" # 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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CXX=$ac_cv_prog_CXX
-if test -n "$CXX"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
-$as_echo "$CXX" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$CXX" && break
- done
-fi
-if test -z "$CXX"; then
- ac_ct_CXX=$CXX
- for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CXX+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_CXX"; then
- ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # 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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CXX="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
-if test -n "$ac_ct_CXX"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
-$as_echo "$ac_ct_CXX" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$ac_ct_CXX" && break
-done
-
- if test "x$ac_ct_CXX" = x; then
- CXX="g++"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CXX=$ac_ct_CXX
- fi
-fi
-
- fi
-fi
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
- { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compiler $ac_option >&5") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- sed '10a\
-... rest of stderr output deleted ...
- 10q' conftest.err >conftest.er1
- cat conftest.er1 >&5
- fi
- rm -f conftest.er1 conftest.err
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
-done
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
-$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
-if ${ac_cv_cxx_compiler_gnu+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-#ifndef __GNUC__
- choke me
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- ac_compiler_gnu=yes
-else
- ac_compiler_gnu=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
-$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
- GXX=yes
-else
- GXX=
-fi
-ac_test_CXXFLAGS=${CXXFLAGS+set}
-ac_save_CXXFLAGS=$CXXFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
-$as_echo_n "checking whether $CXX accepts -g... " >&6; }
-if ${ac_cv_prog_cxx_g+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_save_cxx_werror_flag=$ac_cxx_werror_flag
- ac_cxx_werror_flag=yes
- ac_cv_prog_cxx_g=no
- CXXFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- ac_cv_prog_cxx_g=yes
-else
- CXXFLAGS=""
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-
-else
- ac_cxx_werror_flag=$ac_save_cxx_werror_flag
- CXXFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- ac_cv_prog_cxx_g=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_cxx_werror_flag=$ac_save_cxx_werror_flag
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
-$as_echo "$ac_cv_prog_cxx_g" >&6; }
-if test "$ac_test_CXXFLAGS" = set; then
- CXXFLAGS=$ac_save_CXXFLAGS
-elif test $ac_cv_prog_cxx_g = yes; then
- if test "$GXX" = yes; then
- CXXFLAGS="-g -O2"
- else
- CXXFLAGS="-g"
- fi
-else
- if test "$GXX" = yes; then
- CXXFLAGS="-O2"
- else
- CXXFLAGS=
- fi
-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_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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
-$as_echo_n "checking how to run the C preprocessor... " >&6; }
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
- CPP=
-fi
-if test -z "$CPP"; then
- if ${ac_cv_prog_CPP+:} false; then :
- $as_echo_n "(cached) " >&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 confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- # Broken: success on invalid input.
-continue
-else
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i 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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
-$as_echo "$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 confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- # Broken: success on invalid input.
-continue
-else
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-
-else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details" "$LINENO" 5; }
-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_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
-
-
-
-
-# Check whether --with-windows-headers was given.
-if test "${with_windows_headers+set}" = set; then :
- withval=$with_windows_headers; test -z "$withval" && as_fn_error $? "must specify value for --with-windows-headers" "$LINENO" 5
-
-fi
-
-
-
-
-# Check whether --with-windows-libs was given.
-if test "${with_windows_libs+set}" = set; then :
- withval=$with_windows_libs; test -z "$withval" && as_fn_error $? "must specify value for --with-windows-libs" "$LINENO" 5
-
-fi
-
-windows_libdir=$(realdirpath "$with_windows_libs")
-if test -z "$windows_libdir"; then
- windows_libdir=$(realdirpath $(${ac_cv_prog_CC:-$CC} -xc /dev/null -Wl,--verbose=1 -lntdll 2>&1 | sed -rn 's%^.*\s(\S+)/libntdll\..*succeeded%\1%p'))
- if test -z "$windows_libdir"; then
- as_fn_error $? "cannot find windows library files" "$LINENO" 5
- fi
-fi
-
-
-
-
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-
-
-addto_CPPFLAGS -nostdinc
-: ${ac_cv_prog_CXX:=$CXX}
-: ${ac_cv_prog_CC:=$CC}
-
-cygwin_headers=$(realdirpath "$winsup_srcdir/cygwin/include")
-if test -z "$cygwin_headers"; then
- as_fn_error $? "cannot find $winsup_srcdir/cygwin/include directory" "$LINENO" 5
-fi
-
-newlib_headers=$(realdirpath $winsup_srcdir/../newlib/libc/include)
-if test -z "$newlib_headers"; then
- as_fn_error $? "cannot find newlib source directory: $winsup_srcdir/../newlib/libc/include" "$LINENO" 5
-fi
-newlib_headers="$target_builddir/newlib/targ-include $newlib_headers"
-
-if test -n "$with_windows_headers"; then
- if test -e "$with_windows_headers/windef.h"; then
- windows_headers="$with_windows_headers"
- else
- as_fn_error $? "cannot find windef.h in specified --with-windows-headers path: $saw_windows_headers" "$LINENO" 5;
- fi
-elif test -d "$winsup_srcdir/w32api/include/windef.h"; then
- windows_headers="$winsup_srcdir/w32api/include"
-else
- windows_headers=$(cd $($ac_cv_prog_CC -xc /dev/null -E -include windef.h 2>/dev/null | sed -n 's%^# 1 "\([^"]*\)/windef\.h".*$%\1%p' | head -n1) 2>/dev/null && pwd)
- if test -z "$windows_headers" -o ! -d "$windows_headers"; then
- as_fn_error $? "cannot find windows header files" "$LINENO" 5
- fi
-fi
-CC=$ac_cv_prog_CC
-CXX=$ac_cv_prog_CXX
-export CC
-export CXX
-
-
-
-
-
-case "$with_cross_host" in
- ""|*cygwin*)
- all_host="all_host"
- install_host="install_host"
- ;;
- *)
- all_host=
- install_host=
- ;;
-esac
-
-
-
-
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ar; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_AR+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$AR"; then
- ac_cv_prog_AR="$AR" # 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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_AR="${ac_tool_prefix}ar"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-AR=$ac_cv_prog_AR
-if test -n "$AR"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
-$as_echo "$AR" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_AR"; then
- ac_ct_AR=$AR
- # Extract the first word of "ar", so it can be a program name with args.
-set dummy ar; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_AR+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_AR"; then
- ac_cv_prog_ac_ct_AR="$ac_ct_AR" # 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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_AR="ar"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_AR=$ac_cv_prog_ac_ct_AR
-if test -n "$ac_ct_AR"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
-$as_echo "$ac_ct_AR" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_AR" = x; then
- AR="ar"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- AR=$ac_ct_AR
- fi
-else
- AR="$ac_cv_prog_AR"
-fi
-
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args.
-set dummy ${ac_tool_prefix}as; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_AS+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$AS"; then
- ac_cv_prog_AS="$AS" # 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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_AS="${ac_tool_prefix}as"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-AS=$ac_cv_prog_AS
-if test -n "$AS"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5
-$as_echo "$AS" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_AS"; then
- ac_ct_AS=$AS
- # Extract the first word of "as", so it can be a program name with args.
-set dummy as; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_AS+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_AS"; then
- ac_cv_prog_ac_ct_AS="$ac_ct_AS" # 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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_AS="as"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_AS=$ac_cv_prog_ac_ct_AS
-if test -n "$ac_ct_AS"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5
-$as_echo "$ac_ct_AS" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_AS" = x; then
- AS="as"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- AS=$ac_ct_AS
- fi
-else
- AS="$ac_cv_prog_AS"
-fi
-
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ranlib; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_RANLIB+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$RANLIB"; then
- ac_cv_prog_RANLIB="$RANLIB" # 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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-RANLIB=$ac_cv_prog_RANLIB
-if test -n "$RANLIB"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
-$as_echo "$RANLIB" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_RANLIB"; then
- ac_ct_RANLIB=$RANLIB
- # Extract the first word of "ranlib", so it can be a program name with args.
-set dummy ranlib; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_RANLIB"; then
- ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # 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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_RANLIB="ranlib"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
-if test -n "$ac_ct_RANLIB"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
-$as_echo "$ac_ct_RANLIB" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_RANLIB" = x; then
- RANLIB="ranlib"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- RANLIB=$ac_ct_RANLIB
- fi
-else
- RANLIB="$ac_cv_prog_RANLIB"
-fi
-
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}ld", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ld; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_LD+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$LD"; then
- ac_cv_prog_LD="$LD" # 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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_LD="${ac_tool_prefix}ld"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-LD=$ac_cv_prog_LD
-if test -n "$LD"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
-$as_echo "$LD" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_LD"; then
- ac_ct_LD=$LD
- # Extract the first word of "ld", so it can be a program name with args.
-set dummy ld; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_LD+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_LD"; then
- ac_cv_prog_ac_ct_LD="$ac_ct_LD" # 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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_LD="ld"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_LD=$ac_cv_prog_ac_ct_LD
-if test -n "$ac_ct_LD"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LD" >&5
-$as_echo "$ac_ct_LD" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_LD" = x; then
- LD="ld"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- LD=$ac_ct_LD
- fi
-else
- LD="$ac_cv_prog_LD"
-fi
-
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}nm", so it can be a program name with args.
-set dummy ${ac_tool_prefix}nm; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_NM+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$NM"; then
- ac_cv_prog_NM="$NM" # 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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_NM="${ac_tool_prefix}nm"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-NM=$ac_cv_prog_NM
-if test -n "$NM"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NM" >&5
-$as_echo "$NM" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_NM"; then
- ac_ct_NM=$NM
- # Extract the first word of "nm", so it can be a program name with args.
-set dummy nm; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_NM+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_NM"; then
- ac_cv_prog_ac_ct_NM="$ac_ct_NM" # 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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_NM="nm"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_NM=$ac_cv_prog_ac_ct_NM
-if test -n "$ac_ct_NM"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NM" >&5
-$as_echo "$ac_ct_NM" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_NM" = x; then
- NM="nm"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- NM=$ac_ct_NM
- fi
-else
- NM="$ac_cv_prog_NM"
-fi
-
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
-set dummy ${ac_tool_prefix}dlltool; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_DLLTOOL+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$DLLTOOL"; then
- ac_cv_prog_DLLTOOL="$DLLTOOL" # 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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-DLLTOOL=$ac_cv_prog_DLLTOOL
-if test -n "$DLLTOOL"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
-$as_echo "$DLLTOOL" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_DLLTOOL"; then
- ac_ct_DLLTOOL=$DLLTOOL
- # Extract the first word of "dlltool", so it can be a program name with args.
-set dummy dlltool; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_DLLTOOL"; then
- ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # 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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_DLLTOOL="dlltool"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
-if test -n "$ac_ct_DLLTOOL"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
-$as_echo "$ac_ct_DLLTOOL" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_DLLTOOL" = x; then
- DLLTOOL="dlltool"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- DLLTOOL=$ac_ct_DLLTOOL
- fi
-else
- DLLTOOL="$ac_cv_prog_DLLTOOL"
-fi
-
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args.
-set dummy ${ac_tool_prefix}windres; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_WINDRES+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$WINDRES"; then
- ac_cv_prog_WINDRES="$WINDRES" # 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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_WINDRES="${ac_tool_prefix}windres"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-WINDRES=$ac_cv_prog_WINDRES
-if test -n "$WINDRES"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINDRES" >&5
-$as_echo "$WINDRES" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_WINDRES"; then
- ac_ct_WINDRES=$WINDRES
- # Extract the first word of "windres", so it can be a program name with args.
-set dummy windres; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_WINDRES+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_WINDRES"; then
- ac_cv_prog_ac_ct_WINDRES="$ac_ct_WINDRES" # 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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_WINDRES="windres"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_WINDRES=$ac_cv_prog_ac_ct_WINDRES
-if test -n "$ac_ct_WINDRES"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_WINDRES" >&5
-$as_echo "$ac_ct_WINDRES" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_WINDRES" = x; then
- WINDRES="windres"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- WINDRES=$ac_ct_WINDRES
- fi
-else
- WINDRES="$ac_cv_prog_WINDRES"
-fi
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
-$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
-set x ${MAKE-make}
-ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
-if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat >conftest.make <<\_ACEOF
-SHELL = /bin/sh
-all:
- @echo '@@@%%%=$(MAKE)=@@@%%%'
-_ACEOF
-# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
-case `${MAKE-make} -f conftest.make 2>/dev/null` in
- *@@@%%%=?*=@@@%%%*)
- eval ac_cv_prog_make_${ac_make}_set=yes;;
- *)
- eval ac_cv_prog_make_${ac_make}_set=no;;
-esac
-rm -f conftest.make
-fi
-if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- SET_MAKE=
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- SET_MAKE="MAKE=${MAKE-make}"
-fi
-
-
-# Check whether --enable-debugging was given.
-if test "${enable_debugging+set}" = set; then :
- enableval=$enable_debugging; case "${enableval}" in
-yes) $as_echo "#define DEBUGGING 1" >>confdefs.h
- ;;
-no) ;;
-esac
-
-fi
-
-
-
-configure_args=X
-for f in $ac_configure_args; do
- case "$f" in
- *--srcdir*) ;;
- *) configure_args="$configure_args $f" ;;
- esac
-done
-configure_args=$(/usr/bin/expr "$configure_args" : 'X \(.*\)')
-
-
-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, we kill variables containing newlines.
-# 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.
-(
- for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
- eval ac_val=\$$ac_var
- case $ac_val in #(
- *${as_nl}*)
- case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
- esac
- case $ac_var in #(
- _ | IFS | as_nl) ;; #(
- BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
- *) { eval $ac_var=; unset $ac_var;} ;;
- esac ;;
- esac
- done
-
- (set) 2>&1 |
- case $as_nl`(ac_space=' '; set) 2>&1` in #(
- *${as_nl}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 "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
- ;;
- esac |
- sort
-) |
- sed '
- /^ac_cv_env_/b end
- t clear
- :clear
- s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
- t end
- s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
- :end' >>confcache
-if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
- if test -w "$cache_file"; then
- if test "x$cache_file" != "x/dev/null"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
-$as_echo "$as_me: updating cache $cache_file" >&6;}
- if test ! -f "$cache_file" || test -h "$cache_file"; then
- cat confcache >"$cache_file"
- else
- case $cache_file in #(
- */* | ?:*)
- mv -f confcache "$cache_file"$$ &&
- mv -f "$cache_file"$$ "$cache_file" ;; #(
- *)
- mv -f confcache "$cache_file" ;;
- esac
- fi
- fi
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
-$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
- 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}'
-
-# Transform confdefs.h into DEFS.
-# Protect against shell expansion while executing Makefile rules.
-# Protect against Makefile macro expansion.
-#
-# If the first sed substitution is executed (which looks for macros that
-# take arguments), then branch to the quote section. Otherwise,
-# look for a macro that doesn't take arguments.
-ac_script='
-:mline
-/\\$/{
- N
- s,\\\n,,
- b mline
-}
-t clear
-:clear
-s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g
-t quote
-s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g
-t quote
-b any
-:quote
-s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g
-s/\[/\\&/g
-s/\]/\\&/g
-s/\$/$$/g
-H
-:any
-${
- g
- s/^\n//
- s/\n/ /g
- p
-}
-'
-DEFS=`sed -n "$ac_script" confdefs.h`
-
-
-ac_libobjs=
-ac_ltlibobjs=
-U=
-for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
- # 1. Remove the extension, and $U if already installed.
- ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
- ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
- # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
- # will be set to the directory where LIBOBJS objects are built.
- as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
- as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
-done
-LIBOBJS=$ac_libobjs
-
-LTLIBOBJS=$ac_ltlibobjs
-
-
-
-: "${CONFIG_STATUS=./config.status}"
-ac_write_fail=0
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
-as_write_fail=0
-cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
-#! $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}
-export SHELL
-_ASEOF
-cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
-## -------------------- ##
-## M4sh Initialization. ##
-## -------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in #(
- *posix*) :
- set -o posix ;; #(
- *) :
- ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- PATH_SEPARATOR=:
- (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
- (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
- PATH_SEPARATOR=';'
- }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
-# Find who we are. Look in the path if we contain no directory separator.
-as_myself=
-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
-IFS=$as_save_IFS
-
- ;;
-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
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
- exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
-as_fn_error ()
-{
- as_status=$1; test $as_status -eq 0 && as_status=1
- if test "$4"; then
- as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
- fi
- $as_echo "$as_me: error: $2" >&2
- as_fn_exit $as_status
-} # as_fn_error
-
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
- return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
- set +e
- as_fn_set_status $1
- exit $1
-} # as_fn_exit
-
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
- { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
- eval 'as_fn_append ()
- {
- eval $1+=\$2
- }'
-else
- as_fn_append ()
- {
- eval $1=\$$1\$2
- }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
- eval 'as_fn_arith ()
- {
- as_val=$(( $* ))
- }'
-else
- as_fn_arith ()
- {
- as_val=`expr "$@" || test $? -eq 1`
- }
-fi # as_fn_arith
-
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; 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
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
- }
- /^X\/\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\/\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
-
-# 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
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
- case `echo 'xy\c'` in
- *c*) ECHO_T=' ';; # ECHO_T is single tab character.
- xy) ECHO_C='\c';;
- *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
- ECHO_T=' ';;
- esac;;
-*)
- ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
- rm -f conf$$.dir/conf$$.file
-else
- rm -f conf$$.dir
- mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
- if ln -s conf$$.file conf$$ 2>/dev/null; then
- as_ln_s='ln -s'
- # ... but there are two gotchas:
- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -pR'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -pR'
- elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
- else
- as_ln_s='cp -pR'
- fi
-else
- as_ln_s='cp -pR'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
- case $as_dir in #(
- -*) as_dir=./$as_dir;;
- esac
- test -d "$as_dir" || eval $as_mkdir_p || {
- as_dirs=
- while :; do
- case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
- *) as_qdir=$as_dir;;
- esac
- as_dirs="'$as_qdir' $as_dirs"
- as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- test -d "$as_dir" && break
- done
- test -z "$as_dirs" || eval "mkdir $as_dirs"
- } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p='mkdir -p "$as_dir"'
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-
-# as_fn_executable_p FILE
-# -----------------------
-# Test if FILE is an executable regular file.
-as_fn_executable_p ()
-{
- test -f "$1" && test -x "$1"
-} # as_fn_executable_p
-as_test_x='test -x'
-as_executable_p=as_fn_executable_p
-
-# 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'"
-
-
-exec 6>&1
-## ----------------------------------- ##
-## Main body of $CONFIG_STATUS script. ##
-## ----------------------------------- ##
-_ASEOF
-test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# Save the log message, to keep $0 and so on meaningful, and to
-# report actual input values of CONFIG_FILES etc. instead of their
-# values after options handling.
-ac_log="
-This file was extended by Cygwin Cygserver $as_me 0, which was
-generated by GNU Autoconf 2.69. Invocation command line was
-
- CONFIG_FILES = $CONFIG_FILES
- CONFIG_HEADERS = $CONFIG_HEADERS
- CONFIG_LINKS = $CONFIG_LINKS
- CONFIG_COMMANDS = $CONFIG_COMMANDS
- $ $0 $@
-
-on `(hostname || uname -n) 2>/dev/null | sed 1q`
-"
-
-_ACEOF
-
-case $ac_config_files in *"
-"*) set x $ac_config_files; shift; ac_config_files=$*;;
-esac
-
-
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-# Files that config.status was made for.
-config_files="$ac_config_files"
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-ac_cs_usage="\
-\`$as_me' instantiates files and other configuration actions
-from templates according to the current configuration. Unless the files
-and actions are specified as TAGs, all are instantiated by default.
-
-Usage: $0 [OPTION]... [TAG]...
-
- -h, --help print this help, then exit
- -V, --version print version number and configuration settings, then exit
- --config print configuration, then exit
- -q, --quiet, --silent
- 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
-
-Configuration files:
-$config_files
-
-Report bugs to <cygwin@cygwin.com>.
-Cygwin Cygserver home page: <https://cygwin.com>."
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
-ac_cs_version="\\
-Cygwin Cygserver config.status 0
-configured by $0, generated by GNU Autoconf 2.69,
- with options \\"\$ac_cs_config\\"
-
-Copyright (C) 2012 Free Software Foundation, Inc.
-This config.status script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it."
-
-ac_pwd='$ac_pwd'
-srcdir='$srcdir'
-INSTALL='$INSTALL'
-test -n "\$AWK" || AWK=awk
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# The default lists apply if the user does not specify any file.
-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=`expr "X$1" : 'X\([^=]*\)='`
- ac_optarg=
- ac_shift=:
- ;;
- *)
- ac_option=$1
- ac_optarg=$2
- ac_shift=shift
- ;;
- esac
-
- case $ac_option in
- # Handling of the options.
- -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
- ac_cs_recheck=: ;;
- --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
- $as_echo "$ac_cs_version"; exit ;;
- --config | --confi | --conf | --con | --co | --c )
- $as_echo "$ac_cs_config"; exit ;;
- --debug | --debu | --deb | --de | --d | -d )
- debug=: ;;
- --file | --fil | --fi | --f )
- $ac_shift
- case $ac_optarg in
- *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
- '') as_fn_error $? "missing file argument" ;;
- esac
- as_fn_append CONFIG_FILES " '$ac_optarg'"
- ac_need_defaults=false;;
- --he | --h | --help | --hel | -h )
- $as_echo "$ac_cs_usage"; exit ;;
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil | --si | --s)
- ac_cs_silent=: ;;
-
- # This is an error.
- -*) as_fn_error $? "unrecognized option: \`$1'
-Try \`$0 --help' for more information." ;;
-
- *) as_fn_append ac_config_targets " $1"
- ac_need_defaults=false ;;
-
- 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 || ac_write_fail=1
-if \$ac_cs_recheck; then
- set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
- shift
- \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
- CONFIG_SHELL='$SHELL'
- export CONFIG_SHELL
- exec "\$@"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-exec 5>>config.log
-{
- echo
- sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
- $as_echo "$ac_log"
-} >&5
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-
-# Handling of arguments.
-for ac_config_target in $ac_config_targets
-do
- case $ac_config_target in
- "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
-
- *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
- 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
-fi
-
-# Have a temporary directory for convenience. Make it in the build tree
-# simply because there is no reason against having it here, and in addition,
-# creating and moving files from /tmp can sometimes cause problems.
-# Hook for its removal unless debugging.
-# Note that there is a small window in which the directory will not be cleaned:
-# after its creation but before its name has been assigned to `$tmp'.
-$debug ||
-{
- tmp= ac_tmp=
- trap 'exit_status=$?
- : "${ac_tmp:=$tmp}"
- { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
-' 0
- trap 'as_fn_exit 1' 1 2 13 15
-}
-# Create a (secure) tmp directory for tmp files.
-
-{
- tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
- test -d "$tmp"
-} ||
-{
- tmp=./conf$$-$RANDOM
- (umask 077 && mkdir "$tmp")
-} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
-ac_tmp=$tmp
-
-# Set up the scripts for CONFIG_FILES section.
-# No need to generate them if there are no CONFIG_FILES.
-# This happens for instance with `./config.status config.h'.
-if test -n "$CONFIG_FILES"; then
-
-
-ac_cr=`echo X | tr X '\015'`
-# On cygwin, bash can eat \r inside `` if the user requested igncr.
-# But we know of no other shell where ac_cr would be empty at this
-# point, so we can use a bashism as a fallback.
-if test "x$ac_cr" = x; then
- eval ac_cr=\$\'\\r\'
-fi
-ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
-if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
- ac_cs_awk_cr='\\r'
-else
- ac_cs_awk_cr=$ac_cr
-fi
-
-echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
-_ACEOF
-
-
-{
- echo "cat >conf$$subs.awk <<_ACEOF" &&
- echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
- echo "_ACEOF"
-} >conf$$subs.sh ||
- as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
-ac_delim='%!_!# '
-for ac_last_try in false false false false false :; do
- . ./conf$$subs.sh ||
- as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-
- ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
- if test $ac_delim_n = $ac_delim_num; then
- break
- elif $ac_last_try; then
- as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
- else
- ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
- fi
-done
-rm -f conf$$subs.sh
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
-_ACEOF
-sed -n '
-h
-s/^/S["/; s/!.*/"]=/
-p
-g
-s/^[^!]*!//
-:repl
-t repl
-s/'"$ac_delim"'$//
-t delim
-:nl
-h
-s/\(.\{148\}\)..*/\1/
-t more1
-s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
-p
-n
-b repl
-:more1
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t nl
-:delim
-h
-s/\(.\{148\}\)..*/\1/
-t more2
-s/["\\]/\\&/g; s/^/"/; s/$/"/
-p
-b
-:more2
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t delim
-' <conf$$subs.awk | sed '
-/^[^""]/{
- N
- s/\n//
-}
-' >>$CONFIG_STATUS || ac_write_fail=1
-rm -f conf$$subs.awk
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACAWK
-cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
- for (key in S) S_is_set[key] = 1
- FS = ""
-
-}
-{
- line = $ 0
- nfields = split(line, field, "@")
- substed = 0
- len = length(field[1])
- for (i = 2; i < nfields; i++) {
- key = field[i]
- keylen = length(key)
- if (S_is_set[key]) {
- value = S[key]
- line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
- len += length(value) + length(field[++i])
- substed = 1
- } else
- len += 1 + keylen
- }
-
- print line
-}
-
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
- sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
-else
- cat
-fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
- || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
-_ACEOF
-
-# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
-# ${srcdir} and @srcdir@ entries 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[ ]*=[ ]*/{
-h
-s///
-s/^/:/
-s/[ ]*$/:/
-s/:\$(srcdir):/:/g
-s/:\${srcdir}:/:/g
-s/:@srcdir@:/:/g
-s/^:*//
-s/:*$//
-x
-s/\(=[ ]*\).*/\1/
-G
-s/\n//
-s/^[^=]*=[ ]*$//
-}'
-fi
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-fi # test -n "$CONFIG_FILES"
-
-
-eval set X " :F $CONFIG_FILES "
-shift
-for ac_tag
-do
- case $ac_tag in
- :[FHLC]) ac_mode=$ac_tag; continue;;
- esac
- case $ac_mode$ac_tag in
- :[FHL]*:*);;
- :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
- :[FH]-) ac_tag=-:-;;
- :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
- esac
- ac_save_IFS=$IFS
- IFS=:
- set x $ac_tag
- IFS=$ac_save_IFS
- shift
- ac_file=$1
- shift
-
- case $ac_mode in
- :L) ac_source=$1;;
- :[FH])
- ac_file_inputs=
- for ac_f
- do
- case $ac_f in
- -) ac_f="$ac_tmp/stdin";;
- *) # Look for the file first in the build tree, then in the source tree
- # (if the path is not absolute). The absolute path cannot be DOS-style,
- # because $ac_f cannot contain `:'.
- test -f "$ac_f" ||
- case $ac_f in
- [\\/$]*) false;;
- *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
- esac ||
- as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
- esac
- case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
- as_fn_append ac_file_inputs " '$ac_f'"
- done
-
- # 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. */
- configure_input='Generated from '`
- $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
- `' by configure.'
- if test x"$ac_file" != x-; then
- configure_input="$ac_file. $configure_input"
- { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
-$as_echo "$as_me: creating $ac_file" >&6;}
- fi
- # Neutralize special characters interpreted by sed in replacement strings.
- case $configure_input in #(
- *\&* | *\|* | *\\* )
- ac_sed_conf_input=`$as_echo "$configure_input" |
- sed 's/[\\\\&|]/\\\\&/g'`;; #(
- *) ac_sed_conf_input=$configure_input;;
- esac
-
- case $ac_tag in
- *:-:* | *:-) cat >"$ac_tmp/stdin" \
- || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
- esac
- ;;
- esac
-
- ac_dir=`$as_dirname -- "$ac_file" ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$ac_file" : 'X\(//\)[^/]' \| \
- X"$ac_file" : 'X\(//\)$' \| \
- X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$ac_file" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- as_dir="$ac_dir"; as_fn_mkdir_p
- ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
- # A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
- esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
- .) # We are building in place.
- ac_srcdir=.
- ac_top_srcdir=$ac_top_builddir_sub
- ac_abs_top_srcdir=$ac_pwd ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir
- ac_abs_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_build_prefix$srcdir
- ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
-
- case $ac_mode in
- :F)
- #
- # CONFIG_FILE
- #
-
- case $INSTALL in
- [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
- *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
- esac
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# If the template does not know about datarootdir, expand it.
-# FIXME: This hack should be removed a few years after 2.60.
-ac_datarootdir_hack=; ac_datarootdir_seen=
-ac_sed_dataroot='
-/datarootdir/ {
- p
- q
-}
-/@datadir@/p
-/@docdir@/p
-/@infodir@/p
-/@localedir@/p
-/@mandir@/p'
-case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
-*datarootdir*) ac_datarootdir_seen=yes;;
-*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
- ac_datarootdir_hack='
- s&@datadir@&$datadir&g
- s&@docdir@&$docdir&g
- s&@infodir@&$infodir&g
- s&@localedir@&$localedir&g
- s&@mandir@&$mandir&g
- s&\\\${datarootdir}&$datarootdir&g' ;;
-esac
-_ACEOF
-
-# Neutralize VPATH when `$srcdir' = `.'.
-# Shell code in configure.ac might set extrasub.
-# FIXME: do we really want to maintain this feature?
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_sed_extra="$ac_vpsub
-$extrasub
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-:t
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s|@configure_input@|$ac_sed_conf_input|;t t
-s&@top_builddir@&$ac_top_builddir_sub&;t t
-s&@top_build_prefix@&$ac_top_build_prefix&;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&@abs_top_builddir@&$ac_abs_top_builddir&;t t
-s&@INSTALL@&$ac_INSTALL&;t t
-$ac_datarootdir_hack
-"
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
- >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
-
-test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
- { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
- { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
- "$ac_tmp/out"`; test -z "$ac_out"; } &&
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined. Please make sure it is defined" >&5
-$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined. Please make sure it is defined" >&2;}
-
- rm -f "$ac_tmp/stdin"
- case $ac_file in
- -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
- *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
- esac \
- || as_fn_error $? "could not create $ac_file" "$LINENO" 5
- ;;
-
-
-
- esac
-
-done # for ac_tag
-
-
-as_fn_exit 0
-_ACEOF
-ac_clean_files=$ac_clean_files_save
-
-test $ac_write_fail = 0 ||
- as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
-
-
-# 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 || as_fn_exit 1
-fi
-if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
-$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
-fi
-
diff --git a/winsup/cygserver/configure.ac b/winsup/cygserver/configure.ac
deleted file mode 100644
index 4e2cb4582..000000000
--- a/winsup/cygserver/configure.ac
+++ /dev/null
@@ -1,69 +0,0 @@
-dnl Autoconf configure script for Cygserver.
-dnl Copyright 2003, 2012, 2013, 2014 Red Hat, Inc.
-dnl
-dnl This file is part of Cygwin.
-dnl
-dnl This software is a copyrighted work licensed under the terms of the
-dnl Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-dnl details.
-dnl
-dnl Process this file with autoconf to produce a configure script.
-
-AC_PREREQ(2.59)dnl
-AC_INIT([Cygwin Cygserver], 0,
- cygwin@cygwin.com, cygwin, https://cygwin.com)
-AC_CONFIG_SRCDIR(cygserver.cc)
-AC_CONFIG_AUX_DIR(..)
-
-. ${srcdir}/../configure.cygwin
-
-AC_PROG_INSTALL
-AC_NO_EXECUTABLES
-AC_CANONICAL_SYSTEM
-
-AC_PROG_CC
-AC_PROG_CXX
-AC_PROG_CPP
-AC_LANG(C)
-
-AC_WINDOWS_HEADERS
-AC_WINDOWS_LIBS
-
-AC_LANG(C++)
-
-AC_CYGWIN_INCLUDES
-
-case "$with_cross_host" in
- ""|*cygwin*)
- all_host="all_host"
- install_host="install_host"
- ;;
- *)
- all_host=
- install_host=
- ;;
-esac
-
-AC_SUBST(all_host)
-AC_SUBST(install_host)
-
-AC_CHECK_TOOL(AR, ar, ar)
-AC_CHECK_TOOL(AS, as, as)
-AC_CHECK_TOOL(RANLIB, ranlib, ranlib)
-AC_CHECK_TOOL(LD, ld, ld)
-AC_CHECK_TOOL(NM, nm, nm)
-AC_CHECK_TOOL(DLLTOOL, dlltool, dlltool)
-AC_CHECK_TOOL(WINDRES, windres, windres)
-
-AC_PROG_MAKE_SET
-
-AC_ARG_ENABLE(debugging,
-[ --enable-debugging Build a cygwin DLL which has more consistency checking for debugging],
-[case "${enableval}" in
-yes) AC_DEFINE(DEBUGGING) ;;
-no) ;;
-esac
-])
-
-AC_CONFIGURE_ARGS
-AC_OUTPUT(Makefile)
diff --git a/winsup/cygserver/cygserver-config b/winsup/cygserver/cygserver-config
deleted file mode 100755
index abe943c3f..000000000
--- a/winsup/cygserver/cygserver-config
+++ /dev/null
@@ -1,209 +0,0 @@
-#!/bin/bash
-#
-# cygserver-config, Copyright 2003 Red Hat Inc.
-#
-# This file is part of the Cygwin DLL.
-
-# Directory where the config files are stored
-SYSCONFDIR=/etc
-LOCALSTATEDIR=/var
-
-progname=$0
-auto_answer=""
-service_name=cygserver
-
-request()
-{
- if [ "${auto_answer}" = "yes" ]
- then
- echo "$1 (yes/no) yes"
- return 0
- elif [ "${auto_answer}" = "no" ]
- then
- echo "$1 (yes/no) no"
- return 1
- fi
-
- answer=""
- while [ "X${answer}" != "Xyes" -a "X${answer}" != "Xno" ]
- do
- echo -n "$1 (yes/no) "
- read -e answer
- done
- if [ "X${answer}" = "Xyes" ]
- then
- return 0
- else
- return 1
- fi
-}
-
-# Check options
-
-while :
-do
- case $# in
- 0)
- break
- ;;
- esac
-
- option=$1
- shift
-
- case "${option}" in
- -d | --debug )
- set -x
- ;;
-
- -y | --yes )
- auto_answer=yes
- ;;
-
- -n | --no )
- auto_answer=no
- ;;
-
- -N | --name )
- service_name=$1
- shift
- ;;
-
- *)
- echo "usage: ${progname} [OPTION]..."
- echo
- echo "This script creates an Cygserver service configuration."
- echo
- echo "Options:"
- echo " --debug -d Enable shell's debug output."
- echo " --yes -y Answer all questions with \"yes\" automatically."
- echo " --no -n Answer all questions with \"no\" automatically."
- echo " --name -N <name> cygserver windows service name."
- echo
- exit 1
- ;;
-
- esac
-done
-
-# Check if running on NT
-_sys="`uname`"
-_nt=`expr "${_sys}" : "CYGWIN_NT"`
-
-# Check for running cygserver processes first.
-if ps -ef | grep -v grep | grep -q ${service_name}
-then
- echo
- echo "There is a cygserver (${service_name}) already running. Nothing to do, apparently."
- echo
- exit 1
-fi
-
-# Check for ${SYSCONFDIR} directory
-if [ -e "${SYSCONFDIR}" -a ! -d "${SYSCONFDIR}" ]
-then
- echo
- echo "${SYSCONFDIR} is existant but not a directory."
- echo "Cannot create global configuration file."
- echo
- exit 1
-fi
-
-# Create it if necessary
-if [ ! -e "${SYSCONFDIR}" ]
-then
- mkdir "${SYSCONFDIR}"
- if [ ! -e "${SYSCONFDIR}" ]
- then
- echo
- echo "Creating ${SYSCONFDIR} directory failed"
- echo
- exit 1
- fi
-fi
-
-# Create /var/log if not already existing
-if [ -f ${LOCALSTATEDIR}/log ]
-then
- echo "Creating ${LOCALSTATEDIR}/log failed!"
-else
- if [ ! -d ${LOCALSTATEDIR}/log ]
- then
- mkdir -p ${LOCALSTATEDIR}/log
- fi
-fi
-
-# Check if cygserver.conf exists. If yes, ask for overwriting
-if [ -f "${SYSCONFDIR}/cygserver.conf" ]
-then
- if request "Overwrite existing ${SYSCONFDIR}/cygserver.conf file?"
- then
- rm -f "${SYSCONFDIR}/cygserver.conf"
- if [ -f "${SYSCONFDIR}/cygserver.conf" ]
- then
- echo
- echo "Can't overwrite. ${SYSCONFDIR}/cygserver.conf is write protected."
- echo
- exit 1
- fi
- fi
-fi
-
-# Create default cygserver.conf from skeleton files in /etc/defaults/etc
-if [ ! -f "${SYSCONFDIR}/cygserver.conf" ]
-then
- echo "Generating ${SYSCONFDIR}/cygserver.conf file"
- cp "${SYSCONFDIR}/defaults/etc/cygserver.conf" "${SYSCONFDIR}/cygserver.conf"
- if [ ! -f "${SYSCONFDIR}/cygserver.conf" ]
- then
- echo
- echo "Couldn't create ${SYSCONFDIR}/cygserver.conf."
- echo "Perhaps there's no default file in ${SYSCONFDIR}/defaults/etc?"
- echo "Reinstalling Cygwin might help."
- echo
- exit 1
- fi
- chmod 664 "${SYSCONFDIR}/cygserver.conf"
- chown 18.544 "${SYSCONFDIR}/cygserver.conf"
-fi
-
-# On NT ask if cygserver should be installed as service
-if [ ${_nt} -gt 0 ]
-then
- # But only if it is not already installed
- if ! cygrunsrv -Q ${service_name} > /dev/null 2>&1
- then
- echo
- echo
- echo "Warning: The following function requires administrator privileges!"
- echo
- echo "Do you want to install cygserver as service?"
- if request "(Say \"no\" if it's already installed as service)"
- then
- if ! cygrunsrv -I ${service_name} -d "CYGWIN cygserver" -p /usr/sbin/cygserver
- then
- echo
- echo "Installation of cygserver as service failed. Please check the"
- echo "error messages you got. They might give a clue why it failed."
- echo
- echo "A good start is either you don't have administrator privileges"
- echo "or a missing cygrunsrv binary. Please check for both."
- echo
- exit 1
- fi
- echo
- echo "The service has been installed under LocalSystem account."
- echo "To start it, call \`net start ${service_name}' or \`cygrunsrv -S ${service_name}'."
- fi
- touch "${LOCALSTATEDIR}/log/cygserver.log"
- chown 18.544 "${LOCALSTATEDIR}/log/cygserver.log"
- fi
-fi
-
-echo
-echo "Further configuration options are available by editing the configuration"
-echo "file ${SYSCONFDIR}/cygserver.conf. Please read the inline information in that"
-echo "file carefully. The best option for the start is to just leave it alone."
-echo
-echo "Basic Cygserver configuration finished. Have fun!"
-echo
diff --git a/winsup/cygserver/cygserver.cc b/winsup/cygserver/cygserver.cc
deleted file mode 100644
index 45048ed3c..000000000
--- a/winsup/cygserver/cygserver.cc
+++ /dev/null
@@ -1,762 +0,0 @@
-/* cygserver.cc
-
- Copyright 2001, 2002, 2003, 2004, 2005, 2007, 2011, 2012, 2014 Red Hat Inc.
-
- Written by Egor Duda <deo@logos-m.ru>
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifdef __OUTSIDE_CYGWIN__
-#include "woutsup.h"
-
-#include <sys/types.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <ctype.h>
-#include <getopt.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include "cygwin_version.h"
-
-#include "cygserver.h"
-#include "process.h"
-#include "transport.h"
-
-#include "cygserver_ipc.h"
-#include "cygserver_msg.h"
-#include "cygserver_sem.h"
-
-#define DEF_CONFIG_FILE "" SYSCONFDIR "/cygserver.conf"
-
-#define SERVER_VERSION "1.20"
-
-GENERIC_MAPPING access_mapping;
-
-static bool
-setup_privileges ()
-{
- BOOL rc, ret_val;
- HANDLE hToken = NULL;
- TOKEN_PRIVILEGES sPrivileges;
-
- rc = OpenProcessToken (GetCurrentProcess () , TOKEN_ALL_ACCESS , &hToken) ;
- if (!rc)
- {
- debug ("error opening process token (err %u)", GetLastError ());
- return false;
- }
- rc = LookupPrivilegeValue (NULL, SE_DEBUG_NAME, &sPrivileges.Privileges[0].Luid);
- if (!rc)
- {
- debug ("error getting privilege luid (err %u)", GetLastError ());
- ret_val = false;
- goto out;
- }
- sPrivileges.PrivilegeCount = 1 ;
- sPrivileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED ;
- rc = AdjustTokenPrivileges (hToken, FALSE, &sPrivileges, 0, NULL, NULL) ;
- if (!rc)
- {
- debug ("error adjusting privilege level. (err %u)", GetLastError ());
- ret_val = false;
- goto out;
- }
-
- access_mapping.GenericRead = FILE_READ_DATA;
- access_mapping.GenericWrite = FILE_WRITE_DATA;
- access_mapping.GenericExecute = 0;
- access_mapping.GenericAll = FILE_READ_DATA | FILE_WRITE_DATA;
-
- ret_val = true;
-
-out:
- CloseHandle (hToken);
- return ret_val;
-}
-
-int
-check_and_dup_handle (HANDLE from_process, HANDLE to_process,
- HANDLE from_process_token,
- DWORD access,
- HANDLE from_handle,
- HANDLE *to_handle_ptr, BOOL bInheritHandle = FALSE)
-{
- HANDLE local_handle = NULL;
- int ret_val = EACCES;
- char sd_buf [1024];
- PSECURITY_DESCRIPTOR sd = (PSECURITY_DESCRIPTOR) &sd_buf;
- DWORD bytes_needed;
- PRIVILEGE_SET ps;
- DWORD ps_len = sizeof (ps);
- BOOL status;
-
- if (from_process != GetCurrentProcess ())
- {
- if (!DuplicateHandle (from_process, from_handle,
- GetCurrentProcess (), &local_handle,
- 0, bInheritHandle,
- DUPLICATE_SAME_ACCESS))
- {
- log (LOG_ERR, "error getting handle(%p) to server (err %u)",
- from_handle, GetLastError ());
- goto out;
- }
- } else
- local_handle = from_handle;
-
- if (!GetKernelObjectSecurity (local_handle,
- (OWNER_SECURITY_INFORMATION
- | GROUP_SECURITY_INFORMATION
- | DACL_SECURITY_INFORMATION),
- sd, sizeof (sd_buf), &bytes_needed))
- {
- log (LOG_ERR, "error getting handle SD (err %u)", GetLastError ());
- goto out;
- }
-
- MapGenericMask (&access, &access_mapping);
-
- if (!AccessCheck (sd, from_process_token, access, &access_mapping,
- &ps, &ps_len, &access, &status))
- {
- log (LOG_ERR, "error checking access rights (err %u)", GetLastError ());
- goto out;
- }
-
- if (!status)
- {
- log (LOG_ERR, "access to object denied");
- goto out;
- }
-
- if (!DuplicateHandle (from_process, from_handle,
- to_process, to_handle_ptr,
- access, bInheritHandle, 0))
- {
- log (LOG_ERR, "error getting handle to client (err %u)", GetLastError ());
- goto out;
- }
-
- debug ("Duplicated %p to %p", from_handle, *to_handle_ptr);
-
- ret_val = 0;
-
- out:
- if (local_handle && from_process != GetCurrentProcess ())
- CloseHandle (local_handle);
-
- return (ret_val);
-}
-
-/*
- * client_request_attach_tty::serve ()
- */
-
-void
-client_request_attach_tty::serve (transport_layer_base *const conn,
- process_cache *)
-{
- assert (conn);
-
- assert (!error_code ());
-
- if (msglen () != sizeof (req))
- {
- log (LOG_ERR, "bad request body length: expecting %lu bytes, got %lu",
- sizeof (req), msglen ());
- error_code (EINVAL);
- msglen (0);
- return;
- }
-
- msglen (0); // Until we fill in some fields.
-
- debug ("pid %d:(%p,%p) -> pid %d", req.master_pid, req.from_master,
- req.to_master, req.pid);
-
- debug ("opening process %d", req.master_pid);
-
- const HANDLE from_process_handle =
- OpenProcess (PROCESS_DUP_HANDLE, FALSE, req.master_pid);
-
- if (!from_process_handle)
- {
- log (LOG_ERR, "error opening `from' process (err %u)", GetLastError ());
- error_code (EACCES);
- return;
- }
-
- debug ("opening process %d", req.pid);
-
- const HANDLE to_process_handle =
- OpenProcess (PROCESS_DUP_HANDLE, FALSE, req.pid);
-
- if (!to_process_handle)
- {
- log (LOG_ERR, "error opening `to' process (err %u)", GetLastError ());
- CloseHandle (from_process_handle);
- error_code (EACCES);
- return;
- }
-
- debug ("Impersonating client");
- if (!conn->impersonate_client ())
- {
- CloseHandle (from_process_handle);
- CloseHandle (to_process_handle);
- error_code (EACCES);
- return;
- }
-
- HANDLE token_handle = NULL;
-
- debug ("about to open thread token");
- const DWORD rc = OpenThreadToken (GetCurrentThread (),
- TOKEN_QUERY,
- TRUE,
- &token_handle);
-
- debug ("opened thread token, rc=%u", rc);
- if (!conn->revert_to_self ())
- {
- CloseHandle (from_process_handle);
- CloseHandle (to_process_handle);
- error_code (EACCES);
- return;
- }
-
- if (!rc)
- {
- log (LOG_ERR, "error opening thread token (err %u)", GetLastError ());
- CloseHandle (from_process_handle);
- CloseHandle (to_process_handle);
- error_code (EACCES);
- return;
- }
-
- // From this point on, a reply body is returned to the client.
-
- const HANDLE from_master = req.from_master;
- const HANDLE to_master = req.to_master;
-
- req.from_master = NULL;
- req.to_master = NULL;
-
- msglen (sizeof (req));
-
- if (from_master)
- if (check_and_dup_handle (from_process_handle, to_process_handle,
- token_handle,
- GENERIC_READ,
- from_master,
- &req.from_master, TRUE) != 0)
- {
- log (LOG_ERR, "error duplicating from_master handle (err %u)",
- GetLastError ());
- error_code (EACCES);
- }
-
- if (to_master)
- if (check_and_dup_handle (from_process_handle, to_process_handle,
- token_handle,
- GENERIC_WRITE,
- to_master,
- &req.to_master, TRUE) != 0)
- {
- log (LOG_ERR, "error duplicating to_master handle (err %u)",
- GetLastError ());
- error_code (EACCES);
- }
-
- CloseHandle (from_process_handle);
- CloseHandle (to_process_handle);
- CloseHandle (token_handle);
-
- debug ("%u(%p, %p) -> %u(%p,%p)", req.master_pid, from_master, to_master,
- req.pid, req.from_master, req.to_master);
-
- return;
-}
-
-void
-client_request_get_version::serve (transport_layer_base *, process_cache *)
-{
- assert (!error_code ());
-
- if (msglen ())
- log (LOG_ERR, "unexpected request body ignored: %lu bytes", msglen ());
-
- msglen (sizeof (version));
-
- version.major = CYGWIN_SERVER_VERSION_MAJOR;
- version.api = CYGWIN_SERVER_VERSION_API;
- version.minor = CYGWIN_SERVER_VERSION_MINOR;
- version.patch = CYGWIN_SERVER_VERSION_PATCH;
-}
-
-class server_request : public queue_request
-{
-public:
- server_request (transport_layer_base *const conn, process_cache *const cache)
- : _conn (conn), _cache (cache)
- {}
-
- virtual ~server_request ()
- {
- delete _conn;
- }
-
- virtual void process ()
- {
- client_request::handle_request (_conn, _cache);
- }
-
-private:
- transport_layer_base *const _conn;
- process_cache *const _cache;
-};
-
-class server_submission_loop : public queue_submission_loop
-{
-public:
- server_submission_loop (threaded_queue *const queue,
- transport_layer_base *const transport,
- process_cache *const cache)
- : queue_submission_loop (queue, false),
- _transport (transport),
- _cache (cache)
- {
- assert (_transport);
- assert (_cache);
- }
-
-private:
- transport_layer_base *const _transport;
- process_cache *const _cache;
-
- virtual void request_loop ();
-};
-
-/* FIXME: this is a little ugly. What we really want is to wait on
- * two objects: one for the pipe/socket, and one for being told to
- * shutdown. Otherwise this will stay a problem (we won't actually
- * shutdown until the request _AFTER_ the shutdown request. And
- * sending ourselves a request is ugly
- */
-void
-server_submission_loop::request_loop ()
-{
- /* I'd like the accepting thread's priority to be above any "normal"
- * thread in the system to avoid overflowing the listen queue (for
- * sockets; similar issues exist for named pipes); but, for example,
- * a normal priority thread in a foregrounded process is boosted to
- * THREAD_PRIORITY_HIGHEST (AFAICT). Thus try to set the current
- * thread's priority to a level one above that. This fails on
- * win9x/ME so assume any failure in that call is due to that and
- * simply call again at one priority level lower.
- * FIXME: This looks weird and is an issue on NT, too. Per MSDN,
- * THREAD_PRIORITY_HIGHEST + 1 is only a valid priority level if
- * the priority class is set to REALTIME_PRIORITY_CLASS.
- */
- if (!SetThreadPriority (GetCurrentThread (), THREAD_PRIORITY_HIGHEST + 1))
- if (!SetThreadPriority (GetCurrentThread (), THREAD_PRIORITY_HIGHEST))
- debug ("failed to raise accept thread priority (err %u)",
- GetLastError ());
-
- while (_running)
- {
- bool recoverable = false;
- transport_layer_base *const conn = _transport->accept (&recoverable);
- if (!conn && !recoverable)
- {
- log (LOG_ERR, "fatal error on IPC transport: closing down");
- return;
- }
- // EINTR probably implies a shutdown request; so back off for a
- // moment to let the main thread take control, otherwise the
- // server spins here receiving EINTR repeatedly since the signal
- // handler in the main thread doesn't get a chance to be called.
- if (!conn && errno == EINTR)
- {
- if (!SetThreadPriority (GetCurrentThread (), THREAD_PRIORITY_NORMAL))
- debug ("failed to reset thread priority (err %u)",
- GetLastError ());
-
- Sleep (0);
- if (!SetThreadPriority (GetCurrentThread (),
- THREAD_PRIORITY_HIGHEST + 1))
- if (!SetThreadPriority (GetCurrentThread (),
- THREAD_PRIORITY_HIGHEST))
- debug ("failed to raise thread priority (err %u)",
- GetLastError ());
- }
- if (conn)
- _queue->add (new server_request (conn, _cache));
- }
-}
-
-client_request_shutdown::client_request_shutdown ()
- : client_request (CYGSERVER_REQUEST_SHUTDOWN)
-{
-}
-
-void
-client_request_shutdown::serve (transport_layer_base *, process_cache *)
-{
- assert (!error_code ());
-
- if (msglen ())
- log (LOG_ERR, "unexpected request body ignored: %lu bytes", msglen ());
-
- /* FIXME: link upwards, and then this becomes a trivial method call to
- * only shutdown _this queue_
- */
-
- kill (getpid (), SIGINT);
-
- msglen (0);
-}
-
-static sig_atomic_t shutdown_server = false;
-
-static void
-handle_signal (const int signum)
-{
- /* any signal makes us die :} */
-
- shutdown_server = true;
-}
-
-/*
- * print_usage ()
- */
-
-static void
-print_usage (const char *const pgm)
-{
- log (LOG_NOTICE, "Usage: %s [OPTIONS]\n"
-"\n"
-"Cygwin background service daemon\n"
-"\n"
-"Configuration option:\n"
-"\n"
-" -f, --config-file <file> Use <file> as config file. Default is\n"
-" " DEF_CONFIG_FILE "\n"
-"\n"
-"Performance options:\n"
-"\n"
-" -c, --cleanup-threads <num> Number of cleanup threads to use.\n"
-" -p, --process-cache <num> Size of process cache.\n"
-" -r, --request-threads <num> Number of request threads to use.\n"
-"\n"
-"Logging options:\n"
-"\n"
-" -d, --debug Log debug messages to stderr.\n"
-" -e, --stderr Log to stderr (default if stderr is a tty).\n"
-" -E, --no-stderr Don't log to stderr (see -y, -Y options).\n"
-" -l, --log-level <level> Verbosity of logging (1..7). Default: 6\n"
-" -y, --syslog Log to syslog (default if stderr is no tty).\n"
-" -Y, --no-syslog Don't log to syslog (See -e, -E options).\n"
-"\n"
-"Support options:\n"
-"\n"
-" -m, --no-sharedmem Don't start XSI Shared Memory support.\n"
-" -q, --no-msgqueues Don't start XSI Message Queue support.\n"
-" -s, --no-semaphores Don't start XSI Semaphore support.\n"
-"\n"
-"Miscellaneous:\n"
-"\n"
-" -S, --shutdown Shutdown the daemon.\n"
-" -h, --help Output usage information and exit.\n"
-" -V, --version Output version information and exit.\n"
-, pgm);
-}
-
-/*
- * print_version ()
- */
-
-static void
-print_version ()
-{
- log (LOG_INFO,
- "cygserver (cygwin) %d.%d.%d\n"
- "Cygwin background service daemon\n"
- "Copyright (C) 2001 - %s Red Hat, Inc.\n"
- "This is free software; see the source for copying conditions. There is NO\n"
- "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.",
- CYGWIN_VERSION_DLL_MAJOR / 1000,
- CYGWIN_VERSION_DLL_MAJOR % 1000,
- CYGWIN_VERSION_DLL_MINOR,
- strrchr (__DATE__, ' ') + 1);
-}
-
-/*
- * main ()
- */
-
-int
-main (const int argc, char *argv[])
-{
- const struct option longopts[] = {
- {"cleanup-threads", required_argument, NULL, 'c'},
- {"debug", no_argument, NULL, 'd'},
- {"stderr", no_argument, NULL, 'e'},
- {"no-stderr", no_argument, NULL, 'E'},
- {"config-file", required_argument, NULL, 'f'},
- {"help", no_argument, NULL, 'h'},
- {"log-level", required_argument, NULL, 'l'},
- {"no-sharedmem", no_argument, NULL, 'm'},
- {"process-cache", required_argument, NULL, 'p'},
- {"no-msgqueues", no_argument, NULL, 'q'},
- {"request-threads", required_argument, NULL, 'r'},
- {"no-semaphores", no_argument, NULL, 's'},
- {"shutdown", no_argument, NULL, 'S'},
- {"version", no_argument, NULL, 'V'},
- {"syslog", no_argument, NULL, 'y'},
- {"no-syslog", no_argument, NULL, 'Y'},
- {0, no_argument, NULL, 0}
- };
-
- const char opts[] = "c:deEf:hl:mp:qr:sSVyY";
-
- int32_t cleanup_threads = 0;
- int32_t request_threads = 0;
- int32_t process_cache_size = 0;
- bool shutdown = false;
- const char *config_file = DEF_CONFIG_FILE;
- bool force_config_file = false;
- tun_bool_t option_log_stderr = TUN_UNDEF;
- tun_bool_t option_log_syslog = TUN_UNDEF;
-
- char *c = NULL;
-
- /* Check if we have a terminal. If so, default to stderr logging,
- otherwise default to syslog logging. This must be done early
- to allow default logging already in option processing state. */
- openlog ("cygserver", LOG_PID, LOG_KERN);
- if (isatty (2))
- log_stderr = TUN_TRUE;
- else
- log_syslog = TUN_TRUE;
-
- int opt;
-
- securityinit ();
-
- opterr = 0;
- while ((opt = getopt_long (argc, argv, opts, longopts, NULL)) != EOF)
- switch (opt)
- {
- case 'c':
- c = NULL;
- cleanup_threads = strtol (optarg, &c, 10);
- if (cleanup_threads <= 0 || cleanup_threads > 32 || (c && *c))
- panic ("Number of cleanup threads must be between 1 and 32");
- break;
-
- case 'd':
- log_debug = TUN_TRUE;
- break;
-
- case 'e':
- option_log_stderr = TUN_TRUE;
- break;
-
- case 'E':
- option_log_stderr = TUN_FALSE;
- break;
-
- case 'f':
- config_file = optarg;
- force_config_file = true;
- break;
-
- case 'h':
- print_usage (getprogname ());
- return 0;
-
- case 'l':
- c = NULL;
- log_level = strtoul (optarg, &c, 10);
- if (!log_level || log_level > 7 || (c && *c))
- panic ("Log level must be between 1 and 7");
- break;
-
- case 'm':
- support_sharedmem = TUN_FALSE;
- break;
-
- case 'p':
- c = NULL;
- process_cache_size = strtol (optarg, &c, 10);
- if (process_cache_size <= 0 || process_cache_size > 310 || (c && *c))
- panic ("Size of process cache must be between 1 and 310");
- break;
-
- case 'q':
- support_msgqueues = TUN_FALSE;
- break;
-
- case 'r':
- c = NULL;
- request_threads = strtol (optarg, &c, 10);
- if (request_threads <= 0 || request_threads > 310 || (c && *c))
- panic ("Number of request threads must be between 1 and 310");
- break;
-
- case 's':
- support_semaphores = TUN_FALSE;
- break;
-
- case 'S':
- shutdown = true;
- break;
-
- case 'V':
- print_version ();
- return 0;
-
- case 'y':
- option_log_syslog = TUN_TRUE;
- break;
-
- case 'Y':
- option_log_syslog = TUN_FALSE;
- break;
-
- case '?':
- panic ("unknown option -- %c\n"
- "Try `%s --help' for more information.", optopt, getprogname ());
- }
-
- if (optind != argc)
- panic ("Too many arguments");
-
- if (shutdown)
- {
- /* Setting `cygserver_running' stops the request code making a
- * version request, which is not much to the point.
- */
- cygserver_running = CYGSERVER_OK;
-
- client_request_shutdown req;
-
- if (req.make_request () == -1 || req.error_code ())
- panic("Shutdown request failed: %s", strerror (req.error_code ()));
-
- // FIXME: It would be nice to wait here for the daemon to exit.
-
- return 0;
- }
-
- SIGHANDLE (SIGHUP);
- SIGHANDLE (SIGINT);
- SIGHANDLE (SIGTERM);
-
- tunable_param_init (config_file, force_config_file);
-
- loginit (option_log_stderr, option_log_syslog);
-
- log (LOG_INFO, "daemon starting up");
-
- if (!cleanup_threads)
- TUNABLE_INT_FETCH ("kern.srv.cleanup_threads", &cleanup_threads);
- if (!cleanup_threads)
- cleanup_threads = 2;
-
- if (!request_threads)
- TUNABLE_INT_FETCH ("kern.srv.request_threads", &request_threads);
- if (!request_threads)
- request_threads = 10;
-
- if (!process_cache_size)
- TUNABLE_INT_FETCH ("kern.srv.process_cache_size", &process_cache_size);
- if (!process_cache_size)
- process_cache_size = 62;
-
- if (support_sharedmem == TUN_UNDEF)
- TUNABLE_BOOL_FETCH ("kern.srv.sharedmem", &support_sharedmem);
- if (support_sharedmem == TUN_UNDEF)
- support_sharedmem = TUN_TRUE;
-
- if (support_msgqueues == TUN_UNDEF)
- TUNABLE_BOOL_FETCH ("kern.srv.msgqueues", &support_msgqueues);
- if (support_msgqueues == TUN_UNDEF)
- support_msgqueues = TUN_TRUE;
-
- if (support_semaphores == TUN_UNDEF)
- TUNABLE_BOOL_FETCH ("kern.srv.semaphores", &support_semaphores);
- if (support_semaphores == TUN_UNDEF)
- support_semaphores = TUN_TRUE;
-
- if (!setup_privileges ())
- panic ("Setting process privileges failed.");
-
- ipcinit ();
-
- /*XXXXX*/
- threaded_queue request_queue (request_threads);
-
- transport_layer_base *const transport = create_server_transport ();
- assert (transport);
-
- if (transport->listen () == -1)
- return 1;
-
- process_cache cache (process_cache_size, cleanup_threads);
-
- server_submission_loop submission_loop (&request_queue, transport, &cache);
-
- request_queue.add_submission_loop (&submission_loop);
-
- cache.start ();
-
- request_queue.start ();
-
- log (LOG_NOTICE, "Initialization complete. Waiting for requests.");
-
- /* TODO: wait on multiple objects - the thread handle for each
- * request loop + all the process handles. This should be done by
- * querying the request_queue and the process cache for all their
- * handles, and then waiting for (say) 30 seconds. after that we
- * recreate the list of handles to wait on, and wait again. the
- * point of all this abstraction is that we can trivially server
- * both sockets and pipes simply by making a new transport, and then
- * calling request_queue.process_requests (transport2);
- */
- /* WaitForMultipleObjects abort && request_queue && process_queue && signal
- -- if signal event then retrigger it
- */
- while (!shutdown_server && request_queue.running () && cache.running ())
- {
- pause ();
- if (ipcunload ())
- {
- shutdown_server = false;
- log (LOG_WARNING, "Shutdown request received but ignored. "
- "Dependent processes still running.");
- }
- }
-
- log (LOG_INFO, "Shutdown request received - new requests will be denied");
- request_queue.stop ();
- log (LOG_INFO, "All pending requests processed");
- delete transport;
- log (LOG_INFO, "No longer accepting requests - cygwin will operate in daemonless mode");
- cache.stop ();
- log (LOG_INFO, "All outstanding process-cache activities completed");
- log (LOG_NOTICE, "Shutdown finished.");
-
- return 0;
-}
-#endif /* __OUTSIDE_CYGWIN__ */
diff --git a/winsup/cygserver/cygserver.conf b/winsup/cygserver/cygserver.conf
deleted file mode 100644
index 589931b11..000000000
--- a/winsup/cygserver/cygserver.conf
+++ /dev/null
@@ -1,147 +0,0 @@
-# cygserver.conf, Copyright(C) 2003, 2005 Red Hat Inc.
-#
-# Contains configurable parameters for the cygserver.
-#
-# The format of this file is easy. Lines beginning with a hash `#' are
-# comments and ignored. Lines consisting of only whitespaces are ignored.
-# Any other line is a setting for cygserver.
-# A setting consists of a name/value pair, separated by whitespace.
-# Each line must only consist of one name/value pair.
-# Lines must not be longer than 1023 characters.
-#
-# Some settings can be overridden by a command line switch. If so, it's
-# mentioned below.
-#
-# Settings which are commented out will use the default values. These are
-# mentioned below, too.
-
-# kern.srv.cleanup_threads: No. of cygserver threads used for cleanup tasks.
-# Default: 2, Min: 1, Max: 16, command line option -c, --cleanup-threads
-#kern.srv.cleanup_threads 2
-
-# kern.srv.request_threads: No. of cygserver threads used to serve
-# application requests.
-# Default: 10, Min: 1, Max: 310, command line option -r, --request-threads
-#kern.srv.request_threads 10
-
-# kern.srv.process_cache_size: No. of concurrent processes which can be handled
-# by Cygserver concurrently.
-# Default: 62, Min: 1, Max: 310, command line option -p, --process-cache
-#kern.srv.process_cache_size 62
-
-# kern.srv.msgqueues: Determines whether XSI Message Queue support should be
-# started, "yes" (or "true", "y", "t", "1") or "no" (or "false", "n", "f", "0").
-# These values are valid for all binary type options.
-# Default is "yes". Command line option -q, --no-msgqueues
-#kern.srv.msgqueues yes
-
-# kern.srv.semaphores: Determines whether XSI Semaphore support should be
-# started. Default is "yes". Command line option -s, --no-semaphores
-#kern.srv.semaphores yes
-
-# kern.srv.sharedmem: Determines whether XSI Shared Memory support should be
-# started. Default is "yes". Command line option -m, --no-sharedmem
-#kern.srv.sharedmem yes
-
-# LOGGING
-
-# kern.log.syslog: Determines whether logging should go to the syslog,
-# Default is "yes", if stderr is no tty, "no" otherwise.
-# Command line option -y, --syslog or -Y, --no-syslog.
-#kern.log.syslog no
-
-# kern.log.stderr: Determines whether logging should go to stderr,
-# Default is "yes", if stderr is a tty, "no" otherwise.
-# Command line option -e, --stderr or -E, --no-stderr.
-#kern.log.stderr no
-
-# kern.log.level: Logging level. Valid values are 1 to 7 with a bigger
-# value emitting more logging output. Default level is 6.
-# Command line option -l, --log-level.
-#kern.log.level 6
-
-# kern.log.debug: Determines whether debug output should be printed to stderr.
-# Default is "no". Command line option -d, --debug
-#kern.log.debug no
-
-# XSI message queue parameters.
-#
-# Each message is broken up and stored in segments that are msgssz bytes
-# long. For efficiency reasons, this should be a power of two. Also,
-# it doesn't make sense if it is less than 8 or greater than about 256.
-
-# kern.ipc.msgseg: Maximum no. of message queue segments hold concurrently.
-# Default: 2048, Min: 256, Max: 65535
-#kern.ipc.msgseg 2048
-
-# kern.ipc.msgssz: Size of segment in bytes. Must be a power of 2 value.
-# Default: 8, Min: 8, Max: 1024
-#kern.ipc.msgssz 8
-
-# kern.ipc.msgmnb: Maximum no. of bytes in a single message queue.
-# Default: 2048, Min: 1, Max: 65535
-#kern.ipc.msgmnb 2048
-
-# kern.ipc.msgmni: Maximum no. of message queue identifiers hold concurrently.
-# Default: 40, Min: 1, Max: 1024
-#kern.ipc.msgmni 40
-
-# kern.ipc.msgtql: Maximum no. of messages hold concurrently.
-# Default: 40, Min: 1, Max: 1024
-#kern.ipc.msgtql 40
-
-# XSI semaphore parameters
-
-# kern.ipc.semmni: Maximum no. of semaphore identifiers hold concurrently.
-# Default: 10, Min: 1, Max: 1024
-#kern.ipc.semmni 10
-
-# kern.ipc.semmns: Maximum no. of semaphores hold concurrently.
-# Default: 60, Min: 1, Max: 1024
-#kern.ipc.semmns 60
-
-# kern.ipc.semmnu: Total no. of undo structures hold by server.
-# Default: 30, Min: 1, Max: 1024
-#kern.ipc.semmnu 30
-
-# kern.ipc.semmsl: Maximum no. of semaphores per semaphore id.
-# Default: 60, Min: 1, Max: 1024
-#kern.ipc.semmsl 60
-
-# kern.ipc.semopm: Maximum no. of operations per semop call.
-# Default: 100, Min: 1, Max: 1024
-#kern.ipc.semopm 100
-
-# kern.ipc.semume: Maximum no. of undo entries per process.
-# Default: 10, Min: 1, Max: 1024
-#kern.ipc.semume 10
-
-# kern.ipc.semvmx: Maximum value of a semaphore.
-# Default: 32767, Min: 1, Max: 32767
-#kern.ipc.semvmx 32767
-
-# kern.ipc.semaem: Maximum value to adjust on process exit.
-# Default: 16384, Min: 1, Max: 32767
-#kern.ipc.semaem 16384
-
-# XSI shared memory parameters
-
-# kern.ipc.shmmaxpgs: Maximum pages available for XSI shared memory.
-# Changing shmmaxpgs immediately affects setting SHMMAX. The relation
-# between shmmaxpgs and SHMMAX is: SHMMAX = shmmaxpgs * getpagesize().
-# Default: 8192, Min: 1, Max: 32767
-#kern.ipc.shmmaxpgs 8192
-
-# kern.ipc.shmmni: Maximum number of shared memory segments, system wide.
-# Default: 192, Min: 1, Max: 32767
-#kern.ipc.shmmni 192
-
-# kern.ipc.shmseg: Maximum number of shared memory segments per process.
-# Default: 128, Min: 1, Max: 32767
-#kern.ipc.shmseg 128
-
-# kern.ipc.shm_allow_removed: Determines whether a process is allowed to
-# attach to a shared memory segment (using the shmat call) after a successful
-# call to shmctl(IPC_RMID). This is a Linux-specific, and therefore
-# non-portable feature. Use with care. Default is "no".
-#kern.ipc.shm_allow_removed no
diff --git a/winsup/cygserver/msg.cc b/winsup/cygserver/msg.cc
deleted file mode 100644
index c92e698b0..000000000
--- a/winsup/cygserver/msg.cc
+++ /dev/null
@@ -1,117 +0,0 @@
-/* msg.cc: Single unix specification IPC interface for Cygwin.
-
- Copyright 2003, 2004, 2012 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifdef __OUTSIDE_CYGWIN__
-#include "woutsup.h"
-
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-
-#include "cygserver.h"
-#include "process.h"
-#include "transport.h"
-
-#include "cygserver_ipc.h"
-#include "cygserver_msg.h"
-
-client_request_msg::client_request_msg ()
- : client_request (CYGSERVER_REQUEST_MSG,
- &_parameters, sizeof (_parameters))
-{
-}
-
-void
-client_request_msg::serve (transport_layer_base *const conn,
- process_cache *const cache)
-{
- if (msglen () != sizeof (_parameters.in))
- {
- syscall_printf ("bad request body length: expecting %lu bytes, got %lu",
- sizeof (_parameters), msglen ());
- error_code (EINVAL);
- msglen (0);
- return;
- }
- if (support_msgqueues == TUN_FALSE)
- {
- syscall_printf ("Message queue support not started");
- error_code (ENOSYS);
- if (_parameters.in.msgop == MSGOP_msgrcv)
- _parameters.out.rcv = -1;
- else
- _parameters.out.ret = -1;
- msglen (sizeof (_parameters.out));
- return;
- }
- process *const client = cache->process (_parameters.in.ipcblk.cygpid,
- _parameters.in.ipcblk.winpid,
- _parameters.in.ipcblk.signal_arrived);
- if (!client)
- {
- error_code (EAGAIN);
- msglen (0);
- return;
- }
- if (!conn->impersonate_client ())
- {
- client->release ();
- error_code (EACCES);
- msglen (0);
- return;
- }
- if (!adjust_identity_info (&_parameters.in.ipcblk))
- {
- client->release ();
- conn->revert_to_self ();
- error_code (EACCES);
- msglen (0);
- return;
- }
- /* Early revert_to_self since IPC code runs in kernel mode. */
- conn->revert_to_self ();
- /* sysv_msg.cc takes care of itself. */
- client->release ();
- thread td = { client, &_parameters.in.ipcblk, {-1, -1} };
- int res;
- msgop_t msgop = _parameters.in.msgop; /* Get's overwritten otherwise. */
- switch (msgop)
- {
- case MSGOP_msgctl:
- res = msgctl (&td, &_parameters.in.ctlargs);
- break;
- case MSGOP_msgget:
- res = msgget (&td, &_parameters.in.getargs);
- break;
- case MSGOP_msgrcv:
- res = msgrcv (&td, &_parameters.in.rcvargs);
- break;
- case MSGOP_msgsnd:
- res = msgsnd (&td, &_parameters.in.sndargs);
- break;
- default:
- res = ENOSYS;
- td.td_retval[0] = -1;
- break;
- }
- /* Allocated by the call to adjust_identity_info(). */
- if (_parameters.in.ipcblk.gidlist)
- free (_parameters.in.ipcblk.gidlist);
- error_code (res);
- if (msgop == MSGOP_msgrcv)
- _parameters.out.rcv = td.td_retval[0];
- else
- _parameters.out.ret = td.td_retval[0];
- msglen (sizeof (_parameters.out));
-}
-#endif /* __OUTSIDE_CYGWIN__ */
diff --git a/winsup/cygserver/process.cc b/winsup/cygserver/process.cc
deleted file mode 100644
index 12989a8d4..000000000
--- a/winsup/cygserver/process.cc
+++ /dev/null
@@ -1,499 +0,0 @@
-/* process.cc
-
- Copyright 2001, 2002, 2003, 2004, 2005, 2014 Red Hat Inc.
-
- Written by Robert Collins <rbtcollins@hotmail.com>
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifdef __OUTSIDE_CYGWIN__
-#include "woutsup.h"
-
-#include <sys/types.h>
-
-#include <assert.h>
-#include <stdlib.h>
-
-#include "process.h"
-
-/*****************************************************************************/
-
-#define elements(ARRAY) (sizeof (ARRAY) / sizeof (*ARRAY))
-
-/*****************************************************************************/
-
-process_cleanup::~process_cleanup ()
-{
- delete _process;
-}
-
-void
-process_cleanup::process ()
-{
- _process->cleanup ();
-}
-
-/*****************************************************************************/
-
-process::process (const pid_t cygpid, const DWORD winpid, HANDLE signal_arrived)
- : _cygpid (cygpid),
- _winpid (winpid),
- _hProcess (NULL),
- _signal_arrived (INVALID_HANDLE_VALUE),
- _cleaning_up (false),
- _exit_status (STILL_ACTIVE),
- _routines_head (NULL),
- _next (NULL)
-{
- _hProcess = OpenProcess (PROCESS_ALL_ACCESS, FALSE, winpid);
- if (!_hProcess)
- {
- system_printf ("unable to obtain handle for new cache process %d(%u)",
- _cygpid, _winpid);
- _hProcess = INVALID_HANDLE_VALUE;
- _exit_status = 0;
- }
- else
- debug_printf ("got handle %p for new cache process %d(%u)",
- _hProcess, _cygpid, _winpid);
- if (!signal_arrived)
- debug_printf ("signal_arrived NULL for process %d(%u)", _cygpid, _winpid);
- else if (signal_arrived != INVALID_HANDLE_VALUE)
- {
- if (!DuplicateHandle (_hProcess, signal_arrived,
- GetCurrentProcess (), &_signal_arrived,
- 0, FALSE, DUPLICATE_SAME_ACCESS))
- {
- system_printf ("error getting signal_arrived to server (%u)",
- GetLastError ());
- _signal_arrived = INVALID_HANDLE_VALUE;
- }
- }
- InitializeCriticalSection (&_access);
- debug ("initialized (%u)", _cygpid);
-}
-
-process::~process ()
-{
- debug ("deleting (%u)", _cygpid);
- DeleteCriticalSection (&_access);
- if (_signal_arrived && _signal_arrived != INVALID_HANDLE_VALUE)
- CloseHandle (_signal_arrived);
- CloseHandle (_hProcess);
-}
-
-/* No need to be thread-safe as this is only ever called by
- * process_cache::check_and_remove_process (). If it has to be made
- * thread-safe later on, it should not use the `access' critical section as
- * that is held by the client request handlers for an arbitrary length of time,
- * i.e. while they do whatever processing is required for a client request.
- */
-DWORD
-process::check_exit_code ()
-{
- if (_hProcess && _hProcess != INVALID_HANDLE_VALUE
- && _exit_status == STILL_ACTIVE
- && !GetExitCodeProcess (_hProcess, &_exit_status))
- {
- system_printf ("failed to retrieve exit code for %d(%u), error = %u",
- _cygpid, _winpid, GetLastError ());
- _hProcess = INVALID_HANDLE_VALUE;
- }
- return _exit_status;
-}
-
-bool
-process::add (cleanup_routine *const entry)
-{
- assert (entry);
-
- bool res = false;
- hold ();
-
- if (!_cleaning_up)
- {
- entry->_next = _routines_head;
- _routines_head = entry;
- res = true;
- }
-
- release ();
- return res;
-}
-
-bool
-process::remove (const cleanup_routine *const entry)
-{
- assert (entry);
-
- bool res = false;
- hold ();
-
- if (!_cleaning_up)
- {
- cleanup_routine *previous = NULL;
-
- for (cleanup_routine *ptr = _routines_head;
- ptr;
- previous = ptr, ptr = ptr->_next)
- {
- if (*ptr == *entry)
- {
- if (previous)
- previous->_next = ptr->_next;
- else
- _routines_head = ptr->_next;
-
- delete ptr;
- res = true;
- break;
- }
- }
- }
-
- release ();
- return res;
-}
-
-/* This is single threaded. It's called after the process is removed
- * from the cache, but inserts may be attemped by worker threads that
- * have a pointer to it.
- */
-void
-process::cleanup ()
-{
- hold ();
- assert (!is_active ());
- assert (!_cleaning_up);
- InterlockedExchange (&_cleaning_up, true);
- cleanup_routine *entry = _routines_head;
- _routines_head = NULL;
- release ();
-
- while (entry)
- {
- cleanup_routine *const ptr = entry;
- entry = entry->_next;
- ptr->cleanup (this);
- delete ptr;
- }
-}
-
-/*****************************************************************************/
-
-void
-process_cache::submission_loop::request_loop ()
-{
- assert (this);
- assert (_cache);
- assert (_interrupt_event);
-
- while (_running)
- _cache->wait_for_processes (_interrupt_event);
-}
-
-/*****************************************************************************/
-
-process_cache::process_cache (const size_t max_procs,
- const unsigned int initial_workers)
- : _queue (initial_workers),
- _submitter (this, &_queue), // true == interruptible
- _processes_count (0),
- _max_process_count (max_procs),
- _processes_head (NULL),
- _cache_add_trigger (NULL)
-{
- /* there can only be one */
- InitializeCriticalSection (&_cache_write_access);
-
- _cache_add_trigger = CreateEvent (NULL, // SECURITY_ATTRIBUTES
- TRUE, // Manual-reset
- FALSE, // Initially non-signalled
- NULL); // Anonymous
-
- if (!_cache_add_trigger)
- {
- system_printf ("failed to create cache add trigger, error = %u",
- GetLastError ());
- abort ();
- }
-
- _queue.add_submission_loop (&_submitter);
-}
-
-process_cache::~process_cache ()
-{
- (void) CloseHandle (_cache_add_trigger);
- DeleteCriticalSection (&_cache_write_access);
-}
-
-/* This returns the process object to the caller already locked, that
- * is, with the object's `access' critical region entered. Thus the
- * caller must unlock the object when it's finished with it (via
- * process::release ()). It must then not try to access the object
- * afterwards, except by going through this routine again, as it may
- * have been deleted once it has been unlocked.
- */
-class process *
-process_cache::process (const pid_t cygpid, const DWORD winpid,
- HANDLE signal_arrived)
-{
- /* TODO: make this more granular, so a search doesn't involve the
- * write lock.
- */
- EnterCriticalSection (&_cache_write_access);
- class process *previous = NULL;
- class process *entry = find (winpid, &previous);
-
- if (!entry)
- {
- if (_processes_count >= _max_process_count)
- {
- LeaveCriticalSection (&_cache_write_access);
- system_printf (("process limit (%d processes) reached; "
- "new connection refused for %d(%u)"),
- _max_process_count, cygpid, winpid);
- return NULL;
- }
-
- entry = new class process (cygpid, winpid, signal_arrived);
- if (!entry->is_active ())
- {
- LeaveCriticalSection (&_cache_write_access);
- delete entry;
- return NULL;
- }
-
- if (previous)
- {
- entry->_next = previous->_next;
- previous->_next = entry;
- }
- else
- {
- entry->_next = _processes_head;
- _processes_head = entry;
- }
-
- _processes_count += 1;
- SetEvent (_cache_add_trigger);
- }
-
- entry->hold (); // To be released by the caller.
- LeaveCriticalSection (&_cache_write_access);
- assert (entry);
- assert (entry->_winpid == winpid);
- return entry;
-}
-
-struct pcache_wait_t
-{
- size_t index;
- size_t count;
- HANDLE *hdls;
-};
-
-static DWORD WINAPI
-pcache_wait_thread (const LPVOID param)
-{
- pcache_wait_t *p = (pcache_wait_t *) param;
-
- DWORD rc = WaitForMultipleObjects (p->count, p->hdls, FALSE, INFINITE);
- ExitThread (rc == WAIT_FAILED ? rc : rc + p->index);
-}
-
-void
-process_cache::wait_for_processes (const HANDLE interrupt_event)
-{
- // Update `_wait_array' with handles of all current processes.
- size_t idx;
- const size_t count = sync_wait_array (interrupt_event);
-
- debug_printf ("waiting on %u objects in total (%u processes)",
- count, _processes_count);
-
- DWORD rc = WAIT_FAILED;
-
- if (count <= 64)
- {
- /* If count <= 64, a single WaitForMultipleObjects is sufficient and
- we can simply wait in the main thread. */
- rc = WaitForMultipleObjects (count, _wait_array, FALSE, INFINITE);
- if (rc == WAIT_FAILED)
- {
- system_printf ("could not wait on the process handles, error = %u",
- GetLastError ());
- abort ();
- }
- }
- else
- {
- /* If count > 64 we have to create sub-threads which wait for the
- actual wait objects and the main thread waits for the termination
- of one of the threads. */
- HANDLE main_wait_array[5] = { NULL };
- DWORD mcount = 0;
-
- for (idx = 0; idx < count; idx += 64)
- {
- pcache_wait_t p = { idx, min (count - idx, 64), _wait_array + idx };
- main_wait_array[mcount++] = CreateThread (NULL, 0, pcache_wait_thread,
- &p, 0, NULL);
- }
-
- rc = WaitForMultipleObjects (mcount, main_wait_array, FALSE, INFINITE);
- if (rc == WAIT_FAILED)
- {
- system_printf ("could not wait on the process handles, error = %u",
- GetLastError ());
- abort ();
- }
-
- /* Check for error condition on signalled sub-thread. */
- GetExitCodeThread (main_wait_array[rc], &rc);
- if (rc == WAIT_FAILED)
- {
- system_printf ("could not wait on the process handles, error = %u",
- GetLastError ());
- abort ();
- }
-
- /* Wake up all waiting threads. _cache_add_trigger gets reset
- in sync_wait_array again. */
- SetEvent (_cache_add_trigger);
- WaitForMultipleObjects (mcount, main_wait_array, TRUE, INFINITE);
- for (idx = 0; idx < mcount; idx++)
- CloseHandle (main_wait_array[idx]);
- }
-
- /* Tell all processes the bad news. This one formerly only checked
- processes beginning with the index of the signalled process, but
- this can result in processes which are signalled but never removed
- under heavy load conditions. */
- for (idx = 0; idx < count; idx++)
- if (_process_array[idx])
- check_and_remove_process (idx);
-}
-
-/*
- * process_cache::sync_wait_array ()
- *
- * Fill-in the wait array with the handles that the cache needs to wait on.
- * These handles are:
- * - the process_process_param's interrupt event
- * - the process_cache's cache_add_trigger event
- * - the handle for each live process in the cache.
- *
- * Return value: the number of live handles in the array.
- */
-
-size_t
-process_cache::sync_wait_array (const HANDLE interrupt_event)
-{
- assert (this);
- assert (interrupt_event && interrupt_event != INVALID_HANDLE_VALUE);
-
- /* Always reset _cache_add_trigger before filling up the array again. */
- ResetEvent (_cache_add_trigger);
-
- EnterCriticalSection (&_cache_write_access);
-
- size_t index = 0;
-
- for (class process *ptr = _processes_head; ptr; ptr = ptr->_next)
- {
- assert (ptr->_hProcess && ptr->_hProcess != INVALID_HANDLE_VALUE);
- assert (ptr->is_active ());
-
- _wait_array[index] = ptr->handle ();
- _process_array[index++] = ptr;
-
- if (!ptr->_next || index % 64 == 62)
- {
- /* Added at the end of each thread's array part for efficiency. */
- _wait_array[index] = interrupt_event;
- _process_array[index++] = NULL;
- _wait_array[index] = _cache_add_trigger;
- _process_array[index++] = NULL;
- }
- }
-
- if (!index)
- {
- /* To get at least *something* to wait for. */
- _wait_array[index] = interrupt_event;
- _process_array[index++] = NULL;
- _wait_array[index] = _cache_add_trigger;
- _process_array[index++] = NULL;
- }
-
- assert (index <= elements (_wait_array));
-
- LeaveCriticalSection (&_cache_write_access);
-
- return index;
-}
-
-void
-process_cache::check_and_remove_process (const size_t index)
-{
- assert (this);
- assert (index < elements (_wait_array) - SPECIALS_COUNT);
-
- class process *const process = _process_array[index];
-
- assert (process);
- assert (process->handle () == _wait_array[index]);
-
- if (process->check_exit_code () == STILL_ACTIVE)
- return;
-
- debug_printf ("process %d(%u) has left the building ($? = %u)",
- process->_cygpid, process->_winpid, process->_exit_status);
-
- /* Unlink the process object from the process list. */
-
- EnterCriticalSection (&_cache_write_access);
-
- class process *previous = NULL;
-
- const class process *const tmp = find (process->_winpid, &previous);
-
- assert (tmp == process);
- assert (previous ? previous->_next == process : _processes_head == process);
-
- if (previous)
- previous->_next = process->_next;
- else
- _processes_head = process->_next;
-
- _processes_count -= 1;
- LeaveCriticalSection (&_cache_write_access);
-
- /* Schedule any cleanup tasks for this process. */
- _queue.add (new process_cleanup (process));
-}
-
-class process *
-process_cache::find (const DWORD winpid, class process **previous)
-{
- if (previous)
- *previous = NULL;
-
- for (class process *ptr = _processes_head; ptr; ptr = ptr->_next)
- if (ptr->_winpid == winpid)
- return ptr;
- else if (ptr->_winpid > winpid) // The list is sorted by winpid.
- return NULL;
- else if (previous)
- *previous = ptr;
-
- return NULL;
-}
-
-/*****************************************************************************/
-#endif /* __OUTSIDE_CYGWIN__ */
diff --git a/winsup/cygserver/process.h b/winsup/cygserver/process.h
deleted file mode 100644
index 3de11b6f8..000000000
--- a/winsup/cygserver/process.h
+++ /dev/null
@@ -1,179 +0,0 @@
-/* process.h
-
- Copyright 2001, 2002, 2003, 2004, 2005, 2012 Red Hat Inc.
-
- Written by Robert Collins <rbtcollins@hotmail.com>
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _PROCESS_H
-#define _PROCESS_H
-
-#include <assert.h>
-
-#include "threaded_queue.h"
-
-class process_cleanup : public queue_request
-{
-public:
- process_cleanup (class process *const theprocess)
- : _process (theprocess)
- {
- assert (_process);
- }
-
- virtual ~process_cleanup ();
-
- virtual void process ();
-
-private:
- class process *const _process;
-};
-
-class process;
-
-class cleanup_routine
-{
- friend class process;
-
-public:
- cleanup_routine (void *const key)
- : _key (key),
- _next (NULL)
- {}
-
- virtual ~cleanup_routine () = 0;
-
- bool operator== (const cleanup_routine &rhs) const
- {
- return _key == rhs._key;
- }
-
- void *key () const { return _key; }
-
- /* MUST BE SYNCHRONOUS */
- virtual void cleanup (class process *) = 0;
-
-private:
- void *const _key;
- cleanup_routine *_next;
-};
-
-class process_cache;
-
-#define hold() _hold(__FILE__,__LINE__)
-#define release() _release(__FILE__,__LINE__)
-
-class process
-{
- friend class process_cache;
- friend class process_cleanup;
-
-public:
- process (pid_t cygpid, DWORD winpid,
- HANDLE signal_arrived = INVALID_HANDLE_VALUE);
- ~process ();
-
- pid_t cygpid () const { return _cygpid; }
- DWORD winpid () const { return _winpid; }
- HANDLE handle () const { return _hProcess; }
- HANDLE signal_arrived () const { return _signal_arrived; }
-
- bool is_active () const { return _exit_status == STILL_ACTIVE; }
-
- void _hold (const char *file, int line) {
- _log (file, line, LOG_DEBUG, "Try hold(%lu)", _cygpid);
- EnterCriticalSection (&_access);
- _log (file, line, LOG_DEBUG, "holding (%lu)", _cygpid);
- }
- void _release (const char *file, int line) {
- _log (file, line, LOG_DEBUG, "leaving (%lu)", _cygpid);
- LeaveCriticalSection (&_access);
- }
-
- bool add (cleanup_routine *);
- bool remove (const cleanup_routine *);
-
-private:
- const pid_t _cygpid;
- const DWORD _winpid;
- HANDLE _hProcess;
- HANDLE _signal_arrived;
- LONG _cleaning_up;
- DWORD _exit_status; // Set in the constructor and in exit_code ().
- cleanup_routine *_routines_head;
- /* used to prevent races-on-delete */
- CRITICAL_SECTION _access;
- class process *_next;
-
- DWORD check_exit_code ();
- void cleanup ();
-};
-
-class process_cache
-{
- // Number of special (i.e., non-process) handles in _wait_array.
- // See wait_for_processes () and sync_wait_array () for details.
- enum {
- SPECIALS_COUNT = 2
- };
-
- class submission_loop : public queue_submission_loop
- {
- public:
- submission_loop (process_cache *const cache, threaded_queue *const queue)
- : queue_submission_loop (queue, true),
- _cache (cache)
- {
- assert (_cache);
- }
-
- private:
- process_cache *const _cache;
-
- virtual void request_loop ();
- };
-
- friend class submission_loop;
-
-public:
- process_cache (const size_t max_procs, const unsigned int initial_workers);
- ~process_cache ();
-
- class process *process (pid_t cygpid, DWORD winpid,
- HANDLE signal_arrived = INVALID_HANDLE_VALUE);
-
- bool running () const { return _queue.running (); }
-
- bool start () { return _queue.start (); }
- bool stop () { return _queue.stop (); }
-
-private:
- threaded_queue _queue;
- submission_loop _submitter;
-
- size_t _processes_count;
- size_t _max_process_count;
- class process *_processes_head; // A list sorted by winpid.
-
- // Access to the _wait_array and related fields is not thread-safe,
- // since they are used solely by wait_for_processes () and its callees.
-
- HANDLE _wait_array[5 * MAXIMUM_WAIT_OBJECTS];
- class process *_process_array[5 * MAXIMUM_WAIT_OBJECTS];
-
- HANDLE _cache_add_trigger; // Actually both add and remove.
- CRITICAL_SECTION _cache_write_access; // Actually both read and write access.
-
- void wait_for_processes (HANDLE interrupt);
- size_t sync_wait_array (HANDLE interrupt);
- void check_and_remove_process (const size_t index);
-
- class process *find (DWORD winpid, class process **previous = NULL);
-};
-
-#endif /* _PROCESS_H */
diff --git a/winsup/cygserver/pwdgrp.cc b/winsup/cygserver/pwdgrp.cc
deleted file mode 100644
index cc12deadd..000000000
--- a/winsup/cygserver/pwdgrp.cc
+++ /dev/null
@@ -1,161 +0,0 @@
-/* pwdgrp.cc: Request account information
-
- Copyright 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifdef __OUTSIDE_CYGWIN__
-#include "woutsup.h"
-
-#include <stdio.h>
-#include <errno.h>
-#include <pwd.h>
-#include <grp.h>
-#include <sys/cygwin.h>
-
-#include "cygserver.h"
-#include "process.h"
-#include "transport.h"
-
-#include "cygserver_pwdgrp.h"
-
-#include <sddl.h>
-
-client_request_pwdgrp::client_request_pwdgrp ()
- : client_request (CYGSERVER_REQUEST_PWDGRP,
- &_parameters, sizeof (_parameters))
-{
-}
-
-void
-client_request_pwdgrp::pwd_serve ()
-{
- struct passwd *pwd = NULL;
-
- switch (_parameters.in.type)
- {
- case SID_arg:
- pwd = (struct passwd *) cygwin_internal (CW_GETPWSID, 0,
- &_parameters.in.arg.sid);
- break;
- case NAME_arg:
- pwd = getpwnam (_parameters.in.arg.name);
- break;
- case ID_arg:
- pwd = getpwuid (_parameters.in.arg.id);
- break;
- }
- if (pwd)
- msglen (snprintf (_parameters.out.line, sizeof _parameters.out.line,
- "%s:%s:%u:%u:%s:%s:%s",
- pwd->pw_name ?: "",
- pwd->pw_passwd ?: "",
- (uint32_t) pwd->pw_uid,
- (uint32_t) pwd->pw_gid,
- pwd->pw_gecos ?: "",
- pwd->pw_dir ?: "",
- pwd->pw_shell ?: "") + 1);
- else
- {
- switch (_parameters.in.type)
- {
- case SID_arg:
- {
- char *str;
- if (ConvertSidToStringSid (&_parameters.in.arg.sid, &str))
- {
- debug_printf ("User <%s> failed", str);
- LocalFree (str);
- }
- }
- break;
- case NAME_arg:
- debug_printf ("User <%s> failed", _parameters.in.arg.name);
- break;
- case ID_arg:
- debug_printf ("User <%u> failed", _parameters.in.arg.id);
- break;
- }
- _parameters.out.line[0] = '\0';
- msglen (0);
- error_code (ENOENT);
- }
-}
-
-void
-client_request_pwdgrp::grp_serve ()
-{
- struct group *grp = NULL;
-
- switch (_parameters.in.type)
- {
- case SID_arg:
- grp = (struct group *) cygwin_internal (CW_GETGRSID, 0,
- &_parameters.in.arg.sid);
- break;
- case NAME_arg:
- grp = getgrnam (_parameters.in.arg.name);
- break;
- case ID_arg:
- grp = getgrgid (_parameters.in.arg.id);
- break;
- }
- if (grp)
- msglen (snprintf (_parameters.out.line, sizeof _parameters.out.line,
- "%s:%s:%u:",
- grp->gr_name ?: "",
- grp->gr_passwd ?: "",
- (uint32_t) grp->gr_gid) + 1);
- else
- {
- switch (_parameters.in.type)
- {
- case SID_arg:
- {
- char *str;
- if (ConvertSidToStringSid (&_parameters.in.arg.sid, &str))
- {
- debug_printf ("Group <%s> failed", str);
- LocalFree (str);
- }
- }
- break;
- case NAME_arg:
- debug_printf ("Group <%s> failed", _parameters.in.arg.name);
- break;
- case ID_arg:
- debug_printf ("Group <%u> failed", _parameters.in.arg.id);
- break;
- }
- _parameters.out.line[0] = '\0';
- msglen (0);
- error_code (ENOENT);
- }
-}
-
-void
-client_request_pwdgrp::serve (transport_layer_base *const conn,
- process_cache *const cache)
-{
- debug_printf ("Request account information");
- if (msglen () < __builtin_offsetof (struct _pwdgrp_param_t::_pwdgrp_in_t, arg)
- + sizeof (uint32_t)
- || msglen () > sizeof (_parameters.in))
- {
- syscall_printf ("bad request body length: got %lu", msglen ());
- error_code (EINVAL);
- msglen (0);
- return;
- }
- error_code (0);
- if (_parameters.in.group)
- grp_serve ();
- else
- pwd_serve ();
- debug_printf ("Request account information returns <%s> error %d", _parameters.out.line, error_code ());
-}
-#endif /* __OUTSIDE_CYGWIN__ */
diff --git a/winsup/cygserver/sem.cc b/winsup/cygserver/sem.cc
deleted file mode 100644
index 55cd6e51e..000000000
--- a/winsup/cygserver/sem.cc
+++ /dev/null
@@ -1,107 +0,0 @@
-/* sem.cc: Single unix specification IPC interface for Cygwin.
-
- Copyright 2003, 2004, 2012 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifdef __OUTSIDE_CYGWIN__
-#include "woutsup.h"
-
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-
-#include "cygserver.h"
-#include "process.h"
-#include "transport.h"
-
-#include "cygserver_ipc.h"
-#include "cygserver_sem.h"
-
-client_request_sem::client_request_sem ()
- : client_request (CYGSERVER_REQUEST_SEM,
- &_parameters, sizeof (_parameters))
-{
-}
-
-void
-client_request_sem::serve (transport_layer_base *const conn,
- process_cache *const cache)
-{
- if (msglen () != sizeof (_parameters.in))
- {
- syscall_printf ("bad request body length: expecting %lu bytes, got %lu",
- sizeof (_parameters), msglen ());
- error_code (EINVAL);
- msglen (0);
- return;
- }
- if (support_semaphores == TUN_FALSE)
- {
- syscall_printf ("Semaphore support not started");
- error_code (ENOSYS);
- _parameters.out.ret = -1;
- msglen (sizeof (_parameters.out));
- return;
- }
- process *const client = cache->process (_parameters.in.ipcblk.cygpid,
- _parameters.in.ipcblk.winpid,
- _parameters.in.ipcblk.signal_arrived);
- if (!client)
- {
- error_code (EAGAIN);
- msglen (0);
- return;
- }
- if (!conn->impersonate_client ())
- {
- client->release ();
- error_code (EACCES);
- msglen (0);
- return;
- }
- if (!adjust_identity_info (&_parameters.in.ipcblk))
- {
- client->release ();
- conn->revert_to_self ();
- error_code (EACCES);
- msglen (0);
- return;
- }
- /* Early revert_to_self since IPC code runs in kernel mode. */
- conn->revert_to_self ();
- /* sysv_sem.cc takes care of itself. */
- client->release ();
- thread td = { client, &_parameters.in.ipcblk, {-1, -1} };
- int res;
- switch (_parameters.in.semop)
- {
- case SEMOP_semctl:
- res = semctl (&td, &_parameters.in.ctlargs);
- break;
- case SEMOP_semget:
- res = semget (&td, &_parameters.in.getargs);
- break;
- case SEMOP_semop:
- res = semop (&td, &_parameters.in.opargs);
- break;
- default:
- res = ENOSYS;
- td.td_retval[0] = -1;
- break;
- }
- /* Allocated by the call to adjust_identity_info(). */
- if (_parameters.in.ipcblk.gidlist)
- free (_parameters.in.ipcblk.gidlist);
- error_code (res);
- _parameters.out.ret = td.td_retval[0];
- msglen (sizeof (_parameters.out));
-}
-#endif /* __OUTSIDE_CYGWIN__ */
diff --git a/winsup/cygserver/setpwd.cc b/winsup/cygserver/setpwd.cc
deleted file mode 100644
index 4f996d3b5..000000000
--- a/winsup/cygserver/setpwd.cc
+++ /dev/null
@@ -1,104 +0,0 @@
-/* setpwd.cc: Set LSA private data password for current user.
-
- Copyright 2008, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifdef __OUTSIDE_CYGWIN__
-#include "woutsup.h"
-
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#include <wchar.h>
-
-#include <ntsecapi.h>
-#include <ntdef.h>
-#include "ntdll.h"
-
-#include "cygserver.h"
-#include "process.h"
-#include "transport.h"
-
-#include "cygserver_setpwd.h"
-
-client_request_setpwd::client_request_setpwd ()
- : client_request (CYGSERVER_REQUEST_SETPWD,
- &_parameters, sizeof (_parameters))
-{
-}
-
-void
-client_request_setpwd::serve (transport_layer_base *const conn,
- process_cache *const cache)
-{
- HANDLE tok;
- PTOKEN_USER user;
- WCHAR sidbuf[128], key_name [128 + wcslen (CYGWIN_LSA_KEY_PREFIX)];
- UNICODE_STRING sid, key, data;
-
- syscall_printf ("Request to set private data");
- if (msglen () != sizeof (_parameters.in))
- {
- syscall_printf ("bad request body length: expecting %lu bytes, got %lu",
- sizeof (_parameters), msglen ());
- error_code (EINVAL);
- msglen (0);
- return;
- }
- msglen (0);
- if (!conn->impersonate_client ())
- {
- error_code (EACCES);
- return;
- }
- if (!OpenThreadToken (GetCurrentThread (), TOKEN_READ, TRUE, &tok))
- {
- conn->revert_to_self ();
- error_code (EACCES);
- return;
- }
- /* Get uid from user SID in token. */
- user = (PTOKEN_USER) get_token_info (tok, TokenUser);
- CloseHandle (tok);
- conn->revert_to_self ();
- if (!user)
- {
- error_code (EACCES);
- return;
- }
- LSA_OBJECT_ATTRIBUTES oa = { 0, 0, 0, 0, 0, 0 };
- HANDLE lsa;
- NTSTATUS status = LsaOpenPolicy (NULL, &oa, POLICY_CREATE_SECRET, &lsa);
- if (!NT_SUCCESS (status))
- {
- error_code (LsaNtStatusToWinError (status));
- return;
- }
- RtlInitEmptyUnicodeString (&sid, sidbuf, sizeof sidbuf);
- RtlConvertSidToUnicodeString (&sid, user->User.Sid, FALSE);
- free (user);
- RtlInitEmptyUnicodeString (&key, key_name, sizeof key_name);
- RtlAppendUnicodeToString (&key, CYGWIN_LSA_KEY_PREFIX);
- RtlAppendUnicodeStringToString (&key, &sid);
- RtlInitUnicodeString (&data, _parameters.in.passwd);
- status = LsaStorePrivateData (lsa, &key, data.Length ? &data : NULL);
- if (data.Length)
- RtlSecureZeroMemory (data.Buffer, data.Length);
- /* Success or we're trying to remove a password entry which doesn't exist. */
- if (NT_SUCCESS (status)
- || (data.Length == 0 && status == STATUS_OBJECT_NAME_NOT_FOUND))
- error_code (0);
- else
- error_code (LsaNtStatusToWinError (status));
- syscall_printf ("Request to set private data returns error %d", error_code ());
- LsaClose (lsa);
-}
-#endif /* __OUTSIDE_CYGWIN__ */
diff --git a/winsup/cygserver/shm.cc b/winsup/cygserver/shm.cc
deleted file mode 100644
index 3be0d15f4..000000000
--- a/winsup/cygserver/shm.cc
+++ /dev/null
@@ -1,124 +0,0 @@
-/* shm.cc: Single unix specification IPC interface for Cygwin.
-
- Copyright 2003, 2004, 2012 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifdef __OUTSIDE_CYGWIN__
-#include "woutsup.h"
-
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-
-#include "cygserver.h"
-#include "process.h"
-#include "transport.h"
-
-#include "cygserver_ipc.h"
-#include "cygserver_shm.h"
-
-client_request_shm::client_request_shm ()
- : client_request (CYGSERVER_REQUEST_SHM,
- &_parameters, sizeof (_parameters))
-{
-}
-
-void
-client_request_shm::serve (transport_layer_base *const conn,
- process_cache *const cache)
-{
- if (msglen () != sizeof (_parameters.in))
- {
- syscall_printf ("bad request body length: expecting %lu bytes, got %lu",
- sizeof (_parameters), msglen ());
- error_code (EINVAL);
- msglen (0);
- return;
- }
- if (support_sharedmem == TUN_FALSE)
- {
- syscall_printf ("Shared memory support not started");
- error_code (ENOSYS);
- if (_parameters.in.shmop == SHMOP_shmat)
- _parameters.out.ptr = (vm_offset_t)0;
- else
- _parameters.out.ret = -1;
- msglen (sizeof (_parameters.out));
- return;
- }
- process *const client = cache->process (_parameters.in.ipcblk.cygpid,
- _parameters.in.ipcblk.winpid,
- _parameters.in.ipcblk.signal_arrived);
- if (!client)
- {
- error_code (EAGAIN);
- msglen (0);
- return;
- }
- if (!conn->impersonate_client ())
- {
- client->release ();
- error_code (EACCES);
- msglen (0);
- return;
- }
- if (!adjust_identity_info (&_parameters.in.ipcblk))
- {
- client->release ();
- conn->revert_to_self ();
- error_code (EACCES);
- msglen (0);
- return;
- }
- /* Early revert_to_self since IPC code runs in kernel mode. */
- conn->revert_to_self ();
- /* sysv_shm.cc takes care of itself. */
- client->release ();
- thread td = { client, &_parameters.in.ipcblk, {0, 0} };
- int res;
- shmop_t shmop = _parameters.in.shmop; /* Get's overwritten otherwise. */
- switch (shmop)
- {
- case SHMOP_shmat:
- ipc_p_vmspace (td.ipcblk);
- res = shmat (&td, &_parameters.in.atargs);
- break;
- case SHMOP_shmctl:
- res = shmctl (&td, &_parameters.in.ctlargs);
- break;
- case SHMOP_shmdt:
- ipc_p_vmspace (td.ipcblk);
- res = shmdt (&td, &_parameters.in.dtargs);
- break;
- case SHMOP_shmget:
- res = shmget (&td, &_parameters.in.getargs);
- break;
- case SHMOP_shmfork:
- res = cygwin_shmfork_myhook (&td, &_parameters.in.forkargs);
- break;
- default:
- res = ENOSYS;
- td.td_retval[0] = -1;
- break;
- }
- /* Allocated by the call to adjust_identity_info(). */
- if (_parameters.in.ipcblk.gidlist)
- free (_parameters.in.ipcblk.gidlist);
- error_code (res);
- if (shmop == SHMOP_shmat)
- _parameters.out.ptr = td.td_retval[0];
- else
- _parameters.out.ret = td.td_retval[0];
- if (shmop == SHMOP_shmget)
- _parameters.out.obj = td.td_retval[1];
- msglen (sizeof (_parameters.out));
-}
-#endif /* __OUTSIDE_CYGWIN__ */
diff --git a/winsup/cygserver/sysv_msg.cc b/winsup/cygserver/sysv_msg.cc
deleted file mode 100644
index 217cc1d97..000000000
--- a/winsup/cygserver/sysv_msg.cc
+++ /dev/null
@@ -1,1215 +0,0 @@
-/*
- * Implementation of SVID messages
- *
- * Author: Daniel Boulet
- *
- * Copyright 1993 Daniel Boulet and RTMX Inc.
- *
- * This system call was implemented by Daniel Boulet under contract from RTMX.
- *
- * Redistribution and use in source forms, with and without modification,
- * are permitted provided that this entire comment appears intact.
- *
- * Redistribution in binary form may occur without any restrictions.
- * Obviously, it would be nice if you gave credit where credit is due
- * but requiring it would be too onerous.
- *
- * This software is provided ``AS IS'' without any warranties of any kind.
- */
-
-/*
- * This file is heavily changed to become part of Cygwin's cygserver.
- */
-
-#ifdef __OUTSIDE_CYGWIN__
-#include "woutsup.h"
-#include <sys/cdefs.h>
-#ifndef __FBSDID
-#define __FBSDID(s) const char version[] = (s)
-#endif
-__FBSDID("$FreeBSD: /usr/local/www/cvsroot/FreeBSD/src/sys/kern/sysv_msg.c,v 1.52 2003/11/07 04:47:14 rwatson Exp $");
-/* CV, 2006-01-09: Inspected upstream up to version 1.60. */
-
-#define _KERNEL 1
-#define __BSD_VISIBLE 1
-#include <sys/types.h>
-#include <sys/sysproto.h>
-#include <sys/ipc.h>
-#include <sys/param.h>
-#include <sys/msg.h>
-#include <malloc.h>
-#include <errno.h>
-#include <time.h>
-#include "cygserver.h"
-#include "process.h"
-#include "cygserver_ipc.h"
-
-#ifdef __CYGWIN__
-#define MSG_DEBUG
-#endif /* __CYGWIN__ */
-
-#ifdef MSG_DEBUG
-#define DPRINTF(a) debug_printf a
-#else
-#define DPRINTF(a)
-#endif
-
-static void msg_freehdr(struct msg *msghdr);
-
-#ifndef __CYGWIN__
-int msgctl(struct thread *, struct msgctl_args *);
-int msgget(struct thread *, struct msgget_args *);
-int msgsnd(struct thread *, struct msgsnd_args *);
-int msgrcv(struct thread *, struct msgrcv_args *);
-
-static sy_call_t *msgcalls[] = {
- (sy_call_t *)msgctl, (sy_call_t *)msgget,
- (sy_call_t *)msgsnd, (sy_call_t *)msgrcv
-};
-#endif /* __CYGWIN__ */
-
-
-struct msg {
- struct msg *msg_next; /* next msg in the chain */
- long msg_type; /* type of this message */
- /* >0 -> type of this message */
- /* 0 -> free header */
- u_short msg_ts; /* size of this message */
- short msg_spot; /* location of start of msg in buffer */
-};
-
-
-#ifndef MSGSSZ
-#define MSGSSZ 8 /* Each segment must be 2^N long */
-#endif
-#ifndef MSGSEG
-#define MSGSEG 2048 /* must be less than 32767 */
-#endif
-#define MSGMAX (MSGSSZ*MSGSEG)
-#ifndef MSGMNB
-#define MSGMNB 2048 /* max # of bytes in a queue */
-#endif
-#ifndef MSGMNI
-#define MSGMNI 40
-#endif
-#ifndef MSGTQL
-#define MSGTQL 40
-#endif
-
-/*
- * Based on the configuration parameters described in an SVR2 (yes, two)
- * config(1m) man page.
- *
- * Each message is broken up and stored in segments that are msgssz bytes
- * long. For efficiency reasons, this should be a power of two. Also,
- * it doesn't make sense if it is less than 8 or greater than about 256.
- * Consequently, msginit in kern/sysv_msg.c checks that msgssz is a power of
- * two between 8 and 1024 inclusive (and panic's if it isn't).
- */
-struct msginfo msginfo = {
- MSGMAX, /* max chars in a message */
- MSGMNB, /* max chars in a queue */
- MSGMNI, /* # of message queue identifiers */
- MSGTQL, /* max messages in system */
- MSGSSZ, /* size of a message segment */
- /* (must be small power of 2 greater than 4) */
- MSGSEG /* number of message segments */
-};
-
-/*
- * macros to convert between msqid_ds's and msqid's.
- * (specific to this implementation)
- */
-#define MSQID(ix,ds) ((ix) & 0xffff | (((ds).msg_perm.seq << 16) & 0xffff0000))
-#define MSQID_IX(id) ((id) & 0xffff)
-#define MSQID_SEQ(id) (((id) >> 16) & 0xffff)
-
-/*
- * The rest of this file is specific to this particular implementation.
- */
-
-struct msgmap {
- short next; /* next segment in buffer */
- /* -1 -> available */
- /* 0..(MSGSEG-1) -> index of next segment */
-};
-
-#define MSG_LOCKED 01000 /* Is this msqid_ds locked? */
-
-static int nfree_msgmaps; /* # of free map entries */
-static short free_msgmaps; /* head of linked list of free map entries */
-static struct msg *free_msghdrs;/* list of free msg headers */
-static char *msgpool; /* MSGMAX byte long msg buffer pool */
-static struct msgmap *msgmaps; /* MSGSEG msgmap structures */
-static struct msg *msghdrs; /* MSGTQL msg headers */
-static struct msqid_ds *msqids; /* MSGMNI msqid_ds struct's */
-static struct mtx msq_mtx; /* global mutex for message queues. */
-
-#ifdef __CYGWIN__
-static struct msg_info msg_info;
-#endif /* __CYGWIN__ */
-
-void
-msginit()
-{
- int i;
-
- TUNABLE_INT_FETCH("kern.ipc.msgseg", &msginfo.msgseg);
- TUNABLE_INT_FETCH("kern.ipc.msgssz", &msginfo.msgssz);
- msginfo.msgmax = msginfo.msgseg * msginfo.msgssz;
- TUNABLE_INT_FETCH("kern.ipc.msgmnb", &msginfo.msgmnb);
- TUNABLE_INT_FETCH("kern.ipc.msgmni", &msginfo.msgmni);
- TUNABLE_INT_FETCH("kern.ipc.msgtql", &msginfo.msgtql);
-
- msgpool = (char *) sys_malloc(msginfo.msgmax, M_MSG, M_WAITOK);
- if (msgpool == NULL)
- panic("msgpool is NULL");
- msgmaps = (msgmap *) sys_malloc(sizeof(struct msgmap) * msginfo.msgseg, M_MSG, M_WAITOK);
- if (msgmaps == NULL)
- panic("msgmaps is NULL");
- msghdrs = (msg *) sys_malloc(sizeof(struct msg) * msginfo.msgtql, M_MSG, M_WAITOK);
- if (msghdrs == NULL)
- panic("msghdrs is NULL");
- msqids = (msqid_ds *) sys_malloc(sizeof(struct msqid_ds) * msginfo.msgmni, M_MSG, M_WAITOK);
- if (msqids == NULL)
- panic("msqids is NULL");
-
- /*
- * msginfo.msgssz should be a power of two for efficiency reasons.
- * It is also pretty silly if msginfo.msgssz is less than 8
- * or greater than about 256 so ...
- */
-
- i = 8;
- while (i < 1024 && i != msginfo.msgssz)
- i <<= 1;
- if (i != msginfo.msgssz) {
- DPRINTF(("msginfo.msgssz=%d (0x%x)\n", msginfo.msgssz,
- msginfo.msgssz));
- panic("msginfo.msgssz not a small power of 2");
- }
-
- if (msginfo.msgseg > 32767) {
- DPRINTF(("msginfo.msgseg=%d\n", msginfo.msgseg));
- panic("msginfo.msgseg > 32767");
- }
-
- if (msgmaps == NULL)
- panic("msgmaps is NULL");
-
- for (i = 0; i < msginfo.msgseg; i++) {
- if (i > 0)
- msgmaps[i-1].next = i;
- msgmaps[i].next = -1; /* implies entry is available */
- }
- free_msgmaps = 0;
- nfree_msgmaps = msginfo.msgseg;
-
- if (msghdrs == NULL)
- panic("msghdrs is NULL");
-
- for (i = 0; i < msginfo.msgtql; i++) {
- msghdrs[i].msg_type = 0;
- if (i > 0)
- msghdrs[i-1].msg_next = &msghdrs[i];
- msghdrs[i].msg_next = NULL;
- }
- free_msghdrs = &msghdrs[0];
-
- if (msqids == NULL)
- panic("msqids is NULL");
-
- for (i = 0; i < msginfo.msgmni; i++) {
- msqids[i].msg_qbytes = 0; /* implies entry is available */
- msqids[i].msg_perm.seq = 0; /* reset to a known value */
- msqids[i].msg_perm.mode = 0;
- }
- mtx_init(&msq_mtx, "msq", NULL, MTX_DEF);
-}
-
-int
-msgunload()
-{
- struct msqid_ds *msqptr;
- int msqid;
-
- for (msqid = 0; msqid < msginfo.msgmni; msqid++) {
- /*
- * Look for an unallocated and unlocked msqid_ds.
- * msqid_ds's can be locked by msgsnd or msgrcv while
- * they are copying the message in/out. We can't
- * re-use the entry until they release it.
- */
- msqptr = &msqids[msqid];
- if (msqptr->msg_qbytes != 0 ||
- (msqptr->msg_perm.mode & MSG_LOCKED) != 0)
- break;
- }
-#ifndef __CYGWIN__
- if (msqid != msginfo.msgmni)
- return (EBUSY);
-#endif /* __CYGWIN__ */
-
- sys_free(msgpool, M_MSG);
- sys_free(msgmaps, M_MSG);
- sys_free(msghdrs, M_MSG);
- sys_free(msqids, M_MSG);
- mtx_destroy(&msq_mtx);
- return (0);
-}
-
-
-#ifndef __CYGWIN__
-static int
-sysvmsg_modload(struct module *module, int cmd, void *arg)
-{
- int error = 0;
-
- switch (cmd) {
- case MOD_LOAD:
- msginit();
- break;
- case MOD_UNLOAD:
- error = msgunload();
- break;
- case MOD_SHUTDOWN:
- break;
- default:
- error = EINVAL;
- break;
- }
- return (error);
-}
-
-static moduledata_t sysvmsg_mod = {
- "sysvmsg",
- &sysvmsg_modload,
- NULL
-};
-
-SYSCALL_MODULE_HELPER(msgsys);
-SYSCALL_MODULE_HELPER(msgctl);
-SYSCALL_MODULE_HELPER(msgget);
-SYSCALL_MODULE_HELPER(msgsnd);
-SYSCALL_MODULE_HELPER(msgrcv);
-
-DECLARE_MODULE(sysvmsg, sysvmsg_mod,
- SI_SUB_SYSV_MSG, SI_ORDER_FIRST);
-MODULE_VERSION(sysvmsg, 1);
-
-/*
- * Entry point for all MSG calls
- *
- * MPSAFE
- */
-int
-msgsys(thread *td, struct msgsys_args *uap)
-{
- int error;
-
- if (!jail_sysvipc_allowed && jailed(td->td_ucred))
- return (ENOSYS);
- if (uap->which < 0 ||
- (unsigned) uap->which >= sizeof(msgcalls)/sizeof(msgcalls[0]))
- return (EINVAL);
- error = (*msgcalls[uap->which])(td, &uap->a2);
- return (error);
-}
-#endif
-
-static void
-msg_freehdr(struct msg *msghdr)
-{
- while (msghdr->msg_ts > 0) {
- short next;
- if (msghdr->msg_spot < 0 || msghdr->msg_spot >= msginfo.msgseg)
- panic("msghdr->msg_spot out of range");
- next = msgmaps[msghdr->msg_spot].next;
- msgmaps[msghdr->msg_spot].next = free_msgmaps;
- free_msgmaps = msghdr->msg_spot;
- nfree_msgmaps++;
- msghdr->msg_spot = next;
- if (msghdr->msg_ts >= msginfo.msgssz)
- msghdr->msg_ts -= msginfo.msgssz;
- else
- msghdr->msg_ts = 0;
- }
- if (msghdr->msg_spot != -1)
- panic("msghdr->msg_spot != -1");
- msghdr->msg_next = free_msghdrs;
- free_msghdrs = msghdr;
-}
-
-#ifndef _SYS_SYSPROTO_H_
-struct msgctl_args {
- int msqid;
- int cmd;
- struct msqid_ds *buf;
-};
-#endif
-
-/*
- * MPSAFE
- */
-int
-msgctl(struct thread *td, struct msgctl_args *uap)
-{
- int msqid = uap->msqid;
- int cmd = uap->cmd;
- struct msqid_ds *user_msqptr = uap->buf;
- int rval, error;
- struct msqid_ds msqbuf;
- register struct msqid_ds *msqptr;
-
- DPRINTF(("call to msgctl(%d, %d, 0x%x)\n", msqid, cmd, user_msqptr));
-
- if (!jail_sysvipc_allowed && jailed(td->td_ucred))
- return (ENOSYS);
-
-#ifdef __CYGWIN__
- if (cmd == IPC_INFO) {
- if (!msqid) {
- error = copyout(&msginfo, user_msqptr,
- sizeof(struct msginfo));
- td->td_retval[0] = error ? -1 : 0;
- return (error);
- }
- if (msqid > msginfo.msgmni)
- msqid = msginfo.msgmni;
- error = copyout(msqids, user_msqptr,
- msqid * sizeof(struct msqid_ds));
- td->td_retval[0] = error ? -1 : 0;
- return (error);
- } else if (cmd == MSG_INFO) {
- mtx_lock(&msq_mtx);
- error = copyout(&msg_info, user_msqptr,
- sizeof(struct msg_info));
- td->td_retval[0] = error ? -1 : 0;
- mtx_unlock(&msq_mtx);
- return (error);
- }
-#endif /* __CYGWIN__ */
- msqid = IPCID_TO_IX(msqid);
-
- if (msqid < 0 || msqid >= msginfo.msgmni) {
- DPRINTF(("msqid (%d) out of range (0<=msqid<%d)\n", msqid,
- msginfo.msgmni));
- return (EINVAL);
- }
- if (cmd == IPC_SET &&
- (error = copyin(user_msqptr, &msqbuf, sizeof(msqbuf))) != 0)
- return (error);
-
- msqptr = &msqids[msqid];
-
- mtx_lock(&msq_mtx);
- if (msqptr->msg_qbytes == 0) {
- DPRINTF(("no such msqid\n"));
- error = EINVAL;
- goto done2;
- }
- if (msqptr->msg_perm.seq != IPCID_TO_SEQ(uap->msqid)) {
- DPRINTF(("wrong sequence number\n"));
- error = EINVAL;
- goto done2;
- }
-
- error = 0;
- rval = 0;
-
- switch (cmd) {
-
- case IPC_RMID:
- {
- struct msg *msghdr;
- if ((error = ipcperm(td, &msqptr->msg_perm, IPC_M)))
- goto done2;
- /* Free the message headers */
- msghdr = msqptr->msg_first;
- while (msghdr != NULL) {
- struct msg *msghdr_tmp;
-
- /* Free the segments of each message */
- msqptr->msg_cbytes -= msghdr->msg_ts;
- msqptr->msg_qnum--;
- msghdr_tmp = msghdr;
- msghdr = msghdr->msg_next;
- msg_freehdr(msghdr_tmp);
- }
-
- if (msqptr->msg_cbytes != 0)
- panic("msg_cbytes is screwed up");
- if (msqptr->msg_qnum != 0)
- panic("msg_qnum is screwed up");
-
- msqptr->msg_qbytes = 0; /* Mark it as free */
-#ifdef __CYGWIN__
- msg_info.msg_ids--;
-#endif /* __CYGWIN__ */
-
- wakeup(msqptr);
- }
-
- break;
-
- case IPC_SET:
- if ((error = ipcperm(td, &msqptr->msg_perm, IPC_M)))
- goto done2;
- if (msqbuf.msg_qbytes > msqptr->msg_qbytes) {
- error = suser(td);
- if (error)
- goto done2;
- }
- if (msqbuf.msg_qbytes > (unsigned long) msginfo.msgmnb) {
- DPRINTF(("can't increase msg_qbytes beyond %d"
- "(truncating)\n", msginfo.msgmnb));
- msqbuf.msg_qbytes = msginfo.msgmnb; /* silently restrict qbytes to system limit */
- }
- if (msqbuf.msg_qbytes == 0) {
- DPRINTF(("can't reduce msg_qbytes to 0\n"));
- error = EINVAL; /* non-standard errno! */
- goto done2;
- }
- msqptr->msg_perm.uid = msqbuf.msg_perm.uid; /* change the owner */
- msqptr->msg_perm.gid = msqbuf.msg_perm.gid; /* change the owner */
- msqptr->msg_perm.mode = (msqptr->msg_perm.mode & ~0777) |
- (msqbuf.msg_perm.mode & 0777);
- msqptr->msg_qbytes = msqbuf.msg_qbytes;
- msqptr->msg_ctime = time (NULL);
- break;
-
- case IPC_STAT:
- if ((error = ipcperm(td, &msqptr->msg_perm, IPC_R))) {
- DPRINTF(("requester doesn't have read access\n"));
- goto done2;
- }
- break;
-
- default:
- DPRINTF(("invalid command %d\n", cmd));
- error = EINVAL;
- goto done2;
- }
-
- if (error == 0)
- td->td_retval[0] = rval;
-done2:
- mtx_unlock(&msq_mtx);
- if (cmd == IPC_STAT && error == 0)
- error = copyout(msqptr, user_msqptr, sizeof(struct msqid_ds));
- return(error);
-}
-
-#ifndef _SYS_SYSPROTO_H_
-struct msgget_args {
- key_t key;
- int msgflg;
-};
-#endif
-
-/*
- * MPSAFE
- */
-int
-msgget(struct thread *td, struct msgget_args *uap)
-{
- int msqid, error = 0;
- key_t key = uap->key;
- unsigned msgflg = uap->msgflg;
- register struct msqid_ds *msqptr = NULL;
-
- DPRINTF(("msgget(0x%x, 0%o)\n", key, msgflg));
-
- if (!jail_sysvipc_allowed && jailed(td->td_ucred))
- return (ENOSYS);
-
- mtx_lock(&msq_mtx);
- if (key != IPC_PRIVATE) {
- for (msqid = 0; msqid < msginfo.msgmni; msqid++) {
- msqptr = &msqids[msqid];
- if (msqptr->msg_qbytes != 0 &&
- msqptr->msg_perm.key == key)
- break;
- }
- if (msqid < msginfo.msgmni) {
- DPRINTF(("found public key\n"));
- if ((msgflg & IPC_CREAT) && (msgflg & IPC_EXCL)) {
- DPRINTF(("not exclusive\n"));
- error = EEXIST;
- goto done2;
- }
- if ((error = ipcperm(td, &msqptr->msg_perm, msgflg & 0700))) {
- DPRINTF(("requester doesn't have 0%o access\n",
- msgflg & 0700));
- goto done2;
- }
- goto found;
- }
- }
-
- DPRINTF(("need to allocate the msqid_ds\n"));
- if (key == IPC_PRIVATE || (msgflg & IPC_CREAT)) {
- for (msqid = 0; msqid < msginfo.msgmni; msqid++) {
- /*
- * Look for an unallocated and unlocked msqid_ds.
- * msqid_ds's can be locked by msgsnd or msgrcv while
- * they are copying the message in/out. We can't
- * re-use the entry until they release it.
- */
- msqptr = &msqids[msqid];
- if (msqptr->msg_qbytes == 0 &&
- (msqptr->msg_perm.mode & MSG_LOCKED) == 0)
- break;
- }
- if (msqid == msginfo.msgmni) {
- DPRINTF(("no more msqid_ds's available\n"));
- error = ENOSPC;
- goto done2;
- }
- DPRINTF(("msqid %d is available\n", msqid));
- msqptr->msg_perm.key = key;
-#ifdef __CYGWIN__
- msqptr->msg_perm.cuid = td->ipcblk->uid;
- msqptr->msg_perm.uid = td->ipcblk->uid;
- msqptr->msg_perm.cgid = td->ipcblk->gid;
- msqptr->msg_perm.gid = td->ipcblk->gid;
-#else
- msqptr->msg_perm.cuid = cred->cr_uid;
- msqptr->msg_perm.uid = cred->cr_uid;
- msqptr->msg_perm.cgid = cred->cr_gid;
- msqptr->msg_perm.gid = cred->cr_gid;
-#endif /* __CYGWIN__ */
- msqptr->msg_perm.mode = (msgflg & 0777);
- /* Make sure that the returned msqid is unique */
- msqptr->msg_perm.seq = (msqptr->msg_perm.seq + 1) & 0x7fff;
- msqptr->msg_first = NULL;
- msqptr->msg_last = NULL;
- msqptr->msg_cbytes = 0;
- msqptr->msg_qnum = 0;
- msqptr->msg_qbytes = msginfo.msgmnb;
- msqptr->msg_lspid = 0;
- msqptr->msg_lrpid = 0;
- msqptr->msg_stime = 0;
- msqptr->msg_rtime = 0;
- msqptr->msg_ctime = time (NULL);
-#ifdef __CYGWIN__
- msg_info.msg_ids++;
-#endif /* __CYGWIN__ */
- } else {
- DPRINTF(("didn't find it and wasn't asked to create it\n"));
- error = ENOENT;
- goto done2;
- }
-
-found:
- /* Construct the unique msqid */
- td->td_retval[0] = IXSEQ_TO_IPCID(msqid, msqptr->msg_perm);
-done2:
- mtx_unlock(&msq_mtx);
- return (error);
-}
-
-#ifndef _SYS_SYSPROTO_H_
-struct msgsnd_args {
- int msqid;
- const void *msgp;
- size_t msgsz;
- int msgflg;
-};
-#endif
-
-/*
- * MPSAFE
- */
-int
-msgsnd(struct thread *td, struct msgsnd_args *uap)
-{
- int msqid = uap->msqid;
- const void *user_msgp = uap->msgp;
- size_t msgsz = uap->msgsz;
- int msgflg = uap->msgflg;
- int segs_needed, error = 0;
- register struct msqid_ds *msqptr;
- register struct msg *msghdr;
- short next;
-
- DPRINTF(("call to msgsnd(%d, 0x%x, %d, %d)\n", msqid, user_msgp, msgsz,
- msgflg));
-
- if (!jail_sysvipc_allowed && jailed(td->td_ucred))
- return (ENOSYS);
-
- mtx_lock(&msq_mtx);
- msqid = IPCID_TO_IX(msqid);
-
- if (msqid < 0 || msqid >= msginfo.msgmni) {
- DPRINTF(("msqid (%d) out of range (0<=msqid<%d)\n", msqid,
- msginfo.msgmni));
- error = EINVAL;
- goto done2;
- }
-
- msqptr = &msqids[msqid];
- if (msqptr->msg_qbytes == 0) {
- DPRINTF(("no such message queue id\n"));
- error = EINVAL;
- goto done2;
- }
- if (msqptr->msg_perm.seq != IPCID_TO_SEQ(uap->msqid)) {
- DPRINTF(("wrong sequence number\n"));
- error = EINVAL;
- goto done2;
- }
-
- if ((error = ipcperm(td, &msqptr->msg_perm, IPC_W))) {
- DPRINTF(("requester doesn't have write access\n"));
- goto done2;
- }
-
- segs_needed = (msgsz + msginfo.msgssz - 1) / msginfo.msgssz;
- DPRINTF(("msgsz=%d, msgssz=%d, segs_needed=%d\n", msgsz, msginfo.msgssz,
- segs_needed));
- for (;;) {
- int need_more_resources = 0;
-
- /*
- * check msgsz
- * (inside this loop in case msg_qbytes changes while we sleep)
- */
-
- if (msgsz > msqptr->msg_qbytes) {
- DPRINTF(("msgsz > msqptr->msg_qbytes\n"));
- error = EINVAL;
- goto done2;
- }
-
- if (msqptr->msg_perm.mode & MSG_LOCKED) {
- DPRINTF(("msqid is locked\n"));
- need_more_resources = 1;
- }
- if (msgsz + msqptr->msg_cbytes > msqptr->msg_qbytes) {
- DPRINTF(("msgsz + msg_cbytes > msg_qbytes\n"));
- need_more_resources = 1;
- }
- if (segs_needed > nfree_msgmaps) {
- DPRINTF(("segs_needed > nfree_msgmaps\n"));
- need_more_resources = 1;
- }
- if (free_msghdrs == NULL) {
- DPRINTF(("no more msghdrs\n"));
- need_more_resources = 1;
- }
-
- if (need_more_resources) {
- int we_own_it;
-
- if ((msgflg & IPC_NOWAIT) != 0) {
- DPRINTF(("need more resources but caller "
- "doesn't want to wait\n"));
- error = EAGAIN;
- goto done2;
- }
-
- if ((msqptr->msg_perm.mode & MSG_LOCKED) != 0) {
- DPRINTF(("we don't own the msqid_ds\n"));
- we_own_it = 0;
- } else {
- /* Force later arrivals to wait for our
- request */
- DPRINTF(("we own the msqid_ds\n"));
- msqptr->msg_perm.mode |= MSG_LOCKED;
- we_own_it = 1;
- }
- DPRINTF(("goodnight\n"));
- error = msleep(msqptr, &msq_mtx, (PZERO - 4) | PCATCH,
- "msgsnd", 50);
- DPRINTF(("good morning, error=%d\n", error));
- if (we_own_it)
- msqptr->msg_perm.mode &= ~MSG_LOCKED;
- if (error == EWOULDBLOCK) {
- DPRINTF(("timed out\n"));
- continue;
- }
- if (error != 0) {
- DPRINTF(("msgsnd: interrupted system call\n"));
-#ifdef __CYGWIN__
- if (error != EIDRM)
-#endif /* __CYGWIN__ */
- error = EINTR;
- goto done2;
- }
-
- /*
- * Make sure that the msq queue still exists
- */
-
- if (msqptr->msg_qbytes == 0) {
- DPRINTF(("msqid deleted\n"));
- error = EIDRM;
- goto done2;
- }
-
- } else {
- DPRINTF(("got all the resources that we need\n"));
- break;
- }
- }
-
- /*
- * We have the resources that we need.
- * Make sure!
- */
-
- if (msqptr->msg_perm.mode & MSG_LOCKED)
- panic("msg_perm.mode & MSG_LOCKED");
- if (segs_needed > nfree_msgmaps)
- panic("segs_needed > nfree_msgmaps");
- if (msgsz + msqptr->msg_cbytes > msqptr->msg_qbytes)
- panic("msgsz + msg_cbytes > msg_qbytes");
- if (free_msghdrs == NULL)
- panic("no more msghdrs");
-
- /*
- * Re-lock the msqid_ds in case we page-fault when copying in the
- * message
- */
-
- if ((msqptr->msg_perm.mode & MSG_LOCKED) != 0)
- panic("msqid_ds is already locked");
- msqptr->msg_perm.mode |= MSG_LOCKED;
-
- /*
- * Allocate a message header
- */
-
- msghdr = free_msghdrs;
- free_msghdrs = msghdr->msg_next;
- msghdr->msg_spot = -1;
- msghdr->msg_ts = msgsz;
-
- /*
- * Allocate space for the message
- */
-
- while (segs_needed > 0) {
- if (nfree_msgmaps <= 0)
- panic("not enough msgmaps");
- if (free_msgmaps == -1)
- panic("nil free_msgmaps");
- next = free_msgmaps;
- if (next <= -1)
- panic("next too low #1");
- if (next >= msginfo.msgseg)
- panic("next out of range #1");
- DPRINTF(("allocating segment %d to message\n", next));
- free_msgmaps = msgmaps[next].next;
- nfree_msgmaps--;
- msgmaps[next].next = msghdr->msg_spot;
- msghdr->msg_spot = next;
- segs_needed--;
- }
-
- /*
- * Copy in the message type
- */
-
- mtx_unlock(&msq_mtx);
- if ((error = copyin(user_msgp, &msghdr->msg_type,
- sizeof(msghdr->msg_type))) != 0) {
- mtx_lock(&msq_mtx);
- DPRINTF(("error %d copying the message type\n", error));
- msg_freehdr(msghdr);
- msqptr->msg_perm.mode &= ~MSG_LOCKED;
- wakeup(msqptr);
- goto done2;
- }
- mtx_lock(&msq_mtx);
- user_msgp = (const char *)user_msgp + sizeof(msghdr->msg_type);
-
- /*
- * Validate the message type
- */
-
- if (msghdr->msg_type < 1) {
- msg_freehdr(msghdr);
- msqptr->msg_perm.mode &= ~MSG_LOCKED;
- wakeup(msqptr);
- DPRINTF(("mtype (%d) < 1\n", msghdr->msg_type));
- error = EINVAL;
- goto done2;
- }
-
- /*
- * Copy in the message body
- */
-
- next = msghdr->msg_spot;
- while (msgsz > 0) {
- size_t tlen;
- if (msgsz > (unsigned long) msginfo.msgssz)
- tlen = msginfo.msgssz;
- else
- tlen = msgsz;
- if (next <= -1)
- panic("next too low #2");
- if (next >= msginfo.msgseg)
- panic("next out of range #2");
- mtx_unlock(&msq_mtx);
- if ((error = copyin(user_msgp, &msgpool[next * msginfo.msgssz],
- tlen)) != 0) {
- mtx_lock(&msq_mtx);
- DPRINTF(("error %d copying in message segment\n",
- error));
- msg_freehdr(msghdr);
- msqptr->msg_perm.mode &= ~MSG_LOCKED;
- wakeup(msqptr);
- goto done2;
- }
- mtx_lock(&msq_mtx);
- msgsz -= tlen;
- user_msgp = (const char *)user_msgp + tlen;
- next = msgmaps[next].next;
- }
- if (next != -1)
- panic("didn't use all the msg segments");
-
- /*
- * We've got the message. Unlock the msqid_ds.
- */
-
- msqptr->msg_perm.mode &= ~MSG_LOCKED;
-
- /*
- * Make sure that the msqid_ds is still allocated.
- */
-
- if (msqptr->msg_qbytes == 0) {
- msg_freehdr(msghdr);
- wakeup(msqptr);
- error = EIDRM;
- goto done2;
- }
-
- /*
- * Put the message into the queue
- */
-
- if (msqptr->msg_first == NULL) {
- msqptr->msg_first = msghdr;
- msqptr->msg_last = msghdr;
- } else {
- msqptr->msg_last->msg_next = msghdr;
- msqptr->msg_last = msghdr;
- }
- msqptr->msg_last->msg_next = NULL;
-
- msqptr->msg_cbytes += msghdr->msg_ts;
- msqptr->msg_qnum++;
- msqptr->msg_lspid = td->td_proc->p_pid;
- msqptr->msg_stime = time (NULL);
-
-#ifdef __CYGWIN__
- msg_info.msg_num++;
- msg_info.msg_tot += uap->msgsz;
-#endif /* __CYGWIN__ */
-
- wakeup(msqptr);
- td->td_retval[0] = 0;
-done2:
- mtx_unlock(&msq_mtx);
- return (error);
-}
-
-#ifndef _SYS_SYSPROTO_H_
-struct msgrcv_args {
- int msqid;
- void *msgp;
- size_t msgsz;
- long msgtyp;
- int msgflg;
-};
-#endif
-
-/*
- * MPSAFE
- */
-int
-msgrcv(struct thread *td, struct msgrcv_args *uap)
-{
- int msqid = uap->msqid;
- void *user_msgp = uap->msgp;
- size_t msgsz = uap->msgsz;
- long msgtyp = uap->msgtyp;
- int msgflg = uap->msgflg;
- size_t len;
- register struct msqid_ds *msqptr;
- register struct msg *msghdr;
- int error = 0;
- short next;
-
- DPRINTF(("call to msgrcv(%d, 0x%x, %d, %ld, %d)\n", msqid, user_msgp,
- msgsz, msgtyp, msgflg));
-
- if (!jail_sysvipc_allowed && jailed(td->td_ucred))
- return (ENOSYS);
-
- msqid = IPCID_TO_IX(msqid);
-
- if (msqid < 0 || msqid >= msginfo.msgmni) {
- DPRINTF(("msqid (%d) out of range (0<=msqid<%d)\n", msqid,
- msginfo.msgmni));
- return (EINVAL);
- }
-
- msqptr = &msqids[msqid];
- mtx_lock(&msq_mtx);
- if (msqptr->msg_qbytes == 0) {
- DPRINTF(("no such message queue id\n"));
- error = EINVAL;
- goto done2;
- }
- if (msqptr->msg_perm.seq != IPCID_TO_SEQ(uap->msqid)) {
- DPRINTF(("wrong sequence number\n"));
- error = EINVAL;
- goto done2;
- }
-
- if ((error = ipcperm(td, &msqptr->msg_perm, IPC_R))) {
- DPRINTF(("requester doesn't have read access\n"));
- goto done2;
- }
-
- msghdr = NULL;
- while (msghdr == NULL) {
- if (msgtyp == 0) {
- msghdr = msqptr->msg_first;
- if (msghdr != NULL) {
- if (msgsz < msghdr->msg_ts &&
- (msgflg & MSG_NOERROR) == 0) {
- DPRINTF(("first message on the queue "
- "is too big (want %d, got %d)\n",
- msgsz, msghdr->msg_ts));
- error = E2BIG;
- goto done2;
- }
- if (msqptr->msg_first == msqptr->msg_last) {
- msqptr->msg_first = NULL;
- msqptr->msg_last = NULL;
- } else {
- msqptr->msg_first = msghdr->msg_next;
- if (msqptr->msg_first == NULL)
- panic("msg_first/last screwed up #1");
- }
- }
- } else {
- struct msg *previous;
- struct msg **prev;
-
- previous = NULL;
- prev = &(msqptr->msg_first);
- while ((msghdr = *prev) != NULL) {
- /*
- * Is this message's type an exact match or is
- * this message's type less than or equal to
- * the absolute value of a negative msgtyp?
- * Note that the second half of this test can
- * NEVER be true if msgtyp is positive since
- * msg_type is always positive!
- */
-
- if (msgtyp == msghdr->msg_type ||
- msghdr->msg_type <= -msgtyp) {
- DPRINTF(("found message type %d, "
- "requested %d\n",
- msghdr->msg_type, msgtyp));
- if (msgsz < msghdr->msg_ts &&
- (msgflg & MSG_NOERROR) == 0) {
- DPRINTF(("requested message "
- "on the queue is too big "
- "(want %d, got %d)\n",
- msgsz, msghdr->msg_ts));
- error = E2BIG;
- goto done2;
- }
- *prev = msghdr->msg_next;
- if (msghdr == msqptr->msg_last) {
- if (previous == NULL) {
- if (prev !=
- &msqptr->msg_first)
- panic("msg_first/last screwed up #2");
- msqptr->msg_first =
- NULL;
- msqptr->msg_last =
- NULL;
- } else {
- if (prev ==
- &msqptr->msg_first)
- panic("msg_first/last screwed up #3");
- msqptr->msg_last =
- previous;
- }
- }
- break;
- }
- previous = msghdr;
- prev = &(msghdr->msg_next);
- }
- }
-
- /*
- * We've either extracted the msghdr for the appropriate
- * message or there isn't one.
- * If there is one then bail out of this loop.
- */
-
- if (msghdr != NULL)
- break;
-
- /*
- * Hmph! No message found. Does the user want to wait?
- */
-
- if ((msgflg & IPC_NOWAIT) != 0) {
- DPRINTF(("no appropriate message found (msgtyp=%d)\n",
- msgtyp));
- /* The SVID says to return ENOMSG. */
- error = ENOMSG;
- goto done2;
- }
-
- /*
- * Wait for something to happen
- */
-
- DPRINTF(("msgrcv: goodnight\n"));
- error = msleep(msqptr, &msq_mtx, (PZERO - 4) | PCATCH,
- "msgrcv", 0);
- DPRINTF(("msgrcv: good morning (error=%d)\n", error));
-
- if (error != 0) {
- DPRINTF(("msgrcv: interrupted system call\n"));
-#ifdef __CYGWIN__
- if (error != EIDRM)
-#endif /* __CYGWIN__ */
- error = EINTR;
- goto done2;
- }
-
- /*
- * Make sure that the msq queue still exists
- */
-
- if (msqptr->msg_qbytes == 0 ||
- msqptr->msg_perm.seq != IPCID_TO_SEQ(uap->msqid)) {
- DPRINTF(("msqid deleted\n"));
- error = EIDRM;
- goto done2;
- }
- }
-
- /*
- * Return the message to the user.
- *
- * First, do the bookkeeping (before we risk being interrupted).
- */
-
- msqptr->msg_cbytes -= msghdr->msg_ts;
- msqptr->msg_qnum--;
- msqptr->msg_lrpid = td->td_proc->p_pid;
- msqptr->msg_rtime = time (NULL);
-
- /*
- * Make msgsz the actual amount that we'll be returning.
- * Note that this effectively truncates the message if it is too long
- * (since msgsz is never increased).
- */
-
- DPRINTF(("found a message, msgsz=%d, msg_ts=%d\n", msgsz,
- msghdr->msg_ts));
- if (msgsz > msghdr->msg_ts)
- msgsz = msghdr->msg_ts;
-
- /*
- * Return the type to the user.
- */
-
- mtx_unlock(&msq_mtx);
- error = copyout(&(msghdr->msg_type), user_msgp,
- sizeof(msghdr->msg_type));
- mtx_lock(&msq_mtx);
- if (error != 0) {
- DPRINTF(("error (%d) copying out message type\n", error));
- msg_freehdr(msghdr);
- wakeup(msqptr);
- goto done2;
- }
- user_msgp = (char *)user_msgp + sizeof(msghdr->msg_type);
-
- /*
- * Return the segments to the user
- */
-
- next = msghdr->msg_spot;
- for (len = 0; len < msgsz; len += msginfo.msgssz) {
- size_t tlen;
-
- if (msgsz - len > (unsigned long) msginfo.msgssz)
- tlen = msginfo.msgssz;
- else
- tlen = msgsz - len;
- if (next <= -1)
- panic("next too low #3");
- if (next >= msginfo.msgseg)
- panic("next out of range #3");
- mtx_unlock(&msq_mtx);
- error = copyout(&msgpool[next * msginfo.msgssz],
- user_msgp, tlen);
- mtx_lock(&msq_mtx);
- if (error != 0) {
- DPRINTF(("error (%d) copying out message segment\n",
- error));
- msg_freehdr(msghdr);
- wakeup(msqptr);
- goto done2;
- }
- user_msgp = (char *)user_msgp + tlen;
- next = msgmaps[next].next;
- }
-
- /*
- * Done, return the actual number of bytes copied out.
- */
-
-#ifdef __CYGWIN__
- msg_info.msg_num--;
- msg_info.msg_tot -= msgsz;
-#endif /* __CYGWIN__ */
-
- msg_freehdr(msghdr);
- wakeup(msqptr);
- td->td_retval[0] = msgsz;
-done2:
- mtx_unlock(&msq_mtx);
- return (error);
-}
-
-#ifndef __CYGWIN__
-static int
-sysctl_msqids(SYSCTL_HANDLER_ARGS)
-{
-
- return (SYSCTL_OUT(req, msqids,
- sizeof(struct msqid_ds) * msginfo.msgmni));
-}
-
-SYSCTL_DECL(_kern_ipc);
-SYSCTL_INT(_kern_ipc, OID_AUTO, msgmax, CTLFLAG_RD, &msginfo.msgmax, 0, "");
-SYSCTL_INT(_kern_ipc, OID_AUTO, msgmni, CTLFLAG_RDTUN, &msginfo.msgmni, 0, "");
-SYSCTL_INT(_kern_ipc, OID_AUTO, msgmnb, CTLFLAG_RD, &msginfo.msgmnb, 0, "");
-SYSCTL_INT(_kern_ipc, OID_AUTO, msgtql, CTLFLAG_RD, &msginfo.msgtql, 0, "");
-SYSCTL_INT(_kern_ipc, OID_AUTO, msgssz, CTLFLAG_RDTUN, &msginfo.msgssz, 0, "");
-SYSCTL_INT(_kern_ipc, OID_AUTO, msgseg, CTLFLAG_RDTUN, &msginfo.msgseg, 0, "");
-SYSCTL_PROC(_kern_ipc, OID_AUTO, msqids, CTLFLAG_RD,
- NULL, 0, sysctl_msqids, "", "Message queue IDs");
-#endif /* __CYGWIN__ */
-#endif /* __OUTSIDE_CYGWIN__ */
diff --git a/winsup/cygserver/sysv_sem.cc b/winsup/cygserver/sysv_sem.cc
deleted file mode 100644
index e7ba48b61..000000000
--- a/winsup/cygserver/sysv_sem.cc
+++ /dev/null
@@ -1,1389 +0,0 @@
-/*
- * Implementation of SVID semaphores
- *
- * Author: Daniel Boulet
- *
- * This software is provided ``AS IS'' without any warranties of any kind.
- */
-
-/*
- * This file is heavily changed to become part of Cygwin's cygserver.
- */
-
-#ifdef __OUTSIDE_CYGWIN__
-#include "woutsup.h"
-#include <stdio.h>
-#include <sys/cygwin.h>
-#include <sys/cdefs.h>
-#ifndef __FBSDID
-#define __FBSDID(s) const char version[] = (s)
-#endif
-__FBSDID("$FreeBSD: /repoman/r/ncvs/src/sys/kern/sysv_sem.c,v 1.70 2004/05/30 20:34:58 phk Exp $");
-/* CV, 2006-01-09: Inspected upstream up to version 1.78. */
-
-#define _KERNEL 1
-#define __BSD_VISIBLE 1
-#include <sys/types.h>
-#include <sys/ipc.h>
-
-#include <sys/param.h>
-#include <sys/sysproto.h>
-#include <sys/lock.h>
-#include <sys/sem.h>
-#include <sys/queue.h>
-#include <malloc.h>
-#include <errno.h>
-#include <time.h>
-#include "cygserver.h"
-#include "process.h"
-#include "cygserver_ipc.h"
-#include <sys/smallprint.h>
-
-#ifdef __CYGWIN__
-#define __semctl semctl
-#define __semctl_args semctl_args
-#define SEM_DEBUG
-#endif /* __CYGWIN__ */
-
-#ifdef SEM_DEBUG
-#define DPRINTF(a) debug_printf a
-#else
-#define DPRINTF(a)
-#endif
-
-static int semvalid(int semid, struct semid_ds *semaptr);
-
-static struct sem_undo *semu_alloc(struct thread *td);
-static int semundo_adjust(struct thread *td, struct sem_undo **supptr,
- int semid, int semnum, int adjval);
-static void semundo_clear(int semid, int semnum, struct thread *td);
-
-#ifndef _SYS_SYSPROTO_H_
-struct __semctl_args;
-int __semctl(struct thread *td, struct __semctl_args *uap);
-struct semget_args;
-int semget(struct thread *td, struct semget_args *uap);
-struct semop_args;
-int semop(struct thread *td, struct semop_args *uap);
-#endif
-
-#ifndef __CYGWIN__
-/* XXX casting to (sy_call_t *) is bogus, as usual. */
-static sy_call_t *semcalls[] = {
- (sy_call_t *)__semctl, (sy_call_t *)semget,
- (sy_call_t *)semop
-};
-#endif
-
-static struct mtx sem_mtx; /* semaphore global lock */
-static int semtots = 0;
-static int semtot = 0;
-static struct semid_ds *sema; /* semaphore id pool */
-static struct mtx *sema_mtx; /* semaphore id pool mutexes*/
-static struct sem *sem; /* semaphore pool */
-static SLIST_HEAD(, sem_undo) semu_list; /* list of active undo structures */
-static int *semu; /* undo structure pool */
-#ifndef __CYGWIN__
-static eventhandler_tag semexit_tag;
-#endif /* __CYGWIN__ */
-
-#define SEMUNDO_MTX sem_mtx
-#define SEMUNDO_LOCK() mtx_lock(&SEMUNDO_MTX);
-#define SEMUNDO_HOOKLOCK() _mtx_lock(&SEMUNDO_MTX, p->winpid, __FILE__, __LINE__);
-#define SEMUNDO_UNLOCK() mtx_unlock(&SEMUNDO_MTX);
-#define SEMUNDO_LOCKASSERT(how,pid) mtx_assert(&SEMUNDO_MTX, (how), (pid));
-
-struct sem {
- u_short semval; /* semaphore value */
- pid_t sempid; /* pid of last operation */
- u_short semncnt; /* # awaiting semval > cval */
- u_short semzcnt; /* # awaiting semval = 0 */
-};
-
-/*
- * Undo structure (one per process)
- */
-struct undo {
- short un_adjval; /* adjust on exit values */
- short un_num; /* semaphore # */
- int un_id; /* semid */
-} un_ent[1]; /* undo entries */
-
-struct sem_undo {
- SLIST_ENTRY(sem_undo) un_next; /* ptr to next active undo structure */
-#ifdef __CYGWIN__
- DWORD un_proc; /* owner of this structure */
-#else
- struct proc *un_proc; /* owner of this structure */
-#endif
- short un_cnt; /* # of active entries */
- struct undo un_ent[1]; /* undo entries */
-};
-
-/*
- * Configuration parameters
- */
-#ifndef SEMMNI
-#define SEMMNI 10 /* # of semaphore identifiers */
-#endif
-#ifndef SEMMNS
-#define SEMMNS 60 /* # of semaphores in system */
-#endif
-#ifndef SEMUME
-#define SEMUME 10 /* max # of undo entries per process */
-#endif
-#ifndef SEMMNU
-#define SEMMNU 30 /* # of undo structures in system */
-#endif
-
-/* shouldn't need tuning */
-#ifndef SEMMAP
-#define SEMMAP 30 /* # of entries in semaphore map */
-#endif
-#ifndef SEMMSL
-#define SEMMSL SEMMNS /* max # of semaphores per id */
-#endif
-#ifndef SEMOPM
-#define SEMOPM 100 /* max # of operations per semop call */
-#endif
-
-#ifndef SEMVMX
-#define SEMVMX 32767 /* semaphore maximum value */
-#endif
-#ifndef SEMAEM
-#define SEMAEM 16384 /* adjust on exit max value */
-#endif
-
-#ifdef __CYGWIN__
-/* gcc 3.4 defines a new offsetof which is different for C++. Since this
- file is just a derived plain-C file, we need to revert to the plain-C
- definition of offsetof. */
-#ifdef offsetof
-#undef offsetof
-#endif
-#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
-#endif /* __CYGWIN__ */
-/*
- * Due to the way semaphore memory is allocated, we have to ensure that
- * SEMUSZ is properly aligned.
- */
-
-#define SEM_ALIGN(bytes) (((bytes) + (sizeof(long) - 1)) & ~(sizeof(long) - 1))
-
-/* actual size of an undo structure */
-#define SEMUSZ SEM_ALIGN(offsetof(struct sem_undo, un_ent[SEMUME]))
-
-/*
- * Macro to find a particular sem_undo vector
- */
-#define SEMU(ix) \
- ((struct sem_undo *)(((intptr_t)semu)+ix * seminfo.semusz))
-
-/*
- * semaphore info struct
- */
-struct seminfo seminfo = {
- SEMMNI, /* # of semaphore identifiers */
- SEMMNS, /* # of semaphores in system */
- SEMMSL, /* max # of semaphores per id */
- SEMOPM, /* max # of operations per semop call */
- SEMMNU, /* # of undo structures in system */
- SEMUME, /* max # of undo entries per process */
- SEMVMX, /* semaphore maximum value */
- SEMAEM, /* adjust on exit max value */
- SEMMAP, /* # of entries in semaphore map */
- SEMUSZ /* size in bytes of undo structure */
-};
-
-#ifndef __CYGWIN__
-SYSCTL_DECL(_kern_ipc);
-SYSCTL_INT(_kern_ipc, OID_AUTO, semmap, CTLFLAG_RW, &seminfo.semmap, 0, "");
-SYSCTL_INT(_kern_ipc, OID_AUTO, semmni, CTLFLAG_RDTUN, &seminfo.semmni, 0, "");
-SYSCTL_INT(_kern_ipc, OID_AUTO, semmns, CTLFLAG_RDTUN, &seminfo.semmns, 0, "");
-SYSCTL_INT(_kern_ipc, OID_AUTO, semmnu, CTLFLAG_RDTUN, &seminfo.semmnu, 0, "");
-SYSCTL_INT(_kern_ipc, OID_AUTO, semmsl, CTLFLAG_RW, &seminfo.semmsl, 0, "");
-SYSCTL_INT(_kern_ipc, OID_AUTO, semopm, CTLFLAG_RDTUN, &seminfo.semopm, 0, "");
-SYSCTL_INT(_kern_ipc, OID_AUTO, semume, CTLFLAG_RDTUN, &seminfo.semume, 0, "");
-SYSCTL_INT(_kern_ipc, OID_AUTO, semusz, CTLFLAG_RDTUN, &seminfo.semusz, 0, "");
-SYSCTL_INT(_kern_ipc, OID_AUTO, semvmx, CTLFLAG_RW, &seminfo.semvmx, 0, "");
-SYSCTL_INT(_kern_ipc, OID_AUTO, semaem, CTLFLAG_RW, &seminfo.semaem, 0, "");
-SYSCTL_PROC(_kern_ipc, OID_AUTO, sema, CTLFLAG_RD,
- NULL, 0, sysctl_sema, "", "");
-#endif /* __CYGWIN__ */
-
-void
-seminit(void)
-{
- int i;
-
- TUNABLE_INT_FETCH("kern.ipc.semmap", &seminfo.semmap);
- TUNABLE_INT_FETCH("kern.ipc.semmni", &seminfo.semmni);
- TUNABLE_INT_FETCH("kern.ipc.semmns", &seminfo.semmns);
- TUNABLE_INT_FETCH("kern.ipc.semmnu", &seminfo.semmnu);
- TUNABLE_INT_FETCH("kern.ipc.semmsl", &seminfo.semmsl);
- TUNABLE_INT_FETCH("kern.ipc.semopm", &seminfo.semopm);
- TUNABLE_INT_FETCH("kern.ipc.semume", &seminfo.semume);
- TUNABLE_INT_FETCH("kern.ipc.semusz", &seminfo.semusz);
- TUNABLE_INT_FETCH("kern.ipc.semvmx", &seminfo.semvmx);
- TUNABLE_INT_FETCH("kern.ipc.semaem", &seminfo.semaem);
-
-#ifdef __CYGWIN__
- /* It's too dangerous a setting to leave it alone.
- Keep that clean here. */
- seminfo.semusz = SEM_ALIGN(offsetof(struct sem_undo,
- un_ent[seminfo.semume]));
-#endif /* __CYGWIN__ */
-
- sem = (struct sem *) sys_malloc(sizeof(struct sem) * seminfo.semmns, M_SEM, M_WAITOK);
- sema = (struct semid_ds *) sys_malloc(sizeof(struct semid_ds) * seminfo.semmni, M_SEM,
- M_WAITOK);
- sema_mtx = (struct mtx *) sys_malloc(sizeof(struct mtx) * seminfo.semmni, M_SEM,
- M_WAITOK | M_ZERO);
- semu = (int *) sys_malloc(seminfo.semmnu * seminfo.semusz, M_SEM, M_WAITOK);
-
- for (i = 0; i < seminfo.semmni; i++) {
- sema[i].sem_base = 0;
- sema[i].sem_perm.mode = 0;
- sema[i].sem_perm.seq = 0;
- }
- for (i = 0; i < seminfo.semmni; i++)
- {
- char *buf = (char *) sys_malloc(16, M_SEM, M_WAITOK);
- snprintf(buf, 16, "semid[%d]", i);
- mtx_init(&sema_mtx[i], buf, NULL, MTX_DEF);
- }
- for (i = 0; i < seminfo.semmnu; i++) {
- struct sem_undo *suptr = SEMU(i);
-#ifdef __CYGWIN__
- suptr->un_proc = 0;
-#else
- suptr->un_proc = NULL;
-#endif
- }
- SLIST_INIT(&semu_list);
- mtx_init(&sem_mtx, "sem", NULL, MTX_DEF);
-#ifndef __CYGWIN__
- semexit_tag = EVENTHANDLER_REGISTER(process_exit, semexit_myhook, NULL,
- EVENTHANDLER_PRI_ANY);
-#endif /* __CYGWIN__ */
-}
-
-int
-semunload(void)
-{
-#ifndef __CYGWIN__ /* Would result in being unable to shutdown the
- server gracefully. */
- if (semtot != 0)
- return (EBUSY);
-
- EVENTHANDLER_DEREGISTER(process_exit, semexit_tag);
-#endif /* __CYGWIN__ */
- sys_free(sem, M_SEM);
- sys_free(sema, M_SEM);
- sys_free(semu, M_SEM);
- for (int i = 0; i < seminfo.semmni; i++) {
- sys_free((void *) sema_mtx[i].name, M_SEM);
- mtx_destroy(&sema_mtx[i]);
- }
- mtx_destroy(&sem_mtx);
- return (0);
-}
-
-#ifndef __CYGWIN__
-static int
-sysvsem_modload(struct module *module, int cmd, void *arg)
-{
- int error = 0;
-
- switch (cmd) {
- case MOD_LOAD:
- seminit();
- break;
- case MOD_UNLOAD:
- error = semunload();
- break;
- case MOD_SHUTDOWN:
- break;
- default:
- error = EINVAL;
- break;
- }
- return (error);
-}
-
-static moduledata_t sysvsem_mod = {
- "sysvsem",
- &sysvsem_modload,
- NULL
-};
-
-SYSCALL_MODULE_HELPER(semsys);
-SYSCALL_MODULE_HELPER(__semctl);
-SYSCALL_MODULE_HELPER(semget);
-SYSCALL_MODULE_HELPER(semop);
-
-DECLARE_MODULE(sysvsem, sysvsem_mod,
- SI_SUB_SYSV_SEM, SI_ORDER_FIRST);
-MODULE_VERSION(sysvsem, 1);
-
-/*
- * Entry point for all SEM calls
- *
- * MPSAFE
- */
-int
-semsys(td, uap)
- struct thread *td;
- /* XXX actually varargs. */
- struct semsys_args /* {
- int which;
- int a2;
- int a3;
- int a4;
- int a5;
- } */ *uap;
-{
- int error;
-
- if (!jail_sysvipc_allowed && jailed(td->td_ucred))
- return (ENOSYS);
- if (uap->which < 0 ||
- uap->which >= sizeof(semcalls)/sizeof(semcalls[0]))
- return (EINVAL);
- error = (*semcalls[uap->which])(td, &uap->a2);
- return (error);
-}
-#endif /* __CYGWIN__ */
-
-/*
- * Allocate a new sem_undo structure for a process
- * (returns ptr to structure or NULL if no more room)
- */
-
-static struct sem_undo *
-semu_alloc(struct thread *td)
-{
- int i;
- struct sem_undo *suptr;
- struct sem_undo **supptr;
- int attempt;
-
- SEMUNDO_LOCKASSERT(MA_OWNED, td->td_proc->winpid);
- /*
- * Try twice to allocate something.
- * (we'll purge an empty structure after the first pass so
- * two passes are always enough)
- */
-
- for (attempt = 0; attempt < 2; attempt++) {
- /*
- * Look for a free structure.
- * Fill it in and return it if we find one.
- */
-
- for (i = 0; i < seminfo.semmnu; i++) {
- suptr = SEMU(i);
-#ifdef __CYGWIN__
- if (suptr->un_proc == 0) {
-#else
- if (suptr->un_proc == NULL) {
-#endif
- SLIST_INSERT_HEAD(&semu_list, suptr, un_next);
- suptr->un_cnt = 0;
- suptr->un_proc = td->td_proc->winpid;
- return(suptr);
- }
- }
-
- /*
- * We didn't find a free one, if this is the first attempt
- * then try to free a structure.
- */
-
- if (attempt == 0) {
- /* All the structures are in use - try to free one */
- int did_something = 0;
-
- SLIST_FOREACH_PREVPTR(suptr, supptr, &semu_list,
- un_next) {
- if (suptr->un_cnt == 0) {
-#ifdef __CYGWIN__
- suptr->un_proc = 0;
-#else
- suptr->un_proc = NULL;
-#endif
- did_something = 1;
- *supptr = SLIST_NEXT(suptr, un_next);
- break;
- }
- }
-
- /* If we didn't free anything then just give-up */
- if (!did_something)
- return(NULL);
- } else {
- /*
- * The second pass failed even though we freed
- * something after the first pass!
- * This is IMPOSSIBLE!
- */
- panic("semu_alloc - second attempt failed");
- }
- }
- return (NULL);
-}
-
-/*
- * Adjust a particular entry for a particular proc
- */
-
-static int
-semundo_adjust(struct thread *td, struct sem_undo **supptr, int semid,
- int semnum, int adjval)
-{
- struct proc *p = td->td_proc;
- struct sem_undo *suptr;
- struct undo *sunptr;
- int i;
-
- SEMUNDO_LOCKASSERT(MA_OWNED, td->td_proc->winpid);
- /* Look for and remember the sem_undo if the caller doesn't provide
- it */
-
- suptr = *supptr;
- if (suptr == NULL) {
- SLIST_FOREACH(suptr, &semu_list, un_next) {
-#ifdef __CYGWIN__
- if (suptr->un_proc == p->winpid) {
-#else
- if (suptr->un_proc == p) {
-#endif
- *supptr = suptr;
- break;
- }
- }
- if (suptr == NULL) {
- if (adjval == 0)
- return(0);
- suptr = semu_alloc(td);
- if (suptr == NULL)
- return(ENOSPC);
- *supptr = suptr;
- }
- }
-
- /*
- * Look for the requested entry and adjust it (delete if adjval becomes
- * 0).
- */
- sunptr = &suptr->un_ent[0];
- for (i = 0; i < suptr->un_cnt; i++, sunptr++) {
- if (sunptr->un_id != semid || sunptr->un_num != semnum)
- continue;
- if (adjval != 0) {
- adjval += sunptr->un_adjval;
- if (adjval > seminfo.semaem || adjval < -seminfo.semaem)
- return (ERANGE);
- }
- sunptr->un_adjval = adjval;
- if (sunptr->un_adjval == 0) {
- suptr->un_cnt--;
- if (i < suptr->un_cnt)
- suptr->un_ent[i] =
- suptr->un_ent[suptr->un_cnt];
- }
- return(0);
- }
-
- /* Didn't find the right entry - create it */
- if (adjval == 0)
- return(0);
- if (adjval > seminfo.semaem || adjval < -seminfo.semaem)
- return (ERANGE);
- if (suptr->un_cnt != seminfo.semume) {
- sunptr = &suptr->un_ent[suptr->un_cnt];
- suptr->un_cnt++;
- sunptr->un_adjval = adjval;
- sunptr->un_id = semid; sunptr->un_num = semnum;
- } else
- return(EINVAL);
- return(0);
-}
-
-static void
-semundo_clear(int semid, int semnum, struct thread *td)
-{
- struct sem_undo *suptr;
-
- SEMUNDO_LOCKASSERT(MA_OWNED, td->td_proc->winpid);
- SLIST_FOREACH(suptr, &semu_list, un_next) {
- struct undo *sunptr = &suptr->un_ent[0];
- int i = 0;
-
- while (i < suptr->un_cnt) {
- if (sunptr->un_id == semid) {
- if (semnum == -1 || sunptr->un_num == semnum) {
- suptr->un_cnt--;
- if (i < suptr->un_cnt) {
- suptr->un_ent[i] =
- suptr->un_ent[suptr->un_cnt];
- continue;
- }
- if (semnum != -1)
- break;
- }
- }
- i++, sunptr++;
- }
- }
-}
-
-static int
-semvalid(int semid, struct semid_ds *semaptr)
-{
-
- return ((semaptr->sem_perm.mode & SEM_ALLOC) == 0 ||
- semaptr->sem_perm.seq != IPCID_TO_SEQ(semid) ? EINVAL : 0);
-}
-
-/*
- * Note that the user-mode half of this passes a union, not a pointer
- */
-#ifndef _SYS_SYSPROTO_H_
-struct __semctl_args {
- int semid;
- int semnum;
- int cmd;
- union semun *arg;
-};
-#endif
-
-/*
- * MPSAFE
- */
-int
-__semctl(struct thread *td, struct __semctl_args *uap)
-{
- int semid = uap->semid;
- int semnum = uap->semnum;
- int cmd = uap->cmd;
- u_short *array;
- union semun *arg = uap->arg;
- union semun real_arg;
-#ifndef __CYGWIN__
- struct ucred *cred = td->td_ucred;
-#endif
- int i, rval, error;
- struct semid_ds sbuf;
- struct semid_ds *semaptr;
- struct mtx *sema_mtxp;
- u_short usval, count;
-
- DPRINTF(("call to semctl(%d, %d, %d, 0x%x)\n",
- semid, semnum, cmd, arg));
- if (!jail_sysvipc_allowed && jailed(td->td_ucred))
- return (ENOSYS);
-
- array = NULL;
-
- switch(cmd) {
-#ifdef __CYGWIN__
- case IPC_INFO:
- if ((error = copyin(arg, &real_arg, sizeof(real_arg))) != 0)
- return (error);
- if (!semid) {
- error = copyout(&seminfo, real_arg.buf,
- sizeof(struct seminfo));
- td->td_retval[0] = error ? -1 : 0;
- return (error);
- }
- if (semid > seminfo.semmni)
- semid = seminfo.semmni;
- error = copyout(sema, real_arg.buf,
- semid * sizeof(struct semid_ds));
- td->td_retval[0] = error ? -1 : 0;
- return (error);
- case SEM_INFO:
- if (!(error = copyin(arg, &real_arg, sizeof(real_arg)))) {
- struct sem_info sem_info;
- sem_info.sem_ids = semtots;
- sem_info.sem_num = semtot;
- error = copyout(&sem_info, real_arg.buf,
- sizeof(struct sem_info));
- }
- td->td_retval[0] = error ? -1 : 0;
- return (error);
-
-#endif /* __CYGWIN__ */
- case SEM_STAT:
- if (semid < 0 || semid >= seminfo.semmni)
- return (EINVAL);
- if ((error = copyin(arg, &real_arg, sizeof(real_arg))) != 0)
- return (error);
- semaptr = &sema[semid];
- sema_mtxp = &sema_mtx[semid];
- mtx_lock(sema_mtxp);
- if ((semaptr->sem_perm.mode & SEM_ALLOC) == 0) {
- error = EINVAL;
- goto done2;
- }
- if ((error = ipcperm(td, &semaptr->sem_perm, IPC_R)))
- goto done2;
- mtx_unlock(sema_mtxp);
- error = copyout(semaptr, real_arg.buf, sizeof(struct semid_ds));
- rval = IXSEQ_TO_IPCID(semid,semaptr->sem_perm);
- if (error == 0)
- td->td_retval[0] = rval;
- return (error);
- }
-
- semid = IPCID_TO_IX(semid);
- if (semid < 0 || semid >= seminfo.semmni)
- return (EINVAL);
-
- semaptr = &sema[semid];
- sema_mtxp = &sema_mtx[semid];
-
- error = 0;
- rval = 0;
-
- switch (cmd) {
- case IPC_RMID:
- mtx_lock(sema_mtxp);
- if ((error = semvalid(uap->semid, semaptr)) != 0)
- goto done2;
- if ((error = ipcperm(td, &semaptr->sem_perm, IPC_M)))
- goto done2;
-#ifdef __CYGWIN__
- semaptr->sem_perm.cuid = td->ipcblk->uid;
- semaptr->sem_perm.uid = td->ipcblk->uid;
-#else
- semaptr->sem_perm.cuid = cred->cr_uid;
- semaptr->sem_perm.uid = cred->cr_uid;
-#endif
- semtot -= semaptr->sem_nsems;
- semtots--;
- for (i = semaptr->sem_base - sem; i < semtot; i++)
- sem[i] = sem[i + semaptr->sem_nsems];
- for (i = 0; i < seminfo.semmni; i++) {
- if ((sema[i].sem_perm.mode & SEM_ALLOC) &&
- sema[i].sem_base > semaptr->sem_base)
- sema[i].sem_base -= semaptr->sem_nsems;
- }
- semaptr->sem_perm.mode = 0;
- SEMUNDO_LOCK();
- semundo_clear(semid, -1, td);
- SEMUNDO_UNLOCK();
- wakeup(semaptr);
- break;
-
- case IPC_SET:
- if ((error = copyin(arg, &real_arg, sizeof(real_arg))) != 0)
- goto done2;
- if ((error = copyin(real_arg.buf, &sbuf, sizeof(sbuf))) != 0)
- goto done2;
- mtx_lock(sema_mtxp);
- if ((error = semvalid(uap->semid, semaptr)) != 0)
- goto done2;
- if ((error = ipcperm(td, &semaptr->sem_perm, IPC_M)))
- goto done2;
- semaptr->sem_perm.uid = sbuf.sem_perm.uid;
- semaptr->sem_perm.gid = sbuf.sem_perm.gid;
- semaptr->sem_perm.mode = (semaptr->sem_perm.mode & ~0777) |
- (sbuf.sem_perm.mode & 0777);
- semaptr->sem_ctime = time (NULL);
- break;
-
- case IPC_STAT:
- if ((error = copyin(arg, &real_arg, sizeof(real_arg))) != 0)
- goto done2;
- mtx_lock(sema_mtxp);
- if ((error = semvalid(uap->semid, semaptr)) != 0)
- goto done2;
- if ((error = ipcperm(td, &semaptr->sem_perm, IPC_R)))
- goto done2;
- sbuf = *semaptr;
- mtx_unlock(sema_mtxp);
- error = copyout(semaptr, real_arg.buf,
- sizeof(struct semid_ds));
- break;
-
- case GETNCNT:
- mtx_lock(sema_mtxp);
- if ((error = semvalid(uap->semid, semaptr)) != 0)
- goto done2;
- if ((error = ipcperm(td, &semaptr->sem_perm, IPC_R)))
- goto done2;
- if (semnum < 0 || semnum >= semaptr->sem_nsems) {
- error = EINVAL;
- goto done2;
- }
- rval = semaptr->sem_base[semnum].semncnt;
- break;
-
- case GETPID:
- mtx_lock(sema_mtxp);
- if ((error = semvalid(uap->semid, semaptr)) != 0)
- goto done2;
- if ((error = ipcperm(td, &semaptr->sem_perm, IPC_R)))
- goto done2;
- if (semnum < 0 || semnum >= semaptr->sem_nsems) {
- error = EINVAL;
- goto done2;
- }
- rval = semaptr->sem_base[semnum].sempid;
- break;
-
- case GETVAL:
- mtx_lock(sema_mtxp);
- if ((error = semvalid(uap->semid, semaptr)) != 0)
- goto done2;
- if ((error = ipcperm(td, &semaptr->sem_perm, IPC_R)))
- goto done2;
- if (semnum < 0 || semnum >= semaptr->sem_nsems) {
- error = EINVAL;
- goto done2;
- }
- rval = semaptr->sem_base[semnum].semval;
- break;
-
- case GETALL:
- if ((error = copyin(arg, &real_arg, sizeof(real_arg))) != 0)
- goto done2;
- array = (u_short *) sys_malloc(sizeof(*array) * semaptr->sem_nsems, M_TEMP,
- M_WAITOK);
- mtx_lock(sema_mtxp);
- if ((error = semvalid(uap->semid, semaptr)) != 0)
- goto done2;
- if ((error = ipcperm(td, &semaptr->sem_perm, IPC_R)))
- goto done2;
- for (i = 0; i < semaptr->sem_nsems; i++)
- array[i] = semaptr->sem_base[i].semval;
- mtx_unlock(sema_mtxp);
- error = copyout(array, real_arg.array,
- i * sizeof(real_arg.array[0]));
- break;
-
- case GETZCNT:
- mtx_lock(sema_mtxp);
- if ((error = semvalid(uap->semid, semaptr)) != 0)
- goto done2;
- if ((error = ipcperm(td, &semaptr->sem_perm, IPC_R)))
- goto done2;
- if (semnum < 0 || semnum >= semaptr->sem_nsems) {
- error = EINVAL;
- goto done2;
- }
- rval = semaptr->sem_base[semnum].semzcnt;
- break;
-
- case SETVAL:
- if ((error = copyin(arg, &real_arg, sizeof(real_arg))) != 0)
- goto done2;
- mtx_lock(sema_mtxp);
- if ((error = semvalid(uap->semid, semaptr)) != 0)
- goto done2;
- if ((error = ipcperm(td, &semaptr->sem_perm, IPC_W)))
- goto done2;
- if (semnum < 0 || semnum >= semaptr->sem_nsems) {
- error = EINVAL;
- goto done2;
- }
- if (real_arg.val < 0 || real_arg.val > seminfo.semvmx) {
- error = ERANGE;
- goto done2;
- }
- semaptr->sem_base[semnum].semval = real_arg.val;
- SEMUNDO_LOCK();
- semundo_clear(semid, semnum, td);
- SEMUNDO_UNLOCK();
- wakeup(semaptr);
- break;
-
- case SETALL:
- mtx_lock(sema_mtxp);
-raced:
- if ((error = semvalid(uap->semid, semaptr)) != 0)
- goto done2;
- count = semaptr->sem_nsems;
- mtx_unlock(sema_mtxp);
- if ((error = copyin(arg, &real_arg, sizeof(real_arg))) != 0)
- goto done2;
- array = (u_short *) sys_malloc(sizeof(*array) * count, M_TEMP, M_WAITOK);
- error = copyin(real_arg.array, array, count * sizeof(*array));
- if (error)
- break;
- mtx_lock(sema_mtxp);
- if ((error = semvalid(uap->semid, semaptr)) != 0)
- goto done2;
- /* we could have raced? */
- if (count != semaptr->sem_nsems) {
- sys_free(array, M_TEMP);
- array = NULL;
- goto raced;
- }
- if ((error = ipcperm(td, &semaptr->sem_perm, IPC_W)))
- goto done2;
- for (i = 0; i < semaptr->sem_nsems; i++) {
- usval = array[i];
- if (usval > seminfo.semvmx) {
- error = ERANGE;
- break;
- }
- semaptr->sem_base[i].semval = usval;
- }
- SEMUNDO_LOCK();
- semundo_clear(semid, -1, td);
- SEMUNDO_UNLOCK();
- wakeup(semaptr);
- break;
-
- default:
- error = EINVAL;
- break;
- }
-
- if (error == 0)
- td->td_retval[0] = rval;
-done2:
- if (mtx_owned(sema_mtxp, td->td_proc->winpid))
- mtx_unlock(sema_mtxp);
- if (array != NULL)
- sys_free(array, M_TEMP);
- return(error);
-}
-
-#ifndef _SYS_SYSPROTO_H_
-struct semget_args {
- key_t key;
- int nsems;
- int semflg;
-};
-#endif
-
-/*
- * MPSAFE
- */
-int
-semget(struct thread *td, struct semget_args *uap)
-{
- int semid, error = 0;
- key_t key = uap->key;
- int nsems = uap->nsems;
- int semflg = uap->semflg;
-#ifndef __CYGWIN__
- struct ucred *cred = td->td_ucred;
-#endif
-
- DPRINTF(("semget(0x%llx, %d, 0%o)\n", key, nsems, semflg));
- if (!jail_sysvipc_allowed && jailed(td->td_ucred))
- return (ENOSYS);
-
- mtx_lock(&Giant);
- if (key != IPC_PRIVATE) {
- for (semid = 0; semid < seminfo.semmni; semid++) {
- if ((sema[semid].sem_perm.mode & SEM_ALLOC) &&
- sema[semid].sem_perm.key == key)
- break;
- }
- if (semid < seminfo.semmni) {
- DPRINTF(("found public key\n"));
- if ((error = ipcperm(td, &sema[semid].sem_perm,
- semflg & 0700))) {
- goto done2;
- }
- if (nsems > 0 && sema[semid].sem_nsems < nsems) {
- DPRINTF(("too small\n"));
- error = EINVAL;
- goto done2;
- }
- if ((semflg & IPC_CREAT) && (semflg & IPC_EXCL)) {
- DPRINTF(("not exclusive\n"));
- error = EEXIST;
- goto done2;
- }
- goto found;
- }
- }
-
- DPRINTF(("need to allocate the semid_ds\n"));
- if (key == IPC_PRIVATE || (semflg & IPC_CREAT)) {
- if (nsems <= 0 || nsems > seminfo.semmsl) {
- DPRINTF(("nsems out of range (0<%d<=%d)\n", nsems,
- seminfo.semmsl));
- error = EINVAL;
- goto done2;
- }
- if (nsems > seminfo.semmns - semtot) {
- DPRINTF((
- "not enough semaphores left (need %d, got %d)\n",
- nsems, seminfo.semmns - semtot));
- error = ENOSPC;
- goto done2;
- }
- for (semid = 0; semid < seminfo.semmni; semid++) {
- if ((sema[semid].sem_perm.mode & SEM_ALLOC) == 0)
- break;
- }
- if (semid == seminfo.semmni) {
- DPRINTF(("no more semid_ds's available\n"));
- error = ENOSPC;
- goto done2;
- }
- DPRINTF(("semid %d is available\n", semid));
- sema[semid].sem_perm.key = key;
-#ifdef __CYGWIN__
- sema[semid].sem_perm.cuid = td->ipcblk->uid;
- sema[semid].sem_perm.uid = td->ipcblk->uid;
- sema[semid].sem_perm.cgid = td->ipcblk->gid;
- sema[semid].sem_perm.gid = td->ipcblk->gid;
-#else
- sema[semid].sem_perm.cuid = cred->cr_uid;
- sema[semid].sem_perm.uid = cred->cr_uid;
- sema[semid].sem_perm.cgid = cred->cr_gid;
- sema[semid].sem_perm.gid = cred->cr_gid;
-#endif
- sema[semid].sem_perm.mode = (semflg & 0777) | SEM_ALLOC;
- sema[semid].sem_perm.seq =
- (sema[semid].sem_perm.seq + 1) & 0x7fff;
- sema[semid].sem_nsems = nsems;
- sema[semid].sem_otime = 0;
- sema[semid].sem_ctime = time (NULL);
- sema[semid].sem_base = &sem[semtot];
- semtot += nsems;
- semtots++;
- bzero(sema[semid].sem_base,
- sizeof(sema[semid].sem_base[0])*nsems);
- DPRINTF(("sembase = 0x%x, next = 0x%x\n", sema[semid].sem_base,
- &sem[semtot]));
- } else {
- DPRINTF(("didn't find it and wasn't asked to create it\n"));
- error = ENOENT;
- goto done2;
- }
-
-found:
- td->td_retval[0] = IXSEQ_TO_IPCID(semid, sema[semid].sem_perm);
-done2:
-#ifdef __CYGWIN__
- if (!error)
- ipcexit_creat_hookthread (td);
-#endif
- mtx_unlock(&Giant);
- return (error);
-}
-
-#ifndef _SYS_SYSPROTO_H_
-struct semop_args {
- int semid;
- struct sembuf *sops;
- size_t nsops;
-};
-#endif
-
-/*
- * MPSAFE
- */
-int
-semop(struct thread *td, struct semop_args *uap)
-{
-#define SMALL_SOPS 8
- struct sembuf small_sops[SMALL_SOPS];
- int semid = uap->semid;
- size_t nsops = uap->nsops;
- struct sembuf *sops;
- struct semid_ds *semaptr;
- struct sembuf *sopptr = 0;
- struct sem *semptr = 0;
- struct sem_undo *suptr;
- struct mtx *sema_mtxp;
- size_t i, j, k;
- int error;
- int do_wakeup, do_undos;
-
- DPRINTF(("call to semop(%d, 0x%x, %u)\n", semid, uap->sops, nsops));
-
- if (!jail_sysvipc_allowed && jailed(td->td_ucred))
- return (ENOSYS);
-
- semid = IPCID_TO_IX(semid); /* Convert back to zero origin */
-
- if (semid < 0 || semid >= seminfo.semmni)
- return (EINVAL);
-
- /* Allocate memory for sem_ops */
- if (nsops <= SMALL_SOPS)
- sops = small_sops;
- else if (nsops <= (unsigned long) seminfo.semopm)
- sops = (struct sembuf *) sys_malloc(nsops * sizeof(*sops), M_SEM, M_WAITOK);
- else {
- DPRINTF(("too many sops (max=%d, nsops=%d)\n", seminfo.semopm,
- nsops));
- return (E2BIG);
- }
- if ((error = copyin(uap->sops, sops, nsops * sizeof(sops[0]))) != 0) {
- DPRINTF(("error = %d from copyin(%08x, %08x, %d)\n", error,
- uap->sops, sops, nsops * sizeof(sops[0])));
- if (sops != small_sops)
- sys_free(sops, M_SEM);
- return (error);
- }
-
- semaptr = &sema[semid];
- sema_mtxp = &sema_mtx[semid];
- mtx_lock(sema_mtxp);
- if ((semaptr->sem_perm.mode & SEM_ALLOC) == 0) {
- error = EINVAL;
- goto done2;
- }
- if (semaptr->sem_perm.seq != IPCID_TO_SEQ(uap->semid)) {
- error = EINVAL;
- goto done2;
- }
- /*
- * Initial pass thru sops to see what permissions are needed.
- * Also perform any checks that don't need repeating on each
- * attempt to satisfy the request vector.
- */
- j = 0; /* permission needed */
- do_undos = 0;
- for (i = 0; i < nsops; i++) {
- sopptr = &sops[i];
- if (sopptr->sem_num >= semaptr->sem_nsems) {
- error = EFBIG;
- goto done2;
- }
- if (sopptr->sem_flg & SEM_UNDO && sopptr->sem_op != 0)
- do_undos = 1;
- j |= (sopptr->sem_op == 0) ? SEM_R : SEM_A;
- }
-
- if ((error = ipcperm(td, &semaptr->sem_perm, j))) {
- DPRINTF(("error = %d from ipaccess\n", error));
- goto done2;
- }
-
- /*
- * Loop trying to satisfy the vector of requests.
- * If we reach a point where we must wait, any requests already
- * performed are rolled back and we go to sleep until some other
- * process wakes us up. At this point, we start all over again.
- *
- * This ensures that from the perspective of other tasks, a set
- * of requests is atomic (never partially satisfied).
- */
- for (;;) {
- do_wakeup = 0;
- error = 0; /* error return if necessary */
-
- for (i = 0; i < nsops; i++) {
- sopptr = &sops[i];
- semptr = &semaptr->sem_base[sopptr->sem_num];
-
- DPRINTF((
- "semop: semaptr=%x, sem_base=%x, "
- "semptr=%x, sem[%d]=%d : op=%d, flag=%s\n",
- semaptr, semaptr->sem_base, semptr,
- sopptr->sem_num, semptr->semval, sopptr->sem_op,
- (sopptr->sem_flg & IPC_NOWAIT) ?
- "nowait" : "wait"));
-
- if (sopptr->sem_op < 0) {
- if (semptr->semval + sopptr->sem_op < 0) {
- DPRINTF(("semop: can't do it now\n"));
- break;
- } else {
- semptr->semval += sopptr->sem_op;
- if (semptr->semval == 0 &&
- semptr->semzcnt > 0)
- do_wakeup = 1;
- }
- } else if (sopptr->sem_op == 0) {
- if (semptr->semval != 0) {
- DPRINTF(("semop: not zero now\n"));
- break;
- }
- } else if (semptr->semval + sopptr->sem_op >
- seminfo.semvmx) {
- error = ERANGE;
- break;
- } else {
- if (semptr->semncnt > 0)
- do_wakeup = 1;
- semptr->semval += sopptr->sem_op;
- }
- }
-
- /*
- * Did we get through the entire vector?
- */
- if (i >= nsops)
- goto done;
-
- /*
- * No ... rollback anything that we've already done
- */
- DPRINTF(("semop: rollback 0 through %d\n", i-1));
- for (j = 0; j < i; j++)
- semaptr->sem_base[sops[j].sem_num].semval -=
- sops[j].sem_op;
-
- /* If we detected an error, return it */
- if (error != 0)
- goto done2;
-
- /*
- * If the request that we couldn't satisfy has the
- * NOWAIT flag set then return with EAGAIN.
- */
- if (sopptr->sem_flg & IPC_NOWAIT) {
- error = EAGAIN;
- goto done2;
- }
-
- if (sopptr->sem_op == 0)
- semptr->semzcnt++;
- else
- semptr->semncnt++;
-
- DPRINTF(("semop: good night!\n"));
- error = msleep(semaptr, sema_mtxp, (PZERO - 4) | PCATCH,
- "semwait", 0);
- DPRINTF(("semop: good morning (error=%d)!\n", error));
- /* return code is checked below, after sem[nz]cnt-- */
-
- /*
- * Make sure that the semaphore still exists
- */
- if ((semaptr->sem_perm.mode & SEM_ALLOC) == 0 ||
- semaptr->sem_perm.seq != IPCID_TO_SEQ(uap->semid)) {
- error = EIDRM;
- goto done2;
- }
-
- /*
- * The semaphore is still alive. Readjust the count of
- * waiting processes.
- */
- if (sopptr->sem_op == 0)
- semptr->semzcnt--;
- else
- semptr->semncnt--;
-
- /*
- * Is it really morning, or was our sleep interrupted?
- * (Delayed check of msleep() return code because we
- * need to decrement sem[nz]cnt either way.)
- */
- if (error != 0) {
-#ifdef __CYGWIN__
- if (error != EIDRM)
-#endif /* __CYGWIN__ */
- error = EINTR;
- goto done2;
- }
- DPRINTF(("semop: good morning!\n"));
- }
-
-done:
- /*
- * Process any SEM_UNDO requests.
- */
- if (do_undos) {
- SEMUNDO_LOCK();
- suptr = NULL;
- for (i = 0; i < nsops; i++) {
- /*
- * We only need to deal with SEM_UNDO's for non-zero
- * op's.
- */
- int adjval;
-
- if ((sops[i].sem_flg & SEM_UNDO) == 0)
- continue;
- adjval = sops[i].sem_op;
- if (adjval == 0)
- continue;
- error = semundo_adjust(td, &suptr, semid,
- sops[i].sem_num, -adjval);
- if (error == 0)
- continue;
-
- /*
- * Oh-Oh! We ran out of either sem_undo's or undo's.
- * Rollback the adjustments to this point and then
- * rollback the semaphore ups and down so we can return
- * with an error with all structures restored. We
- * rollback the undo's in the exact reverse order that
- * we applied them. This guarantees that we won't run
- * out of space as we roll things back out.
- */
- for (j = 0; j < i; j++) {
- k = i - j - 1;
- if ((sops[k].sem_flg & SEM_UNDO) == 0)
- continue;
- adjval = sops[k].sem_op;
- if (adjval == 0)
- continue;
- if (semundo_adjust(td, &suptr, semid,
- sops[k].sem_num, adjval) != 0)
- panic("semop - can't undo undos");
- }
-
- for (j = 0; j < nsops; j++)
- semaptr->sem_base[sops[j].sem_num].semval -=
- sops[j].sem_op;
-
- DPRINTF(("error = %d from semundo_adjust\n", error));
- SEMUNDO_UNLOCK();
- goto done2;
- } /* loop through the sops */
- SEMUNDO_UNLOCK();
- } /* if (do_undos) */
-
- /* We're definitely done - set the sempid's and time */
- for (i = 0; i < nsops; i++) {
- sopptr = &sops[i];
- semptr = &semaptr->sem_base[sopptr->sem_num];
- semptr->sempid = td->td_proc->p_pid;
- }
- semaptr->sem_otime = time (NULL);
-
- /*
- * Do a wakeup if any semaphore was up'd whilst something was
- * sleeping on it.
- */
- if (do_wakeup) {
- DPRINTF(("semop: doing wakeup\n"));
- wakeup(semaptr);
- DPRINTF(("semop: back from wakeup\n"));
- }
- DPRINTF(("semop: done\n"));
- td->td_retval[0] = 0;
-done2:
- mtx_unlock(sema_mtxp);
- if (sops != small_sops)
- sys_free(sops, M_SEM);
- return (error);
-}
-
-/*
- * Go through the undo structures for this process and apply the adjustments to
- * semaphores.
- */
-void
-semexit_myhook(void *arg, struct proc *p)
-{
- struct sem_undo *suptr;
- struct sem_undo **supptr;
-
- /*
- * Go through the chain of undo vectors looking for one
- * associated with this process.
- */
- SEMUNDO_HOOKLOCK();
- SLIST_FOREACH_PREVPTR(suptr, supptr, &semu_list, un_next) {
-#ifdef __CYGWIN__
- if (suptr->un_proc == p->winpid)
-#else
- if (suptr->un_proc == p)
-#endif
- break;
- }
-#ifndef __CYGWIN__
- SEMUNDO_UNLOCK();
-#endif
-
- if (suptr == NULL) {
- SEMUNDO_UNLOCK();
- return;
- }
-
-#ifdef __CYGWIN__
- DPRINTF(("proc @%u(%u) has undo structure with %d entries\n",
- p->cygpid, p->winpid, suptr->un_cnt));
-#else
- DPRINTF(("proc @%08x has undo structure with %d entries\n", p,
- suptr->un_cnt));
-#endif
-
- /*
- * If there are any active undo elements then process them.
- */
- if (suptr->un_cnt > 0) {
- int ix;
-
- for (ix = 0; ix < suptr->un_cnt; ix++) {
- int semid = suptr->un_ent[ix].un_id;
- int semnum = suptr->un_ent[ix].un_num;
- int adjval = suptr->un_ent[ix].un_adjval;
- struct semid_ds *semaptr;
- struct mtx *sema_mtxp;
-
- semaptr = &sema[semid];
- sema_mtxp = &sema_mtx[semid];
-#ifdef __CYGWIN__
- _mtx_lock(sema_mtxp, p->winpid, __FILE__, __LINE__);
-#else
- mtx_lock(sema_mtxp);
- SEMUNDO_HOOKLOCK();
-#endif
- if ((semaptr->sem_perm.mode & SEM_ALLOC) == 0)
- panic("semexit - semid not allocated");
- if (semnum >= semaptr->sem_nsems)
- panic("semexit - semnum out of range");
-
- DPRINTF((
-#ifdef __CYGWIN__
- "semexit: %u id=%d num=%d(adj=%d) ; sem=%d\n",
-#else
- "semexit: %08x id=%d num=%d(adj=%d) ; sem=%d\n",
-#endif
- suptr->un_proc, suptr->un_ent[ix].un_id,
- suptr->un_ent[ix].un_num,
- suptr->un_ent[ix].un_adjval,
- semaptr->sem_base[semnum].semval));
-
- if (adjval < 0) {
- if (semaptr->sem_base[semnum].semval < -adjval)
- semaptr->sem_base[semnum].semval = 0;
- else
- semaptr->sem_base[semnum].semval +=
- adjval;
- } else
- semaptr->sem_base[semnum].semval += adjval;
-
- wakeup(semaptr);
- DPRINTF(("semexit: back from wakeup\n"));
- _mtx_unlock(sema_mtxp, __FILE__, __LINE__);
-#ifndef __CYGWIN__
- SEMUNDO_UNLOCK();
-#endif
- }
- }
-
- /*
- * Deallocate the undo vector.
- */
- DPRINTF(("removing vector (%u)\n", suptr->un_proc));
-#ifdef __CYGWIN__
- suptr->un_proc = 0;
-#else
- suptr->un_proc = NULL;
-#endif
- *supptr = SLIST_NEXT(suptr, un_next);
-#ifdef __CYGWIN__
- SEMUNDO_UNLOCK();
-#endif
-}
-
-#ifndef __CYGWIN__
-static int
-sysctl_sema(SYSCTL_HANDLER_ARGS)
-{
-
- return (SYSCTL_OUT(req, sema,
- sizeof(struct semid_ds) * seminfo.semmni));
-}
-#endif /* __CYGWIN__ */
-#endif /* __OUTSIDE_CYGWIN__ */
diff --git a/winsup/cygserver/sysv_shm.cc b/winsup/cygserver/sysv_shm.cc
deleted file mode 100644
index 4578c53a2..000000000
--- a/winsup/cygserver/sysv_shm.cc
+++ /dev/null
@@ -1,1045 +0,0 @@
-/* $NetBSD: sysv_shm.c,v 1.23 1994/07/04 23:25:12 glass Exp $ */
-/*
- * Copyright (c) 1994 Adam Glass and Charles Hannum. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by Adam Glass and Charles
- * Hannum.
- * 4. The names of the authors may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/*
- * This file is heavily changed to become part of Cygwin's cygserver.
- */
-
-#ifdef __OUTSIDE_CYGWIN__
-#include "woutsup.h"
-#include <sys/cdefs.h>
-#ifndef __FBSDID
-#define __FBSDID(s) const char version[] = (s)
-#endif
-__FBSDID("$FreeBSD: /repoman/r/ncvs/src/sys/kern/sysv_shm.c,v 1.89 2003/11/07 04:47:14 rwatson Exp $");
-/* CV, 2006-01-09: Inspected upstream up to version 1.104. */
-
-#define _KERNEL 1
-#define __BSD_VISIBLE 1
-#include <sys/param.h>
-#include <sys/lock.h>
-#include <sys/shm.h>
-#include <malloc.h>
-#include <sys/mman.h>
-#include <sys/stat.h>
-#include <sys/sysproto.h>
-
-#include <errno.h>
-#include <time.h>
-#include <unistd.h>
-#include "cygserver.h"
-#include "process.h"
-#include "cygserver_ipc.h"
-
-#ifdef __CYGWIN__
-#ifndef PAGE_SIZE
-#define PAGE_SIZE (getpagesize ())
-#endif
-#ifndef PAGE_MASK
-#define PAGE_MASK (PAGE_SIZE - 1)
-#endif
-#define btoc(b) (((b) + PAGE_MASK) / PAGE_SIZE)
-#define round_page(p) ((((unsigned long)(p)) + PAGE_MASK) & ~(PAGE_MASK))
-#ifdef __CYGWIN__
-#define GIANT_REQUIRED
-#else
-#define GIANT_REQUIRED mtx_assert(&Giant, MA_OWNED)
-#endif
-#define KERN_SUCCESS 0
-#define VM_PROT_READ PROT_READ
-#define VM_PROT_WRITE PROT_WRITE
-#define VM_INHERIT_SHARE 0
-#define OBJT_PHYS 0
-#define OBJT_SWAP 0
-#define VM_PROT_DEFAULT 0
-#define VM_OBJECT_LOCK(a)
-#define vm_object_clear_flag(a,b)
-#define vm_object_set_flag(a,b)
-#define VM_OBJECT_UNLOCK(a)
-#define vm_map_remove(a,b,c) KERN_SUCCESS
-typedef int vm_prot_t;
-#endif /* __CYGWIN__ */
-
-#ifndef __CYGWIN__
-static MALLOC_DEFINE(M_SHM, "shm", "SVID compatible shared memory segments");
-
-struct oshmctl_args;
-static int oshmctl(struct thread *td, struct oshmctl_args *uap);
-#endif /* __CYGWIN__ */
-
-static int shmget_allocate_segment(struct thread *td,
- struct shmget_args *uap, int mode);
-static int shmget_existing(struct thread *td, struct shmget_args *uap,
- int mode, int segnum);
-
-#ifndef __CYGWIN__
-/* XXX casting to (sy_call_t *) is bogus, as usual. */
-static sy_call_t *shmcalls[] = {
- (sy_call_t *)shmat, (sy_call_t *)oshmctl,
- (sy_call_t *)shmdt, (sy_call_t *)shmget,
- (sy_call_t *)shmctl
-};
-#endif /* __CYGWIN__ */
-
-#define SHMSEG_FREE 0x0200
-#define SHMSEG_REMOVED 0x0400
-#define SHMSEG_ALLOCATED 0x0800
-#define SHMSEG_WANTED 0x1000
-
-static int shm_last_free, shm_nused, shm_committed, shmalloced, shm_nattch;
-static struct shmid_ds *shmsegs;
-
-struct shm_handle {
- /* vm_offset_t kva; */
- vm_object_t shm_object;
-};
-
-struct shmmap_state {
- vm_offset_t va;
- int shmid;
-};
-
-static void shm_deallocate_segment(struct shmid_ds *);
-static int shm_find_segment_by_key(key_t);
-static struct shmid_ds *shm_find_segment_by_shmid(int);
-static struct shmid_ds *shm_find_segment_by_shmidx(int);
-static int shm_delete_mapping(struct vmspace *vm, struct shmmap_state *);
-static void shmrealloc(void);
-
-/*
- * Tuneable values.
- */
-#ifndef SHMMAXPGS
-#define SHMMAXPGS 8192 /* Note: sysv shared memory is swap backed. */
-#endif
-#ifndef SHMMAX
-#define SHMMAX (SHMMAXPGS*PAGE_SIZE)
-#endif
-#ifndef SHMMIN
-#define SHMMIN 1
-#endif
-#ifndef SHMMNI
-#define SHMMNI 192
-#endif
-#ifndef SHMSEG
-#define SHMSEG 128
-#endif
-#ifndef SHMALL
-#define SHMALL (SHMMAXPGS)
-#endif
-
-struct shminfo shminfo = {
- SHMMAX,
- SHMMIN,
- SHMMNI,
- SHMSEG,
- SHMALL
-};
-
-#ifndef __CYGWIN__
-static int shm_use_phys;
-#else
-static long shm_use_phys;
-static long shm_allow_removed;
-#endif /* __CYGWIN__ */
-
-#ifndef __CYGWIN__
-struct shm_info shm_info;
-#endif /* __CYGWIN__ */
-
-#ifndef __CYGWIN__
-SYSCTL_DECL(_kern_ipc);
-SYSCTL_INT(_kern_ipc, OID_AUTO, shmmax, CTLFLAG_RW, &shminfo.shmmax, 0, "");
-SYSCTL_INT(_kern_ipc, OID_AUTO, shmmin, CTLFLAG_RW, &shminfo.shmmin, 0, "");
-SYSCTL_INT(_kern_ipc, OID_AUTO, shmmni, CTLFLAG_RDTUN, &shminfo.shmmni, 0, "");
-SYSCTL_INT(_kern_ipc, OID_AUTO, shmseg, CTLFLAG_RDTUN, &shminfo.shmseg, 0, "");
-SYSCTL_INT(_kern_ipc, OID_AUTO, shmall, CTLFLAG_RW, &shminfo.shmall, 0, "");
-SYSCTL_INT(_kern_ipc, OID_AUTO, shm_use_phys, CTLFLAG_RW,
- &shm_use_phys, 0, "");
-SYSCTL_INT(_kern_ipc, OID_AUTO, shm_allow_removed, CTLFLAG_RW,
- &shm_allow_removed, 0, "");
-SYSCTL_PROC(_kern_ipc, OID_AUTO, shmsegs, CTLFLAG_RD,
- NULL, 0, sysctl_shmsegs, "", "");
-#endif /* __CYGWIN__ */
-
-static int
-shm_find_segment_by_key(key_t key)
-{
- int i;
-
- for (i = 0; i < shmalloced; i++)
- if ((shmsegs[i].shm_perm.mode & SHMSEG_ALLOCATED) &&
- shmsegs[i].shm_perm.key == key)
- return (i);
- return (-1);
-}
-
-static struct shmid_ds *
-shm_find_segment_by_shmid(int shmid)
-{
- int segnum;
- struct shmid_ds *shmseg;
-
- segnum = IPCID_TO_IX(shmid);
- if (segnum < 0 || segnum >= shmalloced)
- return (NULL);
- shmseg = &shmsegs[segnum];
- if ((shmseg->shm_perm.mode & SHMSEG_ALLOCATED) == 0 ||
- (!shm_allow_removed &&
- (shmseg->shm_perm.mode & SHMSEG_REMOVED) != 0) ||
- shmseg->shm_perm.seq != IPCID_TO_SEQ(shmid))
- return (NULL);
- return (shmseg);
-}
-
-static struct shmid_ds *
-shm_find_segment_by_shmidx(int segnum)
-{
- struct shmid_ds *shmseg;
-
- if (segnum < 0 || segnum >= shmalloced)
- return (NULL);
- shmseg = &shmsegs[segnum];
- if ((shmseg->shm_perm.mode & SHMSEG_ALLOCATED) == 0 ||
- (!shm_allow_removed &&
- (shmseg->shm_perm.mode & SHMSEG_REMOVED) != 0))
- return (NULL);
- return (shmseg);
-}
-
-static void
-shm_deallocate_segment(struct shmid_ds *shmseg)
-{
- struct shm_handle *shm_handle;
- size_t size;
-
- GIANT_REQUIRED;
-
- shm_handle = shmseg->shm_internal;
- vm_object_deallocate(shm_handle->shm_object);
- sys_free(shm_handle, M_SHM);
- shmseg->shm_internal = NULL;
- size = round_page(shmseg->shm_segsz);
- shm_committed -= btoc(size);
- shm_nused--;
- shmseg->shm_perm.mode = SHMSEG_FREE;
-}
-
-static int
-shm_delete_mapping(struct vmspace *vm, struct shmmap_state *shmmap_s)
-{
- struct shmid_ds *shmseg;
- int segnum, result;
- size_t size __attribute__ ((unused));
-
- GIANT_REQUIRED;
-
- segnum = IPCID_TO_IX(shmmap_s->shmid);
- shmseg = &shmsegs[segnum];
- size = round_page(shmseg->shm_segsz);
- result = vm_map_remove(&vm->vm_map, shmmap_s->va, shmmap_s->va + size);
- if (result != KERN_SUCCESS)
- return (EINVAL);
- shmmap_s->shmid = -1;
- shmseg->shm_dtime = time (NULL);
- --shm_nattch;
- if ((--shmseg->shm_nattch <= 0) &&
- (shmseg->shm_perm.mode & SHMSEG_REMOVED)) {
- shm_deallocate_segment(shmseg);
- shm_last_free = segnum;
- }
- return (0);
-}
-
-#ifndef _SYS_SYSPROTO_H_
-struct shmdt_args {
- const void *shmaddr;
-};
-#endif
-
-/*
- * MPSAFE
- */
-int
-shmdt(struct thread *td, struct shmdt_args *uap)
-{
- struct proc *p = td->td_proc;
- struct shmmap_state *shmmap_s;
- int i;
- int error = 0;
-
- if (!jail_sysvipc_allowed && jailed(td->td_ucred))
- return (ENOSYS);
- mtx_lock(&Giant);
- shmmap_s = p->p_vmspace->vm_shm;
- if (shmmap_s == NULL) {
- error = EINVAL;
- goto done2;
- }
- for (i = 0; i < shminfo.shmseg; i++, shmmap_s++) {
- if (shmmap_s->shmid != -1 &&
- shmmap_s->va == (vm_offset_t)uap->shmaddr) {
- break;
- }
- }
- if (i == shminfo.shmseg) {
- error = EINVAL;
- goto done2;
- }
- error = shm_delete_mapping(p->p_vmspace, shmmap_s);
-done2:
- mtx_unlock(&Giant);
- return (error);
-}
-
-#ifndef _SYS_SYSPROTO_H_
-struct shmat_args {
- int shmid;
- const void *shmaddr;
- int shmflg;
-};
-#endif
-
-/*
- * MPSAFE
- */
-int
-kern_shmat(struct thread *td, int shmid, const void *shmaddr, int shmflg)
-{
- struct proc *p = td->td_proc;
- int i, flags __attribute__ ((unused));
- struct shmid_ds *shmseg;
- struct shmmap_state *shmmap_s = NULL;
-#ifndef __CYGWIN__
- struct shm_handle *shm_handle;
-#endif
- vm_offset_t attach_va;
- vm_prot_t prot;
- vm_size_t size;
-#ifndef __CYGWIN__
- int rv;
-#endif
- int error = 0;
-
- if (!jail_sysvipc_allowed && jailed(td->td_ucred))
- return (ENOSYS);
- mtx_lock(&Giant);
- shmmap_s = p->p_vmspace->vm_shm;
- if (shmmap_s == NULL) {
- size = shminfo.shmseg * sizeof(struct shmmap_state);
- shmmap_s = (struct shmmap_state *) sys_malloc(size, M_SHM, M_WAITOK);
- for (i = 0; i < shminfo.shmseg; i++)
- shmmap_s[i].shmid = -1;
- p->p_vmspace->vm_shm = shmmap_s;
- }
- shmseg = shm_find_segment_by_shmid(shmid);
- if (shmseg == NULL) {
- error = EINVAL;
- goto done2;
- }
- error = ipcperm(td, &shmseg->shm_perm,
- (shmflg & SHM_RDONLY) ? IPC_R : IPC_R|IPC_W);
- if (error)
- goto done2;
- for (i = 0; i < shminfo.shmseg; i++) {
- if (shmmap_s->shmid == -1)
- break;
- shmmap_s++;
- }
- if (i >= shminfo.shmseg) {
- error = EMFILE;
- goto done2;
- }
- size = round_page(shmseg->shm_segsz);
-#ifdef VM_PROT_READ_IS_EXEC
- prot = VM_PROT_READ | VM_PROT_EXECUTE;
-#else
- prot = VM_PROT_READ;
-#endif
- if ((shmflg & SHM_RDONLY) == 0)
- prot |= VM_PROT_WRITE;
- flags = MAP_ANON | MAP_SHARED;
- debug_printf ("shmaddr: %x, shmflg: %x", shmaddr, shmflg);
-#ifdef __CYGWIN__
- /* The alignment checks have already been made in the Cygwin DLL
- and shmat's only job is to keep record of the attached mem.
- These checks break shm on 9x since MapViewOfFileEx apparently
- returns memory which isn't aligned to SHMLBA. Go figure! */
- attach_va = (vm_offset_t)shmaddr;
-#else
- if (shmaddr) {
- flags |= MAP_FIXED;
- if (shmflg & SHM_RND) {
- attach_va = (vm_offset_t)shmaddr & ~(SHMLBA-1);
- } else if (((vm_offset_t)shmaddr & (SHMLBA-1)) == 0) {
- attach_va = (vm_offset_t)shmaddr;
- } else {
- error = EINVAL;
- goto done2;
- }
- } else {
- /*
- * This is just a hint to vm_map_find() about where to
- * put it.
- */
- attach_va = round_page((vm_offset_t)p->p_vmspace->vm_taddr
- + maxtsiz + maxdsiz);
- }
-
- shm_handle = shmseg->shm_internal;
- vm_object_reference(shm_handle->shm_object);
- rv = vm_map_find(&p->p_vmspace->vm_map, shm_handle->shm_object,
- 0, &attach_va, size, (flags & MAP_FIXED)?0:1, prot, prot, 0);
- if (rv != KERN_SUCCESS) {
- error = ENOMEM;
- goto done2;
- }
- vm_map_inherit(&p->p_vmspace->vm_map,
- attach_va, attach_va + size, VM_INHERIT_SHARE);
-#endif
-
- shmmap_s->va = attach_va;
- shmmap_s->shmid = shmid;
- shmseg->shm_lpid = p->p_pid;
- shmseg->shm_atime = time (NULL);
- shmseg->shm_nattch++;
- shm_nattch++;
- td->td_retval[0] = attach_va;
-done2:
- mtx_unlock(&Giant);
- return (error);
-}
-
-int
-shmat(struct thread *td, struct shmat_args *uap)
-{
- return kern_shmat(td, uap->shmid, uap->shmaddr, uap->shmflg);
-}
-
-#ifndef __CYGWIN__
-struct oshmid_ds {
- struct ipc_perm shm_perm; /* operation perms */
- int shm_segsz; /* size of segment (bytes) */
- u_short shm_cpid; /* pid, creator */
- u_short shm_lpid; /* pid, last operation */
- short shm_nattch; /* no. of current attaches */
- time_t shm_atime; /* last attach time */
- time_t shm_dtime; /* last detach time */
- time_t shm_ctime; /* last change time */
- void *shm_handle; /* internal handle for shm segment */
-};
-
-struct oshmctl_args {
- int shmid;
- int cmd;
- struct oshmid_ds *ubuf;
-};
-
-/*
- * MPSAFE
- */
-static int
-oshmctl(struct thread *td, struct oshmctl_args *uap)
-{
-#ifdef COMPAT_43
- int error = 0;
- struct shmid_ds *shmseg;
- struct oshmid_ds outbuf;
-
- if (!jail_sysvipc_allowed && jailed(td->td_ucred))
- return (ENOSYS);
- mtx_lock(&Giant);
- shmseg = shm_find_segment_by_shmid(uap->shmid);
- if (shmseg == NULL) {
- error = EINVAL;
- goto done2;
- }
- switch (uap->cmd) {
- case IPC_STAT:
- error = ipcperm(td, &shmseg->shm_perm, IPC_R);
- if (error)
- goto done2;
- outbuf.shm_perm = shmseg->shm_perm;
- outbuf.shm_segsz = shmseg->shm_segsz;
- outbuf.shm_cpid = shmseg->shm_cpid;
- outbuf.shm_lpid = shmseg->shm_lpid;
- outbuf.shm_nattch = shmseg->shm_nattch;
- outbuf.shm_atime = shmseg->shm_atime;
- outbuf.shm_dtime = shmseg->shm_dtime;
- outbuf.shm_ctime = shmseg->shm_ctime;
- outbuf.shm_handle = shmseg->shm_internal;
- error = copyout(&outbuf, uap->ubuf, sizeof(outbuf));
- if (error)
- goto done2;
- break;
- default:
- /* XXX casting to (sy_call_t *) is bogus, as usual. */
- error = ((sy_call_t *)shmctl)(td, uap);
- break;
- }
-done2:
- mtx_unlock(&Giant);
- return (error);
-#else
- return (EINVAL);
-#endif
-}
-#endif /* !__CYGWIN__ */
-
-#ifndef _SYS_SYSPROTO_H_
-struct shmctl_args {
- int shmid;
- int cmd;
- struct shmid_ds *buf;
-};
-#endif
-
-/*
- * MPSAFE
- */
-int
-kern_shmctl(struct thread *td, int shmid, int cmd, void *buf, size_t *bufsz)
-{
- int error = 0;
- struct shmid_ds *shmseg;
-
- if (!jail_sysvipc_allowed && jailed(td->td_ucred))
- return (ENOSYS);
-
- mtx_lock(&Giant);
- switch (cmd) {
- case IPC_INFO:
- memcpy(buf, &shminfo, sizeof(shminfo));
- if (bufsz)
- *bufsz = sizeof(shminfo);
- td->td_retval[0] = shmalloced;
- goto done2;
- case SHM_INFO: {
- struct shm_info shm_info;
- shm_info.used_ids = shm_nused;
- shm_info.shm_tot = shm_committed * PAGE_SIZE;
-#ifdef __CYGWIN__
- shm_info.shm_atts = shm_nattch;
-#else
- shm_info.shm_rss = 0; /*XXX where to get from ? */
- shm_info.shm_swp = 0; /*XXX where to get from ? */
- shm_info.swap_attempts = 0; /*XXX where to get from ? */
- shm_info.swap_successes = 0; /*XXX where to get from ? */
-#endif /* __CYGWIN__ */
- memcpy(buf, &shm_info, sizeof(shm_info));
- if (bufsz)
- *bufsz = sizeof(shm_info);
- td->td_retval[0] = shmalloced;
- goto done2;
- }
- }
- if (cmd == SHM_STAT)
- shmseg = shm_find_segment_by_shmidx(shmid);
- else
- shmseg = shm_find_segment_by_shmid(shmid);
- if (shmseg == NULL) {
- error = EINVAL;
- goto done2;
- }
- switch (cmd) {
- case SHM_STAT:
- case IPC_STAT:
- error = ipcperm(td, &shmseg->shm_perm, IPC_R);
- if (error)
- goto done2;
- memcpy(buf, shmseg, sizeof(struct shmid_ds));
- if (bufsz)
- *bufsz = sizeof(struct shmid_ds);
- if (cmd == SHM_STAT)
- td->td_retval[0] = IXSEQ_TO_IPCID(shmid, shmseg->shm_perm);
- break;
- case IPC_SET: {
- struct shmid_ds *shmid;
-
- shmid = (struct shmid_ds *)buf;
- error = ipcperm(td, &shmseg->shm_perm, IPC_M);
- if (error)
- goto done2;
- shmseg->shm_perm.uid = shmid->shm_perm.uid;
- shmseg->shm_perm.gid = shmid->shm_perm.gid;
- shmseg->shm_perm.mode =
- (shmseg->shm_perm.mode & ~ACCESSPERMS) |
- (shmid->shm_perm.mode & ACCESSPERMS);
- shmseg->shm_ctime = time (NULL);
- break;
- }
- case IPC_RMID:
- error = ipcperm(td, &shmseg->shm_perm, IPC_M);
- if (error)
- goto done2;
- shmseg->shm_perm.key = IPC_PRIVATE;
- shmseg->shm_perm.mode |= SHMSEG_REMOVED;
- if (shmseg->shm_nattch <= 0) {
- shm_deallocate_segment(shmseg);
- shm_last_free = IPCID_TO_IX(shmid);
- }
- break;
-#if 0
- case SHM_LOCK:
- case SHM_UNLOCK:
-#endif
- default:
- error = EINVAL;
- break;
- }
-done2:
- mtx_unlock(&Giant);
- return (error);
-}
-
-int
-shmctl(struct thread *td, struct shmctl_args *uap)
-{
- int error = 0;
- struct shmid_ds buf;
- size_t bufsz;
-
- /* IPC_SET needs to copyin the buffer before calling kern_shmctl */
- if (uap->cmd == IPC_SET) {
- if ((error = copyin(uap->buf, &buf, sizeof(struct shmid_ds))))
- goto done;
- }
-#ifdef __CYGWIN__
- if (uap->cmd == IPC_INFO && uap->shmid > 0) {
- /* Can't use the default kern_shmctl interface. */
- int shmid = uap->shmid;
- if (shmid > shminfo.shmmni)
- shmid = shminfo.shmmni;
- error = copyout(shmsegs, uap->buf,
- shmid * sizeof(struct shmid_ds));
- td->td_retval[0] = error ? -1 : 0;
- return (error);
- }
-#endif /* __CYGWIN__ */
-
- error = kern_shmctl(td, uap->shmid, uap->cmd, (void *)&buf, &bufsz);
- if (error)
- goto done;
-
- /* Cases in which we need to copyout */
- switch (uap->cmd) {
- case IPC_INFO:
- case SHM_INFO:
- case SHM_STAT:
- case IPC_STAT:
- error = copyout(&buf, uap->buf, bufsz);
- break;
- }
-
-done:
- if (error) {
- /* Invalidate the return value */
- td->td_retval[0] = -1;
- }
- return (error);
-}
-
-
-#ifndef _SYS_SYSPROTO_H_
-struct shmget_args {
- key_t key;
- size_t size;
- int shmflg;
-};
-#endif
-
-static int
-shmget_existing(struct thread *td, struct shmget_args *uap, int mode, int segnum)
-{
- struct shmid_ds *shmseg;
- int error;
-
- shmseg = &shmsegs[segnum];
- if (shmseg->shm_perm.mode & SHMSEG_REMOVED) {
- /*
- * This segment is in the process of being allocated. Wait
- * until it's done, and look the key up again (in case the
- * allocation failed or it was freed).
- */
- shmseg->shm_perm.mode |= SHMSEG_WANTED;
- error = tsleep(shmseg, PLOCK | PCATCH, "shmget", 0);
- if (error)
- return (error);
- return (EAGAIN);
- }
- if ((uap->shmflg & (IPC_CREAT | IPC_EXCL)) == (IPC_CREAT | IPC_EXCL))
- return (EEXIST);
- error = ipcperm(td, &shmseg->shm_perm, mode);
- if (error)
- return (error);
- if (uap->size && uap->size > shmseg->shm_segsz)
- return (EINVAL);
- td->td_retval[0] = IXSEQ_TO_IPCID(segnum, shmseg->shm_perm);
-#ifdef __CYGWIN__
- td->td_retval[1] =
- vm_object_duplicate(td, shmseg->shm_internal->shm_object);
-#endif /* __CYGWIN__ */
- return (0);
-}
-
-static int
-shmget_allocate_segment(struct thread *td, struct shmget_args *uap, int mode)
-{
- int i, segnum, shmid, size;
-#ifndef __CYGWIN__
- struct ucred *cred = td->td_ucred;
-#endif /* __CYGWIN__ */
- struct shmid_ds *shmseg;
- struct shm_handle *shm_handle;
-
- GIANT_REQUIRED;
-
- if (uap->size < (unsigned long) shminfo.shmmin ||
- uap->size > (unsigned long) shminfo.shmmax)
- return (EINVAL);
- if (shm_nused >= shminfo.shmmni) /* Any shmids left? */
- return (ENOSPC);
- size = round_page(uap->size);
- if (shm_committed + btoc(size) > shminfo.shmall)
- return (ENOMEM);
- if (shm_last_free < 0) {
- shmrealloc(); /* Maybe expand the shmsegs[] array. */
- for (i = 0; i < shmalloced; i++)
- if (shmsegs[i].shm_perm.mode & SHMSEG_FREE)
- break;
- if (i == shmalloced)
- return (ENOSPC);
- segnum = i;
- } else {
- segnum = shm_last_free;
- shm_last_free = -1;
- }
- shmseg = &shmsegs[segnum];
- /*
- * In case we sleep in malloc(), mark the segment present but deleted
- * so that noone else tries to create the same key.
- */
- shmseg->shm_perm.mode = SHMSEG_ALLOCATED | SHMSEG_REMOVED;
- shmseg->shm_perm.key = uap->key;
- shmseg->shm_perm.seq = (shmseg->shm_perm.seq + 1) & 0x7fff;
- shm_handle = (struct shm_handle *)
- sys_malloc(sizeof(struct shm_handle), M_SHM, M_WAITOK);
- shmid = IXSEQ_TO_IPCID(segnum, shmseg->shm_perm);
-
- /*
- * We make sure that we have allocated a pager before we need
- * to.
- */
- if (shm_use_phys) {
- shm_handle->shm_object =
- vm_pager_allocate(OBJT_PHYS, 0, size, VM_PROT_DEFAULT, 0);
- } else {
- shm_handle->shm_object =
- vm_pager_allocate(OBJT_SWAP, 0, size, VM_PROT_DEFAULT, 0);
- }
- VM_OBJECT_LOCK(shm_handle->shm_object);
- vm_object_clear_flag(shm_handle->shm_object, OBJ_ONEMAPPING);
- vm_object_set_flag(shm_handle->shm_object, OBJ_NOSPLIT);
- VM_OBJECT_UNLOCK(shm_handle->shm_object);
-
- shmseg->shm_internal = shm_handle;
-#ifdef __CYGWIN__
- shmseg->shm_perm.cuid = shmseg->shm_perm.uid = td->ipcblk->uid;
- shmseg->shm_perm.cgid = shmseg->shm_perm.gid = td->ipcblk->gid;
-#else
- shmseg->shm_perm.cuid = shmseg->shm_perm.uid = cred->cr_uid;
- shmseg->shm_perm.cgid = shmseg->shm_perm.gid = cred->cr_gid;
-#endif /* __CYGWIN__ */
- shmseg->shm_perm.mode = (shmseg->shm_perm.mode & SHMSEG_WANTED) |
- (mode & ACCESSPERMS) | SHMSEG_ALLOCATED;
- shmseg->shm_segsz = uap->size;
- shmseg->shm_cpid = td->td_proc->p_pid;
- shmseg->shm_lpid = shmseg->shm_nattch = 0;
- shmseg->shm_atime = shmseg->shm_dtime = 0;
- shmseg->shm_ctime = time (NULL);
- shm_committed += btoc(size);
- shm_nused++;
- if (shmseg->shm_perm.mode & SHMSEG_WANTED) {
- /*
- * Somebody else wanted this key while we were asleep. Wake
- * them up now.
- */
- shmseg->shm_perm.mode &= ~SHMSEG_WANTED;
- wakeup(shmseg);
- }
- td->td_retval[0] = shmid;
-#ifdef __CYGWIN__
- td->td_retval[1] =
- vm_object_duplicate(td, shmseg->shm_internal->shm_object);
-#endif /* __CYGWIN__ */
- return (0);
-}
-
-/*
- * MPSAFE
- */
-int
-shmget(struct thread *td, struct shmget_args *uap)
-{
- int segnum, mode;
- int error;
-
- if (!jail_sysvipc_allowed && jailed(td->td_ucred))
- return (ENOSYS);
- mtx_lock(&Giant);
- mode = uap->shmflg & ACCESSPERMS;
- if (uap->key != IPC_PRIVATE) {
- again:
-#ifdef __CYGWIN__
- if (uap->shmflg & IPC_KEY_IS_SHMID)
- segnum = shm_find_segment_by_shmid ((int) uap->key) ?
- IPCID_TO_IX((int) uap->key) : -1;
- else
-#endif
- segnum = shm_find_segment_by_key(uap->key);
- if (segnum >= 0) {
- error = shmget_existing(td, uap, mode, segnum);
- if (error == EAGAIN)
- goto again;
- goto done2;
- }
- if ((uap->shmflg & IPC_CREAT) == 0) {
- error = ENOENT;
- goto done2;
- }
- }
- error = shmget_allocate_segment(td, uap, mode);
-done2:
-#ifdef __CYGWIN__
- if (!error)
- ipcexit_creat_hookthread (td);
- else
- td->td_retval[0] = -1;
-#endif
- mtx_unlock(&Giant);
- return (error);
-}
-
-#ifndef __CYGWIN__
-/*
- * MPSAFE
- */
-int
-shmsys(td, uap)
- struct thread *td;
- /* XXX actually varargs. */
- struct shmsys_args /* {
- int which;
- int a2;
- int a3;
- int a4;
- } */ *uap;
-{
- int error;
-
- if (!jail_sysvipc_allowed && jailed(td->td_ucred))
- return (ENOSYS);
- if (uap->which < 0 ||
- uap->which >= sizeof(shmcalls)/sizeof(shmcalls[0]))
- return (EINVAL);
- mtx_lock(&Giant);
- error = (*shmcalls[uap->which])(td, &uap->a2);
- mtx_unlock(&Giant);
- return (error);
-}
-#endif /* __CYGWIN__ */
-
-static void
-shmfork_myhook(struct proc *p1, struct proc *p2)
-{
- struct shmmap_state *shmmap_s;
- size_t size;
- int i;
-
- size = shminfo.shmseg * sizeof(struct shmmap_state);
- shmmap_s = (struct shmmap_state *) sys_malloc(size, M_SHM, M_WAITOK);
- bcopy(p1->p_vmspace->vm_shm, shmmap_s, size);
- p2->p_vmspace->vm_shm = shmmap_s;
- for (i = 0; i < shminfo.shmseg; i++, shmmap_s++)
- if (shmmap_s->shmid != -1) {
- shm_nattch++;
- shmsegs[IPCID_TO_IX(shmmap_s->shmid)].shm_nattch++;
- }
-}
-
-#ifdef __CYGWIN__
-int cygwin_shmfork_myhook (struct thread *td, struct proc *parent)
-{
- ipcexit_creat_hookthread (td);
- ipc_p_vmspace (td->ipcblk);
- ipc_p_vmspace (parent);
- shmfork_myhook (parent, td->ipcblk);
- return 0;
-}
-#endif
-
-void
-shmexit_myhook(struct vmspace *vm)
-{
- struct shmmap_state *base, *shm;
- int i;
-
- GIANT_REQUIRED;
-
- if ((base = vm->vm_shm) != NULL) {
- vm->vm_shm = NULL;
- for (i = 0, shm = base; i < shminfo.shmseg; i++, shm++) {
- if (shm->shmid != -1)
- shm_delete_mapping(vm, shm);
- }
- sys_free(base, M_SHM);
- }
-}
-
-static void
-shmrealloc(void)
-{
- int i;
- struct shmid_ds *newsegs;
-
- if (shmalloced >= shminfo.shmmni)
- return;
-
- newsegs = (struct shmid_ds *) sys_malloc(shminfo.shmmni * sizeof(*newsegs), M_SHM, M_WAITOK);
- if (newsegs == NULL)
- return;
- for (i = 0; i < shmalloced; i++)
- bcopy(&shmsegs[i], &newsegs[i], sizeof(newsegs[0]));
- for (; i < shminfo.shmmni; i++) {
- shmsegs[i].shm_perm.mode = SHMSEG_FREE;
- shmsegs[i].shm_perm.seq = 0;
- }
- sys_free(shmsegs, M_SHM);
- shmsegs = newsegs;
- shmalloced = shminfo.shmmni;
-}
-
-void
-shminit(void)
-{
- int i;
- tun_bool_t shm_ar;
-
- TUNABLE_INT_FETCH("kern.ipc.shmmaxpgs", &shminfo.shmall);
- for (i = PAGE_SIZE; i > 0; i--) {
- shminfo.shmmax = shminfo.shmall * i;
- if (shminfo.shmmax >= shminfo.shmall)
- break;
- }
- TUNABLE_INT_FETCH("kern.ipc.shmmin", &shminfo.shmmin);
- TUNABLE_INT_FETCH("kern.ipc.shmmni", &shminfo.shmmni);
- TUNABLE_INT_FETCH("kern.ipc.shmseg", &shminfo.shmseg);
- TUNABLE_BOOL_FETCH("kern.ipc.shm_allow_removed", &shm_ar);
- if (shm_ar == TUN_TRUE)
- shm_allow_removed = 1;
- shmalloced = shminfo.shmmni;
- shmsegs = (struct shmid_ds *) sys_malloc(shmalloced * sizeof(shmsegs[0]), M_SHM, M_WAITOK);
- if (shmsegs == NULL)
- panic("cannot allocate initial memory for sysvshm");
- for (i = 0; i < shmalloced; i++) {
- shmsegs[i].shm_perm.mode = SHMSEG_FREE;
- shmsegs[i].shm_perm.seq = 0;
- }
- shm_last_free = 0;
- shm_nused = 0;
- shm_committed = 0;
-#ifndef __CYGWIN__
- shmexit_hook = &shmexit_myhook;
- shmfork_hook = &shmfork_myhook;
-#endif /* __CYGWIN__ */
-}
-
-int
-shmunload(void)
-{
-
- if (shm_nused > 0)
- return (EBUSY);
-
- sys_free(shmsegs, M_SHM);
-#ifndef __CYGWIN__
- shmexit_hook = NULL;
- shmfork_hook = NULL;
-#endif /* __CYGWIN__ */
- return (0);
-}
-
-#ifndef __CYGWIN__
-static int
-sysctl_shmsegs(SYSCTL_HANDLER_ARGS)
-{
-
- return (SYSCTL_OUT(req, shmsegs, shmalloced * sizeof(shmsegs[0])));
-}
-
-static int
-sysvshm_modload(struct module *module, int cmd, void *arg)
-{
- int error = 0;
-
- switch (cmd) {
- case MOD_LOAD:
- shminit();
- break;
- case MOD_UNLOAD:
- error = shmunload();
- break;
- case MOD_SHUTDOWN:
- break;
- default:
- error = EINVAL;
- break;
- }
- return (error);
-}
-
-static moduledata_t sysvshm_mod = {
- "sysvshm",
- &sysvshm_modload,
- NULL
-};
-
-SYSCALL_MODULE_HELPER(shmsys);
-SYSCALL_MODULE_HELPER(shmat);
-SYSCALL_MODULE_HELPER(shmctl);
-SYSCALL_MODULE_HELPER(shmdt);
-SYSCALL_MODULE_HELPER(shmget);
-
-DECLARE_MODULE(sysvshm, sysvshm_mod,
- SI_SUB_SYSV_SHM, SI_ORDER_FIRST);
-MODULE_VERSION(sysvshm, 1);
-#endif /* __CYGWIN__ */
-#endif /* __OUTSIDE_CYGWIN__ */
diff --git a/winsup/cygserver/threaded_queue.cc b/winsup/cygserver/threaded_queue.cc
deleted file mode 100644
index ba69e1a82..000000000
--- a/winsup/cygserver/threaded_queue.cc
+++ /dev/null
@@ -1,410 +0,0 @@
-/* threaded_queue.cc
-
- Copyright 2001, 2002, 2003, 2014 Red Hat Inc.
-
- Written by Robert Collins <rbtcollins@hotmail.com>
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifdef __OUTSIDE_CYGWIN__
-#include "woutsup.h"
-
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <stdlib.h>
-#include "threaded_queue.h"
-
-/*****************************************************************************/
-
-/* queue_request */
-
-queue_request::~queue_request ()
-{}
-
-/*****************************************************************************/
-
-/* threaded_queue */
-
-threaded_queue::threaded_queue (const size_t initial_workers)
- : _workers_count (0),
- _running (false),
- _submitters_head (NULL),
- _requests_count (0),
- _requests_head (NULL),
- _requests_sem (NULL)
-{
- InitializeCriticalSection (&_queue_lock);
-
- // This semaphore's count is the number of requests on the queue.
- // The maximum count (129792) is calculated as MAXIMUM_WAIT_OBJECTS
- // multiplied by max. threads per process (2028?), which is (a few)
- // more requests than could ever be pending with the current design.
-
- _requests_sem = CreateSemaphore (NULL, // SECURITY_ATTRIBUTES
- 0, // Initial count
- 129792, // Maximum count
- NULL); // Anonymous
-
- if (!_requests_sem)
- {
- system_printf (("failed to create the request queue semaphore, "
- "error = %u"),
- GetLastError ());
- abort ();
- }
-
- create_workers (initial_workers);
-}
-
-threaded_queue::~threaded_queue ()
-{
- if (_running)
- stop ();
-
- debug_printf ("deleting all pending queue requests");
- queue_request *reqptr = _requests_head;
- while (reqptr)
- {
- queue_request *const ptr = reqptr;
- reqptr = reqptr->_next;
- delete ptr;
- }
-
- DeleteCriticalSection (&_queue_lock);
- if (_requests_sem)
- (void) CloseHandle (_requests_sem);
-}
-
-/* FIXME: return success or failure rather than quitting */
-void
-threaded_queue::add_submission_loop (queue_submission_loop *const submitter)
-{
- assert (this);
- assert (submitter);
- assert (submitter->_queue == this);
- assert (!submitter->_next);
-
- submitter->_next =
- TInterlockedExchangePointer (&_submitters_head, submitter);
-
- if (_running)
- submitter->start ();
-}
-
-bool
-threaded_queue::start ()
-{
- EnterCriticalSection (&_queue_lock);
- const bool was_running = _running;
- _running = true;
- queue_submission_loop *loopptr = _submitters_head;
- LeaveCriticalSection (&_queue_lock);
-
- if (!was_running)
- {
- debug_printf ("starting all queue submission loops");
-
- while (loopptr)
- {
- queue_submission_loop *const ptr = loopptr;
- loopptr = loopptr->_next;
- ptr->start ();
- }
- }
-
- return was_running;
-}
-
-bool
-threaded_queue::stop ()
-{
- EnterCriticalSection (&_queue_lock);
- const bool was_running = _running;
- _running = false;
- queue_submission_loop *loopptr = _submitters_head;
- LeaveCriticalSection (&_queue_lock);
-
- if (was_running)
- {
- debug_printf ("stopping all queue submission loops");
- while (loopptr)
- {
- queue_submission_loop *const ptr = loopptr;
- loopptr = loopptr->_next;
- ptr->stop ();
- }
-
- ReleaseSemaphore (_requests_sem, _workers_count, NULL);
- while (_workers_count)
- {
- debug_printf (("waiting for worker threads to terminate: "
- "%u still running"),
- _workers_count);
- Sleep (1000);
- }
- debug_printf ("all worker threads have terminated");
- }
-
- return was_running;
-}
-
-/* FIXME: return success or failure */
-void
-threaded_queue::add (queue_request *const therequest)
-{
- assert (this);
- assert (therequest);
- assert (!therequest->_next);
-
- if (!_workers_count)
- {
- system_printf ("warning: no worker threads to handle request!");
- // FIXME: And then what?
- }
-
- EnterCriticalSection (&_queue_lock);
- if (!_requests_head)
- _requests_head = therequest;
- else
- {
- /* Add to the queue end. */
- queue_request *reqptr = _requests_head;
- for (; reqptr->_next; reqptr = reqptr->_next)
- {}
- assert (reqptr);
- assert (!reqptr->_next);
- reqptr->_next = therequest;
- }
-
- _requests_count += 1;
- assert (_requests_count > 0);
- LeaveCriticalSection (&_queue_lock);
-
- (void) ReleaseSemaphore (_requests_sem, 1, NULL);
-}
-
-/*static*/ DWORD WINAPI
-threaded_queue::start_routine (const LPVOID lpParam)
-{
- class threaded_queue *const queue = (class threaded_queue *) lpParam;
- assert (queue);
-
- queue->worker_loop ();
-
- const long count = InterlockedDecrement (&queue->_workers_count);
- assert (count >= 0);
-
- if (queue->_running)
- debug_printf ("worker loop has exited; thread about to terminate");
-
- return 0;
-}
-
-/* Called from the constructor: so no need to be thread-safe until the
- * worker threads start to be created; thus the interlocked increment
- * of the `_workers_count' field.
- */
-
-void
-threaded_queue::create_workers (const size_t initial_workers)
-{
- assert (initial_workers > 0);
-
- for (unsigned int i = 0; i != initial_workers; i++)
- {
- const long count = InterlockedIncrement (&_workers_count);
- assert (count > 0);
-
- DWORD tid;
- const HANDLE hThread =
- CreateThread (NULL, 0, start_routine, this, 0, &tid);
-
- if (!hThread)
- {
- system_printf ("failed to create thread, error = %u",
- GetLastError ());
- abort ();
- }
-
- (void) CloseHandle (hThread);
- }
-}
-
-void
-threaded_queue::worker_loop ()
-{
- while (true)
- {
- const DWORD rc = WaitForSingleObject (_requests_sem, INFINITE);
- if (rc == WAIT_FAILED)
- {
- system_printf ("wait for request semaphore failed, error = %u",
- GetLastError ());
- return;
- }
- assert (rc == WAIT_OBJECT_0);
-
- EnterCriticalSection (&_queue_lock);
- if (!_running)
- {
- LeaveCriticalSection (&_queue_lock);
- return;
- }
-
- assert (_requests_head);
- queue_request *const reqptr = _requests_head;
- _requests_head = reqptr->_next;
-
- _requests_count -= 1;
- assert (_requests_count >= 0);
- LeaveCriticalSection (&_queue_lock);
-
- assert (reqptr);
- reqptr->process ();
- delete reqptr;
- }
-}
-
-/*****************************************************************************/
-
-/* queue_submission_loop */
-
-queue_submission_loop::queue_submission_loop (threaded_queue *const queue,
- const bool ninterruptible)
- : _running (false),
- _interrupt_event (NULL),
- _queue (queue),
- _interruptible (ninterruptible),
- _hThread (NULL),
- _tid (0),
- _next (NULL)
-{
- if (_interruptible)
- {
- // verbose: debug_printf ("creating an interruptible processing thread");
-
- _interrupt_event = CreateEvent (NULL, // SECURITY_ATTRIBUTES
- FALSE, // Auto-reset
- FALSE, // Initially non-signalled
- NULL); // Anonymous
-
- if (!_interrupt_event)
- {
- system_printf ("failed to create interrupt event, error = %u",
- GetLastError ());
- abort ();
- }
- }
-}
-
-queue_submission_loop::~queue_submission_loop ()
-{
- if (_running)
- stop ();
- if (_interrupt_event)
- (void) CloseHandle (_interrupt_event);
- if (_hThread)
- (void) CloseHandle (_hThread);
-}
-
-bool
-queue_submission_loop::start ()
-{
- assert (this);
- assert (!_hThread);
-
- const bool was_running = _running;
-
- if (!was_running)
- {
- _running = true;
-
- _hThread = CreateThread (NULL, 0, start_routine, this, 0, &_tid);
- if (!_hThread)
- {
- system_printf ("failed to create thread, error = %u",
- GetLastError ());
- abort ();
- }
- }
-
- return was_running;
-}
-
-bool
-queue_submission_loop::stop ()
-{
- assert (this);
- assert (_hThread && _hThread != INVALID_HANDLE_VALUE);
-
- const bool was_running = _running;
-
- if (_running)
- {
- _running = false;
-
- if (_interruptible)
- {
- assert (_interrupt_event
- && _interrupt_event != INVALID_HANDLE_VALUE);
-
- SetEvent (_interrupt_event);
-
- if (WaitForSingleObject (_hThread, 1000) == WAIT_TIMEOUT)
- {
- system_printf (("request loop thread %u failed to shutdown "
- "when asked politely: about to get heavy"),
- _tid);
-
- if (!TerminateThread (_hThread, 0))
- {
- system_printf (("failed to kill request loop thread %u"
- ", error = %u"),
- _tid, GetLastError ());
- abort ();
- }
- }
- }
- else
- {
- // FIXME: could wait to see if the request loop notices that
- // the submission loop is no longer running and shuts down
- // voluntarily.
-
- debug_printf ("killing request loop thread %u", _tid);
-
- if (!TerminateThread (_hThread, 0))
- system_printf (("failed to kill request loop thread %u"
- ", error = %u"),
- _tid, GetLastError ());
- }
- }
-
- return was_running;
-}
-
-/*static*/ DWORD WINAPI
-queue_submission_loop::start_routine (const LPVOID lpParam)
-{
- class queue_submission_loop *const submission_loop =
- (class queue_submission_loop *) lpParam;
- assert (submission_loop);
-
- submission_loop->request_loop ();
-
- debug_printf ("submission loop has exited; thread about to terminate");
-
- submission_loop->stop ();
-
- return 0;
-}
-
-/*****************************************************************************/
-#endif /* __OUTSIDE_CYGWIN__ */
diff --git a/winsup/cygserver/threaded_queue.h b/winsup/cygserver/threaded_queue.h
deleted file mode 100644
index e17f90434..000000000
--- a/winsup/cygserver/threaded_queue.h
+++ /dev/null
@@ -1,127 +0,0 @@
-/* threaded_queue.h
-
- Copyright 2001, 2002, 2003, 2012 Red Hat Inc.
-
- Written by Robert Collins <rbtcollins@hotmail.com>
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _THREADED_QUEUE_
-#define _THREADED_QUEUE_
-
-/*****************************************************************************/
-
-/* a specific request */
-
-class queue_request
-{
-public:
- queue_request *_next;
-
- queue_request () : _next (NULL) {}
- virtual ~queue_request ();
-
- virtual void process () = 0;
-};
-
-/*****************************************************************************/
-
-/* a queue to allocate requests from n submission loops to x worker threads */
-
-class queue_submission_loop;
-
-class threaded_queue
-{
-public:
- threaded_queue (size_t initial_workers = 1);
- ~threaded_queue ();
-
- void add_submission_loop (queue_submission_loop *);
-
- bool running () const { return _running; }
-
- bool start ();
- bool stop ();
-
- void add (queue_request *);
-
-private:
- LONG _workers_count;
- bool _running;
-
- queue_submission_loop *_submitters_head;
-
- long _requests_count; // Informational only.
- queue_request *_requests_head;
-
- CRITICAL_SECTION _queue_lock;
- HANDLE _requests_sem; // == _requests_count
-
- static DWORD WINAPI start_routine (LPVOID /* this */);
-
- void create_workers (size_t initial_workers);
- void worker_loop ();
-};
-
-/*****************************************************************************/
-
-/* parameters for a request finding and submitting loop */
-
-class queue_submission_loop
-{
- friend class threaded_queue;
-
-public:
- queue_submission_loop (threaded_queue *, bool ninterruptible);
- virtual ~queue_submission_loop ();
-
- bool start ();
- bool stop ();
-
- threaded_queue *queue () { return _queue; };
-
-protected:
- bool _running;
- HANDLE _interrupt_event;
- threaded_queue *const _queue;
-
-private:
- bool _interruptible;
- HANDLE _hThread;
- DWORD _tid;
- queue_submission_loop *_next;
-
- static DWORD WINAPI start_routine (LPVOID /* this */);
- virtual void request_loop () = 0;
-};
-
-#ifdef __cplusplus
-
-/*---------------------------------------------------------------------------*
- * Some type-safe versions of the various interlocked functions.
- *---------------------------------------------------------------------------*/
-
-template <typename T> T *
-TInterlockedExchangePointer (T **lvalue, T *rvalue)
-{
- return reinterpret_cast<T *>
- (InterlockedExchangePointer (reinterpret_cast<void **> (lvalue),
- reinterpret_cast<void *> (rvalue)));
-}
-
-template <typename T> T *
-TInterlockedCompareExchangePointer (T **lvalue, T *rvalue1, T *rvalue2)
-{
- return reinterpret_cast<T *>
- (InterlockedCompareExchangePointer (reinterpret_cast<void **> (lvalue),
- reinterpret_cast<void *> (rvalue1),
- reinterpret_cast<void *> (rvalue2)));
-}
-
-#endif /* __cplusplus */
-
-#endif /* _THREADED_QUEUE_ */
diff --git a/winsup/cygserver/transport.cc b/winsup/cygserver/transport.cc
deleted file mode 100644
index ff9ce8d80..000000000
--- a/winsup/cygserver/transport.cc
+++ /dev/null
@@ -1,49 +0,0 @@
-/* transport.cc
-
- Copyright 2001, 2002, 2003, 2004, 2007 Red Hat Inc.
-
- Written by Robert Collins <rbtcollins@hotmail.com>
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-/* to allow this to link into cygwin and the .dll, a little magic is needed. */
-#ifdef __OUTSIDE_CYGWIN__
-#include "woutsup.h"
-#else
-#include "winsup.h"
-#endif
-
-#include <sys/socket.h>
-
-#include "transport.h"
-#include "transport_pipes.h"
-
-/* The factory */
-transport_layer_base *
-create_server_transport ()
-{
- return new transport_layer_pipes;
-}
-
-#ifndef __INSIDE_CYGWIN__
-
-bool
-transport_layer_base::impersonate_client ()
-{
- return true;
-}
-
-bool
-transport_layer_base::revert_to_self ()
-{
- return true;
-}
-
-#endif /* !__INSIDE_CYGWIN__ */
-
-transport_layer_base::~transport_layer_base ()
-{}
diff --git a/winsup/cygserver/transport.h b/winsup/cygserver/transport.h
deleted file mode 100644
index 80f50fd06..000000000
--- a/winsup/cygserver/transport.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/* transport.h
-
- Copyright 2001, 2002, 2003, 2004 Red Hat Inc.
-
- Written by Robert Collins <rbtcollins@hotmail.com>
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _TRANSPORT_H
-#define _TRANSPORT_H
-
-class transport_layer_base *create_server_transport ();
-
-class transport_layer_base
-{
-public:
-#ifndef __INSIDE_CYGWIN__
- virtual int listen () = 0;
- virtual class transport_layer_base *accept (bool *recoverable) = 0;
-#endif
-
- virtual void close () = 0;
- virtual ssize_t read (void *buf, size_t len) = 0;
- virtual ssize_t write (void *buf, size_t len) = 0;
- virtual int connect () = 0;
-
-#ifndef __INSIDE_CYGWIN__
- virtual bool impersonate_client ();
- virtual bool revert_to_self ();
-#endif
-
- virtual ~transport_layer_base ();
-};
-
-#endif /* _TRANSPORT_H */
diff --git a/winsup/cygserver/transport_pipes.cc b/winsup/cygserver/transport_pipes.cc
deleted file mode 100644
index fd5ef0914..000000000
--- a/winsup/cygserver/transport_pipes.cc
+++ /dev/null
@@ -1,342 +0,0 @@
-/* transport_pipes.cc
-
- Copyright 2001, 2002, 2003, 2004, 2009, 2012, 2014 Red Hat Inc.
-
- Written by Robert Collins <rbtcollins@hotmail.com>
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-/* to allow this to link into cygwin and the .dll, a little magic is needed. */
-#ifdef __OUTSIDE_CYGWIN__
-#include "woutsup.h"
-#include <ntdef.h>
-#else
-#include "winsup.h"
-#endif
-
-#include <sys/types.h>
-
-#include <assert.h>
-#include <netdb.h>
-#include <pthread.h>
-#include <unistd.h>
-#include <wchar.h>
-#include <sys/cygwin.h>
-
-#include "cygerrno.h"
-#include "transport.h"
-#include "transport_pipes.h"
-
-#ifndef __INSIDE_CYGWIN__
-#include "cygserver.h"
-#include "cygserver_ipc.h"
-#else
-#include "security.h"
-#endif
-
-#ifdef __INSIDE_CYGWIN__
-#define SET_ERRNO(err) set_errno (err)
-#else
-#define SET_ERRNO(err) errno = (err)
-#endif
-
-enum
- {
- MAX_WAIT_NAMED_PIPE_RETRY = 64,
- WAIT_NAMED_PIPE_TIMEOUT = 10 // milliseconds
- };
-
-#ifndef __INSIDE_CYGWIN__
-
-transport_layer_pipes::transport_layer_pipes (const HANDLE hPipe)
- : _hPipe (hPipe),
- _is_accepted_endpoint (true),
- _is_listening_endpoint (false)
-{
- assert (_hPipe);
- assert (_hPipe != INVALID_HANDLE_VALUE);
- _pipe_name[0] = L'\0';
-}
-
-#endif /* !__INSIDE_CYGWIN__ */
-
-transport_layer_pipes::transport_layer_pipes ()
- : _hPipe (NULL),
- _is_accepted_endpoint (false),
- _is_listening_endpoint (false)
-{
- wchar_t cyg_instkey[18];
-
- wchar_t *p = wcpcpy (_pipe_name, PIPE_NAME_PREFIX);
- if (!cygwin_internal (CW_GET_INSTKEY, cyg_instkey))
- wcpcpy (wcpcpy (p, cyg_instkey), PIPE_NAME_SUFFIX);
-}
-
-transport_layer_pipes::~transport_layer_pipes ()
-{
- close ();
-}
-
-#ifndef __INSIDE_CYGWIN__
-
-static HANDLE listen_pipe;
-static HANDLE connect_pipe;
-
-int
-transport_layer_pipes::listen ()
-{
- assert (!_hPipe);
- assert (!_is_accepted_endpoint);
- assert (!_is_listening_endpoint);
-
- _is_listening_endpoint = true;
-
- debug ("Try to create named pipe: %ls", _pipe_name);
-
- /* We have to create the first instance of the listening pipe here, and
- we also have to create at least one instance of the client side to avoid
- a race condition.
- See https://cygwin.com/ml/cygwin/2012-11/threads.html#00144 */
- listen_pipe =
- CreateNamedPipeW (_pipe_name,
- PIPE_ACCESS_DUPLEX | FILE_FLAG_FIRST_PIPE_INSTANCE,
- PIPE_TYPE_BYTE | PIPE_WAIT, PIPE_UNLIMITED_INSTANCES,
- 0, 0, 1000, &sec_all_nih);
- if (listen_pipe != INVALID_HANDLE_VALUE)
- {
- connect_pipe = CreateFileW (_pipe_name, GENERIC_READ | GENERIC_WRITE, 0,
- &sec_all_nih, OPEN_EXISTING, 0, NULL);
- if (connect_pipe == INVALID_HANDLE_VALUE)
- {
- CloseHandle (listen_pipe);
- listen_pipe = INVALID_HANDLE_VALUE;
- }
- }
-
- if (listen_pipe == INVALID_HANDLE_VALUE)
- {
- system_printf ("failed to create named pipe: "
- "is the daemon already running?");
- return -1;
- }
-
- return 0;
-}
-
-class transport_layer_pipes *
-transport_layer_pipes::accept (bool *const recoverable)
-{
- assert (!_hPipe);
- assert (!_is_accepted_endpoint);
- assert (_is_listening_endpoint);
-
- debug ("Try to create named pipe instance: %ls", _pipe_name);
-
- const HANDLE accept_pipe =
- CreateNamedPipeW (_pipe_name, PIPE_ACCESS_DUPLEX,
- PIPE_TYPE_BYTE | PIPE_WAIT, PIPE_UNLIMITED_INSTANCES,
- 0, 0, 1000, &sec_all_nih);
-
- if (accept_pipe == INVALID_HANDLE_VALUE)
- {
- debug_printf ("error creating pipe (%u).", GetLastError ());
- *recoverable = true; // FIXME: case analysis?
- return NULL;
- }
-
- if (!ConnectNamedPipe (accept_pipe, NULL)
- && GetLastError () != ERROR_PIPE_CONNECTED)
- {
- debug_printf ("error connecting to pipe (%u)", GetLastError ());
- (void) CloseHandle (accept_pipe);
- *recoverable = true; // FIXME: case analysis?
- return NULL;
- }
-
- return new transport_layer_pipes (accept_pipe);
-}
-
-#endif /* !__INSIDE_CYGWIN__ */
-
-void
-transport_layer_pipes::close ()
-{
- // verbose: debug_printf ("closing pipe %p", _hPipe);
-
- if (_hPipe)
- {
- assert (_hPipe != INVALID_HANDLE_VALUE);
-
-#ifndef __INSIDE_CYGWIN__
-
- if (_is_accepted_endpoint)
- {
- (void) FlushFileBuffers (_hPipe); // Blocks until client reads.
- (void) DisconnectNamedPipe (_hPipe);
- (void) CloseHandle (_hPipe);
- }
- else
- (void) CloseHandle (_hPipe);
-
-#else /* __INSIDE_CYGWIN__ */
-
- assert (!_is_accepted_endpoint);
- (void) ForceCloseHandle (_hPipe);
-
-#endif /* __INSIDE_CYGWIN__ */
-
- _hPipe = NULL;
- }
-}
-
-ssize_t
-transport_layer_pipes::read (void *const buf, const size_t len)
-{
- // verbose: debug_printf ("reading from pipe %p", _hPipe);
-
- assert (_hPipe);
- assert (_hPipe != INVALID_HANDLE_VALUE);
- assert (!_is_listening_endpoint);
-
- DWORD count;
- if (!ReadFile (_hPipe, buf, len, &count, NULL))
- {
- debug_printf ("error reading from pipe (%u)", GetLastError ());
- SET_ERRNO (EINVAL); // FIXME?
- return -1;
- }
-
- return count;
-}
-
-ssize_t
-transport_layer_pipes::write (void *const buf, const size_t len)
-{
- // verbose: debug_printf ("writing to pipe %p", _hPipe);
-
- assert (_hPipe);
- assert (_hPipe != INVALID_HANDLE_VALUE);
- assert (!_is_listening_endpoint);
-
- DWORD count;
- if (!WriteFile (_hPipe, buf, len, &count, NULL))
- {
- debug_printf ("error writing to pipe, error = %u", GetLastError ());
- SET_ERRNO (EINVAL); // FIXME?
- return -1;
- }
-
- return count;
-}
-
-/*
- * This routine holds a static variable, assume_cygserver, that is set
- * if the transport has good reason to think that cygserver is
- * running, i.e. if if successfully connected to it with the previous
- * attempt. If this is set, the code tries a lot harder to get a
- * connection, making the assumption that any failures are just
- * congestion and overloading problems.
- */
-
-int
-transport_layer_pipes::connect ()
-{
- assert (!_hPipe);
- assert (!_is_accepted_endpoint);
- assert (!_is_listening_endpoint);
-
- static bool assume_cygserver = false;
-
- BOOL rc = TRUE;
- int retries = 0;
-
- debug_printf ("Try to connect to named pipe: %W", _pipe_name);
- while (rc)
- {
- _hPipe = CreateFileW (_pipe_name,
- GENERIC_READ | GENERIC_WRITE,
- FILE_SHARE_READ | FILE_SHARE_WRITE,
- &sec_all_nih,
- OPEN_EXISTING,
- SECURITY_IMPERSONATION,
- NULL);
-
- if (_hPipe != INVALID_HANDLE_VALUE)
- {
- assert (_hPipe);
-#ifdef __INSIDE_CYGWIN__
- ProtectHandle (_hPipe);
-#endif
- assume_cygserver = true;
- return 0;
- }
-
- _hPipe = NULL;
-
- if (!assume_cygserver && GetLastError () != ERROR_PIPE_BUSY)
- {
- debug_printf ("Error opening the pipe (%u)", GetLastError ());
- return -1;
- }
-
- /* Note: `If no instances of the specified named pipe exist, the
- * WaitNamedPipe function returns immediately, regardless of the
- * time-out value.' Thus the explicit Sleep if the call fails
- * with ERROR_FILE_NOT_FOUND.
- */
- while (retries != MAX_WAIT_NAMED_PIPE_RETRY
- && !(rc = WaitNamedPipeW (_pipe_name, WAIT_NAMED_PIPE_TIMEOUT)))
- {
- if (GetLastError () == ERROR_FILE_NOT_FOUND)
- Sleep (0); // Give the server a chance.
-
- retries += 1;
- }
- }
-
- assert (retries == MAX_WAIT_NAMED_PIPE_RETRY);
-
- system_printf ("lost connection to cygserver, error = %u",
- GetLastError ());
-
- assume_cygserver = false;
-
- return -1;
-}
-
-#ifndef __INSIDE_CYGWIN__
-
-bool
-transport_layer_pipes::impersonate_client ()
-{
- assert (_hPipe);
- assert (_hPipe != INVALID_HANDLE_VALUE);
- assert (_is_accepted_endpoint);
-
- if (_hPipe && !ImpersonateNamedPipeClient (_hPipe))
- {
- debug_printf ("Failed to Impersonate client, (%u)", GetLastError ());
- return false;
- }
-
- return true;
-}
-
-bool
-transport_layer_pipes::revert_to_self ()
-{
- assert (_is_accepted_endpoint);
-
- if (!RevertToSelf ())
- {
- debug_printf ("Failed to RevertToSelf, (%u)", GetLastError ());
- return false;
- }
- return true;
-}
-
-#endif /* !__INSIDE_CYGWIN__ */
diff --git a/winsup/cygserver/transport_pipes.h b/winsup/cygserver/transport_pipes.h
deleted file mode 100644
index 136812106..000000000
--- a/winsup/cygserver/transport_pipes.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/* transport_pipes.h
-
- Copyright 2001, 2002, 2003 Red Hat Inc.
-
- Written by Robert Collins <rbtcollins@hotmail.com>
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _TRANSPORT_PIPES_H
-#define _TRANSPORT_PIPES_H
-
-#define PIPE_NAME_PREFIX L"\\\\.\\pipe\\cygwin-"
-#define PIPE_NAME_SUFFIX L"-lpc"
-
-/* Named pipes based transport, for security on NT */
-class transport_layer_pipes : public transport_layer_base
-{
-public:
-#ifndef __INSIDE_CYGWIN__
- virtual int listen ();
- virtual class transport_layer_pipes *accept (bool *recoverable);
-#endif
-
- virtual void close ();
- virtual ssize_t read (void *buf, size_t len);
- virtual ssize_t write (void *buf, size_t len);
- virtual int connect ();
-
-#ifndef __INSIDE_CYGWIN__
- virtual bool impersonate_client ();
- virtual bool revert_to_self ();
-#endif
-
- transport_layer_pipes ();
- virtual ~transport_layer_pipes ();
-
-private:
- wchar_t _pipe_name[40];
- HANDLE _hPipe;
- const bool _is_accepted_endpoint;
- bool _is_listening_endpoint;
-
- transport_layer_pipes (HANDLE hPipe);
-};
-
-#endif /* _TRANSPORT_PIPES_H */
diff --git a/winsup/cygserver/woutsup.h b/winsup/cygserver/woutsup.h
deleted file mode 100644
index 5598c11c2..000000000
--- a/winsup/cygserver/woutsup.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/* woutsup.h: for Cygwin code compiled outside the DLL (i.e. cygserver).
-
- Copyright 2002, 2003, 2007 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#define _MT_SAFE 1
-
-#ifdef __INSIDE_CYGWIN__
-#error "woutsup.h is not for code being compiled inside the dll"
-#endif
-
-#ifndef _WIN32_WINNT
-#define _WIN32_WINNT 0x0500
-#endif
-
-#if _WIN32_WINNT < 0x0500
-#undef _WIN32_WINNT
-#define _WIN32_WINNT 0x0500
-#endif
-
-#include "winlean.h"
-
-#include "bsd_helper.h"
-#include "bsd_log.h"
-#include "bsd_mutex.h"
-
-/* The one function we use from winuser.h most of the time */
-extern "C" DWORD WINAPI GetLastError (void);
-
-extern int cygserver_running;
-
-#define SIGHANDLE(SIG) \
- do \
- { \
- struct sigaction act; \
- \
- act.sa_handler = &handle_signal; \
- act.sa_mask = 0; \
- act.sa_flags = 0; \
- \
- if (sigaction (SIG, &act, NULL) == -1) \
- { \
- panic ("failed to install handler for " #SIG ": %s", \
- strerror (errno)); \
- exit (1); \
- } \
- } while (false)
-
-#define debug_printf(f,...) debug((f),##__VA_ARGS__)
-#define syscall_printf(f,...) log(LOG_ERR,(f),##__VA_ARGS__)
-#define system_printf(f,...) log(LOG_ERR,(f),##__VA_ARGS__)
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
deleted file mode 100644
index 7feccf499..000000000
--- a/winsup/cygwin/ChangeLog
+++ /dev/null
@@ -1,2745 +0,0 @@
-2014-12-18 Yaakov Selkowitz <yselkowitz@cygwin.com>
-
- * common.din (__fbufsize, __flbf, __fpending, __freadable, __freading,
- __fsetlocking, __fwritable, __fwriting, clearerr_unlocked,
- feof_unlocked, ferror_unlocked, fflush_unlocked, fgetc_unlocked,
- fgets_unlocked, fgetwc_unlocked, fgetws_unlocked, fileno_unlocked,
- fputc_unlocked, fputs_unlocked, fputwc_unlocked, fputws_unlocked,
- fread_unlocked, fwrite_unlocked, getwc_unlocked, getwchar_unlocked,
- putwc_unlocked, putwchar_unlocked): Export.
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
-
-2014-12-16 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (find_fast_cwd): Point to problem reporting web site rather
- than to mailing list.
-
-2014-12-16 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (warn_msdos): Slightly reformat.
- (find_fast_cwd): Change warning message to urge an update before
- reporting the problem.
-
-2014-12-10 Corinna Vinschen <corinna@vinschen.de>
-
- * winver.rc (LegalCopyright): Fix belatedly (uh-oh).
-
-2014-12-08 Corinna Vinschen <corinna@vinschen.de>
-
- * environ.cc (regopt): Remove function.
- (environ_init): Drop undocumented feature to read application-specific
- environment variables from the registry.
- * include/cygwin/version.h (CYGWIN_INFO_PROGRAM_OPTIONS_NAME): Remove.
-
-2014-12-05 Corinna Vinschen <corinna@vinschen.de>
-
- * environ.cc (build_env): Remove loquacious debug statements.
-
-2014-12-05 Yaakov Selkowitz <yselkowitz@cygwin.com>
-
- * common.din (__bsd_qsort_r): Add.
- (qsort_r): Add.
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
-
-2014-12-02 Corinna Vinschen <corinna@vinschen.de>
-
- * flock.cc (create_lock_in_parent): Make lf_obj handle inheritable.
- Explain why.
- (lockf_t::create_lock_obj): Use FALSE, rather than 0 for BOOL argument.
- (lockf_t::del_lock_obj): Check if NtSetEvent succeeded and print system
- message if not.
-
-2014-12-02 Corinna Vinschen <corinna@vinschen.de>
-
- * uinfo.cc (fetch_windows_home): New function fetching Windows-compliant
- home directory. Include longish comment to explain what we're doing.
- (cygheap_pwdgrp::get_home): Take additional sid parameter. In
- NSS_SCHEME_WINDOWS case, call fetch_windows_home to create home
- directory.
- (pwdgrp::fetch_account_from_windows): Call cygheap_pwdgrp::get_home
- with additional sid argument.
- * cygheap.h (cygheap_pwdgrp::get_home): Align declaration to above
- change.
-
-2014-12-02 Corinna Vinschen <corinna@vinschen.de>
-
- * uinfo.cc (cygheap_user::ontherange): Fix order of fallbacks creating
- HOMEDRIVE/HOMEPATH values to be Windows-compliant. Add comments.
-
-2014-12-02 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (CreateProfile): Import.
- (LoadUserProfileW): Import.
- * registry.cc (get_registry_hive_path): Move to sec_auth.cc.
- (load_registry_hive): Remove.
- * registry.h (get_registry_hive_path): Drop declaration.
- (load_registry_hive): Ditto.
- * sec_auth.cc (get_user_profile_directory): Moved from registry.cc and
- renamed. Take third parameter with buffer length.
- (load_user_profile): New function taking over for load_registry_hive.
- Use official functions to load profile. If profile is missing, create
- it on Vista and later.
- * security.h (get_user_profile_directory): Declare.
- (load_user_profile): Declare.
- * syscalls.cc (seteuid32): Replace call to load_registry_hive with call
- to load_user_profile.
- * uinfo.cc (cygheap_user::env_userprofile): Replace call to
- get_registry_hive_path with call to get_user_profile_directory.
-
-2014-12-02 Corinna Vinschen <corinna@vinschen.de>
-
- * uinfo.cc (fetch_from_description): Make static.
- (fetch_from_path): Ditto.
-
-2014-12-02 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (CreateEnvironmentBlock): Import.
- (DestroyEnvironmentBlock): Import.
- * environ.cc (env_compare): New static bsearch comparison function.
- (build_env): Add parameter taking a user token. If token is non-NULL,
- fetch user's default Windows environment and merge it into the resulting
- environment. Explain what we do in preceeding comment.
- * environ,h (build_env): Align prototype to above change.
- * external.cc (create_winenv): Call build_env with NULL token.
- * spawn.cc (child_info_spawn::worker): When spawning new process under
- another user account, call build_env with new token to allow merging
- user's default Windows environment.
- * winlean.h (_USERENV_): Define to override dllimport.
-
-2014-12-02 Corinna Vinschen <corinna@vinschen.de>
-
- * spawn.cc (child_info_spawn::worker): Fix formatting.
-
-2014-12-02 Corinna Vinschen <corinna@vinschen.de>
-
- * sec_auth.cc (str2lsa): Remove.
- (str2buf2lsa): Remove.
- (lsaauth): Call RtlInitAnsiString instead of str2lsa and str2buf2lsa.
-
-2014-12-02 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.cc (init_cygheap::init_installation_root): Fix typo in
- comment.
-
-2014-12-02 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (IdnToAscii): Use simpler, equivalent LoadDLLfuncEx.
- (IdnToUnicode): Ditto.
-
-2014-12-01 Corinna Vinschen <corinna@vinschen.de>
-
- * wincap.cc (wincap_minimal): Remove.
- (wincaps): Drop has_physical_mem_access.
- (wincap_10): New global wincaps to support Windows 10.
- (wincapc::init): Use wincap_10 for version >= 6.4 and as default.
- * wincap.h (wincaps::has_physical_mem_access): remove.
-
-2014-11-28 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.cc (init_cygheap::init_tls_list): Accommodate threadlist
- having a new type threadlist_t *. Convert commented out code into an
- #if 0. Create thread mutex. Explain why.
- (init_cygheap::remove_tls): Drop timeout value. Always wait infinitely
- for tls_sentry. Return mutex HANDLE of just deleted threadlist entry.
- (init_cygheap::find_tls): New implementation taking tls pointer as
- search parameter. Return threadlist_t *.
- (init_cygheap::find_tls): Return threadlist_t *. Define ix as auto
- variable. Drop exception handling since crash must be made impossible
- due to correct synchronization. Return with locked mutex.
- * cygheap.h (struct threadlist_t): Define.
- (struct init_cygheap): Convert threadlist to threadlist_t type.
- (init_cygheap::remove_tls): Align declaration to above change.
- (init_cygheap::find_tls): Ditto.
- (init_cygheap::unlock_tls): Define.
- * cygtls.cc (_cygtls::remove): Unlock and close mutex when finishing.
- * exceptions.cc (sigpacket::process): Lock _cygtls area of thread before
- accessing it.
- * fhandler_termios.cc (fhandler_termios::bg_check): Ditto.
- * sigproc.cc (sig_send): Ditto.
- * thread.cc (pthread::exit): Ditto. Add comment.
- (pthread::cancel): Ditto.
-
-2014-11-28 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.cc (init_cygheap::find_tls): Add comment.
- * cygtls.cc (well_known_dlls): Rephrase comment.
- (bloda_detect): New function.
- (_cygtls::call2): Call init_thread and bloda_detect for non-pthread
- threads only.
- (_cygtls::remove): Move remove_tls and remove_wq calls up to run first.
- * miscfuncs.cc (struct pthread_wrapper_arg): Rename from struct
- thread_wrapper_arg.
- (pthread_wrapper): Rename from thread_wrapper and drop "static". Fix
- comment. Drop call to _cygtls::remove. Call api_fatal rather than
- ExitThread. Explain why.
- * miscfuncs.h (pthread_wrapper): Declare pthread_wrapper.
- * thread.cc (pthread::exit): Add a FIXME comment. Call _cygtls::remove
- before calling ExitThread.
-
-2014-11-27 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (mount_info::init): Take bool argument and allow to
- initialize mount table in two steps, system and user, depending on
- bool value.
- * mount.h (class mount_info): Align declaration of init function to
- above change.
- * shared.cc (user_info::initialize): Initialize mount table in two
- steps to allow internal_getpwsid to create valid POSIX paths from
- DOS paths given in AD. Add comments.
- * uinfo.cc (cygheap_pwdgrp::get_home): Allow DOS paths in
- NSS_SCHEME_FREEATTR attributes.
- (cygheap_pwdgrp::get_shell): Ditto.
-
-2014-11-27 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.cc (init_cygheap::find_tls): Allow to keep loop going after
- access to threadlist[ix] faulted. In case of an exception, remove
- threadlist[ix] from threadlist only. Add comment.
-
-2014-11-26 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (install): Add install-ldif target.
- (install-ldif): New target to install cygwin.ldif.
- * cygheap.h (class cygheap_pwdgrp): Rename pfx_t to nss_pfx_t. Add
- PFX to enum value. Add nss_scheme_method enum and nss_scheme_t
- structure. Add home_scheme, shell_scheme and gecos_scheme members.
- (NSS_SCHEME_MAX): Define.
- (cygheap_pwdgrp::get_home): Declare.
- (cygheap_pwdgrp::get_shell): Declare.
- (cygheap_pwdgrp::get_gecos): Declare.
- * cygwin.ldif: New file.
- * ldap.cc (std_user_attr): New array, just defining the standard
- attributes.
- (group_attr): Add cygwinUnixGid.
- (user_attr): Convert to macro pointing to cygheap->pg.ldap_user_attr.
- (cygheap_pwdgrp::init_ldap_user_attr): New method.
- (cyg_ldap::fetch_ad_account): Call cygheap_pwdgrp::init_ldap_user_attr
- if user_attr initialization is required. Fix comment.
- (cyg_ldap::get_string_attribute): Implement taking attribute name
- as argument.
- * ldap.h: Drop unused macros.
- (cyg_ldap::get_gecos): Remove.
- (cyg_ldap::get_home): Remove.
- (cyg_ldap::get_shell): Remove.
- (cyg_ldap::get_string_attribute): Declare name argument variant public.
- * uinfo.cc (cygheap_user::ontherange): Fix indentation.
- (cygheap_pwdgrp::init): Initialize new home_scheme, shell_scheme and
- gecos_scheme members. Align comment.
- (NSS_NCMP): Define comparison macro.
- (NSS_CMP): Ditto.
- (cygheap_pwdgrp::nss_init_line): Use aforementioned macros throughout.
- Fix comment handling. Add db_home, db_shell and db_gecos handling.
- (fetch_from_description): New function to fetch XML-style attributes
- from (description) string.
- (fetch_from_path): New function to evaluate path string with wildcards.
- (cygheap_pwdgrp::get_home): New methods to fetch pw_dir value.
- (cygheap_pwdgrp::get_shell): Ditto for pw_shell.
- (cygheap_pwdgrp::get_gecos): Ditto for pw_gecos.
- (colon_to_semicolon): Move up.
- (pwdgrp::fetch_account_from_windows): Convert home, shell, gecos
- variables to char*. Drop statement breaking extended group info.
- Fetch home, shell and gecos values using new methods. Use
- fetch_from_description calls to fetch UNIX id and primary groups from
- SAM comment field. Accommodate uxid being a char* now. Accommodate
- the fact that extended info is malloc'ed, rather then alloca'ed.
- Create linebuf content as multibyte string. Create line buffer by
- just calling cstrdup.
-
-2014-11-25 Corinna Vinschen <corinna@vinschen.de>
-
- * include/fcntl.h: Move all open flags (except O_NDELAY) to newlib's
- sys/_default_fcntl.h.
-
-2014-11-25 Corinna Vinschen <corinna@vinschen.de>
-
- * binmode.c (cygwin_premain0): Don't use underscore'd variants of the
- open flags.
- * textmode.c (cygwin_premain0): Ditto.
-
-2014-11-21 Corinna Vinschen <corinna@vinschen.de>
-
- * init.cc (dll_entry): Revert previous patch. This requires another
- solution.
- * miscfuncs.cc (thread_wrapper): Ditto.
- * sigproc.cc (exit_thread): Disable sending a signal for synchronization
- with process exit. Explain why. Keep code in for later inspection,
- should the problem show up again.
- (sig_send): Use "tls", rather than "tid" as name for _cygtls arg.
-
-2014-11-20 Corinna Vinschen <corinna@vinschen.de>
-
- * init.cc (dll_entry): Call _my_tls.remove with INFINITE wait period
- to avoid SEGVs and subsequent hangs in _cygtls::find_tls.
- * miscfuncs.cc (thread_wrapper): Ditto.
-
-2014-11-20 Iuliu Rus <rus.iuliu@gmail.com>
-
- * net.cc (fdsock): Change default values for socket buffers on 32 bit
- to fix performance on 10Gb networks.
-
-2014-11-17 Corinna Vinschen <corinna@vinschen.de>
-
- * uinfo.cc (pwdgrp::fetch_account_from_windows): Allow fetching of
- NT SERVICE accounts by name. Always prepend domain to NT SERVICE
- accounts. Add U-domain\username string to pw_gecos for predefined
- builtin accounts as well.
-
-2014-11-14 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_termios.cc (fhandler_termios::line_edit): Fix fatal typo in
- bytes_read pointer checks.
-
-2014-11-13 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (fhandler_termios::line_edit): Add parameter to return
- written bytes.
- * fhandler_termios.cc (fhandler_termios::tcinit): Fix formatting.
- (fhandler_termios::line_edit): Return bytes actually written. Write
- in 32 byte chunks in non-canonical mode to reduce number of WriteFile
- calls. Don't just eat unwritten bytes in case of an error condition.
- Especially, don't report them back to the caller as written.
- * fhandler_tty.cc (fhandler_pty_slave::read): Disable code reducing
- the number of bytes read from the pipe to vmin. Add comment.
- (fhandler_pty_master::write): Convert ret to ssize_t type. Just call
- line_edit once, not in a loop once for each byte. Return bytes written
- as returned by line_edit.
-
-2014-11-13 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/version.h (CYGWIN_VERSION_DLL_MINOR): Bump to 34.
-
-2014-11-12 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.h (cygheap_pwdgrp): Remove constants NSS_FILES and NSS_DB.
- Use NSS_SRC_FILES and NSS_SRC_DB throughout instead.
- (cygheap_pwdgrp::nss_pwd_src): New inline method.
- (cygheap_pwdgrp::nss_grp_src): Ditto.
- * external.cc (cygwin_internal): Add CW_GETNSS_PWD_SRC and
- CW_GETNSS_GRP_SRC cases.
- * uinfo.cc: Use NSS_SRC_FILES and NSS_SRC_DB throughout.
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
- * include/sys/cygwin.h (cygwin_getinfo_types): Add CW_GETNSS_PWD_SRC
- and CW_GETNSS_GRP_SRC.
- (NSS_SRC_FILES): Define.
- (NSS_SRC_DB): Define.
-
-2014-11-07 Corinna Vinschen <corinna@vinschen.de>
-
- * dcrt0.cc (cygwin__cxa_atexit): Fetch correct DSO handle value
- by searching dll list. Explain why.
-
-2014-11-06 Corinna Vinschen <corinna@vinschen.de>
-
- * dcrt0.cc (cygwin_atexit): Change preceeding comment to reflect
- API version numbers.
- * external.cc (cygwin_internal): disable setting cxx_malloc on 64 bit.
- Add CW_FIXED_ATEXIT case.
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
- * include/sys/cygwin.h (cygwin_getinfo_types): Add CW_FIXED_ATEXIT.
- * lib/atexit.c (atexit): Test running Cygwin version by checking
- return value of cygwin_internal (CW_FIXED_ATEXIT).
-
-2014-11-05 Corinna Vinschen <corinna@vinschen.de>
-
- * lib/atexit.c (atexit): Check for being linked into the executable.
- If so, call __cxa_atexit with NULL DSO handle. Explain why.
- * lib/dso_handle.c: New file providing fallback __dso_handle.
-
-2014-11-05 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (NEW_FUNCTIONS): Add atexit to be not exported.
- * lib/atexit.c (atexit): New, statically linkable version of atexit.
- * dcrt0.cc (cygwin_atexit): Add comment to mark this function as old
- entry point. Indiscriminately check for DSO of function pointer for
- all functions, if checking for DSO of return address fails on x86_64.
- Change comment accordingly.
-
-2014-11-05 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (NEW_FUNCTIONS): Define target-independent. Add target
- dependent stuff afterwards. Globally define timezone and all xdr
- symbols as non-exported from libcygwin.a.
-
-2014-11-03 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.cc: Fix formatting.
-
-2014-10-30 Corinna Vinschen <corinna@vinschen.de>
-
- * uinfo.cc (cygheap_user::ontherange): Don't mention /etc/passwd.
-
-2014-10-29 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.cc (init_cygheap::init_installation_root): Create content of
- installation_dir as non-prefixed path, if possible.
-
-2014-10-29 Corinna Vinschen <corinna@vinschen.de>
-
- * common.din (__cxa_atexit): Define as cygwin__cxa_atexit.
- * dcrt0.cc (cygwin__cxa_atexit): New function. Explain what we do.
-
-2014-10-28 Corinna Vinschen <corinna@vinschen.de>
-
- * globals.cc (dos_file_warning): Set to false by default.
- * path.cc (warn_msdos): Make static. Drop test for dos_file_warning.
- (path_conv::check): Check for dos_file_warning here to avoid a function
- call in the default case.
-
-2014-10-27 Corinna Vinschen <corinna@vinschen.de>
-
- * dcrt0.cc (cygwin_atexit): Add workaround for broken atexit calls
- in __gcc_register_frame of DLLs built with gcc-4.8.3-3.
-
-2014-10-27 Corinna Vinschen <corinna@vinschen.de>
-
- * dlfcn.cc (dlopen): Drop patch accommodating SetDllDiretory from
- 2014-10-14.
-
-2014-10-27 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.cc (cygheap_fixup_in_child): Drop call to set_dll_dir.
- (init_cygheap::init_installation_root): Set installation_dir_len.
- (setup_cygheap): Drop call to set_dll_dir.
- * cygheap.h (struct init_cygheap): Add installation_dir_len member.
- (init_cygheap::set_dll_dir): Remove.
- * environ.cc (win_env::add_cache): Use stpcpy for speed.
- (posify_maybe): Use tmp_pathbuf buffer instead of stack.
- (raise_envblock): New function to resize Windows environment block.
- (build_env): Fix indentation. Call raise_envblock function. Check if
- $PATH exists and is non-empty. If not, add PATH variable with Cygwin
- installation directory as content to Windows environment. Explain why.
-
- * uinfo.cc (cygheap_pwdgrp::_nss_init): Fill UNICODE_STRING members
- on the fly. Drop call to RtlInitUnicodeString.
- (pwdgrp::check_file): Ditto.
-
-2014-10-26 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::af_local_connect): Drop
- setting connect_state to connect_credxchg.
- (fhandler_socket::af_local_accept): Ditto.
- (fhandler_socket::recv_internal): Drop ill-advised connect_state check.
- Add comment so as not to repeat the exercise.
- * fhandler.h (enum conn_state): Drop now unneeded connect_credxchg
- state.
-
-2014-10-24 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_proc.cc (format_proc_cygdrive): Fix symlink path if cygdrive
- is "/".
-
-2014-10-24 Corinna Vinschen <corinna@vinschen.de>
-
- * gendef (sigdelayed): 64 bit only: Fix seh_pushreg statements in
- prologue.
-
-2014-10-24 Kai Tietz <corinna@vinschen.de>
- Corinna Vinschen <corinna@vinschen.de>
-
- * gendef (sigdelayed): 64 bit only: Push CPU flags before aligning
- stack to avoid changing flag values.
-
-2014-10-22 Yaakov Selkowitz <yselkowi@redhat.com>
-
- * common.din (stime): Export.
- * times.cc (stime): New function.
- * include/cygwin/time.h (stime): Declare.
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
-
-2014-10-21 Corinna Vinschen <corinna@vinschen.de>
-
- * sec_auth.cc (get_user_groups): Remove experimental exception handler
- added 2014-09-05.
- (get_user_local_groups): Ditto.
-
-2014-10-20 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_serial.cc: Revert debug code accidentally checked in on
- 2014-08-18.
-
-2014-10-20 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (symlink_info::check): Set error from status code if opening
- the parent directory failed, but keep special case for root dirs.
-
-2014-10-17 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.cc (cygheap_fixup_in_child): Call set_dll_dir.
- (init_cygheap::init_installation_root): Just memmove contents of
- installation_root instead of calling GetModuleFileNameW again.
- Copy installation_root to installation_dir before stripping of
- "bin" dir. Don't call SetDllDirectory here. Explain what we do.
- (setup_cygheap): New function taking over initial cygheap setup
- from memory_init. Additionally call set_dll_dir.
- * cygheap.h (struct init_cygheap): Add installation_dir member.
- (init_cygheap::set_dll_dir): Define.
- (setup_cygheap): Declare.
- * dcrt0.cc: Throughout drop parameter from memory_init call.
- (dll_crt0_0): Call setup_cygheap prior to memory_init.
- * dlfcn.cc (dlopen): Change comment to point to the right function.
- * shared.cc (memory_init): Drop parameter. Drop cygheap setup.
- * shared_info.h (memory_init): Change declaration accordingly.
-
-2014-10-17 Corinna Vinschen <corinna@vinschen.de>
-
- * cygtls.h (__try): Define __l_endtry as block-local label in 32 bit
- case as well.
-
-2014-10-17 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (DLL_OFILES): Add quotactl.o.
- * common.din (quotactl): Export.
- * ntdll.h: Define FILE_FS_CONTROL_INFORMATION::FileSystemControlFlags
- flag values.
- (struct _FILE_FS_CONTROL_INFORMATION): Define.
- (struct _FILE_GET_QUOTA_INFORMATION): Define.
- (typedef struct _FILE_QUOTA_INFORMATION): Define.
- (NtQueryObject): Use PVOID rather than VOID*.
- (NtQueryVolumeInformationFile): Ditto.
- (NtQueryQuotaInformationFile): Declare.
- (NtSetQuotaInformationFile): Declare.
- (NtSetVolumeInformationFile): Declare.
- * quotactl.cc: New file implementing quotactl().
- * include/sys/mount.h (BLOCK_SIZE): Define.
- (BLOCK_SIZE_BITS): Define.
- * include/sys/quota.h: New header.
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
-
-2014-10-16 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (DLL_OFILES): Rearrange with one file per line.
-
-2014-10-16 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_proc.cc (format_proc_partitions): Extend output to print
- the windows mount points the device is mounted on.
-
-2014-10-14 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::connect): Don't change state
- on WSAEALREADY error. Change comment accordingly.
-
-2014-10-14 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.cc (init_cygheap::init_installation_root): Install Cygwin's
- installation dir as DLL search path, instead of ".".
- * cygheap.h (class cwdstuff): Add parameter names in function
- declarations for readability.
- (cwdstuff::get): Add inline implementation fetching the CWD as wide char
- string.
- * dlfcn.cc (dlopen): Add searching for dependent DLLs in DLL
- installation dir or CWD, if all else failed.
- Add comment to explain scenarios this is accommodating.
-
-2014-10-14 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::connect): Init connect_state to
- connect_pending only on unconnected socket. Set connect_state to
- connected on WSAEISCONN error. Set connect_state to connect_failed
- on any other error except WSAEWOULDBLOCK if connect is still pending.
- Add lots of comment to explain why all of the above.
-
-2014-10-13 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (cygwin_setsockopt): Drop redundant test for AF_LOCAL and
- SOCK_STREAM in SO_PEERCRED case, as in the original patch.
-
-2014-10-12 Corinna Vinschen <corinna@vinschen.de>
-
- * dlfcn.cc (gfpod_helper): Only check for POSIX dir separator, same as
- in get_full_path_of_dll.
-
-2014-10-12 Corinna Vinschen <corinna@vinschen.de>
-
- * dlfcn.cc (set_dl_error): Drop useless __stdcall.
- (check_path_access): Ditto. Drop FE_CWD from call to find_exec.
- (gfpod_helper): Call path_conv::check for all paths containing a dir
- separator to more closely follow the Linux search algorithm.
- (get_full_path_of_dll): Drop useless __stdcall.
- (dlopen): Simplify RTLD_NOLOAD case by calling GetModuleHandleEx
- instead of GetModuleHandle/LoadLibrary.
-
-2014-10-11 Christian Franke <franke@computer.org>
-
- Add setsockopt(sd, SOL_SOCKET, SO_PEERCRED, NULL, 0) to disable
- initial handshake on AF_LOCAL sockets.
- * fhandler.h (class fhandler_socket): Add no_getpeereid status flag.
- (fhandler_socket::af_local_set_no_getpeereid): New prototype.
- * fhandler_socket.cc (fhandler_socket::af_local_connect): Skip handshake
- if no_getpeereid is set. Add debug output.
- (fhandler_socket::af_local_accept): Likewise.
- (fhandler_socket::af_local_set_no_getpeereid): New function.
- (fhandler_socket::af_local_copy): Copy no_getpeereid.
- (fhandler_socket::getpeereid): Fail if no_getpeereid is set.
- * net.cc (cygwin_setsockopt): Add SO_PEERCRED for AF_LOCAL/SOCK_STREAM
- sockets. Add comment to explain why we need it.
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
-
-2014-10-11 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::af_local_connect): Drop outdated
- comment.
- (fhandler_socket::evaluate_events): Only set connect_state and call
- af_local_connect if connect_state is connect_pending. Explain why.
- Drop redundant test for socket family and type.
- (fhandler_socket::connect): Extend comment.
-
-2014-10-11 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::evaluate_events): Handle
- connect_state and af_local_connect connect call here, once, independent
- of FD_CONNECT being requested. Add comment to explain why.
- (fhandler_socket::connect): Drop connect_state handling and calling
- af_local_connect. Move remaining AF_LOCAL stuff prior to calling
- ::connect and explain why. Simplify error case.
- * poll.cc (poll): Handle connect state independently of POLLOUT being
- requested for the descriptor to allow setting POLLIN if connect failed.
- Add comment.
- * select.cc (set_bits): Drop connect_state and AF_LOCAL handling here.
-
-2014-10-11 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::evaluate_events): Slightly
- rearrange code. Rephrase a comment.
-
-2014-10-10 Corinna Vinschen <corinna@vinschen.de>
-
- * dlfcn.cc (dlopen): Disable old 32 bit code on 64 bit.
- * dcrt0.cc (check_sanity_and_sync): Ditto.
- * dll_init.cc (dll_dllcrt0_1): Fix typo in comment.
-
-2014-10-09 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_procsys.cc (fhandler_procsys::readdir): Just test
- ObjectTypeName for object types rather than calling lstat to avoid
- performance hit.
- * globals.cc (ro_u_natdir): Define.
- (ro_u_natsyml): Define.
- (ro_u_natdev): Define.
-
-2014-10-09 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::readdir_helper): Set d_type
- for virtual directories.
-
-2014-10-09 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_proc.cc (fhandler_proc::readdir): Set dirent d_type.
- * fhandler_process.cc (fhandler_process::readdir): Ditto.
- * fhandler_procnet.cc (fhandler_procnet::readdir): Ditto.
- * fhandler_procsys.cc (fhandler_procsys::readdir): Ditto.
- * fhandler_procsysvipc.cc (fhandler_procsysvipc::readdir): Ditto.
- * fhandler_virtual.h (virt_ftype_to_dtype): Define new inline function
- to generate dirent d_type from virtual_ftype_t.
-
-2014-10-08 Corinna Vinschen <corinna@vinschen.de>
-
- * common.din (ffsl): Export.
- (ffsll): Export.
- * syscalls.cc (ffs): Implement using GCC intrinsic.
- (ffsl): Ditto.
- (ffsll): Ditto.
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
-
-2014-10-08 Christian Franke <franke@computer.org>
-
- * syscalls.cc (ffs): Fix crash of ffs (0x80000000) on 64 bit.
-
-2014-10-08 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_process.cc (format_process_statm): Fix output of dirty
- pages. Add linefeed.
-
-2014-09-05 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_proc.cc (proc_tab): Add entry for cygdrive symlink.
- (format_proc_cygdrive): New function to implement /proc/cygdrive.
-
-2014-09-05 Corinna Vinschen <corinna@vinschen.de>
-
- * exception.h (class exception): Remove unnecessary #ifdef.
- * uinfo.cc (client_request_pwdgrp::client_request_pwdgrp): Fix length
- counter to include trailing NUL.
-
- * sec_auth.cc (get_user_groups): Add experimental exception handler.
- (get_user_local_groups): Ditto.
-
-2014-09-05 Corinna Vinschen <corinna@vinschen.de>
-
- * uinfo.cc (pwdgrp::fetch_account_from_windows): Handle APPLICATION
- PACKAGE AUTHORITY SIDs.
- * winlean.h (DNLEN): Raise to 31. Explain why.
-
-2014-09-03 Corinna Vinschen <corinna@vinschen.de>
-
- * sec_acl.cc (aclcheck32): Check for required default entries as well.
- Enable check for missing CLASS_OBJ entries, now that setfacl creates
- them.
-
-2014-09-02 Corinna Vinschen <corinna@vinschen.de>
-
- * sec_acl.cc (aclsort32): Set errno to EINVAL if aclcheck32 failed.
-
-2014-08-31 Corinna Vinschen <corinna@vinschen.de>
-
- * uinfo.cc (pwdgrp::fetch_account_from_windows): Disallow user accounts
- as groups. Add comment.
-
-2014-08-31 Corinna Vinschen <corinna@vinschen.de>
-
- * uinfo.cc (cygheap_pwdgrp::init): Fix comment. Rearrange code for
- style.
- (cygheap_pwdgrp::nss_init_line): Disable db_prefix and db_separator
- settings. Add comment.
- (pwdgrp::fetch_account_from_windows): Drop outdated comment. Fix code
- fetching primary group gid of group setting in SAM description field.
- Change comment accordingly.
-
-2014-08-31 Corinna Vinschen <corinna@vinschen.de>
-
- * uinfo.cc (pwdgrp::fetch_account_from_windows): Disallow creating an
- entry for "NULL SID".
-
-2014-08-31 Corinna Vinschen <corinna@vinschen.de>
-
- * sec_acl.cc (setacl): Add comment. Handle NULL ACE for SUID, SGID,
- and VTX bits. Create owner, group, other and NULL entries in the same
- way and in the same order as alloc_sd.
- (getacl): Skip NULL ACE.
-
-2014-08-28 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::facl): Drop CLASS_OBJ entry.
- * fhandler_disk_file.cc (fhandler_disk_file::facl): Ditto in noacl case.
- * sec_acl.cc (getacl): Compute useful fake CLASS_OBJ and DEF_CLASS_OBJ
- permission bits based on how these values are generated on Linux.
- Add comments to explain what the code is doing.
- * security.cc (get_attribute_from_acl): Compute group permission based
- on the actual primary group permissions and all secondary user and group
- ACCESS_ALLOWED_ACEs to emulate Linux' behaviour more closely.
- (check_access): Fix typos im comment.
- * include/cygwin/acl.h (MIN_ACL_ENTRIES): Redefine as 3.
-
-2014-08-28 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::fstatvfs): Try the
- FileFsSizeInformation information class on filesystems choking on
- FileFsFullSizeInformation (I see you Netapp!)
-
-2014-08-27 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (fhandler_pty_slave::fch_open_handles): Add bool parameter
- to declaration.
- * fhandler_tty.cc (fhandler_pty_slave::fch_open_handles): Add bool
- parameter "chown". Only request WRITE_OWNER access when opening pty
- synchronization objects if "chown" is set.
- (fhandler_pty_slave::fchmod): Call fch_open_handles with new bool
- parameter set to false.
- (fhandler_pty_slave::fchown): Call fch_open_handles with new bool
- parameter set to true.
- * kernel32.cc (CreateFileMappingW): Fix default standard rights for
- file mappings from READ_CONTROL to STANDARD_RIGHTS_REQUIRED to allow
- changing the DACL (fixes "access denied" error in pinfo::set_acl).
-
- * fhandler_disk_file.cc (fhandler_base::fstat_helper): Change debug
- output to print mode bits in octal.
- * security.cc (alloc_sd): Ditto.
- (set_file_attribute): Ditto.
-
-2014-08-27 Corinna Vinschen <corinna@vinschen.de>
-
- * ntea.cc (read_ea): Change left-over return to __leave. Fix
- condition to close handle. Call NtClose rather than CloseHandle.
- (write_ea): Fix condition to close handle. Call NtClose rather than
- CloseHandle.
- * security.cc (get_file_sd): Call pc.init_reopen_attr if a valid
- incoming handle was given, pc.get_object_attr otherwise.
- (set_file_sd): Ditto.
-
-2014-08-26 Corinna Vinschen <corinna@vinschen.de>
-
- * path.h (path_conv::init_reopen_attr): Change from void to returning
- POBJECT_ATTRIBUTES. Take OBJECT_ATTRIBUTES reference as argument, not
- pointer.
- * fhandler_disk_file.cc: Throughout accommodate above change.
- * syscalls.cc: Ditto.
- * ntea.cc (read_ea): Don't set hdl to NULL if it's already NULL. Set
- attr with pc.init_reopen_attr before trying to reopen file.
- (write_ea): Ditto.
- * security.cc (get_file_sd): Use pc.init_reopen_attr rather than
- pc.get_object_attr when trying to reopen file.
- (set_file_sd): Ditto.
-
-2014-08-25 Corinna Vinschen <corinna@vinschen.de>
-
- * cygtls.cc (san::leave/x86_64): Implement.
- * cygtls.h (class tls_pathbuf): Move counter variables into a union.
- Add 64 bit element _counters covering both counter variables to
- optimize save and restore operations.
- (class san/x86_64): Only store single 64 bit value.
- (san::san/x86_64): Implement.
- (san::leave/x86_64): Only declare here, as returns_twice function.
- Explain why.
- (class san/i686): Change type of _c_cnt and _w_cnt to uint32_t.
- (__try/x86_64): Move definition of __sebastian after the first memory
- barrier. Drop __sebastian.setup call.
-
-2014-08-25 Corinna Vinschen <corinna@vinschen.de>
-
- * cygtls.cc (_cygtls::remove): Revert previous patch.
- * cygtls.h (struct _local_storage): Move pathbufs back here.
- (class san/x86_64): Revert class. Save and restore pathbufs counters
- only.
- (class san/i686): Revert saving and restoring pathbufs counters.
- (__try/x86_64): Add a san variable and call it's setup method.
- (__except/x86_64): Call san::leave to restore pathbufs counters.
- * gendef (_sigbe): Revert previous change.
- * thread.cc (verifyable_object_state): Remove gcc 4.7 workaround in
- forward declaration as well.
- * tls_pbuf.cc (tls_pbuf): Revert previous change.
- * tls_pbuf.h (class tmp_pathbuf): Accommodate reverting pathbufs to
- locals structure.
- * tlsoffsets.h: Regenerate.
- * tlsoffsets64.h: Regenerate.
-
-2014-08-21 Corinna Vinschen <corinna@vinschen.de>
-
- * Throughout, use __try/__except/__endtry blocks, rather than myfault
- handler.
- * cygtls.cc (_cygtls::remove): Accommodate the fact that pathbufs
- has been moved from _local_storage to _cygtls.
- * cygtls.h (class tls_pathbuf): Add comment to hint to gendef usage
- of counters. Change type of counters to uint32_t for clarity.
- Remove _cygtls as friend class.
- (struct _local_storage): Move pathbufs from here...
- (struct _cygtls): ...to here, allowing to access it from _sigbe.
- (class san): Only define on 32 bit. Remove errno, _c_cnt and _w_cnt
- members.
- (san::setup): Drop parameter. Don't initialize removed members.
- (san::leave): Don't set removed members.
- (class myfault): Only define on 32 bit.
- (myfault::faulted): Only keep implementation not taking any parameter.
- Drop argument in call to sebastian.setup.
- (__try/__leave/__except/__endtry): Implement to support real SEH. For
- now stick to SJLJ on 32 bit.
- * dcrt0.cc (dll_crt0_0): Drop 64 bit call to
- exception::install_myfault_handler.
- * exception.h (exception_handler): Define with EXCEPTION_DISPOSITION
- as return type.
- (PDISPATCHER_CONTEXT): Define as void * on 32 bit. Define as pointer
- to _DISPATCHER_CONTEXT on 64 bit.
- (class exception): Define separately for 32 and 64 bit.
- (exception::myfault): Add handler for myfault SEH handling on 64 bit.
- (exception::exception): Fix mangled method name to account for change
- in type of last parameter.
- (exception::install_myfault_handler): Remove.
- * exceptions.cc (exception::myfault_handle): Remove.
- (exception::myfault): New SEH handler for 64 bit.
- * gendef (_sigbe): Set tls_pathbuf counters to 0 explicitely when
- returning to the caller.
- * ntdll.h: Move a comment to a better place.
- (struct _SCOPE_TABLE): Define on 64 bit.
- * thread.cc (verifyable_object_isvalid): Remove gcc 4.7 workaround.
- * tls_pbuf.cc (tls_pbuf): Fix to accommodate new place of pathbufs.
- (tls_pathbuf::destroy): Change type of loop variables to uint32_t.
- * tls_pbuf.h (class tmp_pathbuf): Change type of buffer counters to
- uint32_t. Accommodate new place of pathbufs.
- * tlsoffsets.h: Regenerate.
- * tlsoffsets64.h: Regenerate.
-
-2014-08-21 Corinna Vinschen <corinna@vinschen.de>
-
- * miscfuncs.cc (__import_address): Cover the first dereference to imp
- under the fault handler.
-
-2014-08-21 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (if_freenameindex): Don't catch a SEGV from free to fail
- loudly on double free.
-
-2014-08-21 Corinna Vinschen <corinna@vinschen.de>
-
- * dir.cc (rmdir): Don't skip deleting fh in the ENOTEMPTY case.
-
-2014-08-20 Corinna Vinschen <corinna@vinschen.de>
-
- * tls_pbuf.h (tmp_pathbuf::tmp_pathbuf): Convert to inline method.
- (tmp_pathbuf::~tmp_pathbuf): Ditto.
- * tls_pbuf.cc (tmp_pathbuf::tmp_pathbuf): Remove here.
- (tmp_pathbuf::~tmp_pathbuf): Ditto.
-
-2014-08-19 Corinna Vinschen <corinna@vinschen.de>
-
- * dir.cc (dirfd): Per POSIX, return EINVAL on invalid directory stream.
- (telldir): Per POSIX, return -1 and set errno to EBADF, rather than
- just returning 0, on invalid directory stream.
- * signal.cc (sigwaitinfo): Return -1, not EFAULT, when SEGV was catched.
-
-2014-08-19 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (enum conn_state): Add "connect_credxchg" state.
- (class fhandler_socket): Grant another bit to connect_state flag.
- * fhandler_socket.cc (fhandler_socket::af_local_connect): Rearrange
- variable definition. Set connect_state to connect_credxchg.
- (fhandler_socket::af_local_accept): Ditto.
- (fhandler_socket::recv_internal): Accept connect_credxchg on connection
- oriented AF_LOCAL sockets as well to allow the credential exchange.
- Extend comment to explain.
-
-2014-08-19 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc: Replace WNet[...]A with WNet[...]W imports.
- * dcrt0.cc (initial_env): Drop strlwr calls. Call strcasestr instead.
- * fhandler_netdrive.cc: Throughout, convert to calling WNet UNICODE
- functions. Use tmp_pathbuf rather than alloca. Replace call to
- strlwr with call to RtlDowncaseUnicodeString.
-
-2014-08-19 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (fhandler_serial::is_tty): Reinstantiate.
-
-2014-08-18 Corinna Vinschen <corinna@vinschen.de>
-
- * miscfuncs.cc (strlwr): Rename from cygwin_strlwr. Drop __stdcall
- decoration.
- (strupr): Rename from cygwin_strupr. Drop __stdcall decoration.
- * string.h (strlwr): Remove override macro. Simply declare.
- (strupr): Ditto.
-
-2014-08-18 Corinna Vinschen <corinna@vinschen.de>
-
- * dtable.cc (dtable::init_std_file_from_handle): Mention that console
- handles are kernel objects since Windows 8.
- * fhandler.h (enum conn_state): Add "listener" state.
- (class fhandler_socket): Drop listener status flag.
- (fhandler_socket::lseek): Return -1 and errno ESPIPE.
- (fhandler_serial::lseek): Ditto.
- (fhandler_serial::is_tty): Remove.
- * fhandler_socket.cc (fhandler_socket::listen): Set connect_state to
- listener. Add comment.
- (fhandler_socket::accept4): Explicitely check if the socket is listening
- and fail with EINVAL, if not. Explain why we have to do that.
- (fhandler_socket::recv_internal): Explicitely check if the socket is
- connected if it's a stream socket. Explain why we have to do that.
- (fhandler_socket::getpeereid): Drop now redundant test.
-
-2014-08-15 Corinna Vinschen <corinna@vinschen.de>
-
- * winsup.h (_GNU_SOURCE): Define. Explain why.
- * configure.ac: Convert to new AC_INIT style.
- * configure: Regenerate.
-
-2014-08-15 Corinna Vinschen <corinna@vinschen.de>
-
- * cygerrno.h (seterrno): Define as (always) inline function.
- * errno.cc (seterrno): Remove.
-
-2014-08-14 Corinna Vinschen <corinna@vinschen.de>
-
- * dll_init.sgml: Remove.
- * dtable.sgml: Move into ../doc/misc-funcs.xml.
- * external.sgml: Ditto.
- * stackdump.sgml: Ditto.
-
-2014-08-14 Corinna Vinschen <corinna@vinschen.de>
-
- * security.sgml: Move to ../doc dir and rename to logon-funcs.xml.
-
-2014-08-14 Corinna Vinschen <corinna@vinschen.de>
-
- * path.sgml: Move to ../doc dir and rename to path.xml.
- * posix.sgml: Move to ../doc dir and rename to posix.xml.
-
-2014-08-14 Corinna Vinschen <corinna@vinschen.de>
-
- * dlmalloc.c: Remove unused file.
- * dlmalloc.h: Ditto.
- * malloc.cc: Update to Doug Lea's malloc version 2.8.6.
-
-2014-08-13 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/version.h (CYGWIN_VERSION_DLL_MINOR): Bump to 33.
- (CYGWIN_VERSION_API_MINOR): Bump to reflect intermediate 1.7.32 release.
-
-2014-08-11 Corinna Vinschen <corinna@vinschen.de>
-
- * cpuid.h: Add missing copyright header. Fix formatting. Use uint32_t
- instead of unsigned throughout. Change functions to static inline and
- always inline.
- (cpuid): Add parameter to set ecx, allowing to request extended CPUID
- info.
- * fhandler_proc.cc (format_proc_cpuinfo): Use uint32_t instead of
- unsigned throughout. Add fake decimal places to MHz info. Handle more
- feature flags.
- * fhandler_random.cc (fhandler_dev_random::write): Allow up to 4K
- input to add entropy.
- * syscalls.cc: Drop including cpuid.h.
-
-2014-08-07 Yaakov Selkowitz <yselkowi@redhat.com>
-
- * common.din (__cxa_finalize): Export.
- * dcrt0.cc (cygwin_atexit): Use d->handle with __cxa_atexit.
- * dll_init.cc (dll_list::detach): Use d->handle with __cxa_finalize.
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Use 274 for
- __cxa_finalize as well.
-
-2014-08-04 Anthony Heading <anthony@ajrh.net>
-
- * include/sys/file.h: Add extern "C".
-
-2014-08-04 Corinna Vinschen <corinna@vinschen.de>
-
- * common.din (__cxa_atexit): Export.
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump to 274.
-
-2014-08-04 Corinna Vinschen <corinna@vinschen.de>
-
- * uinfo.cc (pwdgrp::fetch_account_from_windows): Drop "plus_prepended"
- as naming style. Drop enum name_style_t, use a boolean
- "fully_qualified_name" value instead. Rework function to drop
- "plus_prepended" handling througout and default to "name only" style
- as replacement.
-
-2014-07-31 Eric Blake <eblake@redhat.com>
-
- * include/pthread.h: Decorate attribute names with __, for
- namespace safety.
- * include/cygwin/core_dump.h: Likewise.
- * include/cygwin/cygwin_dll.h: Likewise.
- * include/sys/cygwin.h: Likewise.
- * include/sys/strace.h: Likewise.
-
-2014-07-30 Corinna Vinschen <corinna@vinschen.de>
-
- * uinfo.cc (pwdgrp::fetch_account_from_windows): Fix comment.
-
-2014-07-29 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.h (class cygheap_domain_info): Remove lowest_tdo_posix_offset.
- * ldap.cc (cyg_ldap::fetch_posix_offset_for_domain): Return UINT32_MAX
- in case of error.
- * security.h (PRIMARY_POSIX_OFFSET): Define.
- (NOACCESS_POSIX_OFFSET): Define.
- (UNUSABLE_POSIX_OFFSET): Define.
- * uinfo.cc (cygheap_domain_info::init): Drop initializing
- lowest_tdo_posix_offset.
- (pwdgrp::fetch_account_from_file): Set PosixOffset to either
- UNUSABLE_POSIX_OFFSET or NOACCESS_POSIX_OFFSET in case we don't get a
- sensible offset from AD. Explain why. Drop setting ch
- lowest_tdo_posix_offset.
- (pwdgrp::fetch_account_from_windows): Replace constant 0x100000 with
- PRIMARY_POSIX_OFFSET throughout.
-
-2014-07-24 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::send_internal): Fix value of
- out_len when tweaking the last buffer so out_len is correct in a
- subsequent if expression.
-
-2014-07-21 Corinna Vinschen <corinna@vinschen.de>
-
- * thread.cc (pthread::init_mainthread): Initialize thread mutex to
- type PTHREAD_MUTEX_RECURSIVE, just as for any other thread.
-
-2014-07-21 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/version.h (CYGWIN_VERSION_DLL_MINOR): Bump to 32.
-
-2014-07-21 Corinna Vinschen <corinna@vinschen.de>
-
- * uinfo.cc: Fix typo in comment.
-
-2014-07-16 Corinna Vinschen <corinna@vinschen.de>
-
- * thread.cc (pthread::create): Handle stackaddr as upper bound address.
- Add comment.
- (pthread_attr_setstack): Store upper bound address in stackaddr.
- Explain why.
- (pthread_attr_getstack): Handle stackaddr as upper bound address.
- Add comment.
- (pthread_attr_setstackaddr): Add comment.
- (pthread_attr_getstackaddr): Add comment.
- (pthread_attr_getstacksize): Return default stacksize if stacksize has
- not been set by the application, just as on Linux. Add comment.
- (pthread_getattr_np): Store upper bound address in stackaddr. Explain
- why.
- * include/pthread.h: Remove outdated comment.
- (pthread_attr_getstackaddr): Mark as deprecated, as on Linux.
- (pthread_attr_setstackaddr): Ditto.
-
-2014-07-15 Christopher Faylor <me.cygwin2014@cgf.cx>
-
- * sigproc.cc (sigproc_init): Set aside more buffer space for signal
- pipes.
- (sig_send): Retry WriteFiles which fail when there is no error but
- packbytes have not been sent.
-
-2014-07-15 Christopher Faylor <me.cygwin2014@cgf.cx>
-
- * sigproc.cc (send_sig): Don't report an error if WriteFile succeeds.
-
-2014-07-14 Christopher Faylor <me.cygwin2014@cgf.cx>
-
- * sigproc.cc (send_sig): Fix bad format in diagnostic output.
-
-2014-07-14 Corinna Vinschen <corinna@vinschen.de>
-
- * uinfo.cc (cygheap_domain_info::init): Correctly set
- lowest_tdo_posix_offset to UNIX_POSIX_OFFSET.
- (fetch_posix_offset): Redesign to fake a POSIX offset in all cases
- where we can't fetch a non-0 POSIX offset from our primary domain.
-
-2014-07-14 Yaakov Selkowitz <yselkowitz@cygwin.com>
-
- * thread.cc (pthread_mutex::pthread_mutex): Change default type
- to PTHREAD_MUTEX_NORMAL.
- (pthread_mutex::unlock): Return EPERM if the mutex has no owner and
- the mutex type is PTHREAD_MUTEX_ERRORCHECK, as on Linux.
- (pthread_mutexattr::pthread_mutexattr): Ditto.
- (pthread_mutex_unlock): Do not fail if mutex is a normal mutex
- initializer.
- * include/pthread.h (PTHREAD_MUTEX_INITIALIZER): Redefine as
- PTHREAD_NORMAL_MUTEX_INITIALIZER_NP.
-
-2014-07-09 Corinna Vinschen <corinna@vinschen.de>
-
- * thread.cc (pthread::create): Use PTHREAD_DEFAULT_STACKSIZE stacksize
- if attr.stacksize is 0.
- (pthread_attr::pthread_attr): Initialize stacksize to 0 to align more
- closely to Linux.
- (pthread_attr_getstack): Fix incorrect stackaddr computation. Return
- stackaddr just like pthread_attr_getstackaddr. Remove slightly off
- comment.
- (pthread_attr_getstackaddr): Remove slightly off comment.
- (pthread_getattr_np): Return stackaddr and stacksize based on the full
- allocated stackarea.
-
-2014-07-09 Corinna Vinschen <corinna@vinschen.de>
-
- * exceptions.cc (exception::myfault_handle): Rephrase comment.
-
-2014-07-09 Corinna Vinschen <corinna@vinschen.de>
-
- * exceptions.cc (exception::myfault_handle): Fix typo in comment.
-
-2014-07-07 Corinna Vinschen <corinna@vinschen.de>
-
- * exceptions.cc (exception::myfault_handle): Disable handling
- STATUS_STACK_OVERFLOW. Explain why.
-
-2014-07-07 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::send_internal): Improve loop to
- write streams in chunks of wmem() bytes to raise performance when
- writing small buffers. Rename variables and add comments to help
- understanding the code in years to come.
-
-2014-07-07 Corinna Vinschen <corinna@vinschen.de>
-
- * passwd.cc (pg_ent::enumerate_ad): Revert to simply skipping a domain
- if opening the connection to the domain fails.
-
-2014-07-07 Pierre Humblet <Pierre.Humblet@ieee.org>
- Corinna Vinschen <corinna@vinschen.de>
-
- * libc/minires.c (minires_dprintf): Change "Minires" to "Resolv" to
- differ from external minres lib.
- (res_nquerydomain): Fix off-by-one in domain concatenation. Add debug
- output.
-
-2014-07-03 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::fstatvfs): Add debug
- output.
-
-2014-06-25 Corinna Vinschen <corinna@vinschen.de>
-
- * errno.cc (errmap): Fix order of SERVICE_REQUEST_TIMEOUT.
-
-2014-06-25 Corinna Vinschen <corinna@vinschen.de>
-
- * errno.cc (errmap): Handle Windows error codes ERROR_CANCELLED,
- ERROR_CONNECTION_REFUSED, ERROR_DEV_NOT_EXIST, ERROR_DS_GENERIC_ERROR,
- ERROR_NOT_ENOUGH_QUOTA, ERROR_SERVICE_REQUEST_TIMEOUT, ERROR_TIMEOUT,
- ERROR_UNEXP_NET_ERR.
- * ldap.cc (cyg_ldap::map_ldaperr_to_errno): Drop explicit LDAP_TIMEOUT
- handling.
-
-2014-06-25 Corinna Vinschen <corinna@vinschen.de>
-
- * ldap.cc (cyg_ldap::map_ldaperr_to_errno): Explicitely map LDAP_TIMEOUT
- to EIO.
-
-2014-06-25 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (ldap_search_sW): Replace ldap_search_stW.
- (LdapMapErrorToWin32): Import.
- * fhandler_disk_file.cc (fhandler_base::fstat_by_nfs_ea): Accommodate
- change to cyg_ldap::open.
- * ldap.cc (CYG_LDAP_TIMEOUT): Remove.
- (CYG_LDAP_ENUM_TIMEOUT): Remove.
- (def_tv): Remove.
- (enum_tv): Remove.
- (cyg_ldap::map_ldaperr_to_errno): New method to map LDAP error codes to
- POSIX errno codes. Explicitly map LDAP_NO_RESULTS_RETURNED to ENMFILE.
- (cyg_ldap::wait): Ditto.
- (struct cyg_ldap_init): New struct.
- (cyg_ldap::connect_ssl): Return ULONG. Drop setting LDAP_OPT_TIMELIMIT.
- Add call to ldap_search_sW to fetch root DSE.
- (cyg_ldap::connect_non_ssl): Ditto.
- (ldap_init_thr): New static thread function.
- (cyg_ldap::connect): New method to call connect_ssl/connect_non_ssl in
- an interruptible cygthread.
- (struct cyg_ldap_search): New struct.
- (cyg_ldap::search_s): New method to perform generic synchronous search.
- (ldap_search_thr): New static thread function.
- (cyg_ldap::search): New method to call search_s in an interruptible
- cygthread.
- (struct cyg_ldap_next_page): New struct.
- (cyg_ldap::next_page_s): New method to perform generic synchronous
- paged search.
- (ldap_next_page_thr): New static thread function.
- (cyg_ldap::next_page): New method to call next_page_s in an
- interruptible cygthread.
- (cyg_ldap::open): Return POSIX errno. Call connect method.
- (cyg_ldap::fetch_ad_account): Call search method rather than
- ldap_search_stW.
- (cyg_ldap::enumerate_ad_accounts): Return POSIX errno. Use infinite
- timeout in call to ldap_search_init_pageW.
- (cyg_ldap::next_account): Return POSIX errno. Call next_page method
- rather than ldap_get_next_page_s.
- (cyg_ldap::fetch_posix_offset_for_domain): Call search method rather
- than ldap_search_stW.
- (cyg_ldap::fetch_unix_sid_from_ad): Ditto.
- (cyg_ldap::fetch_unix_name_from_rfc2307): Ditto.
- * ldap.h (class cyg_ldap): Accommodate aforementioned changes.
- * passwd.cc (pg_ent::enumerate_ad): Ditto. Break search if one of
- cyg_ldap::enumerate_ad_accounts or cldap.next_account returns with
- an error code other than ENMFILE.
- * sec_helper.cc (cygpsid::get_id): Accommodate change to cyg_ldap::open.
- * uinfo.cc (fetch_posix_offset): Ditto.
-
-2014-06-23 Corinna Vinschen <corinna@vinschen.de>
-
- * spawn.cc (find_exec): Initialize err (CID 60111).
- * strace.cc (strace::activate): Fix potential buffer overrun (CID 59938)
- * syscalls.cc (popen): Close parent pipe descriptor via fclosing fp on
- error to avoid resource leak (CID 59981).
- * thread.cc (pthread::exit): Avoid accessing cygtls member after
- deleting "this" (CID 60217).
-
-2014-06-23 Corinna Vinschen <corinna@vinschen.de>
-
- * select.cc (start_thread_socket): Delete si on early return in case of
- an error (CID 59967).
-
-2014-06-23 Corinna Vinschen <corinna@vinschen.de>
-
- * regex/regcomp.c (computematchjumps): Free local memory in case of
- error (CID 59975).
-
-2014-06-23 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (fs_info::update): Define dir in the outermost scope to avoid
- accessing out-of-scope value (CID 60027). Always initialize attr to
- upath (CID 60113).
-
-2014-06-23 Corinna Vinschen <corinna@vinschen.de>
-
- * malloc_wrapper.cc (mallinfo): Initialize m if external malloc is used,
- too (CID 60120).
-
-2014-06-23 Corinna Vinschen <corinna@vinschen.de>
-
- * localtime.cc (tzload): Fix leaking memory (CID 60001).
-
-2014-06-23 Corinna Vinschen <corinna@vinschen.de>
-
- * exceptions.cc (try_to_debug): Free environment pointer when not used
- anymore (CID 59968).
-
-2014-06-23 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (cygwin_getaddrinfo): Fix value of hint->ai_addrlen on 64 bit.
- Explain why.
-
-2014-06-23 Corinna Vinschen <corinna@vinschen.de>
-
- * environ.cc (regopt): Allocate small local buffer to avoid copying
- twice. Fixes resource leak (CID 60012). Add comment.
-
-2014-06-23 Corinna Vinschen <corinna@vinschen.de>
-
- * dll_init.cc (dll_list::alloc): Fix buffer overrun (CID 59940).
-
-2014-06-23 Corinna Vinschen <corinna@vinschen.de>
-
- * dcrt0.cc (insert_file): Fix resource leaks (CIDs 59987, 59988).
-
-2014-06-23 Corinna Vinschen <corinna@vinschen.de>
-
- * ldap.cc (CYG_LDAP_TIMEOUT): Set to 5 secs.
- (CYG_LDAP_ENUM_TIMEOUT): New timeout value for enumeration only. Set
- to 60 secs.
- (CYG_LDAP_ENUM_PAGESIZE): Define as number of entries per single
- search page. Set to 100. Use throughout.
- (def_tv): Rename from tv. Use throughout.
- (enum_tv): New variable. Use in call to ldap_get_next_page_s.
-
-2014-06-17 Corinna Vinschen <corinna@vinschen.de>
-
- * ldap.cc (CYG_LDAP_TIMEOUT): Define as timeout value. Set to 30 secs
- for now. Use throughout.
- * uinfo.cc (colon_to_semicolon): New local function.
- (pwdgrp::fetch_account_from_windows): Convert all colons in AD gecos
- entry to semicolons.
-
-2014-06-17 David Stacey <drstacey@tiscali.co.uk>
-
- * libc/rexec.cc (cygwin_rexec): Make ahostbuf static to avoid returning
- an out-of-scope address.
-
-2014-06-16 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::evaluate_events): Call
- WSASetLastError after setsockopt. Explain why.
-
-2014-06-16 Denis Excoffier <cygwin@Denis-Excoffier.org>
-
- * grp.cc (getgrouplist): Fix setting ngroups to make sure to return
- the right value.
-
-2014-06-05 Christopher Faylor <me.cygwin2014@cgf.cx>
-
- * timer.cc (timer_tracker::cancel): Demote api_fatal to system_printf,
- printing more details about odd failure condition.
-
-2014-05-23 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (ldap_memfreeW): Remove.
- (ldap_msgfree): Import.
- * ldap.cc: Throughout, use ldap_msgfree to free LDAPMessage memory,
- rather than ldap_memfreeW.
- (cyg_ldap::next_account): Immediately abandon search when quiting from
- search.
-
-2014-05-22 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (ldap_abandon): Remove.
- (ldap_count_entries): Import.
- (ldap_get_next_page_s): Import.
- (ldap_result): Remove.
- (ldap_searchW): Remove.
- (ldap_search_abandon_page): Import.
- (ldap_search_init_pageW): Import.
- * ldap.cc (cyg_ldap::close): Use ldap_search_abandon_page to abandon
- search. Reset srch_id, srch_msg and srch_entry.
- (cyg_ldap::enumerate_ad_accounts): Use paged search to overcome server
- side search result set restriction.
- (cyg_ldap::next_account): Ditto.
- * ldap.h (class cyg_ldap): Add members srch_id, srch_msg and srch_entry.
- Remove member msg_id.
- (cyg_ldap::cyg_ldap): Change initialization accordingly.
-
-2014-05-22 Corinna Vinschen <corinna@vinschen.de>
-
- * sec_auth.cc (get_server_groups): Call get_user_local_groups only if
- get_logon_server succeeded.
-
-2014-05-22 Corinna Vinschen <corinna@vinschen.de>
-
- * ldap.cc (cyg_ldap::fetch_ad_account): Take additional domain string
- parameter. Convert into likely rootDSE string if not NULL, and use in
- subsequent call to ldap_search_stW. Add comment to explain that this
- is not the exactly correct solution.
- * ldap.h (cyg_ldap::fetch_ad_account): Change prototype accordingly.
- * uinfo.cc (pwdgrp::fetch_account_from_windows): Always use loc_ldap
- in call to fetch_posix_offset to make sure we're fetchoinmg the posix
- offsets from *our* domain controller. Only set domain variable to
- non-NULL if the account is from a trusted domain. Use domain in call
- to cyg_ldap::fetch_ad_account.
-
-2014-05-22 Corinna Vinschen <corinna@vinschen.de>
-
- * gmon.h: Pull in profile.h. Explain why.
-
-2014-05-22 Corinna Vinschen <corinna@vinschen.de>
-
- * uinfo.cc (pwdgrp::fetch_account_from_windows): Fix potential SEGV
- referencing NULL pointer.
-
-2014-05-22 Corinna Vinschen <corinna@vinschen.de>
-
- * libc/bsdlib.cc (forkpty): Close master and slave if fork fails to
- avoid resource leak (CID 59997).
- * libc/fts.c: Update to FreeBSD version 1.39 (CID 59947).
- * libc/minires.c (minires_get_search): Fix out-of-bounds read from
- words array (CID 59937).
-
-2014-05-20 Corinna Vinschen <corinna@vinschen.de>
-
- * flock.cc (delete_lock_in_parent): Use LIST_FOREACH_SAFE to avoid
- dereferencing freed pointer (CID 60224).
-
-2014-05-20 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_procsysvipc.cc (format_procsysvipc_msg): Rearrange code to
- avoid resource leakage (CID 60002). Don't use tmp_pathbuf, explain why.
- Fix indentation.
- (format_procsysvipc_sem): Ditto.
- (format_procsysvipc_shm): Ditto (CID 60003).
-
-2014-05-20 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_process.cc (get_mem_values): Rearrange code slightly to
- avoid resource leakage (CID 59973).
- (format_process_stat): Drop temporary variable wcmd and avoid
- string copy without length check (CID 60050).
- (format_process_status): Ditto (CID 60051).
-
-2014-05-20 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_proc.cc (format_proc_swaps): Use tmp_pathbuf for filename,
- rather than allocating and forgetting to free (CID 59982).
-
-2014-05-20 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_floppy.cc (fhandler_dev_floppy::get_drive_info): Fix floppy
- drive handling broken with 1.7.19.
-
-2014-05-20 Corinna Vinschen <corinna@vinschen.de>
-
- * scandir.cc (scandir): Assume namelist is always valid, per POSIX.
- (CID 60021).
- * sec_auth.cc (cygwin_logon_user): Securely erase password copy.
- (lsaprivkeyauth): Avoid trying to dereference data if no key is stored
- in the registry (CID 60122). Securely erase passwords after usage.
-
-2014-05-19 Corinna Vinschen <corinna@vinschen.de>
-
- * pseudo-reloc.cc (__report_error): Raise size of module name buffer to
- PATH_MAX. Fix length in call to GetModuleFileNameW (CID 59947).
-
-2014-05-19 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (call_gaa): Fix setting pa_ret pointer in case of an error
- from GetAdaptersAddresses (CID 60218).
- (get_ifs): Add missing braces in AF_INET6 case which broke netmask
- computation. Break out of loop if prefix gets <= 0 (CID 59939).
-
-2014-05-19 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/version.h (CYGWIN_VERSION_DLL_MINOR): Bump to 31.
-
-2014-05-19 Corinna Vinschen <corinna@vinschen.de>
-
- * dtable.cc (handle_to_fn): Fix length parameter in call to
- QueryDosDeviceW (CID 59936).
-
-2014-05-19 Corinna Vinschen <corinna@vinschen.de>
-
- * pinfo.cc (pinfo_basic::pinfo_basic): Fix size of progname array in
- call to GetModuleFileNameW (CID 59935).
-
-2014-05-19 Corinna Vinschen <corinna@vinschen.de>
-
- * smallprintf.cc (__small_vsprintf): Add missing break in 'C' case.
-
-2014-05-19 Corinna Vinschen <corinna@vinschen.de>
-
- * exceptions.cc (try_to_debug): Fix size of dbg_cmd (CID 59929).
-
-2014-05-18 David Stacey <drstacey@tiscali.co.uk>
-
- * syscalls.cc (getusershell): Fix buffer overrun (Coverity ID 59932).
-
-2014-05-15 Corinna Vinschen <corinna@vinschen.de>
-
- * external.cc (cygwin_internal): Use local name buffer instead of
- allocated one in CW_CYGNAME_FROM_WINNAME.
-
-2014-05-15 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump to 273.
-
-2014-05-15 Corinna Vinschen <corinna@vinschen.de>
-
- * external.cc (cygwin_internal): Implement CW_CYGNAME_FROM_WINNAME.
- Add lengthy comment to explain what we do and why.
- * include/sys/cygwin.h (cygwin_getinfo_types): Add
- CW_CYGNAME_FROM_WINNAME.
-
-2014-05-14 Corinna Vinschen <corinna@vinschen.de>
-
- * sec_auth.cc (get_server_groups): Call get_logon_server only for
- non-builtin accounts.
- * uinfo.cc (pwdgrp::fetch_account_from_windows): Check incoming
- account name for validity in terms of the current name prefixing rules
- and refuse invalid names.
-
-2014-05-13 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::ioctl): Handle the different
- ideas of u_long between Winsock and Cygwin applications on x86_64.
- Add long comment.
-
-2014-05-09 Christopher Faylor <me.cygwin2014@cgf.cx>
-
- * signal.cc (sigprocmask): Fix strace output to include "how".
-
- * fhandler_console.cc (dev_console::save_restore): Only save current
- dwEnd line rather than the one after that.
-
-2014-05-08 Corinna Vinschen <corinna@vinschen.de>
-
- * uinfo.cc (cygheap_user::init): Fix formatting in debug output.
- (struct cyg_USER_INFO_24): Define temporarily. Explain why.
- (pwdgrp::fetch_account_from_windows): Handle sane primary group
- setting for Microsoft Accounts. Explain why.
- * wincap.h (wincaps::has_microsoft_accounts): New element.
- * wincap.cc: Implement above element throughout.
-
-2014-05-08 Corinna Vinschen <corinna@vinschen.de>
-
- * grp.cc (gr_ent::enumerate_caches): Fix copy/paste bug introducing
- an endless loop.
-
-2014-05-07 Corinna Vinschen <corinna@vinschen.de>
-
- * passwd.cc (pwdgrp::parse_passwd): Fix an off by one computing the
- buffer len. Add comment.
- * uinfo.cc (internal_getlogin): Fix typo in comment.
-
-2014-05-07 Corinna Vinschen <corinna@vinschen.de>
-
- * uinfo.cc (pwdgrp::fetch_account_from_windows): Tweak SID<->uid
- conversion to cover S-1-5-113, S-1-5-114, and S-1-5-1000 groups.
-
-2014-05-07 Corinna Vinschen <corinna@vinschen.de>
-
- * grp.cc (pwdgrp::parse_group): Set grp.len. Drop generating any
- gr_mem entries.
- (getgrgid_r): Don't try to copy gr_mem entries. Always set gr_mem
- to an empty list.
- (getgrnam_r): Ditto.
- (app_gr): New static struct to store group data propagated to the
- calling application via getgrgid/getgrnam.
- (getgr_cp): Fill app_gr and return pointer to app_gr.g.
- (getgrgid32): Call getgr_cp.
- (getgrnam32): Ditto.
- * passwd.cc (pwdgrp::parse_passwd): Set res.len.
- (app_pw): New static struct to store passwd data propagated to the
- calling application via getpwuid/getpwnam.
- (getpw_cp): Fill app_pw and return pointer to app_pw.p.
- (getpwuid32): Cal getpw_cp.
- (getpwnam): Ditto.
- * pwdgrp.h (struct pg_pwd): Add len member.
- (struct pg_grp): Ditto.
-
-2014-05-06 Corinna Vinschen <corinna@vinschen.de>
-
- * security.h (MAX_SUBAUTH_CNT): Drop. Use SID_MAX_SUB_AUTHORITIES
- instead throughout.
- (MAX_SID_LEN): Drop. Use SECURITY_MAX_SID_SIZE instead throughout.
-
-2014-05-06 Corinna Vinschen <corinna@vinschen.de>
-
- * grp.cc (internal_getgroups): Drop unused cygsid variable.
- * sec_helper.cc (cygpsid::pstring): Use sid_sub_auth_count macro.
- (cygsid::get_sid): Use MAX_SUBAUTH_CNT rather than wrong constant 8.
- Don't call memcpy to copy subauthorities into SID, use assignment.
- (cygsid::getfromstr): Use MAX_SUBAUTH_CNT rather than wrong constant 8.
- * security.h (MAX_SUBAUTH_CNT): New definition. Set to 11 to cover
- Microsoft Accounts.
- (MAX_SID_LEN): Define in terms of SID member sizes and MAX_SUBAUTH_CNT.
- (DBGSID): Use MAX_SUBAUTH_CNT to define size of SubAuthority array.
- * uinfo.cc (pwdgrp::fetch_account_from_windows): Handle Micosoft
- Accounts. Handle them as well known group. Compare domain names
- case-insensitive.
- * winlean.h (PIPE_REJECT_REMOTE_CLIENTS): Drop temporary definition
- since Mingw64 catched up.
- (DNLEN): Redefine as 16. Explain why.
-
-2014-05-05 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (cygwin_getsockopt): Rearrange code slightly and handle
- TCP_NODELAY just like SO_KEEPALIVE and SO_DONTROUTE.
-
-2014-05-03 Christopher Faylor <me.cygwin2014@cgf.cx>
-
- * spawn.cc (av::setup): Eat trailing whitespace on #! script.
-
-2014-05-02 Christopher Faylor <me.cygwin2014@cgf.cx>
-
- * fhandler_dsp.cc (ioctl): Use _ioctl for recursive call.
-
-2014-04-26 Christopher Faylor <me.cygwin2014@cgf.cx>
-
- * DevNotes: Add entry cgf-000026.
- * fhandler.h (fhandler_console::save_top): Save top of screen
- coordinates.
- * fhandler_console.cc (dev::save_restore): Record top of screen
- coordinates. Clear entire buffer when restoring saved buffer and try
- to position the cursor on the save relative place on the screen.
-
-2014-04-25 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (NT_TRANSACTIONAL_ERROR): Cover all status codes up to
- STATUS_TRANSACTION_NOT_ENLISTED.
-
-2014-04-24 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc: On x86_64, define u_long as __ms_u_long before
- including the windows headers. Explain why.
- (get_inet_addr): Convert ANY address to LOOPBACK address. Explain why.
- (fhandler_socket::evaluate_events): Forcibly set SO_ERROR socket option
- in case a connection attempt failed. Explain why.
- (fhandler_socket::ioctl): Drop x86_64 re-definition of u_long here.
- * fhandler_procnet.cc: On x86_64, define u_long as __ms_u_long before
- including the windows headers. Explain why.
- * net.cc: Ditto.
-
-2014-04-23 Corinna Vinschen <corinna@vinschen.de>
-
- * miscfuncs.cc (check_iovec): Allow 0 as valid iovcnt value.
-
-2014-04-22 Corinna Vinschen <corinna@vinschen.de>
-
- * ldap.cc (user_attr): Remove "uid" attribute.
- * ldap.h (LDAP_USER_NAME_ATTR): Remove. Change other attribute index
- values as required.
- (cyg_ldap::get_user_name): Remove inline function.
- * uinfo.cc (pwdgrp::fetch_account_from_windows): Remove code to handle
- Cygwin username different from Windows username.
- (pwdgrp::add_account_from_cygserver): Remove unnecessary cast.
-
-2014-04-18 Corinna Vinschen <corinna@vinschen.de>
-
- * winf.cc (linebuf::fromargv): Temporarily revert patch from 2014-01-24.
-
-2014-04-18 Corinna Vinschen <corinna@vinschen.de>
-
- * cygtls.h (TP_NUM_C_BUFS): Raise to 50 to allow SYMLOOP_MAX recursions
- path_conv <-> normalize_posix_path, plus a bit of buffer.
- (TP_NUM_W_BUFS): Ditto.
- (class san): Change type of _c_cnt and _w_cnt to unsigned.
- * path.cc (normalize_posix_path): Guard recursion into path_conv
- against tmp_pathbuf overflow. Generate normalized path in call to
- path_conv. If the path is valid, replace dst with the normalized_path
- from path_conv call. Add comment to explain why we're doing this.
- * tls_pbuf.cc (tls_pathbuf::destroy): Only free buffers until the
- first buffer pointer is NULL.
- (tmp_pathbuf::c_get): Simplify error message.
- (tmp_pathbuf::w_get): Ditto.
- * tls_pbuf.h (class tmp_pathbuf): Change type of c_buf_old and w_buf_old
- to unsigned.
- (tmp_pathbuf::check_usage): New inline method to check if we have
- enough tmp_pathbuf buffers left to call a function using tmp_pathbuf
- buffers.
- * tlsoffsets.h: Regenerate.
- * tlsoffsets64.h: Regenerate.
-
-2014-04-16 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (cygwin_setsockopt): Ignore IPV6_TCLASS the same way as IP_TOS.
-
-2014-04-12 Corinna Vinschen <corinna@vinschen.de>
-
- * uinfo.cc (pwdgrp::fetch_account_from_windows): Fix gid evaluation
- for local accounts.
-
-2014-04-10 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/version.h (CYGWIN_VERSION_DLL_MINOR): Bump to 30.
-
-2014-04-09 Corinna Vinschen <corinna@vinschen.de>
-
- * exceptions.cc (exception::myfault_handle): Only handle the minimum
- amount of exceptions the myfault handler was designed for.
-
-2014-04-08 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.sc.in: (Temporarily?) workaround serious ld bug which
- truncates symbols in certain computations to 32 bit. See
- https://sourceware.org/bugzilla/show_bug.cgi?id=16821
-
-2014-04-07 Corinna Vinschen <corinna@vinschen.de>
-
- * cygserver_ipc.h (ipc_set_proc_info): Add bool parameter to specify
- whether or not to send signal_arrived.
- * shm.cc (client_request_shm::client_request_shm): Call
- ipc_set_proc_info with bool parameter set to true to not send
- signal_arrived.
-
-2014-04-04 Corinna Vinschen <corinna@vinschen.de>
-
- * ntea.cc (EA_BUFSIZ): Fix comment.
- (read_ea): Use tmp_pathbuf for local buffer rather than alloca.
- Throughout change ZwQueryEaFile to NtQueryEaFile in comments.
-
-2014-04-04 Corinna Vinschen <corinna@vinschen.de>
-
- * ntea.cc (EA_BUFSIZ): Reduce to 64K. Add comment to explain why.
-
-2014-03-29 Christopher Faylor <me.cygwin2014@cgf.cx>
-
- * DevNotes: Add entry cgf-000025.
- * exceptions.cc (_cygtls::signal_debugger): Reorganize to avoid
- contacting the debugger if we have already done so via the exception
- handler. Eliminate need for goto. Remove an ifdef in favor of just
- allocating a larger buffer.
-
-2014-03-28 Corinna Vinschen <corinna@vinschen.de>
-
- * dcrt0.cc (dll_crt0_0): Install myfault exception handler on x86_64.
- * exception.h (exception_list): Typedef as void on x86_64.
- (exception::handler_installed): Remove.
- (exception::handle_while_being_debugged): Remove.
- (exception::myfault_handle): Declare for x86_64.
- (exception::handle): Declare as ordinary exception handler on x86_64
- as well.
- (exception::exception): Drop previous code (again). Install
- exception::handle as SEH handler.
- (exception::install_myfault_handler): New x86_64-only method to
- install exception::myfault_handle as VEH handler. Explain why.
- (exception::~exception): For x86_64, define frame end label (again).
- * exceptions.cc (CYG_EXC_CONTINUE_EXECUTION): Drop definition.
- (CYG_EXC_CONTINUE_SEARCH): Ditto.
- (exception::myfault_handle): New x86_64-only method, VEH handler to
- handle myfault exceptions.
- (exception::handle): Define as ordinary exception handler on x86_64
- as well. Use ExceptionContinueExecution and ExceptionContinueSearch
- throughout instead of deleted Cygwin macros. Don't handle myfault
- exceptions on x86_64.
-
-2014-03-28 Corinna Vinschen <corinna@vinschen.de>
-
- * sec_auth.cc (create_token): Initialize lsa handle to NULL, rather than
- to INVALID_HANDLE_VALUE.
- (lsaauth): Ditto.
- (lsaprivkeyauth): Ditto.
- * setlsapwd.cc (setlsapwd): Don't initialize lsa handle.
-
-2014-03-28 Corinna Vinschen <corinna@vinschen.de>
-
- * exceptions.cc (_cygtls::signal_debugger): Move memcpy to copy context
- from incoming siginfo_t to thread_context, too.
-
-2014-03-27 Corinna Vinschen <corinna@vinschen.de>
-
- * gendef (_sigbe/x86_64): Fix typo in .seh_proc pseudo-op.
- (setjmp/x86_64): Drop storing ExceptionList pointer in jmp_buf->Frame.
- Drop comment. Store likely frame in rdx. Jump to __setjmpex.
- (__setjmpex): New function providing setjmp functionality. Fetch
- jmp_buf->Frame from rdx, like MSVCRT setjmpex.
- (__sjfault/x86_64): Store rdx content in jmp_buf->Frame.
- (__ljfault/x86_64): Don't restore ExceptionList pointer.
- (longjmp/x86_64): Ditto.
-
-2014-03-19 Christopher Faylor <me.cygwin2014@cgf.cx>
-
- * fhandler_dsp.cc (fhandler_dev_dsp::ioctl): Actually pass ioctl
- argument to _ioctl.
-
-2014-03-19 Christopher Faylor <me.cygwin2014@cgf.cx>
-
- * fhandler.h (fhandler_dev_dsp): Remove variable names from
- declarations.
- (fhandler_dev_dsp::close_audio_in): Make __reg1.
- (fhandler_dev_dsp::close_audio_out): Make __reg2.
- * fhandler_dsp.cc (fhandler_dev_dsp::close_audio_in): Make __reg1.
- (fhandler_dev_dsp::close_audio_out): Make __reg2.
- (fhandler_dev_dsp::close): Don't abruptly terminate sound just because
- we are exiting.
-
-2014-03-19 Corinna Vinschen <corinna@vinschen.de>
-
- * exception.h (exception::handle_while_being_debugged): Declare.
- (exception::exception): Install unhandled exception filter.
- * exceptions.cc (exception::handle_while_being_debugged): New method.
-
-2014-03-19 Corinna Vinschen <corinna@vinschen.de>
-
- * passwd.cc (pg_ent::enumerate_ad): Ignore primary domain in list of
- trusted domains only if all trusted domains are enumerated anyway.
- Explain why.
-
-2014-03-18 Christopher Faylor <me.cygwin2014@cgf.cx>
-
- * fhandler_dsp.cc (fhandler_dev_dsp::fixup_after_fork): Actually call
- _fixup_after_fork rather than looping forever.
- (fhandler_dev_dsp::fixup_after_exec): Ditto.
-
-2014-03-18 Corinna Vinschen <corinna@vinschen.de>
-
- Partially revert patch from 2014-03-04.
- * exception.h (exception::handler_installed): Declare.
- (exception::exception): Install vectored exception handler on x86_64.
- (exception::~exception): Remove for x86_64.
- * exceptions.cc (exception::handler_installed): Define.
-
-2014-03-17 Christopher Faylor <me.cygwin2014@cgf.cx>
-
- * sigproc.h (no_thread_exit_protect): New class.
- * sigproc.cc (thread_exit): Use no_thread_exit_protect to determine if
- we need to coordinate ThreadExit/ExitProcess.
- * fhandler_dsp.cc (fhandler_dev_dsp::Audio_out::stop): Use
- no_thread_exit_protect to kludge around waiting for waveOutClose as it
- waits for a thread that never exits.
- (fhandler_dev_dsp::Audio_in::stop): Ditto for waveInClose.
-
-2014-03-16 Christopher Faylor <me.cygwin2014@cgf.cx>
-
- * fhandler.h (fhandler_dev_dsp::base): New method.
- (fhandler_dev_dsp::_read): Ditto.
- (fhandler_dev_dsp::_write): Ditto.
- (fhandler_dev_dsp::_ioctl): Ditto.
- (fhandler_dev_dsp::_fixup_after_fork): Ditto.
- (fhandler_dev_dsp::_fixup_after_exec): Ditto.
- * fhandler_dsp.cc (fhandler_dev_dsp::read): Call real function via
- base() pointer.
- (fhandler_dev_dsp::write): Ditto.
- (fhandler_dev_dsp::ioctl): Ditto.
- (fhandler_dev_dsp::fixup_after_fork): Ditto.
- (fhandler_dev_dsp::fixup_after_exec): Ditto.
- (fhandler_dev_dsp::_read): Rename by adding an leading underscore.
- (fhandler_dev_dsp::_write): Ditto.
- (fhandler_dev_dsp::_ioctl): Ditto.
- (fhandler_dev_dsp::_fixup_after_fork): Ditto.
- (fhandler_dev_dsp::_fixup_after_exec): Ditto.
-
-2014-03-12 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.h (enum cygheap_pwdgrp::cache_t): Remove.
- (cygheap_pwdgrp::caching): Convert to bool.
- (cygheap_pwdgrp::pwd_cache): Add cygserver member.
- (cygheap_pwdgrp::grp_cache): Ditto.
- (cygheap_pwdgrp::nss_db_caching): Drop.
- (cygheap_pwdgrp::nss_db_full_caching): Drop.
- (cygheap_pwdgrp::nss_cygserver_caching): New method.
- (cygheap_pwdgrp::nss_disable_cygserver_caching): New method.
- * cygserver.h (client_request::request_code_t): Add
- CYGSERVER_REQUEST_PWDGRP.
- * cygserver_pwdgrp.h: New file.
- * cygtls.h (struct _local_storage): Remove pwbuf and grbuf members.
- * grp.cc (pwdgrp::prep_tls_grbuf): Drop.
- (internal_getgrsid): Handle cygserver caching and rearrange to check
- the caches first.
- (internal_getgrnam): Ditto.
- (internal_getgrgid): Ditto.
- (gr_ent::enumerate_caches): Handle cygserver cache.
- * passwd.cc (pwdgrp::prep_tls_pwbuf): Drop.
- (internal_getpwsid): Handle cygserver caching and rearrange to check
- the caches first.
- (internal_getpwnam): Ditto.
- (internal_getpwuid): Ditto.
- (pw_ent::enumerate_caches): Handle cygserver cache.
- * pwdgrp.h (pwdgrp::add_account_from_cygserver): New method declaration.
- (pwdgrp::fetch_account_from_cygserver): New method declaration.
- (pwdgrp::prep_tls_pwbuf): Drop declaration.
- (pwdgrp::prep_tls_grbuf): Drop declaration.
- (pwdgrp::add_user_from_cygserver): New inline methods.
- (pwdgrp::add_group_from_cygserver): New inline methods.
- * tlsoffsets.h: Regenerate.
- * tlsoffsets64.h: Regenerate.
- * uinfo.cc (internal_getlogin): Call internal_getgroups if cygserver
- caching is not available.
- (cygheap_pwdgrp::init): Initialize pwd_cache.cygserver and
- grp_cache.cygserver. Set caching to true.
- (cygheap_pwdgrp::nss_init_line): Drop db_cache handling entirely.
- (pwdgrp::add_account_from_windows): Drop no caching handling.
- (client_request_pwdgrp::client_request_pwdgrp): New method.
- (pwdgrp::fetch_account_from_cygserver): New method.
- (pwdgrp::add_account_from_cygserver): New method.
-
- * fhandler_disk_file.cc (fhandler_base::fstat_helper): Fix formatting.
- * include/sys/cygwin.h: Ditto.
-
-2014-03-12 Corinna Vinschen <corinna@vinschen.de>
-
- * uinfo.cc (pwdgrp::fetch_account_from_windows): Avoid crash on
- non-domain member machines if an unknown SID comes in.
-
-2014-03-12 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/socket.h (IPV6_JOIN_GROUP): Revert.
- (IPV6_LEAVE_GROUP): Ditto.
-
-2014-03-10 Christopher Faylor <me.cygwin2014@cgf.cx>
-
- * fhandler.h (dev_console::b): Redefine as CONSOLE_SCREEN_BUFFER_INFO
- for use with older OS.
- * fhandler_console.cc (dev_console::fillin): Ditto for
- GetConsoleScreenBufferInfo.
-
-2014-03-10 Christopher Faylor <me.cygwin2014@cgf.cx>
-
- * fhandler_console.cc (dev_console::save_restore): Save entire line of
- current cursor position.
-
-2014-03-09 Christopher Faylor <me.cygwin2014@cgf.cx>
-
- * fhandler_console.cc (fhandler_console::save_restore): Save only until
- last written row and, because of this, don't bother trying to restore
- the screen buffer size. Set cursor position after refilling buffer.
- (fhandler_console::write): Use absolute paths when saving/restoring
- cursor position or suffer odd problems after a saved screen is
- restored.
-
-2014-03-09 Christopher Faylor <me.cygwin2014@cgf.cx>
-
- * fhandler.h (fhandler_console::dwBufferSize): Delete.
- (fhandler_console::dwCursorPosition): Ditto.
- (fhandler_console::wAttributes): Ditto.
- (fhandler_console::b): New field encompassing previously disparate
- screen buffer info.
- (fhandler_console::save_bufsize): Rename from savebufsiz
- (fhandler_console::save_buf): Rename sfrom savebuf.
- (fhandler_console::save_cursor): New field.
- (fhandler_console::save_restore): New function.
- (fhandler_console::con): Rename from dev_state.
- (fhandler_console::focus_aware): Accommodate name change.
- * fhandler_console.cc: Use 'b' field of dev_console throughout instead
- of disparate names. Accommodate dev_state -> con rename.
- (dev_state:save_restore): New function. Attempt to save the entire
- screen buffer rather than just the visible part. Clear the buffer when
- saving, like Linux.
- (fhandler_console::char_command): Use con.save_restore() for
- Save/restore screen sequence.
-
-2014-03-09 Christopher Faylor <me.cygwin2014@cgf.cx>
-
- * sigproc.cc (_cygtls::remove_wq): Reset thread_ev inside of lock. Set
- to NULL when done.
-
-2014-03-09 Christopher Faylor <me.cygwin2014@cgf.cx>
-
- * fhandler_console.cc (fhandler_console::char_command): Properly use
- calculated value rather than directly using dev_state.args[0].
-
-2014-03-09 Christopher Faylor <me.cygwin2014@cgf.cx>
-
- * dir.cc (opendir): Propagate any errno from build_fh_name.
-
-2014-03-07 Corinna Vinschen <corinna@vinschen.de>
-
- * pwdgrp.h (pwdgrp::is_passwd): New inline method.
- (pwdgrp::is_group): New inline method.
- (add_account_from_windows): Drop group argument from declaration.
- (fetch_account_from_windows): Ditto.
- (check_file): Ditto.
- (add_user_from_windows): Call add_account_from_windows accordingly.
- (add_group_from_windows): Ditto.
- * uinfo.cc (pwdgrp::add_account_from_windows): Drop group argument.
- Use is_group method instead.
- (pwdgrp::check_file): Ditto.
- (pwdgrp::fetch_account_from_windows): Ditto.
- * grp.cc: Accommodate aforementioned changes.
- * passwd.cc: Ditto.
-
-2014-03-06 Corinna Vinschen <corinna@vinschen.de>
-
- * passwd.cc (pg_ent::enumerate_builtin): Convert pwd_builtins and
- grp_builtins to array of cygpsid pointers. Replace SID strings with
- pointers to well known SIDs.
- * sec_helper.cc (well_known_local_service_sid): Define.
- (well_known_network_service_sid): Define.
- (trusted_installer_sid): Define.
- * security.h (well_known_local_service_sid): Declare.
- (well_known_network_service_sid): Declare.
- (trusted_installer_sid): Declare.
- * uinfo.cc (pwdgrp::fetch_account_from_windows): Throughout set acc_type
- to SidTypeUnknown if LookupAccountXXX function failed. Create
- simplified passwd entry for non-user accounts, except for LocalSystem.
- Add comment.
-
-2014-03-06 Corinna Vinschen <corinna@vinschen.de>
-
- * setlsapwd.cc (setlsapwd): Use RtlSecureZeroMemory to delete password
- from memory.
-
-2014-03-05 Corinna Vinschen <corinna@vinschen.de>
-
- * ldap.cc (rediscover_thread): Remove.
- (cyg_ldap::open): Remove code to rediscover DC. It just won't do the
- right thing.
- (cyg_ldap::enumerate_ad_accounts): Change to be self-sufficient (no
- explicit open call required). Enumerate on a DC of the domain itself
- instead of relying on delegation. Remove ill-advised code trying to
- generate rootdse from domain name.
- * passwd.cc (pg_ent::enumerate_ad): Drop explicit call to
- cyg_ldap::open.
-
-2014-03-05 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/config.h (__TM_GMTOFF): Define.
- (__TM_ZONE): Define.
-
-2014-03-05 Corinna Vinschen <corinna@vinschen.de>
-
- * localtime.cc: Define TM_GMTOFF and TM_ZONE based on __TM_GMTOFF and
- __TM_ZONE being defined. Throughout, write to these struct tm members
- only if CYGWIN_VERSION_CHECK_FOR_EXTRA_TM_MEMBERS is true.
- * libc/strptime.cc: Ditto.
- * include/cygwin/version.h (CYGWIN_VERSION_CHECK_FOR_EXTRA_TM_MEMBERS):
- Define.
- (CYGWIN_VERSION_API_MINOR): Bump to 272.
-
-2014-03-04 Corinna Vinschen <corinna@vinschen.de>
-
- * exception.h (exception::handler_installed): Remove.
- (exception::exception): Remove old code. Manually install SEH handler
- instead.
- (exception::~exception): For x86_64, define frame end label.
- * exceptions.cc (exception::handler_installed): Remove.
-
-2014-03-03 Corinna Vinschen <corinna@vinschen.de>
-
- * exception.h (exception::exception): Install vectored exception
- handler rather than vectored continue handler.
-
-2014-03-03 Corinna Vinschen <corinna@vinschen.de>
-
- * sec_helper.cc (cygpsid::get_id): Move Samba SID->uid/gid mapping
- from get_sids_info here.
- (get_sids_info): Vice versa.
- * security.cc (convert_samba_sd): New static function to map a Samba
- security descriptor to a security descriptor with UNIX users and groups
- converted to Windows SIDs per RFC 2307 mapping.
- (check_file_access): Call convert_samba_sd on Samba security
- descriptors.
-
-2014-02-28 Corinna Vinschen <corinna@vinschen.de>
-
- * uinfo.cc (pwdgrp::fetch_account_from_windows): Only fetch extended
- user info if we're creating a passwd entry. Add comment.
-
-2014-02-28 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.h (cygheap_user::sid): Return reference to cygpsid rather
- than PSID.
- (cygheap_user::saved_sid): Ditto.
- (cygheap_pwdgrp::cache_t): New type.
- (cygheap_pwdgrp::caching): Convert to cache_t.
- (cygheap_pwdgrp::nss_db_caching): Change accordingly.
- (cygheap_pwdgrp::nss_db_full_caching): New inline method.
- * grp.cc (internal_getgroups): Reinvent. Take cyg_ldap pointer as
- third parameter and use throughout.
- (getgroups32): Call internal_getgroups.
- * pwdgrp.h (internal_getgroups): Declare.
- * uinfo.cc (internal_getlogin): Partial rewrite to accommodate having
- no connection to the DC. Give primary group from user token more
- weight. Generate group entries for all groups in the user token if
- caching is set to NSS_FULL_CACHING.
- (cygheap_pwdgrp::init): Initialize caching to NSS_FULL_CACHING.
- (cygheap_pwdgrp::nss_init_line): Handle "db_cache: full".
- (pwdgrp::add_account_from_windows): Fix group handling in non-caching
- mode.
- (pwdgrp::fetch_account_from_windows): Default primary group for the
- current user to primary group from user token. Check for primary
- domain first after LookupAccountSid failed.
-
-2014-02-27 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (CheckTokenMembership): Import.
- * external.cc (cygwin_internal): Call get_uid/get_gid instead of get_id.
- * grp.cc (internal_getgrsid): Take additional cyg_ldap pointer.
- Forward to pwdgrp::add_group_from_windows.
- (internal_getgrnam): Ditto.
- (internal_getgrgid): Ditto.
- (gr_ent::enumerate_local): Drop ugid_caching bool from call to
- pwdgrp::fetch_account_from_windows.
- (getgroups32): Rename from internal_getgroups and drop getgroups32 stub.
- Drop srchsid parameter and code handling it. Add local cyg_ldap
- instance and forward to internal_getgrXXX.
- (getgroups): Call getgroups32.
- (get_groups): Add local cyg_ldap instance and forward to
- internal_getgrXXX.
- (getgrouplist): Ditto.
- (setgroups32): Ditto.
- * ldap.cc (cyg_ldap::open): Don't call close. Return true if connection
- is already open.
- (cyg_ldap::remap_uid): Forward this to internal_getpwsid.
- (cyg_ldap::remap_gid): Forward this to internal_getgrsid.
- * passwd.cc (internal_getpwsid): Take additional cyg_ldap pointer.
- Forward to pwdgrp::add_user_from_windows.
- (internal_getpwnam): Ditto.
- (internal_getpwuid): Ditto.
- (pg_ent::enumerate_builtin): Drop ugid_caching bool from call to
- pwdgrp::fetch_account_from_windows.
- (pg_ent::enumerate_sam): Ditto.
- (pg_ent::enumerate_ad): Ditto. Forward local cldap instead.
- * pwdgrp.h (internal_getpwsid): Align declaration to above change.
- (internal_getpwnam): Ditto.
- (internal_getpwuid): Ditto.
- (internal_getgrsid): Ditto.
- (internal_getgrgid): Ditto.
- (internal_getgrnam): Ditto.
- (internal_getgroups): Drop declaration.
- (pwdgrp::add_account_from_windows): Align declaration to below change.
- (pwdgrp::add_user_from_windows): Ditto.
- (pwdgrp::add_group_from_windows): Ditto.
- * sec_acl.cc (setacl): Add local cyg_ldap instance and forward to
- internal_getpwuid and internal_getgrgid.
- (getacl): Add local cyg_ldap instance and forward to cygpsid::get_id.
- (aclfromtext32): Add local cyg_ldap instance and forward to
- internal_getpwnam and internal_getgrnam.
- * sec_helper.cc (cygpsid::get_id): Take additional cyg_ldap pointer.
- Forward to internal_getgrsid and internal_getpwsid.
- (get_sids_info): Drop ldap_open. Forward local cldap to
- internal_getpwsid and internal_getgrXXX. Call CheckTokenMembership
- rather than internal_getgroups.
- * security.h (cygpsid::get_id): Add cyg_ldap pointer, drop default
- parameter.
- (cygpsid::get_uid): Add cyg_ldap pointer. Call get_id accordingly.
- (cygpsid::get_gid): Ditto.
- * uinfo.cc (internal_getlogin): Add local cyg_ldap instance and forward
- to internal_getpwXXX and internal_getgrXXX calls.
- (pwdgrp::add_account_from_windows): Take additional cyg_ldap pointer.
- Forward to pwdgrp::fetch_account_from_windows.
- (fetch_posix_offset): Drop ldap_open argument and handling. Get
- cyg_ldap instance as pointer.
- (pwdgrp::fetch_account_from_windows): Take additional cyg_ldap pointer.
- Use it if it's not NULL, local instance otherwise. Drop ldap_open.
- Drop fetching extended group arguments from AD for speed.
-
-2014-02-27 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (find_fast_cwd_pointer): Fix preceeding comment.
-
-2014-02-25 Christopher Faylor <me.cygwin2014@cgf.cx>
-
- * fhandler.h (fhandler_console::scroll_buffer_screen): New function.
- * fhandler_console.cc (fhandler_console::scroll_buffer_screen): New function.
- (fhandler_console::char_command): Use scroll_buffer_screen as appropriate.
- (dev_console::scroll_buffer): Remove if 0'ed block.
-
-2014-02-22 Christopher Faylor <me.cygwin2014@cgf.cx>
-
- * dev_console::scroll_buffer): Reinstate clipping region.
-
-2014-02-22 Christopher Faylor <me.cygwin2014@cgf.cx>
-
- * fhandler.h (dev_console::is_fullscreen): Delete.
- (dev_console::scroll_window): Return bool indicating success.
- (dev_console::scroll_screen): New function.
- (dev_console::clear_screen): New function.
- (fhandler_console::clear_screen): Make __reg3.
- (fhandler_console::cursor_set): Ditto.
- (fhandler_console::cursor_get): Ditto.
- (fhandler_console::cursor_rel): Ditto.
- * fhandler_console.cc (dev_console::scroll_buffer): Adapt from
- fhandler_console.
- (fhandler_console::scroll_buffer): Use dev_console function.
- (dev_console::is_fullscreen): Delete.
- (dev_console::scroll_window): Return true if we cleared the screen.
- Shrink/grow buffer first before scrolling to ensure that there is
- sufficient space after scrolling.
- (fhandler_console::clear_screen): Make reg3, use dev_console function.
- (dev_console::clear_screen): New function adapted from
- fhandler_console.
- (fhandler_console::cursor_set): Make __reg3.
- (fhandler_console::cursor_rel): Ditto.
- (fhandler_console::cursor_get): Ditto.
- (fhandler_console::write): Fix "reverse index".
-
-2014-02-22 Corinna Vinschen <corinna@vinschen.de>
-
- * external.cc (cygwin_internal): Add cases for CW_GETNSSSEP,
- CW_GETPWSID and CW_GETGRSID.
- * grp.cc (internal_getgrsid_from_db): New function.
- * passwd.cc (internal_getpwsid_from_db): New function.
- (pg_ent::setent): Add special case for call from mkpasswd/mkgroup.
- * pwdgrp.h (internal_getpwsid_from_db): Declare.
- (internal_getgrsid_from_db): Declare.
- (enum nss_enum_t): Move to include/sys/cygwin.h.
- (class pg_ent): Add comment.
- * uinfo.cc (pwdgrp::fetch_account_from_windows): Fix typo in comment.
- Change "UNIX" to "Unix" in domain name.
- * include/sys/cygwin.h (cygwin_getinfo_types): Add CW_GETNSSSEP,
- CW_GETPWSID and CW_GETGRSID.
- (enum nss_enum_t): Define here.
-
-2014-02-21 Corinna Vinschen <corinna@vinschen.de>
-
- * pwdgrp.h (pwdgrp::fetch_account_from_windows): Add bool parameter
- to declaration, set to true by default.
- * uinfo.cc (pwdgrp::fetch_account_from_windows): Add bool parameter
- "ugid_caching". Only add account to ugid_cache if set to true.
- * grp.cc (gr_ent::enumerate_local): Call fetch_account_from_windows
- with ugid_caching parameter set to false.
- * passwd.cc (pg_ent::enumerate_builtin): Ditto.
- (pg_ent::enumerate_sam): Ditto.
- (pg_ent::enumerate_ad): Ditto.
-
-2014-02-20 Corinna Vinschen <corinna@vinschen.de>
-
- * grp.cc (getgrouplist): Fix previous fix so ret is only set to ngroups
- if ngroups isn't too small.
-
-2014-02-20 Corinna Vinschen <corinna@vinschen.de>
-
- * grp.cc (get_groups): Don't add gid to list if it's ILLEGAL_GID.
- (getgrouplist): Return number of groups, just like glibc.
-
-2014-02-19 Corinna Vinschen <corinna@vinschen.de>
-
- * passwd.cc (pg_ent::setent): Initialize cygheap domain info.
- * sec_auth.cc (get_logon_server): Ditto.
-
-2014-02-18 Corinna Vinschen <corinna@vinschen.de>
-
- * external.cc (cygwin_internal): Handle new CW_SETENT, CW_GETENT and
- CW_ENDENT info types.
- * grp.cc (setgrent_filtered): New function, called from cygwin_internal.
- (getgrent_filtered): Ditto.
- (endgrent_filtered): Ditto.
- * passwd.cc (pg_ent::setent): Set state explicitely to from_cache.
- (pg_ent::getent): Handle the fact that a DC has no SAM and enumerating
- local accounts is equivalent to enumerating domain accounts.
- (setpwent_filtered): New function, called from cygwin_internal.
- (getpwent_filtered): Ditto.
- (endpwent_filtered): Ditto.
- * pwdgrp.h (setpwent_filtered): Declare.
- (getgrent_filtered): Ditto.
- (endgrent_filtered): Ditto.
- (setpwent_filtered): Ditto.
- (getpwent_filtered): Ditto.
- (endpwent_filtered): Ditto.
- * include/sys/cygwin.h (cygwin_getinfo_types): Add CW_SETENT, CW_GETENT,
- and CW_ENDENT.
-
-2014-02-18 Corinna Vinschen <corinna@vinschen.de>
-
- * setlsapwd.cc (setlsapwd): Fix conditional expression after breaking
- it on 2014-01-23.
-
-2014-02-17 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (ldap_abandon): Import.
- (ldap_result): Import.
- (ldap_searchW): Import.
- (NetGroupEnum): Import.
- (NetLocalGroupEnum): Import.
- (NetUserEnum): Import.
- * cygheap.h (class cygheap_pwdgrp): Add members enums and enum_tdoms.
- (cygheap_pwdgrp::nss_db_enums): New inline method.
- (cygheap_pwdgrp::nss_db_enum_tdoms): Ditto.
- * cygtls.h (struct _local_storage): Drop unused members pw_pos and
- grp_pos.
- * grp.cc (grent): New static variable of class gr_ent.
- (gr_ent::enumerate_caches): New method.
- (gr_ent::enumerate_local): New method.
- (gr_ent::getgrent): New method.
- (setgrent): Call gr_ent method.
- (getgrent32): Ditto.
- (endgrent): Ditto.
- * ldap.cc (sid_attr): Rename from nfs_attr.
- (cyg_ldap::close): Abandon still running asynchronous search.
- (cyg_ldap::fetch_ad_account): Reduce filter buffer size.
- (cyg_ldap::enumerate_ad_accounts): New method.
- (cyg_ldap::next_account): New method.
- (cyg_ldap::fetch_posix_offset_for_domain): Reduce filter buffer size.
- (cyg_ldap::fetch_unix_sid_from_ad): Ditto. Fix return value in case
- no value has been read.
- (cyg_ldap::fetch_unix_name_from_rfc2307): Reduce filter buffer size.
- * ldap.h (class cyg_ldap): Add msg_id member.
- (cyg_ldap::enumerate_ad_accounts): Declare.
- (cyg_ldap::next_account): Declare:
- * passwd.cc (pwent): New static variable of class pw_ent.
- (pg_ent::clear_cache): New method.
- (pg_ent::setent): New method.
- (pg_ent::getent): New method.
- (pg_ent::endent): New method.
- (pg_ent::enumerate_file): New method.
- (pg_ent::enumerate_builtin): New method.
- (pg_ent::enumerate_sam): New method.
- (pg_ent::enumerate_ad): New method.
- (pw_ent::enumerate_caches): New method.
- (pw_ent::enumerate_local): New method.
- (pw_ent::getpwent): New method.
- (setpwent): Call pw_ent method.
- (getpwent): Ditto.
- (endpwent): Ditto.
- * pwdgrp.h (class pwdgrp): Define pg_ent, pw_ent and gr_ent as friend
- classes.
- (pwdgrp::add_account_post_fetch): Declare with extra bool parameter.
- (pwdgrp::file_attr): New inline method.
- (enum nss_enum_t): Define.
- (class pg_ent): Define.
- (class pw_ent): Define.
- (class gr_ent): Define.
- * tlsoffsets.h: Regenerate.
- * tlsoffsets64.h: Ditto.
- * uinfo.cc (cygheap_pwdgrp::init): Initialize enums and enum_tdoms.
- (cygheap_pwdgrp::nss_init_line): Fix typo in preceeding comment.
- Handle new "db_enum" keyword.
- (pwdgrp::add_account_post_fetch): Take additional `bool lock' parameter
- and acquire pglock before adding element to array if lock is true.
- (pwdgrp::add_account_from_file): Call add_account_post_fetch with lock
- set to true.
- (pwdgrp::add_account_from_windows): Ditto in case of caching.
- (pwdgrp::fetch_account_from_windows): Handle builtin aliases only
- known to the domain controller. Only call NetLocalGroupGetInfo for
- aliases.
-
-2014-02-16 Corinna Vinschen <corinna@vinschen.de>
-
- * miscfuncs.h (NT_readline::close): New function to close handle.
- (NT_readline::~NT_readline): Call close.
- * sec_auth.cc (verify_token): Use constructor to initialize tok_usersid.
- * security.h (cygsid::cygsid): Add copy constructor taking cygsid as
- source.
-
-2014-02-16 Corinna Vinschen <corinna@vinschen.de>
-
- * dcrt0.cc (dll_crt0_1): Call initial_setlocale before fetching
- current user information.
-
-2014-02-15 Christopher Faylor <me.cygwin2014@cgf.cx>
-
- * DevNotes: Add entry cgf-000024.
- * fhandler.h (dev_console::state): Remove trailing underscore.
- (dev_console::args): Ditto.
- (dev_console::nargs): Ditto.
- (dev_console::info): Eliminate subclass.
- (dev_console::dwEnd): New field.
- (dev_console::scroll_window): New function.
- (dev_console::is_fullscreen): Ditto.
- (dev_console::fillin): Rename from fillin_info.
- (fhandler_console::scroll_buffer): Rename from scroll_screen.
- * fhandler_console.cc: Throughout s/dev_state\.info/dev_state/g.
- Accommodate other name changes.
- (dev_console::fillin): Accommodate rename. Notice max x/y written to.
- Forgo memset if GetConsoleScreenBufferInfo fails.
- (fhandler_console::scroll_buffer): Accommodate rename. Don't treat y
- coordinate of zero as top of screen.
- (dev_console::is_fullscreen): New function.
- (dev_console::scroll_window): Ditto.
- (fhandler_console::clear_screen): Just scroll the screen when clearing
- the screen in a state where the screen buffer is bigger than the
- screen.
- (fhandler_console::char_command): Try harder to get 'S' and 'T' working
- in the presence of a screen buffer. Use temporary 'n' variable rather
- than dev_state.args[0]. Use GNU ?: shortcut method.
-
-2014-02-14 Christopher Faylor <me.cygwin2014@cgf.cx>
-
- * pinfo.cc (winpids::add): Always copy pinfo structure when winpid.
- Fill out dwProcessId explicitly to handle exec from a windows process.
- (winpids::enum_processes): Reorganize to iterate over known cygwin pids
- when !winpid. Simplify logic. Don't do duplicate detection for
- winpid.
-
-2014-02-14 Corinna Vinschen <corinna@vinschen.de>
-
- * uinfo.cc (pwdgrp::fetch_account_from_windows): Default to /bin/bash
- as login shell.
-
-2014-02-13 Corinna Vinschen <corinna@vinschen.de>
-
- * ldap.cc (cyg_ldap::fetch_posix_offset_for_domain): If domain name
- has no dot, it's a Netbios name. Change the search filter expression
- accordingly and filter by flatName. Add comment.
- * uinfo.cc (cygheap_domain_info::init): Gracefully handle NULL
- DnsDomainName and DomainSid members in DS_DOMAIN_TRUSTSW structure.
- Add comment. Fix comment preceeding fetching the mapping server
- from registry.
- (pwdgrp::fetch_account_from_file): Convert str to a local array.
- (fetch_posix_offset): New static function.
- (pwdgrp::fetch_account_from_windows): Add debug output in case
- LookupAccountSidW fails. Simplify code by calling fetch_posix_offset
- where appropriate. If LookupAccountSidW fails, check if the SID is
- one of the known trusted domains. If so, create a more informative
- account entry.
-
-2014-02-12 Corinna Vinschen <corinna@vinschen.de>
-
- * uinfo.cc (cygheap_pwdgrp::nss_init_line): Explicitely ignore a colon
- as separator char.
-
-2014-02-11 Christopher Faylor <me.cygwin2014@cgf.cx>
-
- * winsup.h: Turn off previous workaround but leave a comment.
-
-2014-02-11 Corinna Vinschen <corinna@vinschen.de>
-
- * ldap.cc (rediscover_thread): Give argument a useful name.
- * miscfuncs.cc (NT_readline::init): It's a really bad idea trying to
- print a pointer to a PUNICODE_STRING as PUNICODE_STRING. Fix it.
- * uinfo.cc (cygheap_domain_info::init): Print status codes as hex
- values in debug output.
-
-2014-02-11 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (NetLocalGroupGetInfo): Replace NetGroupGetInfo.
- * cygheap.h (class cygheap_ugid_cache): Move ugid_cache_t type here
- and rename.
- (struct init_cygheap): Add cygheap_ugid_cache member "ugid_cache".
- * pwdgrp.h (class ugid_cache_t): Remove here.
- * fhandler_disk_file.cc (fhandler_base::fstat_by_nfs_ea): Accommodate
- move of ugid_cache to cygheap.
- * sec_helper.cc (get_sids_info): Ditto.
- * uinfo.cc (ugid_cache): Remove.
- (pwdgrp::fetch_account_from_windows): Define id_val globally.
- Move SidTypeAlias handling into SidTypeUser/SidTypeGroup branch since
- aliases are handled like groups in SAM. Accommodate move of ugid_cache
- to cygheap. Consolidate code reading SAM comments into a single branch
- for both, SidTypeUser and SidTypeAlias. For SidTypeAlias, fix thinko
- and call NetLocalGroupGetInfo rather than NetGroupGetInfo. Simplify
- code setting Cygwin primary group for SAM accounts. Add code to handle
- UNIX uid/gid from SAM comment.
-
-2014-02-11 Christopher Faylor <me.cygwin2014@cgf.cx>
-
- * winsup.h (Interlocked*): Use intrinsic versions of Interlocked
- functions.
-
- * cygwin.sc.in: More closely emulate default pe/i386 linker script.
-
-2014-02-10 Corinna Vinschen <corinna@vinschen.de>
-
- * uinfo.cc (cygheap_domain_info::init): Drop accidentally leftover if
- statement.
-
-2014-02-10 Corinna Vinschen <corinna@vinschen.de>
-
- * uinfo.cc (cygheap_domain_info::init): Fix handling of account domain
- on donmain controllers. Explain why.
-
-2014-02-10 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.cc (cwcsdup): Change parameter to correct PWCSTR.
- (cwcsdup1): Ditto.
- * cygheap_malloc.h: Change declarations accordingly.
-
-2014-02-10 Corinna Vinschen <corinna@vinschen.de>
-
- * uinfo.cc (pwdgrp::fetch_account_from_windows): Add code to allow
- setting the primary group from the SAM comment field.
-
-2014-02-10 Corinna Vinschen <corinna@vinschen.de>
-
- * dcrt0.cc (child_info_spawn::handle_spawn): Call fixup_lockf_after_exec
- with additional argument to specify if the process has been execed
- or spawned.
- * flock.cc (fixup_lockf_after_exec): Take bool parameter to handle
- exec and spawn differently. In case of spawn, just give up POSIX
- locks in favor of the still running parent. Add comments to explain.
-
-2014-02-09 Christopher Faylor <me.cygwin2014@cgf.cx>
-
- * environ.cc (strbrk): Properly deal with environment variable sans
- quote.
-
-2014-02-09 Christopher Faylor <me.cygwin2014@cgf.cx>
-
- * environ.cc (strbrk): New function.
- (parse_options): Use strbrk to parse CYGWIN environment variable.
-
-2014-02-09 Corinna Vinschen <corinna@vinschen.de>
-
- Introduce reading passwd/group entries from SAM/AD. Introduce
- /etc/nsswitch.conf file to configure it.
- * Makefile.in (DLL_OFILES): Add ldap.o.
- * autoload.cc: Import ldap functions from wldap32.dll.
- (DsEnumerateDomainTrustsW): Import.
- (NetGroupGetInfo): Import.
- * cygheap.h (class cygheap_domain_info): New class to keep global
- domain info.
- (class cygheap_pwdgrp): New class to keep passwd/group caches and
- configuration info from /etc/nssswitch.conf.
- (struct init_cygheap): Add cygheap_domain_info member "dom" and
- cygheap_pwdgrp member "pg".
- * cygtls.h (struct _local_storage): Remove unused member "res".
- Rearrange slightly, Add members pwbuf and grbuf to implement non-caching
- passwd/group fetching from SAM/AD. Make pw_pos and pw_pos unsigned.
- * fhandler_disk_file.cc (fhandler_base::fstat_by_nfs_ea): Add RFC 2307
- uid/gid mapping.
- * fhandler_process.cc: Drop including pwdgrp.h.
- * fhandler_procsysvipc.cc: Ditto.
- * fhandler_registry.cc (fhandler_registry::fstat): Set key uid/gid
- to ILLEGAL_UID/ILLEGAL_GID rather than UNKNOWN_UID/UNKNOWN_GID.
- * grp.cc (group_buf): Drop.
- (gr): Drop.
- (pwdgrp::parse_group): Fill pg_grp.
- (pwdgrp::read_group): Remove.
- (pwdgrp::init_grp): New method.
- (pwdgrp::prep_tls_grbuf): New method.
- (pwdgrp::find_group): New methods.
- (internal_getgrsid): Convert to call new pwdgrp methods.
- (internal_getgrnam): Ditto.
- (internal_getgrgid): Ditto.
- (getgrgid_r): Drop 2nd parameter from internal_getgrgid call.
- (getgrgid32): Ditto.
- (getgrnam_r): Ditto for internal_getgrnam.
- (getgrnam32): Ditto.
- (getgrent32): Convert to call new pwdgrp methods.
- (internal_getgrent): Remove.
- (internal_getgroups): Simplify, especially drop calls to
- internal_getgrent.
- * ldap.cc: New file implementing cyg_ldap class for LDAP access to AD
- and RFC 2307 server.
- * ldap.h: New header, declaring cyg_ldap class.
- * passwd.cc (passwd_buf): Drop.
- (pr): Drop.
- (pwdgrp::parse_passwd): Fill pg_pwd.
- (pwdgrp::read_passwd): Remove.
- (pwdgrp::init_pwd): New method.
- (pwdgrp::prep_tls_pwbuf): New method.
- (find_user): New methods.
- (internal_getpwsid): Convert to call new pwdgrp methods.
- (internal_getpwnam): Ditto.
- (internal_getpwuid): Ditto.
- (getpwuid32): Drop 2nd parameter from internal_getpwuid call.
- (getpwuid_r): Ditto.
- (getpwnam): Ditto for internal_getpwnam.
- (getpwnam_r): Ditto.
- (getpwent): Convert to call new pwdgrp methods.
- * path.cc (class etc): Remove all methods.
- * path.h (class etc): Drop.
- * pinfo.cc (pinfo_basic::pinfo_basic): Set gid to ILLEGAL_GID rather
- than UNKNOWN_GID.
- (pinfo_init): Ditto.
- * pwdgrp.h (internal_getpwnam): Drop 2nd parameter from declaration.
- (internal_getpwuid): Ditto.
- (internal_getgrgid): Ditto.
- (internal_getgrnam): Ditto.
- (internal_getgrent): Drop declaration.
- (enum fetch_user_arg_type_t): New type.
- (struct fetch_user_arg_t): New type.
- (struct pg_pwd): New type.
- (struct pg_grp): New type.
- (class pwdgrp): Rework to provide functions for file and db requests
- and caching.
- (class ugid_cache_t): New class to provide RFC 2307 uid map caching.
- (ugid_cache): Declare.
- * sec_acl.cc: Drop including pwdgrp.h.
- * sec_auth.cc: Drop including dsgetdc.h and pwdgrp.h.
- (get_logon_server): Convert third parameter to ULONG flags argument
- to allow arbitrary flags values in DsGetDcNameW call and change calls
- to this function throughout. Use cached account domain name rather
- than calling GetComputerNameW.
- (get_unix_group_sidlist): Remove.
- (get_server_groups): Drop call to get_unix_group_sidlist.
- (verify_token): Rework token group check without calling
- internal_getgrent.
- * sec_helper.cc (cygpsid::pstring): New methods, like string() but
- return pointer to end of string.
- (cygsid::getfromstr): Add wide character implementation.
- (get_sids_info): Add RFC 2307 uid/gid mapping for Samba shares.
- * security.cc: Drop including pwdgrp.h.
- * security.h (DEFAULT_UID): Remove.
- (UNKNOWN_UID): Remove.
- (UNKNOWN_GID): Remove.
- (uinfo_init): Move here from winsup.h.
- (ILLEGAL_UID): Ditto.
- (ILLEGAL_GID): Ditto.
- (UNIX_POSIX_OFFSET): Define. Add lengthy comment.
- (UNIX_POSIX_MASK): Ditto.
- (MAP_UNIX_TO_CYGWIN_ID): Ditto.
- (ILLEGAL_UID16): Move here from winsup.h.
- (ILLEGAL_GID16): Ditto.
- (uid16touid32): Ditto.
- (gid16togid32): Ditto.
- (sid_id_auth): New convenience macro for SID component access.
- (sid_sub_auth_count): Ditto.
- (sid_sub_auth): Ditto.
- (sid_sub_auth_rid): Ditto.
- (cygpsid::pstring): Declare.
- (cygsid::getfromstr): Declare wide character variant.
- (cygsid::operator=): Ditto.
- (cygsid::operator*=): Ditto.
- (get_logon_server): Change declaration according to source code.
- * setlsapwd.cc (setlsapwd): Drop 2nd parameter from internal_getpwnam
- call.
- * shared.cc (memory_init): Call cygheap->pg.init in first process.
- * syscalls.cc: Drop including pwdgrp.h.
- * tlsoffsets.h: Regenerate.
- * tlsoffsets64.h: Ditto.
- * uinfo.cc (internal_getlogin): Drop gratuitious internal_getpwuid
- call. Fix debug output. Overwrite user gid in border case of a
- missing passwd file while a group file exists.
- (pwdgrp::add_line): Allocate memory on cygheap.
- (pwdgrp::load): Remove.
- (ugid_cache): Define.
- (cygheap_pwdgrp::init): New method.
- (cygheap_pwdgrp::nss_init_line): New method.
- (cygheap_pwdgrp::_nss_init): New method.
- (cygheap_domain_info::init): New method.
- (logon_sid): Define.
- (get_logon_sid): New function.
- (pwdgrp::add_account_post_fetch): New method.
- (pwdgrp::add_account_from_file): New methods.
- (pwdgrp::add_account_from_windows): New methods.
- (pwdgrp::check_file): New method.
- (pwdgrp::fetch_account_from_line): New method.
- (pwdgrp::fetch_account_from_file): New method.
- (pwdgrp::fetch_account_from_windows): New method.
- * winsup.h: Move aforementioned macros and declarations to security.h.
-
-2014-02-09 Christopher Faylor <me.cygwin2014@cgf.cx>
-
- * sigproc.cc (sig_send): Don't bother with an error message if we are
- exiting.
-
-2014-02-08 Corinna Vinschen <corinna@vinschen.de>
-
- * miscfuncs.h (class NT_readline): New class to implement line-wise
- reading from file using native NT functions.
- * miscfuncs.cc (NT_readline::init): New method.
- (NT_readline::fgets): New method.
- * mount.cc (mount_info::from_fstab): Utilize NT_readline to read
- fstab files.
-
-2014-02-06 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::fchown): Fix typo in
- comment.
- * mount.cc (mount_info::from_fstab): Use tmp_pathbuf rather than
- stack for big local buffer.
- * net.cc (cygwin_gethostname): Call GetComputerNameExA rather than
- GetComputerNameA if gethostname failed.
- * shared.cc (user_info::initialize): Fix formatting.
-
-2014-02-06 Corinna Vinschen <corinna@vinschen.de>
-
- * include/sys/file.h: Define flock and accompanying macros if not
- already defined in sys/_default_fcntl.h.
-
-2014-02-04 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/version.h (CYGWIN_VERSION_DLL_MINOR): Bump to 29.
-
-2014-01-30 Corinna Vinschen <corinna@vinschen.de>
-
- * dir.cc (opendir): Call set_unique_id only with valid fh.
-
-2014-01-30 Christopher Faylor <me.cygwin2014@cgf.cx>
-
- * fhandler.h (cltype): Add cl_buf_beg, cl_buf_end.
- * fhandler_console.cc (dev_console::console_attrs::set_cl_x): Honor
- buffer locations.
- (dev_console::console_attrs::set_cl_y): Ditto.
- (fhandler_console::write): On reset, use absolute positioning to go to
- beginning of buffer. Clear entire buffer.
-
-2014-01-27 Christopher Faylor <me.cygwin2014@cgf.cx>
-
- * gendef (_setjmp (x86)): Save FPU control word location in sequential
- location. Adjust sigstack save accordingly.
- (_longjmp (x86)): Ditto for restore.
-
-2014-01-27 Corinna Vinschen <corinna@vinschen.de>
-
- * gendef (sigdelayed (x86_64)): Save and restore FPU control word.
- (_sigdelayed (x86)): Ditto. Save and restore XMM registers. Add
- comment.
- (_setjmp (x86)): Save FPU control word, following FreeBSD here.
- (_longjmp (x86)): Restore FPU control word.
-
-2014-01-24 Christopher Faylor <me.cygwin2014@cgf.cx>
-
- * winf.cc (linebuf::fromargv): Treat '=' as a special character.
-
-2014-01-23 Corinna Vinschen <corinna@vinschen.de>
-
- * security.h (open_local_policy): Remove declaration.
- (lsa_open_policy): Declare.
- (lsa_close_policy): Declare.
- * sec_auth.cc (lsa_open_policy): Rename from open_local_policy. Take
- server name as parameter. Return NULL in case of error, rather than
- INVALID_HANDLE_VALUE.
- (lsa_close_policy): Rename from close_local_policy. Make externally
- available. Get handle by value.
- (create_token): Convert call to open_local_policy/close_local_policy
- according to aforementioned changes.
- (lsaauth): Ditto.
- (lsaprivkeyauth): Ditto.
- * setlsapwd.cc (setlsapwd): Ditto.
-
-2014-01-22 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (etc::test_file_change): In case of NtQueryFullAttributesFile
- returning an error, only return true if file actually exists.
-
-2014-01-20 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/in6.h (struct ipv6_rt_hdr): Define.
- * include/cygwin/socket.h: Fix formatting.
- (IP_UNICAST_IF): Define.
- (IPV6_JOIN_GROUP): Remove Windowism.
- (IPV6_LEAVE_GROUP): Ditto.
- (IPV6_UNICAST_IF): Define.
- (IPV6_TCLASS): Ditto.
- (IPV6_RECVTCLASS): Ditto.
-
-2014-01-18 Corinna Vinschen <corinna@vinschen.de>
-
- * include/netinet/ip6.h: New file, copied from FreeBSD vebatim.
-
-2014-01-17 Christopher Faylor <me.cygwin2014@cgf.cx>
-
- * dtable.h (dtable::lock): Revert static.
- (dtable::unlock): Ditto.
-
-2014-01-17 Corinna Vinschen <corinna@vinschen.de>
-
- * passwd.cc (setpassent): Align to BSD definition.
-
-2014-01-17 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (popen): Introduce Glibc 'e' flag to allow thread-safe
- opening of the pipe with O_CLOEXEC flag. Simplify FD_CLOEXEC handling.
-
-2014-01-17 Corinna Vinschen <corinna@vinschen.de>
-
- * include/sys/file.h (LOCK_SH): Drop definition in favor of new
- definitions in newlib.
- (LOCK_EX): Ditto.
- (LOCK_NB): Ditto.
- (LOCK_UN): Ditto.
- (flock): Ditto.
- (F_OK): Drop. Already correctly defined in unistd.h.
- (X_OK): Ditto.
- (W_OK): Ditto.
- (R_OK): Ditto.
-
-2014-01-17 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/config.h (_STDIO_BSD_SEMANTICS): Define as 1.
-
-2014-01-16 Christopher Faylor <me.cygwin2014@cgf.cx>
-
- * dtable.h (dtable::lock): Make static.
- (dtable::unlock): Ditto.
-
-2014-01-08 Christopher Faylor <me.cygwin2014@cgf.cx>
-
- * exception.h (cygwin_exception::open_stackdumpfile): Move old
- function into class.
- (cygwin_exception::h): New member.
- (cygwin_exception::cygwin_exception): Initialize h to NULL.
- * exceptions.cc (cygwin_exception::open_stackdumpfile): Move into
- cygwin_exception class. Use 'h' class member.
- (cygwin_exception::dumpstack): Close stack dump file handle if opened.
-
-2014-01-04 Christopher Faylor <me.cygwin2014@cgf.cx>
-
- * fhandler.h (cltype): New enum.
- (dev_console::console_attrs): Define struct name.
- (dev_console::console_attrs::set_cl_x): New function.
- (dev_console::console_attrs::set_cl_y): New function.
- (fhandler_console::clear_screen): Redefine input params.
- * fhandler_console.cc: Throughout, reflect change in arguments to
- fhandler_console::clear_screeen.
- (fhandler_console::mouse_aware): Simplify logic slightly.
- (fhandler_console::scroll_screen): Remove hopefully obsolete win95
- code.
- (dev_console::console_attrs::set_cl_x): New function.
- (dev_console::console_attrs::set_cl_y): New function.
- (fhandler_console::clear_screen): Redefine input params. Calculate
- position based on enum value.
- (region_split): Change arguments. Simplify.
- (ReadConsoleOutputWrapper): Remove coord argument since we now always
- use 0, 0. Send extra arguments to region_split.
diff --git a/winsup/cygwin/ChangeLog-1995 b/winsup/cygwin/ChangeLog-1995
deleted file mode 100644
index 43d28a3a1..000000000
--- a/winsup/cygwin/ChangeLog-1995
+++ /dev/null
@@ -1,177 +0,0 @@
-Mon Dec 18 16:44:38 1995 Jason Molenda (crash@phydeaux.cygnus.com)
-
- * configure.in (target_cpu): specify valid Intel x86 architectures
- explicitly.
-
-Mon Dec 18 15:04:29 1995 Jason Molenda (crash@phydeaux.cygnus.com)
-
- * sysdef/*.def: moved to sysdef/i386/.
-
-Mon Dec 18 15:00:56 1995 Jason Molenda (crash@phydeaux.cygnus.com)
-
- * configure.in: Set DLL_ENTRY and SYSDEF_DIR for i386 and powerpc.
- * configure: Regenerated with autoconf 2.7.
-
- * Makefile.in: Use DLL_ENTRY and SYSDEF_DIR.
-
-Sat Dec 16 18:36:44 1995 steve chamberlain <sac@slash.cygnus.com>
-
- Changed the way that file handles are inherited. Now
- all files are opened with the inheriting turned on, and they're
- closed when necessary.
-
- Changed the way that children are waited for. Now
- you can exec a non-gnuwin32 program and wait for its
- result.
-
- * Makefile.in: Turn off frame-pointer.
- * dcrt0.cc (environ_init): Lint.
- * dirsearch.cc (opendir): Use new path_conv mechanism.
- * exceptions.cc (ctrl_c_handler): Exit with correct status
- * exec.cc (file_exists): Moved to paths.cc
- (_execve): Moved most of the work into spawn.cc.
- * fhandler.cc (*): Much.
- * libccrt0.c (foo): Deleted.
- (cygwin_crt0): Lint.
- * path.cc (readlink): Initialize the SECURITY_ATTRIBUTES struct.
- * pipe.cc (pipe, dup*): Reorganized.
- * registry.cc (read_in): Create the key in CURRENT_USER.
- * wait.cc, spawn.cc (*): Much.
- * sysconf.cc (sysconf): Understand SC_PAGESIZE.
- * times.cc (utime): New function.
- * uname.cc (uname): Dig out more info.
-
-Wed Dec 13 05:54:55 1995 Michael Meissner <meissner@tiktok.cygnus.com>
-
- * dcrt0.cc (environ_init): Cast alloca return to appropriate type.
- * spawn.cc (spawn_guts): Ditto.
-
- * strace.cc (__small_{v,}sprintf): Add appropriate prototypes.
-
- * exceptions.cc (_except_list): Only use segments for 386 systems.
- (__stack_trace): Add PowerPC support, and do nothing for systems
- that are not supported except print stack tracing is not yet
- support.
-
- * sdata.cc (import_term): Only use __attribute__((section)) on 386
- systems.
-
- * shared.cc (shared_init): Use MARK macro instead of calling mark
- directly with incorrect type arguments.
-
- * fhandler.cc (fhandler_dev_null::{read,write}): Use size_t in
- prototype, not unsigned int.
-
- * fork.cc (find_exec): Fix type errors.
- * path.cc (path_to_real_path_keep_rel): Ditto.
- * syscalls.h (PATH_TO_REAL_PATH): Ditto.
-
- * {longjmp,setjmp}.c: #ifdef i386 code.
-
- * include/wintypes.h (ExitProcess): Add
- __attribute__((__noreturn__)) so exit compiles without warnings.
-
-Tue Dec 12 18:25:05 1995 Jason Molenda (crash@phydeaux.cygnus.com)
-
- * include/wintypes.h (WINAPI): Only define WINAPI for x86 systems.
-
-Tue Dec 5 16:00:05 1995 Jason Molenda (crash@phydeaux.cygnus.com)
-
- * Makefile.in (all): Only build documentation for info target.
- Expect texi2html to not be found most of the time.
-
-Tue Dec 5 08:08:08 1995 steve chamberlain <sac@slash.cygnus.com>
-
- Release-B10
-
- * cygwin.dll (__assert, wait, spawnv, spawnvp): Deleted.
- * dcrt0.c: Quoting rewritten.
- * exec.cc (file_exists): Use new path_conv mechanism.
- (_execve): Close open child process handles.
- * fhandler.cc (fhandler_normal::open): Follow symlinks.
- (fhandler_normal::read): Keep track of logical file posision.
- (fhandler_normal::lseek): Seek in text files correctly.
- (fhandler_normal::fstat): Set IFLNK bit if its a symlink.
- (fhandler_normal::init): Maintain is_pipe.
- (fhandler_dev_null::fstat): New.
- (fhandler_dev_null::get_handle): Return INVALID_HANDLE.
- * fork.cc: Use new event mechanism.
- * libccrt0.cc: Keep track of _fmode variable.
- * misc.c (readlink): Delete.
- * path.cc (__path_to_real_path_1): Allow /d<letter> mechanism.
- (path_to_real_path_keep_rel): New
- (link_cookie:*): Support for symbolic links.
- * spawn.cc (spawn_guts): Quoting rewritten.
- * times.cc: New.
- * syscalls.cc (_stat_worker): New.
- (_stat, _lstat): Use _stat_worker.
- * sysconf.cc (sysconf): Support _SC_CLK_TCK.
-
-Tue Nov 28 15:29:38 1995 steve chamberlain <sac@slash.cygnus.com>
-
- * loads of stuff. When I make < 100k of diffs in a day,
- the ChangeLog will be usefull.
-
-Tue Nov 21 18:01:39 1995 steve chamberlain <sac@slash.cygnus.com>
-
- * Makefile.in: Build the doc.
- * exceptions.cc: lint.
- * fork.cc: lint.
- * shared.cc (shared_init): If MapViewOfFileEx fails, then try
- again, but get the OS to select the address (for win95)
- * strace.cc (__sysprintf): Print pid and state in hex.
- * syscalls.cc (_unlink): Translate path to realpath.
-
-Wed Nov 15 23:47:43 1995 Jason Molenda (crash@phydeaux.cygnus.com)
-
- * spawn.cc (_exit): set return value's lower byte to 0 by default.
-
- Tue Oct 3 10:23:14 1995 Anders Blomdell (anders.blomdell@control.lth.se)
-
- * spawn.cc (spawn_guts): quote doublequotes correctly
-
-Tue Nov 14 15:05:33 1995 Jason Molenda (crash@phydeaux.cygnus.com)
-
- * configure.in: comment out call to cfg-ml-com.in.
-
-Tue Oct 31 11:19:18 1995 steve chamberlain <sac@slash.cygnus.com>
-
- * libcerr.cc: New file.
- * dcrt0.cc (environ_init): Initialize PATH and friends nicely.
- * exceptions.cc (ctrl_c_handler): Default case is to exit.
- * fork.cc (__suffixy, find_exec): translate between paths and
- real_paths.
- * shared.cc (shared_init): Hard wire shared memory at 0xa0000000.
- * syscalls.c (__path_to_real_path, real_path_to_path): Always
- translate '/' <> '\'
-
-Mon Oct 30 17:36:10 1995 steve chamberlain <sac@slash.cygnus.com>
-
- * syscalls.cc (_rename): Fix for win95.
-
-Fri Oct 27 20:53:47 1995 steve chamberlain <sac@slash.cygnus.com>
-
- * Everything changed.
-
-Thu Oct 19 10:47:52 1995 steve chamberlain <sac@slash.cygnus.com>
-
- * registry.cc, uinfo.cc: New files.
- * crt0.c (*uinfo*, *_exe_suffix*): Delete.
- (dll_crt0): Call shared_init.
- * getlogin.c: deleted.
- * shared.cc: Fill in.
- * spawn.c (_spawn): Use __exe_suffix function.
- * syscalls.c (getuid, getgid): Moved into uinfo.cc
- * syscalls.h (*uinfo, __exe_suffix): Deleted
- * Makefile.in: Cope with target configury.
- * termios.c: Fix stub prototypes.
- * win.h: Deleted.
- * include/winadvapi.h: Fill in some REG prototypes.
-
-Thu Oct 19 10:47:52 1995 steve chamberlain <sac@slash.cygnus.com>
-
- * Makefile.in: Cope with target configury.
-
-Wed Oct 18 15:34:49 1995 steve chamberlain <sac@slash.cygnus.com>
-
- * Moved from newlib.
diff --git a/winsup/cygwin/ChangeLog-1996 b/winsup/cygwin/ChangeLog-1996
deleted file mode 100644
index 9c786c408..000000000
--- a/winsup/cygwin/ChangeLog-1996
+++ /dev/null
@@ -1,2031 +0,0 @@
-Mon Dec 23 13:35:27 1996 Jeremy Allison <jra@cygnus.com>
-
- * Makefile.in: Added $(srcdir)/../libstdc++/stl -I$(srcdir)/../libio
- to the include path. As mmap uses STL then this is needed
- to build the cross compiler. Also added mmap.o file.
- * cygwin.din: Added mmap, mprotect, msync, munmap.
- * dcrt0.cc: Added code to get the module pathname from
- a previously unused field in the u area so fork() calls
- don't have to search the path. Forwards compatible with
- earlier releases as they set this field to zero.
- * fork.cc: Added call to recreate_mmaps_after_fork() in
- child code. Ensures child has same view of mmap'ed areas
- as parent.
- * libccrt0.cc: (See dcrt0.cc change). Setup the module
- handle so fork can get the path name.
- * mmap.cc: New file. Implements mmap, mprotect, msync, munmap,
- recreate_mmaps_after_fork. Uses STL.
- * select.cc: Added code to set errno to EINVAL if select done
- on handles and sockets. Must fix this soon.
- * spawn.cc: Set new variable hmodule in u area to zero for child.
- * syscalls.cc: Added fsync functionality. No longer a dummy call.
- * winsup.h: Decremented internal_reserved array by one to add
- hmodule in u area. Added prototype for recreate_mmaps_after_fork().
- * include/sys/mman.h: Fixed include file for mmap calls.
-
-Tue Dec 17 16:20:52 1996 Geoffrey Noer <noer@cygnus.com>
-
- * syscalls.cc (_rename): fix code so we really do
- return -1 if _rename fails.
-
-Tue Dec 17 12:12:29 1996 Jeremy Allison <jra@cygnus.com>
-
- * fhandler.cc: Added Sergeys patch for FakeReadFile.
- * cygwin.din: Re-ordered network calls.
-
-Mon Dec 16 16:47:26 1996 Geoffrey Noer <noer@cygnus.com>
-
- * configure.in: remove AC_C_CROSS (now part of AC_PROG_CC)
- * utils/configure.in: ditto
- * configure: regenerate
- * utils/configure: regenerate
-
-Mon Dec 16 14:50:46 1996 Geoffrey Noer <noer@cygnus.com>
-
- * cygwin.din: export cygwin32_getsockopt
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * spawn.cc: don't assume all scripts should be run in
- bash -- run the shell specified after the #!
-
-Fri Dec 13 16:18:22 1996 Jeremy Allison <jra@cygnus.com>
-
- * path.cc: Added support for UNC paths.
-
-Fri Dec 13 10:56:21 1996 Jeremy Allison <jra@cygnus.com>
-
- * cygwin.din: Added h_errno, seteuid, _seteuid.
- * exceptions.cc: Made init_exceptions extern "C".
- * exceptions.h: Added cplusplus wrappers to enable this to
- be used from C.
- * net.cc: Added error numbers, fixed gethostbyaddr, added h_errno
- fixes.
- * stubs.cc: Added seteuid.
- * include/mywinsock.h: Added HOST error entries for DNS lookups.
-
-Tue Dec 10 15:38:46 1996 Geoffrey Noer <noer@cygnus.com>
-
- * version.h: bump CYGWIN_DLL_VERSION_MINOR to 4
-
- patch from Marcus Daniels <marcus@sysc.pdx.edu>:
- * fhandler.cc: add fhandler_dev_null::dup (fhandler_base *child)
- * fhandler.h: add matching header
-
- gnu-win32 beta 17.1 release made
-
-Thu Dec 5 14:03:08 1996 Geoffrey Noer <noer@cygnus.com>
-
- * select.cc: add missing end comment at about line 933.
- gnu-win32 beta 17 release made
-
-Wed Dec 4 15:53:11 1996 Geoffrey Noer <noer@cygnus.com>
-
- * version.h: increment minor dll number in conjunction
- with gnu-win32 beta 17 release
-
-Tue Dec 3 15:05:57 1996 Geoffrey Noer <noer@cygnus.com>
-
- * strsep.cc: new file containing Berkeley-copyrighted strsep
- code previously in misc.cc.
- * misc.cc: strsep moved to strsep.cc, stop including
- unistd.h, strings.h, sys/types.h, stddef.h, and stdarg.h
- * Makefile.in: appropriate adjustments to add strsep.cc
-
-Tue Dec 3 13:50:59 1996 Geoffrey Noer <noer@cygnus.com>
-
- * include/sys/copying.dj: new file whose presence is
- required by include/sys/file.h
-
-Tue Dec 3 13:37:27 1996 Geoffrey Noer <noer@cygnus.com>
-
- Throughout all Cygnus-developped source files: put all
- code under GPL
-
-Tue Dec 3 10:54:01 1996 Jeremy Allison <jra@cygnus.com>
-
- * fork.cc: Changed code to delete [] saved child_hinfo
- after allocate_pid called. Needed as child changes this
- value in the shared area when it de-linearizes fd array.
- Needed to stop race condition with earlier fix.
- * winsup.h: Changed definition of item in hinfo to be
- a char array rather than fhandler_console. Stops
- destructor being called when fork delete [] of
- hinfo array called.
- * hinfo.cc: Changes (casts) to support winsup.h changes.
-
-Mon Dec 2 17:22:13 1996 Geoffrey Noer <noer@cygnus.com>
-
- * include/utime.h: add ifdef _UTIME_U wrapper around header
-
-Mon Dec 2 15:45:46 1996 Jeremy Allison <jra@cygnus.com>
-
- * fork.cc: Fixed file descriptor resource leak in parent.
- * registry.cc: Removed fatal error if registry key cannot
- be opened. Causes errors in service code.
-
-Wed Nov 27 15:40:15 1996 Geoffrey Noer <noer@cygnus.com>
-
- * cygwin.din: for MS compatibility, also export functions
- as _funcname = funcname
- * include/netdb:
- * include/sys/socket.h:
- Do the equivalent thing for functions exported as cygwin32_funcname
-
-Wed Nov 27 15:14:30 1996 Geoffrey Noer <noer@cygnus.com>
-
- * cygwin.din: remove exported helper functions that shouldn't
- need to be exported (_read et al)
- * glob/Makefile.in: add SHELL definition
- * utils/Makefile.in: add SHELL definition
-
-Mon Nov 25 14:24:52 1996 Geoffrey Noer <noer@cygnus.com>
-
- * include/commdlg.h, ddeml.h, winadvapi.h, winbase.h, wincon.h,
- windef.h, windowsx.h, winerror.h, wingdi.h, winkernel.h, winnt.h,
- wintypes.h, winuser.h, winversion.h:
- Add MS-style header files back, each of which now includes our
- windows.h. This should allow compilation of Windows code
- that expects normal MS-named headers as long as the information
- is in our windows.h somewhere. The appropriate wrappers have
- been added to each file so windows.h isn't included more than
- once.
- * include/windows.h: add paranoia wrapper so it can be included
- more than once.
-
-Mon Nov 18 22:19:40 1996 Geoffrey Noer <noer@cygnus.com>
-
- * Makefile.in: change rules around so new-cygwin.dll is
- only rebuilt when necessary
- * spawn.cc: include <stdlib.h>
-
-Mon Nov 18 21:08:15 1996 Geoffrey Noer <noer@cygnus.com>
-
- * net.cc: remove extern "C"s that shouldn't be there
- (get_win95_ifconf, get_winnt_ifconf, get_if_flags)
- * syscalls.cc: remove extern "C"s from num_entries, _stat_worker
- * winsup.h: add extern "C"s for syscalls protos
-
-Mon Nov 18 20:35:39 1996 Geoffrey Noer <noer@cygnus.com>
-
- * winsup.h: include version.h
- * Makefile.in: remove dependencies involving version.h, but add
- version.h to winsup.h dependency line and also add others that
- should also be there.
- * dcrt0.cc:
- * libccrt0.cc:
- * registry.cc:
- * shared.cc: delete includes of version.h
-
-Mon Nov 18 20:16:37 1996 Geoffrey Noer <noer@cygnus.com>
-
- * stubs.c -> stubs.cc, add extern "C"s
- * uname.c -> uname.cc, add extern "C"s
- * console.cc: add extern "C"s, remove include windows.h
- since its already included in winsup.h
- * dirsearch.cc: add extern "C"s
- * fcntl.cc: add extern "C"s
- * winsup.h: remove LEAN_AND_MEAN define since that's no longer
- relevant with new windows headers, include version.h
- * malloc.cc: fix typos
-
-Mon Nov 18 18:02:31 1996 Geoffrey Noer <noer@cygnus.com>
-
- * grp.c renamed to grp.cc, add extern "C"s
- * misc.c renamed to misc.cc, add extern "C"s
-
-Mon Nov 18 16:08:26 1996 Geoffrey Noer <noer@cygnus.com>
-
- * syscalls.cc: extern "C"'d function calls
- * net.cc: extern "C"'d function calls, some respacing
- * hinfo.cc: extern "C"'d function calls, some respacing
- * syscalls.h: removed defines for MIN, errno, alloca(x),
- DEFAULT_GID/UID, NOT_OPEN_FD(fd), STD_RBITS et al,
- O_NOSYMLINK
- * winsup.h: added what was just deleted from syscalls.h
-
-Mon Nov 18 15:56:22 1996 Jeremy Allison <jra@cygnus.com>
-
- * cygwin.din: Added readv
- * syscalls.cc: Added readv code.
- * syscalls.h: Added readv prototype.
-
-Wed Nov 13 15:55:14 1996 Geoffrey Noer <noer@cygnus.com>
-
- * cygwin.din: added C++-related exports for stuff in
- libgcc.a (from new.o, tinfo.o, tinfo2.o, exception.o).
-
-Mon Nov 11 15:50:26 1996 Geoffrey Noer <noer@cygnus.com>
-
- * dcrt0.cc
- * dirsearch.cc
- * malloc.cc
- * passwd.cc
- * path.cc,
- * pinfo.cc
- * syslog.cc
- * utils/kill.cc
- * utils/cygwin.cc:
- need to #include <stdlib.h> which used to be included
- automatically in windows.h included by winsup.h.
- * shared.cc: UnmapViewOfFile takes a void *, not a
- const void *
- * malloc.cc: formatting fixes
-
-Fri Nov 8 17:31:55 1996 Jeremy Allison <jra@cygnus.com>
-
- * select.cc: Added fix for HANDLE select sent by
- Sergey Okhapkin.
- * fhandler.h: Changed dup to return int. Can now
- return error to dup2.
- * fhandler.cc: Changed dup to return error code.
- Corrected fhandler_console::close to return
- error code.
- * hinfo.cc (dup2): Check return code from
- fhandler->dup.
- * times.cc: Changed DST calculation as tm struct
- month starts at zero, NT wMonth starts at 1.
- * TODO: Added the things i'd like to do.
-
-Wed Nov 6 17:42:31 1996 Geoffrey Noer <noer@cygnus.com>
-
- * Makefile.in: Changed name of base file for cygwin.dll from
- base to cygwin.base. Changed name of exp file for cygwin.dll
- from win.exp to cygwin.exp. Updated dependency list, removing
- recently removed files like libcfork.cc, added missing files,
- and added all missing header dependencies. Small formatting
- fixes.
-
-Fri Nov 1 16:38:48 1996 Geoffrey Noer <noer@cygnus.com>
-
- * TODO: deleted old stuff from a long time ago, added some
- new stuff
-
- * added public domain disclaimers to all files missing them,
- reformatting of non-imported code to conform to GNU standards.
- Changes to:
- delqueue.h, exceptions.h, fcntl.cc, fhandler.h, grp.c,
- init.cc, ioctl.cc, key.cc, libcctype.c, libcerr.cc, libcmain.cc,
- misc.c, path.h, pold.c, resource.cc, smallprint.c, strerror.cc,
- syslog.cc, termios.cc, test.c, version.h, wait.cc
-
-Fri Nov 1 14:44:29 1996 Jeremy Allison <jra@cygnus.com>
-
- * fhandler.h: Added is_console() method needed by
- new select code.
- * fhandler.cc (fhandler_console::init): Added c_oflag setting
- dependent on bin parameter.
- * select.cc: Added code to implement select from console
- handles. Ignores keyup events and still blocks.
-
-Wed Oct 30 16:35:41 1996 Jeremy Allison <jra@cygnus.com>
-
- * fhandler.h: Removed fhandler_console_in, fhandler_console_out
- and integrated them both into fhandler_console. Added output_handle_
- so fhandler console has two handles.
- * fhandler.cc: Updated to support changes in fhandler.h. It is now
- possible to open("/dev/tty") and read/write to the same fd.
- * hinfo.cc(build_fhandler): Removed references to obsolete classes.
- * spawn.cc: Changed to get correct reference to output_handle_ for
- fhandler_console class.
- * console.cc: Changed to get output handle rather than input handle.
- * winsup.h: Changed definition of prototypes for functions changed
- in console.cc
-
-Wed Oct 30 13:05:33 1996 Geoffrey Noer <noer@cygnus.com>
-
- * include/custcntl.h
- * include/features.h
- * include/icmp.h
- * include/wchar.h
- * include/cygwin32/icmp.h
- * include/cygwin32/ip.h
- * include/cygwin32/sockios.h
- * include/cygwin32/types.h
- * include/cygwin32/uio.h
- * include/sys/ttychars.h
- Added comment with name of header to each so that these are no
- longer empty files (some unzip programs won't create
- zero-length files which is a problem for headers)
-
-Sun Oct 27 17:30:03 1996 Geoffrey Noer <noer@cygnus.com>
-
- * cygwin.din: also export "_execl = execl" and the same
- for _execle and _execlp
-
-Thu Oct 24 01:43:29 1996 Geoffrey Noer <noer@cygnus.com>
-
- * include/windows.h: rewritten to include headers from
- the include/Windows32 subdirectory
- * winsup.h: no longer define MAX_PATH here since it's defined
- in header files dragged in by windows.h
- * dirsearch.cc (readdir): change WIN32_FIND_DATAA to WIN32_FIND_DATA
- * libccrt0.cc: #include <stdlib.h>
- * syscalls.cc (_unlink): chmod file to be unlinked to be
- writable and try to delete it again if first delete failed
- with permission denied error (rm will now work on read-only files)
- (num_entries): change WIN32_FIND_DATAA to WIN32_FIND_DATA
- * include/commdlg.h: delete
- * include/ddeml.h: delete
- * include/winadvapi.h: delete
- * include/winbase.h: delete
- * include/wincon.h: delete
- * include/windef.h: delete
- * include/windowsx.h: delete
- * include/winerror.h: delete
- * include/wingdi.h: delete
- * include/winkernel.h: delete
- * include/winnt.h: delete
- * include/wintypes.h: delete
- * include/winuser.h: delete
- * include/winversion.h: delete
-
-Wed Oct 23 10:43:05 1996 Jeremy Allison <jra@cygnus.com>
-
- * dcrt0.cc (api_fatal): Changed locking clear of
- process table to unlocking clear. Needed as lock code calls
- api_fatal.
- * exceptions.cc: Added debug_printfs to follow exceptions in
- strace mode.
- * pinfo.cc: Added code to ensure fd table is cleared when new
- pid entry allocated. Fixed bug when process is terminated
- violently by TerminateProcess and leaves fd table non-zero.
- * termios.cc: Changed stubbed out syscalls to syscall_printf
- rather than small_printf. Stops annoying tcdrain message.
- * winsup.h: Made get_empty_pinfo call private to pinfo_list.
- Should never be called external to this class.
-
-Tue Oct 22 16:14:23 1996 Jeremy Allison <jra@cygnus.com>
-
- * hinfo.cc: Removed previous change. This is not the
- correct place to flush input events.
-
-Tue Oct 22 09:25:32 1996 Jeremy Allison <jra@cygnus.com>
-
- * dcrt0.cc: Fixed up exit code to clean up pinfo array.
- * exceptions.cc: Fixed up exit code to clean up pinfo array.
- * fork.cc: Tidied up access to inuse_p entry. Added flags
- to allow different states to be represented.
- * hinfo.cc: Added code to flush pending events if
- stdin is a console.
- * pinfo.cc (pinfo::record_death): Added code to clean
- the pinfo array if we are an exiting parent.
- * spawn.cc: Removed erroneous code to clean childs
- pinfo entry.
- * wait.cc: Changed WAIT_ERROR_RC to Win32 WAIT_FAILED.
- Tidied up access to pinfo array.
- * winsup.h: Added record_death_nolock to pinfo class.
- Added PID_XXX types for inuse_p.
-
-Tue Oct 22 01:26:52 1996 Geoffrey Noer <noer@cygnus.com>
-
- * include/Windows32/Base.h:
- * include/Windows32/Functions.h:
- * include/Windows32/Structures.h:
- * include/Windows32/UnicodeFunctions.h:
- Fixes to just commited changes
-
-Mon Oct 21 19:58:50 1996 Geoffrey Noer <noer@cygnus.com>
-
- * include/Windows32/ASCIIFunctions.h:
- * include/Windows32/Base.h:
- * include/Windows32/Defines.h:
- * include/Windows32/Functions.h:
- * include/Windows32/Structures.h:
- * include/Windows32/UnicodeFunctions.h:
-
- Add back items in old include files (commdlg.h, ddeml.h,
- shellapi.h, winadvapi.h, winbase.h, wincon.h, windef.h,
- windowsx.h, winerror.h, wingdi.h, winkernel.h, winnt.h,
- wintypes.h, winuser.h, winversion.h) which should now be able
- to be erased and windows.h modified to point to the new headers
- without anything nasty happening.
-
- * include/WINREADME: deleted
- * include/mywinsock.h: removed many blank lines
-
-Mon Oct 21 09:48:00 1996 Jeremy Allison <jra@cygnus.com>
-
- * select.cc: Re-written from scratch. Take account of
- the following cases. (1). All sockets [written&works]
- (2). Handles, sockets and always readies [written,not tested]
- (3). All handles [written,not tested]. (4). Handles & sockets
- with timeout [not yet written,returns -1]. Correctly blocks
- and doesn't spin cpu.
- * pinfo.cc: Changed to add global lock around pinfo array.
- * fork.cc: Changed to use global pinfo lock.
- * shared.cc: Fixed bug with fork()->exec()->exec() code.
- * net.cc: Removed select_init() call (no longer used).
- * spawn.cc: Implemented suggestion that spawn creates
- process suspended, then sets up it's dwProcessId entry
- in the shared pinfo array.
- * wait.cc: Changed to use global pinfo lock.
- * winsup.h: Added missing windows_95() call.
- * fhandler.h: Changed ifdefs to select new always_ready
- methods.
- * fhandler.cc (fhandler_console::write): Fixed bug
- where return of write_normal was being ignored.
- * dcrt0.cc: Added code to use global pinfo lock.
- Ensure that process records it's own death.
- * exceptions.cc: Added code to clear our entry in pinfo
- array when we are exiting. Should reduce dead processes in
- pinfo array.
- * include/winbase.h: Added MAXIMUM_WAIT_OBJECTS define.
-
-Mon Oct 21 00:52:17 1996 Geoffrey Noer <noer@cygnus.com>
-
- * Makefile.in: install headers from new Windows32 dir
-
-Sat Oct 19 00:47:58 1996 Geoffrey Noer <noer@cygnus.com>
-
- * include/Windows32/Base.h: change DWORD to unsigned int from
- unsigned long, change __WIN32__ checks to _WIN32, change
- // comments to /* */
-
-Fri Oct 18 17:33:07 1996 Geoffrey Noer <noer@cygnus.com>
-
- * include/Windows32/Defines.h: change INFINITE to 0xFFFFFFFF,
- add back definitions present in old winsup headers missing from
- this file (STATUS_WAIT_0 et al, CONTEXT stuff, FAR, PACKED,
- ASCIICHAR)
- * include/Windows32/Functions.h: change // comments to /* */
- * include/Windows32/Messages.h: add definitions for WM_NULL,
- WM_PENWINFIRST, WM_PENWINLAST
- * include/Windows32/Sockets.h: change __WIN32__ checks to _WIN32
- * include/Windows32/Structures.h: add ppc case for CONTEXT
- structure, change // comments to /* */
-
-Fri Oct 18 17:25:09 1996 Geoffrey Noer <noer@cygnus.com>
-
- * include/Windows32: new directory for Windows headers
- * include/Windows32/ASCIIFunctions.h:
- * include/Windows32/Base.h:
- * include/Windows32/Defines.h:
- * include/Windows32/Errors.h:
- * include/Windows32/Functions.h:
- * include/Windows32/Messages.h:
- * include/Windows32/Sockets.h:
- * include/Windows32/Structures.h:
- * include/Windows32/UnicodeFunctions.h:
- New Win32 headers from Scott Christley's windows32api-0.1.2 package
- with no local modifications.
-
-Wed Oct 16 17:16:33 1996 Geoffrey Noer <noer@cygnus.com>
-
- * key.cc: remove extra blank lines, change ASCIICHAR to AsciiChar
- * registry.cc: remove #include <winbase.h> since it's already
- included in windows.h
-
-Tue Oct 15 09:51:48 1996 Jeremy Allison <jra@cygnus.com>
-
- * fhandler.h: Many changes to support moving fhandler array out of
- shared area into locally allocated memory. Removed fhandler class,
- fhandler_base is now root of class tree. Re-arranged class definitions
- to make it clear what functions are virtual and can be overridden.
- Inlined may accessor functions.
- * fhandler.cc: Many changes to support moving fhandler array out of
- shared area into locally allocated memory. unix_path_name_ is now
- always set (all fhandler_base classes have a name).
- * hinfo.cc: Many changes to support moving fhandler array out of
- shared area into locally allocated memory. Added linearization and
- de-linearization functions.
- * net.cc(socket): Added code to keep name for fhandler_socket.
- * pinfo.cc : Changed allocation of fhandler_base array to be in local
- memory rather than in shared area. (modified functions are pinfo_init,
- pinfo_list::get_empty_pinfo, pinfo_list::allocate_pid,
- pinfo::record_death).
- * shared.cc: Added functions to copy fd area for spawned process.
- Changed name of shared area to include master version number of
- Cygwin32.
- * spawn.cc (spawn_guts): Added code to initialize new shared area
- for fds.
- * syscalls.cc: Changed all code depending on NOFILE to use
- getdtablesize(). Added internal setdtablesize() call for exec'ed
- processes.
- * syscalls.h: Added getdtablesize().
- * sysconf.cc (sysconf): Changed SC_OPEN_MAX to return getdtablesize().
- * winsup.h: Moved fhandler array out of shared area. Changed from
- fhandler to fhandler_base (new root of class tree).
- * include/mywinsock.h: Updated #endif to make end of
- __INSIDE_CYGWIN32__ clear.
- * include/winkernel.h: Added UnmapViewOfFile call.
-
-Mon Oct 14 14:59:16 1996 Geoffrey Noer <noer@cygnus.com>
-
- * sysdef/i386: replace all files with ones from Scott
- Christley's windows32api-0.1.2 package. Still need to
- integrate new headers.
-
-Mon Oct 14 13:41:14 1996 Geoffrey Noer <noer@cygnus.com>
-
- * syscalls.cc (_unlink): need to fchmod file to writable
- before attempting to delete. This change still needs more
- work (fchmod isn't written yet).
- * (fchmod): change comment
-
-Fri Oct 11 22:27:17 1996 Geoffrey Noer <noer@cygnus.com>
-
- * fhandler.cc, fhandler.h: minor fixes to console
- support functions (remove missed reference to gotarg2,
- definition in fhandler.h)
-
-Wed Oct 9 17:55:00 1996 Geoffrey Noer <noer@cygnus.com>
-
- * delqueue.cc: added copyright notice, reformatted file
-
- from sos@prospect.com.ru (Sergey Okhapkin):
- * fhandler.cc, fhandler.h: add/fix ansi/vt100 console support,
- and fix a tab bug
- (modified functions are fhandler_console_out::clear_screen,
- fhandler_console_out::clear_to_eol,
- fhandler_console_out::char_command,
- fhandler_console_out::write,
- FakeReadFile)
-
-Wed Oct 9 17:32:17 1996 Jeremy Allison <jra@cygnus.com>
-
- * times.cc: Swapped gmtime and localtime (they were
- incorrectly reversed).
- Added is_dst determination to them both.
- * misc.c: Added swab, ffs.
- * fcntl.cc(fcntl): Added capability for lock calls.
- * fhandler.h: Added lock method into fhandler class.
- * fhandler.cc: Added NT/Win95 semantics locks into ::lock
- made them pretend they are POSIX locks.
- * syscalls.cc (writev): Fixed return value bug.
- * net.cc: Added WSAEOPNOTSUPP error.
- * cygwin.din: Added ffs and swab.
- * include/strings.h: Added file (just include string.h).
- * include/winbase.h: Added defines LOCKFILE_FAIL_IMMEDIATELY
- and LOCKFILE_EXCLUSIVE_LOCK.
- * include/winerror.h: Added define ERROR_LOCK_FAILED.
-
-Thu Oct 3 16:19:23 1996 Jeremy Allison <jra@cygnus.com>
-
- * fhandler.h: Many changes - removed all public variables
- from classes, replaced with accessor functions. Renamed all
- class variables to add a trailing '_'. This makes reading
- and understanding which variables are class variables much simpler.
- Changed name member to unix_path_name_ and made dynamic rather
- than a fixed 31 byte buffer per entry.
- * fhandler.cc: Updated varable access for above.
- * fcntl.cc: Updated varable access for above.
- * hinfo.cc: Updated varable access for above.
- * spawn.cc: Updated varable access for above.
- * syscalls.cc: Added fsync (null call) and fchmod(null
- call at present).
- * net.cc: Added ioctls for SIOCGIFCONF and SIOCGIFFLAGS.
- Added ntohs, ntohl, static functions get_winnt_ifconf,
- get_win95_ifconf and get_if_flags.
- * include/cygwin32/if.h: Added structs for new ioctls.
- * include/cygwin32/socket.h: Added iovec include.
- * include/asm/socket.h: Added defines for above ioctls.
- * cygwin.din: Added ntohs, ntohl, fsync, fchmod.
-
-Wed Oct 2 17:34:21 1996 Geoffrey Noer <noer@cygnus.com>
-
- * utils/configure.in: add call to AC_CANONICAL_SYSTEM
- * utils/configure: regenerate
- * Makefile.in: build cygwin.dll as new-cygwin.dll and install as
- cygwin.dll to prevent confusion when building winsup natively
-
-Tue Oct 1 17:27:34 1996 Jeremy Allison (jra@cygnus.com)
-
- * include/regex.h: Added.
- * net.cc: Added WSAECONNRESET, WSAEPFNOSUPPORT to
- errmap array.
-
-Tue Oct 1 15:40:39 1996 Jeremy Allison (jra@cygnus.com)
-
- * fork.cc (cygwin_fork_helper1): Fixed resource leak of process
- handles, added cleanup code. Also fixed timout problem when child
- cannot be initialized.
- * dirsearch.cc (readdir): Changed comparison to explicitly check for
- INVALID_HANDLE_VALUE. Test < 0 fails with void *.
- * syscalls.cc (num_entries): Changed comparison to explicitly check for
- INVALID_HANDLE_VALUE. Test < 0 fails with void *.
- * cygwin.din: Added regcomp, regexec, regerror, regfree.
- * Makefile.in: Added EXTRA_OFILES containing ../librx/rx.o. Added
- comment to explain makefrag. Added ../newlib/libc/include to include
- path.
-
-Mon Sep 30 16:10:56 1996 Stu Grossman (grossman@critters.cygnus.com)
-
- * cygwin.din: Remove getopt and friends.
-
-Fri Sep 27 18:31:28 1996 Jeremy Allison <jra@cygnus.com>
-
- * dcrt0.cc (dll_crt_1): Moved initialization of _reent to correct
- position.
-
-Fri Sep 27 14:24:05 1996 Jeremy Allison <jra@cygnus.com>
-
- * dcrt0.cc (dll_crt_1): Fixed fork bug with _impure_ptr not being
- initialized correctly in a forked child. This should fix
- the bash echo in a sub-shell bug.
- * include/sys/uio.h: Created file. Contains definitions for writev
- * include/limits.h: Added IOV_MAX and SSIZE_MAX.
- * syscalls.cc: Added writev, changed read and write to return ssize_t.
- * syscalls.h: Added writev, changed read and write to return ssize_t.
- * cygwin.din: Added writev call.
-
-Wed Sep 20 13:09:00 1996 Jeremy Allison <jra@cygnus.com>
-
- * include/mntent.h: Added MOUNTED definition, needed by
- some code.
- * dcrt0.cc : Added __progname for getopt code.
- * misc.c: Added getw code.
- * cygwin.din: Added getopt, optarg, opterr, optind
- optopt, putw, getw calls.
-
-Fri Sep 20 03:03:17 1996 Geoffrey Noer <noer@cygnus.com>
-
- * select.cc: change long millisec to unsigned int,
- respaced file
-
- patch from Sergey Okhapkin <sos@prospect.com.ru>:
- * select.cc (polled): fix for select to get keyboard input
- working properly (check EventType != KEY_EVENT instead
- of checking for KeyEvent.AsciiChar == 0)
- * select.cc (cygwin32_select): make int i unsigned int so NULL is
- a valid timeout argument for loop
-
-Fri Sep 13 18:21:52 1996 Jeremy Allison <jra@cygnus.com>
-
- * fhandler.cc (fhandler_base::read): rewrite text mode read
-
-Fri Sep 13 14:58:17 1996 Geoffrey Noer <noer@cygnus.com>
-
- * exceptions.cc (call_handler): fix control-C not working
- problem by setting rethere variable before the old value is
- clobbered.
-
-Thu Sep 12 16:27:00 1996 Jeremy Allison <jra@cygnus.com>
-
- * syslog.cc (pass_handler) : Removed duplicate code
- in pass_handler::print(). Added get_win95_event_log_path()
- to facilitate moving to registry configuration.
-
-Thu Sep 12 12:56:00 1996 Jeremy Allison <jra@cygnus.com>
-
- * syslog.cc : Added real openlog, syslog, logmask, closelog
- calls. syslog logs to event log on NT, file on Win95.
- * include/winnt.h : added EVENTLOG_xx_TYPE definitions.
- * include/winadvapi.h : added ReportEventA, RegisterEventSourceA
- DeregisterEventSourceA declarations.
- * include/winkernel.h : added LockFile, UnlockFile, LockFileEx,
- UnlockFileEx declarations.
- * include/wintypes.h : added PSID typedef.
- * include/sys/syslog.h : added options flag definitions for openlog.
-
-Wed Sep 11 15:34:09 1996 Geoffrey Noer <noer@cygnus.com>
-
- * fhandler.cc (popen): delete stub in favor of newlib's
- (pclose): delete stub in favor of newlib's
-
-Tue Sep 10 17:20:56 1996 Geoffrey Noer <noer@cygnus.com>
-
- * configure.in: don't transform names (the only time this might
- be a good idea is for unix x cygwin32)
- * configure: regenerated with autoconf
-
-Tue Sep 10 17:20:56 1996 Geoffrey Noer <noer@cygnus.com>
-
- patch from Sergey Okhapkin <sos@prospect.com.ru>:
- * fhandler.cc (FakeReadFile): support arrow keys, stop treating
- bringing window to front as a key down (resulting in random
- characters being printed in bash).
-
-Mon Sep 9 19:09:36 1996 Geoffrey Noer <noer@cygnus.com>
-
- * syscalls.cc (system): fix system call
-
-Fri Sep 6 09:33:13 1996 Doug Evans <dje@canuck.cygnus.com>
-
- * fhandler.h (fhandler_base): Make execable_p public char, not
- private signed char. Delete get_execable.
- * fhandler.cc (fhandler_base::get_execable): Renamed to
- check_execable_p.
- (fhandler_base::open): Restore symlink support.
- Set execable_p, symlink_p.
- (fhandler_base::fstat): Replace call to get_execable with reference
- to execable_p.
- (fhandler_base::fhandler_base): Set execable_p to 0.
- * path.h (symlink_check): Declare it.
- * path.cc (symlink_check): New function.
- (readlink): Call it.
- (symlink_follow): Likewise. New arg EXEC, callers updated.
- * syscalls.cc (_stat_worker): New arg CALLER, callers updated.
-
- * syscalls.cc: Delete all occurences of in/out and MARK.
-
-Thu Sep 5 18:51:01 1996 Doug Evans <dje@canuck.cygnus.com>
-
- * fork.cc: Don't include <ctype.h>. Delete find_exec and support.
- * spawn.cc: Include <ctype.h>. Move find_exec and support here.
- (perhaps_suffix): New argument report_failure_p, callers updated.
- (find_exec_1): Use perhaps_suffix when scanning PATH.
- (spawn_guts): Replace code to translate posix to win32 path lists
- with calls to utility fns that do the job.
-
-Wed Sep 4 13:30:57 1996 Doug Evans <dje@canuck.cygnus.com>
-
- * path.cc (readlink): Make more bulletproof.
-
-Wed Aug 28 16:44:24 1996 Geoffrey Noer <noer@cygnus.com>
-
- * syscalls.cc (system): use execlp
- * public release beta 16 made
-
-Tue Aug 27 09:58:14 1996 Doug Evans <dje@canuck.cygnus.com>
-
- * version.h (CYGWIN_DLL_VERSION_MINOR): Bump up to 2.
-
-Mon Aug 26 15:12:44 1996 Geoffrey Noer <noer@cygnus.com>
-
- * syscalls.cc (system): added basic system() call.
-
-Mon Aug 26 13:46:30 1996 Doug Evans <dje@canuck.cygnus.com>
-
- * cygwin.din (cygwin_fork_helper__FPvN30): Delete.
- (vfork,select): Add.
- * fork.cc (prepare_child): Delete, contents moved into
- cygwin_fork_helper1.
- (cygwin_fork_helper): Delete, contents moved into __fork.
- * winsup.h (cygwin_fork_helper): Delete.
-
- * path.cc: #include <fcntl.h>.
- (symlink,readlink): Reenable, rewrite.
- (symlink_follow): New function.
- * path.h (symlink): Delete.
- (SYMLINK_COOKIE, MAX_LINK_DEPTH): Define.
- (symlink_follow): Declare.
- * spawn.cc (spawn_guts): Rewrite symlink support.
-
- * syscalls.cc (_unlink): Make arg a const char *.
- * winsup.h (_unlink): Likewise.
-
- * spawn.cc (spawn_guts): Fix allocation of stack space for sh.exe path.
-
- * include/sys/errno.h: Deleted. Use newlib's.
-
-Fri Aug 23 16:00:00 1996 Jeremy Allison <jra@cygnus.com>
-
- * net.cc (getdomainname): Changed win95 code to open
- "System" key rather than "SYSTEM". I think the registry
- is case-sensitive.
-
-Thu Aug 22 17:04:09 1996 Geoffrey Noer <noer@cygnus.com>
-
- move fork into the dll:
- * libcfork.cc: deleted
- * fork.cc (vfork): used to be in libcfork.cc
- * (__fork): used to be in libcfork.cc
- * (fork): used to be in libcfork.cc
- * Makefile.in: don't build libcfork.cc any more
- * libccrt0.cc: set data_start, etc. from dll structure
- * winsup.h: add data_start, etc. to public vars in dll
- * cygwin.din: list fork
-
-Thu Aug 22 01:36:53 1996 Geoffrey Noer <noer@cygnus.com>
-
- * registry.cc: fix new registry code
- * syscalls.cc: make Windows95 check function extern "C"
-
-Wed Aug 21 16:15:47 1996 Geoffrey Noer <noer@cygnus.com>
-
- * cygwin.din: list vfork
- * dirsearch.cc: fix errno setting in readdir that caused
- diff to not function on directories
- * pipe.cc: reformatted
-
-Wed Aug 21 15:12:47 1996 Jeremy Allison <jra@cygnus.com>
-
- * net.cc (domainname): Changed getdomainname to get the
- information from the registry.
- * registry.h: Modified interface to reg_key.
- * registry.cc: Added open(),close() calls, made
- get/set string values return error indication, added trailing
- underscore to hkey member so it can be seen to
- be a class member.
- * include/winadvapi.h: Added KEY_READ and KEY write
- defines for registry access.
-
-Mon Aug 19 09:22:35 1996 Doug Evans <dje@canuck.cygnus.com>
-
- * path.cc (split_path): New function.
- * path.h (split_path): Declare it.
- * cygwin.din (cygwin32_split_path): Export it.
-
- * include/winkernel.h (FILE_SHARE_DELETE): Define.
-
- * syscalls.cc (__do_global_[cd]tors], __main): Move from here.
- * dcrt0.cc: To here.
-
- * dcrt0.cc (recur): Restore (now that we know WHY it was needed).
- (dll_crt0_1): Probe forked child's stack out.
-
- * fork.cc (FORK_WAIT_TIMEOUT): Bump up to two minutes.
-
- * fork.cc (dump_jmp_buf): New function.
- (cygwin_fork_helper1): Call it.
- * dcrt0.cc (dll_crt0:1): Call it.
- * winsup.h (dump_jmp_buf): Declare it.
-
- * fork.cc (cygwin_fork_helper1): Reenable child suspend before
- stack copy code.
-
-Sat Aug 17 04:06:36 1996 Geoffrey Noer <noer@cygnus.com>
-
- * dirsearch.cc: reformatted, removed a couple of gotos
-
-Thu Aug 15 17:56:08 1996 Geoffrey Noer <noer@cygnus.com>
-
- * cygwin.din: added __eprintf, a newlib function needed by assert.
- * times.cc: swap gmtime and localtime (gmtime really was localtime
- and vice versa).
-
-Tue Aug 13 03:46:22 1996 Geoffrey Noer <noer@cygnus.com>
-
- * signal.cc: renamed all signal variables "sig",
- fixed signal range error checking in all relevant functions,
- (sigaddset): new
- (sigismember): new
- (sigfillset): new
- (sigemptyset): new
- * cygwin.din: added corresponding entries for new signal functions.
- * cygwin.h: added protos for them
- * fhandler.cc, fhandler.h: major reformat of code
- * net.cc (cygwin32_socket): call checkinit() at start to
- initialize WinSock in case it isn't already.
- * syscalls.cc (access): set errno appropriately when no
- write access
- * fcntl.cc: reformatting
-
-Sat Aug 10 16:30:14 1996 Geoffrey Noer <noer@cygnus.com>
-
- * signal.cc (_raise): rewrite to shorten code, corrected
- return values.
- * fcntl.cc, net.cc, signal.cc, stubs.c: reformatted, added
- public domain notice at the tops if they were missing.
-
-Fri Aug 9 18:19:12 1996 Geoffrey Noer <noer@cygnus.com>
-
- * syscalls.cc (_rename): return -1 if file to be renamed
- doesn't exist. Reformatted whole file.
- * fork.cc: increase timeout value to 60 sec from 30 sec
-
-Thu Aug 8 17:44:39 1996 Jim Wilson <wilson@cygnus.com>
-
- * config/i386/longjmp.c: Increment %eax if it is zero.
-
-Wed Aug 7 15:51:04 1996 Geoffrey Noer <noer@cygnus.com>
-
- * include/sys/mman.h: fixed defines for PROT_READ et al to
- match what's more normally there in unix
- * sysdef/i386/*: removed the extra underscores present in most
- of these files that shouldn't have been there
- * net.cc: cleaned up whitespace, formatting
-
-Tue Jul 16 12:43:16 1996 Doug Evans <dje@canuck.cygnus.com>
-
- * libccrt0.cc (__version): Deleted, unused.
-
- * uname.c (uname): Print CYGWIN_DLL_VERSION is version field.
-
-Mon Jul 15 16:48:29 1996 Doug Evans <dje@canuck.cygnus.com>
-
- * version.h (CYGWIN_DLL_VERSION_MINOR): Bump up to 1.
-
- Path handling clean up, pass 2 (use //<letter>, not /.<letter>.).
- * path.cc (SLASH_DRIVE_PREFIX_LEN): Delete.
- (slash_drive_to_win32_path): New function.
- (mount_info::posix_path_p): Delete support for $CYGWIN,
- always return 1.
- (path_conv::path_conv): Call slash_drive_to_win32_path.
- (mount_info::conv_to_win32_path): Renamed from
- posix_path_to_win32_path. All callers updated.
- (mount_info::conv_to_posix_path): Renamed from
- win32_path_to_posix_path. All callers updated.
- (normalize_posix_path): Keep two leading /'s (or \'s).
- (normalize_win32_path): Likewise.
- (conv_to_{win32,posix}_path): Renamed from
- {posix,win32}_path_to_{win32,posix}_path_keep_rel.
- (conv_to_full_{win32,posix}_path): Renamed from
- {posix,win32}_path_to_full_{win32,posix}_path.
- (posix_path_list_p): New function.
- (cygwin32_{unix,dos}_path_to_{dos,unix}_path_keep_rel): Delete.
- ({unix,dos}_path_to_{dos,unix}_path): Delete.
- ({win32,posix}_to_{posix,win32}_path_list_buf_size): Renamed from
- cygwin32_{win32,posix}_to_{posix,win32}_path_list_buf_size.
- ({win32,posix}_to_{posix,win32}_path_list): Renamed from
- cygwin32_{win32,posix}_to_{posix,win32}_path_list.
- (slash_drive_prefix_p): Recognize //<letter>, not /.<letter>.
- (build_slash_drive_prefix): Update.
- * path.h: Update.
- * cygwin.din ({dos,unix}_path_to_{unix,dos}_path): Delete.
- (cygwin32_{dos,unix}_path_to_{unix,dos}_path_keep_rel): Delete.
- (cygwin32_conv_to_{posix,win32}_path): Renamed from
- (cygwin32_{win32,posix}_path_to_{posix,win32}_path_keep_rel.
- (cygwin32_conv_to_full_{posix,win32}): New exports.
- (cygwin32_posix_path_list_p): New export.
- * dcrt0.cc (path_len): Delete.
- (PATH_ENV_BUF_SIZE): Delete.
- (conv_path_names): Delete all but PATH.
- (dll_crt0_1): Rewrite environment variable conversion code.
- * fork.cc (find_exec_1): Delete _SC_PATH_RULES support. Determine
- path delimiter by calling posix_path_list_p.
- * shared.cc (shared_info::initialize): Delete `path_rules'.
- * sysconf.cc (sysconf): Delete _SC_PATH_RULES.
- * winsup.h (shared_info): Delete `path_rules'.
-
- * fork.cc (cygwin_fork_helper1): Reset u->forkee after child has
- started.
-
- * pinfo.cc (pinfo::init_from_fork): Delete. Empty function.
- * fork.cc (cygwin_fork_helper1): Delete call to it.
-
- * utils/kill.cc (usage): New function.
- (main): Allow multiple pids to be passed. Call usage.
-
-Mon Jul 15 13:07:23 1996 Michael Meissner <meissner@tiktok.cygnus.com>
-
- * Makefile.in (install): If cross compiling, install the
- cygwin.dll file as $target_alias-cygwin.dll in the bin directory,
- instead of plain cygin.dll.
- Install the cygwin.dll file in the library directory as well.
-
- * configure.in: Test for cross compiling, and if cross compiling,
- transform name of cygwin.dll file in the binary directory.
-
- * configure: Regenerate.
-
- * utils/Makefile.in (Makefile): Rebuild Makefile if configure.in
- changes.
- (install): Use the toplevel install.sh to install the utilities,
- and transform the name if cross compiling.
-
- * utils/configure.in: Test for cross compiling, and if cross
- compiling, tranform mount, umount, ps, etc. Do not call
- AC_PROG_INSTALL anymore.
-
- * utils/configure: Regenerate.
-
-Fri Jul 12 16:25:09 1996 Geoffrey Noer <noer@cygnus.com>
-
- * Makefile.in: also make install in utils subdir so "mount"
- et al gets installed.
-
-Thu Jul 11 17:53:31 1996 Geoffrey Noer <noer@cygnus.com>
-
- * include/sys/param.h: fixed value of HZ (now 1000 instead of 100).
- caused bug that showed up as "time sleep 5" returning 50.
-
-Thu Jul 11 14:08:09 1996 Geoffrey Noer <noer@cygnus.com>
-
- * fhandler.cc: correct typo in comment
- * exceptions.cc: remove definition of sig_func_ptr, replace
- occurances with newlib-defined _sig_func_ptr.
-
-Wed Jul 10 19:12:18 1996 Doug Evans <dje@canuck.cygnus.com>
-
- * version.h (CYGWIN_DLL_VERSION_{MAJOR,MINOR}): Bump up to 17.0.
- * winsup.h (class per_process): New members {public,internal}_reserved.
- (SIZEOF_PER_PROCESS): Define.
- * dcrt0.cc (dll_crt0_1): Add sanity check of per_process size.
- Don't call checkout for forkee.
- * libccrt0.cc (cygwin_crt0): Set magic_biscuit to sizeof per_process
- again.
-
- * utils/ps.cc (main): Print uid.
-
- * hinfo.h: Deleted. Contents moved to winsup.h.
- * Makefile.in (WINSUP_H): Update.
-
- * dcrt0.cc (u, environ): Moved here.
- * shared.cc: From here.
-
- * pinfo.cc (pinfo_init): Renamed from pinfo_init_per_process.
- All callers updated.
- * hinfo.cc (hmap_init): Renamed from hmap_init_per_process.
- All callers updated.
- * winsup.h (cygwin_parent_p): Renamed from invoked_by_cygwin_p.
- All uses updated.
-
- * fork.cc (prepare_child): Add debug message.
-
- * uinfo.cc (uinfo_init): Renamed from uinfo::init.
- All callers updated. Call getlogin instead of GetUserName.
- (getlogin): Call GetUserName.
- * winsup.h (class uinfo): Delete. Members uid,gid moved ...
- (class pinfo): To here. All uses updated.
- (class shared_info): Delete member `u'.
- * fork.cc (cygwin_fork_helper1): Set child's uid,gid.
-
- * pinfo.cc (pinfo::clearout): Reset strace_mask_ptr.
-
- * shared.cc (open_shared_file_map): Add debugging message.
-
-Fri Jul 5 15:36:48 1996 Doug Evans <dje@canuck.cygnus.com>
-
- * exceptions.cc (sig_func_ptr): New typedef.
- (__stack_trace): Make i386 and ppc formats the same.
- (sigfunc): Use sig_func_ptr.
- (call_handler): Likewise. All callers updated.
- (__cygwin_exception_handler): Handle exceptions before dll has
- fully initialized. Only call dump_status once, like __stack_trace.
- (really_exit): Call _exit, not exit.
-
- * hinfo.cc: Add copyright.
- * uinfo.cc: Likewise.
-
- * passwd.c: Whitespace cleanup.
- (search_for): Make static.
-
- * pinfo.cc (pinfo_list::init): Delete call to clearout vec[0].
- (pinfo::clearout): Reset more fields.
- (pinfo_list::get_empty_pinfo): Delete printing of error messages
- if table is full.
-
- * shared.cc (open_shared_file_map): Mark shared map as not inherited.
-
- * signal.cc (signal): Delete (void *) coersion of result.
- (usleep): Convert microseconds to milliseconds. Delete second copy.
- (_raise): Use _sig_func_ptr.
-
- * syscalls.h: Delete #include mntent.h, sys/types.h, string.h,
- stdio.h, setjmp.h, stdlib.h, signal.h, sys/strace.h, unistd.h,
- ctype.h, fcntl.h.
- * winsup.h: #include sys/types.h, sys/strace.h, setjmp.h, signal.h,
- string.h, windows.h.
- * All necessary files updated.
-
- * winsup.h (class pinfo): Delete member localtime_buf.
- * times.cc (corelocaltime): Use static local for localtime_buf.
-
- * winsup.h (class pinfo): Rename the_pid to pid. All uses updated.
- Delete handle_valid_p, unused. Rename __sig_mask to sig_mask.
-
-Thu Jul 4 14:36:01 1996 Doug Evans <dje@canuck.cygnus.com>
-
- * shared.h: Deleted. All files updated.
- * winsup.h: shared.h contents moved here.
- * Makefile.in (WINSUP_H): Update.
-
- * heap.cc: Renamed from pproc.cc.
- (heap_init): Renamed from per_process::init.
- In forkee initialization, ensure memory being reserved is at same
- address as parent's. Commit forkee memory in one chunk.
- (_sbrk): Moved here,
- * syscalls.cc (_sbrk): From here.
- * Makefile.in (DLL_OFILES): Update.
- * dcrt0.cc (dll_crt0_1): Call heap_init instead of u->init.
- * winsup.h (class per_process): Delete member `init'.
-
- * dcrt0.cc (recur): Delete.
- (dos_argv_to_unix_argv): Delete.
-
- * delqueue.cc: Delete #include of delqueue.h, winerror.h
- * winsup.h: #include delqueue.h.
-
- * exceptions.cc (ctrl_c_handler): Only require 13 ^c's to quit task.
-
- * fork.cc (fork_mutex,forkee_stopped,forker_stopped): New static
- globals, were in class_shared info.
- (fork_init,fork_terminate): New functions.
- (prepare_child,cygwin_fork_helper1): Update.
- (cygwin_fork_helper1): If fork disabled, return EAGAIN.
- Delete unnecessary resetting of forkee_stopped event.
- * winsup.h (fork_init,fork_terminate): Declare them.
- * dcrt0.cc (dll_crt0_1): Call fork_init.
- (_exit): Call fork_terminate.
- * shared.c (shared_info::initialize): Delete init of fork stuff.
-
- * shared.c (h): New static global, was in class shared_info.
- (shared_info::terminate): Delete, move contents into shared_terminate.
-
- * strace.cc (flush_p): New static global.
- (strace_init): Don't clobber u->strace_mask if _STRACE_INHERIT set.
- (__sys_printf): Only flush buffers if _STRACE_FLUSH.
- * include/sys/strace.h (_STRACE_FLUSH,_STRACE_INHERIT): Define.
- Reorganize bitmasks.
-
- * utils/ps.cc (main): Make output prettier.
-
-Wed Jul 3 12:30:24 1996 Doug Evans <dje@canuck.cygnus.com>
-
- * utils/Makefile.in (mount,umount,ps,kill): Rewrite rules.
- (PROGS): Add cygwin.
- (cygwin): New target.
- (install): Install all of $(PROGS).
- * utils/cygwin.cc: New file.
-
- * pinfo.cc (pinfo_init_per_process): PID environment variable handling
- moved here. Delete setting of u->parent. Set strace_mask_ptr.
- Set invoked_by_cygwin_p appropriately.
- (vfork_init): Delete, unused.
- (pinfo::init_self): Delete setting of root_p.
- (pinfo::terminate): root_p renamed to invoked_by_cygwin_p.
- * winsup.h (class per_process): Delete initial_pid, no longer used.
- (class pinfo): Add strace_mask_ptr.
- * fork.cc (cygwin_fork_helper1): Update.
-
- * winsup.h (class per_process): Delete trace_file, trace_mutex.
- Rename estrace to strace_mask.
- (system_printf): Declare.
- * strace.cc (strace_init): Renamed from per_process::strace_init.
- Don't open trace file unless strace environment variable set.
- Open trace file with FILE_SHARE_READ so others can read trace file
- while tracing in progress. Print error if $strace too big.
- (strace_file, strace_mutex): New static globals.
- (__sys_printf): Don't do anything if strace file not opened.
- (system_printf): New function.
- * pproc.cc (per_process::init): Delete call to strace_init.
- * dcrt0 (dll_crt0_1): Call strace_init as soon as possible.
-
- * dcrt0 (dll_crt0_1): Delete local can_glob, use
- u->self->invoked_by_cygwin_p instead.
- Move PID environment variable handling into pinfo_init_per_process.
- Delete setting of u->self->in_bash.
- Delete watching for bash.
- * winsup.h (class pinfo): Delete in_bash.
-
- * exceptions.cc (*): Call system_printf, not __sys_printf.
-
- * shared.h (class shared_info): Delete pp, unused.
-
- * syscalls.cc (isatty): Replace ttyname with is_tty.
-
- * winsup.h (registry_init_once_only): Delete, unused.
- (stdout_handle,file_handle_from_fd): Likewise.
- (CHILD_P,child_p,ALL_FS,loadup_dll,cygwin_s): Likewise.
- (unmixedcaseify): Prototype moved to path.h.
- * path.h (unmixedcaseify): Declare.
-
- * fork.cc (FORK_WAIT_TIMEOUT, WAIT_ERROR_RC): Define.
- (find_exec_1): Don't search PATH if directory present (not only if
- absolute path). Search "." before searching PATH.
- (copy): Return boolean indicating success. All callers updated.
- (prepare_child): Simplify. Check return code of WaitForSingleObject.
- Don't wait an infinite amount of time.
- (cygwin_fork_helper1): Simplify.
- Check return code of WaitForSingleObject.
- Don't wait an infinite amount of time.
- Check return code of copy.
- Disable code to Suspend/Resume child thread a second time.
-
- * winsup.h (class per_process): Make initial_sp a char *.
- * libccrt0.cc (cygwin_crt0): Update.
-
- * path.cc (path_conv): If name too long, set path to bogus value.
-
- * include/winkernel.h (WriteProcessMemory): Fix prototype.
-
- * include/sys/strace.h: Add extern "C" ifdef __cplusplus.
- (_STRACE): Delete.
- * dirsearch.cc (rewinddir): Use syscall_printf.
-
-Tue Jul 2 14:44:18 1996 Doug Evans <dje@canuck.cygnus.com>
-
- * wait.cc (WAIT_ERROR_RC): Use it instead of ALL_FS.
- (wait_found): New argument `options'. If GetExitCodeProcess fails,
- ensure `result' contains something reasonable.
- (wait_for_single): Check whether `c' is NULL before dereferencing it.
- (wait_for_any): Add some comments. Delete unnecessary gotos.
- (waitpid): Print message if called with intpid == 0.
-
-Sat Jun 29 10:49:28 1996 Doug Evans <dje@canuck.cygnus.com>
-
- * dirsearch.cc (readdir): Clean up syscall tracing.
- Mixed case handling temporarily disabled.
-
-Wed Jun 26 11:54:27 1996 Jason Molenda (crash@godzilla.cygnus.co.jp)
-
- * Makefile.in (bindir, libdir, datadir, infodir, includedir):
- Use autoconf-set values.
- (docdir): Removed.
- (install-info): Add.
- * configure.in (AC_PREREQ): autoconf 2.5 or higher.
- * configure: Rebuilt.
- * glob/configure.in (AC_PREREQ): autoconf 2.5 or higher.
- * glob/configure: Rebuilt.
- * utils/Makefile.in (bindir, exec_prefix): Use autoconf-set values.
- * utils/configure.in (AC_PREREQ): autoconf 2.5 or higher.
- * utils/configure: Rebuilt.
-
-Tue Jun 25 17:48:56 1996 Doug Evans <dje@canuck.cygnus.com>
-
- * include/sys/param.h (PATH_MAX,MAXPATHLEN): Change from 1024 to 259.
- (BIG_ENDIAN,LITTLE_ENDIAN,BYTE_ORDER): Define.
-
-Mon Jun 24 16:35:48 1996 Mark Eichin <eichin@cygnus.com>
-
- * fhandler.cc (read): Replace the old broken igncr code (which has
- been disabled for a while anyway) with code that checks for
- ENABLE_LINE_INPUT and replace only \r\n with \n.
-
-Mon Jun 24 00:12:22 1996 Doug Evans <dje@canuck.cygnus.com>
-
- * dcrt0.cc (dll_crt0_1): Convert argv[0] to posix style if necessary.
-
-Sun Jun 23 17:21:41 1996 Doug Evans <dje@canuck.cygnus.com>
-
- * version.h (CYGWIN_DLL_VERSION_MINOR): Bump up to 2.
-
- * fork.cc (perhaps_suffix): Simplify.
- (find_exec_1): Likewise. Always try appending .exe first.
- (cygwin_fork_helper1): Clean up (lots more needed still).
- Test for split heap before calling CreateProcess.
- No longer call find_exec, now done at start up.
- * dcrt0.cc (dll_crt0_1): Call find_exec to expand argv[0].
-
- * path.cc (conv_path_list_buf_size): New function.
- (cygwin32_{win32,posix}_to_{posix,win32}_path_list_buf_size): Ditto.
- (conv_path_list): Ditto.
- (cygwin32_{win32,posix}_to_{posix,win32}_path_list): Ditto.
- * cygwin.din: Export them.
-
- * misc.c (small_printf): Delete.
- (vhangup): Set errno.
-
- * syscalls.cc (isatty): Print syscall trace message even if error.
-
- * console.cc (*): Check return codes of win32 api calls.
-
- * syscalls.cc (chmod): Set errno of SetFileAttributes fails.
- Fix call to syscall_printf.
-
-Thu Jun 20 00:43:52 1996 Doug Evans <dje@canuck.cygnus.com>
-
- * dcrt0.cc (dll_crt0_1): Save full program name.
- * fork.cc (cygwin_fork_helper1): Always call find_exec.
-
- * path.cc (normalize_{posix,win32}_path): Fix edge case handling.
- (path_conv::path_conv): Ensure path is \-ified if win32 path rules.
-
- * spawn.cc (spawn_guts): Set errno if CreateProcess fails.
-
-Wed Jun 19 00:18:03 1996 Doug Evans <dje@canuck.cygnus.com>
-
- * path.h (PATH_RULES macros): Delete. Use ones in unistd.h.
- (enum path_rules_enum): Deleted. All uses updated.
- (path_conv): Rename member get_native to get_win32. All uses updated.
- (*win32_path*): Renamed from *native_path*.
- * path.cc (*win32_path*): Renamed from *native_path*.
- (mount_info::posix_path_p): Prepend '_' to PATH_RULES.
- Fix returning of cached value.
- (slash_drive_prefix_p, build_slash_drive_prefix): New functions.
- (mount_info::posix_path_to_win32_path): /.<letter>. is a drive spec.
- (path_conv::path_conv): Likewise.
- (mount_info::win32_path_to_posix_path): Convert unknown drives to
- /.<letter>. Normalize win32_path.
- (normalize_win32_path): New functions.
- (getcwd_inner): New arg `posix_p'. All callers updated.
- * shared.cc (shared_info::initialize): Prepend '_' to PATH_RULES.
- _PATH_RULES_NATIVE -> _PATH_RULES_WIN32.
- * spawn.cc (*win32_path*): Renamed from *native_path*.
- * dcrt0.cc: Likewise.
- * cygwin.din: Likewise.
-
- * Makefile.in (WINSUP_H): Add shared.h
-
- * smallprint.c (rn): Make static.
-
- * sysconf.cc: Renamed from sysconf.c.
- (sysconf): Support _SC_PATH_RULES.
-
- * screen.c: Deleted.
- * Makefile.in (DLL_OFILES): Delete screen.o.
-
- * fork.cc (cygwin_fork_helper): Don't pass 0 from longjmp to setjmp.
-
- * path.h (class mount_info): Update posix_path_to_native_path member.
- * path.cc (path_prefix_p): Rewrite.
- New arg `len'. All callers updated.
- (mount_info::binary_native_path_p): Call path_prefix_p.
- (path_conv::path_conv): Pass full_path to binary_native_path_p.
- (mount_info::posix_path_to_native_path): Delete arg keep_rel_p.
- New arg full_native_path. All callers updated. Don't call
- getcwd_inner if unnecessary. Rewrite relative path handling.
- (mount_info::native_path_to_posix_path): Call path_prefix_p.
- Call slashify on `pathbuf', not original argument.
-
- * syscalls.cc (chdir): Fix lifetime of converted path.
-
-Tue Jun 18 11:48:51 1996 Doug Evans <dje@canuck.cygnus.com>
-
- * configure.in (EXE_LDFLAGS): Explicitly link with newlib if necessary.
- * configure: Regenerated.
- * Makefile.in (EXE_LDFLAGS): Define.
- (FLAGS_TO_PASS): Add EXE_LDFLAGS.
- (config.status): New target.
- (utils-all): Depend on $(LIBNAME).
- * utils/Makefile.in (EXE_LDFLAGS): Define.
- (mount,umount,ps,kill): Link with $(EXE_LDFLAGS).
-
- * version.h (CYGWIN_DLL_VERSION_MINOR): Bump up to 1.
-
-Mon Jun 17 18:29:54 1996 Doug Evans <dje@canuck.cygnus.com>
-
- Improve pathname handling, first pass.
- * path.h (symlink): Renamed from link_cookie.
- (class path_conv): New member error.
- (path_conv::get_native): Renamed from get_dos, all uses updated.
- (path_conv::get_binary): Delete.
- (mount_info::{mangle,reverse_mangle}): Delete.
- (mount_item::posix_path_to_native_path): Renamed from mangle.
- (mount_info::native_path_to_posix_path): Renamed from reverse_mangle.
- (path_rules_enum): Define.
- * path.cc: Temporarily disable mixed-case and symlink handling.
- (mount_info::posix_path_p): New function.
- (mount_info::binary_native_path_p): Renamed from binary_dos_path_p.
- (path_conv::path_conv): Handle native path rules.
- (mount_item::{mangle,reverse_mangle}): Delete.
- (mount_info::posix_path_to_native_path): Renamed from mangle.
- (mount_info::native_path_to_posix_path): Renamed from reverse_mangle.
- (mount_info::from_registry): Set nmounts. Use MAX_PATH.
- (mount_info::{add,del}_item): Rewrite.
- (slashify): Renamed from flip_slash.
- (getcwd_inner): Make static. Don't convert to posix path if using
- native path rules.
- (file_exists): Delete.
- (addmntent,hasmntopt): Delete.
- (mount): Only update registry if mount succeeded.
- (umount): Only update registry if umount succeeded.
- (normalize_posix_path): Renamed from normalize_path. Pass in cwd.
- (cygwin32_{posix,native}_path_to_{native,posix}_path_keep_rel): Renamed
- from ...{unix/dos}....
- * dcrt0.cc (dos_argv_to_unix_argv): #ifdef out.
- (dll_crt0_1): Don't call it.
- * fhandler.cc (fhandler_base::open): Temporarily disable symlinks.
- * shared.cc (open_shared_file_map): New function.
- (shared_init): Call it.
- (shared_info::initialize): Fetch `path_rules' from registry.
- * shared.h (inited): Make private.
- (path_rules): New member.
- * spawn.cc: #include "shared.h".
- (spawn_guts, env var translation): Don't translate path names if
- using native path rules.
- * syscalls.cc (symlink): Delete (moved to path.cc).
- * cygwin.din (dump__5pinfo): Delete.
- (cygwin32_{posix,native}_path_to_{native,posix}_path_keep_rel): Renamed
- from ...{unix/dos}....
-
- * smallout.cc: Delete.
- * sdata.cc: Delete.
- * shared.cc (u,s,environ): Define here.
- * Makefile.in (glob/libglob.a): Depend on glob/glob.c, glob/fnmatch.c.
- (utils-all): New target.
- (DLL_OFILES): Delete smallout.o, sdata.o.
- (Makefile): Depend on cygwin.din.
- (WINSUP_H): Depend on syscalls.h.
-
- * configure.in (AC_CONFIG_SUBDIRS): Add bin.
- (AC_PROG_INSTALL): Call.
- * configure: Regenerated.
- * utils/{Makefile.in,configure.in,configure}: New files.
- * utils/{kill.cc,mount.cc,ps.cc,umount.cc,termcap}: New files.
- * Makefile.in (UTILS_ALL): Define.
- (all): Depend on $(UTILS_ALL).
- (utils-all): New target.
-
- * dcrt0.cc (recur): Make no-op to see what happens.
- (globify): Don't call glob if unnecessary.
- Check return code from glob.
- (api_fatal): New function.
- * fhandler.cc (fhandler_base::read): Dump first few chars read.
- (fhandler_base::get_execable): New function.
- (fhandler_base::fstat): Use it.
- (fhandler_base::fhandler_base): Init execable_p.
- (fhandler_disk_file::fhandler_disk_file): Delete execable_p.
- (fhandler::{get,set}_execable_bit): Delete.
- (fhandler_disk_file::{get,set}_execable_bit): Delete.
- * fhandler.h (class fhandler): Delete {get,set}_execable_bit.
- (class fhandler_base): New member execable_p.
- New member fn get_execable.
- * fork.cc: Simplify/cleanup.
- (cygwin_fork_helper1): Use MAX_PATH, not MAXPATHLEN.
- * pinfo.cc (pinfo::dump): Delete.
- * pproc.cc (per_process::set_envname): Delete.
- * strace.cc (smallout::do_pline): Delete.
- * syscalls.h (readlink): Third arg is an int.
- * winsup.h (class pinfo, member progname): Use MAX_PATH.
- (class pinfo, member dump): Delete.
- (class smallout): Delete.
- (smallout): Delete.
- (class per_process, member set_envname): Delete.
- (file_exists): Delete.
- (api_fatal): Declare.
- * Makefile.in (LIB{C,CXX}FLAGS_FOR_TARGET): Delete, use {C,CXX}FLAGS.
- (FLAGS_TO_PASS): Define.
- (glob/libglob.a): Delete duplicate entry.
-
- * syscalls.cc (_sbrk): Update u->size when heap is grown.
-
- * hinfo.cc (hmap_init_per_process): Ensure stdout's handle != stderr's.
-
-Fri Jun 14 06:32:13 1996 Doug Evans <dje@canuck.cygnus.com>
-
- * register.h, registry.cc: Whitespace cleanup.
-
-Thu Jun 13 20:57:28 1996 Doug Evans <dje@canuck.cygnus.com>
-
- * Makefile.in (install): Install cygwin.dll in $(bindir).
-
-Tue Jun 11 13:46:17 1996 Geoffrey Noer <noer@cygnus.com>
-
- * fhandler.cc: lseek is now only binary mode, interpret control
- z characters as EOF when reading from a file. Reformatted some
- of the code (cleaned up line spacing, etc.)
-
-Tue Jun 11 09:50:09 1996 Jason Molenda (crash@kyriath.cygnus.com)
-
- * path.cc (nofinalslash): move it so it is next to its friends
- flip_slash and backslashify.
-
-Mon Jun 10 18:57:03 1996 Jason Molenda (crash@kyriath.cygnus.com)
-
- * path.cc (*): Pretty printing.
- (unix_path_to_dos_path_with_rel): use "dosnamein" and "unixnameout"
- instead of "path" & "real_path".
- (dos_path_to_unix_path_keep_rel): delete obsolete code.
- (mount_item::mangle): use "unixnamein" and "dosnameout" instead of
- "unixname" and "dosname".
- (mount_info::mangle): use "unixnamein" and "dosnameout". Remove
- obsolete code.
- * path.h (mount_item): Update prototypes, add comment.
- (mount_info): Update prototypes.
-
-Mon Jun 10 17:05:23 1996 Jason Molenda (crash@kyriath.cygnus.com)
-
- * path.cc (mount_item::reverse_mangle): Pretty printing,
- add a bit to the comment.
- (getcwd_inner): use MAX_PATH not MAXPATHLEN.
- (normalize_path): use MAX_PATH not MAXPATHLEN.
- (link_cookie::follow): use MAX_PATH not MAXPATHLEN.
-
-Mon Jun 10 15:36:32 1996 Geoffrey Noer <noer@cygnus.com>
-
- * Makefile.in: changed $(DOC) so it doesn't include html
- files; made a new info-html target that does the html
- versions of the docs. Since most customers don't have texi2html
- installed, the make shouldn't fail because of this.
- * configure: regenerated with autoconf 2.8
-
-Sun Jun 9 17:10:37 1996 Doug Evans <dje@canuck.cygnus.com>
-
- * version.c: Deleted.
- * version.h: New file.
- * winsup.h (VERSION): Deleted.
- (class per_process): Add version_major, version_minor. Delete version.
- * registry.cc: #include "version.h".
- (reg_session::reg_session): Update.
- * libccrt0.cc: #include "version.h"
- (cygwin_crt0): Delete setting of version, set magic_biscuit to 0.
- Set version_major, version_minor.
- * dcrt0.cc: #include "version.h".
- (cygwin_dll_version_{major,minor}): New static locals.
- (dll_crt0_1): Rewrite app/dll compatibility test.
- * Makefile.in (LIBCOS): Delete version.o.
- (DLL_OFILES): Delete version.o.
- (dcrt0.o,libccrt0.o,registry.o): Depend on version.h.
-
- * exceptions.h: New file.
- * exceptions.cc: Massive cleanups (still lots more to go).
- #include "exceptions.h".
- (init_exceptions): Renamed from __init_exceptions. New argument of
- pointer to exception handler list entry.
- (init_exception_handler): Renamed from init_thread_exceptions.
- Rewrite based on info from Onno Hovers <onno@stack.urc.tue.nl>.
- (ppc descriptor_to_{function,gotattr}): Make static.
- (i386 __stack_trace): Fix test for top of stack.
- * dcrt0.cc: #include "exceptions.h".
- (dll_crt0_1): Exception handler list entry must live on stack.
- * winsup.h (class pinfo): Delete member myp.
- * syscalls.h (struct exception_list): Delete.
- (__really_exit, __init_exceptions): Delete.
- * Makefile.in (dcrt0.o,exceptions.o): Depend on exceptions.h.
-
-Fri Jun 7 17:49:28 1996 Jason Molenda (crash@phydeaux.cygnus.com)
-
- * dcrt0.cc (conv_path_names): Add GCC_EXEC_PREFIX.
-
-Fri Jun 7 14:38:05 1996 Doug Evans <dje@canuck.cygnus.com>
-
- * Makefile.in (CC_FOR_TARGET,LD,DLLTOOL): Define.
- (AR,RANLIB): Set via configure.
- * configure.in (AR,LD,DLLTOOL): Set.
- (AC_PROG_RANLIB): Call.
- * configure: Regenerated.
-
-Thu Jun 6 12:11:23 1996 Kim Knuttila <krk@cygnus.com>
-
- * dcrt0.cc (dll_crt0_1): Removed reference to reent_data._next.
-
-Tue Jun 4 15:52:29 1996 Geoffrey Noer <noer@cygnus.com>
-
- * include/winkernel.h: fixed typo
-
-Tue May 28 13:08:25 1996 Doug Evans <dje@canuck.cygnus.com>
-
- * syscalls.cc (_sbrk): Fix test of return value from VirtualAlloc.
- Delete lincr, make incr signed, and use only it. Misc. minor cleanup.
-
-Thu May 23 17:31:57 1996 Geoffrey Noer <noer@cygnus.com>
-
- sac diffs applied:
- * path.h: change MAXMOUNTS to 30 instead of 20
- * sysdef/i386/rpcndr.def: add "none" to end of file
- * fhandler.cc: fix memset call to say sizeof (*buf) instead
- of sizeof (buf).
- * include/winuser.h: define MDIS_ALLCHILDSTYLES
- * Makefile.in: entry to build glob/libglob.a:
-
-Thu May 23 10:38:43 1996 Doug Evans <dje@canuck.cygnus.com>
-
- * fhandler.h (class fhandler_base): Make `name' private and shrink
- to 32 bytes.
- (set_name): Declare.
- * fhandler.cc (fhandler::set_name): New function.
- (fhander_base::open): Call it.
- (fhander_base::init): Call it.
- (fhandler_tty::ttyname): Call get_name instead of accessing `name'
- directly.
-
- * dcrt0.cc (dll_crt0_1): Call ExitProcess instead of exit if
- DLL and APP are out of sync.
-
-Thu May 16 03:07:18 1996 Mark Eichin <eichin@cygnus.com>
-
- * fhandler.cc (FakeReadFile): new function. Interface like
- ReadFile, only called from fhandler_console_in::read, calls
- ReadFile unless we're really reading from STD_INPUT_HANDLE and
- with ENABLE_LINE_INPUT turned off, in which case we use
- ReadConsoleInput instead. When using ReadConsoleInput, always read
- all available events, but only block if we don't get at least one
- actual character. This would be the place to implement FIONBIO on
- the console tty, which doesn't actually exist yet.
- (dbg_input_event): copied from select.cc, debugging code to show
- detail of what events we're actually getting.
- (ioctl): off-by-one on window size.
-
-Wed May 15 18:11:16 1996 Jim Wilson <wilson@chestnut.cygnus.com>
-
- * fhandler.h (class fhandler_base): Use MAXPATHLEN not 100 for size
- of array name.
-
-Wed May 15 11:14:46 1996 Doug Evans <dje@canuck.cygnus.com>
-
- * fork.cc (cygwin_fork_helper1): More debugging printf's.
-
- * dcrt0.cc (num_ms_env_vars): Renamed from ms_env_arity.
- (build_argv): Renamed from fill.
- (compute_argc): Renamed from prepare.
- * libccrt0.cc (cygwin_statu): Make static.
- * pproc.cc (per_process::init): Move strace initialization from here,
- * strace.cc (per_process::strace_init): To here.
- Pass FILE_SHARE_WRITE to CreateFileA. Print error message if open
- of log file fails. Create mutex for trace messages.
- (__sys_printf): Always write to end of disk files. Use mutex.
- (d): Delete.
- * winsup.h (class per_process): Add strace_init. Reorganize.
- `run_ctors' renamed to `run_ctors_p'. New member `trace_mutex'.
- (d): Delete.
- (PATH_MAX): Delete.
-
- * Makefile.in: Add header file dependencies.
-
- * dcrt0.cc (_exit): Add debugging printf.
- * shared.h (class shared_info): Rename member mutex_a to fork_mutex.
- * fork.cc (cygwin_fork_helper1): Update.
- Return with error if process slot unavailable.
- Set errno and release fork_mutex if failed because of split heap.
- * shared.cc (shared_info::terminate): Update.
- (shared_info::initialize): Update.
-
-Tue May 14 14:59:32 1996 Doug Evans <dje@canuck.cygnus.com>
-
- * fork.cc (cygwin_fork_helper1): Avoid SIGSEGV if allocate_pid fails.
-
- * pproc.cc (per_process::init): Fix test.
-
- * winsup.h (): Rename member `parent' to `ppid'.
- * fork.cc (prepare_child): Update.
- (cygwin_fork_helper1): Likewise.
- * hinfo.cc (hmap_init_per_process): Likewise.
- (hinfo_vec::dup_for_fork): Fix message.
- (hinfo_vec::dup2): Fix args to debug_printf. Delete extra printf's.
- * pinfo.cc (pinfo_init_per_process): Update.
- (pinfo::dump): Likewise.
- (pinfo::init_self): Likewise.
- * pproc.cc (per_process::init): Open strace file in append mode.
- * smallprintf.c (__small_vsprintf): Support %p.
- * syscalls.cc (getppid): Update.
- * wait.cc (wait_for_any): Likewise.
-
-Mon May 13 13:45:36 1996 Mark Eichin <eichin@cygnus.com>
-
- * fhandler.cc (ioctl): fix TIOCGWINSZ handling: (1) check the
- error return (2) if we're trying on STD_INPUT_HANDLE, substitute
- STD_OUTPUT_HANDLE since GetConsoleScreenBufferInfo only works on
- console output (3) check srWindow for the *screen* size, instead
- of checking dwSize for the scroll buffer size.
-
- * include/sys/errno.h (ECONNABORTED): add another errno value.
- * net.cc (errmap): add ECONNABORTED case.
-
- * fhandler.cc (fstat): clear the *entire* stat buf, not just the
- first four bytes.
-
-Fri May 10 17:59:09 1996 Mark Eichin <eichin@cygnus.com>
-
- * select.cc: change most debugging statements to select_printf.
- (dbg_input_event): new function, prints an INPUT_RECORD via select
- printf.
- (polled): Don't sleep around WaitForMultipleObjects; let it have a
- 10ms timeout until we have time to test it with 0. If
- WaitForMultipleObjects says that STD_INPUT_HANDLE has data, use
- PeekConsoleInput to scan the available events. If the first one is
- not a *bKeyDown* with a non-zero *AsciiChar* then use
- ReadConsoleInput to rip it off the queue, and pretend it wasn't
- there, so that later calls to read (and thus ReadFile) don't block
- because they can't find any *real* input. (This could be optimized
- later to check the whole queue, and if there are *no* real input
- events, nuke them all.)
-
- * include/sys/strace.h (_STRACE_SELECT, select_printf): new printf
- category, because select needs a *lot* of work. STRACE=256 to use it.
-
- * fhandler.cc (fhandler_console_in::init): IGNCR can't work
- without major changes to deal with the interaction with select
- (which shouldn't wake up if IGNCR causes the whole input to be
- deleted...) so don't make it the default.
- (fhandler_console_out::tcgetattr, fhandler_tty::tcgetattr): don't
- set IGNCR based on get_r_binary either.
-
-Wed May 8 20:20:05 1996 Mark Eichin <eichin@cygnus.com>
-
- * times.cc (__to_clock_t): must cast dwLowDateTime to *unsigned*
- before adding it -- otherwise we may subtract it!
- (to_time_t): same.
-
-Wed May 8 18:21:28 1996 Mark Eichin <eichin@cygnus.com>
-
- * times.cc (corelocaltime): new function. Basic localtime from
- newlib, with no conversions.
- (gmtime): just calls corelocaltime.
- (localtime): uses GetTimeZoneInformation, biases to standard time
- first, then uses DaylightDate and StandardDate to figure out if
- we're in DST -- and calls corelocaltime a second time with the
- rebiased seconds, if we are.
- (times): add debug_printf statements which work around apparent
- compiler bug and 7+ minute error.
-
- * select.cc: revert to <sac>'s changes of 4/20 which were
- accidentally backed out on 4/24.
-
-Tue May 7 05:29:42 1996 Mark Eichin <eichin@cygnus.com>
-
- * times.cc (__to_clock_t): subtract out FACTOR, the difference
- between 1601 and 1970, just like to_time_t() does.
-
-Tue May 7 01:55:06 1996 Mark Eichin <eichin@cygnus.com>
-
- * times.cc (gmtime): new function. Use GetTimeZoneInformation to
- compensate ahead before calling localtime (since the newlib
- version doesn't know what timezone we're in.)
- (localtime): use SECSPERMIN, not 60, to show that we know what
- we're talking about.
-
- * net.cc (errmap): add WSAEADDRINUSE, WSAECONNREFUSED mappings.
-
-Sun May 5 00:45:59 1996 Mark Eichin <eichin@cygnus.com>
-
- * include/sys/socket.h: add recvfrom macro and cygwin32_recvfrom
- declaration. Remove htons/htonl misdeclarations as they collide
- with the macros in asm/byteorder.h.
-
- * include/asm/byteorder.h: enable the ntohl/ntohs declarations so
- we at least get the macro versions when we optimize, even if the
- library hooks aren't there.
-
-Wed Apr 24 23:42:49 1996 Steve Chamberlain <sac@dilithium.transmeta.com>
-
- * winsup.h (pinfo, pinfo_list): Remove dummy item.
- * fork.cc (*): Revert changes of Apr 2.
-
-Sun Apr 21 17:00:14 1996 Steve Chamberlain <sac@slash.cygnus.com>
-
- * wait.cc (wait_for_any): Fix the wait heuristic.
-
-Sat Apr 20 13:22:03 1996 Steve Chamberlain <sac@slash.cygnus.com>
-
- * Makefile.in (.cc.o): Pass -fno-rtti.
- * dcrt0.cc (globify): A single match is ok.
- * exceptions.cc (i386 call_handler): optimize.
- * fhandler.cc (fhandler_console_in::read): Handle ICRNL right.
- (*:get_name *:always_ready): New.
- * select.cc: Understand that console output doesn't signal when it's
- ready.
-
-Fri Apr 12 14:49:34 1996 Doug Evans <dje@canuck.cygnus.com>
-
- * Makefile.in (glob/libglob.a): Pass -I so glob.c finds right dirent.h.
-
-Wed Apr 10 16:13:30 1996 steve chamberlain <sac@slash.cygnus.com>
-
- * Makefile.in (glob/libglob.a): Call glob makefile correctly.
- * winsup.h (pinfo, pinfo_list): Reorder elements to avoid
- alignment bug in PPC gcc.
-
-Tue Apr 9 17:23:57 1996 steve chamberlain <sac@slash.cygnus.com>
-
- * dcrt0.cc (globify): Expand command line wildcards if
- run from dos prompt.
-
- * exceptions.cc (386 call_handler): More fumblings.
- * fhandler.cc (fhandler_base::stat): Initialize ino.
- (fhandler_console::open): Fix test for RDONLY.
- (fhandler_tty::stat): Set ino.
- (fhandler_console_out::vt100 stuff): More.
- * fork.cc: Lint.
- * pinfo.cc (pinfo::init_self): Don't bother to DuplicateHandles
- to get process info.
- * signal.cc (usleep): Get correct order of magnitude.
- * spawn.cc (spawn_guts): Turn of exception handling in
- parent of thing which execs.
- * syscalls.cc (stat): Look for <file> and <file.exe>.
- * wait.cc (wait_for_any): Keep waiting if WaitForMultipleObject
- returns invalid result.
-
-Tue Apr 2 12:45:35 1996 steve chamberlain <sac@slash.cygnus.com>
-
- * dcrt0.cc (conv_path_names): Add HOME.
- (dll_crt0_1): Use u->self->head_sp.
- * exceptions.cc (i386 call_handler): Rewritten, now almost works
- on win95.
- * fhandler.cc (fhandler_base::open): Calculate namehash.
- (fhandler_base::fstat): ^ name hash with file index low.
- * fork.cc (*): forkee/forkerr events moved from sinfo
- into pinfo.
-
-Fri Mar 29 16:35:02 1996 steve chamberlain <sac@slash.cygnus.com>
-
- * libcmain.cc: New.
- * winsup.h: restore and myp moved from per_process to pinfo class.
- * dcrt0.cc (dll_crt0_1): Cope with move.
- * exceptions.cc (init_thread_exceptions): Ditto.
- * signal.cc (sigprocmask): Ditto.
- * fork.cc (cygwin_fork_helper1): Don't fork if split_heap_p.
- * pinfo.cc (pinfo::clearout): Zero split_heap_p.
- * syscalls.cc (_sbrk): Cope with not being able to
- allocate contiguous chunks.
-
-
-Tue Mar 26 09:14:32 1996 steve chamberlain <sac@slash.cygnus.com>
-
- * exceptions.cc (__cygwin_exception_handler): re-export.
-
-Fri Mar 22 16:49:29 1996 Michael Meissner <meissner@tiktok.cygnus.com>
-
- * cygwin.din (__stack_trace): Export.
- (__cygwin_exception_handler): Ditto.
-
- * exceptions.cc (i386 exception handling): Move under appropriate
- x86 #ifdefs. Use the macro HAVE_INIT_THREAD_EXCEPTIONS to be
- whatever a machine needs to do to initialize exceptions in this
- thread. Nop for the PowerPC right now.
- (__stack_trace): Make it a "C" function so there is no name
- mangling, and export it.
- (call_handler): Split by architecture before the function, rather
- than inside it. First stab at PowerPC exception handling.
- (__cygwin_exception_handler): Rename from ehandler3, and export
- it. Add more status -> signal mappings.
- (ctrl_c_handler, CTRL_LOGOFF_EVENT): Map to SIGHUP, not SIGQUIT.
- (__stack_trace): Split into separate machine dependent functions,
- rather than #ifdef'ing inside of a common function. Make the
- PowerPC messages clearer.
-
-Mon Mar 18 13:27:05 1996 Michael Meissner <meissner@tiktok.cygnus.com>
-
- * include/winkernel.h (CreateThread): Correctly declare function
- pointer argument.
-
- * misc.c (wprintf): Convert to use vprintf and fix warnings.
- (tgetent): Declare to return int to fix warnings.
- (vhangup): Declare to return int to fix warnings. Return -1 also.
-
- * include/winbase.h (UnhandledExceptionFilter): Declare.
-
-Tue Mar 12 12:56:28 1996 Doug Evans <dje@charmed.cygnus.com>
-
- * include/winkernel.h (FlushFileBuffers): Declare.
-
-Tue Mar 12 11:16:32 1996 Michael Meissner <meissner@tiktok.cygnus.com>
-
- * exceptions.cc (dump_status): Make columns line up for PowerPC.
- (call_handler): Right now, call exit(255) for the PowerPC.
-
- * strace.cc (__sys_printf): Call FlushFileBuffers after writing
- out the file to make sure it really gets flushed.
-
- * include/winkernel.h (PowerPC CONTEXT): Add fields returned if
- CONTEXT_DEBUG_REGISTERS is set.
-
-Sun Mar 10 15:31:17 1996 Steve Chamberlain <sac@slash.cygnus.com>
-
- * strerror.cc, syslog.cc, net.cc: New files.
- * cygwin.din: Add new net functions.
- * dcrt0.cc (dll_crt0_1): Fix call to build argv[0].
- * fhandler.cc (fhandler_base::open): Tidy.
- * fhandler.h: Add net classes.
- * hinfo.cc (hinfo_vec::build_fhandler): Add tape stuff.
- * path.cc (*::mangle, *::reverse_mangle): Fix.
- (mount_info::init): No trailing / now.
- * select.cc (*): Rewrite.
- * spawn.cc (spawn_guts): Fix leak.
- * syscalls.cc (_sbrk): Keep working until memory really fills up.
-
-Tue Feb 20 16:53:24 1996 Steve Chamberlain <sac@slash.cygnus.com>
-
- * dcrt0.cc (dll_crt0_1): Get version from the header.
- * fhandler.cc (CHUNK_SIZE): New.
- (fhandler_base::read, fhandler_base::write): CRLF conversion
- rewritten.
- path.cc (path_conv::path_conv): Initialize mixed, binary and silent.
- * smallprint.c (__small_vsprintf): Add 'c' option.
- * wait.cc (wait_found): Close child handles.
-
-Mon Feb 19 09:11:57 1996 Michael Meissner <meissner@tiktok.cygnus.com>
-
- * Makefile.in (real-headers): Eliminate real-headers dependency on
- mspatches/*.patch, since you can't be guaranteed that it exists.
-
-Fri Feb 16 14:24:47 1996 Michael Meissner <meissner@tiktok.cygnus.com>
-
- * exceptions.cc (dump_status): On the PowerPC, dump all of the
- integer registers.
-
- * uname.c (uname): Don't assume that the only two NT systems are
- i386 and PowerPC.
- * exceptions.cc (call_handler): Ditto.
- (dump_status): Ditto.
-
-Thu Feb 15 18:20:33 1996 Steve Chamberlain <sac@slash.cygnus.com>
-
- * cygwin.din (__empty): Add.
- * dcrt0.cc (dos_argv_to_unix_argv): New.
- (check, onetimecheck): New.
- * exceptions.cc (ehandler3): Always show backtrace
- if exception failed.
- * fhandler.cc (*::open): Removed dos_path argument.
- (fhandler_base::fstat): Use nFileIndexLow as the inode
- value.
- * hinfo.cc (init_std_file_from_handle): Don't default
- to binary.
- * paths.cc (*): Use new registry classes.
- * registry.cc (*): Rewritten.
- * syscalls.cc (open): Call fhandler->open without
- the dos filename arg.
-
-Sat Feb 10 08:18:45 1996 Michael Meissner <meissner@tiktok.cygnus.com>
-
- * configure.in (ALLOCA for powerpc): Add __allocate_stack.
-
-Wed Feb 7 16:41:18 1996 Steve Chamberlain <sac@slash.cygnus.com>
-
- Release-B13
-
- * malloc.cc (export_*): New. Changed the way that malloc
- stubs are used.
- * cygwin.din: Export the export_* stuff as malloc, realloc and free.
- * path.cc (link_cookie::create): Keep cookie filenames in unix
- format.
- (reverse_mangle): Clean up.
- (readlink): Ditto.
- (qfunc): Sort by name too.
- * spawn.cc (spawn_guts): Handle zero length arg.
- Only set errno when it's not 0.
- * Makefile.in: Build new doc.
- * fhandler.cc (fhandler_base::fstat): Round up block used.
- * path.cc (escape_char): Now it's ^.
- * syscalls.cc (errmap): ERROR_INVALID_NAME yields ENOENT.
- (chown): Returns 0.
- (sbrk): Clean up.
- (_unlink): Only try and DeleteFile once.
-
-Mon Feb 5 19:15:44 1996 Steve Chamberlain <sac@slash.cygnus.com>
-
- * dcrt0.cc (dll_crt0_1): Build env string into static buffer.
- * dirsearch.c (opendir): Stat on unix pathname.
- * paths.cc (*): Support for mixed case filenames.
-
-Sun Feb 4 15:55:58 1996 Steve Chamberlain <sac@slash.cygnus.com>
-
- * *.cc: Lint.
- (conv_path_names): New.
- (dll_crt0_1): Use conv_path_names list.
- * fctnl.cc (F_DUPFD): Look from the fd forward.
- * fhandler.cc (fhandler_base::open): Understand binary modes.
- (fhandler_console_in::init): Call tcsetattr with reasonable start
- values.
- * spawn.cc (spawn_guts): Use conv_path_names.
- (queue_file_deletion): Deleted.
- (unlink): Use new queue file stuff.
- * delqueue.cc, delqueue.h: New files.
- * shared.h: New file.
-
-Wed Jan 31 11:12:24 1996 Steve Chamberlain <sac@slash.cygnus.com>
-
- * crt0.cc: Hacks to probe out ppc stack.
- * exceptions.cc (ehander3): Don't use 386 context info on the ppc.
- * path.cc (mount_info::mangle): Turn /usi or /usp into /usr.
- * uname.c (uname): Change sysname and get ppc name right.
-
-Fri Jan 26 15:47:31 1996 Steve Chamberlain <sac@slash.cygnus.com>
-
- * pproc.cc (per_process::init): Cope when no memory is needed.
- * Makefile.in, configure.in: Cope with config directory.
- * setjmp.c, longjmp.c: Moved into config/i386.
- * config/ppc/setjmp.S, config/ppc/longjmp.S: New.
-
-Fri Jan 26 14:57:33 1996 Jason Molenda (crash@phydeaux.cygnus.com)
-
- * Makefile.in (DLL_OFILES): removed ppc-stub.o
- ppc-stub.c: Removed.
- configure: regenerated with autoconf 2.7.
-
-Fri Jan 26 11:18:07 1996 Kim Knuttila <krk@cygnus.com>
-
- * Makefile.in (DLL_OFILES): added ppc-stub.o
-
-Thu Jan 25 09:33:24 1996 Steve Chamberlain <sac@slash.cygnus.com>
-
- * malloc.cc (malloc, free, realloc): Hack for ppc.
-
-Wed Jan 24 20:22:42 1996 Steve Chamberlain <sac@slash.cygnus.com>
-
- * cygwin.dll (loadup_dll): Remove.
- * dcrt0.cc: lint.
- * fhandler.* (*): Move to new class structure.
- * hinfo.cc: Use new fhandler glue.
- * libcfork.cc: Cope with ppc naming convention.
-
-Mon Jan 22 10:33:53 1996 Steve Chamberlain <sac@slash.cygnus.com>
-
- * fhandler.h, hinfo.h: New files.
- * winsup.h: Split from here.
- * configure.in: Set i386 entry point correctly.
- * fhandler.cc (fhandler_normal:open): .com files
- are executable too.
- * hinfo.cc (init_std_file_from_handle): Inspect
- master_fmode_binary.
- * misc.cc (wcscmp, wcslen): New.
- * dcrt0.cc (probe): Change way a forkee's stack is allocated.
- * pproc.cc (per_process::init): Initialize using heap chunk.
- * shared.cc (shared_info::initialize): Initialize heap chunk.
- * syscalls.cc (_sbrk): If current chunk is used, allocate another.
- * wait.cc (wait_found): Fix exit code.
-
-Thu Jan 18 10:09:45 1996 Steve Chamberlain <sac@slash.cygnus.com>
-
- * fhandler.cc (fhandler_normal::open) Don't test a
- com port to see if it's executable.
- * configure.in, cygwin.din: More powerpc configury.
-
-Wed Jan 17 16:25:36 1996 Steve Chamberlain <sac@slash.cygnus.com>
-
- * configure.in, Makefile.in: Build powerpc stuff.
- * hinfo.cc (build_fhandler): Use new with placement.
- (fhandler::operator new): New.
-
-Wed Jan 3 18:18:57 1996 steve chamberlain <sac@slash.cygnus.com>
-
- * select.cc: New file.
- * Makefile.in: Cope with it.
-
-Tue Jan 2 08:58:58 1996 steve chamberlain <sac@slash.cygnus.com>
-
- * version.c: New file.
- * Makefile.in: Cope with it.
- * cygwin.def (setgrent, cuserid, setpgrp, mount, setmntent, endmntent, umount): New.
- * dcrt0.cc: Remove obsolete vfork stuff.
- (dll_crt0): Change way environ is built. Check that app is built
- with correct version of dll.
- * dirsearch.cc, exceptions.cc: Lint.
- * fhandler.cc: Lint. Most of termios.c moved into here.
- (fhandler_console:*): New.
- * hinfo.cc (hinfo_vec::init_std_file_from_handle): Open stdfiles as consoles
- if possible.
- * libccrt0.cc: Lint.
- * malloc.cc: More comments.
- * path.cc (*): Cope with mount handling.
- * registry.cc: Lint.
- (reg_session): New.
- * shared.cc: Lint.
- * signal.cc (usleep): New.
- * spawn.cc: Lint. Removed vfork stuff.
- * stubs.c (getmntent, endgrent): Deleted.
- * syscalls.c (__seterrno): Now takes arguments.
- * termios.c: Much moved info fhandler.c
- * times.cc (utime, utimes): New.
- * uinfo.c (cuserid): New.
diff --git a/winsup/cygwin/ChangeLog-1997 b/winsup/cygwin/ChangeLog-1997
deleted file mode 100644
index 33b001154..000000000
--- a/winsup/cygwin/ChangeLog-1997
+++ /dev/null
@@ -1,2800 +0,0 @@
-Wed Dec 31 15:00:32 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * hinfo.cc (hinfo_vec::find_unused_handle): correct
- previous patch -- need to fix up vec[i].h pointers
-
-Wed Dec 31 14:13:22 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * regexp/Makefile.in (tooldir): New variable.
- (install): Install regexp.h.
-
-Tue Dec 30 19:52:46 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * net.cc (inet_netof): New function.
- (inet_makeaddr): New function.
- * cygwin.din: Export inet_netof and inet_makeaddr.
-
-Tue Dec 23 17:45:07 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * path.cc (current_directory_name): New static variable.
- (current_directory_posix_name): New static variable.
- (getcwd_inner): Cache the directory name.
- (chdir): Move here from syscalls.cc. Clear directory cache
- variables.
- * syscalls.cc (chdir): Remove; now in path.cc.
-
- * environ.cc (setenv): Add cast to avoid warning.
-
- * security.cc (get_file_attribute): Make file parameter a pointer
- to const char.
- (set_file_attribute): Likewise.
- * winsup.c (get_file_attribute): Update declaration.
- (set_file_attribute): Likewise.
-
- * path.cc (path_conv): Don't pass the root directory to
- symlink_check_one.
-
-Mon Dec 22 16:34:40 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * path.cc (realpath): Use path_conv to resolve symlinks.
-
- * path.cc (path_conv::path_conv): Rewrite completely to convert to
- win32 path first and then check for symlinks element by element.
- (symlink_check_one): New static function based on old
- symlink_check_worker, but without path conversion.
- (path_prefix_p): Move definition before all uses.
- (skip_n_slashes, symlink_expand, symlink_follow): Remove.
- (symlink_check_worker, symlink_check): Remove.
- (readlink): Rewrite to use new symlink_check_one.
- (unmixedcaseify, mixedcaseify): Comment out.
- * path.h (symlink_check, symlink_follow): Don't declare.
- * fhandler.cc (open): Don't pass O_NOSYMLINK to path_conv. Set
- errno from path_conv if it fails.
- * dirsearch.cc (opendir): Check errors from path_conv, and set
- errno appropriately.
- * times.cc (utimes): Likewise.
- * syscalls.cc (_unlink, _link, mkdir, rmdir, chdir): Likewise.
- (chmod, _rename): Likewise.
- (_stat_worker): Don't just pass nofollow to _open, but base
- whether to pass O_NOSYMLINK on whether nofollow is set.
- (lstat): Pass 1, not O_NOSYMLINK, to _stat_worker.
- * strerror.cc (strerror): Add ELOOP.
-
-Thu Dec 18 12:30:47 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * fhandler.h (class fhandler_base): Remove inline definitions of
- tcflush, tcsendbreak, tcdrain, tcflow, tcsetattr, tcgetattr,
- tcsetpgrp, and tcgetpgrp, so that we can set proper errno values.
- (class fhandler_tty): Add pgrp_ field, and virtual tcgetpgrp and
- tcsetpgrp functions.
- * fhandler.cc (fhandler_base::tcflush): New function.
- (fhandler_base::tcsendbreak): New function.
- (fhandler_base::tcdrain): New function.
- (fhandler_base::tcflow): New function.
- (fhandler_base::tcsetattr): New function.
- (fhandler_base::tcgetattr): New function.
- (fhandler_base::tcsetpgrp): New function.
- (fhandler_base::tcgetpgrp): New function.
- (fhandler_tty::fhandler_tty): Initialize pgrp_.
-
- * tty.cc (tcsetpgrp): Set errno correctly on failure.
-
- * include/sys/termios.h (CBAUD): Change to 037.
- (B57600, B115200): Change to values that can fit in a speed_t.
-
- * spawn.cc (spawn_guts): Set errno correctly if we can't find the
- executable.
-
-Mon Dec 15 16:40:07 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from msnyder@cygnus.com (Michael Snyder):
- * heap.cc (_sbrk): handle situation where newalloc < incr
-
-Mon Dec 15 16:40:07 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- Allow Cygwin32 to terminate process even when in a blocking
- winsock call.
- * exceptions.cc (call_handler): call to WSACancelBlockingCall()
- removed.
- (sighandle): call WSACleanup() before exiting the process to
- cancel blocking winsock calls.
- * include/mywinsock.h: add proto for WSACleanup().
-
-Mon Dec 15 16:40:07 1997 Geoffrey Noer <noer@cygnus.com>
-
- * Makefile.in: compile .cc files with -fno-exceptions to
- decrease dll size and increase execution speed a little.
-
-Mon Dec 15 16:40:07 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from cgf@bbc.com (Chris Faylor):
- * tty.cc (do_input): Detect CTRL-T as a special case when
- STRACE_CACHE is active. Dumps the strace cache to disk.
- * console.cc (fhandler_console::read): Detect CTRL-T as a special
- case when STRACE_CACHE is active. Dumps the strace cache to disk.
-
-Sat Dec 13 15:12:53 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * fork.cc: Include <malloc.h>.
- (cygwin_fork_helper1): Call __malloc_copy after copying the stack
- and heap to the child.
-
-Thu Dec 11 15:14:40 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from cgf@bbc.com (Chris Faylor):
- * sigproc.cc (proc_subproc): Remove over-enthusiastic test for
- process handling readiness or proc_wait will loop attempting to
- handle a dying subprocess when signal handlers are not ready.
- * fork.cc (cygwin_fork_helper1): Reorganize to ensure that a
- forked process is capable of receiving signals when fork()
- returns.
-
-Wed Dec 10 15:43:37 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * include/sys/termios.h (IXANY): Correct value.
- (PARMRK): Define again.
-
-Wed Dec 10 00:05:23 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from cgf@bbc.com (Chris Faylor):
- * dcrt0.cc (dll_crt0_1): Move start time initialization to a more
- logical place (pinfo_init).
- (do_exit): Reorganize to attempt to solve races when a cygwin
- process occupies two windows pids (i.e., an execed process).
- * exceptions.cc (lock_cs): Fix erroneous WFSO logic.
- (sighandle): Use new method for determining if process was
- initiated via fork.
- (events_terminate): Do not close pinfo_mutex. Allow automatic
- close by ExitProcess to lengthen the time that the pinfo structure
- is locked, minimizing races between an exiting child and a
- potentially exiting parent.
- * hinfo.cc (hmap_init): Use new method for determining if process
- was initiated via fork.
- (hinfo_vec::de_linearize_fd_array): Fix a typo in a comment.
- * pinfo.cc (clearout): Remove this function. Handled in
- allocate_pid.
- (pinfo_init): Move start_time setting here from dll_crt0_1.
- Remove call to init_self in favor of adding three additional lines
- of code.
- (pinfo_list::operator []): Implement a very simple hashing
- scheme for pid lookup.
- (lpfu): New routine controlled by DEBUGGING conditional. When
- DEBUGGING is activated, lpfu returns more information about the
- state of a timed out pinfo_mutex.
- (pinfo_list::get_empty_pinfo): Remove function. Move
- functionality to allocate_pid.
- (allocate_pid): Implement a (very) simple hashing scheme for
- finding an available pid. Take advantage of reorganized pinfo
- structure to zero all pertinent fields with one memset.
- (pinfo::record_death_nolock): Don't bothering zeroing
- inconsequential stuff.
- (pinfo::record_death): Leave pinfo_mutex locked with the
- understanding that this function will be called just prior to
- exiting the process. This minimizes a race between a child which
- is exiting at nearly the same time as its parent.
- * sigproc.cc: Reformat function calls.
- (sigproc_init): Clear new PID_INITIALIZING flag to indicate that
- a (possibly execed) process is now capable of receiving signals.
- (sig_send): Be more defensive in determining if a signal can be
- sent to myself or suffer problems with execed processes.
- (sigproc_terminate): Wait for sig_proc to exit to ensure that
- all pending signals have been handled. Use new 'proc_terminate'
- function to terminate the subprocess handling thread.
- (allow_sig_dispatch): Don't bother blocking signals if signal
- handling isn't active in this process yet.
- (block_sig_dispatch): Don't bother blocking signals if signal
- handling isn't active in this process yet.
- (sig_proc): Use sig_loop_wait variable to control wait time for
- signal semaphores. Uncouples this wait from wait_subproc.
- Perform signal cleanup here on thread termination.
- (proc_exists): More accurate tests to determine if a process
- really exists.
- (proc_register): Remove this function in favor of a macro.
- (proc_subproc): More stringent test for being "ready" to process
- subprocesses. Add more common initialization to PROC_ADDCHILD.
- Remove PROC_EXIT in favor of a separate function.
- (proc_terminate): New function. Replaces PROC_EXIT functionality
- in proc_subproc. Terminates subproc handler thread.
- (stopped_or_terminated): use lock_pinfo_for_update when modifying
- child stopsig status or suffer a race.
- (wait_subproc): Save sig_proc thread handle away for
- synchronization when exiting. Set up 'i_am_alive' mutex inherited
- by childen. Child's inability to lock this mutex means that the
- parent is still alive and processing children. Use proc_loop_wait
- to control WFMO. Clean up events queue on thread exit.
- (zap_subproc): Clear out pinfo structure for a child.
- * sigproc.h: Remove PROC_EXIT constant. Remove obsolete
- proc_register declaration.
- (alive_parent): New macro to determine if a parent is still alive.
- * spawn.cc (spawn_guts): Fix a comment typo. Use proc_terminate
- to terminate all subprocess handling prior to an exec. Use new
- method for determining if this process was started via a fork.
- Attempt to clean up races between execed process, its parent, and
- the execed child.
- * winsup.h (pinfo): Add a new handle indicating that a parent is
- alive. This should be a foolproof way of determining if a parent
- has gone away so that a child will know whether to remove itself
- from the pinfo table.
- Reorganize the structure in such a way that items to be zeroed
- are grouped together at the beginning for more efficient zeroing
- in allocate_pid.
- Add a new PID_* constant.
- New lock_pinfo_for_update macro for use when debugging cygwin.
-
-Wed Dec 10 00:05:23 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- Change the way to inherit fd table on spawn/exec calls.
- Use STARTUPINFO structure to pass an fd table to a child process
- instead of shared memory area. This is undocumented, but is used
- by MSVC runtime. The desktop inheritance code added again,
- otherwise user32.dll will fail to initialize after sexec calls.
- * pinfo.cc (pinfo_init): delinearize fd array from STARTUPINFO
- structure instead of call to copy_shared_fd_table.
- * shared.cc (create_shared_fd_mapping_name): remove
- (create/copy_shared_fd_table): remove
- * spawn.cc (spawn_guts): use lp(cb)Reserved2 fields of STARTUPINFO
- to pass fd table to a child. Remove call to
- create_shared_fd_table. Inherit window station/desktop on sexec
- calls.
- * winsup.h: remove prototypes for create/copy_shared_fd_table.
-
-Fri Dec 5 18:57:42 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from cgf@bbc.com (Chris Faylor):
- * kill.cc (main): Report error if kill() fails. Minor reformat.
- * ps.cc (main): Only use month/day in start time when starting
- time is > 24 hours in the past, not when it occurs yesterday.
-
-Fri Dec 5 15:54:41 1997 Geoffrey Noer <noer@cygnus.com>
-
- * fcntl.cc (_fcntl): reformat
- * fhandler.cc (fhandler_tty::open): new, need special open for
- ttys. In addition to calling fhandler_base::open, check
- flags to handle blocking vs. non-blocking I/O. Should
- initialize tty to standard state (9600 bits/sec - 8 - 1 with
- no flow control) but this code needs more work still. Ifdef
- out for now.
- (fhandler_tty::tcsendbreak): new
- (fhandler_tty::tcdrain): new
- (fhandler_tty::tcflow): new
- (fhandler_tty::tcsetattr): add support for action arg. Use
- a DCB struct to hold the values we will set. First call
- GetCommState to get the current state, then reassign values
- based on the contents of the termios struct. Handle the
- case where t->c_ospeed is set to B0, otherwise set state.BaudRate.
- Set all the other DCB struct values appropriately, based on
- the contents of the termios struct.
- (fhandler_tty::tcgetattr): do the inverse of tcsetattr.
- Call GetCommState to get the current state and use this to set
- the appropriate termios struct values.
- * termios.cc: reformat
- (tcsendbreak): implement -- add duration arg,
- call fhandler tcsendbreak as appropriate
- (tcdrain): implement -- call fhandler tcdrain as appropriate
- (tcflow): implement -- call fhandler tcflow as appropriate
- * fhandler.h: add new tc* protos
- * include/sys/termios.h: correct values of iflag bits,
- define CRTSXOFF and CRTSCTS, CBAUD, B57600 and B115200.
- Add protos for tc* functions.
-
-Wed Nov 26 17:06:17 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * spawn.cc (perhaps_suffix): resolve symlinks to .exes.
-
-Mon Nov 24 17:10:49 1997 Geoffrey Noer <noer@cygnus.com>
-
- * cygwin.din: remove crypt
- * syscalls.cc (crypt): remove crypt stub
-
-Sun Nov 23 17:34:42 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * spawn.cc (spawn_guts): save the path of the script itself,
- use the saved path while building the command line to execute.
-
-Thu Nov 20 22:58:23 1997 Geoffrey Noer <noer@cygnus.com>
-
- * stubs.cc: delete file, move unimplemented stubs to the
- files in which they would normally belong.
- * grp.cc (setgrent): implement (was in stubs.cc)
- * syscalls.cc: move regfree, mknod, setgid, set(e)uid, sync,
- crypt, and PPC __chkstk/_alloca/dll_entry stubs here from stubs.cc
- (sync): just return zero for now instead of -1
- (crypt): return -1 instead of 0
-
-Thu Nov 20 22:41:57 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from cgf@bbc.com (Chris Faylor):
- * spawn.cc (spawn_guts): A premature close of the spawned filehandle
- was possible when reparenting an exited process. Fix this.
- * dcrt0.cc (do_exit): Only do minimal cleanup if "pid focus"
- has moved to another windows process or the other process will
- become confused.
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * sigproc.cc (getsem): set errno to EPERM if existing semaphore
- cannot be opened.
- (wait_subproc): allow access to signal semaphores to process's
- owner only except for SIGCHLD (needed for SIGCHLD delivery after
- sexecXX calls).
-
-Thu Nov 20 00:52:58 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from cgf@bbc.com (Chris Faylor):
- * syscalls.cc (hash_path_name): Ignore trailing backslash when
- calculating pathname hash.
- * hinfo.cc (hinfo_vec::de_linearize_fd_array): Set use_tty
- if /dev/ttyn is detected in the shared_fd_table. Before this
- change, executing "set CYGWIN_TTY=1", "bash", "unset CYGWIN_TTY",
- "/bin/pwd" would result in pwd printing nothing because
- the de_linearize code would use the wrong fhandler_xxx when
- reading from the buffer inherited from the parent process.
- * cygwin.din: Add new ctermid function for export.
- * syscalls.cc (ctermid): New function
- * exceptions.cc (call_handler): If called during a P_OVERLAY
- spawn, merely set appropriate flags and return. The spawn
- code will then clean up and exit.
- * sigproc.cc (proc_exists): Reorganize to better detect defunct
- processes. Don't clean up pinfo if process has a parent since the
- parent should clean up eventually.
- * spawn.cc: New global exec_exit. Set by signal handler to
- value which should be used on exit from aborted spawn.
- (spawn_guts): Try harder to let the child terminate (if it is
- going to) before exiting on a signal. Remove obsolete code.
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * exec.cc (file_exists): Removed
- * spawn.cc (spawn_guts): call perhaps_suffix to convert filename
- to win32 form and to check file existance; prog variable
- removed, all references changed to real_path variable.
- Do not inherit parent's window station/desktop on sexecXX calls.
- They are no longer needed with the new signal handling.
- (_spawnve): extra file existance check removed
- * winsup.h: file_exists prototype removed
-
-Wed Nov 19 16:23:47 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * cygwin.din: add missing exports for random -- initstate
- and setstate (accessed by gawk among others?)
-
-Tue Nov 18 22:27:10 1997 Geoffrey Noer <noer@cygnus.com>
-
- * Makefile.in: Add spaces after colons in rules for make
-
-Mon Nov 17 22:35:25 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from proven@cygnus.com (Chris Provenzano):
- * Makefile.in: set SHELL = @SHELL@, set VPATH to only @srcdir@.
- Remove mingw from directories to build for now, adapt rules
- for building sysdef files without fancy VPATH
- * configure: regenerate
- * config/i386/makefrag: add rules to build setjmp/longjmp
- * regexp/Makefile.in: set SHELL = @SHELL@
- * regexp/configure: regenerate
- * utils/Makefile.in: set SHELL = @SHELL@
- * utils/configure: regenerate
-
-Mon Nov 17 18:36:50 1997 Geoffrey Noer <noer@rtl.cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * fhandler.cc (fhandler_disk_file::open): calls to symlink_XXX
- replaced with path_conv class calls.
- * path.cc (path_conv::path_conv): comments added, O_NOSYMLINK case
- added.
- * path.h (class path_conv): symlink_p, exec_p - new class members.
- * spawn.cc (spawn_guts): call path_conv instead of symlink_follow.
-
-Sun Nov 16 15:54:27 1997 Geoffrey Noer <noer@rtl.cygnus.com>
-
- patch from cgf@bbc.com (Chris Faylor):
- * dcrt0.cc (do_exit): Use new pinfo element in debug statement.
- * pinfo.cc (pinfo_init): Eliminate use of "PID" environment
- variable in favor of scanning the process table for a
- SpawnedProcessId field matching current windows process id.
- Should speed up spawned process startup slightly. Delay setting
- of dwProcessId until process is capable of processing signals
- since this field is used to build signal semaphores.
- * signal.cc (kill_worker): Perform a `proc_exists' on the pid
- in question if signal == 0. This will verify that the process
- actually exists and was not abnormally terminated.
- * sigproc.cc (sigproc_init): Initialize dwProcessId field after
- signal processing has been initialized.
- (sigproc_terminate): Remove events[0] close.
- (getsem): Use GetCurrentProcessId to find the windows pid since
- this dwProcessId field is not yet set up. Use proc_exists to
- determine if error should be printed on OpenSemaphore error.
- (proc_exists): New function. Makes more exhaustive test of
- process existence. Determines if process died without going
- through normal shutdown.
- (wait_subproc): Close wakeup event only on thread exit.
- * spawn.cc: Remove pExeced. Use new field in pinfo.
- (spawn_guts): Initialize dwSpawnedProcessId field.
- * utils/ps.cc (main): Perform a kill(pid, 0) on any pids that
- appear to be active. This will clear out pids that have died
- abnormally. 'ps -f' bypasses this.
- * winsup.h (class pinfo): Add dwSpawnedProcessId field.
-
-Sun Nov 16 15:54:27 1997 Geoffrey Noer <noer@rtl.cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * pinfo.cc ((pinfo_init): use dwProcessId for execed/spawned
- check, set subproc_ready event only if the process is exec'ed.
- * spawn.cc (spawn_guts): initialize hProcess and dwProcessId
- fields of pinfo on exec, keep progname field on spawn.
-
-Sun Nov 16 15:54:27 1997 Geoffrey Noer <noer@rtl.cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * dcrt0.cc: remove commented out code
- * spawn.cc: fix misapplied patch problem
-
-Sun Nov 16 15:54:27 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from cgf@bbc.com (Chris Faylor):
- * fhandler.cc (fhandler_dev_null::open): Open Windows 'nul'
- device rather than "faking" a real open.
- (fhandler_dev_null::close): delete.
- (fhandler_dev_null::fstat): delete.
- (fhandler_dev_null::ioctl): delete.
- (fhandler_dev_null::read): delete.
- (fhandler_dev_null::write): delete.
- (fhandler_dev_null::lseek): delete.
- (fhandler_dev_null::dup): delete.
- * fhandler.h (class fhandler_base): delete above methods from
- class.
- * hinfo.cc (hinfo_vec::build_fhandler): Use new fhandler_dev_null
- class which opens 'nul' device. Treat /dev/null similarly to
- other Windows devices. This allows redirection of /dev/null to
- non-cygwin processes.
-
-Sun Nov 16 15:54:27 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from cgf@bbc.com (Chris Faylor):
- * dcrt0.cc (do_exit): Use EXIT_* flags to determine how exit
- should proceed. Honor new EXIT_NOCLOSEALL to avoid
- close_all_files.
- * exceptions.cc (__cygwin32_exception_handler): Use new
- EXIT_SIGNAL define to indicate exiting due to signal.
- * signal.cc (sigprocmask): Slightly more defensive check against
- being called prior to complete cygwin setup.
- (_raise): Defensive check to guard against being called prior to
- complete cygwin setup.
- * sigproc.cc (stopped_or_terminated): Use new EXIT_SIGNAL define
- to detect exiting due to signal.
- * sigproc.h: Define flags to be used during exit process as
- EXIT_*.
- * spawn.cc (spawn_guts): Use EXIT_* constants to control how
- do_exit proceeds after _P_OVERLAY.
-
-Sun Nov 16 15:54:27 1997 Geoffrey Noer <noer@cygnus.com>
-
- * sysconf.cc (sysconf): return 1048576 for ARG_MAX until
- we figure out the right value (_POSIX_ARG_MAX is only 4K
- which is too small).
-
-Sun Nov 16 15:54:27 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * dcrt0.cc (dll_crt0_1): call winsock_init if neccesary.
- * fhandler.cc ((fhandler_socket::fhandler_socket): moved to net.cc
- * fhandler.h (class fhandler_socket): destructor prototype added.
- * fork.cc (cygwin_fork_helper1): set PID_SOCKETS_USED in the
- child's pinfo if parent has open socket descriptors; call
- winsock_init in child code if necessary.
- * net.cc: static variable winsock_init_p removed;
- number_of_sockets is new global variable containing number of
- opened sockets.
- (winsock_init): made global, save "winsock inited" flag in process
- state field.
- (cygwin32_winsock calls): condition for winsock initialisation
- changed
- (fhandler_socket::fhandler_socket): new, moved from fhandler.cc;
- increment number_of_sockets on constructor call.
- (fhandler_socket::~fhandler_socket): new. Decrement
- number_of_sockets on destructor call, check for negative value.
- (fhandler_socket::ioctl): check for winsock initialisation added.
- * spawn.cc (spawn_guts): handle PID_SOCKETS_USED in child's pinfo.
- * winsup.h: PID_SOCKETS_USED - new enum value; number_of_sockets
- and winsock_init() prototypes added.
-
-Wed Nov 12 23:02:34 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from cgf@bbc.com (Chris Faylor):
- * exceptions.cc: Substitute do_exit for _exit as appropriate.
- do_exit allows full 32 bits of exit value. The upper 16 bits
- are used for special cygwin operations.
- * winsup.h: Change definition of do_exit to allow calling from
- signal handler.
- * dcrt0.cc (do_exit): Change to allow calling from signal handler
- in place of _exit. This is necessary to ensure that only cygwin
- internal applications can exit with the upper order 16 bits set
- to non-zero.
-
-Wed Nov 12 23:02:34 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from cgf@bbc.com (Chris Faylor):
- * dcrt0.cc (do_exit): New function. Subsumes functionality of
- _exit but takes a DWORD argument. Changed to avoid some shutdown
- activities when called with REPARENTING bit set in argument. Also
- explicitly kills any executing non-cygwin subprocess from a
- spawn(P_OVERLAY)...
- (_exit): Use do_exit for exiting. Ensure that only low order 1
- bits of status are used or confusion will result if exiting with
- some higher order bits set.
- * exceptions.cc (set_process_mask): Reflect new method for
- sig_send to send signals to self.
- (handle_sigsuspend): Reflect new method for sig_send to send
- signals to self.
- * fork.cc: A handle name was changed in the pinfo structure to
- be more reflective of its use. Change forkee_stopped to
- subproc_ready everywhere.
- * pinfo.cc (pinfo::clearout): Change forkee_stopped to
- subproc_ready.
- (pinfo_init): Use PID_EXECED flag to determine if this process has
- been execed. If so, signal the remaining stub in the process
- which invoked us so that the stub can terminate and let us take
- over as this pid.
- * sigproc.cc (sig_send): Change method for determining if sending
- signals to myself. A NULL pointer means communicate with my
- signal handler. This is necessary to allow communication with
- our own signal processors after reparenting an execed process.
- Also, add an additional test to detect if a process goes away in
- the middle of attempting to send it a signal.
- (allow_sig_dispatch): Reflect new method for sig_send to send
- signals to self.
- (getsem): Use dwProcessId in names for signal semaphores. Allows
- communicating with both parts of a process that is temporarily
- "split in two" while execing.
- (sig_proc): Avoid printing an error if WAIT_FAILED and exiting
- anyway. Process requests even if loop_wait == 0.
- (proc_subproc): Defensive check for manipulating processes prior
- to initialization or after terminating sigproc.
- Use different check for subprocesses that have been reparented.
- Hopefully this will eliminate WFSO, error 6 problems.
- (wait_subproc): Only exit when loop_wait == 0 and not dealing with
- a process.
- * spawn.cc: Set up two global variables, used on exit when
- execing a non-cygwin process: hExeced - handle of non-cygwin
- process which is being waited for by a stub, pExeced - windows pid
- of the process.
- (spawn_guts): Reorganize to always (temporarily) wait for the new
- process when P_OVERLAY. If a cygwin process is invoked, then the
- wait will return when an event is signalled and the new process
- will be "reparented" in the ppid. If a non-cygwin process is
- invoked, wait until the process exits or a signal is received
- which terminates the process. In this case, the do_exit function
- will terminate the non-cygwin process.
- * winsup.h: Rename forkee_stopped to subproc_ready since this
- event now has a dual role which is better defined by this new
- name. Add a new flag (PID_EXECED) for process_state. Define a
- new function `do_exit' which operates similarly to _exit
- but takes > 16 quantities with the high order bit signifying
- different exit actions.
-
-Mon Nov 10 17:11:08 1997 Geoffrey Noer <noer@cygnus.com>
-
- * include/utime.h: remove (moved to newlib/libc/sys/cygwin32/sys)
- so as not to conflict with the one in newlib/libc/include.
-
-Mon Nov 10 15:11:42 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * exceptions.cc (__cygwin32_exception_handler): exit with
- "core dumped" exit code after writing "core" file.
-
-Mon Nov 10 15:11:42 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from cgf@bbc.com (Chris Faylor):
- * console.cc: Add convenience macros and structures for handling
- scrolling.
- (fhandler_console::fillin_info): New function to fill in the `info'
- struct.
- (fhandler_console::scroll_screen): Change to scroll only the visible
- portion of the screen. Honor scroll regions more stringently.
- (fhandler_console::open): Use new fillin_info function.
- (fhandler_console::ioctl): Use new fillin_info function which
- automatically calculates screen size.
- (fhandler_console::clear_screen): Use new fillin_info function.
- Only clear visible portion of screen.
- (fhandler_console::cursor_set): Add a flag to indicate whether
- cursor positioning is absolute within buffer or is screen relative.
- Use new fillin_info function to get screen information.
- (fhandler_console::cursor_rel): Use new fillin_info function.
- Change for new cursor_set parameter.
- (fhandler_console::cursor_get): Use new fillin_info function.
- (fhandler_console::char_command): Use new fillin_info function
- where appropriate. Change for new cursor set parameter where
- appropriate. Scroll only visible portion of screen when required.
- * fhandler.h (class fhandler_console): Add fillin_info, change
- cursor_set to reflect additional argument.
-
-Mon Nov 10 15:11:42 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from cgf@bbc.com (Chris Faylor):
- * dcrt0.cc (dll_crt0_1): Register process start time.
- * fork.cc (cygwin_fork_helper1): Register process start time.
- * utils/ps.cc (main): Report process start time.
- (start_time): New function to format time similarly to UNIX ps.
- A time from today shows as HH:MM, times from previous days just
- show the month and day.
- * winsup.h (class pinfo): Add start_time field.
-
-Mon Nov 10 11:54:27 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * include/Windows32/Defines.h (TIME_ZONE_ID_INVALID): Define.
- * times.cc (gettimeofday): The error return from
- GetTimeZoneInformation is TIME_ZONE_ID_INVALID, not
- TIME_ZONE_ID_UNKNOWN.
-
-Sun Nov 9 17:08:30 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from cgf@bbc.com (Chris Faylor):
- * Makefile.in: add ../libiberty/strsignal.o
- * cygwin.din: add exports for strsignal, strtosigno
- * utils/kill.cc: changes to allow accepting signal name
- as argument
-
-Sun Nov 9 17:08:30 1997 Geoffrey Noer <noer@cygnus.com>
-
- * include/limits.h: define PATH_MAX here instead of
- include/sys/param.h, define _POSIX_NGROUPS_MAX as 0 not 1
- (system invariant value, not implementation-specific)
- * include/sys/param.h: remove PATH_MAX, change NOFILE from 64
- to 8192, delete PATHSIZE, remove safety wrapper around
- MAXHOSTNAMELEN, add comments
- * sysconf.cc (sysconf): return NGROUPS_MAX not zero,
- return _POSIX_SAVED_IDS not zero. Return _POSIX_CHILD_MAX
- not 4096. Return _POSIX_CHILD_MAX, not 8.
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * winsup.h: add proto for setdtablesize, define NOFILE_INIT
- and NOFILE_INCR
- * hinfo.cc (hmap_init, hinfo_vec::find_unused_handle): change to
- support virtually unlimited numbers of fds. Remove setdtablesize
- proto
- * syscalls.cc: initialize dtable_size to NOFILE_INIT instead of
- NOFILE
-
-Thu Nov 6 13:14:09 1997 Geoffrey Noer <noer@cygnus.com>
-
- * exceptions.cc (__cygwin32_exception_handler): don't
- print "In cygwin32_except_handler" for exceptions Cygwin32
- isn't going to handle. Print "(progname PID) Exception: <type>"
- to console. Redirect all detailed information including the
- stack trace to <progname>.core. This should reduce confusion
- about what's causing the exception (a lot of people would see "In
- cygwin32..." and think the problem was in Cygwin32 when most of
- the time it was in some other program).
- * syscalls.cc: add fixme
- * times.cc: add fixme
-
-Wed Nov 5 19:23:10 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from cgf@bbc.com (Chris Faylor):
- * Makefile.in: force .c.os and .cc.os to be built in same
- directories as source
-
-Wed Nov 5 19:23:10 1997 Geoffrey Noer <noer@cygnus.com>
-
- * drct0.cc (dll_crt0_1): stop initializing winsock on process
- startup since that slows down startup time of all processes, even
- ones that don't end up making Winsock calls.
- * fork.cc (cygwin_fork_helper1): don't need to call uinfo_init
- or socket_checkinit after fork -- the appropriate functions will
- do the necessary initialization if they are ever called.
- * net.cc: init winsock_init_p to zero and make it static
- (all exported functions): call winsock_init before making
- any WinSock calls since this no longer happens in dcrt0.cc
- startup code. Only do this if !winsock_init_p.
- (winsock_init): checkinit renamed. Now just inits winsock
- without checking whether it has been already initialized.
- Make it static.
- * uinfo.cc (uinfo_init): after we call getpwnam, we know
- the passwd file has been read in so don't check initialization
- of it. However, we do need to read_etc_group() if group_in_memory
- isn't set.
- * passwd.cc: rename global i variable to pw_pos, rename
- passwd_in_memory to passwd_in_memory_p to match net.cc scheme.
- Add comments.
- (read_etc_passwd): make static
- (various): make sure to read_etc_passwd() if passwd_in_memory
- isn't set
- * grp.cc: add comments, rename idx global to grp_pos,
- rename group_in_memory to group_in_memory_p to match net.cc
- scheme, group_in_memory_p no longer static (needs to be accessed
- by uinfo_init)
- * winsup.h: remove proto for socket_checkinit since that's
- renamed and static within net.cc
-
-Tue Nov 4 01:02:20 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from cgf@bbc.com (Chris Faylor):
- * signal.cc (sigprocmask): Newer versions of gcc will call
- sigprocmask when a builtin constructor is activated. If this
- happens prior to the setup of u->self, then a NULL dereference
- will occur. Guard against this.
-
-Mon Nov 3 17:00:45 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from cgf@bbc.com (Chris Faylor):
- * hinfo.cc (hinfo_vec::build_fhandler): Open a console for
- /dev/tty when !use_tty.
-
-Thu Oct 30 10:28:15 1997 Tom Tromey <tromey@cygnus.com>
-
- * include/mapi.h: New file.
- * sysdef/i386/mapi32.def (MAPISendMail@20): New export.
-
-Thu Oct 30 15:08:13 1997 Geoffrey Noer <noer@cygnus.com>
-
- * times.cc: add comments listing standards funcs are defined in
- (dump_filetime): remove unused local func
- * net.cc (fail): remove local func, replace one reference with
- equivalent debug_printf, add standards comments, reformat a little
- (fhandler_socket::close): simplify handling of res
- (fhandler_socket::fstat): set ENOSYS (unimplemented)
- * stubs.cc: set ENOSYS in unimplemented funcs
- * uname.cc: add standards comment
- * ntea.cc: reformat
-
-Wed Oct 29 22:43:57 1997 Geoffrey Noer <noer@cygnus.com>
-
- * times.cc (settimeofday): set ENOSYS instead of EPERM
- since ENOSYS maps to "Function not implemented" which is the
- case here.
- * syscalls.cc (seterrno): on failure, set EACCES instead of EPERM
- which is better for the unknown error case
-
-Fri Oct 24 01:24:07 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from green@cygnus.com (Anthony Green):
- * dcrt0.cc: new host_dependent_constants object with a global
- instance of it which allows constants that are different in Win 95
- and NT to be saved here instead of having forks in the code and
- having to check the OS type each time. Add two constants for
- fhandler, one for sharing attributes and one for upper word value
- for locking files.
- (dll_crt0_1): call host_dependent init function
- * fhandler.cc (fhandler_base::open): use above object for
- setting shared attributes
- (fhandler_disk_file::lock): get upper word for locking from
- host_dependent_constants
- * winsup.h: define host_dependent_constants class and add extern
- for global instance of it
-
-Wed Oct 22 02:27:53 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * cygwin.din: Export getenv, putenv, setenv and unsetenv instead
- of cygwin32_ wrappers
- * dcrt0.cc: External variable environ removed
- (dll_crt0_1): strip executable's path on console title if
- environment variable CYGWIN_TITLE set to "strip", references to
- environ removed.
- * environ.cc: New file. Code derived from newlib sources.
- * exec.cc: include stdlib.h
- (execl, execv): new (derived from newlib sources).
- (sexecve): reference to environ removed.
- (sexecvpe): call getenv instead of cygwin32_getenv.
- * grp.cc: new static variable group_in_memory
- (read_etc_group): skip blank lines
- (getgrgid, getgrnam, getgrent): call read_etc_group when necessary.
- * misc.cc (cygwin32_getenv/putenv/setenv/unsetenv): remove
- wrappers.
- * passwd.cc: new static variable passwd_in_memory
- (read_etc_passwd): skip blank lines
- (search_for, getpwent): call read_etc_passwd when necessary.
- (setpwent): fixed incorrect initialization of i var.
- * pinfo.cc (pinfo_init): initialize uid with illegal value to
- force read of /etc/passwd and /etc/group.
- * spawn.cc: call getenv instead cygwin32_getenv
- (spawn_guts): force read of /etc/passwd and /etc/group on sexec
- calls.
- * uinfo.cc (uinfo_init): read /etc/passwd and /etc/group only if
- uid is undefined.
- * winsup.h: remove protos for environ, cygwin32_getenv,
- cygwin32_putenv
-
-Wed Oct 22 02:08:54 1997 Geoffrey Noer <noer@cygnus.com>
-
- * utils/aclocal.m4: new file. Define autoconf macros for
- determining whether we're compiling for the cygwin32 environment
- or not and determine the executable suffix
- * utils/configure.in: call AM_CYGWIN32 and AM_EXEEXT
- * utils/configure: regenerate
- * utils/Makefile.in: add $(exeext) after executable names so
- programs will be built with the .exe suffix
-
-Wed Oct 22 00:50:27 1997 Geoffrey Noer <noer@cygnus.com>
-
- Now that it is possible to use gdb using a stable
- cygwin.dll to debug a program using a newer, potentially buggy
- cygwin.dll, the strace mechanism will probably end up being
- used more and more for debugging timing/race-condition bugs that
- aren't easily exposed in a gdb session. The following changes
- make the strace facility better for debugging timing issues by
- storing the last few commands in a buffer instead of writing
- to disk each function call.
-
- patch from cgf@bbc.com (Chris Faylor):
- * dcrt0.cc (dll_crt0_1): Change to strace_init call to take
- an argument (for planned future registry changes).
- (_exit): Call strace_dump when appropriate. Add a debugging
- printf.
- * include/sys/strace.h: Add _STRACE_CACHE, _STRACE_EXITDUMP,
- strace_dump ().
- * strace.c (strace_init): Allow hexadecimal, octal setting of
- strace flags in environment variable. Handle new cache option.
- (strace_printf): Display number of seconds from last message.
- Handle _STRACE_CACHE.
- (strace_dump): New function. Dump cached messages to disk.
-
-Wed Oct 22 00:08:40 1997 Geoffrey Noer <noer@cygnus.com>
-
- * cygwin.din: export socket calls without cygwin32_ prefix
- * net.cc: remove unused herror function in favor of
- cygwin32_herror which is exported as herror
- * include/netdb.h: we are now exporting the socket calls without
- the cygwin32_ prefix so we don't need the nasty remapping in
- header files
- * include/arpa/inet.h: ditto
- * include/sys/socket.h: ditto
- * select.cc (select): make extern C
-
-Tue Oct 21 22:52:29 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from cgf@bbc.com (Chris Faylor):
- * sigproc.cc (sigproc_terminate): Fix flawed attempt to signal
- any processes waiting for signal notification success when the
- process receiving the signal is terminating.
- (wait_subproc): Report on errors when opening the
- sync_proc_subproc mutex. Move initialization of events[0]
- "wakeup" signal prior to wait_subproc_inited or risk a (miniscule)
- chance for a reference to a NULL handle.
- * strace.cc (ta[]): Change WM_ASYNCIO entry to reflect previous
- changes to WM_ASYNCIO constant.
-
-Tue Oct 21 14:30:14 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from cgf@bbc.com (Chris Faylor):
- * sigproc.cc (proc_subproc): fix minor error output problem
-
-Mon Oct 20 20:19:02 1997 Geoffrey Noer <noer@cygnus.com>
-
- * Makefile.in: change DLL_NAME to cygwin97r2.dll
-
-Mon Oct 20 20:16:47 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * window.cc (alarm): When there is a previous alarm() request
- with less than one second remaining, then the return from a call
- to alarm() is supposed to return 1.
-
-Mon Oct 20 20:16:47 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from cgf@bbc.com (Chris Faylor):
- * Makefile.in: Add sigproc.o target. Add sigproc.h dependency
- where appropriate. Add -s to intermediate ld of cygwin.dll to
- speed up the process of building the .dll.
- * dcrt0.cc: Add new sigproc.h include.
- (dll_crt0_1): Replace window_init with sigproc_init for
- initialization of signal/sub process handling. Change to use new
- process_state field in pinfo.
- (_exit): Remove spurious debugging statement. Terminate sigproc
- processing. Remove signal blocking obviated by previous signal
- termination. Remove SIGCHLD notification of parent as it is now
- handled automatically in the parent.
- (api_fatal): Terminate sigproc processing.
- * exceptions.cc: Add new sigproc.h include. Change name of
- ourhThread.
- (ctrl_c_handler): Change to static as this is no longer called
- outside of this module.
- (lock_cs): Change to a function which will optionally grab new
- signal dispatch mutex. Don't wait forever for cs mutex.
- (unlock_cs): Change to a function which will optionally release
- new signal dispatch mutex.
- (init_exceptions): Detect errors from SetConsoleCtrlHandler.
- Initialize new sig_dispatch mutex. This mutex is used to
- control dispatching to a function on signal receipt.
- (sig_dispatch_pending): New function. Called from signal
- processing thread to dispatch pending signals.
- (set_process_mask): Block signal dispatch during setting of new
- mask, if possible. Contact signal thread to dispatch pending
- signals.
- (handle_sigsuspend): New function. Attempts to implement a
- sigsuspend which will not lose signal notification. Called from
- sigsuspend.
- (call_handler): Use sigproc_printf where appropriate.
- (ctrl_c_handler): Use _raise to invoke the correct signal.
- (sighandle): New function. Subsumes most of ctrl_c_handler.
- Change to mark as suspended signals which would dispatch for which
- the sig_dispatch mutex is unavailable. Use sigproc_printf where
- appropriate.
- (events_init): Remove application_stopped mutex made obsolete by
- new sigproc handling.
- (events_terminate): Remove application_stopped mutex made
- obsolete by new sigproc handling.
- * fork.cc: Add new sigproc.h include.
- (cygwin_fork_helper1): Use process_state field in pinfo (replaces
- inuse_p). Call proc_register to add a new subproc to sigproc
- handling. Call sigproc_init for new subprocess. Remove obsolete
- window_init.
- * heap.cc (_sbrk): Use process_state field in pinfo (replaces
- split_heap_p).
- * hinfo.cc (hmap_init): Use process_state field in pinfo (replaces
- cygwin_parent_p).
- * include/sys/strace.h: Add tracing for signal/subprocesses.
- * init.cc: Add new sigproc.h include. Add waitq_storage global
- for new sigproc handling.
- (dll_entry): Add initialization, destruction of structures needed
- by new sigproc handling.
- * net.cc (fhandler_socket::ioctl): Use gethwnd() function to find
- hwnd of hidden window.
- * pinfo.cc: Add new sigproc.h include.
- (pinfo::clearout): Use process_state field in pinfo (replaces
- split_heap_p). Explicitly initialize various handles to NULL.
- (pinfo_init): Use process_state field in pinfo (replaces
- cygwin_parent_p).
- (pinfo_list::operator): Use process_state field in pinfo (replaces
- inuse_p).
- (pinfo_list::alocate_pid): Initialize process_state field.
- (pinfo::init_self): Remove obsolete initialization of hProcess.
- (pinfo::record_death_nolock): Changes for new sigproc handling.
- (pinfo::record_death): Move bulk of this code to sigproc.cc.
- (pinfo::terminate): Remove function made obsolete by sigproc
- handling.
- (pinfo::init_from_exec): Use process_state field (replaces
- inuse_p).
- * signal.cc: Add new sigproc.h include.
- (kill_worker): Call new sig_send function to send signals to
- cygwin processes.
- (_kill): Use process_state field in pinfo (replaces inuse_p).
- (sigsuspend): Call handle_sigsuspend in exceptions.cc to handle
- sigsuspend in a non-raceable way.
- * sigproc.cc: New signal/subprocess handling module. Replaces
- SendMessage method for signals with a method using semaphores.
- Also detects changes in the state of child processes.
- * sigproc.h: New header file defining constants and functions for
- signal/subprocess handling.
- * spawn.cc: Add new sigproc.h include. Clean up trailing spaces.
- (spawn_guts): Reorganize to use new sigproc handling.
- Use new pinfo process_state field (replaces inuse_p).
- * syscalls.cc (_read): Use new pinfo process_state field (replaces
- inuse_p).
- (_write): ditto.
- * tty.cc (tty_init): Use new pinfo process_state field (replaces
- cygwin_parent_p).
- * utils/ps.cc (main): Use new pinfo process_state field (replaces
- inuse_p). Detect "zombie" processes similarly to UNIX ps.
- * wait.cc: Add required includes.
- (wait_found): Function obsoleted by new sigproc handling.
- (wait4): Reorganize to use new sigproc handling.
- * window.cc: Changes for new sigproc handling.
- (WndProc): Remove SIGNAL handling obsoleted by new sigproc
- handling. Use static window handle since the field has been
- removed from pinfo. Use _raise where appropriate to send signals.
- (Winmain): Replace global window handle with static since the
- field has been removed from pinfo.
- (window_init): Remove obsolete function.
- (gethwnd): New function to allocate hidden window on demand rather
- than at startup.
- (window_terminate): Kill hidden window only if allocated.
- (setitimer): Use gethwnd function to retrieve hidden window
- handle.
- * winsup.h: Remove stuff made obsolete by sigproc handling. Move
- some constants to new sigproc.h header file. Remove inuse_p,
- cygin_parent_p, split_heap_p. Replace with a single process_state
- field. Define bit fields for process_state in an enum for easier
- debugging.
-
-Mon Oct 20 19:17:33 1997 Geoffrey Noer <noer@cygnus.com>
-
- * sysdef/i386/winserve.def: remove ancient version of cygwin.din
- * include/sgtty.h: remove since Cygwin32's tty handling doesn't
- support bsd syntax/semantics
- * include/sys/termios.h: change winsize struct to include
- ws_xpixel and ws_ypixel members
- * cygwin.din: remove export of ScreenCols, ScreenGetCursor,
- ScreenRows, ScreenSetCursor, get_pid__5pinfo, getkey, _getkey,
- kbhit, _kbhit, __small_printf = small_printf__FPCce
- * key.cc: remove. Similar functionality exists in ncurses
- which can be compiled for Cygwin32
- * console.cc (ScreenCols, ScreenGetCursor, ScreenSetCursor,
- ScreenRows): delete and delete SCREEN_ROWS/COLS defines
- * pold.c: remove old pipe-related code that's no longer used
- * include/regex.h: remove, it's not a part of cygwin.dll
- * syscalls.cc: started to add comments including standards
- information
- (truncate): new
- (ftruncate): length is an off_t, not a size_t. Add missing
- return value to debug printf
- * syscalls.h: ftruncate length is an off_t, add proto for truncate
-
- patch from cgf@bbc.com (Chris Faylor):
- * console.cc (fhandler_console::write): Recognize '@' as a valid
- character to follow a '\e[' sequence or get 'Bad escape' errors.
-
-Wed Oct 15 18:44:25 1997 Geoffrey Noer <noer@cygnus.com>
-
- * cygwin.din: restore __main as an export
-
-Mon Oct 13 18:41:09 1997 Geoffrey Noer <noer@cygnus.com>
-
- * cygwin.din: revert renaming of __assert since that's
- actually what it's supposed to be called
- * assert.cc: ditto
-
-Fri Oct 10 19:25:49 1997 Tom Tromey <tromey@cygnus.com>
-
- * include/Windows32/Base.h: Moved typedefs of CHAR, SHORT, etc,
- before all other uses in file.
-
-Fri Oct 10 17:50:12 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * include/Windows32/Base.h: Only typedef CHAR, SHORT, and LONG if
- VOID is not defined
-
-Thu Oct 9 00:46:40 1997 Geoffrey Noer <noer@cygnus.com>
-
- * cygwin.din: remove all libgcc.a exports. They don't
- belong here since libgcc.a doesn't really relate to the
- purpose of cygwin.dll, and (to make things worse) the contents
- change over time.
- * assert.cc: rename __assert to __cygwin32_assert
- * exceptions.cc: rename __stack_trace to __cygwin32_stack_trace,
- __cygwin_except_handler to __cygwin32_except_handler
- * version.h: increment major and minor numbers
-
-Tue Oct 7 12:52:25 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * dcrt0.cc (_exit): under Win 95, don't send SIGCHLD
- unless special env variable is set. This works around a
- problem where exiting a process can hang under Win 95.
-
-Mon Oct 6 23:41:34 1997 Geoffrey Noer <noer@cygnus.com>
-
- * regexp: new directory containing free regexp code by
- Henry Spencer. Taken from the most recent release of NetBSD.
- Write configure.in and Makefile.in, based on files from
- winsup/utils.
- * Makefile.in: build regexp directory and include objs in
- cygwin.dll.
- * stubs.cc: remove all reg* stubs except for regfree which
- isn't provided by above code.
-
-Mon Oct 6 13:35:48 1997 Geoffrey Noer <noer@cygnus.com>
-
- * dcrt0.cc: remove asm idata3 terminator, now that ld is fixed
- such that this is no longer necessary.
- * libccrt0.cc: ditto
-
-Mon Oct 6 13:14:00 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * spawn.cc (spawn_guts): return child's PID on
- spawn (_P_NOWAIT,...) instead of child's handle.
- (cwait): rewritten as a wrapper to waitpid.
-
-Mon Oct 6 13:02:01 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * net.cc (socketpair): new
- * cygwin.din: add socketpair export
-
-Mon Oct 6 13:01:51 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from cgf@bbc.com (Chris Faylor):
- * dcrt0.cc: Remove obsolete call to fork_terminate.
- * exceptions.cc: Respace, remove extraneous trailing whitespace.
- Change critical section to mutex since there are supposedly
- multi-processor problems with critical sections under NT.
- Use "lock_cs" and "unlock_cs" macros to lock/unlock critical
- regions.
- (init_exceptions): Change critical section initialization to mutex
- initialization.
- (set_process_mask): Use locking macros to control access to
- sig_mask.
- (ctrl_c_handler): Use lock_cs/unlock_cs to control access.
- (events_init): Use standard cygname function to create names for
- shareable objects.
- (events_init): Close cs mutex.
- * fork.cc: Use event flags which are specific to the child being
- forked. This prevents one process from prematurely activating
- another. It also makes fork slightly more thread-safe.
- (fork_init): Remove event initialization.
- (fork_terminate): Remove function.
- (cygwin_fork_helper1): Initialize events on a per-fork basis.
- Events are inherited in child's pinfo structure.
- Remove child->hThread initialization as it not needed. Use
- pi.hThread where child->hThread is used.
- Work around Windows 95 bug where a WaitForSingleObjects will
- sometimes return ERROR_INVALID_HANDLE when it is resumed after
- a suspend.
- * pinfo.cc: Remove references to hThread field whereever it occurs.
- * strace.cc: Use standard cygname function to create name for
- strace_mutex. Prevents confusion between different .dll versions.
- * wait.cc (wait_found): Remove reference to hThread.
- * winsup.h (class pinfo): Remove reference to hThread. Add
- per-process fork control event handles.
- * include/limits.h: Increase NGROUPS_MAX from 0 to 1 to reflect
- recent change to getgroups.
-
-Mon Oct 6 11:06:22 1997 Geoffrey Noer <noer@cygnus.com>
-
- Oops. ../libio refers to objdir and is not the same
- as $(srcdir)/../libio.
-
-Thu Oct 2 23:12:19 1997 Geoffrey Noer <noer@cygnus.com>
-
- Revert patches to sources applied after Sept 16. Removed
- relevant portions of ChangeLog entries. Some of those changes
- may reappear later (removing the entries makes this log easier
- to understand).
-
-Thu Oct 2 15:34:03 1997 Geoffrey Noer <noer@cygnus.com>
-
- * Makefile.in: remove hardcoding of SHELL to /bin/sh, remove
- ../libio from INCLUDES since $(srcdir)/../libio is already
- included.
- * glob/Makefile.in: remove hardcoding of SHELL to /bin/sh
-
-Mon Sep 29 14:06:24 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * cygwin.din: add exports for rcmd, rresvport, rexec
- * net.cc (cygwin32_rcmd): new
- (cygwin32_rresvport): new
- (cygwin32_rexec): new
- * include/mywinsock.h: add protos for Winsock calls associated
- with functions called by the above.
-
-Mon Sep 29 13:26:24 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from cgf@bbc.com (Chris Faylor):
- * grp.cc (getgrent): Change overlooked comment to reflect new
- behavior.
-
-Thu Sep 25 18:35:49 1997 Geoffrey Noer <noer@cygnus.com>
-
- * Makefile.in: remove debugdll defs since the shared memory
- overlap problem is solved by the timestamp addition of Sept 23
- * version.h: rework explanations of version numbers
-
-Thu Sep 25 16:21:49 1997 Geoffrey Noer <noer@cygnus.com>
-
- * spawn.cc: add missing cast to debug printf
-
-Thu Sep 25 16:14:17 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * path.cc (conv_to_win32_path): Call backslashify on a win32
- path.
-
-Tue Sep 23 17:58:17 1997 Geoffrey Noer <noer@cygnus.com>
-
- Fixes for things that were causing compile-time warnings:
- * exec.cc (_execve): add missing const to args to match def
- of execve in newlib which this calls.
- (sexecve): add missing const to def
- (sexeclpe): don't need to cast argv in sexecvpe call
- (sexecvpe): add missing const to def
- * winsup.h: correct _execve proto, add protos for login/logout
- * syscalls.h: correct sexecve, sexecvpe protos
- * include/Windows32/Base.h: NULL should be defined differently
- for C++
- * init.cc: respacing
-
-Tue Sep 23 17:05:50 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * dcrt0.cc (dll_crt0_1): don't use alloca for allocating storage
- for environment blocks because setenv() uses realloc!
-
-Tue Sep 23 17:05:50 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from cgf@bbc.com (Chris Faylor):
- * Makefile.in (LD_STUFF): Add datestamp.o after DLL_OFILES.
- (datestamp.o): New target. datestamp.c is generated whenever .o
- files change. It creates a file containing a "date stamp"
- which is used by the function "cygname" to create named
- shared memory, events, mutexes, and semaphores used by
- cygwin.dll. The unique datestamp allows multiple loading of
- different cygwin.dll's even when they have incompatible use
- of shared memory areas.
- * init.cc (dll_entry): Create the name string used by cygname
- from the name of the invoking .dll + the datestamp of the
- .dll from the auto-generated datestamp.c
- * misc.cc (cygname): New function. Creates a standard Cygnus
- shared resource name given a prefix, a name (e.g., pinfo_mutex),
- and a numeric suffix (e.g., a pid). Replaces custom code in
- several files. Uses cygwin_dlldate from datestamp.c to construct
- names that are unique for a given cygwin load.
- * shared.cc (open_shared_file_map): Use standard cygname function
- to create names for sharable objects. Use static handle 'h'
- so that it can be closed later by shared_terminate.
- (shared_terminate): Guard against calling CloseHandle with a
- NULL handle.
- (create_shared_fd_mapping_name): Use cygname function to generate
- the name for the "fd_map".
-
-Tue Sep 16 23:34:36 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * fcntl.cc (_fcntl): correct errno value (EBADF instead of
- EBADFD).
-
-Tue Sep 16 17:22:28 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * include/Windows32/Defines.h: add missing defines needed
- for NTEA usage.
- * ntea.cc: remove them from here
- * syscalls.cc (_link): call CreateFile with FILE_WRITE_ATTRIBUTES
- flag instead of GENERIC_WRITE
-
-Tue Sep 16 17:22:28 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from cgf@bbc.com (Chris Faylor):
- * pinfo.cc (pinfo_init): Fix a NULL pointer dereference when PID
- environment variable contains garbage.
-
-Thu Sep 11 16:51:40 1997 Geoffrey Noer <noer@cygnus.com>
-
- * syscalls.cc (ftruncate): read file pointer location at
- beginning of function and restore it at the end
-
-Thu Sep 11 15:35:10 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * path.cc (backslashify): Don't turn a single trailing slash into
- a double trailing slash.
-
-Wed Sep 10 11:40:55 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * include/Windows32/Structures.h: Add PACKED to PRINTDLG.
- * include/Windows32/Functions.h: Add STDCALL to a few function
- declarations.
-
-Tue Sep 9 02:12:18 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * syscalls.cc (_link): Implement hard links under NT with NTFS
- using the backup API. Default to copying the file (what we did
- before).
-
-Mon Sep 8 20:19:09 1997 Geoffrey Noer <noer@cygnus.com>
-
- Merge in the following changes:
-
- Thu Aug 21 13:30:12 1997 Ian Lance Taylor <ian@cygnus.com>
- * assert.cc: New file.
- * Makefile.in (DLL_OFILES): Add assert.o.
- (assert.o): New target.
- * pinfo.cc (cygwin32_winpid_to_pid): New C function.
- * cygwin.din: Add cygwin32_winpid_to_pid.
- * include/sys/cygwin.h: Include <sys/types.h>.
- (cygwin32_winpid_to_pid): Declare.
- * pinfo.cc (pinfo_init): Add debug_printf showing pid and pgid.
-
- Wed Aug 20 13:24:30 1997 Ian Lance Taylor <ian@cygnus.com>
- * spawn.cc (env_sort): New static function.
- (spawn_guts): Sort the environment before passing it to
- CreateProcess.
- * exceptions.cc (exit_already): New file static variable.
- (__cygwin_exception_handler): If exit_already is set, just
- return. If we get an exception we don't recognize, let the next
- exception handler handle it. Just ignore the INVALID_HANDLE
- exception.
- (really_exit): Remove file static exit_already variable; use the
- global one.
- (events_terminate): Set exit_already.
- * include/Windows32/Defines.h (EXCEPTION_INVALID_HANDLE): Define.
- (STATUS_INVALID_HANDLE): Define.
- * include/Windows32/Functions.h: Declare some shell functions.
-
-Mon Sep 8 17:40:46 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * dcrt0.cc (_exit): Kill the foreground process group on session
- leader exit only if job control is in progress.
- * exceptions.cc (ctrl_c_handler): protect the code with critical
- section. This helps stability under Win 95.
- * include/sys/strace.h: add new wm_printf macro
- * signal.cc (kill_worker): window message number changed (window
- messages WM_USER-WM_USER+0x100 reserved for common controls on
- windows95). Debug print added.
- * spawn.cc (spawn_guts): removed unneeded flag DETACHED_PROCESS.
- * strace.cc: defines for SIGNAL and ASYNCIO messages added.
- * tty.cc (create_tty_master): initialize speed fields of termios
- structure.
- (fhandler_pty_master::open): likewise.
- * window.cc (WndProc): debug print added, window message number
- changed.
- * winsup.h: WM_ASYNCIO number changed.
-
-Mon Sep 8 16:40:46 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from cgf@bbc.com (Chris Faylor):
- * fhandler.h: set_w_binary/set_r_binary now defined to
- return void
- * grp.cc (getgroups): always return an array of length 1 where
- the element is the user's gid.
- * pinfo.cc (pinfo_init): verify that we haven't exceeded the
- maximum number of processes
- (pinfo_list::allocate_pid): ditto
- * include/Windows32/Functions.h: add noreturn attrib to ExitProcess
- * include/sys/strace.h: change strace defs so strace-related
- printfs will automatically add __FUNCTION__: to the beginning,
- rename __sys_printf to strace_printf.
- * *.cc: remove function names from debug printfs in favor of the
- new scheme where they are automatically added, change __sys_printf
- references (now strace_printf).
- * smallprint.c (__small_vsprintf): new function displayer code
- to support the above changes
-
-Wed Sep 3 12:44:45 1997 Geoffrey Noer <noer@cygnus.com>
-
- * Makefile.in: split subdir_do into subdir_dobefore and
- subdir_doafter to reflect whether the subdir in question
- should be built before or after the top level is built
- (e.g. glob needs to be built before libcygwin.a but libcygwin.a
- needs to be built before utils).
-
-Thu Aug 28 12:09:39 1997 Geoffrey Noer <noer@cygnus.com>
-
- * configure.in: when setting up EXE_LDFLAGS, correct the
- location of crt0.o to ../../newlib since EXE_LDFLAGS is used
- by Cygwin32 subdirectories where newlib is two directories up
- instead of one.
- * configure: regenerate with autoconf
-
-Thu Aug 28 00:13:11 1997 Geoffrey Noer <noer@cygnus.com>
-
- Replace all licensing-related headers in all Cygnus-owned
- files. Instead of listing terms at the top of each file, now
- we simply refer to:
- * CYGWIN32_LICENSE: new file listing Cygwin32 licensing terms
-
-Wed Aug 27 17:40:16 1997 Geoffrey Noer <noer@cygnus.com>
-
- * cygwin.din: export random, srandom
-
-Wed Aug 20 16:56:39 1997 Geoffrey Noer <noer@cygnus.com>
-
- * Makefile.in: remove unused winsock-related build rules
- that were commented out, minor comment changes, remove
- test.exe build rule.
-
-Wed Aug 20 14:45:17 1997 Geoffrey Noer <noer@cygnus.com>
-
- * Makefile.in: link cygwin.dll with -lm -lgcc -lc -lgcc instead
- of -lc -lm -lm -lgcc so lgcc finds abort(). Add definitions that
- will eventually be used to build a cygwindebug.dll used by gdb
- so gdb can debug a buggy cygwin.dll. Change some variable names
- to have underscores in them (DLL_NAME, LIB_NAME, DEF_FILE, etc.).
- Comment out text.exe build rule.
-
-Tue Aug 19 20:41:51 1997 Geoffrey Noer <noer@cygnus.com>
-
- * dcrt0.cc: respace, modify some comments slightly
-
-Tue Aug 19 16:17:57 1997 Geoffrey Noer <noer@cygnus.com>
-
- * Makefile.in: include ../libiberty/random.o, stop including
- librx since it is LGPL'd code.
- * stubs.cc: add stubs for regcomp, regexec, regerror, regfree
- * dcrt0.cc (dll_crt0_1): default to not support tty/pty devs,
- default to not displaying the running process in the title bar.
-
-Fri Aug 15 18:23:43 1997 Rob Savoye <rob@cygnus.com>
-
- Add mingw directory for the minimalist cygwin environment.
- See mingw/ChangeLog for changes specific to that directory
-
- * configure.in: Add mingw to AC_CONFIG_SUBDIR.
- * configure: Regenerated from autoconf 2.12 with Cygnus patches.
- * Makefile.in: Use subdir_do which uses the value of $SUBDIRS
- rather than having seperate target for each directory.
- * glob/Makefile.in: Add a phony target for install.
- * configure.in: Add mingw to AC_CONFIG_SUBDIR.
-
-Fri Aug 15 01:12:19 1997 Geoffrey Noer <noer@cygnus.com>
-
- * times.cc: add missing extern "C"s around exported functions
-
-Thu Aug 14 17:00:32 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * console.cc (fhandler_console::input_tcsetattr): clear iflag_ and
- lflag_ when tty support enabled.
- (FakeReadFile): do not interrupt read when tty support enabled.
- Do not reset signal_arrived event.
- * cygwin.din: add exports - cf(g)set(i)ospeed, login, logout, ttyslot
- * dcrt0.cc (_exit): kill orphaned childs with SIGHUP and SIGCONT
- on group leader exit, kill foreground process group on session
- leader exit.
- * dirsearch.cc (closedir): check for FindFirst() was called
- * exceptions.cc: include mywinsock.h.
- (call_handler): call WSACancelBlockingCall to try to interrupt
- blocking winsock call, do PulseEvent() instead of SetEvent().
- (ctrl_c_handler): clear pending SIGCONT on stop signals, clear all
- pending stop signals on SIGCONT, suspend the thread before resuming
- to avoid W95 bug, process pending signals on SIGCONT, add signals to
- pending if the process is stopped.
- * fcntl.cc (fcntl): some code rearrangement to always do debug printfs
- on call exit.
- * hinfo.cc: include stdio.h
- (hinfo_vec::build_fhandler): always add ttynum to tty's filename
- (hinfo_vec::dup2): fix return value initialization and errno setting.
- * include/netdb.h: typedef for sig_t removed
- * include/sys/termios.h: octal constants changed to hexadecimals
- to simplify debugging.
- * misc.cc: include unistd.h and utmp.h
- (login): new
- (logout): new
- * pinfo.cc (lock_pinfo_for_update): debug printf added
- (pinfo::record_death): mark processes as orphaned on group leader
- exit.
- * select.cc (cygwin32_select): ResetEvent() removed
- * signal.cc: unneeded ResetEvents removed
- (_kill): ignore stop signals from a member of orphaned process group,
- kill self process the last on group kill.
- (sigaction): reset pending SIGCHLD when the disposition is set to
- default.
- * spawn.cc (spawn_guts): ResetEvent removed
- (cwait): do not interrupt the call
- * strerror.cc: include stdio.h, reenable disabled cases, remove
- duplicated cases, return decimal error value in the default case.
- * syscalls.cc (setsid): set process group id to process id when setsid
- called.
- (setpgid): check for negative pgid
- * syslog.cc (syslog): %m macro support added
- * termios.cc (cfg(s)eti(o)speed): new fuctions needed to support
- NIST PCTS requirements.
- * tty.cc: include utmp.h.
- (ttyslot): new
- (tty_list::terminate): fill in utmp on tty master exit
- (tty_list::allocate_tty): check for tty master pocess alive
- (create_tty_master): fill in utmp
- (do_input): restart tty output on interrupt
- (fhandler_tty_slave::fhndler_tty_slave): ttynum logic moved to
- build_fhandler.
- (fhandler_tty_slave::open): set tty's session id to sid of the calling
- process.
- (fhandler_tty_slave::write): check for TOSTOP bit
- (fhandler_tty_slave::fstat): allow access to tty to everyone
- (fhandler_tty_slave::ioctl): check for TOSTOP bit
- * tty.h: ttyslot prototype added
- * wait.cc (wait4): check for valid value of option argument added
- * winsup.h: define PID_ORPHANED, move tty_list array to the end
- of shared area.
-
-Thu Aug 14 11:42:59 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * path.cc (slash_unc_prefix_p): Correct check of path[3]. Permit
- numbers after the host name.
-
- * include/Windows32/Defines.h: Correct value for SM_CMETRICS,
- SM_CXDRAG, SM_CYDRAG, SM_CXEDGE, SM_CYEDGE, SM_CXFIXEDFRAME,
- SM_CYFIXEDFRAME, and add SM_MOUSEWHEELPRESENT.
-
-Wed Aug 13 20:11:52 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * fork.cc (cygwin_fork_helper1): If we don't have a console, pass
- DETACHED_PROCESS to CreateProcess.
- * spawn.cc (spawn_guts): Likewise.
-
-Tue Aug 12 19:51:32 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * include/Windows32/Structures.h (IMAGE_DOS_HEADER): Remove
- dos_message and nt_signature fields; they aren't present in the
- Windows header file.
-
-Wed Aug 6 16:27:13 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * include/Windows32/Structures.h: Define LPMEASUREITEMSTRUCT as a
- pointer to MEASUREITEMSTRUCT.
-
- * syscalls.cc (_stat_worker): In directory case, only set
- STD_WBITS in st_mode if FILE_ATTRIBUTE_READONLY is clear.
- (access): Remove special case for directory.
-
- * include/Windows32/Defines.h (HKEY_DYN_DATA): Define.
- (REG_FULL_RESOURCE_DESCRIPTOR): Define.
- (REG_RESOURCE_REQUIREMENTS_LIST): Define.
-
-Mon Aug 4 21:15:05 1997 Andrew Cagney <cagney@b1.cygnus.com>
-
- * glob/Makefile.in: Add include of newlib/libc/sys/cygwin32 to
- explicit .c.o rule so that dirent.h is found.
-
-Thu Jul 24 02:14:24 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * cygwin.din: fpathconf, initgroups - new exports
- * console.cc: new static variable CONSOLE_SCREEN_BUFFER_INFO info
- (fhandler_console::scroll_screen): local variable info removed
- (fhandler_console::open): likewise
- (fhandler_console::ioctl): likewise
- (fhandler_console::clear_screen): likewise
- (fhandler_console::cursor_set): likewise
- (fhandler_console::cursor_rel): likewise
- (fhandler_console::cursor_get): likewise
- (fhandler_console::write_normal): fixed scroll region bug, termcap
- "cs" entry works now
- * dcrt0.cc (dll_crt0_1): set file API to use OEM charset, convert
- command line from ANSI to OEM charset.
- (_exit): clear stopsig value on process exit
- * exceptions.cc (call_handler): add one millisecond delay before
- SetEvent()
- (ctrl_c_handler): clear pending stop signals on SIGCONT, do not send
- SIGCHLD to parent on process resuming; some debug printfs added; do
- not call _exit() in a context of signal handling thread (would cause
- more harm than good); fixed a bug with SA_NOCLDSTOP flag.
- * fhandler.cc (fhandler_base::open): use full win32 path name to
- generate inode number namehash instead of unix filename.
- * fork.cc (cygwin_fork_helper1): block all signals while child and
- parent are in fork() code
- * grp.cc (initgroups): new stub added
- * include/limits.h: new posix defines added
- * include/sys/termios.h: typedef speed_t as unsigned char
- * path.cc (mount_info::conv_to_posix_path) bugfix
- * pinfo.cc (pinfo_list::operator []): PID_NOT_IN_USE check added
- (pinfo::record_death): set child's ppid to 1 on parent exit
- * signal.cc (sleep): correct return value if sleep call was
- interrupted
- (_kill): correct return value if killed pid was not found.
- (sigaction): correct return value on handling non-handlable
- signals, clear pending ignored signals
- (sigsuspend): sigsuspend call should always return -1 and set errno
- to EINTR.
- * spawn.cc: respace
- * syscalls.cc: map ERROR_NO_DATA to EPIPE instead of ENODATA
- (isatty): fixed return value
- (fpathconf): new
- (pathconf): rewritten
- (ttyname): fixed return value
- * sysconf.cc (sysconf): misc fixes
- * termios.cc (tcsendbreak): corrected errno set
- (tcdrain): likewise
- (tcflush): likewise
- (tcflow): likewise
- (tcsetattr): likewise
- (tcgetattr): likewise
- (tcgetpgrp): likewise
- (tcsetpgrp): likewise
- * tty.cc (fhandler_tty_slave::ioctl): TCGETA/TCSETA support added
- * wait.cc (_wait): wait() syscall should do not terminate if
- a child is stopped.
- (wait4): wait calls should wait childs only; fixed a bug with
- nprocinfo count; fixed signal handling.
-
-Thu Jul 24 02:10:25 1997 Geoffrey Noer <noer@cygnus.com>
-
- * uname.cc: uname now outputs Cygwin32_NT or Cygwin32_95
- instead of Cygwin32/NT or Cygwin32/95.
-
-Thu Jul 24 02:10:25 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * cygwin.din: sexecve, sexecl, sexecle, sexeclp, sexeclpe,
- sexecv, sexecp, sexecvpe - new exports
- * exceptions.cc (ctrl_c_handler): do not raise SIGHUP on
- CTRL_LOGOFF_EVENT to prevent termination of cygwin application
- run as NT service on user logoff, raise SIGHUP instead of SIGQUIT
- on system shutdown, clear stopped status in inuse_p on SIGCONT,
- set stopped status on stop signals, call _exit() on process
- termination in a context of signal thread to terminate while
- in a blocking win32 syscall.
- * exec.cc: include unistd.h and ctype.h.
- (_execve): code moved to sexecve, call sexecve with a NULL hToken
- handle.
- (sexecve): new, check path, argv[0] and envp to null values,
- pass nToken handle to spawn_guts().
- (sexecl): new (code derived from spawn family of functions in
- spawn.cc)
- (sexecle): new
- (sexeclp): new
- (sexeclpe): new
- (sexecv): new
- (sexecp): new
- (strccopy): new
- (sexecvpe): new
- * fhandler.cc (fhandler_base::fstat): add STD_RBITS and STD_WBITS
- to st_mode of non-file handles.
- (fhandler_dev_floppy::open): clear O_TRUNC bit.
- (fhandler_dev_tape::open): likewise
- * fhandler.h (fhandler_pty_master): new member pktmode (flag to
- indicate pty's packet mode)
- * fork.cc (cygwin_fork_helper1): call uinfo_init () in a child code
- to read /etc/passwd, /etc/group into memory.
- * hinfo.cc (hinfo_vec::build_fhandler): check socket names for right
- inheritance on exec().
- * include/Windows32/Defines.h: fixed a typo in LPSTR_TEXTCALLBACKA
- definition
- * include/Windows32/Functions.h: added prototype for
- ImpersonateLoggedOnUser() API call.
- * net.cc (cygwin32_socket): duplicate socket handle as inheritable
- to avoid Windows95 socket inheritance bug, close the original socket.
- (cygwin32_accept): likewise.
- * path.cc (mount_info::conv_to_win32_path): do not add trailing
- backslash to UNC device names like "\\.\a:", "\\.\tape0:" etc.
- * pinfo.cc (pinfo::record_death_nolock) set PID_WAITING_FOR_PARENT
- bit to inuse_p instead of assignment - inuse_p is a bit set now.
- (pinfo::record_death): check PID_WAITING_FOR_PARENT bit instead of
- comparison.
- * select.cc (fd_pipe_map::convert_to_unix_fdset): deal with pipe
- errors.
- (pipethread): likewise
- * shared.cc (create_shared_fd_table): allow any process to access
- shared arg, needed for sexec() family implementation
- * signal.cc (kill_worker): fixed a typo in debug printf
- * spawn.cc (spawn_guts): new hToken argument (security token of
- logged on user for sexec() calls implementation), added checks for
- zero prog_arg and argv[0], if hToken is not NULL run
- CreateProcessAsUser() on the current window station/desktop, or
- just CreateProcess() otherwise, close hToken after the process is
- created.
- (_spawnve): pass NULL hToken to spawn_guts().
- * syscalls.cc (_read): set process's read status while in a read call
- (_write): set process's write status while in a write call
- (stat_worker): if GetFileAttributes() fails, try to call fstat to
- support raw devices
- * syscalls.h: include windows.h, added sexec() family functions
- prototypes.
- * sysdef/i386/kernel32.def: ImpersonateLoggedOnUser - new export
- * tty.cc: tty attachment logic changed - tty_list::count field
- counts now number of tty opens, but not a number of processes,
- attached to a tty.
- (tty_init): do not call attach_tty() in a exec'ed process
- (attach_tty): correct return value if !use_tty.
- (tty::init): initialize pgid and hwnd fields.
- (tty_list::terminate): clearout tty on master exit.
- (tty_list::allocate_tty): fixed a bug in a tty allocation.
- (fhandler_tty_master::init): on NT allow any process to open
- tty-master process for handle duplication, create synchronisation
- events with a world-wide access, initialize winsize structure with
- a default values.
- (fhandler_tty_slave::open): if a tty doesn't have process group set,
- set it to a process group of current process.
- (fhandler_tty_slave::write): added missed \n to debug print, tty
- write synchronization moved to a more correct place.
- (fhandler_tty_slave::read): Sleep time changed for conformance with
- other sleeps.
- (fhandler_tty_slave::tcsetattr): synchronization added
- (fhandler_tty_slave::ioctl): initialize arg.winsize with a tty-stored
- value, copy the result of ioctl call to winsize.
- (fhandler_pty_master::fstat): small fix
- (fhandler_pty_master::open): on NT allow any process to open
- pty-master process for handle duplication, initialize winsize
- structure with a default values.
- (fhandler_pty_master::read): check for pipe errors, changes to support
- packet mode
- (fhandler_pty_master::ioctl): rewritten, no longer a stub.
- (fhandler_pty_master::linearize/de_linearize): save/restore pktmode
- value.
- * tty.h (class tty): winsize - new member
- * utils/ps.cc: show process status just after tty number field
- * winsup.h: defines for new bits in inuse_p added, spawn_guts()
- prototype changed.
-
-Thu Jul 24 02:10:25 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * Makefile.in: Add tty.o to link and dependency lists, add
- tty.h to headers list
- * console.cc (fhandler_console::open): save open call flags
- (fhandler_console::input_tcsetattr): clear all console modes if
- tty support enabled
- (FakeReadFile): restart read on signal delivering, changed CTRL
- macro to CONTROL to avoid conflict with sys/termios.h, copy as
- much as possible chars to output buffer instead of call to
- undo_input after every char to prevent timeouts problem.
- * cygwin.din: srandom, ptsname, grantpt, unlockpt - new exports.
- * dcrt0.cc: include tty.h, new use_tty global variable.
- (dll_crt0_1): call events_init() on application startup, set
- use_tty to FALSE if CYGWIN_NOTTY environment variable is defined,
- do not change console title if CYGWIN_NOTITLE environment
- variable set, call tty_init().
- (_exit): call tty_terminate(), events_terminate() and others
- in the right order. All modifications of console title are
- mutexed to allow tty code to obtain console window handle right.
- * exceptions.cc (exception_init): initialization of signal_arrived
- event moved to events_init().
- (call_handler): raise signal arrived event after resuming main
- thread.
- (__cygwin_exception_handler): raise signal instead of calling
- ctrl_c_handler, because exception handler is called in a context
- of the thread, caused exception, and SuspendThread in call_handler
- blocks itself :-)
- (ctrl_c_handler): clear stopsig on SIGCONT delivery, call
- ResumeThread until suspend count > 1, notify parent about child's
- status changed. Care about handling SIGCONT signal. On stop
- signals release vital mutexes used by stopped thread, save
- signal number for wait(WUNTRACED) calls, notify parent about child's
- status change. Do not stop processes running without job control
- (when pgid == 0). Ensure that main thread is unblocked before
- call _exit().
- (events_init): new
- (events_terminate): new
- * fcntl.cc (_fcntl): use saved open flags on F_GETFL/F_SETFL instead
- of game with access_ variable. Is this variable longer needed?
- * fhandler.cc (fhandler_base::linearize/de_linearize): save/restore
- openflags_ variable.
- (fhandler_base::open): save file open flags.
- * fhandler.h (fhandler_base): new openflags_ member, new member
- functions get_flags/set_flags, new virtual functions ptsname,
- dup_for_fork, tcget(set)pgrp
- (fhandler_pipe): remove always_write/except_ready because pipes
- are always write ready (not true...) and selectable on read.
- new classes fhandler_tty_slave, fhandler_pty_master,
- fhandler_tty_master
- * fork.cc (cygwin_fork_helper1): inherit control tty number on fork,
- call tty_init on child startup.
- * hinfo.cc: include stdlib.h and ctype.h.
- (hmap_init): take care on exec'ed processes.
- (init_std_file_from_handle): open /dev/tty for standard handles if
- tty usage enabled.
- (build_fhandler): check for tty slave and pty master devices.
- * include/exceptions.h: exception handler returns "int" (exception
- handling code), not "void".
- * include/termios.h: new defines, struct winsize must contain
- ws_xpixel and ws_ypixel members (commented now to avoid
- incompabilities with existing binaries. Should be uncommented in
- next release.
- * net.cc (gethostbyaddr): corrected return value
- * passwd.cc (parse): remove trailing newline from password
- lines (user's shell was reported with trailing newline before).
- * pinfo.cc (lock_pinfo_for_update): open mutex code moved to
- events_init() in exceptions.cc.
- (destroy_pinfo_lock): removed, pinfo_mutex is now closed in
- events_terminate() in exceptions.cc.
- (init_self): the initial value for pgid must be 0 (no job-controlled
- process).
- * select.cc: all debug_printf's changed to select_printf.
- (fd_pipe_map): new class to implement (polling...) select on pipes.
- (pipethread): new
- (cygwin32_select): comment out socket only case since generic
- code (select on different types of handles) works for sockets too
- but is interruptable. The case for always_ready_used is used now
- and for polling select (zero timevalue). Changes to support
- select on pipes.
- * shared.cc (shared_info::initialize): initialize tty table.
- * signal.cc (sleep/usleep/sigsuspend/pause): signal_arrived moved
- from u area to dll's address space, signal_arrived is manual reset
- event now.
- (_raise): implemented as kill (self, sig).
- (kill_worker): new. Use SendMessage instead of PostMessage to avoid
- some timing problems.
- * spawn.cc: include tty.h.
- (spawn_guts) call close_all_files() on exec, call tty_terminate()
- before process exit. Some changes due to moving signal_arrived to
- dll's address space.
- (_spawnve): inherit control tty number on spawn.
- * syscalls.cc (close_all_files): reenabled. The code is ok after
- all! The troubles were due to incorrect usage on exec() calls.
- (setsid): no longer a stub
- (ptsname): new
- * termios.cc: all syscall_printf's changed to termios_printf.
- (tcget(set)pgrp): rewritten, no longer a stub.
- * times.cc (utimes): It looks like Win32 does not allow changing
- times of directories, so just return success in this case.
- * tty.cc: new file
- (tty_init): new
- (tty_terminate): new
- (attach_tty): new
- (detach_tty): new
- (tty::init): new
- (tty_list::terminate): new
- (tty_list::connect_tty): new
- (tty_list::free_tty): new
- (tty_list::init): new
- (tty_list::allocate_tty): new
- (fhandler_tty_master::fhandler_tty_master): new
- (create_tty_master): new
- (fhandler_tty_master::init): new
- (doecho): new
- (do_input): new
- (process_input): new
- (do_output): new
- (process_output): new
- (process_ioctl): new
- (fhandler_tty_slave::fhandler_tty_slave): new
- (fhandler_tty_slave::open): new
- (fhandler_tty_slave::init): new
- (fhandler_tty_slave::close): new
- (fhandler_tty_slave::write): new
- (fhandler_tty_slave::read): new
- (fhandler_tty_slave::linearize): new
- (fhandler_tty_slave::de_linearize): new
- (fhandler_tty_slave::dup): new
- (fhandler_tty_slave::dup_for_fork): new
- (fhandler_tty_slave::fstat): new
- (fhandler_tty_slave::tcgetattr): new
- (fhandler_tty_slave::tcsetattr): new
- (fhandler_tty_slave::tcflush): new
- (fhandler_tty_slave::tcsetpgrp): new
- (fhandler_tty_slave::tcgetpgrp): new
- (fhandler_tty_slave::send_ioctl_request): new
- (fhandler_tty_slave::ioctl): new
- (fhandler_pty_master::fhandler_pty_master): new
- (fhandler_pty_master::fstat): new
- (fhandler_pty_master::open): new
- (fhandler_pty_master::close): new
- (fhandler_pty_master::write): new
- (fhandler_pty_master::read): new
- (fhandler_pty_master::tcgetattr): new
- (fhandler_pty_master::tcsetattr): new
- (fhandler_pty_master::tcflush): new
- (fhandler_pty_master::ioctl): new
- (fhandler_pty_master::ptsname): new
- (fhandler_pty_master::linearize): new
- (fhandler_pty_master::de_linearize): new
- (fhandler_pty_master::dup_for_fork): new
- (grantpt): new
- (unlockpt): new
- * tty.h: new
- * utils/ps.cc: display process's control tty number.
- * wait.cc (wait_for_single): removed.
- (wait_for_any): all code moved to wait4().
- (wait4): rescan process table on child status changes, support for
- WUNTRACED flag, avoid time races on child exit, correct return
- value on timeout.
- * window.cc: misc changes to wait creation of process's hidden
- window to avoid race conditions on multiprocessor systems.
- * winsup.h: misc changes to support all of the above.
-
-Thu Jul 24 02:10:25 1997 Geoffrey Noer <noer@cygnus.com>
-
- * net.cc (cygwin32_shutdown): New implementation to replace
- stub previously present
-
-Tue Jul 22 14:59:22 1997 Geoffrey Noer <noer@cygnus.com>
-
- * cygwin.din: remove random, srandom
- * Makefile.in: remove random/srandom-related lines
-
-Tue Jul 22 14:10:32 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * path.cc (realpath): New C function.
- * cygwin.din: Export realpath.
-
- * cygwin.din: Export srandom.
-
-Wed Jul 9 12:26:03 1997 Geoffrey Noer <noer@cygnus.com>
-
- * Makefile.in: libiberty random.o ends up in winsup, link
- in that obj for now
-
-Tue Jul 8 14:02:41 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * libcmain.cc (main): Pass wShowWindow field from startup info to
- WinMain.
-
-Mon Jul 7 17:47:48 1997 Geoffrey Noer <noer@cygnus.com>
-
- * path.cc: respace, reword comments
- * times.cc (utimes): add FIXME
-
-Tue Jun 24 18:31:27 1997 Geoffrey Noer <noer@cygnus.com>
-
- * winsup.h: adjust protos to reflect the above, add enum os_type
- which contains {winNT, win95, win32s, unknown}
- * security.cc (is_nt): Delete
- * syscalls.cc (windows_95): Delete
- (get_os_type): New local function which returns os_type. Replaces
- windows_95() and is_nt().
-
- * fhandler.cc: Reformat. Call get_os_type() instead of
- windows_95() and/or is_nt(), reorder so NT cases are first.
- * mmap.cc: ditto
- * net.cc: ditto
- * syscalls.cc: ditto
- * syslog.cc: ditto
-
- * uname.cc (uname): call get_os_type to fill new our_os local
- variable, check that when filling out utsname struct, default
- to i386 when we can't find out the specific Intel processor
- variant.
- * fhandler.cc (get_file_owner): remove doit variable
- (get_file_group): ditto
- * mmap.cc: extern "C" individual functions instead of wrapper
- around most of file.
- * misc.cc: minor reformat
- * heap.cc (_sbrk): split a = b = c statement into two to
- make code clearer and avoid invalid C++ casting warning during
- compile.
- * path.cc (symlink_follow): initialize syml_p and exec_p to zero
- * select.cc: respace
- (selectthread): cast first arg of WINSOCK_FD_SET
- * ntea.cc (NTReadEARaw): add missing casts in front of malloc calls
- * utils/mount.cc: remove mixed option since that hasn't been
- supported for quite some time
-
-Sun Jun 22 17:27:03 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * include/windows.h: If RC_INVOKED is defined, don't include
- limits.h, stdarg.h, Structures.h, Functions.h or Sockets.h, and
- don't typedef BOOL.
- * include/Windows32/Base.h: Don't do any typedefs if RC_INVOKED is
- defined.
-
- * include/Windows32/Sockets.h (MAXHOSTNAMELEN): Don't define if
- already defined.
- * include/sys/param.h (MAXHOSTNAMELEN): Likewise.
-
-Fri Jun 20 11:06:09 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * include/sys/wait.h: correct operator precidence bug
- in WIFSIGNALED
-
-Thu Jun 19 12:58:45 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- Handle unblocked pending signals on sig_mask changes
- * exceptions.cc (return_handler): renamed to set_process_mask
- (set_process_mask): new; use to set process mask instead of direct
- u->self->sig_mask manipulations.
- * winsup.h: rename return_handler proto to set_process_mask
- * signal.cc: throughout file, call set_process_mask() instead of
- direct manipulations of u->self->sig_mask.
- (pause): new
- * cygwin.din: add pause() export
- * syscalls.cc (system): correct return value
-
-Wed Jun 18 22:01:56 1997 Geoffrey Noer <noer@cygnus.com>
-
- * Makefile.in: add $(srcdir)/../newlib/libc/sys/cygwin32 to
- the list of includes since that's where sys/dirent.h is
- supposed to live
- * include/sys/dirent.h: moved to newlib/libc/sys/cygwin32/sys
-
-Wed Jun 18 13:56:47 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * signal.cc (sigsuspend): deal with pending unblocked signals
- * winsup.h: add proto for return_handler (sigset_t)
-
-Wed Jun 18 02:02:13 1997 Geoffrey Noer <noer@cygnus.com>
-
- respaced console.cc, fhandler.cc, syscalls.cc, pinfo.cc,
- fork.cc, spawn.cc
-
-Tue Jun 17 14:57:09 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * cygwin.din: add getpgid, killpg exports, delete duplicate
- random export
- * fork.cc (cygwin_fork_helper1): inherit pgid and sid on fork
- * misc.cc (cygwin32_*env): save environ value in __cygwin_environ
- too. Is __cygwin_environ variable really neccessary? Why not
- export cygwin.dll's environ variable with "__cygwin_environ" name?
- * pinfo.cc (pinfo::init_self): initialize pgid and sid
- * signal.cc (kill_worker): new
- (_kill): rewritten to support process groups
- (killpg): new
- * spawn.cc (_spawnwe): inherit pgid and sid on spawn family calls
- * stubs.cc (setpgrp, getpgrp): remove stubs
- * syscalls.cc (setpgid, getpgid, setpgrp, getpgrp): new
- * termios.cc (setpgid): remove stub
- * utils/ps.cc (main): add pgid to output, change output
- format
- * wait.cc (wait_for_any): add intpid argument, arrays ctable and
- ptable have now fixed MAXIMUM_WAIT_OBJECTS size to avoid extra
- scan of process table, changes for process groups support.
- (wait4): misc changes to support process groups
- * winsup.h (pinfo class): add new variables pgid, sid.
- Define __cygwin_environ.
-
-Mon Jun 16 18:30:21 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * spawn.cc (spawn_guts): set child->hProcess and child->hThread,
- CloseHandle on pi.hThread at end of spawn_guts instead of right
- after starting the child process,
- _P_WAIT needs to be handled separately from _P_OVERLAY
-
-Sun Jun 15 23:51:10 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * cygwin.din: remove setenv/getenv-related exports,
- export cygwin32_ equivalents
- * exec.cc: check ?
- * misc.cc (cygwin32_getenv): new
- (cygwin32_putenv): new
- cygwin32_setenv): new
- (cygwin32_unsetenv): new
- * spawn.cc: call cygwin32_getenv instead of getenv,
- call spawn with *u->envptr instead of environ
- * winsup.h: define **environ as extern, define *cygwin32_getenv
-
-Sun Jun 15 20:51:09 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * Makefile.in: add ../libiberty/random.o to EXTRA_OFILES
- * cygwin.din: remove exports of tgetent and _tgetent, added random
- * exception.cc (exceptions_init): make OurThread handle
- noniherittable, remove unused buf array.
- (return_handler): add restmask argument (sig_mask value before
- calling signal handler)
- (call_handler): save sig_mask in user's stack before calling signal
- handler, change PulseEvent() call to SetEvent() -- there were
- losses of signal_arrived events if main thread was not in wait
- state.
- (ctrl_c_handler): add support for SIGIO signal.
- * fhandler.cc (fhandler_base::linearize/delinearize):
- save/restore async_ flag
- (fhandler_base::fhandler_base): clear async_ flag
- * fhandler.h: add async_ as new variable in fhandler_base,
- add get_async/set_async functions
- * misc.cc (tgetent): remove stub
- * net.cc (fhandler_socket::write): raise SIGPIPE if write to
- disconnected socket.
- (cygwin32_accept): check the result of find_unused_handle() before
- accept() call, set errno if no more file descriptors available.
- (fhandler_socket::ioctl): add support for async I/O on sockets
- * pinfo.cc (pinfo::clearout): clear sig_pending mask
- * syscalls.cc (readv, writev): rewrite
- * window.cc (WndProc): add support for async I/O
- * winsup.h: define WM_ASYNCIO
-
-Mon Jun 9 18:51:09 1997 Geoffrey Noer <noer@cygnus.com>
-
- * include/winsock.h: fix protection wrapper name
-
-Fri Jun 6 12:41:09 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * include/Windows32/Defines.h: Define CommonDlgExtendedError
- return values (CDERR_*, PDERR_*, CFERR_*, FNERR_*). Define
- TEXTMETRIC tmPitchAndFamily values (TMPF_*).
-
- * include/dlgs.h: New file; just includes windows.h.
- * include/cderr.h: Likewise.
-
- * libcmain.cc (main): Don't pass the program name to WinMain.
-
- * cygwin.din: Export strlwr and strupr.
-
- * include/winreg.h: New file; just includes windows.h.
- * include/winsock.h: New file; just includes windows.h and
- Windows32/Sockets.h.
- * include/Windows32/Sockets.h: Don't define u_char, et. al. if
- _SYS_TYPES_H is defined. Undefine fd_set if it is defined.
-
- * include/Windows32/Functions.h: Define MoveMemory, FillMemory,
- and ZeroMemory as macros.
-
- * times.cc (_timezone, _daylight, _tzname): New global variables.
- (tzset): New function.
- * cygwin.din: Don't set _timezone to timezone. Export tzset and
- _tzset. Export _timezone, _daylight, and _tzname.
-
- * dcrt0.cc (__cygwin_environ): New global variable.
- (dll_crt0_1): Set __cygwin_environ to environ.
- * cygwin.din: Export __cygwin_environ.
-
-Thu Jun 5 17:52:02 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * times.cc (gettimeofday): Check return values and set tz_dsttime
- correctly.
-
-Wed Jun 4 00:04:33 1997 Geoffrey Noer <noer@cygnus.com>
-
- * fhandler.cc (fhandler_pipe::lseek): new virtual function
- * fhandler.h: add lseek to fhandler_pipe class
-
-Tue Jun 3 19:20:47 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * include/Windows32/Defines.h (IMAGE_DOS_SIGNATURE): Define.
- (IMAGE_NT_SIGNATURE): Define.
- * include/Windows32/Structures.h (IMAGE_DOS_HEADER): Define.
-
-Tue Jun 3 13:05:26 1997 Geoffrey Noer <noer@cygnus.com>
-
- * console.cc: respace
- * fhandler.h: add virtual off_t lseek to fhandler_socket and
- fhandler_tty defs, respacing
-
-Mon Jun 3 12:21:20 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * cygwin.din: export wait3, wait4
- * dcrt0.cc (_exit): call fill_rusage
- * exceptions.cc (ctrl_c_handler): increment rusage_self.ru_nsignals++
- * fhandler.cc (fhandler_pipe::fhandler_pipe): new stub
- * fhandler.h: add fhandler_pipe class
- * hinfo.cc (hinfo_vec::build_fhandler): call
- GetNumberOfConsoleInputEvents instead of GetConsoleScreenBufferInfo,
- handle fhandler_pipe class
- * pinfo.cc: include sys/resource.h,
- (pinfo::clearout): erase memory associated with rusage_self
- and rusage_children
- * resource.cc (getrusage): rewrite
- (add_timeval): new helper function
- (add_rusage): new helper function
- (fill_rusage): new helper function
- * shared.cc (create_shared_fd_table): pass file mapping handle to
- children letting them close it
- * spawn.cc (spawn_guts): call fill_rusage and add_rusage as
- appropriate
- (cwait): ditto
- * times.cc (__to_clock_t): add flag arg which says whether or not
- to substract FACTOR from total
- (times): also fill in tms_cstime and tms_cutime, add flag arg to
- __to_clock_t calls
- (totimeval): add extra flag passed on to __to_clock_t
- (gettimeofday): add extra flag passed on to totimeval
- * wait.cc (wait_for_single): add extra rusage arg, change
- wait_found calls to account for extra arg
- (wait_for_any): ditto
- (_wait): call wait4 instead of waitpid
- (wait_found): add rusage arg, deal with it calling add_rusage as
- appropriate
- (wait_pid): now just calls wait4
- (wait4): was wait_pid but adds extra rusage arg and deals with it
- (wait3): new, calls wait4
- * winsup.h: include sys/resource.h, add rusage_self and
- rusage_children to pinfo class, fix totimeval proto, add protos
- for fill_rusage and add_rusage
- * passwd.cc: include termios.h
- (getpass): new
- * stubs.cc (getpass): delete old stub
-
-Tue Jun 3 14:51:47 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * times.cc (ftime): New function.
- * cygwin.din: Export ftime.
-
-Mon Jun 2 14:34:00 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * include/limits.h: NGROUPS_MAX should be 0
- * include/asm/socket.h: add missing additional options
- including SO_SNDBUF, SO_RCVBUF, et al
- * include/sys/wait.h: include sys/resource.h, add protos for
- wait3() and wait4().
-
-Mon Jun 2 15:26:35 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * utils/configure.in: Call AC_PROG_INSTALL.
- * utils/configure: Rebuild.
-
-Mon Jun 2 11:44:14 1997 Geoffrey Noer <noer@cygnus.com>
-
- * grp.cc (getgroups): new
- * cygwin.din: export getgroups
-
-Fri May 30 16:47:38 1997 Geoffrey Noer <noer@cygnus.com>
-
- * uname.cc (uname): completely rewrite, using more of the
- SYSTEM_INFO struct to figure out information (now x86 type is
- set correctly in Windows 95.
- * version.h: increment CYGWIN_DLL_VERSION_MINOR
- * include/Windows32/Structures.h: SYSTEM_INFO struct's first
- member is dwOemId, not dwOemID according to MS docs
-
-Fri May 30 16:47:38 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * window.cc: new file
- * Makefile.in: add window.cc to lists of source, object files,
- and dependencies.
- * console.cc: include <stdlib.h>, scroll_screen() added to
- fhandler_console class,
- add support for default screen attributes,
- (open): set default_color on tty open
- (linearize/delinearize): pass default_color to the child process
- (clear_screen): fix Win95-specific bug, add support for
- default_color.
- (clear_to_eol): remove
- (fhandler_console::fhandler_console): set default_color to
- white on black
- (char_command): add invisible screen attribute, misc changes
- (FakeReadFile): do not convert AltGr-char to ESC-char sequence
- to support international keyboards.
- * cygwin.din: export setitimer, getitimer
- * dcrt0.cc (dll_crt0_1): add call to window_init(), uppercase
- environment vars only if started by a win32 process.
- (_exit): add call to window_terminate()
- * fhandler.cc: add mode argument to open() calls,
- (fhandler_base::open): do not check for symlink in path_conv
- calls, calls to set/get_file_attribute() instead of NTRead/WriteEA.
- (fhandler_base::fstat): use get_file_attribute if possible
- (fhandler_disk_file::open): remove unneeded unixattr checks
- * fhandler.h: changes to support above.
- * fork.cc (cygwin_fork_helper_1): pass umask value to the child,
- call window_init() in child
- * ntea.cc: enable EA calls, add FILE_FLAG_BACKUP_SEMANTICS
- to CreateFile calls to support EA of directories.
- * path.cc (symlink): add mode argument to _open call, remove
- unneeded stuff
- (symlink_check_worker): add checks for "system" attribute and EA.
- * security.cc (get/set_file_attribute): new. Calls EA code now,
- placeholders for NTFS security support.
- * signal.cc (alarm): remove in favor of new implementation in
- window.cc
- (RemoteThread): remove
- (_kill): use window messages to emulate signals on both NT and Win95
- * spawn.cc (spawn_guts): call window_terminate on exec()
- (cwait): correct return result code
- (_spawnve): add umask inheritance, some bug fixes
- * syscalls.cc (_open): add mode argument, umask support
- (umask): rewritten
- (chmod): try to set file attributes, set system bit on symlinks
- (stat_worker): fix nlinks of directories, add mode argument
- to _open() call.
- * syscalls.h: add mode argument to _open() prototype
- * winsup.h: changes to support above
-
-Tue May 27 12:22:19 1997 Geoffrey Noer <noer@cygnus.com>
-
- * times.cc (gettimeofday): return 0 on success instead of 1
- (utimes): init res to 0
-
-Wed May 21 11:29:24 1997 Geoffrey Noer <noer@cygnus.com>
-
- * include/limits.h: define NGROUPS_MAX
-
-Tue May 20 14:13:59 1997 Geoffrey Noer <noer@cygnus.com>
-
- * passwd.cc: rename function setpwend to setpwent (typo)
- * cygwin.din: ditto, also remove name__C9type_info from
- exports list.
-
-Wed May 14 17:38:39 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * signal.cc (sleep): call WaitForSingleObject instead of Sleep
- (usleep): ditto
-
-Wed May 7 15:34:07 1997 Geoffrey Noer <noer@cygnus.com>
-
- Public gnu-win32 beta 18 release made
-
-Sun May 4 15:34:07 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from Mikey <jeffdb@netzone.com>:
- * console.cc (FakeReadFile): FlushConsoleInputBuffer if
- flags & ENABLE_LINE_INPUT and then return ReadFile
-
-Fri May 2 10:53:10 1997 Geoffrey Noer <noer@cygnus.com>
-
- * signal.cc: make exported functions extern "C"
- * include/cygwin32/socket.h: replace values assigned to
- IP_ definitions with ones suitable for use with WinSock.
- * cygwin.din: add exports for sigpending, sigsuspend, remove
- exports for __9type_infoPCc and before__9type_infoRC9type_info
- * winsup.h: remove signal-related protos from winsup.h in favor
- of newlib/libc/include/sys/signal.h
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * signal.cc: (sigpending) new
- (sigsuspend): new
- * utils/termcap: replace with one from Linux
-
-Tue Apr 29 19:03:29 1997 Geoffrey Noer <noer@cygnus.com>
-
- * utils/ps.cc: print Win32 pid as unsigned int so Windows 95
- pids don't show up as negative values
-
-Tue Apr 29 17:20:57 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * spawn.cc (spawn_guts): allocate new cygwin PID for a child
- created with spawn(!_P_OVERLAY)
-
-Tue Apr 29 13:24:59 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * console.cc: assorted console fixes
- * select.cc (fd_socket_map::convert_to_unix_fdset): only
- do full debug_printf if used_ valid
- * exceptions.cc: correct constants used for checking size of
- stack (should be negated)
- * fhandler.cc (fhandler_base::open): fix syscall_printf typo
-
- patch from marcus@cathcart.sysc.pdx.edu (Marcus Daniels):
- * include/sys/mman.h: define MAP_ANON MAP_ANONYMOUS (typo fix)
-
-Mon Apr 28 15:19:44 1997 Geoffrey Noer <noer@cygnus.com>
-
- * cygwin.din: remove libgcc2.a internal functions
-
-Mon Apr 28 14:57:04 1997 Michael Meissner <meissner@cygnus.com>
-
- * cygwin.din (before__9type_infoRC9type_info): Remove, the
- type_info::before(type_info const &) function no longer seems to
- exist.
-
-Mon Apr 28 14:19:44 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * console.cc (undo_input): new
- (scroll_screen): new
- (fhandler_console::output_tcsetattr): fix debug printf
- (fhandler_console::input_tcsetattr): no longer call set_w_binary
- (fhandler_console::cursor_get): fix base_chars
- (fhandler_console::char_command): make savex, savey globals,
- add char buf, add code to handle clears better, many other
- additions
- (fhandler_console::write_normal): assorted fixes
- (fhandler_console::write): move screen scroll code to
- scroll_screen(), support Reset Linux terminal, Restore cursor
- position, Save cursor position, Skip orig_colors
- (FakeReadFile): enlarge keytable to include shift/control/alt
- values
- Command set still missing set pelette, character sets, and
- UTF codes.
-
-Mon Apr 28 12:19:44 1997 Geoffrey Noer <noer@cygnus.com>
-
- * fhandler.cc (fhandler_base::open): only include
- FILE_SHARE_DELETE in shared when running NT (Win 95 doesn't
- support it).
-
-Thu Apr 24 18:57:21 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from Jeremy Allison <jra@cygnus.com>:
- Correct problem caused by setting /dev/null fd to -1 which is
- same as INVALID_HANDLE_VALUE.
- * fhandler.h: set DEV_NULL_HANDLE_VALUE to -2
- * fhandler.cc (fhandler_dev_null::open): set handle to
- DEV_NULL_HANDLE_VALUE instead of INVALID_HANDLE_VALUE
- * hinfo.cc (hinfo_vec::build_fhandler): add case for
- handle == (HANDLE) DEV_NULL_HANDLE_VALUE
-
-Thu Apr 24 15:12:13 1997 Geoffrey Noer <noer@cygnus.com>
-
- * fhandler.cc (fhandler_base::write): catch return of raw_write
- and return -1 if it failed
-
-Thu Apr 24 10:42:01 1997 Geoffrey Noer <noer@cygnus.com>
-
- path.cc (symlink): restore chmod call for now since the NTEA code
- isn't quite up to the task yet.
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * exceptions.cc (ctrl_c_handler): corrections to Apr 18 patch
- * fhandler.cc: ditto
- * dcrt0.cc (dll_crt0_1): move console title setting code,
- set up default signal handlers
- * fork.cc (cygwin_fork_helper1): also set child->sigs and
- child->sig_mask
- * spawn.cc (spawn_guts): if mode _P_OVERLAY, set up child
- signal handlers.
-
-Mon Apr 21 22:29:49 1997 Geoffrey Noer <noer@cygnus.com>
-
- * include/Windows32/ASCIIFunctions.h: remove old def of
- GetEnvironmentStringsA, add new one based on def from Functions.h
- * include/Windows32/Functions.h: define GetEnvironmentStrings as
- GetEnvironmentStringsA when not unicode, remove definition of
- GetEnvironmentStrings in favor of ones in ASCIIFunctions.h and
- UnicodeFunctions.h
- * include/Windows32/Defines.h: add missing XTYP_ definitions,
- change value of XTYPF_NOBLOCK to 0x0002 from 0x2
- * include/Windows32/Sockets.h: comment out redefinitions of
- errno.h-type constants since MS doesn't define them and we
- have our own in errno.h
-
-Fri Apr 18 10:40:30 1997 Geoffrey Noer <noer@cygnus.com>
-
- * include/Windows32/Structures.h: add typedefs for
- LPDLGITEMTEMPLATE, PDLGITEMTEMPLATE.
- * include/Windows32/Defines.h: define FW_REGULAR FW_NORMAL
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * exceptions.cc (ctrl_c_handler): do not reset signal
- handler to SIG_DFL while processing the signal, instead
- block the signal while handler executes.
- * signal.cc (_raise): fixes related to the above
-
-Thu Apr 17 23:50:50 1997 Geoffrey Noer <noer@cygnus.com>
-
- * path.h: increase path length in mount table to MAX_PATH
- in size instad of 30. This will increase cygwin.dll memory
- usage by 20K. We need to remove static allocations from
- path code.
-
-Thu Apr 17 10:11:50 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * exceptions.cc (ctrl_c_handler): CTRL_CLOSE_EVENT should
- generate SIGHUP instead of SIGQUIT
- * signal.cc (_raise): rewrite
-
-Wed Apr 16 10:42:46 1997 Geoffrey Noer <noer@cygnus.com>
-
- * version.h: increment CYGWIN_DLL_VERSION_MINOR
- * syscalls.cc (system): use spawnvp instead of fork/exec
- * ntea.cc: make all functions return false for now; they
- were causing an obscene performance hit
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * console.cc (FakeReadFile): patch to support EINTR, EIO
- * exceptions.cc: add support for return_handler, remove
- control-C counter
- (return_handler): new
- (ctrl_c_handler): handle SIGCHLD, other assorted fixes
- * fhandler.cc (fstat): reset errno to 0
- * passwd.cc (search_for): correct location of a debug printf
- * select.cc: patches to handle signals better, respacing
- * signal.cc (_raise): misc fixes
- (_kill): call OpenProcess with PROCESS_ALL_ACCESS instead of
- PROCESS_TERMINATE
- * spawn.cc: more signal fixes
- * syscalls.cc: add two new errors to errmap[]
- (_stat_worker): fill out buf struct when stating directories
- * wait.cc (wait_for_single): use INFINITE instead of large value
- for timeouts
- (wait_for_any): init nprocinfo to 1, not 0, other small fixes
- * winsup.h: add signal_arrived to per_process class, reduce
- amount of reserved space, add sig_pending to pinfo class
-
-Tue Apr 15 17:01:34 1997 Geoffrey Noer <noer@cygnus.com>
-
- * utils/mkpasswd.c: change default shell to /bin/sh
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * utils/kill.cc: support sending numbered signals using
- signal code instead of just calling TerminateProcess
-
-Tue Apr 15 15:24:55 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * utils/Makefile.in (INSTALL): Set to @INSTALL@.
- (INSTALL_PROGRAM): Set to @INSTALL_PROGRAM@.
- (INSTALL_DATA): Set to @INSTALL_DATA@.
- (INSTALL_XFORM): Remove.
- (install): Depend upon installdirs. Use $(program_transform_name)
- directly, rather than using $(INSTALL_XFORM).
- (installdirs): New target.
-
-Mon Apr 14 16:32:05 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * utils/Makefile.in (INSTALL): Change install.sh to install-sh.
-
-Mon Apr 14 12:33:22 1997 Geoffrey Noer <noer@cygnus.com>
-
- * registry.cc: change key name to "Cygnus Solutions" instead
- of "Cygnus Support"
- * security.cc: don't include windows.h, already in winsup.h
- * Makefile.in: add dependencies section entries for security.cc
- and ntea.cc
-
-Fri Apr 11 00:03:49 1997 Geoffrey Noer <noer@cygnus.com>
-
- * dcrt0.cc: add harmless cast to FreeEnvironmentStrings call
- * registry.cc: added more presumed-harmless casts
- * shared.cc: and another, and respacing
- * utils/Makefile.in: don't need to link with -lkernel32 since it's
- included automatically
- * fhandler.cc: fhandler_console and FakeReadFile moved to
- console.cc, stop including sys/stat.h, sys/param.h, sys/types.h,
- stdio.h, ctype.h, pwd.h, grp.h, stdlib.h
- reordered/respaced code so now we have all of fhandler_base, then
- all of fhandler_disk_file, then all of fhandler_tty, etc...
- (fhandler_base::ioctl): delete unused switch statement
- * console.cc: added fhandler_console and FakeReadFile from
- fhandler.cc, add includes necessary for this code
- * grp.cc, Makefile.in: fix copyright dates
- * ntea.cc: include string.h
-
-Thu Apr 10 22:00:43 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * path.cc (symlink): do NTWriteEA instead of chmod using same
- flags
-
-Thu Apr 10 17:36:43 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from gunther.ebert@ixos-leipzig.de (Gunther Ebert):
- * Makefile.in: add libnetapi32.a to DLL_IMPORTS list, build security.o
- * fhandler.cc (get_file_owner): new
- (get_file_group): new
- (fhandler_base::fstat): do another path_conv and check for error,
- use get_file_owner and get_file_group to set buf->st_uid and
- buf->st_gid
- * fhandler.h: add protos for get_file_owner() and get_file_group()
- * grp.cc (add_grp_line): new helper function
- (read_etc_group): new helper function
- (getgrgid): rewritten, no longer a stub
- (getgrnam): rewritten, no longer a stub
- (endgrent): rewritten, no longer a stub
- (getgrent): rewritten, no longer a stub
- * include/Windows32/ASCIIFunctions.h, include/Windows32/Base.h,
- include/Windows32/Functions.h, include/Windows32/Defines.h,
- include/Windows32/Structures.h, include/Windows32/UnicodeFunctions.h:
- misc security/uid-related additions
- * passwd.cc (add_pwd_line): new
- (read_etc_passwd): new
- (search_for): rewrite
- (setpwend): rewritten, no longer a stub
- (getpwent): rewritten, no longer a stub
- (endpwent): rewritten, no longer a stub
- * security.cc: new file
- (get_world_sid): new
- (world_full_access): new
- (get_id_from_sid): new
- (is_nt): new
- * stubs.cc (endgrent): remove
- (getgrent): remove
- * syscalls.cc (rel2abssd): new
- (set_process_privileges): new
- (chown): now implemented for real for NT, still a stub in Win95
- (_stat_worker): use get_file_owner and get_file_group to set
- buf->st_uid and buf->st_gid
- * uinfo.cc: add protos for read_etc_passwd, read_etc_group
- (uinfo_init): call read_etc_passwd(), read_etc_group()
- * utils/Makefile.in: build mkpasswd, mkgroup
- * utils/mkgroup.c: new, use to make an /etc/group file
- * utils/mkpasswd.c: new, use to make an /etc/passwd file
- * winsup.h: add protos for is_nt(), get_id_from_sid()
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * Makefile.in: build ntea.o
- * dcrt0.cc (dll_crt0_1): move console title code here from spawn_guts
- * exceptions.cc (ctrl_c_handler): small signal fixes, prepare
- things so we can eventually reset the signal handler to SIG_DFL
- * fhandler.cc (fhandler_disk_file::open): first check for EA info
- about exec/symlink status before doing it the hard way
- (fhandler_make_pipe): u->self->hmap.build_fhandler takes extra arg
- (fhandler_base::open): make use of NTEA
- * fhandler.h: remove init_std_file_from_handle, build_fhandler
- protos
- * hinfo.cc: include mywinsock.h and sys/socket.h, define
- __INSIDE_CYGWIN_NET__, __INSIDE_CYGWIN32__
- (hinfo_vec::build_fhandler): takes an additional handle arg,
- call GetConsoleScreenBufferInfo with it to see if are
- fhandler_console, call GetCommState with it to see if we're
- an fhandler_tty, call getpeername with it to see if we wamt
- fhandler_socket. Old determining methods still work too.
- * path.cc (symlink): chmod file to ((S_IFLNK) | (STD_RBITS) |
- (STD_WBITS) | (STD_XBITS)) permissions
- * select.cc: include stdio.h
- (cygwin32_select): fix typo (missing an &),
- assorted fixes for mixed socket/handles case
- * shared.cc (create_shared_fd_table): set sa.bInheritHandle to 1
- to support reparenting
- * signal.cc (_kill): add FIXME, cleanup return codes
- * spawn.cc (spawn_guts): remove console title code, add code
- to support reparenting of child processes
- * syscalls.cc: add new third arg to hmap.build_fhandler calls
- (chmod): make use of NTWriteEA
- * ntea.cc: new file, NTEA handling routines
- * times.cc: fix value of NSPERSEC
- (utimes): fix return value
- * wait.cc: changes to support reparenting, change INFINITE to
- constant 500 to avoid "blocking win32 syscalls and signals"
- problem
- * winsup.h: add NTReadEA, NTWriteEA protos, define REPARENTING,
- fix build_fhandler proto to add new arg, add handles hrProcess and
- hrThread
-
-Tue Apr 9 00:25:33 1997 Geoffrey Noer <noer@cygnus.com>
-
- * libcerr.cc: remove fixed size of sys_errlist array, figure out
- sys_nerr from the sizeof the array rather than hard coding it.
- * shared.cc (open_shared_file_map): add typecast
- * signal.cc (_kill): SIGKILL should avoid exception handler
- * fork.cc (cygwin_fork_helper1): don't call ExitProcess with a
- negative arg on recreate_mmaps_after_fork failure
- * include/Windows32/Defines.h: define VER_PLATFORM_WIN32_WINDOWS
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * dcrt0.cc: move reent_data from private address space to cygwin.dll
- * fork.cc: copy parent's reent_data to the child
- * cygwin.din: export reent_data
- * winsup.h: add as public struct _reent reent_save to pinfo class
-
- another patch from sos@prospect.com.ru (Sergey Okhapkin):
- * winsup.h: add ctrl_c_handler prototype
- * exceptions.cc (init_exceptions): don't use u->self->hThread
- since for a spawned process, this contains thread id of parent
- Win32 process, not the child's. Instead use GetCurrent* funcs
- to get thread handle.
- (ctrl_c_handler): add more signal support, especially for kill
- * signal.cc (_kill): more signal support, using CreateRemoteThread
- under NT. Win95 only supports SIGKILL since it doesn't have this
- call.
- * syscalls.cc (windows_95): first version check should be an &
- of 0x80000000 instead of 0x8000000
- (close_all_files): hmap[i] doesn't always exist, for now comment
- out code
-
- patch from marcus@sysc.pdx.edu (Marcus Daniels):
- * path.cc (skip_n_slashes): new local function
- (symlink_check_worker): new local function, used to be symlink_check
- (symlink_check): calls symlink_check_worker and returns
- whether path is a symlink or not.
- (symlink_expand): new local function, expand a symlink into
- a file or directory path using symlink_check_worker
- (path_conv::path_conv): takes extra follow_mode arg
- (symlink_follow): call symlink_expand
- * fhandler.cc, syscalls.cc: fix path_conv references
- * path.h: fix path_conv prototype
-
-Mon Mar 24 19:44:28 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * select.cc: fix Feb 19 patch to select
- * syscalls.cc: add statfs() and fstatfs() calls
- * include/sys/vfs.h: new header file to support these
- * cygwin.din: add them to dll export list
-
-Tue Mar 18 18:10:24 1997 Geoffrey Noer <noer@cygnus.com>
-
- * dcrt0.cc: change idata3 asm section to have five null fields
- instead of eight to conform to how MS does this section.
-
-Sun Mar 9 13:10:55 1997 Geoffrey Noer <noer@cygnus.com>
-
- * include/sys/resource.h: add missing struct members to rusage struct
- * resource.cc: added setting of missing fields, mostly to 0 until
- we investigate how to set correct values.
-
-Wed Feb 19 17:44:06 1997 Jeremy Allison <jra@cygnus.com>
-
- * select.cc: Added fixes from sos@prospect.com.ru (Sergey Okhapkin)
- to implement blocking select on sockets/handles. This isn't
- the way I finally want to do this, but I won't get chance
- to do the re-write for a month or two so...
- * include/Windows32/Defines.h: Added defines for NT ACL
- stuff.
-
-Tue Feb 18 12:28:11 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * fhandler.cc: support reverse index escapes in console code
-
-Fri Feb 14 18:55:01 1997 Jeremy Allison <jra@cygnus.com>
-
- * path.cc: Fixed normalize_posix_path() so that double slashes
- are removed, except for those starting a UNC path. The command
- ls .///////FILE_IN_DIRECTORY works now.
-
-Thu Feb 13 14:06:04 1997 Geoffrey Noer <noer@cygnus.com>
-
- * path.cc: remove SLASH_P define and
- * winsup.h: define it here instead
- patch from scottk@utig.ig.utexas.edu (Scott Kempf):
- dirsearch.cc (opendir): fix problem with accessing "/"
-
-Mon Feb 10 13:57:11 1997 Geoffrey Noer <noer@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * misc.cc: replace nice () stub with Win32 implementation
- * spawn.cc
- * fork.cc: use priority returned by GetPriorityClass
-
-Wed Feb 5 16:56:23 1997 Geoffrey Noer <noer@cygnus.com>
-
- * fhandler.cc, syscalls.cc: minor reformat
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * spawn.cc: set console title to reflect what's running
- * winsup.h: TITLESIZE define added
-
-Mon Feb 3 16:53:10 1997 Geoffrey Noer <noer@cygnus.com>
-
- * fhandler.h: fix typo
- * fhandler.cc: check_execable_p should only take one arg now
-
-Mon Feb 3 16:16:39 1997 Jeremy Allison <jra@cygnus.com>
-
- * fhandler.cc: Removed open_helper, turned it into
- fhandler_base::open and added fhandler_disk_file::open. More
- correct C++.
- fhandler_disk_file: Moved check_execable_p into fhandler_disk_file.
- tty ports are now closed correctly.
- * fhandler.h: Changes to support the above.
-
-Fri Jan 31 19:14:34 1997 Geoffrey Noer <noer@cygnus.com>
-
- * fhandler.cc (fhandler_base::open_helper): new function
- containing the common open() code. symlink and executable
- status defaults to 0.
- (fhandler_tty::open): new function that calls
- fhandler_base::open_helper
- (fhandler_base::open): remove common code now in open_helper,
- leaving symlink checking and executable checking
- * fhandler.h: changes for the above, open_helper is protected
-
-Thu Jan 30 15:23:15 1997 Geoffrey Noer <noer@cygnus.com>
-
- * hinfo.cc: also treat com3 and com4 as special files
- * spawn.cc (spawn_guts): check return of WaitForSingleObject
- in _P_WAIT case, some reformatting
-
-Tue Jan 28 10:46:16 1997 Jeremy Allison <jra@cygnus.com>
-
- * net.cc: Added errors "WSAEINVAL", "WSAEFAULT" as these
- can be returned for net calls.
- * fhandler.cc: Added FILE_SHARE_DELETE to open share modes.
- Much closer to POSIX on NT now (ignored on '95).
-
-Fri Jan 17 13:32:26 1997 Geoffrey Noer <noer@cygnus.com>
-
- * configure.in:
- * utils/configure.in: define LIB_AC_PROG_CC to get around
- autoconf 1.12 problem. Invoke it instead of AC_PROG_CC.
- * configure:
- * utils/configure: regenerate
-
-Thu Jan 16 12:35:41 1997 Geoffrey Noer <noer@cygnus.com>
-
- * mmap.cc: added missing copyright notice
-
-Tue Jan 14 12:51:12 1997 Jeremy Allison <jra@cygnus.com>
-
- * cygwin.din: Added get_osfhandle, cwait and all the
- spawn functions.
- * exec.cc: Added include of process.h. Changed call to
- spawn_guts to add extra parameter.
- * libcerr.cc: Added extra error messages. Ensured
- messages start at zero.
- * spawn.cc: Changed spawn_guts to do wait and nowait
- calls. Added all spawn functions.
- * syscalls.cc: Added get_osfhandle.
- * winsup.h: Removed incorrect spawn definitions,
- corrected prototypes for spawn_guts and file_exists
- calls.
- * include/io.h: New file. Added for get_osfhandle.
-
-Thu Jan 9 14:20:01 1997 Jeremy Allison <jra@cygnus.com>
-
- * exceptions.h: Moved from winsup to winsup/include.
- * include/mywinsock.h: Added getprotobynumber and
- getservbyport.
- * Makefile.in: Moved exceptions.h dependency.
- * cygwin.din: Added cygwin32_getprotobynumber and
- cygwin32_getservbyport.
- * net.cc: Added cygwin32_getprotobynumber and
- cygwin32_getservbyport.
-
-Wed Jan 8 14:15:35 1997 Jeremy Allison <jra@cygnus.com>
-
- * fhandler.cc: Fix from Scott Kempf (scottk@rimu.ig.utexas.edu)
- to ensure creation_disposition is set correctly in open.
-
-Fri Jan 3 12:10:22 1997 Jeremy Allison <jra@cygnus.com>
-
- * fork.cc: Added parameter to recreate_mmaps_after_fork
- in child, and added set_child_mmap_ptr() call in parent.
- Needed as cygwin.dll statics are not copied accros a fork.
- * mmap.cc: Added parameter to recreate_mmaps_after_fork,
- added set_child_mmap_ptr() call.
- * winsup.h: Added mmap_ptr to pinfo struct. Removed obsolete
- comments.
- * Makefile.in: Added -I../libio, needed to rebuild source
- using STL. Also added -nostdinc++ on recommendation of
- Mike Stump (mrs@cygnus.com).
-
-Thu Jan 2 17:23:10 1997 Jeremy Allison <jra@cygnus.com>
-
- * dcrt0.cc: Added a call to initialize winsock on app
- init.
- * fork.cc: Added call so child initializes winsock before
- returning from the fork. This makes many network daemons
- run correctly that did not before (apache soon...).
- * net.cc: Removed calls to checkinit, this is now done on
- app startup. Renamed checkinit to socket_checkinit and
- removed static scope.
- * winsup.h: Added prototype for socket_checkinit().
-
-Thu Jan 2 12:25:06 1997 Jeremy Allison <jra@cygnus.com>
-
- * dcrt0.cc (api_fatal): Check that u and u->self are
- not zero before indirecting through them.
- * fork.cc: Changed security descriptor for fork
- mutexes to allow access by all.
- * pinfo.cc: Changed security descriptor for shared
- area to allow access by all.
- * shared.cc: Added get_null_sd() call to return
- security descriptor allowing access by all. Needed
- when a cygwin32 service is running and also interactive
- cygwin32 apps by the current logged in user.
- * winsup.h: Added prototype for get_null_sd().
diff --git a/winsup/cygwin/ChangeLog-1998 b/winsup/cygwin/ChangeLog-1998
deleted file mode 100644
index aa657e01e..000000000
--- a/winsup/cygwin/ChangeLog-1998
+++ /dev/null
@@ -1,4490 +0,0 @@
-Thu Dec 31 16:50:32 1998 DJ Delorie <dj@cygnus.com>
-
- * mmap.cc: replaced all references to libstdc++ templates with
- inline classes to remove build dependency on libstdc++
-
-Thu Dec 31 00:02:40 1998 Geoffrey Noer <noer@cygnus.com>
-
- * sysdef/uuid.def: remove useless stub.
- * sysdef/oldnames.def: ditto.
- * sysdef/largeint.def: ditto.
- * sysdef/rpcndr.def: ditto.
-
-Wed Dec 30 20:33:09 1998 Geoffrey Noer <noer@cygnus.com>
-
- * utils/cygcheck.cc: clean up misc. warnings relating to
- signed vs. unsigned, char * vs. const char *, etc...
-
-Wed Dec 30 21:41:25 1998 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (do_exit): Remove previous dwProcessId
- change as it presumes too much knowledge about signalling
- in the wrong place in the code.
- * sigproc.cc (sigproc_terminate): Move the dwProcessId
- assignment here but only do it when it is necessary or
- programs will die abnormally.
- * fhandler.h: Add raw_write method to fhandler_serial.
- * fhandler_serial.cc (raw_write): New method. Accommodates
- overlapped I/O that now must be used with serial.
- * utils/kill.cc (main): Allow `0' signal. Just checks
- for existence of process.
-
-Wed Dec 30 00:01:18 1998 Geoffrey Noer <noer@cygnus.com>
-
- * include/cygwin/version.h: bump API_MINOR to 8 to mark
- recently exported _ctype_, _sys_errlist, _sys_nerr. Briefly
- describe all API_MINOR changes to date.
-
-Wed Dec 30 01:31:34 1998 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (do_exit): Set myself->dwProcessId so that
- some exit routines will not falsely believe that this
- process has been execed.
- * select.cc (peek_serial): Remove debugging statements.
- * sigproc.cc (sigproc_terminate): Detect state where
- myself->dwProcessId == 0 as indicative of not being
- an exec stub.
-
-Tue Dec 29 21:13:33 1998 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (alloc_stack_hard_way): Fix a couple of thinkos
- in calculating size of the new stack. Just use the size
- passed from the parent.
- (dll_crt0_1): Set up new frame pointers here, if appropriate.
- * fork.cc (fork): Move frame pointer setup into dll_crt0_1.
-
-Tue Dec 29 12:57:38 1998 Geoffrey Noer <noer@cygnus.com>
-
- * utils/mkpasswd.c: Include wchar.h.
- * utils/mkgroup.c: Ditto.
-
-Tue Dec 29 12:53:23 1998 Geoffrey Noer <noer@cygnus.com>
-
- * Makefile.in: remove dep for libcerr.o
-
-Mon Dec 28 22:02:15 1998 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler.h: Make fhandler_serial io_status public since
- select needs it. Add 'saw_error' field to select_record so
- that select can detect error conditions.
- * fhandler_serial.cc (fhandler_serial::raw_read): Detect
- "operation aborted" error and retry. This seems to indicate
- an attempt to retry an overlapped operation.
- * select.cc (select_stuff::wait): Honor saw_error field when
- appropriate.
- (peek_serial): Rewrite to operate similarly to
- fhandler_serial::raw_read.
- * include/sys/termios.h: CBAUD mask was still not right.
-
-Mon Dec 28 09:09:27 1998 Christopher Faylor <cgf@cygnus.com>
-
- * libcerr.cc: Make obsolete. Move into errno.cc
- * libctype.c: Make obsolete. Use newlib table.
- * Makefile.in: Remove obsolete entries from LIBCOS. Define
- __INSIDE_CYGWIN__ explicitly for .c -> .o compilation.
- * cygwin.din: New exports: _ctype_, _sys_errlist, _sys_nerr.
- * errno.cc: Move _sys_errlist and _sys_nerr here.
- * dlfcn.cc: Reorganize includes to put ctype.h after winsup.h
- so that __INSIDE_CYGWIN__ will be defined for use in ctype.h.
- * fhandler_console.cc: Ditto.
- * fhandler_tty.cc: Ditto.
- * path.cc: Ditto.
- * spawn.cc: Ditto.
-
-Sat Dec 26 00:20:48 1998 Christopher Faylor <cgf@cygnus.com>
-
- patch from Corinna Vinschen <corinna.vinschen@cityweb.de>:
- * include/Windows32/CommonFunction.h: Added proto for
- NetUserChangePassword().
-
-Thu Dec 24 16:15:40 1998 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (dll_crt0_1): Add more debugging output.
- * ioctl.cc (ioctl): Can't use TC[GS]ET ioctls for pty master as
- it conflicts with TIOCPKT.
- * passwd.cc (passwd): Bypass tc[gs]etattr call in favor of appropriate
- method or conversion confusion will result due to attempts to
- appropriately convert to old-style termios structures in tc[gs]etattr.
- * strace.cc (strace_vsprintf): Define t explicitly.
- * termios.cc (tcsetattr): Reorganize to allow meaningful debugging
- output.
- (tcgetattr): Ditto.
-
-Wed Dec 23 15:02:11 1998 Christopher Faylor <cgf@cygnus.com>
-
- * winsup.h: Reorganize include order to allow thread-safe build.
-
-Wed Dec 23 11:45:33 1998 DJ Delorie <dj@cygnus.com>
-
- * strace.cc (strace_microseconds): new function; returns elapsed
- time in microseconds, using performance counters if available.
- (strace_vsprintf): print timestamps and deltas as microseconds,
- not seconds.
-
-Wed Dec 23 11:35:02 1998 DJ Delorie <dj@cygnus.com>
-
- * times.cc (__to_clock_t): Change return value to unsigned long
- long to prevent overflow.
-
-Tue Dec 22 19:37:55 1998 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler.h: Reflect fhandler_*::init argument reordering.
- Add dup and init methods to fhandler_serial.
- * fhandler.cc (fhandler_base::init): Reorder arguments to mirror
- open().
- * fhandler_console.cc (fhandler_console::init): Ditto. Initialize
- using fhandler_base rather than fhandler_serial as console is
- now being slowly uncouple from fhandler_serial.
- * fhandler_serial.cc (fhandler_serial::fhandler_serial): Set size
- of data structure or suffer strange behavior on exec().
- (raw_read): Add debugging output.
- (fhandler_serial::init): New method.
- (fhandler_serial::open): Detect call from init method and avoid
- calling fhandler_base::open. Don't worry about non-blocking reads
- since they are now handled correctly by _read().
- (fhandler_serial::tcsetattr): Honor ICANON in a kludgey sort of way.
- (fhandler_serial::tcgetattr): Ditto.
- (fhandler_serial::dup): New method. Ensures duplication of all
- elements of fhandler_serial class.
- * fhandler_tty.cc (fhandler_tty_master::init): Reflect init argument
- reordering.
- (fhandler_tty_slave::init): Ditto.
- * hinfo.cc (hinfo::init_std_file_from_handle): Remove unnecessary
- argument.
- (hinfo_init): Reflect change to init_std_file_from_handle.
- (cygwin_attach_handle_to_fd): Use more appropriate types for
- arguments.
- (hinfo::build_fhandler): Add some slop to allocated buffer just
- for paranoia's sake.
- (hinfo::dup2): Avoid dereferencing a NULL pointer when oldfd==newfd.
- * pipe.cc (make_pipe): Reflect init argument change.
- * shared.h: Another immigrant from winsup.h
- * winsup.h: Reflect change to init_std_file_from_handle. Relocate
- a declaration to shared.h so that it can be used in fhandler.h.
- * include/sys/cygwin.h: Reflect change to cygwin_attach_handle_to_fd.
-
-Mon Dec 21 16:22:48 1998 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler.cc (fhandler_base::open): Detect serial device as a special
- case requiring an overlapped open.
- * fhandler.h (fhandler_serial): Add several methods. Add new 'fixup after
- fork required' field.
- * fhandler_serial.cc (raw_read): Rewrite to come closer to handling VMIN
- VTIME parameters and to allow EINTR.
- (fhandler_serial::open): Initialize overlapped event here. Make error
- messages more explicit.
- (fhandler_serial::close): Close status event.
- (fhandler_serial::tcsetattr): Store vtime_ as milliseconds. Attempt to
- handle VMIN > 0, VTIME == 0 better.
- (fhandler_serial::fixup_after_fork): Initialize a new event handle after
- a fork.
- (fhandler_serial::de_linearize): Ditto.
- * hinfo.cc (hinfo::fixup_after_fork): Call fork fixer upper if close_on_exec
- of need_fork_fixup set.
-
-Sun Dec 20 16:05:25 1998 Geoffrey Noer <noer@cygnus.com>
-
- * include/shellapi.h: replace with stub that includes windows.h
- like similar headers already do.
- * scandir.cc (scandir): add parens around assignment used as truth
- value.
-
-Sat Dec 19 00:42:44 1998 Christopher Faylor <cgf@cygnus.com>
-
- * thread.cc: Fix copyright info.
- * thread.h: Ditto.
- * libcmain.cc: gcc is now more picky about requiring a type
- for main(), so add one.
- * include/pthread.h: Add attribution for net contributor.
-
-Fri Dec 18 19:21:30 1998 Geoffrey Noer <noer@cygnus.com>
-
- * pthread.cc: fix copyright header.
- * shared.h: ditto.
-
-Fri Dec 18 19:21:30 1998 Geoffrey Noer <noer@cygnus.com>
-
- patch from Corinna Vinschen <corinna.vinschen@cityweb.de>:
- * cygwin.din: export scandir and alphasort.
- * Makefile.in: add scandir.o to deps
- * scandir.cc: New file with scandir and alphasort implementations.
- * include/cygwin/version.h: bump API_MINOR to 7.
-
-Fri Dec 18 16:44:07 1998 Geoffrey Noer <noer@cygnus.com>
-
- * include/pthread.h: clean up, remove C++-style comments,
- remove pthread_getsequence_np proto.
-
-Fri Dec 18 15:26:33 1998 Christopher Faylor <cgf@cygnus.com>
-
- Throughout, prepend cygwin_ to functions that are exported
- as cygwin_* which previously needed to be aliased.
-
- * path.cc (cygwin_conv_to_win32_path): Resolve symbolic links.
- Return success or failure value.
- (cygwin_conv_to_full_win32_path): Ditto.
- (cygwin_conv_to_posix_path): Return success or failure value.
- (cygwin_win32_to_posix_path_list): Ditto.
- (cygwin_posix_to_win32_path_list): Ditto.
- * shared.h: New include file that incorporates parts of
- winsup.h, fhandler_tty.h, path.h, and delqueue.h.
- * Makefile.in: Remove old include files.
- * cygwin.din: cygwin_* aliases are no longer required.
- * libccrt0.cc: Store api_minor in per_process structure.
- * select.cc: Change meaning of second argument to ready_for_read
- to indicate whether read_ahead should be ignored.
- * fhandler.h: Reflect change in second argument to ready_for_read.
- * syscalls.cc (_read): Ditto.
- * termios.cc: Throughout, detect attempt to use old style termios
- structure and convert as appropriate.
- * ioctl.cc (ioctl): Detect use of ioctl requiring termios field
- and call appropriate tc[gs]et* function to handle it.
- * fhandler_console.cc (fhandler_console::ioctl): Remove TC* calls
- that are now handled in main ioctl.
- * fhandler_tty.cc (fhandler_tty_slave::ioctl): Ditto.
- * include/cygwin/version.h: Added TERMIOS defines. Bump API_MINOR
- to 6.
- * include/sys/cygwin.h: Reflect change in return value for some
- cygwin_conv_* calls.
- * include/sys/termios.h: Reformat slightly. Add conversion macros
- for dealing with old style termios structure.
- * include/pthread.h: add
-
-Fri Dec 18 15:03:33 1998 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Cleanup pthread usage.
-
-Fri Dec 18 14:35:59 1998 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Remove obsolete header dependency for
- thread-safe build.
-
-Fri Dec 18 14:16:04 1998 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (sig_handle): Avoid suspending top-level
- processes.
- * trace.cc: Remove unneeded include.
-
-Thu Dec 17 19:19:53 1998 Geoffrey Noer <noer@cygnus.com>
-
- * cygwin.din: remove pthread_getsequence_np, _reent_clib
-
-Thu Dec 17 16:48:15 1998 Geoffrey Noer <noer@cygnus.com>
-
- * include/cygwin/version.h: correct two typos in comments
-
-Thu Dec 17 19:11:31 1998 Christopher Faylor <cgf@cygnus.com>
-
- patch from Corinna Vinschen <corinna.vinschen@cityweb.de>:
- * include/Windows32/Defines.h: Add values for using Windows
- function `DeviceIoControl()'.
-
-Thu Dec 17 18:00:34 1998 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (dll_crt0_1): exception_list is not a struct.
- * debug.cc (thread_stub): Ditto.
-
-Thu Dec 17 08:24:37 1998 Christopher Faylor <cgf@cygnus.com>
-
- * cygwin.din: Remove leading underscores from pthread functions.
- * include/cygwin/version.h: Bump DLL major version to 21, DLL minor
- version to 0, and API_MINOR to 5.
-
-Wed Dec 16 22:54:16 1998 Christopher Faylor <cgf@cygnus.com>
-
- Merge in thread-safe branch changes.
-
-Wed Dec 16 22:54:16 1998 Christopher Faylor <cgf@cygnus.com>
-
- * pthread.cc: Include winsup.h.
-
-Wed Dec 16 22:54:16 1998 Christopher Faylor <cgf@cygnus.com>
-
- * thread.cc: Reformat.
- * pthread.cc: New file.
- * cygwin.din: Add pthread interface functions
-
-Wed Dec 16 22:54:16 1998 Christopher Faylor <cgf@cygnus.com>
-
- * configure.in: Add some --enable options.
- * configure: Regenerate.
- * Makefile.in: Reorganize CFLAGS to recognize new --enable options.
-
-Wed Dec 16 22:54:16 1998 Christopher Faylor <cgf@cygnus.com>
-
- * fork.cc (stack_base): Store slightly different information
- in child_info_fork structure for later use in alloc_stack_hard_way.
- (fork): Set frame pointer information if stack has been reallocated.
- * dcrt0.cc (alloc_stack_hard_way): Reflect change in
- child_info_fork structure.
- (dll_crt0_1): Make thread initializers "static" and NO_COPY or death
- of the main thread causes death of other threads.
- * winsup.h (child_info_fork): Change structure.
-
-Wed Dec 16 22:54:16 1998 Christopher Faylor <cgf@cygnus.com>
-
- * thread.h: Remove extraneous declaration.
- * include/sys/strace.h: Make a new thread_printf function
- for use by new thread-safe code.
- * thread.cc: Use thread_printf throughout.
-
-Wed Dec 16 22:54:16 1998 Christopher Faylor <cgf@cygnus.com>
-
- patch from Marco Fuykschot (marco@ddi.nl)
- * Throughout sources add locking control for preliminary
- thread-safe cygwin operation.
-
-Wed Dec 16 22:54:16 1998 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (getprogname): Should be a static.
- (alloc_stack): Extend to allow forking from another
- thread.
- (alloc_stack_hard_way): New function used by alloc_stack.
- (dll_crt0_1); Don't pass parameters since stack may be
- "funny". Use statics instead. Move fork/spawn checking
- into dll_crt0.
- (dll_crt0): Do fork spawn checking here. alloc_stack()
- will call dll_crt0_1 if forked from a non-main thread.
- * fork.cc (stack_base): New function determines base
- (and other values) of this thread's stack.
- (fork): Use new PROC_FORK1 method for forking. Provides
- more data to forkee. Use stack_base to set stack
- values.
- * winsup.h (child_info_fork): Changes for PROC_FORK1.
-
-Wed Dec 16 16:15:29 1998 Geoffrey Noer <noer@cygnus.com>
-
- * include/shellapi.h: fix typo in DragQueryPoint proto.
-
-Mon Dec 14 12:37:43 1998 Geoffrey Noer <noer@cygnus.com>
-
- * net.cc: minor respacing
- (get_ifconf): new local function, combines get_winnt_ifconf and
- get_win95_ifconf.
- (get_win95_ifconf): delete
- (get_winnt_ifconf): delete
- (fhandler_socket::ioctl): adjust ifconf calls in light of above,
- check returned value for safety.
- * include/cygwin/version.h: bump CYGWIN_VERSION_API_MINOR to 4
- in honor of newly supported socket ioctls.
-
- patch from Corinna Vinschen <corinna.vinschen@cityweb.de>:
- * include/asm/socket.h: Added defines for ioctl() calls
- SIOCGIFADDR, SIOCGIFBRDADDR and SIOCGIFNETMASK.
- * net.cc (get_winnt_ifconf): Check the registry entries
- instead of just calling get_win95_ifconf(). Added what argument
- to support the new ioctl() calls.
- (get_win95_ifconf): Check the Windows 9x registry entries as
- described by Tim Newsham.
- (fhandler_socket::ioctl): Support the ioctl() commands
- SIOCGIFADDR, SIOCGIFBRDADDR and SIOCGIFNETMASK.
- (get_if_flags): Check for a down interface.
-
-Wed Dec 9 18:11:31 1998 Geoffrey Noer <noer@cygnus.com>
-
- * fhandler.cc (fhandler_disk_file::open): check for shell scripts
- regardless of Win32 OS type.
-
-Sun Dec 6 19:38:11 1998 Christopher Faylor <cgf@cygnus.com>
-
- patch from Corinna Vinschen <corinna.vinschen@cityweb.de>:
- * fhandler_console.cc (fhandler_console::tcgetattr): Fix typo.
- ISIG should be ored with c_lflag.
-
-Tue Dec 1 16:28:56 1998 Geoffrey Noer <noer@cygnus.com>
-
- * include/utmp.h: delete, moved to newlib/libc/sys/cygwin/sys.
-
-Thu Dec 3 15:41:51 1998 Geoffrey Noer <noer@cygnus.com>
-
- Released 20.1 update.
-
-Thu Dec 3 22:24:18 1998 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (set_process_mask): Add `sync' parameter
- to control whether signals should be synched on exit.
- (handle_sigsuspend): Provide second argument to set_process_mask -
- don't sync.
- (call_handler): Ditto for asm handler.
- * signal.cc (sigprocmask): Ensure that signals are synchronized
- by calling set_process_mask with sync == 1.
- * sigproc.cc (__release_signal_mutex): Third argument is not
- strictly a BOOL, so change it.
- * sigproc.h: Reflect above parameter changes.
-
-Thu Dec 3 15:30:44 1998 Christopher Faylor <cgf@cygnus.com>
-
- * select.cc (peek_console): Work around NT bug that
- caused strange behavior with ReadFile after this
- function was invoked.
-
-Tue Dec 1 14:43:35 1998 Christopher Faylor <cgf@cygnus.com>
-
- * sigproc.cc (sigproc_init): Set maintid and signal_mutex early
- to avoid races in wait_sig initialization.
- (__get_signal_mutex): Improve debug output.
- (__release_signal_mutex): Ditto.
- * spawn.cc (spawn_guts): Allocate more space for string when building
- up from #! and absolute path is not known. Otherwise weird stuff
- like infinite recursion or unknown file errors occur.
-
-Tue Dec 1 08:34:18 1998 Christopher Faylor <cgf@cygnus.com>
-
- * mkvers.sh: Accommodate lack of timezone in date output so that
- year shows up correctly.
-
-Mon Nov 30 14:30:51 1998 Jeff Johnston <jjohnstn@cygnus.com>
-
- * times.cc (times): Altered function so that on non-Windows-NT systems
- it does not use the GetProcessTimes() API which is not supported.
-
-Mon Nov 30 00:38:54 1998 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc: Fix incorrect use of struct on exception_list
- typedef.
- * debug.cc (thread_stub): Ditto.
- * dll_init.cc: Ditto.
- * include/Windows32/Structures.h: Correct typo where
- typedef SYSTEM_POWER_STATUS was being used as a struct.
-
-Sun Nov 29 22:03:17 1998 Christopher Faylor <cgf@cygnus.com>
-
- patch from Corinna Vinschen <corinna.vinschen@cityweb.de>:
- * fhandler_console.cc (fhandler_console::ioctl):
- Added ioctl commands TCGETA, TCSETA, TCSETAW, TCSETAF.
-
-Fri Nov 27 22:30:58 1998 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler.h: Set aside NOEINTR bit. When this is set
- cygwin will not allow the read on this device to be
- interrupted by a signal.
- * pipe (_pipe): Set NOEINTR bit for read end of pipes
- created using this method. The vague rationale for this
- is that these pipes are supposed to be more like Windows
- pipes than UNIX pipes.
- * syscalls.cc (_pipe): Honor NOEINTR flag.
- * getopt.c: Clean up some gcc warnings.
- * libcerr.c: Ditto.
-
-Fri Nov 27 21:56:03 1998 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (SIG_NONMASKABLE): Update for new signal
- mask method.
- (handle_sigsuspend): Release of signal mutex must be
- synchronous -- the signal must be delivered before the
- function returns. Otherwise, there will be races in
- the caller code.
- * sigproc.cc (sigproc_terminate): Minor cleanup.
-
-Thu Nov 26 20:26:17 1998 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (call_handler): Attempt to work around
- potential race when setting signal_arrived. This
- particularly affects sigsuspend.
- (handle_sigsuspend): Reset signal_arrived prior to
- grabbing the mutex. This should reduce the probability
- of a race.
- * sigproc.cc (sig_send): Don't reset signal_arrived in
- the SIGSUSPEND case since this could introduce a race.
-
-Thu Nov 26 12:19:16 1998 Christopher Faylor <cgf@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * select.cc (MAKEready): Don't wait for signal prior to
- testing for read. That introduces an unnecessary delay.
-
-Wed Nov 25 23:03:47 1998 Christopher Faylor <cgf@cygnus.com>
-
- * winsup.h: Make `isdirsep' an alias for SLASH_P.
- Implement isabspath convenience macro.
- Change sigprotect to a macro since it appears to
- be impossible to send __FILE__ type macros to a
- constructor. Change use of sig_protect throughout.
- * dcrt0.cc (dll_crt0_1): Use new path macro.
- * dlfcn.cc (get_full_path_of_dll): Ditto.
- * path.cc (path_conv::path_conv): Ditto.
- (normalize_posix_path): Ditto.
- (slashify): Ditto.
- (backslashify): Ditto.
- * syscalls.cc (num_entries): Ditto.
- * lock.cc: Redefine lock methods to pass debug info to
- {get,release}_signal_mutex.
- * environ.cc (environ_init): Correct strncmp test for
- TERM=, otherwise it's impossible to set TERM.
- * exceptions.cc: Eliminate lock_cs and unlock_cs macros.
- Use {get,release}_signal_mutex throughout.
- (signal_init): Don't initialize signal_mutex here.
- (set_process_mask): Remove vestiges of old mutex code.
- (handle_sigsuspend): Ditto.
- (call_handler): Move signal_arrived SetEvent back here.
- It was being triggered too often before.
- Detect when the signal thread is exiting.
- (sig_handle): Remove inappropriate SetEvent(signal_arrived).
- (events_terminate): Move close of signal_mutex elsewhere.
- * glob.cc: Increase "MAXPATHLEN" size for arguments that
- are not necessarily pathnames.
- * pinfo.cc (lpfu): Lower timeout for reporting possible
- problem with INFINITE wait.
- * sigproc.cc (wake_wait_subproc): Make this a macro with
- no arguments so that its use in the code is a little
- clearer.
- (proc_terminate): Eliminate signal blocking here since
- this should already be handled by the caller.
- (sigproc_init): It makes sense to initialize signal_mutex
- here, so do so.
- (__allow_sig_dispatch): Rename. Take debugging arguments.
- Pass arguments on to release_signal_mutex.
- (__block_sig_dispatch): Rename. Take debugging arguments.
- Pass arguments on to get_signal_mutex. Detect signal
- thread exiting confition.
- (__get_signal_mutex): Take debugging arguments. Maintain
- a stack of nested mutex calls for later display in
- __release_signal_mutex. Detect signal thread exit
- condition. Don't bother with locking if signal thread is
- executing or if just an exec stub.
- (__release_signal_mutex): Don't bother with locking if signal
- thread is executing or if just an exec stub.
- * sigproc.h: Reflect renamed functions above. Provide
- wrappers to pass in diagnostic information.
- * spawn.cc (spawn_guts): More fixes to deal with nested
- #! and to properly report posix argv[0] when invoked as a
- script.
-
-Wed Nov 25 12:41:12 1998 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Reinstate libwinspool.a/winspool.drv creation.
-
-Tue Nov 24 18:48:56 1998 Geoffrey Noer <noer@cygnus.com>
-
- * Makefile.in: add CFLAGS_COMMON and CFLAGS_CONFIG to CFLAGS
- and CXXFLAGS in FLAGS_TO_PASS.
-
- * include/sys/select.h: new file with select proto. Avoid
- potential conflict with Winsock inclusion by Cygwin internals.
- * include/sys/socket.h: remove select proto.
- * winsup.h: define __INSIDE_CYGWIN__. Include windows.h after
- Unix include files.
- * include/mywinsock.h: delete file
- * include/Windows32/Sockets.h: add ndef __INSIDE_CYGWIN__s
- around portions that conflict with Unix definitions. This
- yields what used to be mywinsock.h which is a blend of Unix
- sockets and Winsock needed by Cygwin internals.
- * exceptions.cc: define Win32_Winsock to include
- Windows32/Sockets.h. No longer define __INSIDE_CYGWIN__.
- * hinfo.cc: ditto
- * net.cc: ditto
- * select.cc: ditto
-
- * include/exceptions.h: change wrapper define to _EXCEPTIONS_H.
- * include/sys/resource.h: move includes outside __cplusplus check.
- * include/sys/wait.h: ditto.
-
-Sun Nov 22 23:33:19 1998 Geoffrey Noer <noer@cygnus.com>
-
- * sigproc.cc (__release_signal_mutex): revert Nov 3d change.
-
-Sun Nov 22 17:04:44 1998 Christopher Faylor <cgf@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * regexp/Makefile.in: Add additional bits necessary to
- allow correct installation of include file.
-
-Fri Nov 20 17:04:48 1998 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Set "Warn about writable strings" option in CFLAGS.
- * fhandler_tty.h: Fix for writable strings detection.
- * grp.cc (add_grp_line): Ditto.
- * mkvers.sh: Ditto.
- * path.h: Ditto.
- * registry.cc: (reg_key::reg_key): Ditto.
- * smallprint.c (__small_vsprintf): Ditto.
- * tty.cc (tty::get_event): Ditto.
- * winsup.h: Give up on read_ready_thread. Move sig_protect
- here since it needs to use information set up after the sigproc.h
- include.
- * dcrt0.cc: Ditto.
- * debug.cc (WFSO): New function. Used to ensure that
- function shows up on stack trace.
- (WFMO): Ditto.
- * debug.h: Define the above.
- * exceptions.cc (ctrl_c_handler): Record last signal
- for signal handler.
- * select.cc (MAKEready): New macro for constructing
- fhandler_*::ready_for_read function.
- (fhandler_*::ready_for_read): Use macro to construct this
- method throughout.
- * sigproc.cc (sig_send): Work around race on process termination
- where the event being waited for may disappear.
- (sigproc_terminate): #ifdef code here that attempted to deal with
- the above condition in sig_send.
- * sigproc.h: Move sig_protect to winsup.h.
- * spawn.cc (perhaps_suffix): Don't return pointer into an
- automatic variable.
- (find_exec): Always point known_suffix to something.
- * syscalls.cc (read_handler): Refine debug output.
- (read_ready_thread): Delete.
- (_read): Eliminate use of read_ready_thread. Call ready_for_read
- directly as appropriate.
-
-Thu Nov 19 15:26:40 1998 Geoffrey Noer <noer@cygnus.com>
-
- * Makefile.in: remove -Wunused since that's already in -Wall
- * dlfcn.cc (check_path_access): rename winenv arg to mywinenv
- * path.cc (symlink): change save_errno var to saved_errno
- * spawn.cc (find_exec): rename winenv arg to mywinenv
- (spawn_guts): rename sigprotect handle to starting_here
- * winsup.h: remove trailing comma from process_state flags
- enum
- * utils/aclocal.m4: regenerate
- * utils/configure: regenerate
-
-Thu Nov 19 11:16:38 1998 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Use correct libpthread.a target when
- thread-safe is enabled.
-
-Thu Nov 19 10:49:27 1998 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (path_conv): Correct error reporting.
-
-Wed Nov 18 20:07:50 1998 Geoffrey Noer <noer@cygnus.com>
-
- * utils/Makefile.in: remove termcap file install rule
-
-Wed Nov 18 18:14:18 1998 Geoffrey Noer <noer@cygnus.com>
-
- More minor cleanup:
- * environ.cc (winenv): don't define len twice.
- * fork.cc (sync_with_parent): should NOT use rc since
- this is a macro and that could have interfered with rc in
- the calling function. Renamed to psync_rc.
- * fhandler_serial.cc (fhandler_serial::open): change
- access to myaccess since it shadows global decl.
- * hinfo.cc: ditto throughout
- * path.cc: ditto throughout
- (path_conv::path_conv): change error to err.
-
-Wed Nov 18 16:17:58 1998 Geoffrey Noer <noer@cygnus.com>
-
- * profil.c: include stdio.h
- (print_prof): comment out unused func
- (profile_ctl): should return an int
-
-Wed Nov 18 16:17:58 1998 Geoffrey Noer <noer@cygnus.com>
-
- * utils/ps.cc: include sys/cygwin.h, make pname buf
- MAXPATH in size.
-
- patch from Corinna Vinschen <corinna.vinschen@cityweb.de>:
- * utils/ps.cc (main): converting windows paths to posix
- paths in output.
-
-Wed Nov 18 15:34:46 1998 Geoffrey Noer <noer@cygnus.com>
-
- * include/wchar.h: include stddef.h.
-
-Wed Nov 18 17:39:15 1998 Christopher Faylor <cgf@cygnus.com>
-
- * environ.cc (environ_init): Fix incorrect TERM= detection.
-
-Tue Nov 17 17:28:09 1998 Geoffrey Noer <noer@cygnus.com>
-
- * gcrt0.c: include stdlib.h, add proto for monstartup.
-
-Tue Nov 17 16:47:42 1998 Geoffrey Noer <noer@cygnus.com>
-
- * include/wchar.h: add protos for wcslen and wcscmp.
- * syscalls.cc: minor reformat.
-
-Tue Nov 17 15:38:45 1998 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler.cc (fhandler_base::fhandler_base): Default non-disk
- devices to binary mode.
- * fhandler.h: Reformat slightly.
-
-Tue Nov 17 11:19:23 1998 Christopher Faylor <cgf@cygnus.com>
-
- * external.cc (fillout_pinfo): Copy progname using strcpy to
- save on time.
- * path.h: Add new enums for more fine-grained control
- of path_conv.
- * dir.cc (opendir): Use enum argument to path_conv.
- (mkdir): Ditto.
- (rmdir): Ditto.
- * dlfcn.cc (get_full_path_of_dll): Ditto.
- * fhandler.h: Add new set_readahead_valid to set actual
- readahead.
- * fhandler.cc (raw_read): Remove extraneous variable.
- (fhandler_base::read): Rework to allow readahead when
- not text mode.
- (fhandler_disk_file::fstat): get_symlink_p() only returns
- true/false now.
- (fhandler_disk_file::fhandler_disk_file): Use enum argument
- to path_conv.
- (fhandler_disk_file::open): Ditto.
- * spawn.cc (perhaps_suffix): Ditto.
- * syscalls.cc (_unlink): Ditto.
- (_link): Ditto.
- (stat_worker): Ditto.
- (_rename): Ditto.
- * fhandler_serial.cc (fhandler_serial::open): Always reset timeouts.
- * path.cc (path_conv::path_conv): Honor new enum arguments.
- Specifically, use SYMLINK_CONTENTS for readlink interface.
- (readlink): Use SYMLINK_CONTENTS argument to path_conv.
- * select.cc: Rework serial support which has apparently never
- worked.
-
-Mon Nov 16 16:15:20 1998 Geoffrey Noer <noer@cygnus.com>
-
- * Makefile.in: FLAGS_TO_PASS should pass CFLAGS and CXXFLAGS
- not ALL_CFLAGS and ALL_CXXFLAGS. Rework handling of CFLAGS
- variables to remove duplication and make it possible to
- build mingw directory.
-
-Mon Nov 16 09:40:21 1998 Christopher Faylor <cgf@cygnus.com>
-
- * syscalls.cc (_open): Use new macro to check for
- NULL or empty pathname and return appropriate error.
- * path.cc (check_null_empty_path*): Move macro to
- path.h.
- * path.h: Move macros here.
-
-Sun Nov 15 20:23:10 1998 Geoffrey Noer <noer@cygnus.com>
-
- * include/cygwin/version.h: bump API_MINOR to 3 to mark
- addition of dll_noncygwin_dllcrt0 to exports list.
-
-Sun Nov 15 23:05:21 1998 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (check_null_empty_path): New macro.
- (check_null_empty_path_errno): Ditto.
- (path_conv::path_conv): Check for NULL and empty
- path names here and set appropriate error.
- (conv_to_win32_path): Ditto.
- (conv_to_full_win32_path): Ditto.
- (conv_to_posix_path): Ditto.
- (conv_to_full_posix_path): Ditto.
- (mount_info::conv_wo_win32_path): Back out previous
- change.
- (mount_info::conv_to_posix_path): Ditto.
-
-Sun Nov 15 19:29:19 1998 Geoffrey Noer <noer@cygnus.com>
-
- * include/limits.h: define CHILD_MAX to be 63.
- * sysconf.cc (sysconf): return CHILD_MAX when asked for
- instead of _POSIX_CHILD_MAX.
-
-Sun Nov 15 18:25:22 1998 Geoffrey Noer <noer@cygnus.com>
-
- patch from Mumit Khan <khan@xraylith.wisc.edu>:
- * path.cc (mount_info::conv_to_posix_path): Handle NULL and
- empty pathnames.
- (mount_info::conv_to_win32_path): Likewise.
-
-Sun Nov 15 18:09:06 1998 Geoffrey Noer <noer@cygnus.com>
-
- * cygwin.din: export dll_noncygwin_dllcrt0.
- * {libccrt0.cc, winsup.h}: minor reformat.
-
-Sat Nov 14 22:14:51 1998 Christopher Faylor <cgf@cygnus.com>
-
- * environ.cc (environ_init): Use sizeof for string lengths
- rather than hard-coded values.
-
- patch from Mumit Khan <khan@xraylith.wisc.edu>:
- * dll_init.cc (dll_foreign_dllcrt0): Rename to
- dll_noncygwin_dllcrt0.
- * winsup.h: Ditto.
- * include/cygwin/cygwin_dll.h: Ditto.
-
-Sat Nov 14 14:09:33 1998 Christopher Faylor <cgf@cygnus.com>
-
- * hinfo.cc (hinfo::de_linearize_fd_array): Reset first fd
- for open to zero after an exec.
-
-Sat Nov 14 01:29:23 1998 Christopher Faylor <cgf@cygnus.com>
-
- * fork.cc (fork): No need for intermediate jmp_buf variable.
-
- patch from Mumit Khan <khan@xraylith.wisc.edu>:
- * libccrt0.cc (cygwin_attach_foreign_dll): New function.
- * dll_init.cc (dll_foreign_dllcrt0): New function to initialize
- DLLs loaded by non-cygwin apps.
- (dll_dllcrt0_1): Initialize process table entry.
- (dll_dllcrt0): Revert last change to do partial initialization.
- * winsup.h (dll_foreign_dllcrt0): Prototype.
- * include/cygwin/cygwin_dll.h (_cygwin_foreign_dll_entry): New
- entry point that does partial initialization for non-cygwin apps.
-
-Fri Nov 13 16:17:28 1998 Geoffrey Noer <noer@cygnus.com>
-
- Assorted -Wall cleanup:
- * utils/mount.cc (show_mounts): remove unused var i.
- * utils/cygcheck.cc (dll_info): comment out unused var ofs.
- (dump_sysinfo): return a void, not an int. Comment out unused
- var len in two places. Add parens around assignment used as
- truth value.
- * utils/kill.cc (main): remove unused var i
- * utils/mkpasswd: include <ctype.h> and <stdlib.h>.
- (enum_users): remove unused var rc.
- (enum_local_groups): ditto.
- * utils/ps.cc (main): Add parens around assignments used as
- truth values.
- * utils/mkgroup.c: include <ctype.h> and <stdlib.h>.
- (enum_groups): return void, not int. Remove unused var rc.
- * gmon.c: include <stdio.h> and <unistd.h>.
- (_mcleanup): remove unused vars buf and profdir.
-
-Fri Nov 13 16:17:28 1998 Geoffrey Noer <noer@cygnus.com>
-
- patch from Corinna Vinschen <corinna.vinschen@cityweb.de>:
- * include/sys/sysmacros.h: new file, define major, minor, makedev
-
-Fri Nov 13 17:03:52 1998 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc: Reflect a variable name change.
- * fhandler.h: *::ready_for read takes an additional argument.
- * fhandler_console.cc (get_non_ascii_key): New function derived
- from fhandler_console::read1.
- (fhandler_console::read1): Use new function.
- * select.cc (*::ready_for_read): Add new "nonblocking" argument.
- (peek_console): Be more diligent in detecting when a usable
- character has been entered or false positives will be returned.
- (fhandler_tty_common::ready_for_read): Detect attempt to perform
- a "background" read.
- * syscalls.cc (read_handler): Remove code for dealing with slow
- devices. Just deal with non-blocking here.
- (read_ready_thread): Renamed function. Rewritten to only detect
- when an fd has data ready to be read. Actual reads happen in
- the main thread.
- (_read): Rely on read_handler to read data for everything. Use
- the read_ready_thread to indicate when data is ready to be read.
- Gut the read_thread_info class since it no longer needs to return
- much information.
- * winsup.h: Reflect above changes to read_thread_info. Rename
- to read_ready_thread_info.
-
-Fri Nov 13 15:09:26 1998 Christopher Faylor <cgf@cygnus.com>
-
- patch from Corinna Vinschen <corinna.vinschen@cityweb.de> and
- Ron Parker <rdparker@butlermfg.org>:
- * path.cc (mount_info::conv_to_win32_path): Refined recognition of
- UNC devices.
-
-Fri Nov 13 12:37:00 1998 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Fix a typo.
-
-Fri Nov 13 10:59:43 1998 DJ Delorie <dj@cygnus.com>
-
- * Makefile.in: "make" uses new "ld -shared" by default internally.
-
-Fri Nov 13 00:58:38 1998 Christopher Faylor <cgf@cygnus.com>
-
- * spawn.cc (find_exec): Make sure that return value is correct
- in all cases. Document.
- * fhandler.h (fhandler_tty_common): Give unit number to constructor.
- * fhandler_tty.cc (fhandler_tty_slave::fhandler_tty_slave): Give
- unit number to descriptor. Create correct UNIX path name for
- tty so that ttyname() will work correctly.
- * select.cc (fhandler_tty_common::ready_for_read): Don't worry
- about read_for_read since the tty read routines are already
- interruptible.
- * syscalls.cc (_read): Reset read thread events on signal.
-
- patch from Mumit Khan <khan@xraylith.wisc.edu>:
- * dlfcn.cc (ctype.h): Include.
- (check_access): Document.
- (check_path_access): Document.
- (get_full_path_to_dll): Rework to handle general filenames and
- symlinks.
-
-Thu Nov 12 17:01:52 1998 DJ Delorie <dj@cygnus.com>
-
- * Makefile.in (shared): "make shared" uses the new "ld -shared"
- * cygwin.din: add LIBRARY and BASE tags for "ld -shared"
-
-Wed Nov 11 17:16:17 1998 Christopher Faylor <cgf@cygnus.com>
-
- * configure.in: Add --enable options for various cygwin defines
- including preliminary thread-safe defines.
- * configure: Regenerate
- * Makefile.in: Honor new --enable options.
- * glob.h: Move BSD defines to sys/cdefs.h.
- * include/sys/cdefs.h: Move __P definition here.
-
-Wed Nov 11 14:00:45 1998 DJ Delorie <dj@cygnus.com>
-
- * cygwin.din (getpwnam): remove duplicates
-
-Tue Nov 10 18:27:09 1998 Geoffrey Noer <noer@cygnus.com>
-
- * utils/aclocal.m4: regenerate with aclocal
- * utils/configure.in: don't call AM_CYGWIN32
- * utils/configure: regenerate
-
-Tue Nov 10 15:56:03 1998 Geoffrey Noer <noer@cygnus.com>
-
- patch from Gary V. Vaughan <gvaughan@oranda.demon.co.uk>:
- * dlfcn.cc (dlopen): return an introspective handle to the
- current module if name arg is NULL. The Single UNIX
- Specification, Version 2 has this as a requirement.
-
-Mon Nov 9 16:29:27 1998 Geoffrey Noer <noer@cygnus.com>
-
- * errno.cc (strerror): all errnos in
- newlib/libc/include/sys/errno.h are now listed here.
-
-Mon Nov 9 16:29:27 1998 Geoffrey Noer <noer@cygnus.com>
-
- * include/cygwin/version.h: up DLL version, bump API_MINOR to 2
- to mark following change.
-
- patch from Mumit Khan <khan@xraylith.wisc.edu>:
- * cygwin.din: add exports for some of the newlib bessel
- functions (j1, jn, y1, yn).
-
-Mon Nov 9 15:10:06 1998 Geoffrey Noer <noer@cygnus.com>
-
- * syscalls.cc (_link): rewrite FIXME.
-
-Mon Nov 9 14:51:03 1998 Geoffrey Noer <noer@cygnus.com>
-
- * errno.cc (strerror): add string for EDEADLOCK.
-
- patch from Corinna Vinschen <corinna.vinschen@cityweb.de>:
- * errno.cc (errmap[]): add END_OF_MEDIA and additional Win32
- error codes.
-
-Sun Nov 8 21:28:01 1998 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler.h: fhandler_pipe cannot be is_slow under
- Windows9[58]. There is no way to check for EOF on a pipe
- without performing a read on that system.
- * syscalls.cc (read_handler): Don't check for ready_for_read
- unless this is a "slow" device.
- * winsup.h: Reorganize to accomdate fhandler.h requirement
- for os_type.
-
-Sat Nov 7 23:27:05 1998 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler.h (fhandler_console): Add a new function declaration.
- * fhandler_console.cc (fhandler_console::read1): New function
- renamed from console_read to allow use of class fields.
- Detect readahead situation when doing line buffering and
- buffer does not contain \n.
- (fhandler_console::read): Reflect function name change.
- * select.cc (cygwin_select): Changes for better handling
- of < 1000 usec timeouts.
- (select_stuff::wait): Perform a poll on timeout to
- set any fd's that may have become active.
- (peek_pipe): More debugging. Honor write_ready if set.
- (peek_console): Can't always use WaitForSingleObject.
- Detect readahead conditions set in fhandler_console::read1.
- Honor write_ready if set.
- (peek_windows): Honor write_ready if set.
- * times.cc (__to_clock_t): Return clock_t value.
- (times): Add some debugging printfs.
-
-Fri Nov 6 20:15:20 1998 Christopher Faylor <cgf@cygnus.com>
-
- patch from Corinna Vinschen <corinna.vinschen@cityweb.de>:
- * spawn.cc (spawn_guts): find_exec() argument mismatch
- resulted in inability to run !# scripts which did not
- begin with '/'.
-
-Tue Nov 3 16:12:59 1998 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (handle_exceptions): Don't wait for signal
- completion.
- (ctrl_c_handler): Ditto.
- * fhandler.h (fhandler_*): Declare new ready_for_read functions.
- * select.cc: Reorganize all methods into a peek_*, a poll_*,
- and a fhandler_*::ready_for_read. This is to allow the _read
- function to query the state of an fd without starting a thread.
- * signal.cc (kill_worker): If sending a signal from a non-main thread
- don't wait for completion.
- * sigproc.h (myself_nowait_nonmain): New define for use by sig_send.
- * sigproc.cc (sig_send): Honor myself_nowait_nonmain. Don't wait
- if not in main thread.
- (__release_signal_mutex): Revert to calling ReleaseMutex only
- once or mutex is released prematurely.
- * syscalls.cc (read_handler): Use new ready_for_read method to
- determine if an fd has data for reading. This function optionally
- blocks until there is data to read.
- (read_helper): Add debugging statement.
- (_read): Move signal_arrived reset to before sig_protect to avoid
- a race. Force read_handler thread to longjmp back to read_handler
- function on signal.
-
-Tue Nov 3 12:18:31 1998 DJ Delorie <dj@cygnus.com>
-
- * utils/cygcheck.cc (dump_sysinfo): Note when not finding a
- program (like cpp) on the path is a good thing.
-
-Tue Nov 3 01:26:08 1998 Geoffrey Noer <noer@cygnus.com>
-
- patch from Kazuhiro Fujieda <fujieda@jaist.ac.jp>:
- * environ.cc (environ_init): correct size arg to parse_options
-
-Mon Nov 2 21:40:32 1998 Christopher Faylor <cgf@cygnus.com>
-
- * regexp/regexp.c (regatom): Respond to compiler warning.
-
-Mon Nov 2 21:36:48 1998 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (handle_exceptions): cygwin should not
- print exception information if the exception is trapped
- via signal().
- Also use consistent timings for lock_cs() throughout.
-
-Mon Nov 2 16:46:28 1998 Geoffrey Noer <noer@cygnus.com>
-
- * Makefile.in: For now, also include newlib/libc/sys/cygwin.
- Eventually will stop including newlib/libc/sys/cygwin32.
-
-Mon Nov 2 19:38:30 1998 Christopher Faylor <cgf@cygnus.com>
-
- patch from Corinna Vinschen <corinna.vinschen@cityweb.de>:
- * syscall.cc (gethostname): function deleted
- * net.cc (gethostname): new function 'gethostname' which
- first calls wsock32::gethostname and only if it fails,
- calls GetComputerNameA.
-
-Wed Oct 28 17:57:53 1998 Geoffrey Noer <noer@cygnus.com>
-
- * include/cygwin/version.h: up DLL version to 20.0 in honor
- of new Net release.
-
-Wed Oct 28 17:57:53 1998 Geoffrey Noer <noer@cygnus.com>
-
- patch from Mumit Khan <khan@xraylith.wisc.edu>:
- * dll_init.cc (doGlobalCTORS): Fix invocation order.
- (doGlobalDTORS): Likewise.
-
-Wed Oct 28 17:57:53 1998 Geoffrey Noer <noer@cygnus.com>
-
- * Makefile.in: add include/exceptions.h to dll_init.cc deps.
-
- patch from Mumit Khan <khan@xraylith.wisc.edu>:
- * dll_init.cc (exceptions.h): Include.
- (dll_dllcrt0_1): New function to initialize Cygwin DLL guts
- properly when a non-Cygwin app uses the Cygwin DLL.
- (dll_dllcrt0): Call dll_dllcrt0_1 when user_data is NULL.
-
-Tue Oct 27 17:35:00 1998 Geoffrey Noer <noer@cygnus.com>
-
- * syslog.cc: drop "32" from CYGWIN32_LOG_NAME
-
-Tue Oct 27 16:09:09 1998 DJ Delorie <dj@cygnus.com>
-
- * utils/cygcheck.cc (usage): cygwhich->cygcheck
-
-Mon Oct 26 17:47:10 1998 Geoffrey Noer <noer@cygnus.com>
-
- * Makefile.in: fix deps for dll_entry.o and dll_main.o,
- add dep for glob.o.
-
- patch from Mumit Khan <khan@xraylith.wisc.edu>:
- * dll_entry.cc: New file for user DLL entry point.
- * dll_main.cc: New file for user DLL main.
- * Makefile.in (LIBCOS): Add dll_entry.o and dll_main.o.
-
-Mon Oct 26 13:47:10 1998 Geoffrey Noer <noer@cygnus.com>
-
- * Makefile.in: add back install of include/net which was
- removed by accident.
-
-Mon Oct 26 15:25:22 1998 Christopher Faylor <cgf@cygnus.com>
-
- * strace.cc (get_strace_mutex): Don't reset last windows
- error.
- (strace_printf): Preserve last windows error.
-
-Mon Oct 26 11:01:46 1998 Christopher Faylor <cgf@cygnus.com>
-
- * uname.cc (uname): Remove slash from system name.
-
-Mon Oct 26 02:11:44 1998 Geoffrey Noer <noer@cygnus.com>
-
- * include/asm/byteorder.h: add missing __cplusplus wrapper.
-
-Mon Oct 26 00:46:33 1998 Christopher Faylor <cgf@cygnus.com>
-
- * uname.cc (uname): Remove space from the system name.
-
-Sun Oct 25 23:47:56 1998 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler_console.cc (console_read): Several typos caused flaky
- behavior when \r or \n detected under ENABLE_LINE_INPUT. Also ignore
- first \n detected under ENABLE_LINE_INPUT if it isn't preceded by a \r.
- This avoids problems when switching from "raw" mode into "cooked mode.
-
-Sun Oct 25 12:28:21 1998 Geoffrey Noer <noer@cygnus.com>
-
- * cygwin.din: remove unnecessary __cygwin32_stack_trace and
- __cygwin_stack_trace exports.
-
-Sat Oct 24 21:18:46 1998 Christopher Faylor <cgf@cygnus.com>
-
- patch from Corinna Vinschen <corinna.vinschen@cityweb.de>:
- * path.cc (symlink): Standard protection for symlink should
- be 0777.
- * syscalls.cc (num_entries): Calculated links for directory
- entry should only include directories.
-
-Sat Oct 24 20:51:08 1998 Christopher Faylor <cgf@cygnus.com>
-
- * mkvers.sh: Modify check for CVS/Tag to work around ash bug.
- * sigproc.cc (wait_sig): Fix detection of non-blockable signals.
-
-Fri Oct 23 18:24:43 1998 Geoffrey Noer <noer@cygnus.com>
-
- * environ.cc: CYGWIN32 environment variable is now called CYGWIN
- * window.cc: lose "32" in Cygwin32WndClass
- * syslog.cc: lose "32" in WIN95_EVENT_LOG_PATH and
- CYGWIN32_LOG_NAME.
-
-Fri Oct 23 16:32:59 1998 Geoffrey Noer <noer@cygnus.com>
-
- * utils/cygcheck.cc: reformat, add copyright notice
-
-Fri Oct 23 18:15:28 1998 DJ Delorie <dj@cygnus.com>
-
- * utils/cygcheck.cc: new file
- * utils/Makefile.in: build cygcheck.exe
-
-Fri Oct 23 16:48:41 1998 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (signals_init): Add error to api_fatal.
- (events_init): Ditto. Collapse printfs into one.
- (winsock_init): Ditto.
- * net.cc (winsock_init): Remove "Cygwin" from error message.
-
-Fri Oct 23 13:48:10 1998 Geoffrey Noer <noer@cygnus.com>
-
- * Makefile.in: install include/cygwin headers, losing the "32".
- * include/cygwin32: remove
-
-Fri Oct 23 14:36:31 1998 Christopher Faylor <cgf@cygnus.com>
-
- * environ.cc (environ_init): Avoid reallocating environ array.
- * exec.cc: Increase number of arguments to 1024 throughout.
- * fhandler.cc (fhandler_disk_file::open): Revert to checking
- a file for '#!' to find out if it is executable but add
- extra check for NTEA which, if set, eliminates the need for
- the read.
- * sigproc.cc (sigproc_terminate): Close hwait_sig and set it
- to NULL prior to closing other handles since this flags some
- routines that the process is going down.
-
-Fri Oct 23 00:31:27 1998 Geoffrey Noer <noer@cygnus.com>
-
- * utils/*: remove "32"s from cygwin32_foo function calls
-
-Fri Oct 23 00:24:27 1998 Geoffrey Noer <noer@cygnus.com>
-
- * include/cygwin/version.h: increment CYGWIN_VERSION_DLL_MINOR
- and CYGWIN_VERSION_API_MINOR since I'm changing the API in a
- meaningful but backwards-compatible fashion.
-
- * exceptions.cc: strip "32" from cygwin32_exception_handler
- debug printfs
-
- * net.cc: strip "32" from all net functions
- * select.cc, syscalls.cc, winsup.h: lose "32" from cygwin32_select
- * cygwin.din: adjust for these changes (no backwards
- compatability issues here).
-
- * cygwin.din: rename all cygwin32_foo functions, aliasing as
- cygwin_foo for backwards compat. for now but intend to lose them
- at a later date.
- * include/sys/cygwin.h: copy all cygwin32_ protos and make them
- usable without the "32". We will remove the cygwin32_ ones at a
- later date.
- * external.cc, external.h: lose "32" from cygwin32_internal
- * shared.cc, winsup.h: lose "32" in cygwin32_getshared
- * path.cc, path.h: lose "32" in cygwin32_foo comments
- * dll_init.cc: lose "32" in cygwin32_detach_dll
- * hinfo.cc: lose "32" in cygwin32_attach_handle_to_fd
- * libccrt0.cc: lose "32" in refs to cygwin32_attach_dll
- * pinfo.cc: lose "32" in cygwin32_winpid_to_pid
-
- * include/cygwin32: remove all files except cygwin32_dll.h which
- some people may already be including. Aim to remove this
- remaining file at a later date.
- * include/cygwin: move all include/cygwin32 files here.
- * cygwin/cygwin_dll.h: change protos to reflect loss of "32"s
- * include/net/if.h, include/netinet/in.h, include/netinet/ip.h,
- include/netinet/ip_icmp.h, include/asm/socket.h:
- include/sys/socket.h: include the headers in include/cygwin
- * Makefile.in, winsup.h: fix references to
- include/cygwin32/version.h
-
- * libcctype.c, smallprint.c, test.c: lose "32" in Cygwin32 refs in
- comments
- * include/dlfcn.h, include/exceptions.h, include/mapi.h,
- include/winsock.h, include/mywinsock.h: ditto
- * config/*: ditto
- * profil.c: ditto, and respace
-
-Thu Oct 22 22:52:40 1998 Geoffrey Noer <noer@cygnus.com>
-
- * net.cc, exceptions.cc, hinfo.cc, select.cc,
- include/mywinsock.h: rename __INSIDE_CYGWIN32__ to
- __INSIDE_CYGWIN__
-
-Thu Oct 22 17:39:06 1998 Geoffrey Noer <noer@cygnus.com>
-
- First round of Cygwin32 -> Cygwin renaming. In all files,
- rename Cygwin32 to Cygwin in comments.
- * CYGWIN32_LICENSE: delete and
- * CYGWIN_LICENSE: add it back under this name
-
-Thu Oct 22 20:10:24 1998 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc: Eliminate cs mutex. Just use signal_mutex
- throughout. Rename sig_dispatch_mutex to signal_mutex throughout.
- (lock_cs): Rewrite to be a front-end for get_signal_mutex.
- (unlock_cs): Rewrite to be a front-end for release_signal_mutex.
- (set_process_mask): Synchronize signals after resetting mask.
- * sigproc.cc (release_signal_mutex): Report on success or
- failure of signal_mutex release.
- * include/Windows32/Defines.h (FILE_FLAG_WRITE_THROUGH): Make
- unsigned to avoid a compiler warning.
-
-Thu Oct 22 14:23:49 1998 Geoffrey Noer <noer@cygnus.com>
-
- * utils/Makefile.in: disable building cygwin.exe.
-
-Thu Oct 22 14:16:10 1998 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (sig_handle): Minimize life of cs lock during
- handling of signals to reduce the potential for a race.
-
-Thu Oct 22 10:23:19 1998 Christopher Faylor <cgf@cygnus.com>
-
- * include/sys/strace.h: Minor addition from threadsafe-branch.
-
-Thu Oct 22 09:03:18 1998 Christopher Faylor <cgf@cygnus.com>
-
- * debug.cc (close_handle): Error condition needs a return value.
- * environ.cc (parse_thing): char pointers should all be constant.
- (add): Ditto.
- * heap.cc (heap_init): Provide a little more information in
- fatal printf. Use api_fatal to print errors.
- * sigproc.cc (sigproc_terminate): Move code executed on
- thread termination here from wait_sig since this function
- may actually be executing in the signal thread.
- * strace.cc (strace_open): Argument should be const.
- (strace_init): Ditto.
- * winsup.h: Ditto.
- * include/cygwin32/version.h: Note that original shared memory
- version was 0 for 98r2.
-
-Wed Oct 21 08:41:39 1998 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (__api_fatal): Remove "cygwin" identifier.
- * fhandler.cc (fhandler_disk_file::open): Set symlink flag
- appropriately for previous change.
- * shared.cc (shared_name): Initialize static buffer to
- (hopefully) force it into NO_COPY segment.
- * mkvers.sh: Reorganize, add cvs tag detection, and output
- cygwin "info" defines.
-
-Tue Oct 20 18:42:50 1998 Geoffrey Noer <noer@cygnus.com>
-
- * include/cygwin32/version.h: rewrite versioning comments,
- updating for new scheme but keeping historical information.
-
-Mon Oct 19 23:45:24 1998 Geoffrey Noer <noer@cygnus.com>
-
- * include/windows.h: remove Objective-C BOOL ifdef, now taken
- care of within the include/Windows32 header files.
- * fhandler_console.cc: fix KeyEvent references in light of
- changes to the KeyEvent struct in the Windows32 headers.
-
- Update include/Windows32 header files. Changes from
- Mumit Khan <khan@xraylith.wisc.edu>, Corinna Vinschen
- <corinna.vinschen@cityweb.de>, and me.
- * include/Windows32/CommonFunctions.h: new file, contents from
- Functions.h.
- * include/Windows32/*.h: Misc updates.
-
-Mon Oct 19 20:26:15 1998 Christopher Faylor <cgf@cygnus.com>
-
- * debug.cc: Throughout, avoid calling *_printf while lock
- is active. Previous lock count was not thread-safe.
- * fhandler_console.cc (console_read): Avoid sending a
- \r to caller if ENABLE_LINE_INPUT.
- (fhandler_console::read): Rely on console_read to handle
- \r\n conversion.
-
-Mon Oct 19 12:10:09 1998 Christopher Faylor <cgf@cygnus.com>
-
- * mkvers.sh: Use more portable constructs to allow running
- this with /bin/sh, bash, and ksh.
-
-Mon Oct 19 11:19:58 1998 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (mount_info::from_registry): Missed "b15.0" part
- for writing mount information back to registry.
- (mount_info::init): Remove obsolete stuff.
-
-Mon Oct 19 10:42:17 1998 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Avoid newer GNU make construction when building
- version.cc.
-
-Mon Oct 19 00:09:06 1998 Geoffrey Noer <noer@cygnus.com>
-
- * Makefile.in: invoke mkvers.sh with $(SHELL)
-
-Sun Oct 18 15:19:17 1998 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler.cc (set_name): Accept unit argument for generating
- win32_name.
- (fhandler_base::fhandler_base): Ditto.
- (fhandler_dev_floppy::fhandler_dev_floppy): Ditto.
- (fhandler_dev_tape::fhandler_dev_tape): Ditto.
- (fstat): Set symlink bit only if symlink_p is positive.
- * fhandler.h: Reflect unit argument changes.
- * fhandler_serial.cc (fhandler_serial::fhandler_serial): Accept
- unit argument for generating win32_name.
- * hinfo.cc (hinfo::build_fhandler): Pass unit argument to constructor
- where apropriate.
- * path.cc (path_conv::path_conv): Set symlink_p to a positive
- value if !nofollow, negative otherwise.
- (windows_device_names): Can't default to \dev\comx. \dev part
- doesn't work.
- (get_device_number): Accept just "comN" for backwards compatibility.
-
-Sat Oct 17 01:58:15 1998 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (globify): Fix problem with argument corruption
- due to use of pointer freed by realloc.
-
-Sat Oct 17 00:10:53 1998 Christopher Faylor <cgf@cygnus.com>
-
- Change NOT_OPEN_FD to dtable.not_open throughout.
- * Makefile.in: Change .dll name to cygwin1.dll. Increment
- the '1' when there are API/shared memory changes. Make
- version.cc file every time .dll is linked. Remove datestamp
- stuff.
- * mkvers.sh: New file. Creates version.cc.
- * cygwin.din: Export setdtablesize.
- * dcrt0.cc: Remove obsolete version variables.
- (build_argv): Use issep() macro rather than isspace since
- isspace includes whitespace that the shell does not consider
- a command separator.
- (check_sanity_and_sync): Use new cygwin version defines and
- structures for compatibility checking.
- (dll_crt0_1): Ditto.
- (__api_fatal): Renamed from api_fatal. Now always called from
- macro which tacks program name to beginning of fmt. Increase
- size of buffer.
- * environ.cc (regopt): Use new reg_key class constructor
- functionality.
- * net.cc (getdomainname): Ditto.
- * path.cc (read_mounts): Ditto.
- (mount_info::from_registry): Ditto.
- (mount_info::to_registry): Ditto.
- (hash_path_name): No need for this to be a "C" function.
- * external.cc (cygwin32_internal): Export version info strings.
- * external.h: Add CW_GETVERSIONINFO.
- * fhandler.cc (fhandler_base::write): Eliminate use of MIN macro.
- * init.cc (set_dllname): Obsolete function. Handled in version.cc.
- (dll_entry): Remove reference to set_dllname.
- * libccrt0.cc (this_proc): Renamed from cygwin_statu.
- (cygwin_crt0_common): Record api version in this_proc.
- * mmap.cc (recreate_mmaps_after_fork): No need for this to be
- a "C" function.
- * syscalls.cc (close_all_files): Ditto.
- * pinfo.cc (lock_pinfo_for_update): Eliminate a compiler warning.
- * registry.cc: Eliminate reg_session class. Augment reg_key to handle
- functionality of reg_session.
- * registry.h: Ditto.
- * shared.cc (shared_name): No need for this to be a "C" function.
- Use new cygwin version structure.
- (shared_info::initialize): Use new reg_key class constructor
- functionality.
- * smallprint.c (__small_vsprintf): Accept %P as a format specifier.
- Signifies the program name.
- * spawn.cc (spawn_guts): Quote *all* of the stuff the dcrt0.c considers
- special.
- * tty.cc (tty::inuse_event_exists): Remove debugging printf. It results
- in too much output to strace log.
- * uinfo.cc: Add a needed include.
- * uname.cc (uname): Use new cygwin version structure to fill in utsname
- fields.
- * winsup.h: Regroup into sections. Add new version structure.
- * include/utmp.h: Move login/logout function declarations here.
- * include/cygwin32/version.h: Define new CYGWIN version/info
- stuff here.
-
-Fri Oct 16 00:13:35 1998 Geoffrey Noer <noer@cygnus.com>
-
- * Makefile.in: enable building mingw subdir by default
-
-Thu Oct 15 12:01:08 1998 Christopher Faylor <cgf@cygnus.com>
-
- * spawn.cc (spawn_guts): Set all security attributes
- for CreateProcess so that sexec will work properly.
-
-Thu Oct 15 08:49:12 1998 Christopher Faylor <cgf@cygnus.com>
-
- * hinfo.cc (hinfo::dup2): Avoid a null pointer dereference
- in a debugging printf.
-
-Wed Oct 14 18:06:51 1998 Geoffrey Noer <noer@cygnus.com>
-
- patch from Corinna Vinschen <corinna.vinschen@cityweb.de>:
- * fhandler_console.cc (fhandler_console::dup): reset
- default_color since the console fhandler forgets its default
- colorizing when it's `dup'ed.
- (fhandler_console::fhandler_console): remove unnecessary
- erasing in constructor of fhandler_console.
-
-Mon Oct 12 22:20:59 1998 Christopher Faylor <cgf@cygnus.com>
-
- * fcntl.cc (fcntl): According to the "Single UNIX Specification",
- F_DUPFD should *not* close its argument. Revert to previous
- behavior.
- * hinfo.cc (dup2): Guard against closing target fd too early.
- * pinfo.cc: Always initialize myself to a dummy value so that
- myself != NULL checks are avoided.
- * include/sys/strace.h (strace): Remove NULL check for myself.
- * dcrt0.cc (api_fatal): Ditto.
- * exceptions.cc (handle_exceptions): Ditto.
- * signal.cc (sigprocmask): Ditto.
- (_raise): Ditto.
- * strace.cc (get_strace_mutex): Ditto.
-
-Mon Oct 12 15:19:47 1998 DJ Delorie <dj@cygnus.com>
-
- * utils/ps.cc (main): use const char *pname
-
-Fri Oct 9 12:32:23 1998 Christopher Faylor <cgf@cygnus.com>
-
- * syscalls.cc (getw): Simplify.
-
-Thu Oct 8 23:09:34 1998 Geoffrey Noer <noer@cygnus.com>
-
- * times.cc: add missing syscall_printfs to time functions,
- slight reformatting.
-
-Thu Oct 8 21:56:37 1998 DJ Delorie <dj@cygnus.com>
-
- * hinfo.cc (cygwin32_attach_handle_to_fd): allow to pass -1
- for dup() simulation; return allocated fd.
- * pinfo.cc (lock_pinfo_for_update): if the mutex is broken,
- fail instead of looping. If you do loop, don't use 100% CPU.
-
-Thu Oct 8 18:33:02 1998 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc: Add another per-thread object for strace.
- (quoted): Fix misconception of method used to quote
- quotes.
- (globify): Optionally output arguments.
- (build_argv): Ditto.
- (dll_crt0_1): Fix typo in line reassignment.
- * debug.cc (class locker): Avoid calling lock multiple times.
- * exceptions.cc (call_handler): Set strace recursion flag
- to zero when invoking a signal handler.
- * fcntl.cc (_fcntl): F_DUPFD should close its argument.
- * fork.cc (fork): Move determination of parent process to
- a safer place.
- * sigproc.cc (get_sig_dispatch_mutex): Rename. Use macro
- interface to provide the name of the caller for strace output.
- (release_sig_dispatch_mutex): Ditto.
- * sigproc.h: Define *_dispatch_mutex wrappers.
- * strace.cc (strace_printf): Use new per-thread object to
- guard against recursion.
- * winsup.h: Define per_thread_strace_protect. Redo per_thread
- base class for a little more clarity.
-
-Wed Oct 7 22:30:43 1998 Geoffrey Noer <noer@cygnus.com>
-
- * fhandler_tty.h: up NTTYs from 16 to 128
-
-Wed Oct 7 09:15:55 1998 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler_console.cc (console_read): Distinguish between
- 0 byte return from CTRL-C and EOF condition.
-
-Tue Oct 6 22:31:44 1998 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (build_argv): Rewrite. Now: 1) allocates argv on
- the fly, 2) inserts '@' files as they are found, 3) uses
- sh-style quoting using either " or ' which may be embedded
- in an argument.
- (insert_file): Don't scan command line. Accept already
- parsed arguments from build_argv.
- (quoted): New function for parsing quoted strings.
- (globify): Don't scan argv list. Accept element from
- build_argv which will be tacked to end of argv as it
- is being built. Extend quoting options to allow
- tilde, braces, and quotes.
- (dcrt0_dll_1): Simplify argv processing. Just call
- build_argv, which handles everything.
-
-Tue Oct 6 11:04:43 1998 Christopher Faylor <cgf@cygnus.com>
-
- Change Create[A-Z]* calls throughout to use sec_none_nih
- to avoid subprocesses accidentally inheriting handles.
- * grp.cc: Hold group structures in group_buf rather than
- an image of the /etc/group file.
- (parse_grp): New function to parse a group line into a
- struct group.
- (add_grp_line): Use parse_grp to add line from /etc/group
- into internal cache.
- (read_etc_group): Avoid redundant feof call. Set up
- default group.
- (getgrgid): Just return appropriate entry from group_buf
- rather than reparsing internal representation.
- (getgrnam): Ditto.
- (getgrent): Ditto.
- * hinfo.cc (hinfo::select_*): Set errno value when attempt
- is made to use an unopened fd.
- * passwd.cc: Hold passwd structures in passwd_buf rather than
- an image of the /etc/passwd file.
- (parse_pw): New function to parse a passwd line into a
- struct passwd.
- (add_pw_line): Use parse_pw to add line from /etc/passwd
- into internal cache.
- (read_etc_passwd): Avoid redundant feof call.
- (search_for): Just scan passwd_buf for matching entries.
- (getpwent): Just return appropriate entry from passwd_buf
- rather than reparsing internal representation.
-
-Mon Oct 5 18:06:31 1998 Geoffrey Noer <noer@cygnus.com>
-
- patch from Corinna Vinschen <corinna.vinschen@cityweb.de>:
- * sysdef/kernel32.def: add missing GetDiskFreeSpaceEx lines
-
-Sat Oct 3 23:52:23 1998 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (si): Initialize so that NO_COPY will work.
- * debug.cc (class locker): Fix previous change. Critical
- sections are still required, so protect them if operating
- in main thread to avoid signal problems.
- Make any previously static use of locker global since that
- appears to be the only foolproof way of marking the variable
- NO_COPY. Rename these variables to something that is not
- likely to be collided with.
- * exceptions.cc (call_handler): Signal arrival of a dispatched
- signal here and wait a long time for the mutex before giving
- up. Should increase performance slightly.
- * sigproc.cc (maintid): New external symbol.
- * sigproc.cc (maintid): Make this global since it is used
- in other places now.
- (sig_dispatch_pending): Don't wait for wait_sig to complete
- if there are no pending signals. Avoids a race and should
- be faster.
- (wait_sig): Don't set signal_arrived event here. Do it in
- call_handler.
- * strace.cc (strace_printf): Remove previous recursion check
- since it is not signal safe.
- * syscalls.cc (_read): Remove duplicate CreateEvent typo.
-
-Fri Oct 2 09:54:42 1998 DJ Delorie <dj@cygnus.com>
-
- * strace.cc (strace_printf): protect against recursion
-
-Thu Oct 1 17:08:47 1998 Geoffrey Noer <noer@cygnus.com>
-
- * utils/ps.cc (main): add more detailed usage printfs
-
-Thu Oct 1 11:05:16 1998 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Fix typo in debug.o dependency.
- * debug.cc (class locker): Give up on using critical sections
- since they are not safe to use in the main thread due to signals.
-
-Wed Sep 30 22:34:42 1998 Christopher Faylor <cgf@cygnus.com>
-
- * fork.cc (fork): Close parent's parent_alive handle
- if there is one or suffer a handle leak.
- * syscalls.cc (_read): Make all events no access and
- non-inheritable or suffer potential handle leak.
- * windows.cc (gethwnd): Ditto.
-
-Wed Sep 30 17:22:29 1998 Geoffrey Noer <noer@cygnus.com>
-
- * include/io.h: add missing setmode proto
-
-Tue Sep 29 23:33:11 1998 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler_tty.cc (fhandler_pty_master::close): Make sure
- both sides of both pipes associated with a tty master are
- closed or suffer handle leaks.
-
-Tue Sep 29 16:55:00 1998 Geoffrey Noer <noer@cygnus.com>
-
- * path.cc (mount_info::init): remove default mounts for
- raw devices.
- * utils/mount.cc (reset_mounts): ditto
- (main, usage): new -f flag disables warning messages about
- missing mount point directories. Two new flags, disabled for
- now: -c will create missing mount point directory, -g will
- select adding the mount point to the global registry location.
- * include/sys/mount.h: add MOUNT_GLOBAL define, for future use.
-
-Tue Sep 29 14:20:30 1998 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (exception): Use %p to denote some hex
- values.
- * winsup.h (read_info): Add jmp_buf to structure. Required
- for syscalls.cc change below.
-
-Mon Sep 28 19:36:41 1998 Syd Polk <spolk@cygnus.com>
-
- * include/{tchar.h, direct.h}: Added so that
- tcl8.1a2 can be compiled with cygwin.
-
-Mon Sep 28 19:36:41 1998 Christopher Faylor <cgf@cygnus.com>
-
- * syscalls.cc (thread_reset): Yet another method for
- handling interruptible reads.
- (_read): Use thread_reset to reset reads after a signal.
-
-Sun Sep 27 21:11:46 1998 Christopher Faylor <cgf@cygnus.com>
-
- * cygwin.din: New alias for __cygwin32_stack_trace.
- * debug.cc (find_handle): Avoid leaving function without
- unlocking.
- (newh): Ditto.
- * exceptions.cc (__cygwin32_stack_trace): Rename to just
- `stack'. Shortens stack trace output.
- (exception): Use %p to distinguish register values.
- * fhandler_console.cc (fhandler_console::init): Remove
- debugging sig_protect.
- * init.cc (dll_entry): Move definition to avoid a
- compiler warning.
- * path.cc (mount_info::conv_to_win32_path): Detect
- case of root directory when setting win32 relative
- path.
- (mount): Remove obsolete label.
- * syscalls.cc (thread_sync): New function for exiting
- the read helper thread.
- (_read): Use new method for exiting the read helper
- thread.
-
-Sun Sep 27 11:25:06 1998 Christopher Faylor <cgf@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * delqueue.cc (delqueue_list::process_queue): Clear queue
- entry if file cannot be deleted for a reason other than
- sharing violation.
-
-Fri Sep 25 08:52:50 1998 Christopher Faylor <cgf@cygnus.com>
-
- * debug.cc: locker variables should all be static.
- * syscalls.cc (_read): Call ForceCloseHandle on
- thread handle since it is protected.
-
-Thu Sep 24 18:59:25 1998 Geoffrey Noer <noer@cygnus.com>
-
- * path.cc (mount): don't verify that path is an existing
- directory. Instead
- * utils/mount.cc: verify that path is an existing directory
- and print warning if it's not. Still do the mount.
-
-Thu Sep 24 11:45:04 1998 Christopher Faylor <cgf@cygnus.com>
-
- * debug.cc: locker class variables must be NO_COPY since
- they contain data that should not be precisely duplicated
- after a fork. This hopefully fixes a "SIGSEGV" problem.
- * select.cc (peek_pipe): Pipes apparently should set both
- "read" and "exception" flags on EOF.
-
-Wed Sep 23 18:26:31 1998 DJ Delorie <dj@cygnus.com>
-
- * doc/doctool.c (main): typo checking for --help
-
-Wed Sep 23 17:46:06 1998 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (symlink_check_one): Try much harder to ensure that
- CloseHandle is called on the file which was opened to check
- for a symlink. Avoid obsolete check for NULL buf.
-
-Wed Sep 23 17:11:50 1998 Christopher Faylor <cgf@cygnus.com>
-
- * syscalls.cc (_read): Close thread handle or suffer a leak.
- * dir.cc (opendir): Simplify logic.
- (readdir): Ditto. Close handle explicitly when hit end
- of files.
- (rewinddir): Close directory handle or suffer leak.
- (closedir): Simplify logic.
-
-Wed Sep 23 14:42:12 1998 Christopher Faylor <cgf@cygnus.com>
-
- patch from DJ Delorie <dj@cygnus.com>:
- * path.cc (symlink_check_one): Don't re-define res or symlinks
- will be undetectable.
-
-Wed Sep 23 12:02:39 1998 Christopher Faylor <cgf@cygnus.com>
-
- * Change calls to api_fatal throughout to avoid need for \n
- (see below).
- Adapt some *_printf()/ExitProcess combinations to use api_fatal.
- * winsup.h (SIGTOMASK): Generate signal mask correctly for
- programs linked with newer cygwins.
- * dcrt0.cc (check_sanity_and_check): Set subtract constant for
- signal mask calculation based on whether binary was linked with
- "older" or "newer" cygwin.
- (do_global_ctors): Accept a second argument indicating whether
- the ctors should always be run. Necessary in forked processes
- for cygwin constructors which may do more than just allocate memory.
- (checkout): Remove obsolete function.
- (dll_crt0_1): Remove obsolete function call. Call do_global_ctors
- with second argument TRUE.
- (api_fatal): Change to a print-style function, allowing arguments.
- Always emit a "\n" after a message.
- (__main): Do not force running of constructors in forked processes.
- * exceptions.cc (call_handler): Simplify arguments passed to this
- function. Eliminate potential race by setting signal masks here.
- (sig_handle): Just calculate current sigaction pointer once.
- Change call_handler arguments.
- * fhandler_console.cc (fhandler_console::write_normal): Output
- unknown characters to screen.
- (fhandler_console::write): Make signal protection synchronous.
- * fork.cc (fork): Reorganize slightly to eliminate a compiler warning.
- * init.cc (dll_entry): Temporarily remove freeing of waitq_storage
- on thread detach until a more robust scheme is developed.
- * signal.cc (signal): Make signal protection synchronous.
- (sigaction): Ditto.
- * sigproc.cc (get_sig_dispatch_mutex): More debug info.
- (release_sig_dispatch_mutex): Work around potential bug in windows
- with double allocation of a mutex when WaitForSingleObject is
- interrupted. Save errno here only if about to call sig_send
- where it may be changed.
- (wait_sig): Remove unnecessary sig_sign stuff. Add some debugging
- output.
- * termios.cc (tcflow): Signal protection.
- (tcgetattr): Ditto.
- (tcsetattr): Make signal protection synchronous.
- * winsup.h: Add new extern for SIGTOMASK macro. Use it in SIGTOMASK
- macro. Move errno stuff to end so that it can benefit from previous
- declarations.
- * configure.in: Move AC_CANONICAL_SYSTEM up a little to avoid having
- configure generate some code (like the check for host type) twice.
- * configure: Regenerate.
-
-Wed Sep 23 11:49:55 1998 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (symlink_check_one): Fix handle leak resulting
- from open of file to check for symlink magic. Suggested
- by Corinna Vinschen <corinna.vinschen@cityweb.de> .
-
-Wed Sep 23 08:33:26 1998 Christopher Faylor <cgf@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * fhandler_tty.cc (process_ioctl): Use console handle
- for ioctl operations.
-
-Tue Sep 22 23:58:20 1998 Geoffrey Noer <noer@cygnus.com>
-
- based on patch from sos@prospect.com.ru (Sergey Okhapkin):
- * utils/ps.cc (main): rewrite ps to give it more options,
- including a, e, f, l, and u.
-
-Tue Sep 22 15:18:41 1998 Geoffrey Noer <noer@cygnus.com>
-
- * path.cc (umount): remove initial system_printf
- (mount): stat path, verify that it's an existing directory,
- otherwise fail.
- (strncasematch, strcasematch): return 0 instead of FALSE
- * utils/mount.cc (reset_mounts): reset / to System drive,
- not C: as was done in the old days.
-
-Mon Sep 21 18:18:18 1998 Geoffrey Noer <noer@cygnus.com>
-
- * path.cc (mount, umount, setmntent, getmntent, endmntent):
- make extern "C"
-
-Mon Sep 21 20:37:16 1998 DJ Delorie <dj@cygnus.com>
-
- * doc/configure.in: don't try to find cc until we can correctly
- configure it for a native cc in a cross build.
-
-Mon Sep 21 17:17:14 1998 Geoffrey Noer <noer@cygnus.com>
-
- * fhandler.cc (fhandler_disk_file::check_execable_p):
- don't check for .shc since that's non-standard. Check for
- .exe first.
-
-Mon Sep 21 14:57:50 1998 Geoffrey Noer <noer@cygnus.com>
-
- * doc/Makefile.in: reference -db2html in case docbook
- tools aren't installed.
-
-Mon Sep 21 14:43:40 1998 Geoffrey Noer <noer@cygnus.com>
-
- patch from DJ Delorie <dj@cygnus.com>:
- * doc/doctool.c (scan_file): correct off by one error in
- malloc
-
-Mon Sep 21 14:28:38 1998 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler.h (select_record): Clear memory in constructor.
-
-Mon Sep 21 08:49:22 1998 Christopher Faylor <cgf@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * select.h: Use unsigned int to hold count in fd_set
- structure or suffer alignment problems.
- (WINSOCK_FD_ZERO): Back out previous change as it
- is no longer needed due to the above.
-
-Sat Sep 19 22:58:18 1998 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler_console.cc (console_read): Keep looping in
- ENABLE_LINE_INPUT mode when no characters are read.
- This apparently means that a CTRL-C has been hit.
- * select.cc (select_record::operator new): Remove.
- (setlect_stuff::~select_stuff): Use delete to remove
- record.
- (pipe_cleanup): Remove unneeded statement.
- (poll_socket): Add debugging statement.
- (start_thread_socket): Add debugging statements.
- * fhandler.h: Remove new operator from select_record.
- * select.h: Make WINSOCK_FD_ZERO more aggressive.
- * sigproc.cc (allow_sig_dispatch): Use new errno
- saving method.
- * syscalls.cc (_read): Reorganize stack freeing
- code to avoid overhead when it's not needed and
- to actually decommit stack memory.
-
-Sat Sep 19 19:16:32 1998 Christopher Faylor <cgf@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * select.cc (socket_cleanup): Avoid using a pointer
- after it has been deleted.
-
-Fri Sep 18 13:57:37 1998 Christopher Faylor <cgf@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * Makefile.in: Really remove extra slash in INCLUDES.
- Previous change didn't work.
- pipe.cc (make_pipe): set close-on-exec flag for non-inheritable
- pipes.
-
-Thu Sep 17 15:26:14 1998 Christopher Faylor <cgf@cygnus.com>
-
- * doc/Makefile.in: Add dummy install target.
-
-Thu Sep 17 12:30:49 1998 Christopher Faylor <cgf@cygnus.com>
-
- * winsup.h (per_thread*): New classes for storing and
- manipulating per_thread information.
- (threadstuff): New array of per_thread objects which are
- manipulated after a fork.
- (read_helper_thread_info): read() thread local storage.
- (waitq_storage): wait() thread local storage.
- * debug.cc (class locker): New class for generic locking
- of debug table manipulation. Use this throughout for
- locking access to thread/debug tables.
- (debug_init): Remove in favor of automatic constructor.
- * debug.h: Ditto.
- * fork.cc (fork): Iterate through threadstuff looking
- for thread information to clear out. Should solve some
- problems for Windows 95/98.
- * init.cc (dll_entry): Remove thread storage initialization.
- Use per_thread class for DLL_THREAD_DETEACH.
- * sigproc.cc: Use system_printf rather than alert_printf
- throughout since system_printf now has the same functionality.
- (sigproc_init): Use method to initialize per-thread storage.
- * sigproc.h: Remove waitq_storage declaration.
- * syscalls.cc (_read): Use per_thread class to manipulate
- per-thread information.
- * wait.cc (wait4): Ditto.
-
-Wed Sep 16 12:58:49 1998 Christopher Faylor <cgf@cygnus.com>
-
- * syscalls.c (_read): Lower timeout for signal detection after
- EOF on device. Should fix recent configure performance problems.
- * Makefile.in: Extend clean target into regexp directory.
-
-Wed Sep 16 11:44:14 1998 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler.cc (fhandler_base::set_name): Honor no_free_names().
- (fhandler_base::linearize): Remove unneeded check for NULL
- get_win32_name().
- (fhandler_disk_file::fhandler_disk_file): Set path names
- to a standard constant. They should eventually be filled
- out by fhandler_disk_file::open.
- (fhandler_disk_file::open): Detect if win32_path_name_ is
- a dummy path. Fill it out from real_path, if so.
- * hinfo.cc (hinfo::init_std_file_from_handle): Improve debugging
- statement.
- (hinfo::linearize_fd_array): Remove unneeded check for NULL
- get*_name ().
- * path.cc (path_conv::path_conv): Correct problem with
- symlinks found at places like E:\.
-
-Wed Sep 16 02:25:33 1998 Geoffrey Noer <noer@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * fhandler.cc (fhandler_disk_file::open): fix typo.
-
-Tue Sep 15 23:52:44 1998 Christopher Faylor <cgf@cygnus.com>
-
- * winsup.h: Remove side effects from SLASH_P.
-
-Tue Sep 15 18:36:08 1998 Ben Elliston <bje@cygnus.com>
-
- * sysdef/kernel32.def: Add definition for the Win32 API function
- `TryEnterCriticalSection'.
-
-Tue Sep 15 12:26:48 1998 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Remove extra slash in INCLUDES.
- * hinfo.cc (hinfo::dup2): Always clear close-on-exec
- flag for duplicated handle (problem and fix determined
- by Sergey Okhapkin, sos@prospect.com.ru).
- * fhandler.cc (fhandler_base::set_name): Avoid use of empty
- path names.
- (fhandler_base::raw_read): Show error code on failure.
- (fhandler_base::linearize): Avoid copying NULL names.
- (fhandler_base::open): Use NULL detection in small_printf.
- (fhandler_base::dup): Move set_close_on_exec_flag to dup2
- so it is caught in all cases.
- (fhandler_disk_file::fhandler_disk_file): Set "no free names"
- flag.
- (fhandler_disk_file::open): Clear "no free names" flag since
- names have been allocated to the fhandler structure at this point.
- * fhandler.h (set_no_free_names): Newconditional "no free names"
- function.
- * hinfo.cc (hinfo::dup2): Clear close on exec here.
- (hinfo::linearize_fd_array): Avoid copying NULL names.
- * path.cc (normalize_posix_path): Avoid copying trailing slash
- if root.
- (nofinalslash): Rename variable.
- * path.h: Add flag for future use.
- * regexp/regerror.c: Avoid including RCS strings in product.
- * regexp/regsub.c: Ditto.
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * select.cc (thread_pipe): Sleep for 10ms on every iteration.
- (start_thread_pipe): Set the handle in the select structure
- so that it will be properly identified in select_stuff::wait.
-
-Tue Sep 15 12:28:30 1998 DJ Delorie <dj@cygnus.com>
-
- * added documentation and doctool.c
-
-Tue Sep 15 08:37:26 1998 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Fix LIBGCC definition for native builds.
- Remove CFCOMMON in favor of configure solution.
- * configure.in: Default CXXFLAGS to be == CFLAGS.
- * configure: regenerate.
-
-Sun Sep 13 19:52:04 1998 Geoffrey Noer <noer@cygnus.com>
-
- * Makefile.in: include ../libio when building
-
-Sun Sep 13 19:30:58 1998 Geoffrey Noer <noer@cygnus.com>
-
- * include/cygwin32/version.h: bump version minor now that
- we've merged in all that new code...
-
-Sun Sep 13 21:34:33 1998 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (do_global_ctors): Reverse call order
- of constructors thanks to insight from Mumit Khan
- (hkan@xraylith.wisc.edu).
- (do_global_dtors): Reflect above change: invoke destructors
- in the proper order.
- * smallprint.c (__small_vsprintf): Gracefully detect a
- null pointer for '%s' format.
- * syscalls.cc (_read): Set correct flags to retrieve stack
- information or suffer sporadic failures due to uninitialized
- flag.
- * regexp/regexp.c: Comment out RCS string. This provides
- no useful information in the .dll.
-
-Thu Sep 10 21:09:51 1998 Christopher Faylor <cgf@cygnus.com>
-
- Merge in experimental-980602 branch changes.
-
-Thu Sep 10 21:09:51 1998 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (symlink_check_one): known_suffix needs to be
- determined here in some cases, so deal with it here.
- (path_conv::path_conv): More effort needed to propagate
- the known_suffix back to caller in every case.
- (has_suffix): Return suffix found.
- (readlink): Avoid two passes through symlink_check_one.
- * spawn.cc (find_exec): Propagate known_suffix from
- perhaps_suffix back to caller, if appropriate.
- (spawn_guts): Use suffix returned from find_exec to
- determine if file should be scanned as a script when
- a #! file is found. Avoids a duplicate call to
- perhaps_suffix.
-
-Thu Sep 10 21:09:51 1998 Christopher Faylor <cgf@cygnus.com>
-
- * path.h (suffix_info): New struct for dealing with standard
- suffix (.exe, .bat, etc.) information.
- (path_conv): Constructor now takes a suffix_info argument.
- (std_suffixes) Standard array of suffixes to consider "special".
- * path.cc (path_conv): Constructor now takes a suffix_info
- argument. Record any known suffix in path_conv known_suffix
- field.
- (has_suffix): New function for determining if a path already
- has a known suffix.
- (next_suffix): New function for returning the next suffix from
- a list of suffixes.
- (symlink_check_one): Take an optional suffix_info argument
- for suffixes to consider or tack on.
- * spawn.cc (std_suffixes): Standard list of executable suffixes.
- (perhaps_suffix): Pass std_suffixes to path_conv. Use
- new known_suffix field in path_conv to determine if a
- suffix has been detected.
-
-Thu Sep 10 21:09:51 1998 Christopher Faylor <cgf@cygnus.com>
-
- Substitute new str{,n}casematch for strcasecmp throughout.
- This implementation is faster since it only tests equality.
-
- Change fhandler*::open throughout to return true/false
- since the pointer returned was never used for anything.
-
- * Use strcasestr throughout for case insensitive matches for
- filenames.
- * Makefile.in: Use GNU make construct for determining gcc lib.
- * dcrt0.cc (check_sanity_and_sync): Make error message more
- explicit.
- * debug.h: Better defines for dummy functions when !DEBUGGING.
- * fhandler.cc (fhandler_base::fstat): Don't bother zeroing buf
- here since it is always done in the caller.
- (fhandler_base::~fhandler_base): Recognize cases where *_path_name_
- should not be freed.
- (fhandler_disk_file::open): Split into two functions. First
- function performs a path_conv and does testing on same. This
- calls new fhandler_disk_file::open with path_conv data. New
- function is called by stat_worker to avoid extra path tests and
- mallocs.
- Also, fix long standing off-by-one typo looking for #! magic.
- Also, reapply test for != WinNT when checking files for magic.
- Otherwise there is a tremendous slowdown in file opening, especially
- for stat().
- * fhandler.h: Add support for setting/detecting when *_path_name
- should not be freed.
- Add new fhandler_disk_file::open declaration.
- * hinfo.cc (digits): Remove obsolete function.
- (hinfo::build_fhandler): Add default name for FH_DISK.
- * path.cc (path_prefix_p_): Don't check beyond len1 for leading
- slash. Responsible for reported performance problems?
- (path_conv::path_conv): Ensure that fileattr is filled out
- correctly in all cases. Return immediately when a file
- is detected in !follow_mode.
- (nofinalslash): Simplify.
- (strncasematch): New function similar to strncasecmp except
- that it only checks for =/!= and benchmarks faster than same.
- (strcasematch): Ditto, re. strcasecmp.
- (strcasestr): New function which does a case-insensitive strstr.
- Needed for filename matching.
- * smallprint.c (__small_vsprintf): Fix off-by-one in %.ns processing.
- * spawn.cc (exe_exts): Make global for eventual use by other modules.
- * syscalls.cc (_fstat): Zero buf prior to use.
- (stat_worker): Rename from _stat_worker. Reorganize to minimize
- mallocs and path name conversions. Should now perform only one
- path conversion and 0 malloc/frees.
- * winsup.h: Declare new functions.
-
-Thu Sep 10 21:09:51 1998 Christopher Faylor <cgf@cygnus.com>
-
- Clean up error messages throughout using new strace_printf
- options.
- * smallprint.c (__small_vsprintf): Add %E option for printing
- error code. Understand %.n syntax.
- * strace.cc (strace_vsprintf): Common routine for formatting
- strace output. Default to always ending with \n unless
- string ends with \b.
- (strace_write): Common routine for writing to strace output.
- (strace_printf): Use above two routines.
- (system_printf): Ditto.
- * path.cc (path_conv): Scan path to be converted from right
- to left for efficiency. Implement extension searching
- which is passed from spawn to symlink_check_one to minimize
- overhead.
- (symlink_check_one): Check extensions for existence for use
- with spawn.
- (readlink): Accommodate changes to symlink_check_one.
- * spawn.cc (perhaps_suffix): Use new extension checking
- capabilities of path_conv.
- (find_exec_1): Delete.
- (find_exec): Generalize to allow searching on any PATH like
- environment variable.
- * dllfcn.cc (check_path_access): Use find_exec to find a path.
- This also ensures that paths are in Windows format which was
- not the case before.
- * environ.cc (conv_envvars): Add LD_LIBRARY_PATH.
- * fork.cc (fork): Clean up dll loading slightly.
- * Makefile.in: Turn on compiler warnings.
- * winsup.h (save_errno): New class for saving errno from
- being clobbered.
- * include/sys/strace.h: Make system_printf a macro similar
- to strace_printf_wrapper.
-
-Thu Sep 10 21:09:51 1998 Christopher Faylor <cgf@cygnus.com>
-
- * sigproc.cc (sig_send): Attempt to work around Windows strangeness
- when thread interrupted while waiting for completion event.
-
-Thu Sep 10 21:09:51 1998 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc: Remove debugging function DELETEME ().
- * fhandler.cc (fhandler_base::fstat): Respond to compiler warning.
- * signal.cc (sleep): Reset signal_arrived event before using it or
- we could wake up immediately.
- (usleep): Ditto.
- (pause): Ditto.
- * spawn.cc (spawn_guts): Ditto. Respond to compiler warning.
- * sigproc.cc (sig_send): More debugging info.
- (sig_dispatch_mutex): Only ping wait_sig when needed.
-
-Thu Sep 10 21:09:51 1998 Christopher Faylor <cgf@cygnus.com>
-
- * select.cc (socket_cleanup): Close thread handle or suffer
- handle leak.
-
-Thu Sep 10 21:09:51 1998 Christopher Faylor <cgf@cygnus.com>
-
- * select.cc (verify_true): New function.
- (fhandler_socket::select_*): Use verify_true for verification
- function to avoid multiple calls to socket select.
-
-Thu Sep 10 21:09:51 1998 Christopher Faylor <cgf@cygnus.com>
-
- * select.cc (select_stuff::wait): Scan entire list of fds
- when WFMO wakes up.
- (set_bits): Add some strace debugging output.
- (thread_socket): Ditto.
- (verify_ok): Return result of set_bits rather than always 1.
- (start_thread_socket): Set the handle in the select structure
- so that it will be properly identified in select_stuff::wait.
- (fhandler_windows::select_read): Verification routine should
- be `poll_windows'.
-
-Thu Sep 10 21:09:51 1998 Christopher Faylor <cgf@cygnus.com>
-
- * sigproc.cc: Change some sigproc_printfs to only occur when
- #ifdef DEBUGGING.
- * spawn.cc (perhaps_suffix): Search for (PROG is the pathname to
- the executable file) PROG.exe, PROG.com, PROG.bat, PROG.cmd, and
- PROG and return extension found or NULL if no matching file.
- (spawn_guts): If the file name of the executable ends in either
- .exe, .com, .bat, or .cmd we assume that it is not a script file
- and therefore do not open the file to determine if it is.
- Fix "wait_failed" error when exec() called and non-cygwin parent.
-
-Thu Sep 10 21:09:51 1998 Christopher Faylor <cgf@cygnus.com>
-
- * dir.cc (rmdir): Set correct errno when non-empty directory and
- Windows9x.
- * pipe.cc (pipe): Use binary mode by default for pipes.
- * syscalls.cc (_read): Wait for terminated thread to exit before
- clearing its stack memory.
-
-Thu Sep 10 21:09:51 1998 Christopher Faylor <cgf@cygnus.com>
-
- * hinfo.cc (hinfo::fixup_after_fork): Start initial fd search
- to zero forked processes so that a close(0)/dup(fd) will work.
-
-Thu Sep 10 21:09:51 1998 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler_windows::set_close_on_exec: Deal with possible
- NULL handle.
- (fhandler_windows::fixup_after_fork): Ditto.
- * select.cc (select_stuff:wait): Handle return from
- MsgWaitForMultipleObjects correctly for windows case.
- * sigproc.cc (sig_send): Reset completion event for main thread.
- * syscalls.cc (_read): Better handling of stack free condition.
-
-Thu Sep 10 21:09:51 1998 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (call_handler): Exit earlier if just running
- in an exec'ed stub since the stub may own the sig_dispatch mutex,
- but we still want to exit.
- * select.cc (select_stuff::wait): Fix check for window activity
- from MsgWaitForMultipleObjects. Handle infinite wait correctly.
- (poll_windows): Add debugging output.
- * spawn.cc (spawn_guts): Protect against signals interrupting
- at an inopportune moment.
-
-Thu Sep 10 21:09:51 1998 Christopher Faylor <cgf@cygnus.com>
-
- * select.cc (select_stuff:test_and_set): Take appropriate action
- when a select record uses a window_handle.
- (fhandler_windows::select_read): Set handle and windows_handle
- appropriately.
- (fhandler_windows::select_write): Ditto.
- (fhandler_windows::select_except): Ditto.
-
-Thu Sep 10 21:09:51 1998 Christopher Faylor <cgf@cygnus.com>
-
- * select.cc (cygwin32_select): Need to reset signal_arrived before
- testing it or suffer loop.
-
-Thu Sep 10 21:09:51 1998 Christopher Faylor <cgf@cygnus.com>
-
- * fork.cc (resume_child): Give up on SuspendThread synchronization
- and use subproc_ready/forker_finished events.
- (sync_with_parent): Ditto.
- * sigproc.cc (wait_sig): Make sigcomplete_main manual reset to
- allow handling of nested interrupts.
- (wait_sig): Fix stupid typo on exit that would cause a
- loop to run for a long time. Are exits faster now?
-
-Thu Sep 10 21:09:51 1998 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (unlock_cs): Leave decision to release
- sig_dispatch_mutex to the caller.
- (set_process_mask): Call release_sig_dispatch_mutex explicitly
- if needed.
- (handle_sigsuspend): unlock_cs no longer takes an argument.
- (call_handler): Try to acquire the strace mutex prior to
- suspending the main thread to ensure that the mutex is always
- released.
- (sig_handle): Call release_sig_dispatch_mutex explicitly.
- * fhandler_console.cc (fhandler_console::write): Protect against
- signals while writing.
- * signal.cc (signal): Protect against signal dispatch.
- (sigaction): Ditto.
- * sigproc.cc (sig_dispatch_pending): Return status no longer needed.
- (sig_send): Assume pending_signals if sending signal to self.
- (allow_sig_dispatch): Accept synchronize argument to control whether
- to wait for wait_sig to do its thing.
- (release_sig_dispatch_mutex): Just awaken wait_sig loop and wait
- for acknowledgement if waitfor is TRUE.
- (wait_sig): Don't ever zero pending_signals to avoid a possible race.
- Set pending_signals for blocked signals, too.
- * sigproc.h: Add __SIGFLUSH signal.
- (class sig_protect): Allow destructor to wait for signal dispatch,
- or not given constructor argument.
- * strace.cc (get_strace_mutex): Renamed from waitfor_strace_mutex.
- (release_strace_mutex): External function for use by call_handler.
- This replaces raw calls to ReleaseMutex throughout.
- * syscalls.cc (_read): Use sig_protect to protect against signals.
- Other cosmetic cleanups.
- (_close): Protect function with sig_protect.
- * termios.cc (tcsetattr): Protect function with sig_protect.
-
-Thu Sep 10 21:09:51 1998 DJ Delorie <dj@cygnus.com>
-
- * syscalls.cc (_read): typo in matching printf format to args.
-
- * fhandler.cc (write): Switch to the Microsoft/DJGPP way of
- writing out text files: pass \r but prepend \r to \n.
- (read): Don't collapse multiple \r's.
-
- * delqueue.cc: rewritten for speed. Don't check *every* entry in
- the list if we know the list is empty, plus check for duplicates.
- * delqueue.h: ditto.
- * path.cc (path_conv): If a path component is missing, short-
- circuit the symlink check.
-
-Thu Sep 10 21:09:51 1998 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler.h: Reorder fhandler status field so that device is
- in lower bits. This allows gcc to optimize access to the device.
- * hinfo.cc: Inline not_open().
- * winsup.h: Inline hinfo::not_open(). Make hinfo::[] operator a
- simple array reference.
- * strace.cc: Change strace() to a macro.
- * include/sys/strace.h: Ditto.
- * syscalls.cc (read_handler): New function. Called directly from
- _read for "non-slow" devices or via read_handler for slow devices.
- (_read): Use read_handler for reading.
- (read_helper): Ditto.
-
-Thu Sep 10 21:09:51 1998 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (do_exit): Don't ignore signals if reparenting.
- Besides being a race, this screws up the process which is
- actually executing.
- * fork.cc (fork): Don't create a new process group when
- forking or subprocesses won't respond to CTRL-C.
- * syscalls.cc (_read): Ensure correct setting of EINTR errno.
-
-Thu Sep 10 21:09:51 1998 Christopher Faylor <cgf@cygnus.com>
-
- * fork.cc (sync_with_child): Consider it a success if the child
- has set the subproc_ready signal regardless of whether it has
- exited or not.
- * init.cc (dll_entry): Set read_helper_thread_info stuff to 0
- on dll initialization. Windows 95 seems to keep garbage here,
- despite documentation to the contrary.
- * syscalls.cc (_read): Report on errors to create read_helper
- events.
-
-Thu Sep 10 21:09:51 1998 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (compute_argc): Limit debug_printf string argument size
- or suffer a buffer overrun.
- (do_exit): Add debugging statement.
- * exceptions.cc (call_handler): Remove extraneous sigproc_printf.
- Consolidate signal_arrived event with sig_was_dispatched.
- (events_terminate): Consolidate signal_arrived event with
- sig_was_dispatched.
- * fhandler.h: Rename a field to something more mnemonic.
- * fhandler_tty.cc: Throughout: Only set up fhandler_tty_master when
- actually using ttys. Change tty_master `f' field to `console'.
- * tty.cc: Ditto.
- * fork.cc (sync_with_child): Add more information to "child died"
- error.
- * hinfo.cc (hinfo::build_fhandler): Call tty master constructor
- when appropriate.
- * select.cc (select_stuff::wait): Consolidate signal_arrived event
- with sig_was_dispatched.
- * sigproc.h: Ditto.
- * syscalls.cc (_read): Ditto.
- * winsup.h: Ditto.
- * sigproc.cc: Ditto, throughout.
- (block_sig_dispatch): Don't reset signal_arrived. Causes races.
- * spawn.cc (spawn_guts): Limit debug_printf string argument size
- or suffer a buffer overrun.
- * include/sys/strace.h: Implement strace_minimal for very minimal
- output which, hopefully, will not affect the behavior of traced
- programs as much.
-
-Thu Sep 10 21:09:51 1998 Geoffrey Noer <noer@cygnus.com>
-
- * Makefile.in: build libwinspool.a with the dll name winspool.drv
-
-Thu Sep 10 21:09:51 1998 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (build_argv): Remove verbose debug_printf.
- (dll_crt0_1): Use shared data handle passed in from parent process
- when appropriate. Remove extraneous debug_printf.
- * environ.cc (getwinenv): New function. Returns (possibly cached)
- native version of an environment variable.
- (win_env::add_cache): Add cached version of posix and win env
- variables to local table.
- (posify): Modify for use with native caching.
- (setenv): Convert special environment variables to native here,
- when they are set.
- (struct parse_thing): Simplify struct.
- (struct parse_things): Extend table to accommodate "envcache"
- setting.
- (parse_options): Add "envcache" option to control whether special
- environment variables are cached. Simplify handling of remembered
- parameters.
- (winenv): Modify for use with getwinenv.
- * exceptions.cc (unlock_cs): release_sig_dispatch takes an argument
- now.
- (set_process_mask): unlock_cs now wakens wait_sig when appropriate.
- (handle_sigsuspend): Reorganize to take advantage of new behavior
- of release_sig_dispatch_mutex and hopefully avoid a race.
- (handle_sig): Avoid waking wait_sig if we couldn't get the dispatch
- mutex.
- * exec.cc (strccpy): Change to modify second argument to point
- to position where "parse" stopped so that it doesn't have to be
- recalculated by the caller.
- (sexecvpe): Use find_exec () to find program to run. If you've
- got a function for this, you might as well use it.
- * fhandler_tty.cc (fhandler_pty_master::process_input_to_slave):
- Report on signal being sent in termios_printf. Use kill_pgrp
- interface.
- * fork.cc (fork_copy): Just copy everything at once rather than
- in individual pieces.
- (fork): Potentially move up sbrk() when DEBUGGING so that parent
- and child heaps are in sync. Pass cygwin_shared_h to child.
- * path.cc (path_conv::path_conv): Make sure that a file is not
- a symlink when returning immediately.
- * sigproc.cc (sig_dispatch_pending): Return TRUE if signals were
- pending.
- (sigproc_init): Move sig_was_dispatched initialization here so
- that it will always be available to other functions which rely
- on it. Otherwise these functions would have to wait for wait_sig
- to complete its initialization.
- (sig_send): Rework SIGSUSPEND handling.
- (release_sig_dispatch_mutex): Wait for signal to be dispatched
- after releasing mutex if argument is TRUE.
- (wait_sig): Remove sig_was_dispatched initialization from here.
- * sigproc.h: release_sig_dispatch takes an argument.
- * spawn.cc (perhaps_suffix): Take an optional argument indicating
- whether the path has already been converted to win32.
- (find_exec_1): Use getwinenv to get windows version of PATH. Use
- windows version of individual directories to avoid posix lookups.
- (spawn_guts): Call strace_dump here to cause strace output to
- be slightly more synced when using strace caching.
- (spawnvpe): Use find_exec () to find program to run. If you've
- got a function for this, you might as well use it.
- * syscalls.cc (_read): Only block signals for "slow" devices.
- * winsup.h: Changes needed for previous checkin and getwinenv.
-
-Thu Sep 10 21:09:51 1998 DJ Delorie <dj@cygnus.com>
-
- * path.cc (path_conv): bug fix when path ends in slash
-
-Thu Sep 10 21:09:51 1998 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler.cc (fhandler_base::set_name): Use fhandler
- method for determining native name. Avoid path_conv
- when possible.
- (fhandler_disk_file::get_native): New function, returns
- windows name of disk file.
- * fhandler.h: Add get_native() method to fhandler_*
- classes.
- * fhandler_serial.cc (fhandler_serial::get_native): Return
- windows name of serial port.
- * fhandler_tty.cc (fhandler_tty_master::init): Use consistent
- name for tty master.
- * fork.cc (fork_copy): Experimental change to avoid loop.
- * grp.cc (add_grp_line): Use realloc to extend group buffer.
- * hinfo.cc (hinfo::release): fd object should be deleted,
- not freed or suffer a memory leak.
- (init_std_file_from_handle): Reset first_fd_for_open to
- signal that std* locations have been opened. Avoids use
- of these locations prior to full dtable setup.
- * passwd.cc (add_pwd_line): Use realloc to extend passwd buffer.
- * path.cc (path_conv::path_conv): Avoid checking for symlinks on
- network shares. Check for existence of file prior to taking
- it apart for symlink checking (this needs more work).
- (windows_device_names): Make global.
- (get_device_number): Detect tty master.
- * sigproc.cc (wait_sig): Maintain a flag which indicates when
- signals are queued due to the wait_sig's inability to get a
- sig_dispatch mutex.
- (sig_dispatch_pending): Don't wake up the wait_sig thread if
- unless there are signals queued (see above) or force argument.
- (allow_sig_dispatch): Only wait for signal dispatch if something
- is queued.
- * sigproc.h: allow_sig_dispatch takes a (defaulted) argument now.
- * syscalls.cc (_open): Use default hinfo::find_unused_handle call.
- * net.cc: Ditto, throughout.
- * pipe.cc: Ditto.
-
-Thu Sep 10 21:09:51 1998 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (do_exit): Ignore user initiated signals here.
- * fhandler.cc (fhandler_disk_file::open): Detect error condition
- on fhandler_base::open.
- * fhandler_console.cc (undo_input): Respond to compiler warnings.
- * grp.cc (getgrgid): Ditto.
- * times.cc (_tzname): Ditto.
- * fhandler_tty.cc (fhandler_Tty_slave::open): Cosmetic changes.
- * fork.cc: Clean up debugging output.
- * pinfo.cc (pinfo_init): Set pgid and sid to different values
- initially. Let user program set sid appropriately if it is
- to be the owner of a tty.
- * sigproc.cc (allow_sig_dispatch): Try harder to detect when we
- should wait for a signal dispatch.
- * strace.cc (strace_open): Revert to previous mutex behavior.
- * include/sys/strace.h: Ditto.
- * syscalls.cc (_open): Detect error from fhandler open.
-
-Thu Sep 10 21:09:51 1998 Christopher Faylor <cgf@cygnus.com>
-
- Global changes:
- Store win32 name in fhandler structure to avoid multiple translations.
- Support close_on_exec at the Win32 level for all but sockets.
- Respond to gcc warnings.
- Use single fstat() call for devices.
- *::set_close_on_exec modified.
- * dir.cc (opendir): Use win32 name in stat to speed things
- up a little.
- * debug.cc: New file. Provides routines for extra debugging
- when -DDEBUGGING is specified.
- * debug.h: New file. Definitions for debug.cc.
- * exceptions.cc (signals_init): Break out signal initialization
- from exceptions.
- (dump_status): Add thread name to stack dump output.
- (handle_exceptions): Renamed.
- (set_process_mask): Don't ever mask non-maskable signals.
- (ctrl_c_handler): Preliminary change to allow propagation of
- cygwin signals back to gdb.
- (sig_handle): Call do_exit directly from signal thread rather than
- attempting to redirect the main thread.
- * fhandler.cc (set_name): Store win32 name in fhandler structure.
- (*::open) name field is extraneous now. Use get_win32_name () to
- retrieve stored win32 name.
- (fhandler_base::fstat): Default to performing fstat on a device.
- (fhandler_disk_file::fstat): Renamed from fhandler_base::fstat.
- Operate only on disk files.
- (fhandler_base::set_close_on_exec_flag): New function sets flag
- without touching the handle.
- (fhandler_base::~fhandler_base): Free unix/win32 path names.
- (fhandler_disk_file::close): Only call delqueue.process_queue from
- this function since disk files are the only things that can
- be unlinked, currently.
- (fhandler_dev_null::open): Delete.
- (set_inheritence): New function. Set handle inheritence.
- (fhandler_*::fork_fixup): New functions. Inherit fhandler data
- after a fork.
- fhandler.h: *::set_output_handle - new method.
- Setup methods for use by select().
- fork.cc (fork): Call fixup_after_fork in child to inherit
- handles marked as non-inheritable on CreateProcess.
- hinfo.cc (hinfo::build_fhandler): Use new function to detect
- devices.
- (dup_for_exec): Delete obsolete function.
- (hinfo::dup2): Remove extraneous tests.
- (hinfo::select_*): Interfaces into select().
- (hinfo::release): Free fd in dtable.
- (hinfo::fixup_after_fork): New function. Inherit close-on-exec
- handles from parent after fork.
- path.cc (mount_info::posix_path_p): Make inline.
- (path_conv::path_conv): Short circuit when path resolves to a device.
- (digits): Move here from hinfo.cc.
- (windows_device_names): Win32 names for Cygwin devices.
- (get_device_number): New function. Return devie number given device
- name.
- (win32_device_name): New function. Decode a windows device name
- and an optional "unit".
- (mount_info::conv_to_win32_path): Short circuit when path resolves to
- a device.
- * path.h: add device and unit fields to path_conv class.
- * select.cc: Rewrite for more structure, more OO.
- * sigproc.cc: (get_sig_dispatch_mutex): New function.
- (release_sig_dispatch_mutex): New function.
- * sigproc.h: sig_protect class. Automatic protection from signals
- when used.
- * syscalls.cc (stat_dev): New function.
- (stat_worker): Short-circuit when a cygwin device is detected.
- * utils/ps.cc: Don't lock_pinfo when -f. Compress format to fit
- more on a line.
-
-Thu Sep 10 21:09:51 1998 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (dll_crt0_1): Register name for main thread.
- * exceptions.cc (dump_status): Add thread name to diagnostic output.
- (__cygwin32_exception_handler): Rename to handle_exceptions. Avoid
- creating a .core file.
- * exec.cc (sexecve): Reflect spawn_guts argument change.
- * fhandler_tty.cc (fhandler_tty_master::init): Use makethread to
- create a new thread.
- * select.cc: Create pipe/socket threads each time select is called.
- Use thread termination as indication of fd readiness.
- * sigproc.cc (sigproc_init): Use makethread to create a new thread.
- (wait_sig): Simplify default signal call slightly.
- * spawn.cc (spawn_guts): Accept child pinfo pointer rather than
- pid. Reorganize so that common initialization is handled once.
- * strace.cc: Set strace_mutex to NULL initially to catch CreateMutex
- errors.
- * window.cc (gethwnd): Use makethread to create a new thread.
-
-Thu Sep 10 21:09:51 1998 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Add debug.o target.
- * cygwin.din: Separate pipe from _pipe.
- * dcrt0.cc (alloc_stack): New, more precise method for allocating
- stack space after a fork.
- (dll_crt0_1): Use new child_proc_info class to retrieve information
- from possible parent process. Remove #ifdef erroneously checked in.
- Remove extraneous syscall_printf.
- * exceptions.cc (signals_init): New function.
- * fhandler.cc (fhandler_make_pipe): Move to pipe.cc.
- * fhandler.h (fhandler_base): New = operator preserves unix_path_name_.
- * fhandler_tty.cc: Strip some tty functions from here into tty.cc.
- * fork.cc: Remove obsolete ifdefs. Reorganize, streamline with new
- fork.
- * hinfo.cc: Speed up build_fhandler.
- * libccrt0.cc: Remove obsolete ifdefs.
- * pinfo.cc (pinfo_init): Simplified by new fork/spawn info passing
- method.
- * pipe.cc (make_pipe): Moved from fhandler.cc. Handles MS-style
- _pipe.
- (pipe): Use new arguments to make_pipe.
- (_pipe): New MS-compatible function.
- * shared.cc: cygwin_shared_h make global so that it can be inherited
- via new fork/spawn info passing method.
- (open_shared_file_map): Detect if shared info is already set up from
- fork/spawn.
- * sigproc.cc (sigproc_init): Initialize signals with signals_init here.
- Use new fork/spawn info passing method.
- * spawn.cc (spawn_guts): Pass information in a structure to spawned
- process. Identify structure type with a "magic number".
- * strace.cc (strace_printf): Only print program full path spec once
- to save space and clutter. Preserve any windows error.
- * syscalls.cc (_open): Detect and avoid error return from
- build_fhandler.
- * tty.cc: Accept some non-fhandler functions formerly found in
- fhandler_tty.cc
- * winsup.h (pinfo): Remove some fields obsoleted by new fork/spawn
- info passing method.
- (child_info*): New classes for passing information to forked/spawned
- process.
-
-Thu Sep 10 21:09:51 1998 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Add debug.o target.
- * console.cc (fhandler_console::char_command): Fix failed merge.
- * dcrt0.cc (alloc_stack): New, more precise method for allocating
- stack space after a fork.
- (dll_crt0_1): Use new child_proc_info class to retrieve information
- from possible parent process. Remove #ifdef erroneously checked in.
- Remove extraneous syscall_printf.
-
-Thu Sep 10 21:09:51 1998 Christopher Faylor <cgf@cygnus.com>
-
- Global changes:
- Replace pinfo hmap entry with "dtable" reference.
- Replace cygwin_shared .t field with '.tty' and allow indexing via
- tty into this array.
- Make fhandler_ constructors set the size of the structure into any
- created class.
- Change fhandler settings into a bit mask. Use methods to access.
- Record device type in fhandler class.
- Remove old linearize/de_linearize code in favor of newer method
- uses more bullet-proof method for determing device type of inherited
- files.
- Protect various important handles from closing when operating
- under -DDEBUGGING.
- * dcrt0.cc (do_global_ctors): Renamed, made static and reused
- for calling from dll_crt0_1 to initialize cygwin.dll constructors.
- (do_global_dtors): Renamed.
- (dll_crt0_1): mark noreturn. Use new do_global_ctors function.
- Call debug_init to initialize features turned on by -DDEBUGGING.
- Call dtable_init to initialize dtable, hinfo_init to initialize
- standard fds.
- (dll_crt0): Mark noreturn. Move constructor calls to dll_crt0_1.
- (__main): Use new do_global_ctors ().
- Remove OLDWAY and _PPC_ conditionals.
- * environ.cc (environ_init): Use appropriate strace printf.
- * exceptions.cc (set_process_mask): Don't ever mask out unmaskable
- signals.
- * init.cc (dll_entry): Initialize storage for read_helper.
- * pinfo.cc (init_from_exec): Delete obsolete function.
- * sigproc.cc (sig_send): Implement myself_nowait to allow
- sending a signal to myself without waiting for synchronization.
- (wait_sig): Change method for determining whether signal should
- be examined slightly.
- * strace.cc (strace_printf): Add ability to report on thread from
- which message originated.
- (threadname): New function
- * syscalls.cc (read_helper): New function. Invoked in separate thread
- from _read.
- (_read): Use a separate thread for reads that can be interrupted
- with a TerminateThread(). Allows EINTR.
- (setdtablesize): Use new method for extending the size. Callable
- from anywhere.
- (getdtablesize): Use new method for getting the current dtable size.
- * tty.cc: Remove use count in favor of a method which checks tty
- availability via an event. Some code cleanup.
- (tty::inuse): New function for determining if a tty is
- in use by any process.
- (tty_list::terminate): Use new method for determining if a tty is in
- use. Should avoid hangs waiting for non-existent processes to
- free up a tty.
- (tty::common_init): Common initialization for tty/pty master.
- (fhandler_tty_master::init): New function.
- (do_output): Use new method for determining if a tty is in use.
- (fhandler_pty_master::open): Use comon initialization code.
- (fhandler_pty_master::ptsname): static buffer is ok now.
- * tty.h: Reflect inuse changes and tty.cc cleanup.
- * winsup.h: Include debug.h for use when -DDEBUGGING. Remove
- stuff previously here which was conditionally compiled with -DDEBUGGING.
- (hinfo_vec): Rename to hinfo. Maintain argv style list of pointers
- to open fds. Add methods to deal with above changes.
- (pinfo): Removals due to above changes.
- (shared_info): Rename t to tty.
- Add common defines to extern "C" section.
-
-Wed Sep 9 22:24:50 1998 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (path_prefix_p_): Rewrite to avoid false match
- against root when remote path or \\x style disk device.
- * include/sys/strace.h: Implement new macro for use by
- malloc_printf which does not default to "on" if STRACE=1.
- This avoids massive strace logs.
-
-Tue Sep 8 11:31:42 1998 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (dll_crt0_1): Remove ill-advised ifdef NEEDOEM.
-
-Thu Sep 3 17:54:18 1998 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Speed up dll links.
- * path.cc (chdir): Fix previous change.
-
-Mon Aug 31 12:23:33 1998 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (chdir): Protect free from potential signal race.
-
-Fri Aug 28 15:59:27 1998 Geoffrey Noer <noer@cygnus.com>
-
- * dlfcn.h: delete, move it
- * include/dlfcn.h: here
-
-Thu Aug 27 14:20:38 1998 Christopher Faylor <cgf@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * path.cc (path_conv::path_conv): remove trailing backslash from
- full win32 name, otherwise the last component of the path isn't
- checked for symlink.
-
-Wed Aug 26 14:15:22 1998 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler.h (fhandler_base): Make set_name() public and implement
- clear_name() to accommodate dup2.
- * hinfo.cc (dup2): Previous change exposed problem with dup2.
- Same unix_path_name_ ptr was being used in two separate fds.
- Fix this.
-
-Wed Aug 26 12:10:27 1998 Christopher Faylor <cgf@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * malloc.cc: Use malloc_printf throughout.
- * path.cc (getcwd_inner): Allocate buffer with realloc to
- avoid a memory leak.
- * syscalls.cc (_close): delete unix_path_name_ explicitly since
- destructor is never called.
- * include/sys/strace.h: Add strace_malloc stuff.
-
-Mon Aug 24 15:45:59 1998 Geoffrey Noer <noer@cygnus.com>
-
- * include/sys/ioctl.h: variable names in protos should start
- with two leading underscores.
- * include/sys/mman.h: ditto.
- * include/sys/mount.h: ditto.
- * include/sys/resource.h: ditto.
- * include/sys/smallprint.h: ditto.
- * include/sys/socket.h: ditto.
- * include/sys/strace.h: ditto.
- * include/sys/vfs.h: ditto.
- * include/sys/wait.h: ditto.
- * include/mntent.h: ditto.
-
-Tue Aug 18 17:00:20 1998 Geoffrey Noer <noer@cygnus.com>
-
- patch from Trevor Yann (TYann@vet.com.au):
- * uname.cc (uname): report processor type for win98
-
-Tue Aug 18 16:09:13 1998 Christopher Faylor <cgf@cygnus.com>
-
- * fork.cc (cygwin_fork_helper1): Start initial fd search
- to zero forked processes so that a close(0)/dup(fd) will work.
-
-Mon Aug 17 16:58:09 1998 Christopher Faylor <cgf@cygnus.com>
-
- * winsup.h (hinfo): Remember initial fd to start searching
- for new fds. This avoid assigning std/in/out/err to
- files opened early in initialization.
- (hinfo_vec::find_unused_handle): New default way to search
- for a new handle. Avoids using std/in/out/err until the
- proper time in the initialization.
- * fhandler.cc (fhandler_make_pipe): Use default method for
- finding unused handle.
- * net.cc: Ditto throughout.
- * pipe.cc (dup): Ditto.
- * syscalls.cc (_open): Ditto.
- * hinfo.cc (hinfo_vec::init_std_file): Set initial fd for open
- search to include std/in/out/err.
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * spawn.cc (perhaps_suffix): Use translated win32 path when
- determining if a .exe extension should be added or suffer adding
- a .exe extension twice.
-
-Mon Aug 10 15:08:49 1998 Geoffrey Noer <noer@cygnus.com>
-
- * include/cygwin32/version.h: up minor version number
-
-Mon Aug 10 07:04:13 1998 DJ Delorie <dj@cygnus.com>
-
- * delqueue.cc: rewritten for speed. Don't check *every* entry in
- the list if we know the list is empty, plus check for duplicates.
- * delqueue.h: ditto.
-
-Sat Aug 8 14:03:52 1998 Eric Bachalo <ebachalo@cygnus.com>
-
- * spawn.cc (perhaps_suffix): If report_failure_p is non-zero this
- function will search for (PROG is the pathname to the executable
- file) PROG.exe, PROG, PROG.com, PROG.bat, and PROG.cmd and return
- either the full path name if found or NULL if not.
- (spawn_guts): If the file name of the executable end in either
- .exe, .com, .bat, or .cmd we assume that it is not a script file
- and therefore do not open the file to determine if it is.
-
-Thu Aug 6 22:25:38 1998 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (path_conv): If a path component is missing, short-
- circuit the symlink check. Bug fix for case where path ends
- in a slash.
- (path_conv::path_conv): Make sure that a file is not
- a symlink when returning immediately. Avoid checking for
- symlinks on network shares. Check for existence of file prior
- to taking it apart for symlink checking (this needs more work).
-
-Sun Aug 2 19:17:59 1998 Christopher Faylor <cgf@cygnus.com>
-
- * select.cc (cleanup_pipe_thread): Cleanup thread handle or suffer
- handle leak.
- (cleanup_socket_thread): Ditto.
- * sigproc.cc (proc_subproc): Make wait thread manual reset to
- solve problem with nested waits not waiting correctly.
- * fhandler_tty (fhandler_tty_slave::open): Don't create the output
- mutex, just open it. If it can't be opened, its an error.
-
-Wed Jul 29 12:08:19 1998 Eric Bachalo <ebachalo@loony.cygnus.com>
-
- * include/Windows32/Defines.h: Added Virtual-Key Code defines
- for the Win95 keys - VK_LWIN, VK_RWIN, and VK_APPS.
-
-Tue Jul 21 14:47:59 1998 DJ Delorie <dj@cygnus.com>
-
- * path.cc (path_prefix_p): optimize calls by comparing first
- characters inline.
- (path_conv): optimize by not checking both foo and foo/ for
- symbolic links.
-
-Tue Jul 21 14:39:03 1998 Christopher Faylor <cgf@cygnus.com>
-
- * pinfo.cc (pinfo_init): Set myself->sid to 1 so that
- a program started up outside of cygwin will not trump
- other opens of ttys. Fixes problem with pgid change below.
-
-Tue Jul 21 12:59:21 1998 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (chdir): Force chdir to disk device to go to the root
- directory.
-
-Tue Jul 21 09:32:23 1998 Christopher Faylor <cgf@cygnus.com>
-
- * pinfo.cc (pinfo_init): 0 is a very bad value for a default pgid.
-
-Fri Jul 16 15:09:50 1998 Stan Cox <scox@cygnus.com>
-
- * (gcrt0.c, gmon.c, profil.c, mcount.c, gmon.h, profil.h,
- config/i386/profile.h): New files for gprof cygwin support.
- Some code contributed by Tim Newsham for Secure Networks, Inc.
- * Makefile.in (LIBGMON_A, GMON_START, GMON_OFILES): New for gprof.
-
-Mon Jul 13 19:29:00 1998 Eric Bachalo <ebachalo@loony.cygnus.com>
-
- * dcrt0.cc (insert_files): Now both -@file and @file work as
- command line file insertion options.
- * fhandler_serial.cc (fhandler_serial::open): Enabled RTS Control
- Line by default to make full handshaking cables work for the
- D10V board. (CDB.fRtsControl)
- (fhandler_serial::tcsetattr): same as above
-
-Wed Jul 8 15:53:35 1998 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (dll_crt0_1): Avoid redundant strace_printf.
-
-Wed Jul 8 15:05:10 1998 DJ Delorie <dj@cygnus.com>
-
- * fhandler.cc (fhandler_base::lseek): Note lseek so that next
- write() can check for the Win95 "gap" bug.
- (fhandler_base::write): If Win95 and lseek past eof
- followed by write, use WriteFile to force the "gap" to be filled
- with zeros rather than left to the "undefined" data Win32 specifies.
- (fhandler_base::fhandler_base): initialize check_win95_lseek_bug_.
- * fhandler.h (class fhandler_base): Add check_win95_lseek_bug_
- for bug: when seek past EOF and write, win95 fills with random
- data (security hole).
-
-Thu Jul 2 10:45:15 1998 Christopher Faylor <cgf@cygnus.com>
-
- * environ.cc (winenv): Be more paranoid when restoring special
- win32 environment variables beginning with '='.
-
-Thu Jul 2 09:19:32 1998 Christopher Faylor <cgf@cygnus.com>
-
- * environ.cc: Previous change was not rigorous enough.
- Track environment variables to convert in a structure which
- records the correct function for converting the environment
- variable from/to POSIX format.
- (isspecial): New function.
- (parse_options): Use template to initialize parse array.
- (posify): Use new conversion function.
- (winenv): Ditto. Also restore special win32 environment variables
- beginning with '='.
- * path.cc (conv_path_list): Source argument should be const.
- (win32_to_posix_path_list): Ditto.
- (posix_to_win32_path_list): Ditto.
- * path.h: Reflect changes to path.cc.
-
-Tue Jun 30 14:00:32 1998 Christopher Faylor <cgf@cygnus.com>
-
- * environ.cc (winenv): Avoid converting environment variables to
- windows style if they begin with something like a 'C:'.
-
-Sun Jun 28 20:59:16 1998 Christopher Faylor <cgf@cygnus.com>
-
- * include/Windows32/Structures.h (MINMAXINFO): Add a missing
- *LP...
-
-Thu Jun 25 10:45:38 1998 Christopher Faylor <cgf@cygnus.com>
-
- * signal.cc (sigpending): Stop from always reporting pending signals
- when no signals are actually pending.
-
-Tue Jun 23 15:38:45 1998 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Add a new target.
- * cygwin.din: Add cygwin32_internal interface.
- * dcrt0.cc (dll_crt0_1): Don't call main if no main set. Allows
- initialization from a .dll.
- * utils/ps.cc: Use new internal/external interface to cygwin to
- provide an unchanging interface to some cygwin internals.
- * external.h: Preliminary stab at an interface to cygwin32 for
- getting at the "naughty bits".
- * external.cc: External interfaces to some cygwin internal stuff.
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * exceptions.cc (sig_handle): When abnormally terminating,
- close_all_files in signal thread context to prevent socket hangs.
-
-Thu Jun 18 15:17:06 1998 Christopher Faylor <cgf@cygnus.com>
-
- * pinfo.cc (pinfo_list::allocate_pid): Wrap pids at SHRT_MAX
- or ash complains.
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * window.cc (WndProc): Always kill timer before starting up
- a new one or eventually suffer a timer proliferation.
-
-Mon Jun 15 09:40:30 1998 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc: Cosmetic change.
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * syscalls.cc (system): Ignore SIGINT, SIGQUIT and SIGCHLD while
- in a system() call.
-
-Thu Jun 11 18:37:02 1998 Geoffrey Noer <noer@cygnus.com>
-
- * include/sys/syslog.h: add missing LOG_LOCALn bits
-
-Tue Jun 9 22:29:26 1998 Christopher Faylor <cgf@cygnus.com>
-
- * dll_init.cc (DllNameIterator::operator const char* ()): Add
- a missing \n to a *_printf.
- * fhandler_tty.cc (fhandler_tty_slave::dup): Ditto.
- (fhandler_tty_slave::ioctl): Ditto.
- * errno.cc (errmap): Add an unrepresented windows error.
- Simplify table.
-
-Tue Jun 9 17:21:44 1998 Christopher Faylor <cgf@cygnus.com>
-
- * errno.cc (errmap): Make sure that errmap array is
- terminated with a NULL or suffer a SIGSEGV.
-
-Tue Jun 9 10:30:02 1998 Christopher Faylor <cgf@cygnus.com>
-
- Change `sprintf' to `__small_sprintf' throughout cygwin.
- * cygwin.din: Don't export exception handler.
- * exceptions.cc (__cygwin32_exception_handler): Rename to
- handle_exceptions. Make static. Redo core file generation
- slightly so that __small_sprintf can be used.
- (call_handler): Remove use of `rethere' in asm code. Don't
- probe stack as this is potentially dangerous unless done
- meticulously.
- * select.cc (select): Redo to create thread whenever needed
- for pipe/socket. Thread termination denotes fd readiness.
-
-Mon Jun 8 14:31:11 1998 Christopher Faylor <cgf@cygnus.com>
-
- * hinfo.cc (set_std_handle): New function to set windows
- "standard" handles from cygwin handles.
- (hinfo_vec::dup2): Set windows standard handle if appropriate.
- * syscalls.cc (_open): Set windows standard handle if appropriate.
-
-Sun Jun 7 16:34:00 1998 Christopher Faylor <cgf@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * fhandler_console.cc (fhandler_console::scroll_screen): Add a
- workaround for Win95 ScrollConsoleScreenBuffer bug which allowed
- scrolling to work correctly in both directions.
- (fhandler_console::char_command): Simulate underscore with cyan
- instead of magenta like on a real linux console.
-
-Sat Jun 6 00:01:18 1998 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc: Remove obsolete PPC and OLDWAY defines.
- * exceptions.cc: Remove obsolete PPC defines.
-
-Fri Jun 5 22:18:01 1998 Christopher Faylor <cgf@cygnus.com>
-
- * utils/Makefile.in: install should build products if necessary.
-
-Fri Jun 5 17:47:11 1998 Geoffrey Noer <noer@cygnus.com>
-
- * errno.cc (seterrno): shouldn't & against 0xff since there
- are error codes above 255.
-
-Fri Jun 5 14:35:36 1998 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (ctrl_c_handler): Ignore CTRL_LOGOFF_EVENT or
- everybody gets signalled when a user logs off. Allow program
- to clean up when receiving a CTRL_CLOSE_EVENT or CTRL_SHUTDOWN_EVENT.
- * spawn.cc (_spawnve): Delete hmap.vec from created child since
- it just gets overwritten in the child anyway.
- * pinfo.cc (lpfu): u -> user_data.
-
-Thu Jun 4 22:45:12 1998 Geoffrey Noer <noer@cygnus.com>
-
- * mmap.cc (mprotect): 3rd arg to VirtualProtect call should
- be new_prot, not prot. Also, fix check for PROT_NONE (==,
- not &).
-
-Wed Jun 3 16:37:43 1998 Geoffrey Noer <noer@cygnus.com>
-
- * exceptions.cc: Fix typo in comment
- (ctrl_c_handler): Add comments, return FALSE on CTRL_CLOSE_EVENT,
- CTRL_LOGOFF_EVENT, and CTRL_SHUTDOWN_EVENT events. Otherwise,
- we handle the console event ourselves, send a SIGINT, and return
- TRUE.
-
-Wed Jun 3 14:36:08 1998 Geoffrey Noer <noer@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * path.cc (conv_to_win32_path, conv_to_full_win32_path): resolve
- symlinks before converting.
-
-Wed Jun 3 02:11:23 1998 Geoffrey Noer <noer@cygnus.com>
-
- * exceptions.cc (ctrl_c_handler): return zero when a
- CTRL_LOGOFF_EVENT occurs.
-
-Wed Jun 3 01:01:17 1998 Geoffrey Noer <noer@cygnus.com>
-
- Reorganize fhandler-related file layout.
- * Makefile.in: Remove console.o, add fhandler_console.o. Add
- fhandler_serial.o. Remove tty.o, add fhandler_tty.o.
- * fhandler_console.cc: Was console.cc.
- * console.cc: Delete.
- * fhandler_serial.cc: Was code in fhandler.cc.
- * fhandler.cc: Delete fhandler_serial routines.
- * fhandler.h: Fix comments describing fhandler file layout.
- * fhandler_tty.cc: Was code in tty.cc.
- * tty.h: Delete.
- * fhandler_tty.h: Was tty.h.
- * tty.cc: Delete code moved to fhandler_tty.cc.
- * winsup.h: Include fhandler_tty.h instead of tty.h.
-
-Tue Jun 2 23:34:42 1998 Geoffrey Noer <noer@cygnus.com>
-
- Don't need processor-specific sysdef directories:
- * sysdef/powerpc: remove all files
- * sysdef/i386: move all files to top of sysdef directory
- * configure.in: stop setting processor-specific sysdef variable
- * configure: regenerate
- * Makefile.in: build .a files from top-level sysdef files.
-
-Tue Jun 2 16:52:18 1998 Geoffrey Noer <noer@cygnus.com>
-
- patch from lhall@rfk.com (Larry Hall):
- * console.cc (fhandler_console::fhandler_console): call
- fillin_info() to check if console attributes have already been
- set. If so, set the default foreground color to be the default
- for the console, otherwise set it to white.
- (fhandler_console::char_command): use the default color to set fg,
- bg, and bold for all cases.
-
-Mon Jun 1 14:05:01 1998 Christopher Faylor <cgf@cygnus.com>
-
- * dir.cc (writable_directory): Avoid a malloc.
- (opendir): Convert to fully qualified path spec. Use inode from
- stat as hash instead of recalculating.
- (readdir): Try hard to generate the same inode for filenames
- as inodes returned from stat(). Handle '.' and '..' inodes
- differently than normal files. Note that '..' will still fail
- in certain pathological conditions.
- * fhandler.cc (fstat): Preserve errno around path conversion.
- * path.cc (path_conf::path_conv): Add an extra argument signifying
- whether caller wants a fully qualified Windows spec.
- (get_current_directory_name): New function. Retrieves current
- directory name into internal buffer.
- (getcwd_inner): Reorganize. Use get_current_directory_name()
- to retrieve a (possibly cached) directory name.
- (hash_path_name): Move function here from syscalls.cc. Rewrite to
- deal (simplistically) with non-absolute path specs. Use
- get_current_directory_name to absolutize path.
- * path.h: Reflect additional argument for path_conv.
- * select.cc (cygwin32_select): Remove newline from select_printf().
- * syscalls.cc (hash_path_name): Move to path.cc.
- (stat_worker): Always use full path spec so that inodes are
- calculated correctly.
- * uinfo.cc (getlogin): Make extern "C".
- * include/sys/resource.h: Put extern "C" around this file.
-
-Mon Jun 1 13:16:03 1998 Christopher Faylor <cgf@cygnus.com>
-
- * console.cc: Comment out small_printfs which issue errors
- on things like invalid escape sequences. This is very much
- unlike a normal terminal, or even like linux which console.cc
- purports to emulate.
- (console_read): Renamed from FakeReadConsole. Streamline
- slightly.
- (fhandler_console::read): Ditto.
-
-Fri May 29 22:41:18 1998 Geoffrey Noer <noer@cygnus.com>
-
- * hinfo.cc: Include unistd.h, not fcntl.h.
-
-Fri May 29 21:38:10 1998 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (mount_info::binary_win32_path_p): Don't allow
- the root mount to replace a //drive or //host specification.
-
-Fri May 29 08:20:28 1998 Geoffrey Noer <noer@cygnus.com>
-
- * winsup.h: Remove exports section in favor of external
- include files. Fix some comments.
- * {console.cc, fcntl.cc, pipe.cc}: Include unistd.h.
- * dcrt0.cc (__main): Make extern "C".
- * strace.cc: Include time.h.
- * wait.cc (_wait): Make extern "C".
- * version.h: Bump minor version to 3 in honor of /dev/windows
- support.
-
-Fri May 29 03:11:28 1998 Geoffrey Noer <noer@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * Makefile.in: Add fhandler_windows.o target
- * fhandler.h: Include <sys/ioctl.h>. fhandler_windows: new
- fhandler class that handles access to Windows message queue.
- (fhandler_base::is_windows): new virtual member function
- * fhandler_windows.cc: New file, fhandler_windows class
- implementation.
- * hinfo.cc (hinfo_vec::build_fhandler): build fhandler_windows
- class for "/dev/windows". Include <sys/ioctl.h>.
- * select.cc: New fd_windows_map class
- (fd_windows_map::convert_to_unix_fdset): New, check for Windows
- messages in a queue.
- (cygwin32_select): check for windows fd is passed to select call,
- increase size of harray by one to support windows pseudo-handle,
- do MsgWaitForMultipleObjects if windows fd passed to select call.
-
-Thu May 28 18:22:24 1998 Ian Lance Taylor <ian@cygnus.com>
-
- * utils/cygpath.cc: New file.
- * utils/Makefile.in (PROGS): Add cygpath$(EXEEXT).
- (cygpath$(EXEEXT)): Ne target.
-
- * include/sys/cygwin.h: Declare more path conversion functions.
-
-Thu May 28 15:56:26 1998 Geoffrey Noer <noer@cygnus.com>
-
- * include/sys/ioctl.h: need to include <sys/cdefs.h>
- * syscalls.h: remove ioctl proto
-
-Wed May 27 01:34:06 1998 Geoffrey Noer <noer@cygnus.com>
-
- * cygwin.din: add sethostent/endhostent exports
- * net.cc (sethostent, endhostent): new stubs
-
-Fri May 22 17:31:50 1998 Geoffrey Noer <noer@cygnus.com>
-
- * include/cygwin32/in.h: correct typo in IPPORT_WHOIS define
-
-Fri May 22 17:00:48 1998 Geoffrey Noer <noer@cygnus.com>
-
- * include/sys/ioctl.h: add ioctl proto
-
-Wed May 20 18:52:31 1998 Geoffrey Noer <noer@cygnus.com>
-
- * include/sys/param.h: delete, file overlaps with newlib's.
- Move it to newlib/libc/sys/cygwin32/sys where such files
- are supposed to go.
-
-Wed May 20 18:20:35 1998 Geoffrey Noer <noer@cygnus.com>
-
- * select.cc (auto_del_fd_set_map::auto_del_fd_set_map): correct
- C++ problem -- can't use parens in call to new.
-
-Wed May 20 17:03:25 1998 Geoffrey Noer <noer@cygnus.com>
-
- based on patch from newsham@lava.net (Tim Newsham):
- * select.cc: FIXMEs added/adjusted
- (select_sleep): new static select helper function
- (cleanup_sockthread): ditto
- (cleanup_pipethread): ditto
- (cygwin32_select): remove degenerate goto in favor of calling
- select_sleep, call cleanup_sockthread and cleanup_pipethread
- instead of previously duplicated code.
-
-Wed May 20 02:21:37 1998 Geoffrey Noer <noer@cygnus.com>
-
- patch from Christopher Faylor <cgf@cygnus.com>
- * fhandler.cc (fhandler_serial::raw_read): When
- vmin_ == 0, vtime_ > 0, don't force only one char at a time
- to be read.
- (fhandler_serial::tcsetattr): set to.ReadIntervalTimeout
- and to.ReadTotalTimeoutMultiplier appropriately so reads
- will time out properly when vmin_ == 0, vtime_ > 0.
-
-Tue May 19 09:05:46 1998 Christopher Faylor <cgf@cygnus.com>
-
- * init.cc (set_dllname): Use consistent "cygwin32" name for dll
- if the name of the dll is actually cygwin. This will allow
- better interoperability between dlls which have been renamed,
- i.e., cygwindevo.dll -> cygwin98r1.dll.
-
-Mon May 18 22:39:35 1998 Christopher Faylor <cgf@cygnus.com>
-
- * winsup.h: Remove sig* undefs since this is now done in newlib.
- Define SIGTOMASK define for use by signal mask operations.
- * exceptions.cc (__cygwin32_exception_handler): Use SIGTOMASK.
- (sig_handle): Ditto
- * signal.cc (sigpending): Ditto.
- (sigaddset): Use SIGTOMASK. Disallow signal 0.
- (sigdelset): Ditto.
- (sigismember): Ditto.
- * strace.cc (strace_printf): It is possible for strace_mutex to
- be an invalid handle. Open the mutex if so. Call ReleaseMutex
- until exhausted since a signal may have interrupted an strace_printf.
- (strace_dump): Call ReleaseMutex until exhausted.
- * tty.cc (do_output): Remove strace printf to avoid filling up strace
- output.
- (fhandler_tty_slave::read): Use SIGTOMASK.
-
-Mon May 18 09:11:38 1998 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (dll_crt0_1): Clear errno before calling main.
-
-Thu May 14 00:37:01 1998 Geoffrey Noer <noer@cygnus.com>
-
- * dcrt0.cc: add comments, reformatting
-
-Wed May 13 17:47:23 1998 Geoffrey Noer <noer@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * times.cc (to_time_t): prevent stat from returning incorrect
- file modification time (one second less) on fat partitions due
- to round-up error.
-
-Wed May 13 16:03:07 1998 Geoffrey Noer <noer@cygnus.com>
-
- * select.cc: add comments, FIXMEs, respace, delete old
- sockets-only case that was previously commented out.
- (cygwin32_select): in case where handles and sockets are
- set, don't check that always_ready_used is zero (that case is
- covered before).
- * syscalls.cc: delete unused file_queue struct.
-
-Tue May 12 18:36:25 1998 Geoffrey Noer <noer@cygnus.com>
-
- * syscalls.cc (get_os_type): add FIXME
-
-Tue May 5 14:02:12 1998 Christopher Faylor <cgf@cygnus.com>
-
- Throughout Cygwin replace use of "sa" SECURITY_ATTRIBUTE variables
- with appropriate global variables.
- * shared.cc (shared_init): Initialize global security attribute
- variables for use in various places around cygwin.
- * fork.cc (fork_init): Remove. Functionality replaced by above.
- * dcrt0.cc (dll_crt0_1): Remove obsolete fork_init() call.
-
-Sat May 2 17:40:51 1998 Christopher Faylor <cgf@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * tty.cc (create_tty_master): Fill in ut_host utmp field with
- local host name instead of "local" to avoid "who" command timeouts.
-
-Fri May 1 22:38:20 1998 Christopher Faylor <cgf@cygnus.com>
-
- * environ.cc: Add a global to control com port reset behavior.
- (parse_options): Recognize "reset_com" as a CYGWIN32 option.
- * fhandler.cc (fhandler_serial::raw_read): Handle vmin and vtime
- more like UNIX.
- (fhandler_serial::open): Revive code to reset com port on open.
- Only reset the port if reset_com global is not set and if this
- function is being called explicitly by open.
- (fhandler_serial::tcsetattr): Make CRTSCTS flow control more
- like UNIX -- it should turn on hardware handshaking in both
- directions. Handle vmin and vtime in a manner more consistent
- with UNIX.
- (fhandler_serial::tcgetattr): Reflect CRTSCTS changes above when
- reporting this state.
- * include/sys/termios.h: Move CRTSCTS and CRTSXOFF (sic) into
- 16 bits or they will never be capable of being set.
-
-Thu Apr 30 15:05:45 1998 Christopher Faylor <cgf@cygnus.com>
-
- * console.cc (fhandler_console::init): If resetting stdin,
- make sure to reset the ConsoleCtrlHandler.
- * exceptions.cc (set_console_handler): New function broken out
- of init_exceptions(). Sets the function responsible for handling
- CTRL-C.
- (init_exceptions): Snipped out set_console_handler.
-
-Thu Apr 30 14:11:30 1998 Christopher Faylor <cgf@cygnus.com>
-
- * include/sys/cygwin.h: Remove cygnus-specific declaration.
- * winsup.h: Move cygnus-specific cygwin32_attach_handle_to_fd
- declaration here. This function may eventually be replaced by
- an osf_* function.
-
-Tue Apr 28 17:07:46 1998 Geoffrey Noer <noer@cygnus.com>
-
- * passwd.cc (parse, getpass): remove unneeded uses of NO_COPY
- * grp.cc (getgrgid, getgrnam): ditto
-
-Tue Apr 28 16:18:03 1998 Geoffrey Noer <noer@cygnus.com>
-
- * version.h: bump minor version to 2
- * errno.cc: add FIXME
-
-Wed Apr 22 15:43:56 1998 Geoffrey Noer <noer@cygnus.com>
-
- * syscalls.cc (cygname): delete
- * shared.cc (shared_name): new, was cygname
- * strace.cc, exceptions.cc, sigproc.cc, shared.cc: fix
- cygname references in light of above
-
-Wed Apr 22 14:12:09 1998 Christopher Faylor <cgf@cygnus.com>
-
- * select.cc (fd_set_map::remove_pair_by_handle): minor optimization
- * strace.cc (strace_printf): change format for consistency
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * dcrt0.cc (dll_crt0): Call global constructors explicitly
- * tty.cc (create_tty_master): Remove code which attempted to
- invoke tty constructor
-
-Tue Apr 21 16:18:27 1998 Christopher Faylor <cgf@cygnus.com>
-
- * environ.cc (ucenv): inline
- (posify): Ditto
- (environ_init): remove obsolete function use
- * path.cc (symlink_check_one): Set errno here where appropriate.
- (readlink): Rely on errno set by symlink_check_one rather than
- defaulting to EINVAL. Should fix problems with RCS.
-
-Tue Apr 21 15:36:41 1998 Christopher Faylor <cgf@cygnus.com>
-
- * Implement a NOSTRACE preprocessor define to allow building
- Cygwin32 without any STRACE code.
- * configure.in: Add entries for architecture specific programs
- to allow easier cross-compile builds
- * configure: Ditto
- * Makefile.in: Ditto
- * console.cc (fhandler_console::char_command): Fix two problems
- with cursor position report: 1) it reported position relative
- to beginning of buffer rather than beginning of screen, 2) it
- reported y, x in reversed order
- * dcrt0.cc: Remove NO_COPY from variables that don't need it.
- Remove variables obsoleted by NO_COPY.
- (dll_crt0_1): strace settings are now inherited. Don't try
- to initialize strace early. Remove initialization of variables
- which are now handled automatically by NO_COPY. Set error mode
- for Cygwin32 to fail on critical errors rather than popping up
- a dialog box.
- * spawn.cc (spawn_guts): Always use default error mode when
- spawning a new process. Move error message to more generally
- useful location. Terminate signal handling in a cygwin parent
- process or two processes will be handling signals.
- (_spawnve): Inherit strace stuff
- * exceptions.cc (events_init): Provide more information on
- "Catastrophic failure". Change error message wording slightly.
- * fork.cc: Remove obsolete structure
- (cygwin_fork_helper1): Remove use of obsolete structure. Inherit
- strace settings in child processes.
- * sigproc.cc (sigproc_init): Set wait_sig priority immediately
- after thread creation.
- * smallprint.c: Remove unneeded include
- * strace.cc: Reorganize to handle NOSTRACE
- (strace_open): Use strace entries in pinfo structure which are
- now inherited
- (strace_dump): ditto
- (strace_init): preprocessor define STRACE_HHMMSS causes strace
- output to use alternate log file format.
- (strace_printf): ditto
- * syscalls.cc (access): Remove SetErrorMode in favor of global
- cygwin32 setting in dll_crt0_1.
- * fhandler.cc: Handle NOSTRACE
- * tty.cc: Ditto
- * window.cc: Ditto
- * include/sys/strace.h: Ditto
- * winsup.h: Move strace_file handle from per_process to pinfo so
- that it can be inherited. Remove obsolete pinfo entry.
-
-Tue Apr 21 14:30:52 1998 Christopher Faylor <cgf@cygnus.com>
-
- * hinfo.cc (cygwin32_attach_handle_to_fd): New function
- * include/sys/cygwin.h: Ditto.
- * cygwin.din: Export new cygwin-specific function
-
-Tue Apr 21 02:32:08 1998 Geoffrey Noer <noer@cygnus.com>
-
- * syscalls.cc: comment out file_queue struct that doesn't
- seem to be used for anything anymore. Don't need to include
- stdarg.h or sys/socket.h. Include utmp.h. Minor respacing.
- Move all functions from misc.cc here.
- (_read): change strace debug printf function name to _read
- (logout): rename success to res
- * misc.cc: delete file
- * Makefile.in: adjust for above change
-
-Tue Apr 21 01:45:05 1998 Geoffrey Noer <noer@cygnus.com>
-
- * dir.cc: new file for directory-related functions, was
- dirsearch.cc.
- (mkdir, rmdir, writable_directory): move here from syscalls.cc,
- writable_directory no longer static
- * dirsearch.cc: delete file
- * winsup.h: add proto for writable_directory.
- * errno.cc: new file for errno-related functions, move errmap
- struct here from syscalls.cc
- (seterrno): move from syscalls.cc
- (strerror): move from strerror.cc
- * strerror.cc: delete file
- * syscalls.cc: delete everything moved to any of the above files
- * Makefile.in: adjustments for above
-
-Thu Apr 17 16:43:23 1998 Geoffrey Noer <noer@cygnus.com>
-
- * termios.cc: add comments, add extern "C" in front of exported
- calls, move debugging local functions to end of file
- * winsup.h: remove fork_terminate proto for function that is no
- longer with us. Add strccpy proto.
- * spawn.cc (_spawnve): make static
- (strccpy): remove in favor of identical function in exec.cc
- * exec.cc (strccpy): no longer static
-
- patch from newsham@lava.net (Tim Newsham):
- * select.cc (cygwin32_select): fix off by one error, stop
- using memcpy to copy memory over itself
-
-Thu Apr 16 16:23:00 1998 Geoffrey Noer <noer@cygnus.com>
-
- * net.cc: respace, put all fhandler_socket functions together
- (getsockopt): fix case statement bug resulting in faulty strace
- output
- (setsockopt): ditto
- * shared.cc: throughout, rename global h to cygwin_shared_h
- * strerror.cc: make error global a local variable
- * fhandler.h: add comments, add virtual function always_read_ready
- to fhandler_serial which should return zero to allow non-blocking
- serial I/O.
- * Makefile.in: select.cc should depend on select.h
-
-Wed Apr 15 16:14:01 1998 Geoffrey Noer <noer@cygnus.com>
-
- * select.h: new file, containing macros used by select.cc.
- * select.cc: remove them from here, include select.h
-
-Wed Apr 15 15:23:55 1998 Geoffrey Noer <noer@cygnus.com>
-
- * ntea.cc (NTReadEARaw): mark as static, don't check allow_ntea
- since this is only accessed by functions that have already checked
- it.
-
-Tue Apr 14 14:07:54 1998 Geoffrey Noer <noer@cygnus.com>
-
- * cygwin.din: export truncate call
-
-Mon Apr 13 23:15:13 1998 Geoffrey Noer <noer@cygnus.com>
-
- Throughout Cygwin32, rename *u for per_process data *user_data.
- Likewise, rename *s for shared memory data *cygwin_shared.
- Respace where necessary.
- * registry.cc: minor respace
- * registry.h: ditto
- * net.cc: ditto
- * fhandler.cc (fhandler_base::read): don't redeclare int len
- * syslog.cc: add FIXME, reformatting, remove extern "C" around
- whole file, add before exported functions
- (syslog): rename second cp char pointer cp2
- (setlogmask): comment out unused function
-
-Mon Apr 13 17:55:43 1998 Geoffrey Noer <noer@cygnus.com>
-
- * environ.cc (parse_options): add "ntea" setting to CYGWIN32
- env variable. Setting determines whether NTEA is used or not.
- * ntea.cc: Add allow_ntea global which is inited to FALSE.
- Now instead of immediately returning FALSE, make all
- functions check allow_ntea variable and use or not use NTEA
- based on its value.
- * ps.cc (main): widen Win32_pid field by one to better handle
- Win 95 pids.
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * shared.cc (shared_info::initialize): increase default
- heap_chunk_size to 128 mb to get around the problem that
- Cygwin32 still can't cope with a split heap properly.
-
-Wed Apr 8 18:04:07 1998 Geoffrey Noer <noer@cygnus.com>
-
- * net.cc (cygwin32_bind, cygwin32_getsockname, cygwin32_listen,
- cygwin32_shutdown): if should check sock, not s.
-
-Wed Apr 8 15:00:46 1998 Geoffrey Noer <noer@cygnus.com>
-
- Eliminate warnings revealed by -Wshadow -Wall:
- * console.cc (FakeReadFile): fix aggregate with partly bracketed
- initializer (add missing brackets).
- * tty.cc (fhandler_tty_slave::close): remove unused variable tty
- (fhandler_tty_slave::dup): ditto
- (fhandler_tty_slave::send_ioctl_request): ditto
-
-Wed Apr 8 03:04:11 1998 Geoffrey Noer <noer@cygnus.com>
-
- Eliminate warnings revealed by -Wshadow -Wall:
- * console.cc (FakeReadFile): change variable name index to
- modifier_index.
- (fhandler_console::read): remove second definition of flags
- * dcrt0.cc (build_argv): rename s to start, e to end
- (insert_files): reformat, add parens around assign used as truth
- value, make i a DWORD, remove dup def of i.
- * dlfcn.cc (set_dl_error): rename s to str
- (checkAccess): rename to check_access
- (checkPathAccess): rename to check_path_access
- (getFullPathOfDll): rename to get_full_path_of_dll, don't
- redeclare len
- * dll_init.cc (DllList::detachDll): rename index to dll_index
- * fork.cc (cygwin_fork_helper1): rename index to dll_index,
- reformat slightly, rename res in dll load section to loadres,
- don't redeclare rc two additional times
- (dump_jmp_buf): rename s to sbuf
- * grp.cc (initgroups): rename group arg to grp
- * hinfo.cc (digits): rename s to str
- (hinfo_vec::build_fhandler): rename first buf variable to
- buf_info, the second to buff.
- (hinfo_vec::linearize_fd_array): cast sizeof return to int,
- declare i in for loop
- (hinfo_vec::de_linearize_fd_array): declare i in for loop
- * misc.cc (nice): rename pri to priority, index to curr
- (cygname): rename s to str
- (login): rename tty to currtty
- (logout) put missing parens around arg to sizeof calls
- * net.cc (DuplicateSocket): rename function to duplicate_socket,
- rename s arg to sock
- (fhandler_socket::fhandler_socket): rename s arg to sock
- (socketpair): rename sin to sock_in
- (cygwin32_rexec): rename passwd arg to password
- * passwd.cc (parse): rename stat array to tmpbuf
- * resource.cc (fill_rusage): rename creation to creation_time,
- exit to exit_time, kernel to kernel_time, user to user_time
- (getrusage): rename rusage arg to rusage_in
- * sigproc.cc (proc_terminate): move i declaration outside of
- loop, get rid of extra declaration
- (getsem): rename s to str
- (proc_strace): declare i at top of function, remove extra two
- declarations of it later
- * smallprint.c: include ctype.h for isalnum proto
- (__small_vsprintf): put parens around assign used as truth value
- * spawn.cc (spawn_guts): rename both s variables to str, remove
- redeclarations of i
- * strace.cc (mark): rename s arg to str
- * syscalls.cc (chown): remove unused vars group, passwd
- (access): rename s to st
- (ctermid): rename s to str
- * termios.cc (cfsetospeed, cfsetispeed): rename s to speed
- * times.cc (times): rename creation to creation_time,
- exit to exit_time, kernel to kernel_time, user to user_time
- (time_t_to_filetime, timeval_to_filetime): rename time to time_in
- * tty.cc (create_tty_master): rename utmp variable our_utmp
- (fhandler_tty_master::init): rename ttynum arg ttynum_in
-
-Tue Apr 7 17:18:05 1998 Geoffrey Noer <noer@cygnus.com>
-
- * syscalls.cc (seterrno): add FIXME
- * path.cc (symlink_check_one): change comment wording
-
- patch from Tom Tromey (tromey@cygnus.com)
- * syscalls.cc (access): Call SetErrorMode to turn off critical
- errors dialog.
-
- patch from Mikey (jeffdb@netzone.com):
- * fhandler.cc (fhandler_disk_file::open): under Win95, set
- S_IXOTH|S_IXGRP|S_IXGRP if the first two bytes of a file contain
- a '#!'.
- (fhandler_disk_file::check_execable_p): consider shell scripts
- execable
-
-Mon Apr 6 20:55:06 1998 Geoffrey Noer <noer@cygnus.com>
-
- * include/sys/cygwin.h: add protos for cygwin32 path conversion
- functions.
-
-Wed Apr 1 16:12:58 1998 Geoffrey Noer <noer@cygnus.com>
-
- * {fhandler.cc, fhandler.h, hinfo.cc, console.cc}: Rename
- fhandler_tty class to fhandler_serial
-
-Tue Mar 31 16:27:36 1998 Geoffrey Noer <noer@cygnus.com>
-
- * ntea.cc: temporarily disable reading/writing NTEA information
- due to the large penalty incurred on NT fat partitions.
-
-Fri Mar 27 13:35:30 1998 Geoffrey Noer <noer@cygnus.com>
-
- * environ.cc (parse_options): change struct to union to avoid
- references to uninitialized fields.
-
-Thu Mar 26 19:03:00 1998 Eric Bachalo <ebachalo@cygnus.com>
-
- * dcrt0.cc (insert_files): added this function to replace
- -@file in the command line with the contents of the file
- (dll_crt0_1): calls insert_files before building argv
-
-Wed Mar 25 15:25:26 1998 Geoffrey Noer <noer@cygnus.com>
-
- And more:
- * {fhandler.cc, fhandler.h, tty.cc, net.cc, console.cc}: make
- ioctl calls' cmd arg unsigned, ditto for access arg of init calls.
- * console.cc (fhandler_console::fillin_info): add parens around
- assignment used as truth value.
- (FakeReadFile): make copied_chars a size_t
- (fhandler_console::read): make i in loop unsigned
- * environ.cc (setenv): make l_value unsigned, add parens around
- assignments used as truth values.
- * exceptions.cc (call_handler): supposed to return an int and
- wasn't at the end of control flow. Now returns 1 there.
- * fhandler.h (~fhandler_base): destructor should be marked virtual
- * misc.cc (login): add parens around assignment used as truth
- value.
- * net.cc: cast INVALID_SOCKET to int in comparisons
- (fhandler_socket::ioctl): remove int cast to FIONBIO since cmd
- is now unsigned
- (get_win95_ifconf): add cast to signed vs unsigned int comparison.
- * ntea.cc (NTReadEA): add cast to signed vs unsigned int
- comparison.
- * path.cc (getcwd_inner): make len a size_t
- * pinfo.cc (cygwin32_winpid_to_pid): add comment
- * select.cc (cygwin32_select): make wait_ret an int
- * signal.cc (kill_worker): add parens around assignments used as
- truth values.
- * sigproc.cc (wait_sig): make rc a DWORD
- (sig_send): add parens around assignment used as truth value.
- * strace.cc: make inqueue global a static DWORD
- * tty.cc (do_output): add cast to signed vs unsigned int
- comparison.
- (fhandler_pty_master::open): remove unused handle nh
-
-Tue Mar 24 18:03:59 1998 Geoffrey Noer <noer@cygnus.com>
-
- More spring cleaning:
- * net.cc: move LOAD macro definition out of winsock_init,
- correction to make it valid ANSI C++.
- * grp.cc (read_etc_group): pass default line directly to
- add_grp_line call
-
-Mon Mar 23 19:21:00 1998 Geoffrey Noer <noer@cygnus.com>
-
- patch from cgf@bbc.com (Christopher Faylor):
- * spawn.cc (spawn_guts): Don't call close_all_files if a cygwin
- process has been spawned. Otherwise, we close tty handles twice.
-
-Fri Mar 20 23:01:24 1998 Geoffrey Noer <noer@cygnus.com>
-
- * pinfo.cc (pinfo_list::init): Initialize next_pid to PBASE.
- (pinfo_list::operator []): Now index is given by pid mod size().
- (pinfo_list::allocate_pid): Allow more pid numbers than spaces in
- the process table. Pids now can range from PBASE (1000) to
- INT_MAX. At that point they wrap to 1000 again. For speed, use
- modular arithmetic to map pids into table.
- * winsup.h: move PBASE to pinfo.cc, rename next_pid_index to
- next_pid
- * utils/ps.cc (main): reorg of what's printed where, listing pid
- first.
-
-Thu Mar 19 15:05:07 1998 Geoffrey Noer <noer@cygnus.com>
-
- * winsup.h: Change section name in NO_COPY definition. We were
- using a .data$nocopy section to avoid copying certain data on
- fork. The linker used to include this between __data_start__ and
- __data_end__, but that broke building the cygwin32 dll. The fix
- is to rename the section ".data_cygwin_nocopy" and explictly
- include it after __data_end__.
-
-Wed Mar 18 15:03:51 1998 Geoffrey Noer <noer@cygnus.com>
-
- * tty.h: fix ttyslot proto; it returns an int
- * glob.h: fix glob proto; it returns an int
-
-Mon Mar 16 16:16:40 1998 Geoffrey Noer <noer@cygnus.com>
-
- * Makefile.in: stop installing the dll in the lib directory as
- well as the bindir.
- * environ.cc (parse_options): don't need to call malloc
-
-Mon Mar 16 11:56:23 1998 Geoffrey Noer <noer@cygnus.com>
-
- patch from cgf@bbc.com (Christopher Faylor):
- * tty.cc (fhandler_tty_slave::dup): Don't set flags to 0. Flags
- have already been set in wrapper.
- * net.cc: Rename `s' variable which shadows global `s'.
- * termios.cc: ditto
- * time.cc: ditto
-
-Tue Mar 10 15:54:04 1998 Geoffrey Noer <noer@cygnus.com>
-
- * version.h: up CYGWIN_DLL_VERSION_MINOR
-
-Tue Mar 10 15:41:29 1998 Geoffrey Noer <noer@cygnus.com>
-
- patch from cgf@bbc.com (Christopher Faylor):
- * spawn.cc (spawn_guts): Make argument handling after `#! pgm'
- handle spaces similarly to UNIX. Close "linearized" file handles
- when a non-cygwin32 binary is executed or suffer hangs on exit.
- Reorganize lpReserved2 buffer to avoid conflicts with Microsoft
- usage which resulted in incorrect stdin/stdout operation with
- programs compiled using MSVC.
- * pinfo.cc (pinfo_init): Accommodate change to lpReserved2
- organization.
-
-Mon Mar 9 19:27:17 1998 Geoffrey Noer <noer@cygnus.com>
-
- * syscalls.cc (_open): modify to take a variable number of
- arguments to match newlib's fcntl.h.
- * environ.cc (parse_options): rewrite struct known to conform
- to ANSI standards. Can't statically initialize, so do so
- dynamically at the beginning of the function instead.
-
- patch from jeffdb@netzone.com (Mikey):
- * dcrt0.cc (build_argv, compute_argc): need to escape quotes
-
-Sat Feb 28 16:41:54 1998 Geoffrey Noer <noer@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * fhandler.cc (fhandler_base::init): call set_flags based on
- access arg.
- * net.cc: include fcntl.h
- (fhandler_socket::fhandler_socket): made sockets O_RDWR
-
-Thu Feb 26 23:41:54 1998 Geoffrey Noer <noer@cygnus.com>
-
- Beta 19 release made.
-
-Sun Feb 22 23:46:31 1998 Geoffrey Noer <noer@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * Makefile.in: Do not link cygwinb19.dll with libwsock32.a
- * exceptions.cc: add proto for i_WSACleanup.
- (sig_handle): call *i_WSACleanup if winsock was inited.
- * hinfo.cc: add proto for i_getpeername.
- (hinfo_vec::build_fhandler): call *i_getpeername if winsock
- was inited
- * net.cc: wsock32, i_wsockimports - new globals. Throughout
- file, call winsock functions via indirect pointers.
- (winsock_init): dynamically load wsock32.dll and resolve addresses
- of exports.
- (cygwin32_rcmd, cygwin32_rexec, cygwin32_rresvport): resolve
- addresses of exports.
- * select.cc: add protos for i___WSAFDIsSet, i_WSAGetLastError,
- i_select, i_socket, i_closesocket. WINSOCK_FD_ISSET changed to
- use indirect pointer. Direct winsock calls changed to indirect.
- (cygwin32_select): initialize winsock before calling select in
- degenerate case.
- * winsup.h: remove protos for ScreenRows, ScreenCols,
- ScreenGetCursor, ScreenSetCursor.
-
-Sun Feb 22 17:44:55 1998 Geoffrey Noer <noer@cygnus.com>
-
- * environ.cc (parse_options): comment out -- no longer
- compiles with egcs. Will rewrite/enable later.
-
-Sun Feb 22 13:49:10 1998 Geoffrey Noer <noer@cygnus.com>
-
- * syscalls.h: remove protos for _open, _read, _write since
- they are in newlib headers that are already included
- * syscalls.cc (_read): return int, not ssize_t
- (_write): ditto
-
-Sat Feb 21 14:21:17 1998 Geoffrey Noer <noer@cygnus.com>
-
- * Makefile.in: rename dll to cygwindevo.dll
-
-Sat Feb 21 01:33:56 1998 Geoffrey Noer <noer@cygnus.com>
-
- * cygwin.din: remove dup definition of endpwent
-
-Thu Feb 19 14:20:21 1998 Geoffrey Noer <noer@cygnus.com>
-
- * include/cygwin32/cygwin_dll.h: Correct protection wrapper
-
-Tue Feb 17 20:21:24 1998 Geoffrey Noer <noer@cygnus.com>
-
- * include/Windows32/Structures.h: tagBITMAPFILEHEADER should
- be packed.
-
-Tue Feb 17 19:34:41 1998 Geoffrey Noer <noer@cygnus.com>
-
- patch from cgf@bbc.com (Christopher Faylor):
- * cygwin.din: export sigpause
- * signal.cc (sigpause): New "compatibility interface" to
- sigsuspend function. Used currently by inetutils.
-
-Tue Feb 17 11:43:27 1998 Ian Lance Taylor <ian@cygnus.com>
-
- * tty.h (class tty): Add slave_opened field.
- * tty.cc (fhandler_tty_master::init): Initialize slave_opened.
- (do_output): Only return with EOF if the slave has been opened.
- (fhandler_tty_slave::open): Set slave_opened.
- (fhandler_pty_master::open): Initialize slave_opened.
-
- * tty.cc (fhandler_pty_master::read): Change type of n to DWORD.
- If there are no characters to read, and the descriptor is in
- nonblocking mode, just return EGAIN.
-
-Mon Feb 16 15:11:25 1998 Ian Lance Taylor <ian@cygnus.com>
-
- * tty.h (class tty): Remove handle_pid and slave_handles fields.
- (class tty_list): Add getcount method.
- * tty.cc (tty::init): Initialize input_handle and output_handle.
- (tty_list::free_tty): If we just freed the last reference to this
- tty, close input_handle and output_handle.
- (fhandler_tty_master::init): Don't initialize handle_pid and
- slave_handles.
- (do_output): Instead of just calling ReadFile, loop using
- PeekNamedPipe and check whether the tty has been closed. Return 0
- on EOF and -1 on error.
- (process_output): Only print debugging error message if error
- occurs in do_output.
- (fhandler_tty_slave::open): Always duplicate handles from master.
- Never close handles in source. Don't change slave_handles.
- (fhandler_tty_slave::close): Don't change slave_handles, and don't
- close tty handles.
- (fhandler_tty_slave::linearize): Call attach_tty.
- (fhandler_tty_slave::de_linearize): Don't call attach_tty.
- (fhandler_tty_slave::dup): Don't increment slave handles.
- (fhandler_pty_master::open): Don't initialize handle_pid and
- slave_handles.
- (fhandler_pty_master::close): Don't check slave_handles, and don't
- close tty handles.
- (fhandler_pty_master::read): Handle EOF return value from
- do_output.
- (fhandler_pty_master::linearize): Call attach_tty.
- (fhandler_pty_master::de_linearize): Don't call attach_tty.
-
- * fork.cc (cygwin_fork_helper1): Copy strace_mask from parent to
- child.
-
-Thu Feb 12 20:33:57 1998 Geoffrey Noer <noer@cygnus.com>
-
- patch from cgf@bbc.com (Christopher Faylor):
- * utils/cygwin.cc: Modify -s option to use new strace_mask entry
- in pinfo. Prepare for future ability to specify an strace file.
-
-Thu Feb 12 11:57:26 1998 Geoffrey Noer <noer@cygnus.com>
-
- * grp.cc (read_etc_group): add a default /etc/group in memory
- if /etc/group isn't found
- (getgrnam): return NULL if requested group isn't found instead
- of returning a default group
-
-Wed Feb 11 15:59:10 1998 Geoffrey Noer <noer@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * strace.cc (strace_open): do not close u->strace_file if it
- points to stderr.
- * malloc.cc (malloc_init): do not check for application's malloc
- in a forkee, this breaks memory coherency in a forkee and forker.
- use_internal_malloc flag now copies on fork.
-
-Tue Feb 10 18:11:30 1998 Geoffrey Noer <noer@cygnus.com>
-
- patch from cgf@bbc.com (Christopher Faylor)
- Throughout sources, mark statics and globals as NO_COPY where
- appropriate.
- * fork.cc (cygwin_fork_helper1): Remove #if 0 around fork_copy of
- cygwin data/bss. Remove __malloc_copy since it is no longer
- necessary.
-
-Tue Feb 10 15:30:19 1998 Geoffrey Noer <noer@cygnus.com>
-
- patch from cgf@bbc.com (Christopher Faylor)
- * console.cc (fhandler_console::write): Implement xterm style
- escape sequences for setting title in the console title bar.
- * fhandler.h: Define constants for console title escape sequence.
-
-Tue Feb 10 14:16:17 1998 Geoffrey Noer <noer@cygnus.com>
-
- * include/a.out.h: remove junk chars introduced by mailer
- when this header was sent to us
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * libccrt0.cc: rename cygwin_attach_dll to cygwin32_attach_dll
-
- patch from cgf@bbc.com (Christopher Faylor):
- * environ.cc: fix off by one problem
-
-Mon Feb 9 14:56:00 1998 Geoffrey Noer <noer@cygnus.com>
-
- * Makefile.in: add registry.h to environ.o deps
-
-Mon Feb 9 14:42:24 1998 Ian Lance Taylor <ian@cygnus.com>
-
- * Makefile.in (DLL_OFILES): Rename dllinit.o to dll_init.o.
-
- * tty.cc (fhandler_tty_slave::close): Don't close the tty handles
- if the slave and the master are the same process.
-
- * path.cc (read_mounts): Change key parameter to reference, to
- avoiding running the destructor.
-
-Mon Feb 9 13:53:50 1998 Geoffrey Noer <noer@cygnus.com>
-
- patch from cgf@bbc.com (Christopher Faylor):
- Moves all environment manipulation into environ.cc.
- Switches to CYGWIN32 for settings:
- set CYGWIN32=[no]title [no]strip_title [no]binmode [no]glob
- strace=mask:cache,file [no]tty
- (set STRACE=whatever is still honored).
- Propagates tty settings to all subprocesses regardless of
- unsetting of environment variable.
- Moves strace mask into pinfo structure for easier future
- manipulation by external program. Moves strace_file into the
- vacated position for automatic use in forked processes.
- Propagates old title to execed processes so that they can
- correctly restore the correct title when they exit.
- * console.cc: Use PID_USETTY setting in process_state so that
- tty state can be easily inherited.
- (set_console_title): New function to set console title.
- * syscalls.cc: Use PID_USETTY setting in process_state so that
- tty state can be easily inherited.
- * tty.cc: Ditto.
- * hinfo.cc: Ditto.
- (hinfo_vec::de_linearize_fd_array): Return last location in buffer
- for further potential processing.
- * dcrt0.cc: Add global variables for control of glob and title,
- set by environ_init. Mark some variables as NO_COPY.
- Remove routines and variables for dealing with environment.
- (dll_crt0_1): Move environment initialization into separate
- function. Honor 'noglob' CYGWIN32 setting.
- * environ.cc (environ_init): New function to initialize the
- environ table. Also scans for CYGWIN32 environment variable,
- setting appropriate values.
- (ucenv): New function. Upper cases an environment variable.
- (parse_options): New function. Parse CYGWIN_* environment
- variable.
- (posify): New function. Convert a Windows env path spec to
- cygwin.
- (env_sort): New function. Sort an environ block.
- (winenv): New function. Returns a windows style environment
- block.
- * fhandler.cc (fhandler_base::read): Reflect change to location of
- strace_mask.
- * fork.cc (cygwin_fork_helper1): Remove save/restore of some
- settings since this is automatic now with new dll data copy. Save
- PID_USETTY setting in child process_state.
- * strace.h: Cosmetic change.
- * pinfo.cc (pinfo_init): Call environ_init here since it may
- affect further processing in this function. Use old console title
- from "parent" process if execed process. Reflect change to
- location of strace_mask.
- * spawn.cc (spawn_guts): Remove environment manipulation code.
- Use new winenv function call instead. Save old title in block of
- memory copied to newly execed process if title is being displayed.
- * strace.cc: Changes to reflect new location for strace_mask and
- strace_file. These are now automatically inherited on fork.
- * winsup.h: Move strace_mask into pinfo to allow possible
- manipulation by other processes. Put u->strace_file in uptr
- structure so that it will be automatically duplicated on fork,
- removing the necessity of initializing strace in a forked
- process. Add functions/variables associated with environment
- manipulation and console title setting.
-
-Mon Feb 9 03:06:56 1998 Geoffrey Noer <noer@cygnus.com>
-
- Extensive reformatting in new files from next patch.
- Rename dllinit.h file to dll_init.h and likewise for dll_init.cc.
- Rename cygwin_detach_dll to cygwin32_detach_dll throughout.
- Similarly, rename cygwin_attach_dll and _cygwin_dll_entry.
- And rename sanityAndSyncCheck to check_sanity_and_sync.
- Also:
- * dll_init.h: don't include winsup.h
- * dll_init.cc: include winsup.h here instead
- * dlfcn.cc: include winsup.h, don't include windows.h
- * cygwin.din: rename cygwin_detach_dll to cygwin32_detach_dll.
-
- patch from giac@dalim.de (Philippe Giacinti):
- Copy data areas of cygwin-compiled dlls on fork(),
- implement dlopen/dlsym/dlclose/dlerror calls.
- * Makefile.in: add dlfcn.o and dllinit.o to DLL_OFILES, add
- dllinit.h dependencies
- * cygwin.din: dll_dllcrt0, cygwin_detach_dll, dlopen, dlclose,
- dlsym, dlerror, dlfork -- new exports.
- * dcrt0.cc: include dllinit.h, mark u pointer as NO_COPY.
- (sanityAndSyncCheck): new, code moved from dll_crt0_1.
- Initialize all linked dlls before calling main().
- * dlfcn.cc: new file.
- * dllinit.cc: new file.
- * dllinit.h: new file.
- * exceptions.cc: mark some variables with NO_COPY.
- * fork.cc: include dllinit.h; declare cygwin.dll data/bss
- start/end.
- (cygwin_fork_helper1): copy data/bss of cygwin.dll itself to child
- process (the code is disabled now); copy data areas of
- linked/loaded dlls (if any); free loaded dll list on cleanup.
- * include/cygwin32/cygwin_dll.h: new file.
- * include/dlfcn.h: new file.
- * libccrt0.cc (cygwin_crt0_common): new, code derived from
- cygwin_crt0, MainFunc parameter added.
- (cygwin_crt0): call cygwin_crt0_common.
- (cygwin_attach_dll): new.
- * shared.cc: mark some data as NO_COPY
- * strace.cc: mark some data as NO_COPY
- * winsup.h: add dll_dllcrt0 proto, NO_COPY macro.
-
-Sun Feb 8 17:51:26 1998 Geoffrey Noer <noer@cygnus.com>
-
- * getopt.c: new. Import Berkeley getopt code modified for use
- in Cygnus' kerberos implementation (including the writing of
- getopt_long by Chris Provenzano (proven@cygnus.com)) then modified
- a bit more to get it working in Cygwin32. Although we were
- going to remove getopt, it appears that too many programs would
- need fixing to remove it completely. Whether getopt should be
- included in Cygwin32 should be decided at a later time.
- * include/getopt.h: new. Import Berkeley getopt.h.
- * Makefile.in: add getopt.o to LIBCOS
- * utils/Makefile.in: remove include of ../../include since
- getopt.h is now in winsup/include, also revert recent change
- of addition of GETOPT_OBJS.
-
-Fri Feb 6 16:28:19 1998 Geoffrey Noer <noer@cygnus.com>
-
- * cygwin.din: remove set_new_handler and cygwin_set_attributes
- exports
- * version.h: up major version number
- * Makefile.in: rename dll to cygwinb19.dll
- * syscalls.cc (cygwin_set_attributes): axe
-
-Thu Feb 5 18:28:37 1998 Geoffrey Noer <noer@cygnus.com>
-
- * include/Windows32/Functions.h: add protos for
- DdeCmpStringHandles and DdeCreateDataHandle
- * Makefile.in: stop including ../libiberty/getopt* since
- we aren't exporting or using them
- * utils/Makefile.in: add new variable for libiberty getopt objs
- which is linked in for cygwin.exe
-
-Thu Feb 5 17:59:12 1998 Geoffrey Noer <noer@cygnus.com>
-
- syscalls.cc: move ppc dll_entry asm code to...
- dcrt0.cc: ...here
-
- Import new globbing code from NetBSD 1.3
- * glob: delete subdirectory
- * glob.c: new file
- * glob.h: new file
- * Makefile.in: remove glob from submakes, remove glob/libglob.a
- from DLL_IMPORTS, fix dcrt0 glob.h dependency
- * configure.in: don't configure glob subdirectory
- * configure: regenerate
- * dcrt0.cc: include glob.h, not glob/glob.h.
- (globify): don't call glob with GLOB_NOESCAPE which isn't a valid
- flag with this glob
-
-Wed Feb 4 16:14:13 1998 Geoffrey Noer <noer@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- Allow system administrator to enter into the HKLM registry tree
- a predefined mount table inherittable by all cygwin users. The
- predefined mounts are non-mandatory so the user's mount table has
- a higher priority than the default one. Cygwin reads HKLM tree
- in read-only mode.
- * path.cc (read_mounts): new, code derived from
- mount_info::from_registry().
- (mount_info::from_registry): call read_mounts from user's table,
- then from system-wide mount table.
- * registry.cc (reg_session::reg_session): key and access arguments
- added.
- (reg_key::init): access argument added.
- (reg_key::reg_key): access argument added.
- * registry.h (class reg_key): init prototype changed, default
- argument of reg_key added.
- (class reg_session): default arguments of constructor added.
-
-Wed Feb 4 15:38:59 1998 Geoffrey Noer <noer@cygnus.com>
-
- * include/a.out.h: new coff header file
-
-Wed Feb 4 01:55:18 1998 Geoffrey Noer <noer@cygnus.com>
-
- * uinfo.cc: define DEFAULT_UID/GID here
- * winsup.h: removed DEFAULT_UID/GID defs and unused
- set_console_title proto. Did some major reorganizing,
- and a little reformatting, commenting.
-
-Tue Feb 3 23:59:23 1998 Geoffrey Noer <noer@cygnus.com>
-
- patch from cgf@bbc.com (Chris Faylor):
- Replace u->self and this_procinfo () with new `myself' pointer
- wherever appropriate. Also replace get_pid() calls with a
- simple ->pid reference.
-
-Mon Feb 2 12:34:49 1998 Geoffrey Noer <noer@cygnus.com>
-
- patch from sos@prospect.com.ru (Sergey Okhapkin):
- * console.cc (FakeReadFile): limit bytes to read to 30000 due to
- Win NT 4.0 SP3 bug. Kill foreground process group with SIGWINCH
- on console buffer size change if tty support enabled.
- * include/sys/termios.h: define more constants.
- * tty.cc (fhandler_pty_master::ioctl): kill foreground process
- group with SIGWINCH on window resizing.
-
-Mon Feb 2 12:14:49 1998 Geoffrey Noer <noer@cygnus.com>
-
- patch from cgf@bbc.com (Chris Faylor):
- * dcrt0.cc (dll_crt0_1): Initialize u->self here, early in a
- forked process so the correct pid is used in strace output and so
- signals do not end up being erroneously sent to the parent.
- * exceptions.cc: Make a global variable static. Some minor
- optimizations.
- (call_handler): Make sure that the signal mask is restored when
- sig_dispatch mutex is unavailable.
- Reorder asm statements to prevent clobbering of flags register by
- preceding ors or risk random inexplicable behavior when returning
- from a signal handler.
- * fork.cc (cygwin_fork_helper1): Put setjmp restore in child's
- pinfo. Have the child figure out its pid earlier in the
- initialization process. Don't print a "child failed" error if the
- child failed during initialization due to a CTRL-C. This is still
- not quite right (see comment).
- * sigproc.cc (sig_send): Remove unlock/lock_pinfo or suffer
- consistent hangs in zsh. Make {allow,block}_sig_dispatch globally
- available.
- (wait_sig): Fix problem where blocked signals would still be
- processed if queued. Add debugging SIGNOQUEUE conditional to turn
- off signal queueing, making cygwin more like traditional UNIX.
- * sigproc.h: Add {allow,block}_sig_dispatch functions.
-
-Mon Jan 26 17:33:57 1998 Geoffrey Noer <noer@cygnus.com>
-
- * path.cc (mount_info::init): don't hardcode C: as the default
- slash mount. Instead, use the drive letter that the OS is loaded
- on.
-
-Mon Jan 26 13:33:57 1998 Geoffrey Noer <noer@cygnus.com>
-
- patch from cgf@bbc.com (Chris Faylor):
- * fork.cc (cygwin_fork_helper): Move setting PID_INITIALIZING
- process_state here to avoid erroneously setting it permanently
- via proc_register().
- * pinfo.cc (pinfo_init): Delay notifying "parent" when execing
- until this process is ready to receive signals or risk a race
- condition if exec parent calls sigproc_terminate prior to
- the child exec.
- * sigproc.cc (proc_subproc): Don't set PID_INITIALIZING here.
- It is too late in the process creation.
- (sig_send): Reset sigsuspend mutex prior to use to avoid a race.
- (wait_sig): Create sigsuspend mutex as an auto reset to attempt
- to avoid a race condition. Notify parent that this process is
- ready if we were execed (code moved from pinfo_init). Change
- PulseEvents to SetEvents to avoid races
- * spawn.cc (spawn_guts): Move setting PID_INITIALIZING
- process_state here to help avoid race.
-
-Fri Jan 23 12:31:37 1998 Ian Lance Taylor <ian@cygnus.com>
-
- * malloc.cc (malloc_critical_section): New static variable.
- (malloc_init): New function.
- (__malloc_lock, __malloc_unlock): New functions.
- * winsup.h (malloc_init): Declare.
- * heap.cc (heap_init): Call malloc_init.
-
-Thu Jan 22 18:46:40 1998 Ian Lance Taylor <ian@cygnus.com>
-
- * tty.h (class tty): Change slave_handles to int.
- * tty.cc (fhandler_tty_slave::open): Check for invalid tty
- handles. If this is the first slave, set slave_handles to 2;
- otherwise, increment slave_handles.
- (fhandler_tty_slave::close): Only close the tty handles if the
- slave_handles field drops to 1.
- (fhandler_tty_slave::write): Add a debugging message if WriteFile
- fails.
- (fhandler_tty_slave::dup): Set ttynum of new fhandler. Increment
- slave_handles if appropriate.
- (fhandler_pty_master::close): Only close the tty handles if the
- tty is no longer allocated.
-
- * tty.h (class tty): Add handle_pid and slave_handles fields.
- * tty.cc (attach_tty): Call connect_tty even if use_tty is not
- set.
- (detach_tty): Don't check use_tty.
- (fhandler_tty_master::init): Initialize handle_pid and
- slave_handles of tty.
- (do_input): Treat \r as end of line character.
- (do_output): Only set output_done_event if it is not NULL.
- (fhandler_tty_slave::open): Don't worry if we can't open
- output_done_event. Check slave_handles field of tty to decide
- from where to duplicate the handles. Call detach_tty on error.
- If we are now the owner of the slave handles, mark the tty
- appropriately.
- (fhandler_tty_slave::close): Only close output_done_event if it is
- not NULL. Check for errors from CloseHandle. Close the tty
- handles if we own them.
- (fhandler_tty_slave::write): Only wait for output_done_event if it
- is not NULL.
- (fhandler_tty_slave::read): If nobody owns the tty, return EOF.
- (fhandler_tty_slave::dup): Attach the tty. Don't duplicate
- output_done_event if it is NULL. Detach the tty on error.
- (fhandler_pty_master::open): Initialize handle_pid and
- slave_handles of tty. Don't create output_done_event.
- (fhandler_pty_master::close): Only close output_done_event if it
- is not NULL. Check for errors from CloseHandle. Only close the
- tty handles if we own them.
- (fhandler_pty_master::read): Only set output_done_event if it is
- not NULL.
- * hinfo.cc (de_linearize_fd_array): Don't set use_tty just because
- we find a tty to delinearize.
-
-Wed Jan 21 21:58:27 1998 Geoffrey Noer <noer@cygnus.com>
-
- patch from cgf@bbc.com (Chris Faylor):
- * sigproc.cc: Changes in wait_sig/sig_send semaphore/event
- signaling to attempt to eliminate races.
-
-Tue Jan 20 16:11:05 1998 Geoffrey Noer <noer@cygnus.com>
-
- Remove last remnants of the mixed case handling support.
- * path.cc (path_conv::path_conv): remove mixed_p init
- (mount_info::from_registry): don't check for fmixed
- (mount_info::to_registry): ditto
- (mount_item::getmntent): when setting ret.mnt_opts, only consider
- text vs binary flag
- (mount_item::init): remove init of mixed
- * path.h: remove mixed_p, mixed from path_conv class. Remove
- unmixedcaseify proto.
- * include/sys/mount.h: comment out MOUNT_MIXED define, protect
- header against multiple inclusion
-
- A little header file cleanup. Mostly to protect headers against
- multiple inclusion. Some aren't strictly speaking necessary but...
- * include/sys/cygwin.h: protect header against multiple inclusion
- * include/sys/smallprint.h: ditto, also add cplusplus wrapper
- * include/sys/strace.h: comment last endif
- * include/cygwin32/in.h: change _LINUX_IN_H protect defines
- to _CYGWIN32_IN_H
- * include/arpa/inet.h: protect header against multiple inclusion
- * include/asm/types.h: ditto
- * include/net/if.h: ditto
- * include/netinet/ip.h: ditto
- * include/netinet/ip_icmp.h: ditto
- * include/netinet/in.h: ditto, remove commented out real header
- file
- * include/fcntl.h: protect header against multiple inclusion
- * include/memory.h: ditto
- * include/mntent.h: ditto
- * include/strings.h: ditto
- * include/syslog.h: ditto
- * include/termio.h: ditto
-
-Tue Jan 20 12:51:59 1998 Ian Lance Taylor <ian@cygnus.com>
-
- * strace.cc (strace_stderr): New static variable.
- (strace_init): Set strace_stderr.
- (system_printf): If not strace_stderr, use debug_printf to put the
- message in a trace file.
-
- * fhandler.h (fhandler_pty_master): Add neednl_ field.
- * tty.h (RESTART_OUTPUT_EVENT): Change to be different from
- IOCTL_DONE_EVENT.
- * tty.cc (fhandler_tty_master::init): Initialize neednl_.
- (do_output): Handle a length of one by using neednl_ to record an
- expansion of \n to \r\n which doesn't fit. Never expand \r to
- \r\n. Correct order of \r\n.
- (fhandler_tty_slave::open): Improve error handling. Use
- DUPLICATE_CLOSE_SOURCE to close the pipes in the master process.
- (fhandler_tty_slave::dup): Duplicate the handles, rather than
- calling fhandler_tty_slave::open.
- (fhandler_pty_master::open): Initialize neednl_.
- (fhandler_pty_master::read): Return EOF for ERROR_BROKEN_PIPE,
- rather than error. Set errno correctly.
- * hinfo.cc (digits): New static function.
- (build_fhandler): Always accept /dev/ptmx and /dev/ttyDDD, even if
- use_tty is not set. use_tty now only controls the interpretation
- of /dev/tty.
-
-Mon Jan 19 14:49:45 1998 Geoffrey Noer <noer@cygnus.com>
-
- * sigproc.cc (sig_send): lock_pinfo_for_update during this
- function
-
-Fri Jan 16 18:09:59 1998 Geoffrey Noer <noer@cygnus.com>
-
- * sigproc.cc (sigproc_init): if we can't create a signal
- thread or can't create sync_proc_subproc mutex, fail with
- an api_fatal call rather than just returning
-
-Fri Jan 16 18:08:49 1998 Geoffrey Noer <noer@cygnus.com>
-
- patch from cgf@bbc.com (Chris Faylor):
- Changed signal handling to use one semaphore and one shared
- memory array which is manipulated via Interlocked*() functions.
- * exceptions.cc (lock_cs): Comment. Report on error.
- (unlock_cs): Add debugging statement.
- (sig_dispatch_pending): Remove obsolete function.
- (set_process_mask): Adapt to new signal method.
- (call_handler): Clear wait()ing threads here while main thread is
- suspended to avoid timing screwups. Avoid calling the handler if
- can't get dispatch mutex (code moved from sig_handle). Return
- status of acquiring the sig_dispatch mutex.
- (sighandle): Adapt to new signal method. Reorganize to *always*
- honor sig_dispatch mutex or suffer deadlock on fatal signals when
- someone else has the mutex and we're attempting to cleanup.
- (events_init): Reflect change in cygname() arguments.
- * fork.cc (stack_dummy): New function. Returns address of
- argument to determine bounds for eventual stack copy.
- (cygwin_fork_helper1): Call subproc_init to start up subproc
- thread if it is not alreay started. Ensure that signals are
- blocked while forked process is initializing. Change method of
- calculation for lower stack bounds to slightly more foolproof
- method. Preserve some global settings in forked process.
- * misc.cc (cygname): Remove an unused argument.
- * pinfo.cc (pinfo_list::allocate_pid): Add a useful debugging
- statement.
- * shared.cc (open_shared_file_map): Reflect change in cygname()
- arguments.
- * signal.cc (kill_pgrp): Avoid killing dead processes. Don't
- kill processes in my pgrp if not also in my ctty.
- (sigaction): Adapt to new signal method.
- (sigpending): Adapt to new signal method.
- * sigproc.cc: Many changes to adapt to new signal method. Also
- delay waits for thread initialization until the thread needs to be
- contacted.
- * sigproc.h: Ditto.
- * spawn.cc (spawn_guts): Fix potential off-by-one error(?) in
- transcribing the argument list and add paranoid code to detect
- future overruns. Change priority to highest so that waiting
- process will clear out quickly.
- (_spawnve): Call subproc_init() to start up subproc thread if is
- not already started.
- * strace.cc (strace_printf): Increase size of internal buffer so
- that long argument lists printed from spawn_guts do not overrun it
- so easily.
- * wait.cc (wait4): Set status flag to -1 prior to exit. This will
- cause previous wait that was interrupted by a signal which
- dispatched to another wait to return the correct error value.
- * winsup.h (pinfo): Add _sigtodo array for new signal method.
- Remove obsolete field. Reflect change in cygname arguments.
-
-Thu Jan 15 13:07:07 1998 Ian Lance Taylor <ian@cygnus.com>
-
- * syscalls.cc (mkdir): Don't permit the directory to be created if
- the parent directory is not writable.
-
- * syscalls.cc (fchmod): Call chmod with the path name, rather than
- just returning zero.
-
- * syscalls.cc (writable_directory): New static function.
- (_unlink): Don't permit the file to be removed if the directory is
- not writable.
- (rename): Don't permit the rename if either the source or
- destination directory is not writable.
-
- * syscalls.cc (chown): Set username and groupname lengths to UNLEN
- + 1, rather than 100. If getpwuid fails, try to look up the real
- user name to see if it is the same. Don't report an error if
- there is no security mapping.
-
-Wed Jan 14 15:34:20 1998 Ian Lance Taylor <ian@cygnus.com>
-
- * syscalls.cc (setegid): New function which just returns ENOSYS.
- (chroot): Likewise.
- * cygwin.din: Export setegid, _setegid, chroot, and _chroot.
-
- * syscalls.cc (setmode): Rename from _setmode. Change to return
- the old mode. Remove old setmode function.
- * cygwin.din: Make _setmode an alias for setmode.
-
-Wed Jan 14 14:46:00 1998 Geoffrey Noer <noer@cygnus.com>
-
- * Makefile.in: don't strip cygwin.dll by default
- * winsup.h: minor reformatting, removed/reworded some comments
-
-Mon Jan 12 13:53:03 1998 Geoffrey Noer <noer@cygnus.com>
-
- patch from cgf@bbc.com (Chris Faylor):
- Speed up cygwin pid calculation by staying in the range
- 1000 through (1000 + PSIZE - 1).
- * pinfo.cc (pinfo_list::init): Change to reflect new pid
- calculation method.
- (pinfo_list::operator []): Ditto.
- (pinfo_list::allocate_pid): Ditto.
- * winsup.h (pinfo): Move pid and ppid into non-zeroed region since
- they are always set by allocate_pid.
- (pinfo_list): Change pid_base to next_pid_index to reflect new pid
- calculation method.
- (PBASE): New constant for new pid calcuation method.
-
-Sat Jan 10 12:06:38 1998 Geoffrey Noer <noer@cygnus.com>
-
- * syscalls.cc (process_deletion_queue): remove wrapper function
- (close_all_files): call s->delqueue.process_queue instead of
- going through wrapper.
- * fhandler.cc (fhandler_base::close): call
- s->delqueue.process_queue instead of using above wrapper.
- * winsup.h: remove process_deletion_queue proto
- * delqueue.h: up MAX_DELQUEUES_PENDING to 100 for now. Rename
- v to dqueue for clarity.
- * delqueue.cc: v renamed to dqueue throughout. Add FIXME
- describing why this whole delqueue system needs rewriting.
-
-Fri Jan 9 13:18:44 1998 Geoffrey Noer <noer@cygnus.com>
-
- Remove some historical baggage:
- * syscalls.cc (cygwin_set_attributes): remove commented-out code,
- add FIXME since this function should go away next time an
- incompatible change to cygwin.din is made. Stop including
- include/sys/cygwin.h.
- * include/sys/cygwin.h: remove cygwin_set_attributes proto.
- Remove CYGWIN_FMODE_ALL_BINARY define.
- * hinfo (hinfo_vec::init_std_file_from_handle): remove old
- commented-out code
- * path.cc (unmixedcaseify): delete commented-out function
- (mixedcaseify): ditto
- * strerror.cc (strerror): delete commented-out code section
-
-Tue Jan 6 18:51:40 1998 Geoffrey Noer <noer@cygnus.com>
-
- patch from cgf@bbc.com (Chris Faylor):
- Conform to POSIX method for sending SIGHUP to stopped processes.
- * dcrt0.cc (do_exit): Use new kill_pgrp function to kill orphaned
- children on group leader exit iff the children are stopped (per
- POSIX).
- * signal.cc (kill_worker): Negative signal now means to send
- a SIGCONT after the signal, to wake up the target process.
- (_kill): Break out pgrp handling into separate function.
- (kill_pgrp): New function pulled from _kill to send signals
- to processes in a given pgrp.
-
-Tue Jan 6 14:37:43 1998 Geoffrey Noer <noer@cygnus.com>
-
- patch from cgf@bbc.com (Chris Faylor):
- * fhandler.cc (fhandler_base::open): include
- FILE_FLAG_BACKUP_SEMANTICS in file_attributes when file is
- a directory. Allows opening of directory as a file. Allows
- use of handle to perform some operations on both directories and
- files.
- (fhandler_base::fstat): Loop when attempting to get volume serial
- number. Works around an apparent Windows NT 3.51 bug.
- * times.cc (utimes): use FILE_FLAG_BACKUP_SEMANTICS flag
- to allow accessing directory times (may only work under NT;
- until now it didn't work under either OS).
- * winsup.h: Add O_DIROPEN constant.
-
-Mon Jan 5 19:18:01 1998 Geoffrey Noer <noer@cygnus.com>
-
- * Makefile.in: make winsup.h depend on winsup.h in accordance
- with below
-
- patch from cgf@bbc.com (Chris Faylor):
- * {*.cc, *.h}: Remove include files already present in winsup.h.
- Change empty function parameter lists to (void) where appropriate.
-
- * fork.cc: Clean up include files. Minor change to CreateProcess
- parameter list.
- * signal.cc: Remove ifdef'ed stuff.
- * smallprint.c: Add a necessary include file.
- * winsup.h: Add a common include file. Add a function declaration
- for kill_pgrp.
-
-Mon Jan 5 18:30:37 1998 Geoffrey Noer <noer@cygnus.com>
-
- Fix spoofing of directory inodes.
- * syscalls.cc (hash_path_name): instead of initializing the
- hash to zero, take the value of the initial hash as a new
- argument.
- (_stat_worker): fix up hash_path_name reference in light of above
- * dirsearch.cc (opendir): initialize dir->__d_dirhash to the
- hash of the full directory name so readdir can make use of it.
- (readdir): compute d_ino by combining the directory hash
- calculated by opendir with the hash of the filename.
- * fhandler.cc: fix up hash_path_name reference in light of above
-
- * winsup.h: remove unnecessary protos for getkey, kbhit. Adjust
- hash_path_name proto.
diff --git a/winsup/cygwin/ChangeLog-1999 b/winsup/cygwin/ChangeLog-1999
deleted file mode 100644
index f2da41f51..000000000
--- a/winsup/cygwin/ChangeLog-1999
+++ /dev/null
@@ -1,3562 +0,0 @@
-Sat Dec 25 12:46:25 1999 Christopher Faylor <cgf@cygnus.com>
-
- * dlfcn.cc (dlsym): Use correct HANDLE type for GetProcAddress.
- (dlclose): Ditto for FreeLibrary.
- * fhandler_windows.cc (fhandler_windows::set_close_on_exec): Properly
- coerce arguments to set_inheritance.
- (fhandler_windows::fixup_after_fork): Ditto for fork_fixup.
- * libcmain.cc (main): Simplify.
- * select.cc (peek_windows): Properly coerce argument to PeekMessage.
-
-Sat Dec 25 12:30:25 1999 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Eliminate unneeded .y SUFFIX.
- * dcrt0.cc (__api_fatal): Make "C".
- (do_global_ctors): Make __stdcall.
- (getprogname): Ditto.
- (insert_file): Ditto.
- (globify): Ditto.
- (build_argv): Ditto.
- (do_exit): Ditto.
- * debug.cc (regthread): Ditto.
- (makethread): Ditto.
- (threadname): Ditto.
- (find_handle): Ditto.
- (handle_list): Ditto.
- (add_handle): Ditto.
- * debug.h: Reflect changes to __stdcall.
- * shared.h: Ditto.
- * winsup.h: Ditto.
-
-Sat Dec 25 12:09:10 1999 Kazuhiro Fujieda <fujieda@jaist.ac.jp>
-
- * path.cc (symlink): Don't return error if target is a symlink to a
- nonexistent file.
-
-1999-12-23 DJ Delorie <dj@cygnus.com
-
- * Makefile.in: add support for "make check"
- * shared.cc: if $CYGWIN_TESTING is set, use a private shared area
- * cygrun.c: new, used to isolate dll-in-test
- * testsuite/*: new, rudimentary testsuite framework
-
-Wed Dec 22 01:05:44 1999 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (globify): Properly handle embedded tildes in variable
- names. Treat a c:\foo style path spec as "special", i.e., don't
- interpret the backslashes as quoting characters.
-
-Fri Dec 17 10:49:13 1999 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (symlink): Return error if the target exists.
-
-Thu Dec 16 22:36:45 1999 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc: Change method for accessing com in windows_device_names to
- allow > 2 com ports.
-
-Thu Dec 16 00:49:30 1999 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Only build winver.o and version.o when required.
-
-Sat Dec 11 11:06:45 1999 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (path_conv::path_conv): Ensure that a trailing slash is added
- to "x:" specifications.
-
-Fri Dec 10 20:22:41 1999 Christopher Faylor <cgf@cygnus.com>
-
- * debug.cc (WFSO): Make __stdcall.
- (WFMO): Ditto.
- * debug.h: Reflect above changes.
- * exceptions.cc (sig_set_errno): Set errno to be in effect after a
- signal handler.
- (handle_sigsuspend): Use set_sig_errno to ensure that the correct errno
- is set after a signal handler.
- (interrupt_now): Accommodate default errno field in stack.
- (intterupt_on_return): Ditto.
- (sigreturn): Pop, test, and possibly restore saved errno on return from
- signal handler.
- * fhandler_console.cc (fhandler_console::read): Set errno to be in
- effect after a signal handler.
- * fhandler_serial.cc (fhandler_serial::raw_read): Ditto.
- * select.cc (cygwin_select): Ditto.
- (select_stuff:wait): Ditto.
- (peek_serial): Ditto.
- * syscalls.cc (_read): Ditto.
- * wait.cc (wait4): Ditto.
- * winsup.h (signal_dispatch): Add "saved_errno" field.
-
-Thu Dec 9 23:35:45 1999 Christopher Faylor <cgf@cygnus.com>
-
- * debug.cc (threadname_init): Use new_muto macro to set up a static
- buffer for a muto.
- (debug_init): Ditto.
- (WFSO): Reinstate wrapper for WaitForSingleObject.
- (WFMO): Reinstate wrapper for WaitForMultipleObject.
- * debug.h: Declare the above two wrappers.
- * exceptions.cc (events_init): Use new_muto macro to set up a static
- buffer for a muto.
- * sigproc.cc (sigproc_init): Ditto.
- * sync.cc (muto::acquire): Don't bump waiters if we already own the
- muto.
- * sync.h (new): New operator.
- (delete): Ditto.
- (new_muto): New macro.
-
-Dec 08 23:50:00 1999 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (get_nt_attribute): Add debug output. Correct behaviour
- in case of NULL ACL.
- * syscalls.cc (stat_worker): Allow remote drives to get stat info from
- fh.fstat().
- * include/winnt.h: Add defines for W2K ACL control flags.
- * include/cygwin/socket.h: Add missing PF_NETBIOS.
-
-Wed Dec 8 23:06:07 1999 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Ensure that winver.o is a dependency for building the
- dll.
- * mkvers.sh: Attempt to call windres in a fashion that accommodates
- older and newer versions.
- * winver.c: Reorganize slightly to accommodate older versions of
- windres.
- * fhandler.cc (fhandler_disk_file::fstat): Avoid using Windows "inodes"
- on disks which do not support them.
-
-Tue Dec 7 21:15:11 1999 Christopher Faylor <cgf@cygnus.com>
-
- * dll_init.cc (DllList::forkeeLoadDlls): Reverse order of Free/Load
- Library calls to ensure that references are resolved.
- * path.cc (mount_info::conv_to_win32_path): Ensure that returned
- windows paths are always normalized regardless of whether they were in
- windows format to begin with.
-
-Tue Dec 7 08:48:22 1999 Christopher Faylor <cgf@cygnus.com>
-
- * environ.cc (parse_options): Properly detect end of known array.
-
-Mon Dec 6 22:32:04 1999 Christopher Faylor <cgf@cygnus.com>
-
- * mkvers.sh: Generate winver.o from winver.rc and various other things
- from include/cygwin/version.h
- * winver.rc: New file (adapted from donation by Mumit Khan
- <khan@xraylith.wisc.edu>).
- * configure.in: Find windres.
- * configure: Regenerate.
- * Makefile.in: Link winver.o into cygwin1.dll.
-
-Mon Dec 6 13:04:47 1999 Mumit Khan <khan@xraylith.wisc.edu>
-
- * init.cc (dynamically_loaded): New global variable.
- (dll_entry): Use.
- * winsup.h (dynamically_loaded): Declare.
- * dcrt0.cc (do_global_ctors): Likewise.
- (set_os_type): Make static again.
- (dll_crt0_1): Handle dynamically_loaded case.
- * dll_init.cc (dll_dllcrt0_1): Delete.
- (dll_dllcrt0): Handle dynamically_loaded case.
- (dll_noncygwin_dllcrt0): Mark obsolescent.
- * libccrt0.cc (cygwin_attach_noncygwin_dll): Delete.
- * pinfo.cc (pinfo_init): Don't inherit parent fds if dynamically
- loaded.
- * include/cygwin/cygwin_dll.h (cygwin_attach_noncygwin_dll): Delete
- prototype.
- (_cygwin_noncygwin_dll_entry): Mark obsolescent.
-
-Mon Dec 6 11:09:41 1999 Christopher Faylor <cgf@cygnus.com>
-
- * configure.in: Make threadsafe the default.
- * configure: regenerate.
- * utils/strace.cc: Fix a compiler warning.
-
-Sun Dec 5 15:49:43 1999 Christopher Faylor <cgf@cygnus.com>
-
- * environ.cc (parse_options): Reinstate unions in parse_things, to
- save space.
-
-Fri Dec 3 22:52:05 1999 Christopher Faylor <cgf@cygnus.com>
-
- Implement new signal-handling scheme which ensures that a program will
- not be interrupted while in a system or cygwin DLL.
- * Makefile.in: Add sync.o and dll_ofiles target.
- * dcrt0.cc (alloc_stack_hard_way): Add more defensive code to ensure
- that the stack is really grown.
- (alloc_stack): Ditto.
- (dll_crt0_1): Reorganize some initialization routines to ensure that
- they occur after the heap has been initialized.
- * debug.cc: Use muto for locks. Eliminate attempts to avoid being
- interrupted by signals.
- (threadname_init): New function.
- (debug_init): Ditto.
- * debug.h: Declare debug_init and threadname_init.
- * exceptions.cc (stack_info::stack_info): Don't check for previous use
- of get().
- (handle_sigsuspend): Simply using new signal-handling scheme.
- (interruptible): New function. Determines if PC should be interrupted.
- (interrupt_now): New function. Causes immediate signal dispatch.
- (interrupt_on_return): New function. Causes signal dispatch on return
- from cygwin or system routine.
- (call_handler): Simplify to use new signal-handling scheme.
- (set_process_mask): Use mask_sync muto to synchronize setting of
- process signal mask.
- (sig_handle_tty_stop): New function. Called when have to stop process
- now.
- (sig_handle): Simplify to use new signal-handling scheme.
- (set_process_mask): Ditto.
- (events_init): Allocate mask_sync muto.
- (unused_sig_wrapper): New function. Encapsulates assembly language
- signal handling support.
- * fhandler.h (class select_stuff): Accommodate new signal-handling
- scheme.
- * fhandler_console.cc (fhandler_console): Simplify to use new
- signal-handling scheme.
- * fhandler_serial.cc (fhandler_serial::raw_read): Ditto.
- * fhandler_termios.cc (bg_check): Ditto.
- * fhandler_tty.cc (process_input): Ditto.
- (fhandler_tty_slave::open): Ditto.
- (fhandler_tty_slave::send_ioctl_request): Ditto.
- * fork.cc: Ditto.
- * path.cc (chdir): Ditto.
- * select.cc: Ditto, throughout.
- * shared.h: Eliminate unneeded signal enum.
- * signal.cc (signal): Simplify to use new signal-handling scheme.
- (sleep): Ditto.
- (usleep): Ditto.
- (sigprocmask): Ditto.
- (sigaction): Ditto.
- (pause): Use handle_sigsuspend to pause for signal.
- * sigproc.cc: Change signal_arrived handle to global_signal_arrived
- class. Change various mutex handles to mutos.
- (proc_subproc): Simplify to use new signal-handling scheme. Use muto
- for locking.
- (get_proc_lock): Ditto.
- (proc_terminate): Ditto.
- (sig_dispatch_pending): Make a "C" function. Return status of pending
- signals.
- (sigproc_init): Initialize global_signal_arrived. Simplify to use new
- signal-handling scheme. Initialize sync_proc_subproc muto.
- (sig_send): Eliminate __SIGSUSPEND considerations. Simplify to use new
- signal-handling scheme.
- (__allow_sig_dispatch): Delete.
- (__block_sig_dispatch): Delete.
- (__get_signal_mutex): Delete.
- (__release_signal_mutex): Delete.
- (__have_signal_mutex): Delete.
- (wait_sig): Simplify to use new signal-handling scheme.
- * sigproc.h: Implement signal_arrived classes.
- * smallprint.c (__small_vsprintf): Avoid printing a leading '*' in
- function name with %F format.
- * spawn.cc (spawn_guts): Simplify to use new signal-handling scheme.
- (iscmd): Don't consider a filename to be a "command" unless it contains
- a ':'.
- * syscalls.cc (_read): Ditto.
- (_open): Ditto.
- (_close): Ditto.
- * termios.cc (tcsendbreak): Ditto.
- (tcdrain): Ditto.
- (tcflush): Ditto.
- (tcflow): Ditto.
- (tcsetattr): Ditto.
- (tcgetattr): Ditto.
- * winsup.h: Reorganize include files. Add preliminary __sig_protect
- implementation.
- * cygwin/version.h: Bump current version to 1.1.0.
-
-Thu Dec 2 22:19:40 1999 Christopher Faylor <cgf@cygnus.com>
-
- * sync.cc (muto::muto): Use an event rather than a semaphore for wait
- synchronization.
- (muto::acquire): Rewrite to use an event and try to remove races.
- (muto::release): Ditto.
-
-1999-12-02 DJ Delorie <dj@cygnus.com>
-
- * environ.cc (parse_options): switch to a static initializer;
- templates are sensitive to g++ bugs.
-
-Fri Nov 26 12:04:23 1999 Christopher Faylor <cgf@cygnus.com>
-
- * net.cc (cygwin_bind): Ensure that non-Unix domain socket operations
- return success correctly.
-
-Wed Nov 24 21:37:58 1999 Christopher Faylor <cgf@cygnus.com>
-
- * net.cc (cygwin_bind): Guard against incorrectly setting res to zero
- when there is an error condition.
-
-Tue Nov 23 17:49:55 1999 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler.cc (fhandler_base::fhandler_base): Use better initialization
- scheme.
- * fork.cc (stack_base): Eliminate unneeded asm stuff.
- * select.cc: Sprinkle in some comments.
- * include/winnt.h: Add more CONTEXT.
-
-Nov 23 20:51:00 1999 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (cygwin_bind): Use struct sockaddr_un in AF_UNIX code. Set
- errno to ENAMETOOLONG if length of pathname exceeds limit in AF_UNIX
- code. Sets errno to EADDRINUSE in AF_UNIX code if file system socket
- object already exists.
- * syscalls.cc (setsid): Set errno to EPERM if current process is
- already process group leader.
- * uinfo.cc (internal_getlogin): Rearrange for better debug output. Set
- pi->psid to NULL if SID can't be determined.
- * include/cygwin/socket.h: Add AF_LOCAL and PF_LOCAL
- (same as AF_UNIX) for POSIX compatibility.
- * include/sys/un.h: Add UNIX_PATH_LEN define. Added SUN_LEN macro for
- POSIX compatibility.
-
-Sun Nov 21 22:55:04 1999 Christopher Faylor <cgf@cygnus.com>
-
- * environ.cc (parse_options): Return immediately after dealing with
- NULL argument. Don't try to process it.
-
-Tue Nov 16 23:29:17 1999 Christopher Faylor <cgf@cygnus.com>
-
- * signal.cc (kill_worker): Guard against NULL dereference when thread
- safe.
-
-Sat Oct 30 00:59:38 1999 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Some general cleanup.
- * smallprint.c (__small_vsprintf): Accommodate new format for
- __PRETTY_FUNCTION__.
-
-Wed Oct 27 16:13:36 1999 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (mount_info::from_registry): Don't allow the same posix path
- into the mount table more than once.
- * utils/mount.cc (main): Add some orthogonality to the options.
-
-Tue Oct 26 21:55:49 1999 Christopher Faylor <cgf@cygnus.com>
-
- * environ.cc (environ_init): Turn off ntsec by default.
-
-Wed Oct 27 00:14:11 1999 J"orn Rennecke <amylaar@cygnus.co.uk>
-
- * fhandler.cc (fhandler_base::lseek): Take readahead into account.
-
-Tue Oct 26 16:46:54 1999 Christopher Faylor <cgf@cygnus.com>
-
- * syscalls.cc (_unlink): Return EISDIR when attempting to unlink a
- directory.
-
-Mon Oct 25 18:05:23 1999 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler.cc (fhandler_base::read): Fix previous fix.
-
-Mon Oct 25 13:46:44 1999 Christopher Faylor <cgf@cygnus.com>
-
- * dll_init.cc (add): Avoid allocating name for "LINK"ed DLLs.
- (DllList::forkeeLoadDlls): Only reload DLLs if they have been
- dlopen'ed.
- * grp.cc (parse_grp): Assign gr_mem when it is determined.
-
-Sun Oct 24 21:55:48 1999 Christopher Faylor <cgf@cygnus.com>
-
- * dll_init.cc (struct dll): Add module name.
- (add): Add additional 'name' parameter for recording in dll structure.
- (reserve_upto): New function.
- (release_upto): Ditto.
- (DllList::forkeeLoadedDlls): Ditto.
- (DllList::forkeeStartLoadDlls): Remove.
- (DllList::forkeeEndLoadedDlls): Ditto.
- (DllNameIterator::*): Eliminate class.
- (LinkedDllNameIterator::*): Ditto.
- * dll_init.h: Reflect above changes.
- * fork.cc (fork): Don't generate a list of dlls to load in the parent.
- Let the child do it. Use new DllList::forkeeLoadDlls to load DLLs.
- * smallprint.c (__small_vsprintf): No need for a sign on a Win32 error.
- (small_printf): Move function here from strace().
- * strace.cc (small_printf): Move to smallprint.c
- * include/sys/strace.h: Always declare small_printf.
-
-Sun Oct 24 02:22:13 1999 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler.cc (fhandler_base::read): Work around C bug.
-
-Tue Oct 19 22:10:21 1999 Christopher Faylor <cgf@cygnus.com>
-
- * dll_init.cc: Add some external symbols to allow thread-safe
- compilation.
-
-Tue Oct 19 21:09:42 1999 Christopher Faylor <cgf@cygnus.com>
-
- Make minor changes throughout to accommodate new gcc merge.
- * Makefile.in: Remvoe -fpermissive option when compiling using g++.
- * dcrt0.cc (noload): Mark as "unused" to avoid a compiler warning.
- * exceptions.cc (sigreturn): Make this "extern" since it essentially
- *is* extern.
- * fork.cc (sync_with_parent): Modify to cause the macro to be
- considered void.
- * heap.cc (sbrk): Remove debugging code.
- * passwd.cc (getpass): Don't use fprintf to print the prompt.
- * path.cc (mount_info::conv_to_win32_path): Accommodate compiler
- warning.
- * select.cc (cygwin_select): Experimental version of select which
- handles fd_sets with non-standard FD_SETSIZE.
- (select_stuff::wait): Ditto.
- * termios.cc (tcgetattr): Avoid a compiler warning.
- (cftospeed): Ditto.
- (cftispeed): Ditto.
- * uinfo.cc (netapi32_init): Ditto.
- * winsup.h (api_fatal): Simplify and avoid a compiler warning.
- * include/sys/strace.h (system_printf): Ditto.
- (strace_printf_wrap): Modify to cause the macro to be considered void.
- (strace_printf_wrap1): Ditto.
-
-1999-10-19 DJ Delorie <dj@cygnus.com>
-
- * Makefile.in (.cc.o): add -fpermissive to avoid g++'s conformance
- madness.
- * environ.cc (_findenv): rename to my_findenv to avoid newlib
- prototype.
- * syscalls.cc (logout): remove braces around _PATH_UTMP
-
-Sat Oct 16 22:53:02 1999 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (mount_info::cygdrive_posix_path): Properly terminate string
- after Oct 11 change below.
-
-Fri Oct 15 23:02:39 1999 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (stack_info): Reimplement stack handling routines in
- new stack_info class.
- (stack_info::brute_force): Just fill out the same structure as
- StackWalk.
- (stack_info::walk): Just fill out stack info.
- (stack): Use stack_info class stuff to iterate over and display the
- stack.
-
-Fri Oct 15 00:32:13 1999 Christopher Faylor <cgf@cygnus.com>
-
- * include/cygwin/version.h: Bump some versions.
-
-Oct 5 11:45:00 1999 Corinna Vinschen <corinna@vinschen.de>
-
- * dcrt0.cc (dll_crt0_1): Delete calls to get_WHOEVER_sid. Move call to
- uinfo_init() to the end of the function.
- * fhandler.cc (get_file_owner): Substitute call to get_id_from_sid()
- with call to get_uid_from_sid().
- (get_file_group): Substitute call to get_id_from_sid() with call to
- get_gid_from_sid().
- * fork.cc (fork): Copy new pinfo members to child.
- * grp.cc (parse_grp): Rewritten. Saves gr_passwd and all user names in
- gr_mem.
- (read_etc_group): Variable `group_sem' avoids endless loop.
- * passwd.cc (read_etc_passwd): Variable `passwd_sem' avoids endless
- loop.
- * security.cc (get_sid): New function to generate SID from int values.
- (get_ssid): New function to generate SID from string.
- (get_pw_sid): New function to generate SID from pw_gecos entry.
- (get_gr_sid): New function to generate SID from gr_passwd entry.
- (get_admin_sid): Rewritten to avoid using heap space.
- (get_system_sid): Ditto.
- (get_creator_owner_sid): Ditto.
- (get_world_sid): Ditto.
- (get_id_from_sid): Try to read SIDs from /etc/passwd or /etc/group
- files before using RID or Lookup... function.
- (legal_sid_type): New function.
- (lookup_name): Rewritten to use the logon server info, if any.
- (alloc_sd): Try to use SID from /etc/passwd and /etc/group files before
- call to lookup_name().
- (alloc_sd): New parameter for logon server.
- (set_nt_attribute): Ditto.
- (set_file_attribute): Ditto.
- * shared.cc (sec_user): If SID is saved in myself, use it instead of
- calling lookup_name().
- * shared.h: struct pinfo got extended user information.
- * spawn.cc (spawn_guts): method for forcing reread /etc files changed.
- (_spawnve): Copy new pinfo members to child.
- * syscalls.cc (chown): Change call to set_file_attribute().
- (chmod): Ditto.
- * uinfo.cc (internal_getlogin): New function.
- (uinfo_init): Calls internal_getlogin() now.
- (getlogin): Uses myself->username now.
- * winsup.h: extern HANDLE netapi32_handle; Change prototypes for
- set_file_attribute(), lookup_name(), get_id_from_sid(). New inline
- functions get_uid_from_sid() and get_gid_from_sid().
- * utils/mkgroup.c: Adapt to the new ntsec features.
- * utils/mkpasswd.c: Ditto.
-
-Thu Oct 14 23:46:03 1999 Christopher Faylor <cgf@cygnus.com>
-
- Replace calls to GetCurrentProcess() with hMainProc throughout.
- * autoload.h: Implement LoadDLLinitnow() function to force the loading
- of a DLL.
- * cygwin.din: Export cygwin_stackdump.
- * dcrt0.cc (dll_crt0): Set up hMainProc and hMainThread here.
- * dll_init.cc (dll_dllcrt0_1): Ditto.
- * environ.cc (parse_options): New "oldstack" option for forcing the use
- of the old stack walking code.
- * exceptions.cc (signals_init): Remove.
- (err_printf): Remove. Use small_printf throughout.
- (sfta): New helper function for StackWalk.
- (sgmb): Ditto.
- (stack_brute_force): Renamed from old stack walk function. Now uses
- frame pointer from context handler.
- (stack_walk): New function. Uses Windows API to walk the stack.
- (stack): Reimplement to attempt to load imagehlp.dll. If this succeeds
- use stack_walk() to display stack info, otherwise use
- stack_brute_force.
- (cygwin_stackdump): Temporary (?) function for displaying a stack dump
- from the called location.
- (stackdump): Accept new parameters for passing to stack().
- (handle_exceptions): Call stackdump with new parameters needed to walk
- the stack.
- * fhandler.cc (fhandler_base::read): Fix potential buffer overrun. Fix
- end of buffer problems when \r is not followed by a \n.
- (fhandler_base::lseek): Avoid flushing read ahead when not moving the
- file pointer.
- * fhandler_termios.cc (fhandler_termios::set_ctty): Add a debugging
- statement.
- * sigproc.cc (sigproc_init): Eliminate obsolete signals_init function.
- * winsup.h: Add some declarations.
-
-Wed Oct 13 09:02:32 1999 Kazuhiro Fujieda <fujieda@jaist.ac.jp>
-
- * path.cc (readlink): Return errno correctly when it can't find the
- target symlink.
-
-Tue Oct 12 13:02:08 1999 Christopher Faylor <cgf@cygnus.com>
-
- * syscalls.cc (setsid): Only reset sid/pgid when NOT process group
- leader.
- * tty.cc (tty_list::allocate_tty): Don't set sid to myself. The first
- tty open should do that.
-
-Mon Oct 11 23:13:29 1999 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (noload): Issue appropriate Windows error.
- * fhandler_termios.cc (fhandler_termios::ctty): Don't automatically set
- sid, etc., unless the current pid associated with the tty's sid does
- not exist.
- * path.cc (mount_info::cygdrive_posix_path): Avoid copying beyond the
- end of buffer or suffer garbage.
- * pinfo.cc (pinfo_init): Restore sid behavior of a year ago. The sid
- should be the same as the pid to be equivalent to UNIX.
- (pinfo_list::operator []): Add more bounds checking.
-
-Sun Oct 10 14:08:30 1999 Christopher Faylor <cgf@cygnus.com>
-
- * select.cc (select): Return error if n > FD_SETSIZE. This is a
- temporary fix.
-
-Sun Oct 10 13:56:14 1999 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (iscygdrive_device): Be more precise in detecting when a
- "cygdrive" device. This should allow 'mkdir -p' to work correctly.
-
-Fri Oct 08 08:55:31 1999 Kazuhiro Fujieda <fujieda@jaist.ac.jp>
-
- * path.cc (symlink_check_one): set errno to EINVAL on socket files
- same as normal files.
-
-1999-10-06 DJ Delorie <dj@cygnus.com>
-
- * include/oaidl.h (IDispatch.GetIDsOfNames): Use DISPID* not DISPID
-
-1999-10-06 DJ Delorie <dj@cygnus.com>
-
- * exceptions.cc (err_printf): new function; print to stderr
- without strace's clutter. The stacktrace functions use this, so
- the stacktrace files should be cleaner.
- (exception): Print segment registers also
- (stack): include a peek at the function's arguments
-
-Tue Oct 5 16:33:17 1999 Christopher Faylor <cgf@cygnus.com>
-
- * hinfo.cc (hinfo::extend): Eliminate inappropriate test for boundary
- condition.
-
-1999-10-04 DJ Delorie <dj@cygnus.com>
-
- * config/i386/longjmp.c: don't restore %fs (Paul Sokolovsky
- <paul-ml@is.lg.ua>)
-
-1999-10-04 DJ Delorie <dj@cygnus.com>
-
- * localtime.c (tzsetwall): Handle Asian Windows strings correctly
- (from Kazuhiro Fujieda <fujieda@jaist.ac.jp>).
-
-Sat Oct 2 23:00:00 1999 Corinna Vinschen <corinna@vinschen.de>
-
- * include/lm*.h: Correct multiple problems in lan manager
- header files.
-
-Sun Oct 3 14:29:53 1999 Christopher Faylor <cgf@cygnus.com>
-
- * sysdef/imagehlp.def: New file. Definitions for imagehlp.dll.
- * include/imagehlp.h: Ditto.
- * include/winbase.h: YA missing structure.
-
-Fri Oct 1 11:16:00 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (alloc_sd): Correct setting of FILE_DELETE_CHILD.
- (get_file_attribute): Read ntea attributes only if ntsec is disabled.
- * syscalls.cc (_unlink): Don't queue file into delqueue if DeleteFile
- returns ERROR_ACCESS_DENIED.
-
-1999-09-30 Mumit Khan <khan@xraylith.wisc.edu>
-
- * init.cc (dll_entry): Remove static_load case.
- * dcrt0.c (set_os_type): Make it externally visible.
- * dll_init.cc (dll_dllcrt0_1): Update noncygwin initialization for
- post-b20.1 code.
-
-1999-09-30 DJ Delorie <dj@cygnus.com>
-
- * times.cc: declare _timezone and _daylight properly
-
-Wed Sep 29 23:57:40 1999 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (do_exit): Remove EXIT_SIGNAL mask when exiting. It is not
- correct given changes to really_exit.
- * select.cc (peek_serial): Work around apparent Windows bug.
-
-1999-09-29 Norbert Schulze <Norbert.Schulze@rhein-neckar.de>
-
- * times.cc (timezone): revert 'return TZ if set' patch.
- * times.cc (timezone): uses now tzset() and _timezone.
- * times.cc (gettimeofday): ditto.
- * localtime.c (tzsetwall): no negative minutes if offset is negativ.
- * localtime.c (tzsetwall): minutes place holder was missing if
- minutes == 0 and seconds !=0 (h:0:s).
- * localtime.c (tzsetwall): if timezone has no daylight saving
- (tz.StandardDate.wMonth==0) generate no daylight saving parameters.
-
-Sat Sep 25 15:11:04 1999 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler_termios.cc (fhandler_termios::bg_check): Accept a new
- argument to control whether we should worry about blocking signals.
- * fhandler.h: Ditto.
- * syscalls.cc (read_handler): Accept a new argument for passing to
- bg_check.
- (read): Inform read_handler if signals are blocked or not.
- * termios.cc: Throughout, reorganize to always block signals before
- calling bg_check.
-
-Sat Sep 25 13:36:06 1999 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler.h (fhandler_termios::line_edit): Add an extra argument.
- * fhandler_serial.cc (fhandler_serial::open): Maintain consisten
- fAbortOnError state.
- * fhandler_termios.cc (fhandler_termios::line_edit): Use new
- "always_accept" argument to control whether input_done is set
- regardless of canonical state.
- * fork.cc (vfork): Duplicate "parent's" fd table.
- * hinfo.cc (hinfo::dup_worker): New method.
- (dup2): Use new dup_worker method.
- (hinfo::fixup_after_fork): Lock dtable prior to operating on it.
- (hinfo::vfork_child_dup): New method. Duplicates dtable for vfork.
- (hinfo::vfork_parent_restore): New method. Restores dtable when vfork
- exits.
- * net.cc (set_winsock_errno): Make global.
- * pipe.cc (pipe): Default mode to binary unless *explicitly* set to
- text.
- * select.cc (set_bits): Test that {read,write,except}_selected are
- active before setting a bit.
- (peek_pipe): Short circuit tests if we're not checking for readable
- or "except"able handles.
- (thread_socket): Use read check for exitsock as old method relied on
- undocumented, unreliable behavior.
- (start_thread_socket): Perform more setup on exitsock to improve thread
- exit signalling.
- (socket_cleanup): Connect to the exitsock to force thread_socket thread
- exit.
- * winsup.h (hinfo): Add preliminary vfork stuff.
- * include/winsock.h: Add shutdown() how types.
- * include/sys/socket.h: Add socketpair declaration.
-
-1999-09-22 DJ Delorie <dj@cygnus.com>
-
- * syscalls.cc (chown): never return ENOSYS - just pretend it
- works.
-
-Wed Sep 22 00:47:56 1999 Christopher Faylor <cgf@cygnus.com>
-
- * select.cc (MAKEready): Need to initialize 'fd' or open tests in
- peek fail.
-
-Mon Sep 20 17:07:37 1999 Christopher Faylor <cgf@cygnus.com>
-
- * smallprint.c (__small_vsprintf): Fix '%+' handling.
-
-Thu Sep 16 21:48:13 1999 Christopher Faylor <cgf@cygnus.com>
-
- * utils/cygcheck.cc (dump_sysinfo): Deal with a new compiler error.
- * utils/strace.cc (make_command_line): Change to a void * argument, as
- is required for SetConsoleCtrlHandler.
-
-Thu Sep 16 20:47:12 1999 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (__api_fatal): Rearrange slightly.
- * fhandler.h (set_ctty): Change to void.
- * fhandler_termios.cc (fhandler_termios::set_ctty): Ditto.
- * select.cc (thread_pipe): Change to a void * argument, as is required
- for thread functions.
- (thread_socket): Ditto.
- (thread_serial): Ditto.
- * include/winbase.h: Mark ExitProcess as noexit.
-
-Thu Sep 16 18:32:12 1999 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (ctrl_c_handler): Make WINAPI, as required by
- SetConsoleCtrlHandler.
-
-Thu Sep 16 17:48:05 1999 Christopher Faylor <cgf@cygnus.com>
-
- * debug.cc (thread_stub): Make WINAPI, as required by CreateThread.
- * fhandler_tty.cc (process_input): Ditto.
- (process_output): Ditto.
- (process_ioctl): Ditto.
- * select.cc (thread_pipe): Ditto.
- (thread_serial): Ditto.
- (thread_socket): Ditto.
- * sigproc.cc (wait_proc): Ditto.
- (wait_sig): Ditto.
- * window.cc (winMain): Ditto.
-
-Wed Sep 15 20:58:37 1999 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (call_handler): Let fatal signals through regardless of
- signal_mutex.
- * fhandler.h (fhandler_base): Make bg_check virtual.
- (fhandler_termios::bg_check): Eliminate the second argument.
- * fhandler_console.cc (fhandler_console::ioctl): Check for background
- operation.
- * fhandler_termios.cc (fhandler_termios::bg_check): Eliminate the
- second argument. A negative arg 1 means the same thing.
- * ioctl.cc (ioctl): Add debugging output.
- * syscalls.cc (_write): Eliminate second argument to bg_check.
- * termios.cc (tcsendbreak): Check for background operation.
- (tcdrain): Ditto.
- (tcflush): Ditto.
- (tcflow): Ditto.
- (tcsetattr): Reorganize on similar lines to above routine.
-
-Wed Sep 15 15:25:04 1999 Christopher Faylor <cgf@cygnus.com>
-
- * select.cc (peek_pipe): Only set read_ready if bg_check returns <= 0.
- (peek_console): Ditto. Correct PeekConsole conditional so that the for
- loop breaks eventually.
-
-Wed Sep 15 00:21:40 1999 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (set_console_handler): Allocate security stuff here
- since it is needed earlier in the process now. Allocate a shared event
- for use in synchronizing CTRL-C events that happen while the process is
- still initializing.
- (ctrl_c_handler): Use the above event to synchronize with the cygwin
- startup process, waiting for the signal thread to come alive before
- trying to send a signal.
- (signals_init): Don't call set_console_handler() here, since it is now
- handled much earlier in cygwin initialization.
- * shared.cc (shared_init): Move out security setup.
- * sigproc.cc (wait_sig): Activate the console_handler_thread_waiter so
- that any waiting thread which is handling ctrl-c's will wake up and
- send a signal, if appropriate.
-
-Tue Sep 14 23:49:39 1999 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (ctrl_c_handler): Handle ctrl-c events ourself, using
- the "UNIX way".
- * fhandler_console (tty_list::get_tty): New function.
- * shared.h: Add some additional things to tty_min class for handling
- ctrl-c.
-
-1999-09-14 DJ Delorie <dj@cygnus.com>
-
- * dir.cc (rmdir): return ENOTDIR for regular files on 9x
-
-Tue Sep 14 00:01:59 1999 Christopher Faylor <cgf@cygnus.com>
-
- * debug.h (ForceCloseHandle2): New macro.
- * fhandler.cc (set_inheritance): Accept name of handle as optional
- third argument. Use this in ForceCloseHandle2/ProtecHandle2.
- * fhandler.h: Implement bg_check() method.
- * fhandler_console.cc (get_tty_stuff): Initialize more tty stuff.
- (fhandler_console::read): Check for background read.
- * fhandler_termios.cc (fhandler_termios::bg_check): New function.
- Performs appropriate action given background read or write.
- * fhandler_tty.cc (fhandler_tty_slave::write): Replace background check
- code with new method.
- (fhandler_tty_slave::read): Ditto.
- (fhandler_tty_common::set_close_on_exec): Pass output_mutex name to
- set_inheritance.
- * select.cc: Throughout check that the fd is still open before polling.
- (peek_pipe): Check for background read.
- (peek_console): Ditto.
- * shared.h: Move ntty from tty into tty_min.
- * syscalls.cc (read_handler): Check for background read.
- (_write): Check for background write.
-
-Sat Sep 11 16:24:21 1999 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (iscygdrive_device): New macro.
- (mount_info::conv_to_win32_path): Only attempt "cygdrive" translation
- when passed /cygdrive/something.
- (mount_info::write_cygdrive_info_to_registry): Store in-memory copy of
- cygdrive prefix automatically.
- (mount_info::read_cygdrive_info_from_registry): Reorganize for new
- write_cygdrive_info_to_registry functionality.
- (mount): Ditto.
-
-Fri Sep 10 15:44:11 1999 Christopher Faylor <cgf@cygnus.com>
-
- * syscalls.cc (pathconf): Make first arg 'const'.
-
-1999-09-10 DJ Delorie <dj@cygnus.com>
-
- * exec.cc (_execve): check for an empty environment
-
-Wed Sep 8 10:24:12 1999 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (dll_crt0_1): Generalize test for initial zeroes in
- exec/fork block.
- * fhandler.cc (fhandler_disk_file::open): Don't attempt #! detection on
- non-disk files.
- * fhandler.h: Use generic status bit set/clear macros. Use bitmask for
- fhandler_termios state.
- * fhandler_console.cc: Rename "tty_stuff" to more descriptive
- "shared_console_info".
- (fhandler_console::read): Reset console state before a read if
- appropriate.
- (fhandler_console::open): Improve check for setting console state.
- (fhandler_console::fixup_after_fork): Ditto.
- (set_console_state_for_spawn): New function.
- * fhandler_termios.cc (fhandler_termios::tcinit): Use new method for
- determining if initialized.
- * fhandler_tty.cc (fhandler_tty::init_console): Avoid sending handle to
- init or it will be closed.
- * fork.cc (per_thread::set): Make this method non-inline, temporarily.
- * select.cc (peek_console): Call set_input_state to ensure that the
- console is in the correct state.
- * shared.h (child_info): Make zero element an array for future
- tweaking.
- (tty_min): Change initialized element to a bit field. Define bit field
- macros for manipulating it.
- * sigproc.cc (wait_sig): Wake up every half second in a (vain?) attempt
- to work around Windows 98 hanging problem.
- (wait_subproc): Ditto.
- * spawn.cc (spawn_guts): Use new "set_console_state_for_spawn" prior to
- starting a process.
- * winsup.h: Define generic macros for manipulating a method's status
- field.
- (per_thread): Move inline method to fork.
-
-Mon Sep 6 13:36:34 1999 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler_tty.cc (fhandler_tty_master::init_console): Remove retrieval
- of stderr handle since it is not required for correct init operation.
- * hinfo.cc (hinfo_init): Reorganize to accommodate potential closing of
- console handles by fhandler_console::init.
- (init_std_file_from_handle): Set standard handle as appropriate.
- (hinfo::de_linearize_fd_arry): Ditto.
- * fhandler_console.cc (fhandler_console::init): Conditionally close
- handle only if it is valid.
-
-Sun Sep 5 22:43:21 1999 Christopher Faylor <cgf@cygnus.com>
-
- * utils/cygcheck.cc: Make sure that GetDiskFreeSpaceExA is defined as a
- __stdcall function or the stack will suffer. For now, don't sort mount
- output as more work copying the individual mntent elements is required.
-
-Sat Sep 4 19:01:00 1999 Christopher Faylor <cgf@cygnus.com>
-
- * include/glob.h: Ensure that glob*() functions can be properly accessed by
- programs using the DLL.
-
-Sat Sep 4 18:49:04 1999 Christopher Faylor <cgf@cygnus.com>
-
- * heap.cc (heap_init): Tweak debugging output.
- * sigproc.cc (sig_send): Catch obvious impossible values from
- GetLastError.
-
-Sat Sep 4 18:43:49 1999 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler_tty.cc (fhandler_tty_slave::open): Protect against signal
- dispatch.
- (fhandler_tty_slave::write): Only wait a fixed amount of time to
- receive a an output_done_event.
- (fhandler_tty_slave::tcflush): Protect against signal dispatch.
-
-Sat Sep 4 18:30:42 1999 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (handle_sig): Temporarily remove OutputDebugString. It
- seemed to be causing sporadic hangs.
- (call_handler): Save and restore di and si.
- (sigreturn): Ditto.
-
-Fri Sep 3 23:07:44 1999 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler_termios.cc (fhandler_termios::line_edit): Properly deal with
- sending characters to slave when !iscanon.
-
-Fri Sep 3 18:15:00 1999 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_raw.cc (fhandler_dev_raw::fstat): Add S_ISCHR to mode bits.
- * fhandler_tape.cc (fhandler_dev_tape::fstat): Erase setting of S_ISCHR
- since it's set in fhandler_dev_raw::fstat now.
-
-Thu Sep 2 22:11:03 1999 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (mount_info::conv_to_win32_path): Fix problem with
- calculating relative path at root.
-
-Wed Sep 1 23:24:43 1999 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler.cc (fhandler_base::fhandler_base): Don't use default binmode
- for console.
-
-Wed Sep 1 20:51:05 1999 Christopher Faylor <cgf@cygnus.com>
-
- * smallprint.c (__small_vsprintf): Allow field width argument with 'l'
- modifier. Consolidate processing of field width.
- * uname.cc (uname): Eliminate space in "release" field.
-
-Tue Aug 24 10:46:24 1999 Kazuhiro Fujieda <fujieda@jaist.ac.jp>
-
- * fhandler_console.cc (write_normal): Write '\n' corresponding to
- DWN if the cursor is out of the window.
-
-Wed Aug 25 22:16:46 1999 Christopher Faylor <cgf@cygnus.com>
-
- * smallprint.c (rn): Deal with positive as well as negative signs.
- (__small_vprintf): Handle '+', 'l', and '%' format types.
-
-Wed Aug 25 00:38:49 1999 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (dll_crt0_1): Zero heap information in user_data to
- work around mutant startup code.
-
-Tue Aug 24 00:03:22 1999 Christopher Faylor <cgf@cygnus.com>
-
- * sigproc.cc (sig_send): One more end-of-process race detection.
-
-Mon Aug 23 21:37:07 1999 Christopher Faylor <cgf@cygnus.com>
-
- Throughout, remove malloc.h.
- * debug.cc: Initialize handle list so that it will not be copied on
- fork.
- * exceptions.cc (_sigreturn): Zero windows error on exit. It's
- meaningless after a signal dispatch.
- * fhandler_console.cc (fhandler_console::de_linearize): Improve error
- messages.
- * shared.h: Increment fork magic number.
- * sigproc.cc (sigproc_terminate): Close all handles prior to calling
- proc_terminate if running in signal thread.
- (sig_send): Eliminate bogus ResetEvent on a semaphore. Add code for
- potentially dealing with problems when this code is interrupted via a
- signal dispatch.
- * times.cc (timezone): Use __small_sprintf.
- * uname.cc (uname): Ditto. Also use strcpy instead of sprintf where
- appropriate.
-
-1999-08-23 DJ Delorie <dj@envy.delorie.com>
-
- * localtime.c: export timezone, daylight, tzname as _*
- * times.cc: don't export timezone, daylight, tzname
- (timezone): return TZ if set.
- (cygwin_tzset): not needed.
-
-Thu Aug 19 13:46:47 1999 Christopher Faylor <cgf@cygnus.com>
-
- * fork.cc (fork): Remove pinfo lock. It is in allocate_pid, now.
- * spawn.cc (_spawnve): Ditto.
- * pinfo.cc (pinfo_init): Ditto.
- (lock_pinfo_for_update): Impreove debug output.
- (pinfo_list::allocate_pid): Lock pinfo mutex here.
-
-1999-08-19 DJ Delorie <dj@cygnus.com>
-
- * Makefile.in (tooldir): If we're building natively, drop the
- $(target_alias) on include and lib's install (i.e. /usr/include
- instead of /usr/include/i686-cygwin).
-
-Thu Aug 19 01:11:25 1999 Christopher Faylor <cgf@cygnus.com>
-
- * sigproc.cc (sig_send): Avoid a race with proc thread when executing
- due to a signal.
-
-Wed Aug 18 16:37:59 1999 Kazuhiro Fujieda <fujieda@jaist.ac.jp>
-
- * fhandler_console (fhandler_console::fillin_info): Avoid setting
- scroll_region.Bottom when it is not known.
- (fhandler_console::write_normal): Add various fixes for console
- scrolling.
-
-Wed Aug 18 16:18:22 1999 Christopher Faylor <cgf@cygnus.com>
-
- * sigproc.cc: Add more precise end-of-process detection.
-
-Wed Aug 18 00:03:47 1999 Christopher Faylor <cgf@cygnus.com>
-
- * sigproc.cc (sig_send): Work around apparent Windows bug which
- occasionally results in bogus error messages when a signal is
- dispatched.
-
-1999-08-17 DJ Delorie <dj@cygnus.com>
-
- * localtime.c (tzsetwall): Deduce TZ more accurately.
-
-Tue Aug 17 18:00:03 1999 Christopher Faylor <cgf@cygnus.com>
-
- * select.cc (peek_pipe): Correct detection of process group for
- backgrounded processes.
-
-Tue Aug 17 10:24:49 1999 Christopher Faylor <cgf@cygnus.com>
-
- * include/winnt.h: Fix typo in IMAGE_FIRST_SECTION definition.
-
-Sun Aug 15 19:11:49 1999 Mumit Khan <khan@xraylith.wisc.edu>
-
- * gcrt0.c (__eprol): Avoid namespace pollution.
- (_monstartup): Turn into a constructor function and prevent multiple
- invocations.
-
-Mon Aug 16 10:03:00 Corinna Vinschen <corinna@vinschen.de>
-
- * utils/mkgroup.c: Correct call to LookupAccountSid for retrieval of
- 'None'.
-
-Mon Aug 16 00:24:29 1999 Christopher Faylor <cgf@cygnus.com>
-
- * debug.cc (locker): Improve signal mutex locking.
- * exceptions.cc (sig_handle): Pass STOP signals to call_handler to
- ensure honoring of signal_mutex.
- (call_handler): Move STOP code here after acquistion of signal_mutex.
- * fhandler_tty.cc (fhandler_tty_common::__acquire_output_mutex): Track
- lockers for debugging.
- (fhandler_tty_common::__release_output_mutex): Ditto.
- (fhandler_slave::write): Fix faulty signal blocking code.
- * fork.cc (fork_copy): Remove ancient if 0.
- (fork): Conditionalize "FORKDEBUG" under DEBUGGING.
- * sigproc.cc (proc_terminate): Reduce pinfo lock time.
- (sigproc_terminate): Set sig_loop_wait after getting signal_mutex.
- (__get_signal_mutex): Reorganize for less strace output when not
- DEBUGGING.
- (__release_signal_mutex): Ditto. Reorganize case where !sig_loop_wait.
- (have_signal_mutex): Returns true if current thread has the mutex.
- * wait.cc (wait4): Change debugging message.
-
-Sat Aug 14 0:10:00 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::raw_read): Set correct errno from Win32
- error when ReadFile fails.
- (fhandler_base::raw_write): In case of ERROR_DISK_FULL, return
- bytes_written only if bytes_written > 0.
- * errno.cc: Map ERROR_DISK_FULL to ENOSPC.
-
-Fri Aug 13 14:22:12 1999 Christopher Faylor <cgf@cygnus.com>
-
- * select.cc (peek_pipe): Honor ignra argument.
-
-Fri Aug 13 00:45:00 1999 Christopher Faylor <cgf@cygnus.com>
-
- * spawn.cc (spawn_guts): Ensure that hExeced is set to proper state
- when parent has exited.
-
-Thu Aug 12 14:09:30 1999 Christopher Faylor <cgf@cygnus.com>
-
- * sigproc.cc (getsem): Fix typo which prevented sending signals to
- other processes.
-
-Wed Aug 11 22:06:33 1999 Christopher Faylor <cgf@cygnus.com>
-
- * cygwin.din: Export glob and globfree.
- * glob.h: Move to include.
- * Makefile.in: Correct glob.h dependencies.
-
-Wed Aug 11 19:41:04 1999 Sergey Okhapkin <sos@prospect.com.ru>
-
- * fhandler.cc (fhandler_disk_file::fstat): Check if the file is unix
- domain socket.
- (fhandler_disk_file::open): Call set_socket_p().
- * fhandler.h: Add new fhandler type flags (FH_LOCAL, FH_FIFO).
- (fhandler_base): get/set_socket_p - new member functions.
- (fhandler_socket::addr_family): Add new member, currently unused.
- (fhandler_socket::get/set_addr_family): Add new functions to access
- addr_family.
- * include/sys/un.h: New file.
- * net.cc: Include <sys/un.h>
- (cygwin_socket): Always create socket of AF_INET family, store
- argument's family.
- (get_inet_addr): New static function. Converts AF_UNIX requests into
- corresponding AF_INET requests.
- (cygwin_sendto): Use get_inet_addr().
- (cygwin_connect): Likewise.
- (cygwin_accept): Check for sockaddr length.
- (cygwin_bind): Implement AF_UNIX.
- * path.h (PATH_SOCKET): Add new enum value.
- (path_conv::issocket): Add new member function.
- (SOCKET_COOKIE): Add new define.
- * syscalls.cc (chmod): Mark socket files with system file attribute.
-
-Wed Aug 11 17:22:46 1999 Corinna Vinschen <corinna@vinschen.de>
-
- * utils/mkgroup.c (main): Generate "None" group when
- invoked via mkgroup -l.
-
-Tue Aug 10 21:30:31 1999 Christopher Faylor <cgf@cygnus.com>
-
- * select.cc (peek_pipe): Handle type ahead where appropriate.
- * sigproc.cc (proc_can_be_signalled): Revert to previous method for
- determining signalability.
- (getsem): Move PID_INITIALIZING test here.
- * wait.cc (wait4): Improve debug output slightly.
-
-Mon Aug 9 23:27:44 1999 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (do_exit): Add additional check for valid hExeced.
- * exceptions.cc (call_handler): Implement a raceless way to track
- pending_signals.
- * signal.cc (kill_worker): Make calls from non-main threads synchronous
- or signals from a tty thread don't work right.
- * sigproc.cc (sig_send): Localize pending_signals assignment to only
- the wait_sig thread.
- (__get_signal_mutex): Don't attempt to grab a mutex if signal_mutex
- hasn't been assigned yet. Add more strace debugging information when
- -DDEBUGGING.
- (__release_signal_mutex): Don't attempt to release a mutex if
- signal_mutex hasn't been assigned yet. Add more strace debugging
- output.
- (wait_sig): Attempt to eliminate race in setting of pending_signals.
- * spawn.cc (spawn_guts): Set hExeced to INVALID_HANDLE_VALUE so that it
- will be obvious when a process is actually just an execed stub.
- * strace.cc (strace_vsprintf): Output a "!" after the pid when
- executing in an execed stub.
-
-Mon Aug 9 17:17:13 1999 Christopher Faylor <cgf@cygnus.com>
-
- Throughout, eliminate in() and out() macros.
- * winsup.h (tty_attached): Accept an argument indicating the pinfo
- structure to query.
- * exceptions.cc (really_exit): Cosmetic change.
- * external.cc (fillout_pinfo): Use queried pinfo structure for
- determining tty number, not *our* number.
- * net.cc: More workarounds.
- * path.cc (get_device_number): Supply argument to tty_attached.
- * syscalls.cc (ctermid): Ditto.
- * strace.cc (strace_dump): Remove.
- * include/sys/strace.h: Eliminate obsolete stuff.
-
-Sun Aug 8 22:54:45 1999 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (call_handler): Process all signals on return from a
- signal dispatch.
- * sigproc.cc (proc_can_be_signalled): Guard against waiting too long
- when exiting.
- (proc_exists): Don't report an exited process as "existing".
- (proc_terminate): Close handle prior to testing for existence so that
- proc_exists will not always return TRUE. Eliminate use of zap_subproc.
- (stopped_or_terminated): Eliminate use of zap_subproc.
- (zap_subproc): Delete.
-
-Sun Aug 8 22:17:36 1999 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler_tty.cc (fhandler_tty_master::init): hThread must remain
- open. Previous change to close it was wrong.
-
-Sun Aug 8 20:35:33 1999 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc: Initalize NO_COPY variables.
- * pinfo.cc (record_death): Don't be so insistent about getting
- the pinfo lock.
- * sigproc.cc (proc_terminate): Tighten the region protected by
- the pinfo lock.
- * spawn.cc (spawn_guts): Eliminate the pinfo lock when reparenting
- as it is no longer required.
- (_spawnve): Tighten the region protected by the pinfo lock.
-
-Sun Aug 8 18:26:51 1999 Christopher Faylor <cgf@cygnus.com>
-
- * sigproc.cc (sig_send): Add more unfortunate guards against a
- system call being interrupted by a signal dispatch.
-
-Sat Aug 7 15:38:42 1999 Christopher Faylor <cgf@cygnus.com>
-
- * security.cc (get_admin_sid): Ensure that returned buf is not copied
- on a fork.
- (get_system_sid): Ditto.
- (get_create_owner_sid): Ditto.
- (get_world_sid): Ditto.
-
-Sat Aug 7 15:17:25 1999 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler_tty.cc (process_input): Reset signal_arrived event prior to
- calling console read as this is now a requirement for functions which
- detect signal_arrived.
- (fhandler_tty_master::write): Allow signals to operate prior to raising
- SIGTTOU.
- (fhandler_tty_master::read): Allow signals to operate prior to raising
- SIGTTIN.
- * select.cc (peek_pipe): Detect attempt to read from tty not in our
- process group as a "read_ready" event.
- * include/shellapi.h: Add missing defines.
- * utils/ps.cc: Output windows pid as unsigned for Windows 9x.
-
-Sat Aug 7 14:30:00 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (get_creator_owner_sid): New function.
- * shared.cc (sec_user): calls `get_creator_owner_sid' in creation
- of the security attributes structure additionally.
-
-Fri Aug 6 13:04:40 1999 Christopher Faylor <cgf@cygnus.com>
-
- * spawn.cc (spawn_guts): Allow failure from OpenProcess. The parent
- may have exited due to 7/31 change.
-
-Thu Aug 5 22:54:07 1999 Christopher Faylor <cgf@cygnus.com>
-
- * sigproc.cc (wait_for_me): Break out as a common function to check
- that the current process is ready to handle signals.
- (proc_can_be_signalled): Treat myself differently.
-
-Thu Aug 5 21:24:20 1999 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler_console.cc (fhandler_console): Don't call tcinit here.
- (fhandler_console::read): Don't reset signal_arrived here.
- * syscalls.cc (_read): Set it here instead.
- * fhandler_termios.cc (fhandler_termios::line_edit): Only call
- accept_input when input is ready. Ignore iscanon in this case.
- * fhandler_tty.cc (fhandler_tty_slave::init): Don't call tcinit here.
-
-Thu Aug 5 16:02:25 1999 Christopher Faylor <cgf@cygnus.com>
-
- * strace.cc (handle_output_debug_string): Ignore errors reading
- from child memory as they seem to occur due to a process exiting.
- (close_handle): New, defensive code.
-
-Thu Aug 5 13:32:43 1999 Christopher Faylor <cgf@cygnus.com>
-
- * strace.cc (remove_handle): New function.
- (add_child): Speed up slightly.
- (proc_child): Use output of remove_child in CloseHandle.
-
-Thu Aug 5 12:38:50 1999 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (dll_crt0_1): Don't protect subproc_ready if it is NULL.
- (do_exit): Avoid calling close_all_files if exiting from exec stub.
- * net.cc: Reorganize to work around some compiler bugs.
- * spawn.cc (spawn_guts): Set hExeced only after child stuff has been
- completely initialized.
- * syscalls.cc (_open): Protect against signals.
- * utils/strace.cc (warn): New function.
- (add_child): Issue warning when can't duplicate child process handle.
-
-Wed Aug 4 21:35:28 1999 Christopher Faylor <cgf@cygnus.com>
-
- * psapi.h: New file.
-
-Thu Aug 4 10:28:00 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc: Eliminate MALLOC_CHECK calls.
- (lookup_name): New function simplifies the retrieval of user and group
- names.
- (alloc_sd): Call `lookup_name' instead of `LookupAccountName'.
- * shared.cc (sec_user): Call `lookup_name' instead of
- `LookupAccountName'. Eliminate 'free' call on stack space.
- * winsup.h: Declare `lookup_name'.
-
-Wed Aug 4 16:24:02 1999 Christopher Faylor <cgf@cygnus.com>
-
- * a.out.h: Fix cut and paste from mime email typos.
-
-Mon Aug 2 19:08:48 1999 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Fix utils dependency. Make clean more assertive.
- * path.cc (mount_info::conv_to_win32_path): Fill in correct destination
- when a device name is detected.
- * syscalls.cc (chown): Always succeed when referencing a cygwin device.
- (chmod): Ditto.
- * net.cc (get_ifconf): Eliminate holdover from previous change.
-
-Mon Aug 2 13:07:44 1999 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (do_global_ctors): Remove previous change. It was just
- wrong.
-
-Sun Aug 1 23:21:28 1999 Christopher Faylor <cgf@cygnus.com>
-
- Throughout rename 'slave_alive' handle to 'inuse'.
- * shared.h: Implement tty_attached() macro to determine when an actual
- tty is associated with the process.
- (class tty): Add some methods for manipulating an "inuse" event that is
- common to both master and slave parts of a tty.
- * dcrt0.cc (do_exit): Use tty_attached() to determine if signal should
- be sent to process group.
- * external.cc (fillout_pinfo): Return -1 if tty is not attached (i.e,
- attached to a console).
- * fhandler.h: Move more stuff into fhandler_tty_common and out from sub
- classes.
- * fhandler_console.cc (fhandler_console::read): Send SIGWINCH signal to
- *correct* process group.
- (fhandler_console::open): Fix incorrect argument ordering in set_ctty.
- (fhandler_console::de_linearize): Remove unneeded handle resets.
- * fhandler_tty.cc (fhandler_tty_slave::open): Fix incorrect argument
- ordering in set_ctty. Use tty create_inuse method to create inuse
- event.
- (fhandler_tty_slave::close): Delete.
- (fhandler_tty_slave::dup): Delete.
- (fhandler_tty_slave::write): Minor cleanup of flow of control.
- (fhandler_tty_common::dup): Subsume fhandler_tty_slave dup method.
- (fhandler_pty_master::fhandler_pty_master): Zero inuse field.
- (fhandler_pty_master::open): Set inuse field.
- (fhandler_tty_common::close): New, superclass method.
- (fhandler_tty_common::set_close_on_exec): Handle inuse field.
- (fhandler_tty_common::fixup_after_fork): Ditto.
- (fhandler_tty_slave::set_close_on_exec): Delete.
- (fhandler_tty_slave::fixup_after_fork): Delete.
- * path.cc (get_device_number): Use tty_attached() to figure out
- /dev/tty.
- * select.cc (peek_console): Send SIGWINCH signal to *correct* process
- group.
- * tty.cc (tty::master_alive): New method.
- (tty::create_inuse): New method.
-
-Sun Aug 1 16:23:22 1999 Christopher Faylor <cgf@cygnus.com>
-
- * net.cc (get_ifconf): Use alloca for temporary buffer.
-
-Sun Aug 1 01:38:20 1999 Christopher Faylor <cgf@cygnus.com>
-
- Modify de_linearize methods throughout to set unix and msdos path
- names.
- * dcrt0.cc (do_exit): Only remove shared memory when we're done with
- it.
- * exceptions.cc (try_to_debug): Move static variable outside of the
- function so that it can more easily be set with gdb.
- * fhandler_console.cc (fhandler_console::open): Handles are typically
- hexadecimal in debugging output.
- (fhandler_console::open): Do not open inherit console handles by
- default.
- (fhandler_console::dup): Just use open method to "duplicate" a console
- handle.
- (fhandler_console::fixup_after_fork): Do *not* close handles here since
- they have not been inherited.
- (fhandler_console::de_linearize): Ditto.
- * utils/strace.cc (create_child): Correct debugging flags when not
- tracking forked processes.
-
-Sat Jul 31 20:10:58 1999 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (do_global_ctors): Ensure that ctors are not called more
- than once per session.
- * fork.cc (fork): Use sig_protect to protect against signals during
- fork.
- * pinfo.cc (lpfu): Show windows pid in debugging message as this is
- generally more useful.
- * pinfo.cc (unlock_pinfo): Issue an error if ReleaseMutex fails.
- (pinfo::record_death): Actually unlock pinfo on exit rather than allow
- ExitProcess to do this since ExitProcess can sometimes take a *long*
- time.
- * spawn.cc (spawn_guts): Ensure that pinfo is always unlocked.
-
-Thu Jul 29 23:43:24 1999 Christopher Faylor <cgf@cygnus.com>
-
- Throughout, consolidate pgid processing for console and tty into
- fhandler_termios and tty_min.
- * debug.h: Make WF?O functions the defaults for dealing with Waits.
- These functions attempt to work around signal interrupt problems.
- * debug.cc: Ditto.
- * exceptions.cc (call_handler): Don't wait a long time for second
- attempt to get signal mutex.
- * fhandler_console.cc (fhandler_console::open): Set the "controlling
- tty".
- * fhandler_termios.cc: Move the ctty and pgid functions here.
- (fhandler_termios::line_edit): Fix debug output.
- * fhandler_tty.cc (fhandler_tty_slave_write): Use sig_protect to
- protect against output_mutex deadlock.
- * fork.cc (get_vfork_val): Conditionalize with NEWVFORK.
- * syscalls.cc (setsid): Add debugging output.
- (setpgid): Reorganize and add debugging output.
- * tty.cc (tty::init): Use a method to clear the sid.
-
-Thu Jul 29 23:42:53 1999 Christopher Faylor <cgf@cygnus.com>
-
- Patch from Egor Duda <deo@logos-m.ru>:
- * grp.cc (read_etc_group): Use a default /etc/group entry when one
- doesn't exist.
- (getgrgid): Ditto.
- * passwd.cc (read_etc_passwd): Use a default /etc/passwd entry when one
- doesn't exist.
- (search_for): Ditto.
- * uinfo.cc (read_etc_group): Remove some defines.
- * winsup.h: Move them here.
-
-1999-07-29 Bernd Schmidt <bernds@cygnus.co.uk>
-
- * Makefile.in (SUBDIRS_AFTER): Build mingw before utils.
- * utils/Makefile.in (MINGW_LDFLAGS): Add "-B../mingw/"
-
-
-Tue Jul 27 23:31:28 1999 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc: Add experimental vfork_storage initialization.
- (do_exit): Ditto.
- * exec.cc: Use _spawnve throughout as a common interface for execing a
- program.
- * fork.cc (vfork): Add beginnings of true vfork support.
- * path.cc (sort_by_posix_name): Remove special casing of zero length
- names since they should now be eliminated earlier on.
- (sort_by_native_name): Ditto.
- (mount_info::del_item): Remove hole from mount table specifically, here
- or suffer weird behavior. Suggested by Andrew Dalgleish
- <andrewd@axonet.com.au>.
- * shared.cc: Make SHAREDVER "unsigned" to avoid a compiler warning.
- * spawn.cc : Accommodate additional argument to _spawnve, throughout.
- (_spawnve): Make this a global function and take an hToken argument so
- that it can be used by sexecve. Accommodate experimental vfork
- functionality.
- * winsup.h: Add initial support for per-thread vfork stuff.
- * include/cygwin/version.h: Bump shared memory version number.
-
-Mon Jul 26 20:59:58 1999 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (sort_by_posix_name): Report two zero length strings as being
- equal or suffer an infinite loop.
- (sort_by_native_name): Ditto.
- * shared.cc (shared_info::initialize): Refuse to use a different DLL's
- shared memory.
- * shared.h: Fix mask for child_info sanity test.
-
-Sun Jul 18 16:30:31 1999 Christopher Faylor <cgf@cygnus.com>
-
- * security.cc: Various changes from Corinna.
-
-Sat Jul 17 22:33:45 1999 Christopher Faylor <cgf@cygnus.com>
-
- * fork.cc (fork): Change DuplicateHandle slightly.
- * security.cc (get_nt_attribute): Ignore error return from
- set_process_privileges.
- (set_nt_attribute): Ditto.
-
-Sat Jul 17 00:45:34 1999 Christopher Faylor <cgf@cygnus.com>
-
- * debug.h: Fix ForceCloseHandle1 in non-debug case.
-
-Fri Jul 16 23:47:31 1999 Christopher Faylor <cgf@cygnus.com>
-
- * sigproc.cc (proc_can_be_signalled): Accommodate different flavors of
- myself.
- * include/ddeml.h: Add missing struct.
- * include/wingdi.h: Add missing defines.
-
-Fri Jul 16 23:01:30 1999 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Attempt to cope when srcdir is a relative pathname.
- * fork.cc (fork): Pass handle to parent process to fixup_after_fork.
- Eliminate excess unlock_pinfos.
- * hinfo.cc (hinfo::fixup_after_fork): Use inherited parent handle
- rather than try to open the parent process explicitly.
- * pinfo.cc (record_death): Cosmetic change.
- * sigproc.cc (wait_sig): Add a debugging statement.
- * winsup.h: Reflect change of argument for fixup_after_fork.
-
-Fri Jul 16 11:07:55 1999 Christopher Faylor <cgf@cygnus.com>
-
- * shared.h: Eliminate record_death_nolock. Just pass an argument to
- record_death.
- * pinfo.cc (record_death_nolock): Ditto.
- * dcrt0.cc (__api_fatal): Use record_death with FALSE argument rather
- than record_death_nolock.
- * exceptions.cc (really_exit): Ditto.
- * fork.cc (fork): Remove debugging statement.
-
-Wed Jul 14 22:08:52 1999 Christopher Faylor <cgf@cygnus.com>
-
- Throughout, make parent_alive a local variable. Rename 'alive_parent'
- to 'my_parent_is_alive'.
- * autoload.h: Improve the description of the autoload mechanism.
- * dcrt0.cc: Define parent_alive here.
- (dll_crt0_1): When debugging, rotect handles inherited from fork/exec.
- Force signal thread to finish initializing prior to calling main.
- (dll_crt0): Reorganize child_info stuff to allow common initialization.
- Accept parent_alive handle from invoker and ensure that this is not
- inherited by other processes.
- (do_exit): Ensure that exit_state is not duplicated by a fork.
- (__api_fatal): Call 'try_to_debug' directly.
- * debug.cc: Increase the size of the handle list.
- (threadname): Add an optional argument to control locking.
- * exceptions.cc (error_start_init): Make this a "C" function.
- (try_to_debug): Ditto. Also, use Sleep rather than pause and loop so
- that gdb can get in to interrupt things.
- (sig_handle):
- * external.cc (fillout_pinfo): Reorganize slightly and plan for the
- future.
- * fhandler.h: Add an argument to show the name of the handle for error
- messages to fork_fixup.
- * fhandler.cc (fhandler_base::fork_fixup): Ditto.
- (set_inheriting): Rename a variable for clarity.
- (fhandler_base::fixup_after_fork): Pass in the name of the handle to
- fork_fixup.
- * fhandler_tty (fhandler_tty_common:fixup_after_fork): Ditto.
- (fhandler_tty_slave:fixup_after_fork): Ditto.
- (fhandler_tty_master:fixup_after_fork): Ditto.
- * fhandler_windows.cc (fhandler_windows::fixup_after_fork): Ditto.
- * fhandler_console.cc (fhandler_console::open): Specifically open
- console with ENABLE_PROCESSED_INPUT.
- * fork.cc (sync_with_child): Call abort when DEBUGGING and there's an
- error.
- (resume_child): Ditto. Also, allow an ERROR_INVALID_HANDLE error if it
- can't be duplicated as they seem to occur occasionally when the parent
- copies the stack.
- (fork): Use init_child_info to initialize structure passed to child.
- Remove start time setting in favor of common function. Don't mess with
- parent's parent_alive.
- * heap.cc (sbrk): Simply code slightly.
- * hinfo.cc (hinfo::dup2): Improve error handling.
- * pinfo.cc (set_myself): Set start time here since it is called by
- everything which sets myself.
- (pinfo_init): Remove start_time setting in favor of common function.
- * shared.h (pinfo): Reorganize so that signal stuff falls into section
- of pinfo which is automatically zeroed when a new pid is initialized.
- (PROC_MAGIC): Increment to detect cygwin1.dll's memory passing
- disparities.
- * sigproc.cc (proc_alive): Make this a function. Wait for target pid
- to initialize.
- (my_parent_is_alive): Rename from alive_parent.
- (proc_can_be_signalled): Renamed from proc_alive macro.
- (proc_exits): Use proc_can_be_signaleed().
- (proc_subproc): Don't put parent_alive in child.
- (proc_terminate): Close hwait_subproc in a race-safe way. Ditto
- sync_proc_subproc.
- (sigproc_terminate): Always terminate proc_subproc thread first or it
- may try to use signal thread as it is going away. Wait for signal
- thread to exit.
- (sig_send): Use proc_can_be_signalled().
- (init_child_info): New function. Initializes memory block passed by
- spawn/fork.
- (mutex_stack): Add thread name field.
- (sig_wait): Set active state after all handles have been set up and
- before protecting the handles. Use ForceCloseHandle to close
- subproc_ready as it is now protected. Close signal_mutex here.
- * sigproc.h: Accommodate alive_parent rename.
- * spawn.cc Use init_child_info to initilize memory block passed to
- subprocess.
- * strace.cc (__system_printf): Write to screen before writing to strace
- log. Only write to strace log if we're actually stracing.
- * winsup.h: Declare the 'action on error' functions.
- * utils/Makefile.in: (Patch from Egor Duda <deo@logos-m.ru>) Compile
- strace using -mno-cygwin.
- * utils/strace.cc: Allow ingw concession from Egor Duda. Attempt to
- allow CTRL-C when stracing.
-
-Thu Jul 14 0:39:00 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (alloc_sd): Delete special handling of uid/gid 513.
-
-Thu Jul 13 15:01:00 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (get_file_owner): Fix typo.
- * path.cc (path_conv::path_conv) : Change `return' to `goto end' in
- case of SYMLINK_IGNORE is set.
-
-Mon Jul 5 21:33:00 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (WriteSD): Doesn't set errno if BackupWrite()
- returns ERROR_INVALID_SECURITY_DESCR (which happens on FAT).
-
-Sat Jul 10 13:17:20 1999 Christopher Faylor <cgf@cygnus.com>
-
- * utils/strace.cc (error): Actually output error message.
- (add_child): Duplicate inherited child process handle with all of the
- privileges that we need.
-
-Fri Jul 9 01:37:23 1999 Geoffrey Noer <noer@cygnus.com>
-
- * include/cygwin/version.h: Bump CYGWIN_VERSION_API_MINOR to 14
- in honor of snprintf and vnsprintf additions.
-
-Fri Jul 9 00:04:03 1999 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (path_conv::path_conv): Correct buffer overflow condition.
- * fhandler_console.cc (fhandler_console::open): *Need* to enable
- processed input or CTRL-C won't stop anything unless it's at a prompt.
- (fhandler_console::input_tcsetattr): Ditto.
-
-Thu Jul 8 18:27:49 1999 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Add malloc debugging options.
- * dcrt0.cc (api_fatal): Call abort when debugging so that the debugger
- will pop up.
- * debug.cc (close_handle): Unlock in pathological case.
- * fhandler_console.cc (fhandler_console::read): Always respond to
- windows size changes.
- (fhandler_console::open): Always set things to ~ENABLE_PROCESSED_INPUT
- so that we can control INTR character. Don't set pgid here.
- (fhandler_console::input_tcsetattr): Turn on windows event so that we
- can see screen resizes.
- (fhandler_console::init): Don't set pgid here.
- * fhandler_termios (fhandler_termios::tcinit): Set pgid here.
- * fhandler.h: Fix set_has_acls method return.
- * utils/strace.h: Pass CTRL-Cs to child process.
-
-Wed Jul 7 23:59:50 1999 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Improve dependencies.
- * autoload.h: Work around "function unused" messages for autoload init
- functions.
- * configure.in: Use CHECK_TOOL to find CC so that it will get the
- proper host alias.
- * configure: Regenerate.
- * dcrt0.cc (do_exit): Minor reorganization of termination function
- calls.
- * debug.cc (close_handle): Issue an error when an attempt is makde to
- close a handle with a name different from the one used to record it
- previously.
- * debug.h: Implement new macros for storing arbitrary handle names.
- * exceptions.cc (handle_signal): Terminate the main thread when exiting
- due to signal in signal thread.
- * fhandler.h: Add an extra 'fd' argument to all ready_for_read methods.
- * select.cc: Ditto, throughout.
- * fhandler_console (get_tty_stuff): Protect the tty_stuff handle here.
- * fhandler_termios.cc (fhandler_termios::line_edit): Accommodate fd
- argument to ready_for_read.
- * fhandler_tty.cc (fhandler_tty_master::init): Close an unneeded thread
- handle.
- * fork.cc (fork): Use standard name when protecting process handle.
- * spawn.cc (spawn_guts): Ditto.
- * shared.cc (open_shared_file_map): Protect cygwin_shared handle here.
- * sigproc.cc: Throughout, close child process handle using standard
- name.
- * syscalls.cc (read_handler): Check that fd is still open prior to
- performing an operation. Supply fd argument for ready_for_read.
- * (_read): Supply fd argument for read_for_read.
- * tty.cc (tty_list::terminate): Close unneeded handles as tty is
- closing down.
- (tty_list::allocate): Protect against signals.
-
-Mon Jul 5 14:52:40 1999 Christopher Faylor <cgf@cygnus.com>
-
- * cygwin.din: Export new snprintf and vnsprintf functions courtesy of
- Egor Duda <deo@logos-m.ru>.
-
-Sun Jul 4 23:54:43 1999 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (sigbegin): New function. Called prior to dispatching
- to signal handler.
- (sigreturn): New function. Called after signal handler returns.
- (set_process_mask): Make stdcall.
- (call_handler): Remove sigwrap asm stuff in favor of new
- sigbegin/sigreturn scheme.
- * winsup.h: Change set_process_mask declaration.
-
-Sun Jul 4 22:00:14 1999 Christopher Faylor <cgf@cygnus.com>
-
- * syscalls.cc (stat_worker): Previous change to check for extension
- found dots not in the filename part. Fix this.
-
-Sat Jul 3 23:22:55 1999 Christopher Faylor <cgf@cygnus.com>
-
- * include/wincon.h: Add some missing defines.
- * environ.cc: Remove extern which is now in winsup.h.
- * fhandler.cc (get_file_owner): Rename argument. Test for allow_ntsec.
- (get_file_group): Ditto.
- (fhandler_disk_file::fstat): Use new method inode checking.
- * fhandler.h: Rename a method.
- * security.cc (set_file_attribute): Take an additional argument to
- determine if ntsec security setting should be used.
- * dir.cc (mkdir): Pass acl info to set_file_attribute.
- * syscalls.cc (chown): Ditto.
- (chmod): Ditto.
- * winsup.h: Define allow_ntsec here.
-
-Sat Jul 3 15:09:34 1999 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler.cc (fhandler_disk_file:;fstat): Move check of disk volume to
- path_conv. Use new methods for determining if file system is ACL
- capable.
- (fhandler_disk_file::open): Set "has acls" flag here.
- * fhandler.h: Store acl information in fhandler base class.
- * path.cc (path_conv): Set acl information on successful return.
- * path.h: Add acl info to path_conv class.
- * security.cc (get_file_attribute): Set ENOSYS if can't get extended
- attributes.
- * syscalls.cc (chown): Pass acl information from path_conv to
- get_file_attributes.
- (chmod): Ditto.
- (stat_worker): Ditto.
- * uinfo.cc: Make all exported functions extern "C".
- * winsup.h: Add rootdir() declaration.
-
-Fri Jul 2 15:13:08 1999 Christopher Faylor <cgf@cygnus.com>
-
- * autoload.h: New file.
-
-Thu Jul 1 23:16:34 1999 Christopher Faylor <cgf@cygnus.com>
-
- * net.cc (cygwin_gethostname): Use new win32_gethostname to
- disambiguate between cygwin and winsock version.
- * tty.cc (creat_tty_master): Disambiguate by using cygwin_gethostname
- to find the hostname.
- * winsup.h: Declare cygwin_gethostname.
-
-Thu Jul 1 22:36:31 1999 Christopher Faylor <cgf@cygnus.com>
-
- Throughout, remove check for winsock initialization and indirect
- references to winsock functions in favor of new dynamic DLL loading
- method.
-
- * Makefile.in: Remove unneeded libraries.
- * cygwin.din: Make gethostname == cygwin_gethostname like other network
- functions.
- * dcrt0.cc: Implement new "autoload" functionality for loading DLLs and
- functions as they are needed. Add autoload functions for user32.dll.
- (cygwin_dll_func_load): New function.
- (dll_crt0): Issue a fatal error message if attempt to mix different
- version DLLs is detected.
- (api_fatal): Correct inexplicable use of buf + 8 when printing error
- message into a buffer.
- * fhandler.h: Cosmetic fixes.
- * fhandler_tty.cc (fhandler_tty::close): Temporarily "if 0" out code
- which sends EOF pulse to children. This should only happen when last
- parent fd closes.
- * heap.cc (sbrk): Implement new sbrk mechanism which returns memory to
- Windows when top of heap decreases beyond a page boundary.
- (getpagesize): New function.
- * fork.cc (fork): Save new heap values in stuff passed to child.
- * hinfo.cc (hinfo::build_fhandler): Don't do any checking on a handle
- if the handle is NULL. Assume that it is a disk file.
- * net.cc: Redo winsock functions to use dynamic loading scheme.
- * shared.cc (shared_info::initialize): Cosmetic change.
- * shared.h: Change magic number for memory block sent to child
- processes. Accommodate new heap information in child_info.
- * sigproc.cc (sig_dispatch_pending): Remove some memory debugging checks.
- (__release_signal_mutex): Ditto.
- * syscalls.cc (stat_worker): Don't attempt the .exe hack unless the
- previous attempt to open the file resulted in an "ERROR_FILE_NOT_FOUND"
- and the file did not already contain an extension.
- * times.cc: Initialize static NO_COPY variables throughout or they will
- not actually be NO_COPY.
- * winsup.h: Rename heap fields in per_process to accommodate new sbrk.
- Eliminate winsock stuff invalidated by dynamic loading change.
- * include/winsock.h: Make this file C++ safe.
-
-Sun Jun 27 17:07:34 1999 Christopher Faylor <cgf@cygnus.com>
-
- * debug.h: Don't define MALLOC_DEBUG by default.
- * fhandler.cc (fhandler_base::set_name): Always set names to NULL. Add
- more slop to end of win32_path_name.
- (fhandler_base::de_linearize): Set names to NULL. They'll be assigned
- by the caller.
- (fhandler_disk_file::get_native): Delete.
- * fhandler.h: Ditto.
- * hinfo.cc (hinfo::de_linearize_fd_array): Set path names after the
- structure has been "delinearized".
- * malloc.cc: Add debugging versions of malloc functions.
- * syscalls.cc (stat_worker): Eliminate static buffer for thread safety.
-
-Wed Jun 23 22:53:00 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_disk_file::fstat): If get_file_attribute()
- signals a nonexistant acl, fstat sets default attributes now.
-
-Wed Jun 23 10:22:56 1999 Geoffrey Noer <noer@cygnus.com>
-
- * include/cygwin/version.h: Bump CYGWIN_VERSION_API_MINOR to 13.
-
-Wed Jun 23 10:39:07 1999 Mumit Khan <khan@xraylith.wisc.edu>
-
- * cygwin.din (gamma, gammaf, lgamma, lgammaf): Export.
- (j0,j0f,j1,j1f,jn,jnf): Export underscore versions as well.
-
-Mon Jun 21 21:34:06 1999 Christopher Faylor <cgf@cygnus.com>
-
- Sprinkle MALLOC_CHECK macro throughout. When turned on, this will give
- a slightly better idea of where memory corruption occurs. Add slightly
- modified versions of "error_start" code from Egor Duda
- <deo@logos-m.ru>.
- * Makefile.in: Add `utils' target.
- * dcrt0.cc (do_exit): Attempt to detect loop conditions where do_exit
- is called reentrantly and avoid the previously executed code in this
- case.
- * debug.h: Define MALLOC_CHECK macro for use with malloc debugging.
- * environ.cc (environ_init): Add more slop at end of environ string
- just to work around buggy programs.
- (parse_options): Add error_start option to control core dumping or gdb
- invocation.
- * exceptions.cc (stackdump): New function. Dumps stack to stderr.
- (error_start_init): New function. Initialize action on "core dumping"
- error.
- (handle_exceptions.cc): Use stackdump command to dump stack. Call
- try_to_debug.
- (set_process_mask): Must be __stdcall or compiler get's confused.
- (sig_handle): Detect SIGQUIT and SIGABRT. Do a "stackdump" for these.
- * fhandler.cc (get_file_owner): Add an argument to determine if
- function should check for NT security.
- (get_file_group): Ditto.
- (fhandler_base::set_name): Don't free "fhandler_disk_dummy_name" path
- names.
- (rootdir): New function, pulled from the pages of syscalls.cc.
- Determines the root dir of a given path.
- (fhandler_disk_file::fstat): Get volume information of file in question
- to determine if inodes are permanent and acls are available. This
- replaces previous WinNT test.
- (fhandler_base::~fhandler_base): free "fhandler_disk_dummy_name" path
- names.
- * fhandler.h: Change get_file_* declarations.
- * fhandler_console.cc: Back out most of scroll fixes from April 17.
- They caused weird scrolling behavior.
- * fhandler_tty.cc (fhandler_pty_master::accept_input): Add debugging
- message.
- * security.cc (get_file_attribute): Add additional "check for ACL"
- argument.
- * path.cc (symlink_check_one): Use new argument to get_file_attribute.
- * sigproc.cc (wait_subproc): Don't exit wait loop if WaitForMultipleObject
- returns an error. Instead, loop for a while in case this is an expected
- error.
- * sigproc.h: Remove __stdcall from set_process_mask.
- * spawn.cc (linebuf): Use initializers to set initial values.
- (linebuf::append): Be defensive and ensure that enough space is
- allocated for the new argument.
- (linebuf::prepend): Ditto.
- (spawn_guts): Correct logic which broke up program argument in a #!
- script.
- * syscalls.cc (chown): Use new argument to get_file_attribute.
- (chmod): Use new argument to get_file_owner and get_file_group.
- (stat_worker): Ditto.
- (statfs): Break out code that determined the root directory of a given
- path. Use new rootdir function instead.
- * winsup.h: Reflect new get_file_attribute argument.
- * include/sys/strace.h: Add "NOTALL" flag so that voluminous debugging
- output can be avoided.
- * utils/strace.cc: Honor NOTALL flag. Run at a higher priority.
-
-Mon Jun 14 18:33:08 1999 Christopher Faylor <cgf@cygnus.com>
-
- * syscalls.c (stat_worker): Consolidate calls to fh.fstat for both
- directories and normal files.
- * fhandler_tty.cc (fhandler_pty_master::close): Ensure that an "EOF
- pulse" is sent to any executing child processes.
- * path.cc (symlink_check_one): Check for ':\n' as well as '#!' to
- determine if a file is executable.
-
-Mon Jun 14 16:04:00 1999 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler_tty.cc (fhandler_pty_master::accept_input): Set read_retval
- prior to performing a write to avoid a potential race condition.
- * fhandler_termios.cc (fhandler_termios::line_edit): Don't set
- read_retval here. It has to be set in an fhandler_tty accept_input.
- * select.cc (peek_pipe): Fix typo which caused read_selected to be
- tested twice rather than except_selected.
- * shared.h (class tty_min): Remove read_retval from here.
- (class tty) Put it here.
-
-Mon Jun 14 13:08:58 1999 Christopher Faylor <cgf@cygnus.com>
-
- * utils/Makefile.in: Consolidate and simplify.
-
-Mon Jun 14 12:43:32 1999 Christopher Faylor <cgf@cygnus.com>
-
- Throughout, remove reliance on strace_* fields in pinfo class. Use
- global instead. Remove STRACE_DUMP and STRACE_CACHE logic.
- * pinfo.cc (set_myself): New function.
- * dcrt0.cc (dll_crt0_1): Use the new function.
- * environ.cc (parse_options): Remove strace environment variable logic.
- (environ_init): Ditto.
- * exceptions.cc (call_handler): Remove strace mutex considerations.
- * fhandler_termios (fhandler_termios::line_edit): Remove STRACE_CACHE
- logic.
- * localtime.cc: Define 'lint' to eliminate warnings.
- * smallprint.c (__small_vsprintf): Remove text formatting of windowss
- errors. This is now done in the 'strace' program.
- * strace.cc: Define 'strace_active' variable to control whether strace
- should be carried out.
- (strace_open): Delete.
- (strace_init): Delete.
- (get_strace_mutex): Delete.
- (release_strace_mutex): Delete.
- (strace_vsprintf): Preserve last error.
- (strace_write): Communicate with strace program using
- OutputDebugString.
- (strace_dump): Delete.
- (mark): Gut.
- * winsup.h: Remove a declaration. Add a new one.
- * include/sys/strace.h: Modify to accommodate new strace scheme.
- * utils/Makefile.in: Build strace.exe
- * utils/strace.cc: New file.
-
-Sat Jun 12 22:22:00 1999 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_disk_file::fstat): Must compute i-node numbers
- via `get_namehash' for Windows 9x.
-
-Sat Jun 12 10:54:00 1999 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::read): Returns correct value
- if raw_read fails.
- * fhandler_raw.cc: More trace output.
- * fhandler_floppy.cc: Ditto.
- * fhandler_tape.cc: Ditto.
-
-Thu Jun 10 14:01:05 1999 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.c (handle_exceptions): Use ".stackdump"
- extension instead of ".core".
- * path.cc (mount_info::read_mounts): Prescan the mount lists
- for /cygdrive stuff to delete rather than attempting to
- delete it in the main "add mount loop".
- (mount_item::getmntent): Fix "system"/"user" determination.
- * winsup.h: Use void methods in thread classes where
- appropriate.
-
-Wed Jun 9 23:16:04 1999 Christopher Faylor <cgf@cygnus.com>
-
- * mkvers.sh: Issue error if can't find version information.
-
-1999-06-09 DJ Delorie <dj@cygnus.com>
-
- * localtime.c: new file; public domain timezone handling routines.
- * tz_posixrules.h: new file; POSIX default timezone data
- * times.cc: comment out localtime, gmtime, replace tzset with
- cygwin_tzset
- * Makefile.in: add localtime.c
-
-Wed Jun 9 00:49:04 1999 Christopher Faylor <cgf@cygnus.com>
-
- * spawn.cc (spawn_guts): Correctly handle #! processing when line
- ends with white space. Also correctly handle scripts that do not
- begin with #!.
-
-Mon Jun 7 17:04:36 1999 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler_console.cc (fhandler_console::open): Need to initialize
- tc here, too.
- (fhandler_console::init): Initialize tc earlier.
-
-Mon Jun 7 00:02:51 1999 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler.h (fhandler_termios): Move tc initialization
- into init method, etc.
- (fhandler_tty_common): Ditto.
- * fhandler_console.cc (fhandler_console::fhandler_console):
- Move tc initialization to init method.
- (fhandler_console::init): Initialize tc stuff here.
- (fhandler_console::dup): Ditto.
- (fhandler_console::fixup_after_fork): Ditto.
- (fhandler_console::de_linearize): Ditto.
- * fhandler_termios (tcinit): Rename constructor.
- Accept force argument to force termios initialization.
- * fhandler_tty.cc (fhandler_tty_master::init): Move tc initialization
- to common_init.
- (fhandler_tty_common::dup): Use tcinit () to initialize tc field.
- * tty.cc (tty::common_init): Ditto.
-
-Sun Jun 6 22:19:09 1999 Christopher Faylor <cgf@cygnus.com>
-
- * tty.cc (tty_list::terminate): Add \n to output message.
- (tty::init): Clear slave_opened field or we can't reopen
- ttys.
-
-Fri Jun 4 23:58:17 1999 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler_tty.cc (fhandler_tty_slave::open): Reorganize
- slightly to avoid a race with get_ttyp()->was_opened.
-
-1999-06-04 DJ Delorie <dj@cygnus.com>
-
- * times.cc (totimeval): scale sub properly.
- (gettimeofday): don't bias by timezone.
-
-Thu Jun 3 13:24:17 1999 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler.h (fhandler_tty_common): Add two new methods.
- * fhandler_tty.cc: Use new {acquire,release}_output_mutex
- methods throughout for output_mutex.
- (fhandler_tty_common::__acquire_output_mutex): New method.
- (fhandler_tty_common::__release_output_mutex): New method.
- * shared.h (get_output_mutex): Rename to open_output_mutex.
-
-Wed Jun 2 16:06:26 1999 Geoffrey Noer <noer@cygnus.com>
-
- * utils/mkpasswd.c (main): account for long int args to printfs.
-
-Wed Jun 2 16:08:08 1999 Christopher Faylor <cgf@cygnus.com>
-
- * smallprint.c (__small_vsprintf): Conditionalize display of
- textual messages under CYGWIN_TEXT_ERROR.
- * ntea.cc: Remove debugging code.
-
-Wed Jun 2 16:04:00 1999 Corinna Vinschen <corinna@vinschen.de>
-
- * dcrt0.cc (dll_crt0_1): Call the functions `get_admin_sid',
- `get_system_sid' and `get_world_sid' before heap initialization
- to avoid heap fragmentation.
- * security.cc (get_nt_attribute): Don't allocate memory
- anymore. All memory is taken from stack.
- (set_nt_attribute): Ditto.
- (alloc_sd): Ditto. Change parameters to get a pointer to a
- preallocated security descriptor and a pointer to it's length.
- * shared.cc (sec_user): Don't allocate memory anymore. All
- memory is taken from stack. Change parameters to receive a
- pointer to a preallocated security buffer.
- * shared.h: Change prototype for `sec_user' and `sec_user_nih'.
- * sigproc.cc (getsem): Change call to `sec_user'. Additonally
- buffer for `sec_user'.
- * spawn.cc (spawn_guts): Ditto.
- Change all error output in function `sec_user' and in module
- `security.cc' from error text to error number output.
-
-Tue Jun 2 21:54:21 1999 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (get_if_flags): Change the UP and RUNNING state
- of disconnected RAS interfaces to true.
-
-Thu Jun 1 22:47:00 1999 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (get_system_sid): New function to create
- a SID for the well known group of local system.
- (alloc_sd): New function.
- (alloc_sd): Give ALL permissions to `system'.
- * shared.cc (sec_user): Give ALL permissions to `system'.
- (sec_user): Provide additionalparameter for a second SID.
- This is used for `CreateProcessAsUser' call.
- (sec_user_nih): Ditto.
- * shared.h: Change prototypes for `sec_user' and
- `sec_user_nih'.
- * spawn.cc (spawn_guts): Now using `sec_user' in
- `CreateProcessAsUser' call, if ntsec is set.
-
-Thu Jun 1 14:17:00 1999 Corinna Vinschen <corinna@vinschen.de>
-
- * utils/mkpasswd.c: Change to output native names of
- well known groups `Everyone' (SID 0) and `system' (SID 18).
- * utils/mkgroup.c: Ditto plus output of native name of
- well known group `None' (SID 513).
-
-Mon May 31 22:10:57 1999 Christopher Faylor <cgf@cygnus.com>
-
- * path.h: Use bit mask flags in path_conv to save exec,
- symlink, binary status. Use methods to access and set
- these flags.
- * fhandler.cc: Use methods to access path_conv flags
- throughout.
- * path.cc: (symlink-check_one): Accept a bitmask flags
- variable to accommodate path_conv changes.
- (path_conv::path_conv): Propagate path_flags from mount
- table to path_conv class. Avoid walking the mount table
- twice to find "binary" info.
- (mount_info::conv_to_win32_path): Accept additional flags
- argument. Don't add trailing slash if not required.
- Fill out both paths when cygdrive.
- (mount_info::cygdrive_win32_path): Change debugging output
- slightly.
- (mount_info::set_flags_from_win32_path): Generalize from
- mount_info::binary_win32_path_p.
- (mount_item::getmntent): Honor MOUNT_EXEC flag.
- * shared.h: Add new method to mount_info class.
- * include/sys/mount.h: Add a comment.
- * utils/mount.cc: Accept -x to force a mountpoint to default
- to executable permission. Rename automount stuff to cygdrive.
-
-Mon May 31 19:00:00 1999 Corinna Vinschen <corinna@vinschen.de>
-
- * environ.cc (environ_init): Set ntsec option by default
- if running under NT.
- * security.cc (set_nt_attribute): Delete superfluoues code.
- * shared.cc (sec_user): Don't set owner in created security
- descriptor.
- * sigproc.cc (getsem): Use `sec_user' instead of `sec_user_nih'.
- * spawn.cc (spawn_guts): Set security attribute of
- `CreateProcess' to `sec_user' if ntsec is set, `sec_all_nih'
- otherwise.
-
-Mon May 31 19:27:36 1999 Christopher Faylor <cgf@cygnus.com>
-
- Throughout, change "automount" to cygdrive.
- Throughout, change mount flags from signed to unsigned.
-
- * path.cc (iscygdrive): New macro.
- (normalize_posix_path): Tack a '/' on the end of constructed
- path only if there isn't one there already.
- (mount_info::init): Simplify slightly.
- (mount_info::conv_to_win32_path): Don't search for automount
- stuff in the mount table. Instead special case the cygdrive
- handling so that it will always be acceptable to use /cygdrive
- regardless of other mounts.
- (mount_info::cygdrive_posix_path): Rename from
- build_automount_mountpoint_path. Fully build a posix path
- given inputs.
- (mount_info::cygdrive_win32_path): New function.
- (mount_info::conv_to_posix_path): Precalculate the length
- of the pathbuf for multiple uses. Just use cygdrive_posix_path
- to derive a /cygdrive/x/foo style path.
- (mount_info::read_mounts): Don't read /cygdrive/x mounts from
- the registry. Delete them.
- (mount_info::from_registry): Read cygdrive info earlier for
- subsequent use by other mount routines.
- (mount_info::add_reg_mount): Cosmetic changes.
- (mount_info::read_cygdrive_info_from_registry): Always add
- trailing slash to cygdrive. Precalculate the length of the
- cygdrive.
- (mount_item::getmntent): Cosmetic changes.
- (mount): Return EINVAL on attempt to add a mount point which
- begins with the current cygdrive.
- * path.h: Remove unused script_p from path_conv class.
- * shared.h: Add cygdrive_length to mount_list. Add new
- cygdrive_win32_path method.
- * include/sys/mount.h: Use enums for MOUNT_ constants.
-
-1999-05-29 Keith Seitz <keiths@cygnus.com>
-
- * errno.cc (errmap): Map ERROR_NEGATIVE_SEEK to EINVAL.
-
-Fri May 28 21:43:56 1999 Christopher Faylor <cgf@cygnus.com>
-
- * times.cc (to_time_t): Rewrite slightly to avoid compiler
- overoptimization.
-
-Fri May 28 21:10:33 1999 Corinna Vinschen <corinna@vinschen.de>
-
- * sigproc.cc (getsem): Set security attribute of process
- semaphore to `sec_user_nih()', if ntsec is set, `sec_none_nih'
- otherwise.
-
-Wed May 26 22:56:51 1999 Christopher Faylor <cgf@cygnus.com>
-
- Rename inuse_event and inuse_event_exists to "slave_alive"
- throughout.
- * shared.h: Eliminate inuse_event. Replace with a boolean.
- Elminate slave_opened.
- Add some function declarations used by new methods.
- * fhandler_tty.cc (fhandler_pty_master::hit_eof): Use better
- method for determining EOF for pty master.
- (fhandler_tty_slave::open): Use method to acquire output_mutex.
- Always create "inuse_event". Delete call to slave_opened.
- (fhandler_tty_slave::write): Reorganize debugging output
- slightly.
- (fhandler_tty_master::close): Eliminate reference to inuse_event.
- * tty.cc (tty_list::terminate): Eliminate call to slave_opened.
- (tty_list::connect_tty): Use new exists() method to find out if
- a tty exists.
- (tty_list::allocate_tty): Rename argument for clarity. Use
- new exists method to determine tty existence.
- (tty::inuse): Delete.
- (tty::init): Remove reference to inuse_event.
- (tty::common_init): Ditto.
- (tty::slave_opened): Delete.
- * winsup.h: Move some function declarations to shared.h.
-
-Mon May 24 22:10:34 1999 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (WriteSD): Don't set errno, if BackupWrite()
- returns ERROR_NOT_SUPPORTED.
- * security.cc (set_nt_attribute): Change condition for
- calling LookupAccountName() with domain name again.
- * shared.cc (sec_user): Ditto.
-
-Mon May 24 22:10:34 1999 Corinna Vinschen <corinna@vinschen.de>
-
- * include/winnt.h: Temporary erased definitions of QuadPart
- in LARGE_INTEGER and ULARGE_INTEGER.
- * security.cc (set_nt_attribute): Set standard attributes so
- that reading and writing attributes for user and administrators
- isn't hindered.
-
-Mon May 24 22:10:34 1999 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (ReadSD): New function.
- * security.cc (WriteSD): Ditto.
- * security.cc (get_admin_sid): Moved from shared.cc.
- * security.cc (set_process_privileges): Moved from syscalls.cc,
- shortened, changed return typ to int. Sets errno now.
- * security.cc (set_file_attributes): Return type changed to int.
- * security.cc (get_file_attributes): Ditto.
- * security.cc (set_nt_attributes): Ditto. Cares for setting
- of S_ISVTX now.
- * security.cc (get_nt_attributes): Ditto.
- * syscalls.cc (rel2abssd): #if 0'ed.
- * syscalls.cc (set_process_privileges): Moved to security.cc.
- * syscalls.cc (chown): Rewritten.
- * syscalls.cc (chmod): Change call order of the functions
- set_file_attributes() and SetFileAttributesA().
- * fhandler.cc (fhandler_base::fstat): Change check for
- return value of get_file_attributes().
- * ntea.cc (NTReadEA): returns TRUE now, if allow_ntea is unset.
- * ntea.cc (NTWriteEA): returns TRUE now, if allow_ntea is unset.
- * shared.cc (get_admin_sid): Moved to security.cc.
- * path.cc (symlink_check_one): Change check for return value
- of get_file_attributes().
-
-Mon May 24 22:10:34 1999 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (get_world_sid): Rewrite.
- * security.cc (world_full_access): Delete.
- * grp.cc: Use gid 0 as default gid.
- * grp.cc (read_etc_group): Look for account name of world group.
- * fhandler.cc (fhandler_base::open): Call `set_file_attribute'
- only in case of disk file.
-
-Mon May 24 22:10:34 1999 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (get_file_attribute): Patched incorrect test
- for symlink.
- * security.cc (set_file_attribute): ditto.
-
-Mon May 24 22:10:34 1999 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc: Special handling for user and/or administrators
- permissions to write (extended) attributes.
-
-Mon May 24 22:10:34 1999 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc: Don't allow 513(none) as user or group.
-
-Mon May 24 22:10:34 1999 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc: new functions `set_nt_attribute()', `get_nt_attribute()'
- and `set_file_attribute()' with additional parameters `uid' and `gid',
- to support real NT security.
- * winsup.h: Prototype for `set_file_attribute()' with four
- parameters.
- * dir.cc (mkdir): Calls `set_file_attribute()' now.
- * syscalls.cc (chown): ditto.
- * syscalls.cc (chmod): ditto, with correct uid/gid.
-
-Mon May 24 22:10:34 1999 Corinna Vinschen <corinna@vinschen.de>
-
- * shared.cc: New function `get_admin_sid()' to get a SID
- of the administrators group or of administrator.
- New functions `sec_user()' and `sec_user_nih()' to get
- SECURITY_ATTRIBUTES with all permissions for the user and
- the administtrator group.
- * shared.h: Prototypes for the above new functions `sec_user()'
- and `sec_user_nih()'.
- * sigproc.cc (getsem): Create process semaphore with
- permissions set by `sec_user()'.
-
-Mon May 24 20:29:29 1999 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler_console.cc (fhandler_console::output_tcsetattr):
- ONLRET was erroneously used in place of ONLCR.
- (fhandler_console::read): Honor get_r_no_interrupt () so
- that interrupts don't screw up tty reading.
- * fhandler.h: Add some methods to fhandler_tty_master.
- * fhandler_termios.cc (fhandler_termios::fhandler_termios):
- ONLRET was erroneously used in place of ONLCR.
- * fhandler_tty.cc (fhandler_tty_master::init): Associating
- console capabilities with the tty capabilities is a bad
- idea. Go back to using the console's own.
- (fhandler_tty_master::fixup_after_fork): New method.
- (fhandler_tty_master::de_linearize): New method.
- (fhandler_tty_master::init_console): New method.
-
-Mon May 24 09:58:02 1999 Christopher Faylor <cgf@cygnus.com>
-
- * include/rapi.h: Add some more definitions.
-
-Sat May 22 21:45:01 1999 Mumit Khan <khan@xraylith.wisc.edu>
-
- * scandir.cc (scandir): Handle errno correctly. Do preallocation to
- reduce realloc calls.
- (alphasort): Use strcoll, not strcmp.
-
-Sat May 22 19:03:47 1999 Mumit Khan <khan@xraylith.wisc.edu>
-
- * dll_init.cc (DllList::recordDll): Forkee must reload dlopened
- DLLs. Also use strcasematch, not strcmp to compare file name.
-
-Wed May 19 14:38:57 1999 Christopher Faylor <cgf@cygnus.com>
-
- * spawn.cc (linebuf::prepend): Fix possible reference to
- uninitialized memory.
- * winsup.h: Remove WINSUP_NO_CLASS_DEFS workaround.
- * libccrt0.cc: Ditto.
- * utils/cygwin.cc: Ditto.
- * utils/mount.cc: Ditto.
- * utils/ps.cc: Ditto.
-
-Sun May 16 17:22:50 1999 Christopher Faylor <cgf@cygnus.com>
-
- * include/winnt.h: Revert the previous reversion. The problem
- with this include file was completely misdiagnosed.
-
-Sun May 16 16:05:07 1999 Christopher Faylor <cgf@cygnus.com>
-
- * sysdef/rapi.def: New definition file for RAPI.DLL.
- * include/rapi.h: Preliminary RAPI declarations.
-
-Sun May 16 15:37:15 1999 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Remove more obsolete code.
-
-Fri May 14 19:30:53 1999 Christopher Faylor <cgf@cygnus.com>
-
- * include/winbase.h: Change conditional to correctly refer
- to UNDER_CE rather than UNICODE.
- * include/winnt.h: Update MIPS and SHx CONTEXT definitions.
-
-Tue May 11 21:19:59 1999 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (call_handler): Restore previously removed
- 'leave' command as its absence causes programs to crash. It
- should never have been deleted.
-
-Tue May 11 12:04:02 1999 Norbert Schulze <Norbert.Schulze@rhein-neckar.de>
-
- * times.cc (timezone): Properly adjust for daylight savings time.
- (gettimeofday): Ditto.
- (localtime): Ditto.
- (tzset): Ditto.
-
-Mon May 10 23:31:36 1999 Christopher Faylor <cgf@cygnus.com>
-
- * include/winnt.h: Revert to previous version. There are problems
- with the previous checkin.
- * fhandler_console.cc (fhandler_console::de_linearize): Add defensive
- code to ensure that console handles are opened correctly.
-
-Sun May 9 22:31:31 1999 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Forgot to remove a reference to the deleted targets
- below.
-
-Fri May 7 17:28:12 1999 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Remove obsolete code.
- * exceptions.cc (set_process_mask): Make this a __stdcall.
- * sigproc.h: Fix declaration of set_process_mask.
- * include/winnls.h: Add new code page defines.
- * include/winnt.h: Various fixes from Anders Norlander
- <anorland@hem2.passagen.se>.
-
-Tue May 4 22:20:05 1999 Christopher Faylor <cgf@cygnus.com>
-
- * include/winnt.h: Fix CONTEXT pointer typedefs.
-
-Mon May 3 11:32:32 1999 Mumit Khan <khan@xraylith.wisc.edu>
-
- * smallprint.c (__small_vsprintf): Display textual messages
- for "%E" format type.
- * dlfcn.cc (set_dl_error): Lose the "Win32 ".
-
-Sun May 2 12:22:17 1999 Mumit Khan <khan@xraylith.wisc.edu>
-
- * utils/Makefile.in (EXE_LDFLAGS): Provide default.
-
-1999-04-30 DJ Delorie <dj@cygnus.com>
-
- * winsup.h (WINSUP_NO_CLASS_DEFS): if defined, don't include class
- definitions (work around gcc bug)
- * libccrt0.cc (WINSUP_NO_CLASS_DEFS): define
- * utils/cygwin.cc (WINSUP_NO_CLASS_DEFS): define
- * utils/mount.cc (WINSUP_NO_CLASS_DEFS): define
- * utils/ps.cc (WINSUP_NO_CLASS_DEFS): define
-
-Thu Apr 29 13:55:57 1999 Mumit Khan <khan@xraylith.wisc.edu>
-
- * shared.h (read_mounts): Change prototype to accept a reference
- to reg_key, not a copy.
- * path.cc (read_mounts): Likewise.
-
-Thu Apr 29 11:06:37 1999 Mumit Khan <khan@xraylith.wisc.edu>
-
- * configure.in (EXE_LDFLAGS): Always add newlib if part of the
- build tree.
- * configure: Regenerate.
-
- * utils/Makefile.in (INCLUDES): Add newlib include directories.
- (LDFLAGS): Replace this with
- (ALL_LDFLAGS): this to avoid being overridden from higher level
- Makefiles.
-
-Wed Apr 28 17:01:12 1999 Christopher Faylor <cgf@cygnus.com>
-
- * include/winnt.h: Add some handheld support.
- * shared.cc (open_shared): Don't call OpenFileMapping with
- a null name pointer. If the name is NULL it can't be opened.
-
-Fri Apr 23 00:28:38 1999 Christopher Faylor <cgf@cygnus.com>
-
- * winsup.h: Always clear memory in thread .create method or
- suffer uninitialized pointers, etc.
-
-Wed Apr 21 03:56:54 1999 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler_console.cc (fhandler_console::fhandler_console):
- Set fork_fixup flag to ensure that shared info is duplicated.
- (get_tty_stuff): Ensure that tty_stuff is initialized.
- (fhandler_console::fixup_after_fork): Really force tc and
- tty_stuff initialization. Close console handles or suffer
- handle leak. (needs to be fixed)
- (fhandler_console::de_linearize): Force tc and tty_stuff
- initialization.
-
-Mon Apr 19 14:54:46 1999 Geoffrey Noer <noer@cygnus.com>
-
- * include/cygwin/version.h: Bump CYGWIN_VERSION_API_MINOR to 12.
-
-Sat Apr 17 15:35:34 1999 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler_console (fhandler_console::fixup_after_fork): Make sure
- that new shared memory for console is initialized.
- (fhandler_console::scroll_screen): Set region bottom correctly.
- (fhandler_console::write_normal): Fix win95 problem where attribute
- was propagated to scrolled region.
- * include/wingdi.h: Fix GOBJENUMPROC prototype.
-
-Wed Apr 7 20:00:00 1999 John Fortin (fortinj@ibm.net)
-
- * pthread.cc (pthread_suspend): New function.
- (pthread_continue): Ditto.
- * include/pthread.h: added pthread_suspend and pthread_continue
- prototypes.
- * cygwin.din: added above functions.
- * thread.h: Add 'bool suspended' to class MTitem. Prototype
- __pthread_suspend __pthread_continue.
- * thread.cc (__pthread_suspend): New function.
- (__pthread_continue): New function.
-
-Sun Apr 4 23:00:00 1999 John Fortin (fortinj@ibm.net)
-
- * pthread.cc (pthread_join): New function.
- (pthread_detach): New function.
- * include/pthread.h: added pthread_join and pthread_detach prototypes.
- * cygwin.din: added above functions for exports.
- * thread.h: Added char joinable to MTitem class. Add void *
- return_ptr to ThreadItem class to receive pointer from pthread_exit
- and pthread_join. Add __pthread_join and __pthread_detach prototypes.
- * thread.cc: Change thread_init_wrapper to set item->return_ptr=ret
- and comment out item->used = false. Need to look at this more.
- (__pthread_join): New function.
- (__pthread_detach): New function.
- (__pthread_exit): Implement ( was NOT_IMP ).
- * thread.cc (MTinterface::FindNextUnused) : Use joinable != 'Y' as
- an additional conditional. We may need to use this info in
- pthread_join.
-
-Mon Apr 5 23:09:06 1999 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (do_exit): Change a variable name to minimize confusion.
- * fhandler.h (fhandler_tty): Remove ttyp field in favor of get_ttyp
- method.
- * fhandler_tty.cc: Use get_ttyp () method to retrieve pointer to
- tty device throughout.
- (fhandler_tty_master::init): Point console tc at tty's tc so
- that they share the same termios structure.
- * select.cc (fhandler_tty_common::ready_for_read): Use get_ttyp
- method.
- * tty.cc (tty::common_init): Ditto.
-
-Mon Apr 5 00:22:30 1999 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler_console.cc (fhandler_console::char_command): Make
- setting of scrolling region cause the cursor to be placed at
- the beginning of the scrolling region.
- * thread.cc (__pthread_kill): Defend against item->sigs being
- uninitialized.
- (__pthread_sigmask): Defened against item->sigs being uninitialized.
-
-Wed Mar 31 22:52:18 1999 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (dll_crt0): Restore pointer to shared console
- terminfo structure. This allows subprocesses to set
- sticky console attributes.
- * fhandler_console.cc (get_tty_styff): New function. Returns
- pointer to shared console terminfo structure, allocating shared
- memory if required.
- (fhandler_console::fhandler_console): Use get_tty_stuff().
- (fhandler_console::de_linearize): Ditto.
- * fork.cc (fork): Save shared console handle for export to
- subprocesses.
- * spawn.cc (spawn_guts): Ditto.
- * shared.cc (open_shared_file_map): Rewrite to use generic
- open_shared() function.
- (open_shared): New function. Generic shared memory open
- used by console and cygwin shared memory.
- * shared.h: Define new stuff used by above.
-
-Wed Mar 31 01:46:23 1999 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler.h (fhandler_tty): Set tc = ttyp.
- * fhandler_tty.cc (fhandler_tty_master::init): Ditto.
- (fhandler_tty_common::dup): Ditto.
- * tty.cc (tty::common_init): Ditto.
-
-Wed Mar 31 01:43:06 1999 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (mount_info::conv_to_win32_path): Reorganize to
- correctly handle //x syntax.
-
-Tue Mar 30 14:42:05 1999 Christopher Faylor <cgf@cygnus.com>
-
- * strace.cc (strace_vsprintf): Fix incorrect buffer reference.
-
-Mon Mar 29 22:46:16 1999 Christopher Faylor <cgf@cygnus.com>
-
- * debug.cc (__lock): Return value for gcc bug workaround.
- (__unlock): Ditto.
- * fhandler_tty.cc (fhandler_tty_master::init): Remove extraneous
- console initialization. Set termios to sensical values before
- initializing the console.
- (fhandler_tty_slave): Add some debugging output.
- * strace.cc: Conditionalize stuff not required by STRACE_HHMMSS.
- (strace_vsprintf): Remove dependency on time() for STRACE_HHMMSS.
-
-Mon Mar 29 10:50:00 Corinna Vinschen <corinna.vinschen@cityweb.de>
-
- * utils/passwd.c (GetPW): Correct cast in call to `NetUserGetInfo'.
-
-Sun Mar 28 16:54:57 1999 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler.h: Remove tty_stuff field from fhandler_console
- class. Use global instead to allow all console opens to
- use same settings.
- * fhandler_console.cc: Add new global.
- (fhandler_console::tcgetattr): Use new global for initialization.
- (fhandler_console::de_linearize): Ditto.
- * fhandler_termios.cc (fhandler_termios::fhandler_termios): Don't
- reinitialize an already initialized termios. Do not honor
- CYGWIN=binmode for console output. It's too confusing.
- * shared.h: Add `initialized' field to tty_min.
-
-Sun Mar 28 01:55:32 1999 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (path_prefix_p_): Add defensive code.
- (slash_drive_prefix_p): Use macro to detect whether a character
- is a path separator.
- (mount_info::conv_to_win32_path): Rewrite to correctly handle
- relative paths.
- * strace.cc (strace_printf): Remove extraneous save of LastError.
- * winsup.h (per_thread): Return TlsSetValue value. This seems
- to work around a g++ bug.
-
-Thu Mar 25 13:00:00 Corinna Vinschen <corinna.vinschen@cityweb.de>
-
- * fhandler_raw.cc (fhandler_dev_raw::dup): New method.
- * fhandler_tape.cc (fhandler_dev_tape::dup(): Ditto.
- * fhandler.h: Added prototypes for the formentioned methods.
-
-Wed Mar 24 23:00:00 Corinna Vinschen <corinna.vinschen@cityweb.de>
-
- * fhandler_raw.cc (fhandler_dev_raw::linearize):
- Only calling base class implementation now.
- * fhandler_raw.cc (fhandler_dev_raw::de_linearize):
- Only calling base class implementation and allocating devbuf now.
- * fhandler_tape.cc (fhandler_dev_tape::linearize): Erased.
- * fhandler_tape.cc (fhandler_dev_tape::de_linearize): Erased.
- * fhandler_tape.cc (fhandler_dev_tape::fhandler_dev_tape):
- Additional call to `set_cb()'.
- * fhandler_floppy.cc (fhandler_dev_floppy::fhandler_dev_floppy):
- Ditto.
- * fhandler.h: Erased prototypes for linearize and de_linearize
- methods of class fhandler_dev_tape.
-
-Thu Mar 25 14:05:57 1999 Christopher Faylor <cgf@cygnus.com>
-
- * signal.cc (pause): Make sure that signal has been dispatched
- prior to pause returning.
-
-Wed Mar 24 20:04:21 1999 Christopher Faylor <cgf@cygnus.com>
-
- Change get_input_handle to get_io_handle throughout.
- Change output_handle_ to output_handle throughout.
- Use sys/termios.h only where needed.
- * Makefile.in: Add new object.
- * fhandler.cc (fhandler_base::puts_readahead): New function.
- Adds a string to the read ahead buffer.
- (fhandler_base::put_readahead): New function. Adds a character
- to the read ahead buffer.
- (fhandler_base::get_readahead): New function. Gets a character
- from the read ahead buffer.
- (fhandler_base::peek_readahead): New function. Returns character
- at beginning or end of read ahead buffer.
- (fhandler_base::set_readahead_valid): Augmented from fhandler.h.
- (fhandler_base::eat_readahead): Eat a character from the read
- ahead buffer.
- (fhandler_base::de_linearize): Reset read ahead info.
- (fhandler_base::read): Honor new read ahead mechanism.
- (fhandler_base::fhandler_base): Don't set binmode to default
- if it has already been explicitly set.
- * fhandler.h: Add *BINSET flags to track whether the binary
- mode has been turned on or off explicitly.
- (fhandler_base): Add elements for new read ahead method. Remove
- old `readahead_'.
- (fhandler_termios): New base class.
- (fhandler_console): Use fhandler_termios base class.
- Add new de_linearize method.
- (fhandler_tty_common): Rewrite to use fhandler_termios base class.
- (fhandler_pty_master): Ditto.
- (fhandler_tty_master): Ditto.
- * fhandler_console (fhandler_console::read): Rewrite to use functions
- from fhandler_termios and read ahead for line editing.
- (fhandler_console::read1): Remove.
- (fhandler_console::open): Interruptible I/O is now handled in the
- read function. Mark this.
- (fhandler_console::output_tcsetattr): Use ONLRET to control
- binary behavior since it is more closely analgous.
- (fhandler_console::input_tcsetattr): Don't set console flags if
- there is no change or Windows 95 will eat input.
- (fhandler_console::tcsetattr): Use ONLRET to control binary behavior
- since it is more closely analgous.
- (fhandler_console::fhandler_console): Accommodate fhandler_termios
- base class.
- (fhandler_console::init): Ditto.
- (fhandler_console::igncr_enabled): Ditto.
- (fhandler_console::char_command): Use new read ahead method.
- (fhandler_console::de_linearize): New function.
- * fhandler_serial.cc: Need additional include.
- * fhandler_tty.cc (fhandler_tty_master::fhandler_tty_master):
- Accommodate fhandler_termios base class.
- (fhandler_tty_master::init): Ditto.
- (fhandler_tty_master::accept_input): New function. Sends
- (possibly line-edited) input to slave.
- (process_input): Use line editing capabilities of fhandler_termios
- base class when processing input.
- (fhandler_tty_slave::open): Accommodate fhandler_termios base class.
- (fhandler_tty_slave::tcgetattr): Ditto.
- (fhandler_tty_slave::ioctl): Ditto.
- (fhandler_pty_master::fhandler_pty_master): Ditto.
- (fhandler_pty_master::read): Ditto.
- (fhandler_tty_slave::dup): Be more paranoid about setting output
- handle in case of error.
- * fhandler_tty.h: Accommodate new tty_min base class in tty class.
- * hinfo.cc (hinfo::build_fhandler): Send tty 'unit' to constructor.
- * select.cc (peek_console): Send resize event to window regardless
- of tty setting. Eliminate ReadFile kludge.
- * shared.h (tty_min): Rename termios field to avoid conflict.
- * tty.cc (create_tty_master): Send tty number to build_fhandler.
- (tty::common_init): Remove termios initialization. It's handled
- via fhandler_termios, now.
- * fhandler_termios: New file. Contains methods for dealing with
- fhandler_termios class.
-
-Wed Mar 24 19:22:04 1999 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (call_handler): Reorder to work around
- gcc bug.
-
-Sun Mar 21 21:26:43 1999 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler_serial.cc (fhandler_serial::raw_read): Protect
- against uninitialized variable. Output debug info if
- ClearCommError fails. Clear overlapped I/O on error or
- signal.
- (fhandler_serial::tcflow): Output debug info at start of
- routine.
- (fhandler_serial::tcsetattr): Add more debugging output.
- Avoid re-setting parameters if there has been no change.
- Setting parameters via SetCommState seems to cause loss of
- input on Windows 9[58].
-
-Wed Mar 17 12:56:25 1999 Geoffrey Noer <noer@cygnus.com>
-
- * include/winbase.h: Fix AllocateAndInitializeSid proto.
-
-Tue Mar 16 21:55:12 1999 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (handle_exceptions): Always wait for sig_send
- to exit or races can result.
-
-Tue Mar 16 13:04:34 1999 Geoffrey Noer <noer@cygnus.com>
-
- * include/cygwin/version.h: Bump CYGWIN_VERSION_API_MINOR to 11.
-
-Tue Mar 16 15:44:10 1999 Christopher Faylor <cgf@cygnus.com>
-
- * cygwin.din: Export telldir/seekdir.
-
-Tue Mar 16 13:50:51 1999 Corinna Vinschen <corinna.vinschen@cityweb.de>
-
- * dir.cc: Change unused struct member __d_find_first_called to
- __d_position for use in new functions.
- (telldir): New function. Returns current position in DIR stream.
- (seekdir): New function. Seeks to new position in DIR stream.
-
-Mon Mar 15 19:17:23 1999 Geoffrey Noer <noer@cygnus.com>
-
- * sysdef/comctl32.def: Add InitCommonControlsEx.
-
-Mon Mar 15 19:45:10 1999 Christopher Faylor <cgf@cygnus.com>
-
- * dir.cc (mkdir): Remove final slash from a directory if
- appropriate or windwows won't create the directory.
- * errno.cc: Change text for EAGAIN to something a little
- more sensical.
- * exceptions.cc (call_handler): Add a debug message.
- * fhandler.cc (fhandler_base::open): Don't attempt to set
- the position of a com device.
- * fhandler_serial.cc (fhandler_serial::raw_read): Reset
- overlapped event if not armed. Don't attempt to find out
- if characters are available if vmin_.
- (fhandler_serial::raw_write): Clear pending I/O when
- necessary.
- (fhandler_serial::open): Set comm state to current rather
- than zeroing.
- (fhandler_serial::tcflush): Don't use "queue" as a flag.
- TCI* defines are not bit masks.
- * select.cc (peek_serial): Add debugging output.
- * sigproc.cc (wait_sig): Minor cleanup.
- * path.cc (nofinalslash): Make global.
- * winsup.h: Ditto.
-
-Mon Mar 15 16:31:29 1999 Geoffrey Noer <noer@cygnus.com>
-
- * include/winnt.h: Add RID defs/protos from MSDN docs.
- (SECURITY_*_RID, DOMAIN_*_RID*, etc.)
- * include/richedit.h: Add missing SCF_* defines.
- * include/commctrl.h: Add missing PBM_ defines, PBRANGE struct.
-
-Mon Mar 15 12:54:48 1999 Geoffrey Noer <noer@cygnus.com>
-
- * Makefile.in: Don't install include/Windows32 since it doesn't
- exist any more.
- * include/cygwin/version.h: Bump CYGWIN_VERSION_API_MINOR to 10.
-
-1999-03-12 DJ Delorie <dj@cygnus.com>
-
- * net.cc (gethostbyname): support a.b.c.d notation internally,
- in case there's no DNS at least partial support is there.
-
-Thu Mar 11 21:27:41 1999 Jeff Johnston <jjohnstn@cygnus.com>
-
- * cygwin.din: Added references to new fast-math routines.
-
-Wed Mar 10 19:22:46 1999 Geoffrey Noer <noer@cygnus.com>
-
- * include/commdlg.h: Add missing PageSetupDlg defines.
-
-Tue Mar 9 14:28:14 1999 Geoffrey Noer <noer@cygnus.com>
-
- * include/*.h: Switch Win32 API header file set to the one written
- by Anders Norlander <anorland@hem2.passagen.se>. Headers now
- fit the standard Win32 API header layout and are more complete.
- These correspond to Anders' headers, version 0.1.5. Please read
- sysdef/README for more information.
- * include/Windows32/*.h: Delete in favor of above definitions.
-
- Changes to support the above:
- * fhandler_console.cc (fhandler_console::char_command): Add newly
- needed cast to DWORD *.
- * fhandler_serial.cc (fhandler_serial::raw_read): Make n, minchars
- DWORDs.
- * fhandler_tty.cc: Include limits.h.
- (fhandler_pty_master::doecho): Second arg is now DWORD.
- (fhandler_pty_master::process_input_to_sl): Make n, written DWORD.
- (fhandler_pty_master::process_slave_outpu): Make n DWORD.
- (fhandler_tty_slave::close): Make towrite, n DWORDs.
- (fhandler_tty_slave::write): Make n DWORD.
- * fhandler.h: Adjust fhandler_pty_master::doecho proto.
- * hinfo.cc: Include file reordering.
- * malloc.cc: Ditto.
- * net.cc: Ditto.
- * fhandler_tape.cc (get_ll): Need to reference .u in
- LARGE_INTEGER usages.
- * ntea.cc: Ditto.
- * pinfo.cc: Include limits.h.
- * spawn.cc: Ditto.
- * uinfo.cc: Ditto.
- * uname.cc (uname): sysinfo struct now has anon union.
- Adjust sprintf for dwProcessorType being a long now.
- * syscalls.cc: Include limits.h and lmcons.h. Throughout,
- reference .u in LARGE_INTEGER usages.
- (logout): Make rd a DWORD.
-
- * utils/mkgroup.c: Always include lmaccess.h and lmapibuf.h.
- Include stdio.h.
- (enum_groups): Adjust for longs in fprintfs.
- (main): Ditto.
- * utils/mkpasswd.c: Include lmaccess.h and lmapibuf.h.
- (enum_users): Adjust for longs in fprintfs.
- (main): Ditto.
- (enum_local_groups): Ditto.
- * utils/passwd.c: Remove many Win32 API defines now in new
- Win32 headers. Include lmaccess.h, lmerr.h, lmcons.h,
- lmapibuf.h.
- (PrintPW): Adjust for longs in fprintfs.
-
-Wed Mar 3 21:14:45 1999 Christopher Faylor <cgf@cygnus.com>
-
- * environ.cc (environ_init): Fix off-by-one error in initial
- environment allocation.
- * fhandler_serial.cc (fhandler_serial::tcflush): Use different
- method for flushing since serial handles are now opened for
- overlapped I/O.
- * select.cc (cygwin_select): Make degenerate case interruptible.
- * sigproc.cc (proc_exists): Recognize all kinds of myself pointers
- as "existing".
-
-Tue Feb 16 23:00:48 1999 Christopher Faylor <cgf@cygnus.com>
-
- * include/Windows32/Functions.h: Correct two #ifndefs that were
- switched.
-
-Mon Feb 15 22:41:54 1999 Christopher Faylor <cgf@cygnus.com>
-
- * spawn.cc (spawn_guts): Fix incorrect arg length when
- constructing new arguments for #!.
-
-Fri Feb 12 13:25:50 1999 Drew Moseley <dmoseley@cygnus.com>
-
- * Makefile.in (install-info): Test for file existence before installing.
-
-Fri Feb 12 13:17:49 1999 Corinna Vinschen <corinna.vinschen@cityweb.de>
-
- * fhandler.cc (fhandler_disk_file::fstat): Handles directories,
- returns unique i-node number.
- * syscalls.cc (stat_worker): On WinNT, stat_worker calls
- fhandler_disk_file::fstat for directories, too.
-
-1999-02-10 DJ Delorie <dj@cygnus.com>
-
- * doc/doctool.c (scan_directory): check for opendir failing,
- add closedir.
-
-Tue Feb 9 13:02:25 1999 Geoffrey Noer <noer@cygnus.com>
-
- * utils/mount.cc: Add fixme.
- * doc/doctool.c: Correct typo in comment.
-
-Mon Feb 8 17:29:58 1999 Christopher Faylor <cgf@cygnus.com>
-
- * include/Windows32/UnicodeFunctions.h: Fix incorrect use of
- BOOL -> WINBOOL.
- * Windows32/ASCIIFunctions.h: Ditto.
-
-Fri Feb 5 09:38:25 1999 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (mount_info::add_item): Ensure that drive names
- are added using X: notation.
-
-Thu Feb 4 00:28:58 1999 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (path_prefix_p_): Recognize ':' as a path separator.
- (mount_info::conv_to_posix_path): Detect case where a '/' has
- to be added to a path being constructed.
- (realpath): Ensure that the full path name is returned.
-
-Wed Feb 3 22:57:42 1999 Christopher Faylor <cgf@cygnus.com>
-
- * shared.h (mount_info): Add two separate arrays to track
- reverse sorting of win32/posix paths.
- * path.cc (sort_by_posix_name): New function. Sorts by
- posix path.
- (sort_by_native_name): Rename from sort_by_name.
- (mount_info::conv_to_win32_path): Use native sort order
- when iterating through mount table.
- (mount_info::binary_win32_path_p): Ditto.
- (mount_info::getmntent): Ditto.
- (mount_info::conv_to_posix_path): Use posix sort order
- when iterating through mount table.
- (sort): Use two arrays to track sorting of mount table.
- (mount_info::add_item): Simplify slightly.
-
-Wed Feb 3 15:17:54 1999 Christopher Faylor <cgf@cygnus.com>
-
- * cygwin.din: Remove DATA attribute which was erroneously
- added to __errno.
-
-Tue Feb 2 23:10:18 1999 Geoffrey Noer <noer@cygnus.com>
-
- * path.cc: Fix comment regarding UNC paths in mount table.
- (mount_info::conv_to_win32_path): Add back code to handle
- //<drive> paths for now. The plan is still to remove it again at
- a later date.
- (mount_info::slash_drive_to_win32_path): New. Convert a //<drive>
- path to a Win32 path. Bring back from among the recently departed
- path functions.
- * shared.h: Add mount_info proto for slash_drive_to_win32_path.
-
-Tue Feb 2 22:52:43 1999 Geoffrey Noer <noer@cygnus.com>
-
- * include/lmaccess.h: Add stub.
- * include/shlobj.h: Add stub.
-
-Tue Feb 2 22:34:06 1999 Christopher Faylor <cgf@cygnus.com>
-
- * shared.h: Change magic number associated with fork/exec
- information as a temporary measure to eliminate strange
- core dumps with multiple versions of cygwin1.dll.
-
-1999-02-02 Brendan Kehoe <brendan@cygnus.com>
-
- * Makefile.in (readme.txt): Add missing -I$(srcdir)/doc.
-
-Tue Feb 2 01:10:31 1999 Geoffrey Noer <noer@cygnus.com>
-
- * sysdef/*: Replace all files with new ones by Anders
- Norlander <anorland@hem2.passagen.se>. Please read sysdef/README
- for more information.
-
-Mon Feb 1 14:55:11 1999 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (sort_by_name): Sort based on length of native_path
- to ensure maximal match when converting from native -> UNIX.
- * cygwin.din: Make more data variables DATA.
-
-Mon Feb 1 13:31:43 1999 Geoffrey Noer <noer@cygnus.com>
-
- * fhandler_tape.cc: Change all fhandler_tape private functions
- to be named foo_bar_baz-style instead of FooBarBaz. Add some
- parens around logical ors/ands for clarity. Respace.
- * fhandler.h: Change protos here in light of above.
-
-Thu Jan 28 11:00:00 Corinna Vinschen <corinna.vinschen@cityweb.de>
-
- * errno.cc: Support for Windows errors ERROR_CRC and ERROR_NO_READY
- and for error ENOMEDIUM.
-
-Wed Jan 27 01:05:39 1999 Christopher Faylor <cgf@cygnus.com>
-
- * dir.cc (rmdir): Correct errno setting when attempting to rmdir
- a non-directory.
-
-Tue Jan 26 17:36:12 1999 Geoffrey Noer <noer@cygnus.com>
-
- * registry.cc (reg_key::build_reg): Add FIXME.
-
-Tue Jan 26 01:30:48 1999 Geoffrey Noer <noer@cygnus.com>
-
- * path.cc (mount_info::from_registry): Import old v1 mounts
- only if current mount layout doesn't exist yet in both user
- and system areas (when had_to_create_mount_areas == 2).
- (mount_info::import_v1_mounts): New, was upgrade_v1_mounts.
- (mount_info::from_v1_registry): Add missing comma in reg_key
- creation call.
- (mount_info::init): Init had_to_create_mount_areas to zero.
- * external.cc (cygwin_internal): Fix reference to
- upgrade_v1_mounts.
- * shared.h: Change upgrade_v1_mounts proto to import_v1_mounts.
- Add new had_to_create_mount_areas variable in mount_info class.
- * registry.cc (reg_key::build_reg): Increment
- had_to_create_mount_areas whenever we create a new mount area.
-
- * include/sys/mount.h: Don't define MOUNT_EXEC until we actually
- implement this functionality.
-
- * utils/mount.cc (do_mount): Print warning messages after the
- actual mount attempt so we don't see warnings when mount fails.
- (usage): Change name of --upgrade-old-mounts flag to
- --import-old-mounts.
- (main): Ditto.
-
-Mon Jan 25 23:56:50 1999 Geoffrey Noer <noer@cygnus.com>
-
- * errno.cc (seterrno_from_win_error): New. Given a Windows
- error code, set errno accordingly.
- (seterrno): Just call seterrno_from_win_error with the
- error code returned by a call to GetLastError.
- * winsup.h: Define __seterrno_from_win_error.
- * path.cc: Clean up more function description comments.
- (mount_info::add_reg_mount): Don't need res, just return the
- right values.
- (del_reg_mount): Return int, not void. If we're deleting a
- system mount, set errno to EACCES and return -1 if we don't
- have a valid key handle. If mount delete fails, set errno
- accordingly and return -1. Otherwise, return zero for success.
- (cygwin_umount): Delete mount from registry first, only remove
- from internal table if successful.
- * shared.h: Make del_reg_mount proto return int.
-
-Mon Jan 25 22:40:15 1999 Geoffrey Noer <noer@cygnus.com>
-
- * path.cc (mount_info::mount_slash): Add mount to registry
- first, only add to internal table if successful.
- (mount_info::conv_to_posix_path): Ditto.
- (mount): Ditto.
- (mount_info::add_reg_mount): Return int, not void. If we're
- writing a system mount, first check if we have a valid key handle.
- If we don't, set errno to EACCES and return -1. Otherwise return
- zero for success.
- * shared.h: Make add_reg_mount proto return int.
-
-Mon Jan 25 20:40:26 1999 Geoffrey Noer <noer@cygnus.com>
-
- * path.cc (mount_info::init): Don't read automount info here.
- (mount_info::from_registry): Read it here instead. Also, read
- system registry info in KEY_READ mode.
- (mount_info::read_mounts): Read mount info with KEY_READ access
- permissions.
-
-Mon Jan 25 19:12:31 1999 Geoffrey Noer <noer@cygnus.com>
-
- * path.cc: Improve several function description comments.
- (mount_info::init): Read automount information from the
- registry before potentially automounting slash.
- (mount_info::conv_to_posix_path): Create automount with
- automount_flags flags.
- (mount): Now flags is more than just a toggle so we
- must check it in a different manner. And simply check
- MOUNT_AUTO as the indicator. If we want to change the
- automount_prefix, also change automount_flags as appropriate.
- Fix args to syscall_printf.
- (write_automount_info_to_registry): New. Was
- write_automount_prefix_to_registry.
- (read_automount_info_from_registry): New. Was
- read_automount_prefix_from_registry.
- * shared.h: Adjust protos for function renames just mentioned.
- * include/sys/mount.h: Delete MOUNT_CHANGE_AUTOMOUNT_PREFIX
- since we don't really need it.
- * utils.cc (mount): Pass MOUNT_AUTO as indicator of desire to
- change automount prefix.
- (show_mounts): Change spacing so there's room for "system,auto"
- in Type column.
-
-Mon Jan 25 13:17:40 1999 Geoffrey Noer <noer@cygnus.com>
-
- * path.cc: Change all references from "automount root" to
- "automount prefix", avoiding potential nomenclature confusion
- with the root of the file system.
- (read_automount_prefix_from_registry): New. Was
- read_automount_root_from_registry.
- (read_automount_prefix_from_registry): New. Was
- read_automount_root_from_registry. Also read the default
- flags for automounts from registry at the same time.
- (write_automount_prefix_to_registry): New. Was
- write_automount_root_to_registry. Also set automount flags
- in registry using new auto_flags arg.
- (mount): Add flags arg to write_automount_prefix_to_registry call.
- * shared.h: Add automount_flags variable to mount_info class.
- Adjust protos for function renames listed above.
-
- * include/sys/mount.h: Comment out MOUNT_MIXED and MOUNT_SILENT
- whose values could be reused now that we're using a new mount
- layout. Change MOUNT_CHANGE_AUTOROOT to
- MOUNT_CHANGE_AUTOMOUNT_PREFIX.
-
- * utils/mount.cc (change_automount_prefix): New. Was
- change_automount_root. Add new flags argument so it's possible
- to change the default automount flags.
- (main): Option name change from --change-automount-root to
- --change-automount-prefix.
- (usage): Update in light of option changes.
- * utils/umount.cc (remove_all_automounts): Also need to check
- for mnt_type looking like "system,auto" now that it's possible
- for automounts to be located in the system registry.
-
-Mon Jan 25 08:59:04 1999 Christopher Faylor <cgf@cygnus.com>
-
- * spawn.cc (linebuf::add): Ensure that there is always
- enough space for line being added. Always null terminate.
- (linebuf::prepend): Ditto.
-
-Sat Jan 23 01:30:16 1999 Geoffrey Noer <noer@cygnus.com>
-
- Make mount.exe able to upgrade mounts:
- * external.cc: Fix file description.
- (cygwin_internal): Handle CW_READ_V1_MOUNT_TABLES case, in
- which case call upgrade_v1_mounts to upgrade old registry
- area mounts.
- * external.h: Add CW_READ_V1_MOUNT_TABLES to enum.
- * shared.h: Make upgrade_v1_mounts public.
-
- * utils/mount.cc: Include winsup.h, external.h, undef errno since
- it's defined by winsup.h.
- (usage): Add --upgrade-old-mounts option to usage info.
- (main): Handle --upgrade-old-mounts flag by calling
- cygwin_internal with the right constant.
-
-Sat Jan 23 00:40:17 1999 Geoffrey Noer <noer@cygnus.com>
-
- First pass at mount table backwards compatibility with v1
- mounts:
- * path.cc (mount_info::from_registry): For now, upgrade from
- old v1 mount registry area if nmounts==0 after reading new mount
- areas.
- (mount_info::read_v1_mounts): New function. Given a regkey, read
- the mounts in the old v1 registry layout corresponding to the key.
- A "which" arg tells us which registry we're reading so that we
- can include MOUNT_SYSTEM when reading old system mounts.
- (mount_info::from_v1_registry): New function. Retrieve old v1
- mount table area mounts.
- (mount_info::upgrade_v1_mounts): New function. Retrieve old
- v1 mounts, add them to the current registry mount location.
- (mount_info::to_registry): New function. For every mount in
- the internal mount table, add it to the correct registry.
- * shared.h: Add protos for new mount_info functions --
- from_v1_registry, read_v1_mounts, upgrade_v1_mounts, to_registry.
- Don't need class name in protos for
- build_automount_mountpoint_path, write_automount_root_to_registry,
- and read_automount_root_from_registry.
-
-Fri Jan 22 22:45:07 1999 Christopher Faylor <cgf@cygnus.com>
-
- * spawn.cc (spawn_guts): Arg 2 missing from special case
- command/cmd handling.
-
-Fri Jan 22 22:40:32 1998 Corinna Vinschen <corinna.vinsche@cityweb.de>
-
- * fhandler_raw.cc (fhandler_dev_raw::raw_read): bytes_to_read
- corrected to multiple of 512 bytes instead of multiple to
- devbufsiz. Insert break on ReadFile returned 0 Bytes.
-
-Fri Jan 22 15:50:49 1999 Christopher Faylor <cgf@cygnus.com>
-
- * mkvers.sh: Fix handling of CVS tag output.
- * errno.cc: Mark exported data as __declspec(dllexport).
- * times.cc: Ditto.
- * fhandler.cc (fhandler_base::open): Yet another stab
- at correcting handling of binmode/textmode ramifications.
- * path.cc (hash_path_name): Make /. == '' for purposes
- of generating a hash.
-
-Fri Jan 22 11:45:28 1999 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (slash_unc_prefix_p): Generalize to allow
- either type of slash.
- (mount_info::add_item): Don't disallow UNC specs in
- the mount table.
- * utils/Makefile.in: Always use current stub library.
-
-Fri Jan 22 08:52:36 1999 Christopher Faylor <cgf@cygnus.com>
-
- * environ.cc (regopt): Use correct registry key for Program
- Options given new mount layout.
- * cygwin.din: export __mb_cur_max from newlib.
-
-Thu Jan 21 16:52:20 1999 Geoffrey Noer <noer@cygnus.com>
-
- * path.cc (cygwin_split_path): Adjust two FIXMEs.
- (mount_info::write_automount_root_to_registry): Return int,
- 0 on success, -1 if path is problematic.
- (mount): Check return of write_automount_root_to_registry
- and act appropriately. Do syscall_printf when adjusting automount
- as well as regular mount.
- * shared.h: mount_info::write_automount_root_to_registry now
- returns an int.
- * utils/mount.cc (main): don't sanity-check automount path
- here, instead let the DLL take care of that.
-
-Thu Jan 21 17:12:26 1999 Christopher Faylor <cgf@cygnus.com>
-
- * spawn.cc (spawn_guts): Rewrite argument handling for
- cleaner, one-pass operation.
- (linebuf::add): New method for adding arguments to end
- of the argument list.
- (linebuf::prepend): New method for pushing arguments on
- the front of the argument list.
-
-Wed Jan 20 19:06:30 1999 Geoffrey Noer <noer@cygnus.com>
-
- * path.cc (mount_info::mount_slash): only call add_reg_mount if
- add_item succeeded.
- (mount_info::add_item): Fail if native path doesn't start with
- <drive letter>: or if posix path doesn't start with a slash.
-
-Wed Jan 20 19:06:30 1999 Geoffrey Noer <noer@cygnus.com>
-
- * fhandler_raw.cc: Correct copyright date, reformat.
- * fhandler_floppy.cc: Ditto.
- * fhandler_tape.cc: Ditto.
-
-Wed Jan 20 17:54:02 1999 Geoffrey Noer <noer@cygnus.com>
-
- Remove //<drive>/ support. Add support for automounts in
- user registry area.
- * path.cc: Rewrite, reformat docs at top in light of removing
- //<drive>/ support and new automount support. Add more function
- description comments.
- (slash_drive_prefix_p): Remove function.
- (build_slash_drive_prefix): Ditto.
- (slash_drive_to_win32_path): Ditto.
- (mount_info::init): After everything else, read the automount_root
- by calling read_automount_root_from_registry().
- (mount_info::mount_slash): Automount slash with MOUNT_AUTO.
- (mount_info::conv_to_win32_path): Remove //<drive>/ support code.
- (mount_info::build_automount_mountpoint_path): Construct the name
- of an automount POSIX path, given automount_root and the Win32
- path that needs to be automounted.
- (mount_info::conv_to_posix_path): Automount missing drive letter
- and call conv_to_posix_path again if path isn't covered by the
- mount table but starts with "<letter>:".
- (mount_info::read_automount_root_from_registry): New function.
- Read in the value of automount_root from the current_user
- registry mount area. If there isn't one, use default of
- "/cygdrive" and write that to the registry by calling
- write_automount_root_to_registry().
- (write_automount_root_to_registry): Write a value of
- automount_root to the user registry area.
- (mount_info::del_item): Add new flags arg to specify which
- registry to delete the mount from.
- (mount_info::del_reg_mount): Ditto.
- (mount_item::getmntent): Use mount_info mnt_foo strings to store
- strings passed back in the mntent struct. Otherwise if you
- delete a mount item while using getmntent, the pointer may
- change on the user. Add ",auto" to mnt_type if MOUNT_AUTO flag is
- set.
- (mount): Add support to set auto_root to path if flags is set
- to the special MOUNT_CHANGE_AUTOROOT flag otherwise do the normal
- thing.
- (umount): Call cygwin_umount with flags value of 0.
- (cygwin_umount): New exported function. Same as umount but
- takes an additional flag argument that specifies which registry
- area from which umount should remove the mount point.
- * cygwin.din: Export the cygwin_umount call.
- * shared.h (mount_info): Add public automount_root string.
- Add public proto for write_automount_root_to_registry().
- Add private protos for build_automount_mountpoint_path() and
- read_automount_root_from_registry(). Add flags arg to del_item
- and del_reg_mount protos. Add strings used by getmntent et al
- including mnt_type, mnt_opts, mnt_fsname, mnt_dir. (Can't just
- pass back pointers to mount paths because they may change as
- a result of a umount call.
-
- * include/sys/mount.h: Add new MOUNT_AUTO and
- MOUNT_CHANGE_AUTOROOT flags. Add proto for cygwin_umount
- function.
- * include/cygwin/version.h: Bump CYGWIN_VERSION_API_MINOR to 9.
-
- * utils/mount.cc: Change missing_dir_warning flag to force
- and init to FALSE instead of TRUE. Throughout swap names and
- setting as appropriate. Include errno.h.
- (usage): Remove info about --reset. Add info for new
- --change-automount-root option.
- (main): Don't check the --reset flag. Call change_automount_root
- if invoked with --change-automount-root. Only call do_mount
- if !mount_already_exists unless force flag is TRUE. Otherwise
- fail.
- (mount_already_exists): New helper function. Returns 1
- if the mount point of the same registry location is already
- mounted.
- (reset_mounts): Remove function.
- (change_automount_root): New function that changes the
- automount root in the registry via Cygwin by passing the new
- path to mount() with the special MOUNT_CHANGE_AUTOROOT flag.
- * utils/umount.cc: Add progname, set to argv[0]. Include string.h.
- (usage): New function to print out usage info.
- (main): Loop through argcs. Handle new flags to remove all mounts
- of a specific type including --remove-all-mounts,
- --remove-user-mounts, --remove-system-mounts, and
- --remove-auto-mounts. New flag to specify removing a system
- mount. Call cygwin_umount instead of umount, providing flags
- as appropriate.
- (remove_all_mounts): New function. Remove all mounts in
- both tables.
- (remove_all_automounts): Remove all mounts marked auto.
- (remove_all_user_mounts): Remove all user mounts, including auto
- mounts.
- (remove_all_system_mounts): Remove all system mounts.
-
- * registry.cc (reg_key::get_string): Fix description comment.
- * strace.cc: Minor reformatting.
-
-Wed Jan 20 17:49:20 1999 DJ Delorie <dj@cygnus.com>
-
- * fhandler.cc (raw_write): Make sure that a disk full error
- is properly signalled.
- (fhandler_base::open): Only tapes are read/write, cd-roms may be
- read-only (from Corinna).
-
-Wed Jan 20 10:46:48 Corinna Vinschen <corinna.vinschen@cityweb.de>
-
- [applied by DJ Delorie <dj@cygnus.com>]
-
- * fhandler_raw.cc (fhandler_dev_raw::writebuf): Writes only
- as much bytes as needed, instead of full buffer size.
-
- * fhandler_tape.cc (fhandler_dev_tape::close): Corrected error
- handling in case of error while writing buffer content to dev.
-
- * fhandler_floppy.cc (fhandler_dev_floppy::close): Ditto.
-
- * fhandler_tape.cc (fhandler_dev_tape::writebuf): Delete function
-
- * fhandler_floppy.cc (fhandler_dev_floppy::writebuf): Ditto.
-
- Patch suggested by Ron Parker <rdparker@butlermfg.org>
- * path.cc (mount_info::conv_to_win32_path): Change the
- recognition of UNC devices, to support also paths of type
- `\\.\UNC\'.
-
- * fhandler_tape.cc (fhandler_dev_tape::close): Fixed rewind
- to block 1 instead of block 0 on rewind tapes in case of
- uncaught signal (e.g. Ctrl-C).
-
- * path.cc (get_raw_device_number): New static function,
- checks path for windows raw device.
-
- * path.cc (get_device_number): Change for recognition of
- windows raw device paths by calling `get_raw_device_number()'.
-
- * path.h: Change prototype for `get_device_number()'.
-
- * Makefile.in: Added file 'fhandler_raw.o' to dependencies.
-
- * include/cygwin/rdevio.h: New file to support ioctl commands
- on random access raw devices. At the time only get/set buffersize
- for raw_read/raw_write.
-
- * fhandler.h: Change class hierarchy. 'fhandler_dev_floppy'
- and 'fhandler_dev_tape' are now derived classes of
- 'fhandler_dev_raw', which is derived from 'fhandler_base'.
-
- * fhandler_raw.cc: New file for implementation of class
- 'fhandler_dev_raw' which is now base class for support of
- mass storage raw devices.
-
- * fhandler_dev_tape.cc: Rewritten.
-
- * fhandler_dev_floppy.cc: Rewritten. Now supporting correct
- lseek (seeking only to positions on 512 byte boundaries,
- like supported from WinNT).
-
- * Makefile.in: Added file 'fhandler_floppy.o' to dependencies.
-
- * fhandler_floppy.cc: New file to support raw devices
- including multi volume operations.
-
- * fhandler.cc: Delete 'fhandler_dev_floppy' implementation.
-
- * fhandler.h: Extend class fhandler_dev_floppy.
-
- * fhandler_tape.cc: Rewrite for correct support
- of multi volume operations. Supports Setmarks now.
-
- * fhandler.h: Add private method `clear()' to class
- fhandler_dev_tape.
-
- * Makefile.in: Add file 'fhandler_tape.o' to dependencies.
-
- * path.cc (mount_info::conv_to_win32_path): Change the
- recognition of UNC devices, to support devices, which
- are not partitions, too.
-
- * fhandler.h: Extend struct 'fhandler_dev_tape' for tape support.
- Add method 'fstat' to fhandler_dev_floppy to get S_ISBLK().
-
- * fhandler.cc (fhandler_base::open): In any case 'access_' has to
- be GENERIC_READ | GENERIC_WRITE for tapes, to allow tape control.
- No 'SetFilePointer' for tapes.
-
- * fhandler_tape.cc: New file to support rewind (/dev/stX) and
- norewind (/dev/nstX) tapes. Supports ioctl() calls, described
- in...
-
- * include/sys/mtio.h, include/cygwin/mtio.h: New header files
- for tape support.
-
-Sat Jan 16 21:59:36 1999 Geoffrey Noer <noer@cygnus.com>
-
- * registry.h: Delete; move contents into shared.h except for
- posix_path_p() routine which disappears.
- * {Makefile.in, environ.cc, net.cc, path.cc, registry.cc,
- shared.cc}: No longer include registry.h.
- * dcrt0.cc (dll_crt0_1): don't check posix_path_p()
-
- * include/mntent.h (struct mntent): Drop const from strings.
- * include/sys/mount.h: Change MOUNT_GLOBAL flag that nobody has
- used yet to MOUNT_SYSTEM. Add MOUNT_EXEC flag.
- * include/cygwin/version.h: Bump CYGWIN_VERSION_MOUNT_REGISTRY to
- 2. Change CYGWIN_INFO_CYGWIN_REGISTRY_NAME to "Cygwin".
- Change CYGWIN_INFO_CYGWIN_MOUNT_REGISTRY_NAME to "mounts v2".
-
- * registry.cc (reg_key::reg_key): Default key doesn't end in
- "mounts" any more.
- (reg_key::kill): Return error code from RegDeleteKeyA.
- * path.cc: Reformat, reorder functionality, add comments
- throughout.
- (mount_info::init): Automount slash if it's not already mounted.
- (mount_info::mount_slash): New private helper function.
- (mount_info::binary_win32_path_p): Check flags to determine
- if mount is binary or not, not binary_p.
- (mount_info::read_mounts): Remove unneeded access argument. Use
- RegEnumKeyEx to enumerate mount points in current registry
- location where each key name returned is a posix_path mount
- location. Use a subkey reg_key to read the posix_path's
- corresponding native_path and flags.
- (mount_info::from_registry): Access HKEY_LOCAL_MACHINE registry
- with full access privs (which will fail if not administrator).
- Fix registry path used to initialize HKEY_LOCAL_MACHINE reg_key.
- (mount_info::to_registry): Delete function. Replaced by
- add_reg_mount.
- (mount_info::add_reg_mount): New function which adds a specified
- mount point to the registry.
- (mount_info::del_reg_mount): New function which deletes the
- posix_path argument from the highest priority registry table it
- can (first user, than system-wide).
- (sort_by_name): If the two posix_paths are the same, then
- differentiate between them looking at MOUNT_SYSTEM in their flags.
- (mount_info::add_item): Also make sure that neither path is NULL.
- Never claim mount point is busy: replace an existing posix_path
- as long as it came from the same registry location.
- (mount_info::del_item): Also make sure that neither path is NULL.
- (mount_item::getmntent): Use mnt_type field to store user vs.
- system registry location string. Cast all strings to char *.
- Handle flags instead of binary_p. Change names of strings
- returned in mnt_opts field.
- (mount_item::init): Set flags, instead of dealing with binary_p
- and silent_p.
- (mount): Call add_reg_mount instead of to_registry.
- (umount): Call del_reg_mount instead of to_registry.
- (path_conv::path_conv): Remove reference to silent_p.
- * path.h (path_conv): Remove silent_p.
-
- * utils/mount.cc: Add -s to usage (was a commented-out -g).
- Or in MOUNT_SYSTEM if -s flag given. Add similar commented-out
- support for future MOUNT_EXEC flag that will be added with -e.
- (reset_mounts): Automount slash with zero for flags, not
- MOUNT_SILENT which we no longer use for anything.
- * utils/umount.cc: Also print out usage if the first argument
- starts with a dash.
-
-Fri Jan 15 11:27:51 1999 DJ Delorie <dj@cygnus.com>
-
- * strace.cc: add macros to protect against buffer overruns
- (strace_printf): increase buffer from 6000 to 1000 to build devo
- * include/sys/strace.h: allow -DNOSTRACE again
-
-Fri Jan 15 11:27:51 1999 DJ Delorie <dj@cygnus.com>
-
- * dcrt0.cc (alloc_stack): add 16384 to work around Win95 page
- fault during builds
- * fork.cc (fork): try various things to avoid page faults during
- win95 builds.
-
-Fri Jan 15 11:18:23 1999 DJ Delorie <dj@cygnus.com>
-
- * fhandler.cc (raw_write): check for disk full.
-
-Fri Jan 15 11:18:23 1999 DJ Delorie <dj@cygnus.com>
-
- * init.cc (dll_entry): if the DLL is being LoadLibrary'd,
- initialize some things.
- * heap.cc (_sbrk): detect uninitialized heap and initialize
- * dcrt0.cc (user_data): initialize to something useful.
- (do_global_ctors): make global for init.cc
-
-Thu Jan 14 02:16:44 1999 Geoffrey Noer <noer@cygnus.com>
-
- * dll_init.cc: Add missing FIXME in comment.
- * fhandler_console: Ditto.
-
-Thu Jan 14 00:53:25 1999 Christopher Faylor <cgf@cygnus.com>
-
- * spawn.cc (iscmd): New function.
- (spawn_guts): Treat command /c and cmd /c as special
- cases. Don't quote arguments to these programs if
- there are exactly three arguments.
- * dcrt0.cc (dll_crt0_1): Initialize exceptions prior
- to fork to allow forked processes to "dump core".
- * errno.cc (seterrno): No need for this to be extern "C".
- * winsup.h: Ditto.
-
-Wed Jan 13 19:06:08 1999 Geoffrey Noer <noer@cygnus.com>
-
- * registry.cc: Add comments corresponding to various reg_key
- functions, minor reformatting.
- (reg_key::reg_key): Delete already-commented-out function
-
-Wed Jan 13 15:41:34 1999 DJ Delorie <dj@cygnus.com>
-
- * errno.cc (_sys_errlist): Add "extern" to work around new gcc
- restrictions.
-
-Mon Jan 11 14:56:27 1999 Christopher Faylor <cgf@cygnus.com>
-
- * spawn.cc (spawn_guts): Fix problem with #! and relative
- directories.
-
-Mon Jan 11 09:00:29 1999 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler_console.cc (fhandler_console::read1): Handle EOF as a
- specific case.
-
-Sun Jan 10 23:44:22 1999 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler.h: Define __fmode for convenience. Use throughout.
- * environ.cc (parse_options): Use O_TEXT when nobinmode.
- * fhandler.cc (fhandler_base::open): Don't honor __fmode
- when disk file. Default to O_TEXT if no mode is specified.
- (fhandler_base::fhandler_base): Don't honor __fmode when disk
- file. Otherwise default to O_BINARY.
- * pipe.cc (make_pipe): Default to O_BINARY if no mode specified.
-
-Sat Jan 9 20:58:34 1999 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Correct previously messed up patch.
- * thread.h: Add back a needed include.
- * sigproc.cc (sigproc_init): Work around problem with older
- compilers.
- * wait.cc (wait4): Ditto.
- * winsup.h (per_thread_waitq): Ditto.
- * include/Windows32/CommonFunctions.h: Temporary change to
- work around problems with older compilers.
-
-Fri Jan 8 12:53:53 1999 Christopher Faylor <cgf@cygnus.com>
-
- * environ.cc (parse_options): Add "forkchunk" debug setting.
- Takes a value which is used to limit the size of individual memory
- copies in a fork.
- * fork.cc (fork_copy): Rewrite slightly to allow copying of
- individual chunks of memory rather than all in one gulp.
- Controlled by chunksize global variable.
-
-Thu Jan 7 22:02:18 1999 Christopher Faylor <cgf@cygnus.com>
-
- patch from Corinna Vinschen <corinna.vinschen@cityweb.de>:
- * utils/passwd.c: New file.
- * utils/Makefile.in: Add dependencies for passwd.
- * syscalls.cc (chmod): Change permission checking in case
- of readonly test.
- (stat_dev): Change default permission bits to allow writing
- for all users.
- (chown): Retry LookupAccountName with username set to domain\\username,
- if returned SID-Type is not SidTypeUser.
-
-
-Thu Jan 7 17:50:49 1999 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler.cc (fhandler_base::set_name): Fix bug which
- disallowed '%' in a file name.
-
-Thu Jan 7 00:21:41 1999 Geoffrey Noer <noer@cygnus.com>
-
- * path.cc: Add comments.
- * path.h: Correct file description comment.
-
-Tue Jan 5 16:07:15 1999 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler_serial.cc (fhandler_serial::raw_read): Be more defensive
- about not calling problematic functions when the overlapped I/O is
- armed. Reset the overlapped event prior to calling read or suffer
- an "operation aborted".
- * select.cc (peek_serial): Ditto.
-
-Mon Jan 4 15:16:22 1999 Geoffrey Noer <noer@cygnus.com>
-
- Eliminate warnings:
- * utils/mount.cc (show_mounts): make format a const char *.
- * utils/ps.cc (main): make literal strings const char *s.
- * utils/cygpath.cc (long_options): cast literal strings to char *s.
- (main):
-
-Sun Jan 3 20:46:12 1999 Christopher Faylor <cgf@cygnus.com>
-
- * select.cc (peek_console): Remove #if 0 around NT code workaround.
-
-Sat Jan 2 00:04:01 1999 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Remove include directories made obsolete by
- recent changes to mmap.cc. Also remove libraries that appear
- to be unnecessary for linking.
- * mkvers.sh: Put contents of .snapshot-date, if available, into
- the DLL.
-
-Fri Jan 1 22:44:49 1999 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler.h (fhandler_serial): Add flag to track state of
- overlapped serial I/O. Add overlapped_setup method for common
- setup of overlapped structure.
- * fhandler_serial.cc (fhandler_serial::overlapped_setup): New
- method. Sets up the overlapped structure for overlapped serial I/O.
- (fhandler_serial::raw_read): Use overlapped_armed flag to avoid
- calling functions which perform overlapped operations if overlapped
- I/O is in already progress. This should only be the case if a
- previous operation was interrupted or select has detected serial I/O.
- (fhandler_serial::open): Use overlapped_setup.
- (fhandler_serial::fixup_after_fork): Ditto.
- (fhandler_serial::de_linearize): Ditto.
- (fhandler_serial::dup): Ditto.
- (fhandler_serial::tcsetattr): Fix typo which caused IGNPAR
- to be ignored.
- * hinfo.cc (hinfo::select_read): Set saw_error to zero explicitly
- to avoid spurious reporting of select errors.
- (hinfo::select_write): Ditto.
- (hinfo::select_except): Ditto.
- * select.cc (peek_serial): Use overlapped_armed to avoid calling
- functions which perform overlapped operations if overlapped I/O
- is already in progress.
diff --git a/winsup/cygwin/ChangeLog-2000 b/winsup/cygwin/ChangeLog-2000
deleted file mode 100644
index 54494e610..000000000
--- a/winsup/cygwin/ChangeLog-2000
+++ /dev/null
@@ -1,4150 +0,0 @@
-Tue Dec 27 1:08:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din: Add symbols for `getrlimit' and `setrlimit'.
- * exceptions.cc (stackdump): Avoid creating stackdump when
- `rlim_core' is 0.
- * resource.cc: New global variable `rlim_core'.
- (getrlimit): New function.
- (setrlimit): Ditto.
- include/cygwin/version.h: Bump minor API version to 32 due to
- adding `getrlimit' and `setrlimit'.
- include/sys/resource.h: Add defines, types and prototypes for
- `getrlimit' and `setrlimit'.
-
-Mon Dec 25 22:18:42 2000 Christopher Faylor <cgf@cygnus.com>
-
- * autoload.h: Make DLL initializers global to avoid inlining.
- * exceptions.cc (interrupt_setup): Reorganize arguments to allow use of
- regparm.
- (interrupt_now): Ditto.
- (interrupt_on_return): Ditto.
- (call_handler): Ditto.
-
-Mon Dec 25 13:36:44 2000 Christopher Faylor <cgf@cygnus.com>
-
- * include/cygwin/version.h: Bump DLL minor version number to 8.
-
-Wed Dec 20 13:37:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc: Add load statement for SetSecurityDescriptorControl.
- * security.cc (alloc_sd): Always set SE_DACL_PROTECTED flag on
- Win2K and higher.
-
-Wed Dec 20 01:02:13 2000 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (reset_signal_arrived): Make global to avoid inlining.
-
-Wed Dec 20 00:57:10 2000 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler_serial.cc (fhandler_serial::raw_read): Always find number of
- bytes ready to be read whether overlapped_armed or not.
-
-Tue Dec 19 21:39:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (remove): New function, overriding the newlib
- implementation.
-
-Tue Dec 19 16:26:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * environ.cc (struct parse_thing): Add entry for new CYGWIN option
- `smbntsec'.
- * path.cc (path_conv::check): Check path for being a remote path.
- If so and `allow_smbntsec' is set to FALSE, set has_acls to FALSE.
- * security.cc: Add global definition for `allow_smbntsec'.
- * security.h: Add extern declaration for `allow_smbntsec'.
- * fhandler.cc (fhandler_disk_file::open): Eliminate extern declaration
- of `allow_ntsec'.
- * syscalls.cc: Ditto.
-
-Fri Dec 15 18:54:42 2000 Bradley A. Town <townba@pobox.com>
-
- * fhandler_console.cc (read): Add support for xterm-style mouse event
- reporting.
- (fhandler_console::char_command): Honor mouse events.
- (fhandler_console::open): Enable mouse input events.
- (fhandler_console::input_tcsetattr): Ditto.
- * select.cc (peek_console): Add check for mouse events.
-
-Fri Dec 15 17:23:17 2000 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (normalize_posix_path): Calculate path name length overruns
- more dynamically.
- (normalize_win32_path): Ditto.
- * Makefile.in: Avoid scanning the directory twice for *.d files.
-
-Thu Dec 14 23:37:51 2000 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler.h (fhandler_console): Add additional argument to
- char_command method.
- * fhandler_console.cc (fhandler_console::read): Revert previously
- misapplied patch.
- (fhandler_console::char_command): Add a second argument.
- (fhandler_console::write): Recognize when a '?' is found after a
- <esc>[.
-
-Tue Dec 5 17:06:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (cygwin_rexec): Eliminate superfluous call to
- `set_socket_inheritance'.
- * include/sys/socket.h: Add SUS defines for option values to `shutdown'.
-
-Sun Dec 10 17:19:04 2000 Christopher Faylor <cgf@cygnus.com>
-
- * include/sysexits: New file.
-
-2000-12-09 Egor Duda <deo@logos-m.ru>
-
- * autoload.cc: Autoload CharToOemA.
- * dcrt0.cc (dll_crt0_1): Translate command line to OEM if current
- codepage is OEM.
- * environ.cc: Add new option 'codepage' to CYGWIN environment variable.
- * fhandler_clipboard.cc (fhandler_clipboard::read): Read clipboard in
- OEM mode if current codepage is OEM.
- * fhandler_console.cc (fhandler_console::read): Only translate console
- input if current codepage is ANSI.
- * fhandler_console.cc (fhandler_console::write_normal): Translate
- output data if current codepage is ANSI.
- * pinfo.cc (codepage_init): New function. Setup current codepage from
- CYGWIN environment variable and set codepage for file APIs.
- * security.cc (read_sd): Translate file name to it if current codepage
- is OEM.
- * winsup.h: (sys_wcstombs,sys_mbstowcs): Use current codepage for
- translations between multibyte and widechar string and vice versa.
-
-Sat Dec 9 16:29:45 2000 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (normalize_win32_path): Check for explicit use of two slashes
- at the beginning of a path. These should be treated specially
- regardless of whether they are UNC paths or old-style //a paths. Avoid
- adding cwd to a path if the path already begins with '/'.
-
-Fri Dec 8 22:21:01 2000 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (normalize_win32_path): Reorganize logic to accommodate
- chroot. Always check for MAX_PATH overrun. Avoid adding one too many
- backslashes when src path begins with a slash. From Corinna Vinschen.
- * winsup.h: Force demangling for dll_crt0 for newer compilers.
-
-Thu Dec 7 12:10:00 2000 Edward M. Lee <tailbert@yahoo.com>
-
- * cygwin.din: Declare strtok_r for the import lib. Already in the DLL.
-
-Wed Dec 6 15:39:18 2000 Earnie Boyd <earnie_boyd@yahoo.com>
-
- * include/sys/uio.h (readv): Correct prototype.
- (writev): Ditto.
-
-Tue Dec 5 17:06:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * include/sys/uio.h: Include <sys/cdefs.h>. Use __BEGIN_DECL and
- __END_DECL.
- Add declarations for `readv' and `writev'.
-
-Mon Dec 4 20:49:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in: Change `-nostartfiles' to `-nostdlib' to avoid
- automatic linking with default libraries when linking new-cygwin1.dll.
- Link with libgcc.a and libstdc++.a explicitly.
-
-Sun Dec 3 01:20:25 2000 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (normalize_win32_path): Handle UNC paths better.
- (slash_unc_prefix_p): Allow backslash UNC paths.
-
-Sun Dec 3 00:20:25 2000 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Remove some extra cruft.
-
-Sun Dec 3 00:13:26 2000 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Use CXX to build the DLL.
- * configure.in: Find correct c++ compiler.
- * configure: Regenerate.
- * path.cc (normalize_posix_path): Put correct drive at beginning of \foo style paths.
- (chdir): Don't send non-posix path to cygcwd.set.
-
-Sat Dec 2 22:26:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (get_inet_addr ): Close AF_UNIX socket file after reading.
-
-Wed Nov 29 18:25:53 2000 Kazuhiro Fujieda <fujieda@jaist.ac.jp>
-
- * cygheap.cc (chgheap_root::operator =): Check root dir properly.
-
-Thu Nov 29 18:11:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (cygwin_inet_aton): Return nonzero if the address
- is valid, zero if not according to Linux man page.
-
-Mon Nov 27 21:09:50 2000 Kelley Cook <kelley.cook@home.com>
-
- * mmap.cc (munmap): Check that mmap and munmap length match.
-
-Tue Nov 28 18:08:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_disk_file::open): Check for buggy CreateFile
- condition.
- * path.cc (path_conv::check): Get file system type in call to
- GetVolumeInformation to check for file systems with buggy CreateFile.
- * path.h (enum path_types): Add PATH_HASBUGGYOPEN.
- (class path_conv): Add methods `has_buggy_open' and
- `set_has_buggy_open'.
-
-Sun Nov 26 16:26:14 2000 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler.cc (is_at_eof): New function.
- (fhandler_base::raw_read): Detect special case where last error ==
- ERROR_NOACCESS but the file is at EOF. Most UNIXes do not consider
- this to be an error.
-
-Sun Nov 26 14:37:29 2000 Christopher Faylor <cgf@cygnus.com>
-
- * include/cygwin/version.h: Bump DLL minor version number to 7.
-
-Sat Nov 25 11:27:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/version.h: Bump minor API version due to adding
- inet_aton.
-
-Sat Nov 25 11:07:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (cygwin_inet_aton): New function.
- * cygwin.din: Export cygwin_inet_aton as inet_aton.
-
-Sat Nov 25 01:57:42 2000 Kazuhiro Fujieda <fujieda@jaist.ac.jp>
-
- * path.cc (mount_info::read_cygdrive_info_from_registry): Read system
- cygdrive prefix with KEY_READ.
- (mount_info::get_cygdrive_info): Ditto.
-
-Wed Nov 22 11:18:02 2000 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: new-temp.a -> new-templib.a
-
-Mon Nov 20 17:04:43 2000 Christopher Faylor <cgf@cygnus.com>
-
- * spawn.cc (spawn_guts): Quoting was still wrong. Keep trying to
- fix it.
-
-Mon Nov 20 14:26:38 2000 Christopher Faylor <cgf@cygnus.com>
-
- * spawn.cc (spawn_guts): YA tweak for dealing with arcane rules of
- quoting in "normal" Microsoft programs.
- * child_info.h: Bump fork magic number.
- * include/sys/mount.h: Add an entry for mixed mode.
-
-Fri Nov 17 12:28:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (normalize_posix_path): Special care for root directory
- in case of files beginning with a dot.
-
-Fri Nov 17 12:28:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * syslog.cc (syslog): Add users SID to NT syslog entry.
-
-Thu Nov 16 15:59:58 2000 Bradley A. Town <townba@pobox.com>
-
- * fhandler_console.cc: New member variable `dwBufferSize' for `info'.
- (fillin_info): Set `dwBufferSize' to the size of the console buffer.
- (clear_screen): Use width of console buffer to calculate how many
- spaces to clear.
-
-Thu Nov 16 15:24:45 2000 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Make import library creation 'make -j2' friendly.
-
-Thu Nov 16 10:28:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * uinfo.cc (uinfo_init): Call `cygwin_set_impersonation_token' to
- reset `cygheap->user.token' to INVALID_HANDLE_VALUE.
-
-Thu Nov 16 00:18:15 2000 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (interrupt_setup): Don't set signal mask here or races
- occur with main thread. Set it in sigdelayed instead.
- (sigreturn): Reflect change in stack order of ebp and flags.
- (sigdelayed): Set stack frame correctly. Call set_process_mask here
- with flags for last trapped signal.
- (signal_dispatch): Add newmask.
- * sigproc.cc (wait_sig): Eliminate ill-considered attempt to halt
- looping signal processors.
- * perthread.h (signal_dispatch): Add newmask field.
-
-Wed Nov 15 22:08:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * uinfo.cc (internal_getlogin): Change parameter list to reflect
- that `token' is member of cygheap_user now.
- (uinfo_init): Use modified internal_getlogin.
- * syscalls.cc (seteuid): Ditto.
-
-Wed Nov 15 21:56:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.h: Move `token' and `impersonated' from class _pinfo
- to class cygheap_user.
- * pinfo.h: Ditto.
- * fork.cc (fork_child): Change usage of `token' and `impersonated'
- accordingly.
- (fork_parent): Ditto.
- * security.cc (cygwin_set_impersonation_token): Ditto.
- * sigproc.cc (proc_subproc): Ditto.
- * spawn.cc (spawn_guts): Ditto.
- * syscalls.cc (seteuid): Ditto.
- * uinfo.cc (uinfo_init): Ditto.
-
-Wed Nov 15 9:59:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * spawn.cc (spawn_guts): Revert patch to ignore chroot settings
- on creating native Win32 environment.
-
-Wed Nov 15 01:44:37 2000 Christopher Faylor <cgf@cygnus.com>
-
- * fork.cc (slow_pid_reuse): Off-by-one.
-
-Wed Nov 15 01:20:24 2000 Christopher Faylor <cgf@cygnus.com>
-
- Throughout use myself->ppid_handle rather than parent_alive.
- * child_info.h (child_info): Eliminate parent_alive.
- * dcrt0.cc (dll_crt0_1): Call fork_init for debugging pid creation.
- * fork.cc (fork_child): Reflect change to fixup_mmaps_after_fork
- arguments.
- (slow_pid_reuse): New function to grab last 'n' pids to prevent pid
- reuse.
- (fork_parent): Move last_fork_proc into slow_pid_reuse.
- fork_pids debugging. Eliminate unnecessary call to set_child_mmap_ptr.
- (fork_init): New debugging function.
- * mmap.cc (fixup_mmaps_after_fork): Renamed from
- recreate_mmaps_after_fork. Rely on copied data after a fork.
- (set_child_mmap_ptr): Eliminate.
- * pinfo.h (_pinfo): Eliminate parent_alive, mmap_ptr and reflect above
- changes.
- * spawn.cc (spawn_guts): Eliminate vestiges of "old way" of sending new
- hProc to parent process.
-
-Wed Nov 15 0:51:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.cc (cygheap_root::cygheap_root): New function.
- (cygheap_root::~cygheap_root): Ditto.
- (cygheap_root::operator=): Ditto.
- (cygheap_user::~cygheap_user): Ditto.
- (cygheap_user::set_name): Ditto.
- (cygheap_user::set_logsrv): Ditto.
- (cygheap_user::set_domain): Ditto.
- (cygheap_user::set_sid): Ditto.
- * cygheap.h (cygheap_root): New class.
- (cygheap_user): Ditto.
- (init_cygheap): Change type of `root' member to cygheap_root.
- Add `user' member.
- * dir.cc (opendir): Use new `cygheap_root' class.
- * dcrt0.cc (dll_crt0_1): Use new `cygheap_user' class.
- * fork.cc (fork_parent): Ditto.
- * grp.cc (getgroups): Ditto.
- * passwd.cc (search_for): Ditto.
- * path.cc: Use new `cygheap_root' class throughout.
- * pinfo.h (_pinfo): Remove `use_psid'. Move `username', `psid',
- `logsrv', `domain', `orig_{uid,gid}' and `real_{uid,gid}' to
- cygheap_user class.
- * security.cc: Use new `cygheap_user' class throughout.
- * shared.cc (sec_user): Ditto.
- * sigproc.cc (proc_subproc): Remove copy statements for user
- related information moved to `cygheap_user' class.
- * spawn.cc (spawn_guts): Invalidate current chroot settings
- when creating Windows environment. Use new `cygheap_user' class.
- * syscalls.cc: Use new `cygheap_user' class throughout.
- * uinfo.cc: Ditto.
- (internal_getlogin): Change parameters to reflect the
- move of user information to cygheap.
-
-Tue Nov 14 17:05:00 2000 Eric Fifer <efifer@dircon.co.uk>
-
- * dir.cc (rewinddir): Always set __d_position = 0, so next
- call to readdir() will restart the directory scan.
-
-Tue Nov 14 00:51:28 2000 Christopher Faylor <cgf@cygnus.com>
-
- * cygheap.h (init_cygheap): New struct holding values that live in the
- Cygwin heap.
- * child_info.h (child_info): Change pointer type of cygheap to
- init_cygheap.
- * cygheap.cc (init_cheap): Point cygheap_max after contents of cygheap.
- Move some stuff into cygheap.h.
- * dir.cc (opendir): Change to use root and rootlen in cygheap rather
- than in myself.
- (mkdir): Change to use umask in cygheap rather than in myself.
- * path.cc: Ditto, throughout.
- * syscalls.cc (_open): Ditto. Change to use umask in cygheap rather
- than in myself.
- (chroot): Change to allocate root dir on the cygwin heap.
- (umask): Change to use umask in cygheap rather than in myself.
- (cygwin_bind): Ditto.
- * sigproc.cc (proc_subproc): Don't copy umask or root stuff as this
- happens automatically now.
- * pinfo.h (_pinfo): Migrate stuff out of here and into init_cheap.
- * dcrt0.cc (dll_crt0_1): Call cygheap_init later in startup for first
- cygwin process.
-
-Sun Nov 12 23:01:35 2000 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (get_device_number): Allow /dev/ttySn to designate a com
- port.
-
-Sat Nov 11 23:55:19 2000 Christopher Faylor <cgf@cygnus.com>
-
- * path.h: Add __attribute__ ((regparm(x))) to commonly used functions.
- * pinfo.h: Ditto.
- * sigproc.h: Ditto.
- * sync.h: Ditto.
-
-Fri Nov 10 13:48:44 2000 Bradley A. Town <townba@pobox.com>
-
- * dcrt0.cc: New global variable `ignore_case_with_glob'.
- (dll_crt0_1): Disable case-insensitive globbing before calling `main'.
- * environ.cc (glob_init): New static function to set or clear
- `ignore_case_with_glob'.
- (known): Changed "glob" entry to call `glob_init'.
- * glob.c (match): Use case-insensitive globbing if needed.
-
-Thu Nov 9 14:30:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * dir.cc (readdir): Avoid reading from the beginning when
- readdir is called after a previous call has returned NULL.
-
-Wed Nov 8 21:00:31 2000 Christopher Faylor <cgf@cygnus.com>
-
- * select.cc (peek_pipe): Deal with pending newline in pty_master.
-
-Wed Nov 8 15:35:32 2000 Christopher Faylor <cgf@cygnus.com>
-
- * environ.cc (_addenv): malloc space for setenv if cygwin1.dll is used
- in conjunction with older binaries.
- (environ_init): Ditto.
-
-Wed Nov 8 08:49:27 2000 Jason Tishler <jt@dothill.com>
-
- * external.cc (get_cygdrive_info): New function.
- * external.cc (get_cygdrive_prefixes): Change to use get_cygdrive_info
- but toss the user and system flags.
- * external.cc (cygwin_internal): Add new CW_GET_CYGDRIVE_INFO case.
- * path.cc (mount_info::get_cygdrive_prefixes): Remove method.
- * path.cc (mount_info::get_cygdrive_info): New method. Actually,
- get_cygdrive_info is really an enhanced version of
- get_cygdrive_prefixes renamed to get_cygdrive_info that also gets the
- user and system flags.
- * shared_info.h (get_cygdrive_prefixes): Remove method.
- * shared_info.h (get_cygdrive_info): New method.
- * include/cygwin/version.h: Bump minor API version due to adding
- CW_GET_CYGDRIVE_INFO to cygwin_internal.
- * include/sys/cygwin.h (cygwin_getinfo_types): Add
- CW_GET_CYGDRIVE_INFO.
-
-Tue Nov 7 20:58:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc: Add autoload statement for `WSASetLastError'.
- * net.cc (cygwin_connect): Change error code to WSAEINPROGRESS
- when connect returns WSAEWOULDBLOCK.
-
-Mon Nov 6 15:11:57 2000 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (sigthread::init): Reinstitute sigthread lock as a critical
- section.
- (dll_crt0_1): Move sigthread lock initialization to earlier in startup.
- * exceptions.cc (interrupt_on_return): Remove previous kludgy attempt
- to detect an invalid frame.
- (call_handler): Eliminate inner for loop. Grab signal critical section
- lock where appropriate.
- * sigproc.cc (proc_subproc): Restore uid setting.
- * sigproc.h (sigthread): Reinstitute sigthread lock as a critical
- section.
- (sigframe): Grab the sigthread lock before clearing frame to avoid
- having the signal thread use an invalid frame.
-
-Mon Nov 6 11:11:42 2000 Jason Tishler <jt@dothill.com>
-
- * path.cc (mount_info::read_cygdrive_info_from_registry): Use
- CYGWIN_INFO_CYGDRIVE_PREFIX, CYGWIN_INFO_CYGDRIVE_DEFAULT_PREFIX, and
- CYGWIN_INFO_CYGDRIVE_FLAGS.
- * path.cc (mount_info::write_cygdrive_info_to_registry): Use
- CYGWIN_INFO_CYGDRIVE_PREFIX and CYGWIN_INFO_CYGDRIVE_FLAGS.
- * path.cc (mount_info::remove_cygdrive_info_from_registry): Ditto.
- * path.cc (mount_info::get_cygdrive_prefixes): Use
- CYGWIN_INFO_CYGDRIVE_PREFIX.
- * include/cygwin/version.h: Add CYGWIN_INFO_CYGDRIVE_FLAGS,
- CYGWIN_INFO_CYGDRIVE_PREFIX, and CYGWIN_INFO_CYGDRIVE_DEFAULT_PREFIX.
-
-Mon Nov 6 11:10:44 2000 Jason Tishler <jt@dothill.com>
-
- * errno.cc (strerror): Change EAGAIN case to return "Resource
- temporarily unavailable" instead of "No more processes".
-
-Mon Nov 6 01:04:35 2000 Christopher Faylor <cgf@cygnus.com>
-
- * child_info.h (child_info): Add pppid_handle for closing the parent's
- parent handle.
- * dcrt0.cc (_dll_crt0): Close parent's parent handle when spawned or
- forked.
- * debug.cc (add_handle): Correct erroneous reference to handle
- structure when printing warning.
- * exceptions.cc (interrupt_now): Always return 1.
- (interrupt_on_return): Accept a sigthread argument. Check to see if
- this argument has been trashed prior to setting up the stack return.
- (call_handler): Add a loop around attempts to dispatch signals to
- detect case where interrupt_on_return fails.
- (_sigdelayed): Set up a temporary frame pointer prior to calling stuff
- that could trigger an interrupt or the stack walking code will be very
- confused.
- * fork.cc (fork_parent): Move a lot of the setup of the child process
- into proc_subproc.
- * spawn.cc (spawn_guts): Ditto. Use ppid_handle to contact logical
- parent when reparenting execed process.
- * pinfo.h (_pinfo): Remember the logical handle of the parent process.
- * sigproc.cc (proc_subproc): Record most stuff necessary for the _pinfo
- structure that is inferrable from myself when adding children.
- (wait_sig): Always set 'pending_signals' flag when about to kick off
- the signal scanning loop. Reset it only if there are no pending
- signals.
-
-Sun Nov 5 13:46:23 2000 Christopher Faylor <cgf@cygnus.com>
-
- * pinfo (wait_subproc): Son of neverending debug tweaking.
-
-Sun Nov 5 11:45:15 2000 Christopher Faylor <cgf@cygnus.com>
-
- * pinfo (wait_subproc): Neverending debug tweaking.
-
-Sun Nov 5 01:34:51 2000 Christopher Faylor <cgf@cygnus.com>
-
- * pinfo.cc (winpids:add): New method.
- (winpids::enumNT): New method renamed from EnumProcessesNT.
- Use add method to add elements to the lists.
- (winpids::enum9x): New method renamed from EnumProcesses9x.
- Use add method to add elements to the lists.
- (winpids::enum_init): Accept 'winpid' parameter to control whether
- to add all windows pids to the list.
- (winpids::release): New method.
- * pinfo.h (winpids): Reflect above changes.
- * signal.cc (kill_pgrp): Ditto.
- * external.cc (fillout_pinfo): Ditto.
-
-Sat Nov 4 22:07:03 2000 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (handle_sigsuspend): Record frame here for signalling.
- (set_process_mask): Ditto.
-
-Sat Nov 4 14:24:10 2000 Christopher Faylor <cgf@cygnus.com>
-
- * sigproc.cc (wait_subproc): Still more debugging cleanup.
-
-Sat Nov 4 00:51:38 2000 Christopher Faylor <cgf@cygnus.com>
-
- * pinfo.cc (EnumProcessesNT): Avoid 0 pids.
- (EnumProcesses9x): Ditto.
- * sigproc.cc (remove_child): Eliminate.
- (proc_subproc): Move remove_child stuff here.
- (wait_subproc): Synchronize with proc_subproc when error occurs. Add
- more debugging info.
- * sigproc.h (procstuff): Add an entry.
- * spawn.cc (spawn_guts): Add sigframe here.
-
-Fri Nov 3 20:07:14 2000 Christopher Faylor <cgf@cygnus.com>
-
- * sigproc.cc (wait_subproc): Refine debug output.
-
-Thu Nov 2 23:01:20 2000 Christopher Faylor <cgf@cygnus.com>
-
- * pinfo.cc (pinfo::init): Reverse order of setting status and pid info
- in an execed process to avoid a race.
- * sigproc.cc (wait_subproc): Print more info when a WFSO error occurs.
- * automode.c: New file.
- * syscalls.cc (close_all_files): Streamline slightly.
- * cygheap.cc (ccalloc): Clear *entire* allocated array.
-
-Thu Nov 2 01:58:03 2000 Christopher Faylor <cgf@cygnus.com>
-
- * ntdll.h: Remove IO_COUNTERS definition since it is now in winnt.h.
-
-Thu Nov 2 00:10:23 2000 Christopher Faylor <cgf@cygnus.com>
-
- * pinfo.cc (EnumProcessesNT): New function. Eliminates dependence on
- psapi.h.
- (EnumProcesses9x): Rename from EnumProcessesW95. Change arguments to
- be more useful for cygwin.
- (winpids::init): Accommodate argument changes.
- (enum_init): Ditto.
- * pinfo.h (winpids): Make pidlist dynamically extendable by storing it
- as a pointer and remembering the size.
- * ntdll.h: Add extra definitions needed for EnumProcessesNT. Reformat
- via 'indent'.
-
-Wed Nov 1 21:08:23 2000 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (interruptible): Remove obsolete tests.
- (sigreturn): Construct pseudo-frame-pointer so that signal handler can
- figure out where to put return address when signals are coming in
- quickly.
- * path.cc (cwdstuff::get): Allow length 0 buffer length when buffer
- when NULL.
-
-Tue Oct 31 18:12:56 2000 Christopher Faylor <cgf@cygnus.com>
-
- * path.h (has_exec_chars): Standard function for checking for
- executable magic numbers.
- * path.cc (symlink_info::check): Use the above function.
- * fhandler.cc (fhandler_disk_file::open): Ditto.
-
-Tue Oct 31 17:57:52 2000 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (_readlink): Return ENOENT when file does not exist.
-
-Tue Oct 31 23:35:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (fhandler_dev_raw): Add method `fixup_after_exec'.
-
-Tue Oct 31 22:39:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (fhandler_dev_raw): Add definition for method
- `fixup_after_fork'.
- * fhandler_raw.cc (fhandler_dev_raw::fhandler_dev_raw): Add
- `set_need_fixup_after_fork' call.
- (fhandler_dev_raw::~fhandler_dev_raw): Revert to user space
- allocation.
- (fhandler_dev_raw::open): Ditto.
- (fhandler_dev_raw::dup): Ditto. Reset buffer pointer.
- (fhandler_dev_raw::fixup_after_fork): New function.
- * fhandler_tape.cc (fhandler_dev_tape::open): Revert to user space
- memory allocation.
- (fhandler_dev_tape::ioctl): Ditto. Change behaviour on MTSETBLK when
- new size is 1.
-
-Tue Oct 31 20:56:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_tape.cc (fhandler_dev_tape::open): Fix memory allocation.
- Use Cygwin heap instead of user heap.
- (fhandler_dev_tape::ioctl): Ditto.
-
-Tue Oct 31 12:00:06 2000 Christopher Faylor <cgf@cygnus.com>
-
- * pinfo.cc (enum_init): Don't suffer silently if we can't load the
- process enumerators.
-
-Mon Oct 30 16:54:26 2000 Christopher Faylor <cgf@cygnus.com>
-
- * signal.cc (kill_pgrp): Revert 25-Oct change.
- (kill_worker): Ditto.
-
-Sun Oct 29 20:52:31 2000 Christopher Faylor <cgf@cygnus.com>
-
- * include/cygwin/version.h: Bump DLL minor version number to 6.
-
-Sat Oct 28 01:39:53 2000 Christopher Faylor <cgf@cygnus.com>
-
- * configure.in: Eliminate subdir stuff.
- * configure: Regenerate.
- * include/getopt.h (option): Make name field 'const'.
-
-Fri Oct 27 20:51:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc: New file keeping all autoload stuff.
- * Makefile.in: Add autoload.o to dependencies.
- * dcrt0.cc: Move all autoload stuff to autoload.cc.
- * fhandler_mem.cc: Ditto.
- * net.cc: Ditto.
- * uinfo.cc: Ditto.
-
-Fri Oct 27 11:37:20 2000 Christopher Faylor <cgf@cygnus.com>
-
- * sigproc.cc (wait_sig): Add braces to avoid confusion.
-
-Fri Oct 27 11:48:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc: New file.
- * Makefile.in: Add fhandler_socket.o to dependencies.
- * fhandler.h: Change comment.
- * net.cc Move all fhandler_socket methods to fhandler_socket.cc.
- * winsup.h: Add declaration for `ws2_32_handle'.
-
-Thu Oct 26 11:51:59 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * dtable.cc (dtable::release): Check for socket. Change
- cnt_need_fixup_before accordingly.
- (dtable::dup2): Ditto.
- (dtable::fixup_before_fork): New method.
- (dtable::fixup_before_exec): Ditto.
- * dtable.h (class dtable): Add member `cnt_need_fixup_before'. Add
- definition for methods `dec_need_fixup_before', `inc_need_fixup_before',
- `need_fixup_before', `fixup_before_exec' and `fixup_before_fork'.
- * fhandler.h (class fhandler_base): Slight rearrangements. Add
- definitions for methods `fixup_before_fork_exec'.
- (class fhandler_socket): Eliminate superfluous constructor.
- Add member `prot_info_ptr'. Add destructor. Add definitions for
- methods `dup', `fixup_before_fork_exec', `fixup_after_fork' and
- `fixup_after_exec'.
- * fork.cc (fork_parent): Care for file types which need a fixup
- before fork. Start child in suspended state then.
- * net.cc: New global variable `ws2_32_handle' and `wsadata'.
- (fdsock): Check for Winsock version. Call `set_socket_inheritance'
- only if Winsock version < 2.0. Care for `need_fixup' count in fdtab.
- (cygwin_socket): Eliminate call to `set_socket_inheritance'.
- (cygwin_accept): Ditto.
- (cygwin_rcmd): Ditto.
- (cygwin_rresvport): Ditto.
- (cygwin_rexec): Ditto.
- (socketpair): Ditto.
- (fhandler_socket::fhandler_socket): Set `need_fork_fixup'. Allocate
- space for the WSAPROTOCOL_INFOA struct used in fixup.
- (fhandler_socket::~fhandler_socket): New destructor.
- (fhandler_socket::fixup_before_fork_exec): New method.
- (fhandler_socket::fixup_after_fork): Ditto.
- (fhandler_socket::dup): Ditto.
- (wsock_init): New static function.
- (LoadDLLinitfunc (wsock32)): Rearranged.
- (LoadDLLinitfunc (ws2_32)): New function.
- (dummy_autoload): Add autoload statemants for `WSADuplicateSocketA'
- and `WSASocketA'.
- * spawn.cc (spawn_guts): Care for file types which need a fixup
- before exec. Start child in suspended state then.
-
-Wed Oct 25 20:49:59 2000 Christopher Faylor <cgf@cygnus.com>
-
- * signal.cc (kill_pgrp): Don't limit sending of signals to stopped
- processes when sig < 0.
- (kill_worker): Only send SIGCONT to stopped processes when sendSIGCONT.
-
-Wed Oct 25 13:56:39 2000 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (sig_handle): Just make sure that wait_sig loops when
- receiving a SIGCONT. Don't block waiting for completion that will
- never occur.
-
-Wed Oct 25 09:59:14 2000 Christopher Faylor <cgf@cygnus.com>
-
- * dtable.cc (dtable::fixup_after_exec): Use variable rather than
- constantly indexing into fds array.
- (dtable::fixup_after_fork): Ditto.
-
-Wed Oct 25 10:43:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::fcntl): Treat O_NONBLOCK and OLD_O_NDELAY
- as exactly the same. If one is set, both are set.
- * net.cc (fhandler_socket::fcntl): Ditto.
-
-Tue Oct 24 23:58:35 2000 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (do_exit): Remove debugging statement.
-
-Tue Oct 24 23:45:09 2000 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (do_exit): Don't bother looking for pgrp children to send
- SIGHUP if process has never created any children.
- * fork.cc (fork): Set flag indicating that there is another process
- with our process group.
- * spawn.cc (spawn_guts): Ditto.
- * pinfo.h (set_has_pgid_children): New methods for setting when process
- has children in its process group.
- * syscalls.cc (setpgid): Clear has_gid_children if pgid changes.
-
-Tue Oct 24 20:38:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * ntdll.h: New file.
- * fhandler_mem.cc: Move ntdll.dll specific definitions and
- declarations to ntdll.h.
- * sysconf.cc (sysconf): Add support for _SC_NPROCESSORS_CONF,
- _SC_NPROCESSORS_ONLN, _SC_PHYS_PAGES and _SC_AVPHYS_PAGES.
-
-Tue Oct 24 20:00:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::fcntl): Behave properly when passed
- previous version of O_NDELAY.
- * syscalls.cc: Move OLD_O_NDELAY to winsup.h.
- * winsup.h: Define OLD_O_NDELAY now.
-
-Mon Oct 23 21:47:55 2000 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (signal_exit): Kill any executing child process if
- we're dying.
- * path.h: Remove unneeded extern.
- * spawn.cc (std_suffixes): Make static. Don't set dwProcessId here
- since it makes the process unsignalable. Set strace flag that this is
- an execed process stub.
- * strace.cc (strace::vsprntf): Use strace flag to indicate when to
- visually flag that this is an exec stub.
- * include/sys/strace.h (strace): Add 'execing' flag.
-
-Mon Oct 23 16:43:33 2000 Christopher Faylor <cgf@cygnus.com>
-
- * sigproc.cc (proc_subproc): Don't send a false positive if WNOHANG and
- no processes are available for waiting.
-
-Mon Oct 23 22:27:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::fcntl): Setting flags in F_SETFL
- branch according to Linux documentation.
-
-Mon Oct 23 21:43:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * fcntl.cc (_fcntl): Rearrange as wrapper function. Move all
- functionality except F_DUPFD to fhandler classes.
- * fhandler.cc (fhandler_base::fcntl): New method.
- * net.cc (fhandler_socket::fcntl): Ditto.
- * fhandler.h (class fhandler_base): Add method prototype for fcntl().
- (class fhandler_socket): Ditto.
-
-Mon Oct 23 12:44:35 2000 Christopher Faylor <cgf@cygnus.com>
-
- * sigproc.cc (proc_subproc): Correctly handle flags for WNOHANG case.
-
-Mon Oct 23 10:00:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc: Eliminate C++ comments throughout.
-
-Sun Oct 22 23:33:00 2000 Christopher Faylor <cgf@cygnus.com>
-
- * fork.cc (fork): Set sigframe here, since it can pause for a
- considerable amount of time.
- * environ.cc (_addenv): Add debugging.
- * fhandler.cc: Eliminate unneeded include.
- * smallprint.c: Ditto.
-
-Sun Oct 22 12:07:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * pinfo.cc (pinfo_init): Eliminate call to `set_process_privileges'.
- * security.cc (write_sd): Call `set_process_privileges' on the first
- call to `write_sd'.
- (set_process_privileges): Eliminate adjusting SE_BACKUP_NAME privilege.
-
-Sat Oct 21 16:57:23 2000 Christopher Faylor <cgf@cygnus.com>
-
- * pinfo.cc (pinfo::init): Make PID_EXECED signal creation as well as
- PID_IN_USE.
-
-Sat Oct 21 01:52:54 2000 Christopher Faylor <cgf@cygnus.com>
-
- * spawn.cc (spawn_guts): Don't do the reparenting step if we notice
- that the child has exited prior to sending the subprocess_ready signal
- (?).
-
-Sat Oct 21 00:46:36 2000 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler.h (fhandler_console): Remove tcsetpgrp.
- * fhandler_console.cc (fhandler_console::tcsetpgrp): Eliminate.
- * fork.cc (fork_parent): Avoid returning same pid twice in a row
- regardless of OS.
- * pinfo.cc (pinfo::init): Rename create argument to flags and treat it
- as such.
- * signal.cc (set_sigcatchers): New function.
- (signal): Use set_sigcatchers to increment or decrement sigcatcher
- tracker.
- (sigaction): Ditto. Add debugging output.
- * spawn.cc (spawn_guts): Always quote first argv[0] argument when it's
- a COMSPEC shell.
-
-2000-10-20 DJ Delorie <dj@redhat.com>
-
- * times.cc (to_time_t): pass zero time as epoch
- * fhandler.cc (fstat): copy atime/ctime from mtime if they're zero
-
-Thu Oct 19 23:31:41 2000 Christopher Faylor <cgf@cygnus.com>
-
- * external.cc (fillout_pinfo): Pass PID_NOREDIR flag to pinfo init to
- avoid finding execed processes twice.
- * signal.cc (kill_pgrp): Ditto.
- * spawn.cc (spawn_guts): Avoid passing first argument to CreateProcess
- when running a windows shell so that CreateProcess will locate the
- shell. Reorganize so that correct error is returned when CreateProcess
- fails.
-
-Thu Oct 19 13:55:31 2000 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (sigthread::init): Correct overzealous ifdef.
- * exceptions.cc (call_handler): Avoid calling sigthread acquire lock.
- * sigproc.h (sigthread): Comment out lock for now.
- * sync.cc (muto::acquire): Add a minor optimization.
-
-2000-10-18 DJ Delorie <dj@redhat.com>
-
- * Makefile.in: add miscfuncs.cc
- * miscfuncs.cc: new, miscellaneous functions
- * winsup.h: define table-driven tolower/toupper
- * environ.cc: use them
- * fhandler_console.cc: ditto
- * fhandler_termios: ditto
- * path.cc: ditto
- (strncasematch, strcasematch, strcasestr): move to miscfuncs.cc
-
-Wed Oct 18 20:50:27 2000 Christopher Faylor <cgf@cygnus.com>
-
- * sigproc.h (sigthread): Eliminate locking for now since per thread
- signalling is not available.
- * dcrt0.cc (sigthread::init): Ditto.
- (dll_crt0_1): Move set_process_privileges call (temporarily?) to
- pinfo_init.
- (pinfo_init): Only call set_process_privileges when allow_ntsec.
-
-2000-10-18 DJ Delorie <dj@redhat.com>
-
- * dcrt0.cc (dll_crt0_1): init cygcwd before forkee branch
-
- * environ.cc (conv_start_chars): Cache a table of "first
- characters" for environment variables needing conversion.
- (getwinenv): Use it.
- (environ_init): Create it, also check first chars for TERM and
- CYGWIN.
-
- * path.cc: Use lookup table for case insensitive comparisons.
-
-Wed Oct 18 00:48:49 2000 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (call_handler): Make signal pending if sigsave.sig is
- still active.
- * syscalls.cc (_read): Don't clear errno.
- * sigproc.cc (wait_sig): Don't scan the waiting process list after a
- SIGCHLD if there are no zombies to reap.
- * winsup.h: Use __builtin_strcmp.
- * environ.cc (posify): Don't initialize len unless it is required
- (from DJ Delorie <dj@redhat.com>).
-
-Tue Oct 17 14:50:31 2000 Christopher Faylor <cgf@cygnus.com>
-
- * sigproc.cc (proc_subproc): Remove unneeded test for correct process
- in PROC_ADDCHILD. Return 0 when terminated child has just been
- reparented.
- (wait_subproc): Only send SIGCHLD when proc_subproc returns != 0.
- * strace.cc (strace::vsprntf): Only strip .exe extension from program
- name.
-
-2000-10-16 Charles Wilson <cwilson@ece.gatech.edu>
-
- * fhandler_clipboard.cc: new file
- * Makefile.in: include fhandler_clipboard.o in DLL_OFILES list.
- * fhandler.h: add FH_CLIPBOARD to the devices enum.
- (fhandler_dev_clipboard): new
- * path.cc (windows_device_names): add "\\dev\\clipboard"
- (get_device_number): check for "clipboard"
- * dcrt0.cc: declare a few more functions from winuser.h
- * dtable.cc (dtable::build_fhandler): check for FH_CLIPBOARD in
- switch().
-
-Mon Oct 16 21:36:57 2000 Christopher Faylor <cgf@cygnus.com>
-
- * debug.cc (add_handle): Issue warning on attempts to add the same
- handle more than once.
- * fhandler_tty.cc (fhandler_tty_slave::open): Protect some handles.
- (fhandler_tty_common::close): Use proper name when closing handles.
- (fhandler_pty_master::close): Don't close to_slave or from_slave since
- they've already been closed earlier in the function.
- * sigproc.cc (proc_subproc): Don't protect vchild->hProcess. Expect
- that the caller will do this, instead.
- * tty.cc (tty_list::terminate): Use proper name when closing handles.
- (tty::make_pipes): Protect some handles.
-
-Mon Oct 16 18:37:22 2000 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Remove some obsolete stuff.
- * dcrt0.cc (dll_crt0_1): Call signal_fixup_after_exec where appropriate.
- Set myself->uid from parent version.
- Just use ThreadItem Init method. Close or store hexec_proc as appropriate.
- (_dll_crt0): Store user_data->forkee here so that proper tests can be made
- subsequently.
- (do_exit): Remove hExeced stuff.
- * environ.cc (environ_init): Accept environ count as well as environ pointer.
- * environ.h: Reflect above change.
- * pinfo.cc (pinfo_init): Ditto. Accept environ count.
- (fixup_in_spawned_child): Remove.
- * spawn.cc (spawn_guts): Move signal code to dll_crt0_1. Don't suspend
- execing process since it is no longer necessary. Store envc.
- * exceptions.cc (signal_fixup_after_exec): New function.
- (call_handler): Remove hExeced test.
- * child_info.h (cygheap_exec_info): Store envc as well as envp.
- (child_info_spawn): Store hexec_proc so that it can be closed in child.
- * path.cc (normalize_posix_path): Avoid intermediate use of temporary cwd buf.
- (normalize_win32_path): Ditto.
- (cwdstuff::get_initial): Always set lock.
- * sigproc.h: Remove hExeced.
- * strace.cc (strace::vsprntf): Modify to accommodate for lack of hExeced.
- * thread.cc (MTinterface::Init): Merge Init1 and ClearReent into this method.
- (MTinterface::Init1): Eliminate.
- (MTinterface::ClearReent): Eliminate.
- * thread.h: Reflect above changes.
- * include/sys/strace.h (strace): Make microseconds() public.
-
-Sun Oct 15 21:54:52 2000 Christopher Faylor <cgf@cygnus.com>
-
- Make various functions 'regparm', throughout.
- * pinfo.h (_pinfo): Inline simple signal manipulation functions.
- Requires inclusion of thread.h which was removed from .cc files, where
- appropriate. throughout.
- * pinfo.cc: Eliminate signal manipulation functions.
- (_pinfo::exit): Calculate total rusage for exiting process here.
- * cygheap.cc (size2bucket): Eliminate.
- (init_buckets): Ditto.
- (_cmalloc): Calculate size and bits in a loop rather than going through
- a function call.
- (_crealloc): Use stored array index to calculate allocated size.
- * spawn.cc (spawn_guts): Use _pinfo exit method to exit, calculating
- cpu usage.
-
-Sat Oct 14 21:24:16 2000 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (set_console_handler): Don't allocate
- console_handler_thread_waiter. It is obsolete.
- (ctrl_c_handler): Don't use console_handler_thread_waiter.
- * path.cc (hash_path_name): Fix handling of relative names. Make case
- insensitive.
- * path.h (suffix_info): Use initializers.
- * pinfo.h (_pinfo): Avoid initializers for null case.
- * resource.cc (fill_rusage): Zero rest of rusage structure.
- * security.cc (set_process_privileges): Don't reopen parent process.
- Just use hMainProc.
- * signal.cc (signal): Track when a signal handler has been used.
- (sigaction): Ditto.
- * sigproc.cc (pchildren): Use default initializer.
- (zombies): Ditto.
- (sigproc_terminate): Avoid closing handles that will be closed on exit
- anyway.
- (wait_sig): Send signal to "parent" on EXECing, not FORKing.
- (wait_subproc): Send SIGCHLD here rather than in proc_wait to avoid
- potential muto conflicts.
- * sigproc.h (sigthread): Don't initialize to zero. It's the default.
- * spawn.cc (spawn_guts): Fill in resources from exec parent prior to
- termination.
- * sync.h (muto): Don't initialize to zero.
- * syscalls.cc (close_all_files): Use one lock around entire loop and
- call fhandler close/release stuff directly.
- (_read): Don't use ready_for_read if there are not signal handlers
- active.
-
-Sat Oct 14 12:24:24 2000 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (dll_crt0_1): Fix display of "title".
- (do_exit): Use pinfo exit method to exit.
- (__api_fatal): Ditto.
- * exceptions.cc (signal_exit): Ditto.
- * fork.cc (fork_child): Remove debugging stuff. Use pinfo_fixup_after
- fork in place of exec_fixup_after_fork.
- * pinfo.cc (pinfo_fixup_after_fork): New method.
- (pinfo_fixup_in_spawned_child): Ditto.
- (_pinfo::exit): New method.
- (_pinfo::init): Remove recursion. Detect pathological case where pinfo
- structure already exists for new pid.
- * pinfo.h (_pinfo): Reorganize slightly. Add new method and new
- function declarations.
- * sigproc.cc (proc_exists): Previous simplification was a little to
- simple. Try harder to detect if a process exists.
- (proc_terminate): Use PID_EXITED setting to determine if process is
- still around.
- (WFSO): Remove debugging statement.
- (WFMO): Ditto.
- * spawn.cc (exec_fixup_after_fork): Eliminate.
- (spawn_guts): Always set old_title to NULL. Is it really needed? Move
- hexec_proc to pinfo.cc. Call pinfo_fixup_in_spawned_child to eliminate
- handle link after a spawn.
- * include/sys/cygwin.h: Remove PID_NOT_IN_USE. Add PID_EXITED.
-
-Sat Oct 14 10:54:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din: Add symbol hstrerror.
- * net.cc: Change meaning of member `s' of struct host_errmap.
- (set_host_errno): Fix error in loop condition.
- (hstrerror): Ditto.
- (herror): Add appropriate functionality.
- * include/netdb.h: Add declaration of hstrerror.
- * include/cygwin/version.h: Bump CYGWIN_VERSION_API_MINOR to 29.
-
-Sat Oct 14 01:45:25 2000 Christopher Faylor <cgf@cygnus.com>
-
- * cygheap.cc (cygheap_fixup_in_child): Don't page round cygheap copied
- from parent.
- * dcrt0.cc (do_exit): Don't cleanup pinfo on exit. That happens
- automatically now.
- * exceptions.cc (signal_exit): Ditto.
- * fork.cc (fork_parent): Use stack_here value passed in from fork().
- (fork): Figure out top of stack here and pass it to fork_parent.
- * pinfo.cc (_pinfo::record_death): Eliminate.
- * pinfo.h (_pinfo): Ditto.
- * sigproc.cc (proc_exists): Simplify.
- (proc_terminate): Ditto.
- (remove_zombie): Don't cleanup pinfo stuff.
- (wait_sig): Send subproc_ready signal whether execed or spawned.
- * spawn.cc (spawn_guts): Always create subproc_ready event. Use it for
- both exec and spawn.
- (_spawnve): Send proper mode to spawn_guts when mode != _P_OVERLAY.
-
-Thu Oct 12 23:11:05 2000 Christopher Faylor <cgf@cygnus.com>
-
- * dtable.cc (dtable::fixup_after_fork): Revert thinko below.
- * pinfo.cc (set_myself): Show pid in initial strace line.
-
-Thu Oct 12 17:58:03 2000 Christopher Faylor <cgf@cygnus.com>
-
- * child_info: Bump child_info "version".
- (child_info): Move some fields from child_info_spawn to here.
- * cygheap.cc: Make cygheap pointers NOCOPY.
- * dcrt0.cc (dll_crt0_1): Copy cygwin heap here regardless of whether
- we've been forked or execed.
- * dtable.cc (dtable::fixup_after_fork): Just release close-on-exec fds.
- * exceptions.cc (stackdump): Respond to C warning.
- * fork.cc: Reorganize to minimize stack copying.
- (fork_child): New function.
- (fork_parent): Ditto.
- (sync_with_child): Don't suspend the forkee.
- (sync_with_parent): Ditto. Make into a function.
- * heap.cc (heap_init): Add some debugging output.
- * path.cc (path_conv::check): Add an assertion.
- (has_suffix): Ditto.
- * security.cc (get_pw_sid): Defend against NULL.
- * sigproc.cc (proc_subproc): Fix debugging output.
- (wait_sig): Ditto.
- * strace.cc: Make statics NO_COPY throughout.
- (strace::vsprntf): Defend against NULL.
-
-Thu Oct 12 00:25:29 2000 Christopher Faylor <cgf@cygnus.com>
-
- * errno.cc (seterrno_from_win_error): Fix debugging output.
- * fhandler.cc (fhandler_base::fstat): Move to inline method in
- fhandler.h.
- (fhandler_base::set_io_handle): Ditto.
- * fhandler.h (fhandler_base): Make some methods inline.
- * fhandler_console.cc (fhandler_console::write_normal): Make buffer
- larger.
- * sigproc.h (sigframe::sigframe): Actually use set ebp parameter
- correctly.
- * spawn.cc (spawn_guts): Set dwProcessId when exec'ing. Just exit
- immediately after reparenting.
- * syscalls.cc: Sprinkle sigframe stuff throughout.
- * wait.cc (wait4): Set signal frame here.
-
-Tue Oct 10 19:54:06 2000 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (__api_fatal): Don't rely on small_printf to display errors.
- Always display problems to the console, if possible.
-
-Tue Oct 10 15:21:10 2000 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (cwdstuff::get): Set EINVAL when length is zero.
-
-Mon Oct 9 14:07:04 2000 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (mount_info::cygdrive_posix_path): Handle e:foo construction
- correctly.
-
-Mon Oct 9 16:44:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_mem.cc (fhandler_dev_mem::fhandler_dev_mem):
- Fix debug output.
-
-Mon Oct 9 15:58:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_mem.cc: Eliminate unused include statements.
- (fhandler_dev_mem::fhandler_dev_mem): Check for 9X/ME.
-
-Mon Oct 9 15:11:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (fhandler_dev_mem): Erase member `init_phase' and
- member function `init'.
- * fhandler_mem.cc: Add typedefs for NT internal data types
- `SYSTEM_INFORMATION_CLASS' and `SYSTEM_BASIC_INFORMATION'.
- Add prototype for `NtQuerySystemInformation' function.
- (fhandler_dev_mem::fhandler_dev_mem): Takes over initialization task
- from `init'. Use `NtQuerySystemInformation' function to evaluate the
- size of physical memory instead of interval search.
- (fhandler_dev_mem::init): Eliminated.
- (fhandler_dev_mem::open): Don't call `init'.
- (fhandler_dev_mem::read): Eliminate check for `init_phase'.
- (dummy_autoload): Add load statement for `NtQuerySystemInformation'.
-
-Sun Oct 8 22:38:40 2000 Christopher Faylor <cgf@cygnus.com>
-
- * dtable.cc (set_std_handle): Use std_consts array to control
- SetStdHandle settings.
- (dtable::fixup_after_fork): Ditto.
- * exceptions.cc (set_sig_errno): Remove some debugging output.
- * path.cc (path_conv::check): Don't OR need_directory with flags sent
- to symlink_info::check.
- (symlink_info::check): Use PATH_ALL_EXEC to determine when a file is
- executable.
- * path.h (path_types): Add PATH_ALL_EXEC.
- (isexec): Use PATH_ALL_EXEC so that cygexec types will be considered
- executable.
- * pinfo.h (_pinfo): Add a process handle that is kept open throughout
- the life of a cygwin pid.
- * sigproc.cc (proc_exists): Remove hopefully obsolete stuff.
- (proc_subproc): Set up process handle that is kept open throughout the
- life of a cygwin pid. Reorganize PROC_WAIT stuff to use common code.
- (proc_terminate): Close pid lifetime process handle.
- (checkstate): Cleanup.
- (stopped_or_terminated): Move zombie cleanup.
- (remove_zombie): To here.
- * spawn.cc (spawn_guts): Reorganize reparenting code for 1247th time.
-
-Sat Oct 7 13:59:15 2000 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler.h (fhandler_base): Remove obsolete _rpos and _rsize
- elements.
- * fhandler.cc (fhandler_base::open): Ditto.
- * fhandler.cc (fhandler_base::fhandler_base): Ditto.
- (fhandler_base::read): Ditto. Add more debugging output. Don't issue
- a \r when \r\n detected.
- * pipe.cc (make_pipe): Streamline slightly. Make debug output more
- interesting.
- * strace.cc (strace::vsprintf): Use __progname where appropriate to
- distinguish strace output when exec'ing.
-
-Sat Oct 7 19:25:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (fhandler_dev_mem): Add methods mmap, munmap and msync.
- Add `unit' member.
- * fhandler_mem.cc (fhandler_dev_mem): Initialize `unit' as well.
- (init): Care for differences between /dev/mem, /dev/kmem (not
- implemented yet) and /dev/port.
- (open): Change debug message to reflect the device.
- (mmap): New function.
- (munmap): Ditto.
- (msync): Ditto.
- (fstat): Use unit when setting st_dev in stat structure.
- * mmap.cc (mmap): Handle MAP_ANONYMOUS flag.
- Change error handling slightly.
- * path.cc (get_device_number): Handle /dev/port.
-
-Fri Oct 6 23:21:29 2000 Christopher Faylor <cgf@cygnus.com>
-
- * syscalls.cc (_read): Behave properly when passed previous version of
- O_NDELAY. Fix up debugging output.
-
-Thu Oct 5 20:34:48 2000 Christopher Faylor <cgf@cygnus.com>
-
- * net.cc (set_socket_inheritance): Rename from duplicate_socket. Use
- NT specific call when appropriate.
- (__set_winsock_errno): Rename from set_winsock_errno. Accept function
- and line as arguments.
- * path.cc (path_conv::check): Continue the neverending battle to make
- cygwin properly understand that path specs ending in a slash require
- that the path refer to a directory. Windows does not do this by
- default.
- (symlink_info::check): Remove ENOTDIR test. Move it to
- path_conv::check.
- * path.h: Remove obsolete constant.
- * winsup.h (set_winsock_errno): New macro.
-
-Thu Oct 5 14:58:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h: Add mmap(), munmap() and msync() to fhandler_base
- and fhandler_disk_file.
- * mmem.cc (mmap): Eliminated device dependent implementation details.
- These are moved to the appropriate fhandler class.
- (munmap): Ditto.
- (msync): Ditto.
- (fhandler_base::mmap): New method.
- (fhandler_base::munmap): Ditto.
- (fhandler_base::msync): Ditto.
- (fhandler_disk_file::mmap): Ditto.
- (fhandler_disk_file::munmap): Ditto.
- (fhandler_disk_file::msync): Ditto.
-
-Thu Oct 5 01:52:43 2000 Christopher Faylor <cgf@cygnus.com>
-
- * net.cc: General cleanup.
- (fdsock): Return pointer to created fhandler_socket.
- (cygwin_socket): Use pointer returned by fdsock. Return correct errno
- when fd < 0.
-
-Thu Oct 5 00:48:40 2000 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (interruptible): Add extra debugging.
- * sigproc.h (wait_sig): Fill in frame pointer, by default, prior to
- calling or suffer confusion due to September 7 change below.
-
-Wed Oct 4 23:10:27 2000 Christopher Faylor <cgf@cygnus.com>
-
- * include/netinet/tcp.h: Remove winsock.h include.
- * include/sys/cygwin.h: Move windows specific reference within
- conditional.
-
-Thu Oct 5 1:13:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * include/sys/mman.h: Add missing MAP_FAILED macro.
-
-Wed Oct 4 18:48:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (fhandler_dev_mem): Add method `init'. Add members
- `mem_size' and `init_phase'.
- * fhandler_mem.cc (init): New function to figure out the size of
- the physical memory.
- (open): Add checking for illegal flags. Change usage of access mode.
- (write): Add intended functionality.
- (read): Add parameter checking. Eliminate page size constant. Use
- getpagesize() instead. Don't touch errno and don't create debug output
- while init() is running.
- (lseek): Add bounds checking. Fix SEEK_END.
- (fstat): Eliminate page size constant. Use getpagesize() instead.
- (dup): Add intended functionality.
-
-Mon Oct 2 22:15:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * dcrt0.cc: Add LoadDLLFunc statement for RegEnumValueA().
- * net.cc: Change comments related to get_ifconf.
- (get_2k_ifconf): Eliminate `type' variable. Eliminate `sa' parameter.
- (get_nt_ifconf): Ditto.
- (get_9x_ifconf): Ditto. Rewritten.
- (get_ifconf): Change calls to OS specific functions.
-
-Mon Oct 2 15:15:01 2000 Christopher Faylor <cgf@cygnus.com>
-
- * signal.cc (sigaction): Allow new action == oldaction.
-
-Mon Oct 2 11:05:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_mem.cc: Load ntdll functions via autoload method.
- (load_ntdll_funcs): Eliminated.
-
-Sun Oct 1 16:36:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_mem.cc (load_ntdll_funcs): Add missing __stdcall qualifiers.
-
-Sun Oct 1 22:20:39 2000 Christopher Faylor <cgf@cygnus.com>
-
- * cygheap.cc (cygheap_init): Born again function.
- (_cmalloc): Reorganize to accommodate muto locking.
- (_cfree): Use muto lock to avoid multi-thread problems.
- * cygheap.h (incygheap): Just use cygheap_max to find upper cygwin heap
- bounds.
- * dcrt0.cc (dll_crt0_1): Reinstitute cygheap_init call.
- * path.cc (getcwd): Just return cwdstuff::get result, allowing correct
- handling of negative length.
- (cwdstuff::get): Malloc a buffer if one is not available.
-
-Sun Oct 1 2:56:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in: Add fhandler_mem.o to the dependencies.
- * dtable.cc (dtable::build_fhandler): Add case for FH_MEM.
- * fhandler.h: Add FH_MEM device type. Add class fhandler_dev_mem.
- * fhandler_mem.cc: New file. Implementation of class fhandler_dev_mem.
- * path.cc: Add /dev/mem to windows_device_names.
- (get_device_number): Add FH_MEM type.
-
-Sat Sep 30 00:43:42 2000 Christopher Faylor <cgf@cygnus.com>
-
- * cygheap.cc (init_cheap): Set aside space for heap walk pointer.
- (_csbrk): Make logic for detecting when to alloc cognizant of
- initialization condition.
- (_cmalloc): Use a structure to hold bucket size and heap chain pointer.
- Store pointer to next freed block in bucket size location so that it
- will be easy to see if a block is allocated.
- (_cfree): Store pointer to next freed block in bucket size location.
- (_crealloc): Use macro to retrieve bucket size.
- (cygheap_init): Eliminate.
- (cygheap_fixup_in_child): Add second argument to determine if we were
- execed or not. In execed case, walk the heap, cleaning up any orphaned
- blocks.
- * cygheap.h: Add a "MAX" value to cygheap_types. Remove cygheap_init
- declaration. Accommodate new argument to cygheap_fixup_in child.
- * fork.cc (fork): Accommodate extra argument to cygheap_fixup_in_child.
- * dcrt0.cc (dll_crt0_1): Ditto. Remove call to cygheap_init.
-
-Fri Sep 29 21:49:27 2000 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (symlink_info::check): Set executable bit for a file if the
- first two characters are 'MZ' to mirror spawn_guts check.
-
-Sat Sep 30 03:34:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * winsup.h: Add `winME' to os_type symbols.
- * dcrt0.cc (set_os_type): Identify Windows ME systems.
- * (host_dependent_constants::init): Care for winME.
- * uname.cc (uname): Ditto.
-
-Thu Sep 28 01:46:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (get_ifconf): Code cleanup. Split. Call os dependent
- subfunctions instead.
- (get_9x_ifconf): New function for 9X systems, called by get_ifconf.
- (get_nt_ifconf): New function for NT systems, called by get_ifconf.
- (get_2k_ifconf): New function for W2K systems, called by get_ifconf.
-
-Wed Sep 27 01:10:07 2000 Christopher Faylor <cgf@cygnus.com>
-
- * spawn.cc (spawn_guts): Attempt to accommodate archaic windows quoting
- mechanism when dealing with '\' and '"'.
-
-Mon Sep 25 20:47:04 2000 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (quoted): Fix problem where ' quoted strings were skipped.
- * fhandler.h (fhandler_socket::~fhandler_socket): Delete declaration.
- * net.cc: Remove unnecessary "number_of_sockets" usage.
- (fhandler_socket::fhandler_socket): Ditto.
- (fhandler_socket::~fhandler_socket): Delete definition.
- * spawn.cc (spawn_guts): Force first argument passed to CreateProcess
- as a command line to be windows style.
-
-2000-09-25 Christopher Faylor <cgf@cygnus.com>
-
- * spawn.cc (av::dup_maybe): Make function void rather than void *.
- * environ.cc (environ_init): Remember to reparse CYGWIN if envp is
- supplied.
- * heap.cc (_sbrk): Remember frame for signal handling.
- * syscalls.cc (read_handler): Eliminate.
- (_read): Move read_handler code here. Reorganize for one path through
- 'ready_for_read'.
-
-Tue Sep 19 09:46:36 2000 Christopher Faylor <cgf@cygnus.com>
-
- * spawn.cc (spawn_guts): Use actual program argument passed in for
- argv[0] as originally suggested by Kazuhiro Fujieda
- <fujieda@jaist.ac.jp>.
-
-Mon Sep 18 23:17:19 2000 Christopher Faylor <cgf@cygnus.com>
-
- * path.h: Create new input path flag PATH_NEEDDIR.
- * path.cc (path::check): Detect trailing slash before converting to
- windows path. Tell symlink_info::check to check for directory if one is
- found.
- (symlink_info::check): Set errno when path is not a directory if
- pflags & PATH_NEEDDIR.
-
-Mon Sep 18 19:44:08 2000 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler_tty.cc (fhandler_tty_slave::write): Correct typo which
- caused resetting of windows error to ERROR_IO_DEVICE to be ignored.
-
-Mon Sep 18 17:15:37 2000 Kazuhiro Fujieda <fujieda@jaist.ac.jp>
-
- * path.cc (mount_info::read_mounts): Don't delete mount entries of
- which mount points have the cygdrive prefix.
- * (mount_info::add_reg_mount): Properly catch errors on registry
- operations.
- * (mount_info::write_cygdrive_info_to_registry): Ditto.
- * (mount_info::del_reg_mount): Cosmetic changes to be consistent
- with other methods.
- * (mount_info::add_item): Check arguments more precisely.
- Increment nmounts only when registry operations succeed.
-
-Sun Sep 17 22:18:39 2000 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (interruptible): Return 0 if given an address in
- uncommitted memory.
-
-2000-09-16 Egor Duda <deo@logos-m.ru>
-
- * signal.cc (sleep): If interrupted by signal, return the
- requested time minus the time actually slept.
-
-Fri Sep 15 22:30:40 2000 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (handle_exceptions): Just "core dump" if SIGSEGV in
- signal thread.
- * external.cc (fillout_pinfo): Fix compiler warning.
- * sigproc.h: Eliminate special asm naming for sig_dispatch_pending.
- * sigproc.cc (sig_send): Remove debugging statements.
-
-Wed Sep 13 14:56:47 2000 Christopher Faylor <cgf@cygnus.com>
-
- * spawn.cc (av): Hide 'calloced' field and limit cstrduping to class
- methods only.
- (spawn_guts): Use methods for manipulating most newargv stuff.
-
-2000-09-13 Egor Duda <deo@logos-m.ru>
-
- * child_info.h (child_info_spawn::~child_info_spawn): Avoid
- memory leaks in cygheap.
- * spawn.cc (spawn_guts): Ditto.
-
-Wed Sep 13 14:28:03 2000 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (quoted): Return next character after a quoted string when
- not doing special quote processing. Also ensure that non-NULL is
- returned in all circumstances.
-
-Wed Sep 13 10:26:16 2000 Christopher Faylor <cgf@cygnus.com>
-
- * spawn.cc (spawn_guts): Ensure that argv[0] is correctly set to the
- full path when a script is detected. Suggested by Kazuhiro Fujieda
- <fujieda@jaist.ac.jp>.
-
-Tue Sep 12 22:33:30 2000 Christopher Faylor <cgf@cygnus.com>
-
- * external.cc (fillout_pinfo): Handle explicit pids correctly.
-
-Tue Sep 12 14:37:32 2000 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (normalize_posix_path): Fix more slashdot madness.
-
-Tue Sep 12 12:29:29 2000 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Make clean target remove *.d.
-
-Mon Sep 11 13:19:15 2000 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (normalize_posix_path): Correctly deal with a "." parameter.
-
-Sun Sep 10 20:23:35 2000 Christopher Faylor <cgf@cygnus.com>
-
- * cygheap.cc (init_cheap): Just use any old address for the cygwin
- heap.
- * exceptions.cc (signal_exit): Don't terminate the main thread. Just
- try to exit in this thread really quickly.
- * signal.cc (kill_pgrp): Fix typo which caused pinfo structure to be
- assigned incorrectly.
-
-Sun Sep 10 12:40:49 2000 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (dll_crt0_1): Initialize thread and debug stuff before
- handling exec/fork.
- * dtable.cc (dtable::fixup_after_exec): Always clear out the read ahead
- buffer whether closing or adjusting.
- * path.cc (chdir): Avoid a compiler warning.
-
-Sat Sep 9 23:29:17 2000 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (chdir): Use the full path for cwd_win32. Consider attempts
- to chdir to strings of dots > 2 to be an error. Pass 'dir' argument to
- cygcwd.set.
- (cwdstuff::set): Need to treat arguments from chdir differently.
- * path.h (cwdstuff): Add an argument to set.
-
-Fri Sep 8 11:50:09 2000 Christopher Faylor <cgf@cygnus.com>
-
- * lib/_cygwin_crt0_common.cc: Add missing header files.
-
-Thu Sep 7 23:07:21 2000 Christopher Faylor <cgf@cygnus.com>
-
- * sigproc.h (sigframe::set): Eliminate second argument. Default bp to
- current frame pointer rather than using this within the function, which
- is unstable when this method is not inlined.
- * net.cc: Eliminate use of second argument to sigframe.set throughout.
- * select.cc (cygwin_select): Ditto.
- * sigproc.cc (sig_send): Ditto.
-
-Thu Sep 7 22:45:16 2000 Christopher Faylor <cgf@cygnus.com>
-
- Break out more header info into separate files. Use appropriate
- header files throughout.
- * shared.h: Remove.
- * cygwin_version.h: New file.
- * delqueue.h: New file.
- * environ.h: New file.
- * host_dependent.h: New file.
- * perprocess.h: New file.
- * registry.h: New file.
- * security.h: New file.
-
-Thu Sep 7 12:14:43 2000 Christopher Faylor <cgf@cygnus.com>
-
- Split out tty and shared_info stuff into their own headers and use
- throughout. Include sys/termios.h for files which need it.
- * tty.h: New file.
- * shared_info.h: New file.
- * fhandler.h: Move inline methods that rely on tty stuff to
- fhandler_console.cc.
- * fhandler_tty.cc (fhandler_pty_master::process_slave_output): Set
- output_done_event immediately after reading data to speed up tty output
- processing.
- (process_output): Set write_error to errno or zero.
- (fhandler_tty_slave::write): Check previous write error prior to
- writing to slave end of pipe. This allows tty output to be slightly
- less synchronous.
- * fhandler_console.cc (fhandler_console::tcsetpgrp): Moved here from
- fhandler.h.
- (fhandler_console::set_input_state): Ditto.
-
-Wed Sep 6 21:11:13 2000 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (signal_exit): Reset all mutos owned by the main
- thread.
- * fhandler.h: Define *_output_mutex macros for serializing tty output.
- (fhandler_termios): Remove restart_output_event. Define dummy output
- mutex methods.
- (fhandler_pty_master): Remove unneeded fixup_after_fork method.
- * fhandler_termios.cc (fhandler_termios::line_edit): Acquire
- output_mutex when CTRL-S is hit. Release it on CTRL-Q.
- * fhandler_tty.cc (fhandler_pty_master::process_slave_output): Remove
- inappropriate OutputStopped test here. Just use the output mutex.
- (fhandler_pty_master::fhandler_pty_master): Remove obsolete reference
- to restart_output_event.
- (fhandler_tty_common::close): Ditto.
- (fhandler_pty_master::set_close_on_exec): Ditto.
- (fhandler_pty_master::fixup_after_fork): Delete.
- * tty.cc (tty::common_init): Ditto.
- * sync.cc (muto::reset): New method.
- * sync.h: Declare above method.
-
-Wed Sep 6 16:56:38 2000 Christopher Faylor <cgf@cygnus.com>
-
- * sigproc.cc: Add include file for proper definitions.
- * spawn.cc: Ditto.
- * winsup.h: Define cfree to avoid newlib pollution.
-
-Wed Sep 6 14:11:51 2000 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in (CFLAGS): Ensure that -MD is always added even when
- CFLAGS is overwritten.
-
-Wed Sep 6 02:40:12 2000 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (cwdstuff::get_initial): Keep caching alive.
- (mount_info::conv_to_win32_path): Fill out relative path in failing
- case.
-
-Tue Sep 5 21:36:15 2000 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (normalize_posix_path): Deal with error return from cygcwd.get.
- (normalize_win32_path): Ditto.
- (mount_info::conv_to_win32_path): Ditto.
- (cwdstuff::get): Set buf to NULL on error.
-
-Tue Sep 5 17:49:34 2000 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (readlink): 'max' should be a 'min' or we'll suffer
- buffer overflow.
-
-Mon Sep 4 22:53:58 2000 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (cwd_win32): Eliminate.
- (cwd_posix): Eliminate.
- (cwd_hash): Eliminate.
- (cwdstuff::init): Rename from cwd_init.
- (cwdstuff::fixup_after_exec): Rename from cwd_fixup_after_exec.
- (cwdstuff::get): Rename from get_cwd_inner.
- (normalize_posix_path): Eliminate cwd argument. Just calculate when
- necessary.
- (normalize_win32_path): Ditto.
- (mount_info::conv_to_win32_path): Eliminate cwd retrieval here.
- (mount_info::conv_to_posix_path): Ditto.
- (hash_path_name): Accommodate additional methods in cwdstuff.
- (get_cwd_win32): Eliminate.
- (getcwd): Use cwdstuff methods. Properly handle case where buf == NULL
- and len < 0.
- (cwdstuff::get_hash): New method.
- (cwdstuff::get_initial): New method.
- (cwdstuff::set): New method.
- (cwdstuff::get): New method.
- (cwdstuff::copy): New method.
- * path.h: Move cwdstuff struct here. Add a bunch of stuff to cwdstuff.
- Make cygcwd an extern.
- * spawn.cc (spawn_guts): Use copy method to get copies of cwd info to
- pass to execed process.
- * dcrt0.cc (dll_crt0_1): Use cygcwd methods for cwd initialization.
-
-2000-09-03 Egor Duda <deo@logos-m.ru>
-
- * path.cc (readlink): Check if buffer length is positive.
- Truncate output to buffer length. Don't terminate buffer
- with '\0'.
-
-Sun Sep 3 00:38:40 2000 Christopher Faylor <cgf@cygnus.com>
-
- * environ.cc (environ_init): Don't free the new environment table after
- we've just copied stuff to it.
-
-Sun Sep 3 00:07:32 2000 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Add cygheap.o.
- * child_info.h: Add specific exec class.
- * cygheap.h: New file. Contains declarations for cygwin heap.
- * cygheap.cc: New file. Implements cygwin heap functions.
- * dcrt0.cc (quoted): Simplify due to new method for passing arguments
- between cygwin programs.
- (alloc_stack_hard_way): Attempt to handle overlapped stack.
- (dll_crt0_1): Move child_info processing here. Accommodate new method
- for passing arguments between cygwin programs. Initialize cygwin heap.
- Establish __argc and __argv variables.
- (_dll_crt0): Move most of child_info processing to dll_crt0_1.
- (cygwin_dll_init): Remove duplication.
- * dtable.cc (dtable::extend): Allocate dtable using cygwin heap.
- (dtable::build_fhandler): Ditto for fhandler type being constructed.
- (dtable::dup_worker): Free new fhandler from cygwin heap on error.
- (dtable::select_*): Don't assume that this == fdtab.
- (dtable::linearize_fd_array): Delete.
- (dtable::delinearize_fd_array): Delete.
- (dtable::fixup_after_exec): New file.
- (dtable::vfork_child_dup): Use cygwin heap.
- (dtable::vfork_parent_restore): Ditto.
- * dtable.h: Remove obsolete methods. Add new method.
- * environ.cc (posify): Eliminate already_posix parameter and logic.
- (envsize): New function.
- (_addenv): Use envsize.
- (environ_init): Accept an argument pointing to an existing environment
- list. If supplied, allocate space for this in the the program's heap.
- * fhandler.cc (fhandler_base::operator =): Move here from fhandler.h.
- Use cygwin heap to allocate filenames.
- (fhandler_base::set_name): Allocate/free names from cygwin heap.
- (fhandler_base::linearize): Delete.
- (fhandler_base::de_linearize): Delete.
- (fhandler_base::operator delete): Free from cygwin heap.
- (fhandler_base::~fhandler_base): Ditto.
- * fhandler.h: Accommodate elimination of *linearize and other changes
- above.
- * fhandler_console.cc (fhandler_console::fixup_after_exec): Rename from
- de_linearize.
- * heap.h: New file.
- * fhandler_tty.cc (fhandler_tty_slave::fhandler_tty_slave): Use cygwin
- heap for name. fhandler_tty::fixup_after_exec): Rename from
- de_linearize.
- * fork.cc (fork): Call cygheap_fixup_in_child.
- * heap.cc: Use declarations in heap.h.
- * malloc.cc: Sprinkle assertions throughout to catch attempts to
- free/realloc something from the cygwin heap.
- * path.cc: Throughout, eliminate use of per-thread cache for cwd. Use
- cwd_* functions rather than cwd_* variables to access cwd_win32 and
- cwd_posix.
- (cwd_win32): New function.
- (cwd_posix): New function.
- (cwd_hash): New function.
- (cwd_fixup_after_exec): New function.
- * path.h: Accommodate path.cc changes.
- * pinfo.cc (pinfo_init): Accept a pointer to an environment table.
- Pass this to environ_init. Eliminate old 'title' tests.
- * pinfo.h: Accommodate above change in argument.
- * spawn.cc (struct av): New method for building argv list.
- (av::unshift): New method.
- (spawn_guts): Allocate everything that the child process needs in the
- cygwin heap and pass a pointer to this to the child. Build argv list
- using new method. Eliminate delinearize stuff.
- * thread.h: Eliminate _cwd_win32 and _cwd_posix buffers.
- * winsup.h: Eliminate obsolete functions. Add envsize() declaration.
-
-2000-09-02 Egor Duda <deo@logos-m.ru>
-
- * Makefile.in: Remove "make check" support. It is now in
- winsup/Makefile.in.
-
-Fri Sep 1 21:17:03 2000 Christopher Faylor <cgf@cygnus.com>
-
- * sigproc.cc (mychild): New function.
- (proc_subproc): Use mychild() to determine if a specific pid is valid
- for wait()ing.
-
-Fri Sep 1 16:57:44 2000 Christopher Faylor <cgf@cygnus.com>
-
- * sigproc.cc (sigproc_init): Create wait_sig_inited without auto-reset
- to avoid potential races.
- (init_child_info): Avoid unneeded test.
-
-Fri Sep 1 16:51:26 2000 Christopher Faylor <cgf@cygnus.com>
-
- * sigproc.cc (proc_info): Rename proc_exists which takes a pid to
- "pid_exists".
- * shared.h: Split out "child_info" stuff into a new header file and
- use where necessary.
- Declare pid_exists.
- * child_info.h: New file.
-
-Thu Aug 31 16:06:21 2000 Christopher Faylor <cgf@cygnus.com>
-
- * errno.cc (set_errno_from_win_error): Actually use arguments to
- strace_printf.
-
-2000-08-30 DJ Delorie <dj@redhat.com>
-
- * times.cc (gettimeofday): use GetSystemTimeAsFileTime to avoid a
- conversion
- (FACTOR): correct value
- (genf): set milliseconds to zero, DOW to 4.
-
-2000-08-29 Egor Duda <deo@logos-m.ru>
-
- * grp.cc (getgroups): fail with EINVAL if array is not large
- enough to hold all supplementary group IDs.
-
-Mon Aug 28 22:03:21 2000 Christopher Faylor <cgf@cygnus.com>
-
- * signal.cc (_raise): New function.
- * exceptions.cc (unused_sig_wrapper): Remove _raise.
- * sigproc.h (class sigframe): Default frames to skip to zero or suffer
- from exuberant optimization.
- * fhandler_tty.cc (fhandler_tty::write): Set appropriate errno when
- WriteFile to pipe fails.
-
-Fri Aug 25 23:44:48 2000 Christopher Faylor <cgf@cygnus.com>
-
- * pinfo.h (pinfo): Un-inline release.
- * pinfo.cc (pinfo::release): Move here from pinfo.h.
- * sigproc.cc (proc_terminate): Remove bogus 'pinfo child' which caused
- strange destruction of random regions of memory when destructor was
- invoked.
-
-Fri Aug 25 21:25:32 2000 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (dll_crt0_1): Move set_os_type.
- (_dll_crt0): To here.
- (cygwin_dll_init): And here.
- * external.cc (fillout_pinfo): Use more foolproof method for scanning
- for pids.
- * pinfo.cc (set_myself): Eliminate myself_identity.init.
- * sigproc.cc (wait_sig): Do it here instead to reduce the amount of
- time where there could potentially be two processes with the same pid.
- * spawn.cc (spawn_guts): Eliminate duplicate initialization.
- * include/sys/cygwin.h: Mark unused PID_* elements.
-
-Fri Aug 25 21:49:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * exec.cc (_execve): Change definition according to declaration in
- newlib/libc/include/sys/unistd.h.
-
-Thu Aug 24 22:17:19 2000 Christopher Faylor <cgf@cygnus.com>
-
- * external.cc (cygwin_internal): Add CW_INIT_EXCEPTIONS to allow cygwin
- exception handling on threads not created by cygwin.
- * sigproc.cc (proc_terminate): Don't release pinfo structs since we are
- exiting.
- * include/sys/cygwin.h: Add CW_INIT_EXCEPTIONS.
-
-Thu Aug 24 17:16:14 2000 Christopher Faylor <cgf@cygnus.com>
-
- * select.cc (cygwin_select): Correct logic for "always_ready" fds or
- when there is no wait specified.
- * syslog.cc (pass_handler::set_message): Zero the buffer prior to
- setting it.
-
-2000-08-24 Egor Duda <deo@logos-m.ru>
-
- * include/cygwin/core_dump.h: New file, contains structures used in
- cygwin core core files.
- * include/sys/procfs.h: New file, needed to autoconfigure cygwin core
- dumps support in bfd.
-
-Thu Aug 24 13:50:15 2000 Christopher Faylor <cgf@cygnus.com>
-
- * environ.cc (parse_thing): nobinmode should force O_TEXT.
- (regopt): Use correct path to find LOCAL_MACHINE registry options.
- * fhandler.cc (fhandler_base::open): Set binary mode only when binmode
- == O_BINARY.
- * pipe.cc (pipe): Pipe handling should rely on binmode not _fmode now
- that the two are different.
-
-Thu Aug 24 13:21:09 2000 Christopher Faylor <cgf@cygnus.com>
-
- * include/sys/cygwin.h (strace_printf_wrap): Force printing when
- _STRACE_SYSTEM.
- (strace_printf_wrap1): Ditto.
-
-Thu Aug 24 12:30:17 2000 Christopher Faylor <cgf@cygnus.com>
-
- * debug.h: Allow some debug defines for use in header files.
-
-Wed Aug 23 23:00:24 2000 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (dll_crt0_1): Move exception list and constructor stuff
- earlier in the process. Use new second argument to set_myself.
- (cygwin_dll_init): Initialize exception list and constructor stuff
- here.
- (_dll_crt0): And here. Also, deal with inherited pinfo shared memory
- region from parent.
- * pinfo.cc (set_myself): Accept a second argument signifying the a
- shared memory region, passed from an execing parent.
- (pinfo_init): Ditto.
- * pinfo.h: Ditto.
- * shared.h (child_info): Add a handle field to pass to child.
- * spawn.cc (spawn_guts): Create a shared handle to pass to an execed
- child.
- * winsup.h: Remove extraneous declaration.
-
-Wed Aug 23 10:51:57 2000 Christopher Faylor <cgf@cygnus.com>
-
- * include/sys/cygwin.h: Protect class definitions.
-
-Tue Aug 22 13:57:36 2000 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (symlink_info::check): Clear error on each iteration of
- extension check.
-
-Tue Aug 22 11:23:59 2000 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Don't include '.d' file if there are none generated yet.
-
-Tue Aug 22 11:08:11 2000 Christopher Faylor <cgf@cygnus.com>
-
- * include/sys/cygwin.h: Declare some thread classes.
- * include/mntent.h: Avoid declaring functions.
-
-Tue Aug 22 01:08:01 2000 Christopher Faylor <cgf@cygnus.com>
-
- * winsup.h: Eliminate inclusion of most of the cygwin .h files. Use .h
- files only in sources which require them.
- * Makefile.in: Generate dependencies with -MD option.
-
-Mon Aug 21 23:49:05 2000 Christopher Faylor <cgf@cygnus.com>
-
- * cygerrno.h: New file. Use this throughout whenever errno
- manipulation is required.
- * errno.cc: Use DWORD to hold Windows errors.
- (geterrno_from_win_error): New function.
- (seterrno_from_win_error): Use geterrno_from_win_error to convert
- supplied windows error (suggested by Corinna Vinschen).
- * path.cc (symlink_info): Add error element.
- * path.cc (path_conv::check): Remove errno setting. Use new
- symlink_info errno element to set path_conv error, where appropriate.
- (symlink_info::check): Set error element rather than attempting to
- manipulate errno. Add more checks for trailing / and /.. even though
- they are currently useless. Avoid setting EINVAL.
-
-Mon Aug 21 23:49:05 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (normalize_posix_path): Correct check for trailing /.
-
-2000-08-21 DJ Delorie <dj@redhat.com>
-
- * include/cygwin/cygwin_dll.h (DECLARE_CYGWIN_DLL): hinstance,
- not handle.
-
-Fri Aug 18 11:11:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * dtable.cc (dtable::dup2): Extend fdtab if newfd is out of current
- allocated bounds.
-
-Sat Aug 12 01:47:28 2000 Christopher Faylor <cgf@cygnus.com>
-
- * mkvers.sh: Properly trap exit removal of temp file. Remove debugging
- statement.
-
-Sat Aug 12 01:37:56 2000 Christopher Faylor <cgf@cygnus.com>
-
- * poll.cc: Make winsup.h the first include file, re 2000-08-02 change.
-
-Sat Aug 12 01:33:12 2000 Christopher Faylor <cgf@cygnus.com>
-
- * winsup.h: Split out dtable definitions into separate header file.
- * dtable.h: New file.
- * sigproc.h: Eliminate pinfo.h usage here. Use it in source files that
- need it.
-
-Sat Aug 12 01:08:11 2000 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Use dtable.o rather than hinfo.o.
-
-Sat Aug 12 00:47:11 2000 Christopher Faylor <cgf@cygnus.com>
-
- Rename hinfo -> dtable. Name the former dtable array 'fdtab'.
-
-Fri Aug 11 14:47:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * poll.cc: Allow any descriptor and any number of descriptors.
- Allocate fd_set struct sdynamically.
-
-Fri Aug 11 14:47:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * poll.cc: Add bounds checking for file descriptors. Return POLLNVAL
- if fd is invalid. Return POLLERR for each valid fd if cygwin_select
- returned with error.
- include/sys/poll.h: Change POLLERR comment according to above change.
-
-Thu Aug 10 21:54:29 2000 Christopher Faylor <cgf@cygnus.com>
-
- * syslog.cc (syslog): Use a less malloc-intensive method for allocating
- the buffer. Also fix a buffer overrun.
-
-Thu Aug 10 15:31:39 2000 Christopher Faylor <cgf@cygnus.com>
-
- * winsup.h: Change strchr inline for strange gcc problem.
- * select.cc (select_stuff::wait): Bounds check w4 array.
-
-Thu Aug 10 15:17:53 2000 Christopher Faylor <cgf@cygnus.com>
-
- * dir.cc (readdir): Ensure that errno is *only* set when we've run out
- of filenames.
- * fhandler.cc (fhandler_disk_file::fstat): Use modern method for saving
- errno, making it effective for the whole function.
-
-Tue Aug 8 22:25:39 2000 Christopher Faylor <cgf@cygnus.com>
-
- * select.cc (allocfd_set): Zero allocated fd_set.
- (cygwin_select): Move fd_set copying logic from ::wait to here. Use
- common return through sell.poll.
- (select_stuff::wait): Just return success or failure and let caller
- fill in fd_set.
- * pinfo.h (pinfo): Eliminate self-referential pointer to sidbuf since
- pinfo structure exists at random locations now.
- * fork.cc (fork): Use 'use_psid' element to control when the psid is
- relevant.
- * shared.cc (sec_user): Ditto.
- * spawn.cc (spawn_guts): Ditto.
- * uinfo.cc (internal_getlogin): Ditto.
- * syscall.cc (seteuid): Ditto. Set use_psid element.
-
-Tue Aug 8 13:20:00 2000 Bob Wilson <bwilson@tensilica.com>
-
- * fhandler_serial.cc (tcsendbreak): "sleeptime" argument to usleep()
- must be in units of microseconds, not milliseconds.
-
-Mon Aug 7 00:11:35 2000 Christopher Faylor <cgf@cygnus.com>
-
- * include/cygwin/cygwin_dll.h: Remove extraneous (and incorrect)
- declarations.
-
-Fri Aug 4 00:00:46 2000 Christopher Faylor <cgf@cygnus.com>
-
- * hinfo.cc (hinfo::find_unused_handle): Just check for table entry ==
- NULL since we are already bounds checked by default.
- * thread.cc (ResourceLocks::Lock): Streamline this function since it is
- called a lot.
- (ReleaseResourceLock): Ditto.
-
-Thu Aug 3 20:44:39 2000 Christopher Faylor <cgf@cygnus.com>
-
- * select.cc (fhandler_console::select_read): Call set_cursor_maybe
- since select may block and cursor may not be visible.
- * select.cc (fhandler_console::select_write): Ditto.
- * select.cc (fhandler_console::select_except): Ditto.
-
-Thu Aug 3 09:01:14 2000 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler_tty.cc (fhandler_pty_master::process_slave_output): Set
- length field correctly when "need_nl".
-
-Wed Aug 2 22:58:07 2000 Christopher Faylor <cgf@cygnus.com>
-
- * fork.cc (vfork): Store complete stack frame in vfork_save structure
- for later recovery.
- * spawn.cc (spawn_guts): Reorganize slightly to consolidate handling
- when there is a CreateProcess error.
- (_spawnve): Only longjmp back to vfork handling when a process has been
- successfuly started.
- * winsup.h (vfork_save): Extend to include frame info. Remove obsolete
- cpplus conditionals.
-
-Wed Aug 2 15:14:51 2000 Christopher Faylor <cgf@cygnus.com>
-
- * strace.cc (strace::prntf): Make second argument the function name,
- rather than use special format options.
- (strace::vprntf): Ditto.
- (getfunc): New function.
- * include/sys/strace.h: Reflect above changes.
- * smallprint.c (__small_vsprintf): Eliminate '%F' formatting.
- * pinfo.cc (set_myself): Modify for new strace::prntf parameter.
- * errno.cc (seterrno_from_win_error): Ditto.
- * fhandler_tty.cc (fhandler_tty_common::__acquire_output_mutex): Ditto.
- * fhandler_tty.cc (fhandler_tty_common::__release_output_mutex): Ditto.
-
-Wed Aug 2 13:20:04 2000 Christopher Faylor <cgf@cygnus.com>
-
- * regexp/regexp.c: Add winsup.h.
-
-2000-08-02 DJ Delorie <dj@redhat.com>
-
- * winsup.h: take out protections of environ, errno, allow C use
- * *.cc: put winsup.h before other headers (for __INSIDE_CYGWIN__);
- use cur_environ() instead of just environ
- * times.cc: remove import protections
- * glob.c: add winsup.h
- * localtime.c: ditto
- * smallprint.c: ditto
- * Makefile.in: don't __INSIDE_CYGWIN__ as it messes up profiling.
-
-Wed Aug 2 11:22:53 2000 Christopher Faylor <cgf@cygnus.com>
-
- * include/sys/strace.h: Fix strace definition.
-
-Tue Aug 1 23:37:08 2000 Christopher Faylor <cgf@cygnus.com>
-
- * strace.h: Add kludgy workarounds to avoid using deprecated methods
- for variable argument macros when possible.
- * sigproc.cc: Throughout, use sigproc_printf rather than sip_printf.
- * strace.cc (strace::prntf): Remove 'active' check, since callers are
- supposed to ensure this.
- (__system_printf): Remove. Subsumed by strace::prntf.
- * winsup.h: Define "NEW_MACRO_VARARGS" to indicate when to use new
- macro varargs capability.
-
-Sun Jul 30 13:54:35 2000 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler_console.cc: Remove VK_DIVIDE detection.
- (get_nonascii_key): Simplify previous patch to return ascii char if it
- is non-zero. Add a second "temporary buffer" argument to help with
- thread safety.
- * select.cc (peek_console): Pass a temporary buffer argument to
- get_nonascii_key.
-
-Sat Jul 29 14:32:12 2000 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler_console.cc: Add VK_DIVIDE detection. Return virtual keycode
- if it is not detected and it is less than ' '.
-
-Sat Jul 29 13:33:49 2000 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (chdir): Avoid trailing dot calculation when chdir == '/'
- or we end up with an empty string.
-
-Sat Jul 29 12:11:33 2000 Christopher Faylor <cgf@cygnus.com>
-
- * include/cygwin/version.h: Bump DLL minor version number to 5 due
- to all of the changes below.
-
-Sat Jul 29 12:01:32 2000 Christopher Faylor <cgf@cygnus.com>
-
- Redefine process structure to avoid a fixed size table. Redefine
- pinfo/_pinfo classes. Use these throughout.
- * dcrt0.cc (dll_crt0_1): Accommodate set_myself argument change.
- (__api_fatal): Accommodate _pinfo::record_death argument change.
- * exceptions.cc (really_exit): Ditto.
- (sig_handle_tty_stop): Use pinfo constructor to access process info.
- (events_init): Don't create pinfo_mutex since it is no longer required.
- * external.cc (fillout_pinfo): Use winpids class to iterate over all
- system pids.
- (cygwin_internal): lock_pinfo_for_update and unlock_pinfo are now
- noops.
- * fhandler_termios.cc (fhandler_termios::set_ctty): Use pinfo
- constructor to access process info.
- * fork.cc (fork): Reorganize to initialize child info after the child
- has started since that is when we know the child's winpid, which is
- necessary to allocate the pinfo shared memory.
- * mmap.cc (recreate_mmaps_after_fork): Change arg type to _pinfo.
- * pinfo.cc: Rename pinfo methods to _pinfo throughout. Eliminate
- pinfo_list stuff.
- (set_myself): Accept a pid argument now. Call pinfo initializer to
- initialize myself. Detect when this is an "execed" process and create
- an "indirect" pid block.
- (pinfo_init): Accommodate set_myself arg change.
- (procinfo): Remove.
- (pinfo::lock_pinfo): Remove.
- (pinfo::unlock_pinfo): Remove.
- (pinfo::init): New method. Allocates shared memory space for process
- pinfo structure.
- (pinfo::record_death): Don't call locking functions.
- (cygwin_winpid_to_pid): Simplify by using new pinfo constructor.
- (EnumProcessesW95): New function for iterating over processes on
- Windows 95.
- (winpids::winpids): New constructor for winpids class. Sets up a list
- of process ids.
- (enum_init): Initialize w95/wnt pid enumerators.
- * shared.cc (shared-info::initialize): Remove pid initialization.
- * shared.h: Move pinfo stuff into pinfo.h.
- (class shared_info): Remove pinfo_list element.
- * signal.cc (kill_worker): Use pinfo constructor to access process
- info.
- (kill_pgrp): Ditto. Use winpids methods to access list of processes.
- * sigproc.cc: Throughout, modify to use _pinfo where appropriate.
- (proc_exists (pid_t)): New function. Determines if a process exists
- based on the pid.
- (proc_exists (_pinfo *p): Use new proc_exists function above.
- (proc_subproc): Copy pinfo stuff around rather than _pinfo pointers.
- Try to be careful about releasing shared memory when we don't need it
- anymore. Remove pinfo locks.
- (remove_zombies): Remove pinfo memory when zombie is going away.
- * sigproc.h: Reflect _pinfo/pinfo changes in sigproc.cc.
- * spawn.cc (spawn_guts): Eliminate pinfo *child argument. Reorganize
- to only initialize child pinfo after process has been started and we
- know the windows pid.
- (_spawnve): Reflect spawn_guts changes.
- * syscalls.cc (setpgid): Use pinfo constructor to access process info.
- (getpgid): Ditto.
- (internal_getlogin): Use _pinfo.
- * winsup.h: Eliminate pinfo_mutex. Eliminate spawn_guts declaration
- since it is static now. Reflect set_myself argument change.
- * include/sys/cygwin.h: Add some PID_* enums to accommodate new pinfo
- stuff.
-
-Sat Jul 29 12:13:27 2000 Christopher Faylor <cgf@cygnus.com>
-
- * include/cygwin/version.h: Update minor version for cygdrive changes
- below.
-
-Sat Jul 29 11:59:29 2000 Christopher Faylor <cgf@cygnus.com>
-
- * environ.cc (parse_thing): Make binmode a DWORD.
- * hinfo.cc (hinfo::init_std_file_from_handle): Use 'binmode' to
- determine default open mode.
- * winsup.h: Declare binmode.
-
-Sat Jul 29 00:16:35 2000 Christopher Faylor <cgf@cygnus.com>
-
- * include/cygwin/cygwin_dll.h: Update for modern compilers.
- * lib/cygwin_crt0.c: Inexplicably need to define alloca for newer
- compilers.
- * fhandler.h (fhandler_console): Add new method.
- * fhandler.cc (fhandler_console::set_cursor_maybe): New method.
- (fhandler_console::read): Set cursor if it has moved to make it
- visible.
-
-Thu Jul 27 22:54:28 2000 Jason Tishler <jt@dothill.com>
-
- * dcrt0.cc (dummy_autoload): Add load statement for RegDeleteValueA.
- * external.cc (get_cygdrive_prefixes): New function.
- (cygwin_internal): Add CW_GET_CYGDRIVE_PREFIXES case.
- * path.cc (mount_info::read_cygdrive_info_from_registry): Read system
- cygdrive prefix if user one is undefined.
- (mount_info::write_cygdrive_info_to_registry): Write cygdrive prefix to
- the appropriate registry hive. Overwrite in-memory copy of cygdrive,
- if appropriate.
- (mount_info::remove_cygdrive_info_from_registry): New method.
- (mount_info::get_cygdrive_prefixes): New method.
- (cygwin_umount): Remove cygdrive prefix, if appropriate.
- * registry.cc (reg_key::killvalue): New method.
- * shared.h (class reg_key): Add killvalue,
- remove_cygdrive_info_to_registry, and get_cygdrive_prefixes
- declarations.
- * include/sys/cygwin.h (cygwin_getinfo_types): Add
- CW_GET_CYGDRIVE_PREFIXES.
-
-Thu Jul 27 23:33:32 2000 Christopher Faylor <cgf@cygnus.com>
-
- * include/cygwin/version.h: Bump DLL minor version number to 4.
-
-2000-07-27 DJ Delorie <dj@redhat.com>
-
- * testsuite/winsup.api/winsup.exp: ignore stdout by default
- * testsuite/winsup.api/crlf.c: non-verbose by default
-
- * winsup.h: prune out windows headers we don't normally need
- * assert.cc: add wingdi.h and winuser.h
- * fhandler_console.cc: ditto
- * fhandler_windows.cc: ditto
- * select.cc: ditto
- * spawn.cc: ditto
- * strace.cc: ditto
- * tty.cc: ditto
- * window.cc: ditto
- * hinfo.cc: add winsock.h
- * syscalls.cc: add winnls.h
- * uinfo.cc: ditto
-
-Thu Jul 27 10:24:36 2000 Egor Duda <deo@logos-m.ru>
-
- * fhandler.cc (fhandler_disk_file::fstat): Allow block calculation to
- succeed for files >= 2GB and <= 4GB.
-
-Wed Jul 26 16:05:04 2000 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (signal_exit): Renamed from "really_exit". Always sets
- EXIT_SIGNAL bit and reorganizes exit value for backwards cygwin
- handling.
- (handle_exceptions): Call signal_exit. Set "core dumped" bit.
- (sig_handle): Call signal_exit. Set "core dumped" bit appropriately.
-
-Wed Jul 26 20:44:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * environ.cc (posify): Revert previous patch.
- (_addenv): Remove check_null_empty_path from here.
- (putenv): Call check_nullempty_path.
- (setenv): Call check_nullempty_path for name as well here.
- Don't report an error if value is empty string.
- (environ_init): Revert usage of newp.
-
-Wed Jul 26 14:32:38 2000 Egor Duda <deo@logos-m.ru>
-
- * syscalls.cc (stat_worker): Make stat return correct st_blocks for
- files with size bigger than 2Gb and less than 4Gb
-
-Wed Jul 26 17:43:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (lookup_name): Search on local machine first if
- myself->domain is not empty.
-
-2000-07-26 DJ Delorie <dj@cygnus.com>
-
- * fhandler_console.cc (fhandler_console::read): Explicitly set cursor
- to make it visible while waiting in WaitForMultipleObjects.
-
-Wed Jul 26 10:59:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * passwd.cc: Change name of passwd_in_memory_p to passwd_state.
- Change type to enum. Change storage class to static. Adjust comments.
- (read_etc_passwd): Set passwd_state to different values when loaded
- from file in contrast to being emulated.
- (search_for): Return default passwd entry if passwd is emulated or
- it's a request for the current user. Otherwise return NULL.
-
-Tue Jul 25 21:50:42 2000 Christopher Faylor <cgf@cygnus.com>
-
- * syscalls.cc (statfs): Use path_conv method to convert input path.
-
-Tue Jul 25 21:40:51 2000 Christopher Faylor <cgf@cygnus.com>
-
- * syscalls.cc (_link): Avoid extraneous call to
- cygwin_conv_to_win32_path.
-
-Tue Jul 25 21:11:15 2000 Christopher Faylor <cgf@cygnus.com>
-
- * environ.cc (_addenv): New function. Subsumes functionality of
- putenv/setenv. Does not allocate space for putenv case.
- (putenv): Use _addenv to add a value to the environment.
- (setenv): Ditto.
- (environ_init): Don't malloc space for each entry in the environment
- table. Just use the space from GetEnvironmentStrings.
- (posify): Don't free the src argument since it is no longer malloced.
-
-Mon Jul 24 21:10:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (_link): Corrected previous patch.
-
-Mon Jul 24 13:26:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (class fhandler_dev_random): Add members for managing
- pseudo randomness.
- * fhandler_random.cc: Rearrange. Use pseudo random number generator
- as entropy source if system entropy isn't available and if device is
- used as /dev/urandom. Allow initializing device by calling write().
-
-Sun Jul 23 23:11:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h: Add comment.
-
-Sun Jul 23 20:00:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (class fhandler_dev_raw): Add private member `varblkop'
- to be set when variable blocksize mode is on.
- * fhandler_raw.cc: Eliminate `\n' from trace output.
- (clear): Set `varblkop' to 0.
- (dup): Copy varblkop as well.
- (writebuf): Care for variable blocksize.
- (open): Ditto.
- (raw_read): Ditto.
- (raw_write): Ditto.
- * fhandler_tape.cc (open): Ditto.
- (ioctl): Ditto. Some cleanups.
-
-Sat Jul 22 18:40:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- Patch suggested by Kazuhiro Fujieda <fujieda@jaist.ac.jp>.
- * winsup.h: Add new macros sys_wcstombs and sys_mbstowcs.
- * syscalls.cc (_link): Replace calls to mbstowcs by call to
- sys_mbstowcs.
- * uinfo.cc (internal_getlogin): Replace calls to wcstombs and
- mbstowcs by calls to sys_wcstombs and sys_mbstowcs. Replace
- usage of constants by meaningful defines. Use result of
- GetSystemDirectory for HOMEPATH and HOMEDRIVE as a last resort.
-
-Fri Jul 21 21:33:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * spawn.cc (span_guts): Retrieve security attributes before setting
- psid to NULL.
-
-Fri Jul 21 12:03:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (acl_worker): Use stat_suffixes in call to path_conv
- just as in `stat_worker'.
-
-Wed Jul 19 22:24:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * spawn.cc (spawn_guts): Don't restore impersonation in case
- of _P_OVERLAY. Clean up slightly. Accommodate comments.
-
-Wed Jul 19 22:11:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * shared.h (class pinfo): New members `root' and `rootlen'.
- * syscalls.cc (chroot): Set new root for process.
- * path.cc (getcwd_inner): Add parameter to force use of
- new root from chroot() call.
- (ischrootpath): New macro.
- (normalize_posix_path): Care for changed root dir.
- (normalize_win32_path): Ditto.
- (getcwd_inner): Ditto.
- (chdir): Eliminate trailing path component consisting
- entirely of dots.
- * fork.cc (fork): Copy pinfo members regarding chroot().
- * spawn.cc (_spawnve): Ditto.
- * dir.cc (opendir): Don't use computed win32 path if
- chroot() took place.
-
-Mon Jul 17 22:21:34 2000 Christopher Faylor <cgf@cygnus.com>
-
- * dll_init.cc (dll_list::alloc): Fix debugging output.
-
-Mon Jul 17 14:57:53 2000 Christopher Faylor <cgf@cygnus.com>
-
- Throughout, eliminate third argument to path_conv and use new PC_*
- constants for second argument.
- * dcrt0.cc (dll_crt0_1): Reorganize to allow more initialization prior
- to returning due to dynamic loading.
- * path.h: Generalize SYMLINK_* constants to PC_*.
- (path_conv): Create a new method. Fold third argument into second.
- * dll_init.cc (dll_list::alloc): Try harder to find space to allocate
- dll struct.
- (dll_dllcrt0): Don't check sanity if we've already called dll_crt0.
- * path.cc (path_conv::check): Don't check for a null or empty path
- unless specifically told with a flag setting.
- (check_null_empty_path): New function, adapted from macro.
- * syscalls.cc (_rename): Use already-determined file attributes rather
- than checking again.
- * lib/cygwin/cygwin_attach.dll.c (cygwin_attach_dll): Use a static
- per_process structure since this is apparently supposed to be zeroed.
- * lib/cygwin_crt0.c (cygwin_crt0): Zero per_process structure sent to
- older DLLs.
-
-Mon Jul 17 19:39:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- Patch suggested by Eric Fifer <EFifer@sanwaint.com>
- * poll.cc (poll): Fix erroneous negations.
-
-Mon Jul 17 17:56:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * environ.cc (setenv): Use __cygwin_environ instead of
- environ after reallocating environment space.
-
-Sun Jul 16 20:23:21 2000 Christopher Faylor <cgf@cygnus.com>
-
- * _cygwin_crt0_common.cc: Undef 'environ' or suffer compiler error.
-
-Sun Jul 16 16:03:00 2000 Christopher Faylor <cgf@cygnus.com>
-
- * environ.cc: Use new definition of "environ" throughout.
- (environ_init): Explicitly initialize __cygwin_environ.
- (cur_environ): New function. Detects when user has updated
- their environment.
- * exec.cc: Use 'environ' define throughout rather than __cygwin_environ.
- * spawn.cc: Ditto.
- * winsup.h: Declare cur_environ, main_environ, environ.
-
-Sun Jul 16 13:23:04 2000 Christopher Faylor <cgf@cygnus.com>
-
- * acconfig.h: Add support for NEWVFORK.
- * config.h.in: Ditto.
- * configure.in: Add --enable-vfork option.
- * configure: Regenerate.
- * dcrt0.cc (quoted): Detect and fix up quoted backslashes.
- * sigproc.cc (proc_subproc): Correctly name handle of newly added child
- process to avoid erroneous debugging messages about closing the wrong
- handle.
-
-Sun Jul 16 02:30:09 2000 Christopher Faylor <cgf@cygnus.com>
-
- * spawn.cc (spawn_guts): Use \ for quoting '"'.
- * dcrt0.cc (quoted): Understand \ quoting for '"'.
-
-Sun Jul 16 00:32:58 2000 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (build_argv): Strip quotes from argv[0] since it should
- never be globified.
-
-Sat Jul 15 00:32:41 2000 Christopher Faylor <cgf@cygnus.com>
-
- * dll_init.cc (dll_list::alloc): Round correctly. Use VirtualAlloc
- since shared file mapping is unnecessary.
- (dll_list::detach): Release memory via VirtualFree since there we no
- longer use shared file mapping.
-
-Fri Jul 14 22:40:22 2000 Christopher Faylor <cgf@cygnus.com>
-
- * hinfo.cc (hinfo::linearize_fd_array): Make max_used_fd an int so that
- we can detect when there are no fds to pass.
- * dcrt0.cc (host_dependent_constants::init): Revert Sat Mar 18 01:32:04
- 2000 change.
- (dll_crt0_1): Set "cygwin_finished_initializing" flag.
- (dll_crt0): Don't perform memcpy if uptr is already set to internal
- structure.
- (_dll_crt0): Remember location of programs envptr.
- * dll_init.h (per_module, dll, dll_list): Revamp.
- * dll_init.cc: Revamp. Use new classes.
- * fork.cc (fork): Use new revamped dll, dll_list, and per_module stuff.
- * environ.cc: Use __cygwin_environ throughout rather than the
- user_data->envptr.
- * exec.cc: Ditto.
- * spawn.cc: Ditto.
- * winsup.h: Declare update_envptrs, cygwin_finished_initializing.
- * lib/_cygwin_crt0_common.cc (_cygwin_crt0_common): Revert previous
- change.
- * lib/cygwin_attach_dll.cc (cygwin_attach_dll): Always pass in own
- per_process structure or we end up overwriting information from the
- main program.
-
-Wed Jul 12 00:46:00 2000 Christopher Faylor <cgf@cygnus.com>
-
- * debug.cc (thread_stub): Use impure_ptr in place of reent_data.
- * dll_init.cc (dll_dllcrt0): Replace erroneous use of local symbol with
- correct __cygwin_user_data->impure_ptr.
-
-Wed Jul 12 00:01:03 2000 Christopher Faylor <cgf@cygnus.com>
-
- * lib/_cygwin_crt0_common.cc (_cygwin_crt0_common): Don't reset
- environ if already set.
-
-Mon Jul 10 19:07:03 2000 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler_console.cc (fhandler_console::read): Unicode interface
- to ReadConsoleInput only exists on W2K, so use workaround from
- Kazuhiro Fujieda <fujieda@jaist.ac.jp>.
-
-Mon Jul 10 11:30:00 2000 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in (install): Install textmode.o as well as binmode.o.
- * fhandler_console.cc (fhandler_console::read): Use UNICODE when
- reading from the console and translate to ASCII from that.
-
-Sun Jul 9 21:52:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * spawn.cc (spawn_guts): Close handle `hToken' only if it's not
- copied from myself->token.
- * syscalls.cc (seteuid): Replace CopySid by memcpy which is foolproof
- here.
-
-Sun Jul 9 01:19:06 2000 Christopher Faylor <cgf@cygnus.com>
-
- * cygwin.din: Export _getmode and getmode to allow querying of binary
- state of an fd.
- * external.cc (cygwin_internal): Add handling of perfile_table setting.
- * fhandler.cc (perfile_table): New global.
- (fhandler_base::get_default_fmode): New method to return a file's
- default mode based on its name.
- (fhandler_base::open): Use get_default_mode method to determine a
- file's mode. Record file mode in file flags.
- * fhandler.h (fhandler_base): Declare get_default_fmode
- * syscalls.cc (getmode): New function.
- * sys/cygwin.h (__cygwin_perfile): New structure.
- (cygwin_getinfo_types): Move outside of WINVER conditional.
- (per_process): Move inside of WINVER conditional.
-
-Sat Jul 8 00:15:01 2000 Christopher Faylor <cgf@cygnus.com>
-
- * external.cc (cygwin_internal): Export __cygwin_user_data.
- * include/sys/cygwin.h: Allow definition of per_process even when not
- compiling with C++.
- (cygwin_getinfo_types): Add CW_USER_DATA.
- * lib/_cygwin_crt0_common.cc (_cygwin_crt0_common): Get
- __cygwin_user_data pointer from cygwin_internal. If it doesn't exist,
- return failure. Use either this pointer or passed in pointer
- throughout. Clear forkee.
- * lib/crt0.h: Accommodate argument changes to _cygwin_crt0_common.
- * lib/cygwin_attach_dll.c (cygwin_attach_dll): Reorganize to allow use
- of newer binaries with older DLLs. Detect older DLLs when
- _cygwin_crt0_common returns 0 and allocate space for a per_process
- structure on the stack.
- * lib/cygwin_crt0.c (cygwin_crt0): Ditto.
-
-Fri Jul 7 10:31:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * include/sys/cygwin.h: Hide internal data types in per_process
- when not __INSIDE_CYGWIN__.
-
-Wed Jul 5 18:56:58 2000 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (__cygwin_user_data): Initialize.
- (dll_crt0_1): Eliminate user_data initialization.
- (dll_crt0): Set up impure_ptr_ptr for older executables.
- (cygwin_dll_init): Eliminate user_data initializations.
- (__api_fatal): Don't check for user_data initialization.
- * dll_init.cc (struct dll): Store entire contents of per_process rather
- than just a pointer.
- (add): Ditto.
- (initOneDll): Don't check for user_data initialization.
- (DllList::recordDll): Store contents of per_process argument.
- (DllList::detachDll): Pass address of per_process field.
- (DllList::initAll): Ditto.
- (DllList::doGlobalDestructorsOfDlls): Ditto.
- (DllListIterator::operator *): Ditto.
- (dll_dllcrt0): Default to __cygwin_user_data if arg is NULL.
- * include/sys/cygwin.h: Reorganize per_process to eliminate obsolete
- fields and accommodate new way of initializing.
- * lib/_cygwin_crt0_common: Initialize _impure_ptr from
- __cygwin_user_data.impure_ptr.
-
-2000-07-04 Vadim Egorov <egorovv@mailandnews.com>
-
- * exceptions.cc (try_to_debug): Prevent recursive spawning of JIT
- debugger. Treat special event from debugger as command to continue.
-
-Mon Jul 4 19:29:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * poll.cc (poll): Zero out `open_fds' as well.
-
-Mon Jul 4 1:22:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/version.h: Bump API minor version to 24.
-
-2000-07-04 Kazuhiro Fujieda <fujieda@jaist.ac.jp>
-
- * security.cc (read_sd): Eliminate OemToChar.
-
-Mon Jul 4 18:57:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * poll.cc: New file. Implement `poll' system call.
- * include/poll.h: Ditto.
- * include/sys/poll.h: Ditto.
- * Makefile.in: Add poll.o as dependency.
- * cygwin.din: Add poll and _poll symbols.
-
-2000-07-04 Kazuhiro Fujieda <fujieda@jaist.ac.jp>
-
- * dcrt0.cc (dll_crt0_1): Eliminate SetFileApisToOEM and CharToOem.
- * (dummy_autoload): Add functions used in fhandler_console.
- * fhandler_console.cc (fhandler_console::read): Use ENCHANCED_KEY flag
- to distinguish extended keys. Translate an input character from the
- OEM code page to the ANSI code page.
- * (fhandler_console::write_normal): Translate output characters from
- the ANSI code page to the OEM code page.
- * syscalls.cc (_link): Use MultiByteToWideChar instead of OemToCharW.
-
-Mon Jul 3 16:09:16 2000 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (stack_info::walk): Use method to find offset.
- (handle_exceptions): Be more assertive in finding ebp for use under
- W2K. Create a dummy stack frame for cases where program is dying and a
- stack dump is being output.
- (sig_handle): Fill out a GetThreadContext for use with a user-generated
- "core dump".
-
-Mon Jul 3 10:53:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/socket.h: Remove SOCK_PACKET define since it's
- not supported by Windows sockets.
-
-Sun Jul 2 21:50:48 2000 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (user32_init): Add primitive guard against concurrent
- attempts to call this function. Also add temporary debugging code to
- display a message if the function is called multiple times.
- (api32_init): Ditto.
-
-Sun Jul 2 10:39:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * winsup.h: Define MAX_SID_LEN and new MAX_HOST_NAME.
- * fork.cc (fork): Use above defines instead of numerical constants.
- * shared.cc (sec_user): Ditto.
- * shared.h (class pinfo): Ditto.
- * syscall.cc (seteuid): Ditto.
- * spawn.cc (_spawnve): Ditto. Eliminate conditional.
- (spawn_guts): Set child->uid = USHRT_MAX when user context will be
- changed in child process.
- * uinfo.cc (uinfo_init): Check for myself->uid instead of myself->psid
- to avoid reloading of /etc/passwd on process startup if ntsec is off.
- Use above defines instead of numerical constants.
- * security.cc: Move define for MAX_SID_LEN to winsup.h.
-
-Sun Jul 2 1:57:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * uinfo.cc (uinfo_init): Eliminate calls to read_etc_group()
- and read_etc_passwd().
-
-2000-06-28 Kazuhiro Fujieda <fujieda@jaist.ac.jp>
-
- * assert.cc (__assert): Reduce dependency on newlib.
- * exec.cc: Eliminate unnecessary inclusion of ctype.h.
- * glob.c: Ditto.
- * hinfo.cc: Ditto.
- * init.cc: Ditto.
- * strace.cc: Ditto.
- * tty.cc: Ditto.
- * grp.cc (parse_grp): Eliminate atoi.
- * passwd.cc (grab_int): Ditto.
- * grp.cc (getgroups): Eliminate str{n,}casecmp.
- * path.cc (get_raw_device_number): Ditto.
- * path.cc (sort_by_native_name): Ditto.
- * spawn.cc (iscmd): Ditto.
- * uinfo.cc (internal_getlogin): Ditto.
-
-Sat Jul 1 11:43:32 2000 Christopher Faylor <cgf@cygnus.com>
-
- * binmode.c (cygwin_premain0): Fix erroneous clearing of bit.
- * textmode.c (cygwin_premain0): Ditto.
-
-Sat Jul 1 00:24:04 2000 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (_dll_crt0): Renamed from dll_crt0 ().
- * winsup.h: Accommodate above change.
- * cygwin.din: Ditto.
- * lib/cygwin_crt0.c: Ditto.
-
-Fri Jun 30 23:21:40 2000 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Use variables rather than configure constructs where
- appropriate.
- (LIBCOS): Find additional stub library stuff in their own subdirectory.
- * dcrt0.cc: Convert user_data pointer to static __cygwin_user_data
- area.
- (do_global_ctors): Check magic_bisquit for initialization.
- (dll_crt0_1): First group of premain functions prior to fd
- initialization. Run second group before calling main.
- (dll_crt0 ()): New function, called from new initialization code.
- (dll_crt0 (per_process *uptr)): Call new dll_crt0 () function on
- initialization.
- * debug.cc (thread_stub): Initialize bottom of stack with per-thread
- info.
- * environ.cc (parse_thing): Use binmode global to control
- CYGWIN=binmode behavior.
- * fhandler.cc (fhandler_base::open): Allow explicit setting of __fmode
- to O_BINARY or O_TEXT to override disk mount settings.
- * libcmain.cc: Move to lib subdirectory.
- * libccrt0.cc: Ditto.
- * dll_main.cc: Ditto.
- * dll_entry.cc: Ditto.
- * getopt.c: Ditto.
- * thread.cc (thread_init_wrapper): Call ExitThread explicitly rather
- than returning, as a preliminary step towards placing per thread info
- at the bottom of the stack.
- * winsup.h: Move per_process class to include/sys/cygwin.h. Declare
- new dll_crt0().
- * include/cygwin/version.h: Bump API minor version.
- * binmode.c: New file.
- * textmode.c: Ditto.
- * perthread.h: Ditto.
- * lib/_cygwin_crt0_common.cc: Ditto.
- * lib/crt0.h: Ditto.
- * lib/cygwin_attach_dll.c: Ditto.
- * lib/cygwin_crt0.c: Ditto.
- * lib/dll_entry.cc: Ditto.
- * lib/dll_main.cc: Ditto.
- * lib/getopt.c: Ditto.
- * lib/libcmain.c: Ditto.
- * lib/premain0.c: Ditto.
- * lib/premain1.c: Ditto.
- * lib/premain2.c: Ditto.
- * lib/premain3.c: Ditto.
-
-Wed Jun 28 19:36:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (seteuid): Initialize pi.token before calling
- internal_getlogin().
- * uinfo.cc (internal_getlogin): Use impersonation token instead
- of process token in case of active impersonation. Add some comments.
- (uinfo_init): Initializing myself->token and myself->impersonated
- before calling internal_getlogin(). Add some comments.
-
-Mon Jun 26 18:32:41 2000 Christopher Faylor <cgf@cygnus.com>
-
- * windows.cc (setitimer): Round up when < 1000 usecs.
-
-Mon Jun 26 17:34:54 2000 Christopher Faylor <cgf@cygnus.com>
-
- * hinfo.cc (hinfo::dup2): Eliminate compiler warning.
-
-Mon Jun 26 11:25:29 2000 Christopher Faylor <cgf@cygnus.com>
-
- * hinfo.cc (hinfo::dup2): Guard against out of bounds newfd.
-
-Sat Jun 24 23:43:06 2000 Christopher Faylor <cgf@cygnus.com>
-
- * grp.cc (read_etc_group): Open file in text mode.
- * pwd.cc (read_etc_passwd): Ditto.
- * shared.h: Bump PROC_MAGIC.
-
-Sat Jun 24 19:30:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * fork.cc (fork): Fix error in copying SID pointer.
- * spawn.cc (_spawnve): Ditto.
- * passwd.cc: Remove static from `passwd_in_memory_p'.
- (read_etc_passwd): Remove static.
- * uinfo.cc: Move global declaration of `read_etc_group' and
- `group_in_memory_p' into `uinfo_init'.
- (internal_getlogin): Try to get SID from current process first.
- (uinfo_init): Don't set uid and gid if `myself' has a valid SID.
- Only load /etc/passwd and /etc/group in that case.
-
-Sat Jun 24 12:29:59 2000 Christopher Faylor <cgf@cygnus.com>
-
- * shared.cc (shared_info::initialize): Improve error message clarity.
- * mkvers.sh: Eliminate debugging output.
-
-Thu Jun 22 17:50:59 2000 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Autogenerate cygwin.def when appropriate.
- * include/sys/cygwin.h: Correct prototype.
-
-Thu Jun 22 17:05:04 2000 Christopher Faylor <cgf@cygnus.com>
-
- * include/sys/cygwin.h: Don't define parts of this file that rely on
- Windows headers unless the Windows header was previously included.
-
-Thu Jun 22 20:45:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * registry.cc (load_registry_hive): Use HKEY_USERS when checking
- for existing user hive.
- Use MAX_PATH instead of numerical constant for array size.
- Use return code of RegLoadKeyA instead of GetLastError for error output.
-
-Thu Jun 22 14:27:04 2000 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Add new-libcygwin.a back to all_host target.
-
-Wed Jun 21 14:32:42 2000 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Add *.def to clean operation.
-
-Wed Jun 21 13:18:23 2000 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Add *.exe to clean operation.
-
-Wed Jun 21 01:02:38 2000 Christopher Faylor <cgf@cygnus.com>
-
- * mkvers.sh: Fix sed usage for older seds.
-
-Tue Jun 20 20:46:28 2000 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Don't touch winver_stamp if mkvers.sh was unsuccessful.
-
-Tue Jun 20 17:41:30 2000 Christopher Faylor <cgf@cygnus.com>
-
- * mkvers.sh: Fix problem with handling of CVS tags causing .rc syntax
- errors.
-
-Tue Jun 20 13:38:12 2000 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Change to build the DLL during a cross-compiler build.
-
-Mon Jun 19 20:46:33 2000 Christopher Faylor <cgf@cygnus.com>
-
- * select.cc (socket_cleanup): Shutdown I/O on dummy sockets prior to
- closing them.
-
-Mon Jun 19 19:35:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * dcrt0.cc: Add load statements for `GetSidIdentifierAuthority'
- and `RegLoadKeyA'.
- * registry.cc (get_registry_hive_path): New function.
- (load_registry_hive): Ditto.
- * security.cc (convert_sid_to_string_sid): New function.
- (get_ssid): Renamed to `convert_string_sid_to_sid'.
- (get_pw_sid): Call `convert_string_sid_to_sid' instead of `get_ssid'.
- (get_gr_sid): Ditto.
- (get_admin_sid): Ditto.
- (get_system_sid): Ditto.
- (get_creator_owner_sid): Ditto.
- (get_world_sid): Ditto.
- * shared.h: New prototypes for `get_registry_hive_path' and
- `load_registry_hive'.
- * spawn.cc (spawn_guts): Set child->psid to NULL to force calling
- `internal_getlogin' from child process in case of changing user context.
- Call `load_registry_hive' in case of changing user context.
- (_spawnve): Copy user infos only if user context remains the same.
- * uinfo.cc: Add load statement for `NetUserGetInfo'.
- Remove load statement for `NetGetDCName'.
- (internal_getlogin): Rewrite to speed up process startup
- and to correct user environment in case user context changes.
- (uinfo_init): Call internal_getlogin only if myself->psid is NULL,
- that is user context changes.
- * winsup.h: Add prototypes for `convert_sid_to_string_sid',
- `convert_string_sid_to_sid' and `get_pw_sid'.
-
-Sun Jun 18 13:42:50 2000 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler.h (set_name): Don't use 'unix' as name since this is defined
- by gcc now.
- * fhandler.cc (set_name): Ditto.
-
-2000-06-17 Kazuhiro Fujieda <fujieda@jaist.ac.jp>
-
- * winsup.h (isabspath): Don't report `C:foo' as an absolute path.
-
-Sat Jun 17 13:51:48 2000 Christopher Faylor <cgf@cygnus.com>
-
- * configure.in: Detect "cross-hosting" situation and set appropriate
- variables in Makefile to avoid building excess stuff.
- * configure: Regenerate.
- * Makefile.in: Accommodate above change.
-
-Sat Jun 17 19:52:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * pinfo.cc (pinfo_init): Revert previous patch.
-
-Sat Jun 17 13:29:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * pinfo.cc (pinfo_init): Add missing initializers.
- * uinfo.cc (internal_getlogin): Request domain infos only
- when ntsec is ON.
-
-Fri Jun 16 19:27:27 2000 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Just use library files from this tree when building
- cygrun.exe.
- * path.cc (chdir): Don't set cache to offending chdir. Change comment
- to reflect current reality.
-
-Fri Jun 16 20:55:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din: Define symbols for `cygwin_logon_user' and
- `cygwin_set_impersonation_token'.
- * dcrt0.cc (dll_crt0_1): Eliminate superfluous conditional
- statements.
- Add load statements for `ImpersonateLoggedOnUser', `LogonUserA'
- and `RevertToSelf'.
- * fork.cc (fork): Care for correct impersonation of parent
- and child process.
- * security.cc (cygwin_set_impersonation_token): New function.
- (cygwin_logon_user): Ditto.
- shared.h (class pinfo): New members `orig_uid', `orig_gid',
- `real_uid' nad `real_gid'.
- spawn.cc (spawn_guts): Care for impersonation when starting
- child process in a different user context.
- * syscalls.cc (setgid): Call `setegid' now. Set real_gid.
- (setuid): Call `seteuid' now. Set real_uid.
- (seteuid): Functionality moved from setuid to here. Care for
- correct impersonation.
- (setegid): Functionality moved from setgid to here.
- * uinfo.cc (uinfo_init): Initialization of additional pinfo
- members.
- (getuid): Return real uid.
- (getgid): Return real gid.
- (geteuid): Return effective uid.
- (getegid): Return effective gid.
- include/sys/cygwin.h: Add prototypes for `cygwin_logon_user' and
- `cygwin_set_impersonation_token'.
- include/cygwin/version.h: Bump API minor version to 22.
-
-Thu Jun 15 15:43:50 2000 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (normalize_posix_path): Convert path to POSIX if it seems to
- be a Windows path.
-
-2000-06-15 Kazuhiro Fujieda <fujieda@jaist.ac.jp>
-
- * path.cc (mount_info::add_item): Eliminate a trailing backslash
- included in a native path starting with '//[A-Za-z]/...'.
- * path.cc (mount_info::del_item): Accept a native path as its target.
-
-Wed Jun 14 23:47:19 2000 Christopher Faylor <cgf@cygnus.com>
-
- * environ.cc (conv_envvars): Detect and convert all environment
- variables used by libiberty's choose-temp.c
-
-Tue Jun 13 12:41:41 2000 Kazuhiro Fujieda <fujieda@jaist.ac.jp>
-
- * path.cc (mount_info::add_item): The previous patch can't handle
- the case of overwriting a mount entry.
-
-Tue Jun 13 00:17:04 2000 Christopher Faylor <cgf@cygnus.com>
-
- * thread.h: Shorten "current_directory" variables to "cwd_*"
- throughout.
- * path.cc: Ditto.
- (normalize_posix_path): Add some extra debugging info.
- (chdir): Ditto. Store chdir'ed posix and MS-DOS directory names in
- "cache" here rather than trying to derive them later.
-
-Sun Jun 11 15:57:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_random.cc (read): Call CryptAquireContext with
- CRYPT_VERIFYCONTEXT.
-
-Thu Jun 8 22:49:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (path_conv::check): Erase two lines checked in
- by mistake.
-
-Thu Jun 8 15:53:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_disk_file::open): Check for directory
- to set O_DIROPEN on directories anyway.
-
-2000-06-07 Kazuhiro Fujieda <fujieda@jaist.ac.jp>
-
- * path.cc (mount_info::init): Eliminate the mount_slash feature.
- (mount_slash): Eliminated.
- (mount_info::read_mounts): Eliminate looking up existing entries. The
- loop for deleting cygpath entries is done only when such entries exist.
- (mount_info::from_registry): Eliminate sorting.
- (mount_info::add_item): Call add_reg_mount if necessary. Check nmounts
- more precisely. Use strcasematch in looking up existing entries.
- (mount_info::del_item): Call del_reg_mount if necessary. Use
- strcasematch. Use memmove instead of memcpy.
- (mount_info::import_v1_registry): Everything is done in this method.
- (mount_info::to_registry): Eliminated.
- (mount_info::from_v1_registry): Eliminated.
- (cygwin_umount): Simply call del_item.
- * shared.h: Modify the declaration of add_item and del_item. Remove the
- declaration of from_v1_registry.
-
-Wed Jun 7 23:56:10 2000 Christopher Faylor <cgf@cygnus.com>
-
- * include/cygwin/version.h: Bump DLL minor version number to 3.
-
-2000-06-07 DJ Delorie <dj@cygnus.com>
-
- * cygwin.din: add cygwin_dll_init
- * dcrt0.cc (cygwin_dll_init): new
- (dll_crt0_1): short circuit if manually loaded
- * path.cc (mount_info::init): don't init if manually loaded
-
-Wed Jun 7 13:47:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * include/netinet/in_systm.h: New file.
- * include/cygwin/in_systm.h: Ditto.
-
-Thu Jun 1 01:55:45 2000 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc: Remove unneeded include.
- * dcrt0.cc: Wrap LoadDLLfunc stuff in dummy function.
- * init.cc: Ditto.
- * uinfo.cc: Ditto.
-
-2000-05-31 DJ Delorie <dj@cygnus.com>
-
- * include/cygwin/version.h: use decimal, NOT octal
-
-Wed May 31 16:40:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_disk_file::open): Check for executable
- even if ntsec is on if filesystem doesn't support ACLs.
-
-Wed May 31 15:57:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * dcrt0.cc: Use LoadDLLfuncEx for loading Crypto API functions
- with parameter `notimp' set to 1.
-
-Tue May 30 16:58:33 2000 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (mount_info::conv_to_win32_path): Previous patch was too
- aggressive in adding a trailing slash.
-
-Mon May 29 20:31:01 2000 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Remove libadvapi32.a.
- * autoload.h: Add additional field to autoload block for handling
- unimplemented functions.
- (LoadDLLfuncEx): New function which accepts additional parameter for
- controlling unimplemented function behavior.
- (LoadDLLfunc): Use LoadDLLfuncEx.
- * dcrt0.cc: Use new arguments for LoadDLLfunc. Add advapi32 routines.
- (noload): Rewrite in assembler. Handle new unimplemented function
- type.
- * exceptions.cc: Eliminate another vestige of StackWalk stuff.
- * net.cc: Use new arguments for LoadDLLfunc.
- * uinfo.cc: Ditto.
-
-Mon May 29 20:18:47 2000 Christopher Faylor <cgf@cygnus.com>
-
- * config.h.in: Remove obsolete define.
- * path.h (isdrive): New macro.
- * dcrt0.cc (globify): Use new macro to determine if a string refers to
- an MS-DOS drive.
- * environ.cc (winenv): Ditto.
- * spawn.cc (find_exec): Ditto.
- * path.cc (get_raw_device_number): Ditto.
- (mount_info::conv_to_posix_path): Ditto.
- (chdir): Ditto.
- (cygwin_posix_path_list_p): Ditto.
- (cygwin_split_path): Ditto.
- (path_conv::check): Move tmp_buf to beginning of function since it can
- be used earlier in the loop. Use tmp_buf rather than 'root' to hold
- root information.
- (mount_info::conv_to_win32_path): Add trailing slash to end of mount
- path when it translates to a drive. Add defensive code to avoid
- writing beyond the end of 'dst'.
-
-Sat May 27 15:57:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_random.cc (read): Use CRYPT_MACHINE_KEYSET in
- call to CryptAcquireContext() to serve users that did not
- log in interactively.
-
-Fri May 26 11:16:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * errno.cc (errmap): Map ERROR_BAD_NET_NAME to errno ENOSHARE.
-
-Fri May 26 02:23:35 2000 Christopher Faylor <cgf@cygnus.com>
-
- * sigproc.h (sigframe::set): Accept a default frame pointer.
- * sigproc.cc (sig_send): Use passed in frame pointer, if appropriate.
-
-Thu May 25 17:44:25 2000 Christopher Faylor <cgf@cygnus.com>
-
- * dir.cc (rmdir): Use file attributes that have already been discovered
- by path_conv.
-
-2000-05-25 Kazuhiro Fujieda <fujieda@jaist.ac.jp>
-
- * dir.cc (rmdir): Correct the manner in checking the target directory.
-
-Wed May 24 21:59:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * dir.cc (writable_directory): Comment out previous code,
- return always 1 for now.
- (mkdir): Call set_file_attribute explicitely with S_IFDIR mode bit.
- * syscalls.cc (chown_worker): Ditto.
- (chmod): Ditto.
- * security.cc (get_nt_attribute): Fix error in debug output.
- Never set FILE_DELETE_CHILD for files.
- Construct appropriate inherit attribute according to file type.
-
-2000-05-23 DJ Delorie <dj@cygnus.com>
-
- * syscalls.cc (_cygwin_istext_for_stdio): New, for newlib
- * include/cygwin/version.h: Bump API number for detect old
- programs using old getc/putc macros
-
-2000-05-23 DJ Delorie <dj@cygnus.com>
-
- * dir.cc (writable_directory): handle root directories
-
-Tue May 23 10:09:26 2000 Christopher Faylor <cgf@cygnus.com>
-
- * uname.cc (uname): Use a "s" to denote a snapshot to avoid confusion
- with the number "5".
-
-Tue May 23 10:01:07 2000 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (mount_info::conv_to_posix_path): Avoid putting a trailing
- slash on a directory name when the ms-dos path spec is a root directory
- of a device.
- * registry.cc (reg_key::build_reg): Set 'key_is_invalid' flag rather
- than using an INVALID_HANDLE_KEY.
- (reg_key::get_int): Test for key validity before performing registry
- operations.
- (reg_key::set_int): Ditto.
- (reg_key::get_string): Ditto.
- (reg_key::set_string): Ditto.
- (reg_key::kill): Ditto.
- (reg_key::~reg_key): Ditto.
-
-Tue May 23 01:13:33 2000 Christopher Faylor <cgf@cygnus.com>
-
- * mkvers.sh: Use snapshot date as build date since it is more
- interesting.
- * uname.cc (uname): Detect if this is a snapshot build and add an "S"
- to the version number. Report the snapshot date as the release date.
-
-Mon May 22 17:11:25 2000 Christopher Faylor <cgf@cygnus.com>
-
- * environ.cc (regopt): Scan HKLM if HKCU scan fails.
-
-Mon May 16 23:39:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * dir.cc (rmdir): Care for misleading error messages
- when trying to remove a directory on a samba share.
- Eliminate superfluous else branch.
- * syscalls.cc (_rename): Additional check for ERROR_FILE_EXISTS
- if MoveFile fails.
-
-Sun May 21 20:51:44 2000 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (dll_crt0_1): Move uinfo_init call to before sigproc_init to
- avoid a race.
- (noload): Add an extra argument for debugging.
- * uinfo.cc (uinfo_init): Eliminate test for multiple calls.
- (getlogin): Assume that uinfo_init has already been called.
-
-Sat May 20 01:34:57 2000 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (interruptible): Add an argument to control whether
- function just checks for validity. Flag module handle == 0 as
- noninterrupible.
- (call_handler): Always acquire and release ebp lock. Loop for only a
- fixed amount of time attempting to grab mutos and find an interruptible
- PC.
-
-2000-05-19 DJ Delorie <dj@cygnus.com>
-
- * syscalls.cc (setmode): change mode of any matching FILE* also.
-
-Thu May 18 17:28:19 2000 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Remove external.h dependency.
- * dcrt0.cc (sigthread::init): Move here from sigproc.h.
- * sigproc.h (sigthread): Move init to dcrt0.cc.
-
-Thu May 18 01:28:02 2000 Christopher Faylor <cgf@cygnus.com>
-
- * select.cc (thread_pipe): Add paranoid check to ensure thread
- termination.
- * external.cc: Eliminate obsolete include.
- * getopt.c (getopt_long): Fix compiler warning.
- * shared.h: Moved PID_ definitions to include/sys/cygwin so that they
- can be used by external programs.
- * include/sys/cygwin.h: Move external definitions here. Include
- sys/resource.h to avoid having to do this everywhere.
-
-Thu May 18 01:04:02 2000 Christopher Faylor <cgf@cygnus.com>
-
- * sigproc.h (sigframe): Don't set frame info unless tid matches this
- thread id.
-
-Wed May 17 23:13:32 2000 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (dll_crt0_1): Initialize mainthread stuff here before
- anything needs it.
- * sigproc.cc (sigproc_init): Move mainthread initialization out of
- here.
- * sigproc.h (sigthread): Add init() method.
- (sigframe): Don't try to initialize muto.
- * sync.cc: Undef WaitForSingleObject to avoid recursion.
-
-2000-05-17 DJ Delorie <dj@cygnus.com>
-
- * testsuite/winsup.api/crlf.c: New
- * testsuite/winsup.api/iospeed.c: New
-
-Wed May 17 01:05:52 2000 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (mount_info::cygdrive_posix_path): Don't add trailing slash
- if referring to something like c:\.
- * dcrt0.cc (dll_crt0_1): Move uinfo initialization prior to sig_send
- initialization to give signal thread a chance to finish.
- * debug.cc (WFSO): Move to sigproc.cc
- (WFMO): Ditto.
- * exceptions.cc (interruptible): Allocate slightly more space for
- directory just for paranoia's sake.
- (call_handler): Eliminate nonmain argument. Determine if main thread
- has set a frame pointer and use it if so.
- (sig_handle): Eliminate nonmain argument.
- * net.cc: Record frame information in appropriate routines throughout.
- * select.cc (select): Ditto.
- * sigproc.cc: Use sigthread structure to record mainthread id
- throughout.
- (sig_send): Record frame information for signal handler.
- (wait_sig): Reflect argument change in sig_handle.
- (WFSO): Move here and record frame information for signal handler.
- (WFMO): Ditto.
- * sigproc.h: Implement new "sigthread" class. Implement "sigframe"
- class for manipulating signal frame info.
- * thread.cc (__pthread_kill): Use standard _kill() function rather than
- calling sig_send directly.
- * winsup.h: Eliminate ebp element from signal_dispatch class.
-
-Tue May 16 23:39:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- Patch suggested by John Rowley <wjr@bgs.ac.uk>
- * fhandler_tape.cc (fhandler_dev_tape::ioctl): Check
- for filemark feature on MTWEOF operation.
-
-Tue May 16 11:49:13 2000 Christopher Faylor <cgf@cygnus.com>
-
- * include/cygwin/in.h (AF_INET6): Use correct in6_addr struct.
-
-Mon May 15 00:35:35 2000 Christopher Faylor <cgf@cygnus.com>
-
- * include/cygwin/version.h: Bump DLL minor version number to 2.
-
-Sun May 14 23:41:24 2000 Christopher Faylor <cgf@cygnus.com>
-
- * shared.h: Bump PROC_MAGIC.
- * include/cygwin/version.h: Bump API minor to accommodate two recent
- exports.
-
-2000-05-13 Mumit Khan <khan@xraylith.wisc.edu>
-
- * include/cygwin/socket.h (AF_INET6): Use same value as winsock2.
-
-2000-05-12 Mumit Khan <khan@xraylith.wisc.edu>
-
- * include/cygwin/in.h (struct in6_addr): Fix spelling.
- * include/cygwin/socket.h (AF_INET6, PF_INET6): Define macros.
- (AF_MAX, PF_MAX): Bump to 32 to leave room for future expansion.
-
-Fri May 12 21:35:54 2000 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (build_argv): Remove unneeded variable.
- * select.cc (peek_pipe): Don't check for "ready" if it's already set.
- (peek_console): Ditto.
- (peek_serial): Ditto.
- (peek_socket): Ditto.
- (peek_windows): Ditto.
-
-Fri May 12 20:31:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_raw.cc (write_file, read_file): New wrapper functions
- for WriteFile and ReadFile to get rid of ERROR_MEDIA_CHANGED
- and ERROR_BUS_RESET in case of first access to tape.
- (fhandler_dev_raw::raw_write): Use write_file instead of WriteFile.
- (fhandler_dev_raw::raw_read): Use read_file instead of ReadFile.
-
-Fri May 12 01:04:57 2000 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in (DLL_OFILES): Sort.
- * fhandler_tty.cc (fhandler_tty_slave::send_ioctl_request): Eliminate.
- (fhandler_tty_slave::ioctl): Rewrite to avoid races.
-
-2000-05-11 Mumit Khan <khan@xraylith.wisc.edu>
-
- * mmap.cc (list::erase): Increment loop counter.
- (map::erase): Likewise.
-
-Thu May 11 00:54:00 2000 Charles Wilson <cwilson@ece.gatech.edu>
-
- * cygwin.din: insure that regsub() is included in
- cygwin1.dll
-
-Tue May 9 18:59:41 2000 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Use appropriate VARIABLE to refer to cygwin.def in load
- line.
-
-Thu May 9 23:53:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::puts_readahead): Change
- while condition to disallow wild runs.
-
-Thu May 9 15:24:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- Patch suggested by <lha@stacken.kth.se>
- * window.cc (setitimer): Check for overflow condition
- in tv_sec.
-
-Thu May 9 0:47:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- Patch suggested by Eric Fifer <EFifer@sanwaint.com>
- * errno.cc: Change mapping of ERROR_BAD_PATHNAME to ENOENT.
-
-Thu May 9 0:47:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (symlink::info): Treat non readable files
- as normal non symlink files.
-
-2000-05-08 Paul K. Fisher <pfisher@plexware.com>
-
- * include/pthread.h (pthread_detach): Add missing prototype.
- (pthread_join): same.
-
-2000-05-08 DJ Delorie <dj@cygnus.com>
-
- * fhandler.cc (lock): use signed math to allow checking ranges
- properly.
-
-Sat May 6 23:22:25 2000 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (insert_file): Eliminate unused parameter.
- (build_argv): Ditto.
- * exceptions.cc (stack): Eliminate unused parameters.
- (stackdump): Ditto.
- (cygwin_stackdump): Reflect above changes.
- (sig_handle): Ditto.
- * fhandler.cc (fhandler_base::set_inheritance): Use kludge to avoid
- unused parameter warning.
-
-2000-05-06 Mumit Khan <khan@xraylith.wisc.edu>
-
- * include/wchar.h (wcscmp, wcslen): Fix prototypes.
- * syscalls.cc (wcslen, wcscmp): Adjust.
-
-Fri May 5 23:32:07 2000 Christopher Faylor <cgf@cygnus.com>
-
- * errno.cc (errmap): Correct DIRECTORY mapping to ENOTDIR.
-
-2000-05-04 Mumit Khan <khan@xraylith.wisc.edu>
-
- * Makefile.in (install): Install profile startup and library.
-
-Wed May 3 21:54:11 2000 Christopher Faylor <cgf@cygnus.com>
-
- * configure.in: Use -gstabs+ as compile debug option. This seems to
- promote better handling of symbols.
- * configure: Regenerate.
- * delqueue.cc (delqueue_list::process_queue): Allow ERROR_ACCESS_DENIED
- to indicate that a file is being shared under Windows 95.
- * syscalls.cc (_unlink): Use full path name. Take special action for
- Windows 95. Assume that an ERROR_ACCESS_DENIED indicates a sharing
- violation unless it's on a remote drive. Punt if there is an
- ERROR_ACCESS_DENIED on a remote drive.
-
-Wed May 3 18:07:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * errno.cc (errmap): Map ERROR_BAD_NETPATH to new errno ENOSHARE.
- (_sys_errlist): Add entry for ENOSHARE.
- (strerror): Add case for ENOSHARE.
- * syscalls.cc (stat_worker): Check for errno ENOSHARE.
-
-Wed May 3 17:28:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in: Add dependencies for fhandler_random.o
- * fhandler.h: Add device type FH_RANDOM. Add class
- fhandler_dev_random.
- * fhandler_random.cc: New file. Implementation of
- fhandler_dev_random.
- * hinfo.cc (build_fhandler): Add case for FH_RANDOM.
- * path.cc: Add device names for random devices to
- windows_device_names.
- (get_device_number): Add if branch for random devices.
- (win32_device_name): Add device name generation for
- random devices.
- winsup.h: Include <wincrypt.h>.
-
-2000-05-02 Kazuhiro Fujieda <fujieda@jaist.ac.jp>
-
- * path.cc (mount_info::conv_to_win32_path): Previous patch
- failed to set flags on a win32 path.
-
-Tue May 2 11:34:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (read_sd): Return 1 on success because we
- can't rely on the returned SD size from GetFileSecurity.
-
-Tue May 2 2:22:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * dcrt0.cc: Add dynamic load code for `OemToCharA' from user32.dll.
- * security.cc (read_sd): Call `OemToCharA' to make
- `GetFileSecurity' happy on filenames with umlauts.
-
-Wed Apr 26 23:23:23 2000 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (normalize_win32_path): Don't add a trailing slash when one
- already exists.
- (mount_info::conv_to_win32_path): Use existing code for dealing with
- relative path names when input is already a win32 path.
-
-2000-04-26 DJ Delorie <dj@cygnus.com>
-
- * Makefile.in (install): install regexp.h
-
-Wed Apr 26 16:20:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (stat_worker): Previous patch could succeed
- in stating a non-existant file.
-
-Wed Apr 26 01:07:16 2000 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (interruptible): Allocate slightly more space for
- directory name check. Windows 95 seems to null-terminate the directory
- otherwise.
- (interrupt_on_return): Issue a fatal error if we can't find the
- caller's stack.
-
-Tue Apr 25 16:50:54 2000 Christopher Faylor <cgf@cygnus.com>
-
- * spawn.cc (find_exec): Accept a path_conv argument rather than a
- buffer so that the caller can find things out about a translated path.
- (perhaps_suffix): Ditto.
- (spawn_guts): Allocate path_conv stuff here so that we can find out
- stuff about the translated path (this is work in progress).
- * environ.cc (environ_init): Accept an as-yet unused argument
- indicating whether we were invoked from a cygwin parent or not.
- (winenv): Ditto.
- (posify): Accept an argument indicating whether the path has already
- been translated.
- * dlfcn.cc (check_access): Provide a path_conv buffer to find_exec.
- * exec.cc (sexecvpe): Ditto.
- * path.cc (path_conv::check): Rename from path_conv::path_conv.
- (mount_item::getmntent): Recognize "Cygwin executable" bit.
- (symlink_info::check): Remove debugging statements.
- * path.h (class path_conv): Add iscygexec method. Rewrite constructor
- to call "check" method to allow multiple operations on a path_conv
- variable.
- * pinfo.cc (pinfo_init): Pass argument to environ_init.
- * shared.h: Bump PROC_MAGIC.
- * winsup.h: Reflect above changes to function arguments.
- * include/sys/mount.h: Add MOUNT_CYGWIN_EXEC type.
-
-Thu Apr 25 21:35:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (stat_worker): Previous patch failed to stat
- each drives root dir on 9X.
-
-Thu Apr 25 16:37:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_disk_file::open): Check for allow_ntsec
- when determining exec flag.
- * path.cc (symlink_info::check): Remove call to get_file_attribute().
- * security.cc (read_sd): Rename, ditto for variables to conform
- to common naming convention. Use GetFileSecurity() instead of
- BackupRead() to avoid permission problems when reading ACLs.
- (write_sd): Same renaming as for read_sd().
- (alloc_sd): Change default permissions according to Linux permissions
- for group and world when write permission is set.
- * syscalls.cc (stat_worker): Avoid different permission problems
- when requesting file informations.
-
-Thu Apr 25 10:50:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc: Avoid a warning in declaration inet_network.
-
-Mon Apr 24 17:38:25 2000 Thorsten Otto <t.otto@germanynet.de>
-
- * fhandler_console.cc (fhandler_console::read): Detect extended keycode
- information for Windows 9x so that function keys will work correctly.
-
-2000-04-24 Vadim Egorov <egorovv@mailandnews.com>
-
- * net.cc (cygwin_inet_network): new function.
- * cygwin.din (inet_network): new export
-
-Fri Apr 21 10:37:08 2000 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (normalize_posix_path): Previous two patches were still
- incorrect so rewrite this function to deal with trailing dots.
- (mount_info::conv_to_win32_path): Just check for '/' where appropriate.
- Eliminate nofinalslash call since it is handled in normalize_posix_path
- now.
-
-Thu Apr 20 17:32:42 2000 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (handle_exceptions): Search further for stack info to
- accommodate Windows 95.
-
-Thu Apr 20 16:39:18 2000 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (normalize_posix_path): Previous change failed to take root
- access into account.
-
-Thu Apr 20 11:26:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (_link): Check new link path for trailing dot.
-
-Thu Apr 20 00:32:03 2000 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler.h (fhandler_base::hclose): New virtual method.
- (fhandler_base::set_inheritance): Make this a method so that we can use
- the appropriate close methods.
- * fhandler.cc (fhandler_base::set_inheritance): Ditto.
- * path.cc (normalize_posix_path): Eliminate /. trailing path
- component.
-
-Wed Apr 20 0:19:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (setuid): Allow switching user context after
- successful call to ImpersonateLogedOnUser (NT only).
- (setgid): Ditto.
- (seteuid): Call setuid.
- (setegid): Call setgid.
-
-Wed Apr 19 22:00:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * uinfo.cc (internal_getlogin): Use NetGetDCName() instead
- of NetGetAnyDCName().
-
-Mon Apr 17 12:08:47 2000 Kazuhiro Fujieda <fujieda@jaist.ac.jp>
-
- * syscalls.cc (_rename): Try MoveFile() at first before
- MoveFileEx(..., MOVEFILE_REPLACE_EXISTING).
-
-Tue Apr 18 19:15:29 2000 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (globify): Don't use \ quoting when apparently quoting a DOS
- path spec, even within a quoted string.
-
-Sun Apr 16 18:54:21 2000 Christopher Faylor <cgf@cygnus.com>
-
- * init.cc (dll_entry): Use better check for determining when to set
- thread specific stuff.
- * syscalls.cc (_unlink): Continue with chmod'ing file even if
- DELETE_ON_CLOSE succeeds, if file still exists.
-
-Fri Apr 14 23:51:15 2000 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler_console.cc (keytable): Add support for keypad 5 key, which
- MS seems to think is equivalent to VK_CLEAR.
- * debug.cc (thread_stub): Eliminate initialization of reent stuff.
- * init.cc (dll_entry): Move it here.
-
-Thu Apr 13 18:32:26 2000 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (insert_file): Avoid freeing previously allocated argument
- list.
- * path.cc (symlink_info::check): Rename from symlink_check_one. Use
- new symlink_info struct for communication.
- (path_conv::path_conv): Use symlink_info structure for communication
- with symlink_info::check. Fix typo which resulted in symbolic links
- always being resolved.
- (readlink): Use stat_suffixes array when resolving a link.
- * syscalls.cc (stat_suffixes): Make global.
-
-Thu Apr 13 20:50:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/version.h: Bump minor api to reflect export change.
-
-Thu Apr 13 8:48:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (conv_to_win32_path): Detect a win32 path
- if path contains backslashes.
- * cygwin.din: Add symbol for `lacl'.
- * security.cc (ReadSD): Add debug output.
- (acl_worker): New static function.
- (acl): Call acl_worker now.
- (lacl): New function.
- (facl): Call acl_worker now.
- * include/cygwin/acl.h: Add prototype for `lacl'.
-
-Wed Apr 12 18:48:33 2000 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (path_conv::path_conv): Ensure that suffix is correctly
- copied to path when we've found a symlink but aren't following
- symlinks.
-
-Sat Apr 8 00:46:14 2000 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler.cc (fhandler_disk_file::fstat): Allocate enough space for
- root dir determination or overflow an array.
-
-Sat Apr 8 00:08:53 2000 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (sigsave): Copy on fork so that we can restore correct
- behavior in forked process.
- (interruptible): Flag as interruptible when running in main process
- module.
- (interrupt_setup): Save return address and address of return address.
- (signal_fixup_after_fork): New function. Uses above two values to
- restore proper behavior to forked process.
- (interrupt_on_return): Pass return address address to interupt_setup.
- (interrupt_now): Pass NULL for return address address to
- interrupt_setup.
- * fork.cc (fork): Call signal_fixup_after_fork.
- * shared.h: Lint cleanups.
- * winsup.h: Ditto.
-
-Mon Apr 3 14:10:44 2000 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler.h (select_stuff): Eliminate use of 'total'.
- * select.cc (cygwin_select): Ditto.
- (select_stuff::wait): Use maximum size for w4 rather than calculating
- what will fit.
-
-Mon Apr 03 13:58:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * grp.cc (parse_grp): Save empty array instead of
- NULL in gr_mem if no supplementary group is given.
-
-Sun Apr 02 16:02:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (chown_worker): Use previous uid/gid if
- new uid/gid is -1.
-
-Fry Mar 31 22:55:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (chown_worker): New static function with
- chown functionality.
- (chown): Call chown_worker with SYMLINK_FOLLOW.
- (fchown): New function. Call chown_worker with SYMLINK_FOLLOW.
- (lchown): New function. Call chown_worker with SYMLINK_IGNORE.
- * cygwin.din: Add symbols for fchown, lchown.
-
-Fry Mar 31 11:18:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (symlink): Call `set_file_attribute()' and
- `SetFileAttributeA()' instead of `chmod()' to set
- uid/gid correct.
-
-Wed Mar 29 22:49:56 2000 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler.h (select_record): Explicitly zero elements of this class.
- (select_stuff): Ditto.
- * select.cc (cygwin_select): Eliminate memset zero of sel.
-
-Tue Mar 28 16:45:42 2000 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Use default rules when compiling cygrun.o.
- * dcrt0.cc (host_dependent_constants::init): Limit non-NT platforms to
- 32K chunks when copying regions during a fork.
- * path.cc (symlink_check_one): Add temporary debugging output.
- Simplify PATH_EXEC test.
- * syscalls.cc (stat_suffixes): Null terminate this list.
-
-Sat Mar 25 20:46:39 2000 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (symlink_check_one): Recognize symlink settings from the
- mount table.
- * path.h: Make PATH_SYMLINK an alias for MOUNT_SYMLINK.
- * syscalls.cc (stat_worker): Use extension search mechanism in
- path_conv to look for .exe rather than trying to special case it here.
- * mount.h: Make MOUNT_SYMLINK a real option.
-
-Sat Mar 25 00:22:32 2000 Christopher Faylor <cgf@cygnus.com>
-
- * environ.cc: Add TMPDIR to the list of environment variables which are
- converted to POSIX format.
- * sigproc.cc (proc_terminate): Don't attempt to delete when a muto
- pointer is NULL.
-
-Sun Mar 19 12:01:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (stat_worker): Set st_nlink to 1 on remote drives.
-
-Sat Mar 18 23:04:27 2000 Christopher Faylor <cgf@cygnus.com>
-
- * times.cc: Fix extern declarations for variables that are exported but
- used by this modules.
-
-Sat Mar 18 01:32:04 2000 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (host_dependent_constants::init): Eliminate DELETE flag
- from shared constant.
-
-Sat Mar 18 01:24:25 2000 Christopher Faylor <cgf@cygnus.com>
-
- * delqueue.cc (delqueue_list::queue_file): Add some debugging.
- * path.h (class path_conv): Add a char * operator for the most common
- case.
- * syscalls.cc (_unlink): Rewrite to use FILE_FLAG_DELETE_ON_CLOSE when
- possible (i.e., on NT).
-
-Fri Mar 17 18:16:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- Patch suggested by Eric Fifer <EFifer@sanwaint.com>
- * fhandler.cc (fhandler_base::open): Call set_file_attribute()
- only if a file is really created.
-
-Thu Mar 16 14:15:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (set_process_privileges): Remove `static'.
- (get_nt_attribute): Returns uid and gid additionally. Remove call
- to set_process_privileges().
- (get_file_attribute): Returns uid and gid additionally. Don't
- call ntea if ntsec is ON.
- (set_nt_attribute): Remove call to set_process_privileges().
- Don't call ntea if ntsec is ON.
- (acl): Remove call to set_process_privileges().
- * dcrt0.cc (dll_crt0_1): Call set_process_privileges().
- * winsup.h: New prototype for set_process_privileges(),
- changed prototype for get_file_attribute().
- * fhandler.cc (get_file_owner): Discard function.
- (get_file_group): Ditto.
- (fhandler_disk_file::fstat): Discard calls to get_file_owner() and
- get_file_group().
- * path.cc (path_conv::path_conv): New debugging output for result
- of GetVolumeInformation().
- (mount_info::conv_to_win32_path): Call backslashify() with pathbuf
- instead of src_path.
- * syscalls.cc (chown): Reformat slightly.
- (chmod): Replace get_file_owner() and get_file_group() calls
- by a call to get_file_attribute(). Discard local variable has_acls.
- Reformat slightly.
- (stat_worker): Root dir check now done by a call to rootdir().
- Don't call num_entries() on remote drives.
- Discard local variable has_acls.
-
-Wed Mar 15 20:38:06 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * errno.cc: Map ERROR_NOACCESS to EFAULT.
-
-Wed Mar 15 14:25:38 2000 Christopher Faylor <cgf@cygnus.com>
-
- * spawn.cc (spawn_guts): Restore dependency on signal_arrived. It's
- needed to wake up the WaitForSingleObject.
-
-Tue Mar 14 23:41:16 2000 Christopher Faylor <cgf@cygnus.com>
-
- Pipe changes throughout suggested by Eric Fifer <EFifer@sanwaint.com>
- * debug.cc (threadname_init): Pass name of lock as arg 2 of new_muto.
- * malloc.cc (malloc_init): Ditto.
- * sigproc.cc (sigproc_init): Ditto.
- * exceptions.cc (events_init): Ditto.
- (call_handler): Eliminate special case for hExeced. Report locked
- thread in debugging output.
- * fhandler.cc (fhandker_pipe::fhandler_pipe): Propagate device type to
- base class.
- * fhandler.h (fhandler_pipe): Ditto.
- * hinfo.cc (hinfo::build_fhandler): Pass specific type of pipe to
- constructor.
- * spawn.cc (spawn_guts): Eliminate dependency on signal when waiting
- for subprocess.
- * strace.cc: Remove obsolete #ifdef.
- * sync.cc (muto::muto): Save the name of the muto.
- (muto:~muto): Also release the muto.
- * sync.h: Add a muto name field.
- * select.cc (peek_pipe): Avoid doing a PeekNamedPipe on the write end
- of a pipe.
-
-Sun Mar 12 01:14:33 2000 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler.cc (fhandler_base::get_readahead_into_buffer): New function.
- * fhandler.h: Declare new function. Add extra argument to
- process_slave_output.
- * fhandler_console.cc (fhandler_console::read): Move read ahead code to
- new function.
- * fhandler_tty.cc (fhandler_pty_master::process_slave_output): Move
- common code here.
- (fhandler_tty_slave::read): Understand readahead.
- (fhandler_pty_master::read): Move code to process_slave_output.
- * select.cc (peek_pipe): Avoid performing certain checks when non-read
- and on inappropriate fh types.
-
-Sat Mar 11 22:47:43 2000 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler_console.cc (fhandler_console::read): Don't even think about
- breaking on interrupt if executing in a "cygwin" thread.
- * fhandler_tty.cc (fhandler_pty_master::process_slave_output):
- Streamline, simplify code.
- * sigproc.cc (sig_send): Remove debugging statement.
-
-Fri Mar 10 13:20:50 2000 Christopher Faylor <cgf@cygnus.com>
-
- * sigproc.cc: Set wait_sig priority to normal.
-
-Fri Mar 10 13:03:06 2000 Christopher Faylor <cgf@cygnus.com>
-
- * sigproc.cc (wait_sig): Add addtional debugging output.
-
-Thu Mar 9 15:25:01 2000 Christopher Faylor <cgf@cygnus.com>
-
- * environ.cc: Eliminate oldstack CYGWIN option.
- * exceptions.cc (sfta): Eliminate obsolete function.
- (sgmb): Eliminate obsolete function.
- (class stack_info): Remove MS method for walking the stack.
- (stack_info::init): Just initialize required fields.
- (stack_info::brute_force): Rename to stack_info::walk.
- (handle_exceptions): Pass derived frame pointer to sig_send.
- (interrupt_setup): Clear saved frame pointer here.
- (interrupt_on_return): thestack is no longer a pointer.
- (call_handler): Accept a flag to indicate when a signal was sent from
- other than the main thread. Use saved frame pointer for determining
- where to place signal handler call.
- (sig_handle): Accept "nonmain" argument. Pass it to call_handler.
- * fhandler_tty.cc (fhandler_tty_common::__acquire_output_mutex): Change
- debugging output slightly.
- * (fhandler_tty_common::__release_output_mutex): Ditto.
- (fhandler_tty_slave::read): Fix a comment, remove a goto.
- * sigproc.cc (sig_send): Accept an optional frame pointer argument for
- use when suspending the main process. sigcomplete_main is an autoreset
- event now. Save frame pointer for non-main operation.
- (wait_sig): Make sigcomplete_main an autoreset event. Eliminate
- NOSIGQUEUE. Pass rc to sig_handle to signify if this was a nonmain
- process.
- * sigproc.h: Reflect change to sig_send argument.
- * syscalls.cc (swab): Eliminate swab function since it is now available
- in newlib.
- * winsup.h (signal_dispatch): Change CONTEXT cx to DWORD ebp.
-
-Tue Mar 7 13:31:10 2000 Christopher Faylor <cgf@cygnus.com>
-
- * sigproc.cc (sig_send): Eliminate sync_sig_send synchronization since
- it didn't seem to affect the "bash hangs" problem.
-
-Tue Mar 7 13:17:56 2000 Christopher Faylor <cgf@cygnus.com>
-
- * mcount.c: Remove strace.h include.
-
-Tue Mar 7 00:29:34 2000 Christopher Faylor <cgf@cygnus.com>
-
- Throughout use strace class in place of individual functions and
- variables.
- * cygwin.din: Eliminate _strace_wm.
- * sigproc.cc (wait_sig): Temporarily add more debugging output.
- * include/cygwin/version.h: Bump minor api to reflect export change.
-
-Sun Mar 5 01:17:05 2000 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (call_handler): Streamline to use only one call to
- ResumeThread.
- * sigproc.cc (sig_send): Use a muto around the ReleaseSemaphore.
- Remove priority setting since it didn't solve anything.
-
-Tue Feb 29 00:46:09 2000 Christopher Faylor <cgf@cygnus.com>
-
- * sigproc.cc (sig_send): Temporarily set priority to highest while
- sending a signal.
-
-Mon Feb 28 11:23:29 2000 Christopher Faylor <cgf@cygnus.com>
-
- * pinfo.cc (set_myself): Add build date to strace output.
-
-Mon Feb 28 11:17:30 2000 Eric Fifer <EFifer@sanwaint.com>
-
- * sigproc.cc (proc_subproc): Only clear wait event when not attending
- to a signal.
-
-Mon Feb 28 00:08:09 2000 Christopher Faylor <cgf@cygnus.com>
-
- * configure.in: Remove --enable-strace-hhmmss option.
- * configure: Regenerate.
-
-Sun Feb 27 23:11:57 2000 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (set_os_type): Record OS name string.
- (getprogname): Eliminate obsolete function.
- (dll_crt0_1): Move initial strace initialization output to set_myself.
- * exceptions.cc (interruptible): Add debugging output.
- (interrupt_setup): New function.
- (interrupt_now): Use interrupt_setup to set up common interrupt handler
- stuff.
- (interrupt_on_return): Ditto.
- (call_handler): Move signal_arrived arm and clear threads to region
- where signalled thread is suspended or suffer races.
- * pinfo.cc (set_myself): Output interesting information when strace is
- first initialized. Initialize progname here.
- * sigproc.cc (sig_dispatch_pending): Modify to ensure that flush signal
- are sent synchronously.
- * strace.cc (strace_vsprintf): Move code into strace program.
- * uname.cc (uname): Use 'osname' global to construct cygwin name +
- Windows type + version.
-
-Fri Feb 25 19:26:42 2000 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (interruptible): Make a little more structured.
- (call_handler): Allow signals to be sent even if signalled thread is
- stopped. Change order of signal_arrived arming/waiting threads
- clearing to eliminate a race.
- (reset_signal_arrived): New helper function.
- * malloc.cc (malloc_init): Use mutos so that signal handler can keep
- track of who owns the lock.
- (__malloc_lock): Ditto.
- (__malloc_unlock): Ditto.
- * sync.h (new_muto): Actually use a muto for the "buffer".
- * Makefile.in: Fix a dependency.
-
-2000-02-25 DJ Delorie <dj@cygnus.com>
-
- * Makefile.in: fix "make check" support and cygrun.
-
-Thu Feb 24 15:56:00 2000 Christopher Faylor <cgf@cygnus.com>
-
- * syscalls.c (_read): Clear errno before doing any read operation.
-
-Thu Feb 24 14:45:06 2000 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (call_handler): Use new muto linked list to look for
- all potential mutos owned by suspended thread. Clear waiting threads
- while thread is stopped.
- (proc_subproc): Clarify debugging output.
- * sync.h (class muto): Add 'next' field.
- (new_muto): Keep linked list alive.
-
-Thu Feb 24 00:59:15 2000 Christopher Faylor <cgf@cygnus.com>
-
- Fix final round of gcc warnings relating to unused parameters.
- * debug.cc (iscygthread): New function.
- * debug.h: Declare it.
- * exceptions.cc (set_process_mask): Flush pending signals.
- (handle_sigsuspend): No need to flush pending signals.
- (call_handler): Refine previous tests of muto ownership. Only clear
- wait()'s when we have definitely responded to a signal.
- * fhandler_console.cc (fhandler_console::read): Don't set EINTR if
- executing in a "cygwin" thread.
- * sigproc.cc (proc_subproc): Use second argument to control whether
- CLEARWAIT actually sets "signalled" flag.
- * sync.h (muto): Add 'unstable' method.
-
-Wed Feb 23 21:59:44 2000 Christopher Faylor <cgf@cygnus.com>
-
- * hinfo.cc (hinfo::extend): Clean up debugging output.
-
-Wed Feb 23 21:34:58 2000 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (interruptible): Change method for determining if
- something is interruptible.
- (call_handler): Avoid suspending a thread if it owns a muto. Only set
- signal_arrived if the thread was actually interrupted.
- (events_init): Initialize module information needed by interruptible().
- * init.cc (dll_entry): Record module handle of main for use by
- interruptible().
- (proc_subproc): Reorganize handling of terminated child so that the
- bulk of the processing comes from the signal thread.
- (wait_sig): Force processing of waiting threads if SIGCHLD is not
- processed.
-
-Tue Feb 22 23:06:01 2000 Christopher Faylor <cgf@cygnus.com>
-
- Respond to more g++ warnings relating to initializing structures.
-
-Mon Feb 21 18:36:37 2000 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler.cc (set_inheritance): Revert previous patch which got rid of
- 'name' parameter.
-
-Mon Feb 21 00:19:40 2000 Christopher Faylor <cgf@cygnus.com>
-
- Respond to a multitude of new g++ warnings.
-
-Sun Feb 20 22:10:21 2000 Christopher Faylor <cgf@cygnus.com>
-
- * environ.cc (getwinenv): Make __stdcall.
- (winenv): Ditto.
- * malloc.cc (strdup): New function. Occludes newlib version.
- (_strdup_r): Ditto.
- * winsup.h: Reflect above __stdcall changes.
-
-Sun Feb 20 21:31:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_disk_file::fstat): Modify get_file_attribute
- return value if FILE_ATTRIBUTE_READONLY is set.
-
-Thu Feb 17 11:00:23 2000 Christopher Faylor <cgf@cygnus.com>
-
- * environ.cc (environ_init): Cosmetic change.
-
-Mon Feb 7 16:50:44 2000 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: cygrun needs libshell32.a.
-
-Sun Feb 6 22:17:58 2000 Christopher Faylor <cgf@cygnus.com>
-
- * sigproc.cc (proc_subproc): Simplify case for when a child process is
- stopped since new signal handler ensures the desired behavior.
-
-Sun Feb 6 21:52:33 2000 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Fix install target so that directories will be created
- when necessary.
-
-Sun Feb 6 18:12:17 2000 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: exceptions.cc should depend on autoload.h.
- * exceptions.cc: Undef DECLSPEC_IMPORT prior to including imagehlp.h to
- avoid defining StackWalk as "import".
- (call_handler): Minor optimizations.
- (sig_handle_tty_stop): Fix typo in previous checkin.
- * sigproc.cc (sigproc_init): Ditto, for signal_arrived initialization.
-
-Sat Feb 5 15:37:37 2000 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (isquote): Convert to inline function.
-
-Sat Feb 5 00:26:01 2000 Christopher Faylor <cgf@cygnus.com>
-
- Throughout, rename global_signal_arrived to signal_arrived.
- Throughout, eliminate use of arm_signals and __signal_arrived.
- Throughout, revert to use of simple call to WaitForSingleObject or
- WaitForMultipleObjects.
- * debug.h: Eliminate obsolete function declaration.
- * exceptions.cc (sigWaitForSingleObject): Eliminate obsolete function
- definition.
- * fhandler.h: Reflect change to select_stuff wait method.
- * fhandler_tape.cc (get_ll): Accommodate new w32api LARGE_INTEGER
- definition.
- * ntea.c (NTReadEARaw): Ditto.
- (NTWriteEA): Ditto.
- * security.cc (ReadSD): Ditto.
- (WriteSD): Ditto.
- * syscalls.cc (_link): Ditto.
- * uname.cc (uname): Eliminate PPC switch.
-
-2000-02-01 Salvador Eduardo Tropea <salvador@inti.gov.ar>
-
- * include/io.h: add return type to setmode()
-
-2000-01-27 DJ Delorie <dj@cygnus.com>
-
- * include/netdb.h (h_errno): change __imp_ to dllimport
- * cygwin.din (reent_data): add DATA
-
-Thu Jan 27 01:07:14 2000 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (call_handler): Add debugging output.
- * select.cc (MAKEready): Arm signals earlier.
- * sigproc.cc (__signal_arrived:arm): Move debugging version of this
- method here.
- (__signal_arrived::release): Ditto.
- * sigproc.h: Recognize debugging versions of above two methods.
- (arm_signals::WaitForMultipleObjects): Don't release signal lock unless
- signal arrived.
- (arm_signals::WaitForMultipleSingleObject): Ditto.
- (arm_signals::MsgWaitForMultipleObjects): Ditto.
-
-Thu Jan 27 00:19:26 2000 Christopher Faylor <cgf@cygnus.com>
-
- * sync.h (new_muto): Workaround change in gcc behavior.
-
-Wed Jan 26 12:57:13 2000 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Ensure that all required libraries are built prior
- to linking cygrun.exe.
-
-Tue Jan 25 21:26:57 2000 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (sig_handle): Crudely work around potential problem
- when main thread has a lock but is killed by a fatal signal.
- * fhandler_tty.cc (fhandler_pty_master::write): Don't perform line
- editing on the pty master (so why do we need the second argument to
- line_edit, then?)
- * thread.cc: Reformat to GNU standards.
-
-2000-01-11 DJ Delorie <dj@cygnus.com>
-
- * ROADMAP: new
-
-2000-01-11 DJ Delorie <dj@cygnus.com>
-
- * fhandler_zero.cc: new, emulate /dev/zero
- * testsuite/winsup.api/devzero.c: new, test /dev/zero
- * Makefile.in: build fhandler_zero.o
- * fhandler.h: add support for /dev/zero
- * hinfo.cc: ditto
- * path.cc: ditto
-
-2000-01-11 DJ Delorie <dj@cygnus.com>
-
- * mmap.cc (mmap): MSDN says *one* of FILE_MAP_*, fix flags for
- MAP_PRIVATE.
-
-Mon Jan 10 01:11:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (acl_access): New function.
- * syscalls.cc (access): Call acl_access if ntsec is on.
-
-Mon Jan 10 01:11:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (get_file_owner): Use of ReadSD() instead of
- GetFileSecurity().
- (get_file_group): Ditto.
-
-Sun Jan 9 15:43:07 2000 Christopher Faylor <cgf@cygnus.com>
-
- * debug.cc (struct thread_start): Add a flag to determine whether a
- field is in use. Eliminate thread_start_ix since it was not
- thread-safe.
- (thread_stub): Use notavail flag to control whether the entry in
- start_buf can be reused.
- (makethread): Ditto.
-
-Sun Jan 9 20:18:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (alloc_sd): Rearrange order of ACE creation.
- (setacl): Optimize creation of ACEs related to inheritance. Code
- cleanup.
- (aclcheck): Disable check for existance of DEF_)CLASS_OBJ.
-
-Sat Jan 8 18:42:32 2000 Christopher Faylor <cgf@cygnus.com>
-
- * mkvers.h: Reorg fix.
-
-Sat Jan 8 20:00:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din: Add new acl API calls.
- * grp.cc (getgroups): Change to work for any username.
- * security.cc (get_id_from_sid): Change to work with acl API.
- (is_grp_member): New function.
- (get_nt_attribute): Rewritten.
- (add_access_allowed_ace): New function.
- (add_access_denied_ace): Ditto.
- (alloc_sd): Rewritten.
- (setacl): New function.
- (getace): Ditto.
- (searchace): Ditto.
- (getacl): Ditto.
- (acl): Ditto.
- (facl): Ditto.
- (aclcheck): Ditto.
- (acecmp): Ditto.
- (aclsort): Ditto.
- (acltomode): Ditto.
- (aclfrommode): Ditto.
- (acltopbits): Ditto.
- (aclfrompbits): Ditto.
- (permtostr): Ditto.
- (acltotext): Ditto.
- (permfromstr): Ditto.
- (aclfromtext): Ditto.
- * syscalls.cc (access): Set errno again when needed.
- * include/cygwin/acl.h: New file.
- * include/sys/acl.h: Ditto.
-
-Sat Jan 8 14:46:19 2000 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Add cygwin DLL specific CFLAGS define.
-
-Fri Jan 7 21:01:57 2000 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (interrupt_on_return): Properly coerce assignment of
- sigsave.func.
-
-2000-01-07 Mumit Khan <khan@xraylith.wisc.edu>
-
- * acconfig.h: New file.
- * configure.in Add check for memset builtin.
- (AC_CONFIG_HEADER): Use.
- (STRACE_HHMMSS): Define instead of substituting.
- (_MT_SAFE): Likewise.
- (_CYG_THREAD_FAILSAFE): Likewise.
- (DEBUGGING): Likewise.
- (MT_SAFE): Substitute as a yes/no variable.
- * Makefile.in: Remove DEBUGGING, STRACE_HHMMSS, and THREAD_FAILSAFE
- variables and add DEFS. Update usage of MT_SAFE to reflect yes/no
- values. Add config.h to winsup.h dependency.
- (CFLAGS_CONFIG): Update.
- (INCLUDES): Prepend `-I.'.
- * utils/Makefile.in (INCLUDES): Likewise.
- * winsup.h: Conditionally include config.h.
- * thread.cc: Likewise.
- * config.h.in: Generate new file.
- * configure: Regenerate.
-
-
-Fri Jan 7 16:21:01 2000 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (dll_crt0): Allow signal handling for dynamically loaded
- case.
-
-Thu Jan 6 00:30:12 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (symlink_check_one): Initialize local variable `unixattr'
- before calling `get_file_attribute'.
- * syscalls.cc (chown): Ditto.
- * security.cc (get_nt_attribute): Eliminate attribute copying from
- world to user/group in case of missing ACEs.
- (alloc_sd): Set special rights for administrators group only if it's
- neither owner nor group.
- * utils/mkpasswd.c: Create entry for local group administrators (SID
- 544).
-
-Thu Jan 6 00:21:31 2000 Christopher Faylor <cgf@cygnus.com>
-
- Change function calls to __stdcall throughout.
- * exceptions.cc (handle_exceptions): Probe stack for return address to
- use with new signal method. Fill out sigsave.cx with this information.
- (call_handler): Use sigsave.cx if it is available, rather than trying
- to find the context of the main thread.
- (interrupt_on_return): Use address of context rather than
- pass-by-reference.
- (interrupt_now): Ditto.
-
-Thu Jan 6 00:21:31 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * grp.cc (getgroups): Return supplementary groups now.
- * include/limits.h: Define NGROUP_MAX as 16 now.
diff --git a/winsup/cygwin/ChangeLog-2001 b/winsup/cygwin/ChangeLog-2001
deleted file mode 100644
index 140b2a9e9..000000000
--- a/winsup/cygwin/ChangeLog-2001
+++ /dev/null
@@ -1,5337 +0,0 @@
-2001-12-31 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Strip path when installing library.
-
-2001-12-30 Christopher Faylor <cgf@redhat.com>
-
- * include/getopt.h: Fix define.
-
-2001-12-30 Christopher Faylor <cgf@redhat.com>
- Ralf Habacker <Ralf.Habacker@freenet.de>
-
- * speclib: New file.
- * Makefile.in: Create library versions of automode.o, textmode.o, and
- binmode.o for easier use on command line. Create libpthread.a, libm.a,
- and libc.a with subsets of exports found in libcygwin.a.
-
-2001-12-30 Ralf Habacker <Ralf.Habacker@freenet.de>
-
- * cygmagic: Eliminate unneeded use of 'tr' and 'bc'.
-
-2001-12-30 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (open_local_policy): Use POLICY_EXECUTE instead of
- enumerating user rights.
-
-2001-12-29 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (open_local_policy): Initialize lsa handle to NULL.
- Request only needed access rights in call to LsaOpenPolicy().
- (create_token): Check for NULL lsa pointer.
-
-2001-12-28 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din: Add symbols for endutent(), getutent(), getutid(),
- getutline(), setutent() and utmpname().
- * syscalls.cc (setutent): New function.
- (endutent): Ditto.
- (utmpname): Ditto.
- (getutent): Ditto.
- (getutid): Ditto.
- (getutline): Ditto.
- * include/cygwin/version.h: Bump API minor version.
-
-2001-12-26 Christopher Faylor <cgf@redhat.com>
-
- * cygmagic: Add define name to warning.
- * dcrt0.cc (_dll_crt0): Check for changes in child_info size.
- (multiple_cygwin_problem): Avoid "proc" errors when testing. Just
- assume new cygwin proc.
- * shared_info.h (mount_info): Add 'cb' element for sanity checks.
- (shared_info): Ditto.
- * child_info.h (child_info): Add fhandler_union_size element for sanity
- checking.
- * shared.cc (open_shared): Detect shared region size mismatch between
- parent and child.
- (shared_info::initialize): Detect shared region size mismatch with
- expectation.
- (memory_Init): Ditto.
- * sigproc.cc (init_child_info): Correctly set cb in passed structure.
- * shared.cc (open_shared):
-
-2001-12-26 Christopher Faylor <cgf@redhat.com>
-
- * include/getopt.h: Protect a declaratin.
-
-2001-12-26 Robert Collins <rbtcollins@hotmail.com>
-
- * thread.cc (pthread_cond::Signal): Use a separate flag for signal
- detection and broadcast semantics.
- (__pthread_cond_dowait): Ditto.
- * thread.h (pthread_cond): New flag for testing when a waiter has
- woken.
-
-2001-12-26 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Quote arguments to shell scripts.
- (clean): Remove new *_magic.h autogenerated files.
-
-2001-12-25 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Autogenerate some header files which provide magic
- numbers. Force dependencies for files which depend on autogenerated
- headers to ensure that they are always built.
- * child_info.h (child_info): Add new fields to accommodate new magic
- number header stuff.
- * dcrt0.cc: Rely on "child_info_magic.h" to ensure that correct
- child_info magic numbers are used.
- (dll_crt0_1): Temporarily remove _cygwin_testing_magic test.
- (_dll_crt0): Do more testing on magic numbers from fork_info structure.
- Call "multiple_cygwin_problem" where appropriate.
- (multiple_cygwin_problem): Rename from multiple_cygwin_die. Issue a
- warning or die, as appropriate based on cygwin version/magic number
- mismatch.
- * pinfo.cc (pinfo::exit): Don't attempt to dereference `this' if it
- doesn't exist. This can happen when a fatal error occurs early in
- process initialization.
- * shared.cc: Rely on "shared_info_magic.h" to accommodate that new
- magic number header stuff.
- (shared_info::initialize): Use new magic number stuff, for shared
- region.
- (memory_init): Ditto, for mount table.
- * shared_info.h: Accomodate new magic number stuff for shared region
- and mount table.
- * sigproc.cc: Rely on "child_info_magic.h" to accommodate new magic
- number header stuff.
- (init_child_info): Initialize new fields in child_info) to accomodate
- magic numbers.
- * winsup.h: Rename multiple_cygwin_die to multiple_cygwin_problem.
- * include/cygwin/version.h: Define macros for manipulating version
- magic.
- * cygmagic: New shell script for generating magic numbers.
-
-2001-12-20 Christopher Faylor <cgf@redhat.com>
-
- * include/cygwin/version.h: Bump API minor version for below changes.
-
-2001-12-19 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in (VPATH): Add regex directory.
- (NM): new variable.
- (OBSOLETE_FUNCTIONS): Ditto.
- (NEW_FUNCTIONS): Ditto.
- (install-headers): Install regex.h.
- (install-man): New target.
- (install): Use new target.
- (DLL_OFILES): Add v8_reg* stuff.
- (new-cygwin1.dll): Eliminate stamp-cygwin-lib creation.
- (libcygwin.a): Remove obsolete functions from import lib. Add new functions.
- * configure.in: Detect 'nm' tool.
- * configure: Regenerate.
- * cygwin.din: Export posix_reg* functions. Eliminate export of v8 reg* functions.
- This is now handled in object files themselves.
- * regex/*: New files.
- * regexp/v8_*.c: New files, renamed from non v8_ equivalents.
-
-2001-12-17 Corinna Vinschen <corinna@vinschen.de>
-
- * include/getopt.h: Don't define getopt_long() and friends when
- included through unistd.h.
-
-2001-12-17 Christopher Faylor <cgf@redhat.com>
-
- * dtable.cc (dtable::init_std_file_from_handle): Avoid initializing
- using an invalid handle.
-
-2001-12-16 David Billinghurst <David.Billinghurst@riotinto.com>
-
- * include/limits.h: Define LLONG_MIN, LLONG_MAX, ULLONG_MAX.
-
-2001-12-11 Christopher Faylor <cgf@redhat.com>
-
- * include/getopt.h: Add HAVE_DECL_GETOPT to save pain elsewhere.
-
-2001-12-10 Christopher Faylor <cgf@redhat.com>
-
- * fhandler.h (fhandler_serial::ev): New class member.
- * fhandler_serial.cc (fhandler_serial::raw_read): Use class member for
- event status.
- * select.cc (peek_serial): Ditto.
-
-2001-12-07 Christopher Faylor <cgf@redhat.com>
-
- * path.cc (path_conv::check): Use full path name for determining
- attributes when /cygdrive/x/foo.
-
-2001-12-06 Christopher Faylor <cgf@redhat.com>
-
- * path.cc (path_conv::check): Reset FH_CYGDRIVE if iterating through
- path.
-
-2001-12-06 Christopher Faylor <cgf@redhat.com>
-
- * path.cc (path_conv::check): Don't complain if /dev/x/foo when x
- doesn't exist.
- (mount_info::conv_to_win32_path): Keep translating when a /cygdrive is
- found. Don't attempt to translate to a device name when devn ==
- FH_CYGDRIVE.
- (cygwin_conv_to_win32_path): Set buffer to empty on error.
- (cygwin_conv_to_full_win32_path): Ditto.
-
- * window.cc: Include unistd.h to verify definitions.
-
-2001-12-05 Christopher Faylor <cgf@redhat.com>
-
- * dir.cc (opendir): Detect error return from build_fhandler_from_name.
-
-2001-12-04 David Rothenberger <daveroth@acm.org>
-
- * net.cc (cygwin_getsockopt): Dereference optlen pointer when passing
- to __check_null_invalid_struct_errno.
-
-2001-12-03 Christopher Faylor <cgf@redhat.com>
-
- * net.cc (cygwin_getsockopt): Allow NULL optval.
- (cygwin_setsockopt): Ditto.
- (cygwin_recvfrom): Allow NULL from.
-
- * path.cc (mount_info::read_cygdrive_info_from_registry): Don't write
- cygdrive to registry if it doesn't exist.
-
-2001-12-03 Christopher Faylor <cgf@redhat.com>
-
- * path.cc (mount_info::conv_to_win32_path): Avoid returning error if
- cygdrive == '/'.
- (mount_info::cygdrive_win32_path): Return 0 if invalid cygdrive path.
-
-2001-11-30 Christopher Faylor <cgf@redhat.com>
-
- * debug.cc (makethread): Eliminate unneeded function call.
- * miscfuncs.cc (tls_ix): Predefine.
- * perthread.h (set_reent): Eliminate.
- (get_reent): Ditto.
- * winbase.h (my_tlsalloc): Use global stack base pointer. Set newly
- allocated location to NULL.
- (my_tlssetvalue): Use global stack base pointer.
- (my_tlsgetvalue): Ditto.
-
-2001-11-27 Christopher Faylor <cgf@redhat.com>
-
- * winsup.h: Reorganize to avoid use of experimental stuff.
- * shortcut.cc: Move winsup.h first in include order.
-
-2001-11-27 Christopher Faylor <cgf@redhat.com>
-
- * cygwin.din (ualarm): New export.
- * dcrt0.cc (_dll_crt0): Add experimental tls storage declaration.
- (dll_crt0): Ditto.
- * debug.cc (thread_stub): Ditto.
- * thread.cc: Minor cleanup.
- (__pthread_create): Add experimental tls storage declaration.
- * miscfuncs.cc: Define tls index.
- * winsup.h: Declare experimental tls storage.
-
- * window.cc (alarm): Use old timer return from setitimer.
- (ualarm): New function. From Alexandr V. Shutko.
-
-2001-11-26 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in (libcygwin.a): Use ar commands to build libcygwin.a since
- adding an archive doesn't work the way we want it to.
-
-2001-11-24 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_disk_file.cc (fhandler_cygdrive::readdir): Avoid reporting
- inaccessible drives.
-
-2001-11-24 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (cygwin_hstrerror): Allow s == NULL.
- (cygwin_rcmd): Add parameter checking.
- (cygwin_rexec): Ditto.
-
-2001-11-24 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (cygwin_inet_ntoa): Add parameter checking.
- (cygwin_inet_network): Return INADDR_NONE instead of 0 in case of
- EFAULT.
- (cygwin_hstrerror): Add parameter checking.
- (cygwin_rresvport): Ditto.
- (socketpair): Ditto.
- * winsup.h (check_null_str): Add extern declaration.
-
-2001-11-24 Christopher Faylor <cgf@redhat.com>
-
- * path.cc (path_conv::check): Tighten FH_CYGDRIVE check to avoid
- matching trailing component, like other devices.
-
-2001-11-24 Christopher Faylor <cgf@redhat.com>
-
- * autoload.cc (IsDebuggerPresent): Make conditional load since it is
- not available everywhere.
-
- * path.cc (mount_info::conv_to_win32_path): Only consider /cygdrive to
- be FH_CYGDRIVE, not /cygdrive/x.
-
-2001-11-24 Christopher Faylor <cgf@redhat.com>
-
- * net.cc (inet_makeaddr): Revert previous change.
-
-2001-11-23 Christopher Faylor <cgf@redhat.com>
-
- * path.cc (chdir): Allow 'cd /cygdrive'.
-
-2001-11-23 Christopher Faylor <cgf@redhat.com>
-
- * dtable.cc (dtable::vfork_parent_restore): Add debugging statement.
-
- * exceptions.cc (try_to_debug): Spin only as long as we don't have a
- debugger attached.
-
- * fhandler.h (fhandler_base::set_nohandle): New method.
- (fhandler_base::get_nohandle): New method.
- * fhandler.cc (fhandler_base::dup): Avoid duplicating handle if there
- is no handle.
- * fhandler_disk_file.cc (fhandler_disk_file::opendir): Set nohandle
- flag on dummy fd.
-
-2001-11-23 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Make intermediate library for eventual inclusion in
- libcygwin.a
-
- * fhandler.h (fhandler_pipe::fhandler_pipe): Remove default argument
- setting since it is no longer used.
-
- * miscfuncs.cc (check_null_str): New function.
- (check_null_str_errno): Ditto.
- * net.cc: Add defensive buffer checking throughout.
- (cygwin_sendto): Protect against invalid fd.
- (cygwin_recvfrom): Ditto.
- (cygwin_getpeername): Ditto.
- (cygwin_recv): Ditto.
- (cygwin_send): Ditto.
- * winsup.h: Declare a new function.
-
-2001-11-23 Corinna Vinschen <corinna@vinschen.de>
-
- * select.cc (set_bits): Fix conditional for setting fd in exceptfds.
- * dtable.cc (dtable::build_fhandler): Create fhandler_pipe using
- correct device type.
- * path.cc (get_devn): Set correct pipe device type from device name.
-
-2001-11-22 Christopher Faylor <cgf@redhat.com>
-
- * path.cc (conv_path_list): Fix wild indexing into path due to
- conflicting methods for setting src pointer.
-
- * dir.cc (opendir): Only pass path_conv argument to opendir, since name
- is already part of the fhandler.
- * dtable.cc (dtable::build_fhandler): Accomodate new FH_CYGDRIVE type.
- * fhandler.cc (fhandler_base::opendir): Nuke name argument.
- * fhandler.h: Add FH_CYGDRIVE to "device" enum.
- (fhandler_base::opendir): Nuke name argument.
- (fhandler_disk_file::opendir): Ditto.
- (fhandler_disk_file::fhandler_disk_file): Declare new method which
- passes devtype through.
- (fhandler_cygdrive): Add elements for tracking drives.
- (fhandler_cygdrive::set_drives): Declare new method.
- (fhandler_cygdrive::iscygdrive_root): Declare new method.
- (fhandler_cygdrive::opendir): Declare new method.
- (fhandler_cygdrive::readdir): Declare new method.
- (fhandler_cygdrive::telldir): Declare new method.
- (fhandler_cygdrive::seekdir): Declare new method.
- (fhandler_cygdrive::rewinddir): Declare new method.
- (fhandler_cygdrive::closedir): Declare new method.
- (fhandler_cygdrive::fstat): Declare new method.
- * fhandler_disk_file.cc (fhandler_disk_file::fhandler_disk_file):
- Define new method which passes devtype through.
- (fhandler_disk_file::open): Tweak debug output.
- (fhandler_disk_file::opendir): Nuke first argument. Use info from
- path_conv and class rather than calling fstat.
- (fhandler_cygdrive::set_drives): New method.
- (fhandler_cygdrive::iscygdrive_root): New method.
- (fhandler_cygdrive::opendir): New method.
- (fhandler_cygdrive::readdir): New method.
- (fhandler_cygdrive::telldir): New method.
- (fhandler_cygdrive::seekdir): New method.
- (fhandler_cygdrive::rewinddir): New method.
- (fhandler_cygdrive::closedir): New method.
- (fhandler_cygdrive::fstat): New method.
- * path.cc (iscygdrive_device): Assume cygdriveness is already verified.
- (path_conv::check): Treat FH_CYGDRIVE "method" as a special case,
- setting file attributes as needed.
- (mount_info::conv_to_win32_path): Allow stand-alone /cygdrive, meaning
- "the directory which contains all of the drives on the system".
- (fillout_mntent): Use cyg_tolower for conversions.
- (mount_info::cygdrive_win32_path): Replace unused argument with unit
- number.
- * shared_info.h (mount_info::cygdrive_win32_path): Reflect argument
- change.
-
-2001-11-21 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in (DLL_OFILES): Add fhandler_disk_file.o.
- * cygheap.h (cygheap_fdnew::operator =): New operator.
- * dir.cc: Add invalid struct checking throughout. Use methods for all
- directory manipulation throughout.
- * fhandler.cc: Move fhandler_disk_file stuff to own file.
- (fhandler_base::opendir): New method.
- (fhandler_base::readdir): New method.
- (fhandler_base::telldir): New method.
- (fhandler_base::seekdir): New method.
- (fhandler_base::rewinddir): New method.
- (fhandler_base::closedir): New method.
- * fhandler_disk_file.cc: New file.
- * fhandler.h (fhandler_base): Declare new virtual methods.
- (fhandler_disk_file): Ditto.
- (fhandler_cygdrive): New class.
-
- * path.cc (conv_path_list): Use strccpy to break apart path.
-
-2001-11-17 Nick Duffek <nick@duffek.com>
-
- * path.cc (conv_path_list): Copy source paths before modifying them.
-
-2001-11-17 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_raw.cc (fhandler_dev_raw::clear): Don't reset unit.
- * fhandler_tape.cc (fhandler_dev_tape::fhandler_dev_tape): Add debug
- output.
-
-2001-11-15 Egor Duda <deo@logos-m.ru>
-
- * include/pthread.h (PTHREAD_COND_INITIALIZER): Define.
- * thread.cc (__pthread_cond_destroy): Add support for
- PTHREAD_COND_INITIALIZER.
- (__pthread_cond_init): Ditto.
- (__pthread_cond_broadcast): Ditto.
- (__pthread_cond_signal): Ditto.
- (__pthread_cond_dowait): Ditto.
- (__pthread_mutex_init): Handle PTHREAD_MUTEX_INITIALIZER correctly,
- don't return error when it's passed as parameter.
- * winsup.h (check_null_invalid_struct): Call correct function.
-
-2001-11-14 Christopher Faylor <cgf@redhat.com>
-
- * exceptions.cc: Add stdlib.h include for alloca declaration.
- * poll.cc: Ditto.
- * termios.cc: Ditto.
-
-2001-11-14 Christopher Faylor <cgf@redhat.com>
-
- * syscalls.cc (_write): Only allow zero length when fd is valid.
-
-2001-11-14 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_disk_file::fstat): Add setting access time
- and creation time to last modification time for files on filesystems
- not supporting multiple timestamps.
- (fhandler_disk_file::fstat_helper): Set access time and creation
- time in incoming Windows structure instead of in stat buf to avoid
- incorrectly overwriting Epoch timestamp.
-
-2001-11-14 Corinna Vinschen <corinna@vinschen.de>
-
- * winsup.h: Remove alloca definition since it's now defined through
- inclusion of stdlib.h.
- * lib/cygwin_crt0.c: Ditto.
-
-2001-11-13 Christopher Faylor <cgf@redhat.com>
-
- * syscalls.cc (_write): Allow zero length as per SUSv2.
-
-2001-11-13 Corinna Vinschen <corinna@vinschen.de>
-
- * dir.cc (mkdir): Add HIDDEN file attribute if file has leading dot
- and HIDDEN_DOT_FILES is defined.
- * fhandler.cc (fhandler_base::open): Ditto.
- * path.cc (symlink): Ditto.
- * syscalls.cc (_rename): Ditto and remove HIDDEN file attribute if
- new filename does not begin with a dot.
-
-2001-11-12 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_console.cc (fhandler_console::read): Revert 2001-10-23
- change to only honor keydown events.
-
-2001-11-11 Christopher Faylor <cgf@redhat.com>
-
- * include/cygwin/version.h: Bump version to 1.3.6.
-
-2001-11-10 Christopher Faylor <cgf@redhat.com>
-
- * dtable.cc (dtable::build_fhandler): Don't increment console fd count
- if new operation fails. Increment fork_fixup field here.
- (dtable::dup2): Don't increment fork_fixup field here.
- * net.cc (fdsock): Ditto.
-
-2001-11-08 Corinna Vinschen <corinna@vinschen.de>
-
- * select.cc: Set errno using set_sig_errno() throughout.
- * signal.cc (signal): Always set SA_RESTART flag.
- * syscalls.cc (_read): Revert previous patch.
-
-2001-11-08 Corinna Vinschen <corinna@vinschen.de>
-
- * select.cc (fhandler_tty_slave::ready_for_read): Return 0 on EBADF.
- * syscalls.cc (_read): If ready_for_read() failed, save errno from
- being overwritten by signal handler call.
-
-2001-11-07 Corinna Vinschen <corinna@vinschen.de>
-
- * lib/getopt.c (getopt_internal): Reset optind to 1 only if optreset
- is not set.
-
-2001-11-06 Christopher Faylor <cgf@redhat.com>
-
- * select.cc (fhandler_tty_slave::ready_for_read): Correct inverted
- not_open test.
-
-2001-11-05 Christopher Faylor <cgf@redhat.com>
-
- * include/cygwin/version.h: Bump version to 1.3.5.
-
-2001-11-05 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (mmap_record::find_empty): Add input parameter check.
-
-2001-11-04 Christopher Faylor <cgf@redhat.com>
-
- * dtable.cc (dtable::build_fhandler): Fix debug_printf to avoid SEGV
- due to incorrect parameter placement.
-
-2001-11-04 Christopher Faylor <cgf@redhat.com>
-
- * fhandler.h (fhandler_pipe::broken_pipe): Renamed from saweof.
- (fhandler_pipe::set_eof): Reflect above change.
- * pipe.cc (fhandler_pipe::fhandler_pipe): Ditto.
- (fhandler_pipe::read): Ditto.
- (fhandler_pipe::hiteof): Ditto.
-
-2001-11-04 Christopher Faylor <cgf@redhat.com>
-
- * pipe.cc (fhandler_pipe::read): Narrow eof return to just the "broken
- pipe" test.
-
-2001-11-04 Christopher Faylor <cgf@redhat.com>
-
- * select.cc: Add more comments throughout. Use bool 'true' where
- appropriate throughout.
- (fhandler_socket::select_read): Remove duplicate setting for *_ready
- which inadvertently overrode previous, correct setting.
- (fhandler_socket::select_write): Ditto.
-
-2001-11-03 Christopher Faylor <cgf@redhat.com>
-
- * select.cc (verify_console): New function.
- (verify_windows): Ditto.
- (fhandler_console::select_read): Really do need to verify that there is
- something to read.
- (fhandler_console::select_windows): Ditto.
-
-2001-11-03 Christopher Faylor <cgf@redhat.com>
-
- * fhandler.h (fhandler_base::ready_for_read): Remove unused argument.
- (fhandler_tty_slave::ready_for_read): Ditto.
- (select_record): Remove poll, initialize peek.
- * select.cc: Remove all poll functions, throughout. Change second
- argument of peek_* functions to 'bool' throughout. Specifically
- initialize *_ready variables throughout.
- (select_stuff::poll): Subsume previous poll functionality.
- (peek_pipe): Don't grab guard mutex when in select loop.
- select()/read() is racy by design so there is no need to worry about a
- race in select().
- (fhandler_base::ready_for_read): Remove unused argument.
- (fhandler_tty_slave::ready_for_read): Ditto.
- * syscalls.cc (_read): Eliminate third argument in ready_for_read call.
-
-2001-11-03 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (get_supplementary_group_sidlist): New function.
- (get_group_sidlist): Call get_supplementary_group_sidlist() to
- retrieve list of supplementary groups SIDs from /etc/group and
- add them to the user's group list.
-
-2001-11-03 Christopher Faylor <cgf@redhat.com>
-
- * fhandler.cc (fhandler_base::read): Return just read ahead characters
- if slow device.
- * fhandler.h (fhandler_base::set_eof): New virtual method.
- (fhandler_pipe::set_eof): New method.
- * pipe.cc (fhandler_pipe::fhandler_pipe): Clear saweof flag.
- (fhandler_pipe::read): Return immediately if hit eof.
- (fhandler_pipe::hit_eof): Return true if saweof flag is set.
- * select.cc (peek_pipe): Don't call PeekNamedPipe if we couldn't grab
- the guard mutex.
-
-2001-11-02 Egor Duda <deo@logos-m.ru>
-
- * dll_init.h (class dll_list): Reorder functions to avoid compiler
- "can't inline" warnings.
- * security.h (class cygsid): Ditto.
- * sigproc.cc (get_proc_lock): Ditto.
- * sigproc.h (class sigframe): Ditto.
- * sync.h (class muto): Ditto.
-
-2001-11-02 Christopher Faylor <cgf@redhat.com>
-
- * fhandler.h (fhandler_base::get_guard): Actually MAKE virtual as
- previously indicated.
- * pipe.cc (make_pipe): Remove extraneous set_errno.
- * syscalls.cc (_open): Ditto.
- * select.cc (peek_pipe): Need to check that there is still something to
- read from the pipe after acquiring the mutex since another
- process/thread could have eaten the input before we got to acquiring
- the lock. (Thanks to Nick Duffek for this inspiration.)
-
-2001-11-01 Christopher Faylor <cgf@redhat.com>
-
- * fhandler.h: Change Windows 'BOOL's to c++ 'bool's for all variables.
- * select.cc (fhandler_base::ready_for_read): Set read_ready to zero
- prior to testing it or it will be uninitialized.
-
- * Makefile.in (CFLAGS): Move setting to Makefile.common.
-
-2001-11-01 Christopher Faylor <cgf@redhat.com>
-
- * cygheap.h (cygheap_fdmanip::isopen): Set appropriate errno if fd not
- open.
- * select.cc (fhandler_base::ready_for_read): Release an open guard
- mutex when exiting with an error condition.
- * syscalls.cc (_read): Check frequently for closed fd as a kludge until
- something better is invented.
-
-2001-11-01 Christopher Faylor <cgf@redhat.com>
-
- * dtable.cc (dtable::build_fhandler): Issue internal error on unknown
- device.
- * fhandler.cc (fhandler_base::close): Show both name and handle in
- debugging output.
-
- * fhandler.h (fhandler_base::get_guard): New virtual method.
- (fhandler_pipe::get_guard): New method.
- (fhandler_socket::ready_for_read): Delete declaration.
- (fhandler_pipe::ready_for_read): Ditto.
- (fhandler_serial::ready_for_read): Ditto.
- (fhandler_console::ready_for_read): Ditto.
- (fhandler_tty_common::ready_for_read): Ditto.
- (fhandler_windows::ready_for_read): Ditto.
- (struct select_record::peek): Declare new method.
- * select.cc (MAKEready): Delete.
- (peek_pipe): Use get_guard method to retrieve potential guard mutex
- handle.
- (fhandler_base::ready_for_read): Rewrite as generic ready-for-read
- handler. Should only be called for "slow" devices.
- (fhandler_socket::ready_for_read): Delete definition.
- (fhandler_pipe::ready_for_read): Ditto.
- (fhandler_serial::ready_for_read): Ditto.
- (fhandler_console::ready_for_read): Ditto.
- (fhandler_tty_common::ready_for_read): Ditto.
- (fhandler_windows::ready_for_read): Ditto.
- (fhandler_pipe::select_read): Fill in new peek record in select_record
- structure.
- (fhandler_console::select_read): Ditto.
- (fhandler_tty_common::select_read): Ditto.
- (fhandler_serial::select_read): Ditto.
- (fhandler_socket::select_read): Ditto.
- (fhandler_socket::select_read): Ditto.
- (fhandler_tty_slave::ready_for_read): Check for tty not open. Set
- errnos appropriately.
- * syscalls.cc (_read): Allow ready_for_read to set errno.
-
- * pinfo.cc (pinfo::init): Return spawn/NO_WAIT process as valid if it
- is initializing.
- * sigproc.cc (getsem): Adjust wait for process to initialize downward
- to avoid huge waits.
-
-2001-10-31 Christopher Faylor <cgf@redhat.com>
-
- * environ.cc: Set reset_com to false to mimic linux behavior more
- closely.
-
-2001-10-31 Corinna Vinschen <corinna@vinschen.de>
-
- * dtable.cc (dtable::vfork_child_dup): Revert impersonation
- before duplicating fhandler.
-
-2001-10-30 Christopher Faylor <cgf@redhat.com>
-
- * exceptions.cc (signal_exit): Weight the odds against the main thread
- running when signal thread is exiting.
-
-2001-10-30 Christopher Faylor <cgf@redhat.com>
-
- * sigproc.cc (sigproc_terminate): Don't signal main thread when exiting.
- * sigproc.h (sigframe): Decorate some methods with `inline'.
- (new_muto): Coerce pointer to new to void *.
-
-2001-10-30 Christopher Faylor <cgf@redhat.com>
-
- * fhandler.cc (fhandler_base::fork_fixup): Pass old handle to
- setclexec_pid.
-
-2001-10-30 Christopher Faylor <cgf@redhat.com>
-
- * cygheap.h (cygheap_fdmanip::cygheap_fdmanip): Clear fh.
- (cygheap_fdmanip::isopen): New method.
- * syscalls.cc (_read): Avoid accessing closed fd.
-
- * path.h (fe_types): New enum.
- (path_conv::set_path): New method.
- (find_exec): Change null_if_not_found argument to something more
- generic.
- * spawn.cc (find_exec): Default to returning the POSIX path rather than
- the windows path, unless instructed otherwise.
- (spawn_guts): Force call to find_exec to use native paths.
- * dlfcn.cc (check_path_access): Accommodate new find_exec arguments.
- * environ.h (win_env::get_posix): New method.
-
-2001-10-30 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::close): Add error handling.
-
-2001-10-30 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::dup): Revert previous change.
-
-2001-10-30 Christopher Faylor <cgf@redhat.com>
-
- * dtable.cc (dtable::dup2): Add some debugging. Use methods from
- passed in class rather than cygheap->fdtab.
- * fhandler_socket.cc (fhandler_socket::fixup_before_fork_exec): Add
- more debugging output.
- (fhandler_socket::dup): Allocate new space for prot_info_ptr for
- duplicated entry.
- (fhandler_socket::close): Loop closesocket() as long as WSAEWOULDBLOCK
- is returned.
- * syscalls.cc (stat_worker): Always delete fh if it has been created.
-
-2001-10-29 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (is_group_member): Call NetLocalGroupGetMembers() for
- local machine only.
- (get_user_local_groups): Ditto for NetLocalGroupEnum().
-
-2001-10-29 Christopher Faylor <cgf@redhat.com>
-
- * fhandler.cc (fhandler_base::set_name): Set namehash here to catch
- name changes.
- (fhandler_base::open): Remove namehash setting.
- (fhandler_base::fstat): Subtract 1 from arbitrary time setting to avoid
- strange ls -l granularity problem.
-
-2001-10-29 Christopher Faylor <cgf@redhat.com>
-
- * select.cc (MAKEready): Remove extraneous select_read.
-
-2001-10-29 Corinna Vinschen <corinna@vinschen.de>
-
- * uinfo.cc (internal_getlogin): Set environment variable $HOME
- from either /etc/passwd or $HOMEDRIVE/$HOMEPATH if necessary.
-
-2001-10-29 Christopher Faylor <cgf@redhat.com>
-
- * fhandler.h (fhandler_serial::fhandler_serial): Change to only accept
- unit argument.
- * fhandler_serial.cc (fhandler_serial::fhandler_serial): Ditto.
- (fhandler_serial::open): Avoid else when previous clause is a return().
- * path.cc (get_devn): Alias /dev/ttyS0 -> /dev/com1, etc.
- (get_device_number): Reallow standalone "com1" as a valid name for
- /dev/com1.
-
-2001-10-26 Christopher Faylor <cgf@redhat.com>
-
- * select.cc (MAKEready): Check for read_ready in loop since select_read
- could set it.
- (peek_socket): Check ready/write/except specifically since they could
- have been set even prior to peek_socket call.
-
-2001-10-24 Christopher Faylor <cgf@redhat.com>
-
- * shared_info.h (MOUNT_VERSION): Change to a smaller, still arbitrary
- number.
- * shared.cc (open_shared): Accept a number to denote the shared memory
- region.
- (memory_init): Use shared memory version as part of the object name of
- the shared region. Ditto for the mount table.
- * path.cc (CYGWIN_REGNAME): New define used in place of
- CYGWIN_INFO_CYGWIN_REGISTRY_NAME throughout.
- * external.cc (cygwin_internal): Implement CW_[GS]ET_CYGWIN_REGISTRY_NAME.
- * cygheap.h (init_cygheap::cygwin_regname): New element.
-
-2001-10-23 Christopher Faylor <cgf@redhat.com>
-
- Ensure that all fhandler_*::read definitions are __stdcall throughout.
- * fhandler.cc (fhandler_base::set_inheritance): Be more defensive in
- debugging code.
- * fhandler.h: Adjust regparms throughout to reflect passing 'this'
- parameter.
- * fhandler_console.cc (fhandler_console::read): Remove unneeded test.
- Only honor "key down" events.
- * miscfuncs.cc (strcasestr): Reorganize for efficient code use.
- (check_null_empty_str_errno): Ditto.
- (__check_null_invalid_struct_errno): Ditto.
- (__check_invalid_read_ptr_errno): Ditto.
- * syscalls.cc (_read): Return 0 when length == 0, as per Single UNIX
- Specification.
-
-2001-10-22 Christopher Faylor <cgf@redhat.com>
-
- * debug.cc (set_errno): Return value of errno that was set, just like
- the macro.
- (setclexec_pid): Replace old handle with new handle.
- * debug.h: Reflect change in arguments for setclexec_pid.
- * fhandler.cc (fhandler_base::set_inheritance): Ditto.
- (fhandler_base::fork_fixup): Ditto.
- * cygerrno.h: Reflect return value change for set_errno.
-
-2001-10-22 Christopher Faylor <cgf@redhat.com>
-
- Remove 'cb' parameter and modify fhandler_* constructors throughout.
- * dtable.cc (dtable::build_fhandler): Remove debugging output which
- uses 'cb'.
- * exec.cc (execvp): New function.
- (execvpe): Ditto.
- * fhandler.cc (fhandler_base::fhandler_base): Use constructor
- initialization.
- * fhandler.h (fhandler_tty_common::fhandler_tty_common): Ditto.
- * fhandler_clipboard.cc (fhandler_dev_clipboard::fhandler_dev_clipboard):
- Ditto.
- * fhandler_console.cc (fhandler_console::fhandler_console): Ditto.
- * fhandler_raw.cc (fhandler_dev_raw::fhandler_dev_raw): Ditto.
- * fhandler_serial.cc (fhandler_serial::fhandler_serial): Ditto.
- * fhandler_tty.cc (fhandler_tty_master::fhandler_tty_master): Ditto.
- (fhandler_tty_slave::fhandler_tty_slave): Ditto.
- (fhandler_pty_master::fhandler_pty_master): Ditto.
- * fhandler_windows.cc (fhandler_windows::fhandler_windows): Ditto.
-
-2001-10-22 Corinna Vinschen <corinna@vinschen.de>
-
- Patch suggested by Ian Ray <ian.ray@nokia.com>:
- * syscalls.cc (seteuid): Unset environment variables HOMEDRIVE and
- HOMEPATH before calling internal_getlogin().
- * uinfo.cc (internal_getlogin): Use default HOMEPATH and HOMEDRIVE
- from environment if both are present, else query NetUserGetInfo().
-
-2001-10-22 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (get_2k_ifconf): Change multiple IP address naming scheme
- to Linux style.
-
-Sun Oct 21 19:04:37 2001 Alexander Gottwald <ago@informatik.tu-chemnitz.de>
-
- * net.cc (get_2k_ifconf): Added support for multiple IP addresses on
- one interface.
-
-2001-10-22 Corinna Vinschen <corinna@vinschen.de>
-
- * miscfuncs.cc (__check_invalid_read_ptr_errno): Return error, if any.
-
-2001-10-21 Christopher Faylor <cgf@redhat.com>
-
- * resource.cc (fill_rusage): Perform paranoid zero structure passed to
- GetProcessMemoryInfo.
-
-2001-10-22 Robert Collins <rbtcollins@hotmail.com>
-
- * autoload.cc: Autoload GetProcessMemoryInfo.
- * resource.cc (fill_rusage): Calculate ru_maxrss and ru_majflt entries.
- (Bug report on this from Guido Serassio in the squid project).
- This requires including psapi.h.
-
-2001-10-20 Christopher Faylor <cgf@redhat.com>
-
- * dll_init.cc (dll_list::alloc): Increase retry count to 1000.
-
-2001-10-20 Christopher Faylor <cgf@redhat.com>
-
- * miscfuncs.cc (__check_invalid_read_ptr_errno): New function.
- * syscalls.c (_write): Validate that write buffer is accessible for
- reading, not writing.
- * winsup.h: Declare new function, increase regparmization of check_*
- functions.
-
-2001-10-19 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (getcwd): Allow len == 0 when buf == NULL.
-
-2001-10-18 Christopher Faylor <cgf@redhat.com>
-
- * syscalls.cc (_read): Validate input pointer.
- (_write): Ditto.
- (system): Ditto.
-
-2001-10-16 Frederic Devernay <Frederic.Devernay@sophia.inria.fr>
-
- * poll.cc (poll): Call cygwin_select() if any fd is valid.
-
-2001-10-16 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_raw.cc (fhandler_dev_raw::open): Eliminate compatibility
- code since no Win32 device names are used anymore.
- * fhandler_tape.cc (fhandler_dev_tape::tape_set_blocksize): Allow
- 0 as blocksize to indicate variable blocksize.
- * path.cc (win32_device_name): Generate NT internal device names
- using upper/lower case names for readability.
- Generate \DosDevices\<letter>: device name for mount table
- compatibility devices.
-
-2001-10-16 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_tape.cc (fhandler_dev_tape::tape_status): Report
- EOTWarningZoneSize in get->mt_eotwarningzonesize.
- * include/cygwin/mtio.h: Define DEFTAPE.
- (struct mtget): Add member `mt_eotwarningzonesize'. Add a comment.
- * include/cygwin/version.h: Bump API minor version to 47.
-
-2001-10-16 Christopher Faylor <cgf@redhat.com>
-
- * fhandler.cc (fhandler_base::fork_fixup): Guard against compiler
- warning.
-
-2001-10-16 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc: Add load statement for `NtOpenFile'.
- * fhandler.h (fhandler_dev_raw::get_unit): New method.
- (fhandler_dev_tape::norewind): Eliminate.
- (fhandler_dev_tape::is_rewind_device): New method.
- * fhandler_raw.cc (fhandler_dev_raw::open): Open new
- fixed device name devices using NT internal method.
- Keep calling fhandler_base::open() for old mount table
- device mapping compatibility devices.
- (fhandler_dev_raw::fstat): Eliminate. Settings are done
- by fhandler_base::fstat() already.
- * fhandler_tape.cc: Remove `norewind' usage throughout.
- * ntdll.h: Define FILE_SYNCHRONOUS_IO_NONALERT.
- Define struct _IO_STATUS_BLOCK.
- Declare NtOpenFile().
- * path.cc (get_raw_device_number): Add new approach for
- using fixed device names.
- (win32_device_name): Ditto.
- (get_device_number): Ditto. Require POSIX path to begin
- with "/dev/".
- (mount_info::conv_to_win32_path): Call win32_device_name()
- instead of get_device_number() after evaluating mount points
- to allow changing the win32 destination path again.
- * security.cc (str2buf2uni): Remove `static' to be able to
- call function from fhandler_dev_raw::open().
- * wincap.cc: Set flag has_raw_devices appropriately.
- * wincap.h: Add flag has_raw_devices.
-
-2001-10-16 Christopher Faylor <cgf@redhat.com>
-
- * cygheap.h (cygheap_fdget::cygheap_fdget): Remove debugging operation
- from set_errno.
-
-2001-10-16 Christopher Faylor <cgf@redhat.com>
-
- * mmap.cc (mmap): Assign 'fh' from cygheap_fdget. Use 'fh' everywhere.
-
-2001-10-15 Christopher Faylor <cgf@redhat.com>
-
- * cygerrno.h (set_errno): Define more informative version of this
- function for debugging.
- (__set_errno): Declare when DEBUGGING.
- * cygheap.h (cygheap_fdget::cygheap_fdget): Add a flag to control when
- errno is set.
- * debug.cc (__set_errno): New function.
- * fcntl.cc (_fcntl): Fix so that correct fd is used for second argument
- to dup2.
- * syscalls.cc (_cygwin_istext_for_stdio): Don't set errno here when
- using cygheap_fdget.
-
-2001-10-15 Christopher Faylor <cgf@redhat.com>
-
- * fhandler.cc (fhandler_base::fork_fixup): Don't protect handle.
-
- * dlfcn.cc: Fix to confirm to coding standards.
-
- Reorganize includes throughout to accommodate new cygheap.h usage.
- * cygheap.h (cygheap_fdmanip): New class: simplifies locking and
- retrieval of fds from cygheap->fdtab.
- (cygheap_fdget): Ditto.
- (cygheap_fdnew): Ditto.
- * fcntl.cc (_fcntl): Use new method to lock fdtab and retrieve info.
- * ioctl.cc (ioctl): Ditto.
- * mmap.cc (mmap): Ditto.
- * net.cc: Ditto, throughout.
- * passwd.cc (getpass): Ditto.
- * path.cc (fchdir): Ditto.
- * pipe.cc (make_pipe): Ditto.
- * sec_acl.cc (facl): Ditto.
- * syscalls.cc: Ditto, throughout.
- * termios.cc: Ditto, throughout.
-
-2001-10-15 Corinna Vinschen <corinna@vinschen.de>
-
- * uname.cc (uname): Use `wProcessorLevel' unless OS sets it wrong.
- Use `dwProcessorType' then instead.
- * wincap.cc: Set flag has_valid_processorlevel appropriately.
- * wincap.h: Add flag has_valid_processorlevel.
-
-2001-10-14 Christopher Faylor <cgf@redhat.com>
-
- * dtable.cc (dtable::build_fhandler_from_name): Use PC_FULL to
- determine path name.
- * path.cc (fchdir): Remove rel -> abs path conversion.
-
-Sun Oct 14 08:10:12 2001 Gary R. Van Sickle
-
- * fork.cc (fork_parent): Correct the "unable to allocate
- forker_finished event" error message. It named the wrong event before.
-
-2001-10-13 Christopher Faylor <cgf@redhat.com>
-
- * autoload.cc (load_wsock32): Declare dummy function to force loading
- of winsock.
- * fhandler.cc (fhandler_base::set_inheritance): Make debugging output
- more verbose.
- * fhandler_socket.cc (fhandler_socket::fixup_after_fork): Force loading
- of winsock32 if winsock2 not available.
- * net.cc (set_socket_inheritance): Use DuplicateHandle in all cases to
- set inheritance correctly.
- (fdsock): Use winsock2_active macro to determine when to set socket
- inheritance. Remove fdtab resource locking since this function should
- already be protected.
- (cygwin_accept): Simplify logic. Ensure that fdtab unlock is not
- called inappropriately.
- (cygwin_rcmd): Use fdtab locking.
- (cygwin_rresvport): Ditto.
- (cygwin_rexec): Ditto.
- * select.cc (peek_socket): Set errno appropriately if winsock select
- fails.
-
-2001-10-13 Kazuhiro Fujieda <fujieda@jaist.ac.jp>
-
- * winsup.h: Declare check_pty_fds.
- * syscalls.cc (check_pty_fds): Rename from check_ttys_fds. Also check
- pty master.
- (setsid): Use check_pty_fds.
- * dtable.cc (dtable::dec_console_fds): Add check on pty fds.
-
-2001-10-13 Ralf Habacker <Ralf.Habacker@freenet.de>
-
- * fhandler_dsp.cc (fhandler_dsp::ioctl): Return 0 for successful
- SNDCTL_DSP_GETBLKSIZE operation.
-
-2001-10-13 Christopher Faylor <cgf@redhat.com>
-
- Remove obsolete 'name' arg from fhandler_* constructors throughout.
- * winsup.h (winsock_active): New macro.
- (winsock2_active): Ditto.
- * autoload.cc (wsock_init): Use new macros to decide if winsock or
- winsock2 is loaded.
- (nonexist_wsock32): Dummy function to force winsock load.
- (nonexist_ws2_32): Dummy function to force winsock2 load.
- * fhandler.h (fhandler_socket::fstat): Declare new method. Currently
- unused.
- * fhandler_socket.cc (fhandler_socket::fixup_before_fork_exec): Check
- that winsock2 is active before trying WSADuplicateSocketA.
- (fhandler_socket::fixup_after_fork): Add extra check for
- winsock2_active. Otherwise use iffy procedures for Windows 95.
- (fhandler_socket::fixup_after_exec): Add debugging.
- (fhandler_socket::dup): Add debugging.
- (fhandler_socket::fstat): New method.
- (fhandler_socket::set_close_on_exec): Attempt to perform iffy stuff on
- Windows 95.
-
- * errno.cc (_sys_nerr): Work around compiler strangeness.
-
- * pinfo.cc (winpids::add): Add extra element at end of allocated array
- for setting to NULL.
- (winpids::enumNT): Ditto.
- (winpids::init): Don't modify pidlist if it hasn't been allocated
- (possibly due to malloc problem).
-
-2001-10-12 Christopher Faylor <cgf@redhat.com>
-
- * autoload.cc (wsock_init): Reorganize slightly to accommodate a new
- compiler.
-
-2001-10-11 Egor Duda <deo@logos-m.ru>
-
- * net.cc (cygwin_sendto): Use correct socket address when sending
- data to AF_UNIX socket.
-
-Wed Oct 10 16:10:41 2001 Alexander Gottwald <ago@informatik.tu-chemnitz.de>
-
- * net.cc (get_95_ifconf): Using other registry values pointing to
- correct networkdevice identification for Windows95.
-
-Tue Oct 9 22:22:45 2001 Christopher Faylor <cgf@cygnus.com>
-
- Throughout, rename PROC_FORK1 to PROC_FORK.
- * child_info.h: Rename PROC_* to _PROC_*. Define PROC_* with
- additional testing magic. Eliminate old PROC_FORK and rename
- PROC_FORK1 to PROC_FORK.
- * dcrt0.cc (_cygwin_testing_magic): New variable. Added to magic
- number in proc_info.
- (alloc_stack): Eliminate old PROC_FORK test.
- (dll_crt0_1): Ditto. Use _PROC_* enums for test. Subtract
- _cygwin_testing_magic from child_proc_info->type so that normal cygwin
- programs invoked by test suite programs do not consider themselves to
- be in a cygwin environment.
- (_dll_crt0): Ditto. Move environment checks to initial_env function to
- conserve on stack space.
- (initial_env): New function. Checks for testing and debugging
- environment variables.
- * init.cc (cygwin_hmodule): Move declaration.
- * winsup.h: Declare variables used for cygwin testing.
-
-Tue Oct 9 19:17:53 2001 Christopher Faylor <cgf@cygnus.com>
-
- * uinfo.cc (internal_getlogin): Reorganize slightly to minimize work in
- default condition.
-
-Tue Oct 9 18:53:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_disk_file::open): Add missing case clash check.
-
-Mon Oct 8 01:47:27 2001 Christopher Faylor <cgf@cygnus.com>
-
- * dtable.cc (dtable::build_fhandler): Allocate correct amount for given
- fhandler class.
- * fhandler.h (fhandler_union): Properly define rather than relying on
- fhandler_console being "big enough".
-
-Mon Oct 8 00:25:18 2001 Christopher Faylor <cgf@cygnus.com>
-
- * external.cc (fillout_pinfo): Reset counter whenever we initialize the
- pid list.
-
-Sun Oct 7 17:16:05 2001 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (normalize_posix_path): Don't eat a '.' after a '\\' since it
- has special meaning on NT.
-
- * syscalls.cc (access): Use stat_worker.
-
-Fri Oct 5 21:01:14 2001 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler.cc (fhandler_base::fork_fixup): Protect dup'ed handle and
- record it as non-inheritable for debugging purposes in case there is a
- subsequent fork or exec.
- * fhandler_tty.cc (fhandler_tty_common::fixup_after_fork): Allow
- fork_fixup to call ProtectHandle.
-
-Fri Oct 5 14:22:47 2001 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (get_raw_device_number): Correct length arguments for
- wdeveqn.
-
-Fri Oct 5 11:05:32 2001 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (getcwd): Allow NULL first argument.
-
-Fri Oct 5 00:31:35 2001 Christopher Faylor <cgf@cygnus.com>
-
- * heap.h (inheap): Check for NULL.
-
-Thu Oct 4 23:17:49 2001 Christopher Faylor <cgf@cygnus.com>
-
- Add second path_conv * argument to fstat()s throughout.
- * fhandler.h: Change read and fstat to regparm/stdcall throughout.
- (fhandler_base::fstat): Just declare. Don't define.
- (fhandler_disk_file::fstat_helper): Declare.
- * fhandler.cc (fhandler_base::fstat): Move here from fhandler.h, adapt
- from former stat_dev().
- (fhandler_disk_file::fstat): Move most of the disk-file-specific logic
- from stat_worker to here. Use fstat_helper to derive final fstat
- output.
- (fhandler_disk_file::fstat_helper): New method, renamed from former
- fstat method.
- (num_entries): Moved here from syscalls.cc.
- * fhandler_mem.cc (fhandler_dev_mem::fstat): Use base class to
- initialize most stuff. Invert has_physical_mem_access test for
- establishing permissions.
- * fhandler_raw.cc (fhandler_dev_raw::fstat): Eliminate unneed test and
- memory clearing. Use base class to initialize most stuff.
- * syscalls.cc (stat_dev): Eliminate.
- (stat_worker): Simply call fstat method to generate fstat output. Move
- all device specific code to appropriate fstats.
-
- * dir.cc (opendir): Pass correct arg to stat_worker to allow following
- symlinks.
-
-Thu Oct 4 21:37:57 2001 Christopher Faylor <cgf@cygnus.com>
-
- * spawn.cc (perhaps_suffix): Return NULL on non-existence of file as
- well as "directoryness". Previous code modified on 2001/09/30 actually
- had an arguable bug which was unmasked by the change on that day.
-
-Thu Oct 4 20:52:42 2001 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (path_conv::check): Return ENOTDIR when leading device and
- trailing component.
-
-Thu Oct 4 18:49:23 2001 Christopher Faylor <cgf@cygnus.com>
-
- * syscalls.cc (stat_worker): Make global. Accept path_conv parameter
- for passing information back to caller.
- * winsup.h: Declare stat_worker.
- * dir.cc (opendir): Use stat_worker rather than stat and pass path_conv
- parameter to stat_worker for later inspection.
-
-2001-10-04 Karellen (karellen@boreworms.com)
-
- * syslog.cc (syslog): Teach syslog about syslog priorities other than
- LOG_ERR, LOG_WARNING and LOG_INFO
-
-Thu Oct 4 15:50:03 2001 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (path_conv::check): Don't perform file system or rootdir
- checks on devices.
-
-Wed Oct 3 19:40:36 2001 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (dll_crt0_1): Don't close hexec_proc if it is NULL.
-
- * fork.cc (vfork): Add debugging statements.
-
- * path.cc (get_device_number): Make static. Rewrite to inspect both unix
- and windows paths.
- (get_raw_device_number): Just check for parts of raw device that we
- care about.
- (get_devn): New function, pulled from get_device_number.
- (win32_device_name): Accommodate arg changes to get_device_number.
- (mount_info::get_device_number): Call get_device_number on translated
- Windows path.
-
- * spawn.cc (spawn_guts): Don't treat P_VFORK differently from P_NOWAIT.
- Add handle to child's shared region to child so that it will be
- preserved if the parent goes away.
- * fhandler.h: Throughout, simplify to one open method for all fhandler
- classes, requiring a path_conv first element.
- * fhandler.cc (fhandler_base::open): Remove obsolete method.
- Generalize to require path_conv * as first argument.
- (fhandler_disk_file::open): Remove obsolete method.
- (fhandler_disk_file::open): Use path_conv pointer rather than
- reference.
- * fhandler_clipboard.cc (fhandler_dev_clipboard::dup): Use new open
- method.
- (fhandler_dev_clipboard::open): Accommodate new argument for open
- methods.
- * fhandler_console.cc (fhandler_console::open): Ditto.
- (fhandler_console::dup): Use new open method.
- (fhandler_console::fixup_after_fork): Ditto.
- (fhandler_console::fixup_after_exec): Ditto.
- * fhandler_dsp.cc (fhandler_dev_dsp::open): Accommodate new argument for
- open methods.
- * fhandler_floppy.cc (fhandler_dev_floppy::open): Ditto.
- * fhandler_mem.cc (fhandler_dev_mem::open): Ditto.
- * fhandler_random (fhandler_dev_random::open): Ditto.
- * fhandler_raw.cc (fhandler_dev_raw::open): Ditto.
- * fhandler_serial.cc (fhandler_serial::open): Ditto.
- * fhandler_tape.cc (fhandler_dev_tape::open): Ditto.
- * fhandler_tty.cc (fhandler_tty_slave::open): Ditto.
- (fhandler_pty_master::open): Ditto.
- * fhandler_windows.cc (fhandler_windows::open): Ditto.
- * fhandler_zero.cc (fhandler_dev_zero::open): Ditto.
- * fhandler_socket.cc (fhandler_socket::set_connect_secret): Accommodate
- new argument for open methods.
- * syscalls.cc (_open): Ditto.
- (stat_worker): Ditto.
-
-Tue Oct 2 23:49:18 2001 Christopher Faylor <cgf@cygnus.com>
-
- * cygheap.cc (cfree): Remove malloc debugging probe.
- * dlmalloc.c (errprint): Remove abort() call which causes interesting
- error message printing to abort prematurely.
- * environ.cc: Sprinkle MALLOC_CHECKs liberally throughout.
- (_addenv): Allocate two empty elements at end of environ to
- (apparently) work around problems with some buggy applications.
- (winenv): Avoid calling alloca if no forced environment variable is
- present.
-
- * exceptions.cc (open_stackdumpfile): Don't print "Dumping stack trace
- to..." when running in a cygwin environment (i.e., the parent is a
- cygwin process).
-
- * dtable.cc (dtable::init_std_file_from_handle): Move device type
- detection code from build_fhandler here since it is only used by this
- function.
- (dtable::build_fhandler_from_name): New method. Renamed from
- dtable::build_fhandler.
- (dtable::build_fhandler): Use build_fhandler_from_name.
- (cygwin_attach_handle_to_fd): Ditto.
- * syscalls.cc (_open): Ditto.
- (stat_worker): Ditto.
- * dtable.h (dtable::build_fhandler_from_name): Rename declaration from
- dtable::build_fhandler.
-
-Mon Oct 1 16:52:23 2001 Christopher Faylor <cgf@cygnus.com>
-
- * dtable.h (dtable::build_fhandler): Make path_conv parameter
- non-optional.
- (dtable::init_std_file_from_handle): Eliminate name parameter.
- * dtable.cc (stdio_init): Don't pass bogus name to
- init_std_file_from_handle. The function will figure out the name
- itself.
- (dtable::init_std_file_from_handle): Eliminate name parameter. Assume
- that we're always called with an appropriate fd. Pass name as NULL if
- we can't simply figure it out from context.
- (cygwin_attach_handle_to_fd): Pass path_conv argument to
- build_fhandler.
- (dtable::build_fhandler): Make path_conv argument mandatory. Eliminate
- specific call to get_device_number. With unknown device names, set
- name from handle context for parsing by path_conv.
- (dtable::build_fhandler): Pass path_conv argument to build_fhandler.
- * path.h (path_conv::set_isdisk): Set disk device type.
- (path_conv::is_device): Don't consider FH_DISK a "device".
- * syscalls.cc (_open): Pass path_conv argument by reference.
- (stat_worker): Ditto.
- (_rename): Use path_conv operators. Add bounds to DeleteFile/MoveFile
- for loop.
-
-Mon Oct 1 14:25:00 2001 Charles Wilson <cwilson@ece.gatech.edu>
-
- * cygwin.din: export strtoll and strtoull
-
-Sun Sep 30 22:51:41 2001 Christopher Faylor <cgf@cygnus.com>
-
- Add "path.h" include throughout, where needed. Use new path_conv
- methods and operators to simplify testing for directory and attributes,
- throughout.
- * path.h (path_conv::exists): New method.
- (path_conv::has_attribute): Ditto.
- (path_conv::isdir): Ditto.
- (path_conv::DWORD &): New operator.
- (path_conv::int &): Ditto.
- * dir.cc (rmdir): Eliminate a goto.
- * dtable.cc (dtable::build_fhandler): Accept opt and suffix info for
- path_conv.check. Return fh == NULL on path_conv error. Pass unit to
- set_name as appropriate.
- (dtable::reset_unix_path_name): New method.
- * dtable.h (dtable): Declare new method. Reflect arg changes to
- build_fhandler.
- * fhandler.cc (fhandler_disk_dummy_name): Eliminate.
- (fhandler_base::set_name): Expect paths to be NULL. Build
- unix_path_name from win32_path_name when it is a device.
- (fhandler_base::reset_unix_path_name): New method.
- (fhandler_base::raw_read): Report EISDIR when ERROR_INVALID_FUNCTION
- or ERROR_INVALID_PARAMETER and reading a directory.
- (fhandler_disk_file::fstat): Don't call stat_dev since we should now
- never be calling fhandler_disk_file methods with devices.
- (fhandler_base::fhandler_base): Clear {unix,win32}_path_name.
- (fhandler_base::~fhandler_base): Always free {unix,win32}_path_name.
- (fhandler_disk_file::fhandler_disk_file): Remove set_no_free_names
- kludge.
- (fhandler_disk_file::open): Ditto.
- * fhandler.h (fhandler_base::no_free_names): Eliminate.
- (fhandler_base::set_no_free_names): Ditto.
- * fhandler_tty.cc (fhandler_tty_slave::fhandler_tty_slave): Don't set
- unix_path_name here.
- * path.cc (fchdir): Lock fd table throughout. Use new
- dtable::reset_unix_path_name method to reset path.
- * syscalls.cc (stat_worker): Reorganize to always call fstat method.
- Pass path_conv method to fhandler_*::open.
- (chroot): Elminate a goto.
-
-Sun Sep 30 17:37:43 2001 Christopher Faylor <cgf@cygnus.com>
-
- * environ.cc (winenv): Allocate exact amount of space needed for forced
- windows environment variable rather than just using MAX_PATH.
-
-Sun Sep 30 17:10:18 2001 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Depend on stamp to ensure rebuilding. Remove stamp file
- when we've just built the DLL.
-
-Mon Oct 1 00:34:00 2001 Robert Collins <rbtcollins@hotmail.com>
-
- * thread.cc (pthread_cond_dowait): Hopefully eliminate a race on multiple thread
- wakeups.
-
-Sat Sep 29 18:26:00 2001 Robert Collins <rbtcollins@hotmail.com>
-
- * pthread.cc (pthread_cond_timedwait): Deleted - exported from thread.cc.
- (pthread_cond_wait): Deleted - exported from thread.cc.
- * thread.cc (pthread_cond::BroadCast): Update to use the new syntax for
- verifyable_object_isvalid ().
- (pthread_cond::Signal): Ditto. Also attempt to fix the lost signal race
- with pthread_cond::TimedWait().
- (check_valid_pointer): Change definiton to void const *.
- (verifyable_object_isvalid): Add new parameter to allow identification of
- static initializers, and return a enum rather than magic numbers.
- (__pthread_create): Ditto.
- (__pthread_cleanup): Ditto.
- (__pthread_attr_init): Ditto.
- (__pthread_attr_getinheritsched): Ditto.
- (__pthread_attr_getschedparam): Ditto.
- (__pthread_attr_getschedpolicy): Ditto.
- (__pthread_attr_getscope): Ditto.
- (__pthread_attr_setdetachstate): Ditto.
- (__pthread_attr_getdetachstate): Ditto.
- (__pthread_attr_setinheritsched): Ditto.
- (__pthread_attr_setschedparam): Ditto.
- (__pthread_attr_setschedpolicy): Ditto.
- (__pthread_attr_setscope): Ditto.
- (__pthread_attr_setstacksize): Ditto.
- (__pthread_attr_getstacksize): Ditto.
- (__pthread_attr_destroy): Ditto.
- (__pthread_join): Ditto.
- (__pthread_detach): Ditto.
- (__pthread_suspend): Ditto.
- (__pthread_continue): Ditto.
- (__pthread_getschedparam): Ditto.
- (__pthread_getsequence_np): Ditto.
- (__pthread_key_create): Ditto.
- (__pthread_key_delete): Ditto.
- (__pthread_setschedparam): Ditto.
- (__pthread_setspecific): Ditto.
- (__pthread_getspecific): Ditto.
- (__pthread_cond_destroy): Ditto.
- (__pthread_cond_init): Ditto.
- (__pthread_cond_broadcast): Ditto.
- (__pthread_cond_signal): Ditto.
- (__pthread_condattr_init): Ditto.
- (__pthread_condattr_getpshared): Ditto.
- (__pthread_condattr_setpshared): Ditto.
- (__pthread_condattr_destroy): Ditto.
- (__pthread_kill): Ditto.
- (__pthread_mutex_init): Ditto.
- (__pthread_mutex_getprioceiling): Ditto.
- (__pthread_mutex_lock): Ditto.
- (__pthread_mutex_trylock): Ditto.
- (__pthread_mutex_unlock): Ditto.
- (__pthread_mutex_destroy): Ditto.
- (__pthread_mutex_setprioceiling): Ditto.
- (__pthread_mutexattr_getprotocol): Ditto.
- (__pthread_mutexattr_getpshared): Ditto.
- (__pthread_mutexattr_gettype): Ditto.
- (__pthread_mutexattr_init): Ditto.
- (__pthread_mutexattr_destroy): Ditto.
- (__pthread_mutexattr_setprotocol): Ditto.
- (__pthread_mutexattr_setprioceiling): Ditto.
- (__pthread_mutexattr_getprioceiling): Ditto.
- (__pthread_mutexattr_setpshared): Ditto.
- (__pthread_mutexattr_settype): Ditto.
- (__sem_init): Ditto.
- (__sem_destroy): Ditto.
- (__sem_wait): Ditto.
- (__sem_trywait): Ditto.
- (__sem_post): Ditto.
- (__pthread_cond_dowait): New function, contains core logic from
- __pthread_cond_wait and __pthread_cond_timedwait. Decrement (*cond)->waiting
- before reentering the cond access mutex to allow detection of lost signals.
- (__pthread_cond_timedwait): Rename to pthread_cond_timedwait, and call
- __pthread_cond_dowait after calculating the wait length.
- (__pthread_cond_wait): Rename to pthread_cond_wait, and call
- __pthread_cond_dowait.
- * thread.h: New enum for use with verifyable_object_isvalid.
- Remove the extern exporting of __pthread_cond_timedwait and __pthread_cond_wait.
-
-Fri Sep 28 21:18:50 2001 Christopher Faylor <cgf@cygnus.com>
-
- * pipe.cc (fhandler_pipe::fixup_after_fork): New method.
- * fhandler.h (fhandler_pipe::fixup_after_fork): Declare new method.
-
-Fri Sep 28 03:23:04 2001 Christopher Faylor <cgf@cygnus.com>
-
- * passwd.cc (read_etc_passwd): Bother with unlocking when not
- in cygwin initialization.
- * grp.cc (read_etc_group): Ditto.
-
-Fri Sep 28 02:57:03 2001 Christopher Faylor <cgf@cygnus.com>
-
- * passwd.cc (read_etc_passwd): Don't bother with locking when
- in cygwin initialization since there is only one thread.
- * grp.cc (read_etc_group): Ditto.
-
-Fri Sep 28 01:50:09 2001 Christopher Faylor <cgf@cygnus.com>
-
- * pipe.cc (fhandler_pipe::hit_eof): Return correct value when there is
- no EOF event available.
-
-Sat Sep 28 00:34:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (mmap): Move setting the access after evaluating fd.
- Remove useless comment. Explain copy-on-write problem of 9x
- more detailed. Don't set access to FILE_MAP_COPY on 9x only
- when anonymous mapping is requested.
- (fhandler_disk_file::mmap): Remove useless device check.
- Add debug output.
-
-Fri Sep 27 07:35:00 2001 Robert Collins <rbtcollins@hotmail.com>
-
- * Makefile.in: Only stamp winver_stamp on success.
-
-Wed Sep 26 16:02:35 2001 Christopher Faylor <cgf@cygnus.com>
-
- * select.cc (peek_pipe): REALLY only grab mutex when we actually got
- something from the pipe.
-
-Tue Sep 25 21:25:00 2001 Robert Collins <rbtcollins@hotmail.com>
-
- * thread.cc (pthread_cond::BroadCast): Use address with verifyable_object_isvalid().
- (pthread_cond::Signal): Ditto.
- (__pthread_create): Ditto.
- (__pthread_cleanup): Ditto.
- (__pthread_attr_init): Ditto.
- (__pthread_attr_getinheritsched): Ditto.
- (__pthread_attr_getschedparam): Ditto.
- (__pthread_attr_getschedpolicy): Ditto.
- (__pthread_attr_getscope): Ditto.
- (__pthread_attr_setdetachstate): Ditto.
- (__pthread_attr_getdetachstate): Ditto.
- (__pthread_attr_setinheritsched): Ditto.
- (__pthread_attr_setschedparam): Ditto.
- (__pthread_attr_setschedpolicy): Ditto.
- (__pthread_attr_setscope): Ditto.
- (__pthread_attr_setstacksize): Ditto.
- (__pthread_attr_getstacksize): Ditto.
- (__pthread_attr_destroy): Ditto.
- (__pthread_join): Ditto.
- (__pthread_detach): Ditto.
- (__pthread_suspend): Ditto.
- (__pthread_continue): Ditto.
- (__pthread_getschedparam): Ditto.
- (__pthread_getsequence_np): Ditto.
- (__pthread_key_create): Ditto.
- (__pthread_key_delete): Ditto.
- (__pthread_setschedparam): Ditto.
- (__pthread_setspecific): Ditto.
- (__pthread_getspecific): Ditto.
- (__pthread_cond_destroy): Ditto.
- (__pthread_cond_init): Ditto.
- (__pthread_cond_broadcast): Ditto.
- (__pthread_cond_signal): Ditto.
- (__pthread_cond_timedwait): Ditto.
- (__pthread_cond_wait): Ditto.
- (__pthread_condattr_init): Ditto.
- (__pthread_condattr_getpshared): Ditto.
- (__pthread_condattr_setpshared): Ditto.
- (__pthread_condattr_destroy): Ditto.
- (__pthread_kill): Ditto.
- (__pthread_mutex_init): Ditto.
- (__pthread_mutex_getprioceiling): Ditto.
- (__pthread_mutex_lock): Ditto.
- (__pthread_mutex_trylock): Ditto.
- (__pthread_mutex_unlock): Ditto.
- (__pthread_mutex_destroy): Ditto.
- (__pthread_mutex_setprioceiling): Ditto.
- (__pthread_mutexattr_getprotocol): Ditto.
- (__pthread_mutexattr_getpshared): Ditto.
- (__pthread_mutexattr_gettype): Ditto.
- (__pthread_mutexattr_init): Ditto.
- (__pthread_mutexattr_destroy): Ditto.
- (__pthread_mutexattr_setprotocol): Ditto.
- (__pthread_mutexattr_setprioceiling): Ditto.
- (__pthread_mutexattr_getprioceiling): Ditto.
- (__pthread_mutexattr_setpshared): Ditto.
- (__pthread_mutexattr_settype): Ditto.
- (__sem_init): Ditto.
- (__sem_destroy): Ditto.
- (__sem_wait): Ditto.
- (__sem_trywait): Ditto.
- (__sem_post): Ditto.
- (verifyable_object_isvalid): Recieve a pointer to a pointer for verification.
- (__pthread_mutexattr_getprotocol): Fix typo in magic number.
- (__pthread_mutexattr_getpshared): Ditto.
- (__pthread_mutexattr_gettype): Ditto.
- * thread.h (verifyable_object_isvalid): Change prototype to recieve a pointer to a
- pointer for verification.
- * include/pthread.h: Fix typo for __cleanup_routine_type typedef. (Contrib from Net).
-
-Tue Sep 25 02:09:42 2001 Christopher Faylor <cgf@redhat.com>
-
- * select.cc (fhandler_tty_common::ready_for_read): Rewrite to correctly
- call peek_pipe.
-
-Mon Sep 24 18:46:39 2001 Christopher Faylor <cgf@cygnus.com>
-
- * select.cc (peek_pipe): Only grab mutex when we actually got something
- from the pipe.
-
-Mon Sep 24 17:41:03 2001 Christopher Faylor <cgf@redhat.com>
-
- * fhandler.h (fhandler_pipe::hit_eof): New method.
- (writepipe_exists): New class element.
- (orig_pid): Ditto.
- (id): Ditto.
- (is_slow): Eliminate.
- * pipe.cc (fhandler_pipe::set_close_on_exec): Set inheritance on
- writepipe_exists, if it exists.
- (fhandler_pipe::hit_eof): New method, modelled after tty.
- (fhandler_pipe::dup): Duplicate writepipe_exists, if it exists.
- (make_pipe): Set up a dummy event for pipes on windows 9x. The
- nonexistence of this event means that the write side of the
- pipe has closed.
- (_dup): Move to syscalls.cc
- (_dup2): Ditto.
-
- * dtable.cc (dtable::build_fhandler): Fill out set_names here, if
- appropriate.
- * syscalls.cc (_open): Call set_names in build_fhandler.
-
-Sun Sep 23 16:55:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (_open): Set name in fhandler object after successful
- creation.
- (stat_dev): Set device type to block device in FH_FLOPPY case.
-
-Sun Sep 23 11:15:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * dtable.cc (dtable::build_fhandler): Initialize unit when using
- optional path_conv argument.
-
-Sat Sep 22 17:33:45 2001 Christopher Faylor <cgf@cygnus.com>
- Corinna Vinschen <corinna@vinschen.de>
-
- * dtable.cc (dtable::build_fhandler): Accept an optional path_conv
- argument. If available, use this to calculate path name and device
- number.
- * dtable.h (dtable): Reflect above change.
- * fhandler.h (fhandler_base): Declare virtual method which accepts
- path_conv rather than path string as first argument.
- * fhandler.cc (fhandler_base::open): Define above new method.
- * syscalls.cc (_open): Set aside a path_conv variable for use in
- build_fhandler and subsequent call to open.
-
-Sat Sep 22 12:44:57 2001 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (setup_handler): Always relinquish lock after we've
- interrupted.
- * fhandler.cc: Move pipe methods to pipe.cc.
- * fhandler.h (fhandler_pipe): Add new methods.
- * fork.cc (sync_with_parent): Make error messages more informative.
- * pipe.cc (fhandler_pipe::fhandler_pipe): Move here from fhandler.cc.
- (fhandler_pipe::lseek): Ditto.
- (fhandler_pipe::set_close_on_exec): New method.
- (fhandler_pipe::read): Ditto.
- (fhandler_pipe::close): Ditto.
- (fhandler_pipe::dup): Ditto.
- (make_pipe): Create the guard mutex on the read side of the pipe.
- * select.cc (peek_pipe): Use guard_mutex to discover if we have the
- right to read on this pipe.
- (fhandler_pipe::readh_for_read): Pass the read pipe guard mutex to
- peek_pipe.
- * syscalls.cc (_read): Always detect signal catchers, for now.
-
- * debug.cc (makethread): Eliminate hack to make thread inheritable.
- * sigproc.cc (subproc_init): Don't use hack to make thread inheritable.
-
-Thu Sep 20 16:48:44 2001 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler.cc (fhandler_base::set_inheritance): Just use
- DUPLICATE_CLOSE_SOURCE to change inheritance. Eliminate all other
- logic dealing with closed handles.
- * fhandler.h (fhandler_base::set_inheritance): Reflect above change.
- * fhandler_tty.cc (fhandler_tty_common::set_close_on_exec): Ditto.
-
-Thu Sep 20 13:34:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::fixup_after_exec): Close
- socket only when not using Winsock2.
-
-Thu Sep 20 13:20:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (fhandler_socket::fixup_after_exec): Remove inline
- implementation.
- (fhandler_dev_raw::fixup_after_exec): Ditto.
- * fhandler_raw.cc (fhandler_dev_raw::fixup_after_fork): Don't
- duplicate buffer on fork to avoid memory leak.
- (fhandler_dev_raw::fixup_after_exec): New implementation equal to
- former fixup_after_fork() implementation.
- * fhandler_socket.cc (fhandler_socket::fixup_after_fork): Do
- nothing when not using Winsock2.
- (fhandler_socket::fixup_after_exec): New implementation.
- (fhandler_socket::set_close_on_exec): Never call set_inheritance().
-
-Thu Sep 20 9:55:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::set_inheritance): If available,
- use SetHandleInformation() to set inheritance.
- * wincap.cc: Set flag has_set_handle_information_on_console_handles
- appropriately.
- * wincap.h: Add flag has_set_handle_information_on_console_handles.
-
-Wed Sep 19 12:24:09 2001 Christopher Faylor <cgf@cygnus.com>
-
- * lib/getopt.c (__progname): Don't declare if not compiling for cygwin.
-
-Wed Sep 19 18:07:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * lib/getopt.c (getopt_long): Avoid compiler warning.
-
-Wed Sep 19 11:52:42 2001 Christopher Faylor <cgf@cygnus.com>
-
- * lib/getopt.c: Use __progname==__argv[0] when not compiling for cygwin.
-
- * scandir.cc (scandir): Use correct default when compar == NULL.
-
-Wed Sep 19 17:49:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::fhandler_socket): Revert
- memory allocation to use cmalloc again.
-
-Tue Sep 18 21:04:26 2001 Christopher Faylor <cgf@cygnus.com>
-
- * cygwin.din (__argv): Export.
- (__argc): Ditto.
- (__progname): Ditto.
- * include/getopt.h (getopt_long): constify arguments.
- * lib/getopt.c: Import new file from NetBSD.
-
-Tue Sep 18 18:21:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (mmap): Don't reuse anonymous memory in MAP_FIXED case.
-
-Mon Sep 17 17:29:25 2001 Christopher Faylor <cgf@cygnus.com>
-
- * include/io.h: Add access declaration.
-
-Mon Sep 17 14:04:27 2001 Christopher Faylor <cgf@cygnus.com>
-
- * syscalls.cc (rmdir): Set cwd to some other location if attempting to
- rmdir current working directory.
-
-Sun Sep 16 23:04:31 2001 Christopher Faylor <cgf@cygnus.com>
-
- * dtable.h (not_open): Assure inline.
- * fhandler.h (operator []): Make const.
-
-Sun Sep 16 23:02:57 2001 Robert Collins <rbtcollins@hotmail.com>
-
- * sync.cc (muto::~muto): Fix typo which stopped muto event handle from
- ever being closed.
-
-2001-09-16 Egor Duda <deo@logos-m.ru>
-
- * path.cc (symlink): Check arguments for validity.
- (getcwd): Ditto.
- * syscalls.cc (ftruncate): Ditto.
- * times.cc (times): Ditto.
- * uname.cc (uname): Ditto.
-
-Sat Sep 15 22:54:49 2001 Christopher Faylor <cgf@cygnus.com>
-
- * net.cc (dup_servent_ptr): Detect old Windows 95 misaligned structure
- and realign appropriately.
-
-Sat Sep 15 00:28:40 2001 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Generate libcygwin.a during the link pass rather than as
- a separate dlltool step.
- * dcrt0.cc (_dll_crt0): pppid_handle could be NULL. Don't close it if
- so.
-
-Fri Sep 14 20:48:18 2001 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (dll_crt0_1): Create vfork main storage here so that it can
- be queried in waitsig later.
- * sigproc.cc (wait_sig): Don't deliver a signal if in a vfork.
- * sigproc.h (sigframe::init): New method.
- (sigframe): Use init.
- * perthread.h: Declare main_vfork.
- * fork.cc (vfork): Deliver all signals on parent return from vfork.
-
-Fri Sep 14 10:21:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * dcrt0.cc (_dll_crt0()): Don't call wincap.init() here.
-
-Fri Sep 14 00:37:54 2001 Christopher Faylor <cgf@cygnus.com>
-
- * fork.cc (vfork): Avoid recursive vforks.
-
-Fri Sep 14 00:18:52 2001 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler.h (fhandler_pipe::is_slow): Return true only if pipes are
- reliable (i.e., not Win9x).
- * wincap.cc: Make statics NO_COPY to avoid fork overhead.
-
-Thu Sep 13 23:01:00 2001 Christopher Faylor <cgf@cygnus.com>
-
- * grp.cc (read_etc_group): Just reuse group_buf storage for subsequent
- reread of /etc/group.
- * passwd.cc (read_etc_passwd): Just reuse passwd_buf storage for
- subsequent reread of /etc/passwd.
-
-Thu Sep 13 20:46:05 2001 Christopher Faylor <cgf@cygnus.com>
-
- * cygheap.cc (dup_now): New function.
- (cygheap_setup_for_child): Accept new argument controlling whether to
- delay copying of cygheap to shared memory region.
- (cygheap_setup_for_child_cleanup): Accept new arguments controlling
- whether to copy cygheap at this point.
- * cygheap.h: Reflect above changes.
- * fork.cc (fork_parent): Break copying of cygheap into two parts when
- fork_fixup is required so that the child can see the parent's changes.
- (vfork): Do stack cleanup prior to forcing a fork error.
- * spawn.cc (spawn_guts): Ditto.
-
-Thu Sep 13 17:14:59 2001 Christopher Faylor <cgf@cygnus.com>
-
- * cygheap.cc (ccalloc): Pass correct length to creturn so that
- cygheap_max is correctly calculated.
-
-Wed Sep 12 21:06:38 2001 Christopher Faylor <cgf@cygnus.com>
-
- * sync.cc (muto::acquire): Fix while/if typo.
-
-Wed Sep 12 23:06:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * wincap.cc (wincapc::init): Simplify W2K/XP case.
-
-Wed Sep 12 23:02:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * wincap.cc (wincapc::init): Set os name to "NT" on XP, too.
-
-Wed Sep 12 19:00:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in: Build wincap.o.
- * wincap.cc: New file.
- * wincap.h: Ditto.
- * autoload.cc: Add dynamic load statement for `CreateHardLinkA'.
- * dcrt0.cc (os_being_run): Eliminated.
- (osname): Ditto.
- (iswinnt): Ditto.
- (set_os_type): Ditto.
- (dll_crt0_1): Call wincap.init() instead of set_os_type().
- (_dll_crt0): Ditto.
- * environ.cc (set_chunksize): New function.
- (parse_thing): `forkchunk' setting now invokes function `set_chunksize'.
- * fork.cc (chunksize): Eliminated. Moved to be member of wincap.
- * host_dependent.h: Removed.
- * syscalls.cc (_link): Try using `CreateHardLinkA' first, if available.
- * cygheap.cc, dcrt0.cc, delqueue.cc, dir.cc,
- environ.cc, fhandler.cc, fhandler.h, fhandler_console.cc,
- fhandler_mem.cc, fork.cc, mmap.cc, net.cc, pinfo.cc, pinfo.h,
- security.cc, syscalls.cc, sysconf.cc, syslog.cc, thread.cc,
- times.cc, tty.cc, uinfo.cc, uname.cc, winsup.h: Use new wincap
- capability check throughout.
- * winsup.h: Include wincap.h. Eliminate extern declarations of
- `os_being_run' and `iswinnt'. Eliminate `os_type" definition.
- * include/cygwin/version.h: Bump version to 1.3.4.
-
-Wed Sep 12 01:03:36 2001 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (call_signal_handler_now): Add additional guard against
- inappropriately calling signal handler.
- * syscalls.cc (_read): Reset errno if not exiting due to signal.
-
-Wed Sep 12 13:03:00 2001 Robert Collins <rbtcollins@hotmail.com>
-
- * autoload.cc (LoadDLLfuncEx): Auto load TryEnterCriticalSection - it's
- an NT only call.
- * thread.cc (pthread_cond::TimedWait): Use critical sections for NT.
- (pthread_cond::fixup_after_fork): Don't detect bad apps.
- (pthread_mutex::pthread_mutex): Use critical sections for NT.
- (pthread_mutex::~pthread_mutex): Ditto.
- (pthread_mutex::Lock): Ditto.
- (pthread_mutex::TryLock): Ditto.
- (pthread_mutex::UnLock): Ditto.
- (pthread_mutex::fixup_after_fork): Ditto. Also do not detect bad apps.
- (__pthread_mutex_trylock): Move WIN32 specific test into the class
- method.
- (__pthread_mutex_destroy): Prevent dereferencing passed pointer without
- valid address.
- * thread.h (pthread_mutex): Use critical sections for NT.
-
-Tue Sep 11 21:55:37 2001 Christopher Faylor <cgf@cygnus.com>
-
- * sigproc.h (sigframe::unregister): Return true/false whether this
- frame is capable of responding to signals.
- * exceptions.cc (sigframe::call_signal_handler): Don't call signal
- handler if it is not armed for this thread.
-
-Tue Sep 11 11:23:10 2001 Christopher Faylor <cgf@cygnus.com>
-
- * cygwin.din: Remove cygwin_getshared.
- * shared.cc: Ditto.
- * include/cygwin/version.h: Bump API minor number.
-
-Tue Sep 11 11:14:11 2001 Dmitry Timoshkov <dmitry@baikal.ru>
-
- * dtable.cc (dtable::build_fhandler): Fix incorrect test for socket.
-
-Tue Sep 11 21:22:00 2001 Robert Collins <rbtcollins@hotmail.com>
-
- * thread.cc (pthread_cond::~pthread_cond): Fix incorrect use of
- InterlockExchangePointer.
- (pthread_mutex::~pthread_mutex): Ditto.
- (semaphore::~semaphore): Ditto.
-
-Tue Sep 11 18:15:00 2001 Robert Collins <rbtcollins@hotmail.com>
-
- * dcrt0.cc (cygwin_finished_initializing): Copy _mtinterf on fork.
- * fork.cc (fork_child): Fixup thread-related structures after fork.
- * thread.cc (MTinterface::Init): Initialise the new mutex, condition
- and semaphore lists.
- (MTinterface::fixup_after_fork): Iterate through each list and fixup
- the objects.
- (pthread_cond::pthread_cond): Add this to the condition list.
- (pthread_cond::~pthread_cond): Remove this from the condition list.
- (pthread_cond::fixup_after_fork): Recreate as best we can the pre-fork
- state.
- (pthread_mutex::pthread_mutex): Add this to the mutex list.
- (pthread_mutex::~pthread_mutex): Remove this from the mutex list.
- (pthread_mutex::fixup_after_fork): Recreate as best we can the pre-fork
- state.
- (semaphore::semaphore): Store the initial value, and add this to the
- semaphore list.
- (semaphore::~semaphore): Remove this from the semaphore list.
- (semaphore::Post): Increment the current semaphore value.
- (semaphore::TryWait): Decrement the current semaphore value.
- (semaphore::Wait): Ditto.
- (semaphore::fixup_after_fork): Recreate the pre-fork state as best we
- can.
- * thread.h (pthread_mutex): New members to allow fixup_after_fork.
- (pthread_cond): Ditto.
- (semaphore): Ditto.
- (MTinterface): New list heads for tracking conds and semaphores.
-
-Sun Sep 9 22:11:27 2001 Christopher Faylor <cgf@cygnus.com>
-
- * dtable.cc (dtable::fixup_after_fork): Use SetStdHandle appropriately
- on inherited fds.
-
-Sun Sep 9 20:09:11 2001 Christopher Faylor <cgf@cygnus.com>
-
- * sigproc.cc (NZOMBIES): Reduce substantially to minimize memory use.
-
-Mon Sep 10 08:28:00 2001 Robert Collins <rbtcollins@hotmail.com>
-
- * thread.h (MT_Interface): Remove pshared mutex array. Add a
- threadsafe list for mutex tracking (for fixup after fork).
- * thread.cc (MTInterface::Init): Remove pshared mutex array.
- (pthread_mutex::pthread_mutex): Remove pshared mutex functionality.
- Fail with EINVAL on attempts to use pshared functionality.
- (__pthread_mutex_getpshared): Remove.
- (__pthread_cond_timedwait): Remove pshared mutex functionality.
- (__pthread_cond_wait): Ditto.
- (__pthread_mutex_init): Ditto.
- (__pthread_mutex_getprioceiling): Ditto.
- (__pthread_mutex_lock): Ditto.
- (__pthread_mutex_trylock): Ditto.
- (__pthread_mutex_unlock): Ditto.
- (__pthread_mutex_destroy): Ditto.
- (__pthread_mutex_setprioceiling): Ditto.
- (__pthread_mutexattr_setpshared): Ditto.
-
-Sun Sep 9 23:09:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * pwdgrp.h (pwdgrp_check::set_last_modified): Call GetFileTime()
- instead of GetFileInformationByHandle().
-
-Sun Sep 9 15:59:53 2001 Christopher Faylor <cgf@cygnus.com>
-
- * heap.h (inheap): Rewrite macro to accommodate removal of brk macros
- below.
-
-Sun Sep 9 15:02:44 2001 Christopher Faylor <cgf@cygnus.com>
-
- * cygheap.cc (cygheap_fixup_in_child): Clear cygheap->base so that heap
- is not forced to start at the same place in execed process.
- * heap.cc: Remove brk* macros for clarity throughout.
- * heap.h: Ditto.
- * shared.cc (shared_info::initialize): Move heap_chunk test into
- heap_chunk_size().
- (heap_chunk_size): Check for chunk size here. Don't go to registry if
- heap_chunk_in_mb is already set.
-
- * smallprint.c (console_printf): Add Windows 95 concessions.
-
-Sun Sep 9 13:01:06 2001 Christopher Faylor <cgf@cygnus.com>
-
- * child_info.h (PROC_MAGIC): Bump magic number.
-
-Sun Sep 9 18:36:00 2001 Corinna Vinschen <corinna@vinschen.de>
- Christopher Faylor <cgf@cygnus.com>
-
- * cygheap.cc (init_cygheap::etc_changed): New method to signal
- a change in /etc.
- * cygheap.h (struct init_cygheap): Add member `etc_changed_h'
- and method `etc_changed'.
- * grp.cc (enum grp_state): Eliminate.
- (class grp_check): Ditto.
- (group_state): Define as `class pwdgrp_check'.
- (parse_grp): Remeber path and modification time of /etc/group file.
- * passwd.cc (enum_pwd_state): Eliminate.
- (class pwd_check): Ditto.
- (passwd_state): Define as `class pwdgrp_check'.
- (read_etc_passwd): Remember path and modification time of /etc/passwd
- file.
- * pwdgrp.h: New file.
- (enum pwdgrp_state): Substitutes `pwd_state' and `grp_state'.
- (class pwdgrp_check): Substitutes `pwd_check' and `grp_check'.
-
-Sun Sep 9 14:31:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/version.h: Bump API minor version to 45 according
- to adding the gamm*_r functions.
-
-Sat Sep 8 23:32:18 2001 Christopher Faylor <cgf@cygnus.com>
-
- * fork.cc (fork_parent): Stop malloc activity while fork is in control
- of the heap.
- * sigproc.cc (NZOMBIES): Rename from ZOMBIEMAX for clarity.
- (zombies): Revert to original behavior. Allocating zombie array
- resulted in performance hit.
- * winsup.h: Declare malloc lock routines.
-
-Fri Sep 7 21:35:35 2001 Christopher Faylor <cgf@cygnus.com>
-
- * cygwin.din: Add gamm*_r function exports.
-
-Fri Sep 7 17:11:11 2001 Christopher Faylor <cgf@cygnus.com>
-
- * cygheap.h (init_cygheap): Move heap pointers here.
- * include/sys/cygwin.h (perprocess): Remove heap pointers.
- * dcrt0.cc (__cygwin_user_data): Reflect obsolete perprocess stuff.
- (_dll_crt0): Don't initialize heap pointers.
- (cygwin_dll_init): Ditto.
- (release_upto): Use heap pointers from cygheap.
- * heap.h: Ditto.
- * fork.cc (fork_parent): Ditto. Don't set heap pointers in ch.
- (fork_child): Remove obsolete sigproc_fixup_after_fork.
- * shared.cc (memory_init): Reorganize so that cygheap initialization is
- called prior to regular heap since regular heap uses cygheap now.
- * sigproc.cc (proc_subproc): Eliminate zombies allocation.
- (sigproc_init): Move zombies alloation here. Don't free up array on
- fork, just reuse it.
- (sigproc_fixup_after_fork): Eliminate.
- * sigproc.h: Ditto.
- * include/cygwin/version.h: Reflect change to perprocess structure.
-
-Fri Sep 7 10:53:34 2001 Jason Tishler <jason@tishler.net>
-
- * poll.cc (poll): Change implementation to only call select() when no
- invalid file descriptors are specified.
-
-Fri Sep 7 10:27:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * include/limits.h: Define PIPE_BUF.
- * syscalls.cc (fpathconf): Use PIPE_BUF instead of numerical constant.
- (pathconf): Ditto.
-
-Thu Sep 6 20:04:05 2001 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler_socket.cc (fhandler_socket::fhandler_socket): Ensure that
- prot_info_ptr is zeroed for later use.
-
-Thu Sep 6 14:03:49 2001 Christopher Faylor <cgf@cygnus.com>
-
- * cygheap.cc (cygheap_fixup_in_child): Don't consider a NULL bucket as
- a candidate for deletion. It is actually the end of a linked list
- chain.
-
- * exceptions.cc (open_stackdumpfile): Default to "unknown" program name
- if myself->progname hasn't been filled out yet.
-
-Thu Sep 6 01:16:44 2001 Christopher Faylor <cgf@cygnus.com>
-
- Move appropriate variables to NO_COPY segment, throughout.
-
-Thu Sep 6 00:40:35 2001 Christopher Faylor <cgf@cygnus.com>
-
- Remove initialization of static or global values to zero, throughout.
- This just needlessly grows the size of the DLL.
- * tty.cc (tty::alive): Make inuse handle non-inheriting on open, just
- for thread safety.
-
-Wed Sep 5 23:36:03 2001 Christopher Faylor <cgf@cygnus.com>
-
- * cygheap.h (init_cygheap): Move bucket array here from cygheap.cc.
- * cygheap.cc: Throughout use bucket array from cygheap.
-
- * sigproc.cc (proc_subproc): Dynamically allocate zombie buffer to save
- DLL space.
- (sigproc_fixup_after_fork): Free zombie array after a fork.
- * sigproc.h (sigproc_fixup_after_fork): Declare.
-
-2001-09-06 Egor Duda <deo@logos-m.ru>
-
- * dir.cc (mkdir): Expand buffer for security descriptor to 4K to avoid
- stack corruption.
- * fhandler.cc (fhandler_base::open): Ditto.
- * path.cc (symlink): Ditto.
-
-Wed Sep 5 21:35:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * winver.rc: Change copyright to include 2001.
-
-Wed Sep 5 12:12:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_floppy.cc (fhandler_floppy::lseek): Remove iswinnt check.
-
-Wed Sep 5 11:34:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::close): Change 2MSL value
- according to MSDN.
-
-Wed Sep 5 10:14:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (cygwin_connect): Add WSAEALREADY and WSAEINVAL handling
- for non-blocking sockets.
-
-Tue Sep 4 22:42:13 2001 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (ctrl_c_handler): Only send SIGINT when we have a
- controlling terminal and we are the head of the process group.
-
-Tue Sep 4 16:48:14 2001 Christopher Faylor <cgf@cygnus.com>
-
- * thread.cc (InterlockedExchangePointer): Don't define if it already
- exists.
-
-Tue Sep 4 22:14:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * uname.cc (uname): Eliminate os specific retrieving of x86
- processor type.
-
-2001-09-04 Kazuhiro Fujieda <fujieda@jaist.ac.jp>
-
- * fhandler_console.cc (fhandler_console::char_command): Save the cursor
- position relative to the top of the window.
- * fhandler_cc (fhandler_console::write): Ditto.
-
-Mon Sep 3 21:06:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * dir.cc (opendir): Write version information to __d_dirent->d_version.
-
-Mon Sep 3 18:34:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din: Add `dirfd'.
- * dir.cc (dirfd): New function.
- (opendir): Open a directory file descriptor and save it in
- __d_dirent->d_fd.
- (closedir): Close directory file descriptor.
- * include/cygwin/version.h: Bump API minor version to 44.
-
-Sun Sep 2 22:09:31 2001 Christopher Faylor <cgf@cygnus.com>
-
- * child_info.h: Modify magic number.
- * dcrt0.cc (_cygwin_testing): Define.
- (_dll_crt0): Set _cygwin_testing if CYGWIN_TESTING environment variable
- exists. Don't issue "conflicting versions" error if _cygwin_testing is
- true.
- * shared.cc (shared_name): Use _cygwin_testing global rather than
- testing the environment.
- * syscalls.cc (_write): Remove debugging info.
-
-Sat Sep 1 01:37:13 2001 Christopher Faylor <cgf@cygnus.com>
-
- * tty.cc (tty::create_inuse): Eliminate unneeded argument.
- * tty.h: Reflect above change.
- * fhandler_tty.cc: Reflect argument reduction in tty::create_inuse,
- throughout. Always make inuse inheritable.
-
-Sat Sep 1 01:10:07 2001 Christopher Faylor <cgf@cygnus.com>
-
- * debug.cc (mark_closed): Rename from debug_mark_closed and make
- static.
- (setclexec_pid): New function for marking saved handle as
- close-on-exec.
- (delete_handle): New function.
- (debug_fixup_after_fork): New function.
- * debug.h: Declare new functions, remove obsolete ones.
- * fork.cc (debug_fixup_after_fork): Call to cleanup close-on-exec
- handles.
-
- * fhandler.cc (fhandler_disk_file::close): Minor reorg.
- (fhandler_base::set_inheritance): Set flag appropriately for debugging
- when close-on-exec so forked process can delete closed handles.
- * tty.h (open_output_mutex): Eliminate unneeded argument.
- (open_input_mutex): Ditto.
- * fhandler_tty.cc (fhandler_tty_slave::open): reflect open_*_mutex
- argument changes.
- * fhandler.h (fhandler_socket): Make saw_shutdown_* functions type
- bool.
- * tty.cc (tty::get_event): Eliminate unneeded argument.
- (tty::common_init): Reflect change to get_event. Events should always
- be inherited.
-
-Fri Aug 31 21:39:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (create_token): Change initialization of `exp' to comply
- with new LARGE_INTEGER definition in winnt.h.
-
-Fri Aug 31 13:58:51 2001 Christopher Faylor <cgf@cygnus.com>
-
- * cygwin.sc: Revert to previous NO_COPY behavior.
- * winsup.h: Ditto.
- * sigproc.cc: Ditto.
- * autoload.cc: Ditto.
-
-Fri Aug 31 00:56:26 2001 Christopher Faylor <cgf@cygnus.com>
-
- * cygwin.sc: New file -- linker script for building cygwin DLL.
- * Makefile.in: Use linker script to control location of cygheap.
- * cygheap.cc (buckets): Make static.
- (init_cheap): Remove special iswinnt handling. Allocate cygheap at a
- fixed location. Display more info when allocation fails.
- (cygheap_fixup_in_child): Try harder to move cygheap to correct
- location. Display more info when allocation fails.
- * fhandler.h (fhandler_socket): Add macros for tracking socket shutdown
- state.
- * net.cc (cygwin_shutdown): Set appropriate shutdown value for future
- use.
- * select.cc (select_stuff::cleanup): New method.
- (cygwin_select): Call cleanup explicitly to avoid a race.
- (select_stuff:~select_stuff): Call cleanup chain via cleanup method.
- (fhandler_socket::select_read): Set *_ready when shutdown has been
- called on the socket.
- (fhandler_socket::select_write): Ditto.
- (fhandler_socket::select_except): Ditto.
-
- * winsup.h: Move NO_COPY to "COMMON" section.
- * autoload.cc (wsock_started): Avoid initializing NO_COPY value.
- * sigproc.cc: Remove initialization from NO_COPY variables.
- (sigproc_init): Initialize sig_loop_wait here, rather than via
- initialization.
- (subproc_init): Initialize proc_loop_wait here, rather than via
- initialization.
-
-Thu Aug 30 10:19:00 2001 Christopher Faylor <cgf@cygnus.com>
-
- * select.cc (select_read): Add setting read_ready flag.
- (select_write): Add setting write_ready flag.
-
-Wed Aug 29 00:40:42 2001 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (path_conv::check): Avoid splitting off leading '/' in path
- component when building a symlink.
-
-Wed Aug 29 0:45:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * resource.cc (getrlimit): Return actual values on RLIMIT_STACK.
-
-Tue Aug 28 16:37:17 2001 Christopher Faylor <cgf@cygnus.com>
-
- * dir.cc (rmdir): Report ENOENT when file doesn't exist rather than
- ENOTDIR.
-
-Mon Aug 27 11:58:19 2001 Christopher Faylor <cgf@cygnus.com>
-
- * select.cc (cygwin_select): Ensure that arguments are zeroed on
- timeout.
- (select_stuff::wait): Ditto.
-
-2001-08-24 Kazuhiro Fujieda <fujieda@jaist.ac.jp>
-
- * syscalls.cc (check_tty_fds): New function. Check whether there is a
- fd referring to pty slave.
- (setsid): Don't detach console if the process has a pty slave.
-
-Fri Aug 24 8:54:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (free_addr_list): Add define for symmetry.
- (free_hostent_ptr): Use free_addr_list to free h_addr_list element.
-
-Thu Aug 23 16:00:09 2001 Jason Tishler <jason@tishler.net>
-
- * net.cc (dup_addr_list): New static function.
- (dup_hostent_ptr): Use dup_addr_list instead of dup_char_list in order
- to handle embedded null characters.
-
-Wed Aug 22 22:23:14 2001 Christopher Faylor <cgf@cygnus.com>
-
- * dtable.cc (dtable::dup2): Allow extension of fd table by dup2.
- * syscalls.cc: Minor code cleanup.
- (fpathconf): Check for bad fd before doing anything else.
- * termios.cc (tcsetattr): Don't convert to new termios if bad fd.
- (tcgetattr): Minor debugging tweak.
-
-Wed Aug 22 23:41:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (cygwin_inet_ntoa): Rearrange previous patch to use
- thread local buffer space when compiled thread safe.
- (cygwin_getprotobyname): Ditto.
- (cygwin_getprotobynumber): Ditto.
- (cygwin_getservbyname): Ditto.
- (cygwin_getservbyport): Ditto.
- (cygwin_gethostbyname): Ditto.
- (cygwin_gethostbyaddr): Ditto. Move near to cygwin_gethostbyname.
- * thread.h (struct _winsup_t): Add pointers for above used buffer space.
- * passwd.cc (getpwduid): Remove initializing passwd.
- (setpwent): Ditto.
- (endpwent): Ditto.
- (setpassent): Ditto.
-
-Wed Aug 22 13:41:09 2001 Christopher Faylor <cgf@cygnus.com>
-
- * smallprint.c (console_printf): New function.
- * dcrt0.cc (dll_crt0_1): Use console_printf for debugging output.
- * debug.cc (debug_mark_closed): New function.
- (close_handle): Use debug_mark_closed.
- * debug.h: Declare new functions.
- * dtable.cc (dtable::build_fhandler): Remove unneeded extern.
- * spawn.cc: Cosmetic changes.
- * winsup.h: Define NO_COPY for C files, too. Declare a global.
-
-Wed Aug 22 17:31:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (free_char_list): New static function.
- (dup_char_list): Ditto.
- (free_protoent_ptr): Ditto.
- (dup_protoent_ptr): Ditto.
- (free_servent_ptr): Ditto.
- (dup_servent_ptr): Ditto.
- (free_hostent_ptr): Ditto.
- (dup_hostent_ptr): Ditto.
- (cygwin_inet_ntoa): Use local static buffer to allow propagating of
- the result to child processes.
- (cygwin_getprotobyname): Ditto.
- (cygwin_getprotobynumber): Ditto.
- (cygwin_getservbyname): Ditto.
- (cygwin_getservbyport): Ditto.
- (cygwin_gethostbyname): Ditto.
- (cygwin_gethostbyaddr): Ditto.
-
-Mon Aug 20 11:56:19 2001 Christopher Faylor <cgf@cygnus.com>
-
- * cygheap.cc (init_cheap): Allocate cygheap in shared memory for Windows NT.
-
-Thu Aug 16 09:38:59 2001 Jason Tishler <jason@tishler.net>
-
- * fhandler_socket.cc (fhandler_socket::create_secret_event): Relax
- security of secret_event so AF_UNIX socket clients can connect to
- servers even if running under a different user account.
- (fhandler_socket::check_peer_secret_event): Ditto.
-
-Thu Aug 16 16:26:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * resource.cc (getrlimit): Return getdtablesize () as current limit
- on RLIMIT_NOFILE.
- * syscalls.cc (getdtablesize): Return OPEN_MAX if current dtable size
- is less than OPEN_MAX, the current dtable size otherwise.
- * sysconf.cc (sysconf): Return getdtablesize () on _SC_OPEN_MAX.
-
-Thu Aug 16 16:17:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * resource.cc (getrlimit): Return OPEN_MAX as current limit
- on RLIMIT_NOFILE.
- * syscalls.cc (getdtablesize): Return OPEN_MAX.
- * sysconf.cc (sysconf): Return OPEN_MAX on _SC_OPEN_MAX.
- * include/limits.h (OPEN_MAX): Define as 256.
-
-Wed Aug 15 12:43:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * times.cc (utimes): Revert previous change. Just open the
- file using FILE_WRITE_ATTRIBUTES instead of GENERIC_WRITE
- on NT/W2K.
-
-Wed Aug 15 12:18:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (set_nt_attribute): Return always -1 in case of
- a failure.
- * times.cc (utimes): On NTFS with ntsec ON, change the file's
- security descriptor temporarily to acquire write access if
- opening the file failed.
-
-Wed Aug 15 9:42:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::is_nonblocking): New method.
- (fhandler_base::set_nonblocking): Ditto.
- * fhandler.h (fhandler_base): Declare new methods `is_nonblocking' and
- `set_nonblocking'.
- * fhandler_socket.cc (fhandler_socket::ioctl): Use `set_nonblocking'.
- * fhandler_tty.cc (fhandler_pty_master::process_slave_output):
- Use `is_nonblocking'.
- (fhandler_tty_slave::read): Ditto.
- (fhandler_tty_slave::ioctl): Use `set_nonblocking'.
- (fhandler_pty_master::ioctl): Ditto.
- * net.cc (cygwin_sendto): Fallback to winsock 1 functionality
- in case of nonblocking IO.
- (cygwin_recvfrom): Ditto.
- (cygwin_recv): Ditto.
- (cygwin_send): Ditto.
- * syscalls.cc (_read): Use `is_nonblocking'.
-
-Tue Aug 14 11:05:26 2001 Christopher Faylor <cgf@cygnus.com>
-
- * include/cygwin/version.h: Bump API version.
-
-2001-08-14 Egor Duda <deo@logos-m.ru>
-
- * spawn.cc (spawn_guts): Enable appropriate privilege before
- loading user's registry hive.
-
-Mon Aug 13 22:34:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::fcntl): Use new O_NONBLOCK_MASK define.
- * fhandler.h: Move definitions of O_NOSYMLINK, O_DIROPEN and
- OLD_O_NDELAY from winsup.h to here. Add O_NONBLOCK_MASK define.
- * fhandler_socket.cc (fhandler_socket::close): Add hack to allow
- a graceful shutdown even if shutdown() hasn't been called by the
- application. Add debug output.
- (fhandler_socket::ioctl): Set fhandler's NONBLOCK flag according
- to FIONBIO setting.
- (fhandler_socket::fcntl): Use new O_NONBLOCK_MASK define. Actually
- set `request' before using it.
- * fhandler_tty.cc: Use new O_NONBLOCK_MASK define throughout.
- (fhandler_tty_slave::ioctl): Set fhandler's NONBLOCK flag according
- to FIONBIO setting.
- (fhandler_pty_master::ioctl): Ditto.
- * net.cc (wsock_event::prepare): Compare WSACreateEvent return code
- with `WSA_INVALID_EVENT' according to MSDN.
- * syscalls.cc (_read): Use new O_NONBLOCK_MASK define.
-
-Wed Aug 8 15:24:59 2001 Christopher Faylor <cgf@cygnus.com>
-
- * include/wchar.h: Define __need_wint_t.
-
-Wed Aug 8 11:46:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (alloc_sd): Revert to setting inheritance attribute for
- permissions given to directories. Never set inheritance on NULL ACE.
-
-Tue Aug 7 18:11:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (alloc_sd): Don't set FILE_DELETE_CHILD for group
- if S_ISVTX attribute is given.
- * dir.cc (mkdir): Allow immediate setting of S_ISUID, S_ISGID and
- S_ISVTX attribute.
- * syscalls.cc (_open): Ditto.
-
-Tue Aug 7 16:24:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * dir.cc (mkdir): Set security attributes correctly for
- CreateDirectoryA () call if ntsec is on. Don't call
- set_file_attributes () then.
- * fhandler.cc (fhandler_base::open): Ditto for CreateFileA () call.
- * path.cc (symlink): Ditto.
- * security.cc (set_security_attribute): New function.
- * security.h: Add declaration for `allow_ntea' and
- `set_security_attribute'.
-
-Tue Aug 7 10:54:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * grp.cc (class grp_check): New class. Make `group_state'
- a member of class grp_check.
- (read_etc_group): Free former allocated memory on reread.
- * passwd.cc (class pwd_check): New class Make `passwd_state'
- a member of class pwd_check.
- (read_etc_passwd): Free former allocated memory on reread.
-
-Tue Aug 7 01:13:58 2001 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler_console.cc (get_tty_stuff): Don't initialize shared memory
- console area if it is already initialized.
-
- * fhandler_termios.cc (fhandler_termios::tcsetpgrp): Augment debugging
- info.
-
-Mon Aug 6 19:58:43 2001 Christopher Faylor <cgf@cygnus.com>
-
- * cygheap.cc (cygheap_root::set): Avoid treating '/' specially.
-
- * fhandler.cc (fhandler_base::fcntl): Only set specific O_NDELAY style
- flag passed in from application.
- * fhandler_socket.cc (fhandler_socket::fcntl): Ditto.
- * fhandler.h: Set constant for future use.
- * winsup.h: Define OLD_O_NDELAY only for old programs.
- * include/cygwin/version.h: Define
- CYGWIN_VERSION_CHECK_FOR_OLD_O_NONBLOCK.
-
-Sat Aug 4 16:52:03 2001 Christopher Faylor <cgf@cygnus.com>
-
- Throughout, change check for running under Windows NT to 'iswinnt'.
- * dcrt0.cc (set_os_type): Set 'iswinnt' appropriately.
- * cygheap.cc (init_cheap): Revert to using VirtualAlloc for allocating
- cygheap.
- (cygheap_setup_for_child_cleanup): New function. Standard function to
- call after calling CreateProcess to cleanup cygheap info passed to
- child.
- (cygheap_fixup_in_child): Copy cygheap from shared memory into
- allocated space under Windows 9x or if can't relocate shared space
- under NT.
- * cygheap.h: Declare new function.
- * spawn.cc (spawn_guts): Use cygheap_fixup_in_child.
- * fork.cc (fork_parent): Ditto.
- * winsup.h: Declare iswinnt.
-
-2001-08-04 Egor Duda <deo@logos-m.ru>
-
- * dtable.cc (dtable::release): Avoid messing with console when
- closing socket.
-
-Fri Aug 3 14:02:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (cygwin_accept): Allow NULL peer and len parameters.
- * include/cygwin/socket.h: Define socklen_t as int.
-
-Fri Aug 3 13:04:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (fchdir): Set the fhandler's path to absolute value to ensure
- changing to the correct directory even if the fhandler originally
- points to a relative path.
-
-Thu Aug 2 17:59:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (set_file_attribute): Clean up. Don't call
- `set_nt_attribute' when ntsec isn't set.
-
-Sat Jul 28 22:30:55 2001 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (alloc_stack_hard_way): Make half-hearted attempt to deal
- with growing stack under Windows 95.
-
-Fri Jul 27 12:36:07 2001 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Add install-lib and install-headers.
-
-Fri Jul 27 12:28:12 2001 Christopher Faylor <cgf@cygnus.com>
-
- * cygwin.din: Export sys_errlist, sys_nerr.
- * include/cygwin/version.h: Bump minor version number.
-
-Fri 27 Jul 2001 10:29:00 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (get_user_primary_group): Fix compiler warning.
- (alloc_sd): Add DELETE permission for user when S_IWUSR is given.
-
-Thu Jul 26 16:43:39 2001 Pieter de Visser <pieterdv@knoware.nl>
-
- * thread.cc (__pthread_equal): Invert return value so that true is
- returned when threads are equal.
-
-Thu Jul 26 15:50:38 2001 Charles Wilson <cwilson@ece.gatech.edu>
- Christopher Faylor <cgf@cygnus.com>
-
- * cygwin.din: Export __signgam.
- * include/cygwin/version.h: Bump minor version number.
-
-Thu Jul 26 15:19:50 2001 Christopher Faylor <cgf@cygnus.com>
-
- Throughout, reorganize header file inclusion to put security.h prior to
- fhandler.h.
- * fhandler.h (fhandler_base::get_inheritance): New method.
- * fhandler_socket.cc (fhandler_socket::create_secret_event): Use proper
- close-on-exec inheritance when creating.
- (fhandler_socket::check_peer_secret_event): Create handle as
- non-inheritable.
-
-2001-07-25 Kazuhiro Fujieda <fujieda@jaist.ac.jp>
-
- * syscalls.cc (setsid): Detach process from its console if the current
- controlling tty is the console and already closed.
- * dtable.h (class dtable): Add members to count descriptors referring
- to the console.
- * dtable.cc (dtable::dec_console_fds): New function to detach process
- from its console.
- (dtable::release): Decrement the counter of console descriptors.
- (dtable::build_fhandler): Increment it.
- * exception.cc (ctrl_c_handler): Send SIGTERM to myself when catch
- CTRL_SHUTDOWN_EVENT.
-
-Tue 24 Jul 2001 02:28:00 PM Trevor Forbes <t4bs@hotmail.com>
-
- * thread.cc (verifyable_object_isvalid): Don't validate
- PTHREAD_MUTEX_INITIALIZER pointer as it will cause an exception
- in IsBadWritePtr() when running GDB.
-
-Wed 25 Jul 2001 23:46:00 Corinna Vinschen <corinna@vinschen.de>
-
- * localtime.c: Changed whole file to become C++ clean. Rename to
- localtime.cc.
- * localtime.cc (tzload): Preserve errno.
-
-Fri 20 Jul 2001 11:15:50 PM EDT Christopher Faylor <cgf@cygnus.com>
-
- * cygheap.cc (cygheap_fixup_in_child): Attempt Win95 workaround.
- * dtable.cc (dtable::dup_worker): Add debugging output.
- (dtable::vfork_child_dup): Correctly set close_on_exec.
- * fhandler.cc (fhandler_base::fork_fixup): Don't mess with handle if
- there is no need to get it from the parent.
- * fhandler_tty.cc (fhandler_tty_common::close): Add debugging output.
-
-Fri 20 Jul 2001 09:15:00 Mark Bradshaw <bradshaw@staff.crosswalk.com>
-
- * dir.cc (readdir): Protect FindNextFileA against INVALID_HANDLE_VALUE.
-
-Wed 18 Jul 2001 01:00:47 PM EDT Christopher Faylor <cgf@cygnus.com>
-
- * cygheap.cc (_cmalloc): Use correct constants for size calculation.
- * dcrt0.cc (dll_crt0_1): Move uid initialization earlier.
- * fork.cc (fork_parent): Move cygheap_setup_in_child to just prior to
- CreateProcess so that all contents of cygheap are copied.
- * spawn.cc (spawn_guts): Ditto.
-
-Wed 18 Jul 2001 12:54:17 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (get_user_groups): Call Net function with NULL server
- name under specific error conditions.
- (is_group_member): Ditto.
- (get_user_local_groups): Ditto.
- (get_user_primary_group): Ditto.
-
-Wed 18 Jul 2001 11:56:00 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (_unlink): Explicitly check for non-existant file.
-
-Tue 17 Jul 2001 10:19:00 Corinna Vinschen <corinna@vinschen.de>
-
- * delqueue.h: Remove obsolete file.
-
-Mon 16 Jul 2001 10:47:17 PM EDT Christopher Faylor <cgf@cygnus.com>
-
- * child_info.h: Bump magic number.
- (class child_info): Add an element.
- * cygheap.cc (init_cheap): Allocate cygwin heap in shared memory area.
- (cygheap_fixup_in_child): Map cygwin heap, passed from parent via
- shared memory into correct address.
- (cygheap_setup_for_child): New function.
- * cygheap.h: Declare new functions.
- * dcrt0.cc (dll_crt0_1): Accommodate new cygheap_fixup_in_child
- arguments. Avoid protecting subproc_ready unless it is spawn/nowait.
- * fork.cc (fork_parent): Use new cygheap_setup_for_child function to
- setup cygwin heap info. Close passed cygheap shared memory handle.
- * spawn.cc (spawn_guts): Ditto. Also, reorganize to avoid
- synchronization between parent and child in non-P_OVERLAY case.
- * sigproc.cc (wait_sig): Only signal subproc_ready when execing.
-
-Mon 16 Jul 2001 15:21:00 Corinna Vinschen <corinna@vinschen.de>
-
- * grp.cc: Add missing Copyright date 2001.
-
-Mon 16 Jul 2001 00:11:00 Corinna Vinschen <corinna@vinschen.de>
-
- Change well_known_admin_sid to well_known_admins_sid throughout.
- * sec_acl.cc (setacl): Never set DELETE permission. Set
- FILE_DELETE_CHILD only on readable and executable directories.
- * sec_helper.cc: Add constructor for `well_known_null_sid'.
- * security.cc (get_nt_attribute): Set S_ISVTX for directories if
- FILE_WRITE_DATA and FILE_EXECUTE but not FILE_DELETE_CHILD is set.
- Add evaluation of S_ISVTX, S_ISGID and S_ISUID from NULL ACE.
- (alloc_sd): Never set DELETE permission. Set FILE_DELETE_CHILD
- only on readable and executable directories.
- Add creation of NULL ACE for S_ISVTX, S_ISGID and S_ISUID permissions.
- * security.h: Add extern declaration for `well_known_null_sid'.
-
-Fri 13 Jul 2001 08:08:49 PM EDT Christopher Faylor <cgf@cygnus.com>
-
- * syscalls.cc (stat_worker): Simplify previous change.
-
-Fri Jul 13 13:13:09 2001 Christopher Faylor <cgf@cygnus.com>
-
- * syscalls.cc (_unlink): Correct (?) logic which determines when
- to report an access violation and when to queue file for eventual
- deletion.
- (stat_worker): Check for invalid buf argument.
-
-Tue Jul 10 23:01:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (fhandler_disk_file::mmap): Try to open file mappings
- by a unified name when running under 9x/ME. If that failes, create
- the file mapping using the unified name.
-
-Mon Jul 9 10:43:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * uinfo.cc (internal_getlogin): Add pointer check.
-
-Mon Jul 9 10:05:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (alloc_sd): Don't set inheritance attribute for
- permissions given to directories.
-
-Thu Jun 28 22:19:08 2001 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler_dsp.cc (fhandler_dev_dsp::ioctl): Return 0 for success.
-
-Wed Jun 27 22:19:07 2001 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (path_conv::check): Add signal protection here since
- retrieving info about remote shares can take some time.
-
-Wed Jun 27 23:30:00 2001 Robert Collins <rbtcollins@hotmail.com>
- Christopher Faylor <cgf@cygnus.com>
-
- Change check_null_empty_path* to check_null_empty_str* throughout.
- * path.h (check_null_empty_str_errno): Convert to a function prototype.
- * path.cc (check_null_empty_str): Move to miscfuncs.cc.
- * miscfuncs.cc (check_null_empty_str_errno): New function.
- (__check_null_invalid_struct): Ditto.
- (__check_null_invalid_struct_errno): Ditto.
- (check_null_empty_str): Change from VirtualQuery to IsBadWritePtr.
- * thread.cc (check_valid_pointer): Ditto.
- * resource.cc (getrlimit): Use check_null_invalid_struct macro for
- checking validity of pointer.
- (setrlimit): Ditto.
-
-Tue Jun 26 16:59:16 2001 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler.cc (fhandler_disk_file::fstat): Don't rely on exactly 3
- characters being read for executable test since we could be checking
- for less than that.
- * syscalls.cc (stat_worker): Try opening the file the "correct" way
- first so that #! processing can potentially happen. If that fails,
- then use "query open" method.
-
- * spawn.cc (spawn_guts): Delay processing of signal until after we've
- notified parent about reparenting.
-
-Tue Jun 26 10:47:24 2001 Christopher Faylor <cgf@cygnus.com>
-
- * mmap.cc: Clean up *ResourceLock calls throughout.
-
-Tue Jun 26 22:10:00 2001 Robert Collins rbtcollins@hotmail.com
-
- * thread.cc (pthread_cond::TimedWait): Check for WAIT_TIMEOUT as well
- as WAIT_ABANDONED.
- (__pthread_cond_timedwait): Calculate a relative wait from the abstime
- parameter.
-
-Sun Jun 24 17:38:19 2001 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (interrupt_setup): Move actions from setup_handler to
- here.
- (setup_handler): Move actions after a successful interrupt to
- interrupt_setup.
- * fork.cc (vfork): Augment debugging output.
- * sigproc.cc (proc_subproc): Ditto.
- * spawn.cc (spawn_guts): Ditto. Correctly fill out progname when spawn
- NO_WAIT. Call signal handler when a signal arrives.
- * sigproc.h: Declare a function.
-
-Fri Jun 22 16:50:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h class fhandler_socket): Declare new method
- `set_close_on_exec'.
- * fhandler_socket.cc (fhandler_socket::set_close_on_exec):
- New method.
-
-Fri Jun 22 16:12:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_tape.cc (fhandler_dev_tape::tape_erase): Set size
- parameter to value expected by GetTapeParameters().
-
-Thu Jun 21 22:01:39 2001 Marius Gedminas <mgedmin@delfi.lt>
-
- * fhandler_console.cc (fhandler_console::read): Detect AltGr more
- robustly on WinNT.
-
-2001-06-22 Robert Collins <rbbtcollins@hotmail.com>
-
- * thread.cc (__pthread_cond_timedwait): Lock the waiting mutex before
- the condition protect mutex to avoid deadlocking. (Found by Greg Smith).
- (__pthread_cond_wait): Ditto.
-
-2001-06-30 Egor Duda <deo@logos-m.ru>
-
- * fhandler.cc (fhandler_base::open): Work around windows bug when
- CreateFile() with dwDesiredAccess == 0 called on remote share returns
- valid handle even if file doesn't exist.
-
-2001-06-20 Egor Duda <deo@logos-m.ru>
-
- * fhandler_socket.cc (fhandler_socket::signal_secret_event): New
- function.
- * fhandler.h: Declare it.
- * fhandler_socket.cc (fhandler_socket::create_secret_event): Don't
- signal secret event immediately.
- (fhandler_socket::check_peer_secret_event): Do it after peer event
- was opened.
- * net.cc (cygwin_connect): Or if socket is non-blocking.
- (cygwin_accept): Ditto.
-
-Mon Jun 18 17:09:25 2001 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler_tty.cc (fhandler_tty_slave::init): Revert 2001-06-16 change.
-
- * fork.cc (fork_copy): Print more debugging info.
- (fork_parent): Change order of arguments to accomdate buggy gcc.
- (fork): Ditto.
-
-Sun Jun 17 18:54:46 2001 Christopher Faylor <cgf@cygnus.com>
-
- * syscalls.cc (_unlink): Reorganize to try harder to delete file with
- DeleteFile and to recover more gracefully if FILE_FLAG_DELETE_ON_CLOSE
- doesn't work properly.
-
-Sat Jun 16 13:06:49 2001 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (sig_handle_tty_stop): Reset PID_STOPPED if not
- actually stopping.
- * fhandler_console.cc (fhandler_console::fixup_after_fork): Don't set
- controlling terminal if just inheriting a handle.
- (fhandler_console::fixup_after_exec): Ditto.
- * fhandler_tty.cc (fhandler_tty_slave::init): Ditto.
- * signal.cc (kill_worker): Set appropriate errno if proc_exists
- determines that process does not really exist.
-
-Fri Jun 15 14:34:19 2001 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (path_conv::check): Deal more robustly with foo/ behavior.
-
-Fri Jun 15 11:15:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_tape.cc (fhandler_dev_tape::tape_status): Set size
- parameter to value expected by GetTapeParameters().
-
-Thu Jun 14 20:19:46 2001 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler.cc (fhandler_disk_file::fstat): Properly set executable bits
- for directory when !ntsec && !ntea. Also move common code prior to
- call to get_attributes.
-
-Fri June 15 09:25:00 Robert Collins <rbtcollins@hotmail.com>
-
- * thread.cc (pthread_cond::Signal): Release the condition access
- variable correctly.
-
-2001-06-14 Egor Duda <deo@logos-m.ru>
-
- * fhandler.cc (fhandler_base::open): Set win32 access flags to 0, when
- requested.
- * fhandler.h: New status flag FH_QUERYOPEN.
- (fhandler::get_query_open): New function.
- (fhandler::set_query_open): Ditto.
- * syscalls.cc (stat_worker): Request query-only open mode.
-
-2001-06-12 Egor Duda <deo@logos-m.ru>
-
- * environ.cc (set_file_api_mode): New function. Move setting
- of file APIs mode (OEM/ANSI) here.
- (codepage_init): From here.
- * winsup.h (set_file_api_mode): Declare it.
- * fork.cc (fork_child): Set file APIs mode in forkee.
-
-Mon Jun 11 14:19:49 2001 Christopher Faylor <cgf@cygnus.com>
-
- * pinfo.cc: Use autoloaded ToolHelp functions throughout for Win9x.
- * autoload.cc: Autoload ToolHelp functions.
-
- * sigproc.cc (proc_subproc): Incorporate SIGCHLD == SIG_IGN special
- handling of zombie processes. Ensure that zombie processes which are
- at the end of the zombie array are properly cleaned up.
-
-Mon Jun 11 11:18:56 2001 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (chdir): Fix call to path_conv constructor so that it REALLY
- doesn't check for the null/non-empty path.
-
-Sun Jun 10 23:34:09 2001 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (path_conv::update_fs_info): Don't consider remote drives to
- be NTFS. Set root_dir before invoking GetDriveType (from Kazuhiro
- Fujieda <fujieda@jaist.ac.jp>). Eliminate extra checks for rootdir.
-
-Sun Jun 10 20:19:47 2001 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (chdir): Pre-check path for validity before eating trailing
- space. Then, ensure that path_conv doesn't check the path for validity
- again.
-
-Sun Jun 10 12:56:00 2001 Christopher Faylor <cgf@redhat.com>
-
- * exceptions.cc (sigdelayed): Ensure that signal is cleared as
- the last operation or suffer races.
- * sigproc.cc (proc_subproc): Deal with zombie array overflow.
-
-Sun Jun 10 11:56:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din: Add fchdir symbols.
- * path.cc (chdir): Guard against invalid parameter.
- (fchdir): New function.
- * include/cygwin/version.h: Bump API minor version to 40.
- * uinfo.cc (internal_getlogin): Remove unused variable.
-
-Sat Jun 9 23:20:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (seteuid): Set environment variables USERNAME and
- USERDOMAIN before impersonation to workaround a LookupAccountSid()
- misbehaviour.
- * uinfo.cc (internal_getlogin): Revert most of the previous change.
- Don't set environment variables USERNAME and USERDOMAIN. That's
- the job of seteuid() now. Try to get logon server from Lsa
- only if logon server isn't already known.
-
-Thu Jun 7 15:54:32 2001 Robert Collins <rbtcollins@hotmail.com>
-
- * thread.cc (pthread_cond::Broadcast): Don't print error messages on
- invalid mutexs - user programs are allowed to call
- pthread_cond_broadcast like that.
- (__pthread_cond_timedwait): Initialise themutex properly.
- (__pthread_cond_wait): Initialise themutex properly.
-
-Tue Jun 5 19:56:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_console.cc (fhandler_console::dup): Allocate space for
- savebuf on Cygwin heap.
- (fhandler_console::char_command): Ditto. Use correct values for size.
-
-2001-06-05 Egor Duda <deo@logos-m.ru>
-
- * security.h (NTWriteEA): Change prototype.
- * ntea.cc (NTReadEA): Don't check for global ntea setting, now
- it's caller responsibility.
- (NTWriteEA): Ditto.
- * security.cc (get_file_attribute): Read attribute from EA only
- if 'ntea' is enabled.
- (set_file_attribute): Ditto.
- * path.h: (class path_conv): Add members to store file system
- information.
- (path_conv::get_drive_type): New function.
- * syscalls.cc (stat_worker): Use it.
- * path.cc (path_conv::update_fs_info): New functions.
- (path_conv::check): Get file system information from device where
- file resides. On NTFS, try to read symlink contents from EA.
- (get_symlink_ea): New function.
- (set_symlink_ea): Ditto.
- (symlink): Store symlink in extended attribute, if possible.
-
-Tue Jun 5 11:18:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_disk_file::fstat): Always reset file position
- to original value after checking for executable magic.
-
-Mon Jun 4 16:21:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.h (cygheap_user::cygheap_user): Initialize token to
- INVALID_HANDLE_VALUE.
- * uinfo.cc (uinfo_init): Close token handle if needed.
-
-Sun Jun 3 20:52:13 2001 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (normalize_posix_path): Revert .. check removed by previous
- changes.
- * cygheap.h: Temporarily declare path_prefix_p here.
-
-Mon Jun 4 0:14:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (wsock_event): Add destructor.
-
-Sun Jun 3 09:49:55 2001 Robert Collins <rbtcollins@hotmail.com>
-
- * dlfcn.cc (dlclose): Do not call FreeLibrary if the symbol to close
- was obtained by dlopen(NULL,...).
-
-Sat Jun 2 23:11:52 2001 Christopher Faylor <cgf@cygnus.com>
-
- * syscalls.cc (sleep): Try to be a little more accomodating of signal
- arrival. Ensure that the signal handler is called.
-
-Sat Jun 2 14:07:28 2001 Christopher Faylor <cgf@cygnus.com>
-
- * cygheap.cc (cygheap_root::cygheap_root): Remove constructor.
- (cygheap_root::~cygheap_root): Remove destructor.
- (cygheap_root::operator =): Remove.
- (cygheap_root::set): New method.
- * cygheap.h (cygheap_root): Reflect above changes. Store root info in
- mount-like structure.
- (cygheap_root:posix_ok): New method.
- (cygheap_root::ischroot_native): Ditto.
- (cygheap_root::unchroot): Ditto.
- (cygheap_root::exists): Ditto.
- (cygheap_root::posix_length): Ditto.
- (cygheap_root::posix_path): Ditto.
- (cygheap_root::native_length): Ditto.
- (cygheap_root::native_path): Ditto.
- * dir.cc (opendir): Remove special chroot test.
- * path.cc (path_prefix_p): Remove front end.
- (normalize_posix_path): Reorganize chroot tests to accommodate new
- convention of allowing paths using posix chroot prefix.
- (path_conv::check): Pass a "already ran normalize" option to
- conv_to_win32_path. Return if there is an error from this function.
- (mount_info::conv_to_win32_path): Add extra argument. Don't call
- normalize_posix_path if caller has already done so. Substitute chroot
- setting, if any, for root translation. Add chroot checking to final
- output step.
- * shared_info (mount_info): Accommodate additional argument to
- conv_to_win32_path.
- * syscalls.cc (chroot): Store both normalized posix path and native
- path in chroot.
-
-Fri Jun 1 10:57:19 2001 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (chdir): Really make sure that isspace gets only an unsigned
- char.
-
-Fri Jun 1 13:45:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (_rename): Handle the case that `foo' is renamed to
- `bar' while `bar.lnk' is an existing shortcut-symlink.
-
-Thu May 31 15:57:57 2001 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler.cc (fhandler_disk_file::fstat): Avoid clearing S_IFMT bits
- since we've already pre-cleared everything anyway.
-
-Wed May 30 23:51:32 2001 Earnie Boyd <earnie_boyd@yahoo.com>
-
- * path.cc (chdir): Always send unsigned chars to isspace since newlib's
- isspace doesn't deal well with "negative" chars.
-
-Wed May 30 23:51:32 2001 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler.cc (fhandler_disk_file::open): Propagate remote status of
- file garnered from path_conv. Move #! checking to fstat.
- (fhandler_disk_file::fstat): Reorganize st_mode setting to eliminate
- duplication. Move check for #! here from fhandler::open.
-
- * fhandler.h (fhandler_base::isremote): New method.
- (fhandler_base::set_isremote): Ditto.
- (fhandler_base::set_execable_p): Also record "don't care if executable
- state".
- (fhandler_base::dont_care_if_execable): New method.
- * path.cc (path_conv::check): Clear new flags. Appropriately set
- vol_flags, drive_type, and is_remote_drive.
- * path.h: Add new flags and methods for manipulating them.
- * syscalls.cc (_unlink): Use isremote() to determine if a path is
- remote rather than calling GetDriveType.
- (stat_worker): Ditto.
- * security.cc (get_file_attribute): Or attribute with result of
- NTReadEA to be consistent with get_nt_attribute.
-
-Tue May 29 19:02:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * sec_helper.cc (cygsid::getfrompw): Change parameter to `const'.
- (cygsid::getfromgr): Ditto.
- * security.cc: Use `sys_mbstowcs' and `sys_wcstombs' throughout.
- (extract_nt_dom_user): Try to get user and domain from SID in
- pw->pw_gecos first.
- * security.h (class cygsid): Change parameter of getfrompw() and
- getfromgr() to `const'.
- * uinfo.cc (internal_getlogin): Change order for evaluating user
- information in winNT case. Drop usage of NetWkstaUserGetInfo().
-
-Mon May 28 21:34:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * shortcut.c (check_shortcut): Treat only Cygwin shortcuts as symlinks.
-
-Fri May 25 11:07:07 2001 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (symlink_info::check): Correctly set 'ext_tacked_on'. Use
- this to determine if user specified 'foo.lnk' explicitly. Reorganize
- slightly to get rid of one goto.
-
-Fri May 25 10:15:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (symlink_info::check): Add a check to return correctly
- if incoming `*.lnk' file is not a symlink.
-
-Thu May 24 15:46:50 2001 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (slash_drive_prefix_p): Remove.
- (mount_info::slash_drive_to_win32_path): Ditto.
- (mount_info::conv_to_win32_path): Remove slash drive prefix check.
- (mount_info::add_item): Ditto.
- (mount_info::del_item): Ditto.
- * shared_info.h (mount_info): Remove slash_drive_to_win32_path
- declaration.
-
-Thu May 24 01:17:33 2001 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (handle_exceptions): Bump repeat count for debugging
- kick out.
-
- * fhandler.h (fhandler_dev_dsp): Add a fixup_after_exec.
- * fhandler_dsp.cc (class Audio): Add TOT_BLOCK_SIZE to enum.
- (operator new): New.
- (bigwavebuffer): Declare using TOT_BLOCK_SIZE to avoid buffer overruns.
- (Audio::Audio): Optimize slightly.
- (fhandler_dev_dsp::open): Allocate s_audio using static buffer.
- (fhandler_dev_dsp::fixup_after_exec): New function. Ditto.
-
-Wed May 23 17:45:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (seteuid): Restrict overriding external provided
- user tokens to ntsec. Don't test external tokens for primary
- group to evaluate if it should be overridden. Restrict creating
- internal tokens to ntsec.
-
-Wed May 23 10:11:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (chown_worker): Don't check for ENOSYS.
-
-Tue May 22 12:20:07 2001 Christopher Faylor <cgf@cygnus.com>
-
- * signal.cc (sleep): Protect with sigframe.
-
-Tue May 22 17:58:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (get_file_attribute): Don't set errno.
-
-Mon May 21 15:08:00 2001 Christopher Faylor <cgf@cygnus.com>
-
- * configure.in: Allow --enable-newvfork to turn NEWVFORK on and off.
- * configure: Regenerate.
-
-Mon May 21 11:46:01 2001 Christopher Faylor <cgf@cygnus.com>
-
- * include/cygwin/version.h: Bump minor version number.
-
-Sun May 20 13:26:25 2001 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler_dsp.cc: Reformat to GNU standards.
- (s_audio): Change to a pointer throughout.
- (fhandler_dev_dsp::open): Initialize s_audio, if required.
-
-Sat May 19 23:40:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc: Add load statements for `LookupAccountNameW',
- `LsaClose', `LsaEnumerateAccountRights', `LsaFreeMemory',
- `LsaOpenPolicy', `LsaQueryInformationPolicy', `NetLocalGroupEnum',
- `NetLocalGroupGetMembers', `NetServerEnum', `NetUserGetGroups' and
- `NtCreateToken'.
- * ntdll.h: Add declaration for `NtCreateToken'.
- * sec_helper.cc: Add `well_known_local_sid', `well_known_dialup_sid',
- `well_known_network_sid', `well_known_batch_sid',
- `well_known_interactive_sid', `well_known_service_sid' and
- `well_known_authenticated_users_sid'.
- (cygsid::string): Define as const method.
- (cygsid::get_sid): Set psid to NO_SID on error.
- (cygsid::getfromstr): Ditto.
- (cygsid::getfrompw): Simplify.
- (cygsid::getfromgr): Check for gr == NULL.
- (legal_sid_type): Move to security.h.
- (set_process_privilege): Return -1 on error, otherwise 0 or 1 related
- to previous privilege setting.
- * security.cc (extract_nt_dom_user): Remove `static'.
- (lsa2wchar): New function.
- (open_local_policy): Ditto.
- (close_local_policy): Ditto.
- (get_lsa_srv_inf): Ditto.
- (get_logon_server): Ditto.
- (get_logon_server_and_user_domain): Ditto.
- (get_user_groups): Ditto.
- (is_group_member): Ditto.
- (get_user_local_groups): Ditto.
- (sid_in_token_groups): Ditto.
- (get_user_primary_group): Ditto.
- (get_group_sidlist): Ditto.
- (get_system_priv_list): Ditto.
- (get_priv_list): Ditto.
- (get_dacl): Ditto.
- (create_token): Ditto.
- (subauth): Return immediately if SE_TCB_NAME can't be assigned.
- Change all return statements in case of error to jumps to `out'
- label. Add `out' label to support cleanup.
- * security.h: Add extern declarations for `well_known_local_sid',
- `well_known_dialup_sid', `well_known_network_sid',
- `well_known_batch_sid', `well_known_interactive_sid',
- `well_known_service_sid' and `well_known_authenticated_users_sid'.
- Add extern declarations for functions `create_token',
- `extract_nt_dom_user' and `get_logon_server_and_user_domain'.
- (class cygsid): Add method `assign'. Change operator= to call new
- `assign' method. Add `debug_print' method.
- (class cygsidlist): New class.
- (legal_sid_type): Moved from sec_helper.cc to here.
- * spawn.cc (spawn_guts) Revert reversion of previous patch.
- Call `RevertToSelf' and `ImpersonateLoggedOnUser' instead of `seteuid'
- again.
- * syscalls.cc (seteuid): Rearranged. Call `create_token' now when
- needed. Call `subauth' if `create_token' fails. Try setting token
- owner and primary group only if token was not explicitely created
- by `create_token'.
- * uinfo.cc (internal_getlogin): Try harder to generate correct user
- information. Especially don't trust return value of `GetUserName'.
-
-Sat May 19 21:16:07 2001 Christopher Faylor <cgf@cygnus.com>
-
- * fork.cc (fork_parent): Move atforkprepare call here.
- (fork): From here.
-
-Sat May 19 18:35:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc: Add missing load statement for `CancelIo'.
-
-Sat May 19 01:22:43 2001 Christopher Faylor <cgf@cygnus.com>
-
- * grp.cc (read_etc_group): Don't copy mutex on fork.
- * pwd.cc (read_etc_passwd): Ditto.
- * autoload.cc (LoadDLLfuncEx): Use LoadDLLprime to initialize DLL
- specific area.
-
-Fri May 18 10:31:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (wsock_event::wait): Explicitely cancel IO when a signal
- arrived to avoid data loss. Fallback to blocking IO when canceling
- fails.
-
-Thu May 17 15:29:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (cygwin_set_impersonation_token): Never destroy
- previous token object.
- (subauth): Create token source with well defined identifier.
-
-Wed May 16 23:27:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * uinfo.cc (uinfo_init): Just set user token to INVALID_HANDLE_VALUE.
- Token value is already invalid at that point.
-
-Wed May 16 21:34:00 2001 Fred Yankowski <fred@ontosys.com>
-
- * net.cc (errmap): Add missing mapping from WSAEINTR to EINTR.
-
-Wed May 16 09:20:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * sec_helper.cc (legal_sid_type): Fix conditional. Change to
- inline function.
-
-Wed May 16 01:01:48 2001 Christopher Faylor <cgf@cygnus.com>
-
- * autoload.h: Eliminate.
- * autoload.cc: Pull in autoload.h. Eliminate many macros. Rewrite to
- avoid necessity of initialization routines. Just use a standard one.
- (wsock_init): New function. Moved from net.cc.
- * net.cc (wsock_init): Move to autoload.cc.
- (wsadata): Make global.
- * dtable.cc (dtable::build_fhandler): Use more reliable method for
- checking if net stuff has been loaded.
-
-Tue May 15 19:52:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * fork.cc (fork): Eliminate superfluous call to getuid().
- * security.h: New define `NO_SID'. Remove declarations of functions
- moved to methods into class cygsid.
- (class cygsid): Declare new methods `getfromstr', `get_sid',
- `getfrompw', `getfromgr', `get_rid', `get_uid', `get_gid', `string'
- and new constructors and operators =, == and !=.
- Declare new global cygsids `well_known_XXX_sid' substituting the
- corresponding `get_XXX_sid' functions. Remove declarations of
- these functions.
- * sec_helper.cc (well_known_admin_sid): New global variable.
- (well_known_system_sid): Ditto
- (well_known_creator_owner_sid): Ditto
- (well_known_world_sid): Ditto
- (cygsid::string): New method, substituting `convert_sid_to_string_sid'.
- (cygsid::get_sid): New method, substituting `get_sid'.
- (cygsid::getfromstr): New method, substituting
- `convert_string_sid_to_sid'.
- (cygsid::getfrompw): New method, substituting `get_pw_sid'.
- (cygsid::getfromgr): New method, substituting `get_gr_sid'.
- (cygsid::get_id): New method, substituting `get_id_from_sid'.
- (get_admin_sid): Eliminated.
- (get_system_sid): Ditto.
- (get_creator_owner_sid): Ditto.
- (get_world_sid): Ditto.
- * grp.cc: Use new cygsid methods and well known sids throughout.
- * registry.cc: Ditto.
- * sec_acl.cc: Ditto.
- * security.cc: Ditto.
- * shared.cc: Ditto.
- * syscalls.cc (seteuid): Ditto. Eliminate redundant conditional.
- * uinfo.cc (internal_getlogin): Ditto.
- * spawn.cc (spawn_guts) Revert previous patch.
-
-Tue May 15 10:20:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::ioctl): Convert s_addr
- field to host byte order before comparing with INADDR_LOOPBACK.
-
-Tue May 15 9:03:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc: Add autoload statements for ws2_32 functions
- `WSACloseEvent', `WSACreateEvent', `WSAGetOverlappedResult',
- `WSARecv', `WSARecvFrom', `WSASend', `WSASendTo' and `WSASetEvent',
- `WSAWaitForMultipleEvents'.
- * net.cc: Define wsock_evt.
- (wsock_event): New class.
- (cygwin_sendto): Use overlapped socket io if available.
- (cygwin_recvfrom): Ditto.
- (cygwin_recv): Ditto.
- (cygwin_send): Ditto.
- * security.cc (subauth): Set Win32 error to 0 to safely ask for the
- error code of dynamically loaded function `LsaRegisterLogonProcess'.
-
-Mon May 14 15:37:29 2001 Christopher Faylor <cgf@cygnus.com>
-
- * errno.cc (_sys_errlist): Add missing commas.
-
-Mon May 14 16:13:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (subauth): Check if Secur32.dll could be loaded.
-
-Sun May 13 22:49:04 2001 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (path_conv::check): Revert allow_ntsec check so that volume
- info is always retrieved and isdisk setting is properly set.
-
-Sun May 13 14:02:36 2001 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler_tty.cc (fhandler_tty_common::dup): Preserve O_NOCTTY when
- duping a filehandle.
-
-Sat May 12 18:19:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * dir.cc (rmdir): Rearrange slightly to allow removing directories
- even when R/O attribute is set.
-
-Fri May 11 16:53:38 2001 Christopher Faylor <cgf@cygnus.com>
-
- * external.cc (fillout_pinfo): Use correct pids.
- * path.cc (mount_info::conv_to_win32_path): Correct test for whether to
- include a slash.
-
-Fri May 11 01:04:17 2001 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (handle_exceptions): Don't print message when executing
- from a cygwin program.
-
-2001-05-10 Egor Duda <deo@logos-m.ru>
- Christopher Faylor <cgf@redhat.com>
-
- * environ.cc (winenv): Always add SYSTEMDRIVE and SYSYEMROOT to
- win32-style environment if they don't already exist.
-
-2001-05-10 Kazuhiro Fujieda <fujieda@jaist.ac.jp>
-
- * path.cc (mount_info::conv_to_win32_path): Treat UNC paths the same as
- paths including `:' or `\'.
-
-Wed May 9 14:46:32 2001 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler.h (fhandler_termios::echo_erase): Declare new method.
- * fhandler_termios.cc (fhandler_termios::echo_erase): New method for
- echoing erase characters.
- (fhandler_termios::line_edit): Check the echo flag before echoing
- control characters (from Kazuhiro Fujieda <fujieda@jaist.ac.jp>).
-
-Wed May 9 10:43:30 2001 Christopher Faylor <cgf@cygnus.com>
-
- * include/pthread.h: Remove C++ comment.
-
-Tue May 8 11:09:59 2001 Christopher Faylor <cgf@cygnus.com>
-
- * cygheap.cc (_cfree): Add regparm attribute.
- (_crealloc): Ditto.
-
- * dcrt0.cc (dll_crt0_1): Default to always checking for executable for now.
-
- * dtable.cc (dtable::not_open): Move method.
- * dtable.h (dtable): Here.
-
- * exceptions.cc (ctrl_c_handler): Don't expect process group leader to
- handle a signal if it doesn't exist.
-
- * fhandler.h (fhandler_base): Make openflags protected.
-
- * localtime.c (tzsetwall): Check for __CYGWIN__ as well as __WIN32__.
-
- * path.cc (path_conv::check): Add some comments. Change strcat to assignment.
-
- * lib/_cygwin_S_IEXEC.cc (_cygwin_bob__): Eliminate.
-
- * fhandler_tty.cc (fhandler_console::dup): Set controlling terminal if necessary.
- * fhandler_tty.cc (fhandler_tty_slave::dup): Ditto.
-
-Mon May 7 21:33:17 2001 Christopher Faylor <cgf@cygnus.com>
-
- * include/sys/file.h: Revert special X_OK usage. Just make it a
- constant.
-
-Sun May 6 17:05:00 2001 Robert Collins <rbtcollins@hotmail.com>
-
- * thread.h (pthread_cond): New element cond_access to allow atomic
- broadcasts.
- * thread.cc (pthread_cond::pthread_cond): Initialise cond_access.
- (pthread_cond::~pthread_cond): Destroy cond_access.
- (pthread_cond::Broadcast): Use cond_access.
- (pthread_cond::Signal): Use cond_access.
- (pthread_cond_wait): Use cond_access.
- (pthread_cond_timedwait): Use cond_access.
-
-Sun May 6 11:55:40 2001 Christopher Faylor <cgf@cygnus.com>
-
- * string.h (cygwin_strchr): Make 'static inline' so that things will
- still work when optimized.
-
-Sat May 5 01:04:11 2001 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (handle_exceptions): Vastly increase test for exception
- loop guard variable.
-
-Fri May 4 22:23:33 2001 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (stack_info): Add some controls.
- (stack_info::init): Add extra arguments to control method of
- initialization.. If we have a known good frame, set things up so that
- this frame is not skipped the first time through. Record whether
- caller cares about arguments or not.
- (stack_info::walk): Don't store arguments if they're unwanted.
- (stackdump): Add isexception parameter for use when called by exception
- handler.
- (cygwin_stackdump): Accommodate extra argument to stackdump.
- (handle_exceptions): Ditto.
- (sig_handle): Ditto.
- (interrupt_on_return): Accommodate extra arguments to stack walk
- initialization.
-
-Fri May 4 21:05:20 2001 Christopher Faylor <cgf@cygnus.com>
-
- * localtime.c: Revert exclusion of windows.h.
-
-Fri May 4 17:03:16 2001 Christopher Faylor <cgf@cygnus.com>
-
- * string.h: Fix last-minute typo.
-
-Fri May 4 16:49:34 2001 Christopher Faylor <cgf@cygnus.com>
-
- * pinfo.h: Correctly set __SIGOFFSET.
-
- * path.cc (hash_path_name): Avoid calling library functions for simple
- copying of characters.
-
- * shortcut.c: Use WIN32_LEAN_AND_MEAN.
- * smallprint.c: Ditto.
-
- * environ.cc (getwinenv): Minor clarity fix.
-
- * localtime.c: No need to include windows.h
-
- * string.h: New file.
-
-Fri May 4 16:37:30 2001 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (ctrl_c_handler): Always send signal to process if it
- has no tty.
-
-2001-05-04 Egor Duda <deo@logos-m.ru>
-
- * fhandler_socket.cc (set_connect_secret): Use /dev/urandom to
- generate secret cookie.
-
-Thu May 3 16:37:55 2001 Christopher Faylor <cgf@cygnus.com>
-
- * include/pthread.h (pthread_cleanup_push): Eliminate space preceding
- arguments.
- (pthread_cleanup_pop): Ditto.
-
-Thu May 3 18:16:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (wsock_init): Rename `was_in_progress' to `wsock_started'
- for clearness.
-
-Thu May 3 10:44:16 2001 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (handle_exceptions): Break out of "loop" if the
- debugger doesn't seem to be attaching to our process.
-
-Wed May 2 20:18:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc: Use new definition of LoadDLLinitfunc throughout.
- Redefine wrapper for wsock32.dll and ws2_32.dll.
- (std_dll_init): New function.
- * autoload.h: Rename LoadDLLinitfunc to LoadDLLinitfuncdef.
- Add new defines LoadDLLinitfunc and LoadDLLstdfunc.
- * net.cc (wsock_init): Add guard variable handling. Take care
- to call WSAStartup only once. Load WSAStartup without using
- autoload wrapper to eliminate recursion. Eliminate FIONBIO
- and srandom stuff.
-
-Tue May 1 01:26:15 2001 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (mount_info::conv_to_win32_path): More path tweaking.
-
-Tue May 1 00:34:46 2001 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (mount_info::conv_to_win32_path): Fix debugging output to
- avoid a SIGSEGV. Avoid double backslashes in middle of filename.
-
-Mon Apr 30 21:51:14 2001 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (mkrelpath): New function.
- (mount_info::conv_to_win32_path): Eliminate now-unneeded relative path
- name arg and processing.
- (path_conv::check): Accommodate relative path names again. Accommodate
- one extra argument in mount_info::conv_to_win32_path. Tack trailing
- slash on end of relative path as a side effect, like before.
- * shared_info.h (mount_info::conv_to_win32_path): Reflect new argument
- ordering.
-
-Mon Apr 30 22:09:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc: Add LoadDLLinitfunc for secur32.dll.
- Add LoadDLLfuncEx statements for AllocateLocallyUniqueId@4,
- DuplicateTokenEx@24, LsaNtStatusToWinError@4,
- LsaDeregisterLogonProcess@4, LsaFreeReturnBuffer@4,
- LsaLogonUser@56, LsaLookupAuthenticationPackage@12,
- LsaRegisterLogonProcess@12,
- * environ.cc: Add extern declaration for `subauth_id'.
- (subauth_id_init): New function for setting `subauth_id'.
- (struct parse_thing): Add entry for `subauth_id'.
- * fork.cc (fork_parent): Call `RevertToSelf' and
- `ImpersonateLoggedOnUser' instead of `seteuid'.
- * security.cc: Define global variable `subauth_id'.
- (extract_nt_dom_user): New function.
- (cygwin_logon_user): Call `extract_nt_dom_user' now.
- (str2lsa): New static function.
- (str2buf2lsa): Ditto.
- (str2buf2uni): Ditto.
- (subauth): Ditto.
- * security.h: Add prototype for `subauth'.
- * spawn.cc (spawn_guts): Use cygheap->user.token only if impersonated.
- Use `cygsid' type. Remove impersonation before allowing access to
- workstation/desktop to everyone. Call `RevertToSelf' and
- `ImpersonateLoggedOnUser' instead of `seteuid'.
- * syscalls.cc (seteuid): Rearranged to allow using subauthentication
- to retrieve user tokens when needed.
-
-Mon Apr 30 20:26:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * uinfo.cc (internal_getlogin): Formatting change.
-
-Mon Apr 30 19:58:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * grp.cc: Eliminate MAX_DOMAIN_NAME define.
- (read_etc_group): Substitute MAX_DOMAIN_NAME by
- INTERNET_MAX_HOST_NAME_LENGTH.
- * passwd.cc (parse_pwd): Don't force pw_name to be lower case.
- * sec_helper.cc: Substitute MAX_USER_NAME by UNLEN,
- MAX_COMPUTERNAME_LENGTH by INTERNET_MAX_HOST_NAME_LENGTH throughout.
- (lookup_name): Slight cleanup.
- * security.cc (alloc_sd): Substitute MAX_USER_NAME by UNLEN.
- * security.h: Define DEFAULT_UID as DOMAIN_USER_RID_ADMIN and
- DEFAULT_GID as DOMAIN_ALIAS_RID_ADMINS.
- * shared.cc (memory_init): Substitute MAX_USER_NAME by UNLEN.
- * thread.h: Ditto.
- * uinfo.cc (internal_getlogin): Substitute MAX_USER_NAME by UNLEN.
- Substitute MAX_COMPUTERNAME_LENGTH and MAX_HOST_NAME by
- INTERNET_MAX_HOST_NAME_LENGTH.
- * winsup.h: Include lmcons.h. Eliminate MAX_USER_NAME and
- MAX_HOST_NAME. Move DEFAULT_UID and DEFAULT_GID to security.h.
-
-Mon Apr 30 12:35:40 2001 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (path_conv::check): Don't use path_flags when converting to
- MS-DOS syntax unless parsing tail of path component. Stop parsing path
- when we reach the 'root' of the path. Correctly copy tail to path
- component.
-
-Sun Apr 29 22:28:06 2001 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (INIT_EXCEPTION_HANDLER): Eliminate.
- (init_exceptions): Just use init_exception_handler.
- (open_stackdumpfile): New function.
- (stack_info::first_time): Eliminate.
- (stack_info::init): Set up fields to avoid "first_time" consideration.
- (stack_info::walk): Remove "first_time" consideration.
- (stackdump): Change arguments to accept initial frame pointer and open
- stack file flag.
- (stack): Eliminate.
- (cygwin_stackdump): Use stackdump() rather than stack().
- (try_to_debug): Remove all synchronization logic. Just keep looping in
- exception handler until debugger notices us. Return 1 if successfully
- started debugger.
- (handle_exceptions): Just return if we know that we're debugging.
- Reorganize to avoid creating a stackdump file if we are starting a
- debugger. Return from exception handler if debugger started
- successfully.
- (sig_handle): Create a stackdump only if debugger wasn't started.
- * winsup.h (try_to_debug): Add an argument.
-
-Sun Apr 29 21:41:25 2001 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (symlink_info::check): Remove extra arguments, move
- functionality back to path_conv::check. Clear symlink bit from pflags
- argument before detecting if this is a symlink.
- (path_conv::check): Convert posix path here instead of
- symlink_info::check. Only grab volflags when using ntsec.
- (symlink_info::check_case): Just replace appropriate part of input
- path.
-
-Sat Apr 28 19:36:13 2001 Christopher Faylor <cgf@cygnus.com>
-
- Throughout, change 'tty_attached' to 'real_tty_attached', for clarity.
- Throughout, change 'OutputStopped' to 'output_stopped', for
- consistency.
- * dtable.cc (stdio_init): Set controlling tty if not set by stdio
- opens.
- * exceptions.cc (ctrl_c_handler): Avoid special pgid checking if no tty
- is associated with the process.
- (Suggested by Tim Baker <dbaker@direct.ca>)
- * external.cc (fillout_pinfo): Return actual tty number for ctty.
- * fhandler_console.cc (get_tty_stuff): Set ctty when shared memory is
- allocated. Accept flags input from open().
- (set_console_ctty): New function.
- (fhandler_console::open): Pass flags to get_tty_stuff and rely on this
- function to set the ctty, if appropriate.
- * fhandler_termios.cc (fhandler_termios::set_ctty): Move to tty_min
- class.
- * fhandler_tty.cc (fhandler_tty_slave::open): Use tc field to access
- set_ctty().
- * tty.h (TTY_CONSOLE): Move to include/sys/cygwin.h.
- (tty_min): Add set_ctty class here.
- * include/sys/cygwin.h (TTY_CONSOLE): New home here.
-
- * path.cc (symlink_info): Make contents an actual buffer. Pass more
- flags to case_check.
- (path_conv::check): Reorganize to do parsing based on posix path rather
- than native path.
- (symlink_info::check): Expect posix path as input. Translate to native
- path here. Accept path_conv flags. Stop parsing if not a symlink
- regardless of whether previous path was a symlink.
-
-2001-04-27 Kazuhiro Fujieda <fujieda@jaist.ac.jp>
-
- * thread.cc (thread_init_wrapper): Use _REENT_INIT to initialize the
- reent structure of newlib.
-
-Fri Apr 27 14:02:24 2001 Christopher Faylor <cgf@cygnus.com>
-
- * sigproc.h (sig_send): Add exception parameter to sig_send.
- * sigproc.cc (sig_send): Ditto. Use it when setting frame info.
- * exceptions.cc (handle_exceptions): Use exception flag when calling
- sig_send.
-
-2001-04-27 Egor Duda <deo@logos-m.ru>
-
- * tty.cc (tty::make_pipes): Set to_slave pipe mode to nonblocking.
- * fhandler_tty.cc (fhandler_pty_master::accept_input): If pipe buffer
- is full, give slave a chance to read data.
-
-2001-04-26 Kazuhiro Fujieda <fujieda@jaist.ac.jp>
-
- * security.cc (alloc_sd): Add unrelated ACCESS_ALLOWED_ACE behind
- the `everyone' ACE.
-
-Wed Apr 25 15:07:37 2001 Christopher Faylor <cgf@cygnus.com>
-
- * sigproc.h [sigthread]: Add exception field.
- [sigframe::~sigframe]: Clear exception field.
- [sigframe::set]: Set exception field from caller.
- * sigproc.cc (sig_send): Set exception field when frame pointer is
- passed in.
- * exceptions.cc (interrupt_on_return): Always treat exception as
- interruptible.
-
-2001-04-25 Egor Duda <deo@logos-m.ru>
-
- * cygwin.din: Export asctime_r, ctime_r, gmtime_r, localtime_r
- * include/cygwin/version.h: Bump CYGWIN_VERSION_API_MINOR to 39
-
-Wed Apr 25 10:57:36 2001 Christopher Faylor <cgf@cygnus.com>
-
- * include/cygwin/version.h: Bump minor version number.
- * childinfo.h: Bump child structure magic number.
-
-2001-04-25 Kazuhiro Fujieda <fujieda@jaist.ac.jp>
-
- * uinfo.cc (internal_getlogin): Return pointer to struct passwd.
- (uinfo_init): Accommodate the above change.
- * syscalls.cc (seteuid): Ditto.
-
-Tue Apr 25 11:08:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc: Add LoadDLLfunc statements for SetTokenInformation@16.
- * cygheap.cc: Include security.h.
- * grp.cc (internal_getgrent): New function.
- (getgroups): Rearranged using `internal_getgrent' and the new
- `cygsid' class.
- * passwd.cc (internal_getpwent): New function.
- * sec_acl.cc: Use new `cygsid' class throughout.
- (acl_access): Use `internal_getgrent' instead of `getgrent'.
- * sec_helper.cc: Use new `cygsid' class throughout.
- (get_id_from_sid): Use `internal_getgrent' instead of `getgrent'.
- Use `internal_getpwent' instead of `getpwent'.
- * security.cc: Use new `cygsid' class throughout.
- * security.h: Move `MAX_SID_LEN' from winsup.h to here.
- Add extern declarations for `internal_getgrent' and `internal_getpwent'.
- (class cygsid): New class.
- * shared.cc (sec_user): Use new `cygsid' class.
- * syscalls.cc (seteuid): Try to set owner to user and primary group to
- current group in impersonation token before performing impersonation.
- (setegid): Try to set primary group in process token to the new group
- if ntsec is on.
- * uinfo.cc (internal_getlogin): Use new `cygsid' class.
- Try to set owner to user and primary group to current group in process
- token if the process has been started from a non cygwin process.
- (uinfo_init): Set primary group only if the process has been started
- from a non cygwin process.
- * winsup.h: Move define for `MAX_SID_LEN' to security.h.
-
-Mon Apr 16 23:20:00 2001 Andy Younger <andylyounger@hotmail.com>
-
- * fhandler_dsp.cc: Improved handling of 8 bit playback modes.
- Put in mock support for SNDCTL_DSP_SETFRAGMENT.
-
-Tue Apr 24 23:51:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * passwd.cc (getpwnam_r): Add pw_passwd handling as well.
- (getpwuid_r): Ditto.
-
-Tue Apr 24 23:43:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * passwd.cc (getpwnam_r): Use correct offsets into buffer.
- Copy pw_gecos field as well.
- (getpwuid_r): Ditto.
-
-2001-04-24 Egor Duda <deo@logos-m.ru>
-
- * dlmalloc.c: New file. Port of Doug Lea's malloc
- * dlmalloc.h: Ditto.
- * Makefile.in: Add support for MALLOC_DEBUG
- * config.h.in: Ditto.
- * winsup.h: Ditto.
- * configure.in: Add --enable-malloc-debugging option.
- * configure: Regenerate.
- * debug.h: Include declarations for debugging malloc.
- * tty.cc (grantpt): Fix definition.
- (unlockpt): Ditto.
-
-Mon Apr 23 22:00:29 2001 Christopher Faylor <cgf@cygnus.com>
-
- Remove trailing underscore from fhandler_base and friends, throughout.
- * fhandler.h (fhandler_base::set_open_status): New method. Stores
- original open status.
- (fhandler_base::get_open_status): New method. Retrieves original open
- status.
- (fhandler_base::reset_to_open_binmode): New method.
- * fhandler.cc (fhandler_base::open): Save open status.
- (fhandler_base::init): Ditto.
- * fhandler_clipboard.cc (fhandler_clipboard::open): Ditto.
- * fhandler_console.cc (fhandler_console::open): Ditto.
- * fhandler_dsp.cc (fhandler_dsp::open): Ditto.
- * fhandler_dev_mem.cc (fhandler_dev_mem::open): Ditto.
- * fhandler_dev_random.cc (fhandler_dev_random::open): Ditto.
- * fhandler_serial.cc (fhandler_serial::open): Ditto.
- * fhandler_tty_slave.cc (fhandler_tty_slave::open): Ditto.
- * fhandler_tty_master.cc (fhandler_tty_master::open): Ditto.
- * fhandler_dev_zero.cc (fhandler_dev_zero::open): Ditto.
- * syscalls.cc (setmode): Rework so that 0 mode value causes reversion
- to open state.
-
- * fhandler_tty_slave.cc (fhandler_tty_slave::read): Use correct
- multiplier when converting from deciseconds to milliseconds.
-
-Mon Apr 23 13:28:35 2001 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler.h (fhandler_base::clear_r_binary): New method.
- (fhandler_base::clear_w_binary): New method.
- * syscalls.cc (setmode): Accept 0 as mode value. Resets text/binary
- behavior for fd to default.
-
-Mon Apr 23 12:46:07 2001 Christopher Faylor <cgf@cygnus.com>
-
- * net.cc [errmap]: Add '0' condition.
- (find_winsock_errno): Don't translate no error to EPERM.
-
-Sun Apr 22 20:48:24 2001 Christopher Faylor <cgf@cygnus.com>
-
- * include/cygwin/version.h: Bump Cygwin version and API version.
-
-Mon Apr 23 9:27:00 2001 Robert Collins <rbtcollins@hotmail.com>
-
- * thread.cc (MTinterface::Init): Always initialise per process variables.
-
-Sun Apr 22 19:18:18 2001 Christopher Faylor <cgf@cygnus.com>
-
- * features.h: Reinstate as wrapper for sys/features.h.
-
-Mon Apr 23 0:10:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (alloc_sd): Reformat comment.
- * shared.cc: Drop function declarations already in security.h.
-
-Sun Apr 22 12:17:57 2001 Christopher Faylor <cgf@cygnus.com>
-
- * shortcut.c (check_shortcut): Close input file handle before
- returning.
- * path.cc (check_sysfile): Ditto.
- (symlink_info::check): Rely on opened file handle being closed by
- symlink checking routines. Set ext_tacked_on when .lnk is detected.
-
-Sat Apr 21 19:26:05 2001 Christopher Faylor <cgf@cygnus.com>
-
- * thread.cc (MTinterface::Init): Remove accidentally checked in code.
-
-Sun Apr 22 00:22:00 2001 Robert Collins <rbtcollins@hotmail.com>
-
- * passwd.cc (getpwuid): Check for thread cancellation.
- (getpwuid_r): Ditto.
- (getpwname): Ditto.
- (getpwnam_r): Ditto.
- * thread.h (pthread_mutex): New constructors for pshared operation.
- (MTinterface): Associative array for pshared mutex's.
- * thread.cc (MTinterface::Init): Initailize pshared mutex array.
- (pthread_cond::BroadCast): Implementation notes.
- (pthread_cond::TimedWait): Remove use of SignalObjectAndWait on non-NT systems.
- (pthread_mutex::pthread_mutex(unsigned short)): New function.
- (pthread_mutex::pthread_mutex (pthread_mutex_t *, pthread_mutexattr *)):New function.
- (pthread_mutex::pthread_mutex(pthread_mutexattr *)): Fail on pshared mutex's.
- (__pthread_mutex_getpshared): New function.
- (__pthread_join): Check for thread cancellation.
- (__pthread_cond_timedwait): Support pshared mutex's.
- (__pthread_cond_wait): Ditto.
- (__pthread_condattr_setpshared): Error on PROCESS_SHARED requests.
- (__pthread_mutex_init): Support pshared mutex's.
- (__pthread_mutex_getprioceiling): Ditto.
- (__pthread_mutex_lock): Ditto.
- (__pthread_mutex_trylock): Ditto.
- (__pthread_mutex_unlock): Ditto.
- (__pthread_mutex_destroy): Ditto.
- (__pthread_mutex_setprioceiling): Ditto.
- (__pthread_mutexattr_setpshared): Support PTHREAD_PROCESS_PSHARED requests.
-
-Fri Apr 20 19:38:29 2001 Christopher Faylor <cgf@cygnus.com>
-
- * cygwin.din: Add *scanf and *scan_r functions.
-
-Fri Apr 20 22:25:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (set_process_privileges): Swap out.
- * sec_helper.cc (set_process_privilege): Rename from
- `set_process_privileges'. Takes the privilege to enable or disable
- as parameter now.
- * security.h: Add prototype for `set_process_privileges'.
-
-2001-04-19 Egor Duda <deo@logos-m.ru>
-
- * path.cc (path_conv::check): Always initialize member variables.
-
-Fri Apr 20 12:27:49 2001 Christopher Faylor <cgf@cygnus.com>
-
- * include/sys/file.h: More cleanup for X_OK.
-
-Fri Apr 20 11:48:45 2001 Christopher Faylor <cgf@cygnus.com>
-
- * include/sys/file.h: Move X_OK protection earlier.
-
- * dtable.cc (dtable::vfork_child_fixup): Avoid closing already closed
- handles.
-
-Fri Apr 20 16:29:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * grp.cc (getgroups): Change so that SIDs get compared instead
- of strings to SIDs.
-
-Fri Apr 20 14:50:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in: Add object files `sec_helper.cc' and `sec_acl.cc'.
- * security.cc: Swap out several functions.
- * sec_acl.cc: New file. Move Sun compatibel ACL functions from
- `security.cc' to here.
- * sec_helper.cc: New file. Move security helper functions from
- `security.cc' to here.
- * security.h: Changed to accommodate the above changes.
-
-Fri Apr 20 14:12:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * grp.cc: Replace `group_in_memory_p' by `group_state'.
- Eliminate group_sem throughout.
- (enum grp_state): New enumeration type.
- (read_etc_group): Make race safe.
- * security.cc: Eliminate group_sem throughout.
-
-Thu Apr 19 9:40:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (mmap): Drop usage of the same memory area if the same
- region of the same file is mapped twice.
-
-Wed Apr 18 16:53:54 2001 Christopher Faylor <cgf@cygnus.com>
-
- Throughout, change fdtab references to cygheap->fdtab.
- * child_info.h (cygheap_exec_info): Eliminate special fdtab stuff.
- * spawn.cc (spawn_guts): Ditto.
- * cygheap.cc (cygheap_init): Initialize fdtab, if appropriate.
- * cygheap.h (CYGHEAPSIZE): Include size of init_cygheap.
- (_cmalloc_entry): Include fdtab here.
- * dtable.h (dtable): Declare/define new methods.
- * dtable.cc (dtable::vfork_child_fixup): New method.
- (dtable::fixup_after_exec): Remove unneeded extra arguments.
- * dcrt0.cc (dll_crt0_1): Ditto.
-
- * environ.cc (getwinenv): Use case sensitive comparison.
- (winenv): Make a copy of environment cache to avoid realloc problems
- when duplicate environment variables exist in the environment. (From
- Egor Duda)
-
- * net.cc (cygwin_socket): Revert Apr 14 change.
-
- * include/sys/file.h: Protect against previous X_OK definition.
-
-Tue Apr 17 12:18:28 2001 Christopher Faylor <cgf@cygnus.com>
-
- * passwd.cc: Eliminate passwd_sem throughout.
- * security.cc: Ditto.
-
-Tue Apr 17 12:18:28 2001 Robert Collins <rbtcollins@hotmail.com>
-
- * cygwin.din: Export New functions.
- * passwd.cc (read_etc_passwd): Make race safe.
- (getpwuid_r): New function.
- (getpwnam_r): New function.
-
-2001-04-18 Egor Duda <deo@logos-m.ru>
-
- * grp.cc (getgroups): Avoid crash if passwd field if /etc/group is
- empty.
-
-Tue Apr 17 19:05:44 2001 Christopher Faylor <cgf@cygnus.com>
-
- * path.h (path_conv::add_ext_from_sym): Declare.
- * path.cc (path_conv::add_ext_from_sym): Convert to pure inline method.
-
-Tue Apr 17 18:50:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (windows_device_names): Add missing NULL element.
-
-Tue Apr 17 12:14:54 2001 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (windows_device_names): Move dsp to proper location.
-
-Tue Apr 17 13:44:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (path_conv::check): Set case_clash even if pcheck_case
- is set to PCHECK_ADJUST when a case clash is given for the last
- component in path.
- (symlink_info::case_check): Ditto.
- * syscalls.cc (_rename): Avoid overwriting an already existing file
- if a case clash is given even if pcheck_case is set to PCHECK_ADJUST.
-
-Tue Apr 17 2:07:07 2001 Christopher Faylor <cgf@cygnus.com>
-
- * config.h.in: Turn off VFORK again.
-
-Mon Apr 16 23:45:24 2001 Christopher Faylor <cgf@cygnus.com>
-
- * path.h (cwdstuff): Move class.
- * cygheap.h (cwdstuff): To here.
- (init_cygheap): Add cwd field.
- * child_info.h (cygheap_exec_info): Eliminate cwd stuff.
- (child_info_spawn): Ditto.
- * dcrt0.cc (dll_crt0_1): Remove cygcwd.fixup_after_exec call. Convert
- cygcwd reference to cygheap->cwd.
- * path.cc: Ditto, throughout.
- (cwdstuff::copy): Eliminate.
- (cwdstuff::fixup_after_exec): Ditto.
- * spawn.cc (spawn_guts): Eliminate call to cygcwd.copy.
-
- * fhandler.h (FH_OSS_DSP): Move into "fast" device category.
-
-Mon Apr 16 19:19:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc: Move fh_paging_file from some functions to be
- a global static variable.
- (class mmap_record): Add `devtype_' member to remember
- the device type of the file. Add declaration for methods
- `get_device', `alloc_fh' and `free_fh'.
- (mmap_record::mmap_record): Initialize `devtype_' correctly.
- (mmap_record::alloc_fh): New method.
- (mmap_record::free_fh): Ditto.
- (munmap): Use new mmap_record::alloc_fh and mmap_record::free_fh
- methods to create a correct fhandler.
- (msync): Ditto.
- (fixup_mmaps_after_fork): Ditto.
-
-Mon Apr 16 16:01:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * grp.cc (getgroups): If `allow_ntsec' is set, use the process token
- information to evaluate the groups list.
-
-Mon Apr 16 00:08:02 2001 Christopher Faylor <cgf@cygnus.com>
-
- * features.h: Remove this file as it is now being supplied by newlib.
-
-Sun Apr 15 23:23:29 2001 Christopher Faylor <cgf@cygnus.com>
-
- * autoload.cc: Add winmm functions needed by fhandler_dsp.cc.
-
-Sun Apr 15 22:53:52 2001 Andy Younger <andylyounger@hotmail.com>
-
- * fhandler_dsp.cc: New file. Implements OSS like /dev/dsp.
- * include/sys/soundcard.h: New file. User land includes for OSS
- /dev/dsp.
- * fhandler.h: Add new class fhandler_dev_dsp and a FH_OSS_DSP
- definition.
- * dtable.cc (dtable::build_fhandler): Allow creation of the /dev/dsp
- device.
- * path.cc (windows_device_names): Add /dev/dsp into list of device
- names.
- * Makefile.in (DLL_OFILES): Add fhandler_dsp.o.
-
-Sun Apr 15 16:36:27 2001 Christopher Faylor <cgf@cygnus.com>
-
- * uname.c (uname): Default n in in86 to 6 if Windows returns > 6.
-
-Sun Apr 15 15:56:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (add_ext_from_sym): Redefine to call `add_ext_from_sym_'.
- (add_ext_from_sym_): New inline function.
-
-Sat Apr 14 19:23:52 2001 Christopher Faylor <cgf@cygnus.com>
-
- * config.h.in: Turn on VFORK by default.
-
-Sat Apr 14 18:04:35 2001 Christopher Faylor <cgf@cygnus.com>
-
- * net.cc (cygwin_socket): Set SO_LINGER to small value so closed UNIX
- domain sockets will not stay around.
-
-Sat Apr 14 18:01:43 2001 Pierre A. Humblet <Pierre.Humblet@ieee.org>
-
- * select.cc (socket_cleanup): Set SO_LINGER to small value so closed
- dummy sockets do not stay around. Use correct value for second argument
- to shutdown.
-
-Sat Apr 14 17:04:00 2001 Robert Collins <rbtcollins@hotmail.com>
-
- * thread.h (MTinterface): Add threadcount.
- * thread.cc (MTinterface::Init): Set threadcount to 1.
- (__pthread_create): Increment threadcount.
- (__pthread_exit): Decrement threadcount and call exit() from the last thread.
-
-Fri Apr 13 11:34:24 2001 Robert Collins <rbtcollins@hotmail.com>
-
- * fork.cc (fork_child): Call the __pthread_atforkchild function.
- (fork_parent): Call the __pthread_atforkparent function.
- * cygwin.din: Export pthread_atfork.
- * thread.h (callback): New class.
- (MTinterface): Use it.
- * thread.cc (__pthread_atforkprepare): New function.
- (__pthread_atforkparent): New function.
- (__pthread_atforkchild): New function.
- (__pthread_atfork): New function.
- * pthread.cc (pthread_atfork): New function.
-
-Fri Apr 13 9:52:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (add_ext_from_sym): New define evaluating `known'suffix'.
- (path_conv::check): Use add_ext_from_sym throughout.
-
-Thu Apr 12 23:19:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * dir.cc (mkdir): Check for case clash.
- * environ.cc: Add extern declaration for `pcheck_case'.
- (check_case_init): New function.
- (struct parse_thing): Add "check_case" option.
- * errno.cc (_sys_nerrlist): Add text for ECASECLASH.
- (strerror): Add case branch for ECASECLASH.
- * fhandler.cc (fhandler_disk_file::open): Check for case clash.
- * path.cc: Add global variable `pcheck_case'.
- (struct symlink_info): Add member `case_clash' and method `case_check'.
- (path_prefix_p_): Call `pathnmatch' instead of `strncasematch'.
- (pathnmatch): New funtion.
- (pathmatch): Ditto.
- (path_conv::check): Add handling for case checking.
- (symlink): Check for case clash.
- (symlink_info::check): Add parameter for case checking.
- Handle case checking.
- (symlink_info::case_check): New method.
- (chdir): Don't use unconverted path if pcheck_case==PCHECK_STRICT.
- * path.h: Add extern declarations for `pathmatch' and
- `pathnmatch'.
- (enum case_checking): New enumeration type describing
- the case checking behaviour of path conversion routines.
- (class path_conv): Add member `case_clash'.
- * syscalls.cc (_link): Check for case clash.
-
-Thu Apr 12 12:49:53 2001 Christopher Faylor <cgf@cygnus.com>
-
- * syscalls.cc (mkfifo): New function stub.
-
-2001-04-12 Robert Collins <rbtcollins@hotmail.com>
-
- * configure.in: Remove PTH_ALLOW.
- * cygwin.din: Remove @PTH_ALLOW@ prefixes to pthread functions. Add
- new pthread exports.
- * pthread.cc: New wrapper functions for the above new exports.
- * sched.cc (valid_sched_parameters): New function.
- (sched_setparam): Use it.
- (sched_set_thread_priority): New function. Used by pthread_sched*.
- * thread.cc (pthread_key_destructor::InsertAfter): New function.
- (pthread_key_destructor::UnlinkNext): New function.
- (pthread_key_destructor::Next): New function.
- (pthread_key_destructor_list::Insert): New function.
- (pthread_key_destructor_list::Remove): New function.
- (pthread_key_destructor_list::Pop): New function.
- (pthread_key_destructor::pthread_key_destructor): New function.
- (pthread_key_destructor_list::IterateNull): New function.
- (MTinterface::Init): Initialise new member.
- (pthread::pthread): Initialise new members.
- (pthread::create): Copy new attributes. Set the new thread priority.
- (pthread_attr::pthread_attr): Initialise new members.
- (pthread_key::pthread_key): Setup destructor function.
- (pthread_key::~pthread_key): Remove destructor function.
- (pthread_mutexattr::pthread_mutexattr): New function.
- (pthread_mutexattr::~pthread_mutexattr): New function.
- (__pthread_once): New function.
- (__pthread_cleanup): New function.
- (__pthread_cancel): New function.
- (__pthread_setcancelstate): New function.
- (__pthread_setcanceltype): New function.
- (__pthread_testcancel): New function.
- (__pthread_attr_getinheritsched): New function.
- (__pthread_attr_getschedparam): New function.
- (__pthread_attr_getschedpolicy): New function.
- (__pthread_attr_getscope): New function.
- (__pthread_attr_setinheritsched): New function.
- (__pthread_attr_setschedparam): New function.
- (__pthread_attr_setschedpolicy): New function.
- (__pthread_attr_setscope): New function.
- (__pthread_exit): Call any key destructors on thread exit.
- (__pthread_join): Use the embedded attr values.
- (__pthread_detach): Use the embedded attr values.
- (__pthread_getconcurrency): New function.
- (__pthread_getschedparam): New function.
- (__pthread_key_create): Pass the destructor on object creation.
- (__pthread_key_delete): Correct incorrect prototype.
- (__pthread_setconcurrency): New function.
- (__pthread_setschedparam): New function.
- (__pthread_cond_timedwait): Support static mutex initialisers.
- (__pthread_cond_wait): Ditto.
- (__pthread_mutex_getprioceiling): New function.
- (__pthread_mutex_lock): Support static mutex initialisers.
- (__pthread_mutex_trylock): Ditto.
- (__pthread_mutex_unlock): Ditto.
- (__pthread_mutex_destroy): Ditto.
- (__pthread_mutex_setprioceiling): New function.
- (__pthread_mutexattr_getprotocol): New function.
- (__pthread_mutexattr_getpshared): New function.
- (__pthread_mutexattr_gettype): New function.
- (__pthread_mutexattr_init): New function.
- (__pthread_mutexattr_destroy): New function.
- (__pthread_mutexattr_setprotocol): New function.
- (__pthread_mutexattr_setprioceiling): New function.
- (__pthread_mutexattr_getprioceiling): New function.
- (__pthread_mutexattr_setpshared): New function.
- (__pthread_mutexattr_settype): New function. Remove stubs for non
- MT_SAFE compilation.
- * thread.h: Remove duplicate #defines. Add prototypes for new
- functions in thread.cc.
- (pthread_key_destructor): New class.
- (pthread_key_destructor_list): New class.
- (pthread_attr): Add new members.
- (pthread): Remove members that are duplicated in the pthread_attr
- class.
- (pthread_mutex_attr): Add new members.
- (pthread_once): New class.
- * include/pthread.h: Add prototypes for new functions exported from
- cygwin1.dll. Remove typedefs.
- * include/sched.h: Add prototypes for new functions in sched.cc.
- * include/cygwin/types.h: Add typedefs from pthread.h
-
-Tue Apr 10 22:02:53 2001 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (struct symlink_info): Add extn and ext_tacked_on fields.
- (path_conv::check): Only tack on extension if a known one didn't
- already exist.
- (suffix_scan::has): Return pointer to known extension.
- (symlink_info::check): Record location of extension, if any.
-
-2001-04-09 Egor Duda <deo@logos-m.ru>
-
- * fhandler.h (class fhandler_socket): Add members and methods to
- support secure connections on AF_UNIX sockets.
- * fhandler_socket.cc (fhandler_socket::set_connect_secret): New method.
- (fhandler_socket::get_connect_secret): Ditto.
- (fhandler_socket::create_secret_event): Ditto.
- (fhandler_socket::close_secret_event): Ditto.
- (fhandler_socket::check_peer_secret_event): Ditto.
- (fhandler_socket::fixup_after_fork): Duplicate secret event to child.
- (fhandler_socket::dup): Copy address family.
- (fhandler_socket::close): Close secret event.
- * net.cc (get_inet_addr): Read secret cookie.
- (cygwin_connect): Check if peer knows secret cookie value.
- (cygwin_accept): Ditto. Copy address family to newly created socket.
- (cygwin_bind): Generate and write secret cookie.
- (wsock_init): Initialize random number generator.
-
-Sun Apr 8 20:40:58 2001 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Put -lgcc last in list of libraries, since stdc++
- library needs it.
- * cygwin.din: Remove obsolete "__empty" export.
- * exceptions.cc (call_signal_handler_now): Force inclusion of function
- even when -finline-functions is specified.
- * sigproc.h: Remove obsolete call_signal_handler declaration.
-
-Sun Apr 8 20:36:55 2001 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
-
- * fhandler_console.cc (cp_get_internal): New function.
- (cp_convert): New function.
- (con_to_str): New function.
- (str_to_con): New function.
- (fhandler_console::read): Replace OemToCharBuff with con_to_str.
- (fhandler_console::write_normal): Replace CharToOemBuff with str_to_con.
-
-Thu Apr 5 22:41:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (stat_worker): Fix conditional which still allowed
- successful stat'ing of non-existant files.
-
-Wed Apr 4 10:37:44 2001 Christopher Faylor <cgf@cygnus.com>
-
- * child_info.h: Bump magic number for fork/exec/spawn.
-
-Tue Apr 3 20:06:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * errno.cc (errmap): Map ERROR_FILE_INVALID to ENXIO.
-
-Mon Apr 2 22:48:58 2001 Christopher Faylor <cgf@cygnus.com>
-
- * cygrun.c (main): Fix compiler warning.
- * gmon.c (_mcleanup): Ditto.
- * profil.c (profile_off): Ditto.
-
- * net.cc (find_winsock_errno): New function.
- (__set_winsock_errno): Use find_winsock_errno.
- (cygwin_setsockopt): Detect SO_ERROR for debugging.
- (cygwin_getsockopt): Ditto. Translate error when getsockopt returns
- SO_ERROR.
- * winsup.h: regparmize __set_winsock_errno.
- * include/sys/strace.h: Document that strace functions can't use
- regparm.
-
-2001-04-02 Kazuhiro Fujieda <fujieda@jaist.ac.jp>
-
- * fhandler.cc (fhandler_disk_file::open): Avoid checking a magic
- number of a directory.
-
-Mon Apr 2 00:24:08 2001 Christopher Faylor <cgf@cygnus.com>
-
- * shared_info.h (mount_info): Remove mnt_ elements.
- * thread.h (struct _winsup_t): Add mnt_ elements.
- * path.cc (fillout_mntent): Use mnt_ elements from reent_winsup ().
-
-Sun Apr 1 20:10:34 2001 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (sigframe::call_signal_handler): Return value of
- call_signal_handler_now.
- * sigproc.h (sigframe): Use constructor.
- * syscalls.cc (_read): Correct errno test prior to calling signal
- handler.
-
-Sun Apr 1 00:38:06 2001 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (sigframe::call_signal_handler): Move outside of "C"
- block or some compilers will complain.
-
-Sun Apr 1 00:24:14 2001 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (call_signal_handler_now): Rename from
- call_signal_handler to avoid C++ confusion.
-
-Sun Apr 1 00:08:15 2001 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (fillout_mntent): Always remove drive root directories from
- future consideration by "/cygdrive" reporting.
- (cygdrive_getmnt): Avoid reporting removable drives or drives with no
- media mounted.
-
-Sat Mar 31 21:56:19 2001 Christopher Faylor <cgf@cygnus.com>
-
- * thread.h (struct _winsup_t): Remove obsolete elements. Add
- available_drives element.
- * path.cc (mount_info::getmntent): Report "/cygdrive" drives when
- mounted drives are exhausted.
- (fillout_mntent): New function.
- (mount_item::getmntent): Use fillout_mntent.
- (cygdrives_mntent): New function. Returns next available "/cygdrive".
- (setmntent): Initialize available "/cygdrives".
- * syscalls.cc: Remove some if 0'ed code.
- * times.cc (timezone): Use more descriptive variable name.
-
-Sat Mar 31 18:59:52 2001 Christopher Faylor <cgf@cygnus.com>
-
- * sigproc.h (class sigframe): Implement 'unregister()' method.
- (sigframe::~sigframe): Use unregister method.
- (sigframe::call_signal_handler): Declare new method.
- * exceptions.cc (sigframe::call_signal_handler): New method.
- Unregisters current sigframe before calling signal handler.
- (setup_handler): Clear waiting threads prior to arming signal_arrived.
- * syscalls.cc (_read): Change goto to loop. Recalculate sigframe
- inside of loop so that constructor is called when appropriate.
- * wait.cc (wait4): Ditto.
-
- * signal.cc: Change "sig" to "signal" in debugging messages throughout.
- * sigproc.cc: Ditto.
-
-Sat Mar 31 17:12:08 2001 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler_serial.cc (fhandler_serial::raw_write): Close protected
- handles with ForceCloseHandle or suffer spurious warnings.
-
-Sat Mar 31 16:23:32 2001 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler.cc (fhandler_base::read): Remove special handling of CTRL-Z.
-
-Sat Mar 31 11:09:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (class fhandler_console): Add members `insert_mode'.
- * fhandler_console.cc (fhandler_console::dup): Duplicate `insert_mode'.
- (fhandler_console::fhandler_console): Initialize `insert_mode'.
- (fhandler_console::char_command): Add terminal capabilities
- "enter insert mode" = \E[4h and "exit insert mode" = \E[4l.
- Care for insert mode on terminal capability "repeat char" = \E[x;yb.
- (fhandler_console::write_normal): Care for insert mode before writing
- to the console.
- (array keytable): Add keymapping for modified cursor and control
- block keys (xterm like).
-
-Fri Mar 30 13:02:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (class fhandler_console): Add members `savebufsiz' and
- `savebuf' to allow save/restore of screen.
- * fhandler_console.cc (fhandler_console::dup): Duplicate `savebufsiz'
- and `savebuf'.
- (fhandler_console::fhandler_console): Initialize `savebufsiz' and
- `savebuf'.
- (fhandler_console::char_command): Add terminal capabilities
- "save screen content" = \E[?47h and "restore screen content" = \E[?47l.
-
-Wed Mar 28 19:28:50 2001 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (chdir): Eat trailing whitespace on input path.
-
-Tue Mar 27 22:38:42 2001 Christopher Faylor <cgf@cygnus.com>
-
- * lib/_cygwin_S_IEXEC.c: Remove "const" from globals or they never seem
- to be defined. Wrap definitions in extern "C". Include winsup.h to
- assure proper definitions.
-
- * dcrt0.cc (dll_crt0_1): Call stdio_init after premain run so that
- binmode.o, etc., will control default stdio settings.
- * dtable.cc (dtable::init_std_file_from_handle): Allow __fmode to force
- binmode/textmode settings. Default pipes to binmode.
-
-Tue Mar 27 11:31:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (mmap): Fix conditional for previous patch.
-
-Mon Mar 26 18:48:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (mmap): Outflank copy-on-write problem on 9x by
- setting access mode to FILE_MAP_READ when read access is requested.
-
-Sun Mar 25 20:12:21 2001 Christopher Faylor <cgf@cygnus.com>
-
- * dlfcn.cc (check_access): Eliminate.
- (check_path_access): Use passed in path_conv buf.
- (get_full_path_of_dll): Use passed in name buf to avoid a static. Rip
- out most of the path checking since LoadLibrary will do all of this
- automatically.
- (dlopen): Set errno when appropriate (may not be compliant?).
- * environ.cc (posify): Don't pass in "native" path if it seems to
- actually be posix.
-
-Thursday Mar 22 2001 Robert Collins <rbtcollins@hotmail.com>
-
- * fhandler.h (fhandler_dev_clipboard): Extend to support writing.
- * fhandler_clipboard.cc (fhandler_dev_clipboard::fhandler_dev_clipboard):
- Initialize new fields. Open clipboard here.
- (fhandler_dev_clipboard::dup): New method.
- (fhandler_dev_clipboard::open): Accommodate new fields. Register
- clipboard here, if appropriate.
- (set_clipboard): New function. Moves buffer to clipboard.
- (fhandler_dev_clipboard::write): Truly implement clipboard writing.
- (fhandler_dev_clipboard::read): Reimplement to allow successive reads.
- (fhandler_dev_clipboard::lseek): Truly implement seeks in clipboard.
- (fhandler_dev_clipboard::close): Clear out new fields. Support
- sequential reads and sequential writes. Support for binary data via a
- native clipboard format.
-
-2001-03-22 Egor Duda <deo@logos-m.ru>
-
- * fhandler_console.cc (fhandler_console::set_default_attr): Update
- console color attributes on tty reset.
-
-Wed Mar 21 22:12:36 2001 Christopher Faylor <cgf@cygnus.com>
-
- * autoload.cc (kernel32_init): New function for kernel32 autoload
- initialization.
- (SignalObjectAndWait): Add conditional load of this function when it is
- available.
-
-2001-03-21 Robert Collins <rbtcollins@hotmail.com>
-
- * sched.cc: New file. Implement sched*.
- * include/sched.h: New file. User land includes for sched*.
- * Makefile.in: Add sched.o
- * cygwin.din: Add exports for sched*.
-
-Tue Mar 20 14:48:46 2001 Christopher Faylor <cgf@cygnus.com>
-
- * dtable.cc: Guard against new winsock.h/winsock2.h warnings when
- mixing winsock*.h and sys/types.h.
- * fhandler_socket.cc: Ditto.
- * net.cc: Ditto.
- * select.cc: Ditto.
- * exceptions.cc: Remove unneeded define.
-
-Mon Mar 19 17:43:29 2001 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (interruptible): Update debugging output.
- (setup_handler): Ensure that wait_sig loop wakes up when we punt on
- sending a signal.
- * poll.cc (poll): Add signal guard here.
-
-2001-03-19 Egor Duda <deo@logos-m.ru>
-
- * tty.h (tty::create_inuse): Add new parameter to allow non-
- inheritable 'inuse' events.
- * tty.cc (tty::create_inuse): Use new parameter.
- * fhandler_tty.cc (fhandler_tty_master::init): Ditto.
- * fhandler_tty.cc (fhandler_pty_master::open): Ditto.
- * fhandler_tty.cc (fhandler_tty_master::init): Create master_alive
- event.
- * tty.cc (tty_list::terminate): Close master_alive event.
- * fhandler_tty.cc (fhandler_tty_common::close): Send EOF to slaves
- when master side is closed.
-
-Mon Mar 19 14:32:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (map::get_list_by_fd): Avoid calling `get_namehash' when
- file descriptor is -1.
-
-Sat Mar 17 18:30:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (check_posix_perm): New static function.
- (fpathconf): Add _PC_POSIX_PERMISSIONS and _PC_POSIX_SECURITY
- support.
- (pathconf): Ditto.
- * include/cygwin/version.h: Bump API minor number to 37.
-
-2001-03-18 Egor Duda <deo@logos-m.ru>
-
- * fhandler.h (fhandler_tty_slave): Declare new methods.
- * select.cc (fhandler_tty_slave::select_read): New method.
- * select.cc (fhandler_tty_slave::ready_for_read): Ditto.
- * select.cc (verify_tty_slave): New function.
- * fhandler_termios.cc (fhandler_termios::line_edit): Empty input
- buffer on signal.
- * fhandler_tty.cc (fhandler_tty_slave::read): Check for input data
- after reading from pipe. Reset event if input pipe is empty.
- * tty.h (class tty): Allow creating events with manual reset.
- * tty.cc (tty::get_event): Use manual_reset flag.
- * tty.cc (tty::common_init): Create input_available_event with
- manual reset.
-
-Sat Mar 17 21:48:03 2001 Christopher Faylor <cgf@cygnus.com>
-
- * external.cc (fillout_pinfo): Match windows pid, as well as cygwin pid
- when passed in pid. Don't prematurely break when searching for a pid.
-
- * thread.h (_winsup_t): Eliminate unneeded field.
-
-Sat Mar 17 20:46:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (get_95_ifconf): Use strcasematch instead of strcasecmp.
- * syscalls.cc (_unlink): Ditto.
- (_rename): Ditto.
-
-Sat Mar 17 12:43:15 2001 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (suffix_scan::next): Avoid searching for foo.lnk twice when
- input is "foo".
-
-Sat Mar 17 18:10:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (cygwin_socket): Set protocol to 0 when address family is
- AF_UNIX to avoid WSAEPROTONOSUPPORT error.
-
-Sat Mar 17 09:51:32 2001 Mathew Brozowski <brozow@tavve.com>
-
- * net.cc (cygwin_socket): Pass protocol parameter to socket call.
-
-Sat Mar 17 02:05:38 2001 Christopher Faylor <cgf@cygnus.com>
-
- * dir.cc (readdir): Use strcasematch for consistency.
- * path.cc (symlink_info): Eliminate known_suffix.
- (path_conv::check): Always copy ext_here to end of buffer, if found.
- (suffix_scan): Eliminate ext_here, add suffixes_start.
- (suffix_scan::has): Eliminate an argument. Reorganize. Always return
- pointer to end of input path.
- (suffix_scan::next): Take a second pass through the suffix list looking
- for .lnk.
- (symlink_info::check): Eliminate known_suffix usage.
-
-Sat Mar 17 00:10:52 2001 Christopher Faylor <cgf@cygnus.com>
-
- * syscalls.cc (stat_dev): Give devices full read/write by default.
-
-Saturday Mar 17 3:45 2001 Robert Collins <rbtcollins@hotmail.com>
-
- * thread.cc (MTinterface::CreateCond): Check for null attr pointer.
-
-Fri Mar 16 21:13:23 2001 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler_termios.cc (fhandler_termios::line_edit): Don't accept input
- when a signal is sent or we'll end up in an EOF/signal race.
-
-Fri Mar 16 20:25:40 2001 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc: Translate scan states from defines to enums.
- (suffix_scan): Rename state to nextstate for clarity.
- (lnk_match): Change to allow multiple states to indicate that a .lnk
- has been matched.
- (suffix_scan::has): Eliminate a goto. Handle .lnk as a special case,
- since a .lnk may also need to be tacked on the end of a .lnk.
- (suffix_scan::next): Don't increment next state. Set it specifically.
- Recognize new .lnk states.
-
-Saturday Mar 17 01:19 2001 Robert Collins rbtcollins@hotmail.com
-
- * cygwin.din: Export the new functions.
- * pthread.cc (pthread_cond_*): Add wrapper functions that call
- __pthread_cond* functions.
- * thread.cc (__pthread_cond_*): Implement the pthread_cond* functions.
- * thread.h: Add new class entries and prototypes for __pthread_cond*
- functions.
- * include/pthread.h: user land header prototypes for pthread_cond*
- functions and related defines.
-
-Wed Mar 14 16:30:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * environ.cc (parse_options): Use strtok_r instead of strtok.
- * security.cc (convert_string_sid_to_sid): Ditto.
- (aclfromtext): Ditto. Fix buffer usage.
-
-Wed Mar 14 10:11:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (lnk_suffixes): Remove.
- (class suffix_scan): Add `lnk_state' flag.
- (suffix_scan::lnk_match): Return state of `lnk_state' now.
- (suffix_scan::has): Changed behaviour if file has `.lnk' suffix.
- (suffix_scan::next): Set `lnk_state' where appropriate.
- (symlink_info::check): Fix a wrong `break'.
- * syscalls.cc (chown_worker): Change debug statement to reflect
- lchown fix.
- (lchown): Call chown_worker with `PC_SYM_NOFOLLOW' instead of
- `PC_SYM_IGNORE'.
-
-Tue Mar 13 13:52:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_disk_file::fstat): Add correct modes to
- symlinks when stat'ing on FAT or FAT32 file systems.
-
-2001-03-12 Egor Duda <deo@logos-m.ru>
-
- * fhandler.h (fhandler_termios::fixup_after_exec): New function.
- * fhandler_termios.cc (fhandler_termios::fixup_after_fork): New
- function. Fixup output handle.
- * fhandler_tty.cc (fhandler_tty_common::fixup_after_fork): Output
- handle is now fixed up in fhandler_termios::fixup_after_fork().
-
-2001-03-12 Egor Duda <deo@logos-m.ru>
-
- * fhandler.h (fhandler_termios::fhandler_termios): Enable fixup
- after fork.
- * fhandler_console.cc (fhandler_console::fhandler_console): Fixup
- after fork is now enabled in the base class constructor.
-
-Mon Mar 12 11:19:41 2001 Christopher Faylor <cgf@cygnus.com>
-
- * mkvers.sh: Include config.h so that DEBUGGING is correctly defined.
-
-Mon Mar 12 09:47:55 2001 Christopher Faylor <cgf@cygnus.com>
-
- * spawn.cc (spawn_guts): Don't set EXIT_REPARENTING if parent process
- is not a cygwin process (suggested by Jason Gouger
- <cygwin@jason-gouger.com>).
-
-Sun Mar 11 16:00:58 2001 Christopher Faylor <cgf@cygnus.com>
-
- * child_info.h: Bump magic number for fork/exec/spawn.
-
-Sat Mar 10 20:54:47 2001 Christopher Faylor <cgf@cygnus.com>
-
- * autoload.cc (noload): Use proper method for multiline strings or
- newer gcc's complain.
- * exceptions.cc (unused_sig_wrapper): Ditto.
- * fhandler.h (fhandler_base): Make get_io_handle and friends return
- self.
- * fhandler_tty.cc (fhandler_pty_common::close_on_exec): Accommodate
- DEBUGGING flag to avoid spurious warnings when inheritance is set.
-
-Sat Mar 10 16:52:12 2001 Christopher Faylor <cgf@cygnus.com>
-
- * shortcut.c (PATH_ALL_EXEC): Add parentheses to avoid a compiler
- warning.
-
- * exceptions.cc (setup_handler): Clarify debugging message.
- * sigproc.cc (proc_subproc): Remove PROC_CHILDSTOPPED test. It is
- handled by normal PROC_CLEARWAIT case.
- (wait_sig): Eliminate "dispatched" tracking. Remove __SIGCHILDSTOPPED
- test. Decrement counter again before jumping out of
- InterlockedDecrement loop so that subsequent InterlockedIncrement will
- keep the counter at the correctly decremented value and also detect
- when there are pending signals.
- * sigproc.h: Remove __SIGCHILDSTOPPED element.
- (procstuff): Remove PROC_CHILDSTOPPED element.
-
-Sat Mar 10 15:22:44 2001 Christopher Faylor <cgf@cygnus.com>
-
- * syscalls.cc (_rename): Set errno to ENOENT when an old path doesn't
- exist (from Kazuhiro Fujieda <fujieda@jaist.ac.jp>). Also set EACCES
- when directory is not writable.
-
-Wed Mar 7 15:49:47 2001 Christopher Faylor <cgf@cygnus.com>
-
- * syscalls.cc (_read): Change definition to return ssize_t to be
- consistent with read.
- (_write): Change definition to return ssize_t to be consistent with
- write.
-
-Wed Mar 7 01:08:21 2001 Christopher Faylor <cgf@cygnus.com>
-
- * sigproc.h (sigthread): Declare new methods. Create new winapi_lock
- field.
- (sigframe:;set): Call get_winapi_lock after frame is set so that signal
- handler thread knows not to call SuspendThread.
- (sigframe::~sigframe): Release winapi_lock.
- * exceptions.cc (sigthread::get_winapi_lock): New method.
- (sigthread::release_winapi_lock): New method.
- (setup_handler): Use get_winapi_lock to ensure that signalled thread is
- not blocked in a Windows API.
-
- * path.h (path_types): Avoid broken GCC warning.
-
-Tue Mar 6 14:02:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (suffix_scan::has): Change order of conditionals
- to allow checking for .lnk suffixes even if in_suffixes is empty.
-
-Tue Mar 6 13:02:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.c (cygwin_premain0): Add missing parameter.
- * binmode.c (cygwin_premain0): Ditto.
- * textmode.c (cygwin_premain0): Ditto.
-
-Tue Mar 6 12:04:00 2001 Jason Tiller <jtiller@sjm.com>
-
- * auto_load.cc: Add "GetKeyboardLayout" entry in the list of
- Win32 User32.DLL exports to provide.
- * fhandler.h (class fhandler_console): Add meta_mask private
- member to remember which keystroke modifiers should generate
- META.
- * fhandler_console.cc (fhandler_console::read): Modify code that
- tests a keystroke for a META-escaped key to use the 'meta_mask'
- variable.
- (fhandler_console::fhandler_console): Add definition for
- variable "meta_mask" used to determine if a keystroke should be
- preceded by META in the client console stream. Set meta_mask
- based on whether or not user's keyboard language is English -
- non-English keyboards pass AltGr (right <ALT>) unmolested,
- whereas English keyboards now interpret left- and right-<ALT>
- as META.
-
-Mon Mar 5 20:15:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * include/a.out.h: Add copyright hint.
- * include/fcntl.h: Ditto.
- * include/lastlog.h: Ditto.
- * include/memory.h: Ditto.
- * include/mntent.h: Ditto.
- * include/paths.h: Ditto.
- * include/poll.h: Ditto.
- * include/syslog.h: Ditto.
- * include/termio.h: Ditto.
- * include/tzfile.h: Ditto.
- * include/arpa/inet.h: Ditto.
- * include/asm/byteorder.h: Ditto.
- * include/asm/socket.h: Ditto.
- * include/asm/types.h: Ditto.
- * include/cygwin/if.h: Ditto.
- * include/cygwin/mtio.h: Ditto.
- * include/cygwin/rdevio.h: Ditto.
- * include/cygwin/socket.h: Ditto.
- * include/net/if.h: Ditto.
- * include/netinet/in.h: Ditto.
- * include/netinet/in_systm.h: Ditto.
- * include/netinet/ip.h: Ditto.
- * include/netinet/ip_icmp.h: Ditto.
- * include/netinet/tcp.h: Ditto.
- * include/sys/cdefs.h: Ditto.
- * include/sys/cygwin.h: Ditto.
- * include/sys/ioctl.h: Ditto.
- * include/sys/mman.h: Ditto.
- * include/sys/mount.h: Ditto.
- * include/sys/mtio.h: Ditto.
- * include/sys/procfs.h: Ditto.
- * include/sys/resource.h: Ditto.
- * include/sys/smallprint.h: Ditto.
- * include/sys/socket.h: Ditto.
- * include/sys/strace.h: Ditto.
- * include/sys/syslog.h: Ditto.
- * include/sys/sysmacros.h: Ditto.
- * include/sys/termio.h: Ditto.
- * include/sys/termios.h: Ditto.
- * include/sys/uio.h: Ditto.
- * include/sys/un.h: Ditto.
- * include/sys/utsname.h: Ditto.
- * include/sys/vfs.h: Ditto.
- * include/sys/wait.h: Ditto.
- * regexp/regerror.c: Ditto.
- * regexp/regexp.h: Ditto.
- * regexp/regmagic.h: Ditto.
-
-Mon Mar 5 01:25:03 2001 Christopher Faylor <cgf@cygnus.com>
-
- * dlopen.c (dlopen): Return NULL when name is NULL (suggested by
- chrisiasci@aol.com).
-
- * cygwin.din: Add a new, internally used export -
- _check_for_executable.
- * dcrt0.cc (dll_crt0_1): Set _check_for_executable for older binaries.
- Pass user_data to premain functions.
- * fhandler.cc (fhandler_disk_file::open): Only check for executable if
- the linked program is interested in the executable bit.
- (fhandler_disk_file::check_execable_p): Delete.
- * fhandler.h (executable_states): New enumeration of various states of
- executable bit caring.
- (fhandler_base::set_execable_p): New method.
-
- * fhandler_termios.cc (fhandler_termios::line_edit): Flag when a signal
- has been sent to the tty. Return -1 when this is so.
- * fhandler_console.cc (fhandler_console::read): Return -1 when signal
- sending character encountered.
-
- * path.cc (path_conv::check): Record when path refers to a disk device.
- Move executable extension check here.
- (check_sysfile): Accommodate new EXEC path states.
- (has_suffix): Remove.
- (next_suffix): Remove.
- (class suffix_scan): New clas.
- (suffix_scan::has): New method.
- (suffix_scan:next): New method.
- (symlink_info::check): Use suffix_scan method to control for scanning
- for suffixes.
- * path.h (path_conv::exec_state): New method.
- * perprocess.h: Make "C" friendly.
- * include/cygwin/version.h: Define CYGWIN_VERSION_CHECK_FOR_S_IEXEC.
- Bump CYGWIN_VERSION_API_MINOR.
- * include/sys/cygwin.h: Change premain declarations.
-
- * winsup.h: Move __cplusplus test to after builtin defines.
-
-2001-03-04 Egor Duda <deo@logos-m.ru>
-
- * fhandler.h (class fhandler_tty_common): New mutex and event to
- syncronize input on master tty with slave tty.
- * fhandler_tty.cc (fhandler_pty_master::accept_input): Use them to
- syncronize with slave.
- * fhandler_tty.cc (fhandler_tty_slave::read): Use input mutex and
- event to syncronize with master. Do not limit amount of data read
- from master to vmin value. Interrupt on signal and return already
- read data, if any.
- * fhandler_tty.cc (fhandler_tty_slave::open): Handle input mutex and
- event.
- * fhandler_tty.cc (fhandler_tty_common::close): Ditto.
- * fhandler_tty.cc (fhandler_tty_common::set_close_on_exec): Ditto.
- * fhandler_tty.cc (fhandler_tty_common::fixup_after_fork): Ditto.
- * fhandler_tty.cc (fhandler_tty_common::dup): Ditto.
- * tty.h (tty::open_input_mutex): New function.
- * tty.cc (tty::common_init): Create input mutex and event.
-
-Fri Mar 2 13:32:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * dir.cc (readdir): Fix creating path in symlink check.
-
-Fri Mar 2 12:33:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * dir.cc (readdir): Fix shortcut==symlink condition.
- * environ.cc: Add extern decl for `allow_winsymlinks'.
- (struct parse_thing): Add entry for `[no]winsymlinks'.
- * path.cc (symlink): Change to be able to create both,
- symlink==shortcut and symlink==systemfile, dependent of
- the setting of `allow_winsymlinks'.
- * security.cc (cygwin_logon_user): Add debug output.
- * shortcut.c: Add defines from path.h.
- (has_exec_chars): Copy from path.h.
- (check_shortcut): Check for executable file condition if not a
- shortcut.
-
-Thu Mar 1 21:06:07 2001 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (sig_handle_tty_stop): Ignore attempts to suspend a
- process if started by non-cygwin parent.
-
-Thu Mar 1 20:48:11 2001 Christopher Faylor <cgf@cygnus.com>
-
- * select.cc (peek_console): Don't report read_ready on mouse events
- unless we are looking for mouse events.
- * fhandler.h (fhandler_console::mouse_aware): New method.
-
-Wed Feb 28 15:10:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * uinfo.cc: Eliminate `#include <wchar.h>'.
-
-2001-02-28 Egor Duda <deo@logos-m.ru>
-
- * fhandler_floppy.cc (fhandler_dev_floppy::lseek): Determine
- drive geometry or partition size to allow seeking from the end of
- raw floppy device. Don't allow positioning past the end of media or
- to offsets bigger then max off_t.
-
-2001-02-27 Egor Duda <deo@logos-m.ru>
-
- * fhandler.h (class fhandler_console): Make all variables that
- describe "state" of console to be members of fhandler_console.
- default_color is now the color which is set when console recieves
- reset command.
- * fhandler_console.cc (fhandler_console::fhandler_console): Turn
- mouse handling and raw keyboard mode off by default. Initialize
- state information.
- * fhandler.cc (fhandler_console::set_raw_win32_keyboard_mode): New
- function.
- * fhandler_console.cc (fhandler_console::set_default_attr): New
- function. Reset console attributes to default values.
- * fhandler_console.cc (fhandler_console::open): Reset attributes.
- * fhandler_console.cc (fhandler_console::get_win32_attr): New function.
- Calculate win32-style console attribute based on terminal attributes.
- * fhandler_console.cc (fhandler_console::set_cursor_maybe): Use
- member variable.
- * fhandler_console.cc (fhandler_console::read): If in raw-win32
- keyboard mode, encode win32 keyboard events in \033{x;y;z;t;u;wK
- sequences.
- * fhandler_console.cc (fhandler_console::dup): Copy all state
- information to the dup()ed handle.
- * fhandler_console.cc (fhandler_console::scroll_screen): Use current
- fill-in attribute.
- * fhandler_console.cc (fhandler_console::clear_screen): Ditto.
- * fhandler_console.cc (fhandler_console::char_command): Check if we
- saw '?' symbol by member variable. Set terminal attributes on \033[Xm
- commands. \033[24m - turn off underline mode, \033[27m - turn off
- reverse mode, \033[39m - restore default foreground color.
- \033[49m - restore default background color. \033[2000h - turn on raw
- keyboard mode, \033[2000l - turn off raw keyboard mode.
- * fhandler_console.cc (fhandler_console::write): Set attribues to
- default values on reset command.
-
-2001-02-26 Mike Simons <msimons@moria.simons-clan.com>
-
- * times.cc (settimeofday): Replace function stub with working code.
-
-Mon Feb 26 10:42:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * strace.cc (strace::vprntf): Move prntf functionality to this function
- adding an va_list interface to strace.
- (strace::printf): Calls strace::vprntf now.
- (strace_printf): New function providing an extern "C" interface to
- trace output.
- * include/sys/strace.h: Make plain C clean.
- (class strace): Add `vprntf' method.
-
-Mon Feb 26 0:10:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * shortcut.c: Remove #include <sys/strace.h>.
-
-Sun Feb 25 10:32:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (symlink): Add a ".lnk" suffix regardless. Add a comment.
-
-Sun Feb 25 10:18:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * shortcut.c (check_shortcut): Change symlink condition.
-
-Fri Feb 23 10:42:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (fhandler_disk_file::mmap): Use `addr' correctly.
- * fhandler_mem.cc (fhandler_dev_mem::mmap): Ditto.
-
-Thu Feb 22 17:09:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (symlink): Keep relative paths relative in the DOS
- path inside of a shortcut. If that's impossible or the target
- path is already absolute save an absolute path.
-
-Thu Feb 22 15:33:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * cygerrno.h: Revert previous patch.
- * errno.cc: Ditto.
- * dir.cc: Eliminate `dir_suffixes'.
- (opendir): Remove usage of `dir_suffixes'.
- (rmdir): Ditto.
- * fhandler.cc (fhandler_disk_file::open): Remove usage of
- `inner_suffixes'.
- * path.cc: Rename `inner_suffixes' to `lnk_suffixes'.
- (path_conv::check): Remove usage of `inner_suffixes'.
- (symlink): Ditto.
- (symlink_info::check): Handle checking for `.lnk' in path_conv
- exclusively here.
- (chdir): Remove usage of `dir_suffixes'.
- * shortcut.c: Eliminate debug_printf lines.
- (check_shortcut): Don't set error except on failing ReadFile.
- * spawn.cc: Remove ".lnk" from `std_suffixes'.
- * syscalls.cc (_unlink): Remove usage of `inner_suffixes'.
- Remove ".lnk" from `stat_suffixes'.
- (_rename): Add check for renaming a symlink to keep the ".lnk"
- suffix after renaming.
-
-Thu Feb 22 13:38:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * shortcut.c: New file. Provides a C interface to reading of
- Windows shortcuts to avoid compiler flag `-fvtable-thunks'.
- * shortcut.h: Ditto.
- * Makefile.in: Add shortcut.o to DLL_OFILES.
- * cygerrno.h: Provide a C interface to `geterrno_from_win_error' for
- using in shortcut.c.
- * errno.cc (geterrno_from_win_error): Define as extern "C".
- * path.cc (struct symlink_info): Remove methods `check_shortcut' and
- `check_sysfile'.
- (shortcut_header): Move to shortcut.c.
- (shortcut_initalized): Ditto.
- (create_shortcut_header): Ditto.
- (cmp_shortcut_header): Ditto.
- (symlink_info::check_shortcut): Ditto. Reorganize as a plain C function.
- (symlink_info::check_sysfile): Redefine as a global function using the
- same parameter list as `check_shortcut' for clearness.
- (symlink_info::check): Change parameter list for calls to
- `check_shortcut' and `check_sysfile'.
-
-Thu Feb 22 12:04:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_disk_file::open): Use `inner_suffixes' when
- resolving real_path.
- * path.cc (symlink): Ditto for win32_topath.
-
-Wed Feb 21 22:41:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in: Add `-lshell32 -luuid' to link pass for new-cygwin1.dll.
- * autoload.cc: Add LoadDLLinitfunc for ole32.dll.
- Add LoadDLLfuncEx statements for CoInitialize@4, CoUninitialize@0
- and CoCreateInstance@20.
- * dir.cc (dir_suffixes): New datastructure.
- (readdir): Check for R/O *.lnk files to hide the suffix.
- (opendir): Use `dir_suffixes' in path conversion.
- (rmdir): Ditto.
- * fhandler.cc (fhandler_disk_file::fstat): Add S_IFLNK flag
- before calling `get_file_attribute'. Take FILE_ATTRIBUTE_READONLY
- into account only if the file is no symlink.
- * path.cc (inner_suffixes): New datastructure.
- (SYMLINKATTR): Eliminated.
- (path_conv::check): Use `inner_suffixes' on inner path components.
- (shortcut_header): New global static variable.
- (shortcut_initalized): Ditto.
- (create_shortcut_header): New function.
- (cmp_shortcut_header): Ditto.
- (symlink): Create symlinks by creating windows shortcuts. Preserve
- the old code.
- (symlink_info::check_shortcut): New method.
- (symlink_info::check_sysfile): Ditto.
- (symlink_info::check): Check for shortcuts. Move code reading
- old system attribute symlinks into symlink_info::check_sysfile().
- (chdir): Use `dir_suffixes' in path conversion.
- * security.cc (get_file_attribute): Check for S_IFLNK flag.
- Force 0777 permissions then.
- * spawn.cc (std_suffixes): Add ".lnk" suffix.
- * syscalls.cc (_unlink): Use `inner_suffixes' in path conversion.
- Check for shortcut symlinks to eliminate R/O attribute before
- calling DeleteFile().
- (stat_suffixes): Add ".lnk" suffix.
- (stat_worker): Force 0777 permissions if file is a symlink.
-
-2001-02-21 Egor Duda <deo@logos-m.ru>
-
- * sigproc.cc (getsem): Make semaphore always non-inheritable.
-
-Mon Feb 19 22:25:53 2001 Christopher Faylor <cgf@cygnus.com>
-
- * dcrt0.cc (locale_init): Remove.
-
-2001-02-15 Kazuhiro Fujieda <fujieda@jaist.ac.jp>
-
- * cygwin.din: Export rand48 functions.
- * thread.cc (MTinterface::Init): Remove the initialization of
- `reent_data'.
- * dcrt0.cc: Add the initalizer to the declaration of `reent_data'.
- * include/cygwin/version.h: Bump CYGWIN_VERSION_API_MINOR to 35.
-
-2001-02-16 Egor Duda <deo@logos-m.ru>
-
- * signal.cc (signal): Prohibit setting handlers for SIGKILL and
- SIGSTOP
- * signal.cc (sigaction): Ditto
- * syscalls.cc (_lseek): Return EINVAL on invalid input
-
-Wed Feb 14 14:54:40 2001 Christophe Iasci <chrisiasci@aol.com>
-
- * dlfcn.cc (dlopen): Do not call LoadLibrary with a NULL pointer, when
- the library is not found
-
-2001-02-14 Egor Duda <deo@logos-m.ru>
-
- * fhandler_console.cc (fhandler_console::char_command): Ignore unknown
- rendition codes in \033[xx;yym control sequences
-
-Fri Feb 9 23:19:01 2001 Christopher Faylor <cgf@cygnus.com>
-
- * fork.cc (fork_parent): Return EAGAIN when can't record pid.
- * pinfo.h (pinfo::remember): Return value of call to proc_subproc.
- * sigproc.cc (proc_subproc): Return error if can't record pid.
-
-Fri Feb 9 12:17:27 2001 Christopher Faylor <cgf@cygnus.com>
-
- * syscalls.cc (mknod): Add valid parameters.
-
-Thu Feb 8 22:09:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (mmap): Check for reusing a mapping only on MAP_SHARED
- and on MAP_PRIVATE|MAP_ANON in the special case of offset 0.
-
-Thu Feb 8 21:57:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (class list): Add member `hash'.
- (list::list): Initialize `hash'.
- (list::get_list_by_fd): Use filepath hash value to get the correct
- mapping list if it's not an anonymous mapping.
- (map::add_list): Initialize `hash' with filepath hash value.
- (mmap): Check for reusing a mapping only on MAP_SHARED.
-
-Wed Feb 7 18:47:36 2001 Christopher Faylor <cgf@cygnus.com>
-
- * signal.cc (killpg): Correct first argument.
-
-Wed Feb 7 22:22:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc: Add LoadDLLinitfunc for iphlpapi.dll.
- Add LoadDLLfuncEx statements for GetIfTable@12 and GetIpAddrTable@12.
- * fhandler_socket.cc (fhandler_socket::ioctl): Move variable
- definitions to the beginning of the function to allow better debugging.
- Add handling for SIOCGIFHWADDR, SIOCGIFMETRIC and SIOCGIFMTU.
- * net.cc: Include iphlpapi.h.
- (get_2k_ifconf): Rewritten. Uses IP Helper API now.
- (get_nt_ifconf): Add handling for SIOCGIFHWADDR, SIOCGIFMETRIC
- and SIOCGIFMTU.
- (get_95_ifconf): Ditto. Renamed from `get_9x_ifconf'.
- (get_ifconf): Name loopback `lo' instead of `lo0' as in Linux.
- Add handling for SIOCGIFHWADDR, SIOCGIFMETRIC and SIOCGIFMTU.
- Call `get_95_ifconf' only on Windows 95, `get_nt_ifconf' only
- on Windows NT < Service Pack 3, `get_2k_ifconf otherwise.
- * include/asm/socket.h: Add defines for SIOCGIFHWADDR, SIOCGIFMETRIC
- and SIOCGIFMTU.
- * include/cygwin/if.h: Add `ifr_hwaddr', `ifr_metric' and `ifr_mtu'.
- (struct ifreq): Add `ifru_hwaddr'.
-
-Tue Feb 6 15:04:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (stat_worker): Add a check for the special case when
- a process creates a file using mode 000 using ntsec.
-
-Mon Feb 5 17:00:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::open): Always add GENERIC_READ access
- when opening raw disk devices.
- * fhandler_floppy.cc (fhandler_dev_floppy::lseek): Implement bytewise
- access.
- * fhandler_raw.cc (fhandler_dev_raw::open): Always open raw disk device
- binary.
- (fhandler_dev_raw::raw_write): Don't drop read buffer content when
- writing after read.
-
-Mon Feb 5 13:30:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (mmap_record::fixup_map): New method to duplicate
- the memory protection in a just forked child.
- (mmap): Realign gran_len to page boundary only on anonymous
- mapping before saving in the mmap_record.
- (munmap): Cleanup code.
- (msync): Ditto.
- (fixup_mmaps_after_fork): Ditto. Call mmap_record::fixup_map now.
-
-Thu Feb 1 23:08:29 2001 Christopher Faylor <cgf@cygnus.com>
-
- * cygheap.cc (creturn): Correctly calculate cygheap_max.
-
-Wed Jan 31 10:04:58 2001 Christopher Faylor <cgf@cygnus.com>
-
- * shared.cc (shared_info::initialize): Reduce size of heap.
-
-Wed Jan 31 13:22:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * include/sys/resource.h: Fix typo.
-
-Wed Jan 31 13:20:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * include/sys/resource.h: Add RLIMIT_NLIMITS and RLIM_NLIMITS.
-
-Tue Jan 30 18:15:23 2001 Christopher Faylor <cgf@cygnus.com>
-
- * include/cygwin/version.h: Bump version to 1.3.0.
-
-Tue Jan 30 8:55:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * pinfo.cc (pinfo::init): Use INVALID_HANDLE_VALUE instead of
- explicit cast (HANDLE) 0xffffffff.
- * shared.cc (open_shared): Ditto.
-
-Mon Jan 29 17:15:22 2001 Bill Hegardt <bill@troyxcd.com>
-
- * fhandler_serial.cc (raw_write): Use local copy of OVERLAPPED
- structure instead of shared structure to fix a race condition between
- read/write.
-
-Mon Jan 29 14:30:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (mmap): Remove obsolete check for MAP_SHARED|MAP_ANON as
- being invalid.
-
-Mon Jan 29 10:23:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (mmap_record::find_empty): Fix loop condition.
-
-Sun Jan 28 19:40:40 2001 Christopher Faylor <cgf@cygnus.com>
-
- * syscalls.cc (_link): Make sure that newpath does not exist. Set
- errno if it does.
-
-Sun Jan 28 19:29:08 2001 Christopher Faylor <cgf@cygnus.com>
-
- * cygheap.cc (init_cheap): Don't specify a load address for the heap.
- It doesn't work on #!*& Windows 9x.
- (cygheap_init): Move GetUserName to memory_init.
- * dcrt0.cc (dll_crt0_1): Call new memory_init functin, eliminate call
- to heap_init.
- * heap.cc (heap_init): Improve error output.
- * heap.h: Correct some declarations.
- * shared.cc (mount_table_init): Remove.
- (memory_init): Renamed from shared_init. Reorganize to accommodate
- strange Windows 9x problems with cygheap/heap interaction.
- * shared_info.h: Rename shared_init to memory_init.
-
-Sun Jan 28 01:25:33 2001 Christopher Faylor <cgf@cygnus.com>
-
- * include/cygwin/version.h: Bump API version.
-
-Sun Jan 28 01:18:22 2001 Christopher Faylor <cgf@cygnus.com>
-
- * cygheap.cc (init_cheap): Move username initialization.
- (cygheap_init): Here.
- * shared_info.h (mount_info): Add a sys_mount_table_counter field.
- (shared_info): Ditto.
- * path.cc (mount_info::conv_to_win32_path): Check that our mount table
- is in sync with the system mount table and reinitialize it if not.
- (mount_info::add_reg_mount): Bump sys_mount_table counters if the
- system mount table changes.
- (mount_info::del_reg_mount): Ditto.
- (mount_info::write_cygdrive_info_to_registry): Ditto.
- (mount_info::remove_cygdrive_info_from_registry): Ditto.
-
-Sun Jan 28 00:28:30 2001 Christopher Faylor <cgf@cygnus.com>
-
- Throughout, change 'cygwin_shared.mount' to 'mount_table'.
- * child_info.h (child_info): Move shared_h, console_h to cygheap. Add
- mount_h.
- * cygheap.h (init_cygheap): Add shared_h, console_h.
- * cygheap.cc (init_cheap): Initialize heap at a fixed location after
- the shared memory regions. Initialize cygheap->user name here.
- * dcrt0.cc (dll_crt0_1): Call getpagesize () to initialize constants.
- Remove cygheap_init since it is done in shared_init now.
- (_dll_crt0): Initialize mount_h, remove shared_h and console_h
- initialization.
- * fhandler_console.cc (console_shared_h): Eliminate.
- (get_tty_stuff): Use cygheap->console_h rather than console_shared_h.
- * heap.cc (heap_init): Use page size constant calculated earlier in
- initialization.
- * shared.cc: Eliminate cygwin_shared_h. Add cygwin_mount_h.
- (mount_table_init): New function for initializing a user mount table.
- (open_shared_file_map): Use constant for shared memory region.
- Initialize cygheap and mount table here.
- (open_shared): Improve debugging output.
- (shared_info::initialize): Eliminate call to mount.init.
- (shared_terminate): Use cygheap->shared_h. Close cygwin_mount_h.
- (open_shared_file_map): Eliminate.
- * shared_info.h (mount_info): Add a version field.
- (shared_align_past): New macro for calculating location for shared
- memory regions.
- * sigproc.cc (init_child_info): Eliminate shared_h, console_h.
- * spawn.cc (spawn_guts): Pass on cygwin_mount_h iff not a different
- user.
- * syscalls.cc (system_info): New global holding system memory defaults.
- (getpagesize): Use system_info.
- * uinfo.cc (internal_getlogin): Only fill in user name if nonexistent.
- * winsup.h: Declare system_info.
-
- * passwd.cc (read_etc_passwd): Use cygheap->user.name () rather than
- retrieving the name again.
-
-Sat Jan 27 10:18:02 2001 Christopher Faylor <cgf@cygnus.com>
-
- * path.cc (path_conv::check): Detect when path has symlinks.
- (symlink_info::check): Remove debugging stuff.
- (chdir): Use posix'ized win32 path if cd'ed to a path using symlinks.
-
-Fri Jan 26 21:20:28 2001 Christopher Faylor <cgf@cygnus.com>
-
- * exceptions.cc (sigreturn): Call any pending signals prior to
- resetting the signal mask so that stacked signals behave correctly.
- (sigdelayed): Avoid a race where a signal could end up calling an
- incorrect signal handler if two signals come in close together.
-
-Tue Jan 23 21:56:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (fhandler_disk_file::mmap): Call CreateFileMapping with
- len != 0 only when performing an anonymous mapping.
-
-Mon Jan 22 15:35:28 2001 Christopher Faylor <cgf@cygnus.com>
-
- * path.h: Add a new constant.
- * syscalls.cc (_read): Oscillate errno check.
-
-Mon Jan 22 15:27:12 2001 Christopher Faylor <cgf@cygnus.com>
-
- * include/cygwin/version.h: Bump API to reflect setlogmask.
-
-Sun Jan 21 22:40:25 2001 Jason Tishler <jt@dothill.com>
-
- * cygwin.din: Add export for setlogmask().
- * syslog.cc (setlogmask): New function.
-
-Thu Jan 18 10:27:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * resource.cc (setrlimit): Support RLIMIT_NOFILE.
-
-Wed Jan 17 23:23:12 2001 Christopher Faylor <cgf@cygnus.com>
-
- * syscalls.cc (setdtablesize): Call with amount to increment not total
- amount. Return success or failure error code.
-
-Wed Jan 17 09:47:13 2001 Christopher Faylor <cgf@cygnus.com>
-
- * autoload.cc (LoadDLLinitfunc): Remove debugging statement.
-
- * exceptions.cc (sig_handle_tty_stop): Move setting of PID_STOPPED to
- earlier in interrupt.
- (interrupt_setup): i.e., here.
- (sig_handle): Don't queue multiple SIGSTOPS.
- * fhandler.h (bg_check_types): Enumerate return value of bg_check for
- clarity.
- * signal.cc (kill_pgrp): Minor cleanup.
- * fhandler_termios.cc (fhandler_termios::bg_check): Use enumerated type
- for function return. Don't raise signal if a signal is already queued.
- * fhandler_console.cc (fhandler_console::read): Use enumerated return
- type for bg_check.
- * select.cc: Ditto, throughout.
- * read.cc: Ditto, throughout.
- * termios.cc: Ditto, throughout.
- (_read): YA interrupt detect simplification.
- * wait.cc (wait4): Ditto.
-
-Wed Jan 17 10:56:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.cc (cygheap_user::~cygheap_user): Temporarily
- disable free'ing memory.
-
-Tue Jan 16 18:01:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (mmap): Initialize fh to avoid compiler warnings.
-
-Mon Jan 15 21:07:00 2001 Christopher Faylor <cgf@cygnus.com>
-
- * wait.cc (wait4): Rename variable for consistency. Allow restartable
- signal behavior.
-
-Mon Jan 15 23:15:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (mmap): Add more parameter checking. Change error output
- in case of EINVAL. Treat mmapping /dev/zero like MAP_ANONYMOUS.
-
-Mon Jan 15 20:34:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc: include <unistd.h>. Define some bit operations for
- the new page map.
- (mmap_record): Change type of base_address_ to caddr_t.
- Add map_map_ member. Add several methods to manipulate map_map_.
- (mmap_record::alloc_map): New method.
- (mmap_record::free_map): Ditto.
- (mmap_record::find_empty): Ditto.
- (mmap_record::map_map): Ditto.
- (mmap_record::unmap_map): Ditto.
- (list::add_record): Change return type to `mmap_record *'.
- Allocate page map.
- (list::match): New method.
- (mmap): Partly rewritten to take care for the new page map. Add some
- parameter checking.
- (munmap): Ditto.
-
-Mon Jan 15 13:50:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * heap.cc (heap_init): Fix extern declaration of getpagesize.
- * syscalls.cc (getpagesize): Fix another typo.
-
-Mon Jan 15 12:48:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (getpagesize): Save pagesize in global variable to
- avoid calling GetSystemInfo too often.
- * heap.cc (getpagesize): Eliminate.
- (heap_init): Use getpagesize function from syscalls.cc.
-
-Mon Jan 15 11:56:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * sysconf.cc (sysconf): return `getpagesize ()' on _SC_PAGESIZE
- request to avoid implementing the same twice.
-
-Sun Jan 14 14:07:50 2001 Christopher Faylor <cgf@cygnus.com>
-
- * syscalls.cc (_read): Use more lightweight method for determining if
- read has been interrupted by a signal.
-
-Fri Jan 12 00:35:15 2001 Christopher Faylor <cgf@cygnus.com>
-
- * debug.h: Add regparm attributes to some functions.
-
- * signal.cc (sigaction): Don't treat SIGCONT specially.
-
- * exceptions.cc (interrupt_setup): Save sa_flags of interrupted signal
- for later use.
- (sig_handler): Default any stopping signal to SIGSTOP.
- (call_signal_handler): New function.
- (sigdelayed0): New function.
- * sigproc.cc (sigproc_init): Initialize SIGSTOP sigaction for special
- behavior.
- * sigproc.h: Define call_signal_handler.
- * syscalls.cc (_read): Allow restartable signal behavior.
-
-Thu Jan 11 13:17:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (fhandler_base): New method `fixup_mmap_after_fork'.
- (fhandler_disk_file: Ditto.
- (fhandler_dev_mem): Ditto.
- * fhandler_mem.cc (fhandler_dev_mem::open): Set OBJ_INHERIT attribute
- for device\physicalmemory handle.
- (fhandler_dev_mem::mmap): Ditto.
- * fhandler_mem.cc (fhandler_dev_mem::fixup_mmap_after_fork): New
- method.
- * mmap.cc (mmap_record): Add private `fdesc_' member. Change
- constructor accordingly.
- (get_fd): New method.
- (mmap): Use new mmap_record constructor.
- (fhandler_base::fixup_mmap_after_fork): New method.
- (fhandler_disk_file::fixup_mmap_after_fork): Ditto.
- (fixup_mmaps_after_fork): Call `fixup_mmap_after_fork' of appropriate
- fhandler class.
-
-Wed Jan 10 22:08:30 2001 Kazuhiro Fujieda <fujieda@jaist.ac.jp>
-
- * sigproc.cc (wait_sig): Allow SIGCONT when stopped.
-
-Tue Jan 9 16:55:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- Patch suggested by René Møller Fonseca <fonseca@mip.sdu.dk>
- * include/sys/socket.h: Change prototype to have 2nd parameter `const'.
- * net.cc (cygwin_bind): Change 2nd parameter to `const'.
-
-Sun Jan 7 22:59:37 2001 Christopher Faylor <cgf@cygnus.com>
-
- * pinfo.cc (codepage_init): Move function.
- * environ.cc (codepage_init): To here.
- * exceptoins.cc (SIG_NONMASKABLE): Remove SIGCONT from consideration
- since it is supposed to be maskable.
- * signal.cc (sigaction): Ditto.
- * sigproc.cc (wait_sig): Ditto.
- * winsup.h: Eliminate global declaration of codepage_init.
-
-Thu Jan 5 9:33:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * resource.cc (getrlimit): Set errno on EFAULT instead of returning
- it.
- (setrlimit): Ditto.
-
-Thu Jan 5 3:38:00 2001 David Sainty <David.Sainty@optimation.co.nz>
-
- * resource.cc (setrlimit): Prevent failing with an error when the
- operation would not have changed anything.
-
-Thu Jan 4 10:29:54 2001 Earnie Boyd <earnie_boyd@yahoo.com>
-
- * thread.cc: Need LONG_MAX definition.
-
-Wed Jan 3 13:47:23 2001 Christopher Faylor <cgf@cygnus.com>
-
- * thread.cc (MTinterface::CreateSemaphore): Correctly set semaphore
- max.
-
-Wed Jan 3 09:44:51 2001 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler_console.cc (fhandler_console::read): Restore missing test
- for code page before doing OemToCharBuff.
-
-Wed Jan 3 09:20:20 2001 Jason Tishler <jt@dothill.com>
-
- * include/cygwin/version.h: Fix typo in CYGWIN_VERSION_DLL_COMBINED
- macro.
diff --git a/winsup/cygwin/ChangeLog-2002 b/winsup/cygwin/ChangeLog-2002
deleted file mode 100644
index 21fcf2a18..000000000
--- a/winsup/cygwin/ChangeLog-2002
+++ /dev/null
@@ -1,6655 +0,0 @@
-2002-12-30 Christopher Faylor <cgf@redhat.com>
-
- * exceptions.cc (events_init): Display name of mutex on failure.
-
-2002-12-30 Christopher Faylor <cgf@redhat.com>
-
- * windows.cc (setitimer): Return ENOSYS on invalid argument.
-
-2002-12-28 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_termios.cc (fhandler_termios::line_edit): Perform echo
- before input is accepted or suffer a "race".
-
-2002-12-27 Christopher Faylor <cgf@redhat.com>
-
- * fhandler.h (fhandler_tty_master::set_winsize): Declare new function.
- * fhandler_console.cc (fhandler_console::send_winch_maybe): If
- appropriate, call tty master function to handle screen size change.
- * fhandler_tty.cc (fhandler_tty_master::set_winsize): New function.
- (fhandler_tty_master::init): Call set_winsize to set initial screen
- size.
-
-2002-12-26 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_tty.cc (fhandler_tty_master::init): Set initial size of tty
- to that of console in which tty is operating.
- (process_input): Semi-revert previous change. Need to just use current
- terminfo settings since this function is running in a thread, blocked
- when the terminfo changes.
-
-2002-12-26 Christopher Faylor <cgf@redhat.com>
-
- * fhandler.h (fhandler_termios::line_edit): Replace third argument with
- passed-in termios struct.
- * fhandler_console.cc (fhandler_console::read): Prior to loop, make a
- copy of current termios for passing to line_edit prior so that all
- characters are processed consistently.
- * fhandler_tty.cc (fhandler_pty_master::write): Ditto.
- (process_input): Make a copy of curent termios prior to read for use in
- subsequent line_edit.
- * fhandler_termios.cc (fhandler_termios::line_edit): Replace third
- parameter with passed-in termios struct and use it throughout rather
- than the data from the current fhandler_termios class.
-
-2002-12-25 Christopher Faylor <cgf@redhat.com>
-
- * include/cygwin/version.h: Bump DLL minor number.
-
-2002-12-25 Christopher Faylor <cgf@redhat.com>
-
- * exceptions.cc (events_init): Initialize critical section to control
- exiting via signal.
- (signal_exit): Enter critical section early to avoid exit races with
- main thread.
- * dcrt0.cc (do_exit): Use exit_lock critical section to avoid races.
-
-2002-12-25 Christopher Faylor <cgf@redhat.com>
-
- * cygthread.cc (cygthread::detach): Set errno with set_sig_errno so
- that EINTR is properly restored after signal.
-
-2002-12-21 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Default fhandler objects to -fomit-frame-pointer.
- Eliminate redundant CFLAGS settings.
-
-2002-12-20 Christopher Faylor <cgf@redhat.com>
-
- * fhandler.h (line_edit_status): Reorganize so that tests for error
- condition can be < or >.
- * fhandler_tty.cc (fhandler_pty_master::write): Don't return after
- sending a signal.
-
- * fhandler_termios.cc (fhandler_termios::line_edit): Trivial change to
- use built-in bool types.
-
-2002-12-19 Pierre Humblet <pierre.humblet@ieee.org>
-
- * localtime.cc (tzsetwall): Set lcl_is_set and lcl_TZname
- in the Cygwin specific part of the routine.
-
-2002-12-19 Pierre Humblet <pierre.humblet@ieee.org>
-
- * fhandler.cc (fhandler_base::open): Use "flags" rather than "mode"
- in Win9X directory code.
-
-2002-12-19 Steve Osborn <bub@io.com>
-
- * fhandler.h (line_edit_status): Add a new element.
- * fhandler_termios.cc (fhandler_termios::line_edit): After
- accept_input, handle both potential error condition and pipe full
- conditions.
- * fhandler_tty.cc (fhandler_pty_master::accept_input): Return -1 on
- error.
- (fhandler_pty_master::write): Handle pipe full condition.
-
-2002-12-16 Steve Osborn <bub@io.com>
- Christopher Faylor <cgf@redhat.com>
-
- * fhandler_termios.cc (fhandler_termios::line_edit): Return
- line_edit_error and remove last char from readahead buffer if
- accept_input() fails.
- * fhandler_tty.cc (fhandler_pty_master::accept_input): Return 0 and
- restore readahead buffer when tty slave pipe is full.
-
-2002-12-16 Christopher Faylor <cgf@redhat.com>
-
- * pinfo.cc (_pinfo::cmdline): Allocate sufficient space for myself
- command line args.
-
-2002-12-14 Steve Osborn <bub@io.com>
-
- * fhandler_termios.cc (fhandler_termios::line_edit): Call
- accept_input() in character processing loop. Set return value
- independently of input_done.
-
-2002-12-14 Christopher Faylor <cgf@redhat.com>
-
- * fhandler.cc (fhandler_base::read): Signal event, if necessary, and
- raw_read hasn't done so.
-
-2002-12-14 Christopher Faylor <cgf@redhat.com>
-
- * fhandler.cc (fhandler_base::raw_read): Reset priorities to minimize
- window where thread termination may cause data loss.
- (fhandler_base::read): Always return at end of function. Just set len
- to copied_chars when len is zero. Return immediately after raw_read if
- len <= 0. Remove in_len setting and just check end instead. Fix CRLF
- handling at end of buffer.
-
-2002-12-14 Corinna Vinschen <corinna@vinschen.de>
-
- * dcrt0.cc (dll_crt0_1): Call well known SID initializer function.
- * security.h (cygsid::init): Declare new static method.
- * sec_helper.cc (cygsid::init): New method for initializing well
- known SIDs.
-
-2002-12-14 Pierre Humblet <pierre.humblet@ieee.org>
-
- * security.h: Declare well_known_creator_group_sid.
- * sec_helper.cc: Define and initialize well_known_creator_group_sid.
-
-2002-12-14 Corinna Vinschen <corinna@vinschen.de>
-
- * netdb.cc: Remove strtok_r comment.
-
-2002-12-14 Pierre Humblet <pierre.humblet@ieee.org>
-
- * security.cc (get_user_local_groups): Use LookupAccountSid to find the
- local equivalent of BUILTIN.
-
-2002-12-14 Christopher Faylor <cgf@redhat.com>
-
- * pipe.cc (make_pipe): Set fork fixup flag for read pipe.
-
-2002-12-14 Christopher Faylor <cgf@redhat.com>
-
- * winbase.h: Turn on inline versions of Interlocked* by default.
-
-2002-12-14 Gary R. Van Sickle <g.r.vansickle@worldnet.att.net>
-
- * winbase.h: Fixup inline asm functions. Add ilockcmpexch.
-
-2002-12-13 Christopher Faylor <cgf@redhat.com>
-
- Throughout, change fhandler_*::read and fhandler_*::raw_read to void
- functions whose second arguments are both the length and the return
- value.
- * fhandler.cc (fhandler_base::read): Rework slightly to use second
- argument as input/output. Tweak CRLF stuff.
- (fhandler_base::readv): Accommodate fhandler_*::read changes.
- * cygthread.h (cygthread::detach): Declare as taking optional handle
- argument.
- (cygthread::detach): When given a handle argument, wait for the handle
- to be signalled before waiting for thread to detach. Return true when
- signal detected.
-
-2002-12-12 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in: Add MINGW_LDFLAGS when linking cygrun.exe.
-
-2002-12-10 Christopher Faylor <cgf@redhat.com>
-
- * cygthread.h (cygthread::stack_ptr): New element.
- (cygthread::detach): Accept a "wait_for_signal" argument.
- (cygthread::terminate_thread): New function.
- * cygthread.cc (cygthread::stub): Set stack pointer argument.
- (cygthread::terminate_thread): New function. Forcibly terminate
- thread.
- (cygthread::detach): Optionally wait for signals and kill thread when
- signal arrives.
- * exceptions.cc (signal_exit): Set signal_arrived prior to exiting to
- wake up anything blocking on signals.
- * fhandler.h (fhandler_base::set_r_no_interrupt): Change to accept bool
- argument.
- (fhandler_pipe::ready_for_read): Declare.
- * pipe.cc (pipeargs): New structure.
- (read_pipe): New thread stub wrapper for normal pipe read.
- (fhandler_pipe::read): Modify to call reader in a cygthread,
- terminating on signal, as appropriate.
- * select.cc (fhandler_pipe::ready_for_read): Define new function.
-
-2002-12-10 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (free_protoent_ptr): Add missing free() for base structure.
- (free_servent_pt): Ditto.
- (free_hostent_pt): Ditto.
-
-2002-12-10 Craig McGeachie <slapdau@yahoo.com.au>
-
- * netdb.cc (parse_alias_list): Change strtok calls to strtok_r.
- (parse_services_line): Ditto.
- (parse_protocol_line): Ditto.
-
-2002-12-10 Pierre Humblet <pierre.humblet@ieee.org>
-
- * pwdgrp.h (pwdgrp_check::pwdgrp_state): Replace by
- pwdgrp_check::isinitializing ().
- (pwdgrp_check::isinitializing): Create.
- * passwd.cc (grab_int): Change type to unsigned, use strtoul and set
- the pointer content to 0 if the field is invalid.
- (parse_pwd): Move validity test after getting pw_gid.
- (read_etc_passwd): Replace "passwd_state <= " by
- passwd_state::isinitializing ().
- (internal_getpwuid): Ditto.
- (internal_getpwnam): Ditto.
- (getpwent): Ditto.
- (getpass): Ditto.
- * grp.cc (parse_grp): Use strtoul for gr_gid and verify the validity.
- (read_etc_group): Replace "group_state <= " by
- group_state::isinitializing ().
- (internal_getgrgid): Ditto.
- (getgrent32): Ditto.
- (internal_getgrent): Ditto.
-
-2002-12-10 Pierre Humblet <pierre.humblet@ieee.org>
-
- * security.h: Move declarations of internal_getgrent,
- internal_getpwsid and internal_getgrsid to pwdgrp.h.
- * pwdgrp.h: Declare internal_getpwsid, internal_getpwnam,
- internal_getpwuid, internal_getgrsid, internal_getgrgid,
- internal_getgrnam, internal_getgrent and internal_getgroups.
- Delete "emulated" from enum pwdgrp_state.
- (pwdgrp_check::isuninitialized): Create.
- (pwdgrp_check::pwdgrp_state): Change state to initializing
- rather than to uninitialized.
- (pwdgrp_read::gets): Remove trailing CRs.
- * passwd.cc (grab_string): Don't look for NLs.
- (grab_int): Ditto.
- (parse_pwd): Don't look for CRs. Return 0 if entry is too short.
- (search_for): Delete.
- (read_etc_passwd): Simplify tests to actually read the file.
- Set state to loaded before making internal_getpwXX calls.
- Replace search_for calls by equivalent internal_pwgetXX calls.
- (internal_getpwsid): Use passwd_state.isuninitialized to decide
- to call read_etc_passwd.
- (internal_getpwuid): Create.
- (internal_getpwnam): Create.
- (getpwuid32): Simply call internal_getpwuid.
- (getpwuid_r32): Call internal_getpwuid.
- (getpwnam): Simply call internal_getpwnam.
- (getpwnam_r): Call internal_getpwnam.
- * grp.cc (parse_grp): Don't look for CRs. Adjust blank space.
- (add_grp_line): Adjust blank space.
- (class group_lock): Ditto.
- (read_etc_group): Simplify tests to actually read the file.
- Set state to loaded before making internal_getgrXX calls.
- Replace getgrXX calls by equivalent internal calls.
- (internal_getgrsid): Use group_state.isuninitialized to decide
- to call read_etc_group.
- (internal_getgrgid): Create.
- (internal_getgrnam): Create.
- (getgroups32): Simply call internal_getgrgid.
- (getgrnam32): Simply call internal_getgrnam.
- (internal_getgrent): Call group_state.isuninitialized.
- (internal_getgroups): Create from the former getgroups32, using
- two of the four arguments. Set gid to myself->gid and username
- to cygheap->user.name ().
- (getgroups32): Simply call internal_getgroup.
- (getgroups): Call internal_getgroup instead of getgroups32.
- (setgroups32): Call internal versions of get{pw,gr}XX.
- * sec_helper.cc: Include pwdgrp.h.
- (is_grp_member): Call internal versions of get{pw,gr}XX.
- * security.cc: Include pwdgrp.h.
- (alloc_sd): Call internal versions of get{pw,gr}XX.
- * syscalls.cc: Include pwdgrp.h.
- (seteuid32): Call internal versions of get{pw,gr}XX.
- (setegid32): Ditto.
- * uinfo.cc: Include pwdgrp.h.
- (internal_getlogin): Call internal versions of get{pw,gr}XX.
- (cygheap_user::ontherange): Ditto.
- * sec_acl.cc: Include pwdgrp.h.
- (setacl): Call internal versions of get{pw,gr}XX.
- (acl_access): Ditto and simplify logic.
- (aclfromtext): Ditto.
-
-2002-12-09 2002-12-02 Egor Duda <deo@logos-m.ru>
-
- * lib/pseudo-reloc.c: New file.
- * lib/_cygwin_crt0_common.cc: Perform pseudo-relocs during
- initialization of cygwin binary (.exe or .dll).
-
-2002-12-06 Christopher Faylor <cgf@redhat.com>
-
- * cygwin.din: Reflect name change from strtodf to strtof. Export
- strtof.
- * include/cygwin/version.h: Bump API minor number.
-
-2002-12-04 Steve Osborn <bub@io.com>
-
- * fhandler.h (fhandler_termios::line_edit): Change return from an int
- to an enum to allow the function to return an error.
- * fhandler_console.cc (fhandler_console::read): Update the line_edit
- call to use the new enum.
- * fhandler_termios.cc (fhandler_termios::line_edit): Change return from
- an int to an enum to allow the function to return an error. Put
- put_readahead call before doecho for future patch.
- * fhandler_tty.cc (fhandler_pty_master::write): Change to call
- line_edit one character at a time, and stop if an error occurs.
-
-2002-12-04 Craig McGeachie <slapdau@yahoo.com.au>
-
- * netdb.cc: New file.
- * Makeile.in (DLL_OFILES): Add reference to the new netdb.cc file.
- * cygwin.din : Add new aliased exports for service and protocol
- enumerations in netdb.cc.
-
-2002-12-04 Thomas Pfaff <tpfaff@gmx.net>
-
- * cxx.cc: New file. Implement new, new[], delete and delete[]
- operators and __cxa_pure_virtual if compiled by gcc >=3.
- * Makefile.in (DLL_OFILES): Add cxx.o.
- Remove libstdc++.a from cygwin1.dll link step.
-
-2002-11-29 Steve Osborn <bub@io.com>
-
- * fhandler_tty.cc (fhandler_pty_master::accept_input): Move
- read_retval assignment to prevent race condition. Remove read_retval
- from return statement.
-
-2002-11-29 Christopher Faylor <cgf@redhat.com>
-
- * pinfo.h (winpids::set): Renamed from init.
- (winpids::init): New declaration.
- (winpids::cs): Ditto.
- (winpids::winpids): Use set rather than init.
- * external.cc (fillout_pinfo): Ditto.
- * dcrt0.cc (dll_crt0_1): Call winpids::init.
- * pinfo.cc (winpids::set): Renamed from init. Wrap calls in critical
- section.
- (winpids::init): New function.
- (winpids::cs): Define.
-
-2002-11-28 Christopher Faylor <cgf@redhat.com>
-
- * sigproc.cc (sig_dispatch_pending): Remove assertion.
-
-2002-11-27 Christopher Faylor <cgf@redhat.com>
-
- * include/cygwin/version.h: Bump DLL minor number.
-
-2002-11-27 Mikael Ylikoski <my@post.utfors.se>
-
- * fhandler_socket.cc (fhandler_socket::sendto): Fix potential
- unitialized value return.
-
-2002-11-27 Christopher Faylor <cgf@redhat.com>
-
- * cygwin.din: Export pthread_getsequence_np.
- * include/cygwin/version.h: Bump API minor version.
-
-2002-11-26 Jason Tishler <jason@tishler.net>
-
- * cygwin.din: Export nl_langinfo().
- * include/cygwin/version.h: Bump API minor version.
-
-2002-11-26 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_tty.cc (fhandler_pty_master::accept_input): Just use a
- normal Sleep or suffer amazing pauses when other tty apps are running.
- (fhandler_pty_master::process_slave_output): Ditto.
-
-2002-11-25 Pierre Humblet <pierre.humblet@ieee.org>
-
- * passwd.cc (read_etc_passwd): Never add an entry when starting
- on Win95/98/ME if a default entry is present.
- * uinfo.cc (internal_getlogin): Look for the default uid if needed.
- Always call user.set_name ().
-
-2002-11-25 Corinna Vinschen <corinna@vinschen.de>
-
- * sec_acl.cc (getacl): Set errno to ENOSPC if command is GETACL and
- nentries is less than the number of entries in the file's ACL.
-
-2002-11-24 Corinna Vinschen <corinna@vinschen.de>
-
- * sec_acl.cc: Fix some formatting. Only set and check `other' bits in
- a_perm throughout. Use ILLEGAL_GID id for all entries having no id.
- (setacl): Fix inheritance condition.
- (getacl): Set all permission bits in CLASS_OBJ and DEF_CLASS_OBJ
- entries. Remove DENY bits before returning to calling function.
- (acltomode): Fix usage of searchace(). If available, use CLASS_OBJ
- to mask GROUP_OBJ permissions.
- (aclfrommode): Fix usage of searchace(). If available, set CLASS_OBJ
- permissions to same value as GROUP_OBJ permissions.
-
-2002-11-24 Pierre Humblet <pierre.humblet@ieee.org>
-
- * sec_acl.cc (getace): Fix the behavior when allow and
- deny entries are present in arbitrary order.
- (getacl): Report the actual number of entries when
- aclbufp is NULL, even if nentries is zero. Fix the mask
- reporting, handle the case where the owner and group sids
- are equal and streamline the code.
- (acl_worker): Take allow_ntsec into account.
-
-2002-11-05 Thomas Pfaff <tpfaff@gmx.net>
-
- * dcrt0.cc (dll_crt0_1): Add call to pthread::initMainThread to
- initialize mainthread when it is safe to call new.
- * init.cc (dll_entry): Change call to store reents in tls key.
- * thread.cc (_reent_clib) : Change call to get reents from tls
- key.
- (_reent_winsup): Ditto.
- (MTinterface::Init): Key handling changed. Remove initialization
- of member variables.
- (MTinterface::fixup_after_fork): Reinitialize mainthread object
- after fork. Reset threadount to 1.
- (pthread::initMainThread): Create mainthread object dynamically.
- and initialize with valid handles.
- (pthread::self): Remove calls to create thread objects.
- (pthread::setTlsSelfPointer): Change call to store thread self
- handle in tls key.
- (pthread::getTlsSelfPointer): New static method.
- (pthread::exit): Remove setTlsSelfPointer call.
- (pthread::initCurrentThread): New method.
- (pthread::thread_init_wrapper): Change call to store thread self
- handle in tls key.
- (pthread::join): Check for a valid joiner.
- (pthreadNull::pthreadNull): Mark Null object as detached.
- (pthreadNull::exit): Terminate thread via ExitThread.
- * thread.h (pthread::initMainThread): Change parameter in function
- call.
- (pthread::getTlsSelfPointer): New static method.
- (pthread::initCurrentThread): New method.
- (MTinterface::reent_key): Remove.
- (MTinterface::thread_self_dwTlsIndex): Ditto..
- (MTinterface::indexallocated): Ditto.
- (MTinterface::mainthread): Ditto.
- (MTinterface::reent_key): New member.
- (MTinterface::thread_self_key): Ditto.
- (MTinterface::MTinterface): Initialize all members.
-
-2002-11-23 Christopher Faylor <cgf@redhat.com>
-
- * wait.cc (wait4): Force pending signal delivery before waiting for
- process completion.
-
-2002-11-23 Christopher Faylor <cgf@redhat.com>
-
- * include/cygwin/version.h: Bump DLL minor number.
-
-2002-11-22 Christopher Faylor <cgf@redhat.com>
-
- * exceptions.cc (handle_sigsuspend): Force pending signal delivery
- before waiting for signals to happen.
- * signal.cc (sleep): Force pending signal delivery before sleeping.
- (usleep): Ditto.
- (signal): Force pending signal delivery before manipulating signal
- stuff.
- (sigprocmask): Ditto.
- (kill_worker): Ditto.
- (abort): Ditto.
- (sigaction): Ditto.
- * syscalls.cc (readv): Force pending signal delivery before I/O.
- (writev): Ditto.
- (open): Ditto.
- * net.cc: Ditto, throughout.
- * sigproc.cc (sig_dispatch_pending): Deliver any pending signals prior
- to returning.
-
- * tty.cc (tty::make_pipes): Increase pipe buffer size.
-
-2002-11-22 Christopher Faylor <cgf@redhat.com>
-
- * include/cygwin/version.h: Fix comment.
-
-2002-11-21 Igor Pechtchanski <pechtcha@cs.nyu.edu>
-
- * external.cc (cygwin_internal): Fix va_arg references.
-
-2002-11-21 Christopher Faylor <cgf@redhat.com>
-
- * exceptions.cc (sigthread::get_winapi_lock): Just do standard 'give up
- timeslice' wait.
- (setup_handler): Revamp YA to attempt to deliver signal multiple times
- on failure rather than punting to wait_sig.
- * miscfuncs.cc (low_priority_sleep): Accept INFINITE sleep to mean
- "don't reset the priority after setting it to idle". Return previous
- priority.
- * winsup.h (SLEEP_0_STAY_LOW): Define.
- (low_priority_sleep): Return an int.
- * sigproc.h: Define WAIT_SIG_PRIORITY here.
- * sigproc.cc: Remove WAIT_SIG_PRIORITY definition.
-
-2002-11-20 Pierre Humblet <pierre.humblet@ieee.org>
-
- * security.h: Declare internal_getpwsid and internal_getgrsid.
- Undeclare internal_getpwent. Define DEFAULT_UID_NT. Change
- DEFAULT_GID.
- * passwd.cc (internal_getpwsid): New function.
- (internal_getpwent): Suppress.
- (read_etc_passwd): Make static. Rewrite the code for the completion
- line. Set curr_lines to 0.
- (parse_pwd): Change type to static int. Return 0 for short lines.
- (add_pwd_line): Pay attention to the value of parse_pwd.
- (search_for): Do not look for nor return the DEFAULT_UID.
- * grp.cc (read_etc_group): Make static. Free gr_mem and set
- curr_lines to 0. Always call add_pwd_line. Rewrite the code for the
- completion line.
- (internal_getgrsid): New function.
- (parse_grp): If grp.gr_mem is empty, set it to &null_ptr.
- Never NULL gr_passwd.
- (getgrgid32): Only return the default if ntsec is off and the gid is
- ILLEGAL_GID.
- * sec_helper.cc (cygsid::get_id): Use getpwsid and getgrsid.
- (cygsid_getfrompw): Clean up last line.
- (cygsid_getfromgr): Ditto.
- (is_grp_member): Use getpwuid32 and getgrgid32.
- * uinfo.cc (internal_getlogin): Set DEFAULT_GID at start.
- Use getpwsid. Move the read of /etc/group after the second access
- to /etc/passwd. Change some debug_printf.
-
-2002-11-20 Steven O'Brien <steven.obrien2@ntlworld.com>
-
- * poll.cc (poll): ...but set POLLIN instead.
-
-2002-11-20 Pierre Humblet <pierre.humblet@ieee.org>
-
- * security.cc (get_attribute_from_acl): Always test "anti",
- just in case an access_denied ACE follows an access_allowed.
- Handle the case owner_sid == group_sid, with a FIXME.
- Remove unnecessary tests for non-NULL PSIDs.
- (alloc_sd): Use existing owner and group sids if {ug}id == -1.
- Handle case where owner_sid == group_sid.
- Do not call is_grp_member. Try to preserve canonical ACE order.
- Remove unnecessary tests for non-NULL PSIDs. Reorganize
- debug_printf's.
- (get_initgroups_sidlist): Put well_known_system_sid on left
- side of ==.
- (add_access_denied_ace): Only call GetAce if inherit != 0.
- (add_access_allowed_ace): Ditto. Use appropriate sizeof.
- * syscalls.cc (chown_worker): Pass {ug}id equal to -1 to
- alloc_sd, which removes the need to obtain old_{ug}id.
- (chmod): Remove call to get_file_attribute (), simply pass
- {ug}id equal to -1 to alloc_sd.
-
-2002-11-20 Corinna Vinschen <corinna@vinschen.de>
-
- * poll.cc (poll): Don't set POLLERR if a listening socket has a
- pending connect. Don't use errno value from call to
- fhandler_socket::recvfrom().
-
-2002-11-19 Christopher Faylor <cgf@redhat.com>
-
- * net.cc: Sprinkle sigframes throughout.
-
-2002-11-16 Christopher Faylor <cgf@redhat.com>
-
- * tty.cc (tty::make_pipes): Make pipe buffer larger.
-
-2002-11-15 Pierre Humblet <pierre.humblet@ieee.org>
-
- * grp.cc (getgroups32): Protect against closing cygheap->user.token.
-
-2002-11-15 Christopher Faylor <cgf@redhat.com>
-
- * include/cygwin/version.h: Bump API_MINOR to accommodate below
- changes.
-
-2002-11-14 Sergey Okhapkin <sos@prospect.com.ru>
-
- * cygwin.din (siginterrupt): New export.
- * signal.cc (siginterrupt): New.
-
-2002-11-15 Sergey Okhapkin <sos@prospect.com.ru>
-
- * select.cc (peek_serial): Don't call PurgeComm() to avoid characters
- loss.
-
-2002-11-14 Christopher Faylor <cgf@redhat.com>
-
- * exceptions.cc (setup_handler): Add debugging output. Set thread
- priority to idle if pending signals to allow other threads to get into
- interruptible state.
- * miscfuncs.cc (sys_mbstowcs): Save current thread in variable to avoid
- an OS call.
- * wait.cc (wait_sig): Reset thread priority each time through loop
- since the priority may have been set down to deal with pending signals.
-
-2002-11-14 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_serial.cc (fhandler_serial::tcgetattr): Don't take any
- special action when vmin_ == 0.
-
-2002-11-14 Corinna Vinschen <corinna@vinschen.de>
-
- * grp.cc (getgroups32): Revert previous patch. Use impersonation
- token if process is in impersonated state.
- * sec_helper.cc (is_grp_member): Rewrite. Call getgroups32 only
- for current user. Scan passwd and group info otherwise.
-
-2002-11-14 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_console.cc (fhandler_console::write): Allow characters >=
- 0177 to be displayed in the title bar.
-
-2002-11-14 Corinna Vinschen <corinna@vinschen.de>
-
- * grp.cc (getgroups32): Don't use access token of current user when
- retrieving group info for another user.
-
-2002-11-13 Christopher Faylor <cgf@redhat.com>
-
- * dll_init.cc (dll_list::detach): Eliminate reliance on passed in dll
- address. Infer from module of caller instead.
- (cygwin_detach_dll): Ignore dll_index argument.
- * dll_init.h (dll_list::detach): Reflect argument change above.
-
-2002-11-13 Christopher Faylor <cgf@redhat.com>
-
- * ioctl.cc (ioctl): Always print ioctl results, even when it's a tty.
-
-2002-11-13 Christopher Faylor <cgf@redhat.com>
-
- * winsup.h (low_priority_sleep): Declare.
-
-2002-11-13 Christopher Faylor <cgf@redhat.com>
-
- * miscfuncs.cc (low_priority_sleep): New function. Use throughout
- where code is supposed to be giving up time slice.
-
- * fhandler_console.cc (fhandler_console::read): Switch button 2/3
- output escape sequences to be consistent with xterm.
-
-2002-11-12 Pierre Humblet <pierre.humblet@ieee.org>
-
- * syscalls.cc (chmod): Simplify conditional.
- * sec_helper (cygsid::getfromstr): Reorganize to remove
- calls to strcpy and strtok_r.
- (cygsid::getfromgr): Change type to __uid32_t instead of int.
- Keep only the allow_ntsec branch. Never call LookupAccountSid
- which calls PDCs, simply return -1 in case of failure.
- Use cygsid == instead of calling EqualSid and remove test
- for NULL psid.
- * security.h: Declare cygsid::getfromgr as __uid32_t.
-
-2002-11-10 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc: Run indent.
-
-2002-11-10 Alexander Gottwald <Alexander.Gottwald@s1999.tu-chemnitz.de>
-
- * autoload.cc (GetIfEntry): Add symbol.
- * net.cc (get_2k_ifconf): Get the interface entries with the GetIfEntry
- call intead of the GetIfTable call. Clean-up multiple IP address naming.
-
-2002-11-09 Sergey Okhapkin <sos@prospect.com.ru>
-
- * fhandler.h (class fhandler_pipe): New ioctl() method.
- * pipe.cc (fhandler_pipe::ioctl): New.
-
-2002-11-07 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_serial.cc (fhandler_serial::ioctl): Fix typo.
-
-2002-11-07 Christopher January <chris@atomice.net>
-
- * include/cygwin/fs.h: New file.
- * include/cygwin/hdreg.h: New file.
- * fhandler_floppy.cc (fhandler_floppy::ioctl): Add implementation for
- HDIO_GETGEO, BLKGETSIZE, BLKGETSIZE64, BLKRRPART and BLKSSZGET ioctls.
-
-2002-11-07 Gilles Courcoux <Gilles.Courcoux@col.bsf.alcatel.fr>
-
- * fhandler_socket.cc (fhandler_socket::ioctl): Return correct flags
- for loopback interface when name is given on input instead of address.
-
-2002-11-07 Jason Tishler <jason@tishler.net>
-
- * cygwin.din: Export fseeko() and ftello().
- * include/cygwin/version.h: Bump API minor version.
-
-2002-11-06 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_console.cc (keytable[]): Revert previous change. It would
- break too many things.
-
-2002-11-06 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_console.cc (keytable[]): Redefine F1 - F5 to something a
- little more sensical.
-
-2002-11-06 Sergey Okhapkin <sos@prospect.com.ru>
-
- * syscalls.cc (getutid): Use UT_IDLEN where appropriate.
-
-2002-11-06 Christopher Faylor <cgf@redhat.com>
-
- * include/cygwin/version.h: Bump API minor number for below export.
-
-2002-11-06 Sergey Okhapkin <sos@prospect.com.ru>
-
- * cygwin.din (pututline): New exported function.
- * syscalls.cc (login): Use pututiline().
- (setutent): Open utmp as read/write.
- (endutent): Check if utmp file is open.
- (utmpname): call endutent() to close current utmp file.
- (getutid): Enable all cases, use strncmp() to compare ut_id fields.
- (pututline): New.
- * tty.cc (create_tty_master): Set ut_pid to current pid.
-
-2002-11-05 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_serial.cc (fhandler_serial::ioctl): Don't try to figure out
- if OS has the capability to retrieve RTS/CTS. Just set default values
- if DeviceIoControl fails. (suggested by Sergey Okhapkin)
-
-2002-11-05 Sergey Okhapkin <sos@prospect.com.ru>
-
- * fhandler_serial.cc (fhandler_serial::raw_read): Use correct type for
- minchars.
- (fhandler_serial::ioctl): Set errno if the ClearCommError fails.
- (fhandler_serial::tcsetattr): Use correct value for vmin_.
- (fhandler_serial::tcgetattr): Ditto.
-
-2002-11-05 Thomas Pfaff <tpfaff@gmx.net>
-
- * fhandler_socket.cc (fhandler_socket::recvmsg): Call if from == NULL
- WSARecvFrom with fromlen = NULL.
-
-2002-11-04 Christopher Faylor <cgf@redhat.com>
-
- * pinfo.cc (_pinfo::commune_send): Fix thinko in previous checkin.
-
-2002-11-04 Christopher Faylor <cgf@redhat.com>
-
- * pinfo.cc (_pinfo::commune_send): Set priority low when sleeping,
- waiting for commune completion so that we don't spin waiting for lower
- priority processes.
-
-2002-11-04 Christopher Faylor <cgf@redhat.com>
-
- * sigproc.cc (WAIT_SIG_PRIORITY): Bump to THREAD_PRIORITY_TIME_CRITICAL.
-
-2002-11-04 Christopher Faylor <cgf@redhat.com>
-
- * pinfo.cc (_pinfo::commune_send): Initialize buffer or suffer random
- crashes.
-
-2002-11-04 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_process.cc (fhandler_process::fill_filebuf): Deal with error
- condition from cmdline retrieval.
-
-2002-11-04 Christopher Faylor <cgf@redhat.com>
-
- * sigproc.cc (WAIT_SIG_PRIORITY): Bump to highest priority.
-
-2002-11-04 Christopher Faylor <cgf@redhat.com>
-
- * include/cygwin/version.h: Bump DLL minor number.
-
-2002-11-03 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_serial.cc (fhandler_serial::ioctl): Reformat. Set errno
- appropriately. Exit from the bottom. Correctly deal with third
- argument for TCFLSH. (Suggested by Sergey Okhapkin)
-
-2003-11-03 Sergey Okhapkin <sos@prospect.com.ru>
-
- * fhandler_tty.cc (fhandler_tty_slave::ioctl): Do nothing if the new
- window size is equal to the old one. Send SIGWINCH if slave connected
- to a pseudo tty.
- (fhandler_pty_master::ioctl): Do nothing if the new window size is
- equal to the old one.
-
-2002-10-31 Pierre Humblet <pierre.humblet@ieee.org>
-
- * fhandler.cc (fhandler_base::open): Verify pc isn't NULL.
-
-2002-10-30 Christopher Faylor <cgf@redhat.com>
-
- * include/cygwin/version.h: Bump DLL minor number.
-
-2002-10-30 Christopher Faylor <cgf@redhat.com>
-
- * external.cc (cygwin_internal): Implement CW_CMDLINE.
- * pinfo.h (SIGCOMMUNE): New signal type.
- (commune_result): New structure for commune functions.
- (picom): New enum for commune functions.
- (_pinfo::hello_pid): New. Pid who's communicating with me.
- (_pinfo::tothem): New. Handle of communicating pipe.
- (_pinfo::fromthem): Ditto.
- (_pinfo::commune_recv): Declare.
- (_pinfo::commune_send): Declare.
- (_pinfo::alive): Declare.
- (_pinfo::cmdline): Declare.
- (_pinfo::lock): Declare.
- * pinfo.cc (set_myself): Initialize new _pinfo lock.
- (_pinfo::alive): Define. Determines if process still exists.
- (_pinfo::commune_recv): Define. Receive info from another cooperating process.
- (_pinfo::commune_send): Define. Send info to another cooperating process.
- (_pinfo::cmdline): Define. Determine command line of a given process.
- * include/sys/cygwin.h (CW_CMDLINE): Define.
-
- *sigproc.cc (talktome): Communicate with any processes who want to talk
- to me.
- (wait_sig): Honor __SIGCOMMUNE.
-
- * fhandler.cc (fhandler_virtual::fixup_after_exec): Declare.
- * fhandler_proc.cc: Use malloc/free/realloc throughout rather than
- cmalloc since buffers don't need to be propagated to subprocesses.
- * fhandler_registry.cc: Ditto.
- * fhandler_virtual.cc: Ditto.
- (fhandler_virtual::fixup_after_exec): Define.
- * fhandler_process.cc: Ditto for malloc/free/realloc.
- (process_listin): Add "cmdline".
- (fhandler_process::fill_filebuf): Implement PROCESS_CMDLINE.
-
- * miscfuncs.cc (isalpha_array): New array populated with xor values for
- alpha characters to switch from one case to another.
- * string.h (cygwin_strcasematch): New asm implementation of case match.
- * string.h (cygwin_nstrcasematch): New asm implementation of counted
- case match.
-
-2002-10-24 Pierre Humblet <pierre.humblet@ieee.org>
-
- * pwdgrp.h (pwdgrp_read::open): Compare fh to INVALID_HANDLE_VALUE.
-
-2002-10-22 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_disk_file.cc (fhandler_disk_file::fstat_helper): Nevermind.
- Revert everything to previous state wrt ntsec and exec bits.
-
-2002-10-22 Christopher Faylor <cgf@redhat.com>
-
- * shared.cc (shared_info::initialize): Use correct value for version
- comparison.
- * include/cygwin/version.h (CYGWIN_VERSION_MAGIC): Use all of a DWORD
- for magic calculation.
-
-2002-10-22 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_disk_file.cc (fhandler_disk_file::fstat_helper): Oops. Only
- do the executable thing for #! scripts since .exe files wouldn't be
- executable in ntsec case regardless.
-
-2002-10-22 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_disk_file.cc (fhandler_disk_file::fstat_helper): Always
- consider .exe files and '#!' shell scripts to be executable.
-
-2002-10-22 Christopher Faylor <cgf@redhat.com>
-
- * cygthread.cc (cygthread::exiting): New variable.
- (cygthread::initialized): Delete.
- (cygthread::stub): Use exiting variable to determine when to exit.
- (cygthread::runner): Delete.
- (cygthread_protect): New variable.
- (cygthread::init): Don't start runner thread. Initialize muto for list
- protection.
- (cygthread::freerange): Return pointer to cygthread.
- (cygthread::operator new): Change logic to start threads on an
- as-needed basis.
- (cygthread::detach): Don't zero id.
- (cygthread::terminate): Don't kill any executing threads. Just set
- exiting flag.
- * cygthread.h (cygthread): Reflect above changes.
- * dcrt0.cc (dll_crt0_1): Move cygthread initialization later.
-
- * fork.cc (fork_child): Do fdtab fixup after dll fixup or (apparently)
- winsock may allocate memory in dll load address.
-
-2002-10-22 Pierre Humblet <pierre.humblet@ieee.org>
-
- * sec_helper.cc (cygsid::get_id): If the sid matches a sid stored in
- cygheap->user, return the uid or gid from myself.
- * security.cc (alloc_sd): If gid == myself->gid, return the group sid
- from cygheap->user. Remove the test for uid == original_uid, which is
- counter-productive.
-
-2002-10-22 Christopher Faylor <cgf@redhat.com>
-
- * cygheap.cc (cygheap_fixup_in_child): Use user_heap element in
- cygheap.
- (init_cheap): Ditto for declaration.
- * fork.cc (fork_parent): Use user_heap element in cygheap.
- * heap.h (inheap): Ditto.
- * heap.cc (sbrk): Ditto.
- (heap_init): Ditto. Reorganize to shrink heap chunk as required and
- record new value in cygheap.
- * dcrt0.cc (dll_crt0_1): More "move the cygthread init" games.
- * shared.cc (open_shared): Rework memory protection to properly deal
- with relocated shared segment.
- (shared_info::heap_chunk_size): Rename element to 'heap_chunk'.
- * shared_info.h (shared_info): Ditto for declaration.
- * strace.cc (strace::hello): Report on heap chunk size from cygheap
- since it may shrink.
-
-2002-10-20 Christopher Faylor <cgf@redhat.com>
-
- Change _function() to function() throughout.
- * cygwin.din: Remove last vestiges (?) of newlib wrappers.
-
-2002-10-20 Christopher Faylor <cgf@redhat.com>
-
- * cygthread.cc (cygthread::detach): Always wait for event or suffer an
- apparently inavoidable race.
- * dcrt0.cc (dll_crt0_1): Allocate threads after stack has been
- relocated.
- * debub.cc (lock_debug): Don't acquire lock on exit.
- * fork.cc (fork_child): Recreate mmaps before doing anything else since
- Windows has a habit of using blocks of memory in the child that could
- previously have been occupied by shared memory in the parent.
- * mmap.cc (fhandler_disk_file::fixup_mmap_after_fork): Issue error here
- and provide some details about what went wrong.
- (fixup_mmaps_after_fork): Remove error message.
- * shared.cc (open_shared): Move warning message so that more detail is
- possible.
- * sigproc.cc (sigproc_init): Initialize sync_proc_subproc to avoid a
- race.
- (sigproc_terminate): Specifically wait for process thread to terminate.
-
-2002-10-20 Christopher Faylor <cgf@redhat.com>
-
- * cygthread.cc (cygthread::stub): Fix typo.
- (cygthread::terminate): Don't zero thread handle prior to using it.
-
-2002-10-20 Christopher Faylor <cgf@redhat.com>
-
- * sigproc.cc (wait_sig): Remove obsolete sigchld logic.
-
-2002-10-20 Christopher Faylor <cgf@redhat.com>
-
- Rename _kill() to kill() throughout. Rename _raise() to raise()
- throughout. Rename _pid() to pid() throughout.
- * Makefile.in: Compile some objects with -fomit-frame-pointer.
- * cygwin.din: Reverse aliasing for _kill.
- * syscalls.cc (_getpid_r): New function, implemented for newlib
- compatibility.
-
- * shared.cc (open_shared): Remove reserving of memory since previous
- change eliminate the need for this hack.
-
-2002-10-19 Christopher Faylor <cgf@redhat.com>
-
- * fork.cc (fork_child): Move pinfo fixup later to attempt some minor
- gains from concurrency with cythread::init.
-
-2002-10-18 Christopher Faylor <cgf@redhat.com>
-
- * dcrt0.cc (dll_crt0_1): Initialize cygwin threads here only when not
- forking.
- * fork.cc (fork_child): Initialize cygwin thread later in process to
- avoid allocating memory for thread stacks.
- * shared.cc (open_shared): Issue warning if NT and shared segment is
- relocated.
-
-2002-10-18 Christopher Faylor <cgf@redhat.com>
-
- * cygthread.cc: Bump number of cygthreads up to accommodate
- applications which use ttys.
-
-2002-10-18 Christopher Faylor <cgf@redhat.com>
-
- * fork.cc (fork_child): Move mmap initialization.
- * shared.cc (shared_info::heap_chunk_size): Store info as megabytes.
- Search HKEY_LOCAL_MACHINE as well as HKEY_CURRENT_USER.
- * shared_info.h (shared_info::initial_heap_size): Change element name
- to reflect new functionality.
- * strace.cc (strace::hello): Report on initial heap size.
-
-2002-10-18 Thomas Pfaff <tpfaff@gmx.net>
-
- * thread.cc (verifyable_object_isvalid): Test for a valid object
- pointer before testing for static ptr.
-
-2002-10-17 Christopher Faylor <cgf@redhat.com>
-
- * dtable.cc (dtable::init_std_file_from_handle): Force "devices" to
- always be in binary mode. Temporary fix until ssh is rebuilt?
-
-2002-10-17 Christopher Faylor <cgf@redhat.com>
-
- * dtable.cc (dtable::set_file_pointers_for_exec): New function.
- * dtable.h (dtable::set_file_pointers_for_exec): Declare new function.
- * spawn.cc (spawn_guts): Call dtable::set_file_pointers_for_exec to set
- pointers to EOF when execing non-cygwin applications.
-
-2002-10-17 Robert Collins <rbtcollins@hotmail.com>
-
- * thread.h (pthread_mutex::isGoodInitializerOrBadObject): Declare.
- * thread.cc (pthread_mutex::isGoodInitializerOrBadObject): Implement.
- (pthread_mutex::init): Use isGoodInitializerOrBadObject to avoid
- unneeded SEGV's during debugging.
-
-2002-10-17 Thomas Pfaff <tpfaff@gmx.net>
-
- * thread.cc (verifyable_object_isvalid): Test for static object first.
-
-2002-10-16 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_tty.cc (fhandler_tty_slave::read): Attempt #527 to properly
- implement VMIN/VTIME.
-
-2002-10-15 Christopher Faylor <cgf@redhat.com>
-
- * shared.cc (open_shared): Revert to "old" method for shared memory
- location if !wincap.needs_memory_protection.
- * wincap.cc: Implement needs_memory_protection throughout.
- * wincap.h: Ditto.
-
-2002-10-15 Christopher Faylor <cgf@redhat.com>
-
- * child_info.h (CURR_CHILD_INFO_MAGIC): Reset.
- (child_info_fork::mount_table): Remove.
- (child_info_fork::myself_addr): Remove.
- * fork.cc (fork_child): Don't set either of the above.
- * dcrt0.cc (dll_crt0_1): Call memory_init as early as possible.
- * fhandler_console.cc (console_state): Move to shared_info.h.
- (fhandler_console::get_tty_stuff): Reflect open_shared arg change.
- * pinfo.cc (myself_addr): Remove definition.
- (pinfo::init): Get myself address from open_shared.
- * pinfo.h (myself_addr): Remove declaration.
- * shared.cc (open_shared): Rework so that known shared memory locations
- are protected. Take shared memory type as fifth argument.
- (memory_init): Reflect open_shared arg change.
- * shared_info.h (shared_locations): New enum.
- (console_state): Move here.
- (open_shared): Reflect open_shared arg change in declaration.
-
-2002-10-14 Christopher Faylor <cgf@redhat.com>
-
- * child_info.h (CURR_CHILD_INFO_MAGIC): Reset.
- (child_info_fork::heaptop): Remove obsolete element.
- (child_info_fork::heabbase): Ditto.
- (child_info_fork::heapptr): Ditto.
- (child_info_fork::mount_table): New element.
- (child_info_fork::myself_addr): Ditto.
- * dcrt0.cc (dll_crt0_1): Set mount_table and myself_addr when forking.
- (initial_env): Add newline to "sleeping" message.
- * dll_init.cc (reserve_upto): Accommodate cygwin heap when freeing
- memory. Make debugging output a little more descriptive.
- * fork.cc (fork_parent): Save mount_table and myself_addr.
- * pinfo.cc (myself_addr): New variable.
- (set_myself): Pass PID_MYSELF flag to init.
- (pinfo::init): Honor PID_MYSELF. Save address where myself shared
- memory resides in myself_addr, for fork.
- * pinfo.h (myself_addr): Declare.
- * shared.cc (memory_init): On fork, use previously saved address for
- location of mount table.
- * include/sys/cygwin.h (PID_MYSELF): New value.
-
- * dtable.cc (dtable::stdio_init): Don't pass access type to
- init_std_file_from_handle. It's always the same.
- (dtable::init_std_file_from_handle): Remove access type argument.
- Assume read/write.
- * dtable.h (dtable::init_std_file_from_handle): Ditto for declaration.
-
- * exceptions.cc (try_to_debug): Don't try to debug if already being
- debugged.
-
- * fhandler_console.cc (shared_console_info_save): New variable.
- (fhandler_console::get_tty_stuff): Save address of shared console stuff
- for fork.
-
-2002-10-13 Christopher Faylor <cgf@redhat.com>
-
- * cygthread.cc (cygthread::stub): Reintroduce clearing of __name but do
- it before SetEvent to eliminate a race.
- (cygthread::terminate): Accumulate list of threads to check for
- termination and call WaitForMultipleObjects on list rather than waiting
- for each thread individually.
- * sigproc.cc (subproc_init): Zap hwait_subproc thread handle since it
- is no longer used.
-
-2002-10-13 Christopher Faylor <cgf@redhat.com>
-
- * spawn.cc (spawn_guts): Fix so that cygthread::terminate is *really*
- called only for exec.
-
-2002-10-13 Christopher Faylor <cgf@redhat.com>
-
- * cygthread.cc (cygthread::stub): Don't zero __name here. That
- introduces a race.
-
-2002-10-13 Christopher Faylor <cgf@redhat.com>
-
- * include/cygwin/version.h: Bump DLL minor number.
-
-2002-10-13 Christopher Faylor <cgf@redhat.com>
-
- * cygthread.cc (cygthread::stub): Don't create event for long-running
- threads. Initialize thread_sync event here which is used to Suspend
- using an event rather than relying on SuspendThread/ResumeThread.
- (cygthread::init): Save handle to runner thread for future termination.
- (cygthread::cygthread): Only resume thread when it is actually
- suspended. Otherwise signal thread completion event.
- (cygthread::terminate): Forcibly terminate runner thread and any helper
- threads. Call DisableThreadLibrary calls if execing.
- * cygthread.h (cygthread::thread_sync): Declare.
- * dcrt0.cc (do_exit): Eliminate calls to obsolete window_terminate and
- shared_terminate.
- * exceptions.cc (events_terminate): Don't bother closing title_mutex
- since it is going away anyway.
- * pinfo.cc (_pinfo::exit): Call cygthread::terminate to ensure that
- threads are shut down before process exit or otherwise strange races
- seem to occur.
- * shared.cc (shared_terminate): Eliminate.
- * shared.h (shared_terminate): Eliminate declaration.
- * winsup.h (window_terminate): Eliminate declaration.
- * spawn.cc (spawn_guts): Call cygthread::terminate early in process if
- execing. Call DisableThreadLibrary calls if execing.
- * window.cc (Winmain): Call ExitThread to force exit.
- (window_terminate): Eliminate.
-
- * dcrt0.cc (do_exit): Track exit state more closely.
-
-2002-10-10 Christopher Faylor <cgf@redhat.com>
-
- * window.cc (gethwnd): Use SetThreadPriority method.
-
-2002-10-10 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in (new-cygwin1.dll): Reorganize library order.
-
- * dcrt0.cc (do_exit): Move thread stuff after vfork stuff or threads
- are terminated during vfork.
- * sigproc.cc (proc_terminate): Grab proc lock prior to signalling
- subproc thread exit to avoid an extra "wait-for-thread-to-exit".
-
-2002-10-09 Christopher Faylor <cgf@redhat.com>
-
- * cygthread.cc (cygthread::stub): Don't create an event for "cygself"
- threads. Assume that they exit via an ExitThread call.
- * cygthread.h (cygthread::SetThreadPriority): New function.
- (cygthread::zap_h): New function.
- * dcrt0.cc (do_exit): Move cygthread::terminate earlier and establish
- exit_state guard.
- * fhandler.h (fhandler_tty_master::output_thread): Delete.
- * fhandler_tty.cc (fhandler_tty_master::init): Set priority for threads
- via method. Zap handles when done. Don't treat process_output
- specially.
- (process_output): Call ExitThread directly.
- (fhandler_tty_master::fixup_after_fork): Don't worry about
- output_thread.
- (fhandler_tty_master::fixup_after_exec): Ditto.
- * sigproc.cc (proc_terminate): Don't detach from hwait_subproc. Just
- let it exit.
- (sigproc_init): Close thread handle after initialization.
- (wait_sig): Use GetCurrentThread() as SetThreadPriority call rather
- than *event* handle. Call ExitThread directly on termination.
- (wait_subproc): Call ExitThread directly on termination.
- * tty.cc (tty_list::terminate): Don't attempt to detach from
- output_thread.
-
-2002-10-08 Christopher Faylor <cgf@redhat.com>
-
- * cygheap.cc (dup_now): Make fatal error a little more informative.
- (cygheap_setup_for_child): Detect when default size of shared region is
- less than the current size and allocate that much.
- (_cbrk): Just return NULL on inability to allocate.
- (_cmalloc): Ditto.
- * cygheap.h (CYGHEAPSIZE): Change size to reflect newer, tinier
- fhandler sizes.
- * spawn.cc (av::error): New element, reflects potential errno from cmalloc.
- (av::~av): Don't free NULL pointers.
- (av::replace0_maybe): Detect out-of-memory conditions.
- (av::dup_maybe): Ditto.
- (av::dup_all): Ditto.
- (av::unshift): Ditto.
- (spawn_guts): Set errno and return if argv creation ran into problems.
-
- * fhandler.h (fhandler_union): Change member names to something safer.
-
- * fhandler_console.cc (fhandler_console::get_tty_stuff): Always set
- fhandler_console::dev_state regardless of whether shared region is
- initialized.
-
- * cygthread.cc (cygthread::runner): Use ExitThread rather than return
- (planning for future).
-
-2002-10-08 Christopher Faylor <cgf@redhat.com>
-
- * fhandler.h (dev_console): New class.
- (fhandler_console::dev_state): New class element.
- (fhandler_console::mouse_aware): Use dev_state element.
- (fhandler_console::get_tty_stuff): Declare new function.
- * fhandler_console.cc: Use dev_state fhandler_console element,
- throughout.
- (fhandler_console::get_tty_stuff): Move to fhandler_console class.
- Incorporate dev_console information. Move constructor stuff here.
-
-2002-10-07 Christopher Faylor <cgf@redhat.com>
-
- * dtable.cc (dtable::init_std_file_from_handle): Try to mimic standard
- open behavior with files redirected from stdin/stdout/stderr, i.e.,
- fmode settings take precedence over mount settings.
-
-2002-10-07 Christopher Faylor <cgf@redhat.com>
-
- * dtable.cc (unknown_file): New variable.
- (dtable::init_std_file_from_handle): Don't set binmode if we couldn't
- determine the actual file name on stdin/stdout/stderr.
- (handle_to_fn): Return unknown_file when can't determine filename.
-
-2002-10-07 Christopher Faylor <cgf@redhat.com>
-
- * dcrt0.cc (do_exit): Call DisableThreadLibraryCalls since we don't
- need to track thread detaches.
- * init.cc (dll_entry): Reorganize slightly. Fix api_fatal message.
-
-2002-10-05 Christopher Faylor <cgf@redhat.com>
-
- * cygthread.cc (cygthread::stub): Very minor cleanup.
- (cygthread::stub): Report overflows in cygwin thread pool when
- DEBUGGING is on and special environment variable is not set.
- (cygthread::terminate): Set event only when event actually exists.
- * exceptions.cc (signal_exit): Set priority of main thread to low
- before setting current thread to high.
-
-2002-10-01 Robert Collins <rbtcollins@hotmail.com>
-
- * thread.cc (pthread_key::keys): Copy on fork. Add a comment explaining
- why.
- (pthreadNull::_instance): Copy on fork. Absolutely no state exists
- in pthreadNull.
-
-2002-09-30 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * cygserver_transport_pipes.cc (transport_layer_pipes::accept):
- Remove trailing \n from debug_printf.
-
-2002-09-30 Christopher Faylor <cgf@redhat.com>
-
- * thread.cc (pthread_mutex::initMutex): Remove \n from api_fatal.
-
-2002-09-30 Christopher Faylor <cgf@redhat.com>
-
- * thread.cc (pthread::precreate): Use explicit "no inherit" option when
- creating mutex.
- (pthread_mutex::nativeMutex::init): Ditto.
-
-2002-09-30 Christopher Faylor <cgf@redhat.com>
-
- * thread.cc (pthread_key::keys): Do not copy on fork.
- (pthread_mutex::mutexInitializationLock): Ditto.
- (pthreadNull::_instance): Ditto.
-
-2002-09-30 Christopher Faylor <cgf@redhat.com>
-
- * exceptions.cc (unused_sig_wrapper): Still need additional level of
- indirection when setting errno.
-
-2002-09-30 Robert Collins <rbtcollins@hotmail.com>
-
- * thread.cc (pthread_mutex::initMutex): Use the wrapper init call.
- (pthread_mutex::nativeMutex::init): Implement.
- (pthread_mutex::nativeMutex::lock): Ditto.
- (pthread_mutex::nativeMutex::unlock): Ditto.
- (pthread_mutex::init): Use the wrapper lock and unlockcalls.
- * thread.h (pthread_mutex): Move mutexInitializationLock into a
- nativeMutex wrapper class.
-
-2002-09-30 Christopher Faylor <cgf@redhat.com>
-
- Remove \n from calls to strace class printfs throughout.
-
-2002-09-30 Christopher Faylor <cgf@redhat.com>
-
- * exceptions.cc (unused_sig_wrapper): Accommodate newer compilers.
-
-2002-09-29 Christopher Faylor <cgf@redhat.com>
-
- * security.cc (allow_ntsec): Default to zero.
- * environ.cc (environ_init): Set allow_ntsec to TRUE by default,
- assuming OS allows it.
-
-2002-09-29 Christopher Faylor <cgf@redhat.com>
-
- * environ.cc (environ_init): Avoid a compiler warning.
- * path.cc (path_conv::check): Ditto.
- * path.h (path_conv::operator int): Ditto.
- * regex/engine.c: Ditto throughout.
- * regex/regcomp.c: Ditto throughout.
- * regex/regexec.c: Ditto throughout.
-
-2002-09-29 Christopher Faylor <cgf@redhat.com>
-
- * thread.cc: Use "%E" in *_printf throughout rather than calling
- GetLastError. GNUify comments.
- (__pthread_mutex_lock): Don't return error on EBUSY since that just
- means that the mutex has already been initialized.
-
-2002-09-30 Robert Collins <rbtcollins@hotmail.com>
-
- * pthread.cc (pthread_mutex_init): Use new pthread_mutex::init.
- * thread.cc: Change __pthread_mutex_init to pthread_mutex::init
- throughout.
- (MTinterface::Init): Initialise pthread_mutex support.
- (pthread_mutex::mutexInitializationLock): Instantiate.
- (pthread_mutex::initMutex): New method.
- (__pthread_cond_dowait): Don't dereference untrusted pointers.
- Use the new pthread_mutex::init method.
- (__pthread_condattr_init): Don't dereference untrusted pointers.
- (__pthread_mutex_init): Rename to pthread_mutex::init.
- Lock and release mutexInitializationLock to prevent races on
- mutex initialisation.
- * thread.h (pthread_mutex::initMutex): New method, initialise
- pthread_mutex supporting state on process initialisation.
- (pthread_mutex::init): Initialise a single mutex.
- (pthread_mutex::mutexInitializationLock): A win32 mutex for
- syncronising pthread mutex initialisation.
- (__pthread_mutex_init): Remove this.
-
-2002-09-28 Christopher Faylor <cgf@redhat.com>
-
- * thread.h (verifyable_object:~verifyable_object): Make virtual.
-
-2002-09-28 Christopher Faylor <cgf@redhat.com>
-
- * cygthread.h (cygthread::terminate): Declare new function.
- (cygthread::initialized): Change to 'int'.
- * cygthread.cc (cygthread::stub): Exit thread if initialized < 0.
- (cygthread::new): Ditto.
- (cygthread::runner): Ditto. Set initialized using xor to preserve
- sign.
- (cygthread::terminate): New function.
- * dcrt0.cc (do_exit): Call cygthread::terminate.
-
-2002-09-27 Robert Collins <rbtcollins@hotmail.com>
-
- * thread.cc (pthread_key::run_destructor): Run_destructor is not
- const as it needs to set the key value.
- * thread.h (pthread_key::run_destructor): Ditto.
-
-2002-09-27 Robert Collins <rbtcollins@hotmail.com>
-
- * thread.cc (pthread_key::run_destructor): Follow opengroup algorithm.
- I.e. only run the destructor NON-NULL key values, and reset the key
- to NULL before running the destructor. Reported by Thomas Pfaff.
-
-2002-09-25 Christopher Faylor <cgf@redhat.com>
-
- * cygrun.c (main): Fix setting of CYGWIN environment variable.
-
- * Makefile.in: Remove linking of unnecessary libraries.
-
-2002-09-24 Christopher January <chris@atomice.net>
-
- * fhandler_proc.cc (format_process_stat): make ctty a real device
- number.
- (format_process_status): use effective uid/gid as real and saved
- uid/gid.
-
-2002-09-24 Corinna Vinschen <corinna@vinschen.de>
-
- * errno.cc (errmap): Map ERROR_INVALID_ADDRESS to new errno code
- EOVERFLOW.
- (_sys_errlist): Add entries for EILSEQ and EOVERFLOW.
- (strerror): Ditto.
- * mmap.cc (map_map): Set errno in case of error.
- (mmap64): Remove setting errno explicitely to ENOMEM.
-
-2002-09-24 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (map_map): Add debug output.
- (mmap64): Evaluate gran_len correctly even if offset isn't 0.
-
-2002-09-22 Christopher Faylor <cgf@redhat.com>
-
- More GNUify non-GNU formatted functions calls throughout.
-
-2002-09-22 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in (DLL_O_FILES): Restore formatting.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- GNUify non-GNU formatted functions calls throughout.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * cygserver_shm.cc (with_strerr): Remove macro.
- (server_shmmgr::segment_t::~segment_t): Remove calls to with_strerr.
- (server_shmmgr::segment_t::attach): Ditto.
- (server_shmmgr::new_segment): Ditto.
- * shm.cc (with_strerr): Remove macro.
- (client_shmmgr::shmdt): Remove calls to with_strerr.
- (client_shmmgr::attach): Ditto.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * include/sys/ipc.h: Move to "include/cygwin/ipc.h".
- * include/sys/msg.h: Move to "include/cygwin/msg.h".
- * include/sys/sem.h: Move to "include/cygwin/sem.h".
- * include/sys/shm.h: Move to "include/cygwin/shm.h".
- * include/cygwin/ipc.h: New file.
- * include/cygwin/msg.h: Ditto.
- * include/cygwin/sem.h: Ditto.
- * include/cygwin/shm.h: Ditto.
- * cygserver_shm.h: Update includes.
- * msg.cc: Ditto.
- * sem.cc: Ditto.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * safe_memory.h (safe_delete): Make a templated function.
- * cygserver.cc (~server_request): Update use of safe_delete.
- (main): Ditto.
- * cygserver_client.cc (client_request::handle_request): Ditto.
- (client_request::make_request): Ditto.
- * cygserver_process.cc (~process_cleanup): Ditto.
- (process::remove): Ditto.
- (process::cleanup): Ditto.
- (process_cache::process): Ditto.
- * cygserver_shm.cc (server_shmmgr::segment_t::detach): Ditto.
- (server_shmmgr::delete_segment): Ditto.
- * shm.cc (client_shmmgr::shmdt): Ditto.
- * threaded_queue.cc (~threaded_queue): Ditto.
- (threaded_queue::worker_loop): Ditto.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * safe_memory.h: Replace #include <new> with an explicit
- definition of the placement new operator.
- (safe_delete): Remove unnecessary ## operator.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * cygserver_shm.cc (class server_shmmgr): Remove `cleanup_t'
- friend declaration.
- (cleanup_t::cleanup_t): Use the segment's shmid as the key rather
- than the segment pointer itself.
- (cleanup_t::segptr): Remove method.
- (cleanup_t::shmid): New method.
- (cleanup_t::cleanup): Update for new key value.
- (server_shmmgr::find (segment_t *)): Remove method.
- * include/cygwin/cygserver_process.h (cleanup_routine::key): Make
- method const.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * include/cygwin/cygserver_process.h
- (cleanup_routine::_key): New field.
- (cleanup_routine::cleanup_routine): Initialise new field with new
- argument.
- (cleanup_routine::operator==): New method.
- (cleanup_routine::key): New method.
- (cleanup_routine::cleanup): Make argument non-const.
- (process::is_active): New method.
- (process::remove): Ditto.
- (process::check_exit_code): Rename method.
- * cygserver_process.cc (process::add): Reorganize code.
- (process::remove): New method.
- (process::check_exit_code): Rename method.
- (process::cleanup): Use new `process::is_active' method.
- (process_cache::process): Ditto.
- (process_cache::sync_wait_array): Ditto.
- (process_cache::check_and_remove_process): Ditto.
- * cygserver_shm.cc (server_shmmgr): Make `cleanup_t' a friend.
- (segment_t::detach): Make argument non-const. Remove cleanup
- object from client if appropriate.
- (cleanup_t::_segptr): Remove field.
- (cleanup_t::cleanup_t): Initialise parent explicitly. Remove
- field.
- (cleanup_t::segptr): New method.
- (cleanup_t::cleanup): Add error checking and reporting.
- (server_shmmgr::shmdt): Make argument non-const.
- (server_shmmgr::find (segment_t *)): New method.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * cygserver.cc (client_request_shutdown::client_request_shutdown):
- Comment out verbose tracing statement.
- * cygserver_client.cc
- (client_request_get_version::client_request_get_version): Ditto.
- (client_request_attach_tty::client_request_attach_tty): Ditto.
- * cygserver_shm.cc (client_request_shm::client_request_shm):
- Ditto.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * cygserver_transport_pipes.cc (transport_layer_pipes::listen):
- Set `_is_listening_endpoint' appropriately.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * include/cygwin/cygserver_transport.h
- (transport_layer_base::listen): Change return type.
- (transport_layer_base::connect): Ditto.
- * include/cygwin/cygserver_transport_pipes.h
- (transport_layer_pipes::listen): Change return type.
- (transport_layer_pipes::connect): Ditto.
- (transport_layer_pipes::_sec_none_nih): Remove unused field.
- (transport_layer_pipes::_is_listening_endpoint): New field.
- * cygserver_transport_pipes.cc: Synchronize with sockets code.
- (transport_layer_pipes::transport_layer_pipes): Initialise new
- field. Separate out asserts.
- (transport_layer_pipes::listen): Change return type. Add asserts.
- (transport_layer_pipes::accept): Add asserts.
- (transport_layer_pipes::read): Change conditional to an assert.
- Add assert.
- (transport_layer_pipes::write): Ditto.
- (transport_layer_pipes::connect): Change return type. Change
- conditional to an assert. Add asserts. Rationalize error code
- slightly.
- (transport_layer_pipes::impersonate_client): Add asserts.
- * include/cygwin/cygserver_transport_sockets.h
- (transport_layer_sockets::listen): Change return type.
- (transport_layer_sockets::connect): Ditto.
- (transport_layer_sockets::_addr): Change type of field.
- (transport_layer_sockets::_addr_len): Ditto.
- (transport_layer_sockets::_is_accepted_endpoint): New field.
- (transport_layer_sockets::_is_listening_endpoint): Ditto.
- * cygserver_transport_sockets.cc
- (MAX_CONNECT_RETRY): New constant.
- (transport_layer_sockets::transport_layer_sockets): Initialise new
- fields. Only initialise the socket address where necessary.
- (transport_layer_sockets::listen): Change return type. Rewrite.
- (transport_layer_sockets::accept): Add asserts. Add tracing
- statements. Use a local variable to hold the accepted address.
- (transport_layer_sockets::close): Add tracing statements. Unlink
- the UNIX domain socket file as appropriate. Close the socket
- cleanly.
- (transport_layer_sockets::read): Rewrite method.
- (transport_layer_sockets::write): Ditto.
- (transport_layer_sockets::connect): Change return type. Rewrite.
- * cygserver.cc (server_submission_loop::request_loop): Run the
- listening thread at high priority with special handling for
- shutdown.
- (main): Print the request error code rather than errno in shutdown
- request code. Install signal handlers with sigaction(2) to avoid
- setting SA_RESTART. Check value of the listen method call, now it
- has one.
- * cygserver_client.cc (client_request::make_request): Check new
- return value on connect method call.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * include/cygwin/cygserver_transport_pipes.h
- (cygserver_transport_pipes::_sd): Rename field.
- (cygserver_transport_pipes::_sec_none_nih): Ditto.
- (cygserver_transport_pipes::_sec_all_nih): Ditto.
- (cygserver_transport_pipes::_pipe_name): Ditto.
- (cygserver_transport_pipes::_hPipe): Ditto.
- (cygserver_transport_pipes::_is_accepted_endpoint): Ditto.
- * cygserver_transport_pipes.cc
- (transport_layer_pipes::transport_layer_pipes): Rename fields.
- (transport_layer_pipes::init_security): Ditto.
- (transport_layer_pipes::listen): Ditto.
- (transport_layer_pipes::accept): Ditto.
- (transport_layer_pipes::close): Ditto.
- (transport_layer_pipes::read): Ditto.
- (transport_layer_pipes::write): Ditto.
- (transport_layer_pipes::connect): Ditto.
- (transport_layer_pipes::impersonate_client): Ditto.
- (transport_layer_pipes::revert_to_self): Ditto.
- * include/cygwin/cygserver_transport_sockets.h
- (cygserver_transport_sockets::_fd): Rename field.
- (cygserver_transport_sockets::_addr): Ditto.
- (cygserver_transport_sockets::_addr_len): Ditto.
- * cygserver_transport_sockets.cc
- (transport_layer_sockets::transport_layer_sockets): Rename fields.
- (transport_layer_sockets::listen): Ditto.
- (transport_layer_sockets::accept): Ditto.
- (transport_layer_sockets::close): Ditto.
- (transport_layer_sockets::read): Ditto.
- (transport_layer_sockets::write): Ditto.
- (transport_layer_sockets::connect): Ditto.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * cygserver_shm.cc (with_strerr): Fix use of %p format.
- * shm.cc (client_shmmgr::shmat): Ditto.
- (client_shmmgr::shmctl): Ditto.
- (client_shmmgr::shmdt): Ditto.
- (client_shmmgr::attach): Ditto.
-
-2002-09-22 Christopher Faylor <cgf@redhat.com>
-
- * woutsup.h (system_printf): Remove extraneous semicolon from macro
- definition.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * cygserver_transport_pipes.cc
- (transport_layer_pipes::connect): Use ProtectHandle in DLL code.
- (transport_layer_pipes::close): Use ForceCloseHandle in DLL code.
-
-2002-09-22 Nicholas Wourms <nwourms@netscape.com>
-
- * threaded_queue.h (class queue_submission_loop): Correct friend
- declaration for GCC 3.1.1.
- * include/cygwin/cygserver_process.h (class process): Ditto.
- (class process_cache): Ditto.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * cygserver_shm.cc (server_shmmgr::shmdt): Only call
- delete_segment if the segment exists [sic].
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * safe_memory.h: Include <new> rather than <new.h> for gcc 3.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * safe_memory.h: New file extracted from "woutsup.h".
- * woutsup.h: Move the "safe" new/delete macros into the new
- "safe_memory.h" header file and include that here.
- * cygserver_client.cc: Explicitly include "safe_memory.h" for
- client-side code.
- (client_request::make_request): Use the "safe" new/delete macros
- unconditionally, i.e. use them on the client side as well as on
- the server side.
- * cygserver_transport.cc: Explicitly include "safe_memory.h" for
- client-side code.
- (create_server_transport): Use the "safe" new/delete macros
- unconditionally, i.e. use them on the client side as well as on
- the server side.
- * shm.cc: Include "safe_memory.h".
- (client_shmmgr::instance): Use the "safe" new/delete macros.
- (client_shmmgr::shmdt): Ditto.
- (client_shmmgr::new_segment): Ditto.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * cygserver_process (process::process): Add the client's cygpid
- and winpid to all tracing statements as appropriate.
- (process::exit_code): Ditto.
- (process_cache::check_and_remove_process): Ditto.
- * cygserver_shm.cc (server_shmmgr::shmat): Ditto.
- (server_shmmgr::shmdt): Ditto.
- (server_shmmgr::shmctl): Add a process object argument and remove
- the explicit cygpid argument. Add the client's cygpid and winpid
- to all tracing statements as appropriate.
- (server_shmmgr::shmget): Ditto.
- (client_request_shm::serve): Update for the new signature of the
- shmctl and shmget methods.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * cygserver.cc (client_request_shutdown::serve): Don't set the
- shutdown flag directly, but send a SIGINT, as the signal handler
- sets the flag and the signal breaks the pause(2) in the main loop.
- (print_usage): Add new options.
- (main): Add new --cleanup-threads and --request-threads options to
- set the number of threads used by the daemon. Use pause(2) rather
- the win32 Sleep in the main loop.
- * shm.cc (shmat): Add sigframe.
- (shmctl): Ditto.
- (shmdt): Ditto.
- (shmget): Ditto.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * cygserver_shm.cc: Automatically detach processes from any
- segments they are attached to at exit.
- (class server_shmmgr::attach_t): New class.
- (server_shmmgr::segment_t::IS_DELETED): Rename and make private.
- (server_shmmgr::segment_t::_sequence): Make private.
- (server_shmmgr::segment_t::_flg): Ditto.
- (server_shmmgr::segment_t::_hFileMap): Ditto.
- (server_shmmgr::segment_t::_attach_head): New private field.
- (server_shmmgr::segment_t::segment_t): Initialise new fields.
- Make non-inline.
- (server_shmmgr::segment_t::~segment_t): New method.
- (server_shmmgr::segment_t::is_deleted): Ditto.
- (server_shmmgr::segment_t::is_pending_delete): Ditto.
- (server_shmmgr::segment_t::mark_deleted): Ditto.
- (server_shmmgr::segment_t::attach): Ditto.
- (server_shmmgr::segment_t::detach): Ditto.
- (server_shmmgr::segment_t::find): Ditto.
- (class server_shmmgr::cleanup_t): New class.
- (server_shmmgr::_shm_atts): New private field.
- (server_shmmgr::shmat): Add a process object argument to replace
- the removed process_cache, cygpid and winpid arguments. Remove
- the process_cache manipulations. Move body of code to the
- segment_t::attach method. Increment _shm_atts when required.
- Update tracing statements.
- (server_shmmgr::shmdt): Add a process object argument to replace
- the removed cygpid argument. Move body of code to the
- segment_t::detach method. Decrement _shm_atts when required.
- Update tracing statements.
- (server_shmmgr::shmget): Use the new segment_t::is_deleted method.
- (server_shmmgr::server_shmmgr): Initialise the new _shm_atts
- field.
- (server_shmmgr::delete_segment): Remove the CloseHandle code, as
- this is now done in the segment_t destructor.
- (client_request_shm::serve): Look up the client's process object
- and pass to the server_shmmgr::shmat and server_shmmgr::shmdt
- methods rather than passing the cache, winpid and cygpid.
- * cygserver_process.h: Add a cygpid to the process object to make
- it more useful and then pass process objects rather than winpids
- where possible.
- (cleanup_routine::cleanup): Change argument to be a pointer to a
- process object.
- (class process): Re-order fields for no discernible reason.
- (process::_cygpid): New field.
- (process::process): Add a cygpid argument.
- (process::winpid): New method.
- (process::cygpid): Ditto.
- (process::add): Make public, as it always should have been.
- (process_cache::process): Add a cygpid argument.
- * cygserver_process.cc (process::process): Add a cygpid argument
- and use it to initialise the `_cygpid' field. Re-order
- initialisers to match new field order.
- (process::cleanup): Pass `this' rather than just the winpid to
- cleanup_routine::cleanup.
- (process_cache::process): Add a cygpid argument and pass it to the
- process object constructor.
- * include/sys/shm.h (shmatt_t): Make unsigned as per SUSv3.
- (shm_info::shm_atts): New field.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * cygserver_shm.cc (class server_shmmgr::segment_t): Add `_'
- prefix to the names of all fields.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * msg.cc: New file of stub functions, no functionality.
- * sem.cc: Ditto.
- * shm.cc (client_shmmgr::shmctl): Add support for an out shm_info
- buffer for the SHM_INFO command.
- (client_shmmgr::shmget): Use %X to print keys.
- * include/sys/ipc.h: Comment all fields and values.
- (IPC_PRIVATE): Change to be non-negative.
- * include/sys/msg.h: New file with SUSv3 and ipcs(8) interfaces.
- * include/sys/sem.h: Ditto.
- * include/sys/shm.h: Comment all fields and values.
- (struct shm_info): New struct.
- * cygserver_shm.h (client_request_shm::shminfo): Rename.
- (client_request_shm::shm_info): New method.
- (client_request_shm::_parameters.out.hFileMap): Move into union.
- (client_request_shm::_parameters.out.shminfo): Rename.
- (client_request_shm::_parameters.out.shm_info): New field.
- * cygserver_shm.cc (server_shmmgr::_shm_ids): Rename.
- (server_shmmgr::_shm_tot): New field.
- (server_shmmgr::shmctl): Rename `out_shminfo' argument. Add
- `out_shm_info' argument. Fill in the `out_shm_info' argument in
- the SHM_INFO command.
- (server_shmmgr::shmget): Check `shmflg' against the mode of
- existing segments as per Stevens 1990, p. 123.
- (server_shmmgr::server_shmmgr): Initialise the new `_shm_tot'
- field.
- (server_shmmgr::new_segment): Set ENOMEM if CreateFileMapping
- fails. Pass `size' to new_segment.
- (server_shmmgr::new_segment): Add size argument and use it to
- check against and update the new `_shm_tot' field.
- (server_shmmgr::delete_segment): Update the new `_shm_tot' field.
- * Makefile.in (DLL_OFILES): Add new DLL object files.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * cygserver_transport_pipes.cc: The main change is to make the
- client try harder to connect to the server if it's previously
- connected, and so has good grounds for believing that the server
- is running.
- (MAX_WAIT_NAMED_PIPE_RETRY): Change to be an enumerator.
- (WAIT_NAMED_PIPE_TIMEOUT): Ditto.
- (transport_layer_pipes::accept): Use interlocked operators on
- `pipe_instance'.
- (transport_layer_pipes::close): Rearrange so that FlushFileBuffers
- and DisconnectNamedPipe are only called for accepted endpoints.
- Use interlocked operators on `pipe_instance'.
- (transport_layer_pipes::read): Use set_errno where required.
- (transport_layer_pipes::write): Ditto.
- (transport_layer_pipes::connect): Add local static variable
- `assume_cygserver'. Set it if a connection is made to cygserver,
- clear it if a connection is not made even after retrying. If set,
- ignore all errors from CreateFile and retry the connection. Catch
- the situation where WaitNamedPipe fails to wait [sic] and add a
- `Sleep (0)' so that the server gets a chance to run.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * dcrt0.cc: Only check for cygserver if and when required.
- (dll_crt0_1): Remove call to `cygserver_init ()'.
- * fhandler_tty.cc (fhandler_tty_slave::open): Change the cygserver
- logic to allow for the fact that `cygserver_init ()' may not yet
- have been called.
- (fhandler_tty_slave::cygserver_attach_tty): Tweak the cygserver
- request logic to conform to the practice elsewhere in the code.
- * tty.cc (tty::common_init): Add an explicit call to
- `cygserver_init ()' if it hasn't already been called.
- * include/cygwin/cygserver.h (CYGSERVER_UNAVAIL): Rename from
- `CYGSERVER_DEAD'.
- (client_request_get_version::check_version): Make available in
- cygserver as well the DLL.
- (check_cygserver_available): Ditto. Remove `check_version_too'
- argument.
- (cygserver_init): Ditto. And likewise.
- * cygserver_client.cc (client_request_get_version::check_version):
- Make available in cygserver as well the DLL.
- (client_request::make_request): This may now be called without
- `cygserver_init ()' having been called first. Detect this and
- call it as required. Add tracing.
- (check_cygserver_available): Make available in cygserver as well
- the DLL. Remove `check_version_too' argument and always check the
- version information. And since this is called from within
- `cygserver_init ()', force `cygserver_running' before calling
- `client_request::make_request ()'.
- (cygserver_init): Make available in cygserver as well the DLL.
- Remove `check_version_too' argument.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * cygserver_shm.cc: Implement the ipcs(8) interfaces, IPC_INFO,
- SHM_STAT and SHM_INFO.
- (server_shmmgr::segment_t::sequence): New static field.
- (server_shmmgr::segment_t::key): Remove field, use the new
- ds.shm_perm.key field instead.
- (server_shmmgr::segment_t::shmid): Remove field.
- (server_shmmgr::segment_t::intid): New field.
- (server_shmmgr::segment_t::segment_t): Use the `key' argument to
- initialise `ds.shm_perm.key'. Change from using `shmid' to
- `intid'.
- (server_shmmgr::_shmseg_cnt): Renamed from `_shmid_cnt'.
- (server_shmmgr::_intid_max): Renamed from `_shmid_max.
- (server_shmmgr::shmat): Move the out arguments to the start of the
- argument list. Rename the `pid' argument as `cygpid'. Add
- tracing. Pass an intid to `find ()', not a shmid.
- (server_shmmgr::shmctl): Add separate out arguments. Rename the
- `pid' argument as `cygpid'. Add support for the ipcs(8)
- interfaces. Add tracing. Pass an intid to `find ()', not a
- shmid.
- (server_shmmgr::shmdt): Rename the `pid' argument as `cygpid'.
- Add tracing. Pass an intid to `find ()', not a shmid.
- (server_shmmgr::shmget): Add a separate out arguments. Rename the
- `pid' argument as `cygpid'. Add tracing.
- (server_shmmgr::server_shmmgr): Update for new field names.
- (server_shmmgr::find_by_key): Update for the new `ds.shm_perm.key'
- field.
- (server_shmmgr::find): Update to use the new `segment_t::intid'
- field.
- (server_shmmgr::new_segment): Rename the `pid' argument as
- `cygpid'. Check that the requested size is within bounds. Handle
- new error result from `new_segment (key, HANDLE)'.
- (server_shmmgr::new_segment): Work with intids, not shmids. Check
- that the new intid is within bounds. Update for new field names.
- (server_shmmgr::delete_segment): Pass an intid to `find ()', not a
- shmid. Update for new field names.
- (client_request_shm::serve): Check that the incoming message
- length is the size of the `_parameters.in' struct, not of the
- whole in/out parameter union. Likewise, set the outgoing message
- length to the size of the `_parameters.out' struct. Update for
- the new server_shmmgr interfaces.
- * include/sys/ipc.h (ipc_perm::key): New field.
- * include/sys/shm.h (SHM_INFO): New constant.
- * cygserver_ipc.h (IPCMNI): New constant.
- (ipc_int2ext): Add `sequence' argument and munge this into the
- external ipc id.
- (ipc_ext2int_subsys): Unmunge the sequence number from the
- external ipc id.
- (ipc_ext2int): Ditto.
- (ipc_inc_id): Remove.
- (ipc_dec_id): Remove.
- * cygserver_shm.h (SHMMAX): New constant.
- (SHMMIN): Ditto.
- (SHMMNI): Ditto.
- (SHMSEG): Ditto.
- (SHMALL): Ditto.
- (client_request_shm::_parameters): Re-arrange as a union of two
- separate structs, one for in arguments, the other for out.
- (client_request_shm::shmid): Update for the new parameter layout.
- (client_request_shm::ds): Ditto.
- (client_request_shm::info): New method.
- * shm.cc (client_shmmgr::_shmat_cnt): New static field.
- (client_shmmgr::shmat): Add locking. Add tracing.
- (client_shmmgr::shmctl): Update for ipcs(8) commands. Add
- tracing. Add more argument checking.
- (client_shmmgr::shmdt): Add locking. Add tracing. Update the new
- `_shmat_cnt' field.
- (client_shmmgr::shmget): Add tracing.
- (client_shmmgr::fixup_shms_after_fork): Add tracing. Add
- consistency checking.
- (client_shmmgr::attach): Add more tracing.
- (client_shmmgr::new_segment): Update the new `_shmat_cnt' field.
- (client_request_shm::client_request_shm): Update for the new
- parameter layout. Set the outgoing message length to the size of
- the `_parameters.in' struct, not of the whole in/out parameter
- union.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * shm.cc: Remove the use of a static client_shmmgr object.
- (client_shmmgr::_instance): New static variable.
- (client_shmmgr::instance): Allocate a new shmmgr on the heap,
- rather than using a local static object.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * cygserver_transport.cc (create_server_transport): Fix
- cut-and-paste error.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * cygserver_client.cc (client_request::handle_request): Don't
- bother with the client request activity marker when compiled with
- debugging output.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * cygserver_transport_pipes.cc
- (MAX_WAIT_NAMED_PIPE_RETRY): New constant.
- (WAIT_NAMED_PIPE_TIMEOUT): Ditto.
- (transport_layer_pipes::close): The `pipe' field is now either
- NULL or a valid handle, and it should never have the value
- `INVALID_HANDLE_VALUE'.
- (transport_layer_pipes::read): Ditto.
- (transport_layer_pipes::write): Ditto.
- (transport_layer_pipes::connect): Ditto.
- (transport_layer_pipes::impersonate_client): Ditto.
- (transport_layer_pipes::connect): Ditto. New, but still bogus,
- retry logic.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * cygserver_shm.cc (server_shmmgr::server_shmmgr): All fields have
- to be initialized now that the singleton is no longer static.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * cygserver_shm.cc (server_shmmgr::_instance): New static field.
- (server_shmmgr::_instance_once): Ditto.
- (server_shmmgr::initialise_instance): New static method.
- (server_shmmgr::instance): Use a pthread_once_t rather than
- relying on a local static variable.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * woutsup.h: Remove all uses of the C++ new and delete operators
- throughout cygserver until they are fully thread-safe.
- (safe_new0): New macro to replace the C++ new operator.
- (safe_new): Ditto.
- (safe_delete): New macro to replace the C++ delete operator.
- * cygserver_client.cc (client_request::handle_request): Replace
- all uses of the C++ new and delete operators with the new macros
- from "woutsup.h".
- (client_request::make_request): Ditto.
- * cygserver_process.cc (~process_cleanup): Ditto.
- (process::cleanup): Ditto.
- (process_cache::process): Ditto.
- (process_cache::check_and_remove_process): Ditto.
- * cygserver_shm.cc (server_shmmgr::new_segment): Ditto.
- (server_shmmgr::delete_segment): Ditto.
- * cygserver_transport.cc (create_server_transport): Ditto.
- * cygserver_transport_pipes.cc
- (transport_layer_pipes::accept): Ditto.
- * cygserver_transport_sockets.cc
- (transport_layer_sockets::accept): Ditto.
- * threaded_queue.cc (~threaded_queue): Ditto.
- (threaded_queue::worker_loop): Ditto.
- (threaded_queue::stop): Replace sleep(3) with win32 Sleep.
- * cygserver.cc (~server_request): Replace all uses of the C++ new
- and delete operators with the new macros from "woutsup.h".
- (server_submission_loop::request_loop): Ditto.
- (main): Ditto. Replace sleep(3) with win32 Sleep. Replace
- iostreams with FILEs.
- (print_usage): Replace iostreams with FILEs.
- (print_version): Ditto.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * cygserver_transport_sockets.cc
- (transport_layer_sockets::accept): Rename local variable
- `accept_fd' to avoid shadowing the `fd' field.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * cygwin_ipc.h: Moved (back) to "include/sys/ipc.h".
- * cygwin_shm.h: Moved (back) to "include/sys/shm.h".
- * include/sys/ipc.h: New file.
- * include/sys/shm.h: New file.
- * cygserver_shm.h: Update for new header file locations.
- * ipc.cc: Ditto.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * cygserver_client.cc (client_request::make_request): Comment out
- a verbose tracing statement.
- * cygserver_process.cc (process_cache::sync_wait_array): Fix
- broken assert.
- * include/cygwin/cygserver.h (class client_request): Remove excess
- use of `class' qualifier in declarations.
- (class client_request_get_version): Ditto.
- (class client_request_shutdown): Ditto.
- (class client_request_attach_tty): Ditto.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * cygserver_ipc.h: New file.
- * cygserver_shm.h: Re-written from scratch.
- * cygserver_shm.cc: Ditto.
- * shm.cc: Ditto.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * threaded_queue.h (class queue_request): Re-write.
- (threaded_queue_thread_function): Remove.
- (class queue_process_param): Remove.
- (class threaded_queue): Re-write.
- (class queue_submission_loop): New version of the old
- `queue_process_param' class.
- (TInterlockedExchangePointer): New templated function.
- (TInterlockedCompareExchangePointer): Ditto.
- * threaded_queue.cc (worker_function): Remove.
- (class threaded_queue): Re-write.
- (class queue_process_param): Remove.
- (class queue_submission_loop): New version of the old
- `queue_process_param' class.
- * include/cygwin/cygserver_process.h (process_cleanup): Re-write.
- (class process_process_param): Remove.
- (class cleanup_routine): Re-write.
- (class process): Re-write.
- (class process_cache): Re-write.
- * cygserver_process.cc (process_cleanup): Re-write.
- (class process_process_param): Remove.
- (class cleanup_routine): Re-write.
- (class process): Re-write.
- (class process_cache): Re-write.
- * cygserver.cc (request_count): Remove unused variable.
- (class server_request): Move methods inline.
- (class server_process_param): Remove.
- (class server_request_queue): Remove.
- (request_queue): Move into `main ()' and change type to
- `threaded_queue'.
- (request_loop): Remove.
- (class server_submission_loop): New version of the old
- `server_process_param' class.
- (shutdown_server): New variable.
- (client_request_shutdown::serve): Set `shutdown_server' to trigger
- shutdown.
- (handle_signal): Ditto.
- (main): Install signal handler for SIGINT rather than SIGQUIT.
- Use new interfaces for the `request_queue' and the `cache'.
- Create a `server_submission_loop' and add to the `request_queue'.
- Add check for the `shutdown_server' variable to the main loop.
- * cygserver_shm.cc (client_request_shm::serve): Release the
- process object after use.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * cygserver_client.cc (client_request::handle_request): Correct
- tracing statement.
- * cygserver_transport_pipes.cc: Remove local definition of
- FILE_FLAG_FIRST_PIPE_INSTANCE constant.
- * cygwin_ipc.h: Update copyright notice.
- * cygwin_shm.h: Ditto.
- * woutsup.h: Add definition of _WIN32_WINNT.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * cygserver_client (client_request::make_request): Replace my
- inappropriate use of set_errno () with error_code () throughout.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * include/cygwin/cygserver.h: Add forward declarations of class
- transport_layer_base and class process_cache to reduce
- dependencies between header files.
- * include/cygwin/cygserver_process.h: Add include of
- "threaded_queue.h".
- * cygserver.cc: Remove unnecessary cygserver header files.
- * cygserver_client.cc: Ditto.
- * cygserver_process.cc: Ditto.
- * cygserver_shm.cc: Ditto.
- * cygserver_shm.h: Ditto.
- * cygserver_transport_pipes.cc: Ditto.
- * dcrt0.cc: Ditto.
- * fhandler_tty.cc: Ditto.
- * tty.cc: Ditto.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * cygserver_shm.h: Replace <sys/shm.h> with "cygwin_shm.h" after
- merge from HEAD.
- * cygwin_ipc.h: Update with changes to include/sys/ipc.h lost in
- merge from HEAD.
- * cygwin_shm.h: Ditto.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * cygserver.cc: The tests for a duplicate server instance are now
- the responsibility of the transport layer.
- (request_loop): Use new `recoverable' flag in call to
- `cygserver_transport::accept ()' and shutdown on an unrecoverable
- error.
- (main): Never call `cygserver_init ()'. Fake `cygserver_running'
- just for sending a shutdown request.
- * cygserver_client.cc (client_request::send): Comment out
- message-size tracing statements as verbose.
- (client_request::handle): Ditto.
- (client_request_get_version::check_version): #ifdef as DLL-only.
- (check_cygserver_available): Ditto.
- (cygserver_init): Ditto.
- * include/cygwin/cygserver.h
- (client_request_get_version::check_version): #ifdef as DLL-only.
- (check_cygserver_available): Ditto.
- (cygserver_init): Ditto.
- * include/cygwin/cygserver_transport.h
- (transport_layer_base::impersonate_client): #ifdef as
- cygserver-only.
- (transport_layer_base::revert_to_self): Ditto.
- (transport_layer_base::listen): Ditto.
- (transport_layer_base::accept): Ditto. Add a `recoverable' out
- flag for error handling.
- * include/cygwin/cygserver_transport_sockets.h: Ditto.
- * include/cygwin/cygserver_transport_pipes.h: Ditto.
- (transport_layer_pipes): Change type of the `pipe_name' field.
- Remove the `inited' field, as unnecessary. Add new
- `is_accepted_endpoint' field.
- * include/cygwin/cygserver_transport.cc
- (transport_layer_base::impersonate_client): #ifdef as
- cygserver-only.
- (transport_layer_base::revert_to_self): Ditto.
- * include/cygwin/cygserver_transport_sockets.cc
- (transport_layer_sockets::listen): #ifdef as cygserver-only.
- (transport_layer_sockets::accept): #ifdef as cygserver-only.
- Analyse any errno from `accept ()' and set `recoverable' as
- appropriate.
- * cygserver_transport_pipes.cc: Add local #define of
- `FILE_FLAG_FIRST_PIPE_INSTANCE'.
- (pipe_instance_lock_once): New variable.
- (pipe_instance_lock): Ditto.
- (pipe_instance): Ditto.
- (initialise_pipe_instance_lock): New function.
- (transport_layer_pipes::transport_layer_pipes): Change
- initialization of `pipe_name'. Initialize `is_accepted_endpoint'
- as appropriate. Remove use of `inited'.
- (transport_layer_pipes::impersonate_client): #ifdef as
- cygserver-only.
- (transport_layer_pipes::revert_to_self): Ditto.
- (transport_layer_pipes::listen): Ditto.
- (transport_layer_pipes::accept): Ditto. Keep track of how often
- many named pipes have been created, in the `pipe_instance'
- variable, and pass the `FILE_FLAG_FIRST_PIPE_INSTANCE' flag on the
- open of the first instance. Analyse the error code from
- `CreateNamedPipe ()' and set the `recoverable' flag as
- appropriate.
- (transport_layer_pipes::close): Update the `pipe_instance' count.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * woutsup.h (cygserver_running): Add declaration.
- (api_fatal): Eliminate.
- * include/cygwin/cygserver.h
- (client_request_get_version::check_version): Change return type to
- bool.
- (check_cygserver_available): New function.
- (cygserver_init): Add check_version_too argument.
- * cygserver_client.cc (allow_daemon): Make a bool.
- (client_request_get_version::make_request): See errno on error.
- Remove special case for CYGSERVER_REQUEST_GET_VERSION; this is now
- handled in cygserver_init().
- (client_request_get_version::check_version): Use syscall_printf()
- instead of api_fatal(). Return true if cygserver version is
- compatible.
- (check_cygserver_available): New function; code moved here from
- cygserver_init().
- (cygserver_init): Move some code into check_cygserver_available().
- * cygserver.cc (__set_errno): Copy from debug.cc so that
- set_errno() can be used when __OUTSIDE_CYGWIN__.
- (main): Call cygserver_init() to set up cygserver_running and add
- checks against this to (try and) prevent multiple copies of
- cygserver running simultaneously. Remember to delete all
- transport connections so that (one day) the transport classes can
- tidy up on cygserver shutdown.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * cygserver.cc (main): Adjust tracing output for a cleaner display
- when compiled without --enable-debugging.
- * threaded_queue.cc (threaded_queue::cleanup): Ditto.
- (queue_process_param::stop): Ditto.
- * include/cygwin/cygserver.h
- (client_request::make_request): Make non-virtual.
- (client_request::send): Make virtual and protected, not private.
- (client_request_attach_tty::send): New virtual method.
- * cygserver_client.cc: Use the `msglen()' accessor rather than
- `_header.msglen' throughout.
- (client_request_attach_tty::send): New method.
- (client_request::make_request): Remove the explicit close of
- `transport' as it is closed on deletion.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * include/cygwin/cygserver.h: Change the client_request classes to
- give greater encapsulation and to allow variable length requests
- and replies.
- (enum cygserver_request_code): Now client_request::request_code_t.
- (class request_header): Now client_request::header_t. Make a
- union of the request_code and the error_code. The `cb' field,
- which was the buffer length, is now the `size_t msglen' field.
- (struct request_get_version): Now
- client_request_get_version::request_get_version.
- (struct request_shutdown): Remove unused type.
- (struct request_attach_tty): Now
- client_request_attach_tty::request_attach_tty.
- (client_request::_buf): Make field const.
- (client_request::_buflen): New const private field.
- (client_request::request_code): New accessor.
- (client_request::error_code): Ditto.
- (client_request::msglen): Ditto.
- (client_request::handle_request): New static method.
- (client_request::make_request): New virtual method.
- (client_request::handle): New method.
- (client_request::send): Make private.
- (client_request_get_version::check_version): New method.
- (client_request_get_version::serve): Make private.
- (client_request_get_version::version): Ditto.
- (client_request_shutdown::serve): Ditto.
- (client_request_attach_tty::req): Ditto.
- (client_request_attach_tty::serve): Ditto.
- (client_request_attach_tty::from_master): Make method const.
- (client_request_attach_tty::from_master): Ditto.
- * cygserver_client.cc
- (client_request_get_version::client_request_get_version): Track
- changes to the client_request classes.
- (client_request_attach_tty::client_request_attach_tty): Ditto.
- (client_request_get_version::check_version): New method to
- encapsulate code from cygserver_init().
- (client_request_shutdown::client_request_shutdown): Move into
- "cygserver.cc".
- (client_request::send): Track changes to the client_request
- classes. Add more error checking.
- (client_request::handle_request): New static method containing the
- first half of the old server_request::process() code.
- (client_request::make_request): New method to replace the old
- cygserver_request() function.
- (client_request::handle): New method containing the second half of
- the old server_request::process() code.
- (cygserver_init): Track changes to the client_request classes. In
- particular, some code moved into the
- client_request_get_version::check_version() method.
- * cygserver.cc (client_request_attach_tty::serve): Track changes
- to the client_request classes. In particular, only return a reply
- body if some handles are successfully duplicated for the client.
- And remove goto's.
- (client_request_get_version::serve): Track changes to the
- client_request classes.
- (client_request_shutdown::serve): Ditto.
- (class client_request_invalid): Dead, and so young too.
- (server_request::request_buffer): Remove unnecessary field.
- (client_request_shutdown::client_request_shutdown): Moved here
- from "cygserver_client.cc".
- (server_request::process): Implementation moved into the new
- client_request::handle_request() and client_request::handle()
- methods.
- * cygserver_shm.h (class client_request_shm): Put client- and
- server-specific interfaces inside #ifdef/#ifndef __INSIDE_CYGWIN__
- guards.
- (client_request_shm::serve): Make private.
- * cygserver_shm.cc
- (client_request_shm::client_request_shm): Track changes to the
- client_request classes.
- (client_request_shm::serve): Ditto
- * shm.cc (client_request_shm::client_request_shm): Ditto. Use
- alloc_sd() rather than set_security_attribute() to get access to
- the SECURITY_DESCRIPTOR length, so that we can use it to set the
- request body length.
- (shmat): Track changes to the client_request classes. In
- particular, allocate client_request objects on the stack rather
- than on the heap, and use the client_request::make_request()
- method rather than the old cygserver_request() function.
- (shmdt): Ditto.
- (shmctl): Ditto.
- (shmget): Ditto.
- * fhandler_tty.cc (fhandler_tty_slave::cygserver_attach_tty): Ditto.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * include/cygwin/cygserver_transport.h
- (cygserver_transport::read): Change buffer type to void *.
- (cygserver_transport::write): Ditto.
- * include/cygwin/cygserver_transport_sockets.h
- (cygserver_transport_sockets::read): Ditto.
- (cygserver_transport_sockets::write): Ditto.
- * include/cygwin/cygserver_transport_pipes.h
- (cygserver_transport_pipes::read): Ditto.
- (cygserver_transport_pipes::write): Ditto.
- * cygserver_transport_sockets.cc
- (cygserver_transport_sockets::read): Ditto.
- (cygserver_transport_sockets::write): Ditto.
- * cygserver_transport_pipes.cc
- (cygserver_transport_pipes::read): Ditto. Set errno on error, to
- match behaviour of cygserver_transport_sockets class.
- (cygserver_transport_pipes::write): Ditto.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * cygserver.cc (version): New static variable.
- (server_request_queue::add_connection): Remove my gratuitous use
- of studly caps.
- (setup_privileges): Declare static.
- (handle_signal): Ditto.
- (longopts): Make a local variable of main().
- (opts): Ditto.
- (print_usage): New function.
- (print_version): Ditto (tip of the hat to Joshua Daniel Franklin
- for inspiration here).
- (main): More argument checking. Add --help and --version options.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * include/cygwin/cygserver.h (client_request::serve): Make pure
- virtual.
- * cygserver.cc (client_request::serve): Remove definition of pure
- virtual method.
- (class client_request_invalid): New class.
- (server_request::process): Use new client_request_invalid
- class. And remove goto's.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * cygserver.cc (class server_request): Add virtual destructor.
- (server_request_queue::addConnection): New method to replace bad
- virtual add() method.
- (request_loop): Replace call to queue->add() with call to
- queue->addConnection().
- (server_request::server_request): Use field initialization.
- (server_request::~server_request): New virtual destructor.
- (server_request::process): Remove close and delete of
- transport_layer_base object. It is deleted by the server_request's
- own destructor and closed by its own destructor.
- * include/cygwin/cygserver.h
- (client_request::operator request_header): Remove unused method.
- * cygserver_client.cc: Ditto.
- * include/cygwin/cygserver_process.h
- (class cleanup_routine): Add virtual destructor.
- (cleanup_routine::cleanup): Make pure virtual.
- (class process_cache): Make destructor non-virtual.
- (process_cache::add): Ditto.
- * cygserver_process.cc
- (cleanup_routine::~cleanup_routine): New virtual destructor.
- * include/cygwin/cygserver_transport.h
- (class transport_layer_base): Add virtual destructor.
- * cygserver_transport.cc
- (transport_layer_base::~transport_layer_base): New virtual
- destructor.
- * include/cygwin/cygserver_transport_pipes.h
- (class transport_layer_pipes): Add virtual destructor.
- * cygserver_transport_pipes.cc
- (transport_layer_pipes::~transport_layer_pipes): New virtual
- destructor.
- (transport_layer_pipes::close): Null out handle after closing.
- * include/cygwin/cygserver_transport_sockets.h
- (class transport_layer_sockets): Add virtual destructor.
- * cygserver_transport_sockets.cc
- (transport_layer_sockets::~transport_layer_sockets): New virtual
- destructor.
- (transport_layer_sockets::close): Null out fd after closing.
- * threaded_queue.h (class queue_request): Add virtual destructor.
- (queue_request::process): Make pure virtual.
- * threaded_queue.cc (~queue_request): New virtual destructor.
- (queue_request::process): Remove definition of pure virtual
- method.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * include/cygwin/cygserver.h (client_request::send): Make
- non-virtual.
- (class client_request_attach_tty): Put client- and server-specific
- interfaces inside #ifdef/#ifndef __INSIDE_CYGWIN__ guards.
- * cygserver_client.cc: Ditto.
- (cygserver_init): Fix error handling.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * cygserver.cc: Throughout the code, check and correct level of
- the XXX_printf() functions used. Comment out several of the
- debug_printf() calls with "// verbose:". Reformat and correct
- typos of some of the XXX_printf() formats.
- * cygserver_process.cc: Ditto.
- * cygserver_shm.cc: Ditto.
- * cygserver_transport_pipes.cc: Ditto.
- * cygserver_transport_sockets.cc: Ditto.
- * shm.cc (hi_ulong): New function to allow printing of a 64-bit
- key with current small_printf implementation.
- (lo_ulong): Ditto.
- (client_request_shm::client_request_shm): Use hi_ulong() and
- lo_ulong() in call to debug_printf().
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * cygserver_shm.cc: Remove #define __INSIDE_CYGWIN__ from around
- <sys/shm.h> as it no longer contains any internal code.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * include/sys/ipc.h (IPC_PRIVATE): Add cast to key_t.
- (IPC_INFO): New flag for ipcs(8).
- (IPC_RMID IPC_SET IPC_STAT): Renumber.
- * include/sys/shm.h (SHM_RDONLY SHM_RND): Renumber with distinct
- values [sic].
- (class _shmattach): Internal type moved to "cygserver_shm.h".
- (class shmnode): Ditto.
- (class shmid_ds): Ditto.
- (struct shmid_ds): Add spare fields.
- (struct shminfo): New type for IPC_INFO interface.
- * cygserver_shm.h: Remove obsolete #if 0 ... #endif block.
- (class shm_cleanup): Remove unused class.
- (struct _shmattach): Internal type moved from <sys/shm.h>.
- (struct shmnode): Ditto.
- (struct int_shmid_ds): Ditto. Renamed to avoid name clash with
- public interface struct shmid_ds. Use the shmid_bs structure as a
- field.
- * cygserver_shm.cc: Remove obsolete #if 0 ... #endif block.
- (client_request_shm::serve): Update for redefinition of
- int_shmid_ds structure.
- * shm.cc (build_inprocess_shmds): Ditto.
- (fixup_shms_after_fork): Ditto.
- (shmctl): Ditto.
- (shmget): Ditto. Remove obsolete #if 0 ... #endif code.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * include/cygwin/cygserver_transport.h
- (transport_layer_base::transport_layer_base): Remove since it is
- now redundant.
- (transport_layer_base::listen): Make a pure virtual method.
- (transport_layer_base::accept): Ditto.
- (transport_layer_base::close): Ditto.
- (transport_layer_base::read): Ditto.
- (transport_layer_base::write): Ditto.
- (transport_layer_base::connect): Ditto.
- * cygserver_transport.cc
- (transport_layer_base::transport_layer_base): Remove since it is
- now redundant.
- (transport_layer_base::listen): Remove since it is now a pure
- virtual method.
- (transport_layer_base::accept): Ditto.
- (transport_layer_base::close): Ditto.
- (transport_layer_base::read): Ditto.
- (transport_layer_base::write): Ditto.
- (transport_layer_base::connect): Ditto.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * cygserver.cc (check_and_dup_handle): Only use security code if
- running on NT, i.e. if wincap.has_security().
- (client_request_attach_tty::serve): Add check for has_security().
- * cygserver_process.cc (process_cache::process): Use DWORD winpid
- throughout to avoid win32 vs. cygwin pid confusion.
- (process::process): Ditto.
- * cygserver_shm.cc (client_request_shm::serve): Only use security
- code if running on NT, i.e. if wincap.has_security().
- * cygserver_shm.h (client_request_shm::parameters.in): Replace the
- ambiguous pid field with cygpid and winpid fields.
- (client_request_shm::client_request_shm): Reduce to only two
- client-side constructors: one for SHM_CREATE, another for all the
- other requests.
- * shm.cc (client_request_shm::client_request_shm):
- Ditto. Initialize cygpid and winpid fields here. On NT initialize
- sd_buf here using set_security_attribute() to make use of the euid
- and egid.
- (shmat): Use new client_request_shm constructor.
- (shmdt): Ditto.
- (shmctl): Ditto.
- (shmget): Ditto. Remove security code, now performed in the
- relevant client_request_shm constructor.
- * include/cygwin/cygserver_process.h: (class cleanup_routine):
- Change winpid type to DWORD.
- (class process): Ditto.
-
-2002-09-22 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * woutsup.h: New file.
- * cygserver.cc: Use "woutsup.h" and new XXX_printf macros.
- (getfunc): New function, copied verbatim from "strace.cc".
- (__cygserver__printf): New function.
- * cygserver_client.cc: Use "woutsup.h" and new XXX_printf macros.
- * cygserver_process.cc: Ditto.
- * cygserver_shm.cc: Ditto.
- * cygserver_transport.cc: Ditto.
- * cygserver_transport_pipes.cc: Ditto.
- * cygserver_transport_sockets.cc: Ditto.
- * threaded_queue.cc: Ditto.
- * shm.cc: Remove trailing \n from XXX_printf format strings.
- * Makefile.in: Remove special __OUTSIDE_CYGWIN__ case for
- cygserver_shm.cc.
-
-2002-09-21 Christopher Faylor <cgf@redhat.com>
-
- * init.cc (dll_entry): Temporarily disable thread detach code.
-
-2002-09-21 Christopher Faylor <cgf@redhat.com>
-
- * fhandler.cc (fhandler_base::dup): Don't set handle on failure.
- Caller has already taken care of that.
- * fhandler_console.cc (fhandler_console::open): Initialize handles to
- NULL.
- (fhandler_console::close): Ditto.
-
-2002-09-21 Christopher Faylor <cgf@redhat.com>
-
- GNUify non-GNU formatted functions calls throughout.
-
-2002-09-21 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * cygwin_ipc.h: Move to "include/cygwin/ipc.h".
- * cygwin_shm.h: Move to "include/cygwin/shm.h".
- * include/cygwin/ipc.h: New file.
- * include/cygwin/shm.h: New file.
- * ipc.c:c Update <cygwin/ipc.h> include.
- * cygserver_shm.cc: Update <cygwin/shm.h> include.
- * shm.cc: Ditto.
-
-2002-09-21 Robert Collins <rbtcollins@hotmail.com>
-
- * pthread.cc: Use class::call for converted pthread and semaphore
- calls.
- * thread.cc: Convert various __pthread_call and __sem_call to
- pthread::call and sem::call throughout.
- * pthread.h (__pthread_cancel): Convert to pthread::cancel.
- (__pthread_join): Convert to pthread::join.
- (__pthread_detach): Convert to pthread::detach.
- (__pthread_create): Convert to pthread::create.
- (__pthread_once): Convert to pthread::once.
- (__pthread_atfork): Convert to pthread::atfork.
- (__pthread_suspend): Convert to pthread::suspend.
- (__pthread_continue): Convert to pthread::resume.
- (__sem_init): Convert to semaphore::init.
- (__sem_destroy): Convert to semaphore::destroy.
- (__sem_wait): Convert to semaphore::wait.
- (__sem_trywait): Convert to semaphore::trywait.
- (__sem_post): Convert to semaphore::post.
-
-2002-09-21 Robert Collins <rbtcollins@hotmail.com>
-
- * thread.cc: Finish the removal of the separate pthread_key
- destructor list.
- Remove all pthread_key_destructor and pthread_key_destructor_list
- references throughout.
- (pthread::exit): Call the new pthread_key interface to activate
- destructors.
- (pthread_key::keys): Change into a list.
- (pthread_key::saveAKey): New method, used via forEach.
- (pthread_key::restoreAKey): Ditto.
- (pthread_key::destroyAKey): Ditto.
- (pthread_key::fixup_before_fork): Use the List::forEach functionality.
- (pthread_key::fixup_after_fork): Ditto.
- (pthread_key::runAllDestructors): New method implementation.
- (pthread_key::pthread_key): Use List::Insert rather than custom list
- code.
- (pthread_key::~pthread_key): Use List::Remove for the same reason.
- * thread.h: Remove all pthread_key_destructor and
- pthread_key_destructor_list references throughout.
- (List): Move the interface above pthread_key in the header.
- Use atomic operations during insert and delete.
- (List::forEach): A generic interface for doing something on each node.
- (pthread_key::runAllDestructors): New method, run all destructors.
- (pthread_key::fork_buf): Make private.
- (pthread_key::run_destructor): Ditto.
- (pthread_key::saveAKey): New method for clearer source.
- (pthread_key::restoreAKey): Ditto.
- (pthread_key::destroyAKey): Ditto.
- (MTinterface::destructors): Remove.
-
-2002-09-21 Robert Collins <rbtcollins@hotmail.com>
-
- * thread.cc: Partial refactoring of pthread_key destructor
- handling. Loosely based on Thomas Pfaff's work.
- (pthread_key_destructor_list::Insert): Remove.
- (pthread_key_destructor_list::Pop): Remove.
- (pthread_key_destructor_list::IterateNull): Call the key's
- run_destructor method.
- (pthread_key::pthread_key): Initialize new member.
- (pthread_key::get): Mark as const for correctness.
- (pthread_key::run_destructor): Implement.
- * thread.h (pthread_key::get): Mark as const for correctness.
- (pthread_key::run_destructor): Declare.
- (List): New template class that implements a generic list.
- (pthread_key_destructor_list): Inherit from List, and remove
- now duplicate functions.
-
-2002-09-21 Robert Collins <rbtcollins@hotmail.com>
-
- * thread.cc: Change verifyable_object_isvalid calls with
- PTHREAD_CONDATTR_MAGIC, PTHREAD_MUTEXATTR_MAGIC, PTHREAD_COND_MAGIC,
- SEM_MAGIC to objecttype::isGoodObject() calls throughout.
- (pthread_condattr::isGoodObject): Implement.
- (pthread_mutex::isGoodInitializer): Implement.
- (pthread_mutex::isGoodInitializerOrObject): Minor bugfix in the
- check for verifyable_object_isvalid result.
- (pthread_mutexattr::isGoodObject): Implement.
- (pthread_cond::isGoodObject): Ditto.
- (pthread_cond::isGoodInitializer): Ditto.
- (pthread_cond::isGoodInitializerOrObject): Ditto.
- (semaphore::isGoodObject): Ditto.
- * thread.h (pthread_mutex::isGoodInitializer): Declare.
- (pthread_condattr::isGoodObject): Ditto.
- (pthread_cond::isGoodObject): Const correctness.
- (pthread_cond::isGoodInitializer): Declare.
- (pthread_cond::isGoodInitializerOrObject): Ditto.
- (semaphore::isGoodObject): Const correctness.
-
-2002-09-21 Robert Collins <rbtcollins@hotmail.com>
-
- * thread.cc: Change verifyable_object_isvalid calls with
- PTHREAD_MUTEX_MAGIC and PTHREAD_KEY_MAGIC and PTHREAD_ATTR_MAGIC to
- ::isGoodObject() calls throughout.
- (MTinterface::Init): Remove dead code.
- (pthread_attr::isGoodObject): Implement.
- (pthread_key::isGoodObject): Implement.
- (pthread_mutex::isGoodObject): Implement.
- (pthread_mutex::isGoodInitializerOrObject): Implement.
- (pthread::isGoodObject): Update signature.
- * thread.h (pthread_key::isGoodObject): Declare.
- (pthread_attr::isGoodObject): Ditto.
- (pthread_mutex::isGoodObject): Ditto.
- (pthread_mutex::isGoodInitializerOrObject): Ditto.
- (pthread::isGoodObject): Change to a const parameter for const
- correctness.
- (pthread_mutexattr::isGoodObject): Declare.
- (pthread_condattr::isGoodObject): Ditto.
- (pthread_cond::isGoodObject): Ditto.
- (semaphore::isGoodObject): Ditto.
-
-2002-09-19 Christopher Faylor <cgf@redhat.com>
-
- Cleanup calls to CreateFile throughout.
- * dcrt0.cc (__api_fatal): Correctly check for failing return from CreateFile.
- * assert.cc (__assert): Don't check return value from CreateFile for NULL.
- * fhandler_console.cc (set_console_state_for_spawn): Ditto.
- * fork.cc (fork_parent): Ditto.
-
-2002-09-18 Christopher Faylor <cgf@redhat.com>
-
- * cygthread.cc (cygthread::initialized): Avoid copying on fork or some
- threads may not end up in the pool.
- (cygthread::new): Avoid race when checking for initialized. Add
- debugging code.
-
-2002-09-18 Pierre Humblet <pierre.humblet@ieee.org>
-
- * fhandler.cc (fhandler_base::raw_read): Add case for
- ERROR_INVALID_HANDLE due to Win95 directories.
- (fhandler_base::open): Handle errors due to Win95 directories.
- (fhandler_base::close): Add get_nohandle () test.
- (fhandler_base::set_close_on_exec): Ditto.
- (fhandler_base::fork_fixup): Ditto.
- (fhandler_base::lock): Change error code to Posix EINVAL.
- (fhandler_base::dup): If get_nohandle (), set new value to
- INVALID_HANDLE_VALUE instead of NULL.
- * fhandler_disk_file.cc (fhandler_disk_file::fstat): Call fstat_by_name
- if get_nohandle (). Remove extraneous element from strpbrk.
- (fhandler_disk_file::open): Remove test for Win95 directory.
-
- * fhandler_random.cc (fhandler_dev_random::open): Add set_nohandle ().
- * fhandler_clipboard.cc (fhandler_dev_clipboard::open): Ditto.
- * fhandler_zero.cc (fhandler_dev_zero::open): Ditto.
- (fhandler_dev_zero::close): Delete.
- * fhandler.h (class fhandler_dev_zero): Ditto.
-
-2002-09-17 Robert Collins <rbtcollins@hotmail.com>
-
- * thread.cc (pthread_key::set): Preserve GetLastError(). Reported
- by Thomas Pffaf.
-
-2002-09-17 Robert Collins <rbtcollins@hotmail.com>
-
- This work inspires by Thomas Pfaff's pthread_fork patch (1).
- * fork.cc (fork_child): Remove MTinterface fixup call, it's
- adsorbed by pthread::atforkchild.
- Rename __pthread_atforkchild to pthread::atforkchild to give
- access to private members.
- (fork_parent): Rename __pthread_atforkparent to
- pthread::atforkparent to give it access to private members.
- Ditto for __pthread_atforkprepare.
- * thread.cc: Fix some formatting problems throughout.
- (MTinterface::fixup_before_fork): Implement.
- (MTinterface::fixup_after_fork): Fix pthread_keys.
- (pthread_key::keys): Implement.
- (pthread_key::fixup_before_fork): Ditto.
- (pthread_key::fixup_after_fork): Ditto.
- (pthread_key::pthread_key): Add to pthread_key::keys.
- (pthread_key::~pthread_key): Remove from pthread_key::keys.
- (pthread_key::saveKeyToBuffer): Implement.
- (pthread_key::recreateKeyFromBuffer): Ditto.
- (pthread::atforkprepare): Prepare all MT classes for fork.
- (pthread::atforkchild): And fix them up afterwards.
- * thread.h (pthread_key): Buffer the key value during
- fork in fork_buf.
- List the keys needing to be fixed up in a linked list with
- head pthread_key::keys.
- (pthread): Move atfork cygwin internal calls into the class.
- (MTInterface): Provide a fixup_before_fork for objecst that
- need to save state.
- (__pthread_atforkprepare): Remove.
- (__pthread_atforkparent): Remove.
- (__pthread_atforkchild): Remove.
-
-2002-09-16 Christopher Faylor <cgf@redhat.com>
-
- * init.cc: Cleanup slightly and remove obsolete code.
-
-2002-09-11 Robert Collins <rbtcollins@hotmail.com>
-
- * init.cc (dll_entry): On thread detach, if the thread hasn't
- exit()ed, do so.
- * pthread.cc (pthread_getsequence_np): Remove the
- __pthread_getsequence_np wrapper. This requires errno.h.
- * thread.cc (pthread::self): Instantiate a new pthread object
- when called and none exists. return a NULL object if instantiation
- fails.
- (pthread::precreate): Factor out common code.
- (pthread::postcreate): Ditto.
- (pthread::create): Ditto.
- (pthread::exit): Remove the TLS value when we exit to prevent
- double exits.
- (MTinterface::Init): Bugfix - don't mark the TLS index as created
- if one was not allocated.
- Apply Extract Method to move pthread specific initialisation into
- pthread.
- (pthread::initMainThread): Extracted method from MTinterface::Init.
- (pthread::setTlsSelfPointer): Extracted method from various pthread
- calls, to make reading those functions easier.
- (pthread::setThreadIdtoCurrent): Ditto.
- (pthread::cancel_self): Bring into the .cc file, it's only used
- within the class.
- (pthread::getThreadId): Ditto.
- (pthread::thread_init_wrapper): Apply Extract Method to the TLS
- setting logic.
- (pthread::isGoodObject): Extracted method from various pthread
- wrapper calls, for clarity of reading.
- (pthread::getsequence_np): Converted from __pthread_getsquence_np.
- (__pthread_create): Apply Extract Method to the object validation.
- (__pthread_cancel): Ditto.
- (__pthread_join): Ditto.
- (__pthread_detach): Ditto.
- (__pthread_suspend): Ditto.
- (__pthread_continue): Ditto.
- (__pthread_getschedparam): Ditto.
- (__pthread_getsequence_np): Remove.
- (__pthread_setschedparam): Apply Extract Method to the object
- validation.
- (pthreadNull::getNullpthread): New method, return the pthreadNull
- object.
- (pthreadNull::pthreadNull): Private constructor to prevent accidental
- use.
- (pthreadNull::~pthreadNull): Prevent compile warnings.
- (pthreadNull::create): Override pthread behaviour.
- (pthreadNull::exit): Ditto.
- (pthreadNull::cancel): Ditto.
- (pthreadNull::testcancel): Ditto.
- (pthreadNull::setcancelstate): Ditto.
- (pthreadNull::setcanceltype): Ditto.
- (pthreadNull::push_cleanup_handler): Ditto.
- (pthreadNull::pop_cleanup_handler): Ditto.
- (pthreadNull::getsequence_np): Ditto.
- (pthreadNull::_instance): Ditto.
- * thread.h (pthread): Declare pre- and post-create.
- Move GetThreadId to private scope and rename to getThreadId.
- Move setThreadIdtoCurrent to private scope.
- Make create virtual.
- Make ~pthread virtual.
- Declare initMainThread.
- Declare isGoodObject.
- Make exit virtual.
- Make cancel virtual.
- Make testcancel virtual.
- Make setcancelstate virtual.
- Make setcanceltype virtual.
- Make push_cleanup_handler virtual.
- Make pop_cleanup_handler virtual.
- Declare getsequence_np.
- Declare setTlsSelfPointer.
- (pthreadNull): New null object class for pthread.
- (__pthread_getsequence_np): Remove.
-
-2002-09-13 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (seteuid32): Treat ILLEGAL_UID invalid.
- (setegid32): Treat ILLEGAL_GID invalid.
-
-2002-09-10 Pierre Humblet <pierre.humblet@ieee.org>
-
- * grp.cc (initgroups): Call groups::clear_supp to free the
- supplementary group sids that may have been set by setgroups.
- * security.cc (cygsidlist::free_sids): Also zero the class members.
- * security.h (groups::clear_supp): New.
- Rename cygsidlist_unknown to cygsidlist_empty.
-
-2002-09-08 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_tty.cc (fhandler_tty_slave::open): Don't protect
- input/output handles since they are not properly manipulated later.
- * tty.cc (tty::make_pipes): Ditto.
-
-2002-09-06 Christopher Faylor <cgf@redhat.com>
-
- * winsup.h (_WIN32_WINNT): Protect.
-
-2002-09-06 Christopher Faylor <cgf@redhat.com>
-
- * winsup.h (_WIN32_WINNT): Define.
-
-2002-09-03 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (DLL_OFILES): Drop shortcut.o.
- * path.cc: Move all shortcut functions from shortcut.c to here.
- (check_shortcut): Implement without using COM interface.
- * path.h: Move definition of SHORTCUT_HDR_SIZE to here.
- * shortcut.c: Remove.
- * shortcut.h: Ditto.
-
-2002-09-03 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * fhandler.h (fhandler_socket::read): Remove method.
- (fhandler_socket::write): Ditto.
- (fhandler_socket::readv): New method.
- (fhandler_socket::writev): Ditto.
- (fhandler_socket::recvmsg): Add new optional argument.
- (fhandler_socket::sendmsg): Ditto.
- * fhandler.cc (fhandler_socket::read): Remove method.
- (fhandler_socket::write): Ditto.
- (fhandler_socket::readv): New method.
- (fhandler_socket::writev): Ditto.
- (fhandler_socket::recvmsg): Use win32's scatter/gather IO where
- possible.
- (fhandler_socket::sendmsg): Ditto.
- * net.cc (cygwin_recvmsg): Check the msghdr's iovec fields.
- (cygwin_sendmsg): Ditto. Add omitted sigframe.
-
-2002-09-02 Kazuhiro Fujieda <fujieda@jaist.ac.jp>
-
- * cygwin.din: Revert exporting new wchar functions.
- * include/cygwin/version.h: Change comment for API minor 62.
-
-2002-09-02 Christopher Faylor <cgf@redhat.com>
-
- * dcrt0.cc (dll_crt0_1): Remove getpagesize() call.
- * shared.cc (memory_init): Move it here.
-
-2002-08-31 Christopher January <chris@atomice.net>
-
- * fhandler_proc.cc: Add <sys/param.h> include.
- (format_proc_uptime): Use KernelTime and UserTime only as they include
- the other counters.
- (format_proc_stat): KernelTime includes IdleTime, so subtract IdleTime
- from KernelTime. Make number of 'jiffies' per second same as HZ define.
- * fhandler_process.cc: Add <sys/param.h> include.
- (format_process_stat): Make number of 'jiffies' per second same as
- HZ define. Use KernelTime and UserTime only to calculate start_time.
-
-2002-08-30 Christopher Faylor <cgf@redhat.com>
-
- (inspired by a patch from Egor Duda)
- * select.cc (fhandler_tty_slave::ready_for_read): Remove.
- * fhandler.h (fhandler_tty_slave::ready_for_read): Remove declaration.
- * fhandler_tty.cc (fhandler_tty_slave::fhandler_tty_slave): Set "don't
- need ready for read" flag.
- (fhandler_tty_slave::read): Don't do anything special with vtime when
- vmin == 0.
-
-2002-08-30 Egor Duda <deo@logos-m.ru>
-
- * autoload.cc (GetConsoleWindow): Correct parameter count.
-
-2002-08-30 Christopher January <chris@atomice.net>
- Christopher Faylor <cgf@redhat.com>
-
- * tty.cc (tty_list::allocate_tty): Use GetConsoleWindow, if available.
- Call FindWindow in a loop.
- * autoload.cc (GetConsoleWindow): Export
-
-2002-08-30 Christopher Faylor <cgf@redhat.com>
-
- * miscfuncs.cc (check_iovec_for_read): Don't check buffer when zero
- length iov_len.
- (check_iovec_for_write): Ditto.
-
-2002-08-27 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * fhandler.h (fhandler_base::readv): New method.
- (fhandler_base::writev): Ditto.
- * fhandler.cc (fhandler_base::readv): New method.
- (fhandler_base::writev): Ditto.
- * syscalls.cc (_read): Delegate to readv(2).
- (_write): Ditto, mutatis mutandi.
- (readv): Rewrite, based on the old _read code, to use the new
- fhandler_base::readv method. Improve access mode handling and ensure
- all calls reach the final strace statement.
- (writev): Ditto, mutatis mutandi.
- * include/sys/uio.h (struct iovec): Change field types to match SUSv3.
- * winsup.h (check_iovec_for_read): New function.
- (check_iovec_for_write): Ditto.
- * miscfuncs.cc (check_iovec_for_read): Ditto.
- (check_iovec_for_write): Ditto.
-
-2002-08-30 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din: Add more prototypes for new wchar functions in newlib.
-
-2002-08-30 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din: Add prototypes for new wchar functions in newlib.
- * include/cygwin/version.h: Bump API minor number.
-
-2002-08-29 Boris Schaeling <boriss@web.de>
- Corinna Vinschen <corinna@vinschen.de>
-
- * poll.cc (poll): Peek sockets ready for read to see if there's
- actually data.
-
-2002-08-28 Christopher Faylor <cgf@redhat.com>
-
- * cygthread.cc (hthreads): Remove unneeded global.
- (cygthread::simplestub): New static member function.
- (cygthread::runner): Don't set hthreads.
- (cygthread::freerange): New member function.
- (cygthread::operator new): Call freerange if all cygwin slots are used
- up.
- (cygthread::exit_thread): Don't mess with event if freerange thread.
- (cygthread::detach): Ditto.
- * cygthread.h (class cygthread): Declare new member functions and
- variables.
-
-2002-08-28 Christopher Faylor <cgf@redhat.com>
-
- * malloc.cc: Protect some definitions to avoid a compile time warning.
-
-2002-08-27 Nicholas Wourms <nwourms@netscape.net>
-
- * cygwin.din: Export getc_unlocked, getchar_unlocked,
- putc_unlocked, putchar_unlocked functions.
- * include/cygwin/version.h: Bump api minor.
-
-2002-08-28 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::recvfrom): Eliminate flags
- not understood by WinSock.
- (fhandler_socket::sendto): Ditto. If WinSock sendto() returns
- WSAESHUTDOWN, change errno to EPIPE and raise SIGPIPE if MSG_NOSIGNAL
- isn't set in flags.
- * include/cygwin/socket.h: Define MSG_WINMASK and MSG_NOSIGNAL.
- * include/cygwin/version.h: Bump API minor number.
-
-2002-08-28 Corinna Vinschen <corinna@vinschen.de>
-
- * poll.cc (poll): Eliminate erroneous POLLERR conditional.
-
-2002-08-26 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * fhandler_socket.cc (fhandler_socket::check_peer_secret_event):
- Fix strace message.
- (fhandler_socket::connect): Remove sigframe.
- (fhandler_socket::accept): Ditto.
- (fhandler_socket::getsockname): Ditto.
- (fhandler_socket::getpeername): Ditto.
- (fhandler_socket::recvfrom): Ditto.
- (fhandler_socket::recvmsg): Ditto.
- (fhandler_socket::sendto): Ditto.
- (fhandler_socket::sendmsg): Ditto.
- (fhandler_socket::close): Ditto.
- (fhandler_socket::ioctl): Ditto.
- * ioctl.cc (ioctl): Add sigframe.
- * net.cc (cygwin_sendto): Ditto.
- (cygwin_recvfrom): Ditto.
- (cygwin_recvfrom): Ditto.
- (cygwin_connect): Ditto.
- (cygwin_shutdown): Ditto.
- (cygwin_getpeername): Ditto.
- (cygwin_accept): Ditto. Improve strace message.
- (cygwin_getsockname): Ditto. Ditto.
- (cygwin_recvmsg): Ditto. Ditto.
- (cygwin_sendmsg): Fix strace message.
-
-2002-08-27 Christopher Faylor <cgf@redhat.com>
-
- * child_info.h: Add _PROC_WHOOPS enum value.
- (CURR_CHILD_INFO_MAGIC): Update.
- (child_info::magic): Make 'long'.
- * cygheap.h: Export _cygheap_start.
- * cygheap.cc: Don't declare _cygheap_start.
- * cygmagic: Use cksum to produce checksums. Append 'U' to end of
- checksum.
- * dcrt0.cc (initial_env): Calculate sleep ms before reusing buffer.
- (_dll_crt0): Detect cygheap mismatch as indicative of different cygwin
- version. Set child_proc_info to NULL when _PROC_WHOOPS.
- (multiple_cygwin_problem): If child_info specific problem, then set
- child_proc_info type to _PROC_WHOOPS.
- * shared_info.h (CURR_MOUNT_MAGIC): Update.
- (CURR_SHARED_MAGIC): Ditto.
-
-2002-08-25 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * fhandler.h (fhandler_socket::recvfrom): Fix prototype.
- (fhandler_socket::sendto): Ditto.
- * fhandler_socket.cc (fhandler_socket::recvfrom): Ditto.
- (fhandler_socket::sendto): Ditto.
- * include/sys/socket.h (recv): Fix prototype.
- (recvfrom): Ditto.
- (send): Ditto.
- (sendto): Ditto.
- * net.cc (cygwin_sendto): Ditto. Improve strace message
- (cygwin_recvfrom): Ditto. Ditto.
- (cygwin_setsockopt): Improve strace message.
- (cygwin_getsockopt): Ditto.
- (cygwin_connect): Ditto.
- (cygwin_accept): Ditto.
- (cygwin_bind): Ditto.
- (cygwin_getsockname): Ditto.
- (cygwin_getpeername): Ditto.
- (cygwin_recv): Fix prototype.
- (cygwin_send): Ditto.
- (cygwin_recvmsg): Improve strace message.
- (cygwin_sendmsg): Ditto.
-
-2002-08-25 Pierre Humblet <Pierre.Humblet@ieee.org>
-
- * sec_acl.cc (getacl): Check ace_sid == well_known_world_sid
- before owner_sid and group_sid so that well_known_world_sid
- means "other" even when owner_sid and/or group_sid are Everyone.
- * security.cc (get_attribute_from_acl): Created from code common
- to get_nt_attribute() and get_nt_object_attribute(), with same
- reordering as in getacl() above.
- (get_nt_attribute): Call get_attribute_from_acl().
- (get_nt_object_attribute): Ditto.
-
-2002-08-26 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in (cygrunk.exe): Make a -mno-cygwin program.
- * cygrun.c (main): Export CYGWIN=ntsec unless otherwise set.
-
- * shared.cc (shared_name): Only add build date to shared name when
- *testing*.
-
-2002-08-24 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in (DLL_IMPORTS): Move libuuid.a and libshell32.a to list
- rather than referring to them via -l. Add DLL imports last in link
- line for new-cygwin.dll and cygrun.exe.
-
-2002-08-19 Christopher Faylor <cgf@redhat.com>
-
- * pinfo.h (pinfo::remember): Arrange for destructor call if
- proc_subproc returns error.
- * sigproc.cc (zombies): Store 1 + total zombies since proc_subproc uses
- NZOMBIES element.
-
-2002-08-19 Corinna Vinschen <corinna@vinschen.de>
-
- * pwdgrp.h (pwdgrp_read::pwdgrp_read): Remove.
- (pwdgrp_read::~pwdgrp_read): Ditto.
- (pwdgrp_read::open): Reset fh to NULL instead of INVALID_HANDLE_VALUE.
- (pwdgrp_read::close): Ditto.
-
-2002-08-19 Christopher Faylor <cgf@redhat.com>
-
- * fhandler.h (fhandler_console::send_winch_maybe): New method.
- * fhandler_console.cc (set_console_state_for_spawn): Remove if 0'ed
- code.
- (fhandler_console::send_winch_maybe): Define new method.
- (fhandler_console::read): Use send_winch_maybe where appropriate.
- (fhandler_console::init): Just call all tcsetattr rather than
- output_tcsetattr.
- * select.cc (peek_console): Reorganize so that send_winch_maybe is
- called for everything but keyboard input.
-
-2002-08-18 Christopher Faylor <cgf@redhat.com>
-
- * perthread.h (vfork_save): Add ctty, sid, pgid, exitval fields.
- (vfork_save::restore_pid): New method.
- (vfork_save::restore_exit): New method.
- * fork.cc (vfork): Save ctty, sid, pgid and restore them when returning
- to "parent". Use exitval field if exiting but never created a new
- process.
- * syscalls.cc (setsid): Detect when in "vfork" and force an actual fork
- so that pid will be allocated (UGLY!).
- (getsid): New function.
- * dcrt0.cc (do_exit): Use vfork_save::restore_exit method for returning
- from a vfork.
- * spawn.cc (spawnve): Use vfork_save::{restore_pid,restore_exit}
- methods for returning from vfork.
- * cygwin.din: Export getsid.
- * include/cygwin/version.h: Bump api minor number.
-
- * malloc.cc: #ifdef sYSTRIm for when MORECORE_CANNOT_TRIM is true.
-
-2002-08-18 Christopher Faylor <cgf@redhat.com>
-
- * cygmalloc.h (MORECORE_CANNOT_TRIM): Define.
-
-2002-08-18 Christopher Faylor <cgf@redhat.com>
-
- * sigproc.cc (sigCONT): Define.
- * sigproc.h (sigCONT): Declare.
- (wait_sig): Create sigCONT event here.
- * exceptions.cc (sig_handle_tty_stop): Wait for sigCONT event rather
- than stopping thread.
- (sig_handle): Set sigCONT event as appropriate on SIGCONT rather than
- calling ResumeThread.
-
-2002-08-17 Christopher Faylor <cgf@redhat.com>
-
- * malloc.cc: Update to 2.7.2.
- * malloc_wrapper.cc (malloc_init): Call user level mallocs to determine
- if the malloc routines have been overridden.
-
-2002-08-16 Christopher Faylor <cgf@redhat.com>
-
- * winsup.h: Remove malloc_*lock functions.
-
-2002-08-16 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Add support for new malloc.o and renamed
- malloc_wrapper.o. Use -fomit-frame-pointer for malloc.o compilation.
- * malloc_wrapper.cc: New file. Rename from malloc.cc. Add support for
- more malloc functions. Eliminate export_* calls. Just use straight
- malloc names. Remove unused argument from malloc lock functions.
- * cygwin.din: Just export straight malloc names. Add malloc_stats,
- malloc_trim, malloc_usable_size, mallopt, memalign, valloc.
- * dcrt0.cc (__cygwin_user): Eliminate export_* malloc entries.
- * fork.cc (fork_parent): Remove unused argument from malloc_lock
- argument.
- * malloc.cc: New file. Doug Lea's malloc v2.7.1.
- * cygmalloc.h: New file.
- * include/cygwin/version.h: Bump API_MINOR.
-
- * sync.h (muto::acquire): Use appropriate number for regparm attribute.
- (muto::reset): Ditto.
- (muto::release): Ditto.
-
-2002-08-16 Pavel Tsekov <ptsekov@gmx.net>
-
- * exceptions.cc (interrupt_setup): Ensure that the previous signal mask
- is properly saved.
-
-2002-08-15 Thomas Pfaff <tpfaff@gmx.net>
-
- * dcrt0.cc: Modify define for CYGWIN_GUARD.
- (alloc_stack_hard_way): Just use CYGWIN_GUARD in VirtualAlloc call.
-
-2002-08-11 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * fhandler.h (fhandler_socket::recv): Remove method.
- (fhandler_socket::send): Ditto.
- * fhandler_socket.cc (fhandler_socket::recv): Ditto.
- (fhandler_socket::send): Ditto.
- (fhandler_socket::read): Delegate to fhandler_socket::recvfrom.
- (fhandler_socket::write): Delegate to fhandler_socket::sendto.
- (fhandler_socket::sendto): Check for null `to' address.
- * net.cc (cygwin_sendto): Check for zero request length.
- (cygwin_recvfrom): Ditto. Fix signature, use void *buf.
- (cygwin_recv): Delegate to cygwin_recvfrom.
- (cygwin_send): Delegate to cygwin_sendto.
-
-2002-08-11 Christopher Faylor <cgf@redhat.com>
-
- * cygthread.cc (cygthread::cygthread): Close another race.
-
-2002-08-11 Christopher Faylor <cgf@redhat.com>
-
- * assert.cc (__assert): Call debugger on assertion failure if
- debugging.
- * dcrt0.cc (dll_crt0_1): Just wait for signal thread to go live rather
- than going through the overhead of invoking it.
- * fork.cc (fork_child): Ditto.
- * exceptions.cc (signal_fixup_after_fork): Call sigproc_init here.
- * sigproc.cc (proc_can_be_signalled): Assume that the signal thread is
- live.
- (sig_dispatch): Ditto.
- (sig_send): Ditto.
- (wait_for_sigthread): Rename from "wait_for_me". Assume that
- wait_sig_inited has been set and that this function is only called from
- the main thread.
- * sigproc.h (wait_for_sigthread): Declare new function.
-
-2002-08-08 Christopher Faylor <cgf@redhat.com>
-
- * environ.cc (parse_options): Remember the "no" part of any options for
- later export.
-
-2002-08-07 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * winsup.h (__check_null_invalid_struct): Make ptr argument non-const.
- (__check_null_invalid_struct_errno): Ditto.
- * miscfuncs.cc (__check_null_invalid_struct): Ditto.
- (__check_null_invalid_struct_errno): Ditto.
- (__check_invalid_read_ptr_errno): Remove superfluous cast.
- * net.cc (get): Set appropriate errno if fd is not a socket.
- (cygwin_sendto): Fix parameter checking.
- (cygwin_recvfrom): Ditto.
- (cygwin_setsockopt): Ditto.
- (cygwin_getsockopt): Ditto.
- (cygwin_connect): Ditto.
- (cygwin_gethostbyaddr): Ditto.
- (cygwin_accept): Ditto.
- (cygwin_bind): Ditto.
- (cygwin_getsockname): Ditto.
- (cygwin_listen): Ditto.
- (cygwin_getpeername): Ditto.
- (cygwin_send): Ditto.
- (cygwin_shutdown): Ditto. Move sigframe to fhandler_socket.
- (cygwin_recvmsg): Fix parameter checking. Add tracing.
- (cygwin_sendmsg): Ditto.
- * fhandler_socket.cc (fhandler_socket::shutdown): Add sigframe.
- * resource.cc (setrlimit): Fix parameter checking.
-
-2002-08-08 Joe Buehler <jbuehler@hekimian.com
-
- * sec_helper.cc (sec_acl): remove extraneous arg to debug_printf.
-
-2002-08-07 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * fhandler_socket.cc (fhandler_socket::accept): Fix FIONBIO call.
-
-2002-08-06 Christopher Faylor <cgf@redhat.com>
-
- * cygheap.cc (_csbrk): Avoid !cygheap considerations.
- (cygheap_init): Deal with unintialized cygheap issues here.
- (cheap_init): Move cygheap_max setting here.
-
-2002-08-06 Christopher Faylor <cgf@redhat.com>
- Conrad Scott <conrad.scott@dsl.pipex.com
-
- * cygheap.cc (_csbrk): Allocate some slop initially. Don't erroneously
- add sbrk amount to returned value in initial case.
-
-2002-08-06 Christopher Faylor <cgf@redhat.com>
-
- * spawn.cc (spawn_guts): Don't set mount_h here.
- * sigproc.cc (init_child_info): Set it here instead.
- * shared.cc (cygwin_mount_h): Make NO_COPY.
-
-2002-08-06 Christopher Faylor <cgf@redhat.com>
-
- * cygthread.cc (cygthread::stub): Accept flag to pass info structure to
- thread function.
- (cygthread::operator new): Add defensive debugging output.
- (cygthread::cygthread): Add debugging output. Set name after thread
- has been awakened to avoid a race.
- (cygthread::exit_thread): Use handle operator rather than using ev
- directly.
- (cygthread::exit_thread): Reorganize to provide debugging. Set __name
- to NULL.
- * cygthread.h (cygself): Define.
- * fhandler_tty.cc (fhandler_tty_master::init): Use cygself as argument
- so that invoked thread can access its own info.
- (process_output): Derive cygthread info of thread from thread argument.
- * sigproc.cc (sigproc_init): Use cygself as argument so that invoked
- thread can access its own info.
- (wait_sig): Derive cygthread info of thread from thread argument.
-
-2002-08-06 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * debug.h (handle_list::allocated): Remove field.
- * debug.cc (newh): Don't malloc extra entries.
- (add_handle): Downgrade strace message level.
- (delete_handle): Remove case for `allocated' entries.
-
-2002-08-05 Christopher Faylor <cgf@redhat.com>
-
- * cygthread.cc (cygthread::stub): Change event creation to manual
- reset. Set __name after calling SetEvent to prevent races.
- (cygthread::detach): Always reset event here to prevent races.
-
-2002-08-03 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * debug.h (WaitForMultipleObjects): Correct typo.
-
-2002-08-01 Pierre Humblet <Pierre.Humblet@ieee.org>
-
- * security.cc (verify_token): Do not reject a token just because
- the supplementary group list is missing Everyone or a groupsid
- equal to usersid, or because the primary group is not in the token,
- as long as it is equal to the usersid.
- * syscalls.cc (seteuid32): Use common code for all successful returns.
- * grp.cc (getgroups32): Never includes Everyone in the output.
-
-2002-08-01 Christopher Faylor <cgf@redhat.com>
-
- * cygthread.cc (cygthread::exit_thread): Define new method.
- * cygthread.h (cygthread::exit_thread): Declare new method.
- * fhandler.h (fhandler_tty_master::hThread): Delete.
- (fhandler_tty_master::output_thread): Define.
- * fhandler_tty.cc (fhandler_tty_master::fhandler_tty_master): Adjust
- constructor.
- (fhandler_tty_master::init): Use cygthread rather than handle.
- (process_output): Use cygthread method to exit.
- (fhandler_tty_master::fixup_after_fork): Set output_thread to NULL
- after fork.
- (fhandler_tty_master::fixup_after_exec): Set output_thread to NULL
- after spawn/exec.
- * tty.cc (tty_list::terminate): Detach from output_thread using
- cygthread method.
-
-2002-08-01 Christopher Faylor <cgf@redhat.com>
-
- * syscalls.cc (_link): Revert previous change and just always
- dereference the oldpath.
-
-2002-08-01 Christopher Faylor <cgf@redhat.com>
-
- * syscalls.cc (link): Properly deal with a link to a symlink.
-
-2002-08-01 Christopher Faylor <cgf@redhat.com>
-
- * cygthread.cc: Remove cruft.
-
-2002-08-01 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in (DLL_OFILES): Add cygthread.o.
- * dcrt0.cc (dll_crt0_1): Eliminate various thread initialization
- functions in favor of new cygthread class.
- * debug.cc: Remove thread manipulation functions.
- * debug.h: Ditto.
- * external.cc (cygwin_internal): Use cygthread method for determining
- thread name. Remove capability for setting thread name.
- * fhandler_console.cc (fhandler_console::read): Use cygthread method
- rather than iscygthread function.
- * fhandler_tty.cc (fhandler_tty_master::fhandler_tty_master): Use
- cygthread methods to create threads.
- (fhandler_tty_common::__acquire_output_mutex): Use cygthread method to
- retrieve thread name.
- * select.cc (pipeinf): Use cygthread pointer rather than handle.
- (start_thread_pipe): Ditto.
- (pipe_cleanup): Ditto.
- (serialinf): Ditto.
- (start_thread_serial): Ditto.
- (serial_cleanup): Ditto.
- (socketinf): Ditto.
- (start_thread_socket): Ditto.
- (socket_cleanup): Ditto.
- * sigproc.cc (hwait_sig): Ditto.
- (hwait_subproc): Ditto.
- (proc_terminate): Ditto.
- (sigproc_terminate): Ditto.
- (sigproc_init): Initialize cygthread hwait_sig pointer.
- (subproc_init): Initialize cygthread hwait_subproc pointer.
- (wait_sig): Rely on cygthread HANDLE operator.
- * strace.cc (strace::vsprntf): Use cygthread::name rather than threadname.
- * window.cc (gethwnd): Use cygthread method to initialize thread.
-
-2002-07-31 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * fhandler.h (fhandler_base::get_r_no_interrupt): Make non-virtual.
- * net.cc (fdsock): Call set_r_no_interrupt.
-
-2002-07-30 Christopher Faylor <cgf@redhat.com>
-
- * syscalls.cc (_read): Clarify debugging output.
-
-2002-07-30 Christopher Faylor <cgf@redhat.com>
-
- * fhandler.h (fhandler_base::get_r_no_interrupt): Make virtual.
-
-2002-07-30 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_disk_file.cc (fhandler_cygdrive::set_drives): Incorporate .
- and .. processing here.
- (fhandler_cygdrive::readdir): Assume . and .. are already in pdrive.
- (fhandler_cygdrive::seekdir): Ditto.
-
-2002-07-29 Christopher Faylor <cgf@redhat.com>
-
- * dcrt0.cc (dll_crt0_1): Move debug_fixup_after_fork_exec.
- * cygheap.cc (cygheap_fixup_in_child): Call debug_fixup_after_fork_exec
- immediately after cygheap has been set up.
-
-2002-07-29 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc: Change some formatting.
- * include/cygwin/version.h: Bump API minor version.
-
-2002-07-28 Pierre Humblet <Pierre.Humblet@ieee.org>
-
- * cygheap.h (class cygheap_user): Add member groups.
- * security.h (class cygsidlist): Add members type and maxcount, methods
- position, addfromgr, alloc_sids and free_sids and operator+= (const
- PSID psid). Modify contains () to call position () and optimize add ()
- to use maxcount.
- (class user_groups): Create. Update declarations of verify_token and
- create_token.
- * security.cc (cygsidlist::alloc_sids): New.
- (cygsidlist::free_sids): New.
- (get_token_group_sidlist): Create from get_group_sidlist.
- (get_initgroups_sidlist): Create from get_group_sidlist.
- (get_group_sidlist): Suppress.
- (get_setgroups_sidlist): Create.
- (verify_token): Modify arguments. Add setgroups case.
- (create_token): Modify arguments. Call get_initgroups_sidlist and
- get_setgroups_sidlist as needed. Set SE_GROUP_LOGON_ID from auth_pos
- outside of the loop. Rename the various group sid lists consistently.
- * syscalls.cc (seteuid32): Modify to use cygheap->user.groups.
- (setegid32): Call cygheap->user.groups.update_pgrp.
- * grp.cc (setgroups): Create.
- (setgroups32): Create.
- * uinfo.cc (internal_getlogin): Initialize and update
- user.groups.pgsid.
- * cygwin.din: Add setgroups and setgroups32.
-
-2002-07-28 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_console.cc (fhandler_console::read): Use appropriate
- kill_pgrp method.
- * select.cc (peek_console): Ditto.
- * fhandler_termios.cc (fhandler_termios::bg_check): Send "stopped"
- signal to entire process group as dictated by SUSv3.
- * termios.cc (tcsetattr): Detect when stopped signal sent and force a
- stop before setting anything.
-
-2002-07-26 Christopher Faylor <cgf@redhat.com>
-
- * include/cygwin/version.h: Bump API version to indicate that ntsec is
- on by default now.
-
-2002-07-26 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * fhandler_registry.cc (fhandler_registry::close): Return any error
- result to the caller.
- * syscalls.cc (_close): Return result of fhandler::close to the caller.
-
-2002-07-25 Christopher Faylor <cgf@redhat.com>
-
- * security.cc (allow_ntsec): Default to on.
- (allow_smbntsec): Default to off.
-
-2002-07-24 David MacMahon <davidm@smartsc.com>
-
- * times.cc (to_time_t): Always round time_t down to nearest second.
-
-2002-07-25 Egor Duda <deo@logos-m.ru>
-
- * Makefile.in: Check if API version is updated when exports are
- changed and stop if not so.
-
-2002-07-24 Egor Duda <deo@logos-m.ru>
-
- * include/cygwin/version.h: Bump minor API version.
-
-2002-07-24 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_serial.cc: Change 'must_init_serial_line capability'
- to 'supports_reading_modem_output_lines' throughout (negated meaning).
- * wincap.cc: Ditto.
- * wincap.h: Ditto.
-
-2002-07-23 Nicholas Wourms <nwourms@netscape.net>
-
- * cygwin.din (fcloseall): Add symbol for export.
- (fcloseall_r): Ditto.
-
-2002-07-24 Christopher Faylor <cgf@redhat.com>
-
- * path.cc (path_conv::check): Always set fileattr when component == 0.
- (readlink): Use path_conv method rather than field.
- * fhandler_disk_file.cc (fhandler_disk_file::fstat_helper): Ditto,
- throughout.
- * path.h (path_conv): Make fileattr private.
- * exceptions.cc (try_to_debug): Default to idle priority when looping.
-
-2002-07-23 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_serial.cc: Use must_init_serial_line capability throughout.
- * wincap.cc: Set flag must_init_serial_line appropriately.
- * wincap.h: Add flag must_init_serial_line.
-
-2002-07-23 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (get_group_sidlist): Create group list from /etc files
- even if DC is available but access fails.
-
-2002-07-22 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_serial.cc: Fix formatting problems introduced by below
- changes.
-
-2002-07-22 Jacek Trzcinski <jacek@certum.pl>
-
- * fhandler.h (class fhandler_serial): Add new members of the class -
- rts,dtr and method ioctl(). Variables rts and dtr important for Win 9x
- only.
- * fhandler_serial.cc (fhandler_serial::open): Add initial setting of
- dtr and rts. Important for Win 9x only.
- (fhandler_serial::ioctl): New function. Implements commands TIOCMGET,
- TIOCMSET and TIOCINQ.
- (fhandler_serial::tcflush): Fix found error.
- (fhandler_serial::tcsetattr): Add settings of rts and dtr. Important
- for Win 9x only.
- * termios.h: Add new defines as a support for ioctl() function on
- serial device.
-
-2002-07-20 Christopher Faylor <cgf@redhat.com>
-
- * autoload.cc (LoadDLLprime): Add jmp call to allow streamlining of
- later jmp rewrite.
- (doit): Avoid use of cx register. Just change one word to avoid races.
-
-2002-07-18 Pierre Humblet <pierre.humblet@ieee.org>
-
- * security.cc (get_unix_group_sidlist): Create.
- (get_supplementary_group_sidlist): Evolve into get_unix_group_sidlist.
- (get_user_local_groups): Add check for duplicates.
- (get_user_primary_group): Suppress.
- (get_group_sidlist): Silently ignore PDC unavailability.
- Call get_unix_group_sidlist() before get_user_local_groups().
- Remove call to get_supplementary_group_sidlist(). Never call
- get_user_primary_group() as the passwd group is always included.
- Add well_known_authenticated_users_sid in only one statement.
-
-2002-07-19 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_serial.cc (fhandler_serial::tcflush): Fix typo.
-
-2002-07-15 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (get_group_sidlist): Fix formatting.
-
-2002-07-14 Christopher Faylor <cgf@redhat.com>
-
- * dcrt0.cc (initial_env): Force path and CYGWIN_DEBUG contents to lower
- case.
- * exceptions.cc (error_start_init): Use the name derived from
- GetModuleName rather than myself->progname.
-
-2002-07-14 Christopher Faylor <cgf@redhat.com>
-
- * dcrt0.cc (dll_crt0_1): Move debug_init call back to here. Avoid a
- compiler warning.
- * shared.cc (memory_init): Remove debug_init call.
- * debug.h (handle_list): Change "clexec" to "inherited".
- * debug.cc: Remove a spurious declaration.
- (setclexec): Conditionalize away since it is currently unused.
- (add_handle): Use inherited field rather than clexec.
- (debug_fixup_after_fork_exec): Ditto. Move debugging output to
- delete_handle.
- (delete_handle): Add debugging output.
- * fhandler.cc (fhandler_base::set_inheritance): Don't bother setting
- inheritance in debugging table since the handle was never protected
- anyway.
- (fhandler_base::fork_fixup): Ditto.
-
- * exceptions.cc (debugger_command): Revert.
-
-2002-07-14 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * debug.cc (clexec): Add missing `hl = hl->next'.
-
-2002-07-14 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in (cygrun.exe): Add a -lcygwin on the end.
-
-2002-07-14 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in (cygserver.exe): Add -lstdc++.
- (cygrun.exe): Move -lgcc last.
-
-2002-07-13 Christopher Faylor <cgf@redhat.com>
-
- * dcrt0.cc (dll_crt0_1): Delay closing of some handles until cygheap
- has been set up.
- (break_here): New function, for debugging.
- (initial_env): Add program name to "Sleeping" message. Implement new
- "CYGWIN_DEBUG" environment variable option.
- * exceptions.cc (debugger_command): Add argument to dumper call.
- * strace.cc (strace::hello): Use winpid if cygwin pid is unavailable.
- (strace::vsprntf): Ditto.
-
-2002-07-13 Christopher Faylor <cgf@redhat.com>
-
- * debug.h (handle_list): Move here from debug.cc. Add "inherit" flag
- functionality.
- * cygheap.cc (init_cheap): Move cygheap_max calculation to _csbrk.
- (_csbrk): Reorganize to not assume first allocation is <= 1 page.
- (cygheap_setup_for_child): Mark protected handle as inheritable.
- * cygheap.h (cygheap_debug): New struct.
- (init_cygheap): Add new structure when debugging.
- * dcrt0.cc (dll_crt0_1): Remove call to debug_init. Close ppid_handle
- here, if appropriate. Don't protect subproc_ready, since it is already
- protected in the parent. Call memory_init prior to ProtectHandle to
- ensure that cygheap is set up. Call debug_fixup_after_fork_exec when
- appropriate.
- (_dll_crt0): Don't close ppid_handle here.
- * debug.cc: Use cygheap debug structure rather than static elements
- throughout.
- (add_handle): Don't issue a warning if attempt to protect handle in
- exactly the same way from exactly the same place. Add pid info to
- warning output. Accept additional argument controlling whether handle
- is to be inherited. Add pid to stored information.
- (debug_fixup_after_fork_exec): Renamed from debug_fixup_after_fork.
- Reorganize to avoid erroneously skipping handles.
- (mark_closed): Add pid info to warning output.
- (setclexec): Rename from setclexec_pid.
- * fhandler.cc (fhandler_base::get_default_fmode): Minor reorg.
- (fhandler_base::fstat): Add debugging output.
- (fhandler_base::set_inheritance): Call setclexec rather than
- setclexec_pid.
- (fhandler_base::fork_fixup): Ditto.
- * fhandler_console.cc (get_tty_stuff): Mark protected handle as
- inheritable.
- * fhandler_tty.cc (fhandler_tty_slave::open): Ditto.
- * tty.cc (tty::make_pipes): Ditto.
- (tty::common_init): Ditto.
- * fork.cc (fork_parent): Ditto.
- (fork_child): Close protected handles with correct name. Remove
- debug_fixup_after_fork call.
- * fhandler_socket.cc (fhandler_socket::create_secret_event): Mark
- protected handle as inheritable/non-inheritable, as appropriate.
- * shared.cc (memory_init): Mark protected handle as inheritable.
- Call debug_init here.
- * sigproc.cc (wait_sig): Close protected handle with correct name.
- * spawn.cc (spawn_guts): Rename spr to subproc_ready and mark it as
- inheritable.
-
- * exceptions.cc (debugger_command): Try to run dumper.exe, if found.
-
- * syscalls.cc (fstat64): Don't follow symlinks for path_conv lookup
- since path is already resolved.
-
-2002-07-12 Christopher Faylor <cgf@redhat.com>
-
- * cygwin.din: Change erroneous entries.
-
-2002-07-11 Pavel Tsekov <ptsekov@gmx.net>
-
- * fhandler_disk_file.cc (fhandler_disk_file::open): Don't
- move the file pointer to the end of file if O_APPEND is
- specified in the open flags.
-
-2002-07-09 Christopher Faylor <cgf@redhat.com>
-
- * debug.cc: Avoid explicit zeroing of globals.
- (lock_debug): Make locker a static member. Avoid unlocking when
- already unlocked (from Conrad Scott).
- (debug_init): Initialize lock_debug::locker here.
- * fork.cc (fork_child): Fix up fdtab earlier to avoid some (but not
- all) confusion with close-on-exec craziness.
-
-2002-07-05 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (fhandler_socket::is_unconnected): Constify.
- (fhandler_socket::is_connect_pending): Ditto.
- (fhandler_socket::is_connected): Ditto.
- (fhandler_socket::set_connect_state): New method.
- (struct select_record): Add member `except_on_write'.
- (select_record::select_record): Initialize all bool values to `false'.
- * fhandler_socket.cc: Use set_connect_state() method throughout.
- (fhandler_socket::connect): Set state always to connected if connection
- isn't pending.
- * net.cc (cygwin_getsockopt): Revert erroneous previous patch.
- * select.cc (set_bits): Check for `except_on_write'. Set fd in
- write_fds if set. Set connect state to connected if fd has been
- returned by WINSOCK_SELECT.
- (peek_socket): Check for `except_on_write'.
- (start_thread_socket): Ditto.
- (fhandler_socket::select_write): Don't set `write_ready' if connect
- is pending. Set `except_on_write' if connect is pending.
-
-2002-07-05 Christopher Faylor <cgf@redhat.com>
-
- * ntdll.h (_SYSTEM_PROCESSOR_TIMES): Force eight byte alignment.
- (_SYSTEM_TIME_OF_DAY_INFORMATION): Ditto.
-
- * path.cc (suffix_scan::has): Reorganize to eliminate double scanning
- for for .exe (in the typical case).
-
-2002-07-05 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (UNCONNECTED): New define.
- (CONNECT_PENDING): Ditto.
- (CONNECTED): Ditto.
- (class fhandler_socket): Add member `had_connect_or_listen'.
- Add member functions `is_unconnected', `is_connect_pending' and
- `is_connected'.
- * fhandler_socket.cc (fhandler_socket::connect): Set member
- `had_connect_or_listen' according to return code of WinSock
- call.
- (fhandler_socket::listen): Ditto.
- * net.cc (cygwin_getsockopt): Modify SO_ERROR return value in
- case of socket with pending connect().
- * select.cc (peek_socket): Only add socket to matching fd_set
- if it's not "ready". Call WINSOCK_SELECT only if at least one
- socket is in one of the fd_sets.
- (start_thread_socket): Only add socket to matching fd_set
- if it's not "ready".
- (fhandler_socket::select_write): Set write_ready to true also
- if socket isn't connected or listening.
-
-2002-07-04 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::set_sun_path): Don't free
- memory here. Allow NULL parameter.
-
-2002-07-04 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::dup): Add missing copy operation
- on sun_path.
-
-2002-07-03 Christopher Faylor <cgf@redhat.com>
-
- * include/cygwin/version.h: Bump DLL minor number.
-
-2002-07-03 Christopher Faylor <cgf@redhat.com>
-
- * include/sys/statfs.h: New header file.
-
-2002-07-03 Christopher Faylor <cgf@redhat.com>
-
- * dtable.cc (cygwin_attach_handle_to_fd): Default to implicit bin mode
- if none specified.
- * fhandler.cc (fhandler_base::init): Make bin argument a guarantee
- rather than a suggestion.
- * path.cc (path_conv::check): Load flag returned from
- cygwin_conv_to_win32_path into path_flags.
-
-2002-07-03 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * tty.cc (tty::common_init): Reverse logic of cygserver check in
- call to SetKernelObjectSecurity.
-
-2002-07-03 Thomas Pfaff <tpfaff@gmx.net>
-
- * autoload.cc (WSAEventSelect): Define new autoload function.
- (WSAEnumNetworkEvents): Ditto.
- * fhandler_socket.cc (fhandler_socket::accept): If socket is
- in blocking mode wait for incoming connection and signal.
-
-2002-07-02 Christopher Faylor <cgf@redhat.com>
-
- * cygheap.cc (init_cheap): Rearrange error message.
- (cygheap_fixup_in_child): Ditto.
- * dtable.cc: Remove if 0'ed code.
- * fhandler_dsp.cc (fhandler_dev_dsp::open): Force binmode.
- * sec_helper.cc (cygsid::get_id): Use system_printf for error message.
- * tty.cc (tty::common_init): Ditto.
-
-2002-07-02 Christopher Faylor <cgf@redhat.com>
-
- * net.cc (cygwin_getpeername): Defend against NULL pointer dereference.
-
-2002-07-02 Egor Duda <deo@logos-m.ru>
-
- * include/cygwin/version.h: Bump API minor version.
-
-2002-07-01 Pierre Humblet <pierre.humblet@ieee.org>
-
- * security.cc (get_logon_server): Interpret a zero length
- domain as the local domain.
- (get_group_sidlist): Add authenticated users SID to SYSTEM's group
- list instead of SYSTEM itself.
- (verify_token): Accept the primary group sid if it equals
- the token user sid.
-
-2002-07-02 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din (__fpclassifyd): Add symbol.
- (__fpclassifyf): Ditto.
- (__signbitd): Ditto.
- (__signbitf): Ditto.
-
-2002-07-02 Corinna Vinschen <corinna@vinschen.de>
-
- * security.h (DONT_INHERIT): Eliminate definition.
- (INHERIT_ALL): Ditto.
- (INHERIT_ONLY): Ditto.
- * sec_acl.cc: Use appropriate defines from accctrl.h instead of the
- above throughout.
- * security.cc: Ditto.
-
-2002-07-01 Pierre Humblet <pierre.humblet@ieee.org>
-
- * syscalls.c (seteuid32): Return immediately if the program is not
- impersonated and both uid and gid are original.
- (setegid32): Return immediately if the new gid is the current egid.
-
-2002-07-01 Christopher Faylor <cgf@redhat.com>
-
- * syscalls.cc (seteuid32): Fix incorrect placement of Pierre's patch
- below.
-
-2002-07-01 Christopher Faylor <cgf@redhat.com>
-
- * syscalls.cc (seteuid32): Fix incorrect use of system_printf.
-
-2002-07-02 Christopher January <chris@atomice.net>
-
- * autoload.cc (GetSecurityInfo): Define new autoload function.
- (RegQueryInfoKeyA): Ditto.
- * fhandler.h (fhandler_virtual::fill_filebuf): Change return type to
- bool.
- (fhandler_proc::fill_filebuf): Ditto.
- (fhandler_registry::fill_filebuf): Ditto.
- (fhandler_process::fill_filebuf): Ditto.
- (fhandler_registry::value_name): Add new member.
- (fhandler_registry::close): Add new method.
- (fhandler_process::p): Remove member.
- * fhandler_proc.cc (fhandler_proc::open): Add set_nohandle after
- calling superclass method. Check return value of fill_filebuf.
- (fhandler_proc::fill_filebuf): Change return type to bool. Add return
- statement.
- * fhandler_process.cc (fhandler_process::open): Add set_nohandle after
- calling superclass method. Remove references to p. Check return value
- of fill_filebuf.
- (fhandler_process::fill_filebuf): Change return type to bool. Don't
- use dereference operator on p. Add return statement.
- (fhandler_process::format_process_stat): Fix typo.
- * fhandler_registry.cc: Add static open_key declaration.
- (fhandler_registry::exists): Assume path is already normalised. Try
- opening the path as a key in its own right first, before reverting to
- enumerating subkeys and values of the parent key.
- (fhandler_registry::fstat): Add additional code to return more relevant
- information about the registry key/value.
- (fhandler_registry::readdir): Explicitly set desired access when
- opening registry key. Remove output of buf from debug_printf format
- string.
- (fhandler_registry::open): Use set_io_handle to store registry key
- handle. Set value_name member. Move code to read a value from the
- registry to fill_filebuf. Add call to fill_filebuf.
- (fhandler_registry::close): New method.
- (fhandler_registry::fill_filebuf): Change return type to bool. Add
- code to read a value from registry.
- (fhandler_registry::open_key): Make function static. Use KEY_READ as
- desired access unless this is the last path component. Check the
- return value of RegOpenKeyEx for an error instead of hKey.
- * fhandler_virtual.cc (fhandler_virtual::lseek): Check the return value
- of fill_filebuf.
- (fhandler_virtual::open): Remove call to set_nohandle.
- (fhandler_virtual::fill_filebuf): Change return type to bool. Add
- return statement.
- * security.cc (get_nt_object_attribute): New function.
- (get_object_attribute): New function.
- * security.h (get_object_attribute): New function declaration.
-
-2002-07-01 Pierre Humblet <pierre.humblet@ieee.org>
-
- * syscalls.c (seteuid32): Do not return an error when the token cannot
- be created only because of a problem with the gid.
-
-2002-07-01 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_clipboard.c (fhandler_dev_clipboard::open): Force text mode.
- * fhandler_console.cc (fhandler_console::open): *Really* force binary
- mode rather than make it optional.
- * fhandler_proc.cc (fhandler_proc::open): Ditto.
- * fhandler_process.cc (fhandler_process::open): Ditto.
- * fhandler_random.cc (fhandler_dev_random::fhandler_dev_random): Ditto.
- * fhandler_raw.cc (fhandler_dev_raw::open): Ditto.
- * fhandler_registry.cc (fhandler_registry::open): Ditto.
- * fhandler_tty.cc (fhandler_tty_slave::open): Ditto.
- * fhandler_virtual.cc (fhandler_virtual::open): Ditto.
- * fhandler_windows.cc (fhandler_windows::open): Ditto.
- * fhandler_zero.cc (fhandler_dev_zero::open): Ditto.
- * net.cc (fdsock): Ditto.
- * path.cc (set_flags): Add more debugging.
-
-2002-07-01 Christopher Faylor <cgf@redhat.com>
-
- * debug.cc (threads): Avoid initialization.
- * uinfo.cc (cygheap_user::ontherange): (from Corinna Vinschen) Actually
- make below changes work.
-
-2002-07-01 Christopher Faylor <cgf@redhat.com>
-
- * uinfo.cc (cygheap_user::ontherange): Make cygwin root the last resort
- for HOMEPATH/HOMEDRIVE for consistency with HOME.
-
-2002-07-01 Corinna Vinschen <corinna@vinschen.de>
-
- * shared.cc (sec_none): Move to sec_helper.cc.
- (sec_none_nih): Ditto.
- (sec_all): Ditto.
- (sec_all_nih): Ditto.
- (get_null_sd): Ditto.
- (sec_acl): Ditto.
- (__sec_user): Ditto.
- * sec_helper.cc (sec_none): Move from shared.cc to here.
- (sec_none_nih): Ditto.
- (sec_all): Ditto.
- (sec_all_nih): Ditto.
- (get_null_sd): Ditto.
- (sec_acl): Ditto.
- (__sec_user): Ditto.
-
-2002-06-30 Christopher Faylor <cgf@redhat.com>
-
- * uinfo.cc (cygheap_user::ontherange): Potentially set HOME from
- existing homepath and homedrive cygheap_user fields (not currently used
- yet). Set HOME to / if no other alternative.
- (cygheap_user::test_uid): Simplify.
-
-2002-06-30 Christopher Faylor <cgf@redhat.com>
-
- * environ.cc (parse_options): Use setenv to potentially replace CYGWIN
- value on export. Fixes broken behavior since November 2000 changes.
- (regopt): Return indication of whether or not something has been parsed
- from the registry.
- (environ_init): Only attempt to export CYGWIN variable when values were
- set from the registry. It is exported automatically otherwise.
-
-2002-06-30 Christopher Faylor <cgf@redhat.com>
-
- * fhandler.h (fhandler_process::pid): New field.
- (fhandler_process::fstat): Remove unneeded array. Set pid element.
- (fhandler_process::open): Ditto.
- (fhandler_process::fill_filebuf): Handle case where 'p' field is NULL.
-
-2002-06-30 Christopher Faylor <cgf@redhat.com>
-
- * fhandler.h (fhandler_process::p): New field.
- (fhandler_process:fill_filebuf): Revert to same definition as virtual
- in parent class.
- (fhandler_process::open): Fill out p field rather than passing as an
- argument.
- (fhandler_process::fill_filebuf): Use p pointer rather than argument.
-
-2002-06-29 Pierre Humblet <pierre.humblet@ieee.org>
-
- * security.cc (extract_nt_dom_user): Check for all buffer overflows.
- Call LookupAccountSid after trying to get domain & user from passwd.
- (get_group_sidlist): Obtain the domain and user by calling
- extract_nt_dom_user instead of LookupAccountSid.
-
-2002-06-29 Christopher Faylor <cgf@redhat.com>
-
- * uinfo.cc (cygheap_user::test_uid): Use standard issetuid test.
-
-2002-06-29 Christopher Faylor <cgf@redhat.com>
-
- * autoload.cc (NetGetDCName): Change to make this an optional load
- function.
- * cygheap.h (cygheap_user::logsrv): Return NULL when operation fails.
- (cygheap_user::winname): Ditto.
- (cygheap_user::domain): Ditto.
- * uinfo.cc (cygheap_user::env_logsrv): Save results in temp variable.
- (cygheap_user::env_userprofile): Ditto.
-
-2002-06-29 Christopher Faylor <cgf@redhat.com>
-
- * environ.cc (spenv::retrieve): Detect return of env_dontadd from
- cygheap_user methods.
- (build_env): Avoid incrementing environment pointer if not actually
- adding to the environment. That could result in garbage in the
- environment table. Be more defensive when reallocing envblock.
-
-2002-06-29 Christopher Faylor <cgf@redhat.com>
-
- * uinfo.cc (cygheap_user::test_uid): Return NULL or further tests are
- sorta useless.
- (cygheap_user::env_domain): Recalculate if name is missing.
-
-2002-06-29 Christopher Faylor <cgf@redhat.com>
-
- * environ.cc (spenv::from_cygheap): Still need to take setuid into
- consideration.
-
-2002-06-28 Christopher Faylor <cgf@redhat.com>
-
- * uinfo.cc (cygheap_user::env_logsrv): Return "almost_null" in case
- where no domain or username is "SYSTEM".
-
-2002-06-28 Christopher Faylor <cgf@redhat.com>
-
- * cygheap.h (cygheap_user): Reorg to accommodate environment caching.
- (cygheap_user::logsrv): New method.
- (cygheap_user::winname): Ditto.
- (cygheap_user::domain): Ditto.
- (cygheap_user::test_uid): Ditto.
- * cygheap.cc (cygheap_user::set_name): Reflect name "pwinname" name
- change.
- * environ.cc (getwinenveq): New function.
- (penv::from_cygheap): penv::from_cygheap): Change arguments.
- (spenv::retrieve): Ditto for call. Use getwinenveq to retrieve info
- from environment. Always return value from cygwin environment, if it
- exists.
- * environ.h (getwinenveq): Declare.
- * uinfo.cc (cygheap_user::ontherange): Use logsrv() rather than
- env_logsrv().
- (cygheap_user::test_uid): Define new method.
- (cygheap_user::env_logsrv): Accept environment arguments. Use test_uid
- to find info.
- (cygheap_user::env_domain): Ditto.
- (cygheap_user::env_userprofile): Ditto.
- (cygheap_user::env_homepath): Ditto.
- (cygheap_user::env_homedrive): Ditto.
- (cygheap_user::env_name): Ditto.
-
-2002-06-27 Christopher Faylor <cgf@redhat.com>
-
- * cygheap.cc (cfree_and_set): New function.
- (cygheap_user::set_name): Use cfree_and_set to reset members.
- * cygheap.h (cygheap_user): Delete static members.
- (cygheap_user::puserprof): New member.
- (cfree_and_set): Declare.
- * dcrt0.cc (almost_null): Define.
- * environ.cc (env_dontadd): Redefine as "almost_null".
- * winsup.h (almost_null): Declare.
- * syscalls.cc (cfree_and_set): Remove unused variable.
- * uinfo.cc (cygheap_user::homepath_env_buf): Eliminate.
- (cygheap_user::homedrive_env_buf): Ditto.
- (cygheap_user::userprofile_env_buf): Ditto.
- (cygheap_user::ontherange): YA change to try to preserve existing
- HOMEPATH and HOMEDRIVE. Return almost_null values when variables
- should not actually exist.
- (cygheap_user::env_logsrv): Ditto.
- (cygheap_user::env_domain): Ditto.
- (cygheap_user::env_userprofile): Ditto.
-
-2002-06-27 Corinna Vinschen <corinna@vinschen.de>
-
- * dcrt0.cc (dll_crt0_1): Let __progname point to the applications
- basename. Move eliminating ".exe" suffix from argv[0] so that it
- always also affects __progname.
-
-2002-06-27 Thomas Pfaff <tpfaff@gmx.net>
-
- * thread.cc (pthread::create): Add trace printf to get CreateThread
- LastError.
-
-2002-06-27 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (list::match): Check using pagesize aligned size.
-
-2002-06-26 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_disk_file.cc (fhandler_disk_file::fstat_by_name): Force
- FindFirstFile on first file of directory when asking for x:\ .
-
-2002-06-26 Christopher Faylor <cgf@redhat.com>
-
- * cygheap.cc (cygheap_user::set_name): Correct thinko in below change.
-
-2002-06-26 Christopher Faylor <cgf@redhat.com>
-
- * cygheap.cc (cygheap_user::set_name): Avoid clearing things when just
- setting name to itself or during first time initialization.
-
- * environ.cc (check_case_init): Make case insensitive.
-
-2002-06-26 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (fhandler_socket::bind): Add method definition.
- (fhandler_socket::connect): Ditto.
- (fhandler_socket::listen): Ditto.
- (fhandler_socket::accept): Ditto.
- (fhandler_socket::getsockname): Ditto.
- (fhandler_socket::getpeername): Ditto.
- (fhandler_socket::recvfrom): Ditto.
- (fhandler_socket::recvmsg): Ditto.
- (fhandler_socket::sendto): Ditto.
- (fhandler_socket::sendmsg): Ditto.
- (fhandler_socket::shutdown): Ditto.
- * fhandler_socket.cc (get_inet_addr): Move here from net.cc.
- (fhandler_socket::bind): New method.
- (fhandler_socket::connect): Ditto.
- (fhandler_socket::listen): Ditto.
- (fhandler_socket::accept): Ditto.
- (fhandler_socket::getsockname): Ditto.
- (fhandler_socket::getpeername): Ditto.
- (fhandler_socket::recvfrom): Ditto.
- (fhandler_socket::recvmsg): Ditto.
- (fhandler_socket::sendto): Ditto.
- (fhandler_socket::sendmsg): Ditto.
- (fhandler_socket::shutdown): Ditto.
- * net.cc: Various formatting cleanups throughout.
- (get_inet_addr): Move to fhandler_socket.cc.
- (cygwin_bind): Move base functionality to appropriate fhandler_socket
- method.
- (cygwin_connect): Ditto.
- (cygwin_listen): Ditto.
- (cygwin_accept): Ditto.
- (cygwin_getsockname): Ditto.
- (cygwin_getpeername): Ditto.
- (cygwin_recvfrom): Ditto.
- (cygwin_recvmsg): Ditto.
- (cygwin_sendto): Ditto.
- (cygwin_sendmsg): Ditto.
- (cygwin_shutdown): Ditto.
-
-2002-06-26 Corinna Vinschen <corinna@vinschen.de>
-
- * pwdgrp.h (pwdgrp_read::~pwdgrp_read): Avoid compiler warning.
-
-2002-06-26 Christopher Faylor <cgf@redhat.com>
-
- * dcrt0.cc (_dcrt0): Be more defensive when reserved block is used and
- it's not cygwin info.
-
-2002-06-26 Christopher Faylor <cgf@redhat.com>
-
- * autoload (noload): Avoid clobbering bx register.
-
- * environ.cc (codepage_init): Use case insensitive match.
-
- * fhandler_console.cc (cp_get_internal): Delete.
- (con_to_str): Use get_cp to derive code page.
- (str_to_con): Ditto.
- * miscfuncs.cc (get_cp): New function.
- (sys_wcstombs): New function. Converted from macro.
- (sys_mbstowcs): Ditto.
- * winsup.h: Reflect above changes.
-
-2002-06-26 Christopher Faylor <cgf@redhat.com>
-
- * winsup.h: Minor cleanup.
- * path.h (path_conv::[]): New operator.
- * syscalls.cc (_link): Use path_conv operators rather than methods,
- where appropriate. Minor white space cleanup.
-
-2002-06-26 Christopher Faylor <cgf@redhat.com>
-
- * include/cygwin/version.h: Bump DLL minor number.
-
-2002-06-25 Thomas Pfaff <tpfaff@gmx.net>
-
- * include/pthread.h (PTHREAD_CANCELED): Define a reasonable value.
- * pthread.cc (pthread_exit): Call method instead of function.
- (pthread_setcancelstate): Ditto.
- (pthread_setcanceltype): Ditto.
- (pthread_testcancel): Ditto.
- * thread.h (pthread::cancel_event): New member.
- (__pthread_cancel_self): New prototype.
- (pthread::exit): New Method.
- (pthread::cancel): Ditto.
- (pthread::testcancel): Ditto.
- (pthread::cancel_self): Ditto.
- (pthread::static_cancel_self): Ditto.
- (pthread::setcancelstate): Ditto.
- (pthread::setcanceltype): Ditto.
- (__pthread_cancel): Give c++ linkage.
- (__pthread_exit): Remove.
- (__pthread_setcancelstate): Ditto.
- (__pthread_setcanceltype): Ditto.
- (__pthread_testcancel): Ditto.
- * thread.cc (pthread::pthread): Inititialize cancel_event.
- (pthread::~pthread): Close cancel_event if needed.
- (pthread::create): Create cancel_event.
- (pthread::exit): New method. Replacement for __pthread_exit.
- (pthread::cancel): New method.
- (pthread::testcancel): Ditto.
- (pthread::static_cancel_self); New static method.
- (pthread::setcancelstate): New method. Replacement for
- __pthread_setcancelstate.
- (pthread::setcanceltype): New method. Replacement for
- __pthread_setcanceltype.
- (pthread::pop_cleanup_handler): Add lock for async cancel safe
- cancellation.
- (pthread::thread_init_wrapper): Change __pthread_exit to
- thread->exit().
- (__pthread_cancel): Call method thread->cancel().
- (__pthread_exit): Remove.
- (__pthread_setcancelstate): Ditto.
- (__pthread_setcanceltype): Ditto.
- (__pthread_testcancel): Ditto.
-
-2002-06-25 Christopher Faylor <cgf@redhat.com>
-
- * dcrt0.cc (sm): Make NO_COPY.
-
-2002-06-25 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (chown): Convert uid to 32 bit.
- (lchown): Ditto.
- (fchown): Ditto.
-
-2002-06-24 Christopher Faylor <cgf@redhat.com>
-
- * dtable.cc (dtable::find_unused_handle): Avoid coercion.
-
-2002-06-24 Christopher Faylor <cgf@redhat.com>
-
- * dtable.cc (fhandler_base::dup2): Cleanup. Ensure that lock is turned
- off in error condition.
-
-2002-06-24 Corinna Vinschen <corinna@vinschen.de>
-
- * uinfo.cc (internal_getlogin): Set myself->uid and myself->gid instead
- of user.real_uid and user.real_gid.
- (uinfo_init): Evaluate orig_uid and real_uid from myself->uid. Ditto
- for gid.
-
-2002-06-23 Pierre Humblet <pierre.humblet@ieee.org>
-
- * security.cc (get_group_sidlist): Add pw argument and use pw->pw_name
- in call to get_supplementary_group_sidlist.
- (create_token): Add pw argument and use it in call to
- get_group_sidlist.
- * security.h: Add pw argument in declaration of create_token.
- * syscalls.cc (seteuid32): Add pw argument in call to create_token.
-
-2002-06-23 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * fhandler.cc (fhandler_base::fstat): Set S_IFIFO for pipes.
- * fhandler_socket.cc (fhandler_socket.cc::fstat): Set S_IFSOCK.
-
-2002-06-23 Christopher Faylor <cgf@redhat.com>
-
- * lib/_cygwin_S_IEXEC.cc: Remove obsolete file.
-
-2002-06-23 Christopher Faylor <cgf@redhat.com>
-
- Use cygwin_{shm,ipc}.h instead of /sys/{shm,ipc}.h throughout.
- * sys/ipc.h: Remove.
- * sys/shm.h: Remove.
- * cygwin_ipc.h: New file.
- * cygwin_shm.h: New file.
-
-2002-06-23 Christopher Faylor <cgf@redhat.com>
-
- * cygwin.sc: Add recent changes from ld sources.
-
-2002-06-23 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * winsup.h: Move #ifdef EXPCGF code into "winbase.h".
- * winbase.h: #ifdef EXPCGF code moved here from "winsup.h".
-
-2002-06-12 Thomas Pfaff <tpfaff@gmx.net>
-
- * thread.h (pthread::cleanup_stack): Rename cleanup_handlers to
- cleanup_stack.
- * thread.cc (pthread::pthread): Ditto.
- (pthread::create): Fix mutex verification.
- (pthread::push_cleanup_handler): Renam cleanup_handlers to
- cleanup_stack. Remvoe Mutex calls, use InterlockedExchangePointer
- instead.
- (pthread::pop_cleanup_handler): Rename cleanup_handlers to
- cleanup_stack.
- (pthread::pop_all_cleanup_handlers): Ditto.
- (__pthread_once): Check state first and return if already done.
- (__pthread_join): Revert DEADLOCK test to __pthread_equal call.
- (__pthread_detach): Unlock mutex before deletion.
-
-2002-06-21 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in (cygrun.exe): Move -lgcc where it will do some good.
-
-2002-06-21 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (stat64_to_stat32): Correctly evaluate st_rdev.
- (fstat64): Set st_rdev to same value as st_dev.
- (stat_worker): Ditto.
-
-2002-06-21 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (alloc_sd): Carefully check owner_sid again after trying
- SIDs from cygheap.
-
-2002-06-21 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (alloc_sd): Remove unnecessary retrieval of owner name.
- Check uid for current user first and use SIDs from cygheap if so.
- Set errno to EINVAL if user SID isn't retrievable. Just print user SID
- as debug output.
- Don't bail out if group SID isn't retrievable. Change debug output
- appropriately.
-
-2002-06-21 Christopher Faylor <cgf@redhat.com>
-
- * errno.cc: Change text description for EBADF throughout.
-
-2002-06-20 Pierre Humblet <pierre.humblet@ieee.org>
-
- * uinfo.cc (cygheap_user::ontherange): Use env_name for NetUserGetInfo.
- (cygheap_user::env_logsrv): Verify env_domain is valid.
- * environ.cc: Include child_info.h and keep spenvs[] sorted.
- (environ_init): Check child_proc_info instead of myself->ppid_handle.
-
-2002-06-19 Christopher Faylor <cgf@redhat.com>
-
- * fhandler.cc (fhandler_base::set_flags): Change priority of "linked
- in" default binmode setting so that it has priority over optional
- setting.
-
-2002-06-19 Christopher Faylor <cgf@redhat.com>
-
- Use hMainProc where appropriate, throughout.
- * environ.cc (spenv::retrieve): Add debugging statements.
-
- * pinfo.cc (set_myself): Don't call strace.hello if already stracing.
- * strace.cc (strace): Move NO_COPY keyword so that it will actually
- take effect.
-
-2002-06-19 Corinna Vinschen <corinna@vinschen.de>
-
- * uinfo.cc (cygheap_user::ontherange): Call NetUserGetInfo() only with
- non-NULL logserver parameter.
-
-2002-06-16 Christopher Faylor <cgf@redhat.com>
-
- * cygheap.h (cygheap_user::issetuid): New method.
- * dtable.cc (dtable::vfork_child_dup): Use new method to determine if
- we are in "setuid mode."
- * fork.cc (fork_parent): Ditto.
- * spawn.cc (spawn_guts): Ditto.
- * syscalls.cc (seteuid32): Ditto.
- (setegid32): Ditto.
- * environ.cc (spenv::retrieve): (Suggested by Pierre Humblet) Do
- potential recalculation of cygheap_user stuff when in setuid mode.
- Return special value when environment variable should be calculated but
- not added.
- (build_env): Don't add retrieved value to dstp if it is 'dont_add'.
-
-2002-06-16 Christopher Faylor <cgf@redhat.com>
-
- Changes suggested by Pierre Humblet.
- * environ.cc (NL): New macro.
- (conv_envvars): Use NL macro to fill in name and namelen.
- (spenv::namelen): New field.
- (spenvs): Use NL to fill in name and namelen.
- (spenv::retrieve): Eliminate length argument. Instead, use namelen
- throughout.
- (build_env): Don't calculate length of initial FOO= part of
- environment. Accommodate spenv::retrive argument change.
-
-2002-06-16 Christopher Faylor <cgf@redhat.com>
-
- * cygheap.h (cygheap_user::winname): New field.
- * cygheap.cc (cygheap_user::set_name): Clear winname when name changes.
- * uinfo.cc (cygheap_user::env_logsrv): Avoid calculating server when
- Windows user == SYSTEM.
- (cygheap_user::env_domain): Set winname here too.
- (cygheap_user::env_userprofile): Eliminate superfluous tests.
- (cygheap_user::env_name): Seed winname by calling env_domain().
-
-2002-06-12 Pierre Humblet <pierre.humblet@ieee.org>
-
- * spawn.cc (spawn_guts): Revert removal of ciresrv.moreinfo->uid =
- ILLEGAL_UID.
-
-2002-06-15 Christopher Faylor <cgf@redhat.com>
-
- * child_info.h (child_proc_info): Declare as base class.
- (spawn_info): Declare as alias of child_proc_info to aid debugging.
- (fork_info): Ditto.
- * cygheap.cc (cygheap_fixup_in_child): Use child_proc_info global
- rather than parameter.
- * cygheap.h (cygheap_fixup_in_child): Reflect above change in
- declaration.
- * dcrt0.cc (_dll_crt0): Move 'si' definition here. Assign
- child_proc_info.
- (dll_crt0_1): Accommodate cygheap_fixup_in_child and *_info changes.
- * environ.cc (spenv::retrieve): Make regparm.
- * environ.h (environ_init): Ditto.
- (win_env::add_cache): Ditto.
- (build_env): Ditto.
- (getwinenv): Ditto.
- * fork.cc (sync_with_parent): Use fork_info global.
- (fork_child): Ditto.
-
-2002-06-14 Christopher Faylor <cgf@redhat.com>
-
- * uinfo.cc (cygheap_user::ontherange): Don't set HOMEDRIVE or HOMEPATH
- unless one or the other is specified.
-
-2002-06-14 Christopher Faylor <cgf@redhat.com>
-
- * cygheap.h (cygheap_user::userprofile_env_buf): New static member.
- * environ.cc (build_env): Add debugging statement.
- (spenvs): Switch functions for USERDOMAIN and USERNAME.
- * spawn.cc (spawn_guts): Move environment initialization prior to
- cygheap_setup_for_child or environment info will never be copied to
- child.
-
-2002-06-14 Christopher Faylor <cgf@redhat.com>
-
- * cygheap.h (cygheap_user): Add static members to hold home{drive,path}
- info.
- * uinfo.cc (cygheap_user::ontherange): Use static class members for
- local HOME* storage.
-
-2002-06-14 Christopher Faylor <cgf@redhat.com>
-
- * cygheap.cc (cygheap_user::set_logsrv): Remove.
- (cygheap_user::set_domain): Ditto.
- * cygheap.h (cygheap_user::set_logsrv): Remove declaration.
- (cygheap_user::set_domain): Ditto.
- (cygheap_user::env_domain): Declare new method.
- (cygheap_user::env_name): Ditto.
- * environ.cc (spenvs): Add two environment variables.
- * spawn.cc (spawn_guts): Call build_env after RevertToSelf. Always set
- ciresrv.mount_h.
- (cygheap_user::ontherange): Recalculate homedrive/homepath if they are
- empty. Use env_logsrv to get logon server.
- (cygheap_user::env_logsrv): Calculate server name here rather than
- relying on it having been previously calculated.
- (cygheap_user::env_domain): Ditto for domain name.
- (cygheap-user::env_name): New method.
-
-2002-06-12 Pierre Humblet <pierre.humblet@ieee.org>
-
- * syscalls.cc (seteuid32): Do not get or set the environment. Do not
- call LookupAccountSid nor internal_getlogin. Set cygheap->user name
- and sid from the passwd entry.
- * uinfo.cc (uinfo_init): Only call internal_getlogin when starting from
- a non Cygwin process and use the values returned in user.
- (internal_getlogin): Simplify to case where starting from a non Cygwin
- process. Store return values in user and return void. Do not set the
- Windows default environment.
- * dcrt0.cc (dll_crt0_1): Call uinfo_init only when needed. Do not set
- myself->uid nor reset user.sid.
- * spawn.cc (spawn_guts): Get the sid from cygheap->user. Always
- RevertToSelf(). Don't set uid in impersonated case.
- * cygheap.cc (cygheap_user::set_sid): Do not set orig_sig.
- (cygheap_user::set_orig_sid): New.
- * cygheap.h: Declare cygheap_user::set_sid.
- * winsup.h: Add argument to uinfo_init().
-
-2002-06-14 Corinna Vinschen <corinna@vinschen.de>
-
- * environ.cc (build_env): If realloc moves envblock, move s with it.
-
-2002-06-13 Nicholas S. Wourms <nwourms@netscape.net>
-
- * winver.rc: Add more words to copyright.
-
-2002-06-13 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.cc (cygheap_user::set_name): Revert previous change.
- * environ.cc (spenv::retrieve): Check return value of call to
- cygheap->user.*from_cygheap().
-
-2002-06-13 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.cc (cygheap_user::set_name): Remove setting homedrive and
- homepath to NULL.
- (cygheap_user::set_logsrv): Fix free'ing of plogsrv.
- * cygheap.h (cygheap_user::cygheap_user): Initialize homedrive and
- homepath to NULL.
-
-2002-06-13 Christopher Faylor <cgf@redhat.com>
-
- * security.cc (get_logon_server): Use strcasematch rather than
- strcasecmp.
-
-2002-06-12 Christopher Faylor <cgf@redhat.com>
-
- * path.cc (chdir): Minor cleanup.
-
-2002-06-12 Christopher Faylor <cgf@redhat.com>
-
- * environ.cc (build_env): Correctly fill out windows environment block
- with win32 paths rather than posix paths.
-
-2002-06-12 Christopher Faylor <cgf@redhat.com>
-
- * cygheap.cc (cygheap_user::set_name): Set homedrive and homepath to
- NULL on user name change.
- (cygheap_user::set_logsrv): Allocate enough space for leading \\ so
- that we can put this in the environment, if needed.
- * cygheap.h (homebodies): New enum.
- (cygheap_user::homedrive): New field.
- (cygheap_user::homepath): Ditto.
- (cygheap_user::env_logsrv): New method.
- (cygheap_user::env_homepath): New method.
- (cygheap_user::env_homedrive): New method.
- (cygheap_user::env_userprofile): New method.
- (cygheap_user::ontherange): New method.
- * environ.cc (envsize): Eliminate debugging argument.
- (environ_init): Assume that envc counts number of elments not total
- size.
- (spenv): New class.
- (spenvs): New array, rename from forced_winenv_vars, using spenv.
- (spenv::retrieve): New method.
- (build_env): Rename from 'winenv' -- one stop shopping for building new
- environment blocks for both windows and "unix".
- * environ.h (build_env: Declare.
- (winenv): Delete declaration.
- (envsize): Ditto.
- * spawn.cc (spawn_guts): Use build_env to build windows and cygwin
- environment blocks.
- * uinfo.cc (internal_getlogin): Eliminate environment manipulation.
- Default to info from GetUserName if it exists. Move HOMEPATH and
- HOMEDRIVE stuff elsewhere. Move HOME setting elsewhere. Only set HOME
- environment variable in processes that are not parented by a cygwin
- process.
- (cygheap_user::ontherange): Define new method.
- (cygheap_user::env_logsrv): Ditto.
- (cygheap_user::env_homepath): Ditto.
- (cygheap_user::env_homedrive): Ditto.
- (cygheap_user::env_userprofile): Ditto.
-
-2002-06-11 Christopher Faylor <cgf@redhat.com>
-
- * spawn.cc (spawn_guts): More hToken removal cleanup.
-
-2002-06-09 Pierre Humblet <pierre.humblet@ieee.org>
-
- * spawn.cc (spawn_guts): Define sec_attribs and call sec_user_nih()
- only once.
-
-2002-06-10 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Ensure that -MD gets added to CFLAGS regardless of
- CFLAGS command-line setting.
-
- * cygwin.din: Export sexec* functions as function which returns ENOSYS
- (i.e., sexec* is deprecated).
- * dtable.cc (dtable::vfork_child_dup): Ensure that impersonation is
- restored even on failure.
- * exec.cc: Throughout, remove references to sexec* and _spawnve.
- * pinfo.h: Remove _spawnve declaration.
- * spawn.cc: Rename _spawnve to spawnve and use throughout.
- (spawn_guts): Eliminate hToken argument and processing of same. Just
- perform special actions if impersonating.
- (spawnve): Rename from _spawnve.
-
-2002-06-10 Christopher Faylor <cgf@redhat.com>
-
- * include/sys/strace.h (strace): Avoid use of constructor.
-
-2002-06-10 Christopher Faylor <cgf@redhat.com>
-
- * dcrt0.cc (dll_crt0_1): Initialize wincap and check for sanity before
- running global ctors.
- * wincap.h (wincap): Eliminate constructor. Default is to zero memory,
- anyway.
- * wincap.cc (wincap): Copy this on fork to avoid initialization in
- forked processes.
-
-2002-06-10 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (fhandler_socket::fixup_after_fork): Revert patch from
- 2002-06-04.
- * fhandler_socket.cc (fhandler_socket::fixup_after_fork): Ditto.
- (fhandler_socket::dup): Ditto.
- * net.cc (fdsock): Make sockets explicitely noninheritable on NT.
-
-2002-06-09 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_disk_file.cc (fhandler_disk_file::fstat_helper): Correctly
- set number of links for directory, if appropriate.
-
-2002-06-10 Robert Collins <rbtcollins@hotmail.com>
-
- * thread.cc: Variation of a patch from Thomas Pffaf.
- (__pthread_detach): Cleanup thread object if the thread has terminated.
- (__pthread_join): Change order of error checks, and lock against
- join/detach/exit races.
- (__pthread_exit): Lock object against join/detach/exit races.
- (pthread::thread_init_wrapper): Ditto.
- (thread_init_wrapper): Rename to pthread::thread_init_wrapper.
- (pthread::create): Check that the mutex initialized correctly.
- (pthread::push_cleanup_handler): Lock against potential cancellation
- race. NB: this may not be required if pthread_cleanup_push is non-
- cancelable.
- * thread.h (pthread::mutex): New member.
- (thread_init_wrapper): Rename to pthread::thread_init_wrapper.
- (pthread::thread_init_wrapper_: New static member.
-
-2002-06-10 Robert Collins <rbtcollins@hotmail.com>
-
- * cygwin.din: Add _pthread_cleanup_push and _pthread_cleanup_pop.
- * pthread.cc: Change __pthread_self to pthread::self() thruoghout.
- (_pthread_cleanup_push): New function.
- (_pthread_cleanup_pop): Ditto.
- * thread.cc: Thanks to Thomas Pfaff for the pthread cleanup_push,_pop
- patch, this work is derived from that.
- Change __pthread_self to pthread::self() thruoghout.
- (__pthread_self): Rename to pthread::self.
- (pthread::self): New method.
- (pthread::pthread): Initialize new member.
- (pthread::push_cleanup_handler): New method.
- (pthread::pop_cleanup_handler): New method.
- (pthread::pop_all_cleanup_handlers): New method.
- (__pthread_exit): Pop all cleanup handlers.
- * thread.h (pthread::push_cleanup_handler): Declare.
- (pthread::pop_cleanup_handler): Ditto.
- (pthread::pop_all_cleanup_handlers): Ditto.
- (pthread::self): New static method.
- (__pthread_exit): Give C++ linkage.
- (__pthread_join): Ditto.
- (__pthread_detach): Ditto.
- (__pthread_self): Remove.
-
-2002-04-24 Thomas Pfaff <tpfaff@gmx.net>
-
- * include/pthread.h (__pthread_cleanup_handler): New structure.
- (pthread_cleanup_push): Rewritten.
- (pthread_cleanup_pop): Ditto.
- (_pthread_cleanup_push): New prototype.
- (_pthread_cleanup_pop): Ditto.
-
-2002-04-24 Thomas Pfaff <tpfaff@gmx.net>
-
- * thread.cc (thread_init_wrapper): Check if thread is already joined.
- (__pthread_join): Set joiner first.
- (__pthread_detach): Ditto.
-
-2002-06-10 Robert Collins <rbtcollins@hotmail.com>
-
- * cygserver_transport.cc (create_server_transport): Finish the split
- out of sockets code from transport_layer_base. Thanks to Nicholas
- Wourms and Conrad Scott for catching this.
-
-2002-06-08 Christopher Faylor <cgf@redhat.com>
-
- * pinfo.cc (pinfo_dummy): Initialize to correct size.
-
-2002-06-08 Christopher Faylor <cgf@redhat.com>
-
- * path.cc: Change MOUNT_AUTO to MOUNT_CYGDRIVE throughout.
- * shared_info.h (CURR_MOUNT_MAGIC): Update.
-
-2002-06-08 Christopher Faylor <cgf@redhat.com>
-
- * external.cc (cygwin_internal): Make v1 mount table access invalid.
- * path.cc (mount_info::init): Remove had_to_create_mount_areas initialization.
- (mount_info::from_registry): Remove v1 table import.
- (mount_info::read_v1_mounts): Eliminate.
- (mount_info::import_v1_mounts): Ditto.
- * shared_info.h (mount_info): Ditto for both of above.
- * sys/mount.h (MOUNT_DEVFS): New enum.
- (MOUNT_PROC): Ditto.
-
-2002-06-08 Christopher Faylor <cgf@redhat.com>
-
- * include/wchar.h: Define __need_size_t.
-
-2002-06-07 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_socket.cc (fhandler_socket::fstat): Don't assume that socket
- is unix-domain socket.
-
-2002-06-07 Christopher Faylor <cgf@redhat.com>
-
- * times.cc (hires_ms::prime): Set init flag.
-
-2002-06-07 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * times.cc (hires_ms::prime): Adjust epoch of initime_us from 1601 to
- 1970.
-
-2002-06-06 Christopher Faylor <cgf@redhat.com>
-
- * autoload.cc (timeGetDevCaps): Define new autoload function.
- (timeGetTime): Ditto.
- (timeBeginPeriod): Ditto.
- (timeEndPeriod): Ditto.
- * hires.h (hires_base): New class. Rename from hires.
- (hires_us): New class.
- (hires_ms): New class.
- * strace.cc (strace::microseconds): Use hires_us class.
- * times.cc (gettimeofday): Use hires-ms class.
- (hires_us::prime): Rename from hires::prime.
- (hires_us::usecs): Rename from hires:usecs.
- (hires_ms::prime): New method.
- (hires_ms::usecs): New method.
- (hires_ms::~hires_ms): New destructor.
-
-2002-06-06 Christopher Faylor <cgf@redhat.com>
-
- * autoload.cc (noload): Correctly save argument count register.
-
-2002-06-05 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * fhandler.cc (fhandler_base::fstat): Initialise tv_nsec member of
- st_atim, st_mtim, and st_ctim fields.
- * fhandler_disk_file.cc (fhandler_disk_file::fstat_helper): Ditto.
- * fhandler_process.cc (fhandler_process::fstat): Ditto.
- * glob.c (stat32_to_STAT): Copy across the whole st_atim, st_mtime, and
- st_ctim fields.
- * syscalls.cc (stat64_to_stat32): Ditto.
- * times.cc (to_timestruc_t): New function.
- (time_as_timestruc_t): New function.
- * winsup.h: Add to_timestruc_t and time_as_timestruc_t functions.
- * include/cygwin/stat.h: Replace time_t with timestruc_t throughout for
- all file times, removing the st_spare1, st_spare2, and st_spare3 fields
- in the process. Add macros to access tv_sec fields by old names.
- * include/cygwin/types.h: Typedef timespec_t and timestruc_t as struct
- timespec.
-
-2002-06-03 Pierre Humblet <pierre.humblet@ieee.org>
-
- * sec_helper.cc (lookup_name): Suppress.
- * security.cc (alloc_sd): Remove logsrv argument.
- Remove two calls to lookup_name.
- (set_security_attribute): Remove logsrv argument.
- Remove logsrv argument in call to alloc_sd.
- (set_nt_attribute): Remove logsrv argument.
- Remove logsrv argument in call to set_security_attribute.
- (set_file_attribute): Remove logsrv argument.
- Remove logsrv argument in call to set_nt_attribute.
- (set_file_attribute): Remove logsrv argument.
- Remove logsrv argument in call to set_file_attribute.
- * syscalls.cc (chown_worker): Remove logserver argument in
- call to set_file_attribute.
- (chmod): Ditto.
- * shm.cc (shmget): Remove logsrv argument in call to alloc_sd.
- * uinfo.cc (internal_getlogin): Replace calls to
- lookup_name by call to LookupAccountName.
- * security.h: Remove logsrv in declarations of set_file_attribute
- and alloc_sd. Remove declaration of lookup_name.
-
-2002-06-05 Christopher Faylor <cgf@redhat.com>
-
- * child_info.h (CHILD_INFO_MAGIC): Oops. Revert previous change. gcc
- 3.1 bug?
-
-2002-06-05 Christopher Faylor <cgf@redhat.com>
-
- * child_info.h (CHILD_INFO_MAGIC): Update.
-
-2002-06-05 Christopher Faylor <cgf@redhat.com>
-
- * strace.cc (strace::hello): Set inited, when appropriate.
-
-2002-06-05 Christopher Faylor <cgf@redhat.com>
-
- * cygwin.din: Eliminate some newlib wrappers.
- * path.cc (get_devn): Only consider first 99 potential com devices.
- (get_device_number): Ditto.
- * times.cc (_times): Eliminate.
- (_times): Rename from times().
-
-2002-06-05 Christopher Faylor <cgf@redhat.com>
-
- * dir.cc (rmdir): Streamline. Detect attempts to remove directories
- from "read-only" virtual devices. (Suggested by Pavel Tsekov)
- * syscalls.cc (unlink): Detect attempts to remove directories from
- "read-only" virtual devices. (From Pavel Tsekov)
-
-2002-06-05 Christopher Faylor <cgf@redhat.com>
-
- * dtable.cc (handle_to_fn): Check error return value from NtQueryObject
- first before seeing if name buffer is NULL.
-
- * grp.cc (read_etc_group): Fix gcc warning regarding snprintf format.
- * passwd.cc (read_etc_passwd): Ditto.
-
-2002-04-18 Thomas Pfaff <tpfaff@gmx.net>
-
- * thread.h (pthread::joiner): New member.
- * thread.cc (pthread::pthread): Initialize joiner to NULL
- (pthread::create): Increment of thread counter moved from
- __pthread_create to this location.
- (__pthread_create): Increment thread counter removed.
- (thread_init_wrapper): Set joiner to self when thread was created
- detached.
- (__pthread_exit): delete thread when it is detached and not
- joined.
- (__pthread_join): Check for deadlock and delete thread when it has
- terminated.
- (__pthread_detach): Set joiner to self when thread state
- changed to detached.
-
-2002-06-05 Corinna Vinschen <corinna@vinschen.de>
-
- * grp.cc (read_etc_group): When emulating nonexisting group file on
- NT systems, read primary group SID from process token. Use that info
- to create correct group entry. On error or on 9x systems fallback
- to emulating Administrators group as before.
- * passwd.cc (read_etc_passwd): When emulating nonexisting passwd file
- on NT systems, read user and primary group SID from process token.
- Use that info to create correct passwd entry. On error or on 9x
- systems fallback to emulating user with Administrator user id and
- Administrators group as before.
-
-2002-06-05 Corinna Vinschen <corinna@vinschen.de>
-
- * grp.cc (etc_group): Removed.
- (parse_grp): Make line parameter nonconst. Don't copy data into new
- allocated memory. Check for CR instead of LF to accomodate new
- read method.
- (add_grp_line): Make line parameter nonconst.
- (read_etc_group): Rearrange using new pwdgrp_read class.
- * passwd.cc (parse_pwd): Don't copy data into new allocated memory.
- Check for CR instead of LF to accomodate new read method.
- (read_etc_passwd): Rearrange using new pwdgrp_read class.
- * pwdgrp.h (pwdgrp_check::set_last_modified): Use different
- parameters.
- (class pwdgrp_read): New class for opening and reading passwd and
- group files.
-
-2002-06-04 Christopher Faylor <cgf@redhat.com>
-
- * dtable.cc (handle_to_fn): Attempt to handle "raw" accesses to remote
- shares.
- * path.cc (mount_info::conv_to_win32_path): Set flags to binary when
- mount entry is not found.
- (mount_info::set_flags_from_win32_path): Ditto.
-
-2002-06-04 Christopher Faylor <cgf@redhat.com>
-
- * dtable.cc (handle_to_fn): Correct placement and length of name
- buffer. (Suggested by Pavel Tsekov)
-
-2002-06-04 Christopher Faylor <cgf@redhat.com>
-
- Remove fcntl.h includes throughout.
- * fhandler.h: Move fcntl.h include here.
- (fhandler_base::set_flags): Accept supplied_bin argument. Make
- non-inlined.
- * dtable.cc (dtable::init_std_file_from_handle): Just use binmode from
- pc.
- (reset_to_open_binmode): Use set_flags.
- * cygwin.din (open): Avoid newlib wrapper.
- (read): Ditto.
- (unlink): Ditto.
- (write): Ditto.
- * fhandler.cc (fhandler_base::set_flags): Accept supplied_bin argument.
- Make binmode decisions here.
- (fhandler_base::open): Avoid using pc if it is NULL. Eliminate binmode
- logic. Just call set_flags with binmode argument.
- (fhandler_base::init): Call set_flags with binmode argument.
- * fhandler_clipboard.cc (fhandler_dev_clipboard::open): Ditto.
- * fhandler_console.cc (fhandler_console::open): Ditto.
- (fhandler_console::init): Force binary on open.
- * fhandler_disk_file.cc (fhandler_disk_file::open): Don't set binmode
- here. Let it happen in base class.
- * fhandler_dsp.cc (fhandler_dev_dsp::open): Force binmode open. Set
- return value appropriately if unable to open.
- * fhandler_proc.cc (fhandler_proc::open): Make sure flags are set
- before open_status.
- * fhandler_process.cc (fhandler_process::open): Ditto.
- * fhandler_registry.cc (fhandler_registry::open): Ditto.
- * fhandler_random.cc (fhandler_dev_random::fhandler_dev_random): Ditto.
- * fhandler_raw.cc (fhandler_dev_raw::open): Force O_BINARY by default.
- * fhandler_serial.cc (fhandler_serial::init): Ditto.
- * fhandler_tty.cc (fhandler_tty_slave::open): Ditto.
- (fhandler_pty_master::open): Ditto.
- * fhandler_virtual.cc (fhandler_virtual::open): Ditto.
- * fhandler_windows.cc (fhandler_windows::open): Ditto.
- * fhandler_zero.cc (fhandler_dev_zero::open): Ditto.
- * net.cc (fdsock): Ditto.
- * path.cc (path_conv::check): Avoid checking for executable extension
- when directory. (Suggested by Pavel Tsekov)
- (set_flags): Set PATH_TEXT explicitly, when appropriate.
- (mount_info::conv_to_win32_path): Use set_flags() to set path flags.
- * path.h (PATH_TEXT): New enum.
- (path_conv::binmode): Return appropriate constant based on binmode.
- * pipe.cc (make_pipe): Set binmode to O_TEXT xor O_BINARY.
- * syscalls.cc (setmode_helper): Make debugging message a little
- clearer.
- (setmode): Set binmode via set_flags.
-
-2002-06-04 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (class fhandler_socket): Add private method
- fixup_after_fork (bool, HANDLE).
- * fhandler_socket.cc (fhandler_socket::fixup_after_fork): Move
- functionality to new private method. Add closing parent socket
- if not called from dup(). Create method new calling private method
- with appropriate parameter.
- (fhandler_socket::fixup_after_exec): Call private method
- fixup_after_fork with appropriate parameter.
- (fhandler_socket::dup): Ditto.
-
-2002-06-04 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_dsp.cc (fhandler_dev_dsp::open): Set errno to EACCES if
- requested mode isn't supported.
-
-2002-06-03 Christopher Faylor <cgf@redhat.com>
-
- * fhandler.cc (fhandler_base::open): Don't set binmode if already set.
- Don't check for file. Files should already be set. Report on binary
- mode for debugging.
- (fhandler_base::fhandler_base): Don't set default binmode here. That's
- for later.
- * fhandler_console.cc (fhandler_console::output_tcsetattr): Don't set
- binmode, ever, for console.
- * fhandler_disk_file.cc (fhandler_disk_file::open): Always set the
- binary mode to the value derived from mount table.
- * path.cc (mount_info::conv_to_win32_path): Default to binmode if path
- does not translate into anything in the mount table.
-
-2002-06-03 Corinna Vinschen <corinna@vinschen.de>
-
- * external.cc (cygwin_internal): Add CW_EXTRACT_DOMAIN_AND_USER
- handling to call extract_nt_dom_user() from applications.
- * include/sys/cygwin.h (cygwin_getinfo_types): Add
- CW_EXTRACT_DOMAIN_AND_USER.
-
-2002-06-03 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (stat64_to_stat32): Transform st_dev correctly.
- (fstat64): Add evaluating st_ino and st_dev.
- (stat_worker): Evaluate st_dev as 32 bit value.
- * include/cygwin/stat.h: Use new dev_t definition throughout.
- * include/cygwin/types.h: Define __dev16_t and __dev32_t. Define
- dev_t according to __CYGWIN_USE_BIG_TYPES__ setting.
- * include/sys/sysmacros.h: Define major, minor and makedev
- according to __CYGWIN_USE_BIG_TYPES__ setting.
-
-2002-06-03 Pierre Humblet <pierre.humblet@ieee.org>
-
- * syscalls.cc (setegid32): Verify the correctness of the gid
- of the group returned by getgrgid32.
-
-2002-06-03 Pierre Humblet <pierre.humblet@ieee.org>
-
- * security.cc (lsa2wchar): Suppressed.
- (get_lsa_srv_inf): Suppressed.
- (get_logon_server_and_user_domain): Suppressed.
- (get_logon_server): Essentially new.
- (get_user_groups): Add "domain" argument. Only lookup the
- designated server and use "domain" in LookupAccountName.
- (is_group_member): Simplify the arguments.
- (get_user_local_groups): Simplify the arguments. Do only a
- local lookup. Use "BUILTIN" and local domain in LookupAccountName.
- (get_user_primary_group). Only lookup the designated server.
- (get_group_sidlist): Remove logonserver argument. Do not lookup
- any server for the SYSTEM account.
- (create_token): Delete logonserver and call to get_logon_server.
- Adjust arguments of get_group_sidlist, see above.
- * security.h: Delete declaration of get_logon_server_and_user_domain
- and add declaration of get_logon_server.
- * uinfo.cc (internal_get_login): Call get_logon_server instead of
- get_logon_server_and_user_domain.
-
-2002-06-02 Christopher Faylor <cgf@redhat.com>
-
- * dtable.cc (handle_to_fn): Use largest match for device. Correctly
- (?) deal with remote drive weirdness.
-
-2002-06-02 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_disk_file.cc (fhandler_disk_file::fstat_by_name): Check
- specifically for non-existent file, first.
- (fhandler_disk_file::fstat): Perform fd open on files with funny
- characters.
-
-2002-06-02 Christopher January <chris@atomice.net>
-
- * fhandler_process.cc (fhandler_process::open): Set fileid.
-
-2002-06-02 Christopher Faylor <cgf@redhat.com>
-
- Remove unneeded sigproc.h includes throughout.
- * fhandler.h (fhandler_proc::fill_filebuf): Take a pinfo argument.
- * fhandler_proc.cc (fhandler_proc::get_proc_fhandler): Simplify search
- for given pid.
- (fhandler_proc::readdir): Assume that pid exists if it shows up in the
- winpid list.
- * fhandler_process.cc (fhandler_process::open): Simplify search for
- given pid. Call fill_filebuf with pinfo argument.
- (fhandler_process::fill_filebuf): Pass pinfo here and assume that it
- exists.
- * pinfo.h (pinfo::remember): Define differently if sigproc.h is not
- included.
-
-2002-06-02 Christopher Faylor <cgf@redhat.com>
-
- * dll_init.cc (dll_list::detach): Don't run destructor on exit.
-
-2002-06-01 Christopher Faylor <cgf@redhat.com>
-
- * fhandler.cc (fhandler_base::fstat): Move dev and ino calculation into
- caller.
- * syscalls.cc (stat_worker): Calculate dev and ino calculation here, if
- zero.
- * fhandler_proc.cc (fhandler_proc::fhandler_proc): Minor reorg for
- debugging.
- * fhandler_process.cc (fhandler_process::exists): Return 0 on
- nonexistence.
- (fhandler_process::fstat): Simplify pid logic.
- * fhandler_tape.cc (fhandler_dev_tape::fstat): Minor reformatting.
-
-2002-06-01 Christopher Faylor <cgf@redhat.com>
-
- * path.cc (chdir): Don't allow cd'ing to a non-directory virtual path.
-
-2002-05-31 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_disk_file.cc (readdir): Move inode calculation into caller.
- (fhandler_cygdrive::readdir): Add "." and "..".
- * dir.cc (readdir): Move inode calculation here so that fhandler
- readdirs can benefit.
-
-2002-05-31 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_console.cc (fhandler_console::open): Reinstate setting of
- flags.
-
- * dtable.cc (dtable::init_std_file_from_handle): Default to using
- binmode derived from path_conv, when required.
- * fhandler.h (fhandler_base::get_w_binary): Default to binmode if
- nothing else is specified.
- * fhandler.h (fhandler_base::get_r_binary): Ditto.
-
- * fhandler_disk_file.cc (fhandler_disk_file::fstat_by_handle): Work
- around g++ warning.
-
- * path.cc (path_conv::check): Remove a debugging statement.
-
-2002-05-31 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_console.cc (fhandler_console::open): Always default to
- binmode.
- (fhandler_console::write_normal): Don't honor binmode setting. There
- is already a termios setting for this.
- (fhandler_console::init): Correct argument order in init call.
-
-2002-05-31 Christopher Faylor <cgf@redhat.com>
-
- * fhandler.cc (fhandler_base::open): Make default open mode == binmode.
- (fhandler_base::init): Set open flags based on derived binmode argument.
-
-2002-05-31 Christopher Faylor <cgf@redhat.com>
-
- * dll_init.cc (dll_list::init): Eliminate unneeded debugging statement.
-
-2002-05-31 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_proc.cc (fhandler_proc::readdir): Set errno when no more
- files.
- * fhandler_process.cc (fhandler_process::readdir): Ditto.
- * fhandler_registry.cc (fhandler_registry::readdir): Ditto.
-
-2002-05-30 Christopher Faylor <cgf@redhat.com>
-
- * path.cc (path_conv::check): Set fileattr to INVALID_FILE_ATTRIBUTES
- for nonexistent virtual device path.
- (chdir): Set correct errno when attempt is made to cd to nonexistent
- virtual device path.
-
-2002-05-30 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_disk_file.cc (fhandler_disk_file::fstat): Always call
- fstat_by_name if fd is not opened to allow fstat_by_name to properly
- set errno.
-
-2002-05-30 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc: Replace autoload statments for ZwXXX by NtXXX.
- Drop ZwQuerySystemInformation since NtQuerySystemInformation was
- already available.
- * fhandler_proc.cc (format_proc_uptime): Replace call to
- ZwQuerySystemInformation by call to NtQuerySystemInformation.
- (format_proc_stat): Ditto.
- * fhandler_process.cc (format_process_stat): Replace call to
- ZwQueryInformationProcess by call to NtQueryInformationProcess.
- (get_process_state): Ditto.
- (get_mem_values): Ditto. Replace call to ZwQueryVirtualMemory by
- call to NtQueryVirtualMemory.
- * ntdll.h: Cleanup. Drop ZwQuerySystemInformation since
- NtQuerySystemInformation was already available. Replace declarations
- of ZwXXX functions by declarations of NtXXX.
- * pinfo.cc (winpids::enumNT): Replace call to ZwQuerySystemInformation
- by call to NtQuerySystemInformation.
-
-2002-05-29 Christopher Faylor <cgf@redhat.com>
-
- * fhandler.cc (binmode): Default to binmode when mode is not known.
-
-2002-05-29 Christopher Faylor <cgf@redhat.com>
-
- * include/sys/cygwin.h (EXTERNAL_PINFO_VERSION): Reinstate.
- * external.cc (fillout_pinfo): Use it.
-
-2002-05-29 Corinna Vinschen <corinna@vinschen.de>
-
- * external.cc (fillout_pinfo): Use new version define.
- * include/sys/cygwin.h (external_pinfo): Define
- EXTERNAL_PINFO_VERSION_16_BIT and EXTERNAL_PINFO_VERSION_32_BIT
- instead of just EXTERNAL_PINFO_VERSION.
-
-2002-05-29 Christopher Faylor <cgf@redhat.com>
-
- * external.cc (fillout_pinfo): Set new version field in external_pinfo
- structure.
- * include/sys/cygwin.h (external_pinfo): Replace strace_file with
- version field.
-
-2002-05-29 Corinna Vinschen <corinna@vinschen.de>
-
- Change internal uid datatype from __uid16_t to __uid32_t
- throughout.
- * cygwin.din: Export new symbols getpwuid32, getpwuid_r32, getuid32,
- geteuid32, setuid32, seteuid32.
- * passwd.cc (getpwuid32): New function.
- (getpwuid_r32): Ditto.
- * syscalls.cc (seteuid32): Ditto.
- (setuid32): Ditto.
- * uinfo.cc (getuid32): Ditto.
- (geteuid32): Ditto.
- * winsup.h (uid16touid32): New macro, correct casting from __uid16_t
- to __uid32_t.
- (gid16togid32): Ditto fir gids.
- (getuid32): Declare.
- (geteuid32): Ditto.
- (getpwuid32): Ditto.
- * include/sys/cygwin.h (struct external_pinfo): Add members uid32 and
- gid32.
-
-2002-05-29 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/socket.h: Protect some symbols against multiple
- definition.
- * include/netinet/ip.h: Ditto.
- * include/netinet/tcp.h: Ditto.
-
-2002-05-29 Wu Yongwei <adah@netstd.com>
-
- * include/netinet/ip.h: Replace by BSD derived version of the file.
- * include/netinet/tcp.h: Ditto.
- * include/netinet/udp.h: New file.
- * include/cygwin/ip.h: Remove.
-
-2002-05-29 Christopher Faylor <cgf@redhat.com>
-
- * dtable.cc (dtable::init_std_file_from_handle): Attempt stronger
- detection of invalid handle.
- (handle_to_fn): Detect pathological condition where NT resets the
- buffer pointer to NULL on an invalid handle.
-
-2002-05-28 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_disk_file.cc (fhandler_disk_file::fstat_helper): Properly
- check for whether we should be opening the file to search for #!
- characters. Set path_conv structure execability, too, when
- appropriate.
-
-2002-05-28 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (set_security_attribute): Call getegid32() instead of
- getegid().
- * include/cygwin/grp.h: Declare getegid32().
-
-2002-05-28 Corinna Vinschen <corinna@vinschen.de>
-
- Change internal gid datatype from __gid16_t to __gid32_t
- throughout.
- * cygwin.din: Export new symbols chown32, fchown32, getegid32,
- getgid32, getgrgid32, getgrnam32, getgroups32, initgroups32, lchown32,
- setgid32, setegid32, getgrent32.
- * grp.cc (grp32togrp16): New static function.
- (getgrgid32): New function.
- (getgrnam32): Ditto.
- (getgrent32): Ditto.
- (getgroups32): Change name of internal function from getgroups.
- (getgroups32): New function.
- (initgroups32): Ditto.
- * syscalls.cc (chown32): Ditto.
- (lchown32): Ditto.
- (fchown32): Ditto.
- (setegid32): Ditto.
- (setgid32): Ditto.
- * uinfo.cc (getgid32): Ditto.
- (getegid32): Ditto.
- * include/cygwin/grp.h: Remove declaration of getgrgid() and getgrnam().
- Declare getgrgid32() and getgrnam32() instead. Declare getgid32().
-
-2002-05-27 Christopher Faylor <cgf@redhat.com>
-
- * autoload.cc (noload): Properly mask low order word for determining
- number of bytes to pop.
-
-2002-05-27 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_disk_file.cc (fhandler_disk_file::fstat): Minor logic
- cleanup.
-
-2002-05-27 Christopher Faylor <cgf@redhat.com>
-
- * autoload.cc (LoadFuncEx): Define via new LoadFuncEx2 macro.
- (LoadFuncEx2): Adapt from LoadFuncEx. Provides control of return
- value for nonexistent function.
- (NtQueryObject): Declare.
- (IsDebuggerPresent): Declare via LoadFuncEx2 and always return true if
- not available.
- * debug.h (being_debugged): Just rely on IsDebuggerPresent return
- value.
- * dtable.cc (handle_to_fn): New function.
- (dtable::init_std_file_from_handle): Attempt to derive std handle's
- name via handle_to_fn.
- (dtable::build_fhandler_from_name): Fill in what we can in path_conv
- structure when given a handle and path doesn't exist.
- * fhandler.cc (fhandler_base::open): Don't set the file pointer here.
- Use pc->exists () to determine if file exists rather than calling
- GetFileAttributes again.
- * fhandler.h (fhandler_base::exec_state_isknown): New method.
- (fhandler_base::fstat_helper): Add extra arguments to declaration.
- (fhandler_base::fstat_by_handle): Declare new method.
- (fhandler_base::fstat_by_name): Declare new method.
- * fhandler_disk_file (num_entries): Make __stdcall.
- (fhandler_base::fstat_by_handle): Define new method.
- (fhandler_base::fstat_by_name): Define new method.
- (fhandler_base:fstat): Call fstat_by_{handle,name} as appropriate.
- (fhandler_disk_file::fstat_helper): Accept extra arguments for filling
- out stat structure. Move handle or name specific stuff to new methods
- above.
- (fhandler_disk_file::open): Use real_path->exists rather than calling
- GetFileAttributes again.
- * ntdll.h (FILE_NAME_INFORMATION): Define new structure.
- (OBJECT_INFORMATION_CLASS): Partially define new enum.
- (OBJECT_NAME_INFORMATION): Define new structure.
- (NtQueryInformationFile): New declaration.
- (NtQueryObject): New declaration.
- * path.cc (path_conv::fillin): Define new method.
- * path.h (path_conv::fillin): Declare new method.
- (path_conv::drive_thpe): Rename from 'get_drive_type'.
- (path_conv::volser): Declare new method.
- (path_conv::volname): Declare new method.
- (path_conv::root_dir): Declare new method.
- * syscalls.cc (fstat64): Send real path_conv to fstat as second
- argument.
-
-2002-05-24 Pierre Humblet <pierre.humblet@ieee.org>
-
- * security.cc (lsa2str): New function.
- (get_priv_list): Call lsa2str instead of sys_wcstombs.
-
-2002-05-22 Pierre Humblet <pierre.humblet@ieee.org>
-
- * syscalls.cc (seteuid): Do not take allow_ntsec into account.
- Attempt to use an existing or new token even when the uid
- matches orig_uid, but the gid is not in the process token.
- Major reorganization after several incremental changes.
- (setegid): Do not take allow_ntsec into account. Minor
- reorganization after several incremental changes.
-
-2002-05-26 Christopher Faylor <cgf@redhat.com>
-
- * debug.h (being_debugged): New macro.
- * dtable.cc (dtable::extend): Use new macro.
- * exceptions.cc (try_to_debug): Ditto.
- * strace.cc (strace::hello): Only output debugging info when we think
- we're being debugged.
-
-2002-05-25 Robert Collins <rbtcollins@hotmail.com>
-
- * winsup.h: Remove duplicate declarations of malloc_lock and
- malloc_unlock.
-
-2002-05-24 Christopher Faylor <cgf@redhat.com>
-
- Remove unneeded sync.h, where appropriate, throughout.
- Remove unneeded heap.h, where appropriate, throughout.
- Remove unneeded exceptions.h, where appropriate, throughout.
- Remove unneeded perprocess.h, where appropriate, throughout.
-
-2002-05-22 Pierre Humblet <pierre.humblet@ieee.org>
-
- * security.cc (create_token): Call __sec_user() instead of
- sec_user() to remove dependence on allow_ntsec. Verify that
- the returned sd is non-null.
-
-2002-05-25 Robert Collins <rbtcollins@hotmail.com>
-
- * gmon.c (fake_sbrk): Correctly return -1 on failed malloc's.
-
-2002-05-24 Christopher Faylor <cgf@redhat.com>
-
- * dtable.cc (dtable::build_fhandler_from_name): Just pass posix path
- along to set_name via return_and_clear_normalized_path.
- (dtable::build_fhandler): New method with const char * argument.
- (dtable::reset_unix_path_name): Eliminate.
- (dtable::dup_worker): Use correct build_fhandler method.
- * mmap.cc (mmap_record::alloc_fh): Ditto.
- * dtable.h (dtable::build_fhandler): New method.
- (dtable::reset_unix_path_name): Eliminate.
- * fhandler.cc (fhandler_base::set_name): Assume that unix_name has
- already been cmalloced.
- (fhandler_base::reset_unix_path_name): Eliminate.
- (fhandler_base::~fhandler_base): Coercion for cfree.
- * fhandler.h (fhandler_base::unix_path_name): Make const char *.
- (fhandler_base::win32_path_name): Ditto.
- (fhandler_base::reset_unix_path_name): Eliminate.
- * fhandler_disk_file.cc (fhandler_cygdrive::set_drives): Accommodate
- const char *ness of win32_path_name.
- * fhandler_socket.cc (fhandler_socket::fstat): Accommodate new set_name
- requirements.
- * path.cc (path_conv::return_and_clear_normalized_path): New method.
- (path_conv::clear_normalized_path): Eliminate.
- (path_conv::~path_conv): Ditto.
- (path_conv::check): Accommodate new build_fhandler method.
- * path.h (path_conv::~path_conv): Eliminate.
- (path_conv::clear_normalized_path): Ditto.
- (path_conv::return_and_clear_normalized_path): Declare new method.
-
-2002-05-23 Christopher Faylor <cgf@redhat.com>
-
- * path.cc (path_conv::check): Make sure any trailing path component is
- part of potential normalized posix path.
-
-2002-05-23 Christopher Faylor <cgf@redhat.com>
-
- * smallprint.c (__small_vsprintf): Implement '%o' after all these
- years.
-
-2002-05-22 Christopher Faylor <cgf@redhat.com>
-
- * fhandler.h (fhandler_virtual::exists): Eliminate path argument.
- (fhandler_proc::exists): Ditto.
- (fhandler_registry::exists): Ditto.
- (fhandler_process::exists): Ditto.
- * fhandler_proc.cc (fhandler_proc::exists): Ditto. Use built-in name.
- * fhandler_process.cc (fhandler_process::exists): Ditto.
- (fstat): Ditto.
- * fhandler_registry.cc (fhandler_registry::exists): Ditto.
- (fhandler_registry::fstat): Ditto.
- * fhandler_virtual.cc (fhandler_virtual::opendir): Ditto.
- * path.cc (path_conv::check): Ditto. Add debugging.
-
-2002-05-22 Christopher Faylor <cgf@redhat.com>
-
- * syscalls.cc (dup): Always call dup2 for error handling.
-
-2002-05-22 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/types.h: Revert previous patch.
-
-2002-05-22 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/types.h: Define pthread stuff only if _POSIX_THREADS
- is defined.
-
-2002-05-19 Pierre Humblet <pierre.humblet@ieee.org>
-
- * security.cc (open_local_policy): Initialize lsa to
- INVALID_HANDLE_VALUE instead of NULL.
- (get_logon_server_and_user_domain): Test for INVALID_HANDLE_VALUE
- instead of NULL.
- (create_token): Both of the above.
-
-2002-05-18 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_disk_file.cc (fhandler_disk_file::fstat): Make handling of
- nlink consistent for remote files.
-
-2002-05-18 Christopher Faylor <cgf@redhat.com>
-
- * path.cc (path_conv::check): Always set executable bit for executable
- extension.
-
-2002-05-17 Christopher Faylor <cgf@redhat.com>
-
- * fhandler.cc (fhandler_base::lseek): Avoid calling SetFilePointer with
- high order part of 64 bit address on OS's which do not support that
- kind of operation. Otherwise Windows 95 will become confused.
-
-2002-05-16 Pierre Humblet <pierre.humblet@ieee.org>
-
- * fhandler_raw.cc (fhandler_dev_raw::open): Replace set_errno()
- by __seterrno_from_win_error().
- * security.cc (open_local_policy): Ditto.
- (get_lsa_srv_inf): Ditto.
- (get_user_groups): Ditto.
- (get_user_primary_group): Ditto.
- (create_token): Ditto.
- (subauth): Ditto.
-
-2002-05-17 Corinna Vinschen <corinna@vinschen.de>
-
- * times.cc (utimes): Use FILE_WRITE_ATTRIBUTES even on 9x/Me when
- opening file for writing timestamp.
- * wincap.cc: Remove flag has_specific_access_rights.
- * wincap.h: Ditto.
-
-2002-05-13 Pierre Humblet <pierre.humblet@ieee.org>
-
- * syscalls.cc (seteuid): Set default dacl in process token.
- Replace in-line code by call to verify_token().
- (setegid): Reverse change from 2002-01-21. Add call to
- RevertToSelf and set primary group in impersonation token.
- * security.cc (create_token): Store pgrpsid in token security
- descriptor, except if it already appears in my_grps.
- Use sec_acl() in place of get_dacl().
- (verify_token): Create from code in seteuid(), with tighter checks.
- (get_dacl): Deleted.
- (get_group_sidlist): Add argument to indicate if pgrpsid is already
- in the groups.
- * security.h: Define verify_token().
- * autoload.cc: Load GetKernelObjectSecurity().
-
-2002-05-13 Mark Bradshaw <bradshaw@staff.crosswalk.com>
-
- * cygwin.din: Add strlcat and strlcpy.
- * include/cygwin/version.h: Increment API minor version number.
-
-2002-05-09 Pierre Humblet <pierre.humblet@ieee.org>
-
- * shared.cc (__sec_user): Split into sec_acl() and call orig_sid().
- (sec_acl): Create from part of __sec_user(), except creator/owner.
- * security.h: Define sec_acl() and MAX_DACL_LEN.
-
-2002-05-12 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_disk_file.cc (fhandler_disk_file::open): Avoid using
- O_DIROPEN when OS doesn't support it. Return proper errno in that
- case.
-
-2002-05-12 Christopher Faylor <cgf@redhat.com>
-
- * syscalls.cc (_read): Change error to EBADF if attempt to read from a
- non-readable fd.
-
-2002-05-11 Christopher Faylor <cgf@redhat.com>
-
- * fhandler.h (executable_states): For now, make dont_care_if_executable
- equivalent to not_executable.
- * sys/mount.h: Define MOUNT_NOTEXEC.
- * path.h (fs_info): New class.
- (path_conv): Move fs-specific fields to new 'fs' structure.
- (path_conv::update_fs_info): Move to fs_info and rename to just 'update'.
- * path.cc (fs_info::update): Ditto. Return 'true' if successful.
- (fillout_mntent): Add ',noexec' to list of reported options.
-
-2002-05-11 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_virtual.cc (fhandler_virtual::close): Quiet a compiler
- warning.
-
-2002-05-10 Christopher January <chris@atomice.net>
-
- * autoload.cc: Add dynamic load statements for
- 'ZwQueryInformationProcess' and 'ZwQueryVirtualMemory'.
- * fhandler.h: Change type of bufalloc and filesize members of
- fhandler_virtual from int to size_t. Change type of position member
- from __off32_t to __off64_t. Add new fileid member to fhandler_virtual
- class. Make seekdir take an __off64_t argument. Make lseek take an
- __off64_t argument. Add fill_filebuf method to fhandler_virtual. Add
- fill_filebuf method to fhandler_proc. Add fill_filebuf method to
- fhandler_registry. Add fill_filebuf method to fhandler_process. Add
- saved_pid and saved_p members to fhandler_process.
- * fhandler_proc.cc (proc_listing_array): Add 'loadavg', 'meminfo', and 'stat'.
- (proc_fhandlers array): Ditto.
- (fhandler_proc::open): Use fill_filebuf to flesh out the file contents.
- (fhandler_proc::fill_filebuf): New method.
- (fhandler_proc::format_proc_meminfo): Ditto.
- (fhandler_proc::format_proc_stat): Ditto.
- (fhandler_proc::format_proc_uptime): Ditto.
- * fhandler_process.cc (process_listing): Add 'stat' and 'statm'.
- (fhandler_process::fstat): Find the _pinfo structure for the process
- named in the filename. Return ENOENT if the process is no longer
- around. Set the gid and uid fields of the stat structure.
- (fhandler_process::open): Store pid and pointer to _pinfo structure in
- saved_pid and saved_p respectively. Use fill_filebuf to flesh out file
- contents.
- (fhandler_proc::fill_filebuf): New method.
- (format_process_stat): New function.
- (format_process_status): Ditto.
- (format_process_statm): Ditto.
- (get_process_state): Ditto.
- (get_mem_values): Ditto.
- * fhandler_registry.cc (fhandler_registry::seekdir): Change argument
- type from __off32_t to __off64_t.
- (fhandler_registry::fill_filebuf): New method.
- * fhandler_virtual.cc (fhandler_virtual::seekdir): Change argument type
- from __off32_t to __off64_t.
- (fhandler_virtual::lseek): Ditto.
- (fhandler_virtual::fill_filebuf): New method.
- (fhandler_virtual::fhandler_virtual): Initialise fileid to -1.
- * wincap.cc: Set flag has_process_io_counters appropriately.
- * wincap.h: Add flag has_process_io_counters.
-
-2002-05-09 Christopher Faylor <cgf@redhat.com>
-
- * syscalls.cc (_write): Change error to EBADF if attempt to write to a
- non-writeable fd.
-
-2002-05-08 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.h (class cygheap_user): Add member `orig_psid'.
- Add method `orig_sid()'.
- * cygheap.cc (cygheap_user::set_sid): Maintain orig_psid.
-
-2002-04-28 Norbert Schulze <norbert.schulze@web.de>
-
- * localtime.cc (tzsetwall): Use wildabbr if generated timezone name
- length < 3.
-
-2002-05-05 Pierre Humblet <pierre.humblet@ieee.org>
-
- * spawn.cc (spawn_guts): Move call to set_process_privilege()
- to load_registry_hive().
- * registry.cc (load_registry_hive): ditto.
- * fork.cc (fork_parent): Call sec_user_nih() only once.
-
-2002-05-04 Christopher January <chris@atomice.net>
-
- * path.h (path_conv::path_conv): Initialise normalized_path to NULL.
-
-2002-05-03 Christopher Faylor <cgf@redhat.com>
-
- * net.cc (getdomainname): Change second argument of getdomainname to
- size_t.
-
-2002-05-03 Christopher January <chris@atomice.net>
-
- * fhandler_proc.cc (proc_listing): Add '.' and '..' to directory
- listing.
- (fhandler_proc::open): Change use of mode to flags. If the file does
- not exist already, fail with EROFS if O_CREAT flag is set. Change
- EROFS error to EACCES error when writing to a file. Use cmalloc to
- allocate memory for filebuf.
- (fhandler_proc::close): Use cfree to free filebuf.
- (fhandler_proc::get_proc_fhandler): Properly detect attempts to access
- unknown subdir.
- * fhandler_process.cc (process_listing): Add '.' and '..' to directory
- listing.
- (fhandler_process::open): Use cmalloc to allocate memory for filebuf.
- (fhandler_process::close): Use cfree to free filebuf.
- * fhandler_registry.cc (registry_listing): Add . and '..' to directory
- listing.
- (fhandler_registry::open): Move check for open for writing before
- open_key. Use cmalloc to allocate memory for filebuf.
- (fhandler_registry::close): Use cfree to free filebuf.
- (fhandler_registry::telldir): Use lower 16 bits of __d_position as
- position in directory.
- (fhandler_registry::seekdir): Ditto.
- * fhandler_virtual.cc (fhandler_virtual::write): Change EROFS error to
- EACCES error.
- (fhandler_virtual::open): Set the NOHANDLE flag.
- (fhandler_virtual::dup): Add call to fhandler_base::dup. Allocate
- child's filebuf using cmalloc. Copy filebuf from parent to child.
- (fhandler_virtual::close): Use cfree to free filebuf.
- (fhandler_virtual::~fhandler_virtual): Ditto.
- (from Chris Faylor <cgf@redhat.com>).
- (fhandler_registry::readdir): Add support for '.' and '..' files in
- subdirectories of /proc/registry.
- * path.cc (path_conv::check): Do not return ENOENT if a file is not
- found in /proc.
-
-2002-05-02 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_proc.cc (fhandler_proc::fstat): Use fhandler name rather
- than path_conv name.
- (fhandler_proc::open): Ditto.
- * fhandler_process.cc (fhandler_process::fstat): Use fhandler name
- rather than path_conv name.
- (fhandler_process::open): Ditto.
- * fhandler_registry.cc (fhandler_registry::fstat): Use fhandler name
- rather than path_conv name.
- (fhandler_registry::open): Ditto.
- * path.cc (path_conv::check): Don't copy posix path when virtual.
- (mount_info::conv_to_win32_path): Don't zero string when isproc. Just
- derive normal windows path.
-
- * path.h (path_conv::clear_normalized_path): Declare new method.
- * path.cc (path_conv::clear_normalized_path): Define new method.
- * dtable.cc (build_fhandler_from_name): Clear normalized path when
- finished to conserve space.
-
-2002-05-02 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_proc.cc (fhandler_proc::fstat): Prime with information from
- fhandler_base::fstat. Use defines rather than constants for permission
- settings.
-
-2002-04-30 Eric Blake <ebb9@email.byu.edu>
-
- * path.cc (hash_path_name): Improve hash function strength.
-
-2002-05-02 Robert Collins <rbtcollins@hotmail.com>
-
- * thread.cc (__pthread_cond_dowait): Fix a race on signalling from a
- thread woken by the same condition variable it's signalling on. Thanks
- to Michael Beach for the report and test case.
-
-2002-05-02 Christopher Faylor <cgf@redhat.com>
-
- * path.h (pathconv_arg): Add PC_POSIX.
- (path_conv): Add normalized_path field.
- * path.cc (path_conv::~path_conv): New destructor.
- (path_conv::check): Set normalized_path, where appropriate.
- * dtable.cc (build_fhandler_from_name): Use normalized path from
- path_conv.
- * syscalls.cc (chroot): Ditto.
-
- * cygheap.h: Remove path_prefix_p declaration.
-
-2002-02-26 Christopher January <chris@atomice.net>
- Christopher Faylor <cgf@redhat.com> (minor fixups)
-
- * Makefile.in: Add fhandler_proc.o, fhandler_registry.o,
- fhandler_process.o and fhandler_virtual.o.
- * dtable.cc (dtable::build_fhandler): Add entries for FH_PROC,
- FH_REGISTRY and FH_PROCESS. Set unix_name to the normalized posix
- path.
- * fhandler.h: Add constants for FH_PROC, FH_REGISTRY and FH_PROCESS.
- Add class declarations for fhandler_virtual, fhandler_proc,
- fhandler_registry and fhandler_virtual. Update fhandler_union
- accordingly.
- * fhandler_proc.cc: New file. Add implementation for fhandler_proc.
- * fhandler_virtual.cc: New file. Add implementation for
- fhandler_virtual.
- * fhandler_process.cc: New file. Add implementation for
- fhandler_process.
- * fhandler_registry.cc: New file. Add implementation for
- fhandler_registry.
- * path.cc (isproc): New macro.
- (isvirtual_dev): Ditto.
- * path.cc (path_conv::check): Add check for virtual devices.
- * path.cc (mount_info::conv_to_win32_path): Convert paths in /proc to
- empty Win32 paths.
- * path.cc (chdir): Replace check for FH_CYGDRIVE with more generic
- isvirtual_dev macro. Force setting of posix path for virtual
- fhandlers.
- * path.h (path_prefix_p): Declare.
-
-
-Wed May 1 16:06:02 2002 Jason Tishler <jason@tishler.net>
-
- * include/cygwin/types.h: Include <sys/sysmacros.h>.
-
-Wed Apr 17 11:27:04 2002 Jason Tishler <jason@tishler.net>
-
- * security.cc (get_lsa_srv_inf): Prevent extraneous backslashes for
- the NT Domain case.
-
-2002-04-12 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (cygwin_accept): Set socket type for accepted socket.
- (socketpair): Set socket type for both sockets.
-
-2002-04-12 Egor Duda <deo@logos-m.ru>
-
- * fhandler.h (class fhandler_socket): New member to store socket type.
- (fhandler_socket::get_socket_type): Access it.
- (fhandler_socket::set_socket_type): Ditto.
- * net.cc (cygwin_socket): Store socket type.
- (cygwin_connect): Disable security checks for connectionless sockets.
- (cygwin_accept): Ditto.
-
-2002-04-09 Mark Bradshaw <bradshaw@staff.crosswalk.com>
-
- * cygwin.din: Add strptime.
- * include/cygwin/version.h: Increment API version number.
-
-2002-04-09 Corinna Vinschen <corinna@vinschen.de>
-
- * fork.cc (fork_child): Call fixup_mmaps_after_fork() somewhat earlier.
-
-2002-04-09 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::open): Set read-only bit in
- file_attributes when adequate.
-
-2002-03-28 Christopher Faylor <cgf@redhat.com>
-
- * times.cc (gettimeofday): Fix typo in previous patch.
-
-2002-03-27 Wu Yongwei <adah@netstd.com>
-
- * times.cc (gettimeofday): Revert to setting timezone info if tz !=
- NULL.
-
-2002-03-21 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_disk_file.cc (fhandler_disk_file::fstat_helper): Always set
- st_[ug]id to value derived from get_file_attributes.
-
-2002-03-21 Christopher Faylor <cgf@redhat.com>
-
- * spawn.cc (find_exec): Return input if file not found.
-
-2002-03-19 Boris Schaeling <boriss@web.de>
-
- * poll.cc (poll): Add support for invalid descriptors.
-
-2002-03-15 Robert Collins <rbtcollins@hotmail.com>
-
- * fhandler.h (fhandler_termios::lseek): Override lseek.
- * fhandler_termios.cc (fhandler_termios::lseek): Implement this.
-
-2002-03-15 Christopher Faylor <cgf@redhat.com>
-
- * cygserver.cc: Include stdlib.h for exit declaration.
- * threaded_queue.cc: Ditto.
-
-2002-03-15 Christopher Faylor <cgf@redhat.com>
-
- * pinfo.cc (pinfo::init): Use PID_ALLPIDS flag to control when a
- redirected block should be marked as nonexistent.
- (winpids::add): Use PID_ALLPIDS when looking for all pids.
- * cygwin.h (PID_ALLPIDS): New enum element.
-
-2002-03-15 Corinna Vinschen <corinna@vinschen.de>
-
- * glob.c (stat32_to_STAT): New function.
- (g_lstat): Call user space functions always with 32 bit struct stat
- as a workaround.
- (g_stat): Ditto.
- * include/glob.h (struct glob): Don't prototype function pointers
- when compiling Cygwin.
-
-2002-03-14 Christopher Faylor <cgf@redhat.com>
-
- * pinfo.cc (pinfo::init): Properly handle execed process stub when
- PID_NOREDIR is specified.
-
-2002-03-13 Boris Schaeling <boriss@web.de>
-
- * poll.cc (poll): Remove variable open_fds. Rearrange and add code to
- fix settings of revents.
-
-2002-03-13 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (mmap_record::map_map): Return -1 if VirtualProtect fails.
- (list::erase): New method with no argument. Erase latest record
- added.
- (mmap64): Fail if map_map() fails.
-
-2002-03-12 Corinna Vinschen <corinna@vinschen.de>
-
- * sysconf.cc (sysconf): Fix condition.
-
-2002-03-11 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (msync): Check area given by addr and len for being a
- contigeous mmap'd region.
-
-2002-03-11 Corinna Vinschen <corinna@vinschen.de>
-
- * fork.cc (fork_child): Call fixup_mmaps_after_fork() before
- closing parent process handle. Call fixup_mmaps_after_fork()
- with parent process handle as parameter.
- * mmap.cc (mmap_record::access): New method.
- (fixup_mmaps_after_fork): Take process handle as parameter.
- In case of FILE_MAP_COPY access, copy valid memory regions to child.
- * pinfo.h (fixup_mmaps_after_fork): Change prototype accordingly.
-
-2002-03-07 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (NetGetDCName): Add symbol.
- (NetServerEnum): Remove symbol.
- * security.cc (get_lsa_srv_inf): Call NetGetDCName() instead of
- NetServerEnum() since it's faster. Don't call it at all if machine
- is not a domain member.
-
-2002-03-06 Christopher Faylor <cgf@redhat.com>
-
- * path.cc (normalize_posix_path): Avoid runs of '.'s > 2.
-
-2002-03-05 Christopher Faylor <cgf@redhat.com>
-
- * errno.cc: Change EPERM associated text to "Operation not permitted"
- throughout.
-
-2002-03-05 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_socket.cc (fhandler_socket::close): Respond to signals while
- looping, waiting for socket to close. Superstitiously clear last error
- when WSAEWOULDBLOCK.
-
-2002-03-05 Robert Collins <rbtcollins@hotmail.com>
-
- * cygserver_transport_pipes.cc (transport_layer_pipes::transport_layer_pipes):
- Always init - until static members work correctly.
- * shm.cc (shmget): Initialize the security descriptor - thanks Corinna!
- * include/sys/ipc.h: Make the ipc control constants partitioned off from the sem
- control constants.
-
-2002-03-04 Christian Lestrade <christian.lestrade@free.fr>
-
- * include/sys/termios.h: Define _POSIX_VDISABLE. Define CCEQ macro.
- * fhandler_termios.cc: Include <sys/termios.h>.
- (line_edit): Recognize disabled c_cc[] chars. Ignore VDISCARD when
- not in ICANON mode.
-
-2002-03-04 Dmitry Timoshkov <dmitry@baikal.ru>
-
- * syscalls.cc (truncate64): Use ftruncate64 directly to not lose
- upper 32 bits.
-
-2002-03-04 Robert Collins <rbtcollins@hotmail.com>
-
- * cygserver_shm.cc (delete_shmnode): New function.
- (client_request_shm::serve): Use it.
-
-2002-03-04 Robert Collins <rbtcollins@hotmail.com>
-
- * cygserver_shm.cc (client_request_shm::serve): Implement SHM_DETACH.
- * shm.cc (shmdt): Implement.
-
-2002-03-04 Robert Collins <rbtcollins@hotmail.com>
-
- * cygserver_shm.cc: Run indent.
- (deleted_head): New global for storing shm id's pending deletion.
- (client_request_shm::serve): Return ENOSYS for invalid request types.
- Implement SHM_DEL - delete a shm id.
- * cygserver_shm.h (SHM_DEL): New type value.
- * shm.cc (delete_inprocess_shmds): New function, does what it's name implies.
- (shmctl): Implement shm_rmid control type.
-
-2002-03-04 Robert Collins <rbtcollins@hotmail.com>
-
- * Makefile.in (install): Remove install-bin to allow make install to work.
-
-2002-03-03 Robert Collins <rbtcollins@hotmail.com>
-
- * shm.cc (shmat): Prevent a compile error.
- (shmdt): Set errno as this function is incomplete.
-
-2002-02-28 Christopher Faylor <cgf@redhat.com>
-
- * times.cc: Remove if 0'd code. Clean up slightly.
-
-2002-02-28 Robert Collins <rbtcollins@hotmail.com>
-
- * Merge cygwin_daemon into head minus the new shm and ipc exports.
-
-2002-02-28 Robert Collins <rbtcollins@hotmail.com>
-
- * fhandler_tty.cc (fhandler_tty_slave::open): More debugging.
- (fhandler_tty_slave::read): Fix printf type for the handle.
- * tty.cc (tty::common_init): Add a FIXME for security.
-
-2002-01-29 Robert Collins <rbtcollins@hotmail.com>
-
- * Makefile.in (OBJS): Remove duplicate localtime.o.
-
-2002-01-17 Robert Collins <rbtcollins@hotmail.com>
-
- * cygserver.cc (check_and_dup_handle): Consolidate the two variants for
- simplicity.
- Add Some basic debug output.
- (client_request_attach_tty::serve): Use the new debug_printf for clarity.
- Mark the duplicated handles as inheritable - fixup_after_fork() doesn't reopen
- tty's.
-
-2002-01-16 Robert Collins <rbtcollins@hotmail.com>
-
- * cygserver.cc (transport): Correct scope.
- (client_request_attach_tty::serve): Add more debug information.
- Fix erroneous use of transport instead of conn.
- * cygserver_transport_pipes.cc (transport_layer_pipes::close): More debug.
- (transport_layer_pipes::read): Ditto.
- (transport_layer_pipes::write): Ditto.
- (transport_layer_pipes::impersonate_client): Ditto.
-
-Mon Oct 8 7:41:00 2001 Robert Collins <rbtcollins@hotmail.com>
-
- * cygserver.cc (server_request::process): Rename client_request_shm_get to
- client_request_shm.
- * cygserver_process.cc (process_cache::add): Rename to add_task.
- Use process_cleanup instead of process_request.
- (process_cache::remove_process): New method.
- (process::process): Initialize new members.
- (process::~process): New member.
- (process::cleanup): New method.
- (process::add_cleanup_routine): New method.
- (process_request::process): Rename to process_cleanup.
- Call the process object's cleanup method and then delete it.
- (process_process_param::request_loop): Remove the signalling process.
- * cygserver_shm.cc: Globally rename client_request_shm_get to client_request_shm.
- (client_request_shm_get::serve): Handle attach request counting.
- * cygserver_shm.h: Globally rename client_request_shm_get to client_request_shm.
- (class shm_cleanup): New class.
- * shm.cc: Globally rename client_request_shm_get to client_request_shm.
- (client_request_shm::client_request_shm): New constructor for attach requests.
- (shmat): Use it.
- * include/cygwin/cygserver_process.h (class process_request): Rename to
- process_cleanup.
- (class cleanup_routine): New class.
- (class process): New members and methods to allow calling back when the process
- terminates.
-
-Thu Oct 4 14:12:00 2001 Robert Collins <rbtcollins@hotmail.com>
- * cygserver.cc (request_loop): Make static.
- (main): Use new cache constructor syntax.
- Start cache worker threads.
- Cleanup the cache at shutdown.
- * cygserver_process.cc: Run indent.
- (process_cache::process_cache): Add a trigger to use when adding a process.
- (process_cache::process): Move process_entry to process.
- Insert at the end of the list.
- Trigger the request loop when new process's inserted.
- (process_cache::process_requests): Do it.
- (process_cache::add): New method.
- (process_cache::handle_snapshot): New method.
- (process::process): Merge in the process_entry fields.
- (process::handle): Make a stub function.
- (process::exit_code): New method.
- (process_request::process): New method.
- (process_process_param::request_loop): New method.
- * cygserver_shm.cc: New header dependency - threaded_queue.h.
- * threaded_queue.cc (threaded_queue::cleanup): Clearer messages.
- (queue_process_param::stop): Short spinlock on interruptible threads.
- * threaded_queue.h (class threaded_queue): New constructor.
- * include/cygwin/cygserver_process.h (process_request): New class.
- (process_entry): Remove.
- (process): Merge in process_entry.
- (process_cache): Inherit from threaded_queue.
-
-Tue Oct 2 23:24:00 2001 Robert Collins <rbtcollins@hotmail.com>
-
- * cygserver.cc (class server_process_param): Use new constructor syntax.
- * cygserver_process.cc (process_cache::~process_cache): New function.
- * threaded_queue.cc: Define condition debug_printf.
- Run indent.
- (threaded_queue::cleanup): Move queue_process_param guts to a method.
- (threaded_queue::process_requests): Ditto.
- (queue_process_param::queue_process_param): New method.
- (queue_process_param::~queue_process_param): Ditto.
- (queue_process_param::start): Ditto.
- (queue_process_param::stop): Ditto.
- * threaded_queue.h (class queue_process_param): Add support for
- interruptible request loops.
- * cygwin/include/cygwin/cygserver_process.h (class process_cache): Add
- destructor.
-
-Tue Oct 2 23:24:00 2001 Robert Collins <rbtcollins@hotmail.com>
-
- * cygserver_client.cc: New flag allow_daemon to disable the daemon completely.
- (cygserver_request): Check it.
- (cygserver_init): Ditto.
- * environ.cc (parse_thing): Add (no)daemon option.
-
-Tue Oct 2 23:00:00 2001 Robert Collins <rbtcollins@hotmail.com>
-
- * shm.cc: Update to handle include changes from HEAD.
-
-Tue Oct 2 16:06:00 2001 Robert Collins <rbtcollins@hotmail.com>
-
- * Makefile.in: Remove cygserver_shm.o from cygwin1.dll.
- Rename cygserver_shm_outside.o to cygserver_shm.o.
- * cygserver.cc (server_request::process): Use the new client_request
- constructor.
- * cygserver_client.cc: Remove the #ifdef's stubs for the server method
- within cygwin.
- (client_request_attach_tty::client_request_attach_tty): Use the new
- client_request constructor.
- (client_request_shutdown::client_request_shutdown): Ditto.
- (client_request::client_request): Ditto.
- * cygserver_shm.cc (client_request_shm_get::serve): Remove the
- #ifdef'd stub for in-cygwin builds.
- (client_request_shm_get::client_request_shm_get): Use the new
- client_request constructor, and remove the in-cygwin variants.
- * cygserver_shm.h (class client_request_shm_get): #ifndef test the
- serve method - it's only used in cygserver.
- * shm.cc (client_request_shm_get::client_request_shm_get): New function.
- * include/cygwin/cygserver.h (request_header): New constructor.
- (class client_request): Use it.
- New constructor accepting the header size.
- #ifndef test the server method - it's only used within cygserver.
- (client_request_get_version): #ifdef test the server method.
- (client_request_shutdown): Ditto.
- (client_request_attach_tty): Ditto.
-
-Tue Oct 2 9:57:00 2001 Robert Collins <rbtcollins@hotmail.com>
-
- * Makefile.in: add threaded_queue.o to cygserver.exe.
- * cygserver.cc: Include threaded_queue.h
- (class server_request): Inherit from queue_request.
- (class server_process_param): Inherit from queue_process_param.
- (class server_request_queue): Inherit from threaded_queue.
- (request_loop): Adjust for new types.
- (server_request_queue::process_requests): Remove guts to
- threaded_queue::process_requests.
- (server_request::server_request): Adjust for new types.
- (worker_function): Delete.
- (server_request_queue::create_workers): Delete.
- (server_request_queue::cleanup): Delete.
- (server_request_queue::add): Move guts to threaded_queue::add.
- * threaded_queue.cc: New file.
- * threaded_queue.h: New file.
-
-Mon Oct 1 12:38:00 2001 Robert Collins <rbtcollins@hotmail.com>
-
- * cygserver.cc (client_request::serve): New function.
- * cygserver_process.cc: Inlude <pthread.h> for pthread_once.
- (process_cache::process_cache): Initialise a crtiical section for write access.
- (process_cache::process): Use the critical section. Also add missing entries to
- the cache.
- (do_process_init): New function to initalise class process static variables.
- (process::process): Ensure that the process access critical section is
- initialised.
- (process::handle): Close the handle of old process's when they have terminated
- and we are returning the handle for a process with the same pid.
- * cygserver_shm.cc: Run indent.
- Include cygserver_process.h to allow process cache functionality.
- (client_request_shm_get::serve): New parameter for process cache support.
- Use the process cache, not OpenProcess to get a handle to the originating process.
- Fix a handle leak with token_handle.
- * cygserver_shm.h (class client_request_shm_get): Update ::serve for process
- cache support.
- * cygserver_transport_pipes.cc: Redefine debug_printf to be conditional on DEBUG.
- * include/cygwin/cygserver.h: Do not implement client_request::serve in the
- header.
- * include/cygwin/cygserver_process.h (class process_cache): Add a write access
- critical section to prevent races when requests from a multithreaded
- application arrive.
-
-Sun Sep 30 23:41:00 2001 Robert Collins <rbtcollins@hotmail.com>
-
- * Makefile.in: Add cygserver_process.o to cygserver.exe.
- * cygserver.cc: Include signal.h and cygwin_version.h.
- Define debug_printf as a macro.
- Define DEBUG to a value.
- (client_request_attach_tty::serve): Add beginning of process cache support.
- Change from #ifdef DEBUG to work with new DEBUG style.
- (client_request_get_version::serve): Add beginning of process cache support.
- (class server_request): New prototype for support of process cache.
- (class queue_process_param): New class to allow request loop threading.
- (class server_request_queue): Add beginning of process cache support.
- Allow request loop threading.
- (request_loop): Thread function for request loops.
- (server_request_queue::process_requests): Initiator for threaded request loops.
- (client_request_shutdown::serve): Add beginning of process cache support.
- (server_request::server_request): Ditto.
- (server_request::process): Use debug_printf. Add beginning of process cache
- support.
- (server_request_queue::cleanup): Kill off any request loop threads.
- (server_request_queue::add): Add beginning of process cache support.
- (handle_signal): Trigger a shutdown.
- (main): Print out some useful info at startup - version, date time.
- Add process cache support.
- Spawn a separate thread for the transport request loop, thus allowing concurrent
- support for multiple transports.
- * cygserver_client.cc (client_request_get_version::serve): Add process cache
- support.
- (client_request_attach_tty::serve): Add process cache support.
- (client_request_shutdown::serve): Add process cache support.
- * cygsserver_process.cc: New file with the process cache support.
- * cygserver_shm.cc: Redefine debug_printf to allow conditional output.
- * cygwin.din: Export shmdt().
- * shm.cc: Run indent.
- Update FIXME's.
- (shmdt): New function.
- * include/cygwin/cygserver.h (class client_request): Add process cache support.
- (class client_request_get_version): Ditto.
- (class client_request_shutdown): Ditto.
- (class client_request_attach_tty): Ditto.
- * include/cygwin/cygserver_process.h: New header for process cache support.
-
-Sun Sep 30 8:52:00 2001 Robert Collins <rbtcollins@hotmail.com>
-
- * include/cygwin/cygserver_transport.h: Add copyright header.
- * include/cygwin/cygserver_transport_pipes.h: Ditto.
- * include/cygwin/cygserver_transport_sockets.h: Ditto.
-
-Sat Sep 29 20:40:00 2001 Robert Collins <rbtcollins@hotmail.com>
-
- * Makefile.in: Add cygserver_transport_sockets.o to DLL_OFILES.
- Add cygserver_transport_sockets_outside.o to cygserver.exe.
- * cygserver.cc: Include new include files.
- * cygserver_client.cc: Ditto.
- * cygserver_shm.h: No need to include <sys/socket.h> now.
- * cygerver_transport.cc: Include new include files.
- (transport_layer_base::transport_layer_base): Strip back to a stub.
- (transport_layer_base::listen): Ditto.
- (transport_layer_base::accept): Ditto.
- (transport_layer_base::close): Ditto.
- (transport_layer_base::read): Ditto.
- (transport_layer_base::write): Ditto.
- (transport_layer_base::connect): Ditto.
- * cygserver_transport_pipes.cc: Include new header
- "cygwin/cygserver_transport_pipes.h".
- * cygserver_transport_sockets.cc: New file.
- * dcrt0.cc: No need to include <sys/socket.h> now.
- * fhandler_tty.cc: Ditto.
- * tty.cc: Ditto.
- * include/cygwin/cygserver_transport.h: Strip the base class to a stub.
- Remove the cygserver_transport_pipes class.
- * include/cygwin/cygserver_transport_pipes.h: New file.
- * include/cygwin/cygserver_transport_sockets.h: New file.
-
-Tue Sep 25 16:22:00 2001 Robert Collins <rbtcollins@hotmail.com>
-
- * autoload.cc: Add dynamic load statement for 'ImpersonateNamedPipeClient'.
- * Makefile.in: Add new object files, and build instructions for cygserver.exe.
- * cygwin.din: Export ftok, shmat, shmctl and shmget.
- * dcrt0.cc: Additional includes for cygserver support.
- (dll_crt0_1): Initialise the cygserver client.
- * fhandler.h (fhandler_tty): New method cygserver_attach_tty.
- * fhandler_tty.cc: Additional includes for cygserver support.
- (fhandler_tty_slave::open): Attempt to use the cygserver when obtaining
- handles from the parent process. On failure or 9x use the current method.
- (fhandler_tty_slave::cygserver_attach_tty): New function.
- * fork.cc (fork_child): Fixup shm memory mapped areas.
- * pinfo.h: Declare fixup_shms_after_fork().
- * security.h: Declare alloc_sd().
- * tty.cc: Additonal includes to support cygserver.
- (tty::common_init): Don't allow others to open us if the cygserver is running.
- * winsup.h: Declare cygserver_running.
- * cygserver.cc: New file.
- * cygserver_client.cc: New file.
- * cygserver_shm.cc: New file.
- * cygserver_shm.h: New file.
- * cygserver_transport.cc: New file.
- * cygserver_transport_pipes.cc: New file.
- * ipc.cc: New file.
- * shm.cc: New file.
- * include/cygwin/cygserver.h: New file.
- * include/cygwin/cygserver_transport.h: New file.
- * include/sys/ipc.h: New file.
- * include/sys/shm.h: New file.
-
-2002-02-28 Robert Collins <rbtcollins@hotmail.com>
-
- * thread.cc (semaphore::TryWait): Set errno as required by posix 1003.1.
- (__sem_wait): Ditto.
- (__sem_trywait): Ditto.
-
-2002-02-27 Christopher Faylor <cgf@redhat.com>
-
- * include/cygwin/version.h: Bump DLL minor number.
-
-2002-02-23 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din (fstat64): New symbol.
- (ftruncate64): Ditto.
- (lseek64): Ditto.
- (lstat64): Ditto.
- (mmap64): Ditto.
- (seekdir64): Ditto.
- (stat64): Ditto.
- (telldir64): Ditto.
- (truncate64): Ditto.
- * dir.cc (telldir64): New function.
- (telldir): Call telldir64().
- (seekdir64): New function.
- (seekdir): Call seekdir64().
- * fhandler.h: Redefine all methods using __off32_t to use __off64_t.
- * fhandler.cc: Use __off64_t and struct __stat64 throughout.
- * fhandler_clipboard.cc: Ditto.
- * fhandler_disk_file.cc: Ditto.
- * fhandler_dsp.cc: Ditto.
- * fhandler_floppy.cc: Ditto.
- * fhandler_mem.cc: Ditto.
- * fhandler_random.cc: Ditto.
- * fhandler_socket.cc: Ditto.
- * fhandler_tape.cc: Ditto.
- * fhandler_zero.cc: Ditto.
- * pipe.cc: Ditto.
- * glob.c: Ditto, call lstat64 and stat64 in Cygwin.
- * mmap.cc: Use __off64_t throughout.
- (mmap64): New function.
- * sec_acl.cc (acl_worker): Use struct __stat64, call stat64 and lstat64.
- * syscalls.cc (lseek64): New function.
- (stat64_to_stat32): Ditto.
- (fstat64): Ditto.
- (stat64): Ditto.
- (lstat64): Ditto.
- (ftruncate64): Ditto.
- (truncate64): Ditto.
- (_fstat): Call fstat64.
- (_stat): Call stat64.
- (cygwin_lstat): Rename to avoid declaration problem. Call lstat64.
- (stat_worker): Use struct __stat64.
- (access): Ditto.
- (ftruncate): Call ftruncate64.
- (truncate): Call truncate64.
- * wincap.cc: Set flag has_64bit_file_access appropriately.
- * wincap.h: Add flag has_64bit_file_access.
- * winsup.h (ILLEGAL_SEEK): Define as __off64_t.
- (stat_dev): Declare using struct __stat64.
- (stat_worker): Ditto.
- * include/cygwin/stat.h (struct __stat32): Define if compiling Cygwin.
- (struct __stat64): Ditto.
- (struct stat): Revert definition with explicitly sized datatypes.
- Eliminate sized field names.
- * include/cygwin/types.h (blksize_t): New type.
- (__blkcnt32_t): Ditto.
- (__blkcnt64_t): Ditto.
- (blkcnt_t): Ditto.
-
-2002-02-22 Christopher Faylor <cgf@redhat.com>
-
- * sync.h (new_muto): Just accept an argument which denotes the name of
- the muto. Use this argument to construct static storage.
- * cygheap.cc (cygheap_init): Reflect above change.
- * exceptions.cc (events_init): Ditto.
- * malloc.cc (malloc_init): Ditto.
- * path.cc (cwdstuff::init): Ditto.
- * cygheap.h (cwdstuff): Change name of lock element to make it less
- generic.
- * path.cc (cwdstuff::get_hash): Ditto.
- (cwdstuff::get_initial): Ditto.
- (cwdstuff::set): Ditto.
- (cwdstuff::get): Ditto.
- * sigproc.cc (proc_subproc): Ditto.
-
- * debug.cc (lock_debug): Change to method. Use method rather than
- macro throughout.
-
- * tty.h (tty_min::kill_pgrp): Declare new method.
- * fhandler_termios.cc (tty_min::kill_pgrp): New method.
- (fhandler_termios::line_edit): Use new method for killing process.
- * dcrt0.cc (do_exit): Ditto.
-
- * dtable.cc (dtable::get_debugger_info): New method for inheriting
- dtable info from a debugger.
- * tty.cc (tty_init): Attempt to grab file handle info from parent
- debugger, if appropriate.
-
- # dtable.cc (dtable::stdio_init): Make this a method.
- (dtable::init_std_file_from_handle): Don't set fd unless it's not open.
- (dtable::build_fhandler_from_name): Move name setting to
- dtable::build_fhandler.
- (dtable::build_fhandler): Add win32 name parameter.
- * dcrt0.cc (dll_crt0_1): Change to use dtable stdio_init.
- * dtable.h (dtable): Reflect build_fhandler parameter change.
- * mmap.cc (mmap_record::alloc_fh): Don't set name parameter in
- build_fhandler.
- * net.cc (fdsock): Remove set_name call since it is now handled by
- build_fhandler.
-
- * sigproc.cc (proc_subproc): Release muto as early as possible.
-
-2001-02-22 Corinna Vinschen <corinna@vinschen.de>
-
- * smallprint.c (rn): Allow long long values.
- (__small_vsprintf): Add 'D', 'U' and 'X' formats for long long
- parameters.
-
-2002-02-19 Christopher Faylor <cgf@redhat.com>
-
- * fhandler.cc (fhandler_base::puts_readahead): Remove default parameter
- setting. Newer gcc's complain about this.
- (fhandler_base::set_readahead_valid): Ditto.
- * fhandler_dsp.cc (Audio::open): Ditto.
- (fhandler_dev_dsp::open): Ditto.
-
-2002-02-19 Christopher Faylor <cgf@redhat.com>
-
- * fork.cc (fork_parent): Use sec_user_nih to control process/thread
- inheritance/permission.
- * spawn.cc (spawn_guts): Ditto.
- * security.cc (create_token): Initialize token so that it is not tested
- for bogus value later. Use sec_user to control process/thread
- creation.
- * security.h (__sec_user): Rename declaration from sec_user.
- (sec_user_nih): Declare here as inline function wrapper for __sec_user.
- (sec_user): Ditto.
- * sigproc.cc (czombies): Allocate a character array for zombies to
- avoid constructor overhead
- (extremely hackish, I know).
- (cpchildren): Ditto.
- (pchildren): New define.
- (zombies): Ditto.
- (getsem): Use sec_user_nih to control semaphore inheritance/permission.
-
-2002-02-16 Christopher Faylor <cgf@redhat.com>
-
- * times.cc (hires::prime): Restore thread priority on failure
- condition.
-
- * uinfo.cc (uinfo_init): Use more robust method for determining if
- process was invoked from a non-cygwin process.
-
- * sync.h (muto::init): Eliminate "inheritance" parameter.
- (new_muto): Reflect removal of parameter.
- * sync.cc (muto::init): Ditto.
- * cygheap.cc (cygheap_init): Ditto.
- * debug.cc (threadname_init): Ditto.
- * exceptions.cc (events_init): Ditto.
- * malloc.cc (malloc_init): Ditto.
- * path.cc (cwdstuff::init): Ditto.
- * sigproc.cc (sigproc_init): Ditto.
-
- * grp.cc (group_lock): Use different method for locking with static
- member.
- (read_etc_group): REALLY ensure that read lock mutex is released.
- * passwd.cc (passwd_lock): Use different method for locking with static
- member.
- (read_etc_passwd): REALLY ensure that read lock mutex is released.
-
- * shared.cc (sec_user): Correct reversed inheritance test.
-
-2002-02-15 Christopher Faylor <cgf@redhat.com>
-
- * hires.h (hires::usecs): Rename from utime. Accept an argument.
- * strace.cc (strace::microseconds): Use hires class for calculating
- times.
- * sync.h (new_muto): Use NO_COPY explicitly in declaration.
- * times.cc (gettimeofday): Reflect change in usecs argument.
- (hires::usecs): Ditto. Changed name from utime.
- * winsup.h (NO_COPY): Add nocommon attribute to force setting aside
- space for variable.
- * regcomp.c (REQUIRE): Add a void cast to bypass a warning.
-
-2002-02-15 Christopher Faylor <cgf@redhat.com>
-
- * hires.h: New file.
- * times.cc (gettimeofday): Use hires class for calculating current time.
- (hires::prime): New method.
- (hires::utime): Ditto.
-
-2002-02-14 Christopher Faylor <cgf@redhat.com>
-
- * include/sys/cygwin.h (cygwin_getinfo_types): New CW_STRACE_ACTIVE.
- * external.cc (cygwin_internal): Handle CW_STRACE_ACTIVE.
-
-2002-02-14 Christopher Faylor <cgf@redhat.com>
-
- * exceptions.cc (unused_sig_wrapper): Eliminate unused parameter to
- asm.
- * external.cc (cygwin_internal): Change CW_STRACE_ON to
- CW_STRACE_TOGGLE.
- * strace.cc (strace::hello): Toggle strace on and off.
- * sync.cc (muto::init): Rename from constructor.
- * sync.h (muto::new): Delete.
- (muto::delete): Ditto.
- (new_muto): Simplify. Use muto.init for nearly everything.
- * uinfo.cc (uinfo_init): Avoid closing a NULL handle.
- * include/sys/cygwin.h (cygwin_getinfo_types): Rename CW_STRACE_OFF to
- CW_STRACE_TOGGLE. Delete CW_STRACE_OFF.
- * include/sys/strace.h (strace): Add "inited" field.
-
-2001-02-12 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/acl.h: Fix definition of aclent_t.
-
-2002-02-10 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in (DLL_OFILES): Consolidate object files.
-
-2002-02-10 Corinna Vinschen <corinna@vinschen.de>
-
- * child_info.h, cygheap.h, fhandler_clipboard.cc, fhandler_dsp.cc,
- fhandler_floppy.cc, fhandler_mem.cc, fhandler_random.cc,
- fhandler_tape.cc, fhandler_zero.cc, grp.cc, mmap.cc, passwd.cc,
- pinfo.cc, pinfo.h, pipe.cc, sec_acl.cc, sec_helper.cc, security.cc,
- security.h, thread.h, uinfo.cc, include/cygwin/acl.h: Fix copyright.
-
-2002-02-10 Corinna Vinschen <corinna@vinschen.de>
-
- * child_info.h, cygheap.h, dcrt0.cc, dir.cc, fhandler.cc, fhandler.h,
- fhandler_clipboard.cc, fhandler_disk_file.cc, fhandler_dsp.cc,
- fhandler_floppy.cc, fhandler_mem.cc, fhandler_random.cc,
- fhandler_tape.cc, fhandler_zero.cc, grp.cc, mmap.cc, passwd.cc,
- pinfo.cc, pinfo.h, pipe.cc, sec_acl.cc, sec_helper.cc, security.cc,
- security.h, spawn.cc, syscalls.cc, thread.h, uinfo.cc, winsup.h:
- Change usage of uid_t to __uid16_t, gid_t to __gid16_t and
- off_t to __off32_t throughout. Use INVALID_UID, INVALID_GID and
- INVALID_SEEK instead casting -1 to the appropriate type.
- * winsup.h: Define INVALID_UID, INVALID_GID and INVALID_SEEK.
- * include/cygwin/acl.h: Define internal __aclent16_t and __aclent32_t
- types. Don't declare acl functions when compiling Cygwin.
- * include/cygwin/grp.h: Declare getgrgid() and getgrnam() with
- correct types for internal usage.
-
-2002-02-10 Corinna Vinschen <corinna@vinschen.de>
-
- Patch suggested by Pierre A. Humblet <Pierre.Humblet@ieee.org>:
- * uinfo.cc (internal_getlogin): Try evaluating user by SID even if
- ntsec is off.
- (uinfo_init): Set primary group even if ntsec is off.
-
-2002-02-09 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/grp.h: New file.
- * include/cygwin/stat.h: Ditto.
- * include/cygwin/types.h: Add definitions for __off32_t,
- __off64_t, off_t, __uid16_t, __uid32_t, uid_t, __gid16_t,
- __gid32_t and gid_t.
- * include/sys/cygwin.h: Use correct uid and gid types.
-
-2002-02-09 Corinna Vinschen <corinna@vinschen.de>
-
- * dtable.cc (dtable::dup2): Revert previous patch.
- * fhandler.h: Ditto.
- (fhandler_socket::recv): Define new method.
- (fhandler_socket::send): Ditto.
- * fhandler_socket.cc (fhandler_socket::recv): New method.
- (fhandler_socket::send): Ditto.
- (fhandler_socket::read): Call fhandler_socket::recv() now.
- (fhandler_socket::write): Call fhandler_socket::send() now.
- * net.cc (class wsock_event): Move definition to wsock_event.h.
- (fdsock): Revert previous patch.
- (cygwin_recv): Move implementation to fhandler_socket::recv().
- (cygwin_send): Move implementation to fhandler_socket::send().
- * wsock_event.h: New file.
-
-2002-02-06 Alexander Gottwald <Alexander.Gottwald@s1999.tuchemnitz.de>
-
- * net.cc (get_2k_ifconf): Create interface entries for tokenring cards.
-
-2002-02-08 Corinna Vinschen <corinna@vinschen.de>
-
- * dtable.cc (dtable::dup2): Store fd for fhandler_socket.
- * fhandler.h (fhandler_base::set_fd): New virtual method.
- (fhandler_base::get_fd): Ditto.
- (fhandler_socket::set_fd): Ditto.
- (fhandler_socket::get_fd): Ditto.
- * fhandler_socket.cc (fhandler_socket::read): Call cygwin_recv instead
- of native Winsock recv.
- (fhandler_socket::write): Call cygwin_send instead of native Winsock
- send.
- * net.cc (fdsock): Store fd in fhandler_socket.
-
-2002-02-07 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (cygwin_getsockname): Fix handling of NULL sun_path.
-
-2002-01-29 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (getdomainname): Fix registry key for 9x systems, too.
-
-2002-01-29 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (getdomainname): Fix registry key for NT systems.
-
-2002-01-28 Christopher Faylor <cgf@redhat.com>
-
- * external.cc (cygwin_internal): Initialize various internal settings
- if required to allow use of some things from user loaded DLL.
- (CW_STRACE_ON): Add new feature.
- (CW_CYGWIN_PID_TO_WINPID): Ditto.
- * pinfo.cc (set_myself): Call "strace.hello" to initiate possible
- strace session.
- (pinfo::init): Guard against dereferencing uninitialized myself.
- * sigproc.cc (wait_sig): Call strace.hello() when __SIGTRACE "signal"
- received.
- * strace.cc (strace::hello): New method.
- * wincap.cc (wincapc::init): Avoid initializing if already initialized.
- * wincap.h (wincapc::wincapc): New method.
- * include/sys/cygwin.h: Add new CW_ enums. Kludge typedefs of
- {g,u}id_t if required.
- * strace.h (strace::hello): Declare new method.
-
-2002-01-28 Earnie Boyd <earnie@users.sf.net>
-
- * include/sys/strace.h (_STRACE_ON): Define.
- (_STRACE_OFF): Ditto.
-
-2002-01-24 Christopher Faylor <cgf@redhat.com>
-
- * speclib: Ensure that temporary def file is removed.
-
-2002-01-23 Christopher Faylor <cgf@redhat.com>
-
- * speclib: Use rm -f to remove temp file just to quiet any potential
- warnings.
-
-2002-01-23 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (create_token): Use sec_user() to create
- SECURITY_ATTRIBUTES structure for primary token. Use
- MAXIMUM_ALLOWED access rights instead of TOKEN_ALL_ACCESS.
-
-2002-01-23 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (symlink): Fix check for already existing file.
-
-2002-01-21 Christopher Faylor <cgf@redhat.com>
-
- * cygmagic: Suppress error output when figuring out if sum takes an
- option.
-
-2002-01-21 Christopher Faylor <cgf@redhat.com>
-
- * cygmagic: Attempt to figure out if sum takes an option.
-
-2002-01-21 DJ Delorie <dj@redhat.com>
-
- * Makefile.in (libpthread.a): Pass the assembler also.
- (libm.a): Ditto.
- (libc.a): Ditto.
- * speclib: Specify the assembler to dlltool.
-
-2002-01-21 Christopher Faylor <cgf@redhat.com>
-
- * include/cygwin/version.h: Bump DLL minor number.
-
-2002-01-21 Corinna Vinschen <corinna@vinschen.de>
-
- * grp.cc (getgrgid): Don't return default gid entry when ntsec is on.
- * syscalls.cc (setegid): Don't set primary group in process token.
-
-2002-01-21 Christopher Faylor <cgf@redhat.com>
-
- * speclib: Don't use /dev/null as DLL name. Just default to what's
- already in .def file.
-
-2002-01-21 Christopher Faylor <cgf@redhat.com>
-
- * exceptions.cc (sig_handle): Remove last vestiges of SA_NOCLDSTOP code
- which caused SIGCHLD to be ignored.
-
-2002-01-20 Christopher Faylor <cgf@redhat.com>
-
- * include/cygwin/version.h: Bump DLL minor number.
-
-2002-01-20 Christopher Faylor <cgf@redhat.com>
-
- * syscalls.cc (regfree): Make dll_export.
-
-2002-01-20 Christopher Faylor <cgf@redhat.com>
-
- * exceptions.cc (ctrl_c_handler): Convert windows pid to cygwin pid
- when detecting if we should actually handle CTRL-C.
-
-2002-01-19 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in (new-cygwin1.dll): Revert previous change. libsupc++.a
- is only available in libstdc++-v3.
-
-2002-01-19 Christopher Faylor <cgf@redhat.com>
-
- * exceptions.cc (sig_handle_tty_stop): Don't send SIGCHLD if parent
- doesn't want it.
- (sig_handle): Don't check for SA_NOCLDSTOP here. We don't have enough
- information.
-
-2002-01-19 Christopher Faylor <cgf@redhat.com>
-
- * include/cygwin/version.h: Bump DLL minor number.
-
-2002-01-19 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in (new-cygwin1.dll): Just use -lsupc++ for link.
- * sigproc.cc (proc_exists): Change existence criteria.
- * sync.h (new_muto): Add volatile to definition to avoid gcc
- optimization problems.
-
-2002-01-19 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/version.h: Bump API minor version to 51.
-
-2002-01-19 Mark Bradshaw <bradshaw@staff.crosswalk.com>
-
- * cygwin.din: Add recvmsg and sendmsg.
- * net.cc: Add cygwin_recvmsg and cygwin_sendmsg.
- * /usr/include/sys/socket.h: Add recvmsg and sendmsg.
-
-2002-01-19 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (create_token): Close processes token handle as soon
- as it's not used anymore.
-
-2002-01-17 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in: Add fnmatch.o to DLL_OFILES.
- * cygwin.din: Add fnmatch export symbol.
- * fnmatch.c: New file.
- * include/fnmatch.h: Ditto.
- * include/cygwin/version.h: Bump API minor version to 50.
-
-2002-01-15 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (fchdir): Call chdir with full windows path.
-
-2002-01-14 Corinna Vinschen <corinna@vinschen.de>
-
- * dir.cc: Use INVALID_FILE_ATTRIBUTES instead of "(DWORD) -1"
- for file attributes throughout.
- * fhandler.cc: Ditto.
- * fhandler_disk_file.cc: Ditto.
- * path.cc: Ditto.
- * path.h: Ditto.
- * syscalls.cc: Ditto.
- * times.cc (utimes): Use path_conv::isdir() instead of explicit
- GetFileAttributes() call.
-
-2002-01-13 Christopher Faylor <cgf@redhat.com>
-
- * dcrt0.cc (multiple_cygwin_problem): Clarify logic and make
- CYGWIN_MISMATCH_OK more powerful.
-
-2002-01-10 Christopher Faylor <cgf@redhat.com>
-
- * exceptions.cc (sig_handle): Accept a second argument indicating
- whether the signal came from this process or not.
- * sigproc.h: Reflect sig_handle arg change.
- * signal.cc (kill_pgrp): Add sigframe info.
- (abort): New function. Eliminates newlib function of same name.
- * sigproc.cc (wait_sig): Pass "signal from this process" value as arg
- 2.
-
-2002-01-10 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (pathconf): Guard _PC_PATH_MAX branch against invalid
- file parameter.
-
-2002-01-09 Christopher Faylor <cgf@redhat.com>
- Robert Collins <rbtcollins@hotmail.com>
-
- * exceptions.cc (early_stuff_init): Rename from misnamed
- set_console_handler.
- (ctrl_c_handler): Attempt to work around potential signal duplication
- during process startup.
- (sig_handle): Ignore SIGINT when we're just an "exec stub".
- * spawn.cc (spawn_guts): Store pid of spawned process in global for use
- by ctrl_c_handler.
- * dcrt0.cc (dll_crt0_1): Call renamed initialization function.
- * winsup.h: Reflect function name change.
-
-2002-01-08 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (cygwin_accept): Set sun_path for newly connected socket.
-
-2002-01-07 Ralf Habacker <Ralf.Habacker@freenet.de>
-
- * Makefile.in: Add uninstall target.
-
-2002-01-07 Christopher Faylor <cgf@redhat.com>
-
- * sigproc.cc (getsem): Clean up debugging output.
-
-2002-01-07 Christopher Faylor <cgf@redhat.com>
-
- * sigproc.cc (getsem): Set errno when unable to create own semaphore.
- Reorganize to make clearer that error should only come from initial
- creation of process semaphore.
-
-2002-01-06 Christopher Faylor <cgf@redhat.com>
-
- * dtable.cc (dtable::init_std_file_from_handle): Add some defensive
- code to invalid handle case.
-
-2002-01-06 Corinna Vinschen <corinna@vinschen.de>
-
- * ioctl.cc (ioctl): Make third argument optional.
- * include/sys/ioctl.h: Ditto in declaration.
- * dtable.cc (dtable::init_std_file_from_handle): Revert previous
- bogus patch.
- * window.cc (WndProc): Raise SIGURG instead of SIGIO in case of FD_OOB
- message.
-
-2002-01-05 Christopher Faylor <cgf@redhat.com>
-
- * dir.cc (opendir): Guarantee release of alloced fhandler structure on
- error.
-
-2002-01-05 Corinna Vinschen <corinna@vinschen.de>
-
- * exceptions.cc (sig_handle): Set default action for SIGURG to SIG_IGN.
-
-2002-01-05 Corinna Vinschen <corinna@vinschen.de>
-
- * dtable.cc (dtable::init_std_file_from_handle): Don't treat NULL
- handle as errorneous.
-
-2002-01-04 Christopher Faylor <cgf@redhat.com>
-
- * cygmagic: Change logic for equality test.
-
-2002-01-04 Christopher Faylor <cgf@redhat.com>
-
- * dir.cc (opendir): Don't attempt to call sub-opendir if ENOENT.
-
-2002-01-04 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc: Replace usage of AF_UNIX by Posix compliant AF_LOCAL
- throughout.
- (socketpair): Explicitly allow SOCK_STREAM and SOCK_DGRAM socket types
- in families AF_UNIX and AF_LOCAL. Explicitly allow PF_UNSPEC, PF_LOCAL
- and PF_INET protocols. Return error otherwise. Implement datagram
- socketpairs.
-
-2002-01-01 Christopher Faylor <cgf@redhat.com>
-
- * speclib: Remove temp files automatically.
-
-2002-01-01 Corinna Vinschen <corinna@vinschen.de>
- * fhandler.h (fhandler_socket::sun_path): New private member.
- (fhandler_socket::set_sun_path): New method.
- (fhandler_socket::get_sun_path): Ditto.
- * fhandler_socket.cc (fhandler_socket::fhandler_socket): Initialize
- sun_path to NULL.
- (fhandler_socket::~fhandler_socket): Free sun_path if needed.
- (fhandler_socket::set_sun_path): New method.
- * net.cc (cygwin_bind): Set sun_path to path of local socket file.
- (cygwin_getsockname): Add code to return correct sockaddr for unix
- domain sockets.
diff --git a/winsup/cygwin/ChangeLog-2003 b/winsup/cygwin/ChangeLog-2003
deleted file mode 100644
index 6c16579a2..000000000
--- a/winsup/cygwin/ChangeLog-2003
+++ /dev/null
@@ -1,5678 +0,0 @@
-2003-12-31 Christopher Faylor <cgf@redhat.com>
-
- * cygwin.din: Make crt0 functions NOSIGFE.
- * include/cygwin/version.h: Gratuitous comment change.
- * lib/_cygwin_crt0_common.cc: Remove unneeded declaration.
-
-2003-12-29 Christopher Faylor <cgf@redhat.com>
-
- * cygtls.h (_threadinfo::stack): Increase stack size to accommodate
- nested signal handlers. Reorganize to cause potential SEGV on stack
- overflow.
- * sigproc.cc (no_signals_available): Check sendsig value rather than
- relying on obsolete sig_loop_wait.
- (sigproc_terminate): Ditto.
- (proc_can_be_signalled): Check sendsig value even for myself.
- * tlsoffsets.h: Regenerate.
-
-2003-12-29 Christopher Faylor <cgf@redhat.com>
-
- Move open_fhs from fhandler.h to cygheap.h for easier tracking.
- Accommodate this change throughout.
- * dtable.cc (dtable::add_archetype): Use correct count when iterating
- through *active* archetypes.
- * dtable.cc (dtable::fixup_after_exec): Close handle if close_on_exec
- and archetype exists since archetype currently does not set windows
- close-on-exec flag (FIXME).
- * fhandler_tty.cc (fhandler_tty_slave::open): Change debugging output
- slightly.
- (fhandler_tty_slave::close): Ditto.
- (fhandler_tty_slave::fixup_after_fork): Just report on inherited use
- counts since since archetype currently does not set windows
- close-on-exec flag (FIXME).
- * pinfo.cc (_pinfo::set_ctty): Change debugging output slightly.
- * cygheap.cc (cygheap_init): Remove open_fhs accommodation and use
- count reporting.
- * perthread.h (vfork_save::fhctty): New element.
- * perthread.h (vfork_save::open_fhs): New element.
- * fork.cc (vfork): Muck around with ctty and open_fhs stuff, both of
- which are now saved in the vfork_save structure.
-
-2003-12-27 Christopher Faylor <cgf@redhat.com>
-
- * fhandler.h (fhandler_tty_slave::archetype): Make public.
- (report_tty_counts): New macro. Use throughout for reporting tty use
- counts.
- * dtable.cc (dtable::vfork_child_dup): Add debugging output for
- usecount increment. Increment open_fhs if appropriate.
- (dtable::vfork_parent_restore): "Close" artificially bumped ctty.
- (dtable::vfork_child_fixup): Close ctty since it was bumped prior to
- vfork. Save open_fhs around close since the closing of these handles
- has no effect on the console.
- * fhandler_tty.cc (fhandler_tty_slave::open): Reorganize calls to allow
- for easier tracking of usecount modification.
- (fhandler_tty_slave::open): Ditto.
-
-2003-12-26 Christopher Faylor <cgf@redhat.com>
-
- * syscalls.cc (close_all_files): Simplify logic around closing ctty.
-
-2003-12-26 Christopher Faylor <cgf@redhat.com>
-
- * pinfo.cc (_pinfo::set_ctty): *Always* call close on opened ctty since
- it counts as an opened handle.
-
-2003-12-26 Christopher Faylor <cgf@redhat.com>
-
- * fhandler.h (fhandler_tty_master::fixup_after_fork): Remove
- declaration.
- (fhandler_tty_master::fixup_after_exec): Ditto.
- * fhandler_tty.cc (fhandler_tty_master::init): Fix so that children do
- not inherit master tty handles.
- (fhandler_tty_master::fixup_after_fork): Remove, since it was never
- used.
- (fhandler_tty_master::fixup_after_exec): Ditto.
- * pinfo.cc (_pinfo::set_ctty): Increment open_fhs when ctty is set.
- * cygheap.cc (cygheap_init): Ditto.
- * syscalls.cc (setsid): *Always* call close on opened ctty since the
- archetype is associated with the ctty and it counts as an opened
- handle.
- * tty.cc (tty::common_init): Don't protect input/output mutex since it
- confuses subsequent fork/execs when CYGWIN=tty.
-
- * fhandler_process.cc (fhandler_process::fill_filebuf): Properly set
- "file size" for "<defunct>" reporting when filebuf is zero length.
-
-2003-12-26 Christopher Faylor <cgf@redhat.com>
-
- * exceptions.cc (try_to_debug): Fix off-by-one problem when resetting
- environment variable after error_start detected.
-
- * fhandler_tty_slave.cc (fhandler_tty_slave::close): Clarify debug
- message.
- * syscalls.cc (setsid): Don't increment usecount here, since it will be
- automatically decremented on close.
-
-2003-12-26 Christopher Faylor <cgf@redhat.com>
-
- * exceptions.cc (setup_handler): Protect against a race.
-
-2003-12-26 Christopher Faylor <cgf@redhat.com>
-
- * path.cc (mount_item::build_win32): Backslashify paths in non-managed
- case.
-
-2003-12-25 Christopher Faylor <cgf@redhat.com>
-
- * dcrt0.cc (reent_data): Reluctantly resurrect.
- (__cygwin_user_data::impure_ptr): Ditto.
- (_dll_crt0): Reluctantly initialize _impure_ptr here.
- (initialize_main_tls): Eliminate local_clib initialization since it now
- happens in init_thread.
- * init.cc (dll_entry): Reluctantly remove code which set _impure_ptr to
- the main thread's local_clib.
- * perthread.h (reent_data): Remove obsolete declaration.
-
- * sigproc.cc (proc_subproc): Add more debugging output.
- (get_proc_lock): Ditto.
-
- *dcrt0.cc (dll_crt0_1): Allocate argv[0] via malloc since main thread
- could exit.
-
-2003-12-23 Christopher Faylor <cgf@redhat.com>
-
- * fork.cc (fork_child): After a pthread/fork, ensure that impure
- pointer stuff which resides in parent is propagated to child thread.
-
-2003-12-23 Christopher Faylor <cgf@redhat.com>
-
- * exceptions.cc (set_signal_mask): Redefine to not pass by address.
- Report calculated mask in debugging output.
- * sigproc.h (set_signal_mask): Reflect above change in declaration.
-
-2003-12-22 Christopher Faylor <cgf@redhat.com>
-
- * path.cc (mount_item::build_win32): Take path apart before feeding it
- to fnmunge.
-
-2003-12-21 Christopher Faylor <cgf@redhat.com>
-
- Throughout, change use of _reent_winsup()-> to _my_tls.locals.
- instead.
- Throughout, remove obsolete MT_SAFE/_CYG_THREAD_FAILSAFE considerations.
- Througout, add cygtls.h include.
- * Makefile.in (DLL_OFILES): Add cygtls.o. Add some more objects to the
- -fomit-frame-pointer list.
- * acconfig.h: Remove obsolete settings.
- * config.h.in: Ditto.
- * bsdlib.cc: Add cygtls.h include.
- * configure.in: Remove --enable-extra-threadsafe-checking.
- * configure: Regenerate.
- * cygtls.h (_local_storage): New struct renamed from _winsup_t (sic).
- (_threadinfo:local_clib): Add new field.
- (_threadinfo::locals): Ditto.
- (_threadinfo::init_thread): Accept second _reent * argument.
- (_threadinfo::call): Define as regparm.
- (CYGTLS_PADSIZE): Remove unnecessary slop.
- (_getreent): Define as a macro.
- * thread.h: Remove _CYG_THREAD_FAILSAFE and MT_SAFE stuff.
- (_winsup_t): Move to cygtls.h.
- (ResourceLocks::ResourceLocks): Eliminate empty constructor.
- (MTinterface::reents): Eliminate.
- (MTinterface::thread_self_key): Eliminate.
- (MTinterface::MTinterface): Eliminate.
- * dcrt0.cc: Include stdio.h for _impure_ptr initialization.
- (do_global_ctors): Remove run_ctors_p (sic) considerations. Don't call
- atexit here.
- (__main): Initialize destructors for user here.
- (dll_crt0_1): Accept a dummy argument. Don't call init_thread here.
- Don't set _impure_ptr here. Call do_global_ctors after more things
- have been initialized.
- (_dll_crt0): Define zeros buffer as max of needed size of
- CYGTLS_PADSIZE so that it can be used for two purposes while minimizing
- stack usage. Initialize _impure_ptr specifically, for speed. Call
- dll_crt0_1 with buffer argument.
- (cygwin_dll_init): Call dll_crt0_1 with dummy argument.
- * dtable.cc (dtable::find_unused_handle): Remove call to
- AssertResourceOwner.
- * exceptions.cc: Move _threadinfo stuff to new file.
- * cygtls.cc: New file.
- * gentls_offsets: Accommodate increasing complexity of cygtls.h.
- * hires.h (hires_base::~hires_base): Remove.
- * init.cc (dll_entry): Remove setting of reents.
- * thread.cc: Remove syslog.h include.
- (__getreent): Simplify to use _my_tls.
- (_reent_winsup): Delete.
- (AssertResourceOwner): Delete.
- (MTinterface::Init): Remove setting of _clib and _winsup, with all that
- entails.
- (MTinterface::fixup_after_fork): Ditto.
- (pthread::thread_init_wrapper): Ditto. Also remove call to
- set_tls_self_pointer.
- (pthread::set_tls_self_pointer): Eliminate.
- (pthread::get_tls_self_pointer): Just return _my_tls.tid;
- (__reent_t::init_clib): Eliminate.
- * tlsoffsets.h: Regenerate.
-
-2003-12-17 Christopher Faylor <cgf@redhat.com>
-
- * sigproc.cc (proc_subproc): Simplify code to just remove all zombies
- if SIGCHLD == SIG_IGN.
-
-2003-12-17 Christopher Faylor <cgf@redhat.com>
-
- * pinfo.h (pinfo::operator ==): Add a way to check for _pinfo types.
- * sigproc.cc (proc_subproc): Ensure that zombie is removed when SIGCHLD
- == SIG_IGN but still allow wait()ing threads to wake up.
-
-2003-12-16 Christopher Faylor <cgf@redhat.com>
-
- * exceptions.cc (set_signal_mask): Report on input argument rather than
- getsigmask.
-
- * fhandler.h (fhandler_base): Make friends with close_all_files.
- * pinfo.cc (_pinfo::set_ctty): Add more debugging.
- * sigproc.cc (proc_can_be_signalled): Detect state when signal handler
- thread is gone in target process as an EPERM situation. Set errno to
- ESRCH if process doesn't exist.
- (sigproc_terminate): Set sendsig to illegal value when closed.
- (sig_send): Rely on proc_can_be_signalled setting the proper errno.
- * syscalls.cc (close_all_files): Detect when all ttys are closed prior
- to calling close_all_files. The ctty needs to be closed explicitly in
- this case.
-
-2003-12-16 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/ipc.h: Include sys/types.h.
-
-2003-12-15 Thomas Pfaff <tpfaff@gmx.net>
-
- * thread.cc (pthread::init_main_thread): Make sure that the main thread
- has valid handles.
- (pthread::create_cancel_event): Fix error message.
-
-2003-12-14 Christopher Faylor <cgf@redhat.com>
-
- * winsup.h (access_worker): Declare with added fhandler_base parameter.
- * syscalls.cc (access_worker): Accommodate extra fhandler_base
- argument. Use it instead of stat_worker to determine stat information,
- when appropriate.
- * fhandler.cc (fhandler_base::device_access_denied): Pass fhandler
- pointer to access_worker so that it can use the proper method for
- determining stat information.
- * fhandler_disk_file.cc (fhandler_disk_file::opendir): Ditto.
- * path.cc (path_conv::check): Add read-only attribute to /cygdrive
- default settings.
-
-2003-12-14 Christopher Faylor <cgf@redhat.com>
-
- * exceptions.cc (ctrl_c_handler): Remove this thread from the signal
- handler chain.
-
-2003-12-14 Christopher Faylor <cgf@redhat.com>
-
- * cygthread.cc (cygthread::stub): Revert previous change and again
- subsume cygthread::stub2. Just return from function now since
- ExitThread is guaranteed by automatic _threadinfo wrapper. Define as
- per ThreadProc convention.
- (cygthread::stub2): Remove.
- (cygthread::simplestub): Perform similar operations to cygthread::stub.
- (cygthread::simplestub2): Remove.
- * cygthread.h (cygthread::stub): Declare as per ThreadProc convention.
- (cygthread::stub2): Remove declaration.
- (cygthread::simplestub): Declare as per ThreadProc convention.
- (cygthread::simplestub2): Remove declaration.
- * cygtls.h (_threadinfo::call): Define first argument as per ThreadProc
- convention.
- (_threadinfo::call2): Ditto.
- (_tlsbase): Define as char * pointer.
- (_tlstop): New definition.
- (_main_tls): Define here.
- * dcrt0.cc (alloc_stack): Revert previous change which called
- init_thread since information would be overwritten by fork later
- anyway.
- (dll_crt0_1): Use _tlsbase and _tlstop for setting stack bottom, top.
- * exceptions.cc: Move _main_tls declaration to cygtls.h.
- (_threadinfo::call): Define first argument as per ThreadProc
- convention.
- (_threadinfo::call2): Call ExitThread with thread function return
- value.
- (_threadinfo::init_thread): Don't initialize cygtls to zero if input
- arg is NULL.
- * fork.cc (fork_child): Reset _main_tls here. Reinitialize parts of
- _my_tls after copying data from parent.
- * init.cc (threadfunc_fe): New function. Front-end for all threads
- created in cygwin processes.
- (munge_threadfunc): New function.
- (dll_entry): Call munge_threadfunc to force the call of a thread
- wrapper.
- * thread.cc (pthread::thread_init_wrapper): Perform similar operations
- to cygthread::stub.
- (pthread::thread_init_wrapper2): Remove.
- * thread.h (pthread::thread_init_wrapper): Declare as per ThreadProc
- convention.
- (pthread::thread_init_wrapper2): Remove declaration.
- * window.cc (Winmain): Just return from function now since ExitThread
- is guaranteed by automatic _threadinfo wrapper.
-
-2003-12-12 Christopher Faylor <cgf@redhat.com>
-
- * dtable.cc (dtable::delete_archetype): Add debugging.
- (dtable::release): Move archetype deletion here.
- (dtable::vfork_child_dup): Increment ctty usecount to catch later
- close_all_files case in parent/child.
- (dtable::vfork_child_fixup): Avoid using cygheap->foo where this should
- really be using local references. Call close on archetyped handles
- since the handles haven't had the noninherit flag set.
- * fhandler_tty.cc (fhandler_tty_slave::close): Remove archetype
- deletion code. Add defensive error message when DEBUGGING.
- (fhandler_tty_common::set_close_on_exec): Use more robust method for
- checking whether to set handles into noninherit if there is an
- archetype associated with the fhandler.
-
-2003-12-12 Christopher Faylor <cgf@redhat.com>
-
- * dcrt0.cc (alloc_stack): Move _main_tls if stack is relocated.
-
-2003-12-11 Christopher Faylor <cgf@redhat.com>
-
- * miscfuncs.cc (low_priority_sleep): Correct thinko which caused
- SetPriority to be called unnecessarily.
- * thread.cc (pthread::init_main_thread): Call new create_cancel_event
- function.
- (pthread::precreate): Ditto.
- (pthread::postcreate): Remove cancel_event creation.
- (pthread::create_cancel_event): Define new function.
- * thread.h (pthread::create_cancel_event): Declare new function.
-
-2003-12-11 Brian Ford <ford@vss.fsi.com>
-
- * fhandler_serial.cc (fhandler_serial::tcflush): Simplify. Remove
- read polling loop to avoid a hang with streaming devices.
-
-2003-12-11 Christopher Faylor <cgf@redhat.com>
-
- * pinfo.cc (_pinfo::set_ctty): Correct stupid typo.
-
-2003-12-11 Christopher Faylor <cgf@redhat.com>
-
- * cygheap.h (cygheap_types): Add HEAP_ARCHETYPES.
- (init_cheap::ctty): Change to pointer.
- * dtable.h (dtable::find_archetype): Declare new function.
- (dtable::add_archetype): Declare new function.
- (dtable::delete_archetype): Declare new function.
- (dtable::narchetypes): Declare.
- (dtable::farchetypes): Declare.
- (dtable::initial_archetype_size): Declare.
- (dtable::dtable): Initialize new fields.
- (dtable::initial_archetype_size): Declare.
- * dtable.cc (dtable::find_archetype): Define new function.
- (dtable::add_archetype): Define new function.
- (dtable::delete_archetype): Define new function.
- (dtable::initial_archetype_size): Define.
- * fhandler.h (fhandler_base::archetype): Declare.
- (fhandler_base::usecount): Declare.
- * fhandler.cc (fhandler_base::fhandler_base): Initialize new fields.
- * fhandler_console.cc (fhandler_console::get_tty_stuff): Pass NULL to
- third argument of set_ctty.
- * fhandler_tty.cc (fhandler_tty_slave::open): Accommodate new archetype
- method to create only one instance of a tty.
- (fhandler_tty_slave::close): Don't close handles unless archetype
- usecount is zero. When that happens, close archetype too.
- (fhandler_tty_slave::dup): Just copy archetype. Set use count
- appropriately. Set ctty, if appropriate.
- (fhandler_tty_common::dup): Remove slave considerations.
- (fhandler_tty_common::set_close_on_exec): Remove cygheap->ctty
- considerations.
- * pinfo.cc (_pinfo::set_ctty): Accommodate new archetype methods.
- * pinfo.h (_pinfo::set_ctty): Make third argument explicit.
- * syscalls.cc (close_all_files): Decrement controlling tty use count
- before closing all handles to allow controlling tty to be closed.
- Remove previous controlling tty considerations.
-
-2003-12-09 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_tty.cc (fhandler_tty_common::dup): Just copy cygheap->ctty
- to child if duping the current ctty.
- (fhandler_tty_common::close): Move debugging statement earlier in function.
- (fhandler_tty_slave::close): Return success when closing ctty.
- * syscalls.cc (close_all_files): Avoid calling fhandler_tty_slave close
- method so that open_fhs will not be decremented when closing cygheap
- ctty.
- (setsid): Ditto.
- * dcrt0.cc (do_exit): Reorganize to avoid leaving a critical section
- active after vfork.
- * fhandler.h (fhandler_tty_slave::get_unit): Remove regparm parameter
- since it can't work in a virtualized function.
-
-2003-12-08 Christopher Faylor <cgf@redhat.com>
-
- * pinfo.cc (_pinfo::set_ctty): Don't copy over existing ctty if it is
- active.
-
-2003-12-08 Christopher Faylor <cgf@redhat.com>
-
- * thread.cc (pthread::precreate): Delete duplicate setting of
- cancel_event.
-
-2003-12-08 Christopher Faylor <cgf@redhat.com>
-
- * fhandler.h (fhandler_tty_slave::ttyname): Use name from pc since it
- is guaranteed to be accurate.
- * fhandler_tty.cc (fhandler_tty_slave::open): Increment open_fhs
- appropriate when copying ctty.
- (fhandler_tty_slave::close): Remove special case handling for
- exit_state. Use ctty < 0 check instead.
- (fhandler_tty_common::close): Set io_handle to NULL after closing.
- * syscalls.cc (close_all_files): Specifically close cygheap->ctty, if
- appropriate.
-
-2003-12-07 Christopher Faylor <cgf@redhat.com>
-
- * spawn.cc (spawn_guts): Change type back to 'int' after erroneous
- change below.
- * wait.cc (wait4): Move sawsig initialization inside loop.
-
-2003-12-07 Christopher Faylor <cgf@redhat.com>
-
- Change use of BOOL, TRUE, FALSE to bool, true, false, as appropriate,
- throughout.
-
-2003-12-07 Pierre Humblet <pierre.humblet@ieee.org>
-
- * tty.cc (tty::common_init): Remove call to SetKernelObjectSecurity and
- edit some comments.
-
-2003-12-07 Christopher Faylor <cgf@redhat.com>
-
- * cygheap.h (init_cygheap::ctty): Add new element.
- * devices.in (device::parse): Remove special handling for /dev/tty.
- * devices.cc: Regenerate.
- * dtable.cc (build_fh_pc): Don't reset /dev/tty device. Let the device
- opener do that.
- * fhandler_termios.cc (tty_min::set_ctty): Redefine to _pinfo class.
- * fhandler_tty.cc (fhandler_tty_common::set_close_on_exec): Avoid
- setting noninherit flag for ctty.
- * tty.h: Move BOOLs to bools.
- (tty_min::set_ctty): Redeclare to _pinfo class.
- * pinfo.cc (_pinfo::set_ctty): Define new function based on
- tty_min::set_ctty. Change first argument from tty number to tty_min
- class.
- * pinfo.h (_pinfo::set_ctty): Declare.
- * fhandler_console.cc (fhandler_console::get_tty_stuff): Reflect move
- of set_ctty to _pinfo class.
- * fhandler_tty.cc (fhandler_tty_slave::open): Treat FH_TTY specially.
- Use saved cygheap value if it exists. Otherwise convert to real device
- and save on first time open.
- (fhandler_tty_common::dup): Potentially set controlling tty if duping a
- slave tty.
- * syscalls.cc (setsid): Close controlling tty in cygheap.
- * tty.cc: Change some BOOLs to bools.
-
-2003-12-07 Pierre Humblet <pierre.humblet@ieee.org>
-
- * syscalls.cc (locked_append): New.
- (updwtmp): Remove mutex code and call locked_append.
- (pututline): Ditto.
-
-2003-12-06 Christopher Faylor <cgf@redhat.com>
-
- * exceptions.cc (_threadinfo::remove): Avoid a linked list walk.
-
-2003-12-06 Christopher Faylor <cgf@redhat.com>
-
- * cygtls.h (_threadinfo::find_tls): New function.
- * exceptions.cc (_threadinfo::find_tls): Rename from find_tls. Use
- critical section to protect access to linked list.
-
-2003-12-06 Christopher Faylor <cgf@redhat.com>
-
- * exceptions.cc (_threadinfo::remove): Avoid returning without
- unlocking critical section in the (hopefully impossible) case of an
- unrecognized thread.
-
-2003-12-06 Christopher Faylor <cgf@redhat.com>
-
- * cygtls.h: Add more "don't parse this" guards.
- (_threadinfo::init_thread): Rename from 'init'.
- (_threadinfo::init): Declare new function.
- (_threadinfo::protect_linked_list): Declare new critical section.
- * dcrt0.cc (dll_crt0_1): Call init_thread to initialize thread stuff.
- (_dll_crt0): Call _threadinfo::init prior to invoking dll_crt0_1.
- * exceptions.cc (_threadinfo::init_thread): Rename from 'init'.
- (_threadinfo::init): Define new function. Protect linked list
- manipulation with new critical section.
- (_threadinfo::call): Reflect function name change.
- (_threadinfo::remove): Protect linked list manipulation with new
- critical section
- * gentls_offsets: Rework to allow multi-line "don't parse this"
- protection.
- * init.cc (dll_entry): Don't remove threads info stuff here since the
- remove function uses a critical section which can't be used during
- thread creation or destruction.
- * thread.cc (pthread::exit): Call _threadinfo remove function here.
-
-2003-12-05 Christopher Faylor <cgf@redhat.com>
-
- * cygthread.cc (cygthread::stub2): Remove myself from the list of
- threads monitored by signals since this thread will never call raise or
- sigwait.
- (cygthread::simplestub2): Ditto. Set ev here.
- (cygthread::cygthread): Don't set ev here for freerange thread.
-
-2003-12-04 Christopher Faylor <cgf@redhat.com>
-
- * path.cc (slash_unc_prefix_p): Allow '.' as a valid character after
- '\\' in a UNC path.
-
-2003-12-04 Christopher Faylor <cgf@redhat.com>
-
- * exceptions.cc (setup_handler): Remove ill-advised debugging output.
-
-2003-12-04 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/types.h (struct __fcntl64): Fix datatype of l_start.
-
-2003-12-03 Corinna Vinschen <corinna@vinschen.de>
-
- Substitute 0x7fffffff and 0xffffffff by INT32_MAX and UINT32_MAX
- throughout, except in assembler code.
-
-2003-12-03 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::lock): Use UINT32_MAX
- instead of 0xffffffff. Accommodate Win 9x bug in evaluating length
- of area to lock when given length is 0.
-
-2003-12-03 Pierre Humblet <pierre.humblet@ieee.org>
-
- * fhandler_disk_file.cc (fhandler_disk_file::lock): Interchange
- values of off_low and off_high.
-
-2003-12-03 Corinna Vinschen <corinna@vinschen.de>
-
- * fcntl.cc (fcntl_worker): Remove static storage class.
- * flock.cc (flock): Use struct __flock64. Call fcntl_worker.
- Use Cygwin errno functions instead of accessing errno directly.
- * winsup.h: Declare fcntl_worker.
-
-2003-12-03 Corinna Vinschen <corinna@vinschen.de>
-
- * fcntl.cc: Whitespace cleanup.
-
-2003-12-03 Christopher Faylor <cgf@redhat.com>
-
- * cygthread.cc (cygthread::stub): Properly establish _threadinfo
- environment.
- (cygthread::stub2): New function.
- (cygthread::simplestub): Ditto.
- (cygthread::simplestub2): New function.
- * cygthread.h (cygthread::stub2): Declare new function.
- (cygthread::simplestub2): Ditto.
- * cygtls.h (_threadinfo::call): Declare new function.
- (_threadinfo::call2): Ditto.
- * dcrt0.cc (dll_crt0_1): Accommodate new _threadinfo::init which
- doesn't return pointer to tls.
- (_dll_crt0): Remove obsolete DECLARE_TLS_STORAGE.
- (dll_crt0): Ditto.
- * exceptions.cc (_threadinfo::call): New function.
- (_threadinfo::call2): Ditto.
- (_threadinfo::init): Don't return pointer.
- * thread.cc (pthread::thread_init_wrapper): Properly establish
- _threadinfo environment.
- (pthread::thread_init_wrapper2): New function.
- * thread.h (pthread::thread_init_wrapper): Remove noreturn attribute
- (pthread::thread_init_wrapper2): Declare new function.
- * winbase.h: Remove obsolete code.
-
-2003-12-02 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Change the way that -f options are appended to CFLAGS,
- slightly.
-
-2003-12-02 Christopher Faylor <cgf@redhat.com>
-
- * fcntl.cc (_fcntl): Silence a compiler warning.
-
-2003-12-02 Pierre Humblet <pierre.humblet@ieee.org>
-
- * pinfo.cc (pinfo::init): Use shared_name to construct the mapname.
-
-2003-12-01 Thomas Pfaff <tpfaff@gmx.net>
-
- * thread.cc (pthread_rwlock::add_reader): Remove mx parameter for
- List_insert call.
- (pthread::prepare): Ensure race safeness when adding function
- pointers to atfork lists by using List_insert.
- * thread.h (List_insert): Use InterlockedCompareExchangePointer to
- ensure race safeness without using a mutex.
- (List_remove): Use InterlockedCompareExchangePointer to
- ensure race safeness with List_insert.
- (List::insert): Remove mx parameter for List_insert call.
-
-2003-12-01 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (OBSOLETE_FUNCTIONS): Add fcntl.
- (NEW_FUNCTIONS): Add fcntl64.
- * cygwin.din: Export fcntl64. Make fcntl being SIGFE.
- * fcntl.cc (fcntl_worker): New function.
- (fcntl64): New function.
- (_fcntl): Call fcntl_worker. Convert 32 bit flock structure into
- 64 bit flock structure and vice versa.
- * fhandler.cc (fhandler_base::lock): Change 2nd parameter to
- struct __flock64 *.
- * fhandler_disk_file.cc (fhandler_disk_file::lock): Ditto. Rework
- to be 64 bit aware.
- * fhandler.h: Accommodate above method argument changes.
- * include/cygwin/types.h: Add struct __flock32 and __flock64.
- Define struct flock according to setting of __CYGWIN_USE_BIG_TYPES__.
- * include/cygwin/version.h: Bump API minor number.
-
-2003-12-01 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.cc (cygheap_init): Set cygheap->shared_prefix.
- * cygheap.h (struct init_cygheap): Add shared_prefix.
- * shared.cc (shared_name): Use cygheap->shared_prefix.
-
-2003-12-01 Pierre Humblet <pierre.humblet@ieee.org>
-
- * shared.cc (shared_name): Take into account the SE_CREATE_GLOBAL_NAME
- privilege when building the name string.
- (open_shared): Remove the call to OpenFileMapping.
- (shared_info::initialize): Move cygheap initialization to ...
- (memory_init): ... here. Suppress now useless shared_h variable.
- (user_shared_initialize): Make tu a cygpsid.
-
-2003-12-01 Dr. Volker Zell <Dr.Volker.Zell@oracle.com>
-
- * include/tzfile.h: Remove duplicate definition of TM_SUNDAY.
- * localtime.cc: Point TZDIR to the /usr/share/zoneinfo directory used
- by the tzcode package.
-
-2003-11-30 Corinna Vinschen <corinna@vinschen.de>
-
- * flock.cc: Renamed from flock.c.
-
-2003-11-29 Christopher Faylor <cgf@redhat.com>
-
- * pinfo.h: Remove global_sigs declaration.
- * siginfo.h: Move global_sigs declaration here.
- * Makefile.in: Remove duplicate compiler flag.
-
-2003-11-29 Christopher Faylor <cgf@redhat.com>
-
- * exceptions.cc (_threadinfo::pop): Zero *contents* of popped stack
- location rather than the actual stack pointer.
-
-2003-11-29 Nicholas Wourms <nwourms@netscape.net>
-
- * Makefile.in: (DLL_OFILES): Add flock.o.
- * cygwin.din: Export flock.
- * flock.c: New file.
- * include/sys/file.h: Include sys/cdefs.h.
- Add function prototype for flock().
- Add some comments from BSD's header for further clarity.
- (L_SET, L_CURR, L_INCR, L_XTND): Redefine as the macros
- SEEK_SET, SEEK_CUR, SEEK_CUR, & SEEK_END respectively.
- (LOCK_SH,LOCK_EX,LOCK_NB,LOCK_UN): New macros for flock().
- * include/cygwin/version.h: Bump API minor number.
-
-2003-11-28 Christopher Faylor <cgf@redhat.com>
-
- * sigproc.cc (no_signals_available): Fix so that non-zero exit state is
- a true condition rather than errnoneously only checking other states
- when exist_state was zero.
-
-2003-11-28 Christopher Faylor <cgf@redhat.com>
-
- * pinfo.h (_pinfo::getthread2signal): Remove obsolete function.
- * cygtls.h (_threadinfo): Define tid more precisely.
- (_threadinfo::operator HANDLE): Define.
- * exceptions.cc (_threadinfo::interupt_now): Use _threadinfo HANDLE
- operator to derive thread handle.
- (setup_handler): Ditto.
- * sigproc.cc: Reorganize includes. Fix no_signals_available test to
- properly return true when !sig_wait_loop.
-
-2003-11-28 Christopher Faylor <cgf@redhat.com>
-
- * pinfo.h (_pinfo::getsig): Remove obsolete function, here and
- throughout.
- * exceptions.cc: Ditto.
- * fhandler_termios.cc: Ditto.
- * signal.cc: Ditto.
- * sigproc.cc: Ditto.
-
- * Makefile.in: Revert previous change which made a cygwin.din newer
- than a version.h a warning rather than an error.
-
-2003-11-28 Christopher Faylor <cgf@redhat.com>
-
- * cygwin.din: Re-add inexplicably missing semaphore/msg functions.
-
-2003-11-28 Christopher Faylor <cgf@redhat.com>
-
- * gendevices: Issue error when shilka is missing.
-
-2003-11-28 Christopher Faylor <cgf@redhat.com>
-
- * include/cygwin/signal.h: New file.
-
-2003-11-28 Christopher Faylor <cgf@redhat.com>
-
- Eliminate use of sigframe and sigthread throughout.
- * Makefile.in (DLL_OFILES): Add sigfe.o. Remove reliance on cygwin.def
- from cygwin0.dll dependency since dependence on sigfe.o implies that.
- Generate def file on the fly using 'gendef'.
- * configure.in: Don't auto-generate cygwin.def.
- * configure: Regenerate.
- * cygwin.din: Add SIGFE stuff where appropriate.
- * dcrt0.cc (dll_crt0_1): Initialize cygwin tls early in process
- startup. Set _main_tls to address of the main thread's cygwin tls.
- * debug.h: Remove now unneeded WFSO and WFMO declarations.
- * exceptions.cc (_last_thread): Define.
- (set_thread_state_for_signals): New function.
- (reset_thread_exception_for_signals): Ditto.
- (init_thread_for_signals): Ditto.
- (delete_thread_for_signals): Ditto.
- (capture_thread_for_signals): Ditto.
- (handle_exceptions): Set return address explicitly for exceptions prior
- to calling sig_send.
- (interrupt_on_return): Eliminate.
- (setup_handler): Add preliminary implementation for dealing with
- thread-specific signals by querying _main_tls.
- (signal_exit): Use cygthread::main_thread_id instead of mainthread.id.
- (call_signal_handler_now): For now, just handle the main thread.
- * fork.cc (vfork): Save and restore main _my_tls.
- * gendef: New file. Generates def file and sigfe.s file.
- * gentls_offsets: New file. Generates offsets for perl to use in
- sigfe.s.
- * how-signals-work.txt: Mention that info is obsolete.
- * init.cc (dll_entry): Initialize cygwin tls storage here.
- * miscfuncs.cc (low_priority_sleep): Make a C function for easier
- calling from asm.
- * perthread.h (vfork_save::tls): New element.
- * signal.cc (nanosleep): Replace previous use of
- sigframe.call_signal_handler_now with straight call to
- call_signal_handler_now.
- (abort): Ditto.
- * syscalls.cc (readv): Ditto.
- * termios.cc (tcsetattr): Ditto.
- * wait.cc (wait4): Ditto.
- * sigproc.cc (sig_dispatch_pending): Ditto.
- (sig_send): Ditto.
- * sigproc.h: Declare call_signal_handler_now.
- * thread.cc (pthread::thread_init_wrapper): Initialize cygwin tls.
- Remove obsolete and unworking signal stuff.
- * thread.h (verifyable_object::sigs): Eliminate.
- (verifyable_object::sigmask): Eliminate.
- (verifyable_object::sigtodo): Eliminate.
- (verifyable_object::exit): Make attribute noreturn.
- (verifyable_object::thread_init_wrapper): Ditto.
- (pthread_null::exit): Ditto.
- * winbase.h (__stackbase): Always define.
- * winsup.h (low_priority_sleep): Declare as a "C" function.
- * include/cygwin/version.h: Bump API version to reflect sigwait export.
-
- * include/sys/queue.h: Protect SLIST_ENTRY from previous declaration.
-
- * signal.cc (sigwait): Implement.
-
- * select.cc (fhandler_base::ready_for_read): Add debugging output.
-
- * devices.h: Define more device pointers via their storage.
- * devices.in: Don't parse things like /dev/inet/tcp, as they really
- have no meaning.
- * devices.cc: Regenerate.
- * gendevices: Set proper protection for output file.
-
- * cygtls.h: New file.
- * gendef: New file.
- * gentls_offsets: New file.
- * tlsoffsets.h: New file. Autogenerated.
- * config/i386/longjmp.c: Remove. File subsumed by gendef output.
- * config/i386/makefrag: Remove obsolete file.
-
- * fhandler.cc: Remove spurious access_worker declaration.
-
- * spawn.cc (spawnve): Make debugging output more accurate.
-
- * cygwin-gperf: Remove.
- * devices.cc: Remove.
-
-2003-11-28 Christopher Faylor <cgf@redhat.com>
-
- * speclib: Use correct EOF marker. Ensure that directory is actually
- deleted when running under Windows.
-
-2003-11-27 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_disk_file.cc (fhandler_disk_file::readdir): Reorganize to
- avoid inappropriate .lnk extensions with munged filenames under managed
- mode.
-
-2003-11-26 Corinna Vinschen <corinna@vinschen.de>
-
- * sec_helper.cc (set_process_privilege): Rename restore_priv to
- priv_luid.
-
-2003-11-26 Pierre Humblet <pierre.humblet@ieee.org>
-
- * sec_helper.cc (set_process_privilege): Call LookupPrivilegeValue
- before opening the token.
-
-2003-11-26 Corinna Vinschen <corinna@vinschen.de>
-
- * dir.cc (mkdir): Use local security_descriptor. Call
- set_security_attribute appropriately.
- * external.cc (cygwin_internal): Ditto.
- * fhandler.cc (fhandler_base::open): Ditto.
- * fhandler_socket.cc (fhandler_socket::bind): Ditto.
- * path.cc (symlink_worker): Ditto.
- * sec_acl.cc (setacl): Ditto. Call read_sd appropriately.
- (getace): Ditto.
- * sec_helper.cc (security_descriptor::malloc): New method.
- (security_descriptor::realloc): New method.
- (security_descriptor::free): New method.
- * security.cc (read_sd): Get security_descriptor as parameter instead
- of PSECURITY_DESCRIPTOR and a size. Drop unnecessary parameter check.
- Allocate the security_descriptor buffer according to size returned by
- a call to GetFileSecurity. Return buffer size on success.
- (write_sd): Get security_descriptor as parameter instead of
- PSECURITY_DESCRIPTOR and a size.
- (get_nt_attribute): Use local security_descriptor.
- (get_nt_object_attribute): Ditto in case of type == SE_REGISTRY_KEY.
- Allocate security_descriptor buffer according to size returned by
- a call to RegGetKeySecurity.
- (alloc_sd): Make static. Get security_descriptor as parameter instead
- of PSECURITY_DESCRIPTOR and a size. Drop unnecessary parameter check.
- (set_security_attribute): Get security_descriptor as parameter instead
- of PSECURITY_DESCRIPTOR and a size.
- (set_nt_attribute): Use local security_descriptor.
- (check_file_access): Ditto.
- * security.h: Add class security_descriptor.
- (read_sd): Change declaration to get security_descriptor as parameter
- instead of PSECURITY_DESCRIPTOR and a size.
- (write_sd): Ditto.
- (set_security_attribute): Ditto.
- (alloc_sd): Remove declaration.
- * thread.cc (semaphore::semaphore): Use local security_descriptor. Call
- set_security_attribute appropriately.
-
-2003-11-26 Corinna Vinschen <corinna@vinschen.de>
-
- * sec_acl.h (getace): Use FILE_*_BITS as permission mask.
- * security.cc (get_attribute_from_acl): Ditto.
- * security.h (FILE_READ_BITS): Define to match also GENERIC bits.
- (FILE_WRITE_BITS): Ditto.
- (FILE_EXEC_BITS): Ditto.
-
-2003-11-25 Christopher Faylor <cgf@redhat.com>
-
- * thread.cc: Minor whitespace cleanup. Remove some obsolete code.
-
-2003-11-24 Christopher Faylor <cgf@redhat.com>
-
- * dtable.cc (build_fh_name): Set error in dummy fhandler when one is
- noted during path_conv.
- * fhandler.h (fhandler_base::set_error): New method.
-
-2003-11-24 Christopher Faylor <cgf@redhat.com>
-
- * configure.in: Avoid using cygserver unless hosting on cygwin.
-
-2003-11-23 Christopher Faylor <cgf@redhat.com>
-
- * sigproc.cc (sig_send): Correct below checkin. Use
- thisframe.call_signal_handler.
-
-2003-11-23 Christopher Faylor <cgf@redhat.com>
-
- * sigproc.cc (proc_exists): A zombie process does not exist.
- (sig_send): Improve debugging output. Wait for pipe to be created
- before trying to send to it. Call call_signal_handler_now if sending a
- signal to myself.
-
-2003-11-22 Christopher Faylor <cgf@redhat.com>
-
- * dcrt0.cc (check_sanity_and_sync): Correct api major version check so
- that newer dlls will work with older apps but not vice versa.
-
-2003-11-21 Christopher Faylor <cgf@redhat.com>
-
- * sem.cc: Always include signal.h to handle SIGSYS raise when
- !USE_SERVER.
- * shm.cc: Ditto.
-
-2003-11-21 Christopher Faylor <cgf@redhat.com>
-
- * msg.cc: Always include signal.h to handle SIGSYS raise when
- !USE_SERVER.
-
-2003-11-20 Christopher Faylor <cgf@redhat.com>
-
- * configure.in: Make --use-server the default. Remove powerpc target.
- * configure: Regenerate.
-
-2003-11-20 Corinna Vinschen <corinna@vinschen.de>
-
- * msg.cc (msgctl): Raise SIGSYS if call not available.
- (msgget): Ditto.
- (msgrcv): Ditto.
- (msgsnd): Ditto.
- * sem.cc (semctl): Ditto.
- (semget): Ditto.
- (semop): Ditto.
- * shm.cc (shmat): Ditto.
- (shmctl): Ditto.
- (shmget): Ditto.
- (shmdt): Ditto.
-
-2003-11-19 Corinna Vinschen <corinna@vinschen.de>
-
- * cygserver.h (client_request::request_code_t): Add
- CYGSERVER_REQUEST_MSG and CYGSERVER_REQUEST_SEM.
- (admininstrator_group_sid): Add extern declaration.
- * cygserver_ipc.h: Rewrite.
- * cygserver_msg.h: New file.
- * cygserver_sem.h: New file.
- * cygserver_shm.h: More or less rewrite.
- * cygwin.din: Add msgctl, msgget, msgrcv, msgsnd, semctl, semget and
- semop.
- * msg.cc: Rewrite.
- * safe_memory.h: Remove.
- * sem.cc: Rewrite.
- * shm.cc: Rewrite.
- * include/cygwin/ipc.h: Use appropriate guard.
- (struct ipc_perm): Add seq.
- (IPCID_TO_IX): New define from BSD.
- (IPCID_TO_SEQ): Ditto.
- (IXSEQ_TO_IPCID): Ditto.
- (IPC_R): Ditto.
- (IPC_W): Ditto.
- (IPC_M): Ditto.
- * include/cygwin/msg.h: Use appropriate guard. #ifdef _KERNEL all stuff
- not explicitely defined by SUSv3. Use signed types in structs to match
- types used in BSD.
- (msgqnum_t): Define unsigned.
- (msglen_t): Ditto.
- (struct msqid_ds): Add msg_first and msg_last.
- (struct msginfo): Remove msgpool. Add msgssz and msgseg.
- * include/cygwin/sem.h: Use appropriate guard. #ifdef _KERNEL all stuff
- not explicitely defined by SUSv3. Use signed types in structs to match
- types used in BSD.
- (SEM_UNDO): Define appropriately.
- (struct semid_ds): Add sem_base.
- (struct seminfo): Add semmap and semusz.
- (SEM_A): New define from BSD.
- (SEM_R): Ditto.
- (SEM_ALLOC): Ditto.
- (union semun): Define.
- * include/cygwin/shm.h: Use appropriate guard. #ifdef _KERNEL all stuff
- not explicitely defined by SUSv3. Use signed types in structs to match
- types used in BSD.
- (SHMLBA): Define using cygwin_internal(CW_GET_SHMLBA) call.
- (struct shmid_ds): Add shm_internal.
- (struct shm_info): Rename shm_ids to used_ids as in BSD. Add define
- for shm_ids.
- * include/cygwin/sysproto.h: New file.
- * include/cygwin/version.h: Bump API minor number.
- * include/sys/ipc.h: New file.
- * include/sys/msg.h: New file.
- * include/sys/queue.h: New file from BSD.
- * include/sys/sem.h: New file.
- * include/sys/shm.h: New file.
- * include/sys/sysproto.h: New file.
-
-2003-11-19 Corinna Vinschen <corinna@vinschen.de>
-
- * dtable.cc (build_fh_pc): Resurrect accidentally removed
- DEV_CYGDRIVE_MAJOR case.
-
-2003-11-17 Brian Ford <ford@vss.fsi.com>
-
- * fhandler.cc (fhandler_base::lseek): Include high order offset
- bits in return value.
-
-2003-11-17 Corinna Vinschen <corinna@vinschen.de>
-
- * bsdlib.cc (getprogname): New function.
- (setprogname): New funtion.
- * cygwin.din: Export getprogname and setprogname.
- * include/cygwin/version.h: Bumb API version number.
-
-2003-11-15 Christopher Faylor <cgf@redhat.com>
-
- * include/limits.h: Revert unsanctioned changes below.
- * include/cygwin/config.h: Ditto.
- * include/sys/param.h: Ditto.
-
-2003-11-14 Robert Collins <rbtcollins@hotmail.com>
- Ron Parker <rdparker@butlermfg.com>
-
- * bsdlib.cc: Update throughout to use CYG_MAX_PATH rather than MAX_PATH.
- * cygheap.h: Ditto.
- * dcrt0.cc: Ditto.
- * delqueue.cc: Ditto.
- * dlfcn.cc: Ditto.
- * dll_init.cc: Ditto.
- * dll_init.h: Ditto.
- * dtable.cc: Ditto.
- * environ.cc: Ditto.
- * environ.h: Ditto.
- * exceptions.cc: Ditto.
- * external.cc: Ditto.
- * fhandler_disk_file.cc: Ditto.
- * fhandler_proc.cc: Ditto.
- * fhandler_process.cc: Ditto.
- * fhandler_raw.cc: Ditto.
- * fhandler_registry.cc: Ditto.
- * fhandler_socket.cc: Ditto.
- * fhandler_virtual.cc: Ditto.
- * miscfuncs.cc: Ditto.
- * mmap.cc: Ditto.
- * netdb.cc: Ditto.
- * path.cc: Ditto.
- * path.h: Ditto.
- * pinfo.cc: Ditto.
- * pinfo.h: Ditto.
- * pthread.cc: Ditto.
- * registry.cc: Ditto.
- * shared.cc: Ditto.
- * shared_info.h: Ditto.
- * smallprint.c: Ditto.
- * spawn.cc: Ditto.
- * strace.cc: Ditto.
- * syscalls.cc: Ditto.
- * thread.h: Ditto.
- * uinfo.cc: Ditto.
- * winsup.h: Ditto.
- * include/limits.h: Ditto.
- * include/cygwin/config.h: Ditto.
- * include/sys/param.h: Ditto.
-
-2003-11-12 Brian Ford <ford@vss.fsi.com>
-
- * dtable.cc (build_fh_pc): Use DEV_SERIAL_MAJOR to catch all serial
- ports. Remove redundant FH_CYGDRIVE case since it is handled by
- DEV_CYGDRIVE_MAJOR.
-
-2003-11-11 Christopher Faylor <cgf@redhat.com>
- Thomas Pfaff <tpfaff@gmx.net>
-
- * thread.cc (pthread::exit): Cleanup on thread exit.
- (__reent_t::init_clib): Set thread local clib __cleanup var
- appropriately.
-
-2003-11-10 Christopher Faylor <cgf@redhat.com>
-
- * miscfuncs.cc (low_priority_sleep): Make a "C" function.
- * winsup.h (low_priority_sleep): Revert previous change to declaration.
-
-2003-11-10 Corinna Vinschen <corinna@vinschen.de>
-
- * winsup.h (low_priority_sleep): Fix declaration to avoid linker
- warning.
-
-2003-11-10 Thomas Pfaff <tpfaff@gmx.net>
-
- * thread.cc (__reent_t::init_clib): Set thread local clib
- __sdidinit var appropriately.
-
-2003-11-08 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (ftruncate64): Log length as long long.
- (logout): Erase ut_host. Don't write wtmp entry. Return 1 only
- if matching utmp entry has been found, 0 otherwise.
-
-2003-11-08 Corinna Vinschen <corinna@vinschen.de>
-
- * external.cc (cygwin_internal): Add CW_GET_UID_FROM_SID and
- CW_GET_GID_FROM_SID handling.
- * include/cygwin/version.h: Bump API minor number.
- * include/sys/cygwin.h (cygwin_getinfo_types): Add
- CW_GET_UID_FROM_SID and CW_GET_GID_FROM_SID.
-
-2003-11-07 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_disk_file.cc (fhandler_disk_file::opendir): Reorganize to
- handle freeing of memory on error condition.
-
-2003-11-07 Christopher Faylor <cgf@redhat.com>
-
- * cygthread.cc (cygthread::freerange): Set inuse count. Avoid setting
- ev from h as h would be NULL at this point.
- (cygthread::operator new): Issue debugging info when overflowing the
- thread pool.
- (cygthread::cygthread): Set ev from h here after h has been initialized.
-
-2003-11-06 Corinna Vinschen <corinna@vinschen.de>
-
- * bsdlib.cc (_vwarnx): New function.
- (vwarn): Ditto.
- (vwarnx): Ditto.
- (warn): Ditto.
- (warnx): Ditto.
- (verr): Ditto.
- (verrx): Ditto.
- (err): Ditto.
- (errx): Ditto.
- * cygwin.din: Export above functions.
- * include/err.h: New file.
- * include/cygwin/version.h: Bump API minor number.
-
-2003-11-06 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (getshmlba): New function.
- * external.cc (cygwin_internal): Add CW_GET_SHMLBA handling.
- * mmap.cc (mmap64): Call getshmlba to evaluate granularity.
- * winsup.h (getshmlba): Add declaration.
- * include/cygwin/version.h: Bump API minor number.
- * include/sys/cygwin.h (cygwin_getinfo_types): Add CW_GET_SHMLBA.
-
-2003-11-06 Christopher Faylor <cgf@redhat.com>
-
- * winsup.h: Declare access_worker.
-
-2003-11-05 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/types.h: Fix preprocessor guards for vm_offset_t and
- vm_size_t. Add typedef for vm_object_t.
-
-2003-11-05 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_disk_file.cc (fhandler_disk_file::opendir): Detect attempt
- to open a directory which lacks read privileges.
-
-2003-11-04 Corinna Vinschen <corinna@vinschen.de>
-
- * external.cc (cygwin_internal): Add CW_GET_POSIX_SECURITY_ATTRIBUTE
- handling.
- * include/cygwin/version.h: Bump API minor number.
- * include/sys/cygwin.h (cygwin_getinfo_types): Add
- CW_GET_POSIX_SECURITY_ATTRIBUTE.
-
- * exceptions.cc (init_global_security): Move from here...
- * sec_helper.cc (init_global_security): ...to here.
-
-2003-11-04 Christopher Faylor <cgf@redhat.com>
-
- * net.cc (dup_ent): Use IsBadStringPtr for alignment checks. Don't use
- a known bad pointer.
-
-2003-11-03 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (dup_ent): Move Win 95 misalignment recogition before
- trying to evaluate string length.
-
-2003-10-31 Thomas Pfaff <tpfaff@gmx.net>
-
- * thread.cc (pthread::thread_init_wrapper): Initialize exception
- handling.
-
-2003-10-31 Thomas Pfaff <tpfaff@gmx.net>
-
- Rename pthread::running to pthread::valid throughout.
-
- * thread.h: (pthread::suspend_all_except_self): New static method.
- (pthread::resume_all): Ditto.
- (pthread::suspend_except_self): New method.
- (pthread::resume): Ditto.
- * thread.cc (pthread::suspend_except_self): Implement.
- (pthread::resume): Ditto.
-
-2003-10-29 Danny Smith <dannysmith@users.sourceforege.net>
-
- * include/stdint.h: Prevent signed->unsigned conversion for 32 and
- 64 bit min value constants.
-
-2003-10-28 Igor Pechtchanski <pechtcha@cs.nyu.edu>
-
- * path.cc (dot_special_chars): New global variable.
- (special_name): Make files ending in "." special.
- (fnunmunge): Allow encoded ".".
- (mount_item::fnmunge): Handle trailing ".".
-
-2003-10-28 Christopher Faylor <cgf@redhat.com>
-
- * include/stdint.h: Duplicate below effort for rest of *64_*.
-
-2003-10-28 Christopher Faylor <cgf@redhat.com>
-
- * include/stdint.h: Correctly define INT64_MAX.
-
-2003-10-27 Thomas Pfaff <tpfaff@gmx.net>
-
- * thread.h (fast_mutex::init): Initialize lock_counter.
-
-2003-10-27 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (OBSOLETE_FUNCTION): Add tmpfile.
- (NEW_FUNCTIONS): Add _tmpfile64 -> tmpfile translation.
- * cygwin.din: Export _tmpfile64
- * include/cygwin/version.h: Bump api minor number.
-
-2003-10-27 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din: Add sem_close, sem_getvalue, sem_open and sem_timedwait.
- * pthread.cc (+mangle_sem_name): New function.
- (sem_open): Ditto.
- (sem_close: Ditto.
- (sem_timedwait): Ditto.
- (sem_getvalue): Ditto.
- * thread.cc (semaphore::semaphore): Rearrange member initialization.
- Use appropriate security attribute for process shared semaphores.
- (semaphore::semaphore): New constructor for named semaphores.
- (semaphore::~semaphore): Care for semaphore name.
- (semaphore::_post): Accommodate failing ReleaseSemaphore. Use value
- returned by ReleaseSemaphore vor currentvalue.
- (semaphore::_getvalue): New method.
- (semaphore::_timedwait): Ditto.
- (semaphore::_fixup_after_fork): Rearrange. Don't fail for process
- shared semaphores.
- (semaphore::open): New method.
- (semaphore::timedwait): Ditto.
- (semaphore::post): Fix return value. Set errno appropriately.
- (semaphore::getvalue): New method.
- * thread.h (class semaphore): Add prototypes for open, getvalue,
- timedwait, _getvalue, _timedwait. Add prototypes for new constructor.
- Add name member.
- * include/semaphore.h: Add prototypes for sem_open, sem_close,
- sem_timedwait and sem_getvalue.
- include/cygwin/version.h: Bump API minor number.
-
-2003-10-27 Corinna Vinschen <corinna@vinschen.de>
-
- * miscfunc.cc (__check_invalid_read_ptr): New function.
- * winsup.h: Declare.
-
-2003-10-26 Corinna Vinschen <corinna@vinschen.de>
-
- * security.h (cygpsid::debug_print): Avoid compiler warnings.
-
-2003-10-25 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (normalize_posix_path): Test runs of more than two
- dots for being a run of only dots. Let it pass if not.
-
-2003-10-25 Brian Ford <ford@vss.fsi.com>
-
- * fhandler.cc (fhandler_base::ioctl): Handle FIONBIO.
-
-2003-10-24 Thomas Pfaff <tpfaff@gmx.net>
-
- Rename native_mutex to fast_mutex throughout.
- Rename pthread_key::save_key_to_buffer to
- pthread_key::_fixup_before_fork throughout.
- Rename pthread_key::recreate_key_from_buffer to
- pthread_key::_fixup_after_fork throughout.
-
- * thread.cc (native_mutex::init): Remove.
- (native_mutex::lock): Ditto.
- (native_mutex::unlock): Ditto.
- (pthread::push_cleanup_handler): InterlockedExchangePointer
- is not needed here.
- (pthread_rwlock::pthread_rwlock): Initialize readers list mutex.
- (pthread_rwlock::add_reader): Add reader via List_insert.
- (pthread_rwlock::lookup_reader): Lock list while walking through.
- (pthread_cond::init): Locking the init mutex is now void.
- (pthread_rwlock::init): Ditto.
- (pthread_mutex::init): Ditto.
- * thread.h: Include security.h.
- (fast_mutex): New class. Replacement for native_mutex.
- (List_insert): New template function.
- (List_remove): Ditto.
- (List::List): Initialize synchronising mutex.
- (List::fixup_after_fork): New method.
- (List::insert): Add node via List_insert.
- (List::remove): Remove node via List_remove.
- (List::pop): Remove.
- (List::for_each): Lock list while walking through.
- (List::mx_init): New method.
- (pthread_mutex::fixup_after_fork): Fixup mutex list after fork.
- (pthread::fixup_after_fork): Ditto.
- (pthread_conds::fixup_after_fork): Ditto.
- (pthread_rwlock::fixup_after_fork): Ditto.
- (semaphore::fixup_after_fork): Ditto.
- (pthread_rwlock::readers_mx): New member.
-
-2003-10-24 Brian Ford <ford@vss.fsi.com>
-
- * fhandler.cc (fhandler_base::fcntl): Don't clobber O_APPEND when
- both O_NONBLOCK/O_NDELAY are set for F_SETFL.
-
-2003-10-24 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (win32_device_name): Fix comment.
-
-2003-10-23 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_tty.cc (fhandler_tty_slave::ioctl): Properly set return
- value in FIONBIO case.
-
-2003-10-23 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_proc.cc (format_proc_partitions): Use new device code
- to get major and minor device numbers. Fix size evaluation.
-
-2003-10-22 Corinna Vinschen <corinna@vinschen.de>
-
- * external.cc (cygwin_internal): Add CW_GET_ERRNO_FROM_WINERROR
- handling.
- * include/cygwin/version.h: Bump API minor number.
- * include/sys/cygwin.h (cygwin_getinfo_types): Add
- CW_GET_ERRNO_FROM_WINERROR.
-
-2003-10-22 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in: Add $(LIBSERVER) rule.
- * cygserver.h: Moved from include/cygwin to here.
- * cygserver_ipc.h: Moved from ../cygserver to here.
- * cygserver_shm.h: Ditto.
- * cygwin.din: Add shmat, shmctl, shmdt and shmget.
- * fhandler_tty.cc (fhandler_tty_slave::open): Don't warn about handle
- dup'ing if not build with USE_SERVER.
- * shm.cc: Include cygerrno.h unconditionally.
- (shmat): Set errno to ENOSYS and return -1 if not build with
- USE_SERVER.
- (shmctl): Ditto.
- (shmdt): Ditto.
- (shmget): Ditto.
- * woutsup.h: Remove.
- * include/cygwin/cygserver_process.h: Moved to ../cygserver directory.
- * include/cygwin/cygserver_transport.h: Ditto.
- * include/cygwin/cygserver_transport_pipes.h: Ditto.
- * include/cygwin/cygserver_transport_sockets.h: Ditto.
- * include/cygwin/version.h: Bump API minor number.
-
-2003-10-16 Pierre Humblet <pierre.humblet@ieee.org>
-
- * syscalls.cc (seteuid32): Always construct a default DACL including
- the new sid, Admins and SYSTEM and copy it to the new thread token.
- * security.cc (create_token): Use a NULL default DACL in NtCreateToken.
-
-2003-10-14 Micha Nelissen <M.Nelissen@student.tue.nl>
-
- * dcrt0.cc: Remove local variable alternate_charset_active.
- * fhandler.h: Add variable alternate_charset_active, functions
- str_to_con, con_to_str to dev_console structure.
- * fhandler_console.cc (con_to_str): Move function into dev_console
- class.
- (str_to_con): Ditto.
- (fhandler_console::read): Call con_to_str on dev_state.
- (fhandler_console::write_normal): Call str_to_con on dev_state.
- (fhandler_console::char_command): Change active_charset_active
- assignment to be on dev_state.
- * winsup.h: Remove global external variable alternate_charset_active.
-
-2003-10-13 Micha Nelissen <M.Nelissen@student.tue.nl>
-
- * fhandler_console.cc (char_command): Add escape sequence for codepage
- ansi <-> oem switching for ncurses frame drawing capabilities.
- * dcrt0.cc: Add local variable alternate_charset_active.
- * winsup.h: Add global external variable alternate_charset_active.
-
-2003-10-14 Corinna Vinschen <corinna@vinschen.de>
-
- * exceptions.cc (ctrl_c_handler): Don't send SIGHUP on
- CTRL_LOGOFF_EVENT to processes running in invisible Windows Stations.
- * window.cc (has_visible_window_station): New function.
- * winsup.h: Add declaration for has_visible_window_station.
-
-2003-10-10 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_tty.cc (fhandler_tty_slave::open): Don't create a new window
- station if one already exists.
-
-2003-10-10 Christopher Faylor <cgf@redhat.com>
-
- * shared.cc (shared_info::initialize): Remove myself check since
- hMainProc initialization will allow user initialization to work.
-
-2003-10-09 Yitzchak Scott-Thoennes <sthoenna@efn.org>
-
- * include/sys/mman.h (MAP_FAILED): Define as void *.
-
-2003-10-08 Christopher Faylor <cgf@redhat.com>
-
- * dcrt0.cc (hMainProc): Initialize to useful value for use when dll is
- dynamically loaded.
- * shared.cc (shared_info::initialize): Don't initialize user stuff if
- myself doesn't exist.
-
-2003-10-08 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (unlink): Don't even try DELETE_ON_CLOSE technique on
- systems not supporting it.
-
-2003-10-02 Christopher Faylor <cgf@redhat.com>
-
- * dcrt0.cc (dll_crt0_1): Call newlib __sinit routine to ensure that
- stdio buffers are initialized to avoid thread initialization races.
-
-2003-10-01 Christopher Faylor <cgf@redhat.com>
-
- * path.cc (win32_device_name): Only fill out destination buffer when
- it's really a device.
-
-2003-09-30 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Add YA method for generating devices.cc.
- * child_info.h: YA update of another magic number.
- * gendevices: New file.
- * devices.in: New file.
- * devices.cc: Regenerate.
- * devices.shilka: Remove.
- * devices.h: Correctly define device pointers.
- (device): Remove now obsolete fields.
- (device::native): Renamed from device::fmt.
- * dtable.cc (build_fh_dev): Simplify in light of new unit parsing
- scheme.
- (build_fh_pc): Ditto.
- * path.cc (win32_device_name): Ditto.
- * fhandler.h (fhandler_base::get_native_name): Reflect renaming of fmt
- to native.
- * fhandler_tty.cc (fhandler_tty_mster::init): Initialize slave device
- prior to reporting unit.
-
-2003-09-30 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::fstat): Drop FH_FLOPPY case.
-
-2003-09-30 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (class fhandler_dev_raw): Add method fstat.
- * fhandler_raw.cc (fhandler_dev_raw::fstat): New method.
-
-2003-09-30 Corinna Vinschen <corinna@vinschen.de>
-
- * devices.h (enum fh_devices): Remove DEV_RAWDRIVE_MAJOR and
- FH_RAWDRIVE.
- * devices.shilka (dev_rawdrive_storage): Remove.
- (unit_devices): Remove pointer to dev_rawdrive_storage.
- (uniq_devices): Remove rawdrive entry.
- * dtable.cc (build_fh_pc): Remove DEV_RAWDRIVE_MAJOR case.
- * path.cc (win32_device_name): ditto.
-
-2003-09-29 Corinna Vinschen <corinna@vinschen.de>
-
- * syslog.cc (vsyslog): Print debug message if ReportEventA fails.
-
-2003-09-28 Pierre Humblet <pierre.humblet@ieee.org>
-
- * sigproc.cc (proc_subproc): Restrict permissions on ppid_handle.
-
-2003-09-28 Christopher Faylor <cgf@redhat.com>
-
- * devices.shilka (device::parse): Restore check for tty in unit
- handling, but without the previous typo.
- * devices.cc: Regenerate.
- * devices.h (DEV_CYGDRIVE_MAJOR): Change major number to one used by
- linux for "user-mode virtual block device".
-
-2003-09-28 Corinna Vinschen <corinna@vinschen.de>
-
- * devices.h: Move a few device major numbers. Fix typo of FH_UDP.
- * device.shilka: Remove /dev/hd device entries, rename all device_hd*
- to device_sd*.
- (device::parse): Disallow units outside lower and upper bounds.
- * dtable.cc (build_fh_pc): Fix typo of FH_UDP.
- * path.cc (win32_device_name): Fix win32 name creation to match new
- device handling.
-
-2003-09-27 Christopher Faylor <cgf@redhat.com>
-
- * device.shilka (device::parse): Allow units on other than tty.
-
-2003-09-27 Corinna Vinschen <corinna@vinschen.de>
-
- * wincap.cc (wincapc::init): Allow requesting server info for NT4 SP6.
-
-2003-09-27 Christopher Faylor <cgf@redhat.com>
-
- * path.cc (symlink_info::check): Use new introducer for mknod'ed files.
- (parse_device): Ditto.
- * syscalls.cc (mknod_worker): Ditto.
-
-2003-09-27 Christopher Faylor <cgf@redhat.com>
-
- * devices.shilka: Add /dev/sda disk devices.
- * devices.cc: Regenerate.
-
-2003-09-27 Christopher Faylor <cgf@redhat.com>
-
- * cygwin-shilka: Remove '#line directives' or suffer debugging oddities.
- Use -length option so that device prefixes are used.
- * devices.cc: Regenerate.
- * syscalls.cc (ttyname): Add debugging output.
-
-2003-09-26 Vaclav Haisman <V.Haisman@sh.cvut.cz>
-
- * wincap.h (wincaps::is_server): New flag.
- (wincapc::version): Change type to OSVERSIONINFOEX.
- (wincapc::is_server): New function.
- * wincap.cc (wincap_unknown::is_server): New initializer.
- (wincap_95): Ditto.
- (wincap_95osr2): Ditto.
- (wincap_98): Ditto.
- (wincap_me): Ditto.
- (wincap_nt3): Ditto.
- (wincap_nt4): Ditto.
- (wincap_nt4sp4): Ditto.
- (wincap_2000): Ditto.
- (wincap_xp): Ditto.
- (wincapc::init): Adapt to OSVERSIONINFOEX. Add detection of NT server
- systems.
- * sched.cc: Include windows.h and registry.h.
- (sched_rr_get_interval): Re-implement for NT systems.
-
-2003-09-26 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_tty.cc (fhandler_tty_slave::ioctl): Properly set
- ioctl_request event when window size changes. Store failing errno in
- ioctl_retval (needed?).
-
-2003-09-26 Pavel Tsekov <ptsekov@gmx.net>
-
- * fhandler_console.c (fhandler_console::read): Record the state of the
- SHIFT, CTRL and ALT keys at the time of the last keyboard input event.
- (fhandler_console::ioctl): Handle requests to retrieve the keyboard
- modifiers via the TIOCLINUX command.
- * fhandler_tty.c (fhandler_tty_slave::read): Ditto.
- * include/sys/termios.h (TIOCLINUX): New macro definition.
-
-2003-09-26 Pierre Humblet <pierre.humblet@ieee.org>
-
- * pinfo.cc (pinfo::init): Do not give FILE_MAP_WRITE access to Everybody.
- * exceptions.cc (sig_handle_tty_stop): Do not create pinfo parent with
- PID_MAP_WRITE.
- * fhandler_process.cc (fhandler_process::fill_filebuf): Ditto for pinfo p.
- * signal.cc (kill_worker): Ditto for pinfo dest.
-
-2003-09-26 Pierre Humblet <pierre.humblet@ieee.org>
-
- * pinfo.h (pinfo::set_acl): Declare.
- * pinfo.cc (pinfo_fixup_after_fork): Duplicate with no rights.
- (pinfo::set_acl): New.
- * spawn.cc (spawn_guts): Call myself.set_acl.
-
-2003-09-26 Pierre Humblet <pierre.humblet@ieee.org>
-
- * uinfo.cc (cygheap_user::init): Make sure the current user appears
- in the default DACL. Rearrange to decrease the indentation levels.
- Initialize the effec_cygsid directly.
- (internal_getlogin): Do not reinitialize myself->gid. Open the process
- token with the required access.
- * cygheap.h (class cygheap_user): Delete members pid and saved_psid.
- Create members effec_cygsid and saved_cygsid.
- (cygheap_user::set_sid): Define inline.
- (cygheap_user::set_saved_sid): Ditto.
- (cygheap_user::sid): Modify.
- (cygheap_user::saved_sid): Modify.
- * cygheap.cc (cygheap_user::set_sid): Delete.
- (cygheap_user::set_saved_sid): Ditto.
- * sec_helper.cc (sec_acl): Set the correct acl size.
- * autoload.cc (FindFirstFreeAce): Add.
- * security.h: Define ACL_DEFAULT_SIZE.
-
-2003-09-26 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (munmap): Use correct address and length parameters when
- calling fhandler's munmap.
-
-2003-09-26 Corinna Vinschen <corinna@vinschen.de>
-
- * spawn.cc (spawn_guts): Set errno to E2BIG if command line is
- longer than CreateProcess allows (32K).
-
-2003-09-25 Christopher Faylor <cgf@redhat.com>
-
- * dtable.cc (build_fh_name): Return pointer to a 'nodevice' rather than
- a NULL pointer or suffer SEGVs with invalid paths.
-
-2003-09-25 Christopher Faylor <cgf@redhat.com>
-
- * fork.cc (fork_parent): Detect failed pinfo constructor.
- * spawn.cc (spawn_guts): Don't overwrite ENOMEM errno on failed pinfo
- constructor.
-
-2003-09-25 Christopher Faylor <cgf@redhat.com>
-
- * spawn.cc (spawnve): Remove vfork short circuit and let caller deal
- with error return.
-
-2003-09-25 Pierre Humblet <pierre.humblet@ieee.org>
- Christopher Faylor <cgf@redhat.com>
-
- * spawn.cc (spawn_guts): Catch potential error from pinfo.remember.
- Change debug messages to make sense. Pass correct value to pinfo
- constructor. Ensure cleanup after errors. Always reimpersonate after
- errors.
-
-2003-09-25 Christopher Faylor <cgf@redhat.com>
-
- * spawn.cc (spawn_guts): Move system signal handling stuff after
- CreateProcess error check.
-
-2003-09-25 Pierre Humblet <pierre.humblet@ieee.org>
-
- * shared_info.h: Update CURR_USER_MAGIC, CURR_SHARED_MAGIC and
- SHARED_INFO_CB.
- (mount_info::cb): Delete.
- (mount_info::version): Delete.
- (shared_info::delqueue): Delete.
- * Makefile.in: Do magic for USER_MAGIC, class user_info, instead
- of for mount_info.
-
-2003-09-24 Christopher Faylor <cgf@redhat.com>
-
- * include/tzfile.h: Add some missing entries.
-
-2003-09-24 Christopher Faylor <cgf@redhat.com>
-
- * include/paths.h: Add some missing entries.
-
-2003-09-24 Christopher Faylor <cgf@redhat.com>
-
- * shared_info.h (CURR_MOUNT_MAGIC): Fix.
-
- * sigproc.cc (sigpacket): New structure.
- (sig_send): Fill out sigpacket structure to send to signal thread
- rather than racily sending separate packets.
- (wait_sig): Use sigpacket structure to receive info from signal sender.
-
-2003-09-24 Pierre Humblet <pierre.humblet@ieee.org>
-
- * shared_info.h (class user_info): New.
- (cygwin_user_h): New.
- (user_shared): New.
- (enum shared_locations): Replace SH_MOUNT_TABLE by SH_USER_SHARED;
- (mount_table): Change from variable to macro.
- * shared.cc: Use sizeof(user_info) in "offsets".
- (user_shared_initialize): Add "reinit" argument to indicate need
- to reinitialize the mapping. Replace "mount_table" by "user_shared"
- throughout. Call user_shared->mountinfo.init and
- user_shared->delqueue.init.
- (shared_info::initialize): Do not call delqueue.init.
- (memory_init): Add argument to user_shared_initialize.
- * child_info.h (child_info::mount_h): Delete.
- (child_info::user_h): New.
- * sigpproc.cc (init_child_info): Use user_h instead of mount_h.
- * dcrt0.cc (_dll_crt0): Ditto.
- * fhandler_disk_file.cc (fhandler_disk_file::close): Use
- user_shared->delqueue instead of cygwin_shared->delqueue.
- * fhandler_virtual.cc (fhandler_virtual::close): Ditto.
- * syscalls.cc (close_all_files): Ditto.
- (unlink): Ditto.
- (seteuid32): Add argument to user_shared_initialize.
-
-2003-09-24 Christopher Faylor <cgf@redhat.com>
-
- * devices.cc: New file.
- * devices.gperf: New file.
- * devices.shilka: New file.
- * cygwin-gperf: New file.
- * cygwin-shilka: New file.
- * fhandler_fifo.cc: New file.
- * fhandler_nodevice.cc : New file.
-
-2003-09-24 Christopher Faylor <cgf@redhat.com>
-
- Reorganize headers so that path.h precedes fhandler.h throughout.
- Remove device argument and unit arguments from fhandler constructors
- throughout. Remove pc arguments to fhandler functions and use internal
- pc element instead, throughout. Use dev element in pc throughout. Use
- major/minor elements rather than units and device numbers previously in
- fhandler class. Use correct methods for fhandler file names rather
- than directly accessing file name variables, throughout.
- * Makefile.in (DLL_OFILES): Add devices.o, fhandler_fifo.o
- * dcrt0.cc (dll_crt0_1): Call device::init.
- * devices.h: Renumber devices based on more Linux-like major/minor
- numbers. Add more devices. Declare standard device storage.
- (device): Declare struct.
- * dir.cc (opendir): Use new 'build_fh_name' to construct a fhandler_*
- type.
- * dtable.cc (dtable::get_debugger_info): Ditto.
- (cygwin_attach_handle_to_fd): Ditto.
- (dtable::release): Remove special FH_SOCKET case in favor of generic
- "need_fixup_before" test.
- (dtable::init_std_file_from_handle): Use either build_fh_dev or
- build_fh_name to build standard fhandler.
- (dtable::build_fh_name): Renamed from dtable::build_fhandler_from_name.
- Move out of dtable class. Don't accept a path_conv argument. Just
- build it here and pass it to:
- (build_fh_pc): Renamed from dtable::build_fhandler. Move out of dtable
- class. Use intrinsic device type in path_conv to create new fhandler.
- (build_fh_dev): Renamed from dtable::build_fhandler. Move out of
- dtable class. Simplify arguments to just take new 'device' type and a
- name. Just return pointer to fhandler rather than trying to insert
- into dtable.
- (dtable::dup_worker): Accommodate above build_fh name changes.
- (dtable::find_fifo): New (currently broken) function.
- (handle_to_fn): Use strechr for efficiency.
- * dtable.h: Reflect above build_fh name changes and argument
- differences.
- (fhandler_base *&operator []): Return self rather than copy of self.
- * fhandler.cc (fhandler_base::operator =): Use pc element to set
- normalized path.
- (fhandler_base::set_name): Ditto.
- (fhandler_base::raw_read): Use method to access name.
- (fhandler_base::write): Correctly use get_output_handle rather than
- get_handle.
- (handler_base::device_access_denied): New function.
- (fhandler_base::open): Eliminate pc argument and use pc element of
- fhandler_base throughout.
- (fhandler_base::fstat): Detect if device is based in filesystem and use
- fstat_fs to calculate stat, if so.
- (fhandler_base::fhandler_base): Eliminate handling of file names and,
- instead, just free appropriate component from pc.
- (fhandler_base::opendir): Remove path_conv parameter.
- * fhandler.h: Remove all device flags.
- (fhandler_base::pc): New element.
- (fhandler_base::set_name): Change argument to path_conv.
- (fhandler_base::error): New function.
- (fhandler_base::exists): New function.
- (fhandler_base::pc_binmode): New function.
- (fhandler_base::dev): New function.
- (fhandler_base::open_fs): New function.
- (fhandler_base::fstat_fs): New function.
- (fhandler_base::fstat_by_name): New function.
- (fhandler_base::fstat_by_handle): New function.
- (fhandler_base::isfifo): New function.
- (fhandler_base::is_slow): New function.
- (fhandler_base::is_auto_device): New function.
- (fhandler_base::is_fs_special): New function.
- (fhandler_base::device_access_denied): New function.
- (fhandler_base::operator DWORD&): New operator.
- (fhandler_base::get_name): Return normalized path from pc.
- (fhandler_base::get_win32_name): Return windows path from pc.
- (fhandler_base::isdevice): Renamed from is_device.
- (fhandler_base::get_native_name): Return device format.
- (fhandler_fifo): New class.
- (fhandler_nodevice): New class.
- (select_stuff::device_specific): Remove array.
- (select_stuff::device_specific_pipe): New class element.
- (select_stuff::device_specific_socket): New class element.
- (select_stuff::device_specific_serial): New class element.
- (select_stuff::select_stuff): Initialize new elements.
- * fhandler_disk_file.cc (fhandler_base::fstat_by_handle): Move to base
- class from fhandler_disk_file.
- (fhandler_base::fstat_by_name): Ditto.
- (fhandler_base::fstat_by_name): Ditto.
- (fhandler_disk_file::open): Move most functionality into
- fhandler_base::open_fs.
- (fhandler_base::open_fs): New function.
- (fhandler_disk_file::close): Move most functionality into
- fhandler_base::close_fs.
- (fhandler_base::close_fs): New function.
- * fhandler_mem.cc (fhandler_dev_mem::open): Use device name in
- debugging output.
- * fhandler_socket.cc (fhandler_socket::set_connect_secret): Copy
- standard urandom device into appropriate place.
- (fhandler_socket::accept): Reflect change in fdsock return value.
- * fhandler_tty.cc: See "throughouts" above.
- * net.cc: Accommodate fdsock change throughout.
- (fdsock): Return success or failure, accept fd argument and device
- argument.
- * path.cc (symlink_info::major): New element.
- (symlink_info::minor): New element.
- (symlink_info::parse_device): Declare new function.
- (fs_info::update): Accommodate changes in path_conv class.
- (path_conv::fillin): Ditto.
- (path_conv::return_and_clear_normalized_path): Eliminate.
- (path_conv::set_normalized_path): New function.
- (path_conv::path_conv): Set info in dev element. Use path_conv methods
- Check for FH_FS rather than FH_BAD to indicate when to fill in
- filesystem stuff. where appropriate rather than direct access. Use
- set_normalized_path to set normalized path.
- (windows_device_names): Eliminate.
- (get_dev): Ditto.
- (get_raw_device_number): Ditto.
- (get_device_number): Ditto.
- (win32_device_name): Call new device name parser to do most of the
- heavy lifting.
- (mount_info::conv_to_win32_path): Fill in dev field as appropriate.
- (symlink_worker): Handle new device files.
- (symlink_info::check): Ditto.
- (symlink_info::parse_device): Define new function.
- * path.h (executable_states): Move here from fhandler.h.
- (fs_info): Rename variables to *_storage and create methods for
- accessing same.
- (path_conv): Add dev element, remove devn and unit and adjust inline
- methods to accommodate.
- (set_normalized_path): Declare new function.
- * pinfo.cc (_pinfo::commune_recv): Add broken support for handling
- fifos.
- (_pinfo::commune_send): Ditto.
- * pipe.cc (fhandler_pipe::close): check for existence of handle before
- closing it.
- (handler_pipe::create): Rename from make_pipe. Change arguments to
- accept fhandler_pipe array. Accommodate fifos.
- (pipe): Rework to deal with fhandler_pipe::create changes.
- (_pipe): Ditto.
- * select.cc: Use individual device_specific types throughout rather
- than indexing with obsolete device number.
- (set_bits): Use is_socket call rather than checking device number.
- * shared_info.h (CURR_MOUNT_MAGIC): Update.
- (conv_to_win32_path): Reflect addition of device argument.
- * syscalls.cc (mknod_worker): New function.
- (open): Use build_fh_name to build fhandler.
- (chown_worker): Detect if this is an 'auto' device rather than an
- on-filesystem device and handle appropriately.
- (chmod_device): New function.
- (chmod): Detect if this is an 'auto' device rather than an
- on-filesystem device and handle appropriately. Use chmod_device to set
- mode of in-filesystem devices.
- (stat_worker): Eliminate path_conv argument. Call build_fh_name to
- construct fhandler. Use fh->error() rather than pc->error to detect
- errors in fhandler construction.
- (access_worker): New function pulled from access. Accommodate
- in-filesystem devices.
- (access): Use access_worker.
- (fpathconf): Detect if this is an 'auto' device rather than an
- on-filesystem device and handle appropriately.
- (mknod_worker): New function.
- (mknod32): New function.
- (chroot): Free normalized path -- assuming it was actually cmalloced.
- * tty.cc (create_tty_master): Tweak for new device class.
- (tty::common_init): Ditto.
- * winsup.h (stat_worker): Remove.
- (symlink_worker): Declare.
-
- * exceptions.cc (set_process_mask): Just call sig_dispatch_pending and
- don't worry about pending_signals since sig_dispatch_pending should
- always do the right thing now.
- (sig_handle): Reorganize SIGCONT handling to more closely conform to
- SUSv3.
- * pinfo.h: Move __SIG enum to sigproc.h.
- (PICOM_FIFO): New enum element.
- (_pinfo): Remove 'thread2signal' stuff throughout class.
- (_pinfo::commune_send): Make varargs.
- (_pinfo::sigtodo): Eliminate.
- (_pinfo::thread2signal): Ditto.
- * signal.cc (kill_worker): Eliminate call to setthread2signal.
- * sigproc.cc (local_sigtodo): Eliminate.
- (getlocal_sigtodo): Ditto.
- (sigelem): New class.
- (pending_signals): New class.
- (sigqueue): New variable, start of sigqueue linked list.
- (sigcatch_nonmain): Eliminate.
- (sigcatch_main): Eliminate.
- (sigcatch_nosync): Eliminate.
- (sigcomplete_nonmain): Eliminate.
- (pending_signals): Eliminate.
- (sig_clear): Call signal thread to clear pending signals, unless
- already in signal thread.
- (sigpending): Call signal thread to get pending signals.
- (sig_dispatch_pending): Eliminate use of pending_signals and just check
- sigqueue.
- (sigproc_terminate): Eliminate all of the obsolete semaphore stuff.
- Close signal pipe handle.
- (sig_send): Eliminate all of the obsolete semaphore stuff and use pipe
- to send signals.
- (getevent): Eliminate.
- (pending_signals::add): New function.
- (pending_signals::del): New function.
- (pending_signals::next): New function.
- (wait_sig): Eliminate all of the obsolete semaphore stuff. Use pipe to
- communicate and maintain a linked list of signals.
- * sigproc.h: Move __SIG defines here. Add __SIGPENDING.
- (sig_dispatch_pending): Remove "C" specifier.
- (sig_handle): Accept a mask argument.
- * thread.cc: Remove signal handling considerations throughout.
-
-2003-09-22 Christopher Faylor <cgf@redhat.com>
-
- * dcrt0.cc (do_exit): Eliminate "C" linkage. Call events_terminate
- early.
- (exit_states): Move out of source file into header file.
- * winsup.h: Move exit_states here. Remove "C" linkage from do_exit
- declaration.
- * debug.cc (lock_debug): Remove explicit (and incorrect) external for
- exit_state.
- * sigproc.cc (sig_dispatch_pending): Don't flush signals if exiting.
-
-2003-09-20 Christopher Faylor <cgf@redhat.com>
-
- * spawn.cc (pthread_cleanup): New struct.
- (do_cleanup): New function.
- (spawn_guts): Initialize struct for pthread_cleanup handling to ensure
- proper restoration of signals if/when thread is cancelled. Restore
- settings using pthread_cancel_pop.
-
-2003-09-19 Christopher Faylor <cgf@redhat.com>
-
- * include/cygwin/version.h: Bump DLL minor number to 6.
-
-2003-09-19 Christopher Faylor <cgf@redhat.com>
-
- * thread.h (__reent_t::init_clib): Declare new function.
- * thread.cc (__reent_t::init_clib): Define new function.
- (pthread::thread_init_wrapper): Use __reent_t::init_clib to init local
- clib storage and set std{in,out,err} appropriately.
-
-2003-09-19 Christopher Faylor <cgf@redhat.com>
-
- * syscalls.cc (system): Strip signal considerations from here so that
- they are not inherited by a child process.
- * spawn.cc (spawn_guts): Handle system() signal stuff here.
- * winsup.h (_P_SYSTEM): Define.
-
-2003-09-18 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_tty.cc (fhandler_pty_master::process_slave_output):
- Handle buf == NULL as flushing the buffer.
- (fhandler_tty_slave::read): Handle ptr == NULL as flushing the buffer.
- (fhandler_tty_slave::tcflush): Implement input queue flushing by
- calling read with NULL buffer.
- (fhandler_pty_master::tcflush): Ditto, calling process_slave_output.
- * termios.cc (tcflush): Check for legal `queue' value. Return
- EINVAL otherwise.
-
-2003-09-16 Brian Ford <ford@vss.fsi.com>
-
- * syscalls.cc (gethostid): Add lpFreeBytesAvailable argument to
- GetDiskFreeSpaceEx call since NT4 requires it.
-
-2003-09-16 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_process.cc (fhandler_process::fill_filebuf): Open pinfo with
- PID_MAP_RW.
- * sigproc.cc (talktome): Ditto for winpids.
-
-2003-09-16 Christopher Faylor <cgf@redhat.com>
-
- * pinfo.h (winpids::pid_access): New element.
- (winpids::winpids): Rejigger to set pinfo_access.
- * pinfo.cc (winpids::add): Try to open shared memory region with
- supplied pinfo_access first, then default to readonly.
- * fhandler_termios.cc (tty_min::kill_pgrp): When getting list of pids
- to work with, suggest opening with PID_MAP_RW.
- * signal.cc (kill_pgrp): Ditto.
- * sigproc.cc (sig_send): Perform a write check on todo prior to
- attempting to increment it. Return EACCES if we can't write to it.
-
-2003-09-16 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.cc (cygheap_user::set_saved_sid): Rename from set_orig_sid.
- * cygheap.h (class cygheap_user): Rename orig_psid, orig_uid and
- orig_gid to saved_psid, saved_uid and saved_gid respectively.
- Rename methods orig_sid and set_orig_sid to saved_sid and set_saved_sid
- respectively.
- * sec_helper.cc (sec_acl): Accommodate above changes.
- * spawn.cc (spawn_guts): Ditto.
- * uinfo.cc (uinfo_init): Ditto.
-
-2003-09-15 Christopher Faylor <cgf@redhat.com>
-
- * getopt.c (opterr): Reinstate initialization.
- (optind): Ditto.
- (optopt): Ditto.
- * pinfo.cc: Include cygheap.h or suffer compile error.
- * shared.h: Reset magic number.
-
-2003-09-15 Christopher Faylor <cgf@redhat.com>
-
- * exceptions.cc (sig_handle_tty_stop): Fix boneheaded mistake by using
- correct check for parent state rather than inverted check.
-
-2003-09-15 Pierre Humblet <pierre.humblet@ieee.org>
-
- * security.h (__sec_user): Add "access2" argument.
- (sec_acl): Add "original" and "access2" arguments.
- (sec_user): Add "sid2" and "access2" argument. Remove dependence on
- allow_ntsec.
- (sec_user_nih): Ditto.
- * sec_helper.cc (__sec_user): Add "has_security" test.
- Call sec_acl with new arguments, letting it handle original_sid.
- (sec_acl): Add "original" and "access2" arguments. Handle original_sid
- depending on flag but avoiding duplicates. Use "access2" for sid2.
- * pinfo.cc (pinfo::init): Use security attributes created by sec_user
- when creating the mapping.
- * security.cc (create_token): Adjust arguments in call to sec_acl.
- Call sec_user instead of __sec_user.
- * syscall.cc (seteuid32): Adjust arguments in call to sec_acl. Remove
- now unnecessary test. Remove useless conversions to psid.
- * dcrt0.cc (dll_crt0_1): Call cygsid::init before pinfo_init.
-
-2003-09-13 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Make malloc_wrapper -fomit-frame-pointer.
-
- * cygwin.din: Remove extraneous mallinfo definition.
-
- * dcrt0.cc (quoted): Use strechr for efficiency.
-
- * fhandler.cc (fhandler_base::write): Correctly use get_output_handle
- rather than get_handle.
- (fhandler_base::lseek): Use method for accessing name in debug output.
-
-2003-09-13 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_disk_file.cc (path_conv::ndisk_links): Fix potential
- off-by-one problem when first file in a directory is a directory.
-
-2003-09-13 Pierre Humblet <pierre.humblet@ieee.org>
-
- * include/sys/cygwin.h: Rename PID_UNUSED to PID_MAP_RW.
- * pinfo.cc (pinfo_init): Initialize myself->gid.
- (pinfo::init): Create the "access" variable, set it appropriately and
- use it to specify the requested access.
- * exceptions.cc (sig_handle_tty_stop): Add PID_MAP_RW in pinfo parent.
- * signal.cc (kill_worker): Ditto for pinfo dest.
- * syscalls.cc (setpgid): Ditto for pinfo p.
-
-2003-09-13 Christopher Faylor <cgf@redhat.com>
-
- * include/cygwin/version.h: Bump DLL minor number to 5.
-
-2003-09-12 Christopher Faylor <cgf@redhat.com>
-
- * thread.cc (MTinterface::fixup_after_fork): Remove code which
- potentially overwrote _impure pointer with contents of thread which
- invoked fork since this eliminates important information like the
- pointer to the atexit queue.
-
-2003-09-12 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_disk_file.cc (path_conv::ndisk_links): Fix problem where
- search characters overwrote the path instead of being tacked on the
- end.
-
-2003-09-12 Christopher Faylor <cgf@redhat.com>
-
- * dcrt0.cc (_dll_crt0): Accommodate breaking apart of early_stuff_init.
- * exceptions.cc (early_stuff_init): Delete.
- (init_console_handler): New function - top half of early_stuff_init.
- (init_global_security): New function - bottom half of early_stuff_init.
- (sig_handle): Avoid special hExeced test for SIGINT. Just terminate
- the captive process.
- (signal_exit): Add debugging output.
- * fhandler_tty.cc (fhandler_tty_slave::open): Don't allocate a console
- if one already seems to exist. Properly initialize ctrl-c handling if
- we do allocate a console.
- * winsup.h (early_stuff_init): Delete declaration.
- (init_console_handler): New declaration.
- (init_global_security): New declaration.
-
-2003-09-11 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_disk_file.cc (path_conv::ndisk_links): Rename from
- num_entries. Accept an argument and calculate any extra links needed
- based on missing . and .. entries.
- (fhandler_disk_file::fstat_helper): Always call pc->ndisks_links() to
- calculate the number of links.
- * path.h (path_conv::ndisk_links): Declare.
-
-2003-09-11 Christopher Faylor <cgf@redhat.com>
-
- * path.cc (normalize_posix_path): Put check for '//' prefix back to
- denote a UNC path.
- (slash_unc_prefix_p): Remove vestige of old //c method for accessing
- drives.
-
-2003-09-11 Christopher Faylor <cgf@redhat.com>
-
- * dir.cc (rmdir): Add more samba workarounds.
-
-2003-09-11 Corinna Vinschen <corinna@vinschen.de>
-
- * shared.cc (user_shared_initialize): Revert length attribute for name
- variable to be just UNLEN + 1.
-
-2003-09-10 Pierre Humblet <pierre.humblet@ieee.org>
-
- * shared_info.h (shared_info::initialize): Remove argument.
- * cygheap.h (cygheap_user::init): New declaration.
- * uinfo.cc (cygheap_user::init): New.
- (internal_getlogin): Move functionality to cygheap_user::init. Open
- the process token to update the group sid.
- * shared.cc (user_shared_initialize): Get the user information from
- cygheap->user.
- (shared_info::initialize): Remove argument. Call cygheap->user.init
- instead of cygheap->user.set_name.
- (memory_init): Do not get the user name and do not pass it to
- shared_info::initialize.
- * registry.cc (get_registry_hive_path): Make csid a cygpsid.
- (load_registry_hive): Ditto.
-
-2003-09-10 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_disk_file.cc (num_entries): Take . and .. into account if
- they do not exist since cygwin simulates them.
- (fhandler_cygdrive::fstat): Ditto.
- (fhandler_cygdrive::readdir): Don't do any specific tests on
- __d_position when seeing if a drive exists.
-
-2003-09-10 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (DLL_OFILES): Add getopt.o and iruserok.o.
- * cygwin.din: Export __check_rhosts_file, __rcmd_errstr, optarg,
- opterr, optind, optopt, optreset, getopt, getopt_long, iruserok
- and ruserok.
- * getopt.c: Moved from lib to here. Define opt* variables as
- dllexport.
- * iruserok.c: Moved from lib to here. Rearrange function order.
- Prefer using 64/32 bit functions.
- * syscalls.cc (shell_fp): Define as struct __sFILE64.
- (getusershell): Use fopen64 instead of fopen.
- * winsup.h: Add declarations for seteuid32, fopen64,
- cygwin_gethostbyname and cygwin_inet_addr.
- * include/getopt.h: Declare opt* variables dllimport.
- * include/cygwin/version.h: Bump API minor number.
-
-2003-09-10 Christopher Faylor <cgf@redhat.com>
-
- * exceptions.cc (sig_handle_tty_stop): Check parent PID_NOCLDSTOP
- rather than erroneously checking *my own* sigtodo.
-
-2003-09-10 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Add some more -fomit-frame-pointer files.
-
- * path.cc (conv_path_list_buf_size): Free normalized_path or suffer
- memory leak.
- * syscalls.cc (chroot): Ditto.
-
-2003-09-10 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (DLL_OFILES): Add bsdlib.o.
- * autoload.cc (RegisterServiceProcess): Add.
- * bsdlib.cc: New file.
- (daemon): New function.
- (login_tty): Ditto.
- (openpty): Ditto.
- (forkpty): Ditto.
- * cygwin.din: Export daemon, forkpty, login_tty, logwtmp, updwtmp,
- openpty and revoke.
- * syscalls.cc (updwtmp): New function, writing to wtmp exclusively.
- (logwtmp): Ditto.
- (login): Call updwtmp instead of writing to wtmp by itself.
- (logout): Ditto.
- * tty.cc (revoke): New funtion.
- * include/paths.h: Define _PATH_DEVNULL.
- * include/pty.h: New header.
- * include/cygwin/version.h: Bump API minor number.
- * include/sys/utmp.h: Declare logwtmp with const arguments.
- Declare updwtmp.
- * lib/iruserok.c: New file.
- (ruserok): New function.
- (iruserok): Ditto.
- (__ivaliduser): Ditto.
- (__icheckhost): Ditto.
-
-2003-09-10 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::fstat): Don't use PC_POSIX.
-
-2003-09-09 Pierre Humblet <pierre.humblet@ieee.org>
-
- * shared_info.h: Include security.h.
- (open_shared): Add psa argument.
- (user_shared_initialize): New declaration.
- * security.h: Add _SECURITY_H guard.
- (sec_user): Use sec_none in the no ntsec case.
- * spawn.cc (spawn_guts): Remove call to load_registry_hive.
- * syscalls (seteuid32): If warranted, call load_registry_hive,
- user_shared_initialize and RegCloseKey(HKEY_CURRENT_USER).
- * shared.cc (user_shared_initialize): New.
- (open_shared): Add and use psa argument.
- (memory_init): Move mount table initialization to
- user_shared_initialize. Call it.
-
-2003-09-09 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (mmap64): Change address types from caddr_t to void *
- according to SUSv3.
- (mmap): Ditto.
- (munmap): Ditto.
- (msync): Ditto.
- (mprotect): Ditto. Move to before the fhandler methods.
- * include/sys/mman.h: Change prototypes accordingly.
-
-2003-09-08 Christopher Faylor <cgf@redhat.com>
-
- * dcrt0.cc (dlL_crt0_1): Set __argc_safe after __argc is absolutely
- know to be set.
- * exceptions.cc (sig_handle_tty_stop): Don't reset sigCONT event since
- it is reset automatically.
- * fork.cc (fork): Remove obsolete usage of PID_SPLIT_HEAP.
- * include/sys/cygwin.h: Ditto.
- * sigproc.cc (sig_send): Use sigframe init method to set frame since it
- checks for previous ownership of the frame.
- * sigproc.h (sigframe::init): Accept an "is_exception" argument.
-
-2003-09-08 Christopher Faylor <cgf@redhat.com>
-
- * dir.cc (readdir): Reinstate setting of old ino field for legacy
- applications.
- * dirent.h (dirent): Rename unused field to __ino32.
-
-2003-09-08 Christopher Faylor <cgf@redhat.com>
-
- * passwd.cc (getpwnam_r): Initialize pw_comment field.
-
-2003-09-08 Christopher Faylor <cgf@redhat.com>
-
- * passwd.cc (getpwuid_r32): Initialize pw_comment field.
-
-2003-09-08 Christopher Faylor <cgf@redhat.com>
-
- * sigproc.cc (wait_sig_inited): Remove assertion since it is racy.
-
-2003-09-08 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din: Export endusershell, getusershell and setusershell.
- * syscalls.cc (getusershell): New function.
- (setusershell): Ditto.
- (endusershell): Ditto.
- * include/cygwin/version.h: Bump API minor number.
-
-2003-09-08 Nicholas Wourms <nwourms@netscape.net>
-
- * cygwin.din: Export argz_add argz_add_sep argz_append argz_count
- argz_create argz_create_sep argz_delete argz_extract argz_insert
- argz_next argz_replace argz_stringify envz_add envz_entry envz_get
- envz_merge envz_remove envz_strip
- * include/cygwin/version.h: Bump api minor number.
-
-2003-09-07 Christopher Faylor <cgf@redhat.com>
-
- Throughout, remove __d_u.__d_data fields from DIR structure.
- * include/sys/dirent.h (dirent): Remvoe old_d_ino.
- (DIR): Make __d_dirhash a 64 bit value. Remove __d_data and __d_u.
- Add __flags.
- * dir.cc (opendir_states): New enum.
- (opendir): Clear new DIR __flags field.
- (readdir): Fill in '.' and '..' entries if we hit EOF and we haven't
- seen them already. Nuke setting of old_d_ino.
- (rewinddir): Reset DIR __flags field.
- (seekdir64): Ditto.
- * fhandler_disk_file.cc (fhandler_cygdrive::fhandler_cygdrive): Remove
- special handling of "." and ".." since they are now handled
- automatically.
-
-2003-09-07 Christopher Faylor <cgf@redhat.com>
-
- * include/cygwin/in.h: Don't define ipv6 stuff unless we call for it
- specifically since it isn't really implemented yet.
-
-2003-09-07 Christopher Faylor <cgf@redhat.com>
-
- * cygheap.cc (_csbrk): More left coercion cleanup.
- * fhandler_tty.cc (fhandler_tty_slave::read): Ditto.
- (fhandler_tty_slave::write): Ditto.
- * fhandler_windows.cc (fhandler_windows::read): Ditto.
- * heap.cc (sbrk): Ditto.
-
-2003-09-07 Pierre Humblet <pierre.humblet@ieee.org>
-
- * signal.cc (nanosleep): Improve test for valid values. Round delay up
- to resolution. Fix test for negative remainder. Use timeGetTime
- through gtod.
- (sleep): Round up return value.
-
-2003-09-07 Pierre Humblet <pierre.humblet@ieee.org>
- Christopher Faylor <cgf@redhat.com>
-
- * hires.h (HIRES_DELAY_MAX): Define.
- (hires_ms::minperiod): Declare static.
- (hires_ms::resolution): New.
- (hires_ms::dmsecs): New.
- (hires_ms::prime): Return UINT.
- (gtod): Declare.
- * times.cc (hires_ms::prime): Always calculate minperiod and set it to
- 1 in case of failure. Return minperiod.
- (hires_ms::resolution): Define.
- (hires_ms::~hires_ms): Delete.
- (hires_ms::usecs): Check minperiod to prime.
- (gtod) Define as global.
-
-2003-09-06 Christopher Faylor <cgf@redhat.com>
-
- Remove left coercion throughout.
-
-2003-09-04 Pierre Humblet <pierre.humblet@ieee.org>
-
- * hires.h (hires_ms::~hires_ms): Delete declaration.
- * times.cc (hires_ms::~hires_ms): Delete definition..
-
-2003-09-04 Christopher Faylor <cgf@redhat.com>
-
- * dcrt0.cc (__argc_safe): New variable.
- (dll_crt0_1): Store argc in __argc_safe, which will theoretically
- remain untouched by the user.
- * fhandler_console.cc (fhandler_console::read): Silence some compiler
- warnings.
- * fhandler_raw.cc (fhandler_dev_raw::raw_read): Ditto.
- * pinfo.cc (_pinfo::commune_recv): Carefully bound argv scan and check
- for potentially bad pointers since user could have set argv cell to
- anythinw.
- * cygheap.h (CYGHEAPSIZE): Bump up size.
-
-2003-09-04 Corinna Vinschen <corinna@vinschen.de>
-
- * sysconf.cc (sysconf): Return more accurate value for _SC_AVPHYS_PAGES.
-
-2003-09-04 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc: Restructure. Add, remove and rewrite comments throughout
- for better readability. Change function names for better
- understanding.
- (MAP_SET): Accommodate name change from map_map_ to page_map_.
- (MAP_CLR): Ditto.
- (MAP_ISSET): Ditto.
- (mmap_record::page_map_): Rename from page_map_.
- (mmap_record::get_map): Remove.
- (mmap_record::alloc_page_map): Rename from alloc_map. Return bool
- indicating success of cygheap memory allocation.
- (mmap_record::free_page_map): Rename from free_map.
- (mmap_record::fixup_page_map): Rename from fixup_map.
- (mmap_record::find_unused_pages): Rename from find_empty.
- (mmap_record::map_pages): Rename from map_map.
- (mmap_record::unmap_pages): Rename from unmap_map.
- (class list): Make all class members private.
- (list::list): Remove.
- (list::~list): Remove.
- (list::get_fd): New attribute reader.
- (list::get_hash): Ditto.
- (list::get_record): Ditto.
- (list::add_record): Manage all allocation for mmap_records. Check
- for failed memory allocation and return NULL if so.
- (list::set): New function.
- (list::del_record): Rename from erase. Return true if last mmap_record
- has been deleted, false otherwise. Check for legal incoming index
- value.
- (list::erase): Remove erase/0.
- (list::search_record): Rename from match.
- (map::map): Remove.
- (map::~map): Remove.
- (map::add_list): Manage all allocation for lists. Check for failed
- memory allocation and return NULL if so.
- (map::get_list): New method.
- (map::del_list): Rename from erase. Check for legal incoming index
- value.
- (mmap64): Check for failed mmap_record memory allocation. Return
- with MAP_FAILED and errno set to ENOMEM if so.
- (munmap): Rearrange loop using new list and mmap_record accessor
- functions. Rename loop index variables for better understanding.
- Check if list can be deleted after last mmap_record in it has been
- deleted.
- (msync): Rearrange loop using new list and mmap_record accessor
- functions. Rename loop index variables for better understanding.
- (fixup_mmaps_after_fork): Ditto.
-
-2003-09-03 Christopher Faylor <cgf@redhat.com>
-
- * cxx.cc (new): Fix formatting. Just return result of ccalloc rather
- than calling memset explicitly.
-
-2003-09-03 Christopher Faylor <cgf@redhat.com>
-
- * exceptions.cc (set_process_mask): Set pending signals only when
- signals become unmasked.
- * sigproc.cc (pending_signals): Flip back to a global.
- (wait_sig): Don't set pending signals when there is an armed semaphore
- or signal is blocked.
-
- * shared.cc (shared_info::initialize): Add a username parameter for
- user-mode mounts. Reorganize to try to avoid startup race.
- (memory_init): Move some stuff into shared_info::initialize.
- * shared_info.h (shared_info::initialize): Change declaration.
- (CURR_SHARED_MAGIC): Update.
-
-2003-09-01 Christopher Faylor <cgf@redhat.com>
-
- * include/cygwin/version.h: Bump DLL minor number to 4.
-
-2003-09-01 Christopher Faylor <cgf@redhat.com>
-
- * net.cc (dup_ent): Restore check for NULL input.
-
-2003-08-31 Christopher Faylor <cgf@redhat.com>
-
- * include/sys/cygwin.h: Don't define cygwin-specific things if
- !__CYGWIN__.
-
-2003-08-31 Christopher Faylor <cgf@redhat.com>
-
- * cygheap.cc (cygheap_init): Allocate space for sigaction array in
- cygheap.
- * cygheap.h (cygheap_types): Add HEAP_SIGS.
- * exceptions.cc (signal_fixup_after_exec): Remove from this file.
- * pinfo.h (pinfo::getsig): Just return global_sigs array.
- (pinfo::sigs): Delete.
- * sigproc.cc (signal_fixup_after_exec): Move it here.
- (global_sigs): New global array, moved from pinfo structure.
- (sigalloc): New function. Allocate global sigaction array here.
- (proc_subproc): Remove copysigs call. It's automatic now.
- * include/sys/cygwin.h (PID_NOCLDSTOP): New value.
- * signal.cc (sigaction): Set myself->PID_NODCLDSTOP when appropriate.
- * sigproc.h (sigalloc): Declare.
-
- * fnmatch.c (fnmatch): Use C90 parameters.
- (rangematch): Ditto.
-
- * fhandler.cc (fhandler_base::raw_read): Use right coercion to avoid a
- compiler warning.
-
-2003-08-31 Christopher Faylor <cgf@redhat.com>
-
- * net.cc (dup_ent): Make debugging output consistent.
-
-2003-08-31 Christopher Faylor <cgf@redhat.com>
-
- Use dup_ent rather than specific dup_*_ptr functions throughout.
- * (gen_ent): Delete.
- (dup_ent): Subsume gen_ent functionality.
- (dup_host_ptr): Delete.
- (dup_proto_ptr): Ditto.
- (dup_servent_ptr): Ditto.
-
-2003-08-31 Christopher Faylor <cgf@redhat.com>
-
- * net.cc (gen_ent): Invert sense of null check so that debug output
- makes sense.
-
-2003-08-31 Christopher Faylor <cgf@redhat.com>
-
- * net.cc (free_char_list): Delete.
- (dup_addr_list): Delete.
- (dup_char_list): Delete.
- (free_hostent_ptr): Delete.
- (free_protoent_ptr): Delete.
- (free_servent_ptr): Delete.
- (DWORD_round): New function.
- (strlen_round): New function. Returns strlen rounded up to word size.
- (dup_ent): New, generic function to duplicate a {host,proto,serv}ent
- structure.
- (gen_ent): New macro. Generates a generic dup_{host,proto,serv}ent_ptr
- function.
- (cygwin_getservbyname): Remove call to free_servent_ptr, pass
- servent_buf to dup_servent_ptr.
- (cygwin_getservbyport): Ditto.
- (cygwin_gethostbyname): Ditto for hostent.
- (cygwin_gethostbyaddr): Ditto.
- (cygwin_getprotobyname): Ditto for protoent.
- (cygwin_getprotobynumber): Ditto.
-
-2003-08-31 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in (MALLOC_OFILES): Always fill in with correct malloc
- object.
- * configure.in: Fill in MALLOC_OFILES with either debugging or regular
- malloc.
- * configure: Regenerate.
- * dlmalloc.c: Make various fruitless changes to attempt to get to work.
- * dlmalloc.h: Ditto.
- * malloc.cc (free): Check malloc pool when debugging.
-
- * path.cc (win32_device_name): Eliminate compiler warning.
-
- * sigproc.cc (sig_dispatch_pending): Remove use of was_pending. Let
- thisframe.call_signal_handler decide if handler should be called rather
- than using bogus was_pending check.
-
- * exceptions.cc (interrupt_setup): Remove accidentally checked in
- debugging code.
-
-2003-08-30 Christopher Faylor <cgf@redhat.com>
-
- * heap.cc (sbrk): Save rounded address in user_heap_max.
-
-2003-08-30 Christopher Faylor <cgf@redhat.com>
-
- * sigproc.cc (sig_dispatch_pending): Remove explicit call to
- thisframe.call_signal_handler.
-
-2003-08-30 Christopher Faylor <cgf@redhat.com>
-
- Remove some cygserver files.
-
-2003-08-28 Christopher Faylor <cgf@redhat.com>
-
- * sigproc.h: Make some functions regparm.
- * sigproc.cc (checkstate): Make regparm.
- (getevent): Change parameters in declaration, rename from getsem, make regparm.
- (sig_send): Recognize that nosync is now an event. Remove some old
- cruft from previous interrupt anywhere signal handler.
- (getevent): Change parameters in definition, rename from getsem.
- Allocate event rather than semaphore.
- (wait_sig): Treat sigcatch_nosync as an event.
-
-2003-08-28 Christopher Faylor <cgf@redhat.com>
-
- * exceptions.cc (sigreturn): Fix problem where old return address was
- not properly restored for a nested signal.
-
-2003-08-27 Christopher Faylor <cgf@redhat.com>
-
- * autoload.cc (SwitchToThread): Declare as autoload function.
- * cygthread.h (cygthread::main_thread_id): Make public.
- * exceptions.cc (setup_handler): Remove unneeded priority stuff.
- Rename label to reflect what it does. Add debugging for idiotic
- Windows NT problem. Change debugging output to include signal number.
- * miscfuncs.cc (low_priority_sleep): If available, use SwitchToThread
- function to give time slice to other threads.
- * wincap.cc: Properly define have_switch_to_thread throughout.
- * wincap.h (wincap::switch_to_thread): New element.
-
-2003-08-27 Christopher Faylor <cgf@redhat.com>
-
- * syscalls.cc (mount): Don't check win32_path when doing cygdrive
- mount.
-
-2003-08-27 Christopher Faylor <cgf@redhat.com>
-
- * specdir: Correctly remove temporary directory prior to use.
-
-2003-08-27 Christopher Faylor <cgf@redhat.com>
-
- * sigproc.cc (wait_sig): Count number of iterations through
- 'more_signals' loop and issue a warning if DEBUGGING and excessive.
- (WFSO): When debugging and infinite timeout, loop.
-
-2003-08-26 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/stat.h: Allow definition of internal stat structures
- also when compiling newlib.
-
-2003-08-25 Christopher Faylor <cgf@redhat.com>
-
- Throughout, change USE_CYGSERVER to USE_SERVER.
- * Makefile.in (LIBSERVER): Define and use.
- * configure.in: Set LIBSERVER as appropriate.
- * configure: Regenerate.
- * acconfig.h: Regenerate.
- * environ.cc: Rename allow_daemon to allow_server. Only recognize when
- USE_SERVER is defined.
-
-2003-08-23 Christopher Faylor <cgf@redhat.com>
-
- * syscalls.cc (_remove_r): Define.
-
-2003-08-22 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.h (enum cygheap_types): Add HEAP_MMAP.
- (CYGHEAPSIZE): Add another 64K.
- * mmap.cc: Use cmalloc, ccalloc and crealloc with HEAP_MMAP type
- throughout.
-
-2003-08-22 Christopher Faylor <cgf@redhat.com>
-
- * cygheap.cc (user_heap_info::max): New field.
- * heap.cc (heap_init): Save pointer to end of heap reserved memory.
- (sbrk): Don't attempt to commit memory beyond end of heap reserved
- memory. Attempt to honor comment and reserve commitbytes if heapchunk
- fails.
-
-2003-08-20 Pierre Humblet <pierre.humblet@ieee.org>
-
- * exceptions.cc (sigreturn): Don't clobber ebp in recursive signal
- calls.
-
-2003-08-22 Christopher Faylor <cgf@redhat.com>
-
- * exceptions.cc (sig_handle): Change so that default signals indicate
- success.
-
-2003-08-21 Christopher Faylor <cgf@redhat.com>
-
- * sigproc.cc (wait_sig): Remove redundant test in do/while.
-
-2003-08-21 Christopher Faylor <cgf@redhat.com>
-
- * sigproc.cc (wait_sig): Avoid infinite loop.
-
-2003-08-20 Christopher Faylor <cgf@redhat.com>
-
- * speclib: Reenable removal of temp files.
-
-2003-08-20 Christopher Faylor <cgf@redhat.com>
-
- * miscfuncs.cc (low_priority_sleep): Sleep at same priority as main
- thread.
- * sigproc.cc (wait_sig): Keep looping if there are more signals to
- consider and we are flushing signals.
- (sig_send): Put nonsync signals in the correct bucket.
-
-2003-08-20 Christopher Faylor <cgf@redhat.com>
-
- * speclib: Fix created lib to avoid "File truncated" problems.
-
-2003-08-20 Pierre Humblet <pierre.humblet@ieee.org>
-
- * exceptions.cc (interrupt_setup): Set sigsave.sig last to avoid a
- race.
-
-2003-08-20 Christopher Faylor <cgf@redhat.com>
-
- * sigproc.cc (wait_sig): Ensure that myself->getsigtodo array is
- flushed on a __SIGFLUSH.
-
-2003-08-20 Pierre Humblet <pierre.humblet@ieee.org>
- Christopher Faylor <cgf@redhat.com>
-
- * exceptions.cc (_sigreturn): Handle nested signals without growing the
- stack.
-
-2003-08-19 Christopher Faylor <cgf@redhat.com>
-
- * exceptions.cc (pending_signals): Remove unneeded declaration.
- * sigproc.cc (pending_signals): Make static.
- (wait_sig): Use defined values rather than integers for rc. Never scan
- both todo arrays as this could cause hangs if signals arrive from two
- different sources. Rename saw_pending_signals to saw_failed_interrupt.
- Exit loop when signal found. Enter low-priority sleep, if necessary,
- after finished signalling completion. Set pending_signals when blocked
- (from Pierre Humblet).
-
-2003-08-19 Christopher Faylor <cgf@redhat.com>
-
- * signal.cc (sigpending): Move.
- * sigproc.cc (sigpending): To here.
- (getlocal_sigtodo): Return process-local signal array.
- (sigpending): Accommodate new process-local signal array.
- (sig_send): Ditto.
- (sig_set_pending): Ditto.
- (wait_sig): Ditto.
-
-2003-08-19 Christopher Faylor <cgf@redhat.com>
-
- Throughout, eliminate argument to sig_dispatch_pending.
- * exceptions.cc (setup_handler): Move non-interruptible condition
- handling (back) to wait_sig.
- (set_process_mask): Don't worry about calling sig_dispatch_pending from
- sigthread since it is detected in the function anyway.
- (sig_handle): Eliminate thisproc arg. Don't call sig_dispatch_pending
- on SIGCONT since that should happen automatically.
- * sigproc.cc (sig_dispatch_pending): Eliminate justwake argument. Just
- return when called from sigthread.
- (wait_sig): Change some variables to bool. Change inner while to an
- if. Move uninterruptible signal handling here.
- (sigproc_terminate): Don't call sig_dispatch_pending. Just increment
- semaphore on exit.
-
- * speclib: Use slightly different (but still flawed) method for
- determining symbols to extract from libraries.
-
-2003-08-18 Christopher Faylor <cgf@redhat.com>
-
- * exceptions.cc (sigdelayed): Fix race where signal handler could get
- the wrong mask (as suggested by Pierre Humblet).
-
-2003-08-18 Christopher Faylor <cgf@redhat.com>
-
- * path.cc (mount): Add null/empty check for input parameters.
- (umount): Add null/empty check for input parameters.
-
-2003-08-17 Pierre Humblet <pierre.humblet@ieee.org>
-
- * grp.cc (read_group): Revert previous change.
- * uinfo.cc (pwdgrp::load): Always reset curr_lines.
-
-2003-08-17 Corinna Vinschen <corinna@vinschen.de>
-
- * errno.cc (errmap): Map ERROR_INVALID_BLOCK_LENGTH to EIO.
- * fhandler_raw.cc (fhandler_dev_raw::raw_read): Set more accurate
- errnos instead of EACCES.
- (fhandler_dev_raw::raw_write): Ditto.
-
-2003-08-17 Christopher Faylor <cgf@redhat.com>
-
- * path.cc (special_name): Accommodate all special names with
- extensions.
-
-2003-08-15 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (mmap64): Avoid crash if file size is less than requested
- map length.
-
-2003-08-13 Igor Pechtchanski <pechtcha@cs.nyu.edu>
-
- * path.cc (special_name): Add checks for some specials followed by
- a "." and a FIXME comment.
-
-2003-08-13 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din: Accommodate change from cygwin_lstat to lstat.
- * syscalls.cc: Add defines to avoid declaration issues when
- renaming cygwin_lstat back to lstat.
- (lstat): Reverted name change from cygwin_lstat.
-
-2003-08-12 Corinna Vinschen <corinna@vinschen.de>
-
- * include/sys/param.h (NBBY): Define if not defined.
-
-2003-08-12 Nicholas Wourms <nwourms@netscape.net>
-
- * include/sys/param.h (setbit): Add new bitmap related macro.
- (clrbit): Likewise.
- (isset): Likewise.
- (isclr): Likewise.
- (howmany): Add new counting/rounding macro.
- (rounddown): Likewise.
- (roundup): Likewise.
- (roundup2): Likewise.
- (powerof2): Likewise
- (MIN): Add macro for calculating min.
- (MAX): Add macro for calculating max.
-
-2003-08-09 Christopher Faylor <cgf@redhat.com>
-
- * include/cygwin/version.h: Bump DLL minor number to 3.
-
-2003-08-08 Gerrit P. Haase <gp@familiehaase.de>
-
- * include/stdint.h: Correctly define INT32_MIN.
-
-2003-08-08 David Rothenberger <daveroth@acm.org>
-
- * grp.cc (read_group): Set __group32.gr_mem pointer back to &null_ptr
- after free() is called.
-
-2003-08-05 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Rework to accommodate new speclib arguments.
- * speclib: Rework to extract everything from libcygwin.a rather than
- building things from existing object files.
-
-2003-08-05 Pavel Tsekov <ptsekov@gmx.net>
-
- * path.cc (cygdrive_getmntent): Do not skip over drives of type
- DRIVE_REMOVABLE.
-
-2003-08-05 Christopher Faylor <cgf@redhat.com>
-
- * fhandler.cc (fhandler_base::lseek): Be more paranoid when
- constructing offsets from 64 bit value.
- * syscalls.cc (logout): Avoid temp buffer memcpy since new scheme does
- not require it.
- (utmp_data): Rework as a macro which returns a pointer into a buffer.
- (getutent): Use new buffer allocation mechanism to grab a utmp buffer.
- (getutid): Ditto.
- (pututline): Ditto.
-
-2003-08-05 Pavel Tsekov <ptsekov@gmx.net>
-
- * fhandler_disk_file.cc (fhandler_cygdrive::readdir): Do not change
- 'errno' if end of directory condition is encountered as per SUSv2.
- * fhandler_proc.cc (fhandler_proc::readdir): Ditto.
- * fhandler_process (fhandler_process::readdir): Ditto.
- * fhandler_registry (fhandler_registry::readdir): Ditto.
-
-2003-07-30 Christopher Faylor <cgf@redhat.com>
-
- * dcrt0.cc (_dll_crt0): Move strace.microseconds initialization to
- after pthread initialization.
- (dll_crt0_1): i.e., here.
-
-2003-07-28 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_base.cc (fhandler_base::readv): Rework to properly return
- number of bytes from read.
-
-2003-07-28 Christopher Faylor <cgf@redhat.com>
-
- * include/cygwin/version.h: Bump DLL minor number to 2.
-
-2003-07-26 Christopher Faylor <cgf@redhat.com>
-
- * exceptions.cc (ctrl_c_handler): Send SIGHUP when events occur only if
- there is a tty associated with the process. Send SIGHUP on
- CTRL_LOGOFF_EVENT.
-
- * fhandler_tty.cc (fhandler_tty_slave::open): Adjust console open
- handle counter regardless of whether this is a pty or tty.
- (fhandler_tty_slave::open): Ditto.
- (fhandler_tty_slave::dup): Ditto.
- (fhandler_tty_common::set_close_on_exec): Ditto.
- (fhandler_tty_master::init_console): Decrement console open handle
- counter after init since it will now be handled by all tty open.
- * syscalls.cc (setsid): Rework debugging output slightly.
-
-2003-07-25 Christopher Faylor <cgf@redhat.com>
-
- * configure.in: Use 'install-sh -c'.
- * configure: Regenerate.
-
-2003-07-25 Christopher Faylor <cgf@redhat.com>
-
- * configure.in: Always use install-sh.
- * configure: Regenerate.
-
-2003-07-25 Christopher Faylor <cgf@redhat.com>
-
- * include/cygwin/socket.h: Conditionalize [AP]F_INET6 define.
-
-2003-07-25 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in (OBSOLETE_FUNCTION): Add fdopen.
-
-2003-07-25 Christopher Faylor <cgf@redhat.com>
-
- * cygwin.din: Export _fdopen64
- * Makefile.in (NEW_FUNCTIONS): Add _fdopen64 -> fdopen translation.
- * include/cygwin/version.h: Bump api minor number.
-
- * ntdll.h: Remove (now) duplicate FILE_SYNCHRONOUS_IO_NONALERT
- definition.
-
-2003-07-24 Christopher Faylor <cgf@redhat.com>
-
- * environ.cc (check_case_init): Use strncasematch.
-
- * cygwin.din: Export __mempcpy.
- * cygwin/version.h: Bump api minor number.
-
-2003-07-21 Pavel Tsekov <ptsekov@gmx.net>
-
- * mmap.cc: Use proper format specifiers for _off64_t and size_t in
- format strings passed to syscall_printf () and debug_printf ()
- throughout.
-
-2003-07-18 Pierre Humblet <pierre.humblet@ieee.org>
-
- * security.cc (verify_token): Fix white space and style.
- Use type bool instead of BOOL and char. Use alloca
- instead of malloc and free for my_grps.
-
-2003-07-17 Corinna Vinschen <corinna@vinschen.de>
-
- * sysconf.cc (sysconf): Fix OPEN_MAX patch. Return page size on
- _SC_PAGESIZE again.
-
-2003-07-14 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.h (class cygheap_user): Use INVALID_HANDLE_VALUE as invalid
- value for tokens.
- * syscalls.cc (seteuid32): Ditto. Set new_token to process token if
- process token is suitable.
- * uinfo.cc (uinfo_init): Initialize tokens in cygheap user info
- to INVALID_HANDLE_VALUE.
-
-2003-07-14 Pierre Humblet <pierre.humblet@ieee.org>
-
- * cygheap.h (enum impersonation): Delete.
- (cygheap_user::impersonation_state): Delete.
- (cygheap_user::current_token): New.
- (cygheap_user::issetuid): Modify to use current_token.
- (cygheap_user::token): Ditto.
- (cygheap_user::deimpersonate): Ditto.
- (cygheap_user::reimpersonate): Ditto.
- (cygheap_user::has_impersonation_tokens): Ditto.
- (cygheap_user::close_impersonation_tokens): Ditto.
- * security.cc (cygwin_set_impersonation_token): Always set the token.
- (verify_token): Change type of gsid to cygpsid.
- (get_file_attribute): Use the effective ids.
- * syscalls.cc (seteuid32): Modify to use cygheap_user::current_token.
- * uinfo.cc (uinfo_init) Do not set cygheap->user.impersonation_state.
-
-2003-07-12 Christopher Faylor <cgf@redhat.com>
-
- * pinfo.cc (_pinfo::commune_send): Fix bounds test so that poll of
- communicating pid actually stops eventually.
-
-2003-07-10 Christopher Faylor <cgf@redhat.com>
-
- * path.cc (get_device_number): Remove special com? consideration.
- (special_chars): Make static.
- (special_introducers): New.
- (special_char): Allow specified valid_chars args.
- (fnunmunge): Handle aux-like filenames correctly.
- (special_name): Add con, conin$, conout$.
- (mount_item::fnmunge): Use __small_sprintf return value to calculate
- increments.
-
-2003-07-09 Christopher Faylor <cgf@redhat.com>
-
- * include/cygwin/version.h: Bump DLL minor number to 1.
-
-2003-07-09 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_proc.cc (format_proc_stat): Use correctly sized constants
- for filling in zeros on 98.
-
-2003-07-09 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_proc.cc (fhandler_proc::fill_filebuf): Allocate more space
- for stat buffer.
- (format_proc_stat): Reorganize to accumulate and report on all cpus.
-
-2003-07-09 Christopher Faylor <cgf@redhat.com>
-
- * sysconf.cc (sysconf): Return processors online rather than bitmask
- for _SC_NPROCESSORS_ONLN.
-
-2003-07-08 Christopher Faylor <cgf@redhat.com>
-
- * cygheap.cc (creturn): Set appropriate errno when out of memory.
- (ccalloc): Only issue system_printf when debugging.
- * dtable.cc (dtable::extend): Only allocate 100 * the incremental growth
- size max. Set errno appropriately.
- (dtable::build_fhandler): Check for error from set_name.
- * fhandler.cc (fhandler_base::set_name): Set errno and return error on OOM.
- * fhandler.h (fhandler_base::set_name): Change to bool.
- * fhandler_process.cc (format_process_stat): Fix formatting.
- * resource.cc (getrlimit): Return greater of OPEN_MAX or fd table size.
- * sysconf.cc (sysconf): Ditto.
-
-2003-07-07 Christopher Faylor <cgf@redhat.com>
-
- * rmsym: Don't use ranlib.
-
-2003-07-07 Christopher Faylor <cgf@redhat.com>
-
- * newsym: Reenable removal of tmp directory. Just use ar to generate
- archive index.
- * Makefile.in: Don't send ranlib to newsym or rmsym.
-
-2003-07-07 Christopher Faylor <cgf@redhat.com>
-
- * newsym: Create objects that are closer to those created by dlltool so
- as not to confuse --export-all-symbols.
- * rmsym: Be a little more accepting of object filenames now that
- dlltool can create different format files.
-
-2003-07-06 Christopher Faylor <cgf@redhat.com>
-
- * newsym: Oops. Revert below change.
-
-2003-07-06 Christopher Faylor <cgf@redhat.com>
-
- * newsym: Use correct prefix for generating imports.
- * pinfo.cc (_pinfo::commune_send): Don't wait forever for a response
- from another process.
-
-2003-07-06 Christopher Faylor <cgf@redhat.com>
-
- * syscalls.cc (gethostid): Set thread affinity so that results are
- predictable.
-
-2003-07-05 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (list::match): Add parameters to return valid address and
- length back to munmap(). Evaluate intersection between given
- area and mapped area and return it, if any.
- (mmap64): On regular files, don't allow mappings beginning beyond
- EOF. Return with errno set to ENXIO instead.
- (munmap): Rewrite SUSv3 conformant. Check if given memory area is
- valid. Unmap all maps inside given memory area. Don't return error
- if no mapping has been unmapped.
-
-2003-07-05 N Stephens <nigel@mips.com>
-
- * fhandler.h (fhandler_socket::get_connect_state): New method to
- return socket connection state.
- * fhandler_socket.cc (dup): Copy socket connect state to new file
- handle.
- * net.cc (cygwin_rcmd): Mark file handles of sockets returned by
- rcmd() as CONNECTED state.
- (cygwin_rexec): Similarly for rexec().
- (socketpair): Mark both ends of a new socket pair as CONNECTED.
-
-2003-07-04 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (fhandler_disk_file::mmap): Fix address test.
-
-2003-07-03 Christopher Faylor <cgf@redhat.com>
-
- * path.cc (fillout_mntent): Change "posix" to "managed".
-
-2003-07-02 Christopher Faylor <cgf@redhat.com>
-
- * fhandler.h (FH_ENC): New enum.
- (fhandler_base::get_encoded): New function.
- (fhandler_base::set_encoded): Ditto.
- * fhandler_disk_file.cc (fhandler_disk_file::opendir): Set encoded flag
- in fhandler, as appropriate.
- (fhandler_disk_file::readdir): Unmunge filename as appropriate based on
- new encoding flag.
- * path.cc (normalize_posix_path): Don't punt on files with colons.
- (special_char): New function.
- (mount_item::fnmunge): Ditto.
- (fnunmunge): Ditto.
- (special_name): Ditto.
- (mount_item::build_win32): Avoid drive considerations when file is
- encoded.
- (mount_info::conv_to_win32_path): Handle encoded filenames.
- (mount_info::conv_to_posix_path): Ditto.
- (fillout_mntent): Add posix string when directory is encoded.
- * path.h (fnunmunge): Declare.
- (path_conv::is_encoded): Declare.
-
-2003-07-03 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_tty.cc (fhandler_tty_slave::open): Conditionalize a little
- more of the cygserver stuff so that ttys actually work.
-
-2003-07-03 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (mmap64): Allow MAP_FIXED with pagesize granularity (4K).
- If a non-zero addr is given, align it to the next lower 64K boundary.
- (fhandler_disk_file::mmap): If a non-zero address is given, try
- mapping using the given address first. If it fails and flags is not
- MAP_FIXED, try again with NULL address.
-
-2003-07-01 Christopher Faylor <cgf@redhat.com>
-
- * thread.cc: Remove _MT_SAFE conditional.
-
-2003-07-01 Christopher Faylor <cgf@redhat.com>
-
- * configure.in: Fix --enable-server option.
- * configure: Regenerate.
-
-2003-07-01 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Remove cygserver stuff.
- * acconfig.h: Add USE_CYGSERVER define.
- * config.h.in: Regenerate.
- * configure.in: Add --enable-server setting.
- * configure: Regenerate.
- * fhandler_tty.cc (fhandler_tty_slave::open): Conditionalize
- compilation of cygserver stuff.
- * fork.cc (fork_child): Ditto.
- * shm.cc: Ditto.
- * tty.cc (tty::common_init): Ditto.
-
- * dcrt0.cc: Use bool rather than BOOL for CYGWIN environment variable
- definitions.
- * environ.cc: Ditto.
- * ntea.cc: Ditto.
- * security.cc: Ditto.
- * security.h: Ditto.
- * syscalls.cc (check_posix_perm): Remove externs that were already
- declared in a header.
- * winsup.h: Ditto. Declare _MT_SAFE here. Delete it someday since
- cygwin should always be _MT_SAFE.
-
-2003-07-01 Christopher Faylor <cgf@redhat.com>
-
- * thread.cc: Remove _MT_SAFE conditional.
-
-2003-07-01 Christopher Faylor <cgf@redhat.com>
-
- * configure.in: Fix --enable-server option.
- * configure: Regenerate.
-
-2003-07-01 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Remove cygserver stuff.
- * acconfig.h: Add USE_CYGSERVER define.
- * config.h.in: Regenerate.
- * configure.in: Add --enable-server setting.
- * configure: Regenerate.
- * fhandler_tty.cc (fhandler_tty_slave::open): Conditionalize
- compilation of cygserver stuff.
- * fork.cc (fork_child): Ditto.
- * shm.cc: Ditto.
- * tty.cc (tty::common_init): Ditto.
-
- * dcrt0.cc: Use bool rather than BOOL for CYGWIN environment variable
- definitions.
- * environ.cc: Ditto.
- * ntea.cc: Ditto.
- * security.cc: Ditto.
- * security.h: Ditto.
- * syscalls.cc (check_posix_perm): Remove externs that were already
- declared in a header.
- * winsup.h: Ditto. Declare _MT_SAFE here. Delete it someday since
- cygwin should always be _MT_SAFE.
-
-2003-06-30 Pierre Humblet <pierre.humblet@ieee.org>
-
- * cygheap.h (enum impersonation): New enum.
- (cygheap_user::token): Delete.
- (cygheap_user::impersonated): Delete.
- (cygheap_user::external_token): New member.
- (cygheap_user::internal_token): New member.
- (cygheap_user::impersonation_state): New member.
- (cygheap_user::issetuid): Modify.
- (cygheap_user::token): New method.
- (cygheap_user::deimpersonate): New method.
- (cygheap_user::reimpersonate): New method.
- (cygheap_user::has_impersonation_tokens): New method.
- (cygheap_user::close_impersonation_tokens): New method.
- * dtable.cc (dtable::vfork_child_dup): Use new cygheap_user methods.
- * fhandler_socket.cc (fhandler_socket::dup): Ditto.
- * fork.cc (fork_child): Ditto.
- (fork_parent): Ditto.
- * grp.cc (internal_getgroups): Ditto.
- * security.cc (verify_token): Ditto.
- (check_file_access): Ditto.
- (cygwin_set_impersonation_token): Detect conflicts. Set
- user.external_token.
- * spawn.cc (spawn_guts): Use new cygheap_user methods.
- * syscalls.cc (seteuid32): Rearrange to use the two tokens
- in cygheap_user.
- (setegid32): Use new cygheap_user methods.
- * uinfo.cc: (internal_getlogin): Ditto.
-
-2003-06-25 Doru Carastan <doru.carastan@mvista.com>
-
- * Makefile.in: Use INSTALL_PROGRAM to install the cygwin DLL.
-
-2003-06-24 Thomas Pfaff <tpfaff@gmx.net>
-
- * thread.cc (MTinterface::fixup_after_fork): Fix thread list after
- fork.
- (pthread::threads): Instantiate.
- (pthread::pthread): Initialize running and suspendend.
- Initialize next with NULL.
- Add thread to thread list if it is not the null_pthread.
- (pthread::~pthread): Remove thread from thread list if it is
- not the null_pthread.
- (pthread::postcreate): Set running flag.
- (pthread::exit): Reset running flag.
- (pthread::cancel): Try to cancel thread only if still running.
- (pthread::_fixup_after_fork): Implement.
- (pthread::detach): Check if thread is still running before detach.
- * thread.h (pthread::running): New member.
- (pthread::next): Ditto.
- (pthread::fixup_after_fork): New static method.
- (pthread::threads): New static method.
- (pthread::_fixup_after_fork): New method.
-
-2003-06-20 Christopher Faylor <cgf@redhat.com>
-
- * pinfo.cc (_pinfo::commune_send): Don't attempt to communicate with a
- pure windows process.
-
-2003-06-18 Pierre Humblet <pierre.humblet@ieee.org>
-
- * autoload.cc (GetNetworkParams): Add.
- * net.cc (getdomainname): Call GetNetworkParams and read the
- DhcpDomain registry value if warranted.
-
-2003-06-17 Christopher Faylor <cgf@redhat.com>
-
- * path.cc (mount): Do more strict checking on posix path arguments.
-
-2003-06-15 Christopher Faylor <cgf@redhat.com>
-
- Throughout, remove "include <errno.h>" from files which already include
- cygerrno.h.
-
-2003-06-15 Thomas Pfaff <tpfaff@gmx.net>
-
- * include/cygwin/config.h (__DYNAMIC_REENT__): Define.
- * include/cygwin/version.h: Bump API minor version.
- * cygwin.din: Export __getreent
- * cygerrno.h: Include errno.h. Fix places where _impure_ptr is used
- directly to store the errno value.
- * debug.cc (__set_errno): Ditto.
- * errno.cc: Remove _RRENT_ONLY define to get errno.cc compiled.
- * signal.cc: Rename _reent_clib to _REENT throughout.
- * thread.h (reent_clib): Remove prototype.
- * thread.cc (reent_clib): Rename reent_clib to __getreent. Return
- _impure_ptr until MTinterface is initialized.
- (reent_winsup): Fix a possible SEGV when _r == NULL. Return NULL
- instead.
- * MTinterface::fixup_after_fork: Switch reent back to _impure_ptr to
- keep signal handling running when fork is called from a thread other
- than the mainthread.
-
-2003-06-12 Thomas Pfaff <tpfaff@gmx.net>
-
- * thread.cc (pthread_attr_init): Revert change from 2003-06-11
- to return 0 if attribute is already initialized back to EBUSY.
- (pthread_condattr_init): Ditto.
- (pthread_rwlockattr_init): Ditto.
- (pthread_mutexattr_init): Ditto.
-
-2003-06-12 Corinna Vinschen <corinna@vinschen.de>
-
- * exceptions.cc (ctrl_c_handler): Don't send a signal on
- CTRL_SHUTDOWN_EVENT. Add a comment to rationalize the patch.
-
-2003-06-11 Thomas Pfaff <tpfaff@gmx.net>
-
- * thread.cc (pthread_attr_init): Return 0 if attribute is already
- initialized.
- Fix return code if out of memory.
- (pthread_condattr_init): Ditto.
- (pthread_rwlockattr_init): Ditto.
- (pthread_mutexattr_init): Return 0 if attribute is already
- initialized.
-
-2003-06-09 Pierre Humblet <pierre.humblet@ieee.org>
-
- * spawn.cc (spawn_guts): Call CreateProcess while impersonated,
- when the real {u,g}ids and the groups are original.
- Move RevertToSelf and ImpersonateLoggedOnUser to the main line.
- * uinfo.cc (uinfo_init): Reorganize. If CreateProcess was called
- while impersonated, preserve the uids and gids and call
- ImpersonateLoggedOnUser. Preserve the uids and gids on Win9X.
-
- * exceptions.cc (error_start_init): Quote the pgm in the command.
-
-2003-06-07 Christopher Faylor <cgf@redhat.com>
-
- * poll.cc: Define FD_SETSIZE to ridiculously large number so that there
- will be no artificially small limits.
-
-2003-06-07 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_tty.cc (fhandler_tty_slave::close): Free the console when
- last tty closes.
-
-2003-06-07 Thomas Pfaff <tpfaff@gmx.net>
-
- * fhandler_socket.cc (fhandler_socket::connect): Change error
- handling for nonblocking connects to return EALREADY when
- connect is called more than once for the same socket.
-
-2003-06-06 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din: Add vsyslog.
- * fhandler.cc (fhandler_base::write): Only make file sparse if the
- seeked area is >= 128K.
- * syslog.cc (vsyslog): New function, overtaking functionality from
- syslog.
- (syslog): Just call vsyslog.
- * include/cygwin/version.h: Bump API minor.
- * include/sys/syslog.h: Add vsyslog declaration.
-
-2003-06-05 Christopher Faylor <cgf@redhat.com>
-
- * cygthread.cc (cygthread::terminate_thread): Change system_printf to
- debug_printf.
-
-2003-06-04 Christopher Faylor <cgf@redhat.com>
-
- * shared.cc (shared_info::heap_chunk_size): Be really defensive about
- making sure that heap_chunk is set.
-
-2003-06-04 Christopher Faylor <cgf@redhat.com>
-
- * path.cc (conv_path_list): Use correct value when calculating length
- to avoid a potential SEGV.
-
-2003-06-03 Pierre Humblet <pierre.humblet@ieee.org>
-
- * fhandler_disk_file.cc (fhandler_disk_file::fstat): Mark the pc
- as non-executable if the file cannot be opened for read. Retry query
- open only if errno is EACCES. Never change the mode, even if it is 000
- when query open() fails.
-
-2003-06-03 Christopher Faylor <cgf@redhat.com>
-
- * configure.in: Allow any i?86 variant.
- * configure: Regenerate.
-
-2003-06-03 Corinna Vinschen <corinna@vinschen.de>
- Thomas Pfaff <tpfaff@gmx.net>
-
- * fhandler_socket.cc (connect_thread): Remove.
- (accept_thread): Remove.
- (fhandler_socket::connect): Remove all special blocking handling.
- (fhandler_socket::accept): Ditto.
- * net.cc (cygwin_connect): Make blocking sockets temporarily
- non-blocking and call cygwin_select on them to be interruptible.
- (cygwin_accept): Ditto.
-
-2003-06-02 Christopher Faylor <cgf@redhat.com>
-
- * spawn.cc (spawn_guts): Don't hang around if the parent doesn't exist.
-
-2003-06-02 Christopher Faylor <cgf@redhat.com>
-
- * cygthread.h (cygthread::terminate_thread): Mark private.
- * cygthread.cc (cygthread::terminate_thread): Deallocate free_range
- thread stuff.
-
-2003-06-02 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::accept): Rename `signalled'
- to `interrupted' as used in fhandler_socket::connect.
-
-2003-06-02 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::connect): Simplify previous
- patch.
- (fhandler_socket::accept): Ditto.
-
-2003-06-02 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc: Include cygthread.h.
- (class sock_event): Remove.
- (thread_connect): New function.
- (thread_accept): Ditto.
- (fhandler_socket::connect): Use cygthread instead of socket event
- handling for blocking sockets.
- (fhandler_socket::accept): Ditto.
-
-2003-06-02 Christopher Faylor <cgf@redhat.com>
-
- * fhandler.cc (fhandler_base::write): Correct minor printf formatting
- style glitch.
-
-2003-06-01 Pierre Humblet <pierre.humblet@ieee.org>
-
- * fhandler_disk_file.cc (fhandler_disk_file::fstat_by_name): Assume
- an existing directory is a root if FindFirstFile fails.
-
-2003-05-30 Christopher Faylor <cgf@redhat.com>
-
- * path.cc (mount_info::conv_to_win32_path): gcc warning about chroot_ok
- was actually valid. Fix it.
-
-2003-05-30 Christopher Faylor <cgf@redhat.com>
-
- * cygheap.cc (init_cheap): Temporarily remove inline that newer gcc's
- have problems with.
-
- * path.cc (path_conv::check): Rework has_acls logic slightly. Uncouple
- exec tests away from filesystem tests.
-
-2003-05-30 Corinna Vinschen <corinna@vinschen.de>
-
- * include/sys/param.h: Add DEV_BSIZE.
-
-2003-05-29 Pierre Humblet <pierre.humblet@ieee.org>
- Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::dup): Rearrange. Fix
- conditional.
-
-2003-05-28 Christopher Faylor <cgf@redhat.com>
-
- * mkvers.sh: Avoid "-dontuse" tags.
-
- * path.cc (path_conv::check): Set exec state based on known situations.
-
- * path.cc (mount_item::fnmunge): New function.
- (mount_item::build_win32): New function.
- (mount_info::conv_to_win32_path): Use build_win32 to build windows
- path.
- * path.h (mount_item::fnmunge): Declare new function.
- (mount_item::build_win32): Ditto.
- * sys/mount.h (MOUNT_ENC): Define.
-
-2003-05-28 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::dup): If running impersonated,
- revert to original account before calling fixup_before_fork_exec
- and impersonate again afterwards. Change comment accordingly.
- Clean up error handling and debug output.
-
-2003-05-27 Thomas Pfaff <tpfaff@gmx.net>
-
- * fhandler_socket.cc (sock_event::~sock_event): New method.
- (sock_event::load): Change to void. Check if winsock2 is available.
- (socke_event::wait): Return 0 if interruptible mode is not available.
- (fhandler_socket::connect): Remove checks for winsock2 availability.
- (fhandler_socket::accept): Ditto.
-
-2003-05-27 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::dup): First try duplicating
- using WSADuplicateSocket/WSASocket, if that fails, try DuplicateHandle.
-
-2003-05-27 Bill C. Riemers <cygwin@docbill.net>
-
- * fhandler_disk_file.cc (fhandler_disk_file::fstat_helper): Filter
- permissions through umask on FAT or if ntsec is off.
-
-2003-05-26 Pierre Humblet <pierre.humblet@ieee.org>
-
- * syscalls.cc (statfs): Call GetDiskFreeSpaceEx before GetDiskFreeSpace.
-
-2003-05-26 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (is_at_eof): Fix conditional. Use INVALID_FILE_SIZE
- instead of numeric constant.
-
-2003-05-26 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::connect): Guard calls to
- sock_event methods by a check for WinSock2 availability.
- (fhandler_socket::accept): Ditto.
-
-2003-05-26 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h: Rename FH_W95LSBUG flag to FH_LSEEKED.
- (fhandler_base::set_did_lseek): Rename from set_check_win95_lseek_bug.
- (fhandler_base::get_did_lseek): Rename from get_check_win95_lseek_bug.
- (fhandler_base::set_fs_flags): New method.
- (fhandler_base::get_fs_flags): Ditto.
- * fhandler.cc (fhandler_base::write): Make 64 bit clean. Convert file
- to a "sparse" file when writing after a long lseek (>64K) beyond EOF.
- (fhandler_base::lseek): Call set_did_lseek() instead of
- set_check_win95_lseek_bug().
- (fhandler_base::fhandler_base): Initialize fs_flags to 0.
- * fhandler_disk_file.cc (fhandler_disk_file::open): Don't create files
- as "sparse" unconditionally. Set fs_flags member.
-
-2003-05-25 Pierre Humblet <pierre.humblet@ieee.org>
-
- * autoload.cc (GetDiskFreeSpaceEx): Add.
- * syscalls.cc (statfs): Call full_path.root_dir() instead of
- rootdir(full_path). Use GetDiskFreeSpaceEx when available and
- report space available in addition to free space.
- * fhandler_disk_file.cc (fhandler_disk_file::fstat_by_name):
- Do not call FindFirstFile for disk root directories.
-
-2003-05-24 Joe Buehler <jhpb@draco.hekimian.com>
-
- * fhandler_process.cc (format_process_stat): Use PagefileUsage
- instead of VirtualSize.
- (get_mem_values): Ditto.
-
-2003-05-21 Corinna Vinschen <corinna@vinschen.de>
-
- * shared_info.h: Match shared_name declaration with below change.
- * shared.cc (shared_name): Use incoming char * parameter instead of
- local static buffer.
- (open_shared): Accommodate new calling convention for shared_name.
- * exceptions.cc (events_init): Ditto.
- * sigproc.cc (getsem): Ditto.
- * syscalls.cc (login): Ditto.
- (logout): Ditto.
- (pututline): Ditto.
-
-2003-05-20 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (secret_event_name): Return void. Use incoming
- char * parameter instead of local static buffer.
- (fhandler_socket::create_secret_event): Accommodate new calling
- convention for secret_event_name.
- (fhandler_socket::close_secret_event): Ditto.
-
-2003-05-20 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (SECRET_EVENT_NAME): Remove.
- (ENTROPY_SOURCE_NAME): Ditto.
- (secret_event_name): New static function. Create shared event name
- with "Global\" prefix on systems supporting terminal services.
- (fhandler_socket::set_connect_secret): Fix conditional.
- (fhandler_socket::create_secret_event): Create secret event using
- secret_event_name().
- (fhandler_socket::close_secret_event): Ditto.
- * shared.cc (shared_name): Create shared object name with "Global\"
- prefix on systems supporting terminal services.
- * wincap.cc: Set has_terminal_services capability throughout.
- (wincap_2003): New global object representing Windows 2003 Server
- capabilities.
- (wincapc::init): Accommodate Windows 2003 Server.
- * wincap.h (struct wincaps): Add has_terminal_services capability.
-
-2003-05-20 Charles Wilson <cygwin@cwilson.fastmail.fm>
-
- * winsup/cygwin/include/cygwin/version.h: Bump API minor version.
- * winsup/cygwin/include/cygwin/types.h: Define key_t as long long.
- * winsup/cygwin/cygwin.din: Add ftok, _ftok.
- * winsup/cygwin/ipc.cc (ftok): Rework implementation.
-
-2003-05-18 Joe Buehler <jhpb@hekimian.com>
-
- * spawn.cc (spawn_guts): Show more of command line in strace output.
-
-2003-05-15 Thomas Pfaff <tpfaff@gmx.net>
-
- * thread.h (pthread::init_mainthread): Remove function parameter.
- (MTinterface::Init): Ditto.
- * thread.cc (MTinterface::Init): Remove function parameter.
- Always initialize reent_key.
- (pthread::init_mainthread): Remove function parameter.
- (MTinterface::fixup_after_fork): Fix pthread::init_mainthread call.
- * dcrt0.cc (dll_crt_0_1) Fix calls to MTinterface::Init and
- pthread::init_mainthread.
- Call pthread::init_mainthread only when not forked.
-
-2003-05-15 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_proc.cc (format_proc_meminfo): Make swap memory output
- Linux style values.
-
-2003-05-13 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/config.h: Define __USE_INTERNAL_STAT64 appropriately.
-
-2003-05-12 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (CYGWIN_START): Define as crt0.o. Add to TARGET_LIBS.
- * fhandler.h (fhandler_virtual::fstat): Remove useless declaration.
- * fhandler_virtual.cc: Remove _COMPILING_NEWLIB define.
- * ipc.cc (ftok): Use stat64.
- * syscalls.cc (_fstat64): Remove alias.
- (_fstat): Ditto.
- (_stat): Ditto.
- (_fstat64_r): New function.
- (_fstat_r): Ditto.
- (_stat64_r): Ditto.
- (stat_r): Ditto.
- * crt0.o: New file, moved from newlib.
- * include/sys/param.h: Ditto.
- * include/sys/utime.h: Ditto.
- * include/sys/utmp.h: Ditto.
- * include/sys/dirent.h: Ditto. Expose different struct dirent,
- dependening of the environment.
-
-2003-05-11 Corinna Vinschen <corinna@vinschen.de>
-
- Replace ino_t by __ino64_t throughout.
-
-2003-05-11 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/types.h: Add key_t typedef.
-
-2003-05-10 Christopher Faylor <cgf@redhat.com>
-
- * dir.cc (readdir): Fill out new old_d_ino field.
- * fhandler.h (fhandler_base::namehash): Define as ino_t.
- (fhandler_base::get_namehash): Ditto.
- * fhandler_disk_file.cc (fhandler_disk_file::fstat_helper): Accommodate
- new 64 bit st_ino.
- * fhandler_socket.cc (fhandler_socket::fstat): Ditto.
- * path.cc (hash_path_name): Return ino_t.
- * syscalls.cc (stat64_to_stat32): Convert 64 bit inode to 32 bit.
- * winsup.h (hash_path_name): Declare as returning ino_t.
- * include/cygwin/stat.h (__stat32): Use 32 bit st_ino.
- (__stat64): Use 64 bit st_ino.
- * include/cygwin/types.h (__ino64_t): Define.
- (__ino32_t): Ditto.
- (ino_t): Define appropriately.
-
-2003-05-10 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (NEW_FUNCTIONS): All 32/64 from 0.79 API get
- leading underscore.
- * cygwin.din: Ditto.
- * include/cygwin/version.h: Bump API minor number.
-
-2003-05-09 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/config.h: New file.
-
-2003-05-09 Christopher Faylor <cgf@redhat.com>
-
- * cygthread.cc (cygthread::detach): Prioritize waiting for I/O
- completion over waiting for signal delivery.
-
-2003-05-06 Thomas Pfaff <tpfaff@gmx.net>
-
- * signal.cc (nanosleep): Do not wait twice for signal arrival.
-
-2003-05-03 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/types.h: Fix erroneous definition of ino_t from
- 2003-04-28.
-
-2003-05-03 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (chown_worker): Allow chown'ing of socket files.
-
-2003-04-30 Thomas Pfaff <tpfaff@gmx.net>
-
- * Makefile.in: Revert patch from 2003-04-17.
-
-2003-04-28 Brian Ford <ford@vss.fsi.com>
-
- * profil.h (PROFADDR): Prevent overflow when text segments are larger
- than 256k.
- * profil.c (profthr_func): Raise thread priority for more accurate
- sampling.
-
-2003-04-26 Christopher Faylor <cgf@redhat.com>
-
- * path.cc (hash_path_name): Use ino_t as type.
-
-2003-04-26 Christopher Faylor <cgf@redhat.com>
-
- * errno.cc (_sys_nerr): Fix compile error erroneously checked in on
- 2003-04-23.
-
-2003-04-25 Corinna Vinschen <corinna@vinschen.de>
-
- * include/netinet/ip.h: Include netinet/in_systm.h and netinet/in.h
- to allow standalone usage (autoconf).
-
-2003-04-23 Christopher Faylor <cgf@redhat.com>
-
- * fork.cc: Change SLOW_PID_REUSE to NO_SLOW_PID_REUSE and invert ifdef
- sense throughout.
-
-2003-04-22 Christopher Faylor <cgf@redhat.com>
-
- * select.cc (fhandler_pipe::ready_for_read): Assure that get_guard is
- called for successful non-blocking pipe reads.
-
-2003-04-22 Corinna Vinschen <corinna@vinschen.de>
-
- * include/inttypes.h: New file.
- * include/stdint.h: New file.
- * include/cygwin/in.h: Include stdint.h instead of sys/types.h.
- * include/cygwin/types.h: Include stdint.h. Remove typedefs for
- intN_t and uintN_t since these are defined in stdint.h now.
-
-2003-04-21 Christopher Faylor <cgf@redhat.com>
-
- * include/cygwin/version.h: Bump DLL major number to 1005. Change DLL
- minor number to 0. Bump API minor number.
-
-2003-04-20 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (CreateWindowStationA): Add.
- (SetProcessWindowStation): Add.
-
-2003-04-19 Christopher Faylor <cgf@redhat.com>
-
- * wincap.h (wincaps:pty_needs_alloc_console): New element.
- (wincapc:pty_needs_alloc_console): New function.
- * wincap.cc: Add pty_needs_alloc_console throughout.
- * fhandler_tty.cc (fhandler_tty_slave::open): Open an "invisible"
- console on first pty allocation.
-
-2003-04-18 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_tty.cc (fhandler_tty_slave::open): Allocate a console
- whenever a pty is allocated.
-
-2003-04-18 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Use ${nostdlib} variable.
-
-2003-04-18 Diego Biurrun <diego@biurrun.de>
-
- * fhandler_proc.cc (format_proc_cpuinfo): Change /proc/cpuinfo "vendor
- id" string to "vendor_id" to conform with Linux systems.
-
-2003-04-17 Christopher Faylor <cgf@redhat.com>
-
- * syscalls.cc (setsid): Don't call FreeConsole if ctty is already < 0.
-
-2003-04-17 Thomas Pfaff <tpfaff@gmx.net>
-
- * Makefile.in: Add finline-functions optimization to CXXFLAGS.
- * autoload.cc (LoadDLLprime): Rename std_dll_init to
- _std_dll_init.
- (std_dll_init): Remove name mangling prototype. Add attributes
- used and noinline.
- (wsock_init): Ditto.
- Change wsock_init to _wsock_init in wsock32 and ws2_32
- LoadDLLprime.
- * exceptions.cc (unused_sig_wrapper): Remove prototype. Add
- attributes used and noinline.
- * pwdgrp.h ((pwdgrp (passwd *&)): Remove inline code.
- (pwdgrp (__group32 *&)): Ditto.
- * grp.cc (pwdgrp (passwd *&)): Outline constructor.
- (pwdgrp (__group32 *&)): Ditto.
-
-2003-04-17 Thomas Pfaff <tpfaff@gmx.net>
-
- * thread.h (pthread::equal): New static method.
- * thread.cc: Rename pthread_equal to pthread::equal throughout.
- (pthread_equal): Use pthread::equal to compare threads ids.
-
-2003-04-15 Christopher Faylor <cgf@redhat.com>
-
- * termios.cc (setspeed): New function.
- (cfsetospeed): Use setspeed to set speed.
- (cfsetispeed): Use setspeed to set speed.
-
-2003-04-15 Chris January <chris@atomice.net>
-
- * autoload.cc: Add load statement for UuidCreate, and
- UuidCreateSequential.
- * cpuid.h: New file.
- * cygwin.din: Export gethostid.
- * fhandler_proc.cc (cpuid): Move to cpuid.h.
- (can_set_flag): Move to cpuid.h.
- * syscalls.cc (gethostid): New function.
- * version.h: Bump api minor version number to 83.
-
-2003-04-15 Thomas Pfaff <tpfaff@gmx.net>
-
- * thread.h (pthread_rwlock::release): New method.
- * thread.cc (pthread_rwlock::unlock): Use release to signal waiting
- threads.
- (pthread_rwlock::rdlock_cleanup): Signal waiting threads after a
- cancelation.
- (pthread_rwlock::wrlock_cleanup): Ditto.
-
-2003-04-13 Pierre Humblet <pierre.humblet@ieee.org>
-
- * mkvers.sh: Prefix day with 0 in date only when day < 10.
-
-2003-04-11 Pierre Humblet <pierre.humblet@ieee.org>
-
- * security.cc (get_info_from_sd): New function.
- (get_nt_attribute): Only call read_sd and get_info_from_sd.
- Return void.
- (get_file_attribute): Move sd error handling to get_info_from_sd.
- and symlink handling to fhandler_disk_file::fstat_helper.
- (get_nt_object_attribute): Only call read_sd and get_info_from_sd.
- Return void.
- (get_object_attribute): Remove symlink handling and simply return -1
- when ntsec is off.
- * fhandler_disk_file.cc (fhandler_disk_file::fstat_helper): For
- symlinks set the attribute, call get_file_attribute to get the ids
- and return. In the normal case call get_file_attribute with the
- addresses of the buffer ids and do not recheck if the file is a socket.
-
-2003-04-10 Christopher Faylor <cgf@redhat.com>
-
- * cygthread.cc (cygthread::stub): Initialize stack pointer earlier.
- (cygthread::simplestub): Initialize stack pointer.
- (cygthread::terminate_thread): Account for possibility that stack
- pointer has not been set. Issue warnings for unusual conditions.
-
-2003-04-10 Corinna Vinschen <corinna@vinschen.de>
-
- * regex/regex.h: Define regoff_t as _off_t.
- * regex/regex2.h: Ditto.
-
-2003-04-10 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din: Export wcscoll, wcswidth and wcwidth.
- * include/cygwin/version.h: Bump API minor number.
-
-2003-04-10 Christopher Faylor <cgf@redhat.com>
-
- * cygthread.h: Change 'avail' cygthread element to 'inuse' throughout.
- * cygthread.cc: Ditto.
- (cygthread::stub): Don't initialize already initialized events.
- (cygthread::freerange): Don't create thread here.
- (cygthread::cygthread): Create thread here. Die if thread not created.
- (cygthread::operator new): Simplify. Just grab a thread structure from
- the pool. Don't try to start the thread.
- (cygthread::terminate_thread): Don't close event handles. Just reuse
- them. Call MEM_RELEASE rather than MEM_DECOMMIT (from Joe uehler).
-
-2003-04-08 Bob Cassels <bcassels@abinitio.com>
-
- * fhandler_console.cc (fhandler_console::read) Handle certain key up
- events, to allow pasting accented characters and typing them using the
- "alt + numerics" sequences.
-
-2003-04-07 Christopher Faylor <cgf@redhat.com>
-
- * include/limits.h (IOV_MAX): Set to a number which is small enough to
- use in an array.
-
-2003-04-04 Christopher Faylor <cgf@redhat.com>
-
- * cygthread.h (cygthread::avail): Make LONG for easier use with
- Interlocked* functions.
- * cygthread.cc (cygthread::init): Eliminate unneeded muto.
- (cygthread::operator new): Don't lock. Instead change use of avail
- variable into tri-state: available (1), not available (-1),
- uninitialized (0).
- (cygthread::terminate_thread): Set avail to uninitialized.
- (cygthread::detach): Eliminate local 'avail'. Always set avail to 1
- unless signalled.
-
-2003-04-04 Christopher Faylor <cgf@redhat.com>
-
- * cygthread.cc (cygthread::operator new): Be more defensive when messing with
- threads that are marked "unavailable".
-
-2003-04-03 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_console.cc (CONVERT_LIMIT): Use a size for the 21st century.
-
-2003-04-03 Corinna Vinschen <corinna@vinschen.de>
-
- * external.cc (check_ntsec): Return general ntsec state on NULL
- filename. Check wincap.is_security() additionally.
-
-2003-04-02 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in (EXTRA_OFILES): Remove debugging object.
-
-2003-04-02 Jason Tishler <jason@tishler.net>
- Christopher Faylor <cgf@redhat.com>
-
- * external.cc (check_ntsec): New function.
- (cygwin_internal): Add CW_CHECK_NTSEC handling to call check_ntsec()
- from applications.
- * include/cygwin/version.h: Bump API minor number.
- * include/sys/cygwin.h (cygwin_getinfo_types): Add CW_CHECK_NTSEC.
-
-2003-04-02 Christopher Faylor <cgf@redhat.com>
-
- * cygthread.cc (cygthread::new): Add more defensive debugging.
-
-2003-04-01 Pierre Humblet <pierre.humblet@ieee.org>
-
- * fhandler.cc (fhandler_base::fstat): Set the uid and gid fields
- from the current effective ids.
- * fhandler_socket.cc (fhandler_socket::fstat): Keep the uid and gid set
- by fhandler_base::fstat.
- * security.cc (get_nt_attribute): Do not test wincap.has_security ().
- (get_nt_object_attribute): Ditto.
- (get_file_attribute): Add test for wincap.has_security ().
- (get_object_attribute): Ditto.
-
-2003-04-01 Corinna Vinschen <corinna@vinschen.de>
-
- * dir.cc: Change __off32_t to _off_t and __off64_t to _off64_t
- throughout.
- * fhandler.cc: Ditto.
- * fhandler.h: Ditto.
- * fhandler_clipboard.cc: Ditto.
- * fhandler_disk_file.cc: Ditto.
- * fhandler_dsp.cc: Ditto.
- * fhandler_floppy.cc: Ditto.
- * fhandler_mem.cc: Ditto.
- * fhandler_proc.cc: Ditto.
- * fhandler_process.cc: Ditto.
- * fhandler_random.cc: Ditto.
- * fhandler_registry.cc: Ditto.
- * fhandler_tape.cc: Ditto.
- * fhandler_termios.cc: Ditto.
- * fhandler_virtual.cc: Ditto.
- * fhandler_zero.cc: Ditto.
- * mmap.cc: Ditto.
- * pipe.cc: Ditto.
- * syscalls.cc: Ditto.
- * winsup.h: Ditto.
- * include/cygwin/stat.h: Ditto.
- * include/cygwin/types.h: Ditto. Remove definition of __off32_t
- and __off64_t.
-
-2003-03-31 Christopher Faylor <cgf@redhat.com>
-
- * exceptions.cc (setup_handler): Make sure winapi lock is released when
- exiting loop.
-
-2003-03-30 Christopher Faylor <cgf@redhat.com>
-
- * include/cygwin/fs.h: Remove unneeded include.
- * include/cygwin/in.h: Include sys/types.h rather than cygwin/types.h.
-
-2003-03-29 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (login): Fix comment.
- (logout): Ditto.
-
-2003-03-29 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc: Slightly cleanup all utmp functions.
- (login): Use mutex to secure against concurrent access to wtmp file.
- (logout): Rewrite using POSIX calls.
- (utmp_fd): Initialized to -1 now. Any value < 0 is treated as closed
- in subsequent functions.
- (utmp_readonly): New variable, indicating utmp file open for reading
- only.
- (internal_setutent): New function implementing setutent().
- (setutent): Call internal_setutent now.
- (endutent): Reset utmp_readonly.
- (getutent): Return immediately if utmp file can't be opened.
- (getutid): Ditto.
- (getutline): Ditto.
- (pututline): Ditto. Use mutex to secure against concurrent access to
- utmp file.
-
-2003-03-28 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Remove EXE_LDFLAGS. Fix fhandler_CFLAGS typo. Recognize .s suffix.
- * configure.in: Remove EXE_LDFLAGS.
- * configure: Regenerate.
-
-2003-03-28 Christopher Faylor <cgf@redhat.com>
-
- * include/sys/cygwin.h: Declare cygwin_internal as unsigned long.
- * external.cc (cygwin_internal): Define as unsigned long.
-
-2003-03-27 Christopher Faylor <cgf@redhat.com>
-
- * include/sys/cygwin.h: Move cygwin_internal outside of WINVER
- conditional.
-
-2003-03-27 Thomas Pfaff <tpfaff@gmx.net>
-
- * thread.cc: Change 1==foo equations to foo==1 throughout.
-
-2003-03-27 Thomas Pfaff <tpfaff@gmx.net>
-
- * thread.h: Change class names, methods, members and local vars
- according to the GNU coding style.
- * thread.cc: Ditto.
- * dcrt0.cc (dll_crt0_1): Rename pthread::initMainThread call to
- pthread::init_mainthread.
- * pthread.cc (pthead_getsequence_np): Rename pthread::isGoodObject
- call to pthread::is_good_object.
-
-2003-03-27 Joe Buehler <jhpb@draco.hekimian.com>
-
- * autoload.cc: Add RegGetKeySecurity().
- * security.cc (get_nt_object_attribute): Use RegGetKeySecurity() for
- performance.
-
-2003-03-25 Christopher Faylor <cgf@redhat.com>
- Joe Buehler <jhpb@draco.hekimian.com>
-
- * fork.cc (fork_parent): Don't copy signals from parent to child here.
- * sigproc.cc (proc_subproc): Copy signals from parent to child pinfo
- here.
-
-2003-03-23 Thomas Pfaff <tpfaff@gmx.net>
-
- * thread.h (class List): Move inline code inside class declaration.
- (List::forEach): Change callback parameter to template class member
- function pointer.
- (pthread_keys::fixup_before_fork): Change to inline. Use List::forEach
- to fixup keys.
- (pthread_keys::fixup_after_fork): Ditto.
- (pthread_keys::runAllDestructors): Ditto.
- (pthread_key::saveAKey): Remove.
- (pthread_key::restoreAKey): Ditto.
- (pthread_key::destroyAKey): Ditto.
- (pthread_key::run_destructor): Rename to runDestructor.
- (pthread_mutex::fixup_after_fork): Change to inline. Use List::forEach
- to fixup mutexes after a fork.
- (pthread_mutex::FixupAfterFork): New method.
- (pthread_mutex::mutexes): New member.
- (pthread_cond::fixup_after_fork): Change to inline. Use List::forEach
- to fixup conds after a fork.
- (pthread_cond::FixupAfterFork): New method.
- (pthread_cond::conds): New member.
- (pthread_rwlock::fixup_after_fork): Change to inline. Use
- List::forEach to fixup rwlocks after a fork.
- (pthread_rwlock::FixupAfterFork): New method.
- (pthread_rwlock::rwlocks): New member.
- (semaphore::fixup_after_fork): Change to inline. Use List::forEach to
- fixup mutexes after a fork.
- (semaphore::FixupAfterFork): New method.
- (semaphore::semaphores): New member.
- (MTinterface::mutexs): Remove.
- (MTinterface::conds): Ditto.
- (MTinterface::rwlocks): Ditto.
- (MTinterface::semaphores): Ditto.
- (pthread_equal): Add extern "C".
- (pthread_mutex_lock): Ditto.
-
- * thread.cc (MTinterface::fixup_after_fork): Change fixup_after_fork
- calls for pthread objects.
- (semaphore::conds): Instantiate.
- (pthread_cond::pthread_cond): Use List::Insert rather than custom list
- code.
- (pthread_cond::~pthread_cond): Use List::Remove rather than custom list
- code.
- (pthread_cond::fixup_after_fork): Rename to FixupAfterFork.
- (pthread_rwlock::rwlocks): Instantiate.
- (pthread_rwlock::pthread_crwlock): Use List::Insert rather than custom
- list code.
- (pthread_rwlock::~pthread_rwlock): Use List::Remove rather than custom
- list code.
- (pthread_rwlock::fixup_after_fork): Rename to FixupAfterFork.
- (pthread_key::saveAKey): Remove.
- (pthread_key::fixup_before_fork): Ditto.
- (pthread_key::restoreAKey): Ditto.
- (pthread_key::fixup_after_fork): Ditto.
- (pthread_key::destroyAKey): Ditto.
- (pthread_key::runAllDestructors): Ditto.
- (pthread_key::run_destructor): Rename to runDestructor.
- (pthread_mutex::mutexes): Instantiate.
- (pthread_mutex::pthread_mutex): Use List::Insert rather than custom
- list code.
- (pthread_mutex::~pthread_mutex): Use List::Remove rather than custom
- list code.
- (pthread_mutex::fixup_after_fork): Rename to FixupAfterFork.
- (semaphore::conds): Instantiate.
- (semaphore::semaphore): Use List::Insert rather than custom list code.
- (semaphores::~semaphore): Use List::Remove rather than custom list
- code.
- (semaphore::fixup_after_fork): Rename to FixupAfterFork.
-
-2003-03-22 Christopher Faylor <cgf@redhat.com>
-
- * pipe.cc (fhandler_pipe::dup): Don't dup input_handle if it doesn't
- exist.
-
-2003-03-22 Christopher Faylor <cgf@redhat.com>
-
- * syscalls.cc (unlink): Be more defensive when SetFileAttributes is
- called. Fix typo in debugging output.
-
-2003-03-21 Christopher Faylor <cgf@redhat.com>
-
- * fork.cc: Conditionalize use of slow_pid_reuse throughout. It's not
- necessary for newer versions of bash.
-
-2003-03-20 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::sendto): Restrict EPIPE and
- SIGPIPE handling to connection oriented sockets. Add comment.
-
-2003-03-19 Christopher Faylor <cgf@redhat.com>
-
- * sigproc.h (signal_fixup_after_exec): Eliminate argument in declaration.
- * exceptions.cc (signal_fixup_after_exec): Eliminate argument in
- definition. Don't reset signal handlers after spawm. Just treat like
- fork/exec.
- * dcrt0.cc (dll_crt0_1): Don't pass PROC_SPAWN argument to
- signal_fixup_after_exec.
- * syscalls.cc (unlink): Don't change attributes of file if not readonly/system.
- Ditto for resetting of arguments.
-
-2003-03-19 Corinna Vinschen <corinna@vinschen.de>
-
- * glob.c: Eliminate __INSIDE_CYGWIN__ preprocessor conditionals
- throughout.
-
-2003-03-19 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::fstat_helper): Fix
- wrong usage of S_IFDIR.
- * security.cc (get_attribute_from_acl): Ditto.
- (get_file_attribute): Fix wrong usage of S_IFLNK.
- (get_object_attribute): Ditto.
- (alloc_sd): Fix wrong usage of S_IFDIR.
- * syscalls.cc (chmod): Allow chmod'ing of socket files.
-
-2003-03-19 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/version.h (CYGWIN_VERSION_CHECK_FOR_USING_BIG_TYPES):
- Define.
- * glob.c (g_lstat): Use CYGWIN_VERSION_CHECK_FOR_USING_BIG_TYPES
- instead of numerical constants.
- (g_stat): Ditto.
-
-2003-03-18 Thomas Pfaff <tpfaff@gmx.net>
-
- * pthread.cc (pthread_attr_init): Remove
- (pthread_attr_destroy): Ditto.
- (pthread_attr_setdetachstate): Ditto.
- (pthread_attr_getdetachstate): Ditto.
- (pthread_attr_setstacksize): Ditto.
- (pthread_attr_getstacksize): Ditto.
- (pthread_attr_setinheritsched): Ditto.
- (pthread_attr_getinheritsched): Ditto.
- (pthread_attr_setschedparam): Ditto.
- (pthread_attr_getschedparam): Ditto.
- (pthread_attr_setschedpolicy): Ditto.
- (pthread_attr_getschedpolicy): Ditto.
- (pthread_attr_setscope): Ditto.
- (pthread_attr_getscope): Ditto.
- (pthread_attr_setstackaddr): Ditto.
- (pthread_attr_getstackaddr): Ditto.
- (pthread_key_create): Ditto.
- (pthread_key_delete): Ditto.
- (pthread_setspecific): Ditto.
- (pthread_getspecific): Ditto.
- (pthread_kill): Ditto.
- (pthread_sigmask): Ditto.
- (pthread_equal): Ditto.
- (pthread_mutex_lock): Ditto.
- (pthread_mutex_trylock): Ditto.
- (pthread_mutex_unlock): Ditto.
- (pthread_mutex_destroy): Ditto.
- (pthread_mutex_setprioceiling): Ditto.
- (pthread_mutex_getprioceiling): Ditto.
- (pthread_mutexattr_destroy): Ditto.
- (pthread_mutexattr_getprioceiling): Ditto.
- (pthread_mutexattr_getprotocol): Ditto.
- (pthread_mutexattr_getpshared): Ditto.
- (pthread_mutexattr_gettype): Ditto.
- (pthread_mutexattr_init): Ditto.
- (pthread_mutexattr_setprioceiling): Ditto.
- (pthread_mutexattr_setprotocol): Ditto.
- (pthread_mutexattr_setpshared): Ditto.
- (pthread_mutexattr_settype): Ditto.
- (pthread_cond_destroy): Ditto.
- (pthread_cond_signal): Ditto.
- (pthread_cond_broadcast): Ditto.
- (pthread_condattr_init): Ditto.
- (pthread_condattr_destroy): Ditto.
- (pthread_condattr_getpshared): Ditto.
- (pthread_condattr_setpshared): Ditto.
- (pthread_rwlock_destroy): Ditto.
- (pthread_rwlock_rdlock): Ditto.
- (pthread_rwlock_tryrdlock): Ditto.
- (pthread_rwlock_wrlock): Ditto.
- (pthread_rwlock_trywrlock): Ditto.
- (pthread_rwlock_unlock): Ditto.
- (pthread_rwlockattr_init): Ditto.
- (pthread_rwlockattr_getpshared): Ditto.
- (pthread_rwlockattr_setpshared): Ditto.
- (pthread_rwlockattr_destroy): Ditto.
- (pthread_getconcurrency): Ditto.
- (pthread_setconcurrency): Ditto.
- (pthread_getschedparam): Ditto.
- (pthread_setschedparam): Ditto.
-
- * thread.h (__pthread_attr_init): Remove prototype.
- (__pthread_attr_destroy): Ditto.
- (__pthread_attr_setdetachstate): Ditto.
- (__pthread_attr_getdetachstate): Ditto.
- (__pthread_attr_setstacksize): Ditto.
- (__pthread_attr_getstacksize): Ditto.
- (__pthread_attr_setinheritsched): Ditto.
- (__pthread_attr_getinheritsched): Ditto.
- (__pthread_attr_setschedparam): Ditto.
- (__pthread_attr_getschedparam): Ditto.
- (__pthread_attr_setschedpolicy): Ditto.
- (__pthread_attr_getschedpolicy): Ditto.
- (__pthread_attr_setscope): Ditto.
- (__pthread_attr_getscope): Ditto.
- (__pthread_attr_setstackaddr): Ditto.
- (__pthread_attr_getstackaddr): Ditto.
- (__pthread_key_create): Ditto.
- (__pthread_key_delete): Ditto.
- (__pthread_setspecific): Ditto.
- (__pthread_getspecific): Ditto.
- (__pthread_kill): Ditto.
- (__pthread_sigmask): Ditto.
- (__pthread_equal): Ditto.
- (__pthread_mutex_lock): Ditto.
- (__pthread_mutex_trylock): Ditto.
- (__pthread_mutex_unlock): Ditto.
- (__pthread_mutex_destroy): Ditto.
- (__pthread_mutex_setprioceiling): Ditto.
- (__pthread_mutex_getprioceiling): Ditto.
- (__pthread_mutexattr_destroy): Ditto.
- (__pthread_mutexattr_getprioceiling): Ditto.
- (__pthread_mutexattr_getprotocol): Ditto.
- (__pthread_mutexattr_getpshared): Ditto.
- (__pthread_mutexattr_gettype): Ditto.
- (__pthread_mutexattr_init): Ditto.
- (__pthread_mutexattr_setprioceiling): Ditto.
- (__pthread_mutexattr_setprotocol): Ditto.
- (__pthread_mutexattr_setpshared): Ditto.
- (__pthread_mutexattr_settype): Ditto.
- (__pthread_cond_destroy): Ditto.
- (__pthread_cond_signal): Ditto.
- (__pthread_cond_broadcast): Ditto.
- (__pthread_condattr_init): Ditto.
- (__pthread_condattr_destroy): Ditto.
- (__pthread_condattr_getpshared): Ditto.
- (__pthread_condattr_setpshared): Ditto.
- (__pthread_rwlock_destroy): Ditto.
- (__pthread_rwlock_rdlock): Ditto.
- (__pthread_rwlock_tryrdlock): Ditto.
- (__pthread_rwlock_wrlock): Ditto.
- (__pthread_rwlock_trywrlock): Ditto.
- (__pthread_rwlock_unlock): Ditto.
- (__pthread_rwlockattr_init): Ditto.
- (__pthread_rwlockattr_getpshared): Ditto.
- (__pthread_rwlockattr_setpshared): Ditto.
- (__pthread_rwlockattr_destroy): Ditto.
- (__pthread_getconcurrency): Ditto.
- (__pthread_setconcurrency): Ditto.
- (__pthread_getschedparam): Ditto.
- (__pthread_setschedparam): Ditto.
-
- * thread.cc: Rename __pthread_equal to pthread_equal throughout.
- Change pthread_self parameter appropriate.
- (__pthread_attr_init): Remove __ prefix. Change to extern "C".
- (__pthread_attr_destroy): Ditto.
- (__pthread_attr_setdetachstate): Ditto.
- (__pthread_attr_getdetachstate): Ditto.
- (__pthread_attr_setstacksize): Ditto.
- (__pthread_attr_getstacksize): Ditto.
- (__pthread_attr_setinheritsched): Ditto.
- (__pthread_attr_getinheritsched): Ditto.
- (__pthread_attr_setschedparam): Ditto.
- (__pthread_attr_getschedparam): Ditto.
- (__pthread_attr_setschedpolicy): Ditto.
- (__pthread_attr_getschedpolicy): Ditto.
- (__pthread_attr_setscope): Ditto.
- (__pthread_attr_getscope): Ditto.
- (__pthread_attr_setstackaddr): Ditto.
- (__pthread_attr_getstackaddr): Ditto.
- (__pthread_key_create): Ditto.
- (__pthread_key_delete): Ditto.
- (__pthread_setspecific): Ditto.
- (__pthread_getspecific): Ditto.
- (__pthread_kill): Ditto.
- (__pthread_sigmask): Ditto.
- (__pthread_equal): Ditto.
- (__pthread_mutex_lock): Ditto.
- (__pthread_mutex_trylock): Ditto.
- (__pthread_mutex_unlock): Ditto.
- (__pthread_mutex_destroy): Ditto.
- (__pthread_mutex_setprioceiling): Ditto.
- (__pthread_mutex_getprioceiling): Ditto.
- (__pthread_mutexattr_destroy): Ditto.
- (__pthread_mutexattr_getprioceiling): Ditto.
- (__pthread_mutexattr_getprotocol): Ditto.
- (__pthread_mutexattr_getpshared): Ditto.
- (__pthread_mutexattr_gettype): Ditto.
- (__pthread_mutexattr_init): Ditto.
- (__pthread_mutexattr_setprioceiling): Ditto.
- (__pthread_mutexattr_setprotocol): Ditto.
- (__pthread_mutexattr_setpshared): Ditto.
- (__pthread_mutexattr_settype): Ditto.
- (__pthread_cond_destroy): Ditto.
- (__pthread_cond_signal): Ditto.
- (__pthread_cond_broadcast): Ditto.
- (__pthread_condattr_init): Ditto.
- (__pthread_condattr_destroy): Ditto.
- (__pthread_condattr_getpshared): Ditto.
- (__pthread_condattr_setpshared): Ditto.
- (__pthread_rwlock_destroy): Ditto.
- (__pthread_rwlock_rdlock): Ditto.
- (__pthread_rwlock_tryrdlock): Ditto.
- (__pthread_rwlock_wrlock): Ditto.
- (__pthread_rwlock_trywrlock): Ditto.
- (__pthread_rwlock_unlock): Ditto.
- (__pthread_rwlockattr_init): Ditto.
- (__pthread_rwlockattr_getpshared): Ditto.
- (__pthread_rwlockattr_setpshared): Ditto.
- (__pthread_rwlockattr_destroy): Ditto.
- (__pthread_getconcurrency): Ditto.
- (__pthread_setconcurrency): Ditto.
- (__pthread_getschedparam): Ditto.
- (__pthread_setschedparam): Ditto.
-
-2003-03-18 Thomas Pfaff <tpfaff@gmx.net>
-
- * cygwin.din: Add pthread_rwlock_destroy, pthread_rwlock_init,
- pthread_rwlock_rdlock, pthread_rwlock_tryrdlock,
- pthread_rwlock_wrlock, pthread_rwlock_trywrlock,
- pthread_rwlock_unlock, pthread_rwlockattr_init,
- pthread_rwlockattr_getpshared, pthread_rwlockattr_setpshared,
- and pthread_rwlockattr_destroy.
- * include/cygwin/version.h: Bump API minor number.
- * include/pthread.h (PTHREAD_RWLOCK_INITIALIZER): Define a
- reasonable value.
- Add prototypes for pthread_rwlock_destroy, pthread_rwlock_init,
- pthread_rwlock_rdlock, pthread_rwlock_tryrdlock,
- pthread_rwlock_wrlock, pthread_rwlock_trywrlock,
- pthread_rwlock_unlock, pthread_rwlockattr_init,
- pthread_rwlockattr_getpshared, pthread_rwlockattr_setpshared,
- and pthread_rwlockattr_destroy.
- * thread.h (PTHREAD_ONCE_MAGIC): Remove superflous semicolon.
- (PTHREAD_RWLOCK_MAGIC): New define.
- (PTHREAD_RWLOCKATTR_MAGIC): Ditto.
- (pthread_rwlockattr): New class.
- (pthread_rwlock): Ditto.
- (MTinterface::rwlocks): New member.
- (MTinterface::MTinterface): Initialize rwlocks.
- Add prototypes for __pthread_rwlock_destroy,
- __pthread_rwlock_wrlock, __pthread_rwlock_trywrlock,
- __pthread_rwlock_unlock, __pthread_rwlockattr_init,
- __pthread_rwlockattr_getpshared, __pthread_rwlockattr_setpshared,
- and __pthread_rwlockattr_destroy.
- * thread.cc (MTinterface::Init): Initialize rwlock internal mutex.
- (MTinterface::fixup_after_fork): Fixup rwlocks after fork.
- (pthread_rwlockattr::isGoodObject): Implement.
- (pthread_rwlockattr::pthread_rwlockattr): Ditto.
- (pthread_rwlockattr::~pthread_rwlockattr): Ditto.
- (pthread_rwlock::initMutex): Ditto.
- (pthread_rwlock::pthread_rwlock): Ditto.
- (pthread_rwlock::~pthread_rwlock): Ditto.
- (pthread_rwlock::RdLock): Ditto.
- (pthread_rwlock::TryRdLock): Ditto.
- (pthread_rwlock::WrLock): Ditto.
- (pthread_rwlock::TryWrLock): Ditto.
- (pthread_rwlock::UnLock): Ditto.
- (pthread_rwlock::addReader): Ditto.
- (pthread_rwlock::removeReader): Ditto.
- (pthread_rwlock::lookupReader): Ditto.
- (pthread_rwlock::RdLockCleanup): Ditto.
- (pthread_rwlock::WrLockCleanup): Ditto.
- (pthread_rwlock::fixup_after_fork): Ditto.
- (pthread_rwlock::isGoodObject): Ditto.
- (pthread_rwlock::isGoodInitializer): Ditto.
- (pthread_rwlock::isGoodInitializerOrObject): Ditto.
- (pthread_rwlock::isGoodInitializerOrBadObject): Ditto.
- (__pthread_rwlock_destroy): Ditto.
- (pthread_rwlock::init): Ditto.
- (__pthread_rwlock_rdlock): Ditto.
- (__pthread_rwlock_tryrdlock): Ditto.
- (__pthread_rwlock_wrlock): Ditto.
- (__pthread_rwlock_trywrlock): Ditto.
-
-2003-03-18 Thomas Pfaff <tpfaff@gmx.net>
-
- * thread.h (pthread_cond::ExitingWait): Remove.
- (pthread_cond::mutex): Ditto.
- (pthread_cond::cond_access): Ditto.
- (pthread_cond::win32_obj_id): Ditto.
- (pthread_cond::TimedWait): Ditto.
- (pthread_cond::BroadCast): Ditto.
- (pthread_cond::Signal): Ditto.
- (pthread_cond::waiting): Change type to unsigned long.
- (pthread_cond::pending): New member.
- (pthread_cond::semWait): Ditto.
- (pthread_cond::mtxIn): Ditto.
- (pthread_cond::mtxOut): Ditto.
- (pthread_cond::mtxCond): Ditto.
- (pthread_cond::UnBlock): New method.
- (pthread_cond::Wait): Ditto.
- * thread.cc: Update list of cancellation points.
- (pthread_cond::pthread_cond): Rewrite.
- (pthread_cond::~pthread_cond): Ditto.
- (pthread_cond::TimedWait): Remove.
- (pthread_cond::BroadCast): Ditto.
- (pthread_cond::Signal): Ditto.
- (pthread_cond::UnBlock): Implement.
- (pthread_cond::Wait): Ditto.
- (pthread_cond::fixup_after_fork): Rewrite.
- (pthread_mutex::fixup_after_fork): Remove DETECT_BAD_APP
- conditional.
- (__pthread_cond_broadcast): Just return 0 if the condition is
- not initialized. Call pthread_cond::UnBlock to release blocked
- threads.
- (__pthread_cond_signal): Ditto.
- (__pthread_cond__dowait): Rewrite.
- (pthread_cond_timedwait): Add pthread_testcancel call. Fix
- waitlength calculation.
- (pthread_cond_wait): Add pthread_testcancel call.
-
-2003-03-18 Thomas Pfaff <tpfaff@gmx.net>
-
- * include/pthread.h (PTHREAD_MUTEX_NORMAL): New define.
- * thread.cc: Remove errno.h include.
- (pthread::precreate): Change internal mutex type to normal.
- (pthread_mutex::canBeUnlocked): Implement.
- (pthread_mutex::pthread_mutex): Initialize lock_counter with 0.
- (pthread_mutex::Lock): Rename to _Lock. Add self parameter.
- Change lock_counter logic. Update SetOwner call.
- (pthread_mutex::TryLock): Rename to _TryLock. Add self parameter.
- Change lock_counter logic. Update SetOwner call.
- (pthread_mutex::UnLock): Rename to _UnLock. Add self parameter.
- Change lock_counter logic.
- (pthread_mutex::Destroy): Rename to _Destroy. Update TryLock call.
- (pthread_mutex::SetOwner): Move to thread.h as inline.
- (pthread_mutex::LockRecursive): Ditto.
- (pthread_mutex::fixup_after_fork): Change lock_counter logic.
- (__pthread_mutexattr_settype): Add PTHREAD_MUTEX_NORMAL to valid
- types check.
- * thread.h: Include errno.h and limits.h.
- (MUTEX_LOCK_COUNTER_INITIAL): Remove.
- (MUTEX_OWNER_ANONYMOUS): New define.
- (pthread_mutex::canBeUnlocked): New static method.
- (pthread_mutex::lock_counter): Change type to unsigned long.
- (pthread_mutex::GetPthreadSelf): New method.
- (pthread_mutex::Lock): Call _Lock with pthread_self pointer.
- (pthread_mutex::TryLock): Call _TryLock with pthread_self pointer.
- (pthread_mutex::UnLock): Call _UnLock with pthread_self pointer.
- (pthread_mutex::Destroy): Call _Destroy with pthread_self pointer.
- (pthread_mutex::SetOwner): Moved from thread.cc as inline.
- (pthread_mutex::LockRecursive): Ditto.
- (pthread_mutex::_Lock): New method.
- (pthread_mutex::_TryLock): New method.
- (pthread_mutex::_UnLock): New method.
- (pthread_mutex::_Destroy): New method.
-
-2003-03-18 Christopher January <chris@atomice.net>
-
- * fhandler_proc.cc (format_proc_cpuinfo): Use IsProcessorFeaturePresent
- only on Windows NT. Read CPU Mhz value only on NT. Revert previous
- change so cpuid instruction is called even on non-NT systems.
-
-2003-03-17 Corinna Vinschen <corinna@vinschen.de>
-
- * glob.c (g_lstat): Change API minor test to match API minor number
- change in previous patch.
- (g_stat): Ditto.
-
-2003-03-17 Christopher Faylor <cgf@redhat.com>
-
- * include/cygwin/version.h: Reorganize last two api versions so that
- btowc and trunc exports show up before previous bump since there has
- been no exported version of the DLL with the 64 bit changes yet but
- 1.3.22 will have the btowc and trunc.
-
-2003-03-17 Christopher Faylor <cgf@redhat.com>
-
- * cygwin.din: Export btowc, trunc.
- * include/cygwin/version.h: Reflect new exports.
- * syscalls.cc (_stat): Rename to stat to avoid newlib wrapper.
- * syscalls.cc (_fstat): Ditto.
-
-2003-03-16 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_console.cc (fhandler_console::close): Correct check for
- current tty. Add debugging output when console is freed.
- (set_console_state_for_spawn): Add debugging output.
- * fhandler_tty.cc (fhandler_tty_slave::open): Don't decrement console
- open flag when vforking.
- * sigproc.cc (sigproc_terminate): Fix debugging output.
- * spawn.cc (handle): Eliminate second argument.
- (spawn_guts): Reflect elimination of argument change to handle.
- * syscalls.cc (setsid): Add debugging output when console is freed.
-
-2003-03-14 Christopher Faylor <cgf@redhat.com>
-
- * syscalls.cc (rename): Revert assumption that DELETE_ON_CLOSE works on
- Win9x.
-
-2003-03-13 Christopher Faylor <cgf@redhat.com>
-
- * include/cygwin/version.h: Bump DLL minor number to 23.
-
-2003-03-13 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (IsProcessorFeaturePresent): Add.
- * fhandler_proc.cc (format_proc_cpuinfo): Add case for 9x systems.
-
-2003-03-13 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_proc.cc (format_proc_cpuinfo): Fix vendor id in cpuid case.
-
-2003-03-13 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (cygwin_rcmd): Use correct file descriptor in call to fdsock.
- (cygwin_rexec): Ditto.
-
-2003-03-13 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_tty.cc (fhandler_tty_slave::close): Fix typo in debug
- output.
-
- * syscalls.cc (rename): Assume that DELETE_ON_CLOSE works on Win9x.
-
-2003-03-11 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::dup): Don't call
- fhandler_base::dup() but call DuplicateHandle directly instead to have
- control over socket inheritence.
-
-2003-03-11 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::dup): On NT systems avoid
- using WinSock2 socket duplication methods. Add comment.
-
-2003-03-11 Pierre Humblet <pierre.humblet@ieee.org>
-
- * fhandler_socket.cc (fhandler_socket::fixup_after_fork):
- Set io_handle to INVALID_SOCKET in case of failure.
- (fhandler_socket::dup): Return 0 if the io_handle is valid.
-
-2003-03-10 Corinna Vinschen <corinna@vinschen.de>
-
- * sec_acl.cc (setacl): Don't handle DELETE flag specially.
- * security.cc (alloc_sd): Ditto.
-
-2003-03-09 Corinna Vinschen <corinna@vinschen.de>
-
- * winver.rc: Change Copyright hint to include 2003.
-
-2003-03-09 Corinna Vinschen <corinna@vinschen.de>
-
- Switch to 32/64 datatypes:
- * Makefile.in (OBSOLETE_FUNCTIONS): Add open acl aclcheck aclfrommode
- aclfrompbits aclfromtext aclsort acltomode acltopbits acltotext chown
- facl fchown fgetpos fopen freopen fseeko fsetpos fstat ftello
- ftruncate getegid geteuid getgid getgrent getgrgid getgrnam getgroups
- getpwuid getpwuid_r getuid initgroups lchown lseek lstat mknod mmap
- seekdir setegid seteuid setgid setgroups setregid setreuid setuid stat
- telldir truncate.
- (NEW_FUNCTIONS): Add _open64 acl32 aclcheck32 aclfrommode32
- aclfrompbits32 aclfromtext32 aclsort32 acltomode32 acltopbits32
- acltotext32 chown32 facl32 fchown32 fgetpos64 fopen64 freopen64
- fseeko64 fsetpos64 fstat64 ftello64 ftruncate64 getegid32 geteuid32
- getgid32 getgrent32 getgrgid32 getgrnam32 getgroups32 getpwuid32
- getpwuid_r32 getuid32 initgroups32 lchown32 lseek64 lstat64 mknod32
- mmap64 seekdir64 setegid32 seteuid32 setgid32 setgroups32 setregid32
- setreuid32 setuid32 stat64 telldir64 truncate64 to substitute the
- above.
- * cygserver_shm.h (class client_request_shm): Change uid_t and gid_t
- members to __uid32_t and __gid32_t.
- * cygwin.din: Add symbols acl32 aclcheck32 aclfrommode32
- aclfrompbits32 aclfromtext32 aclsort32 acltomode32 acltopbits32
- acltotext32 facl32 fgetpos64 fopen64 freopen64 fseeko64 fsetpos64
- _fstat64 ftello64 _lseek64 mknod32 _open64.
- * glob.c: Include perprocess.h.
- (globtilde): Call getpwuid32 and getuid32 instead of getpwuid and
- getuid.
- (g_lstat): Check for applications API version to call the appropriate
- typed gl_lstat function.
- (g_stat): Ditto for gl_stat.
- * shm.cc (client_request_shm::client_request_shm): Call geteuid32
- and getegid32 instead of geteuid and getegid throughout.
- * syscalls.cc (_open64): New alias for open.
- (_lseek64): New alias for lseek64.
- (_fstat64): New alias for fseek64.
- (mknod32): New function.
- (mknod): Calls mknod32 now.
- * winsup.h: Make function declarations for getuid32, geteuid32,
- and getpwuid32 accessible for plain C sources. Add declarations
- for getegid32 and getpwnam.
- * include/cygwin/version.h: Bum API minor number to 78.
- * include/sys/cygwin.h: Guard C++ specific members of struct
- per_process against inclusion in plain C sources.
- * include/sys/mman.h (mman): Add guard to avoid type clash when
- compiling Cygwin.
-
-2003-03-09 Christopher Faylor <cgf@redhat.com>
-
- * include/cygwin/version.h: Bump DLL minor number to 22.
-
-2003-03-09 Christopher Faylor <cgf@redhat.com>
-
- Do some minor reformatting of 'extern "C"' use throughout.
-
-2003-03-06 Christopher January <chris@atomice.net>
-
- * autoload.cc (GetSystemTimes): Define new autoload function.
- * fhandler_proc.cc (proc_listing): Add cpuinfo and partitions entries.
- (fhandler_proc::fill_filebuf): Add PROC_CPUINFO and PROC_PARTITIONS
- cases.
- (format_proc_uptime): Use GetSystemTimes if available.
- (read_value): New macro.
- (print): New macro.
- (cpuid): New function.
- (can_set_flag): New function.
- (format_proc_cpuinfo): New function.
- (format_proc_partitions): New function.
-
-2003-03-09 Christopher Faylor <cgf@redhat.com>
-
- * syscalls.cc (unlink): Attempt to be more clever about setting
- attributes of file. Only open file in query mode to avoid having to
- mess with security stuff for reading.
-
-2003-03-09 Corinna Vinschen <corinna@vinschen.de>
-
- * rmsym: Fix regular expression.
-
-2003-03-09 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Change from using new-* to cygwin0 for temporary
- targets.
-
-2003-03-09 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/socket.h: Set SOMAXCONN to Winsock2 value.
-
-2003-03-08 Christopher Faylor <cgf@redhat.com>
-
- * syscalls.cc (unlink): Always attempt to use FILE_FLAG_CLOSE_ON_DELETE
- to delete files since this allows us to preserve the protection of hard
- linked files.
- (link): Generate full path for potentially recalculated .lnk target.
-
-2003-03-08 Christopher Faylor <cgf@redhat.com>
-
- Revert below changes regarding _pinfo::cmdline.
-
-2003-03-08 Corinna Vinschen <corinna@vinschen.de>
-
- * external.cc (cygwin_internal): Change n to __off64_t to match change
- of _pinfo::cmdline.
- * fhandler.h (class fhandler_virtual): Change filesize member to
- __off64_t.
- * fhandler_proc.cc (format_proc_meminfo): Change to return __off64_t.
- (format_proc_stat): Ditto.
- (format_proc_uptime): Ditto.
- * fhandler_process.cc (format_process_stat): Ditto.
- (format_process_status): Ditto.
- (format_process_statm): Ditto.
- * pinfo.cc (_pinfo::cmdline): Expect __off64_t parameter.
- * pinfo.h (class _pinfo): Change declaration of cmdline accordingly.
-
-2003-03-07 Christopher Faylor <cgf@redhat.com>
-
- * path.h (PATH_LNK): New enum val.
- (path_conv::is_lnk_symlink): New function. True if path represents
- .lnk style symlink.
- * path.cc (check_shortcut): Set PATH_LNK in pflags when appropriate.
- (symlink_info::check): Ditto. Remove PATH_LNK from pflags initially.
- * syscalls.cc (unlink): Always remove readonly attribute from a symlink
- regardless of type.
- (link): (from Corinna Vinschen) Allow links to symlinks. Reset
- attributes on a symlink after successful link creation.
- (chmod): Use is_lnk_symlink where appropriate.
- (rename): Ditto.
-
-2003-03-07 Pierre Humblet <pierre.humblet@ieee.org>
-
- * tty.cc (create_tty_master): Call GetComputerName instead of
- cygwin_gethostname. Set ut_id.
- * syscalls.cc (login): Call endutent.
- (setutent): Do not seek after a fresh open.
-
-2003-03-07 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (seteuid32): Fix formatting.
-
-2003-03-04 Thomas Pfaff <tpfaff@gmx.net>
-
- * thread.cc (MTinterface::fixup_after_fork): Initialize mainthread
- prior to pthread objects.
-
-2003-03-04 Jason Tishler <jason@tishler.net>
-
- * fhandler_socket.cc (fhandler_socket::dup): Initialize type.
-
-2003-03-03 Christopher Faylor <cgf@redhat.com>
-
- * fhandler.h (fhandler_tty_slave::close): Declare new function.
- (fhandler_tty_slave::dup): Declare new function.
- (fhandler_tty_slave::fixup_after_function): Declare new function.
- * fhandler_tty.cc (fhandler_tty_slave_open): Only increment
- fhandler_console::open_fhs when associated with a pty.
- (fhandler_tty_slave::close): Define new function. Decrement
- fhandler_console::open_fhs when associated with a pty.
- (fhandler_tty_slave::dup): Define new function. Increment
- fhandler_console::open_fhs when associated with a pty.
- (fhandler_tty_slave::fixup_after_fork): Define new function. Increment
- fhandler_console::open_fhs when associated with a pty.
-
-2003-03-03 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_tty.cc (fhandler_pty_slave::open): Grudgingly increment
- fhandler_console::open_fhs here.
- (fhandler_pty_slave::close): Ditto for close.
-
-2003-03-02 Christopher Faylor <cgf@redhat.com>
-
- * lib/getopt.c: Refresh from NetBSD sources.
-
-2003-03-02 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_console.cc (fhandler_console::close): Don't decrement
- in use counter if in vfork fixup stage.
-
-2003-03-02 Christopher Faylor <cgf@redhat.com>
-
- * lib/getopt.c: Nuke use of unneeded BSDisms.
-
-2003-03-02 Christopher Faylor <cgf@redhat.com>
-
- * dll_init.cc (dll_list::load_after_fork): Don't revert to LoadLibrary
- if LoadLibraryEx fails.
- * dtable.cc (dtable::dec_console_fds): Eliminate.
- (dtable::release): Don't treat console specially.
- (dtable::build_fhandler): Ditto.
- * dtable.h (console_fds): Eliminate.
- (dtable::dec_console_fds): Eliminate.
- (dtable::inc_console_fds): Eliminate.
- * fhandler.h (fhandler_console::open_fhs): New static element.
- * fhandler_console.cc (fhandler_console::open): Increment open_fs.
- (fhandler_console::close): Call FreeConsole if no more open consoles
- and ctty is not associated with the console.
- * syscalls.cc (setsid): Simplify check for when to call FreeConsole.
- (check_pty_fds): Eliminate definition.
- * winsup.h (check_pty_fds): Eliminate declaration.
-
-2003-03-02 Christopher Faylor <cgf@redhat.com>
-
- * dll_init.cc (dll_list::load_after_fork): Fix typo where result of
- LoadLibrary was ignored.
-
-2003-03-01 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::bind): Open and write socket
- file using Win32 calls.
-
-2003-03-01 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (get_inet_addr): Open and read socket file using
- Win32 calls.
-
-2003-02-28 Christopher Faylor <cgf@redhat.com>
-
- * cygwin.din: Wrap atexit and exit with cygwin, thread-safe functions.
- * dcrt0.cc (cygwin_atexit): New function.
- (cygwin_exit): Ditto.
-
-2003-02-28 Pierre Humblet <pierre.humblet@ieee.org>
-
- * syscalls.cc (fstat64): Pass get_name () to pc.
- (access): Pass fn to stat_worker.
-
-2003-03-27 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (class sock_event): New class managing Winsock
- events for interruptible socket calls.
- (fhandler_socket::connect): Move support for interruptible call to
- class sock_event. Use class object instead.
- (fhandler_socket::accept): Ditto. Remove useless casts.
-
-2003-03-27 Thomas Pfaff <tpfaff@gmx.net>
-
- * fhandler_socket.cc (fhandler_socket::connect): Add support for
- an interruptable connect.
-
-2003-02-27 Pierre Humblet <pierre.humblet@ieee.org>
-
- * uinfo.cc (internal_getlogin): Only update user.groups.pgsid
- if the call to set the primary group succeeds.
-
-2003-02-27 Christopher Faylor <cgf@redhat.com>
-
- * cygthread::detach: Improve error message.
-
-2003-02-26 Pierre Humblet <pierre.humblet@ieee.org>
-
- * sec_helper.cc (get_sids_info): debug_print owner_sid and group_sid.
-
-2003-02-25 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (mmap64): Fix returned address by taking the granularity
- into account.
-
-2003-02-23 Pierre Humblet <pierre.humblet@ieee.org>
-
- * syslog.cc (syslog): Do not unlock the file before closing it
- and remove debug_printf about stream errors.
-
-2003-02-22 Christopher Faylor <cgf@redhat.com>
-
- * cygmalloc.h: Remove MORECORE_CANNOT_TRIM. It's not true.
- # cygwin.din: Export mallinfo.
- # malloc_wrapper.cc (mallinfo): New function.
-
-2003-02-22 Pierre Humblet <pierre.humblet@ieee.org>
-
- * syslog.cc (syslog): Do not print the Windows pid. Print the Cygwin
- pid as an unsigned decimal. On Win95 print a timestamp and attempt to
- lock the file up to four times in 3 ms.
-
-2003-02-21 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::fhandler_socket): Fix compiler
- warning.
- (fhandler_socket::fstat): Simplify. Set st_uid/st_gid to effective
- uid/gid of current process in case of open sockets.
-
-2003-02-21 Corinna Vinschen <corinna@vinschen.de>
-
- * dtable.cc (dtable::build_fhandler_from_name): Set some fhandler
- data on sockets to evaluate AF_LOCAL sockets correctly.
- (dtable::build_fhandler): Set unit number on sockets.
- * fhandler.h (fhandler_socket): Add unit number.
- (fhandler_socket::get_unit): New method.
- * fhandler_socket.cc (fhandler_socket::fhandler_socket): Set unit
- number.
- (fhandler_socket::fstat): Reorganize to return more Linux-like
- values.
- * net.cc: include ctype.h.
- (fdsock): Set unit number when building fhandler.
- * path.cc (path_conv::check): Set device type to FH_SOCKET if file
- is a AF_UNIX socket.
- (get_devn): Evaluate unit for virtual socket devices.
- (win32_device_name): Set windows path for sockets to unix_path with
- just backslashes to keep the different names.
- * syscalls.cc (fstat64): Don't override st_ino, st_dev and st_rdev
- for sockets.
- (stat_worker): Ditto.
-
-2003-02-21 Pierre Humblet <pierre.humblet@ieee.org>
-
- * autoload.cc (AccessCheck): Add.
- (DuplicateToken): Add.
- * security.h (check_file_access): Declare.
- * syscalls.cc (access): Convert path to Windows, check existence
- and readonly attribute. Call check_file_access instead of acl_access.
- * security.cc (check_file_access): Create.
- * sec_acl (acl_access): Delete.
-
-2003-02-19 Christopher Faylor <cgf@redhat.com>
-
- * fhandler.cc (fhandler_base::open): Move some filesystem specific
- stuff.
- (fhandler_disk_file::open): Accept some filesystem specific stuff.
- * sigproc.cc (wait_for_sigthread): Become slightly more thread safe.
- (sig_send): Don't assume that signal thread is ready.
-
-2003-02-20 Corinna Vinschen <corinna@vinschen.de>
-
- * wincap.h (wincap): Remove unnecessary definition of
- supports_sparse_files.
- * wincap.cc: Ditto.
-
-2003-02-20 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::opendir): Check descriptor
- created by cygheap_fdnew constructor.
- * fhandler_virtual.cc (fhandler_virtual::opendir): Ditto.
- * fhandler_socket.cc (fhandler_socket::accept): Ditto and move
- creation of file descriptor behind blocking OS call.
- * net.cc (cygwin_socket): Ditto.
- (cygwin_rcmd): Ditto.
- (cygwin_rresvport): Ditto.
- (cygwin_rexec): Ditto.
- (socketpair): Ditto.
-
-2003-02-20 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (GetCompressedFileSize): Add.
- * fhandler_disk_file.cc (fhandler_disk_file::fstat_helper): Compute
- st_blocks value from GetCompressedFileSize() if available.
-
-2003-02-18 Vaclav Haisman <V.Haisman@sh.cvut.cz>
-
- * wincap.h (wincaps::supports_sparse_files): New flag.
- (wincapc::supports_sparse_files): New method.
- * wincap.cc (wincap_unknown): Define value for the new flag.
- (wincap_95): Ditto.
- (wincap_95osr2): Ditto.
- (wincap_98): Ditto.
- (wincap_98se): Ditto.
- (wincap_me): Ditto.
- (wincap_nt3): Ditto.
- (wincap_nt4): Ditto.
- (wincap_nt4sp4): Ditto.
- (wincap_2000): Ditto.
- (wincap_xp): Ditto.
- * path.h (path_conv::fs_flags): New method.
- * fhandler_disk_file.cc: Include winioctl.h for DeviceIoControl.
- (fhandler_disk_file::open): Set newly created and truncated files as
- sparse on platforms that support it.
-
-2003-02-17 Pierre Humblet <pierre.humblet@ieee.org>
-
- * grp.cc (internal_getgroups): Handle properly tokens with
- no groups. Fix bug introduced on 2003-02-04.
-
-2003-02-16 Christopher Faylor <cgf@redhat.com>
-
- * cygwin.din: Export all appropriate newlib libm functions. Sort.
- * include/cygwin/version.h: Bump API minor number.
-
-2003-02-15 Christopher Faylor <cgf@redhat.com>
-
- * cygwin.din: Export all appropriate newlib libc functions.
- * include/cygwin/version.h: Bump API minor number.
-
-2003-02-14 Jason Tishler <jason@tishler.net>
-
- * mmap.cc (mprotect): Add missing break.
-
-2003-02-13 Christopher Faylor <cgf@redhat.com>
-
- * exceptions.cc (try_to_debug): Don't reset priority when returning
- from non-waitloop call.
-
-2003-02-13 Vaclav Haisman <V.Haisman@sh.cvut.cz>
- Christopher Faylor <cgf@redhat.com>
-
- * fhandler_console.cc (fhandler_console::write_normal): Use MessageBeep
- for bell sound.
- * autoload.cc (MessageBeep): Add.
-
-2003-02-13 Christopher Faylor <cgf@redhat.com>
-
- * include/cygwin/types.h: Use correct ifdef guard for u_ definitions.
-
-2003-02-13 Christopher Faylor <cgf@redhat.com>
-
- * environ.cc (environ_init): Use strechr.
-
-2003-02-13 Christopher Faylor <cgf@redhat.com>
-
- * include/cygwin/in.h (sockaddr_in): Fix typo.
-
-2003-02-12 Christopher Faylor <cgf@redhat.com>
-
- * path.h (path_conv): Reorganize slightly.
-
-2003-02-12 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_tty.cc (process_input): Add sanity check to ensure that
- console typeahead is cleared on signal.
-
-2003-02-12 Christopher Faylor <cgf@redhat.com>
-
- * spawn.cc (linebuf::~linebuf): Resurrect commented out (for
- debugging?) code.
-
-2003-02-10 Ralf Habacker <ralf.habacker@freenet.de>
-
- * include/cygwin/in.h (in_attr_t): Define new type.
- * include/arpa/inet.h (inet_addr): Change return type to in_addr_t.
- (inet_lnaof): Ditto.
- (inet_netof): Ditto.
- (inet_network): Ditto.
-
-2003-02-10 Christopher Faylor <cgf@redhat.com>
-
- * include/cygwin/types.h: Move many *_t typedefs here. Protect them
- with ifdefs.
- * fhandler_disk_file.cc (fhandler_disk_file::fstat): Change ntsec_atts to mode_t.
- * security.cc (get_attribute_from_acl): Accept mode_t attribute.
- (get_nt_attribute): Ditto.
- (get_file_attribute): Ditto.
- (get_nt_object_attribute): Ditto.
- (get_object_attribute): Ditto.
- * security.h: Reflect above changes.
- * syscalls.cc (chown_worker): Change attrib to mode_t.
-
-2003-02-08 Christopher Faylor <cgf@redhat.com>
-
- * include/cygwin/version.h: Bump DLL minor number to 21.
-
-2003-02-07 Christopher Faylor <cgf@redhat.com>
-
- * malloc.cc (DEFAULT_MMAP_THRESHOLD): Bump down to 16MB thanks to below
- changes.
-
-2003-02-07 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (mmap_record::alloc_map): De-inline. Add offset and length
- parameter. Only protect pages actually unused currently. Do job
- of map_map() when initializing a map.
- (mmap_record::map_map): Reduce functionality for the reuse case
- of private anonymous mapping.
- (mmap_record::fixup_map): Format change.
- (list::add_record): Add offset and length parameter to call
- mmap_record::alloc_map() correctly.
- (mmap64): Rename `l' variable to `map_list'. Accommodate above changes.
- (munmap): Rename `l' variable to `map_list'.
- (msync): Ditto.
- (fhandler_disk_file::mmap): Streamline code.
- (mprotect): Ditto.
- (fixup_mmaps_after_fork): Rename `l' variable to `map_list'.
-
-2003-02-07 Vaclav Haisman <V.Haisman@sh.cvut.cz>
- Christopher Faylor <cgf@redhat.com>
-
- * exceptions.cc (try_to_debug): Set priority of current thread rather
- than the main thread. Make busy waiting loop less busy. Restore
- priority when function returns.
-
-2003-02-07 Christopher Faylor <cgf@redhat.com>
-
- * malloc.cc (DEFAULT_MMAP_THRESHOLD): Set high to avoid mmaps.
-
-2003-02-07 Christopher Faylor <cgf@redhat.com>
-
- * pipe.cc (fhandler_pipe::close): Avoid extraneous this->.
-
-2003-02-06 Christopher Faylor <cgf@redhat.com>
-
- * heap.cc (heap_init): Remove debugging code.
-
-2003-02-06 Pierre Humblet <pierre.humblet@ieee.org>
-
- * security.h: Introduce names UNKNOWN_UID and UNKNOWN_GID and delete
- declaration of is_grp_member.
- * uinfo.cc (internal_getlogin): Use UNKNOWN_GID.
- * passwd.cc (pwdgrp::read_passwd): Use UNKNOWN_UID.
- * grp.cc (pwdgrp::read_group): Change group name to provide better
- feedback.
- (getgrgid): Use gid16togid32.
- * sec_helper.cc (is_grp_member): Delete.
-
-2003-02-05 Christopher Faylor <cgf@redhat.com>
-
- * path.cc: Change 'to_posix_p' to 'to_posix' throughout.
- (conv_path_list_buf_size): Accommodate relative paths.
-
-2003-02-05 Christopher Faylor <cgf@redhat.com>
-
- * path.cc (etc::dir_changed): Fix debug printf.
-
-2003-02-05 Corinna Vinschen <corinna@vinschen.de>
-
- * sec_acl.cc (setacl): Move all permission settings to beginning of
- loop. Set default rights to same values as in alloc_sd(). Set DELETE
- for owner and default owner only if S_IWOTH is given.
-
-2003-02-05 Pierre Humblet <pierre.humblet@ieee.org>
-
- * sec_acl.cc: Change all __aclent16_t to __aclent32_t except in
- wrapper function definitions. Replace call to the aclXYZ functions by
- calls aclXYZ32.
- (searchace): Change type of third argument to __uid32_t and use
- ILLEGAL_UID instead of -1;
- (setacl): Remove some initializations. Only give STANDARD_RIGHTS_WRITE
- for S_IWOTH. Replace -1 by ILLEGAL_UID.
- (getacl): Change type of owner_sid, group_sid and ace_sid to cygpsid.
- In last else clause, suppress second call to ace_sid.get_id and use
- TRUE in first call. Replace EqualSid by ==.
- (acl_access): Call internal_getgroups in USER and GROUP cases.
- (acecmp: Define static.
- (acl32): Create from 16 bit type.
- (facl32): Ditto.
- (lacl32): Ditto.
- (aclcheck32): Ditto.
- (aclsort32): Ditto.
- (acltomode32): Ditto.
- (aclfrommode32): Ditto.
- (acltopbits32): Ditto.
- (aclfrompbits32): Ditto.
- (acltotext32): Ditto.
- (aclfromtext32): Ditto, and use strechr.
- (acl16to32): Create.
- (acl): Make it a wrapper function.
- (facl): Ditto.
- (lacl): Ditto.
- (aclcheck): Ditto.
- (aclsort): Ditto.
- (acltomode): Ditto.
- (aclfrommode): Ditto.
- (acltopbits): Ditto.
- (aclfrompbits): Ditto.
- (acltotext): Ditto.
- (aclfromtext): Ditto.
- * security.cc (write_sd): Call set_process_privilege and check
- ownership.
- (alloc_sd): Remove call to set_process_privilege and the owner check.
-
-2003-02-05 Christopher Faylor <cgf@redhat.com>
-
- * include/sys/cygwin.h: Use C-style comments.
-
-2003-02-05 Pierre Humblet <pierre.humblet@ieee.org>
-
- * sec_helper.cc (get_sids_info): New function.
- * security.cc (extract_nt_dom_user): Simplify with strechr.
- (get_user_groups): Initialize glen to MAX_SID_LEN.
- (get_user_local_groups): Ditto.
- (get_attribute_from_acl): Define ace_sid as cygpsid.
- (get_nt_attribute): Define owner_sid and group_sid as cygpsid.
- Call get_sids_info instead of cygsid.get_{u,g}id and is_grp_member.
- (get_nt_object_attribute): Ditto.
- (alloc_sd): Define ace_sid as cygpsid.
-
-2003-02-04 Thomas Pfaff <tpfaff@gmx.net>
-
- * syscalls.cc (struct system_cleanup_args): New struct.
- (system_cleanup): New function.
- (system): Use pthread_cleanup_push and _pop to save and restore
- signal handlers and sigprocmask.
-
-2003-02-04 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (symlink): Create security attributes so that only the
- user can modify the symlink.
- * security.cc (set_security_attribute): Remove symlink special
- handling.
-
-2003-02-04 Pierre Humblet <pierre.humblet@ieee.org>
-
- * grp.cc (internal_getgroups): Do not return without closing
- the process handle.
-
-2003-02-04 Pierre Humblet <pierre.humblet@ieee.org>
-
- * security.h (class cygpsid): New class.
- (class cygsid): Use cygpsid as base. Remove members psid, get_id,
- get_uid, get_gid, string, debug_printf and the == and != operators.
- (cygsidlist::clear_supp): Only do work if setgroups has been called.
- * sec_helper.cc: Define sid_auth NO_COPY.
- (cygpsid::operator==): New operator.
- (cygpsid::get_id): New function.
- (cygpsid::string): New function.
- (cygsid::string): Delete.
- (cygsid::get_id): Delete.
- * pwdgrp.h: Change arguments of internal_getpwsid,
- internal_getgrsid and internal_getgroups to cygpsid.
- * passwd.cc (internal_getpwsid): Change argument from cygsid to cygpsid.
- * grp.cc (internal_getgrsid): Ditto.
- (internal_getgroups): Ditto.
-
-2003-02-03 Christopher Faylor <cgf@redhat.com>
-
- Eliminate most unneeded this-> pointers throughout.
-
-2003-02-03 Pierre Humblet <pierre.humblet@ieee.org>
-
- * security.h: Add third argument to set_process_privilege.
- * autoload.cc: Add OpenThreadToken.
- * sec_helper.cc (set_process_privilege): Add and use use_thread
- argument.
- * security.cc (alloc_sd): Modify call to set_process_privilege.
- Remember the result in each process. If failed and file owner is not
- the user, fail.
-
-2003-02-03 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::recvfrom): Return buffer
- length and don't set errno in case of WSAEMSGSIZE error.
- (fhandler_socket::recvmsg): Ditto.
-
-2003-02-01 Christopher Faylor <cgf@redhat.com>
-
- * grp.cc (getgrent32): Only refresh group entries when at beginning.
- (internal_getgrsid): Only refresh if uninitialized.
- (internal_getgrent): Ditto.
- * passwd.cc (getpwent): Only refresh passwd entries when at beginning.
- (pwdgrp::read_passwd): linebuf *cannot* be NO_COPY.
- (internal_getpwsid): Only refresh if uninitialized.
- (getpass): No need to refresh passwd data here.
- * pwdgrp.h (refresh): Eliminate default.
-
-2003-01-31 Christopher Faylor <cgf@redhat.com>
-
- * dlfcn.cc (dlerror): Only report load errors once per error.
-
-2003-01-31 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_serial.cc (fhandler_serial::open): Avoid extraneous setting
- of res.
-
- * termios.cc (tcsetattr): Correctly record errno after tcsetattr call.
-
-2003-01-31 Troy Curtiss <troyc@usa.net>
-
- * fhandler_serial.cc (fhandler_serial::tcsetattr): Add error-checking
- so that if any Win32 SetComm*() calls fail, errno gets set to EINVAL
- and tcsetattr() returns -1. Catch invalid bitrates, mostly. If baud
- rate setting is B0, just drop DTR and leave Win32 DCB bitrate as-is
- since 0 is not a valid Win32 setting.
- (fhandler_serial::tcgetattr): If DTR is low, populate the bitrate as
- B0, otherwise get it from the DCB.
-
-2003-01-31 Christopher Faylor <cgf@redhat.com>
-
- * passwd.cc (pwdgrp::read_passwd): linebuf *must* be static (from
- Pierre Humblet).
- * pwdgrp.h (pwdgrp::refresh): Avoid calling read function if we already
- have lock since that means we are in the process of reading the file.
-
-2003-01-31 Jason Tishler <jason@tishler.net>
-
- * shared.cc (shared_info::heap_chunk_size): Use correct variable when
- reading HKLM.
-
-2003-01-30 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_registry.cc (fhandler_registry::exists): Fix off-by-one
- error when inspecting path.
-
-2003-01-29 Christopher Faylor <cgf@redhat.com>
-
- * lib/getopt.c: Allow environment variable control of POSIXLY_INCORRECT
- behavior.
-
-2003-01-28 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::accept): On successful execution
- set connection state of returned socket to CONNECTED.
-
-2003-01-27 Christopher Faylor <cgf@redhat.com>
-
- * passwd.cc (pwdgrp::parse_passwd): Be more unforgiving about
- non-numeric fields.
-
-2003-01-26 Christopher Faylor <cgf@redhat.com>
-
- * uinfo.cc (pwdgrp::next_num): Remove check for NULL since it is no
- longer a valid return from next_str.
- (pwdgrp::add_line): Duh. Revert to use strchr.
-
-2003-01-26 Christopher Faylor <cgf@redhat.com>
-
- * string.h (strechr): New function.
- * uinfo.cc (pwdgrp::next_str): Search only for input char in string.
- Return EOS on failure. Don't check for NULL since it shouldn't be
- possible.
- (pwdgrp::add_line): Revert to replacing '\n' in input line with '\0'.
- (pwdgrp::next_num): Pass explicit separator character to next_str.
- * grp.cc (pwdgrp::parse_group): Ditto.
- * passwd.cc (pwdgrp::parse_passwd): Ditto. Revamp test for garbage
- input.
- * pwdgrp.h (pwdgrp::next_str): Don't use default parameter.
-
-2003-01-26 Christopher Faylor <cgf@redhat.com>
-
- * uinfo.cc (pwdgrp::load): Regularize strace output. Add warning for
- CreateFile failure.
-
-2003-01-26 Christopher Faylor <cgf@redhat.com>
-
- * passwd.cc (pwdgrp::parse_passwd): Eliminate use of memset. The
- structure should always be completely filled out.
- * grp.cc (pwdgrp::parse_group): Ditto.
-
-2003-01-26 Christopher Faylor <cgf@redhat.com>
-
- * grp.cc (pwdgrp::parse_group): Fix off-by-one problem in allocating
- gr_mem.
-
-2003-01-26 Christopher Faylor <cgf@redhat.com>
-
- * include/sys/strace.h (paranoid_printf): Define as not being part of
- "all" output.
-
-2003-01-25 Christopher Faylor <cgf@redhat.com>
-
- * pwdgrp.h (pwdgrp::next_num): Rename from next_int. Returns
- true/false if parse operation succeeded.
- (pwdgrp::reparse): Remove.
- (pwdgrp::raw_ptr): New function. Returns pointer in line.
- (pwdgrp::next_num): New functions for parsing other than unsigned long.
- * grp.cc (pwdgrp::parse_group): Reinstate previous parsing behavior.
- Don't fill in fields with NULL and assign empty gr_mem to known pointer
- rather than doing a pointless calloc. Streamline gr_mem parsing.
- Don't increment curr_lines here.
- * passwd.cc (pwdgrp::parse_passwd): Use new behavior of next_num.
- Don't increment curr_lines here.
- * uinfo.cc (pwdgrp::next_str): Keep returning EOL if out of data.
- (pwdgrp::reparse): Remove.
- (pwdgrp::next_num): Rename from next_int. Return bool indicating
- success of parse, argument returns value parsed.
- (pwdgrp::add_line): Increment curr_lines here on successful parse.
- (pwdgrp::load): (from Pierre Humblet) Don't return status. Just report
- it here.
-
-2003-01-25 Christopher Faylor <cgf@redhat.com>
-
- * pwdgrp.cc (pwdgrp::reparse): Declare.
- * uinfo.cc (pwdgrp::reparse): Define.
- * grp.cc (pwdgrp::parse_group): Use reparse.
-
-2003-01-25 Pierre Humblet <pierre.humblet@ieee.org>
-
- * syscalls.cc (seteuid32): On Win95 get the pw entry. If it exists
- update the euid and call cygheap->user.set_name. Remove special
- handling of ILLEGAL_UID.
- (setgid32): Add a debug_printf. On Win95, always set the egid.
- Remove special handling of ILLEGAL_GID. Do not compare gid and gr_gid.
- * child_info.h (class cygheap_exec_info): Remove uid.
- * spawn.cc (spawn_guts): Do not set ciresrv.moreinfo->uid.
- * dcrto.cc (dll_crt0_1): Always call uinfo_init.
- * uinfo.cc (uinfo_init): Reorganize and close handle if needed.
- (cygheap_user::ontherange): Do not call internal_getpwnam if pw is NULL.
-
-2003-01-24 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_console.cc (fhandler_console::send_winch_maybe): Reset
- scroll region if size changes.
-
-2003-01-24 Pierre Humblet <pierre.humblet@ieee.org>
- Jason Tishler <jason@tishler.net>
-
- * cygwin.din: Export setreuid32, setreuid, setregid32, setregid.
- * syscalls.cc (setreuid32): New function.
- (setreuid): Ditto.
- (setregid32): Ditto.
- (setregid): Ditto.
- * include/cygwin/version.h: Bump API minor number.
-
-2003-01-23 Christopher Faylor <cgf@redhat.com>
-
- * pwdrp.h (pwdgrp::refresh): Lock entire test prior to reading.
-
-2003-01-23 Christopher Faylor <cgf@redhat.com>
-
- * grp.cc (pwdgrp::parse_group): Eliminate arg and use class member
- instead. Use next_str and next_int to parse arguments.
- * passwd.cc (pwdgrp::parse_passwd): Ditto.
- (grab_string): Eliminate.
- (grab_int): Ditto.
- * pwdgrp.h (pwdgrp::parse): Eliminate input arg.
- (pwdgrp::parse_passwd): Reflect above change.
- (pwdgrp::parse_group): Reflect above change.
- (pwdgrp::next_str): New function.
- (pwdgrp::next_int): Ditto.
- (pwdgrp::gets): Eliminate.
- * uinfo.cc (pwdgrp::next_str): New function.
- (pwdgrp::next_int): Ditto.
- (pwdgrp::add_line): Subsume gets.
- (pwdgrp::gets): Eliminate.
- (pwdgrp::load): Just call add_line to parse input buffer.
-
-2003-01-22 Thomas Pfaff <tpfaff@gmx.net>
-
- * include/pthread.h (PTHREAD_MUTEX_RECURSIVE): Revert changes from
- 2003-01-09 mutex patch.
- (PTHREAD_MUTEX_ERRORCHECK): Ditto.
-
-2003-01-22 Corinna Vinschen <corinna@vinschen.de>
-
- * cygrun.c: Move from here to ../testsuite.
- * Makefile.in: Remove cygrun.exe dependencies.
-
-2003-01-21 Jason Tishler <jason@tishler.net>
-
- * cygwin.din: Export nanosleep().
- * signal.cc (nanosleep): New function.
- (sleep): Move old functionality to nanosleep(). Call nanosleep().
- (usleep): Remove old functionality. Call nanosleep().
- * include/cygwin/version.h: Bump API minor number.
-
-2003-01-21 Christopher Faylor <cgf@redhat.com>
-
- * grp.cc: Call gr.refresh() rather than doing isunitialized tests
- throughout.
- (gr): Use constructor (sigh).
- (pwdgrp::parse_group): Rename from parse_grp.
- (pwdgrp::read_group): Rename from read_etc_group. Just call gr.load
- with a single argument.
- * passwd.cc: Call pr.refresh() rather than doing isunitialized tests
- throughout.
- (pr): Use constructor (sigh).
- (pwdgrp::parse_passwd): Rename from "parse_pwd".
- (pwdgrp::read_passwd): Rename from read_etc_passwd. Just call pr.load
- with a single argument.
- * pwdgrp.h (pwdgrp_state): Eliminate.
- (pwdgrp): Reflect above renamings.
- (pwdgrp::etc_ix): Rename from pwd_ix.
- (pwdgrp::read): New element.
- (pwdgrp::lock): New element.
- (pwdgrp::refresh): New function.
- (pwdgrp::load): Eliminate variations which take buffer arguments.
- (pwdgrp::pwdgrp): New constructors. Initialize mutex here.
- * uinfo.cc (pwdgrp::load): Accommodate pwd_ix -> etc_ix renaming.
- (pwdgrp::load): Set initialized state to true rather than setting state
- to loaded.
-
-2003-01-21 Christopher Faylor <cgf@redhat.com>
-
- * include/cygwin/version.h: Bump DLL minor number.
-
-2003-01-21 Pierre Humblet <pierre.humblet@ieee.org>
-
- * path.h (etc::change_possible): Revert the type to bool.
- (etc::set_last_modified): Remove obsolete function.
- * path.cc (etc::change_possible): Revert type to bool.
- (etc::test_file_change): Do not test for negative values of
- change_possible and do not set it to -res.
- (etc::dir_changed): When the handle is NULL, call memset instead of
- test_file_changed. When the handle is invalid, return true. Detect
- filename change in /etc.
- (etc::file_changed): Remove unneeded check for !fn[n].
- * uinfo.cc (pwdgrp::load): Eliminate spurious setting of fh to NULL.
- * pwdgrp.h (pwdgrp::operator =): Eliminate.
-
-2003-01-19 Christopher Faylor <cgf@redhat.com>
-
- * pwdgrp.h (etc): Move to path.h.
- (pwdgrp::max_lines): New field.
- (pwdgrp::curr_lines): New field.
- (pwdgrp::pwdgrp_buf): Ditto.
- (pwdgrp_buf_elem_size): Ditto.
- (pwdgrp_parse): Ditto.
- (pwdgrp::gets): Just declare here.
- (pwdgrp::load): Ditto. Just take one argument.
- (pwdgrp::load): Define overloaded function accepting passwd buf.
- (pwdgrp::load): Define overloaded function accepting group buf.
- * grp.cc: Use pwdgrp elements rather than standalone static variables
- throughout.
- (curr_lines): Eliminate.
- (max_lines): Ditto.
- (add_grp_line): Ditto.
- (parse_grp): Define as returning boolean. Accept void * arg and line
- count. Coerce first argument into __group32 buf reference. Increment
- curr_line as appropriate.
- (read_etc_group): Pass pwdgrp buffer to gr.load.
- * passwd.cc: Use pwdgrp elements rather than standalone static variables
- throughout.
- (curr_lines): Eliminate.
- (max_lines): Ditto.
- (add_grp_line): Ditto.
- (parse_passwd): Define as returning boolean. Accept void * arg and line
- count. Coerce first argument into passwd buf reference. Increment
- curr_line as appropriate.
- (read_etc_group): Pass pwdgrp buffer to pr.load.
- * path.cc (etc::fn): Extend buffer size to allow index by 1 rather than
- zero.
- (etc::last_modified): Ditto.
- (etc::change_possible): Ditto. Renamed from sawchange. Change to
- signed char since elements are now tri-state.
- (etc::init): Assume "handle" is 1 based rather than 0.
- (etc::test_file_change): New function. Sets change_possible based on
- file date comparison.
- (etc::dir_changed): Check file states immediately after changed_h is
- initialized to avoid a race.
- (etc::file_changed): Use test_file_change to detect if file needs to be
- updated.
- * path.h (etc): Move class here from pwdgrp.h.
- * uinfo.cc: Move etc:: functions to path.cc. Move pwdgrp functions
- here.
- (pwdgrp::gets): Eliminate buf checks. Just check eptr and set lptr.
- (pwdgrp::add_line): New function.
- (pwdgrp::load): Call generic add_line function which will call correct
- parser.
-
-2003-01-17 Christopher Faylor <cgf@redhat.com>
-
- * cygheap.cc: Change most 'int's to 'unsigned's.
- (_cmalloc): Only check for size of malloced region when calculating
- bucket. Add overhead when performing the sbrk. Previous change broke
- _crealloc.
-
-2003-01-17 Christopher Faylor <cgf@redhat.com>
-
- * dcrt0.cc (initialize_env): Use colon for CYGWIN_DEBUG separator.
- * grp.cc: Change most statics to NO_COPY throughout.
- * passwd.cc: Ditto.
-
-2003-01-17 Christopher Faylor <cgf@redhat.com>
-
- * pwdgrp.h: Change some BOOLs to bools.
- (pwdgrp::pwdgrp): Remove unneeded constructor.
- * passwd.cc: Change BOOL to bool throughout.
-
-2003-01-17 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din: Add strerror_r.
- * include/cygwin/version.h: Bump API minor number.
-
-2003-01-17 Christopher Faylor <cgf@redhat.com>
-
- * uinfo.cc (etc::dir_changed): Don't print a warning if can't open
- /etc, unless debugging.
-
-2003-01-17 Pierre Humblet <pierre.humblet@ieee.org>
-
- * grp.cc (read_etc_group): On NT, add a line for gid = -1. Change name
- "unknown" to "mkgroup".
- (internal_getgrgid): Do not return default in nontsec case.
- (internal_getgroups): Add argument srchsid and look for it in groups if
- not NULL.
- * passwd.cc (read_etc_passwd): On NT, add a line for uid = -1. Use
- same default uid for Win95 and NT. Call cygheap_user::ontherange to
- initialize HOME.
-
-2003-01-16 Christopher Faylor <cgf@redhat.com>
-
- * cygheap.cc (init_cygheap::etc_changed): Move to uinfo.cc.
- * cygheap.h (init_cygheap::etc_changed_h): Remove.
- (init_cygheap::etc_changed): Ditto.
- * grp.cc (group_state): Remove. Use gr instead throughout.
- (gr): Define as class pwdgrp.
- (read_etc_group): Remove gr definition. Remove calls to
- set_last_modified and close. Pass add_grp to gr.load to load file.
- * passwd.cc (passwd_state): Remove. Use pr instead, throughout.
- (pr): Define as class pwdgrp.
- (read_etc_passwd): Remove pr definition. Remove calls to
- set_last_modified and close. Pass add_pwd_line to pr.load to load
- file.
- * pwdgrp.h (etc): New helper class for pwdgrp.
- (pwdgrp): Combine pwdgrp_check and pwdgrp_read into one class. Remove
- file_w32 and last_modified fields.
- (pwdgrp::set_last_modified): Remove.
- (pwdgrp::isinitializing): Remove FindFirstFile stuff. Move to
- etc::file_changed.
- (pwdgrp::load): Rename from 'open'. Call etc::init to initialize etc
- scanning. Close file handle after reading buffer into memory. Parse
- buffer by calling second argument.
- (pwdgrp::gets): Reorganize slightly to rely on eptr starting at
- beginning of buffer.
- (pwdgrp::close): Remove.
- * uinfo.cc (etc::dir_changed): New function.
- (etc::init): Ditto.
- (etc::file_changed): Ditto.
- (etc::set_last_modified): Ditto.
-
-2003-01-16 Jason Tishler <jason@tishler.net>
-
- * mmap.cc (fixup_mmaps_after_fork): Add ERROR_NOACCESS to the list of
- ReadProcessMemory() error codes that trigger a retry with temporary
- PAGE_READONLY access. Note that this can occur on NT 4.0.
-
-2003-01-15 Christopher Faylor <cgf@redhat.com>
-
- * path.cc (normalize_posix_path): Convert win32 path separators to
- slashes when full path is specified.
-
-2003-01-15 Pierre Humblet <pierre.humblet@ieee.org>
-
- * cmalloc.cc (_cmalloc): Fix memory leak.
-
-2003-01-15 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc: Fix copyright date.
- * fhandler_dsp.cc: Ditto.
- * mmap.cc: Ditto.
- * net.cc: Ditto.
- * ntdll.h: Ditto.
- * signal.cc: Ditto.
- * syscalls.cc: Ditto.
- * uname.cc: Ditto.
- * wait.cc: Ditto.
-
-2003-01-14 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (fixup_mmaps_after_fork): Copy protection to child process.
- Change ambiguous debug output.
-
-2003-01-14 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (mmap_record::access): Change argument type to caddr_t
- for strictness.
- (mprotect): Protect against calling VirtualProtect() for shared
- pages on 9x/Me.
- (fixup_mmaps_after_fork): If ReadProcessMemory() fails, try to
- change protection of parent page to PAGE_READONLY, then try again.
- Revert protection afterwards.
-
-2003-01-14 Thomas Pfaff <tpfaff@gmx.net>
-
- * syscalls.cc (system): Add pthread_testcancel call.
- * thread.cc: Update list of cancellation points.
-
-2003-01-14 Thomas Pfaff <tpfaff@gmx.net>
-
- * wait.cc: Include thread.h
- (wait4): Add pthread_testcancel call.
- Wait for child process and cancellation event.
- * thread.cc: Update list of cancellation points.
-
-2003-01-14 Thomas Pfaff <tpfaff@gmx.net>
-
- * signal.cc (sleep): Add pthread_testcancel call.
- Wait for signal and cancellation event.
- (usleep): Ditto.
-
-2003-01-14 Thomas Pfaff <tpfaff@gmx.net>
-
- * exceptions.cc (handle_sigsuspend): Add pthread_testcancel call.
- Wait for signal and cancellation event.
- * thread.cc: Update list of cancellation points.
-
-2003-01-14 David Huang <davehzhr@hotmail.com>
-
- * fhandler_dsp.cc (fhandler_dsp::ioctl): Add limited support for
- SNDCTL_DSP_GETFMTS.
-
-2003-01-12 Christopher Faylor <cgf@redhat.com>
-
- * ntdll.h: Fix typo.
-
-2003-01-12 Corinna Vinschen <corinna@vinschen.de>
-
- * uname.cc (uname): Use cygwin_gethostname() to retrieve hostname.
-
-2003-01-12 Pierre Humblet <pierre.humblet@ieee.org>
-
- * sec_acl.cc (search_ace): Use id == -1, instead of < 0, as wildcard.
- (setacl): Start the search for a matching default at the next entry.
- Invalidate the type of merged entries instead of clearing it.
- Use well_known_creator for default owner and owning group and do
- not try to merge non-default and default entries in these cases.
- (getacl): Recognize well_known_creator for default owner and group.
- (acl_worker): Improve errno settings and streamline the nontsec case.
- * security.cc (write_sd): Remove the call to set_process_privilege.
- (alloc_sd): If the owner changes, call set_process_privilege and return
- immediately on failure. Change inheritance rules: on new directories add
- inherit only allow ACEs for creator_owner, creator_group and everyone.
- Preserve all inheritances through chmod and chown calls. Introduce
- isownergroup to implement the uid == gid case, to keep the inheritance
- code simple. Do not initialize owner_sid and group_sid and stop using
- the variable psd.
-
-2003-01-10 Christopher Faylor <cgf@redhat.com>
-
- * net.cc: Use gethostname define from winsock2.h.
-
-2003-01-10 Christopher Faylor <cgf@redhat.com>
-
- * path.cc: Unrevert below reversion except for
- mount_info::conv_to_posix_path part.
-
-2003-01-10 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc: Revert patch from 2003-01-09 to normalize a windows path
- rather than converting to posix.
-
-2003-01-10 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (gethostname): Make call optional, return 1 if function
- can't get loaded.
- * net.cc (cygwin_gethostname): Call GetComputerName if return value
- of gethostname is non-zero.
-
-2003-01-10 Charles Wilson <cwilson@ece.gatech.edu>
-
- * cygwin.din: Add asprintf and vasprintf, as well as the reentrant
- versions and underscore variants.
- * include/cygwin/version.h: Bump CYGWIN_VERSION_API_MINOR.
-
-2003-01-10 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (cygwin_gethostname): Fix call to wsock function gethostname.
-
-2003-01-09 Christopher Faylor <cgf@redhat.com>
-
- * cygthread.cc (cygthread::cygthread): Be more noisy about odd
- condition.
- * miscfuncs.cc (low_priority_sleep): Sleep in regular priority if
- that's what we're currently running at.
-
-2003-01-09 Thomas Pfaff <tpfaff@gmx.net>
-
- * include/semaphore.h: Modify typedef for sem_t.
- * include/cygwin/types.h: Modify typedefs for pthread_t,
- pthread_mutex_t, pthread_key_t, pthread_attr_t,
- pthread_mutexattr_t, pthread_condattr_t, pthread_cond_t,
- pthread_rwlock_t and pthread_rwlockattr_t.
-
-2003-01-09 Thomas Pfaff <tpfaff@gmx.net>
-
- * thread.h (WAIT_CANCELED): New define.
- (pthread::cancelable_wait): New static method.
- * thread.cc (pthread::cancelable_wait): Implement.
- (semaphore::Wait): Wait on semaphore and thread cancellation.
- (pthread::join): Wait on joined thread and thread cancellation.
- (semaphore::wait): Add testcancel to check for thread
- cancellation even if the semaphore is available.
-
-2003-01-09 Thomas Pfaff <tpfaff@gmx.net>
-
- * include/pthread.h: Add define for errorchecking mutexes.
- Change default mutex type.
- * thread.cc (pthread_cond::TimedWait): Update mutex unlock
- calls.
- (pthread_mutex::pthread_mutex): New implement.
- (pthread_mutex::~pthread_mutex): Ditto.
- (pthread_mutex::Lock): Ditto.
- (pthread_mutex::TryLock): Ditto.
- (pthread_mutex::UnLock): Ditto.
- (pthread_mutex::Destroy): Implement new method.
- (pthread_mutex::SetOwner): Ditto.
- (pthread_mutex::LockRecursive): Ditto.
- (pthread_mutex::fixup_after_fork): Restore locking state after
- fork.
- (__pthread_mutex_lock): Return pthread_mutex::Lock errorcode.
- (__pthread_mutex_trylock): Return pthread_mutex::TryLock
- errorcode.
- (__pthread_mutex_unlock): Return pthread_mutex::UnLock
- errorcode.
- (__pthread_mutex_destroy): Call pthread_mutex::Destroy to
- destroy mutex.
- (__pthread_mutexattr_settype): Allow errorchecking and recursive
- types.
- * thread.h (MUTEX_LOCK_COUNTER_INITIAL): New define.
- (pthread_mutex::criticalsection): Remove.
- (pthread_mutex::lock_counter): New member.
- (pthread_mutex::recursion_counter): Ditto.
- (pthread_mutex::owner): Ditto.
- (pthread_mutex::type): Ditto.
- (pthread_mutex::Destroy): New method.
- (pthread_mutex::SetOwner): Ditto.
- (pthread_mutex::LockRecursive): Ditto.
-
-2003-01-09 Thomas Pfaff <tpfaff@gmx.net>
-
- * pthread.cc (pthread_cond_init): Use new pthread_cond::init.
- * thread.cc: Some white spaces cleanups.
- Change __pthread_cond_init to pthread_cond::init throughout.
- (nativeMutex): Move class methods outside pthread_mutex.
- (MTinterface::Init): Initialize pthread_cond init lock.
- (pthread_cond::condInitializationLock): Instantiate.
- (pthread_cond::initMutex): New Method.
- (pthread_cond::isGoodInitializerOrBadObject): Ditto.
- * thread.h: Some white spaces cleanups.
- (nativeMutex): Move class declaration outside pthread_mutex.
- (pthread_cond::condInitializationLock): New static member.
- (pthread_cond::initMutex): New Method.
- (pthread_cond::isGoodInitializerOrBadObject): Ditto.
- (__pthread_cond_init): Remove prototype.
-
-2003-01-09 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (num_entries): Return 2 as link count if
- directory unreadable.
-
-2003-01-09 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (get_nt_attribute): Always return -1 when read_sd()
- fails.
- (get_file_attribute): Set permissions to 0 and owner/group to -1
- if security descriptor is unreadable.
-
-2003-01-09 Christopher Faylor <cgf@redhat.com>
-
- Use isdirsep rather than SLASH_P throughout.
- * path.cc (iscygdrive): Disallow /cygdrive\x.
- (normalize_posix_path): "Normalize" a windows path, if detected, rather
- than converting to posix.
-
-2003-01-06 Troy Curtiss <troyc@usa.net>
-
- * fhandler_serial.cc (fhandler_serial::tcsetattr): Add support and
- capability checking for B230400 bitrate.
- (fhandler_serial::tcgetattr): Add support for B230400 bitrate.
- * include/sys/termios.h: Add B230400 definition for Posix support of
- 230.4Kbps.
-
-2003-01-05 Christopher Faylor <cgf@redhat.com>
-
- * pinfo.cc (_pinfo::commune_send): Use myself->lock rather than just
- lock when leaving.
-
-2003-01-03 Christopher Faylor <cgf@redhat.com>
-
- * dtable.h (dtable::in_vfork_cleanup): New function. True if vfork
- cleanup needed.
- * dtable.cc (dtable::vfork_parent_restore): Remove assertion.
- * pipe.cc (fhandler_pipe::close): Don't close read_state during
- fork_fixup since it wasn't inherited.
-
-2003-01-01 Christopher Faylor <cgf@redhat.com>
-
- * passwd.cc (getpwuid_r32): Revert previous change.
-
-2003-01-01 Christopher Faylor <cgf@redhat.com>
-
- * sysconf.cc (sysconf): Return arbitrary values for
- _SC_GETGR_R_SIZE_MAX, _SC_LOGIN_NAME_MAX, _SC_GETPW_R_SIZE_MAX.
-
- * passwd.cc (getpwuid_r32): Add uid/gid fields to size check
- calculation.
-
diff --git a/winsup/cygwin/ChangeLog-2004 b/winsup/cygwin/ChangeLog-2004
deleted file mode 100644
index ebb696237..000000000
--- a/winsup/cygwin/ChangeLog-2004
+++ /dev/null
@@ -1,3848 +0,0 @@
-2004-12-30 Christopher Faylor <cgf@timesys.com>
-
- * devices.cc (device::isfs): Return true for the logical case of
- devn == FH_FS.
-
-2004-12-28 Christopher Faylor <cgf@timesys.com>
-
- * pinfo.cc (_pinfo::dup_proc_pipe): DUPLICATE_CLOSE_SOURCE closes the
- handle regardless, so revert previous change.
-
-2004-12-27 Christopher Faylor <cgf@timesys.com>
-
- * cygthread.cc (cygthread::stub): Add better debug output.
- (cygthread::cygthread): Ditto.
- (cygthread::terminate_thread): Ditto. Move inuse test earlier or
- suffer infinite loop.
- * pinfo.cc (_pinfo::dup_proc_pipe): Close handle if DuplicateHandle
- fails and process no longer exists.
- * spawn.cc (spawn_guts): Create process in suspended state if OS
- demands it.
- * wincap.cc: Add "start_proc_suspended" throughout.
- * wincap.h (wincaps): Ditto.
- (wincapc): Ditto.
-
-2004-12-27 Christopher Faylor <cgf@timesys.com>
-
- * pinfo.cc (_pinfo::exit): Beef up debugging output.
- * sigproc.cc (proc_subproc): Detached children apparently need a ppid
- of 1.
-
-2004-12-26 Christopher Faylor <cgf@timesys.com>
-
- * init.cc (dll_entry): Previous code reversion was ill-advised. Revert
- it.
- * sigproc.cc (child_info::sync): Ditto.
- * pinfo.cc (_pinfo::exit): Don't set myself.procinfo to NULL since it
- is no longer required.
-
-2004-12-26 Christopher Faylor <cgf@timesys.com>
-
- * init.cc (dll_entry): Remove exit code setting.
- * pinfo.cc (pinfo::init): Initialize exitcode to unset state rather
- than SIGTERM.
- (proc_waiter): Detect if exit code is unset and use status from
- GetExitCodeProcess.
- * sigproc.cc (child_info::sync): Remove exit code detection here since
- proc_waiter now (again) detects it.
-
-2004-12-25 Christopher Faylor <cgf@timesys.com>
-
- * fhandler.cc (fhandler_base::fchmod): Do the right thing when changing
- an "on disk" device or fifo.
- (fhandler_base::fchown): Ditto for changing ownership.
- * fhandler_disk_file.cc (fhandler_base::fstat_helper): Accommodate
- device files on ntfs partitions.
- * path.cc (path_conv::check): Use isfs function to figure out if a path
- exists on a filesystem to make sure that device files are caught.
-
-2004-12-24 Christopher Faylor <cgf@timesys.com>
-
- * child_info.h (CURR_CHILD_INFO_MAGIC): Update.
- (child_info::parent_wr_proc_pipe): Eliminate.
- * pinfo.h (_pinfo::alert_parent): Move here from pinfo class.
- (_pinfo::dup_proc_pipe): New method.
- (_pinfo::sync_proc_pipe): Ditto.
- * exceptions.cc (sig_handle_tty_stop): Reflect move of alert_parent.
- * init.cc (dll_entry): Exit with status one if main process called
- ExitProcess.
- * pinfo.cc (set_myself): Remove handling of parent_wr_proc_pipe.
- (_pinfo::exit): Reflect move of alert_parent. Set procinfo to NULL to
- flag that we are exiting normally. Always use exitcode when exiting
- (although this could be a little racy).
- (pinfo::init): Set default exit to SIGTERM. This will be the exit code
- reported if process is terminated.
- (_pinfo::dup_proc_pipe): New function.
- (pinfo::wait): Duplicate wr_proc_pipe to the right place. Use
- dup_proc_pipe to move the pipe to the child.
- (_pinfo::sync_proc_pipe): New function.
- (_pinfo::alert_parent): Move to _pinfo. Make sure that wr_proc_pipe is
- ours before using it.
- * sigproc.cc (child_info::child_info): Remove handling of
- parent_wr_proc_pipe.
- * spawn.cc (spawn_guts): Pass our wr_proc_pipe to the child when
- execing. Ensure that exit code of cygwin process started from windows
- is correctly set.
-
-2004-12-23 Pierre Humblet <pierre.humblet@ieee.org>
- Christopher Faylor <cgf@timesys.com>
-
- * path.h (path_conv::set_normalized_path): Add second argument and fill
- it in throughout.
- * path.cc (path_conv::check): Declare, set and use "strip_tail".
- (path_conv::set_normalized_path): Add and use second argument,
- replacing all tail stripping tests.
-
-2004-12-23 Christopher Faylor <cgf@timesys.com>
-
- * cygthread.cc (cygthread::cygthread): Guard debugging variable with
- "ifdef DEBUGGING".
- (cygthread::release): Ditto.
-
-2004-12-23 Christopher Faylor <cgf@timesys.com>
- Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (path_conv::check): Don't strip the trailing slash from a
- path consisting only of two slashes.
-
-2004-12-23 Christopher Faylor <cgf@timesys.com>
-
- * cygthread.cc (cygthread::stub): Detect if thread function wants to
- release itself here, to avoid a race.
- (cygthread::release): Clear more stuff. Add a diagnostic for an
- internal error.
- * cygthread.h (auto_release): New function.
- * pinfo.h (pinfo::remember): Add an argument to denote whether child is
- detached.
- * fork.cc (fork_parent): Reflect change in arguments to
- pinfo::remember.
- * pinfo.cc (_pinfo::exit): Signal exit more forcibly.
- (proc_waiter): Use cygthread::auto_release to signify that
- cygthread::stub should release the thread. This should avoid a race.
- (pinfo::alert_parent): Don't signify an error when wr_proc_pipe == NULL.
- * sigproc.cc (proc_subproc): Add support for PROC_DETACHED_CHILD.
- * sigproc.h: Ditto.
- * spawn.cc (spawn_guts): Specify whether child is detached or not when
- calling pinfo::remember.
-
-2004-12-22 Christopher Faylor <cgf@timesys.com>
-
- * cygheap.cc (cygheap_setup_for_child): Add api_fatal to catch failing
- MapViewOfFileEx.
- * cygthread.cc (cygthread::stub): Previous change to make diagnostic
- output more informative was really a bust. Try again. Capture previous
- name in a new field in cygthread for diagnostic purposes.
- (cygthread::cygthread): Ditto.
- (cygthread::release): Add an argument to control whether h should be cleared
- or not.
- (cygthread::terminate_thread): Use 'inuse' for tests rather than 'h'.
- (cygthread): Add some diagnostic fields.
- (cygthread::release): Add an argument.
- * pinfo.cc (proc_waiter): Accommodate change to cygthread::release.
-
-2004-12-22 Christopher Faylor <cgf@timesys.com>
-
- * cygthread.cc (cygthread::stub): Make diagnostic output more informative.
-
-2004-12-22 Christopher Faylor <cgf@timesys.com>
-
- * pinfo.cc (proc_waiter): Zero wait_thread in child to avoid races with
- process termination.
- * cygthread.cc (cygthread::terminate): Clumsily detect when h has gone away
- and attempt no further action.
-
-2004-12-22 Christopher Faylor <cgf@timesys.com>
-
- * cygthread.h (cygthread::release): Just declare here.
- * cygthread.cc (cygthread::release): Define here. Use
- InterlockedExchange to set inuse or suffer potential races.
- (cygthread::terminate): Use release().
-
-2004-12-22 Chris January <chris@atomice.net>
-
- * fhandler_process.cpp (format_process_status): Use tabs in formatting
- instead of spaces.
-
-2004-12-22 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (set_normalized_path): Allow empty pathnames.
-
-2004-12-21 Christopher Faylor <cgf@timesys.com>
-
- * spawn.cc (spawn_guts): Force parent to forget about P_DETACH'ed
- process.
-
-2004-12-20 Christopher Faylor <cgf@timesys.com>
-
- * path.cc (normalize_win32_path): Remove unneeded check for dots.
-
-2004-12-20 Christopher Faylor <cgf@timesys.com>
-
- * path.cc (normalize_posix_path): Remove unneeded check for dots.
- (path_conv::set_normalized_path): Strip trailing dots, similarly to
- what had previously been done for the win32 path.
-
-2004-12-18 Christopher Faylor <cgf@timesys.com>
-
- * path.cc (normalize_win32_path): Make third arg pass-by reference.
- Reorganize slightly to eliminate extra variables.
- (normalize_posix_path): Ditto.
- (path_conv::check): Reflect change in arguments.
- (mount_info::conv_to_posix_path): Ditto.
- (mount_info::add_item): Ditto.
-
-2004-12-18 Christopher Faylor <cgf@timesys.com>
-
- * child_info.h (CURR_CHILD_INFO_MAGIC): Use updated value.
-
-2004-12-18 Christopher Faylor <cgf@timesys.com>
- Pierre Humblet <pierre.humblet@ieee.org>
-
- * path.cc (path_conv::check): Check the output Win32 path for trailing
- spaces and dots, not the input path. Disallow all use of foo./bar
- since consistently getting this right is time consuming. Remove
- strange test for "unc\" since no one seems to know what it's for.
-
-2004-12-18 Chris January <chris@atomice.net>
-
- * fhandler_proc.cc (proc_listing): Add entry for "self".
- (proc_fhandlers): Add entry for "self".
- * fhandler_process.cc (fhandler_process::fstate): Handle "self".
- (fhandler_process::open): Handle "self".
-
-2004-12-17 Christopher Faylor <cgf@timesys.com>
-
- * sigproc.cc (proc_subproc): Fix long-standing problem. Only wait for
- "all processes" if pid == -1 -- not just if pid is negative.
- (proc_can_be_signalled): Fix another long-standing problem. Set
- correct errno when detecting an exited process.
-
-2004-12-16 Thomas Wolff <towo@computer.org>
-
- * fhandler_console.cc (get_win32_attr): Avoid inappropriate intensity
- interchanging that used to render reverse output unreadable when
- non-reversed text is bright.
-
-2004-12-15 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din: Add utmpx symbols.
- * syscalls.cc: Include utmpx.h. Implement utmpx functions as stubs
- to utmp functions.
- (copy_ut_to_utx): New static function.
- (pututline): Change from void to struct utmp * as on Linux.
- (setutxent): New function.
- (endutxent): New function.
- (getutxent): New function.
- (getutxid): New function.
- (getutxline): New function.
- (pututxline): New function.
- * include/utmpx.h: New file.
- * include/cygwin/utmp.h: New file.
- * include/cygwin/version.h: Bump API minor number.
- * include/sys/utmp.h: Include cygwin/utmp.h. Move stuff common with
- utmpx functionality there.
- (pututline): Declare struct utmp *.
-
-2004-12-14 Corinna Vinschen <corinna@vinschen.de>
-
- * tty.cc (tty_list::terminate): Guard releasing the tty with tty_mutex.
- (tty::init): Set master_pid to 0.
-
-2004-12-14 Thomas Wolff <towo@computer.org>
-
- * fhandler_console.cc (read): Consider offset within scrolling
- region of the console window.
-
-2004-12-13 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.h (cwdstuff::get_drive): Release cwd_lock.
-
-2004-12-12 Bas van Gompel <cygwin-patch@bavag.tmfweb.nl>
-
- * fhandler.cc (fhandler_base::puts_readahead): Fix end-condition.
-
-2004-12-10 Corinna Vinschen <corinna@vinschen.de>
-
- * errno.cc (errmap): Map ERROR_INVALID_ADDRESS to EINVAL instead of
- EOVERFLOW.
-
-2004-12-10 Christopher Faylor <cgf@timesys.com>
-
- * include/sys/strace.h: Don't output paranoid_printf by default.
-
-2004-12-09 Christopher Faylor <cgf@timesys.com>
-
- * lib/libcmain.c (main): Properly deal with quoted first argument.
-
-2004-12-06 Christopher Faylor <cgf@timesys.com>
-
- * pinfo.h (proc_pipe::*): Delete class.
- * pinfo.cc (proc_pipe::*): Ditto.
-
-2004-12-05 Christopher Faylor <cgf@timesys.com>
-
- * fork.cc (fork_parent): Reinstate "childhProc" protection. Don't
- close hProcess handle here since it is used to ensure that a new
- process isn't created with the old pid after the old pid exits.
- * spawn.cc (spawn_guts): Ditto.
- * pinfo.cc (proc_waiter): Don't send any signals if we've execed since
- this process doesn't officially exist.
- * pinfo.h (pinfo::pid_handle): Eliminate. Just use hProc.
- * sigproc.cc (sig_send): Don't send any signals if our sendsig doesn't
- exist. That's a sign that we are execing.
- (remove_proc): Eliminate pid_handle close.
-
-2004-12-05 Christopher Faylor <cgf@timesys.com>
-
- * cygthread.h (cygthread::terminate_thread): Make public.
- * pinfo.h (pinfo::wait_thread): New element.
- * pinfo.cc (pinfo::wait): Store "handle" to started thread in pinfo.
- * sigproc.cc (proc_terminate): Kill any threads waiting for a process
- pipe.
-
-2004-12-05 Christopher Faylor <cgf@timesys.com>
-
- * sigproc.cc (mychild): Reimplement as list scan.
- (proc_subproc): Don't mess with pinfo if it's myself.
-
-2004-12-05 Christopher Faylor <cgf@timesys.com>
-
- * child_info.h (child_info_types): Label enum for _PROC constants.
- (child_info::child_info): New constructor.
- (child_info::~child_info): New destructor.
- (child_info::sync): Declare new function.
- (child_info_fork::child_info_fork): New constructor.
- (child_info_spawn::child_info_spawn): Remove old constructor.
- (child_info_spawn::child_info_spawn): New constructor.
- * dcrt0.cc (dll_crt0_0): Use correct sizeof when doing sanity check on
- passed in child_info. Signal readiness to parent when not forking (and
- not spawning).
- * fork.cc (sync_with_child): Delete.
- (resume_child): Remove extra argument.
- (sync_with_parent): Use child_info method to sync with parent.
- (fork_child): Don't close fork_info->subproc_ready since that is now
- handled by the destructor.
- (fork_parent): Remove subproc_ready stuff. Use child_info sync method
- for waiting.. Set start time here for child. Rename "forked" to
- "child".
- (fork): Check ch.subproc_ready for validity here.
- * pinfo.h (_pinfo::exec_sendsig): Temp storage for exec stub which may
- be staying around to handle non-cygwin captive process.
- (_pinfo::exec_dwProcessId): Ditto.
- (_pinfo::_lock): Renamed from lock.
- (_pinfo::lock): New method.
- (_pinfo::unlock): Ditto.
- (_pinfo::initialize_lock): Ditto.
- * pinfo.cc (set_myself): Use initialize_lock method to initialize
- myself lock. Set "exec" fields in _pinfo to zero to indicate that
- we've started successfully. Set start time here when appropriate.
- (_pinfo::commune_send): Use pinfo lock/unlock methods.
- (proc_waiter): Remove special case for non-cywin processes.
- Reinstitute handling for PID_NOCLDSTOP.
- * sigproc.cc (proc_subproc): Set proper EAGAIN errno when process table
- is filled.
- (sig_send): Use exec_* fields from _pinfo for sending signals if the
- the _pinfo sendsig never materializes.
- (child_info::child_info): New constructor, renamed from init_child_info.
- Zeroes child_info structure and sets appropriate fields in structure
- based on chtype.
- (child_info::~child_info): New destructor. Closes subproc_ready if it
- exists.
- (child_info_fork::child_info_fork): New constructor.
- (child_info_spawn::child_info_spawn): New constructor.
- (child_info::ready): New function. Signals parent when child is ready.
- (child_info::sync): New function. Wait for child to signal us or
- process to die.
- (remove_proc): Remove closing of hProcess since this should now be
- handled shortly after process creation.
- * spawn.cc (spawn_guts): Use child_info_spawn constructor rather than
- init_child_info. Save exec_sendsig and exec_dwProcessId in execing
- _pinfo. Rely on child_info constructor to properly set
- parent_wr_proc_pipe in ciresrv. Revert to previous determination on
- whether to start a process in suspended mode. Remove reparenting
- stuff. Just keep a stub around if starting a non-cygwin process.
-
-2004-12-05 Bas van Gompel <cygwin-patch@bavag.tmfweb.nl>
-
- * fhandler.cc (fhandler_base::read): Remove superfluous check in
- __small_printf format for strace.
-
-2004-12-05 Bas van Gompel <cygwin-patch@bavag.tmfweb.nl>
-
- * fhandler.cc (fhandler_base::read): Don't debug_printf garbage when
- copied_chars is zero.
-
-2004-12-03 Christopher Faylor <cgf@timesys.com>
-
- * environ.cc (environ_init): Alloc space for TERM if it is not set,
- like all of the other environment variables.
-
-2004-12-02 Christopher Faylor <cgf@timesys.com>
-
- * child_info.h (child_info_fork::parent_wr_proc_pipe): New element.
- * fork.cc (fork_parent): Set parent_wr_proc.
- * pinfo.cc (set_myself): Close child_proc_info->parent_wr_proc if it
- exists rather than trying to get value from parent _pinfo.
-
-2004-12-02 Christopher Faylor <cgf@timesys.com>
-
- * pinfo.h (enum parent_aleter): New enum.
- (pinfo::alert_parent): Declare as returning a value.
- (pinfo::parent_alive): New function.
- * pinfo.cc (pinfo::alert_parent): Set wr_proc_pipe to invalid non-NULL
- value when parent disappears. Return success of operation.
- (proc_waiter): Use __ALERT_* enum for control since these are not really signals.
- Implement __ALERT_ALIVE.
- * sigproc.cc (my_parent_is_alive): Eliminate.
- * sigproc.h (my_parent_is_alive): Ditto for declaration.
- (__SIGREPARENT): Eliminate.
-
-2004-12-02 Christopher Faylor <cgf@timesys.com>
-
- * pinfo.cc (pinfo::wait): Use better name for cygthread.
-
-2004-12-03 Pierre Humblet <pierre.humblet@ieee.org>
-
- * registry.h (reg_key::reg_key): Change arguments.
- * shared_info.h (class mount_info): Remove had_to_create_mount_areas.
- * registry.cc (reg_key::reg_key): Change constructors to always handle
- HKLM and to avoid relying on HKCU.
- Do not set mount_table->had_to_create_mount_areas.
- * path.cc (mount_info::conv_to_win32_path): Improve update of
- sys_mount_table_counter.
- (mount_info::read_mounts): Use new reg_key constructor.
- (mount_info::add_reg_mount): Ditto.
- (mount_info::del_reg_mount): Ditto.
- (mount_info::read_cygdrive_info_from_registry): Ditto.
- (mount_info::write_cygdrive_info_to_registry): Ditto.
- Update cygwin_shared->sys_mount_table_counter after registry update.
- (mount_info::get_cygdrive_info): Ditto.
- * shared.cc (shared_info::heap_chunk_size): Use new reg_key constructor.
- * environ.cc (regopt): Ditto.
-
-2004-12-01 Christopher Faylor <cgf@timesys.com>
-
- * include/features.h: Include sys/cdefs.h, like linux.
-
-2004-12-01 Christopher Faylor <cgf@timesys.com>
-
- * syscalls.cc (truncate64): Don't second-guess errno if open fails.
- * devices.in: Don't allow /dev/com0.
-
-2004-11-25 Christopher Faylor <cgf@timesys.com>
-
- * environ.cc (putenv): Accommodate recent newlib change in argument to
- putenv.
-
-2004-11-25 Christopher Faylor <cgf@timesys.com>
-
- * child_info.h (child_info_spawn::hexec_proc): Eliminate.
- * dcrt0.cc (dll_crt0_0): Remove hexec_proc stuff.
- * fork.cc (fork_child): Remove call to pinfo_fixup_after_fork.
- * pinfo.cc (set_myself): Close and zero pid_handle if set.
- (pinfo_fixup_after_fork): Delete.
- (proc_waiter): Don't close vchild.hProcess here. Do that when we are
- remove the vchild from procs. Save hProcess as pid_handle only on
- first reparent operation.
- (pinfo::wait): Don't set pid_handle here.
- (pinfo::alert_parent): Always try to send signal. If unsuccessful then
- close and zero wr_proc_pipe.
- * pinfo.h (pinfo::pinfo): Make sure that appropriate parts of the class
- are zeroed on construction.
- (pinfo::alert_parent): Take char argument.
- (pinfo_fixup_after_fork): Delete declaration.
- (hexec_proc): Ditto.
- * sigproc.cc (remove_proc): Close pid_handle and hProcess if
- appropriate.
- * spawn.cc (spawn_guts): Set cygheap->pid_handle on first exec.
-
-2004-11-25 Christopher Faylor <cgf@timesys.com>
-
- * cygheap.h (init_cygheap::pid_handle): New element.
- * pinfo.cc (set_myself): Clear previously existing cygheap->pid_handle
- when a new process has been started.
- (pinfo::wait): Make sure that a handle to the newly forked/spawned
- process is kept around so that the pid will not be reused.
- * pinfo.h (_pinfo::pid_handle): Move.
- (pinfo::pid_handle): to here.
- * spawn.cc (spawn_guts): Create a pid_handle in cygheap prior to
- spawning to ensure that the pid does not get reused during the lifetime
- of the "cygwin pid".
-
-2004-11-25 Christopher Faylor <cgf@timesys.com>
-
- * pinfo.h (pinfo::alert_parent): New function.
- * exceptions.cc (sig_handle_tty_stop): Use alert_parent to send
- "signals" to parent.
- * fork.cc (fork_parent): Don't close pi.hProcess. Let the waiter
- thread do that.
- * pinfo.cc (proc_waiter): Detect case where process exits without
- setting the exit code and use value from GetExitCodeProcess.
- Reluctantly implement __SIGREPARENT.
- (pinfo::alert_parent): Define.
- * sigproc.h (__SIGREPARENT): New enum.
- * spawn.cc (spawn_guts): Send reparent signal to parent on exec.
- Always create process in suspended state to avoid races.
-
-2004-11-25 Christopher Faylor <cgf@timesys.com>
-
- Remove cygthread.h in favor of cygtls.h throughout since cygtls now
- includes cygthread.h. Eliminate ppid_handle usage throughout.
- * child_info.h: Regenerate magic number
- (child_info): Remove pppid_handle.
- * cygthread.h (cygthread::release): New method. Frees thread without
- waiting.
- * cygthread.cc (cygthread::stub): Set _ctinfo in _mytls to point to
- information for executing thread. Don't call SetEvent if thread is no
- longer in use.
- (cygthread::simplestub): Ditto.
- * cygtls.h (_cygtls::_ctinfo): New element contains pointer to
- information about executing cygthread, if any.
- * dcrt0.cc: Remove last vestiges of per_thread stuff.
- (dll_crt0_0): Ditto. Remove accommodation for ppid_handle.
- (do_exit): Remove obsolete reparenting test.
- (_exit): Exit with a more SUSv3-like exit value.
- * dtable.cc (dtable::stdio_init): Check for myself->cygstarted rather
- than myself->ppid_handle to see if we were started by a cygwin process.
- * exceptions.cc (open_stackdumpfile): Ditto.
- (handle_exceptions): Ditto.
- (ctrl_c_handler): Ditto.
- (sig_handle_tty_stop): Ditto. Let parent send signal to itself on
- STOP.
- (sigpacket::process): Comment out vfork test.
- (signal_exit): Use more SUSv3-like exit value on signal.
- * external.cc (fillout_pinfo): Don't set hProcess.
- * fork.cc: Remove VFORK cruft.
- (per_thread::set): Delete.
- (fork_child): Remove perthread stuff.
- (fork_parent): Remove obsolete subproc_init. Accommodate new method
- for tracking subprocesses.
- * pinfo.cc (set_myself): Accommodate new pinfo/_pinfo layout. Set some
- things here that used to be set in wait_sig.
- (_pinfo::exit): Set exitcode here. Close process pipe.
- (_pinfo::commune_send): Accommodeate new pinfo/_pinfo layout.
- (proc_waiter): New function. Waits, in a thread for subprocess to go
- away.
- (pinfo::wait): New function. Initialization for proc_waiter.
- * pinfo.h (_pinfo::exitcode): New element.
- (_pinfo::cygstarted): Ditto.
- (_pinfo::wr_proc_pipe): Ditto.
- (_pinfo::ppid_handle): Delete.
- (_pinfo::hProcess): Delete.
- (_pinfo::lock): Delete.
- (pinfo::hProcess): New element.
- (pinfo::lock): Ditto.
- (pinfo::wait): Declare new function.
- (pinfo::preserve): Define new function.
- * sigproc.cc: Remove old stuff from wait_subproc thread based method.
- (zombies): Remove.
- (procs): New.
- (my_parent_is_alive): Just check that the parent pid exists.
- (mychild): Just use pinfo methods to determine if child is mine.
- (proc_subproc): Revamp PROC_ADDCHILD to use pinfo::wait. Remove
- PROC_CHILDTERMINATED logic. Use different method to remove processes
- from list when SIGCHLD == SIG_IGN.
- (proc_terminate): Gut.
- (subproc_init): Delete.
- (init_child_info): Remove setting of pppid_handle.
- (checkstate): Revamp to only scan procs array.
- (remove_proc): Rename from remove_zombie. Don't close hProcess or
- pid_handle. Don't release memory if it's myself.
- (stopped_or_terminated): Change logic to handle new consolidated
- proc/zombie array.
- (wait_subproc): Delete.
- * sigproc.h: Remove obsolete EXIT_* defines.
- (subproc_init): Remove declaration.
- * spawn.cc (spawn_guts): Remove reparenting stuff. Use standard wait
- logic to wait for child if started from a non-cygwin process.
- * tlsoffsets.h: Regenerate.
- * tty.cc (tty_init): Check for myself->cygstarted rather than
- myself->ppid_handle to see if we were started by a cygwin process.
- * include/sys/signal.h (external_pinfo::exitcode): Replace hProcess.
- * include/sys/wait.h (WCOREDUMP): Define.
-
- * fhandler_tty.cc (fhandler_tty_slave::read): Add debugging output for
- timeout case.
- * signal.cc (abort): Flag that we are exiting with the ABORT signal.
-
-2004-11-22 Christopher Faylor <cgf@timesys.com>
-
- * select.cc (select_stuff::test_and_set): Remove extraneous tests of
- "window_handle".
-
-2004-11-20 Pierre Humblet <pierre.humblet@ieee.org>
-
- * fhandler.cc (fhandler::write): Remove debug_printf.
- * pipe.cc (fhandler_pipe::create): Edit syscall_printf format.
-
-2004-11-20 Pierre Humblet <pierre.humblet@ieee.org>
-
- * cygheap.h (cygheap_user::get_windows_id): New method.
- * registry.h (get_registry_hive_path): Change argument type.
- (load_registry_hive): Ditto.
- * registry.cc (get_registry_hive_path): Change argument type and take
- Win9x keys into account.
- (load_registry_hive): Ditto.
- * uinfo.cc (cygheap_user::env_userprofile): Use get_windows_id, even
- for SYSTEM.
- * shared.cc (user_shared_initialize): Use get_windows_id.
- * syscalls.cc (seteuid32): Load the registry hive and reload the user
- shared also on Win9x.
-
-2004-11-11 Christopher Faylor <cgf@timesys.com>
-
- * include/cygwin/version.h: Bump DLL minor number to 13.
-
-2004-10-28 Christopher Faylor <cgf@timesys.com>
-
- * fork.cc (NPIDS_HELD): Reduce to former number now that bash problem
- has been identified.
-
-2004-10-28 Pierre Humblet <pierre.humblet@ieee.org>
-
- * path.cc (mount_info::from_registry): Deimpersonate while
- accessing HKLM.
- (mount_info::read_cygdrive_info_from_registry): Ditto.
- * cygheap.h: Define NO_IMPERSONATION.
- (cygheap_user::issetuid): Replace INVALID_HANDLE_VALUE by
- NO_IMPERSONATION.
- (cygheap_user::has_impersonation_tokens): Ditto.
- (cygheap_user::close_impersonation_tokens): Ditto.
- * uinfo.cc (uinfo_init): Ditto.
- * syscalls.cc (seteuid32): Ditto.
- * security.cc (set_impersonation_token): Ditto.
-
-2004-10-26 Christopher Faylor <cgf@timesys.com>
-
- * cygtls.cc (_cygtls::fixup_after_fork): Wipe out exitsock local since
- it should not be used by the child.
- * select.cc (start_thread_socket): Turn off inheritance for exitsock.
- Don't add exitsock to exception mask since it should never get an
- exception.
- (socket_cleanup): Change some debug messages for consistency.
- * fhandler_socket.cc (fhandler_socket::dup): Change comment wording
- slightly.
-
-2004-10-26 Pierre Humblet <pierre.humblet@ieee.org>
-
- * registry.cc (get_registry_hive_path): Simplify and add a
- debug_printf in case of failure.
- (load_registry_hive): Revert the 2004-04-19 change.
-
-2004-10-20 Christopher Faylor <cgf@timesys.com>
-
- * select.cc (start_thread_socket): Remove attempt to delay reading of
- exitsock or suffer occasional mysterious 60 second hangs.
- (socket_cleanup): Empty the exitsock here after the thread has
- terminated.
-
-2004-10-19 Christopher Faylor <cgf@timesys.com>
-
- * fhandler_console.cc (fhandler_console::fixup_after_exec): Fix error
- message.
-
-2004-10-12 Christopher Faylor <cgf@timesys.com>
-
- * select.cc (start_thread_socket): Remove unused code.
-
-2004-10-11 Christopher Faylor <cgf@timesys.com>
-
- * fhandler_termios.cc (fhandler_termios::tcsetpgrp): Revert previous checkin.
-
-2004-10-10 Christopher Faylor <cgf@timesys.com>
-
- * cygtls.h (exitsock): New element.
- (exitsock_sin): Ditto.
- * cygtls.cc (_cygtls::init_thread): Initialize exitsock to invalid handle.
- (_cygtls::call2): Close exitsock if it is valid.
- * select.cc (struct socketinf): Remove sin element.
- (start_thread_socket): Initialize one SOCK_DGRAM socket per thread
- instead of (apparently) expensive opening and closing of socket with
- each select call.
- (socket_cleanup): Send a byte to the exitsock socket as a way to
- potentially signal a waiting-for-socket thread to exit.
- * tlsoffsets.h: Regenerate.
-
-2004-10-07 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.h (class cygheap_user): Add psystemroot member and
- env_systemroot method.
- * environ.cc (struct spenv): Add add_always member.
- (spenvs): Accommodate new add_always member. Add
- cygheap_user::env_systemroot method to SYSTEMROOT entry.
- (build_env): Check add_always member when adding missing environment
- variables from spenvs.
- * uinfo.cc (cygheap_user::env_systemroot): New method.
-
-2004-10-07 Corinna Vinschen <corinna@vinschen.de>
-
- * dcrt0.cc (dll_crt0_0): Drop duplicated line.
-
-2004-10-07 Christopher Faylor <cgf@timesys.com>
-
- * spawn.cc (pthread_cleanup::oldmask): Default to invalid signal mask.
- (do_cleanup): Test for invalid signal mask to decide whether to restore
- the mask rather than assuming zero mask indicates that there is nothing
- to do.
-
-2004-10-07 Mark Paulus <mark.paulus@mci.com>
-
- * fhandler_tty.cc (fhandler_tty_slave::read): Use previously
- evaluated time_to_wait value.
-
-2004-10-05 Pierre Humblet <pierre.humblet@ieee.org>
-
- * external.cc (check_ntsec): Do not call wincap.has_security.
- * path.cc (path_conv::check): Ditto.
- * security.cc (get_object_attribute): Ditto.
- (get_file_attribute): Ditto.
-
-2004-10-05 Bas van Gompel <cygwin-patch.buzz@bavag.tmfweb.nl>
-
- * pinfo.cc (_pinfo::commune_send): Correct debugging output.
-
-2004-10-04 Christopher Faylor <cgf@timesys.com>
-
- * include/cygwin/signal.h: Add siginterrupt definition.
-
-2004-10-02 Pierre Humblet <pierre.humblet@ieee.org>
-
- * path.h (enum path_types): Delete PATH_ISDISK.
- (path_conv::isdisk): Delete method.
- (path_conv::set_isdisk): Ditto.
- * path.cc (path_conv::check): Do not call set_isdisk.
- * uinfo.cc(pwdgrp::load): Do not call pc.isdisk.
-
-2004-09-28 Christopher Faylor <cgf@timesys.com>
-
- * fhandler_termios.cc (fhandler_termios::tcsetpgrp): Disallow attempts
- to set the process group to a nonexistent process group.
-
-2004-09-27 Corinna Vinschen <corinna@vinschen.de>
-
- * lib/_cygwin_crt0_common.cc: Revert patch from 2004-09-16. Brakes
- newly built DLLs.
-
-2004-09-24 Christopher Faylor <cgf@timesys.com>
- Sergey Ivanov <seriv@parkheights.dyndns.org>
-
- * path.cc (mount_info::read_cygdrive_info_from_registry): Default
- /cygdrive to binary mode.
-
-2004-09-22 Pierre Humblet <pierre.humblet@ieee.org>
-
- * path.cc (normalize_win32_path): Only look for : in second position.
- Avoid infinite loop with names starting in double dots.
- (mount_info::conv_to_win32_path): Do not worry about a trailing dot.
- (hash_path_name): Ditto.
-
-2004-09-20 Christopher Faylor <cgf@timesys.com>
-
- * exceptions.cc (sig_handle_tty_stop): Set flag earlier.
-
-2004-09-20 Christopher Faylor <cgf@timesys.com>
-
- * exceptions.cc (sig_handle_tty_stop): Set flag that we are in a cygwin
- function to avoid a probably erroneous stack walk.
-
-2004-09-17 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (unlink): Don't use "delete on close" on remote shares.
-
-2004-09-17 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din (_impure_ptr): Add export again. There are libs out there.
-
-2004-09-16 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din (_impure_ptr): Don't export.
- (reent_data): Export.
- * lib/_cygwin_crt0_common.cc (_impure_ptr): Drop entirely. Don't
- initialize _impure_ptr or u->impure_ptr_ptr.
-
-2004-09-15 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din (_impure_ptr): Export.
- (reent_data): Don't export.
- * dcrt0.cc (reent_data): Drop.
- (__cygwin_user_data): Initialize impure_ptr as GLOBAL_REENT.
- (_dll_crt0): Initialize _impure_ptr as GLOBAL_REENT.
- * lib/_cygwin_crt0_common.cc (_impure_ptr): Drop. Declare extern as
- dllimport instead.
-
-2004-09-14 Christopher Faylor <cgf@timesys.com>
-
- * cygtls.h: Add alignment kludge to fix disparity between compilers.
- * tlsoffsets.h: Regenerate.
-
- * fork.cc (slow_pid_reuse): Use define to control number of pids held
- to prevent pid reuse.
-
-2004-09-14 Sam Steingold <sds@gnu.org>
-
- * autoload.cc (EnumProcessModules): Add.
- * dlfcn.cc (dlsym): Handle RTLD_DEFAULT using EnumProcessModules().
- * include/dlfcn.h (RTLD_DEFAULT): Define to NULL.
-
-2004-09-13 Christopher Faylor <cgf@timesys.com>
-
- * fork.cc (slow_pid_reuse): Temporarily double the number of pids held
- to prevent pid reuse.
-
-2004-09-12 Christopher Faylor <cgf@timesys.com>
-
- * sigproc.cc (wait_sig): Ensure that waiting threads are awoken after
- returning from a hold condition.
-
-2004-09-12 Christopher Faylor <cgf@timesys.com>
-
- * child_info.h (CURR_CHILD_INFO_MAGIC): Update.
-
-2004-09-11 Pierre Humblet <pierre.humblet@ieee.org>
- Christopher Faylor <cgf@timesys.com>
-
- * exceptions.cc: (ctrl_c_handler): Do nothing while a Cygwin subprocess
- is starting.
-
-2004-09-10 Christopher Faylor <cgf@timesys.com>
-
- * child_info.h (init_child_info): Remove pid argument from declaration.
- * cygheap.h (init_cygheap::pid): New element.
- * dcrt0.cc (dll_crt0_0): Eliminate handling of now-noexistent cygpid
- parameter in child_info struct. Set forkee to 'true' rather than
- cygpid since the pid value was never used.
- (dll_crt0_1): Ditto.
- (_dll_crt0): Ditto.
- * fork.cc (fork_child): Don't wait for sigthread. This is handled in
- the fork call now.
- (fork_parent): Remove obsolete pid argument from init_child_info call.
- Don't do anything special with cygpid when DEBUGGING.
- (fork): Delay all signals during fork.
- (fork_init): Don't do anything special when DEBUGGING.
- * pinfo.cc (set_myself): Remove pid parameter. Use new pid field in
- cygheap.
- (pinfo_init): Don't pass pid argument to set_myself.
- * sigproc.cc (sig_send): Wait for dwProcessId to be non-zero as well as
- sendsig.
- (init_child_info): Eliminate handling of pid.
- (wait_sig): Implement method to temporarily hold off sending signals.
- * sigproc.h (__SIGHOLD): New enum.
- (__SIGNOHOLD): Ditto.
- * spawn.cc (spawn_guts): Remove obsolete pid argument from
- init_child_info call.
-
-2004-09-10 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::dup): Use debug_printf.
-
-2004-09-10 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in: Create libutil.a from bsdlib.o exports.
- * bsdlib.cc (logwtmp): Move from syscalls.cc to here.
- (login): Ditto.
- (logout): Ditto.
-
- * winsup.h (EXPORT_ALIAS): New macro.
- * exec.cc: Define alias symbols using EXPORT_ALIAS macro.
- * syscalls.cc: Ditto.
- * times.cc: Ditto.
-
-2004-09-09 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_tape.cc (fhandler_dev_tape::open): Fix typo.
-
-2004-09-09 Bas van Gompel <cygwin-patch.buzz@bavag.tmfweb.nl>
-
- * pipe.cc (create_selectable_pipe): Work around bug in Windows 95
- where CreateNamedPipe returns NULL.
-
-2004-09-08 Pierre Humblet <pierre.humblet@ieee.org>
-
- * cygheap.h (cwdstuff::drive_length): New member.
- (cwdstuff::get_drive): New method.
- * path.cc (normalize_win32_path): Simplify by using cwdstuff::get_drive.
- (mount_info::conv_to_win32_path): Use cwdstuff::get_drive as default for /.
- (cwdstuff::set): Initialize drive_length.
-
-2004-09-07 Christopher Faylor <cgf@timesys.com>
-
- * cygtls.cc (_cygtls::init_thread): Set __sdidinit to negative value to
- indicate that it is "special".
- * thread.cc (pthread::exit): If __sdidinit is < 0, it was never really
- initialized so reset it to 0 before calling _reclaim_reent.
-
-2004-09-05 Christopher Faylor <cgf@timesys.com>
-
- * include/cygwin/version.h: Bump DLL minor number to 12.
-
-2004-09-03 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc: Fix a few more strace_prints.
-
-2004-09-02 Christopher Faylor <cgf@timesys.com>
-
- Regularize most strace_prints throughout so that %E is always preceded
- by a comma and elminate most uses of "foo = %s" to "foo %s".
-
-2004-09-02 Bob Byrnes <byrnes@curl.com>
- Christopher Faylor <cgf@timesys.com>
-
- * autoload.cc (NtQueryInformationFile): Return nonzero on error.
- * ntdll.h (FILE_PIPE_LOCAL_INFORMATION): Add.
- (NtQueryInformationFile): Fix types for last two arguments.
- * pipe.cc: Include stdlib.h, limits.h, and ntdll.h.
- (create_selectable_pipe): New function to create a pipe that can be
- used with NtQueryInformationFile for select.
- (fhandler_pipe::create): Call create_selectable_pipe instead of
- CreatePipe.
- (pipe): Use DEFAULT_PIPEBUFSIZE as argument to create_pipe.
- * select.cc: Include limits.h and ntdll.h.
- (peek_pipe): Add select_printf output. Call NtQueryInformationFile to
- implement select for write on pipes.
- (fhandler_pipe::select_read): Reorder field assignments to be
- consistent with fhandler_pipe::select_write.
- (fhandler_pipe::select_write): Initialize startup, verify, cleanup, and
- write_ready fields for select_record.
- (fhandler_pipe::select_except): Tweak indentation to be consistent with
- fhandler_pipe::select_write.
-
-2004-08-30 Pierre Humblet <pierre.humblet@ieee.org>
-
- * fork.cc (fork_parent): Return the cygpid directly derived from the
- winpid.
-
-2004-08-30 Christopher Faylor <cgf@timesys.com>
-
- * fork.cc (fork_parent): Record child's pid when we're sure that it has
- been filled out by the child.
- * pinfo.cc (pinfo::init): Trivial change.
-
-2004-08-29 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::fchmod): Allow to report
- success on systems with ntsec and ntea set.
-
-2004-08-28 Pierre Humblet <pierre.humblet@ieee.org>
-
- * fhandler.cc (fhandler_base::write): In the lseek_bug case, set EOF
- before zero filling. Combine similar error handling statements.
-
-2004-08-28 Pierre Humblet <pierre.humblet@ieee.org>
-
- * syscalls.cc (ftruncate64): On 9x, call write with a zero length
- to zero fill when the file is extended.
-
-2004-08-24 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (link): Avoid compiler warning.
-
-2004-08-21 Corinna Vinschen <corinna@vinschen.de>
-
- * environ.cc (set_ntea): New function.
- (set_ntsec): Ditto.
- (set_smbntsec): Ditto.
- (parse_thing): Change ntea, ntsec and smbntsec settings to call
- appropriate functions.
-
-2004-08-20 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_tape.cc (fhandler_dev_tape::raw_read): Use ?: instead of
- if/else.
- (fhandler_dev_tape::raw_write): Return -1 in case of error.
-
-2004-08-19 Corinna Vinschen <corinna@vinschen.de>
-
- * errno.cc (_sys_errlist): Change various text to their english Linux
- counterparts. Unify layout.
- (strerror): Remove switch statement.
-
-2004-08-19 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::open): Set shared flags to 0 when
- opening a tape device.
-
-2004-08-19 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::dup): Increment dtable's
- need_fixup_before counter on successful dup.
- * net.cc (cygwin_getpeername): Add file descriptor to debug output.
-
-2004-08-17 Pierre Humblet <pierre.humblet@ieee.org>
-
- * fhandler.h (fhandler_dev_dsp:~fhandler_dev_dsp): Delete.
- (fhandler_dev_dsp::open_count): Delete.
- (fhandler_dev_dsp::close_audio_in): New method declaration.
- (fhandler_dev_dsp::close_audio_in): Ditto.
- * fhandler_dsp.cc: Add and edit debug_printf throughout.
- (fhandler_dev_dsp::Audio::denyAccess): Delete.
- (fhandler_dev_dsp::Audio::fork_fixup): Ditto.
- (fhandler_dev_dsp::Audio::getOwner): Ditto.
- (fhandler_dev_dsp::Audio::clearOwner): Ditto.
- (fhandler_dev_dsp::Audio::owner_): Ditto.
- (fhandler_dev_dsp::Audio::setformat): Ditto, rename to setconvert.
- (fhandler_dev_dsp::Audio::lock): Ditto, move to queue.
- (fhandler_dev_dsp::Audio::unlock): Ditto.
- (fhandler_dev_dsp::Audio::lock_): Ditto.
- (fhandler_dev_dsp::Audio::bufferIndex_): New member, from Audio_out
- and Audio_in.
- (fhandler_dev_dsp::Audio::pHdr_): Ditto.
- (fhandler_dev_dsp::Audio::wavehdr_): Ditto.
- (fhandler_dev_dsp::Audio::bigwavebuffer_): ditto.
- (fhandler_dev_dsp::Audio::Qisr2app_): Ditto.
- (fhandler_dev_dsp::Audio::setconvert): New method, from old setformat.
- (fhandler_dev_dsp::Audio::queue::lock): New method.
- (fhandler_dev_dsp::Audio::queue::unlock): Ditto.
- (fhandler_dev_dsp::Audio::queue::dellock): Ditto.
- (fhandler_dev_dsp::Audio::queue::isvalid): Ditto.
- (fhandler_dev_dsp::Audio::queue::lock_): New member.
- (fhandler_dev_dsp::Audio::queue::depth1_): Delete.
- (fhandler_dev_dsp::Audio_out::fork_fixup): New method.
- (fhandler_dev_dsp::Audio_out::isvalid): New method.
- (fhandler_dev_dsp::Audio_out::start): Remove arguments.
- (fhandler_dev_dsp::Audio_out::parsewav): Change arguments and set
- internal state.
- (fhandler_dev_dsp::Audio_out::emptyblocks): Delete.
- (fhandler_dev_dsp::Audio_out::Qapp2app_): Ditto.
- (fhandler_dev_dsp::Audio_out::Qisr2app_): Ditto, move to Audio.
- (fhandler_dev_dsp::Audio_out::bufferIndex_): Ditto.
- (fhandler_dev_dsp::Audio_out::pHdr_): Ditto.
- (fhandler_dev_dsp::Audio_out::wavehdr_): Ditto.
- (fhandler_dev_dsp::Audio_out::bigwavefuffer_): Ditto.
- (fhandler_dev_dsp::Audio_out::freq_): New member.
- (fhandler_dev_dsp::Audio_out::bits_): New member.
- (fhandler_dev_dsp::Audio_out::channels_): New member.
- (fhandler_dev_dsp::Audio_in::fork_fixup): New method.
- (fhandler_dev_dsp::Audio_in::isvalid): New method.
- (fhandler_dev_dsp::Audio_in::Qapp2app_): Delete.
- (fhandler_dev_dsp::Audio_in::Qisr2app_): Ditto, move to Audio.
- (fhandler_dev_dsp::Audio_in::bufferIndex_): Ditto.
- (fhandler_dev_dsp::Audio_in::pHdr_): Ditto.
- (fhandler_dev_dsp::Audio_in::wavehdr_): Ditto.
- (fhandler_dev_dsp::Audio_in::bigwavefuffer_): Ditto.
- (fhandler_dev_dsp::Audio::queue::queue): Simplify.
- (fhandler_dev_dsp::Audio::queue::send): Use lock.
- (fhandler_dev_dsp::Audio::queue::query): Do not use depth1_.
- (fhandler_dev_dsp::Audio::queue::recv): Ditto.
- (fhandler_dev_dsp::Audio::Audio): Adapt to new class members.
- (fhandler_dev_dsp::Audio::~Audio): Ditto
- (fhandler_dev_dsp::Audio_out::start): Reorganize.
- (fhandler_dev_dsp::Audio_out::stop): Simplify.
- (fhandler_dev_dsp::Audio_out::init): Reset the queue and clear flag.
- (fhandler_dev_dsp::Audio_out::write): Reorganize to allocate audio_out.
- (fhandler_dev_dsp::Audio_out::buf_info): Use appropriate block size.
- (fhandler_dev_dsp::Audio_out::callback_sampledone): Do not use lock.
- (fhandler_dev_dsp::Audio_out::waitforspace): Simplify.
- (fhandler_dev_dsp::Audio_out::waitforallsent):Ditto.
- (fhandler_dev_dsp::Audio_out::sendcurrent): Reorganize.
- Clear flag before requeuing.
- (fhandler_dev_dsp::Audio_out::parsewav):
- (fhandler_dev_dsp::Audio_in::start): Reorganize.
- (fhandler_dev_dsp::Audio_in::stop): Simplify.
- (fhandler_dev_dsp::Audio_in::queueblock): Ditto.
- Requeue header in case of error.
- (fhandler_dev_dsp::Audio_in::init): Reset the queue and clear flag.
- (fhandler_dev_dsp::Audio_in::waitfordata): Simplify.
- Do not UnprepareHeader if the flag is zero.
- (fhandler_dev_dsp::Audio_in::buf_info): Ditto.
- (fhandler_dev_dsp::Audio_in::callback_blockfull): Do not use lock.
- (fhandler_dev_dsp::open_count): Delete.
- (fhandler_dev_dsp::open): Only check existence, do not allocate
- anything. Set flags appropriately. Create archetype.
- (fhandler_dev_dsp::write): Call archetype as needed. Create audio_out.
- (fhandler_dev_dsp::read): Call archetype as needed. Create audio_in.
- (fhandler_dev_dsp::close): Call archetype as needed.
- Call close_audio_in and close_audio_out.
- (fhandler_dev_dsp::close_audio_in): New function.
- (fhandler_dev_dsp::close_audio_out): New function.
- (fhandler_dev_dsp::dup): Use archetypes.
- (fhandler_dev_dsp::ioctl): Call archetype as needed. Reorganize for
- new structures.
- (fhandler_dev_dsp::fixup_after_fork): Call archetype as needed.
- (fhandler_dev_dsp::fixup_after_exec): Call archetype as needed.
- Clear audio_in and audio_out.
-
-2004-08-14 Pierre Humblet <pierre.humblet@ieee.org>
-
- * fhandler.cc (fhandler_base::open_9x): Set file attributes
- for new files.
-
-2004-08-11 Christopher Faylor <cgf@timesys.com>
-
- * net.cc (cygwin_gethostbyname): Show failing host name on error.
-
-2004-08-10 Christopher Faylor <cgf@redhat.com>
-
- * select.cc (select_stuff::wait): Correctly check for w4 array bounds.
-
-2004-08-03 Corinna Vinschen <corinna@vinschen.de>
-
- * errno.cc (errmap): Add ERROR_TOO_MANY_LINKS -> EMLINK mapping.
- * syscalls.cc (link): Only copy files if FS doesn't support hard links.
-
-2004-07-26 Christopher January <chris@atomice.net>
-
- * fhandler_proc.cc (format_proc_cpuinfo): Remove Intel-specific flags
- from /proc/cpuinfo on non-Intel processors. Added new AMD-specific
- flags. Changed Intel flag names to match Linux.
-
-2004-07-24 Christopher Faylor <cgf@timesys.com>
-
- * dcrt0.cc (dll_crt0_0): Use proper boolean arguments.
- * pinfo.cc (pinfo::init): Don't consider MapViewOfFileEx error to be
- fatal if exiting.
- * pinfo.h (pinfo::init): Eliminate default argument and supply the
- argument in the one case that needed it.
-
-2004-07-24 Corinna Vinschen <corinna@vinschen.de>
- Christopher Faylor <cgf@timesys.com>
-
- * autoload.cc (GetNativeSystemInfo): Add.
- (IsWow64Process): Add.
- * init.cc (respawn_wow64_process): New function.
- (dll_entry): If process has been started from a 64 bit
- process, call respawn_wow64_process.
- * uname.cc (uname): On 64 bit systems, use GetNativeSystemInfo.
- Show actual CPU type.
-
-2004-07-23 Corinna Vinschen <corinna@vinschen.de>
-
- * dtable.cc (dtable::get_debugger_info): Make stderr r/w according
- to SUSv3.
-
-2004-07-22 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_tty.cc (fhandler_tty_slave::open): Use requested flag
- values also when copying fhandler from archetype.
-
-2004-07-22 Christopher Faylor <cgf@timesys.com>
-
- * pinfo.cc (pinfo::init): Print handle in hex when MapViewOfFile fails.
-
-2004-07-20 Corinna Vinschen <corinna@vinschen.de>
-
- * shm.cc: Whitespace fixes.
-
-2004-07-20 Christopher Faylor <cgf@timesys.com>
-
- * Makefile.in (clean): Remove cygwin.def since it is autogenerated.
-
-2004-07-19 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_dsp.cc (fhandler_dev_dsp::Audio_out::init): Fix non-ISO
- expression.
- * fhandler_floppy.cc (fhandler_dev_floppy::open): Remove unused
- variable.
- * fhandler_proc.cc (format_proc_meminfo): Fix compiler warning.
-
-2004-07-16 Christopher Faylor <cgf@timesys.com>
-
- * pinfo.cc (pinfo::init): Guard against MapViewOfFileEx failure.
-
-2004-07-15 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (mmap_record::alloc_page_map): Mark pages as allocated even
- on Windows 9x, FWIW.
-
-2004-07-15 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (mprotect): When MAP_WRITE protection is requested, use
- READWRITE or WRITECOPY protection, whatever has been used when the
- page has been allocated initially.
-
-2004-07-15 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (class fhandler_dev_raw): Remove is_writing flag.
- Remove declaration of writebuf.
- (class fhandler_dev_floppy): Remove declaration of close.
- * fhandler_floppy.cc (fhandler_dev_floppy::close): Delete.
- (fhandler_dev_floppy::lseek): Remove calls to writebuf. Set
- eom_detected to false after successful seek.
- * fhandler_raw.cc (fhandler_dev_raw::writebuf): Delete.
- (fhandler_dev_raw::raw_read): Remove calls to writebuf.
- (fhandler_dev_raw::raw_write): Always invalidate buffer.
-
-2004-07-15 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (class mmap_record): Fix return type of get_offset.
- (mmap_record::fixup_page_map): Fix off by one error.
- (list::search_record): Use long as type of "start" argument in both,
- declaration and definition. Use long as type for local variable "i".
-
-2004-07-14 Dave Korn <dk@artimi.com>
-
- * fhandler_registry.cc (registry_listing): Correct typo.
- (fhandler_registry::fill_filebuf): Set size of newly expanded buffer
- prior to calling RegQueryValueEx.
-
-2004-07-14 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_raw.cc (fhandler_dev_raw::raw_write): Remove buffered
- write entirely.
-
-2004-07-07 Corinna Vinschen <corinna@vinschen.de>
-
- * spawn.cc (spawn_guts): Check if script is executable.
-
-2004-06-30 Corinna Vinschen <corinna@vinschen.de>
-
- * times.cc (hires_ms::usecs): Don't overreact.
-
-2004-06-30 Corinna Vinschen <corinna@vinschen.de>
-
- * times.cc (hires_ms::usecs): Reinit timer when system time overflows.
-
-2004-06-27 Christopher Faylor <me@cgf.cx>
-
- * thread.cc (__cygwin_lock_lock): Don't bother locking when there is
- only one known thread.
- (__cygwin_lock_unlock): Ditto for unlocking.
-
-2004-06-23 Tomas Ukkonen <tomas.ukkonen@iki.fi>
-
- * fhandler_proc.cc (format_proc_cpuinfo): Test CPU vendor and print
- AMD specific 3dnow capabilities.
-
-2004-06-23 Pierre Humblet <pierre.humblet@ieee.org>
-
- * fhandler_socket.cc (fhandler_socket::release): Call
- WSASetLastError last.
-
-2004-06-21 Christopher Faylor <cgf@alum.bu.edu>
-
- * autoload.cc (wsock_init): Keep lock while modifying return address.
-
-2004-06-17 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::open): Remove 9x specific code.
-
-2004-06-17 Pierre Humblet <pierre.humblet@ieee.org>
-
- * fhandler.cc (fhandler_base::open_9x): Do not check for null name.
- Move debug_printf to common code line.
- (fhandler_base::open): Ditto. Initialize upath. Remove second argument
- of pc.get_nt_native_path.
- * path.h (path_conv::get_nt_native_path): Remove second argument.
- * path.cc (path_conv::get_nt_native_path): Ditto. Call str2uni_cat.
- * security.h (str2buf2uni_cat): Delete declaration.
- (str2uni_cat): New declaration.
- * security.cc (str2buf2uni): Get length from sys_mbstowcs call.
- (str2buf2uni_cat): Delete function.
- (str2uni_cat): New function.
- * miscfuncs.cc (sys_mbstowcs): Add debug_printf.
-
-2004-06-17 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::open): Substitute FILE_SUPERSEDE with
- FILE_OVERWRITE_IF.
-
-2004-06-09 Christopher Faylor <cgf@alum.bu.edu>
-
- * include/cygwin/version.h: REALLY bump dll minor version to 11.
-
-2004-06-08 Egor Duda <deo@corpit.ru>
-
- * include/cygwin/ipc.h: Make IPC_INFO visible only for ipc system
- utilities, to make it consistent with declaration of struct seminfo.
-
-2004-06-08 Pierre Humblet <pierre.humblet@ieee.org>
-
- * path.cc (fchdir): Pass the Posix path to chdir.
-
-2004-06-07 Christopher Faylor <cgf@alum.bu.edu>
-
- * dtable.cc (dtable::find_fifo): Release lock after fifo found (still
- racy).
- * fhandler.h (fhandler_fifo::get_io_handle): New fifo-specific method.
- * fhandler_fifo.cc (fhandler_fifo::close): Close output_handle only if
- it is open.
- (fhandler_fifo::open_not_mine): Reorganize slightly. Don't call _pinfo
- methods when the fifo is owned by me or suffer dtable lock_cs deadlock.
- (fhandler_fifo::open): Call open_not_mine first, otherwise open myself
- (racy).
- * pinfo.cc (_pinfo::commune_recv): Duplicate fifo handles here in
- requesting processes arena to avoid one potential race (of many).
- (_pinfo::commune_send): Move all PICOM_FIFO code under one case
- statement.
-
- * thread.cc (pthread::init_mainthread) Use existing hMainProc handle
- rather than calling GetCurrentProcess.
-
-2004-06-04 Christopher Faylor <cgf@alum.bu.edu>
-
- * winbase.h (ilockincr): Add more neverending changes from the
- inexplicable world of gcc asm constraint magic. Should stop random
- crashes.
- (ilockdecr): Ditto.
-
-2004-06-03 Christopher Faylor <cgf@alum.bu.edu>
-
- * autoload.cc (IsDosDeviceName_U): Define.
- * ntdll.h (IsDosDeviceName_U): Declare.
- * fhandler.cc (fhandler_base::open): Check to see if win32_name is a
- dos device and just call the 9x open if so.
-
-2004-06-03 Christopher Faylor <cgf@alum.bu.edu>
-
- * winbase.h (ilockincr): More changes from the inexplicable world of
- gcc asm magic.
- (ilockdecr): Ditto.
-
-2004-06-03 Christopher Faylor <me@cgf.cx>
-
- * winbase.h (ilockincr): YA correction to ensure correct operation with
- no optimization.
- (ilockdecr): Ditto.
-
-2004-06-03 Corinna Vinschen <corinna@vinschen.de>
-
- * cygserver.h (CYGWIN_SERVER_VERSION_API): Bump.
-
-2004-06-03 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/ipc.h (IPC_KEY_IS_SHMID): Redefine to a more sensible
- value.
-
-2004-06-02 Christopher Faylor <cgf@alum.bu.edu>
-
- * cygheap.cc (cmalloc): Add debugging hook.
-
-2004-06-02 Christophe Jaillet <christophe.jaillet@wanadoo.fr>
-
- * spawn.cc (find_exec): Use has_slash to determine if path has a slash
- rather than calculating this twice.
-
-2004-05-30 Pierre Humblet <pierre.humblet@ieee.org>
-
- * path.cc (mount_info::add_item): Make sure native path has drive
- or UNC form. Call normalize_xxx_path instead of [back]slashify.
- Remove test for double slashes. Reorganize to always debug_print.
-
-2004-05-28 Pierre Humblet <Pierre.Humblet@ieee.org>
-
- * fhandler_disk_file.cc (fhandler_disk_file::fchmod): Only try to open
- the file if it uses an acl.
-
-2004-05-28 Pierre Humblet <Pierre.Humblet@ieee.org>
-
- * path.cc (chdir): Always use the normalized_path as posix_cwd, except
- if it starts with a drive.
-
-2004-05-25 Christopher Faylor <cgf@alum.bu.edu>
-
- * winbase.h: Semi-revert previous patch as it caused strange behavior.
- Use syntax similar to that recommended in mingw-dvlpr.
-
-2004-05-25 Christopher Faylor <cgf@alum.bu.edu>
-
- * include/cygwin/version.h: Bump DLL minor number to 11.
-
-2004-05-25 Christopher Faylor <cgf@alum.bu.edu>
-
- * winbase.h: Add proper attributions for memory operands throughout.
-
-2004-05-24 Christopher Faylor <cgf@alum.bu.edu>
-
- * include/cygwin/version.h: Bump api minor version number.
-
-2004-05-24 Christopher Faylor <cgf@alum.bu.edu>
-
- * cygwin.din: Export atoll.
-
-2004-05-20 Christopher Faylor <cgf@alum.bu.edu>
-
- * tty.cc (tty_list::allocate_tty): Leave tty_mutex armed on successful
- return from !with_console
- * fhandler_tty.cc (fhandler_pty_master::open): Release tty_mutex here
- after all initialization is done.
-
-2004-05-17 Corinna Vinschen <corinna@vinschen.de>
-
- * grp.cc (getgrgid_r): Replace struct group by struct __group32 in
- argument definition.
- (getgrnam_r): Ditto.
-
-2004-05-17 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din: Add symbols flockfile, ftrylockfile, funlockfile,
- getgrgid_r, getgrnam_r and getlogin_r.
- * grp.cc (getgrgid_r): New function.
- (getgrnam_r): Ditto.
- * syscalls.cc (flockfile): Ditto.
- (ftrylockfile): Ditto.
- (funlockfile): Ditto.
- * sysconf.cc (sysconf): Return LOGIN_NAME_MAX in case of
- _SC_LOGIN_NAME_MAX.
- * thread.cc (__cygwin_lock_trylock): Define int. Return value from
- call to pthread_mutex_trylock.
- * uinfo.cc (getlogin_r): New function.
- * include/limits.h: Define LOGIN_NAME_MAX.
- * include/cygwin/version.h: Bump API minor number.
- * include/sys/lock.h: Add declarations for __cygwin_lock_xxx functions.
- * include/sys/stdio.h: Add define for _ftrylockfile.
-
-2004-05-17 Christopher Faylor <cgf@alum.bu.edu>
-
- * tty.cc (tty_list::init): Move hmaster initialization earlier to
- prevent compilation error.
-
-2004-05-17 Christopher Faylor <cgf@alum.bu.edu>
-
- Change the name "title_mutex" to "tty_mutex" throughout.
- * tty.h (tty_list::allocate_tty): Turn argument into a boolean.
- * tty.cc (tty_list::init): Protect entire allocation operation with
- tty_mutex (formerly title_mutex) to protect against allocation races.
-
-2004-05-16 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::recvfrom): Use original flags
- value in each WSARecvFrom call.
- (fhandler_socket::recvmsg): Ditto. Reformat slightly.
-
-2004-05-15 Christopher Faylor <cgf@alum.bu.edu>
-
- * cygthread.cc (cygthread::is): Eliminate.
- * cygthread.h (cygthread::is): Eliminate declaratin.
- * fhandler_console.cc (fhandler_console::read): Only wait for
- signal_arrived in the main thread.
- * fhandler_socket.cc: Include new "wininfo.h".
- (fhandler_socket::ioctl): Use 'winmsg' rather than 'gethwnd()'.
- * sync.cc (muto::grab): Define new function.
- (muto::acquire): Use tls pointer rather than tid.
- (muto::acquired): Ditto.
- (muto::reset): Delete.
- (muto::release): Ditto. Also implement "close on last release".
- * sync.h (muto::tid): Delete.
- (muto::tls): New field.
- (muto::ismine): Delete.
- (muto::owner): Delete.
- (muto::unstable): Delete.
- (muto::reset): Delete.
- (muto::upforgrabs): New method.
- (muto::grab): Ditto.
- (new_muto_name): New define.
- * wininfo.h: New file.
- (wininfo): New class.
- * window.cc: Rework throughout to use winfo class for controlling
- invisible window operation.
- (gethwnd): Delete definition.
- * winsup.h (gethwnd): Delete declaration.
-
-2004-05-15 Christopher Faylor <cgf@alum.bu.edu>
-
- * cygheap.h: Remove some parameter names from declarations throughout.
- (cygheap::set): Reflect changes in declaration for arguments and return
- value from previous checkin.
-
-2004-05-15 Pierre Humblet <pierre.humblet@ieee.org>
-
- * cygheap.h (cwdstuff::set): Modify return value and arguments.
- * path.cc (chdir): Specify PC_POSIX. Do not call SetCurrentDirectory.
- Set posix_cwd in a way that does not break find.exe. Change call to
- cwd.set.
- (cwdstuff::get_initial): Do not call GetCurrentDirectory here.
- (cwdstuff::set): Call SetCurrentDirectory and GetCurrentDirectory as
- needed.
-
-2004-05-12 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (path_conv::check): Don't bail out with error if path is "//".
-
-2004-05-12 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.h (struct init_cygheap): Add mt_h member.
- * fhandler_tape.cc (mt_h): Drop in favor of cygheap based handle.
- (mtinfo_init): Use cygheap->mt_h handle. Protect it.
-
-2004-05-12 Pierre Humblet <pierre.humblet@ieee.org>
-
- * tty.h: Remove the %d or %x from all cygtty strings.
- (tty::open_output_mutex): Only declare.
- (tty::open_input_mutex): Ditto.
- (tty::open_mutex): New definition.
- * fhandler_tty.cc (fhandler_tty_slave::open): Declare buf with
- size CYG_MAX_PATH and replace __small_printf calls by shared_name.
- * tty.cc (tty::create_inuse): Ditto.
- (tty::get_event): Ditto.
- (tty::common_init): Ditto.
- (tty::open_output_mutex): New method definition.
- (tty::open_input_mutex): Ditto.
- (tty::open_mutex): New method.
-
-2004-05-11 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::open): Set file attributes to correct
- value when creating files.
- * path.h (class path_conv): Add write accessor for file_attributes.
-
-2004-05-10 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (class fhandler_socket): Add "owner" status flag.
- * fhandler_socket.cc (wait): Take flag parameter to take FD_OOB into
- account. Don't wait infinitely.
- (fhandler_socket::recvfrom): Also wait for FD_OOB if socket owner.
- (fhandler_socket::recvmsg): Ditto.
- (fhandler_socket::sendto): Ditto.
- (fhandler_socket::sendmsg): Ditto.
- (fhandler_socket::fcntl): Set owner status flag if F_SETOWN with own
- pid is called.
-
-2004-05-09 Pierre Humblet <pierre.humblet@ieee.org>
-
- * environ.cc (build_env): Only try to construct required-but-missing
- variables while issetuid.
-
-2004-05-08 Pierre Humblet <pierre.humblet@ieee.org>
- Christopher Faylor <cgf@timesys.com>
-
- * syscalls.cc: Include environ.h.
- (chroot): Set errno in case of path error. Call getwinenv.
- * environ.cc: Remove the NO_COPY attribute of conv_envvars.
-
-2004-05-07 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_mem.cc (fhandler_dev_mem::fhandler_dev_mem): Move
- initialization of "mem_size" from here...
- (fhandler_dev_mem::open): ...to here. Fix typo in FH_PORT case.
-
-2004-05-07 Gerd Spalink <Gerd.Spalink@t-online.de>
-
- * fhandler_dsp.cc (fhandler_dev_dsp::Audio_out::stop): Move delete of
- bigwavebuffer_ so that it is always cleaned, also in child processes.
- (fhandler_dev_dsp::Audio_in::stop): Ditto.
- (fhandler_dev_dsp::close): Stop audio play immediately in case of
- abnormal exit.
-
-2004-05-07 Corinna Vinschen <corinna@vinschen.de>
-
- Revert code reversion from 2004-04-03. So, revert to async I/O again.
- * fhandler.h (status): Add "closed" flag.
- (prepare): New method declaration.
- (wait): Ditto.
- (release): Ditto.
- * fhandler_socket.cc: Don't include wsock_event.h.
- (fhandler_socket::prepare): New method, moved from wsock_event.
- (fhandler_socket::wait): Ditto.
- (fhandler_socket::release): New method.
- (fhandler_socket::recvfrom): Simplify loop.
- (fhandler_socket::recvmsg): Ditto.
- (fhandler_socket::sendto): Ditto.
- (fhandler_socket::sendmsg): Ditto.
- * net.cc: Don't include wsock_event.h.
- (wsock_event::prepare): Remove.
- (wsock_event::wait): Ditto.
- * wsock_event.h: Remove.
-
-2004-05-06 Christopher Faylor <cgf@alum.bu.edu>
-
- * thread.cc (pthread::create): Move postcreate call to avoid a
- potential race.
- (pthread::cancelable_wait): Don't allow signal interrupt unless main
- thread.
-
-2004-05-07 Pierre Humblet <pierre.humblet@ieee.org>
- Christopher Faylor <cgf@timesys.com>
-
- * path.cc (mount_info::conv_to_posix_path): Return proper status when
- chrooted.
-
-2004-05-06 Pierre Humblet <pierre.humblet@ieee.org>
-
- * path.cc (path_conv::check): Strip trailing dots and spaces and
- return error if the final component had only dots and spaces.
- (normalize_posix_path): Revert 2004-04-30.
- (chdir): Do not check for trailing spaces. Do not set native_dir
- to c:\ for virtual devices. Pass only native_dir to cwd.set.
- (cwdstuff::set): Assume posix_cwd is already normalized.
-
-2004-05-04 Christopher Faylor <cgf@alum.bu.edu>
-
- * path.cc (normalize_win32_path): Detect components with only dots.
- Remove a final . if it follows '\\'.
- (mount_info::conv_to_win32_path): Only backslashify the path when no
- mount is found.
- (chdir): Do not look for components with only dots.
-
-2004-05-04 Pierre Humblet <pierre.humblet@ieee.org>
- Christopher Faylor <cgf@alum.bu.edu>
-
- * path.cc (is_unc_share): Remove redundant tests.
-
-2004-05-04 Corinna Vinschen <corinna@vinschen.de>
-
- * crt0.o (mainCRTStartup): 16 byte align stack for main function.
-
-2004-05-04 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (check_sysfile): Don't scan string twice.
-
-2004-05-03 Corinna Vinschen <corinna@vinschen.de>
-
- * dir.cc (writable_directory): Remove.
- (mkdir): Remove call to writable_directory.
- * syscalls.cc (unlink): Ditto.
- (rename): Ditto.
- * winsup.h (writable_directory): Remove declaration.
-
-2004-04-30 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::open): Call path_conv::get_nt_native_path
- for evaluating NT path.
- * path.cc (normalize_posix_path): Remove trailing dots and spaces.
- (path_conv::get_nt_native_path): New function.
- * path.h (class path_conv): Declare get_nt_native_path method.
-
-2004-04-30 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::open): Fix NT native path evaluation
- to allow opening serial ports.
-
-2004-04-30 DJ Delorie <dj@redhat.com>
-
- * init.cc (threadfunc_fe): Hack to make thread stacks always 16
- byte aligned.
-
-2004-04-21 Yitzchak Scott-Thoennes <sthoenna@efn.org>
-
- * syscalls.cc (lseek64): Fix debug_printf format string.
- (truncate64): Ditto.
-
-2004-04-21 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::lseek): Force res to -1 on error.
-
-2004-04-20 Christopher Faylor <cgf@alum.bu.edu>
-
- * path.cc (is_unc_share): Rename from slash_unc_prefix_p throughout.
-
-2004-04-20 Pierre Humblet <pierre.humblet@ieee.org>
-
- * path.cc (normalize_posix_path): Process all Posix paths and map three
- or more initial slashes to a single one. Simplify processing following
- two initial slashes.
- (normalize_win32_path): Make last argument non-optional and do not
- check for NULL value.
-
-2004-04-20 Pierre Humblet <pierre.humblet@ieee.org>
-
- * fhandler_disk_file.cc (fhandler_base::open_fs): Change
- set_file_attribute call to indicate that NT security isn't used.
- (fhandler_disk_file::fchmod): Rearrange to isolate 9x related
- statements.
- Do not set FILE_ATTRIBUTE_SYSTEM.
- (fhandler_disk_file::fchown): Check noop case first.
- * fhandler.cc (fhandler_base::open9x): Remove ntsec related statements.
- (fhandler_base::set_name): Do not set namehash.
- * fhandler.h (fhandler_base::get_namehash): Compute and set namehash if
- needed.
- * syscalls.cc (access): Verify that fh is not NULL. Do not set PC_FULL.
- (chmod): Ditto.
- (chown_worker): Ditto.
- (stat_worker): Ditto. Verify if the path exists.
-
-2004-04-20 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::open): Remove special DEV_FLOPPY_MAJOR
- treatment.
- * fhandler_raw.cc (fhandler_dev_raw::open): Simplify write-only case.
- * fhandler_tape.cc (fhandler_dev_tape::raw_write): Add accidentally
- dropped condition.
-
-2004-04-20 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::open): Add FILE_READ_ATTRIBUTES when
- only GENERIC_WRITE access is requested.
-
-2004-04-19 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/mtio.h (GMT_ASYNC): New define.
- (MT_ST_ASYNC_WRITES): Remove "Not supported" comment.
-
-2004-04-19 Corinna Vinschen <corinna@vinschen.de>
-
- * errno.cc (errmap): Handle ERROR_IO_PENDING.
- * fhandler.cc (fhandler_base::open): Make tape I/O asynchronous.
- * fhandler.h (class fhandler_dev_tape): Add mt_evt member.
- * fhandler_tape.cc (mtinfo_drive::initialize): Initialize async_writes.
- (mtinfo_drive::close): Handle async writes.
- (mtinfo_drive::read): Add mt_evt parameter. Use overlapped I/O.
- (mtinfo_drive::async_wait): New function.
- (mtinfo_drive::write): Add mt_evt parameter. Use overlapped I/O.
- Handle async writes.
- (mtinfo_drive::_set_pos): Handle async writes.
- (mtinfo_drive::set_partition): Ditto.
- (mtinfo_drive::prepare): Ditto.
- (mtinfo_drive::get_status): Drop useless "else". Handle async_writes
- flag.
- (mtinfo_drive::set_options): Handle async_writes flags.
- (fhandler_dev_tape::close): Close mt_evt handle.
- (fhandler_dev_tape::raw_read): Create mt_evt handle and use in call
- to mtinfo_drive::read.
- (fhandler_dev_tape::raw_write): Create mt_evt handle and use in call
- to mtinfo_drive::write.
- * mtinfo.h (MTINFO_VERSION): Bump.
- (enum dirty_state): Add async_write_pending state.
- (class mtinfo_drive): Add OVERLAPPED struct "ov". Add async_writes
- flag.
- (mtinfo_drive::async_wait): Add declaration.
- (mtinfo_drive::read): Add mt_evt parameter.
- (mtinfo_drive::write): Ditto.
-
- * registry.cc (load_registry_hive): Call enable_restore_privilege
- instead of set_process_privilege.
-
-2004-04-19 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_tape.cc (mtinfo_drive::_set_pos): Take additional dont_wait
- parameter. Use in call to SetTapePosition.
- (mtinfo_drive::set_pos): Accommodate _set_pos calls to above change.
- (mtinfo_drive::set_partition): Ditto.
- * mtinfo.h (mtinfo_drive::_set_pos): Change declaration accordingly.
-
-2004-04-16 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (NtCreateFile): Add.
- * dir.cc (mkdir): Change set_file_attribute call to indicate that
- NT security isn't used.
- * fhandler.cc (fhandler_base::open_9x): New method, created from
- fhandler_base::open.
- (fhandler_base::open): Rearrange to use NtCreateFile instead of
- CreateFile.
- * fhandler.h (enum query_state): Redefine query_null_access to
- query_stat_control. query_null_access isn't allowed in NtCreateFile.
- (fhandler_base::open_9x): Declare.
- * fhandler_disk_file.cc (fhandler_base::fstat_fs): Use
- query_stat_control first, query_read_control if that fails.
- (fhandler_disk_file::fchmod): Call enable_restore_privilege before
- trying to open for query_write_control. Don't fall back to
- opening for query_read_control.
- (fhandler_disk_file::fchown): Ditto.
- (fhandler_disk_file::facl): Only request restore privilege and query
- access necessary for given cmd.
- * fhandler_raw.cc (fhandler_dev_raw::open): Call fhandler_base::open
- instead of opening device here.
- * ntdll.h (NtCreateFile): Declare.
- * path.cc (symlink_worker): Change set_file_attribute call to indicate
- that NT security isn't used.
- * sec_acl.cc (getacl): Fix bracketing.
- * sec_helper.cc (enable_restore_privilege): New function.
- * security.cc (str2buf2uni_cat): New function.
- (write_sd): Don't request restore permission here.
- * security.h (set_process_privileges): Drop stale declaration.
- (str2buf2uni): Declare.
- (str2buf2uni_cat): Declare.
- (enable_restore_privilege): Declare.
- * syscalls.cc (fchown32): Return immediate success on 9x.
-
-2004-04-15 Christopher Faylor <cgf@alum.bu.edu>
-
- * autoload.cc (dll_chain1): Rename to dll_chain. Remove old dll_chain
- code.
- (wsock_init): Avoid unneeded winsock_active tests.
- * winsup.h (winsock_active): Delete.
-
-2004-04-15 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::fchmod): Try opening
- in query_read mode if query_write fails.
- * fhandler_disk_file.cc (fhandler_disk_file::fchown): Ditto.
- * fhandler_disk_file.cc (fhandler_disk_file::facl): Ditto.
-
-2004-04-14 Corinna Vinschen <corinna@vinschen.de>
-
- * ntdll.h: Fix copyright date.
- * sec_acl.cc (acl_worker): Delete allocated fhandler.
- * syscalls.cc (chown_worker): Ditto.
- (chmod): Ditto.
- (stat_worker): Use get_namehash instead of hash_path_name.
-
-2004-04-14 Corinna Vinschen <corinna@vinschen.de>
-
- * sec_acl.cc (getacl): Avoid compiler warning.
- * security.cc (write_sd): Ditto. Fix error handling.
-
-2004-04-14 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (fstat64): Use get_namehash instead of hash_path_name.
-
-2004-04-14 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::open): Simplify access evaluation
- expression.
- (fhandler_base::facl): New method.
- * fhandler.h: Declare facl method in fhandler_base,
- fhandler_disk_file and fhandler_virtual.
- * fhandler_disk_file.cc (fhandler_disk_file::facl): New method.
- * fhandler_virtual.cc (fhandler_virtual::facl): New method.
- * sec_acl.cc: Remove forward declaration for aclsort32 and acl32.
- (setacl): Remove static. Add and use handle parameter.
- (getacl): Ditto.
- (acl_worker): Reorganize to call fhandler's facl method eventually.
- (facl32): Ditto.
- * security.cc (get_nt_object_security): Remove static.
- * security.h: Add extern declarations for get_nt_object_security,
- aclsort32, acl32, getacl and setacl.
-
-2004-04-14 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::open): Accommodate query_write_control
- query_state.
- (fhandler_base::fchown): New method.
- * fhandler.h: Declare fchown method in fhandler_base,
- fhandler_disk_file and fhandler_virtual.
- (enum query_state): Add query_write_control.
- * fhandler_disk_file.cc (fhandler_disk_file::fchmod): Set query_state
- to query_write_control. Only remove FILE_ATTRIBUTE_READONLY if not
- setting security descriptor.
- (fhandler_disk_file::fchown): New method.
- * fhandler_virtual.cc (fhandler_virtual::fchown): New method.
- * sec_acl.cc (setacl): Call write_sd with additional handle attribute.
- * security.cc (write_sd): Take handle argument. Only request owner
- if getting SE_RESTORE_NAME privilege failed. Only open file if
- NtSetSecurityObject failed or handle is NULL.
- (set_nt_attribute): Call write_sd with additional handle attribute.
- * security.h (write_sd): Declare with additional handle argument.
- * syscalls.cc (chown_worker): Reorganize to call fhandler's fchown
- method eventually.
- (fchown): Ditto.
-
-2004-04-14 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (NtSetSecurityObject): Add.
- * fhandler_disk_file.cc (fhandler_disk_file::fchmod): Only request
- READ_CONTROL rights when opening the file.
- * ntdll.h (NtSetSecurityObject): Add declaration.
- * security.cc (write_sd): Call NtSetSecurityObject instead of
- BackupWrite.
- (get_nt_object_security): Don't free security descriptor here.
-
-2004-04-14 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (ttyname): Use buffer of length TTY_NAME_MAX + 1.
- * sysconf.cc (sysconf): Handle _SC_TTY_NAME_MAX request.
- * include/limits.h: Define TTY_NAME_MAX and _POSIX_TTY_NAME_MAX.
-
-2004-04-14 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din: Export rand_r and ttyname_r.
- * syscalls.cc (ttyname_r): New function.
- (ttyname): Move functionality to ttyname_r. Call it from here.
- * include/cygwin/version.h: Bump API minor number.
-
-2004-04-14 Pierre Humblet <pierre.humblet@ieee.org>
-
- * path.h (path_conv::set_symlink): Add argument.
- (path_conv::get_symlink_length): New method.
- (path_conv::symlink_length): New member.
- * path.cc (path_conv::check): Pass symlen to set_symlink.
- * fhandler_disk_file.cc (fhandler_base::fstat_helper): For symlinks
- set st_size from get_symlink_length.
-
-2004-04-13 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (set_nt_attribute): Only call get_nt_object_security
- if handle is NULL.
-
-2004-04-13 Corinna Vinschen <corinna@vinschen.de>
-
- * dir.cc (mkdir): Call set_file_attribute with additional handle
- argument.
- * fhandler.cc (fhandler_base::fchmod): New method.
- * fhandler.h: Declare fchmod method in fhandler_base,
- fhandler_disk_file and fhandler_virtual.
- * fhandler_disk_file.cc (fhandler_disk_file::fchmod): New method.
- (fhandler_base::open_fs): Call set_file_attribute with additional
- handle argument.
- * fhandler_virtual.cc (fhandler_virtual::fchmod): New method.
- * path.cc (symlink_worker): Call set_file_attribute with additional
- handle argument.
- * security.cc (get_nt_object_security): New function.
- (get_nt_object_attribute): Call get_nt_object_security.
- (set_nt_attribute): Add handle argument. Call get_nt_object_security
- first, read_sd only if that fails.
- (set_file_attribute): Add handle argument.
- * security.h (set_file_attribute): Declare with additional handle
- argument.
- * syscalls.cc (stat_suffixes): Move to beginning of file.
- (chown_worker): Call set_file_attribute with additional handle argument.
- (chmod): Reorganize to call fhandler's fchmod method eventually.
- (fchmod): Ditto.
-
-2004-04-13 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (NtQuerySecurityObject): Add.
- * ntdll.h (STATUS_BUFFER_TOO_SMALL): Add definition.
- (NtQuerySecurityObject): Add declaration.
- * security.cc (get_nt_object_attribute): Always use
- NtQuerySecurityObject to retrieve security descriptor.
-
-2004-04-13 Gerd Spalink <Gerd.Spalink@t-online.de>
-
- * fhandler_dsp.cc (fhandler_dev_dsp::Audio_out::stop): Add optional
- boolean argument so that playing can be stopped without playing
- pending buffers.
- (fhandler_dev_dsp::ioctl): Stop playback immediately for
- SNDCTL_DSP_RESET. Do not reset audio parameters in this case.
- Add support for ioctl SNDCTL_DSP_GETISPACE.
- (fhandler_dev_dsp::Audio_out::emptyblocks): Now returns the number of
- completely empty blocks.
- (fhandler_dev_dsp::Audio_out::buf_info): p->fragments is now the number
- of completely empty blocks. This conforms with the OSS specification.
- (fhandler_dev_dsp::Audio_out::parsewav): Ignore wave headers that are
- not aligned on four byte boundary.
- (fhandler_dev_dsp::Audio_in::buf_info): New, needed for
- SNDCTL_DSP_GETISPACE.
-
-2004-04-13 Corinna Vinschen <corinna@vinschen.de>
-
- * winsup.h (IMPLEMENT_STATUS_FLAG): New macro to define status flag
- accessor methods unambiguously.
- * fhandler.h: Use IMPLEMENT_STATUS_FLAG throughout where possible.
- * fhandler_termios.cc (fhandler_termios::tcinit): Call corrected
- accessor for initialized status flag.
- * mtinfo.h (class mtinfo_drive): Use IMPLEMENT_STATUS_FLAG throughout.
- * path.cc (fs_info::update): Remove duplicate call to flags().
- * path.h (struct fs_info): Use IMPLEMENT_STATUS_FLAG where possible.
- (path_conv::is_auto_device): Fix spacing.
- * tty.h (class tty_min): Use IMPLEMENT_STATUS_FLAG throughout.
-
-2004-04-12 Christopher Faylor <cgf@alum.bu.edu>
-
- * thread.cc (pthread::thread_init_wrapper): Wait later to get more
- parallel behavior.
-
-2004-04-12 Christopher Faylor <cgf@alum.bu.edu>
-
- * thread.cc (pthread::create): Use thread mutex to control
- synchronization rather than creating a suspended thread. Wait for
- "cancellation event" to indicate that started thread has been properly
- initialized.
- (pthread::thread_init_wrapper): Use set_tls_self_pointer() to set tid
- and cygtls. Signal with cancel_event when done.
-
-2004-04-12 Pierre Humblet <pierre.humblet@ieee.org>
-
- * path.cc (path_conv::check): Fix "tail filling" logic.
-
-2004-04-11 Christopher Faylor <cgf@alum.bu.edu>
-
- * cygheap.h: Replace inexplicably removed closing brace.
-
-2004-04-11 Christopher Faylor <cgf@alum.bu.edu>
-
- * cygheap.h (CYGHEAP_SLOP): Reduce drastically to avoid collisions.
-
-2004-04-11 Pierre Humblet <pierre.humblet@ieee.org>
-
- * dtable.cc (dtable::extend): Change order of memcpy and cfree.
-
-2004-04-10 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (sync): Define void according to SUSv3.
-
-2004-04-10 Corinna Vinschen <corinna@vinschen.de>
-
- * sec_acl.cc (setacl): Use correct offset when trying to combine
- standard and default entry of same type.
-
-2004-04-10 Pierre Humblet <pierre.humblet@ieee.org>
-
- * fhandler.cc (rootdir): Add and use second argument.
- * winsup.h (rootdir): Add second argument in declaration.
- * path.cc (fs_info::update): Modify call to rootdir.
- * syscalls.cc (check_posix_perm): Ditto.
- (statfs): Ditto. Move syscall_printf near top.
-
-2004-04-10 Corinna Vinschen <corinna@vinschen.de>
-
- * Use new unified status_flag accessor methods from classes fhandler_*,
- tty_min, mtinfo and fs_info thoroughout.
- * fhandler.h: Redefine all set_close_on_exec methods to take a bool
- argument.
- (enum conn_state): Rename from connect_state.
- (class fhandler_base): Rename some status flags to align with
- accessor method names. Drop encoded flag entirely. Unify status
- accessor methods. Const'ify all read accessor methods.
- (class fhandler_socket): Ditto.
- (class fhandler_dev_raw): Ditto.
- * fhandler_disk_file.cc (fhandler_base::fstat_fs): Use fs.fs_is_fat()
- instead of evaluating FATness of file system here.
- (fhandler_disk_file::opendir): Drop call to set_encoded().
- (fhandler_disk_file::readdir): Use pc.isencoded() directly.
- * mtinfo.h (class mtinfo_drive): Const'ify all read accessor methods.
- * path.cc (fsinfo_cnt): Add.
- (fs_info::update): Accommodate class changes. Evaluate file system
- name specific flags right here. Add thread safety for reading and
- writing global fsinfo array.
- * path.h (enum path_types): Drop values for flags kept in fs already.
- (struct fs_info): Move status informatin into private struct type
- status_flags. Add accessor methods. Remove path and file system
- name string arrays in favor of status bits.
- (class path_conv): Use new fs_info status information where
- appropriate.
- (path_conf::fs_has_ea): Rename from fs_fast_ea.
- (path_conf::fs_has_acls): New method.
- (path_conf::root_dir): Remove.
- (path_conf::volname): Remove.
- * syscalls (statfs): Evaluate root dir locally.
- * tty.h (class tty_min): Unify status accessor methods. Const'ify
- all read accessor methods.
-
-2004-04-09 Thomas Pfaff <tpfaff@gmx.net>
-
- * thread.h (pthread::init_mainthread): Remove parameter forked.
- (pthread::set_tls_self_pointer): New static function.
- * thread.cc (MTinterface::fixup_after_fork): Change call to
- pthread::init_mainthread.
- (pthread::init_mainthread): Remove parameter forked. Simplify thread
- self pointer handling.
- (pthread::self): Set thread self pointer to null_pthread if thread has
- not been initialized.
- (pthread::set_tls_self_pointer): New static function.
-
-2004-04-05 Pierre Humblet <pierre.humblet@ieee.org>
-
- * path.cc (path_conv::check): Optimize symlink replacements.
-
-2004-04-09 Pierre Humblet <pierre.humblet@ieee.org>
-
- * path.cc (normalize_posix_path): Add "tail" argument and set it.
- Always have a final slash for directories. Pass 3rd argument to
- normalize_win32_path.
- (path_conv::check): Pass tail to normalize_posix_path. Set
- need_directory and remove final slash after that call. Remove last
- argument to mount_table->conv_to_win32_path(). Remove noop dostail
- check. Remove fs.update() from inner loop. Improve tail finding
- search.
- (normalize_win32_path): Add and set tail argument.
- (mount_item::build_win32): Avoid calling strcpy.
- (mount_info::conv_to_win32_path): Remove third argument and simplify
- because the source is normalized. Keep /proc path in Posix form. Call
- win32_device_name() only once.
- (mount_info::conv_to_posix_path): Add and use 3rd argument to
- normalize_win32_path to avoid calling strlen.
- (cwdstuff::set): Add 3rd argument to normalize_posix_path and remove
- final slash if any.
- * shared_info.h (mount_info::conv_to_win32_path): Remove last argument
- in declaration.
-
-2004-04-09 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (class fhandler_dev_raw): Move status bits into protected
- bitfield struct type status_flags. Drop unused has_written bit.
- Add accessor methods.
- (fhandler_dev_raw::clear): Remove.
- (fhandler_dev_raw::reset_devbuf): Remove.
- * fhandler_floppy.cc (fhandler_dev_floppy::lseek): Use accessor method
- for is_writing.
- * fhandler_raw.cc: Use status accessor methods throughout.
- (fhandler_dev_raw::clear): Remove.
- (fhandler_dev_raw::fhandler_dev_raw): Drop clear call.
- (fhandler_dev_raw::~fhandler_dev_raw): Ditto.
- * fhandler_tape.cc: Use mtinfo::status accessor methods throughout.
- (mtinfo_drive::close): Fix conditional to enable BSD semantics
- correctly.
- (mtinfo_drive::get_status): Rename from mtinfo_drive::status.
- * mtinfo.h (class mtinfo_drive): Move status bits into private bitfield
- struct type status_flags. Add accessor methods.
- Rename status method to get_status.
-
-2004-04-09 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (fsinfo): Global storage for file system information.
- (fs_info::update): Store file system information also in fsinfo and
- short circuit GetVolumeInformation by using alredy stored file system
- information.
-
-2004-04-09 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (fhandler_base::status): Declare private.
- (fhandler_base::open_status): Ditto.
- (class fhandler_socket): Move status bits into private bitfield struct
- type status_flags. Change accessor methods appropriately.
- * fhandler_socket.cc (fhandler_socket::fhandler_socket): Accommodate
- above status bit changes.
- * tty.h: Remove status bit enumerator.
- (TTYISSETF): Remove.
- (TTYSETF): Remove.
- (TTYCLEARF): Remove.
- (TTYCONDSETF): Remove.
- (tty_min::status): Define as private bitfield struct type status_flags.
- Add appropriate accessor methods.
- * fhandler_console.cc: Use tty_min::status accessor methods throughout.
- * fhandler_termios.cc: Ditto.
- * winsup.h (__ISSETF): Remove.
- (__SETF): Remove.
- (__CLEARF): Remove.
- (__CONDSETF): Remove.
-
-2004-04-09 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::write): Use bool parameter in calls to
- set_did_lseek.
- (fhandler_base::fhandler_base): Accommodate new status and open_status
- constructor.
- * fhandler.h: Remove status bit enumerator.
- (FHDEVN): Remove.
- (FHISSETF): Remove.
- (FHSETF): Remove.
- (FHCLEARF): Remove.
- (FHCONDSETF): Remove.
- (FHSTATOFF): Remove.
- (UNCONNECTED, CONNECT_PENDING, CONNECTED): Substitute by enum
- connect_state.
- (fhandler_base::status): Define as bitfield struct type status_flags.
- Remove unused flags entirely. Accommodate all status access methods.
- (open_status): Define as bitfield struct type status_flags.
- (fhandler_socket): Move socket related status bits to here. Redefine
- had_connect_or_listen to be part of these status bits. Accommodate
- related access methods.
- * fhandler_disk_file.cc (fhandler_base::fstat_helper): Use pc.issymlink
- instead of dropped method get_symlink_p.
- (fhandler_base::open_fs): Remove setting dropped status flags.
- * fhandler_socket.cc: Use values from enum connect_state throughout.
- (fhandler_socket::fhandler_socket): Initialize status bits.
- * fhandler_virtual.cc (fhandler_virtual::open): Remove setting dropped
- status flags.
- * net.cc: Use values from enum connect_state throughout.
- * select.cc: Ditto.
- * shared_info.h: Protect struct console_state using _FHANDLER_H_
- instead of FHDEVN.
-
-2004-04-09 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (get_file_attribute): Fix conditional.
-
-2004-04-08 Christopher Faylor <cgf@bosbc.com>
-
- * child_info.h: Update CHILD_INFO_MAGIC after 2004-04-03 change.
-
-2004-04-08 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (hash_path_name): Replace hash algorithm with SDBM.
-
-2004-04-08 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::open): Set query access mode according
- to query_open setting.
- (fhandler_base::fhandler_base): Initialize query_open.
- * fhandler.h (FH_QUERYOPEN): Drop.
- (enum query_state): Add.
- (class fhandler_base): Add query_open member.
- (fhandler_base::get_query_open): Redefine to use query_open.
- (fhandler_base::set_query_open): Ditto.
- * fhandler_disk_file.cc (fhandler_base::fstat_fs): Remove O_DIROPEN
- from open_flags since it's added in open_fs anyway. Remove
- query_open_already. Use new query_open settings. Rearrange slightly.
- (fhandler_base::fstat_helper): Add get_io_handle as parameter to
- get_file_attribute.
- * security.cc (get_nt_object_attribute): Make returning an int.
- Return -1 on error, 0 otherwise.
- (get_file_attribute): Take an object handle as argument. Move down
- to allow calling get_nt_object_attribute in case a non-NULL handle
- is given.
- * security.h (get_file_attribute): Add handle to argument list.
- * syscalls.cc (chown_worker): Accommodate new definition of
- get_file_attribute.
-
-2004-04-07 Pierre Humblet <pierre.humblet@ieee.org>
-
- * path.cc (path_prefix_p): Optimize test order.
-
-2004-04-06 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (EXTRALIBS): Add libtextreadmode.a.
- (INSTOBJS): Add textreadmode.o.
- * textreadmode.c: New file.
-
-2004-04-06 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_base::fstat_helper): Request
- compressed size only if the matching attributes are set. Use
- NtQueryInformationFile instead of GetCompressedFileSize.
- (fhandler_base::fstat_by_handle): Remove NT 3.5 cruft since
- local.dwVolumeSerialNumber isn't used subsequently.
- * ntdll.h: Add typedefs for FILE_COMPRESSION_INFORMATION and
- FILE_INFORMATION_CLASS.
-
-2004-04-06 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_raw.cc (fhandler_dev_raw::open): Actually use "options".
-
-2004-04-04 Gerd Spalink <Gerd.Spalink@t-online.de>
-
- * fhandler_dsp.cc (fhandler_dev_dsp::ioctl): Add implementation
- for ioctl codes SNDCTL_DSP_CHANNELS and SNDCTL_DSP_GETCAPS.
-
-2004-04-03 Christopher Faylor <cgf@bosbc.com>
-
- * child_info.h (child_info::cygheap_reserve_sz): Rename from
- cygheap_alloc_sz.
- * cygheap.cc: Rename alloc_sz to reserve_sz throughout.
-
-2004-04-03 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (class fhandler_socket): Remove has_been_closed member.
- * fhandler_socket.cc (fhandler_socket::recvfrom): Revert to
- overlapped I/O.
- (fhandler_socket::recvmsg): Ditto.
- (fhandler_socket::sendto): Ditto.
- (fhandler_socket::sendmsg): Ditto.
- * net.cc (wsock_event::prepare): Ditto.
- (wsock_event::wait): Ditto. Evaluate overlapped result also after
- calling CancelIo (thanks to Patrick Samson <p_samson@yahoo.com>).
- (wsock_event::release): Remove.
- * wsock_event.h: Revert to overlapped I/O.
-
-2004-04-02 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (wsock_event::release): Use NULL handle in call to
- WSAEventSelect to resolve KB 168349.
-
-2004-04-01 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::recvfrom): Rearrange loop
- so that WSARecvFrom is always called before waiting.
- (fhandler_socket::recvmsg): Ditto.
-
-2004-04-01 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (wsock_event::wait): Make wsa_err an int. Don't set
- ret to 0 if any error has happened.
-
-2004-04-01 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::sendto): Drop out of loop if
- has_been_closed gets set.
- (fhandler_socket::sendmsg): Ditto.
- * net.cc (wsock_event::wait): Don't initialize evts. Don't try to
- evaluate network events if WSAEnumNetworkEvents fails.
- (wsock_event::release): Save last WSA error and set it again unless
- resetting to blocking socket fails.
- * wsock_event.h (class wsock_event): Remove destructor.
-
-2004-03-31 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_tape.cc (mtinfo::initialize): Fix fatal error message.
-
-2004-03-31 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::recvfrom): Always initialize
- ret to 0 when using in Winsock call.
- (fhandler_socket::recvmsg): Ditto.
- (fhandler_socket::sendto): Ditto.
- (fhandler_socket::sendmsg): Ditto.
-
-2004-03-31 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_tape.cc (mtinfo_drive::get_pos): Only set partition if
- GetTapePosition returned a non-zero partition number.
- (mtinfo_drive::create_partitions): Reinitialize to partition 0.
- Support TAPE_DRIVE_INITIATOR and TAPE_DRIVE_FIXED partitioning.
- (mtinfo_drive::set_partition): Initialize new partition.
- (mtinfo_drive::status): Readd accidentally dropped setting of mt_resid.
-
- * net.cc (wsock_event::prepare): Always print debug output in case
- of error.
-
-2004-03-31 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::sendmsg): Add SIGPIPE handling.
-
-2004-03-31 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::recvfrom): Initialize res to
- SOCKET_ERROR. Use SOCKET_ERROR instead of -1 throughout.
- (fhandler_socket::recvmsg): Ditto.
- (fhandler_socket::sendto): Ditto.
- (fhandler_socket::sendmsg): Ditto.
- * net.cc (wsock_event::prepare): Call WSASetLastError instead of
- SetLastError.
- (wsock_event::wait): Use SOCKET_ERROR instead of -1.
-
-2004-03-30 Thomas Pfaff <tpfaff@gmx.net>
-
- * thread.h (pthread::init_mainthread): Add parameter forked. Set
- forked default to false..
- * thread.cc (MTinterface::fixup_after_fork): Call
- pthread::init_mainthread with forked = true.
- (pthread::init_mainthread): Add parameter forked. Do not change thread
- self pointer when forked.
-
-2004-03-30 Corinna Vinschen <corinna@vinschen.de>
-
- * shm.cc (shmat): If shmid is unknown, call a special variation
- of shmget to retrieve the shared memory segment from Cygserver
- instead of failing immediately.
- * include/cygwin/ipc.h (IPC_KEY_IS_SHMID): New internal flag for
- shmget when called from shmat.
-
-2004-03-29 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (class fhandler_socket): Add has_been_closed member.
- * fhandler_socket.cc (fhandler_socket::fhandler_socket): Initialize
- has_been_closed to 0.
- (fhandler_socket::recvfrom): Use new asynchronous I/O driven
- wsock_event methods.
- (fhandler_socket::recvmsg): Ditto.
- (fhandler_socket::sendto): Ditto.
- (fhandler_socket::sendmsg): Ditto.
- * net.cc (wsock_event::prepare): Reimplement using asynchronous I/O.
- (wsock_event::wait): Ditto.
- (wsock_event::release): New method.
- * wsock_event.h (class wsock_event): Remove ovr member. Accommodate
- new implementation of prepare and wait methods. Add release method.
-
-2004-03-29 Thomas Pfaff <tpfaff@gmx.net>
-
- * thread.cc (pthread::atforkprepare): Call
- MT_INTERFACE->fixup_before_fork at the end of atforkprepare.
-
-2004-03-29 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (wsock_event::wait): Change scope of local "len" variable.
-
-2004-03-28 Corinna Vinschen <corinna@vinschen.de>
-
- * shm.cc (shmat): Return (void *) -1 on error instead of NULL.
-
-2004-03-27 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_nodevice.cc (fhandler_nodevice::open): Assume that errno has
- already been set if pc.error is nonzero.
-
-2004-03-26 Christopher Faylor <cgf@redhat.com>
-
- * cygheap.cc (cygheap_fixup_in_child): Improve strace output.
-
-2004-03-26 Corinna Vinschen <corinna@vinschen.de>
-
- * errno.cc (errmap): Map ERROR_SHARING_VIOLATION to EBUSY,
- ERROR_EOM_OVERFLOW and ERROR_NO_DATA_DETECTED to EIO. Add mappings
- for ERROR_NO_MEDIA_IN_DRIVE, ERROR_DEVICE_REQUIRES_CLEANING and
- ERROR_DEVICE_DOOR_OPEN.
- * fhandler.h (class fhandler_dev_raw): Drop varblkop member.
- (fhandler_dev_raw::is_eom): De-virtualize.
- (fhandler_dev_raw::is_eof): Ditto.
- (class fhandler_dev_tape): Drop lasterr and dp member. Add mt_mtx
- member. Drop all private methods formerly used by ioctl.
- (fhandler_dev_tape::is_rewind_device): Use get_minor for clarity.
- (fhandler_dev_tape::driveno): New method.
- (fhandler_dev_tape::drive_init): New method.
- (fhandler_dev_tape::clear): Remove method.
- (fhandler_dev_tape::is_eom): Ditto.
- (fhandler_dev_tape::is_eof): Ditto.
- (fhandler_dev_tape::write_file): Ditto.
- (fhandler_dev_tape::read_file): Ditto.
- (fhandler_dev_tape::_lock): New method.
- (fhandler_dev_tape::unlock): New method.
- (fhandler_dev_tape::raw_read): New method.
- (fhandler_dev_tape::raw_write): New method.
- * fhandler_raw.cc (fhandler_dev_raw::is_eom): New method.
- (fhandler_dev_raw::is_eof): New method.
- (fhandler_dev_raw::open): Allow setting write through option by
- using the O_TEXT flag as ... flag.
- (fhandler_dev_raw::writebuf): Remove usage of varblkop and other
- tape specific code.
- (fhandler_dev_raw::raw_read): Ditto.
- (fhandler_dev_raw::dup): Ditto.
- * fhandler_tape.cc: Rewrite tape operations entirely. Implement
- new tape driver classes mtinfo, mtinfo_drive and mtinfo_part.
- Reduce fhandler_dev_tape methods to mostly just calling appropriate
- mtinfo_drive methods.
- (mtinfo_init): New function adding the mtinfo shared memory area.
- * mtinfo.h: New file, containing the definition of the new tape
- driver classes.
- * shared.cc: Include mtinfo.h.
- (offsets): Add entry for mtinfo shared memory area.
- (memory_init): Call mtinfo_init.
- * shared_info.h (shared_locations): Add SH_MTINFO shared location.
- * include/cygwin/mtio.h: Change and add various comments. Add GMT_xxx
- macros for new generic flags. Add MT_ST_xxx bitfield definitions
- for MTSETDRVBUFFER ioctl.
- * include/cygwin/version.h: Bump API minor version number.
-
-2004-03-26 Christopher Faylor <cgf@redhat.com>
-
- * path.cc (path_conv::check): Use 'strchr' rather than 'strrchr' to
- find end of string, for efficiency.
-
-2004-03-26 Thomas Pfaff <tpfaff@gmx.net>
-
- * include/cygwin/_types.h: New file.
- * include/sys/lock.h: Ditto.
- * include/sys/stdio.h: Ditto.
- * thread.cc: Include sys/lock.h
- (__cygwin_lock_init): New function.
- (__cygwin_lock_init_recursive): Ditto.
- (__cygwin_lock_fini): Ditto.
- (__cygwin_lock_lock): Ditto.
- (__cygwin_lock_trylock): Ditto.
- (__cygwin_lock_unlock): Ditto.
- (pthread::atforkprepare): Lock file pointer before fork.
- (pthread::atforkparent): Unlock file pointer after fork.
- (pthread::atforkchild): Ditto.
-
-2004-03-26 Corinna Vinschen <corinna@vinschen.de>
-
- * sem.cc (semget): Fix debug string.
- (semop): Ditto.
- * shm.cc (fixup_shms_after_fork): Ditto.
- (shmat): Ditto.
- (shmdt): Ditto.
- (shmget): Ditto.
-
-2004-03-26 Christopher Faylor <cgf@redhat.com>
-
- * sigproc.cc (wait_sig): Make sure that SIGCHLD is handled regardless
- of whether a signal is queued.
-
-2004-03-26 Christopher Faylor <cgf@redhat.com>
-
- * sigproc.cc (wait_sig): Report if not trying to send signal due to
- queued signal.
-
-2004-03-25 Christopher Faylor <cgf@redhat.com>
-
- * path.cc (normalize_posix_path): Reorganize to short circuit to DOS
- path handling whenever a '\' is detected.
-
- * signal.cc (sigaction): Make strace output more informative.
- * sigproc.cc (pending_signals::add): Just index directly into signal
- array rather than treating the array as a heap.
- (pending_signals::del): Ditto.
- (wait_sig): Don't send signal if we already have a similar signal
- queued.
- * sigproc.h (call_signal_handler_now): Remove obsolete declaration.
-
-2004-03-23 Gerd Spalink <Gerd.Spalink@t-online.de>
-
- * fhandler_dsp.cc (fhandler_dev_dsp::write): Remove type
- cast from argument to audio_out_->parsewav() to make reference
- work properly. Now .wav file headers are properly discarded.
-
-2004-03-23 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_base::fstat_fs): Use created
- handle regardless of nohandle state. Clean up afterwards.
-
-2004-03-23 Gerd Spalink <Gerd.Spalink@t-online.de>
-
- * autoload.cc: Load eight more functions for waveIn support.
- * fhandler.h (class fhandler_dev_dsp): Add class Audio, class Audio_in
- and class Audio_out members and audio_in_, audio_out_ pointers so
- that future changes are restricted to file fhandler_dsp.cc.
- * fhandler_dsp.cc (fhandler_dev_dsp::Audio): Add this class to treat
- things common to audio recording and playback.
- Add more format conversions.
- (fhandler_dev_dsp::Audio::queue): New queues for buffer management
- to fix incomplete cleanup of buffers passed to the wave device.
- (fhandler_dev_dsp::Audio_in): New, added class to implement audio
- recording.
- (fhandler_dev_dsp::Audio_out): Rework to use functionality provided
- by fhandler_dev_dsp::Audio. Allocate memory audio buffers late,
- just before write.
- (fhandler_dev_dsp::Audio_out::start): Size of wave buffer allocated
- here depends on audio rate/bits/channels.
- (fhandler_dev_dsp::Audio_in::start): Ditto.
- (fhandler_dev_dsp::setupwav): Replaced by following function.
- (fhandler_dev_dsp::Audio_out::parsewav): Does not setup wave device
- any more. Discard wave header properly.
- (fhandler_dev_dsp::open): Add O_RDONLY and_RDWR as legal modes.
- Protect against re-open. Activate fork_fixup.
- (fhandler_dev_dsp::ioctl): Protect against actions when audio is
- active. SNDCTL_DSP_GETFMTS only returns formats supported by
- mmsystem wave API, not all supported formats. SNDCTL_DSP_GETBLKSIZE
- result now depends on current audio format.
- (fhandler_dev_dsp::fixup_after_fork): Call fork_fixup for the Audio
- classes to let them duplicate the CRITICAL_SECTION.
-
-2004-03-19 Pierre Humblet <pierre.humblet@ieee.org>
- Christopher Faylor <cgf@redhat.com>
-
- * init.cc (munge_threadfunc): Handle all instances of search_for.
- (prime_threads): Test threadfunc_ix[0].
-
-2004-03-21 Christopher Faylor <cgf@redhat.com>
-
- * cygheap.cc (init_cheap): Set initial_sz to something or suffer
- spurious output.
- (cygheap_fixup_in_child): Set alloc_sz to passed in size to ensure that
- children will have the right size heap.
- (_csbrk): Make output conditional on DEBUGGING.
-
-2004-03-21 Christopher Faylor <cgf@redhat.com>
-
- * cygheap.cc (init_cheap): Conditionalize debugging code.
-
-2004-03-21 Christopher Faylor <cgf@redhat.com>
-
- * cygheap.cc (init_cheap): Add ability to specify minimal cygwin heap
- size when debugging.
- (_csbrk): Report error in allocation to stderr.
- (ccalloc): Ditto.
- * dtable.cc (dtable::find_fifo): Remove use of atoms.
- * dtable.h (dtable::find_fifo): Ditto.
- * fhandler.h (fhandler_fifo): Ditto.
- * fhandler_fifo.cc (fhandler_fifo::fhandler_fifo): Ditto.
- (fhandler_fifo::set_use): Ditto.
- (fhandler_fifo::open_not_mine): Ditto.
- (fhandler_fifo::open): Ditto.
- * pinfo.cc (_pinfo::commune_recv): Ditto.
- (_pinfo::commune_send): Ditto.
-
-2004-03-19 Pierre Humblet <pierre.humblet@ieee.org>
-
- * dir.cc (rmdir): Reorganize error handling to reduce indentation.
-
-2004-03-19 Christopher Faylor <cgf@redhat.com>
-
- * include/cygwin/version.h: Bump DLL minor number to 10.
-
-2004-03-18 Christopher Faylor <cgf@redhat.com>
-
- * child_info.h (CURR_CHILD_INFO_MAGIC): Reset to new value.
- (child_info::cygheap_alloc_sz): New field.
- * cygheap.cc (init_cheap): Reduce size of cygwin stack until minimal
- hit when attempting initial allocation.
- (cygheap_setup_for_child): Use alloc_sz to create secondary memory
- mapped entry. Store alloc_sz in cygheap_alloc_sz.
- (cygheap_fixup_in_child): Use cygheap_alloc_sz to map parent's cygheap.
- * cygheap.h (_CYGHEAPSIZE_SLOP): New define.
- (CYGHEAPSIZE): Use _CYGHEAPSIZE_SLOP.
-
-2004-03-18 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_proc.cc (format_proc_meminfo): On NT, try to figure out
- real swap file usage by requesting SystemPagefileInformation. Use
- GlobalMemoryStatus as fallback.
- * ntdll.h (_SYSTEM_INFORMATION_CLASS): Add SystemPagefileInformation.
- (struct _SYSTEM_PAGEFILE_INFORMATION): Define.
-
-2004-03-17 Christopher Faylor <cgf@redhat.com>
-
- * pipe.cc (fhandler_pipe::dup): Fix debugging message.
-
-2004-03-17 Christopher Faylor <cgf@redhat.com>
-
- * include/cygwin/version.h: Bump DLL minor number to 9.
-
-2004-03-16 Christopher Faylor <cgf@redhat.com>
-
- * sigproc.cc (proc_terminate): Release sync_proc_subproc when done
- terminating or suffer potential hangs.
- (get_proc_lock): Reorganize debugging output slightly.
-
-2004-03-15 Christopher Faylor <cgf@redhat.com>
-
- * cygtls.cc (_cygtls::fixup_after_fork): Just manipulate the signal
- stack if a signal occurred during the parent's fork. Otherwise leave
- it alone.
-
-2004-03-15 Christopher Faylor <cgf@redhat.com>
-
- * exceptions.cc (try_to_debug): Report on tid of caller.
-
- * sync.cc (muto::acquire): Fix some races.
- * sync.h (muto): Expose some fields for easier debugging.
-
-2004-03-15 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (fhandler_dev_tape::tape_get_pos): Declare with extra
- parameter for partition number.
- (fhandler_dev_tape::_tape_set_pos): Ditto.
- (fhandler_dev_tape::tape_partition): New method.
- (fhandler_dev_tape::tape_set_partition): New method.
- * fhandler_tape.cc (fhandler_dev_tape::open): Call private methods
- directly instead of ioctl.
- (fhandler_dev_tape::ioctl): Use long erase on MTERASE by default.
- Don't use absolute positioning on MTSEEK. Call tape_set_partition
- on MTSETPART, tape_partition on MTMKPART.
- (fhandler_dev_tape::tape_get_pos): Add partition number parameter.
- Prefer logical position information over absolute position information.
- Return partition number.
- (fhandler_dev_tape::_tape_set_pos): Add partition number parameter.
- Use in SetTapePosition.
- (fhandler_dev_tape::tape_set_pos): Remove special TAPE_ABSOLUTE_BLOCK
- handling.
- (fhandler_dev_tape::tape_erase): Rewind before erasing.
- (fhandler_dev_tape::tape_status): Rearrange slightly. Try to get a
- MediaType even if no tape is loaded. Store active partition in
- mt_resid as on Linux.
- (fhandler_dev_tape::tape_partition): New method.
- (fhandler_dev_tape::tape_set_partition): New method.
- * include/cygwin/mtio.h: Fix copyright. Add comment to explain
- mt_resid content.
- * include/cygwin/version.h: Bump API minor number.
-
-2004-03-14 Christopher Faylor <cgf@redhat.com>
-
- * cygtls.cc (_cygtls::remove): Call remove_wq even when we can't
- necessarily get the cygtls table lock.
- * cygtls.h (_cygtls::remove_wq): Add wait argument.
- * sigproc.cc (_cygtls::remove_wq): Honor wait argument when acquiring
- lock.
- (proc_terminate): Don't NULL sync_proc_subproc since other threads may
- still try to access it.
-
-2004-03-14 Corinna Vinschen <corinna@vinschen.de>
-
- * errno.cc (errmap): Map ERROR_BEGINNING_OF_MEDIA and
- ERROR_SETMARK_DETECTED to EIO instead of ESPIPE.
- Handle ERROR_FILEMARK_DETECTED.
- * fhandler_tape.cc (TAPE_FUNC): Add comment that ERROR_BUS_RESET
- has still to be handled correctly.
- (fhandler_dev_tape::open): Accommodate fact that get.mt_dsreg
- also contains density code.
- (fhandler_dev_tape::ioctl): Rearrange slightly. Reset devbuf also on
- MTNOP, MTWSM, MTSETBLK, MTSETDRVBUFFER, MTSETPART and MTMKPART.
- (fhandler_dev_tape::tape_set_pos): Rearrange. Match behaviour to
- the Linux tape driver.
- (fhandler_dev_tape::tape_status): Call IOCTL_STORAGE_GET_MEDIA_TYPES_EX
- if available. Return device type and density code in appropriate
- mtget members.
- * wincap.h (wincaps::has_ioctl_storage_get_media_types_ex): New element.
- * wincap.cc: Implement above element throughout.
- * include/cygwin/mtio.h: Add tape device types as returned by
- IOCTL_STORAGE_GET_MEDIA_TYPES_EX.
- (MT_TAPE_INFO): Use above type codes.
- (struct mtget): Change mt_dsreg comment.
-
-2004-03-14 Pierre Humblet <pierre.humblet@ieee.org>
-
- * dir.cc (rmdir): Construct real_dir with flag PC_FULL.
- Use a loop instead of recursion to handle the current directory.
-
-2004-03-14 Christopher Faylor <cgf@redhat.com>
-
- * cygtls.cc (_cygtls::remove): Call remove_wq to ensure that wait stuff
- is removed from proc_subproc linked list.
- * cygtls.h (_cygtls::remove_wq): Declare.
- * sigproc.cc (_cygtls::remove_wq): Define.
- (proc_subproc): Label event handle appropriately.
- * spawn.cc (spawn_guts): Return -1 when wait() fails for spawn types
- that require waiting.
-
-2004-03-13 Corinna Vinschen <corinna@vinschen.de>
-
- * errno.cc (errmap): Handle ERROR_BUS_RESET.
- * fhandler.h (fhandler_dev_raw::write_file): New method, created
- from former static function.
- (fhandler_dev_raw::read_file): Ditto.
- (reset_devbuf): New inline method.
- (class fhandler_dev_tape): Add TAPE_GET_DRIVE_PARAMETERS
- member `dp'.
- (fhandler_dev_tape::write_file): New method.
- (fhandler_dev_tape::read_file): Ditto.
- (fhandler_dev_tape::tape_get_feature): Convert to inline method.
- (fhandler_dev_tape::tape_error): New method, created from former
- static function.
- (fhandler_dev_tape::tape_get_blocksize): Remove declaration.
- * fhandler_raw.cc (fhandler_dev_raw::write_file): New method, created
- from former static function.
- (fhandler_dev_raw::read_file): Ditto.
- (fhandler_dev_raw::writebuf): Accommodate the fact that no devbuf
- exists under variable block size condition.
- (fhandler_dev_raw::raw_read): Ditto. Add local p pointer to simplify
- pointer arithmetic.
- (fhandler_dev_raw::raw_write): Always set devbufend to 0 when starting
- with writing. Accommodate the fact that no devbuf exists under
- variable block size condition.
- * fhandler_tape.cc: Various formatting changes.
- (TAPE_FUNC): New macro. Use throughout as tape function loop.
- (get_ll): Convert into macro.
- (IS_EOM): New macro.
- (IS_EOF): New macro.
- (fhandler_dev_tape::is_eom): Use IS_EOM macro.
- (fhandler_dev_tape::is_eof): Use IS_EOF macro.
- (fhandler_dev_tape::write_file): New method.
- (fhandler_dev_tape::read_file): New method.
- (fhandler_dev_tape::open): Get drive information block here once.
- (fhandler_dev_tape::lseek): Remove unneeded duplicate code.
- (fhandler_dev_tape::dup): Duplicate drive information block.
- (fhandler_dev_tape::ioctl): Remove drvbuf in variable block size mode.
- Return ERROR_INVALID_BLOCK_LENGTH instead of ERROR_MORE_DATA if
- buffer contains data which would get lost on buffer size changing.
- Use absolute tape positioning also if drive only supports logical
- block positioning.
- (fhandler_dev_tape::tape_error): New method, created from former
- static function.
- (fhandler_dev_tape::tape_get_pos): Allow logical block reporting.
- Workaround tape driver bug.
- (fhandler_dev_tape::_tape_set_pos): Reset device buffer and flags
- after successful repositioning.
- (fhandler_dev_tape::tape_set_pos): Allow logical block positioning.
- Workaround tape driver bug.
- (fhandler_dev_tape::tape_erase): Use dp instead of calling
- GetTapeParameters.
- (fhandler_dev_tape::tape_prepare): Ditto.
- (fhandler_dev_tape::tape_get_blocksize): Remove.
- (fhandler_dev_tape::tape_set_blocksize): Don't call tape_get_blocksize.
- Error handling already done in fhandler_dev_tape::ioctl.
- (fhandler_dev_tape::tape_status): Remove local `dp' variable.
- Accommodate logical tape reporting. Call tape_get_feature instead
- of accessing feature words directly.
- (fhandler_dev_tape::tape_compression): Use dp instead of calling
- GetTapeParameters. Fix resetting datcompression.
-
-2004-03-12 Christopher Faylor <cgf@redhat.com>
-
- * wait.cc (wait4): Initialize pointer on entry. Avoid calling
- call_signal_handler twice since that guarantees exiting with errno set
- to EINTR.
-
-2004-03-12 Corinna Vinschen <corinna@vinschen.de>
-
- * exceptions.cc (sigpacket::process): Simplify code slightly.
-
-2004-03-11 Christopher Faylor <cgf@redhat.com>
-
- * cygtls.h (waitq): Declare structure here.
- (_cygtls::wq): Declare.
- * cygtls.cc (_cygtls::fixup_after_fork): Clear wq.thread_ev to avoid
- using an invalid event handle in forked process.
- * dcrt0.cc (waitq_storage): Delete.
- (threadstuff): Remove waitq_storage.
- * perthread.h (per_thread_waitq): Delete.
- (waitq_storage): Delete declaration.
- * sigproc.cc (sigproc_init): Remove perthread waitq consideration.
- * sigproc.h (waitq): Delete declaration.
- * wait.cc (wait4): Use _my_tls waitq structure rather than per_thread.
-
-2004-03-11 Pierre Humblet <pierre.humblet@ieee.org>
-
- * cygtls.h (_cygtls::newmask): Delete member.
- (_cygtls::deltamask): New member.
- * gendef (_sigdelayed): Replace the call to set_process_mask by a call
- to set_process_mask_delta.
- * exceptions.cc (handle_sigsuspend): Do not filter tempmask. Or
- SIG_NONMASKABLE in deltamask as a flag.
- (_cygtls::interrupt_setup): Set deltamask only.
- (set_process_mask_delta): New function.
- (_cygtls::call_signal_handler): Replace the first call to
- set_process_mask by a call to set_process_mask_delta.
- * tlsoffsets.h: Regenerate.
-
-2004-03-11 Christopher Faylor <cgf@redhat.com>
-
- * cygtls.cc (_cygtls::fixup_after_fork): Remove unneeded setting of
- oldmask.
- * exceptions.cc: Remove some __I386__ conditionals.
- (handle_exceptions): Move ppid test to outside of a loop for
- efficiency.
- (setup_handler): Make debugging output more wordy.
- (_cygtls::call_signal_handler): To avoid a race, use lock/unlock to
- synchronize with signal thread and ensure that signal_arrived event has
- actually been set.
- * gendef (_sigfe): Use ebx for all sigstack manipulations to ensure
- that the register is saved. Move setting of incyg to within stack lock
- to avoid setup_handler confusion.
- (_sigbe): Use ebx for all sigstack manipulations to ensure that the
- register is saved.
- (_cygtls::pop): Ditto.
- (_cygtls::lock): Ditto.
- (stabilize_sig_stack): Ditto.
- (setjmp): Ditto.
- (longjmp): Ditto.
-
-2004-03-08 Jaakko Hyvatti <jaakko.hyvatti@iki.fi>
-
- * fhandler_serial.cc (fhandler_serial::ioctl): Implement TIOCSBRK and
- TIOCCBRK.
- * include/sys/termios.h: Define TIOCSBRK and TIOCCBRK.
-
-2004-03-08 Christopher Faylor <cgf@redhat.com>
-
- * exceptions.cc (setup_handler): Avoid suspending a thread if it is in
- a cygwin function, in an exception, spinning, or locked.
- * gendef (_sigfe): Move incyg setting earlier.
- (sigreturn): Set incyg flag to avoid interrupting called cygwin
- functions.
- (sigdelayed): Ditto.
- (stabilize_sig_stack): Ditto.
-
- * sigproc.cc (proc_subproc): Don't restore process lock early in exec
- case.
-
- * cygtls.h: Reorganize fields in _cygtls slightly.
- * tlsoffsets.h: Regenerate.
-
-2004-03-06 Christopher Faylor <cgf@redhat.com>
-
- * fork.cc (fork_parent): Save parent pid in a temporary variable since
- child could conceivably exit before function returns, rendering the
- child's shared memory area invalid.
-
- * cygtls.h (_cygtls::incyg): Declare new field.
- (_cygtls::in_exception): Define new function.
- * exceptions.cc (setup_handler): Remove locked flag. Use 'incyg' flag
- and in_exception function to determine when we're in a cygwin function.
- (_cygtls::call_signal_handler): Decrement incyg flag prior to calling a
- handler. Increment it on return.
- * gendef (_sigfe): Increment incyg flag. Use testl for zero testing
- rather than orl, for consistency.
- (_sigbe): Decrement incyg flag. Use testl for zero testing rather than
- orl, for consistency.
- (_cygtls::pop): Use testl for zero testing rather than orl, for
- consistency.
- (stabilize_sig_stack): Ditto.
-
- * tlsoffsets.h: Regenerate.
-
-2004-03-05 Christopher Faylor <cgf@redhat.com>
-
- * gendef (sigdelayed): Handle return here rather than going through
- sigbe to ensure that flags are properly restored.
-
-2004-03-04 Thomas Pfaff <tpfaff@gmx.net>
-
- * include/pthread.h (PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP): New
- define.
- (PTHREAD_NORMAL_MUTEX_INITIALIZER_NP): Ditto.
- (PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP): Ditto.
- * thread.cc (pthread_mutex::is_good_initializer): Check for all
- posssible initializers
- (pthread_mutex::is_good_initializer_or_object): Ditto.
- (pthread_mutex::is_good_initializer_or_bad_object): Ditto.
- (verifyable_object_isvalid): Support up to three static initializers.
- (verifyable_object_isvalid (void const *,long)): Remove.
- (pthread_cond::is_good_initializer_or_bad_object): Remove unneeded
- objectState var.
- (pthread_cond::init): Condition remains unchanged when creation has
- failed.
- (pthread_rwlock::is_good_initializer_or_bad_object): Remove unneeded
- objectState var.
- (pthread_rwlock::init): Rwlock remains unchanged when creation has
- failed.
- (pthread_mutex::init): Remove obsolete comment. Mutex remains
- unchanged when creation has failed. Add support for new initializers.
- (pthread_mutex_getprioceiling): Do not create mutex, just return
- ENOSYS.
- (pthread_mutex_lock): Simplify.
- (pthread_mutex_trylock): Remove unneeded local themutex.
- (pthread_mutex_unlock): Just return EPERM if mutex is not initialized.
- (pthread_mutex_setprioceiling): Do not create mutex, just return
- ENOSYS.
- * thread.h (verifyable_object_isvalid): Support up to three static
- initializers.
- (verifyable_object_isvalid (void const *,long)): Remove prototype.
- (pthread_mutex::init): Add optional initializer to parameter list.
-
-2004-03-03 Christopher Faylor <cgf@redhat.com>
-
- * gendef (sigreturn): Call stabilize_sig_stack to ensure that there are
- no pending signals. Restore edx later.
- (sigdelayed): Save edx earlier.
-
- * malloc_wrapper.cc (malloc_init): Add some more debugging output.
-
-2004-03-02 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_raw.cc (fhandler_dev_raw::raw_read): When reading with
- variable block size, read only one block, read directly into user
- supplied buffer, return ENOMEM if user supplied buffer is smaller
- than size of next block to read. Use read2 instead of bytes_to_read
- to count number of bytes read.
- * fhandler_tape.cc (fhandler_dev_tape::open): Add debug output.
-
-2004-02-26 Brian Ford <ford@vss.fsi.com>
-
- * miscfuncs.cc (check_invalid_virtual_addr): Assure the last page
- in the range is always tested. Add appropriate const.
- * mmap.cc (mmap_record::alloc_fh): Remove unused static path_conf object.
-
-2004-02-25 Christopher Faylor <cgf@redhat.com>
-
- * exceptions.cc (setup_handler): Signal event for any sigwaitinfo, if it
- exists, to force signal to be handled. Zero event here to prevent
- races.
- * signal.cc (sigwaitinfo): Use local handle value for everything since
- signal thread could zero event element at any time. Detect when
- awaking due to thread not in mask and set return value and errno
- accordingly. Don't set signal number to zero unless we've recognized
- the signal.
- * sigproc.cc (sigq): Rename from sigqueue throughout.
-
- * thread.cc (pthread::join): Handle signals received while waiting for
- thread to terminate.
-
-2004-02-25 Christopher Faylor <cgf@redhat.com>
-
- * cygwin.din: Export sighold, sigqueue.
- * exceptions.cc (sighold): Define new function.
- * signal.cc (handle_sigprocmask): Set correct errno for invalid signal.
- Simplify debugging output.
- (sigqueue): Define new function.
- * include/cygwin/signal.h (sighold): Declare new function.
- (sigqueue): Ditto.
- * include/cygwin/version.h: Bump API minor version number.
- * include/limits.h (TIMER_MAX): Define.
- (_POSIX_TIMER_MAX): Ditto.
-
-2004-02-25 Brian Ford <ford@vss.fsi.com>,
- Corinna Vinschen <corinna@vinschen.de>
-
- * miscfuncs.cc (check_invalid_virtual_addr): New function.
- * winsup.h (check_invalid_virtual_addr): Declare.
- * mmap.cc (munmap): Call check_invalid_virtual_addr instead of
- IsBadReadPtr.
-
-2004-02-24 Christopher Faylor <cgf@redhat.com>
-
- * gendef (stabilize_sig_stack): Correctly align this pointer for call
- to _cygtls::call_signal_handler.
- * gentls_offsets: Output sizeof field.
- * tlsoffsets.h: Regenerate.
-
-2004-02-24 Christopher Faylor <cgf@redhat.com>
-
- * dcrt0.cc (_dll_crt0): Don't check sync_startup if threadfunc_ix is set.
-
- * external.cc (cygwin_internal): Implement CW_GET_BINMODE.
- * include/sys/cygwin.h: Declare CW_GET_BINMODE.
-
-2004-02-24 Christopher Faylor <cgf@redhat.com>
-
- * dcrt0.cc (_dll_crt0): Add some stern internal errors.
-
-2004-02-24 Corinna Vinschen <corinna@vinschen.de>
-
- * thread.cc (pthread::cancelable_wait): Rearrange slightly.
- Add do_sig_wait parameter. Wait for signal_arrived if set to true.
- Return WAIT_SIGNALED if signal arrived.
- (pthread_cond::wait): Accommodate change to pthread::cancelable_wait.
- (pthread::join): Ditto.
- (semaphore::_timedwait): Ditto.
- (semaphore::_wait): Ditto. Change to return int to allow status
- feedback.
- (semaphore::wait): Return return value from semaphore::_wait.
- * thread.h (WAIT_SIGNALED): New definition.
- (pthread::cancelable_wait): Change declaration. Define do_sig_wait
- as false by default to not interfere with existing calls accidentally.
- (semaphore::_wait): Declare int.
-
-2004-02-21 Christopher Faylor <cgf@redhat.com>
-
- * exceptions.cc (sigpacket::process): Make sure that tls is filled in
- for SIGSTOP condition.
- (_cygtls::call_signal_handler): Restore signal mask using saved oldmask
- rather than current oldmask.
-
-2004-02-20 Christopher Faylor <cgf@redhat.com>
-
- * path.cc (conv_path_list): Return error condition.
- (copy1): New function.
- (copyenc): New function.
- (mount_item::fnmunge): Return error condition. Use new functions to
- copy strings.
- (mount_item::build_win32): Ditto.
- (mount_info::conv_to_win32_path): Return error condition.
- (cygwin_conv_to_posix_path): Return result of path conversion.
- (cygwin_conv_to_full_posix_path): Ditto.
- (return_with_errno): New macro.
- (cygwin_win32_to_posix_path_list): Use new macro to potentially set
- errno.
- (cygwin_posix_to_win32_path_list): Ditto.
- * path.h (mount_item::fnmunge): Add size argument.
- (mount_item::build_win32): Ditto.
-
-2004-02-20 Corinna Vinschen <corinna@vinschen.de>
-
- * getopt.c: Avoid useless compiler warnings.
-
-2004-02-20 Corinna Vinschen <corinna@vinschen.de>
-
- * getopt.c: Replace with latest vanilla(!) OpenBSD version 1.16.
-
-2004-02-18 Christopher Faylor <cgf@redhat.com>
-
- * fork.cc (fork_child): Invert sense of test which defeated correct
- handling in a fork from a non-main thread.
-
- * dcrt0.cc (initial_env): Eliminate parameter and just send DebugBreak
- when appropriate.
- (dll_crt0_0): Reflect parameter change to initial_env.
- (dll_crt0_1): Don't call initial_env.
-
-2004-02-18 Christopher Faylor <cgf@redhat.com>
-
- * gendef (stabilize_sig_stack): New function.
- (setjmp): Import, add sig stack handling. Store sig stack info.
- (longjmp): Call stabilize_sig_stack. Restore sig stack info.
- * config/i386/setjmp.c: Remove.
-
-2004-02-17 Corinna Vinschen <corinna@vinschen.de>
-
- * fork.cc (fork_child): Move fixup_shms_after_fork so that
- signal_arrived is initialized when calling it.
-
-2004-02-17 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in (clean): Clean libserver, too.
-
- * fhandler.cc (fhandler_base::~fhandler_base): Remove path_conv cleanup.
- * syscalls.cc (chroot): Ditto.
- * path.cc (path_conv::~path_conv): Define new destructor.
- (conv_path_list_buf_size): Remove explicit path_conv cleanup.
- * path.h (path_conv::~path_conv): Declare new destructor.
-
-2004-02-16 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Compile flock.o with -fomit-frame-pointer.
-
-2004-02-16 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Compile dlfcn.o with -fomit-frame-pointer.
-
-2004-02-16 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Compile delqueue.o with -fomit-frame-pointer.
-
-2004-02-16 Pierre Humblet <pierre.humblet@ieee.org>
-
- * syscalls.cc (rename): Do not test the MoveFile error code
- where MoveFileEx exists.
-
-2004-02-15 Christopher Faylor <cgf@redhat.com>
-
- * cygheap.cc (_csbrk): Report more debugging details on failing
- condition.
-
-2004-02-14 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Compile syscalls.o with -fomit-frame-pointer.
-
- * sigproc.cc: Eliminate unused variable.
-
-2004-02-14 Corinna Vinschen <corinna@vinschen.de>
-
- * getopt.c: Replace with latest NetBSD version 1.16. Keep Cygwin
- specific changes as minimal as possible.
-
-2004-02-13 Christopher Faylor <cgf@redhat.com>
-
- * sigproc.cc (proc_subproc): Change warning back to silent debug
- output.
-
-2004-02-13 Christopher Faylor <cgf@redhat.com>
-
- * dcrt0.cc (alloc_stack_hard_way): Revert to previous implementation.
- (alloc_stack): Ditto.
- * exceptions.cc (ctrl_c_handler): Add debugging output.
-
-2004-02-13 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in (clean): Remove sigfe.s.
- (sigfe.s): Ensure that sigfe.s will be regenerated if it does not exist.
- * dll_init.cc (dll_dllcrt0): Simplify initializing tests.
-
- * exceptions.cc (setup_handler): Detect when stub caller is either
- spinning or has acquired the lock after being suspended to avoid
- windows problems with suspending a win32 API call.
-
- * cygtls.h (_cygtls::spinning): Declare new element.
- * gendef: Remove unused _siglist_index and _siglist declaration.
- (_sigfe): Set spinning element when potentially looping, waiting for lock.
- (_sigbe): Ditto.
- (_cygtls::lock): Ditto.
- (_longjmp): Ditto.
- * tlsoffsets.h: Regenerate.
- * pinfo.cc (_pinfo::exit): Set final exit state here. Call sigproc_terminate if
- invoked with 'norecord'. Clear any residual _cygtls stuff.
- * winsup.h (exit_states): Define ES_FINAL.
- * spawn.cc (spawn_guts): Don't call proc_terminate specifically when
- execing. Let _pinfo::exit handle that case.
-
- * sigproc.cc (wait_subproc): Always exit loop early when proc_loop_wait.
-
- * init.cc (munge_threadfunc): Eliminate unused argument.
- (dll_entry): Reflect above change in call to munge_threadfunc.
-
-2004-02-11 Christopher Faylor <cgf@redhat.com>
-
- * gendef (_sigbe): Zero location on pop.
- (_cygtls::pop): Ditto.
-
-2004-02-11 Christopher Faylor <cgf@redhat.com>
-
- * dcrt0.cc (alloc_stack_hard_way): Eliminate second argument.
- (alloc_stack): Remove use of 'b' throughout.
-
-2004-02-11 Christopher Faylor <cgf@redhat.com>
-
- Rename _threadinfo to _cygtls, throughout.
- * cygtls.h (_cygtls::call_signal_handler): Rename from
- call_signal_handler_now.
- (_cygtls::push): Make second argument mandatory.
- (_cygtls::fixup_after_fork): Declare new function.
- (_cygtls::lock): Ditto.
- * cygtls.cc (_cygtls::fixup_after_fork): Define new function.
- * dcrt0.cc (cygwin_finished_initializing): Define as bool.
- (alloc_stack): Use _tlstop rather than arbitrary variable in probably
- vain attempt to avoid strange fork problem on CTRL-C.
- (dll_crt0_0): Remove obsolete winpids::init call.
- * dll_init.cc (dll_dllcrt0): Detect forkee condition as equivalent to
- initializing.
- * winsup.h (cygwin_finished_initializing): Declare as bool.
- * exceptions.cc (handle_exceptions): Rely on
- cygwin_finished_initializing to determine how to handle exception
- during process startup.
- (_cygtls::call_signal_handler): Rename from call_signal_handler_now.
- (_cygtls::interrupt_now): Fill in second argument to push.
- (signal_fixup_after_fork): Eliminate.
- (setup_handler): Initialize locked to avoid potential inappropriate
- unlock. Resume thread if it has acquired the stack lock.
- (ctrl_c_handler): Just exit if ctrl-c is hit before cygiwn has finished
- initializing.
- * fork.cc (sync_with_child): Don't call abort since it can cause exit
- deadlocks.
- (sync_with_child): Change debugging output slightly.
- (fork_child): Set cygwin_finished_initializing here. Call _cygtls fork
- fixup and explicitly call sigproc_init.
- (fork_parent): Release malloc lock on fork failure.
- (vfork): Call signal handler via _my_tls.
- * sigproc.cc (sig_send): Ditto.
- * syscalls.cc (readv): Ditto.
- * termios.cc (tcsetattr): Ditto.
- * wait.cc (wait4): Ditto.
- * signal.cc (nanosleep): Ditto.
- (abort): Ditto.
- (kill_pgrp): Avoid killing self if exiting.
- * sync.cc (muto::acquire): Remove (temporarily?) ill-advised
- exiting_thread check.
- * gendef (_sigfe): Be more agressive in protecting stack pointer from
- other access by signal thread.
- (_cygtls::locked): Define new function.
- (_sigbe): Ditto.
- (_cygtls::pop): Protect edx.
- (_cygtls::lock): Use guaranteed method to set eax to 1.
- (longjmp): Aggressively protect signal stack.
- * miscfuncs.cc (low_priority_sleep): Reduce "sleep time" for secs == 0.
- * pinfo.cc (winpids::set): Counterintuitively use malloc's lock to
- protect simultaneous access to the pids list since there are
- pathological conditions which can cause malloc to call winpid.
- (winpids::init): Eliminate.
- * pinfo.h (winpids::cs): Eliminate declaration.
- * pinfo.h (winpids::init): Eliminate definition.
-
-2004-02-11 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (get_nt_object_attribute): Fix error handling.
-
-2004-02-09 Ralf Habacker <ralf.habacker@freenet.de>
-
- * fhandler_socket.cc (fhandler_socket::ioctl): Add FIONREAD handling.
-
-2004-02-08 Christopher Faylor <cgf@redhat.com>
-
- * debug.h (console_printf): Define for non-debugging condition.
-
- * cygtls.h (_threadinfo::lock): Remove wait argument.
- (_threadinfo::interrupt_setup): Remove retaddr argument.
- * exceptions.cc (_threadinfo::interrupt_setup): Ditto.
- (_threadinfo::interrupt_now): Accommodate change to interrupt_setup
- argument.
- (setup_handler): Ditto. Always lock sig stack prior to determining
- interrupt method.
- * gendef (_sigfe): Correct thinko regarding cmpxchg.
- (_sigbe): Ditto.
- (_threadinfo::lock): Ditto.
- (_threadinfo::pop): Eliminate left-over stack unlock.
- * sigproc.cc (proc_subproc): Change debugging output to printed
- warning.
-
-2004-02-08 Christopher Faylor <cgf@redhat.com>
-
- * localtime.cc (localtime_r): Call tzset.
-
- * Makefile.in: Make version.h/cygwin.din version check a warning since
- it is not foolproof.
-
- * cygheap.h (CYGHEAPSIZE): Bump size down.
-
- * cygtls.h (_threadinfo::stacklock): New element.
- (_threadinfo::pop): Make regparm.
- (_threadinfo::lock): New function.
- (_threadinfo::unlock): New function.
- * cygtls.cc (_threadinfo::push): Wait for a lock on the stack before
- performing the operation.
- (_threadinfo::pop): Move to another file.
- * cygwin.din: More SIGFE changes.
- * exceptions.cc (try_to_debug): Always display messages on console.
- (handle_exceptions): Unwind stack only when actually about to call
- sig_send.
- (setup_handler): Lock stack prior to performing any operations.
- * gendef (_sigfe): Ditto.
- (_sigbe): Ditto.
- (_threadinfo::pop): Ditto. Move here.
- * gen_tlsoffsets: Generate positive offsets.
- * tlsoffsets.h: Regenerate.
-
-2004-02-06 Corinna Vinschen <corinna@vinschen.de>
-
- * cygserver.h (CYGWIN_SERVER_VERSION_API): Bump.
- * cygserver_ipc.h (struct proc): Add signal_arrived member.
- (ipc_set_proc_info): Inititalize blk.signal_arrived.
-
-2004-02-06 Pierre Humblet <pierre.humblet@ieee.org>
-
- * uinfo.cc (cygheap_user::init): Use sec_user_nih to build a
- security descriptor. Set both the process and the default DACLs.
- * fork.cc (fork_parent): Use sec_none_nih security attributes.
- * spawn.cc (spawn_guts): Ditto.
-
-2004-02-05 Christopher Faylor <cgf@redhat.com>
-
- * cygwin.din: Make many more functions SIGFE.
- * include/cygwin/version.h (CYGWIN_VERSION_SHARED_DATA): Bump.
-
-2004-02-05 Pierre Humblet <pierre.humblet@ieee.org>
-
- * security.h (SID): New macro.
- (well_known_*_sid): Change type to cygpsid.
- (cygsid::init): Delete declaration.
- * sec_helper.cc (well_known_*_sid): Define using above SID macro.
- (cygsid::init): Delete.
- * dcrt0.cc (dll_crt0_0): Do not call cygsid::init.
- * security.cc (get_user_local_groups): Change the second argument type
- to cygpsid.
-
-2004-02-03 Christopher Faylor <cgf@redhat.com>
-
- * cygtls.h (_local_storage::signamebuf): Increase size to prevent
- overflow on really odd values.
- * tlsoffsets.h: Regenerate.
-
-2004-02-03 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in (DLL_OFILES): Add strsig.o.
- * cygtls.h (_local_storage::signamebuf): New element.
- * sysconf.cc (sysconf): Implement _SC_RTSIG_MAX.
- * tlsoffsets.h: Regenerate.
- * include/limits.h (_POSIX_RTSIG_MAX): New define.
- (RTSIG_MAX): Ditto.
- * include/cygwin/signal.h (SIGRTMIN): New define.
- (SIGRTMAX): Ditto.
- (NSIG): Bump.
- * strsig.cc: New file.
-
-2004-02-03 Jason Tishler <jason@tishler.net>
-
- * window.cc (Winmain): Show windows error code in error output when
- RegisterClass fails.
-
-2004-02-02 Christopher Faylor <cgf@redhat.com>
-
- * fhandler.h (*::fixup_after_exec): Eliminate unused handle argument.
- * fhandler.h (dtable::fixup_after_exec): Eliminate unused handle
- argument.
- * dcrt0.cc (dll_crt0_1): Reflect elimination of unused handle argument
- to fixup_after_exec.
- * dtable.cc (dtable::fixup_after_exec): Ditto.
- * fhandler_console.cc (fhandler_console::fixup_after_exec): Ditto.
- * fhandler_dsp.cc (fhandler_dsp::fixup_after_exec): Ditto.
- * fhandler_raw.cc (fhandler_raw::fixup_after_exec): Ditto.
- * fhandler_socket.cc (fhandler_socket::fixup_after_exec): Ditto.
- * fhandler_virtual.cc (fhandler_virtual::fixup_after_exec): Ditto.
- * pipe.cc (fhandler_pipe::fixup_after_exec): Ditto.
-
-2004-02-02 Pierre Humblet <pierre.humblet@ieee.org>
-
- * spawn.cc (spawn_guts): Do not set ciresrv.parent.
- * child_info.h (child_info_spawn::~child_info_spawn): Do not close
- parent. Update CURR_CHILD_INFO_MAGIC.
- * dcrt0.cc (dll_crt0_0): Do not close spawn_info->parent. Pass NULL to
- cygheap->fdtab.fixup_after_exec().
-
-2004-02-02 Christopher Faylor <cgf@redhat.com>
-
- Throughout, change name from set_inheritance to set_no_inheritance to
- better reflect input arguments of this function.
-
- * cygheap.h (CYGHEAPSIZE): Increase size of cygheap to something closer
- to the 21st century.
-
-2004-02-02 Corinna Vinschen <corinna@vinschen.de>
-
- * cygerrno.h (set_errno): Replace semicolon with comma in non-DEBUGGING
- version to avoid compile time error.
-
-2004-02-01 Christopher Faylor <cgf@redhat.com>
-
- * cygerrno.h (set_errno): Set global errno whenever setting thread
- specific version.
- * debug.cc (__set_errno): Ditto.
-
- * exceptions.cc (handle_sigsuspend): Remove spurious
- sig_dispatch_pending call.
- (set_signal_mask): When there seem to be pending signals to dispatch,
- tell signal_dispatch_pending/sig_send not to specifically call any
- handlers.
- * sigproc.h (sig_dispatch_pending): Change declaration to void.
- * sigproc.cc (sig_dispatch_pending): Change definition to void. Take
- an argument to determine whether to tell sig_send to wait for handler
- to be called.
- * sigproc.cc (sig_send): Don't call signal handler when sig ==
- __SIGFLUSHFAST.
- (wait_sig): Honor __SIGFLUSHFAST. Guard against sigpacket::process
- nuking si_signo.
- * sigproc.h (__SIGFLUSHFAST): Define new special signal.
- (sig_dispatch_pending): Change declaration to void. Take optional
- boolean argument.
-
- * fork.cc (vfork): Add debugging output.
-
-2004-01-26 Christopher Faylor <cgf@redhat.com>
-
- * exceptions.cc (sig_handle_tty_stop): Avoid races by waiting for both
- signal_arrived and for sigCONT.
- (sigpacket::process): Enforce sending of both signal_arrived and
- sigCONT, where appropriate.
- * gendef (sigreturn): Save tls pointer in ebx so that it can jump into
- sigdelayed and use the same register.
-
-2004-01-26 Christopher Faylor <cgf@redhat.com>
-
- * cygtls.cc (_threadinfo::init_thread): Add more local reent stdio
- initialization.
- * dcrt0.cc (initial_env): Can it really be true that XP doesn't allow
- attaching a debugger during DLL attach? Add temporary workaround.
- (dll_crt0_0): Ensure that _impure_ptr stdio is initialized before any
- threads.
- (dll_crt0_1): Move _impure_ptr initialization to dll_crt0_0.
- * exceptions.cc (try_to_debug): Reinstate old method for looping while
- debugging.
- * syscalls.cc (_cygwin_istext_for_stdio): Regularize debugging output.
- Remove hopefully extraneous check.
- (setmode_helper): Add debugging output for improbable case. Use
- "binary" rather "raw" for consistency.
-
-2004-01-25 Christopher Faylor <cgf@redhat.com>
-
- * fhandler.cc (fhandler_base::fhaccess): Avoid always setting errno to
- EACCESS when return value is < 0. Rely on errno being set properly.
-
-2004-01-25 Christopher Faylor <cgf@redhat.com>
-
- * sigproc.cc (proc_subproc): Don't protect *child's* handle.
-
-2004-01-24 Christopher Faylor <cgf@redhat.com>
-
- * fhandler.h (fhandler_base::fhaccess): Return int for compatibility
- with access.
- * fhandler.cc (fhandler_base::fhaccess): Return int. Use consistent
- variable name for exit value. Exit at bottom, printing debugging
- information, like other cygwin functions.
-
-2004-01-23 Christopher Faylor <cgf@redhat.com>
-
- * cygheap.cc (init_cygheap::close_ctty): Protect YA vforkism.
- * fhandler.h (fhandler_base::has_acls): Make pass through for path_conv
- method.
- (fhandler_base::isremote): Ditto.
- (fhandler_base::is_fs_special): Ditto.
- (fhandler_base::has_attribute): Ditto. Define new function.
- (fhandler_base::fhaccess): Declare new function based on access_worker.
- (fhandler_base::set_has_acls): Eliminate obsolete function.
- (fhandler_base::set_isremote): Ditto.
- * fhandler.cc (fhandler_base::fhaccess): Move from syscalls.cc and into
- fhandler_base class. Use fhandler methods to access data rather than
- path_conv stuff.
- (fhandler_base::device_access_denied): Use fhaccess method.
- * fhandler_disk_file.cc (fhandler_disk_file::opendir): Ditto.
- (fhandler_base::open_fs): Remove calls to obsolete functions.
- * fhandler_virtual.cc (fhandler_virtual::open): Ditto.
- * winsup.h (access_worker): Remove obsolete access_worker declaration.
- *syscalls.cc (access_worker): Move function to fhandler.cc.
- (access): Use fhaccess method.
-
- * pinfo.cc (_pinfo::set_ctty): Clarify debugging output.
- * sigproc.cc (sig_dispatch_pending): Ditto.
- * syscalls.cc (setsid): Perform minor rearrangement.
-
-2004-01-23 Pierre Humblet <pierre.humblet@ieee.org>
-
- * fhandler_socket.cc (fhandler_socket::create_secret_event): Avoid
- creating multiple handles. Always allow event inheritance but set the
- handle inheritance appropriately. Improve error handling.
- (fhandler_socket::check_peer_secret_event): Improve error handling.
- (fhandler_socket::close_secret_event): Simply call CloseHandle.
- (fhandler_socket::set_close_on_exec): Set secret event inheritance.
-
-2004-01-23 Christopher Faylor <cgf@redhat.com>
-
- * configure.in: Remove NEWVFORK default.
- * configure: Regenerate.
- * dcrt0.cc: Conditionalize vfork stuff throughout.
- * dtable.cc: Ditto.
- * perthread.h: Ditto.
- * pipe.cc (fhandler_pipe::close): Ditto.
- * spawn.cc (spawnve): Ditto.
- * syscalls.cc (setsid): Ditto.
- * exceptions.cc (sigpacket::process): Use macro to refer to vfork pid.
-
- * debug.cc (verify_handle): Define new function.
- * debug.h (VerifyHandle): Define new macro.
- (verify_handle): Declare new function
- * fhandler.cc (fhandler_base::dup): Verify that dup'ed handle is not
- supposed to be in use.
- (fhandler_base::set_inheritance): Ditto.
- (fhandler_base::fork_fixup): Ditto.
- * fhandler_socket.cc (fhandler_socket::dup): Ditto.
- * fhandler_tty.cc (fhandler_tty_slave::open): Ditto.
- * net.cc (set_socket_inheritance): Ditto.
- * pinfo.cc (pinfo_fixup_after_exec): Ditto.
- * sigproc.cc (proc_subproc): Ditto.
- (sig_send): Ditto.
- * spawn.cc (spawn_guts): Ditto.
- * thread.cc (pthread::init_mainthread): Ditto.
- * pipe.cc (fhandler_pipe::close): Close read_state with
- ForceCloseHandle since it was protected.
- (fhandler_pipe::fixup_after_exec): Protect read_state handle.
- (fhandler_pipe::dup): Correctly close open handles on error condition.
- Verify that dup'ed handle is not supposed to be in use.
- (fhandler_pipe::create): Protect read_state.
-
-2004-01-23 Christopher Faylor <cgf@redhat.com>
-
- * exceptions.cc (sig_handle_tty_stop): Fix boneheaded mistake by using
- correct check for parent state rather than inverted check mistakenly
- introduced on 2003-09-15.
-
-2004-01-22 Brian Ford <ford@vss.fsi.com>
-
- * fhandler_serial.cc (fhandler_serial::raw_write): Prevent a deadlock
- when the input buffer overflows.
- (fhandler_serial::raw_read): Correct to print the actual error and only
- call PurgeComm when necessary.
-
-2004-01-22 Christopher Faylor <cgf@redhat.com>
-
- * dcrt0.cc (reent_data): Make global.
- * cygwin.din: Reexport reent_data.
-
-2004-01-22 Christopher Faylor <cgf@redhat.com>
-
- * cygtls.cc (_threadinfo::remove): Don't assume that we are removing
- _my_tls.
- * exceptions.cc (setup_handler): Improve debugging output.
- (call_signal_handler_now): Remove ill-advised debugger call.
- * sigproc.cc (sigcomplete_main): Delete.
- (sig_send): Honor FIXME and avoid using main thread's completion event
- for everything or suffer races.
- (pending_signals::add): Default stored mask to current process mask
- rather than mask at time of signal send.
- (wait_sig): Add debugging output.
- * sigproc.h (sigpacket::mask_storage): Delete.
-
-2004-01-22 Christopher Faylor <cgf@redhat.com>
-
- * fhandler.cc (fhandler_base::open): Revert isfs change.
-
-2004-01-21 Christopher Faylor <cgf@redhat.com>
-
- * devices.in: Change raw com device to more correct form.
-
-2004-01-21 Christopher Faylor <cgf@redhat.com>
-
- * fhandler.cc (fhandler_base::open): Use major numbers rather than
- device numbers to control special behavior for devices which take
- units.
- * fhandler_raw.cc (fhandler_dev_raw::writebuf): Ditto.
- (fhandler_dev_raw::fstat): Ditto.
- (fhandler_dev_raw::open): Ditto.
- (fhandler_dev_raw::ioctl): Ditto.
-
-2004-01-21 Nicholas Wourms <nwourms@netscape.net>
-
- * signal.cc (sigaction): Fix if-statement typo.
-
-2004-01-21 Christopher Faylor <cgf@redhat.com>
-
- * cygtls.cc (handle_threadlist_exception): Change logic, improve
- debugging output.
-
-2004-01-21 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_tty.cc (fhandler_tty::ioctl): Semi-revert 2003-09-26 change
- for TIOCSWINSZ. It is not an error for ioctl_request_event to be
- missing.
-
-2004-01-20 Christopher Faylor <cgf@redhat.com>
-
- * sigproc.cc (pending_signals::save): New function.
- (pending_signals::restore): Ditto.
- (sig_clear): Save/restore current queue pointer.
- (wait_sig): Delete signals marked as such.
- * sigproc.h (__SIGDELETE): New enum.
-
-2004-01-20 Christopher Faylor <cgf@redhat.com>
-
- * include/cygwin/version.h: Bump DLL minor number to 8.
-
- * cygmalloc.h: Make more concessions to attempts to get debugging
- malloc working.
- * debug.h: Ditto.
- * dlmalloc.cc: Ditto.
- * dlmalloc.h: Ditto.
- * malloc_wrapper.cc: Ditto.
-
- * perthread.h (perthread::create): Use calloc to ensure zeroed memory.
-
-2004-01-20 Christopher Faylor <cgf@redhat.com>
-
- * sec_acl.cc (setacl): Make sure sd_ret is large enough.
-
-2004-01-19 Christopher Faylor <cgf@redhat.com>
-
- * sigproc.cc (sigproc_terminate): Don't close sendsig handle when
- execing since we're not closing what we think we're closing.
- (sig_send): Improve debugging when exiting due to no_signals_available.
-
- * wincap.h (wincaps::cant_debug_dll_entry): New element.
- * wincap.cc: Implement above element throughout.
- * dcrt0.cc (initial_env): Accommodate changes necessary to allow
- initial debugging for systems which do not allow debugging in
- dll_entry.
- (dll_crt0_0): Add initial_env call back here.
-
- * Makefile.in (install-man): Use mandir as target for installation.
-
-2004-01-19 Christopher Faylor <cgf@redhat.com>
-
- * include/cygwin/version.h: Bump DLL minor number to 7 (should have been
- done earlier).
-
-2004-01-19 Christopher Faylor <cgf@redhat.com>
-
- * cygwin/include/signal.h: Add copyright notice.
-
- * cygwin.din: Make clock SIGFE. Add clock_gettime, sigwaitinfo,
- timer_create, timer_delete, timer_settime.
- * include/cygwin/version.h: Reflect above additions.
- * fork.cc (fork_child): Call fixup_timers_after_fork.
- * signal.cc (sigwait): Remove unused variable.
- * timer.cc: New file.
- (clock_gettime): Define new function.
- (timer_tracker): Define new struct used by timer functions.
- (timer_tracker::timer_tracker): New function.
- (to_us): New function.
- (timer_thread): New function.
- (timer_tracker::settime): New function.
- (timer_create): New function.
- (timer_settime): New function.
- (timer_delete): New function.
- (fixup_timers_after_fork): New function.
- * cygthread.cc: Bump thread count.
-
-2004-01-17 Christopher Faylor <cgf@redhat.com>
-
- * signal.cc (sigwaitinfo): Define new function.
- (sigwait): Redefine based on sigwaitinfo.
- * include/cygwin/signal.h (sigwaitinfo): Declare.
- (sigwait): Ditto.
-
-2004-01-17 Christopher Faylor <cgf@redhat.com>
-
- * dtable.cc (dtable::vfork_parent_restore): Avoid double close of ctty
- when ctty == ctty_on_hold.
-
-2004-01-16 Christopher Faylor <cgf@redhat.com>
-
- * cygtls.h (_threadinfo::threadkill): New element.
- (_threadinfo::set_threadkill): Declare new function.
- (_threadinfo::reset_threadkill): Declare new function.
- * dcrt0.cc (dcrt0_1): Call here so that it will be possible to attach
- to running process with #(*& Windows Me/9x.
- (initial_env): Try to initialize strace if uninitialized.
- * gendef: Don't zero signal if threadkill is set since that will happen
- in the called function.
- * signal.cc (sigwait): Ensure cleanup in error conditions.
- * sigproc.cc (sig_send): Clear packet mask storage.
- (wait_subproc): Fill in child exit code in siginfo_t structure.
- * thread.cc (pthread_kill): Set threadkill flag.
- * tlsoffsets.h: Regenerate.
-
-2004-01-16 Christopher Faylor <cgf@redhat.com>
-
- Throughout, use siginfo_t to fill out all signal information for
- "kernel" signals.
- * cygtls.h (_threadinfo::set_siginfo): Declare new function.
- * cygtls.cc (_threadinfo::set_siginfo): Define new function.
- * dcrt0.cc (do_exit): Accommodate siginfo_t considerations.
- * exceptions.cc (handle_exceptions): Ditto.
- (sig_handle_tty_stop): Ditto.
- (ctrl_c_handler): Use killsys() to send signal.
- (sigpacket::process): Rename from sig_handle. Use siginfo_t field from
- sigpacket for everything.
- (tty_min::kill_pgrp): Accommodate siginfo_t considerations.
- (fhandler_termios::bg_check): Ditto.
- * fhandler_tty.cc (fhandler_tty_slave::ioctl): Use killsys() to send signal.
- * signal.cc (kill_worker): Rewrite to use siginfo_t second argument.
- (kill_pgrp): Ditto.
- (kill0): Define new function pulled from kill().
- (kill): Rewrite as frontend to kill0.
- (killsys): Define new function.
- * sigproc.cc (sigelem): Eliminate.
- (sigpacket): Move to sigproc.h. Subsume sigelem.
- (pending_signals): Use sigpacket rather than sigelem for everything.
- (sig_clear): Ditto.
- (wait_sig): Ditto.
- (sig_send): Rewrite to use siginfo_t argument.
- (sig_send): New function wratpper to sig_send with siginfo_t argument.
- (wait_subproc): Accommodate siginfo_t considerations.
- * thread.cc (pthread_kill): Ditto.
- * sigproc.h (sigpacket): Move here.
- (sigpacket::process): Declare "new" function.
- (sig_handle): Eliminate declaration.
- (sig_send): Declare with new paramaters.
- (killsys): Declare new function.
- (kill_pgrp): Declare.
- * winsup.h: Move some signal-specific stuff to sigproc.h.
- * include/cygwin/signal.h: Tweak some siginfo_t stuff.
-
-2004-01-16 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_console.cc (fhandler_console::close): Remove obsolete test
- for vfork_cleanup.
- * pipe.cc (fhandler_pipe::close): Add comment.
-
-2004-01-16 Christopher Faylor <cgf@redhat.com>
-
- * cygheap.cc (init_cygheap::close_ctty): Don't NULL ctty if it is still
- active.
-
-2004-01-16 Christopher Faylor <cgf@redhat.com>
-
- * dtable.cc (dtable::vfork_parent_restore): Store ctty_on_hold prior to
- calling close_all_files since it will be zeroed.
-
-2004-01-15 Christopher Faylor <cgf@redhat.com>
-
- * gentls_offsets: Reinstate unlink of temp files.
-
-2004-01-14 Christopher Faylor <cgf@redhat.com>
-
- * fhandler_console.cc (fhandler_console::close): Fix debugging output.
- (fhandler_console::fixup_after_fork): Decrement open_fhs prior to call
- to fhandler_console::open since this would cause incrementing too much
- incrementing in child processes. (Probably needs to be handled more
- elegantly someday)
- (fhandler_console::fixup_after_exec): Ditto.
-
-2004-01-14 Christopher Faylor <cgf@redhat.com>
-
- * cygtls.h (_threadinfo::call): Remove regparm declaration to work
- around compiler bug.
-
-2004-01-13 Christopher Faylor <cgf@redhat.com>
-
- * autoload.cc (TryEnterCriticalSection): Remove.
- * dcrt0.cc (dll_crt0_0): Delete inappropriate setting of
- _my_tls.stackptr to NULL since it has really bad consequences. Make
- 'si' an automatic variable.
-
-2004-01-13 Christopher Faylor <cgf@redhat.com>
-
- * cygtls.cc (_threadinfo::init_thread): Correct thinko which caused
- thread list to be allocated every time.
- * cygtls.h (CYGTLS_PADSIZE): Define as const int.
- * sync.h: Make multiple inclusion safe.
- (muto::next): Eliminate.
- (muto::exiting_thread): New variable.
- (muto::set_exiting_thread): New function.
- (new_muto): Change to use different section for mutos since c++ give
- inexplicable warning in some cases otherwise.
- (new_muto1): Ditto.
- * dcrt0.cc (do_exit): Call muto::set_exiting_thread here.
- * sync.cc (muto_start): Eliminate.
- (muto::acquire): Always give exiting thread a lock. Never give thread
- a lock if exiting.
- (muto::release): Ditto for releasing.
- * dtable.cc (dtable::init_lock): Unline function and define here.
- * dtable.h (lock_cs): Define as a muto since critical sections seem to
- work oddly on Windows Me.
- (lock): Accommodate switch to muto.
- (unlock): Ditto.
- * exceptions.cc (setup_handler): Don't worry about acquiring mutos
- since that hasn't mattered for a long time.
- (signal_exit): Ditto: muto stuff will be handled automatically on exit
- now.
-
-2004-01-12 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in (DLL_IMPORTS): Link advapi32 to ensure proper DLL
- initialization.
- * autoload.cc (RegCloseKey): Arbitrarily choose this function as a
- "seed" to pull the advapi32 link library in. So, comment out the
- autoloading.
- * cygtls.cc (_threadinfo::init_thread): Just clear CYGTLS_PADSIZE.
- (_threadinfo::remove): Add debugging.
- (_threadinfo::find_tls): Ditto.
- * cygtls.h (_threadinfo::padding): Make zero length (for now?).
- * dcrt0.cc (dll_crt0_0): Move more initialization here from dll_crt0_1.
- (dll_crt0_1): See above.
- * dtable.h (dtable::lock): Remove commented out critical section
- locking.
- * dtable.h (dtable::init_lock): Remove commented out critical section
- locking.
- * dtable.h (dtable::unlock): Remove commented out critical section
- locking.
- * exceptions.cc (interruptible): bool'ize.
- * init.cc (threadfunc_fe): Revert to storing threadfunc at stack
- bottom.
- (munge_threadfunc): Ditto. Avoid adding overhead to
- calibration_thread.
- (prime_threads): Don't initialize tls stuff.
- (dll_entry): Make minor change to initialization order.
- * tlsoffsets.h: Regenerate.
-
- * sigproc.cc (wait_sig): Add sanity check for end of process thread
- exit.
-
- * select.h: Make minor formatting change.
-
-2004-01-10 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Add still more -fomit-frame-pointer functions.
- * dtable.h (dtable::lock): New function.
- (dtable::unlock): New function.
- (dtable::init_lock): New function.
- * cygheap.h (HEAP_TLS): Declare new enum value.
- (init_cygheap::threadlist): Declare new array.
- (init_cygheap::sthreads): Declare new variable.
- (cygheap_fdmanip::~cygheap_fdmanip): Use new dtable lock/unlock
- functions.
- (cygheap_fdnew::cygheap_fdnew): Ditto.
- (cygheap_fdget::cygheap_fdget): Ditto.
- * dtable.cc (dtable_init): Initialize fdtab critical section.
- (dtable::fixup_after_fork): Ditto.
- (dtable::fixup_after_exec): Ditto.
- (dtable::dup2): Use lock/unlock calls to protect access to fdtab.
- (dtable::find_fifo): Ditto.
- (dtable::fixup_before_fork): Ditto.
- (dtable::fixup_before_exec): Ditto.
- (dtable::set_file_pointers_for_exec): Ditto.
- (dtable::vfork_child_dup): Ditto.
- (dtable::vfork_parent_restore): Ditto.
- * syscalls.cc (close_all_files): Ditto.
- * sync.h (muto::acquired): Declare new function.
- (new_muto1): Declare new macro used to specify name of muto storage.
- * sync.cc (muto::acquired): Define new function.
-
- * cygthread.cc (cygthread::stub): Remove signal chain removal call
- since it is handled during initialization now.
- * cygthread.cc (cygthread::simplestub): Remove signal chain removal
- call since it is handled during initialization now.
- * cygtls.cc (sentry): New class used for locking. Use throughout.
- (_threadinfo::reset_exception): Don't pop stack.
- (_threadinfo::find_tls): Move from exceptions.cc.
- (_threadinfo::init_thread): Initialize array of threads rather than
- linked list. Take second argument indicating thread function for this
- thread.
- (_threadinfo::remove): Search thread array rather than linked list.
- Use sentry to lock. Only unlock if we got the lock.
- (_threadinfo::find_tls): Ditto for first two.
- (handle_threadlist_exception): Handle exceptions when manipulating the
- thread list in case of premature thread termination.
- (_threadinfo::init_threadlist_exceptions): Ditto.
- * cygtls.h (TLS_STACK_SIZE): Decrease size.
- (_threadinfo::padding): Add element to avoid overwriting lower part of
- stack.
- (_threadinfo::remove): Add a "wait" argument to control how long we
- wait for a lock before removing.
- * exceptions.cc (init_exception_handler): Make global. Take argument
- to control exception handler being set.
- (ctrl_c_handler): Wait forever when removing self from signal chain.
- (_threadinfo::find_tls): Move to cygtls.cc.
- (sig_handle): Reorganize detection for thread-specific signals.
- * heap.cc (heap_init): Rework slightly. Make fatal error more verbose.
- Remove malloc initialization since it can't happen during dll attach.
- * init.cc (search_for): Move address to search for on stack here.
- (threadfunc_ix): Ditto for stack offset. Make shared so that stack
- walk potentially only has to be done once when cygwin processes are
- running.
- (threadfunc_fe): Use standard tls to store thread function (may change
- back later).
- (calibration_thread): New function. Potentially called to find
- threadfunc_ix.
- (munge_threadfunc): Search for "search_for" value on stack. Output
- warning when thread func not found on stack. Use standard tls to store
- thread function.
- (prime_threads): New function. Called to prime thread front end.
- (dll_entry): Call dll_crt0_0 here when DLL_PROCESS_ATTACH. Call
- prime_threads here. Try to remove thread from signal list here.
- * sigproc.cc (wait_sig): Initialize threadlist exception stuff here.
- * thread.cc (pthread::exit): Pass argument to signal list remove
- function.
- * thread.h: Remove obsolete *ResourceLock defines.
-
- * tlsoffsets.h: Regenerate.
-
- * winsup.h (spf): Define temporary debug macro to be deleted later.
-
- * dcrt0.cc (dll_crt0_0): New function, called during DLL
- initialization. Mainly consists of code pulled from dll_crt0_1.
- (dll_crt0_1): See above.
- (_dll_crt0): Wait for initial calibration thread to complete, if
- appropriate. Move some stuff to dll_crt0_0.
- (initialize_main_tls): Accommodate argument change to
- _thread_info::init_thread.
- * fork.cc (fork_child): Ditto.
- (sync_with_child): Fix debug message.
- * external.cc (cygwin_internal): Remove special considerations for
- uninitialized dll since initialization happens during dll attach now.
-
- * dlfcn.cc (dlopen): Remove obsolete *ResourceLock calls.
- (dlclose): Ditto.
-
-2004-01-05 Christopher Faylor <cgf@redhat.com>
-
- * cygheap.h (init_cygheap::close_ctty): Declare new function.
- * cygheap.cc (init_cygheap::close_ctty): Define new function.
- * syscalls.cc (close_all_files): Use close_ctty.
- (setsid): Ditto.
-
- * cygthread.cc (cygthread::stub): Remove exception initialization.
- * cygthread.cc (cygthread::stub): Remove exception initialization.
- (cygthread::simplestub): Ditto.
- * thread.cc (pthread::thread_init_wrapper): Ditto.
- * cygtls.cc (_last_thread): Make static.
- (_threadinfo::call2): Initialize exception handler here.
- (_threadinfo::find_tls): Move here.
- * exceptions.cc (_threadinfo::find_tls): Move.
-
- * dcrt0.cc (__api_fatal): Add prefix info to message here rather than
- including it in every call to function.
- * winsup.h (api_fatal): Accommodate above change.
- * debug.cc (add_handle): Don't do anything if cygheap not around.
- (mark_closed): Ditto.
-
- * dll_init.cc (dll_list::detach): Fix debug output.
- * fork.cc (sync_with_child): Ditto.
- (vfork): Improve debug output.
- * heap.cc (heap_init): Ditto.
-
- * exceptions.cc (try_to_debug): Clarify message when debugger attaches.
-
-2004-01-03 Christopher Faylor <cgf@redhat.com>
-
- * exceptions.cc (_threadinfo::interrupt_now): Avoid double call to
- sigdelayed.
- * pinfo.cc (_pinfo::commune_send): Avoid inexplicable test which caused
- most pids to be shown as "<defunct>" on Win9x.
-
-2004-01-02 Christopher Faylor <cgf@redhat.com>
-
- * cygheap.h (init_cygheap): Play more vfork shell games and move
- ctty_on_hold and open_fhs_on_hold (back) here.
- * dcrt0.cc (_dll_crt0): Just set impure_ptr_ptr here and let later
- initialization deal with tls.
- * dtable.cc (dtable::vfork_child_fixup): Move ctty considerations here.
- (dtable:vfork_parent_restore): And here.
- * fork.cc (vfork): Reflect change to ctty handling.
- * perthread.h (vfork_save::fhctty): Eliminate.
-
- * cygwin.din: Make more exports NOSIGFE that will never be interrupted
- by a signal.
-
- * init.cc (dll_entry): Set stackptr to NULL to catch problems earlier.
diff --git a/winsup/cygwin/ChangeLog-2005 b/winsup/cygwin/ChangeLog-2005
deleted file mode 100644
index a44ab5832..000000000
--- a/winsup/cygwin/ChangeLog-2005
+++ /dev/null
@@ -1,5813 +0,0 @@
-2005-12-31 Corinna Vinschen <corinna@vinschen.de>
-
- * syslog.cc (vsyslog): Decrement len if trailing \n has been removed.
- Add \n when writing to stderr if LOG_PERROR option is set.
-
-2005-12-31 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/in.h: Drop including stdint.h. Move definition
- of in_port_t and in_addr_t to top of file and use throughout. Use
- sa_family_t type where appropriate.
- (struct in6_addr): Change `unsigned char' to `uint8_t'.
- (struct sockaddr_in6): Add sin6_scope_id member. Add comments.
- * include/cygwin/socket.h: Include stdint.h. Move definition of
- socklen_t to top of file. Define sa_family_t. Define struct
- sockaddr_storage as per SUSv3.
- * include/sys/un.h: Include cygwin/socket.h. Use sa_family_t type.
-
-2005-12-29 Christopher Faylor <cgf@timesys.com>
-
- * fhandler_tty.cc (fhandler_tty_common::__acquire_output_mutex): Use
- strace method rather than accessing field directly.
- (fhandler_tty_common::__release_output_mutex): Ditto.
-
-2005-12-29 Christopher Faylor <cgf@timesys.com>
-
- * child_info.h (CURR_CHILD_INFO_MAGIC): Reset.
- (child_info::dwProcessId): Delete.
- (child_info::straced): New variable.
- (child_info::handle_fork): New member function.
- * dcrt0.cc (in_forkee): New global variable.
- (__cygwin_user_data::forkee): Mark as obsolete.
- (do_global_ctors): Use in_forkee rather than user_data->forkee.
- (get_cygwin_startup_info): Ditto. Deal with new straced field to allow
- strace to deal with children of attached processes.
- (initial_env): Accommodate changes to strace::hello.
- (child_info_fork::handle_fork): Rename from plain old 'handle_fork'.
- Move alloc_stack() call elsewhere.
- (dll_crt0_0): Fill out more of user_data. Reference handle_fork via
- fork_info. Add some debugging output.
- (_dll_crt0): Don't wait for sync thread if sync_startup is invalid.
- Zero sync_startup here. Call alloc_stack() here, if appropriate.
- (dll_crt0_1): Use in_forkee rather than user_data->forkee.
- (dll_crt0): Ditto.
- * malloc_wrapper.cc (malloc_init): Ditto.
- * dll_init.cc (in_forkee): Remove local static version of this
- variable.
- (dll_list::load_after_fork): Don't set in_forkee here.
- * external.cc (cygwin_internal): Use strace method rather than
- accessing field directly.
- * fhandler.cc (fhandler_base::read): Ditto.
- * fhandler_tty.cc (fhandler_tty_common::__acquire_output_mutex): Ditto.
- * fork.cc (frok::parent): Invoke strace write_childpid to communicate
- with potential strace.
- (child_copy): Add more detail to debugging output.
- * init.cc (calibration_id): New static variable.
- (prime_threads): Set sync_startup to invalid handle if we already know
- about thread_func_ix. Use static calibration_id to hold calibration
- thread id.
- * munge_threadfunc (munge_threadfunc): Don't try to debug if we don't
- find threadfunc_ix.
- (dll_entry): Avoid calling munge_threadfunc and _cygtls::remove on
- non-cygwin threads invoked during process startup.
- * pinfo.cc (set_myself): Always call strace.hello here regardless of
- DEBUGGING.
- * sigproc.cc (child_info::child_info): Remove spurious handling of
- dwProcessId. Set straced as appropriate.
- * spawn.cc (spawn_guts): Rename ciresrv to ch. Invoke strace
- write_childpid to communicate with potential strace.
- * strace.cc: Include child_info.h.
- (strace::hello): Remove inited test. Use active() method to test if
- strace has been activated. Handle case where we are started before
- (mypid): New function.
- (strace::vsprntf): Try to deal more intelligently with case where
- progname may not be filled out. Put pid in parentheses if it is a
- windows pid rather than a cygwin pid. myself has been filled out.
- (strace::write_childpid): New function for notifying strace about the
- creation of children.
- (strace::vprntf): Use strace method rather than accessing field
- directly.
- (strace_printf): Ditto.
- (strace::wm): Ditto.
- * winsup.h (in_forkee): Declare.
- * include/sys/strace.h (strace::write_childpid): Declare new function.
- (strace::attached): Define new function.
- (strace::active): Ditto.
- (strace::active_val): Ditto.
- (_STRACE_ON): Delete.
- (_STRACE_OFF): Ditto.
- (define_strace0): Use strace method rather than accessing field
- directly.
- (strace_printf_wrap): Ditto.
- (strace_printf_wrap1): Ditto.
-
-2005-12-28 Christopher Faylor <cgf@timesys.com>
-
- * environ.cc (win_env::add_cache): Don't add variables to the
- environment during initialization.
-
-2005-12-27 Corinna Vinschen <corinna@vinschen.de>
-
- * exceptions.cc (_cygtls::handle_exceptions): Drop redundant `break'.
-
-2005-12-27 Corinna Vinschen <corinna@vinschen.de>
-
- * exceptions.cc (inside_kernel): Rename from interruptible.
- Accommodate change throughout file.
-
-2005-12-27 Corinna Vinschen <corinna@vinschen.de>
-
- * exceptions.cc (interruptible): New function, code stripped from
- _cygtls::interrupt_now.
- (_cygtls::handle_exceptions): Handle STATUS_DATATYPE_MISALIGNMENT as
- SIGBUS error. Differ between unmapped memory (SEGV_MAPERR) and access
- violation (SEGV_ACCERR) in case of STATUS_ACCESS_VIOLATION. Write
- kernel log message in case of uncatched STATUS_ACCESS_VIOLATION.
- (_cygtls::interrupt_now): Just call interruptible now instead of
- evaluating interruptibility here.
-
-2005-12-27 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (path_conv::check): Rework loop removing trailing dots
- and spaces.
-
- * syslog.cc (vklog): Set facility to LOG_KERN if not set.
-
-2005-12-26 Christopher Faylor <cgf@timesys.com>
-
- * dcrt0.cc (__api_fatal): Simplify to just use strace mechamisms.
- (do_exit): Move minimal_printf...
- * pinfo.cc (pinfo::exit): ...into here.
- * strace.cc (strace::vprntf): Guarantee output to the console when
- system_printf/api_fatal.
-
- * heap.cc (heap_init): Wait a second before issuing an error when
- ERROR_INVALID_ADDRESS since this is probably due to a CTRL-C handler
- sneaking in, using the memory that we want to use for the heap, and,
- eventually exiting.
-
-2005-12-23 Christopher Faylor <cgf@timesys.com>
-
- * cygtls.cc (_cygtls::handle_threadlist_exception): Make an error
- fatal.
- * cygtls.h (sockaddr_in): Use header rather than defining our own
- structure.
- * exceptions.cc (_cygtls::interrupt_setup): Use exact contents of
- sa_mask rather than assuming that current sig should be masked, too.
- (_cygtls::call_signal_handler): Use more aggressive locking.
- * gendef (_sigbe): Wait until later before releasing incyg.
- (_sigreturn): Remove more arguments to accommodate quasi-sa_sigaction
- support.
- (_sigdelayed): Push arguments for sa_sigaction. More work needed here.
- * signal.cc (sigaction): Implement SA_NODEFER.
- * tlsoffsets.h: Regenerate.
-
- * sigproc.cc (wait_sig): Use default buffer size or Windows 9x
- complains.
-
- * pinfo.cc (_onreturn::dummy_handle): Remove.
- (_onreturn::h): Make this a pointer.
- (_onreturn::~_onreturn): Detect whether pointer is NULL rather than
- value is NULL.
- (_onreturn::_onreturn): Set h to NULL initially.
- (_onreturn::no_close_p_handle): Set h to NULL.
- (winpids::add): Initialize onreturn with value from p.hProcess
- immediately.
-
-2005-12-22 Christopher Faylor <cgf@timesys.com>
-
- * fork.cc (fork): Honor error return from sig_send. Don't continue
- with fork if we couldn't suspend signals.
- * sigproc.cc (sig_send): Set sigCONT event when we see __SIGNOHOLD.
- (wait_sig): Remove holding_signals. Create pipe with a buffer which
- will theoretically cause blocking if there is nothing reading on the
- pipe. Wait for sigCONT at end of loop when we have a __SIGHOLD.
-
-2005-12-22 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (fhandler_base::issymlink): New method.
- * syscalls.cc (open): Handle O_NOFOLLOW flag.
- * include/fcntl.h (_FNOFOLLOW): New define.
- (O_NOFOLLOW): Ditto.
- * include/cygwin/version.h: Bump API minor number.
-
-2005-12-22 Christopher Faylor <cgf@timesys.com>
-
- * pinfo.cc (winpids::add): Increment nelem when winpid is true since we
- don't care if it's a cygwin process in that case.
-
-2005-12-22 Christopher Faylor <cgf@timesys.com>
-
- * pinfo.cc (winpids::release): Fix typo.
-
-2005-12-21 Christopher Faylor <cgf@timesys.com>
-
- * pinfo.cc (pinfo::init): Clarify comment slightly.
- (_onreturn): New helper class.
- (winpids:add): Remove copied stuff. Try to put process handle into
- pinfo in question and use _onreturn class to control when to close it.
- (winpids::release): Remove use of copied array. Free procinfo when
- hProcess is NULL. Otherwise call release and call CloseHandle on
- hProcess.
- * pinfo.h (winpids::copied): Remove throughout class.
-
-2005-12-21 Christopher Faylor <cgf@timesys.com>
-
- * pinfo.cc (pinfo::init): Remove spurious low_priority_sleep.
-
-2005-12-21 Christopher Faylor <cgf@timesys.com>
-
- * spawn.cc (spawn_guts): Hide the window whenever ctty == -1, not just
- when we have no console.
-
-2005-12-21 Christopher Faylor <cgf@timesys.com>
-
- * cygheap.cc (init_cygheap::manage_console_count): Revert previous
- change. Handle this a different way.
- * external.cc (cygwin_internal): Accommodate extra
- hook_or_detect_cygwin argument.
- * hookapi.cc (cygwin_internal): Fill in subsys variable with the
- subsystem of the executable.
- * spawn.cc (av::iscui): New variable.
- (spawn_guts): Hide window when we don't have a console and this isn't
- NT/XP/2003.
- (av::fixup): Set iscui flag.
- * winsup.h (hook_or_detect_cygwin): Accommodate extra argument.
-
-2005-12-21 Christopher Faylor <cgf@timesys.com>
-
- * cygheap.cc (init_cygheap::manage_console_count): Don't call
- FreeConsole on 9x/Me.
-
-2005-12-21 Corinna Vinschen <corinna@vinschen.de>
-
- * (fhandler_disk_file::fchown): Remove execute bits from "sensible"
- permissions. Use same setting as in symlink.
-
-2005-12-21 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_base::fstat_helper): Fix inode number
- debug output.
- (fhandler_disk_file::fchown): Always set sensible permission values
- when creating the ACL for symlinks.
-
-2005-12-20 Corinna Vinschen <corinna@vinschen.de>
-
- * winsup.h (flush_file_buffers): Define as inline function.
- * miscfuncs.cc (flush_file_buffers): Remove.
-
-2005-12-20 Corinna Vinschen <corinna@vinschen.de>
-
- * winsup.h (flush_file_buffers): Declare new function.
- (FLushFileBuffers): New define.
- * miscfuncs.cc (flush_file_buffers): Define new function.
-
-2005-12-20 Christopher Faylor <cgf@timesys.com>
-
- * fhandler.h (fhandler_termios::fixup_after_exec): Make non-inlined.
- * fhandler_termios.cc (fhandler_termios::fixup_after_exec): Don't call
- fixup_after_fork if close_on_exec'ed.
-
-2005-12-19 Christopher Faylor <cgf@timesys.com>
-
- * cygtls.h (_cygtls::interrupt_now): Subsume interruptible().
- (interruptible): Delete.
- (setup_handler): Remove interruptible call and just use return from
- interrupt_now.
-
-2005-12-19 Christopher Faylor <cgf@timesys.com>
-
- * fhandler.h (set_console_state_for_spawn): Add an argument to the
- declaration.
- * fhandler_console.cc (set_console_state_for_spawn): Ditto for the
- definition. Only set invisible console for non-cygwin process. Remove
- debugging leftover.
- * spawn.cc (spawn_guts): Pass argument denoting whether this is a
- cygwin process to set_console_state_for_spawn and only call this
- function when exec'ing.
-
-2005-12-19 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (fhandler_dev_zero::mmap): Call VirtualFree(MEM_RELEASE)
- with zero length parameter, otherwise it fails.
- (fhandler_dev_zero::munmap): Ditto.
-
-2005-12-18 Christopher Faylor <cgf@timesys.com>
-
- * fhandler.h (fhandler_console::invisible_console): Declare new
- variable.
- (fhandler_pipe::fixup_in_child): Declare new function.
- (fhandler_console::need_invisible): Ditto.
- (fhandler_console::has_a): Ditto.
- * fhandler_console.cc (set_console_state_for_spawn): Eliminate return
- value. Set up an invisible console if necessary prior to spawning.
- (fhandler_console::invisible_console): Define.
- * fhandler_tty.cc (fhandler_tty_slave::open): Use
- fhandler_console::invisible_console to setup an invisible console.
- * pipe.cc (fhandler_pipe::fixup_in_child): Define new function from
- fixup_after_exec.
- (fhandler_pipe::fixup_after_exec): Use fixup_in_child when appropriate.
- (fhandler_pipe::fixup_after_fork): Ditto.
- * spawn.cc (handle): Reorganize and modernize a little.
- (spawn_guts): Rely on set_console_state_for_spawn to set the console
- into the right state but don't create the process with "detached" flag
- if we have no controlling tty since that confuses 'cmd'.
- * dtable.cc (dtable::stdio_init): Don't set console as controlling
- terminal if we have an invisible console.
-
- * sigproc.cc (child_info::sync): Use correct name in ForceCloseHandle1.
-
-2005-12-18 Christopher Faylor <cgf@timesys.com>
-
- * include/sys/dirent.h: Change __deprecated_d_ino to __invalid_d_ino
- throughout to make things a little clearer.
- * dir.cc (readdir_worker): Reflect above change.
-
-2005-12-16 Christopher Faylor <cgf@timesys.com>
-
- * winsup.h (child_copy): Change prototype to match new functionality.
- * cygheap.cc (cygheap_fixup_in_child): Accommodate new child_copy
- arguments.
- * dcrt0.cc (dll_data_start): Move definition here from fork.
- (dll_data_end): Ditto.
- (dll_bss_start): Ditto.
- (dll_bss_end): Ditto.
- (handle_fork): New function. Called when forked to deal with fork
- issues and copy data to this process from the parent.
- (dll_crt0_0): Call handle_fork when _PROC_FORK condition.
- (dll_crt0): Don't copy user_data when we've forked. Don't zero first
- element of main_environment ever.
- (cygwin_dll_init): Ditto.
- * fork.cc (child_copy): Rename from fork_copy and change arguments so
- that each pair of things to copy gets its own descriptor.
- (frok::child): Remove fixup_mmaps_after_fork call here. Move to
- handle_fork in dcrt0.cc.
- (frok::parent): Use child_copy rather than fork_copy and accommodate
- changes in parameters.
-
- * exceptions.cc (setup_handler): Delay test of whether we're locked
- until after GetThreadContext has been called since there are apparently
- cases where SuspendThread does not cause an immediate thread
- suspension.
-
-2005-12-16 Christopher Faylor <cgf@timesys.com>
-
- * init.cc (dll_entry): Call prime_threads after dll_crt0_0 to avoid
- conflicts between heap allocation and thread stack allocation.
-
-2005-12-16 Christopher Faylor <cgf@timesys.com>
-
- * hookapi.cc (putmem): Remove query of previous memory protection since
- we get that for free the first time we call VirtualProtect.
-
-2005-12-15 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (fhandler_dev_zero::fixup_mmap_after_fork): Use
- system_printf like any other fixup_mmap_after_fork.
-
-2005-12-14 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (ACCFLAGS): Remove macro.
- (fhandler_base::get_default_fmode): Use O_ACCMODE instead of ACCFLAGS
- and or'ed read/write flags.
- (fhandler_base::open_9x): Use O_ACCMODE instead of or'ed read/write
- flags.
- (fhandler_base::open): Ditto.
- * fhandler_disk_file.cc (fhandler_base::open_fs): Ditto.
- * fhandler_mem.cc (fhandler_dev_mem::open): Ditto.
- * fhandler_raw.cc (fhandler_dev_raw::open): Ditto.
-
-2005-12-14 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::open_9x): Handle O_SYNC and O_DIRECT
- flags.
- (fhandler_base::open): Ditto.
- * fhandler_floppy.cc (fhandler_dev_floppy::open): Don't allocate devbuf
- in O_DIRECT case.
- * fhandler_raw.cc (fhandler_dev_raw::ioctl): Don't allow buffer
- changes in O_DIRECT case. Allow returning a buffer size 0, which
- indicates O_DIRECT.
- * fhandler_tape.cc (fhandler_dev_tape::open): Use O_SYNC flag to
- hand down the !buffer_writes case. Don't allocate devbuf in O_DIRECT
- case.
- (fhandler_dev_tape::raw_read): Don't mess with devbuf if it's NULL.
- * include/fcntl.h: Define _FDIRECT, O_DIRECT, O_DSYNC and O_RSYNC.
- * include/cygwin/version.h: Bump API minor version.
-
-2005-12-13 Christopher Faylor <cgf@timesys.com>
-
- * cygtls.cc (_cygtls::remove): Don't bother if we're exiting.
- * sigproc.cc (_cygtls::remove_wq): Ditto.
-
-2005-12-13 Christopher Faylor <cgf@timesys.com>
-
- * fhandler_tty.cc (fhandler_tty::open): Enhance comment.
-
-2005-12-13 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_tty.cc (fhandler_tty::open): Close newly created window
- station after switching to original window station.
-
-2005-12-13 Christopher Faylor <cgf@timesys.com>
-
- * fhandler_tty.cc (fhandler_tty::open): Add a comment.
-
-2005-12-12 Christopher Faylor <cgf@timesys.com>
-
- * times.cc (hires_ms::usecs): Subtract from slop from system time or
- we'll always end up priming the pump.
-
-2005-12-12 Nick Duffek <nick@duffek.com>
-
- * times.cc (systime): Correct precision referenced in comment.
-
-2005-12-12 Christopher Faylor <cgf@timesys.com>
-
- * fhandler_tty.cc (fhandler_tty_slave::open): Don't free original
- windows station since that will cause strange problems displaying
- fonts. Reset windows station to original station after creating
- console.
- * times.cc (hires_ms::usecs): Only reprime when calculated time is less
- than system time.
-
-2005-12-12 Christopher Faylor <cgf@timesys.com>
-
- * pinfo.cc (winpids::add): Don't copy procinfo when there is no cygwin
- process associated with the pid, i.e., procinfo == NULL.
-
-2005-12-12 Christopher Faylor <cgf@timesys.com>
-
- * times.cc (hires_ms::usecs): Correct order when checking if high
- precision time is <= current time.
-
-2005-12-12 Christopher Faylor <cgf@timesys.com>
-
- * pinfo.cc (size_copied): New convenience macro.
- (winpids::add): Alias the element that we are working on for slightly
- better clarity. Honor the "make_copy" flag.
- (winpids::release): Free and zero procinfo field if it was allocated
- via malloc.
- (winpids::~winpids): Free copied array.
- * pinfo.h (class pinfo): Make winpids class a friend.
- (winpids::make_copy): New field.
- (winpids::copied): New array.
- (winpids::reset): Reset npids after releasing pinfos or suffer a memory
- leak.
- (winpids::winpids): Try harder to zero all fields in the class.
-
-2005-12-12 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (GetSystemTimes): Remove.
-
-2005-12-12 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_proc.cc (format_proc_uptime): Drop usage of GetSystemTimes.
- Use NtQuerySystemInformation to evaluate uptime and idle_time from
- all CPU's processor times. Fallback to GetTickCount.
-
-2005-12-12 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (gen_create_protect): Always generate WRITECOPY protection
- for private maps.
- (fixup_mmaps_after_fork): Fix calculation of WRITECOPY protection for
- VirtualProtect. Add some words to the comment.
-
-2005-12-10 Christopher Faylor <cgf@timesys.com>
-
- * dirent.h: Change the rest of the d_ino's to __deprecated_d_ino.
-
-2005-12-10 Christopher Faylor <cgf@timesys.com>
-
- * malloc.cc: Update to version 2.8.3.
- * cygmalloc.h (MSPACE): Remove unneeded definition.
-
-2005-12-08 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_raw.cc (fhandler_dev_raw::ioctl): Only allow 0, 1 or a
- multiple of 512 as new buffersize.
-
-2005-12-08 Pekka Pessi <ppessi@gmail.com>
- Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::recvfrom): Mask flags with
- MSG_WINMASK for Windows socket calls.
- (fhandler_socket::recvmsg): Ditto.
- (fhandler_socket::sendmsg): Ditto.
-
-2005-12-07 Christopher Faylor <cgf@timesys.com>
-
- * hires.h (hires_ms::initime_ms): Delete.
- (hires_ms::initime_us): Just define as LONGLONG.
- (hires_ms::uptime): New function.
- * select.cc (select_stuff::wait): Use gtod for timing to attempt to
- avoid windows 32 bit wraparound.
- * times.cc (systime): New function.
- (times): Replace GetTickCount with gtod.uptime.
- (hires_us::prime): Use systime() to calculate system time rather than
- calling GetSystemTimeAsFileTime directly.
- (hires_ms::prime): Ditto. Eliminate initime_ms.
- (hires_ms::usecs): Try harder to detect wraparound.
-
- * fhandler_proc.cc (format_proc_partitions): Set drive_size to zero to
- avoid a compiler warning.
-
-2005-12-07 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_proc.cc (format_proc_partitions): Use modern IOCTLs
- to determine drive size as far as possible.
-
-2005-12-07 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_raw.cc (fhandler_dev_raw::ioctl): Fix INVALID_PARAMETER
- condition. Only copy devbuf to buf if buf is non-NULL.
-
-2005-12-07 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_raw.cc (fhandler_dev_raw::ioctl): Fix setting devbuf
- when rd_parm is 0 or 1.
-
-2005-12-07 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_floppy.cc (fhandler_dev_floppy::lseek): Fix test for
- valid file position at EOM.
-
-2005-12-07 Christopher Faylor <cgf@timesys.com>
-
- * include/cygwin/stdlib.h: Guard compilation of *unsetenv* in newlib.
-
-2005-12-07 Corinna Vinschen <corinna@vinschen.de>
-
- * exceptions.cc (_cygtls::handle_exceptions): In case of a
- STATUS_ACCESS_VIOLATION, check if the page is a mmaped page beyond
- a file's EOF. Generate SIGBUS instead of SIGSEGV then.
- * mmap.cc (__PROT_ATTACH): New define.
- (__PROT_FILLER): Ditto.
- (fh_anonymous): Rename from fh_paging_file;
- (fh_disk_file): New global static variable.
- (attached): New inline function.
- (filler): Ditto.
- (gen_create_protect): Split off from gen_protect to use the file's
- access mode to create mapping always with maximum allowed protections.
- (gen_protect): Accommodate pages attached beyond EOF. Use symbolic
- values instead of numerics when possible. Drop create parameter.
- (gen_access): Use file's access mode instead of protection.
- (CreateMapping9x): Create named mapping names so that different
- creation access modes result in different mappings.
- (CreateMappingNT): Only reserve attached pages, don't commit them.
- (MapViewNT): Ditto. Set AT_ROUND_TO_PAGE for all non-NULL base
- addresses.
- (mmap_func_t): Define CreateMapping and MapView function pointers
- with additional openflags parameter.
- (class mmap_record): Add openflags member.
- (mmap_record::mmap_record): Add openflags parameter.
- (mmap_record::get_openflags): New accessor.
- (mmap_record::attached): Call global attached function.
- (mmap_record::filler): Call global filler function.
- (mmap_record::gen_create_protect): Call global gen_create_protect
- function.
- (mmap_record::gen_protect): Drop create parameter.
- (mmap_record::alloc_fh): Set fhandler's access flags.
- (list::search_record): Accommodate filler pages.
- (list::set): Use inode number as hash value.
- (map::get_list_by_fd): Check hash value against file's inode number.
- (mmap_is_attached_page): New function to evaluate if a given address
- is on a attached page. Called from _cygtls::handle_exceptions.
- (mmap_worker): New function to do mapping and bookkeeping in a
- single call.
- (mmap64): Use roundup2 to round length to pagesize alignment.
- Initialize global fhandlers. Simplify anonymous initialization.
- Add SUSv3 compatible check of file open mode vs. requested protection.
- Try creating new file handles to allow maximum page protection.
- Allow creating attached pages in case of mapping beyond EOF.
- Close new file handle if one has been created.
- (munmap): Align len to pagesize.
- (msync): Rework argument checks. Align len to pagesize.
- (mprotect): Ditto. Accommodate attached pages.
- (mlock): Use roundup/rounddown macros instead of homemade expressions.
- (munlock): Add page alignment as in mlock.
- (fhandler_dev_zero::munmap): Fix unmapping of non-private mappings.
- (fhandler_dev_zero::fixup_mmap_after_fork): Accommodate filler pages.
- (fixup_mmaps_after_fork): Don't fail if attached pages couldn't be
- created in child. Avoid superfluous call to VirtualFree. Check for
- original allocation protection to fix PAGE_WRITECOPY protection.
- * ntdll.h: Revert deletion of AT_ROUND_TO_PAGE define.
- * winsup.h (mmap_is_attached_page): Declare.
-
-2005-12-05 Christopher Faylor <cgf@timesys.com>
-
- * include/cygwin/stdlib.h: New file.
- * environ.cc (unsetenv): Change to return -1 on input error.
- * include/cygwin/version.h: Add more description to latest api bump.
-
-2005-12-05 Christopher Faylor <cgf@timesys.com>
-
- * dir.cc (readdir_workdir): Only fill out d_ino when linked into older
- app.
- * include/cygwin/version.h: Bump api minor number to 147, reflecting
- obsolescence of d_ino.
- (CYGWIN_VERSION_USER_API_VERSION_COMBINED): New convenience macro.
- (CYGWIN_VERSION_CHECK_FOR_NEEDS_D_INO): New convenience macro.
- * include/sys/dirent.h: Change d_ino field to __deprecated_d_ino.
-
-2005-12-05 Christopher Faylor <cgf@timesys.com>
-
- Remove unneeded whitespace.
- * cygtls.cc (_cygtls::set_state): Delete.
- (_cygtls::reset_exception): Ditto.
- (_cygtls::init_thread): Set initialized state directly here.
- (_cygtls::push): Remove exception argument. Don't treat exceptions
- specially.
- * cygtls.h (_cygtls::push): Ditto.
- (_cygtls::isinitialized): Don't treat exceptions specially.
- (_cygtls::reset_exception): Delete.
- (_cygtls::set_state): Ditto.
- (_cygtls::handle_exceptions): Don't push ebp on the stack prior to
- calling sig_send. Just set incyg instead.
- (_cygtls::interrupt_setup): Accommodate _cygtls::push argument change.
- (_cygtls::interrupt_now): Ditto.
- (setup_handler): Don't treat exceptions specially.
- * gendef (longjmp): Always zero incyg flag.
-
-2005-12-04 Corinna Vinschen <corinna@vinschen.de>
-
- * environ.cc (spenvs): Add "windir" as an "always export" variable
- to accommodate WinSock on Windows 95.
-
-2005-12-02 Christopher Faylor <cgf@timesys.com>
-
- * include/exceptions.h (exception_list): Revert previous change.
- Windows doesn't care.
- (exception_handler): Use real exception_list parameter type rather than
- void *
- * tlsoffsets.h: Regenerate.
- * cygtls.h (_cygtls::handle_exceptions): Use real exception_list
- parameter type rather than void *.
- (handle_threadlist_exception): Ditto.
- (init_exception_handler): Ditto.
- * cygtls.cc (_cygtls::handle_threadlist_exception ): Ditto.
- (_cygtls::init_exception_handler): Add kludge to terminate linked list
- with a loop, which seems to solve problem of RtlUnwind causing problems
- * exceptions.cc (rtl_unwind): Use real exception_list parameter type
- rather than void *.
- (_cygtls::handle_exceptions): Ditto.
-
-2005-12-02 Christopher Faylor <cgf@timesys.com>
-
- * cygtls.h (_cygtls::el): New field.
- (_cygtls::handle_exceptions): New function declaration.
- (_cygtls::handle_threadlist_exception): Ditto.
- (_cygtls::init_exception_handler): Ditto.
- (_cygtls::init_threadlist_exceptions): Remove arg from declaration.
- * cygtls.cc (_cygtls::call2): Don't initialize exceptions here.
- (_cygtls::init_thread): Do it here instead and use member function.
- (_cygtls::handle_threadlist_exception): Move into _cygtls class.
- (_cygtls::init_exception_handler): Ditto. Rely on existence of 'el'
- memmber in _cygtls.
- (_cygtls::init_threadlist_exceptions): Ditto.
- * dcrt0.cc (dll_crt0_1): Remove exception_list definition and setting
- since it now commonly resides in the tls.
- * exceptions.cc (init_exception_handler): Move to cygtls.cc.
- (init_exceptions): Ditto.
- (rtl_unwind): New, safe wrapper function for RtlUnwind.
- (_cygtls::handle_exceptions): Move to _cygtls. Call rtl_unwind to
- unwind frames and eliminate copying of structures. Put address of
- failing instruction in si_addr, not the address on the stack. Return 0
- to indicate that we've handled this exception.
- * external.cc (cygwin_internal): Make CW_INIT_EXCEPTIONS a no-op.
- * sigproc.cc (wait_sig): Accommodate argument change to
- _cygtls::init_threadlist_exceptions.
- * tlsoffsets.h: Regenerate.
- * include/exceptions.h (exception_list): Add more stuff to the
- exception list. Apparently windows needs this?
- (init_exceptions): Remove bogus declaration.
-
- * include/cygwin/signal.h (SI_USER): Redefine as zero as per SUSv3.
- * include/cygwin/version.h: Bump API minor version number to 146.
-
- * thread.cc (pthread_kill): Set si_pid and si_uid.
-
- * timer.cc (timer_thread): Set si_code to SI_TIMER.
-
-2005-12-01 Christopher Faylor <cgf@timesys.com>
-
- * dcrt0.cc (getstack): Try harder to modify memory.
- (alloc_stack): Alloc page prior to stack top, too.
-
-2005-12-01 Christopher Faylor <cgf@timesys.com>
-
- * devices.h (_major): Revert previous ill-advised change.
- (_minor): Ditto.
-
-2005-12-01 Christopher Faylor <cgf@timesys.com>
-
- * exceptions.cc (handle_exceptions): Translate a guard page exception
- to a "SIGBUS".
-
-2005-12-01 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc: Make debug output more consistently. Fix some comments.
- (gen_protect): Convert to inline function.
- (gen_access): Ditto.
- (mmap_record::gen_protect): Add create parameter as in global function.
- (mmap_record::alloc_page_map): Change condition so that always the
- correct protection setting is set after mapping has been established.
- (mmap64): For anonymous mappings set offset always to 0.
- (fixup_mmaps_after_fork): Always call fixup_mmap_after_fork method
- with the MAP_FIXED flag set.
-
-2005-12-01 Christopher Faylor <cgf@timesys.com>
-
- * devices.h (_minor): Coerce argument to proper type before
- manipulating.
- (_major): Ditto.
- (device::is_fs_special): New function.
- * fhandler_disk_file.cc (fhandler_base::fstat_helper): Set the size to
- 0 for devices rather than reporting the size of the symlink.
- (fhandler_disk_file::readdir): Use is_fs_special to determine if .lnk
- should be stripped.
- * path.cc: Rename symlink_info::is_symlink to symlink_info::issymlink
- throughout.
- (symlink_info::isdevice): New field.
- (path_conv::check): Use 'isdevice' to determine if just-parsed entity
- is a device rather than relying on non-zero major/minor.
- (symlink_info::parse_device): Set isdevice to true if we've discovered
- a device.
- (symlink_info::check): Clear isdevice field prior to processing. Use
- isdevice to control debugging output.
- (symlink_info::set): Set isdevice to false.
- * path.h (path_conv::is_fs_special): New function.
- * devices.cc: Regenerate.
-
-2005-11-30 Christopher Faylor <cgf@timesys.com>
-
- * times.cc (hires_ms::prime): Remove debugging stuff.
- (hires_ms::usecs): Ditto.
-
-2005-11-30 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (list::try_map): New method, implementing trying to map
- within another already existing map, moved from mmap64 here.
- (mmap64): Just call try_map now.
- (fhandler_dev_zero::fixup_mmap_after_fork): Always create new private
- map with PAGE_READWRITE protection.
- (fixup_mmaps_after_fork): Fix comment.
-
-2005-11-29 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/version.h: Bump API minor version.
-
-2005-11-29 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (fhandler_dev_zero::mmap): Add method.
- (fhandler_dev_zero::munmap): Ditto.
- (fhandler_dev_zero::msync): Ditto.
- (fhandler_dev_zero::fixup_mmap_after_fork): Ditto.
- * mmap.cc: Implement anonymous mapping using fhandler_dev_zero class.
- Implement private anonymous maps using VirtualAlloc/VirtualFree. Fix
- or add some more comments.
- (fh_paging_file): Change to type fhandler_dev_zero.
- (priv): New static inline function to avoid having lots of flag bit
- tests in the code. Use throughout were appropriate.
- (fixed): Ditto.
- (anonymous): Ditto.
- (noreserve): Ditto.
- (autogrow): Ditto.
- (gen_protect): Never generate PAGE_WRITECOPY protection for
- private anonymous maps.
- (gen_access): Drop FILE_MAP_EXECUTE handling since it's not supported
- correctly on 9x.
- (VirtualProt9x): Move comment from mmap64 here.
- (mmap_record::mmap_record): Gegerate correct device entry for
- anonymous maps, though unused right now.
- (mmap_record::priv): Call global priv function.
- (mmap_record::fixed): Call global fixed function.
- (mmap_record::anonymous): Call global anonymous function.
- (mmap_record::noreserve): Call global noreserve function.
- (mmap_record::autogrow): Call global autogrow function.
- (list::anonymous): New method. Use throughout were appropriate.
- (mmap_record::compatible_flags): Drop now useless ifdef.
- (mmap_record::alloc_page_map): Accommodate private anonymous maps.
- (mmap_record::map_pages): Accommodate MAP_NORESERVE mappings.
- (mmap_record::unmap_pages): Accommodate private anonymous maps.
- (mmap64): Simplify argument check. Don't remove the MAP_PRIVATE flag
- for anonymous mappings on 9x anymore since that's now handled
- gracefully.
- (mprotect): Accommodate MAP_NORESERVE mappings. Fix case when
- non-mmap areas are just MEM_RESERVEd.
- (fhandler_dev_zero::mmap): Implement anonymous mapping here.
- (fhandler_dev_zero::munmap): Ditto.
- (fhandler_dev_zero::msyn): Ditto.
- (fhandler_dev_zero::fixup_mmap_after_fork): Ditto.
- (fixup_mmaps_after_fork): Accommodate private anonymous maps. Enhance
- debug output in case VirtualProtect fails.
- * include/sys/mman.h: Really define MAP_NORESERVE now.
-
-2005-11-28 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (NtCreateSection): Define.
- * cygheap.cc (_csbrk): Call getpagesize instead of getshmlba.
- * dcrt0.cc (dll_crt0_0): Call mmap_init.
- * external.cc (cygwin_internal): Call getpagesize instead of getshmlba.
- * fhandler.h (fhandler_base::mmap): Change access to prot parameter.
- (fhandler_base::fixup_mmap_after_fork): Ditto.
- (fhandler_disk_file::mmap): Ditto.
- (fhandler_disk_file::fixup_mmap_after_fork): Ditto.
- (fhandler_dev_mem::mmap): Ditto.
- (fhandler_dev_mem::fixup_mmap_after_fork): Ditto.
- * fhandler_mem.cc (fhandler_dev_mem::write): Call getsystempagesize
- instead of getpagesize.
- (fhandler_dev_mem::read): Ditto.
- (fhandler_dev_mem::fstat): Ditto.
- (fhandler_dev_mem::mmap): Move to mmap.cc.
- (fhandler_dev_mem::munmap): Ditto.
- (fhandler_dev_mem::msync): Ditto.
- (fhandler_dev_mem::fixup_mmap_after_fork): Ditto.
- * fhandler_proc.cc (format_proc_meminfo): Call getsystempagesize
- instead of getpagesize.
- * fhandler_process.cc (format_process_stat): Ditto.
- (format_process_status): Ditto.
- (get_mem_values): Ditto.
- * mmap.cc: Fix formatting. Try to make more readable and modular.
- Take advantage of pagesize==granularity.
- (gen_protect): New static function to evaluate Windows
- protection bits from POSIX protection and flags.
- (gen_access): Ditto for Windows access mode.
- (VirtualProt9x): Wrapper function to call VirtualProtect on 9x.
- (VirtualProtNT): Ditto for NT.
- (VirtualProtEx9x): Ditto for VirtualProtectEx on 9x.
- (VirtualProtExNT): Ditto for NT.
- (CreateMapping9x): Wrapper function for creating a mapping handle on 9x.
- (CreateMappingNT): Ditto for NT.
- (MapView9x): Wrapper function to map a view on 9x.
- (MapViewNT): Ditto for NT.
- (mmap_funcs_9x): Structure containing function pointers to wrapper
- functions for 9x.
- (mmap_funcs_nt): Ditto for NT.
- (mmap_func): Pointer to wrapper functions used in subsequent code.
- (mmap_init): Initialize mmap_func depending on OS.
- (class mmap_record): Use sensible member names. Add POSIX protection
- member. Drop Windows access flags member. Constify more methods.
- Use accessors instead of direct member access inside of own methods.
- (mmap_record::gen_protect): Class wrapper to evaluate matching
- Windows protection bits.
- (mmap_record::gen_access): Ditto for Windows access flags.
- (mmap_record::compatible_flags): New function to check if flags are
- compatible with flags of existing map.
- (list::add_record): Drop offset and length arguments.
- (class map): Change counters to unsigned. Match usage throughout.
- (mmapped_areas): Convert from pointer to global struct.
- (mmap_record::alloc_page_map): Simplify.
- (mmap_record::map_pages): Ditto.
- (mmap_record::fixup_page_map): Delete.
- (mmap64): Simplify. Add workaround for Windows 98 bug. Fix bug on
- NT that existing anonymous mappings weren't searched for a match.
- (munmap): Add workaround for Windows 98 bug.
- (msync): Simplify.
- (mprotect): Handle existing maps correctly.
- (mlock): Add local pagesize variable and enlightening comment.
- (fhandler_disk_file::mmap): Main functionality now in CreateMapping/
- MapView wrapper functions.
- (fhandler_disk_file::fixup_mmap_after_fork): Call MapView wrapper.
- (fhandler_dev_mem::mmap): Moved from fhandler_mem.cc. Simplify by
- calling MapViewNT.
- (fhandler_dev_mem::munmap): Moved from fhandler_mem.cc.
- (fhandler_dev_mem::msync): Ditto.
- (fhandler_dev_mem::fixup_mmap_after_fork): Ditto. Call MapViewNT.
- (fixup_mmaps_after_fork): Restructure and hopefully speed up loop for
- setting protection and memory content on MAP_PRIVATE maps.
- * ntdll.h (AT_ROUND_TO_PAGE): Remove define.
- (AT_EXTENDABLE_FILE): Add define.
- (NtCreateSection): Add prototype.
- * syscalls.cc (getpagesize): Return granularity as pagesize now.
- (getsystempagesize): New function to retrieve "real" pagesize.
- (getshmlba): Delete since it's replaced by getpagesize now.
- * wincap.h (wincaps::has_mmap_alignment_bug): New element.
- * wincap.cc: Implement above element throughout.
- * winsup.h (getshmlba): Drop prototype.
- (getsystempagesize): Add prototype.
- (mmap_init): Ditto.
- * include/sys/mman.h: (Not yet) define MAP_NORESERVE.
-
-2005-11-28 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_base::fstat_helper): Don't rely on
- has_acl() state for evaluating inodes. Temporarily(?) enable "real"
- inodes for remote drives.
-
-2005-11-25 Christopher Faylor <cgf@timesys.com>
-
- * heap.cc: Remove spurious getpagesize declaration.
-
-2005-11-25 Christian Franke <Christian.Franke@t-online.de>
-
- * exceptions.cc (ctrl_c_handler): Distinguish CTRL-BREAK from CTRL-C in
- some cases.
-
-2005-11-23 Christopher Faylor <cgf@timesys.com>
-
- * fhandler_tty.cc (fhandler_tty_slave::open): Reset the current windows
- station whenever ctty == -1 regardles of whether there's a windows
- station already assigned. Close the old windows station in this
- situation.
- * pinfo.cc (_pinfo::set_ctty): Reinstate incrementing of console count
- when recording ctty so that the current tty is always around.
- * autoload.cc (CloseWindowStation): Define.
-
-2005-11-18 Christopher Faylor <cgf@timesys.com>
-
- * strptime.cc (_strptime): Fix gcc warnings.
-
-2005-11-18 Christopher Faylor <cgf@timesys.com>
-
- * memmem.cc: Move from here.
- * lib/memmem.cc: Move to here.
-
-2005-11-18 Corinna Vinschen <corinna@vinschen.de>
-
- * libc: Add subdirectory.
- * Makefile.in (VPATH): Add libc subdir.
- (DLL_OFILES): Add strptime.o and timelocal.o.
- * cygwin.din: Export timelocal and timegm.
- * localtime.cc: Define STD_INSPIRED unconditionally.
- * include/cygwin/time.h (timelocal): Add declaration.
- (timegm): Ditto.
- * include/cygwin/version.h: Bump API minor version.
- * libc/strptime.cc: New file.
- * libc/timelocal.cc: New file.
- * libc/timelocal.h: New file.
-
-2005-11-18 Christopher Faylor <cgf@timesys.com>
-
- * include/cygwin/sys_time.h: Move futimes and lutimes declaration here
- from newlib.
-
-2005-11-18 Christopher Faylor <cgf@timesys.com>
-
- * times.cc (timezone): Put back (void).
- * include/cygwin/time.h: Add more cygwin stuff from newlib.
-
-2005-11-18 Christopher Faylor <cgf@timesys.com>
-
- * include/cygwin/sys_time.h: Rename from include/cygwin/time.h.
- * include/cygwin/time.h: New file.
-
-2005-11-17 Christopher Faylor <cgf@timesys.com>
-
- * fork.cc (fork): Move top-of-stack calculation later.
-
- * pinfo.cc (_pinfo::set_ctty): Use __ctty to print current console in
- debugging output.
-
-2005-11-17 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_tty.cc (fhandler_tty_slave::open): Don't expect that
- service applications have no window station attached.
-
-2005-11-16 Christopher Faylor <cgf@timesys.com>
-
- * times.cc (hires_ms::prime): Don't escalate the priority.
-
-2005-11-14 Christopher Faylor <cgf@timesys.com>
-
- * include/sys/elf64.h: Fix types to reflect linux usage.
-
-2005-11-14 Corinna Vinschen <corinna@vinschen.de>
- Christopher Faylor <cgf@timesys.com>
-
- * fhandler.h (fhandler_console::fixup_after_fork_exec): Define with
- additional bool parameter.
- (fhandler_console::fixup_after_exec): Accommodate
- fixup_after_fork_exec's parameter.
- (fhandler_console::fixup_after_fork): Ditto.
- * fhandler_console.cc (fhandler_console::fixup_after_fork_exec): Avoid
- opening new console only when close_on_exec AND execing.
-
-2005-11-14 Christopher Faylor <cgf@timesys.com>
-
- * fhandler.h (fhandler_console::fixup_after_fork_exec): Declare new function.
- (fhandler_console::fixup_after_fork): Use fixup_after_fork_exec.
- (fhandler_console::fixup_after_exec): Ditto.
- * fhandler_console.cc (fhandler_console::fixup_after_fork): Delete definition.
- (fhandler_console::fixup_after_fork_exec): Rename from fixup_after_exec.
- * pinfo.cc (_pinfo::set_ctty): Don't play with console count here.
- * syscalls.cc (close_all_files): Don't close cygheap ctty if hExeced
- since the child will be copying information from us.
- (setsid): Use myctty() rather than raw ctty #.
-
-2005-11-13 Christopher Faylor <cgf@timesys.com>
-
- * cygheap.h (init_cygheap::manage_console_count): Declare new function.
- (init_cygheap::console_count): Renamed from open_fhs. Make private.
- * cygheap.cc (init_cygheap::manage_console_count): Define new function.
- * dtable.cc (dtable::fixup_after_exec): Always call fixup_after_exec on
- elements of fd even when they are about to be closed.
- * fhandler.h (report_tty_counts): Remove open_fhs from debugging
- output.
- * fhandler_console.cc (fhandler_console::open): Use
- manage_console_count rather than manipulating count directly.
- (fhandler_console::close): Ditto.
- (fhandler_console::fixup_after_fork): Ditto.
- (fhandler_console::fixup_after_exec): Ditto. Don't close handles if
- close_on_exec.
- * fhandler_tty.cc (fhandler_tty_slave::open): Use
- manage_console_count() rather than manipulating count directly.
- Reflect change in arguments to report_tty_counts().
- (fhandler_tty_slave::close): Ditto for both.
- (fhandler_tty_slave::dup): Ditto for both.
- (fhandler_tty_slave::ioctl): Use myctty() rather than raw ctty #.
- (fhandler_tty_slave::fixup_after_fork): Reflect change in arguments to
- report_tty_counts().
- (fhandler_tty_master::init_console): Use manage_console_count() rather
- than manipulating count directly.
- * fhandler_clipboard.cc (fhandler_dev_clipboard::fixup_after_exec):
- Don't perform any operations if close_on_exec.
- * fhandler_dsp.cc (fhandler_dev_dsp::fixup_after_exec): Ditto.
- * fhandler_raw.cc (fhandler_dev_raw::fixup_after_exec): Ditto.
- * fhandler_serial.cc (fhandler_serial::fixup_after_exec): Ditto.
- * pinfo.h (_pinfo::_ctty): Declare new function.
- (myctty): Declare new macro.
- (__ctty): Declare new macro.
- * pinfo.cc (_pinfo::_ctty): Define new function.
- (_pinfo::set_ctty): Use manage_console_count() rather than manipulating
- count directly.
- * signal.cc (kill_pgrp): Use myctty() and __ctty() macros rather than
- raw ctty #.
- * syscalls.cc (setsid): Ditto. Use manage_console_count() rather than
- manipulating count directly.
-
-2005-11-13 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::recvfrom): Just return 0 (EOF)
- in case of WSAESHUTDOWN.
- (fhandler_socket::recvmsg): Ditto.
- * poll.cc (poll): Set revents to POLLIN instead of POLLHUP. Add comment.
-
-2005-11-11 Christopher Faylor <cgf@timesys.com>
-
- * cygheap.h (init_cygheap::_gtod): Remove.
- * cygwin.din: Export clock_getres and clock_setres.
- * hires.h (hires_ms::minperiod): Delete declaration.
- (hires_ms::began_period): Ditto.
- (hires_ms::prime): Make void.
- (hires_ms::resolution): Just define here.
- (hires_ms::usecs): Remove unneeded argument.
- (gtod): Redeclare as a variable.
- * timer.cc (timer_thread): Eliminate argument to gtod.usecs().
- (timer_tracker::gettime): Ditto.
- (timer_tracker::settime): Ditto.
- * times.cc (gettimeofday): Ditto.
- (hires_ms::began_period): Delete declaration.
- (hires_us::prime): Remove debugging.
- (hires_ms::prime): Make void. Eliminate period stuff.
- (hires_ms::usecs): Eliminate argument to gtod.usecs().
- (hires_ms::resolution): New function.
- (clock_getres): Ditto.
- (clock_setres): Ditto.
- * version.h: Bump API version to 143.
- * include/cygwin/time.h: New file.
-
-2005-11-10 Christopher Faylor <cgf@timesys.com>
-
- * times.cc (hires_ms::prime): Comment out call to timeBeginPeriod for
- now.
- (hires_ms::usecs): Call prime if haven't called began_period().
-
- * param.h: Don't define stuff that is already defined in endian.h.
-
-2005-11-10 Christopher Faylor <cgf@timesys.com>
-
- * include/endian.h: Remove USE_BSD ifdef since it is never defined on
- Cygwin.
-
-2005-11-10 Corinna Vinschen <corinna@vinschen.de>
-
- * syslog.cc (setlogmask): Don't mask the mask.
- (vsyslog): Fix priority check.
-
-2005-11-10 Scott Finneran <scottf@pacom.com>
-
- * include/cygwin/signal.h: Add missing sigrelse prototype.
-
-2005-11-08 Christopher Faylor <cgf@timesys.com>
-
- * fhandler_base.cc (fhandler_base::readv): Free buf, not a pointer into
- the middle of buf.
-
-2005-11-08 Christopher Faylor <cgf@timesys.com>
-
- * memmem.cc: New file.
- * include/cygwin/version.h: Bump API version number to 142.
- * cygwin.din: Export memmem.
- * Makefile.in: Build memmem.o.
-
-2005-11-08 Christopher Faylor <cgf@timesys.com>
-
- * environ.cc (spenvs): Make "SYSTEMDRIVE" an "always export".
-
-2005-11-07 Corinna Vinschen <corinna@vinschen.de>
-
- * times.cc (futimes): Redirect to utimes_worker if given file
- descriptor is opened R/O.
-
-2005-11-06 Christopher Faylor <cgf@timesys.com>
-
- * dcrt0.cc (dll_crt0_0): Initialize security data first so that it can
- be used by subsequent handle creation.
-
-2005-11-04 Christopher Faylor <cgf@timesys.com>
-
- * cygheap.h (init_cygheap::_gtod): New hires_ms element.
- * hires.h (hires_ms::minperiod): Remove static designation.
- (hires::began_period): New field.
- * signal.cc: Include headers required for cygheap.h now that gtod lives
- in the cygheap.
- * timer.c: Ditto.
- * times.cc (gtod): Delete variable.
- (gtod::minperiod): Ditto.
- (gtod::began_period): Define.
- (hires_ms::prime): Add more debugging output. Call timeBeginPeriod
- only when !began_period.
-
-2005-11-04 Christopher Faylor <cgf@timesys.com>
-
- * times.cc (hires_ms::prime): More debugging.
- (hires_ms::usecs): Ditto.
-
-2005-11-03 Christopher Faylor <cgf@timesys.com>
-
- * times.cc (stupid_printf): Define and use throughout -- temporarily.
-
-2005-11-03 Christopher Faylor <cgf@timesys.com>
-
- * times.cc (hires_ms::prime): Add lots of temporary debugging output.
-
-2005-11-02 Christopher Faylor <cgf@timesys.com>
-
- * times.cc (hires_ms::minperiod): Make copy-on-fork.
- (gettimeofday): Remove temporary debugging.
- (hires_us::prime): Add lots of temporary debugging output.
-
-2005-11-02 Christopher Faylor <cgf@timesys.com>
-
- * times.cc (gettimeofday): Add temporary debugging output.
-
-2005-11-01 Christopher Faylor <cgf@timesys.com>
-
- * include/sys/cygwin.h: Define CYGWIN_SIGNAL_STRING.
- * exceptins.cc (sigpacket::process): Send a _CYGWIN_SIGNAL_STRING to
- gdb if the process is being debugged. A WIP.
-
-2005-10-29 Christopher Faylor <cgf@timesys.com>
-
- * exceptions.cc (signal_exit): Eliminate setting of main thread
- priority since process lock should make that unnecessary.
- * fork.cc (stack_base): Eliminate.
- (frok::parent): Subsume stack_base and just set stack stuff here.
- Report on priority class in debugging output.
- * spawn.cc (spawn_guts): Report on priority class in debugging output.
-
-2005-10-29 Christopher Faylor <cgf@timesys.com>
-
- * fork.cc (frok::child): Change order of cleanup prior to return.
- (fork): Save more of the stack.
-
- * gendef: Fix some comments.
-
- * sigproc.cc (wait_sig): Clarify debug output.
-
-2005-10-29 Christopher Faylor <cgf@timesys.com>
-
- * child_info.h (CHILD_INFO_MAGIC): Reset.
-
-2005-10-24 Christopher Faylor <cgf@timesys.com>
-
- * pinfo.cc (_pinfo::fds): Lock fdtab while enumerating.
-
-2005-10-24 Corinna Vinschen <corinna@vinschen.de>
-
- * spawn.cc (spawn_guts): Don't leave the function with return inside
- pthread cleanup brackets.
-
-2005-10-24 Christopher Faylor <cgf@timesys.com>
-
- * cygheap.h (cygheap_fdenum): Remove start_fd stuff.
- (cygheap_fdenum::rewind): Ditto.
- * pipe.cc (fhandler_pipe::open): Lock fdtab while enumerating.
- * times.cc (utimes_worker): Ditto.
-
-2005-10-23 Christopher Faylor <cgf@timesys.com>
-
- * cygheap.h (cygheap_fdenum::cygheap_fdenum): Record locked state or
- suffer deadlocks.
- (class locked_process): Move to another header.
- * sync.h (lock_process): Define here.
- * cygtls.cc (_cygtls::fixup_after_fork): Reset spinning state as well
- as stacklock state.
- * dcrt0.cc (lock_process::locker): Define.
- (dtable::lock_cs): Delete.
- (dll_crt0_0): Initialize process lock here ASAP.
- * dtable.cc (dtable_init): Eliminate call to init_lock().
- (dtable::fixup_after_fork): Ditto.
- (dtable::init_lock): Delete definition.
- * dtable.h (dtable::init_lock): Delete declaration.
- (dtable::lock): Use process lock rather than dtable-specific lock.
- (dtable::unlock): Ditto.
-
- * sigproc.cc (sigproc_init): Minor change to debugging output.
-
- * times.cc (utime_worker): Use build_fh_pc rather than reinterpreting
- the posix path name again. Return any error from path_conv immediately.
-
-2005-10-22 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::connect): Don't restrict
- WSAEINVAL -> WSAEISCONN conversion to nonblocking sockets.
- (fhandler_socket::accept): Use event driven technique to implement
- interuptible accept.
- (fhandler_socket::wait): Allow FD_ACCEPT handling.
- * net.cc (cygwin_accept): Remove workaround for allowing blocking
- accept. That's entirely in fhandler_socket::accept now.
-
-2005-10-22 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (class fhandler_socket): Add timeout parameter to wait()
- method.
- * fhandler_socket.cc (fhandler_socket::connect): Use event driven
- technique (prepare/wait/release) to implement interuptible connect.
- (fhandler_socket::wait): Add timeout parameter. Allow FD_CONNECT
- handling.
- * net.cc (cygwin_connect): Remove braindead workaround for allowing
- blocking connect. That's entirely in fhandler_socket::connect now.
-
-2005-10-22 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/version.h: Fix typo.
-
-2005-10-21 Christopher Faylor <cgf@timesys.com>
-
- * dir.cc (rmdir): Eliminate nonsensical code.
-
- * fork.cc (fork): Move exit debug_printf to last statement.
-
-2005-10-20 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din (futimes): Export.
- (lutimes): Export.
- * times.cc (utimes_worker): Created from utimes, add nofollow flag
- to implement utimes and lutimes.
- (utimes): Just call utimes_worker.
- (lutimes): New function.
- (futimes): Ditto.
- * include/cygwin/version.h: Bump API minor version.
-
-2005-10-19 Christopher Faylor <cgf@timesys.com>
-
- * sigproc.cc (child_info::sync): Move check for !wr_proc_pipe lower.
- * spawn.cc (spawn_guts): Correct check for top-level process.
-
-2005-10-19 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc: Revert loading rcmd, rexec, rresvport and inet_network
- from wsock32.dll since these symbols are not exported from ws2_32.dll.
-
-2005-10-19 Christopher Faylor <cgf@timesys.com>
-
- * times.cc (utimes): Only consider fds opened with write access.
-
-2005-10-19 Christopher Faylor <cgf@timesys.com>
-
- * fhandler_disk_file.cc (fhandler_base::utimes_fs): Use existing handle
- if fhandler has one.
- * times.cc (utimes): Scan open fds for matching paths and use existing
- fhandler if one exists.
-
-2005-10-19 Christopher Faylor <cgf@timesys.com>
-
- * pinfo.cc (_pinfo::dup_proc_pipe): Make warning more severe by
- actually printing it.
- (_pinfo::alert_parent): Fix comment. Don't send to parent if we are in
- an exec stub.
-
-2005-10-18 Christopher Faylor <cgf@timesys.com>
-
- * cygtls.cc (handle_threadlist_exception): Improve diagnostic output.
-
- * sigproc.cc (child_info::sync): Only clear hProcess when execing.
- (wait_sig): Protect readsig handle.
-
-2005-10-18 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (NtLockVirtualMemory): Import.
- (NtUnlockVirtualMemory): Import.
- (GetProcessWorkingSetSize): Import.
- (SetProcessWorkingSetSize): Import.
- * cygwin.din (mlock): Export.
- (munlock): Export.
- * mmap.cc (mlock): New function.
- (munlock): Ditto.
- * ntdll.h (STATUS_WORKING_SET_QUOTA): Define.
- (LOCK_VM_IN_WSL): Define.
- (LOCK_VM_IN_RAM): Define.
- (NtLockVirtualMemory): Declare.
- (NtUnlockVirtualMemory): Declare.
- * sysconf.cc (sysconf): Implement _SC_MEMLOCK_RANGE.
- * wincap.h: Implement has_working_virtual_lock throughout.
- * wincap.cc: Ditto.
- * include/cygwin/version.h: Bump API minor version.
- * include/sys/mman.h (mlock): Declare,
- (munlock): Declare.
-
-2005-10-18 Christopher Faylor <cgf@timesys.com>
-
- * sigproc.cc (child_info::sync): Use correct name when closing to
- prevent warnings when DEBUGGING.
- * spawn.cc (spawn_guts): Set myself.hProcess to pi.hProcess since this
- may have been zeroed by the previous sync.
-
-2005-10-18 Christopher Faylor <cgf@timesys.com>
-
- * sigproc.cc (child_info::sync): Fix typo which caused hProcess to
- never be cleared. Only clear hProcess when not forking.
-
-2005-10-17 Christopher Faylor <cgf@timesys.com>
-
- Change process_lock to lock_process throughout.
- Change all calls to new cygthread to handle extra argument, throughout.
- * cygthread.h (cygthread::callproc): Declare new method.
- (cygthread::cygthread): Add optional length argument to allow copying
- arguments to executing thread.
- * cygthread.cc (cygthread::callproc): Define new method.
- (cygthread::stub): Use callfunc to invoke thread func to allow
- potentially allocating stack memory which will be returned.
- (cygthread::simplestub): Ditto.
- (cygthread::cygthread): Accept arglen argument. Reset ev here prior to
- activating thread. Wait for ev after activating thread if we're
- copying contents to the thread. Wait until the end before setting h,
- to allow thread synchronization.
- (cygthread::release): Don't reset ev here. Rely on that happening the next
- time the thread is activated.
- * pinfo.h (commune_process): Rename declaration from _pinfo::commune_process.
- * pinfo.cc (commune_process): Ditto for definition. Modify slightly to allow
- running as a separate cygthread.
- * sigproc.cc (child_info::sync): Always wait for both subproc_ready and
- any hProcess if we have a cygwin parent.
- (talktome): Change argument to be a pointer to siginfo_t. Contiguously
- allocate whole siginfo_t structure + any needed extra for eventual passing
- to commune_process thread.
- (wait_sig): Accommodate change in talktome argument.
-
- * pipe.cc (fhandler_pipe::fixup_after_exec): Remove debugging.
-
-2005-10-17 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc: Never load wsock32.dll. Load all wsock32 function
- from ws2_32. Rearrange symbol order accordingly. None of the ws2_32
- functions is optional right now.
- (wsadata): Move from net.cc here. Define NO_COPY.
- (wsock_init): Drop unused symbols ws2_32_handle and wsock32_handle.
- (load_wsock32): Remove.
- (WSACleanup): Remove.
- * fhandler_socket.cc: Drop Winsock 1 accommodations throughout.
- (fhandler_socket::readv): Accommodate new POSIX style struct msghdr.
- (fhandler_socket::writev): Ditto.
- (fhandler_socket::recvmsg): Ditto. Handle "old" applications using
- former struct msghdr correctly.
- * net.cc: Drop Winsock 1 accommodations throughout.
- (wsadata): Move definition to autoload.cc.
- (set_socket_inheritance): Remove.
- (convert_ws1_ip_optname): New static function to convert Winsock1
- IPPROTO_IP option values into Winsock2 IPPROTO_IP option values.
- (cygwin_setsockopt): Remove wrong and incomplete cleartext printing
- of optname. For "old" applications, convert optname from Winsock1
- to Winsock2 values before using them. Add comment to describe the
- IP_TOS weirdness on W2K and above.
- (cygwin_getsockopt): Remove wrong and incomplete cleartext printing
- of optname. For "old" applications, convert optname from Winsock1
- to Winsock2 values before using them.
- * select.cc (start_thread_socket): Forget about winsock2_active.
- * winsup.h (wsock32_handle): Remove declaration.
- (ws2_32_handle): Ditto.
- (netapi32_handle): Ditto.
- (wsadata): Ditto.
- (winsock2_active): Remove definition.
- * include/cygwin/socket.h: Change formatting slightly.
- (socklen_t): Move definition up in file.
- (struct msghdr): Convert to POSIX style.
- (struct cmsghdr): New type.
- (CMSG_ALIGN): New macro.
- (CMSG_LEN): Ditto.
- (CMSG_SPACE): Ditto.
- (CMSG_FIRSTHDR): Ditto.
- (CMSG_NXTHDR): Ditto.
- (CMSG_DATA): Ditto.
- (SCM_RIGHTS): Ditto.
- (struct OLD_msghdr): Define old msghdr structure for Cygwin internal
- purposes.
- (MSG_TRUNC): New macro.
- (MSG_CTRUNC): Ditto.
- (IP_OPTIONS): Redefine IPPROTO_IP option values to Winsock2 values.
- Keep Winsock1 values for Cygwin internal purposes.
- * include/cygwin/version.h: Bump API minor version.
- (CYGWIN_VERSION_CHECK_FOR_USING_ANCIENT_MSGHDR): Define to check for
- applications using old struct msghdr.
- (CYGWIN_VERSION_CHECK_FOR_USING_WINSOCK1_VALUES): Define to check for
- applications using old Winsock1 IPPROTO_IP values.
-
-2005-10-13 David Rothenberger <daveroth@acm.org>
- Christopher Faylor <cgf@timesys.com>
-
- * Makefile.in (MKDIRP): Just use raw $(INSTALL) rather than
- $(INSTALL_DATA). Create directories with 755 permissions.
-
-2005-10-12 Christopher Faylor <cgf@timesys.com>
-
- * dir.cc (mkdir): Abandon use of PC_WRITABLE.
- (rmdir): Ditto.
- * path.h (PC_WRITABLE): Delete.
- * path.cc (path_conv::check): Remove PC_WRITABLE accommodations.
- Revisit later.
-
-2005-10-12 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::rmdir): Convert an
- ERROR_INVALID_FUNCTION into an ERROR_FILE_NOT_FOUND. Add comment
- to explain why.
-
-2005-10-11 Christopher Faylor <cgf@timesys.com>
-
- * Makefile.in: Make sure that directories are created prior to copying
- to them.
-
-2005-10-11 Christopher Faylor <cgf@timesys.com>
-
- * net.cc (cygwin_gethostbyname): Remove debugging.
-
-2005-10-11 Corinna Vinschen <corinna@vinschen.de>
-
- * syslog.cc (try_connect_syslogd): Add priority parameter. Use writev
- to add the priority to the message in a syslog conformant way.
- (vsyslog): If facility isn't set in the priority, use default facility
- as given in call to openlog. Fix agressive use of spaces in syslog
- output. Call try_connect_syslogd with priority parameter.
-
-2005-10-11 Christopher Faylor <cgf@timesys.com>
-
- * (symlink_info::set_error): Change to return bool if input error
- should be ignored.
- (symlink_info::check): Treat path as a normal file if set_error returns
- false.
-
-2005-10-03 Christopher Faylor <cgf@timesys.com>
-
- * cygheap.h (class process_lock): New class.
- * dtable.h (class dtable): Add class process_lock as a friend.
- * dcrt0.cc (get_exit_lock): Delete.
- (do_exit): Use process_lock class instead of get_exit_lock.
- * exceptions.cc (signal_exit): Ditto.
- * pinfo.cc (pinfo::exit): Ditto.
- (_pinfo::commune_process): Set process lock around this whole function.
- (_pinfo::commune_request): Use process_lock rather than myself.lock.
- * pinfo.h (pinfo::_lock): Delete.
- (pinfo::initialize_lock): Delete.
- (pinfo::lock): Delete.
- (pinfo::unlock): Delete.
- * winsup.h (get_exit_lock): Delete declaration.
-
-2005-10-03 Corinna Vinschen <corinna@vinschen.de>
-
- * uname.cc (uname): Disable use of GetNativeSystemInfo.
-
-2005-10-01 Christopher Faylor <cgf@timesys.com>
-
- * dcrt0.cc (get_exit_lock): Use myself.lock rather than exit_lock.
- * exceptions.cc (exit_lock): Delete.
- (events_init): Don't init exit_lock.
- * (_pinfo::commune_process): Add per-PICOM debugging.
- * sigproc.cc (talktome): Add some temporary debugging statements.
-
- * fhandler_proc.cc (format_proc_cpuinfo): Cosmetic change.
- (format_proc_partitions): Ditto.
- * syscalls.cc (locked_append): Ditto.
-
-2005-09-30 Christopher Faylor <cgf@timesys.com>
-
- * dcrt0.cc (do_exit): Don't set ES_SET_MUTO here. Call get_exit_lock()
- instead.
- (get_exit_lock): New function. Grabs the lock and sets initial
- exit_state.
- * exceptions.cc (try_to_debug): Use low_priority_sleep.
- (sigpacket::process): Avoid handler if this is an exec stub.
- (signal_exit): Use get_exit_lock rather than manipulating the exit_lock
- critical section directly.
- * pinfo.cc (pinfo::exit): Ditto.
- * winsup.h (get_exit_lock): Declare.
- (exit_lock): Delete declaration.
-
-2005-09-30 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc: Change calls to pc.set_attributes into
- calls to pc.file_attributes throughout.
- * path.h (class path_conv): Remove superfluous set_attributes method.
-
-2005-09-30 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_floppy.cc (fhandler_dev_floppy::get_drive_info): Use
- fhandler method to access major device number. Add comment to
- explain floppy weirdness.
-
-2005-09-30 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_base::fstat_by_handle): Also use
- attributes stored in this->pc if call to GetFileInformationByHandle
- failed.
-
-2005-09-30 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_base::fstat_by_handle): Only write
- attributes if call to GetFileInformationByHandle was successful.
-
-2005-09-29 Christopher Faylor <cgf@timesys.com>
-
- * fork.cc (frok::parent): Simplify error messages. Don't issue an
- error when child.remember fails.
- (fork): When appropriate, build up an error message from grouped.error.
-
-2005-09-29 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_floppy.cc (fhandler_dev_floppy::get_drive_info): Don't call
- EX ioctls on floppy drives.
-
-2005-09-29 Corinna Vinschen <corinna@vinschen.de>
-
- * dir.cc (mkdir): Check for trailing /. or /.. component.
- (rmdir): Ditto.
- * path.cc (has_dot_last_component): New function.
- * path.h (has_dot_last_component): Add declaration.
-
-2005-09-29 Corinna Vinschen <corinna@vinschen.de>
-
- * crt0.cc: Remove PPC considerations.
- (WinMainCRTStartup): Add symbol as alias to mainCRTStartup.
-
-2005-09-28 Christopher Faylor <cgf@timesys.com>
-
- Change name from commune_recv to commune_process throughout.
- Change name from commune_send to commune_request throughout.
- * pinfo.h (PICOM_EXTRASTR): New flag.
- (PICOM_FIFO): Define with new flag.
- (_pinfo::hello_pid): Delete.
- (_pinfo::tothem): Delete.
- (_pinfo::fromthem): Delete.
- (_pinfo::commune_process): Rename from commune_recv. Add a siginfo_t
- argument to declaration.
- (_pinfo::commune_request): Rename from commune_send. Change DWORD to
- __uint32_t in declaration.
- * pinfo.cc (_pinfo::commune_process): Rename from commune_recv. Add
- siginfo_t argument. Use information from argument rather than reading
- from another pipe. Synchronize with other process's commune event.
- (_pinfo::commune_request): Rename from commune_send. Change DWORD to
- __uint32 in argument. Fill out information in new siginfo_t element
- and rely on extended operation of sig_send rather than trying to deal
- with synchronization issues here. Use process handle and read pipe
- information filled out by sig_send to gather information from the other
- process.
- * sigproc.cc (sig_send): Take special action if "communing" to ensure
- synchronization with the other process and to return information about
- the other process to the caller.
- (talktome): Accept a siginfo_t and handle arguments. Read additional
- information from the signal pipe when _si_commune._si_code has the
- PICOM_EXTRASTR flag set.
- (wait_sig): Pass the transmitted siginfo_t struct and the pipe handle
- to talktome. Close pipe read handle as soon as possible after we
- detect that we're exiting.
-
-2005-09-28 Christopher Faylor <cgf@timesys.com>
-
- * hookapi.cc (hook_or_detect_cygwin): Correct inverted test for whether
- to allocate a buffer by always allocating a buffer.
-
-2005-09-28 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (class fhandler_dev_raw): Delete current_position and
- eof_detected status flag. Delete is_eom and is_eof methods.
- Move drive_size, bytes_per_sector, eom_detected status flag, as well
- as the methods read_file, write_file, raw_read and raw_write to ...
- (class fhandler_dev_floppy): ... here. Remove is_eom and is_eof
- methods. Add dup method.
- * fhandler_floppy.cc (IS_EOM): New macro.
- (fhandler_dev_floppy::is_eom): Remove.
- (fhandler_dev_floppy::is_eof): Remove.
- (fhandler_dev_floppy::fhandler_dev_floppy): Initialize status flags.
- (fhandler_dev_floppy::get_drive_info): Only call EX functions on
- systems supporting them and stop suffering strange delays.
- (fhandler_dev_floppy::read_file): Move here, drop setting
- current_position.
- (fhandler_dev_floppy::write_file): Move here, drop setting
- current_position.
- (fhandler_dev_floppy::open): Rearrange comment.
- (fhandler_dev_floppy::dup): New method.
- (fhandler_dev_floppy::get_current_position): New inline method. Use
- instead of former current_position were appropriate.
- (fhandler_dev_floppy::raw_read): Move here. Drop EOF handling.
- (fhandler_dev_floppy::raw_write): Move here. Drop EOF handling.
- (fhandler_dev_floppy::lseek): Remove useless conditions. Convert
- sector_aligned_offset to LARGE_INTEGER to improve SetFilePointer call.
- (fhandler_dev_floppy::ioctl): Move blocksize check in RDSETBLK case
- to here.
- * fhandler_raw.cc (fhandler_dev_raw::is_eom): Remove.
- (fhandler_dev_raw::is_eof): Remove.
- (fhandler_dev_raw::write_file): Remove.
- (fhandler_dev_raw::read_file): Remove.
- (fhandler_dev_raw::raw_read): Remove.
- (fhandler_dev_raw::raw_write): Remove.
- (fhandler_dev_raw::dup): Drop copying removed members.
- (fhandler_dev_raw::ioctl): Drop blocksize testing.
- * wincap.h: Implement has_disk_ex_ioctls throughout.
- * wincap.cc: Ditto.
- (wincap_vista): Preliminary wincaps for Windows Vista/Longhorn.
- (wincapc::init): Add Vista/Longhorn handling.
-
-2005-09-28 Christopher Faylor <cgf@timesys.com>
-
- * dcrt0.cc (getstack): New function.
- (alloc_stack): Use tls stuff for stack info rather than calling
- VirtualQuery.
- (dll_crt0_0): Initialize _impure_ptr stuff much earlier. Move
- init_console_handler here.
- * fork.cc (class frok): New class renamed from local fork() struct.
- (stack_base): Change argument type. Use tls stuff to determine stack
- info rather than calling VirtualQuery.
- (frok::child): Rename from fork_child. Eliminate now unneeded
- arguments.
- (frok::parent): Rename from fork_parent and ditto. Set error and errno
- as appropriate. Fixup impersonation in cleanup, if needed. Try harder
- to set errno appropriately.
- (fork): Define "grouped" as a frok type. Deal with errors from
- fork_parent here.
- * init.cc (dll_entry): Remove init_console_handler call.
-
-2005-09-28 Christopher Faylor <cgf@timesys.com>
-
- * pinfo.cc (_pinfo::dup_proc_pipe): Ignore error if the child process
- has just gone away.
-
-2005-09-27 Christopher Faylor <cgf@timesys.com>
-
- * init.cc (prime_threads): Make this static, as it should be.
- (dll_entry): Apply cosmetic changes to define closer to the way MSDN
- suggests.
-
-2005-09-27 Corinna Vinschen <corinna@vinschen.de>
-
- * pthread.cc (mangle_sem_name): Use cygheap->shared_prefix instead
- of fiddling with wincap.has_terminal_services manually.
-
-2005-09-27 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.cc (cygheap_init): Add GLOBAL_PRIV to hProcToken explicitely
- since hProcImpToken isn't initialized here.
- * shared.cc (open_shared): Always print mapname instead of name in
- debug output.
-
-2005-09-27 Christopher Faylor <cgf@timesys.com>
-
- * strace.cc (strace::vsprntf): Avoid printing a zero pid.
-
-2005-09-27 Corinna Vinschen <corinna@vinschen.de>
-
- * init.cc (dll_entry): Call IsWow64Process with GetCurrentProcess
- as process handle since hMainProc isn't initialized here.
-
-2005-09-27 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_floppy.cc (fhandler_dev_floppy::get_drive_info): Always
- try IOCTL_DISK_GET_DRIVE_GEOMETRY_EX and
- IOCTL_DISK_GET_PARTITION_INFO_EX ioctls first, to allow access to GPT
- partitioned disks. Fall back to old non-EX ioctls otherwise.
- Add comment to explain NT4 weirdness.
-
-2005-09-26 Corinna Vinschen <corinna@vinschen.de>
-
- * errno.cc (errmap): Map ERROR_SEEK and ERROR_SECTOR_NOT_FOUND.
-
-2005-09-26 Christopher Faylor <cgf@timesys.com>
-
- * exceptions.cc (_cygtls::call_signal_handler): Minor cleanup.
-
-2005-09-26 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (class fhandler_dev_raw): Add drive information members
- drive_size, current_position and bytes_per_sector.
- (fhandler_dev_floppy::get_drive_info): Declare.
- * fhandler_floppy.cc (fhandler_dev_floppy::is_eom): Define ERROR_SEEK
- and ERROR_SECTOR_NOT_FOUND as end-of-medium conditions.
- (fhandler_dev_floppy::get_drive_info): New method to have one function
- retrieving drive info.
- (fhandler_dev_floppy::open): Call get_drive_info to get drive
- information right from the start.
- (fhandler_dev_floppy::lseek): Use and set drive information members.
- Especially keep track of current_position.
- (fhandler_dev_floppy::ioctl): Ditto.
- * fhandler_raw.cc (fhandler_dev_raw::write_file): Keep track of
- current_position.
- (fhandler_dev_raw::read_file): Ditto.
- (fhandler_dev_raw::raw_read): Never try to read beyond end-of-medium.
- (fhandler_dev_raw::dup): Handle new drive information members.
-
-2005-09-26 Christopher Faylor <cgf@timesys.com>
-
- * exceptions.cc (handle_exceptions): Just set si_code to SI_KERNEL
- first and let it be overridden.
-
-2005-09-26 Yitzchak Scott-Thoennes <sthoenna@efn.org>
-
- * exceptions.cc (_cygtls::call_signal_handler): Call signal handler
- with extra siginfo_t * and void * parameters when SA_SIGINFO flag is
- set.
- * signal.cc (signal): Clear SA_SIGINFO flag.
- (sigqueue): Fix incorrect setting of si_code.
- * sigproc.cc (signal_fixup_after_exec): Clear SA_SIGINFO flag when
- setting handler to SIG_DFL.
-
-2005-09-26 Christopher Faylor <cgf@timesys.com>
-
- * pinfo.cc (proc_waiter): Properly fill out si_code as according to SUSv3.
-
-2005-09-26 Christopher Faylor <cgf@timesys.com>
-
- * exceptions.cc (handle_exceptions): Properly fill out si_code as
- according to SUSv3.
-
-2005-09-25 Christopher Faylor <cgf@timesys.com>
-
- * sigproc.cc (wait_sig): Cosmetic change.
- * pinfo.cc (pinfo::exit): Don't explicitly remove myself since some
- other thread may still be using it.
-
-2005-09-24 Christopher Faylor <cgf@timesys.com>
-
- * sigproc.cc (sigproc_terminate): More reversion of
- always-exit-from-sigthread change.
-
-2005-09-23 Christopher Faylor <cgf@timesys.com>
-
- * shared.cc (open_shared): Add crucial bit of debugging info.
-
-2005-09-23 Christopher Faylor <cgf@timesys.com>
-
- Semi-reversion of always-exit-from-sigthread change of 2005-09-15.
- * exceptions.cc (sigpacket::process): Eliminate return after call to
- reinstated noreturn function.
- (signal_exit): Allow function to exit when a captive process has been
- terminated.
- * pinfo.cc (pinfo::exit): Enter exit_lock here. Once again exit here
- under control of exit_lock.
- * sigproc.cc (sig_send): Don't wait for completion if process is exiting.
- Remove special __SIGEXIT accommodations.
- (wait_sig): Just exit the thread when a __SIGEXIT has been detected.
- Don't exit the process.
-
-2005-09-23 Christopher Faylor <cgf@timesys.com>
-
- * net.cc (cygwin_gethostbyname): Remove debugging cruft.
-
-2005-09-23 Christopher Faylor <cgf@timesys.com>
-
- * pinfo.cc (pinfo::exit): Call ExitProcess if called from signal
- thread.
-
-2005-09-23 Christopher Faylor <cgf@timesys.com>
-
- * pinfo.cc (pinfo::exit): Eliminate use of _my_tls.thread_handle.
- * tlsoffsets.h: Regenerate.
-
-2005-09-23 Christopher Faylor <cgf@timesys.com>
-
- * cygtls.h (struct _cygtls::thread_handle): Remove/revert.
- * sigproc.h (struct sipacket::thread_handle): Put thread_handle here.
- * sigproc.cc (sigproc_terminate): Move setting of thread_handle...
- (sig_send): ...to here. Put it in packet being sent. Only close
- pack.wakeup when we're waiting for completion.
- (wait_sig): Use thread_handle directly from received packet.
-
-2005-09-22 Christopher Faylor <cgf@timesys.com>
-
- * cygheap.cc (cygheap_fixup_in_child): It's not just for exec.
- * cygtls.h (struct _cygtls::thread_handle): New field.
- * dcrt0.cc (exit_lock): Remove declaration.
- * winsup.h (exit_lock): Add declaration.
- * exceptions.cc (sigpacket::process): Properly return after
- signal_exit.
- * pinfo.cc (pinfo::exit): Only exit the process if
- _my_tls.thread_handle has not been filled out -- which should be an
- impossible event.
- * sigproc.cc (sigproc_terminate): Fillout _my_tls.thread_handle to
- provide something for wait_sig to wait for. Use the siginfo_t version
- of sig_send and fill out the tls argument with _my_tls.
- (wait_sig): Wait for the thread specified in pack.tls or (for now)
- complain bitterly if it doesn't exit.
- * tlsoffsets.h: Regenerate.
-
-2005-09-22 Christopher Faylor <cgf@timesys.com>
-
- * pinfo.cc (set_myself): Call strace.hello unconditionally when
- DEBUGGING.
- (pinfo::init): Sleep and issue debugging output before looping when a
- PID_EXITED is found.
-
-2005-09-22 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_base::fstat_helper): Fix copy/paste
- bug.
-
-2005-09-22 Christopher Faylor <cgf@timesys.com>
-
- * strace.cc (strace::vsprntf): Avoid accessing myself->pid if !myself.
-
-2005-09-22 Christopher Faylor <cgf@timesys.com>
-
- * include/sys/strace.h (_STRACE_ON): Remove semicolon from definition.
- (_STRACE_OFF): Remove semicolon from definition.
-
-2005-09-22 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (fhandler_base::fstat_helper): Declare with additional
- file attributes argument.
- * fhandler_disk_file.cc (fhandler_base::fstat_by_handle): Use
- file attributes evaluated from NtQueryFileInformation or
- FileInformationByHandle in call to fstat_helper.
- Set pc.fileattr from just evaluated file attributes here.
- (fhandler_base::fstat_by_name): Use file attributes evaluated from
- FindFileFirst or default attribute in call to fstat_helper.
- Set pc.fileattr from just evaluated file attributes here.
- (fhandler_base::fstat_helper): Use file attributes given as argument,
- not file attributes stored in this fhandler, since this information
- is potentially wrong. Add comment to explain this.
- * path.h (has_attribute): New global inline function.
- (path_conv::set_attributes): New method to change fileattr.
-
-2005-09-21 Christopher Faylor <cgf@timesys.com>
-
- * cygthread.cc (cygthread::operator new): Just use getenv() to look for
- CYGWIN_FREERANGE_NOCHECK since the Windows environment may be truncated
- by being previously execed.
-
-2005-09-20 Christopher Faylor <cgf@timesys.com>
-
- * spawn.cc (av::fixup): Just blindly run any file if it has a .bat or
- .cmd extension.
-
-2005-09-19 Christopher Faylor <cgf@timesys.com>
-
- * dcrt0.cc (do_exit): Only call sigproc_terminate from one location --
- pinfo::exit.
- * pinfo.cc (pinfo::exit): Move sigproc_terminate later so that signals
- can be processed while waiting for hExeced child.
- (pinfo::maybe_set_exit_code_from_windows): Set exit code from sigExeced
- if it is non-zero. Set exit_state to ES_EXEC_EXIT prior to waiting for
- captive process exit code.
- * exceptions.cc (sigExeced): New global variable.
- (signal_exit): Remove noreturn attribute from declaration.
- (signal_exit): Just terminate captive process and return if hExeced on
- the theory that the exit will be subsequently handled in the main
- thread.
- * sigproc.cc (sigproc_terminate): Eliminate test for
- ES_SIGPROCTERMINATE and use ES_FINAL instead.
- (sig_send): Use no_signals_available instead of duplicate test.
- * winsup.h (ES_EXEC_EXIT): New enum.
- (ES_SIGPROCTERMINATE): Delete.
-
-2005-09-19 Christopher Faylor <cgf@timesys.com>
-
- * sigproc.cc (talktome): Take siginfo_t argument. Don't scan all pids
- trying to find one that's talking to me. Just use the pid from
- siginfo_t.
- (wait_pid): Pass siginfo_t argument to talktome.
-
-2005-09-17 Christopher Faylor <cgf@timesys.com>
-
- * pipe.cc (fhandler_pipe::open): Use 'cfree' to free buffer since it is
- now allocated by cmalloc.
-
-2005-09-17 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (cygwin_inet_ntop): Change len argument to socklen_t to
- follow SUSv3.
- * include/arpa/inet.h (inet_ntop): Ditto.
- * include/cygwin/in.h: Include cygwin/socket.h to get socklen_t.
-
-2005-09-16 Christopher Faylor <cgf@timesys.com>
-
- * environ.cc (build_env): Use "kilo"bytes not "mega"bytes. Return
- immediately on error.
- * spawn.cc (spawn_guts): Set return value to -1 on error from
- build_env.
-
-2005-09-16 Christopher Faylor <cgf@timesys.com>
-
- * environ.cc (build_env): Clear envblock and return NULL on attempt to
- use env var > 32K.
- * spawn.cc (spawn_guts): Set E2BIG if build_env detects an error.
-
-2005-09-16 Christopher Faylor <cgf@timesys.com>
-
- * environ.cc (environ_init): Protect with a 'myfault' in case
- GetEnvironmentStrings misbehaves.
-
-2005-09-16 Christopher Faylor <cgf@timesys.com>
-
- * environ.cc (environ_init): Add debugging output with value returned
- from GetEnvironmentStrings.
-
-2005-09-16 Christopher Faylor <cgf@timesys.com>
-
- * environ.cc (environ_init): Issue an error if GetEnvironmentStrings
- fails and return.
-
-2005-09-15 Christopher Faylor <cgf@timesys.com>
-
- * pinfo.h (EXITCODE_SET): Move out of range of Windows error.
- (EXITCODE_NOSET): Ditto.
- * sigproc.cc (no_signals_available): Remove check for hwait_sig. Just
- rely on my_sendsig. Pass in an argument controlling when it is
- appropriate to test EXITCODE_SET.
- (proc_can_be_signalled): Remove checks for myself since this function
- is never called in that context.
- (sigproc_init): Pre-initialize my_sendsig to non-zero so that
- proc_can_be_signalled will know that we expect to be signalable soon.
- (sig_send): Change debugging output.
-
-2005-09-15 Christopher Faylor <cgf@timesys.com>
-
- * sigproc.cc (no_signals_available): Return true if sending to self
- from the signal thread.
- (wait_sig): Correct so that WaitForSingleObject is called when
- hMainThread is != 0, rather than the reverse.
-
- * cygheap.cc (cygheap_fixup_in_child): Clarify potential error message.
-
- * fork.cc (fork_copy): Cosmetic change.
-
-2005-09-15 Christopher Faylor <cgf@timesys.com>
-
- * sigproc.cc (wait_sig): Reorganize exit case so that ExitProcess is
- always called, since that is the intent of sending a __SIGEXIT. Wait
- forever for main thread to go away since, presumably, the main thread
- told us it was going away.
-
-2005-09-14 Christopher Faylor <cgf@timesys.com>
-
- * spawn.cc (av::fixup): Avoid breaking out of the wrong "loop".
-
-2005-09-14 Christopher Faylor <cgf@timesys.com>
-
- * hookapi.cc (hook_or_detect_cygwin): Simplify very slightly.
- * spawn.cc (av::fixup): Guard against problems reading an executable
- which does not match Microsoft's documentation about PE format.
-
-2005-09-14 Christopher Faylor <cgf@timesys.com>
-
- * spawn.cc (av::error): Eliminate.
- (av::av): Remove reference to error.
- (av::replace0_maybe): Ditto.
- (av::dup_maybe): Ditto.
- (av::dup_all): Ditto.
- (av::unshift): Ditto.
- (spawn_guts): On a fault, return E2BIG only if ENOMEM has been set.
- Otherwise return EFAULT.
-
-2005-09-14 Christopher Faylor <cgf@timesys.com>
-
- * cygtls.h (san): New structure.
- (cygtls::andreas): New element. Replaces _myfault and _myfault_errno.
- (cygtls::fault_guarded): Use andreas.
- (cygtls::return_from_fault): Ditto.
- (cygtls::setup_fault): Add a parameter denoting where to store old
- fault handler, if any and use it to "stack" faults.
- (cygtls::reset_fault): Restore fault from parameter.
- (myfault::sebastian): New variable.
- (myfault::~myfault): Pass sebastian to reset_fault.
- (myfault::myfault): Store old fault values in sebastian.
-
-2005-09-14 Christopher Faylor <cgf@timesys.com>
-
- * heap.cc (heap_init): Revert 2005-09-11 patch as it seems to
- inexplicably cause problems with emacs.
-
-2005-09-14 Christopher Faylor <cgf@timesys.com>
-
- Remove some more unneeded 'return;'s throughout.
-
-2005-09-14 Christopher Faylor <cgf@timesys.com>
-
- * sigproc.h: Protect declaration so that it only happens when
- __INSIDE_CYGWIN__.
-
-2005-09-14 Christopher Faylor <cgf@timesys.com>
-
- * exceptions.cc (sigtid): Remove declaration.
- (handle_exceptions): Use _sig_tls rather than sigtid to determine if
- this is the signal thread.
- (set_signal_mask): Ditto for conditionalized CGF code.
- * pinfo.cc (pinfo::exit): Exit the thread if we forcefully terminated
- the main thread.
- * sigproc.cc (sigtid): Delete.
- (_sig_tls): Define.
- (sig_clear): Use _sig_tls rather than sigtid to determine if this is
- the signal thread.
- (sig_dispatch_pending): Ditto.
- (wait_sig): Set _sig_tls here.
-
-2005-09-13 Christopher Faylor <cgf@timesys.com>
-
- * dcrt0.cc (do_exit): Move sigproc_terminate call later since signal
- handling was still needed for subsequent stuff. Call sigproc_terminate
- with new exit_state value.
- * pinfo.cc (pinfo::exit): Call sigproc_terminate with new exit_state
- value.
- * sigproc.cc (proc_terminate): Remove unnecessary (void) parameter.
- (sigproc_terminate): Ditto. Add new argument to accept exit state to
- be set.
- (wait_sig): Reorganize __SIGEXIT handling. Add more debugging output.
- * winsup.h (sigproc_terminate): Declare with new exit_state argument.
- (exit_states): Reorganize to reflect new exit ordering of
- sigproc_terminate.
-
-2005-09-13 Christopher Faylor <cgf@timesys.com>
-
- * dcrt0.cc (do_exit): Rely on sigproc_terminate to set exit_state
- appropriately.
- * pinfo.cc (pinfo::exit): Always call sigproc_terminate here. Rely on
- sigproc_terminate to signal signal thread to handle eventual process
- exit.
- * sigproc.cc (no_signals_available): Change criteria for determining if
- this process can handle signals to itself.
- (my_sendsig): New variable. Copy of my sendsig handle.
- (proc_can_be_signalled): Don't send signals if exit code is set.
- (sigproc_terminate): Use and set exit_state appropriately to determine
- when to do anything. Send __SIGEXIT to self to control process exit.
- (sig_send): Use my_sendsig for sending signals. Don't call
- proc_can_be_signalled for myself since the criteria is now different
- for sending signals to myself.
- (wait_sig): Copy myself->sendsig to my_sendsig for future use. Exit
- signal loop when __SIGEXIT is received. Wait for main thread to exit
- and use its exit status to actually exit process.
- * sigproc.h (__SIGEXIT): New enum.
-
-2005-09-13 Christopher Faylor <cgf@timesys.com>
-
- * dcrt0.cc (alloc_stack): Eliminate superfluous "return;".
- * debug.cc (add_handle): Ditto.
- * devices.in (device::parse): Ditto.
- * dtable.cc (dtable::vfork_parent_restore): Ditto.
- (dtable::vfork_child_fixup): Ditto.
- * environ.cc (parse_options): Ditto.
- * errno.cc (seterrno_from_win_error): Ditto.
- * exceptions.cc (sig_handle_tty_stop): Ditto.
- (set_signal_mask): Ditto.
- * fhandler.cc (fhandler_base::read): Ditto.
- (fhandler_base::operator delete): Ditto.
- (fhandler_base::seekdir): Ditto.
- (fhandler_base::rewinddir): Ditto.
- * fhandler_console.cc (fhandler_console::read): Ditto.
- (fhandler_console::fixup_after_exec): Ditto.
- * sigproc.cc (sigproc_init): Ditto.
- (sigproc_terminate): Ditto.
-
- * devices.cc: Regenerate.
-
-2005-09-13 Christopher Faylor <cgf@timesys.com>
-
- * sigproc.cc (wait_sig): Be more defensive about detecting when we're
- exiting.
-
-2005-09-12 Christopher Faylor <cgf@timesys.com>
-
- * cygthread.cc (cygthread::cygthread): Add more info to fatal error.
-
- * fhandler_disk_file.cc (fhandler_disk_file::readdir): Temporarily
- remove insertion of /dev into root directory.
- * path.cc (path_conv::check): Ditto.
-
-2005-09-11 Christopher Faylor <cgf@timesys.com>
-
- * heap.cc (heap_init): Allocate heap from top down as a hedge against
- subsequent ERROR_INVALID_ADDRESS in forked processes when CTRL-C is
- pressed.
-
-2005-09-09 Christopher Faylor <cgf@timesys.com>
-
- * heap.cc (heap_init): Be slightly more aggressive when trying to
- allocate heap. Change fatal error message to avoid confusion with
- cygheap.
-
- * spawn.cc (linebuf::finish): New function.
- (linebuf::add): Cosmetic change.
- (spawn_guts): Only avoid building windows command line if the program
- being executed was actually mounted with -X. Don't return E2BIG if we
- hit the 32K size and we're executing a detected cygwin program. Just
- silently truncate the windows command line, instead.
-
-2005-09-08 Christopher Faylor <cgf@timesys.com>
-
- * fhandler_serial.cc (fhandler_serial::tcgetattr): Just zero c_cflag
- here rather than clearing CBAUD after the fact.
- * termios.cc (tcgetattr): Revert previous change.
-
-2005-09-08 Christopher Faylor <cgf@timesys.com>
-
- * fhandler_serial.cc (fhandler_serial::ioctl): Always return 0 for
- window size.
- * termios.cc (tcgetattr): Clear out baud part of c_cflag since it is
- always ignored.
-
-2005-09-08 Corinna Vinschen <corinna@vinschen.de>
-
- * exceptions.cc (ctrl_c_handler): Disable any special CTRL_LOGOFF_EVENT
- handling and add longish comment about the reasons.
-
-2005-09-07 Christopher Faylor <cgf@timesys.com>
-
- * hookapi.cc (rvadelta): Change argument to DWORD to eliminate a
- compiler warning.
-
- * path.h (path_conv::set_cygexec): New function.
- * spawn.cc (av::iscygwin): Eliminate.
- (av::av): Don't initialize iscygwin.
- (spawn_guts): Just use real_path.iscygexec for all tests.
- (av::fixup): Short circuit test if .exe extension and known cygexec.
- Set cygexec flag appropriately if we find that program uses cygwin1.dll.
-
-2005-09-06 Christopher Faylor <cgf@timesys.com>
-
- * dcrt0.cc (initial_env): Don't attempt stracing if dynamically loaded.
- (dll_crt0_0): Move console initialization earlier.
- * init.cc (dll_entry): Move console initialization here.
- * exceptions.cc (init_console_handler): Fully remove any old console
- handler.
- (handle_sigsuspend): Make cancelable when called from non-main thread.
-
- * spawn.cc (spawn_guts): Don't fill out windows argv if we've deduced
- that this is a cygwin-using program.
- (av::fixup): Always check executables to see if they are using
- cygwin1.dll. Don't consider .com files to be scripts.
- * hookapi.cc (rvadelta): New function.
- (PEHeaderFromHModule): Simplify slightly.
- (hook_or_detect_cygwin): Use passed in name argument for "HMODULE"
- rather than incorrectly reading current program. Calculate delta
- needed to read image data and file names if this isn't a real
- "HMODULE".
-
-2005-09-06 Corinna Vinschen <corinna@vinschen.de>
-
- * thread.h: Revert patch from 2005-09-05.
- * thread.cc (pthread_mutex::can_be_unlocked): Return true also if
- mutex is owned by MUTEX_OWNER_ANONYMOUS.
-
-2005-09-05 Christopher Faylor <cgf@timesys.com>
-
- * cygheap.cc (cygheap_init): Eliminate debugging #if.
-
- * fork.cc (fork_parent): Don't issue errors if "somebody" has set the
- PID_EXITED flag on a child. Don't close process handle if it has
- potentially already been closed.
- * pinfo.cc (winpids::add): Eliminate PID_ALLPIDS handling which was
- obsoleted by previous changes.
-
- * spawn.cc (av::fixup): Do win16 detection for .com files. Make sure
- that buffer has been unmapped in all cases.
-
-2005-09-05 Corinna Vinschen <corinna@vinschen.de>
-
- * thread.h (pthread_mutex::get_pthread_self): Remove.
- (pthread_mutex::lock): Use ::pthread_self as self parameter.
- (pthread_mutex::trylock): Ditto.
- (pthread_mutex::unlock): Ditto.
- (pthread_mutex::destroy): Ditto.
-
-2005-09-02 Dave Korn <dave.korn@artimi.com>
-
- * Makefile.in (CXXFLAGS): Use 'override' to correctly set flags to
- generate dependencies when invoked from top-level make.
-
-2005-08-28 Christopher Faylor <cgf@timesys.com>
-
- * exceptions.cc (set_process_mask_delta): Conditionalize debugging
- output.
- * sigproc.cc (proc_subproc): Make strace output a little more verbose.
-
-2005-08-28 Christopher Faylor <cgf@timesys.com>
-
- * cygtls.h (__ljfault): Declare.
- (_cygtls::return_from_fault): Use __ljfault.
- * exceptions.cc (set_signal_mask): Revert previous checkin.
- * gendef (__sjfault): Split out into a separate function which doesn't
- bother with any special signal locking.
- (_ljfault): Return from a __sjfault without bothering with signals.
-
-2005-08-28 Christopher Faylor <cgf@timesys.com>
-
- * cygtls.h (_local_storage::strerror_buf): Allocate more space.
- * errno.cc (strerror_worker): New function, adapted from strerror.
- (strerror): Use strerror_worker.
- * tlsoffsets.h: Regenerate.
-
- * exceptions.cc (set_signal_mask): Minimize time during which mask_sync
- is held.
-
-2005-08-28 Christopher Faylor <cgf@timesys.com>
-
- * cygwin.din: Correct readdir_r typo.
-
-2005-08-27 Bas van Gompel <cygwin-patch.buzz@bavag.tmfweb.nl>
-
- * dir.cc (readdir_r): Invert sense on error test.
-
-2005-08-25 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (normalize_posix_path): Keep two leading slashes
- intact throughout.
- (normalize_win32_path): Revert to only checking for slash.
- (realpath): Convert drive letters to cygdrive paths before
- doing anything else.
- * shared_info.h (mount_info::cygdrive_posix_path): Make public.
-
-2005-08-25 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (realpath): Drop call to mount_info::conv_to_posix_path
- in favor of calling path_conv with PC_POSIX flag. Align error
- handling closer to POSIX. As on Linux, return user space allocated
- memory if second parameter is NULL.
-
-2005-08-25 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (normalize_win32_path): Honor network paths. Fold more
- than two leading dir separators into one. Check for dir separator
- instead of just slashes to handle incoming Win32 paths correctly.
-
-2005-08-25 Christopher Faylor <cgf@timesys.com>
-
- * errno.cc (errmap): Translate ERROR_NO_MORE_ITEMS to ENMFILE.
-
-2005-08-24 Christopher Faylor <cgf@timesys.com>
-
- * exceptions.cc (handle_sigsuspend): Just sleep forever if called from
- non-main thread.
- (sigpacket:process): Simplify logic which determines when and how a
- signal is masked. Don't trigger sigwait if there is a signal handler.
- * sigproc.cc (wait_sig): Update comment. Try to process a signal which
- is in the queue if it isn't queued for the target thread (this is still
- not right).
-
-2005-08-24 Christopher Faylor <cgf@timesys.com>
-
- * spawn.cc (perhaps_suffix): Record errno-type error value in third
- argument.
- (find_exec): On error, set errno returned from perhaps_suffix.
- (spawn_guts): Ditto.
-
-2005-08-24 Christopher Faylor <cgf@timesys.com>
-
- * fhandler_virtual.cc (fhandler_virtual::close): Don't free filebuf if
- it's NULL.
- * pinfo.cc (_pinfo::commune_send): Fix test for incorrect number of
- bytes read from pipe.
-
-2005-08-24 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (endusershell): Reset shell_fp to NULL to allow
- subsequent getusershell calls.
-
-2005-08-24 Christopher Faylor <cgf@timesys.com>
-
- * path.cc (path_conv::check): Fill in fileattr for /dev, defaulting to
- directory if /dev doesn't actually exist.
- (win32_device_name): Don't consider FH_DEV to be a device since it's
- really a directory which should go through mount processing.
-
-2005-08-24 Christopher Faylor <cgf@timesys.com>
-
- * cygheap.h (cygheap_types): Add HEAP_COMMUNE.
- * fhandler_proc.cc: Use cygheap rather than user heap for allocation of
- filebuf throughout.
- * fhandler_registry.cc: Ditto.
- * fhandler_virtual.cc: Ditto.
- * fhandler_process.cc: Ditto.
- (get_mem_values): Use malloc/realloc/free rather than new.
- * pinfo.cc (_pinfo::commune_send): Allocate on cygwin heap rather than
- user heap. Avoid calling ReadFile when correct number of characters
- have been read or suffer buffer corruption.
- (_pinfo::fd): Allocate on cygwin heap rather than user heap.
- (_pinfo::fds): Ditto.
- (_pinfo::root): Ditto.
- (_pinfo::cwd): Ditto.
- (_pinfo::cmdline): Ditto.
-
- * devices.h (FH_DEV): New define.
- * devices.in: Detect lone /dev.
- * devices.cc: Regenerate.
- * path.cc (path_conv::check): Treat FH_DEV as a special case.
-
-2005-08-23 Christopher Faylor <cgf@timesys.com>
-
- * sigproc.h (set_signal_mask): Remove default on second parameter and
- make pass by reference.
- * signal.cc (abort): Accommodate change to set_signal_mask.
- * select.cc (pselect): Ditto.
- * exceptions.cc (handle_sigsuspend): Ditto.
- (ctrl_c_handler): Ditto.
- (sighold): Ditto.
- (sigrelse): Ditto.
- (set_process_mask_delta): Ditto.
- (_cygtls::call_signal_handler): Ditto.
-
- * fhandler_disk_file.cc (fhandler_disk_file::readdir): Return ENMFILE
- if __handle is not set. Set __handle to NULL when out of files.
- (fhandler_disk_file::rewinddir): Don't close handle if it's NULL.
- (fhandler_disk_file::closedir): Ditto.
-
-2005-08-22 Christopher Faylor <cgf@timesys.com>
-
- * dir.cc (readdir_worker): Make static. Only add '.' and '..' when
- readdir fails due to ENMFILE.
- * fhandler_disk_file.cc (fhandler_disk_file::readdir): Only close
- handle on error != ENMFILE.
-
-2005-08-22 Corinna Vinschen <corinna@vinschen.de>
-
- * mtinfo.h (mtinfo_drive::error): Fix argument bug in debug_printf call.
-
-2005-08-20 Christopher Faylor <cgf@timesys.com>
-
- * cygerrno.h (geterrno_from_win_error): Change declaration to default
- to using GetLastError and EACCESS.
- * cygwin.din: Export readdir_r.
- * include/cygwin/version.h: Bump API version number to 138.
- * syscalls.cc (readdir_worker): New function, renamed from old
- readdir() function.
- (readdir): Use readdir_worker.
- (readdir_r): New function.
- * fhandler.h (fhandler_base::readdir): Accommodate second argument
- indicating dirent buffer.
- (fhandler_disk_file::readdir): Ditto.
- (fhandler_cygdrive::readdir): Ditto.
- (fhandler_proc::readdir): Ditto.
- (fhandler_netdrive::readdir): Ditto.
- (fhandler_registry::readdir): Ditto.
- (fhandler_process::readdir): Ditto.
- * fhandler.cc (fhandler_base::readdir): Ditto.
- * fhandler_disk_file.cc (fhandler_disk_file::readdir): Ditto.
- * fhandler_cygdrive.cc (fhandler_cygdrive::readdir): Ditto.
- * fhandler_proc.cc (fhandler_proc::readdir): Ditto.
- * fhandler_netdrive.cc (fhandler_netdrive::readdir): Ditto.
- * fhandler_registry.cc (fhandler_registry::readdir): Ditto.
- * fhandler_process.cc (fhandler_process::readdir): Ditto.
- * include/sys/dirent.h (readdir_r): Add declaration.
-
-2005-08-19 Christopher Faylor <cgf@timesys.com>
-
- * fhandler.h (dirent_states): Add dirent_saw_proc.
- * fhandler_disk_file.cc (fhandler_disk_file::readdir): Fill in "proc"
- if it is the root dir and it is missing.
-
-2005-08-19 Christopher Faylor <cgf@timesys.com>
-
- * fhandler.h (dirent_states): Add dirent_isroot, dirent_saw_cygdrive,
- dirent_saw_dev.
- * dir.cc (opendir): Don't zero __flags here. Push that responsibility
- to opendir methods.
- (seekdir): Preserve dirent_isroot in __flags.
- (rewinddir): Ditto.
- * fhandler_disk_file.cc (fhandler_disk_file::opendir): Set
- dirent_isroot appropriately.
- (fhandler_disk_file::readdir): Fill in "cygdrive" and "dev" if it is
- the root dir and they are missing.
- * fhandler_process.cc (fhandler_process::opendir): Set __flags here.
- * fhandler_virtual.cc (fhandler_virtual::opendir): Set __flags here.
-
-2005-08-19 Christopher Faylor <cgf@timesys.com>
-
- * winsup.h (create_pipe): Declare new function.
- (CreatePipe): New define.
- * miscfuncs.cc (create_pipe): Define new function.
-
-2005-08-18 Christopher Faylor <cgf@timesys.com>
-
- * fhandler.h (fhandler_tty_common::lseek): Declare new method.
- (fhandler_tty_slave::lseek): Delete old method.
- (fhandler_tty_master::lseek): Delete old method.
- * fhandler_tty.cc (fhandler_tty_common::lseek): Define new method.
-
-2005-08-18 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::recvfrom): Always initialize
- ret to 0.
- (fhandler_socket::recvmsg): Ditto.
-
-2005-08-18 Corinna Vinschen <corinna@vinschen.de>
-
- * errno.cc (strerror): Check errnum for underflow.
-
-2005-08-17 Christopher Faylor <cgf@timesys.com>
-
- * dcrt0.cc (dll_crt0_1): Tweak debugging stuff.
-
-2005-08-17 Pavel Tsekov <ptsekov@gmx.net>
-
- * fhandler_tty.cc (fhandler_tty_common::close): Rearrange the code so
- that the master end of the input and output pipes is closed before
- signalling an EOF event to the slave.
- (fhandler_pty_master::close): Likewise.
-
-2005-08-14 Corinna Vinschen <corinna@vinschen.de>
-
- * init.cc (respawn_wow64_process): Make inline function. Remove
- "noreturn" attribute. Add additional check if parent process is
- actually a 64 bit process.
- (dll_entry): Only test WOW64 processes with a stack in the usual
- "dangerous" process space area.
-
-2005-08-11 Troy Curtiss <trcurtiss@gmail.com>
-
- * fhandler_serial.cc (fhandler_serial::tcgetattr): Return current baud
- rate regardless of current DTR state.
-
-2005-08-11 Christopher Faylor <cgf@timesys.com>
-
- * dcrt0.cc: Remove ld_preload declaration.
- * winsup.h: Move ld_preload declaration here.
- * fork.cc (fork_child): Call ld_preload() before returning.
-
-2005-08-11 Christopher Faylor <cgf@timesys.com>
-
- * child_info. (CURR_CHILD_INFO_MAGIC): Refresh.
- (child_info::child_info()): New constructor.
- (child_info_spawn::child_info_spawn()): Ditto.
- (child_info_spawn::operator new): New operator.
- (child_info_spawn::set): New function.
- * spawn.cc (av()): New constructor.
- (av::operator new): New operator.
- (av::set): New function.
- (spawn_guts): Reorganize so that classes which allocate are defined
- early in the function so that it can be properly cleaned up after an
- efault. Set errno to E2BIG in the event of a SEGV situation.
-
-2005-08-08 Christopher Faylor <cgf@timesys.com>
-
- * include/sys/cdefs.h: Remove extra line.
-
-2005-08-08 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (get_reg_security): New static function.
- (get_nt_object_security): Call get_reg_security for registry keys
- to circumvent problems with predefined registry keys.
-
-2005-08-08 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_process.cc (fhandler_process::open): Allow opening of
- /proc/<pid>/fd for reading.
- * fhandler_registry.cc (fhandler_registry::open): Ditto for registry
- keys.
-
-2005-08-08 Christopher Faylor <cgf@timesys.com>
-
- * include/sys/cdefs.h (__CONCAT): Define.
- * include/elf.h: New file.
- * include/sys/elf32.h: Ditto.
- * include/sys/elf64.h: Ditto.
- * include/sys/elf_common.h: Ditto.
- * include/sys/elf_generic.h: Ditto.
-
-2005-08-08 Christopher Faylor <cgf@timesys.com>
-
- * cygwin.sc: Use simpler method to align .cygheap.
- * dllfixdbg: Just copy .stab and .stabstr sections when making
- cygwin1.dbg, rather than relying on objcopy to keep only the debug
- sections since objcopy seems to get it wrong.
-
-2005-08-08 Corinna Vinschen <corinna@vinschen.de>
-
- * dtable.cc (build_fh_pc): Check setting fh to fhandler_nodevice for
- NULL, too.
-
-2005-08-08 Corinna Vinschen <corinna@vinschen.de>
-
- * ftw.c: Include winsup.h.
- * nftw.c: Ditto.
- * include/ftw.h: Guard declarations appropriately.
-
-2005-08-08 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (DLL_OFILES): Add fts.o, ftw.o, nftw.o.
- * cygwin.din: Export fts_children, fts_close, fts_get_clientptr,
- fts_get_stream, fts_open, fts_read, fts_set, fts_set_clientptr,
- ftw, nftw.
- * fts.c: New file, imported from FreeBSD.
- * ftw.c: Ditto.
- * nftw.c: Ditto.
- * include/fts.h: Ditto.
- * include/ftw.h: Ditto.
- * include/cygwin/version.h: Bump API minor number.
-
-2005-08-07 Christopher Faylor <cgf@timesys.com>
-
- * Makefile.in (dtable_CFLAGS): Use -fomit-frame-pointer and
- -fcheck-new.
- * cygheap.cc (cmalloc): Only emit system_printf warnings on failure if
- DEBUGGING.
- (crealloc): Ditto.
- (ccalloc): Ditto.
- * dtable.cc (build_fh_name): Treat NULL return from cnew as indicative
- of EMFILE condition.
- (build_fh_dev): Ditto.
- (dtable::dup_worker): Handle NULL return from build_fh_pc.
- (dtable::vfork_child_dup): Trust dup_worker to set errno.
- * fhandler.h (fhandler_base::new): Mark as nothrow.
-
-2005-08-07 Christopher Faylor <cgf@timesys.com>
-
- * dllfixdbg: New perl script.
- * configure.in: Detect objcopy, objdump, strip.
- * configure: Regenerate.
- * Makefile.in: Pass target objcopy/objdump to new dllfixdbg script.
- Remove previous perl check.
- * cygwin.sc: Add .gnu_debuglink_overlay section for eventual
- replacement with .gnu_debuglink section. Revert move of cygheap to end
- of image.
-
-2005-08-06 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in: Allow previous patch to work in a 64 bit environment.
-
-2005-08-06 Christopher Faylor <cgf@timesys.com>
-
- * Makefile.in: Warn when end of cygheap is not on 64k boundary.
- * cygwin.sc: Try harder to ensure that cygheap is on a 64k boundary.
- Move cygheap to end of image to stop interference from unstripped debug
- regions.
-
-2005-08-06 Christopher Faylor <cgf@timesys.com>
-
- * include/endian.h: Move everything into this file and define things
- more like linux.
- * include/cygwin/types.h: Include endian.h.
- * include/sys/dirent.h: Define DT_* types and conversion macros.
-
- * pinfo.cc (pinfo::init): Remove special handling for PID_ALLPIDS and
- execed code, even though it probably still isn't quite right.
-
-2005-08-05 Michael Gorse <mgorse@alum.wpi.edu>
-
- * thread.cc (pthread::create(3 args)): Make bool.
- (pthread_null::create): Ditto.
- (pthread::create(4 args)): Check return of inner create rather than
- calling is_good_object().
- * thread.h: Ditto.
-
-2005-08-05 Vaclav Haisman <v.haisman@sh.cvut.cz>
-
- * fhandler_tty.cc (fhandler_tty_slave::tcflush): Return either 0 or -1.
-
-2005-08-05 Corinna Vinschen <corinna@vinschen.de>
-
- * thread.cc (pthread_cond_timedwait): Check abstime for validity
- according to SUSv3. Rewrite timeout check and waitlength calculation
- to avoid overflow problems.
-
-2005-08-02 Yitzchak Scott-Thoennes <sthoenna@efn.org>
-
- * include/sys/termios.h: Define TIOCMBIS and TIOCMBIC.
- * fhandler.h (class fhandler_serial): Declare switch_modem_lines.
- * fhandler_serial.cc (fhandler_serial::switch_modem_lines): New
- static function to set or clear DTR and/or RTS.
- (fhandler_serial::ioctl): Use switch_modem_lines for TIOCMSET
- and new TIOCMBIS and TIOCMBIC.
- * include/cygwin/version.h: Bump API minor number.
-
-2005-07-29 Christopher Faylor <cgf@timesys.com>
-
- * fhandler_disk_file.cc (fhandler_base::pread): Don't move file offset
- pointer after I/O.
- (fhandler_base::pwrite): Ditto.
-
-2005-07-29 Christopher Faylor <cgf@timesys.com>
-
- * fhandler.h (fhandler_base::pread): Declare new function.
- (fhandler_base::pwrite): Ditto.
- (fhandler_disk_file::pread): Ditto.
- (fhandler_disk_file::pwrite): Ditto.
- * fhandler.cc (fhandler_base::pread): Define new function.
- (fhandler_base::pwrite): Ditto.
- * fhandler_disk_file.cc (fhandler_base::pread): Ditto.
- (fhandler_base::pwrite): Ditto.
- * syscalls.cc (pread): Define new function.
- (pwrite): Ditto.
- * cygwin.din: Export pread, pwrite.
-
- * include/sys/ioctl.h: Guard some _IO* declarations to avoid conflict
- with socket.h.
-
-2005-07-29 Christopher Faylor <cgf@timesys.com>
-
- * include/sys/ioctl.h: Add some linux defines.
-
-2005-07-29 Christopher Faylor <cgf@timesys.com>
-
- * pinfo.cc (pinfo::init): Put back accidentally removed debug_printf.
-
-2005-07-29 Arto Huusko <arto.huusko@wmdata.fi>
-
- * cygthread.cc (cygthread::simplestub): Wait for h to be filled out
- by main thread before assigning it.
-
-2005-07-29 Arto Huusko <arto.huusko@wmdata.fi>
-
- * pinfo.cc (pinfo::init): Sleep before retrying open_shared().
-
-2005-07-29 Arto Huusko <arto.huusko@wmdata.fi>
-
- * fork.cc (fork_parent): Fix null deref if pinfo creation fails.
-
-2005-07-28 Christopher Faylor <cgf@timesys.com>
-
- * cygmalloc.h (MSPACES): Define. This dropped through the cracks after
- the last malloc update.
- * dcrt0.cc: Fix a comment.
- * malloc.cc (internal_malloc): Fix definition so that it can be safely
- coerced.
-
-2005-07-27 Christopher Faylor <cgf@timesys.com>
-
- * include/cygwin/in.h (INET_ADDRSTRLEN): Add new definition.
-
-2005-07-27 Christopher Faylor <cgf@timesys.com>
-
- * gendef: Use nocr to remove \r's from input.
- gendef (nocr): New function.
-
-2005-07-27 Christopher Faylor <cgf@timesys.com>
-
- * fhandler_clipboard.cc (fhandler_dev_clipboard::close): Set membuffer
- to NULL.
- (fhandler_dev_clipboard::fixup_after_exec): Don't call close here.
- Just set variables directly.
-
-2005-07-25 Christopher Faylor <cgf@timesys.com>
-
- * include/byteswap.h: New file.
-
-2005-07-25 Christopher Faylor <cgf@timesys.com>
-
- * include/cygwin/types.h: Define loff_t.
-
-2005-07-16 Christopher Faylor <cgf@timesys.com>
-
- * child_info.h (child_info::sync): Pass pid and HANDLE rather than
- using pinfo.
- (child_info::child_info): Accept an argument controlling whether to
- create proc_subproc.
- (child_info_spawn::child_info_spawn): Ditto.
- * sigproc.cc (child_info::child_info): Ditto.
- (child_info_spawn::child_info_spawn): Ditto.
- (child_info::sync): Use passed in pid and HANDLE.
- * fork.cc (fork_parent): Reflect additional arguments required for
- child_info::sync.
- * hookapi.cc (hook_or_detect_cygwin): Rename. Change so that NULL 'fn'
- argument just returns "true", indicating that program uses cygwin1.dll.
- * spawn.cc (av::win16_exe): New element.
- * spawn.cc (av::iscygwin): New element.
- (av::fixup): New function.
- (spawn_guts): Protect against SEGV. Use fixup function to detect when
- it is safe to wait for a spawned (as opposed to an execed) program.
- Reflect changes in child_info::sync arguments.
- * external.cc (cygwin_internal): Reflect function renaming to
- hook_or_detect_cygwin.
-
- * cygheap.cc (cygheap_fixup_in_child): Close handle after debug fixup
- has been done to prevent false positives in handle collision.
-
- * exceptions.cc (try_to_debug): Notify debugger if already being
- debugged.
-
-2005-07-09 Christopher Faylor <cgf@timesys.com>
-
- * path.cc (mount): Only check win32_path when we know we need it.
-
-2005-07-09 Nicholas Wourms <nwourms@gmail.com>
-
- * cygwin.din (getline): Export.
- (getdelim): Export.
- * include/sys/stdio.h (getline): Replace macro with function prototype.
- (getdelim): Likewise.
- * include/cygwin/version.h: Bump API minor number.
-
-2005-07-08 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din (__getline): Export.
- (__getdelim): Export.
- * include/sys/stdio.h (getline): Define as __getline.
- (getdelim): Define as __getdelim.
- * include/cygwin/version.h: Bump API minor number.
-
-2005-07-06 Christopher Faylor <cgf@timesys.com>
-
- Eliminate (void) cast on standalone function calls throughout.
-
-2005-07-05 Christopher Faylor <cgf@timesys.com>
-
- * dcrt0.cc (cygwin_exit): Mark as "noreturn".
- * sigproc.cc (child_info::ready): Don't signal parent that we are a
- cygwin process if we are dynamically loaded.
-
-2005-07-05 Christopher Faylor <cgf@timesys.com>
-
- * malloc.cc: Update to version 2.8.2.
-
-2005-07-05 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_tape.cc (fhandler_dev_tape::close): Don't do "extra stuff"
- when we know we're execing.
-
-2005-07-04 Christopher Faylor <cgf@timesys.com>
-
- Change foo (void) to foo () for all c++ functions throughout.
- Remove all fhandler_*::dump functions throughout.
-
- * fhandler.h (fhandler_dev_mem::close): Remove pass-through function in
- favor of virtual method.
- (handler_dev_raw::close): Ditto.
- (fhandler_dev_clipboard::fixup_after_exec): New method.
- * fhandler_dev_mem.cc (fhandler_dev_mem::close): Eliminate pass through
- function in favor of virtual method.
- * fhandler_dev_raw.cc (fhandler_dev_raw::close): Ditto.
- * fhandler_clipboard.cc (fhandler_dev_clipboard::close): Don't go to
- extra effort when execing.
- (fhandler_dev_clipboard::fixup_after_exec): New function.
- * fhandler_console.cc (fhandler_console::close): Don't do "extra stuff"
- when we know we're execing.
- * fhandler_disk_file.cc (fhandler_disk_file::close): Ditto.
- * fhandler_dsp.cc (fhandler_dev_dsp::close): Ditto.
- * fhandler_fifo.cc (fhandler_fifo.cc::close): Ditto. function in favor
- of base function.
- * fhandler_random.cc (fhandler_dev_random::close): Ditto.
- * fhandler_registry.cc (fhandler_registry::close): Ditto.
- * fhandler_tty.cc (fhandler_tty_slave::close): Ditto.
- * fhandler_virtual.cc (fhandler_virtual::close): Ditto.
-
- * pinfo.cc (proc_waiter): Remove unneeded hExeced declaration.
- * sigproc.cc: Ditto.
- * winsup.h (hExeced): Define here.
-
- * fhandler_virtual.cc (fhandler_virtual::fixup_after_exec): Just call
- close() to reinitialize things to known state.
-
-2005-07-04 Christopher Faylor <cgf@timesys.com>
-
- * cygtls.h (_cygtls): Perform minor reformatting.
-
- * winsup.h (close_all_files): Reflect argument change.
- * dtable.cc (close_all_files): Ditto.
- * dtable.h: Ditto.
- * fhandler.h: Ditto.
- * spawn.cc (spawn_guts): Move close_all_files back to its original
- location in first P_OVERLAY test but use argument denoting that handles
- are only supposed to be closed, not released (more work to be done
- here).
- * syscalls.cc (close_all_files): Take an argument denoting whether to
- release closed files or not.
-
- * path.cc (symlink): Change argument names to reflect linux man page.
- (symlink_worker): Ditto. Also appropriately set ENOENT for empty
- strings.
-
-
-2005-07-04 Pierre Humblet <pierre.humblet@ieee.org>
-
- * cygheap.h (struct init_cygheap): Delete cygwin_regname member.
- * external.cc (cygwin_internal): Use cygpsid::get_id for
- CW_GET_UID_FROM_SID and CW_GET_GID_FROM_SID.
- Turn CW_SET_CYGWIN_REGISTRY_NAME and CW_GET_CYGWIN_REGISTRY_NAME
- into noops.
-
-2005-07-03 Christopher Faylor <cgf@timesys.com>
-
- * thread.cc (pthread_mutex::init): Remove unneeded efault/mutex check.
-
-2005-07-02 Christopher Faylor <cgf@timesys.com>
-
- * thread.h (verifyable_object_state verifyable_object_isvalid): Delete
- function declaration that should have been static.
- * thread.cc (verifyable_object_state verifyable_object_isvalid): Make
- inline static.
- (pthread*::is_good_object): Move to directly after
- verifyable_object_state verifyable_object_isvalid and make inline.
- (check_valid_pointer): Delete function.
- (pthread_cond_timedwait): Use myfault to detect valid pointer.
- (pthread_mutex::init): Ditto.
-
-2005-07-02 Christopher Faylor <cgf@timesys.com>
-
- Replace valid memory checks with new myfault class "exception
- handling", almost everywhere. Leave some thread.cc stuff alone for
- now.
- * cygtls.h: Kludge some definitions to avoid including a problematic
- windows header.
- (_cygtls::_myfault): New entry.
- (_cygtls::_myfault_errno): Ditto.
- (_cygtls::fault_guarded): New function.
- (_cygtls::setup_fault): Ditto.
- (_cygtls::return_from_fault): Ditto.
- (_cygtls::clear_fault): Ditto.
- (myfault): New class.
- * exceptions.cc (handle_exceptions): Handle case of guarded fault in
- system routine.
- * gendef: Add another entry point for setjmp that the compiler doesn't
- know about and won't complain about.
- * gentls_offsets: Just include windows.h rather than kludging a HANDLE
- def.
- * miscfuncs.cc (check_null_str): Delete.
- (check_null_empty_str): Ditto.
- (check_null_empty_str_errno): Ditto.
- (check_null_str_errno): Ditto.
- (__check_null_invalid_struct): Ditto.
- (__check_null_invalid_struct_errno): Ditto.
- (__check_invalid_read_ptr): Ditto.
- (__check_invalid_read_ptr_errno): Ditto.
- (dummytest): New function.
- (check_iovec_for_read): Delete.
- (chec_iovec): Rename from check_iovec_for_write. Take a read/write
- parameter.
- * tlsoffsets.h: Regenerate.
- * winsup.h: Remove check_* declarations.
- (check_iovec_for_read): Delete declaration. Turn into a define
- instead.
- (check_iovec_for_write): Ditto.
- (check_iovec): New declaration.
-
- * thread.h: Use ifdef guard name consistent with other header files.
-
-2005-07-02 Christopher Faylor <cgf@timesys.com>
-
- * include/cygwin/version.h: Bump DLL minor number to 19.
-
-2005-06-30 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::readv): Use malloc/free instead of alloca.
- (fhandler_base::writev): Ditto.
-
-2005-06-29 Christopher Faylor <cgf@timesys.com>
-
- * cygerrno.h: Make multi-inclusion safe.
- * fhandler_termios.cc (fhandler_termios::tcsetpgrp): Deal with EINTR.
- * dcrt0.cc (dll_crt0_0): Accommodate init_console_handler argument
- change.
- * winsup.h: Ditto.
- * fhandler_tty.cc (fhandler_tty_slave::open): Ditto.
- * exceptions.cc (init_console_handler): Ditto. Ignore console events
- if we're not attached to a terminal.
- * fhandler_tty.cc (fhandler_tty_slave::open): Ditto.
- * wincap.cc: Implement has_null_console_handler_routine throughout.
- * wincap.h: Ditto.
-
-2005-06-29 Christopher Faylor <cgf@timesys.com>
-
- * autoload.cc (LoadDLLprime): Use a more descriptive name for autoload
- text sections.
- * cygwin.sc: Ditto.
-
-2005-06-27 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::facl): Add missing break.
-
-2005-06-24 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (path_conv::check): Don't strip trailing dots and spaces
- at the start of the path.
-
-2005-06-24 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (rootdir): Don't set errno.
- * syscalls.cc (statvfs): Set errno to ENOTDIR if rootdir() failed.
-
-2005-06-22 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (class fhandler_dev_tape): Add declaration for
- fixup_after_fork and set_close_on_exec.
- * fhandler_tape.cc (fhandler_dev_tape::open): Create mt_mtx mutex
- inheritable.
- (fhandler_dev_tape::close): Close mt_mtx.
- (fhandler_dev_tape::dup): Duplicate mt_mtx and mt_evt as necessary.
- (fhandler_dev_tape::fixup_after_fork): New method.
- (fhandler_dev_tape::set_close_on_exec): New method.
-
-2005-06-21 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (get_initgroups_sidlist): Drop special_pgrp parameter.
- (get_setgroups_sidlist): Avoid duplicate groups in group list.
- (create_token): Remove special_pgrp local variable. Accommodate
- change to get_initgroups_sidlist call.
-
-2005-06-21 Corinna Vinschen <corinna@vinschen.de>
-
- * uinfo.cc (uinfo_init): Call reimpersonate to set the main thread's
- impersonation token.
-
-2005-06-20 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_proc.cc (format_proc_partitions): Only list recognized
- partitions. Use partition number given by PartitionNumber member.
-
-2005-06-18 Corinna Vinschen <corinna@vinschen.de>
-
- * glob.c: (glob0): New local variable `limit`. Use in calls to glob1
- and globextend.
- (glob1): Add `limit' parameter.
- (glob2): Ditto.
- (glob3): Ditto.
- (globextend): Ditto. Implement GLOB_LIMIT handling.
- * include/glob.h (GLOB_LIMIT): New define.
- * include/cygwin/version.h: Bump API minor number.
-
-2005-06-17 Christopher Faylor <cgf@timesys.com>
-
- * wincap.h (wincaps::detect_win16_exe): Declare.
- (wincapc::detect_win16_exe): Implement.
- * wincap.cc: Populate detect_win16_exe where appropriate.
- * spawn.cc (spawn_guts): Only go out of the way to detect 16-bit apps
- on systems which are flummoxed by them.
-
-2005-06-17 Christopher Faylor <cgf@timesys.com>
-
- * spawn.cc (spawn_guts): Detect when executing a 16-bit application and
- avoid setting the process pipe since this causes conniptions in Windows
- 9x.
-
-2005-06-17 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din (inet_pton): Export.
- (inet_ntop): Export.
- * net.cc (cygwin_inet_pton): Implement inet_pton for AF_INET for now.
- (cygwin_inet_ntop): Implement inet_ntop for AF_INET for now.
- * include/arpa/inet.h (inet_pton): Declare.
- (inet_ntop): Declare.
- * include/cygwin/version.h: Bump API minor number.
-
-2005-06-17 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (fhandler_union): Add missing members corresponding to
- fhandler_fifo and fhandler_netdrive.
-
-2005-06-16 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (statvfs): Handle the case when GetDiskFreeSpaceEx
- succeeds but GetDiskFreeSpace fails by faking bytes-per-sector and
- sectors-per-cluster values.
-
-2005-06-15 Christopher Faylor <cgf@timesys.com>
-
- * cygthread.cc (cygthread::detach): Fix debugging output.
- * dcrt0.cc (dll_crt0_1): Create signal_arrived early -- before any
- filename manipulation.
- * sigproc.cc (sigproc_init): Don't create signal_arrived here.
- * fork.cc (fork_child): Ditto.
- * sigproc.h (create_signal_arrived): Declare.
-
-2005-06-14 Christopher Faylor <cgf@timesys.com>
-
- * path.cc (path_conv::check): Always reset to FH_FS when component != 0
- and FH_NETDRIVE to fix problems with strict case checking.
-
-2005-06-12 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::recvmsg): Avoid SEGV in OpenSSH
- when trying to pass file descriptor by setting msg->msg_accrightslen
- to 0.
-
-2005-06-11 Christopher Faylor <cgf@timesys.com>
-
- * Makefile.in: Avoid initial heap allocation since cygwin has its own
- heap.
-
-2005-06-11 Christopher Faylor <cgf@timesys.com>
-
- * fhandler_console.cc (fhandler_console::read): Fix a compiler warning.
-
-2005-06-10 Christopher Faylor <cgf@timesys.com>
-
- * include/pthread.h: Change PTHREAD_MUTEX_DEFAULT to
- PTHREAD_MUTEX_NORMAL. Revert PTHREAD_MUTEX_INITIALIZER to
- PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP since that is actually closer
- to what linux does.
- * thread.h (cw_cancel_action): New enum.
- (cancelable_wait): Use cw_cancel_action as third argument.
- * thread.cc (cancelable_wait): Ditto. Don't wait for cancel if
- cancel_action == cw_no_cancel.
- (pthread::create): Don't wait for cancel event since that is racy.
- (pthread_mutex::pthread_mutex): Set default to PTHREAD_MUTEX_ERRORCHECK.
- (pthread_mutexattr::pthread_mutexattr): Ditto.
- (pthread_mutex::_lock): Tell cancelable_wait not to wait for
- cancellation event.
- (semaphore::_timedwait): Accommodate change in cancelable_wait args.
- (pthread::join): Ditto.
-
-2005-06-10 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::sendto): Always initialize
- ret to 0.
- (fhandler_socket::sendmsg): Ditto.
-
-2005-06-10 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din (imaxabs): Export.
- (imaxdiv): Export.
- (llabs): Export.
- (lldiv): Export.
- (strtoimax): Export.
- (strtoumax): Export.
- * include/inttypes.h (imaxabs): Activate declaration.
- (imaxdiv): Ditto.
- (strtoimax): Ditto.
- (strtoumax): Ditto.
- * include/cygwin/version.h: Bump API minor.
-
-2005-06-09 Christopher Faylor <cgf@timesys.com>
-
- * cygthread.cc (cygthread::detach): Improve diagnostics for what should
- be an impossible failure condition.
-
-2005-06-09 Christopher Faylor <cgf@timesys.com>
-
- * cygtls.h (_local_storage::setmode_file): New element.
- (_local_storage::setmode_mode): New element.
- * tlsoffsets.h: Regenerate.
- * cygwin.din (setmode): Define as cygwin_getmode.
- * syscalls.cc (setmode_helper): Use setmode_* variables from tls rather
- than using unthreadsafe static.
- (setmode): Break out fwalk stuff.
- (cygwin_setmode): New function. Put fwalk stdio stuff here.
-
-2005-06-09 Christopher Faylor <cgf@timesys.com>
-
- * thread.cc (pthread_mutex::_lock): Use cancelable_wait rather than
- WaitForSingleObject.
-
-2005-06-09 Christopher Faylor <cgf@timesys.com>
-
- * cygwin.sc: Place .cygwin_dll_common in a more sensible spot.
-
-2005-06-09 Christopher Faylor <cgf@timesys.com>
-
- * cygwin.sc: Place .cygwin_dll_common.
- * init.cc (threadfunc_ix): Use a more common name for the section name.
-
-2005-06-09 Christopher Faylor <cgf@timesys.com>
-
- * include/pthread.h (PTHREAD_MUTEX_INITIALIZER): Change to
- PTHREAD_NORMAL_MUTEX_INITIALIZER_NP to be closer to linux default.
-
-2005-06-09 Christopher Faylor <cgf@timesys.com>
-
- * thread.cc (cancelable_wait): No-op change to make sure that res is
- always a valid WFMO return.
-
-2005-06-09 Christopher Faylor <cgf@timesys.com>
-
- Change pthread::cancelable_wait to just cancelable_wait, throughout.
- * thread.h (cw_sig_wait): New enum.
- (fast_mutex::lock): Use cancelable_wait with resumable signal.
- (cancelable_wait): Change fourth argument to cw_sig_wait enum.
- * thread.cc (cancelable_wait): Ditto. Loop on signal detection if
- fourth argument == cw_sig_resume.
-
-2005-06-08 Christopher Faylor <cgf@timesys.com>
-
- * cygwin.sc: Apparently nonloading sections need to go last.
-
-2005-06-08 Christopher Faylor <cgf@timesys.com>
-
- * cygwin.sc: Restore resource and reloc sections and use more modern
- syntax for stabs sections.
-
-2005-06-08 Christopher Faylor <cgf@timesys.com>
-
- * environ.cc (spenvs): Remove cut/paste error which associated
- CYGWIN_DEBUG with HOME.
-
-2005-06-08 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (cygwin_logon_user): Run LogonUser in the primary
- process token context. Fix potential handle leak.
-
-2005-06-07 Corinna Vinschen <corinna@vinschen.de>
-
- * pinfo.cc (pinfo::init): Define sa_buf as PSECURITY_ATTRIBUTES and
- allocate dynamically.
- (pinfo::set_acl): Replace sa_buf by dynamically allocated acl_buf.
- * sec_acl.cc (setacl): Allocate acl dynamically.
- * sec_helper.cc (sec_acl): Add test for alignment of acl when
- DEBUGGING is defined.
- (__sec_user): Same for sa_buf.
- * security.cc (verify_token): Define sd_buf as PSECURITY_DESCRIPTOR
- and allocate dynamically.
- (alloc_sd): Allocate acl dynamically.
- security.h (sec_user_nih): Change first parameter to
- SECURITY_ATTRIBUTES *.
- (sec_user): Ditto.
- * sigproc.cc (wait_sig): Define sa_buf as PSECURITY_ATTRIBUTES and
- allocate dynamically.
- * syscalls.cc (seteuid32): Define dacl_buf as PACL and allocate
- dynamically.
- * uinfo.cc (cygheap_user::init): Define sa_buf as PSECURITY_ATTRIBUTES
- and allocate dynamically.
- * winbase.h (ilockincr): Mark first argument of inline assembly as
- earlyclobber.
- (ilockdecr): Ditto.
-
-2005-06-07 Christopher Faylor <cgf@timesys.com>
-
- * cygthread.cc (cygthread::detach): Make error message a little more
- detailed.
- * fhandler.cc (fhandler_base::raw_read): Ditto for debug message.
- * dcrt0.cc (do_exit): Add some more synchronization tests.
- * fhandler_fifo.cc (fhandler_fifo::dup): Don't duplicate a nonexistent
- handle. Use derived return value rather than always retuning 0.
- * fhandler_netdrive.cc (fhandler_netdrive::exists): Wnet -> WNet.
- * winsup.h (exit_states): Add a couple of new exit states.
-
-2005-06-06 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (symlink_info::check): If GetFileAttributes returns
- with ERROR_SHARING_VIOLATION, the file exists.
-
-2005-06-06 Corinna Vinschen <corinna@vinschen.de>
-
- * uname.cc (uname): Change "amd64" to "x86_64" as on Linux.
-
-2005-06-06 Corinna Vinschen <corinna@vinschen.de>
-
- * uname.cc (uname): Add missing break.
-
-2005-06-05 Christopher Faylor <cgf@timesys.com>
-
- * Makefile.in: Build sync.o with -fomit-frame-pointer and -O3.
-
-2005-06-05 Christopher Faylor <cgf@timesys.com>
-
- * sync.cc (muto::acquire): Remove unneeded brackets and fix whitespace.
-
-2005-06-04 Christopher Faylor <cgf@timesys.com>
-
- * malloc.cc: Update to Doug Lea's malloc v2.8.0.
-
-2005-06-03 Max Kaehn <slothman@electric-cloud.com>
-
- * dcrt0.cc (cygwin_dll_init): Initialize main_environ and cygtls. Add
- comment to explain the caveats of this method.
- * how-cygtls-works.txt: New file.
-
-2005-06-02 Christopher Faylor <cgf@timesys.com>
-
- * dlfcn.cc (get_full_path_of_dll): Use a relative path when converting
- so that the standard Windows rules for finding a library will be used
- if no path is given. Stop explicitly searching /usr/bin since that is
- now in effect.
-
-2005-06-01 Christopher Faylor <cgf@timesys.com>
-
- Revert 2005-05-30 close_all_files changes.
- * spawn.cc (spawn_guts): When execing, close all files after the child
- has synced with us.
-
-2005-06-01 Christopher Faylor <cgf@timesys.com>
-
- * fhandler_disk_file.cc (fhandler_disk_file::fchown): Make sure that
- disk open is called in case we're passed in a non-existent device.
-
-2005-06-01 Christopher Faylor <cgf@timesys.com>
-
- * include/machine/stdlib.h: New file.
-
-2005-06-01 Christopher Faylor <cgf@timesys.com>
-
- * thread.h (List_remove): Revert most of 2005-05-30 change.
-
-2005-06-01 Christopher Faylor <cgf@timesys.com>
-
- * cygwin.sc: Don't output .reloc or .rsrc sections. Clean up stuff
- around .cygheap and use a workaround to get things working with newer
- (broken?) binutils.
-
-2005-05-31 Christopher Faylor <cgf@timesys.com>
-
- * cygheap.cc (cygheap_end): Remove bogus section attribute.
- * cygwin.sc: Make __cygheap_mid absolute. Remove unused _cygheap_foo.
-
-2005-05-30 Christopher Faylor <cgf@timesys.com>
-
- * child_info.h (child_info::cygheap_h): Delete.
- (child_info::dwProcessId): New field.
- * cygheap.cc (init_cheap): Delete.
- (dup_now): Ditto.
- (cygheap_setup_for_child): Ditto.
- (cygheap_setup_for_child_cleanup): Ditto.
- (cygheap_fixup_in_child): Simplify. Use new "child_copy" function to
- copy heap from parent.
- (_csbrk): Don't attempt allocation if within cygheap section. Fix so
- that more than one allocation will succeed.
- (cygheap_init): Reset possibly-nonzero region to zero.
- * cygheap.h (cygheap_setup_for_child): Delete declaration.
- (cygheap_setup_for_child_cleanup): Ditto.
- (cygheap_start): Define as an array.
- * cygwin.sc: Modernize. Remove unneeded sections. Define cygheap
- here.
- * dcrt0.cc (do_exit): Reflect argument change to close_all_files.
- * dtable.cc (dtable::vfork_parent_restore): Ditto.
- * dtable.h: Ditto.
- * fhandler.h: Ditto.
- * fork.cc (fork_copy): Call ReadProcessMemory if there is no thread
- (indicating that we're execing).
- (fork_child): Don't mess with hParent.
- (fork_parent): Remove hParent stuff. It happens earlier now.
- Remove call to cygheap_setup_for_child* stuff.
- (fork): Put child_info_stuff in grouped structure. Issue error if
- parent handle is not set.
- (child_copy): New function.
- * sigproc.cc (child_info::child_info): Put cygheap settings here. Set
- parent handle.
- (child_info::~child_info): Close parent handle if it exists.
- * spawn.cc (spawn_guts): Reorganize so that ciresrv is allocated at
- only the last minute so that cygheap changes are reflected. Delete
- cygheap_setup* calls.
- * syscalls.cc (close_all_files): Add an argument to flag when the fd
- entry should be released.
- * winsup.h (close_all_files): Add an argument to close_all_files
- declaration. Declare child_copy.
-
-2005-05-30 Vaclav Haisman <v.haisman@sh.cvut.cz>
-
- * thread.h (List_remove): Make node parameter const. Use simple
- comparison and assignment rather than InterlockedCompareExchangePointer
- since access is already synchronized.
-
-2005-05-30 Christopher Faylor <cgf@timesys.com>
-
- * dlfcn.cc (set_dl_error): Use UNIX error rather than Windows error.
-
-2005-05-29 Christopher Faylor <cgf@timesys.com>
-
- * cygmagic: Remove debugging cruft missed on 2005-05-21.
-
-2005-05-29 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (path_conv::check): Move component to function scope. Set
- PATH_RO only on *real* FH_NETDRIVEs or on non-FH_NETDRIVE virtual
- paths. Allow non-retrievable shares to be handled as files.
-
-2005-05-29 Eric Blake <ebb9@byu.net>
-
- * include/limits.h (LLONG_MIN, LLONG_MAX, ULLONG_MAX): Always define.
-
-2005-05-28 Christopher Faylor <cgf@timesys.com>
-
- * thread.h (pthread_key::set): Inline.
- (pthread_key::get): Ditto.
- * thread.cc (pthread::set): Delete.
- (pthread::get): Ditto.
-
-2005-05-28 Christopher Faylor <cgf@timesys.com>
-
- * cygwin.din: Remove signal front end from pthread_[gs]etspecific.
-
-2005-05-28 Christopher Faylor <cgf@timesys.com>
-
- * fhandler_tty.cc (fhandler_tty_slave:tcflush): Use signed comparison.
-
-2005-05-28 Christopher Faylor <cgf@timesys.com>
-
- * times.cc (time_ms::usecs): Coerce comparison to signed or whole test
- is a no-op.
-
-2005-05-27 Christopher Faylor <cgf@timesys.com>
-
- * cygheap.h: Reference _cygheap_start via .cygheap section.
-
- * environ.cc: Fix force_into_environment typo throughout.
- (spenvs): Export CYGWIN_DEBUG if DEBUGGING.
-
-2005-05-26 Christopher Faylor <cgf@timesys.com>
-
- * include/cygwin/version.h: Bump DLL minor number to 18.
-
-2005-05-25 Pierre Humblet <pierre.humblet@ieee.org>
-
- * fhandler.h (fhandler_base::mkdir): New virtual method.
- (fhandler_base::rmdir): Ditto.
- (fhandler_disk_file:mkdir): New method.
- (fhandler_disk_file:rmdir): Ditto.
- * dir.cc (mkdir): Implement with fhandlers.
- (rmdir): Ditto.
- * fhandler.cc (fhandler_base::mkdir): New virtual method.
- (fhandler_base::rmdir): Ditto.
- (fhandler_disk_file::mkdir): New method.
- (fhandler_disk_file::rmdir): Ditto.
-
-2005-05-24 Christopher Faylor <cgf@timesys.com>
-
- * include/cygwin/version.h: Bump API minor number to 129.
-
-2005-05-24 Christopher Faylor <cgf@timesys.com>
-
- * cygwin.din: Export mkdtemp.
- * mktemp.cc: New file.
- * Makefile.in (DLL_OFILES): Add mktemp.o
-
-2005-05-23 Eric Blake <ebb9@byu.net>
-
- * include/stdint.h (INTMAX_C, UINTMAX_C): Fix definition.
-
-2005-05-21 Christopher Faylor <cgf@timesys.com>
-
- * spawn.cc (find_exec): Accept a PATH-like string in place of an
- environment variable.
- * dlfcn.cc (get_full_path_of_dll): Search /usr/bin (for windows
- compatibility) and /usr/lib (for UNIX compatibility) when looking for
- shared libraries.
- * environ.cc (conv_envvars): Put back LD_LIBRARY_PATH since it is used
- by get_full_path_of_dll().
- * errno.cc (errmap): Map MOD_NOT_FOUND to ENOENT.
-
- * cygmagic: Remove debugging cruft.
-
-2005-05-19 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/in.h: Add comment.
-
-2005-05-19 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/in.h: Define IPPROTO_xxx values as macros to
- accommodate SUSv3.
-
-2005-05-19 Christopher Faylor <cgf@timesys.com>
-
- * include/limits.h: Include features.h, as on linux.
-
-2005-05-19 Christopher Faylor <cgf@timesys.com>
-
- * include/endian.h: New file.
-
-2005-05-19 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.sc: Add Dwarf-2 debug sections.
-
-2005-05-19 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (mmap64): Make granularity an automatic variable.
-
-2005-05-19 Christopher Faylor <cgf@timesys.com>
-
- * fhandler.h (fhandler_cygdrive::seekdir): Delete declaration.
- (fhandler_cygdrive::seekdir): Delete.
-
-2005-05-19 Pierre Humblet <pierre.humblet@ieee.org>
-
- * fhandler.h (fhandler_cygdrive::iscygdrive_root): Delete method.
- (fhandler_cygdrive::telldir): Delete declaration.
- * fhandler_disk_file.cc: Remove all uses of
- fhandler_cygdrive::iscygdrive_root.
- (fhandler_disk_file::mkdir): New method.
- (fhandler_disk_file::rmdir): Ditto.
- (fhandler_cygdrive::telldir): Delete.
-
-2005-05-18 Christopher Faylor <cgf@timesys.com>
-
- * external.cc: Move pids declaration to file scope and use less
- enthusiastic constructor.
- * pinfo.h (winpids::winpids): Remove default setting.
- * fhandler_fifo.cc (fhandler_fifo::open_not_mine): Accommodate removal
- of default setting.
- * fhandler_proc.cc (fhandler_proc::readdir): Ditto.
-
-2005-05-18 Christopher Faylor <cgf@timesys.com>
-
- * cygtls.h (_local_storage::unknown_thread_name): New buffer.
- * tlsoffsets.h: Regenerate.
- * cygthread.cc (cygthread::name): Use new thread-local buffer.
- * exceptions.cc (handle_exceptions): Avoid unnecessary initialization
- of static variables to zero.
- * fork.cc (slow_pid_reuse) Ditto.
-
-2005-05-18 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (mmap64): Avoid compiler warning.
- * ntea.cc (NTReadEA): Ditto.
- * hires.h (hires_base): Remove useless usecs function.
-
-2005-05-18 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_netdrive.cc (fhandler_netdrive::telldir): Remove since it's
- equivalent to fhandler_virtual::telldir now anyway.
- * fhandler.h (class fhandler_netdrive): Remove telldir.
-
-2005-05-18 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_netdrive.cc (fhandler_netdrive::telldir): Implement.
- (fhandler_netdrive::seekdir): Implement.
- (fhandler_netdrive::closedir): Call rewinddir to have only one point
- of calling WNetCloseEnum.
-
-2005-05-17 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (class fhandler_netdrive): Add method rewinddir.
- * fhandler_netdrive.cc (struct netdriveinf): New structure to
- store thread arguments.
- (thread_netdrive): Thread handling all potentially blocking
- WNet... calls.
- (create_thread_and_wait): Start and wait for above thread.
- (fhandler_netdrive::exists): Change to call create_thread_and_wait
- instead of calling WNet... function.
- (fhandler_netdrive::readdir): Ditto. Fix error handling.
- (fhandler_netdrive::rewinddir): New method.
-
-2005-05-17 Corinna Vinschen <corinna@vinschen.de>
-
- * external.cc (cygwin_internal): Avoid compiler warning.
-
-2005-05-16 Christopher Faylor <cgf@timesys.com>
-
- * dcrt0.cc (dll_crt0_0): Don't do fixup_after_exec if dynamically
- loaded since the state of fds is unknown at this point.
-
-2005-05-16 Christopher Faylor <cgf@timesys.com>
-
- * include/sys/cygwin.h (enum cygwin_getinfo_types): Add CW_DEBUG_SELF.
- * external.cc (cygwin_internal): Implement CW_DEBUG_SELF.
-
- * init.cc (dll_entry): Minor rearrangement of code.
-
-2005-05-16 Christopher Faylor <cgf@timesys.com>
-
- * path.cc (path_conv::check): Remove embedded dots before slashes.
-
-2005-05-16 Corinna Vinschen <corinna@vinschen.de>
-
- * environ.cc (conv_envvars): Remove LD_LIBRARY_PATH entirely.
- It doesn't belong here.
-
-2005-05-15 Corinna Vinschen <corinna@vinschen.de>
-
- * environ.cc (conv_envvars): Treat LD_LIBRARY_PATH as path list.
-
-2005-05-14 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_base::fstat_by_handle): Check
- return code from GetFileSize and set file size to 0 if necessary.
- * fhandler_netdrive.cc (fhandler_netdrive::fstat): Set permissions
- to read/execute for all.
-
-2005-05-13 Christopher Faylor <cgf@timesys.com>
-
- * path.cc (normalize_posix_path): Do normalization on . and .. after
- a '//'.
-
-2005-05-13 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (fhandler_netdrive::readdir): Remove useless comment.
-
-2005-05-13 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (WNetGetResourceParentA): Import.
- (WNetOpenEnumA): Import.
- (WNetEnumResourceA): Import.
- (WNetCloseEnum): Import.
- * fhandler.h (fhandler_netdrive::telldir): Add declaration.
- (fhandler_netdrive::seekdir): Ditto.
- (fhandler_netdrive::closedir): Ditto.
- * fhandler_netdrive.cc: Drop explicit including windows.h. Include
- winnetwk.h instead of shlwapi.h. Include dirent.h.
- (fhandler_netdrive::readdir): Implement.
- (fhandler_netdrive::telldir): New method.
- (fhandler_netdrive::seekdir): New method.
- (fhandler_netdrive::closedir): Ditto.
-
-2005-05-13 Christopher Faylor <cgf@timesys.com>
-
- Remove PC_FULL from path_conv usage throughout.
- * path.h (enum pathconv_arg): Change PC_FULL to PC_NOFULL.
- * path.cc (path_conv::check): Test for PC_NOFULL rather than !PC_FULL.
- (cygwin_conv_to_win32_path): Use PC_NOFULL to force non-absolute path.
-
-2005-05-13 Christopher Faylor <cgf@timesys.com>
-
- * fhandler_netdrive.cc (fhandler_netdrive::exists): Assert that "//"
- exists.
-
-2005-05-12 Christopher Faylor <cgf@timesys.com>
-
- * cygtls.cc (_cygtls::remove): Eliminate compiler warning.
-
- * dir.cc (mkdir): Check path for writability.
- (rmdir): Ditto. Remove check for special directories.
- * path.cc (path_conv::check): Set PATH_RO for virtual devices. Set
- error if read-only and asked for writability.
- * path.h (pathconv_arg): Add PC_WRITABLE.
- (path_types): Add PATH_RO.
- (path_conv::isro): Add (currently unused) check for read-only
- filesystem. Return "ENOSHARE" when we know a share doesn't exist.
- * include/sys/mount.h: Add MOUNT_RO flag.
- * autoload.cc (WNetGetResourceInformationA): Import.
- * fhandler_netdrive.cc (fhandler_netdrive::exists): Detect actual
- existence of remote system rather than always assuming that it exists.
-
-2005-05-11 Christopher Faylor <cgf@timesys.com>
-
- * dcrt0.cc (do_global_dtors): Don't call dll_global_dtors here.
- (__main): Reinstate atexit of do_global_dtors.
- (cygwin_exit): Call dll_global_dtors here.
- (do_exit): And here.
-
-
-2005-05-10 Christopher Faylor <cgf@timesys.com>
-
- * cygtls.cc (_cygtls::remove): Clear exitsock after close.
- * fhandler_console.cc (fhandler_console::write_normal): Store character
- in a local variable for potential future inspection.
-
-2005-05-10 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (DLL_OFILES): Add fhandler_mailslot.o.
- * devices.h (FH_KMSG): Define new device.
- * devices.in: Add "/dev/kmsg" entry.
- * devices.cc: Regenerate.
- * dtable.cc (build_fh_pc): Handle case FH_KMSG.
- * fhandler.h (class fhandler_mailslot): New class.
- (class select_stuff): Add device_specific_mailslot pointer.
- * fhandler_mailslot.cc: New file.
- * select.cc (peek_mailslot): New function.
- (verify_mailslot): Ditto.
- (struct mailslotinf): New stuct to handle select on mailslots.
- (thread_mailslot): New function.
- (start_thread_mailslot): Ditto.
- (mailslot_cleanup): Ditto.
- (fhandler_mailslot::select_read): New method.
- * syslog.cc (klog_guard): New muto.
- (dev_kmsg): Local mailslot for kernel message device.
- (vklog): New function.
- (klog): Ditto.
- * winsup.h (vklog): Declare.
- (klog): Ditto.
- * include/sys/syslog.h: Define _PATH_KLOG.
-
-2005-05-10 Christopher Faylor <cgf@timesys.com>
-
- * dcrt0.cc (dll_crt0_1): Call cygwin_exit to ensure that destructors
- are handled correctly.
-
-2005-05-10 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (path_conv::check): Set correct file attributes for socket
- files.
-
-2005-05-09 Pierre Humblet <pierre.humblet@ieee.org>
-
- * fhandler.h (class fhandler_netdrive): New class.
- * fhandler_netdrive.cc (fhandler_netdrive::fhandler_netdrive): New constructor.
- (fhandler_netdrive::exists): New method.
- (fhandler_netdrive::fstat): Ditto.
- (fhandler_netdrive::readdir): Ditto.
- (fhandler_netdrive::open): Ditto.
- * dtable.cc (build_fh_pc): Handle case FH_NETDRIVE.
- * path.cc (isvirtual_dev): Add FH_NETDRIVE.
- (mount_info::conv_to_win32_path): Detect netdrive device and bypass mount
- search for network paths.
-
-2005-05-08 Christopher Faylor <cgf@timesys.com>
-
- * dcrt0.cc (get_cygwin_startup_info): New function pulled from
- dll_crt0_0.
- (dll_crt0_0): Use get_cygwin_startup_info to retrieve cygwin-specific
- startup pointer.
- * external.cc (cygwin_internal): Implement CW_ARGV and CW_ENVP.
- * include/sys/cygwin.h: Implement CW_ARGV and CW_ENVP.
-
-2005-05-07 Christopher Faylor <cgf@timesys.com>
-
- * path.cc (normalize_posix_path): Don't treat '//' specially since
- newer versions of bash now get this right.
-
-2005-05-07 Christopher Faylor <cgf@timesys.com>
-
- * devices.cc: Regenerate with correct name for dev_netdrive_storage.
-
-2005-05-06 Christopher Faylor <cgf@timesys.com>
-
- * Makefile.in (DLL_O_FILES): Add fhandler_netdrive.o.
- * fhandler_netdrive.cc: Placeholder file for future development.
- * devices.h (FH_NETDRIVE): Define new virtual device type.
- (netdrive_dev): Define.
- * devices.in (dev_netdrive_storage): Define.
- * devices.cc: Regenerate.
-
-2005-05-04 Corinna Vinschen <corinna@vinschen.de>
-
- * cygerrno.h (__set_errno): Remove useless parentheses.
-
-2005-05-04 Corinna Vinschen <corinna@vinschen.de>
-
- * cygerrno.h (__set_errno): Define as inline function here.
- (set_errno): Always define as call to __set_errno.
- * debug.cc (__set_errno): Move to cygerrno.h.
-
-2005-05-03 Christopher Faylor <cgf@timesys.com>
-
- * shared.cc (user_shared_initialize): Rework locking so that nothing is
- checked until cb is non-zero.
-
-2005-05-03 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::fchmod): Don't treat
- inability to open file as failure if only SetFileAttributes is
- going to be called. Only call set_file_attribute if really necessary.
-
-2005-05-03 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (get_inet_addr): Add missing __seterrno call.
-
-2005-05-01 Christopher Faylor <cgf@timesys.com>
-
- * fhandler_tty.cc (fhandler_tty_slave::read): Actually read input when
- vmin == vtime == 0.
-
-2005-04-30 Christopher Faylor <cgf@timesys.com>
-
- * environ.cc (spenv::force_into_environment): Rename from add_always.
- (spenv::add_if_exists): Rename from force.
- (build_env): Accommodate name changes. Make sure that stuff that is
- always supposed to be in the environment is actually added to the
- environment.
-
- * shared.cc (open_shared): Restore VirtualFree eliminated by 2005-04-28
- change.
-
-2005-04-30 Christopher Faylor <cgf@timesys.com>
-
- * errno.cc (errmap): Sort table.
-
-2005-04-29 Christopher Faylor <cgf@timesys.com>
-
- * errno.cc (errmap): Map ERROR_NETNAME_DELETED to ENOSHARE.
-
-2005-04-28 Corinna Vinschen <corinna@vinschen.de>
-
- * shared_info.h (cygwin_shared_address): Bump to a higher value to avoid
- collision with large data areas.
-
-2005-04-28 Christopher Faylor <cgf@timesys.com>
-
- * fhandler_console.cc (fhandler_console::get_tty_stuff): Accommodate
- changes to open_shared arguments.
- * fhandler_tape.cc (mtinfo_init): Ditto.
- * pinfo.cc (pinfo::init): Use open_shared rather than win32 mmap calls.
- * shared.cc (user_shared_initialize): Ditto.
- (memory_init): Ditto.
- (open_shared): Change to allow use a smore general mmap handler.
- * shared_info.h (shared_locations): Add SH_JUSTCREATE, SH_JUSTOPEN.
- (open_shared): Change declaration to match new usage.
-
- * autoload.cc (LoadDLLfuncEx2): Define in terms of LoadDLLfuncEx3.
- (LoadDLLfuncEx3): New macro.
-
-2005-04-27 Christopher Faylor <cgf@timesys.com>
-
- * fhandler.cc (fhandler_base::open_9x): Remove (broken) check for
- O_CREAT|O_EXCL.
- * syscalls.cc (open): Do O_CREAT|O_EXCL check here first.
-
-2005-04-26 Christopher Faylor <cgf@timesys.com>
-
- * environ.cc (build_env): Ensure that win32 array is properly filled in
- when a missing value has to be generated.
-
-2005-04-26 Christopher Faylor <cgf@timesys.com>
-
- * include/cygwin/version.h: Bump DLL minor number to 17.
-
-2005-04-24 Pavel Tsekov <ptsekov@gmx.net>
-
- * how-to-debug-cygwin.txt: Fix typo.
-
-2005-04-22 Christopher Faylor <cgf@timesys.com>
-
- * shared.cc (user_shared_initialize): Implement locking similar to
- shared_info when initializing shared region.
-
-2005-04-22 Christopher Faylor <cgf@timesys.com>
-
- * fhandler.h (dev_console::set_color): Define new function.
- (dev_console::set_default_attr): Ditto, moved from fhandler_console.
- (dev_console::fillin_info): Ditto. Accommodate this change throughout
- this file.
- (fhandler_console::get_win32_attr): Eliminate.
- * fhandler_console.cc (fhandler_console::get_tty_stuff): Properly set
- default attributes on initialization.
- (fhandler_console::open): Set current attributes rather than default
- color on open.
- (fhandler_console::get_win32_attr): Eliminate.
- (dev_console::set_color): New function. Move get_win32_attr stuff
- here.
- (dev_console::set_default_attr): New function, moved from
- fhandler_console.
- (dev_console::fillin_info): Ditto.
- (fhandler_console::char_command): Call set_color to set screen
- characteristics.
-
-2005-04-22 Christopher Faylor <cgf@timesys.com>
-
- * fhandler.cc (fhandler_base::read): Remove unused signal state tweaks.
- * fhandler.h (fhandler_pipe::create_selectable): Declare.
- (fhandler_fifo::close_one_end): Declare.
- * fhandler_fifo.cc (fhandler_fifo::close_one_end): Define.
- (fhandler_fifo::open_not_mine): Use close_one_end to close appropriate
- end of pipe.
- * pinfo.cc (_pinfo::commune_recv): Ditto.
- * pipe.cc (fhandler_pipe::create_selectable): Rename from
- create_selectable_pipe. Reorganize.
- (fhandler_pipe::create): Use create_selectable.
-
-2005-04-21 Christopher Faylor <cgf@timesys.com>
-
- * shared.cc (shared_info::initialize): Test previous version of shared
- memory magic rather than current version when determining if there has
- been a shared memory mismatch.
-
-2005-04-20 Christopher Faylor <cgf@timesys.com>
-
- * sigproc.cc (proc_subproc): Fix handling of waiting for pids with zero
- value.
-
- * strace.cc (strace::hello): Report parent pid of executing process.
-
-2005-04-20 Christopher Faylor <cgf@timesys.com>
-
- * path.cc (path_conv::check): Fix problem reading symlinks introduced
- in below change by reverting the change and adding an additional test
- for nonexistent files in /proc.
-
-2005-04-20 Christopher Faylor <cgf@timesys.com>
-
- * path.cc (path_conv::check): Punt when attempting to access a
- nonexistent directory or file in /proc.
-
-2005-04-19 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (alloc_sd): Remove DELETE bit from user's ACE if
- allow_traverse is set.
-
-2005-04-19 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din (pselect): Export.
- * select.cc (pselect): New function.
- * include/cygwin/version.h: Bump API minor number.
- * include/sys/select.h: Include signal.h. Declare pselect.
-
-2005-04-18 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (enum conn_state): Add connect_failed state.
- * fhandler_socket.cc (fhandler_socket::connect): Set connect_state to
- connect_failed when connect failed.
- * poll.cc (poll): Change errno to EINVAL if allocating memory fails,
- according to SUSv3. Add socket descriptors always to except_fds. Test
- for failed connect and set revents flags appropriately.
- * select.cc (set_bits): Set connect_state to connect_failed when
- select indicates failed nonblocking connect.
- (fhandler_dev_null::select_except): Set except_ready to false so that
- /dev/null is not always in except state.
- (peek_socket): Fix bogus conditional.
- (fhandler_socket::select_write): Treat all connect_states except
- unconnected equivalent to return consistent results.
- (fhandler_windows::select_except): Set except_ready to false so that
- /dev/windows is not always in except state.
-
-2005-04-18 Christopher Faylor <cgf@timesys.com>
-
- * include/cygwin/version.h: Bump DLL minor number to 16.
-
-2005-04-18 Pierre Humblet <pierre.humblet@ieee.org>
-
- * grp.cc (initgroups32): Return the correct value.
-
-2005-04-16 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_base::utimes_fs): Ignore
- ERROR_NOT_SUPPORTED to workaround Win9x weirdness.
- * path.cc (symlink_info::check): Remap ERROR_INVALID_FUNTION to
- ERROR_FILE_NOT_FOUND for the same reason.
-
-2005-04-16 Corinna Vinschen <corinna@vinschen.de>
- Pierre Humblet <pierre.humblet@ieee.org>
-
- * security.h (cygsidlist::addfromgr): Allow duplicate entries.
- (get_server_groups): Declare new function.
- * security.cc (is_group_member): Simplify.
- (get_server_groups): New function.
- (get_initgroups_sidlist): Call get_server_groups.
- (verify_token): Allow token when supplementary sids are not in
- /etc/group but are in the token.
- Streamline the code.
- * grp.cc (initgroups32): New implementation.
- (getgroups32): Handle case where the supplementary groups are set.
-
-2005-04-16 Corinna Vinschen <corinna@vinschen.de>
-
- * environ.cc (environ_init): Don't set traverse checking as default.
-
-2005-04-16 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_base::utimes_fs): Drop touching
- ChangeTime.
-
-2005-04-16 Christopher Faylor <cgf@timesys.com>
-
- * fhandler.cc (fhandler::dup): Duplicate flags, too.
- * fhandler.h (fhandler_fifo::owner): Eliminate.
- * fhandler_disk_file.cc (fhandler_base::fstat_fs): Handle on-disk
- devices better.
- (fhandler_base::fstat_helper): Ditto.
- * fhandler_fifo.cc (fhandler_fifo::fhandler_fifo): Don't initialize
- obsolete "owner".
- (fhandler_fifo::open_not_mine): Add some debugging. Duplicate correct
- handle when we own it.
- (fhandler_fifo::open): Set flags from input, not from first pipe. Flag
- that fork fixup is needed.
- (fhandler_fifo::dup): Set errno correctly when DuplicateHandle fails.
- * pinfo.cc (commune_send): Add debugging for fifo.
-
- * cygwin/version.h: Bump API minor version to 127 to reflect exporting
- of sigrelese.
-
-2005-04-14 Kazuhiro Fujieda <fujieda@jaist.ac.jp>
-
- * syscalls.cc (setuid32): Correct debugging output.
-
-2005-04-14 Christopher Faylor <cgf@timesys.com>
-
- * dcrt0.cc (do_global_dtors): Run DLL dtors.
- (__main): Don't rely on atexit to run dtors.
- (do_exit): Specifically call do_global_dtors here.
- (cygwin_exit): Ditto.
- * dll_init.cc (dll_global_dtors): Make global. Only run dtors once.
- (dll_list::init): Just set flag that dtors should be run. Don't rely on atexit.
- * dll_init.h (dll_global_dtors): Declare.
-
- * exceptions.cc (sigrelse): Define.
-
- * path.h (is_fs_device): New method.
- (is_lnk_special): Ditto.
- * fhandler_disk_file.cc (fhandler_disk_file::link): Use
- "is_lnk_special" rather than "is_lnk_symlink".
- * syscalls.cc (rename): Ditto.
-
- * hookapi.cc (ld_preload): Use colon as a separator rather than space.
-
-2005-04-13 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (class fhandler_socket): Remove utimes.
- * fhandler_socket.cc (fhandler_socket::utimes): Remove.
-
-2005-04-13 Corinna Vinschen <corinna@vinschen.de>
-
- * cygerrno.h (__seterrno_from_nt_status): Define. Always set Win32
- error code as well as errno. Use throughout where errno is set from
- NT status.
- (set_errno): Evaluate val only once.
- * fhandler_disk_file.cc (fhandler_base::fstat_by_handle): Fix typo in
- debug output.
- * fhandler_mem.cc (fhandler_dev_mem::open): Rely on
- __seterrno_from_nt_status setting Win32 error code in debug output.
- * fhandler_proc.cc (format_proc_uptime): Ditto.
- (format_proc_stat): Ditto.
- * fhandler_process.cc (format_process_stat): Ditto.
- * sysconf.cc (sysconf): Ditto.
-
-2005-04-13 Christopher Faylor <cgf@timesys.com>
-
- * fhandler.h (fhandler_base::utimes_fs): New method.
- * fhandler.cc (fhandler_base::utimes): Call utimes_fs if on-disk
- special file.
- * fhandler_disk_file.cc (fhandler_disk_file::utimes): Use utimes_fs.
- (fhandler_base::utimes_fs): Handle on-disk device files.
-
-2005-04-13 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::utimes): Don't set errno
- if open fails, it has already been set by open.
-
-2005-04-12 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (NtQueryVolumeInformationFile): Add.
- * fhandler.cc (fhandler_base::raw_write): Don't touch has_changed flag.
- * fhandler.h (enum change_state): Remove.
- (fhandler_base::status): Revert has_changed to a simple bit.
- (fhandler_base::fstat_helper): Add nAllocSize parameter. Rename
- ftCreationTime to ftChangeTime.
- * fhandler_disk_file.cc: Call fstat_helper with additional
- allocation size throughout.
- (fhandler_base::fstat_by_handle): Use NT native functions to get
- full file information on NT. Call fstat_helper with LastWriteTime
- as ctime, if ChangeTime is not available.
- (fhandler_base::fstat_by_name): Call fstat_helper with LastWriteTime
- as ctime.
- (fhandler_base::fstat_helper): Add comment. Drop special FAT
- handling since it's useless. Use nAllocSize for st_blocks if available.
- (fhandler_disk_file::touch_ctime): Only touch LastWriteTime.
- (fhandler_disk_file::fchmod): Set has_changed on 9x only.
- (fhandler_disk_file::fchown): Don't set has_changed.
- (fhandler_disk_file::facl): Ditto.
- (fhandler_disk_file::ftruncate): Ditto.
- (fhandler_disk_file::link): Set has_changed on 9x only and on original
- file only.
- (fhandler_base::open_fs): Don't set has_changed in O_TRUNC case.
- * ntdll.h (FILE_BASIC_INFORMATION): Define.
- (FILE_STANDARD_INFORMATION): Define.
- (FILE_INTERNAL_INFORMATION): Define.
- (FILE_EA_INFORMATION): Define.
- (FILE_ACCESS_INFORMATION): Define.
- (FILE_POSITION_INFORMATION): Define.
- (FILE_MODE_INFORMATION): Define.
- (FILE_ALIGNMENT_INFORMATION): Define.
- (FILE_NAME_INFORMATION): Don't define with arbitrary FileName size.
- (FILE_ALL_INFORMATION): Define.
- (FILE_INFORMATION_CLASS): Add FileAllInformation.
- (FILE_FS_VOLUME_INFORMATION): Define.
- (FS_INFORMATION_CLASS): Define.
- (NtQueryVolumeInformationFile): Define.
-
-2005-04-11 Corinna Vinschen <corinna@vinschen.de>
-
- Revert previous patch.
- * autoload.cc (GetVolumePathNamesForVolumeNameA): Remove.
- (GetVolumeNameForVolumeMountPointA): Add.
- * syscalls.cc (sync): Rewrite guid case to skip floppies also on
- Windows 2000.
-
-2005-04-11 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (sync): Use renamed has_get_volume_pathnames wincap.
- * wincap.h (wincaps::has_get_volume_pathnames): Rename from
- has_guid_volumes
- * wincap.cc: Accommodate above rename throughout. Set to false on
- Windows 2000.
-
-2005-04-08 Christopher Faylor <cgf@timesys.com>
-
- * pipe.cc (fhandler_pipe::open): Remove O_CREAT limitation.
-
-2005-04-07 Corinna Vinschen <corinna@vinschen.de>
-
- * syslog.cc (try_connect_guard): Remove useless conditionalized code.
-
-2005-04-07 Corinna Vinschen <corinna@vinschen.de>
-
- * syslog.cc: Include sys/socket.h.
- (try_connect_guard): New static variable.
- (syslogd_inited): Ditto.
- (syslogd_sock): Ditto.
- (try_connect_syslogd): New function to connect and write syslog to
- local syslogd.
- (vsyslog): Log to stderr if LOG_PERROR flag has been given to openlog.
- Try logging to syslogd. Use Event Log resp. log file as fallback.
- (closelog): Close socket to syslogd.
- * include/sys/syslog.h (_PATH_LOG): Define.
- (INTERNAL_NOPRI): Define if SYSLOG_NAMES is defined.
- (INTERNAL_MARK): Ditto.
- (struct _code): Ditto.
- (prioritynames): Ditto.
- (facilitynames): Ditto.
-
-2005-04-06 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (get_inet_addr): Add type parameter to return
- unix socket type. Read socket type from unix socket file.
- (fhandler_socket::bind): Write socket type to unix socket file.
- (fhandler_socket::connect): Return with errno EPROTOTYPE if
- socket type of socket doesn't match socket type of unix socket
- trying to connect to.
-
-2005-04-06 Pierre Humblet <pierre.humblet@ieee.org>
-
- * security.h (cygsidlist::addfromgr): Avoid duplicate entries.
- * grp.cc (initgrousp): Add syscall_printf.
- (setgroups): Add syscall_printf and make sure sids are added only once.
-
-2005-04-06 Christopher Faylor <cgf@timesys.com>
-
- * net.cc (cygwin_getservbyname): Return (possibly NULL) return value of
- dup_ent rather than assuming that tls buffer is valid.
- (cygwin_getservbyport): Ditto.
- (cygwin_gethostbyname): Ditto.
- (cygwin_gethostbyaddr): Ditto.
-
-2005-04-05 Christopher Faylor <cgf@timesys.com>
-
- * cygtls.cc (_cygtls::remove): Don't free or close stuff if we're being
- called in a "non-standard" way.
-
-2005-04-05 Christopher Faylor <cgf@timesys.com>
-
- * sync.h (muto::initforce): Delete flawed implementation.
- * pwdgrp.h (pwdgrp::pglock): Make static.
- * grp.cc (pwdgrp::pwdgrp): Eliminate use of initforce.
-
-2005-04-05 Christopher Faylor <cgf@timesys.com>
-
- * sync.h (muto::initforce): Force initialization even when name !=
- NULL.
- * grp.cc (pwdgrp::pwdgrp): Use initforce since the enclosing structure
- is !NO_COPY.
-
-2005-04-05 Christopher Faylor <cgf@timesys.com>
-
- * sync.h (muto::operator int): New operator.
- (locker): Remove unused class.
- (new_muto): Delete.
- (new_muto1): Ditto.
- (new_muto_name): Ditto.
- * cygheap.cc (cygheap_setup_for_child): Reflect use of static storage
- for muto rather than pointer.
- (_csbrk): Ditto.
- (_cmalloc): Ditto.
- (_cmalloc): Ditto.
- (_cfree): Ditto.
- * cygheap.h (cwdstuff::cwd_lock): Ditto.
- (cwdstuff::get_drive): Ditto.
- * cygmalloc.h (__malloc_lock): Ditto.
- (__malloc_unlock): Ditto.
- * cygtls.cc (sentry::lock): Ditto.
- (sentry::sentry): Ditto.
- (~sentry): Ditto.
- (_cygtls::init): Ditto.
- * dcrt0.cc: Ditto.
- (cygwin_atexit): Ditto.
- (cygwin_exit): Ditto.
- * debug.cc (lock_debug::locker): Ditto.
- (lock_debug::lock_debug): Ditto.
- (lock_debug::unlock): Ditto.
- (debug_init): Ditto.
- * dtable.cc (dtable::init_lock): Ditto.
- * dtable.h (dtable::lock_cs): Ditto.
- (dtable::lock): Ditto.
- (dtable::unlock): Ditto.
- * exceptions.cc (mask_sync): Ditto.
- (sighold): Ditto.
- (set_process_mask_delta): Ditto.
- (set_signal_mask): Ditto.
- (events_init): Ditto.
- * grp.cc (pwdgrp::pwdgrp): Ditto.
- * malloc_wrapper.cc (mallock): Ditto.
- (malloc_init): Ditto.
- * path.cc (cwdstuff::cwd_lock): Ditto.
- (cwdstuff::get_hash): Ditto.
- (cwdstuff::get_hash): Ditto.
- (cwdstuff::init): Ditto.
- (cwdstuff::set): Ditto.
- (cwdstuff::get): Ditto.
- * pwdgrp.h (pwdgrp::pglock): Ditto.
- (pwdgrp::refresh): Ditto.
- * sigproc.cc (sync_proc_subproc): Ditto.
- (get_proc_lock): Ditto.
- (proc_subproc): Ditto.
- (_cygtls::remove_wq): Ditto.
- (proc_terminate): Ditto.
- (sigproc_init): Ditto.
- * timer.cc (lock_timer_tracker::protect): Ditto.
- (lock_timer_tracker::lock_timer_tracker): Ditto.
- (lock_timer_tracker::~lock_timer_tracker): Ditto.
- * wininfo.cc (wininfo::_lock;): Ditto.
- (wininfo::winthread): Ditto.
- (operator HWND): Ditto.
- (wininfo::lock): Ditto.
- (wininfo::release): Ditto.
- * wininfo.h (wininfo::_lock;): Ditto.
-
-2005-04-04 Christopher Faylor <cgf@timesys.com>
-
- * path.cc (path_conv::check): Only check for PC_NO_ACCESS_CHECK in end
- component.
-
-2005-04-04 Corinna Vinschen <corinna@vinschen.de>
-
- * dcrt0.cc (dll_crt0_1): Don't call set_cygwin_privileges on 9x.
-
- * fhandler.h (enum change_state): Add.
- (fhandler_base::status): Add a bit to has_changed flag.
- (fhandler_base::has_changed): Implement with type change_state.
- * fhandler.cc (fhandler_base::raw_write): Accommodate type change
- of has_changed.
- * fhandler_disk_file.cc (fhandler_disk_file::touch_ctime): Also
- touch modification time if has_changed == data_changed.
- (fhandler_disk_file::fchmod): Also open on 9x, otherwise we can't
- touch ctime. Accommodate type change of has_changed.
- (fhandler_disk_file::fchown): Accommodate type change of has_changed.
- (fhandler_disk_file::facl): Ditto.
- (fhandler_disk_file::ftruncate): Ditto.
- (fhandler_disk_file::link): Ditto.
- (fhandler_base::open_fs): Ditto.
-
-2005-04-03 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.cc (cygheap_init): Accommodate set_process_privilege change.
- * cygheap.h (cygheap_user::curr_primary_token): New member.
- (cygheap_user::primary_token): New method.
- (cygheap_user::deimpersonate): Always revert to processes'
- impersonation token.
- (cygheap_user::reimpersonate): Set processes' or setuid token as
- necessary.
- (cygheap_user::has_impersonation_tokens): Look for curr_primary_token
- value.
- (cygheap_user::close_impersonation_tokens): Close curr_primary_token
- here if necessary. Don't reset token values to NO_IMPERSONATION since
- that's done in uinfo_init anyway.
- (init_cygheap::luid): New LUID array keeping privilege LUIDs.
- * cygtls.cc (_cygtls::init_thread): Call cygheap->user.reimpersonate.
- * dcrt0.cc (hProcToken): New global variable to keep process token.
- (hProcImpToken): Ditto for process impersonation token.
- (dll_crt0_0): Open process token here once. Duplicate to create
- hProcImpToken.
- (dll_crt0_1): Call set_cygwin_privileges.
- * environ.cc (allow_ntea): Drop duplicate declaration.
- (allow_smbntsec): Ditto.
- (set_traverse): Only set allow_traverse here.
- (environ_init): Ditto.
- * fhandler_disk_file.cc (fhandler_disk_file::fchmod): Drop call to
- enable_restore_privilege.
- (fhandler_disk_file::fchown): Ditto.
- (fhandler_disk_file::facl): Ditto.
- * fork.cc (fork_child): Move call to cygheap->user.reimpersonate after
- syn with parent. Call set_cygwin_privileges.
- * grp.cc (internal_getgroups): Use hProcImpToken instead of opening
- process token.
- * path.cc (fs_info::update): Bypass traverse checking when retrieving
- volume information using push/pop_thread_privileges.
- * registry.cc (load_registry_hive): Drop setting restore privilege
- since it's already set if available.
- * sec_helper.cc: Include cygtls.h.
- (cygpriv): Privilege string array.
- (privilege_luid): New function, evaluate LUID from cygpriv_idx.
- (privilege_luid_by_name): New function, evaluate LUID from privilege
- string.
- (privilege_name): New function, evaluate privilege string from
- cygpriv_idx.
- (set_privilege): New static function called by set_process_privilege
- and set_thread_privilege. Call privilege_luid to get privilege LUID.
- Fix bug in return value evaluation. Improve debug output.
- (set_cygwin_privileges): New function.
- (set_process_privilege): Remove.
- (enable_restore_privilege): Remove.
- * security.cc (allow_traverse): New global variable.
- (sys_privs): Change type to cygpriv_idx and store privilege indices
- instead of strings.
- (SYSTEM_PRIVILEGES_COUNT): Renamed from SYSTEM_PERMISSION_COUNT.
- (get_system_priv_list): Don't use numerical constant in malloc call.
- Use privilege_luid to get privilege LUIDs.
- (get_priv_list): Call privilege_luid_by_name to get LUIDs. Improve
- inner privilege LUID comparison loop.
- (create_token): Enable create token privilege using
- push/pop_self_privileges. Use hProcToken instead of opening process
- token. Use default DACL when duplicating token.
- (subauth): Enable tcb privilege using push/pop_self_privileges.
- Use sec_none instead of homw made security attributes when duplicating
- token.
- (check_file_access): Don't duplicate access token, use active
- impersonation token as is.
- * security.h (enum cygpriv_idx): New enumeration type enumerating
- possible privileges.
- (privilege_luid): Declare new function.
- (privilege_luid_by_name): Ditto.
- (privilege_name): Ditto.
- (allow_traverse): Declare.
- (set_privilege): Declare function.
- (set_process_privilege): Define as macro.
- (enable_restore_privilege): Remove declaration.
- (_push_thread_privilege): Define macro.
- (push_thread_privilege): Ditto.
- (pop_thread_privilege): Ditto.
- (pop_self_privilege): Ditto.
- * spawn.cc (spawn_guts): Use cygheap->user.primary_token instead of
- cygheap->user.token.
- * syscalls.cc (statvfs): Bypass traverse checking when retrieving
- volume information using push/pop_thread_privileges. Rearrange code
- to simplify push/pop bracketing.
- (seteuid32): Use hProcToken instead of opening process token. Call
- cygheap->user.deimpersonate instead of RevertToSelf. Create
- impersonation token from primary internal or external token. Set
- cygheap->user.curr_primary_token and cygheap->user.current_token
- privileges once here. Drop "failed" and "failed_ptok" labels.
- Drop setting DefaultDacl of process token.
- (setegid32): Use hProcToken and hProcImpToken instead of opening
- process token. Always reimpersonate afterwards.
- * uinfo.cc (cygheap_user::init): Use hProcToken instead of opening
- process token.
- (internal_getlogin): Ditto. Set hProcImpToken, too.
- (uinfo_init): Initialize cygheap->user.curr_primary_token.
- * winsup.h (hProcToken): Declare.
- (hProcImpToken): Declare.
-
-2005-04-03 Corinna Vinschen <corinna@vinschen.de>
-
- Unify usage of CYG_MAX_PATH throughout. Change buffers from
- size CYG_MAX_PATH + 1 to CYG_MAX_PATH. Change length tests
- accordingly.
-
-2005-04-02 Christopher Faylor <cgf@timesys.com>
-
- * include/cygwin/version.h: Bump DLL minor number to 15.
-
-2005-04-01 Corinna Vinschen <corinna@vinschen.de>
-
- * fork.cc (fork_child): Add missing __stdcall.
-
-2005-04-01 Christopher Faylor <cgf@timesys.com>
-
- * sigproc.cc (create_signal_arrive): New (temporary?) function to
- create signal_arrived event.
- (sigproc_init): Use create_signal_arrived.
- * fork.cc (fork_child): Create signal_arrived early.
-
-2005-04-01 Corinna Vinschen <corinna@vinschen.de>
-
- * fork.cc (fork_child): Fixup SYSV IPC shared memory before fixing
- up fdtab.
-
-2005-03-31 Corinna Vinschen <corinna@vinschen.de>
-
- * gentls_offsets: Add '-m32' flag to native compiler call to satisfy
- cross platform builds.
-
-2005-03-31 Corinna Vinschen <corinna@vinschen.de>
-
- * errno.cc (NO_SYSTEM_RESOURCES): Map to EAGAIN.
- (NONPAGED_SYSTEM_RESOURCES): Ditto.
- (PAGED_SYSTEM_RESOURCES): Ditto.
- (WORKING_SET_QUOTA): Ditto.
- (PAGEFILE_QUOTA): Ditto.
- (COMMITMENT_LIMIT): Ditto.
-
-2005-03-30 Christopher Faylor <cgf@timesys.com>
-
- * environ.cc (spenvs): Re-force SYSTEMROOT to always be included in
- environment.
- (build_env): Ditto.
-
-2005-03-30 Christopher Faylor <cgf@timesys.com>
-
- * environ.cc (spenv::retrieve): Revert most of previous change.
- (build_env): Ditto. Rework to track environment variables which need
- to always be in the windows environment in a separate array.
-
-2005-03-30 Igor Pechtchanski <pechtcha@cs.nyu.edu>
-
- * path.cc (symlink_info::case_check): Ignore trailing characters
- in paths when comparing case.
-
-2005-03-30 Christopher Faylor <cgf@timesys.com>
-
- * environ.h (win_env::immediate): Declare new field.
- (win_env::operator = ): Declare new operator.
- (win_env::reset): Declare new function.
- (win_env::~win_env): Declare new destructor.
- (getwinenv): Add optional third argument to declaration.
- * environ.cc (conv_envvars): Accommodate immediate field.
- (win_env::operator =): Define new operator.
- (win_env::~win_env): Define new destructor.
- (win_env::add_cache): Add value to environment immediately if
- "immediate" is set.
- (getwinenv): Accept optional third argument which will be used to store
- "cached" values to avoid overwriting real cache.
- (spenv::force): Declare new field.
- (spenvs): Accommodate force field. Add "PATH=" with force set to true.
- (spenv::retrieve): Avoid duping anything if we're not building an
- envblock.
- (build_env): Ditto. Use size of potentially constructed new
- environment block to determine if we need to create an environment
- block. Pass getwinenv temporary storage to avoid inappropriately
- overwriting the environment cache.
-
-2005-03-29 Eric Blake <ebb9@byu.net>
-
- * include/limits.h (NAME_MAX): New define.
- (PATH_MAX): POSIX allows PATH_MAX to include trailing NUL.
-
-2005-03-29 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (is_floppy): Make externally available.
- * path.h (is_floppy): Declare.
- * syscalls.cc (sync): Check for floppies on A: and B: in guid case.
- Don't call setmntent in non-guid case but evaluate drive bit mask
- locally.
-
-2005-03-29 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_process.cc: Re-add exename.
-
-2005-03-28 Christopher Faylor <cgf@timesys.com>
-
- * include/ctype.h: Accommodate building in newlib.
-
-2005-03-28 Christopher Faylor <cgf@timesys.com>
-
- * timer.cc (getitimer): Check that ovalue is a valid pointer, not just
- NULL.
-
-2005-03-28 Christopher Faylor <cgf@timesys.com>
-
- * timer.cc (timer_tracker::settime): Set times to zero when just
- cancelling a timer.
-
-2005-03-28 Christopher Faylor <cgf@timesys.com>
-
- * cygthread.cc (cygthread::detach): Revert to just waiting for thread
- event since waiting for anything else is racy.
- * timer.cc (timer_tracker::hcancel): Rename from cancel.
- (timer_tracker::cancel): New method.
- (timer_tracker::th): Remove.
- (timer_tracker::~timer_tracker): Call cancel method.
- (timer_tracker::timer_tracker): Ditto.
- (timer_tracker::timer_tracker): Always, clear cancel, even though it is
- probably not strictly necessary for ttstart.
- (timer_thread): Accommodate cancel -> hcancel rename.
- (timer_tracker::settime): Ditto.
- (timer_tracker::gettime): Ditto.
- (timer_delete): Ditto.
-
- * cygwin.din: Export _ctype_.
- * include/ctype.h: Mark that _ctype_ is imported.
-
-2005-03-28 Christopher Faylor <cgf@timesys.com>
-
- * timer.cc (timer_tracker::timer_tracker): Eliminate simple
- constructor.
- (ttstart): Fully initialize.
-
- * errno.cc: Fix typo introduced in previous change.
-
-2005-03-28 Eric Blake <ebb9@byu.net>
-
- * errno.cc (FILENAME_EXCED_RANGE): Map to ENAMETOOLONG.
-
-2005-03-27 Christopher Faylor <cgf@timesys.com>
-
- * signal.cc (nanosleep): Revert tv_sec < 0 check as it is fixed
- properly in the below change to hires.h.
-
-2005-03-27 Pierre Humblet <pierre.humblet@ieee.org>
-
- * times.cc (hires_ms::usecs): Compare the difference.
- * hires.h: Add parentheses to HIRES_DELAY_MAX.
-
-2005-03-26 Christopher Faylor <cgf@timesys.com>
-
- * timer.cc (nanosleep): Treat tv_sec < 0 as invalid.
-
- * include/search.h: Make declarations consistent with newlib.
-
-2005-03-26 Pierre Humblet <pierre.humblet@ieee.org>
- Christopher Faylor <cgf@timesys.com>
-
- * wininfo.h (wininfo::timer_active): Delete.
- (wininfo::itv): Ditto.
- (wininfo::start_time): Ditto.
- (wininfo::window_started): Ditto.
- (wininfo::getitimer): Ditto.
- (wininfo::setitimer): Ditto.
- (wininfo::wininfo): Ditto.
- (wininfo::lock): New method.
- (wininfo::release): Ditto.
- * window.cc: Use new lock/acquire wininfo methods throughout.
- (wininfo::wininfo): Delete
- (wininfo::getitimer): Ditto.
- (wininfo::setitimer): Ditto.
- (getitimer): Ditto.
- (setitimer): Ditto.
- (ualarm): Ditto.
- (alarm): Ditto.
- (wininfo::lock): Define new function.
- (wininfo::release): Ditto.
- (wininfo::process): Delete WM_TIMER handling.
- * timer.cc (struct timetracker): Delete it, flags. Add it_interval,
- interval_us, sleepto_us, running, init_muto(), syncthread, and
- gettime().
- (ttstart): Make NO_COPY.
- (lock_timer_tracker): New class.
- (timer_tracker::timer_tracker): Distinguish ttstart case.
- (timer_tracker::~timer_tracker): New destructor. Clean out events, and
- reset magic.
- (timer_tracker::init_muto): New method.
- (to_us): Round up as per POSIX.
- (timer_thread): Reorganize to match timer_tracker::settime and
- timer_tracker::gettime. Call sig_send without wait. Call
- auto_release.
- (timer_tracker::settime): Reorganize logic to avoid race. Call gettime
- to recover old value.
- (timer_tracker::gettime): New method.
- (timer_create): Properly set errno on invalid timerid. Use new
- lock_timer_tracker method.
- (timer_delete): Ditto. Simplify code slightly.
- (timer_gettime): New function.
- (fixup_timers_after_fork): Reinit ttstart.
- (getitimer): New implementation.
- (setitimer): Ditto.
- (ualarm): Ditto.
- (alarm): Ditto.
- * cygwin.din: Export timer_gettime.
- * winsup.h: Remove has has_visible_window_station declaration.
-
-2005-03-26 Christopher Faylor <cgf@timesys.com>
-
- * Makefile.in (DLL_OFILES): Add lsearch.o.
- * cygthread.h (cygthread::notify_detached): New element.
- (cygthread::cygthread): Take optional fourth argument signifying event
- to signal on thread completion.
- * cygthread.cc (cygthread::stub): Signal notify_detached event, if it
- exists.
- (cygthread::cygthread): Initialize notify_detached from fourth argument.
- (cygthread::detach): Wait for notify_detached field is present.
-
- * lsearch.cc: New file.
- * search.h: Ditto.
- * include/cygwin/version.h: Bump API minor number to 126.
- * cygwin.din: Export lsearch, lfind.
-
-2005-03-23 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (fhandler_socket::secret_event): Remove.
- (fhandler_socket::af_local_set_secret): New function combining former
- set_connect_secret and get_connect_secret into one function.
- (fhandler_socket::af_local_setblocking): Rename from eid_setblocking.
- (fhandler_socket::af_local_unsetblocking): Rename from
- eid_unsetblocking.
- (fhandler_socket::af_local_set_cred): New method.
- (fhandler_socket::af_local_copy): New method.
- (fhandler_socket::af_local_recv_secret): New method.
- (fhandler_socket::af_local_send_secret): New method.
- (fhandler_socket::af_local_recv_cred): Rename from eid_recv.
- (fhandler_socket::af_local_send_cred): Rename from eid_send.
- (fhandler_socket::af_local_accept): New method.
- (fhandler_socket::af_local_set_sockpair_cred): Rename from
- set_socketpair_eids.
- (fhandler_socket::eid_accept): Remove.
- (fhandler_socket::eid_connect): Remove.
- (fhandler_socket::set_connect_secret): Remove.
- (fhandler_socket::get_connect_secret): Remove.
- (fhandler_socket::create_secret_event): Remove.
- (fhandler_socket::check_peer_secret_event): Remove.
- (fhandler_socket::signal_secret_event): Remove.
- (fhandler_socket::close_secret_event): Remove.
- (fhandler_socket::sec_event_accept): Remove.
- (fhandler_socket::sec_event_connect): Remove.
- * fhandler_socket.cc (secret_event_name): Remove.
- (fhandler_socket::af_local_set_sockpair_cred): Rename from
- set_socketpair_eids.
- (fhandler_socket::af_local_setblocking): Rename from eid_setblocking.
- (fhandler_socket::af_local_unsetblocking): Rename from
- eid_unsetblocking.
- (fhandler_socket::af_local_recv_secret): New function to receive
- AF_LOCAL connect secret over socket itself.
- (fhandler_socket::af_local_send_secret): New function to send AF_LOCAL
- connect secret over socket itself.
- (fhandler_socket::af_local_recv_cred): Rename from eid_recv.
- (fhandler_socket::af_local_send_cred): Rename from eid_send.
- (fhandler_socket::eid_connect): Remove.
- (fhandler_socket::af_local_connect): Take over connect side handling
- of AF_LOCAL secret and credential handshake.
- (fhandler_socket::eid_accept): Remove.
- (fhandler_socket::af_local_accept): New method, take over accept side
- handling of AF_LOCAL secret and credential handshake.
- (fhandler_socket::af_local_set_cred): New method, set eid credentials
- to start values.
- (fhandler_socket::af_local_copy): New method, copy secret and
- credentials to another socket.
- (fhandler_socket::af_local_set_secret): New function combining former
- set_connect_secret and get_connect_secret into one function.
- (fhandler_socket::create_secret_event): Remove.
- (fhandler_socket::signal_secret_event): Remove.
- (fhandler_socket::close_secret_event): Remove.
- (fhandler_socket::check_peer_secret_event): Remove.
- (fhandler_socket::sec_event_connect): Remove.
- (fhandler_socket::sec_event_accept): Remove.
- (fhandler_socket::fixup_after_fork): Drop secret_event handling.
- (fhandler_socket::bind): Call af_local_set_secret.
- (fhandler_socket::connect): Call af_local_set_cred and af_local_connect.
- (fhandler_socket::listen): Call af_local_set_cred.
- (fhandler_socket::accept): Call af_local_copy and af_local_accept on
- accepted socket.
- (fhandler_socket::close): Don't call close_secret_event.
- (fhandler_socket::set_close_on_exec): Don't set secret_event
- inheritance.
- * net.cc (cygwin_getsockopt): Add debug output.
- (socketpair): Call af_local_set_sockpair_cred instead of
- set_socketpair_eids.
- * select.cc (set_bits): Drop AF_LOCAL special handling in case
- of except bit set.
-
-2005-03-23 Christopher Faylor <cgf@timesys.com>
-
- * include/ctype.h: Always define macros when inside cygwin.
- (isblank): New macro.
-
-2005-03-23 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (fhandler_socket::eid_connect): Make private.
- (fhandler_socket::set_connect_secret): Ditto.
- (fhandler_socket::get_connect_secret): Ditto.
- (fhandler_socket::create_secret_event): Ditto. Remove secret argument.
- (fhandler_socket::check_peer_secret_event): Ditto.
- (fhandler_socket::signal_secret_event): Make private.
- (fhandler_socket::close_secret_event): Ditto.
- (fhandler_socket::sec_event_accept): New private method.
- (fhandler_socket::sec_event_connect): Ditto.
- (fhandler_socket::af_local_connect): New public method.
- * fhandler_socket.cc: Use 'struct sockaddr' and 'struct sockaddr_in'
- rather than just 'sockaddr' and 'sockaddr_in' throughout.
- (fhandler_socket::eid_connect): Drop AF_LOCAL/SOCK_STREAM test.
- (fhandler_socket::create_secret_event): Remove secret argument.
- Always use connect_secret instead.
- (fhandler_socket::check_peer_secret_event): Ditto.
- (fhandler_socket::sec_event_connect): New method, combining entire
- secret event handshake on connect side.
- (fhandler_socket::af_local_connect): New method, combining secret
- event handshake and eid credential transaction on connect side, to
- be called from select.
- (fhandler_socket::sec_event_accept): New method, combining entire
- secret event handshake on accept side.
- (fhandler_socket::connect): Drop secret, use connect_secret instead.
- Move entire secret event handshake to sec_event_connect.
- (fhandler_socket::accept): Move entire secret event handshake to
- sec_event_accept.
- * select.cc (set_bits): Just call af_local_connect here.
-
-2005-03-23 Christopher Faylor <cgf@timesys.com>
-
- * include/cygwin/version.h: Change comment for most recent API version
- bump to reflect new additions to the DLL and to remove change obsoleted
- by the previous checkin.
-
-2005-03-23 Christopher Faylor <cgf@timesys.com>
-
- * include/ctype.h: New file.
- * ctype.cc: Ditto.
- * Makefile.in: Add ctype.o to DLL_OFILES.
- * cygwin.din: Remove _ctype_ptr (for now?).
-
-2005-03-22 Christopher Faylor <cgf@timesys.com>
-
- * Makefile.in (DLL_OFILES): Add hookapi.o. Eliminate some cruft.
- * cygheap.h (cygheap_types): Add new enum: HEAP_1_HOOK.
- (hook_chain): New struct.
- (init_cygheap::hooks): Define new element.
- * cygheap.cc (cygheap_fixup_in_child): Zero hook chain on exec.
- * dcrt0.cc (dll_crt0_1): Call ld_preload just before calling main function.
- * external.cc (cygwin_internal): Implement CW_HOOK.
- * fork.cc (fork_child): Call fixup_hooks_after_fork.
- * init.cc (cygwin_hmodule): Reinstate after a long absence.
- * include/sys/cygwin.h: Define CW_HOOK.
- * hookapi.cc: New file.
-
- * select.cc (start_thread_socket): Add debugging output.
-
- * fhandler_disk_file.cc (fhandler_disk_file::fchmod): gcc 4.x
- accommodation.
-
- * fhandler_socket.cc (fhandler_socket::connect): Make sure that err is
- initialized.
-
-2005-03-22 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din (__ctype_ptr): Export.
- * include/cygwin/version.h: Bump API minor version.
-
-2005-03-21 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (class cygthread): Remove forward declaration.
-
-2005-03-21 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (class cygthread): Forward declare.
- (fhandler_socket::sec_pipe): Remove.
- (fhandler_socket::eid_pipe_name): Remove.
- (fhandler_socket::eid_setblocking): New private method.
- (fhandler_socket::eid_unsetblocking): Ditto
- (fhandler_socket::eid_recv): Ditto
- (fhandler_socket::eid_send): Ditto
- (fhandler_socket::eid_accept): Ditto
- (fhandler_socket::eid_connect): New public method.
- * fhandler_socket.cc (ASYNC_MASK): Move to beginning of file.
- (fhandler_socket::eid_pipe_name): Remove.
- (fhandler_socket::set_socketpair_eids): Move down to fhandler_socket
- methods.
- (fhandler_socket::fhandler_socket): Drop initializing sec_pipe.
- (fhandler_socket::~fhandler_socket): Drop closing sec_pipe.
- (fhandler_socket::eid_setblocking): New method.
- (fhandler_socket::eid_unsetblocking): New method.
- (fhandler_socket::eid_recv): New method.
- (fhandler_socket::eid_send): New method.
- (fhandler_socket::eid_connect): New method.
- (fhandler_socket::eid_accept): New method.
- (fhandler_socket::dup): Drop sec_pipe handling.
- (fhandler_socket::connect): Fix WinSock error handling. Prepare
- eid credential transaction. Call eid_connect on successful connect.
- (fhandler_socket::listen): Drop creating sec_pipe.
- (fhandler_socket::accept): Slightly simplify code. Call eid_accept
- on accepted socket.
- (fhandler_socket::getpeereid): Reshuffle code for readability. Fix
- test for invalid pid.
- * select.cc (set_bits): Call eid_connect on successfully connected
- socket.
-
-2005-03-19 Christopher Faylor <cgf@timesys.com>
-
- * child_info.h (fork_info): Use different method to alias variable.
- (spawn_info): Ditto.
- * cxx.cc (__cxa_guard_acquire): New function (needed for gcc 4.x).
- (__cxa_guard_release): Ditto.
- * devices.in: Make sure stuff is correctly bracketed (for gcc 4.x).
- * devices.cc: Regenerate.
- * fhandler.h (fhandler_disk_file::fchmod): Avoid left coercion (for gcc
- 4.x).
- * smallprint.c (__rn): Declare as __fastcall since gcc 4.x complains
- about use of regparm, for some reason.
- * sync.h (sync::init_lock): Remove.
- * sync.cc (sync::init_lock): Ditto.
-
-2005-03-18 Christopher Faylor <cgf@timesys.com>
-
- * net.cc (cygwin_getprotobyname): Don't try to be fancy with return
- values.
- (cygwin_getprotobynumber): Ditto.
-
-2005-03-17 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::utimes): Handle opening
- directories under 9x gracefully.
-
-2005-03-17 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::connect): Always set sun_path
- in case of a successful or pending connect.
- (fhandler_socket::accept): Don't run secret event and eid credential
- transactions if OS accept returned WSAEWOULDBLOCK.
-
-2005-03-16 Christopher Faylor <cgf@timesys.com>
-
- * fhandler_tape.cc (get_ll): This is a generally useful function so
- move it
- * winsup.h (get_ll): to here.
- * security.cc (get_token_group_sidlist): Use get_ll to figure out the
- long long version of the luid since QuadPart is not part of the
- standard Windows API.
-
-2005-03-16 Christopher Faylor <cgf@timesys.com>
-
- * dir.cc: Rename opendir_* to dirent_* throughout.
- (opendir_states): Move and rename.
- * fhandler.h (dirent_states): to here.
- * fhandler_disk_file.cc (fhandler_disk_file::readdir): Use raw readdir
- when skipping through entries since it is keeping track of "." and
- "..".
- (fhandler_cygdrive::seekdir): Use fhandler_disk_file::readdir to do
- everything.
- * fhandler_virtual.cc (fhandler_virtual::opendir): Set flag indicating
- that we provide . and ..
- (fhandler_virtual::seekdir): Ditto.
- (fhandler_virtual::rewinddir): Ditto.
- * fhandler_registry.cc (fhandler_registry::rewinddir): Ditto.
-
-2005-03-16 Christopher Faylor <cgf@timesys.com>
-
- * cygtls.cc (free_local): New macro.
- (_cygtls::remove): Use free_local to free known-malloced local
- variables.
- * cygtls.h: Mark some variables as "malloced".
- * net.cc (enum struct_type): Rename from is_* to t_* for clarity.
- (dump_protoent): Delete.
- (dup_ent): New macro.
- (__dup_ent): Renamed from dup_ent. Change arguments for convenience.
- Replace first argument with newly alloced value. Allocate a rounded
- number of bytes in an attempt to try to reuse space. Subsume
- "dump_protent".
- (cygwin_getprotobyname): Simplify using new dup_ent functionality.
- (cygwin_getprotobynumber): Ditto.
- (cygwin_getservbyname): Ditto.
- (cygwin_getservbyport): Ditto.
- (cygwin_gethostname): Ditto.
- (cygwin_gethostbyname): Ditto.
- * tlsoffsets.h: Regenerate.
-
- * syslog.cc (openlog): Use NULL rather than 0, for consistency with the
- rest of cygwin.
- (pass_handler::initialize): Use unbuffered I/O in pass one.
-
-2005-03-15 Christopher Faylor <cgf@timesys.com>
-
- * errno.cc (errmap): Correct typo in previous change.
-
-2005-03-15 Christopher Faylor <cgf@timesys.com>
-
- * cygtls.cc (_cygtls::remove): Free process_ident, if it exists.
-
- * errno.cc (errmap): ERROR_DISK_CORRUPT -> EIO.
-
-2005-03-11 Christopher Faylor <cgf@timesys.com>
-
- * path.h (pathconv_arg): Define PC_NO_ACCESS_CHECK.
- (path_types): Define PATH_NO_ACCESS_CHECK == PC_NO_ACCESS_CHECK.
- * path.cc (symlink_info::check_sysfile): Move to symlink_info class and
- eliminate arguments that are part of class. Use set_error.
- (symlink_info::check_shortcut): Ditto.
- (symlink_info::set_error): New function.
- (path_conv::check): Pass PC_NO_ACCESS_CHECK to symlink_info::check.
- (symlink_info::check): Preserve PC_NO_ACCESS_CHECK in pflags. Use
- set_error.
-
-2005-03-10 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (is_floppy): New function.
- (setmntent): Drop floppy drives on A: and B: from logical drive DWORD.
- * syscalls.cc (sync): Don't sync floppies on A: and B:.
-
-2005-03-10 Christopher Faylor <cgf@timesys.com>
-
- * autoload.cc (LoadDLLprime): Use nocopy segment or forked processes
- will not initialize properly.
-
-2005-03-10 Christopher Faylor <cgf@timesys.com>
-
- * autoload.cc (LoadDLLprime): Scrap use of .linkonce and just use an
- ifdef guard to load .foo_init into data segment.
-
- * dcrt0.cc (initial_env): Allow colon or space as CYGWIN_DEBUG
- separator for consistency.
-
-2005-03-09 Christopher Faylor <cgf@timesys.com>
-
- * pinfo.h (pinfo::pinfo): Clear more elements in the constructor.
-
-2005-03-09 Christopher Faylor <cgf@timesys.com>
-
- * net.cc (dup_ent): Revert older stupid test for null. Don't copy name
- if it is NULL.
-
-2005-03-09 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::eid_pipe_name): Fix format
- string.
- (fhandler_socket::connect): Set sun_path before running eid credential
- transaction. Run transaction only if OS connect was successful.
- (fhandler_socket::accept): Run transaction only if OS accept was
- successful.
-
-2005-03-09 Corinna Vinschen <corinna@vinschen.de>
-
- * signal.cc (sigprocmask): Rename first parameter to "how".
- (handle_sigprocmask): Ditto. Check "how" for being a valid "how" value.
- Fix call order in case of wrong "how" value.
-
-2005-03-09 Christopher Faylor <cgf@timesys.com>
-
- * net.cc (dup_ent): Revert previous stupid change.
-
-2005-03-09 Christopher Faylor <cgf@timesys.com>
-
- * net.cc (dup_ent): Avoid dereferencing a null pointer in a debug_printf.
-
-2005-03-09 Christopher Faylor <cgf@timesys.com>
-
- * path.cc (path_conv::check): Treat ENOSHARE similarly to ENOENT when
- determining if there was a problem with a symlink.
-
-2005-03-08 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::listen): Don't limit the number
- of pipe instances.
-
-2005-03-08 Christopher Faylor <cgf@timesys.com>
-
- * pinfo.cc (pinfo::exit): Right shift exit value by eight when not
- started in a cygwin environment.
-
-2005-03-07 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (mmap64): Handle MAP_AUTOGROW flag.
- (fhandler_disk_file::mmap): Ditto. Clean conditional for readability.
- * include/sys/mman.h: Add MAP_AUTOGROW flag.
- * include/cygwin/version.h: Bump API minor version.
-
-2005-03-08 Christopher Faylor <cgf@timesys.com>
-
- * dcrt0.cc (dll_crt0_0): Eliminate muto::init call.
- * sync.h (locker): New, currently unused class.
- (muto::init): Eliminate.
- * sync.cc (muto::init): Ditto.
- (muto::init): Eliminate critical section lock and instead use name as a
- guard to prevent against multiple attempts to initialize the same muto.
-
- * pinfo.cc (pinfo::init): Set myself procinfo when not execing and pid
- matches windows pid or cygwin pid.
-
-2005-03-06 Pavel Tsekov <ptsekov@gmx.net>
-
- * path.cc (mount_info::read_cygdrive_info_from_registry): Use the user
- prefix if it exists.
-
-2005-03-06 Christopher Faylor <cgf@timesys.com>
-
- * sync.h (sync::init_lock): Declare new static member.
- (sync::init()): Declare new static function.
- * sync.cc (sync::init): Define.
- (sync::init): Lock attempt to initialize a muto to stop multiple
- threads from colliding.
- * dcrt0.cc (dll_crt0_0): Initialize muto environment.
-
-2005-03-06 Christopher Faylor <cgf@timesys.com>
-
- * path.cc (special_name): Reorganize to always detect the use of
- special names first, before detecting special characters.
-
-2005-03-04 Christopher Faylor <cgf@timesys.com>
-
- * fhandler_clipboard.cc: Use int for cygnativeformat rather than UINT
- as that is what is returned by GetPriorityClipboardFormat.
- (fhandler_dev_clipboard::read): Ditto for the format variable.
-
-2005-03-04 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::open_9x): Satisfy query_open values.
-
-2005-03-04 Pierre Humblet <pierre.humblet@ieee.org>
-
- * fhandler_socket.cc (fhandler_socket::ioctl): Only cancel
- WSAAsyncSelect when async mode is on.
-
-2005-03-03 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din (utmpxname): Export.
- * syscalls.cc (utmpxname): Create export alias to utmpname.
- * include/utmpx.h: Define ut_name and ut_xtime if not already defined.
- (utmpxname): Add prototype.
- * include/sys/utmp.h: Only define ut_name if not already defined.
- * include/cygwin/version.h: Bump API minor version.
-
-2005-03-03 Christopher Faylor <cgf@timesys.com>
-
- * cygthread.cc (cygthread::detach): Use a slightly higher priority when
- waiting for thread signalling.
-
-2005-03-02 Christopher Faylor <cgf@timesys.com>
-
- * autoload.cc (std_dll_init): Save and restore fpu control register
- around LoadAddress to prevent loaded dlls (like msvcrt.dll) from
- setting unwanted stuff.
-
-2005-03-02 Christopher Faylor <cgf@timesys.com>
-
- * cygtls.cc (_cygtls::remove): Don't attempt any removal activities if
- exitsock is zero.
-
-2005-03-02 Christopher Faylor <cgf@timesys.com>
-
- * cygtls.cc (_cygtls::init_thread): Move exitsock setting later. It
- should always be set.
- (_cygtls::remove): Detect zero exitsock. Not quite sure why this is needed.
-
-2005-03-02 Christopher Faylor <cgf@timesys.com>
-
- * autoload.cc (LoadDLLprime): Mask error code to low-order 16 bits.
- (noload): Preserve sign when returning error code.
-
-2005-03-02 Christopher Faylor <cgf@timesys.com>
-
- * spawn.cc (do_cleanup): Properly restore SIGINT/SIGQUIT even if they
- had previously been SIG_DFL.
-
-2005-03-01 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::touch_ctime): Replace
- GetSystemTime/SystemTimeToFileTime with GetSystemTimeAsFileTime.
- * times.cc (time_as_timestruc_t): Ditto.
- (time): Ditto.
-
-2005-03-01 Christopher Faylor <cgf@timesys.com>
-
- * include/cygwin/version.h: Bump DLL minor number to 14.
-
-2005-03-01 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_clipboard.cc (fhandler_dev_clipboard::write): Never set
- errno to 0.
- (fhandler_dev_clipboard::read): Ditto.
- * fhandler_windows.cc (fhandler_windows::read): Ditto.
- * scandir.cc (scandir): Ditto.
- * syscalls.cc (_fstat64_r): Ditto.
- (_fstat_r): Ditto.
- (_stat64_r): Ditto.
- (_stat_r): Ditto.
-
- * mmap.cc (mmap64): Fix /dev/zero mapping.
-
-2005-02-28 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (class fhandler_socket): Declare new method
- set_socketpair_eids.
- * fhandler_socket.cc (fhandler_socket::set_socketpair_eids): New method.
- (fhandler_socket::dup): Duplicate sec_pipe if necessary.
- (fhandler_socket::listen): Only create sec_pipe if named pipes are
- available. Initialized sec_peer_pid to 0 as on Linux.
- (fhandler_socket::connect): Only run eid credential transaction if
- named pipes are available. Fake otherwise. Initialized sec_peer_pid
- to 0 as on Linux.
- (fhandler_socket::accept): Ditto.
- (fhandler_socket::close): Move closing sec_pipe handle from here...
- (fhandler_socket::~fhandler_socket): ... to here.
- * net.cc (socketpair): Set eid credentials by calling
- fhandler_socket::set_socketpair_eids() on both socket ends.
- * wincap.h (wincaps::has_named_pipes): New element.
- * wincap.cc: Implement above element throughout.
-
-2005-02-26 Christopher Faylor <cgf@timesys.com>
-
- * sigproc.cc (_pinfo::set_ctty): Move function
- * pinfo.cc (_pinfo::set_ctty): to here.
-
- * fhandler_mem.cc (fhandler_dev_mem::fstat): Don't fill out structure
- if this is an on-disk device rather than an "auto" device.
- * fhandler_raw.cc (fhandler_dev_raw::fstat): Ditto.
-
- * path.cc (normalize_posix_path): Don't treat a standalone '//' as
- introducing a UNC path.
- (normalize_win32_path): Ditto.
-
-2005-02-26 Christopher Faylor <cgf@timesys.com>
-
- * debug.cc (delete_handle): Report on handle value in debugging output.
-
- * pinfo.h (_pinfo::exists): Declare "new" function.
- (_pinfo::kill): Ditto.
- * fhandler_termios.cc (tty_min::kill_pgrp): Use _pinfo::exists rather
- than proc_exists.
- * pinfo.cc (pinfo::init): Ditto. Don't do a low_priority_sleep(0) when
- looping to find exec'ed procinfo.
- (pinfo::release): Be more careful about unmapping and closing.
- * signal.cc (_pinfo::kill): Rename from kill_worker. Accommodate entry
- into _pinfo class.
- (kill0): Use _pinfo::kill rather than kill_worker.
- (kill_pgrp): Ditto. Use _pinfo::exists rather than proc_exists.
- * sigproc.cc (_pinfo::exists): Rename from proc_exists.
- (pid_exists): Use _pinfo::exists rather than proc_exists.
- (remove_proc): Ditto.
- * sigproc.h (proc_exists): Delete declaration.
-
-2005-02-25 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (class fhandler_base): Declare fixup_mmap_after_fork
- with additional flags parameter. Change offset parameter to _off64_t.
- (class fhandler_disk_file): Ditto.
- (class fhandler_dev_mem): Ditto.
- * fhandler_mem.cc (fhandler_dev_mem::fixup_mmap_after_fork):
- Accommodate new parameters.
- * mmap.cc: Include ntdll.h.
- (class mmap_record): Add flags member.
- (mmap_record::mmap_record): Add flags parameter.
- (mmap_record::get_flags): New method.
- (class map): Add next_anon_addr member to store next anonymous mapping
- address suggestion.
- (map::get_next_anon_addr): New method.
- (map::set_next_anon_addr): New method.
- (mmap64): Don't align offset and length to granularity in case of
- MAP_ANONYMOUS on NT. Check for already existing mapping only on 9x.
- Call mmap_record::mmap_record with additional flags argument.
- (fhandler_base::fixup_mmap_after_fork): Accommodate new parameters.
- (fhandler_disk_file::mmap): Use NtMapViewOfSection with
- AT_ROUND_TO_PAGE flag for anonymous mappings on NT. If addr is NULL,
- try to map adjacent to previous mapping.
- (fhandler_disk_file::fixup_mmap_after_fork): Add flags argument.
- Change offset parameter to _off64_t. Use NtMapViewOfSection to
- re-create anonymous mappings on NT.
- (fixup_mmaps_after_fork): Accommodate new parameters when calling
- fhandler's fixup_mmaps_after_fork function.
- * ntdll.h (AT_ROUND_TO_PAGE): New define.
-
-2005-02-25 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (mmap64): Handle anonymous MAP_FIXED request on
- non-granulation boundary.
-
-2005-02-25 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (class mmap_record): Declare new map_pages method with
- address parameter.
- (mmap_record::map_pages): New method with address parameter.
- (mmap64): Evaluate access mode before checking if already existing
- mapping can be used.
- Only use existing mapping if requested access mode matches the one
- in the existing mapping.
- Add check for existing mapping for anonymous MAP_FIXED case.
-
-2005-02-23 Corinna Vinschen <corinna@vinschen.de>
-
- * localtime.cc: Implement setting __tzrule's offset member using
- newlib's __gettzinfo () interface.
- (__tzrule): Remove.
- (timezone): Define as long according to POSIX.
-
-2005-02-23 Eric Blake <ebb9@byu.net>
-
- * devices.in (parsedisk): Fix typo.
- * devices.cc: Regenerate.
-
-2005-02-23 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din (getpeereid): Export.
- * fhandler.h (class fhandler_socket): Add pipe and id members to
- exchange eid credentials for AF_LOCAL sockets.
- (eid_pipe_name): Declare new method.
- (getpeereid): Ditto.
- * fhandler_socket.cc (fhandler_socket::eid_pipe_name): New method.
- (fhandler_socket::fhandler_socket): Initialize sec_pipe.
- (fhandler_socket::connect): Exchange eid credentials with accepting
- socket process.
- (fhandler_socket::listen): Prepare eid credential transaction.
- (fhandler_socket::accept): Exchange eid credentials with connecting
- socket process.
- (fhandler_socket::close): Close eid credentials pipe if open.
- (fhandler_socket::getpeereid): New method.
- * net.cc (cygwin_getsockopt): Add SO_PEERCRED handling.
- (getpeereid): New function.
- * include/asm/socket.h (SO_PEERCRED): Define.
- * include/cygwin/socket.h (struct ucred): Define new type.
- * include/cygwin/version.h: Bump API minor version.
-
-2005-02-23 Corinna Vinschen <corinna@vinschen.de>
-
- * include/sys/statvfs.h (ST_RDONLY): Define.
- (ST_NOSUID): Define.
-
-2005-02-23 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din (fstatvfs): Export.
- (statvfs): Export.
- * syscalls.cc: Include sys/statvfs.h.
- (statvfs): New function. Move statfs functionality here.
- (fstatvfs): New function.
- (statfs): Just call statvfs and copy structure. Check validity of
- incoming struct statfs pointer.
- * include/cygwin/types.h (fsblkcnt_t): Define.
- (fsfilcnt_t): Define.
- * include/cygwin/version.h: Bump API minor version.
- * include/sys/statvfs.h: New file.
-
-2005-02-23 Corinna Vinschen <corinna@vinschen.de>
-
- * devices.h: Switch FH_ZERO and FH_PORT as on Linux. Add FH_FULL.
- * devices.in: Add /dev/full.
- * devices.cc: Regenerate.
- * dtable.cc (build_fh_pc): Add FH_FULL.
- * fhandler.cc (fhandler_base::fstat): Set FH_FULL permission bits
- correctly.
- * fhandler_zero.cc (fhandler_dev_zero::write): Set errno to ENOSPC
- and return -1 if device is FH_FULL.
-
-2005-02-22 Christopher Faylor <cgf@timesys.com>
-
- * fhandler_disk_file.cc (fhandler_cygdrive::closedir): Return 0 when
- closing cygdrive_root.
-
-2005-02-22 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din (basename): Export.
- (dirname): Export.
- * path.cc (basename): New function.
- (dirname): New function.
- * include/libgen.h: New file.
- * include/cygwin/version.h: Bump API minor version.
-
-2005-02-22 Corinna Vinschen <corinna@vinschen.de>
-
- * select.cc (peek_pipe): Disable new pipe code until there's
- a working substitute.
-
-2005-02-22 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din (fdatasync): Export.
- * fhandler.cc (fhandler_base::fsync): Return with EINVAL if no
- handle is available.
- * syscalls.cc (fdatasync): Create export alias to fsync.
- * include/cygwin/version.h: Bump API minor version.
-
-2005-02-20 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (fhandler_base::fstat_helper): Declare with additional
- dwVolumeSerialNumber argument. Drop default values for last three
- arguments.
- * fhandler_disk_file.cc (fhandler_base::fstat_by_handle): Pass
- dwVolumeSerialNumber from GetFileInformationByHandle to fstat_helper.
- (fhandler_base::fstat_by_name): Pass pc.volser () to fstat_helper.
- Accommodate dropping default values for last three arguments of
- fstat_helper.
- (fhandler_base::fstat_helper): Add dwVolumeSerialNumber argument.
- Use for st_dev member unless 0 in which case pc.volser () is used.
-
-2005-02-20 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (FindFirstVolumeA): Add.
- (FindNextVolumeA): Add.
- (FindVolumeClose): Add.
- (GetVolumePathNamesForVolumeNameA): Add.
- * fhandler.h (class fhandler_base): Declare new method fsync.
- * fhandler.cc (fhandler_base::fsync): New method.
- * syscalls.cc (fsync): Move functionality into fhandler method fsync.
- Just call this method from here.
- (sync_worker): New static function.
- (sync): Fill with life for NT systems.
- * wincap.h (wincaps::has_guid_volumes): New element.
- * wincap.cc: Implement above element throughout.
-
-2005-02-20 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (enum query_state): Add query_write_attributes state.
- (fhandler_base::status.query_open): Add a bit to make room for more
- states.
- (class fhandler_base): Declare new method utimes.
- (class fhandler_socket): Ditto.
- (class fhandler_disk_file): Ditto.
- (fhandler_disk_file::fhandler_disk_file): Add constructor with
- path_conv parameter.
- * fhandler.cc (fhandler_base::open): Add query_write_attributes
- handling.
- (fhandler_base::utimes): New method.
- * fhandler_disk_file.cc (fhandler_disk_file::link): Simplify.
- Open file with query_write_attributes instead of query_write_control.
- (fhandler_disk_file::utimes): New method.
- (fhandler_disk_file::fhandler_disk_file): Add constructor with
- path_conv parameter setting pc member immediately.
- * fhandler_socket.cc (fhandler_socket::fchmod): Use new
- fhandler_disk_file constructor.
- (fhandler_socket::fchown): Ditto.
- (fhandler_socket::facl): Ditto.
- (fhandler_socket::link): Ditto.
- (fhandler_socket::utimes): New method.
- * times.cc: Include dtable.h.
- (timeval_to_filetime): Make non-static.
- (utimes): Move functionality into fhandler method utimes. Just call
- this method from here.
- * winsup.h: Simplify declarations of time helper functions.
- (timeval_to_filetime): Add extern declaration.
-
-2005-02-19 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (class fhandler_base): Declare new method link.
- (class fhandler_socket): Ditto.
- (class fhandler_disk_file): Ditto.
- * fhandler.cc (fhandler_base::open): Add FILE_WRITE_ATTRIBUTES
- to query_write_control access flags.
- (fhandler_base::link): New method.
- * fhandler_disk_file.cc (fhandler_disk_file::fchmod): Don't try to
- open with O_WRONLY since query_write_control includes
- FILE_WRITE_ATTRIBUTES.
- (fhandler_disk_file::fchown): Ditto.
- (fhandler_disk_file::facl): Ditto.
- (fhandler_disk_file::link): New method. Touch st_ctime on successful
- link.
- * fhandler_socket.cc (fhandler_socket::link): New method.
- * syscalls.cc (link): Move functionality into fhandler method link.
- Just call this method from here.
-
-2005-02-19 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (class fhandler_socket): Declare new methods fchown,
- fchmod and facl.
- * fhandler_socket.cc (fhandler_socket::fstat): Handle AF_LOCAL
- sockets.
- (fhandler_socket::fchmod): New method.
- (fhandler_socket::fchown): New method.
- (fhandler_socket::facl): New method.
-
-2005-02-19 Corinna Vinschen <corinna@vinschen.de>
-
- * localtime.cc: Temporary implementation of setting __tzrule's offset
- member to be used by strftime.
- (__tzrule): New global variable.
- (tzparse): Set __tzrule's offset member appropriately.
-
-2005-02-17 Christopher Faylor <cgf@timesys.com>
-
- * path.cc (path_conv::check): Set fs flag when a unix-domain socket
- is detected.
-
-2005-02-17 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::fstat): Set st_ctime if
- has_changed flag is set.
- (fhandler_disk_file::touch_ctime): Reset has_changed flag on success.
-
-2005-02-17 Corinna Vinschen <corinna@vinschen.de>
-
- * times.cc (utimes): Open files with FILE_WRITE_ATTRIBUTES first,
- if that fails, try opeing with GENERIC_WRITE. Fix comments.
-
-2005-02-15 Christopher Faylor <cgf@timesys.com>
-
- * path.h (path_conv::issocket): Return true if device == FH_UNIX rather
- than expecting path_conv to set a flag.
-
-2005-02-11 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::raw_write): Mark as changed on
- successful write.
- * fhandler.h (fhandler_base::status_flags): Add 'has_changed' flag.
- * fhandler_disk_file.cc (fhandler_disk_file::fchmod): Call
- fhandler_disk_file's own open and close instead of open_fs and
- close_fs. Mark as changed on success.
- (fhandler_disk_file::fchown): Ditto.
- (fhandler_disk_file::facl): Ditto.
- (fhandler_disk_file::ftruncate): Ditto.
- (fhandler_base::open_fs): Mark as changed when O_TRUNC flag on existing
- file is set.
- (fhandler_disk_file::close): Set st_ctime if has_changed flag is set.
-
-2005-02-11 Christopher Faylor <cgf@timesys.com>
-
- * cygthread.cc (cygthread::release): Reset ev here if it exists.
- (cygthread::terminate_thread): Eliminate racy code which reset ev and
- thread_sync. Remove a few nonsensical inuse checks. Exit at the
- bottom.
- (cygthread::detach): Rewrite to again try to ensure that we don't say
- we're signalled when we are not signalled.
- * fhandler.cc (fhandler_base::raw_read): Revert to signalling read
- success quickly.
- * pipe.cc (fhandler_pipe::close): Use base method to close handle.
- * sigproc.h (WAIT_SIG_PRIORITY): Just trundle along at normal priority
- to allow the pipe thread to do its thing if possible.
-
- * pinfo.h (pinfo::zap_cwd): Declare new function.
- (pinfo::zap_cwd): Move 'cd out of the way code' here.
- (pinfo::exit): Use it here.
- * spawn.cc (spawn_guts): And here.
-
-2005-02-11 Corinna Vinschen <corinna@vinschen.de>
-
- * times.cc (utimes): Open files with GENERIC_WRITE on file systems
- not supporting ACLs.
-
-2005-02-09 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::ftruncate): Fix checking
- lseek return code.
-
-2005-02-08 Corinna Vinschen <corinna@vinschen.de>
-
- * times.cc (timeval_to_filetime): Define first parameter const.
- (utimes): Define second parameter to const according to SUSv3.
- (utime): Ditto.
- * include/sys/utime.h (utime) : Change declaration accordingly.
-
-2005-02-08 Corinna Vinschen <corinna@vinschen.de>
-
- * cygthread.cc (cygthread::detach): Just test thread handle after
- signal arrived, don't wait infinitely for it.
-
-2005-02-08 Christopher Faylor <cgf@timesys.com>
-
- * pipe.cc (fhandler_pipe::read): Remove hold over from old read_state
- implementation.
-
-2005-02-06 Yitzchak Scott-Thoennes <sthoenna@efn.org>
-
- * net.cc (cygwin_gethostbyname): Be more picky about what's a numeric
- address string, and use tls in that case too.
-
-2005-02-07 Christopher Faylor <cgf@timesys.com>
-
- * exceptions.cc: Make windows_system_directory non-static.
- * pinfo.cc (pinfo::exit): Change innocuous cd'ed location to one that
- is more likely to exist.
-
-2005-02-06 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (path_conv::check): Leave symlink expansion loop in case
- a not-ENOENT error happens.
-
- * cygheap.h (cygheap_fdmanip::fhandler_pipe *): New cast operator.
- * pinfo.cc (_pinfo::commune_recv): Add PICOM_PIPE_FHANDLER handling.
- (_pinfo::commune_send): Ditto.
- (_pinfo::pipe_fhandler): New method.
- * pinfo.h (enum picom): Add PICOM_PIPE_FHANDLER.
- (_pinfo::pipe_fhandler): Declare.
- * pipe.cc (fhandler_pipe::open): Rewrite. Allow to open foreign
- pipe handles.
-
-2005-02-03 Christopher Faylor <cgf@timesys.com>
-
- * cygthread.h (cygthread::terminate_thread): Reflect return value.
- * cygthread.cc (cygthread::detach): Be more careful about ensuring that
- sigwait is properly waited for to avoid later missynchronization.
- (cygthread::terminate_thread): Return true if thread was actually
- terminated and all handles were closed.
- * fhandler_base.cc (fhandler_base::raw_read): Use signal_read_state
- rather than raw calls to win32 api.
- (fhandler_base::read): Ditto.
- * fhandler.h (fhandler_pipe::fixup_after_exec): Use method to create
- read_state signalling.
- (fhandler_pipe::create): Ditto.
-
- * Makefile.in: Make some more files -fomit-frame-pointer.
-
-2005-02-02 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (fhandler_base::ftruncate): Define new virtual method.
- (fhandler_disk_file::ftruncate): Ditto.
- * fhandler.cc (fhandler_base::ftruncate): New method.
- * fhandler_disk_file.cc (fhandler_disk_file::ftruncate): Ditto.
- * syscalls.cc (ftruncate64): Move functionality into fhandlers.
- Call fhandler method from here.
-
-2005-02-02 Corinna Vinschen <corinna@vinschen.de>
-
- * pipe.cc (fhandler_pipe::dup): Fix conditionals in case of error.
-
-2005-02-02 Corinna Vinschen <corinna@vinschen.de>
-
- * times.cc (utimes): Mark st_ctime for update according to SUSv3.
-
-2005-02-01 Christopher Faylor <cgf@timesys.com>
-
- * fhandler_proc.cc (format_proc_partitions): Remove PartitionType check
- since it could skip over partitions that are actually interesting.
-
-2005-02-01 Christopher Faylor <cgf@timesys.com>
-
- * cygthread.cc (cygthread::terminate_thread): Wait briefly for
- notification event in the event that the thread was actually in the
- process of exiting.
-
- * pipe.cc (fhandler_pipe::dup): read_state is not supposed to be
- inheritable. Fix that.
-
- * path.cc (path_conv::check): Set symlen = 0 to avoid a compiler
- warning.
-
- * devices.h (devices::parsedisk): Declare new function.
- * devices.in (devices::parsedisk): Define new function.
- * dtable.cc (dtable::init_std_file_from_handle): Use device numbers
- rather than name.
- * fhandler_proc.cc (format_proc_partitions): Use parsedisk to generate
- disk names from numeric codes. (This was broken on two of my
- systems previously and is still broken now)
-
-2005-02-01 Corinna Vinschen <corinna@vinschen.de>
-
- * pipe.cc (fhandler_pipe::open): Allow re-opening of /proc/<pid>/fd
- pipes of the current process.
-
-2005-02-01 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::get_proc_fd_name): Don't generate
- "device:" entry.
- * fhandler.h (fhandler_socket::open): New method.
- (fhandler_pipe::open): New method.
- * fhandler_proc.cc (fhandler_proc::exists): Return -2 in case of
- /proc/self.
- * fhandler_process.cc (fhandler_process::exists): Return -2 in
- case of symlinks, -3 for pipes and -4 for sockets.
- (fhandler_process::fstat): Handle pipes and sockets.
- (fhandler_process::open): Handle opening /proc/<pid>/fd.
- (fhandler_process::fill_filebuf): Generate empty names for
- non exisiting file descriptors.
- * fhandler_socket.cc (fhandler_socket::get_proc_fd_name): Always
- generate "socket:[number]" strings as on Linux.
- (fhandler_socket::open): New method.
- (fhandler_socket::fstat): Always return socket type.
- * path.cc (symlink_info::set): Remove unused second parameter.
- (path_conv::check): Handle pipes and sockets in /proc.
- Set correct device type for AF_LOCAL sockets.
- * pinfo.cc (_pinfo::commune_recv): Generate empty names for
- non exisiting file descriptors.
- (_pinfo::fd): Ditto.
- * pipe.cc (fhandler_pipe::open): New method.
-
-2005-01-31 Christopher Faylor <cgf@timesys.com>
-
- * path.h (path_conv::set_name): Declare new function.
- * path.cc (path_conv::set_name): Define new function.
- * fhandler.h (fhandler_dev_null::open): Declare new function.
- * fhandler.cc (fhandler_dev_null::open): Define new function.
-
-2005-01-31 Christopher Faylor <cgf@timesys.com>
-
- * smallprint.c (rnarg): Use long rather than unsigned long so that we
- get proper sign extension.
-
-2005-01-31 Corinna Vinschen <corinna@vinschen.de>
-
- * environ.cc (set_traverse): New function.
- (parse_thing): Add "traverse" option. Sort options alphabetically.
- (environ_init): On NT, switch on traverse checking by default.
-
-2005-01-31 Christopher Faylor <cgf@timesys.com>
-
- * smallprint.c (__rn): Regparmize.
-
-2005-01-31 Christopher Faylor <cgf@timesys.com>
-
- * smallprint.c (rnarg): New macro.
- (rnargLL): Ditto.
- (__rn): Rename from 'rn', add a mask argument, and use the mask
- argument to control how many significant digits to care about.
- (__small_vsprintf): Use __rn, rnarg, rnargLL, as appropriate.
-
-2005-01-31 Christopher Faylor <cgf@timesys.com>
-
- * pinfo.cc (pinfo::exit): Only return low-order 16 bits when exiting.
-
-2005-01-31 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_process.cc (format_process_maps): Get destbuf argument by
- reference. Allow resizing of destbuf as necessary. Fix string
- handling.
-
-2005-01-31 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.h (class cygheap_fdenum): New class to enumerate used
- fhandlers.
- * dtable.h (class dtable): Add cygheap_fdenum as friend class.
- * fhandler.h (fhandler_base::get_proc_fd_name): New virtual method
- to return a name for /proc/<pid>/fd.
- (fhandler_socket::get_proc_fd_name): Ditto.
- (fhandler_pipe::get_proc_fd_name): Ditto.
- (fhandler_virtual::opendir): Make virtual method.
- (fhandler_process::opendir): New method.
- * fhandler.cc (fhandler_base::get_proc_fd_name): New method.
- * fhandler_process.cc: Include ctype.h.
- (PROCESS_FD): Define.
- (process_listing): Add "fd".
- (fhandler_process::exists): Fix comment. Return 1 in case of "fd"
- directory. Handle files below "fd".
- (fhandler_process::fstat): Drop "self" handling. Set correct link
- count for directories.
- (fhandler_process::opendir): New method to handle "fd" directory.
- (fhandler_process::readdir): Add "fd" handling.
- (fhandler_process::open): Drop "self" handling.
- (fhandler_process::fill_filebuf): Ditto. Add "fd" handling. Fix
- "maps" output string.
- * fhandler_registry.cc (fhandler_registry::fstat): Set correct link
- count for directories.
- * fhandler_socket.cc (fhandler_socket::get_proc_fd_name): New method.
- * path.cc (symlink_info::set): Fix thinko.
- * pinfo.cc (_pinfo::commune_recv): Rename pathbuf to path throughout.
- Drop local path variable in PICOM_FIFO case. Fix debug output.
- Close handles as early as possible. Add PICOM_FDS and PICOM_FD
- handling.
- (_pinfo::commune_send): Add PICOM_FDS and PICOM_FD handling.
- (_pinfo::fd): New method.
- (_pinfo::fds): New method.
- * pinfo.h (enum picom): Add PICOM_FDS and PICOM_FD.
- (_pinfo::fd): Declare.
- (_pinfo::fds): Declare.
- * pipe.cc (fhandler_pipe::get_proc_fd_name): New method.
-
-2005-01-29 Corinna Vinschen <corinna@vinschen.de>
-
- * smallprint.c (rn): Change uval to unsigned long long to fix 64 bit
- handling.
- * fhandler_process.cc (format_process_maps): Print major, minor and
- inode numbers correctly.
-
-2005-01-29 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (GetModuleFileNameExA): Add.
- (GetModuleInformation): Add.
- (QueryWorkingSet): Add.
- * fhandler.h (fhandler_virtual::get_filebuf): New method.
- * fhandler_proc.cc (PROC_SELF): Define.
- (proc_fhandlers): Change type of self to FH_PROC.
- (fhandler_proc::exists): Return -3 if self.
- (fhandler_proc::fstat): Handle self as symlink.
- (fhandler_proc::fill_filebuf): Handle self.
- * fhandler_process.cc: Include psapi.h.
- (PROCESS_EXENAME): Remove.
- (PROCESS_MAPS): Define.
- (PROCESS_ROOT): Define.
- (PROCESS_EXE): Define.
- (PROCESS_CWD): Define.
- (process_listing): Remove "exename", add "maps, "root", "exe" and
- "cwd" elements.
- (fhandler_process::exists): Return -2 for symlinks.
- (fhandler_process::fstat): Handle symlinks.
- (fill_filebuf): Evaluate pid if pid is 0. Use exename handling for
- exe. Handle maps, root and cwd.
- (format_process_maps): New function evaluating "maps".
- * path.cc (symlink_info::set): New method to fill symlink_info
- with data matching virtual symlinks.
- (path_conv::check): Handle virtual symlinks.
- * pinfo.cc (_pinfo::commune_recv): Add PICOM_CWD and PICOM_ROOT
- handling.
- (_pinfo::commune_send): Ditto.
- (_pinfo::root): New function.
- (_pinfo::cwd): New function.
- * pinfo.h (enum picom): Add PICOM_CWD and PICOM_ROOT.
- (_pinfo::root): Declare.
- (_pinfo::cwd): Declare.
-
-2005-01-29 Christopher Faylor <cgf@timesys.com>
-
- * cygthread.cc (new): Add a little more debugging.
- * thread.cc (pthread_null::exit): Add a _my_tls.remove() for safety.
-
-2005-01-28 Christopher Faylor <cgf@timesys.com>
-
- * cygtls.cc (cygtls::call2): Move socket cleanup.
- (cygtls::remove): Move socket cleanup here. Don't use _my_tls to
- reference it.
-
-2005-01-26 Christopher Faylor <cgf@timesys.com>
-
- * pinfo.cc (pinfo::init): Avoid a compiler warning.
-
-2005-01-25 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (setpriority): Implement PRIO_PGRP, PRIO_USER and
- setting priority in other Cygwin processes.
- (getpriority): Implement PRIO_PGRP, PRIO_USER and getting nice value
- from other processes.
-
-2005-01-26 Pierre Humblet <pierre.humblet@ieee.org>
-
- * path.cc (path_conv::check): Return ENOTDIR rather than ENOENT
- when a component is not a directory. Remove unreachable code.
- (digits): Delete.
-
-2005-01-25 Christopher Faylor <cgf@timesys.com>
-
- * pinfo.h (pinfo::init): Make third parameter non-optional and
- propagate change throughout.
- * pinfo.cc (set_myself): Pass INVALID_HANDLE_POINTER if h is NULL.
- (pinfo::init): Make third parameter non-optional. Eliminate use of
- PID_EXECED as an argument. Put setting of handle back inside loop but
- reorganize to try to open it only when necessary.
-
-2005-01-25 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din: Export getpriority and setpriority.
- * fork.cc (fork_parent): Copy parent's nice value into child.
- * spawn.cc (spawn_guts): Ditto.
- * miscfuncs.cc (winprio_to_nice): New function.
- (nice_to_winprio): Ditto.
- * pinfo.cc (pinfo_init): If parent is not a Cygwin process, set
- default nice value according to current Win32 priority class.
- * pinfo.h (class _pinfo): Add nice member.
- * syscalls.cc (setpriority): New function, only implementing
- PRIO_PROCESS for now.
- (getpriority): Ditto.
- (nice): Just call setpriority.
- * wincap.h (wincaps::has_extended_priority_class): New element.
- * wincap.cc: Implement above element throughout.
- * winsup.h: Add prototypes for winprio_to_nice and nice_to_winprio.
- * include/limits.h (NZERO): New define.
- * include/cygwin/types.h (id_t): New datatype.
- * include/cygwin/version.h: Bump API minor version.
- * include/sys/resource.h: Add PRIO_XXX defines and prototypes for
- getpriority and setpriority.
-
-2005-01-25 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (realpath): Allow to expand with .exe suffix.
-
-2005-01-22 Christopher Faylor <cgf@timesys.com>
-
- * spawn.cc (spawn_guts): Perform same "cd" as in pinfo::exit below to
- make sure that a stub process does not keep the current working
- directory busy after the "execed" process has exited.
-
-2005-01-22 Christopher Faylor <cgf@timesys.com>
-
- * pinfo.cc (pinfo::init): Move everything but the MapViewOfFileEx out
- of the loop since trying multiple times to call CreateFileMapping
- doesn't make much sense. Try to structure the loop a little better so
- that exiting with a break does the right thing.
- (pinfo::release): Release shared memory area if it exists and close
- handle if it exists.
-
-2005-01-22 Christopher Faylor <cgf@timesys.com>
-
- * pinfo.cc (pinfo::maybe_set_exit_code_from_windows): Make sure that
- process has exited before getting an error code.
- (pinfo::exit): "cd" to innocuous location before exiting to make sure
- that process does not keep the current working directory busy while it
- is in the process of really exiting.
-
-2005-01-18 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (CoInitialize): Remove.
- (CoUninitialize): Remove.
- (CoCreateInstance): Remove.
- (CoTaskMemFree): Add.
- (SHGetDesktopFolder): Add.
- * path.cc (shortcut_header): Remove.
- (shortcut_initalized): Remove.
- (GUID_shortcut): New static GUID.
- (struct win_shortcut_hdr): New struct describing Windows shortcut
- header structure.
- (symlink_worker): Rewrite creating Windows shortcuts. Create
- ITEMIDLIST if target exists. Only write once.
- (cmp_shortcut_header): Use win_shortcut_hdr structure for comparison.
- (check_shortcut): Rewrite to read only once from file. Allow skipping
- an ITIMIDLIST in the file.
-
-2005-01-16 Christopher Faylor <cgf@timesys.com>
-
- * pinfo.h (maybe_set_exit_code_from_windows): Renamed from
- set_exit_state.
- * pinfo.cc (pinfo::exit): Use renamed function.
- (proc_waiter): Ditto. Make a copy of input argument to avoid problems
- when procs array is shuffled. Flag when copy is made so that
- remove_proc knows when it is safe to reshuffle.
- * sigproc.cc (proc_terminate): Don't flag process_state as PID_EXITED.
- (remove_proc): Wait for waiter to finish copying pinfo element before
- moving it (an actual wait should be an extremely rare event).
-
-2005-01-15 Christopher Faylor <cgf@timesys.com>
-
- * init.cc (dll_entry): Remove unused extern.
-
- * include/sys/cygwin.h: Remove PID_ZOMBIE.
- * pinfo.h: Rename EXITCODE_* defines.
- (pinfo::set_exit_state): Remove parameter.
- * pinfo.cc (set_exit_state): Remove parameter. Reverse sense of test
- so that exitcode is checked for having been set rather than not having
- been set. Set flag when exitcode has been established. Don't set
- PID_STATE here.
- (pinfo::init): Remove exitcode initialization.
- (pinfo::exit): Reflect change in EXITCODE_* naming. Set flag when
- exitcode has been established. Reflect change in arguments to
- set_process_state.
- (proc_waiter): Reflect change in arguments to set_process_state. Set
- process_state here and only here.
- * fhandler_process.cc (fhandler_process::fill_filebuf): Reflect removal
- of PID_ZOMBIE define.
- (format_process_stat): Ditto.
- (format_process_status): Ditto.
- * sigproc.cc (pid_exists): Ditto.
- (stopped_or_terminated): Ditto. Make sure that only low-order 16 bits of
- exitcode are used.
- * spawn.cc (spawn_guts): Reflect change in EXITCODE_* naming.
-
-2005-01-15 Christopher Faylor <cgf@timesys.com>
-
- * sigproc.cc (sig_send): Don't complain if attempt to send signal to
- myself fails after I've "execed".
-
-2005-01-14 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::facl): Pretend successful
- SETACL if no acls are available.
- * fhandler.cc (fhandler_base::facl): Implement to return sensible
- values on GETACL and GETACLCNT. Pretend successful SETACL.
- * fhandler_virtual.cc (fhandler_virtual::facl): Ditto.
-
-2005-01-13 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (fhandler_disk_file::touch_ctime): Declare.
- * fhandler_disk_file.cc (fhandler_disk_file::touch_ctime): New method
- to set file's ctime.
- (fhandler_disk_file::fchmod): Try opening file for writing first.
- Set file's ctime on success.
- (fhandler_disk_file::fchown): Ditto.
- (fhandler_disk_file::facl): Ditto.
-
-2005-01-13 Corinna Vinschen <corinna@vinschen.de>
-
- * pinfo.cc (pinfo::exit): Don't access self after releasing it.
- * path.h (path_conv::path_conv): Fill path with native device
- name in case of device argument.
-
-2005-01-13 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_serial.cc (fhandler_serial::dup): Call overlapped_setup
- for child, not for parent.
-
-2005-01-13 Christopher Faylor <cgf@timesys.com>
-
- * init.cc (dll_entry): Nuke attempt to set exit code since parent will
- use windows exit code if needed.
- * pinfo.cc (pinfo::exit): Move release() here to minimize pid creation
- race (suggested by Pierre Humblet).
-
-2005-01-12 Christopher Faylor <cgf@timesys.com>
-
- Reorganize header file inclusion throughout so that cygerrno.h comes
- first.
- * fhandler.h (select_record::thread_errno): Save any encountered errno
- here.
- (select_record::set_select_errno): New function.
- (select_record::saw_error): New function.
- (select_record::select_record): Initialize thread_errno to zero.
- * select.cc (set_handle_or_return_if_not_open): Set thread_errno on
- failure.
- (select_stuff::wait): Record errno for later resurrection in calling
- thread.
- (peek_serial): Ditto.
-
-2005-01-12 Christopher Faylor <cgf@timesys.com>
-
- * syscalls.cc (system): Use "/bin/sh" as per linux and (sorta) SUSv3.
-
-2005-01-12 Christopher Faylor <cgf@timesys.com>
-
- * pinfo.cc (pinfo::exit): Don't assume that this == myself.
-
-2005-01-11 Christopher Faylor <cgf@timesys.com>
-
- * pinfo.cc (pinfo::init): Don't close input handle on temporary (?)
- failure.
-
-2005-01-11 Christopher Faylor <cgf@timesys.com>
-
- * pinfo.h (_pinfo::set_exit_state): Declare new function.
- (pinfo::exit): Move here from _pinfo::exit.
- * sigproc.cc (child_info::sync): Use new function to set exitcode and
- process_state.
- * pinfo.cc (_pinfo::exit): Ditto.
- (proc_waiter): Ditto.
- (_pinfo::set_exit_state): Define new function.
- (_pinfo::dup_proc_pipe): Close handle when there is no parent process
- around to care about the exit value.
- * dcrt0.cc (dll_crt0_0): Move subproc_ready synchronization later to
- make sure that myself is still mapped in parent.
- (do_exit): Reflect movement to pinfo::exit.
- (__api_fatal): Ditto.
- * exceptions.cc (signal_exit): Ditto.
- * errno.cc (errmap): Map PROC_NOT_FOUND.
- * init.cc (dll_entry): Release myself before exiting.
- * sigproc.cc (proc_can_be_signalled): Set errno appropriately.
- (sig_send): Ditto. Also remove ill-advised test for !myself->sendsig
- since this is an indication of a process which is still initializating
- -- it is not an error.
- (child_info::sync): Don't set exitcode here. Assume that will happen
- in proc_waiter, if necessary.
- * spawn.cc (spawn_guts): Delay "wait_for_myself" logic until later.
- Don't wait at all if the process has already exited. Reflect movement
- to pinfo::exit.
-
-2005-01-11 Corinna Vinschen <corinna@vinschen.de>
-
- * environ.cc (build_env): Disallow empty strings and strings starting
- with '=' in Win32 environment.
-
-2005-01-08 Pierre Humblet <pierre.humblet@ieee.org>
-
- * syscalls.cc (seteuid32): Only change the default dacl when
- seteuid succeeds. Do not close HKCU.
-
-2005-01-06 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_process.cc: Use strcasematch instead of strcasecmp
- throughout.
-
-2005-01-06 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (rename): Fix behaviour in case of renaming directories
- according to SUSv3.
-
-2005-01-06 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_base::open_fs): Don't allow
- opening directories for writing.
-
-2005-01-06 Christopher Faylor <cgf@timesys.com>
-
- * timer.cc (timer_thread): Pass sigev pointer value as per SuSv3 rather
- than pointer to sigev.
-
-2005-01-05 Christopher Faylor <cgf@timesys.com>
-
- * dcrt0.cc (multiple_cygwin_problem): Reorganize error message to not
- always talk about a "version" when it's not a version.
- (dll_crt0_0): Change info passed to multiple_cygwin_problem to be a
- little more precise.
- * shared.cc (user_shared_initialize): Ditto.
- (shared_info::initialize): Ditto.
-
-2005-01-03 Christopher Faylor <cgf@timesys.com>
-
- * pinfo.cc (_pinfo::dup_proc_pipe): Can't close proc pipe when execing
- or we will suffer an exit code race.
-
-2005-01-03 Corinna Vinschen <corinna@vinschen.de>
-
- * signal.cc (abort): Call _GLOBAL_REENT's __cleanup.
-
-2005-01-03 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (setmode): Call _fwalk with _GLOBAL_REENT.
-
-2005-01-01 Christopher Faylor <cgf@timesys.com>
-
- * cygthread.cc (cygthread::stub): Set inuse to false when exiting.
- (cygthread::cygthread): Actually pass name as argument to debugging
- output to avoid SEGV when strace'ing.
- (cygthread::release): Don't set stack_ptr to NULL, since it is only set
- once on first entry to a stub not on each stub iteration.
- (cygthead::exit_thread): Remove obsolete function.
- * cygthread.h (cygthread::exit_thread): Ditto.
-
-2005-01-01 Christopher Faylor <cgf@timesys.com>
-
- * shared.cc (open_shared): Don't attempt VirtualAlloc magic if first
- attempt to map memory fails.
diff --git a/winsup/cygwin/ChangeLog-2006 b/winsup/cygwin/ChangeLog-2006
deleted file mode 100644
index bab33364a..000000000
--- a/winsup/cygwin/ChangeLog-2006
+++ /dev/null
@@ -1,3571 +0,0 @@
-2006-12-21 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::readdir): Improve debug
- output.
-
-2006-12-20 Corinna Vinschen <corinna@vinschen.de>
-
- Partially revert change from 2006-10-22. GetSecurityInfo messes up
- user information on NT4.
- * sec_helper.cc (security_descriptor::malloc): Drop LocalAlloc
- considerations.
- (security_descriptor::realloc): Ditto.
- (security_descriptor::free): Ditto.
- * security.cc (get_reg_security): Reinstantiate.
- (get_nt_object_security): Revert to using NtQuerySecurityObject.
- * security.h (class security_descriptor): Drop type member.
- Accommodate throughout.
- (security_descriptor::size): Constify.
- (security_descriptor::copy): Ditto.
-
-2006-12-18 Christopher Faylor <me@cgf.cx>
-
- * pinfo.cc (set_myself): Use a more foolproof method for determining if
- the current process was started from another cygwin process.
-
-2006-12-15 Pierre A. Humblet <Pierre.Humblet@ieee.org>
-
- * libc/minires-os-if.c (cygwin_query): Remove ERROR_PROC_NOT_FOUND case.
- (get_dns_info): Verify DnsQuery exists. Use autoloaded GetNetworkParams.
-
-2006-12-13 Corinna Vinschen <corinna@vinschen.de>
-
- * winsup.h (clear_procimptoken): Close hProcImpToken in a safer way.
-
-2006-12-13 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (lsaauth): Initialize lsa to INVALID_HANDLE_VALUE to
- avoid potential access violation.
-
-2006-12-12 Corinna Vinschen <corinna@vinschen.de>
-
- * environ.cc (subauth_id_init): Remove.
- (parse_thing): Drop "subauth_id" option.
- * security.cc (get_token_group_sidlist): Drop comments concerning
- subauthentication.
- (create_token): Back out subauthentication related changes.
- (subauth): Remove.
- * security.h (create_token): Remove declaration.
- (subauth): Ditto.
- * syscalls.cc (seteuid32): Drop subauthentication handling entirely.
-
-2006-12-12 Corinna Vinschen <corinna@vinschen.de>
-
- * environ.cc (set_traverse): Remove.
- (parse_thing): Drop "traverse" option.
- * path.cc (fs_info::update): Don't request SE_CHANGE_NOTIFY_PRIV
- privilege.
- * sec_helper.cc (set_cygwin_privileges): Ditto.
- * security.cc (allow_traverse): Remove.
- (alloc_sd): Drop special allow_traverse code.
- * security.h (allow_traverse): Drop declaration.
- * syscalls.cc (statvfs): Don't request SE_CHANGE_NOTIFY_PRIV privilege.
-
-2006-12-12 Corinna Vinschen <corinna@vinschen.de>
-
- Partially revert change from 2005-04-03, always running under an
- impersonation token, which collides with Vista UAC.
- * cygheap.h (deimpersonate): revert to self instead of impersonating
- hProcImpToken.
- (reimpersonate): Only impersonate if setuid.
- * dcrt0.cc (dll_crt0_0): Don't initialize hProcImpToken here.
- (dll_crt0_1): Set privileges on hProcToken.
- * fork.cc (frok::child): Set privileges on hProcToken. Close handle to
- hProcImpToken.
- * grp.cc (internal_getgroups): Use hProcToken instead of hProcImpToken.
- * security.cc (check_access): Create hProcImpToken on demand here.
- * security.h (set_process_privilege): Set privileges on hProcToken.
- (_push_thread_privilege): Use hProcToken instead of hProcImpToken.
- (pop_thread_privilege): If not setuid'ed, revert to self.
- * syscalls.cc (setegid32): Drop setting primary group on hProcImpToken.
- Close handle to hProcImpToken.
- * uinfo.cc (internal_getlogin): Ditto.
- * winsup.h (clear_procimptoken): New inline function.
-
-2006-12-12 Christopher Faylor <me@cgf.cx>
-
- * syscalls.cc (popen): Allow '[rw][bt]'.
-
-2006-12-12 Corinna Vinschen <corinna@vinschen.de>
-
- * libc/minires.c (res_ninit): Drop handling for LOCALDOMAIN environment
- variable.
-
-2006-12-11 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (DLL_OFILES): Add minires-os-if.o and minires.o.
- (SUBLIBS): Add libresolv.a.
- Add rule for libresolv.a.
- * autoload.cc: Fix return code handling for IP Helper API in case
- of being unable to load iphlpapi.dll.
- (DnsQuery_A): Define.
- (DnsRecordListFree): Define.
- * cygwin.din: Export resolver functions.
- * include/resolv.h: New header.
- * include/arpa/nameser.h: New header.
- * include/arpa/nameser_compat.h: New header.
- * include/cygwin/version.h: Bump API minor number.
- * libc/minires-os-if.c: New file.
- * libc/minires.c: New file.
- * libc/minires.h: New file.
-
-2006-12-11 Christopher Faylor <me@cgf.cx>
-
- * sigproc.cc (child_info::child_info): Move old comment about msv_count
- here. Edit it slightly to reflect new sensibilities.
-
-2006-12-11 Christopher Faylor <me+cygwin@cgf.cx>
-
- * child_info.h (child_info_spawn::__stdin): New element.
- (child_info_spawn::__stdin): Ditto.
- (CURR_CHILD_INFO_MAGIC): Regenerate.
- * dcrt0.cc (check_sanity_and_sync): Minor cleanup.
- (child_info_spawn::handle_spawn): Handle new __std* elements by calling
- move_fd.
- * dtable.cc (dtable::move_fd): Define new function.
- * dtable.h (dtable::move_fd): Declare new function.
- * fhandler.h (fhandler_pipe::popen_pid): Declare new element.
- * fhandler.h (fhandler_pipe::get_popen_pid): Define new function.
- * fhandler.h (fhandler_pipe::set_popen_pid): Ditto.
- * pipe.cc (fhandler_pipe::fhandler_pipe): Zero popen_pid.
- (fhandler_pipe::dup): Ditto.
- * spawn.cc (handle): Change second argument to bool.
- (spawn_guts): Accept __stdin/__stdout arguments and set them
- appropriately in child_info structure and in STARTUPINFO structure.
- * syscalls.cc (popen): New cygwin-specific implementation using spawn.
- (pclose): Ditto.
- * winsup.h (spawn_guts): Accommodate new arguments for spawn_guts.
-
- * fhandler.cc (fhandler_base::set_no_inheritance): Make second arg a bool.
- * fhandler.h (fhandler_base::set_no_inheritance): Ditto for declaration.
-
- * child_info.h (child_info::msv_count): Rename from the now-inappropriate
- "zero".
- (child_info_spawn::filler): Add filler to work around Vista bug.
- (child_info_fork::filler): Ditto.
- * dcrt0.cc (get_cygwin_startup_info): Remove "zero" check since it is
- now always filled out.
- * fork.cc (frok::parent): Move ch.zero manipulation to constructor.
- * spawn.cc (spawn_guts): Ditto. Remove _ch wrapper.
- * sigproc.cc (child_info::child_info): Initialize msv_count.
-
- * shared.cc (shared_info::heap_slop_size): Remove noisy system_printfs.
- * shared_info.h (CURR_SHARED_MAGIC): Regenerate.
-
-2006-12-11 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (rootdir): Fix typo in comment.
- * syscalls.cc (try_to_bin): Ditto.
-
-2006-12-10 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (SHFileOperationA): Drop definition.
- * ntdll.h (struct _FILE_RENAME_INFORMATION): Define.
- * path.cc (fs_info::update): Note length of rootdir prefix in
- root_len.
- (get_nt_native_path): New function, taking over functionality of
- path_conv::get_nt_native_path.
- (path_conv::get_nt_native_path): Just call get_nt_native_path.
- * path.h (get_nt_native_path): Declare.
- (struct fs_info): New member root_len.
- (fs_info::length): New inline method returning root_len.
- (path_conv::rootdir): New inline method returning rootdir prefix.
- * syscalls.cc (try_to_bin): Rewrite using only system calls.
- (unlink_nt): Call try_to_bin with additional handle to open file
- parameter.
- (statvfs): Use path_conv::rootdir method.
- * wincap.h: Define has_recycle_dot_bin throughout.
- * wincap.cc: Ditto.
-
-2006-12-10 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (rootdir): Clarify comment.
-
-2006-12-10 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (rootdir): Don't look for volume mount points on remote
- shares.
-
-2006-12-10 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (rootdir): Drop useless post-increment. Take volume
- mount points into account.
- (check_posix_perm): Allocate space for root directory big enough.
-
-2006-12-09 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (try_to_bin): Add comment that this is not possibly
- the final version.
-
-2006-12-07 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (unlink_nt): Open native symlinks with
- FILE_OPEN_REPARSE_POINT flag.
-
-2006-12-07 Corinna Vinschen <corinna@vinschen.de>
-
- * ntdll.h (STATUS_DELETE_PENDING): Define.
- (struct _FILE_DISPOSITION_INFORMATION): Define.
- * syscalls.cc (unlink_9x): new function to delete file on 9x.
- * syscalls.cc (unlink_nt): new function to delete file on NT.
- (unlink): Simplify. Move OS dependent stuff into aforementioned
- functions. Also handle FILE_ATTRIBUTE_HIDDEN as R/O-like flag.
-
-2006-12-07 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (SHFileOperationA): Define.
- * syscalls.cc (try_to_bin): New function trying to move a file to
- the recycle bin.
- (unlink): Fix arguments used in CreateFile for delete on close.
- Before closing the handle, try to move the file to the recycle bin.
-
-2006-12-07 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.h (struct cwdstuff): Add "sync" member and accompanying
- "keep_in_sync" methods.
- * external.cc (cygwin_internal): Call above keep_in_sync method when
- CW_SYNC_WINENV is requested.
- * path.cc (cwdstuff::init): Don't change to windows_system_directory
- if keep_in_sync is requested.
- (cwdstuff::keep_in_sync): New method.
- (cwdstuff::set): Take sync flag into account.
-
-2006-12-06 Corinna Vinschen <corinna@vinschen.de>
-
- * termios.cc: Change include order to accommodate change to sys/ioctl.h.
-
-2006-12-06 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_mem.cc (fhandler_dev_mem::open): Fix comment.
- * wincap.cc (has_physical_mem_access): Reflect the fact that physical
- memory access has been made a protected operation beginning with
- 2003 Server.
-
-2006-12-06 Eric Blake <ebb9@byu.net>
-
- * include/sys/ioctl.h: Pick up termios.h, for TIOCGWINSZ.
-
-2006-12-06 Corinna Vinschen <corinna@vinschen.de>
-
- * winsup.h (WINVER): Set to 0x0600 to cover Vista.
-
-2006-12-06 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::rmdir): Fix typo.
-
-2006-12-05 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (cwdstuff::init): Don't change to windows_system_directory
- if Cygwin DLL has been loaded dynamically.
-
-2006-12-05 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (cwdstuff::set): Don't try to open directory on systems not
- supporting that.
-
-2006-12-05 Corinna Vinschen <corinna@vinschen.de>
-
- * dcrt0.cc (get_cygwin_startup_info): Fix comment.
- * wincap.cc (wincapc::init): Always reset needs_count_in_si_lpres2 to
- false on non 64-bit systems.
-
-2006-12-05 Corinna Vinschen <corinna@vinschen.de>
-
- * dcrt0.cc (get_cygwin_startup_info): Change zeros to DWORD array.
- Expect first DWORD in child_info struct being set to non-zero if
- wincap.needs_count_in_si_lpres2 is set. Add comment to explain why.
- * fork.cc (frok::parent): Set ch.zero[0] to a sensible count value
- if wincap.needs_count_in_si_lpres2 is set.
- * spawn.cc (spawn_guts): Ditto. Add filler bytes after ch on stack
- to accommodate needs_count_in_si_lpres2.
- * wincap.h: Define needs_count_in_si_lpres2 throughout.
- * wincap.cc: Ditto.
-
-2006-11-29 Corinna Vinschen <corinna@vinschen.de>
-
- * dir.cc (mkdir): Check last path component for "..".
- (rmdir): Don't check last path component for "..".
- * fhandler_disk_file.cc (fhandler_disk_file::rmdir): Drop kludge
- which tries to allow deleting the current working directory.
- * path.cc (has_dot_last_component): Add parameter to indicate testing
- for "..". Take trailing slash into account.
- (symlink_info::posixify): Rely on cygheap->cwd.win32 having a
- useful value.
- (cwdstuff::init): Initialize cygheap->cwd with current working
- directory. Change to windows_system_directory afterwards.
- (cwdstuff::set): Never call SetCurrentDirectory here. Just check
- if changing into target directory would be allowed. Add comment to
- explain why.
- * path.h (has_dot_last_component): Declare with second parameter.
- * pinfo.cc (pinfo::zap_cwd): Remove.
- (pinfo::exit): Drop call to zap_cwd.
- * pinfo.h (class pinfo): Remove declaration of zap_cwd.
- * spawn.cc (spawn_guts): Set current working directory for non-Cygwin
- child applications. Drop call to zap_cwd.
-
-2006-11-28 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (create_token): Revert erroneous change to test
- subauth_token for INVAILD_HANDLE_VALUE.
- * syscalls.cc (seteuid32): Set create_token's subauth_token parameter
- back to NULL.
-
-2006-11-28 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::open): Fix previous patch to handle the
- SYSTEM attribute as well.
-
-2006-11-27 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::open): Fix handling of files with
- HIDDEN attribute set.
-
-2006-11-27 Christopher Faylor <cgf@timesys.com>
-
- * include/cygwin/signal.h: Add __extension__ to various anonymous
- unions and structs. (thanks to V.Haisman)
-
-2006-11-27 Corinna Vinschen <corinna@vinschen.de>
-
- * cyglsa.h: New header file.
- * environ.cc: Disable subauth settings.
- * grp.cc: Accommodate cygsidlist's count now being a method.
- * sec_helper.cc (SECURITY_MANDATORY_INTEGRITY_AUTHORITY): Remove.
- (mandatory_medium_integrity_sid): Remove.
- (mandatory_high_integrity_sid): Remove.
- (mandatory_system_integrity_sid): Remove.
- (fake_logon_sid): Add.
- (cygsid::get_sid): Add well_known parameter. Set well_known_sid
- accordingly.
- (cygsid::getfromstr): Ditto.
- (cygsidlist::alloc_sids): Move here from security.cc.
- (cygsidlist::free_sids): Ditto.
- (cygsidlist::add): Move here from security.h. Add well_known parameter.
- Set well_known_sid accordingly. Don't allow duplicate SIDs.
- * security.cc: Include cyglsa.h and cygwin/version.h. Throughout
- accommodate cygsidlist's count now being a method. Throughout drop
- redundant "contains" tests.
- (get_user_local_groups): Add local groups as well known SIDs.
- (get_token_group_sidlist): Add well known groups as well known SIDs.
- (get_server_groups): Ditto. Only call get_unix_group_sidlist after
- get_user_local_groups to maintain "well_known_sid" attribute.
- (get_initgroups_sidlist): Add well known groups as well known SIDs.
- (get_setgroups_sidlist): Add usersid and struct passwd parameter to
- allow calling get_server_groups from here.
- (get_system_priv_list): Make static. Return size of TOKEN_PRIVILEGES
- structure.
- (get_priv_list): Ditto.
- (create_token): Accommodate above changes. Drop misguided attempt to
- add MIC SIDs to created user token. Print returned token as hex value.
- (subauth): Disable.
- (lsaauth): New function implementing client side of LSA authentication.
- * security.h (class cygsid): Add well_known_sid attribute. Accommodate
- throughout. Add *= operator to create a well known SID.
- (class cygsidlist): Rename count to cnt. Make count a method.
- (cygsidlist::add): Move to sec_helper.cc.
- (cygsidlist::operator *=): New method to add well known SID.
- (cygsidlist::non_well_known_count): New method returning number of
- non well known SIDs in list.
- (cygsidlist::next_non_well_known_sid): New method returning next non
- well known SID by index.
- (mandatory_medium_integrity_sid): Drop declaration.
- (mandatory_high_integrity_sid): Drop declaration.
- (mandatory_system_integrity_sid): Drop declaration.
- (fake_logon_sid): Add declaration.
- (subauth): Disable declaration.
- (lsaauth): Add declaration.
- * syscalls.cc (seteuid32): Disable subauthentication. Add LSA
- authentication.
- * wincap.h: Define needs_logon_sid_in_sid_list throughout.
- * wincap.cc: Ditto.
-
-2006-11-23 Corinna Vinschen <corinna@vinschen.de>
-
- * security.h (DBGSID): Define for debugging purposes.
- (MKSID): Rename from SID so as to not hide SID definition from winnt.h.
- * sec_helper.cc: Change SID to MKSID throughout.
-
-2006-11-23 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (get_ipv6_funcs): Fix formatting.
-
-2006-11-23 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (fs_info::update): Define GETVOLINFO_VALID_MASK and TEST_GVI.
- Change FS_IS_SAMBA and FS_IS_SAMBA_WITH_QUOTA and their usage
- accordingly. Define FS_IS_NETAPP_DATAONTAP. Recognize NetApp device
- and store in is_netapp flag. Mark NetApp device as having no good
- inodes.
- * path.h (struct fs_info): Add is_netapp flag. Add matching accessors.
-
-2006-11-23 Thomas Wolff <towo@computer.org>
-
- * fhandler_console.cc (set_color): Avoid (again) inappropriate
- intensity interchanging that used to render reverse output unreadable
- when (non-reversed) text is bright.
- See http://sourceware.org/bugzilla/show_bug.cgi?id=514
-
-2006-11-23 Joe Loh <joel@pivot3.com>
-
- * devices.h: Add additional SCSI disk block device numbers per
- http://www.kernel.org/pub/linux/docs/device-list/devices.txt
- up to 128 devices.
- * devices.in: Ditto.
- (device::parsedisk): Add additonal else-if cases for decoding base
- and drive indices.
- * devices.cc: Regenerate.
- * dtable.cc (build_fh_pc): Add additional DEV_SD{2..7}_MAJOR cases.
-
-2006-11-09 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (EqualPrefixSid): Define.
- * security.cc (create_token): Drop grps_buf. Use alloca instead.
- Only add the MIC SID to the TOKEN_GROUPS list for the NtCreateToken
- call. If the subauthentication token exists, use its MIC SID.
- Set SID Attributes for the MIC SID to 0.
-
-2006-11-08 Corinna Vinschen <corinna@vinschen.de>
-
- * sec_helper.cc (sid_auth): Remove.
- (well_known_this_org_sid): New well known sid.
- (SECURITY_MANDATORY_INTEGRITY_AUTHORITY): Define.
- (mandatory_medium_integrity_sid): New well known sid.
- (mandatory_high_integrity_sid): Ditto.
- (mandatory_system_integrity_sid): Ditto.
- (cygsid::get_sid): Use local SID_IDENTIFIER_AUTHORITY. Allow all
- authorities fitting in a UCHAR.
- * security.cc (get_token_group_sidlist): Always add the local
- group to the token. Add comment. Add "This Organization" group
- if available in incoming group list.
- (get_server_groups): Only add world and authenticated users groups
- if not already in list.
- (create_token): Add matching mandatory integrity SID to group list
- on systems supporting Mandatory Integrity Control.
- * security.h (well_known_this_org_sid): Define.
- (mandatory_medium_integrity_sid): Define.
- (mandatory_high_integrity_sid): Define.
- (mandatory_system_integrity_sid): Define.
- * wincap.h: Define has_mandatory_integrity_control throughout.
- * wincap.cc: Ditto.
-
-2006-11-07 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (check_posix_perm): Moved here from syscalls.cc.
- (fhandler_base::fpathconf): New method implementing (f)pathconf.
- * fhandler.h (class fhandler_base): Declare fpathconf method.
- * path.cc (path_conv::check): Replace MAX_LINK_DEPTH with SYMLOOP_MAX.
- * path.h (MAX_LINK_DEPTH): Delete.
- * syscalls.cc (check_posix_perm): Move to fhandler.cc.
- (fpathconf): Call fhandler's fpathconf method.
- (pathconf): Build fhandler and call fhandler's fpathconf method.
- * sysconf.cc (sysconf): Reorder switch according to order of flags
- in sys/unistd.h. Add handling for some missing flags.
- * include/limits.h: Reorder according to SUSv3 description. Add some
- missing definitions. Add comments.
- * include/sys/syslimits.h: New file overriding newlib's syslimits.h
- file.
-
-2006-11-06 Corinna Vinschen <corinna@vinschen.de>
-
- * dtable.cc (build_fh_pc): Add missing DEV_SD1_MAJOR case (Thanks to
- Joe Loh for noticing).
-
-2006-11-02 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (symlink_info::posixify): Fix comment.
-
-2006-11-02 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (symlink_info::check): Eliminate PATH_REP bit from pflags.
-
-2006-11-02 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (symlink_info::posixify): New method converting NT and DOS
- paths in symlinks to POSIX.
- (symlink_info::check_shortcut): Allocate buf allowing for a trailing 0.
- Call posixify on the result.
- (symlink_info::check_sysfile): Read from file into local buffer.
- Eliminate old b16 considerations. Call posixify on the result.
- (symlink_info::check_reparse_point): Don't use PrintName but
- SubstituteName which is relevant for Windows' path handling.
- Call posixify on the result.
-
-2006-11-01 Corinna Vinschen <corinna@vinschen.de>
-
- * security.h (cygpriv_idx): Add privileges new in Vista.
- * security.cc (sys_privs): Ditto.
- * sec_helper.cc (cygpriv): Ditto. Fix comment.
-
-2006-10-31 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.h (struct user_heap_info): Add slop member.
- * heap.cc (heap_init): Add slop factor to heap allocation. Add
- comment.
- * mmap.cc (MapViewNT): Allocate memory maps top down.
- (fhandler_dev_zero::mmap): Ditto.
- * shared.cc (shared_info::heap_slop_size): New method.
- (shared_info::heap_chunk_size): Don't use debug_printf at early stage.
- * shared_info.h (SHARED_INFO_CB): Accommodate change to shared_info.
- (CURR_SHARED_MAGIC): Ditto.
- (class shared_info): Add heap_slop member. Declare heap_slop_size.
- * wincap.h: Define heapslop throughout.
- * wincap.cc: Ditto.
-
-2006-10-31 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_base::fstat_by_handle): Drop
- directory attribute for reparse points to avoid mistreating.
- (fhandler_base::fstat_by_name): Ditto.
- * path.cc (symlink_info::check_reparse_point): New method testing
- reparse points for symbolic links.
- (symlink_info::check_shortcut): Move file attribute tesat to calling
- function.
- (symlink_info::check): Add handling for reparse points.
- * path.h (enum path_types): Add PATH_REP to denote reparse point based
- symlinks.
- (path_conv::is_rep_symlink): New method.
- * syscalls.cc (unlink): Handle reparse points.
-
-2006-10-27 Corinna Vinschen <corinna@vinschen.de>
-
- * shared.cc (open_shared): Drop useless attempt from 2006-08-11.
-
-2006-10-27 Corinna Vinschen <corinna@vinschen.de>
-
- * dcrt0.cc (__api_fatal): Drop spare argument to __small_sprintf.
- * smallprint.c (__small_vsprintf): Preserve GetLastError value.
- * winsup.h (api_fatal): Simplify. Drop duplicate filename arg.
-
-2006-10-23 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::rewinddir): Fix comment.
-
-2006-10-23 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::rewinddir): Accommodate
- buggy RestartScan behaviour of Windows 2000.
- * wincap.h: Define has_buggy_restart_scan throughout.
- * wincap.cc: Ditto.
-
-2006-10-22 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::facl): Fix whitespace.
- * external.cc: Update copyright.
- * fhandler.cc: Ditto.
- * sec_helper.cc: Ditto.
- * security.h: Ditto.
- * security.cc: Ditto.
- (check_registry_access): Return -1 if W_OK is requested.
-
-2006-10-22 Corinna Vinschen <corinna@vinschen.de>
-
- * external.cc (cygwin_internal): Use security_descriptor::copy method.
- * sec_helper.cc (security_descriptor::malloc): Use own free method.
- Set type.
- (security_descriptor::realloc): Handle the case that psd has been
- allocated using LocalAlloc. Set type.
- (security_descriptor::free): Ditto.
- * security.cc (get_nt_attribute): Remove.
- (get_reg_security): Remove.
- (get_nt_object_security): Use GetSecurityInfo which handles all
- securable objects.
- (get_nt_object_attribute): Remove.
- (get_object_attribute): Call get_nt_object_security instead of
- get_nt_object_attribute.
- (get_file_attribute): Ditto.
- (check_registry_access): Call get_nt_object_security instead of
- get_reg_security.
- * security.h (cygpsid::operator PSID): Make method const, not the
- result.
- (class security_descriptor): Add type member. Accommodate throughout.
- (security_descriptor::copy): New method.
- (security_descriptor::operator PSECURITY_DESCRIPTOR *): New operator.
-
-2006-10-22 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::fhaccess): Check if opening registry
- actually created a handle. This handles the registry root dir.
- * fhandler_registry.cc (fhandler_registry::open): Set io_handle in
- case of opening one of the predefined registry keys.
-
-2006-10-21 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::fhaccess): Call check_registry_access
- for registry keys/values if ntsec is on.
- * security.cc (check_access): New static function derived from
- check_file_access, but object type agnostic.
- (check_file_access): Only do file specific stuff. Call check_access.
- (check_registry_access): New access check function for registry keys/
- values.
- * security.h (check_registry_access): Declare.
-
-2006-10-21 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_registry.cc (fhandler_registry::fstat): Set restrictive
- permission and ownership if key can't be opened for reading security.
- (open_key): If opening key fails, retry opening with backup intent.
-
-2006-10-20 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (cygwin_getnameinfo): Fix typo in comment.
-
-2006-10-19 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (fhandler_base::set_name): Make virtual.
- (class fhandler_registry): Add wow64 and prefix_len members.
- Declare set_name method.
- * fhandler_proc.cc (PROC_REGISTRY32): Define.
- (PROC_REGISTRY64): Define.
- (proc_listing): Add "registry32" and "registry64" elements.
- (proc_fhandlers): Add corresponding FH_REGISTRY values.
- * fhandler_registry.cc (registry_len): Drop static value in favor of
- class member prefix_len. Use preifx_len instead of registry_len
- throughout.
- (fhandler_registry::set_name): Define. Set wow64 and prefix_len
- according to directory prefix.
- (fhandler_registry::fhandler_registry): Set wow64 and prefix_len to
- default values.
- (open_key): Add wow64 argument. Handle wow64 in call to RegOpenKeyEx.
- Use fhandler_registry member wow64 in this place throughout.
-
-2006-10-19 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_proc.cc: Drop superfluous definition of _WIN32_WINNT.
- * miscfuncs.cc: Ditto.
- * sched.cc: Ditto.
-
-2006-10-17 Corinna Vinschen <corinna@vinschen.de>
-
- * glob.c: Remove.
- * glob.cc: New file. Latest glob version from FreeBSD plus Cygwin
- specific changes (__stat64/__stat32, ignore_case_with_glob,
- drop collate functions).
- (glob3): Return GLOB_ABORTED in case directory is unreadable and
- GLOB_ERR is set, as demanded by SUSv3.
- * glob.h: Import latest version from FreeBSD.
-
-2006-10-17 Corinna Vinschen <corinna@vinschen.de>
-
- * winsup.h (WINVER): Define instead of _WIN32_WINNT. Set to 0x0502.
- (_NO_W32_PSEUDO_MODIFIERS): Define.
-
-2006-10-16 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::opendir): Drop redundant
- access check.
-
-2006-10-16 Corinna Vinschen <corinna@vinschen.de>
-
- * include/asm/byteorder.h: Fix copyright dates.
-
-2006-10-16 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (PrivilegeCheck): Define.
- * fhandler.cc (fhandler_base::open): Always try opening with backup
- resp. restore intent.
- * fhandler_disk_file.cc (fhandler_disk_file::opendir): Always try
- opening with backup intent.
- (fhandler_disk_file::readdir): Ditto when trying to retrieve file id
- explicitely.
- * security.cc (check_file_access): Replace pbuf with correctly
- PPRIVILEGE_SET typed pset. Check explicitely for backup and/or restore
- privileges when AccessCheck fails, to circumvent AccessCheck
- shortcoming. Add comment to explain.
-
-2006-10-13 Christopher Faylor <cgf@timesys.com>
-
- * winsup.h: Turn off DEBUGGING.
-
-2006-10-13 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (Wow64DisableWow64FsRedirection): Define.
- (Wow64RevertWow64FsRedirection): Define.
- * security.cc (cygsuba_installed): New shared variable to store result
- of cygsuba.dll installation test.
- (subauth): Check if cygsuba.dll has been installed and registered
- before issuing the (sub)authentication.
-
-2006-10-12 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (create_token): Fix condition for source identifier.
-
-2006-10-11 Corinna Vinschen <corinna@vinschen.de>
-
- * select.cc (struct socketinf): Convert ser_num and w4 to dynamically
- allocated arrays. Add max_w4 member to keep track.
- (thread_socket): Make timeout depending on number of sockets to wait
- for. Loop WFMO over all sockets.
- (start_thread_socket): Handle any number of sockets. Fix typo. Don't
- close socket event in out of memory condition.
- (socket_cleanup): Free ser_num and w4.
-
-2006-10-06 David Jade <d3@mutable.net>
-
- * path.cc (path_conv::get_nt_native_path): Properly detect \\?\ paths.
- (mount_info::conv_to_win32_path): Update comment.
- * fhandler_disk_file.cc (path_conv::ndisk_links): Use backslashes
- to make NT kernel functions work for \\?\GLOBALROOT paths.
-
-2006-10-09 Corinna Vinschen <corinna@vinschen.de>
-
- * devices.in: Raise number of handled serial ports to 64.
- * devices.cc: Regenerate.
-
-2006-09-17 Danny Smith <dannysmith@clear.net.nz>
-
- * include/asm/byteorder.h: Correct typo.
-
-2006-09-17 Danny Smith <dannysmith@clear.net.nz>
-
- * include/asm/byteorder.h: Don't #define n* macros if -fnoinline is
- specified.
-
-2006-09-07 Christopher Faylor <cgf@timesys.com>
-
- * environ.cc (build_env): Don't put an empty environment variable into
- the environment. Optimize use of "len".
- * errno.cc (ERROR_MORE_DATA): Translate to EMSGSIZE rather than EAGAIN.
-
-2006-08-31 Corinna Vinschen <corinna@vinschen.de>
-
- * grp.cc (initgroups32): Run get_server_groups under original token.
- * syscalls.cc (seteuid32): Slightly reorganize code creating a token.
-
-2006-08-27 Christopher Faylor <cgf@timesys.com>
-
- * child_info.h (child_info_spawn::~child_info_spawn): Don't close
- myself_pinfo handle when spawning.
-
-2006-08-20 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::opendir): Fix formatting.
-
-2006-08-20 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (DIR_NUM_ENTRIES): Set to 100 to maximize
- performance on remote shares.
- (fhandler_disk_file::opendir): Move comment about Samba weirdness into
- fhandler_disk_file::readdir. Don't disallow
- FileIdBothDirectoryInformation on Samba.
- (fhandler_disk_file::readdir): Workaround Samba problem with
- FileIdBothDirectoryInformation by rereading already read entries
- using FileBothDirectoryInformation. Change comment about Samba
- weirdness explaining this change.
-
-2006-08-20 Hideki Iwamoto <h-iwamoto@kit.hi-ho.ne.jp>
-
- * fhandler_disk_file.cc (fhandler_disk_file::pread): Properly check for
- non-error return from lseek.
-
-2006-08-17 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_serial.cc (raw_read): Evaluate minchars taking the
- vmin_ > ulen case into account. Simplify evaluating the bytes to read.
- Don't use bytes in Queue value from ClearCommError call in case vtime_
- is > 0. Reformat GetOverlappedResult call. Simplify call to ReadFile.
-
-2006-08-14 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (subauth): Initialize user_token to NULL. Add comment.
-
-2006-08-11 Corinna Vinschen <corinna@vinschen.de>
-
- * shared.cc (open_shared): Desperately try to get shared memory, only
- when DEBUGGING enabled for now.
-
-2006-08-10 Christopher Faylor <cgf@timesys.com>
-
- * pinfo.cc (_onreturn::~onreturn): Don't attempt to close a NULL
- handle.
-
-2006-08-10 Christopher Faylor <cgf@timesys.com>
-
- * winsup.h: Turn on DEBUGGING by default for now.
-
-2006-08-10 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::lock): Handle
- ERROR_NOT_LOCKED returned from UnlockFileEx.
-
-2006-08-09 Corinna Vinschen <corinna@vinschen.de>
-
- * path.h (SYMLINK_EA_NAME): Remove.
- (SHORTCUT_HDR_SIZE): Ditto.
-
-2006-08-09 Christopher Faylor <cgf@timesys.com>
-
- * autoload.cc (GetHandleInformation): Declare new function.
- (SetHandleInformation): Ditto.
- * debug.cc (add_handle): Use SetHandleInformation to protect handle.
- (close_handle): Use SetHandleInformation to unprotect handle.
-
- * spawn.cc (spawn_guts): Move detached test outside of P_OVERLAY block.
-
-2006-08-07 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (NtSetInformationFile): Define.
- * cygwin.din: Export posix_fadvise and posix_fallocate.
- * fhandler.cc (fhandler_base::fadvise): New method.
- (fhandler_base::ftruncate): Add allow_truncate parameter.
- * fhandler.h (class fhandler_base): Add fadvise method. Accommodate
- new parameter to ftruncate.
- (class fhandler_pipe): Add fadvise and ftruncate methods.
- (class fhandler_disk_file): Add fadvise method. Accommodate new
- parameter to ftruncate.
- * fhandler_disk_file.cc (fhandler_disk_file::fadvise): New method.
- (fhandler_disk_file::ftruncate): Accommodate new allow_truncate
- parameter. Set EOF using NtSetInformationFile on NT.
- * ntdll.h (struct _FILE_END_OF_FILE_INFORMATION): Define.
- (NtSetInformationFile): Declare.
- * pipe.cc (fhandler_pipe::fadvise): New method.
- (fhandler_pipe::ftruncate): Ditto.
- * syscalls.cc (posix_fadvise): New function.
- (posix_fallocate): Ditto.
- (ftruncate64): Accommodate second parameter to fhandler's ftruncate
- method.
- * include/fcntl.h: Add POSIX_FADV_* flags. Add declarations of
- posix_fadvise and posix_fallocate.
- * include/cygwin/version.h: Bump API minor number.
-
-2006-08-02 Christopher Faylor <cgf@timesys.com>
-
- * environ.cc (env_win32_to_posix_path_list): Declare.
- (conv_envvars): Use env_win32_to_posix_path_list rather than
- cygwin_win32_to_posix_path_list.
- (posify): Translate back to win32 path if errno is EIDRM.
- * environ.h: Update copyright. Define ENV_CVT.
- * path.cc (conv_path_list): If converting for the environment and
- removed an element set errno to ENV_CVT.
- (env_win32_to_posix_path_list): New function.
-
-2006-08-01 Christopher Faylor <cgf@timesys.com>
-
- * environ.cc (dos_file_warning): Declare.
- (parse_thing): Add "dosfilewarning". Alphabetize.
- * path.cc (normalize_posix_path): Return -1 when MS-DOS path detected.
- (warn_msdos): New function.
- (path_conv::check): Call if !PC_NOWARN and MS-DOS path detected.
- (cygwin_conv_to_win32_path): Set PC_NOWARN when calling path_conv.
- (cygwin_conv_to_full_win32_path): Ditto.
- * path.h (pathconv_arg::PC_NOWARN): Define.
- * shared_info.h (user_info::warned_msdos): New field.
- (CURR_USER_MAGIC): Reset.
-
-2006-07-31 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::recv_internal): Fix a problem
- with poll(2) after shutdown(SHUT_RD) has been called on the local side.
- * poll.cc (poll): Use POSIX type nfds_t for second parameter. Drop
- special socket handling for POLLIN. Add comment to explain why.
- * include/sys/poll.h: Declare nfds_t. Use as type for second parameter
- in poll(2) declaration.
-
-2006-07-31 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::evaluate_events): Circumvent
- potential race condition.
- (fhandler_socket::recv_internal): Fix MSG_PEEK bug on blocking sockets
- and simplify recv loop.
- (fhandler_socket::send_internal): Only lock when changing wsock_events.
-
-2006-07-31 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc: Drop LoadDLLprime for wsock32 since no wsock32 function
- is used anymore. Drop all unused ws2_32.dll functions.
-
-2006-07-28 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (struct wsa_event): Define here.
- (class fhandler_socket): Make wsock_evt private again.
- (fhandler_socket::wsock_event): New read accessor for wsock_evt.
- (fhandler_socket::serial_number): New read accessor to get the
- socket's serial number.
- (fhandler_socket::ready_for_read): Just return true.
- * fhandler_socket.cc (struct wsa_event): Move definition to fhandler.h.
- * select.cc (struct socketinf): Add serial number vector.
- (start_thread_socket): Identify duplicate sockets by their serial
- number, not (wrongly) by their wsock_evt.
-
-2006-07-27 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc: Revert misguided attempt to handle FD_CLOSE error
- conditions in evaluate_events.
- (search_wsa_event_slot): Move wrongly placed memset in
- fhandler_socket::init_events here.
- (fhandler_socket::init_events): Initially set FD_WRITE event for
- connectionless sockets.
- * poll.cc (poll): Don't add sockets always to except_fds since select
- is now supposed to do it right.
- * select.cc (set_bits): Set connection state correctly for failed
- af_local_connect on local sockets. Remove socket special handling
- for except_selected descriptors.
- (peek_socket): Try to set the read/write/exception bits actually
- correctly.
-
-2006-07-27 Brian Ford <Brian.Ford@FlightSafety.com>
-
- * fhandler_socket.cc (fhandler_socket::recvmsg): Remove unused tot
- argument. All callers changed.
- (fhandler_socket::sendmsg): Likewise.
- * net.cc (cygwin_recvmsg): Likewise.
- (cygwin_sendmsg): Likewise, and prevent calling sendmsg whith an
- invalid iovec.
- * fhandler.h (fhandler_socket::recvmsg): Adjust prototype.
- (fhandler_socket::sendmsg): Likewise.
-
-2006-07-27 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (class fhandler_socket): Remove prot_info_ptr.
- (fhandler_socket::fixup_before_fork_exec): Remove.
- (fhandler_socket::fixup_after_exec): Remove.
- (fhandler_socket::need_fixup_before): Remove.
- * fhandler_socket.cc (fhandler_socket::fhandler_socket): Drop
- initializing prot_info_ptr. Remove unused code.
- (fhandler_socket::~fhandler_socket): Drop free'ing prot_info_ptr.
- (struct wsa_event): Rename connect_errorcode to errorcode.
- (fhandler_socket::evaluate_events): Handle FD_CLOSE error condition
- as FD_CONNECT error condition, except, never reset an FD_CLOSE error
- condition. Always set FD_WRITE after successfully recorded FD_CONNECT.
- (fhandler_socket::fixup_before_fork_exec): Remove.
- (fhandler_socket::fixup_after_fork): Revert to using handle duplication.
- (fhandler_socket::fixup_after_exec): Remove.
- (fhandler_socket::dup): Revert to using handle duplication.
- (fhandler_socket::send_internal): Only call wait_for_events in case
- of WSAEWOULDBLOCK condition.
- (fhandler_socket::set_close_on_exec): Call
- fhandler_base::set_close_on_exec.
- * net.cc (fdsock): Just set socket to inheritable on non-NT. Don't
- call inc_need_fixup_before.
- * select.cc (peek_socket): Don't set except_ready on every FD_CLOSE,
- just on error.
-
-2006-07-26 Brian ford <Brian.Ford@FlightSafety.com>
-
- * fhandler.cc (fhandler_base::read): Call get_readahead_into_buffer
- instead of duplicating it.
-
-2006-07-26 Corinna Vinschen <corinna@vinschen.de>
-
- * shared.cc (offsets): Define as offsets relative to cygwin_hmodule
- instead of addresses.
- (off_addr): New macro.
- (open_shared): Use offsets array accordingly. Remove unused code.
- * shared_info.h (cygwin_shared_address): Remove.
-
-2006-07-26 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.h (struct init_cygheap): Remove shared_h and mt_h members.
- * fhandler_tape.cc (mt): Define as DLL shared area in
- .cygwin_dll_common instead of as dynamically allocated area.
- Change referencing throughout.
- * mtinfo.h (mt_h): Remove entirely.
- (mt): Remove extern declaration.
- * shared.cc (cygwin_shared_area): New global cygwin_shared
- variable located in .cygwin_dll_common.
- (offsets): Define shared region addresses descending from
- cygwin_shared_address.
- (open_shared): Replace usage of SH_CYGWIN_SHARED by SH_USER_SHARED.
- (memory_init): Set cygwin_shared just by pointing to cygwin_shared_area.
- * shared_info.h (shared_locations): Remove SH_CYGWIN_SHARED and
- SH_MTINFO.
- (cygwin_shared_address): Define as DLL start address.
- * tty.h (tty_min::tty_min): Remove constructor.
-
-2006-07-25 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/in6.h: Guard in_port_t typedef more restrictive to
- avoid compiler warning.
-
-2006-07-25 Christopher Faylor <cgf@timesys.com>
-
- * security.cc (get_logon_server): Remove nret and use dret for
- everything to avoid a g++ warning.
-
-2006-07-25 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/version.h: Bump DLL version to 1.7.0.
-
-2006-07-25 Corinna Vinschen <corinna@vinschen.de>
-
- * select.h: Remove.
- * fhandler_socket.cc: Don't include select.h.
- * select.cc: Ditto.
-
-2006-07-25 Corinna Vinschen <corinna@vinschen.de>
-
- * cygtls.h: Drop socket related includes.
- (struct _local_storage): Remove exitsock and exitsock_sin. Add
- select_sockevt.
- * cygtls.cc: Accommodate above change throughout.
- * fhandler.h (class fhandler_socket): Make wsock_evt public.
- * fhandler_socket.cc (fhandler_socket::fhandler_socket): Accommodate
- reordering members.
- (fhandler_socket::evaluate_events): Drop FD_CONNECT event as soon as
- it gets read once. Never remove FD_WRITE event here.
- (fhandler_socket::wait_for_events): Wait 50 ms instead of INFINITE for
- socket events.
- (fhandler_socket::accept): Fix conditional. Set wsock_events members
- of accepted socket to useful start values.
- (fhandler_socket::recv_internal): Always drop FD_READ/FD_OOB events from
- wsock_events after the call to WSARecvFrom.
- (fhandler_socket::send_internal): Drop FD_WRITE event from wsock_events
- if the call to WSASendTo fails with WSAEWOULDBLOCK. Fix return value
- condition.
- * select.cc (struct socketinf): Change to accommodate using socket event
- handling.
- (peek_socket): Use event handling for peeking socket.
- (thread_socket): Ditto.
- (start_thread_socket): Ditto.
- (socket_cleanup): Same here.
- * tlsoffsets.h: Regenerate.
-
-2006-07-23 Christopher Faylor <cgf@timesys.com>
-
- * include/cygwin/version.h: Bump DLL minor version number to 22.
-
-2006-07-20 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (class fhandler_socket): Rearrange slightly to keep
- event handling methods and members together. Drop owner status flag.
- Split wait method. Rename event handling methods for readability.
- * fhandler_socket.cc (struct wsa_event): Add owner field.
- (LOCK_EVENTS): New macro.
- (UNLOCK_EVENTS): Ditto.
- (fhandler_socket::init_events): rename from prepare.
- (fhandler_socket::evaluate_events): First half of former wait method.
- Do everything but wait. Allow specifiying whether or not events from
- event_mask should be erased from wsock_events->events. Simplify
- OOB handling. Allow sending SIGURG to any process (group).
- (fhandler_socket::wait_for_events): Second half of former wait method.
- Call evaluate_events and wait in a loop if socket is blocking.
- (fhandler_socket::release_events): Rename from release.
- (fhandler_socket::connect): Accommodate above name changes.
- (fhandler_socket::accept): Ditto.
- (fhandler_socket::recv_internal): Ditto.
- (fhandler_socket::send_internal): Ditto.
- (fhandler_socket::close): Ditto.
- (fhandler_socket::fcntl): Always set owner to given input value on
- F_SETOWN. Handle F_GETOWN.
- * net.cc (fdsock): Accommodate above name changes.
-
-2006-07-20 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::wait): Set Winsock errno to
- WSAEWOULDBLOCK instead of WSAEINPROGRESS.
-
-2006-07-19 Corinna Vinschen <corinna@vinschen.de>
-
- * pinfo.cc (commune_process): Don't add extra \0 to cmdline.
- (_pinfo::cmdline): Ditto process internal.
-
-2006-07-19 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (msync): Disable rounding up len. Fix bug in access check
- loop.
-
-2006-07-19 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (symlink_worker): Return EEXIST if newpath exists.
-
-2006-07-18 Christopher Faylor <cgf@timesys.com>
-
- * tty.cc (tty_list::terminate): Don't enter the busy loop if we don't
- own the master.
-
-2006-07-18 Silvio Laguzzi <slaguzzi@data-al.de>
-
- * sec_acl.cc (acltotext32): Add missing handling of default ACL entry
- types.
-
-2006-07-18 Brian Ford <Brian.Ford@FlightSafety.com>
- Corinna Vinschen <corinna@vinschen.de>
-
- * winsup.h (mmap_region_status): New enum.
- (mmap_is_attached_or_noreserve_page): Adjust prototype and rename
- as below.
- * mmap.cc (mmap_is_attached_or_noreserve_page): Rename
- mmap_is_attached_or_noreserve. Add region length parameter.
- Return enum above.
- * exceptions.cc (_cygtls::handle_exceptions): Accommodate above.
- * fhandler.cc (fhandler_base::raw_read): Call above for NOACCESS
- errors and retry on success to allow reads into untouched
- MAP_NORESERVE buffers.
-
-2006-07-18 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_floppy.cc (fhandler_dev_floppy::ioctl): Fix typo in lint
- directive.
-
-2006-07-18 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din (posix_openpt): Export.
- * tty.cc (posix_openpt): New function.
- * include/cygwin/stdlib.h (posix_openpt): Declare.
- * include/cygwin/version.h: Bump API minor number.
-
-2006-07-17 Christopher Faylor <cgf@timesys.com>
-
- GCC 4.1 fixes.
- * cygheap.h (cygheap_user): Remove unneeded class names from function
- declaration.
- * fhandler.h (fhandler_base): Ditto.
- (fhandler_dev_floppy): Ditto.
- (fhandler_console): Ditto.
- * wininfo.h (wininfo): Ditto.
- * exceptions.cc (sigpacket::process): Avoid compiler errors about gotos
- and initialization.
- * fhandler_fifo.cc (fhandler_fifo::open): Ditto.
- * fhandler_floppy.cc (fhandler_dev_floppy::ioctl): Ditto.
- * fhandler_tty.cc (fhandler_tty_slave::ioctl): Ditto.
- * mmap.cc (mmap64): Ditto.
- * pipe.cc (fhandler_pipe::open): Ditto.
- * spawn.cc (spawn_guts): Ditto.
-
- * sec_helper.cc: Fix some comments.
- (get_null_sd): Move file-scope static to only function where it is
- used.
-
-2006-07-14 Christopher Faylor <cgf@timesys.com>
-
- * fork.cc (fork): Lock the process before forking to prevent things
- like new fds from being opened, etc.
- * sync.h (lock_process::dont_bother): New function.
-
-2006-07-14 Christopher Faylor <cgf@timesys.com>
-
- * include/cygwin/types.h: Update copyright.
-
-2006-07-14 Christopher Faylor <cgf@timesys.com>
-
- * cygwin.sc: Make sure there's something in the cygheap.
- * dllfixdbg: Accommodate newer binutils which put the gnu_debuglink at
- the end rather than at the beginning.
-
-2006-07-14 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (get_token_group_sidlist): Always add the interactive
- group to the token. Add comment. Create logon_id group SID by
- copying it from incoming group list.
- (create_token): Add subauth_token parameter. Use information in
- subauth_token if present. Tweak SourceIdentifier if subauth_token
- is present for debugging purposes.
- * security.h (create_token): Add subauth_token parameter in declaration.
- * syscalls.cc (seteuid32): Call subauth first. Call create_token
- regardless. Use subauth token in call to create_token if subauth
- succeeded.
-
-2006-07-13 Christopher Faylor <cgf@timesys.com>
-
- * sigproc.cc (waitq_head): Don't initialize to zero.
- * sigproc.h: Update copyright, fix whitespace.
-
-2006-07-13 Christopher Faylor <cgf@timesys.com>
-
- * fhandler.cc (fhandler_base::raw_read): Only return EISDIR when we're
- really trying to read a directory.
-
- * sigproc.cc: Use "Static" where appropriate.
-
-2006-07-13 Corinna Vinschen <corinna@vinschen.de>
-
- * include/netinet/in.h: Update copyright.
-
-2006-07-13 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc: Update copyright.
- * include/pthread.h: Ditto.
-
-2006-07-13 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::wait): Rework function so that
- WaitForMultipleObjects is really only called when necessary.
-
-2006-07-13 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (mmap64): Drop MAP_NORESERVE flag for non-anonymous,
- non-private mappings.
- (mmap_record::unmap_pages): Only check noreserve flag which now implies
- anonymous and private.
- (mprotect): Ditto.
- (fixup_mmaps_after_fork): Ditto.
-
-2006-07-13 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (mmap64): Drop MAP_RESERVED flag for all non-anonymous,
- non-private mappings.
-
-2006-07-13 Corinna Vinschen <corinna@vinschen.de>
-
- * exceptions.cc (_cygtls::handle_exceptions): Call new
- mmap_is_attached_or_noreserve_page function in case of access violation
- and allow application to retry access on noreserve pages.
- * mmap.cc (mmap_is_attached_or_noreserve_page): Changed from
- mmap_is_attached_page. Handle also noreserve pages now. Change
- comment accordingly.
- * winsup.h (mmap_is_attached_or_noreserve_page): Declare instead of
- mmap_is_attached_page.
-
-2006-07-12 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (mmap_record::alloc_page_map): Don't call VirtualProtect
- on maps created with MAP_NORESERVE.
-
-2006-07-12 Corinna Vinschen <corinna@vinschen.de>
-
- * include/netdb.h: Declare rcmd, rcmd_af, rexec, rresvport,
- rresvport_af, iruserok, iruserok_sa, ruserok.
-
-2006-07-12 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (DLL_OFILES): Drop iruserok.o. Add rcmd.o.
- * autoload.cc (rcmd): Drop definition.
- * cygwin.din: Export bindresvport, bindresvport_sa, iruserok_sa,
- rcmd_af, rresvport_af.
- * net.cc (cygwin_rcmd): Remove.
- (last_used_bindresvport): Rename from last_used_rrecvport.
- (cygwin_bindresvport_sa): New function implementing bindresvport_sa.
- (cygwin_bindresvport): New function implementing bindresvport.
- (cygwin_rresvport): Remove.
- * include/cygwin/version.h: Bump API minor number.
- * include/netinet/in.h: Declare bindresvport and bindresvport_sa.
- * libc/iruserok.c: Remove file.
- * libc/rcmd.cc: New file implementing rcmd, rcmd_af, rresvport,
- rresvport_af, iruserok_sa, iruserok and ruserok.
-
-2006-07-12 Corinna Vinschen <corinna@vinschen.de>
-
- * include/pthread.h: Define PTHREAD_PRIO_NONE, PTHREAD_PRIO_INHERIT and
- PTHREAD_PRIO_PROTECT only if _POSIX_THREAD_PRIO_INHERIT is defined.
-
-2006-07-12 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::getsockname): Return valid
- result for unbound sockets.
-
-2006-07-11 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::fixup_after_fork): Handle
- wsock_mtx and wsock_evt on fork, thus handling close_on_exec correctly.
- (fhandler_socket::fixup_after_exec): Drop misguided attempt to handle
- close_on_exec here.
- (fhandler_socket::dup): Call fixup_after_fork with NULL parent.
- Add comment.
- (fhandler_socket::set_close_on_exec): Handle wsock_mtx and wsock_evt.
-
-2006-07-10 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (class fhandler_socket): Add wsock_mtx, wsock_evt
- and wsock_events members. Remove closed status flag, add listener
- status flag. Accommodate new implementation of socket event handling
- methods. Declare recv* and send* functions ssize_t as the POSIX
- equivalents.
- (fhandler_socket::recv_internal): Declare.
- (fhandler_socket::send_internal): Ditto.
- * fhandler_socket.cc (EVENT_MASK): Define mask of selected events.
- (fhandler_socket::fhandler_socket): Initialize new members.
- (fhandler_socket::af_local_setblocking): Don't actually set the
- socket to blocking mode. Keep sane event selection.
- (fhandler_socket::af_local_unsetblocking): Don't actually set the
- socket to previous blocking setting, just remember it.
- (struct wsa_event): New structure to keep event data per shared
- socket.
- (NUM_SOCKS): Define number of shared sockets concurrently handled by
- all active Cygwin processes.
- (wsa_events): New shared datastructure keeping all wsa_event records.
- (socket_serial_number): New shared variable to identify shared sockets.
- (wsa_slot_mtx): Global mutex to serialize wsa_events access.
- (search_wsa_event_slot): New static function to select a new wsa_event
- slot for a new socket.
- (fhandler_socket::prepare): Rewrite. Prepare event selection
- per new socket.
- (fhandler_socket::wait): Rewrite. Wait for socket events in thread
- safe and multiple process safe.
- (fhandler_socket::release): Rewrite. Close per-socket descriptor
- mutex handle and event handle.
- (fhandler_socket::dup): Duplicate wsock_mtx and wsock_evt. Fix
- copy-paste error in debug output.
- (fhandler_socket::connect): Accommodate new event handling.
- (fhandler_socket::listen): Set listener flag on successful listen.
- (fhandler_socket::accept): Accommodate new event handling.
- (fhandler_socket::recv_internal): New inline method centralizing
- common recv code.
- (fhandler_socket::recvfrom): Call recv_internal now.
- (fhandler_socket::recvmsg): Ditto. Streamline copying from iovec
- to WSABUF.
- (fhandler_socket::send_internal): New inline method centralizing
- common send code.
- (fhandler_socket::sendto): Call send_internal now.
- (fhandler_socket::sendmsg): Ditto. Streamline copying from iovec
- to WSABUF.
- (fhandler_socket::close): Call release now.
- (fhandler_socket::ioctl): Never actually switch to blocking mode.
- Just keep track of the setting.
- * net.cc (fdsock): Call prepare now.
- (cygwin_connect): Revert again to event driven technique.
- (cygwin_accept): Ditto.
- * poll.cc (poll): Don't call recvfrom on a listening socket.
- Remove special case for failing recvfrom.
- * include/sys/socket.h: Declare recv* and send* functions ssize_t as
- requested by POSIX.
-
-2006-07-10 Corinna Vinschen <corinna@vinschen.de>
-
- * libc/inet_addr.c: Define __INSIDE_CYGWIN_NET__.
- * libc/inet_network.c: Ditto.
-
-2006-07-07 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::wait): Disable SA_RESTART
- handling for now.
-
-2006-07-07 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (cygwin_inet_ntop): Fix data type of forth parameter.
-
-2006-07-07 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (DLL_OFILES): Add inet_addr.o and inet_network.o.
- * autoload.cc (inet_addr): Drop definition.
- (inet_ntoa): Ditto.
- * net.cc: Forward declare cygwin_inet_aton and cygwin_inet_ntop.
- (cygwin_inet_ntoa): Call cygwin_inet_ntop instead of Winsock inet_ntoa.
- (cygwin_inet_addr): Remove here.
- (cygwin_inet_aton): Ditto.
- (cygwin_inet_network): Ditto.
- * libc/inet_addr.c: New file implementing cygwin_inet_aton and
- cygwin_inet_addr.
- * libc/inet_network.c: New file implementing cygwin_inet_network.
-
-2006-07-06 Christopher Faylor <cgf@timesys.com>
-
- * hookapi.cc: Add comment header
- (putmem): Make static.
- (get_export): Ditto.
- (rvadelta): Ditto. Don't assume that a section which ends where the
- import_rva begins is the import list.
-
- * child_info.h: Update copyright.
- * fork.cc: Ditto.
-
-2006-07-06 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/in6.h (struct in6_addr): Fix typo.
-
-2006-07-06 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din: Export in6addr_any, in6addr_loopback, freeaddrinfo,
- gai_strerror, getaddrinfo, getnameinfo.
- * fhandler_socket.cc: Include cygwin/in6.h.
- (get_inet_addr): Accommodate AF_INET6 usage.
- (fhandler_socket::connect): Ditto.
- (fhandler_socket::listen): Ditto.
- (fhandler_socket::sendto): Ditto.
- * net.cc: Include cygwin/in6.h.
- (in6addr_any): Define.
- (in6addr_loopback): Define.
- (cygwin_socket): Accommodate AF_INET6 usage.
- (socketpair): Bind socketpairs only to loopback for security.
- (inet_pton4): New static function.
- (inet_pton6): Ditto.
- (cygwin_inet_pton): New AF_INET6 aware inet_pton implementation.
- (inet_ntop4): New static function.
- (inet_ntop6): Ditto.
- (cygwin_inet_ntop): New AF_INET6 aware inet_ntop implementation.
- (ga_aistruct): New static function.
- (ga_clone): Ditto.
- (ga_echeck): Ditto.
- (ga_nsearch): Ditto.
- (ga_port): Ditto.
- (ga_serv): Ditto.
- (ga_unix): Ditto.
- (gn_ipv46): Ditto.
- (ipv4_freeaddrinfo): Ditto.
- (ipv4_getaddrinfo): Ditto.
- (ipv4_getnameinfo): Ditto.
- (gai_errmap_t): New structure holding error code - error string mapping.
- (cygwin_gai_strerror): New function implementing gai_strerror.
- (w32_to_gai_err): New static function.
- (get_ipv6_funcs): Ditto.
- (load_ipv6_funcs): Ditto.
- (cygwin_freeaddrinfo): New function implementing freeaddrinfo.
- (cygwin_getaddrinfo): New function implementing getaddrinfo.
- (cygwin_getnameinfo): New function implementing getnameinfo.
- * include/netdb.h: Include stdint.h and cygwin/socket.h. Define
- data types and macros used by getaddrinfo and friends. Declare
- freeaddrinfo, gai_strerror, getaddrinfo and getnameinfo.
- * include/cygwin/in.h: Add IPv6 related IPPROTOs. Remove definition
- of struct sockaddr_in6. Include cygwin/in6.h instead.
- * include/cygwin/in6.h: New header file defining IPv6 releated
- data types and macros.
- * include/cygwin/socket.h: Enable AF_INET6 and PF_INET6. Add
- IPv6 related socket options.
- * include/cygwin/version.h: Bump API minor number.
-
-2006-07-06 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (DsGetDcNameA): Define.
- (NetGetAnyDCName): Define.
- * security.cc: Include dsgetdc.h.
- (DsGetDcNameA): Declare.
- (DS_FORCE_REDISCOVERY): Define.
- (get_logon_server): Add bool parameter to control rediscovery of DC.
- Use DsGetDcNameA function if supported, NetGetDCName/NetGetAnyDCName
- otherwise.
- (get_server_groups): Rediscover DC if get_user_groups fails and
- try again.
- (get_reg_security): Use correct error code macro when testing
- RegGetKeySecurity return value.
- * security.h (get_logon_server): Remove default vaue from wserver
- parameter. Add rediscovery parameter.
- * uinfo.cc (cygheap_user::env_logsrv): Accommodate rediscovery parameter
- in call to get_logon_server.
-
-2006-07-05 Christopher Faylor <cgf@timesys.com>
-
- * sortdin: Ignore all leading underscores when deriving a sort key.
- * cygwin.din: Resort.
-
-2006-07-05 Christopher Faylor <cgf@timesys.com>
-
- * sortdin: New program.
- * cygwin.din: Sort.
-
-2006-07-05 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (fhandler_socket::wait): Reset default timeout to 10ms.
-
-2006-07-05 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (path_conv::check): Ignore has_ea setting, it's always unset
- at this point anyway.
- (get_symlink_ea): Remove.
- (set_symlink_ea): Remove.
- (symlink_worker): Drop writing symlink into NTFS extended attributes.
- (symlink_info::check): Drop reading symlinks from NTFS extended
- attributes.
-
-2006-07-04 Christopher Faylor <cgf@timesys.com>
-
- * libc/rexec.cc (cygwin_rexec): Obvious (?) fix to correct a gcc
- warning - set port to zero first thing in the function.
-
-2006-07-04 Corinna Vinschen <corinna@vinschen.de>
-
- * signal.cc (signal): Set sa_mask to sig.
-
-2006-07-04 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (DLL_OFILES): Add rexec.o.
- * autoload.cc (inet_network): Drop definition.
- (rexec): Ditto.
- * net.cc (rexec): Drop extern declaration.
- (inet_network): Ditto.
- (cygwin_inet_network): Implement using inet_addr.
- (cygwin_rexec): Remove.
- * libc/rexec.cc: New file.
-
-2006-07-04 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::listen): Allow listening on
- unbound INET socket.
-
-2006-07-04 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (fhandler_socket::wait): Set default timeout to INFINITE.
-
-2006-07-03 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (NtQueryEaFile): Define.
- (NtSetEaFile): Define.
- * fhandler.cc (fhandler_base::open): Use appropriate open flags
- in query case when allow_ntea is set.
- * ntdll.h (struct _FILE_GET_EA_INFORMATION): Define.
- (struct _FILE_FULL_EA_INFORMATION): Define.
- (NtQueryEaFile): Declare.
- (NtSetEaFile): Declare.
- * ntea.cc (read_ea): Rename from NTReadEA and rewrite using
- NtQueryEaFile.
- (write_ea): Rename from NTWriteEA and rewrite using NtSetEaFile.
- * path.cc (get_symlink_ea): Make static. Add handle parameter to
- accommodate new read_ea call.
- (set_symlink_ea): Make static. Add handle parameter to accommodate new
- write_ea call.
- (symlink_worker): Call set_symlink_ea while file is still open.
- (symlink_info::check): Call get_symlink_ea after file has been opened.
- * security.cc (get_file_attribute): Accommodate new read_ea call.
- (set_file_attribute): Accommodate new write_ea call.
- * security.h (read_ea): Change declaration accordingly.
- (write_ea): Ditto.
-
-2006-07-03 Kazuhiro Fujieda <fujieda@jaist.ac.jp>
-
- * fhandler.h (class dev_console): Add `metabit' indicating the
- current meta key mode.
- * fhandler_console.cc (fhandler_console::read): Set the top bit of
- the character if metabit is true.
- * fhandler_console.cc (fhandler_console::ioctl): Implement
- KDGKBMETA and KDSKBMETA commands.
- * fhandler_tty.cc (process_ioctl): Support KDSKBMETA.
- (fhandler_tty_slave::ioctl): Send KDGKBMETA and KDSKBMETA to the
- master.
- * include/cygwin/kd.h: New file for the meta key mode.
- * include/sys/kd.h: New file.
-
-2006-07-03 Eric Blake <ebb9@byu.net>
-
- * include/stdint.h (UINT8_C, UINT16_C): Unsigned types smaller
- than int promote to signed int.
-
-2006-07-03 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (cygwin_sendto): Define appropriate parameters using
- socklen_t type according to SUSv3.
- (cygwin_recvfrom): Ditto.
- (cygwin_setsockopt): Ditto.
- (cygwin_getsockopt): Ditto.
- (cygwin_connect): Ditto.
- (cygwin_accept): Ditto.
- (cygwin_bind): Ditto.
- (cygwin_getsockname): Ditto.
- (cygwin_getpeername): Ditto.
- (cygwin_recv): Ditto.
- (cygwin_send): Ditto.
- * include/cygwin/socket.h (socklen_t): Typedef and define.
- * include/sys/socket.h: Declare socket functions using socklen_t type.
-
-2006-07-02 Christopher Faylor <cgf@timesys.com>
-
- * include/cygwin/version.h: Bump DLL minor version number to 21.
-
-2006-06-30 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (cygwin_sendto): Allow zero-sized packets.
- (cygwin_sendmsg): Ditto.
-
-2006-06-26 Corinna Vinschen <corinna@vinschen.de>
-
- Revert patches from 2005-10-22 and 2006-06-14 to use event driven
- accept and connect back to using select:
- * fhandler.h (class fhandler_socket): Remove accept_mtx.
- * fhandler_socket.cc (fhandler_socket::fhandler_socket): Drop
- initializing accept_mtx.
- (fhandler_socket::accept): Drop event handling.
- (fhandler_socket.cc (fhandler_socket::connect): Ditto.
- (fhandler_socket::dup): Drop accept_mtx handling.
- (fhandler_socket::listen): Ditto.
- (fhandler_socket::prepare): Ditto.
- (fhandler_socket::release): Ditto.
- (fhandler_socket::close): Ditto.
- * net.cc (cygwin_accept): Revert to calling cygwin_select to
- implement interuptible accept.
- (cygwin_connect): Ditto for connect.
-
-2006-06-22 Christopher Faylor <cgf@timesys.com>
-
- * fhandler_fifo.cc (fhandler_fifo::open): Release process lock and grab
- a system-wide mutex to prevent a deadlock and a race.
- * sync.h (lock_process): Make fhandler_fifo a friend.
-
- * smallprint.c (__small_vsprintf): Cosmetic change.
-
-2006-06-15 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din: Export __srget_r, __swbuf_r.
- * include/cygwin/version.h: Bump API minor number to 156.
-
-2006-06-14 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (class fhandler_socket): Add private mutex handle
- accept_mtx.
- * fhandler_socket.cc (fhandler_socket::fhandler_socket): Initialize
- accept_mtx to NULL.
- (fhandler_socket::dup): Duplicate accept_mtx, if available.
- (fhandler_socket::listen): Create accept_mtx before trying to listen.
- (fhandler_socket::prepare): Wait for accept_mtx if available to
- serialize accepts on the same socket.
- (fhandler_socket::release): Release accept_mtx.
- (fhandler_socket::close): Close accept_mtx on successful closesocket.
-
-2006-06-12 Christopher Faylor <cgf@timesys.com>
-
- * fhandler_tty.cc (fhandler_pty_master::close): Always close
- from_master/to_master since we always have copies of these handles.
-
-2006-06-12 Corinna Vinschen <corinna@vinschen.de>
-
- * include/sys/wait.h: Move definition of wait constants from here...
- * include/cygwin/wait.h: ...to here. New file.
- * include/cygwin/stdlib.h: Include cygwin/wait.h to conform with SUSv3.
-
-2006-06-12 Pierre Humblet Pierre.Humblet@ieee.org
-
- * heap.cc (heap_init): Only commit if allocsize is not zero.
-
-2006-06-12 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (fdsock): Disable raising buffer sizes. Add comment to
- explain why.
-
-2006-06-04 Christopher Faylor <cgf@timesys.com>
-
- * ioctl.cc (ioctl): Accommodate change in reported pty master device
- number.
- * select.cc (peek_pipe): Ditto.
-
-2006-06-04 Christopher Faylor <cgf@timesys.com>
-
- * cygtls.h (CYGTLS_PADSIZE): Reset to a size that XP SP1 seems to like.
- * tlsoffsets.h: Regenerate.
-
-2006-06-03 Christopher Faylor <cgf@timesys.com>
-
- * cygthread.cc (cygthread::terminate_thread): In debugging output, use
- name of thread being terminated rather than thread doing the
- terminating.
-
- * fhandler.h (fhandler_pty_master::slave): Delete.
- (fhandler_pty_master::get_unit): Ditto.
- (fhandler_pty_master::setup): Change argument declaration to
- accommodate new usage.
- * fhandler_tty.cc (fhandler_tty_master::init): Remove obsolete slave
- assignment. Pass argument to setup indicating that this is a tty.
- (fhandler_tty_slave::open): Use dev() method rather than referencing
- pc.dev directly.
- (fhandler_pty_master::open): Don't create archetype based on ptym
- device number. Set device number to use DEV_TTYM_MAJOR and tty number.
- Pass argument to setup indicating that this is a pty.
- (fhandler_pty_master::setup): Change single argument to a flag
- indicating whether we're creating a pty and use appropriately.
- Calculate 't' variable here rather than in caller.
-
- * fhandler_dsp.cc (fhandler_dev_dsp::open): Use dev() method rather
- than referencing pc.dev directly.
-
-2006-06-03 Christopher Faylor <cgf@timesys.com>
-
- * dcrt0.cc (dll_crt0_0): Call tty_list::init_session here.
- (dll_crt0_1): Reflect renaming from tty_init to tty::init_session.
- (do_exit): Reflect moving of tty_terminate into tty_list.
- * exceptions.cc (events_init): Move tty_mutex stuff elsewhere.
- * fhandler_console.cc (set_console_title): Use lock_ttys class.
- * fhandler_termios.cc (fhandler_termios::bg_check): Make debug output
- more accurate.
- * fhandler_tty.cc (fhandler_tty_slave::open): Reflect move of
- attach_tty into tty_list class. Don't attempt to grab master end of
- pty if master doesn't exist.
- (fhandler_pty_master::open): Reflect move of allocate_tty into tty_list
- class. Use lock_ttys::release to release mutex. Improve debugging
- output.
- (fhandler_pty_master::setup): Remove if 0'ed block. Fix argument to
- SetNamedPipeHandleState.
- * pinfo.cc (_pinfo::set_ctty): Lock ttys before setting sid/pgid.
- Improve debugging. Add temporary debugging.
- * tty.cc (tty_list::init_session): New function.
- (tty::init_session): Rename from tty_init. Reflect move of attach_tty
- to tty_list class.
- (tty::create_master): Rename from create_tty_master.
- (tty_list::attach): Rename from attach_tty. Reflect renaming of
- connect_tty to connect. Ditto for allocate_tty.
- (tty_terminate): Delete.
- (tty_list::terminate): Subsume tty_terminate. Use lock_ttys rather
- than manipulating mutex directly.
- (tty_list::allocate): Rename from allocate_tty. Use lock_ttys rather
- than manipulating mutex directly. Don't set sid here since linux
- apparently doesn't do this. Reflect move of create_tty_master into
- tty.
- (lock_ttys::lock_ttys): Define new constructor.
- (lock_ttys::release): New function.
- * tty.h (tty::exists): Return false immediately if !master_pid.
- (tty::set_master_closed): Define new function.
- (tty::create_master): Ditto.
- (tty::init_session): Ditto.
- (tty_list::mutex): New field.
- (tty_list::allocate): Define new function.
- (tty_list::connect): Ditto.
- (tty_list::attach): Ditto.
- (tty_list::init_session): Ditto.
- (lock_ttys): New class.
- (tty_init): Delete declaration.
- (tty_terminate): Ditto.
- (attach_tty): Ditto.
- (create_tty_master): Ditto.
-
-2006-06-03 Christopher Faylor <cgf@timesys.com>
-
- * Makefile.in (libdl.a): New library.
-
-2006-06-03 Christopher Faylor <cgf@timesys.com>
-
- * fhandler_tty.cc (fhandler_pty_master::close): Don't close handles if
- we don't own them.
- (fhandler_pty_master::setup): Make sure that original handle is closed
- when changing inheritance.
- (fhandler_pty_master::fixup_after_fork): Set from_master/to_master to
- arch value always.
- (fhandler_pty_master::fixup_after_exec): Clear from_master/to_master
- when close_on_exec.
-
-2006-06-03 Christopher Faylor <cgf@timesys.com>
-
- * cygheap.cc (init_cygheap::close_ctty): Remove obsolete code.
- * dcrt0.cc (child_info_spawn::handle_spawn): Signal ready after we've
- run fixup_after_exec.
- * dtable.cc (dtable::fixup_after_exec): Add debugging output.
- * fhandler_tty.cc (fhandler_pty_master::doecho): Use class version of
- to_master.
- (fhandler_tty_common::close): Remove obsolete code.
- (fhandler_tty_slave::fixup_after_exec): Don't close, since this is done
- in dtable's fixup_after_exec. (revisit later?)
- (fhandler_pty_master::fixup_after_exec): Ditto.
-
-2006-06-02 Christopher Faylor <cgf@timesys.com>
-
- * cygtls.h (CYGTLS_PADSIZE): Bump up or suffer a regrettable collision
- with the call chain.
- * tlsoffsets.h: Regenerate.
-
- * dcrt0.cc (break_here): Define unconditionally for use elsewhere.
- Call DebugBreak, if appropriate.
- (initial_env): Rely on break_here() to call DebugBreak.
- * exceptions.cc (try_to_debug): Ditto.
-
-2006-06-02 Christopher Faylor <cgf@timesys.com>
-
- * fhandler.cc (fhandler_base::fixup_after_exec): Declare here.
- * fhandler.h (fhandler_base::fixup_after_exec): Make non-inline.
- (fhandler_termios::fixup_after_fork): Delete declaration.
- (fhandler_termios::fixup_after_exec): Ditto.
- (fhandler_tty_common::inuse): Remove.
- (fhandler_tty_common::dup): Delete declaration.
- (fhandler_tty_common::fixup_after_fork): Ditto.
- (fhandler_tty_slave::fixup_after_exec): Declare new function.
- (fhandler_pty_master::dwProcessId): New variable.
- (fhandler_pty_master::from_master): Ditto.
- (fhandler_pty_master::to_master): Ditto.
- (fhandler_pty_master::setup): New function.
- (fhandler_pty_master::fixup_after_fork): Ditto.
- (fhandler_pty_master::fixup_after_exec): Ditto.
- * fhandler_termios.cc (fhandler_termios::fixup_after_exec): Delete
- definition.
- (fhandler_termios::fixup_after_fork): Ditto.
- * fhandler_tty.cc (fhandler_tty_master::init): Use fhandler_pty_master
- setup function rather than obsolete tty::common_init. Delete obsolete
- inuse setting.
- (fhandler_tty_slave::fhandler_tty_slave): Set inuse to NULL here.
- (fhandler_tty_slave::open): Change debugging output for clarity. Check
- for different things when doing a sanity check on the tty. Reflect the
- fact that master_pid now is the cygwin pid rather than the windows pid.
- Use "arch" rather than "archetype" for consistency.
- (fhandler_tty_slave::close): Close inuse here.
- (fhandler_tty_slave::dup): Remove old if 0'ed code.
- (fhandler_pty_master::dup): New function. Handles pty master
- archetype.
- (fhandler_pty_master::fhandler_pty_master): Zero pty_master specific
- fields.
- (fhandler_pty_master::open): Implement using archetypes, similar to
- slave. Use fhandler_pty_master setup function rather than obsolete
- tty::common_init. Don't set inuse.
- (fhandler_tty_common::close): Don't deal with inuse. Delete old if
- 0'ed code.
- (fhandler_pty_master::close): Implement using archetypes. Close
- from_master and to_master.
- (fhandler_tty_common::set_close_on_exec): Just set close_on_exec flag
- here since everything uses archetypes now.
- (fhandler_tty_common::fixup_after_fork): Delete definition.
- (fhandler_tty_slave::fixup_after_exec): Define new function.
- (fhandler_pty_master::setup): New function, derived from
- tty::common_init.
- (fhandler_pty_master::fixup_after_fork): New function.
- (shared_info.h): Reset SHARED_INFO_CB to reflect new tty size.
- * tty.cc (tty_list::terminate): Close individual handles from
- tty_master.
- (tty::master_alive): Delete.
- (tty::make_pipes): Ditto.
- (tty::common_init): Ditto.
- * tty.h (tty::from_slave): Delete.
- (tty::to_slave): Ditto.
- (tty::common_init): Delete declaration.
- (tty::make_pipes): Ditto.
- (tty::master_pid): Define as pid_t since it is now a cygwin pid.
-
-2006-06-01 Christopher Faylor <cgf@timesys.com>
-
- * cygheap.cc (cygheap_fixup_in_child): Don't close parent handle here.
- Let the caller do that.
- * dcrt0.cc (child_info_spawn::handle_spawn): Close parent handle here
- to allow fixup_after_exec functions to use it.
-
- * cygtls.cc (_cygtls::call2): Avoid calling exit thread if called with
- *crt0_1 functions.
- * cygtls.h (_cygtls::isinitialized): Check that we actually have a tls
- before seeing if it is initialized.
- * gendef (_sigfe_maybe): Ditto.
- * dcrt0.cc (dll_crt0_1): Remove static, use just one argument.
- * dll_init.cc (dllcrt0_info): New structure.
- (dll_dllcrt0): Change into a front-end to renamed dll_dllcrt0_1 so that
- we'll always be assured of having something like a tls.
- (dll_dllcrt0_1): New function, basically renamed from from dll_dllcrt0.
- Unconditionally call _my_tls.init_exception_handler now that we are
- assured of having a tls. Change variable name from "linking" to "linked".
- * winsup.h (dll_crt0_1): Declare.
- (dll_dllcrt0_1): Ditto.
-
-2006-05-30 Christopher Faylor <cgf@timesys.com>
-
- * cygtls.cc (_cygtls::call2): Don't call ExitThread on the main thread.
-
-2006-05-29 Christopher Faylor <cgf@timesys.com>
-
- * winf.h (MAXCYGWINCMDLEN): Set down size to 30000 or suffer fork
- errors.
-
-2006-05-28 Christopher Faylor <cgf@timesys.com>
-
- * sigproc.cc (child_info::proc_retry): Mask all of the bits we're
- interested in, which includes bits above and below 0xc0000000.
-
-2006-05-27 Christopher Faylor <cgf@timesys.com>
-
- * dll_init.cc (dll_dllcrt0): Previous change didn't work very well with
- fork. Semi-revert it but change name of variable to something that
- makes better sense.
-
-2006-05-27 Christopher Faylor <cgf@timesys.com>
-
- * thread.cc (verifyable_object_isvalid): Check for NULL specifically.
-
-2006-05-27 Christopher Faylor <cgf@timesys.com>
-
- * dll_init.cc (dll_dllcrt0): Call _my_tls.init_exception_handler if
- we've finished initializing (Thanks to Gary Zablackis for noticing this
- problem). Just use cygwin_finished_initializing rather than defining a
- separate variable.
-
-2006-05-25 Christopher Faylor <cgf@timesys.com>
-
- * debug.h (ModifyHandle): Define new macro.
- (modify_handle): Declare new function.
- * debug.cc (modify_handle): Define new function.
- * fhandler.h (fhandler_base::fork_fixup): Change return value from void
- to bool.
- * fhandler.cc (fhandler_base::fork_fixup): Return true if fork fixup has
- been done.
- * pipe.cc (fhandler_pipe::set_close_on_exec): Set inheritance of
- protected handle via ModifyHandle if DEBUGGING.
- (fhandler_pipe::fixup_after_fork): Protect guard handle if fork fixup
- has been done.
-
-2006-05-24 Christopher Faylor <cgf@timesys.com>
-
- * cygtls.cc (_cygtls::call): Call call2 using _my_tls.
- (_cygtls::init_exception_handler): Always replace existing exception
- handler with cygwin exception handler.
- * cygtls.h (_cygtls::call2): Remove static designation.
- * dcrto.cc (dll_crt0_1): Define in a way that allows calling via
- _cygtls::call.
- (_initialize_main_tls): Delete.
- (_dll_crt0): Call dll_crt0_1 via cygtls::call. Set _main_tls here.
- * external.cc (cygwin_internal): Implement CW_CYGTLS_PADSIZE.
- * include/sys/cygwin.h (CW_CYGTLS_PADSIZE): Define.
- * tlsoffsets.h: Regenerate.
-
-2006-05-24 Christopher Faylor <cgf@timesys.com>
-
- * configure.in: Update to newer autoconf.
- (thanks to Steve Ellcey)
- * configure: Regenerate.
- * aclocal.m4: New file.
-
-2006-05-23 Lev Bishop <lev.bishop+cygwin@gmail.com>
-
- * fhandler.cc (readv): Remove nonsensical assert.
-
-2006-05-23 Christopher Faylor <cgf@timesys.com>
-
- * select.cc (start_thread_socket): Delay setting thread local exitsock
- until we know it's correct. Return correct value on error.
-
-2006-05-23 Lev Bishop <lev.bishop+cygwin@gmail.com>
- Christopher Faylor <cgf@timesys.com>
-
- * select.cc (start_thread_socket): Clean up exitsock in case of error.
- Use si->exitcode consistently.
-
-2006-05-21 Christopher Faylor <cgf@timesys.com>
-
- * child_info.h (_CI_SAW_CTRL_C): New enum.
- (CURR_CHILD_INFO_MAGIC): Reset.
- (saw_ctrl_c): New function.
- (set_saw_ctrl_c): Ditto.
- * sigproc.cc (child_info::proc_retry): Return EXITCODE_OK if we get
- STATUS_CONTROL_C_EXIT and we actually saw a CTRL-C.
- * spawn.cc (dwExeced): Delete.
- (chExeced): New variable.
- (spawn_guts): Set chExeced;
- * exceptions.cc (dwExeced): Delete declaration.
- (chExeced): Declare.
- (ctrl_c_handler): Detect if we're an exec stub process and set a flag,
- if so.
-
- * fhandler_tty.cc (fhandler_tty_common::__release_output_mutex): Add
- extra DEBUGGING test.
-
- * pinfo.cc: Fix comment.
-
-2006-05-21 Christopher Faylor <cgf@timesys.com>
-
- * fhandle.h (fhandler_pipe::create_guard): Revert change which
- eliminated SECURITY_ATTRIBUTES argument.
- * pipe.cc (fhandler_pipe::open): Duplicate guard from other process and
- protect it appropriately. Eliminate unneeded writepipe_exists
- temporary variable. Set inheritance appropriately.
- (fhandler_pipe::set_close_on_exec): Revert change which eliminated
- handling guard inheritance.
- (fhandler_pipe::fixup_after_fork): Ditto. Use correct name of entity
- being checked by fork_fixup.
- (fhandler_pipe::fixup_after_exec): Don't bother with guard here.
- (fhandler_pipe::dup): Cosmetic changes and revert creation of
- writepipe_exists as noninheritable.
- (fhandler_pipe::create): Revert change which eliminated
- SECURITY_ATTRIBUTES argument. Revert change which always made
- writepipe_exists noninheritable.
-
-2006-05-21 Christopher Faylor <cgf@timesys.com>
-
- * debug.cc (add_handle): Print handle value when collision detected.
- * dtable.cc (dtable::stdio_init): Cosmetic change.
- * fhandler.h (fhandler_base::create_read_state): Protect handle.
- (fhandler_pipe::create_guard): Ditto. Always mark the handle as
- inheritable.
- (fhandler_pipe::is_slow): Return boolean value rather than numeric 1.
- * pipe.cc (fhandler_pipe::fhandler_pipe): Always flag that we need fork
- fixup.
- (fhandler_pipe::open): Don't pass security attributes to create_guard.
- (fhandler_pipe::set_close_on_exec): Don't handle guard here.
- (fhandler_pipe::close): Accommodate now-protected guard handle.
- (fhandler_pipe::fixup_in_child): Don't protect read_state here.
- (fhandler_pipe::fixup_after_exec): Close guard handle if close_on_exec.
- (fhandler_pipe::fixup_after_fork): Don't bother with guard here.
- (fhandler_pipe::dup): Don't set res to non-error prematurely. Use
- boolean values where appropriate. Protect guard and read_state.
- (fhandler_pipe::create): Don't call need_fork_fixup since it is now the
- default. Don't protect read_state or guard.
-
- * pipe.cc (fhandler_base::ready_for_read): Use bool values for "avail".
-
- * spawn.cc (spawn_guts): Set cygheap->pid_handle as inheritable when
- protecting.
-
-2006-05-15 Lev Bishop <lev.bishop+cygwin@gmail.com>
- Christopher Faylor <cgf@timesys.com>
-
- * select.cc (fhandler_pipe::ready_for_read): Actually get the guard
- mutex for blocking reads.
-
-2006-05-20 Christopher Faylor <cgf@timesys.com>
-
- * fhandler_tty.cc (fhandler_tty::close): Remove problematic hExeced guard.
-
-2006-05-20 Christopher Faylor <cgf@timesys.com>
-
- * fhandler_tty.cc (fhandler_tty_slave::open): Reinstate call to
- need_invisible on first pty open.
-
-2006-05-18 Christopher Faylor <cgf@timesys.com>
-
- * fhandler_console.cc (fhandler_console::need_invisible): Allocate an
- invisible window station when ctty != TTY_CONSOLE.
-
-2006-05-16 Christopher Faylor <cgf@timesys.com>
-
- * cygtls.cc (_cygtls::remove): Don't test for initialization since
- this function will always be called when _my_tls is initialized.
- * init.cc (dll_entry): Don't attempt to remove tls info if _my_tls is
- obviously not even available.
-
-2006-05-15 Christopher Faylor <cgf@timesys.com>
-
- * sigproc.cc (no_signals_available): Detect hwait_sig ==
- INVALID_HANDLE_VALUE.
- (wait_sig): Set hwait_sig to INVALID_HANDLE_VALUE on __SIGEXIT.
-
-2006-05-15 Christopher Faylor <cgf@timesys.com>
-
- * cygtls.cc (_cygtls::init_thread): Zero entire _my_tls structure and
- no more.
- * cygtls.h (_my_tls::padding): Delete.
- (CYGTLS_PADSIZE): Redefine concept of padding to mean padding at the
- end of the stack.
- * dcrt0.cc (initialize_main_tls): Change return to void.
- * gentls_offsets: Treat const specially, too. Keep going after a '}'
- is found. Change negative offset calculation to use CYGTLS_PADSIZE.
- * init.cc (_my_oldfunc): New variable.
- (threadfunc_fe): Use stored tls value for oldfunc rather than blindly
- writing to the stack.
- (munge_threadfunc): Set oldfunc in tls.
- (dll_entry): Initialize tls allocation.
- * tlsoffsets.h: Regenerate.
-
-2006-05-13 Christopher Faylor <cgf@timesys.com>
-
- * ntdll.h (STATUS_INVALID_INFO_CLASS): Conditionalize.
-
-2006-05-10 Brian Dessent <brian@dessent.net>
-
- * Makefile.in (clean): Also delete *.dbg.
-
-2006-05-08 Christian Franke <Christian.Franke@t-online.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::readdir): Fix typo which
- caused test for ".." to be skipped.
-
-2006-05-02 Christopher Faylor <cgf@timesys.com>
-
- * external.cc (cygwin_internal): Set errno on failure.
-
-2006-04-27 Corinna Vinschen <corinna@vinschen.de>
-
- * pipe.cc (DEFAULT_PIPEBUFSIZE): Raise to 64K.
-
-2006-04-26 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (fhandler_base): Change fstat_helper prototype
- to take file size and inode number as 64 bit values.
- * fhandler_disk_file.cc (FS_IS_SAMBA): Move to path.cc
- (FS_IS_SAMBA_WITH_QUOTA): Ditto.
- (path_conv::hasgood_inode): Delete.
- (path_conv::is_samba): Delete.
- (path_conv::isgood_inode): Centralized function to recognize
- a good inode number.
- (fhandler_base::fstat_by_handle): Constify fvi_size and fai_size.
- Accommodate argument change in fstat_helper.
- (fhandler_base::fstat_by_name): Ditto.
- (fhandler_base::fstat_helper): Accommodate argument change. Call
- path_conv::isgood_inode to recognize good inodes.
- (fhandler_disk_file::opendir): Explain Samba weirdness here.
- Call path_conv::fs_is_samba instead of path_conv::is_samba.
- (fhandler_disk_file::readdir): Add STATUS_INVALID_INFO_CLASS
- as valid return code from NtQueryDirectoryFile to indicate that
- FileIdBothDirectoryInformation is not supported.
- Call path_conv::isgood_inode to recognize good inodes.
- * ntdll.h (STATUS_INVALID_INFO_CLASS): Define.
- * path.cc (fs_info::update): Rework file system recognition
- and set appropriate flags.
- * path.h (struct fs_info): Add is_ntfs, is_samba and is_nfs flags.
- Constify pure read accessors.
-
-2006-04-24 Christopher Faylor <cgf@timesys.com>
-
- * environ.cc (getearly): Force correct dereference order when
- inspecting environ table.
-
-2006-04-24 Corinna Vinschen <corinna@vinschen.de>
-
- * select.cc (thread_pipe): Raise sleep time only every 8th iteration.
- (thread_mailslot): Ditto.
-
-2006-04-23 Corinna Vinschen <corinna@vinschen.de>
- Christopher Faylor <cgf@timesys.com>
-
- * select.cc (thread_pipe): Raise sleep time dynamically to speed up
- select on pipes when copying lots of data.
- (thread_mailslot): Ditto for mailslots.
-
-2006-04-22 Christopher Faylor <cgf@timesys.com>
-
- * signal.cc (abort): On second thought, just set incyg once.
-
-2006-04-22 Christopher Faylor <cgf@timesys.com>
-
- * signal.cc (abort): Set incyg manually to help get a reliable gdb
- stack trace.
- * cygwin.din (abort): Make NOSIGFE.
-
-2006-04-21 Pierre Humblet Pierre.Humblet@ieee.org
- Christopher Faylor <cgf@timesys.com>
-
- * environ.cc (getearly): Use GetEnvironmentVariable and cmalloc instead
- of GetEnvironmentStrings.
- (environ_init): Revert rawenv stuff.
-
-2006-04-21 Christopher Faylor <cgf@timesys.com>
-
- * environ.cc (rawenv): Make this variable a file-scope static.
- (getearly): Rename 's' variable to 'len' since 's' is used fairly
- consistently throughout cygwin as a string variable. Remove rawenv
- declaration. Perform other minor cleanups.
- (environ_init): Remove rawenv declaration. Only set rawenv to
- GetEnvironmentStrings() if it has not already been set. Properly free
- rawenv in all cases.
-
-2006-04-21 Christopher Faylor <cgf@timesys.com>
-
- * tty.h (tty::hwnd): Move to tty_min.
- (tty::gethwnd): Ditto.
- (tty::sethwnd): Ditto.
- (tty_min::hwnd): Receive variable from tty class.
- (tty_min::gethwnd): Receive function from tty classs.
- (tty_min::sethwnd): Ditto.
- * dtable.cc (dtable::stdio_init): Only call init_console_handler when
- we actually own the console.
- * fhandler_console.cc (fhandler_console::get_tty_stuff): Set tty's hwnd
- to non-zero value.
- * fhandler_termios.cc (fhandler_termios::tcsetpgrp): Semi-reinstate
- handling of console when pgrp is set.
-
-2006-04-21 Pierre Humblet <Pierre.Humblet@ieee.org>
- Corinna Vinschen <corinna@vinschen.de>
-
- * environ.cc (getearly): New function.
- (findenv_func): New function pointer, predefined to getearly.
- (getenv): Call findenv function over the findenv_func pointer.
- (environ_init): Change findenv_func pointer to my_findenv after Cygwin
- environment is initialized.
-
-2006-04-21 Lars Munch <lars@segv.dk>
-
- * include/asm/byteorder.h (__ntohl): Fix the missing uint32_t.
-
-2006-04-21 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::wait): Reorder setting
- WSAError to avoid spurious errors with WSAError set to 0.
-
-2006-04-21 Corinna Vinschen <corinna@vinschen.de>
-
- * include/asm/byteorder.h: Include stdint.h. Per standard, change
- datatypes in ntohX and htonX functions to uintXX_t types.
-
-2006-04-18 Christopher Faylor <cgf@timesys.com>
-
- * exceptions.cc (ctrl_c_handler): Only exit TRUE on CTRL_LOGOFF_EVENT
- when we have actually handled the event.
-
-2006-04-17 Eric Blake <ebb9@byu.net>
-
- * mktemp.cc (_gettemp): Open temp files in binary mode.
-
-2006-04-14 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::readdir): Use UINT32_MAX
- instead of UINT_MAX.
-
-2006-04-14 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (path_conv::hasgood_inode): Make inline.
- Drop remote fs handling entirely since unreliable inode numbers
- are now recognized differently.
- (path_conv::is_samba): Make inline.
- (fhandler_disk_file::opendir): Reformat comment.
- (fhandler_base::fstat_helper): Special case remote file systems
- returning (unreliable) 32 bit inode numbers.
- (fhandler_disk_file::readdir): Ditto.
- * fhandler_netdrive.cc (fhandler_netdrive::readdir): Ditto.
-
-2006-04-13 Christopher Faylor <cgf@timesys.com>
-
- * spawn.cc (spawn_guts): Move ch.set() call back to where it was
- supposed to be.
-
-2006-04-13 Corinna Vinschen <corinna@vinschen.de>
-
- * sysconf.cc (sysconf): Add _SC_THREADS, _SC_THREAD_ATTR_STACKSIZE,
- _SC_THREAD_PRIORITY_SCHEDULING, _SC_THREAD_PROCESS_SHARED,
- _SC_THREAD_SAFE_FUNCTIONS, _SC_TIMERS handling.
-
-2006-04-12 Corinna Vinschen <corinna@vinschen.de>
- Christopher Faylor <cgf@timesys.com>
-
- * spawn.cc (spawn_guts): Revert patch which treated derived cygwin
- programs differently from those which are mounted with -X. Pass extra
- argument to linebuf::fromargv.
- * winf.h (MAXCYGWINCMDLEN): New define.
- (linebuf::finish): Add a new argument denoting when command line
- overflow is ok.
- (linebuf::fromargv): Ditto.
- * winf.cc (linebuf::finish): Implement above change.
- (linebuf::fromargv): Ditto.
-
-2006-04-11 Christopher Faylor <cgf@timesys.com>
-
- * Makefile.in (DLL_OFILES): Add winf.o.
- * spawn.cc: Move command line handling stuff into winf.cc.
- * winf.h: New file.
- * winf.cc: New file.
-
-2006-04-05 Christopher Faylor <cgf@timesys.com>
-
- * fhandler_socket.cc: Move iptypes.h include after winsock2 since it
- now relies on it.
- * net.cc: Ditto.
-
-2006-04-05 Christopher Faylor <cgf@timesys.com>
-
- * dcrt0.cc (dll_crt0_0): Move user_data->{resourcelocks,threadinterface}
- initialization here from dll_crt0_1.
- (dll_crt0_1): See above.
-
-2006-04-04 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (fdsock): Raise default SO_RCVBUF/SO_SNDBUF buffer sizes to
- the same values as on Linux.
-
-2006-04-03 Christopher Faylor <cgf@timesys.com>
-
- * child_info.h (CURR_CHILD_INFO_MAGIC): Update.
- (child_info_fork::alloc_stack): Move into this class.
- (child_info_fork::alloc_stack_hard_way): Ditto.
- * dcrt0.cc (child_info_fork::alloc_stack): Ditto.
- (child_info_fork::alloc_stack_hard_way): Ditto.
- (_dll_crt0): Reference alloc_stack via fork_info.
-
-2006-04-03 Corinna Vinschen <corinna@vinschen.de>
-
- * spawn.cc (linebuf::finish): Drop argument. Don't check command line
- length.
- (spawn_guts): Remove wascygexec. Check real_path.iscygexec instead.
- Accommodate change to linebuf::finish.
-
-2006-04-03 Christopher Faylor <cgf@timesys.com>
-
- * dcrt0.cc (sm): Delete.
- (alloc_stack_hard_way): Figure out where the stack lives here rather
- than relying on previously filled out information which has been
- invalid since 1.5.19.
-
-2006-03-31 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (FS_IS_SAMBA_WITH_QUOTA): New define.
- (path_conv::hasgood_inode): Recognize Samba with quota support
- compiled in.
- (path_conv::is_samba): Ditto. Fix comment to include Samba version
- numbers for later reference.
-
-2006-03-30 Corinna Vinschen <corinna@vinschen.de>
-
- * security.h (sec_user_nih): Make sid1 argument mandatory.
- (sec_user): Ditto.
-
-2006-03-29 Christopher Faylor <cgf@timesys.com>
-
- * sigproc.cc (wait_for_sigthread): Use the current user sid when
- setting up the signal pipe rather than relying on (eventually) the
- effective sid.
-
-2006-03-29 Christopher Faylor <cgf@timesys.com>
-
- * dcrt0.cc (child_info_fork::handle_fork): Set uid/gid in myself so
- that it can be used by subsequent startup functions.
- (dll_crt0_0): Issue a warning if DuplicateTokenEx fails and DEBUGGING.
- (dll_crt0_1): Move user_data->{resourcelocks,threadinterface}
- initialization here from dll_crt0_0.
- * fork.cc (frok::child): Tell wait_for_sigthread that this is fork.
- (frok::parent): Only initialize start_time once. Tighten time when
- we're "deimpersonated".
- * sigproc.cc (signal_fixup_after_exec): Rework (futiley) sa_buf stuff.
- Add debugging output.
- (wait_for_sigthread): Accept an argument which illustrates whether we
- are forked or not.
- (wait_sig): Avoid using myself pointer.
- * winsup.h ((wait_for_sigthread): Reflect change to argument.
-
-2006-03-26 Christopher Faylor <cgf@timesys.com>
-
- * spawn.cc (spawn_guts): Close handles if we know that we will not be
- seeing a sync event from the child.
-
-2006-03-26 Christopher Faylor <cgf@timesys.com>
-
- * sigproc.cc (wait_sig): Move myself manipulation...
- (wait_for_sigthread): ...to here.
-
-2006-03-24 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_floppy.cc: Include ntdef.h and ntdll.h.
- (fhandler_dev_floppy::get_drive_info): Rearrange so that now
- NtQueryVolumeInformationFile is called on drives which don't support
- IOCTL_DISK_GET_DRIVE_GEOMETRY.
- * ntdll.h (struct _FILE_FS_SIZE_INFORMATION): Add.
- (enum _FSINFOCLASS): Add missing values.
-
-2006-03-23 Christopher Faylor <cgf@timesys.com>
-
- * fhandler_console.cc (fhandler_console::fixup_after_fork_exec): Make
- error message more explicit.
- * pinfo.cc (_pinfo::commune_request): Don't lock process unless we're
- looking for fifos.
-
-2006-03-23 Christopher Faylor <cgf@timesys.com>
-
- * dcrt0.cc (child_info_spawn::handle_spawn): Don't initialize the
- console handler here.
- * dtable.cc (dtable::stdio_init): Initialize console handler here.
-
-2006-03-23 Christopher Faylor <cgf@timesys.com>
-
- * sigproc.cc (sigalloc): Don't set SA_RESTART here.
- * signal.cc (_SA_NORESTART): New flag.
- (sigaction_worker): New function, derived from sigaction. Don't set
- internal flags unless called internally.
- (sigaction): Use sigaction_worker.
- (signal): Honor new _SA_NORESTART flag.
- (siginterrupt): Set _SA_NORESTART flag appropriately. Use
- sigaction_worker to set flags.
- * include/cygwin/signal.h: Define _SA_INTERNAL_MASK here.
-
-2006-03-22 Corinna Vinschen <corinna@vinschen.de>
-
- * thread.cc (pthread_mutex::is_good_initializer_or_bad_object): Delete.
- (pthread_cond::is_good_initializer_or_bad_object): Delete.
- (pthread_rwlock::is_good_initializer_or_bad_object): Delete.
- (pthread_cond::init): Remove disabled code. Guard assignment to
- object to initialize against access violation.
- (pthread_rwlock::init): Ditto.
- (pthread_mutex::init): Ditto.
-
-2006-03-22 Eric Blake <ebb9@byu.net>
-
- * fhandler.cc (fcntl): Print flags in hex.
-
-2006-03-22 Christopher Faylor <cgf@timesys.com>
-
- * dcrt0.cc (dll_crt0_0): Semi-revert 2006-03-14 change which moved
- pinfo_init and uinfo_init here.
- (dll_crt0_1): Ditto.
- (__dll_crt0): Ditto. Don't call update_envptrs here.
- (dll_crt0_1): Ditto. Move wait_for_sigthread call here from dll_crt0_0.
- * environ.cc (environ_init): Call it here instead.
- * sigproc.cc (my_readsig): New static variable.
- (wait_for_sigthread): Set up read pipe here since we are assured that
- we have the proper privileges when this is called.
- (talktome): Eliminate second argument since it is available as a global
- now.
- (wait_sig): Reflect use of my_readsig.
-
-2006-03-22 Corinna Vinschen <corinna@vinschen.de>
-
- * thread.cc (pthread_cond::init): Disable validity test of object
- to initialize since test of uninitialized content is unreliable.
- (pthread_rwlock::init): Ditto.
- (pthread_mutex::init): Ditto.
-
-2006-03-21 Christopher Faylor <cgf@timesys.com>
-
- * signal.cc (signal): Don't set SA_RESTART here.
- (siginterrupt): White space.
- * sigproc.cc (sigalloc): Set SA_RESTART here, on initialization.
-
-2006-03-21 Christopher Faylor <cgf@timesys.com>
-
- * child_info.h (child_status): Fix typo which made it impossible to set
- iscygwin.
- (child_info::isstraced): Booleanize.
- (child_info::iscygwin): Ditto.
- * sigproc.cc (child_info::child_info): Minor cleanup of flag setting.
- * spawn.cc (spawn_guts): Only close_all_files when we know the process
- has started successfully.
-
- * exceptions.cc (init_console_handler): Fix indentation.
-
-2006-03-20 Christopher Faylor <cgf@timesys.com>
-
- * dcrt0.cc (dll_crt0_0): Call SetErrorMode earlier.
- * pinfo.cc (_pinfo::dup_proc_pipe): Reset wr_proc_pipe on failure.
- Return previous pipe handle.
- * pinfo.h (_pinfo::dup_proc_pipe): Reflect change to return value.
- * spawn.cc (spawn_guts): Restore previous proc pipe on retry or if
- process exits before synchronization.
-
-2006-03-20 Christopher Faylor <cgf@timesys.com>
-
- * child_info.h (child_status): New enum.
- (child_info::flag): Rename from 'straced'.
- (child_info::isstraced): New function.
- (child_info::iscygwin): Ditto.
- (child_info_fork::handle_fork): Reparmize.
- (child_info_fork::handle_failure): Ditto.
- (child_info_spawn::handle_spawn): New function.
- * dcrt0.cc (get_cygwin_startup_info): Use isstraced method.
- (child_info_spawn::handle_spawn): Define new function from code
- previously in dll_crt0_0.
- (dll_crt0_0): Move spawn stuff into handle_spawn. Only call
- init_console_handler for fork case.
- * sigproc.cc (child_info::child_info): Set flag appropriately.
- (child_info::proc_retry): Treat exit code as "funny" if it's a cygwin
- process.
- * spawn.cc (spawn_guts): Remove commented out flag setting.
-
-2006-03-19 Christopher Faylor <cgf@timesys.com>
-
- * pinfo.cc (commune_process): Fix randomly invalid pointer which caused
- fifos to work incorrectly.
-
-2006-03-19 Christopher Faylor <cgf@timesys.com>
-
- * dcrt0.cc (dll_crt0_0): Oops. We need to bother with setting
- init_console_handler in the fork/exec case.
-
-2006-03-19 Christopher Faylor <cgf@timesys.com>
-
- * dcrt0.cc (dll_crt0_0): Don't bother with setting init_console_handler
- here since it will be set later when we discover if we have a ctty or
- not.
- * exceptions.cc (init_console_handler): Properly remove NULL handler.
-
-2006-03-18 Christopher Faylor <cgf@timesys.com>
-
- * pinfo.h (EXITCODE_OK): Define new constant.
- * sigproc.cc (child_info::sync): Return EXITCODE_OK if entering with
- exit_code == 0.
- (sig_send): Don't complain if sending signals while blocked if the
- sender isn't in the main thread.
-
-2006-03-18 Christopher Faylor <cgf@timesys.com>
-
- * child_info.h (CURR_CHILD_INFO_MAGIC): Regenerate.
- (child_info::retry): Move here from fork subclass.
- (child_info::exit_code): New field.
- (child_info::retry_count): Max retry count for process start.
- (child_info::proc_retry): Declare new function.
- (child_info_fork::retry): Move to parent.
- (child_info_fork::fork_retry): Ditto.
- * dcrt0.cc (child_info::fork_retry): Rename and move.
- (child_info_fork::handle_failure): Move.
- (dll_crt0_0): Initialize console handler based on whether we have a
- controlling tty or not. Avoid nonsensical check for fork where it can
- never occur.
- * environ.cc (set_proc_retry): Rename from set_fork_retry. Set
- retry_count in child_info.
- (parse_thing): Reflect above change.
- * exceptions.cc (dummy_ctrl_c_handler): Remove unused variable name.
- (ctrl_c_handler): Always return TRUE for the annoying
- CTRL_LOGOFF_EVENT.
- * fhandler_termios.cc (fhandler_termios::tcsetpgrp): Remove call to
- init_console_handler.
- * fhandler_tty.cc (fhandler_tty_slave::open): Just call
- mange_console_count here and let it decide what to do with initializing
- console control handling.
- * fork.cc (fork_retry): Remove definition.
- (frok::parent): Define static errbuf and use in error messages (not
- thread safe yet). Close pi.hThread as soon as possible. Protect
- pi.hProcess as soon as possible. Don't set retry_count. That happens
- automatically in the constructor now. Accommodate name change from
- fork_retry to proc_retry.
- * init.cc (dll_entry): Turn off ctrl-c handling early until we know how
- it is supposed to be handled.
- * pinfo.cc (_pinfo::dup_proc_pipe): Remember original proc pipe value
- for failure error message. Tweak debug message slightly.
- * sigproc.cc (child_info::retry_count): Define.
- (child_info::child_info): Initialize retry count.
- (child_info::sync): Set exit code if process dies before
- synchronization.
- (child_info::proc_retry): Rename from child_info_fork::fork_retry. Use
- previously derived exit code. Be more defensive about what is
- classified as an error exit.
- (child_info_fork::handle_failure): Move here from dcrt0.cc.
- * spawn.cc (spawn_guts): Maintain error mode when starting new process
- to avoid annoying pop ups. Move deimpersonate call within new loop.
- Move envblock freeing to end. Loop if process dies prematurely with
- bad exit code.
- * syscalls.cc (setpgid): Remove hopefully unneeded call to
- init_console_handler.
-
-2006-03-15 Christopher Faylor <cgf@timesys.com>
-
- * cygheap.cc (init_cygheap::manage_console_count): Turn console control
- handler on/off depending on whether we have allocated a console or not.
- * dcrt0.cc (child_info_fork::fork_retry): Add more potential retry
- statuses.
- (dll_crt0_0): Turn on/off console control depending on whether we have
- a controlling tty or not.
- * exceptions.cc (init_console_handler): Change BOOL to bool.
- * fhandler_console.cc (fhandler_console::need_invisible): Cosmetic
- change.
- * winsup.h (init_console_handler): Reflect argument type change.
-
- * wincap.h (supports_setconsolectrlhandler_null): Remove duplicate
- capability throughout.
- * wincap.cc: Ditto.
-
-2006-03-14 Christopher Faylor <cgf@timesys.com>
-
- * child_info.h (child_info_fork::fork_retry): Declare new function.
- * dcrt0.cc (child_info_fork::fork_retry): Define new function.
- * fork.cc (frok::parent): Move retry decision into
- child_info_fork::fork_retry and honor what it tells us to do.
- * sigproc.cc (sig_send): Unhold signals on __SIGEXIT.
-
-2006-03-14 Christopher Faylor <cgf@timesys.com>
-
- * fork.cc (frok::parent): Improve error message.
-
-2006-03-14 Christopher Faylor <cgf@timesys.com>
-
- * dcrt0.cc (main_environ): Initialize to &__cygwin_environment.
- (dll_crt0_1): Move resourcelocks, thread interface, pinfo_init, and
- uinfo_init...
- (dll_crt0_0): ...to here.
- (_dll_crt0): Call update_envptrs here after setting main_environ.
- * environ.cc (environ_init): Eliminate initted variable. Don't call
- update_envptrs here.
- * sigproc.cc (wait_sig): Use my_sendsig when calling CreatePipe to
- avoid a dereference.
-
-2006-03-13 Christopher Faylor <cgf@timesys.com>
-
- * child_info.h (child_info_fork::handle_failure): Declare new function.
- (child_info_fork::retry): New field.
- * dcrt0.cc (__api_fatal_exit_val): Define.
- (child_info_fork::handle_failure): Define new function.
- (__api_fatal): Exit using __api_fatal_exit_val value.
- * environ.cc (set_fork_retry): Set fork_retry based on CYGWIN
- environment variable.
- (parse_thing): Add "fork_retry" setting.
- * fork.cc (fork_retry): Define.
- (frok::parent): Reorganize to allow retry of failed child creation if
- child signalled that it was ok to do so.
- * heap.cc (heap_init): Signal parent via handle_failure when
- VirtualAlloc fails.
- * pinfo.h (EXITCODE_RETRY): Declare.
- * sigproc.cc (child_info::sync): Properly exit with failure condition
- if called for fork and didn't see subproc_ready.
- * spawn.cc (spawn_guts): Use windows pid as first argument.
- * winsup.h: Remove obsolete NEW_MACRO_VARARGS define.
- (__api_fatal_exit_val): Declare.
- (set_api_fatal_return): Define.
- (in_dllentry): Declare.
- * exceptions.cc (inside_kernel): Remove unneeded in_dllentry
- declaration.
-
-2006-03-13 Christopher Faylor <cgf@timesys.com>
-
- * dcrt0.cc (dll_crt0_0): Reorganize so that sigproc_init is called a
- little later. Add a comment.
- * fork.cc (resume_child): Make void.
- (frok::parent): Only zero pi when necessary. Explicitly zero si. Set
- this_errno when child_copy fails. Accommodate change to resume_child.
- * sigproc.cc (sigalloc): Move global_sigs initialization here.
- (sigproc_init): Move global_sigs.
- (sig_send): Just check for flush signals once.
-
- * wincap.h: Define supports_setconsolectrlhandler_null throughout.
- * wincap.cc: Ditto.
-
-2006-03-13 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (LoadDLLfuncNt): New define to wrap NT native functions.
- Use for NT native functions throughout.
- * dtable.cc (handle_to_fn): Treat return value of NtQueryObject as
- NTSTATUS value.
-
-2006-03-12 Christopher Faylor <cgf@timesys.com>
-
- * cygtls.cc (_cygtls::remove): Reset initialized flag right away if we
- were previously initialized.
- * cygtls.h (_cygtls::initialized): Move nearer to the end to catch
- situation when Windows 98 mysteriously changes parts of _my_tls when
- thread is detaching.
- * gendef (__sigfe_maybe): Simplify slightly.
- * tlsoffsets.h: Regenerate.
-
-2006-03-12 Christopher Faylor <cgf@timesys.com>
-
- * cygtls.h (CYGTLS_INITIALIZED): Change to a little more unlikely value.
- (CYGTLSMAGIC): Delete.
- * dcrt0.cc (dll_crt0_0): Call sigproc_init during init startup.
- (_dll_crt0): Don't worry about sync_startup. Just wait for sigthread here.
- * dll_init.cc (cygwin_detach_dll): Only pick up tls version of retaddr
- if we have a valid tls.
- * fork.cc (frok::child): Remove sigproc_init initialization since it
- happens much earlier now.
- * gendef: Recognize SIGFE_MAYBE.
- (fefunc): Generate calls to _sigfe_maybe, if appropriate.
- (_sigfe_maybe): New function.
- * init.cc (search_for): Always initialize search_for, even on fork.
- (calibration_thread): Delete.
- (calibration_id): Delete.
- (prime_threads): Delete.
- (munge_threadfunc): Remove calibration_thread special case. Avoid
- calling thread function if we haven't yet hit the "search_for" thread.
- (dll_entry): Remove prime_threads call. Only call munge_threadfunc
- when hwait_sig is active. Ditto. for _my_tls.remove ();
- * sigproc.cc (hwait_sig): Make global.
- (sigproc_init): Don't bother with sync_startup.
- (sig_send): Treat flush as a no-op when signals are held.
- (wait_sig): Cause signals to be held after fork.
-
-2006-03-09 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (rename): Move existance check for oldpath further up
- to the start of the function. Avoid another case of a name collision
- if oldpath is a shortcut and a file or directory newpath already exists.
-
-2006-03-09 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (NtClose): Define.
- (NtOpenDirectoryObject): Define.
- (NtQueryDirectoryObject): Define.
- * fhandler_proc.cc: Include ctype.h and wchar.h.
- (format_proc_partitions): Revamp loop over existing harddisks by
- scanning the NT native \Device object directory and looking for
- Harddisk entries.
- * ntdll.h: Rearrange system call declarations alphabetically.
- (DIRECTORY_QUERY): Define.
- (struct _DIRECTORY_BASIC_INFORMATION): Define.
- (NtOpenDirectoryObject): Declare.
- (NtQueryDirectoryObject): Declare.
-
-2006-03-08 Christopher Faylor <cgf@timesys.com>
-
- * cygtls.h (_cygtls::retaddr): New method.
- * dll_init.cc (cygwin_detach_dll): Use new tls method to find return
- address since this function is now signal guarded.
- (update_envptrs): Remove unneeded braces.
- * syscalls.cc (statvfs): Coerce full_path to avoid a gcc warning.
-
-2006-03-08 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (statvfs): Simplify path name expression.
-
-2006-03-08 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc: Include winioctl.h.
- (statvfs): Request correct volume size using DeviceIoControl if
- quotas are enforced on the file system.
-
-2006-03-03 Corinna Vinschen <corinna@vinschen.de>
-
- * dir.cc (opendir): Fix indentation.
- * fhandler_disk_file.cc (fhandler_disk_file::opendir): Move storing
- fhandler in file descriptor table to some point very late in function
- to avoid double free'ing. Add comment to explain what happens.
- Add label free_mounts and don't forget to delete __DIR_mounts structure
- if NtOpenFile fails.
-
-2006-03-02 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (chroot): Disallow chroot into special directories.
- Return EPERM instead.
-
-2006-03-02 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (__DIR_mounts::check_missing_mount): Check
- cygdrive string length for those who have cygdrive mapped to "/".
-
-2006-03-01 Corinna Vinschen <corinna@vinschen.de>
-
- * sec_helper.cc (set_cygwin_privileges): Request SE_BACKUP_NAME
- privileges.
-
-2006-03-01 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_proc.cc (fhandler_proc::fstat): Always return fixed link
- count of 1 for /proc directory instead of incorrect PROC_LINK_COUNT.
-
-2006-03-01 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (enum dirent_states): Remove dirent_saw_cygdrive,
- dirent_saw_dev and dirent_saw_proc.
- (fhandler_cygdrive::open): Declare.
- (fhandler_cygdrive::close): Declare.
- * fhandler_disk_file.cc (class __DIR_mounts): Move to beginning of file.
- (__DIR_mounts::check_mount): New parameter to indicate if inode number
- is needed in calling function or not. Add /proc and /cygdrive handling.
- (__DIR_mounts::check_missing_mount): Ditto.
- (path_conv::ndisk_links): Use __DIR_mounts class to create correct
- hardlink count for directories with mount points in them.
- (fhandler_disk_file::readdir_helper): Remove /dev, /proc and /cygdrive
- handling.
- (fhandler_cygdrive::open): New method.
- (fhandler_cygdrive::close): New method.
- (fhandler_cygdrive::fstat): Always return fixed inode number 2 and
- fixed link count of 1. Drop call to set_drives.
- (fhandler_cygdrive::opendir): Drop call to get_namehash.
- (fhandler_cygdrive::readdir): Handle "." entry to return fixed inode
- number 2.
-
-2006-03-01 Christopher Faylor <cgf@timesys.com>
-
- * cygwin.din: Fix some erroneous SIGFE/NOSIGFE settings.
-
-2006-03-01 Christopher Faylor <cgf@timesys.com>
-
- * cygthread.cc (cygthread::callfunc): Revert below change. Make ev a
- manual reset event again. so that it will be reset by WaitFor*Object
- as appropriate.
- (cygthread::stub): Ditto.
- (cygthread::terminate_thread): Reset ev if it was found to have been
- set.
-
-2006-03-01 Christopher Faylor <cgf@timesys.com>
-
- * analyze_sigfe: New script.
- * dllfixdbg: Add copyright.
- * gendef: Ditto.
- * gendevices: Ditto.
- * gentls_offsets: Ditto.
-
-2006-03-01 Christopher Faylor <cgf@timesys.com>
-
- * cygthread.cc (cygthread::callfunc): Create ev as an auto-reset event
- so that it will be reset by WaitFor*Object as appropriate.
- (cygthread::stub): Ditto.
- (cygthread::terminate_thread): Remove forced setting of thread
- termination.
-
-2006-03-01 Corinna Vinschen <corinna@vinschen.de>
-
- * include/sys/dirent.h (struct __DIR): Rename __d_unused to
- __d_internal.
- * fhandler_disk_file.cc (struct __DIR_cache): Remove useless "typedef".
- (d_dirname): Remove useless "struct".
- (d_cachepos): Ditto.
- (d_cache): Ditto.
- (class __DIR_mounts): New class, implementing mount point tracking
- for readdir.
- (d_mounts): New macro for easy access to __DIR_mounts structure.
- (fhandler_disk_file::opendir): Allocate __DIR_mounts structure and
- let __d_internal element of dir point to it.
- (fhandler_disk_file::readdir_helper): Add mount points in the current
- directory, which don't have a real directory backing them.
- Don't generate an inode number for /dev. Add comment, why.
- (fhandler_disk_file::readdir): Move filling fname to an earlier point.
- Check if current entry is a mount point and evaluate correct inode
- number for it.
- (fhandler_disk_file::readdir_9x): Ditto.
- (fhandler_disk_file::rewinddir): Set all mount points in this directory
- to "not found" so that they are listed again after calling rewinddir().
- (fhandler_disk_file::closedir): Deallocate __DIR_mounts structure.
- * path.cc (mount_info::get_mounts_here): New method to evaluate a list
- of mount points in a given parent directory.
- * shared_info.h (class mount_info): Declare get_mounts_here.
-
-2006-02-28 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::opendir): Use iscygdrive
- instead of isspecial.
- * path.h (path_conv::iscygdrive): New method.
-
-2006-02-28 Christopher Faylor <cgf@timesys.com>
-
- * exceptions.cc (_cygtls::interrupt_now): Remove "inside cygwin" check
- since some cygwin functions are meant to be interrupted.
-
-2006-02-28 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din: Export __isinff, __isinfd, __isnanf, __isnand.
- * include/cygwin/version.h: Bump API minor number to 155.
-
-2006-02-28 Corinna Vinschen <corinna@vinschen.de>
-
- * dir.cc (readdir_worker): Use slash as path separator when evaluating
- namehash for paths below /proc.
- * fhandler_netdrive.cc (fhandler_netdrive::readdir): Use expensive
- inode number evaluation on share names.
-
-2006-02-27 Christopher Faylor <cgf@timesys.com>
-
- * fhandler_disk_file.cc (fhandler_disk_file::opendir): Only set
- d_cachepos under NT or suffer memory corruption.
- (fhandler_disk_file::readdir_helper): Avoid else with a return. Just
- calculate extension location once when doing symlink checks.
- (fhandler_disk_file::readdir): Make debug output more useful.
- (fhandler_disk_file::readdir_9x): Ditto. Eliminate redundant variable.
-
-2006-02-27 Christopher Faylor <cgf@timesys.com>
-
- * include/sys/termios.h (cfsetispeed): Just define as a function rather
- than resorting to a macro.
- (cfsetospeed): Ditto.
-
-2006-02-27 Christopher Faylor <cgf@timesys.com>
-
- * sigproc.cc: Fix a comment.
-
-2006-02-27 Christopher Faylor <cgf@timesys.com>
-
- * cygthread.cc (cygthread::release): Add a comment.
-
-2006-02-27 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_netdrive.cc (fhandler_netdrive::fstat): Create unambiguous
- inode number.
- (fhandler_netdrive::readdir): Ditto.
-
-2006-02-24 Christopher Faylor <cgf@timesys.com>
-
- * sigproc.cc (sigheld): Define new variable.
- (sig_dispatch_pending): Don't check sigq since that's racy.
- (sig_send): Set sigheld flag if __SIGHOLD is specified, reset it if
- __SIGNOHOLD is specified. Ignore flush signals if we're holding
- signals.
-
-2006-02-23 Christopher Faylor <cgf@timesys.com>
-
- * cygwin.din (_exit): Use signal front end.
- (exit): Ditto.
-
-2006-02-23 Christopher Faylor <cgf@timesys.com>
-
- * winsup.h (cygwin_hmodule): Declare.
- * exceptions.cc (inside_kernel): Reverse return values to reflect
- function name. Return true if we're in cygwin1.dll or if we're
- executing in dll_entry.
- (_cygtls::interrupt_now): Reflect reversal of inside_kernel return
- value.
- * hookapi.cc (cygwin_hmodule): Remove declaration.
- * init.cc (dll_entry): Use in_dllentry global to record that we are
- executing in dllentry.
-
-2006-02-22 Corinna Vinschen <corinna@vinschen.de>
-
- * exceptions.cc (_cygtls::interrupt_now): Reorder conditional
- to call inside_kernel only if this isn't locked.
-
-2006-02-22 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::open): Add FILE_READ_ATTRIBUTES to
- access flags in case of query_read_control case, add FILE_READ_DATA
- in case of query_stat_control.
-
-2006-02-20 Christopher Faylor <cgf@timesys.com>
-
- * spawn.cc (av::fixup): Check for .bat and friends specifically now
- since these extensions are no longer automatically detected.
-
-2006-02-19 Christopher Faylor <cgf@timesys.com>
-
- * exceptions.cc (stackdump): Avoid dumping more than once.
-
-2006-02-19 Christopher Faylor <cgf@timesys.com>
-
- * fhandler_disk_file.cc (fhandler_disk_file::opendir): Use NtOpenFile
- to open the directory.
- (fhandler_disk_file::readdir): Use NT_SUCCESS to determine if status
- represents success.
-
-2006-02-19 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::opendir): Drop generating
- path_conv for root.
-
-2006-02-18 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (FS_IS_SAMBA): Move out of
- path_conv::hasgood_inode.
- (path_conv::is_samba): New method.
- (fhandler_base::fstat_by_handle): Don't even try to use
- FileIdBothDirectoryInformation on Samba.
- * path.h (class path_conv): Declare is_samba method.
-
-2006-02-17 Christopher Faylor <cgf@timesys.com>
-
- * path.cc (conv_path_list): Eat empty paths when converting to POSIX.
- (cygwin_conv_to_win32_path): Deal with Cygwin's necessity of adding a
- '/' to the end of a path ending in '.'.
-
-2006-02-16 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din: Export sigignore and sigset.
- * exceptions.cc (sigset): New function.
- (sigignore): New function.
- * include/cygwin/signal.h (SIG_HOLD): Define.
- (sigignore): Declare.
- (sigset): Declare.
- * include/cygwin/version.h: Bump API minor number to 154.
-
-2006-02-13 Igor Peshansky <pechtcha@cs.nyu.edu>
-
- * include/mntent.h: Add missing #include.
-
-2006-02-13 Igor Peshansky <pechtcha@cs.nyu.edu>
-
- * gentls_offsets: Fix typo in error message.
-
-2006-02-10 Christopher Faylor <cgf@timesys.com>
-
- * fhandler_process.cc (format_process_stat): Use cygwin-derived start
- time even on NT since it is the logical start time of the "process".
- * pinfo.cc (set_myself): Don't set start time when it should have
- already been set previously.
-
-2006-02-10 Brian Ford <Brian.Ford@FlightSafety.com>
-
- * times.cc (clock_getres): Use correct conversion from milliseconds to
- seconds/nanoseconds.
- (clock_setres): Use correct conversion to nanoseconds.
-
-2006-02-10 Christopher Faylor <cgf@timesys.com>
-
- * external.cc (sync_winenv): Rename from "setup_winenv". Use same
- mechanism as spawn to determine environment variables which should be
- converted back to windows form.
- (cygwin_internal): Reflect setup_winenv -> sync_winenv name change.
- * include/sys/cygwin.h: Ditto.
-
-2006-02-09 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::opendir): Only set
- the dirent_get_d_ino flag on filesystems having useful File IDs.
- Add comment explaining why.
-
-2006-02-07 Corinna Vinschen <corinna@vinschen.de>
-
- * dtable.cc (handle_to_fn): Accommodate new argument order in call to
- sys_wcstombs.
- * fhandler_disk_file.cc (fhandler_disk_file::readdir): Call sys_wcstombs
- instead of just wcstombs to accommodate OEM codepages.
- * miscfuncs.cc (sys_wcstombs): Split len argument in source and target
- length. Always 0-terminate result in target string.
- * security.cc (lsa2wchar): Remove unused function.
- (lsa2str): Ditto.
- (get_lsa_srv_inf): Ditto.
- (get_logon_server): Accommodate new argument order in call to
- sys_wcstombs.
- (get_user_groups): Ditto.
- (get_user_local_groups): Ditto.
- (get_priv_list): Call sys_wcstombs directly instead of lsa2str.
- * uinfo.cc (cygheap_user::ontherange): Accommodate new argument order
- in call to sys_wcstombs.
- * winsup.h (sys_wcstombs): Change prototype to match new argument order.
-
-2006-02-07 Corinna Vinschen <corinna@vinschen.de>
-
- * init.cc (respawn_wow64_process): Exit with the exit code returned
- by the respawned process.
-
-2006-02-06 Christopher Faylor <cgf@timesys.com>
-
- Always zero all elements of siginfo_t throughout.
- * cygtls.h (_cygtls::thread_context): Declare new field.
- (_cygtls::thread_id): Ditto.
- (_cygtls::signal_exit): Move into this class.
- (_cygtls::copy_context): Declare new function.
- (_cygtls::signal_debugger): Ditto.
- * cygtls.cc (_cygtls::init_thread): Fill out thread id field.
- * exceptions.cc (exception): Change message when exception info is
- unknown. Copy context to thread local storage.
- (_cygtls::handle_exceptions): Avoid double test for fault_guarded.
- Reflect move of signal_exit to _cygtls class.
- (sigpacket::process): Copy context to thread local storage.
- (_cygtls::signal_exit): Move to _cygtls class. Call signal_debugger to
- notify debugger of exiting signal (WIP). Call stackdump here (WIP).
- (_cygtls::copy_context): Define new function.
- (_cygtls::signal_debugger): Ditto.
- * tlsoffsets.h: Regenerate.
- * include/cygwin.h (_fpstate): New internal structure.
- (ucontext): Declare new structure (WIP).
- (__COPY_CONTEXT_SIZE): New define.
-
- * exceptions.cc (_cygtls::interrupt_setup): Clear "threadkill" field
- when there is no sigwaiting thread.
- (setup_handler): Move event handling into interrupt_setup.
-
-2006-02-06 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::connect): Fix formatting.
- (fhandler_socket::wait): Handle SA_RESTART when signal arrives.
-
-2006-02-06 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/socket.h (CMSG_FIRSTHDR): Avoid compiler warning.
-
-2006-02-05 Corinna Vinschen <corinna@vinschen.de>
-
- * include/features.h: Add comment to explain what's going to happen
- here at one point.
- * include/sys/stdio.h: Guard getline and getdelim prototypes with
- _GNU_SOURCE to avoid collision with old-style declarations.
-
-2006-02-05 Corinna Vinschen <corinna@vinschen.de>
-
- * environ.cc (struct parse_thing): Add transparent_exe option.
- * fhandler_disk_file.cc (fhandler_disk_file::link): Accommodate
- transparent_exe option. Add .exe suffix for links to executable files,
- if transparent_exe is set.
- * fhandler_process.cc (fhandler_process::fill_filebuf): Remove .exe
- suffix if transparent_exe option is set.
- * path.cc (symlink_worker): Accommodate transparent_exe option.
- (realpath): Don't tack on .exe suffix if transparent_exe is set.
- * syscalls.cc (transparent_exe): New global variable.
- (unlink): Accommodate transparent_exe option.
- (open): Ditto.
- (link): Ditto.
- (rename): Ditto. Maybe add .exe suffix when renaming executable files.
- (pathconf): Accommodate transparent_exe option.
- * winsup.h: Declare transparent_exe.
-
-2006-02-05 Christopher Faylor <cgf@timesys.com>
- Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::readdir_9x): Remove
- useless code.
-
-2006-02-05 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::rewinddir): Remove label
- "out". Move test for NULL __handle ...
- (fhandler_disk_file::rewinddir_9x): ... here.
-
-2006-02-05 Corinna Vinschen <corinna@vinschen.de>
-
- * dir.cc (rewinddir): Keep dirent_get_d_ino and dirent_set_d_ino flags.
-
-2006-02-05 Christopher Faylor <cgf@timesys.com>
-
- * fhandler_disk_file.cc (fhandler_disk_file::readdir): Don't close dir
- handle when we hit EOF since rewwindir may reactivate it.
- (fhandler_disk_file::readdir_9x): Eliminate superfluous temporary
- variable.
- (fhandler_disk_file::closedir): Return EBADF when trying to close
- unopened DIR. Reorganize slightly. Return actual derived error value
- rather than always returning 0.
-
-2006-02-04 Christopher Faylor <cgf@timesys.com>
-
- * dir.cc (rmdir): Reorganize check for trailing dot to return correct
- error when directory does not exist.
-
-2006-02-03 Christopher Faylor <cgf@timesys.com>
-
- * dir.cc (mkdir): Reorganize check for trailing dot to return correct
- error when directory exists.
- * fhandler_disk_file.cc (fhandler_disk_file::mkdir): Remove special
- test for path ending in '.'.
-
-2006-02-03 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (suffix_scan::lnk_match): Return true beginning with
- SCAN_APPENDLNK.
- (suffix_scan::next): Rearrange code to make .lnk append order slightly
- more deterministic.
- * spawn.cc (exe_suffixes): Try no suffix before .exe suffix to align
- evaluation with stat_suffixes.
- (dll_suffixes): Ditto.
-
-2006-02-02 Christopher Faylor <cgf@timesys.com>
-
- * cygwin/version.h: Mention CW_SETUP_WINENV in comment for API minor
- 153.
-
-2006-02-02 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din (updwtmpx): Export.
- * syscalls.cc (updwtmpx): New function.
- * include/utmpx.h (updwtmpx): Declare.
- * include/cygwin/version.h: Bump API minor number to 153.
-
-2006-02-02 Christopher Faylor <cgf@timesys.com>
-
- * external.cc (setup_winenv): New function.
- (cygwin_internal): Implement CW_SETUP_WINENV.
- * sys/cygwin.h (cygwin_getinfo_types): Define CW_SETUP_WINENV.
-
-2006-02-02 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (is_group_member): Fix comment.
-
-2006-02-02 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (is_group_member): Use local group info type 1. Test
- group for being a global group or a well-known SID before adding it
- to the group list. Add comment.
-
-2006-02-01 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (GetTcpTable): Define.
- * fhandler_socket.cc (address_in_use): New function to check if
- sockaddr_in address is already in use.
- (fhandler_socket::bind): Check if address is alreay in use in case of
- SO_REUSEADDR, to circumvent WinSock non-standard behaviour.
-
-2006-02-01 Corinna Vinschen <corinna@vinschen.de>
-
- * spawn.cc (dll_suffixes): Add .exe and "no suffix" to the list.
-
-2006-01-31 Corinna Vinschen <corinna@vinschen.de>
-
- * dlfcn.cc (check_path_access): Call find_exec with FE_DLL option.
- * path.h (enum fe_types): Add FE_DLL value.
- * spawn.cc (std_suffixes): Remove.
- (exe_suffixes): New suffix_info for executing files.
- (dll_suffixes): New suffix_info for searching shared libraries.
- (perhaps_suffix): Add opt argument. Use dll_suffixes if FE_DLL
- option is given, exe_suffixes otherwise.
- (find_exec): Propagate opt argument to perhaps_suffix. Drop suffix
- check when testing execute permission.
- (spawn_guts): Call perhaps_suffix with FE_NADA opt argument.
-
-2006-01-31 Christopher Faylor <cgf@timesys.com>
-
- * spawn.cc (av::fixup): Remove unused argument.
- (spawn_guts): Remove capitalization in debugging.
-
-2006-01-31 Corinna Vinschen <corinna@vinschen.de>
-
- * spawn.cc (find_exec): Only return files with execute permission set
- if ntsec is on. Don't check execute permission of Windows batch files.
- (av::fixup): Handle empty files gracefully. Drop execute permission
- test here.
- * path.cc (suffix_scan::next): Don't skip any suffix on first run.
-
-2006-01-31 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (cwdstuff::set): Don't set win32 error, only POSIX errno.
-
-2006-01-31 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (cwdstuff::set): When SetCurrentDirectory returns
- ERROR_INVALID_FUNCTION, bend it over to ERROR_FILE_NOT_FOUND. Add
- comment to explain why.
-
-2006-01-31 Corinna Vinschen <corinna@vinschen.de>
-
- * dir.cc (readdir_worker): Add comment about writing old 32 bit d_ino.
- * include/cygwin/version.h: Bump API minor number to 152.
- (CYGWIN_VERSION_CHECK_FOR_NEEDS_D_INO): Remove.
-
-2006-01-30 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::rewinddir): Simplify
- conditional.
-
-2006-01-30 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (d_cachepos): Rename from d_pos to distinct
- clearly from __d_position. Change throughout.
- (fhandler_disk_file::rewinddir): Reset readdir cache on NT.
-
-2006-01-29 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (readdir_get_ino): Don't follow symlinks.
-
-2006-01-29 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (class fhandler_socket): Add saw_reuseaddr status flag.
- * fhandler_socket.cc (fhandler_socket::bind): Set socket to
- SO_EXCLUSIVEADDRUSE if application didn't explicitely set SO_REUSEADDR
- socket option, on systems supporting SO_EXCLUSIVEADDRUSE.
- * net.cc (cygwin_setsockopt): Set fhandler's saw_reuseaddr status flag
- if SO_REUSEADDR socket option has been successsfully set.
- * wincap.h (wincaps::has_exclusiveaddruse): New element.
- * wincap.cc: Implement above element throughout.
-
-2006-01-28 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::mkdir): In case or error,
- check for existance explicitely and set errno to EEXIST.
-
-2006-01-28 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (DIR_NUM_ENTRIES): New define determining
- minimum number of dir entries which fit into the readdir cache.
- (DIR_BUF_SIZE): Define globally as size of readdir cache.
- (struct __DIR_cache): New structure used for readdir caching on NT.
- (d_dirname): Accessor for struct __DIR_cache, use throughout.
- (d_pos): Ditto.
- (d_cache): Ditto.
- (fhandler_disk_file::opendir): Allocate __d_dirname to contain readdir
- cache on NT.
- (fhandler_disk_file::readdir): Use buf as pointer into readdir cache.
- Implement readdir caching.
-
-2006-01-28 Corinna Vinschen <corinna@vinschen.de>
-
- * include/sys/dirent.h (struct dirent): Revert misguided attempt to
- rename __d_unused1 to __d_fd.
-
-2006-01-27 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (NtQueryDirectoryFile): Define.
- * dir.cc (__opendir_with_d_ino): Just call opendir.
- (opendir): Remove CYGWIN_VERSION_CHECK_FOR_NEEDS_D_INO handling.
- (readdir_worker): Only try generating d_ino if it's 0.
- Utilize namehash of directories fhandler. Call readdir_get_ino to
- generate d_ino for "..".
- (seekdir64): Keep dirent_set_d_ino flag.
- * fhandler.h (enum dirent_states): Add dirent_get_d_ino.
- (class fhandler_disk_file): Declare new private methods readdir_helper
- and readdir_9x.
- * fhandler_disk_file.cc (path_conv::hasgood_inode): New method to
- evaluate if a filesystem has reliable inode numbers.
- (fhandler_base::fstat_by_handle): Accommodate structure member name
- change from IndexNumber to FileId.
- (fhandler_base::fstat_helper): Call hasgood_inode here.
- (fhandler_disk_file::opendir): Call fhaccess only for real files.
- Don't append '*' to __d_dirname here, move to readdir_9x. On NT,
- open directory handle here. Set dirent_get_d_ino and dirent_set_d_ino
- flags according to wincap and filesystem.
- (fhandler_disk_file::readdir_helper): New method to implement readdir
- postprocessing only once.
- (readdir_get_ino_by_handle): New static function.
- (readdir_get_ino): New function to centralize inode number evaluation
- in case inode number hasn't been returned by NtQueryDirectoryFile.
- (fhandler_disk_file::readdir): Move old functionality to readdir_9x.
- Call readdir_9x when on 9x/Me. Implement NT specific readdir here.
- (fhandler_disk_file::readdir_9x): Move 9x specific readdir here.
- (fhandler_disk_file::seekdir): Accommodate new NT readdir method.
- (fhandler_disk_file::closedir): Ditto.
- (fhandler_cygdrive::fstat): Set d_ino to namehash. Add comment.
- (fhandler_cygdrive::opendir): Call get_namehash to prepare later
- correct evaluation of d_ino.
- (fhandler_cygdrive::readdir): Replace recursion with loop. Evaluate
- drive's d_ino by calling readdir_get_ino.
- * fhandler_proc.cc (fhandler_proc::readdir): Set dirent_saw_dot and
- dirent_saw_dot_dot to avoid seeing . and .. entries twice.
- * fhandler_process.cc (fhandler_process::readdir): Ditto.
- * fhandler_registry.cc (fhandler_registry::readdir): Ditto.
- * ntdll.h (STATUS_INVALID_PARAMETER): New define.
- (STATUS_INVALID_LEVEL): New define.
- (struct _FILE_INTERNAL_INFORMATION): Rename member IndexNumber to
- FileId (as in Nebbitt).
- * path.h (path_conv::hasgood_inode): Now implemented in
- fhandler_disk_file.cc.
- * wincap.h (wincaps::has_fileid_dirinfo): New element.
- * wincap.cc: Implement above element throughout.
- * winsup.h (readdir_get_ino): Add declaration.
- * include/sys/dirent.h (struct dirent): Slightly rename structure
- members to accommodate changes.
- Remove __USE_EXPENSIVE_CYGWIN_D_INO handling and declaration of
- __opendir_with_d_ino.
-
-2006-01-27 Christopher Faylor <cgf@timesys.com>
-
- * spawn.cc (spawn_guts): Fix potential handle leak when failing exec.
-
-2006-01-27 Christopher Faylor <cgf@timesys.com>
-
- * exceptions.cc (inside_kernel): Fix to return true if we can't get the
- name of the DLL for the given memory block since we are not in kernel
- code.
-
-2006-01-26 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::open): Fix bug in argument order to
- InitializeObjectAttributes call.
-
-2006-01-25 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::readdir): Fix test for
- dirent_isroot to use the correct boolean operator.
-
-2006-01-25 Christopher Faylor <cgf@timesys.com>
-
- * ntdll.h: (temporarily?) Add more functions for querying directory.
-
-2006-01-24 Christopher Faylor <cgf@timesys.com>
-
- * dir.cc (readdir_worker): Turn off expensive inode calculation.
-
-2006-01-24 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_process.cc (fhandler_process::fill_filebuf): Disable
- stripping the .exe suffix from the link target in PROCESS_EXE and
- PROCESS_EXENAME case.
- * path.cc (realpath): Tack on .exe suffix if necessary.
-
-2006-01-24 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_base::fstat_helper): Try harder
- to determine remote file systems with reliable inode numbers. Add
- longish comment.
-
-2006-01-23 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::fixup_after_fork): Reset
- inheritance for duplicated socket.
-
-2006-01-20 Christopher Faylor <cgf@timesys.com>
-
- * include/cygwin/version.h: Bump API minor number to 151.
- * dir.cc (__opendir_with_d_ino): New function.
- (opendir): Set flag if we should be calculating inodes.
- (readdir_worker): Calculate d_ino by calling stat if the user has asked
- for it.
- (seekdir64): Maintain all persistent flag settings.
- * fhandler.h (dirent_states): Add dirent_set_d_ino.
- * fhandler_disk_file.cc (fhandler_disk_file::opendir): Reflect changes
- to dirent structure.
- * fhandler_virtual.cc (fhandler_virtual::opendir): Ditto.
- * include/sys/dirent.h (struct dirent): Coalesce two similar
- structures. Remove all shreds of the apparently highly confusing
- references to inodes. Add support for calculating a real inode if
- __USE_EXPENSIVE_CYGWIN_D_INO is defined.
-
-2006-01-20 Christopher Faylor <cgf@timesys.com>
-
- * include/sys/dirent.h: Add comments for people who are REALLY confused
- about whether they should be using something called __invalid_d_ino or
- not.
-
-2006-01-20 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::prepare): Fix debug output.
- (fhandler_socket::release): Add debug output for WSAEventSelect failure.
- (fhandler_socket::ioctl): Always cancel WSAEventSelect before switching
- to blocking mode. Only set nonblocking flag if ioctlsocket call
- succeeded. Only print new socket state if ioctlsocket call succeeded.
-
-2006-01-19 Christopher Faylor <cgf@timesys.com>
-
- * fhandler_disk_file.cc (fhandler_disk_file::opendir): Check posix path
- for root rather than windows path.
-
-2006-01-19 Christopher Faylor <cgf@timesys.com>
-
- * dir.cc (readdir_worker): Fill in invalid fields with -1. Accommodate
- name change from __ino32 to __invalid_ino32.
- * include/sys/dirent.h (__invalid_ino32): Rename from __ino32. Don't
- define unused d_type macros.
-
-2006-01-18 Christopher Faylor <cgf@timesys.com>
-
- * heap.cc (heap_init): Remove Sleep.
-
-2006-01-18 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (rresvport): Remove extern declaration.
-
-2006-01-18 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (rresvport): Remove.
- * net.cc (last_used_rrecvport): New global shared variable.
- (cygwin_rresvport): Implement rresvport without using rresvport from
- wsock32.
-
-2006-01-18 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/socket.h (struct sockaddr_storage): Fix typo in
- ss_family member name.
-
-2006-01-16 Christopher Faylor <cgf@timesys.com>
-
- * include/cygwin/version.h: Bump DLL minor version number to 20.
-
-2006-01-13 Corinna Vinschen <corinna@vinschen.de>
-
- * uname.cc (uname): Concatenate a "-WOW64" to utsname's sysname
- member to see when running under WOW64.
-
-2006-01-13 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (cygwin_setsockopt): Ignore errors when setting IP_TOS on
- Windows 2000 and above. Clarify the comment about IP_TOS and move
- to the place where the magic happens.
- (get_ifconf): Remove unused code.
- * wincap.h (wincaps::has_disabled_user_tos_setting): New element.
- * wincap.cc: Implement above element throughout.
-
-2006-01-12 Christopher Faylor <cgf@timesys.com>
-
- * fhandler_console.cc (set_console_state_for_spawn): Fix to recognize
- ttys >= 0.
-
-2006-01-12 Christopher Faylor <cgf@timesys.com>
-
- * fhandler.h (set_console_state_for_spawn): Whackamole the argument
- back to a bool.
- * spawn.cc (spawn_guts): Ditto, i.e., once again call
- set_console_state_for_spawn with an indication of whether we're about
- to start a cygwin process.
- * fhandler_console.cc (set_console_state_for_spawn): Don't set the
- console state if we know we're starting a cygwin process or if we're
- using a "real" tty.
-
-2006-01-10 Corinna Vinschen <corinna@vinschen.de>
-
- * dcrt0.cc (dll_crt0_0): Remove call to wincap.init.
- * init.cc (dll_entry): Rename is_wow64_proc to wow64_test_stack_marker.
- Call wincap.init here before doing anything else. Use wincap.is_wow64
- to determine if we're running in a WOW64 emulator.
- * mmap.cc (MapViewNT): Don't use AT_ROUND_TO_PAGE in WOW64, it's
- apparently not supported.
- (mmap64): Don't create mappings beyond EOF, which would need to use
- AT_ROUND_TO_PAGE, on WOW64.
- * wincap.cc (wincap): Throw into the .cygwin_dll_common section.
- (wincapc::init): Determine if running in WOW64 and set wow_64 flag.
- * wincap.h (class wincapc): Add wow64 member.
- (wincapc::is_wow64): New method.
-
-2006-01-10 Christopher Faylor <cgf@timesys.com>
-
- * fhandler_proc.cc (format_proc_cpuinfo): Avoid leading whitespace in
- model name.
-
-2006-01-09 Christopher Faylor <cgf@timesys.com>
-
- * spawn.cc (spawn_guts): Reorganize slightly so that 16 bit check is
- done prior to check for command.com/cmd.com. Don't bother setting
- CREATE_SUSPENDED flag for a MS-DOS process since it doesn't work
- anyway. Avoid calling remember() when the child process has already
- exited.
- (av::fixup): Explicitly set cygexec flag to false on a 16 bit process.
-
-2006-01-09 Corinna Vinschen <corinna@vinschen.de>
-
- * include/getopt.h (getopt_long_only): Declare.
-
-2006-01-09 Eric Blake <ebb9@byu.net>
-
- * cygwin.din: Export getsubopt.
- * include/cygwin/version.h: Bump API minor version.
-
-2006-01-08 Christopher Faylor <cgf@timesys.com>
-
- * fhandler_tty.cc (fhandler_tty_slave::dup): Don't assign a controlling
- terminal to a process when duped. Linux doesn't do this, so we won't
- either.
-
-2006-01-08 Christopher Faylor <cgf@timesys.com>
-
- * environ.cc (spenvs[]): windir -> WINDIR.
-
-2006-01-07 Christopher Faylor <cgf@timesys.com>
-
- * fhandler_console.cc (fhandler_console::need_invisible): Remove
- duplicate test.
-
-2006-01-07 Christopher Faylor <cgf@timesys.com>
-
- * fhandler.h (set_console_state_for_spawn): Eliminate argument from
- declaration.
- * fhandler.cc (set_console_state_for_spawn): Eliminate argument from
- definition. Always check for invisible console.
- (fhandler_console::need_invisible): Don't do anything if the windows
- station is already not visible.
- * spawn.cc (spawn_guts): Accommodate change of argument to
- set_console_state_for_spawn.
-
-2006-01-05 Christopher Faylor <cgf@timesys.com>
-
- * sigproc.cc (no_signals_available): Use existence of signal thread
- handle to figure out if we can actually send signals rather than
- relying on my_sendsig.
- (hwait_sig): Make static.
- (sigproc_init): Don't set my_sendsig to anything special. Use new
- global static hwait_sig.
- (wait_sig): Set hwait_sig to NULL when we are exiting.
-
-2006-01-05 Christopher Faylor <cgf@timesys.com>
-
- * include/getopt.h: Accommodate recent unfortunate newlib changes.
-
-2006-01-05 Christopher Faylor <cgf@timesys.com>
-
- * cygtls.cc (_cygtls::remove): Don't output debugging info if this
- isn't a cygwin thread.
- * sigproc.cc (sigproc_init): Move clearing of sync_startup here to
- lessen the likelihood of trying to deal with non-cygwin threads in
- dll_entry.
-
- * fhandler_console: Fix set_console_state_for_spawn comment.
-
-2006-01-05 Igor Peshansky <pechtcha@cs.nyu.edu>
-
- * spawn.cc (spawn_guts): Invert the argument to
- set_console_state_for_spawn.
-
-2006-01-04 Christopher Faylor <cgf@timesys.com>
-
- * fhandler_console.cc (fhandler_console::need_invisible): Only try to
- open "CygwinInvisible" windows station if opening of default station
- fails. Use CloseWindowStation to close window station handle.
-
-2006-01-04 Christopher Faylor <cgf@timesys.com>
-
- * fhandler_console.cc (fhandler_console::need_invisible): Open up the
- security of the newly created windows station.
-
-2006-01-04 Eric Blake <ebb9@byu.net>
-
- * path.cc (dot_special_chars): Add ", <, >, and |.
-
-2006-01-03 Christopher Faylor <cgf@timesys.com>
-
- * fhandler_console.cc (beep): Use MB_OK which is documented as using
- the default bell rather than -1 which seems to behave differently on
- different versions of Windows.
-
-2006-01-03 Christopher Faylor <cgf@timesys.com>
-
- * fhandler_process.cc (fhandler_process::readdir): Add missing argument
- to syscall_printf.
-
- * fhandler_console.cc (fhandler_console::need_invisible): Use made-up
- name for windows station rather than asking Windows to create one for
- us.
-
- * spawn.cc (spawn_guts): Don't mess with console if we're detaching.
-
-2006-01-03 Christopher Faylor <cgf@timesys.com>
-
- * dir.cc (readdir_worker): Minor code cleanup.
-
- * fhandler_console.cc (beep): Use a more Windows-generic wav file if
- the beep is missing. Use a more foolproof way to find out whether we
- should be recreating the missing key.
-
- * registry.h (reg_key::_disposition): New field.
- (reg_key::created): New function.
- * registry.cc (reg_key::reg_key): Set _disposition to zero by default.
- (reg_key::build_key): Fill in _disposition field.
-
-2006-01-03 Eric Blake <ebb9@byu.net>
-
- * dir.cc (readdir_worker): Ensure that saw_dot* flags are updated when
- not handling inodes.
-
-2006-01-02 Christopher Faylor <cgf@timesys.com>
-
- * fhandler_console.cc (beep): New function. Restores missing "Default
- Beep", if necessary.
- (fhandler_console::write_normal): Use beep().
-
-2006-01-02 Christopher Faylor <cgf@timesys.com>
-
- * dcrt0.cc (_dll_crt0): Remove more leftover debugging stuff.
- (cygwin_dll_init): Remove unneeded initializations. Call _dll_crt0
- rather than dll_crt0_1.
-
-2006-01-02 Corinna Vinschen <corinna@vinschen.de>
-
- * syslog.cc: Include sys/un.h instead of sys/socket.h.
- (syslogd_inited): Convert to enum type noting the exact result of
- trying to connect to syslog daemon. Use this way throughout.
- (connect_syslogd): New static function taking over the task to
- connect to syslog socket. Use correct struct sockaddr_un instead of
- struct sockaddr.
- (try_connect_syslogd): Call connect_syslogd. If write fails on
- connection oriented socket, try to reconnect to syslog socket and
- try to write again.
-
-2006-01-01 Christopher Faylor <cgf@timesys.com>
-
- * pinfo.cc (pinfo::exit): Swap signal and normal exit value when not
- started from a cygwin process - just like the good-old-days of B20.
-
-2006-01-01 Christopher Faylor <cgf@timesys.com>
-
- * strace.cc (strace::write_childpid): Remove debugging output.
-
-2006-01-01 Christopher Faylor <cgf@timesys.com>
-
- * cygtls.cc (_cygtls::remove): Remove left over debugging cruft which
- caused this function to always return prematurely.
-
-2006-01-01 Christopher Faylor <cgf@timesys.com>
-
- * exceptions.cc (sigpacket::process): Pass actual reference to signal's
- sigaction structure to setup_handler.
-
-2006-01-01 Christopher Faylor <cgf@timesys.com>
-
- * exceptions.cc (_cygtls::interrupt_setup): Implement SA_RESETHAND.
- * include/cygwin/signal.h: Define SA_ONESHOT and SA_NOMASK.
-
- * dcrt0.cc (get_cygwin_startup_info): Remove commented out code.
-
-2006-01-01 Corinna Vinschen <corinna@vinschen.de>
-
- * syslog.cc (vklog): Never log kernel messages using the vsyslog
- interface.
diff --git a/winsup/cygwin/ChangeLog-2007 b/winsup/cygwin/ChangeLog-2007
deleted file mode 100644
index 66cb33130..000000000
--- a/winsup/cygwin/ChangeLog-2007
+++ /dev/null
@@ -1,2769 +0,0 @@
-2007-12-30 Dave Korn <dave.korn@artimi.com>
-
- * cygwin.din (_f_llrint, _f_llrintf, _f_llrintl, _f_lrint, _f_lrintf,
- _f_lrintl, _f_rint, _f_rintf, _f_rintl): Export fast *rint* functions.
- (lrint, lrintf, rint, rintf): Redirect exports to alias _f_ versions.
- (llrint, llrintf, llrintl, lrintl, rintl): Add exports aliasing _f_*
- versions likewise.
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
-
-2007-12-22 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (class fhandler_dev_random): Add dummy_offset member.
- * fhandler_random.cc (fhandler_dev_random::lseek): Fake seeking
- capability as on Linux.
-
-2007-12-20 Eric Blake <ebb9@byu.net>
-
- * libc/memmem.cc (memmem): Fix bug when searching for empty string.
-
-2007-12-19 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din: Export wcpcpy, wcpncpy.
- * include/cygwin/version.h: Bump API minor number.
-
-2007-12-16 Christopher Faylor <me+cygwin@cgf.cx>
-
- * dtable.cc (POSIX_NAMED_PIPE): New define.
- (POSIX_NAMED_PIPE_LEN): Ditto.
- (dtable::add_archetype): Use crealloc_abort.
- (dtable::init_std_file_from_handle): Specifically detect pipe
- stdin/stdout. Pass name to build_fh_dev so that proper name is
- recorded. Use binmode of fh if it is set before using
- get_default_mode. Set proper read/write access when calling init().
- (handle_to_fn): Handle pipes.
- * fhandler.cc (fhandler_base::wait_overlapped): Add some debugging.
- * fhandler.h (fhandler_base::set_name): Default to just setting the
- path_conv name.
- (fhandler_pipe::init): Declare.
- * pipe.cc (struct pipesync): New struct.
- (getov_result): New function. Blocks and retrieves the result of an
- overlay I/O operation.
- (pipe_handler): New function.
- (pipesync::pipesync): New function. Initializer for pipesync struct.
- (handler_pipe::init): Define. Detects attempts to set up a "native"
- pipe fhandler and creates a thread which accepts input from or output
- to the non-cygwin pipe, creating a cygwin pipe wrapper around the
- non-cygwin pipe.
- (fhandler_pipe::create): Add pipe-specific flags to call to init().
-
- * exceptions.cc (ctrl_c_handler): Lock process while we determine what
- to do.
-
-2007-12-14 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/socket.h: Include sys/uio.h instead of cygwin/uio.h.
- * include/cygwin/uio.h: Remove.
-
-2007-12-14 Corinna Vinschen <corinna@vinschen.de>
-
- * dtable.cc (dtable::set_file_pointers_for_exec): Reenable. Fix
- comment.
- * spawn.cc (spawn_guts): Call cygheap->fdtab.set_file_pointers_for_exec
- only for non-Cygwin processes.
-
-2007-12-13 Craig MacGregor <cmacgreg@gmail.com>
- Corinna Vinschen <corinna@vinschen.de>
-
- * poll.cc (poll): Return count of fds with events instead of total
- event count.
-
-2007-12-13 Corinna Vinschen <corinna@vinschen.de>
-
- * string.h: Guard cygwin internal string function definitions with
- __INSIDE_CYGWIN__.
-
-2007-12-12 Corinna Vinschen <corinna@vinschen.de>
-
- * dcrt0.cc: Include string.h.
- (initial_env): Use small_printf's %P specifier.
- * dll_init.cc (dll_list::alloc): Use PATH_MAX instead of CYG_MAX_PATH
- for path name buffer size.
- * dll_init.h (struct dll): Ditto.
- * environ.cc: Include string.h.
- (win_env::add_cache): Use temporary local buffer for path conversion.
- (posify): Ditto.
- * exceptions.cc (try_to_debug): Use CreateProcessW to allow long path
- names.
- * miscfuncs.cc: Drop unused implementations of strcasematch and
- strncasematch.
- (ch_case_eq): Drop.
- (strcasestr): Drop.
- (cygwin_wcscasecmp): New function.
- (cygwin_wcsncasecmp): New function.
- (cygwin_strcasecmp): New function.
- (cygwin_strncasecmp): New function.
- (cygwin_wcslwr): New function.
- (cygwin_wcsupr): New function.
- (cygwin_strlwr): New function.
- (cygwin_strupr): New function.
- * ntdll.h (RtlDowncaseUnicodeString): Declare.
- (RtlUpcaseUnicodeString): Declare.
- (RtlInt64ToHexUnicodeString): Fix typo in comment.
- * string.h: Disable not NLS aware implementations of strcasematch
- and strncasematch.
- (cygwin_strcasecmp): Declare.
- (strcasecmp): Define as cygwin_strcasecmp.
- (cygwin_strncasecmp): Declare.
- (strncasecmp): Define as cygwin_strncasecmp.
- (strcasematch):Define using cygwin_strcasecmp.
- (strncasematch):Define using cygwin_strncasecmp.
- (cygwin_strlwr): Declare.
- (strlwr): Define as cygwin_strlwr.
- (cygwin_strupr): Declare.
- (strupr): Define as cygwin_strupr.
- * wchar.h: New file.
- * wincap.cc (wincapc::init): Use "NT" as fix OS string.
- * winsup.h (strcasematch): Drop declaration.
- (strncasematch): Ditto.
- (strcasestr): Ditto.
-
-2007-12-11 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_base::fstat_helper): Fix R/O bit
- handling on filesystems without ACL support.
-
-2007-12-11 Corinna Vinschen <corinna@vinschen.de>
-
- * localtime.cc (tzset): Guard by a muto for thread safety.
-
-2007-12-11 Dave Korn <dave.korn@artimi.com>
-
- * cygheap.cc (_csbrk): Don't request zero bytes from VirtualAlloc,
- as windows treats that as an invalid parameter and returns an error.
-
-2007-12-11 Corinna Vinschen <corinna@vinschen.de>
-
- * localtime.cc (tzset): Call tzsetwall only if it hasn't been
- called before.
-
-2007-12-07 Corinna Vinschen <corinna@vinschen.de>
-
- * include/sys/cygwin.h: Include limits.h.
-
-2007-12-06 Corinna Vinschen <corinna@vinschen.de>
-
- * dcrt0.cc (initial_env): Use PATH_MAX instead of CYG_MAX_PATH for path
- name buffer size.
- (dll_crt0_1): Allocate new_argv0 with PATH_MAX size.
- * exceptions.cc (debugger_command): Set size to 2 * PATH_MAX + 20;
- (error_start_init): Use PATH_MAX instead of CYG_MAX_PATH for path
- name buffer size.
- * external.cc (fillout_pinfo): Always fill out ep.progname 0-terminated.
- Fill out ep.progname_long.
- * fhandler_process.cc (fhandler_process::fill_filebuf): Allocate
- buffer for executable filename with PATH_MAX size.
- * pinfo.cc: Throughout use PATH_MAX instead of CYG_MAX_PATH.
- * pinfo.h (class _pinfo): Set progname size to PATH_MAX.
- * smallprint.cc: Include limits.h. Use PATH_MAX instead of CYG_MAX_PATH
- for path name buffer size.
- * strace.cc (strace::vsprntf): Ditto.
- * include/sys/cygwin.h (EXTERNAL_PINFO_VERSION_32_LP): Define.
- (EXTERNAL_PINFO_VERSION): Set to EXTERNAL_PINFO_VERSION_32_LP.
- (struct external_pinfo): Add progname_long member.
- * include/sys/dirent.h: Correctly include limits.h instead of
- sys/limits.h.
-
-2007-12-05 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_tty.cc (fhandler_tty_slave::open): Use MAX_PATH instead of
- CYG_MAX_PATH for event name buffer size.
- (fhandler_pty_master::setup): Use MAX_PATH instead of CYG_MAX_PATH for
- mutex name buffer size.
- * netdb.cc: Drop old comment.
- (open_system_file): Set path buffer size to MAX_PATH instead of
- CYG_MAX_PATH. Drop conversion to posix path. Open file using win32
- path.
-
-2007-12-05 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_registry.cc: Use NAME_MAX + 1 instead of CYG_MAX_PATH
- throughout for subkey name buffer size.
- * fhandler_socket.cc (search_wsa_event_slot): Use MAX_PATH instead of
- CYG_MAX_PATH for mutex name buffer size.
- (fhandler_socket::init_events): Ditto.
- * fhandler_virtual.cc (fhandler_virtual::opendir): Check path length
- against PATH_MAX instead of against CYG_MAX_PATH.
- * registry.cc (get_registry_hive_path): Use PATH_MAX instead of
- CYG_MAX_PATH for registry value path buffer size.
- * shared.cc (open_shared): Use MAX_PATH instead of CYG_MAX_PATH
- for shared memory name buffer size.
- * thread.cc (semaphore::semaphore): Use MAX_PATH instead of CYG_MAX_PATH
- for semaphore name buffer size.
- * uinfo.cc (cygheap_user::env_userprofile): Use PATH_MAX instead of
- CYG_MAX_PATH for temporary path name buffer size.
- * winf.h (LINE_BUF_CHUNK): Define as MAX_PATH * 2.
- * include/sys/dirent.h: Include sys/limits.h. Define name buffer sizes
- using NAME_MAX.
-
-2007-12-04 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_fifo.cc (fhandler_fifo::open): Use MAX_NAME for pipe name
- buffer size.
- (fhandler_fifo::fstatvfs): Use same technique as in fhandler_socket.
- * fhandler_proc.cc (format_proc_partitions): Use NAME_MAX+1 for
- device name buffer size. Use MAX_PATH for device path buffer size.
-
-2007-12-03 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (GetModuleFileNameExW): Replace definition of
- GetModuleFileNameExA.
- * fhandler_process.cc (format_process_maps): Change modname type to
- WCHAR. Set buffer sizes to PATH_MAX. Call GetModuleFileNameExW
- instead of GetModuleFileNameExA. Call mount_info::conv_to_posix_path
- instead of cygwin_conv_to_full_posix_path. Set posix_modname to
- modname if that call fails.
- (format_process_stat): Set cmd buffer size to NAME_MAX + 1. Simplify
- setting cmd to process name.
- (format_process_status): Ditto.
- * path.cc (mount_info::conv_to_posix_path): Call sys_wcstombs
- correctly.
-
-2007-12-03 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/time.h: Remove redundant #endif.
-
-2007-12-01 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/time.h (daylight): Declare as extern symbol referring
- _daylight variable.
- (timezone): Only define if __timezonefunc__ is undefined.
-
-2007-12-01 Corinna Vinschen <corinna@vinschen.de>
- Brian Dessent <brian@dessent.net>
-
- * Makefile.in (OBSOLETE_FUNCTIONS): Add timezone.
- * include/cygwin/time.h: Drop conditional timezone definitions.
- (timezone): Declare as extern symbol referring _timezone variable.
-
-2007-11-28 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_tape.cc (mtinfo::initialize): Use MAX_PATH instead of
- CYG_MAX_PATH.
- * fhandler_tty.cc (fhandler_pty_master::ptsname): Set buffer size to
- TTY_NAME_MAX.
- * syscalls.cc (ttyname): Eliminate the `+ 1' from the name buffer size
- since TTY_NAME_MAX already counts the trailing NUL.
- * libc/bsdlib.cc (openpty): Set pts buffer size to TTY_NAME_MAX.
-
-2007-11-28 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::recv_internal): Add MSG_WAITALL
- handling. Use explicit flag values instead of MSG_WINMASK.
- (fhandler_socket::send_internal): Use explicit flag values instead of
- MSG_WINMASK.
- * include/cygwin/socket.h (MSG_WINMASK): Remove definition.
- (MSG_WAITALL): Define.
-
-2007-11-27 Corinna Vinschen <corinna@vinschen.de>
-
- * posix_ipc.cc (ipc_names): Rename max_len to prefix_len. Store
- the prefix len in it.
- (check_path): Take length parameter. Use this length insetad of
- calling strlen. Allow PATH_MAX length paths.
- (ipc_mutex_init): Use MAX_PATH instead of CYG_MAX_PATH.
- (ipc_cond_init): Ditto.
- (shm_open): Allocate local name buffer not bigger than necessary. Call
- check_path with additional length argument.
- (shm_unlink): Ditto.
- (mq_open): Ditto.
- (mq_unlink): Ditto.
- (sem_open): Ditto.
- (sem_unlink): Ditto.
-
-2007-11-27 Corinna Vinschen <corinna@vinschen.de>
-
- Drop old SetResourceLock stuff in favor of mutos.
- * dcrt0.cc (_reslock): Remove.
- (__cygwin_user_data): Accommodate removal of resourcelocks member.
- (dll_crt0_0): Don't initialize resourcelocks.
- * exceptions.cc (_cygtls::signal_exit): Drop resourcelocks handling.
- * mmap.cc (mmap_guard): New muto.
- (LIST_LOCK): Define.
- (LIST_UNLOCK): Define.
- (mmap_list::search_record): Remove.
- (mmap_list::try_map): Include code for anonymous case from
- mmap_list::search_record.
- (mmap_is_attached_or_noreserve): Access bookkeeping lists in a thread
- safe way.
- (mmap64): Replace SetResourceLock/ReleaseResourceLock by
- LIST_LOCK/LIST_UNLOCK. Lock at the latest possible point.
- (munmap): Replace SetResourceLock/ReleaseResourceLock by
- LIST_LOCK/LIST_UNLOCK.
- (msync): Ditto.
- (mprotect): Ditto.
- * thread.cc (ResourceLocks::Lock): Remove.
- (SetResourceLock): Remove.
- (ReleaseResourceLock): Remove.
- (ResourceLocks::Init): Remove.
- (ResourceLocks::Delete): Remove.
- * thread.h (SetResourceLock): Drop declaration.
- (ReleaseResourceLock): Ditto.
- (class ResourceLocks): Drop definition.
- * include/sys/cygwin.h (class ResourceLocks): Drop forward declaration.
- (struct per_process): Replace resourcelocks with additional unused2
- element.
- (per_process_overwrite): Accommodate above change.
-
-2007-11-27 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc: Convert usage of dynamically growing cmalloced arrays to
- cmalloced linked lists throughout.
- (class mmap_record): Add LIST_ENTRY element.
- (mmap_record::match): New method, taking over match algorithm from
- list::search_record.
- (class mmap_list): Rename from class list. Add LIST_ENTRY. Convert
- recs to a LIST_HEAD. Drop nrecs and maxrecs members.
- (mmap_list::get_record): Drop entirely.
- (mmap_list::free_recs): Drop entirely.
- (mmap_list::del_record): Take mmap_record to delete as parameter.
- (mmap_list::search_record): Convert to mmap_record::match.
- (class mmap_areas): Rename from class map. Convert lists to LIST_HEAD.
- (mmap_areas::get_list): Drop entirely.
- (mmap_areas::del_list): Take mmap_list to delete as parameter.
- (mprotect): Fix indentation.
-
-2007-11-26 Christopher Faylor <me+cygwin@cgf.cx>
-
- Change many cygheap allocation routines to their *_abort analogs.
- * cygheap.cc (cmalloc_abort): New function.
- (crealloc_abort): Ditto.
- (ccalloc_abort): Ditto.
-
-2007-11-23 Christopher Faylor <me+cygwin@cgf.cx>
-
- * cygheap.cc (_crealloc): Avoid memcpy when _cmalloc returns NULL.
-
-2007-11-08 Christopher Faylor <me+cygwin@cgf.cx>
-
- * dllfixdbg: Eliminate extra objcopy step.
-
-2007-11-07 Pedro Alves <pedro_alves@portugalmail.pt>
-
- * dllfixdbg: Pass --only-keep-debug to objcopy, instead of
- selecting the sections manually.
-
-2007-11-06 Corinna Vinschen <corinna@vinschen.de>
-
- * thread.cc (pthread_key_create): Drop check for incoming valid object.
-
-2007-11-06 Corinna Vinschen <corinna@vinschen.de>
-
- * shm.cc: Include sync.h
- (struct shm_shmid_list): Add ref_count member.
- (struct shm_attached_list): Remove hdl and size members. Add a parent
- member pointing to referenced shm_shmid_list entry.
- (shm_guard): New muto.
- (SLIST_LOCK): Define.
- (SLIST_UNLOCK): Define.
- (fixup_shms_after_fork): Use hdl and size members of parent
- shm_shmid_list entry.
- (shmat): Access sequential bookkeeping lists in a thread safe way.
- Accommodate change in list element layout. Align comments.
- (shmctl): Ditto.
- (shmdt): Ditto.
- (shmget): Ditto.
-
-2007-11-05 Corinna Vinschen <corinna@vinschen.de>
-
- * shm.cc (shmctl): On IPC_RMID don't unmap views and don't close handle
- if the map is still referenced to emulate Linux and BSD behaviour.
-
-2007-11-05 Corinna Vinschen <corinna@vinschen.de>
-
- * shm.cc (shmctl): On IPC_RMID also unmap all views on shared mem
- as well as connected shm_attached_list entry.
-
-2007-10-31 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (load_ipv6_funcs): Use MAX_PATH instead of CYG_MAX_PATH.
- (cygwin_getaddrinfo): Simplify formatting.
- (cygwin_getnameinfo): Ditto.
-
-2007-10-31 Corinna Vinschen <corinna@vinschen.de>
-
- * external.cc (get_cygdrive_info): Make inline.
- (get_cygdrive_prefixes): Remove.
- (cygwin_internal): Call get_cygdrive_info with NULL flag parameters
- instead of get_cygdrive_prefixes.
- * path.cc (mount_info::get_cygdrive_info): Allow NULL flag parameters.
-
-2007-10-30 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_base::fstat_helper): Don't remove
- write bits for directories with R/O attribute.
- (fhandler_base::fhaccess): Don't shortcircuit R/O attribute with W_OK
- scenarios for directories.
-
-2007-10-22 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.h (struct cwdstuff): Drop hash member. Drop get_hash,
- get_initial, and fixup_after_exec declarations.
- Convert win32 to UNICODE_STRING.
- (cwdstuff::get_drive): Convert win32 path in current codepage.
- (cwdstuff::set): Take native NT path.
- * ntdll.h (struct _TEB): Typedef.
- * path.cc (mount_info::conv_to_posix_path): Add variant taking
- wide char DOS paths.
- (symlink_info::posixify): Simplify concatenating cwd and relative path.
- (hash_path_name): Drop special relative path handling.
- (chdir): Drop special "drive only" handling. Call cwdstuff::set with
- native path.
- (cwdstuff::get_hash): Remove.
- (windows_system_directory): Remove.
- (_upp): Remove.
- (get_user_proc_parms): Make inline. Get PEB pointer by calling
- NtCurrentTeb.
- (cwdstuff::init): Simplify.
- (cwdstuff::set): Rework to handle incoming native NT path. Workaround
- a Vista problem with CWD handle in the user process parameter block.
- (cwdstuff::get): Simplify locking. Accommodate type change of win32.
- * shared_info.h (mount_info): Add declaration for new conv_to_posix_path
- method.
- * strfuncs.cc (sys_wcstombs): Return correct length of created
- multi-byte string.
-
-2007-10-19 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (__DIR_mounts::eval_ino): Make fname big enough
- to allow multibyte chars.
-
-2007-10-18 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::open): Open native symlinks with
- FILE_OPEN_REPARSE_POINT flag. Fix typo in comment.
-
-2007-10-18 Corinna Vinschen <corinna@vinschen.de>
-
- * include/sys/param.h (MAXPATHLEN): Define as PATH_MAX.
-
-2007-10-14 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (is_at_eof): Rewrite using NT functions.
- (off_current): New static variable.
- (off_append): Ditto.
- (fhandler_base::raw_write): Use NtWriteFile. Accommodate O_APPEND here.
- (fhandler_base::write): Drop O_APPEND hack. Use NT functions.
- (fhandler_base::lseek): Rewrite using NT functions.
- * fhandler_disk_file.cc (fhandler_disk_file::fstatvfs): Add space in
- debug output.
- (fhandler_disk_file::ftruncate): Ditto.
- * ntdll.h (STATUS_DISK_FULL): Define.
- (FILE_USE_FILE_POINTER_POSITION): Define.
- (FILE_WRITE_TO_END_OF_FILE): Define.
-
-2007-10-13 Corinna Vinschen <corinna@vinschen.de>
-
- * ntdll.h (STATUS_END_OF_FILE): Define.
- * path.cc (symlink_info::check_shortcut): Use NT function to get file
- size. Reintroduce checking file size before reading it. Eliminiate
- close_it label.
- (symlink_info::check_sysfile): Check for EOF condition.
-
-2007-10-11 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (basename): Return pointer into the path argument itself.
- Shrink buf to 4 bytes. Use buf only for border cases.
- (dirname): Ditto.
-
-2007-10-10 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (struct symlink_info): Change size of contents member to
- be able to keep SYMLINK_MAX sized strings.
- (symlink_worker): Rework for long path names. When writing windows
- shortcuts, store pathname additionally "hidden" after the actual
- shortcut data to workaround size limitations of the description field.
- (symlink_info::check_shortcut): Drop file name parameter. Drop max
- file size check. Use NT functions. Use appended full path if
- available, description otherwise. Check symlink string length for
- not exceeding SYMLINK_MAX. Don't close file here.
- (symlink_info::check_sysfile): Drop file name parameter. Use NT
- functions. Check symlink string length for not exceeding SYMLINK_MAX.
- Don't close file here.
- (symlink_info::check_reparse_point): Drop file name parameter. Drop
- useless length checks. Allow SYMLINK_MAX length symlink strings.
- Don't close file here.
- (symlink_info::posixify): Allow SYMLINK_MAX length symlink strings.
- (symlink_info::check): Turn around checking for symlink file attributes.
- Use NT functions. Close symlink file here.
- * include/limits.h (PATH_MAX): Define as 32760. Change comment.
- (SYMLINK_MAX): Define as PATH_MAX - 1.
-
-2007-10-10 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::bind): Open file for deletion,
- too. Don't write to file and especially don't close handle if file
- couldn't be created. Set delete disposition if writing failed,
- instead of calling unlink_nt.
-
-2007-09-27 Corinna Vinschen <corinna@vinschen.de>
-
- * ntdll.h (struct _FILE_COMPRESSION_INFORMATION): Align with definition
- in w32api / MSDN.
- * fhandler_disk_file.cc (fhandler_base::fstat_helper): Accommodate
- change to struct _FILE_COMPRESSION_INFORMATION.
-
-2007-09-26 Corinna Vinschen <corinna@vinschen.de>
-
- * termios.cc (setspeed): Support new baud rates introduced 2007-02-05.
-
-2007-09-20 Corinna Vinschen <corinna@vinschen.de>
-
- * ntdll.h (STATUS_OBJECT_NAME_INVALID): Define.
-
-2007-09-18 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (fh_disk_file): Delete as global static variable and...
- (mmap64): ...define as local pointer to make mmap thread-safe.
- Accommodate throughout. Only initialize fh_disk_file after file could
- be opened with GENERIC_EXECUTE access. Call fstat_by_handle instead of
- fstat to avoid overhead.
-
-2007-09-18 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (set_file_sd): Open file with FILE_OPEN_FOR_BACKUP_INTENT
- too.
-
-2007-09-17 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (symlink_info::check): Check for STATUS_OBJECT_NAME_INVALID.
- Add comment.
-
-2007-09-17 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::open): Partly revert change from
- 2007-08-24: Call has_acls to avoid permission problems getting
- a handle to a file on a remote share. Add comment.
-
-2007-09-08 Brian Dessent <brian@dessent.net>
-
- * include/cygwin/config.h: Conditionalize inline __getreent()
- definition on _COMPILING_NEWLIB.
-
-2007-09-06 Brian Dessent <brian@dessent.net>
-
- * include/cygwin/config.h (__getreent): Define inline version.
-
-2007-09-06 Brian Dessent <brian@dessent.net>
-
- * include/sys/stdio.h (_flockfile): Don't try to lock a FILE
- that has the __SSTR flag set.
- (_ftrylockfile): Likewise.
- (_funlockfile): Likewise.
-
-2007-08-24 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (open): Don't follow symlinks if O_EXCL is given.
-
-2007-08-23 Corinna Vinschen <corinna@vinschen.de>
-
- * ntdll.h (STATUS_NO_SUCH_FILE): Define.
- * path.cc (get_nt_native_path): Reset upath.Length to 0 on each
- invocation.
- (symlink_info::check): Use NT native functions.
-
-2007-08-21 Corinna Vinschen <corinna@vinschen.de>
-
- * uinfo.cc (pwdgrp::load): Use NT native functions.
-
-2007-08-21 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_base::fstat_helper): Rewrite checking
- for executable file magic using a thread safe method and re-enable this
- code.
-
-2007-08-21 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (unlink_nt): Drop one local FILE_BASIC_INFORMATION struct.
-
-2007-08-21 Corinna Vinschen <corinna@vinschen.de>
-
- * ntdll.h (NtNotifyChangeDirectoryFile): Declare.
- (NtQueryAttributesFile): Move to maintain alphabetical order of
- declarations. Add comment to note that timestamp information returned
- by NtQueryAttributesFile is unreliable.
- * path.h (etc::changed_h): Move here.
- (etc::fn): Change type to OBJECT_ATTRIBUTES.
- (etc::last_modified): Change type to LARGE_INTEGER.
- (etc::init): Take PUNICODE_STRING as second argument.
- * path.cc: Accomodate above changes.
- (etc::test_file_change): Use NT native functions.
- (etc::dir_changed): Ditto.
- * uinfo.cc (pwdgrp::load): Call etc::init with NT native path.
-
-2007-08-21 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc: Change debugging output througout to print
- the NT status consistently. Use UNICODE path information if available.
-
-2007-08-20 Corinna Vinschen <corinna@vinschen.de>
-
- * hookapi.cc (ld_preload): Call LoadLibraryW.
- * path.h (path_conv::get_wide_win32_path_len): Define.
-
-2007-08-20 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (rootdir): Delete.
- * winsup.h (rootdir): Drop declaration.
-
-2007-08-19 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (fillout_mntent): Append backslash to drive-only paths before
- calling fs_info::update.
- * path.h (fs_info::clear): Simplify.
- (fs_info::fs_info): Add constructor.
-
-2007-08-17 Corinna Vinschen <corinna@vinschen.de>
-
- * spawn.cc (spawn_guts): Fix typo in comment.
-
-2007-08-17 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (CloseDesktop): Define.
- (CreateDesktopA): Define.
- (SetThreadDesktop): Define.
- * spawn.cc (spawn_guts): When starting a process under another user
- account, don't open up permissions on current window station and
- desktop. Instead, if not in interactive session, create a new per-user
- window station plus default desktop and use that for the child process.
-
-2007-08-16 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::fchmod): Handle S_IFSOCK
- mode bit by setting the SYSTEM attribute.
- * fhandler_socket.cc (fhandler_socket::fchmod): Add S_IFSOCK mode bit
- when calling fhandler_disk_file::fchmod. Don't set attributes here.
-
-2007-08-16 Corinna Vinschen <corinna@vinschen.de>
-
- * path.h (path_conv::operator char *): Delete.
- (path_conv::operator const char *): Delete.
- * dlfcn.cc: Throughout, replace path_conv::operator char * and
- path_conv::operator const char * by call to path_conv::get_win32
- for easier transition to UNICODE_PATHs.
- * fhandler_socket.cc: Ditto.
- * hookapi.cc: Ditto.
- * path.cc: Ditto.
- * spawn.cc: Ditto.
- * syscalls.cc: Ditto.
- * uinfo.cc: Ditto.
-
-2007-08-16 Corinna Vinschen <corinna@vinschen.de>
-
- * dir.cc (readdir_worker): Convert w32name to PUNICODE_STRING.
- * sec_acl.cc (getacl): Convert debug output to print native NT path.
- * security.cc (set_file_attribute): Ditto.
- * syscalls.cc (try_to_bin): Ditto and fix buggy debug statement.
-
-2007-08-16 Corinna Vinschen <corinna@vinschen.de>
-
- * ntdll.h (RtlAcquirePebLock): Declare.
- (RtlReleasePebLock): Declare.
- * path.cc (cwdstuff::set): Change PEB only while it's locked.
-
-2007-08-16 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (fhandler_base::get_namehash): Use NT native path.
- * fhandler_disk_file.cc (readdir_get_ino): Ditto in call to
- hash_path_name.
-
-2007-08-16 Corinna Vinschen <corinna@vinschen.de>
-
- * ntdll.h (RtlCreateUnicodeStringFromAsciiz): Fix declaration.
- (RtlUpcaseUnicodeChar): Declare.
- * path.cc (hash_path_name): Split into three functions, taking
- the path as char *, PWCSTR, or PUNICODE_STRING. Move implementation
- into PUNICODE_STRING-based function. Drop old drive-relative path
- consideration.
- * winsup.h (iswdirsep): Like isdirsep but for WCHARs.
- (isabspath_u): Like isabspath, for PUNICODE_STRINGs.
- (iswabspath): Like isabspath, for PWCHARs.
- (hash_path_name): Add new declarations.
-
-2007-08-15 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (get_nt_native_path): Allow to convert special paths which
- have no native NT path representation for simplified debug output.
- * syscalls.cc: Convert debug output to print native NT path.
- (unlink): Drop redundant debug output.
-
-2007-08-15 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::link): Drop superfluous
- test for trailing dot.
- * path.h (path_conv::operator []): Remove.
-
-2007-08-15 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (get_inet_addr): Use NT native functions for
- accessing the file representing the local socket.
- (fhandler_socket::bind): Ditto.
- * ntdll.h: Declare NtReadFile.
-
-2007-08-14 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (symlink_info::check): In case of ERROR_SHARING_VIOLATION and
- ERROR_ACCESS_DENIED, try to get file attributes by using directory
- functions.
-
-2007-08-14 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (fs_info::update): Correctly handle the volume root directory.
-
-2007-08-14 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (fhandler_base::pc): Make public.
- * fhandler_disk_file.cc (fhandler_disk_file::link): Drop extern
- declaration of stat_suffixes. Use NT native path in debug output.
- (fhandler_base::utimes_fs): Simplify closeit case. Use close_fs
- to close newly opened file handle.
- (fhandler_base::open_fs): Use NT native path in debug output.
- * path.cc: Throughout drop extern declaration of stat_suffixes.
- * path.h (stat_suffixes): Declare.
- * sec_acl.cc (acl_worker): Drop extern declaration of stat_suffixes.
- * times.cc (utimes_worker): Take path_conv as parameter instead of
- single-byte pathnam, drop nofollow argument, accommodate throughout.
- Compare UNICODE paths when enumerating file descriptors. Fix
- formatting. Use NT native path in debug output.
-
-2007-08-13 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc: Call NtClose instead of CloseHandle throughout.
- (CreateMapping): Drop unused last argument. Accommodate throughout.
- (mmap64): Re-open file with execute permissions using NtOpenFile.
-
-2007-08-13 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (fhandler_base::close_fs): Reintroduce (as inline function)
- for clearness.
- * fhandler_disk_file.cc (fhandler_base::fstat_fs): Revert previous
- change.
- (fhandler_base::open_fs): Ditto.
- * fhandler_socket.cc (fhandler_socket::close): Ditto.
-
-2007-08-13 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (DLL_OFILES): Remove delqueue.o.
- * delqueue.cc: Delete.
- * fhandler.h (fhandler_base::close_fs): Drop declaration.
- (fhandler_disk_file::close): Drop declaration.
- * fhandler_disk_file.cc (fhandler_base::fstat_fs): Call close instead of
- close_fs.
- (fhandler_base::fstat_helper): Use open FH_UNIX handle in call to
- get_file_attribute.
- (fhandler_base::open_fs): Call close instead of get_file_attribute.
- (fhandler_disk_file::close): Remove.
- (fhandler_base::close_fs): Remove.
- * fhandler_socket.cc (fhandler_socket::close): Just call
- fhandler_base::close for FH_UNIX sockets.
- * shared.cc (user_shared_initialize): Drop call to
- user_shared->delqueue.init.
- * shared_info.h (CURR_USER_MAGIC): Change according to below change.
- (MAX_DELQUEUES_PENDING): Remove.
- (class delqueue_list): Remove.
- (class user_info): Remove delqueue.
- * syscalls.cc (close_all_files): Drop call to
- user_shared->delqueue.process_queue.
- (unlink): Drop delqueue handling.
-
-2007-08-13 Corinna Vinschen <corinna@vinschen.de>
-
- * devices.in (dev_storage): Use native NT device name for kmsg mailslot.
- * devices.cc: Regenerate.
- * fhandler.cc (fhandler_base::operator =): Use path_conv assignment
- operator.
- (fhandler_base::set_name): Ditto.
- (fhandler_base::open): Use NT native path in debug output.
- * fhandler_mailslot.cc: Convert to NT native function calls.
- * ntdll.h (struct _FILE_MAILSLOT_SET_INFORMATION): Define.
- (NtCreateMailslotFile): Declare.
- * path.cc (path_conv::set_normalized_path): Don't set wide_path to NULL.
- (path_conv::set_name): Remove unused function.
- * path.h (path_conv::set_name): Drop declaration.
- (path_conv::operator =): Define.
-
-2007-08-12 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::open): Remove HIDDEN_DOT_FILES code.
- * fhandler_disk_file.cc (fhandler_disk_file::mkdir): Ditto.
- * path.cc (symlink_worker): Ditto.
-
-2007-08-12 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (getw): Remove redundant implementation.
- (putw): Ditto.
- (wcscmp): Ditto.
- (wcslen): Ditto.
- (memccpy): Ditto.
-
-2007-08-12 Corinna Vinschen <corinna@vinschen.de>
-
- * ntdll.h: Add descriptive comments to special Rtl functions.
- (STATUS_OBJECT_PATH_NOT_FOUND): Define.
- (STATUS_BUFFER_OVERFLOW): Define.
- (FILE_SUPERSEDED): Define.
- (FILE_OPENED): Define.
- (FILE_CREATED): Define.
- (FILE_OVERWRITTEN): Define.
- (FILE_EXISTS): Define.
- (FILE_DOES_NOT_EXIST): Define.
- (PIO_APC_ROUTINE): Typedef.
- (NtFsControlFile): Fix parameter types to use PIO_APC_ROUTINE.
- (NtWriteFile): Declare.
- (RtlInt64ToHexUnicodeString): Declare.
- * strfuncs.cc: Include ntdll.h.
- (RtlInt64ToHexUnicodeString): New function.
- * syscalls.cc (try_to_bin): Rewrite using native NT functions.
- Only try to create recycle bin after unsuccessfully trying to move
- file. Also try to create special files in recycle bin so that Windows
- Explorer isn't unnecessarily stampeded.
-
-2007-08-10 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (fillout_mntent): Fix calculation of unicode buffer size.
-
-2007-08-10 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (rename): Check oldpath and newpath for trailing dir
- separators, require them to be existing directories if so. Check
- for a request to change only the case of the filename. Check paths
- for case insensitve equality only once. Handle renaming a directory
- to another, existing directory by unlinking the destination directory
- first. If newpath points to an existing file with R/O attribute set,
- try to unset R/O attribute first. Augment hardlink test by not
- checking directories. If renaming fails with STATUS_ACCESS_DENIED,
- try to unlink existing destination filename and try renaming again.
- Drop useless test for non-empty directory. Always close fh at the
- end of the function.
-
-2007-08-09 Ernie Coskrey <Ernie.Coskrey@steeleye.com>
-
- * gendef (sigbe): Reset "incyg" while the stack lock is active to avoid
- a potential race.
-
-2007-08-09 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (rename): Close oldpath file handle immediately after
- trying to rename it. Use nfh handle when checking for non-empty
- newpath directory. Only change status if check_dir_not_empty really
- returns STATUS_DIRECTORY_NOT_EMPTY.
-
-2007-08-02 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (readdir_get_ino): Accommodate native symlinks.
- * syscalls.cc (rename): Ditto.
-
-2007-08-02 Christopher Faylor <me+cygwin@cgf.cx>
-
- * lib/Makefile: Add missed file to accommodate below changes.
-
-2007-08-02 Christopher Faylor <me+cygwin@cgf.cx>
-
- * lib/cygwin_attach_dll.c: Fix compiler warning.
- * lib/cygwin_crt0.c: Ditto.
-
-2007-08-02 Christopher Faylor <me+cygwin@cgf.cx>
-
- * dcrt0.cc (codepage_type): Remove definition.
- * strfuncs.cc: Move it here. New file with bits of miscfuncs.cc.
- * miscfuncs.cc: Remove wide character stuff.
-
-2007-08-02 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (rename): Move and add text to comment about testing
- oldpath and newpath referring to the same file. Test if oldpath
- has more than one hardlink before opening oldpath (idea by Eric Blake).
- Reorder test so that file id is tested before volume serial number.
-
-2007-08-02 Corinna Vinschen <corinna@vinschen.de>
-
- * path.h (struct fs_info): Drop root_len and name_hash members.
- (fsinfo::length): Remove.
- (path_conv::rootdir): Remove.
- * syscalls.cc (try_to_bin): Use rootdir function instead of
- path_conv::rootdir method.
-
-2007-08-02 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (path_conv::ndisk_links): Fix typo in call to
- NtClose.
-
-2007-08-01 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (rename): Check if oldpath and newpath refer to the
- same file. If so, return successfully and perform no other action,
- as per SUSv3.
-
-2007-08-01 Corinna Vinschen <corinna@vinschen.de>
-
- * ntdll.h (STATUS_ACCESS_DENIED): Define.
- * syscalls.cc (check_dir_not_empty): New static function.
- (unlink_nt): Move code checking for non-empty dir to check_dir_not_empty
- and call check_dir_not_empty instead.
- (rename): Add fault handler. Check oldpath and newpath for trailing
- . and .. path components and return EINVAL if so. Check oldpath
- for being on a vrtual file system. If renaming a dir fails with
- STATUS_ACCESS_DENIED, check if the target dir is non-empty and return
- ENOTEMPTY if so.
-
-2007-08-01 Corinna Vinschen <corinna@vinschen.de>
-
- * localtime.cc (tzsetwall): Don't set TZ.
-
-2007-08-01 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_base::fstat_by_handle): Drop
- usage of path_conv::volser().
- (fhandler_base::fstat_by_name): Ditto.
- * ntdll.h (STATUS_NO_MEDIA_IN_DEVICE): Define.
- (STATUS_OBJECT_NAME_NOT_FOUND): Define.
- (FILE_REMOVABLE_MEDIA, FILE_READ_ONLY_DEVICE, FILE_FLOPPY_DISKETTE)
- (FILE_WRITE_ONCE_MEDIA, FILE_REMOTE_DEVICE, FILE_DEVICE_IS_MOUNTED)
- (FILE_VIRTUAL_VOLUME, FILE_AUTOGENERATED_DEVICE_NAME)
- FILE_DEVICE_SECURE_OPEN): Define Device Characteristics.
- (struct _FILE_FS_DEVICE_INFORMATION): Define.
- * path.cc (MAX_FS_INFO_CNT): Remove.
- (fsinfo): Remove.
- (fsinfo_cnt): Remove.
- (fs_info::update): Rewrite using native NT functions. Drop fs_info
- cashing since it's incorrect.
- (path_conv::fillin): Use NtQueryInformationFile. Drop setting serial
- number.
- (path_conv::check): Accommodate new fs_info::update parameters.
- (fillout_mntent): Ditto.
- * path.h (fs_info): Drop serial, has_ea and drive_type status
- flags.
- (fs_info::update): Declare with new parameters.
- (path_conf::drive_type): Remove.
- (path_conf::fs_has_ea): Remove.
- (path_conf::volser): Remove.
-
-2007-08-01 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (check_posix_perms): Remove.
- (fhandler_base::fpathconf): Return value of pc.has_acls () instead
- of calling check_posix_perms.
-
-2007-08-01 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (rename): Use unchanged path_conv in condition.
-
-2007-08-01 Corinna Vinschen <corinna@vinschen.de>
-
- * smallprint.cc (__small_vsprintf): Add format specifier 'W' for
- PWCHAR arguments. Move wide char handling after char handling.
-
-2007-07-31 Corinna Vinschen <corinna@vinschen.de>
-
- * ntdll.h (RtlFreeAnsiString): Declare.
- * ntdll.h (RtlFreeOemString): Declare.
- * ntdll.h (RtlUnicodeStringToAnsiString): Declare.
- * ntdll.h (RtlUnicodeStringToOemString): Declare.
- * smallprint.cc: Renamed from smallprint.c. Drop unnecessary
- forward declarations.
- (__small_vsprintf): Add format specifiers 'C' for WCHAR arguments
- and 'S' for PUNICODE_STRING arguments.
-
-2007-07-31 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::link): Revert to checking
- for binary in case of .exe files.
- * ntdll.h (RtlPrefixUnicodeString): Declare.
- * path.cc (path_conv::is_binary): New method.
- * path.h (path_conv::is_binary): Declare.
- * syscalls.cc (rename_append_suffix): New static helper function for
- rename.
- (rename): Rewrite. New suffix tests. Use native NT functions.
-
-2007-07-30 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::facl): If file can't be
- opened for reading the ACLs, fall back to faking them.
- * sec_acl.cc (acl_worker): Handle non-existing files.
- * security.cc (get_file_attribute): Return ILLEGAL_UID/ILLEGAL_GID
- as owner/group for non-readable ACLs on file systems supporting them.
-
-2007-07-30 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (stat_worker): Don't call build_fh_pc with invalid pc.
-
-2007-07-29 Christopher Faylor <me+cygwin@cgf.cx>
-
- * fhandler.cc (fhandler_base::wait_overlapped): Handle read EOF better
- and issue a SIGPIPE when we get ERROR_NO_DATA.
-
-2007-07-29 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::fchmod): Don't allow
- FileAttributes set to 0 when calling NtSetInformationFile since it has
- a special meaning.
- (fhandler_disk_file::facl): Ditto.
- (fhandler_disk_file::link): Only set attributes after copying files.
- Use SetFileAttributesW.
- * syscalls.cc (unlink_nt): Only care for actual FILE_ATTRIBUTE_READONLY.
- Don't allow FileAttributes set to 0 when calling NtSetInformationFile.
- After marking for deletion, restore R/O attribute on files to
- accommodate hardlinks.
-
-2007-07-29 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::link): Use FILE_ANY_ACCESS.
- (fhandler_base::utimes_fs): Fix white space.
- (fhandler_disk_file::lock): Remove 9x blurb from comment.
- (fhandler_disk_file::mkdir): Use NtCreateFile/NtClose instead of
- CreateDirectoryA.
- (fhandler_disk_file::rmdir): Accommodate changes to unlink_nt.
- Simplify post-delete SMB-related tests. Use NtQueryAttributesFile
- instead of GetFileAttributes.
- * ntdll.h (STATUS_DIRECTORY_NOT_EMPTY): Define.
- (NtQueryAttributesFile): Declare.
- * syscalls.cc (unlink_nt): Return NTSTATUS. Drop setattrs parameter.
- Never use FILE_DELETE_ON_CLOSE, always use
- NtSetInformationFile(FileDispositionInformation) instead.
- Check for R/O attributes and open file with FILE_WRITE_ATTRIBUTES
- access if any of them are set. Remove R/O attributes before
- marking for delete if necessary. Revert them afterwards if necessary.
- (unlink): Accommodate changes to unlink_nt.
-
-2007-07-29 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc: Use get_handle throughout.
- (fhandler_disk_file::fchmod): Always try to open file with required
- access rights. Use NtSetInformationFile instead of SetFileAttributes.
- (fhandler_disk_file::facl): Use NtSetInformationFile instead of
- SetFileAttributes.
- (fhandler_base::utimes_fs): Change lastaccess and lastwrite to
- LARGE_INTEGER. Drop 9x directory case. Use NtSetInformationFile
- instead of SetFileAttributes. Drop temporarily changing R/O attribute
- since NtSetInformationFile(FileBasicInformation) also works on R/O
- files.
- * ntdll.h (STATUS_NOT_SUPPORTED): Define.
-
-2007-07-29 Christopher Faylor <me+cygwin@cgf.cx>
-
- * cygtls.h (_cygtls::inside_kernel): Move function declaration into
- _cygtls class.
- * exceptions.cc (_cygtls::inside_kernel): Move function definition into
- _cygtls class.
-
- * fhandler.cc (fhandler_base::wait_overlapped): Make return tri-state
- to detect when there is a EINTR situation. Add a pointer to a length
- parameter. Move GetOverlappedResult into this function.
- (fhandler_base::read_overlapped): Accommodate above changes and loop if
- we receive a restartable signal.
- (fhandler_base::write_overlapped): Ditto.
- * fhandler.h (fhandler_base::wait_overlapped): Reflect above changes.
- * fhandler_fifo.cc (fhandler_fifo::wait): Ditto.
-
-2007-07-28 Corinna Vinschen <corinna@vinschen.de>
-
- * ntdll.h (RtlEqualUnicodePathPrefix): Rename from RtlEqualPathPrefix.
- (RtlEqualUnicodePathSuffix): Rename from RtlEqualPathSuffix.
- * fhandler_disk_file.cc (fhandler_disk_file::link): Accommodate above
- change.
-
-2007-07-28 Corinna Vinschen <corinna@vinschen.de>
-
- * ntdll.h (RtlInitCountedUnicodeString): Swap order of string and length
- parameters to be the same as for RtlInitEmptyUnicodeString.
- (RtlEqualPathPrefix): New inline function.
- (RtlEqualPathSuffix): New inline function.
- * fhandler_disk_file.cc: Accommodate parameter order change of
- RtlInitEmptyUnicodeString throughout.
- (fhandler_disk_file::link): Do path checking in unicode. Call
- CopyFileW instead of CopyFileA.
-
-2007-07-27 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (CreateHardLinkA): Remove.
- * fhandler_disk_file.cc (fhandler_disk_file::link): Drop GetBinaryType
- test. Just check exe suffix instead. Tune creating new file name.
- Implement creating hard link using native NT functions which works
- on all platforms.
- * ntdll.h (STATUS_INVALID_DEVICE_REQUEST): Define.
- (struct _FILE_LINK_INFORMATION): Define.
-
-2007-07-27 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::ftruncate): Use
- NtQueryInformationFile instead of GetFileSize, NtFsControlFile instead
- of DeviceIoControl.
-
-2007-07-27 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_base::fstat_by_name): Use
- RtlSplitUnicodePath.
- (fhandler_disk_file::fstat): Rename oret to opened. Open file using NT
- functions right here. Try to open parent dir instead of root directory
- to avoid call to rootdir. Use NtFsControlFile.
- * ntdll.h (RtlSplitUnicodePath): Define.
-
-2007-07-27 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (is_volume_mountpoint): New static inline
- function.
- (path_conv::ndisk_links): Call is_volume_mountpoint.
- (fhandler_disk_file::readdir_helper): Ditto.
-
-2007-07-27 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (enum query_state): Drop redundant query_stat_control.
- * fhandler.cc (fhandler_base::open): Ditto. Add READ_CONTROL to
- access and FILE_OPEN_FOR_BACKUP_INTENT to create_options when opening
- for writing. Always set security attributes to avoid calling
- has_acls.
- * fhandler_disk_file.cc (fhandler_base::fstat_fs): Don't try to
- open file twice.
-
-2007-07-26 Corinna Vinschen <corinna@vinschen.de>
-
- * dir.cc (readdir_worker): Drop dir parameter from call to
- readdir_get_ino.
- * fhandler.h (fhandler_disk_file::readdir_helper): Switch file name
- parameter to PUNICODE_STRING.
- * fhandler_disk_file.cc: Drop including ntdef.h.
- (class __DIR_mounts): Store mount points in UNICODE. Additionally
- store cygdrive prefix in unicode here. Change methods accordingly.
- (__DIR_mounts::eval_ino): Call new stat_worker instead of lstat64.
- (__DIR_mounts::~__DIR_mounts): New destructor to free UNICODE buffers.
- (path_conv::ndisk_links): Rewrite using native NT functions.
- (fhandler_base::fstat_by_handle): Use NAME_MAX instead of CYG_MAX_PATH.
- Always set pfvi->VolumeSerialNumber to non-0. Remove last resort
- code.
- (fhandler_base::fstat_by_name): Rewrite using native NT functions.
- (fhandler_base::fstat_fs): Always call fstat_by_name if fstat_by_handle
- fails.
- (fhandler_base::fstat_helper): Rely on dwVolumeSerialNumber.
- (fhandler_disk_file::facl): Call fstat_by_name if fstat_by_handle fails.
- (DIR_BUF_SIZE): Define using NAME_MAX instead of CYG_MAX_PATH.
- (__DIR_cache): Remove __name.
- (d_dirname): Remove.
- (fhandler_disk_file::opendir): Drop pathname length check.
- Remove outdated comment. Use get_name method instead of accessing
- pc.normalized_path directly.
- (readdir_get_ino): Drop unused dir parameter. Accomodate throughout.
- Allocate fname dynamically. Call new stat_worker instead of lstat64.
- Call NtOpenFile instead of CreateFile. Call NtClose instead of
- CloseHandle.
- (fhandler_disk_file::readdir_helper): Use native NT functions.
- Check for volume mount points and use correct inode number.
- (fhandler_disk_file::readdir): Simplify slightly.
- Use get_name instead of pc.normalized_path.
- (fhandler_disk_file::rewinddir): Use RtlInitUnicodeString.
- (fhandler_cygdrive::fstat): Ignore floppy drives. Set st_nlink
- correctly.
- (fhandler_cygdrive::readdir): Ignore floppy drives.
- * fhandler_netdrive.cc (fhandler_netdrive::readdir): Accommodate
- change to readdir_get_ino.
- * fhandler_proc.cc (PROC_DIR_COUNT): Define.
- (fhandler_proc::fstat): Evaluate correct link count for /proc.
- * ntdll.h (struct _FILE_DIRECTORY_INFORMATION): Define.
- (NtFsControlFile): Declare.
- (RtlAppendUnicodeToString): Declare.
- (RtlAppendUnicodeStringToString): Declare.
- (RtlCompareUnicodeString): Declare.
- (RtlCopyUnicodeString): Declare.
- (RtlCreateUnicodeStringFromAsciiz): Declare.
- (RtlEqualUnicodeString): Declare.
- (RtlFreeUnicodeString): Declare.
- (RtlInitEmptyUnicodeString): Declare.
- (RtlSecondsSince1970ToTime): Declare.
- (RtlInitEmptyUnicodeString): Define as inline function.
- (RtlInitCountedUnicodeString): Define as inline function.
- * path.cc (path_conv::check): New method with PUNICODE_STRING as path,
- preliminary implementation.
- (mount_info::get_mounts_here): Change to create UNICODE_STRINGs.
- Also copy cygpath prefix into UNICODE_STRING.
- (is_floppy): Drop 9x consideration.
- * path.h: Drop including ntdef.h.
- (path_conv::check): Add declaration.
- (path_conv::path_conv): Add constructor for UNICODE_STRING paths.
- * shared_info.h (mount_info::get_mounts_here): Change declaration.
- * syscalls.cc: Drop forward declaration of stat_worker.
- (stat_worke): Take path_conv as parameter. Drop nofollow flag.
- (stat64): Create matching path_conv and call stat_worker with it.
- (lstat64): Ditto.
- * winsup.h: Include ntdef.h.
- (stat_worker): Declare.
- (readdir_get_ino): Change declaration.
-
-2007-07-25 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (CreateToolhelp32Snapshot): Remove.
-
-2007-07-25 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (Process32First): Remove.
- (Process32Next): Remove.
-
-2007-07-25 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (NetWkstaUserGetInfo): Remove.
- (CharToOemBuffA): Remove.
- (KillTimer): Remove.
- (OemToCharBuffA): Remove.
- (SetTimer): Remove.
-
-2007-07-20 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (DLL_OFILES): Add sec_auth.o.
- * fhandler.cc (fhandler_base::fhaccess): Accommodate interface changes
- of access control functions throughout.
- * fhandler_disk_file.cc: Ditto.
- * fhandler_registry.cc: Ditto.
- * sec_acl.cc: Drop unnecessary includes.
- (setacl): Take path_conv instead of file name as parameter.
- Accommodate interface changes of access control functions.
- (getacl): Ditto.
- * sec_auth.cc: New file, taking over all authentication related
- functions from security.cc.
- * sec_helper.cc: Drop unnecessary includes.
- * security.cc: Ditto. Move all authentication related functions to
- sec_auth.cc.
- (ALL_SECURITY_INFORMATION): New define. Use throughout.
- (set_file_sd): New function, replacing read_sd and the file related
- part of get_nt_object_security.
- (get_reg_sd): Rename from get_reg_security. Drop type parameter.
- (get_reg_attribute): New function, replacing the registry related part
- of get_nt_object_security.
- (get_file_attribute): Take path_conv instead of file name as parameter.
- Use new get_file_sd call.
- (set_file_attribute): Ditto plus new set_file_sd. Drop unnecessary
- implementation without uid/gid parameters.
- (check_file_access): Take path_conv instead of file name as parameter.
- Use new get_file_sd call.
- (check_registry_access): Use new get_reg_sd call.
- * security.h: Accommodate above interface changes.
-
-2007-07-19 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (set_nt_attribute): Remove.
- (set_file_attribute): Do it yourself instead of calling
- set_nt_attribute.
-
-2007-07-19 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_base::fstat_by_name): Use
- NtQueryFullAttributesFile instead of FindFirstFile.
- (fhandler_base::fstat_fs): Drop check for exec_state. Drop check for
- invalid characters.
- * ntdll.h (struct _FILE_NETWORK_OPEN_INFORMATION): Define.
- (NtQueryFullAttributesFile): Declare.
-
-2007-07-19 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::open): Drop local wpath and upath
- variables. Call pc.get_object_attr to create object attributes.
- * fhandler_disk_file.cc (fhandler_disk_file::opendir): Ditto.
- * syscalls.cc (unlink_nt): Ditto.
- * path.cc (path_conv::set_normalized_path): Set wide_path to NULL.
- (path_conv::get_nt_native_path): Drop parameter. Create path in
- wide_path/uni_path members.
- (path_conv::get_object_attr): New method to create object attributes.
- (path_conv::get_wide_win32_path): New method to create Win32 wide path.
- (path_conv::check): Initialize wide_path to NULL.
- (path_conv::~path_conv): cfree wide_path.
- * path.h (class path_conv): New members wide_path and uni_path.
- Add declarations of get_object_attr and get_wide_win32_path.
- (path_conv::path_conv): Initialize wide_path to NULL.
- (path_conv::get_nt_native_path): Drop parameter.
-
-2007-07-19 Corinna Vinschen <corinna@vinschen.de>
-
- * sec_helper.cc: Remove unused code.
-
-2007-07-19 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (SetSecurityDescriptorControl): Drop.
- * security.cc (alloc_sd): Set security descriptor control flag without
- calling SetSecurityDescriptorControl function.
- * wincap.h (wincapc::has_dacl_protect): Rename from
- has_security_descriptor_control.
- * wincap.cc: Ditto throughout.
-
-2007-07-19 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (SetUserObjectSecurity): Drop.
- * pinfo.cc (pinfo::set_acl): Use NtSetSecurityObject instead of
- SetKernelObjectSecurity.
- * spawn.cc (spawn_guts): Use NtSetSecurityObject instead of
- SetUserObjectSecurity.
- * uinfo.cc (cygheap_user::init): Ditto.
-
-2007-07-19 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.h (init_cygheap::luid): Remove.
- * mmap.cc (mlock): Accommodate parameter change in call to
- push_thread_privilege.
- (munlock): Ditto.
- * ntdll.h (STATUS_NOT_ALL_ASSIGNED): Define.
- (NtAdjustPrivilegesToken): Declare.
- * sec_helper.cc (cygpriv): Reorder to match numerical privilege order.
- (privilege_luid): Take job of privilege_luid_by_name, using new
- cygpriv.
- (privilege_luid_by_name): Remove.
- (privilege_name): Accommodate new cygpriv array.
- (set_privilege): Call NtAdjustPrivilegesToken to avoid using advapi32.
- Accommodate changes to privilege_name.
- (set_cygwin_privileges): Simplify. Don't try to set
- SE_CREATE_GLOBAL_PRIVILEGE on systems not supporting it.
- * security.cc (sys_privs): Reorder to match numerical privilege order.
- Use real privilege values as defined in security.h.
- (get_system_priv_list): Drop unused grp_list argument. Create
- list of privileges according to new wincapc::max_sys_priv value.
- (get_priv_list): Call privilege_luid instead of privilege_luid_by_name.
- Make priv a local value instead of a pointer.
- (create_token): Accommodate parameter change in call to
- push_self_privilege.
- (lsaauth): Ditto.
- (check_access): Use privilege values directly instead of calling
- privilege_luid.
- * security.h: Define real privilege values.
- (cygpriv_idx): Remove.
- (privilege_luid): Change declaration.
- (privilege_luid_by_name): Drop declaration.
- (set_privilege): Change declaration.
- (set_process_privilege): Drop definition.
- (_push_thread_privilege): Accomodate new set_privilege parameters.
- * wincap.h (wincapc::max_sys_priv): New element.
- * wincap.cc: Implement above element throughout.
- (wincap_2000sp4): New wincaps structure.
- (wincap_xpsp1): Ditto.
- (wincap_xpsp2): Ditto.
- (wincapc::init): Use new wincaps.
- (wincapc::max_sys_priv): New element.
-
-2007-07-19 Corinna Vinschen <corinna@vinschen.de>
-
- * dcrt0.cc (dll_crt0_0): Call set_cygwin_privileges here, after
- initializing hProcToken.
- * sec_helper.cc (init_global_security): Don't call set_cygwin_privileges here.
-
-2007-07-18 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.h (shared_prefix): De-const.
- (shared_prefix_buf): Add static buffer for shared prefix to avoid
- additional allocation.
- * cygheap.cc (cygheap_init): Set cygheap->shared_prefix to
- cygheap->shared_prefix_buf and strcpy.
-
-2007-07-17 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::fhaccess): Add check for R/O file system.
- * security.cc (check_registry_access): Set errno to EROFS when checking
- for W_OK.
-
-2007-07-17 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::opendir): Move setting
- cfd->nohandle where it won't crash.
-
-2007-07-16 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.h (cygheap_user::curr_imp_token): Rename from current_token.
- Accommodate change throughout Cygwin.
- (cygheap_user::imp_token): Rename from token. Accommodate change
- throughout Cygwin.
- (rcygheap_user::eimpersonate): Use primary token for impersonation.
- * grp.cc (internal_getgroups): Use primary impersonation token when
- impersonated.
- * security.h (_push_thread_privilege): Use primary impersonation token
- when impersonated.
-
-2007-07-14 Christopher Faylor <me+cygwin@cgf.cx>
-
- * init.cc (in_dllentry): Delete.
- (dll_entry): Remove assignment to deleted variable.
- * winsup.h (in_dllentry): Delete declaration.
- * exceptions.cc (inside_kernel): Use another method to see if we are in
- dll_entry phase.
-
-2007-07-13 Christopher Faylor <me+cygwin@cgf.cx>
-
- * init.cc (in_dllentry): Make NO_COPY to avoid spurious false
- positives.
-
-2007-07-09 Christopher Faylor <me+cygwin@cgf.cx>
-
- * debug.cc (close_handle): Change debug output format slightly.
-
- * dlfcn.cc (dlclose): Don't close handle returned from
- GetModuleHandle(NULL).
-
- * fhandler.h (fhandler_pipe::create): Remove obsolete argument.
- (fhandler_pipe::create): Ditto.
- * fhandler.cc (fhandler_pipe::create): Ditto.
- (fhandler_pipe::create): Ditto.
-
-2007-07-09 Christopher Faylor <me+cygwin@cgf.cx>
-
- * strsig.cc (__signals): New macro.
- (sys_sigabbrev): New array of signal strings, patterned after linux.
- (siglist): Use __signals.
- * include/cygwin/signal.h (sys_sigabbrev): Define.
- * include/cygwin/version.h: Bump API minor version to 177.
-
-2007-07-09 Corinna Vinschen <corinna@vinschen.de>
-
- * dir.cc (closedir): Revert change from 2007-06-29.
- * fhandler.h (dirent_valid_fd): Drop.
- * fhandler_disk_file.cc (fhandler_disk_file::opendir): If opening a
- real dir, use the underlying fhandler to keep track of the directory
- handle. In fdopendir case use original io_handle from fhandler. Use
- fhandler's io_handle in subsequent directory functions throughout.
- Create handle non-inheritable and set close-on-exec flag.
- (readdir_get_ino): Drop dirent_isroot case.
- (fhandler_disk_file::readdir): Handle dirent_isroot case here.
- (fhandler_disk_file::rewinddir): Revert change from 2007-07-05. Use
- NtClose instead of CloseHandle.
- * fhandler_virtual.cc (fhandler_virtual::opendir): Drop adding
- dirent_valid_fd flag. Set close-on-exec flag.
-
-2007-07-08 Christopher Faylor <me+cygwin@cgf.cx>
-
- * Makefile.in (DLL_OFILES): Add newly-imported random.o. Eliminate
- reliance on libiberty.
- * random.cc: Import from FreeBSD. Modify for Cygwin environment.
- * include/cygwin/stdlib.h (random): Reflect change in return value to
- be more linux/freebsd-like.
- (srandom): Ditto.
-
-2007-07-07 Christopher Faylor <me+cygwin@cgf.cx>
-
- * fhandler.h (fhandler_base::write): Remove __stdcall decoration.
- (fhandler_pipe::write): Ditto.
- (fhandler_fifo::write): Ditto.
-
-2007-07-07 Christopher Faylor <me+cygwin@cgf.cx>
-
- Preliminary change to make pipes interruptible and fifos reliable.
- * dtable.cc (dtable::find_fifo): Eliminate definition.
- * dtable.h (dtable::find_fifo): Ditto for declaration.
- * fhandler.cc (fhandler_base::raw_read): Remove pipe-specific stuff.
- (fhandler_base::fhandler_base): Ditto.
- (fhandler_base::close): Handle overlapped I/O structure if appropriate.
- (fhandler_base::dup): Ditto.
- (fhandler_base::fork_fixup): Ditto.
- (fhandler_base::setup_overlapped): Define new function.
- (fhandler_base::destroy_overlapped): Ditto.
- (fhandler_base::wait_overlapped): Ditto.
- (fhandler_base::read_overlapped): Ditto.
- (fhandler_base::write_overlapped): Ditto.
- * fhandler.h (fhandler_base::get_overlapped): Declare new function.
- (fhandler_base::setup_overlapped): Ditto.
- (fhandler_base::destroy_overlapped): Ditto.
- (fhandler_base::wait_overlapped): Ditto.
- (fhandler_base::read_overlapped): Ditto.
- (fhandler_base::write_overlapped): Ditto.
- (fhandler_base::get_guard): Eliminate.
- (fhandler_pipe::*): Rework to eliminate most Win9x related cruft,
- removing many variables and defining a new overlapped capability.
- (fhandler_fifo::*): Ditto.
- (fifo_state): Declare new enum.
- * fhandler_fifo.cc (fhandler_fifo::fhandler_fifo): Remove old Win9x
- stuff. Initialize overlapped handle to NULL.
- (fhandler_fifo::set_use): Eliminate.
- (fhandler_fifo::open_nonserver): Define.
- (fhandler_fifo::open): Rework to use named pipes and overlapped I/O.
- (fhandler_fifo::wait): Define new function to wait for named pipe
- connection.
- (fhandler_fifo::read): Rework to use wait() and new overlapped I/O
- functionality.
- (fhandler_fifo::write): Ditto.
- (fhandler_fifo::dup): Eliminate.
- * pinfo.cc (commune_process): Remove fifo handling.
- (_pinfo::commune_request): Ditto.
- * pinfo.h (picom): Ditto.
- * pipe.cc (fhandler_pipe::fhandler_pipe): Remove Win9x stuff.
- Initialize overlapped handle to NULL.
- (fhandler_pipe::open): Eliminate Win9x stuff.
- (fhandler_pipe::set_close_on_exec): Eliminate.
- (read_pipe): Eliminate.
- (fhandler_pipe::close): Ditto.
- (fhandler_pipe::fixup_after_exec): Ditto.
- (fhandler_pipe::fixup_in_child): Ditto.
- (fhandler_pipe::read): Rework to use overlapped I/O.
- (fhandler_pipe::write): New function using overlapped I/O.
- (fhandler_pipe::dup): Rework to eliminate Win9x stuff.
- (fhandler_pipe::create_selectable): Rework to eliminate Win9x and use
- overlapped I/O.
- * select.cc (peek_pipe): Rework to eliminate Win9x stuff and use
- overlapped I/O.
- (fhandler_base::ready_for_read): Ditto.
-
-2007-07-07 Christopher Faylor <me+cygwin@cgf.cx>
-
- * path.cc (symlink_info::check_shortcut): Handle device "symlinks"
- specially - don't posixify them.
-
-2007-07-07 Christopher Faylor <me+cygwin@cgf.cx>
-
- * fhandler_disk_file.cc: White space.
- * fhandler_proc.cc: Ditto.
- * fhandler_virtual.cc: Ditto.
-
-2007-07-07 Christopher Faylor <me+cygwin@cgf.cx>
-
- * fork.cc: White space.
- * net.cc: Ditto.
- * posix_ipc.cc: Ditto.
-
-2007-07-06 Corinna Vinschen <corinna@vinschen.de>
-
- * times.cc (gettimeofday): Align definition to POSIX.
-
-2007-07-06 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din: Export wcstol, wcstoll, wcstoul, wcstoull, wcsxfrm.
- * include/cygwin/version.h: Bump API minor number.
-
-2007-07-05 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::opendir): Add missing
- OBJ_INHERIT flag when creating OBJECT_ATTRIBUTES.
- (fhandler_disk_file::rewinddir): Ditto.
-
-2007-07-04 Corinna Vinschen <corinna@vinschen.de>
-
- * times.cc: Define __timezonefunc__ before including time.h to protect
- definition of timezone function.
-
-2007-07-04 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/time.h: Switch to timezone variable by default. Add
- comment.
-
-2007-06-29 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din: Export fdopendir.
- * dir.cc (opendir): Call fhandler's opendir with fd set to -1.
- (fdopendir): New function.
- (seekdir64): Use dirent_info_mask.
- (rewinddir): Ditto.
- (closedir): Only release underlying file descriptor if it has been
- reserved by opendir itself.
- * fhandler.cc (fhandler_base::opendir): Accommodate new parameter.
- * fhandler.h (dirent_states): Add dirent_valid_fd and dirent_info_mask.
- (fhander_XXX::opendir): Add file descriptor parameter. Use regparms.
- (fhandler_procnet::opendir): Drop declaration.
- * fhandler_disk_file.cc (fhandler_disk_file::opendir): Ditto.
- If called from fdopendir, use existing handle to re-open directory
- with valid flags. Rename fd to cfd. Use only if no valid incoming fd.
- (fhandler_cygdrive::opendir): Accommodate new parameter.
- * fhandler_process.cc (fhandler_process::opendir): Ditto.
- * fhandler_procnet.cc (fhandler_procnet::opendir): Drop definition.
- * fhandler_virtual.cc (fhandler_virtual::opendir): Accommodate new
- parameter. Only create new file descriptor entry if called from
- opendir. Remove duplicated setting of dir->__flags.
- * posix.sgml: Add fdopendir to list of implemented Solaris functions.
- * include/cygwin/version.h: Bump API minor number.
- * include/sys/dirent.h: Declare fdopendir.
-
-2007-06-28 Brian Dessent <brian@dessent.net>
-
- * include/cygwin/version.h: Fix comment typo.
-
-2007-06-28 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din: Export stpcpy, stpncpy.
- * posix.sgml: Add stpcpy and stpncpy to list of implemented
- GNU extensions.
- * include/cygwin/version.h: Bump API minor number.
-
-2007-06-27 Corinna Vinschen <corinna@vinschen.de>
-
- * shared_info.h (SHARED_INFO_CB): Accommodate change to shared_info.
- (CURR_SHARED_MAGIC): Ditto.
- (class shared_info): Add heap_slop_inited member.
- * shared.cc (shared_info::heap_slop_size): Use heap_slop_inited to
- track initializing heap_slop since 0 is a valid value for heap_slop.
- Drop useless < 0 consideration.
-
-2007-06-27 Eric Blake <ebb9@byu.net>
-
- * assert.cc (__assert_func): New function, to match newlib header
- change.
- * cygwin.din: Export __assert_func.
- * include/cygwin/version.h: Bump API minor number.
-
-2007-06-21 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (WSAIoctl): Remove.
- * cygwin.din: Export freeifaddrs, getifaddrs.
- * fhandler_socket.cc (fhandler_socket::ioctl): Drop SOCKET parameter
- from get_ifconf.
- * net.cc: Include ifaddrs.h.
- (in_are_prefix_equal): Match addresses in network byte order.
- (ip_addr_prefix): Convert address into host byte order before
- testing with IN_LOOPBACK.
- (struct ifall): Define.
- (get_xp_ifs): Replace get_xp_ifconf. Return struct ifall array.
- (get_2k_ifs): Ditto, replace get_2k_ifconf.
- (get_nt_ifs): Ditto, replace get_nt_ifconf.
- (getifaddrs): New function.
- (freeifaddrs): New function.
- (get_ifconf): Call matching get_XX_ifs function and create
- ifc content from here. Drop lo fake since it's now in get_nt_ifs.
- * posix.sgml: Add freeifaddrs and getifaddrs to list of implemented
- BSD functions.
- * wincap.h (wincapc::has_broken_if_oper_status): New element.
- * wincap.cc: Implement above element throughout.
- * include/ifaddrs.h: New file.
- * include/cygwin/version.h: Bump API minor number.
-
-2007-06-20 Eric Blake <ebb9@byu.net>
-
- * cygwin.din: Export exp10, exp10f, pow10, pow10f, strcasestr,
- funopen, fopencookie.
- * include/cygwin/version.h: Bump API minor number.
- * posix.sgml: Minor improvements.
-
-2007-06-20 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/if.h (IFF_POINTOPOINT): Fix typo.
-
-2007-06-16 Christopher Faylor <me+cygwin@cgf.cx>
-
- * include/search.h: Reinstate node_t definition.
-
-2007-06-16 Christopher Faylor <me+cygwin@cgf.cx>
-
- * include/sys/cdefs.h: Remove in favor of newlib version.
-
-2007-06-14 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (GetIpForwardTable): Define.
- * fhandler_socket.cc (fhandler_socket::ioctl): Handle SIOCGIFDSTADDR.
- * net.cc (get_routedst): New static function to get destination
- address of point-to-point interfaces.
- (get_xp_ifconf): Handle SIOCGIFDSTADDR.
- (get_2k_ifconf): Ditto.
- (get_nt_ifconf): Ditto.
- (get_ifconf): Ditto.
- * include/asm/socket.h (SIOCGIFDSTADDR): Define.
- * include/cygwin/if.h (struct ifreq): Add ifru_dstaddr member.
- (ifr_dstaddr): Define.
- * include/cygwin/in.h: Cast ipv4 addresses correctly to in_addr_t in
- definitions.
-
-2007-06-12 Christopher Faylor <me+cygwin@cgf.cx>
-
- * signal.cc (usleep): Use useconds_t for the type as per POSIX.
-
-2007-06-12 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (DLL_OFILES): Add xsique.o.
- * cygwin.din (confstr): Make NOSIGFE.
- (insque): Export.
- (remque): Export.
- * lsearch.cc: Remove superfluous _SEARCH_PRIVATE define.
- * posix.sgml: Move insque to defined SUSv3 interfaces. Remove
- comment for remque.
- * include/search.h: Remove _SEARCH_PRIVATE guarded definitions.
- Add struct qelem definition. Add insque and remque declarations.
- * include/cygwin/version.h: Bump API minor number.
- * include/sys/queue.h: Remove insque/remque definitions so as not
- to collide with SUSv3 compatible declaration in search.h.
- * libc/xsique.cc: New file implementing insque and remque.
-
-2007-06-12 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::fstat): Set pipe permission bits more
- correctly.
-
-2007-06-11 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din (confstr): Export.
- * posix.sgml (confstr): Move to list of implemented SUSv3 functions.
- * sysconf.cc (confstr): Implement.
- * include/cygwin/version.h: Bump API minor number.
-
-2007-06-05 Corinna Vinschen <corinna@vinschen.de>
-
- * ansi.sgml: Delete.
- * misc-std.sgml: Delete.
- * posix.sgml: Rework entirely.
-
-2007-05-29 Corinna Vinschen <corinna@vinschen.de>
-
- * dtable.cc (dtable::set_file_pointers_for_exec): Call SetFilePointer
- correctly for 64 bit file access. Comment out functionality.
- * fhandler.cc (fhandler_base::open): Don't set append_mode.
- (fhandler_base::write): Check for O_APPEND instead of append_mode.
- Call SetFilePointer correctly for 64 bit file access. Handle
- errors from SetFilePointer.
- * fhandler.h (class fhandler_base): Drop append_mode status flag.
- * fhandler_disk_file.cc (fhandler_base::fstat_helper): Handle
- seeking correctly for 64 bit file access.
-
-2007-05-22 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (cwdstuff::set): Revert useless acquire check.
-
-2007-05-22 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (cwdstuff::set): Avoid double aquiring of cwd_lock.
- Open directory with inheriting enabled.
-
-2007-05-21 Christian Franke <franke@computer.org>
-
- * fhandler_floppy.cc (fhandler_dev_floppy::lseek): Don't invalidate
- devbuf if new position is within buffered range.
-
-2007-05-21 Eric Blake <ebb9@byu.net>
-
- * include/search.h (hsearch_r): Provide declaration.
-
-2007-05-21 Christian Franke <franke@computer.org>
- Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_floppy.cc (fhandler_dev_floppy::lseek): Set buf size to
- sector size. Simplify non-sector aligned case. Handle errors from
- raw_read.
-
-2007-05-15 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (adjust_socket_file_mode): New inline function.
- (fhandler_socket::fchmod): Squeeze mode through adjust_socket_file_mode
- before using it.
- (fhandler_socket::bind): Ditto.
-
-2007-03-19 Ryan C. Gordon <icculus@icculus.org>
-
- * path.cc (fs_info::update): Set and use is_cdrom.
- * path.cc (fillout_mntent): Set ret.mnt_type to something more
- Linux-like, based on data from fs_info. Move "system" and "user"
- strings from mnt_type to mnt_opts.
- * path.h (struct fs_info): Add is_cdrom field.
- * path.h (fs_info::clear): Initialize is_cdrom.
- * path.h (struct fs_info): Add IMPLEMENT_STATUS_FLAG(bool,is_cdrom).
- * path.h (class path_conv): Add fs_is_cdrom method. Add missing
- fs_is_netapp method.
-
-2007-05-14 Eric Blake <ebb9@byu.net>
-
- * cygwin.din (asnprintf, dprint, _Exit, vasnprintf, vdprintf): Export.
- * include/cygwin/version.h: Bump API minor number.
-
-2007-04-18 Brian Dessent <brian@dessent.net>
-
- * cygwin.sc: Remove duplicated .debug_macinfo section.
- * dllfixdbg: Also copy DWARF-2 sections into .dbg file.
-
-2007-04-06 Eric Blake <ebb9@byu.net>
-
- * include/stdint.h (WINT_MIN): Fix sign.
-
-2007-04-04 Eric Blake <ebb9@byu.net>
-
- * include/stdint.h (WINT_MIN, WINT_MAX): Fix definition.
-
-2007-03-30 Christopher Faylor <me@cgf.cx>
-
- * external.cc (cygwin_internal): Implement CW_SET_DOS_FILE_WARNING.
- * include/sys/cygwin.h: Define CW_SET_DOS_FILE_WARNING.
-
-2007-03-29 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.cc (cygheap_init): Fix formatting. Remove comment. Set
- shared_prefix depending only on terminal service capability.
- * dcrt0.cc (dll_crt0_1): Don't call set_cygwin_privileges here.
- * fhandler_fifo.cc (fhandler_fifo::open): Create the mutex as global
- object.
- * posix_ipc.cc (ipc_mutex_init): Use cygheap->shared_prefix.
- (ipc_cond_init): Ditto.
- * sec_helper.cc (privilege_name): Make static. Use LookupPrivilegeName
- directly to be independent of the state of cygheap.
- (set_privilege): Take a LUID as parameter instead of an index value.
- Only print debug output in case of failure.
- (set_cygwin_privileges): Add comment. Use LookupPrivilegeValue to
- get privilege LUIDs.
- (init_global_security): Call set_cygwin_privileges here.
- * security.h (privilege_name): Drop declaration.
- (set_privilege): Declare according to above change.
- (set_process_privilege): Call privilege_luid to get LUID.
- (_push_thread_privilege): Ditto.
- * shared.cc (open_shared): Add comment. On systems supporting the
- SeCreateGlobalPrivilege, try to create/open global shared memory first.
- Fall back to local shared memory if that fails.
- * thread.cc (semaphore::semaphore): Use cygheap->shared_prefix.
- * wincap.h (wincapc::has_create_global_privilege): New element.
- * wincap.cc: Implement above element throughout.
-
-2007-03-28 Christopher Faylor <me@cgf.cx>
-
- * spawn.cc (spawn_guts): Start pure-windows processes in a suspended
- state to avoid potential DuplicateHandle problems.
-
-2007-03-13 Eric Blake <ebb9@byu.net>
-
- * include/cygwin/stat.h (S_TYPEISMQ, S_TYPEISSEM, S_TYPEISSHM):
- Avoid compiler warnings.
-
-2007-03-07 Christopher Faylor <me@cgf.cx>
-
- * signal.cc (handle_sigprocmask): Remove extraneous
- sig_dispatch_pending.
-
-2007-03-07 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_proc.cc: Fix formatting. Drop setting errno when creating
- proc file content.
- (format_proc_uptime): Simplify.
- (format_proc_cpuinfo): Align more closely to output of Linux 2.6 kernel.
- Evaluate more data, especially for AMD CPUs.
-
-2007-03-06 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (fhandler_base::fstat_helper): Add creation time parameter.
- * glob.cc (stat32_to_stat64): Set st_birthtim to st_mtim.
-
-2007-03-06 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/stat.h (S_TYPEISMQ): Define.
- (S_TYPEISSEM): Dttio.
- (S_TYPEISSHM): Ditto.
-
-2007-03-06 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_mailslot.cc (fhandler_mailslot::fstat): Set new stat member
- st_birthtim to useful value.
- * fhandler_process.cc (fhandler_process::fstat): Ditto.
- * fhandler_disk_file.cc (fhandler_base::fstat_by_handle): Take
- additional parameter for creation time. Fill st_birthtim with it.
- Accomodate additional creation time parameter throughout.
- * fhandler_raw.cc (fhandler_dev_raw::fstat): Set new stat member
- st_birthtim to useful value.
- * fhandler.cc (fhandler_base::fstat): Ditto.
- * fhandler_registry.cc (fhandler_registry::fstat): Ditto.
- * include/cygwin/version.h: Bump API minor number.
- * include/cygwin/stat.h (struct __stat64): Replace st_spare4 with
- timestruc_t st_birthtim.
- (struct stat): Ditto if __CYGWIN_USE_BIG_TYPES__ is defined.
- (st_birthtime): Define if __CYGWIN_USE_BIG_TYPES__ is defined.
-
-2007-03-02 Corinna Vinschen <corinna@vinschen.de>
-
- * ntdll.h (struct _FILE_NAMES_INFORMATION): Define.
- * syscalls.cc (unlink_nt): Check shared directory for being empty
- before trying to move and mark for deletion.
-
-2007-03-02 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (get_file_attribute): Avoid compiler warning.
-
-2007-03-01 Christopher Faylor <me@cgf.cx>
-
- * fork.cc (fork): Reset child to true after fork since it may have been
- reset by fork memory copies.
-
-2007-03-01 Christopher Faylor <me@cgf.cx>
-
- * Makefile (DLL_OFILES): Remove ntea.o
- * environ.cc (set_ntea): Delete.
- (parse_thing): Delete "ntea" setting.
- * fhandler.cc (fhandler_base::open): Remove allow_ntea considerations.
- (check_posix_perm): Ditto.
- * fhandler_disk_file.cc (fhandler_disk_file::fchmod): Ditto.
- (fhandler_base::open_fs): Ditto.
- (fhandler_disk_file::mkdir): Ditto.
- * path.cc (symlink_worker): Ditto.
- * security.cc (get_file_attribute): Ditto.
- (set_file_attribute): Ditto.
- * security.h: Remove allow_ntea declaration.
-
-2007-02-27 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (close_user_proc_parms_cwd_handle): Remove.
- (cwdstuff::init): Don't call close_user_proc_parms_cwd_handle.
- Call set to set cwd with all-sharing handle.
- (cwdstuff::set): Fix comment. Don't close cwd handle. Set in
- user parameter block instead and close old cwd handle.
- * syscalls.cc (rename): Call unlink_nt instead of RemoveDirectory or
- DeleteFile to allow deleting shared files/directories.
-
-2007-02-27 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc(fhandler_base::open): Open with READ_CONTROL only in
- case of query_open flag set to query_read_control. Add case for
- new query_read_attributes flag.
- (fhandler_base::fstatvfs): New method.
- * fhandler.h (enum query_state): Add query_read_attributes flag.
- (class fhandler_base): Declare new virtual fstatvfs method.
- (class fhandler_socket): Ditto.
- (class fhandler_pipe): Ditto.
- (class fhandler_fifo): Ditto.
- (class fhandler_disk_file): Ditto.
- (class fhandler_virtual): Ditto.
- * fhandler_disk_file.cc (fhandler_base::fstat_fs): Open with
- query_read_attributes instead of query_read_control.
- (fhandler_disk_file::fstatvfs): New method.
- (fhandler_disk_file::facl): Open with query_read_attributes instead of
- query_read_control.
- * fhandler_fifo.cc (fhandler_fifo::fstatvfs): New method.
- * fhandler_socket.cc (fhandler_socket::fstatvfs): New method.
- (fhandler_socket::fchmod): Return with EBADF in the default case.
- (fhandler_socket::fchown): Ditto.
- (fhandler_socket::facl): Ditto.
- * fhandler_virtual.cc (fhandler_virtual::fstatvfs): Ditto.
- * ntdll.h (struct _FILE_FS_ATTRIBUTE_INFORMATION): Define.
- (struct _FILE_FS_FULL_SIZE_INFORMATION): Define.
- * pipe.cc (fhandler_pipe::fstatvfs): New method.
- * syscalls.cc (fstatvfs): Just call the fhandler's fstatvfs.
- (statvfs): Ditto.
- (fstatfs): Call fstatvfs.
- (statfs): Drop EFAULT handling.
-
-2007-02-26 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::fstat): Set all file times to arbitrary
- fixed value.
-
-2007-02-26 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_registry.cc (registry_listing): Drop name of HKEY_DYN_DATA.
- (registry_keys): Drop HKEY_DYN_DATA.
- * net.cc: Fix comment.
- * syslog.cc: Ditto.
-
-2007-02-26 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::fchmod): Drop comment.
- * mmap.cc (gen_access): Remove.
- (mmap_record::gen_access): Remove.
- (mmap64): Don't mention 9x any longer.
- * syscalls.cc (statvfs): Drop status code consideration for 9x.
- * libc/minires-os-if.c (get_registry_dns_items): Don't mention 9x any
- longer.
- (get_registry_dns): Drop getting registry key on 9x. Drop is9x
- variable.
-
-2007-02-23 Corinna Vinschen <corinna@vinschen.de>
-
- Throughout remove all usage of wincap.has_security.
- * environ.cc (environ_init): Drop setting allow_ntsec here.
- * grp.cc (initgroups32): Drop usage of label "out".
- * security.cc (allow_ntsec): Set to true by default.
- * syscalls.cc (seteuid32): Remove label success_9x.
- * wincap.cc: Remove has_security throughout.
- * wincap.h: Ditto.
-
-2007-02-23 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (class fhandler_pipe): Remove members writepipe_exists,
- orig_pid and id. Make hit_eof inline.
- * fhandler_fifo.cc (fhandler_fifo::open): Drop handling of
- writepipe_exists, orig_pid and id.
- * pipe.cc: Ditto throughout.
- (pipecount): Remove.
- (pipeid_fmt): Remove.
- (fhandler_pipe::hit_eof): Simplify. Move to fhandler.h.
- (fhandler_pipe::dup): Drop leave label.
- (fhandler_pipe::create): Drop has_unreliable_pipes case.
- * wincap.cc: Remove has_unreliable_pipes throughout.
- * wincap.h: Ditto.
-
-2007-02-23 Corinna Vinschen <corinna@vinschen.de>
-
- * devices.in: Change native device name to native NT device name for
- /dev/null, /dev/comX and /dev/ttySx.
- * devices.cc: Regenerate.
- * fhandler.cc (fhandler_base::open_9x): Remove.
- (fhandler_base::open): Don't test for DOS device name, don't call
- open_9x.
- (fhandler_dev_null::open): Remove.
- * fhandler.h (class fhandler_base): Drop open_9x declaration.
- (class fhandler_dev_null): Drop open declaration.
-
-2007-02-23 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_console.cc (fhandler_console::need_invisible): Drop
- pty_needs_alloc_console check.
- * spawn.cc (spawn_guts): Ditto.
- (av::fixup): Remove setting iscui.
- * syscalls.cc (rename): Drop has_move_file_ex checks. Remove 9x
- specific code.
- * wincap.cc: Remove has_move_file_ex and pty_needs_alloc_console
- throughout.
- * wincap.h: Ditto.
-
-2007-02-23 Corinna Vinschen <corinna@vinschen.de>
-
- * exceptions.cc (dummy_ctrl_c_handler): Remove.
- (init_console_handler): Drop has_null_console_handler_routine checks.
- * fhandler_raw.cc (fhandler_dev_raw::open): Drop has_raw_devices check.
- * fhandler_serial.cc (fhandler_serial::open): Drop
- .supports_reading_modem_output_lines check.
- * miscfuncs.cc (low_priority_sleep): Drop has_switch_to_thread check.
- * shared.cc (open_shared): Drop needs_memory_protection checks.
- * spawn.cc (spawn_guts): Drop start_proc_suspended check.
- * uname.cc (uname): Drop has_valid_processorlevel check.
- * wincap.cc: Remove has_raw_devices, has_valid_processorlevel,
- supports_reading_modem_output_lines, needs_memory_protection,
- has_switch_to_thread, start_proc_suspended and
- has_null_console_handler_routine throughout.
- * wincap.h: Ditto.
-
-2007-02-23 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::lseek): Drop 9x considerations.
- * fhandler_disk_file.cc (fhandler_disk_file::lock): Ditto.
- * wincap.cc: Remove lock_file_highword and has_64bit_file_access
- throughout.
- * wincap.h: Ditto.
-
-2007-02-22 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.h (struct cwdstuff): Remove sync member and keep_in_sync
- accessors.
- * external.cc (cygwin_internal): Drop call to cygheap->cwd.keep_in_sync.
- * fhandler_disk_file.cc (fhandler_disk_file::link): Always presume
- ability to create hard links.
- * path.cc (cwdstuff::init): Drop 9x considerations.
- (cwdstuff::keep_in_sync): Remove.
- (cwdstuff::set): Take NT for granted.
- * pinfo.h (cygwin_pid): Just return pid.
- * wincap.cc: Remove has_hard_links, can_open_directories,
- has_negative_pids, has_named_pipes, has_try_enter_critical_section,
- cant_debug_dll_entry and detect_win16_exe throughout.
- * wincap.h: Ditto.
-
-2007-02-22 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_console.cc (fhandler_console::read): Drop 9x specific
- handling of AltGr key.
- * mmap.cc: Take NT for granted throughout.
- * wincap.cc: Remove map_view_of_file_ex_sucks, altgr_is_ctrl_alt,
- has_working_copy_on_write, share_mmaps_only_by_name,
- virtual_protect_works_on_shared_pages, has_mmap_alignment_bug and
- has_working_virtual_lock throughout.
- * wincap.h: Ditto.
-
-2007-02-22 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::set_no_inheritance): Always use
- SetHandleInformation.
- * fhandler_disk_file.cc (fhandler_disk_file::lock): Always use
- UnlockFileEx/LockFileEx functions.
- * net.cc (fdsock): Don't bother to duplicate socket for inheritance.
- * sysconf.cc (get_nproc_values): Take NT for granted.
- (get_avphys): Ditto.
- * syslog.cc (WIN95_EVENT_LOG_PATH): Remove define.
- (get_win95_event_log_path): Remove.
- (vsyslog): Fix formatting. Take NT for granted.
- * wincap.cc: Remove has_lock_file_ex, has_signal_object_and_wait,
- has_eventlog, has_set_handle_information,
- has_set_handle_information_on_console_handles and supports_smp
- throughout.
- * wincap.h: Ditto.
-
-2007-02-22 Corinna Vinschen <corinna@vinschen.de>
-
- * dir.cc (rmdir): Move existance check in front of
- has_dot_last_component check. Simplify setting errno in latter case.
-
-2007-02-22 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::write): Remove wincap.has_lseek_bug case.
- Simplify seek beyond EOF case.
- * times.cc (times): Remove wincap.has_get_process_times case.
- * wincap.cc: Remove has_delete_on_close, has_page_guard,
- has_get_process_times and has_lseek_bug throughout.
- * wincap.h: Ditto.
-
-2007-02-22 Corinna Vinschen <corinna@vinschen.de>
-
- Throughout remove all usage of wincap.access_denied_on_delete.
- * dir.cc (rmdir): Add existance check to be errno-compatible with Linux.
- * fhandler_disk_file.cc (fhandler_disk_file::rmdir): Drop test for
- non-existent dir on 9x share.
- * syscalls.cc (unlink): Add comment.
- * wincap.cc: Remove access_denied_on_delete flag throughout.
- * wincap.h: Ditto.
-
-2007-02-22 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::closedir): Fix bug
- introduced by switching to NtClose.
-
-2007-02-22 Christopher Faylor <me@cgf.cx>
-
- * dcrt0.cc (child_info_fork::alloc_stack_hard_way): Change sense of
- guard test. Increase size of stack reserved and increase size before
- the current stack pointer. Use pointers when doing arithmetic.
- (dll_crt0_1): Initialize exception handler when we notice we're the
- child of a fork from non-main thread.
- * fork.cc (frok::parent): Make argument volatile.
- (frok::child): Ditto.
- (lock_signals): New class.
- (lock_pthread): Ditto.
- (hold_everhthing): Ditto.
- (frok::parent): Move atforkprepare and atforkparent to lock_pthread
- class.
- (fork): Make ischild boolean. Use hold_everything variable within
- limited scope to set various mutexes in such a way as to avoid
- deadlocks.
- * thread.h (pthread_mutex::tid): New variable, active when debugging
- for tracking thread id of owner.
- (pthread_mutex::set_owner): Set tid when debugging.
- * thread.cc (pthread_mutex::pthread_mutex): Clear tid.
- (pthread_mutex::_unlock): Ditto when unlocking.
- (pthread_mutex::fixup_after_fork): Set tid to special value after
- forking since owner is unknown.
-
-2007-02-22 Corinna Vinschen <corinna@vinschen.de>
-
- Throughout replace all usage of wincap.shared with the constant
- FILE_SHARE_VALID_FLAGS.
- * fhandler.cc (fhandler_base::open_9x): Drop local variable shared.
- * wincap.cc: Remove shared member throughout.
- * wincap.h: Ditto.
-
-2007-02-22 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (DLL_IMPORTS): Add libntdll.a.
- * autoload.cc: Remove all symbols from advapi32.dll, kernel32.dll and
- ntdll.dll available on all platforms since NT4.
-
- Throughout remove all usage of wincap.is_winnt.
- * dcrt0.cc (dll_crt0_0): Remove call to mmap_init.
- * fhandler.h (class fhandler_base): Remove has_changed flag.
- (fhandler_disk_file::touch_ctime): Remove declaration.
- (fhandler_disk_file::readdir_9x): Ditto.
- (fhandler_disk_file::touch_ctime): Remove.
- (fhandler_disk_file::readdir_9x): Remove.
- (fhandler_disk_file::closedir): Call NtClose instead of CloseHandle.
- * mmap.cc: Throughout call CreateMapping and MapView directly.
- (VirtualProt9x): Remove.
- (VirtualProtNT): Remove.
- (VirtualProtEx9x): Remove.
- (VirtualProtExNT): Remove.
- (VirtualProtect): Remove define.
- (VirtualProtectEx): Remove define.
- (CreateMapping9x): Remove.
- (CreateMappingNT): Rename to CreateMapping.
- (MapView9x): Remove.
- (MapViewNT): Rename to MapView.
- (struct mmap_func_t): Remove definition.
- (mmap_funcs_9x): Remove.
- (mmap_funcs_nt): Remove.
- (mmap_func): Remove.
- (mmap_init): Remove.
- * net.cc (getdomainname): Drop comment. Use NT4 registry key only.
- (get_95_ifconf): Remove.
- * pinfo.cc (winpids::enumNT): Rename to winpids::enum_processes.
- (winpids::enum9x): Remove.
- (winpids::set): Just call enum_processes directly.
- (winpids::enum_init): Ditto.
- * pinfo.h (class winpids): Drop enum_processes pointer. Rename
- enumNT to enum_processes. Drop enum9x declaration. Drop initialization
- of enum_processes throughout.
- * registry.cc (get_registry_hive_path): Just create NT key.
- (load_registry_hive): Only load NT specific file.
- * syscalls.cc (unlink_9x): Remove.
- (unlink): Just call unlink_nt.
- * wincap.cc: Remove is_winnt flag throughout.
- * wincap.h: Ditto.
- * winsup.h: Remove mmap_init declaration.
-
-2007-02-21 Corinna Vinschen <corinna@vinschen.de>
-
- * wincap.cc (wincap_unknown): Change settings for unknown to reflect
- the capabilities of NT4.
- (wincap_95): Remove.
- (wincap_95osr2): Remove.
- (wincap_98): Remove.
- (wincap_98se): Remove.
- (wincap_me): Remove.
- (wincap_nt3): Remove.
- (wincapc::init): Temporarily bail out on any 9x system.
-
-2007-02-20 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din (sem_unlink): Export.
- * posix_ipc.cc: Include thread.h and semaphore.h. Remove TODO
- comment.
- (ipc_names): Add max_len member. Set to maximum length of the path
- before tacking on the prefix path. Set prefix path for named semaphors
- to /dev/shm, as on Linux.
- (enum ipc_type_t): Change sem to semaphore to avoid name conflicts.
- (check_path): Detect empty paths. Use ipc_names's max_len member.
- Use __small_sprintf to create full object path name. Special case
- semaphores.
- (ipc_cond_init): Drop superfluous strcpy.
- (class ipc_flock): New class to simplify file locking in subsequent
- code.
- (struct mq_hdr): Raise size of mqh_uname to allow adding a unique
- LUID to the name.
- (mq_open): Fix formatting. Create unique synchronization object names
- using AllocateLocallyUniqueId.
- (struct sem_finfo): New structure defining named semaphore file content.
- (sem_open): Move here. Rework implementation to allow kernel
- persistent implementation of POSIX named semaphores.
- (_sem_close): Implement sem_close.
- (sem_close): Move here. Just call _sem_close with do_close parameter
- set to true.
- (sem_unlink): New function.
- * pthread.cc (mangle_sem_name): Remove.
- (sem_open): Move to posix_ipc.cc.
- (sem_close): Ditto.
- * syscalls.cc (close_all_files): Call semaphore::terminate here.
- * thread.cc: Fix formatting. Rearrange semaphore functions so that
- they are close together.
- (semaphore::semaphore): Rework to play nicely with new named semaphore
- implementation.
- (semaphore::_terminate): Call _sem_close if semaphore is a named
- semaphore.
- (semaphore::destroy): Don't destroy named semaphores. Return EINVAL
- instead.
- (semaphore::close): Only destroy named semaphores. Return EINVAL
- otherwise.
- (semaphore::open): Rework to play nicely with new named semaphore
- implementation. Loop through existing semaphores to be able to
- return same sem_t pointer as a former call on the same named semaphore.
- (semaphore::getinternal): New function called from _sem_close.
- * thread.h (class List): Make mx and head public.
- (class semaphore): Fix formatting. Align method declarations with
- implementation in thread.cc. Add members used for named semaphores.
- (semaphore::terminate): New static method.
- * include/semaphore.h: Redefine SEM_FAILED. Fix formatting.
- (sem_unlink): Add declaration.
- * include/cygwin/version.h: Bump API minor number.
-
-2007-02-20 Christopher Faylor <me@cgf.cx>
-
- * exceptions.cc (_cygtls::signal_exit): Only call myself.exit when when
- exit_state indicates that we've visited do_exit.
- * sync.h (lock_process::lock_process): Use renamed exit_state -
- ES_PROCESS_LOCKED.
- * winsup.h: Rename ES_MUTO_SET to ES_PROCESS_LOCKED.
-
-2007-02-20 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::bind): Remove printing wrong
- errno in debug output.
-
-2007-02-19 Christopher Faylor <me@cgf.cx>
-
- Remove extraneous whitespace.
- * pinfo.cc (commune_process): Use default argument to lock_process.
- * sigproc.cc: Update copyright.
- * select.cc: Ditto.
-
-2007-02-15 Corinna Vinschen <corinna@vinschen.de>
-
- * posix_ipc.cc (mq_open): Avoid compiler warning. Initialize mqhdr
- before using it in file exists case.
- * include/mqueue.h (mqd_t): Make non-pointer type.
-
-2007-02-15 Corinna Vinschen <corinna@vinschen.de>
-
- * posix_ipc.cc (ipc_mutex_init): Create global object name.
- (ipc_cond_init): Ditto.
- (struct mq_hdr): Add mqh_uname member to store synchronization object
- name.
- (mq_open): Create unique synchronization object name and store in
- mq_hdr->mqh_uname. Use this name in calls to ipc_mutex_init and
- ipc_cond_init.
-
-2007-02-14 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (DLL_OFILES): Add posix_ipc.o.
- * cygwin.din (mq_close): Export.
- (mq_getattr): Export.
- (mq_notify): Export.
- (mq_open): Export.
- (mq_receive): Export.
- (mq_send): Export.
- (mq_setattr): Export.
- (mq_timedreceive): Export.
- (mq_timedsend): Export.
- (mq_unlink): Export.
- * posix_ipc.cc: New file implementing the above functions. Move
- shm_open and shm_unlink from syscalls.cc here.
- * sysconf.cc (sca): Set value of _SC_MQ_OPEN_MAX to MQ_OPEN_MAX,
- _SC_MQ_PRIO_MAX to MQ_PRIO_MAX, _SC_MESSAGE_PASSING to
- _POSIX_MESSAGE_PASSING.
- * include/limits.h (MQ_OPEN_MAX): Define.
- (MQ_PRIO_MAX): Define.
- * include/mqueue.h: New file.
- * include/cygwin/version.h: Bump API minor number.
-
-2007-02-13 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/stdlib.h (valloc): Declare.
- (memalign): Declare.
-
-2007-02-09 Pierre A. Humblet <Pierre.Humblet@ieee.org>
-
- * libc/minires-os-if.c (write_record): Handle DNS_TYPE_SRV and
- some obsolete types.
-
-2007-02-08 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (check_shm): New static function to do path checking
- common to shm_open and shm_unlink. Check for /dev/shm existance.
- (shm_open): Call check_shm.
- (shm_unlink): Ditto.
-
-2007-02-08 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din (shm_open): Export.
- (shm_unlink): Export.
- * syscalls.cc (shm_open): New function.
- (shm_unlink): New function.
- * sysconf.cc (sca): Set value of _SC_SHARED_MEMORY_OBJECTS to
- _POSIX_SHARED_MEMORY_OBJECTS.
- * include/cygwin/version.h: Bump API minor number.
- * include/sys/mman.h (shm_open): Add prototype.
- (shm_unlink): Ditto.
-
-2007-02-08 Christopher Faylor <me@cgf.cx>
- Corinna Vinschen <corinna@vinschen.de>
-
- * cygmalloc.h (__set_ENOMEM): Declare.
- (MALLOC_FAILURE_ACTION): Call __set_ENOMEM.
- * malloc_wrapper.cc (malloc) Remove setting errno here.
- (realloc): Ditto.
- (calloc): Ditto.
- (memalign): Ditto.
- (valloc): Ditto.
- (posix_memalign): Save and restore errno.
-
-2007-02-07 Corinna Vinschen <corinna@vinschen.de>
-
- * cygmalloc.h (MALLOC_FAILURE_ACTION): Move to correct #if branch.
-
-2007-02-07 Corinna Vinschen <corinna@vinschen.de>
-
- * cygmalloc.h (MALLOC_FAILURE_ACTION): Define empty.
- * cygwin.din (posix_madvise): Export.
- (posix_memalign): Export.
- * fhandler.cc (fhandler_base::fpathconf): Return useful values in
- _PC_VDISABLE, _PC_SYNC_IO and _PC_SYMLINK_MAX cases.
- * malloc_wrapper.cc (malloc): Set errno here since it's not set in
- dlmalloc.c anymore.
- (realloc): Ditto.
- (calloc): Ditto.
- (memalign): Ditto.
- (valloc): Ditto.
- (posix_memalign): New function.
- * mmap.cc (posix_madvise): New function.
- * sysconf.cc (get_open_max): New function.
- (get_page_size): Ditto.
- (get_nproc_values): Ditto.
- (get_avphys): Ditto.
- (sc_type): New type.
- (sca): New array to map _SC_xxx options to sysconf return values.
- (sysconf): Reimplement using sca array.
- * include/limits.h: Add all missing values as defined by SUSv3.
- * include/pthread.h (PTHREAD_DESTRUCTOR_ITERATIONS): Move definition
- to sys/limits.h.
- (PTHREAD_KEYS_MAX): Ditto.
- * include/semaphore.h (SEM_VALUE_MAX): Ditto.
- * include/cygwin/stdlib.h (posix_memalign): Declare.
- * include/cygwin/version.h: Bump API minor number.
- * include/sys/mman.h: Add posix_madvise flags.
- (posix_madvise): Declare.
- * include/sys/termios.h (_POSIX_VDISABLE): Move definition to
- sys/limits.h.
-
-2007-02-05 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_serial.cc (fhandler_serial::tcsetattr): Add support for
- baud rates up to 3000000 baud. Add missing 128K and 256K cases.
- (fhandler_serial::tcgetattr): Ditto.
- * include/sys/termios.h: Add baud rate definitions from B460800 up to
- B3000000.
-
-2007-02-02 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (unlink_nt): Add missing assignment in case NtClose fails.
-
-2007-02-01 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (ga_dup): New function, taken from ga_clone with v4-in-v6
- mapping addition.
- (ga_clone): Just call ga_dup from here.
- (ga_duplist): New function to duplicate list of struct addrinfo.
- (ga_echeck): Don't check ai_flags, it already happened in
- cygwin_getaddrinfo.
- (cygwin_freeaddrinfo): Always call ipv4_freeaddrinfo.
- (cygwin_getaddrinfo): Use new wincap.supports_all_posix_ai_flags
- flag rather than wincap.has_gaa_on_link_prefix. Always duplicate
- WinSock's addrinfo list to a self-allocated list. Handle AI_V4MAPPED
- for pre-Vista platforms supporting getaddrinfo.
- * wincap.h (wincapc::supports_all_posix_ai_flags): New element.
- * wincap.cc: Implement above element throughout.
- * include/netdb.h: Note how AI_ADDRCONFIG is not supported pre-Vista.
- Remove superfluous comment.
-
-2007-02-01 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/socket.h: Add IPv6 socket options.
-
-2007-01-31 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (cygwin_getaddrinfo): Fix thinko in AI_ADDRCONFIG handling.
-
-2007-01-31 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (cygwin_getaddrinfo): Check ai_flags for valid values.
- Handle AI_NUMERICSERV. Handle AI_ADDRCONFIG behaviour on Vista.
- * include/netdb.h (AI_NUMERICSERV): Add missing flag.
-
-2007-01-30 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::closedir): Add dir name
- to debug output.
- * syscalls.cc (try_to_bin): Enable code to move file to user specific
- recycler dir to eliminate Vista problem.
- (unlink_nt): Add comment that rename after opening for delete on close
- only fails on XP.
-
-2007-01-30 Corinna Vinschen <corinna@vinschen.de>
-
- * sigproc.cc (child_info::child_info): Set msv_count to non-zero
- value only on systems requiring it.
-
-2007-01-28 Corinna Vinschen <corinna@vinschen.de>
-
- * include/ftw.h: Include sys/cdefs.h.
-
-2007-01-26 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::rmdir): Implement rmdir
- on NT by calling unlink_nt. Check for directory here.
- * syscalls.cc (try_to_bin): Fix buggy debug_printf statement.
- (unlink_nt): Make non-static. Don't use delete-on-close semantics on
- directories. Explain why.
-
-2007-01-24 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (if_nametoindex): This time, really free IP_ADAPTER_ADDRESSES
- memory.
- (if_indextoname): Ditto.
-
-2007-01-24 Corinna Vinschen <corinna@vinschen.de>
-
- * security.h (pop_thread_privilege): Revert to previous state, not
- to token used for impersonation.
-
-2007-01-24 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.h (cygheap_user::deimpersonate): Always RevertToSelf.
-
-2007-01-23 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (gai_errmap): Add EAI_OVERFLOW entry. Fix formatting.
- (cygwin_gai_strerror): Drop using EAI_MAX.
- (w32_to_gai_err): Ditto.
- * include/netdb.h: Define EAI_OVERFLOW. Remove EAI_MAX.
-
-2007-01-23 Corinna Vinschen <corinna@vinschen.de>
-
- * include/netdb.h: Add AI_xxx flags available since Vista.
-
-2007-01-23 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (if_nametoindex): Free IP_ADAPTER_ADDRESSES memory.
- (if_indextoname): Ditto.
- (if_nameindex): Ditto. Remove duplicate indexed entries in result.
-
-2007-01-21 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (WSAIoctl): Define.
- (SendARP): Define.
- * cygwin.din: Export if_freenameindex, if_indextoname, if_nameindex and
- if_nametoindex.
- * fhandler_procnet.cc: Drop including wchar.h. Drop definitions of
- GAA_FLAG_INCLUDE_ALL_INTERFACES, IP_ADAPTER_UNICAST_ADDRESS_VISTA.
- (fhandler_procnet::exists): Check for has_gaa_prefixes. Call
- get_adapters_addresses here.
- (fhandler_procnet::readdir): Ditto.
- (prefix): Move to net.cc.
- (fhandler_procnet::fill_filebuf): Call get_adapters_addresses here.
- Simplify allocation. Use AdapterName rather than FriendlyName as
- interface name. Use IfIndex if available, Ipv6IfIndex otherwise.
- (in6_are_prefix_equal): Move to net.cc.
- * fhandler_socket.cc: Define old SIOCGxxx values.
- (CONV_OLD_TO_NEW_SIO): Convert old SIOCGxxx value to new one.
- (struct __old_ifreq): Define old struct ifreq.
- (fhandler_socket::ioctl): Handle old SIOCGxxx values. Handle new
- SIOCGIFFRNDLYNAM command. Simplify copying ifreq data to user space.
- Call get_ifconf with additional SOCKET parameter.
- * net.cc (IP_ADAPTER_UNICAST_ADDRESS_LH): Define.
- (IP_ADAPTER_ADDRESSES_LH): Define.
- (SIO_GET_INTERFACE_LIST): Define.
- (sockaddr_in6_old): Define.
- (sockaddr_gen): Define.
- (INTERFACE_INFO): Define.
- (IN_LOOPBACK): Define.
- (in_are_prefix_equal): New static function.
- (ip_addr_prefix): New function, replaces prefix function, add AF_INET
- handling.
- (GAA_FLAG_INCLUDE_ALL_INTERFACES): Define.
- (get_adapters_addresses): New function.
- (WS_IFF_xxx): Define Winsock interface flag values.
- (convert_ifr_flags): New function to convert Winsock interface flag
- values to Cygwin interface flag values.
- (get_xp_ifconf): New get_ifconf implementation for XP SP1 and above.
- (get_2k_ifconf): Fix interface index. Fix formatting.
- (get_nt_ifconf): Fix formatting.
- (get_95_ifconf): Ditto.
- (get_ifconf): Take additional SOCKET parameter. Call get_xp_ifconf
- on XP SP1 and above.
- (if_nametoindex): New function.
- (if_indextoname): New function.
- (if_nameindex): New function.
- (if_freenameindex): New function.
- (in6_are_prefix_equal): Moved here from fhandler_procnet.cc.
- * wincap.cc (wincap_xp): Define has_gaa_prefixes as true by default.
- (wincapc::init): Assume has_osversioninfoex by default. Call
- GetVersionEx with OSVERSIONINFOEX first. Call with OSVERSIONINFO only
- if that fails. Simplify NT4 case and try to avoid strcmp. Check XP
- Service Pack using version.wServicePackMajor to avoid strcmp.
- * include/asm/socket.h (SIOCGIFFRNDLYNAM): Define.
- * include/cygwin/if.h: Fix formatting.
- (IFF_POINTTOPOINT): Define.
- (IFF_NOARP): Define.
- (IFF_LOWER_UP): Define.
- (IFF_DORMANT): Define.
- (struct if_nameindex): Define.
- (IFRF_FRIENDLYNAMESIZ): Define.
- (struct ifreq_frndlyname): Define.
- (IFNAMSIZ): Redefine as 44.
- (IF_NAMESIZE): Define.
- (struct ifreq): Redefine ifru_flags as int. Define ifru_data. Pad size
- to sizeof sockaddr_in6 for further extensions.
- (ifr_data): Define.
- (ifr_frndlyname): Define.
- (if_nametoindex): Declare.
- (if_indextoname): Declare.
- (if_nameindex): Declare.
- (if_freenameindex): Declare.
- * include/cygwin/version.h: Bump API minor number.
- (CYGWIN_VERSION_CHECK_FOR_OLD_IFREQ): Define check for old vs. new
- ifreq structure.
-
-2007-01-18 Corinna Vinschen <corinna@vinschen.de>
-
- * spawn.cc (spawn_guts): Don't set cwd for non-Cygwin child processes
- on NT to allow starting them in virtual directories.
-
-2007-01-18 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (list::hash): Fix type to __ino64_t.
- (list::get_hash): Ditto.
- (list::set): Add struct stat parameter. Use that instead of calling
- fstat.
- (map::get_list_by_fd): Ditto.
- (map::add_list): Ditto.
- (mmap_is_attached_or_noreserve): Call get_list_by_fd appropriately.
- (mmap_worker): Add pameters for map list and file stat information.
- Propagate to called functions.
- (mmap64): Use fstat on files early. Replace call to GetFileSize.
- Call get_list_by_fd and mmap_worker appropriately.
-
-2007-01-18 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_procnet.cc: Drop declaration of htonl and ntohs. Include
- asm/byteorder.h instead.
-
-2007-01-18 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/in6.h: Drop inclusion of asm/byteorder.h.
- * fhandler_procnet.cc: Declare htonl and ntohs here.
-
-2007-01-17 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (DLL_OFILES): Add fhandler_procnet.o.
- * autoload.cc (GetAdaptersAddresses): Define.
- * devices.h (FH_PROCNET): Define new device.
- * devices.in (dev_procnet_storage): Add "/proc/net" entry.
- * devices.cc: Regenerate.
- * dir.cc (readdir_worker): Use isproc_dev macro.
- * dtable.cc (build_fh_pc): Add FH_PROCNET.
- * fhandler.h (class fhandler_procnet): New class.
- * fhandler_proc.cc: Add "net" subdirectory handling.
- * fhandler_procnet.cc: New file handling "/proc/net" directory.
- * path.cc (isvirtual_dev): Move to path.h.
- * path.h (isproc_dev): New macro to identify /proc files by device.
- (isvirtual_dev): Moved here. Define using isproc_dev.
- * syscalls.cc (unlink): Use isproc_dev macro.
- * wincap.h (wincapc::has_gaa_prefixes): New element.
- (wincapc::has_gaa_on_link_prefix): New element.
- * wincap.cc: Implement above elements throughout.
- (wincapc::init): Check XP for service pack and set has_gaa_prefixes
- appropriately.
- * include/cygwin/in6.h: Include asm/byteorder.h.
-
-2007-01-17 Corinna Vinschen <corinna@vinschen.de>
-
- * include/asm/socket.h (SIOGIFINDEX): Define.
-
-2007-01-17 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (MapView9x): Note possible uselessness of retrying.
- (MapViewNT): Ditto.
- (mmap64): Fix pre-reservation to work for non NULL, non MAP_FIXED.
-
-2007-01-16 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (RtlAnsiStringToUnicodeString): Define.
- (RtlOemStringToUnicodeString): Define.
- * ntdll.h (struct _RTL_USER_PROCESS_PARAMETERS): Define.
- (struct _PEB): Redefine with a bit of content.
- (RtlAnsiStringToUnicodeString): Declare.
- (RtlOemStringToUnicodeString): Declare.
- * path.cc: Include ntdll.h.
- (_upp): New global variable pointing to user process parameter block.
- (get_user_proc_parms): New static function to retrieve user process
- parameter block.
- (close_user_proc_parms_cwd_handle): New function to close handle to
- current working directory in user process parameter block.
- (cwdstuff::init): Drop redundant declaration of dynamically_loaded.
- Set current dir only on 9x. Call close_user_proc_parms_cwd_handle
- on NT instead.
- (cwdstuff::keep_in_sync): Only on 9x.
- (cwdstuff::set): Keep behaviour on 9x. On NT write cwd path into user
- process parameter block and set cwd handle to NULL. Fix comments to
- reflect new behaviour.
-
-2007-01-16 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::ioctl): Handle SIOCGIFINDEX.
- * net.cc (get_2k_ifconf): Ditto.
- (get_nt_ifconf): Fake SIOCGIFINDEX.
- (get_95_ifconf): Ditto.
- (get_ifconf): Handle SIOCGIFINDEX. Fake it for loopback on systems
- not supporting IP Helper Lib.
- * include/asm/socket.h (SIOCGIFINDEX): Define.
- * include/cygwin/if.h (struct ifreq): Add member for interface index.
- (ifr_ifindex): Define.
-
-2007-01-16 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/in6.h (struct ipv6_mreq): Change type of interface
- member to uint32_t.
- (struct in6_pktinfo): Ditto.
-
-2007-01-16 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/in.h (struct ip_mreq_source): Define.
- (struct ip_msfilter): Define.
- (IP_MSFILTER_SIZE): Define.
- (struct in_pktinfo): Define.
- (struct group_req): Define.
- (struct group_source_req): Define.
- (struct group_filter): Define.
- (GROUP_FILTER_SIZE): Define.
- (INADDR_ALLRTRS_GROUP): Define.
- * include/cygwin/socket.h: Define protocol agnostic multicast options.
-
-2007-01-15 Corinna Vinschen <corinna@vinschen.de>
-
- * CYGWIN_LICENSE: Fix web pages and contact information.
-
-2007-01-15 Corinna Vinschen <corinna@vinschen.de>
-
- * ntdll.h: Adjust status definitions.
-
-2007-01-15 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.cc (cygheap_init): Add TODO comment.
-
-2007-01-15 Corinna Vinschen <corinna@vinschen.de>
-
- * ntdll.h (STATUS_SHARING_VIOLATION): Define.
-
-2007-01-13 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (unlink_nt): Don't move files to recycle bin which are
- not in use.
-
-2007-01-13 Christopher Faylor <me@cgf.cx>
-
- * glob.cc: Update copyright notice with latest from FreeBSD.
- (glob0): Use correct type for c variable to propagate previously
- detected protection.
-
-2007-01-12 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.cc (_csbrk): Fix off-by-one error.
- * cygwin.sc: Give .cygheap a minimum size of 512K.
-
-2007-01-12 Christopher Faylor <me@cgf.cx>
-
- * external.cc (sync_winenv): Use cur_environ () rather than
- __cygwin_environ.
-
-2007-01-12 Corinna Vinschen <corinna@vinschen.de>
-
- * fork.cc (child_copy): Add missing Windows PID in debug output.
-
-2007-01-12 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc: Update copyright.
-
-2007-01-10 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (mmap64): Pre-Reserve space for the whole mapping to get a
- useful, valid address before the actual mappings take place.
- Fix typo in comment.
-
-2007-01-10 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (sync): Use b_drive for B: drive (Thanks to Howard Chu).
-
-2007-01-09 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (getpagesize): Change condition for clarity.
- (getsystempagesize): Ditto.
-
-2007-01-09 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc: Do bookkeeping in 4K pages, rather than in 64K chunks.
-
-2007-01-07 Corinna Vinschen <corinna@vinschen.de>
-
- * security.h (setacl): Add parameter for writability flag.
- * sec_acl.cc (setacl): Ditto. Set to true if any ACE with write
- permissions is created.
- * fhandler_disk_file.cc (fhandler_disk_file::facl): Reset
- FILE_ATTRIBUTE_READONLY if ACL contains an ACE with write permissions.
-
-2007-01-05 Corinna Vinschen <corinna@vinschen.de>
-
- * include/strings.h: Don't include string.h. Only declare functions
- according to SUSv3.
-
-2007-01-04 Corinna Vinschen <corinna@vinschen.de>
-
- (get_ifconf): Set MTU for loopback to more correct value.
-
-2007-01-04 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::ioctl): Don't fake results
- for SIOCGIFFLAGS here. Call get_ifconf instead.
- * net.cc (get_2k_ifconf): Clean up code to generate interface name.
- Handle SIOCGIFFLAGS here.
- (get_nt_ifconf): Fake SIOCGIFFLAGS here.
- (get_95_ifconf): Ditto.
- (get_ifconf): Don't fake loopback on systems with IP Helper Lib.
- Set MTU for loopback to a more "modern" value.
-
-2007-01-04 Brian Ford <Brian.Ford@FlightSafety.com>
- Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (PREFERRED_IO_BLKSIZE): Define as 64K.
- * fhandler.cc (fhandler_base::fstat): Set st_blksize to
- PREFERRED_IO_BLKSIZE.
- * fhandler_disk_file.cc (fhandler_base::fstat_helper): Ditto.
- * fhandler_mailslot.cc (fhandler_mailslot::fstat): Ditto.
- * fhandler_raw.cc (fhandler_dev_raw::fstat): Ditto.
-
-2007-01-01 Christopher Faylor <me@cgf.cx>
-
- * spawn.cc (spawn_guts): Don't expect synchronization from a non-cygwin
- _P_NOWAIT process.
diff --git a/winsup/cygwin/ChangeLog-2008 b/winsup/cygwin/ChangeLog-2008
deleted file mode 100644
index 313830261..000000000
--- a/winsup/cygwin/ChangeLog-2008
+++ /dev/null
@@ -1,3341 +0,0 @@
-2008-12-31 Christopher Faylor <me+cygwin@cgf.cx>
-
- * include/cygwin/version.h: Bump CYGWIN_VERSION_API_MINOR to 191.
-
-2008-12-31 Christopher Faylor <me+cygwin@cgf.cx>
-
- * glob_pattern_p.cc: New file.
- * Makefile.in (DLL_OFILES): Add glob_pattern_p.o.
- * glob.h: Add declaration for glob_pattern_p.
-
- * pinfo.cc (pinfo::thisproc): Remove __stdcall attribute.
-
-2008-12-30 Christopher Faylor <me+cygwin@cgf.cx>
-
- * include/bits/wordsize.h: New linux-compatibility header.
-
-2008-12-30 Christopher Faylor <me+cygwin@cgf.cx>
-
- * exceptions.cc (try_to_debug): Avoid creating a huge buffer on the
- stack.
-
-2008-12-25 Christopher Faylor <me+cygwin@cgf.cx>
-
- * mount.cc: Change comment.
- (smb_extended_info): Move here from path.cc.
- (fs_info::update): Ditto.
- (mount_info::create_root_entry): Delay conversion to slashes and use
- passed in buffer to figure out fs type.
- * path.cc (smb_extended_info): Move.
- (fs_info::update): Ditto.
- * mount.h: New file. Move mount information here.
- * path.h: (fs_info::update): Move.
- * shared_info.h (mount_item): Ditto.
-
-2008-12-24 Christopher Faylor <me+cygwin@cgf.cx>
-
- * path.cc (symlink_info::check_shortcut): Ensure that symlink handle is
- closed on successful return.
-
-2008-12-23 Christopher Faylor <me+cygwin@cgf.cx>
-
- * fhandler.h (fhandler_base_setup_overlapped): Add new argument.
- (fhandler_base::get_overlapped_buffer): Declare new function.
- (fhandler_base::set_overlapped): Ditto.
- (fhandler_pipe::overlapped): New variable.
- (fhandler_pipe::get_overlapped): Rework to return contents of
- overlapped variable.
- (fhandler_pipe::set_overlapped): Set overlapped variable based on
- argument.
- (fhandler_fifo::get_overlapped_buffer): Return pointer to io_status.
- * fhandler.cc (handler_base::setup_overlapped): Set to overlapped
- pointer to NULL if new doit parameter is false. Otherwise set up
- overlapped event as usual.
- (fhandler_base::wait_overlapped): Return inres if this isn't an
- overlapped operation.
- (fhandler_base::read_overlapped): Remove inappropriate asserts.
- * pipe.cc (fhandler_pipe::fhandler_pipe): Zero overlapped element.
- (struct pipesync): Delete.
- (getov_result): Ditto.
- (pipe_handler): Ditto.
- (pipesync::pipesync): Ditto.
- (fhandler_pipe::init): Don't set up pipesync thread. Just pass
- opened_properly flag along to overlapped setup.
-
-2008-12-22 Christopher Faylor <me+cygwin@cgf.cx>
-
- * pipe.cc (getov_result): Minor cleanup.
-
-2008-12-20 Christopher Faylor <me+cygwin@cgf.cx>
-
- * pipe.cc (getov_result): Add parameters to facilitate better EOF
- checking.
- (pipe_handler): Pass extra arguments to getov_result.
-
-2008-12-20 Christopher Faylor <me+cygwin@cgf.cx>
-
- * fhandler.cc (fhandler_base::wait_overlapped): Reorganize to eliminate
- gotos and to hopefully eliminate one race when a signal is detected or
- there is a WFMO error.
-
-2008-12-20 Christopher Faylor <me+cygwin@cgf.cx>
-
- * pinfo.h (pinfo::thisproc): Declare. Rename from set_myself.
- * pinfo.cc (pinfo::thisproc): Define. Rename from set_myself. Set
- procinfo to NULL to avoid confusing subsequent init.
- (pinfo_init): Accommodate set_myself -> pinfo::thisproc rename.
- * dcrt0.cc (child_info_fork::handle_fork): Ditto.
- (child_info_spawn::handle_spawn): Ditto.
-
-2008-12-20 Corinna Vinschen <corinna@vinschen.de>
-
- * pwdgrp.h (pwdgrp::refresh): Fix indentation.
- * uinfo.cc (pwdgrp::load): Open file synchronized to avoid truncated
- read. Drop local variable off.
-
-2008-12-19 Christopher Faylor <me+cygwin@cgf.cx>
-
- * pinfo.cc (pinfo_basic): New class.
- (pinfo_basic::pinfo_basic): Define constructor for new class.
- (myself): Initialize from myself_initial.
- (set_myself): Set pid and progname from already myself_initial.
- * strace.cc (strace::strace): Split apart strace::hello. Send
- notification to strace as early as possible.
- (strace::hello): Just send clause which describes the current process.
- This can now be preceded by early initialization strace output.
- * include/sys/strace.h (strace::strace): Declare new constructor.
-
-2008-12-19 Christian Franke <franke@computer.org>
-
- * fhandler_registry.cc (perf_data_files): New table.
- (PERF_DATA_FILE_COUNT): New constant.
- (fhandler_registry::exists): Add check for HKEY_PERFORMANCE_DATA
- value names.
- (fhandler_registry::fstat): For HKEY_PERFORMANCE_DATA, return
- default values only.
- (fhandler_registry::readdir): For HKEY_PERFORMANCE_DATA, list
- names from perf_data_files only.
- (fhandler_registry::fill_filebuf): Use larger buffer to speed up
- access to HKEY_PERFORMANCE_DATA values. Remove check for possible
- subkey. Add RegCloseKey ().
- (open_key): Replace goto by break, remove label. Do not try to
- open subkey of HKEY_PERFORMANCE_DATA. Add missing RegCloseKey ()
- after open subkey error.
-
-2008-12-19 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (path_conv::check): Handle incoming DOS paths non-POSIXy,
- always case-insensitive, always ignoring ACLs.
-
-2008-12-18 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc: Set 4th parameter of NtQueryDirectoryFile to
- NULL throughout.
- (fhandler_disk_file::facl): Fix a condition so that fstat_by_handle
- is actually used.
- (fhandler_disk_file::readdir): Don't print debug message on a simple
- STATUS_NO_MORE_FILES status code.
-
-2008-12-18 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (symlin_info::check): Set 4th parameter of
- NtQueryDirectoryFile to NULL instead of 0 since it's a pointer.
- Simplify label and break from loop handling in symlink evaluation
- conditional expression. Drop a now useless break statement. Fix
- behaviour when searching for `foo' and then finding a `foo.lnk'
- which is no shortcut.
-
-2008-12-16 Christian Franke <franke@computer.org>
-
- * fhandler_registry.cc (DEFAULT_VALUE_NAME): Remove constant.
- (encode_regname): Encode empty (default) name to "@".
- Encode "@" to "%40". Change error return to -1.
- (decode_regname): Decode "@" to empty name. Decode "%40" to "@".
- (fhandler_registry::exists): Skip check for keys if name is empty.
- Remove check for DEFAULT_VALUE_NAME, now handled by decode_regname ().
- (fhandler_registry::readdir): Remove check for empty name, now
- handled by encode_regname ().
- (fhandler_registry::open): Remove check for DEFAULT_VALUE_NAME.
- (fhandler_registry::open_key): Fail with ENOENT if key name is empty.
-
-2008-12-15 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (gen_full_path_at): Use isabspath instead of isdirsep
- to recognize absolute path.
-
-2008-12-15 Corinna Vinschen <corinna@vinschen.de>
-
- * sec_auth.cc (open_local_policy): Set lsa handle to
- INVALID_HANDLE_VALUE when LsaOpenPolicy fails. Explain why.
-
-2008-12-15 Corinna Vinschen <corinna@vinschen.de>
-
- * setlsapwd.cc (setlsapwd): Simplify code. Only try to call cygserver
- if opening local policy fails. Don't treat removing non-existant
- private data as error.
-
-2008-12-15 Corinna Vinschen <corinna@vinschen.de>
-
- * setlsapwd.cc (setlsapwd): Explicitely erase password buffer content
- after usage.
-
-2008-12-15 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_registry.cc (fhandler_registry::exists): Handle EACCES.
- (fhandler_registry::open): Ditto.
-
-2008-12-15 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din: Export fgetwc, fgetws, fputwc, fputws, fwide, getwc,
- getwchar, putwc, putwchar, ungetwc.
- * posix.sgml: Move above functions (add missing) into "implemented
- SUSv3" section.
- * include/cygwin/version.h: Bump api minor number.
-
-2008-12-15 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (class fhandler_registry): Declare dup method.
- * fhandler_registry.cc (fhandler_registry::exists): Fix missing
- parenthesis.
- (fhandler_registry::dup): New method.
-
-2008-12-14 Christopher Faylor <me+cygwin@cgf.cx>
-
- * fhandler_disk_file.cc (readdir_get_ino): Don't complain about MS-DOS
- paths since the function could be fed one by an internal call.
-
-2008-12-13 Christopher Faylor <me+cygwin@cgf.cx>
-
- * cygheap.cc (cygheap_user::~cygheap_user): Remove unneeded if 0'ed
- code.
-
- * fhandler_registry.cc (fhandler_registry::exists): Recode goto as
- if/else to avoid a gcc4 compiler warning.
- (fhandler_registry::open): Ditto. Use one goto rather than two.
-
- * gentls_offsets: Fix compiler warning in generated output.
- * tlsoffsets.h: Regenerate.
-
- * mount.cc (fillout_mntent): slashify native paths returned via
- getmntent.
-
-2008-12-08 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * resolv.h: #include <netinet/in.h> for sockaddr_in typedef.
-
-2008-12-07 Christian Franke <franke@computer.org>
-
- * fhandler_registry.cc (encode_regname): Add Parameter add_val.
- Append "%val" if add_val is set.
- (decode_regname): Remove trailing "%val". Change returncode accordingly.
- (__DIR_hash): New class.
- (d_hash): New macro.
- (key_exists): New function.
- (fhandler_registry::exists): Remove encode of registry name before path
- compare, decode file part of path instead. Skip checks for keys if
- trailing "%val" detected.
- (fhandler_registry::fstat): Change check of return value of
- decode_regname ().
- (fhandler_registry::readdir): Allocate __DIR_hash. Record key names in
- hash table. Append "%val" if key with same name exists. Fix error
- handling of encode_regname (). Set dirent.d_type.
- (fhandler_registry::closedir): Delete __DIR_hash.
- (fhandler_registry::open): Don't open key if trailing "%val" detected
- by decode_regname ().
- (open_key): Ditto.
-
-2008-12-03 Pierre A. Humblet <Pierre.Humblet@ieee.org>
-
- * libc/minires.c (open_sock): Set non blocking and close on exec.
- (res_ninit): Set id pseudo-randomly.
- (res_nsend): Do not set close on exec. Initialize server from id.
- Flush socket. Tighten rules for answer acceptance.
- (res_nmkquery): Update id using current data.
-
-2008-12-02 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_registry.cc (must_encode): Fix condition changed for testing.
-
-2008-12-01 Christian Franke <franke@computer.org>
-
- * fhandler_registry.cc (must_encode): New function.
- (encode_regname): Ditto.
- (decode_regname): Ditto.
- (fhandler_registry::exists): Encode name before path compare.
- (fhandler_registry::fstat): Pass decoded name to win32 registry call.
- (fhandler_registry::readdir): Return encoded name to user.
- (fhandler_registry::open): Store decoded name into value_name.
- (open_key): Pass decoded name to win32 registry call
-
-2008-11-28 Christopher Faylor <me+cygwin@cgf.cx>
-
- * exceptions.c (sigpacket::process): Set tls on return since it is
- assumed to be set to a valid value by the caller.
-
-2008-11-28 Christopher Faylor <me+cygwin@cgf.cx>
-
- * include/cygwin/version.h: Bump api minor number to 189 to flag the
- implementation of dirent.d_type.
-
-2008-11-28 Christopher Faylor <me+cygwin@cgf.cx>
-
- * exceptions.cc (sigpacket::process): Rework previous change. tls
- could still become NULL.
-
-2008-11-28 Christian Franke <franke@computer.org>
-
- * dir.cc (readdir_worker): Initialize dirent.d_type and __d_unused1.
- * fhandler_disk_file.cc (fhandler_disk_file::readdir_helper):
- Set dirent.d_type based on FILE_ATTRIBUTE_*.
- * include/sys/dirent.h: Define _DIRENT_HAVE_D_TYPE (enables DT_*
- declarations).
- (struct dirent): Add d_type. Adjust __d_unused1 size to preserve layout.
-
-2008-11-27 Christopher Faylor <me+cygwin@cgf.cx>
-
- * exceptions.cc (sigpacket::process): Make sure that 'tls' is never
- NULL when used.
-
-2008-11-26 Christopher Faylor <me+cygwin@cgf.cx>
-
- Remove unneeded whitespace throughout.
-
- * fhandler_fifo.cc (fhandler_fifo::open): Rework to cause errno to be
- set to ENXIO when opening a fifo write/nonblocking.
-
- * environ.cc (ucreqenv): Rename to ucenv. Move code from old ucenv
- here and conditionalize it on create_upcaseenv.
- (ucenv): Delete.
- (environ_init): Fix compiler warning by moving create_upcaseenv test to
- ucenv. Don't bother checking for child_proc_info when calling ucenv
- since it is assumed to be NULL at the point where the function is
- called.
-
- * path.cc (symlink_worker): Turn off MS-DOS path warnings when dealing
- with devices since the device handler passes in a translated MS-DOS
- path.
-
- * sec_auth.cc (lsaprivkeyauth): Avoid variable initialization which
- causes a compiler error.
-
- * fhandler_netdrive.cc: Update copyright.
-
-2008-11-26 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (DLL_OFILES): Add setlsapwd.o.
- * cygserver.h (CYGWIN_SERVER_VERSION_API): Bump.
- (request_code_t): Define CYGSERVER_REQUEST_SETPWD request type.
- * cygserver_msg.h (client_request_msg::retval): Use default value of -1
- for retval if msglen is 0.
- * cygserver_sem.h (client_request_sem::retval): Ditto.
- * cygserver_shm.h (client_request_shm::retval): Ditto.
- * cygserver_setpwd.h: New file.
- * external.cc (cygwin_internal): Implement new CW_SET_PRIV_KEY type.
- * sec_auth.cc (open_local_policy): Make externally available.
- Get ACCESS_MASK as argument.
- (create_token): Accommodate change to open_local_policy.
- (lsaauth): Ditto.
- (lsaprivkeyauth): New function fetching token by retrieving
- password stored in Cygwin or Interix LSA private data area and
- calling LogonUser with it.
- * security.h (lsaprivkeyauth): Declare.
- (open_local_policy): Declare.
- * setlsapwd.cc: New file implementing setting LSA private data password
- using LsaStorePrivateData or by calling cygserver if available.
- * syscalls.cc (seteuid32): Add workaround to get the original token
- when switching back to the original privileged user, even if
- setgroups group list is still active. Add long comment to explain why.
- Call lsaprivkeyauth first, only if that fails call lsaauth or
- create_token.
- * include/cygwin/version.h: Bump API minor number.
- * include/sys/cygwin.h (cygwin_getinfo_types): Add CW_SET_PRIV_KEY.
-
-2008-11-21 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_floppy.cc (fhandler_dev_floppy::raw_read): Drop
- initialization of bytes_to_read. Set bytes_to_read to len in
- non-buffered case. Call read_bytes correctly with bytes_to_read
- instead of len.
-
-2008-11-21 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (MapView): Add NT status to debug output.
-
-2008-11-11 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (GetSystemDEPPolicy): Define.
- (GetProcessDEPPolicy): Ditto.
- (SetProcessDEPPolicy): Ditto.
- * dcrt0.cc (disable_dep): New static function.
- (dll_crt0_0): Call disable_dep on platforms requiring it. Add longish
- comment to explain the circumstances.
- * wincap.h (wincaps::ts_has_dep_problem): New element.
- * wincap.cc: Implement above element throughout.
- (wincapc::init): Set ts_has_dep_problem to true on 2008 Terminal
- Servers.
- * winsup.h (WINVER): Set to 0x0601.
-
-2008-11-11 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (mount_info::cygdrive_win32_path): Always upper case
- DOS drive letter to accommodate case sensitivity.
- (cygdrive_getmntent): Ditto.
- * path.cc (path_conv::check): Invalidate wide_path after making path
- relative.
-
-2008-11-11 Corinna Vinschen <corinna@vinschen.de>
-
- * environ.cc (create_upcaseenv): New static variable.
- (renv_arr): New static array to keep track of environment variables
- which have to be always uppercased.
- (idx_arr): Ditto.
- (start_at): Ditto.
- (ucreqenv): New function to uppercase only the environment variables
- from renv_arr.
- (parse_thing): Add "upcaseenv" setting.
- (environ_init): Parse $CYGWIN before doing anything else. Call
- ucreqenv instead of ucenv if CYGWIN=noupcaseenv is set.
-
-2008-11-10 Christopher Faylor <me+cygwin@cgf.cx>
-
- * path.cc (normalize_win32_path): Don't add a trailing '\' if the cwd
- returns a path with a trailing '\'.
-
-2008-11-07 Christopher Faylor <me+cygwin@cgf.cx>
-
- * pthread.cc (pthread_mutex::_unlock): Avoid unlocking a mutex if the
- recursion_counter is already 0.
- (pthread_mutex::_destroy): Don't consider a mutex busy if its
- recursion_counter == 0.
- (pthread_mutex::_fixup_after_fork): Set recursion_counter to 0 to flag
- that we've just forked. Don't reset the owner of this mutex since the
- forkee may think it still owns the mutex. Reinstate initialization of
- win32_obj_id.
-
- * fhandler_floppy.cc (fhandler_dev_floppy::raw_read): Initialize a
- variable to bypass a C++ warning.
-
-2008-11-05 Corinna Vinschen <corinna@vinschen.de>
-
- * environ.cc (environ_init): Avoid evaluating $CYGWIN twice.
-
-2008-10-23 Corinna Vinschen <corinna@vinschen.de>
-
- * wincap.cc (all wincaps): Store in .cygwin_dll_common section same as
- wincap. Add comment to explain why.
-
-2008-10-22 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (GetSystemWindowsDirectoryW): Define.
- * kernel32.cc (GetWindowsDirectoryW): Implement to abstract from
- running under Terminal Services or not.
- (GetWindowsDirectoryA): Ditto.
-
-2008-10-21 Corinna Vinschen <corinna@vinschen.de>
-
- * passwd.cc (pwdgrp::read_passwd): Check if we're called within
- user_shared initialization and ignore myself, if so. Reformat
- conditional expression.
-
-2008-10-20 Corinna Vinschen <corinna@vinschen.de>
-
- * ntdll.h (NtSetAttributesFile): New inline function.
- * fhandler_disk_file.cc (fhandler_disk_file::fchmod): Use
- NtSetAttributesFile.
- * path.cc (symlink_worker): Ditto.
- * syscalls.cc (unlink_nt): Ditto.
- (rename): Omit FILE_SHARE_DELETE when opening files on Samba. Add
- comment to explain why.
-
-2008-10-17 Corinna Vinschen <corinna@vinschen.de>
-
- * dtable.cc (dtable::get_debugger_info): Call SetStdHandle
- for the newly opened handle. Explain why.
- (dtable::stdio_init): Don't duplicate standard error handle
- when stderr has already been created under debugger control.
-
-2008-10-13 Corinna Vinschen <corinna@vinschen.de>
-
- * sec_acl.cc (setacl): Align standard owner and group permissions
- with alloc_sd. Strip FILE_READ_ATTRIBUTES fromn setting
- FILE_GENERIC_EXECUTE permissions same as in alloc_sd.
- * security.cc (alloc_sd): Reformat expression. Strip EA permission
- bits from owner_deny and group_deny computation.
-
-2008-10-09 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_base::fstat_helper): Check
- for executable suffixes here in case we're on a file system
- not supporting permission.
- * path.cc (path_conv::check): Drop check for executable suffixes.
-
-2008-10-09 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_floppy.cc (fhandler_dev_floppy::raw_read): Keep track of
- current position in non-buffered case, too.
-
-2008-10-09 Corinna Vinschen <corinna@vinschen.de>
-
- * grp.cc (pwdgrp::read_group): Generate more speaking group name
- if passwd gid exists under different gid in /etc/group.
-
-2008-10-09 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (path_conv::is_binary): Always check for GetBinaryType.
- * syscalls.cc (rename): Fix test for just changing case of name on
- case insensitive filesystems.
-
-2008-10-09 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (symlink_info::check_shortcut): Don't check for executability
- here.
- (symlink_info::check_sysfile): Ditto.
-
-2008-10-08 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (path_conv::check): Only assume executability by suffix
- on file systems not supporting permissions.
-
-2008-10-07 Christopher Faylor <me+cygwin@cgf.cx>
-
- * pthread.cc (pthread_create): Very minor formatting change.
- * timer.cc (timer_thread): Ensure that any created thread defaults to
- detached state.
-
-2008-10-06 Christopher Faylor <me+cygwin@cgf.cx>
-
- * cygtls.h (_cygtls::initialized): Remove bogus stack check which would
- crash when checking the current thread from the current thread.
- * tlsoffsets.h: Regenerate.
-
-2008-10-05 Christopher Faylor <me+cygwin@cgf.cx>
-
- * dcrt0.cc (dll_crt0_0): Don't initialize signals early when
- dynamically loaded.
- (dll_crt0_1): Wait until this phase to initialize signals when
- dynamically loaded.
-
-2008-09-29 Christopher Faylor <me+cygwin@cgf.cx>
-
- * thread.cc (pthread_mutex::_fixup_after_fork): Reinstate DEBUGGING
- conditional.
-
-2008-09-29 Christopher Faylor <me+cygwin@cgf.cx>
-
- * thread.cc (pthread_mutex::_fixup_after_fork): Just reset lock to
- pristine state after fork. Don't recreate a mutex since it may not
- actually be needed.
-
-2008-09-29 Corinna Vinschen <corinna@vinschen.de>
-
- * flock.cc (inode_t::get_all_locks_list): Fix typo.
- * posix.sgml: Add cfmakeraw to list of implemented BSD functions.
-
-2008-09-19 Eric Blake <ebb9@byu.net>
-
- * errno.cc (_sys_errlist): Add ECANCELED, ENOTRECOVERABLE,
- EOWNERDEAD.
-
-2008-09-15 Christopher Faylor <me+cygwin@cgf.cx>
-
- * cygtls.h (unionent): Move from net.cc.
- (unionent::struct_type): Move enum here.
- (_local_storage::hostent_buf): Define as unionent.
- (_local_storage::protoent_buf): Ditto.
- (_local_storage::servent_buf): Ditto.
- * net.cc (unionent): Move to cygtls.h.
- (struct_type): Ditto.
- (dup_ent): Define one function per {host,proto,serv}ent type.
- (cygwin_getprotobyname): Simplify dup_ent call. Removed now-unneeded
- return type coercion.
- (cygwin_getprotobynumber): Ditto.
- (cygwin_getservbyname): Ditto.
- (cygwin_getservbyport): Ditto.
- (cygwin_gethostbyname): Ditto.
- (cygwin_gethostbyaddr): Ditto.
- tlsoffsets.h: Regenerate.
-
-2008-09-12 Christopher Faylor <me+cygwin@cgf.cx>
-
- * Makefile.in: Add -c option which is now removed from COMPILE_C*.
- * cygwin.din (cfmakeraw): Export.
- * termios.cc (cfmakeraw): Implement.
- * include/sys/termios.h (cfmakeraw): Declare.
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
-
-2008-09-11 Christopher Faylor <me+cygwin@cgf.cx>
-
- * cygwin.din (sys_sigabbrev): Add this here.
- * dcrt0.cc (__argc,__argv,_check_for_executable): Remove dllexport
- decoration since it is already handled in cygwin.din.
- * errno.cc (_sys_errlist): Ditto.
- * strsig.cc (sys_sigabbrev): Ditto.
- * include/cygwin/signal.h: Protect use of dllimport when
- __INSIDE_CYGWIN__.
- * libc/getopt.c: Revert previous changes. Define __INSIDE_CYGWIN__.
-
-2008-09-11 Christopher Faylor <me+cygwin@cgf.cx>
-
- * localtime.cc (increment_overflow): Mark as non-inline to prevent
- compiler from complaining about the very thing we're trying to test.
- * ntea.cc (read_ea): Reorganize to avoid a new compiler warning/error.
- * sched.cc (sched_rr_get_interval): Ditto.
- * select.cc (peek_serial): Ditto.
- * libc/rexec.cc (ruserpass): Ditto.
- * posix_ipc.cc (ipc_names): Make static to avoid a compiler warning
- (and it's the right thing to do anyway).
-
-2008-09-11 Christopher Faylor <me+cygwin@cgf.cx>
-
- * net.cc (in6addr_any, in6addr_loopback): Add appropriate number of
- braces around initializer.
- (dup_ent): Try harder to coerce the first argument to deal with more
- stringent compiler.
- (get_2k_ifs): Remove extraneous typedef.
- (get_2k_ifs): Reorganize expression to avoid a compiler warning.
- (get_xp_ifs): Ditto.
- (get_nt_ifs): Ditto.
-
-2008-09-11 Christopher Faylor <me+cygwin@cgf.cx>
-
- * fhandler.h (fhandler_pipe::raw_read): Remove __stdcall decoration.
- * pipe.cc (fhandler_pipe::raw_read): Ditto.
-
-2008-09-11 Christopher Faylor <me+cygwin@cgf.cx>
-
- * cygheap.cc (creturn): Reorganize to avoid a new compiler
- warning/error.
- * dtable.cc (handle_to_fn): Ditto.
- * fhandler_console.cc (fhandler_console::read): Ditto.
- (fhandler_console::scroll_screen): Ditto.
- (dev_console::set_color): Ditto.
- * fhandler_dsp.cc (fhandler_dev_dsp::write): Ditto.
- (fhandler_dev_dsp::read): Ditto.
- * fhandler_tape.cc (mtinfo_drive::get_status): Ditto.
- * hookapi.cc (find_first_notloaded_dll): Ditto.
- * mmap.cc (msync): Ditto.
- * pipe.cc (pipesync::pipesync): Ditto.
- * sec_acl.cc (getace): Ditto.
- * sec_auth.cc (create_token): Ditto.
- (lsaauth): Ditto.
- * select.cc (peek_pipe): Ditto.
- * spawn.cc (av::fixup): Ditto.
- * syscalls.cc (popen): Ditto.
- * tty.cc (tty::init_session): Ditto.
- * uinfo.cc (pwdgrp::load): Ditto.
- * fhandler.cc (fhandler_base::setup_overlapped): Ditto.
- (fhandler_base::wait_overlapped): Rename second use of res variable to
- wres or errors are not returned correctly.
- * dcrt0.cc: Remove obsolete variable.
- * dll_init.cc (release_upto): Fix typo involving incorrect use of '|'.
- * fhandler_disk_file.cc (fhandler_base::fstat_by_handle): Avoid a
- compiler warning regarding coercing type-punned variables.
- (fhandler_base::fstat_by_name): Ditto.
- * fhandler_fifo.cc (fhandler_fifo::open_nonserver): Fix = vs. == typo.
- (fhandler_fifo::wait): Add all conditions to switch statement to avoid
- a compiler warning.
- * fhandler_process.cc: Avoid unneeded initialization of variables to
- zero.
- * fhandler_socket.cc (fhandler_socket::listen): Add braces around
- initializer.
- * flock.cc (inode_t::get_all_locks_list): Reorganize to avoid a
- compiler warning. Fix problem with EWOULDBLOCK error return.
- * path.cc (GUID_shortcut): Use braces around struct initializer.
- (cygwin_conv_path): Reorganize to avoid a compiler warning.
- * random.cc (dummy): Mark variable as volatile to avoid a "used
- uninitialized" warning.
- * libc/getopt.c: Mark some variables as dllexport although gcc doesn't
- seem to do the right thing with them.
- * libc/minires-os-if.c (get_registry_dns_items): Coerce some function
- arguments to avoid a compiler warning.
-
-2008-08-27 Christopher Faylor <me+cygwin@cgf.cx>
-
- * fhandler_tty.cc (close_maybe): Check for both types of invalid handle
- before attempting CloseHandle.
- (fhandler_pty_master::setup): Only set inheritance on pty handles, not
- tty handles.
-
-2008-08-26 Christopher Faylor <me+cygwin@cgf.cx>
-
- * shared_info.h (shared_info::create_root_entry): Remove extraneous
- mount_info:: from declaration.
-
-2008-08-26 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (class fhandler_pipe): Rename read and write
- declarations to raw_read and raw_write.
- * pipe.cc (fhandler_pipe::raw_read): Rename from read.
- (fhandler_pipe::raw_write): Rename from write.
-
-2008-08-21 Christopher Faylor <me+cygwin@cgf.cx>
-
- * fhandler.cc (fhandler_base::wait_overlapped): Reorganize again to
- accommodate what appears to be an MSDN hint about not resetting the
- overlapped event prior to calling GetOverlappedResult.
-
-2008-08-20 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (symlink_info::check_shortcut): If file can't be opened,
- treat it as non-symlink rather than generating an EIO error.
- (symlink_info::check_sysfile): Ditto.
-
-2008-08-19 Christopher Faylor <me+cygwin@cgf.cx>
-
- * fhandler.cc (fhandler_base::wait_overlapped): Always assume that
- bytes will be non-NULL. Distinguish input result from result derived
- from WFMO and GetOverlappedResult or res can never be -1. Only raise
- SIGPIPE when writing.
- * fhandler.h (fhandler_base::wait_overlapped): Pass first argument by
- value.
- * fhandler_fifo.cc (fhandler_fifo::wait): Pass in dummy byte count to
- wait_overlapped.
- * pipe.cc (DEFAULT_PIPEBUFSIZE): Define to 65536 explicitly.
-
-2008-08-19 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::mkdir): Drop fattr variable
- and use FILE_ATTRIBUTE_DIRECTORY directly in call to NtCreateFile.
- * posix_ipc.cc (ipc_mutex_init): Fix format string when creating IPC
- object name.
- (ipc_cond_init): Ditto.
- * security.cc (alloc_sd): Add parentheses to fix setting initial
- owner_allow value.
-
-2008-08-18 Christopher Faylor <me+cygwin@cgf.cx>
-
- * fhandler.cc (fhandler_base::wait_overlapped): Don't treat
- ERROR_BROKEN_PIPE as a non-error. Do raise SIGPIPE when it is
- detected.
-
-2008-08-15 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (mount_info::get_mounts_here): Don't subtract 2 from
- Length if it's 0 anyway.
-
-2008-08-15 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (mount_info::create_root_entry): Create default cygdrive
- prefix with MOUNT_NOPOSIX flag.
-
-2008-08-15 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (symlink_info::check): Don't use eabuf when trying to open
- file a second time. Call NtOpenFile instead of NtCreateFile in this
- case.
-
-2008-08-14 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::link): Fix linking
- against symlinks.
-
-2008-08-14 Corinna Vinschen <corinna@vinschen.de>
-
- * external.cc (cygwin_internal): Call set_security_attribute with
- additional path_conv argument.
- * fhandler.cc (fhandler_base::open): Ditto.
- * fhandler_disk_file.cc (fhandler_disk_file::fchmod): Never set DOS
- R/O attribute when using ACLs.
- (fhandler_disk_file::mkdir): Ditto. Set
- security descriptor on remote dirs after creating the dir, same as in
- fhandler_base::open.
- * fhandler_socket.cc (fhandler_socket::bind): Ditto for remote AF_LOCAL
- socket files.
- * path.cc (symlink_worker): Ditto. for remote symlinks.
- * security.cc (alloc_sd): Take additional path_conv argument.
- Accommodate throughout. Drop setting FILE_WRITE_EA/FILE_READ_EA
- flags unconditionally (was only necessary for "ntea"). Don't set
- FILE_READ_ATTRIBUTES and FILE_WRITE_ATTRIBUTES unconditionally on
- Samba. Add comment to explain. Drop useless setting of
- STANDARD_RIGHTS_WRITE, it's in FILE_GENERIC_WRITE anyway.
- Remove FILE_READ_ATTRIBUTES bit from FILE_GENERIC_EXECUTE so as not
- to enforce read permissions on Samba.
- (set_security_attribute): Take additional path_conv argument.
- * security.h (set_security_attribute): Change prototype accordingly.
-
-2008-08-13 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (fillout_mntent): Always print noumount option last.
-
-2008-08-13 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (fillout_mntent): Print options as taken in fstab and mount.
-
-2008-08-13 Corinna Vinschen <corinna@vinschen.de>
-
- * dll_init.cc: Throughout convert to use long pathnames.
- * dll_init.h (struct dll): Change name to WCHAR, change operator [] to
- take PWCHAR argument.
-
-2008-08-11 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (rename): If newpath doesn't exist, check if .exe suffix
- in oldpath has been omitted before appending .exe to newpath.
-
-2008-08-09 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_floppy.cc (fhandler_dev_floppy::raw_read): Don't set
- eom_detected when EOF is detected, thus returning 0 instead of
- setting errno to ENOSPC.
-
-2008-08-07 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::open): Use Samba workaround generally
- for all remote filesystems supporting ACLs. Change comment and
- explain why. Refer to the discussion which led to this.
-
-2008-08-05 Brian Dessent <brian@dessent.net>
-
- * config/i386/profile.h (mcount): Mark asms volatile.
-
-2008-08-05 Christopher Faylor <me+cygwin@cgf.cx>
-
- * dll_init.cc (dll_global_dtors): Add an additional test to avoid
- walking the linked list if it is empty.
- (dll_list::detach): Don't set dll_global_dtors_recorded if we aren't
- actually going to record any dlls.
-
-2008-08-04 Christopher Faylor <me+cygwin@cgf.cx>
-
- Changes suggested by Dave Korn.
- * dcrt0.cc (cygwin_exit): Remove (hopefully) extraneous call to
- dll_global_dtors.
- * dll_init.cc (dll_global_dtors): Run destructors in reverse
- dependency/load order.
- * dll_init.h (dll_list): Add dll_global_dtors as a friend.
-
-2008-08-01 Christopher Faylor <me+cygwin@cgf.cx>
-
- * dcrt0.cc (dll_crt0_1): Add a symbol denoting return from call to
- main().
- * exceptions.cc (stack_info::walk): Stop walking the stack when we
- hit _cygwin_exit_return rather than just blindly stopping when PC
- becomes zero.
-
-2008-07-31 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (symlink_info::check): Handle (and explain) a special case
- when accessing files matching DOS device names on SMB shares.
-
-2008-07-31 Corinna Vinschen <corinna@vinschen.de>
-
- * spawn.cc (spawn_guts): Check constructed short pathname for being
- a DOS device name and fall back to long path name, if so.
-
-2008-07-30 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_base::fstat_by_name): Check for
- file systems incapable of handling FileIdBothDirectoryInformation
- correctly.
- (fhandler_disk_file::opendir): Ditto.
- * path.cc (fs_info::update): Always clear at the start.
- Rearrange to make certain tests only on non-Samba, non-NFS remote
- drives.
- Add test for file systems known to be incapable of handling
- FileIdBothDirectoryInformation correctly. Right now that's just
- "UNIXFS".
- * path.h (struct fs_info): Add has_buggy_fileid_dirinfo flag and
- accessor methods.
- (class path_conv): Add has_buggy_fileid_dirinfo method.
-
-2008-07-30 Corinna Vinschen <corinna@vinschen.de>
-
- * sec_auth.cc (extract_nt_dom_user): Return domain and user name as
- WCHAR.
- (cygwin_logon_user): Accommodate above change. Convert password to
- WCHAR and call LogonUserW.
- * external.cc (cygwin_internal): Accommodate above change.
- * security.h (extract_nt_dom_user): Change prototype accordingly.
-
-2008-07-30 Christopher Faylor <me+cygwin@cgf.cx>
-
- * cygwin.din (_getutline): Remove.
- * lib/bsdlib.cc (login): Make argument const as per linux.
- (logout): Ditto.
- * syscalls.cc (getutid): Ditto.
- (getutline): Ditto.
- (pututline): Ditto.
- (getutxent): Add comment mentioning non-thread-safety.
- (getutxid): Ditto.
- (getutxline): Ditto.
- (pututxline): Ditto.
- * sys/utmp.h: Declare arguments to various functions as const as per
- linux. Remove bogus _getutline definition.
-
-2008-07-29 Christopher Faylor <me+cygwin@cgf.cx>
-
- * include/cygwin/version.h: Add comment indicating that current API number
- bump also has another consequence.
-
-2008-07-29 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (DLL_OFILES): Remove v8 regexp files.
- (OBSOLETE_FUNCTIONS): Remove v8 regexp functions.
- (NEW_FUNCTIONS): Remove POSIX regex functions.
- * cygwin.din: Export POSIX regex functions with their correct symbol
- name. Export with posix_ prefix for backward compatibility.
- * syscalls.cc (regfree): Remove ancient fake function.
- * regex/regex.h: Remove renaming regex functions within Cygwin.
- * regexp/*: Remove.
- * include/cygwin/version.h: Bump API minor number.
-
-2008-07-27 Corinna Vinschen <corinna@vinschen.de>
- Christopher Faylor <me+cygwin@cgf.cx>
-
- * dcrt0.cc (dll_crt0_0): Remove calling malloc_init and
- user_shared_initialize_1 from here.
- (dll_crt0_1): Remove dynamically_loaded check. Just call malloc_init
- and user_shared_initialize unconditionally.
- * shared.cc (user_shared_create): Rename from user_shared_initialize.
- (user_shared_initialize): Rename from user_shared_initialize_1. Move
- complete user_shared content initialization code here from
- user_shared_create.
- * syscalls.cc (seteuid32): Remove call to user_shared_initialize_1.
- That is implied by the "true" argument to user_shared_create().
-
-2008-07-27 Christopher Faylor <me+cygwin@cgf.cx>
-
- * mount.cc (mount_info::init): Add location where we're looking for
- fstab to temporary message.
-
- * lib/cygwin_crt0.c (cygwin_crt0): Simplify by eliminating
- accommodations for ancient cygwin DLLs.
- * lib/crt0.h: Include <windows.h> directly since it is needed.
-
-2008-07-27 Christopher Faylor <me+cygwin@cgf.cx>
-
- * shared_info.h (shared_destroy): Declare.
- * shared.cc (shared_destroy): Define new function to destroy shared
- memory regions.
- * init.cc (dll_entry): Call shared_destroy when dll detaches from the
- process.
-
-2008-07-27 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::send_internal): Send never more
- then 64K bytes at once. For blocking sockets, loop until entire data
- has been sent or an error occurs.
- (fhandler_socket::sendto): Drop code which sends on 64K bytes.
- (fhandler_socket::sendmsg): Ditto.
-
-2008-07-26 Christopher Faylor <me+cygwin@cgf.cx>
-
- * fhandler_tty.cc (fhandler_pty_master::setup): Reorganize so that all
- operations for each end of the pipe are grouped together.
-
-2008-07-25 Corinna Vinschen <corinna@vinschen.de>
-
- * dcrt0.cc (dll_crt0_1): Call malloc_init and user_shared_initialize_1
- only in non-dynamically loaded case.
-
-2008-07-25 Corinna Vinschen <corinna@vinschen.de>
-
- * dcrt0.cc (dll_crt0_0): Call malloc_init and user_shared_initialize_1
- here in case we're dynamically loaded. Explain why.
- (dll_crt0_1): Call user_shared_initialize_1 from here.
- * mount.cc (is_native_path): New inline function testing for native
- and long Win32 path prefix.
- (is_unc_share): Remove long WIn32 path prefix test.
- (mount_info::create_root_entry): Use PATH_MAX buffer.
- (mount_info::init): Ditto.
- (mount_info::add_item): Test for is_native_path as well.
- * path.cc (normalize_win32_path): Simplify native path prefix code.
- * shared.cc (user_shared_initialize_1): New function taking user
- shared initialization code relying on malloc and cygtls.
- (user_shared_initialize): Move mountinfo initialization to
- user_shared_initialize_1.
- * shared_info.h (user_shared_initialize_1): Declare.
- * syscalls.cc (seteuid32): Call user_shared_initialize_1 after user
- changed.
-
-2008-07-24 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (mount_info::from_fstab): Change system_printf to
- debug_printf on NtOpenFile failure.
-
-2008-07-24 Corinna Vinschen <corinna@vinschen.de>
-
- * shared.cc (user_shared_initialize): Fetch potentially changed Cygwin
- username from /etc/passwd before loading mount table.
- (shared_info::init_installation_root): New function fetching Cygwin's
- installation root dir and storing as native NT path in global shared
- memory.
- (shared_info::initialize): Call init_installation_root exactly once at
- first startup.
- * shared_info.h (SHARED_INFO_CB): Accommodate change to shared_info.
- (CURR_SHARED_MAGIC): Ditto.
- (class shared_info): Add installation_root member.
- (shared_info::init_installation_root): Declare.
-
- * grp.cc (pwdgrp::read_group): Call pwdgrp::load with native WCHAR path.
- * passwd.cc (pwdgrp::read_passwd): Ditto. Avoid recursion.
- (etc::init): Take POBJECT_ATTRIBUTES instead of path_conv.
- * path.h (etc::init): Change prototype accordingly.
- * pwdgrp.h (class pwdgrp): Store path as UNICODE_STRING/PWCHAR instead
- of as path_conv.
- (pwdgrp::load): Accommodate prototype.
- * uinfo.cc (pwdgrp::load): Change argument type from char to wchar_t.
- Create native NT path here instead of calling path_conv.
-
- * mount.cc (find_root_from_cygwin_dll): Drop in favor of global
- initializaion in shared_info.
- (mount_info::init): Fetch native NT root dir from cygwin_shared.
- (mount_info::from_fstab): Expect native NT path and use native NT
- functions to access file. Convert username part in user fstab path
- according to special char transformation rules.
- * path.cc (tfx_chars): Convert slash to backslash.
- (transform_chars): Implement for path given as PWCHAR.
- (transform_chars): PUNICODE_STRING version calls PWCHAR version.
- Remove useless commented code.
-
-2008-07-22 Corinna Vinschen <corinna@vinschen.de>
-
- * spawn.cc (spawn_guts): Fix previous patch for UNC paths.
-
-2008-07-22 Corinna Vinschen <corinna@vinschen.de>
-
- * spawn.cc (spawn_guts): Remove long path prefix from win32 path
- before calling CreateProcess if path length is < MAX_PATH.
-
-2008-07-22 Corinna Vinschen <corinna@vinschen.de>
-
- * include/ctype.h: Declare __ctype_ptr__ to keep newlib build happy.
-
-2008-07-19 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (WNetGetProviderNameA): Define.
- (WNetGetResourceParentA): Remove.
- * fhandler_netdrive.cc (struct net_hdls): New structure to keep
- WNet handles. Stored in dir->__handle throughout.
- (thread_netdrive): Rewrite to enumerate all servers in all accessible
- domains and workgroups.
- (fhandler_netdrive::readdir): Simplify toplevel code. Lowercase all
- server names in toplevel.
- (fhandler_netdrive::rewinddir): Close all WNet handles and free
- net_hdls structure.
-
-2008-07-18 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::open): Rename x to fh. On Samba, always
- create file with NULL security descriptor and set the permissions
- afterwards. Explain why.
-
-2008-07-18 Corinna Vinschen <corinna@vinschen.de>
-
- * environ.cc (known): Remove "binmode" option.
- * fhandler.cc (binmode): Remove.
- (fhandler_base::set_flags): Accommodate binmode removal.
- * path.h (path_conv::set_binary): Remove.
- * pipe.cc (pipe): Create pipes always as binary pipes.
- * winsup.h (binmode): Remove declaration.
-
-2008-07-17 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (mount_info::from_fstab_line): Default to binary mount.
-
-2008-07-16 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (allow_winsymlinks): Revert default to create system bit
- symlinks for speed.
-
-2008-07-16 Corinna Vinschen <corinna@vinschen.de>
-
- Add case-sensitivity.
- Unconditionally handle mount points case-sensitive.
- Unconditionally handle virtual paths case-sensitive.
- Unconditionally handle registry paths case-insensitive.
- Otherwise, accommodate case-sensitivity of given path throughout.
- * cygheap.cc (cygheap_root::set): Get additional caseinsensitive
- parameter and store it.
- * cygheap.h (struct cygheap_root_mount_info): Add member
- caseinsensitive.
- * dlfcn.cc (get_full_path_of_dll): Drop PC_NOFULL parameter from call
- to path_conv::check.
- * environ.cc (pcheck_case): Remove.
- (check_case_init): Remove.
- (known): Drop "check_case" option.
- * exceptions.cc (open_stackdumpfile): Add comment.
- * fhandler.cc (fhandler_base::get_default_fmode): Call pathmatch
- instead of strcasematch.
- * fhandler_disk_file.cc: Accommodate case-sensitivity of given path
- throughout.
- (__DIR_mounts::check_mount): Unconditionally check virtual paths
- case-sensitive.
- (fhandler_disk_file::link): Drop case clash handling.
- (fhandler_disk_file::open): Ditto.
- (fhandler_disk_file::readdir_helper): Drop managed mount code.
- * mount.cc: Remove managed mount code and datastructures.
- (struct opt): Remove "managed" option. Add "posix=0" and "posix=1"
- options.
- (fillout_mntent): Remove "managed" output. Add "posix" output.
- * path.cc (struct symlink_info): Remove case_clash member and
- case_check method.
- (pcheck_case): Remove.
- (path_prefix_p): Take additional bool parameter "caseinsensitive".
- (pathnmatch): Ditto.
- (pathmatch): Ditto.
- (mkrelpath): Ditto.
- (fs_info::update): Set caseinsensitive flag according to file system
- name and FILE_CASE_SENSITIVE_SEARCH flag. Add comment.
- (tfx_chars_managed): Remove.
- (transform_chars): Drop "managed" parameter. Always use tfx_chars.
- (get_nt_native_path): Drop "managed" parameter. Make sure drive letters
- are always upper case.
- (getfileattr): Change second parameter to denote caseinsensitivity.
- (path_conv::check): Initialize caseinsensitive to OBJ_CASE_INSENSITIVE.
- Set caseinsensitive according to global obcaseinsensitive flag, file
- system case sensitivity and MOUNT_NOPOSIX mount flag.
- Drop case_clash and all the related code.
- (symlink_worker): Drop case clash handling.
- (symlink_info::set): Drop setting case_clash.
- (symlink_info::case_check): Remove.
- (cwdstuff::set): Add comment.
- (etc::init): Take path_conv instead of PUNICODE_STRING as parameter to
- allow case sensitivity.
- * path.h (enum pathconv_arg): Drop PC_SYM_IGNORE.
- (enum case_checking): Remove.
- (enum path_types): Drop PATH_ENC, add PATH_NOPOSIX flag.
- (struct fs_info): Add caseinsensitive flag and accessor methods.
- (class path_conv): Add caseinsensitive member and define
- objcaseinsensitive method. Drop case_clash member and isencoded method.
- (pathmatch): Change prototype according to above change.
- (pathnmatch): Ditto.
- (path_prefix_p): Ditto.
- (get_nt_native_path): Ditto.
- (class etc): Ditto.
- (fnunmunge): Remove prototype.
- * shared.cc (shared_info::init_obcaseinsensitive): Initialize
- obcaseinsensitive flag from obcaseinsensitive registry value.
- (shared_info::initialize): Call init_obcaseinsensitive here by the
- first process creating the shared memory.
- * shared_info.h (mount_item::fnmunge): Remove.
- (shared_info::obcaseinsensitive): Rename from obcaseinsensitivity.
- (shared_info::init_obcaseinsensitive): Declare.
- * syscalls.cc (try_to_bin): Add comment.
- * include/sys/mount.h (MOUNT_ENC): Remove flag.
- (MOUNT_NOPOSIX): Add flag.
-
-2008-07-15 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_tape.cc (mtinfo::initialize): Remove synchronization stuff.
- Just initialize drive data.
- * mtinfo.h (MTINFO_MAGIC): Remove.
- (MTINFO_VERSION): Remove.
- (class mtinfo): Remove magic and version members.
- * shared.cc (shared_info::initialize): Move call to
- get_session_parent_dir so that the dir creation is only called once.
- Move call to mt.initialize so that it's called only by the first
- process creating the shared memory.
- * shared_info.h (SHARED_INFO_CB): Accommodate change to shared_info.
- (CURR_SHARED_MAGIC): Ditto.
- (class shared_info): Add obcaseinsensitivity member.
-
-2008-07-14 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::fpathconf): On _PC_POSIX_PERMISSIONS
- and _PC_POSIX_SECURITY, return true for NFS, too.
-
-2008-07-14 Corinna Vinschen <corinna@vinschen.de>
-
- Throughout drop allow_ntsec and allow_smbntsec handling.
- * environ.cc (set_ntsec): Remove.
- (set_smbntsec): Remove.
- (known): Remove ntsec and smbntsec options.
- * external.cc (check_ntsec): Return true if no filename is given.
- * mount.cc (oopts): Add "acl" and "noacl" options. Set MOUNT_NOACL
- flag accordingly.
- (fillout_mntent): Handle MOUNT_NOACL flag.
- * path.h (enum path_types): Add PATH_NOACL.
- * security.cc (allow_ntsec): Remove.
- (allow_smbntsec): Remove.
- * security.h (allow_ntsec): Drop declaration.
- (allow_smbntsec): Drop declaration.
- * include/sys/mount.h (MOUNT_NOACL): Define.
-
-2008-07-14 Corinna Vinschen <corinna@vinschen.de>
-
- * miscfuncs.cc (cygwin_strncasecmp): Fix bug which results in
- prematurely truncated strings. Simplify target length argument to
- sys_mbstowcs.
-
-2008-07-14 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (GetExtendedTcpTable): Define.
- * fhandler_socket.cc (address_in_use): Take const struct sockaddr
- pointer as argument. Implement additional AF_INET6 table check.
- (fhandler_socket::bind): Drop AF_INET test before calling
- address_in_use.
- * net.cc (ipv4_getnameinfo): Return EAI_FAMILY instead of 1 if
- called with unsupported af_family.
-
-2008-07-12 Eric Blake <ebb9@byu.net>
-
- Fix usage of recently fixed Interlocked* functions.
- * winbase.h (ilockincr, ilockdecr, ilockexch, ilockcmpexch): Add
- volatile qualifier, to match Interlocked* functions.
-
-2008-07-11 Corinna Vinschen <corinna@vinschen.de>
-
- * select.cc (peek_pipe): Temporarily revert patch from 2008-05-30.
-
-2008-07-11 Corinna Vinschen <corinna@vinschen.de>
-
- Change length for domain buffers from INTERNET_MAX_HOST_NAME_LENGTH to
- MAX_DOMAIN_NAME_LEN throughout.
- * cyglsa.h (CYG_LSA_MAGIC): New value.
- (cyglsa_t): Define username and domain as WCHAR arrays.
- * errno.cc (errmap): Add mapping for ERROR_NONE_MAPPED.
- * sec_auth.cc: Drop 'w' prefix from WCHAR string variable names where
- appropriate.
- (extract_nt_dom_user): Prefer resolving by SID before resolving by
- domain\name pair.
- (cygwin_logon_user): Don't print cleartext password in debug output.
- Change comment.
- (get_user_groups): Revert calls to LookupAccountNameW to use NULL
- server instead of explicit server name, according to MSDN.
- (get_user_local_groups): Ditto.
- (get_server_groups): Fetch domain and user name from usersid per
- LookupAccountSidW instead of calling extract_nt_dom_user.
- (lsaauth): Fetch domain and user name from usersid per LookupAccountSidW
- instead of calling extract_nt_dom_user.
- * sec_helper.cc (cygpriv): Convert to wchar_t pointer array.
- (privilege_luid): Convert first parameter to PWCHAR.
- (privilege_name): Return wchar_t pointer.
- (set_privileges): Accommodate debug output.
- * security.h (privilege_luid): Change prototype accordingly.
-
-2008-07-10 Corinna Vinschen <corinna@vinschen.de>
-
- * cyglsa.h (SECURITY_STRING): Define.
- (enum _SECPKG_NAME_TYPE): Define.
- (struct _SECPKG_CALL_INFO): Define.
- (struct _LSA_SECPKG_FUNCS): Extend to full size. Define unused
- functions lazily.
- (cygprf_t): Define.
- * sec_auth.cc (lsaauth): Use actual primary group if no admins group.
- Add (disabled) code to fetch token from profil data.
-
-2008-07-09 Corinna Vinschen <corinna@vinschen.de>
-
- * sec_auth.cc (verify_token): Allow builtin groups missing in a token
- and it's still valid. Explain why.
-
-2008-07-09 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (DsGetDcNameW): Replace DsGetDcNameA.
- * dcrt0.cc (child_info_spawn::handle_spawn): Drop artificial
- supplementary group list from calling setgroups in parent.
- * grp.cc (internal_getgroups): Drop 9x-only code. Reformat.
- * sec_auth.cc (get_logon_server): Do everything in WCHAR only.
- (get_user_groups): Ditto. Use wlogonserver in LookupAccountNameW
- calls, too.
- (is_group_member): Get logon server as first argument and use in call
- to NetLocalGroupGetMembers.
- (get_user_local_groups): Get logon server as first argument and use in
- calls to NetLocalGroupEnum and LookupAccountNameW. Revamp to work
- more correctly in domain environments.
- (get_server_groups): Accommodate aforementioned changed function calls.
- * security.h (get_logon_server): Change prototype accordingly.
- * uinfo.cc (cygheap_user::env_logsrv): Accommodate changed
- get_logon_server call.
-
-2008-07-09 Corinna Vinschen <corinna@vinschen.de>
-
- * grp.cc (internal_getgroups): Also add integrity-enabled groups.
-
-2008-07-09 Corinna Vinschen <corinna@vinschen.de>
-
- * sec_auth.cc (verify_token): Disable code which returns false if
- the token contains additional groups not requested by setgroups.
- Explain why.
-
-2008-07-08 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::bind): Don't run explicit
- local socket test in SO_REUSEADDR case on systems supporting
- enhanced socket security. Explain why. Only call address_in_use
- for AF_INET sockets.
- * net.cc (cygwin_setsockopt): Don't call setsockopt to set SO_REUSEADDR
- on systems supporting enhanced socket security. Add comment.
- * wincap.h (wincaps::has_enhanced_socket_security): New element.
- * wincap.cc: Implement above element throughout.
-
-2008-07-08 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (ipv6_inited): Make NO_COPY.
-
-2008-07-02 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (path_conv::is_binary): Fix test. Add comment.
-
-2008-06-24 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (cygwin_bindresvport_sa): Fix usage of last_used_bindresvport.
-
-2008-06-21 Corinna Vinschen <corinna@vinschen.de>
-
- * include/limits.h (PATH_MAX): Add comment.
- * include/cygwin/config.h (__FILENAME_MAX__): Define as 4096. Add
- comment.
-
-2008-06-19 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_tty.cc (fhandler_pty_master::setup): Fix pipe inheritance.
-
-2008-06-18 Christopher Faylor <me+cygwin@cgf.cx>
-
- * strsig.cc (strsignal): Return non-const buffer to allow building with
- recent newlib change.
-
-2008-06-17 Corinna Vinschen <corinna@vinschen.de>
-
- * sec_auth.cc (DsGetDcNameA): Drop declaration.
- (DS_FORCE_REDISCOVERY): Drop definition.
-
-2008-06-17 Christopher Faylor <me+cygwin@cgf.cx>
-
- * spawn.cc (spawn_guts): Reinstate call to
- fhandler_console::need_invisible since it is required to prevent
- console flashing.
-
-2008-06-17 Corinna Vinschen <corinna@vinschen.de>
-
- * include/resolv.h (_getshort): Drop declaration.
- (_getlong): Ditto.
-
-2008-06-12 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (mount_info::get_cygdrive_info): Fix usage of user and
- system arguments. Strip trailing slash from path for backward
- compatibility.
-
-2008-06-12 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (set_console_state_for_spawn): Drop declaration.
- * fhandler_console.cc (set_console_state_for_spawn): Remove.
- (fhandler_console::open): Set console state last. Don't set
- ENABLE_PROCESSED_INPUT flag.
- * spawn.cc (spawn_guts): Drop call to set_console_state_for_spawn.
-
-2008-06-11 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (get_nt_native_path): Drop considerations for DOS devices.
- Keep relative paths relative.
- (cygwin_conv_path): Don't try to skip native NT prefixes on relative
- paths.
-
-2008-06-11 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/version.h (CYGWIN_VERSION_MOUNT_REGISTRY): Bump.
- (CYGWIN_INFO_CYGWIN_MOUNT_REGISTRY_NAME): Remove.
- (CYGWIN_INFO_CYGDRIVE_FLAGS): Remove.
- (CYGWIN_INFO_CYGDRIVE_PREFIX): Remove.
- (CYGWIN_INFO_CYGDRIVE_DEFAULT_PREFIX): Add comment to differ from the
- registry related defines.
-
-2008-06-11 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_procnet.cc (dad_to_flags): Fix comment.
-
-2008-06-10 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_procnet.cc (get_scope): New static function to evaluate
- scope.
- (dad_to_flags): New static array to convert Windows DAD state to
- Linux values.
- (format_procnet_ifinet6): Drop asking for IfIndex, just use Ipv6IfIndex.
- Use get_scope and dad_to_flags to generate more accurate linux-like
- output.
-
-2008-06-10 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (if_nametoindex): Fix typo in call to get_adapters_addresses.
- (if_indextoname): Prefer IPv6 loopback device name over IPv4 loopback
- device name on pre-Vista systems.
- (if_nameindex): Ditto.
-
-2008-06-10 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_procnet.cc (format_procnet_ifinet6): Use sprintf rather than
- __small_sprintf.
- * net.cc (if_nametoindex): Prefer IPv6IfIndex over IfIndex for
- consistency with /proc/net/if_inet6.
- (if_indextoname): Ditto.
- (if_nameindex): Ditto.
-
-2008-06-10 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (mount_info::from_fstab): Read sizeof (buf) - 2 bytes.
- Add code to handle overly long lines.
-
-2008-06-10 Corinna Vinschen <corinna@vinschen.de>
-
- * sec_auth.cc (lsaauth): Make returned token inheritable.
-
-2008-06-10 Corinna Vinschen <corinna@vinschen.de>
-
- * devices.cc: Regenerate.
-
-2008-06-09 Christopher Faylor <me+cygwin@cgf.cx>
-
- * devices.in: Remove "Global" from tty device.
-
-2008-06-09 Eric Blake <ebb9@byu.net>
-
- * signal.cc (abort): Only flush streams after signal handler.
-
-2008-06-02 Christopher Faylor <me+cygwin@cgf.cx>
-
- * cygwin.sc: Remove unrequired and erroneous definition.
-
-2008-05-30 Christopher Faylor <me+cygwin@cgf.cx>
-
- * select.cc (peek_pipe): Semi-reinstate pipe NT-special write
- detection.
-
-2008-05-29 Christopher Faylor <me+cygwin@cgf.cx>
-
- * devices.in: Change mapping for /dev/ttyS* and /dev/com*.
- * devices.cc: Regenerate.
-
-2008-05-25 Christopher Faylor <me+cygwin@cgf.cx>
-
- * mount.cc (mount_info::from_fstab): Use proper buffer size.
-
-2008-05-24 Christopher Faylor <me+cygwin@cgf.cx>
-
- * mount.cc (mount_info::init): Revert previous change.
- (mount_info::from_fstab): Change system_printf to debug_printf. Just
- use a local NT_MAX_PATH sized temporary buffer.
-
-2008-05-24 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (mount_info::init): Recreate path when trying to read the
- user fstab file.
-
-2008-05-24 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (symlink_info::check): Reorder test for nfs symlinks.
-
-2008-05-23 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::opendir): Don't try to
- use FileIdBothDirectoryInformation on NFS shares. Fix comment to
- explain why.
- * path.cc (symlink_info::check): Reinstantiate no_ea. Use in
- erroneously changed condition.
-
-2008-05-23 Christopher Faylor <me+cygwin@cgf.cx>
-
- * mount.cc (find_root_from_cygwin_dll): New function factored from
- from_fstab. Avoid use of tls since it isn't necessarily initialized
- when cygwin1.dll is dynamically loaded.
- (mount_info::create_root_entry): Ditto.
- (mount_info::init): Calculate cygwin root once. Use create_root_entry
- to record it. Pass fstab location to from_fstab.
- (mount_info::from_fstab): Move root calculation stuff elsewhere, as per
- above.
-
- * shared_info.h (mount_info::from_fstab_line): Make private.
- (mount_info::fstab): Ditto. Accommodate new arguments.
-
-2008-05-23 Christopher Faylor <me+cygwin@cgf.cx>
-
- * mount.cc (mount_info::from_fstab): Use cygwin_hmodule rather than
- trying to find handle based on cygwin1.dll.
-
- * path.cc (symlink_info::check): Remove unused variable.
-
-2008-05-23 Corinna Vinschen <corinna@vinschen.de>
-
- * shared.cc (open_shared): Fix comments. Fix a condition which has
- been overlooked to revert to its old state in change from 2008-04-18.
-
-2008-05-22 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (symlink_info::check): Define eabuf and easize outside of
- loop. Set to NULL on first STATUS_EAS_NOT_SUPPORTED. Align comments.
- Fix formatting.
-
-2008-05-23 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::readdir): Eliminate
- compiler warning.
-
-2008-05-23 Christopher Faylor <me+cygwin@cgf.cx>
-
- * path.cc (symlink_info::check): Don't pass EaBuffer to NtCreateFile if
- it has indicated that it isn't appropriate.
- * ntdll.h (STATUS_EAS_NOT_SUPPORTED): Define.
-
- * winsup.h: Remove __builtin* defines.
-
-2008-05-22 Corinna Vinschen <corinna@vinschen.de>
-
- * grp.cc (internal_getgroups): Fix thinko. Only add enabled groups to
- the group list.
-
-2008-05-22 Corinna Vinschen <corinna@vinschen.de>
-
- * grp.cc (internal_getgroups): Don't add deny-only groups to the group
- list.
-
-2008-05-22 Corinna Vinschen <corinna@vinschen.de>
-
- * cygtls.h (struct san): Add two int values to store the current
- tls_pathbuf counters.
- (return_from_fault): Restore tls_pathbuf counters.
- (setup_fault): Save tls_pathbuf counters.
- * tlsoffset.h: Regenerate.
-
-2008-05-22 Corinna Vinschen <corinna@vinschen.de>
-
- * sec_acl.cc (setacl): Set errno to EINVAL if user or group don't exist.
-
-2008-05-22 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (cygwin_conv_path): Define tp before setting up faul handler.
- * syscalls.cc: Ditto, throughout.
- (gen_full_path_at): Add bool parameter to allow NULL pathname.
- (futimesat): Allow NULL pathname as GLIBC.
-
-2008-05-21 Christopher Faylor <me+cygwin@cgf.cx>
-
- * string.h (strchr): Eliminate.
-
- * syscalls.cc (rename): Work around inexplicable C++ warning.
-
-2008-05-21 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (get_ino_by_handle): Rename pfai to fai.
- (fhandler_base::fstat_by_handle): Drop fai_size and pfai in favor of
- static struct fai_buf. Restructure.
- (fhandler_base::fstat_by_name): Drop fvi_size and pfvi. Drop fdi_size
- and pfdi in favor of static struct fdi_buf. Drop redundant test for
- existance. Use FileDirectoryInformation class instead of
- FileBothDirectoryInformation. Drop call to NtQueryVolumeInformationFile
- in favor of using pc.fs_serial_number (). Fix FileId information given
- to fstat_helper.
- (fhandler_disk_file::fstatvfs): Drop fvi_size, pfvi, fai_size and pfai.
- Drop getting FileFsVolumeInformation and FileFsAttributeInformation in
- favor of using the related path_conv info.
- (fhandler_disk_file::opendir): Fix comment.
- (fhandler_disk_file::readdir): Ditto. Use FileDirectoryInformation
- class instead of FileBothDirectoryInformation.
- * path.cc (fs_info::update): Store MaximumComponentNameLength in new
- member name_len.
- * path.h (struct fs_info): Use ULONG rather than DWORD. Add member
- name_len to store MaximumComponentNameLength. Add accessor methods.
- (path_conv::fs_name_len): New method.
-
-2008-05-21 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (dirent_states): Add dirent_nfs_d_ino state and add it to
- dirent_info_mask.
- * fhandler_disk_file.cc (fhandler_disk_file::opendir): Set
- dirent_nfs_d_ino flag for NFS shares. Explain why.
- (fhandler_disk_file::readdir): Use FileNamesInformation instead of
- FileBothDirectoryInformation info class on NFS clients not supporting
- the FileIdBothDirectoryInformation info class. Use local pointers to
- accommodate different offsets.
- * path.cc (symlink_info::check): Don't test directories for symlinks
- on NFS shares. Enhance comment.
-
-2008-05-21 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (FILTERED_MODE): Define valid chmod mode mask.
- (chmod): Call fh->fchmod with filtered mode.
- (fchmod): Ditto.
-
-2008-05-20 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::fchmod): Fix test for
- S_IFSOCK in mode bits.
-
-2008-05-20 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (symlink_worker): Fix EA buffer size info given to
- NtCreateFile.
- (symlink_info::check_nfs_symlink): Get 64K buffer for EA buffer.
- Change EA buffer size info given to NtQueryEaFile accordingly.
-
-2008-05-20 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (symlink_info::check_shortcut): Minimize requested file
- access flags.
- (symlink_info::check_sysfile): Ditto. Add missing `else'.
- (symlink_info::check): Only retry to open file if first try failed
- with access denied.
-
-2008-05-20 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (fs_info::update): Re-add opening the unsplitted path
- for fillout_mntent's sake.
-
-2008-05-20 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::mkdir): Create directories
- on NFS shares with correct mode bits.
-
-2008-05-20 Corinna Vinschen <corinna@vinschen.de>
-
- * winsup.h (cygwin_inet_addr): Fix type of declaration.
-
-2008-05-20 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (DLL_OFILES): Add nfs.o.
- * fhandler.cc (fhandler_base::open): Open files on NFS shares with
- correct access flags and EAs.
- * fhandler.h (fhandler_base::fstat_by_nfs_ea): Declare.
- * fhandler_disk_file.cc (fhandler_base::fstat_by_nfs_ea): New method.
- (fhandler_base::fstat_by_handle): Call fstat_by_nfs_ea for files on
- NFS shares.
- (fhandler_disk_file::fchmod): Use NFS specific method to set mode for
- files on NFS shares. Don't overrule errno from call to
- set_file_attribute with errno from NtSetInformationFile call.
- (fhandler_disk_file::fchown): Add comment.
- * mount.cc (fillout_mntent): Accommodate change in second parameter
- to fs_info::update.
- * nfs.cc: New file.
- * nfs.h: New file.
- * path.cc (fs_info::update): Take handle instead of bool as second
- parameter. Use that handle if it's not NULL. Only close handle if
- it has been opened here. Use static defined buffers instead of
- alloca'd buffers.
- (path_conv::check): Call symlink_info::check with reference to fs.
- Don't call fs.update here if file exists.
- (conv_path_list): Prefer tmp_pathbuf buffer over using alloca.
- (symlink_worker): Use NFS specific method to create symlinks on NFS
- shares. Prefer tmp_pathbuf buffer over using alloca.
- (symlink_info::check_shortcut): Reopen file from incoming handle
- with necessary FILE_GENERIC_READ flag. Prefer tmp_pathbuf buffer over
- using alloca.
- (symlink_info::check_sysfile): Ditto.
- (symlink_info::check_reparse_point): Use tmp_pathbuf buffer to
- allocate REPARSE_DATA_BUFFER.
- (symlink_info::check_nfs_symlink): New method.
- (enum symlink_t): Remove.
- (symlink_info::check): Don't use NtQueryAttributesFile. Rather, open
- file with necessary access flags and call NtQueryInformationFile. Fix
- error handling in case file can't be opened. For existing files, call
- fs_info::update here. Restructure symlink checking to accommodate the
- fact that the file is already open. Add case for NFS symlinks.
- * path.h (fs_info::update): Take handle instead of bool as second
- parameter.
-
-2008-05-20 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (rename): Fix condition when to start a transaction.
-
-2008-05-20 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (path_conv::check): Free wide_path and normalized_path if
- necessary.
- * path.h (path_conv::path_conv): Set wide_path, normalized_path and
- normalized_path_size to 0 in all constructors.
-
-2008-05-19 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (rename): Allocate temporary path buffers using
- tmp_pathbuf. Don't try to unset R/O attribute on dstpc if a
- removepc exists. dstpc is a non-existant file in that case.
-
-2008-05-17 Christopher Faylor <me+cygwin@cgf.cx>
-
- * include/stdint.h: Use int rather than long for {u,}int32_t.
-
-2008-05-16 Corinna Vinschen <corinna@vinschen.de>
-
- * CYGWIN_LICENSE: Remove duplicate file here.
-
-2008-05-15 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (rename): ONly start transaction if FS supports them.
-
-2008-05-15 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (LoadDLLfuncNt): Re-invent.
- (NtCreateTransaction): Define.
- (NtCommitTransaction): Define.
- (NtRollbackTransaction): Define.
- (RtlGetCurrentTransaction): Define.
- (RtlSetCurrentTransaction): Define.
- * ntdll.h (TRANSACTION_ALL_ACCESS): Define.
- (NtCreateTransaction): Declare.
- (NtCommitTransaction): Declare.
- (NtRollbackTransaction): Declare.
- (RtlGetCurrentTransaction): Declare.
- (RtlSetCurrentTransaction): Declare.
- * syscalls.cc (start_transaction): New static function to start TxF
- transaction.
- (stop_transaction): New static function to end TxF transaction.
- (rename): Call start_transaction and stop_transaction where appropriate
- on systems supporting transactions.
- * wincap.h (wincaps::has_transactions): New element.
- * wincap.cc: Implement above element throughout.
-
-2008-05-14 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::readdir_helper): Drop
- explicit transformation of special DOS chars.
- * strfuncs.cc (sys_wcstombs): Always transform UNICODE private use area
- back to ASCII.
-
-2008-05-13 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/stdlib.h (initstate): Declare.
- (setstate): Declare.
-
-2008-05-13 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (path_conv::set_normalized_path): Drop strip_tail argument.
- Never strip trailing dots and spaces.
- * (path_conv::check): Accomodate above change.
- * path.h (path_conv::operator=): Ditto
- * dtable.cc (build_fh_dev): Ditto.
- * fhandler.h (fhandler_base::set_name): Ditto.
-
- * path.cc (transform_chars): Disable converting trailing dots and
- spaces.
-
- * path.cc (path_conv::check): Remove two disabled code snippets.
-
-2008-05-13 Corinna Vinschen <corinna@vinschen.de>
-
- * random.cc (initstate): Align to POSIX definition.
- (setstate): Ditto.
-
-2008-05-10 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (DLL_OFILES): Remove _def_time.o.
- * libc/_def_time.c: Remove. Move definitions of _DefaultTimeLocale
- and _CurrentTimeLocale ...
- * libc/strptime.cc: ... here.
-
-2008-05-08 Corinna Vinschen <corinna@vinschen.de>
-
- * include/sys/localedef.h: Remove.
- * libc/strptime.cc: Define _TimeLocale and declare _CurrentTimeLocale
- as well as _DefaultTimeLocale locally for Cygwin.
-
-2008-05-08 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (DLL_OFILES): Add _def_time.o. Remove timelocal.o.
- * include/sys/localedef.h: New file from NetBSD.
- * libc/_def_time.c: Ditto.
- * libc/getopt.c: Update to latest OpenBSD version 1.23.
- * libc/strptime.cc: Replace FreeBSD version 1.35 with latest NetBSD
- version 1.28.
- * libc/timelocal.cc: Remove.
- * libc/timelocal.h: Remove.
-
-2008-04-30 Corinna Vinschen <corinna@vinschen.de>
-
- * dtable.cc (dtable::release): Drop fixup_before handling.
- (dtable::fixup_before_fork): Remove.
- (dtable::fixup_before_exec): Remove.
- * dtable.h (class dtable): Remove cnt_need_fixup_before member.
- (dtable::dtable): Accommodate above change.
- (dtable::dec_need_fixup_before): Remove.
- (dtable::inc_need_fixup_before): Remove.
- (dtable::need_fixup_before): Remove.
- (dtable::fixup_before_exec): Remove declaration.
- (dtable::fixup_before_fork): Ditto.
- * fhandler.h (fhandler_base::fixup_before_fork_exec): Remove.
- (fhandler_base::need_fixup_before): Remove.
- * fork.cc (frok::parent): Drop fixup_before handling.
- * spawn.cc (spawn_guts): Ditto.
-
-2008-04-30 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (is_unc_share): Allow \\?\ prefix as well. Enhance comment.
- (mount_info::from_fstab): Remove patch from 2008-04-29.
-
- * mount.cc (mount_info::conv_to_posix_path): Simplify test for native
- UNC path.
- * path.cc (normalize_win32_path): Ditto.
- (symlink_worker): Ditto.
- (symlink_info::posixify): Ditto.
- (cygwin_conv_path): Ditto.
-
-2008-04-29 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (mount_info::from_fstab): Skip native path prefix in
- module path.
-
-2008-04-29 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (rename): Use volume serial numbers stored in path_conv
- rather than fetching them here for the "same file" test. Change
- comment to reflect this.
-
-2008-04-28 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (symlink_info::check): Avoid special handling for
- STATUS_BUFFER_OVERFLOW when calling NtQueryDirectoryFile.
- * strace.cc (strace::vprntf): Use bigger buffer.
-
-2008-04-28 Corinna Vinschen <corinna@vinschen.de>
-
- * kernel32.cc (CreateFileMappingW): Remove stray small_printf.
-
-2008-04-28 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (IsWow64Process): Remove.
- (Wow64DisableWow64FsRedirection): Remove.
- (Wow64RevertWow64FsRedirection): Remove.
- * ntdll.h (enum _PROCESSINFOCLASS): Define ProcessWow64Information.
- * init.cc (respawn_wow64_process): Use NtQueryInformationProcess to
- get WOW64 state.
- * wincap.cc (wincapc::init): Ditto.
- * wincap.h (wincapc::wow64): Change type to ULONG.
-
-2008-04-27 Corinna Vinschen <corinna@vinschen.de>
-
- * wincap.h (wincapc::wow64): Change type to BOOL.
- * wincap.cc: Remove explicit use of this pointer in wincapc methods.
- (wincapc::init): Fix bug in IsWow64Process handling.
-
-2008-04-26 Corinna Vinschen <corinna@vinschen.de>
-
- * dcrt0.cc (dll_crt0_0): Set SEM_NOGPFAULTERRORBOX error mode, too,
- to accommodate Vista/Longhorn.
- * spawn.cc (spawn_guts): Move check for CREATE_SUSPENDED condition
- after the call to ch.set() since it depends on it.
-
-2008-04-25 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (install): Drop install rules for postinstall script.
-
-2008-04-25 Corinna Vinschen <corinna@vinschen.de>
-
- * postinstall: Remove (Moved to base-cygwin package).
-
-2008-04-25 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::open): Move handling FILE_ATTRIBUTE_NORMAL
- back to its old place. Or it to file_attributes instead of setting it.
-
-2008-04-25 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::open): *Only* handle SYSTEM and HIDDEN
- attributes in FILE_OVERWRITE case.
-
-2008-04-25 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::open): Handle SYSTEM and HIDDEN attributes
- in FILE_OVERWRITE case as well.
-
-2008-04-24 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_base::fstat_helper): Disable calling
- pc.ndisk_links. Just use nNumberOfLinks instead.
-
-2008-04-24 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_base::utimens_fs): Fix typo in
- input range check.
-
-2008-04-24 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din (futimens): Export.
- (utimensat): Export.
- * fhandler.cc (fhandler_base::utimens): Replace fhandler_base::utimes.
- Call utimens_fs.
- * fhandler.h (class fhandler_base): Declare utimens_fs instead of
- utimes_fs, utimens instead of utimes.
- (class fhandler_disk_file): Declare utimens instead of utimes.
- * fhandler_disk_file.cc (fhandler_disk_file::utimens): Replace
- fhandler_disk_file::utimes.
- (fhandler_base::utimens_fs): Replace fhandler_base::utimes_fs.
- Implement tv_nsec handling according to SUSv4.
- * syscalls.cc (utimensat): New function.
- * times.cc (timespec_to_filetime): New function.
- (timeval_to_timespec): New function.
- (utimens_worker): Replace utimes_worker.
- (utimes): Convert timeval to timespec and call utimens_worker.
- (lutimes): Ditto.
- (futimens): Take over implementation from futimes.
- (futimes): Convert timeval to timespec and call futimens.
- * winsup.h (timespec_to_filetime): Declare.
- * include/cygwin/version.h: Bump API minor number.
- * posix.sgml: Add SUSv4 section. Add futimens and utimensat to it.
-
-2008-04-24 Yaakov (Cygwin Ports) <yselkowitz@users.sourceforge.net>
-
- * include/wait.h: New file.
-
-2008-04-23 Corinna Vinschen <corinna@vinschen.de>
-
- * posix.sgml: Add openat, faccessat, fchmodat, fchownat, fstatat,
- futimesat, linkat, mkdirat, mkfifoat, mknodat, readlinkat, renameat,
- symlinkat, unlinkat to list of implemented Solaris functions.
-
-2008-04-23 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din: Sort.
- (faccessat): Export.
- (fchmodat): Export.
- (fchownat): Export.
- (fstatat): Export.
- (futimesat): Export.
- (linkat): Export.
- (mkdirat): Export.
- (mkfifoat): Export.
- (mknodat): Export.
- (openat): Export.
- (readlinkat): Export.
- (renameat): Export.
- (symlinkat): Export.
- (unlinkat): Export.
- * path.cc (readlink): Align definition to POSIX.
- * syscalls.cc (gen_full_path_at): New static function.
- (faccessat): Implement.
- (fchmodat): Implement.
- (fchownat): Implement.
- (fstatat): Implement.
- (futimesat): Implement.
- (linkat): Implement.
- (mkdirat): Implement.
- (mkfifoat): Implement.
- (mknodat): Implement.
- (openat): Implement.
- (readlinkat): Implement.
- (renameat): Implement.
- (symlinkat): Implement.
- (unlinkat): Implement.
- * include/cygwin/version.h: Bump API minor number.
-
-2008-04-22 Corinna Vinschen <corinna@vinschen.de>
-
- * dcrt0.cc (dll_crt0_0): Move CWD initialization from here...
- (dll_crt0_1): ...to here.
-
-2008-04-22 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din (fmemopen): Export.
- (open_memstream): Export.
- * include/cygwin/version.h: Bump API minor number.
-
-2008-04-22 Corinna Vinschen <corinna@vinschen.de>
-
- * sec_auth.cc (create_token): Add integrity level SID to token on
- systems supporting that. Remove useless check for dynamically loading
- NtCreateToken function.
- * sec_helper.cc (mandatory_medium_integrity_sid): Define.
- (mandatory_high_integrity_sid): Define.
- (mandatory_system_integrity_sid): Define.
- * sec_helper.h (mandatory_medium_integrity_sid): Declare.
- (mandatory_high_integrity_sid): Declare.
- (mandatory_system_integrity_sid): Declare.
-
-2008-04-21 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (mount_info::init): Remove call to from_registry. Print
- message that fstab is missing.
- (mount_info::from_fstab): Use CYGWIN_INFO_CYGDRIVE_DEFAULT_PREFIX
- instead of constant string.
- (mount_info::read_mounts): Remove.
- (mount_info::from_registry): Remove.
- (mount_info::read_cygdrive_info_from_registry): Remove.
- * postinstall: Enable code to create fstab entries from old registry
- entries.
- * registry.cc (reg_key::reg_key): Drop CYGWIN_INFO_CYGNUS_REGISTRY_NAME
- from registry key.
- * shared_info.h (mount_info::read_mounts): Remove declaration.
- (mount_info::from_registry): Ditto.
- (mount_info::to_registry): Ditto.
- (mount_info::read_cygdrive_info_from_registry): Ditto.
- * winver.rc (CYGWIN_REGISTRY_KEY): Remove.
- (LegalCopyright): Fix to include 2008.
- (RegistryKey): Set to CYGWIN_INFO_CYGWIN_REGISTRY_NAME.
- * include/cygwin/version.h (CYGWIN_INFO_CYGNUS_REGISTRY_NAME): Remove.
-
-2008-04-21 Corinna Vinschen <corinna@vinschen.de>
-
- * kernel32.cc (CreateFileMappingW): Fix bug in reserve/commit handling.
-
-2008-04-21 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (DLL_OFILES): Add kernel32.o.
- * autoload.cc (WSACloseEvent): Remove.
- (WSACreateEvent): Remove.
- * cygheap.cc (cygheap_init): Drop initializing shared_prefix.
- * cygheap.h (struct init_cygheap): Drop shared_prefix and
- shared_prefix_buf members.
- * fhandler_socket.cc (sock_shared_name): New static function.
- (search_wsa_event_slot): Convert name buffers to WCHAR. Call
- NtCreateMutant/NtOpenMutant to create mutexes in session local
- namespace.
- (fhandler_socket::init_events): Ditto. Fix debug output.
- (fhandler_socket::release_events): Close mutexes using NtClose.
- (fhandler_socket::dup): Ditto.
- * kernel32.cc: New file, implementing Win32 calls in a Cygwin-specific
- way.
- * mmap.cc (MapView): Make static.
- * ntdll.h: Fix status code sorting.
- (STATUS_OBJECT_NAME_EXISTS): Define.
- (SEMAPHORE_QUERY_STATE): Define.
- (CYG_SHARED_DIR_ACCESS): Define.
- (CYG_MUTANT_ACCESS): Define.
- (CYG_EVENT_ACCESS): Define.
- (CYG_SEMAPHORE_ACCESS): Define.
- (enum _PROCESSINFOCLASS): Define ProcessSessionInformation.
- (struct _PROCESS_SESSION_INFORMATION): Define.
- (NtCreateSemaphore): Declare.
- (NtOpenSemaphore): Declare.
- * flock.cc: Use CYG_xxx_ACCESS access masks where appropriate.
- * posix_ipc.cc (ipc_mutex_init): Use native functions to create mutex.
- Create in cygwin-shared subdir.
- (ipc_cond_init): Ditto for event.
- (ipc_mutex_close): Use NtClose.
- (ipc_cond_close): Ditto.
- (mq_open): Drop "cyg" prefix from mqh_uname.
- * shared.cc (CYG_SHARED_DIR_ACCESS): Drop definition here.
- (_cygwin_testing): Declare extern on file level.
- (get_shared_parent_dir): Change name of shared directory. Add name
- to api_fatal output.
- (get_session_parent_dir): New function.
- (shared_name): Simplify.
- (shared_info::initialize): Call get_session_parent_dir.
- * shared_info.h (get_session_parent_dir): Declare.
- * smallprint.cc (__small_vswprintf): Fix bug in multibyte string
- conversion.
- * thread.cc (semaphore::semaphore): Align semaphore name to object
- names in posix IPC functions.
- * include/cygwin/version.h (CYGWIN_VERSION_SHARED_DATA): Bump.
-
-2008-04-18 Corinna Vinschen <corinna@vinschen.de>
-
- Revert thinko in previous patch.
- * fhandler.h (struct wsa_event): Move back from wsa_event.h to here.
- * fhandler_socket.cc (NUM_SOCKS): Ditto.
- (wsa_events): Move back from cygwin_shared to here. Accommodate
- throughout.
- (socket_serial_number): Ditto.
- * shared_info.h: Accommodate above changes.
- * wsa_event.h: Remove.
-
-2008-04-18 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (struct wsa_event): Move to wsa_event.h. Include
- wsa_event.h instead.
- * fhandler_socket.cc (NUM_SOCKS): Move to wsa_event.h.
- (wsa_events): Move from DLL shared area to cygwin_shared shared
- memory. Accommodate throughout.
- (socket_serial_number): Ditto.
- * fhandler_tape.cc (mt): Ditto.
- (mtinfo_init): Remove.
- (mt): Define as cygwin_shared->mt.
- * flock.cc (FLOCK_PARENT_DIR_ACCESS): Remove.
- (FLOCK_INODE_DIR_ACCESS): Move up in file.
- (FLOCK_MUTANT_ACCESS): Ditto.
- (FLOCK_EVENT_ACCESS): Ditto.
- (get_lock_parent_dir): Remove.
- (inode_t::inode_t): Call get_shared_parent_dir to get parent dir handle.
- Add a "flock-" prefix to file's lock directory name for clarity.
- * mtinfo.h (mtinfo_init): Drop declaration.
- * net.cc (last_used_bindresvport): Move from DLL shared area to
- cygwin_shared shared memory.
- (cygwin_bindresvport_sa): Accommodate above change.
- * sec_helper.cc (_everyone_sd): Move here from flock.cc.
- * security.h (SD_MIN_SIZE): Ditto.
- (everyone_sd): Ditto.
- * shared.cc (cygwin_shared_area): Remove.
- (cygwin_shared_h): New handle.
- (get_shared_parent_dir): New static function.
- (shared_name): Drop session_local argument. Call get_shared_parent_dir
- here. Add cygwin-shared subdir to object name.
- (offsets): Reinstantiate SH_CYGWIN_SHARED member.
- (open_shared): Revert change from 2007-03-29 for systems supporting
- SeCreateGlobalPrivilege.
- (shared_info::initialize): Call mtinfo's initialize here.
- (memory_init): Drop call to mtinfo_init.
- * shared_info.h (SHARED_INFO_CB): Accommodate change to shared_info.
- (CURR_SHARED_MAGIC): Ditto.
- (class shared_info): Add members for global socket and tape info
- sharing.
- (enum shared_locations): Reinstantiate SH_CYGWIN_SHARED.
- (get_shared_parent_dir): Declare.
- (shared_name): Drop session_local argument from declaration.
- * wsa_event.h: New file. Move definitions of NUM_SOCKS and
- struct wsa_event here.
-
-2008-04-18 Christopher Faylor <me+cygwin@cgf.cx>
-
- * autoload.cc (noload): Make sure this and succeeding functions are
- located in the text segment.
-
-2008-04-16 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::close): Disable enforced
- lingering since the original problem can no longer be reproduced.
-
-2008-04-16 Corinna Vinschen <corinna@vinschen.de>
-
- * grp.cc (internal_getgroups): Drop local buf. Allocate groups
- directly using alloca.
-
-2008-04-14 Corinna Vinschen <corinna@vinschen.de>
-
- * postinstall: Fix copy/paste bug.
-
-2008-04-14 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::readdir_helper): Fix
- thinko in UNC path handling.
- * path.cc (symlink_worker): Fix typo in comment. Fix UNC path handling.
-
-2008-04-13 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::readdir_helper): Simplify
- code which checks for symlinks. Fix problem with UNC paths.
-
- * environ.cc (struct parse_thing): Remove transparent_exe option.
- * syscalls.cc (transparent_exe): Remove.
- (unlink): Always add stat_suffixes, drop transparent_exe check.
- (open): Ditto.
- (link): Ditto.
- (pathconf): Ditto.
- * fhandler_disk_file.cc (fhandler_disk_file::link): Ditto.
- * fhandler_process.cc (fhandler_process::fill_filebuf): Always remove
- .exe suffix.
- * path.cc (realpath): Never attach known_suffix.
-
-2008-04-10 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din (wprintf): Remove.
- (_wprintf): Ditto.
- * syscalls.cc (wprintf): Ditto.
- * include/cygwin/version.h: Add FIXME comment.
-
-2008-04-08 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (mount_info::from_fstab): Read user fstab files from
- /etc/fstab.d/$USER to avoid user write access to /etc.
- * postinstall: Use variables for filenames. Create /etc/fstab.d dir
- with 01777 permissions.
-
-2008-04-08 Corinna Vinschen <corinna@vinschen.de>
-
- * postinstall: Disable adding registry mounts to /etc/fstab for now.
-
-2008-04-07 Christopher Faylor <me+cygwin@cgf.cx>
-
- Remove unneeded header files from source files throughout.
-
-2008-04-07 Corinna Vinschen <corinna@vinschen.de>
-
- * postinstall: Add function print_flags and call where appropriate.
- Omit system and cygdrive flag when testing cygdrive flags.
-
-2008-04-07 Christopher Faylor <me+cygwin@cgf.cx>
-
- Add miscfuncs.h to files as needed throughout.
- * mount.cc: New file.
- * path.cc: Move mount-specific stuff into mount.cc. Move common stuff
- into miscfuncs.cc. Remove unneeded includes.
- * miscfuncs.cc: Move some common path functions here.
- * miscfuncs.h: New file.
- * winsup.h: Move miscelleneous functions to miscfuncs.h.
- * dcrt0.cc: Remove unneeded includes.
- * Makefile.in (DLL_OFILES): Add mount.o.
-
- * include/cygwin/config.h: Fix a minor typo.
-
-2008-04-07 Corinna Vinschen <corinna@vinschen.de>
-
- * postinstall: Set IFS to LF only. Change while loop in subshell to
- for loop in parent shell. Add code to read system mount points and
- system cygdrive prefix from registry and append them to /etc/fstab.
-
-2008-04-06 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (struct opt): Rename "system" to "nouser".
- * postinsatll: Ditto.
-
-2008-04-05 Corinna Vinschen <corinna@vinschen.de>
-
- * postinstall: New script.
- * Makefile.in (sysconfdir): Define.
- (install): Create $(sysconfdir)/postinstall dir. Install postinstall
- script into it.
-
- * path.cc: Add temorary comments to note later function removal.
- (conv_fstab_spaces): New inline function to handle \040 to space
- conversion.
- (struct opt): Add "system" and "user" mount options.
- (mount_info::from_fstab_line): Only allow # to start a comment at
- the beginning of the line. Call conv_fstab_spaces on native_path and
- posix_path fields. Don't enforce system mounts in /etc/fstab.
- Drop last argument in call to add_item.
- (mount_info::from_fstab): Create a default cygdrive entry. Load
- user mount points from fstab.<username> instead of fstab.<sid>.
- (mount_info::read_mounts): Drop last argument in call to add_item.
- (mount_info::add_reg_mount): Remove.
- (mount_info::del_reg_mount): Remove.
- (mount_info::write_cygdrive_info): Rename from
- mount_info::write_cygdrive_info_to_registry. Don't write to registry.
- Disallow to overwrite a system cygdrive prefix.
- (mount_info::remove_cygdrive_info_from_registry): Remove.
- (mount_info::get_cygdrive_info): Just fetch current cygdrive prefix and
- flags.
- (mount_info::add_item): Drop last argument. Don't write to registry.
- Disallow to overwrite a system mount point.
- (mount_info::del_item): Drop last argument. Don't write to registry.
- Disallow to remove a system mount point.
- (mount): Enforce user mount.
- (cygwin_umount): Ditto.
- * shared_info.h (mount_info::add_item): Drop last argument.
- (mount_info::del_item): Ditto.
- (mount_info::add_reg_mount): Remove.
- (mount_info::del_reg_mount): Remove.
- (mount_info::write_cygdrive_info): Rename from
- mount_info::write_cygdrive_info_to_registry.
- (mount_info::remove_cygdrive_info_from_registry): Remove.
-
-2008-04-03 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (mount_info::from_fstab_line): Simplify. Recognize special
- "cygdrive" entry from FS type field.
- (mount_info::from_fstab): Create a default root dir.
-
-2008-04-03 Corinna Vinschen <corinna@vinschen.de>
-
- * dcrt0.cc (insert_file): Fix potential buffer overflow.
-
-2008-04-03 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (mount_info::from_fstab): Get module path name of the Cygwin
- DLL, not the path of the application.
-
-2008-04-03 Corinna Vinschen <corinna@vinschen.de>
-
- Cleanup.
- * exceptions.cc (windows_system_directory): Make static. Convert to
- WCHAR.
- (_cygtls::inside_kernel): Accommodate above change. Check module
- path name for leading \\?\ and skip, if so.
- (try_to_debug): Call GetEnvironmentStringsW and convert evaluation to
- WCHAR to avoid truncated environment problem.
- (has_visible_window_station): Call GetUserObjectInformationW.
- (events_init): Accommodate above conversion of windows_system_directory.
- * init.cc (respawn_wow64_process): Use WCHAR functions to start new
- process.
- * net.cc (__dup_ent): Drop Windows 9x consideration.
- (load_ipv6_funcs): Use WCHAR functions to load IPv6 libs.
- * syscalls.cc (syscalls.cc): Remove call to GetDiskFreeSpace.
-
-2008-04-02 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (mount_info::init): First try to fetch mount points from
- fstab files. Fallback to registry if none exists.
- (skip_ws): New inline function.
- (find_ws): Ditto.
- (struct opt): New structure for mount options.
- (read_flags): New static function to convert a mount flags string into
- a flag value.
- (mount_info::from_fstab_line): New method to create a mount table
- entry from a fstab line.
- (mount_info::from_fstab): New method to read fstab file.
- * shared_info.h (mount_info::from_fstab_line): Declare.
- (mount_info::from_fstab): Declare.
-
-2008-04-02 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (enum symlink_t): Rename from shortcut_t.
-
-2008-04-02 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (symlink_info::check_reparse_point): Use NtFsControlFile
- to read reparse points.
- (enum shortcut_t): New type.
- (symlink_info::check): Convert sym_check to shortcut_t. Use shortcut_t
- enum values throughout. Check reparse point before checking for
- sysfile shortcut. Open reparse points with READ_CONTROL only to
- accommodate special Vista reparse points. Add comments.
-
-2008-04-02 Corinna Vinschen <corinna@vinschen.de>
-
- * flock.cc (get_lock_parent_dir): Drop call to NtOpenDirectoryObject
- and utilize OBJ_OPENIF flag in call to NtCreateDirectoryObject.
- (inode_t::inode_t): Ditto. Same for NtOpenMutant/NtCreateMutant.
-
-2008-04-02 Corinna Vinschen <corinna@vinschen.de>
-
- * posix.sgml: Change lockf to being implemented.
-
-2008-04-02 Corinna Vinschen <corinna@vinschen.de>
-
- * dcrt0.cc (insert_file): Convert filename to WCHAR and call
- CreateFileW to allow UTF-8 filenames.
-
-2008-04-01 Corinna Vinschen <corinna@vinschen.de>
-
- * Fix copyright dates.
-
-2008-04-01 Corinna Vinschen <corinna@vinschen.de>
-
- Throughout, call fcntl64 instead of fcntl or fcntl_worker.
- * fcntl.cc (fcntl_worker): Remove.
- (fcntl64): Add fault handler. Move fcntl_worker stuff here. Add case
- for locking and call fhandler's lock method directly. Make sure that
- F_FLOCK flag isn't set in lock call.
- (_fcntl): Add fault handler.
- * fhandler.cc (fhandler_base::fcntl): Drop lock cases.
- * flock.cc (flock): Add fault handler. Simplify code. Call fhandlers
- lock method directly instead of fcntl_worker. Add debug output.
- (lockf): Add fault handler. Call fhandlers lock method directly
- instead of fcntl_worker. Add debug output.
- * winsup.h (fcntl_worker): Drop declaration.
- (fcntl64): Declare.
-
-2008-03-31 Corinna Vinschen <corinna@vinschen.de>
-
- * smallprint.cc (__small_vswprintf): Fix uninitialized usage of `w'.
-
- Revamp advisory file locking to avoid cross reference pointers as well
- as to allow BSD flock semantics. More agressively delete unused nodes
- and sync objects.
- * fhandler.h (fhandler_base::ino): Rename from namehash. Fix comment.
- (fhandler_base::node): Remove.
- (fhandler_base::unique_id): Add.
- (fhandler_base::del_my_locks): New method.
- (get_ino): Rename from get_namehash. Change usage throughout Cygwin.
- (get_unique_id): New method.
- * fhandler.cc (fhandler_base::close): Call own del_my_locks method.
- Fix comment.
- (fhandler_base::fhandler_base): Accommodate new and changed members.
- (fhandler_base::fixup_after_fork): Call del_my_locks.
- (fhandler_base::fixup_after_exec): Ditto for files with close-on-exec
- flag set.
- * fhandler_disk_file.cc (get_ino_by_handle): Rename from
- readdir_get_ino_by_handle. Accommodate throughout.
- (fhandler_base::open_fs): Fill ino with inode number if FS has good
- inodes. Allocate a LUID and store in unique_id to recognize file
- descriptors referencing the same file object.
- * flock.cc: Drop flock TODO comments. Use explicit types __dev32_t
- and __ino64_t instead of dev_t and ino_t.
- (LOCK_OBJ_NAME_LEN): Change to reflect longer lf_id length.
- (get_obj_handle_count): New method.
- (lockf_t::lf_id): Change type to long long.
- (inode_t::get_lock_obj_handle_count): Drop in favor of static function
- get_obj_handle_count.
- (inode_t::del_locks): Remove.
- (inode_t::get): Add create_if_missing flag argument.
- (inode_t::del_my_locks): Reimplement to handle POSIX and BSD flock
- locks. Return if node can be deleted or not.
- (inode_t::~inode_t): Ditto. Close handles to i_dir and i_mtx.
- (fixup_lockf_after_fork): Remove.
- (fhandler_base::del_my_locks): New method.
- (fixup_lockf_after_exec): Check if node can be deleted.
- (inode_t::get): Only create node if create_if_missing is set. Lock
- the returned node here before unlocking the node list.
- (inode_t::get_all_locks_list): Accommodate new lf_id length.
- (inode_t::create_lock_obj): Ditto.
- (lockf_t::open_lock_obj): Ditto. Change return type to bool. De-const.
- Set lf_obj instead of returning a handle.
- (lockf_t::del_lock_obj): Call SetEvent only if new incoming parameters
- allow it. Explain how it's supposed to work.
- (fhandler_disk_file::lock): Only fetch file length in SEEK_END case.
- Use NtQueryInformationFile(FileStandardInformation) instead of
- calling fstat_by_handle. Always unlock node before returning.
- Use fhandler's unique id to create lf_id for BSD flock locks.
- Rely on node lock from inode_t::get. Call del_lock_obj on removed
- locks here to allow explicit unlocking. Delete node if no lock exists
- on the file anymore.
- (lf_setlock): Get file handle as additional parameter. Handle the fact
- that lf_getblock now always opens the attached event object. Reactivate
- erroneously applied patch which deactivates setting thread priority.
- Additionally handle blocking on BSD flock locks.
- (lf_clearlock): Get file handle as additional parameter.
- (lf_getlock): Close event handle opened by lf_getblock.
- (lf_getblock): Open potentially blocking event object here and check
- its signal state if it's a BSD flock lock.
- (lf_wakelock): Get file handle as additional parameter.
- * fork.cc (frok::child): Drop call to fixup_lockf_after_fork.
- * ntdll.h (struct _EVENT_BASIC_INFORMATION): Define.
- (enum _EVENT_INFORMATION_CLASS): Define.
- (NtQueryEvent): Declare.
-
- * fhandler.h (fhandler_base::fs_flags): Remove.
- (fhandler_base::set_fs_flags): Remove.
- (fhandler_base::get_fs_flags): Remove.
- * fhandler.cc (fhandler_base::write): Check for sparse file using
- pc.fs_flags().
- * fhandler_disk_file.cc (fhandler_disk_file::ftruncate): Ditto.
-
- The return of the volume serial number in fs_info.
- * fhandler.h (get_dev): New method.
- * fhandler_disk_file.cc (fhandler_base::fstat_by_handle): Drop call to
- NtQueryVolumeInformationFile(FileFsVolumeInformation). Just use
- get_dev() method.
- * fhandler_fifo.cc (fhandler_fifo::open) Use device ID and inode number
- to generate fifo name.
- * path.h (fs_info::sernum): New member.
- (fs_info::serial_number): New method.
- (path_conv::fs_serial_number): New method.
- * path.cc (fs_info::update): Fetch volume serial number and store in
- sernum.
-
-2008-03-28 Corinna Vinschen <corinna@vinschen.de>
-
- * flock.cc (lockf_t::operator new): Add operator taking a pointer. Call
- cmalloc instead of ccalloc in the default operator. Add comments.
- (inode_t::operator new): Call cmalloc instead of ccalloc.
- (inode_t::get_all_locks_list): Return lockf_t pointer.
- (inode_t::del_all_locks_list): Delete. Remove calls throughout.
- (inode_t::get): Handle failing new gracefully.
- (MAX_LOCKF_CNT): Define.
- (inode_t::get_all_locks_list): Use pre-allocated buffer in i_all_lf
- instead of allocating every lock. Return pointer to start of linked
- list of locks.
- (lockf_t::open_lock_obj): Create event object non-inheritable.
- (fhandler_disk_file::lock): Handle failing new gracefully.
- (lf_setlock): Allocate temporary buffer for node->i_all_lf from TLS.
- Remove erroneous NtClose call.
- (lf_getlock): Allocate temporary buffer for node->i_all_lf from TLS.
- (lf_getblock): Set lf to return value of get_all_locks_list.
-
-2008-03-27 Corinna Vinschen <corinna@vinschen.de>
-
- * flock.cc (FLOCK_PARENT_DIR_ACCESS): Define.
- (FLOCK_INODE_DIR_ACCESS): Define.
- (FLOCK_MUTANT_ACCESS): Define.
- (FLOCK_EVENT_ACCESS): Define.
- (SD_MIN_SIZE): Define.
- (everyone_sd): Define to simplify calling _everyone_sd.
- (_everyone_sd): Replace everyone_sync_sd. Take SECURITY_DESCRIPTOR as
- argument and allow to specify access mask.
- (get_lock_parent_dir): Open/Create parent dir with
- FLOCK_PARENT_DIR_ACCESS. Add text to api_fatal message.
- (inode_t::inode_t): Open/Create dir with FLOCK_INODE_DIR_ACCESS.
- Open/Create mutant with FLOCK_MUTANT_ACCESS. Add text to api_fatal
- message.
- (lockf_t::create_lock_obj): Create event with FLOCK_EVENT_ACCESS.
- Add text to api_fatal message.
- (lockf_t::open_lock_obj): Open event with FLOCK_EVENT_ACCESS.
- On failure, just return NULL pointer instead of calling api_fatal.
- (lockf_t::get_lock_obj_handle_count): Replace call to small_printf
- with call to debug_printf.
- (lf_setlock): Handle a failure to open the lock event object as
- EDEADLK. Call system_printf if opening sync objects fail.
- * ntdll.h (DIRECTORY_TRAVERSE): Define.
- (DIRECTORY_CREATE_OBJECT): Define.
- (DIRECTORY_CREATE_SUBDIRECTORY): Define.
- (EVENT_QUERY_STATE): Define.
-
-2008-03-27 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (rename): Fix setting errno in case of trailing "/."
-
-2008-03-27 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc: Create shared objects session local throughout.
- * shared.cc (shared_name): Add argument to allow opening session
- local shared memory.
- * shared_info.h (shared_name): Change declaration accordingly.
-
-2008-03-26 Christopher Faylor <me+cygwin@cgf.cx>
-
- Implement method of detecting a missing dll as suggested by Brian
- Dessent.
- * hookapi.cc (find_first_notloaded_dll): New function.
- * pinfo.cc (status_exit): New function. Issue message when dll not
- found. Use find_first_notloaded_dll to find a nonexistent dll.
- (pinfo::maybe_set_exit_code_from_windows): Call status_exit when exit
- code >= 0xc0000000UL.
- * sigproc.cc (child_info::proc_retry): Return exit code when
- STATUS_DLL_NOT_FOUND.
- * spawn.cc (spawn_guts): Minor cleanup.
- * syscalls.cc (close_all_files): Don't actually close stderr
- filehandle. Just make it noninheritable.
- * winsup.h (find_first_notloaded_dll): Declare new function.
-
-2008-03-26 Brian Dessent <brian@dessent.net>
-
- * ntdll.h: Add several missing NTSTATUS defines.
-
-2008-03-24 Corinna Vinschen <corinna@vinschen.de>
-
- * flock.cc (inode_t::get_all_locks_list): Don't allow F_WAIT flag
- in lock event object name.
- (lockf_t::create_lock_obj): Ditto.
- (lockf_t::open_lock_obj): Ditto.
- (lf_setlock): Only check POSIX locks for deadlock condition.
- (lf_findoverlap): Don't let POSIX and flock locks interact.
-
-2008-03-24 Corinna Vinschen <corinna@vinschen.de>
-
- * flock.cc: Clarify a couple of comments.
- (lf_setlock): Treat not being able to sync on a process as a potential
- deadlock situation. Close process handle using CloseHandle.
-
-2008-03-24 Corinna Vinschen <corinna@vinschen.de>
-
- * flock.cc: Fix typo in comment.
-
-2008-03-24 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::dup): Drop setting flags in the parent.
-
- Implement advisory file locking.
- * cygheap.h (struct init_cygheap): Add inode_list member.
- * cygwin.din (lockf): Export.
- * dcrt0.cc (child_info_spawn::handle_spawn): Call
- fixup_lockf_after_exec.
- * dtable.h (class dtable): Add fhandler_disk_file as friend class.
- * fhandler.cc (fhandler_base::close): Call del_my_locks if node is set.
- (fhandler_base::fhandler_base): Initialize node to NULL.
- (fhandler_base::fixup_after_fork): Ditto.
- * fhandler.h (class fhandler_base): Add member node.
- * fhandler_disk_file.cc (fhandler_disk_file::lock): Delete.
- * flock.cc: Implement all advisory file locking here.
- (fhandler_disk_file::lock): Implement here.
- (flock): Call fcntl with F_FLOCK bit set. Remove test main function.
- (lockf): New function.
- * fork.cc (frok::child): Call fixup_lockf_after_fork.
- * ntdll.h (DIRECTORY_ALL_ACCESS): Define.
- (struct _OBJECT_BASIC_INFORMATION): Define.
- (enum _EVENT_TYPE): Define.
- (NtCreateDirectoryObject): Declare.
- (NtCreateEvent): Declare.
- (NtCreateMutant): Declare.
- (NtOpenEvent): Declare.
- (NtOpenMutant): Declare.
- * include/cygwin/version.h: Bump API minor number.
-
-2008-03-22 Christopher Faylor <me+cygwin@cgf.cx>
-
- * dtable.cc (handle_to_fn): Modify to return true if handle represents
- a cygwin tty.
- (dtable::init_std_file_from_handle): Detect when we've seen a cygwin
- pipe and use it in overlapped mode by default.
- (decode_tty): Make static.
-
-2008-03-22 Christopher Faylor <me+cygwin@cgf.cx>
-
- * dtable.cc: Define various device-related string constants as wide
- character constants.
- (dtable::init_std_file_from_handle): Reorganize pipe handling to try to
- catch special tty case.
- (build_fh_name_worker): Declare for common use.
- (build_fh_name): Define char version.
- (build_fh_name): Define (currently unused) UNICODE_STRING version.
- (decode_tty): Detect if pipe is actually a cygwin tty, returning the
- tty name in the buffer.
- (handle_to_fn): Reorganize to use wide characters.
- * dtable.h (build_fh_name): Declare (currently unused) UNICODE_STRING
- version.
- * fhandler_tty.cc (fhandler_pty_master::setup): Use
- fhandler_pipe::create_selectable to create a pipe with a given name.
- * pipe.cc (pipe_handler): Make returned handle inheritable.
- (fhandler_pipe::create_selectable): Take an optional name. Use a
- standard cygwin introducer for the name.
-
- * path.cc (path_conv::check): Make first argument const.
- * path.h (path_conv::check): Ditto for declaration.
- (path_conv::path_conv): Ditto for UNICODE_STRING version.
-
-2008-03-18 Corinna Vinschen <corinna@vinschen.de>
-
- * include/sys/cygwin.h: Revert erroneous move of `#ifdef WINVER' to
- another location.
-
-2008-03-14 Corinna Vinschen <corinna@vinschen.de>
-
- * fcntl.cc (fcntl_worker): Protect with a 'myfault'.
-
- * path.cc (normalize_posix_path): Treat X:/ as Win32 path, too.
-
- * smallprint.cc (__wrn): New static function.
- (__small_vswprintf): New function to generate WCHAR strings.
- (__small_swprintf): Ditto.
- * winsup.h (__small_swprintf): Declare.
- (__small_vswprintf): Declare.
-
-2008-03-13 Corinna Vinschen <corinna@vinschen.de>
-
- * path.sgml: Remove documentation for old path API. Add documentation
- for new path API.
- * security.sgml: New file to document cygwin_set_impersonation_token
- and cygwin_logon_user with only eight years of delay.
- * shared.sgml: Remove file.
- * include/sys/cygwin.h (cygwin32_attach_handle_to_fd): Move declaration
- into fully deprecated function block.
- (cygwin_logon_user): Move declaration down to declaration of
- cygwin_set_impersonation_token.
-
-2008-03-12 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (rename): Just return with 0 if filenames are identical,
- per POSIX. Drop comment added in previous patch.
-
-2008-03-12 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (rename): Handle a special case of trying to rename a
- mount point.
-
-2008-03-12 Corinna Vinschen <corinna@vinschen.de>
-
- * environ.h: Fix comment.
- * winsup.h: Ditto. Reflect the fact that CYG_MAX_PATH is deprecated.
-
-2008-03-12 Corinna Vinschen <corinna@vinschen.de>
-
- * pipe.cc (fhandler_pipe::create_selectable): Use MAX_PATH instead of
- CYG_MAX_PATH.
- * tty.cc (tty_list::init_session): Ditto.
- (tty::alive): Ditto.
- (tty::open_mutex): Ditto.
- (tty::create_inuse): Ditto.
- (tty::get_event): Ditto.
-
-2008-03-12 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::readdir_helper): Disable
- munging. Convert all chars in the 0xf0xx area to it's ascii equivalent.
- * path.cc (normalize_posix_path): Don't treat "X:foo" as windows path,
- only "X:\foo".
- (tfx_chars): New transformation table for special DOS chars.
- (tfx_chars_managed): Ditto, plus transformation of uppercase ASCII
- chars.
- (transform_chars): New function.
- (get_nt_native_path): Make static. Call transform_chars for all valid
- FS paths. Get additional flag if file is managed or not. Accommodate
- throughout.
- (getfileattr): Get additional flag if file is managed or not.
- Accommodate throughout.
- (path_conv::check): Disable special handling for trailing dots and
- spaces.
- (mount_item::build_win32): Disable code for managed paths.
- (mount_info::conv_to_posix_path): Ditto.
- * path.h (get_nt_native_path): Remove declaration.
-
-2008-03-12 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::readdir_helper): Don't
- copy filename twice in the non-managed case.
-
-2008-03-12 Corinna Vinschen <corinna@vinschen.de>
-
- * winsup.h (NT_MAX_PATH): Revert ill-advised change to 32767.
- Accommodate change throughout.
-
- * cygwin.din (cygwin_conv_path): Export.
- (cygwin_conv_path_list): Export.
- (cygwin_create_path): Export.
- * dcrt0.cc (dll_crt0_1): Use cygwin_conv_path.
- * dtable.cc (handle_to_fn): Ditto. Don't expect UNICODE_STRING being
- 0-terminated.
- * environ.cc (env_plist_to_posix): New helper function.
- (env_plist_to_win32): Ditto.
- (env_path_to_posix): Ditto.
- (env_path_to_win32): Ditto.
- (return_MAX_PATH): Remove.
- (conv_envvars): Use new helper functions. Drop removed members.
- (win_env::operator =): Accommodate removal of path length functions.
- (win_env::add_cache): Accommodate new env helper function API.
- (posify): Ditto.
- * environ.h (struct win_env): Ditto. Remove path length function
- pointers since they are unused.
- * path.cc (warn_msdos): Use cygwin_conv_path.
- (getfileattr): Use new tmp_pathbuf::u_get method.
- (fillout_mntent): Ditto.
- (symlink_info::check): Ditto.
- (path_conv::check): Use sizeof (WCHAR) instead of constant 2.
- (symlink_info::check_reparse_point): Ditto.
- (conv_path_list): Get max size of target string as argument. Call
- cygwin_conv_path as helper function.
- (cygwin_conv_path): New function.
- (cygwin_create_path): New function.
- (cygwin_conv_to_win32_path): Just call cygwin_conv_path with size set
- to MAX_PATH.
- (cygwin_conv_to_full_win32_path): Ditto.
- (cygwin_conv_to_posix_path): Ditto.
- (cygwin_conv_to_full_posix_path): Ditto.
- (conv_path_list_buf_size): Add FIXME comment.
- (env_PATH_to_posix): Rename from env_win32_to_posix_path_list.
- Add size argument as required for env helper functions.
- (cygwin_win32_to_posix_path_list): Call conv_path_list with size set to
- MAX_PATH.
- (cygwin_posix_to_win32_path_list): Ditto.
- (cygwin_conv_path_list): New function.
- (cwdstuff::get): Fix length argument in call to sys_wcstombs.
- * spawn.cc (find_exec): Use cygwin_conv_path_list.
- * tls_pbuf.h (tmp_pathbuf::u_get: New method.
- * uinfo.cc (cygheap_user::ontherange): Allocate temporary path buffers
- using tmp_pathbuf. Use cygwin_conv_path.
- * winf.cc (av::unshift): Use cygwin_conv_path.
- * include/cygwin/version.h: Bump API minor number.
- * include/sys/cygwin.h: Comment out old cygwin32_XXX API.
- Mark old path handling API as deprecated.
- (cygwin_conv_path_t): Typedef. Define values.
- (cygwin_conv_path): Declare.
- (cygwin_create_path): Declare.
- (cygwin_conv_path_list): Declare.
-
-2008-03-11 Corinna Vinschen <corinna@vinschen.de>
-
- * dlfcn.cc (get_full_path_of_dll): Allow paths up to PATH_MAX.
- (dlopen): Call get_full_path_of_dll with path buffer allocate by
- tmp_pathbuf.
-
-2008-03-11 Corinna Vinschen <corinna@vinschen.de>
-
- * spawn.cc (find_exec): Use tmp_pathbuf to allocate path buffer.
-
-2008-03-11 Corinna Vinschen <corinna@vinschen.de>
-
- * dtable.cc (dtable::init_std_file_from_handle): Use tmp_pathbuf to
- allocate path buffer.
- (handle_to_fn): Ditto. Allocate fnbuf big enough to get long path
- names.
-
-2008-03-11 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (cwdstuff::set): Make sure drive_length is 0 for virtual
- paths. Add comments.
- * spawn.cc (spawn_guts): Don't allow to start a native Win32 application
- from a long path or a virtual path. Print an error message to stderr.
-
-2008-03-11 Corinna Vinschen <corinna@vinschen.de>
-
- * environ.cc (parse_options): Use tmp_pathbuf to allocate buffer.
- (regopt): Take tmp buffer as additional argument.
- (environ_init): Alllcate tmpbuf earlier. Use as temporary buffer in
- call to regopt.
- * tls_pbuf.cc (tmp_pathbuf::c_get): Allocate one additional char.
- (tmp_pathbuf::w_get): Allocate one additional WCHAR.
- * winf.cc (av::unshift): Use tmp_pathbuf to allocate buffer.
-
-2008-03-11 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (sync): Use MAX_PATH rather than CYG_MAX_PATH.
-
-2008-03-10 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (class fhandler_console): Add write_buf as pointer to
- temporary buffer space.
- * fhandler_console.cc (CONVERT_LIMIT): Define as NT_MAX_PATH. Add
- comment.
- (fhandler_console::write_normal): Use write_buf throughout.
- (fhandler_console::write): Use tmp_pathbuf to allocate write_buf.
-
-2008-03-10 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_console.cc (fhandler_console::write_normal): Don't print
- chars marked as ERR chars.
-
-2008-03-10 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (dev_console::con_to_str): Declare returning DWORD.
- * fhandler_console.cc (dev_console::con_to_str): Return number of
- multibyte char bytes.
- (fhandler_console::read): Set nread to number of multibyte char bytes
- returned from con_to_str.
- (fhandler_console::write_normal): Reorder trunc buffer preocessing.
- Return after writing valid multibyte sequence out of trunc buffer.
- Change comments slightly.
-
-2008-03-08 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (DIR_BUF_SIZE): Define required space for file
- name in terms of sizeof(WCHAR).
- (fhandler_disk_file::readdir_helper): Convert *all* of fname.
- * path.cc (fillout_mntent): Use tmp_pathbuf for path buffer.
- (symlink_worker): Ditto.
- (SCAN_JUSTCHECKTHIS): New state for suffix_scan to define
- that only the actual name gets cheked and a suffix is never attached.
- (suffix_scan::has): If filename + suffix would be > NAME_MAX, start
- in SCAN_JUSTCHECKTHIS state.
- (suffix_scan::next): Add case for SCAN_JUSTCHECKTHIS.
- (symlink_info::check): Use tmp_pathbuf for path buffer. Goto
- file_not_symlink in case of invalid file name.
- (realpath): Use tmp_pathbuf for path buffer.
-
-2008-03-07 Brian Dessent <brian@dessent.net>
-
- * dtable.cc (handle_to_fn): Null-terminate posix_fn in the case
- of justslash = true.
-
-2008-03-07 Brian Dessent <brian@dessent.net>
-
- * fhandler.cc (fhandler_base::open): Use %S for PUNICODE_STRING.
- * syscalls.cc (setmode): Ditto.
-
-2008-03-07 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::sendto): Never send more than
- 64K. Add comment to explain why.
- (fhandler_socket::sendmsg): Ditto.
-
-2008-03-07 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (DLL_OFILES): Add tls_pbuf.o.
- * autoload.cc (CreateDesktopW): Replace CreateDesktopA.
- (CreateWindowStationW): Replace CreateWindowStationA.
- (GetUserObjectInformationW): Replace GetUserObjectInformationA.
- * cygheap.h (cwdstuff::get): Assume default buffer size NT_MAX_PATH.
- * cygtls.cc (_cygtls::remove): Free temporary TLS path buffers.
- * cygtls.h (TP_NUM_C_BUFS): Define.
- (TP_NUM_W_BUFS): Define.
- (class tls_pathbuf): New class to store pointers to thread local
- temporary path buffers.
- (_local_storage::pathbufs): New member.
- * environ.cc (win_env::add_cache): Use temporary TLS path buffer instead
- of stack based buffer.
- (posify): Get temporary outenv buffer from calling function.
- (environ_init): Create temporary TLS path buffer for posify.
- (build_env): Create Windows environment block as WCHAR buffer.
- * environ.h (build_env): Change declaration accordingly.
- * external.cc (sync_winenv): Accommodate build_env change.
- * fhandler_console.cc (fhandler_console::need_invisible): Use
- GetUserObjectInformationW and CreateWindowStationW.
- * fhandler_process.cc (format_process_maps): Use temporary TLS path
- buffer instead of stack based buffer.
- * fork.cc (frok::parent): Convert to use CreateProcessW.
- * path.cc: Throughout use temporary TLS path buffers instead of stack
- based buffer. Replace checks for CYG_MAX_PATH by checks for
- NT_MAX_PATH.
- (getfileattr): New function to replace GetFileAttributesA.
- (normalize_win32_path): Remove Win32 and NT long path prefixes.
- (getwd): Assume PATH_MAX + 1 buffer per SUSv3.
- * path.h (class path_conv): Set path buffer to size NT_MAX_PATH.
- (iswdrive): Define.
- * pinfo.cc (commune_process): Use temporary TLS path buffer instead of
- stack based buffer.
- * registry.cc (get_registry_hive_path): Ditto.
- (load_registry_hive): Ditto.
- * spawn.cc (spawn_guts): Convert to use CreateProcessW and
- CreateProcessAsUserW.
- (av::fixup): Open/close file using NtOpenFile/NtClose.
- * syscalls.cc (mknod_worker): Allow PATH_MAX file name.
- (mknod32): Ditto.
- (getusershell): Ditto.
- * tls_pbuf.cc: New file implementing tls_pathbuf and tmp_pathbuf
- methods.
- * tls_pbuf.h: New header for files using tmp_pathbuf.
- * tlsoffsets.h: Regenerate.
- * winsup.h (NT_MAX_PATH): Define as 32767 to avoid USHORT overflow.
-
-2008-03-06 Corinna Vinschen <corinna@vinschen.de>
-
- * child_info.h (CURR_CHILD_INFO_MAGIC): Reset.
-
-2008-03-06 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::open_): Add missing test for O_CREAT.
- Fix comment.
-
-2008-03-05 Corinna Vinschen <corinna@vinschen.de>
-
- * child_info.h (~child_info_spawn): Check moreinfo->myself_pinfo for
- NULL before closing.
- * spawn.cc (spawn_guts): Don't close moreinfo->myself_pinfo explicitely
- in case of failing CloseProcess.
-
- * fhandler.cc (fhandler_base::open_): Return EISDIR when trying to
- create a directory.
- * path.cc (path_conv::check): If input path had a trailing dir
- separator, tack it on to the native path if directory doesn't exist.
-
-2008-03-02 Christopher Faylor <me+cygwin@cgf.cx>
-
- * cygtls.cc (_cygtls::init_exception_handler): Semi-revert to making
- only ourselves the exception handler and nothing else.
- * exceptions.cc (open_stackdumpfile): Use correct format specifiers for
- unicode when printing the name of the stackdump file.
- (stack_info::walk): Stop walking if ebp points into cygwin itself.
- (_cygtls::handle_exceptions): Detect when signal is masked and treat as
- if it was not caught. Reinitialize exception handler to known state to
- avoid subsequent attempts to call Windows exception handlers if an
- exception occurs in a signal handler. Revert to a 'return 0' rather
- than using a goto.
-
- * strfuncs.cc (sys_wcstombs_alloc): Minor formatting tweak.
- * winsup.h: Fix comment typo.
-
-2008-03-02 Christopher Faylor <me+cygwin@cgf.cx>
-
- * smallprint.cc (__small_vsprintf): Free allocated buffer rather than
- pointer into the buffer.
-
-2008-03-01 Christopher Faylor <me+cygwin@cgf.cx>
-
- * cygtls.h (_cygtls::handle_threadlist_exception): Eliminate.
- (_cygtls::init_threadlist_exceptions): Ditto.
- * cygtls.cc (_cygtls::handle_threadlist_exception): Eliminate.
- (_cygtls::init_threadlist_exceptions): Ditto.
- (_cygtls::find_tls): Use myfault handling to deal with errors caused by
- nonexistent threads.
- * sigproc.cc (wait_sig): Eliminate call to init_threadlist_exceptions.
-
-2008-03-01 Christopher Faylor <me+cygwin@cgf.cx>
-
- * cygtls.cc (_cygtls::init_exception_handler): Just return.
-
-2008-03-01 Corinna Vinschen <corinna@vinschen.de>
-
- * exceptions.cc (_cygtls::handle_exceptions): Only call rtl_unwind when
- exiting. Just return, don't set thread context.
- * gendef (_setjmp): Store %fs:0 in jmp_buf.
- (_sjfault): Ditto.
- (_ljfault): Restore %fs:0 from jmp_buf.
- (_longjmp): Ditto.
-
-2008-02-29 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::fchmod): Call close_fs
- instead of close to avoid calling close from wrong class when changing
- a file system based device node.
- (fhandler_disk_file::fchown): Ditto.
- (fhandler_disk_file::facl): Ditto.
-
-2008-02-28 Corinna Vinschen <corinna@vinschen.de>
-
- * exceptions.cc (_cygtls::handle_exceptions): When being debugged,
- leave through SetThreadContext, too, to keep exception handler stack
- intact.
-
-2008-02-28 Corinna Vinschen <corinna@vinschen.de>
-
- * exceptions.cc (open_stackdumpfile): Add comments.
-
-2008-02-28 Corinna Vinschen <corinna@vinschen.de>
-
- * exceptions.cc (open_stackdumpfile): Use NtCreateFile to create
- stackdump file.
-
-2008-02-27 Corinna Vinschen <corinna@vinschen.de>
-
- * exceptions.cc (stack_info::walk): Fix typo.
-
-2008-02-27 Corinna Vinschen <corinna@vinschen.de>
-
- * cygtls.cc (_cygtls::init_exception_handler): Fix comment.
-
-2008-02-27 Corinna Vinschen <corinna@vinschen.de>
-
- * (struct __DIR_cache): Switch order of members so that the buffer
- given to NtQueryDirectoryFile is 8 byte aligned.
-
-2008-02-27 Christopher Faylor <me+cygwin@cgf.cx>
-
- * cygtls.cc (_cygtls::handle_threadlist_exception): Make it clear that
- the function never actually returns.
- * exceptions.cc (_cygtls::handle_exceptions): Jump out of function
- rather than returning to avoid meddling by previously installed
- exception handlers.
-
-2008-02-25 Corinna Vinschen <corinna@vinschen.de>
-
- * dcrt0.cc (initial_env): Only use local buffer "buf" if DEBUGGING is
- enabled. Replace calls to GetEnvironmentVariable by calls to
- GetEnvironmentVariableA for clarity. Call GetEnvironmentVariableA
- with NULL buffer.
- (cygbench): Ditto, drop local buffer.
- * environ.cc (getearly): Call GetEnvironmentVariableA.
- (environ_init): Retrieve unicode environment and convert to current
- codepage locally.
- (getwinenveq): Ditto.
- * exceptions.cc (try_to_debug): Accommodate new sys_mbstowcs calling
- convention.
- * fhandler_clipboard.cc (set_clipboard): Call sys_mbstowcs to retrieve
- required buffer length.
- * fork.cc (frok::child): Call GetEnvironmentVariableA.
- * miscfuncs.cc: Accommodate changed arguments in calls to sys_mbstowcs.
- * sec_auth.cc: Ditto.
- * strfuncs.cc (sys_wcstombs_alloc): Fix formatting.
- (sys_mbstowcs): Change arguments to allow specifying a source string
- length.
- (sys_mbstowcs_alloc): Ditto.
- * uinfo.cc (cygheap_user::ontherange): Accommodate changed arguments in
- calls to sys_mbstowcs.
- * winsup.h (sys_mbstowcs): Adjust declaration.
- (sys_mbstowcs_alloc): Ditto.
-
-2008-02-20 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (cwdstuff::set): Revert error handling change in case
- DuplicateHandle fails, because it breaks Vista/Longhorn workaround.
-
-2008-02-19 Christopher Faylor <me+cygwin@cgf.cx>
-
- * sigproc.cc (sig_send): Use sigmask of target thread if it is
- specified otherwise default to main sigmask.
-
-2008-02-16 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::fpathconf): Fix _PC_NAME_MAX and
- _PC_PATH_MAX cases.
-
-2008-02-15 Corinna Vinschen <corinna@vinschen.de>
-
- * include/sys/cygwin.h (__INT_MAX_PATH): Remove.
- (external_pinfo): Convert program_long to pointer.
- * external.cc (fillout_pinfo): Add buffer for program_long value.
-
-2008-02-15 Corinna Vinschen <corinna@vinschen.de>
-
- * include/sys/cygwin.h (__INT_MAX_PATH): Define to 32K.
- (external_pinfo): Set size of program_long to __INT_MAX_PATH.
-
-2008-02-15 Christopher Faylor <me+cygwin@cgf.cx>
-
- * include/sys/cygwin.h (external_pinfo): Define program_long size using
- external buffer size rather than cygwin-internal buffer size.
-
-2008-02-15 Christopher Faylor <me+cygwin@cgf.cx>
-
- Perform whitespace cleanup throughout.
-
- * dcrt0.cc (signal_shift_subtract): Eliminate ancient backwards
- compatibility.
- (check_sanity_and_sync): Ditto.
- * winsup.h (SIGTOMASK): Ditto. Just use constant in signal
- calculation.
- * include/cygwin/version: Remove backwards signal mask compatibility
- define.
-
- * path.cc (symlink_info::check_sysfile): Cosmetic change.
-
- * registry.cc (get_registry_hive_path): Remove unneeded variable.
-
- * exceptions.cc (handle_sigsuspend): Eliminate thread signal mask and
- use either main sigmask or current thread sigmask.
- (set_process_mask): Ditto.
- (sighold): Ditto.
- (sigrelse): Ditto.
- (sigset): Ditto.
- (set_process_mask_delta): Ditto.
- (_cygtls::call_signal_handler): Ditto.
- * fhandler_process.cc (format_process_status): Ditto.
- * fhandler_termios.cc (fhandler_termios::bg_check): Ditto.
- * pinfo.h (class pinfo): Ditto.
- * select.cc (pselect): Ditto.
- * signal.cc (sigprocmask): Ditto.
- (abort): Ditto.
- (sigpause): Ditto.
- (sigsend): Ditto.
- (wait_sig): Ditto.
- * thread.h (pthread::parent_tls): New member.
- * thread.cc (pthread::pthread): Record parent_tls here.
- (pthread::thread_init_wrapper): Initialize sigmask from parent thread.
-
-2008-02-14 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.cc (cwcsdup): New function.
- (cwcsdup1): New function.
- * cygheap.h (cygheap_user::get_windows_id): New method returning PWCHAR.
- (cwcsdup): Declare.
- (cwcsdup1): Declare.
- * registry.cc (get_registry_hive_path): Use WCHAR instead of char
- throughout.
- (load_registry_hive): Ditto.
- * registry.h (get_registry_hive_path): Change declaration accordingly.
- (load_registry_hive): Ditto.
- * sec_helper.cc (cygpsid::string): New method returning PWCHAR.
- * security.h (cygpsid::string): Declare.
- * syscalls.cc (seteuid32): Convert local name var to WCHAR.
- * uinfo.cc (cygheap_user::env_userprofile): Convert local name buffers
- to WCHAR. Call sys_wcstombs_alloc to generate puserprof buffer.
-
- * winsup.h: Fix comment.
- (NT_MAX_PATH): New definition for maximum internal path length.
- Use throughout where appropriate.
- * include/limits.h (PATH_MAX): Set to 4096 as on Linux.
-
-2008-02-13 Christopher Faylor <me+cygwin@cgf.cx>
-
- * configure.in: Remove non-working options.
- * configure: Regenerate.
-
-2008-02-13 Christopher Faylor <me+cygwin@cgf.cx>
-
- * syscalls.cc (_isatty): Define as an alias to isatty to override
- newlib version.
-
- * thread.cc (pthread_kill): Deal with signal 0 as per POSIX and also
- avoid manipulating an invalid thread.
-
-2008-02-13 Corinna Vinschen <corinna@vinschen.de>
-
- * posix.sgml: Move llrint, llrintf, llrintl, lrintl, rintl, wcstol,
- wcstoll, wcstoul, wcstoull, wcsxfrm from unimplemented to implemented
- POSIX interfaces.
- Change headline of "GNU extensions" to "GNU and Linux extensions".
- Add fgetxattr, flistxattr, fremovexattr, fsetxattr, getxattr, lgetxattr,
- listxattr, llistxattr, lremovexattr, lsetxattr, removexattr, setxattr,
- wcpcpy and wcpncpy to list of implemented GNU functions.
-
-2008-02-13 Corinna Vinschen <corinna@vinschen.de>
-
- * cygtls.cc (_cygtls::init_exception_handler): Revert patch
- from 2005-12-02.
- * exceptions.cc (stack_info::walk): Add workaround for NT 5.2
- 64 bit OSes.
- * wincap.h (wincaps::has_restricted_stack_args): New element.
- * wincap.cc: Implement above element throughout.
- (wincapc::init): Reset has_restricted_stack_args if not running
- under WOW64.
-
-2008-02-11 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::fgetxattr): Remove unused
- attr.
- (fhandler_disk_file::fsetxattr): Ditto.
- * include/attr/xattr.h: New file.
-
-2008-02-11 Corinna Vinschen <corinna@vinschen.de>
-
- * dcrt0.cc (dll_crt0_1): Fix typo in call to sys_wcstombs.
- * miscfuncs.cc (next_char): Initialize ret to keep gcc happy.
-
-2008-02-10 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (DLL_OFILES): Add ntea.o.
- * cygwin.din (getxattr, listxattr, removexattr, setxattr, lgetxattr,
- llistxattr, lremovexattr, lsetxattr, fgetxattr, flistxattr,
- fremovexattr, fsetxattr): Export Linux extended attribute functions.
- Sort.
- * errno.cc (errmap): Add mappings for ERROR_EAS_DIDNT_FIT,
- ERROR_EAS_NOT_SUPPORTED, ERROR_EA_LIST_INCONSISTENT,
- ERROR_EA_TABLE_FULL, ERROR_FILE_CORRUPT, ERROR_INVALID_EA_NAME.
- * fhandler.h (class fhandler_base): Declare new fgetxattr and
- fsetxattr methods.
- (class fhandler_disk_file): Ditto.
- * fhandler.cc (fhandler_base::fgetxattr): New method.
- (fhandler_base::fsetxattr): New method.
- * fhandler_disk_file.cc (fhandler_disk_file::fgetxattr): New method.
- (fhandler_disk_file::fsetxattr): New method.
- * ntdll.h (STATUS_EA_TOO_LARGE): Define.
- (STATUS_NONEXISTENT_EA_ENTRY): Define.
- (STATUS_NO_EAS_ON_FILE): Define.
- * ntea.cc (read_ea): Rewrite for long pathnames and for using with
- Linux extended attribute functions.
- (write_ea): Ditto.
- (getxattr_worker): New static function.
- (getxattr): New function.
- (lgetxattr): New function.
- (fgetxattr): New function.
- (listxattr): New function.
- (llistxattr): New function.
- (flistxattr): New function.
- (setxattr_worker): New static function.
- (setxattr): New function.
- (lsetxattr): New function.
- (fsetxattr): New function.
- (removexattr): New function.
- (lsetxattr): New function.
- (fsetxattr): New function.
- * security.h (read_ea): Change declaration according to above changes.
- (write_ea): Ditto.
- * include/cygwin/version.h: Bump API minor version.
-
-2008-02-10 Corinna Vinschen <corinna@vinschen.de>
-
- * libc/ftw.cc (ftw): Allow nfds <= 0 for glibc compatibility.
- * libc/nftw.c (nftw): Ditto.
-
-2008-02-07 Corinna Vinschen <corinna@vinschen.de>
-
- * dtable.cc (dtable::init_std_file_from_handle): Set access to
- read/write if handle is connected to a tty or console.
- * fhandler_dsp.cc (fhandler_dev_dsp::dup): Set open flags correctly
- after duplicating from archetype.
- * fhandler_tty.cc (fhandler_tty_slave::dup): Ditto.
- (fhandler_pty_master::dup): Ditto.
-
-2008-02-06 Corinna Vinschen <corinna@vinschen.de>
-
- * miscfuncs.cc (next_char): Fix typos in comment.
- * strfuncs.cc: Remove cygserver guards.
-
-2008-02-06 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (fhandler_console::trunc_buf): Add to use as cache for
- truncated multibyte characters on input.
- (fhandler_console::write_replacement_char): Declare new method.
- * fhandler_console.cc (CONVERT_LIMIT): Raise to 64K.
- (fhandler_console::fhandler_console): Initialize trunc_buf.
- (ERR): Define as independent value again.
- (fhandler_console::write_replacement_char): New method to print
- replacement chars.
- (fhandler_console::write_normal): Add handling for truncated multibyte
- sequences. Call next_char instead of pathetic CharNextExA function.
- Don't change src, rather just work with found later on.
- * miscfuncs.cc (is_cp_multibyte): Move here from strfuncs.cc.
- Don't call Windows function, restrict to well-known ANSI/OEM codepages
- and UTF-8.
- (next_char): Call CharNextExA only for doublebyte codepages.
- Implement for UTF-8 here.
- * strfuncs.cc (is_cp_multibyte): Move to miscfuncs.cc.
- * winsup.h (next_char): Declare.
- * include/limits.h (MB_LEN_MAX): Set to maximum value of MB_CUR_MAX
- as defined by newlib for now.
-
-2008-02-05 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (CharToOemA): Remove.
- (CharNextExA): Define.
- * environ.cc (codepage_init): Un-static. Set active_codepage to
- active codepage. Default to ansi regardless of buf pointer.
- * fhandler.h (dev_console::get_console_cp): New method.
- (dev_console::con_to_str): Change declaration according to new
- implementation.
- (dev_console::str_to_con): Ditto.
- * fhandler_console.cc (cp_convert): Remove.
- (dev_console::con_to_str): Redefine to take WCHAR as incoming console
- char.
- (dev_console::get_console_cp): Return correct codepage according to
- alternate_charset_active setting.
- (dev_console::str_to_con): Redefine to create WCHAR buffer for console
- output.
- (fhandler_console::read): Read console input as WCHARs.
- (base_chars): Fix typo in comment.
- (fhandler_console::char_command): Save and restore console output
- buffer using UNICODE functions.
- (fhandler_console::write_normal): Convert to write output in UNICODE.
- Use CharNextExA to recognize multibyte characters in input. Workaround
- problem with UTF-8 and MultiByteToWideChar. Simplify the loop for
- printing "normal" characters.
- * strfuncs.cc (active_codepage): New variable to store active codepage.
- (get_cp): Call codepage_init() if active_codepage is uninitialized.
- Just return active_codepage.
- (is_cp_multibyte): New function.
- * winsup.h (active_codepage): Declare.
- (codepage_init): Declare.
- (is_cp_multibyte): Declare.
-
-2008-02-03 Brian Dessent <brian@dessent.net>
-
- * smallprint.cc (__small_vsprintf): Use HEAP_NOTHEAP for type.
- * strfuncs.cc (sys_wcstombs_alloc): Guard use of ccalloc
- to !__OUTSIDE_CYGWIN__ for use in cygserver.
- (sys_mbstowcs_alloc): Ditto.
-
-2008-02-01 Corinna Vinschen <corinna@vinschen.de>
-
- * miscfuncs.cc (cygwin_wcsncasecmp): Never access more than n
- characters.
- (cygwin_strncasecmp): Ditto. Fix for strings longer than n.
-
-2008-02-01 Corinna Vinschen <corinna@vinschen.de>
-
- * string.h: Re-enable inline strcasematch and strncasematch
- implementations and rename to ascii_strcasematch/ascii_strncasematch.
- * dcrt0.cc: Replace str[n]casematch with ascii_str[n]casematch where
- applicable.
- * environ.cc: Ditto.
- * fhandler_process.cc: Ditto.
- * hookapi.cc: Ditto.
- * path.cc: Ditto.
- * spawn.cc: Ditto.
- * strace.cc: Ditto.
- * syscalls.cc: Ditto.
- * uinfo.cc: Ditto.
- * winf.cc: Ditto.
-
-2008-01-31 Corinna Vinschen <corinna@vinschen.de>
-
- * dcrt0.cc (dll_crt0_1): Use GetCommandLineW and convert to current
- codepage.
- * environ.cc (set_file_api_mode): Always set file api to ANSI if not
- using the OEM codepage.
- (codepage_init): Allow "utf8" codepage.
- * fhandler_clipboard.cc (set_clipboard): Convert clipbuf to void and
- cast as needed. Always convert input to wide char and write
- CF_UNICODETEXT to clipboard.
- (fhandler_dev_clipboard::read): Read CF_UNICODETEXT from clipboard and
- convert to current codepage if CYGWIN_NATIVE format is not available.
- * fhandler_console.cc: Drop redundant undef.
- * smallprint.cc (__small_vsprintf): Convert PWCHAR and UNICODE_STRING
- to current codepage for printing.
- * strfuncs.cc: Use PWCHAR throughout.
- (get_cp): Return CP_UTF8 for utf8_cp codepage setting.
- (sys_wcstombs): Allow NULL target buffer.
- (sys_wcstombs_alloc): New function.
- (sys_mbstowcs_alloc): Ditto.
- * winsup.h (codepage_type): Add utf8_cp.
- (HEAP_NOTHEAP): Define.
- (sys_wcstombs_alloc): Declare.
- (sys_mbstowcs_alloc): Declare.
-
-2008-01-31 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.h (struct cwdstuff): Add dir member to store cwd handle.
- (cwdstuff::get_handle): New method.
- * path.cc (cwdstuff::set): When doit is true, always try to get
- directory handle. Fail if duplicating handle fails. Store handle
- in dir. Fix potential SEGV when setting drive_length.
-
-2008-01-28 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc: Fix Samba version in comment.
-
-2008-01-24 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (fs_info::update): Fix old-style Samba test to support
- recent as well as upcoming Samba releases.
-
-2008-01-22 Corinna Vinschen <corinna@vinschen.de>
-
- * ntdll.h (struct _FILE_FS_OBJECTID_INFORMATION): Define.
- * path.cc (struct smb_extended_info): Define.
- (fs_info::update): Request object id info to get Samba information.
- Set flags according to new implementation.
- * path.h (struct fs_info): Add samba_version to status_flags.
- Implement flags() and samba_version() using IMPLEMENT_STATUS_FLAG.
-
-2008-01-21 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::link): Open file with
- READ_CONTROL for Vista/Longhorn's sake.
-
-2008-01-15 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (install-libs): Overwrite newlib's libg.a with symlink
- to libcygwin.a.
-
-2008-01-15 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (DLL_OFILES): Remove memmem.o.
- * memmem.cc: Remove in favor of newlib implementation.
-
-2008-01-07 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h: Update copyright.
- * include/limits.h: Ditto.
-
-2008-01-06 Christopher Faylor <me+cygwin@cgf.cx>
-
- * fhandler.h (fhandler_base::is_tty): Make bool.
- (fhandler_serial::is_tty): Ditto.
- (fhandler_termios::is_tty): Ditto.
- (fhandler_base::is_slow): Return bool value.
- (fhandler_socket::is_slow): Ditto.
- (fhandler_serial::is_slow): Ditto.
- (fhandler_console::is_slow): Ditto.
- (fhandler_tty_common::is_slow): Ditto.
- (fhandler_tty_master::is_slow): Ditto.
- (fhandler_dev_null::is_slow): Ditto.
-
-2008-01-06 Christopher Faylor <me+cygwin@cgf.cx>
-
- * include/limits.h (TTY_NAME_MAX): Increase size to same as linux to
- allow for (at least) null terminating byte for "/dev/console".
-
-2008-01-01 Christopher Faylor <me+cygwin@cgf.cx>
-
- * tty.cc: Update copyright.
- * pipe.cc: Ditto.
-
-2008-01-01 Christopher Faylor <me+cygwin@cgf.cx>
-
- * newsym: First stab at understanding data as well as functions.
-
- * pipe.cc (fhandler_pipe::init): Move more intelligence here.
- (fhandler_pipe::create): Simplify based on above change.
-
- * tty.cc (tty_list::allocate): Remove non-NT code.
diff --git a/winsup/cygwin/ChangeLog-2009 b/winsup/cygwin/ChangeLog-2009
deleted file mode 100644
index 5638e460c..000000000
--- a/winsup/cygwin/ChangeLog-2009
+++ /dev/null
@@ -1,3483 +0,0 @@
-2009-12-28 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (fhandler_socket::wait_for_events): Drop parameter default
- value.
- * fhandler_socket.cc (fhandler_socket::connect): Add false as second
- parameter to wait_for_events call.
- (fhandler_socket::accept): Ditto.
- (fhandler_socket::send_internal): Fix typo in call to wait_for_events.
-
-2009-12-26 Eric Blake <ebb9@byu.net>
-
- * include/pty.h (openpty, forkpty): Mark last two arguments const,
- to match glibc 2.8.
- * libc/bsdlib.cc (openpty, forkpty): Likewise.
-
-2009-12-25 Andy Koppe <andy.koppe@gmail.com>
-
- * fhandler_console.cc (handler_console::read): Use the tty's VERASE
- character as the backspace keycode.
-
-2009-12-24 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (symlink_info::check): Set fileattr to
- FILE_ATTRIBUTE_DIRECTORY in a certain error condition. Explain why.
-
-2009-12-22 Christopher Faylor <me+cygwin@cgf.cx>
-
- * select.cc (fhandler_fifo::select_read): Fill in device specific
- record.
- (fhandler_fifo::select_write): Ditto.
- (fhandler_fifo::select_except): Ditto.
-
-2009-12-21 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (cygwin_conv_path): Add band-aid including comment to avoid
- conversion from POSIX "." to Win32 ".\\".
-
-2009-12-21 Corinna Vinschen <corinna@vinschen.de>
-
- * exec.cc (execvp): Call find_exec with FE_NNF flag to enforce
- a NULL return when executable isn't found in $PATH. Convert NULL
- to "".
- (execvpe): Ditto.
- * spawn.cc (spawn_guts): Return with EFAULT if prog_arg is NULL.
- Return with ENOENT if prog_arg is empty string. Add a comment.
-
-2009-12-21 Thomas Wolff <towo@towo.net>
-
- * fhandler_console.cc (get_nonascii_key): Generate ESC prefix
- for Alt modifier generically for function keys and keypad keys.
- Distinguish Normal, Ctrl, Shift, Ctrl-Shift rather
- than Normal, Ctrl, Shift, Alt, so that in combination with generic
- Alt handling all 8 combinations of these modifiers are distinguished.
- (keytable): Add escape sequences for remaining modified
- function keys as a compatible extension using rxvt escape codes.
- Also distinguish keypad keys modified with Ctrl, Shift, Ctrl-Shift
- using xterm-style modifier coding.
-
-2009-12-21 Corinna Vinschen <corinna@vinschen.de>
-
- Throughout, revert ill-conceived replacement of hMainThread with
- GetCurrentThread/NtCurrentThread.
- * dcrt0.cc (dll_crt0_0): Duplicate main thread handle to hMainThread
- again.
-
-2009-12-19 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_console.cc (__vt100_conv): Minor formatting change.
-
-2009-12-19 Thomas Wolff <towo@towo.net>
-
- * fhandler_console.cc (write_console): Check for VT100
- graphics mode and transform wide characters in ASCII small
- letter range to corresponding graphics.
- (__vt100_conv): Table to transform small ASCII letters to line
- drawing graphics for use in VT100 graphics mode.
- (write_normal): Check for SO/SI control characters to
- enable/disable VT100 graphics mode.
- (base_chars): Enable SO/SI control characters for detection.
- (write): Check for ESC ( 0 / ESC ( B escape sequences to
- enable/disable VT100 graphics mode. Also detect ">" while
- parsing ESC [ sequences to distinguish specific requests.
- (char_command): Distinguish Secondary from Primary Device Attribute
- request to report more details about cygwin console terminal version.
- * fhandler.h (vt100_graphics_mode_active): New flag to indicate mode.
- (saw_greater_than_sign): New parse flag for ESC [ > sequences.
- (gotparen, gotrparen): New state values to parse ESC ( / ) sequences.
-
- * fhandler_console.cc (read): Allow combined Alt-AltGr modifiers
- to also produce an ESC prefix like a plain Alt modifier, e.g. to make
- Alt-@ work on a keyboard where @ is AltGr-q.
-
-2009-12-18 Eric Blake <ebb9@byu.net>
-
- * signal.cc (nanosleep): Fix bug in previous patch.
-
-2009-12-18 Corinna Vinschen <corinna@vinschen.de>
-
- Throughout, replace hMainProc with GetCurrentProcess/NtCurrentProcess
- according to context. Throughout, replace hMainThread with
- GetCurrentThread/NtCurrentThread according to context.
- * dcrt0.cc (dll_crt0_0): Drop duplication of GetCurrentProcess to
- hMainProc. Drop duplication of GetCurrentThread to hMainThread.
- * dtable.cc (dtable::stdio_init): Remove useless comment.
- * globals.cc (hMainProc): Remove.
- (hMainThread): Remove.
- * ntdll.h (NtCurrentProcess): Define.
- (NtCurrentThread: Define.
-
-2009-12-18 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (fhandler_registry::value_name): Convert to wchar_t*.
- * fhandler_registry.cc: Call UNICODE registry functions throughout
- and convert to multibyte using current locale's charset. Accommodate
- throughout.
- (must_encode): Take wchar_t.
- (encode_regname): Convert from wchar_t *.
- (decode_regname): Convert to wchar_t *.
-
-2009-12-18 Corinna Vinschen <corinna@vinschen.de>
-
- * path.sgml (func-cygwin-conv-path): Clarify meaning of size parameter.
- (func-cygwin-conv-path-list): Fix typo.
- (func-cygwin-posix-path-list-p): Ditto.
-
-2009-12-17 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (try_to_bin): Handle remote shares as well. Just rename
- files in this case, instead of moving them to the recycler. Create
- even more unique filename. Add comment to explain filename.
- (unlink_nt): Remove code returning with EBUSY on remote shares.
- Set bin_stat to move_to_bin except on NFS. Add comment to explain.
-
-2009-12-17 Eric Blake <ebb9@byu.net>
-
- * signal.cc (nanosleep): Support 'infinite' sleep times.
- (sleep): Avoid uninitialized memory.
-
-2009-12-16 Thomas Wolff <towo@towo.net>
-
- * fhandler_console.cc (read): Detect and handle mouse wheel scrolling
- events (for completion of mouse reporting mode 1000) and mouse
- movement events (for additional mouse reporting modes 1002 and 1003).
- Use mouse_aware() as a guard and only condition for mouse
- reporting in order to enforce consistence of read() and select().
- Add focus reports (for additional focus reporting mode 1004).
- (mouse_aware): Enable detection of additional mouse events for select().
- Tune function to precisely match actual reporting criteria.
- Move adjustment of mouse position (by window scroll offset)
- here to avoid duplicate code.
- (char_command): Initialization of enhanced mouse reporting modes.
- Initialization of focus reporting mode.
- * fhandler.h (use_mouse): Change flag (bool->int) to indicate
- additional mouse modes. Add flag to indicate focus reporting.
- (mouse_aware): Move enhanced function into fhandler_console.cc.
- * select.cc (peek_console): Use modified mouse_aware() for more
- general detection of mouse events. Also check for focus reports.
-
-2009-12-16 Corinna Vinschen <corinna@vinschen.de>
-
- * registry.cc (cygnus_class): Remove.
- (reg_key::build_reg): Don't set class when creating key.
-
-2009-12-15 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (cygwin_setsockopt): Only skip calling setsockopt(SO_REUSEADDR)
- on stream sockets under systems supporting enhanced socket security.
-
-2009-12-15 Thomas Wolff <towo@towo.net>
-
- * fhandler_console.cc (char_command): Fix code to select dim mode
- to 2 rather than 9. Add entries for mode 22 (normal, not bold)
- 28 (visible, not invisible), 25 (not blinking).
-
-2009-12-14 Corinna Vinschen <corinna@vinschen.de>
-
- * libc/getopt.c (getopt_internal): Set optreset according to optind
- setting earlier. Reevaluate POSIXLY_CORRECT if optreset is set to !0.
- Handle a leading '-' in options independently of posixly_correct.
-
-2009-12-09 Christopher Faylor <me+cygwin@cgf.cx>
-
- * fhandler_fifo.cc (fhandler_fifo::open): Avoid resetting errno after
- it has been explicitly set.
-
- * include/cygwin/version.h: Bump DLL minor version number to 2.
-
-2009-12-06 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/version.h: Bump DLL minor version number to 1.
-
-2009-12-02 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (send_internal): Don't split datagram messages
- into pieces.
-
- * syslog.cc (vsyslog): Set default facility to LOG_USER if it hasn't
- been set yet.
-
-2009-12-01 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_registry.cc (fhandler_registry::open): Mark /proc/registry
- directory and siblings as nohandle fhandler.
-
-2009-11-30 Christopher Faylor <me+cygwin@cgf.cx>
-
- * speclib: Use last dll found since that's the real name of the cygwin
- DLL.
-
-2009-11-27 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_base::fstat_helper): Fix typos in
- comments. Always open file synchronized when reading header bytes,
- otherwise suffer stack corruption.
-
-2009-11-26 Corinna Vinschen <corinna@vinschen.de>
-
- * dtable.cc (dtable::stdio_init): Use GetCurrentProcess() rather than
- hMainProc as process handle when duplicating the stdout handle.
- Explain why. Add Win32 error code to debug output.
-
-2009-11-23 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::fixup_before_fork_exec): Add
- socket handle value to debug output.
- (fhandler_socket::fixup_after_fork): Ditto. Make new socket handle
- OVERLAPPED, just as if it has been created with socket().
- * net.cc (fdsock): Close duplicated socket and explain why. Disable
- the entire WSADuplicateSocket test for now and explain why.
-
-2009-11-23 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::set_close_on_exec): Only call
- fhandler_base::set_close_on_exec for inheritable sockets.
-
-2009-11-21 Corinna Vinschen <corinna@vinschen.de>
-
- * globals.cc (ro_u_dll): New R/O unicode string.
- * syscalls.cc (nt_path_has_executable_suffix): Add ro_u_dll to
- blessed_executable_suffixes array. Explain why.
-
-2009-11-18 Corinna Vinschen <corinna@vinschen.de>
-
- * flock.cc (fhandler_disk_file::lock): Disable a shortcut from the
- original BSD code, but keep it in and documented why we can't use it.
-
-2009-11-18 Corinna Vinschen <corinna@vinschen.de>
-
- * ntea.cc (read_ea): Always add length of "user." prefix, not only
- on Samba. Change comment.
-
-2009-11-18 Corinna Vinschen <corinna@vinschen.de>
-
- * ntea.cc (read_ea): Try to open file first to have more sensible
- error codes. Always refuse non "user." EAs for Linux compatibility
- and return EOPNOTSUPP. Fix handling of empty (== non-existant) EAs.
- Always prepend "user." prefix to EA names.
- (write_ea): Try to open file first to have more sensible error codes.
- Always refuse non "user." EAs for Linux compatibility and return
- EOPNOTSUPP. Delay skipping "user." prefix until after potential call
- to read_ea.
-
-2009-11-17 Corinna Vinschen <corinna@vinschen.de>
-
- Reintegrate socket duplication via WSADuplicateSocket/WSASocket.
- * autoload.cc (WSADuplicateSocketW): Define.
- (WSASocketW): Define.
- * dtable.cc (dtable::release): Call dec_need_fixup_before if necessary.
- (dtable::fixup_before_fork): New function.
- (dtable::fixup_before_exec): New function.
- * dtable.h (class dtable): Add member cnt_need_fixup_before. Add
- declarations for above new functions.
- (dtable::dec_need_fixup_before): New inline method.
- (dtable::inc_need_fixup_before): New inline method.
- (dtable::need_fixup_before): New inline method.
- * fhandler.h (fhandler_base::fixup_before_fork_exec): New virtual
- method.
- (fhandler_base::need_fixup_before): New virtual method.
- (class fhandler_socket): Add member prot_info_ptr.
- (fhandler_socket::init_fixup_before): Declare.
- (fhandler_socket::need_fixup_before): New inline method.
- (fhandler_socket::fixup_before_fork_exec): Declare.
- (fhandler_socket::fixup_after_exec): Declare.
- * fhandler_socket.cc (fhandler_socket::fhandler_socket): Initialize
- prot_info_ptr to NULL.
- (fhandler_socket::~fhandler_socket): Free prot_info_ptr conditionally.
- (fhandler_socket::init_fixup_before): New method.
- (fhandler_socket::fixup_before_fork_exec): Ditto.
- (fhandler_socket::fixup_after_fork): Use WSASocketW to duplicate
- socket if necessary.
- (fhandler_socket::fixup_after_exec): New method.
- (fhandler_socket::dup): Use fixup_before_fork_exec/fixup_after_fork
- to duplicate socket if necessary.
- * fork.cc (frok::parent): Start child suspended if some fhandler
- needs fixup before fork. If so, call dtable::fixup_before_fork after
- CreateProcess and resume child.
- * net.cc (fdsock): Try to find out if socket needs fixup before and
- initialize socket accordingly. Add HUGE comment to explain what happens
- and why.
- * spawn.cc (spawn_guts): Start child suspended if some fhandler needs
- fixup before exec. If so, call dtable::fixup_before_exec after
- CreateProcess.
-
-2009-11-16 Eric Blake <ebb9@byu.net>
-
- * environ.cc (setenv): Detect invalid argument.
- (unsetenv): Distinguish EFAULT from EINVAL.
-
-2009-11-13 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (fdsock): Fill _rmem and _wmem with valid values returned
- from getsockopt if setsockopt with desired values failed.
-
-2009-11-12 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
- Corinna Vinschen <corinna@vinschen.de>
-
- * sysconf.cc (get_nprocs): New function.
- (get_nprocs_conf): Ditto.
- (get_avphys_pages): Ditto.
- (get_phys_pages): Ditto.
- * cygwin.din: Export them.
- * include/sys/sysinfo.h: New header, decalre above new functions.
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
- * posix.sgml: Mention them as GNU extensions.
-
-2009-11-11 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (class fhandler_mailslot): Declare new private method
- get_object_attr.
- * fhandler_mailslot.cc (fhandler_mailslot::get_object_attr): Implement.
- (fhandler_mailslot::open): Replace calls to path_conv::get_object_attr
- with calls to fhandler_mailslot::get_object_attr.
-
-2009-11-10 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_console.cc (fhandler_console::read): Revert change from
- 2009-11-09.
-
-2009-11-10 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (is_volume_mountpoint): Align check with
- symlink_info::check_reparse_point().
- * path.cc (symlink_info::check_reparse_point): Rearrange slightly.
- Add code path for unrecognized repare point types. Add comment.
-
-2009-11-09 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (symlink_info::check_reparse_point): Always check
- SubstituteName for volume string to recognize volume mount points.
- Reuse subst when calling sys_wcstombs.
- * syscalls.cc (rename): Set errno to EBUSY when trying to rename
- volume mount points. Explain why.
-
-2009-11-09 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_console.cc (fhandler_console::read): Restrict generating
- META key sequences to singlebyte input chars.
-
-2009-11-08 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_base::fstat_helper): Drop all "other"
- permissions from st_mode, if the reading the file's security descriptor
- failed. Explain why.
-
-2009-11-06 Corinna Vinschen <corinna@vinschen.de>
-
- * globals.cc (ro_u_scr): New R/O unicode string.
- (ro_u_sys): Ditto.
- * syscalls.cc (nt_path_has_suffix): Replace with ...
- (nt_path_has_executable_suffix): New function checking for explicit
- executable suffixes.
- (rename): Call nt_path_has_executable_suffix instead of
- nt_path_has_suffix. Check oldpath for nt_path_has_executable_suffix
- as well to set old_explicit_suffix.
-
-2009-11-06 Corinna Vinschen <corinna@vinschen.de>
-
- * shared.cc (inst_root_inited): New static bool variable.
- (init_installation_root): Set inst_root_inited to true.
- (memory_init): Print installation root debug output only if
- inst_root_inited is true.
-
-2009-11-05 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (nt_path_has_suffix): New function.
- (rename): Don't append .exe suffix if binary target name has any suffix
- at all.
-
-2009-11-05 Corinna Vinschen <corinna@vinschen.de>
-
- * spawn.cc (dll_suffixes): Disable. Explain why.
- (perhaps_suffix): Use stat_suffixes instead of dll_suffixes.
-
-2009-11-03 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (alloc_sd): Re-introduce setting the SE_DACL_PROTECTED
- flag. Remove INHERITED_ACE flag from all inherited ACEs. Add comment.
- Fix ace_off counter in unrelated ACE loop.
- * wincap.cc: Re-add has_dacl_protect throughout.
- * wincap.h: Ditto.
-
-2009-11-02 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (alloc_sd): Re-enable generating default permission
- entries for directories.
-
-2009-11-02 Corinna Vinschen <corinna@vinschen.de>
-
- * dlfcn.cc (get_full_path_of_dll): Drop enforcing a .dll suffix.
- (dlopen): If last path component has no dot, append one to override
- automatic .dll suffix in LoadLibrary.
-
-2009-11-02 Corinna Vinschen <corinna@vinschen.de>
-
- * miscfuncs.h (transform_chars): Declare. Define inline variation here.
- * mount.cc (mount_info::from_fstab): Remove extern declaration of
- transform_chars.
- * path.cc (tfx_chars): Move to strfuncs.cc.
- (transform_chars): Ditto.
- * strfunc.cc (tfx_chars): Moved here from path.cc.
- (transform_chars): Ditto.
- (sys_cp_wcstombs): Make UNICODE private use area conversion roundtrip
- save for all characters.
- (sys_cp_mbstowcs): Ditto, by removing special case for UTF-8 sequences
- representing U+F0xx UNICODE chars. Fix typo in comment.
-
-2009-11-02 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (tfx_chars): Constify.
-
-2009-10-31 Corinna Vinschen <corinna@vinschen.de>
-
- * cygprops.h: New file.
- * dtable.cc (handle_to_fn): Add check for correct installation_key
- string in object name for pipes and ttys.
- * external.cc (cygwin_internal): Add CW_GET_INSTKEY to allow fetching
- the installation_key from cygserver.
- * fhandler_fifo.cc (fhandler_fifo::fifo_name): Add installation_key
- to fifo name.
- * globals.cc: Include cygprops.h.
- (_RDATA): Move slightly and add comment.
- (cygwin_props): Define.
- * mount.cc (mount_info::init): Accommodate the fact that
- installation_root is now a global variable in DLL common shared memory,
- rather than a member of cygwin_shared.
- * pipe.cc (fhandler_pipe::create_selectable): Add installation_key to
- pipe name.
- * shared.cc (installation_root): Define here for storage in DLL
- common shared memory.
- (installation_key): Ditto.
- (installation_key_buf): Ditto.
- (init_installation_root): Convert from shared_info method to ordinary
- function. Add initializing installation_key. Invalidate
- installation_key depending of value of disable_key property. Add
- comment to explain.
- (get_shared_parent_dir): Add installation_key to directory name.
- (get_session_parent_dir): Ditto.
- (shared_info::initialize): Move call to init_installation_root from
- here...
- (memory_init): ...to here. Add debug output to print installation root
- and installation key. Add comment to explain why.
- * shared_info.h (SHARED_INFO_CB): Recalculate.
- (CURR_SHARED_MAGIC): Ditto.
- (class shared_info): Remove definition of installation_root and
- declaration of init_installation_root.
- (init_installation_root): Declare.
- (installation_root): Declare.
- (installation_key): Declare.
- * uinfo.cc (pwdgrp::load): Accommodate the fact that installation_root
- is now a global variable in DLL common shared memory.
- * include/cygwin/version.h: Bump API minor number.
- (CYGWIN_INFO_INSTALLATIONS_NAME): Add.
- * include/sys/cygwin.h (cygwin_getinfo_types): Add CW_GET_INSTKEY.
-
-2009-10-31 Corinna Vinschen <corinna@vinschen.de>
-
- * sec_helper.cc (security_descriptor::realloc): Call free first if
- current security desriptor has been allocated by GetSecurityInfo.
-
-2009-10-30 Corinna Vinschen <corinna@vinschen.de>
-
- * sec_helper.cc (security_descriptor::free): If sd_size is 0, call
- LocalFree instead of ::free.
-
- * sec_acl.cc: Throughout replace old ACE flag definitions with current
- definitions as used in MSDN man pages.
- * security.cc: Ditto.
-
- * fhandler.cc (fhandler_base::open): Make sure file has really been
- just created before fixing file permissions. Add S_JUSTCREATED
- attribute to set_file_attribute call.
- * fhandler_disk_file.cc (fhandler_disk_file::mkdir): Always create dir
- with default security descriptor and fix descriptor afterwards.
- Add S_JUSTCREATED flag to set_file_attribute call.
- * fhandler_socket.cc (fhandler_socket::bind): Ditto for AF_LOCAL
- socket files.
- * path.cc (symlink_worker): Ditto for symlinks.
- * security.cc (get_file_sd): Call GetSecurityInfo rather than
- NtQuerySecurityObject. Explain why. Change error handling accordingly.
- (alloc_sd): Skip non-inherited, non-standard entries in ACL if
- S_JUSTCREATED attribute is set. Explain why. Minor format fixes.
- * security.h (S_JUSTCREATED): New define.
- (security_descriptor::operator=): New operator.
-
-2009-10-30 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_random.cc (fhandler_dev_random::lseek): Revert change from
- 2009-10-23.
-
-2009-10-30 Corinna Vinschen <corinna@vinschen.de>
-
- * smallprint.cc (hex_str): New const string.
- (__rn): Drop str and use hex_str instead.
- (__small_vsprintf): If 'l' modifier has been found, print subsequent
- multibyte or wide char string using the s, S, or W options in extended
- hex value layout.
-
- * fhandler_disk_file.cc (fhandler_disk_file::readdir): Print WCHAR
- and resulting multibyte filename in extended hex value layout in
- debug output.
-
-2009-10-26 Charles Wilson <cygwin@cwilson.fastmail.fm>
-
- * lib/pseudo-reloc.c (__report_error) [CYGWIN]: Correct size bug
- regarding error messages.
-
-2009-10-25 Charles Wilson <cygwin@cwilson.fastmail.fm>
-
- Sync pseudo-reloc.c with mingw64
- * lib/psuedo-reloc.c: Remove unnecessary includes.
- Forward declare _pei386_runtime_relocator.
- Decorate _image_base__ symbol with macro for
- mingw64 compatibility. Whitespace changes.
- (__print_reloc_error): Renamed to...
- (__report_error): This. "Returns" void, and
- always aborts. Now used on all platforms.
- (__write_memory): Remove special case error handling
- for different platforms - always call __report_error.
- (do_pseudo_reloc): Remove special case error handling
- for different platforms - always call __report_error.
- (_pei386_runtime_relocator): Decorate _image_base__
- symbol with mingw64 compatibility macro.
-
-2009-10-24 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::open): Remove unused variables sa and sd.
-
-2009-10-23 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::open): Always create file with default
- security descriptor and fix descriptor afterwards. Change comment to
- explain why.
- * security.cc (alloc_sd): Drop setting the SE_DACL_PROTECTED flag.
- * wincap.cc: Remove has_dacl_protect throughout.
- * wincap.h: Ditto.
-
-2009-10-23 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_random.cc (fhandler_dev_random::lseek): Allow negative
- dummy file positions as on Linux.
-
-2009-10-20 Corinna Vinschen <corinna@vinschen.de>
-
- * registry.cc (reg_key::get_int): Add alternative implementation
- taking WCHAR strings.
- (reg_key::set_int): Ditto.
- (reg_key::get_string): Ditto.
- (reg_key::set_string): Ditto.
- * registry.h (struct reg_key): Add prototypes for added methods.
-
-2009-10-20 Corinna Vinschen <corinna@vinschen.de>
-
- * smallprint.cc (__small_vsprintf): Simplify UNICODE string handling
- and allow empty strings.
-
-2009-10-20 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhander_disk_file::readdir): Handle a status
- code STATUS_NOT_SUPPORTED. Add matching comment.
-
-2009-10-19 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (internal_setlocale): Only convert $PATH if there is a
- $PATH.
-
-2009-10-19 Corinna Vinschen <corinna@vinschen.de>
-
- * spawn.cc (av::fixup): Treat non-readable, but executable files as
- Cygwin executables.
-
-2009-10-18 Corinna Vinschen <corinna@vinschen.de>
-
- * uinfo.cc (uinfo_init): Deimpersonate, don't reimpersonate, if
- not in a setuid condition.
-
-2009-10-13 Eric Blake <ebb9@byu.net>
-
- * external.cc (cygwin_internal): Use va_end.
- * fork.cc (child_copy): Likewise.
- * libc/bsdlib.cc (warn, warnx, err, errx): Likewise.
- * pinfo.cc (commune_request): Likewise.
- * strace.cc (strace::prntf, strace_printf): Likewise.
-
-2009-10-13 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
-
-2009-10-13 Christian Franke <franke@computer.org>
- Corinna Vinschen <corinna@vinschen.de>
-
- * include/sys/cygwin.h: Add new cygwin_getinfo_type
- CW_SET_EXTERNAL_TOKEN.
- Add new enum CW_TOKEN_IMPERSONATION, CW_TOKEN_RESTRICTED.
- * cygheap.h (cyguser): New flags ext_token_is_restricted,
- curr_token_is_restricted and setuid_to_restricted.
- * external.cc (cygwin_internal): Add CW_SET_EXTERNAL_TOKEN.
- * sec_auth.cc (set_imp_token): New function.
- (cygwin_set_impersonation_token): Call set_imp_token ().
- * security.h (set_imp_token): New prototype.
- * spawn.cc (spawn_guts): Use CreateProcessAsUserW if restricted token
- was enabled by setuid(). Do not create new window station in this case.
- * syscalls.cc (seteuid32): Add handling of restricted external tokens.
- Set HANDLE_FLAG_INHERIT for primary token.
- (setuid32): Set setuid_to_restricted flag.
- * uinfo.cc (uinfo_init): Do not reimpersonate if restricted token was
- enabled by setuid (). Initialize user.*_restricted flags.
-
-2009-10-13 Eric Blake <ebb9@byu.net>
-
- * hires.h (hires_ms): Change initime_us to initime_ns, with 10x
- more resolution.
- (hires_ms::nsecs): New prototype.
- (hires_ms::usecs, hires_ms::msecs, hires_ms::uptime): Adjust.
- * times.cc (systime_ns): New helper function.
- (hires_ms::prime): Use it for more resolution.
- (hires_ms::usecs): Change to...
- (hires_ms::nsecs): ...with more resolution.
- (clock_gettime): Use more resolution.
- (systime): Rewrite in terms of systime_ns.
- (timespec_to_filetime): Rewrite math to reflect true operation.
- * fhandler_disk_file.cc (utimens_fs): Use higher resolution.
-
-2009-10-12 Corinna Vinschen <corinna@vinschen.de>
-
- * external.cc (cygwin_internal): Return 0 in CW_SET_DOS_FILE_WARNING
- and CW_SETERRNO cases.
-
-2009-10-12 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::link): Only append .lnk
- if the original device had one, too. Add comment.
-
- * fhandler_socket.cc (fhandler_socket::fstat): Always return a size of
- 0 on sockets.
-
-2009-10-09 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (tfx_chars): Convert all ASCII control characters except
- ASCII NUL as well. Change layout to make the conversions more clear.
- Add comment.
-
-2009-10-09 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/config.h (DEFAULT_LOCALE): Define as "C.UTF-8".
-
-2009-10-08 Christopher Faylor <me+cygwin@cgf.cx>
-
- * exceptions.cc (_cygtls::signal_exit): There's no need to set
- signal_arrived if we're exiting.
-
-2009-10-08 Eric Blake <ebb9@byu.net>
-
- * fhandler_disk_file.cc (utimens_fs): Plug fd leak on EINVAL.
-
-2009-10-07 Charles Wilson <cygwin@cwilson.fastmail.fm>
-
- Additional pseudo-reloc-v2 support
- * ntdll.h: Add custom NTSTATUS value for pseudo-reloc
- errors STATUS_ILLEGAL_DLL_PSEUDO_RELOCATION.
- * pinfo.cc (status_exit): Map custom pseudo-reloc
- error value STATUS_ILLEGAL_DLL_PSEUDO_RELOCATION to 127.
- * sigproc.cc (child_info::proc_retry): Return exit code when
- STATUS_ILLEGAL_DLL_PSEUDO_RELOCATION.
-
- Cygwin modifications to pseudo-reloc.c
- * lib/pseudo-reloc.c: Added comments throughout and various
- whitespace fixes. Exploit cygwin_internal(CW_EXIT_PROCESS,...)
- for fatal error handling that is consistent with cygwin process
- life-cycle. Ensure state variable (in _pei386_runtime_relocator)
- is unique to each address space, across fork().
- (__print_reloc_error): New function for reporting errors in a
- manner supported by cygwin at this early stage of the process
- life-cycle.
- (_pei386_runtime_relocator): Ensure relocations performed
- only once for each address space, but are repeated after fork()
- in the new address space.
- only once for each address space (e.g. across fork()).
- (__write_memory) [MINGW]: Ensure that b is always initialized
- by call to VirtualQuery, even if -DNDEBUG.
-
- * lib/pseudo-reloc.c: Import new implementation to support
- v2 pseudo-relocs implemented by Kai Tietz from mingw.
-
-2009-10-07 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (seteuid32): Call set_cygwin_privileges on primary token
- as well.
-
-2009-10-07 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (fhandler_pty_master::tcgetpgrp): Declare.
- * fhandler_termios.cc (fhandler_termios::tcgetpgrp): Only return
- valid pgid if tty is controlling tty. Set errno to ENOTTY and
- return -1 otherwise.
- (fhandler_pty_master::tcgetpgrp): New function. Return 0 for
- master side of pty if it's not the controlling tty of the process.
-
-2009-10-05 Charles Wilson <cygwin@cwilson.fastmail.fm>
-
- Add cygwin wrapper for ExitProcess and TerminateProcess.
- * include/sys/cygwin.h: Declare new cygwin_getinfo_type
- CW_EXIT_PROCESS.
- * external.cc (exit_process): New function.
- (cygwin_internal): Handle CW_EXIT_PROCESS.
- * pinfo.h (pinfo::set_exit_code): New method.
- * pinfo.cc (pinfo::set_exit_code): New, refactored from...
- (pinfo::maybe_set_exit_code_from_windows): here. Call it.
- * include/cygwin/version.h: Bump CYGWIN_VERSION_API_MINOR
- to 215 to reflect the above change.
-
-2009-10-05 Charles Wilson <cygwin@cwilson.fastmail.fm>
-
- * exceptions.cc: Move global variable sigExeced...
- * globals.cc: here.
- * pinfo.cc (pinfo::maybe_set_exit_code_from_windows): Remove now
- unneeded declaration.
-
-2009-10-04 Dave Korn <dave.korn.cygwin@gmail.com>
-
- * Makefile.in (CFLAGS): Add -mno-use-libstdc-wrappers.
-
-2009-10-04 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (internal_setlocale): Add comment.
-
-2009-10-02 Corinna Vinschen <corinna@vinschen.de>
-
- * dcrt0.cc (dll_crt0_1): Drop calls to setlocale/_setlocale_r. Just
- call initial_setlocale from here.
- * syscalls.cc (initial_setlocale): Set internal charset and revert
- application locale to "C".
- (setlocale): Don't set Cygwin's internal charset here.
-
-2009-10-02 Christopher Faylor <me+cygwin@cgf.cx>
-
- * dcrt0.cc (dll_crt0_1): Move cxx_malloc reset kluge from here.
- (check_sanity_and_sync): to here.
-
-2009-09-30 Christopher Faylor <me+cygwin@cgf.cx>
-
- * path.cc (has_dot_last_component): Rewrite to detect some corner cases
- that were previously uncaught.
-
-2009-09-30 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_console.cc (beep): Move up to avoid forward declaration.
- (fhandler_console::read): Just beep on characters invalid in current
- charset. Add comment.
-
-2009-09-29 Eric Blake <ebb9@byu.net>
-
- * syscalls.cc (rename): Fix regression in rename("dir","d/").
-
-2009-09-29 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::recv_internal): Always call
- WSARecv on SOCK_STREAM sockets.
-
-2009-09-28 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (class dev_console): Constify charset parameter of
- str_to_con.
- * fhandler_console.cc (dev_console::con_to_str): Simplify. Always
- default to the current internal locale.
- (dev_console::get_console_cp): Always use codepage 437 for alternate
- charset.
- (dev_console::str_to_con): Constify charset parameter.
- (fhandler_console::write_normal): Always use codepage 437 for alternate
- charset. Otherwise always default to the current internal locale.
- Replace ASCII SO with ASCII CAN.
- * strfuncs.cc: Tweak comments according to below changes.
- (sys_cp_wcstombs): Constify charset parameter. Convert all wchar_t
- values in the Unicode private use area U+F0xx to the singlebyte
- counterpart. Drop special handling creating ASCII SO sequence from
- U+DCxx value. Rearrange for performance. Replace ASCII SO with
- ASCII CAN.
- (sys_cp_mbstowcs): Constify charset parameter. Replace ASCII SO with
- ASCII CAN. Drop special case for U+DCxx ASCII SO sequences. Always
- create a replacement from the Unicode private use area U+F0xx for
- invalid byte values in a multibyte sequence. Do the same for wchar_t
- values from the U+F0xx range to make them roundtrip safe.
- * wchar.h (sys_cp_wcstombs): Constify charset parameter.
- (sys_cp_mbstowcs): Ditto.
-
-2009-09-28 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.cc (cygheap_init): Default locale.charset to "UTF-8".
- * dcrt0.cc (dll_crt0_1): Call setlocale (LC_CTYPE, "") here, just
- before resetting application locale to "C".
- * environ.cc (environ_init): Drop code setting locale here.
- * syscalls.cc (check_codepage): Break out check for required codepage
- from internal_setlocale.
- (internal_setlocale): Just convert CWD and $PATH from old charset to
- new charset and set internal charset.
- (setlocale): Change accordingly. Don't require LC_ALL or LC_CTYPE to
- store old locale value. Always call internal_setlocale if charset
- changed due to locale environment changes.
-
-2009-09-26 Eric Blake <ebb9@byu.net>
-
- * exec.cc (fexecve): New function.
- * cygwin.din (execvpe, fexecve): Export new fexecve and existing
- execvpe.
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
- * posix.sgml: Mention them.
-
-2009-09-26 Eric Blake <ebb9@byu.net>
-
- * syscalls.cc (link): Delete obsolete comment. Reject directories
- and missing source up front.
- (rename): Use correct errno for trailing '.'. Detect empty
- strings. Allow trailing slash to newpath iff oldpath is
- directory.
- * dir.cc (mkdir): Reject dangling symlink with trailing slash.
- * fhandler_disk_file.cc (fhandler_disk_file::link): Reject
- trailing slash.
- * fhandler.cc (fhandler_base::link): Match Linux errno.
-
-2009-09-25 Eric Blake <ebb9@byu.net>
-
- * syscalls.cc (fchmodat): lchmod is not yet implemented.
- (euidaccess): New function.
- * path.cc (realpath): Update comment.
- (canonicalize_file_name): New function.
- * include/cygwin/stdlib.h (canonicalize_file_name): Declare it.
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
- * cygwin.din: Export canonicalize_file_name, eaccess, euidaccess.
- * posix.sgml: Mention them.
-
-2009-09-25 Eric Blake <ebb9@byu.net>
-
- * fhandler.h (fhandler_base::fhaccess): Add parameter.
- * security.h (check_file_access, check_registry_access): Likewise.
- * security.cc (check_file_access, check_registry_access)
- (check_access): Implement new parameter.
- * fhandler.cc (fhandler_base::fhaccess): Likewise.
- (device_access_denied): Update caller.
- * syscalls.cc (access, faccessat): Update callers.
- * spawn.cc (find_exec, fixup): Likewise.
-
-2009-09-24 Corinna Vinschen <corinna@vinschen.de>
-
- * posix_ipc.cc (mq_open): Avoid closing the same descriptor twice in
- case of errors.
- (sem_open): Ditto.
-
-2009-09-24 Corinna Vinschen <corinna@vinschen.de>
-
- * kernel32.cc (CreateMutexW): Use correct access mask.
- (CreateSemaphoreW): Ditto.
-
-2009-09-23 Corinna Vinschen <corinna@vinschen.de>
-
- * strfuncs.cc (__set_charset_from_codepage): Fetch current ANSI
- codepage if cp is 0.
-
-2009-09-23 Corinna Vinschen <corinna@vinschen.de>
-
- * strfuncs.cc (sys_cp_wcstombs): Convert lone surrogate pair
- second halves to unambiguous ASCII SO sequence. When converting
- chars invalid in current codepage to ASCII SO sequence, make
- sure to check for surrogate pair second half only if at least
- one wide characters is left. Decrement nwc if valid second half has
- been converted.
- (sys_cp_mbstowcs): Improve ASCII SO handling. Never break from loop
- if invalid character has been found. Recognize ASCII SO sequence
- representing originally invalid mulitbyte char converted into a
- lone surrogate pair second half. Convert accordingly.
-
-2009-09-22 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (WSARecv): Define.
- * fhandler_socket.cc (fhandler_socket::recv_internal): Call WSARecv
- instead of WSARecvFrom if no name parameter is given. Explain why.
-
-2009-09-22 Eric Blake <ebb9@byu.net>
-
- * syscalls.cc (faccessat): Fix typo, reject bad flags.
- (fchmodat, fchownat, fstatat, utimensat, linkat, unlinkat): Reject
- bad flags.
-
-2009-09-22 Corinna Vinschen <corinna@vinschen.de>
-
- * strfuncs.cc (sys_cp_mbstowcs): Reset shift state after handling
- invalid multibyte sequence.
-
-2009-09-22 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (symlink_worker): Rework error handling to generate Linux
- compatible errno in case of trailing slash in newpath.
-
-2009-09-22 Eric Blake <ebb9@byu.net>
-
- * dtable.h (OPEN_MAX_MAX): New macro.
- * resource.cc (getrlimit) [RLIMIT_NOFILE]: Use it.
- * dtable.cc (dtable::extend): Likewise.
- * fcntl.cc (fcntl64): Obey POSIX rule with too-large F_DUPFD.
- * syscalls.cc (dup2): Likewise.
-
-2009-09-21 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.h (cwdstuff::get_posix): Convert to const inline method just
- returning pointer to posix path.
- (cwdstuff::reset_posix): Convert to non-inline method taking a wchar_t
- pointer.
- * path.cc (cwdstuff::set): Revert change from 2009-05-13. Set posix
- to valid incoming path again.
- (cwdstuff::reset_posix): New implementation setting posix path from
- incoming wchar_t path. Explain usage.
- (cwdstuff::get_posix): Drop implementation.
- (cwdstuff::get): Drop special case to handle empty posix path.
- * syscalls.cc (internal_setlocale): Store old posix cwd as wide char
- path. Restore posix cwd using new charset. Explain why.
-
-2009-09-21 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::link): Drop faking hardlink
- creation on filesystems not supporting hardlinks.
-
-2009-09-20 Christopher Faylor <me+cygwin@cgf.cx>
-
- * dcrt0.cc (dll_crt0_1): Add another hack to REALLY make sure that
- cxx_malloc is always set to the cygwin version.
-
-2009-09-20 Christopher Faylor <me+cygwin@cgf.cx>
-
- * external.cc (cygwin_internal): Add hack to always reset cxx_malloc to
- proper value.
-
- * lib/_cygwin_crt0_common.cc (_cygwin_crt0_common): Relocate wayward
- comment.
-
-2009-09-19 Christopher Faylor <me+cygwin@cgf.cx>
-
- * exceptions.cc (sigpacket::process): Explicitly set thread-specific
- handler function to zero to avoid transferring to incorrect location.
- (_cygtls::call_signal_handler): Don't transfer to handler if there is
- no handler to transfer to.
-
-2009-09-18 Christopher Faylor <me+cygwin@cgf.cx>
-
- * exceptions.cc (sigpacket::process): Give sigwait() processing
- precedence even when a handler is present.
-
- * syscalls.cc (getpagesize): Change return to 'int'.
-
-2009-09-16 Christopher Faylor <me+cygwin@cgf.cx>
-
- * ntea.c (write_ea): Don't abort if not-samba.
-
-2009-09-01 Christopher Faylor <me+cygwin@cgf.cx>
-
- * select.cc (peek_console): Always check window size when there is ANY
- keyboard activity.
-
-2009-08-26 Corinna Vinschen <corinna@vinschen.de>
-
- * path.h (INTERIX_SYMLINK_COOKIE): Define.
- * path.cc (symlink_info::check_sysfile): Read Interix symlinks as well.
-
-2009-08-26 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::open): Only set R/O attribute if ACLs
- are not used.
-
-2009-08-24 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (fs_info::update): Add comment.
- * path.cc (symlink_info::check_reparse_point): Return -1 for volume
- mount points. Explain why.
- (symlink_info::check): Call fs.update again for volume mount points.
- Explain why.
-
-2009-08-24 Corinna Vinschen <corinna@vinschen.de>
-
- * globals.cc (ro_u_volume): New R/O unicode string.
- * path.cc (symlink_info::check_reparse_point): Fix check for volume
- mount points to work on Vista and later as well.
-
-2009-08-22 Corinna Vinschen <corinna@vinschen.de>
-
- * strfuncs.cc (__set_charset_from_codepage): Add codepages 20866
- (KOI8-R) and 21866 (KOI8-U).
-
-2009-08-21 Christopher Faylor <me+cygwin@cgf.cx>
-
- * dll_init.h (has_dtors): New flag.
- (run_dtors): New wrapper function which avoids calling dtors more than
- once.
- * dll_init.cc (dll_global_dtors): Use dll.run_dtors wrapper.
- (dll_list::detach): Ditto.
- (dll_list::alloc): Set has_dtors flag.
-
-2009-08-21 Christopher Faylor <me+cygwin@cgf.cx>
-
- * fcntl.cc (fcntl64): Detect negative fd as error.
-
-2009-08-21 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (mmap64): Allocate fh_disk_file on cygheap. Delete
- explicitely before returning.
-
-2009-08-20 Corinna Vinschen <corinna@vinschen.de>
-
- * dtable.cc (build_fh_dev): Take additional bool parameter indicating
- whether set_name should be called or not.
- (dtable::dup_worker): Call build_fh_pc with new second parameter set
- to false. Explain why. If fhandler's dup failed, delete rather than
- cfree newfh and set newfh to NULL to indicate failure correctly.
- * dtable.h (build_fh_pc): Change declaration according to above change.
- Default set_name parameter to true.
- * mmap.cc (mmap_record::free_fh): Delete rather than cfree fh.
-
-2009-08-18 Christopher Faylor <me+cygwin@cgf.cx>
-
- * dtable.cc (dtable::fixup_after_exec): Close any popen'ed file handles here.
- * fhandler.h (fhandler_*::ispipe): New function.
- (fhandler_base::get_popen_pid): Define virtual function.
- (fhandler_*::isdevice): Make const.
- (fhandler_*::isfifo): Ditto.
-
-2009-08-17 Christopher Faylor <me+cygwin@cgf.cx>
-
- * syscalls.cc (popen): Reorganize slightly for clarity. Fix a comment.
-
-2009-08-17 Christopher Faylor <me+cygwin@cgf.cx>
-
- * syscalls.cc (popen): Rewrite to accommodate situations where stdin,
- stdout, or stderr are closed.
-
-2009-08-17 Christopher Faylor <me+cygwin@cgf.cx>
-
- * pipe.cc (fhandler_pipe::create_selectable): Add -pipe to default pipe names.
-
- * lib/_cygwin_crt0_common.cc (_cygwin_crt0_common): Use bool/true/false
- for what is actually a boolean variable.
-
-2009-08-14 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::readdir): Fix length
- check for ".." dir.
-
-2009-08-14 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::readdir): Change comment
- to be fair.
-
-2009-08-14 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::readdir_helper): Remove
- ill-advised attempt to optimize "." and ".." handling by checking for
- specific position in directory listing. Explain why.
- (fhandler_disk_file.cc (fhandler_disk_file::readdir): Ditto.
- Special-case opening file on NFS to fetch inode number and add longish
- comment to explain why.
-
-2009-08-14 Corinna Vinschen <corinna@vinschen.de>
-
- * (fhandler_socket::getsockname): Fix length returned for unbound
- AF_LOCAL sockets.
- (fhandler_socket::getpeername): Ditto.
- * net.cc (socketpair): Don't set sun_path and peer_sun_path to
- make sure getsockname and getpeername return the correct values
- for AF_LOCAL sockets.
-
-2009-08-13 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::accept): Use sizeof rather
- then constant size. Truncate returned data, but return full address
- length as per POSIX.
- (fhandler_socket::getsockname): Truncate returned data, but return full
- address length as per POSIX.
- (fhandler_socket::getpeername): Ditto.
-
-2009-08-13 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (class fhandler_socket): Add peer_sun_path member.
- (fhandler_socket::set_peer_sun_path): New method.
- (fhandler_socket::get_peer_sun_path): New method.
- * fhandler_socket.cc (fhandler_socket::fhandler_socket): Initialize
- peer_sun_path to NULL.
- (fhandler_socket::~fhandler_socket): Free peer_sun_path if necessary.
- (fhandler_socket::dup): Duplicate peer_sun_path.
- (fhandler_socket::accept): Ditto. Return fake unbound peer content
- and len in case of AF_LOCAL sockets.
- (fhandler_socket::getsockname): Always use local sockaddr_storage to
- store socket address and copy over to incoming address. Handle every
- namelen correctly per POSIX.
- (fhandler_socket::getpeername): Ditto. Add code path to return
- correct value for AF_LOCAL sockets.
- (fhandler_socket::set_peer_sun_path): New method.
- * net.cc (socketpair): Set peer_sun_path to empty string, just like
- sun_path.
-
-2009-08-13 Corinna Vinschen <corinna@vinschen.de>
- Dave Korn <dave.korn.cygwin@googlemail.com>
-
- * cxx.cc (default_cygwin_cxx_malloc): Enhance commenting.
- * dll_init.cc (dll_dllcrt0_1): Likewise.
- * dlfcn.cc (dlopen): Prevent dlopen()'d DLL from installing any
- cxx malloc overrides.
- * include/cygwin/cygwin_dll.h (__dynamically_loaded): New variable.
- * lib/_cygwin_crt0_common.cc (_cygwin_crt0_common): Check it and only
- install cxx malloc overrides when statically loaded. Extend comments.
-
-2009-08-12 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::accept): Always use local
- sockaddr_storage to store peer address and copy over to incoming
- peer address if available. Truncate data as necessary according
- to POSIX.
-
-2009-08-11 Corinna Vinschen <corinna@vinschen.de>
-
- * include/limits.h (NGROUPS_MAX): Set to a more sane value.
- * include/sys/param.h (NGROUPS): Ditto.
-
-2009-08-10 Corinna Vinschen <corinna@vinschen.de>
-
- * spawn.cc (av::fixup): Check shell scripts for executability only on
- filesystems/mounts supporting real permissions.
-
-2009-08-10 Corinna Vinschen <corinna@vinschen.de>
-
- * dtable.cc (DEV_SOCKET): New static WCHAR string. Name of
- the native NT socket device.
- (dtable::init_std_file_from_handle): Remove unused tmp_pathbuf
- variable. Move check for sockets into FILE_TYPE_PIPE clause.
- Rely on handle_to_fn having recognized socket, or check if
- getsockopt works to accommodate NT4 shortcoming.
- (handle_to_fn): Use tmp_pathbuf for OBJECT_NAME_INFORMATION
- buffer and simplify code due to that. Check name returned by
- NtQueryObject for socket device.
-
-2009-08-10 Christopher Faylor <me+cygwin@cgf.cx>
-
- * fhandler_console.cc (create_invisible_console_workaround): Fix size
- of cmd in the way originally intended.
-
-2009-08-10 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_console.cc (create_invisible_console_workaround): Fix
- size of cmd to take spaces into account.
-
-2009-08-08 Corinna Vinschen <corinna@vinschen.de>
-
- * dtable.cc (dtable::init_std_file_from_handle): Fix comment to
- document change in the Windows 7 workaround.
- * wincap.cc (wincapc::init): Don't set has_console_handle_problem
- to false on 32 bit systems.
-
-2009-08-06 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (cygwin_getnameinfo): Force setting NI_NUMERICSERV only
- on Windows 2003 and earlier, only if the port number doesn't
- resolve to a well-known service. Change comment accordingly.
-
-2009-08-05 Christopher Faylor <me+cygwin@cgf.cx>
-
- * cygheap.h (cygheap_debug::endh): Delete.
- * debug.cc (lock_debug::acquired): Delete.
- (lock_debug::lock_debug): Simplify.
- (lock_debug::unlock): Ditto.
- (find_handle): Don't set endh here.
- (add_handle): Add new handle to beginning of the list rather than
- trying to maintain an end list pointer.
- (delete_handle): Minor optimization.
- (mark_closed): Make logic clearer.
- (verify_handle): Lock handle list before scanning.
- (setclexec): Ditto.
- (modify_handle): Ditto.
- (newh): Don't lock handle list here. Assume caller did this.
- (mark_closed): Ditto.
- (close_handle): Remove unneeded #if.
- * dtable.cc (dtable::dup2): Tweak debug output.
-
-2009-08-04 Christopher Faylor <me+cygwin@cgf.cx>
-
- * path.cc (patch_conv::check): Zero path before setting it.
-
-2009-08-04 Christopher Faylor <me+cygwin@cgf.cx>
-
- * fhandler_socket.cc (fhandler_socket::send_internal): Just use wmem
- size if the length exceeds it.
- * net.cc (fdsock): Use 65535 as window size, just like the comment
- says or we run into problems with DuplicateHandle.
-
- * path.cc (patch_conv::check): Use set_path to set invalid filename.
- * path.h (path_conv::path_conv): Ditto.
-
-2009-08-04 Christopher Faylor <me+cygwin@cgf.cx>
-
- * fhandler.h (pdrive_buf): Defensively allocate one extra byte.
-
-2009-08-04 Christopher Faylor <me+cygwin@cgf.cx>
-
- * fhandler.h (fhandler_cygdrive:DRVSZ): New enum.
- (pdrive_buf): New place to hold information about cygdrive.
- * fhandler_disk_file.cc (fhandler_cygdrive::set_drives): Store drive
- info in pdrive_buf since get_win32_name() could now be too small to
- hold everything.
- (fhandler_cygdrive::rewinddir): Reset pdrive to pdrive_buf.
- (fhandler_cygdrive::closedir): Ditto.
- * pipe.cc (fhandler_pipe::init): Be more defensive when referencing
- get_win32_name(). Rework logic which made a copy of the POSIX path and
- then never used it.
-
-2009-08-02 Christopher Faylor <me+cygwin@cgf.cx>
-
- * sigproc.cc (stopped_or_terminated): Don't return a match when stopsig
- == SIGCONT and not WCONTINUED.
- * termios.cc (tcsetpgrp): Improve debugging output.
-
-2009-08-01 Christopher Faylor <me+cygwin@cgf.cx>
-
- * cygheap_malloc.h: New file.
- * cygheap.h: Remove stuff now included in cygheap_malloc.h and include
- that file. Make cygheap_init a standard c++ function. Remove unneeded
- child_info declaration.
- * path.h: Include cygheap_malloc.h. Remove extra cstrdup declaration.
- (path_conv): Reorganize to group variables together.
- (path_conv::path): Make const char *.
- (path_conv::known_suffix): Ditto.
- (path_conv::normalized_path): Ditto.
- (path_conv::path_conv): Reorganize initializers to reflect new element
- ordering.
- (path_conv::get_win32): Change return value to const char *.
- (path_conv::set_path): Move back here from spawn.cc.
- (parh_conv::modifiable_path): New function.
- * path.cc (path_conv::add_ext_from_sym): Accommodate const'ness of
- known_suffixes.
- (path_conv::set_normalized_path): Ditto for normalized_path.
- (path_conv::check): Use modifiable_path whereever we need to modify the
- path element. Use set_path to set the path.
- (path_conv::~path_conv): Accommodate new const'ness.
- * spawn.cc (perhaps_suffix): Declare ext as const since that's what is
- being returned.
- (path_conv::set_path): Move back to path.h.
- * winf.f (linebuf): Perform minor cleanup.
- (linebuf::fromargv): Change second parameter to const.
- * winf.cc (linebuf::fromargv): Ditto.
-
-2009-08-01 Christopher Faylor <me+cygwin@cgf.cx>
-
- * path.h (path_conv::set_path): Change return value.
- * spawn.cc (path_conv::set_path): Return newly set value.
- (find_exec): Set retval to newly set value when calling set_path.
-
-2009-07-31 Christopher Faylor <me+cygwin@cgf.cx>
-
- * spawn.cc (find_exec): Fix one more path where retval was not set.
-
-2009-07-31 Christopher Faylor <me+cygwin@cgf.cx>
-
- * spawn.cc (find_exec): Stop relying on the ability to set retval to a
- fixed path_conv buffer and set it on the fly instead.
-
-2009-07-30 Corinna Vinschen <corinna@vinschen.de>
-
- * path.h (cstrdup): Fix declaration.
-
-2009-07-29 Dave Korn <dave.korn.cygwin@googlemail.com>
-
- * globals.cc (enum exit_states::ES_GLOBAL_DTORS): Delete.
- * dcrt0.cc (__main): Schedule dll_global_dtors to run
- atexit before global dtors.
- (do_exit): Delete test for ES_GLOBAL_DTORS and call to
- dll_global_dtors.
-
-2009-07-29 Corinna Vinschen <corinna@vinschen.de>
-
- * path.h (class path_conv): Convert path from char array to char *.
- Initialize to NULL in constructors. Drop normalized_path_size member.
- (path_conv::size): Remove.
- (path_conv::operator =): Always copy with sizeof path_conv. Always
- duplicate path on cygheap.
- (path_conv::set_path): Move implementation to spawn.cc.
- * path.cc (path_conv::set_normalized_path): Always allocate
- normalized_path on cygheap.
- (path_conv::check): Don't work on path, rather allocate THIS_path in
- TLS and use it throughout. When finished, allocate path on cygheap
- and copy over. Defer tacking on extension after having copied path.
- * spawn.cc (path_conv::set_path): Implement here.
-
-2009-07-27 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.h (enum fs_info_type): New type.
- (IMPLEMENT_FS_FLAG): New define.
- (class fs_info): Convert filesystem type status flags into an enum
- fs_info_type. Add cifs FS. Revert change to has_buggy_open and
- has_buggy_fileid_dirinfo. Make them normal; status flags again.
- Implement is_FS functions using IMPLEMENT_FS_FLAG.
- * mount.cc (fs_info::update): Define MINIMAL_WIN_NTFS_FLAGS and
- FS_IS_WINDOWS_NTFS. Add comment. Only test remote filesystems
- for "NTFS" once. Add is_cifs check using FS_IS_WINDOWS_NTFS.
- Set has_buggy_open flag for SUNWNFS. Set has_buggy_fileid_dirinfo
- flag for UNIXFS and all cifs type filesystems. Only check for
- caseinsensitivity once.
- (fillout_mntent): Create locale fs_names array. Use for setting
- _my_tls.locals.mnt_type.
-
-2009-07-27 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * posix.sgml (std-notes): Remove obsolete reference to CYGWIN=server.
-
-2009-07-25 Corinna Vinschen <corinna@vinschen.de>
-
- * posix.sgml (std-notes): Add flock restriction.
-
-2009-07-25 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_console.cc (set_console_title): Set buffer size to
- TITLESIZE + 1. Call sys_mbstowcs with correct destination length.
-
-2009-07-24 Christopher Faylor <me+cygwin@cgf.cx>
-
- * sigproc.h (wait_for_sigthread): Eliminate parameter.
- * sigproc.cc (wait_for_sigthread): Ditto. Don't synchronize with
- wait_sig after receiving an event that it is ready to go.
- (init_sig_pipe): New function.
- (wait_sig): Call init_sig_pipe to create pipes for communicating
- signals to this process. Don't send sigCONT signal when initializing.
- * fork.cc (frok::child): Accommodate wait_for_sigpipe parameter change.
-
-2009-07-24 Christopher Faylor <me+cygwin@cgf.cx>
-
- * fhandler.h (fhandler_*::write): Make ssize_t/__stdcall.
- (fhandler_*::write_overlapped): Ditto.
- (fhandler_*::raw_write): Ditto.
- (fhandler_*::readv): Ditto.
- (fhandler_*::writev): Ditto.
- (fhandler_*::raw_read): Make __stdcall.
- * fhandler: Accommodate changes to read/write functions throughout.
- * fhandler_clipboard.cc: Ditto.
- * fhandler_console.cc: Ditto.
- * fhandler_dsp.cc: Ditto.
- * fhandler_fifo.cc: Ditto.
- * fhandler_mailslot.cc: Ditto.
- * fhandler_mem.cc: Ditto.
- * fhandler_mem.cc: Ditto.
- * fhandler_random.cc: Ditto.
- * fhandler_tape.cc: Ditto.
- * fhandler_tty.cc: Ditto.
- * fhandler_virtual.cc: Ditto.
- * fhandler_windows.cc: Ditto.
- * fhandler_zero.cc: Ditto.
- * syscalls.cc (readv): Use ssize_t as temp variable.
-
- * fhandler.cc (fhandler_base::read): Coerce returned len to signed or
- it will never be treated as < 0.
- (fhandler_base::wait_overlapped): Minimize calls to GetLastError.
- Remove duplicate debugging test. Fix error return.
-
- * fhandler.h (fhandler_fifo::fifo_name): Declare new function.
- (fhandler_fifo::close): Ditto.
- (fhandler_fifo::dup): Ditto.
- (fhandler_fifo::close_on_exec): Ditto.
- * fhandler.cc (fhandler_fifo::fifo_name): Define new function.
- (FIFO_BUF_SIZE): New define.
- (cnp): Ditto.
- (fhandler_fifo::open): Rework. Use cnp to open named pipe. Always
- open write side as a client. Open dummy client when writing and can't
- connect.
- (wait): Rework. Implement fifo_wait_for_next_client. Handle signals
- during connect better. Add new fifo_wait_for_server code which polls
- (sigh) waiting for server.
- (fhandler_fifo::raw_read): Handle transition states when one client
- closes and another is available.
- (fhandler_fifo::close): Define.
- (fhandler_fifo::dup): Ditto.
- (fhandler_fifo::close_on_exec): Ditto.
-
-2009-07-24 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (internal_setlocale): Fix typo in GBK codepage.
-
-2009-07-24 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (unlink_nt): Ignore sharing violation on NFS. Align
- comments.
-
-2009-07-23 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.h (fs_info::fsn): New member.
- (fs_info::clear): Clear fsn.
- (fs_info::fsname): New read accessor for fsn.
- * mount.cc (fs_info::update): Fill in fsn member with lowercased
- filesystem name if filesystem is not well-known. Fall back to
- "unknown" if filesystem name is missing.
- (fillout_mntent): Print filesystem name retrieved in fs_info::update
- rather than static string "unknown".
-
-2009-07-23 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (fs_info::update): Revert to open filesystem with access set
- to READ_CONTROL. If that fails, try additionally with FILE_READ_DATA.
-
-2009-07-22 Eric Blake <ebb9@byu.net>
-
- * exceptions.cc (handle_exceptions): Set si_addr according to
- POSIX for SIGSEGV.
-
-2009-07-22 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (fs_info::update): Open filesystem with access set to 0.
- Explain why.
-
-2009-07-22 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc: Revert accidental checkin.
-
-2009-07-22 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (symlink_info::check): Handle STATUS_NOT_SUPPORTED from
- NtCreateFile just like STATUS_EAS_NOT_SUPPORTED.
-
-2009-07-22 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (fillout_mntent): Fix typo (noexec -> notexec).
-
-2009-07-22 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (symlink_info::check): Fix typo in comment.
-
-2009-07-22 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (enum del_lock_called_from): New enumeration.
- (fhandler_base::del_my_locks): Declare taking a del_lock_called_from
- as argument.
- * fhandler.cc (fhandler_base::close): Call del_my_locks with "on_close".
- (fhandler_base::fixup_after_fork): Call del_my_locks with "after_fork".
- (fhandler_base::fixup_after_exec): Call del_my_locks with "after_exec".
- * flock.cc (fhandler_base::del_my_locks): Take del_lock_called_from
- as argument. Call node->del_my_locks with NULL handle in after_exec
- case. Explain why.
-
-2009-07-21 Eric Blake <ebb9@byu.net>
-
- * dtable.cc (dup2): Correct return value for no-op.
-
-2009-07-21 Corinna Vinschen <corinna@vinschen.de>
- Eric Blake <ebb9@byu.net>
-
- * fhandler_disk_file.cc (fhandler_disk_file::fchmod): Add special case
- for MVFS. Explain why.
- (fhandler_disk_file::utimens): Drop local variables lastaccess and
- lastwrite. Copy timestamps right into FILE_BASIC_INFORMATION structure
- to avoid copying them twice.
-
-2009-07-20 Corinna Vinschen <corinna@vinschen.de>
-
- * wincap.h (wincaps::has_always_all_codepages): New element.
- * wincap.cc: Implement above element throughout.
- * wchar.h (__sjis_mbtowc): Declare.
- (__eucjp_mbtowc): Ditto.
- (__gbk_mbtowc): Ditto.
- (__kr_mbtowc): Ditto.
- (__big5_mbtowc): Ditto.
- * syscalls.cc (internal_setlocale): Convert to char * function.
- Return parameter by default. Return NULL if request to use a
- charset can't be satisfied due to missing codepage support in the
- underlying OS. Fix comment.
- (setlocale): Store original locale. Restore to original locale if
- internal_setlocale returns NULL.
-
-2009-07-20 Corinna Vinschen <corinna@vinschen.de>
-
- * fork.cc (fork): Create local tmp_pathbuf. Explain why.
-
-2009-07-18 Christopher Faylor <me+cygwin@cgf.cx>
-
- * exceptions.cc (sig_handle_tty_stop): Set stopsig to SIGCONT when
- continuing.
- (stopped_or_terminated): Honor WCONTINUED.
- * wait.cc (wait4): Ditto.
- * include/cygwin/wait.h (WCONTINUED): Define.
- (__W_CONTINUED): Ditto.
- (WIFCONTINUED): Ditto.
-
-2009-07-18 Dave Korn <dave.korn.cygwin@gmail.com>
-
- * libstdcxx_wrapper.cc (operator delete): Remove stray space in
- asm name.
-
-2009-07-17 Christopher Faylor <me+cygwin@cgf.cx>
-
- * cygtls.cc (_cygtls::init_exception_handler): Test for e, not e->prev
- or we could still end up adding our handler twice. Add comment
- explaining what we're doing.
- * dll_init.cc (dll_dllcrt0_1): Clarify comment.
-
-2009-07-17 Christopher Faylor <me+cygwin@cgf.cx>
-
- * cygtls.cc (_cygtls::init_exception_handler): Avoid adding our
- exception handler twice.
-
-2009-07-17 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (unlink_nt): Just return when a sharing violation
- occurs on remote filesystems.
-
-2009-07-17 Corinna Vinschen <corinna@vinschen.de>
-
- * globals.cc: Improve comment on R/O UNICODE_STRINGs.
- * mount.h (class fs_info): Add is_mvfs bit.
- * mount.cc (fs_info::update): Recognize MVFS remote filesystem.
- (fillout_mntent): Reorder filesystem checks for speed. Add
- mvfs, unixfs, and sunwnfs filesystem types.
- * path.h (class path_conv): Add fs_is_mvfs method.
- * path.cc (symlink_worker): On MVFS, always create symlinks as
- Windows shortcuts. Explain why.
-
-2009-07-16 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (unlink_nt): First remove the R/O DOS attribute with
- FILE_WRITE_ATTRIBUTES access only, then re-open the file for DELETE.
- Explain why.
-
-2009-07-16 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::fchmod): Remove file
- attribute check already done in NtSetAttributesFile.
-
-2009-07-15 Corinna Vinschen <corinna@vinschen.de>
-
- * globals.cc: Reorder constant UNICODE_STRINGs for clarity.
- * mount.h (fs_info::sttaus): Move filesystem type flags into
- substructure. Add union to allow simple test for having set any
- one filesystem type flag. Replace has_buggy_open flag with is_sunwnfs
- flag. Replace has_buggy_fileid_dirinfo with is_unixfs flag.
- (fs_info::got_fs): New private method.
- (fs_info::has_buggy_open): New explicit implementation.
- (fs_info::has_buggy_fileid_dirinfo): Ditto.
- * mount.cc (fs_info::update): Optimize filesystem checks for speed.
- * winsup.h (IMPLEMENT_STATUS_FLAG): Change write accessor to return
- value just set.
-
-2009-07-15 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_netdrive.cc (GET_RESOURCE_INFO): Remove.
- (thread_netdrive): Drop GET_RESOURCE_INFO case.
- (fhandler_netdrive::exists): Use GET_RESOURCE_OPENENUM info class
- to check for existance.
-
-2009-07-15 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_netdrive.cc (fhandler_netdrive::readdir): Remove useless
- alloca.
-
-2009-07-15 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (cwdstuff::set): Only fix up UNC path in win32 so as not
- to overwrite incoming path.
-
-2009-07-14 Corinna Vinschen <corinna@vinschen.de>
-
- Throughout avoid having to initialize constant UNICODE_STRINGs.
- * globals.cc: Define constant UNICODE_STRINGs and store in .rdata
- section.
- * fhandler_disk_file.cc: Throughout, use readonly UNICODE_STRINGs
- rather then initializing local UNICODE_STRING variable where
- applicable.
- * fhandler_mem.cc (fhandler_dev_mem::open): Ditto.
- * flock.cc (inode_t::inode_t): Ditto.
- * mmap.cc: Ditto.
- * syscalls.cc: Ditto.
- * mount.cc (fs_info::update): Ditto.
- * path.cc: Ditto.
-
- * ntdll.h (RtlEqualUnicodePathPrefix): Redefine to take prefix as
- UNICODE_STRING.
- (RtlEqualUnicodePathSuffix): Redefine to take suffix as UNICODE_STRING.
- * fhandler_disk_file.cc: Accommodate throughout.
- * mount.cc (fs_info::update): Ditto.
- * path.cc (cwdstuff::set): Ditto.
- * syscalls.cc: Ditto.
-
-2009-07-14 Corinna Vinschen <corinna@vinschen.de>
-
- * globals.cc (active_codepage): Remove.
-
-2009-07-12 Christopher Faylor <me+cygwin@cgf.cx>
-
- * how-spawn-works.txt: Add "out of date" note.
- * how-vfork-works.txt: Ditto.
-
-2009-07-12 Christopher Faylor <me+cygwin@cgf.cx>
-
- * Makefile.in: Don't do anything special with any RCS directories.
-
- * ntdll.h (PROCESSINFOCLASS): Remove unneeded trailing comma.
-
- * pinfo.cc (_pinfo::dup_proc_pipe): Remove unneeded assignment.
-
- * sigproc.cc (sig_send): Don't send signal to myself if this is an exec
- stub.
-
-2009-07-12 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_base::fstat_by_handle): Don't use
- FileAllInformation info class since it needs a big buffer. Add a
- comment.
-
-2009-07-07 Dave Korn <dave.korn.cygwin@gmail.com>
-
- * winbase.h (ilockexch): Avoid making 'ret' volatile.
- (ilockcmpexch): Likewise.
-
-2009-07-07 Dave Korn <dave.korn.cygwin@gmail.com>
-
- * Makefile.in (DLL_OFILES): Add libstdcxx_wrapper.o
- (libstdcxx_wrapper_CFLAGS): Add flags for new module.
- (_cygwin_crt0_common_STDINCFLAGS): Define per-file override.
- (libstdcxx_wrapper_STDINCFLAGS, cxx_STDINCFLAGS): Likewise.
- * cxx.cc: Include "cygwin-cxx.h".
- (operator new): Tweak prototype for full standards compliance.
- (operator new[]): Likewise.
- (operator new (nothrow)): New fallback function.
- (operator new[] (nothrow), operator delete (nothrow),
- operator delete[] (nothrow)): Likewise.
- (default_cygwin_cxx_malloc): New struct of pointers to the above,
- for final last-resort fallback default.
- * cygwin-cxx.h: New file.
- (struct per_process_cxx_malloc): Define.
- (default_cygwin_cxx_malloc): Declare extern.
- * cygwin.din (__wrap__ZdaPv): Export new wrapper.
- (__wrap__ZdaPvRKSt9nothrow_t, __wrap__ZdlPv,
- __wrap__ZdlPvRKSt9nothrow_t, __wrap__Znaj,
- __wrap__ZnajRKSt9nothrow_t, __wrap__Znwj,
- __wrap__ZnwjRKSt9nothrow_t): Likewise.
- * globals.cc (__cygwin_user_data): Init newly-repurposed 'forkee'
- field (now 'cxx_malloc') to point to default_cygwin_cxx_malloc.
- * libstdcxx_wrapper.cc: New file.
- (__wrap__ZdaPv, __wrap__ZdaPvRKSt9nothrow_t, __wrap__ZdlPv,
- __wrap__ZdlPvRKSt9nothrow_t, __wrap__Znaj,
- __wrap__ZnajRKSt9nothrow_t, __wrap__Znwj,
- __wrap__ZnwjRKSt9nothrow_t): Define wrapper functions for libstdc++
- malloc operators and their overrides.
- * winsup.h (default_cygwin_cxx_malloc): Declare extern.
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
- * include/sys/cygwin.h (struct per_process_cxx_malloc): Forward
- declare here.
- (struct per_process::forkee): Rename and repurpose from this ...
- (struct per_process::cxx_malloc): ... to this.
- * lib/_cygwin_crt0_common.cc: Include cygwin-cxx.h.
- (WEAK): Define shorthand helper macro.
- (__cygwin_cxx_malloc): Define and populate with weak references
- to whatever libstdc++ malloc operators will be visible at final
- link time for Cygwin apps and dlls.
- (_cygwin_crt0_common): Always look up cygwin DLL's internal
- per_process data, and don't test for (impossible) failure. Inherit
- any members of __cygwin_cxx_malloc that we don't have overrides
- for from the DLL's default and store the resulting overall set of
- overrides back into the DLL's global per_process data.
-
-2009-07-07 Corinna Vinschen <corinna@vinschen.de>
-
- * cygtls.cc (_cygtls::remove): Fix typo.
-
-2009-07-06 Christopher Faylor <me+cygwin@cgf.cx>
-
- * Makefile.in (clean): Clean generated files in srcdir.
- * tlsoffsets.h: Regenerate.
-
-2009-07-06 Christopher Faylor <me+cygwin@cgf.cx>
-
- * cygtls.cc (_cygtls::remove): Avoid closing a NULL handle.
-
-2009-07-06 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::recv_internal): Convert wsabuf
- and wsacnt to references. Fix handling of WSAEMSGSIZE.
-
-2009-07-06 Corinna Vinschen <corinna@vinschen.de>
-
- * cygtls.h (struct _local_storage): Add thread storage pointers for
- memory used by socket select functions. Combine them into a single
- struct select.
- * cygtls.cc: Accommodate above change throughout.
- (_cygtls::init_thread): Drop initalizing of sockevt to
- INVALID_HANDLE_VALUE.
- (_cygtls::fixup_after_fork): Reset sockevt to NULL.
- (_cygtls::remove): Don't use sockevt value to bail out prematurely.
- Set sockevt to NULL. Free malloced select members.
- * select.h (struct select_socket_info): Drop max_w4 member.
- * select.cc (thread_socket): Use INFINITE timeout value if number of
- objects to wait for is <= MAXIMUM_WAIT_OBJECTS. Use num_w4 member
- of select_socket_info struct rather than dropped max_w4.
- (init_tls_select_info): New inline function to initialize TLS select
- members.
- (start_thread_socket): Just call init_tls_select_info to initialize TLS
- select members and use them later on.
- (socket_cleanup): Don't free select_socket_info pointer members since
- they are thread local now.
-
-2009-07-06 Christopher Faylor <me+cygwin@cgf.cx>
-
- * dtable.cc (handle_to_fn): Detect failing NtQueryObject.
-
-2009-07-06 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc: Delete stray CR.
-
-2009-07-05 Christopher Faylor <me+cygwin@cgf.cx>
-
- * fhandler_console.cc: Change workstation -> windows station
- throughout.
-
-2009-07-04 Christopher Faylor <me+cygwin@cgf.cx>
-
- * autoload.cc (SetParent): Add new import.
- * fhandler.h (fhandler_console::create_invisible_console): Declare new
- function.
- (create_invisible_console_workaround): Ditto.
- * fhandler_console.cc (fhandler_console::create_invisible_console):
- Define new function.
- (create_invisible_console_workaround): Ditto. Add too much code to
- deal with broken Windows 7. Use a helper app to start an invisible
- console window.
- (fhandler_console::need_invisible): Reorganize to use helper functions
- to create invisible console.
-
- * spawn.cc (spawn_guts): Avoid zeroing already zeroed fields in si.
-
-2009-07-04 Dave Korn <dave.korn.cygwin@gmail.com>
-
- * autoload.cc (AttachConsole): Correct size of args.
-
-2009-07-03 Christopher Faylor <me+cygwin@cgf.cx>
-
- * dcrt0.cc (jit_debug): New global.
- (initial_env): Set jit_debug when we are automatically starting a gdb
- process.
- * dtable.cc (dtable::get_debugger_info): Don't tty tricks when we are
- being debugged by our own captive gdb, as determined by jit_debug ==
- true.
- (dtable::init_std_file_from_handle): Detect errors when initializing a
- tty early rather than at random points later.
- * fhandler.h (fhandler_*::init): Return int to indicate
- success/failure.
- * fhandler.cc (fhandler_base::init): Reflect change in return value.
- * pipe.cc (fhandler_pipe::init): Ditto.
- (fhandler_pipe::create_selectable): Don't say we're retrying when we
- aren't.
- * fhandler_console.cc (fhandler_console::init): Ditto. Return
- success/failure.
- * fhandler_serial.cc (fhandler_serial::init): Ditto.
- * fhandler_tty.cc (fhandler_tty_slave::init): Ditto.
- (fhandler_tty_slave::open): Make debugging output more detailed.
- * tty.cc (tty_list::terminate): Don't close I/O handles before all
- slaves have checked in.
- (tty::slave_alive): Make a non-inlined function. Check if tty pipe
- handles can be created as an additional exists check.
- * tty.h (tty::slave_alive): Just define here.
-
-2009-07-03 Corinna Vinschen <corinna@vinschen.de>
-
- * posix.sgml: Add fpurge and mkstemps to BSD list.
-
-2009-07-03 Eric Blake <ebb9@byu.net>
-
- * cygwin.din (fpurge, mkstemps): New exports.
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
- * mktemp.cc (_gettemp): Add parameter.
- (mkstemps): New function.
- (mkstemp, mkdtemp, mktemp): Adjust clients.
-
-2009-07-03 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc: Fix typo in comment.
- (ShowWindowAsync): Define.
- (AttachConsole): Define.
- * fhandler_console.cc (fhandler_console::need_invisible): Add band-aid
- for Windows 7 AllocConsole bug.
-
-2009-07-01 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (get_xp_ifs): Fix typo in comment.
-
-2009-07-01 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (class fhandler_socket): Add class members and methods
- to store and retrieve the SO_RCVBUF and SO_SNDBUF sizes.
- * fhandler_socket.cc (fhandler_socket::dup): Duplicate new members.
- (fhandler_socket::send_internal): Check for SO_SNDBUF size and
- restrict send to 1 byte less per KB 823764. Leave loop immediately
- if WSASendMsg has been used.
- * net.cc (fdsock): Change comment again. Set buffer sizes to 65536.
- Store values in fhandler_socket.
- (cygwin_setsockopt): Store SO_RCVBUF and SO_SNDBUF sizes in
- fhandler_socket.
- (cygwin_sendto): Drop call to sig_dispatch_pending.
- (cygwin_recvfrom): Ditto.
- (cygwin_recvmsg): Ditto.
- (cygwin_sendmsg): Ditto.
-
-2009-06-30 Christopher Faylor <me+cygwin@cgf.cx>
-
- * select.h: New file split from fhandler.h.
- (select_record::select_record): Define do-nothing constructor for "new"
- to avoid gratuitous zeroing.
- (select_info): New base class.
- (select_pipe_info): New class with methods for dealing with pipes.
- (select_socket_info): New class with methods for dealing with sockets.
- (select_serial_info): Dummy class for serial.
- (select_mailslot_info): Dummy class for mailslots.
- (select_stuff): Define device_specific_* as actual classes rather than
- void *.
- * dtable.h (dtable::select_read): Accommodate return value change to
- 'bool' and argument change to "select_stuff".
- (dtable::select_write): Ditto.
- (dtable::select_except): Ditto.
- * dtable.cc (dtable::select_read): Accommodate return value change to
- 'bool' and argument change to "select_stuff".
- (dtable::select_write): Ditto.
- (dtable::select_except): Ditto.
- * fhandler.h: Excise select-related classes.
- (fhandler_*::select_read): Change argument to select_stuff.
- (fhandler_*::select_write): Ditto.
- (fhandler_*::select_except): Ditto.
- * select.cc (UNIX_FD_ZERO): Use memset rather than bzero.
- (select_stuff::test_and_set): Change return type to bool. Allocate
- select_record on entry and let fhandler_*::select_* operate on the
- start.next field of select_stuff.
- (pipeinf): Delete.
- (select_pipe_info::select_pipe_info): New constructor. Allocates event
- for controlling pipe waits.
- (select_pipe_info::~select_pipe_info): New destructor. Destroy event.
- Stop thread.
- (select_pipe_info::add_watch_handle): New function.
- (thread_pipe): Wait for the hEvent part of any overlapped pipes before
- peeking.
- (start_thread_pipe): Don't allocate device_specific_pipe stuff here.
- Assume that it has been allocated earlier.
- (pipe_cleanup): Rely on select_pipe_info destructor to clean up pipe
- paraphenalia.
- (fhandler_*::select_*): Derive select_record from new select_stuff
- argument.
- (fhandler_pipe::select_*): Ditto. Allocate pipe-specific field if not
- already allocated.
- (serialinf): Delete.
- (thread_serial): serialinf -> select_serial_info.
- (fhandler_base::ready_for_read): Rewrite to accommodate change in
- argument to fhandler_*::select_*.
- (socketinf): Delete.
- (thread_socket): socketinf -> select_socket_info.
- (mailslotinf): Delete.
- (thread_mailslot): mailslotinf -> select_mailslot_info.
-
-2009-06-30 Christopher Faylor <me+cygwin@cgf.cx>
-
- * fhandler.cc (fhandler_base::has_ongoing_io): Accept an argument
- indicating whether the overlapped event should be tested.
- (fhandler_base::read_overlapped): Pass is_overlapped state to
- has_ongoing_io.
- (fhandler_base::write_overlapped): Ditto.
- * fhandler.h (fhandler_base::has_ongoing_io): Accommodate argument
- change.
- * select.cc (peek_pipe): Ditto.
-
-2009-06-30 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (fdsock): Set default socket buffer sizes to 65520. Change
- comment accordingly.
- * fhandler_socket.cc (fhandler_socket::send_internal): Set maximum
- send size to 65520 as well.
-
-2009-06-29 Christopher Faylor <me+cygwin@cgf.cx>
-
- * select.cc (peek_pipe): Turn on (temporarily?) the experimental code
- which tries to determine when a pipe is writable.
-
-2009-06-28 Christopher Faylor <me+cygwin@cgf.cx>
-
- * select.cc (peek_pipe): Use has_ongoing_io() to determine if the pipe
- is ready for writing rather than performing brute-force checks.
-
-2009-06-28 Christopher Faylor <me+cygwin@cgf.cx>
-
- * fhandler.h (fhandler_base::has_ongoing_io): Declare new function.
- * fhandler.cc (fhandler_base::has_ongoing_io): Define new function.
- (fhandler_base::read_overlapped): Use has_ongoing_io to avoid writing
- when handle has not completed last I/O.
- (fhandler_base::write_overlapped): Ditto.
- * select.cc (peek_pipe): Be more careful about accessing hEvent field
- from get_overlapped().
-
-2009-06-28 Christopher Faylor <me+cygwin@cgf.cx>
-
- * gendef (cleanup): Rename from 'nocr'. Remove comments and trailing
- spaces.
- * cygwin.din: Add long-needed comment describing what
- dll_crt0__FP11per_process demangles to.
-
- * select.cc (peek_pipe): Flag handle as not ready for write if event is
- not signalled.
- * fhandler.cc (fhandler_base::setup_overlapped): Establish event as
- already signalled.
- (fhandler_base::wait_overlapped): Don't reset event after we've
- successfully waited. MSDN documentation says that this happens
- automatically after a WriteFileEx/ReadFileEx.
-
-2009-06-26 Corinna Vinschen <corinna@vinschen.de>
-
- * wincap.h (wincaps::has_broken_alloc_console): New element.
- * wincap.cc: Implement above element throughout.
-
-2009-06-25 Corinna Vinschen <corinna@vinschen.de>
-
- * sec_auth.cc (lsaauth): Close unused handle.
- (lsaprivkeyauth): Ditto.
-
-2009-06-23 Corinna Vinschen <corinna@vinschen.de>
-
- * sec_auth.cc (get_server_groups): Ignore errors from
- get_user_local_groups.
-
-2009-06-22 Corinna Vinschen <corinna@vinschen.de>
-
- * spawn.cc (spawn_guts): Don't run additional check for Win32
- incompatible CWD if newargv.fixup bailed out already.
- (av::fixup): Check shell scripts for executability.
-
-2009-06-18 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (chdir): Check error conditions first.
-
-2009-06-17 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::recv_internal): Mark WSARecvMsg
- as NO_COPY.
-
-2009-06-16 Christopher Faylor <me+cygwin@cgf.cx>
-
- * fhandler.cc (fhandler_base::read_overlapped): Use a better variable
- name.
-
-2009-06-16 Christopher Faylor <me+cygwin@cgf.cx>
-
- * fhandler.cc (fhandler_base::read_overlapped): Preserve len when
- looping due to received signal.
-
-2009-06-15 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (get_flags): New static function to generate interface flags
- value.
- (get_ipv4fromreg_ipcnt): New static function to fetch number of
- configured IPv4 addresses for a given NIC from registry.
- (get_ipv4fromreg): New static function to fetch configured IPv4
- addresses for a given NIC from registry.
- (get_friendlyname): New static function to generate friendly name.
- (get_hwaddr): New static function to copy hardware address.
- (get_xp_ifs): Restructure slightly. Add code to generate IPv4 entries
- entries for interfaces which are disconnected.
-
-2009-06-14 Christopher Faylor <me+cygwin@cgf.cx>
-
- * errno.cc (errmap): Add mapping for ERROR_IO_INCOMPLETE.
- * fhandler.cc (fhandler_base::fcntl): Fix comment.
- (fhandler_base::wait_overlapped): Accept an optional len parameter.
- Use the len parameter when WriteFile fails with ERROR_IO_PENDING. Make
- debug output less alarming.
- (fhandler_base::write_overlapped): Pass len to wait_overlapped.
- * fhandler.h (fhandler_base::wait_overlapped): Add an optional argument
- denoting the number of characters intended to be written.
-
- * fhandler_tty.cc (fhandler_pty_master::close): Don't close archetype
- handles when cygwin is still initializing since the handles aren't
- actually opened at that point.
-
-2009-06-14 Corinna Vinschen <corinna@vinschen.de>
-
- * localtime.cc (time2): Take another stab at fixing a compiler warning.
-
-2009-06-14 Christopher Faylor <me+cygwin@cgf.cx>
-
- * localtime.cc (time2): Take a stab at fixing a compiler warning.
-
-2009-06-14 Christopher Faylor <me+cygwin@cgf.cx>
-
- * fhandler.cc (fhandler_base::wait_overlapped): Honor nonblocking flag
- for writes. Don't reset event handle when we see a ERROR_IO_PENDING.
-
- * sigproc.cc (stopped_or_terminated): Use bool constants for
- consistency.
-
- * wait.cc (wait4): Remove nonsensical comment.
-
-2009-06-13 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::recv_internal): Set namelen
- pointer to NULL if name pointer is NULL. Explain why.
-
-2009-06-12 Corinna Vinschen <corinna@vinschen.de>
-
- * localtime.cc (time2): Change "spring gap" to "spring forward gap"
- in comment.
-
-2009-06-12 Corinna Vinschen <corinna@vinschen.de>
-
- * localtime.cc (time2): Add workaround for spring forward gap problem.
- Add explaining comment.
-
-2009-06-12 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (SUBLIBS): Add librt.a.
- (librt.a): New rule to build librt.a.
-
-2009-06-12 Corinna Vinschen <corinna@vinschen.de>
-
- * posix_ipc.cc (check_path): Fix typo in comment. Align naming
- convention rules to Linux. Handle backslash same as slash. Add
- comment.
-
-2009-06-09 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (GetSystemTimes): Remove.
- * fhandler_proc.cc (format_proc_uptime): Use global system_info rather
- than retrieving a local copy of the SYSTEM_INFO. Drop call to
- GetSystemTimes and retrieve SystemPerformanceInformation on all systems
- again with buffer size big enough for 64 bit systems.
- (format_proc_stat): Use global system_info rather than retrieving a
- local copy of the SYSTEM_INFO. Retrieve SystemPerformanceInformation
- with buffer size big enough for 64 bit systems.
-
-2009-06-08 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (GetSystemTimes): Define.
- * fhandler_proc.cc (format_proc_uptime): Use GetSystemInfo to retrieve
- processor count. Use GetSystemTimes when available to retrieve system
- idle time. Improve debug output.
- (format_proc_stat): Use GetSystemInfo to retrieve processor
- count. Improve debug output. Ignore if SystemPerformanceInformation
- returns error. Explain why.
-
-2009-06-08 Corinna Vinschen <corinna@vinschen.de>
-
- * fork.cc (frok::parent): Remove ancient code erroneously flushing
- stdout.
-
-2009-06-08 Corinna Vinschen <corinna@vinschen.de>
-
- * cygerrno.h (save_errno::~save_errno): Set errno directly to avoid
- flooding debug output.
-
-2009-06-08 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (symlink_info::check): Return with error set to ENOENT if
- STATUS_NO_MEDIA_IN_DEVICE is returned.
-
-2009-06-07 Christopher Faylor <me+cygwin@cgf.cx>
-
- * cygheap.h (mini_cygheap): New struct.
- (init_cygheap): Inherit locale field via mini_cygheap.
- * cygheap.cc (cygheap_at_start): Define new variable.
- (cygheap): Initialize as cygheap_at_start so that locale information is
- always available.
- (cygheap_init): Initialize cygheap iff it is set to cygheap_at_start.
- * shared_info.h (memory_init): Accommodate argument change.
- * memory.cc (memory_init): Accept an argument indicating whether
- cygheap should be initialized or not.
- * dcrt0.cc (child_info_fork::handle_fork): Pass false to memory_init().
- (child_info_spawn::handle_spawn): Ditto.
- (dll_crt0_0): Pass true to memory_init when not forking or execing.
-
- * cygheap.h (cygheap_types::HEAP_2_DLL): New enum.
- * dll_init.h (dll): Remove unused namelen field.
- (dll_list::load_after_fork): Accommodate change in arguments.
- * dll_init.cc (dll_list::alloc): Allocate dll information in the cygwin
- heap.
- (dll_list::detach): Free dll information from the cygwin heap.
- (dll_list::load_after_fork): Use dll information in the cygwin heap
- directly rather than querying parent.
- * fork.cc (frok::first_dll): Delete.
- (frok::child): Don't report on first_dll. Don't pass it to
- load_on_fork.
- (frok::parent): Don't set first_dll.
- (fork): Ditto.
-
-2009-06-06 Corinna Vinschen <corinna@vinschen.de>
-
- * dll_init.cc (dll_list::alloc): Allocate memory using a section
- object. Explain why. Drop call to GetSystemInfo, rather call
- getpagesize to get allocation granularity. Only align to allocation
- granularity under WOW64. Use roundup2 to align.
- (dll_list::detach): Call NtUnmapViewOfSection instead of VirtualFree.
-
-2009-06-06 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc: Use NtUnmapViewOfSection instead of UnmapViewOfFile
- throughout for symmetry.
- (fhandler_dev_mem::munmap): Use correct process handle in call to
- NtUnmapViewOfSection.
-
-2009-06-06 Corinna Vinschen <corinna@vinschen.de>
-
- * dll_init.h (struct dll): Set size of name element to ANYSIZE_ARRAY.
- * dll_init.cc: Fix formatting.
- (dll_list::alloc): Only allocate as much memory for struct dll as
- necessary for given DLL name.
- (dll_list::load_after_fork): Only read a single page of parent memory.
- Only read more if namelen indicates that it's necessary.
-
-2009-06-05 Dave Korn <dave.korn.cygwin@gmail.com>
-
- * winbase.h (ilockexch): Fix asm constraints.
- (ilockcmpexch): Likewise.
-
-2009-06-05 Corinna Vinschen <corinna@vinschen.de>
-
- * heap.cc (heap_init): Fix typo in comment.
-
-2009-06-04 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_clipboard.cc: Avoid calling system_printf.
- (set_clipboard): Add basic error checking. Set errno here. Per MSDN,
- don't call GlobalFree on data block transferred to clipboard.
- (fhandler_dev_clipboard::write): Drop setting errno after call to
- set_clipboard.
- (fhandler_dev_clipboard::read): Add basic error checking. Simplify code.
-
-2009-06-04 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_console.cc (set_console_title): Convert title string to
- wchar_t and call SetConsoleTitleW.
-
-2009-06-04 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_console.cc (fhandler_console::read): Allow Ctrl-Space to
- emit a NUL byte.
-
-2009-06-04 Dave Korn <dave.korn.cygwin@gmail.com>
-
- * thread.cc (__cygwin_lock_lock): Delete racy optimisation.
- (__cygwin_lock_unlock): Likewise.
-
-2009-06-03 IWAMURO Motnori <deenheart@gmail.com>
-
- * strfuncs.cc (sys_cp_mbstowcs): Fix condition.
-
-2009-06-03 Corinna Vinschen <corinna@vinschen.de>
-
- * strfuncs.cc (sys_cp_wcstombs): Implement reverse functionality
- of the change to sys_cp_mbstowcs from 2009-05-30.
- (sys_cp_mbstowcs): Slightly reformat. Fix comment to accommodate
- change to sys_cp_wcstombs. Don't write to *ptr if dst is NULL.
-
-2009-06-03 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_console.cc (fhandler_console::read): Convert Alt-Backspace
- to \033\177 or to \377 dependent on the setting of dev_state->metabit.
-
-2009-06-02 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (path_conv::check): Don't call set_exec for files on "noacl"
- mount points.
-
-2009-05-30 Christopher Faylor <me+cygwin@cgf.cx>
-
- * strfuncs.cc (sys_cp_mbstowcs): Treat src as unsigned char *. Convert
- failure of f_mbtowc into a single malformed utf-16 value.
-
-2009-05-30 Christopher Faylor <me+cygwin@cgf.cx>
-
- * cygwin/include/sys/termios.h: Make default erase character "^?".
-
-2009-05-30 Christopher Faylor <me+cygwin@cgf.cx>
-
- * fhandler_console.cc (fhandler_console::read): Convert backspace key
- to DEL.
-
-2009-05-29 Christopher Faylor <me+cygwin@cgf.cx>
-
- * path.cc (cwdstuff::set): Rewrite previous change to properly test the
- end of the buffer.
-
-2009-05-28 Christopher Faylor <me+cygwin@cgf.cx>
-
- * path.cc (cwdstuff::set): Avoid removing a nonexistent trailing slash.
-
-2009-05-20 Eric Blake <ebb9@byu.net>
-
- * net.cc (gethostby_helper): Use correct signedness.
-
-2009-05-18 Christopher Faylor <me+cygwin@cgf.cx>
-
- * mount.cc (mount_info::add_item): Avoid using any-old '/' as
- indicating root.
-
-2009-05-18 Christopher Faylor <me+cygwin@cgf.cx>
-
- * mount.cc (mount_info::got_usr_bin): Mark as NO_COPY.
- (mount_info::got_usr_lib): Ditto.
- (mount_info::root_idx): Ditto.
-
-2009-05-14 Corinna Vinschen <corinna@vinschen.de>
-
- * wchar.h (sys_mbstowcs): Add missing __stdcall attribute.
-
-2009-05-14 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.cc (cygheap_init): Set Cygwin default locale values.
- * cygheap.h (struct cygheap_locale): New structure.
- (struct user_heap_info): Add cygheap_locale member locale.
- * dcrt0.cc (dll_crt0_1): Revert to calling _setlocale_r so that only
- the applications locale is reverted to "C".
- * environ.cc (environ_init): Remove unused got_lc variable.
- * fhandler.h (class dev_console): Remove now unsed locale variables.
- * fhandler_console.cc (fhandler_console::get_tty_stuff): Remove
- setting dev_console's locale members.
- (dev_console::con_to_str): Use internal locale settings. Default to
- __ascii_wctomb if charset is "ASCII".
- (fhandler_console::write_normal): Ditto.
- * strfuncs.cc (__ascii_wctomb): Drop declaration.
- (__db_wctomb): Use fixed value 2 instead of not
- necessarily matching MB_CUR_MAX.
- (__eucjp_wctomb): Use 3 instead of MB_CUR_MAX.
- (sys_cp_wcstombs): Remove special case for "C" locale.
- (sys_wcstombs): Implement here. Use internal locale data stored on
- cygheap.
- (sys_cp_mbstowcs): Remove special case for "C" locale.
- (sys_mbstowcs): Implement here. Use internal locale data stored on
- cygheap.
- * syscalls.cc (internal_setlocale): New function to set cygheap locale
- data and to reset CWD posix path.
- (setlocale): Just call internal_setlocale from here if necessary.
- * wchar.h (__ascii_wctomb): Declare.
- (sys_wcstombs): Don't define inline, just declare.
- (sys_mbstowcs): Ditto.
-
-2009-05-14 Christopher Faylor <me+cygwin@cgf.cx>
-
- * mount.cc (mount_info::init): Remove MOUNT_CYGWIN_EXEC setting when
- auto-mounting /usr/bin.
-
-2009-05-14 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (oopts): Add a no-op "auto" option.
- (mount_info::create_root_entry): Set root dir to MOUNT_IMMUTABLE rather
- than to MOUNT_OVERRIDE.
-
-2009-05-13 Corinna Vinschen <corinna@vinschen.de>
- Christopher Faylor <me+cygwin@cgf.cx>
-
- * mount.cc (mount_info::got_usr_bin): Define.
- (mount_info::got_usr_lib): Ditto.
- (mount_info::root_idx): Ditto.
- (mount_info::create_root_entry): Create root entry as immutable and
- flag as automatic.
- (mount_info::init): Remove "Huh? No /etc/fstab..." warning.
- Unconditionally call from_fstab for user and system tables. Fill in
- /usr/bin and /usr/lib if they have not been specified in /etc/fstab.
- (oopts): Alphabetize. Add "override" option to allow overriding
- immutable mount points.
- (mount_info::add_item): Accommodate new MOUNT_IMMUTABLE flag intended
- for root mount.
- (mount_info::add_item): Detect "/usr/bin", "/usr/lib", and "/" and set
- appropriate global state.
- (fillout_mntent): Add ,auto to mount points added by Cygwin DLL.
- (mount): Remove masking of MOUNT_SYSTEM. Allow user to shoot
- themselves. Add comment.
- * mount.h (mount_info::got_usr_bin): Declare.
- (mount_info::got_usr_lib): Ditto.
- (mount_info::root_idx): Ditto.
- * include/sys/mount.h: Reformat enum.
- Add MOUNT_{OVERRIDE,IMMUTABLE,AUTOMATIC}.
-
-2009-05-13 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.h (cwdstuff): Convert to class. Make posix and dir private.
- (cwdstuff::get_posix): New method.
- (cwdstuff::reset_posix): New method.
- * dcrt0.cc (dll_crt0_1): Call setlocale rather than _setlocale_r.
- * environ.cc (environ_init): Ditto. Prefer "C" locale over current
- codepage default locale.
- * path.cc (chdir): Use cwdstuff::get_posix method instead of accessing
- cwdstuff::posix directly.
- (cwdstuff::set): Defer creating posix path to first usage.
- (cwdstuff::get_posix): Create posix path if it's empty, and return it.
- (cwdstuff::get): Create posix path if it's empty.
- * strfuncs.cc (sys_cp_wcstombs): Use UTF-8 conversion in the "C"
- locale.
- (sys_cp_mbstowcs): Ditto.
- * syscalls.cc (gen_full_path_at): Fetch CWD posix path locked.
- (setlocale): Implement here. Reset CWD posix path.
-
-2009-05-09 Christopher Faylor <me+cygwin@cgf.cx>
-
- * cygwin/version.h (CYGWIN_VERSION_CYGWIN_CONV): New define.
-
-2009-05-09 Corinna Vinschen <corinna@vinschen.de>
-
- * dtable.cc (dtable::init_std_file_from_handle): Add workaround for
- Windows 7 64 bit issue. Add lengthy comment to explain what happens.
- * wincap.h (wincaps::has_console_handle_problem): New element.
- * wincap.cc: Implement above element throughout.
- (wincap_7): New wincaps structure for NT 6.1 kernels.
- (wincapc::init): Set has_console_handle_problem to false for 32 bit
- systems.
-
-2009-05-09 Corinna Vinschen <corinna@vinschen.de>
-
- * sec_auth.cc (str2uni_cat): Move from here...
- * path.cc (str2uni_cat): ...to here. Simplify. Make static inline.
- (get_nt_native_path): Use RtlAppendUnicodeToString rather than
- str2uni_cat for constant strings for speed.
- * security.h (str2uni_cat): Drop declaration.
-
-2009-05-08 Corinna Vinschen <corinna@vinschen.de>
- IWAMURO Motonori <deenheart@gmail.com>
-
- * strfuncs.cc (sys_cp_wcstombs): save and restore previous errno value.
- (sys_cp_mbstowcs): Ditto.
-
-2009-05-08 IWAMURO Motonori <deenheart@gmail.com>
-
- * strfuncs.cc (sys_cp_wcstombs): Set errno to 0 before converting
- wide char to SO/UTF-8 sequence.
-
-2009-05-08 Corinna Vinschen <corinna@vinschen.de>
-
- * include/sys/select.h: Guard definitions with __USE_W32_SOCKETS as
- the accompanying fd_set definitions in newlib's sys/types.h.
-
-2009-05-06 Christopher Faylor <me+cygwin@cgf.cx>
-
- * fhandler_console.cc (fhandler_console::ioctl): Properly treat
- TIOCLINUX argument as a char.
- * fhandler_tty.cc (fhandler_tty_slave::ioctl): Use coercion to properly
- set char value.
-
-2009-05-06 Corinna Vinschen <corinna@vinschen.de>
-
- * libc/minires.c (scanline): Fix type in calls to ctype functions
- to stay in unsigned char range for char values >= 0x80.
- * regex/regcomp.c: Ditto, throughout.
- * regex/regex2.h (ISWORD): Ditto.
-
-2009-05-06 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.cc (cygheap_init): Set umask to a sane default.
- * uinfo.cc (cygheap_user::ontherange): Don't use HOMEDRIVE/HOMEPATH
- to set HOME. Default to /home/USERNAME.
-
-2009-05-03 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (set_file_sd): Drop using FILE_OPEN_FOR_RECOVERY flag in
- call to NtOpenFile.
- * exceptions.cc (open_stackdumpfile): Ditto in call to NtCreateFile.
- * fhandler.cc (fhandler_base::open): Ditto. Simplify setting
- create_options.
-
- * mount.cc (fs_info::update): Recognize offline storage.
- (fillout_mntent): Report UDF and offline storage.
- * mount.h (class fs_info): Add is_csc_cache status flag.
-
-2009-05-04 Christopher Faylor <me+cygwin@cgf.cx>
-
- * fhandler_console.cc (fhandler_console::write_console): Eliminate
- unneeded debugging output.
- (fhandler_console::write_normal): Eliminate unneeded __seterrno.
-
-2009-05-04 Christopher Faylor <me+cygwin@cgf.cx>
-
- * libc/minires.c (scanline): Accommodate ctype changes which disallow
- use of an unadorned char argument to is* macros.
- * regex/regcomp.c: Ditto, throughout.
- * regex/regex2.h (ISWORD): Ditto.
-
-2009-05-03 Christopher Faylor <me+cygwin@cgf.cx>
-
- * fhandler.h (fhandler_console::MAX_WRITE_CHARS): Declare.
- (fhandler_console::write_replacement_char): Declare as inline.
- (fhandler_console::write_console): Declare new function.
- * fhandler_console.cc (fhandler_console::MAX_WRITE_CHARS): Define.
- (handler_console::write_console): Define.
- (fhandler_console::write_replacement_char): Define as inline.
- (fhandler_console::write_normal): Use write_console when writing
- buffers of unknown length.
-
-2009-04-26 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * include/cygwin/socket.h: Define SOL_IPV6.
-
-2009-04-21 Corinna Vinschen <corinna@vinschen.de>
-
- * ctype.cc (__set_ctype): Copy exact part of the current active
- character class array.
-
-2009-04-20 Corinna Vinschen <corinna@vinschen.de>
-
- * flock.cc (lf_setlock): Handle border case which results in WFMO loop
- exiting with ret == WAIT_TIMEOUT gracefully. Add a system_printf to
- uncover other potential problems with WFMO loop.
-
-2009-04-18 Christopher Faylor <me+cygwin@cgf.cx>
-
- * mkimport: Specify .text for stub explicitly.
- * speclib: Add a dummy '.idata$7' section referring to the dll
- associated with the real import library.
-
-2009-04-18 Corinna Vinschen <corinna@vinschen.de>
-
- * dcrt0.cc (globify): Only call mbtowc for non-ascii chars.
-
-2009-04-17 Corinna Vinschen <corinna@vinschen.de>
-
- * dcrt0.cc (globify): Make multibyte-aware.
-
-2009-04-17 Corinna Vinschen <corinna@vinschen.de>
-
- * flock.cc (class inode_t): Add i_wait member and matching methods
- wait(), unwait(), and waiting().
- (inode_t::inode_t): Initialize i_wait to 0.
- (fhandler_disk_file::lock): Only remove node if no other thread is
- waiting for a blocking lock.
- (lf_setlock): Manipulate node->i_wait to signal that a thread is
- waiting for a blocking lock in this node.
- (lf_findoverlap): Reinstantiate SELF test as in original code.
-
-2009-04-16 Corinna Vinschen <corinna@vinschen.de>
-
- * dlfcn.cc (get_full_path_of_dll): Just return a bool value. Drop
- local path_conv in favor of getting it as parameter. Add local string
- buffer instead of getting it as parameter.
- (dlopen): Accommodate get_full_path_of_dll change. Fetch WCHAR Windows
- path from path_conv variable and call LoadLibraryW.
-
-2009-04-16 Corinna Vinschen <corinna@vinschen.de>
-
- * ntdll.h (STATUS_LOCK_NOT_GRANTED): Define.
- * syscalls.cc (unlink_nt): Handle STATUS_LOCK_NOT_GRANTED same as
- STATUS_SHARING_VIOLATION. Add lengthy comment to explain why.
-
-2009-04-15 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (path_conv::get_wide_win32_path): Allow relative paths.
- (cygwin_conv_path): In case of CCP_POSIX_TO_WIN_W, convert relative
- paths to absolute paths if the relative pathname length exceeds
- MAX_PATH.
-
-2009-04-15 Corinna Vinschen <corinna@vinschen.de>
-
- * libc/bsdlib.cc: Align copyright with upstream.
- * libc/fnmatch.c: Ditto.
- * libc/fts.c: Ditto.
- * libc/inet_addr.c: Ditto.
- * libc/inet_network.c: Ditto.
- * libc/rcmd.cc: Ditto.
- * libc/rexec.cc: Ditto.
-
-2009-04-14 Christopher Faylor <me+cygwin@cgf.cx>
-
- * speclib: Really revert to using tempdir.
-
-2009-04-14 Christopher Faylor <me+cygwin@cgf.cx>
-
- * speclib: Revert to using tempdir.
-
-2009-04-14 Corinna Vinschen <corinna@vinschen.de>
-
- * localtime.cc (tzload): Implement setting __tzrule's offset member
- using newlib's __gettzinfo () interface also when tzload returns
- successfully.
-
-2009-04-13 Dave Korn <dave.korn.cygwin@gmail.com>
-
- * include/stdint.h (intptr_t): Remove long from type.
- (uintptr_t): Likewise.
- (INTPTR_MIN): Remove 'L' suffix.
- (INTPTR_MAX, UINTPTR_MAX): Likewise.
-
-2009-04-12 Christopher Faylor <me+cygwin@cgf.cx>
-
- * speclib: Initial stab at cleaning up temp files. More work needed.
- * mkimport: Ditto.
-
-2009-04-12 Christopher Faylor <me+cygwin@cgf.cx>
-
- * Makefile.in (clean): Clean globals.h.
- (LIBCOS): Depend on globals.h.
-
-2009-04-11 Christopher Faylor <me+cygwin@cgf.cx>
-
- * mkimport: New script to perform all operations necessary to create
- libcygwin.a.
- * rmsym: Delete.
- * newsym: Delete.
- * Makefile.in (toolopts): New variable which holds options relating to
- binutils/gcc tools.
- (speclib): Use toolopts. Add symbols to avoid copying to special
- libraries.
- (OBSOLETE_FUNCTIONS): Delete.
- (NEW_FUNCTIONS): Change to represent an argument to new mkimport
- script.
- (libcygwin.a): Use only new mkimport script to create libcygwin.a.
- Only rely on ${LIBCOS}.
- (*/lib*.a): Simplify speclib dependencies.
- (speclib): Accept toolchain options. Convert every argument to
- absolute path. Simplify parsing of nm output. Accommodate new
- exclude option.
-
-2009-04-11 Dave Korn <dave.korn.cygwin@googlemail.com>
-
- * include/stdint.h (INTPTR_MIN, INTPTR_MAX): Add 'L' suffix.
- (WINT_MAX): Add 'U' suffix.
-
-2009-04-10 Christopher Faylor <me+cygwin@cgf.cx>
-
- * speclib: Use a more robust method to derive full file path.
-
-2009-04-09 Christopher Faylor <me+cygwin@cgf.cx>
-
- * speclib: Semi-revert to previous version but don't try to generate
- well-formed import library. Instead, just extract appropriate symbols
- and let later libcygwin.a on link line fill in the rest of the import
- stuff.
- * gendef: Hopefully no-op modification to allow easier post-processing
- on symbol values.
-
-2009-04-09 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (try_to_bin): Use tmp_pathbuf buffer to allocate infobuf
- rather than using the stack.
-
-2009-04-09 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (try_to_bin): Fix alignment of infobuf.
-
-2009-04-09 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::fchown): Catch an
- error when changing the user account on a standalone Samba server.
- Explain why.
- * sec_acl.cc (setacl): Accommodate additional parameter to set_file_sd.
- * sec_helper.cc (SECURITY_SAMBA_UNIX_AUTHORITY): Define.
- (well_known_samba_unix_user_fake_sid): Define.
- * security.cc (set_file_sd): Take additional parameter if ownership
- should be changed. Restrict requested permissions accordingly.
- (set_file_attribute): Accommodate additional parameter to set_file_sd.
- * security.h (well_known_samba_unix_user_fake_sid): Declare.
- (set_file_sd): Align declaration to above change.
-
-2009-04-07 Corinna Vinschen <corinna@vinschen.de>
-
- * include/stdint.h (int_least32_t): Define as int.
- (uint_least32_t): Ditto, unsigned.
- (int_fast16_t): Define as int.
- (int_fast32_t): Ditto.
- (uint_fast16_t): Ditto, unsigned.
- (uint_fast32_t): Ditto.
- (UINT32_MAX): Remove `L' long marker.
- (UINT_LEAST32_MAX): Ditto.
- (UINT_FAST16_MAX): Ditto.
- (UINT_FAST32_MAX): Ditto.
- (INT32_C): Ditto.
- (UINT32_C): Ditto.
-
-2009-04-07 Corinna Vinschen <corinna@vinschen.de>
-
- * strfuncs.cc: Change WCHAR to wchar_t in multibyte<->widechar
- conversion functions throughout.
- * wchar.h: Ditto in declarations. Guard them __INSIDE_CYGWIN__.
-
-2009-04-07 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (class dev_console): Add members con_mbtowc, con_wctomb,
- and con_charset.
- (dev_console::str_to_con): Take mbtowc function pointer and charset
- as additional parameters.
- * fhandler_console.cc (fhandler_console::get_tty_stuff): Initialize
- aforementioned new members. Explain why.
- (dev_console::con_to_str): Remove useless comment. Call new
- sys_cp_wcstombs function rather than sys_wcstombs.
- (dev_console::str_to_con): Take mbtowc function pointer and charset
- as additional parameters. Call sys_cp_mbstowcs accordingly.
- (fhandler_console::write_normal): Only initialize f_mbtowc and charset
- once. Accommodate changed str_to_con.
- * strfuncs.cc (sys_cp_wcstombs): Renamed from sys_wcstombs. Take
- wctomb function pointer and charset as parameters. Use throughout.
- (sys_cp_mbstowcs): Take wctomb function pointer and charset as
- parameters instead of codepage. Remove matching local variables and
- their initialization.
- * wchar.h (ENCODING_LEN): Define as in newlib.
- (__mbtowc): Use mbtowc_p typedef for declaration.
- (wctomb_f): New type.
- (wctomb_p): New type.
- (__wctomb): Declare.
- (__utf8_wctomb): Use wctomb_f typedef for declaration.
- (sys_cp_wcstombs): Move declaration from winsup.h here.
- (sys_wcstombs): Ditto.
- (sys_wcstombs_alloc): Ditto.
- (sys_cp_mbstowcs): Ditto.
- (sys_mbstowcs): Ditto.
- (sys_mbstowcs_alloc): Ditto.
- * winsup.h: Move declaration of sys_FOO functions to wchar.h. Include
- wchar.h instead.
-
-2009-04-06 Earl Chew <earl_chew@agilent.com>
-
- * libc/rexec.cc (ruserpass): Use fstat64 instead of fstat.
-
-2009-04-06 Corinna Vinschen <corinna@vinschen.de>
-
- * strfuncs.cc: Add comment to explain why we can't support JIS
- for now.
- (__db_wctomb): Alwaus use WC_NO_BEST_FIT_CHARS.
- (__jis_wctomb): Just call __ascii_wctomb from here.
- (__eucjp_wctomb): Convert to standalone implementation to fix up the
- difference between eucJP and CP 20932 affecting JIS-X-0212 characters.
- Explain.
- (__kr_wctomb): Use codepage 949.
- (__db_mbtowc): Reorder code slightly. Always use MB_ERR_INVALID_CHARS
- in call to MultiByteToWideChar. Fix a problem with singlebyte
- sequences. Fix a bug in '\0' handling. Reset state->__count on
- successful return from non-zero state.
- (__jis_mbtowc): Just call __ascii_mbtowc from here.
- (__eucjp_mbtowc): Convert to standalone implementation to fix up the
- difference between eucJP and CP 20932 affecting JIS-X-0212 characters.
- (__kr_mbtowc): Use codepage 949.
- (__set_charset_from_codepage): Handle codepage 20932 as eucJP.
-
-2009-04-05 Christopher Faylor <me+cygwin@cgf.cx>
-
- * Makefile.in: Use all compile options when calculating magic values.
- * shared_info.h (CURR_SHARED_MAGIC): Revert erroneous value.
- * child_info.h (CURR_CHILD_INFO_MAGIC): Update.
-
- * fhandler.h (acquire_output_mutex): Remove unneeded ';'.
- (release_output_mutex): Ditto.
-
-2009-04-05 Christopher Faylor <me+cygwin@cgf.cx>
-
- * net.cc: Undefine NOERROR and DELETE to avoid compiler warnings.
- * shared_info.h (CURR_SHARED_MAGIC): Update.
- * spawn.cc (spawn_guts): Avoid copying one line command line argument
- if it hasn't been filled out.
-
-2009-04-04 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
- Corinna Vinschen <corinna@vinschen.de>
-
- * include/asm/byteorder.h (__ntohl): Prototype before define to avoid
- a warning with -Wmissing-prototypes. Use _ELIDABLE_INLINE macro from
- _ansi.h.
- (__ntohs): Ditto.
-
-2009-04-02 Corinna Vinschen <corinna@vinschen.de>
-
- * environ.cc (build_env): Fix length calculation of resulting
- wide char environment string.
-
-2009-04-02 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * include/netdb.h: #include <inttypes.h>, <netinet/in.h>,
- and <sys/socket.h> per SUSv3.
-
-2009-04-01 Corinna Vinschen <corinna@vinschen.de>
-
- * strfuncs.cc (sys_cp_mbstowcs): Check if ASCII SO is followed by at
- least two chars and the next byte is a valid UTF-8 start byte before
- trying to convert the followup bytes as UTF-8 sequence.
-
-2009-03-31 Corinna Vinschen <corinna@vinschen.de>
-
- * shm.cc (struct shm_attached_list): Convert access type to ULONG.
- (fixup_shms_after_fork): Fix comment. Use NtMapViewOfSection rather
- than MapViewOfFileEx to recreate shared memory regions. Add function
- name to api_fatal output.
- (shmat): Use NtMapViewOfSection to create shared memory region
- top-down.
-
-2009-03-31 Corinna Vinschen <corinna@vinschen.de>
-
- * ctype.cc: Remove implementation of ctype functions in favor of
- pointer-based newlib implementation.
- (_ctype_b): Declare.
- (__ctype_cp): Move to newlib. Declare.
- (__ctype_iso): Ditto.
- (__set_ctype): Implement changing __ctype_ptr__. Only copy character
- class data in applications built under older Cygwin.
- * cygwin.din (__ctype_ptr__): Export.
- * include/ctype.h: Remove in favor of newlib implementation.
- * include/cygwin/config.h (__EXPORT): Define alongside __IMPORT.
- * include/cygwin/version.h (CYGWIN_VERSION_CHECK_FOR_OLD_CTYPE):
- Define check for old vs. new ctype implementation.
- Bump API minor number.
-
-2009-03-28 Christopher Faylor <me+cygwin@cgf.cx>
-
- * Makefile.in: Perform some minor cleanup. Revamp speclib handling.
- * speclib: Rewrite to create libraries with dlltool rather than
- attempting surgery on libcygwin.a.
-
-2009-03-27 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (inet_ntop6): Convert to lowercase hex digits on the fly.
-
-2009-03-27 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (cygwin_getaddrinfo): Check hints for non-NULL before
- checking its content.
-
-2009-03-27 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (class fhandler_fifo): Rename read/write methods to
- raw_read/raw_write.
- * fhandler_fifo.cc: Ditto.
-
-2009-03-27 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (pathconf): Fix memory leak.
-
-2009-03-26 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (symlink_worker): Write target filename as UTF-16 string
- with leading BOM marker.
- (symlink_info::check_shortcut): If check for leading BOM marker
- succeeds, read filename as UTF-16 string.
- (symlink_info::check_sysfile): Ditto.
-
-2009-03-26 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * include/asm/byteorder.h (__ntohl): Align definition to ISO C99.
- (__ntohs): Ditto.
-
-2009-03-26 Corinna Vinschen <corinna@vinschen.de>
-
- * strfuncs.cc (__set_charset_from_codepage): Revert to translating
- codepage 936 to "GBK".
-
-2009-03-25 Corinna Vinschen <corinna@vinschen.de>
-
- * strfuncs.cc (sys_wcstombs): Don't convert ASCII SO into two
- ASCII SO's.
-
-2009-03-25 Corinna Vinschen <corinna@vinschen.de>
-
- * environ.cc (environ_init): Break from locale loop after first hit.
- * fhandler_console.cc (fhandler_console::write_normal): Print a SO
- sequence using always valid Unicode chars.
-
-2009-03-25 Corinna Vinschen <corinna@vinschen.de>
-
- * strfuncs.cc (__kr_wctomb): Use codepage 51949 rather than 50949.
- (__kr_mbtowc): Ditto.
- (__set_charset_from_codepage): Ditto. Translate codepage 936 to
- "GB2312" and drop the charset name "GBK".
-
-2009-03-24 Corinna Vinschen <corinna@vinschen.de>
-
- * strfuncs.cc (__kr_wctomb): Use codepage 50949 rather than 949.
- (__kr_mbtowc): Ditto.
- (__set_charset_from_codepage): Translate codepages 949 and 50949 to
- "EUCKR" and drop the charset name "CP949".
-
-2009-03-24 Corinna Vinschen <corinna@vinschen.de>
-
- * strfuncs.cc (sys_cp_mbstowcs): Don't read beyond src + nms.
-
-2009-03-24 Corinna Vinschen <corinna@vinschen.de>
-
- * shared_info.h (CURR_SHARED_MAGIC): Update.
-
-2009-03-24 Corinna Vinschen <corinna@vinschen.de>
-
- * wchar.h: Replace UINT with unsigned int.
-
-2009-03-24 Corinna Vinschen <corinna@vinschen.de>
-
- * wchar.h: Remove erroneous "C" specifier from extern declaration.
-
-2009-03-24 Corinna Vinschen <corinna@vinschen.de>
-
- * ctype.cc (_CTYPE_DATA_0_127): Add _B class to TAB character.
- (__ctype_default): New character class array for default ASCII
- character set.
- (__ctype_iso): New array of character class array for ISO charsets.
- (__ctype_cp): Ditto for singlebyte Windows codepages.
- (tolower): Implement as distinct function to support any singlebyte
- charset.
- (toupper): Ditto.
- (__set_ctype): New function to copy singlebyte character classes
- corresponding to current charset to ctype_b array.
- Align copyright text to upstream.
- * dcrt0.cc (dll_crt0_1): Reset current locale to "C" per POSIX.
- * environ.cc (set_file_api_mode): Remove.
- (codepage_init): Remove.
- (parse_thing): Remove "codepage" setting.
- (environ_init): Set locale according to environment settings, or
- to current codepage, before converting environment to multibyte.
- * fhandler.h (fhandler_console::write_replacement_char): Drop argument.
- * fhandler_console.cc (dev_console::str_to_con): Call sys_cp_mbstowcs
- rather than MultiByteToWideChar.
- (fhandler_console::write_replacement_char): Always print a funny
- half filled square if a character isn't in the current charset.
- (fhandler_console::write_normal): Convert to using __mbtowc
- rather than next_char.
- * fork.cc (frok::child): Drop call to set_file_api_mode.
- * globals.cc (enum codepage_type) Remove.
- (current_codepage): Remove.
- * miscfuncs.cc (cygwin_wcslwr): Unused, dangerous. Remove.
- (cygwin_wcsupr): Ditto.
- (is_cp_multibyte): Remove.
- (next_char): Remove.
- * miscfuncs.h (is_cp_multibyte): Drop declaration.
- (next_char): Ditto.
- * strfuncs.cc (get_cp): Remove.
- (__db_wctomb): New function to implement _wctomb_r functionality for
- doublebyte charsets using WideCharToMultiByte.
- (__sjis_wctomb): New function to replace unusable newlib function.
- (__jis_wctomb): Ditto.
- (__eucjp_wctomb): Ditto.
- (__gbk_wctomb): New function.
- (__kr_wctomb): Ditto.
- (__big5_wctomb): Ditto.
- (__db_mbtowc): New function to implement _mbtowc_r functionality for
- doublebyte charsets using MultiByteToWideChar.
- (__sjis_mbtowc): New function to replace unusable newlib function.
- (__jis_mbtowc): Ditto.
- (__eucjp_mbtowc): Ditto.
- (__gbk_mbtowc): New function.
- (__kr_mbtowc): New function
- (__big5_mbtowc): New function
- (__set_charset_from_codepage): New function.
- (sys_wcstombs): Reimplement, basically using same wide char to multibyte
- conversion as newlib's application level functions. Plus extras.
- Add lengthy comment to explain. Change return type to size_t.
- (sys_wcstombs_alloc): Just use sys_wcstombs. Change return type to
- size_t.
- (sys_cp_mbstowcs): Replace sys_mbstowcs, take additional codepage
- argument. Explain why. Change return type to size_t.
- (sys_mbstowcs_alloc): Just use sys_mbstowcs. Change return type to
- size_t.
- * wchar.h: Declare internal functions implemented in strfuncs.cc.
- (wcscasecmp): Remove.
- (wcsncasecmp): Remove.
- (wcslwr): Remove.
- (wcsupr): Remove.
- * winsup.h (codepage_init): Remove declaration.
- (get_cp): Ditto.
- (sys_wcstombs): Align declaration to new implementation.
- (sys_wcstombs_alloc): Ditto.
- (sys_cp_mbstowcs): Add declaration.
- (sys_mbstowcs): Define as inline function.
- (sys_mbstowcs_alloc): Align declaration to new implementation.
- (set_file_api_mode): Remove declaration.
- * include/ctype.h (isblank): Redefine to use _B character class.
- (toupper): Remove ASCII-only definition.
- (tolower): Ditto.
-
-2009-03-24 Corinna Vinschen <corinna@vinschen.de>
-
- * sec_auth.cc (str2buf2uni): Remove.
- * security.h (str2buf2uni): Remove declaration.
-
-2009-03-24 Yaakov Selkowitz <yselkowitz@cygwin.com>
-
- * include/mntent.h: Remove declarations of nonexistant addmntent
- and hasmntopt. Update and clarify the /etc/mtab comment.
-
-2009-03-23 Corinna Vinschen <corinna@vinschen.de>
-
- * smallprint.cc (__small_vsprintf): Handle NULL PWCHAR and
- PUNICODE_STRING arguments.
- (__small_vswprintf): Ditto.
-
-2009-03-23 Corinna Vinschen <corinna@vinschen.de>
-
- * include/asm/byteorder.h (__constant_ntohs): Remove declaration.
- (__constant_ntohl): Ditto.
-
-2009-03-23 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din: Export wordexp, wordfree.
- * posix.sgml: Move them to SUSv4 list.
- * include/cygwin/version.h: Bump API minor number.
-
-2009-03-22 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * include/sys/un.h: #include <string.h> for strlen.
-
-2009-03-19 Corinna Vinschen <corinna@vinschen.de>
-
- * dlfcn.cc (get_full_path_of_dll): Revert patch from 2008-07-16.
-
-2009-03-19 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * cygwin.din: Export log2, log2f as functions.
- * posix.sgml: Add them to SUSv4 list.
- * include/cygwin/version.h: Bump API minor number.
-
-2009-03-18 Corinna Vinschen <corinna@vinschen.de>
-
- * sec_auth.cc (lsaauth): Remove local definitions of struct
- _TOKEN_LINKED_TOKEN and TokenLinkedToken in favor of definitions
- from winnt.h.
- (lsaprivkeyauth): As in lsaauth, fetch linked token if available and
- return that in favor of default token.
-
-2009-03-15 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * errno.cc (_sys_errlist): Add ESTRPIPE.
-
-2009-03-15 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din: Export wcsdup.
- * posix.sgml: Add wcsdup to SUSv4 list.
- * include/cygwin/version.h: Bump API minor number.
-
-2009-03-15 Corinna Vinschen <corinna@vinschen.de>
-
- * include/inttypes.h: Remove "l" size specifier from all 16 and 32 bit
- definitions.
-
-2009-03-14 Christopher Faylor <me+cygwin@cgf.cx>
-
- * path.cc (warn_msdos): Don't warn about MS-DOS filenames encountered
- during initialization.
-
-2009-03-14 Corinna Vinschen <corinna@vinschen.de>
-
- * gendef: Remove STABS directives.
-
-2009-03-13 Corinna Vinschen <corinna@vinschen.de>
-
- * mktemp.cc: Remove STABS specific link-time warning. Align copyright
- text to upstream.
-
-2009-03-13 Corinna Vinschen <corinna@vinschen.de>
-
- * flock.cc: Fix lockf copyright to latest version.
-
-2009-03-12 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (path_conv::isgood_inode): Move to be defined
- earlier.
- (get_ino_by_handle): Take additional path_conv argument, accommodate
- throughout. Only use FileId if isgood_inode check is true.
- (fhandler_base::open_fs): Simplify setting ino due to above change.
- (readdir_get_ino): Make sure to return always a non-zero inode number.
- (fhandler_disk_file::readdir): Always open file in dir with
- FILE_OPEN_REPARSE_POINT so as not to open wrong file.
- Drop call to isgood_inode here.
- * path.cc (symlink_info::check): Call fs.update in case we're fetching
- file information from call to NtQueryDirectoryFile.
-
-2009-03-12 Corinna Vinschen <corinna@vinschen.de>
-
- * flock.cc (fhandler_disk_file::lock): Don't test file open mode in
- case of flock-type locks. Explain why.
-
-2009-03-12 Brian Ford <Brian.Ford@FlightSafety.com>
-
- * gethostby_helper: Fix typos in DEBUGGING case.
-
-2009-03-11 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din: Export wcscasecmp, wcsncasecmp.
- * posix.sgml: Move wcscasecmp, wcsncasecmp to SUSv4 list.
- * include/cygwin/version.h: Bump API minor number.
-
-2009-03-11 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din: Export wscanf, fwscanf, swscanf, vwscanf, vfwscanf,
- vswscanf.
- * posix.sgml: Move fwscanf, swscanf, vwscanf, vfwscanf, vswscanf
- to SUSv4 list.
- * include/cygwin/version.h: Bump API minor number.
-
-2009-03-09 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (fhandler_socket::wait_for_events): Take additional
- parameter "dontwait".
- * fhandler_socket.cc (fhandler_socket::wait_for_events): Act as if the
- socket is non-blocking if dontwait is true.
- (fhandler_socket::recv_internal): Use incoming MSG_DONTWAIT flag to
- set the wait_for_events dontwait parameter.
- (fhandler_socket::send_internal): Ditto. Optimize code slightly.
- * include/cygwin/socket.h (MSG_DONTWAIT): Define.
- * include/cygwin/version.h: Bump API minor number.
-
-2009-03-09 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din: Export wcsftime.
- * posix.sgml: Move wcsftime to SUSv4 list.
- * include/cygwin/version.h: Bump API minor number.
-
-2009-03-06 Pierre A. Humblet <pierre@phumblet.no-ip.org>
-
- * cygwin.din: Export gethostbyname2.
- * net.cc: define _CYGWIN_IN_H and include resolv.h.
- (realloc_ent): New function.
- (dup_ent): Call realloc_ent.
- (memcpy4to6): New function.
- (dn_length1): New function.
- (gethostby_helper): New function.
- (gethostbyname2): New function.
- * posix.sgml: Add gethostbyname2.
- * include/cygwin/version.h: Bump API minor number.
- * libc/minires.c (get_options): Look for "inet6" and apply bounds
- to "retry" and "retrans".
- (res_ninit): Set the default options at the beginning.
- (dn_expand): Fix "off by one".
-
-2009-03-06 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din: Export wprintf, fwprintf, swprintf, vwprintf, vfwprintf,
- vswprintf. Sort.
- * posix.sgml: Move fwprintf, swprintf, vwprintf, vfwprintf, vswprintf
- to SUSv4 list. Sort SUSv4 list.
- * include/cygwin/version.h: Bump API minor number.
-
-2009-03-04 Corinna Vinschen <corinna@vinschen.de>
-
- * dcrt0.cc (disable_dep): Disable. Explain why.
- (dll_crt0_0): Disable calling disable_dep. Explain why.
-
-2009-03-03 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc: Include asm/byteorder.h.
- (htonl): Move to end of file. Add comment to explain why. Align
- definition to POSIX. Use related macro from asm/byteorder.h.
- (ntohl): Ditto.
- (htons): Ditto.
- (ntohs): Ditto.
- * include/asm/byteorder.h: Revert previous patch.
-
-2009-03-03 Corinna Vinschen <corinna@vinschen.de>
-
- * include/asm/byteorder.h: Disable optimization when building
- Cygwin network code.
-
-2009-02-26 Christopher Faylor <me+cygwin@cgf.cx>
-
- * dtable.cc (dtable::select_read): Add ability to override fh.
- * fhandler.h (fhandler_fifo::select_read): Declare new function.
- (fhandler_fifo::select_write): Ditto.
- (fhandler_fifo::select_except): Ditto.
- * select.cc (peek_pipe): Treat certain classes of pipe errors as "no
- data".
- (fhandler_fifo::select_read): Define new function.
- (fhandler_fifo::select_write): Ditto.
- (fhandler_fifo::select_except): Ditto.
-
- * shared_info.h (CURR_SHARED_MAGIC): Update.
-
-2009-02-23 Sjors Gielen <mailinglist@dazjorz.com>
-
- * Makefile.in: Add DESTDIR functionality.
-
-2009-02-23 Corinna Vinschen <corinna@vinschen.de>
-
- * sec_auth.cc (get_user_local_groups): Simplify LookupAccountName code.
-
-2009-02-20 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (NetLocalGroupEnum): Remove.
- (NetLocalGroupGetMembers): Remove.
- (NetUserGetLocalGroups): Add.
- * sec_auth.cc (is_group_member): Remove function.
- (get_user_local_groups): Get user as string instead of as SID.
- Call NetUserGetLocalGroups instead of NetLocalGroupEnum. Drop call
- to is_group_member.
- (get_server_groups): Call get_user_local_groups with user name instead
- of user SID.
-
-2009-02-19 Corinna Vinschen <corinna@vinschen.de>
-
- * winver.rc: Fix Copyright date.
-
-2009-02-19 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din: Export mbsnrtowcs and wcsnrtombs.
- * posix.sgml: Move mbsnrtowcs and wcsnrtombs to SUSv4 section.
- * include/cygwin/version.h: Bump API minor number.
-
-2009-02-18 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din: Export open_wmemstream.
- * posix.sgml: Move open_wmemstream to SUSv4 section.
- * include/cygwin/version.h: Bump API minor number.
-
-2009-02-16 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din: Export reallocf.
- * malloc_wrapper.cc( reallocf): New function.
- * posix.sgml: Add reallocf to BSD section.
- * include/cygwin/version.h: Bump API minor number.
- * libc/fts.c: Remove erroneous reallocf definition.
-
-2009-02-16 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din: Export wcstoimax, wcstoumax.
- * posix.sgml: Move wcstoimax and wcstoumax to SUSv4 section.
- * include/inttypes.h: Declare wcstoimax and wcstoumax.
- * include/cygwin/version.h: Bump API minor number.
-
-2009-02-13 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din: Export wcsnlen.
- * posix.sgml: Move wcsnlen to SUSv4 section.
- * include/cygwin/version.h: Bump API minor number.
-
-2009-02-13 Corinna Vinschen <corinna@vinschen.de>
-
- * environ.cc (_getenv_r): New function.
-
-2009-02-13 Corinna Vinschen <corinna@vinschen.de>
-
- * posix.sgml: Move dirfd to SUSv4 section.
-
-2009-02-13 Corinna Vinschen <corinna@vinschen.de>
-
- * posix.sgml: Move interfaces deprecated in SUSv4 to deprecated
- interfaces section. Move interfaces added in SUSv4 to SUSv4
- section or, if unimplemented, add them to the unimplemented interfaces
- section.
-
-2009-02-13 Corinna Vinschen <corinna@vinschen.de>
-
- * posix.sgml: Merge SUSv3 and SUSv4 section into a single SUSv4 section.
- Move Solaris calls now in SUSv4 to SUSv4 section. Rename unimplemented
- section to refer to SUSv4. Add note about missing interfaces.
- Move wcstod and wcstof from unimplemented to SUSv4 section.
-
-2009-02-13 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (mount_info::from_fstab_line): Make cygdrive posix=0 by
- default as documented.
-
-2009-02-13 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din: Export wcstod and wcstof.
- * include/cygwin/version.h: Bump API minor number.
-
-2009-02-11 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (open): Handle O_DIRECTORY flag.
- * include/fcntl.h: Add SUSv4 flags O_DIRECTORY, O_EXEC and O_SEARCH.
- * include/cygwin/version.h: Bump API minor number.
-
-2009-02-09 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_floppy.cc (fhandler_dev_floppy::open): Fix format. Add
- code to allow to read disk and CD/DVD devices in full length. Explain
- why.
- (fhandler_dev_floppy::raw_read): Add current position to debug output.
-
- * include/sys/sched.h: New stub file to override newlib file with
- clashing definitions.
-
-2009-02-05 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din: Export wcstok.
- * posix.sgml: Move wcstok from unimplemented to susv3.
- * include/cygwin/version.h: Bump API minor number.
-
-2009-02-04 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_proc.cc (proc_tab): Add entry for mounts symlink.
- (format_proc_mounts): New function to implement mounts symlink.
- * fhandler_process.cc (process_tab): Add entry for mounts file.
- (format_process_mounts): New function to implement mounts file.
-
-2009-02-04 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (alloc_sd): Disable generating default permission entries
- for directories.
-
-2009-01-29 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::readdir): Fix inode number
- evaluation for faked "." entry.
-
- * mount.cc (fs_info::update): Move setting of is_cdrom after checking
- for caseinsensitivity. Recognize UDF in is_cdrom case and set
- caseinsensitive flag according to UDF brokenness determined by OS.
- Add comment to explain why.
- * mount.h (class fs_info): Add is_udf status flag.
- * path.cc (symlink_info::check): Add workaround for UDF bug in
- terms of casesensitivity on certain OSes.
- * wincap.h (wincaps::has_broken_udf): New element.
- * wincap.cc: Implement above element throughout.
-
-2009-01-27 Christopher Faylor <me+cygwin@cgf.cx>
-
- * fhandler.cc (fhandler_base::wait_overlapped): Set bytes to -1 on
- EINTR or real error.
- (fhandler_base::write_overlapped): Assume that bytes_written will
- contain proper error value.
- * pipe.cc (fhandler_pipe::fhandler_pipe): Set uninterruptible_io since
- signals are handled by pipe functions now.
-
-2009-01-26 Corinna Vinschen <corinna@vinschen.de>
-
- * shared.cc (shared_name): New function for WCHAR names.
- (open_shared): Take name parameter as WCHAR. Accommodate throughout.
- * shared_info.h ((CURR_SHARED_MAGIC): Redefine.
- (shared_name): Add declaration for function taking a WCHAR name.
- (open_shared): Change declaration according to above change.
- * pinfo.cc (pinfo::init) : Accommodate above change.
-
-2009-01-26 Corinna Vinschen <corinna@vinschen.de>
-
- * grp.cc (getgrgid_r): Simplify code by using stpcpy.
- (getgrnam_r): Ditto.
- * passwd.cc (getpwuid_r32): Simplify code by using stpcpy.
- (getpwnam_r): Ditto.
-
-2009-01-26 Corinna Vinschen <corinna@vinschen.de>
-
- * uinfo.cc (pwdgrp::load): Open file with FILE_OPEN_FOR_BACKUP_INTENT
- flag.
-
-2009-01-24 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (mount_info::from_fstab): Open fstab file with
- FILE_OPEN_FOR_BACKUP_INTENT flag.
-
-2009-01-23 Corinna Vinschen <corinna@vinschen.de>
-
- * smallprint.cc (__small_vsprintf): Use already available buffer tmp
- in wfillin case.
-
-2009-01-22 Christopher Faylor <me+cygwin@cgf.cx>
-
- * select.cc (peek_serial): Add hack to allow proper operation with
- com0com driver.
-
-2009-01-21 Corinna Vinschen <corinna@vinschen.de>
-
- Remove USE_SERVER define. Accommodate throughout.
- * configure.in: Remove --enable-server option.
- * configure: Regenerate.
- * environ.cc: Remove CYGWIN=server setting.
-
-2009-01-20 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_procnet.cc: Reorganize global procnet content data into a
- new struct virt_tab_t. Accommodate throughout.
-
- * fhandler.h: Fix copyright dates.
- * fhandler_process.cc: Ditto.
- * fhandler_registry.cc: Ditto.
-
-2009-01-20 Corinna Vinschen <corinna@vinschen.de>
-
- * devices.h (FH_PROCESSFD): New device type.
- * dtable.cc (build_fh_pc): Add case for FH_PROCESSFD.
- * fhandler.h (class fhandler_virtual): Drop bufalloc member.
- * fhandler_virtual.h: New header.
- * fhandler_proc.cc: Remove types proc_type_t and proc_tab_t in favor
- of types virt_type_t and virt_tab_t from fhandler_virtual.h.
- Change prototypes of format_XXX functions accordingly.
- (proc_tab): Drop size member info.
- (fhandler_proc::fill_filebuf): Don't allocate filebuf here. Allocate
- it in the format_XXX functions.
- * fhandler_process.cc: Reorganize global process content data into a
- new struct virt_tab_t. Accommodate throughout.
- (format_process_winexename): New function.
- (format_process_winpid): New function.
- (format_process_exename): New function.
- (format_process_root): New function.
- (format_process_cwd): New function.
- (format_process_cmdline): New function.
- (format_process_ppid): New function.
- (format_process_uid): New function.
- (format_process_pgid): New function.
- (format_process_sid): New function.
- (format_process_gid): New function.
- (format_process_ctty): New function.
- (format_process_fd): New function.
- * fhandler_procnet.cc (fhandler_procnet::fill_filebuf): Don't use
- bufalloc.
- * fhandler_registry.cc (fhandler_registry::fill_filebuf): Define
- bufalloc locally.
- * fhandler_virtual.cc (fhandler_virtual::fhandler_virtual): Drop
- initialization of bufalloc.
- (fhandler_virtual::dup): Drop copying bufalloc.
-
-2009-01-20 Corinna Vinschen <corinna@vinschen.de>
-
- * thread.h (struct pthread_rwlock::RWLOCK_READER): Add counter n.
- * thread.cc (pthread_rwlock::rdlock): If a thread already owns a
- read lock, just count the number of locks for it, per SUSv4.
- (pthread_rwlock::tryrdlock): Ditto.
- (pthread_rwlock::unlock): If a thread has more than one concurrent
- read locks, just count down.
-
-2009-01-20 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (WSAIoctl): Reintroduce.
- (WSASendMsg): Define.
- * fhandler.h (class fhandler_socket): Change definition of recv_internal
- and send_internal to take WSAMSG pointer as parameter.
- * fhandler_socket.cc (WSAID_WSARECVMSG): Define.
- (LPFN_WSARECVMSG): Define.
- (WSASendMsg): Declare.
- (get_ext_funcptr): New function to fetch address of WSARecvMsg.
- (fhandler_socket::recv_internal): Take just a LPWSAMSG parameter.
- Change code accordingly. If control information is requested,
- fetch address of WSARecvMsg and use that instead of WSARecvFrom.
- (fhandler_socket::recvfrom): Change return type to ssize_t as
- declared in fhandler.h. Accommodate changes to recv_internal.
- (fhandler_socket::recvmsg): Ditto. Make sure that control information
- is only requested if system, address family, and socket type support it.
- (fhandler_socket::send_internal): Take just a LPWSAMSG parameter
- and the flags. Change code accordingly. If control information is
- provided, use WSASendMsg instead of WSASendTo.
- (fhandler_socket::sendto): Drop useless comment. Accommodate changes
- to send_internal.
- (fhandler_socket::sendmsg): Ditto. Make sure that control information
- is only provided if system, address family, and socket type support it.
- * wincap.h (wincaps::has_recvmsg): New element.
- (wincaps::has_sendmsg): New element
- * wincap.cc: Implement above elements throughout.
- * include/cygwin/socket.h (CMSG_ALIGN): Phrase in terms of alignment
- of type struct cmsghdr.
-
-2009-01-17 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (mmap64): Fix condition checking if anonymous mapping beyond
- EOF is required.
-
-2009-01-17 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_proc.cc: Reorganize global proc content data into a new
- struct proc_tab_t. Accommodate throughout.
- (format_proc_version): New function.
- (format_proc_loadavg): New function.
- (format_proc_self): New function.
-
- * resource.cc (getrlimit): Return correct rlim_max value for
- RLIMIT_NOFILE.
-
-2009-01-16 Corinna Vinschen <corinna@vinschen.de>
-
- * Fix copyright dates.
-
-2009-01-13 Corinna Vinschen <corinna@vinschen.de>
-
- * libc/getopt.c (parse_long_options): Use fix from NetBSD's getopt
- to avoid false ambiguities.
-
-2009-01-12 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (enum bin_status): New type.
- (try_to_bin): Return bin_status. Rename win32_path to pc. Rename h
- to fh. Rename fh to tmp_fh. Add code to set delete dispostion and
- more code to replace file moved to bin by another, temporary file.
- Add comments to explain why.
- (unlink_nt): Replace move_to_bin with bin_stat. Only set bin_stat
- to move_to_bin for non-remote files. As a last resort, call try_to_bin
- if setting delete-on-close failed. Only re-set R/O DOS attribute
- and only close handle if it's still valid.
-
-2009-01-11 Corinna Vinschen <corinna@vinschen.de>
-
- * errno.cc (errmap): Set errno to ENOENT instead of ENOSHARE throughout.
- * path.cc (path_conv::check): Set to and check for ENOENT instead of
- ENOSHARE.
-
- * path.cc (symlink_info::check): Fix Samba 3.2.x comment.
-
-2009-01-09 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (mount_info::from_fstab_line): Always convert drive
- letter in native path to uppercase.
- * path.cc (normalize_win32_path): Ditto.
- (path_prefix_p): Revert previous patch.
-
- * path.cc (symlink_info::check): Check for STATUS_INVALID_PARAMETER
- return code to circumvent weird behaviour of Samba 3.2.x shares.
-
-2009-01-09 Christopher Faylor <me+cygwin@cgf.cx>
-
- * include/sys/cygwin.h (CW_SETERRNO): Define.
- * external.cc (CW_SETERRNO): Implement.
- * include/cygwin/version.h: Bump CYGWIN_VERSION_API_MINOR to 192 to
- reflect the above change.
-
- * path.cc (path_prefix_p): Treat X: as equivalent to x:.
-
- * mkglobals_h: Remove unneeded #define.
-
- * spawn.cc (spawn_guts): Avoid overly wordy initialization to zero.
-
-2009-01-08 Corinna Vinschen <corinna@vinschen.de>
-
- * libc/fts.c (fts_build): Use DT_DIR case on Cygwin.
- (fts_ufslinks): Fix using wrong structure member in Cygwin-specific
- code.
-
-2009-01-07 Corinna Vinschen <corinna@vinschen.de>
-
- * ntdll.h: Reorder NT status flags. Fix a case difference. Add
- STATUS_CANNOT_DELETE flag.
- * syscalls.cc (unlink_nt): Change initial NtOpenFile to request
- FILE_SHARE_DELETE sharing mode. Change comment accordingly.
- If setting delete disposition failed with STATUS_CANNOT_DELETE, try
- to delete using delete-on-close. Explain why.
- Rearrange setting R/O DOS attribute after trying to delete. Simplify
- comment.
-
-2009-01-07 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::link): Only add .exe if
- original file has .exe as well.
- * path.cc (path_conv::is_binary): Only recognize Windows 32 and 64 bit
- apps as binaries.
-
-2009-01-02 Christopher Faylor <me+cygwin@cgf.cx>
-
- Remove unneeded header files from source files throughout.
- Update copyrights where appropriate.
-
- * globals.cc: New file for generic global variables.
- * mkglobals_h: New script to generate globals.h.
- * mkstatic: New script used to build a (currently non-working) static
- libcygwin_s.a.
- * Makefile.in: Add unused rule to build a non-working libcygwin_s.a.
- (DLL_OFILES): Add globals.o. Make all objects rely on globals.h.
- (globals.h): New target. Generate globals.h.
- * cygtls.h: Honor new CYGTLS_HANDLE define to control when the HANDLE
- operator is allowed in _cygtls.
- * dcrt0.cc: Move most globals to globals.cc.
- * init.cc: Ditto.
- * environ.cc (strip_title_path): Remove now-unneeded extern.
- * fhandler_serial.cc (fhandler_serial::open): Ditto.
- * pinfo.cc: Ditto.
- (commune_process): Ditto.
- * shared.cc: Ditto.
- * glob.cc: Ditto.
- * strace.cc: Ditto.
- * exceptions.cc: Define CYGTLS_HANDLE before including winsup.h.
- * path.cc (stat_suffixes): Move here.
- * security.h: Add forward class path_conv declaration.
- * smallprint.cc (__small_vsprintf): Make a true c++ function.
- (__small_sprintf): Ditto.
- (small_printf): Ditto.
- (console_printf): Ditto.
- (__small_vswprintf): Ditto.
- (__small_swprintf): Ditto.
- * spawn.cc (spawn_guts): Remove _stdcall decoration in favor of
- regparm.
- (hExeced): Move to globals.cc
- * strfuncs.cc (current_codepage): Ditto.
- (active_codepage): Ditto.
- * sync.cc (lock_process::locker): Move here from dcrt0.cc.
- * syscalls.cc (stat_suffixes): Move to path.cc.
- * tty.cc (tty::create_master): Uncapitalize fatal warning for
- consistency.
- * winsup.h: Include globals.h to declare most of the grab bag list of
- globals which were previously defined here.
-
- * mount.h: Move USER_* defines back to shared_info.h.
-
- * speclib: Force temporary directory cleanup.
-
-2009-01-02 Christopher Faylor <me+cygwin@cgf.cx>
-
- * speclib: Rewrite completely in perl. Avoid multiple nm calls.
-
diff --git a/winsup/cygwin/ChangeLog-2010 b/winsup/cygwin/ChangeLog-2010
deleted file mode 100644
index cd103f7e9..000000000
--- a/winsup/cygwin/ChangeLog-2010
+++ /dev/null
@@ -1,3103 +0,0 @@
-2010-12-29 Christopher Faylor <me+cygwin@cgf.cx>
-
- * cygtls.cc: Include stdlib.h.
- (_cygtls::init_thread): Seed random number generator on a per-thread
- basis.
-
-2010-12-27 Christopher Faylor <me+cygwin@cgf.cx>
-
- * include/cygwin/version.h: Bump CYGWIN_VERSION_API_MINOR to 234.
-
-2010-12-26 Christopher Faylor <me+cygwin@cgf.cx>
-
- * cygwin.din: Export program_invocation_name and program_invocation_short_name.
- * dcrt0.cc: Set program_invocation*name to correct values, based on
- argv[0].
- * globals.cc (program_invocation_name): Define.
- (program_invocation_short_name): Ditto.
-
-2010-12-16 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (alloc_sd): Really fix erroneous inheritence entry
- duplication now. Add more comments for clarity.
-
-2010-12-15 Christian Franke <franke@computer.org>
-
- * sec_acl.cc (getacl): Ensure that the default acl contains at least
- DEF_(USER|GROUP|OTHER)_OBJ entries.
-
-2010-12-15 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (alloc_sd): Fix erroneous inheritence entry duplication.
-
-2010-12-12 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (check_dir_not_empty): Never count more than 3 directory
- entries.
-
-2010-12-12 Christopher Faylor <me+cygwin@cgf.cx>
-
- * init.cc (search_for): Put this in shared section or suffer subtle
- problems with the tls.
- * pinfo.cc (status_exit): Add debug output to report on unexpected exit.
- * tls_pbuf.cc (tmp_pathbuf::c_get): Add more details to internal error.
-
-2010-12-09 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (RETRY_COUNT): New define.
- (std_dll_init): Restructure loop to retry loading a DLL only if
- specific errors occur. If these errors persist, try to load DLL
- with name only.
-
-2010-12-08 Corinna Vinschen <corinna@vinschen.de>
-
- * include/strings.h: Remove in favor of equivalent newlib file.
-
-2010-12-08 Christian Franke <franke@computer.org>
-
- * sec_acl.cc (getacl): Set DEF_CLASS_OBJ permissions to 07 instead
- of 0777.
-
-2010-12-06 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (path_conv::check): Don't generate ENOENT for non-existant
- CYGDRIVE and NETDRIVE paths. Add comment.
-
-2010-12-02 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (get_xp_ifs): Fix counting of idx to return stable interface
- alias names for interfaces with multiple IPv4 addresses.
-
-2010-11-29 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_tty.cc (fhandler_tty_slave::dup): Free path_conv strings
- to avoid memory leak. Add comment.
- (fhandler_pty_master::dup): Ditto.
- * path.h (path_conv::free_strings): New method.
-
-2010-11-23 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (SendARP): Remove.
- * net.cc (get_flags): Set IFF_NOARP flag for PPP and SLIP devices.
- (get_xp_ifs): Unify IFF_BROADCAST setting. Drop calling SendARP to
- set IFF_NOARP flag.
-
-2010-11-23 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (symlink_info::check): Don't use FileNetworkOpenInformation
- on Netapps. Relax condition for workaround. Always request size
- information via FileStandardInformation info class in workaround.
-
-2010-11-22 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (NETAPP_IGNORE): Add FILE_PERSISTENT_ACLS.
- (FS_IS_NETAPP_DATAONTAP): Drop test for FILE_PERSISTENT_ACLS.
- (fs_info::update): Set filetype to ntfs in remote case, too. Fix a
- couple of comments. Add test for Netapps faking to be FAT.
-
- * mount.h (IMPLEMENT_FS_FLAG): Simplify definition and usage.
-
-2010-11-22 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (get_ipv4fromreg_ipcnt): Fix debug output. Only create debug
- output if error is not ERROR_FILE_NOT_FOUND.
- (get_ipv4fromreg): Ditto.
-
-2010-11-18 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_tty.cc (fhandler_tty_slave::fchown): Initialize mode to 0.
-
-2010-11-15 Corinna Vinschen <corinna@vinschen.de>
-
- * posix.sgml: Move llround and llroundf to implemented SUSv4 functions.
- * include/cygwin/version.h: Add llround and llroundf to the comment for
- the 233 CYGWIN_VERSION_API_MINOR bump.
-
-2010-11-02 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * include/paths.h (_PATH_VARTMP): Define.
-
-2010-10-30 Christopher Faylor <me+cygwin@cgf.cx>
-
- * localtime.cc (is_upper): Rename to isupper and include ctype.h to
- pull in standard macro.
- (lcl_is_set): Define as an enum.
- (tzsetwall): Assign lcl_is_set to correct enum values.
- (tzset): Ditto. Copy as much of TZ as will fit to TZ buffer.
-
-2010-10-27 Christopher Faylor <me+cygwin@cgf.cx>
-
- * include/cygwin/version.h: Bump CYGWIN_VERSION_API_MINOR to 233.
-
-2010-10-24 Christopher Faylor <me+cygwin@cgf.cx>
-
- * dcrt0.cc (do_exit): Don't set thread termination until all fds have
- been closed since an fd may rely on a thread.
- * fhandler_tty.cc: Reformat comment.
- (fhandler_pty_master::pty_master_thread): Don't treat
- ERROR_PIPE_CONNECTED state as an error.
- * globals.cc (exit_states): Reorder ES_THREADTERM.
-
- * path.cc (find_fast_cwd_pointers): Remove excessively wordy DEBUGGING output.
-
-2010-10-24 Christopher Faylor <me+cygwin@cgf.cx>
-
- * exceptions.cc (try_to_debug): Improve comment.
- * fhandler_tty.cc (fhandler_pty_master::fhandler_pty_master): Add a
- comment.
-
-2010-10-23 Christopher Faylor <me+cygwin@cgf.cx>
-
- * pinfo.cc (pinfo::exit): Grab a tty lock before setting pgid.
-
-2010-10-23 Christopher Faylor <me+cygwin@cgf.cx>
-
- * pinfo.cc (pinfo::exit): Reset tty pgrp to zero if no more handles open.
- (_pinfo::set_ctty): Remove debugging stuff.
-
-2010-10-23 Christopher Faylor <me+cygwin@cgf.cx>
-
- * fhandler_tty.cc (fhandler_pty_master::open): Remove debugging printf.
-
-2010-10-23 Christopher Faylor <me+cygwin@cgf.cx>
-
- * fhandler.h (fhandler_termios::tcinit): Make second argument
- non-optional.
- * fhandler_console.cc (fhandler_console::open): Specify second argument
- to tcinit.
- * fhandler_termios.cc (fhandler_termios::tcinit): Rename second
- argument. Set pgid to 0 if this is a pty master.
- (fhandler_termios::tcgetpgrp): Just return value of pgid. It will be
- zero if not initialized.
- * fhandler_tty.cc (fhandler_tty_slave::open): Specify second argument
- to tcinit.
- (fhandler_tty_slave::ioctl): Implement TIOCGPRP/TIOCSPGRP. Fix switch
- indentation.
- (fhandler_tty_master::ioctl): Implement TIOCGPRP/TIOCSPGRP.
- * include/sys/termios.h (TIOCGPGRP): Define similarly to Linux.
- (TIOCSPGRP): Ditto.
-
-2010-10-18 Marco Atzeri <marco_atzeri@yahoo.it>
-
- * winsup/cygwin/cygwin.din: Add llround and llroundf.
-
-2010-10-09 John Carey <aeolus@electric-cloud.com>
- Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.h (cwdstuff::override_win32_cwd): Declare.
- * ntdll.h (struct _PEB): Add members accessed by the fast cwd method
- starting with Vista.
- (struct _KUSER_SHARED_DATA): Define with only the DismountCount.
- (RtlAllocateHeap): Declare.
- (RtlEnterCriticalSection): Declare.
- (RtlFreeHeap): Declare.
- (RtlLeaveCriticalSection): Declare.
- * path.cc (get_user_proc_parms): Remove.
- (struct _FAST_CWD): New structure.
- (fast_cwd_ptr): Define.
- (SharedUserData): Define.
- (peek32): Define.
- (find_fast_cwd_pointers): New function to find the global pointer
- to the current FAST_CWD structure.
- (copy_cwd_str): New helper function.
- (cwdstuff::override_win32_cwd): New method to set the Win32 CWD.
- (cwdstuff::init): Just call override_win32_cwd from here when
- started from native Win32 parent.
- (cwdstuff::set): Access Win32 CWD via PEB reference instead of using
- get_user_proc_parms function. Memorize old DismountCount before
- opening directory handle. Call override_win32_cwd to set up Win32 CWD.
- Be more verbose in comments.
- * wincap.h (wincaps::has_fast_cwd): New element.
- * wincap.cc: Implement has_fast_cwd element throughout.
-
-2010-10-08 Marco Atzeri <marco_atzeri@yahoo.it>
- Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din: Export new complex math functions from newlib.
- * posix.sgml: Move newly exported complex functions to implemented
- SUSv4 functions.
- * include/cygwin/version.h: Bump API minor version.
-
-2010-10-07 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (fhandler_base::get_stat_access): Delete.
- * fhandler_disk_file.cc (fhandler_base::fstat_helper): Always check
- executable suffix to get x-bits for .exe files also in notexec case.
- Always reopen file when checking for file header.
- * ntdll.h (wait_pending): Delete.
- * path.cc (symlink_info::check_shortcut): Drop call to wait_pending
- since file is always opened for sync IO.
- (symlink_info::check_sysfile): Ditto.
- (MIN_STAT_ACCESS): Remove.
- (FULL_STAT_ACCESS): Remove.
- (symlink_info::check): Drop access flag. Revert to open file with
- just read attributes access. Reorder symlink check to check for
- reparse points first. Don't check reparse points for anything else,
- even on remote drives. Open file for GENERIC_READ when trying to
- read shortcuts or system-bit symlinks. Accommodate dropped access
- flag in call to path_conv_handle::set.
- * path.h (class path_conv_handle): Drop access flag and accommodate
- all related methods.
-
-2010-10-06 Corinna Vinschen <corinna@vinschen.de>
-
- * posix_ipc.cc (ipc_mutex_init): Call NtCreateMutant to make sure the
- access mask is correct.
- (ipc_cond_init): Take additional parameter to differ between send and
- receive event. Call NtCreateEvent to make sure the access mask is
- correct.
- (ipc_cond_timedwait): Reset Event prior to calling WFMO.
- (struct mq_info): Split mqi_wait into two events, mqi_waitsend and
- mqi_waitrecv.
- (mq_open): Calloc mqinfo. Create mqi_waitsend and mqi_waitrecv events.
- Make sure all synchronization objects are closed in case of an error.
- (_mq_send): Wait for mqi_waitsend event. Signal mqi_waitrecv event.
- (_mq_receive): Wait for mqi_waitrecv event. Signal mqi_waitsend event.
- (mq_close): Close mqi_waitsend and mqi_waitrecv events.
-
-2010-10-05 Corinna Vinschen <corinna@vinschen.de>
-
- * path.h (enum pathconv_arg): Remove PC_CHECK_EA.
-
-2010-10-02 Christopher Faylor <me+cygwin@cgf.cx>
-
- * dcrt0.cc (dll_crt0_0): Move _main_tls initialization here.
- (__dll_crt0): Only initialize _main_tls if it changes.
- * fhandler_console.cc (fhandler_console::write): Fix debugging output.
-
-2010-10-02 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_base::fstat_by_nfs_ea): Simplify.
- Just call nfs_fetch_fattr3 if called via fstat.
- * nfs.cc (nfs_fetch_fattr3): New function to fetch NFS fattr3 info from
- file handle.
- * nfs.h (nfs_fetch_fattr3): Declare.
- * path.cc (symlink_info::check): Simplify NFS case. Just call
- nfs_fetch_fattr3.
-
-2010-10-02 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_procsys.cc (fhandler_procsys::exists): Return virt_none
- if path is invalid.
-
-2010-10-01 Christopher Faylor <me+cygwin@cgf.cx>
-
- * autoload.cc (std_dll_init): Add a retry loop.
-
-2010-09-30 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc: Drop including nfs.h.
- * fhandler_disk_file.cc: Ditto.
- (fhandler_base::fstat_by_nfs_ea): Use fattr3 from path_conv member,
- unless called from fstat.
- * path.cc: Drop including nfs.h.
- (symlink_info::check): Rearrange definition of file info buffers.
- Fetch fattr3 info for files on NFS and store in conv_hdl for later
- use in fhandler_base::fstat_by_nfs_ea. Use fattr3 file type to
- recognize symlink on NFS and try to fetch symlink target only for
- actual symlinks.
- * path.h: Include nfs.h.
- (class path_conv_handle): Change file info storage to union of
- FILE_NETWORK_OPEN_INFORMATION and fattr3 structures.
- (path_conv_handle::fnoi): Align to aforementioned change.
- (path_conv_handle::nfsattr): New method.
- (path_conv::nfsattr): New method.
-
-2010-09-30 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (symlink_info::check): Remove erroneous assumption about
- required permissions when reading NFS symlinks.
-
-2010-09-29 Christopher Faylor <me+cygwin@cgf.cx>
-
- * fhandler_tty.cc (fhandler_tty_slave::init): Revert to using
- tc->setpgid since previous change broke some use cases.
-
-2010-09-28 Christopher Faylor <me+cygwin@cgf.cx>
-
- * fhandler_tty.cc (fhandler_tty_slave::init): Add debugging. Use
- tcsetpgrp to potentially set pgid since it is smarter about deciding if
- a process is in the background.
- * include/sys/cygwin.h (PID_ORPHANED): Actually delete as planned.
- (PID_NOTCYGWIN): Correctly define.
-
-2010-09-28 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (getdomainname): Drop special case for NT4.
-
-2010-09-28 Corinna Vinschen <corinna@vinschen.de>
-
- Revert accidental previous login.
-
-2010-09-28 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (DLL_IMPORTS): Remove libadvapi32.a.
- * autoload.cc: Add all advapi32 entry points.
- * mount.cc (mount_info::init): Read user fstab only if we have a
- username.
- * passwd.cc (pwdgrp::read_passwd): Only use username if we have one.
- * shared.cc (user_info::initialize): Set cb last so as not to override
- planned behaviour in pwdgrp::read_passwd.
- * uinfo.cc (cygheap_user::init): Fetch Windows username from environment
- variable $USERNAME. Don't set name in cygheap if variable is empty.
- (internal_getlogin): If we still have no username, try GetUserNameW.
-
-2010-09-28 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_tty.cc (fhandler_pty_master::setup): Always create master
- thread.
-
-2010-09-28 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (gethostid): Use correct path to ProductId registry value.
-
-2010-09-27 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (fs_info::update): Remove erroneous NtClose on random handle
- value.
-
-2010-09-26 Corinna Vinschen <corinna@vinschen.de>
-
- * uinfo.cc (cygheap_user::init): Call GetUserNameW and convert to
- multibyte here so as not to rely on the current ANSI page.
-
-2010-09-26 Christopher Faylor <me+cygwin@cgf.cx>
-
- * dcrt0.cc (__main): Force signal synchronization.
-
-2010-09-25 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::bind): Drop has_exclusiveaddruse
- condition. Fix comment about availability. Move remaining comment to
- the right spot. Drop has_ip_helper_lib condition.
- * net.cc (cygwin_setsockopt): Drop has_disabled_user_tos_setting
- condition. Fix comment.
- (get_2k_ifs): Fix comment.
- (get_nt_ifs): Remove.
- (getifaddrs): Drop call to get_nt_ifs.
- (get_ifconf): Ditto.
- * wincap.cc: Throughout, drop has_ip_helper_lib,
- has_disabled_user_tos_setting, and has_exclusiveaddruse settings from
- wincaps.
- (wincap_unknown): Remove.
- (wincap_nt4): Remove.
- (wincap_minimal): New macro, set to wincap_nt4sp4 for now.
- (wincapc::init): Drop test for pre-SP4 NT4. Just imply at least NT SP4.
- Replace references to wincap_unknown with references to wincap_minimal.
- * wincap.h (struct wincaps): Drop has_ip_helper_lib,
- has_disabled_user_tos_setting, and has_exclusiveaddruse flags and
- methods.
-
-2010-09-25 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc: Throughout, order entry points alphabetically by DLL
- and function name. Make functions which are available on all supported
- systems non-optional. Fix return value on entry points imported from
- secur32.dll. Add comment.
- (std_dll_init): Call fesetenv unconditionally.
-
-2010-09-24 Christopher Faylor <me+cygwin@cgf.cx>
-
- * autoload.cc (std_dll_init): Move dll_path closer to its use. Use
- dll_path in fatal error. Set ret values under lock control.
- * lib/minires.c (res_nsend): Fix compilation errors owing to pointer
- signedness.
-
-2010-09-24 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::open): Handle query_write_dac flag.
- * fhandler.h (enum query_state): Add query_write_dac flag.
- * fhandler_disk_file.cc (fhandler_disk_file::fchmod): Open file
- with query_write_dac instead of query_write_control.
-
-2010-09-24 Corinna Vinschen <corinna@vinschen.de>
-
- * errno.cc (errmap): Map ERROR_BAD_NET_RESP to ENOSYS.
- * fhandler_disk_file.cc (fhandler_disk_file::facl): Handle ENOSYS and
- point to the explanation.
- * ntdll.h (STATUS_NOT_IMPLEMENTED): Define.
- * path.cc (symlink_info::check): Handle the inability of NT4 to use
- FileNetworkOpenInformation on share root dirs in either direction.
- * path.h (slash_unc_prefix_p): Remove unused declaration.
- * security.cc (get_info_from_sd): Handle ENOSYS from get_file_sd.
- Explain when this happens.
-
-2010-09-23 Christopher Faylor <me+cygwin@cgf.cx>
-
- * autoload.cc (std_dll_init): Use correct format type when displaying
- dll name in error output.
-
-2010-09-21 Pierre Humblet <Pierre.Humblet@ieee.org>
-
- * libc/minires.c (res_nsend): Use the Windows resolver if appropriate.
- (dn_expand): Only set errno in case of error. Delete old comments.
- (dn_skipname): Fix typo in comment.
-
-2010-09-21 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (cwdstuff::set): Replace constant 2 with sizeof(WCHAR) where
- appropriate.
-
-2010-09-21 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.h (class fs_info): Add has_buggy_reopen flag and accessor
- methods.
- * mount.cc (fs_info::update): Set has_buggy_reopen flag for NWFS.
- Add comment.
- * path.h (path_conv::get_object_attr) Make inline method.
- (path_conv::init_reopen_attr): New inline method.
- * path.cc (path_conv::get_object_attr): Remove.
- * fhandler_disk_file.cc (fhandler_base::fstat_helper): Use
- path_conv::init_reopen_attr method to initialize OBJECT_ATTRIBUTE for
- reopening file.
- (fhandler_disk_file::fchmod): Ditto.
- (fhandler_base::utimens_fs): Ditto.
- (fhandler_disk_file::rewinddir): Ditto.
- * syscalls.cc (unlink_nt): Ditto.
-
-2010-09-21 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::open): Always open NFS files with
- FILE_READ_EA, even when opening with O_WRONLY to allow fstat.
- * fhandler_disk_file.cc (fhandler_base::fstat_by_nfs_ea): Call
- FlushFileBuffers if file has been opened for writing. Explain why.
- (fhandler_base::fstat_by_handle): Renew content of pc.fnoi if called
- via fstat. Explain why. Fix formatting.
- * path.cc (symlink_info::check): Try to open file the second time with
- FILE_READ_EA permissions since it's needed in later calls to
- fhandler_base::fstat_by_nfs_ea.
-
-2010-09-20 Christopher Faylor <me+cygwin@cgf.cx>
-
- * include/sys/cygwin.h (PID_NOTCYGWIN): New enum.
- * spawn.cc (spawn_guts): Set a flag when a process is not a cygwin
- process.
- * fhandler_tty.cc (fhandler_tty_slave::init): Remove previous change.
- Try a different method to determine when we should become the process
- group owner.
- * signal.cc (kill0): Remove archaic code which dealt with never-set
- flag.
-
-2010-09-20 Christopher Faylor <me+cygwin@cgf.cx>
-
- * fhandler_tty.cc (fhandler_tty_slave::init): Add additional checks to
- determine when a process should grab control of a tty's pgid. Use
- being_debugged() for consistency.
- * debug.h (being_debugged): Remove vestige of win9x accommodation.
-
-2010-09-19 Christopher Faylor <me+cygwin@cgf.cx>
-
- * wincap.h (wincaps::has_buggy_thread_startup): Declare.
- (wincapc::has_buggy_thread_startup): Ditto.
- * wincap.cc::wincap_*): Accommodate has_buggy_thread_startup.
- (wincapc::init): Explicitly turn off has_buggy_thread_startup if not
- WOW64.
- * cygthread.h (cygthread::thread_handle): Declare/define new method.
- * dcrt0.cc (_dll_crt0): Don't call __sinit here.
- (dll_crt0_0): Don't call sigproc_init during initialization
- if wincap.has_buggy_thread_startup().
- (dll_crt0_1): Defer sigproc_init to here when
- wincap.has_buggy_thread_startup(). Call __sinit after we've determined
- that we're not forking.
- (__main): Rework comments. Add potential future reminder.
-
-2010-09-15 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_base::fstat_by_handle): Fetch number
- of links and inode number only if path has good inodes.
- (fhandler_base::fstat_by_name): Fetch inode number only if path has
- good inodes.
-
-2010-09-14 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (symlink_info::check): Make sure AllocationSize and EndOfFile
- are stored in the right order when fetching the info from the
- NtQueryDirectoryFile result.
-
-2010-09-13 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_process.cc (get_mem_values): Simplify code. Fix
- NtQueryVirtualMemory loop so it handles memory allocation gracefully.
- Always set errno to a useful value.
-
-2010-09-13 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (class fhandler_base): Change inheritance of fstat_helper
- and fstat_by_... methods to private.
- (fhandler_base::fstat_helper): Drop all redundant arguments.
- * fhandler_disk_file.cc (fhandler_base::fstat_by_handle): Drop call
- to fstat_by_nfs_ea here. Drop fetching basic file information.
- Drop setting file attributes. Accommodate change in fstat_helper call.
- (fhandler_base::fstat_by_name): Simplify. Only fetch directory
- information to get the inode number. Drop setting file attributes.
- Accommodate change in fstat_helper call.
- (fhandler_base::fstat_fs): Call fstat_by_nfs_ea if on NFS.
- (fhandler_base::fstat_helper): Drop all redundant arguments. Use
- information already collected in the fhandler. Move heading comment
- into code and drop dwFileAttributes comment.
- * mmap.cc (mmap64): Call fstat_fs rather than fstat_by_handle.
- * mount.cc (fs_info::update): Note that has_buggy_basic_info is unused.
- * path.cc (symlink_info::check_reparse_point): Add comment.
- (symlink_info::check): Fetch FileNetworkOpenInformation rather than
- FileBasicInformation throughout, except on NFS. Explain why. Store
- FILE_NETWORK_OPEN_INFORMATION in conv_hdl. Remove
- FILE_ATTRIBUTE_DIRECTORY attribute in conv_hdl for reparse point
- symlinks.
- * path.h (class path_conv_handle): Add FILE_NETWORK_OPEN_INFORMATION
- member _fnoi.
- (path_conv_handle::fnoi): New accessor method for _fnoi.
- (path_conv::fnoi): New accessor method for cubv_hdl._fnoi.
-
- * fhandler_tty.cc (fhandler_tty_slave::init): Use tty::setpgid method.
-
-2010-09-12 Corinna Vinschen <corinna@vinschen.de>
-
- * sec_acl.cc (acl_worker): Remove.
- (acl32): Implement acl_worker functionality here.
- (lacl32): Just return -1 with errno set to ENOSYS.
- (lacl): Ditto.
- * include/cygwin/acl.h (lacl): Remove this call.
-
-2010-09-12 Christopher Faylor <me+cygwin@cgf.cx>
-
- * sigproc.cc (sig_dispatch_pending): Remove debugging statement.
- (sigproc_init): Wrap a long line.
-
-2010-09-12 Christopher Faylor <me+cygwin@cgf.cx>
-
- * cygthread.h (cygthread::cygthread): Reorganize slightly.
- * dcrt0.cc (dll_crt0_0): Move sigproc initialization later to ensure
- everything we need has been set up.
- (dll_crt0_1): Streamline some logic slightly.
- * sigproc.cc (no_signals_available): Add back dropped test for macro
- parameter.
- * fhandler_console.cc (fhandler_console::write): Show a little bit of
- what's being written to the console in debugging output.
-
-2010-09-12 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (start_transaction): Make inline function. Move up to be
- more generally available.
- (stop_transaction): Ditto.
- (unlink_nt): Potentially start transaction when trying to delete file
- with DOS R/O attribute set. If file is .lnk symlink, check for number
- of hardlinks. Add "out" label and only return via "out". Rearrange
- reversion of DOS R/O attribute and, on success, only revert R/O
- attribute if file is .lnk symlink with more than one hardlink. Add
- length comment to explain why.
-
-2010-09-11 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::rmdir): More thoroughly
- check the existence condition on remote drives. Enhance comment.
-
-2010-09-11 Dave Korn <dave.korn.cygwin@gmail.com>
-
- * Makefile.in (DLL_OFILES): Add new fenv.o module.
- (fenv_CFLAGS): New flags definition for fenv.o compile.
- * autoload.cc (std_dll_init): Use fenv.h functions instead of direct
- manipulation of x87 FPU registers.
- * crt0.c (mainCRTStartup): Likewise.
- * cygwin.din (feclearexcept, fegetexceptflag, feraiseexcept,
- fesetexceptflag, fetestexcept, fegetround, fesetround, fegetenv,
- feholdexcept, fesetenv, feupdateenv, fegetprec, fesetprec,
- feenableexcept, fedisableexcept, fegetexcept, _feinitialise,
- _fe_dfl_env, _fe_nomask_env): Export new functions and data items.
- * fenv.cc: New file.
- * posix.sgml: Update status of newly-implemented APIs.
- * include/fenv.h: Likewise related header.
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
-
-2010-09-10 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (rename): Limit retry loop in case of sharing violation
- to about a second.
-
-2010-09-10 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (fstatat): Call stat_worker directly from here.
-
-2010-09-10 Corinna Vinschen <corinna@vinschen.de>
-
- * flock.cc (allow_others_to_sync): Define MAX_PROCESS_SD_SIZE. Use
- instead of ACL_DEFAULT_SIZE.
- * sec_acl.cc (setacl): Use TLS buffer to allow maximum ACL size.
- * security.h (ACL_DEFAULT_SIZE): Drop definition.
- (ACL_MAXIMUM_SIZE): Define.
- (SD_MAXIMUM_SIZE): Define.
- * security.cc (get_file_sd): Allocate security_decscriptor with size
- SD_MAXIMUM_SIZE.
- (alloc_sd): Use TLS buffer to allow maximum ACL size.
-
-2010-09-10 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (class fs_info_cache): New class to cache filesystem
- information.
- (fs_info::update): Check FileFsVolumeInformation against filesystem
- cache and use it, if filesystem is already available. Add filesystem
- to cache, if not. Only request FileFsObjectIdInformation if
- FILE_SUPPORTS_OBJECT_IDS is set in filesystem flags.
- * ntdll.h (struct _FILE_FS_VOLUME_INFORMATION): Add pragma pack so the
- structure size is matching the OS expectations. Add __dummy member
- used in filesystem cache.
-
-2010-09-10 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (get_file_sd): Add bool parameter justcreated. Use
- GetSecurityInfo only if justcreated is true, NtQuerySecurityObject
- otherwise. Add comment to explain why. Don't waste time to call
- NtQuerySecurityObject twice, just allocate big enough area.
- (get_file_attribute): Call get_file_sd with justcreated set to false.
- (set_file_attribute): Call get_file_sd with justcreated depending on
- S_JUSTCREATED pseudo file attribute.
- (check_file_access): Call get_file_sd with justcreated set to false.
- * sec_acl.cc (setacl): Ditto.
- (getacl): Ditto.
- * security.h: Convert many functions to regparm functions.
- (get_file_sd): Declare with extra bool parameter.
-
-2010-09-10 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_procsys.cc (fhandler_procsys::exists): Rearrange to handle
- dangling symlinks correctly. Fix comments.
- (fhandler_procsys::fill_filebuf): Remove useless comment.
-
-2010-09-08 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_procsys.cc (fhandler_procsys::open): Simplify by just
- calling fhandler_base::open.
-
-2010-09-06 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (DLL_OFILES): Add fhandler_procsys.o.
- * devices.h (enum fh_devices): Add FH_PROCSYS.
- * devices.in (dev_procsys_storage): New device.
- * devices.cc: Regenerate.
- * dtable.cc (build_fh_pc): Add code to allocate fhandler_procsys.
- * fhandler.h (proc_len): Convert to size_t.
- (procsys): Declare.
- (procsys_len): Declare.
- (enum virtual_ftype_t): Move here from fhandler_virtual.h.
- Add members supported by fhandler_procsys.
- (fhandler_virtual::exists): Return virtual_ftype_t. Change
- in all derived classes.
- (class fhandler_procsys): New class.
- (fhandler_union): Add fhandler_procnet and fhandler_procsys members.
- * fhandler_disk_file.cc (__DIR_mounts::check_missing_mount): Use
- ro_u_proc.
- (fhandler_base::fstat_by_handle): Don't copy attributes if file is an
- NT device.
- (fhandler_base::fstat_by_name): Ditto.
- * fhandler_netdrive.cc (fhandler_netdrive::exists): Return
- virtual_ftype_t.
- * fhandler_proc.cc (proc_tab): Sort alphabetically. Use _VN macro
- to store length.
- (proc_len): Change to size_t.
- (proc_tab_cmp): New static function.
- (virt_tab_search): New function to search entry in virt_tab_t
- arrays. Use throughout in /proc and sibling classes instead of
- loop.
- (fhandler_proc::exists): Return virtual_ftype_t.
- * fhandler_process.cc (process_tab): Sort alphabetically. Use _VN
- macro to store length.
- (fhandler_process::exists): Return virtual_ftype_t.
- (fhandler_process::open): Simplify code.
- * fhandler_procnet.cc (procnet_tab): Sort alphabetically. Use _VN
- macro to store length.
- (fhandler_procnet::exists): Return virtual_ftype_t.
- (fhandler_procnet::open): Simplify.
- * fhandler_procsys.cc: New file.
- * fhandler_registry.cc (fhandler_registry::exists): Return
- virtual_ftype_t.
- * fhandler_virtual.cc (fhandler_virtual::exists): Ditto.
- * fhandler_virtual.h (enum virtual_ftype_t): Move to fhandler.h.
- (virt_tab_t): Add name_len member.
- (_VN): New macro.
- (virt_tab_search): Declare.
- * mount.cc (mount_info::conv_to_win32_path): Fix comment. Backslashify
- isprocsys_dev paths.
- * ntdll.h (STATUS_OBJECT_TYPE_MISMATCH): Define
- (STATUS_INSTANCE_NOT_AVAILABLE): Define.
- (STATUS_PIPE_NOT_AVAILABLE): Define.
- (STATUS_INVALID_PIPE_STATE): Define.
- (STATUS_PIPE_BUSY): Define.
- (SYMBOLIC_LINK_QUERY): Define.
- (NtOpenSymbolicLinkObject): Declare.
- (NtQuerySymbolicLinkObject): Declare.
- * path.cc (path_conv::check): Accommodate fact that exists method
- returns virtual_ftype_t now. Add cases for new virtual_ftype_t
- types.
- (cygwin_conv_path): Add GLOBALROOT prefix to native device paths.
- Make sure to strip \\?\ prefix only for actual filesystem-based
- paths, not for all paths.
- * path.h (isproc_dev): Add FH_PROCSYS.
- (isprocsys_dev): Define.
-
-2010-09-04 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (mount_info::from_fstab_line): Reorder to make sure all
- mounts from user fstab are user mounts.
- (mount): Make sure all mounts are user mounts, even those added via
- mount -a.
-
-2010-09-02 Christopher Faylor <me+cygwin@cgf.cx>
-
- * sigproc.cc (sigproc_init): Use American spelling in comment.
-
-2010-09-01 Christopher Faylor <me+cygwin@cgf.cx>
-
- * dcrt0.cc (dll_crt0_0): Remove myself settings.
- * fork.cc (fork): Set myself process_state.
- * pinfo.cc (pinfo_init): Ditto.
- (pinfo::thisproc): Make sure any sendsig setting is correctly copied.
- * pinfo.h: Update copyright. Remove unused code.
-
-2010-09-01 Christopher Faylor <me+cygwin@cgf.cx>
-
- * cygthread.cc (cygthread::create): Fix incorrect use of name rather
- than __name.
- * cygthread.h (cygthread::cygthread): Create versions which eliminate
- 'n' parameter.
- * dcrt0.cc (dll_crt0_1): Remove check for threadfunc_ix. Remove
- obsolete comments. Set process_state to active here.
- * fhandler_netdrive.cc (create_thread_and_wait): Use shortened
- cygthread constructor.
- * timer.cc (timer_tracker::settime): Ditto.
- * window.cc (HWND): Ditto.
- * fhandler_tty.cc: Use shortened cygthread constructor, where
- appropriate, throughout.
- * select.cc: Ditto.
- * fork.cc (frok::child): Remove wait_for_sigthread.
- (fork): Reformat if for slightly better clarity.
- * init.cc (dll_finished_loading): New variable.
- (dll_entry): Use dll_finished_loading to determine when we should call
- merge_threadfunc.
- * sigproc.cc (no_signals_available): Simplify by using my_readsig.
- (wait_sig_inited): Delete.
- (wait_sig): Define as void function.
- (pending_signals): Accommodate change to wait_sig definition.
- (wait_for_sigthread): Delete definition.
- (sigproc_init): Initialize signal pipe here, before wait_sig thread is
- created. Use void form of cygthread creation.
- (init_sig_pipe): Delete.
- (wait_sig): Return void rather than DWORD. Assume previous
- initialization of signal pipe. Set my_sendsig to NULL when exiting.
- * sigproc.h (wait_for_sigthread): Delete declaration.
-
-2010-09-01 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_netdrive.cc (fhandler_netdrive::readdir): Set d_type.
- (fhandler_netdrive::seekdir): Fix test for readdir return value.
- * fhandler_registry.cc (fhandler_registry::seekdir): Ditto.
-
-2010-09-01 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/version.h: Bump DLL minor version number to 8.
-
-2010-08-31 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (normalize_posix_path): Preserve //./ and //?/ prefixes.
- (path_conv::check): Allow access to root directory of native NT disk
- devices.
-
-2010-08-31 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/version.h: Bump DLL minor version number to 7.
-
-2010-08-30 Christopher Faylor <me+cygwin@cgf.cx>
-
- * dcrt0.cc (dll_crt0_0): Move sigproc_init later, after cygheap
- initialization since it relies on the cygheap existing (even if
- it shouldn't matter due to dll initialization serialization).
-
-2010-08-30 Corinna Vinschen <corinna@vinschen.de>
-
- * posix.sgml (std-notes): Fix typos and incorrectnesses.
-
-2010-08-30 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (MsgWaitForMultipleObjectsEx): Define.
- (MsgWaitForMultipleObjects): Remove.
- * select.cc (select_stuff::wait): Use MsgWaitForMultipleObjectsEx with
- QS_ALLPOSTMESSAGE and, if possible, MWMO_INPUTAVAILABLE flags. Explain
- why. Fix a potential crash due to a NULL pointer in WAIT_FAILED case.
- (peek_windows): Use filter pattern on NT4. Explain why.
- * wincap.h (wincaps::has_mwmo_inputavailable): New element.
- * wincap.cc: Implement above element throughout.
-
-2010-08-29 Christopher Faylor <me+cygwin@cgf.cx>
-
- * winlean.h: New file.
- * automode.c: Use "winlean.h".
- * binmode.c: Ditto.
- * gmon.c: Ditto.
- * textmode.c: Ditto.
- * textreadmode.c: Ditto.
- * winsup.h: Ditto.
- * lib/cygwin_attach_dll.c: Ditto.
- * lib/dll_main.cc: Ditto.
- * profile.c: Ditto.
- * crt0.c: Ditto. Cleanup ancient cruft. Add dummy calls to
- cygwin_premain*.
- * include/sys/cygwin.h: Remove old stuff. Move premain declarations
- nearer to other cygwin-specific function declarations.
- * globals.cc: Add comment.
-
-2010-08-28 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (LoadDLLprime): Change dllname storage to string16.
- (struct dll_info): Convert name to WCHAR.
- (std_dll_init): Load DLLs with full path to windows system directory.
- Add hint to Microsoft security advisory.
- * dcrt0.cc (init_windows_system_directory): New function.
- (dll_crt0_0): Call init_windows_system_directory first.
- * exceptions.cc (windows_system_directory): Move to globals.cc.
- (windows_system_directory_length): Ditto.
- (events_init): Drop code fetching windows_system_directory.
- * globals.cc (windows_system_directory): New global variable.
- (windows_system_directory_length): Ditto.
- * net.cc (load_ipv6_funcs): Use windows_system_directory rather than
- GetSystemDirectoryW.
- * netdb.cc (open_system_file): Ditto. Simplify debug output.
-
-2010-08-27 Corinna Vinschen <corinna@vinschen.de>
-
- * external.cc (sync_wincwd): Remove.
- (cygwin_internal): Drop CW_SYNC_WINCWD case.
- * globals.cc (ro_u_pipedir): New R/O unicode string.
- * ntdll.h (RtlSetCurrentDirectory_U): Declare.
- * path.cc (cwdstuff::set): Improve comments. Drop setting Win32 CWD to
- \\?\PIPE\ on init. Keep Win32 CWD in sync, if possible. Set to
- \\?\PIPE\ otherwise.
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Revert to 230.
- * include/sys/cygwin.h (cygwin_getinfo_types): Remove CW_SYNC_WINCWD.
-
-2010-08-27 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_proc.cc (format_proc_partitions): Improve comment.
-
-2010-08-26 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_proc.cc (format_proc_partitions): Simplify code and enable
- partition layout printing for non-privileged users.
-
-2010-08-25 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (fs_info::update): Fix comments.
-
-2010-08-25 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (rename): Open file with FILE_READ_ATTRIBUTES.
-
-2010-08-24 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/version.h: Fix comment.
-
-2010-08-24 Corinna Vinschen <corinna@vinschen.de>
-
- * external.cc (cygwin_internal): In CW_CVT_MNT_OPTS case, initialize
- flags with *pflags to restore original behaviour.
-
-2010-08-21 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (DLL_IMPORTS): Link against advapi32.a before kernel32.a.
-
-2010-08-20 Christopher Faylor <me+cygwin@cgf.cx>
-
- * cygthread.cc: Update copyright.
-
-2010-08-20 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (path_conv::check): Close handle in conv_handle if we're
- following a symlink.
-
-2010-08-20 Pedro Izecksohn <pedro.izecksohn@gmail.com>
-
- * endian.h (htobe16, htobe32, htobe64, be16toh, be32toh, be64toh,
- htole16, htole32, htole64, le16toh, le32toh, le64toh): Define.
-
-2010-08-20 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (readdir_check_reparse_point): Rename from
- is_volume_mountpoint. Return valid d_type value for underlying
- reparse point type.
- (readdir_get_ino): Don't rely on the handle set in pc.check. Open
- file here if pc.handle() is NULL.
- (fhandler_disk_file::readdir_helper): Try to set a correct d_type value
- more diligent.
- (fhandler_disk_file::readdir): Don't reset dirent_set_d_ino unless
- we're really sure it's due to an untrusted FS. Simplify usage of
- FileAttributes, which is 0 if buf is NULL, anyway. Set d_type
- correctly for faked "." and ".." entries. Improve debug output.
- * path.cc (symlink_info::check): Don't keep handle to volume mount
- point open. Explain why.
-
-2010-08-20 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::fstatvfs): Revert usage
- of get_stat_handle () to get_handle (). Add comment to explain why.
- * syscalls.cc (statvfs): Drop using PC_KEEP_HANDLE.
-
-2010-08-19 Corinna Vinschen <corinna@vinschen.de>
-
- * external.cc (sync_wincwd): New function.
- (cygwin_internal): Rename CW_SETCWD to CW_SYNC_WINCWD. Call
- sync_wincwd from here.
- * include/sys/cygwin.h (cygwin_getinfo_types): Rename CW_SETCWD to
- CW_SYNC_WINCWD.
-
-2010-08-18 Christopher Faylor <me+cygwin@cgf.cx>
-
- * external.cc (CW_SETCWD): New option.
- * include/cygwin/version.h: Bump api minor to 231.
- * include/sys/cygwin.h (CW_SETCWD): Define.
-
-2010-08-18 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (rename): Fix renaming file-based devices.
-
-2010-08-18 Corinna Vinschen <corinna@vinschen.de>
-
- * exceptions.cc (open_stackdumpfile): Don't try to open file if we
- have no filesystem based CWD. Add comment.
- * path.cc (cwdstuff::set): Set CWD handle to NULL if CWD is a virtual
- path. Simplify matching comment.
-
-2010-08-18 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_base::fstat_helper): Set st_rdev
- to correct device number for fs_special devices.
-
-2010-08-16 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/version.h: Bump DLL minor version number to 6.
-
-2010-08-14 Corinna Vinschen <corinna@vinschen.de>
-
- * pipe.cc (fhandler_pipe::open): Duplicate content of opened pipe
- fhandler before calling dup method.
-
-2010-08-13 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.h (class cwdstuff): Make drive_length private.
- Add "error" member.
- (cwdstuff::get_error): New inline method.
- (cwdstuff::get_error_desc): Declare.
- (cwdstuff::set): Change first parameter to pointer to path_conv.
- * path.cc (chdir): Drop doit. Align call to cwdstuff::set to
- new arguments.
- (cwdstuff::init): Only call cwdstuff::set if it's not already
- initialized. Add comment. Drop third parameter in call to
- cwdstuff::set.
- (cwdstuff::set): Partially rewrite. Add lots of comments to explain
- everything. Drop "doit" since it's not used anymore. Always create
- new handle to CWD if not in a virtual path. Drop PEB locking when
- reading PEB values in init phase. Check for accessibility to set
- correct error code. Drop Vista workaround. Never write back into PEB.
- Set Win32 CWD to \\?\PIPE\ on init. Simplify creation of win32 path.
- Set new error member to a meaningful value.
- (cwdstuff::get_error_desc): New method to generate error message
- from cwd error code.
- * spawn.cc (spawn_guts): Call cwdstuff::get_error_desc to create
- more meaningful error message when not being able to start native
- Win32 app due to CWD restrictions. When starting native Win32 app,
- lock cwd and use in calls to CreateProcessW/CreateProcessAsUserW.
-
-2010-08-11 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (struct opt): Add "bind" option.
- (mount_info::from_fstab_line): Handle "bind" option.
- (fillout_mntent): Add "bind" option to mnt_opts.
- (mount): Handle "bind" option.
- * include/sys/mount.h (MOUNT_BIND): New mount flag.
-
-2010-08-10 Christopher Faylor <me+cygwin@cgf.cx>
-
- * sigproc.cc (init_sig_pipe): Add retry loop.
-
-2010-08-09 Christopher Faylor <me+cygwin@cgf.cx>
-
- * cygheap.h (cygheap_fdmanip): Delete fh and use fd index into
- cygheap->fdtab throughout.
- (cygheap_fdnew): Replace fh by using fd index into cygheap->fdtab
- throughout. (cygheap_fdget): Ditto. (cygheap_fdenum): Ditto.
-
-2010-08-09 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- Implement POSIX.1-2004 Monotonic Clock.
- * hires.h: Change hires_us to hires_ns, with nanosecond resolution.
- (hires_ns::primed_ft): Remove.
- (hires_ns::nsecs): New prototype.
- (hires_ns::usecs): Rewrite in terms of nsecs.
- (hires_ns::resolution): New prototype.
- * times.cc: Change hires_us to hires_ns.
- (ntod): Declare.
- (systime): Remove.
- (hires_ns::prime): Increase resolution to nanoseconds.
- (hires_ns::nsecs): Rename usecs to nsecs to reflect increased resolution.
- Remove justdelta argument.
- (hires_ns::resolution): New function.
- (clock_gettime): Accept CLOCK_MONOTONIC.
- Use EINVAL instead of ENOSYS per POSIX.1-2004.
- (clock_getres): Ditto.
- (clock_setres): Use EINVAL instead of ENOSYS to conform with other
- implementations.
- * strace.cc (strace::microseconds): Adjust for hires_ns.
- * sysconf.cc (sca): Set _SC_MONOTONIC_CLOCK to _POSIX_MONOTONIC_CLOCK.
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
-
-2010-08-09 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * fhandler_proc.cc: Add /proc/filesystems virtual file.
- (format_proc_filesystems): New function.
- * mount.cc (fs_names): Move to global scope. Redefine as array
- of { "name", block_device? } structs.
- (fillout_mntent): Use name member of fs_names.
- * mount.h (fs_names): New prototype.
-
-2010-08-09 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * include/dlfcn.h (RTLD_LOCAL): Define.
-
-2010-08-06 Corinna Vinschen <corinna@vinschen.de>
-
- * include/sys/dirent.h (d_fileno): Define as d_ino.
-
-2010-08-04 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (cygwin_conv_path): Rearrange test for "." in POSIX to
- relative DOS path conversion. Simplify fixing the path.
- In CCP_POSIX_TO_WIN_W conversion, always drop long path prefix if path
- fits into MAX_PATH. Explain why.
-
-2010-08-01 Christopher Faylor <me+cygwin@cgf.cx>
-
- * exceptions.cc (_cygtls::interrupt_now): Revert to checking for
- "spinning" when choosing to defer signal.
- (_cygtls::call_signal_handler): Grab func when we have the lock.
- * gendef: Update copyright.
- (__sigbe): Simplify slightly.
- (_sigdelayed): Grab a lock before manipulating stuff.
- (_cygtls::pop): Properly return popped value.
- (stabilize_sig_stack): Set incyg when we have the lock.
- * sigproc.cc: Update copyright.
-
-2010-07-28 Christopher Faylor <me+cygwin@cgf.cx>
-
- * cygthread.h (LPVOID_THREAD_START_ROUTINE): Define.
- (cygthread::create): Rename from cygthread::cygthread.
- (cygthread::cygthread): Define new constructor which accepts
- LPVOID_THREAD_START_ROUTINE as the first argument. Call
- cygthread::create.
- * cygthread.cc (cygthread::create): Rename from cygthread::cygthread.
- Use 'arglen' rather than 'n' since 'n' is no longer supplied.
- * fhandler_tty.cc (process_input): Define as void/noreturn.
- (process_output): Ditto.
- (process_ioctl): Ditto.
- (fhandler_tty_master::init): Don't "zap_h" cygthreads which are
- noreturn. It's now implied.
-
-2010-07-23 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::raw_write): Remove STATUS_DISK_FULL
- special handling.
-
-2010-07-19 Eric Blake <eblake@redhat.com>
-
- * mktemp.cc (_gettemp): Add flags argument. All callers updated.
- (mkostemp, mkostemps): New functions.
- * cygwin.din (mkostemp, mkostemps): Export.
- * posix.sgml: Document them.
- * include/cygwin/version.h: Bump version.
-
-2010-07-18 Christopher Faylor <me+cygwin@cgf.cx>
-
- * autoload.cc (noload): Use "pushl" rather than "push".
-
-2010-07-18 Christopher Faylor <me+cygwin@cgf.cx>
-
- * exceptions.cc (_cygtls::interrupt_now): Avoid nonsensical tests which
- delay an interrupt.
- (setup_handler): Remove unneeded DEBUGGING handling. Ensure that stack
- is locked when we are about to do push/pop to it. Fix debugging output.
-
-2010-07-18 Christopher Faylor <me+cygwin@cgf.cx>
-
- * gendef: Throughout, remove lock from xchgl since it is implied.
- (__ZN7_cygtls3popEv): Avoid potential (but probably nonexistent) race
- when clearing element after pop.
-
-2010-07-15 Corinna Vinschen <corinna@vinschen.de>
-
- * wincap.cc (wincap_7): Set needs_count_in_si_lpres2 to false.
-
-2010-07-07 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (unlink_nt): Disable try_to_bin for netapp drives.
- Explain why.
-
-2010-07-05 Corinna Vinschen <corinna@vinschen.de>
-
- Align seekdir and telldir API to POSIX definition.
- * Makefile.in (NEW_FUNCTIONS): Remove seekdir and telldir mappings.
- * dir.cc (telldir): Move functionality from telldir64 here. Use
- long, rather than _off_t.
- (telldir64): Just call telldir. Only keep for backward compatibility.
- (seekdir): Move functionality from seekdir64 here. Use long, rather
- than _off_t.
- (seekdir64): Just call seekdir. Only keep for backward compatibility.
- * fhandler.h: Throughout, change prototypes of seekdir and telldir
- methods to use long, rather than _off64_t.
- * fhandler_disk_file.cc: Change aforementioned methods accordingly.
- * fhandler_netdrive.cc: Ditto.
- * fhandler_registry.cc: Ditto.
- * fhandler_virtual.cc: Ditto.
- * include/sys/dirent.h (struct __DIR): Change __d_position from
- _off_t to long to reflect API change.
- (telldir): Change prototype to use long, rather than off_t.
- (seekdir): Ditto.
-
-2010-07-04 Christopher Faylor <me+cygwin@cgf.cx>
-
- * path.cc (path_conv::check): Move fs-specific settings to a point
- where we know that we have filled out the filesystem information.
- * path.h (path_conv::path_conv): Use consistent initialization for
- constructors.
-
- * include/sys/cygwin.h: Define CW_STRERROR.
- * include/cygwin/version.h: Bump CYGWIN_VERSION_API_MINOR to 228.
- * include/external.h: Implement CW_STRERROR.
-
-2010-07-02 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (cygwin_getsockopt): Make sure SO_PEERCRED is only handled
- in level SOL_SOCKET. Workaround a return value regression in Vista
- and later. Add comment to explain.
-
-2010-06-29 Corinna Vinschen <corinna@vinschen.de>
-
- * spawn.cc (spawn_guts): Reinstantiate a FIXME comment.
-
-2010-06-29 Corinna Vinschen <corinna@vinschen.de>
-
- * exceptions.cc (dump_exception): Use %W instead of %s for printing
- progname.
- * fork.cc (frok::parent): Fix typos in debug output.
- * spawn.cc (spawn_guts): Copy wide Win32 filename into _pinfo::progname,
- rather than native NT name. Use %W instead of %S for printing progname.
-
-2010-06-28 Christopher Faylor <me+cygwin@cgf.cx>
-
- * fork.cc (frok::parent): Improve error message.
-
-2010-06-22 Corinna Vinschen <corinna@vinschen.de>
-
- * flock.cc (allow_others_to_sync): Use small stack buffer rather
- than big temp buffer. Fix typo in comment.
- (lf_setlock): Revert to using tmp_pathbuf.
- (lf_getlock): Ditto.
-
-2010-06-22 Corinna Vinschen <corinna@vinschen.de>
-
- * sec_acl.cc (setacl): Use the long time unused ACL_DEFAULT_SIZE
- instead of a constant value.
- * security.cc (alloc_sd): Ditto.
-
-2010-06-21 Christopher Faylor <me+cygwin@cgf.cx>
-
- * tmpbuf.h: New file.
- * flock.cc: Include tmpbuf.h for new tmpbuf functionality.
- (allow_others_to_sync): Use tmpbuf rather than tmp_pathbuf. Explain
- why.
- (lf_setlock): For consistency, use tmpbuf rather than tmp_pathbuf.
- (lf_getlock): Ditto.
-
-2010-06-21 Christopher Faylor <me+cygwin@cgf.cx>
-
- * dcrt0.cc (__api_fatal): Temporarily generate a stackdump.
-
-2010-06-21 Christopher Faylor <me+cygwin@cgf.cx>
-
- * tls_pbuf.cc (tmp_pathbuf::w_get): Report what's failing when too many
- buffers are in use.
-
-2010-06-17 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_base::fstat_by_handle): Fetch stat
- handle only after checking for NFS.
-
-2010-06-15 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_base::fstat_by_nfs_ea): Use handle
- returned by get_stat_handle.
- (fhandler_base::fstat_helper): Reinstatiate code to re-open the file
- when checking for executability if called via fstat. Explain why.
-
-2010-06-15 Corinna Vinschen <corinna@vinschen.de>
-
- * dtable.cc (dtable::dup_worker): Reset path_conv handle in duplicated
- fhandler.
- * fhandler.cc (fhandler_base::fstatvfs): Keep handle in created
- path_conv.
- * fhandler.h (fhandler_base::get_stat_access): New method.
- (fhandler_base::get_stat_handle): New method.
- * fhandler_disk_file.cc (fhandler_base::fstat_by_handle): Use handle
- returned by get_stat_handle. Only request inode from system if it
- isn't already set in the fhandler, and only for filesystems supporting
- them.
- (fhandler_base::fstat_fs): Use handle returned by get_stat_handle.
- Change the way open_fs is called. Explain why.
- (fhandler_base::fstat_helper): Use handle returned by get_stat_handle.
- Never use 0 inode number. Simplify executable recognition by re-using
- get_stat_handle if file could be opened with sufficient rights.
- (fhandler_disk_file::fstatvfs): Use handle returned by get_stat_handle.
- (fhandler_disk_file::facl): Use handle returned by get_stat_handle in
- GETACL and GETACLCNT cases.
- (fhandler_disk_file::link): Use handle returned by get_stat_handle
- instead of opening file here again. Add comment.
- (readdir_get_ino): Keep handle in created path_conv and drop
- opening file.
- * ntdll.h (wait_pending): New helper function.
- * path.cc (symlink_info::check): Drop unused 'opt' parameter from
- declaration. Add path_conv_handle argument.
- (path_conv::check): Make sure conv_handle is closed. Keep
- PC_KEEP_HANDLE flag in pflags_or. Accommodate call to sym.check to
- new args.
- (path_conv::~path_conv): Close conv_handle.
- (symlink_info::check_shortcut): Don't re-open file here, just use
- incoming handle. Drop goto's and label out.
- (symlink_info::check_sysfile): Don't re-open file here, just use
- incoming handle. Keep track of file position to accommodate the fact
- that file has been opened asynchronously in calling function.
- (symlink_info::check_nfs_symlink): Don't re-open file here, just use
- incoming handle.
- (symlink_info::check): Drop unused 'opt' parameter. Add
- path_conv_handle argument. Always try to open file with GENERIC_READ
- rights first to allow reading file content w/o having to re-open the
- file. Drop back to READ_CONTROL | FILE_READ_ATTRIBUTES otherwise.
- Call symlink test functions (except for check_reparse_point) only if
- file could be opened with GENERIC_READ. Keep file handle open if
- PC_KEEP_HANDLE is set in pflags.
- * path.h (enum pathconv_arg): Add PC_KEEP_HANDLE flag.
- (class path_conv_handle): New class.
- (class path_conv): Add conv_handle member.
- (path_conv::operator =): Duplicate conv_handle.
- (path_conv::handle): New method.
- (path_conv::access): New method.
- (path_conv::reset_conv_handle): New method.
- (path_conv::close_conv_handle): New method.
-
-2010-06-15 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::fstatvfs): Fix indentation.
-
-2010-06-15 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (path_conv::get_ino_by_handle): Convert from
- static function to path_conv method. Accommodate throughout.
- (path_conv::ndisk_links): Unused, comment out.
- * path.h (path_conv::get_ino_by_handle): Declare.
- (path_conv::ndisk_links): Comment out declaration.
-
-2010-06-14 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (path_conv::check): Return with ENOTDIR if component is a
- device.
-
-2010-06-14 Corinna Vinschen <corinna@vinschen.de>
-
- * dlfcn.cc (get_full_path_of_dll): Revert patch from 2010-04-29.
-
-2010-06-12 Christopher Faylor <me+cygwin@cgf.cx>
-
- * times.cc (gtod): Move to sharable region.
-
-2010-06-09 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (symlink_info::check_shortcut): Use ro_u_empty rather than
- local UNICODE_STRING object.
- (symlink_info::check_sysfile): Ditto. Return immediately if NtOpenFile
- failed to avoid closing random handle. Improve debug output in case
- NtReadFile failed.
-
-2010-06-08 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (symlink_info::check): Set h to NULL after closing handle
- in udf check. Remove overagressive bracketing. Don't set h to NULL
- without closing the handle. Fix using wrong handle in checking
- file system when using parent directory handle.
-
-2010-06-07 Corinna Vinschen <corinna@vinschen.de>
-
- * include/sys/stdio.h: Remove _GNU_SOURCE guard around getline
- and getdelim prototypes since they are SUSv4 now.
-
-2010-06-02 Corinna Vinschen <corinna@vinschen.de>
-
- * ntdll.h (STATUS_BAD_NETWORK_PATH): Define.
- (STATUS_BAD_NETWORK_NAME): Define.
- * path.cc (symlink_info::check): Convert STATUS_BAD_NETWORK_PATH and
- STATUS_BAD_NETWORK_NAME into an immediate ENOENT.
-
-2010-06-01 Corinna Vinschen <corinna@vinschen.de>
-
- * exceptions.cc (open_stackdumpfile): Correctly append .stackdump
- suffix.
-
- * nlsfuncs.cc (rebase_locale_buf): Reorder arguments. Accommodate
- throughout. Add pointer to end of buffer and avoid changing pointers
- not pointing into the buffer.
-
-2010-06-01 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_netdrive.cc (fhandler_netdrive::exists): Always free WNet
- resource if created.
-
-2010-05-31 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.cc (cygheap_user::set_name): Allow to change the user name
- if it only differs by case.
-
-2010-05-26 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_registry.cc (multi_wcstombs): New function.
- (fhandler_registry::fstat): Call multi_wcstombs for strings of type
- REG_MULTI_SZ.
- (fhandler_registry::fill_filebuf): Ditto.
-
-2010-05-26 Christopher Faylor <me+cygwin@cgf.cx>
-
- * hires.h (hires_base::reset): New function.
- (hires_us): Specify that hires_base is a public import.
- (hires_ms): Ditto.
- * times.cc (gtod): Move earlier in file.
- (settimeofday): Reset gtod so that base will be subsequently
- recalculated.
-
-2010-05-26 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (symlink_info::check): Don't try to handle remote reparse
- points as symlinks. Explain why.
-
-2010-05-26 Corinna Vinschen <corinna@vinschen.de>
-
- * include/inttypes.h: Change PTR definitions to int to align with the
- stdint.h type definitions of intptr_t/uintptr_t.
-
-2010-05-26 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (class fhandler_pty_master): Add master_thread member.
- * fhandler_tty.cc (fhandler_pty_master::close): Properly detach from
- master thread.
- (fhandler_pty_master::setup): Store cygthread pointer of pty master
- control thread in master_thread. Don't zap thread handle.
-
-2010-05-26 Kazuhiro Fujieda <fujieda@acm.org>
- Corinna Vinschen <corinna@vinschen.de>
-
- * nlsfuncs.cc (__set_lc_time_from_win): Use LOCALE_SMONTHNAME1
- instead of LOCALE_SABBREVMONTHNAME1 in Japanese and Korean
- locales to get abbreviated month names. Explain why.
-
-2010-05-18 Kazuhiro Fujieda <fujieda@acm.org>
-
- * environ.cc (regopt): Change the first argument to wide char string.
- (environ_init): Accommodate change to the first argument of regopt.
- * exception.cc (open_stackdumpfile): Accommodate change to the type of
- progname in _pinfo.
- * external.cc (fillout_pinfo): Ditto.
- * fhandler_process.cc (format_process_winexename): Ditto.
- (format_process_stat): Ditto.
- * fork.cc (fork::parent): Ditto.
- * pinfo.cc (pinfo_basic::pinfo_basic): Call GetModuleFileNameW instead
- of GetModuleFileName.
- (pinfo::thisproc): Accommodate change to the type of progname in
- _pinfo.
- (pinfo_init): Ditto.
- * pinfo.h (_pinfo): Change the type of progname to a wide char array.
- * registry.h (reg_key::get_int): Change the first argument from
- constant point to pointer to constant.
- (reg_key::get_string): Ditto. Change the last argument likewise.
- * registry.cc (reg_key::get_int): Accommodate change to the
- declaration.
- (reg_key::get_string): Ditto.
- * strace.cc (strace::hello): Accommodate change to the type of progname
- in _pinfo.
- (strace::vsprntf): Ditto.
-
-2010-05-07 Christopher Faylor <me+cygwin@cgf.cx>
-
- * Makefile.in (DLL_OFILES): Add pseudo-reloc.o.
- * dcrt0.cc (child_info_fork::handle_fork): Call
- _pei386_runtime_relocator here.
- (dll_crt0_1): Ditto for non-fork case.
- * dll_init.cc (dll::init): Complain more in comment. Clean up
- slightly.
- (dll_dllcrt0_1): Call _pei386_runtime_relocator when we know we have
- a filled-in per_process structure.
- * globals.cc (__cygwin_user_data): Accommodate new fields for
- _pei386_runtime_relocator.
- * pseudo-reloc.cc: New file adapted from old lib/pseudo-reloc.c.
- Include winsup.h directly. Collapse #ifdef __CYGWIN__ into one block.
- Perform minor whitespace code reformatting.
- (__report_error): Use small_printf to output error.
- (_pei386_runtime_relocator): Conditionalize for cygwin to take
- per_process pointer parameter.
- * winsup.h (_pei386_runtime_relocator): Declare.
- * include/cygwin/version.h
- (CYGWIN_VERSION_PER_PROCESS_API_VERSION_COMBINED): New macro.
- (CYGWIN_VERSION_USER_API_VERSION_COMBINED): Use above macro.
- (CYGWIN_VERSION_USE_PSEUDO_RELOC_IN_DLL): New macro.
- (CYGWIN_VERSION_API_MINOR): Bump to 227.
- * include/sys/cygwin.h: Remove obsolete comment.
- (per_process::unused2): Shorten.
- (per_process::pseudo_reloc_start): New field.
- (per_process::pseudo_reloc_end): Ditto.
- (per_process::image_base): Ditto.
- * lib/_cygwin_crt0_common.cc: Declare pseudo runtime externs needed for
- per_process structure.
- (_cygwin_crt0_common): Fill in pseudo_reloc runtime constants.
- * lib/pseudo-reloc-dummy.c: New file. Dummy function to satisify ld.
- * lib/pseudo-reloc.c: Delete.
-
-2010-05-07 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_tty.cc (fhandler_tty_slave::init): Disable grabbing
- process group ownership of tty in case we're being debugged.
-
-2010-05-06 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (path_conv::check): Drop setting sym.pflags before calling
- mount_info::conv_to_win32_path since the flag value is overwritten by
- mount_info::conv_to_win32_path anyway.
- Set flags for DOS paths before calling symlink_info::check so they can
- be used in that function already.
-
-2010-05-03 Christopher Faylor <me+cygwin@cgf.cx>
-
- * dll_init.cc (dll_list::alloc): Add debugging assertion.
-
-2010-04-29 Corinna Vinschen <corinna@vinschen.de>
-
- * dlfcn.cc (get_full_path_of_dll): Handle non-existent file.
-
-2010-04-29 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (struct opt): Add "dos" and "ihash" options.
- (fillout_mntent): Ditto.
- * path.cc (path_conv::get_nt_native_path): Use path_conv's
- has_dos_filenames_only method.
- (path_conv::check): Add PATH_IHASH flag if FS has unreliable inode
- numbers.
- (symlink_info::check_shortcut): Or symlink flags to pflags.
- (symlink_info::check_sysfile): Ditto. Change test accordingly.
- (symlink_info::check_reparse_point): Ditto.
- (symlink_info::check_nfs_symlink): Ditto.
- (symlink_info::check): Check PATH_DOS flag in call to get_nt_native_path
- to utilize mount flag. Ditto in test for potential restarting. Set
- PATH_DOS if FS only allows DOS filename rules.
- * path.h (enum path_types): Add PATH_DOS and PATH_IHASH.
- (path_conv::hasgood_inode): Check PATH_IHASH instead of
- fs.hasgood_inode.
- (path_conv::has_dos_filenames_only): New method.
- * include/sys/mount.h (MOUNT_DOS): New mount flag.
- (MOUNT_IHASH): Ditto.
-
-2010-04-29 Corinna Vinschen <corinna@vinschen.de>
-
- * external.cc (cygwin_internal): Add CW_CVT_MNT_OPTS to allow mount
- flag parsing. Add CW_LST_MNT_OPTS case to allow mount flag listing.
- * mount.cc (fstab_read_flags): Rename from read_flags. Make externally
- available. Change input string to char ** to allow returning faulty
- option. Add flag for avoiding debug output.
- (fstab_list_flags): New function to create list of options.
- * include/sys/cygwin.h (cygwin_getinfo_types): Add CW_CVT_MNT_OPTS and
- CW_LST_MNT_OPTS.
-
-2010-04-28 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (compare_flags): New function.
- (read_flags): Replace loop with bsearch. Simplify error check.
-
-2010-04-28 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/version.h: Bump API minor version.
-
-2010-04-28 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din (__locale_mb_cur_max): Export.
- * nlsfuncs.cc (__getlocaleinfo): Drop conversion to multibyte.
- (__charfromwchar): New function to convert to multibyte.
- (__eval_datetimefmt): Convert to return wchar_t pointer. Work on
- wide char string.
- (__set_lc_time_from_win): Take additional pointer to "C" category info
- to accommodate C.foo locales. Rework to fill wide char members in
- category info.
- (__set_lc_ctype_from_win): New function.
- (__set_lc_numeric_from_win): Take additional pointer to "C" category
- info to accommodate C.foo locales. Rework to fill wide char members
- in category info.
- (__set_lc_monetary_from_win): Ditto.
- (__set_lc_messages_from_win): Ditto.
- (__get_current_collate_codeset): New function, called from nl_langinfo.
- * include/cygwin/config.h (__HAVE_LOCALE_INFO_EXTENDED__): Define.
-
-2010-04-27 Christopher Faylor <me+cygwin@cgf.cx>
-
- * spawn.cc (find_exec): Use the first detected errno when lookup fails.
-
-2010-04-27 Corinna Vinschen <corinna@vinschen.de>
-
- * include/regex.h: Include _ansi.h to avoid missing out on preprocessor
- macros in sys/_types.h.
-
-2010-04-26 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.h (fs_info::inited): New inline method.
- * path.cc (path_conv::check): Clear filesystem info if following a
- symlink. Use new fs_info::inited method to check if FS info is already
- available.
- (symlink_info::check): Drop fs_update_called. Use fs_info::inited
- method instead. Streamline test for leading space and trailing dot or
- space. Add comments.
-
-2010-04-23 Corinna Vinschen <corinna@vinschen.de>
-
- * path.h (get_nt_native_path): Add third parameter to declaration and
- declare with regparms.
- * path.cc (get_nt_native_path): Add third parameter to allow conversion
- of leading and trailing dots and spaces on filesystems only supporting
- filenames following DOS rules.
- (path_conv::get_nt_native_path): Call get_nt_native_path according to
- fs.has_dos_filenames_only flag.
- (getfileattr): Accommodate new parameter to get_nt_native_path.
- (symlink_info::check): Revamp fs_update_called handling to call
- fs.update only once per call. Call get_nt_native_path according to
- fs.has_dos_filenames_only flag. Streamline filesystem dependent code
- not to be called more than once unnecessarily. Drop code tweaking
- incoming path for broken filesystems only allowing DOS pathnames.
- Rely on changed get_nt_native_path instead.
- * mount.cc (fillout_mntent): Accommodate new parameter to
- get_nt_native_path.
- * strfuncs.cc (tfx_rev_chars): New conversion table with comment.
- (sys_cp_wcstombs): Use tfx_rev_chars rather than tfx_chars.
-
-2010-04-22 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (symlink_info::check): Make sure to restart only once.
-
-2010-04-22 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (GETVOLINFO_VALID_MASK): Drop FILE_SEQUENTIAL_WRITE_ONCE
- from mask. Expand the comment a bit.
- (WIN_FAT_FLAGS): New define.
- (FS_IS_WINDOWS_FAT): New macro.
- (fs_info::update): Handle remote FS faking to be FAT. Subsume under
- CIFS. Check for NWFS and has_buggy_basic_info only for remote
- filesystems. Add check for has_dos_filenames_only.
- * mount.h (class fs_info): Add has_dos_filenames_only status flag.
- Implement accessors.
- * path.cc (symlink_info::check): Rearrange variable definitions to
- clear them up. Add a restart label to allow a clean restart within
- the method. Add a check for broken filesystems only allowing DOS
- pathnames in case we encounter a STATUS_OBJECT_NAME_NOT_FOUND status.
- If all checks point to one of that, restart method with tweaked
- incoming path. Add lengthy comments to explain what we do.
-
-2010-04-22 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (symlink_info::check): Fix a comment.
-
-2010-04-21 Corinna Vinschen <corinna@vinschen.de>
- Christopher Faylor <me+cygwin@cgf.cx>
-
- * fhandler_termios.cc (tcinit): Remove previously applied change.
- Replace with...
- * fhandler_tty.cc (fhandler_tty_slave::init): Become process group
- leader if called from dtable::init_std_file_from_handle. Add comment
- to explain.
-
-2010-04-21 Corinna Vinschen <corinna@vinschen.de>
-
- * dtable.cc (dtable::init_std_file_from_handle): Set access mask for
- the slave side of ttys explicitely. Explain why.
-
-2010-04-20 Christopher Faylor <me+cygwin@cgf.cx>
-
- * path.cc (cygwin_create_path): Free memory on error.
-
-2010-04-20 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.h (struct init_cygheap): Add rlim_core member.
- * cygheap.cc (cygheap_init): Initialize rlim_core to RLIM_INFINITY.
- * exceptions.cc (stackdump): Drop extern declaration of rlim_core.
- Refer to cygheap->rlim_core instead.
- (exception::handle): Disable stackdumping if cygheap->rlim_core is 0.
- Don't set WCOREDUMP flag in exit code, if cygheap->rlim_core is 0.
- (sigpacket::process): Ditto.
- * resource.cc (rlim_core): Remove.
- (getrlimit): Fetch RLIMIT_CORE value from cygheap->rlim_core.
- (setrlimit): Store RLIMIT_CORE value in cygheap->rlim_core.
-
-2010-04-19 Christopher Faylor <me+cygwin@cgf.cx>
-
- * cygerrno.h: Nevermind.
-
-2010-04-19 Christopher Faylor <me+cygwin@cgf.cx>
-
- * cygerrno.h: Protect use of NTSTATUS for only when we need it.
-
-2010-04-19 Christopher Faylor <me+cygwin@cgf.cx>
-
- * lib/_cygwin_crt0_common.cc: Remove unneeded declarations.
-
-2010-04-19 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_tty.cc (fhandler_tty_slave::fch_set_sd): Remove commented out
- code.
-
-2010-04-19 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (GetNamedPipeClientProcessId): Define.
- * fhandler.h (fhandler_tty_slave::fch_open_handles): Declare private.
- (fhandler_tty_slave::fch_close_handles): Ditto.
- (fhandler_tty_slave::cygserver_attach_tty): Drop declaration.
- (fhandler_tty_slave::fstat): Declare public.
- (fhandler_tty_slave::fchmod): Declare public.
- (fhandler_tty_slave::fchown): Declare public.
- (class fhandler_pty_master): Add master_ctl handle.
- (fhandler_pty_master::pty_master_thread): Declare public.
- * fhandler_termios.cc (fhandler_termios::tcinit): If the process
- is started from a non-Cygwin process, make it tty process group
- leader.
- * fhandler_tty.cc: Throughout accommodate additional security related
- arguments in calls to functions creating or opening objects.
- (close_maybe): Move to start of file to reuse it
- in other methods.
- (struct pipe_request): Define.
- (struct pipe_reply): Define.
- (fhandler_tty_slave::open): Throughout, try to open synchronization
- objects with MAXIMUM_ALLOWED permissions. Drop call to cygserver.
- Try to duplicate pipe handles via master_ctl pipe if duplicating
- directly doesn't work.
- (fhandler_tty_slave::cygserver_attach_tty): Remove.
- (fhandler_tty_slave::init): Close unused incoming pipe handle.
- (fhandler_pty_master::close): Send exit message to master control
- thread and close master_ctl handle.
- (fhandler_pty_master::pty_master_thread): New method, implementing the
- master control thread.
- (pty_master_thread): Static helper to start master control thread.
- (fhandler_pty_master::setup): Simplify creating pipe inheritance.
- Make sure we're the one creating the input_available_event. Add
- comment to explain why. Create master_ctl pipe and start master
- control thread. Close master_ctl handle in case of error.
- * security.cc (alloc_sd): Add code to handle tty objects. Add comments
- to explain what exactly is required.
- (get_object_sd): New function.
- (get_object_attribute): New function.
- (create_object_sd_from_attribute): New function.
- (set_object_sd): New function.
- (set_object_attribute): New function.
- (set_file_attribute): Change attribute type to mode_t.
- * security.h (set_file_attribute): Change attribute type to mode_t.
- (get_object_sd): Declare.
- (get_object_attribute): Declare.
- (create_object_sd_from_attribute): Declare.
- (set_object_sd): Declare.
- (set_object_attribute): Declare.
- * tty.cc (tty::slave_alive): Implement directly instead of via alive.
- (tty::exists): Open mutex handle with READ_CONTROL access.
- (tty::alive): Remove.
- (tty::open_output_mutex): Convert to inline method.
- (tty::open_input_mutex): Ditto.
- (tty::open_mutex): Take additional ACCESS_MASK parameter for the
- mutex open access mask.
- (tty::open_inuse): New method.
- (tty::create_inuse): Take PSECURITY_ATTRIBUTES parameter. Drop fmt
- name parameter. Always create TTY_SLAVE_ALIVE event.
- (tty::get_event): Take additional PSECURITY_ATTRIBUTES parameter for
- CreateEvent.
- * tty.h (class tty): Change declarations according to aforementioned
- changes.
- (tty::open_output_mutex): Implement as inline method.
- (tty::open_input_mutex): Ditto.
-
-2010-04-19 Corinna Vinschen <corinna@vinschen.de>
-
- * dtable.cc (dtable::init_std_file_from_handle): Set dev to
- valid content for ptys. Remove setting FILE_CREATE_PIPE_INSTANCE
- in access flags since it's not needed. Set the access mask for
- kernel objects according to what's returned by NtQueryInformationFile,
- info class FileAccessInformation.
-
-2010-04-19 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (rename): On STATUS_ACCESS_VIOLATION, retry to open
- for DELETE until the STATUS_ACCESS_VIOLATION goes away. Add comment
- to explain why.
-
-2010-04-17 Corinna Vinschen <corinna@vinschen.de>
-
- * sec_helper.cc (get_null_sd): Make static. Use PSECURITY_DESCRIPTOR
- instead of SECURITY_DESCRIPTOR *.
- (sec_acl): Fix fomratting.
- * security.h (get_null_sd): Drop declaration.
-
-2010-04-16 Corinna Vinschen <corinna@vinschen.de>
-
- * cygerrno.h (seterrno_from_nt_status): Declare.
- (__seterrno_from_nt_status): Call seterrno_from_nt_status.
- * errno.cc (seterrno_from_win_error): Set errno without calling
- set_errno to avoid packing strace output with errno messages.
- (seterrno_from_nt_status): New function to print NT status as well as
- resulting Windows error.
-
-2010-04-15 Corinna Vinschen <corinna@vinschen.de>
-
- * kernel32.cc (CreateEventW): Create event object with EVENT_ALL_ACCESS
- access mask.
- (CreateMutexW): Create mutex object with MUTEX_ALL_ACCESS access mask.
- (CreateSemaphoreW): Create semaphore object with SEMAPHORE_ALL_ACCESS
- access mask.
-
-2010-04-15 Corinna Vinschen <corinna@vinschen.de>
-
- * sec_helper.cc (set_cygwin_privileges): Enable SE_DEBUG_PRIVILEGE, if
- available. Add comments.
-
-2010-04-13 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (get_inet_addr): Only test the file for being a
- socket after opening it. Retry if opening failed with sharing
- violation. Explain why we do this.
- (fhandler_socket::bind): Create file with no sharing allowed.
-
-2010-04-13 John Bowman <bowman@math.ualberta.ca>
-
- * cygheap.cc (cwcsdup): Fix allocation size to accommodate sizeof WCHAR.
- (cwcsdup1): Ditto.
-
-2010-04-12 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/version.h: Bump DLL minor version number to 5.
-
-2010-04-12 Corinna Vinschen <corinna@vinschen.de>
-
- * posix.sgml (std-notes): Improve lseek description.
-
-2010-04-12 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_tty.cc (fhandler_tty_slave::open): Add code to duplicate
- handles within a single process to simplify openpty case.
- (fhandler_tty_slave::cygserver_attach_tty): Correctly send Windows PID
- to cygserver, rather than the Cygwin PID.
-
-2010-04-11 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (class dev_console): Add backspace_keycode member.
- * fhandler_console.cc (fhandler_console::get_tty_stuff): Initialize
- backspace_keycode with CERASE.
- (fhandler_console::read): Return dev_state->backspace_keycode if the
- backspace key is pressed.
- (fhandler_console::char_command): Implement DECBKM escape sequence.
-
-2010-04-10 Christopher Faylor <me+cygwin@cgf.cx>
-
- * fhandler_console.cc (fhandler_console::read): Default to sending
- CERASE character if termios VERASE field is zero.
- (fhandler_console::fixup_after_fork_exec): Avoid a spurious debug
- message.
-
-2010-04-10 Christopher Faylor <me+cygwin@cgf.cx>
-
- * mkvers.sh: Use modern date formats to construct the date.
-
-2010-04-09 Corinna Vinschen <corinna@vinschen.de>
-
- * nlsfuncs.cc (__set_lc_time_from_win): Actually set
- _time_locale->md_order to the D_MD_ORDER value written to the buffer.
-
-2010-04-09 Christopher Faylor <me+cygwin@cgf.cx>
-
- * path.cc (path_conv::set_normalized_path): Use crealloc_abort to avoid
- a memory leak.
- * path.h (path_conv::operator =): Just use cstrdup to allocate
- normalized_path, avoiding attempt to free a pointer which is allocated
- in another pc.
-
-2010-04-07 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/version.h: Bump DLL minor version number to 4.
-
-2010-04-06 Corinna Vinschen <corinna@vinschen.de>
-
- * thread.cc (valid_sched_parameters): Declare extern here.
- (sched_set_thread_priority): Ditto.
-
-2010-04-06 Corinna Vinschen <corinna@vinschen.de>
-
- * include/sched.h: Remove, overruled by newlib file.
- * include/sys/sched.h: Ditto.
-
-2010-04-06 Christopher Faylor <me+cygwin@cgf.cx>
-
- * fhandler_fifo.cc (fhandler_fifo::open): Accommodate previous return
- value change to setup_overlapped.
-
-2010-04-02 Christopher Faylor <me+cygwin@cgf.cx>
-
- * fhandler.h (fhandler_base::has_ongoing_io): Declare virtual method.
- * select.cc (peek_pipe): Reorganize slightly. Don't attempt to check a
- handle if it has ongoing I/O.
- (select_pipe_info::select_pipe_info): Delete definition.
- (select_pipe_info::~select_pipe_info): Delete definition.
- (thread_pipe): Get rid of WFMO call. Reorganize loop.
- (pipe_cleanup): Remove dependence on destructor.
- (thread_serial): Reorganize loop.
- * select.h (select_pipe_info): Empty this class since it no longer has
- any special requirements (for now).
-
- * syscalls.cc (readv): Remove an unneeded debug printf.
-
-2010-04-02 Christopher Faylor <me+cygwin@cgf.cx>
-
- * fhandler.h (fhandler_base::setup_overlapped): Delete virtual
- declaration.
- (fhandler_base::destroy_overlapped): Ditto.
- (fhandler_base_overlapped): Remove now-unneeded friend.
- (fhandler_base_overlapped::setup_overlapped): Return int, remove
- parameter.
- (fhandler_base_overlapped::get_overlapped): Return reference.
- (fhandler_base_overlapped::fhandler_base_overlapped): Be more assertive
- about zeroing everything.
- (fhandler_base_overlapped::fixup_after_fork): Declare new function.
- (fhandler_base_overlapped::fixup_after_exec): Ditto.
- (fhandler_base_overlapped::dup): Ditto.
- (fhandler_base_overlapped::close): Ditto.
- * fhandler_fifo.cc (fhandler_fifo::dup): Call
- fhandler_base_overlapped::dup rather than fhandler_base::dup.
- * pipe.cc (fhandler_pipe::dup): Ditto.
- (fhandler_pipe::init): Accommodate change in setup_overlapped arguments
- for "opened_properly" case.
-
-2010-04-02 Christopher Faylor <me+cygwin@cgf.cx>
-
- * fhandler_fifo.cc (fhandler_fifo::fhandler_fifo): Properly initialize
- overlapped part of this class.
-
-2010-04-02 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_tty.cc (fhandler_tty_slave::close): Revert previous change.
-
-2010-04-02 Christopher Faylor <me+cygwin@cgf.cx>
-
- * select.h (select_pipe_info::add_watch_handle): Delete declaration.
- * select.cc (select_pipe_info::add_watch_handle): Delete definition.
- (fhandler_pipe::select_read): Delete call to add_watch_handle.
- (fhandler_pipe::select_write): Ditto.
- (fhandler_pipe::select_except): Ditto.
-
-2010-04-02 Christopher Faylor <me+cygwin@cgf.cx>
-
- * dtable.cc (dtable::init_std_file_from_handle): Avoid adding fh to
- fdtab until we know that it is good.
- * fhandler_tty.cc (fhandler_tty_slave::fhandler_tty_slave): Handle
- error conditions more consistently. Avoid handle leakage on error.
-
-2010-04-02 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_tty.cc (fhandler_tty_slave::close): Avoid potential crash
- if former open call has been unsuccessful.
-
-2010-04-01 Corinna Vinschen <corinna@vinschen.de>
-
- * nlsfuncs.cc: Fix indentation.
-
-2010-04-01 Corinna Vinschen <corinna@vinschen.de>
-
- * nlsfuncs.cc (rebase_locale_buf): New helper function to rebase
- function pointers in locale structures. Explain why this is necessary.
- (__set_lc_time_from_win): Use rebase_locale_buf after realloc.
- (__set_lc_numeric_from_win): Ditto.
- (__set_lc_monetary_from_win): Ditto.
-
-2010-03-31 Christopher Faylor <me+cygwin@cgf.cx>
-
- * sigproc.cc (wait_sig): Make sure that strace is activated on
- __SIGSTRACE by calling new strace::activate function.
- * strace.cc (strace::activate): Rename from strace::strace.
- * strace.h (strace::activate): Define new function.
- (strace::strace): Call activate.
-
-2010-03-31 Christopher Faylor <me+cygwin@cgf.cx>
-
- * fhandler.h (fhandler_base_overlapped): Temporarily (?) make
- select_pipe_info a friend until the fhandler_tty intertangling can be
- worked out.
- * select.cc (select_pipe_info::add_watch_handle): Don't inspect the
- overlapped event if we're not waiting for I/O.
- (fhandler_tty_common::select_*): Change to standard function. Don't do
- kludgy fhandler_pipe coercion.
-
-2010-03-31 Christopher Faylor <me+cygwin@cgf.cx>
-
- * fhandler.cc (fhandler_base::dup): Call setup_overlapped
- unconditionally.
- (fhandler_base::fork_fixup): Ditto.
- (fhandler_base::fixup_after_fork): Ditto.
- (fhandler_base::fixup_after_exec): Ditto.
- (fhandler_base_overlapped::setup_overlapped): Move to this class from
- fhandler_base.
- (handler_base_overlapped::destroy_overlapped): Ditto.
- (fhandler_base_overlapped::wait_overlapped): Ditto. Track when we
- expect pending I/O.
- (fhandler_base_overlapped::read_overlapped): Move to this class from
- fhandler_base. Return error if ongoing I/O.
- (fhandler_base_overlapped::write_overlapped): Ditto.
- (fhandler_base_overlapped::has_ongoing_io): Semi-reinstate previous
- function.
- * fhandler.h (fhandler_base::wait_overlapped): Move to
- fhandler_base_overlapped class.
- (fhandler_base::write_overlapped): Ditto.
- (fhandler_base::get_overlapped): Ditto.
- (fhandler_base::get_overlapped_buffer): Ditto.
- (fhandler_base_overlapped): New class.
- (fhandler_pipe): Inherit from fhandler_base_overlapped. Remove
- overlapped stuff as a result.
- (fhandler_fifo): Ditto.
- * pipe.cc (fhandler_pipe::fhandler_pipe): Initialize fhandler_base_overlapped.
- (pipe): Put a descriptive name in the fhandler.
-
-2010-03-30 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::wait_for_events): Remove call to
- sig_dispatch_pending.
-
-2010-03-30 Thomas Wolff <towo@towo.net>
-
- * fhandler.h (class dev_console): Drop vt100_graphics_mode_active. Add
- flags vt100_graphics_mode_G0, vt100_graphics_mode_G1 and iso_2022_G1.
- * fhandler_console.cc: Throughout, tune VT100 graphics mode switching
- to follow ISO 2022 strictly.
- (fhandler_console::write) Reset VT100 graphic mode flags on terminal
- full reset (ESC c).
-
-2010-03-30 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (open): Remove call to sig_dispatch_pending.
-
-2010-03-30 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc: Remove calls to sig_dispatch_pending throughout.
- * libc/rexec.cc: Ditto.
-
-2010-03-30 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (fs_info::update): Allow variable FILE_SUPPORTS_SPARSE_FILES
- flag in netapp flag test. Add comment.
-
-2010-03-29 Corinna Vinschen <corinna@vinschen.de>
-
- * spawn.cc (find_exec): Enable finding paths in backslash notation,
- especially for the exec[vl]p functions.
-
- * path.cc (symlink_info::check): Disable returning directories with
- suffix appended here.
-
-2010-03-29 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/version.h: Bump DLL minor version number to 3.
-
-2010-03-29 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::fstat): Keep st_ctime and st_birthtime
- fixed to 2006-12-01 00:00 UTC.
-
-2010-03-29 Corinna Vinschen <corinna@vinschen.de>
-
- * libc/rcmd.c: Enable IPv6.
-
-2010-03-28 Christopher Faylor <me+cygwin@cgf.cx>
-
- * fhandler.cc (fhandler_base::fstat): Set st_mtime to current time.
-
-2010-03-28 Christopher Faylor <me+cygwin@cgf.cx>
-
- * globals.cc (exit_status): Add new ES_EXIT_STARTING enum.
- * dcrt0.cc (cygwin_exit): Set exit_state to ES_EXIT_STARTING prior to
- calling real exit.
- * dll_init.cc (dll_list::detach): Remove dll from linked list and call
- destructors even if exiting. Don't call __cxa_finalize in exiting case.
-
-2010-03-27 Corinna Vinschen <corinna@vinschen.de>
-
- * nlsfuncs.cc (__set_charset_from_locale): Set default charset for
- locales defaulting to codepage 936 to GB2312.
-
-2010-03-22 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::evaluate_events): Make erase
- const in parameter list.
- (fhandler_socket::wait_for_events): Take a DWORD flags value instead of
- just a bool. Call evaluate_events with erase flag according to
- MSG_PEEK value in flags. Replace check for dontwait with check for
- MSG_DONTWAIT in flags.
- (fhandler_socket::connect): Call wait_for_events with 0 flags value.
- (fhandler_socket::accept4): Ditto.
- (fhandler_socket::recv_internal): Save flags in wait_flags. Drop
- dontwait variable. Call wait_for_events with wait_flags.
- (fhandler_socket::send_internal): Save MSG_DONTWAIT flag in wait_flags
- and call wait_for_events with wait_flags as argument. Drop dontwait
- variable.
- * fhandler.h (class fhandler_socket): Change second parameter in
- declaration of wait_for_events to const DWORD.
-
-2010-03-19 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_cygdrive::fstat): Add standard read
- permissions again.
-
-2010-03-18 Corinna Vinschen <corinna@vinschen.de>
-
- * shared.cc (init_installation_root): Change to make sure that scope of
- the lock lasts the entire function.
-
-2010-03-15 Christopher Faylor <me+cygwin@cgf.cx>
-
- * shared_info.h (user_info): Add dll_crt0_1 as a friend.
- (user_info::version): Make LONG to accommodate spinlock use.
- (user_info::create): New static function renamed from user_info_create.
- (user_info::initialize): New private function renamed from
- user_info_initialize.
- (SHARED_VERSION): Delete.
- (SHARED_VERSION_MAGIC): Ditto.
- (USER_VERSION_MAGIC): Ditto.
- (SHARED_INFO_CB): Ditto.
- (USER_VERSION): Ditto.
- (USER_VERSION_MAGIC): Ditto.
- (CURR_SHARED_MAGIC): Update.
- (CURR_USER_MAGIC): Ditto.
- (shared_info::version): Make LONG to accommodate spinlock use.
- (shared_info::create): New static function mirroring user_info::create.
- (dll_crt0_1): Accommodate change to user_info::initialize.
- * spinlock.h (spinlock::setto): New variable member.
- (spinlock::done): New function.
- (spinlock::spinlock): Generalize to allow arbitrary values and
- timeouts. Call done() when lock is not needed.
- * ntdll.h: Make multiple-inclusion safe.
- (NtQuerySystemTime): Declare.
- * shared.cc (installation_root_inited): Rename from shared_mem_inited.
- (init_installation_root): Make inline. Use a spinlock to ensure that
- this is initialized only once per session.
- (user_info::initialize): Rename from user_shared_initialize. Protect
- with spinlock on sversion and remove other spinlock-like things.
- Remove reference to user_shared since it is now implicit. Refer to
- spinlock version of multiple_cygwin_problem to ensure that any spinlock
- is released.
- (user_info::create): Rename from user_shared_create. Accommodate
- change from user_shared_initialize to user_info::initialize.
- (shared_info::create): New inline function.
- (shared_info::initialize): Protect with spinlock on sversion. Move
- heap_init back under specific control of shared_info spinlock. Remove
- reference to SHARED_INFO_CB and just use sizeof(*this).
- (memory_init): Move all locking into respective functions where it is
- needed. Accommodate name changes. Remove call to heap_init().
- * syscalls.cc (seteuid32): Accommodate name change to
- user_info::create().
-
- * mount.cc (mount_info::create_root_entry): Report on errors from
- add_item since they should be nonexistent.
- (mount_info::init): Don't initialize nmounts. It should already be
- zero. Give more verbose error when root_idx < 0. Implicitly use this
- pointer rather than explicitly referencing mount_table->.
- (mount_info::add_item): Minor whitespace fix.
-
-2010-03-15 Christopher Faylor <me+cygwin@cgf.cx>
-
- * sigproc.cc (no_signals_available): Get sense of the test right for
- previous botched change.
-
-2010-03-15 Christopher Faylor <me+cygwin@cgf.cx>
-
- * sigproc.cc (no_signals_available): Don't try to send a signal if
- still in cygwin startup code.
-
-2010-03-13 Christopher Faylor <me+cygwin@cgf.cx>
-
- * spinlock.h: New file.
- (spinlock): New class.
- * shared.cc: Include spinlock.h.
- (memory_init): Use new spinlock methods rather than roll-your-own.
- Time out after ten seconds if shared_mem_inited is not initialized.
-
- * sync.h: Update copyright. Remove vanity attribution.
-
- * sigproc.cc (sigproc_terminate): Avoid attempts to kill the signal
- thread while we're still initializing or suffer a deadlock.
-
-2010-03-12 Christopher Faylor <me+cygwin@cgf.cx>
-
- Throughout change all calls of low_priority_sleep (0) to yield ().
- * miscfuncs.cc (yield): Rename from low_priority_sleep. Remove all of
- the logic which called Sleep() and just use SwitchToThread.
- * miscfuncs.h (yield): Rename from low_priority_sleep.
- (SLEEP_0_STAY_LOW): Delete unused define.
- * shared.cc (memory_init): Move heap_init() call directly after shared
- memory initialization to more closely mimic long-standing program flow.
- * tty.cc (tty_list::terminate): Replace call to low_priority_sleep with
- Sleep.
-
-2010-03-10 Christopher Faylor <me.cygwin@cgf.cx>
-
- * shared.cc (memory_init): Fix comment. Fix indentation.
-
-2010-03-09 Christopher Faylor <me+cygwin@cgf.cx>
-
- * shared_info.h (open_shared): Create function wrapper for common use
- case.
- (open_shared): Change fifth argument to a pointer rather than a
- reference.
- * fhandler_console.cc (fhandler_console::get_tty_stuff): Eliminate use
- of dummy variable and call open_shared with constant.
- * fhandler_process.cc (format_process_mounts): Ditto.
- * pinfo.cc (pinfo::init): Pass pointer to shloc.
- * shared.cc (shared_mem_inited): New variable.
- (open_shared): Crate function wrapper for common use case.
- (open_shared): Accommodate change to fifth argument to a pointer.
- (shared_info::initialize): Remove spinlock test. Simplify function.
- Move get_session_parent_dir call back here.
- (memory_init): Protect global shared settings with shared_mem_inited
- spinlock. Move get_session_parent_dir call to shared_info::initialize.
-
-2010-03-09 Christopher Faylor <me.cygwin@cgf.cx>
-
- * shared.cc (inst_root_inited): Delete.
- * (shared_info::initialize): Reorganize. Move call to
- init_installation_root here under spinlock control. Move unneeded
- non-shared_info initialization out of this function.
- (memory_init): Remove call to init_installation_root. Call heap_init
- and get_session_parent_dir here.
-
-2010-03-04 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (nt_path_has_executable_suffix): Change storage class of
- blessed_executable_suffixes to static.
- (rename): Revert meaning of old_explicit_suffix. Change the rules
- for appending a .exe suffix and (yikes!) document them.
-
-2010-03-04 Charles Wilson <cygwin@cwilson.fastmail.fm>
-
- * cygwin.din: Export __xdr functions.
- * include/cygwin/version.h: Bump version.
- * posix.sgml: Add a few more XDR functions to list
- of implemented Solaris functions.
-
-2010-03-03 Charles Wilson <cygwin@cwilson.fastmail.fm>
-
- Add XDR support.
- * cygwin.din: Export xdr functions.
- * include/cygwin/version.h: Bump version.
- * cygxdr.cc: New.
- * cygxdr.h: New.
- * dcrt0.cc (dll_crt0_1): Print the (rare) xdr-related
- error messages to stderr.
- * Makefile.in: Add cygxdr.
- * posix.sgml: Add new XDR functions to list of implemented Solaris
- functions.
-
-2010-03-01 Christopher Faylor <me+cygwin@cgf.cx>
-
- * cygtls.h: Replace /*gentls_offsets*/ at end.
-
-2010-03-01 Christopher Faylor <me+cygwin@cgf.cx>
-
- * exception.h: Fix copyright.
-
-2010-02-27 Christopher Faylor <me+cygwin@cgf.cx>
-
- Update some copyrights.
- * cygtls.cc (_cygtls::call): Invoke new exception protection here.
- (_cygtls::init_thread): Remove conditionalized exception handler setup.
- (exception_list): Delete declaration.
- (_cygtls::init_exception_handler): Delete obsolete function.
- * cygtls.h: Remove (now) unneeded include.
- (_cygtls): Make this a real C++ class.
- (_cygtls::handle_exceptions): Remove.
- (_cygtls::init_exception_handler): Remove.
- (_cygtls::call2): Make private.
- (myfault::faulted): Remove unneeded parentheses.
- * dcrt0.cc (dll_crt0_1): Remove exception handler setup.
- * dlfcn.cc (dlopen): Ditto.
- (dlclose): Ditto.
- * dll_init.cc (dll_dllcrt0_1): Ditto.
- (dll_list::detach): Use new exception handler protection.
- * exceptions.cc (dump_exception): Rename to prevent confusion with new
- class.
- (exception::handle): Rename from _cygtls::handle_exceptions.
- Accommodate new exception class. Accommodate rename to dump_exception.
- * tlsoffsets.h: Regenerate.
-
-2010-02-26 Christopher Faylor <me+cygwin@cgf.cx>
-
- * cygtls.h (_cygtls::init_exception_handler): Eliminate argument.
- (_cygtls::andreas): Convert to a pointer.
- (san): Convert to a real class with methods. Use a linked list to
- keep track of previous handlers on the "stack".
- (myfault): Rewrite to use new san class rather than calling directly
- into _cygtls.
- * cygtls.cc (_cygtls::init_exception_handler): Just assume that we're
- always using the standard exception handler.
- (_cygtls::init_thread): Reflect loss of argument to
- init_exception_handler.
- * dcrt0.cc (dll_crt0_1): Ditto.
- * dfcn.cc (dlopen): Ditto.
- (dlclose): Reset the exception handler after FreeLibrary.
- * dll_init.cc (dll_list::detach): Make sure that the exception handler
- is initialized before calling destructors.
- * exceptions.cc (_cygtls::handle_exceptions): Accommodate new andreas
- pointer.
- * thread.cc (verifyable_object_isvalid): Pass objectptr to faulted for
- explicit NULL pointer checking.
- * tlsoffsets.h: Regenerate.
-
-2010-02-26 Christopher Faylor <me+cygwin@cgf.cx>
-
- * mkimport: cd away from temp directory or Windows will have problems
- removing the directory.
-
-2010-02-26 Corinna Vinschen <corinna@vinschen.de>
-
- * libc/strptime.cc: Implement support for era, alt_digits and POSIX
- padding and width modifiers.
- (era_info_t): New type.
- (free_era_info): New static function to free era_info_t storage.
- (get_era_info): New static function to create era_info_t storage
- from LC_TIME era information.
- (alt_digits_t): New type.
- (get_alt_digits): New static function to create alt_digits_t storage
- from LC_TIME alt_digits information.
- (free_alt_digits): New static function to free alt_digits_t storage.
- (find_alt_digits): New static function to scan input for alternative
- digits and return them, if any. Return NULL otherwise.
- (__strptime): New static function taking all code from strptime.
- Implement handling for E, O, +, 0, and width modifiers per POSIX-1.2008.
- (strptime): Convert into wrapper function to provide era_info and
- alt_digits pointers and call __strptime.
- (conv_num): Take additional alt_digits_t parameter and if it's not
- NULL, call find_alt_digits to convert.
-
-2010-02-26 Corinna Vinschen <corinna@vinschen.de>
-
- * strsig.cc: Fix formatting and copyright.
-
-2010-02-26 Pierre Humblet <Pierre.Humblet@ieee.org>
-
- * security.cc (check_access): Use user.imp_token if appropriate.
- Set errno and return if DuplicateTokenEx fails .
-
-2010-02-26 Corinna Vinschen <corinna@vinschen.de>
-
- Remove all traces of __CYGWIN_USE_BIG_TYPES__.
-
- * include/cygwin/config.h: Move Cygwin-specific build flags from
- newlib's sys/config.h here. Add a comment.
-
-2010-02-25 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * include/cygwin/signal.h: Define SIGPWR as synonym for SIGLOST.
- * strsig.cc: Ditto.
- * include/cygwin/version.h: Bump CYGWIN_VERSION_API_MINOR.
-
-2010-02-25 Corinna Vinschen <corinna@vinschen.de>
-
- * lc_era.h (lc_era_t): Fix apparent glibc bug in ja_JP era definition.
-
-2010-02-24 Corinna Vinschen <corinna@vinschen.de>
-
- * sec_auth.cc (get_full_privileged_inheritable_token): Fix dumb typo
- when checking linked token for being a primary token.
-
-2010-02-24 Christopher Faylor <me+cygwin@cgf.cx>
-
- * dlfcn.cc (dlopen): Make sure exception handler is really loaded after
- dynamic load.
-
-2010-02-23 Christopher Faylor <me+cygwin@cgf.cx>
-
- * cygtls.cc (_cygtls::init_exception_handler): Force installation of
- our exception handler to always be at the beginning.
-
-2010-02-23 Christopher Faylor <me+cygwin@cgf.cx>
-
- * thread.cc (pthread_mutex::unlock): Don't attempt to unlock if there
- is an error.
-
-2010-02-22 Christopher Faylor <me+cygwin@cgf.cx>
-
- * include/sys/strace.h: Define _STRACE_SPECIAL.
- (strace_printf_wrap): Fix NOSTRACE definitions.
- (strace_printf_wrap1): Fix NOSTRACE definitions.
- (special_printf): Define.
-
- * thread.cc: Perform minor syntax fix in a comment. Rename
- "is_good_initialzer*" to "is_initializer*" throughout. Use
- pthread_printf rather than debug_printf throughout. Add extra
- pthread_printf debugging throughout.
- (pthread_mutex::_new_mutex): New constant value.
- (pthread_mutex::_unlocked_mutex): Ditto.
- (pthread_mutex::_destroyed_mutex): Ditto.
- (pthread_mutex::no_owner): Define new function.
- (pthread_mutex::can_be_unlocked): Detect no_owner situation. Handle
- PTHREAD_MUTEX_NORMAL as a special case.
- (pthread::create_cancel_event): Use C++ boolean values.
- (pthread::precreate): Use method to set mutex type.
- (pthread_cond::pthread_cond): Ditto.
- (pthread_rwlock::pthread_rwlock): Ditto.
- (pthread_mutex::pthread_mutex): Set owner to _new_mutex initially.
- (pthread_mutex::~pthread_mutex): Reset various elements to make it
- clearer if they are incorrectly reused.
- (pthread_mutex::lock): Add clarifying comment.
- (pthread_mutex::unlock): Attempt to handle various mutex types
- correctly. In particular, reinstate ability to have one thread unlock
- another thread's mutex if type == PTHREAD_MUTEX_NORMAL.
- (semaphore::_fixup_after_fork): Avoid redundancy.
- (pthread_mutex::_fixup_after_fork): Ditto. Fix debugging statement.
- (__pthread_cond_dowait): Accommodate changes to remove previously
- inexplicable use can_be_unblocked() as a static function.
- * thread.h: Rename "is_good_initialzer*" to "is_initializer*"
- throughout.
- (pthread_mutex): Reorganize. Make many things private.
- (pthread_mutex::no_owner): Define new method.
- (pthread_mutex::_new_mutex): Define new constant.
- (pthread_mutex::_unlocked_mutex): Ditto.
- (pthread_mutex::_destroyed_mutex): Ditto.
-
-2010-02-22 Corinna Vinschen <corinna@vinschen.de>
-
- * lc_era.h: Redefine lc_era_t to keep
- default date and time formats as well to workaround YA Windows
- shortcoming. Refresh with latest data.
- * lc_msg.h: Refresh with latest data.
- * nlsfuncs.cc (__eval_datetimefmt): Revert latest change.
- (__set_lc_time_from_win): Rename res to era. Prefer default date and
- time formats from era array if available.
- (__set_lc_messages_from_win): Rename res to msg.
-
-2010-02-20 Corinna Vinschen <corinna@vinschen.de>
-
- * lc_era.h (lc_era): Fix "ja_JP" era_t_fmt entry to use traditional
- format.
- * nlsfuncs.cc (dt_flags): Remove DT_ERACAL since crippled era data
- in Windows makes it useless.
- (__eval_datetimefmt): Check if locale's default calender has
- non-gregorian start year. Use era year also in default date entries,
- if so.
-
-2010-02-20 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (warn_msdos): Enforce extended hex printing of multibyte
- pathnames.
-
-2010-02-19 Christopher Faylor <me+cygwin@cgf.cx>
-
- * include/sys/strace.h: Remove old code. Add support for ptrace
- tracing.
-
-2010-02-19 Corinna Vinschen <corinna@vinschen.de>
-
- * lc_era.h: New file.
- * nlsfuncs.cc: Include lc_era.h.
- (locale_cmp): convert arguments to char** to be usable for both types,
- lc_msg_t and lc_era_t.
- (__set_lc_time_from_win): Handle era-related data
-
-2010-02-19 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::opendir): Try to open
- directory with stat()-friendly access mask first. Explain why.
-
-2010-02-19 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_base::fstat_helper): Set st_rdev
- to same value as st_dev. Avoid useless debug output in executable
- check. Add filename to debug output.
- (fhandler_disk_file::facl): Simplify code calling fstat methods to
- just call fstat to avoid errors with the cygdrive directory.
-
-2010-02-18 Corinna Vinschen <corinna@vinschen.de>
-
- * nlsfuncs.cc (eval_datetimefmt): Rename force to flags.
- (enum dt_flags): Define.
- (__eval_datetimefmt): Change force to flags and change type to
- dt_flags. Accommodate throughout.
- (__set_lc_time_from_win): Accommodate above change. Set era-related
- values to empty strings for now.
-
-2010-02-18 Christopher Faylor <me+cygwin@cgf.cx>
-
- * fhandler.cc (fhandler_base::setup_overlapped): Revert to starting
- with handle in signalled state as it seems to fix some hangs.
-
-2010-02-15 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (path_conv::check): Treat native DOS paths as "noacl".
-
-2010-02-15 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (mount_info::conv_to_win32_path): Set UNC path flags to
- cygdrive prefix path flags.
-
-2010-02-14 Christopher Faylor <me+cygwin@cgf.cx>
-
- * fhandler.cc (fhandler_base::setup_overlapped): Don't set signalled
- state to true initially.
- (fhandler_base::has_ongoing_io): Delete ill-advised function.
- (fhandler_base::read_overlapped): Rely on caller having checked
- nonblocking state. Don't attempt to (incorrectly) check it here.
- (fhandler_base::write_overlapped): Remove call to has_ongoing_io.
- * select.cc (peek_pipe): Ditto.
- * fhandler.h (fhandler_base::has_ongoing_io): Delete declaration.
-
-2010-02-14 Christopher Faylor <me+cygwin@cgf.cx>
-
- * regex/regcomp.c (xwcrtomb): Fix one explicable and one inexcplicable
- C warning.
-
-2010-02-13 Corinna Vinschen <corinna@vinschen.de>
-
- * regex/regcomp.c (xwcrtomb): Don't convert Unicode chars outside the
- base plane always to UTF-8. Call wcsnrtombs instead to allow arbitrary
- multibyte charsets.
-
-2010-02-12 Corinna Vinschen <corinna@vinschen.de>
-
- * regex/regcomp.c (wgetnext): Use size_t as type for n2 since that's
- what's returned by mbrtowc.
- * regex/regexec.c (xmbrtowc): Ditto.
-
-2010-02-12 Christopher Faylor <me+cygwin@cgf.cx>
-
- * pthread.cc (pthread_mutex_init): Explicitly fill out third arg to
- pthread_mutex::init.
- * thread.cc: Remov some obsolete comments.
- (verifyable_object_isvalid): Reflect change to use thread_magic_t for
- magic numbers.
- (pthread_mutex::pthread_mutex): Set magic number to invalid initially
- until we've verified that everything is valid.
- (pthread_mutex::unlock): Fix a comment.
- (verifyable_object::verifyable_object): Delete here.
- (~verifyable_object::~verifyable_object): Ditto.
- (pthread_mutex::init): Don't run is_good_initializer for non-static
- objects.
- * thread.h (thread_magic_t): New typedef.
- (verifyable_object::verifyable_object): Use thread_magic_t;
- (verifyable_object::magic): Ditto.
- (pthread_mutex::is_good_initializer_or_bad_object): Remove unneeded
- variable names.
- (pthread_mutex::can_be_unlocked): Ditto.
- (pthread_mutex::init): Ditto. Remove default for third argument.
-
-2010-02-12 Corinna Vinschen <corinna@vinschen.de>
-
- * regex/regcomp.c (xwcrtomb): New function to convert wide chars
- outside of the base plane to UTF-8. Call throughout instead of
- wcrtomb.
- (wgetnext): Handle surrogate pairs on UTF-16 systems.
- * regex/regexec.c (xmbrtowc): Ditto.
-
-2010-02-12 Corinna Vinschen <corinna@vinschen.de>
-
- * sec_auth.cc (get_user_local_groups): Retrieve name of well known
- builtin group from system. Explain why.
- * sec_helper.cc (well_known_builtin_sid): New SID for BUILTIN group.
- * security.h (well_known_builtin_sid): Declare.
-
-2010-02-11 Pierre Humblet <Pierre.Humblet@ieee.org>
-
- * registry.cc (get_registry_hive_path): Add space in string.
-
-2010-02-11 Corinna Vinschen <corinna@vinschen.de>
-
- * regex/engine.c (step): Drop Cygwin-specific definition.
- (NONCHAR): Better cast here to make the test work. Move comment
- from step here.
- (matcher): Disable skipping initial string in multibyte case.
- * regex/regcomp.c (p_bracket): Don't simplify singleton in the invert
- case.
- (p_b_term): Handle early end of pattern after dash in bracket
- expression.
- (singleton): Don't ignore the wides just because there's already a
- singleton in the single byte chars. Fix condition for a singleton
- wide accordingly.
- (findmust): Check for LC_CTYPE charset, rather than LC_COLLATE charset.
- * regex2.h (CHIN): Fix condition in the icase & invert case.
- (ISWORD): Fix wrong cast to unsigned char.
-
-2010-02-11 Andy Koppe <andy.koppe@gmail.com>
-
- * nlsfuncs.cc (initial_setlocale): Move check whether charset has
- changed from here...
- (internal_setlocale): ...to here, to avoid unnecessary work when invoked
- via CW_INT_SETLOCALE.
-
-2010-02-10 Corinna Vinschen <corinna@vinschen.de>
-
- * nlsfuncs.cc (__set_charset_from_locale): Allow "@euro" modifier only
- for locales which use EUR as currency.
-
-2010-02-10 Corinna Vinschen <corinna@vinschen.de>
-
- * nlsfuncs.cc (__get_lcid_from_locale): Convert iu_CA to iu-Latn-CA
- rather than iu-Cans-CA on Vista and later.
- (__set_charset_from_locale): Set default charset for iu_CA to UTF-8.
-
-2010-02-10 Christopher Faylor <me+cygwin@cgf.cx>
-
- * dcrt0.cc (_dll_crt0): Set _main_tls as early as possible.
- * thread.cc (pthread_mutex::can_be_unlocked): Remove check for
- MUTEX_OWNER_ANONYMOUS since it is racy and unsafe.
- (pthread::init_mainthread): Initialize thread directly from _my_tls.
- (pthread::self): Ditto.
- (pthread::get_tls_self_pointer): Delete.
- (pthread_mutex::pthread_mutex): Use an event rather than a semaphore.
- (pthread_mutex::lock): Rename from _<func>. Derive self directly.
- (pthread_mutex::tryunlock): Ditto.
- (pthread_mutex::destroy): Ditto.
- (pthread_mutex::unlock): Ditto. Accommodate change from semaphore to
- event.
- (pthread_mutex::_fixup_after_fork): Accommodate change from semaphore
- to event.
- (pthread_mutex::init): Don't attempt to initialize a semaphore unless
- it is in an initialized state. Do this check under
- mutex_initialization_lock.lock
- * thread.h (fast_mutex::init): Use event rather than semaphore.
- (fast_mutex::lock): Ditto.
- (pthread_mutex::_lock): Delete.
- (pthread_mutex::_unlock): Ditto.
- (pthread_mutex::_trylock): Ditto.
- (pthread_mutex::_destroy): Ditto.
- (pthread_mutex::get_pthread_self): Ditto.
- (pthread_mutex::get_tls_self_pointer): Ditto.
- (pthread_mutex::lock): Un-inline.
- (pthread_mutex::unlock): Ditto.
- (pthread_mutex::trylock): Ditto.
- (pthread_mutex::destroy): Ditto.
-
-2010-02-09 Christopher Faylor <me+cygwin@cgf.cx>
-
- * cygtls.h (struct _cygtls): Remove unneeded elements.
- * thread.cc (pthread::exit): Avoid potential double call to
- _my_tls.remove.
- * tlsoffsets.h: Regenerate.
-
-2010-02-09 Corinna Vinschen <corinna@vinschen.de>
-
- * nlsfuncs.cc (lc_wcstombs): Add `return_invalid' flag to specify
- whether invalid chars should be ignored or not. Change comment.
- (__set_lc_monetary_from_win): Call lc_wcstombs with return_invalid
- flag set.
- (__set_lc_messages_from_win): Simplify to accommodate the fact that
- lc_wcstombs just ignores invalid chars. Explain why.
-
-2010-02-09 Corinna Vinschen <corinna@vinschen.de>
-
- * nlsfuncs.cc (__set_lc_messages_from_win): Fix typo.
-
-2010-02-09 Corinna Vinschen <corinna@vinschen.de>
-
- * lc_msg.h: New file, fix a problem in locales with modifiers.
-
-2010-02-09 Corinna Vinschen <corinna@vinschen.de>
-
- * lc_msg.h: New file, generated from running Linux system.
-
-2010-02-09 Corinna Vinschen <corinna@vinschen.de>
-
- * lc_msg.h: New file, autogenerated from CLDR data.
- * nlsfuncs.cc: Include lc_msg.h.
- (lc_time_buf): Remove.
- (lc_numeric_buf): Remove.
- (lc_monetary_buf): Remove.
- (lc_mbstowcs): Fix previous fix.
- (__set_lc_time_from_win): Take additional pointer to buffer pointer,
- defined in newlib.
- (__set_lc_numeric_from_win): Ditto.
- (__set_lc_monetary_from_win): Ditto.
- (locale_cmp): New static function.
- (__set_lc_messages_from_win): New function to be called from newlib.
-
-2010-02-08 Corinna Vinschen <corinna@vinschen.de>
-
- * external.cc (cygwin_internal): Add CW_INT_SETLOCALE case to
- allow to call internal_setlocale().
- * nlsfuncs.cc (internal_setlocale): Make externally available.
- * include/cygwin/version.h: Bump API minor number.
- * include/sys/cygwin.h (cygwin_getinfo_types): Add CW_INT_SETLOCALE.
-
- * nlsfuncs.cc (lc_mbstowcs): Fix call to f_mbtowc.
- (__set_locale_from_locale_alias): Ignore "@cjknarrow" modifier.
-
-2010-02-07 Corinna Vinschen <corinna@vinschen.de>
-
- * nlsfuncs.cc (__get_lcid_from_locale): Handle "@cyrillic" modifier
- for uz_UZ locale here.
- (__set_charset_from_locale): Accommodate above change.
-
-2010-02-07 Corinna Vinschen <corinna@vinschen.de>
-
- * nlsfuncs.cc (__set_locale_from_locale_alias): New function to read
- locale aliases from /usr/share/locale/locale.alias.
-
-2010-02-06 Corinna Vinschen <corinna@vinschen.de>
-
- * nlsfuncs.cc (__get_lcid_from_locale): Handle no_NO as nb_NO, rather
- than nn_NO.
-
-2010-02-06 Corinna Vinschen <corinna@vinschen.de>
-
- * nlsfuncs.cc (has_modifier): MOve up in file to use in
- __get_lcid_from_locale as well.
- (__get_lcid_from_locale): Handle no_NO locale as alias for nn_NO.
- Default all sr_XY locales to Cyrillic script. Change lcid to Latin
- script if "@latin" modifier has been specified.
- (__set_charset_from_locale): Handle Serbian in codepage 1251 case as
- well. Also check for sr_BA lcid. Restrict "@euro" modifier to
- locales otherwise defaulting to ISO-8859-1.
-
-2010-02-06 Corinna Vinschen <corinna@vinschen.de>
-
- * nlsfuncs.cc (__set_charset_from_locale): Set default charset for
- "ka_GE" locale to GEORGIAN-PS, for "kk_KZ" to PT154.
-
-2010-02-06 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (symlink_info::check_nfs_symlink): Reopen file with
- FILE_READ_EA access since, surprisingly, you need it to read EAs even
- on NFS.
-
-2010-02-06 Corinna Vinschen <corinna@vinschen.de>
-
- * sec_auth.cc (get_full_privileged_inheritable_token): New function
- to fetch token with full privileges from logon token in Vista and
- later, and to make token inheritable. Add lengthy comments to explain
- the function's job.
- (cygwin_logon_user): Drop calling SetHandleInformation. Enable TCB
- privilege and call get_full_privileged_inheritable_token.
- (lsaauth): Don't fetch linked token and don't make handle inheritable
- here, just call get_full_privileged_inheritable_token instead.
- (lsaprivkeyauth): Ditto.
-
-2010-02-05 Corinna Vinschen <corinna@vinschen.de>
-
- * nlsfuncs.cc (__set_charset_from_locale): Set default charset for
- "uz_UZ" locale to ISO-8859-1, with the "@cyrillic" modifier to UTF-8.
-
-2010-02-05 Christopher Faylor <me+cygwin@cgf.cx>
-
- * dll_init.cc (per_module::run_dtors): Use consistent method for
- running destructors.
-
-2010-02-04 Christopher Faylor <me+cygwin@cgf.cx>
-
- * regcomp.c (p_ere): Workaround incorrect compiler warning.
- * regerror.c (regatoi): Return non-const string or compiler complains
- in certain inexplicable situations.
-
-2010-02-04 Corinna Vinschen <corinna@vinschen.de>
-
- * regex/engine.c (step): Declare and define with `int ch' rather than
- `wint_t ch' parameter. Explain why.
- (NONCHAR): Remove related Cygwin patch here, including wrong comment.
-
-2010-02-04 Corinna Vinschen <corinna@vinschen.de>
-
- Replace regex files with multibyte-aware version from FreeBSD.
- * Makefile.in (install-headers): Remove extra command to install
- regex.h.
- (uninstall-headers): Remove extra command to uninstall regex.h.
- * nlsfuncs.cc (collate_lcid): Make externally available to allow
- access to collation internals from regex functions.
- (collate_charset): Ditto.
- * wchar.h: Add __cplusplus guards to make C-clean.
- * include/regex.h: New file, replacing regex/regex.h. Remove UCB
- advertising clause.
- * regex/COPYRIGHT: Accommodate BSD license. Remove UCB advertising
- clause.
- * regex/cclass.h: Remove.
- * regex/cname.h: New file from FreeBSD.
- * regex/engine.c: Ditto.
- (NONCHAR): Tweak for Cygwin.
- * regex/engine.ih: Remove.
- * regex/mkh: Remove.
- * regex/regcomp.c: New file from FreeBSD. Tweak slightly for Cygwin.
- Import required collate internals from nlsfunc.cc.
- (p_ere_exp): Add GNU-specific \< and \> handling for word boundaries.
- (p_simp_re): Ditto.
- (__collate_range_cmp): Define.
- (p_b_term): Use Cygwin-specific collate internals.
- (findmust): Ditto.
- * regex/regcomp.ih: Remove.
- * regex/regerror.c: New file from FreeBSD. Fix a few compiler warnings.
- * regex/regerror.ih: Remove.
- * regex/regex.7: New file from FreeBSD. Remove UCB advertising clause.
- * regex/regex.h: Remove. Replaced by include/regex.h.
- * regex/regexec.c: New file from FreeBSD. Fix a few compiler warnings.
- * regex/regfree.c: New file from FreeBSD.
- * regex/tests: Remove.
- * regex/utils.h: New file from FreeBSD.
-
-2010-02-03 Christopher Faylor <me+cygwin@cgf.cx>
-
- * sigproc.cc (get_proc_lock): Fix error message typo.
-
-2010-02-03 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_base::fstat_helper): Workaround
- another bug in NWFS. Add comment to explain why. Improve debug output
- in case the NT calls to test for binary fail.
- * path.h (path_conv::fs_is_cifs): New method.
- (path_conv::fs_is_nwfs): New method.
-
-2010-02-02 Corinna Vinschen <corinna@vinschen.de>
-
- * include/paths.h (_PATH_MNTTAB): Define.
- (_PATH_MOUNTED): Define.
- * include/mntent.h: Include paths.h. Define MNTTAB and MOUNTED as their
- paths.h equivalents. Add comment.
-
-2010-02-01 Christopher Faylor <me+cygwin@cgf.cx>
-
- * dcrt0.cc (atexit_lock): Delete.
- (cygwin_exit): Remove atexit lock.
- (cygwin_atexit): Ditto. Rename parameter to match newlib. Call
- __cxa_atexit when invoked by a registered DLL.
- * dll_init.cc (remove_dll_atexit): Delete.
- (dll_list::find): New function.
- (dll_list::detach): Use dll_list::find to find dll associated with
- return address. Use __cxa_finalize to run atexit functions associated
- with the dll.
- (cygwin_detach_dll): Don't assume that HANDLE == void *.
- * dll_init.h (dll_list::find): Declare.
- (__cxa_atexit): Ditto.
- (__cxa_finalize): Ditto.
-
- * init.cc (dll_entry): Clarify comment.
-
-2010-02-02 Dave Korn <dave.korn.cygwin@gmail.com>
-
- * how-startup-shutdown-works.txt: Add new document.
-
-2010-01-29 Corinna Vinschen <corinna@vinschen.de>
-
- * sec_auth.cc (lsaauth): Use CYG_LSA_MAGIC as checksum start value to
- decouple from Cygwin release.
-
-2010-01-29 Corinna Vinschen <corinna@vinschen.de>
-
- * libc/strfmon.c (__setup_vars): Test for an empty string rather than
- for a NULL pointer.
-
-2010-01-29 Christopher Faylor <me+cygwin@cgf.cx>
-
- * dll_init.cc (remove_dll_atexit): New function.
- (dll_list::detach): Run any atexit handlers registered in the DLL prior
- to unloading.
-
-2010-01-29 Christopher Faylor <me+cygwin@cgf.cx>
-
- * libc/strfmon.c (__setup_vars): Fix compiler warning about assigning
- const strings. Compare a pointer to NULL rather than '\0'.
-
- * dll_init.cc (dll_dllcrt0_1): Minor comment fix.
-
- * pipe.cc (fhandler_pipe::create_selectable): Remove Win9x
- accommodation.
-
-2010-01-29 Corinna Vinschen <corinna@vinschen.de>
-
- Throughout, use FileBothDirectoryInformation info class rather than
- FileDirectoryInformation info class to avoid problems with incomplete
- filesystem implementations. Fix comments accordingly.
- * fhandler_disk_file.cc (fhandler_disk_file::readdir_helper): Set
- fname->Length to 0 in error case to avoid potential crash in debug
- output.
- (fhandler_disk_file::readdir): Try to speed up the working default case.
- Check for STATUS_INVALID_NETWORK_RESPONSE as potential status value
- returned by filesystems not implementing FileIdBothDirectoryInformation.
- * ntdll.h (STATUS_INVALID_NETWORK_RESPONSE): Define.
- (FILE_BOTH_DIRECTORY_INFORMATION): Rename to official name.
- * path.cc (symlink_info::check): Don't request FILE_READ_EA access, it's
- not required for NFS. Try to speed up the working default case. Check
- for STATUS_INVALID_NETWORK_RESPONSE as potential status value returned
- by filesystems not supporting non-NULL EA parameters. Fix the way
- fs.update is called. Improve debug output.
-
-2010-01-28 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (tags, ctags, CTAGS)): Add rules to create tags file.
-
-2010-01-25 Corinna Vinschen <corinna@vinschen.de>
-
- * nlsfuncs.cc (__get_lcid_from_locale): Add comments. Fix typos in
- comments. Make sure to set last_lcid every time. Return locale
- without territory part as invalid. Handle modern serbian territory
- names per ISO 3166 on older systems as well. Add appropriate comment.
- (__set_charset_from_locale): Handle LCID for sr_CS as well to make older
- systems happy.
-
-2010-01-25 Corinna Vinschen <corinna@vinschen.de>
-
- * nlsfuncs.cc (__set_charset_from_locale): Rearrange to set charset
- more closely aligned to Glibc.
-
-2010-01-25 Corinna Vinschen <corinna@vinschen.de>
-
- * spawn.cc (spawn_guts): Only try to remove long path prefix from
- runpath if runpath is not NULL.
-
-2010-01-25 Corinna Vinschen <corinna@vinschen.de>
-
- * nlsfuncs.cc (__get_lcid_from_locale): Fix a comment. Handle special
- language/TERRITORY combinations explicitely. Explain why.
-
-2010-01-24 Corinna Vinschen <corinna@vinschen.de>
-
- * nlsfuncs.cc (__set_charset_from_locale): Fix comment.
-
-2010-01-24 Corinna Vinschen <corinna@vinschen.de>
-
- * nlsfuncs.cc (check_codepage): Move from syscalls.cc here.
- (internal_setlocale): Ditto.
- (initial_setlocale): Ditto.
- (setlocale): Ditto.
- * strfuncs.cc (__sjis_wctomb): Revert previous patch.
- (__sjis_mbtowc): Ditto.
- * syscalls.cc: Move setlocale-related functions to nlsfuncs.cc.
-
-2010-01-23 Corinna Vinschen <corinna@vinschen.de>
-
- * strfuncs.cc (__sjis_wctomb): Special handling for characters which
- differ between SJIS and Windows codepage 932, if charset is "SJIS".
- (__sjis_mbtowc): Ditto.
- (_jis_wctomb): Remove.
- (__jis_mbtowc): Remove.
-
-2010-01-23 Corinna Vinschen <corinna@vinschen.de>
-
- * nlsfuncs.cc (wcsxfrm): Call LCMapStringW with LCMAP_BYTEREV flag to
- allow correct comparison using wcscmp.
-
-2010-01-22 Corinna Vinschen <corinna@vinschen.de>
-
- * posix.sgml (strfmon): Move to implemented SUSv4 API.
-
-2010-01-22 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (DLL_OFILES): Add nlsfunc.o and strfmon.o.
- * autoload.cc (LocaleNameToLCID): Define.
- * cygwin.din (strfmon): Export.
- * nlsfuncs.cc: New file. Define a lot of internal functions called
- from setlocale.
- (wcscoll): Implement locale-aware here, using CompareStringW function.
- (strcoll): Ditto.
- (wcsxfrm): Implement locale-aware here, usingLCMapStringW function.
- (strxfrm): Ditto.
- (__set_charset_from_locale): Replace __set_charset_from_codepage.
- Return Linux-compatible charset.
- * strfuncs.cc (__set_charset_from_codepage): Remove.
- * wchar.h (__set_charset_from_codepage): Drop definition.
- * wincap.h (wincaps::has_localenames): New element.
- * wincap.cc: Implement above element throughout.
- * libc/strfmon.c: New file.
- * libc/strptime.cc: Remove locale constant strings in favor of
- access to locale-specifc data.
- (strptime): Point _CurrentTimeLocale to locale-specific data.
- Throughout use correct locale-specific format fields for all
- locale-specific formats.
- * include/monetary.h: New file.
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
-
-2010-01-18 Corinna Vinschen <corinna@vinschen.de>
-
- * strfuncs.cc: Remove needless includes.
-
-2010-01-17 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (internal_setlocale): Use UTF-8 internally if external
- charset is ASCII.
-
-2010-01-15 Corinna Vinschen <corinna@vinschen.de>
-
- * libc/fnmatch.c: Replace with multibyte capable version from FreeBSD.
-
-2010-01-15 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::accept4): Reset async flag
- on accepted socket.
-
-2010-01-15 Pierre A. Humblet <phumblet@phumblet.no-ip.org>
-
- * fhandler_socket.cc (fhandler_socket::accept4): Set nonblocking
- flag exactly according to flags, as on Linux.
- * net.cc (cygwin_accept): Maintain BSD semantics here.
-
-2010-01-15 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din (accept4): Export.
- * fhandler.h (fhandler_socket::accept4): Rename from accept. Take
- additional flag parameter.
- * fhandler_socket.cc (fhandler_socket::accept4): Ditto. Handle
- SOCK_NONBLOCK and SOCK_CLOEXEC flags.
- * net.cc (cygwin_socket): Handle SOCK_NONBLOCK and SOCK_CLOEXEC flags
- in type. Check for invalid flag values.
- (socketpair): Ditto.
- (cygwin_accept): Accommodate renaming of fhandler_socket::accept
- function to accept4.
- (accept4): New function.
- * posix.sgml: Mention accept4 as GNU extensions.
- * include/cygwin/socket.h (SOCK_NONBLOCK): Define.
- (SOCK_CLOEXEC): Define.
- (_SOCK_FLAG_MASK): Define when building Cygwin.
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
- * include/sys/socket.h (accept4): Declare.
-
-2010-01-15 Corinna Vinschen <corinna@vinschen.de>
-
- * posix.sgml: Mention dup3 and pipe2 as GNU extensions.
-
-2010-01-14 Corinna Vinschen <corinna@vinschen.de>
-
- * dcrt0.cc (dll_crt0_1): Reset locale to "C" at the last moment before
- calling the application's main.
- * syscalls.cc (internal_setlocale): Don't reset locale to "C here.
- Change comment accordingly.
-
-2010-01-14 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din (dup3): Export.
- (pipe2): Export.
- * dtable.cc (dtable::dup_worker): Take additional flags parameter.
- Handle O_CLOEXEC flag.
- (dtable::dup3): Rename from dup2. Take additional flags parameter.
- Check for valid flags. Drop check for newfd == oldfd.
- * dtable.h (dtable::dup_worker): Add flags parameter.
- (dtable::dup3): Rename from dup2.
- * fcntl.cc (fcntl64): Add F_DUPFD_CLOEXEC case.
- * fhandler.h (fhandler_mailslot::get_object_attr): Add flags parameter.
- * fhandler.cc (fhandler_base::open): Use security attribute with
- inheritance according to setting of O_CLOEXEC flag.
- * fhandler_console.cc (fhandler_console::open): Ditto.
- * fhandler_fifo.cc (sec_user_cloexec): New inline function to
- create security attribute with inheritance according to setting of
- O_CLOEXEC flag.
- (fhandler_fifo::open): Call sec_user_cloexec to fetch security
- attribute.
- (fhandler_fifo::wait): Ditto.
- * fhandler_mem.cc (fhandler_dev_mem::open): Ditto.
- * fhandler_mailslot.cc (fhandler_mailslot::get_object_attr): Take
- additional flags parameter. Use security attribute with inheritance
- according to setting of O_CLOEXEC flag.
- (fhandler_mailslot::open): Call get_object_attr with flags parameter.
- * fhandler_registry.cc (fhandler_registry::open): Call set_close_on_exec
- on real handles to accommodate O_CLOEXEC flag.
- * fhandler_tty.cc (fhandler_tty_slave::open): Ditto.
- * fhandler_tape.cc: Create mutex with inheritance according to setting
- of O_CLOEXEC flag.
- * pipe.cc: Replace usage of O_NOINHERIT with O_CLOEXEC.
- (fhandler_pipe::init): Simplify setting close_on_exec flag.
- (fhandler_pipe::open): Remove setting close_on_exec flag.
- (fhandler_pipe::create): Use security attribute with inheritance
- according to setting of O_CLOEXEC flag.
- (pipe2): New exported function.
- * posix_ipc.cc: Throughout, open backing files with O_CLOEXEC
- flag to follow POSIX semantics.
- * security.h (sec_none_cloexec): New define.
- * syscalls.cc (dup): Add missing extern "C" qualifier. Accommodate
- renaming of dtable::dup2 to dtable::dup3.
- (dup2): Ditto. Check newfd == oldfd here.
- (dup3): New function. Check newfd == oldfd here.
- (open): Set close_on_exec flag according to O_CLOEXEC flag before
- calling fhandler->open.
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
-
-2010-01-13 Corinna Vinschen <corinna@vinschen.de>
-
- * include/fcntl.h (O_TTY_INIT): Define as 0.
-
-2010-01-13 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_tty.cc (fhandler_tty_master::init): Don't erase all default
- termios settings of slave console.
-
-2010-01-13 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (rename): Don't exit prematurely with EROFS when trying
- to rename an AF_LOCAL socket or when trying to replace an AF_LOCAL
- socket.
-
-2010-01-12 Corinna Vinschen <corinna@vinschen.de>
-
- * globals.cc (ro_u_nwfs): New R/O unicode string.
- * mount.cc (fs_info::update): Check for NWFS filesystem. Set
- has_buggy_basic_info, if so. Add comment to explain why.
- (fillout_mntent): Add "nwfs" string to fs_names array.
- * mount.h (enum fs_info_type): Add nwfs.
- (class fs_info): Add has_buggy_basic_info status flag. Add accessors
- for has_buggy_basic_info and is_nwfs.
- * fhandler_disk_file.cc (fhandler_base::fstat_by_handle): Accommodate
- filesystems with broken FileBasicInformation handling.
- * path.cc (symlink_info::check): Ditto.
- * path.h (path_conv::has_buggy_basic_info): Add method.
-
-2010-01-12 Corinna Vinschen <corinna@vinschen.de>
-
- * dtable.cc (build_fh_name_worker): Remove. Move all functionality
- back into build_fh_name.
- (build_fh_name): Drop unused HANDLE parameter. Drop call to pc.fillin.
- Remove disabled build_fh_name with UNICODE_STRING name parameter.
- * dtable.h (build_fh_name): Drop HANDLE parameter from declaration.
- Remove declaration for build_fh_name with UNICODE_STRING name parameter.
- * path.cc (path_conv::fillin): Remove.
- (symlink_info::check): Fix comment.
- * path.h (path_conv::fillin): Remove declaration.
- * dir.cc: Accommodate change in build_fh_name parameters throughout.
- * sec_acl.cc: Ditto.
- * syscalls.cc: Ditto.
-
- * ntea.cc (getxattr_worker): Fix debug output.
- (setxattr_worker): Ditto.
- * times.cc (utimens_worker): Ditto.
-
-2010-01-11 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_proc.cc (format_proc_stat): Use new in_buf.
- (format_proc_cpuinfo): Replace szBuffer with a union in_buf. Use type
- correct throughout. Add a couple of missing or newer cpu flags. Allow
- certain AMD flags for intel as well.
-
-2010-01-10 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (fhandler_base::fstat_helper): Declare timestamps as
- PLARGE_INTEGER.
- * fhandler_disk_file.cc (fhandler_base::fstat_by_handle):
- Accommodate fstat_helper change of timestamp arguments.
- (fhandler_base::fstat_by_name): Ditto.
- (fhandler_base::fstat_helper): Define with timestamps as PLARGE_INTEGER.
- Accommodate in call to to_timestruc_t.
-
-2010-01-08 Corinna Vinschen <corinna@vinschen.de>
-
- * sec_auth.cc (get_token_group_sidlist): Add BUILTIN\Users account
- to all created tokens.
- * sec_helper.cc (well_known_users_sid): Define as BUILTIN\Users.
- * security.h (well_known_users_sid): Declare.
-
-2010-01-01 Christopher Faylor <me+cygwin@cgf.cx>
-
- * dcrt0.cc: Bump copyright.
-
-2010-01-01 Christopher Faylor <me+cygwin@cgf.cx>
-
- * dcrt0.cc (dll_crt0_1): Move internal locale setting prior to
- potential globify to prevent creation of unglobbed filenames in the
- wrong character set.
diff --git a/winsup/cygwin/ChangeLog-2011 b/winsup/cygwin/ChangeLog-2011
deleted file mode 100644
index a8b9a3af5..000000000
--- a/winsup/cygwin/ChangeLog-2011
+++ /dev/null
@@ -1,5318 +0,0 @@
-2011-12-30 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * cygwin.din (getpt): Export.
- * posix.sgml (std-gnu): Add getpt.
- * tty.cc (getpt): New function.
- * include/cygwin/stdlib.h [!__STRICT_ANSI__] (getpt): Declare.
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
-
-2011-12-30 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * thread.cc: Mark pthread_rwlock_timedrdlock and
- pthread_rwlock_timedwrlock as not yet implemented in the list of
- cancellation points.
-
-2011-12-24 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * fhandler_dsp.cc (fhandler_dev_dsp::fhandler_dev_dsp): Set up device.
-
- * syscalls.cc (open): Very minor formatting tweak.
-
-2011-12-24 Corinna Vinschen <vinschen@redhat.com>
-
- * path.cc (struct symlink_info): Add bool argument to declaration of
- check_reparse_point.
- (symlink_info::check_reparse_point): Add bool argument to indicate
- remote drive. Handle STATUS_PENDING. Don't evaluate junctions on
- remote drives. Fix comments.
- (symlink_info::check): Drop check for is_remote_drive and associated
- comment here. Add fs.is_remote_drive as second parameter to
- check_reparse_point call.
-
-2011-12-23 Corinna Vinschen <vinschen@redhat.com>
-
- * pinfo.cc (pinfo_basic::pinfo_basic): Fix formatting. Set uid and gid
- to default values to accommodate early initialization of shared user
- info. Add comment.
-
-2011-12-22 Corinna Vinschen <vinschen@redhat.com>
-
- * spawn.cc (child_info_spawn::worker): Add CREATE_BREAKAWAY_FROM_JOB
- to c_flags only if current process is member of a job and breakaway
- is allowed.
-
-2011-12-22 Corinna Vinschen <vinschen@redhat.com>
-
- * external.cc (cygwin_internal): Implement CW_ALLOC_DRIVE_MAP,
- CW_MAP_DRIVE_MAP, CW_FREE_DRIVE_MAP.
- * fhandler_process.cc: Include mount.h.
- (get_volume_path_names_for_volume_name): Move to mount.cc.
- (struct dos_drive_mappings): Ditto.
- * mount.cc (get_volume_path_names_for_volume_name): Move here.
- (dos_drive_mappings::dos_drive_mappings): Ditto.
- (dos_drive_mappings::fixup_if_match): Ditto.
- (dos_drive_mappings::~dos_drive_mappings): Ditto.
- * mount.h (class dos_drive_mappings): Declare her.
- * include/sys/cygwin.h (cygwin_getinfo_types): Add CW_ALLOC_DRIVE_MAP,
- CW_MAP_DRIVE_MAP, CW_FREE_DRIVE_MAP.
- * include/cygwin/version.h: Bump API minor number.
-
-2011-12-22 Corinna Vinschen <vinschen@redhat.com>
-
- * fhandler_process.cc: Drop unneeded includes.
-
-2011-12-22 Corinna Vinschen <vinschen@redhat.com>
-
- Throughout use wincap.allocation_granularity instead of getpagesize.
- Throughout use wincap.page_size instead of getsystempagesize.
- Throughout use "status" as variable name to hold NTSTATUS values.
- * fhandler_mem.cc: Check for NT_SUCCESS rather than for STATUS_SUCCESS.
- Fix debug_printf output. Rectify long statements. Fix comment
- formatting.
- * fhandler_proc.cc: Ditto.
- (format_proc_swaps): Drop useless test for ERROR_PROC_NOT_FOUND.
- * fhandler_process.cc: Ditto as in fhandler_mem.cc.
- (get_process_state): Rearrange allocation loop. Use malloc/realloc.
- (get_mem_values): Fix potential NULL pointer usage. Drop unused
- variable.
- * pinfo.cc (winpids::enum_processes): Handle low memory gracefully.
- * sec_auth.cc (get_priv_list): Drop local variable ret.
- * shared.cc (memory_init): Drop outdated call to getpagesize.
- * syscalls.cc (getsystempagesize): Remove.
- * sysconf.cc: Check for NT_SUCCESS rather than for STATUS_SUCCESS.
- (sysinfo): Constify sizeof_stodi. Drop useless test for
- ERROR_PROC_NOT_FOUND.
- * thread.cc (pthread_getattr_np): Cast pointers to uintptr_t rather
- than to int for pointer arithmetic.
- * winsup.h (getsystempagesize): Drop declaration.
-
-2011-12-21 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * fhandler.cc (fhandler_base_overlapped::wait_overlapped): Use correct
- value in switch statement.
-
-2011-12-21 Corinna Vinschen <vinschen@redhat.com>
-
- * dcrt0.cc (_dll_crt0): Rephrase comments. Set $ebp to NULL, as in
- the pthread stack setup.
- * wow64.cc (wow64_revert_to_original_stack): Rephrase some comments.
- Return _tlsbase-16 rather than _main_tls-4 so as not to waste stack.
-
-2011-12-19 Corinna Vinschen <vinschen@redhat.com>
-
- * syscalls.cc (rename): Fix typo in comment. Fix condition to handle
- the case oldpath is no .lnk symlink and newpath points to an existing
- .lnk symlink or .exe file and no explicit .lnk suffix has been given
- in oldpath. Add a comment to explain.
-
-2011-12-19 Corinna Vinschen <vinschen@redhat.com>
-
- * dcrt0.cc (dll_crt0_0): Check for wincap.wow64_has_secondary_stack
- rather than for wincap.is_wow64. Accommodate name change from
- wow64_has_64bit_parent to wow64_needs_stack_adjustment. Align comment.
- (_dll_crt0): Ditto.
- * wincap.h (wincaps::wow64_has_secondary_stack): New element.
- * wincap.cc: Implement above element throughout.
- (wincapc::init): Set wow64_has_secondary_stack to false on non-64 bit
- systems.
- * wow64.cc (wow64_needs_stack_adjustment): Rename (hopefully the last
- time) from wow64_has_64bit_parent.
- (wow64_eval_expected_main_stack): Fix comment to reflect real life.
- (wow64_test_for_64bit_parent): Fix comment.
- * wow64.h (wow64_needs_stack_adjustment): Accommodate new name.
-
-2011-12-17 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * fhandler.cc (fhandler_base::close): Move setting isclosed() from here
- to closed().
- (fhandler_base_overlapped::close): Correct comment.
- (fhandler_base_overlapped::destroy_overlapped): Signal overlapped event
- before closing it to potentially wake up a waiting thread.
- (fhandler_base_overlapped::wait_overlapped): Expand setting of err when
- closed to encompass non-signal event. Test for a cancel event before
- making nonblocking decisions.
- * syscalls.cc (close): Set closed flag here so that any concurrently
- executing functions will be notified ASAP.
-
-2011-12-17 Corinna Vinschen <vinschen@redhat.com>
-
- * dcrt0.cc (_dll_crt0): Fix formatting.
-
-2011-12-17 Corinna Vinschen <vinschen@redhat.com>
-
- * wow64.cc (wow64_revert_to_original_stack): Fix comment.
- * wow64.h (wow64_respawn_process): Declare noreturn.
-
-2011-12-17 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * exceptions.cc (set_signal_mask): Remove useless debugging output.
-
- * fhandler.cc (fhandler_base::write): Ditto.
- (fhandler_base_overlapped::close): Cancel any ongoing I/O before
- closing.
- * syscalls.cc (write): Default to always reporting all writes in strace
- output via syscall_printf.
- * wait.cc (wait4): Fix debugging output. Use standard syscall leaver
- output.
-
-2011-12-16 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- Implement fhandler reference counting.
- * cygheap.h (cygheap_fdmanip::release): Make virtual.
- (cygheap_fdnew::~cygheap_fdnew): New destructor increments reference
- count when fd has been allocated.
- (cygheap_fdget::fh): New (old?) field.
- (cygheap_fdget::cygheap_fdget): Increment reference count when we've
- found an active fd. Set fh appropriately.
- (cygheap_fdget::~cygheap_fdget): Decrement reference count when
- appropriate. Delete fh if reference count goes to zero.
- (cygheap_fdget::release): New function. Do more bookkeping on release.
- * dtable.cc (dtable::release): Change from void to boolean return.
- Only delete the fhandler when its reference count is <= 0 (this should
- be a fairly unusual case). Return true if fhandler has been deleted.
- (cygwin_attach_handle_to_fd): Increment reference count when fh is
- assigned.
- (dtable::init_std_file_from_handle): Ditto.
- * dtable.h (dtable::release): Change return to boolean.
- * fhandler.cc (fhandler_base::fhandler_base): Set new isclosed flag to
- false. Set _refcnt to zero.
- (fhandler_base::close): Simplify paranoid debugging output. Set new
- isclosed() flag.
- (fhandler_base_overlapped::wait_overlapped): Use isclosed() flag to
- avoid querying the overlapped structure.
- * fhandler.h (fhandler_base::_refcnt): New field.
- (fhandler_base::refcnt): New function.
- (fhandler_base::isclosed): Implement.
- (fhandler_base::fhandler_base): Set isclosed to false.
-
- * syscalls.cc: Remove space after function before parentheses for
- several strace printfs.
- (dup): Add standard strace "leaver" code.
- (dup2): Ditto.
- (dup3): Ditto.
- (remove): Ditto.
- (getpid): Ditto.
- (getppid): Ditto.
- (lseek64): Fix strace debugging to correctly use %R.
-
- * fhandler_termios.cc (fhandler_termios::tcsetpgrp): Avoid sending
- signals to other processes if we're debugging since it can cause a
- deadlock with the calling debugger.
-
- * exceptions.cc (_cygtls::call_signal_handler): Add debugging-only
- strace output.
-
-2011-12-16 Corinna Vinschen <vinschen@redhat.com>
-
- * dcrt0.cc (child_info_fork::alloc_stack): Correctly check if the
- parent stack fits into the child stack. Align comment.
- * wow64.cc (wow64_eval_expected_main_stack): New function to fetch
- expected addresses of main thread stack from PE/COFF image header
- values.
- (wow64_test_for_64bit_parent): Fix comment. Check current stack
- against real expected main thread stack addresses.
- (wow64_revert_to_original_stack): Fix and add comments. Check memory
- against real expected main thread stack addresses. Use orignal stack
- if reserved area is >= 256K.
-
-2011-12-16 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * gendef (sigdelayed): Remember to pop all of the saved registers.
- (sigreturn): Add "leave" label.
-
-2011-12-16 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * fhandler.cc (fhandler_base_overlapped::wait_overlapped): Fix
- unresolved access of wores in successful situations.
-
-2011-12-16 Corinna Vinschen <vinschen@redhat.com>
-
- * Makefile.in (DLL_OFILES): Add wow64.o.
- * dcrt0.cc (CYGWIN_GUARD): Drop execute permission for stack, it's
- not used for stacks by the OS either.
- (child_info_fork::alloc_stack_hard_way): Ditto.
- (child_info_fork::alloc_stack): Don't alloc_stack_hard_way under WOW64
- if forked from a 64 bit parent. Set child's StackBase to parent's
- StackBase. Add comments to explain why.
- (wow64_respawn): Move to wow64.cc.
- (wow64_started_from_native64): Move to wow64.cc.
- (respawn_wow64_process): Move to wow64.cc.
- (dll_crt0_0): Drop wow64_test_stack_marker and move stack test into
- wow64_test_for_64bit_parent function. Don't return early if WOW64
- process has been started from native 64 bit process.
- (_dll_crt0): Implement moving stack for WOW64 processes started from
- native 64 bit process.
- * wow64.cc: New file.
- (wow64_has_64bit_parent): Rename from wow64_respawn.
- (wow64_test_for_64bit_parent): Rename from wow64_started_from_native64.
- Change comment.
- (wow64_revert_to_original_stack): New function.
- (wow64_respawn_process): Rename from respawn_wow64_process for symmetry.
- * wow64.h: New file.
-
-2011-12-16 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * exceptions.cc (_cygtls::call_signal_handler): Fix debugging to not go
- to console.
- * fhandler.cc (fhandler_base_overlapped::wait_overlapped): Add temporary
- kludge to work around problem of make closing an fhandle while it is
- being read.
- * gendef (sigdelayed): Don't call a function if sig has been cleared.
-
- * sigproc.h (cygwait): Simplify slightly.
-
-2011-12-14 Corinna Vinschen <vinschen@redhat.com>
-
- * autoload.cc (GetSystemWow64DirectoryW): Define.
- (GetVolumePathNamesForVolumeNameW): Define.
- * fhandler_process.cc (get_volume_path_names_for_volume_name): New
- static function to workaround missing GetVolumePathNamesForVolumeNameW
- function in Windows 2000.
- (dos_drive_mappings::dos_drive_mappings): Call
- get_volume_path_names_for_volume_name instead of
- GetVolumePathNamesForVolumeNameW.
-
-2011-12-13 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * dcrt0.cc (init_windows_system_directory): Record
- system_wow64_directory information.
- * exceptions.cc (_cygtls::inside_kernel): Modernize comment. Consider
- executing a DLL from the Wow64 directory as being "in the kernel".
- (_cygtls::call_signal_handler): For now, only deal with main_tls
- signals if main_tls is known to be executing in the cygwin DLL. To
- more closely emulate linux, consider the operation to be restartable if
- not executing in the main thread.
- * globals.cc (windows_system_directory): Remove NO_COPY.
- (windows_system_directory_length): Ditto.
- (system_wow64_directory): New variable.
- (system_wow64_directory_length): Ditto.
-
- * select.cc (cygwin_select): Don't issue a EINTR on non-main threads
- since that seems to be what Linux does. Add missing break to signal
- case/switch.
- (select_stuff::wait): Don't issue a EINTR on non-main threads since
- that seems to be what Linux does. Remove now-unneeded accommodation
- for WAIT_IO_COMPLETION. Add a comment.
- * sigproc.h (cygwait): Ditto. Don't return if signal_received noticed
- and it's not the main thread.
-
- * signal.cc (sigprocmask): Add standard syscall debug stuff.
- * thread.cc (pthread_sigmask): Ditto.
-
-2011-12-13 Corinna Vinschen <vinschen@redhat.com>
-
- * netdb.cc (open_system_file): Avoid MS-DOS path warning.
-
-2011-12-13 Corinna Vinschen <vinschen@redhat.com>
-
- * path.cc (conv_path_list): Fix a condition.
- (cygwin_conv_path): Revert WIN_A conversion to current locale codeset.
-
-2011-12-13 Corinna Vinschen <vinschen@redhat.com>
-
- * fhandler_disk_file.cc (fhandler_base::fstat_by_handle): Call
- file_get_fnoi instead of NtQueryInformationFile.
- * path.cc (file_get_fnoi): New helper function to collect a
- FILE_NETWORK_OPEN_INFORMATION block.
- (symlink_info::check): Call file_get_fnoi rather than
- NtQueryInformationFile to collect a FILE_NETWORK_OPEN_INFORMATION block.
- * path.h (file_get_fnoi): Declare.
-
-2011-12-13 Dave Korn <dave.korn.cygwin@gmail.com>
-
- * times.cc (hires_ns::resolution): Don't return less than 1.
-
-2011-12-12 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * cygthread.h (cygthread::name): Very minor formatting tweak.
-
- * exceptions.cc (_cygtls::call_signal_handler): Add paranoid debugging
- output.
-
- * sigproc.h (cygwait): Call signal handler when signal is detected and
- loop as appropriate.
- * fhandler.h (fhandler_base_overlapped::wait_return): Remove
- overlapped_signal.
- * fhandler.cc (fhandler_base_overlapped::wait_overlapped): Remove
- restartable signal accommodations in light of cygwait improvements.
- (fhandler_base_overlapped::raw_read): Remove now-obsolete signal loop
- behavior.
- (fhandler_base_overlapped::raw_write): Ditto.
- * fhandler_console.cc (fhandler_console::read): Ditto.
- * fhandler_serial.cc (fhandler_serial::raw_read): Ditto.
- (fhandler_serial::raw_write): Ditto.
- * fhandler_tty.cc (fhandler_pty_slave::read): Ditto.
-
- * ioctl.cc (ioctl): Add standard syscall introducer and leaver debug
- output.
-
-2011-12-12 Corinna Vinschen <vinschen@redhat.com>
-
- * fhandler_process.cc (dos_drive_mappings): Partially rewrite to
- handle volumes mounted into juntion points correctly.
-
-2011-12-12 Corinna Vinschen <vinschen@redhat.com>
-
- * fhandler_process.cc (dos_drive_mappings::dos_drive_mappings): Fully
- resolve symbolic links returned by QueryDosDeviceW. Explain why.
-
-2011-12-12 Corinna Vinschen <vinschen@redhat.com>
-
- * mount.cc (fs_info::update): Set has_buggy_reopen for Netapps as well.
-
-2011-12-12 Corinna Vinschen <vinschen@redhat.com>
- Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * dcrt0.cc (wow64_respawn): New static variable.
- (wow64_started_from_native64): New function to check if a WOW64
- process got started from a native 64 bit process.
- (respawn_wow64_process): New function to respawn process.
- (dll_crt0_0): When started from a native parent, check if parent
- is a 64 bit process. If so, return early.
- (_dll_crt0): Respawn WOW64 process here if required.
- * init.cc (respawn_wow64_process): Remove.
- (dll_entry): Rename wow64_test_stack_marker to test_stack_marker.
- Drop WOW64 test here.
-
-2011-12-11 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * pipe.cc (fhandler_pipe::create): Use debug_printf to print debugging
- info since this isn't a "syscall".
- (pipe_worker): New function created from _pipe().
- (_pipe): Use pipe_worker to create a pipe. Use standard syscall strace
- reporting on exit.
- (pipe): Ditto.
- (pipe2): Ditto.
-
-2011-12-10 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * select.cc (select_stuff::wait): Very minor formatting fix.
- (peek_windows): Report on HWND handle used in queries.
- * select.h: Update copyright.
- * sigproc.h (cygwait): Eliminate multi-argument variety since more
- general implementation may cause odd problems in select. Also force to
- always be inline.
-
-2011-12-10 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * sigproc.h (cygwait): Delete duplicate va_start and add matching
- va_end.
-
-2011-12-10 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * sigproc.h (cygwait): Tweak test for cancellable event to make it a
- little more clear.
-
-2011-12-09 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * exceptions.cc (ctrl_c_handler): YA in a series or reversions. Put
- back _my_tls.remove along with a comment.
- (sigpacket::process): Remove code which now causes a gdb deadlock.
- * sigproc.cc (_cygtls::signal_exit): Signal debugger with signal number
- earlier.
-
-2011-12-09 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * dllfixdbg: Work around annoying gdb warning about missing
- .gnu_debuglink.
-
-2011-12-09 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- Rename cygWFMO to cygwait throughout and use the magic of polymorphism
- to "wait for stuff".
- * fhandler.cc (fhandler_base_overlapped::wait_overlapped): Use
- simplified arg form of cygwait.
- * fhandler_console.cc (fhandler_console::read): Ditto.
- * fhandler_audio.cc (fhandler_dev_dsp::Audio_out::waitforspac): Ditto.
- (fhandler_dev_dsp::Audio_in::waitfordata): Ditto.
- * fhandler_fifo.cc (fhandler_fifo::wait): Ditto.
- * fhandler_serial.cc (fhandler_serial::raw_read): Ditto.
- (fhandler_serial::raw_write): Ditto.
- * select.cc (cygwin_select): Ditto.
- * sigproc.h (cygwait): Rename from cygWFMO. Define two argument and
- single argument forms of this function.
-
- * fhandler_tty.cc (fhandler_pty_slave::open): Use method to query if
- tty is open.
- (fhandler_pty_slave::read): Send SIGHUP when master is detected as
- closed.
- (fhandler_pty_common::close): Close input_available_event in callers
- since master may need to signal it first.
- (fhandler_pty_master::close): Lie and set input_available_event when
- closing, then close input_available_event.
- (fhandler_pty_slave::close): Close input_available_event explicitly
- here.
- * tty.h (tty::is_master_closed): Declare new method.
-
-2011-12-09 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * sigproc.cc (signal_exit): Revert reversion of 2011-12-04 change
- since, otherwise, you see hangs when the signal pipe is closed.
-
-2011-12-08 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * select.cc (cygwin_select): Fifth time is the charm.
-
-2011-12-08 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * select.cc (cygwin_select): Make sure that 0 is returned when sel.wait
- times out.
-
-2011-12-08 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * include/sys/wait.h: Add in all c++ functions.
-
-2011-12-08 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * select.cc (select_stuff::wait): Temporarily disallow APCS.
-
-2011-12-08 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * include/sys/wait.h: Ensure that C++ functions are only used when
- using C++.
-
-2011-12-08 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * select.cc (cygwin_select): Make sure that poll is called when
- appropriate.
-
-2011-12-08 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * dll_init.cc (dll_dllcrt0): Don't try to initialize dll data if we're
- dynamically loaded since fork() doesn't work in that scenario anyway.
- (dll_dllcrt0_1): Don't accommodate dynamically loaded dlls.
- * exceptions.cc (ctrl_c_handler): Don't lock the process; there's too
- much risk of deadlock.
- * sigproc.cc (_cygtls::remove_wq): Don't try to remove anything from
- the waitq if there is obviously nothing there.
- * strace.cc (strace::activate): Allow stracing dynamically loaded
- cygwin1.dll.
-
-2011-12-07 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * fhandler_termios.cc (tty_min::kill_pgrp): Don't send __SIGSETPGRP
- to ourselves since presumably we are already initialized.
-
-2011-12-07 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * select.cc (cygwin_select): Add common introducer and leaver debug
- output.
- (select_stuff::poll): Remove unneeded debugging.
-
-2011-12-07 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * exceptions.cc (ctrl_c_handler): Remove _my_tls.remove since it can
- cause deadlocks during exec and will eventually be handled anyway.
-
-2011-12-07 Corinna Vinschen <vinschen@redhat.com>
-
- * spawn.cc (child_info_spawn::worker): Add CREATE_BREAKAWAY_FROM_JOB
- to all spawned processes. Explain why.
-
-2011-12-06 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * fhandler_fifo.cc (fhandler_fifo::wait): Fix stupid typo and actually
- wait for the handle.
-
-2011-12-05 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * sigproc.cc (close_my_readsig): New function.
- (_cygtls::signal_exit): Close my_readsig via close_my_readsig(),
- avoiding communication with the signal pipe.
- (wait_sig): Close my_readsig via close_my_readsig().
-
-2011-12-05 Corinna Vinschen <vinschen@redhat.com>
-
- * mmap.cc (mlock): Replace LOCK_VM_IN_WSL with correct MAP_PROCESS.
- (munlock): Ditto.
- * ntdll.h: Rearrange to have all preprocessor definitions at the start
- of the file. Add comments to each definition block.
- (MAP_PROCESS): Rename from LOCK_VM_IN_WSL.
- (MAP_SYSTEM): Rename from LOCK_VM_IN_RAM.
-
-2011-12-04 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * sigproc.h (cygWFMO): Don't assume that cancellable event is always
- available.
- * fhandler_dsp.cc (fhandler_dev_dsp::Audio_out::waitforspace): Use
- cygWFMO instead of WaitForMultipleObjects.
- (fhandler_dev_dsp::Audio_in::waitfordata): Ditto.
- * fhandler_fifo.cc (fhandler_fifo::wait): Ditto.
- * fhandler_serial.cc (fhandler_serial::raw_read): Ditto.
- (fhandler_serial::raw_write): Ditto.
- * fhandler_tty.cc (fhandler_pty_slave::read): Ditto.
- * select.cc (cygwin_select): Ditto for degenerate case.
-
-2011-12-04 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * sigproc.h (cygWFMO): Move inside "INSIDE_CYGWIN" #ifdef.
-
-2011-12-04 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * exceptions.cc (exception::handle): Drop abbreviation for "exception"
- since I never remember what it stands for.
- (sig_handle_tty_stop): Remove obsolete call to reset_signal_arrived.
- (_cygtls::call_signal_handler): Rework to grab signal information from
- _main_tls if none is set for _my_tls. Try harder to keep thread
- locked.
- (reset_signal_arrived): Delete.
- * fhandler.cc (fhandler_base_overlapped::wait_overlapped): Use new
- cygWFMO call to wait for an event + standard cygwin stuff. Modify
- debug output to acccomodate new function.
- * fhandler_console.cc (fhandler_console::read): Replace
- WaitForMultipleObjects with cygWFMO.
- * fhandler_socket.cc (get_inet_addr): Add comment.
- * gendef (_sigdelayed): Remove call to reset_signal_arrived.
- * sigproc.cc (_cygtls::signal_exit): Don't close my_readsig here unless
- we're in the signal thread.
- (create_signal_arrived): Create signal_arrived as auto-reset so that only
- one thread is woken when a signal arrives.
- * sigproc.h (cygWFMO): New function.
- (reset_signal_arrived): Delete declaration.
-
-2011-12-03 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * mmap.cc (mlock): Add standard syscall return value debugging output.
- (munlock): Ditto.
- (posix_madvise): Ditto.
-
- * signal.cc: Remove obsolete sigcatchers stuff throughout.
- (sigaction_worker): Add function name parameter and use it to show
- standard syscall return value debugging output. Also add fault
- protection.
- (sigaction): Accommodate extra argument to sigaction_worker.
- (siginterrupt): Ditto.
- * syscalls.cc (read): Remove obsolete sigcatchers stuff.
- (readv): Ditto.
-
-2011-12-03 Corinna Vinschen <vinschen@redhat.com>
-
- * mmap.cc (mlock): Drop requesting SE_LOCK_MEMORY_PRIVILEGE. Drop
- outdated comment. Call NtLockVirtualMemory with LOCK_VM_IN_WSL flag.
- (munlock): Drop requesting SE_LOCK_MEMORY_PRIVILEGE. Call
- NtUnlockVirtualMemory with LOCK_VM_IN_WSL flag.
-
-2011-12-03 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- Throughout, remove extra space after function name from debugging
- output.
- Throughout, change syscalls to report on return values using new %R
- format option.
- * smallprint.cc (__small_vsprintf): Add parsing for %R to report on
- return values and possible errno from syscalls.
-
- * errno.cc (errmap): Add PRIVILEGE_NOT_HELD.
-
- * fhandler_tty.cc (fhandler_pty_master::setup): When creating a thread
- use shorter name to reduce debuggging output.
- * select.cc (start_thread_pipe): Ditto.
- (start_thread_serial): Ditto.
- (start_thread_socket): Ditto.
- (start_thread_mailslot): Ditto.
- * sigproc.cc (talktome): Ditto.
-
-2011-12-03 Corinna Vinschen <vinschen@redhat.com>
-
- * fhandler.cc (fhandler_base::open): Fix comment a bit more.
-
-2011-12-03 Corinna Vinschen <vinschen@redhat.com>
-
- * fhandler.cc (fhandler_base::open): Fix typos in comment.
-
-2011-12-02 Corinna Vinschen <vinschen@redhat.com>
-
- * path.cc (conv_path_list): Take cygwin_conv_path_t as third parameter.
- Allow all types of CCP conversions. Accommodate throughout.
- (cygwin_conv_path): Use current ANSI or OEM codepage for WIN_A
- conversions, depending on current file API codepage setting.
- (cygwin_conv_path_list): Allow all CCP conversion types.
- * include/sys/cygwin.h (CCP_CONVTYPE_MASK): Add to cygwin_conv_path_t
- enum for convenience.
-
-2011-11-29 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * sigproc.cc (get_proc_lock): Remove extra NULL check. Return false on
- failure.
-
-2011-11-29 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * sync.cc: Fix comment.
-
-2011-11-29 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * dll_init.cc (dll_list::reserve_space): Use %p rather than %lx to show
- reserved space.
-
-2011-11-29 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * sigproc.cc (remove_proc): Don't terminate the currently executing
- thread.
-
-2011-11-28 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * cygheap.cc (cygheap_fixup_in_child): Accommodate new HEAP_3*
- classifications for cleanup-after-fork.
- * cygheap_malloc.h (cygheap_types): Add HEAP_2_MAX, HEAP_3_FHANDLER.
- * fhandler.h: Throughout, change clone to take a cmalloc id.
- (fhandler_base::delete): Inline.
- (fhandler_base_overlapped): Mark flush_async_io as a friend.
- (fhandler_base_overlapped::asio_done): Declare new static member.
- (fhandler_base_overlapped::asio_close_counter): Ditto.
- (fhandler_base_overlapped::check_later): Declare new function.
- (fhandler_base_overlapped::flush_all_async_io): Ditto.
- * fhandler.cc (fhandler_base_overlapped::asio_done): Declare.
- (fhandler_base_overlapped::asio_close_counter): Ditto.
- (flush_async_io): Declare new thread function.
- (fhandler_base_overlapped::flush_all_async_io): Declare new function.
- (fhandler_base_overlapped::check_later): Ditto.
- (fhandler_base_overlapped::close): Call check_later to close
- nonblocking fd asynchronously. Assume that this completed
- successfully.
- * select.cc (pipe_data_available): Don't consider data to be
- "available" if fd still has unflushed I/O.
- * syscalls.cc (close_all_files): Call
- fhandler_base_overlapped::flush_all_async_io to make sure that all
- nonblocking pipe I/O has completed.
-
-2011-11-28 Corinna Vinschen <vinschen@redhat.com>
-
- * external.cc (fillout_pinfo): Store program name as POSIX path in
- ep.progname_long.
-
-2011-11-28 Corinna Vinschen <vinschen@redhat.com>
-
- * pinfo.cc (pinfo::exit): Call TerminateProcess to avoid potential
- busy loop in ntdll.dll when calling ExitProcess. Only call ExitProcess
- as a fallback.
-
-2011-11-27 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * init.cc (dll_entry): Revert previous change since it caused
- inexplicable fork problems.
-
-2011-11-26 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * init.cc (dll_entry): Don't bother calling through thread removal
- cleanup if we are exiting.
-
-2011-11-26 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * exceptions.cc (stackdump): Make global.
- (signal_exit): Move to sigproc.cc.
- * sigproc.cc (signal_exit): Move here. Declare stackdump extern. Set
- my_sendsig to indicate that signals are no longer available.
- (my_readsig): Make Static again.
- (sig_send): Interpret ERROR_BROKEN_PIPE as ESRCH. Remove special-case
- EACCESS errno setting, just setting errno generally, even for "its_me"
- case.
-
-2011-11-25 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * exceptions.cc (sigpacket::process): Move signal_exit processing
- into...
- (_cygtls::signal_exit): ...here. Close my_readsig and comment on why.
- * pinfo.cc (pinfo::exit): Move sigproc_terminate earlier. Set exiting
- flag in lock_process.
- * sigproc.cc (my_readsig): Make global.
- * sync.cc (muto::exiting_thread): Delete.
- (muto::acquire): Delete #if 0'ed code.
- * sync.h (muto::exiting_thread): Delete.
- (set_exiting_thread): Ditto.
- (lock_process::lock_process): Don't worry about setting the exiting
- thread since it had no meaning.
-
-2011-11-24 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * cygthread.cc (cygthread::name): Default name to "main" if we are early
- in the process of setting up the DLL and no name is known.
- * dcrt0.cc (initial_env): Remove CYGWIN_SLEEP stuff.
- (get_cygwin_startup_info): Activate strace here as appropriate.
- (dll_crt0_0): Move get_cygwin_startup_info as early as possible to
- avoid missing strace output.
- * fork.cc (frok::child): Move debugging statement to point where ppid
- will be set.
- * pinfo.cc (pinfo::thisproc): Remove obsolete call to strace.hello.
- Tweak debug output slightly.
- * select.cc (select_stuff::wait): Allow APCS to be triggered while
- waiting since we use them now. Report when that happens.
- * sigproc.cc (child_info::child_info): Use strace.active() rather than
- strace.attached().
- * spawn.cc (child_info_spawn::worker): Only write strace child pid
- when we know it's a cygwin process. Accommodate change to write_child
- argument list.
- * strace.cc (strace::hello): Delete. Move functionality...
- (strace::activate): ...to here.
- (mypid): Just use raw GetCurrentProcessId () if myself isn't set.
- (strace::write_childpid): Don't wait for subproc_ready. Remove arg
- which was required for it.
- * include/sys/strace.h (strace::hello): Delete.
- (strace::write_childpid): Delete first argument.
-
-2011-11-23 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * child_info.h (CURR_CHILD_INFO_MAGIC): Reset for previous changes.
-
- * dcrt0.cc (get_cygwin_startup_info): Signal readiness when stracing
- since strace::write_child relies on it. Use strace.activate to notify
- strace process, passing in arg indicating whether we're forked.
- * sigproc.cc (wait_sig): Accommodate new strace::activate argument.
- * spawn.cc (child_info_spawn::worker): Oops. Previous suspended test
- was actually correct. Revert and document.
- * strace.cc (strace::activate): Send additional flag indicating whether
- this is an attempt to activate a forked process.
- (strace::hello): Report on windows pid.
- * include/sys/strace.h (strace::strace): Make a dummy.
- (strace::activate): Modify declaration to accept an argument.
- (strace::write_childpid): Set regparm.
-
-2011-11-23 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * pipe.cc (fhandler_pipe::create): Avoid derefencing a NULL pointer.
-
- * child_info.h (child_info): Reorganize some elements so that the ones
- which are initialized in a constructor are all together.
- * sigproc.cc (child_info::child_info): Initialize values via the
- constructor rather than as C statements and make sure that flags is set
- to zero initially.
-
- * spawn.cc (child_info_spawn::worker): Use iscygwin() test for
- determining when to send strace info since it is more foolproof than
- checking the suspend state.
-
-2011-11-23 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * fhandler.h (fhandler_pipe::create): Rename from the misnamed
- "create_selectable". Change return to DWORD.
- (fhandler_pty_common::pipesize): New constant.
- * fhandler_fifo.cc (fhandler_fifo::fhandler_fifo): Reflect
- create_selectable name change.
- * miscfuncs.cc (CreatePipeOverlapped): Ditto.
- * pipe.cc (fhandler_pipe::create): Ditto.
- (fhandler_pipe::create): Rename from the misnamed "create_selectable".
- Return DWORD. Only set pipe size to default when it is passed in as
- zero.
- * fhandler_tty.cc (fhandler_pty_master::setup): Ditto. Use
- fhandler_pty_common::pipesize rather than a raw constant.
- * tty.cc (tty::not_allocated): Ditto.
-
- * sigproc.cc (sigproc_init): Use fhandler_pipe::create to create the
- signal pipe to get a more appropriate message based pipe.
-
-2011-11-21 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * sigproc.cc (remove_proc): Don't do busy loop when exiting since it
- doesn't matter.
-
-2011-11-21 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * sigproc.cc (remove_proc): Don't do busy loop when execing since
- thread could have been terminated prior to setting flag.
-
- * signal.cc (sigwaitinfo): Zero event before closing to signal other
- threads that it is no longer available.
-
-2011-11-18 Corinna Vinschen <corinna@vinschen.de>
-
- * shared.cc (get_shared_parent_dir): Use global shared_parent_dir
- instead of local dir variable and create handle not inheritable to
- avoid accumulating stray handles in child processes.
- (get_session_parent_dir): Ditto with session_parent_dir variable.
-
-2011-11-17 Corinna Vinschen <corinna@vinschen.de>
-
- * shared.cc (shared_info::create): Open global shared data section
- non-inheritable to avoid accumulating stray handles in child processes.
-
-2011-11-15 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * child_info.h (CURR_CHILD_INFO_MAGIC): Reset.
- (cygheap_exec_info::nchildren): Move from child_info_spawn.
- (cygheap_exec_info::cchildren): Ditto.
- (cygheap_exec_info::record_children): Declare new function.
- (cygheap_exec_info::reattach_children): Ditto.
- (cygheap_exec_info::alloc): Ditto.
- (child_info_spawn::nchildren): Move to cygheap_exec_info.
- (child_info_spawn::cchildren): Ditto.
- * sigproc.cc (cygheap_exec_info::alloc): Define new function.
- (child_info_spawn::cleanup): Accommodate move of children info to
- cygheap_exec_info.
- (cygheap_exec_info::record_children): Define new function.
- (cygheap_exec_info::reattach_children): Ditto.
- (child_info_spawn::record_children): Use
- cygheap_exec_info function to accomplish this task.
- (child_info_spawn::reattach_children): Ditto.
- * spawn.cc (child_info_spawn::worker): Allocate moreinfo using
- cygheap_exec_info::alloc.
-
- * dcrt0.cc (child_info_fork::alloc_stack_hard_way): Use abort for the
- error to avoid a retry.
-
-2011-11-14 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * pinfo.cc (_pinfo::dup_proc_pipe): Fatalize a warning when debugging.
-
-2011-11-13 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- Remove erroneously checked-in debugging statements.
- * cygheap.cc (cygheap_fixup_in_child): Here.
- * debug.cc (delete_handle): Here.
- * sigproc.cc (child_info_spawn::cleanup): Here.
- * spawn.cc (child_info_spawn::worker): Here.
-
-2011-11-13 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- Throughout, change "sig %d" in strace output to "signal %d" for
- consistency.
- * assert.cc (__assert_func): Output assertion string to strace too.
- * fork.cc (frok::parent): Report ASAP on forked pid in debugging output.
- * pinfo.cc (pinfo::_pinfo_release): Define new function.
- (pinfo::init): Use _pinfo_release() rather than release() to release
- shared memory stuff.
- (pinfo::wait): Shorten name of process waiting thread for more concise
- debugging.
- (pinfo::release): Use pinfo_release to release shared memory part of
- struct.
- * pinfo.h (pinfo::__pinfo_release): Declare.
-
-2011-11-10 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- Throughout use "have_execed" macro rather than "hExeced" global handle.
- Throughout rename _PROC_* to _CH_*.
- * child_info.h: Include "pinfo.h".
- (child_info_types): Rename _PROC_* -> _CH_* to avoid confusion with
- similarly named constants.
- (_PROC_*): Delete unneeded aliases.
- (PROC_*): Ditto.
- (CURR_CHILD_INFO_MAGIC): Ditto.
- (cchildren): Define using "pinfo_minimal".
- (child_info::set_saw_ctrl_c): Move to
- (child_info_spawn::set_saw_ctrl_c): Here.
- (child_info_spawn::lock): New field.
- (child_info_spawn::hExeced): Ditto.
- (child_info_spawn::ev): Ditto.
- (child_info_spawn::~child_info_spawn): Move to sigproc.cc.
- (child_info_spawn::child_info_spawn): Ditto.
- (child_info_spawn::cleanup): Declare new function.
- (child_info_spawn::set_saw_ctrl_c): Move to this class. Set flag only
- when execed and return true when we have set the flag.
- (child_info_spawn::child_info_spawn::signal_myself_exited): New function.
- (child_info_spawn::wait_for_myself): Ditto.
- (child_info_spawn::has_execed_cygwin): Ditto.
- (child_info_spawn::has_execed): Ditto. Replaces "hExeced" test.
- (child_info_spawn::operator HANDLE&): New operator.
- (child_info_spawn::worker): Define old "spawn_guts" as class member.
- (ch_spawn): Declare.
- (have_execed): Define.
- (have_execed_cygwin): Ditto.
- * cygheap.h: Update comment.
- * dcrt0.cc (get_cygwin_startup_info): Use _CH_* enums.
- (child_info_spawn::handle_spawn): Ditto.
- (dll_crt0_0): Ditto.
- (multiple_cygwin_problem): Ditto.
- * exceptions.cc (chExeced): Delete obsolete declaration.
- (ctrl_c_handler): Reference set_saw_ctrl_c via new ch_spawn global.
- * globals.cc (hExeced): Delete.
- * pinfo.cc (pinfo::thisproc): Refer to cygheap as ::cygheap for
- consistency in handle naming when -DDEBUGGING.
- (pinfo::init): Accommodate case where myself.h is known but h0 is
- passed in.
- (pinfo::pinfo): New constructor for setting up a pinfo passed in by
- previous exec'or.
- (pinfo::proc_waiter): Don't handle subprocess if we're in the process
- of exiting due to an exec of a cygwin process. Don't close
- rd_proc_pipe here. Close it when we actually are finished with the
- process. Use new ch_spawn.signal_myself_exited function to let exec
- stub know that subprocess has exited.
- (pinfo::wait): Clarify debugging output.
- (pinfo::release): Use "close_h" to close all handles to avoid races.
- (winpids::add): Assume that elements of the array do not need to be
- zeroed and are properly initialized or suffer problems on
- pinfo::release. Don't close hProcess since release does that now.
- * pinfo.h: Update comment.
- (pinfo_minimal): Move some elements from pinfo here so that
- child_info_spawn can use them.
- (pinfo): Inherit from pinfo_minimal.
- (pinfo::pinfo): Modify to accommodate new pinfo_minimal.
- (pinfo::allow_remove): New function.
- * sigproc.cc (proc_subproc): Use boolean values for true/false.
- Implement PROC_EXEC_CLEANUP.
- (proc_terminate): Set ppid = 1 since the procs list will only be
- iterated when the process has not execed. Don't do any cleanup here
- since it is now handled in pinfo::release.
- (sigproc_init): Initialize sync_proc_subproc earlier.
- (child_info::child_info): Assume that all important fields are properly
- initialized and avoid memset().
- (child_info_spawn::child_info_spawn): Specifically test for execing and
- then set up appropriate fields in the struct.
- (child_info_spawn::cleanup): Define new function.
- (child_info_spawn::record_children): Specifically test for being execed
- here. Fill in pinfo_minimal part of children array.
- (child_info_spawn::reattach_children): Use constructor to duplicate
- information for previous exec'or. Add more debugging output.
- (remove_proc): Force deletion of thread when exiting due to exec. Rely
- on pinfo::cleanup in release.
- * sigproc.h (PROC_EXEC_CLEANUP): New enum.
- (PROC_DETACHED_CHILD): Delete.
- * spawn.cc (chExeced): Delete.
- (child_info_spawn::worker): Rename from spawn_guts. Use elements of
- child_info_spawn throughout rather than ch.whatever. Use ::cygheap to
- refer to global rather than element of child_info. Use
- wait_for_myself() rather than waitpid(). Call
- child_info_spawn::cleanup on function return.
- (spawnve): Reflect movement of spawn_guts functionality into
- child_info_spawn::worker.
- * syscalls.cc (popen): Ditto.
- * winsup.h (spawn_guts): Delete declaration.
-
-2011-11-08 Corinna Vinschen <corinna@vinschen.de>
-
- * posix.sgml (std-gnu): Add ptsname_r.
-
-2011-11-08 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * fhandler.h (__ptsname): New macro.
- * dtable.cc (decode_tty): Use __ptsname to generate the slave pty name.
- * fhandler_tty.cc (fhandler_pty_master::ptsname_r): Ditto.
- * bsdlib.cc: Add needed includes for openpty() changes.
- (openpty): Use __ptsname to generate the slave pty name. Close slave
- fd when aslave == NULL.
-
-2011-11-08 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * include/cygwin/stdlib.h: Update copyright.
-
-2011-11-07 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * cygwin.din (ptsname_r): Export.
- * fhandler.cc (fhandler_base::ptsname_r): Define.
- * fhandler.h (fhandler_base::ptsname): Delete.
- (fhandler_base::ptsname_r): Declare.
- (fhandler_pty_master::ptsname_r): Declare.
- * fhandler_tty.cc (fhandler_pty_master::ptsname): Delete.
- (fhandler_pty_master::ptsname_r): New reentrant function derived from
- previous ptsname.
- * syscalls.cc (ptsname_r): Implement new function with functionality
- similar to Linux.
- (ptsname): Use ptsname_r () to fill out buf.
- * include/cygwin/stdlib.h (ptsname_r): Declare.
- * include/cygwin/version.h: Bump CYGWIN_VERSION_API_MINOR to 255 to
- reflect export of ptsname_r.
-
- * pinfo.cc (pinfo::wait): Return bool rather than int.
- * pinfo.h (info::wait): Ditto.
- (pinfo::reattach): Define !defined(_SIGPROC_H) case for consistency.
- * sigproc.cc (child_info_spawn::reattach_children): Use correct
- dwProcessId rather than pid when duplicating handle.
-
-2011-11-07 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (CHUNK_SIZE): Drop NO_COPY.
-
-2011-11-07 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (check_dir_not_empty): Check surplus directory entries
- by calling NtQueryAttributesFile. Make STATUS_DIRECTORY_NOT_EMPTY
- return value dependent on its status code. Add long comment to explain.
- (unlink_nt): Add comment to explain flaw in checking the sharing mode.
- Set status to STATUS_SUCCESS instead of 0. Add a retry loop to setting
- the delete disposition and trying to move a directory to bin to
- workaround rare cases of lingering, already deleted subdirectory
- entries. Add long comment to explain.
- (rename): Set status to STATUS_SUCCESS instead of 0.
-
-2011-11-05 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * pinfo.cc (status_exit): Recognize STATUS_ILLEGAL_INSTRUCTION.
- (child_info::proc_retry): Ditto.
-
-2011-11-05 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * pinfo.cc (status_exit): Return complete error code. Handle
- STATUS_ACCESS_VIOLATION correctly.
- (pinfo::set_exit_code): Set self->exitcode directly from status_exit.
-
-2011-11-04 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * pinfo.h (pinfo::reattach): Only set destroy to false when
- proc_subproc succeeds. Return true for success.
- * sigproc.cc (child_info_spawn::reattach_children): Try harder to clean
- up on error by detecting reattach failures too.
-
-2011-11-04 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * sigproc.cc (child_info_spawn::reattach_children): Clean up handle
- when can't open parent process or suffer handle leak.
-
-2011-11-03 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * sigproc.cc (child_info::sync): Report on exit code in strace output.
- (child_info::proc_retry): Don't consider STATUS_ACCESS_VIOLATION as a
- restartable event.
-
-2011-11-03 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * sigproc.cc (child_info_spawn::reattach_children): Avoid issuing an
- error when we can't duplicate from "parent" since it is probably ok if
- children of the previous owner of the pid disappear.
-
-2011-11-03 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (off_current): Define local in fhandler_base::raw_write.
- Drop erroneous NO_COPY, add _RDATA to make R/O.
- (off_append): Ditto.
- * globals.cc (_RDATA): Move definition from here...
- * winsup.h: ...to here.
-
-2011-10-30 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * fhandler.h (fhandler_pipe::create_selectable): Remove optional
- argument, take an options argument for CreateNamedPipe/CreateFile.
- Change handle arguments to expect pointers.
- (fhandler_fifo::fifo_state): Delete.
- (fhandler_fifo::dummy_client): Ditto.
- (fhandler_fifo::open_nonserver): Ditto.
- (fhandler_fifo::wait_state): Ditto.
- (fhandler_fifo::raw_write): Ditto.
- (fhandler_fifo::read_ready): New field.
- (fhandler_fifo::write_ready): Ditto.
- (fhandler_fifo::wait): Modify argument.
- (fhandler_fifo::fifo_name): Add a new argument.
- (fhandler_fifo::fixup_after_fork): New function.
- * fhandler_fifo.cc (fhandler_fifo::fhandler_fifo): Remove
- initialization of expunged elements. Initialize new handles to NULL.
- (fhandler_fifo::open_nonserver): Delete.
- (fnevent): New macro for creating a named event.
- (fnpipe): New macro for creating a unique named pipe name.
- (create_pipe): New macro for simplification of named pipe creation.
- (fhandler_fifo::fifo_name): Use new argument when creating a shared
- name.
- (fhandler_fifo::open): Rewrite. Use events to synchronize.
- (fhandler_fifo::wait): Rewrite to wait for new fifo events which are
- supplied as a parameter.
- (fhandler_fifo::raw_read): Rewrite to use handle mechanism to detect
- client-side disconnect.
- (fhandler_fifo::raw_write): Delete.
- (fhandler_fifo::close): Remove accommodations for expunged fields.
- Close event handles.
- (fhandler_fifo::dup): Remove accommodations for expunged fields.
- Duplicate event handles.
- (fhandler_fifo::fixup_after_fork): New function. Perform fixups on
- event handles.
- (fhandler_fifo::set_close_on_exec): Remove accommodations for expunged
- fields. Set inheritance for new handle fields.
- * miscfuncs.cc (CreatePipeOverlapped): Accommodate changes in
- fhandler_pipe::create_selectable.
- * tty.cc (tty::not_allocated): Ditto.
- * pipe.cc (fhandler_pipe::create): Ditto.
- (fhandler_pipe::create_selectable): Accept an extra open_mode argument.
- Pass arguments by reference and allow opening one end of the pipe at a
- time.
-
- * sys/strace.h (debug_only_printf): Define new macro which calls
- debug_printf only when DEBUGGING is defined.
-
-2011-10-28 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * exceptions.cc (sigpacket::process): Avoid a potential deadlock when
- exiting due to a signal.
-
-2011-10-28 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din (getgrouplist): Export.
- * grp.cc (get_groups): New static function to run the core functionality
- of initgroups and getgrouplist.
- (initgroups32): Call get_groups and just create supplementary group
- list in cygheap. Rename name of first argument to "user". Add an
- assertion to test for a NULL user name.
- (initgroups): Rename name of first argument to "user".
- (getgrouplist): New function.
- * posix.sgml (std-bsd): Add getgrouplist.
- * include/cygwin/grp.h (getgrouplist): Declare.
- * include/cygwin/version.h: Bump API minor number.
-
-2011-10-25 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * child_info.h (cchildren): New struct.
- (child_info_spawn::nchildren): Rename from nprocs.
- (child_info_spawn::children): Change type to cchildren for more
- bookkeeping possibilities.
- (child_info_spawn::child_info_spawn): Clear nchildren.
- (child_info_spawn::record_children): Declare new function.
- (child_info_spawn::reattach_children): Ditto.
- * dcrt0.cc (child_info_spawn::handle_spawn): Call reattach_children to
- gather list of processes we are potentially waiting for.
- * pinfo.h (pinfo::pinfo): Make sure that rd_proc_pipe is always cleared.
- (pinfo::reattach): New function.
- * sigproc.cc: Move pinfo.h earlier so that it can be used in sigproc.h.
- (get_proc_lock): Don't bother with a lock during DLL initialization.
- (proc_subproc): Handle PROC_REATTACH_CHILD.
- (proc_terminate): Orphan children only when we are not an execed
- process or when the pid is about to be occupied by a non-cygwin
- process.
- (child_info_spawn::record_children): Define new function.
- (child_info_spawn::reattach_children): Ditto.
- * sigproc.h (procstuff): Define PROC_REATTACH_CHILD and renumber other
- elements.
- * spawn.cc (spawn_guts): Record any to-be-waited-for subprocesses if
- about to exec a cygwin process.
-
- * sigproc.cc (sig_send): Fix harmless transposition of fifth and six
- arguments to DuplicateHandle().
- (child_info::child_info): Ditto.
-
- * globals.cc (hExeced): Make NO_COPY.
-
-2011-10-25 Corinna Vinschen <corinna@vinschen.de>
-
- * hookapi.cc (hook_or_detect_cygwin): Take additional handle
- to a file mapping as parameter. If this handle is not NULL,
- create another file mapping for the IAT.
- * spawn.cc (av::fixup): Only map the first 64K of an image and
- keep the mapping handle to use as argument to hook_or_detect_cygwin.
- * winsup.h (hook_or_detect_cygwin): Add mapping handle as default
- parameter in declaration.
-
-2011-10-24 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (unlink_nt): Fix a bug which overwrites the NT status
- value in case setting the delete disposition returns with
- STATUS_DIRECTORY_NOT_EMPTY.
-
-2011-10-24 Corinna Vinschen <corinna@vinschen.de>
-
- * shared.cc (open_shared): Fix memory reservation of essential shared
- memory regions. Drop delta computations since delta is always 0 in
- non-relocated case. Add a comment.
-
-2011-10-23 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * fhandler_tty.cc (fhandler_pty_slave::read): Use consistent way for
- testing ReadFile return.
- * pipe.cc (fhandler_pipe::create_selectable): Open the write side of
- the pipe in message-mode to force writing as "chunks". Explain why.
-
-2011-10-23 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * path.cc (path_conv::get_nt_native_path): Avoid dereferencing path
- when it is NULL.
-
-2011-10-21 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * dtable.cc (dtable::delete_archetype): Improve debugging output.
- (dtable::init_std_file_from_handle): Close console handle early, before
- initialization. Build up openflags for passing to open_setup, just to
- be safe.
- (last_tty_dev): New variable.
- (fh_last_tty_dev): New macro.
- (fh_alloc): Try again to keep track of previously opened tty, this time
- by just saving the device and using that to potentially open an
- archetype. Avoid setting the "/dev/tty" name if the creation of the
- fhandler failed.
- (build_fh_pc): Remove unused second argument. Reorganize how and where
- the name is set. Set last_tty_dev as appropriate. Avoid a NULL
- dereference in a debug printf.
- * dtable.h (build_fh_pc): Reflect removal of second parameter.
- * fhandler.cc (fhandler_base::reset): Use new '<<' operator to copy pc
- since it preserves any potentially previously set name.
- (fhandler_base::set_name): Ditto.
- * fhandler.h (fhandler_*::clone): Throughout use ccalloc to allocate
- new fhandler, primarily to make sure that pc field is properly zeroed.
- (fhandler_termios::last): Eliminate.
- (fhandler_termios): Remove setting of last.
- (fhandler_base::~fhandler_termios): Ditto.
- * fhandler_console.cc (fhandler_console::open): Don't make decisions
- about opening close-on-exec handles here since it makes no sense for
- archetypes.
- (fhandler_console::init): Assume that input handle has already been
- opened.
- * fhandler_termios.cc (fhandler_termios::last): Delete.
- * path.h (path_conv::eq_worker): New function. Move bulk of operator =
- here.
- (operator <<): New function.
- (operator =): Use eq_worker to perform old functionality.
-
- * child_info.h (NPROCS): Move here from sigproc.cc.
- (child_info::nprocs): New field. Not used yet.
- (child_info::children):: Ditto.
-
-2011-10-21 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::rmdir): Check invalid
- success only on Samba shares.
- * mount.cc (fs_info::update): Drop has_buggy_basic_info flag for
- NcFsd.
- * syscalls.cc (unlink_nt): Fix typo in comment.
-
-2011-10-21 Corinna Vinschen <corinna@vinschen.de>
-
- * globals.cc (ro_u_ncfsd): New R/O unicode string.
- * mount.cc (fs_info::update): Check for "NcFsd" FS. Set flags and
- change comments accordingly.
- (fs_names): Add entry for NcFsd FS.
- * mount.h (enum fs_info_type): Add ncfsd.
- (class fs_info): Add ncfsd flag and accessor methods.
- * path.h (class path_conv): Add fs_is_ncfsd method.
- * syscalls.cc (unlink_nt): Experimentally try delete-on-close on NcFsd
- in STATUS_CANNOT_DELETE case.
-
-2011-10-20 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * fhandler.h (fhandler*::copyto): Free path_conv strings first.
- * path.h (cfree_and_null): Rename and expand from cfree_maybe.
- (path_conv &operator =): Call free_strings rather than freeing strings
- directly.
-
-2011-10-20 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- Throughout change TTY_* to PTY_*, tty_* to pty_*, and ttym_* to ptmx_*.
- * devices.cc: Regenerate.
- * dtable.cc: (fh_alloc): Preserve /dev/tty name when that's what we
- opened.
- (build_fh_pc): Preserve any existing name.
- * fhandler.cc (fhandler_base::open_with_arch): Ditto.
- * fhandler_tty.cc (fhandler_pty_master::fhandler_pty_master): Force the
- name to /dev/ptmx while preserving other pty master device information.
- * path.h (cfree_maybe): New macro.
- (path_conv::operator =): Free any allocated strings in target.
- (path_conv::free_strings): Delete unused function.
-
- * sigproc.cc (proc_terminate): Remove previous accommodation for execed
- processes since it didn't have the desired effect. Change comment to a
- FIXME.
-
- * spawn.cc (chExeced): Mark NO_COPY.
- (exe_suffixes): Ditto.
-
-2011-10-20 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (try_to_bin): Improve debug output.
- (check_dir_not_empty): Take additional path_conv argument. Improve
- debug output. Change syscall_printf to debug_printf.
- (unlink_nt): Improve debug output. Change syscall_printf to
- debug_printf.
- (unlink): Change syscall_printf to debug_printf.
-
- * cygthread.h: Fix copyright dates.
-
-2011-10-18 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc: Extend two comments. Mention the name RtlpCurDirRef
- for reference.
-
-2011-10-17 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * dcrt0.cc (dll_crt0_1): Copy argv before passing to main().
-
-2011-10-17 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * sigproc.cc (proc_terminate): Avoid setting ppid to 1 if we're execing.
-
-2011-10-15 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * cygerrno.h (__set_errno): Modify debugging output to make searching
- strace logs easier.
-
- Throughout, change /dev/tty* to /dev/pty*.
- Throughout, add flags argument to fhandler_*::dup methods.
- * devices.in: Rename (temporarily?) /dev/ttyN to /dev/ptyN. Add
- /dev/ptymN devices for pty masters.
- * devices.cc: Regenerate.
- * devices.h (MAX_CONSOLES): Set to max number supported by devices.in.
- (fh_devices::FH_PTMX): Rename from FH_PTYM.
- (device::operator int): Return by reference.
- * dtable.cc (fh_alloc): Take pc as an argument rather than just the
- device. This makes debugging easier since more information is
- available. Actually implement handling for already-allocated pty
- master devices. Make different decisions when generating fhandler for
- not-opened devices. Add kludge to deal with opening /dev/tty.
- (cnew_no_ctor): New macro.
- (build_fh_pc): Make debugging output more verbose. Use new clone()
- fhandler interface to duplicate archetypes. Reset last term opened.
- (dtable::dup_worker): Use Use new clone() fhandler interface to
- duplicate archetypes. Pass flags to child dup handler.
- (dtable::dup3): Set O_NOCTTY flag if newfd is not stdin/stdout/stderr.
- * fhandler.cc (fhandler_base::reset): Rename from operator =() and
- reduce functionality and sense of copy direction.
- (fhandler_base::open_with_arch): Use published interface to query
- io_handle(). Use new copyto() fhandler method to copy from/to found
- archetype.
- * fhandler.h: Throughout, delete size(), add copyout, clone, and
- fhandler_* (void *) methods.
- (fhandler_base::reset): Rename from operator =().
- (fhandler_termios::is_dev_tty): Delete.
- (fhandler_termios): change "protected" region to "private".
- (fhandler_termios::is_dev_tty): Delete.
- (fhandler_termios): Rearrange protected/public.
- (fhandler_termios::fhandler_termios): Remember last fhandler_termios
- "opened".
- (fhandler_termios::~fhandler_termios): Forget last fhandler_termios
- opened.
- (ioctl): Rename from ioctl_termios. Take a void * argument. Reflect
- argument change in pinfo::set_ctty.
- (fhandler_console::dup): Declare new function. Set ctty here if
- appropriate.
- (fhandler_pty_master::from_master): Privatize.
- (fhandler_pty_master::to_master): Ditto.
- (fhandler_pty_master::dwProcessId): Ditto.
- (fhandler_pty_master::fhandler_pty_master): Add an `int' argument.
- (fhandler_pty_master::open_setup): Declare new function.
- (fhandler_pty_master::~fhandler_pty_master): Declare new method.
- (fhandler_nodevice): Remove commented out function declaration.
- * fhandler_console.cc: Use get_ttyp() instead of tc() throughout.
- (fhandler_console::dup): Define new function to set controlling ctty on
- dup, as appropriate.
- (fhandler_console::ioctl): Reflect ioctl_termios name change.
- (fhandler_console::setup): Rename from get_tty_stuff.
- (fhandler_console::open_setup): Reflect argument change in
- pinfo::set_ctty.
- (fhandler_console::fhandler_console): Set _tc here.
- * fhandler_termios.cc (handler_termios::ioctl): Rename. Take a void *
- arg like other ioctl functions.
- * fhandler_tty.cc (fhandler_pty_slave::dup): Call myself->set_ctty to
- potentially reset the controlling terminal.
- (fhandler_pty_slave::ioctl): Reflect name/arg change for ioctl_termios.
- (fhandler_pty_slave::fhandler_pty_slave): Take a "unit" argument. Call
- setup() here so that we will know the unit number of this fhandler as
- soon as possible. Set the unit as appropriate.
- (handler_pty_master::open): Move most stuff to constructor and
- open_setup.
- (handler_pty_slave::open_setup): Reflect argument change in
- pinfo::set_ctty.
- (handler_pty_master::open_setup): Define new function.
- (fhandler_pty_master::cleanup): Clear handles as a flag that the
- destructor does not have to do "close" operations.
- (fhandler_pty_master::close): Ditto.
- (fhandler_pty_master::~fhandler_pty_master): Define new method.
- (fhandler_pty_master::ioctl): Reflect name/arg change for
- ioctl_termios.
- (fhandler_pty_master::setup): Allocate tty here. Rely on handles being
- returned from allocated test rather than opening them here. Avoid
- setting _need_nl here since it is already zeroed in the constructor.
- Set up device information with DEV_TTYM_MAJOR.
- * path.h (path_conv &operator =): Take a const argument.
- (path_conv::dup): Ditto.
- (pathconv_arg::PC_OPEN): New enum.
- (pathconv_arg::PC_CTTY): Ditto.
- (path_types::PATH_CTTY): Ditto.
- (path_types::PATH_OPEN): Ditto.
- (path_conv::isopen): New method.
- (path_conv::isctty_capable): Ditto.
- * path.cc (path_conv::check): Set PATH_OPEN and PATH_CTTY as
- appropriate.
- * pipe.cc (fhandler_pipe::open): Use copyto to copy pipe handle.
- * syscall.cc (open): Reinstate fd > 2 check to disallow resetting ctty
- on non-std* handles.
- * tty.cc (tty_list::allocate): Pass out handles for allocated tty. use
- `not_allocated' to find unallocated ttys. Avoid keeping the lock since
- the allocation of the tty should be sufficient to prevent multiple
- access.
- (tty::not_allocated): Clarify comment. Rename. Return handles when an
- unused tty is found. Simply test for existing tty.
- (tty::exists): Rewrite to use `not_allocated'.
- * tty.h (NTTYS): Reset down to actual number supported by devices.in.
- (tty::not_allocated): Declare new function.
- (tty_list::allocate): Pass out read/write tty handles. Zero them when
- not found.
- * fhandler_proc.cc: Reflect name change from FH_PTYM -> FH_PTMX.
- * pinfo.h (pinfo::set_ctty): Reduce/reorder arguments passed in.
- * pinfo.cc (pinfo::set_ctty): Ditto. Just use tc() built into the
- passed-in fhandler_termios pointer. Return true if ctty is assigned.
- * syscalls.cc (open): Call build_fh_pc with PC_OPEN flag. Set PC_CTTY
- if appropriate.
- (stat_worker): Remove is_dev_tty () stuff.
-
-2011-10-15 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_process.cc (dos_drive_mappings::fixup_if_match): Convert
- native NT network paths into DOS UNC paths.
-
-2011-10-15 Corinna Vinschen <corinna@vinschen.de>
-
- * sec_auth.cc (get_token_group_sidlist): Add CONSOLE LOGON SID on
- systems supporting it. Never add SERVICE SID but keep code in for
- future reference. Explain why.
- (get_priv_list): Add cygpsid pointer parameter. Point it to the
- mandatory integrity SID which matches account and privileges.
- (create_token): Fetch mandatory integrity SID from call to
- get_priv_list.
- (lsaauth): Call get_priv_list with additional NULL pointer. Change
- comment accordingly.
- * sec_helper.cc (well_known_console_logon_sid): New static SID.
- (cygpriv): Change to structure containing extra flag to store info
- about required integrity level.
- (privilege_luid): Accommodate changes to cygpriv. Return integrity
- level in new high_integrity parameter.
- (privilege_name): Accommodate changes to cygpriv.
- (set_privilege): Drop trailing \n from debug output.
- (set_cygwin_privileges): Don't set SE_CREATE_GLOBAL_PRIVILEGE anymore
- since it's just not needed, but keep code in for future reference.
- Change comment accordingly.
- * security.h (well_known_console_logon_sid): Declare.
- (privilege_luid): Align declaration to above change.
- * wincap.h (wincaps::has_console_logon_sid): New element.
- * wincap.cc: Implement above element throughout.
-
-2011-10-13 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (find_fast_cwd_pointer): Allow 'push crit-sect-addr' instead
- of 'mov edi, crit-sect-addr; push edi' and set rcall accordingly.
-
-2011-10-13 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (copy_cwd_str): Move up in file to be accessible from
- class fcwd_access_t.
- (class fcwd_access_t): New class to consolidate and hide the details
- of the various FAST_CWD implementations. Add implementation for
- Windows 8 Developer Preview.
- (fast_cwd_version): Make static private member of fcwd_access_t.
- (fast_cwd_ptr): Change base type to fcwd_access_t.
- (find_fast_cwd_pointer): Return fcwd_access_t**.
- (find_fast_cwd): Ditto. Rip out all FAST_CWD implementations and use
- fcwd_access_t methods instead.
- (cwdstuff::override_win32_cwd): Ditto.
-
-2011-10-12 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_console.cc (fhandler_console::cursor_set): Disable forcing
- y to the current winBottom position. Explain why.
-
-2011-10-11 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * cygwin.din: Remove some _tc* exports. Add tcgetsid().
- * dtable.cc (fh_alloc): Revert ill-advised setting of major/minor. Use
- new is_dev_tty to remember that this device was opened as /dev/tty.
- * fhandler.cc (fhandler_base::fstat): Remove leftover debugging
- statement.
- (fhandler_base::tcgetsid): New function.
- * fhandler.h ((fhandler_base::tcgetsid): Declare new function.
- (fhandler_base::is_dev_tty): Ditto.
- (fhandler_termios): Rearrange protected/public.
- (fhandler_termios::fhandler_termios): Remember last fhandler_termios
- "opened".
- (fhandler_termios::~fhandler_termios): Forget last fhandler_termios
- opened.
- (fhandler_termios::opened_as_dev_tty): Declare new field.
- (fhandler_termios::is_dev_tty): Declare new function.
- (fhandler_termios::tcgetsid): Ditto.
- (fhandler_pty_common::use_archetype): Move here from subclass.
- (fhandler_pty_slave::use_archetype): Move up.
- (fhandler_pty_master::use_archetype): Ditto.
- * fhandler_console.cc (fhandler_console::ioctl): Rename second argument
- from `buf' to `arg' for consistency. Call ioctl_termios for common
- fhandler_termios ioctl handling.
- * fhandler_tty.cc (fhandler_pty_slave::ioctl): Call ioctl_termios for
- common fhandler_termios ioctl handling.
- (fhandler_pty_master::ioctl): Ditto.
- * fhandler_termios.cc (fhandler_termios::tcgetsid): Implement new
- function.
- (fhandler_termios::ioctl_termios): Ditto. Implements TIOCSCTTY
- handling.
- * syscalls.cc (stat_worker): Set /dev/tty device info when appropriate.
- * termios.cc (tcgetpgrp): Avoid extraneous "isatty" check.
- (tcgetsid): Implement new function.
- * include/cygwin/version.h: Bump CYGWIN_VERSION_API_MINOR to 253.
- * include/sys/termios.h (TIOCSCTTY): Define.
-
-2011-10-11 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * dtable.cc (fh_alloc): Don't parse /dev/tty if ctty is < 0. Reset
- major/minor from the specific tty to those for /dev/tty.
-
-2011-10-10 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * syscalls.cc (open): Add temporary kludge to avoid assigning the
- controlling tty on open unless the open is for stdin/stdout/stderr.
- * tty.cc (tty_list::connect): Set ENXIO when can't find a tty.
-
-2011-10-10 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (fhandler_process::closedir): Declare.
- * fhandler_process.cc (fhandler_process::closedir): New function to
- avoid a SEGV in fhandler_proc::closedir.
-
-2011-10-10 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * fhandler_tty.cc (fhandler_pty_slave::open): Clarify debugging output.
- (fhandler_pty_slave::open): Change ENOENT to ENXIO when can't open a
- tty.
-
-2011-10-07 Corinna Vinschen <corinna@vinschen.de>
- Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * fhandler.h (fhandler_console::tc_getpgid): New function.
- * spawn.cc (spawn_guts): Add logic to put pure-windows processes "in
- the background" when they are started that way.
-
-2011-10-07 Corinna Vinschen <corinna@vinschen.de>
-
- * include/sys/cygwin.h (cygwin_getinfo_types): Define values
- additionally as preprocessor symbols.
-
-2011-10-06 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_termios.cc (fhandler_termios::tcsetpgrp): Send __SIGSETPGRP
- pseudo signal to process group instead of just calling
- init_console_handler.
- * sigproc.cc (wait_sig): Call init_console_handler here on __SIGSETPGRP
- signal.
- * sigproc.h (__SIGSETPGRP): Define.
-
-2011-10-06 Christian Franke <franke@computer.org>
-
- * include/cygwin/wait.h: Use new __wait_status_to_int()
- macro to access status value in W*() status checks.
- Fix status description.
- * include/sys/wait.h: Allow `int' and `union wait' as
- wait status parameter. Change __wait_status_to_int()
- macro and wait () prototypes accordingly. Add inline
- functions for C++. Remove extra `;'.
-
-2011-10-05 Corinna Vinschen <corinna@vinschen.de>
-
- * external.cc (create_winenv): Rename from sync_winenv. Take
- environment pointer as parameter and return pointer to corresponding
- win32 environment block if != NULL. Otherwise just sync as before.
- (cygwin_internal): Add CW_CVT_ENV_TO_WINENV case.
- * include/cygwin/version.h: Bump API minor number.
- * include/sys/cygwin.h (cygwin_getinfo_types): Add CW_CVT_ENV_TO_WINENV.
-
-2011-10-04 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (socketpair): Bind first socket to loopback only as well.
-
-2011-09-21 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * tty.cc (grantpt): Check for valid fd.
- (unlockpt): Ditto.
-
-2011-09-02 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (cygwin_getsockopt): Drop erroneous double conversion of error
- code returned by SOL_SOCKET/SO_ERROR. Fix error handling.
-
-2011-09-01 Corinna Vinschen <corinna@vinschen.de>
-
- * lc_msg.h: Regenerate.
-
-2011-09-01 Corinna Vinschen <corinna@vinschen.de>
-
- * dlfcn.cc (gfpod_helper): Helper function to search DLL using
- a given DLL name. Change default search path to allow /usr/bin.
- (get_full_path_of_dll): Find DLLs even if the caller used a ".so"
- suffix or a "lib" prefix for the DLL.
-
-2011-08-31 Corinna Vinschen <corinna@vinschen.de>
-
- * flock.cc (inode_t::unlock_and_remove_if_unused): Rename from
- unlock_and_remove.
-
-2011-08-29 Corinna Vinschen <corinna@vinschen.de>
-
- * flock.cc (LOCK_OBJ_NAME_LEN): Change to accommodate extra lf_ver
- field.
- (class lockf_t): Add lf_ver field.
- (lockf_t::lockf_t): Initialize lf_ver to 0.
- (class inode_t): Change i_wait to i_cnt. Change comment to explain
- change in usage.
- (inode_t:use): Rename from wait. Make private.
- (inode_t::unuse): Rename from unwait. Make private.
- (inode_t::inuse): Rename from waiting. Make private.
- (inode_t::notused): New public method to set use count to 0.
- (inode_t::unlock_and_remove): New method to unlock node and to delete
- it if it's unused in current process.
- (fhandler_base::del_my_locks): Drop global list lock. Drop variable
- no_locks_left. Simpify unlocking and removing node by just calling
- unlock_and_remove.
- (fixup_lockf_after_exec): Call notused method for each node.
- (inode_t::get): Call use method. Lock node only if outside of list
- lock.
- (inode_t::get_all_locks_list): Accommodate additional lf_ver field
- when creating lockf_t structure from object name.
- (lockf_t::create_lock_obj_attr): Accommodate additional lf_ver field
- when creating object name from lockf_t structure. Handle
- STATUS_OBJECT_NAME_COLLISION gracefully in F_POSIX case as well.
- Change comment accordingly. Increment lf_ver field rather than high
- byte of lf_wid field. Simplify comment.
- (fhandler_disk_file::lock): Always call unlock_and_remove rather than
- just UNLOCK on node.
- (lf_setlock): Move ret definition where it's used. Drop unneeded
- tests for obj being not NULL. Only check for deadlock condition if the
- lock we're trying to establish is a POSIX lock. Revamp object
- collecting and wait code to cover all cases. Don't return with EDEADLK
- if blocking process can't be opened for synchronization in F_POSIX case,
- rather just wait like in F_FLOCK case. Change system_printf to
- debug_printf in that case. Only run WaitForMultipleObjects with high
- priority. Close obj and process handles prior to locking node.
-
-2011-08-27 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::open): Fix typo in comment.
- (fhandler_base::close): Move call to del_my_locks from here...
- * fhandler_disk_file.cc (fhandler_disk_file::open): ...to here.
- * flock.cc (struct lockfattr_t): New type.
- (lockf_t::close_lock_obj): New method, use throughout.
- (lockf_t::create_lock_obj_attr): New method.
- (lockf_t::create_lock_obj): Use create_lock_obj_attr method. Handle
- STATUS_OBJECT_NAME_COLLISION in F_FLOCK case gracefully. Add lengthy
- comments to explain why and how.
- (lockf_t::open_lock_obj): Use create_lock_obj_attr method.
- (lockf_t::del_lock_obj): Call NtSetEvent rather than SetEvent for
- symmetry.
- (fhandler_disk_file::lock): Define n only where it's used. Call
- need_fork_fixup only if call was successful. Handle EINTR and
- ECANCELED return values from lf_setlock.
- (lf_setlock): Drop WAIT_UNLOCKED and WAIT_PROC_EXITED. Don't wait
- for event object handle count to become <= 1 in F_LOCK case.
- Simplify WFMO return value handling. Don't handle signal and cancel
- events here; just return with appropriate error code instead.
- (lf_getblock): Ignore locks for which the handle can't be opened.
- Use IsEventSignalled.
- * ntdll.h (STATUS_INVALID_INFO_CLASS): Undef if defined elsewhere to
- make sure the definition is casted to NTSTATUS.
- (STATUS_INVALID_HANDLE): Define and ditto.
- (STATUS_OBJECT_NAME_COLLISION): Define.
- (NtSetEvent): Declare.
-
-2011-08-25 Rafal Zwierz <rzwierz@googlemail.com>
-
- * cygthread.cc (cygthread::simplestub): Notify that the thread has
- detached also in freerange thread case.
-
-2011-08-25 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::open): Never open files with
- FILE_OVERWITE/FILE_OVERWRITE_IF. Set file size to 0 explicitely if
- regular, existing file has been opened for writing with O_TRUNC flag
- set. Explain why.
-
-2011-08-24 Corinna Vinschen <corinna@vinschen.de>
-
- * thread.cc (pthread::pthread): Drop setting parent_tls. Call
- sigprocmask to copy parent thread signal mask into new parent_sigmask
- member.
- (pthread::thread_init_wrapper): Copy _my_tls.sigmask from new
- parent_sigmask member.
- * thread.h (class pthread): Drop parent_tls. Add parent_sigmask.
-
-2011-08-24 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * thread.cc (pthread::exit): Create dummy tls structure to hold
- _main_tls contents if we've asked _main_tls to exit.
-
-2011-08-23 Corinna Vinschen <corinna@vinschen.de>
-
- * poll.cc (poll): Don't return prematurely if invalid fds have been
- encountered. Enforce timeout set to 0 in case of invalid fds. Take
- number of invalid fds into account when returning.
-
-2011-08-23 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::send_internal): Fix setting
- nosignal flag. Convert ECONNABORTED on connection-oriented socket
- to EPIPE, too.
-
-2011-08-21 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * dtable.cc (conv_start_chars): Remove unneeded section attribute.
-
-2011-08-20 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * include/paths.h (_PATH_MAILDIR): Define.
- (_PATH_SHELLS): Define.
-
-2011-08-20 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_process.cc (format_process_maps): Define page protection
- shortcuts RO, X, and WC. Use in creating access flag string. Don't
- set type flag to 's' for copy-on-write pages, as on Linux.
-
-2011-08-19 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * devices.h (fh_devices): Define DEV_MISC_MAJOR, DEV_MEM_MAJOR,
- DEV_SOUND_MAJOR. Use throughout.
- * fhandler_proc.cc (proc_tab): Add /proc/devices and /proc/misc
- virtual files.
- (format_proc_devices): New function.
- (format_proc_misc): New function.
-
-2011-08-19 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * dtable.cc: Mark some const variables as static.
- * environ.cc (conv_start_chars): Move to shared cygwin region and
- initialize at compile time.
- (match_first_char): New generic function for querying conv_start_chars.
- (posify_maybe): Rename from posify.
- (environ_init): Remove conv_envvars initialization. Don't check
- conv_start_chars, just allow posify_maybe to make the decision.
- * fhandler_console.cc (__vt100_conv): Fix formatting. Mark as const.
-
-2011-08-19 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_console.cc (fhandler_console::read): Recognize backspace key
- using the device independent key code, rather than the device dependent
- scan code.
-
-2011-08-18 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * dcrt0.cc (dll_crt0_0): Remove unneeded __stdcall decoration.
- * init.cc: Reflect change to dll_crt0_0 in declaration.
-
-2011-08-18 Corinna Vinschen <corinna@vinschen.de>
-
- * dtable.cc (dtable::get_debugger_info): Add missing braces.
- (dtable::stdio_init): Fix incorrect negation of not_open(2) condition.
-
-2011-08-16 Pierre Humblet <Pierre.Humblet@ieee.org>
-
- * net.cc (gethostby_helper): Remove DEBUGGING code from and
- streamline the second pass.
-
-2011-08-16 Corinna Vinschen <corinna@vinschen.de>
-
- * dlfcn.cc (dlopen): Reimplement RTLD_NODELETE for Windows 2000 using
- internal datastructures. Explain the code.
- * ntdll.h (struct _LDR_DATA_TABLE_ENTRY): Define.
- (struct _PEB_LDR_DATA): Define.
- (struct _PEB): Change PVOID LoaderData to PPEB_LDR_DATA Ldr.
-
- * fhandler_process.cc (format_process_maps): Call NtQueryVirtualMemory
- with valid return length pointer. Explain why.
-
-2011-08-16 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
-
-2011-08-16 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (GetModuleHandleExW): Define.
- * dlfcn.cc: Throughout mark exported symbols as extern "C".
- (dlopen): Unignore flags argument. Define ret to NULL. Fix typo in
- comment. Support Glibc flags RTLD_NOLOAD and RTLD_NODELETE.
- * include/dlfcn.h: Clean up comments.
- (RTLD_NODELETE): Define.
- (RTLD_NOLOAD): Define.
- (RTLD_DEEPBIND): Define.
-
-2011-08-15 Corinna Vinschen <corinna@vinschen.de>
-
- * pipe.cc (pipe): Just call _pipe with O_BINARY mode. Move code to
- generate normalized pathnames from here...
- (_pipe): ...to here.
-
-2011-08-13 Corinna Vinschen <corinna@vinschen.de>
-
- * miscfuncs.cc (CreatePipeOverlapped): New function.
- (ReadPipeOverlapped): Ditto.
- (WritePipeOverlapped): Ditto.
- * miscfuncs.h: Declare new functions.
- * pinfo.cc (commune_process): Call WritePipeOverlapped instead of
- WriteFile. Set timeout to 1 sec.
- (_pinfo::commune_request): Call ReadPipeOverlapped instead of ReadFile.
- Set timeout to 0.5 secs.
- * sigproc.cc (sig_send): Create pipe using CreatePipeOverlapped.
-
-2011-08-12 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * miscfuncs.cc (create_pipe): Delete obsolete function.
- * miscfuncs.h (create_pipe): Delete define.
-
- * pipe.c (fhandler_pipe::create_selectable): Delete obsolete comment.
-
-2011-08-12 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_proc.cc (fhandler_proc::closedir): Don't free, but delete
- instead.
-
-2011-08-12 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (fhandler_proc::opendir): Declare.
- (fhandler_proc::closedir): Declare.
- * fhandler_proc.cc (fhandler_proc::opendir): New method. Fetch list
- of active processes here once to avoid potential duplicates and store
- in dir->__handle.
- (fhandler_proc::closedir): New method. Free dir->__handle.
- (fhandler_proc::readdir): Convert pinfo into a reference to the winpids
- entry in dir->__handle.
-
-2011-08-11 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_proc.cc (fhandler_proc::get_proc_fhandler): Don't allow to
- access process info by using the Windows PID.
- * fhandler_process.cc (fhandler_process::fstat): Ditto.
- (fhandler_process::fill_filebuf): Ditto.
-
-2011-08-11 Corinna Vinschen <corinna@vinschen.de>
-
- * (winpids::add): Make sure to store always a Windows PID in
- pidlist, even if pid is a Cygwin PID.
- (winpids::enum_processes): Fetch Cygwin processes from listing of
- shared cygwin object dir in the native NT namespace. Only if winpid
- is true, fetch Windows processes using an additional call to
- NtQuerySystemInformation.
-
-2011-08-10 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_process.cc (format_process_status): Always print process name
- even for zombies.
- (get_mem_values): Fix loop fetching working set list to avoid out of
- memory conditions. Return all mem values set to 0 for zombies.
- * ntdll.h (STATUS_PROCESS_IS_TERMINATING): Define.
-
-2011-08-09 Corinna Vinschen <corinna@vinschen.de>
-
- * heap.cc (eval_initial_heap_size): New function fetching the heap
- size from the LoaderFlags field in the PE/COFF header.
- (heap_init): Call eval_initial_heap_size rather than
- cygwin_shared->heap_chunk_size to fetch the initial heap size.
- * shared.cc (shared_info::heap_chunk_size): Remove.
- * shared_info.h (class shared_info): Drop heap_chunk member.
- (CURR_SHARED_MAGIC): Update.
-
-2011-08-09 Corinna Vinschen <corinna@vinschen.de>
-
- * ntdll.h (STATUS_NOT_FOUND): Define.
- * ntea.cc (read_ea): Return correct ENOTSUP rather than EOPNOTSUPP.
- Handle STATUS_INVALID_DEVICE_REQUEST and STATUS_NOT_FOUND. Explain
- why. Convert conditional to switch statement.
- (write_ea): Return correct ENOTSUP rather than EOPNOTSUPP. Handle
- STATUS_INVALID_DEVICE_REQUEST. Convert conditional to switch statement.
-
-2011-08-07 Corinna Vinschen <corinna@vinschen.de>
-
- * resource.cc (getrlimit): Just return RLIM_INFINITY in a request for
- RLIMIT_AS.
-
-2011-08-07 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_process.cc (format_process_maps): Actually print info about
- the application heap of the printed process, not of the current process.
-
-2011-08-04 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (socketpair): Release sb0 if there's no space left for sb1.
-
-2011-08-03 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * cygwin.din (clock_nanosleep): Export.
- * posix.sgml (std-notimpl): Move clock_nanosleep from here...
- (std-susv4): ... to here.
- (std-notes): Note limitations of clock_nanosleep.
- * signal.cc (clock_nanosleep): Renamed from nanosleep, adding clock_id
- and flags arguments and changing return values throughout.
- Improve checks for illegal rqtp values. Add support for
- CLOCK_MONOTONIC and TIMER_ABSTIME.
- (nanosleep): Rewrite in terms of clock_nanosleep.
- (sleep): Ditto.
- (usleep): Ditto.
- * thread.cc: Mark clock_nanosleep in list of cancellation points.
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
-
-2011-08-03 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * dll_init.cc: Use fabort in favor of api_fatal and fork_info->abort
- where appropriate throughout.
- (fabort): Define.
- (dll_list::topsort): Don't print sorting information. Fix formatting.
- (dll_list::topsort_visit): Fix formatting.
- (dll_list::load_after_fork_impl): Perform comment fixups.
- * sigproc.cc (child_info_fork::abort): (for now?) Always print cause of
- fork failure.
- * include/sys/strace.h (strace_vprintf): Remove _STRACE_NOTALL when
- printing. We really do want to see this.
-
-2011-08-03 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * cygtls.h (struct _local_storage): Add cw_timer member.
- * cygtls.cc (_cygtls::init_thread): Initialize locals.cw_timer.
- (_cygtls::fixup_after_fork): Ditto.
- * tlsoffsets.h: Regenerate.
- * ntdll.h (enum _TIMER_INFORMATION_CLASS): Define.
- (struct _TIMER_BASIC_INFORMATION): Define.
- (NtQueryTimer): Declare function.
- * thread.h (cancelable_wait): Change timeout argument to
- PLARGE_INTEGER and provide NULL default.
- (fast_mutex::lock): Adjust accordingly.
- (pthread_cond::wait): Change timeout argument to PLARGE_INTEGER
- and default to NULL.
- * thread.cc (cancelable_wait): Change timeout argument to
- PLARGE_INTEGER. Initialize _cygtls.locals.cw_timer if needed.
- Use NT waitable timers for handling timeout. Return remaining time
- to timeout argument if timeout was relative.
- (pthread_cond::wait): Change timeout argument to PLARGE_INTEGER.
- Adjust to change in cancelable_wait.
- (pthread_mutex::lock): Adjust to change in cancelable_wait.
- (pthread_spinlock::lock): Ditto.
- (pthread::join): Ditto.
- (__pthread_cond_dowait): Change waitlength argument to PLARGE_INTEGER.
- Adjust to changes in cancelable_wait and pthread_cond::wait.
- (pthread_cond_timedwait): Adjust to change in __pthread_cond_dowait.
- (pthread_cond_wait): Ditto.
- (semaphore::_timedwait): Adjust to change in cancelable_wait.
- (semaphore::_wait): Ditto.
- * exceptions.cc (handle_sigsuspend): Ditto.
- * signal.cc (nanosleep): Ditto.
- * wait.cc (wait4): Ditto. Fix copyright dates.
- * times.cc (FACTOR, NSPERSEC): Move from here...
- * hires.h (FACTOR, NSPERSEC): ...to here.
-
-2011-08-01 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (faccessat): Fix parens in flag expression when calling
- build_fh_name.
-
- * fhandler_disk_file.cc (fhandler_disk_file::mkdir): Fix typo in
- comment.
- * fhandler_socket.cc (fhandler_socket::bind): Ditto.
- * path.cc (symlink_worker): Ditto.
-
-2011-07-31 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * dll_init.cc (dll_list::load_after_fork_impl): Add a hint to an error
- message.
-
-2011-07-31 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * sigproc.cc (pending_signals::pending): Define new function.
- (sig_dispatch_pending): Avoid calling sig_send if there are no pending
- signals.
-
-2011-07-31 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (class fhandler_dev_mem): Remove dup method declaration.
- * fhandler_clipboard.cc (fhandler_dev_clipboard::dup): Accommodate the
- fact that the entire fhandler gets copied over to the child in
- operator =.
- * fhandler_floppy.cc (fhandler_dev_floppy::dup): Ditto.
- * fhandler_raw.cc (fhandler_dev_raw::dup): Ditto.
- * fhandler_serial.cc (fhandler_serial::dup): Ditto.
- * fhandler_socket.cc (fhandler_socket::dup): Ditto.
- * fhandler_virtual.cc (fhandler_virtual::dup): Ditto.
- * fhandler_mem.cc (fhandler_dev_mem::dup): Ditto. Remove entirely.
-
-2011-07-30 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * cygthread.cc (cygthread::async_create): Define new function.
- * cygthread.h (cygthread::create): Use correct regparm.
- (cygthread::standalone): Delete from class and from all constructors.
- (cygthread::cygthread): Use three only arguments for detached threads,
- (cygthread::async_create): Declare.
- and start the thread via QueueUserAPC/async_create.
- * dcrt0.cc (dll_crt0_0): Remove handling for
- wincap.has_buggy_thread_startup.
- (dll_crt0_1): Ditto.
- * wincap.cc: Ditto throughout.
- * wincap.h: Ditto.
-
-2011-07-30 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * fhandler.h (fhandler_base_overlapped::size): Declare/define size()
- function for consistency.
- (fhandler_termios::size): Ditto.
- (fhandler_pty_common::size): Ditto.
-
-2011-07-30 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_registry.cc (fhandler_registry::dup): Duplicate value_name.
-
-2011-07-29 Corinna Vinschen <corinna@vinschen.de>
-
- Throughout change "WinSock" to "Winsock" in comments.
- * fhandler_socket.cc (fhandler_socket::sendmsg): Add missing call to
- get_inet_addr to convert AF_LOCAL to AF_INET sockets.
- * net.cc (cygwin_socket): Workaround UDP Winsock problem. Add comment
- to explain why.
- * select.cc: Include winsock2.h rather than winsock.h.
-
-2011-07-26 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (__DIR_mounts::eval_ino): Create path_conv
- with PC_KEEP_HANDLE flag.
- * path.h (path_conv::operator =): Duplicate UNICODE path as well.
- * security.cc (check_file_access): Use path_conv handle if available.
- * syscalls.cc (access): Create fhandler with PC_KEEP_HANDLE flag set.
- (euidaccess): Ditto.
- (faccessat): Ditto.
-
-2011-07-26 Corinna Vinschen <corinna@vinschen.de>
-
- * ntdll.h: Fix typo in comment.
- * path.cc: Ditto.
-
-2011-07-25 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_console.cc (fhandler_console::ioctl): Fetch console events
- using PeekConsoleInput and return only key down events in buf.
- * fhandler_tty.cc (fhandler_pty_slave::ioctl): Always return EINVAL
- if PeekNamedPipe fails.
- (fhandler_pty_master::ioctl): Ditto.
-
-2011-07-22 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_tty.cc (fhandler_pty_slave::ioctl): Drop FIONBIO case.
- Handle FIONREAD.
- (fhandler_pty_master::ioctl): Ditto. Call fhandler_base::ioctl to
- decode default condition.
- * fhandler_console.cc (fhandler_console::ioctl): Handle FIONREAD.
-
-2011-07-21 Christopher Faylor <me.cygwin2011@cgf.cx>
- Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc: Add #include for asm/socket.h for dealing with FIONREAD.
- (fhandler_base::ioctl): Special-case errno for FIONREAD.
- * fhandler_dsp.cc (fhandler_dev_dsp::ioctl): Rename parameter for
- consistency. Call fhandler_base::ioctl to decode default condition.
- * fhandler_serial.cc (fhandler_serial::ioctl): Ditto.
- * fhandler_tty.cc (fhandler_pty_slave::ioctl): Call
- fhandler_base::ioctl to decode default condition.
- * fhandler_windows.cc (fhandler_windows::ioctl): Ditto.
-
-2011-07-21 Corinna Vinschen <corinna@vinschen.de>
-
- * heap.cc (eval_start_address): Simplify test for large address
- awareness of executable, which works for 32 and 64 bit systems.
- Change comment accordingly.
-
-2011-07-21 Corinna Vinschen <corinna@vinschen.de>
-
- * heap.cc (eval_start_address): New static function to evaluate the
- best start address for the application heap.
- (heap_init): Call eval_start_address to fetch the start value for
- start_address. Move preceeding comment to eval_start_address.
-
-2011-07-21 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * cygwin.din (pthread_condattr_getclock): Export.
- (pthread_condattr_setclock): Export.
- * posix.sgml (std-notimpl): Move pthread_condattr_getclock and
- pthread_condattr_setclock from here...
- (std-susv4): ... to here.
- * sysconf.cc (sca): Set _SC_CLOCK_SELECTION to _POSIX_CLOCK_SELECTION.
- * thread.cc: (pthread_condattr::pthread_condattr): Initialize clock_id.
- (pthread_cond::pthread_cond): Initialize clock_id.
- (pthread_cond_timedwait): Use clock_gettime() instead of gettimeofday()
- in order to support all allowed clocks.
- (pthread_condattr_getclock): New function.
- (pthread_condattr_setclock): New function.
- * thread.h (class pthread_condattr): Add clock_id member.
- (class pthread_cond): Ditto.
- * include/pthread.h: Remove obsolete comment.
- (pthread_condattr_getclock): Declare.
- (pthread_condattr_setclock): Declare.
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
-
-2011-07-18 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * sysconf.cc (sca): Return -1 for _SC_THREAD_ROBUST_PRIO_INHERIT,
- _SC_THREAD_ROBUST_PRIO_PROTECT, and _SC_XOPEN_UUCP.
- (SC_MAX): Redefine accordingly.
- (csa): Return strings for _CS_POSIX_V7_THREADS_CFLAGS,
- _CS_POSIX_V7_THREADS_LDFLAGS, and _CS_V7_ENV.
- (CS_MAX): Redefine accordingly.
- * include/limits.h (LONG_BIT): Define.
- (WORD_BIT): Define.
-
-2011-07-18 Corinna Vinschen <corinna@vinschen.de>
-
- * heap.cc (heap_init): Change type of largest_found to PVOID. Start
- querying memory at 0x20000000. Use largest_found pointer when trying
- to allocate largest free memory area found.
-
-2011-07-14 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_console.cc (fhandler_console::input_tcsetattr): Revert to
- setting ENABLE_PROCESSED_INPUT depending on ISIG and IGNBRK.
- (fhandler_console::tcgetattr): Set ISIG depending on
- ENABLE_PROCESSED_INPUT as well.
-
-2011-07-13 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_serial.cc (fhandler_serial::raw_read): Handle non-blocking
- case more thoroughly.
-
-2011-07-13 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * setup_handler (setup_handler): Change break to goto out, missed in
- 2011-07-06 changes.
-
-2011-07-10 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * fhandler_tty.cc (fhandler_pty_slave::ioctl): Remove erroneous support
- for TIOCLINUX for pty. Get rid of unneeded EINVAL handling in wake of
- tty removal. Remove now-unneeded variable.
-
-2011-07-10 Corinna Vinschen <corinna@vinschen.de>
-
- * include/netdb.h (gethostbyname2): Declare.
-
-2011-07-09 Eric Blake <eblake@redhat.com>
-
- * signal.cc (handle_sigprocmask): Return error rather than setting
- errno, for pthread_sigmask.
- (sigprocmask): Adjust caller.
-
-2011-07-07 Corinna Vinschen <corinna@vinschen.de>
-
- * miscfuncs.cc (yield): Drop thread priority only once.
-
-2011-07-06 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * exceptions.cc (_cygtls::interrupt_now): Back out previous change
- since it could theoretically cause a non-CTRL-C-able program if a
- program has suffered memory corruption.
- (setup_handler): Ditto.
-
-2011-07-06 Corinna Vinschen <corinna@vinschen.de>
-
- * sched.c (sched_yield): Just call SwitchToThread because yield now
- potentially switches CPU.
-
-2011-07-06 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * exceptions.cc (_cygtls::interrupt_now): Don't check for spinning
- here.
- (setup_handler): Check for spinning here, assuming that it is
- transitory and should not affect the retry loop.
-
-2011-07-06 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * exceptions.cc (CALL_HANDLER_RETRY_INNER): Rename to reflect different
- functionality.
- (CALL_HANDLER_RETRY_OUTER): New define.
- (setup_handler): Add outer loop to signal handler to try harder to
- deliver the signal.
- * miscfuncs.cc (yield): Drop priority and use SleepEx() to force thread
- rescheduling rather than relying on SwitchToThread().
-
-2011-07-06 Corinna Vinschen <corinna@vinschen.de>
-
- * sigproc.cc (wait_sig): Fix debug output.
-
-2011-07-05 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_console.cc (fhandler_console::input_tcsetattr): Make
- ENABLE_PROCESSED_INPUT flag only depending on value of IGNBRK.
- (fhandler_console::tcgetattr): Don't set ISIG depending on
- ENABLE_PROCESSED_INPUT, set IGNBRK instead.
-
-2011-07-05 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc (get_file_sd): Fix comment.
-
-2011-07-05 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::open): Never create files with WRITE_DAC
- access. Explain why.
- * fhandler_disk_file.cc (fhandler_base::fstat_helper): Improve debug
- output.
-
-2011-07-05 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::open): Don't open file with WRITE_DAC
- access on remote filesystem. Explain why.
- * fhandler_disk_file.cc (fhandler_disk_file::mkdir): Ditto for
- directories.
- * fhandler_socket.cc (fhandler_socket::bind): Ditto for sockets.
- * path.cc (symlink_worker): Ditto for symlinks.
-
-2011-07-04 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * environ.cc (tty_is_gone): Wrap warning at 80 characters.
-
-2011-07-04 Corinna Vinschen <corinna@vinschen.de>
-
- Throughout, open console handles with sharing for reading and writing.
- * dcrt0.cc (insert_file): Open file with full sharing allowed.
- * hookapi.cc (find_first_notloaded_dll): Ditto.
- * spawn.cc (av::fixup): Ditto.
-
-2011-07-04 Corinna Vinschen <corinna@vinschen.de>
-
- * dtable.cc (dtable::init_std_file_from_handle): Change test for console
- device in call to fh->init to avoid conhost crash on W7.
-
-2011-07-04 Corinna Vinschen <corinna@vinschen.de>
-
- * environ.cc (environ_init): Reinstantiate on-the-fly CYGWIN variable
- test and call to parse_options if found.
-
-2011-07-04 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * fhandler.cc (fhandler_base::open_with_arch): Call close_on_exec last
- to avoid setting close_on_exec for archetype.
- * fhandler_tty.cc (fhandler_pty_master::setup): Protect {from,to}_pty
- handles. Use consistent naming in debug output. Use inheritable
- handles and...
- (fhandler_pty_master::fixup_after_fork): ...avoid duplicating handles
- here.
- (fhandler_pty_slave::open): Don't set close_on_exec flag here.
-
-2011-07-01 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * dtable.cc (cnew): Fix whitespace.
-
-2011-07-01 Corinna Vinschen <corinna@vinschen.de>
-
- * include/sys/param.h (NGROUPS): Redefine as NGROUPS_MAX.
- (MAXHOSTNAMELEN): Redefine with same value as MAX_HOSTNAME_LEN. Change
- comment.
- (MAXPATHLEN): Improve comment.
- (MAXSYMLINKS): Define and add comment.
-
-2011-07-01 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::open): Move NFS-specific code into the
- code block handling FH_FS stuff.
-
-2011-06-30 Ryan Johnson <ryan.johnson@cs.utoronto.ca>
-
- * dtable.cc (fh_oom): Remove.
- (fh_calloc): Remove.
- (cnew): Redefine to handle NULL returns from cmalloc.
- (build_fh_name): Accommodate new definition of cnew. Remove unneeded
- test for fh_oom.
- (fh_alloc): Ditto.
-
-2011-06-30 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_console.cc (fhandler_console::read): Add comment.
- (fhandler_console::input_tcsetattr): Don't set ENABLE_PROCESSED_INPUT
- if IGNBRK flag is set.
-
-2011-06-30 Corinna Vinschen <corinna@vinschen.de>
-
- * dtable.cc (fh_oom): New static fhandler storage.
- (fh_calloc): New static function. Add a comment to explain why this
- is needed.
- (cnew): Call fh_calloc as placement argument.
- (build_fh_name): Check return code from cnew against address of
- fh_oom to test for out of memory condition.
- (fh_alloc): Ditto.
- (build_fh_pc): Avoid a crash due to useing a NULL fhandler.
- * pipe.cc (fhandler_pipe::create): Check if build_fh_dev returned a
- valid pointer before using it.
-
-2011-06-28 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_process.cc (heap_info::fill_if_match): Rename info to
- note that this heap is a Windows heap.
- (format_process_maps): Print info about application heap.
-
-2011-06-24 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_console.cc (fhandler_console::read): Don't generate ^@ on
- Ctrl+Alt+Space.
-
-2011-06-22 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_tty.cc (fhandler_pty_master::setup): Create pty pipes
- non-inheritable.
-
-2011-06-22 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_tty.cc (fhandler_pty_master::setup): Fix crash in debug
- output.
-
-2011-06-18 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (normalize_win32_path): Skip all slashes after recognizing
- a ".." path component. Add comment.
-
-2011-06-17 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::open): Drop local create_options variable.
- Use options member instead.
- * fhandler.h (class fhandler_base): Change type of access member to
- ACCESS_MASK. Change get_access and set_access methods accordingly.
- Add options member. Add get_options and set_options methods.
- (class fhandler_disk_file): Add prw_handle.
- (fhandler_disk_file::prw_open): Declare.
- (fhandler_disk_file::close): Declare.
- (fhandler_disk_file::dup): Declare.
- (fhandler_disk_file::fixup_after_fork): Declare.
- * fhandler_disk_file.cc (fhandler_disk_file::fhandler_disk_file):
- Initialize prw_handle to NULL.
- (fhandler_disk_file::close): Close prw_handle.
- (fhandler_disk_file::dup): New method.
- (fhandler_disk_file::fixup_after_fork): Set prw_handle to NULL since
- prw_handle is not inherited.
- (fhandler_disk_file::prw_open): New method. Add long comment to
- explain current behaviour.
- (fhandler_disk_file::pread): Revert previous change. Change to use
- prw_handle if possible.
- (fhandler_disk_file::pwrite): Change to use prw_handle if possible.
-
-2011-06-17 Corinna Vinschen <corinna@vinschen.de>
-
- * dcrt0.cc (dll_crt0_1): Call strace.dll_info after call to pinfo_init.
- * strace.cc (strace::hello): Drop printing DLL information here since
- application info is not always available at this point.
- (strace::dll_info): New method to print DLL info.
- * include/sys/strace.h (strace::dll_info): Declare.
-
-2011-06-17 Corinna Vinschen <corinna@vinschen.de>
-
- * dtable.cc (handle_to_fn): Accommodate name change of pty named pipes,
- otherwise ptys are not recognized.
-
-2011-06-16 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * fhandler_console.cc (fhandler_console::set_unit): Set
- pc.file_attributes() to reflect existence.
- * fhandler.h (fhandler_pty_common::fhandler_pty_common): Ditto.
- * pinfo.cc (_pinfo::set_ctty): Output device numbers in hex.
-
-2011-06-15 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * errno.cc (EIO): Lowercase "o" representative string.
-
-2011-06-14 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * cygheap.h (init_cygheap::ctty_on_hold): Remove conditionalized
- variable.
- * dcrt0.cc (do_exit): Remove code which handled CYGWIN=tty style ttys.
- * devices.in: Remove "/dev/ttym".
- * dtable.cc: Rename tty to pty where appropriate throughout.
- (dtable::stdio_init): Use new t->is_console rather than using
- now-deleted hwnd element in tty structure.
- (dtable::init_std_file_from_handle): Remove code which handled
- CYGWIN=tty style ttys.
- (fh_alloc): Ditto.
- * fhandler.h: Rename tty to pty where appropriate.
- (fhandler_pty_common): Delete output_done_event, ioctl_request_event,
- ioctl_done_event.
- (fhandler_pty_master::setup): Delete argument.
- (fhandler_tty_master): Delete.
- (fhandler_union): Delete __tty_master.
- * fhandler_console.cc (use_tty): Delete.
- (fhandler_console::get_tty_stuff): Set is_console to true rather than
- calling sethwnd.
- (fhandler_console::send_winch_maybe): Remove CYGWIN=tty considerations.
- (fhandler_console::input_tcsetattr): Ditto.
- * fhandler_termios.cc (fhandler_termios::tcsetpgrp): Use new
- t->is_console rather than using now-deleted hwnd element in tty
- structure.
- * fhandler_tty.cc: Rename tty to pty where appropriate throughout.
- (tty_master): Delete.
- (process_input): Ditto.
- (process_output): Ditto.
- (process_ioctl): Ditto.
- (fhandler_tty_master::*): Ditto.
- (fhandler_pty_master::process_slave_output): Remove CYGWIN=tty
- considerations.
- (fhandler_pty_slave::open): Ditto for *_done_event.
- (fhandler_pty_slave::write): Ditto.
- (fhandler_pty_slave::ioctl): Ditto.
- (fhandler_pty_slave::fch_open_handles): Ditto.
- (fhandler_pty_slave::fch_set_sd): Ditto.
- (fhandler_pty_slave::fch_close_handles): Ditto.
- (fhandler_pty_common::close): Ditto.
- (fhandler_pty_master::setup): Ditto. Remove now-unneeded ispty
- parameter.
- (fhandler_pty_master::open): Reflect argument removal for
- tty::allocate.
- * select.cc: Rename tty to pty where appropriate throughout.
- * sigproc.cc (proc_subproc): Remove CYGWIN=tty considerations.
- * tty.cc (ttyslot): Accommodate CYGWIN=tty removal.
- (tty_list::init_session): Ditto.
- (tty_list::attach): Ditto.
- (tty::create_master): Delete.
- (tty_list::terminate): Ditto.
- (tty_list::allocate): Delete "with_console" parameter. Remove
- CYGWIN=tty considerations.
- (tty::init): Set is_console = false. Use 'false' for was_opened since
- it is a boolean.
- * tty.h (*_{DONE,REQUEST}_EVENT): Delete.
- (tty_min::is_console): Declare new field which replaces hwnd.
- (tty_min::gethwnd): Delete.
- (tty_min::sethwnd): Ditto.
- (tty_list::allocate): Delete parameter.
- (tty_list::terminate): Delete declaration.
- * include/sys/cygwin.h (PID_USETTY): Redefine to PID_UNUSED1 and change
- comment to reflect its availability.
-
-2011-06-13 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * fhandler_tty_slave.cc (fhandler_tty_slave::fhandler_tty_slave):
- Revert previous change since unit 0 is perfectly valid.
-
-2011-06-12 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- Rename FH_BAD to FH_NADA throughout.
- * devices.h (FH_ERROR): New value.
- (iscons_dev): Extend to detect all the console device types.
- * devices.in: Set aside storage for FH_ERROR.
- * dtable.cc (dtable::init_std_file_from_handle): Use iscons_dev to
- detect when device is a console.
- (fh_alloc): Pass device to console constructor.
- (build_fh_pc): Short circuit when we detect that the constructor saw an
- error.
- * fhandler.h (fhandler_console::fhandler_console): Accept fh_devices
- parameter.
- (get_tty_stuff): Change to void.
- * fhandler_console (fhandler_console::set_unit): Set device to FH_ERROR
- on attempt to access anything other than the current console.
- (fhandler_console::get_tty_stuff): Change to void return.
- (fhandler_console::open): Return EPERM on FH_ERROR device type.
- (fhandler_console::fhandler_console): Set the device type appropriately
- before calling get_tty_stuff and rely on that function to reset it if
- necessary.
-
-2011-06-10 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * environ.cc (create_upcaseenv): Delete.
- (ucenv): Don't honor create_upcaseenv.
- (environ_init): Remove early retrieval of CYGWIN environment variable.
- Change comment to reflect new behavior.
-
-2011-06-09 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * child_info.h (CURR_CHILD_INFO_MAGIC): Reset.
- (child_info::old_title): Delete.
- (child_info::~child_info_spawn): Remove recording of old_title.
- * dcrt0.cc (title_buf): Delete.
- (child_info_spawn::handle_spawn): Remove recording of old_title.
- (dll_crt0_1): Get rid of all title handling.
- (do_exit): Ditto.
- * environ.cc (known): Delete strip_title and title.
- * fhandler_console.cc (fhandler_console::write): Remove recording of
- old_title.
- * globals.cc (exit_states): Remove ES_TITLE.
- (display_title): Delete.
- (strip_title_path): Delete.
- (old_title): Delete.
- * spawn.cc (spawn_guts): Remove old_title accommodation.
-
-2011-06-09 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * environ.cc (envcache): Delete.
- (known): Remove envcache.
- (getwinenv): Don't honor envcache setting.
-
-2011-06-09 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * environ.c: Move code earlier to allow:
- (_addenv): Call parse_options() when CYGWIN environment variable is
- being changed.
- (parse_options): Change parameter to 'const'.
-
-2011-06-08 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * environ.cc (tty_is_gone): Add missing space to message.
-
-2011-06-08 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * environ.cc (settings::set_process_state): Delete.
- (tty_is_gone): New function.
- (known): Change "tty" to call tty_is_gone(). Remove unneeded '&' from
- beginning of function address.
- (parse_options): Remove set_process_state handling.
- * shared_info.h (CURR_USER_MAGIC): Reset.
- (user_info::warned_notty): New member.
-
-2011-06-07 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * fhandler_console.cc (fhandler_console::open_shared_console):
- Semi-revert to using fixed location for console stuff.
- * shared.cc (offsets): Ditto. Comment.
- * shared_info (shared_locations): Re-add SH_SHARED_CONSOLE.
-
-2011-06-05 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * fhandler_disk_file.cc (fhandler_disk_file::pread): Reset windows file
- position pointer back to previous location after successful read.
-
-2011-06-04 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * fhandler_console.cc (fhandler_console::open_shared_console): Don't
- zero handle to open_shared since it is supposed to be an input.
- (enum_windows): Set handle input to open_shared to NULL since it does
- not represent any previously opened shared region.
- * shared.cc (open_shared): Tweak debugging output.
-
-2011-06-03 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * ntdll.h (FILE_PIPE_*): Define constants.
- * select.cc (pipe_data_available): Detect closing state.
-
-2011-06-03 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * pinfo.cc (_pinfo::set_ctty): Don't reset myself->{pgid,sid} if
- terminal has no pgid or sid settings.
-
-2011-06-03 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * fhandler.cc (fhandler_base_overlapped::wait_overlapped): Only raise
- SIGPIPE when writing.
-
- * fhandler.h: Include "tty.h".
- (fhandler_termios::_tc): Rename from tc.
- (fhandler_termios::tc): New method.
- (fhandler_termios::tcinit): Remove an argument.
- (fhandler_termios::get_ttyp): Use method to retrieve value.
- (fhandler_console::console_state): Move here.
- (fhandler_console::dev_state): Delete.
- (fhandler_console::shared_console_info): Define.
- (fhandler_console::open_shared_console): Move this function under
- fhandler_console umbrella.
- (fhandler_console::tc): Define. Return static value.
- (fhandler_console::focus_aware): Accommodate deletion of dev_state.
- (fhandler_console): Add tty_list::get_cttyp as a friend.
- * fhandler_console.cc (dev_state): Redefine as a pointer within
- shared_console_info and change dev-> to dev. throughout.
- (fhandler_console::shared_console_info): Move into fhandler_console.
- (fhandler_console::open_shared_console): Move into fhandler_console
- change argument to simple bool.
- (enum_windows): Accommodate changes to console_state and
- open_shared_console.
- (console_unit::console_unit): Ditto.
- (fhandler_console::get_tty_stuff): Accommodate change to dev_state.
- (tty_list::get_cttyp): Accommodate change to
- handler_console::shared_console_info.
- (fhandler_console::read): Accommodate change from tc to tc ().
- (fhandler_console::set_input_state): Ditto.
- (fhandler_console::open): Accommodate tcinit argument change and change
- from tc to tc().
- (fhandler_console::input_tcsetattr): Accomodate change from tc to tc().
- (fhandler_console::input_tcsetattr): Ditto.
- (fhandler_console::write_normal): Ditto.
- (fhandler_console::init): Ditto.
- (fhandler_console::igncr_enabled): Ditto.
- * fhandler_termios.cc (fhandler_termios::tcinit): Remove first argument.
- Expect tc() to have been set up first. Use tc() rather than tc.
- (fhandler_termios::tcsetpgrp): Accomodate change from tc to tc().
- (fhandler_termios::tcgetpgrp): Ditto.
- (fhandler_termios::bg_check): Ditto.
- (fhandler_termios::line_edit: Ditto.
- (fhandler_tty_master::set_winsize): Ditto.
- (fhandler_tty_slave::open): Ditto.
- (fhandler_tty_slave::init): Ditto.
- (fhandler_pty_master::write): Ditto.
- (fhandler_pty_master::setup): Ditto. Accommodate change in arguments
- to tcinit.
- (fhandler_tty_slave::fch_open_handles): Set _tc directly.
- (tty_min::is_orphaned_process_group): Don't assume that parent pid
- exists.
- * pinfo.cc (_pinfo::set_ctty): Reset myself->{pgid,sid} here if we were
- started by a non-Cygwin process but the tty exists.
- * shared_info.h (console_state): Delete from here.
- * tty.h: Make multiple inclusion safe.
-
-2011-05-31 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * exceptions.cc (ctrl_c_handler): Simplify test for no parent tty.
- * fhandler_console.cc (fhandler_console::get_tty_stuff): Return NULL if
- ctty is not tty/console. Improve test for slave tty/pty device.
-
-2011-05-31 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * external.cc (fillout_pinfo): Don't truncate ctty if it's < 0.
-
- * select.cc (pipe_data_available): Avoid printing debug info by default
- or suffer very large strace files.
-
-2011-05-31 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * select.cc (pipe_data_available): New function - uses
- NtQueryInformationFile to return information about pipes.
- (peek_pipe): Rewrite to use pipe_data_available for both read and write
- tests.
-
-2011-05-30 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * dtable.cc (dtable::select_write): Add missing argument to
- debug_printf.
-
- * fhandler.cc (fhandler_base_overlapped::setup_overlapped): Explicitly
- set io_pending to false.
- (fhandler_base_overlapped::has_ongoing_io): Call GetOverlappedResult
- to force completion of I/O.
- (fhandler_base_overlapped::wait_overlapped): Rewrite to correctly deal
- with nonblocking reads and to make more race proof.
- (fhandler_base_overlapped::raw_write): Deal with new enum values.
- (fhandler_base_overlapped::raw_read): Ditto. Don't deal with ongoing
- I/O here since it makes no sense in the read context.
- * fhandler.h (enum wait_return): Add overlapped_unknown,
- overlapped_nonblocking_no_data.
- * pipe.cc (pipe): Add debugging output.
-
-2011-05-30 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * dll_init.cc (dll_list::append): Eliminate increment of unused tot
- variable.
- * dll_init.h (dll_list::tot): Delete.
- (dll_list::populate_all_deps): Delete undefined function.
-
- * fhandler.cc (fhandler_base_overlapped::wait_overlapped): Move EPIPE
- handling under error condition.
-
-2011-05-30 Ryan Johnson <ryan.johnson@cs.utoronto.ca>
-
- * dll_init.cc (reserve_upto): Remove.
- (release_upto): Ditto.
- (dll_list::reserve_space): New function to reserve space needed by
- DLL_LOAD dlls early in the fork process.
- (dll_list::load_after_fork): Rewrite to use recursion to
- track reservations it makes while trying to make dlls land where they
- belong.
- (dll_list::load_after_fork_impl): New function used by load_after_fork.
- (dll_list::alloc): Initialize image base field.
- * dll_init.h (dll_list::prefered_base): New field.
- (dll_list::reserve_space): Declare new function.
- (dll_list::load_after_fork): Declare new function.
- * fork.cc (frok::child): call dll_list::reserve_space early, so we can
- retry if it fails.
-
-2011-05-30 Tor Perkins <cygwin@noid.net>
-
- * fhandler_termios.cc (fhandler_termios::bg_check): Do not return EIO
- when a process group has no leader as this is allowed and does not
- imply an orphaned process group. Add a test for orphaned process
- groups.
- (tty_min::is_orphaned_process_group): Define new function.
- * tty.h (tty_min::is_orphaned_process_group): Define new function.
-
-2011-05-30 Ryan Johnson <ryan.johnson@cs.utoronto.ca>
-
- * dll_init.cc (dll_list::find_by_modname): New function to search the
- dll list for a module name only (no path).
- (dll_list::alloc): Initialize newly-added members of struct dll.
- (dll_list::append): New function to factor out the append operation
- (used by dll_list::topsort).
- (dll_list::populate_deps): New function to identify dll dependencies.
- (dll_list::topsort): New function to sort the dll list topologically by
- dependencies.
- (dll_list::topsort_visit): New helper function for the above.
- * dll_init.h (dll::ndeps): New class member.
- (dll::deps): Ditto.
- (dll::modname): Ditto.
- (dll_list::find_by_modname): New function related to topsort.
- (dll_list::populate_all_deps): Ditto.
- (dll_list::populate_deps): Ditto.
- (dll_list::topsort): Ditto.
- (dll_list::topsort_visit): Ditto.
- (dll_list::append): Ditto.
- (pefile): New struct allowing simple introspection of dll images.
- * fork.cc (fork): Topologically sort the dll list before forking
-
-2011-05-30 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * child_info.h (CURR_CHILD_INFO_MAGIC): Refresh.
- (child_info::refresh_cygheap): New function.
- * spawn.cc (spawn_guts): Call refresh_cygheap before creating a new
- process to ensure that cygheap_max is up-to-date.
- * fork.cc (frok::parent): Ditto.
-
-2011-05-30 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * cygheap.cc (cygheap_dummy): Rename from cygheap_at_start.
- (cygheap): Accommodate name change to cygheap_dummy.
- (cygheap_init): Ditto.
- (cygheap_fixup_in_child): Simplify slightly.
- * fork.cc (fork): Add an advisory comment.
-
-2011-05-29 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * fhandler.cc (fhandler_overlapped::wait_overlapped): Make sure that
- I/O is cancelled on signal.
-
-2011-05-28 Ryan Johnson <ryan.johnson@cs.utoronto.ca>
-
- * dll_init.cc (dll_list::alloc): Initialize dll::image_size.
- (reserve_at): Don't reserve space needed by the target dll if the
- latter overlaps the free region to be blocked.
- (dll_list::load_after_fork): Use new version of reserve_at.
- * dll_init.h (dll::image_size): New member.
- (pefile): New struct.
-
-2011-05-28 Christopher Faylor <me.cygwin2011@cgf.cx>
- Ryan Johnson <ryan.johnson@cs.utoronto.ca>
-
- * dll_init.c (dll_list::load_after_fork): Don't clear in_forkee here.
- * fork.cc (frok::errmsg): Rename from 'error'.
- (frok::error): New function. Handle conditional printing of error
- messages.
- (frok::parent): Record hchild handle for use by error function. Use
- throughout. Use error function rather than setting error pointer
- directly.
- (fork): Clear is_forkee here. Accommodate rename of 'error' to
- 'errmsg'.
- * sigproc.cc (child_info::proc_retry): Detect EXITCODE_FORK_FAILED.
-
-2011-05-28 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * fhandler.cc (handler_base_overlapped::wait_overlapped): Rework to
- attempt to properly set errno and bytes read for non-blocking case.
- Change to just rely on res to indicate error conditions.
-
-2011-05-28 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * fhandler.cc (fhandler_base_overlapped::wait_overlapped): Don't set
- io_pending unless ReadFile has returned an error. (this is a partial fix,
- accidentally checked in)
-
-2011-05-28 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * autoload.cc: Call _api_fatal in asm.
- * child_info.h: Redefine CURR_CHILD_INFO_MAGIC.
- (child_info_fork::abort): Rename from handle_failure. Change
- arguments.
- * cygtls.h (_local_storage::ttybuf): New field.
- * dcrt0.cc (vapi_fatal): Split api_fatal. Add "in forked process" to
- message when appropriate.
- (api_fatal): Use vapi_fatal.
- * devices.h: Make multiple inclusion safe.
- (fh_devices): Add FH_CONS* stuff. Reorder slightly.
- (device): Eliminate anonymous union. Add more ways to access
- minor/major.
- (device::setunit): Accommodate no-longer-anonymous union.
- (device::is_fs): Ditto.
- (device::is_fs_special): Ditto.
- (device::major): New function.
- (device::minor): Ditto.
- (device::is_device): New function.
- (device::not_device): Ditto.
- (device::operator int): New operator.
- (device::operator fh_devices): Ditto.
- (device::operator bool): Ditto.
- (device::operator DWORD): Ditto.
- (device::operator =): Ditto.
- (isproc_dev): New function.
- (isprocsys_dev): Ditto.
- (iscons_dev): Ditto.
- (istty_slave_dev): Ditto.
- * devices.in: Add new "/dev/cons*" strings. Accommodate
- no-longer-anonymous union throughout.
- (BRACK): Use more precise method for initialization.
- * devices.cc: Regenerate.
- * dtable.cc (dtable::stdio_init): Use get_cttyp instead of get_tty.
- (dtable::find_archetype): Use new DWORD operator in device to test
- archetypes.
- (dtable::init_std_file_from_handle): Use different method to initialize
- 'dev'. Adapt to different ctty handling and accommodate /dev/cons*.
- (fh_alloc): Accommodate no-longer-anonymous union. Adapt to new
- /dev/cons*.
- (build_fh_pc): Make debugging output more useful.
- * exceptions.cc (ctrl_c_handler): Use get_cttyp instead of get_tty.
- * external.cc (fillout_pinfo): Accommodate new cons* stuff.
- * fhandler.cc (fhandler_base::read): Eliminate is_slow() test.
- * fhandler.h (fhandler_base::*): Adapt to changes in device.h.
- (fhandler_*::is_slow): Delete.
- ( fhandler_proc::get_proc_fhandler): Return fh_devices type.
- * fhandler_console.cc (open_shared_console): New function.
- (console_unit): New class.
- (console_unit::console_unit): New constructor.
- (enum_windows): New function. Declare as friend to console_unit.
- (fhandler_console::set_unit): New function.
- (fhandler_console::get_tty_stuff): Call set_unit to set the unit number
- and determine if initialization is needed. Eliminate flags parameter.
- (tty_list::get_cttyp): Rename (sorta) from get_tty. Return pointer to
- correct tty_min.
- (fhandler_console::open): Adapt to elimination of argument to
- get_tty_stuff.
- (fhandler_console::output_tcsetattr): Properly detect error condition.
- (fhandler_console::fixup_after_fork_exec): Adapt to get_tty_stuff()
- setting tc automatically.
- * fhandler_proc.cc: Use FH_BAD rather than 0 throughout where using
- fh_devices enum.
- (fhandler_proc::get_proc_fhandler): Return fh_devices. Adapt to
- devices.h changes.
- * fhandler_process.cc: Adapt to devices.h changes. Use FH_BAD rather
- than 0 throughout where using fh_devices enum.
- * fhandler_procnet.cc: Ditto.
- * fhandler_procsys.cc: Ditto.
- * fhandler_procsysvipc.cc: Ditto.
- * fhandler_tape.cc (fhandler_dev_tape::fhandler_dev_tape): Ditto.
- * fhandler_termios.cc (handler_termios::bg_check): Use tc->ttyname()
- rather than assuming that we can construct a tty.
- * fhandler_tty.cc (fhandler_tty_master::fhandler_tty_master): Just
- return get_minor() of dev.
- (fhandler_pty_master::process_slave_output): Add slightly more
- debugging info.
- (fhandler_tty_slave::fhandler_tty_slave): Change name from ntty to
- unit.
- (fhandler_pty_master::open): Ditto.
- (fhandler_tty_slave::ioctl): Adapt to change which causes ctty to
- represent a complete device.
- (fhandler_tty_master::init_console): Add debugging for failure path.
- (fhandler_pty_master::setup): Use get_unit() to retrieve unit number
- rather than relying on raw ntty.
- (fhandler_pty_master::setup): Ditto.
- * fhandler_virtual.h (virt_tab_t): Redefine fhandler as fh_devices.
- * fork.cc: Remove obsolete vfork stuff.
- (frok::child): Don't assume that a ctty == 0 is valid.
- * mount.cc (mount_info::conv_to_win32_path): Adapt to device struct
- changes.
- (mount_info::conv_to_win32_path): Ditto.
- * path.cc (path_conv::check): Retrive major/minor numbers via a method
- rather than accessing them directly from device. Rely on dev operators
- to set/retrieve device information as required by device struct change.
- * path.h (isproc_dev): Move to devices.h.
- (isprocsys_dev): Ditto.
- (isvirtual_dev): Ditto.
- (path_conv:{isdevice,isfifo,isspecial,iscygdrive,issocket,get_devn,get_unitn}):
- Use device methods to access/manipulate devices.
- * pinfo.cc (pinfo::exit): Don't assume that ctty == 0 is valid. Use
- iscons_dev to determine if a device is a console.
- (_pinfo::_ctty): Use device::parse to generate tty/cons name.
- (_pinfo::set_ctty): Don't assume that ctty == 0 is valid. Remove
- redundant info from debugging.
- * shared.cc (offsets): Remove console offset.
- * shared_info.h (shared_locations): Ditto.
- * syscalls.cc (umask): Use device methods to manipulate device
- information.
- (ctermid): Use device::parse to generate term device name.
- * tlsoffsets.h: Regenerate.
- * tty.cc (ttyslot): Return minor number of ctty since ctty now
- represents a full device.
- (tty::create_master): Set ctty to a complete device.
- (tty_list::attach): Rework to detect new /dev/cons* stuff.
- (tty_list::terminate): Adapt to changes to ctty.
- (tty_list::init): Adapt to change to setntty - pass in device major
- number.
- (tty::exists): Use get_unit() to retrive tty unit number.
- (tty::open_mutex): Ditto.
- (tty::open_inuse): Ditto.
- (tty::create_inuse): Ditto.
- (tty::get_event): Ditto.
- (tty_min::ttyname): Define new function.
- * tty.h (tty_min::ntty): Redefine as fh_devices.
- (tty::exists): Use get_unit() to retrive tty unit number.
- (tty::open_mutex): Ditto.
- (tty::open_inuse): Ditto.
- (tty::create_inuse): Ditto.
- (tty::get_event): Ditto.
- (tty_min::ttyname): Declare new function.
- (tty::getntty): Declare as const.
- (tty_list::operator []): Assure that only minor part of argument is
- used.
-
- * dll_init.cc (dll_list::alloc): Detect mismatch of data segments early
- issuing an explicit error message if necessary.
- * heap.cc (heap_init): Adapt to changes from fork->handle_failure to
- fork->abort.
- * pinfo.h (EXITCODE_FORK_FAILED): New enum. (from Ryan Johnson)
- * sigproc.cc (child_info_fork::abort): Rename from handle_failure.
- Change arguments to allow passing in a printf-like message.
- * winsup.h (api_fatal): Delete macro definition.
- (api_fatal): Redefine from __api_fatal.
- (vapi_fatal): Declare new function.
- * include/sys/strace.h (strace_vprintf): Define new macro.
-
- * ntdll.h (_SYSTEM_INFORMATION_CLASS): Add SystemHandleInformation.
-
-2011-05-27 Corinna Vinschen <corinna@vinschen.de>
-
- * shared.cc (offsets): Reorder so that console_state is lowest in
- memory. Explain why.
- (open_shared): Accommodate reordering of offsets array.
- * shared_info.h (shared_locations): Reorder SH_SHARED_CONSOLE after
- SH_MYSELF.
-
-2011-05-26 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.h (MAX_MOUNTS): Raise to 64.
-
-2011-05-25 Eric Blake <eblake@redhat.com>
-
- * cygtls.h (strerror_r_buf): New buffer.
- * errno.cc (strerror): Move guts...
- (_strerror_r): ...to new function demanded by newlib.
- (strerror_r): Don't clobber strerror buffer.
- (_user_strerror): Drop unused declaration.
- * tlsoffsets.h: Regenerate.
-
-2011-05-25 Corinna Vinschen <corinna@vinschen.de>
-
- * init.cc (dll_entry): Reinstantiate wow64_test_stack_marker and
- previous stack tests.
-
-2011-05-25 Corinna Vinschen <corinna@vinschen.de>
-
- * posix.sgml (std-notes): Add missing <para>.
-
-2011-05-24 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (mount_info::conv_to_win32_path): Remove unused code.
- * mount.h (class mount_info): Remove sys_mount_table_counter member.
- * shared_info.h (class shared_info): Ditto.
- (CURR_SHARED_MAGIC): Update.
-
-2011-05-24 Corinna Vinschen <corinna@vinschen.de>
-
- * pinfo.h (struct _pinfo): Reduce size of progname array slightly.
- Explain why.
-
-2011-05-23 Eric Blake <eblake@redhat.com>
-
- * errno.cc (strerror): Print unknown errno as int.
- (__xpg_strerror_r): Likewise, and don't clobber strerror buffer.
- * cygtls.h (strerror_buf): Resize to allow '-'.
-
-2011-05-23 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_process.cc (thread_info::fill_if_match): Reformat.
- (format_process_maps): Ditto. Fetch pointer to procinfo structure
- from mapped process. Print info about global shared Cygwin regions.
-
-2011-05-21 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_process.cc (struct dos_drive_mappings): Use malloc/free
- rather than cmalloc/cfree. Check return value from malloc before
- using it.
- (struct heap_info): Ditto.
- (struct thread_info): Ditto. Rename from stack_info. Rename members
- and local variables accordingly.
- (thread_info::thread_info): Store stack and TEB addresses.
- (thread_info::fill_if_match): Print "teb" if a TEB address has been
- found. Special case for WOW64, explain why.
- (format_process_maps): Fetch PEB address. Print MEM_RESERVE regions
- with equal signs to distinguish them from PAGE_NOACCESS regions. Fix
- printing of 'p' and 's' to differ between MEM_PRIVATE and MEM_MAPPED
- pages, as on Linux. Print 'g' instead of 'p for PAGE_GUARD pages.
- Print PEB and SharedUserData area if recognized.
-
-2011-05-20 Corinna Vinschen <corinna@vinschen.de>
-
- * miscfuncs.cc (CygwinCreateThread): Fix condition for adding the
- guardsize to the stacksize. Fix accompanying comment.
-
-2011-05-20 Corinna Vinschen <corinna@vinschen.de>
-
- * miscfuncs.cc (CygwinCreateThread): Add accidentally missing comment.
-
-2011-05-20 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_process.cc (struct heap_info): Change type of base and end
- members to char *. Print "shared" rather than "share".
- (struct stack_info): New class to fetch process stack information.
- (format_process_maps): Initialize and check for stack information.
-
-2011-05-20 Corinna Vinschen <corinna@vinschen.de>
-
- * miscfuncs.cc (thread_wrapper): Remove statements added for debugging
- purposes.
-
-2011-05-20 Corinna Vinschen <corinna@vinschen.de>
-
- * child_info.h (CURR_CHILD_INFO_MAGIC): Update.
- (class child_info_fork): Remove stacksize, add stackaddr and guardsize
- members.
- * dcrt0.cc (child_info_fork::alloc_stack_hard_way): Partial rewrite
- to regenerate the stack exactly as in the parent.
- (child_info_fork::alloc_stack): Set stackaddr to 0, rather than
- stacksize.
- (dll_crt0_1): Check for stackaddr before changing the stack addresses
- in the TEB.
- * fork.cc (frok::child): Check for stackaddr here.
- (frok::parent): Set ch.stackaddr and ch.guardsize if not called from
- the main thread.
- * init.cc (dll_entry): Replace pointer to NT_TIB with pointer to TEB.
- Fix incorrectly changed address test before removing _my_tls.
- Set StackLimit to NULL on Windows 2000. Explain why.
- * miscfuncs.cc (struct thread_wrapper_arg): Store stackbase rather
- than stacksize, store commitaddr, remove guardsize. Store all pointers
- as char * for easier address arithmetic.
- (thread_wrapper): Rewrite to remove OS stack before calling thread
- function. Add lots of comments to explain what we do.
- (CygwinCreateThread): Reserve our own stack in case we got no
- application stack. Add comments.
- * ntdll.h (struct _TEB): Extend defintion up to DeallocationStack
- member.
- * thread.cc (pthread_attr::pthread_attr): Use "(size_t) -1"
- rather then 0xffffffff.
- * wincap.h (wincaps::has_stack_size_param_is_a_reservation): New
- element.
- * wincap.cc: Implement above element throughout.
-
-2011-05-19 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * thread.cc: Mark psiginfo and psignal as available in list of
- optional cancellation points.
-
-2011-05-19 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * cygwin.din (__fpurge): Export.
- * posix.sgml (std-solaris): Add __fpurge.
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
-
-2011-05-18 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * posix.sgml (std-susv4): Remove chroot, futimes, hstrerror.
- (std-deprec): Add chroot.
- (std-bsd): Add futimes, hstrerror.
- (std-notimpl): Add clock_nanosleep, nexttoward, nexttowardf.
- Remove initstate, which is implemented and listed in std-susv4.
-
-2011-05-17 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * cygwin.din (error): Export.
- (error_at_line): Export.
- (error_message_count): Export.
- (error_one_per_line): Export.
- (error_print_progname): Export.
- * errno.cc (error_message_count): Define.
- (error_one_per_line): Define.
- (error_print_progname): Define.
- (_verror): New static function.
- (error): New function.
- (error_at_line): New function.
- * posix.sgml (std-gnu): Add error, error_at_line.
- * include/error.h: New header.
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
-
-2011-05-17 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * cygwin.din (clock_getcpuclockid): Export.
- (pthread_getcpuclockid): Export.
- * hires.h (PID_TO_CLOCKID): New macro.
- (CLOCKID_TO_PID): New macro.
- (CLOCKID_IS_PROCESS): New macro.
- (THREADID_TO_CLOCKID): New macro.
- (CLOCKID_TO_THREADID): New macro.
- (CLOCKID_IS_THREAD): New macro.
- * ntdll.h (enum _THREAD_INFORMATION_CLASS): Add ThreadTimes.
- * posix.sgml (std-notimpl): Add clock_getcpuclockid and
- pthread_getcpuclockid from here...
- (std-susv4): ... to here.
- (std-notes): Remove limitations of clock_getres and clock_gettime.
- Note limitation of timer_create to CLOCK_REALTIME.
- * sysconf.cc (sca): Set _SC_CPUTIME to _POSIX_CPUTIME, and
- _SC_THREAD_CPUTIME to _POSIX_THREAD_CPUTIME.
- * thread.cc (pthread_getcpuclockid): New function.
- * timer.cc (timer_create): Set errno to ENOTSUP for CPU-time clocks.
- * times.cc (clock_gettime): Handle CLOCK_PROCESS_CPUTIME_ID and
- CLOCK_THREAD_CPUTIME_ID.
- (clock_getres): Ditto.
- (clock_settime): Set errno to EPERM for CPU-time clocks.
- (clock_getcpuclockid): New function.
- * include/pthread.h (pthread_getcpuclockid): Declare.
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
-
-2011-05-17 Corinna Vinschen <corinna@vinschen.de>
-
- * miscfuncs.cc (thread_wrapper): Remove unused _cygtls record.
- * mmap.cc (is_mmapped_region): Avoid crash if no mmaps exist.
-
-2011-05-16 Corinna Vinschen <corinna@vinschen.de>
-
- * globals.cc (__getlogin_username): Remove.
- * uinfo.cc (getlogin_r): Fetch username from cygheap.
- (getlogin): Add static buffer username and fetch username from
- getlogin_r.
-
-2011-05-16 Corinna Vinschen <corinna@vinschen.de>
-
- * cygtls.h (struct _local_storage): Remove unused members rarg and
- _localtime_buf. Remove username in favor of a global buffer. Reorder
- slightly to keep the net.cc stuff together.
- * globals.cc (__getlogin_username): New global char buffer.
- * tlsoffsets.h: Regenerate.
- * uinfo.cc (getlogin): Copy username into __getlogin_username.
-
-2011-05-16 Corinna Vinschen <corinna@vinschen.de>
-
- * heap.cc (heap_init): Rewrite initial heap allocation to use addresses
- beyond 0x20000000. Explain why and how.
- * shared.cc (shared_info::heap_slop_size): Remove.
- * shared_info.h (class shared_info): Remove heap_slop_inited and
- heap_slop members. Remove heap_slop_size declaration.
- (CURR_SHARED_MAGIC): Update.
- * wincap.cc: Throughout, drop heapslop.
- * wincap.h (struct wincaps): Drop heapslop.
-
-2011-05-16 Corinna Vinschen <corinna@vinschen.de>
-
- * dcrt0.cc (child_info_fork::alloc_stack_hard_way): Check if the
- requested stack is application-provided within the user heap or an
- mmapped region. If so, just use it. Add comment to explain why.
- * miscfuncs.cc (thread_wrapper): If an application-provided stack
- has been given, implement cygtls area at the stackbase. Fix comment.
- * mmap.cc (is_mmapped_region): New function.
- * winsup.h (is_mmapped_region): Declare.
-
-2011-05-15 Corinna Vinschen <corinna@vinschen.de>
-
- * miscfuncs.cc (thread_wrapper): Add comments to assembler code.
-
-2011-05-15 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din (pthread_attr_getguardsize): Export.
- (pthread_attr_setguardsize): Export.
- (pthread_attr_setstack): Export.
- (pthread_attr_setstackaddr): Export.
- * init.cc (dll_entry): Remove wow64_test_stack_marker. Check for
- unusual stack address by testing stack addresses from current TEB.
- Check validity of _my_tls by testing if it's within the stack as
- given in current TEB.
- * miscfuncs.cc (struct thread_wrapper_arg): New structure used to
- push all required information to thread_wrapper function.
- (thread_wrapper): Wrapper function for actual thread function.
- If an application stack has been given, change %ebp and %esp so that
- the thread function runs on that stack. If the thread has been created
- by CygwinCreateThread, set up the POSIX guard pages if necessary.
- (CygwinCreateThread): New function.
- * miscfuncs.h (CygwinCreateThread): Declare.
- * ntdll.h (struct _TEB): Define all members up to Peb.
- * posix.sgml (std-susv4): Move pthread_attr_getguardsize,
- pthread_attr_setguardsize and pthread_attr_setstack here.
- (std-deprec): Add pthread_attr_setstackaddr.
- * sysconf.cc (sca): Set _SC_THREAD_ATTR_STACKADDR to
- _POSIX_THREAD_ATTR_STACKADDR.
- * thread.cc (pthread::precreate): Copy pthread_attr stackaddr and
- guardsize members.
- (pthread::create): Call CygwinCreateThread.
- (pthread_attr::pthread_attr): Initialize guardsize.
- (pthread_attr_setstack): New function.
- (pthread_attr_setstackaddr): New function.
- (pthread_attr_setguardsize): New function.
- (pthread_attr_getguardsize): New function.
- (pthread_getattr_np): Copy attr.guardsize.
- * thread.h (pthread_attr): Add member guardsize.
- * include/pthread.h (pthread_attr_getguardsize): Declare.
- (pthread_attr_setguardsize): Declare.
- * include/cygwin/version.h: Bump API minor number.
-
-2011-05-13 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_process.cc (struct heap_info::heap): Convert base to
- uintptr_t. Add heap_id, end, flags members.
- (heap_info::heap_vm_chunks): Rename from heaps.
- (heap_info::heap_info): Rearrange using RtlQueryProcessDebugInformation
- to get information of heap virtual memory blocks. Store heap id and
- flags, as well as end address of each block.
- (heap_info::fill_if_match): Check incoming base address against full
- address range of heap chunks. Convert flag values in extra heap
- information.
- (format_process_maps): Change order so that heap check is done before
- MEM_MAPPED check since there are shareable heaps.
- * ntdll.h (PDI_HEAP_BLOCKS): Define.
- (HEAP_FLAG_NOSERIALIZE): Define.
- (HEAP_FLAG_GROWABLE): Define.
- (HEAP_FLAG_EXCEPTIONS): Define.
- (HEAP_FLAG_NONDEFAULT): Define.
- (HEAP_FLAG_SHAREABLE): Define.
- (HEAP_FLAG_EXECUTABLE): Define.
- (HEAP_FLAG_DEBUGGED): Define.
- (struct _DEBUG_HEAP_ARRAY): Define.
- (struct _DEBUG_HEAP_BLOCK): Define.
-
-2011-05-12 Corinna Vinschen <corinna@vinschen.de>
-
- Based on newlib patch to strptime by Peter Rosin <peda@lysator.liu.se>:
- * libc/time/strptime.c (is_leap_year): New static function.
- (first_day): Ditto.
- (__strptime): Fill in tm_yday when all of tm_year, tm_mon and tm_mday
- are updated. Fill in tm_mon, tm_mday and tm_wday when both of tm_year
- and tm_yday are updated.
-
-2011-05-12 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * fhandler_proc.cc (format_proc_meminfo): Rewrite to use sysinfo().
- Support RAM and swap space larger than 4GB.
- Remove output elements not found with modern Linux kernels.
- (format_proc_swaps): Support paging files larger than 4GB.
-
-2011-05-11 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc: Remove useless comment.
-
-2011-05-11 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (EnumProcessModules): Remove.
- * dlfcn.cc (dlopen): Make sure errno is set if an error occurs.
- (dlsym): Rewrite using RtlQueryProcessDebugInformation instead of
- EnumProcessModules.
- * ntdll.h (struct _DEBUG_MODULE_ARRAY): Define.
- (RtlCreateQueryDebugBuffer): Declare.
- (RtlDestroyQueryDebugBuffer): Declare.
- (RtlQueryProcessDebugInformation): Declare.
-
-2011-05-11 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (GetModuleFileNameExW): Remove.
- * autoload.cc (GetModuleInformation): Remove.
-
-2011-05-11 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (QueryWorkingSet): Remove.
-
-2011-05-11 Ryan Johnson <ryan.johnson@cs.utoronto.ca>
-
- * fhandler_process.cc (format_process_maps): Rework to report
- all mapped address space in a process (committed or reserved),
- identifying the nature of the mapping (mapped file/image, heap,
- shared memory) when possible.
- (dos_drive_mappings): New helper classes.
- (heap_info): Ditto.
- * ntdll.h (struct _MEMORY_SECTION_NAME): Define.
-
-2011-05-11 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (GetProcessMemoryInfo): Remove.
- * resource.cc (fill_rusage): Call NtQueryInformationProcess rather than
- GetProcessMemoryInfo to drop a psapi dependency.
-
-2011-05-11 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (get_inet_addr): Rearrange for better readability.
- Make waiting loop interruptible and cancelable. Check for SYSTEM DOS
- flag before reading the file. Change return value to return 0 on
- success, SOCKET_ERROR on failure.
- (fhandler_socket::bind): Only set R/O DOS flag on filesystems not
- supporting ACLs.
- (fhandler_socket::connect): Accommodate changed return values from
- get_inet_addr. Use SOCKET_ERROR instead of -1.
- (fhandler_socket::sendto): Accommodate changed return values from
- get_inet_addr.
- * syslog.cc (connect_syslogd): Ditto.
-
-2011-05-10 Christian Franke <franke@computer.org>
-
- * security.cc (check_registry_access): Handle missing
- security descriptor of HKEY_PERFORMANCE_DATA.
-
-2011-05-10 Corinna Vinschen <corinna@vinschen.de>
-
- * lc_msg.h: Regenerate.
-
-2011-05-10 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_proc.cc (format_proc_uptime): Don't call GetSystemInfo.
- Fetch CPU count from wincap.
- (format_proc_stat): Ditto.
- * globals.cc (system_info): Move to wincap.
- * heap.cc (heap_init): Fetch page size from wincap.
- * syscalls.cc (getpagesize): Fetch allocation granularity from wincap.
- (getsystempagesize): Fetch page size from wincap.
- * wincap.cc (wincap_2003): Default is_server to false.
- (wincapc::init): Call GetSystemInfo here. Always set is_server value.
- * wincap.h (class wincapc): Add system_info as private member.
- (wincapc::cpu_count): New public method.
- (wincapc::page_size): Ditto.
- (wincapc::allocation_granularity): Ditto.
-
-2011-05-10 Corinna Vinschen <corinna@vinschen.de>
-
- * environ.cc (set_chunksize): Remove.
- (parse_thing): Remove forkchunk entry.
- * fork.cc (child_copy): Drop handling external chunksize setting.
- * wincap.cc: Througout, drop chunksize.
- (wincapc::set_chunksize): Remove.
- * wincap.h (struct wincaps): Drop chunksize and declaration of
- set_chunksize.
-
-2011-05-08 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * times.cc (settimeofday): Add EFAULT handler.
- Set errno to EINVAL if tv.tv_nsec is invalid, and to EPERM if
- SetSystemTime fails. Return -1 in case of failure, all for
- compatibility with BSD and Linux.
- (clock_settime): New function.
- * cygwin.din (clock_settime): Export.
- * posix.sgml (std-susv4): Add clock_settime.
- Move clock_setres from here...
- (std-deprec): ... to here.
- (std-notes): Correct limitation of clock_setres to only CLOCK_REALTIME.
- Add limitation of clock_settime to only CLOCK_REALTIME.
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
-
-2011-05-07 Corinna Vinschen <corinna@vinschen.de>
-
- * registry.cc (get_registry_hive_path): Change system_printf to
- debug_printf.
- (load_registry_hive): Ditto.
-
-2011-05-06 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * fhandler.h (fhandler_base::close_with_arch): Make non-virtual.
- (fhandler_base::open_fs): Move closer to it's close counterpart.
-
-2011-05-06 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * fhandler.cc (fhandler_base::dup): Avoid duping a handle when an
- fhandler has an archetype.
- * fhandler_console.cc (fhandler_console::invisible_console): Move to
- the top.
- (fhandler_console::set_close_on_exec): Don't set close-on-exec on
- handle since it's an archetype and you don't know how many things could
- be using it.
-
-2011-05-06 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * fhandler.h (fhandler_dev_dsp): Cosmetic change.
-
- * fhandler_tty.cc (fhandler_pty_master::process_slave_output): Put back
- Sleep(10) for tty_master case.
-
- * sigproc.cc (stopped_or_terminated): Don't consider a pid which has
- been reaped to be terminated.
-
-2011-05-06 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * sysconf.cc (sysinfo): New function.
- * cygwin.din (sysinfo): Export.
- * posix.sgml (std-gnu): Add sysinfo.
- * include/sys/sysinfo.h (struct sysinfo): Define.
- (sysinfo): Declare.
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
-
-2011-05-06 Corinna Vinschen <corinna@vinschen.de>
-
- * libc/minires-os-if.c (get_dns_info): Drop printing uninitialized
- value of dwRetVal in debug output.
-
-2011-05-06 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (fhandler_socket::read): Declare.
- (fhandler_socket::write): Declare.
- * fhandler_procsys.cc (fhandler_procsys::read): Add FIXME comment.
- (fhandler_procsys::write): Ditto.
- * fhandler_socket.cc (fhandler_socket::read): New method.
- (fhandler_socket::write): New method.
- * syscalls.cc: Rearrange order of read/write functions.
- (read): Call fhandler read method directly instead of just readv.
- (readv): Remove EINTR loop. This is done in all affected fhandler's
- now.
- (write): Call fhandler write method directly instead of just writev.
- Fix debug output.
-
-2011-05-05 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * cygheap.cc (cygheap::close_ctty): Close ctty via close_with_arch().
- * debug.cc (close_handle): Call debugger on failure.
- * devices.in (device::tty_to_real_device): Delete.
- * devices.h (device::tty_to_real_device): Ditto.
- * devices.cc: Regenerate.
- * dtable.cc: Delete old ifdef'ed vfork code.
- (dtable::release): Don't handle archetype here.
- (dtable::init_std_file_from_handle): Consolidate console tests.
- Generate major/minor for tty ASAP. Fix incorrect setting of DEV_TTYS*
- for serial.
- (fh_alloc): New function derived from build_fh_pc. Pass current tty
- when building tty.
- (build_pc_pc): Use fh_alloc to create. Set name from fh->dev if
- appropriate. Generate an archetype or point to one here.
- (dtable::dup_worker): Deal with archetypes. Rely on = operator copying
- whole class rather than just fhandler_base.
- (dtable::fixup_after_exec): Call close_with_arch to handle closing of
- fhandlers with archetypes.
- * fhandler.cc (fhandler_base::operator =): Call memcpy with fhandler's
- size() rather than sizeof fhandler_base.
- (fhandler_base::open_with_arch): New function. Handles opening of
- fhandler's with archetypes, dealing with usecounts, etc.
- (fhandler_base::close_with_arch): Ditto for close.
- * fhandler.h: Many changes for archetypes.
- (fhandler_base::set_name): Set both normalized path and regular path.
- (fhandler_base::open_with_arch): New function.
- (fhandler_base::open_setup): Ditto.
- (fhandler_base::use_archetype): Ditto.
- (fhandler_base::_archetype_usecount): Ditto.
- (fhandler_*::size): Ditto.
- (fhandler_dev_tape::open): Remove virtual decoration.
- (fhandler_console::use_archetype): New function. Return true.
- (fhandler_console::open_setup): New function.
- (fhandler_console::dup): Delete.
- (fhandler_tty_slave::fhandler_tty_slave): Redeclare to take an
- argument.
- (fhandler_tty_slave::use_archetype): New function. Return true.
- (fhandler_tty_slave::cleanup): New function.
- (fhandler_pty_master::use_archetype): New function. Return true.
- (fhandler_pty_master::cleanup): New function.
- (fhandler_pty_master::is_tty_master): New function. Return false.
- (fhandler_tty_master::is_tty_master): New function. Return true.
- (fhandler_dev_dsp::fhandler_dev_dsp): New function. Return true.
- (report_tty_counts): Only report on archetype's usecount if there is
- one.
- * fhandler_console.cc (fhandler_console::get_tty_stuff): Remove
- handling of setsid, set_ctty, set_flags, and manage_console_count.
- (fhandler_console::open_setup): New function. Implement functionality
- removed from get_tty_stuff.
- (fhandler_console::dup): Delete.
- (fhandler_console::output_tcsetattr): Set errno on error.
- (fhandler_console::fhandler_console): Set device early.
- (fhandler_console::init): Use open_with_arch to open console handles.
- (fhandler_console::fixup_after_fork_exec): Nuke most of the stuff for
- dealing with console handles.
- * fhandler_dsp.cc (fhandler_dev_dsp::open): Remove archetype handling.
- (fhandler_dev_dsp::write): Ditto.
- (fhandler_dev_dsp::read): Ditto.
- (fhandler_dev_dsp::close): Ditto.
- (fhandler_dev_dsp::dup): Ditto.
- (fhandler_dev_dsp::ioctl): Ditto.
- (fhandler_dev_dsp::fixup_after_fork): Ditto.
- (fhandler_dev_dsp::fixup_after_exec): Ditto.
- * fhandler_tty.cc (fhandler_tty_common::__acquire_output_mutex): Add a
- little more debugging.
- (fhandler_tty_common::__release_output_mutex): Ditto.
- (fhandler_pty_master::process_slave_output): Ditto. Don't do signal
- handling or pthread_cancel handling in the tty master thread.
- (process_output): Minor reorg.
- (fhandler_tty_slave::fhandler_tty_slave): Set device based on new ntty
- argument.
- (fhandler_tty_slave::open): Remove archetype handling. Move some
- processing into open_setup().
- (fhandler_tty_slave::open_setup): New function.
- (fhandler_tty_slave::cleanup): New function.
- (fhandler_tty_slave::close): Remove archetype handling. Move some
- processing into cleanup().
- (fhandler_tty_slave::init): Rename argument from f to h. Open device
- using open_with_arch(). Remove archetype handling.
- (fhandler_pty_master::dup): Ditto.
- (fhandler_pty_master::open): Ditto.
- (fhandler_pty_master::close): Ditto. Move some handling to cleanup().
- (fhandler_pty_master::cleanup): New function.
- (fhandler_tty_master::init_console): Give unique name to captive
- console fhandler.
- * pinfo.cc (_pinfo::set_ctty): Rename argument from arch to fh.
- Eliminate archetype assumption.
- * syscalls.cc (close_all_files): Use close_with_arch for closing.
- (open): Use open_with_arch() rather than open().
- (close): Use close_with_arch() rather than close().
-
-2011-05-05 Corinna Vinschen <corinna@vinschen.de>
-
- * pinfo.h (class push_process_state): New class to push a process state
- flag temporarily into myself->process_state.
- * fhandler_console.cc (fhandler_console::read): Add push_process_state
- handler.
- (fhandler_console::write): Call bg_check from here. Add
- push_process_state handler.
- * fhandler_tty.cc (fhandler_tty_slave::write): Ditto.
- (fhandler_tty_slave::read): Ditto.
- (fhandler_pty_master::write): Ditto.
- (fhandler_pty_master::read): Ditto.
- * syscalls.cc (readv): Remove bg_check call and setting process state.
- (writev): Ditto.
-
-2011-05-05 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (readv): Add myfault handler. Don't check repeatedly
- open state of file handler. Streamline loop.
- (writev): Add myfault handler.
-
-2011-05-05 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * fhandler.cc (fhandler_base_overlapped::raw_read): Rename from
- read_overlapped.
- (fhandler_base_overlapped::raw_e): Rename from write_overlapped.
- * fhandler.h (fhandler_*::raw_read): Add reparm decoration.
- (fhandler_*::raw_write): Ditto.
- (fhandler_base_overlapped::raw_read): Rename from read_overlapped.
- (fhandler_base_overlapped::raw_write): Rename from write_overlapped.
- (fhandler_pipe::raw_read): Delete.
- (fhandler_pipe::raw_write): Ditto.
- (fhandler_mailslot::raw_read): Ditto.
- * fhandler_fifo.cc (fhandler_fifo::raw_read): Reflect read_overlapped
- -> raw_read rename.
- (fhandler_fifo::raw_write): Ditto.
- * fhandler_mailslot.cc (fhandler_mailslot::raw_read): Delete.
- (fhandler_mailslot::raw_write): Reflect read_overlapped -> raw_read
- rename.
- * pipe.cc (fhandler_pipe::raw_read): Delete.
- (fhandler_pipe::raw_write): Ditto.
-
-2011-05-05 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * fork.cc (fork): Clear PID_REAPED.
- * pinfo.cc (pinfo_init): Ditto.
- (pinfo::init): Check for PID_REAPED.
- * sigproc.cc (stopped_or_terminated): Ditto.
-
-2011-05-05 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * pinfo.cc (_pinfo::exists): Check for PID_REAPED.
-
-2011-05-05 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::pread): Correctly return
- with errno set to EBADF if file open mode is incorrect.
- (fhandler_disk_file::pwrite): Ditto.
-
-2011-05-05 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (is_at_eof): Drop static storage class. Drop err
- parameter since we don't change the Win32 error here anymore.
- (fhandler_base::raw_read): Accommodate change to is_at_eof.
-
- * fhandler_disk_file.cc (fhandler_disk_file::pread): In binary mode use
- direct call to NtReadFile, rather than lseek/read.
- (fhandler_disk_file::pwrite): In binary mode use direct call to
- NtWriteFile, rather than lseek/write.
-
-2011-05-05 Corinna Vinschen <corinna@vinschen.de>
-
- * dcrt0.cc (dll_crt0_1): Reset locale to "C" even when dynamically
- loaded.
-
-2011-05-05 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * posix.sgml (std-notimpl): Remove bsd_signal, setcontext, and
- swapcontext, marked obsolete in SUSv3 and not present in SUSv4.
-
-2011-05-05 Christian Franke <franke@computer.org>
-
- * fhandler_registry.cc (fhandler_registry::exists): Fix regression
- in EACCES handling.
- (fhandler_registry::open): Fix "%val" case.
-
-2011-05-04 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * signal.cc (_pinfo::kill): Return success on kill(0) only if pid
- exists or is in PID_EXITED state. Report pid 0 when pid does not exist
- rather than pid -1. Make debug output reflect actual function call.
- * sigproc.cc (stopped_or_terminated): Set process state to reaped when
- we've finished waiting for it.
- * include/sys/cygwin.h (PID_REAPED): New enum.
-
-2011-05-04 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * cygwin.din (psiginfo): Export.
- (psignal): Export.
- (sys_siglist): Export.
- * posix.sgml (std-notimpl): Move psiginfo and psignal from here...
- (std-susv4): ... to here.
- (std-deprec): Add sys_siglist.
- * strsig.cc (sys_siglist): New array.
- (psiginfo): New function.
- * include/cygwin/signal.h (sys_siglist): Declare.
- (psiginfo): Declare.
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
-
-2011-05-04 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * dll_list::detach (dll_list::detach): Avoid doing anything with detach
- during a failing fork.
-
-2011-05-04 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * dll_init.cc (dll_global_dtors): Avoid calling destructors during
- failing fork().
-
-2011-05-04 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (class fhandler_base): Remove uninterruptible_io status
- flag.
- (fhandler_base::ready_for_read): Remove declaration.
- (fhandler_socket::ready_for_read): Ditto.
- (fhandler_pipe::ready_for_read): Ditto.
- (fhandler_tty_master::is_slow): Remove.
- * fhandler_console.cc (fhandler_console::open): Drop setting
- uninterruptible_io.
- * fhandler_serial.cc (fhandler_serial::open): Ditto.
- * fhandler_tty.cc (fhandler_tty_slave::fhandler_tty_slave): Ditto.
- (fhandler_tty_master::init_console): Ditto.
- * pipe.cc (fhandler_pipe::fhandler_pipe): Ditto.
- (fhandler_pipe::open): Ditto.
- (_pipe): Ditto.
- * select.cc (fhandler_pipe::ready_for_read): Remove.
- (fhandler_base::ready_for_read): Remove.
- * syscalls.cc (readv): Drop unneeded wait variable. Remove entire test
- which might lead to calling ready_for_read. Remove now unused label
- out.
-
-2011-05-04 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (class fhandler_mailslot): Move down in file and change
- parent class to fhandler_base_overlapped. Remove declaration of
- method write. Add declaraiotns for raw_read and raw_write.
- * fhandler_mailslot.cc (fhandler_mailslot::fhandler_mailslot): Call
- fhandler_base_overlapped constructor.
- (fhandler_mailslot::fstat): Call fhandler_base_overlapped::fstat.
- (fhandler_mailslot::open): Drop FILE_SYNCHRONOUS_IO_NONALERT flag from
- call to NtOpenFile.
- (fhandler_mailslot::raw_read): New method.
- (fhandler_mailslot::raw_write): Ditto. Take over length algorithm from
- former write method.
- (fhandler_mailslot::write): Remove.
- (fhandler_mailslot::ioctl): Call fhandler_base_overlapped::ioctl.
-
-2011-05-04 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (fhandler_dev_tape::_lock): Add bool parameter.
- * fhandler_tape.cc (lock): Call _lock with false argument.
- (_lock): Take bool cancelable parameter. Handle O_NONBLOCK.
- Make cancelable if cancelabe parameter is true.
- (fhandler_dev_tape::raw_read): Call _lock with true argument.
- (fhandler_dev_tape::raw_write): Ditto.
-
-2011-05-04 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_dsp.cc (fhandler_dev_dsp::Audio): Add fh member.
- (fhandler_dev_dsp::Audio_out::Audio_out): Take pointer to encapsulating
- fhandler_dev_dsp as parameter.
- (fhandler_dev_dsp::Audio_in::Audio_in): Ditto.
- (fhandler_dev_dsp::Audio::Audio): Take pointer to encapsulating
- fhandler_dev_dsp as parameter and store in fh.
- (fhandler_dev_dsp::Audio_out::write): Change return type to int and
- return number of bytes written. Return -1 if waitforspace returns false
- and no bytes have been written so far.
- (fhandler_dev_dsp::Audio_out::waitforspace): Change return type to bool.
- Handle O_NONBLOCK. Make waiting loop interruptible and cancelable.
- Return false in any of these cases, otherwise true.
- (fhandler_dev_dsp::Audio_in::read): Set returned nBytes to -1 if
- waitfordata returns false and nothing has been read so far.
- (fhandler_dev_dsp::Audio_in::waitfordata): Change return type to bool.
- Handle O_NONBLOCK. Make waiting loop interruptible and cancelable.
- Return false in any of these cases, otherwise true.
- (fhandler_dev_dsp::write): Call Audio_out constructor with this as
- parameter.
- (fhandler_dev_dsp::read): Call Audio_in constructor with this as
- parameter.
-
-2011-05-04 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * thread.h (pthread::static_cancel_self): Mark as noreturn.
- (pthread::cancel_self): Ditto.
- * thread.cc (pthread::cancel_self): Explicitly use pthread::exit to
- avoid a "function returns" error.
-
-2011-05-04 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * pinfo.h (pinfo::pinfo): Set procinfo to NULL to avoid potential
- cleanup of uninitialized garbage. (Suggested by Ryan Johnson)
-
-2011-05-03 Corinna Vinschen <corinna@vinschen.de>
-
- * select.cc (cygwin_select): Make degenerate case cancelable.
- (select_stuff::destroy): New inline method to delete memory taken
- by select_stuff.
- (select_stuff::~select_stuff): Call destroy.
- (select_stuff::wait): Add case to allow canceling select.
- * select.h (select_stuff::destroy): Declare.
- * thread.cc: Mark poll, pselect and poll as cancelable.
-
-2011-05-03 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base_overlapped::wait_overlapped): Make
- cancelable. Remove test for main thread, always add signal_arrived
- to waited objects.
-
-2011-05-03 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_tty.cc (fhandler_tty_slave::read): Set WFMO timeout to 0 for
- nonblocking case. Drop useless waiter variable. Rewrite wait for
- input_available_event to use a switch statement. Handle timeout and
- failure more gracefully. Make restartable and cancelable. Rewrite
- wait for input_mutex to use WFMO and a switch statement. Handle
- timeout and failure more gracefully. Make restartable and cancelable.
-
-2011-05-02 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * signal.cc (_pinfo::kill): Avoid referencing 'pid' after ESRCH.
-
-2011-05-02 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * cygwin.din (pthread_attr_getstack): Export.
- (pthread_attr_getstackaddr): Export.
- (pthread_getattr_np): Export.
- * ntdll.h (enum _THREAD_INFORMATION_CLASS): Add ThreadBasicInformation.
- (struct _THREAD_BASIC_INFORMATION): Define.
- (NtQueryInformationThread): Declare.
- * posix.sgml (std-susv4): Add pthread_attr_getstack.
- (std-gnu): Add pthread_getattr_np.
- (std-deprec): Add pthread_attr_getstackaddr.
- (std-notimpl): Remove pthread_attr_[gs]etstackaddr, as they were
- removed from SUSv4.
- * thread.cc (pthread_attr::pthread_attr): Initialize stackaddr.
- (pthread_attr_getstack): New function.
- (pthread_attr_getstackaddr): New function.
- (pthread_attr_setstacksize): Return EINVAL if passed size less than
- PTHREAD_STACK_MIN, as required by POSIX.
- (pthread_getattr_np): New function.
- * thread.h (class pthread_attr): Add stackaddr member.
- * include/pthread.h (pthread_attr_getstack): Declare.
- (pthread_attr_getstackaddr): Declare unconditionally.
- (pthread_attr_setstack): Declare inside false conditional for reference.
- (pthread_getattr_np): Declare.
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
-
-2011-05-02 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * Makefile.in: Allow CFLAGS to be overridden from the environment.
-
-2011-05-02 Corinna Vinschen <corinna@vinschen.de>
-
- * thread.cc (cancelable_wait): Remove test for main thread.
- * fhandler_fifo.cc (fhandler_fifo::open_nonserver): Ditto.
-
-2011-05-02 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_tty.cc (andler_pty_master::process_slave_output): Make
- interruptible and cancelable. Fix nonblocking case.
-
-2011-05-02 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_console.cc (fhandler_console::read): Make restartable and
- cancelable.
-
-2011-05-02 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * strace.cc (strace::vprntf): Avoid closing unopened handle.
-
-2011-05-02 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * sysconf.cc (sca): Set _SC_SPIN_LOCKS to _POSIX_SPIN_LOCKS.
-
-2011-05-02 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * dll_init.cc (dll_list::alloc): Reset 'p' in forked process.
-
- * select.cc (select_stuff::wait): Move cleanup() closer to WFMO to
- minimize unavoidable (?) race.
-
-2011-05-02 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_serial.cc (fhandler_serial::raw_read): Add restartability
- after a signal. Add cancelability.
- (fhandler_serial::raw_write): Wait for write to succeed if O_NONBLOCK
- is not set. Add signal handling and cancelability.
-
-2011-05-01 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_windows.cc (fhandler_windows::read): Use
- pthread::get_cancel_event to fetch thread's cancel event.
- * flock.cc (lf_setlock): Ditto.
- * posix_ipc.cc (ipc_cond_timedwait): Ditto.
- * thread.cc (pthread::get_cancel_event): New static method.
- * thread.h (pthread::get_cancel_event): Declare.
-
-2011-05-01 Corinna Vinschen <corinna@vinschen.de>
-
- * libc/minires-os-if.c (get_dns_info): Remove unnecessary test for
- existence of DnsQuery_A.
-
-2011-05-01 Corinna Vinschen <corinna@vinschen.de>
-
- Throughout, use user32 UNICODE functions rather than ANSI functions.
- * autoload.cc: Convert all definitions for ANSI user32 functions to
- definitions for the corresponding UNICODE function.
- (SendMessageA): Remove.
- (SendNotifyMessageW): Define.
- * fhandler.h (fhandler_windows::is_slow): Remove.
- * fhandler_windows.cc (fhandler_windows::write): Use SendNotifyMessageW
- call rather than SendMessage to make function always return immediately.
- (fhandler_windows::read): Make function interruptible and a cancellation
- point. Handle O_NONBLOCK.
- * select.cc (peek_serial): Don't wait for signal_arrived here.
- * window.cc (wininfo::winthread): Call CreateWindowExW directly rather
- than CreateWindow wrapper.
-
-2011-05-01 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (fdsock): Drop setting uninterruptible_io to true.
-
-2011-05-01 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (fhandler_socket::is_slow): Remove.
-
-2011-04-30 Corinna Vinschen <corinna@vinschen.de>
-
- * fcntl.cc (fcntl64): Call pthread_testcancel.
- * fhandler_socket.cc (fhandler_socket::connect): Ditto.
- (fhandler_socket::accept4): Ditto.
- (fhandler_socket::recvfrom): Ditto.
- (fhandler_socket::recvmsg): Ditto.
- (fhandler_socket::sendto): Ditto.
- (fhandler_socket::sendmsg): Ditto.
- * flock.cc (lf_setlock): Allow to cancel thread running blocking
- file lock. Try to make code more readable.
- (lockf): Call pthread_testcancel.
- * mmap.cc (msync): Ditto.
- * posix_ipc.cc (ipc_cond_timedwait): Call pthread::static_cancel_self
- rather than pthread_testcancel.
- * select.cc (cygwin_select): Call pthread_testcancel.
- * syscalls.cc (pread): Ditto.
- (pwrite): Ditto.
- (readv): Ditto.
- (writev): Ditto.
- (open): Ditto.
- (close): Ditto.
- (fsync): Ditto.
- * termios.cc (tcdrain): Ditto.
- * thread.cc: Align list of cancellation points with above changes.
- Mark not-implemented functions, too.
- (cancelable_wait): Don't set unused object indices to WAIT_FAILED
- since that could result in wrong behaviour. Set them to the invalid
- value WAIT_TIMEOUT + 1 instead.
-
-2011-04-30 Corinna Vinschen <corinna@vinschen.de>
-
- * thread.h (class pthread): Add bool member canceled.
- * thread.cc (pthread::pthread): Initialize canceled to false.
- (pthread::cancel): Set canceled before setting cancel_event.
- (pthread::testcancel): Check for canceled. Only wait for cancel_event
- if canceled is true. Explain why.
- (pthread::_fixup_after_fork): Set canceled to false.
-
-2011-04-29 Corinna Vinschen <corinna@vinschen.de>
-
- * errno.cc (errmap): Sort. Map ERROR_EXE_MACHINE_TYPE_MISMATCH to
- ENOEXEC.
-
-2011-04-29 Corinna Vinschen <corinna@vinschen.de>
-
- * thread.cc: Update comment listing cancellation points per POSIX.
-
-2011-04-29 Corinna Vinschen <corinna@vinschen.de>
-
- * advapi32.cc: Add comment.
- (EqualSid): Remove.
- (CopySid): Remove.
- (AddAccessAllowedAce): Remove.
- (AddAccessDeniedAce): Remove.
- (MakeSelfRelativeSD): Remove.
- * flock.cc: Replace above functions throughout with their ntdll.dll
- equivalent.
- * sec_acl.cc: Ditto.
- * sec_auth.cc: Ditto.
- * sec_helper.cc: Ditto.
- * security.cc: Ditto.
- * security.h: Ditto.
- (RtlEqualSid): Declare. Explain why.
- (RtlCopySid): Ditto.
-
-2011-04-29 Corinna Vinschen <corinna@vinschen.de>
-
- * advapi32.cc (AccessCheck): Remove.
- (PrivilegeCheck): Remove.
- (OpenThreadToken): Remove.
- * fhandler_tty.cc: Replace above functions throughout with their
- ntdll.dll equivalent.
- * security.cc: Ditto.
-
-2011-04-29 Corinna Vinschen <corinna@vinschen.de>
-
- * ntdll.h (IsEventSignalled): New inline function.
- * cygthread.cc (cygthread::terminate_thread): Use IsEventSignalled in
- place of WaitForSingleObject on event with 0 timeout.
- * fhandler.cc (fhandler_base_overlapped::has_ongoing_io): Ditto.
- * fhandler_fifo.cc (fhandler_fifo::open_nonserver): Ditto.
- (fhandler_fifo::wait): Ditto.
- * fhandler_termios.cc (fhandler_termios::bg_check): Ditto.
- * select.cc (verify_tty_slave): Ditto.
- * thread.cc (pthread::testcancel): Ditto.
-
-2011-04-29 Corinna Vinschen <corinna@vinschen.de>
-
- * advapi32.cc (GetTokenInformation): Remove.
- (SetTokenInformation): Remove.
- * grp.cc: Replace above functions throughout with their ntdll.dll
- equivalent.
- * sec_auth.cc: Ditto.
- * syscalls.cc: Ditto.
- * uinfo.cc: Ditto.
-
-2011-04-29 Corinna Vinschen <corinna@vinschen.de>
-
- * posix_ipc.cc (ipc_cond_timedwait): Only wait for pthread's
- cancel_event if thread's cancelability isn't disabled.
-
-2011-04-28 Corinna Vinschen <corinna@vinschen.de>
-
- * advapi32.cc (SetSecurityDescriptorDacl): Remove.
- (SetSecurityDescriptorGroup): Remove.
- (SetSecurityDescriptorOwner): Remove.
- * pinfo.cc: Replace above functions throughout with their ntdll.dll
- equivalent.
- * sec_acl.cc: Ditto.
- * sec_helper.cc: Ditto.
- * security.cc: Ditto.
-
- * sec_helper.cc (__sec_user): Remove old comment.
-
-2011-04-28 Corinna Vinschen <corinna@vinschen.de>
-
- * posix_ipc.cc (ipc_cond_timedwait): Also wait for pthread's
- cancel_event, if any. Call pthread_testcancel if cancel_event has been
- signalled.
-
-2011-04-28 Corinna Vinschen <corinna@vinschen.de>
-
- * posix_ipc.cc (ipc_cond_timedwait): Remove pthread_testcancel calls.
- (_mq_send): Add pthread_testcancel call at start of function.
- (_mq_receive): Ditto.
-
-2011-04-28 Corinna Vinschen <corinna@vinschen.de>
-
- * cygerrno.h (geterrno_from_nt_status): Declare.
- * errno.cc (geterrno_from_nt_status): Define.
- * flock.cc: Fix copyright dates.
- * ntdll.h (enum _TIMER_TYPE): Define.
- (PTIMER_APC_ROUTINE): Define.
- (NtCancelTimer): Declare.
- (NtCreateTimer): Declare.
- (NtSetTimer): Declare.
- * posix_ipc.cc (ipc_cond_timedwait): Rewrite to make interruptible and
- restartable. Call pthread_testcancel in case of timeout to enable
- pthread_cancel on waiting thread. Replace WFMO timeout with waiting
- for a waitable timer. Explain why. Replace single call to WFMO with
- two calls, one for the event, one for the mutex. Don't lock mutex in
- case of error.
- (ipc_cond_signal): Make void function.
- (ipc_cond_close): Ditto.
- (_mq_send): Immediately return -1 in case of error from
- ipc_cond_timedwait.
- (_mq_receive): Ditto.
-
-2011-04-28 Corinna Vinschen <corinna@vinschen.de>
-
- * advapi32.cc (GetSecurityDescriptorDacl): Remove.
- (GetSecurityDescriptorGroup): Remove.
- (GetSecurityDescriptorOwner): Remove.
- * sec_acl.cc: Replace above functions throughout with their ntdll.dll
- equivalent. Remove redundant debug output.
- * sec_auth.cc: Ditto.
- * security.cc: Ditto.
- * uinfo.cc: Ditto.
-
-2011-04-28 Corinna Vinschen <corinna@vinschen.de>
-
- * advapi32.cc (InitializeAcl): Remove.
- (AddAce): Remove.
- (FindFirstFreeAce): Remove.
- (GetAce): Remove.
- (InitializeSecurityDescriptor): Remove.
- (OpenProcessToken): Remove.
- * dcrt0.cc: Replace above functions throughout with their ntdll.dll
- equivalent.
- * fhandler_tty.cc: Ditto.
- * flock.cc: Ditto.
- * pinfo.cc: Ditto. Drop unnecessary error handling.
- * sec_acl.cc: Ditto.
- * sec_auth.cc: Ditto.
- * sec_helper.cc: Ditto.
- * security.cc: Ditto.
-
-2011-04-28 Corinna Vinschen <corinna@vinschen.de>
-
- * advapi32.cc (InitializeSid): Remove.
- (EqualPrefixSid): Remove.
- (GetLengthSid): Remove.
- (GetSidSubAuthority): Remove.
- (GetSidSubAuthorityCount): Remove.
- (GetSidIdentifierAuthority): Remove.
- * fhandler_disk_file.cc: Replace above functions throughout with their
- ntdll.dll equivalent.
- * sec_auth.cc: Ditto.
- * sec_helper.cc: Ditto.
- * security.cc: Ditto.
-
-2011-04-28 Corinna Vinschen <corinna@vinschen.de>
-
- * advapi32.cc (AllocateLocallyUniqueId): Remove.
- * fhandler_disk_file.cc (fhandler_base::open_fs): Replace call to
- AllocateLocallyUniqueId with call to NtAllocateLocallyUniqueId;
- * posix_ipc.cc (mq_open): Ditto. Drop error handling for that call.
- (sem_open): Ditto.
-
-2011-04-28 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (GetSecurityInfo): Remove.
- * ntdll.h (RtlConvertToAutoInheritSecurityObject): Declare.
- (RtlDeleteSecurityObject): Declare.
- (RtlGetControlSecurityDescriptor): Declare.
- (RtlLengthSecurityDescriptor): Declare.
- * security.cc (file_mapping): New global variable.
- (get_file_sd): Rewrite. Clean up code. Get rid of GetSecurityInfo
- call.
- (alloc_sd): Call RtlSetControlSecurityDescriptor to set
- SE_DACL_PROTECTED flag.
- (check_file_access): Remove mapping. Use file_mapping instead.
- (check_registry_access): Rename mapping to reg_mapping.
- * wincap.cc: Througout, drop use_get_sec_info_on_dirs,
- * wincap.h (struct wincaps): Drop use_get_sec_info_on_dirs.
-
-2011-04-24 Corinna Vinschen <corinna@vinschen.de>
-
- * include/fenv.h: Add missing _FENV_H_ define.
-
-2011-04-23 Corinna Vinschen <corinna@vinschen.de>
-
- * registry.cc (reg_key::get_dword): Rename from get_int, use DWORD
- rather than int type. Avoid compiler warning.
- (reg_key::set_dword): Rename from set_int, use DWORD rather than int
- type. Change return type to NTSTATUS.
- (reg_key::get_string): Change return type to NTSTATUS.
- (reg_key::set_string): Ditto.
- * registry.h: Accommodate above changes.
- * environ.cc (regopt): Test return value of reg_key::get_string as
- NTSTATUS.
- * sched.cc (sched_rr_get_interval): Change local int vars to DWORD.
- Call reg_key::get_dword instead of reg_key::get_int.
- * shared.cc (init_installation_root): Test return value of
- reg_key::get_string as NTSTATUS.
- (shared_info::heap_slop_size): Call reg_key::get_dword rather than
- reg_key::get_int.
- (shared_info::heap_chunk_size): Ditto.
- * shared_info.h (CURR_SHARED_MAGIC): Update.
- (class shared_info): Change heap_chunk and heap_slop to DWORD values.
-
-2011-04-21 Corinna Vinschen <corinna@vinschen.de>
-
- * cygtls.cc (_cygtls::init_thread): Drop setting locals.process_logmask.
- * cygtls.cc (_cygtls::remove): Always free mallocated TLS storage on
- thread exit. Drop freeing locals.process_ident.
- * cygtls.h (struct _local_storage): Remove syslog-related members.
- * syslog.cc (syslog_globals): New static storage for global syslog
- settings. Use throughout instead of _my_tls.locals.
- (openlog): Set new syslog_globals.process_ident value more carefully.
- * tlsoffsets.h: Regenerate.
-
-2011-04-21 Thomas Stalder <cygwinml@gmail.com>
-
- * include/sys/poll.h: Include signal.h to get definition of sigset_t.
-
-2011-04-20 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * cygheap.cc (init_cygheap::close_ctty): Avoid closing console-cttys
- since they don't use archetypes and this will just result in double
- frees.
- * dll_init.cc (dll_list::protect): Define.
- (dll_list::alloc): Guard list access.
- (dll_list::detach): Ditto.
- * dll_init.h (dll_list::protect): Declare new muto.
- (dll_list::guard): Define/declare function to guard list access.
- * fhandler_termios.cc (fhandler_termios::sigflush): Avoid SEGV in
- pathological condition of get_ttyp() == NULL.
-
-2011-04-20 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * select.cc (serial_cleanup): Make sure that device_specific_pipe is
- always deleted regardless of whether it has a unique thread associated
- with it
- (socket_cleanup): Ditto.
- (mailslot_cleanup): Ditto.
-
-2011-04-20 Corinna Vinschen <corinna@vinschen.de>
-
- * devices.h: Renumber internal devices so that FH_PROCESS is part of
- the /proc family of virtual devices.
- (FH_PROC_MAX_MINOR): Define.
- * path.h (isproc_dev): Use FH_PROC_MAX_MINOR rather than FH_PROC.
-
-2011-04-19 Peter Rosin <peda@lysator.liu.se>
-
- * select.cc (pipe_cleanup): Make sure that device_specific_pipe is
- always deleted regardless of whether it has a unique thread associated
- with it.
-
-2011-04-19 Jon TURNEY <jon.turney@dronecode.org.uk>
-
- * thread.cc (semaphore::init): We cannot reliably infer anything from
- the existing contents of sem, so merely warn rather than return EBUSY
- if it looks like we are reinitialising a semaphore.
-
-2011-04-19 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (GetConsoleWindow): Drop.
- (GetSystemWindowsDirectoryW): Drop.
- * fhandler_console.cc (beep): Call GetSystemWindowsDirectoryW instead of
- GetWindowsDirectoryW.
- * uinfo.cc (cygheap_user::env_systemroot): Call
- GetSystemWindowsDirectoryW and convert to multibyte on the fly.
- * winlean.h (GetWindowsDirectoryW): Redefine to something invalid.
- Explain why.
-
-2011-04-19 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (DLL_IMPORTS): Drop advapi32.dll.
- * autoload.cc: Enable autoloading advapi32 functions.
- * environ.cc (regopt): Use wide char arguments in reg_key functions.
- * fhandler_console.cc (beep): Ditto. Use WCHAR throughout.
- * registry.cc (reg_key): Rewrite reg_key class to use native NT registry
- functions. Use WCHAR string parameters throughout. Use PCWSTR rather
- than const WCHAR. Drop multibyte char functionality. Drop unused
- methods.
- (get_registry_hive_path): Use RtlQueryRegistryValues to fetch path from
- registry.
- (load_registry_hive): Drop useless check for user hive being available.
- Load hive using NtLoadKey.
- * registry.h: Accommodate above changes.
- * sched.cc (sched_rr_get_interval): Use wide char arguments in reg_key
- functions.
- * shared.cc (init_installation_root): Ditto.
- (shared_info::init_obcaseinsensitive): Use RtlQueryRegistryValues to
- fetch obcaseinsensitive value.
- (shared_info::heap_slop_size): Use wide char arguments in reg_key
- functions.
- (shared_info::heap_chunk_size): Ditto.
- * syscalls.cc (gethostid): Ditto.
- * winsup.h (__WIDE): Define.
- (_WIDE): Define.
- * libc/minires-os-if.c (get_registry_dns_items): Don't fetch values
- from registry. Just extract them from given UNICODE_STRING parameter.
- (get_registry_dns): Fetch all registry values at once using
- RtlQueryRegistryValues.
-
-2011-04-19 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (get_ipv4fromreg_ipcnt): Rearrange to fetch all registry
- values at once using RtlQueryRegistryValues.
- (get_ipv4fromreg): Ditto.
-
-2011-04-19 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_registry.cc (fhandler_registry::fstat): Use RegQueryInfoKeyW.
-
-2011-04-19 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_proc.cc (read_value): Remove definition.
- (print): Simplify.
- (format_proc_cpuinfo): Drop useless call to GetSystemInfo. Rearrange
- to use Rtl registry functions. Rename dwOldThreadAffinityMask to
- orig_affinity_mask.
-
-2011-04-18 Corinna Vinschen <corinna@vinschen.de>
-
- * localtime.cc (tzload): Don't change global timezone information
- when called from gmtime or gmtime_r.
- (tzparse): Ditto.
-
-2011-04-18 Corinna Vinschen <corinna@vinschen.de>
-
- * cygtls.cc (_cygtls::remove): Always close sockevt handle.
-
-2011-04-18 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din (ppoll): Export.
- * poll.cc (ppoll): Implement.
- * posix.sgml (std-gnu): Add ppoll.
- * include/cygwin/version.h: Bump API minor number.
- * include/sys/poll.h (ppoll): Declare.
-
-2011-04-18 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::evaluate_events): Handle the
- FD_CLOSE event specially when called from accept. Explain why.
- (fhandler_socket::shutdown): Fake success on not-connected socket and
- trigger socket event if the read side of a socket is affected. Explain
- why.
- * poll.cc (poll): Check for saw_shutdown_read on sockets to generate
- POLLHUP as well.
-
-2011-04-18 Corinna Vinschen <corinna@vinschen.de>
-
- * Fix various copyrights.
-
-2011-04-17 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * signal.cc (_pinfo::kill): Set this_process_state when process
- exists.
-
-2011-04-17 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * signal.cc (_pinfo::kill): Return 0 when attempting to test for
- existence of an existed process which has not yet been reaped.
-
-2011-04-17 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * cygheap.h (init_cygheap::ctty): Use base class so that console can
- join in the fun.
- * dtable.cc (dtable::stdio_init): Remove special-case call to
- set_console_ctty ().
- * exceptions.cc (sigpacket::process): Conditionally flush terminal
- input on certain signals.
- * fhandler.h (fhandler_console::get_tty_stuff): Make non-static.
- (fhandler_termios::get_ttyp): Move here.
- (fhandler_termios::sigflush): Declare.
- (fhandler_tty_common::get_ttyp): Delete.
- * fhandler_console.cc (fhandler_console::get_tty_stuff): Pass this as
- "arch" argument.
- (set_console_ctty): Delete.
- (tty_list::get_tty): Just return pointer to shared console region,
- delaying get_tty_stuff until open().
- (fhandler_console::init): Treat NULL handle as signifying that console
- should be opened with O_NOCTTY flag. Rename handle argument to the
- more common 'h'.
- * fhandler_termios.cc (fhandler_termios::sigflush): Define.
- * fhandler_tty.cc (handler_tty_master::init_console): Pass NULL as
- first argument to fhandler_console::init.
- * pinfo.cc (_pinfo::set_ctty): Change third parameter to
- fhandler_termios *. Add extra debugging.
- * pinfo.h (_pinfo::set_ctty): Change third parameter to
- fhandler_termios *.
-
- * exceptions.cc (handle_sigsuspend): Don't special-case non-main threads.
-
-2011-04-15 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * thread.cc (pthread_setschedprio): New function.
- * include/pthread.h (pthread_setschedprio): Declare.
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
- * cygwin.din (pthread_setschedprio): Export.
- * posix.sgml (std-notimpl) Move pthread_setschedprio from here...
- (std-susv4) ...to here.
-
-2011-04-10 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * fhandler_proc.cc (proc_tab): Add /proc/swaps virtual file.
- (format_proc_swaps): New function.
-
-2011-04-06 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * Makefile.in: Move srcdir definition before others which uses it.
-
-2011-04-06 Jon TURNEY <jon.turney@dronecode.org.uk>
-
- * dll_init.cc (reserve_at, release_at): New functions.
- (load_after_fork): If the DLL was loaded higher than the required
- address, assume that it loaded at it's base address and also reserve
- memory there to force it to be relocated.
-
-2011-04-04 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * include/cygwin/types.h: Move #include <sys/sysmacros.h> to
- end of header so that it gets the dev_t typedef.
- * include/sys/sysmacros.h (gnu_dev_major, gnu_dev_minor,
- gnu_dev_makedev): Prototype and define as inline functions.
- (major, minor, makedev): Redefine in terms of gnu_dev_*.
-
-2011-04-04 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * include/cygwin/types.h: Move multiple inclusion guards to
- beginning and end of header.
-
-2011-04-04 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * Makefile.in: Move Makefile.common include earlier to fix problems
- with relative ${srcdir} path which confuses make.
-
-2011-04-04 Corinna Vinschen <corinna@vinschen.de>
-
- Drop NT4 support.
- * autoload.cc (DnsQuery_A): Fatal if not available.
- (DnsRecordListFree): Ditto.
- (DsGetDcNameW): Ditto.
- (NetGetAnyDCName): Remove.
- (NetGetDCName): Remove.
- (EnumProcessModules): Fatal if not available.
- (GetModuleFileNameExW): Ditto.
- (GetModuleInformation): Ditto.
- (GetProcessMemoryInfo): Ditto.
- (QueryWorkingSet): Ditto.
- (LsaRegisterLogonProcess): Ditto.
- * fenv.cc (_feinitialise): Drop supports_sse condition.
- * fhandler_disk_file.cc (path_conv::isgood_inode): Fix comment.
- (fhandler_base::fstat_by_name): Drop has_fileid_dirinfo condition.
- (fhandler_disk_file::opendir): Ditto.
- * fhandler_netdrive.cc (fhandler_netdrive::readdir): Fix comment.
- * fhandler_proc.cc (format_proc_partitions): Drop NT4-only code.
- * fhandler_process.cc (get_process_state): Ditto.
- * kernel32.cc (GetWindowsDirectoryW): Remove.
- (GetWindowsDirectoryA): Remove.
- * miscfuncs.cc (nice_to_winprio): Drop NT4-only code.
- * mount.cc (fs_info::update): Fix comments.
- * net.cc (get_2k_ifs): Drop NT4-only code.
- * sec_auth.cc (get_logon_server): Ditto.
- (lsaauth): Drop NT4-specific error handling.
- * security.cc (alloc_sd): Set SE_DACL_PROTECTED unconditionally.
- * select.cc (select_stuff::wait): Always use MWMO_INPUTAVAILABLE.
- (peek_windows): Drop NT4-only condition in call to PeekMessage.
- * syscalls.cc (gethostid): Remove NT4-only workaround.
- * wincap.cc: Througout, drop has_dacl_protect,
- has_broken_if_oper_status, has_process_io_counters,
- has_terminal_services, has_extended_priority_class, has_guid_volumes,
- has_fileid_dirinfo, has_mwmo_inputavailable and supports_sse from
- wincaps.
- (wincap_nt4sp4): Remove.
- (wincap_minimal): Set to wincap_2000.
- (wincapc::init): Rely on availability of OSVERSIONINFOEX structure.
- Treat error from GetVersionEx as fatal. Treat NT4 as fatal.
- * wincap.h (struct wincaps): Drop has_dacl_protect,
- has_broken_if_oper_status, has_process_io_counters,
- has_terminal_services, has_extended_priority_class, has_guid_volumes,
- has_fileid_dirinfo, has_mwmo_inputavailable and supports_sse flags
- and methods.
- * winlean.h (GetWindowsDirectoryW) Define as GetSystemWindowsDirectoryW.
- (GetWindowsDirectoryA): Define as GetSystemWindowsDirectoryA.
-
-2011-04-04 Corinna Vinschen <corinna@vinschen.de>
-
- * dtable.cc (dtable::init_std_file_from_handle): Fix a comment to
- reflect the current state.
-
-2011-04-04 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * Makefile.in (fhandler_proc_CFLAGS): Define USERNAME, HOSTNAME,
- and GCC_VERSION.
- * fhandler_proc.cc (format_proc_version): Add build machine and GCC
- version information as on Linux.
-
-2011-04-04 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
- Corinna Vinschen <corinna@vinschen.de>
-
- * devices.h (fh_devices): Define FH_PROC_MIN_MINOR.
- Reorder major-0 devices so that all /proc directories fall
- between FH_PROC and FH_PROC_MIN_MINOR.
- * path.h (isproc_dev): Redefine accordingly.
-
-2011-04-04 Corinna Vinschen <corinna@vinschen.de>
-
- * cygserver_setpwd.h (setlsapwd): Add username parameter to declaration.
- * external.cc (cygwin_internal): In the CW_SET_PRIV_KEY case, fetch
- additional username parameter.
- * setlsapwd.cc (setlsapwd): Add username parameter. Allow admin to
- set the hidden password for other users.
-
-2011-04-04 Corinna Vinschen <corinna@vinschen.de>
-
- * sec_auth.cc (get_user_groups): Mark well-known groups as well-known.
- (get_user_local_groups): Ditto.
- (verify_token): Drop useless label.
- * sec_helper.cc (cygsid::get_sid): Check for well-known SID if
- well_known isn't set.
- * security.h (well_known_sid_type): New inline function.
-
-2011-04-02 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (FindFirstVolumeA): Remove.
- (FindNextVolumeA): Remove.
- (FindVolumeClose): Remove.
- (GetVolumeNameForVolumeMountPointA): Remove.
- * ntdll.h (NtFlushBuffersFile): Declare.
- * syscalls.cc (sync_worker): Rewrite using native NT functions.
- (sync): Ditto.
-
-2011-04-02 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_proc.cc (format_proc_partitions): Express length in WCHAR
- size.
-
-2011-04-02 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (GetExtendedTcpTable): Remove.
- (GetTcpTable): Remove.
- (CharNextExA): Remove.
- (FindWindowA): Remove.
- (ShowWindowAsync): Remove.
- * dcrt0.cc (disable_dep): Remove unused function.
- (dll_crt0_0): Drop comment babbling about TS & DEP.
- * fhandler_socket.cc (address_in_use): Remove unused function.
- * wincap.cc: Throughout, drop ts_has_dep_problem from wincaps.
- (wincapc::init): Drop code setting ts_has_dep_problem flag.
- * wincap.h (struct wincaps): Drop ts_has_dep_problem flags and method.
-
-2011-04-01 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- Implement /proc/sysvipc/*
- * devices.in (dev_procsysvipc_storage): Add.
- * devices.cc: Regenerate.
- * devices.h (fh_devices): Add FH_PROCSYSVIPC.
- * dtable.cc (build_fh_pc): Add case FH_PROCSYSVIPC.
- * fhandler.h (class fhandler_procsysvipc): Declare.
- (fhandler_union): Add __procsysvipc.
- * fhandler_proc.cc (proc_tab): Add sysvipc virt_directory.
- * fhandler_procsysvipc.cc: New file.
- * Makefile.in (DLL_OFILES): Add fhandler_procsysvipc.o.
- * path.h (isproc_dev): Add FH_PROCSYSVIPC to conditional.
-
-2011-04-01 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (DLL_OFILES): Add avapi32.o.
- * advapi32.cc: New file.
- * autoload.cc: Add block of remaining advapi32 functions used by
- Cygwin. Keep commented out. Explain why.
-
-2011-04-01 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * fhandler_proc.cc (format_proc_loadavg): Add running/total
- processes as fourth component of output.
- * fhandler_process.cc (get_process_state): Make non-static.
- Add FIXME about generating an 'O' flag.
-
-2011-04-01 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_random.cc (fhandler_dev_random::crypt_gen_random):
- Use CryptAcquireContextW.
- * ntdll.h (STATUS_PROCEDURE_NOT_FOUND): Define.
- * sec_auth.cc (open_local_policy): Rename NTSTATUS variable ret to
- status. Drop usage of LsaNtStatusToWinError.
- (verify_token): Call NtQuerySecurityObject instead of
- GetKernelObjectSecurity.
- (create_token): Rename NTSTATUS variable ret to status. Rename ret2 to
- sub_status. Drop usage of LsaNtStatusToWinError. In case LsaLogonUser
- fails, report the sub_status as well.
-
-2011-04-01 Corinna Vinschen <corinna@vinschen.de>
-
- * libc/strptime.c: Remove misleading comment.
-
-2011-03-31 Corinna Vinschen <corinna@vinschen.de>
-
- * ntdll.h: Allow usage from plain C code.
- (FSCTL_PIPE_IMPERSONATE): Define.
- (enum _THREAD_INFORMATION_CLASS): Define.
- (RTL_QUERY_REGISTRY_xxx): Define.
- (RTL_REGISTRY_xxx): Define.
- (PRTL_QUERY_REGISTRY_ROUTINE): Define.
- (struct _RTL_QUERY_REGISTRY_TABLE): Define.
- (enum _KEY_VALUE_INFORMATION_CLASS): Define.
- (struct _KEY_VALUE_PARTIAL_INFORMATION): Define.
- (NtAccessCheck): Declare.
- (NtAllocateLocallyUniqueId): Declare.
- (NtCreateKey): Declare.
- (NtDuplicateToken): Declare.
- (NtLoadKey): Declare.
- (NtOpenKey): Declare.
- (NtOpenProcessToken): Declare.
- (NtOpenThreadToken): Declare.
- (NtPrivilegeCheck): Declare.
- (NtQueryInformationToken): Declare.
- (NtQueryValueKey): Declare.
- (NtSetInformationThread): Declare.
- (NtSetInformationToken): Declare.
- (NtSetValueKey): Declare.
- (RtlAbsoluteToSelfRelativeSD): Declare.
- (RtlAddAccessAllowedAce): Declare.
- (RtlAddAccessDeniedAce): Declare.
- (RtlAddAce): Declare.
- (RtlCheckRegistryKey): Declare.
- (RtlCopySid): Declare.
- (RtlCreateAcl): Declare.
- (RtlCreateRegistryKey): Declare.
- (RtlCreateSecurityDescriptor): Declare.
- (RtlEqualPrefixSid): Declare.
- (RtlEqualSid): Declare.
- (RtlFirstFreeAce): Declare.
- (RtlGetAce): Declare.
- (RtlGetDaclSecurityDescriptor): Declare.
- (RtlGetGroupSecurityDescriptor): Declare.
- (RtlGetOwnerSecurityDescriptor): Declare.
- (RtlIdentifierAuthoritySid): Declare.
- (RtlInitializeSid): Declare.
- (RtlLengthSid): Declare.
- (RtlQueryRegistryValues): Declare.
- (RtlSetControlSecurityDescriptor): Declare.
- (RtlSetDaclSecurityDescriptor): Declare.
- (RtlSetGroupSecurityDescriptor): Declare.
- (RtlSetOwnerSecurityDescriptor): Declare.
- (RtlSubAuthorityCountSid): Declare.
- (RtlSubAuthoritySid): Declare.
- (RtlWriteRegistryValue): Declare.
-
-2011-03-31 Corinna Vinschen <corinna@vinschen.de>
-
- * uinfo.cc (cygheap_user::init): Don't call GetUserName. Fetch username
- from Windows environment instead. Explain why.
- (cygheap_user::env_domain): Use MAX_DOMAIN_NAME_LEN rather than DNLEN
- to specify the size of the domain name buffer.
-
-2011-03-30 Corinna Vinschen <corinna@vinschen.de>
-
- * hires.h: Fix copyright.
- * times.cc: Ditto.
- (FACTOR): Add comment.
- (NSPERSEC): Ditto.
- (JITTER): New definition. Comment.
- (systime_ns): Avoid gratuitous copying of the value returned by
- GetSystemTimeAsFileTime.
- (corelocaltime, localtime, gmtime): Remove very old, unused code block.
- (cygwin_tzset): Remove.
- (hires_ms::timeGetTime_ns): Add missing semicolon in comment.
- (hires_ms::nsecs): Redefine check for difference between internal
- timer value and system time.
-
-2011-03-30 Corinna Vinschen <corinna@vinschen.de>
-
- * times.cc (hires_ms::resolution): Make sure resolution is never 0.
- (clock_setres): Ditto.
-
-2011-03-29 Corinna Vinschen <corinna@vinschen.de>
-
- * cygtls.h (struct _local_storage): Redefine process_ident as wchar_t
- pointer.
- * syslog.cc (CYGWIN_LOG_NAME): Convert to wide char constant.
- (openlog): Convert incoming ident string to wide char. Fix formatting.
- (vsyslog): Print ident string as wide char string. Convert message
- string to wide char and call UNICODE Win32 Event functions to make sure
- to use correct codeset.
- * tlsoffset.h: Regenerate.
-
-2011-03-29 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (get_inet_addr): Make externally available.
- * autoload.cc (GetUdpTable): Define.
- * syslog.cc (connect_syslogd): Use get_inet_addr rather than _stat64
- to check for local socket file. Create socket with type returned by
- get_inet_addr. If connect on UDP socket works, test if there's
- really a listening peer, otherwise fall back to Windows event log.
- (try_connect_syslogd): Use syslogd_inited flag to check if syslogd
- is available.
-
-2011-03-29 Corinna Vinschen <corinna@vinschen.de>
-
- * uinfo.cc (cygheap_user::env_domain): Use LookupAccountSidW and
- convert user and domain to multibyte strings to make sure to use
- correct codeset.
-
-2011-03-29 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (UuidCreate): Remove.
- (UuidCreateSequential): Remove.
- * passwd.cc (internal_getpwsid): Avoid a strict-aliasing compiler
- error with gcc 4.5.1.
- * fhandler_floppy.cc (fhandler_dev_floppy::get_drive_info): Ditto.
- * ntdll.h (NtAllocateUuids): Declare.
- * syscalls.cc (gethostid): Use NtAllocateUuids function rather than
- UuidCreateSequential/UuidCreate to get rid of rpcrt4 dependency.
-
-2011-03-29 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din (pthread_spin_destroy): Export.
- (pthread_spin_init): Export.
- (pthread_spin_lock): Export.
- (pthread_spin_trylock): Export.
- (pthread_spin_unlock): Export.
- * posix.sgml (std-susv4): Add pthread_spin_destroy, pthread_spin_init,
- pthread_spin_lock, pthread_spin_trylock, pthread_spin_unlock.
- (std-notimpl): Remove pthread_spin_[...].
- * pthread.cc (pthread_spin_init): New function.
- * thread.cc (pthread_spinlock::is_good_object): New function.
- (pthread_mutex::pthread_mutex): Rearrange initializers to accommodate
- protected data in pthread_mutex.
- (pthread_spinlock::pthread_spinlock): New constructor.
- (pthread_spinlock::lock): New method.
- (pthread_spinlock::unlock): New method.
- (pthread_spinlock::init): New method.
- (pthread_spin_lock): New function.
- (pthread_spin_trylock): New function.
- (pthread_spin_unlock): New function.
- (pthread_spin_destroy): New function.
- * thread.h (PTHREAD_SPINLOCK_MAGIC): Define.
- (class pthread_mutex): Change access level of members shared with
- derived classes to protected.
- (pthread_mutex::set_shared): New protected method.
- (class pthread_spinlock): New class, derived class of pthread_mutex.
- * include/pthread.h (pthread_spin_destroy): Declare.
- (pthread_spin_init): Declare.
- (pthread_spin_lock): Declare.
- (pthread_spin_trylock): Declare.
- (pthread_spin_unlock): Declare.
- * include/cygwin/types.h (pthread_spinlock_t): New typedef.
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
-
-2011-03-29 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (SIO_BASE_HANDLE): Define.
- (fdsock): If we got an LSP handle, try to create a copy of the base
- handle instead. Change comment to explain.
-
-2011-03-29 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/version.h: Bump CYGWIN_VERSION_DLL_MINOR to 10.
-
-2011-03-29 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (winmm): Remove time functions. Don't treat
- unloadable wave functions as fatal.
- * hires.h (hires_ms::timeGetTime_ns): New private method.
- (hires_ms::dmsecs): Call timeGetTime_ns here.
- * ntdll.h (struct _KSYSTEM_TIME): Define.
- (KUSER_SHARED_DATA): Redefine to allow access to InterruptTime.
- (SharedUserData): Define here.
- (NtQueryTimerResolution): Declare.
- (NtSetTimerResolution): Declare.
- * path.cc (SharedUserData): Move to ntdll.h.
- * times.cc (hires_ms::timeGetTime_ns): New private method.
- Use throughout instead of timeGetTime. Document entire functionality
- of timeGetTime in case we need it.
- (hires_ms::resolution): Try a call to NtQueryTimerResolution
- to fetch current period. Fall back to heuristic if that fails.
- Cast to DWORD in assignments to minperiod.
- (clock_setres): Align period to possible values per a call to
- NtQueryTimerResolution. Explain why. Replace calls to timeBeginPeriod
- and timeEndPeriod with underlying call to NtSetTimerResolution. Use
- status code from NtSetTimerResolution to compute errno.
- Convert period to ULONGLONG and store 100ns value to simplify code.
-
-2011-03-29 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
- Corinna Vinschen <corinna@vinschen.de>
-
- * include/sys/xattr.h: New file.
-
-2011-03-28 Jon TURNEY <jon.turney@dronecode.org.uk>
-
- * thread.cc (semaphore::init, destroy, close): Standards conformance
- fix. On a failure, return -1 and set errno.
- * thread.h (semaphore::terminate): Save errno since semaphore::close()
- may now modify it.
-
-2011-03-27 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * cygwin.din (strchrnul): Export.
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
- * posix.sgml (std-gnu): Add strchrnul.
-
-2011-03-27 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * dll_init.cc (dll::init): Accommodate ill-behaved dlls who don't fill
- out p.envptr.
-
-2011-03-25 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (mmap64): Add a cheat to let a certain autoconf test succeed
- on 64 bit systems. Explain why.
-
-2011-03-23 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * wincap.cc (wincap_2003): Set use_dont_resolve_hack to true.
-
-2011-03-23 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * autoload.cc (dll_load): Change error message to make it clear if a
- newer DLL is being run.
-
-2011-03-20 Corinna Vinschen <corinna@vinschen.de>
-
- * fenv.cc (_feinitialise): Don't use SSE instructions on systems not
- supporting them.
- * wincap.h (wincaps::supports_sse): New element.
- * wincap.cc: Implement above element throughout.
-
-2011-03-18 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.sc: Raise default cygheap size to 2 Megs.
-
-2011-03-18 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * fhandler.h (DEFAULT_PIPEBUFSIZE): Reset to 64K.
-
-2011-03-18 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (mmap_record::alloc_fh): Initialize name strings in fdev to
- empty strings or suffer a SEGV. Drop second parameter in call to
- build_fh_dev.
-
-2011-03-18 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (class mmap_record): Pack 4 byte-aligned. Convert member dev
- to plain int.
- (mmap_record::alloc_fh): Create temporary device from dev and use in
- call to build_fh_dev.
-
-2011-03-18 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (mmap_record::page_map): Define as variable array rather than
- as pointer.
- (mmap_record::alloc_page_map): Remove.
- (mmap_record::free_page_map): Remove.
- (mmap_record::init_page_map): New method.
- (mmap_record::add_record): Take mmap_record parameter by reference
- rather than by value.
- (mmap_record::map_pages): Fix comment.
- (mmap_list::add_record): Allocate space for mmap_record including the
- page_map in a single ccalloc call. Call init_page_map afterwards.
- (mmap_list::del_record): Remove call to mmap_record::free_page_map.
-
-2011-03-16 Corinna Vinschen <corinna@vinschen.de>
-
- * crt0.c (mainCRTStartup): Move call to _feinitialise from here...
- * dcrt0.cc (_dll_crt0): ...to here.
-
-2011-03-16 Corinna Vinschen <corinna@vinschen.de>
-
- * winver.rc: Fix copyright dates.
-
-2011-03-14 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_base::fstat_by_handle): Only use
- file id as inode number if it masters the isgood_inode check.
-
-2011-03-13 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * fhandler.cc (fhandler_base_overlapped::wait_overlapped): Remove
- special treatment for ERROR_NO_SYSTEM_RESOURCES. Cancel I/O and reset
- the overlapped handle on error.
- (fhandler_base_overlapped::write_overlapped): Limit writes to
- max_atomic_write bytes in blocking case. Incorporate code from
- now-defunct write_overlapped_fallback. Fix serious oversight where ptr
- was not advanced as buffer was written.
- (fhandler_base_overlapped::write_overlapped_fallback): Eliminate.
- * fhandler.h (fhandler_base_overlapped::write_overlapped_fallback):
- Ditto for declaration.
- (DEFAULT_PIPEBUFSIZE): Lower size to slightly less than documented
- worst-case atomic write size.
- (fhandler_overlapped::wait_return): Remove unused element.
-
-2011-03-09 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * fhandler.cc (fhandler_base_overlapped::wait_overlapped): Handle
- overlapped_fallback error condition like other error conditions. Set
- res carefully and specifically for each condition rather than resorting
- to a default.
- (fhandler_base_overlapped::write_overlapped): Preserve errno in
- overlapped_fallback condition. Correct write_overlapped_fallback to
- avoid inappropriate looping.
- (fhandler_base_overlapped::write_overlapped_fallback): Add some more
- comments.
-
-2011-03-09 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * fhandler.cc (fhandler_base_overlapped::write_overlapp): Oops!
- Accommodate change in arguments to wait_overlapped.
-
-2011-03-09 Christopher Faylor <me+cygwin@cgf.cx>
-
- * errno.cc (errmap): Change mapping of NO_SYSTEM_RESOURCES to EFBIG.
- * fhandler.cc (MAX_OVERLAPPED_WRITE_LEN): New constant.
- (MIN_OVERLAPPED_WRITE_LEN): Ditto.
- (fhandler_base_overlapped::close): Accommodate change in arguments to
- wait_overlapped.
- (fhandler_base_overlapped::setup_overlapped): Add __stdcall and regparm
- modifiers.
- (fhandler_base_overlapped::destroy_overlapped): Ditto.
- (fhandler_base_overlapped::has_ongoing_io): Ditto.
- (fhandler_base_overlapped::wait_overlapped): Modify to return an enum
- returning various states. Accept nonblocking parameter.
- (fhandler_base_overlapped::read_overlapped): Add __stdcall and regparm
- modifiers. Rework to attempt to be smarter about reacting to states
- returned by wait_overlapped.
- (fhandler_base_overlapped::write_overlapped): Ditto. Add fallback
- option for when wait_overlapped detects that smaller chunks must be
- written.
- (fhandler_base_overlapped::write_overlapped_fallback): Ditto.
- * fhandler.h (DEFAULT_PIPEBUFSIZE): Move definition here from pipe.cc.
- (fhandler_base::has_ongoing_io): Define with __stdcall and regparm
- modifiers.
- (fhandler_base_overlapped::wait_return): New enum.
- (fhandler_base_overlapped::max_atomic_write): New variable.
- (fhandler_base_overlapped:: wait_overlapped): Accommodate changes
- mentioned above to arguments and modifiers.
- (fhandler_base_overlapped::setup_overlapped): Ditto for modifiers.
- (fhandler_base_overlapped::read_overlapped): Ditto.
- (fhandler_base_overlapped::write_overlapped): Ditto.
- (fhandler_base_overlapped::destroy_overlapped): Ditto.
- (fhandler_base_overlapped::has_ongoing_io): Ditto.
- (fhandler_base_overlapped::fhandler_base_overlapped): Zero
- max_atomic_write.
- * fhandler_fifo.cc (fhandler_fifo::fhandler_fifo): Set max_atomic_write
- to the size of the DEFAULT_PIPEBUFSIZE.
- (fhandler_fifo::wait): Accommodate change in arguments to
- wait_overlapped.
- * pipe.cc (fhandler_pipe::fhandler_pipe): Set max_atomic_write to the
- size of the DEFAULT_PIPEBUFSIZE.
- (fhandler_pipe::create_selectable): Allow minimum size of DEFAULT_PIPEBUFSIZE.
- (DEFAULT_PIPEBUFSIZE): Delete here, move to fhandler.h.
-
-2011-03-08 Corinna Vinschen <corinna@vinschen.de>
-
- * security.cc: Fix copyright dates.
-
-2011-03-08 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::open): When creating a file on a
- filesystem supporting ACLs, create the file with WRITE_DAC access.
- Explain why.
- * fhandler_disk_file.cc (fhandler_disk_file::mkdir): Ditto for
- directories.
- * fhandler_socket.cc (fhandler_socket::bind): Ditto for sockets.
- * path.cc (symlink_worker): Ditto for symlinks.
- * security.cc (get_file_sd): Always call GetSecurityInfo for directories
- on XP and Server 2003. Improve comment to explain why.
- (set_file_attribute): Explicitely cast mode_t value to bool in call to
- get_file_sd.
- * wincap.h (wincaps::use_get_sec_info_on_dirs): New element.
- * wincap.cc: Implement above element throughout.
-
-2011-03-04 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_procsys.cc (fhandler_procsys::exists): Rewrite.
- (fhandler_procsys::fill_filebuf): Fill buffer with valid string even if
- reading the symlink fails.
-
-2011-03-03 Corinna Vinschen <corinna@vinschen.de>
-
- * posix_ipc.cc (ipc_cond_timedwait): If ipc_mutex_unlock fails, return
- actual error number.
- (_mq_send): Break loop if ipc_cond_timedwait returns with error.
- (_mq_receive): Ditto.
-
-2011-03-03 Corinna Vinschen <corinna@vinschen.de>
-
- * errno.cc (__xpg_strerror_r): Add accidentally missing condition.
-
-2011-03-02 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_procsys.cc (fhandler_procsys::open): Call worker exists
- method, rather than wrapper.
-
-2011-03-01 Christopher Faylor <me+cygwin@cgf.cx>
-
- * autoload.cc (dll_load): Avoid in_forkee test since this apparently
- fails even when not forked.
-
-2011-03-01 Christopher Faylor <me+cygwin@cgf.cx>
-
- * include/cygwin/version.h: Bump CYGWIN_VERSION_DLL_MINOR to 9.
-
-2011-02-28 Christopher Faylor <me+cygwin@cgf.cx>
-
- * autoload.cc (dll_load): Only perform DONT_RESOLVE_DLL_REFERENCES hack
- on systems which need it.
- * wincap.cc (use_dont_resolve_hack): Set as appropriate.
- * wincap.h (use_dont_resolve_hack): Define.
-
-2011-02-28 Christopher Faylor <me+cygwin@cgf.cx>
-
- * autoload.cc (dll_load): Make inline. Clarify logic.
-
-2011-02-27 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (dll_load): Only call LoadLibraryExW with
- DONT_RESOLVE_DLL_REFERENCES if a normal LoadLibrary call failed with
- ERROR_INVALID_ADDRESS.
- (LsaRegisterLogonProcess): Align comment to previous change.
-
-2011-02-26 Christopher Faylor <me+cygwin@cgf.cx>
-
- * autoload.cc: Use LoadDLLfuncEx3 for all winmm functions. Accommodate
- changes to LoadDLLprime.
- (LoadDLLprime): Take an extra argument indicating whether this dll
- needs special handling on fork. Place this information in the "handle"
- location.
- (LoadDLLfuncEx3): Eliminate "func" handling. Pass new
- no_resolve_on_fork argument to LoadDLLprime.
- (dll_load): New function.
- (std_dll_init): Accommodate changes to dll_info::handle. Use dll_load
- to load DLL in both cases where it is used.
-
-2011-02-26 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc: Make autoloaded ntdll function non-optional. Ditto for
- secur32 functions, except for LsaRegisterLogonProcess. Change return
- value to ERROR_PROC_NOT_FOUND. Explain why.
- * sec_auth.cc (lsaauth): Handle ERROR_PROC_NOT_FOUND from call to
- LsaRegisterLogonProcess when generating the errno value.
-
-2011-02-22 Corinna Vinschen <corinna@vinschen.de>
-
- * dcrt0.cc: Fix copyright dates.
- * winsup.h: Ditto.
- * syscalls.cc (_read): Move EXPORT_ALIAS to its rightful place.
-
-2011-02-21 Christopher Faylor <me+cygwin@cgf.cx>
-
- * cygwin.din: Mark __assert* and _abort as NOSIGFE.
-
-2011-02-21 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket (fhandler_socket::readv): Call recv_internal directly,
- rather than recvmsg.
- (fhandler_socket::writev): Call send_internal directly, rather than
- sendmsg.
- * net.cc (cygwin_recv): Call fhandler_socket::recvfrom directly, rather
- than cygwin_recvfrom.
- (cygwin_send): Call fhandler_socket::sendto directly, rather than
- cygwin_sendto.
-
-2011-02-20 Christopher Faylor <me+cygwin@cgf.cx>
-
- * fhandler.cc (fhandler_base_overlapped::close): Finish any pending I/O
- before closing.
- (fhandler_base_overlapped::wait_overlapped): Defensively zero bytes
- read. Add more info to debugging output.
-
-2011-02-18 Christopher Faylor <me+cygwin@cgf.cx>
-
- * dcrt0.cc (dll_crt0_1): Add a CYGHEAP_DEBUG conditional for debugging
- which allocates a lot of space at startup.
-
-2011-02-18 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.sc: Set alignment of .cygheap section to 64K.
-
-2011-02-15 Corinna Vinschen <corinna@vinschen.de>
-
- * spawn.cc (spawn_guts): Only set PID_NOTCYGWIN in _P_OVERLAY mode.
- Drop flag if creating new process failed.
-
-2011-02-15 Corinna Vinschen <corinna@vinschen.de>
-
- * Throughout fix copyright dates.
-
-2011-02-15 Corinna Vinschen <corinna@vinschen.de>
-
- * devices.in: Throughout use slashes instead of backslashes in the
- native path of devices not backed by native NT devices.
- * devices.cc: Regenerate.
- * globals.cc (ro_u_pmem): Use correct case.
- (ro_u_globalroot): New R/O unicode string.
- * path.cc (path_conv::check): Fix incorrect handling of /proc/sys
- block devices if they are just visited due to a component check.
- (symlink_info::posixify): Fix typo in comment.
- (cygwin_conv_path): Use ro_u_globalroot instead of string constant.
- (fast_cwd_version): New shared variable to store FAST_CWD version
- used on the system.
- (find_fast_cwd_pointer): Rename from find_fast_cwd_pointers. Don't
- set global fast_cwd_ptr pointer here. Return pointer value instead.
- (find_fast_cwd): New function to set fast_cwd_ptr and fast_cwd_version.
- (cwdstuff::override_win32_cwd): Call find_fast_cwd from here.
- Check for fast_cwd_version to differ between old and new FAST_CWD
- structure. Check old_cwd for NULL to avoid SEGV. Don't set CWD if
- we have neitehr a valid fast_cwd_ptr, nor a valid CWD handle in the
- process parameter block.
- (cwdstuff::set): Create Win32 path taking /proc/sys paths into account.
- * spawn.cc (spawn_guts): Recode creating runpath. Also take /proc/sys
- paths into account. Drop special CWD handling when starting non-Cygwin
- processes.
-
-2011-02-15 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_procsys.cc (fhandler_procsys::opendir): Avoid SEGV if
- opening object directory fails.
- * fhandler_virtual.cc (fhandler_virtual::opendir): Don't leak memory.
-
-2011-02-15 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::readdir_helper): Don't
- append slash if there is one already.
-
-2011-02-15 Corinna Vinschen <corinna@vinschen.de>
-
- Revert change from 2010-08-31:
- * path.cc (normalize_posix_path): Drop support for //./ and //?/
- prefixes.
- (path_conv::check): Ditto.
-
-2011-02-15 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::readdir_helper): Use POSIX
- path to check for symlink.
-
-2011-02-14 Corinna Vinschen <corinna@vinschen.de>
-
- * config/i386/profile.h: Sync with Mingw.
-
-2011-02-13 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (struct _FAST_CWD): Redefine to new layout used since patch
- for KB 2393802. Adjust comments throughout.
- (struct _FAST_CWD_OLD): Rename former definition.
- (cwdstuff::override_win32_cwd): Check if the OS is using the old or the
- new FAST_CWD structure layout and handle accordingly.
-
-2011-02-11 Christopher Faylor <me+cygwin@cgf.cx>
-
- * mkstatic: Make sure that we are not cd'ed to temporary directory on
- exit to avoid bogus warnings on directory cleanup.
- * speclib: Ditto.
- * mkimport: Ditto.
-
-2011-02-11 Christopher Faylor <me+cygwin@cgf.cx>
-
- * cygwin.sc: Eliminate __cygheap_mid.
- * cygheap.cc: Ditto.
-
-2011-02-11 Christopher Faylor <me+cygwin@cgf.cx>
-
- * cygheap.cc (_cygheap_mid): Drop unneeded section attribute.
- (cygheap_init): Just zero cygheap structure.
- * cygwin.sc: Keep 16 byte alignment but drop all other alignments
- related to cygheap. Eliminate unused __cygheap_end1.
-
-2011-02-11 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.sc: Raise default cygheap size to 1 Meg. Set alignment to
- standard 64K.
-
-2011-02-11 Corinna Vinschen <corinna@vinschen.de>
-
- * include/endian.h: Move definitions of __BIG_ENDIAN, __LITTLE_ENDIAN,
- and __BYTE_ORDER into ...
- * include/bits/endian.h: New file.
- * include/arpa/nameser_compat.h: Include endian.h rather than defining
- BYTE_ORDER here.
- * include/asm/byteorder.h: Include bits/endian.h. Drop definition of
- __LITTLE_ENDIAN.
- * include/netinet/ip.h: Include bits/endian.h. Drop definitions of
- BIG_ENDIAN, LITTLE_ENDIAN, and BYTE_ORDER. Use underscored variants
- of aforementioned constants.
- * include/netinet/tcp.h: Ditto.
- * include/sys/param.h: Drop disabled definitions of BIG_ENDIAN,
- LITTLE_ENDIAN, and BYTE_ORDER.
-
- * include/netinet/ip.h: Reformat. Define setsockopt IP_TOS options
- matching recent RFCs. Tweak comments.
-
-2011-02-10 Eric Blake <eblake@redhat.com>
-
- * errno.cc (includes): Avoid compilation failure if <string.h>
- settles on wrong strerror_r signature.
-
- * errno.cc (__xpg_strerror_r): New function.
- (strerror_r): Update to copy newlib's fixes.
- (strerror): Set errno on failure.
- (_sys_errlist): Cause EINVAL failure for reserved values.
- * cygwin.din: Export new function.
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Combine
- this into minor 236.
-
-2011-02-09 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * cygwin.din (pthread_yield): Export as alias to sched_yield.
- * include/pthread.h (pthread_yield): Declare.
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
- * posix.sgml (std-deprec): Add pthread_yield.
-
-2011-02-09 Christopher Faylor <me+cygwin@cgf.cx>
-
- * cygheap.cc: Add some __stdcall decoration where appropriate.
- * lib/cygwin_crt0.c: __attribute -> __attribute__.
-
-2011-02-09 Christopher Faylor <me+cygwin@cgf.cx>
-
- * hookapi.cc (hook_or_detect_cygwin): Prevent i from being considered
- uninitialized by gcc.
-
-2011-02-09 Christopher Faylor <me+cygwin@cgf.cx>
-
- * exception.h: Remove DEBUG_EXCEPTION left over debugging ifdef.
-
-2011-02-08 Christopher Faylor <me+cygwin@cgf.cx>
-
- * dll_init.cc: Fix typo in comment.
-
-2011-02-07 Corinna Vinschen <corinna@vinschen.de>
-
- * configure.in: Remove AC_ALLOCA test and test for __builtin_memset.
- * configure: Regenerate.
-
-2011-02-07 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_console.cc (fhandler_console::write_normal): Remove
- erroneous premature return after collecting truncated multibyte
- sequence in trunc_buf. Rather fall through to printing routine.
- Fix return value to take trunc_buf content into account. Improve
- comments.
-
-2011-02-05 Christopher Faylor <me+cygwin@cgf.cx>
-
- * autoload.cc (wsock_init): Properly define WSAStartup function pointer
- to avoid stack damage.
-
-2011-02-02 Corinna Vinschen <corinna@vinschen.de>
-
- * libc/bsdlib.cc: Include err.h.
-
-2011-02-02 Eric Blake <eblake@redhat.com>
-
- * include/err.h: Fix loss of semicolons in previous patch.
-
-2011-02-02 Corinna Vinschen <corinna@vinschen.de>
-
- * include/err.h (err): Add noreturn attribute.
- (errx): Ditto.
- (verr): Ditto.
- (verrx): Ditto.
-
-2011-02-02 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (conv_path_list): Remove enclosing quotes and trailing
- backslashes from Win32 environment path lists.
-
-2011-02-01 Christian Franke <franke@computer.org>
-
- * fhandler.cc (fhandler_base::fsync): Ignore ERROR_INVALID_FUNCTION
- error from FlushFileBuffers().
-
-2011-01-31 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (utmp_data): Fix potential buffer overflow.
-
-2011-01-31 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (address_in_use): Improve comment readability.
-
-2011-01-30 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (address_in_use): Disable. Add comment.
- (fhandler_socket::bind): Change comment to explain setting the
- SO_EXCLUSIVEADDRUSE socket option. Remove code which checks for
- address in use.
- * net.cc (cygwin_setsockopt): Never set SO_REUSEADDR option. Improve
- comment to compensate for the deleted comment in fhandler_socket::bind.
- * wincap.cc: Throughout, drop has_enhanced_socket_security from wincaps.
- * wincap.h (struct wincaps): Drop has_enhanced_socket_security flags
- and method.
-
-2011-01-28 Peter Foley <jpfoley2@verizon.net>
-
- * configure.in: Define LIBSERVER regardless of cross_host.
- * configure: Regenerate.
-
-2011-01-28 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::wait_for_events): Call
- pthread_testcancel in case of timeout to enable pthread_cancel
- on waiting thread.
-
-2011-01-27 Corinna Vinschen <corinna@vinschen.de>
-
- * include/features.h (__STDC_ISO_10646__): Move to newlib's
- sys/features.h.
-
-2011-01-26 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_base::fstat_by_nfs_ea): Fix
- computation of st_blocks.
- (fhandler_base::fstat_helper): Fix formatting.
-
-2011-01-24 Corinna Vinschen <corinna@vinschen.de>
-
- * include/features.h (__STDC_ISO_10646__): Define. Add comment.
-
-2011-01-21 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (rename): Fix permission problem with symlinks on NFS.
- Rework how NtOpenFile gets called to make it more readable. Change
- comment.
-
-2011-01-20 Corinna Vinschen <corinna@vinschen.de>
-
- * exec.cc: Include pinfo.h.
- * winf.h: Move definitions of _P_PATH_TYPE_EXEC and _P_MODE from here...
- * pinfo.h: ...to here.
- (_P_PATH_TYPE_EXEC): Redefine to be bigger than _P_SYSTEM.
- (_P_MODE): Redefine so as not to mask out _P_SYSTEM.
- * spawn.cc (spawnlp): Add _P_PATH_TYPE_EXEC flag in call to spawnve.
- (spawnlpe): Ditto.
- (spawnvp): Ditto.
-
-2011-01-19 Corinna Vinschen <corinna@vinschen.de>
-
- * spawn.cc (av::fixup): Reenable #! handling for all exec functions.
- Return ENOEXEC in !p_type_exec case only for unrecognized files.
- Fix comment formatting.
-
-2011-01-19 Corinna Vinschen <corinna@vinschen.de>
-
- * exec.cc (execlp): Add missing _P_PATH_TYPE_EXEC flag in call to
- spawnve.
-
-2011-01-19 Corinna Vinschen <corinna@vinschen.de>
-
- * exec.cc: Rearrange functions in alphabetical order.
- (_execve): Drop temporary define and drop export alias.
- (execl): Call spawnve.
- (execle): New function.
- (execlp): New function.
- (execv): Call spawnve.
- (execve): Drop converting NULL envp to emtpy envp.
- (execvp): Call spawnve.
- (execvpe): Drop converting NULL envp to emtpy envp. Call spawnve.
- (fexecve): Call spawnve.
- * spawn.cc (spawnve): Convert NULL envp to emtpy envp. Remove outdated
- comment.
- (spawnlp): Call spawnve.
- (spawnlpe): Ditto.
- (spawnvp): Ditto.
- (spawnvpe): Fix formatting.
-
-2011-01-19 Corinna Vinschen <corinna@vinschen.de>
-
- * exec.cc (strccpy): Move function from here...
- * strfuncs.cc (strccpy): ...to here.
- * string.h (strccpy): Declare.
- * winsup.h (strccpy): Drop declaration.
-
-2011-01-19 Corinna Vinschen <corinna@vinschen.de>
-
- * errno.cc (errmap): Add error codes for invalid binaries.
- * exec.cc (execvp): Call spawnve with _P_PATH_TYPE_EXEC flag
- from here.
- (execvpe): Ditto.
- * spawn.cc (spawn_guts): Filter _P_PATH_TYPE_EXEC from mode and
- store in p_type_exec. Call av::fixup with addtional p_type_exec
- argument.
- (spawnve): Check for filtered mode.
- (spawnvpe): Add _P_PATH_TYPE_EXEC flag when calling spawnve.
- (av::fixup): Accept additional bool parameter p_type_exec. Only check
- for script if p_type_exec is true.
- * winf.h (_P_PATH_TYPE_EXEC): Define.
- (_P_MODE): Define.
- (av::fixup): Declare with additional bool parameter.
-
-2011-01-17 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_proc.cc (format_proc_partitions): Fix compiler warning.
-
-2011-01-17 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (path_conv::check): Don't follow reparse point symlinks if
- PC_SYM_NOFOLLOW_REP flag is set.
- (cygwin_conv_path): Set PC_SYM_NOFOLLOW_REP flag when converting from
- POSIX to Win32.
- * path.h (enum pathconv_arg): Define PC_SYM_NOFOLLOW_REP flag.
-
-2011-01-17 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_proc.cc (proc_tab_cmp): Fix typo in comment.
- (fhandler_proc::fill_filebuf): Handle return value of 0 from format
- function as error.
- (format_proc_stat): Set errno when returning 0 size.
- (format_proc_partitions): Rewrite method to fetch partition info.
-
-2011-01-13 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_base::fstat_helper): Always set
- st_size of directories to 0. Explain why.
-
-2011-01-12 Corinna Vinschen <corinna@vinschen.de>
-
- * posix.sgml: Add madvise to BSD list.
-
-2011-01-12 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din (madvise): Export posix_madvise as madvise.
- * include/cygwin/version.h: Bump CYGWIN_VERSION_API_MINOR.
- * include/sys/mman.h: Define madvise constants, keep Linux-specific
- constants undefined.
- (madvise): Declare.
-
-2011-01-12 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (struct part_t): New type.
- (class fhandler_dev_floppy): Convert partitions to part_t pointer.
- Add lock_partition method.
- * fhandler_floppy.cc (fhandler_dev_floppy::lock_partition): New method
- to implement ondemand partition locking.
- (fhandler_dev_floppy::write_file): Call lock_partition from here if
- writing failed due to a potential write restriction on a disk
- partition.
- (fhandler_dev_floppy::open): Don't lock partitions here.
- (fhandler_dev_floppy::close): Keep track of partition handle reference
- count. Close handles and remove partitions pointer ony if count is 0.
- (fhandler_dev_floppy::dup): Just copy partitions pointer and increment
- reference count.
-
-2011-01-11 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (MAX_PARTITIONS): New definition.
- (class fhandler_dev_floppy): Add partitions array member. Add close
- method.
- * fhandler_floppy.cc (fhandler_dev_floppy::fhandler_dev_floppy): Zero
- out partitions array.
- (fhandler_dev_floppy::open): Fix "entire disk" condition for call to
- DeviceIoControl (FSCTL_ALLOW_EXTENDED_DASD_IO).
- When opening disks for writing, call DeviceIoControl (FSCTL_LOCK_VOLUME)
- on all affected disk partitions starting with Vista.
- (fhandler_dev_floppy::close): New method.
- (fhandler_dev_floppy::dup): Duplicate handles in partitions, if any.
- * wincap.h (wincaps::has_restricted_raw_disk_access): New element.
- * wincap.cc: Implement above element throughout.
-
-2011-01-11 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * termios.cc (cfgetospeed, cfgetispeed): Constify argument per POSIX.
- * include/sys/termios.h (cfgetospeed, cfgetispeed): Declare functions.
- Move macros after declarations and make conditional on !__cplusplus.
-
-2011-01-11 Corinna Vinschen <corinna@vinschen.de>
-
- * cygtls.cc (_cygtls::init_thread): Call _REENT_INIT_PTR. Drop setting
- current locale and calling srand48.
-
-2011-01-02 Christopher Faylor <me+cygwin@cgf.cx>
-
- * ChangeLog-2010: Create from ChangeLog.
- * ChangeLog: Start fresh.
diff --git a/winsup/cygwin/ChangeLog-2012 b/winsup/cygwin/ChangeLog-2012
deleted file mode 100644
index 562c48c41..000000000
--- a/winsup/cygwin/ChangeLog-2012
+++ /dev/null
@@ -1,3065 +0,0 @@
-2012-12-31 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * sigproc.cc (wait_sig): Remove spurious extern.
-
-2012-12-31 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * dtable.cc (dtable::dup3): Fix bounds checking for valid newfd.
- * syscalls.cc (dup2): Ditto.
- * winsup.h (events_terminate): Delete obsolete function declaration.
-
-2012-12-28 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * DevNotes: Add entry cgf-000019.
- * dcrt0.cc (do_exit): Just set exit_state to ES_EVENTS_TERMINATE and
- nuke call to events_terminate which just set a superfluous flag.
- * sigproc.cc (signal_exit_code): New variable.
- (setup_signal_exit): Define new function.
- (_cygtls::signal_exit): Remove accommodations for closing the signal
- pipe handle.
- (exit_thread): Just sleep if we're exiting.
- (wait_sig): If signal_exit_code is set, just handle bookkeeping signals
- and exit ReadFile loop if there is nothing more to process. Call
- signal_exit at end if signal_exit_code is non-zero.
- * sigproc.h (setup_signal_exit): Declare new function.
- * exceptions.cc (sigpacket::process): Use setup_signal_exit to control
- exiting due to a signal.
- (exception::handle): Ditto. Query exit_state rather than defunct
- exit_already to determine if we are exiting.
- * globals.cc (ES_SIGNAL_EXIT): New enum.
- * sync.h (lock_process::release): New function for explicitly unlocking
- muto.
- (lock_process::~lock_process): Use release method.
-
-2012-12-27 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * fork.cc (child_info::prefork): Fix error message formatting.
-
-2012-12-22 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * select.h (select_stuff): Remove variable names from parameter
- declarations.
- (select_info): Ditto.
- (select_record::dump_select_record): Declare new debugging-only
- function.
- (select_info): Zero all fields.
- (select_pipe_info): Ditto.
- (select_socket_info): Ditto.
- (select_serial_info): Ditto.
- (select_mailslot_info): Ditto.
- * select.cc (select_record::dump_select_record): Define new
- debugging-only function.
- (select_stuff::test_and_set): Call dump_select_record when debugging.
-
- * thread.cc (pthread_mutex::unlock): Revert setting of tid to 0 since,
- in this context, it is a number, not a pointer.
- (pthread_spinlock::unlock): Ditto.
-
-2012-12-21 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * sigproc.cc (exit_thread): undef ExitThread or suffer recursion.
- Attempt to lock process prior to calling sig_send.
-
-2012-12-21 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- Revert the reversion and go with implementation described in
- cgf-000017, with some modifications.
- * init.cc (dll_entry): Revert previous change.
- * miscfuncs.cc: Include sigproc.h for exit_thread declaration.
- * winsup.h (ExitThread): Define as 'exit_thread' to ensure no
- accidental use.
- * sigproc.cc (exit_thread): New function.
- (wait_sig): Handle __SIGTHREADEXIT case. Don't just block rather than
- returning from this function.
- * sigproc.h (__SIGTHREADEXIT): New enum.
- (exit_thread): Declare.
- * sync.cc (muto::release): Accept a tls command-line argument.
- * sync.h (muto::release): Accept a tls command-line parameter. Default
- to &_my_tls.
-
- * cygerrno.h (__set_errno): Define as extern so that no function code
- is ever emitted.
- * cygserver_ipc.h (cygserver_ipc.h): Ditto.
- * miscfuncs.h (transform_chars): Ditto.
- * path.h (has_attribute): Ditto.
- * security.h (privilege_luid): Ditto.
- * winsup.h (flush_file_buffers): Ditto.
-
-2012-12-21 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * DevNotes: Add entry cgf-000018.
- * init.cc (dll_entry): Grab process lock before exiting to ensure that
- thread doesn't exit before parent if parent is exiting.
- * _cygtls.cc (_cygtls::call2): Revert previous 2012-12-21 change.
- * miscfuncs.cc (thread_wrapper): Ditto.
- * thread.cc (pthread::exit): Ditto.
- * sigproc.cc (exit_thread): Ditto.
- (wait_sig): Ditto.
- * sync.cc (muto::release): Ditto.
- * sync.h (muto::release): Ditto.
- * sigproc.h (__SIGTHREADEXIT): Delete enum.
- (exit_thread): Delete declaration.
-
-2012-12-21 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * DevNotes: Add entry cgf-000017.
- * _cygtls.cc (_cygtls::call2): Use new exit_thread function in place of
- ExitThread.
- * miscfuncs.cc (thread_wrapper): Ditto.
- * thread.cc (pthread::exit): Ditto.
- (pthread_mutex::unlock): Set tid to NULL rather than 0.
- (pthread_spinlock::unlock): Ditto.
- * pinfo.cc (commune_process): Actually call lock_process constructor.
- * sigproc.cc (exit_thread): New function.
- (wait_sig): Handle __SIGTHREADEXIT case. Don't just block rather than
- returning from this function.
- * sigproc.h (__SIGTHREADEXIT): New enum.
- (exit_thread): Declare.
- * sync.cc (muto::release): Accept a tls command-line argument.
- * sync.h (muto::release): Accept a tls command-line parameter. Default
- to &_my_tls.
-
-2012-12-20 Corinna Vinschen <corinna@vinschen.de>
-
- * dcrt0.cc (build_argv): Allow quoted filenames in @ expression.
-
-2012-12-19 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * select.h (select_stuff::select_stuff): Make default constructor
- always zero everything while constructor with int arg just zeroes next.
- * select.cc (select_stuff::test_and_set): Revert to using default
- constructor.
-
-2012-12-19 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * select.cc (select_stuff::wait): Add windows error number to error message.
-
-2012-12-18 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * select.cc (select_stuff::test_and_set): Remove workaround and use
- proper constructor.
-
-2012-12-18 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * select.cc (select_stuff::test_and_set): Work around problem of new()
- not returning zeroed memory.
-
-2012-12-14 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::write): Don't attempt to sparsify
- an already sparse file. Drop check for FILE_SUPPORTS_SPARSE_FILES
- flag. Explicitely set FILE_ATTRIBUTE_SPARSE_FILE attribute in
- cached attributes.
- (fhandler_base::lseek): Only set did_lseek if sparseness is supported.
- * fhandler_disk_file.cc (fhandler_disk_file::ftruncate): Don't attempt
- to sparsify an already sparse file. Explicitely set
- FILE_ATTRIBUTE_SPARSE_FILE attribute in cached attributes.
- * mount.cc (oopt): Add "sparse" flag.
- (fillout_mntent): Ditto.
- * path.h (enum path_types): Add PATH_SPARSE.
- (path_conv::support_sparse): New method.
- (path_conv::fs_flags): Constify.
- (path_conv::fs_name_len): Ditto.
- include/sys/mount.h: Replace unused MOUNT_MIXED flag with MOUNT_SPARSE.
-
-2012-12-10 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * sigproc.h (sig_send): Accept tid as argument #3. Default to NULL.
- * sigproc.cc (sig_send): Ditto. Pass tid to other sig_send.
- (sigpending): Send current thread as arg #3.
-
-2012-12-07 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * exceptions.cc (sigpacket::process): Reorganize to avoid use of tls
- before initialization.
-
- * fhandler_fifo.cc (fhandler_fifo::arm): Avoid improper printing of
- integer as a string in debug output.
-
-2012-12-07 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * sigproc.h (sigpacket): Remove parameter names from declarations.
- (sigpacket::sigtls): Rename from 'tls'.
- * exceptions.cc (sigpacket::process): Define local tls variable and
- assign that to sigtls if appropriate. Clarify debugging output.
- * sigproc.cc (sig_send): Accommodate tls -> sigtls rename.
- (pending_signals::add): Ditto.
- (wait_sig): Ditto.
-
-2012-12-07 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * cygtls.h (_cygtls::get_signal_arrived): Add parameter to make
- lock/unlock conditional.
- * exceptions.cc (_cygtls::interrupt_setup): Don't get a lock when
- setting signal_arrived since we already have one.
- * gendef: Add some comments to make it easier to find functions.
-
-2012-12-06 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * include/cygwin/wait.h (WAIT_ANY): Define.
- (WAIT_MYPGRP): Define.
-
-2012-12-05 Corinna Vinschen <corinna@vinschen.de>
-
- * child_info.h (class child_info_spawn): Drop unused member lock.
- (CURR_CHILD_INFO_MAGIC): Update.
- * sigproc.cc (child_info_spawn::child_info_spawn): Drop setting lock.
-
-2012-12-04 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * cygtls.h (_cygtls::will_wait_for_signal): Rename from
- 'signal_waiting' to something more expressive. Reflect rename
- throughout.
- (_cygtls::get_signal_arrived): Rename from create_signal_arrived. Move
- lock here.
- (_cygtls::set_signal_arrived): Use get_signal_arrived.
- * exceptions.cc (_cygtls::interrupt_setup): Use get_signal_arrived.
- * tlsoffsets.h: Regenerate.
-
-2012-11-30 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * spawn.cc (child_info_spawn::worker): Make detection of '/c' case
- insensitive when looking for cmd.exe command line.
-
-2012-11-26 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * configure.ac: Rename from configure.in.
- * configure.in: Delete.
- * configure: Regenerate.
-
-2012-11-26 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_registry.cc: Drop Mingw.org considerations.
- * fhandler_serial.cc: Ditto.
- * fhandler_socket.cc: Ditto.
- * fhandler_tape.cc: Ditto.
- * fhandler_tty.cc: Ditto.
- * net.cc: Ditto.
- * ntdll.h: Ditto.
- * sched.cc: Ditto.
- * sec_helper.cc: Ditto.
-
-2012-11-23 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * configure.in: Remove unneeded ALLOC substitution.
- * configure: Regenerate.
- * aclocal.m4: Ditto.
-
-2012-11-23 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * configure.in: Add previously-missed AC_NO_EXECUTABLES.
- * configure: Regenerate.
- * aclocal.m4: Ditto.
-
-2012-11-23 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * Makefile.in: Use explicit path to mkdir.
-
-2012-11-22 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * select.cc (select): Don't return -1 when we've timed out after
- looping.
-
-2012-11-22 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * Makefile.in: Revamp for new configury.
- (datarootdir): Add variable setting.
- (winver_stamp): Accommodate changes to mkvers.sh setting.
- (libc.a): Fix race when libm.a might not have been built yet.
- * configure.in: Revamp for new configury.
- * aclocal.m4: Regenerate.
- * configure: Ditto.
- * autogen.sh: New script.
- * mkvers.sh: Find include directives via CFLAGS and friends rather than
- assuming that w32api lives nearby.
-
-2012-11-21 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * termios.cc (cfsetspeed): New function.
- * cygwin.din (cfsetspeed): Export.
- * posix.sgml (std-bsd): Add cfsetspeed.
- * include/sys/termios.h (cfsetspeed): Declare.
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
-
-2012-11-16 Corinna Vinschen <corinna@vinschen.de>
-
- * include/mntent.h: Only include paths.h when building for Cygwin.
- Add comment to explain why.
-
-2012-11-11 Corinna Vinschen <corinna@vinschen.de>
-
- * winbase.h: Semi-reinstantiate to workaround lack inline assembler
- implementation of InterlockedCompareExchange for i686 in Mingw64
- headers.
- * pinfo.cc (pinfo::init): Remove unused variable mapaddr.
-
-2012-11-08 Corinna Vinschen <corinna@vinschen.de>
-
- * sigproc.cc (proc_subproc): Delete unused variable child.
-
-2012-11-08 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * fhandler_termios.cc (fhandler_termios::line_edit): Don't do special
- character handling when stopped by CTRL-S.
- * fhandler_tty.cc (bytes_available): Add arguments to debug_only_printf
- call.
- * sigproc.cc (proc_subproc): Simplify some if logic.
-
-2012-11-04 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * include/sys/termios.h (CBRK): Define as alias of CEOL.
- (CREPRINT): Define as alias of CRPRNT.
- (CDISCARD): Define as alias of CFLUSH.
- (TTYDEF_*): Define.
-
-2012-10-31 Corinna Vinschen <corinna@vinschen.de>
-
- * include/sys/param.h: Include stddef.h to define NULL.
-
-2012-10-31 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::rewinddir): Fix using
- wrong value in condition.
-
-2012-10-30 Corinna Vinschen <corinna@vinschen.de>
-
- * include/sys/cygwin.h: Add missing defines for CW_ALLOC_DRIVE_MAP,
- CW_MAP_DRIVE_MAP and CW_FREE_DRIVE_MAP.
-
-2012-10-27 Kai Tietz <ktietz@redhat.com>
-
- * dcrt0.cc (quoted): Renamed strechr to strchrnul.
- * environ.cc (environ_init): Likewise.
- * sec_acl.cc (aclfromtext32): Likewise.
- * sec_auth.cc (extract_nt_dom_user): Likewise.
- * uinfo.cc (pwdgrp::next_str): Likewise.
- * string.h (strechr): Likewise.
-
-2012-10-26 Kai Tietz <ktietz@redhat.com>
-
- * string.h (strechr): Replace assembler by
- C code.
- (ascii_strcasematch): Likewise.
- (ascii_strncasematch): Likwise.
-
-2012-10-26 Corinna Vinschen <corinna@vinschen.de>
-
- * dir.cc (closedir): Fix syscall_printf.
-
-2012-10-26 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/signal.h (sigset_t): Define here.
-
-2012-10-24 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * Makefile.in (DLL_IMPORTS): Use system import libraries for
- kernel32 and ntdll instead of from in-tree w32api.
- (cygwin0.dll): Remove rule dependency on DLL_IMPORTS, as they
- are no longer built in-tree.
-
-2012-10-23 Corinna Vinschen <corinna@vinschen.de>
-
- * thread.h (List_insert): Cast first parameter in
- InterlockedCompareExchangePointer call to avoid compiler warnings.
- (List_remove): Ditto.
-
-2012-10-22 Corinna Vinschen <corinna@vinschen.de>
-
- * winbase.h: Remove.
-
-2012-10-22 Corinna Vinschen <corinna@vinschen.de>
-
- * child_info.h (CURR_CHILD_INFO_MAGIC): Update.
-
-2012-10-21 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/version.h (CYGWIN_VERSION_DLL_MINOR): Bump to 18.
-
-2012-10-16 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_floppy.cc (fhandler_dev_floppy::lseek): Remove lloffset.
- Use offset directly. Add shortcut for lseek(fd, 0, SEEK_CUR) case.
- (fhandler_dev_floppy::ioctl): Drop wrong RDSETBLK case.
- * fhandler_raw.cc (fhandler_dev_raw::ioctl): Revamp RDSETBLK code.
-
-2012-10-15 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * fhandler_tty.cc (fhandler_pty_slave::write): Fix potential exit from
- loop with write mutex held. Delete redundant mutex release. Clear tty
- error once we've grabbed it.
-
-2012-10-15 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_raw.cc (fhandler_dev_raw::fhandler_dev_raw): Drop gratuitous
- initializing from previous patch.
-
-2012-10-15 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_floppy.cc (fhandler_dev_floppy::open): Fix comment.
-
-2012-10-15 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * fhandler_tty.cc (fhandler_pty_slave::write): DWORD -> BOOL.
-
-2012-10-13 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (class fhandler_dev_raw): Add members devbufalloc and
- devbufalign.
- (class fhandler_dev_floppy): Remove member bytes_per_sector;
- * fhandler_floppy.cc (bytes_per_sector): Define as devbufalign.
- (fhandler_dev_floppy::open): Set devbufalign to a multiple of the
- sector size and handle devbuf allocation and alignment in !O_DIRECT
- case here. Change comment accordingly.
- Call FSCTL_ALLOW_EXTENDED_DASD_IO for partitions as well.
- (fhandler_dev_floppy::raw_write): Fix comment. Rewrite and fix
- writing behaviour when application uses read and lseek.
- (fhandler_dev_floppy::lseek): Use rounddown macro. Call
- SetFilePointerEx rather than the old SetFilePointer.
- (fhandler_dev_floppy::ioctl): Reformat switch. Call
- IOCTL_DISK_UPDATE_PROPERTIES rather than IOCTL_DISK_UPDATE_DRIVE_SIZE
- in BLKRRPART case. Support BLKIOMIN, BLKIOOPT, BLKPBSZGET and
- BLKALIGNOFF.
- * fhandler_raw.cc (fhandler_dev_raw::fhandler_dev_raw): Initialize
- all devbuf-related members.
- (fhandler_dev_raw::~fhandler_dev_raw): Delete devbufalloc rather than
- devbuf.
- (fhandler_dev_raw::open): Drop allocating devbuf.
- (fhandler_dev_raw::dup): Allocate devbufalloc and set devbuf to support
- new sector-aligned devbuf handling.
- (fhandler_dev_raw::fixup_after_exec): Ditto.
- * fhandler_tape.cc (fhandler_dev_tape::open): Ditto, set devbufalign
- to 1.
- * include/cygwin/fs.h (BLKIOMIN): Define.
- (BLKIOOPT): Define.
- (BLKALIGNOFF): Define.
- (BLKPBSZGET): Define.
-
-2012-10-12 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_raw.cc (fhandler_dev_raw::open): Allow O_EXCL flag, as on
- Linux.
-
-2012-10-11 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * fhandler_termios.cc (fhandler_termios::line_edit): Don't manipulate
- output_mutex on CTRL-S/CTRL-Q to avoid a deadlock.
- * fhandler_tty.cc (fhandler_pty_slave::write): Loop when output_stopped
- is detected before acquiring output_mutex. Acquire output_mutex in the
- loop for each write.
- * tty.h: Remove some obsolete defines.
- (tty_min::output_stopped): Make 'bool'.
-
-2012-10-10 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/in.h (struct in_addr): Guard with s_addr to avoid
- potential collision with Win32 headers.
-
-2012-10-09 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * child_info.h (child_info_spawn::has_execed): Remove unneeded
- synchronization.
-
-2012-10-09 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * pinfo.cc: Remove unneeded assert.h.
-
-2012-09-17 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * pinfo.cc (pinfo::init): Detect potential race where short block has
- been retrieved but PID_EXECED flag is not set.
-
-2012-09-13 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * cygthread.cc (cygthread::stub): Remove old, unnecessary, FIXMEd code.
- * spawn.cc (child_info_spawn::worker): Avoid calling close_all_files()
- twice.
-
-2012-09-02 Jin-woo Ye <jojelino@gmail.com>
- Corinna Vinschen <corinna@vinschen.de>
-
- * pseudo-reloc.cc (auto_protect_for): New function.
- (__write_memory): Call auto_protect_for to handle page protection.
- (do_pseudo_reloc): Call auto_protect_for to restore old page protection.
-
-2012-08-26 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * pinfo.cc (pinfo::init): Remove assertion.
-
-2012-08-23 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * pinfo.cc (_pinfo::exists): Don't consider a process with no state to
- exist.
-
-2012-08-21 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * net.cc (get_adapters_addresses): Drop FIXME part of comment.
-
-2012-08-17 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * DevNotes: Add entry cgf-000016.
- * cygtls.h (_cygtls::push): Inline.
- (_cygtls::interrupt_now): Change signal number argument to siginfo_t
- argument.
- (_cygtls::interrupt_setup): Ditto.
- (_cygtls::set_siginfo): Delete declaration.
- (_cygtls::reset_signal_arrived): Don't reset signal_arrived signal.
- Just reset flag.
- * exceptions.cc (_cygtls::interrupt_now): Reflect argument changes.
- Pass si to interrupt_setup.
- (_cygtls::interrupt_setup): Reflect argument changes. Fill out tls
- infodata here using passed-in si. Use si.si_signo instead of sig.
- (sigpacket::setup_handler): Move this function into sigpacket class.
- Use si field from the class as appropriate.
- (sigpacket::process): Don't call tls->set_siginfo here since
- setup_handler could fail. Eliminate now-unneeded sig argument.
- * sigproc.h (sigpacket::setup_handler): Move setup_handler to this
- class.
-
-2012-08-17 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * exceptions.cc (sig_handle_tty_stop): Clear tls sig field.
- (sigpacket::process): When continuing, set tls->sig before arming
- signal_arrived.
-
-2012-08-17 Thomas Wolff <towo@towo.net>
-
- * fhandler_clipboard.cc (fhandler_dev_clipboard::read): Use
- read-ahead buffer for reading Windows clipboard if caller's
- buffer is too small for complete characters.
- * include/limits.h: Remove outdated TODO comment.
-
-2012-08-16 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * cygtls.cc (_cygtls::operator HANDLE): Reverse '?' test stupidity.
-
-2012-08-16 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * cygheap.cc (init_cygheap::find_tls): Don't consider unitialized
- threads.
- * cygtls.cc (_cygtls::operator HANDLE): Return NULL when tid is not
- set.
- * exceptions.cc (setup_handler): Don't try to suspend a thread if it
- has no handle.
-
-2012-08-15 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- Rename cancelable_wait -> cygwait throughout.
- * DevNotes: Add entry cgf-000015.
- * cygwait.h (cygwait): Don't allow an optional PLARGE_INTEGER
- argument.
-
-2012-08-15 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * cygtls.h (_cygtls::create_signal_arrived): New function.
- (_cygtls::set_signal_arrived): Lock creation of signal_arrived.
- * cygwait.cc (cancelable_wait): Ignore signal_arrived event if _my_tls
- 'sig' element does not exist.
- * exceptions.cc (_cygtls::interrupt_setup): Create signal_arrived if
- recipient thread has not created it.
-
-2012-08-15 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * gendef: Tighten up whitespace detection.
-
-2012-08-15 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * gendef: Delete unneeded read from <IN> which ate an arbitrary line
- from cygwin.din.
-
-2012-08-15 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * exceptions.cc (sigdelayed): Move declaration to sigproc.h.
- * sigproc.h (sigdelayed): Make symbol globally available.
- * gendef (sigdelayed): Specifically zero incyg and stacklock.
- * signal.cc (sigwaitinfo): Lock _my_tls and try harder to clean up
- signal information.
-
-2012-08-15 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * pinfo.cc (_pinfo::exists): Don't consider an execed process to exist.
-
-2012-08-14 Corinna Vinschen <corinna@vinschen.de>
-
- * gmon.c (_mcleanup): Fix scope bug when using gmon_out array.
-
-2012-08-14 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * errno.cc (errmap): Keep sorted.
-
-2012-08-14 Corinna Vinschen <corinna@vinschen.de>
-
- * thread.cc (semaphore::_fixup_after_fork): Fix Win32 error output in
- api_fatal call.
-
-2012-08-14 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * errno.cc (errmap): Keep sorted.
-
-2012-08-14 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (fs_names): Add missing ReFS entry. Change comment.
- * mount.h (enum fs_info_type): Add comment.
-
-2012-08-13 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * errno.cc (errmap): Map ERROR_SXS_CANT_GEN_ACTCTX to ELIBBAD.
-
-2012-08-09 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * DevNotes: Add entry cgf-000014.
- * cygheap.cc (tls_sentry): Move here, rename from 'sentry' in cygtls.cc
- (tls_sentry::lock): Ditto.
- (nthreads): Move from cygtls.cc
- (THREADLIST_CHUNK): Ditto.
- (cygheap_init): Call init_tls_list().
- (init_cygheap::init_tls_list): Define new function.
- (init_cygheap::add_tls): Ditto.
- (init_cygheap::remove_tls): Ditto.
- (init_cygheap::find_tls): Ditto. Semi-resurrect from
- _cygtls::find_tls.
- * cygheap.h (init_cygheap::init_tls_list): Declare new function.
- (init_cygheap::add_tls): Ditto.
- (init_cygheap::remove_tls): Ditto.
- (init_cygheap::find_tls): Ditto.
- * cygtls.cc (sentry): Delete.
- (sentry::lock): Ditto.
- (nthreads): Ditto.
- (THREADLIST_CHUNK): Ditto.
- (_cygtls::init): Delete definition.
- (_cygtls::init_thread): Call cygheap->add_tls() to add thread to global
- list.
- (_cygtls::remove): cygheap->remove_tls() to remove thread from global
- list.
- * cygtls.h (_cygtls::init): Delete declaration.
- * dcrt0.cc (dll_crt0_0): Delete call to _cygtls::init().
- * exceptions.cc (sigpacket::process): When no thread is specified, try
- to find one via cygheap->find_tls.
-
-2012-08-08 Corinna Vinschen <corinna@vinschen.de>
-
- * include/sys/wait.h (_wait): Define when building newlib.
-
-2012-08-07 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * signal.cc (sigwaitinfo): Change cw_sig to the correct cw_sig_eintr.
-
-2012-08-03 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * exceptions.cc (sigdelayed): Simplify declaration.
- (_cygtls::call_signal_handler): Fix test for when to pop signal stack.
- Only do it exactly when what is on the stack is a no-op.
-
-2012-08-03 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * spawn.cc (child_info_spawn::worker): Put back a minor variation of
- Corinna's test for detecting a background process when starting a
- non-cygwin process.
-
-2012-08-01 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/socket.h (MSG_BCAST): Define.
- (MSG_MCAST): Define.
-
-2012-08-01 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (fhandler_socket::recv_internal): Add bool parameter.
- Add regparm attribute.
- * fhandler_socket.cc (fhandler_socket::read): Call recv_internal with
- second parameter set to false.
- (fhandler_socket::readv): Ditto.
- (fhandler_socket::recvfrom): Ditto.
- (fhandler_socket::recv_internal): Convert use_recvmsg from local
- variable to parameter. Use as request for using WSARecvMsg. Only
- fail if WSARecvMsg can't be loaded and wsamsg->Control.len > 0,
- otherwise use WSARecv{From}. Restrict dwFlags to MSG_PEEK when using
- WSARecvMsg.
- (fhandler_socket::recvmsg): Prefer using WSARecvMsg. Change priority
- of tests for not using WSARecvMsg. Call recv_internal with second
- parameter set accordingly.
-
-2012-08-01 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in: Semi-revert patch from 2012-07-01, assuming the previous
- patch to etc::dir_changed fixes the underlying issue.
-
-2012-07-31 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (etc::dir_changed): Revert muto changes since function is
- called under lock condition anyway.
-
-2012-07-31 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (etc::dir_changed): Change `io' to a static NO_COPY
- variable. Explain why. Add a muto to guard overwriting the changed_h
- handle by multiple concurrent threads.
- * path.h (class etc): Drop unused changed_h member.
-
-2012-07-30 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * winlean.h: Define constant which will be needed eventually. Remove
- hack in favor of another hack.
- * lib/crt0.h: Use "winlean.h".
-
-2012-07-30 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * winlean.h: Add temporary define.
- * winsup.h: Remove ancient debugging defines.
-
-2012-07-29 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * cygwait.cc (cancelable_wait): Add some debugging-only output.
- * exceptions.cc (sig_handle_tty_stop): Make sure that incyg is cleared
- when exiting if we have no parent process. Only wait for signal_arrived.
- (sigpacket::process): Make continue_now a bool. Delay sending
- signal_arrived until the end. Make code more defensive to avoid
- calling signal handler when stopped. Only set signal_arrived when
- stopped.
- * sigproc.cc (sig_hold): Rename from sigCONT. Make static.
- (sig_send): Accommodate sigCONT -> sig_hold rename.
- (wait_sig): Ditto.
- * sigproc.h (sigCONT): Delete declaration.
-
- * fhandler_console.cc (fhandler_console::write): Use new '%0c' facility
- to print characters. Change to paranoid to avoid excessive strace
- output.
- * fhandler_tty.cc (fhandler_pty_master::accept_input): Make frequent
- strace printf "paranoid" to help cut down on strace output size.
-
- * signal.cc (sigsuspend): Add standard syscall strace output.
- (sigpause): Ditto.
- (pause): Ditto.
-
-2012-07-29 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * cygtls.h (_cygtls::reset_signal_arrived): New function.
- (set_signal_arrived::~set_signal_arrived): Use reset_signal_arrived to
- reset state.
- * exceptions.cc (sig_handle_tty_stop): Use WAIT_SIGNALED rather than
- assume we know the return from cancelable_wait.
- (_cygtls::interrupt_setup): Modify to allow calling when executing in
- non-cygwin code via sigdelayed. Always reset signal_arrived.
- * gendef: Throughout use start_offset rather than the completely wrong
- sizeof__cygtls.
- (_sigdelayed): Rewrite to avoid duplication when calling the signal
- handler.
- (sigreturn): Delete.
- * gentls_offsets: Define start_offset rather than sizeof__cygtls.
- * tlsoffsets.h: Regenerate.
-
-2012-07-29 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * fhandler_termios.cc (fhandler_termios::line_edit): Use special case
- '%0c' handling to print non-printable characters using hex notation.
- * smallprint.cc (__small_vsprintf): Semi-reimplement printing of
- non-printable characters in hex but only when padding is specified.
-
- * dcrt0.cc (dll_crt0_0): Remove tty_list initialization.
- * shared.cc (memory_init): Initialize tty_list here.
-
- * path.cc (path_conv::check): Remove unneeded parentheses from if
- check.
-
-2012-07-28 Corinna Vinschen <corinna@vinschen.de>
-
- * include/inttypes.h: Add x86_64 target considerations throughout.
- Define macros in C++ according to C99 requirements.
- * include/stdint.h: Ditto.
-
-2012-07-25 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * signal.cc (clock_nanosleep): Force return on signal rather than
- letting cancelable_wait loop on signal.
-
-2012-07-25 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (enum bin_status): Add dir_not_empty.
- (try_to_bin): Call NtQueryInformationFile(FileInternalInformation)
- with exact buffer size. Explain why.
- Ditto for NtSetInformationFile(FileRenameInformation).
- Handle race-condition which might lead to renaming a non-empty
- directory.
- (unlink_nt): Rearrange and partially rephrase comments related to the
- STATUS_SHARING_VIOLATION case. Fix condition under which a dir is
- tested for being non-empty. Handle dir_not_empty return code from
- try_to_bin. Gracefully handle disappearing directory in rm -r
- workaround. Fix typo in comment.
-
-2012-07-24 Corinna Vinschen <corinna@vinschen.de>
-
- * wincap.cc (wincapc::init): Drop memset call since it can result in
- a race condition. Drop all considerations for pre-Windows 2000 systems
- since Cygwin won't start on them anyway.
-
-2012-07-23 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- Change "set_thread_waiting" to "set_signal_arrived" throughout.
-
-2012-07-21 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * DevNotes: Add entry cgf-000013.
- * cygserver_ipc.h (ipc_set_proc_info): Use _cygtls::ipc_set_proc_info
- to set per-thread signal arrived value.
- * cygthread.cc (cygthread::detach): Use per-thread signal_arrived via
- set_thread_waiting.
- * fork.cc (_cygtls::fixup_after_fork): Clear signal_arrived.
- (_cygtls::remove): Close any signal_arrived handle when thread exists.
- (_cygtls::find_tls): Remove unneeded function.
- * cygtls.h: Update copyright.
- (class _cygtls): Reorganize to help avoid rebuilding newlib when
- structure changes.
- (_cygtls::event): Delete.
- (_cygtls::threadkill): Ditto.
- (_cygtls::signal_waiting): Declare new bool.
- (_cygtls::find_tls): Delete declaration.
- (_cygtls::set_threadkill): Ditto.
- (_cygtls::reset_threadkill): Ditto.
- (_cygtls::set_signal_arrived): Declare new function.
- (class set_thread_waiting): Declare new class.
- * cygwait.cc (cw_nowait_storage): Define.
- (cygwait): Set per-thread signal_arrived via set_thread_waiting. Don't
- special-case _main_tls.
- * cygwait.h (cw_nowait): Define.
- (cw_infinite): Ditto.
- (cygwait): Redefine pathological wait-only case.
- * dcrt0.cc (dll_crt0_0): Remove call to now-defunct events_init().
- (dll_crt0_1): Remove call to now-defunct create_signal_arrived().
- * exceptions.cc: Reflect set_signal_mask() argument reordering
- throughout. Remove signal mask synchronization throughout.
- (events_init): Delete definition.
- (mask_sync): Delete now-unneeded mask synchronization.
- (set_signal_mask): Reverse order of arguments to "standard" to, from
- layout. Rename "newmask" argument to "setmask". Remove debugging.
- (sig_handle_tty_stop): Use cancelable_wait rather than WFMO.
- (_cygtls::interrupt_setup): Don't treat "threadkill" events specially.
- Conditionally set signal_arrived depending on whether the thread has
- created it or not.
- (sigpacket::process): Reorganize to reflect thread-specific sending of
- signals which is more in line with the way it was actually supposed to
- work.
- * fhandler_socket.cc (get_inet_addr): Use cancelable_wait rather than
- IsEventSignalled to avoid potential race.
- (fhandler_socket::wait_for_events): Set signal_arrived event using
- set_thread_waiting().
- (fhandler_socket::close): Use cygwait for the case of just
- waiting 10 ms for a signal.
- * fhandler_tape.cc (fhandler_dev_tape::_lock): Use cancelable_wait
- rather than WFMO. Redo switch/case tests accordingly.
- * fhandler_termios.cc (fhandler_termios::bg_check): Use cygwait for
- case of just waiting 0 ms for a potential signal.
- * fhandler_tty.cc (fhandler_pty_master::process_slave_output): Use
- cancelable_wait rather than WFSO.
- * fhandler_windows.cc (fhandler_windows::read): Set per-thread
- signal_arrived via set_thread_waiting().
- * flock.cc (lf_setlock): Ditto.
- * select.cc (pselect): Ditto. Set per-thread signal_arrived using
- set_thread_waiting().
- * gendef: Don't special case handling of _cygtls::sig for threads.
- * gentls_offsets: Use #pragma once in tlsoffsets.h.
- * ntdll.h: Use #pragma once.
- * poll.cc: Reflect set_signal_mask() argument reordering.
- * posix_ipc.cc (ipc_mutex_lock): Use cancelable_wait rather than WFMO.
- (ipc_cond_timedwait): Set perl-thread signal arrived using
- set_thread_waiting().
- * security.h: Use #pragma once.
- * signal.cc (abort): Reflect set_signal_mask() argument reordering.
- (clock_nanosleep): Ditto. Change call to cancelable_wait to properly
- specify handling of cancel and interrupt.
- (sigwaitinfo): Remove handling of per-thread event in favor of
- per-thread signal_arrived. Use cancelable_wait rather than WFSO.
- * sigproc.cc (signal_arrived): Delete definition.
- (create_signal_arrived): Ditto.
- * sigproc.h (signal_arrived): Delete declaration.
- (set_signal_mask): Avoid defining as a "C" function. Don't
- conditionally declare.
- (create_signal_arrived): Delete declaration.
- * syscalls.cc (rename): Use cygwait() rather than WFSO.
- * thread.h (fast_mutex::lock): Use cw_infinite rather than LARGE_NULL.
- * wait.cc (wait4): Ditto.
- * thread.cc (pthread_mutex::lock): Ditto.
- (pthread::join): Ditto.
- (semaphore::_wait): Ditto.
- (pthread_kill): Remove set_threadkill() accommodation.
- * tlsoffsets.h: Regenerate.
-
-2012-07-21 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * include/cygwin/version.h (CYGWIN_VERSION_DLL_MINOR): Bump to 17.
-
-2012-07-19 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * mount.cc (getmntent_r): Remove unused but set variable.
-
-2012-07-18 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * cygwin.din (getmntent_r): Export.
- * mount.cc (getmntent_r): New function.
- * posix.sgml (std-gnu): Add getmntent_r.
- * include/mntent.h (getmntent_r): Declare.
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
-
-2012-07-12 Corinna Vinschen <corinna@vinschen.de>
-
- * winlean.h: Make sure certain Windows macros are undefined again.
- Add comment to explain why.
- * winsup.h: Include winlean.h from C sources as well.
- * libc/minires-os-if.c: Drop including ntdef.h.
-
-2012-07-12 Corinna Vinschen <corinna@vinschen.de>
-
- * pseudo-reloc.cc: Drop including wchar.h and ntdef.h.
- (__report_error): Define module as WCHAR.
- * advapi.cc: Drop including wchar.h.
- * kernel32.cc: Ditto.
-
-2012-07-11 Corinna Vinschen <corinna@vinschen.de>
-
- * cygtls.cc (well_known_dlls): Add ole32.dll and wbemprox.dll.
-
-2012-07-09 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.sc (.rdata): Revert patch from 2012-07-06.
-
-2012-07-09 Corinna Vinschen <corinna@vinschen.de>
-
- * passwd.cc (getpass): Make check for closed stream more reliable.
- Check if setting tty attributes worked and only revert to old state
- if so.
-
-2012-07-09 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in, configure.in, mkvers.sh: Revert accidental checkin from
- 2012-07-06.
-
-2012-07-07 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * Makefile.in: Change mingw_lib (temporarily?) back to w32api_lib.
-
-2012-07-06 Corinna Vinschen <corinna@vinschen.de>
-
- * winlean.h (__STRALIGN_H_): Drop definition.
-
-2012-07-06 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_procnet.cc: Fix copyright.
- * syslog.cc: Ditto.
- * libc/minires-os-if.c: Ditto.
- * libc/minires.h: Ditto.
-
-2012-07-06 Corinna Vinschen <corinna@vinschen.de>
-
- In terms of network related functionality, rely on Winsock definitions
- as much as possible:
- * dtable.cc: Drop including sys/socket.h.
- * fhandler_procnet.cc: Change includes accordingly.
- * fhandler_socket.cc: Ditto.
- (fhandler_socket::listen): Avoid gcc error message initializing sin6.
- (LPFN_WSARECVMSG): Only define when building against w32api headers.
- * net.cc: Change includes accordingly. Define USE_SYS_TYPES_FD_SET
- and __WSA_ERR_MACROS_DEFINED. Define _INC_NETIOAPI temporarily and
- explain why.
- (struct _IP_ADAPTER_UNICAST_ADDRESS_LH): Only define when building
- against w32api headers.
- (struct _IP_ADAPTER_ADDRESSES_LH): Ditto.
- (SIO_GET_INTERFACE_LIST): Ditto.
- (ws_freeaddrinfo): Rename from freeaddrinfo so as not to collide with
- Winsock declaration. Change througout.
- (ws_getaddrinfo): Ditto.
- (ws_getnameinfo): Ditto.
- * select.cc: Include netdb.h after defining USE_SYS_TYPES_FD_SET.
- * syslog.cc: Drop including netinet/in.h. Define USE_SYS_TYPES_FD_SET
- and include ws2tcpip.h.
- * include/netdb.h (struct addrinfo): Don't define when building Cygwin.
- * include/cygwin/if.h: Don't declare if_xxx functions when building
- Cygwin.
- * include/cygwin/in.h: Disable most definitions when building Cygwin.
- * include/cygwin/socket.h: Disable sockaddr and sockaddr_storage
- definitions when building Cygwin. Same for MCAST_INCLUDE/MCAST_EXCLUDE.
- * libc/inet_addr.c: Don't define __INSIDE_CYGWIN__ nor
- __INSIDE_CYGWIN_NET__.
- * libc/inet_network.c: Ditto.
- * libc/minires.h: Drop redundant inclusion of netdb.h. Define
- __INSIDE_CYGWIN_NET__ only before including netdb.h and resolver
- headers.
-
-2012-07-06 Corinna Vinschen <corinna@vinschen.de>
-
- * winbase.h: Throughout use LONG rather than long type to prepare for
- 64 bit.
- (InterlockedCompareExchangePointer): Define.
-
-2012-07-06 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_registry.cc (RegOpenUserClassesRoot): Only define when
- building against w32api headers.
- (RegOpenCurrentUser): Ditto.
- * fhandler_tty.cc (GetNamedPipeClientProcessId): Ditto.
- * ntdll.h (enum _PROCESSINFOCLASS): Add ProcessImageFileName.
- (RtlInitAnsiString): Declare.
- (RtlUnicodeStringToAnsiSize): Declare.
- * sched.cc (GetForegroundWindow): Ditto.
- * sec_helper.cc (SECURITY_NT_NON_UNIQUE): Define as
- SECURITY_NT_NON_UNIQUE_RID when building against w32api headers.
- (cygsid::get_sid): Use SECURITY_NT_NON_UNIQUE rather than
- SECURITY_NT_NON_UNIQUE_RID.
- (__sec_user): Use PISECURITY_DESCRIPTOR rather than PSECURITY_DESCRIPTOR
- to allow valid pointer arithmetic.
- (_recycler_sd): Ditto.
- (_everyone_sd): Ditto.
-
-2012-07-06 Corinna Vinschen <corinna@vinschen.de>
-
- * advapi32.cc (_ADVAPI32_): Drop definition.
- * kernel32.cc (_KERNEL32_): Ditto.
- * winlean.h: Add definitions required to use Mingw64 headers.
- (FILE_SHARE_VALID_FLAGS): Drop definition.
-
-2012-07-06 Corinna Vinschen <corinna@vinschen.de>
-
- * winsup.h (_WIN32_WINNT): Define. Explain why.
-
-2012-07-06 Corinna Vinschen <corinna@vinschen.de>
-
- * libc/rcmd.cc: Don't undef __INSIDE_CYGWIN_NET__.
-
-2012-07-06 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.sc (.rdata): Include all sections starting with .rdata.
- (.debug_pubtypes): Make sure section is loaded at the end like all other
- debug sections.
-
-2012-07-04 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * dcrt0.cc (build_argv): Guard against NULL pointer dereference found
- by Clang.
-
-2012-07-04 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * exceptions.cc (setup_handler): Remove unneeded assignment found by
- Clang.
-
-2012-07-04 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * hookapi.cc (find_first_notloaded_dll): Remove unused assignment of
- importRVASize found by Clang.
-
-2012-07-04 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * fhandler_tty.cc (fhandler_pty_slave::read): Remove duplicate
- assignment to bytes_in_pipe found by Clang.
-
-2012-07-02 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * exceptions.cc (exception::handle): Use error_code in klog, as
- intended. Found by Clang.
-
-2012-07-02 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (class fhandler_dev_clipboard): Remove member eof.
- * fhandler_clipboard.cc: Throughout remove handling of eof member.
- (fhandler_dev_clipboard::write): Handle EOF condition immediately,
- rather than pushing it erroneously to the next read call. Rearrange
- code. Fix bug in CF_UNICODETEXT case which potentially dropped single
- bytes at the end of the buffer. Add comment.
- * strfuncs.cc (sys_cp_wcstombs): Allow returning non-NUL-terminated
- buffer if dst != NULL and len == (size_t) -1. Extend leading comment
- to explain what's returned in more detail.
-
-2012-07-02 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * fhandler_virtual.cc (fhandler_virtual::opendir): Eliminate duplicate
- assignment found by Clang.
-
-2012-07-02 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * fhandler_registry.cc (fhandler_registry::open): Handle missing EROFS
- error condition pointed to by Clang.
-
-2012-07-02 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * pinfo.cc (_pinfo::commune_request): Eliminate unneeded assignment
- found by Clang.
-
-2012-07-02 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * external.cc (fillout_pinfo): Return NULL rather than 0.
- (exit_process): Guard against NULL pointer dereference found by Clang.
-
-2012-07-02 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * mount.cc (mount_info::conv_to_win32_path): Eliminate unneeded
- assignment found by Clang.
-
-2012-07-02 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * path.cc (symlink_info::check): Remove unneeded/unused variable found
- by Clang.
-
-2012-07-02 Corinna Vinschen <corinna@vinschen.de>
-
- * dll_init.cc (dll_list::alloc): Take long UNC paths into account.
-
-2012-07-01 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * Makefile.in: Add some more optimization flags for cygwait, malloc and
- path. Explain why -fomit-frame-pointer doesn't work right for passwd.o
- and path.o. Add -static to link command line for cygwin0.dll.
-
- * fhandler_disk_file.cc (fhandler_disk_file::facl): Reorganize slightly
- to silence compiler warning when compiling with -fstack-check.
- * net.cc (inet_ntop6): Initialize structure members to silence compiler
- warning when compiling with -fstack-check.
-
- * pseudo-reloc.cc (_pei386_runtime_relocator): Make this a C function.
- Detect NULL u.
- * winsup.h (_pei386_runtime_relocator): Declare this as extern "C".
- * lib/_cygwin_crt0_common.cc (_pei386_runtime_relocator): Call with
- NULL argument.
-
- * signal.cc (sigaction_worker): Eliminate last argument. Let callers
- report their own strace info. Regparmize.
- (sigaction): Reflect sigaction_worker changes.
- (siginterrupt): Ditto.
-
- * exceptions.cc: Update copyright.
-
-2012-07-01 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * path.cc: Perform some whitespace fixups throughout.
-
-2012-06-28 Corinna Vinschen <corinna@vinschen.de>
-
- * kernel32.cc (_KERNEL32_): Define. Explain why.
- (CreateFileMappingW): Drop undocumented flProtect flags.
-
-2012-06-28 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_serial.cc: Fix includes for IOCTL codes to support Mingw64.
- * fhandler_tape.cc: Ditto.
- * flock.cc (allow_others_to_sync): Use PISECURITY_DESCRIPTOR since
- PSECURITY_DESCRIPTOR is supposed to be the opaque type.
- * ntdll.h: Remove CreateDisposition flags again, now that they are
- defined in Mingw64's ntdef.h. Ditto for Create/Open flags.
-
-2012-06-28 Corinna Vinschen <corinna@vinschen.de>
-
- * exceptions.cc (RtlUnwind): Align declaration with MSDN.
- * ntdll.h: Define CreateDisposition Flags. Add comments.
- * winlean.h: Define FILE_SHARE_VALID_FLAGS if using Mingw64 headers.
-
-2012-06-27 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * cygwait.h (cancelable_wait): Make extern to avoid always including.
- * select.cc (allocfd_set): Try to make a little more efficient.
- (cygwin_select): Break into two functions to avoid what seems to be a
- strange compiler problem with alloca and sel constructor.
- (select): New function. Always honor return from call_signal_handler.
- (select_stuff::wait): Always honor return from call_signal_handler.
- * select.h (select_stuff::select_stuff): Use NULL to initialize
- pointers rather than 0.
-
-2012-06-27 Corinna Vinschen <corinna@vinschen.de>
-
- * exceptions.cc (exception::handle): Cast exception code to NTSTATUS
- for comparison.
- * ntdll.h: Drop defining NT status codes in favor of including
- ntstatus.h.
-
-2012-06-27 Corinna Vinschen <corinna@vinschen.de>
-
- * miscfuncs.cc (WritePipeOverlapped): Define second parameter LPCVOID,
- rather than PCVOID.
- * miscfuncs.h (WritePipeOverlapped): Ditto.
-
-2012-06-27 Corinna Vinschen <corinna@vinschen.de>
-
- * advapi32.cc (_ADVAPI32_): Define. Explain why.
- (ImpersonateNamedPipeClient): Add missing WINAPI.
- * ntdll.h (STATUS_INVALID_PARAMETER): Only define if it isn't already.
- (STATUS_DLL_NOT_FOUND): Ditto.
- (STATUS_ENTRYPOINT_NOT_FOUND): Ditto.
- (enum _EVENT_TYPE): Guard against redefinition since it's already
- defined in Mingw64's ntdef.h.
- (enum _TIMER_TYPE): Ditto.
- (enum _SECTION_INHERIT): Define if using Mingw64 headers since it's
- missing in Mingw64's ntdef.h.
- * winlean.h (__STRALIGN_H_): Define before including windows.h.
-
-2012-06-26 Corinna Vinschen <corinna@vinschen.de>
-
- * winsup.h (GetLastError): Drop redundant definition.
-
-2012-06-25 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * cygwait.cc (cancelable_wait): Make sure that timer is cancelled
- before cancelling thread.
-
-2012-06-25 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * cygwait.h (cancelable_wait): Need to force time to negative to
- indicate relative time.
-
-2012-06-21 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (realpath): Fix comment.
-
-2012-06-21 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (realpath): Call mount_info::conv_to_posix_path rather than
- mount_info::cygdrive_posix_path to convert DOS paths to POSIX paths.
- Add comment to explain why that's necessary at all.
-
-2012-06-18 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * cygwait.h (LARGE_NULL): Define.
- (cancelable_wait): Define variant which accepts DWORD time argument.
- (cygwait): Use cancelable_wait with DWORD argument.
- (cygwait): Use cancelable_wait with DWORD argument and cw_sig_eintr for
- timeout-only case.
- * exceptions.cc (handle_sigsuspend): Use LARGE_NULL as second argument
- to distinguish between cancelable_wait variants.
- * thread.cc (pthread_mutex::lock): Ditto.
- (pthread::join): Ditto.
- (semaphore::_timedwait): Ditto.
- * thread.h (fast_mutex::lock): Ditto.
- * wait.cc (wait4): Ditto.
-
-2012-06-18 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * cygwait.cc (cancelable_wait): Mimic old cygwait behavior more closely
- wrt handling of call_signal_handler.
- * cygwait.h (WAIT_CANCELED): Move here and redefine.
- (WAIT_SIGNALED): Ditto.
- * thread.h (WAIT_CANCELED): Delete.
- (WAIT_SIGNALED): Ditto.
-
-2012-06-18 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.cc (init_cygheap::init_installation_root): Rearrange code
- creating valid native NT installation_root path. Only strip last
- backslash from path if the result is a valid NT path. Explain why.
-
-2012-06-17 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- Add '#include "cygwait.h"' throughout, where appropriate.
- * DevNotes: Add entry cgf-000012.
- * Makefile.in (DLL_OFILES): Add cygwait.o.
- * sigproc.h: Remove cygwait definitions.
- * cygwait.h: New file. Define/declare Cygwin waitfor functions.
- * cygwait.cc: Ditto.
- * exceptions.cc: Include cygwait.h.
- (handle_sigsuspend): Accommodate change in cancelable_wait arguments.
- (sigpacket::process): Display thread tls in debugging output.
- * fhandler.cc (fhandler_base_overlapped::wait_overlapped): Use symbolic
- names for signal and cancel return.
- * fhandler_console.cc (fhandler_console::read): Ditto.
- (fhandler_dev_dsp::Audio_out::waitforspace): Ditto.
- fhandler_dev_dsp::Audio_in::waitfordata): Ditto.
- * fhandler_fifo.cc (fhandler_fifo::wait): Ditto.
- * fhandler_serial.cc (fhandler_serial::raw_read): Ditto.
- * fhandler_tty.cc (fhandler_pty_slave::read): Ditto.
- * select.cc (cygwin_select): Ditto.
- * wait.cc (wait4): Ditto.
- * thread.cc (cancelable_wait): Move definition to cygwait.h.
- (pthread_cond::wait): Accommodate change in cancelable_wait arguments.
- (pthread_mutex::lock): Ditto.
- (pthread_spinlock::lock): Ditto.
- (pthread::join): Ditto.
- (pthread::thread_init_wrapper): Display tls in debugging output.
- (semaphore::_timedwait): Ditto.
- * thread.h (cw_sig_wait): Move to cygwait.h.
- (cw_cancel_action): Delete.
- (cancelable_wait): Move declaration to cygwait.h.
-
-2012-06-11 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * regex/regcomp.c (p_ere): Allow vertical-line following
- left-parenthesis in ERE, as in glibc.
-
-2012-06-10 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * include/sys/elf_common.h (R_386_16): Define.
- (R_386_PC16): Define.
- (R_386_8): Define.
- (R_386_PC8): Define.
-
-2012-06-09 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * select.cc (cygwin_select): Remove select_timeout test.
- (select_stuff::wait): Return select_set_zero on timeout.
- (thread_socket): Report timeout when debugging.
-
-2012-06-05 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * include/elf.h: Update from FreeBSD.
- * include/machine/elf.h: New header, from FreeBSD.
- * include/sys/elf.h: Ditto.
- * include/sys/elf32.h: Update from FreeBSD.
- * include/sys/elf64.h: Ditto.
- * include/sys/elf_common.h: Ditto.
- (R_IA64_*): Define Linux-style names as aliases to R_IA_64_*.
- (R_SH_*): Define, based on sh-4 psABI.
- (R_390_*): Define, based on s390x psABI.
- * include/sys/elf_generic.h: Ditto.
-
-2012-06-04 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::link ): Translate
- STATUS_NOT_SUPPORTED to EPERM as well.
-
-2012-06-03 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * dtable.cc (dtable::dup3): Only return with lock set when O_EXCL flag
- is passed in.
- * syscalls.cc (dup_finish): Pass O_EXCL in flags to dtable::dup3.
-
-2012-06-03 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * DevNotes: Add entry cgf-000011.
- * fhandler.h (fhandler_base::refcnt): Delete.
- (fhandler_base::inc_refcnt): New function.
- (fhandler_base::dec_refcnt): New function.
- * cygheap.h (cygheap_fdnew::~cygheap_fdnew): Accommodate split of
- refcnt to inc_refcnt/dec_refcnt.
- (cygheap_fdget::cygheap_fdget): Ditto.
- (cygheap_fdget::~cygheap_fdget::cygheap_fdget): Ditto.
- * dtable.cc (dtable::release): Ditto.
- (cygwin_attach_handle_to_fd): Ditto.
- (dtable::init_std_file_from_handle): Ditto.
- (dtable::dup3): On success, return with fdtab locked.
- * dtable.h (dtable): Add dup_finish as a friend.
- * syscalls.cc (dup_finish): Define new function. Increment refcnt
- while fdtab is locked.
- (dup2): Use common dup_finish() to perform dup operation.
- (dup3): Ditto.
-
-2012-06-03 Corinna Vinschen <corinna@vinschen.de>
-
- * globals.cc (ro_u_refs): New R/O unicode string.
- * mount.cc (fs_info::update): Recognize ReFS.
- * mount.h (enum fs_info_type): Add refs.
- (class fs_info): Add refs flag and accessor methods.
- * ntdll.h (RtlAddAccessAllowedAceEx): Declare.
- (RtlAddAccessDeniedAceEx): Declare.
- * path.h (path_conv::fs_is_refs): Define.
- * sec_helper.cc (_recycler_sd): New function to create security
- descriptors suitable for the recycler bin starting with Vista.
- * security.cc (add_access_allowed_ace): Use RtlAddAccessAllowedAceEx
- and drop code to set AceFlags explicitely.
- (add_access_denied_ace): Use RtlAddAccessDeniedAceEx and drop code to
- set AceFlags explicitely.
- * security.h (_recycler_sd): Declare.
- (recycler_sd): Define.
- * syscalls.cc (desktop_ini): Change formatting.
- (desktop_ini_ext): Define third line of recycler desktop.ini file
- since Vista,
- (try_to_bin): Handle ReFS just like NTFS. Write Vista and later
- Recycler in all uppercase, just like shell32 does when recreating it.
- Fix comments to include ReFS. Don't implicitely reuse object
- attributes from earlier NtOpenFile call, rather recreate it for safety.
- Use recycler_sd call when creating security descriptor for Recycler
- dirs and files on Vista and later. Write third line of desktop.ini
- when on Vista and later.
-
-2012-06-03 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * winbase.h: Add missing copyright date.
-
-2012-06-03 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * select.cc (cygwin_select): Make sure that we only return -1 as an
- error return.
- (select_stuff::wait): Semi-revert to previous method for filling out
- w4.
-
-2012-06-02 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * select.cc (cygwin_select): Add some comments.
- (select_stuff::wait): Ditto.
-
-2012-06-02 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * DevNotes: Add entry cgf-000010.
- * select.cc (set_handle_or_return_if_not_open): Remove unneeded final
- backslash from definition.
- (cygwin_select): Reorganize to incorporate outer retry loop. Move
- remaining time recalculation here for retry case. Use
- select_stuff::wait_states for loop control.
- (select_stuff::cleanup): Avoid unneeded initialization.
- (select_stuff::wait): Modify definition to return
- select_stuff::wait_states. Eliminate is_cancelable. Don't inspect
- element 1 of an array if it is a cancel handle. Remove loop. Rely on
- being called from enclosing loop in cygwin_select. Remove time
- recalculation when restarting. Try harder to always return from the
- bottom.
- * select.h (select_stuff::wait_state): New enum.
- (select_stuff::wait): Modify declaration to return
- select_stuff::wait_states.
-
-2012-06-02 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * exceptions.cc (setup_handler): Make debugging output a little more
- verbose.
-
-2012-06-02 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * cygtls.h (_cygtls::protect_linked_list): Delete unused field.
-
-2012-05-30 Corinna Vinschen <corinna@vinschen.de>
-
- * hookapi.cc (find_first_notloaded_dll): Extend comment. Fix usage of
- mapped memory. Shorten static library name buffer to MAX_PATH. Use
- strlcpy to copy library name to buffer. Only Unmap "map" if it has been
- Mapped before.
- * pinfo.cc (status_exit): Drop unneeded declaration of
- find_first_notloaded_dll in favor of the declaration in winsup.h.
-
-2012-05-30 Corinna Vinschen <corinna@vinschen.de>
-
- * thread.cc: Remove temporary newlib workaround, now that newlib
- handles thread cancellation by itself.
- (class __cygwin_lock_handler): Remove.
- (__cygwin_lock_cleanup): Remove.
- (__cygwin_lock_lock): Revert newlib workaround,
- (__cygwin_lock_trylock): Ditto.
- (__cygwin_lock_unlock): Ditto.
- (pthread::pop_cleanup_handler): Ditto.
-
-2012-05-29 Corinna Vinschen <corinna@vinschen.de>
-
- * select.cc (select_stuff::wait): Temporarily disable restarting
- entirely.
-
-2012-05-29 Corinna Vinschen <corinna@vinschen.de>
-
- * security.h (cygsidlist::+=): Correctly copy well_known_sid info from
- source cygsid.
-
-2012-05-25 Corinna Vinschen <corinna@vinschen.de>
-
- * registry.cc (reg_key::build_reg): Fix typo in debug output.
-
-2012-05-25 Corinna Vinschen <corinna@vinschen.de>
-
- * select.cc (select_stuff::wait): When not returning after receiving
- a signal, recalculate timeout. Apply temporary fix to avoid crashes
- after calling the signal handler. Explain.
-
-2012-05-25 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_serial.cc (fhandler_serial::raw_read): Check for
- ERROR_OPERATION_ABORTED rather than ERROR_IO_INCOMPLETE after CancelIo.
-
-2012-05-25 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_serial.cc (fhandler_serial::raw_read): Just call ReadFile
- directly in case of non-blocking I/O and handle result gracefully.
-
-2012-05-24 Corinna Vinschen <corinna@vinschen.de>
-
- * thread.cc (__cygwin_lock_lock): Replace null thread check with test
- for cygwin_finished_initializing to handle process startup.
- (__cygwin_lock_trylock): Ditto.
- (__cygwin_lock_unlock): Ditto.
-
-2012-05-23 Corinna Vinschen <corinna@vinschen.de>
-
- * thread.cc (__cygwin_lock_lock): Take null thread at process startup
- into account.
- (__cygwin_lock_trylock): Ditto.
- (__cygwin_lock_unlock): Ditto.
-
-2012-05-23 Corinna Vinschen <corinna@vinschen.de>
-
- * thread.cc (pthread::cancel): Re-allow asynchronous cancellation from
- Cygwin code since it looks like the problem is Windows only.
-
-2012-05-23 Corinna Vinschen <corinna@vinschen.de>
-
- * thread.cc: Add a temporary workaround to help Cygwin along while
- newlib doesn't install cleanup handlers. Explain the problem.
- (class __cygwin_lock_handler): New class.
- (__cygwin_lock_cleanup): New function.
- (__cygwin_lock_lock): Push __cygwin_lock_cleanup thread cleanup
- handler.
- (__cygwin_lock_trylock): Ditto.
- (__cygwin_lock_unlock): Pop thread cleanup handler.
- (pthread::pop_cleanup_handler): Temporarily allow cleanup function to
- destroy cleanup handler so we can pop in another function than we
- pushed in.
-
-2012-05-23 Corinna Vinschen <corinna@vinschen.de>
-
- * thread.cc (pthread::cancel): Only allow asynchronous cancellation
- if the thread is not executing Cygwin or Windows code. Explain why.
-
-2012-05-23 Corinna Vinschen <corinna@vinschen.de>
-
- * thread.cc (pthread::precreate): Make sure mutex is recursive.
- Explain why.
-
-2012-05-23 Corinna Vinschen <corinna@vinschen.de>
-
- * thread.cc (pthread::pop_cleanup_handler): Move setting the cancelstate
- to PTHREAD_CANCEL_DISABLE from here...
- (pthread::pop_all_cleanup_handlers): ...to here, otherwise any explicit
- call to pthread_cleanup_pop disables cancellation for this thread.
-
-2012-05-23 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (refcnt): Add i interlocked. Explain why.
- * winbase.h (ilockadd): New function.
- (InterlockedAdd): Define as ilockadd.
-
-2012-05-22 Corinna Vinschen <corinna@vinschen.de>
-
- * devices.in: Fix native name of /dev/kmem.
- * devices.cc: Regenerate.
- * dtable.cc (fh_alloc): Don't forget FH_KMEM.
- * fhandler_mem.cc (fhandler_dev_mem::open): Set errno to EACCES rather
- than ENOENT on systems not granting access to physical memory from
- user space.
-
-2012-05-22 Corinna Vinschen <corinna@vinschen.de>
-
- * thread.cc (pthread::cancel): Set thread's cancel_event in
- PTHREAD_CANCEL_ASYNCHRONOUS case, too. Explain why.
-
-2012-05-21 Corinna Vinschen <corinna@vinschen.de>
-
- * strace.cc (strace::activate): Move printing heap size from here...
- * heap.cc (heap_init_info): ...to here. Explain why. Print heap
- size in hex and decimal.
-
-2012-05-21 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (cygwin_recvfrom): Don't shortcircuit if len == 0. Add comment
- to explain why.
- (cygwin_recv): Ditto.
- (cygwin_recvmsg): Ditto.
-
-2012-05-21 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (path_conv::isgood_inode): Rearrange, take
- Samba versions >= 3.5.4 into account, add comments.
-
-2012-05-16 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * DevNotes: Add entry cgf-000009.
- * smallprint.cc (__small_vsprintf): Always treat '%c' and '%C' as
- characters. Don't decode them if they are > 127.
- (__small_vswprintf): Ditto.
-
-2012-05-15 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * DevNotes: Add entry cgf-000008.
- * fhandler_tty.cc (bytes_available): Simplify by returning the number
- of bytes available in the message unless that is zero.
-
-2012-05-14 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * child_info.h (CURR_CHILD_INFO_MAGIC): Update.
-
-2012-05-14 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * DevNotes: Add entry cgf-000007.
- * child_info.h (child_info_spawn::parent_winpid): Declare new field.
- (child_info_spawn::get_parent_handle): Declare new function.
- * dcrt0.cc (child_info_spawn::get_parent_handle): Define new function.
- (child_info_spawn::handle_spawn): Recreate parent handle if possible
- when dynamically loaded. Don't mess with parent handle if it's NULL.
- * spawn.cc (child_info_spawn::worker): Set parent_winpid appropriately.
-
-2012-05-12 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * DevNotes: Add entry cgf-000006.
- * thread.cc (pthread::pop_cleanup_handler): Set cancel state to
- disabled to avoid recursively waiting for cancel.
-
-2012-05-12 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * DevNotes: Add entry cgf-000005.
- * fhandler.h (PIPE_ADD_PID): Redefine to something we actually DON'T
- use.
- * pipe.cc (fhandler_pipe::create): Avoid clearing all open_mode bits
- when checking for PIPE_ADD_PID. Properly keep track of len so that
- passed in name is not overwritten.
-
-2012-05-10 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * cygwin.din (memrchr): Export.
- * posix.sgml (std-gnu): Add memrchr.
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
-
-2012-05-10 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/version.h (CYGWIN_VERSION_DLL_MINOR): Bump to 16.
-
-2012-05-08 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * DevNotes: Add entry cgf-000004.
- * pinfo.cc (pinfo::init): Reuse shared memory if the state is marked
- with PID_REAPED.
- * spawn.cc (child_info_spawn::worker): Don't duplicate myself_pinfo
- into non-cygwin child.
-
- * fork.cc (frok::parent): Improve error output.
-
-2012-05-07 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * DevNotes: Add entry cgf-000003.
- * cygheap.h (init_cygheap::pid_handle): Delete.
- * dcrt0.cc (child_info_spawn::handle_spawn): Keep parent open if we
- have execed.
- * pinfo.cc (pinfo::thisproc): Remove pid_handle manipulations.
- (pinfo::init): Don't consider a reaped process to be available.
- * spawn.cc (child_info_spawn::worker): Remove pid_handle manipulations.
- Make wr_proc_pipe and parent noninheritable when starting a program
- which doesn't use the Cygwin DLL. Conditionally reset wr_proc_pipe to
- inheritable if CreateProcess fails. Inject wr_proc_pipe handle into
- non-Cygwin process. Consider a non-cygwin process to be 'synced'.
-
-2012-05-03 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * DevNotes: Add entry cgf-000002.
- * fhandler_tty.cc (bytes_available): Revert to previous Oct-2011
- behavior where a dummy buffer is used to determine how many bytes will
- be read.
- (fhandler_pty_master::ioctl): Correct coercion in assignment.
-
-2012-05-03 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (get_adapters_addresses): Only create thread on affected
- systems. Change comment acordingly.
- * wincap.h (wincaps::has_gaa_largeaddress_bug): New element.
- * wincap.cc: Implement above element throughout.
- (wincap_8): New globale wincaps to support Windows 8.
- (wincapc::init): Take Windows 8 into account. Set new
- has_gaa_largeaddress_bug member to false on 32 bit systems.
-
-2012-05-02 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * DevNotes: New file. Add entry cgf-000001.
- * sigproc.cc (proc_terminate): Don't set parent pid of child to 1 if
- we've execed since the execed process is still considered the parent.
-
- * child_info.h: Bump copyright.
-
-2012-05-02 Corinna Vinschen <corinna@vinschen.de>
-
- * fenv.cc (fesetround): Fix test for valid input parameter.
- (fesetprec): Ditto.
-
-2012-04-30 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * fhandler.h (PIPE_ADD_PID): Define new flag.
- * pipe.cc (fhandler_pipe::create): Don't indiscriminately add process
- id to every pipe since some pipe names (fifo, tty) don't need it.
- * sigproc.cc (sigproc_init): Pass PIPE_ADD_PID to fhandler_pipe::create
- to ensure that pid is always part of sigwait pipe name.
-
-2012-04-28 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * environ.cc (struct parse_thing): Add "pipe_byte" option.
- * globals.cc (pipe_byte): Declare.
- * pipe.cc (fhandler_pipe::create): Use current process id in pipe name
- rather than pid for simple name collision avoidance. Do this only once
- to avoid extra overhead when a busy pipe is found. Honor pipe_byte to
- create non-message pipes if set.
- * sigproc.cc (sigproc_init): Use a specific name for the signal pipe.
-
-2012-04-27 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (find_fast_cwd_pointer): Fix for W8 CP 32 bit.
-
-2012-04-25 Thomas Wolff <towo@towo.net>
-
- * fhandler.h (class dev_console): Add member ext_mouse_mode5.
- * fhandler_console.cc (fhandler_console::read): Implement extended
- mouse mode 1005 (xterm, mintty).
- Fix actual mouse reporting for large coordinates.
-
-2012-04-24 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/version.h (CYGWIN_VERSION_DLL_MINOR): Bump to 15.
-
-2012-04-24 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_console.cc (ALT_PRESSED): Define earlier, never undefine.
- (CTRL_PRESSED): Ditto.
- (fhandler_console::read): Simplify expressions testing for pressed ALT
- or CTRL modifier keys.
- (get_nonascii_key): Ditto.
-
-2012-04-24 Thomas Wolff <towo@towo.net>
-
- * fhandler.h (class dev_console): Add members ext_mouse_mode6 and
- ext_mouse_mode15.
- * fhandler_console.cc (fhandler_console::read): Implement extended
- mouse modes 1015 (urxvt, mintty, xterm) and 1006 (xterm). Recognize,
- but don't implement extended mouse mode 1005 (xterm, mintty).
- Support mouse coordinates greater than 222 (each axis). Fix formatting.
- (fhandler_console::char_command): Initialize enhanced mouse reporting
- modes.
-
-2012-04-21 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * dtable.cc (fh_alloc): Only disallow opening of nonexistent on-disk
- device.
- * path.cc (path_conv::check): Remove PATH_KEPT_HANDLE setting.
- * path.h (path_types): Remove PATH_KEPT_HANDLE.
- (path_conv::kept_handle): Delete now-unneeded function.
-
-2012-04-19 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * dtable.cc (fh_alloc): Keep fh which was flagged as error if it is for
- an on-disk device and we were stating it.
- * path.cc (path_conv::check): Set PATH_KEPT_HANDLE.
- * path.h (path_types): Add PATH_KEPT_HANDLE.
- (path_conv::kept_handle): Implement.
-
-2012-04-18 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * fhandler.h (fhandler_base::nohandle): Revert to standard
- implementation.
- * dtable.cc (dtable::fixup_after_exec): Specifically reject releasing
- nohandle() type fhandlers rather than relying on contents of io_handle.
- (dtable::fixup_after_fork): Ditto.
- * fhandler_termios.cc: Add includes necessary for definitions of
- have_execed and have_execed_cygwin.
- (fhandler_termios::sigflush): Don't flush console input when we've
- started a non-Cygwin process.
-
-2012-04-15 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * wincap.h: Rename assitant to assistant throughout.
- * wincap.cc: Ditto.
- * devices.in (exists_console): Use fhandler_console::exists () rather
- than raw test.
- * devices.cc: Regenerate.
- * fhandler.h (fhandler_console::exists): Define new function.
- * fhandler_console.cc (fhandler_console::need_invisible): Use
- fhandler_console::exists () rather than raw test.
- * spawn.cc: Rename assitant to assistant throughout.
- (child_info_spawn::worker): Simplify test for when to start a
- non-Cygwin process in its own process group. Just do it whenever we
- start a non-Cygwin process.
-
-2012-04-12 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * devices.in (exists_console): Allow /dev/con{sole,in,out} to be
- referenced if a console exists.
- * devices.cc: Regenerate.
- * fhandler_console.cc (fhandler_console::set_unit): Ditto.
-
-2012-04-11 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (fhandler_base::stat_fixup): Fix inode numbers of
- non-device files in virtual fileysystems.
-
-2012-04-07 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * dtable.cc (cygwin_attach_handle_to_fd): Defend against NULL return
- from build_fh_*.
- (dtable::init_std_file_from_handle): Ditto.
- * mmap.cc (mmap_record::alloc_fh): Ditto.
- * path.cc (path_conv::check): Ditto.
-
-2012-04-06 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * fhandler.h (fhandler_base::nohandle): Implement "by hand" rather than
- through macro. Set io_handle to INVALID_HANDLE_VALUE when setting flag
- to true.
-
-2012-04-06 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * path.c (path_conv::check): Avoid directly referencing fields of the
- dev structure when it can be easily avoided.
-
-2012-04-05 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/version.h (CYGWIN_VERSION_DLL_MINOR): Bump to 14.
-
-2012-04-05 Corinna Vinschen <corinna@vinschen.de>
-
- * passwd.cc (pwdgrp::read_passwd): Fix pretty_ls entry typo contain
- the required number of colons.
-
-2012-04-04 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * fhandler.h (fhandler_pty_common::bytes_available): Declare new
- function.
- (fhandler_pty_master::flush_to_slave): Ditto.
- * fhandler_tty.cc (bytes_available): Define new function.
- (fhandler_pty_common::bytes_available): Ditto.
- (handler_pty_master::flush_to_slave): Ditto.
- (fhandler_pty_master::process_slave_output): Call flush_to_slave ()
- here. Use bytes_available () rather than PeekNamedPipe. Clean up
- sloppy logic.
- (fhandler_pty_slave::read): Use bytes_available () rather than
- PeekNamedPipe.
- (fhandler_pty_slave::ioctl): Ditto.
- (fhandler_pty_master::ioctl): Ditto.
- (fhandler_pty_master::cleanup): Remove ancient #if 0.
- * select.cc (peek_pipe): Call flush_to_slave whenever we're checking
- for a pty master.
-
-2012-04-04 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_nodevice.cc (fhandler_nodevice::open): Convert EROFS to
- ENOENT if non-existent file got opened for reading only. Explain why.
- * path.cc (path_conv::check): Stick to ENOENT if file has been opened
- for informational purposes only. Add to comment.
-
-2012-04-04 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (path_conv::check): Convert device type to FH_FS for
- non-existent files on /dev, unless /dev itself doesn't exist on disk.
- Add comment to explain why.
-
-2012-04-04 Corinna Vinschen <corinna@vinschen.de>
-
- * hookapi.cc (rvadelta): Compute max_size using SizeOfRawData rather
- than VirtualSize.
-
-2012-04-04 Corinna Vinschen <corinna@vinschen.de>
-
- * passwd.cc (_getpass_close_fd): New static pthread cleanup handler.
- (getpass): Rework to use /dev/tty in the first place. Install
- _getpass_close_fd as pthread cleanup handler. Flush prompt explicitely.
- Lock input and switch off signal input handling when reading password.
-
-2012-04-03 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/version.h (CYGWIN_VERSION_DLL_MINOR): Bump to 13.
-
-2012-04-03 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (fhandler_base::stat_fixup): Replace string comparison
- with new device::is_dev_resident() call.
-
-2012-04-02 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * devices.h (lives_in_dev): New field.
- (dev_on_fs): Set bit size.
- (is_dev_resident): Define new method.
- * devices.in: Use different method for labelling requested name for dev
- storage: prefix it with a ='. Use an actual ':' to denote an internal
- device.
- (exists_console): Avoid repeated test.
- (exists_ntdev_silent): Rename from the less-descriptive exists_ntdevs.
- (dev_dev_storage): Delete unneeded define.
- * gendevices: Add a flag to each line denoting whether the device lives
- in /dev space.
- (generate): Handle special ":" case here for internal devices. Parse
- =something_dev as requiring a storage location. Tack the rest of the
- line back onto the reformulated "$rest".
- * devices.cc: Regenerate.
-
-2012-04-02 Corinna Vinschen <corinna@vinschen.de>
-
- * devices.h (device::get_device): New method.
- * fhandler_dev.cc (fhandler_dev::readdir): Set st_ino to device number.
- * syscalls.cc (fhandler_base::stat_fixup): Ditto. Fix link count for
- CD-ROM devices. Fix typo in comment.
-
-2012-04-02 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (fhandler_base::stat_fixup): Rename from
- fhandler_base::set_ino_and_dev.
- * syscalls.cc (fhandler_base::stat_fixup): Ditto. Accommodate name
- change throughout. Fixup link count of console devices.
-
-2012-04-02 Corinna Vinschen <corinna@vinschen.de>
-
- * devices.h (FH_CYGDRIVE): Define as DEV_VIRTFS_MAJOR class device.
- (DEV_CYGDRIVE_MAJOR): Remove.
- (iscygdrive_dev): Define.
- * dtable.cc (fh_alloc): Accommodate above change.
- * path.cc (path_conv::check): Use iscygdrive_dev to check for cygdrive.
- * syscalls.cc (fhandler_base::set_ino_and_dev): Drop check for
- DEV_CYGDRIVE_MAJOR from conditional.
-
-2012-04-02 Corinna Vinschen <corinna@vinschen.de>
-
- * devices.h (FH_DEV): Define as DEV_VIRTFS_MAJOR class device.
- (DEV_DEV_MAJOR): Remove.
- * dtable.cc (fh_alloc): Accommodate above change.
- * syscalls.cc (set_ino_and_dev): Drop check for DEV_DEV_MAJOR from
- conditional.
-
-2012-04-02 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (fhandler_base::set_ino_and_dev): Declare.
- * syscalls.cc (fhandler_base::set_ino_and_dev): New method to set
- st_ino, st_dev, and st_rdev for devices in a single spot.
- (fstat64): Call fhandler_base::set_ino_and_dev instead of setting
- st_ino, st_dev, and st_rdev here.
- (stat_worker): Ditto.
-
-2012-04-02 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (fhandler_dev::open): Declare.
- (fhandler_dev::close): Declare.
- (fhandler_dev::fstat): Declare.
- (fhandler_dev::fstatvfs): Declare.
- (fhandler_cygdrive::fstatvfs): Declare.
- * fhandler_dev.cc (fhandler_dev::open): New method.
- (fhandler_dev::close): Ditto.
- (fhandler_dev::fstat): Ditto.
- (fhandler_dev::fstatvfs): Ditto.
- * fhandler_disk_file.cc (fhandler_base::fstat_helper): Don't fill
- st_rdev.
- (fhandler_cygdrive::fstatvfs): New method.
- * path.h (path_conv::fs_got_fs): New method.
- * mount.h (fs_info::got_fs): Change type to bool, make public.
-
-2012-04-02 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (fillout_mntent): Use "none" rather than 0 when checking
- FS type.
-
-2012-04-01 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * dtable.cc (dtable::fixup_close): Define new function.
- (dtable::fixup_after_exec): Use fixup_close() and detect when it was
- not possible to open an inherited file handle.
- (dtable::fixup_after_fork): Defensively close any file handles which
- were not, for some reason, inheritable.
- * dtable.h: Make #pragma once.
- (dtable::fixup_close): Declare new function.
- * fhandler_console.cc (fhandler_console::set_unit): Set I/O handles to
- NULL when this function fails.
-
-2012-04-01 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_dev.cc (fhandler_dev::readdir): Fix formatting. Simplify
- code. Use device::type() to fetch dirent compatible device type.
- Add comment.
-
-2012-03-31 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * devices.h (device::exists_func): Redefine field.
- (device::dev_on_fs): Remove unneeded bit field. Just make a normal
- boolean.
- (device::exists): Redefine function.
- * devices.in: Move previous functions earlier since they are now only
- defined static. Rename some functions due to an as-yet unresolved bug
- in gendevices. Rename posix part of internal-only devices with a
- double-slash. gendevices will eventuall translate that to a ":".
- (device::parse): Rework to use dev pointer and dev_storage_end.
- * devices.cc: Regenerate.
- * gendevices: Translate "// to ": after shilka processing.
-
-2012-03-31 Corinna Vinschen <corinna@vinschen.de>
-
- * devices.cc: Regenerate.
- * devices.h (device::exists_func): New member function pointer,
- replacing noexpose.
- (device::expose): Remove.
- (device::exists_never): Declare.
- (device::exists_ptys): Declare.
- (device::exists_cons): Declare.
- (device::exists_console): Declare.
- (device::exists_nt_dev): Declare.
- (device::exists): Declare.
- * devices.in (dev_storage): Replace former noexpose values with
- pointers to matching exists_XXX method.
- (device::exists_never): New method.
- (device::exists_ptys): New method.
- (device::exists_cons): New method.
- (device::exists_console): New method.
- (device::exists_nt_dev): New method.
- (device::exists): New method.
- * fhandler_dev.cc (fhandler_dev::readdir): Replace call to
- device::expose with call to device::exists and drop all further
- existence filtering since it's done in device::exists now.
- * path.cc (path_conv::check): Replace call to device::expose with call
- to device::exists.
-
-2012-03-30 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * devices.cc: Regenerate.
- * devices.h (device::noexpose): New field.
- (device::dev_on_fs): Make a bit field.
- (get_major): Use proper type for declaration.
- (expose): New field.
- (ext_dev_storage): Delete declaration.
- (dev_storage_size): Ditto.
- (dev_storage): New declaration.
- (dev_storage_end): Ditto.
- * devices.in: Mark /dev/ptym*, /dev/com*, /dev/pipe, /dev/fifo, and
- "/dev" as "no expose".
- * fhandler.h (fhandler_dev::lastrealpos): Delete declaration.
- (fhandler_dev::devidx): Declare new field.
- * fhandler_disk_file.cc: Move fhandler_dev functions into
- fhandler_dev.cc.
- * fhandler_dev.cc: Add includes needed for functions moved from
- fhandler_disk_file.cc.
- (dev_storage_scan_start): Define place to start listing devices.
- (dev_storage_size): Define size of array to scan.
- (fhandler_dev::fhandler_dev): Move here from fhandler_disk_file.cc.
- (fhandler_dev::opendir): Ditto.
- (fhandler_dev::readdir): Just check devidx for non-NULL to determine
- when to go to disk for /dev content. Use dev_storage rather than
- ext_dev_storage. Iterate over dev_storage using devidx pointer. Use
- accessor functions rather than raw references to the device struct.
- Only increment dir->__d_position when we are actually going to be
- returning something. Add debug_printf for exit.
- (fhandler_dev::rewinddir): Set devidx as appropriate depending on
- whether there's a /dev on disk or not.
- * gendevices: Don't mark dev_storage static but do put it in the _RDATA
- section.
- * path.cc (path_conv::check): Use new "device::expose()" function to
- decide to forbid programs from referencing internal device types.
-
-2012-03-30 Corinna Vinschen <corinna@vinschen.de>
-
- * posix.sgml (std-notes): Change description of flock restrictions.
-
-2012-03-30 Corinna Vinschen <corinna@vinschen.de>
-
- * devices.h (DEV_TTY_MAJOR): Define, use throughout where appropriate.
- (DEV_VIRTFS_MAJOR): Ditto.
- * fhandler_dev.cc (fhandler_dev::readdir): Add comments. Tweak tests
- for invisible devices. Don't print comX devices, only ttySX. Drop
- requirement to call stat64.
-
-2012-03-29 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (DLL_OFILES): Add fhandler_dev.o.
- * devices.h (DEV_DEV_MAJOR): Define.
- (FH_DEV): Redefine in terms of DEV_DEV_MAJOR.
- (ext_dev_storage): Declare.
- (dev_storage_size): Declare.
- (dev_dev_storage): Declare.
- (dev_dev): Define.
- (isdev_dev): Define.
- * devices.in (dev_dev_storage): Activate.
- (ext_dev_storage): Define as externally available pointer to
- dev_storage.
- (dev_storage_size): Define to contain number of dev_storage elements.
- * dir.cc (rmdir): Handle /dev as always not empty.
- * dtable.cc (fh_alloc): Handle DEV_DEV_MAJOR.
- * fhandler.h (fhandler_dev): New class, derived from fhandler_disk_file.
- (fhandler_union): Add fhandler_dev member.
- * fhandler_disk_file.cc (class __DIR_mounts): Handle /dev directory
- to make sure it always exists.
- * fhandler_dev.cc: New file implementing /dev.
- * globals.cc (ro_u_dev): New R/O unicode string.
- * path.cc (path_conv::check): Handle FH_DEV device.
-
-2012-03-29 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * fhandler_console.cc (fhandler_console::set_unit): Don't succeed
- unless we are opening a console actually associated with this process.
-
-2012-03-29 Corinna Vinschen <corinna@vinschen.de>
-
- * sec_acl.cc (acl32): Fix potential crash if build_fh_name returns NULL.
-
-2012-03-29 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * exceptions.cc (ctrl_c_handler): Don't generate a SIGINT if we've
- execed a non-cygwin process. Let the Windows process deal with it
- itself.
-
-2012-03-28 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * sigproc.cc (proc_terminate): Avoid releasing myself.
-
-2012-03-28 Corinna Vinschen <corinna@vinschen.de>
-
- * times.cc (clock_setres): Set minperiod to period.
-
-2012-03-27 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_process.cc (process_tab): Add entry for mountinfo.
- (format_process_mountstuff): New function, derived from
- format_process_mounts. Only open another user's user_info shared
- memory area if the process is owned by another user. Actually
- access the opened shared user_info to get the right mount table.
- For other users, don't print remote cygdrive mount points. Print
- mountinfo or mounts output depending on the bool mountinfo argument.
- (format_process_mounts): Just call format_process_mountstuff with
- mountinfo set to false.
- (format_process_mountinfo): Ditto with mountinfo set to true.
-
-2012-03-27 Corinna Vinschen <corinna@vinschen.de>
-
- * times.cc (clock_setres): Revert previous change.
-
-2012-03-26 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (class fhandler_dev_clipboard): Add fstat method.
- * fhandler_clipboard.cc (cygcb_t): New type for Cygwin-specific
- clipboard format.
- (set_clipboard): Use new clipboard format to allow setting a timestamp.
- (fhandler_dev_clipboard::fstat): New method. Read modification and
- access timestamp as well as length from clipboard data.
- (fhandler_dev_clipboard::read): Use new clipboard format.
-
-2012-03-26 Corinna Vinschen <corinna@vinschen.de>
-
- * hires.h (hires_ms::dmsecs): Drop unused method.
- * times.cc (JITTER): Remove.
- (gtod): Revert to process-local variable.
- (hires_ms::nsecs): Just return system time to disallow discrepancy with
- the OS.
- (hires_ms::resolution): Return coarsest timer value from OS. Add
- comment to explain why.
- (clock_setres): Ditto.
-
-2012-03-21 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * child_info.h: Reset magic number.
-
-2012-03-21 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * child_info.h (child_info::postfork): Define new function.
- * fork.cc (frok::parent): Call postfork to do all of the manipulation
- required prior to calling pinfo::remember.
- * pinfo.h (pinfo::set_rd_proc_pipe): Just set pinfo's rd_proc_pipe.
- Don't bother setting it to NULL.
- * sigproc.cc (child_info_spawn::wait_for_myself): Call postfork to set
- up myself for waiting.
- * spawn.cc (child_info_spawn::worker): Avoid now-unnecessary global
- lock. Consistently test mode rather than chtype when making
- wr_proc_pipe decisions. Call postfork() to set up stuff prior to
- pinfo::remember.
-
-2012-03-21 Corinna Vinschen <corinna@vinschen.de>
-
- * cygtls.cc (well_known_dlls): Add advapi32.dll.
-
-2012-03-21 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * child_info.h: Reset magic number.
- (child_info_spawn::wait_for_myself): Move function to sigproc.cc.
- * pinfo.cc (is_toplevel_proc): Delete unneeded variable.
- * sigproc.cc (child_info_spawn::wait_for_myself): Move function from
- header to here. Do all setup required to properly wait for top-level
- execed process to exit.
- * spawn.cc (child_info_spawn::worker): Attempt to properly handle
- _P_DETACH. Set wr_proc_pipe if top-level process even when execing.
- Just call wait_for_myself() to... wait for myself. Don't call cleanup
- twice.
-
-2012-03-21 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * pinfo.cc (proc_waiter): Remove debugging.
-
-2012-03-20 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * dtable.cc (set_std_handle): Call SetStdHandle with NULL if fd is
- closed.
- (dtable::release): "Close" standard handle if appropriate.
- * dcrt0.cc (dll_crt0_0): Fix minor switch formatting problem.
- * fork.cc (frok::parent): Make minor comment indentation change.
-
-2012-03-20 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (lseek): Fix debug output.
-
-2012-03-20 Christian Franke <franke@computer.org>
-
- * ntdll.h (SharedUserData): Add volatile qualifier. This fixes a
- possible infinite loop in hires_ms::timeGetTime_ns.
-
-2012-03-20 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/socket.h: Fix definitions of MCAST_INCLUDE and
- MCAST_EXCLUDE.
-
-2012-03-20 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * child_info.h (CURR_CHILD_INFO_MAGIC): Reset.
- (child_info::rd_proc_pipe): Declare new field.
- (child_info::wr_proc_pipe): Ditto.
- (child_info::prefork): Declare new function, derived from previous
- pinfo version.
- * dcrt0.cc (child_info_fork::handle_fork): Close previous wr_proc_pipe
- when appropriate and assign new one from passed-in child_info block.
- (child_info_spawn::handle_spawn): Assign our wr_proc_pipe handle from
- passed-in child_info block.
- * fork.cc (child_info::prefork): Define new function.
- (frok::child): Clear rd_proc_pipe and wr_proc_pipe so they will not be
- closed by the child_info destructor.
- (frok::parent): Use child_info prefork handling, outside of retry loop.
- Set rd_proc_pipe in child's pinfo after successful CreateProcess.
- Eliminate postfork call.
- * globals.cc (my_wr_proc_pipe): Define/declare new variable.
- * pinfo.cc (pinfo::pending_rd_proc_pipe): Delete.
- (pinfo::pending_wr_proc_pipe): Ditto.
- (pinfo::prefork): Ditto.
- (pinfo::postfork): Ditto.
- (pinfo::postexec): Ditto.
- (pinfo::wait): Assume that rd_proc_pipe is set up correctly prior to
- call.
- (_pinfo::alert_parent): Replace "wr_proc_pipe" with "my_wr_proc_pipe".
- * pinfo.h (_pinfo::_wr_proc_pipe): Delete declaration.
- (_pinfo::set_rd_proc_pipe): Define new function.
- (pinfo::pending_rd_proc_pipe): Delete declaration.
- (pinfo::pending_wr_proc_pipe): Ditto.
- (pinfo::prefork): Ditto.
- (pinfo::postfork): Ditto.
- (pinfo::postexec): Ditto.
- (pinfo::wr_proc_pipe): Ditto.
- * sigproc.cc (child_info::child_info): Clear rd_proc_pipe and
- wr_proc_pipe.
- (child_info::cleanup): Close rd_proc_pipe and
- wr_proc_pipe if necessary.
- (child_info_fork::child_info_fork): Set forker_finished to NULL by
- default.
- (child_info_spawn::child_info_spawn): Use my_wr_proc_pipe rather than
- myself->wr_proc_pipe.
- (child_info::sync): Ditto.
- (child_info_spawn::cleanup): Call child_info::cleanup.
- * spawn.cc (child_info_spawn::worker): Remove call to myself.prefork().
- Set wr_proc_pipe when execing or set up new rd_proc_pipe/wr_proc_pipe
- via child_info::prefork when spawning. Remove call to pinfo::postexec.
- Set rd_proc_pipe in child pinfo when spawning. Use my_wr_proc_pipe
- rather than myself->wr_proc_pipe. Remove call to postfork.
-
-2012-03-19 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * pinfo.cc (pinfo_init): Cosmetic change: unset "destroy" for myself.
- (pinfo::wait): Change some comments.
- (pinfo::prefork): Move a comment.
- (pinfo::postfork): Set pending_*_pipe variables to NULL if closed.
- (pinfo::postexec): Use right name when closing handle.
- (_pinfo::alert_parent): Ditto.
- * sigproc.h (hold_everything): Remove debugging label.
-
-2012-03-19 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * cygserver_ipc.h: Include sigproc.h for signal_arrived declaration.
-
-2012-03-19 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * cygprops.h: Use #pragma once.
- * mkglobals_h: Ditto for generated globals.h file.
- * globals.cc: Use specific NO_GLOBALS_H flag to control inclusion of
- globals.h.
- * winsup.h: Honor NO_GLOBALS_H to control inclusion of globals.h. Make
- clear_procimptoken extern inline so that it is only defined when
- needed.
-
-2012-03-19 Corinna Vinschen <corinna@vinschen.de>
-
- * thread.cc (cancelable_wait): Don't malloc tbi, just make it a struct
- on the stack to avoid memory leak.
-
-2012-03-19 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * pinfo.cc (pinfo::wait): Handle case where prefork was not called
- prior to calling wait(). This is the case when we are reabsorbing
- processes after being execed.
-
-2012-03-16 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * fork.cc (lock_signals): Move to sigproc.h.
- (lock_pthread): Ditto.
- (hold_everything): Ditto.
- (frok::parent): Call myself.prefork() just before calling
- CreateProcess. Call myself.postfork () on function exit.
- * pinfo.cc (pinfo::pending_rd_proc_pipe): Define.
- (pinfo::pending_wr_proc_pipe): Ditto.
- (_pinfo::dup_proc_pipe): Delete.
- (pinfo::wait): Move pipe creation into pinfo::prefork. Set pipe
- variables from pending_*.
- (_pinfo::sync_proc_pipe): Delete.
- (_pinfo::proc_pipe_owner): Ditto.
- (pinfo::prefork): Define new function.
- (pinfo::postfork): Ditto.
- (pinfo::postexec): Ditto.
- (_pinfo::alert_parent): Remove obsolete call to sync_proc_pipe.
- (_pinfo::dup_proc_pipe): Delete declaration.
- (_pinfo::sync_proc_pipe): Ditto.
- (pinfo::pending_rd_proc_pipe): Declare.
- (pinfo::pending_wr_proc_pipe): Ditto.
- (pinfo::prefork): Declare new function.
- (pinfo::postfork): Ditto.
- (pinfo::postexec): Ditto.
- (pinfo::wr_proc_pipe): Define new wrapper function.
- * sigproc.h: Include "sync.h". Move locking functions from fork to
- here.
- * spawn.cc (child_info_spawn::worker): Delete now-unneeded requirement
- to record orig_wr_proc_pipe. Call hold_everything prior to doing
- anything. Call myself.prefork() if spawning. Replace wr_proc_pipe
- synchronization with call to myself.postexec(). Call myself.postfork()
- if not execing.
- * sync.h: Replace #ifdef wrapper with "#pragma once".
-
-2012-03-13 Corinna Vinschen <corinna@vinschen.de>
-
- * hookapi.cc (hook_or_detect_cygwin): Change condition when to use
- importRVAMaxSize or importRVASize for the mapping size. Make sure
- to map never more than the section size. Change comments accordingly.
-
-2012-03-13 Corinna Vinschen <corinna@vinschen.de>
-
- * include/netdb.h (h_errno): Add self-referencing macro and comment.
-
-2012-03-12 Corinna Vinschen <corinna@vinschen.de>
- Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * fhandler.h (wait_return): Add overlapped_nullread.
- * fhandler.cc (fhandler_base_overlapped::wait_overlapped): Detect
- zero-byte read as a special case.
- (fhandler_base_overlapped::raw_read): Keep looping when zero-byte read
- detected without EOF.
- (fhandler_base_overlapped::raw_write): Quiet gcc warning by adding
- overlapped_nullread to switch statement even though it will never
- actually be hit.
-
-2012-03-10 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * dtable.cc (fh_alloc): Treat pc.dev as unsigned.
- * fhandler_console.cc (fhandler_console::set_unit): Use lock always to
- avoid races between competing cygwin processes running on the console.
-
-2012-03-09 Corinna Vinschen <corinna@vinschen.de>
-
- * hookapi.cc (find_first_notloaded_dll): Fix a compiler warning.
-
-2012-03-09 Corinna Vinschen <corinna@vinschen.de>
-
- * hookapi.cc (rvadelta): Add parameter to return maximum available
- size from start of import RVA table to end of section.
- (find_first_notloaded_dll): Take big executables into account. Use
- offset and size computation as in hook_or_detect_cygwin, just simpler.
- (hook_or_detect_cygwin): Return NULL rather than false througout.
- Change computation of required mapping size to take non-gcc compilers
- into account. Explain the differences and what we do against them.
- Don't alloca buf if fn is NULL. Never use buf if fn is NULL.
-
-2012-03-08 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (call_gaa): New thread function to call GetAdaptersAddresses.
- (get_adapters_addresses): Call call_gaa. If necessary, call it as
- child thread. Explain why that's necessary.
-
-2012-03-08 Václav Zeman <vhaisman@gmail.com>
-
- * path.cc (readlink): Avoid calling strlen() twice.
-
-2012-03-07 Corinna Vinschen <corinna@vinschen.de>
-
- * Throughout, replace usage of w32api's min with MIN from sys/param.h.
-
-2012-03-07 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * pinfo.cc (_pinfo::dup_proc_pipe): Reorganize to provide more
- information for failing condition.
- (pinfo::wait): Pass name of function to dup_proc_pipe. Eliminate error
- check for dup_proc_pipe since it never actually returned an error.
- * pinfo.h (_pinfo::dup_proc_pipe): Add an argument.
- * spawn.cc (child_info_spawn::worker): Pass name of function to
- dup_proc_pipe.
-
-2012-03-07 Corinna Vinschen <corinna@vinschen.de>
-
- * glob.cc (MAXPATHLEN): Reinstantiate with a value of 8192.
-
-2012-03-05 Denis Excoffier <cygwin@Denis-Excoffier.org>
-
- * pinfo.cc (_pinfo::dup_proc_pipe): Fix order of arguments in debug
- output.
-
-2012-03-05 Corinna Vinschen <corinna@vinschen.de>
-
- * init.cc (dll_entry): Move wincap.init call back from here...
- * dcrt0.cc (dll_crt0_0): ...to here.
-
-2012-03-05 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.h (enum fcwd_version_t): Move here from path.cc.
- (class fcwd_access_t): Ditto. Only declare methods.
- (class cwdstuff): Move fast_cwd_ptr and fast_cwd_version from shared
- DLL section here.
- * path.cc: Keep fcwd_access_t method definitions.
- (fcwd_access_t::fast_cwd_version): New method.
- (find_fast_cwd_pointer): Change comment. Mention test on W8CP.
- (cwdstuff::init): Initialize fast_cwd_ptr and fast_cwd_version.
-
-2012-03-05 Corinna Vinschen <corinna@vinschen.de>
-
- * dll_init.cc (dll_list::operator[]): Extend comment a bit more to
- explain previous patch.
-
-2012-03-04 Corinna Vinschen <corinna@vinschen.de>
-
- * dll_init.cc (dll_list::alloc): Compare linked DLLs by basename only.
- Explain why. Add code to check if a DLL with the same basename but
- different path is the same DLL. Bail out if not.
- (in_load_after_fork): New static NO_COPY bool to allow to differ
- between linked and loaded DLL at fork.
- (dll_list::load_after_fork): Set in_load_after_fork accordingly.
- (dll_dllcrt0_1): Don't treat DLL as linked if in_load_after_fork is set.
- Drop test for in_forkee.
-
-2012-03-04 Corinna Vinschen <corinna@vinschen.de>
-
- * dll_init.cc: Revert pathname changes from 2012-02-08.
- (dll_list::operator[]): Add long comment to explain the misery.
- (dll_list::alloc): Skip long pathname prefix potentially returned by
- GetModuleFileNameW.
- * dll_init.h (dll_list::find_by_modname): Add back declaration.
-
-2012-03-04 Corinna Vinschen <corinna@vinschen.de>
-
- * winver.rc: Bump copyright date.
-
-2012-03-03 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * fhandler_console.cc (fhandler_console::dup): Only set ctty when we
- haven't specifically called setsid.
- * fhandler_tty.cc (fhandler_pty_slave::dup): Ditto. Also add comment
- documenting research into rxvt problem.
- * fhandler_termios.cc (fhandler_termios::tcsetpgrp): Don't check
- specifically for myself->ctty == -1. Test for > 0 as that is the
- correct test.
- (fhandler_termios::sigflush): Ditto.
-
-2012-03-02 Corinna Vinschen <corinna@vinschen.de>
-
- * flock.cc (allow_others_to_sync): Reorder conditional expression to
- check for DACL presence first, since otherwise dacl pointer value is
- undefined. Add comment.
-
-2012-03-02 Corinna Vinschen <corinna@vinschen.de>
-
- * flock.cc (allow_others_to_sync): Use RtlGetDaclSecurityDescriptor
- rather than accessing the SECURITY_DESCRIPTOR structure directly.
- Take no DACL and NULL DACL into account.
-
-2012-03-02 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_console.cc (fhandler_console::input_tcsetattr): Revert
- previous patch.
- (fhandler_console::open_setup): Install Ctrl-C handler here, if this
- console is the controlling tty and the process hasn't been started by
- a Cygwin process.
-
-2012-03-02 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_console.cc (fhandler_console::input_tcsetattr): Set the
- state of the Ctrl-C handler depending on the setting of
- ENABLE_PROCESSED_INPUT.
-
-2012-02-28 Eric Blake <eblake@redhat.com>
-
- * include/sys/termios.h (tcgetsid): Fix return type.
- * termios.cc (tcgetsid): Likewise.
- * fhandler_termios.cc (fhandler_termios::tcgetsid): Likewise.
- * fhandler.h (fhandler_base): Likewise.
- * fhandler.cc (fhandler_base::tcgetsid): Likewise.
-
-2012-02-28 Corinna Vinschen <corinna@vinschen.de>
-
- * cygtls.cc (well_known_dlls): Add shlwapi.dll.
-
-2012-02-27 Corinna Vinschen <corinna@vinschen.de>
-
- * cygtls.cc (dll_cmp): New comparison function for bsearch.
- (well_known_dlls): New array containing well-known DLLs.
- (_cygtls::call2): Add code for BLODA detection.
- * net.cc (fdsock): Ditto.
-
-2012-02-26 Corinna Vinschen <corinna@vinschen.de>
-
- * environ.cc (enum settings): Add setbool. Rename justset to setdword
- to avoid future problems.
- (struct parse_thing): Change all justset to setbool for bool variables.
- (parse_options): Add a case for setbool setting for bool variables
- since justset (now setdword) always writes a DWORD value, thus
- overwriting adjacent memory locations.
- * external.cc (cygwin_internal): Drop extern declaration.
-
-2012-02-26 Corinna Vinschen <corinna@vinschen.de>
-
- * environ.cc (dos_file_warning): Drop declaration.
- (ignore_case_with_glob): Ditto.
- (allow_winsymlinks): Ditto.
- (reset_com): Move definition to globals.cc.
- (struct parse_thing): Add "detect_bloda" option.
- * fhandler_serial.cc (fhandler_serial::open): Drop (incorrect)
- declaration of reset_com.
- * globals.cc (ignore_case_with_glob): Move definition into C++-only
- block.
- (dos_file_warning): Define.
- (allow_winsymlinks): Define.
- (reset_com): Define.
- (detect_bloda): Define.
- * path.cc (dos_file_warning): Drop definition here.
- (allow_winsymlinks): Drop definition here.
-
-2012-02-26 Corinna Vinschen <corinna@vinschen.de>
-
- * flock.cc (LOCK_DIR_NAME_FMT): Define.
- (LOCK_DIR_NAME_LEN): Define.
- (LOCK_DIR_NAME_DEV_OFF): Define.
- (LOCK_DIR_NAME_INO_OFF): Define.
- (LOCK_OBJ_NAME_FMT): Define. Add comment.
- (class lockf_t): Use bitsize-explicit types. Declare from_obj_name,
- (class inode_t): Make use, unuse and inuse methods public. Add a
- lock argument to get method declaration.
- (inode_t::get): Add lock argument. Only lock node if lock arg is true.
- (inode_t::inode_t): Use LOCK_DIR_NAME_FMT as format string.
- (lockf_t::from_obj_name): New method to generate lockf_t content from
- lock event object basename.
- (inode_t::get_all_locks_list): Just call from_obj_name here and copy
- result into final lockf_t.
- (create_lock_obj_attr): Use LOCK_OBJ_NAME_FMT as format string.
- (create_lock_in_parent): New thread function to create lockf_t
- structure in parent process.
- (delete_lock_in_parent): New thread function to reap stale BSD locks in
- parent process.
- (lockf_t::create_lock_obj): Try to duplicate lock object handle into
- parent process and call create_lock_in_parent as parent remote thread.
- (lockf_t::del_lock_obj): Call delete_lock_in_parent as parent remote
- thread.
- (fhandler_disk_file::lock): Add lock arg to inode_t::get call.
-
-2012-02-25 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * include/cygwin/version.h (CYGWIN_VERSION_DLL_MINOR): Bump to 12.
-
-2012-02-21 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * cygwin.din (scandirat): Export.
- * posix.sgml (std-gnu): Add scandirat.
- * syscalls.cc (scandirat): New function.
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
- * include/sys/dirent.h (scandirat): Declare.
-
-2012-02-21 Corinna Vinschen <corinna@vinschen.de>
-
- Based on an idea from Nick Lowe <nick.lowe@gmail.com>:
- * shared.cc (shared_info::init_obcaseinsensitive): Check actual state
- of case sensitivity on post-Windows 2000 systems.
- * wincap.h (wincaps::kernel_is_always_casesensitive): New element.
- * wincap.cc: Implement above element throughout.
-
-2012-02-20 Corinna Vinschen <corinna@vinschen.de>
-
- * flock.cc (inode_t::del_my_locks): Drop useless counter lc. Close
- lock object handle explicitely in case of called during fork. Add
- comment to explain why.
- * fork.cc (frok::child): Drop declaration of fixup_lockf_after_fork.
-
-2012-02-17 Corinna Vinschen <corinna@vinschen.de>
-
- * timer.cc (getitimer): Don't create another local ret variable in
- timer_gettime calling branch. Simplify conditional since timer_gettime
- always returns 0 or -1 anyway.
-
-2012-02-17 Corinna Vinschen <corinna@vinschen.de>
-
- * ntdll.h (struct _PEB): Add EnvironmentUpdateCount member.
- * spawn.cc (child_info_spawn::worker): Speed up job recognition. Expand
- comment to explain every little detail and so we never forget.
- * wincap.h (wincaps::has_program_compatibility_assitant): New element.
- * wincap.cc: Implement above element throughout.
-
-2012-02-17 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (get_disk_type): Drop unneeded toupper call. Convert case
- constants to wide chars.
-
-2012-02-16 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (NetUseGetInfo): Define.
- * fhandler_disk_file.cc (fhandler_cygdrive::opendir): Rename flptst
- to drive. Call new get_disk_type function rather than is_floppy and
- check SMB drives with the NetUseGetInfo function. Explain why.
- * mount.cc (get_disk_type): New function to evaluate disk type from
- native NT device name.
- (is_floppy): Remove.
- * mount.h (enum disk_type): Define.
- (get_disk_type): Declare.
- * path.h (is_floppy): Drop declaration.
-
-2012-02-15 Corinna Vinschen <corinna@vinschen.de>
-
- * miscfuncs.cc: Revert change from 2012-02-13 which used the
- Windows-provided stack rather than an own stack created in
- CygwinCreateThread.
- (struct thread_wrapper_arg): Rename commitsize to stacklimit.
- (CygwinCreateThread): Rename commitsize to real_stacklimit.
-
-2012-02-15 Corinna Vinschen <corinna@vinschen.de>
-
- * dtable.cc (dtable::init_std_file_from_handle): Use tmp_pathbuf for
- name.
- (handle_to_fn): Ditto for device. Fix size in QueryDosDeviceW call.
-
-2012-02-15 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * smallprint.cc (tmpbuf): Declare new class holding a static buffer,
- protected by a lock.
- (__small_vsprintf): Use tmpbuf to hold large buffer.
- (__small_vswprintf): Ditto.
-
-2012-02-15 Corinna Vinschen <corinna@vinschen.de>
-
- * flock.cc (lf_setlock): Add timeout variable and set before calling
- WFMO. Drop debug output if process is not available. Set timeout to
- 0 instead. Document timeout 0 in WFMO comment.
- (lf_getblock): Drop invalid F_POSIX lock type shortcut. Only return
- overlap if event is not signalled. Fix comment.
-
-2012-02-14 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * pinfo.cc (_pinfo::set_ctty): Revert 2012-02-07 change to skip
- function if tty in question == our ctty.
-
- * syscalls.cc (setsid): Avoid two function calls.
-
- * dtable.cc (dtable::dup_worker): Remove debugging.
-
- * init.cc (search_for): Calculate for every new process rather than
- using shared value.
- (threadfunc_ix): Fill in for every new process rather than sing shared
- value.
-
-2012-02-14 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_cygdrive::fstat): Don't bother to
- set st_nlink correctly, just set it to 1 to avoid potential network
- timeouts.
-
-2012-02-14 Corinna Vinschen <corinna@vinschen.de>
-
- * flock.cc (lf_setlock): Don't close waited lock object handle before
- we own the node lock. Fix comment.
-
-2012-02-14 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.cc (init_cygheap::init_installation_root): Convert function
- init_installation_root into a cygheap method.
- * cygheap.h (struct init_cygheap): Move installation_root,
- installation_key, and installation_key_buf from shared
- .cygwin_dll_common DLL section to cygheap. Declare new method
- init_installation_root.
- * dtable.cc (handle_to_fn): Accommodate the move of installation strings
- to the cygheap.
- * external.cc (cygwin_internal): Ditto.
- * fhandler_console.cc (fhandler_console::open_shared_console): Ditto.
- * fhandler_mailslot.cc (fhandler_mailslot::get_object_attr): Ditto.
- * fhandler_tty.cc: Ditto, throughout.
- * mount.cc (mount_info::init): Ditto.
- * pipe.cc (fhandler_pipe::create): Ditto.
- * shared.cc: Ditto, throughout.
- (installation_root): Remove.
- (installation_key): Move to cygheap.
- (installation_key_buf): Ditto.
- (installation_root_inited): Remove.
- (SPIN_WAIT): Remove.
- (init_installation_root): Move to cygheap.
- (memory_init): Call cygheap->init_installation_root right after
- cygheap->user.init. Drop call of init_installation_root function.
- * shared_info.h (init_installation_root): Drop declaration.
- (installation_root): Ditto.
- (installation_key): Ditto.
- * uinfo.cc (pwdgrp::load): Accommodate the move of installation strings
- to the cygheap.
-
-2012-02-14 Corinna Vinschen <corinna@vinschen.de>
-
- * thread.cc: Drop including unused headers.
-
-2012-02-13 Corinna Vinschen <corinna@vinschen.de>
-
- * miscfuncs.cc (struct thread_wrapper_arg): Convert char * to PBYTE.
- Change related casts throughout.
- (thread_wrapper): Only do the thread change if the application provided
- the stack. Otherwise, just use the Windows-provided stack. Set up
- POSIX guardpage here, if necessary. Move related comment from
- CygwinCreateThread here.
- (CygwinCreateThread): Never allocate and set up own stack here. Just
- compute stack size to reserve and use value in CreateThread call if
- stack hasn't been provided by the application.
-
-2012-02-13 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (clean): Remove non-existent regexp dir.
-
- * collate.h: New header.
- (__collate_range_cmp): Declare.
- (__collate_load_error): Define.
- * glob.cc: Pull in latest version from FreeBSD. Simplify and reduce
- Cygwin-specific changes.
- * regex/regcomp.c: Include collate.h on Cygwin as well.
- (__collate_range_cmp): Move from here...
- * nlsfuncs.cc (__collate_range_cmp): ...to here.
-
- * miscfuncs.cc (thread_wrapper): Fix typo in comment.
- (CygwinCreateThread): Take dead zone of Windows stack into account.
- Change the way how the stack is commited and how to handle guardpages.
- Explain how and why.
- * thread.h (PTHREAD_DEFAULT_STACKSIZE): Change definition. Explain why.
-
-2012-02-12 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * include/pthread.h: Include time.h as required by POSIX.
-
-2012-02-12 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * exception.h (stackdump): Declare.
- * exceptions.cc (stackdump): Rework to perform all operations needed
- for a stackdump and to avoid recursion.
- (exception::handle): Use simplified stackdump interface.
- * sigproc.cc (signal::exit): Ditto. Delete now, uneeded declaration.
-
-2012-02-11 Corinna Vinschen <corinna@vinschen.de>
-
- * miscfuncs.cc (DEFAULT_STACKSIZE): Remove.
- (CygwinCreateThread): Simplify code by assuming that now stack-related
- input values are undefined. Set stack protection to PAGE_READWRITE,
- as is default on Windows. Add lengthy comment to explain POSIX
- guardpage.
- * thread.cc (pthread_attr::pthread_attr): Initialize stacksize as
- PTHREAD_DEFAULT_STACKSIZE. Initialize guardsize as
- PTHREAD_DEFAULT_GUARDSIZE.
- * thread.h (PTHREAD_DEFAULT_STACKSIZE): Define. Add comment to explain.
- (PTHREAD_DEFAULT_GUARDSIZE): Define.
-
-2012-02-10 Corinna Vinschen <corinna@vinschen.de>
-
- * miscfuncs.cc (DEFAULT_STACKSIZE): Set to 1 Megs. Drop comment about
- RLIMIT_STACK.
-
- * registry.cc (get_registry_hive_path): Expect the user hive path to
- be never longer than MAX_PATH. Don't prepend native NT path prefix
- here. Add comment.
- (load_registry_hive): Prepend native NT path prefix here. Additionally
- try to load user's classes hive.
- * uinfo.cc (cygheap_user::env_userprofile): Reduce size of
- userprofile_env_buf to MAX_PATH. Add comment.
-
-2012-02-10 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * syscalls.cc (setsid): On second thought, in the spirit of keeping
- things kludgy, set ctty to -2 here as a special flag, and...
- (open): ...only eschew setting O_NOCTTY when that case is detected.
-
-2012-02-10 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * syscalls.cc (open): Semi-revert (?) to allowing open of a tty to
- become controlling tty if there is no controlling tty.
-
-2012-02-09 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * exceptions.cc (setup_handler): Reduce system_printf to sigproc_printf
- since it is for a transient situation which will undoubtedly be
- handled.
-
-2012-02-09 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_dsp.cc (fhandler_dev_dsp::Audio_out::write): Set
- bytes_to_write to 0 in case it fits into the buffer, otherwise suffer
- early EOF in caller.
-
-2012-02-09 Corinna Vinschen <corinna@vinschen.de>
-
- * dll_init.h (struct dll): Re-add modname.
- * dll_init.cc: Throughout, use modname where it was used before.
- (dll_list::operator[]): Use modname. Move comment from dll_list::alloc
- here and remove hint about GetModuleBaseNameW.
- (dll_list::alloc): Store full path in name, pointer to basename in
- modname. Search dll using modname.
-
-2012-02-08 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * dtable.cc (dtable::init_std_file_from_handle): Reinstate opening tty
- handles with O_RDWR permissions.
-
-2012-02-08 Corinna Vinschen <corinna@vinschen.de>
-
- * thread.cc (__pthread_cond_wait_init): New static function replacing
- __pthread_cond_dowait. Only check and potentially initialize cond and
- mutex, drop call to (*cond)->wait.
- (pthread_cond_timedwait): Replace call to __pthread_cond_dowait with
- separate calls to __pthread_cond_wait_init and (*cond)->wait to be
- able to initialize cond before accessing its clock_id member.
- (pthread_cond_wait): Ditto (more or less).
-
-2012-02-08 Christian Franke <franke@computer.org>
-
- * include/sys/wait.h: Remove C++ inline functions for `union wait'.
- For C++ use `void *' as __wait_status_ptr_t instead. This is less type
- safe but fixes compile error on `wait(NULL)'. Remove extra `;'.
-
-2012-02-08 Corinna Vinschen <corinna@vinschen.de>
-
- * sigproc.cc (child_info_fork::abort): Call TerminateProcess rather
- than ExitProcess.
-
-2012-02-08 Corinna Vinschen <corinna@vinschen.de>
-
- * uinfo.cc (cygheap_user::env_userprofile): Simplify since network
- drives are not supported here.
-
-2012-02-08 Corinna Vinschen <corinna@vinschen.de>
-
- * uinfo.cc (cygheap_user::env_userprofile): Convert native
- userprofile path returned from get_registry_hive_path to Win32 path.
-
-2012-02-08 Corinna Vinschen <corinna@vinschen.de>
-
- * dll_init.cc: Throughout, drop usage of modname in favor of name.
- (dll_list::find_by_modname): Remove.
- (dll_list::alloc): Only store module basename in name. Add comment to
- explain why. Simplify address check. Fix formatting in comment.
- * dll_init.h (struct dll): Drop modname and find_by_modname.
-
-2012-02-08 Corinna Vinschen <corinna@vinschen.de>
-
- * dll_init.cc (dll_list::alloc): Add DLL name to fabort output. Fix
- fabort string in case of bss start.
-
-2012-02-08 Corinna Vinschen <corinna@vinschen.de>
-
- * include/sys/sysmacros.h: Include sys/types.h.
-
-2012-02-07 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (mount_info::create_root_entry): Fix format specifier in
- api_fatal message.
-
-2012-02-07 Corinna Vinschen <corinna@vinschen.de>
-
- * include/process.h: Move here from include/cygwin subdir.
- * exec.cc: Change include of process.h to reflect the fact that it's
- now back in include.
- * spawn.cc: Ditto.
- * syscalls.cc: Ditto.
-
-2012-02-07 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * cygheap.cc (init_cygheap::manage_console_count): Delete.
- * cygheap.h (init_cygheap::manage_console_count): Ditto.
- (init_cygheap::console_count): Ditto.
- * fhandler.h (fhandler_console::has_a): Ditto.
- (fhandler_console::free_console): Declare new function.
- * fhandler_console.cc (fhandler_console::free_console): Define new
- function.
- (fhandler_console::open_setup): Delete call to manage_console_count.
- (fhandler_console::close): Ditto. Replace with call to free_console().
- * fhandler_tty.cc (fhandler_pty_slave::open): Delete call to
- manage_console_count.
- (fhandler_pty_slave::cleanup): Ditto.
- (fhandler_pty_slave::close): Call fhandler_console::free_console() if
- this is our controlling tty.
- * pinfo.cc (_pinfo::set_ctty): Skip function if tty in question == our
- ctty. Delete call to manage_console_count.
-
- * syscalls.cc (close_all_files): Avoid locking and avoid setting errno
- when iterating over fds.
-
-2012-02-07 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * include/cygwin/version.h: Bump CYGWIN_VERSION_DLL_MINOR to 11.
-
-2012-02-03 Václav Zeman <vhaisman@gmail.com>
-
- * grp.cc (pwdgrp::parse_group): Convert grp from macro to reference.
- * passwd.cc (pwdgrp::parse_passwd): Ditto for res.
-
-2012-02-02 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * syscalls.cc (close_all_files): Use cygheap_fdget to manipulate
- fhandler. Use debug_only_printf.
-
-2012-02-02 Corinna Vinschen <corinna@vinschen.de>
-
- Fix memory and handle leaks due to fdopendir:
- * dir.cc (closedir): Call global close instead of just releasing the
- fhandler.
- * fhandler_disk_file.cc (fhandler_disk_file::closedir): Don't close
- fhandler handle here, rely on global closedir doing the right thing.
- * fhandler_registry.cc (fhandler_registry::readdir): Also delete
- d_hash when closing registry key.
- (fhandler_registry::rewinddir): Ditto.
-
- Avoid infinite recursion in VirtualStore under UAC:
- * fhandler_registry.cc (VIRT_CLASSES_KEY_PREFIX): Define.
- (VIRT_CLASSES_KEY_SUFFIX): Ditto.
- (VIRT_CLASSES_KEY): Ditto.
- (VIRT_CLASSES_LINKTGT): Ditto.
- (fhandler_registry::exists): Return virt_symlink as file type if
- this is a Classes key under the VirtualStore.
- (fhandler_registry::fstat): Handle virt_symlink.
- (fhandler_registry::readdir): Return DT_LNK as d_type if this is a
- Classes key under the VirtualStore.
- (fhandler_registry::fill_filebuf): Handle Classes symlink.
-
- Handle user impersonation in /proc/registry access:
- * autoload.cc (RegOpenUserClassesRoot): Define.
- (RegOpenCurrentUser): Define.
- * fhandler_registry.cc (RegOpenUserClassesRoot): Declare function
- missing in w32api.
- (RegOpenCurrentUser): Ditto.
- (fetch_hkey): New function.
- (fhandler_registry::open): Call fetch_hkey to get root registry key.
- (open_key): Ditto.
-
-2012-02-01 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * fcntl.cc (fcntl64): Add introductory debug statement. Call dup3
- directly via dtable method to avoid over-incrementing refcnt.
-
-2012-02-01 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * dtable.cc (dtable::dup_worker): Add comment explaining why refcnt
- isn't incremented here.
- (dtable::dup3): Simplify slightly. Add comment.
- * syscalls.cc (dup3): Increment refcnt here, similarly to dup2.
-
-2012-02-01 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * fhandler.cc (fhandler_base_overlapped::has_ongoing_io): Don't block
- GetOverlappedResult since previous IsEventSignalled will have reset the
- handle.
- * select.cc (cygwin_select): Remove space before parentheses in syscall
- debugging output.
- (pipe_data_available): Streamline if block.
-
-2012-01-31 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * syscalls.cc (dup3): Fix debug typo.
-
- * fhandler.cc (flush_async_io): Assume only called for writer. Call
- GetOverlappedResult directly rather than kludging call to
- has_ongoing_io.
- (fhandler_base_overlapped::close): Only start flush thread when closing
- write handle. Only cancel I/O when reading.
-
-2012-01-28 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din: Fix order (DATA first).
-
-2012-01-27 Corinna Vinschen <corinna@vinschen.de>
-
- * dcrt0.cc (is_dos_path): New macro to recognize drive letter and UNC
- DOS paths.
- (globify): Call is_dos_path instead of isdrive.
-
-2012-01-26 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * sigproc.cc (child_info::retry_count): Default to 1.
-
-2012-01-23 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (gethostid): Simplify. Just fetch MachineGuid and
- create hash from there.
-
-2012-01-22 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * fhandler.h (fhandler_fifo::arm): Declare new function.
- * fhandler_fifo.cc (fhandler_fifo::arm): Define new function.
- (fhandler_fifo::open): Fix handling of RDWR pipes to avoid opening a
- second handle. Use arm() function to set events.
- (fhandler_fifo::raw_read): Correctly go into "connect again logic" when
- we detect another writer is available. Use arm() function to set event.
- * pipe.cc (fhandler_pipe::create): Add more detail to debugging output.
-
-2012-01-22 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * cygheap.h (cygheap_fdmanip::release): Simplify.
- * dtable.cc (dtable::release): Make void again. Skip not_open check
- since it is guaranteed to be open. Don't bother deleting here since
- actual deletion will be handled in cygheap_fdget::~cygheap_fdget.
- * dtable.h (dtable::release): Make void again.
- * syscalls.cc (dup2): Bump fhandler use count on successful dup.
-
-2012-01-22 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * cygheap.h (cygheap_fdget::~cygheap_fdget): Simplify now that refcnt
- reports reference count changes itself.
- * fhandler.cc (fhandler_base::reset): Set _refcnt to 0.
- * fhandler.h (fhandler_base::refcnt): Report refcnt when debugging.
-
- * select.cc (cygwin_select): Set return_on_signal to indicate when
- select should be interrupted.
- (select_stuff::wait): Keep looping unless return_on_signal is set.
- * select.h (select_stuff::return_on_signal): New variable.
- (select_stuff::select_stuff): Zero return_on_signal.
-
-2012-01-20 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (fhandler_registry::opendir): Declare.
- * fhandler_registry.cc (fhandler_registry::opendir): New function.
-
-2012-01-13 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * include/cygwin/config.h (_GLIBC_EXTENSION): Define.
-
-2012-01-11 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * spawn.cc (child_info_spawn::worker): Delete debugging.
-
-2012-01-11 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- Update copyright on all files checked in so far this year.
- * fhandler.h: Use #pragma once rather than ifdef guards.
- (fhandler_console::tc_getpgid): Return our pgid if we have never opened
- a console.
- * fork.cc: Rearrange includes to accommodate fhandler.h use of pinfo.h.
- * sigproc.cc: Ditto.
- * spawn.cc: Ditto.
- (child_info_spawn::worker): Query myself->pgid rather than calling
- expensive function.
- * thread.h: Use #pragma once rather than ifdef guards.
- * pinfo.h: Use #pragma once rather than ifdef guards.
- (pinfo::remember): Don't define if sigproc.h has not been included.
- (pinfo::reattach): Ditto.
- * sigproc.h: Use #pragma once rather than ifdef guards. Use different
- test to see if pinfo.h has been included.
-
-2012-01-09 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/process.h: Move here from newlib.
- * exec.cc: Change include of process.h to reflect the fact that it's
- now in the include/cygwin subfolder.
- * spawn.cc: Ditto.
- * syscalls.cc: Ditto.
-
-2012-01-09 Corinna Vinschen <corinna@vinschen.de>
-
- * miscfuncs.cc (thread_wrapper): Make sure stack is 16 byte aligned
- to make gcc-3 compiled pthread applications happy.
-
-2012-01-08 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * dtable.cc (dtable::stdio_init): Always initialize console when we
- have one.
- * fhandler_termios.cc (fhandler_termios::tcsetpgrp): Use a better
- method to print tty name for debugging.
- (fhandler_termios::bg_check): Ditto.
- * pinfo.cc (_pinfo::set_ctty): Remove leftover debugging stuff.
- Simplify behavior when setting tty's sid and pgid to avoid overwriting
- previously set values.
-
- * spawn.cc (ch_spawn): Cosmetic change.
-
-2012-01-06 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * cygwin.din (pthread_sigqueue): Export.
- * posix.sgml (std-gnu): Add pthread_sigqueue.
- * thread.cc (pthread_sigqueue): New function.
- * thread.h (pthread_sigqueue): New function.
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
-
-2012-01-02 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * path.cc (get_current_dir_name): Avoid memory leak. Don't return PWD
- contents if directory doesn't actually exist.
-
-2012-01-01 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * cygwin.din (get_current_dir_name): Export.
- * path.cc (get_current_dir_name): New function.
- * posix.sgml (std-gnu): Add get_current_dir_name.
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
diff --git a/winsup/cygwin/ChangeLog-2013 b/winsup/cygwin/ChangeLog-2013
deleted file mode 100644
index 574984e3c..000000000
--- a/winsup/cygwin/ChangeLog-2013
+++ /dev/null
@@ -1,2078 +0,0 @@
-2013-12-31 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * fhandler_console.cc (region_split): New function.
- (delta): Ditto.
- (ReadConsoleOutputWrapper): Ditto.
- (fhandler_console::char_command): Use ReadConsoleOutputWrapper to avoid
- OOM condition from ReadConsoleOutputW. Add more debugging.
-
-2013-12-22 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * strace.cc (strace::vsprntf): Fix potential (if unlikely) use of
- uninitialized variable.
-
-2013-12-18 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * dcrt0.cc (dll_crt0_1): Remove NtSetTimerResolution.
- * pinfo.cc (pinfo::init): Increase wait interval when waiting for
- procinfo to stabilize.
-
-2013-12-17 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * autoload.cc (timeBeginPeriod): Delete.
- * dcrt0.cc (dll_crt0_1): Use NtSetTimerResolution rather than
- timeBeginPeriod.
-
-2013-12-17 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * autoload.cc (timeBeginPeriod): Autoload.
- * dcrt0.cc (dll_crt0_1): Use timeBeginPeriod to set default resolution
- to 1 ms.
- * pinfo.cc (pinfo::thisproc): Set ppid for redirected _pinfo blocks too.
- (pinfo::init): Avoid using VirtualQuery. Just rely on the assumption that
- procinfo will be populated.
- * pinfo.h (_pinfo::ppid): Move into redirected block.
-
-2013-12-17 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * external.cc (fillout_pinfo): Remove nonsensical loop.
- * fork.cc (frok::parent): When initializing pinfo for child new PID_NEW
- flag + actual defined constant rather than raw number. Don't set
- start_time here.
- * pinfo.cc (pinfo::thisproc): Use PID_NEW when initializing pinfo.
- Avoid checking h for NULL multiple times. Don't set start_time here.
- (pinfo_init): Aways set ppid last. Tweak strace output.
- (pinfo::init): Handle new PID_NEW flag. Wait for shared memory to
- contain useful information. Set start_time if PID_NEW.
- (_onreturn:h): Define as HANDLE rather than HANDLE *.
- (_onreturn::~onreturn): Accommodate h definition change.
- (_onreturn::no_close_handle): Rename from no_close_p_handle. Take a
- pinfo arg and set hProcess to h before zeroing.
- (winpids::add): Don't open a handle to our own process. Change logic
- associated with when a handle gets closed. Accommodate no_close_handle
- changes.
- (winpids::enum_processes): Simplify process enumeration loop.
- (winpids::set): Eliminate ill-considered malloc locking.
- * sigproc.cc (proc_subproc): Always set ppid last.
-
-2013-12-17 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * sigproc.cc (sig_send): Set PIPE_NOWAIT for pipes which are not us.
-
-2013-12-17 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * fhandler.h (fhandler_pty_master::~fhandler_pty_master): Delete.
- * fhandler_tty.cc (fhandler_pty_master::~fhandler_pty_master): Ditto.
-
-2013-12-11 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (NT_TRANSACTIONAL_ERROR): Define.
- (stop_transaction): Take "trans" HANDLE by reference and set it to
- NULL after closing it.
- (unlink_nt): If NtOpenFile fails due to a transactional error, stop
- transaction and retry NtOpenFile. Simplify check for having to call
- stop_transaction.
- (rename): If NtOpenFile fails due to a transactional error, stop
- transaction and retry NtOpenFile in both affected cases. Simplify check
- for having to call stop_transaction and add comment from unlink_nt.
-
-2013-12-11 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (fs_info::update): Fix formatting.
-
-2013-12-10 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (fhandler_dev_clipboard): Add private member
- cygnativeformat. Declare private method set_clipboard.
- * fhandler_clipboard.cc (cygnativeformat): Convert static variable to
- fhandler_dev_clipboard member.
- (fhandler_dev_clipboard::set_clipboard): Convert from static function
- to fhandler_dev_clipboard method.
-
-2013-12-09 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * globals.cc (hntdll): Define/declare.
- * exceptions.cc (inside_kernel): Don't call GetModuleFileName if we
- know we're in ntdll.
- * sigproc.cc (wait_sig): Initialize hntdll.
-
-2013-12-09 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/stdlib.h (initstate, random, setstate, srandom):
- Harden _XOPEN_SOURCE guard against applications defining _XOPEN_SOURCE
- with empty value.
-
-2013-12-08 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/version.h (CYGWIN_VERSION_DLL_MINOR): Bump to 28.
-
-2013-12-07 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (symlink_native): Workaround Windows 8.1 bug: Drop long path
- prefix from symlink target path. Add comment to explain why.
-
-2013-12-06 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * syscalls.cc (dup): Use cygheap_fdnew properly.
-
-2013-12-05 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * cygheap.h (cygheap_fdnew): Avoid setting errno directly since it will
- have been set by a previous function.
- * dtable.h (dtable::extend): Accept second size_t argument.
- * dtable.cc (dtable::extend): Accept second "min" argument which allows
- checking for OPEN_MAX_MAX boundary conditions.
- (dtable_init): Accommodate second argument to dtable::extend.
- (dtable::find_unused_handle): Ditto.
- * syscalls.cc (setdtablesize): Ditto.
- (dup): Return any error passed by cygheap_fdnew() directly.
- (getdtablesize): Just return dtable size directly.
-
-2013-12-04 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * dtable.cc (dtable::find_unused_handle): When extending, always make
- sure that there is a NOFILE_INCR chunk following the free fd.
-
-2013-12-03 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * select.cc (select): Add workaround for, as yet undebugged,
- pathological case.
-
-2013-12-01 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * dtable.cc (dtable::find_unused_handle): Break out of the right loop.
-
-2013-12-01 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * dtable.cc (dtable::find_unused_handle): Fix off-by-one error. Always
- exit through the bottom.
- (cygwin_attach_handle_to_fd): Make sure that fd tab is locked for the
- duration of this function.
- * dtable.h (dtable::lock): Make public.
- (dtable::unlock): Ditto.
- (dtable): Remove friends.
-
-2013-12-01 Corinna Vinschen <corinna@vinschen.de>
-
- * dtable.cc (dtable::extend): Change local variable new_size to size_t
- as well.
-
- * thread.cc: Fix comment.
-
-2013-11-30 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * dtable.h (dtable::first_fd_for_open): Change declaration to size_t.
- (dtable::extend): Change parameter to size_t.
- (dtable::find_unused_handle): Ditto.
- * dtable.cc: Remove now-unused header.
- (dtable::extend): Remove pointless test. Change parameter to size_t.
- (dtable::find_unused_handle): Rework to avoid MAX calculation in
- extend() call. Change parameter to size_t.
-
-2013-11-30 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * dtable.cc (build_fh_pc): When creating an archetype, use native name
- rather than unix name if name doesn't exist.
-
-2013-11-29 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * include/cygwin/version.h (CYGWIN_VERSION_DLL_MINOR): Bump to 27.
-
-2013-11-29 Jon TURNEY <jon.turney@dronecode.org.uk>
-
- * include/cygwin/stdlib.h (initstate, random, setstate, srandom):
- Prototype if not __STRICT_ANSI__ or _XOPEN_SOURCE is defined
- appropriately.
-
-2013-11-28 Alexey Pavlov <alexpux@gmail.com>
-
- * include/glob.h: Fix invalid use of 'restrict' error.
-
-2013-11-27 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (try_to_bin): Enhance debug output in case reopen fails.
-
-2013-11-27 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (try_to_bin): Drop fh_dup, reuse tmp_fh instead.
-
-2013-11-27 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (try_to_bin): Take additional parameter to get file open
- flags. If the file to move to the bin has been opened casesensitive,
- reopen it caseinsensitive. Explain why. Revert the default name of
- the Vista-and-later recycler to mixed case for readability.
- (unlink_nt): Call try_to_bin with file open flags as evaluated.
-
-2013-11-26 Corinna Vinschen <corinna@vinschen.de>
-
- * nlsfuncs.cc (wcscoll): Add "__restrict" to definition.
- (wcsxfrm): Ditto.
-
-2013-11-26 Corinna Vinschen <corinna@vinschen.de>
-
- * common.din: Export posix_spawn[...] functions.
- * exec.cc (execve): Add EXPORT_ALIAS _execve.
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
- * posix.sgml (std-susv4): Add posix_spawn[...] here.
- (std-notimpl): Drop here.
-
-2013-11-26 Corinna Vinschen <corinna@vinschen.de>
-
- * nlsfuncs.cc (strcoll): Add "__restrict" to definition.
- (strxfrm): Ditto.
-
-2013-11-25 Corinna Vinschen <corinna@vinschen.de>
-
- Throughout, keep function definitions and declarations in sync with
- newlib in terms of C99 "restrict" keyword.
-
-2013-11-24 Corinna Vinschen <corinna@vinschen.de>
-
- * dtable.cc: Include sys/param.h for MAX definition.
-
-2013-11-24 Corinna Vinschen <corinna@vinschen.de>
-
- Throughout, drop unnecessary explicit includes of windows header files
- included by default.
- * winlean.h: Add long comment to explain why we have to define certain
- symbols.
- (_NORMALIZE_): Define.
- (_WINNLS_): Drop definition and subsequent undef.
- (_WINNETWK_): Ditto.
- (_WINSVC_): Ditto.
-
-2013-11-23 Eric Blake <eblake@redhat.com>
-
- dup2: fix off-by-one crash
- * dtable.cc (dup3): Fix off-by-one.
- (find_unused_handle): Reduce time spent expanding during dup.
- * syscalls.cc (setdtablesize): Report error on invalid value.
-
-2013-11-20 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/stdlib.h (realpath): Drop declaration. It's declared
- in newlib's stdlib.h now.
-
-2013-11-19 Corinna Vinschen <corinna@vinschen.de>
-
- * ntdll.h (RtlGetVersion): Declare.
- * wincap.cc (wincapc::init): Rather than GetVersionEx, call
- RtlGetVersion which is not crippled by missing Windows 8.1 manifest.
- * wincap.h (wincapc): Change type of version to RTL_OSVERSIONINFOEXW.
- Align formatting of all class members.
-
-2013-11-19 Corinna Vinschen <corinna@vinschen.de>
-
- * wincap.cc (wincapc::init): Revert previous change. It's not working.
-
-2013-11-19 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (cygwin_getaddrinfo): Fix a comment. Only memset whints if
- hints is NULL. Add a comment and set whints.ai_family explicitely to
- AF_UNSPEC to follow glibc man page closely. Check flags against whints
- for locality.
-
-2013-11-19 Corinna Vinschen <corinna@vinschen.de>
-
- * wincap.cc (wincapc::init): Fix dwMinorVersion for Windows 8.1 and
- Server 2012. Explain why this is necessary.
-
-2013-11-19 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (IdnToAscii): Define.
- (IdnToUnicode): Define.
- (FreeAddrInfoW): Define.
- (GetAddrInfoW): Define.
- (GetNameInfoW): Define.
- * net.cc: Drop W. Richard STEVENS libgai implementation.
- (cygwin_freeaddrinfo): Move code from ipv4_freeaddrinfo here. Move
- definition up in file to avoid forward declaration in ga_duplist.
- (ga_dup): Take addrinfoW as input. Add parameters to get IDN flags
- and to set error value. Handle IDN flags and especially AI_CANONIDN.
- Convert input wchar_t ai_canonname string to multibyte for output.
- (ga_duplist): Add parameters to get IDN flags and to set error value
- and propagate to ga_dup. Call cygwin_freeaddrinfo.
- (gai_errmap): Add comments. Align error strings to GLibc. Add
- EAI_IDN_ENCODE entry.
- (get_ipv6_funcs): Remove.
- (load_ipv6_guard): Remove.
- (ipv6_inited): Remove.
- (load_ipv6): Remove.
- (load_ipv6_funcs): Remove.
- (cygwin_getaddrinfo): Drop calling load_ipv6. Handle AI_IDN* flags.
- Convert input strings to wchar_t and call GetAddrInfoW/FreeAddrInfoW.
- In case hints is NULL, set default ai_flags explicitely to
- AI_V4MAPPED | AI_ADDRCONFIG, as documented for Glibc. Only add AI_ALL
- if AI_ADDRCONFIG is not given. Unconditionally add Windows-specific
- AI_DISABLE_IDN_ENCODING to ai_flags to make IDN behaviour compatible
- to Glibc even on Windows 8 and later.
- (cygwin_getnameinfo): Drop calling load_ipv6. Handle NI_IDN* flags.
- Call GetNameInfoW and convert returned strings from wchar_t to
- multibyte.
- * include/netdb.h: Add comments to describe flags and error values.
- (AI_*): Define all flags using hex values for clearness.
- (AI_IDN): Define.
- (AI_CANONIDN): Define.
- (AI_IDN_ALLOW_UNASSIGNED): Define.
- (AI_IDN_USE_STD3_ASCII_RULES): Define.
- (NI_*): Define all flags using hex values for clearness.
- (NI_IDN): Define.
- (NI_IDN_ALLOW_UNASSIGNED): Define.
- (NI_IDN_USE_STD3_ASCII_RULES): Define.
- (EAI_IDN_ENCODE): Define.
-
-2013-11-06 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * configure.ac: Detect windows headers/libs after we've figured out the
- C compiler.
- * configure: Regenerate.
- * aclocal.m4: Regenerate.
-
-2013-10-30 Corinna Vinschen <corinna@vinschen.de>
-
- * devices.in (dev_cygdrive_storage): Revert mapping to \Device\Null.
- (dev_storage): Ditto for /dev.
- * devices.cc: Regenerate.
- * fhandler.cc (fhandler_base::open_null): New method to open a fake
- \Device\Null handler.
- (fhandler_base::open): Fix formatting. Change O_ACCMODE test to a
- switch statement. Simplify a test which still tested for a now unused
- create_disposition.
- * fhandler.h (fhandler_base::open_null): Declare.
- (fhandler_netdrive::close): Declare.
- * fhandler_dev.cc (fhandler_dev::open): Open fake \Device\Null handle
- by just calling new open_null method.
- * fhandler_disk_file.cc (fhandler_cygdrive::open): Ditto.
- * fhandler_netdrive.cc (fhandler_netdrive::open): Call open_null
- rather than setting nohandle.
- (fhandler_netdrive::close): New method.
- * fhandler_registry.cc (fetch_hkey): Fix token in RegOpenUserClassesRoot
- call. Create valid key for HKEY_CURRENT_CONFIG by mapping to real key
- HKEY_LOCAL_MACHINE\System\CurrentControlSet\Hardware Profiles\Current.
- (fhandler_registry::open): Set nohandle only when using pseudo registry
- handle.
- * fhandler_virtual.cc (fhandler_virtual::opendir): Call open rather
- than just setting nohandle here.
- * fhandler_virtual::fstatvfs): Set ST_RDONLY fs flag.
- * globals.cc (ro_u_null): New readonly UNICODE_STRING for \Device\Null.
- * path.h (path_conv::set_path): Revert previous change caring for
- wide_path.
-
-2013-10-30 Corinna Vinschen <corinna@vinschen.de>
-
- * devices.in (dev_cygdrive_storage): Map to \Device\Null.
- (dev_storage): Map /dev and /dev/windows to \Device\Null.
- * devices.cc: Regenerate.
- * dir.cc (opendir): Create unique id. Explain why.
- * fhandler.h (fhandler_dev::get_dev): Implement inline.
- (fhandler_cygdrive::close): Drop declaration.
- (fhandler_cygdrive::get_dev): Implement inline.
- (fhandler_windows::get_hwnd): Ditto.
- (fhandler_windows::set_close_on_exec): Drop declaration.
- (fhandler_windows::fixup_after_fork): Ditto.
- * fhandler_dev.cc (fhandler_dev::open): Call fhandler_disk_file::open
- without O_CREAT flag. Explain why. Create \Device\Null handle if
- /dev/ doesn't actually exist.
- (fhandler_dev::close): Drop nohandle case.
- (fhandler_dev::fstatvfs): Drop nohandle check. Test for fs_got_fs
- instead. Set ST_RDONLY fs flag for simulated /dev.
- (fhandler_dev::opendir): If /dev doesn't exist, call open() to create
- fake \Device\Null handle. Don't set nohandle. Set dir_exists
- correctly.
- (fhandler_dev::rewinddir): Call fhandler_disk_file::rewinddir only if
- /dev is a real directory.
- * fhandler_disk_file.cc (fhandler_disk_file::opendir): If called for
- the cygdrive dir, call open() to create fake \Device\Null handle.
- Only attach __DIR_mounts buffer to dir if not called for cygdrive dir.
- Don't set nohandle.
- (fhandler_cygdrive::open): Create \Device\Null handle.
- (fhandler_cygdrive::close): Remove.
- (fhandler_cygdrive::fstatvfs): Set ST_RDONLY fs flag.
- * fhandler_windows.cc (fhandler_windows::open): Create \Device\Null
- handle.
- (fhandler_windows::read): Don't add io_handle to WFMO handle array.
- Change subsequent test for return value accordingly. Fix test for
- "message arrived".
- (fhandler_windows::set_close_on_exec): Remove.
- (fhandler_windows::fixup_after_fork): Remove.
- * path.h (path_conv::set_path): Make sure wide_path is NULL when
- setting a new path.
- * select.cc (peek_windows): Use correct hWnd value, not io_handle.
- (fhandler_windows::select_read): Don't use io_handle as wait object.
- (fhandler_windows::select_write): Ditto.
- (fhandler_windows::select_except): Ditto.
-
-2013-10-27 Corinna Vinschen <corinna@vinschen.de>
-
- * exception.h: Fold in content of include/exceptions.h.
- * include/exceptions.h: Remove.
-
-2013-10-26 Corinna Vinschen <corinna@vinschen.de>
-
- * devices.in (dev_storage): Map /dev/dsp to \Device\Null.
- * devices.cc: Regenerate.
- * fhandler_dsp.cc (fhandler_dev_dsp::open): Call fhandler_base::open.
- (fhandler_dev_dsp::close): Call fhandler_base::close.
- (fhandler_dev_dsp::fixup_after_fork): Call
- fhandler_base::fixup_after_fork.
-
- * fhandler_raw.cc (fhandler_dev_raw::fixup_after_fork): Call
- fhandler_base::fixup_after_fork.
-
-2013-10-26 Corinna Vinschen <corinna@vinschen.de>
-
- * exception.h (_exception_list): Drop redefinition for x86_64.
- * include/exceptions.h: Disable content for x86_64 since it's not
- using frame based exception handling anymore.
-
-2013-10-25 Corinna Vinschen <corinna@vinschen.de>
-
- * flock.cc (fhandler_base::lock): Only refuse to lock nohandle and
- old-style console devices when called to perform BSD flock locking.
- Add a FIXME to comment and align description.
-
- * ntdll.h (THREADINFOCLASS): Following MSDN, rename throughout from
- THREAD_INFORMATION_CLASS.
-
-2013-10-25 Corinna Vinschen <corinna@vinschen.de>
-
- * devices.in (dev_storage): Map /dev/clipboard to \Device\Null.
- * devices.cc: Regenerate.
- * fhandler.h (fhandler_dev_clipboard::open): Drop declaration.
- * fhandler_clipboard.cc (fhandler_dev_clipboard::dup): Drop call to
- open. Set private members to 0 and call fhandler_base::dup.
- (fhandler_dev_clipboard::open): Remove so that default
- fhandler_base::open is used to open \Device\Null.
- (set_clipboard): Drop gratuitios call to RegisterClipboardFormatW.
- (fhandler_dev_clipboard::close): Call fhandler_base::close from here.
-
-2013-10-25 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_base::fstat_fs): Fix comment.
-
-2013-10-25 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_clipboard.cc (fhandler_dev_clipboard::open): Drop gratuitios
- handling of membuffer. It's NULL anyway.
- (fhandler_dev_clipboard::lseek): Set membuffer to NULL after freeing
- it to avoid subsequent crashes when accessing invalid pointer.
-
-2013-10-25 Corinna Vinschen <corinna@vinschen.de>
-
- * devices.in (dev_storage): Map /dev/random and /dev/urandom to
- \Device\Null.
- * devices.cc: Regenerate.
- * fhandler.h (fhandler_dev_random::open): Drop declaration.
- (fhandler_dev_random::close): Ditto.
- (fhandler_dev_random::crypt_gen_random): Convert to static method.
- * fhandler_random.cc (fhandler_dev_random::open): Remove so that default
- fhandler_base::open is used to open \Device\Null.
- (fhandler_dev_random::close): Ditto.
- * fhandler_socket.cc (entropy_source): Delete.
- (fhandler_socket::af_local_set_secret): Remove entropy_source code and
- call fhandler_dev_random::crypt_gen_random directly instead.
-
-2013-10-24 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (fhandler_dev_zero::lseek): Convert to inline method.
- (class fhandler_dev_random): Drop dummy_offset.
- (fhandler_dev_random::lseek): Convert to inline method.
- (fhandler_dev_dsp::lseek): Ditto.
- * fhandler_dsp.cc (fhandler_dev_dsp::lseek): Drop here.
- * fhandler_random.cc (fhandler_dev_random::open): Drop setting
- dummy_offset.
- (fhandler_dev_random::lseek): Drop here.
- * fhandler_tape.cc (fhandler_dev_tape::lseek): Make no-op, but keep
- old code for reference.
- * fhandler_zero.cc (fhandler_dev_zero::lseek): Drop here.
-
-2013-10-24 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * external.cc (fillout_pinfo): If start_time is 0, wait a while before
- returning the pinfo structure.
-
- * fhandler.cc (fhandler_base::open_setup): Convert from inline.
- * fhandler.h (fhandler_base::open_setup): Declare.
- * fhandler_console.cc (fhandler_console::open_setup): Always call
- fhandler_base::open_setup.
- * fhandler_tty.cc (fhandler_pty_slave::open_setup): Ditto.
- (fhandler_pty_master::open_setup): Ditto.
-
-2013-10-24 Corinna Vinschen <corinna@vinschen.de>
-
- * devices.in (dev_storage): Map /dev/zero and /dev/full to \Device\Null.
- * devices.cc: Regenerate.
- * dtable.h (struct dtable): Make fhandler_base friend, rather
- than fhandler_disk_file.
- * fhandler.cc (fhandler_base::open_with_arch): Create unique id.
- (fhandler_base::cleanup): Call del_my_locks.
- (fhandler_base::fcntl): Handle F_GETLK, F_SETLK and F_SETLKW.
- * fhandler.h (fhandler_base::get_dev): Return real device number.
- (fhandler_base::set_unique_id): New inline method.
- (fhandler_disk_file::lock): Drop declaration.
- (fhandler_disk_file::get_dev): New method, return pc.fs_serial_number.
- (fhandler_dev_zero::open): Drop declaration.
- * fhandler_disk_file.cc (fhandler_disk_file::close): Move
- del_my_locks call to fhandler_base::open_with_arch.
- (fhandler_disk_file::fcntl): Move handling of locking commands to
- fhandler_base::fcntl.
- (fhandler_base::open_fs): Drop call to NtAllocateLocallyUniqueId.
- * fhandler_zero.cc (fhandler_dev_zero::open): Remove so that default
- fhandler_base::open is used to open \Device\Null.
- * flock.cc (fixup_lockf_after_exec): Finding a single fhandler is
- enough here.
- (fhandler_base::lock): Replace fhandler_disk_file::lock. Refuse to lock
- nohandle devices. Handle read/write test using POSIX flags. Explain
- why. Never fail on SEEK_CUR or SEEK_END, rather assume position 0,
- just as Linux.
- * net.cc (fdsock): Create unique id.
-
-2013-10-23 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/config.h (_READ_WRITE_BUFSIZE_TYPE): Define.
-
-2013-10-23 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::fstat): Drop FH_FULL case to align
- /dev/full permissions to Linux.
-
-2013-10-22 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * fhandler.h (fhandler_base::cleanup): Mark as extern rather than
- inline.
- * fhandler_base.cc (fhandler_base::cleanup): Define.
- * fhandler_tty.cc (fhandler_pty_slave::cleanup): Call fhandler_base::cleanup.
- (fhandler_pty_master::cleanup): Ditto.
-
-2013-10-18 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * fhandler_termios.cc (tty_min::kill_pgrp): Don't send a signal to
- myself if this process is exiting.
-
-2013-10-18 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * tty.cc (tty_list::allocate): Set sid to 0 rather than -1 since -1 is
- an error condition.
-
-2013-10-16 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_process.cc (format_process_ctty): Fix random content of
- /proc/$PID/ctty if the process has no controlling tty. Set to just
- "\n" instead.
-
-2013-10-15 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (CryptAcquireContextW): Remove.
- (CryptGenRandom): Remove.
- (CryptReleaseContext): Remove.
- (SystemFunction036): Define. Add comment to explain that this is
- actually the RtlGenRandom function.
- * fhandler.h (class fhandler_dev_random): Drop crypt_prov member.
- (fhandler_dev_random::fhandler_dev_random): Define inline.
- (fhandler_dev_random::dup): Drop declaration.
- * fhandler_random.cc (fhandler_dev_random::fhandler_dev_random): Remove
- here.
- (fhandler_dev_random::crypt_gen_random): Use RtlGenRandom to drop
- dependency to old Crypto API.
- (fhandler_dev_random::read): Implement an enhanced version of reading
- random bytes from RtlGenRandom for the sake of a better /dev/random
- emulation.
- (fhandler_dev_random::close): Just return 0 since crypt_prov doesn't
- exisyt anymore.
- (fhandler_dev_random::dup): Drop entirely for the same reason.
-
-2013-10-15 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (mmap64): Convert pagesize from DWORD to size_t to avoid
- a rounding error for allocations beyond 4 Gigs.
-
-2013-10-05 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * ntdll.h: Guard against new header files.
-
-2013-09-25 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * include/cygwin/version.h (CYGWIN_VERSION_DLL_MINOR): Bump to 26.
-
-2013-09-25 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * sigproc.h (hold_everything::ischild): Declare as reference.
- (hold_everything::hold_everything): Store address of caller's notion of
- "ischild".
-
-2013-09-25 Christopher Faylor <me.cygwin2013@cgf.cx>
- Paul Kunysch <paul.kunysch@emsys.de>
-
- * thread.cc (semaphore::_getvalue): Set *sval as appropriate. Set
- errno and return -1 on error.
-
-2013-08-31 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/version.h (CYGWIN_VERSION_DLL_MINOR): Belatedly bump
- to 25.
-
-2013-08-31 Corinna Vinschen <corinna@vinschen.de>
-
- * heap.cc (RAISEHEAP_SIZE): New definition.
- (user_heap_info::sbrk): Make failed commit an error condition again.
- Only reserve RAISEHEAP_SIZE sized chunk for further heap reservations
- by default.
-
-2013-08-30 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * cygheap.h (user_heap_info::sbrk): Declare new function.
- (user_heap_info::init): Ditto.
- * heap.cc (user_heap_info::init): Rename from heap_init(). Avoid
- explictly using cygheap->user_heap.
- (sbrk): Use user_heap_info method via cygheap->user_heap.
- (user_heap_info::sbrk): Renamed from sbrk(). Eliminate explicit use of
- cygheap->user_heap. Change some pointer arithmetic to use (char *) for
- consistency.
- * shared.cc (shared_info::initialize): Change heap_init call to
- cygheap->user_heap.init.
-
-2013-08-30 Corinna Vinschen <corinna@vinschen.de>
-
- * heap.cc (sbrk): Add a FIXME comment to VirtualFree call. Fix memory
- reservation and commit strategy when more memory is requested than
- available on the heap. Release newly reserved memory if commiting
- it fails. Add more comments to explain what we do.
-
-2013-08-30 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_tape.cc (mtinfo_drive::open): Handle bus reset gracefully
- after opening the device.
-
-2013-08-30 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * sigproc.cc (pending_signals::add): Properly maintain linked list.
- (wait_sig): Use already calculated 'next' element when signal is
- blocked.
-
-2013-08-26 Corinna Vinschen <corinna@vinschen.de>
-
- * mtinfo.h (class mtinfo_part): Change type of block numbers to int64_t.
- (mtinfo_part::initialize): Ditto for nblock parameter in declaration.
- (class mtinfo_drive): Change type of block number to int64_t. Change
- all parameters indicating a block number to int64_t in method
- declarations.
- * fhandler_tape.cc (mtinfo_part::initialize): Ditto in definition.
- (mtinfo_drive::get_pos): Ditto. Replace low and high with a
- ULARGE_INTEGER and use it's components in call to GetTapePosition.
- Store full value in block.
- (mtinfo_drive::_set_pos): Change type of count parameter to int64_t.
- Change call to SetTapePosition accordingly.
- (mtinfo_drive::set_pos): Change type of count parameter to int64_t.
- Change local variables holding block numbers accordingly.
- (mtinfo_drive::get_status): Don't bail out early if fetching media
- parameters fails.
- (mtinfo_drive::ioctl): Add explicit cast matching receiving type in
- MTTELL and MTIOCPOS calls.
-
-2013-08-23 Corinna Vinschen <corinna@vinschen.de>
-
- * flock.cc (lockf_t::from_obj_name): Fix test for valid pid.
-
-2013-08-23 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * spawn.cc (child_info_spawn): Revert previous change. Always set
- lpReserved2.
-
-2013-08-23 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * child_info.h (PROC_MAGIC_GENERIC): Define differently for x86 vs.
- x86_64.
-
-2013-08-23 Corinna Vinschen <corinna@vinschen.de>
-
- * path.h (enum path_types): Drop definition of PATH_64BITEXEC.
- (path_conv::iscygexec32): Drop unused inline function.
- (path_conv::iscygexec64): Ditto.
- (path_conv::set_cygexec): Remove unnecessary setting of PATH_64BITEXEC.
- * spawn.cc (child_info_spawn::worker): Disable setting of
- STARTUPINFOW::lpReserved2 and STARTUPINFOW::cbReserved2 for non-Cygwin
- child processes. Explain why.
-
-2013-08-21 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_tape.cc (mtinfo_drive::create_partitions): Allow partitioning
- of drives supporting select partitions.
- (mtinfo_drive::get_status): Fill in current partition and number of
- partitions on tape into mt_resid.
- * include/cygwin/mtio.h (struct mtget): Align mt_resid comment to
- aforementioned change.
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
-
-2013-08-20 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_tape.cc (mtinfo_drive::create_partitions): Fix long-standing
- bug disabling creation of two partitions on drives supporting initiator
- partitions.
- (mtinfo_drive::set_blocksize): Update media information after setting
- blocksize succeeded.
- (mtinfo_drive::get_status): Fetch fresh media information.
-
-2013-08-19 Corinna Vinschen <corinna@vinschen.de>
-
- * lc_msg.h: Regenerate.
- * nlsfuncs.cc (__get_lcid_from_locale): Update list of Script-only
- locales to Windows 8.
- (__set_charset_from_locale): Take locales added with Windows 8 and 8.1
- into account.
-
-2013-08-19 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_tape.cc (mtinfo_drive::set_pos): Remove unneeded linebreak.
- (mtinfo_drive::get_status): Drop using get_ll when it's not required.
-
-2013-08-14 Corinna Vinschen <corinna@vinschen.de>
-
- * include/sys/cygwin.h (struct per_process): Add posix_memalign. Reduce
- size of unused2 accordingly.
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
- * lib/_cygwin_crt0_common.cc (_cygwin_crt0_common): Initialize
- u->posix_memalign with address of posix_memalign.
- * malloc_wrapper.cc (posix_memalign): Call user-provided posix_memalign
- rather than just returning ENOSYS.
- * globals.cc (__cygwin_user_data): Initialize posix_memalign member.
-
-2013-08-09 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/version.h (CYGWIN_VERSION_DLL_MINOR): Bump to 24.
-
-2013-08-07 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_base::open_fs): Fix indentation.
-
-2013-07-31 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * fhandler_tty.cc: Revert accidental checkin.
- * update-copyright: Ditto.
-
-2013-07-31 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * cygheap.cc (cmalloc): Use size_t for size field.
- (cmalloc_abort): Ditto.
- (crealloc): Ditto.
- (crealloc_abort): Ditto.
- (ccalloc): Ditto.
- (ccalloc_abort): Ditto.
- * cygheap_malloc.h (HEAP_USER): Add.
- (cmalloc): Use size_t for size field in declaration.
- (cmalloc_abort): Ditto.
- (crealloc): Ditto.
- (crealloc_abort): Ditto.
- (ccalloc): Ditto.
- (ccalloc_abort): Ditto.
-
-2013-07-31 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (normalize_posix_path): Don't check existence of / or // dir
- in parent dir check.
-
-2013-07-26 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * environ.cc (tty_is_gone): Delete.
- (known): Delete tty, add wincmdln.
- * globals.cc: Reorganize list of environment bools, remove explicit =
- false for slight load time optimization.
- (wincmdln): New global.
- * spawn.cc (child_info_spawn::worker): Honor wincmdln.
-
-2013-07-23 Corinna Vinschen <corinna@vinschen.de>
-
- * ntdll.h (struct _SEMAPHORE_BASIC_INFORMATION): Define.
- (enum _SEMAPHORE_INFORMATION_CLASS): Define.
- (NtQuerySemaphore): Declare.
- * thread.h (class semaphore): Add member startvalue.
- (semaphore::fixup_before_fork): New inline method.
- (semaphore::_fixup_before_fork): Declare.
- * thread.cc (MTinterface::fixup_before_fork): Additionally call
- semaphore::fixup_before_fork.
- (semaphore::semaphore): Set currentvalue to -1. Set startvalue to
- incoming initializer value.
- (semaphore::_getvalue): Just query semaphore using NtQuerySemaphore
- rather then using WFSO/Release.
- (semaphore::_post): Drop setting currentvalue. It's not thread-safe.
- (semaphore::_trywait): Ditto.
- (semaphore::_timedwait): Ditto.
- (semaphore::_wait): Ditto.
- (semaphore::_fixup_before_fork): New method, setting currentvalue from
- actual windows semaphore right before fork.
- (semaphore::_fixup_after_fork): Drop kludge from 2013-07-10. Drop
- FIXME comment.
-
-2013-07-23 Corinna Vinschen <corinna@vinschen.de>
-
- * cygtls.cc (well_known_dlls): Add kernelbase.dll.
-
-2013-07-22 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/version.h (CYGWIN_VERSION_DLL_MINOR): Bump to 23.
-
-2013-07-21 Corinna Vinschen <corinna@vinschen.de>
-
- * regex/regcomp.c (wgetnext): Add a kludge to be more glibc compatible.
- Add comment to explain.
-
-2013-07-20 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * exceptions.cc (signal_exit): Remove comment. Use
- __builtin_frame_address.
-
-2013-07-20 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * exceptions.cc (signal_exit): Nope. Nevermind. Dump core
- unconditionally.
-
-2013-07-19 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * exceptions.cc (signal_exit): Add a FIXME comment.
-
-2013-07-19 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * exceptions.cc (signal_exit): Only dump core when it's a "kernel"
- signal. Only use RtlCaptureContext on x86_64. It doesn't seem to do
- what's expected on x86.
-
-2013-07-19 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * spawn.cc (child_info_spawn::worker): Reinstate using temp buffer for
- wide character command-line storage. Use wcs method to convert command
- line.
- * winf.h (lb_wcs): Delete.
- (linebuf::wcs): Implement new single-argument method.
-
-2013-07-19 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * lib/libcmain.c (main): Don't point to last quoted character if the
- only thing in the buffer is the program name.
-
-2013-07-19 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * common.din: Export GetCommandLine{A,W}.
- * kernel32.cc: Add includes needed for GetCommandLine functions.
- (ucmd): New function.
- (cygwin_GetCommandLineW): Ditto.
- (cygwin_GetCommandLineA): Ditto.
- * spawn.cc (child_info_spawn::worker): Rename one_line -> cmd. Use
- lb_wcs macro to generate a wide character version of the line buffer.
- Remove duplicate printing of command line. Don't access members of
- linebuf directly.
- * winf.h: Use pragma once.
- (linebuf): Make storage private.
- (linebuf::operator size_t): New operator. Return size of buf.
- (linebuf::operator wchar_t): New operator.
- (linebuf::wcs): New function.
- (lb_wcs): New macro.
- * include/cygwin/version.h: Bump API minor number to 268.
-
- * strfuncs.cc: Clarify descriptive file comment.
-
-2013-07-19 Corinna Vinschen <corinna@vinschen.de>
-
- * cygtls.cc (_cygtls::remove): Close cw_timer handle, thus avoiding
- handle leak.
-
-2013-07-19 Jon TURNEY <jon.turney@dronecode.org.uk>
-
- * cygserver_ipc.h (ipc_retval::ipc_retval): Take ssize_t as argument
- to make sure entire ipc_retval union is initialized on all supported
- platforms.
-
-2013-07-18 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (normalize_posix_path): Start checking path before ".." at
- dst, rather than at dst_start, otherwise suffer loss of one leading
- slash in case of UNC paths.
-
-2013-07-17 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * winsup.h (cygbench): Fix declaration to match definition.
- * dcrt0.cc (initial_env): Remove unused variable.
-
-2013-07-15 Corinna Vinschen <corinna@vinschen.de>
-
- Remove /dev/mem, /dev/kmem, /dev/port support.
- * Makefile.in (DLL_OFILES): Drop fhandler_mem.o.
- (fhandler_mem_CFLAGS): Remove rule.
- * devices.in (enum fh_devices): Remove FH_MEM, FH_KMEM and FH_PORT.
- * devices.cc: Regenerate.
- * dtable.cc (fh_alloc): Drop handling for FH_MEM, FH_KMEM and FH_PORT.
- * fhandler.h (class fhandler_dev_mem): Remove.
- * fhandler_mem.cc: Remove file.
- * globals.cc (ro_u_pmem): Remove.
- * mmap.cc (fhandler_dev_mem::mmap): Remove.
- (fhandler_dev_mem::munmap): Remove.
- (fhandler_dev_mem::fixup_mmap_after_fork): Remove.
-
-2013-07-15 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/version.h (CYGWIN_VERSION_DLL_MINOR): Bump to 22.
-
-2013-07-15 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (symlink_native): Fix common prefix search. Enhance comment.
-
-2013-07-11 Corinna Vinschen <corinna@vinschen.de>
-
- * uname.cc (uname): Drop unused code.
-
-2013-07-10 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * gentlsoffsets: Clean up a little.
-
- * thread.cc (semaphore::_fixup_after_fork): Report on potential problem
- parameter. Make sure that currentvalue is never zero.
- (semaphore::init): Make cosmetic change.
-
-2013-07-10 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.sc.in (.text.*): Fold into .text on all platforms.
- (.eh_frame): Add section.
- * environ.cc (my_findenv): Drop __stdcall attribute.
- (getearly): Ditto.
- (findenv_func): Drop cast.
-
-2013-07-03 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * fhandler.cc (fhandler_base::close_with_arch): Make sure that the
- archetype is deleted when close_with_arch is referenced *via* the
- archetype.
-
-2013-06-28 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (find_fast_cwd_pointer): Use gas syntax for assembler
- description in all comments. Make algorithm work on Windows 8.1
- Preview.
-
-2013-06-27 Corinna Vinschen <corinna@vinschen.de>
-
- * dcrt0.cc (child_info_fork::alloc_stack): Fix a comparison to avoid
- taking 4K more stack in forked child.
- * fork.cc (frok::parent): Print child exit code in hex if sync failed.
-
-2013-06-24 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * common.din (rawmemchr): Export.
- * posix.sgml (std-gnu): Add rawmemchr.
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
-
-2013-06-21 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (cygwin_conv_path): Handle NULL "from" path gracefully.
- * path.sgml (func-cygwin-conv-path): Document returning EINVAL if
- "from" is NULL.
-
-2013-06-19 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * winf.h (av::unshift): Make __reg2.
-
-2013-06-19 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * spawn.cc (child_info_spawn::worker): Eliminate call to newargv.set()
- in favor of conglomerated newargv.setup(). Let newargv.setup() decide
- when to call dup_all(). Only set argc and argv for cygwin processes.
- (av::setup): Rename from av::fixup. Accept argc and argv parameters.
- Fill out argv and argc here. Duplicate whole argv structure when this
- is a Cygwin executable.
- * winf.cc (linebuf::fromargv): Don't bother duplicating argv elements
- since they will never be used.
- * winf.h (av::set): Delete.
- (av::setup): Rename from av::fixup. Add two parameters.
- (av::replace0_maybe): Assign calloced to 1 rather than 'true' for
- clarity.
- (av::dup_maybe): Delete.
- (av::dup_all): Set calloced to show that we have duplicated all of the
- arguments in the list.
-
-2013-06-18 Corinna Vinschen <corinna@vinschen.de>
-
- * nlsfuncs.cc (__collate_range_cmp): Convert input to wchar_t and call
- wcscoll since all calling functions are using wide chars. Explain in
- preceeding comment.
-
-2013-06-18 Corinna Vinschen <corinna@vinschen.de>
-
- * spawn.cc (child_info_spawn::worker): Eliminate wascygexec.
-
-2013-06-18 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * dcrt0.cc (child_info_fork::alloc_stack): Don't subtract 4096 from
- stack pointer since getstack() already does that.
-
-2013-06-18 Corinna Vinschen <corinna@vinschen.de>
-
- * gmon.c: Drop gratuitous inclusion of strings.h. Remove __MINGW32__
- around definition of bzero.
-
-2013-06-18 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (VPATH): Drop CONFIG_DIR.
- (EXTRA_DLL_OFILES): Remove.
- (DLL_OFILES): Remove EXTRA_DLL_OFILES.
- (ASFLAGS): Define as -D_WIN64 on x86_64.
- (GMON_OFILES): Add mcountFunc.o.
- ($(srcdir)/$(TLSOFFSETS_H)): Use target_cpu rather than CONFIG_DIR.
- * configure.ac (CONFIG_DIR): Remove definition.
- * configure: Regenerate.
- * gcrt0.c: Use latest version from Mingw-w64 project.
- * gmon.c: Ditto.
- * gmon.h: Ditto.
- * mcount.c: Ditto.
- * mcountFunc.S: Ditto, new file.
- * profil.c: Ditto.
- * profil.h: Ditto.
- * config: Remove entire directory.
-
-2013-06-17 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (cnt_bs): New inline function.
- (symlink_native): Fix creating relative native symlink.
-
-2013-06-17 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_clipboard.cc (fhandler_dev_clipboard::read): Fix buffer
- read access overrun when pos > 0.
-
-2013-06-17 Corinna Vinschen <corinna@vinschen.de>
-
- * times.cc (GetSystemTimePreciseAsFileTime): Add comment to declaration.
- (__to_clock_t): Remove a debug_printf.
- (times): Align syscall_printf to debug output of other system calls.
-
-2013-06-14 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (GetSystemTimePreciseAsFileTime): Define.
- * times.cc (GetSystemTimePreciseAsFileTime): Temporarily declare here
- to workaround missing definition in 32 bit w32api headers.
- (get_system_time): New always inline function to call either
- GetSystemTimePreciseAsFileTime or GetSystemTimeAsFileTime on a per OS
- basis. Call throughout instead of GetSystemTimeAsFileTime.
- * wincap.h (wincaps::has_precise_system_time): New element.
- * wincap.cc: Implement above element throughout.
-
-2013-06-14 Corinna Vinschen <corinna@vinschen.de>
-
- Streamline time/times functionality. Remove last remains of former
- Windows 9x compatibility.
- * fhandler_disk_file.cc (fhandler_base::fstat_helper): Drop now unneeded
- casts in calls to_timestruc_t.
- (fhandler_base::utimens_fs): Ditto for timespec_to_filetime.
- * fhandler_proc.cc (format_proc_stat): Ditto for to_time_t.
- * hires.h (class hires_ms): Remove unused member initime_ns.
- Remove declarations for timeGetTime_ns and prime.
- (hires_ms::uptime): Remove.
- * posix_ipc.cc (ipc_cond_timedwait): Ditto for timespec_to_filetime.
- * fhandler_registry.cc (fhandler_registry::fstat): Add cast.
- * resource.cc (fill_rusage): Call NtQueryInformationProcess rather than
- GetProcessTimes to deal with LARGE_INTEGER rather than FILETIME.
- * times.cc: Simplify time handling. Throughout, use LARGE_INTEGER
- rather than FILETIME to simplify computations. Throughout use
- {u}int64_t rather than {unsigned} long long. Drop unneeded casts since
- NSPERSEC is 64 bit anyway.
- (systime_ns): Remove.
- (times): Call NtQuerySystemInformation to fetch boot time. Call
- NtQueryInformationProcess rather than GetProcessTimes to deal with
- LARGE_INTEGER rather than FILETIME. Call GetSystemTimeAsFileTime.
- (totimeval): Use constant 1000000 as in other functions.
- (time_t_to_filetime): Remove.
- (to_time_t): Change return type to time_t.
- (time_as_timestruc_t): Rename filetime to systime.
- (time): Ditto. Add cast.
- (hires_ns::nsecs): Fix return type cast.
- (hires_ms::timeGetTime_ns): Remove.
- (hires_ns::prime): Remove.
- (hires_ms::nsecs): Drop call to prime. Call GetSystemTimeAsFileTime
- directly. Subtract FACTOR here since it's the only function needing
- to do so.
- (minperiod): Cosmetically change to ULONG.
- (hires_ns::resolution): Fix return type cast.
- (hires_ms::resolution): Simplify, rely on NtQueryTimerResolution.
- * winsup.h: Align time related prototypes to above changes.
-
-2013-06-13 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (gen_old_if_name): New function to generate short interface
- names for old pre-1.7 applications.
- (get_ifs): Call gen_old_if_name for said old applications.
-
-2013-06-13 Corinna Vinschen <corinna@vinschen.de>
-
- * posix.sgml (fcntl, flock, lockf): Point to implementation notes.
-
-2013-06-12 Fedin Pavel <p.fedin@samsung.com>
-
- * path.cc (normalize_posix_path): Fix long-standing problem which
- allows to access files via ".." using an invalid POSIX path.
-
-2013-06-11 Corinna Vinschen <corinna@vinschen.de>
-
- * winver.rc (FileDescription): Remove (R).
-
-2013-06-10 Corinna Vinschen <corinna@vinschen.de>
-
- * sec_auth.cc (get_user_groups): Don't handle ERROR_ACCESS_DENIED as
- error. Explain why.
-
-2013-06-08 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * exceptions.cc (try_to_debug): Don't use yield() when waiting for
- another process.
- (sigpacket::setup_handler): Fix long-standing problem where loop could
- exit with lock held.
-
-2013-06-08 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * miscfuncs.cc (yield): Revert (after researching) to calling Sleep
- with 0. We don't want to actually sleep when calling this function.
-
-2013-06-08 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * cygwait.cc (cygwait): Remove lock around sig retrieval since this
- code is essentially guarded by thread-specific signal_arrived.
- * exceptions.cc (_cygtls::handle_SIGCONT): Simplify. Eliminate
- lock/unlock since code is guarded by signal_arrived.
-
-2013-06-07 Corinna Vinschen <corinna@vinschen.de>
-
- * winver.rc (LegalCopyright): Belatedly bump to 2013.
-
-2013-06-07 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * exceptions.cc (_cygtls::handle_SIGCONT): Reinstate previous behavior
- but make sure that yield() isn't called when signal stack is locked.
-
-2013-06-07 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * exceptions.cc (exception::handle): Add comment explaining si_addr
- behavior.
-
-2013-06-07 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * DevNotes: Add entry cgf-000023.
- * sigproc.cc (exit_thread): Remove now-unneeded sleep code.
-
-2013-06-07 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/version.h (CYGWIN_VERSION_DLL_MINOR): Bump to 21.
-
-2013-06-07 Corinna Vinschen <corinna@vinschen.de>
-
- * posix.sgml (std-notes): Fix typo.
-
-2013-06-07 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_disk_file.cc (fhandler_disk_file::pread): Skip to non-atomic
- code if mandatory locking is used on this descriptor. Explain why.
- (fhandler_disk_file::pwrite): Ditto.
- * posix.sgml (std-notes): Extend description of file locking.
-
-2013-06-06 Corinna Vinschen <corinna@vinschen.de>
-
- * exceptions.cc (_cygtls::handle_SIGCONT): Simplify loop waiting for
- sig_handle_tty_stop to wake up. Make sure to unlock before calling
- yield to avoid starvation of sig_handle_tty_stop. Add comments.
- * miscfuncs.cc (yield): Explain why yield should never be called under
- _cygtls::lock conditions. Call SleepEx with 1ms timeout. Explain why.
-
-2013-06-05 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/version.h (CYGWIN_VERSION_DLL_MINOR): Bump to 20.
-
-2013-06-04 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::lock): Move to flock.cc.
- (fhandler_base::fixup_after_exec): Reset mandatory_locking.
- * fhandler.h (class fhandler_base): Add mandatory_locking status flag.
- Add mandatory_locking accessor methods. Accommodate change throughout.
- (fhandler_base::mand_lock): Declare.
- (class fhandler_disk_file): Drop in favor of new status flag.
- * (fhandler_disk_file::fcntl): Call need_fork_fixup if mandatory_locking
- flag gets set.
- * flock.cc (fhandler_base::lock): Define here.
- (flock): Handle mandatory_locking.
- (lockf): Ditto.
- (fhandler_base::mand_lock): Define.
-
-2013-06-03 Corinna Vinschen <corinna@vinschen.de>
-
- * sigproc.cc (exit_thread): Allow to exit the thread while running
- global dtors. Explain why.
-
-2013-06-02 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (CancelSynchronousIo): Define.
- * fcntl.cc (fcntl64): Drop handling of locking commands.
- * fhandler.h (class fhandler_disk_file): Add mandatory_locking.
- (fhandler_disk_file::fcntl): Declare.
- (fhandler_disk_file::mand_lock): Declare.
- * fhandler_disk_file.cc (fhandler_disk_file::fhandler_disk_file):
- Initialize mandatory_locking.
- (fhandler_disk_file::fcntl): New method. Handle F_LCK_MANDATORY and
- locking commands.
- (fhandler_disk_file::dup): Duplicate mandatory_locking. Fix a bug
- when duplicating prw_handle failed.
- (fhandler_disk_file::fixup_after_fork): Reset mandatory_locking.
- * flock.cc (fhandler_disk_file::lock): Add comment.
- (struct lock_parms): New struct to pass parameters to blocking_lock_thr
- thread function.
- (blocking_lock_thr): New thread function.
- (fhandler_disk_file::mand_lock): New methof implementing mandatory
- locking with Windows semantics.
- * ntdll.h (NtLockFile): Declare.
- (NtUnlockFile): Declare.
- * include/fcntl.h: Fix a comment.
- (F_LCK_MANDATORY): Define. Add lengthy comment to explain.
-
-2013-06-02 Corinna Vinschen <corinna@vinschen.de>
-
- * exceptions.cc (exception::handle): Resurrect accidentally lost
- patch from 2009-07-22: Set si_addr according to POSIX for SIGSEGV.
-
-2013-05-31 Corinna Vinschen <corinna@vinschen.de>
-
- * include/sys/socket.h: Move SHUT_xx definitions from here...
- * include/cygwin/socket.h: ...to here.
-
-2013-05-31 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/if.h: Include cygwin/socket.h rather than sys/socket.h
- to avoid circular dependency resulting in bogus compile time warnings.
-
-2013-05-28 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_procsys.cc (fhandler_procsys::read): Just call
- fhandler_base::raw_read from here. Drop comment.
- (fhandler_procsys::write): Drop comment.
-
-2013-05-27 Corinna Vinschen <corinna@vinschen.de>
-
- * dll_init.cc (dll_list::topsort): Fix early-return condition to
- accommodate process with all runtime loaded DLLs already dlclosed
- at fork time.
- * gendef (_sigfe_maybe): Fix code handling early return if we don't
- have a tls, broken on 2013-05-21.
-
-2013-05-24 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (DEFS): Unused, remove.
- (COMPILE.cc): Move -mno-use-libstdc-wrappers flag from here...
- ($(TEST_DLL_NAME)): ...to here since it's a link time flag.
-
-2013-05-24 Corinna Vinschen <corinna@vinschen.de>
-
- * pinfo.cc (pinfo::status_exit): Enhance comment.
-
-2013-05-24 Corinna Vinschen <corinna@vinschen.de>
-
- * environ.cc (win_env::add_cache): Set the Windows environment variable
- using wide chars to make sure native chars don't get scrambled.
- * environ.h (build_env): Fix formatting in declaration.
- * pinfo.cc (pinfo::status_exit): Handle STATUS_NO_MEMORY. Explain why.
-
-2013-05-24 Corinna Vinschen <corinna@vinschen.de>
-
- * fork.cc (frok::parent): Always set CREATE_UNICODE_ENVIRONMENT flag.
- Explain why.
-
-2013-05-23 Corinna Vinschen <corinna@vinschen.de>
-
- * fork.cc (frok::parent): Call CreateProcessW with command line set
- to the parent command line. Change comment to explain why.
-
-2013-05-23 Corinna Vinschen <corinna@vinschen.de>
-
- * dcrt0.cc (child_info_fork::alloc_stack_hard_way): Fix datatype of
- stacksize to SIZE_T. Cast to SIZE_T in pointer arithmetic. Slightly
- enhance output in case of a fatal error.
- * fork.cc (frok::parent): Always set ch.stackaddr to DeallocationStack
- value of current thread to help stack reservation in
- child_info_fork::alloc_stack_hard_way along. Simplify subsequent code
- storing stack values in ch. Print guardsize in hex, too.
-
-2013-05-23 Corinna Vinschen <corinna@vinschen.de>
-
- * environ.cc (set_winsymlinks): Handle "winsymlinks:nativestrict"
- option. On pre-Vista warn the user if the "winsymlinks:native*" option
- is set.
- * globals.cc (enum winsym_t): Add WSYM_nativestrict.
- * path.cc (symlink_native): Don't create native symlink if target
- does not exist. Explain why. Improve comments.
- (symlink_worker): Change AFS symlink handling to WSYM_nativestrict.
- Handle WSYM_nativestrict throughout. Change condition for bail out
- to wsym_type == WSYM_nativestrict. Add comment. Fix formatting.
- * shared_info.h (CURR_USER_MAGIC): Change to reflect change in
- class user_info.
- (class user_info): Add member warned_nonativesyms.
-
-2013-05-22 Corinna Vinschen <corinna@vinschen.de>
-
- * spinlock.h (ULONG): Replace LONG operator with ULONG to accommodate
- the fact that CURR_SHARED_MAGIC and USER_SHARED_MAGIC are unsigned
- values.
- * shared.cc (shared_info::initialize): Drop explicit cast here.
-
-2013-05-21 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (DLL_OFILES): Add arc4random.o.
- * common.din: Export arc4random, arc4random_addrandom, arc4random_buf,
- arc4random_stir and arc4random_uniform.
- * mktemp.cc (arc4random): Remove static replacement function.
- * posix.sgml (std-bsd): Add arc4random functions.
- * include/cygwin/stdlib.h: Declare arc4random functions.
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
- * libc/arc4random.cc: New file implementing arc4random functions taken
- from FreeBSD.
-
-2013-05-21 Corinna Vinschen <corinna@vinschen.de>
-
- * globals.cc (__isthreaded): New global variable. Explain what it's
- used for.
- * miscfuncs.cc (thread_wrapper): Set __isthreaded to 1 here.
-
-2013-05-21 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.h (class fhandler_dev_random): Change type of pseudo to
- uint32_t to make sure it's 32 bit on all supported platforms.
-
-2013-05-21 Corinna Vinschen <corinna@vinschen.de>
-
- x86_64 only:
- * gendef (_sigfe_maybe): Drop pushing %r12, use %r10 instead since we
- don't call yield anymore.
- (_sigfe): Ditto.
- (_sigbe): Ditto.
-
-2013-05-21 Corinna Vinschen <corinna@vinschen.de>
-
- * libc/base64.c: New file.
- * Makefile.in (DLL_OFILES): Add base64.o.
- * common.din: Export __b64_ntop and __b64_pton.
- * posix.sgml (std-bsd): Add __b64_ntop and __b64_pton.
- * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
-
-2013-05-21 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (open): Only return ENOTDIR if file exists.
-
-2013-05-16 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * sigproc.cc (sig_hold): Delete.
- (sigheld): Delete.
- (sig_send): Eliminate special-case __SIGHOLD handling.
- (wait_sig): Just flag when signals are on hold and add them to the
- queue rather than stalling the wait_sig loop. Clear the flag when
- __SIGNOHOLD is specified.
-
-2013-05-14 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (devices_CFLAGS): Drop -Os.
-
-2013-05-14 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (localtime_CFLAGS): Define as -fwrapv since localtime
- code requires int overflows to be fully defined.
- * localtime.cc: Align a bit more to upstream code.
-
-2013-05-14 Corinna Vinschen <corinna@vinschen.de>
-
- * grp.cc (get_groups): Convert to void function.
- (initgroups32): Accommodate the aforementioned change.
- (getgrouplist): Ditto.
-
-2013-05-14 Corinna Vinschen <corinna@vinschen.de>
-
- * grp.cc (get_groups): Never return error. Always create a group list,
- even if it's empty.
-
-2013-05-13 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * include/cygwin/version.h: Bump api minor number to reflect previous
- change.
-
-2013-05-13 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * i686.din: Remove _strtold.
- * x86_64.din: Move strtold definition...
- * common.din: ...to here.
-
-2013-05-07 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * fhandler_tty.cc (fhandler_pty_common::__acquire_output_mutex): Never
- wait an INFINITE amount of time. Instead default to 1/10 second.
- (fhandler_pty_slave::open): Just default to INFINITE wait rather than
- (now) waiting longer than other similar calls.
-
-2013-05-03 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * spawn.cc (ILLEGAL_SIG_FUNC_PTR): New define.
- (system_call_handle): Rename from system_call_cleanup.
- (is_system_call): New convenience method.
- (system_call_handle::system_call_handle): Use ILLEGAL_SIG_FUNC_PTR
- rather than cast. Call sig_send here rather than in caller.
- Initialize oldint.
- (system_call_handle::arm): New function pulled from constructor.
- (~system_call_handle::system_call_handle): Use is_system_call().
- (child_info_spawn::worker): Use system_call_handle to set up for system
- call early. Use arm call prior to waiting for child to properly set up
- signal handling. Move comment closer to code it is commenting on.
-
-2013-05-01 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * resource.cc (setrlimit): Use consistent commenting style. Return
- EINVAL when rlim_cur > rlim_max.
-
-2013-04-30 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- Throughout, (mainly in fhandler*) fix remaining gcc 4.7 mismatch
- warnings between regparm definitions and declarations.
- * smallprint.cc (__small_vswprintf): Conditionalize declaration and
- setting of l_opt for only x86_64.
- * spawn.cc (child_info_spawn::worker): Remove unused 'pid' variable.
- * thread.cc (verifyable_object_isvalid): Temporarily define as
- non-inline with gcc 4.7+, regardless of target.
-
-2013-04-30 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * gendef: Fix sigfe.s typo.
-
-2013-04-30 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * spawn.cc (system_call_cleanup): Rename from pthread_cleanup. Extend
- functionality.
- (system_call_cleanup::system_call_cleanup): Set up signals like
- system() requires. Unblock previously-blocked signal handling.
- (system_call_cleanup::~system_call_cleanup): Restore signal handling
- after system().
- (child_info_spawn::worker): Put signals on hold and use
- system_call_cleanup class to set and restore signals rather than doing
- it prior to to running the program. Remove the ill-conceived
- pthread_cleanup stuff.
-
-2013-04-30 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * exceptions.cc (cygwin_exception::dumpstack): Guard against wild
- pointer dereference.
- (CYG_EXC_CONTINUE_EXECUTION): Define based on standard Windows
- definition.
- (CYG_EXC_CONTINUE_SEARCH): Ditto.
- (exception::handle): Move andreas detection earlier. Make comment
- clearer.
- (signal_exit): Set core-dumped flag.
-
-2013-04-30 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * i686.din: New file.
- * x86_64.din: New file.
- * common.din: New file.
- * cygwin.din: Delete.
- * cygwin64.din: Delete.
- * gendef: Rework to take options rather than using positional
- parameters. Accept multiple files as input.
- * Makefile.in: Rework to allow multiple .din files as input to gendef.
- * configure.in: Change names of .din files to be expressively target
- specific.
- * aclocal.m4: Regenerate.
- * configure: Ditto.
-
-2013-04-29 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * autoload.cc (CreateSymbolicLinkW): Rename from CreateSymbolicLink.
-
-2013-04-26 Corinna Vinschen <corinna@vinschen.de>
-
- * fcntl.cc (fcntl): Define as export alias for fcntl64 on x86_64.
-
-2013-04-24 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (CreateSymbolicLink): Define.
- * environ.cc (set_winsymlinks): Set allow_winsymlinks.
- (parse_thing): Change "winsymlinks" to set by function.
- * globals.cc (enum winsym_t): Define.
- (allow_winsymlinks): Define as winsym_t.
- (ro_u_afs): New R/O Unicode string.
- * mount.cc (fs_info::update): Fix comment. Handle AFS.
- (fs_names): Add "afs".
- * mount.h (enum fs_info_type): Add afs.
- (class fs_info): Implement afs.
- * path.cc (symlink): Drop third parameter in call to symlink_worker.
- (symlink_nfs): New function.
- (symlink_native): New function.
- (symlink_worker): Drop third argument. Handle native symlink type by
- calling symlink_native. Move code to handle NFS to symlink_nfs. Fix
- formatting. Slightly restructure code.
- * path.h (class path_conv): Add fs_is_afs method.
- (symlink_worker): Declare here.
- * security.h: Define privilege constants as unsigned int instead of as
- unsigned long.
- * syscalls.cc (mknod_worker): Set third parameter in symlink_worker
- call to WSYM_lnk.
- * winsup.h (symlink_worker): Drop declaration here.
-
-2013-04-23 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin64.din (_setjmp): Export.
- (_longjmp): Export.
-
-2013-04-23 Corinna Vinschen <corinna@vinschen.de>
-
- * Merge in cygwin-64bit-branch. See ChangeLog.64bit for details.
-
-2013-04-22 Corinna Vinschen <corinna@vinschen.de>
-
- * include/sys/queue.h: Delete in favor of more complete newlib file.
-
-2013-04-22 Corinna Vinschen <corinna@vinschen.de>
-
- Adapt to changes in newlib's sys/cdefs.h:
- * include/sys/sysinfo.h (struct sysinfo): Rename __unused member to __f.
- * libc/fts.c (__FBSDID): Drop definition.
- * regex/regexec.c (__unused): Drop definition.
-
-2013-04-22 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/version.h (CYGWIN_VERSION_DLL_MINOR): Bump to 19.
-
-2013-04-16 Corinna Vinschen <corinna@vinschen.de>
-
- * glob.cc: Include winsup.h before anything else.
-
-2013-04-12 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (symlink_info::check): Drop PC_KEEP_HANDLE flag for
- unrecognized reparse points as well. Reorganize code and comments
- handling reparse points for better readability.
-
-2013-04-11 Corinna Vinschen <corinna@vinschen.de>
-
- * hires.h (hires_ns::nsecs): Declare with bool parameter.
- * times.cc (hires_ns::nsecs): Take bool parameter. If set to true,
- don't use prime value (== return system wide absolute value).
-
-2013-04-08 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * cygtls.h (_cygtls::reset_signal_arrived): Actually reset the
- signal_arrived event.
- (_cygtls::handle_SIGCONT): Declare new function.
- * cygwait.cc (is_cw_sig_handle): Delete.
- (is_cw_sig_cont): New convenience define.
- (cygwait): Clear signal if is_cw_sig_cont and we got a SIGCONT.
- * cygwait.h (cw_wait_mask): Add cw_sig_cont.
- * exceptions.cc (sig_handle_tty_stop): Tighten "incyg" region. Use
- cw_sig_cont param for cygwait. Don't zero signal here outside of lock.
- (sigpacket::setup_handler): Don't check for in_forkee since we will now
- never get here in that state.
- (_cygtls::handle_SIGCONT): Define new function.
- (sigpacket::process): Call handle_SIGCONT early to deal with SIGCONT.
- Nuke continue_now handling. Allow SIGKILL to kill a suspended process.
- Delete a couple of now-unneeded labels.
- (_cygtls::call_signal_handler): Reorganize setting of incyg within
- lock.
- * sigproc.cc (pending_signals): Simplify.
- (pending_signals::clear): New method.
- (_cygtls::remove_wq): Reorganize to always close wq.thread_ev if it
- exists to avoid handle leaks.
- (sig_clear): Simplify by just calling sigq.clear().
- (sig_dispatch_pending): Always call sigq.pending even in signal thread
- to force another loop in wait_sig.
- (sig_send): Remove a "goto out" just before out: label.
- (pending_signals::add): Simplify.
- (pending_signals::del): Delete.
- (pending_signals::next): Delete.
- (wait_sig): Define variable q to be the start of the signal queue.
- Just iterate through sigq queue, deleting processed or zeroed signals.
- Only set clearwait when the current signal is SIGCHLD.
- * sigproc.h: Add a comment about an unused enum.
-
-2013-04-08 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (get_inet_addr): Handle abstract AF_LOCAL socket.
- (fhandler_socket::recv_internal): Create abstract socket name for
- AF_LOCAL datagram sockets. Explain why we do that.
-
-2013-04-07 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * cygheap.cc (init_cygheap::find_tls): Add a comment.
- * dcrt0.cc (parent_sigmask): Delete.
- (dll_crt0_1): Use spawn_info->moreinfo->sigmask rather than saved
- parent signal mask.
- * thread.cc (pthread::thread_init_wrapper): Add comment stressing the
- importance of maintaining ordering of statements.
-
-2013-04-05 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (is_mmapped_region): Call LIST_UNLOCK on premature return.
-
-2013-04-03 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_proc.cc (format_proc_loadavg): Raise too small buffer size
- to avoid overwriting unrelated cygheap memory.
-
-2013-04-03 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (class suffix_scan): Add member namelen.
- (suffix_scan::name_len): New method.
- (suffix_scan::has): Store namelen since we have it already anyway.
- Add a bit of explanation and a FIXME to comment.
- (suffix_scan::next): Never attach extra .lnk suffix if resulting
- filename length exceeds NAME_LEN.
- (symlink_info::check): Bail out immediately with ENAMETOOLONG if
- filename length exceeds NAME_LEN.
-
-2013-03-31 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * child_info.h (cygheap_exec_info::sigmask): Declare new field.
- * cygheap.cc (init_cygheap::find_tls): Rename threadlist_ix -> ix.
- Only take one pass through thread list, looking for eligible threads to
- signal. Set a new param indicating that function has found a sigwait*
- mask.
- * cygheap.h (init_cygheap::find_tls): Reflect new parameter.
- * dcrt0.cc (parent_sigmask): New variable.
- (child_info_spawn::handle_spawn): Save parent's signal mask here.
- (dll_crt0_1): Restore parent's signal mask to tls sigmask as
- appropriate. Call sig_dispatch_pending to flush signal queue when we
- can finally do something with signals.
- * exceptions.cc (sigpacket::process): Avoid attempting to handle
- signals if we haven't finished initializing. Rely on the fact that
- find_tls will do mask checking and don't do it again. Delete ill-named
- 'dummy' variable.
- * sigproc.cc (cygheap_exec_info::alloc): Save calling thread's signal
- mask in new sigmask field.
- (wait_sig): Try to debug when WFSO fails and DEBUGGING is defined.
- * thread.cc (pthread::set_tls_self_pointer): Make this a true automatic
- method rather than inexplicably relying on a thread parameter.
- (pthread::thread_init_wrapper): Accommodate set_tls_self_pointer change
- to non-static. Initialize sigmask before setting tid or suffer signal
- races.
- * thread.h (pthread::set_tls_self_pointer): Make non-static, delete
- parameter.
-
-2013-03-29 Corinna Vinschen <corinna@vinschen.de>
-
- * cygthread.cc (cygthread::terminate_thread): Only try to free
- thread stack on systems not freeing it by themselves.
- * wincap.h (wincaps::terminate_thread_frees_stack): New element.
- * wincap.cc: Implement above element throughout.
-
-2013-03-29 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * pinfo.h (pinfo::status_exit): Rename from former static function in
- pinfo.cc.
- (pinfo::operator == (char *)): Remove unused operator.
- * pinfo.cc (pinfo::status_exit): Move this function info pinfo class.
- Use progname from the pinfo rather than myself. Be defensive when
- inspecting procinfo.
-
-2013-03-29 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * sigproc.cc (wait_sig): Avoid uninitialized use of nb when retrying.
- Consolidate two error messages into one.
-
-2013-03-28 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * sigproc.cc (pending_signals::retry): Declare new element.
- (pending_signals::pending): Force an additional loop through wait_sig
- by setting retry whenever this function is called.
- (wait_sig): Reorganize to wait for SIGHOLD at bottom. Always add
- signal to pending queue and work on whole queue rather than just the
- one signal. Loop when sigq.retry is set. Fix long-broken check for
- SIGCHLD after queued signals.
-
-2013-03-28 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * exceptions.cc (exception::handle): Generalize comment.
-
-2013-03-09 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * cygtls.h (_cygtls::signal_debugger): Change argument type.
- (_cygtls::copy_context): Delete declaration.
- * exceptions.cc (exception::handle): Don't call copy_context() here.
- Move signal_handler call earlier and always call it.
- (_cygtls::copy_context): Delete definition.
- (_cygtls::signal_debugger): Move copy_context logic here. Suspend
- thread receiving signal before gathering context information.
-
-2013-03-08 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * spawn.cc (child_info_spawn::worker): Save and restore my_wr_proc_pipe
- around non-execing operations to avoid handle leak seen in
- http://cygwin.com/ml/cygwin/2013-03/msg00152.html .
-
-2013-03-07 Corinna Vinschen <corinna@vinschen.de>
-
- * include/sys/un.h (UNIX_PATH_MAX): Rename from UNIX_PATH_LEN to
- follow Linux.
- * fhandler_socket.cc: Change UNIX_PATH_LEN to UNIX_PATH_MAX throughout.
- (fhandler_socket::recv_internal): Don't return prematurely in case of
- successful return. For AF_LOCAL sockets, overwrite returned AF_INET
- name with AF_LOCAL name.
-
-2013-03-07 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::bind): Fix check for AF_LOCAL
- filename length to allow non-NUL terminated strings within namelen
- bytes. Copy over sun_path to local array sun_path to have a
- NUL-terminated string for subsequent function calls. Move path_conv
- check before OS bind call to not bind the socket before being sure
- the file doesn't exist. Add and fix comments.
-
-2013-03-06 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (fs_names): Add trailing NULL element to avoid potential
- SEGV in format_proc_filesystems.
-
-2013-03-01 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * exceptions.cc (exception::handle): Eliminate buggy recursed variable;
- just check if we're exiting.
-
-2013-02-26 Corinna Vinschen <corinna@vinschen.de>
-
- * include/pthread.h (pthread_atfork): Add missing declaration.
-
-2013-02-20 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * include/error.h (error_message_count): Declare as dllimport.
- (error_one_per_line): Ditto.
- (error_print_progname): Ditto.
-
-2013-02-08 Corinna Vinschen <corinna@vinschen.de>
-
- * child_info.h (CURR_CHILD_INFO_MAGIC): Update.
- (class child_info_fork): Drop extraneous semicolon.
-
-2013-02-04 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::bind): Fix error code for
- empty filename.
-
-2013-02-04 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::bind): Fix length check of
- AF_LOCAL filename so it never accesses memory beyond namelen. Also
- make sure filename is NUL-terminated.
-
-2013-01-31 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * DevNotes: Add entry cgf-000022.
- * cygtls.h (_cygtls::func): Define as a sa_sigaction style function.
- * exceptions.cc (sig_handle_tty_stop): Ditto.
- (_cygtls::interrupt_setup): Fix coercion to accommodate 'func' change.
- (ctrl_c_handler): Use tty kill_pgrp to send a signal.
- (sigpacket::process): Don't process sigflush here.
- (_cygtls::call_signal_handler): Reorganize to avoid a race. Always
- call sa_sigaction style function.
- * fhandler_termios.cc (is_flush_sig): Define new function.
- (tty_min::kill_pgrp): Handle tty flush when signal detected.
- (fhandler_termios::bg_check): Be slightly more paranoid about checking
- for valid tty.
- (fhandler_termios::sigflush): Don't flush unless tty owner.
- * fhandler_tty.cc (fhandler_pty_slave::ioctl): Use tty kill_pgrp to
- send signal.
- (fhandler_pty_master::ioctl): Ditto.
- * signal.cc (killsys): Delete definition.
- * sigproc.h (killsys): Delete declaration.
- * include/cygwin/signal.h (siginfo_t): Simplify union/struct nesting
- slightly. Implement mechanism to allow cygwin data passing.
-
-2013-01-23 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * miscfuncs.cc (__import_address): Check if malloc field points
- directly at 'malloc'.
-
-2013-01-23 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * miscfuncs.cc (__import_address): On second thought, the chance that
- this pointer could be NULL is very low so don't bother checking for it.
-
-2013-01-23 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * exceptions.cc (exception::handle): Make attempt to recursively dump
- stack fatal.
-
-2013-01-22 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * miscfuncs.cc (__import_address): Avoid NULL explicitly.
-
-2013-01-22 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * miscfuncs.cc (__import_address): Avoid treating random instructions
- as import jump.
- * malloc_wrapper.cc (malloc_init): Remove comment about 64-bit.
-
-2013-01-21 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * dcrt0.cc (dll_crt0_1): Comment assumption.
- * exceptions.cc (sigpacket::setup_handler): Avoid sending signals
- during fork processing.
-
-2013-01-21 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * dcrt0.cc (dll_crt0_1): Flag that we are working "incyg". Handle any
- signals (presumably exiting signals) which may have come in while we
- are in the process of setting up.
-
-2013-01-21 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * update-copyright: Recognize configure.ac scripts too.
-
-2013-01-21 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * cygerrno.h (__reg3): Define.
- * cygmalloc.h (__reg3): Ditto.
-
-2013-01-21 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * cygerrno.h: Conditionally define __regN for cygserver.
-
-2013-01-20 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * malloc_wrapper.cc (malloc_init): Re-add inadvertently dropped comment
- which explains what's going on with the use_internal calculation.
-
-2013-01-20 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- Throughout, update copyrights to reflect dates which correspond to
- main-branch checkins. Regularize copyright format.
-
-2013-01-20 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- Throughout, change __attribute__ ((regparm (N))) to just __regN.
- Throughout, (mainly in fhandler*) start fixing gcc 4.7.2 mismatch
- between regparm definitions and declarations.
- * gendef: Define some functions to take @ declaration to accommodate
- _regN defines which use __stdcall.
- * gentls_offsets: Define __regN macros as empty.
- * autoload.cc (wsock_init): Remove unneeded regparm attribute.
- * winsup.h (__reg1): Define.
- (__reg2): Define.
- (__reg3): Define.
-
- * advapi32.cc (DuplicateTokenEx): Coerce some initializers to avoid
- warnings from gcc 4.7.2.
- * exceptions.cc (status_info): Declare struct to use NTSTATUS.
- (cygwin_exception::dump_exception): Coerce e->ExceptionCode to
- NTSTATUS.
- * fhandler_clipboard.cc (cygnativeformat): Redefine as UINT to avoid
- gcc 4.7.2 warnings.
- (fhandler_dev_clipboard::read): Ditto.
-
-2013-01-20 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * update-copyright (update_maybe): Accommodate perl-style copyright
- comments.
-
-2013-01-20 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * update-copyright: Silently skip nonexistent files. Display filename
- on update. Don't update non-Red Hat copyrights.
-
-2013-01-20 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * update-copyright: Update standard copyright information based on cvs
- log and current sandbox status.
-
-2013-01-20 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * malloc_wrapper.cc: Change 'use_internal_malloc' to 'use_internal'
- throughout.
- (export_malloc_called): Delete.
- (internal_malloc_determined): New variable.
- (malloc_init): Control calculation of internal/external malloc based on
- 'internal_malloc_determined'. Use import_address() to determine if
- malloc in user_data is ours or not.
- * miscfuncs.cc (thread_wrapper): Make static.
- (__import_address): Define new function.
- * miscfuncs.h (import_address): New define.
- (__import_address): Declare new function.
-
-2013-01-20 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * sigproc.cc (sig_dispatch_pending): Add correct regparm attributes to
- match declaration.
- (pid_exists): Ditto.
- (proc_subproc): Ditto.
- (sig_clear): Ditto.
- (sig_send): Ditto.
- (checkstate): Ditto.
-
-2013-01-19 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (rename): Remove ill-conceived NFS workaround from
- 2013-01-10 for self-inflicted NFS server problem.
-
-2013-01-19 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * exceptions.cc (ctrl_c_handler): Remove special-case handler for
- "cygwin_finished_initializing".
- * sigproc.cc (exit_thread): Undefine ExitThread earlier to avoid
- recursion on error return.
-
-2013-01-18 Corinna Vinschen <corinna@vinschen.de>
-
- * errno.cc (errmap): Map ERROR_LOCK_VIOLATION to EBUSY.
-
-2013-01-18 Corinna Vinschen <corinna@vinschen.de>
-
- * mmap.cc (handler_disk_file::msync): Add call to FlushFileBuffers
- to implement MS_SYNC.
-
-2013-01-17 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * mmap.cc (handler_disk_file::msync): Retry up to 99 times if
- FlushViewOFile fails with ERROR_LOCK_VIOLATION.
-
-2013-01-16 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * sigproc.cc (no_signals_available): Finally remove this macro
- entirely.
- (exit_thread): Ensure process lock is released on error exit.
- (sig_send): Simplify "its_me" test. Remove no_signals_available tests.
-
-2013-01-16 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * pthread.cc (pthread_exit): Add kludge to accommodate noreturn attribute.
-
-2013-01-14 Antti Kantee <pooka@iki.fi>
-
- * include/pthread.h (pthread_exit): Mark as "noreturn".
-
-2013-01-14 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * exceptions.cc (signal_exit): Move captive process termination...
- (_cygtls::interrupt_setup): ...into here.
- (sigpacket::process): Simplify setting of handler when have_execed.
- (_cygtls::interrupt_setup): Don't call proc_subproc when we've execed.
- * globals.cc (exit_states): Delete unneeded ES_EXEC_EXIT.
- * pinfo.cc (pinfo::exit): Change debugging output. Call proc_terminate
- rather than the now-obsolete sigproc_terminate. Don't set exit_state
- to ES_EXEC_EXIT. Set exit_state to ES_FINAL later.
- * sigproc.cc (sigproc_terminate): Delete function.
- (wait_sig): Don't call proc_subproc if have_execed.
- * sigproc.h (sigproc_terminate): Delete declaration.
- * sync.h (lock_process::lock_process): Don't set exit_state to
- ES_PROCESS_LOCKED.
- (lock_process::operator LONG): Define.
-
-2013-01-11 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * DevNotes: Add entry cgf-000021.
- * select.cc (select): Unconditionally return when a signal is detected.
- (select_stuff::wait): Ditto.
-
-2013-01-11 Corinna Vinschen <corinna@vinschen.de>
-
- * syscalls.cc (rename): Drop handling paths > 32757 chars, emit EINVAL
- instead, thus simplifying code allocating and filling pfri. Drop size
- and use constant expression in NtSetInformationFile call. Add comments.
- Drop redundant test for fs_serial_number and change comment accordingly.
-
-2013-01-11 Thomas Wolff <towo@towo.net>
-
- * fhandler.h (class dev_console): Flag for expanded control sequence.
- * fhandler_console.cc (char_command): Supporting cursor style modes.
-
-2013-01-10 Corinna Vinschen <corinna@vinschen.de>
-
- * path.h (path_conv::fs_type): New method.
- * syscalls.cc (rename): Check for cross-device situation before
- touching anything. Explain why. Workaround NFS bug in call to
- NtSetInformationFile(FileRenameInformation).
-
-2013-01-09 Corinna Vinschen <corinna@vinschen.de>
-
- * cygerrno.h: Fix copyright.
- * exceptions.cc: Drop comment explaining removed variable.
-
-2013-01-09 Corinna Vinschen <corinna@vinschen.de>
-
- * dcrt0.cc (main_thread_sinit): New inline function. Fix and explain
- a stdio initialization issue.
- (dll_crt0_1): Call main_thread_sinit rather than __sinit.
-
-2013-01-07 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * thread.cc (pthread_rwlock::lookup_reader): Remove parameter: always
- assume that we're looking for the current thread.
- (pthread_rwlock::tryrdlock): Eliminate self variable. Accommodate
- change in lookup_reader().
- (pthread_rwlock::unlock): Ditto.
- (pthread_rwlock::rdlock): Ditto. Move add_reader call after writer
- tests to more closely mimic old behavior.
- (pthread_rwlock::wrlock): Accommodate change in lookup_reader().
- * thread.h ((pthread_rwlock::lookup_reader): Eliminate argument.
-
-2013-01-07 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * thread.cc (pthread_rwlock::add_reader): Perform new operation here
- and return pointer to allocated RWLOCK_READER structure.
- (pthread_rwlock::rdlock): Reorganize to reflect new add_reader
- functionality.
- (pthread_rwlock::tryrdlock): Ditto. Remove unneeded call to
- lookup_reader().
- * thread.h (pthread_rwlock::RWLOCK_READER::RWLOCK_READER): New
- constructor.
- (pthread_rwlock::add_reader): Reflect new functionality.
-
-2013-01-03 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * globals.cc (exit_states): Renumber so that ES_EXIT_STARTING is first,
- as intended.
- * sigproc.cc (wait_sig): Only stop accepting signals after
- exit_state > ES_EXIT_STARTING.
-
-2013-01-03 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * sigproc.cc (exit_thread): Set thread signal mask so that no signals
- are sent to an exiting thread.
-
-2013-01-02 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * sigproc.cc (no_signals_available): Remove exit_state test since
- signals are available in a limited fashion when exiting.
- (sig_dispatch_pending): Ditto.
- (sig_send): Ditto.
- (exit_thread): Rearrange to avoid an unnecessary DuplicateProcess when
- exiting.
- (wait_sig): Allow special signals when exiting.
-
-2013-01-02 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * DevNotes: Add entry cgf-000020, relating to previous checkin.
-
-2013-01-02 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * cygtls.h (_cygtls::signal_exit): Delete from class.
- * exception.h (cygwin_exception): New class.
- (cygwin_exception::dumpstack): Declare new function.
- (cygwin_exception::context): Ditto.
- (cygwin_exception::dump_exception): Ditto.
- * exceptions.cc (cygwin_exception::dump_exception): Move into
- cygwin_exception class. Accommodate new variable names.
- (cygwin_exception::dumpstack): Ditto stackdump -> dumpstack.
- (exception::handle): Move andreas processing earlier. Defer signal
- processing decisions to the signal thread where they belong. Pass
- exception information to sig_send via new siginfo_t si_cyg field.
- (ctrl_c_handler): Wait for SIGHUP signal to be processed since it could
- cause a process exit and we don't want races with thread exit lock.
- (signal_exit): Move back here from sigproc.cc. Modify arguments and
- remove from sigpacket class. Decide when to dump core based on signal
- type.
- (sigpacket::process): Handle exiting signals in context of threads
- rather than in the signal thread. Signal debugger on non-Windows
- signals. Remove setup_signal_exit call.
- * sigproc.cc (no_signals_available): Remove argument.
- (signal_exit_code): Delete.
- (close_my_readsig): Ditto.
- (_cygtls::signal_exit): Move to exceptions.cc.
- (sigproc_terminate): Don't attempt to terminate signal thread.
- (setup_signal_exit): Delete.
- (exit_thread): Use new si_cyg entry in siginfo_t.
- (sig_send): Just use empty initializer for si. Accommodate change in
- no_signals_available argument.
- (wait_sig): Remove attempt to "go asynchronous" on process exit.
- Delete __SIGEXIT handling. Don't ever exit.
- * sigproc.h: Remove __SIGEXIT from signal enum. Renumber.
- * include/cygwin/signal.h (siginfo_t): Add si_cyg entry.
diff --git a/winsup/cygwin/ChangeLog.64bit b/winsup/cygwin/ChangeLog.64bit
deleted file mode 100644
index 3d91c9a4c..000000000
--- a/winsup/cygwin/ChangeLog.64bit
+++ /dev/null
@@ -1,1877 +0,0 @@
-2013-04-21 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * include/stdint.h (INTPTR_MAX): Fix missing parenthesis.
-
-2013-04-13 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_tty.cc (fhandler_pty_slave::write): Change type of towrite to
- ssize_t.
- (fhandler_pty_slave::read): Ditto for totalread.
-
-2013-04-13 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (fdsock): Raise send/recv buffer sizes for x86_64. Extend
- comment.
- (cygwin_setsockopt): Fix condition and syscall_printf.
-
-2013-04-12 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base_overlapped::wait_overlapped): Fix typo in
- debug_printf.
- (fhandler_base_overlapped::raw_read): Handle size difference between
- DWORD and {s}size_t platform-independently.
- (fhandler_base_overlapped::raw_write): Ditto. Fix typo in comment.
-
-2013-04-10 Corinna Vinschen <corinna@vinschen.de>
-
- * Reinstantiate ptmalloc3.
- * configure.ac (MALLOC_OFILES): Drop here.
- * configure: Regenerate.
- * Makefile.in (MALLOC_OFILES): Set to fixed value here.
- * cygmalloc.h (HAVE_MORECORE): Define.
- * malloc.cc (init_user_mstate): Don't disable MORECORE if building
- with ONLY_MSPACES.
-
-2013-04-09 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (MINIMAL_WIN_NTFS_FLAGS): Fix comment.
-
-2013-04-08 Corinna Vinschen <corinna@vinschen.de>
-
- * Throughout fix -Wextra warnings. Ignore regex files and gmon.c.
-
-2013-04-08 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::send_internal): Change type of
- local variable res to ssize_t.
- * net.cc (cygwin_sendto): Fix local variable res, containing return
- value, to be ssize_t as well.
- (cygwin_recvfrom): Ditto.
- (cygwin_recv): Ditto.
- (cygwin_send): Ditto.
- (cygwin_recvmsg): Ditto.
- (cygwin_sendmsg): Ditto.
- * syscalls.cc (write): Ditto.
- (writev): Ditto.
- * pipe.cc (fhandler_pipe::open): Fix type when reading handle value to
- accommodate 32 bit compiler.
-
-2013-04-08 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::get_proc_fd_name): Use %lu as
- format specifier to match HANDLE size.
- * net.cc (cygwin_sendto): Fix return type to be ssize_t. Change
- syscall_printf return type format specifier to %lR.
- (cygwin_recvfrom): Ditto.
- (cygwin_recv): Ditto.
- (cygwin_send): Ditto.
- (cygwin_recvmsg): Ditto.
- (cygwin_sendmsg): Ditto.
- * smallprint.cc (__small_vsprintf): Handle `l' for %R, too.
- (__small_vswprintf): Ditto.
- * syscalls.cc (read): Change syscall_printf return type format specifier
- to %lR.
- (readv): Ditto.
- (pread): Ditto.
- (write): Ditto.
- (writev): Ditto.
- (pwrite): Ditto.
- (lseek64): Enhance comment.
-
-2013-04-08 Corinna Vinschen <corinna@vinschen.de>
-
- * pipe.cc (fhandler_pipe::open): Fix format specifier and type when
- reading handle value.
- (fhandler_pipe::get_proc_fd_name): Use same format specifier as in
- fhandler_pipe::open.
-
-2013-04-06 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.cc (_csbrk): Move down in file, right in front of _cmalloc.
-
-2013-04-04 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.h (struct _cmalloc_entry): Define b as unsigned rather than
- DWORD.
- (NBUCKETS): Define here as constant value.
- (struct init_cygheap): Add bucket_val member. Define size of bucket_val
- and buckets using NBUCKETS.
- * cygheap.cc (NBUCKETS): Drop definition here.
- (cygheap_init): Initialize cygheap->bucket_val. Add comment to explain
- what we do and why.
- (_cmalloc): Simplify bit bucket search using cygheap->bucket_val. Drop
- local variable sz. Fetch size of block from cygheap->bucket_val.
- (_cfree): Define b as unsigned.
- (_crealloc): Fetch size of block from cygheap->bucket_val.
-
-2013-04-02 ÐлекÑей Павлов <alexpux@gmail.com>
-
- * fhandler_disk_file.cc (fhandler_disk_file::ftruncate): Add missed
- ampersand.
-
-2013-03-30 Corinna Vinschen <corinna@vinschen.de>
-
- * lc_msg.h: Regenerate from F18 glibc 2.16-28. In the first place this
- fixes fi_FI and adds ta_LK (new in Windows 8).
- * nlsfuncs.cc (LocaleNameToLCID): Drop unneeded declaration.
-
-2013-03-29 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc: Drop old comment.
- * hookapi.cc (PEHeaderFromHModule): Return PIMAGE_NT_HEADERS.
- (rvadelta): Convert to function and merge in rvadelta_get.
- (remap): New function to have code for remapping big executables
- only once.
- (find_first_notloaded_dll): Simplify. Don't handle different
- architecture at all. Call remap.
- (hook_or_detect_cygwin): Ditto.
-
-2013-03-28 Kai Tietz <ktietz@redhat.com>
-
- * include/cygwin/config.h (___getreent): Harden against aggressive
- compiler optimization.
-
-2013-03-28 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin64.din: Reinstantiate definition of __srget and __srget_r.
-
-2013-03-28 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in ($(LIB_NAME)): Make sure to rebuild when cygwin.def file
- has been changed.
- * cygwin64.din: Remove more underscored symbols.
- (getdelim): Add missing define in favor of unneeded __getline.
- (getline): Ditto.
-
-2013-03-27 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_console.cc
- (fhandler_console::create_invisible_console_workaround): Fix comment.
- * wincap.cc: Throughout, remove unused has_console_handle_problem
- wincapc members.
- * wincap.h (struct wincaps): Remove has_console_handle_problem.
-
-2013-03-27 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (cygwin_gethostbyname): Revert accidental checkin of change
- added for debugging.
-
-2013-03-27 Corinna Vinschen <corinna@vinschen.de>
-
- * net.cc (struct win64_servent): Define for x86_64. Explain why.
- (WIN_SERVENT): Define for all targets.
- (dup_ent): Use WIN_SERVENT to access critical servent members
- throughout.
-
-2013-03-27 Corinna Vinschen <corinna@vinschen.de>
-
- * sysconf.cc (sca): Change build environment values according to
- architecture.
- (csa): Ditto.
-
-2013-03-27 Corinna Vinschen <corinna@vinschen.de>
-
- * ntdll.h (STATUS_NETWORK_OPEN_RESTRICTION): Define.
- (STATUS_SYMLINK_CLASS_DISABLED): Define.
- * path.cc (symlink_info::check): Handle STATUS_NETWORK_OPEN_RESTRICTION
- and STATUS_SYMLINK_CLASS_DISABLED status codes. Explain why.
-
-2013-03-22 Kai Tietz <ktietz@redhat.com>
-
- * gendef: Use pause instead of calling yield throughout in x86_64 code.
-
-2013-03-20 Ken Brown <kbrown@cornell.edu>
-
- * include/sys/resource.h (RLIM_INFINITY): Define wordsize agnostic.
-
-2013-03-20 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * lib/_cygwin_crt0_common.cc: Fix mangled operator new names for x86_64.
-
-2013-03-19 Corinna Vinschen <corinna@vinschen.de>
-
- * exceptions.cc (stack_info::init): Don't attempt to dereference NULL
- framep.
- (exception::handle): On x86_64, if Rbp is NULL, use Rsp as frame
- pointer.
-
-2013-03-19 Corinna Vinschen <corinna@vinschen.de>
-
- * gendef (sigdelayed): Make sure to align the stack since sigdelayed
- can be called with or without aligned stack. Save and restore all
- CPU registers.
-
-2013-03-18 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.sc.in: Fix comment.
- * dcrt0.cc (child_info_fork::handle_fork): Revert patch from 2013-03-15.
-
-2013-03-17 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin64.din (strlwr): Export.
-
-2013-03-15 Corinna Vinschen <corinna@vinschen.de>
-
- * Revert previous patch. For some reason perl doesn't like it.
-
-2013-03-15 Corinna Vinschen <corinna@vinschen.de>
-
- * cygtls.h (CYGTLS_PADSIZE): Reduce to 8000 on x86_64.
- * tlsoffsets64.h: Regenerate.
-
-2013-03-15 Corinna Vinschen <corinna@vinschen.de>
-
- * dcrt0.cc (child_info_fork::handle_fork): Call
- _pei386_runtime_relocator first thing, before copying parent data and
- bss segment. Tweak comment to explain why.
-
-2013-03-15 Corinna Vinschen <corinna@vinschen.de>
-
- * gendef (_sigfe): 16-byte align xmm0 storage and use movdqa.
- (_sigbe): Fix alignment before calling yield. Use movdqa to save and
- restore xmm0.
- (sigdelayed): Use movdqa to save and restore xmm0.
- (_ZN7_cygtls4lockEv): Change absolute values to hex.
- (stabilize_sig_stack): Ditto.
- (setjmp): Add comment to explain usage of movdqu.
- (__sjfault): Ditto.
- (__ljfault): Ditto.
- (longjmp): Ditto. Access return value using 32 bit opcodes only.
- * miscfuncs.cc (thread_wrapper): Don't attempt to copy exception
- handler list on x86_64.
-
-2013-03-15 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (.#dllname_info): Call _std_dll_init on x86_64 bit, too.
- (INIT_WRAPPER): Change to accommodate the change of the init functions
- from sysv_abit to ms_abi. Fix preceeding comment accordingly. Add
- SEH information and comments.
- (std_dll_init): Drop leading underscore on x86_64. Drop sysv_abi
- comment.
- (wsock_init): Ditto.
- (LoadDLLprime): Drop surrounding ifdef to accommodate above underscore
- juggling.
-
-2013-03-15 Corinna Vinschen <corinna@vinschen.de>
-
- * gendef (_sigfe): Save float arguments as well before calling yield.
- (_sigbe): Move saving %rax from prologue to just before the yield call.
- Save %xmm0 register, too.
- (sigdelayed): Add comment. Save %xmm0 register, too, before calling
- yield.
-
-2013-03-14 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_tty.cc (fhandler_pty_master::setup): Add
- PIPE_REJECT_REMOTE_CLIENTS to pipe mode on systems supporting it. Add
- FILE_FLAG_FIRST_PIPE_INSTANCE to pipe open mode.
- * pipe.cc (fhandler_pipe::create): Ditto. Fix subsequent comment
- accordingly.
- * wincap.h (wincaps::has_pipe_reject_remote_clients): New element.
- * wincap.cc: Implement above element throughout.
- * winlean.h (PIPE_REJECT_REMOTE_CLIENTS): Temporarily define until
- Mingw64 headers define it.
-
-2013-03-14 Corinna Vinschen <corinna@vinschen.de>
-
- Remove more old cruft. Remove Windows NT4 and 2000 from comments
- throughout, unless it still makes sense.
- * dlfcn.cc (dlopen): Drop W2K-only code to make loaded DLL persistent.
- * fhandler_floppy.cc (fhandler_dev_floppy::get_drive_info): Drop code
- trying to use information from NtQueryVolumeInformationFile.
- * fhandler_socket.cc (fhandler_socket::close): Drop code snippet
- disabled since 2008.
- * mount.cc (MINIMAL_WIN_NTFS_FLAGS): Add flag values set on all
- NTFS since Windows XP.
- (get_volume_path_names_for_volume_name): Remove.
- (dos_drive_mappings::dos_drive_mappings): Call Win32 function
- GetVolumePathNamesForVolumeNameW directly.
- * path.cc (file_get_fnoi): Drop test for NT4-only return code.
- * sched.cc: Add FIXME to global comment. Reformat comments throughout.
- * spawn.cc (child_info_spawn::worker): Just call official IsProcessInJob
- function rather than to test undocumented TEB member.
- * winlean.h: Drop Mingw32-related defines.
- * include/limits.h (PTHREAD_KEYS_MAX): Raise value to reflect minimum
- value available on XP and later.
-
-2013-03-13 Corinna Vinschen <corinna@vinschen.de>
-
- * Revert to old malloc.
- * mmap.cc (MMAP_STORAGE_LOW): Set higher. Add comment.
- (MMAP_STORAGE_HIGH): Add comment.
- (class mmap_allocator): Change comment. Add mmap_current_low member.
- (mmap_allocator::mmap_allocator): Define default constructor.
- (mmap_allocator::alloc): Change to a round-robin mechanism. Add or
- change comments accordingly.
-
-2013-03-13 Kai Tietz <ktietz@redhat.com>
- Corinna Vinschen <corinna@vinschen.de>
-
- * gendef (_sigfe): Save arguments before calling yield so they don't
- get clobbered. Explain why.
-
-2013-03-12 Ken Brown <kbrown@cornell.edu>
-
- * include/a.out.h: Fix up for x86_64.
-
-2013-03-12 Corinna Vinschen <corinna@vinschen.de>
-
- * smallprint.cc (rnarg): Fix cast to print negative values correctly.
-
-2013-03-11 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::raw_read): Replace accidentally left in
- Win32 error codes with equivalent status codes.
-
-2013-03-11 Corinna Vinschen <corinna@vinschen.de>
-
- * cygmalloc.h: Include regparm.h rather than defining __reg{1,2,3} here.
- * ptmalloc3.cc (__malloc_initialized): Define as type LONG on Cygwin
- and include windows.h.
- (ptmalloc_init): Set __malloc_initialized on Cygwin using
- InterlockedCompareExchange and carefully check for concurrency
- situation.
-
-2013-03-11 Corinna Vinschen <corinna@vinschen.de>
-
- * gendef: Add SEH information to sigfe entry points, as well as to
- _sigfe and _sigbe.
-
-2013-03-07 Corinna Vinschen <corinna@vinschen.de>
-
- * heap.cc (heap_init): Fix setting reserved_size value when using
- ptmalloc3 to avoid too much pagefile pressure at fork time.
-
-2013-03-05 Corinna Vinschen <corinna@vinschen.de>
-
- For x86_64 target:
- * dll_init.cc (dll::init): Don't set p.envptr.
- (update_envptrs): Disable entirely.
- * dll_init.h (struct per_module): Disable envptr.
- * environ.h (update_envptrs): Change to empty macro.
-
-2013-03-05 Corinna Vinschen <corinna@vinschen.de>
-
- For x86_64 target:
- * Makefile.in (COMMON_CFLAGS): Add -mcmodel=small to create smaller
- footprint.
- * cygwin64.din (__cygwin_environ): Drop export. Only export environ
- as alias to __cygwin_environ.
- * dcrt0.cc (dll_crt0_1): Call main with __cygwin_environ as parameter.
- (_dll_crt0): Don't set main_environ.
- (cygwin_dll_init): Don't create local variable envp and don't set
- user_data->envptr.
- * dll_init.cc (dll_list::alloc): Don't assert.
- * dll_init.h (per_module::operator =): Don't set envptr.
- * environ.cc (cur_environ): Disable.
- * environ.h (main_environ): Don't define.
- (cur_environ): Change to macro.
- * globals.cc (main_environ): Don't initialize.
- (struct per_process): Drop envptr.
- * perprocess.h (SIZEOF_PER_PROCESS): Set to 41*8 to accommodate size
- change of struct per_process.
- * include/sys/cygwin.h (struct per_process): Drop envptr.
- * lib/_cygwin_crt0_common.cc (environ): Drop declaration.
- (_cygwin_crt0_common): Don't set u->envptr.
-
-2013-03-04 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * cygwin64.din: Fix mangled operator new names for size_t==long.
- * libstdcxx_wrapper.cc: Ditto for x86_64.
-
-2013-03-01 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (AttachConsole): Remove.
- (GetModuleHandleExW): Remove.
- (GetSystemWow64DirectoryW): Remove.
- (GetVolumePathNamesForVolumeNameW): Remove.
- * exceptions.cc (cygwin_stackdump): Always call RtlCaptureContext.
- (exception::handle): Drop accidentally left in debugging statement.
- Always call RtlCaptureContext.
- (sigpacket::process): Always call RtlCaptureContext for current thread.
- * fhandler_disk_file.cc (fstatvfs): Drop code using
- FileFsSizeInformation.
- (struct __DIR_cache): Remove comment.
- (fhandler_disk_file::rewinddir): Drop W2K-only code.
- * fhandler_floppy.cc (fhandler_dev_floppy::get_drive_info): Don't
- check for old OS. Extend a comment.
- * fhandler_mem.cc (fhandler_dev_mem::open): Drop NT4 and W2K from
- debug output.
- * fhandler_proc.cc (format_proc_partitions): Drop Pre-XP considerations.
- * fhandler_procnet.cc (fhandler_procnet::exists): Ditto.
- (fhandler_procnet::readdir): Ditto.
- (format_procnet_ifinet6): Ditto.
- * fhandler_socket.cc (fhandler_socket::recvmsg): Ditto.
- * fhandler_tape.cc (mtinfo_drive::get_status): Ditto.
- * init.cc (dll_entry): Drop W2K-only code.
- * net.cc (get_ifs): Rename from get_xp_ifs.
- (get_2k_ifs): Remove.
- (getifaddrs): Always call get_ifs.
- (get_ifconf): Ditto.
- (if_nametoindex): Drop Pre-XP considerations.
- (load_ipv6_funcs): Ditto. Fix preceeding comment.
- * sec_auth.cc (lsaauth): Drop code handling fake_login_sid.
- * sec_helper.cc (fake_logon_sid): Remove.
- (set_cygwin_privileges): Fix uncommented statement to drop pre-XP
- considerations.
- * security.h (fake_logon_sid): Drop declaration.
- * shared.cc (shared_info::init_obcaseinsensitive): Drop W2K-only code.
- * wincap.cc: Throughout, remove setting all deprecated wincapc members.
- (wincap_minimal): Set to wincap_xpsp2.
- (wincap_2000): Remove.
- (wincap_2000sp4): Remove.
- (wincap_xp): Remove.
- (wincap_xpsp1): Remove.
- (wincapc::init): Drop OS 5.0 and pre-SP2 XP.
- * wincap.h (struct wincaps): Remove the following members:
- has_create_global_privilege, has_ioctl_storage_get_media_types_ex,
- has_disk_ex_ioctls, has_buggy_restart_scan, needs_logon_sid_in_sid_list,
- has_gaa_prefixes, has_recvmsg, has_stack_size_param_is_a_reservation,
- kernel_is_always_casesensitive, has_rtl_capture_context.
-
-2013-03-01 Corinna Vinschen <corinna@vinschen.de>
-
- * exceptions.cc (rtl_unwind): Convert to macro doing nothing on x86_64.
- (exception::handle): Drop creating frame variable on x86_64.
- * wincap.cc (wincap_2000sp4): Set has_rtl_capture_context to false.
-
-2013-03-01 Corinna Vinschen <corinna@vinschen.de>
-
- * cygserver.h (struct header_t): Revert msglen to simple member.
- Drop accessor methods.
- * cygserver_ipc.h (struct proc): Drop enforced 4 byte struct packing.
- Remove members for 64<->32 bit IPC. Revert to original member order.
- (ipc_set_proc_info): Remove 64<->32 handling.
- (conv_timespec32_to_timespec): Delete.
- (conv_timespec_to_timespec32): Delete.
- * pinfo.h (struct win_heap_info): Remove.
- * shm.cc (fixup_shms_after_fork): Revert parent initialization.
- * winlean.h: Remove _TYPE64_CLR and _TYPE64_SET macros. Remove
- usage throughout code.
- * include/cygwin/ipc.h: Drop 64<->32 bit helper structures.
- * include/cygwin/msg.h: Ditto. Drop enforced 4 byte struct packing.
- * include/cygwin/sem.h: Ditto.
- * include/cygwin/shm.h: Ditto.
- * include/cygwin/sysproto.h: Drop enforced 4 byte struct packing.
-
-2013-02-28 Corinna Vinschen <corinna@vinschen.de>
-
- * pseudo-reloc.cc (do_pseudo_reloc): Add test to check for invalid 32
- bit relocation in 64 bit code. Only test when building without
- optimization.
-
-2013-02-28 Corinna Vinschen <corinna@vinschen.de>
-
- * exceptions.cc (_cygtls::signal_debugger): Raise size of sigmsg buffer
- on x86_64.
- * tlsoffsets64.h: Regenerate.
-
-2013-02-27 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/signal.h (struct ucontext): Add missing fields from
- Windows CONTEXT definition. Define oldmask as 64 bit type.
-
--- post-ptmalloc3 tag
-
-2013-02-27 Corinna Vinschen <corinna@vinschen.de>
-
- * configure.ac (MALLOC_OFILES): Add ptmalloc3.o.
- * configure: Regenerate.
- * cygmalloc.h: Declare pt* functions rather than dl* functions.
- (mmap64): Declare.
- (mmap): Define as mmap64.
- (__malloc_lock): Drop macro.
- (__malloc_unlock): Ditto.
- (MSPACES): Define.
- (ONLY_MSPACES): Define.
- * debug.h: Include malloc.h rather than otherwise unused dlmalloc.h.
- * fork.cc (frok::parent): Drop malloc locking since that's performed
- by malloc_atfork now.
- * heap.cc (heap_init): Accommodate the fact that there's a chance
- that no heap space has been allocated at fork time.
- * malloc-private.h: New file from ptmalloc3, having malloc-machine.h
- and malloc-2.8.3.h folded in.
- * malloc.cc: Replaced by new file from ptmalloc3.
- * malloc_wrapper.cc: Throughout, remove malloc locks and call pt*
- functions rather than dl* functions.
- * pinfo.cc (winpids::set): Drop malloc locking.
- * ptmalloc3.cc: New file from ptmalloc3.
-
--- pre-ptmalloc3 tag
-
-2013-02-26 Corinna Vinschen <corinna@vinschen.de>
-
- * exception.h (_except_list): Don't define on x86_64.
- (class exception): Don't define members el and save on x86_64.
- (exception::~exception): Don't define on x86_64.
- * exceptions.cc (signal_exit): Fix typo in condition.
-
-2013-02-25 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin64.din: Remove all deprecated cygwin32_foo and cygwin_foo
- path conversion functions.
- * path.cc: Disable aforementioned functions on x86_64.
- * include/sys/cygwin.h: Don't declare aforementioned functions on
- x86_64.
-
-2013-02-25 Corinna Vinschen <corinna@vinschen.de>
-
- * exception.h (class exception): Add handler_installed member.
- Change parameters to handle method to match high-level exception
- handler calls.
- (exception::exception): On x86_64, install exception handler only
- once. Explain what we do.
- * exceptions.cc (_AFMT): Change to only 11 digits on x86_64.
- (cygwin_exception::dump_exception): Print Rip with only 11 digits.
- Print 64 bit registers with 0-padding.
- (class stack_info): Add members c and hist on x86_64.
- (stack_info::init): Take PCONTEXT rather than bool as third parameter.
- Tweak code accordingly. Initialize c and hist on x86_64.
- (stack_info::walk): Add implementation for x86_64. Drop unneeded
- #ifndef in 32 bit code.
- (cygwin_exception::dumpstack): Call thestack.init with context as
- parameter. Change header output for x86_64.
- (cygwin_stackdump): Prefer RtlCaptureContext over GetThreadContext.
- (CYG_EXC_CONTINUE_EXECUTION): Define generic definition matching all
- platforms.
- (CYG_EXC_CONTINUE_SEARCH): Ditto.
- (exception::handler_installed): Define here.
- (exception::handle): Define according to declaration in exception.h.
- Create 32 bit parameters as local variable on 64 bit. Change all
- return statements to use generic definitions. Simplify setting framep
- on x86_64. Disable setting frame-based exception handler on x86_64.
- Fix formatting of klog output for x86_64.
- (signal_exit): Create context for cygwin_exception creation.
- (sigpacket::process): Prefer RtlCaptureContext over GetThreadContext.
- * wincap.h (wincaps::has_rtl_capture_context): New element.
- * wincap.cc: Implement above element throughout.
-
-2013-02-22 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
- Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.din (_get_osfhandle): Make main export. Define get_osfhandle
- from here.
- * cygwin64.din (_get_osfhandle): Rename from get_osfhandle.
- (_setmode): Rename from setmode.
- * include/io.h: Ditto. Define unprefixed names with preprocessor
- macros for backwards source compatibility.
- (access): Remove.
- * syscalls.cc (_setmode): Rename from setmode.
- (cygwin_setmode): Call _setmode.
- (_get_osfhandle): Rename from get_osfhandle.
-
-2013-02-11 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (target_cpu): Define. Check for target_cpu rather than
- target_alias for conditional compilation issues.
- (toolopts): Change --target into --cpu option and use $target_cpu as
- argument.
- ($(DEF_FILE)): Call gendef with $(target_cpu) as argument, rather than
- with $(target_alias).
- * gendef: Accommodate change from --target to --cpu option.
- * mkimport: Ditto.
- * speclib: Ditto.
-
-2013-02-20 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * cygserver_ipc (class ipc_retval): Add ssize_t member to anonymous
- union.
- (ipc_retval::operator =): Add ssize_t variant for x86_64.
- * fhandler_floppy.cc (fhandler_dev_floppy::raw_write): Change return
- type to ssize_t to match fhandler.h.
- * fhandler_socket.cc (fhandler_socket::readv): Ditto.
- (fhandler_socket::write): Ditto.
- (fhandler_socket::writev): Ditto.
- (fhandler_socket::sendmsg): Ditto.
-
-2013-02-18 Corinna Vinschen <corinna@vinschen.de>
-
- * localtime.cc: Add comment.
-
-2013-02-18 Corinna Vinschen <corinna@vinschen.de>
-
- * localtime.cc: Throughout, pull up to latest code from NetBSD.
-
-2013-02-18 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler.cc (fhandler_base::raw_read): Rearrange code to use
- NtReadFile and to fix problem using pointer to wrongly sized variable
- on x86_64.
- (fhandler_base::read): Drop redundant code.
- * fhandler_disk_file.cc (fhandler_disk_file::pread): Fix function
- to not read the information twice. Handle STATUS_END_OF_FILE.
-
-2013-02-17 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * Makefile.in (libcygwin.a): Move --target flag from here...
- (toolopts): to here, to be used by both mkimport and speclib.
- * speclib: Omit leading underscore in symbol names on x86_64.
-
-2013-02-17 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.sc.in (.gnu_debuglink_overlay): Drop "64" in dbg file name.
-
-2013-02-16 Corinna Vinschen <corinna@vinschen.de>
-
- * nfs.h: Make sure packing of NFS fattr3 struct is 4 byte.
- (struct nfs_timestruc_t): Define.
- (struct fattr3): Define timestamps as type struct nfs_timestruc_t.
- * fhandler_disk_file.cc (fhandler_base::fstat_by_nfs_ea): Copy
- each timestruc_t component separately to accommodate different size.
-
-2013-02-15 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (toollibdir): Remove. Revert to using tooldir instead.
- * configure.ac (DLL_NAME): Set to cygwin1.dll in x86_64 case, too.
- * configure: Regenerate.
- * cygwin.sc.in (SEARCH_DIR): Align to 32 bit search dir, use lib, rather
- than lib64.
- * cygwin64.din (LIBRARY): Set name to cygwin1.dll.
- * fhandler_process.cc (struct heap_info): Drop win_heap_info class
- and revert code to former heap_info implementation.
- (format_process_maps): Define heaps back to heap_info
- * hookapi.cc (hook_or_detect_cygwin): Add shortcut so the code does
- not search executable for being a Cygwin executable, if the architecture
- is not matching the current Cygwin. Always use for "cygwin1.dll".
- * pinfo.cc (commune_process): Drop PICOM_HEAP_INFO code.
- (_pinfo::commune_request): Ditto.
- (_pinfo::win_heap_info): Remove.
- * pinfo.h (enum picom): Remove PICOM_HEAP_INFO.
-
-2013-02-14 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (two_addr_t): Use __uint64_t as type for the i686
- version, analogue to __uint128_t for x86_64.
- (INIT_WRAPPER): New x86_64 macro to install a sysv_abi function wrapper
- for the DLL init functions. Add long comment to explain why this is
- necessary. Create wrapper for std_dll_init and wsock_init.
- (std_dll_init): Rename with leading underscore on x86_64 and take
- calling function as argument. Disable overwriting return address on
- stack for x86_64.
- (wsock_init): Ditto.
-
-2013-02-13 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (toollibdir): Define build and target dependent.
- (install-libs): Use $(toollibdir) rather than $(tooldir)/lib.
- (uninstall-libs): Ditto.
- (uninstall-man): Use $(DESTDIR)$(mandir) as in install-man, rather
- than $(tooldir)/man.
-
-2013-02-12 Corinna Vinschen <corinna@vinschen.de>
-
- * heap.cc (eval_start_address): Move heap to 0x6:00000000. Change
- comment to explain why.
- * mmap.cc (MMAP_STORAGE_LOW): Accommodate above change.
-
-2013-02-12 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_floppy.cc (fhandler_dev_floppy::open): Cast second parameter
- in roundup2 to same size as first parameter to make sure mask size is
- correct.
- * fhandler_process.cc (format_process_maps): Ditto.
- * fhandler_raw.cc (fhandler_dev_raw::dup): Ditto.
- * hookapi.cc (find_first_notloaded_dll): Add cast.
- * spawn.cc (av::fixup): Ditto.
- * wincap.h: Add comment to explain the following change.
- (wincapc::page_size): Return size_t.
- (wincapc::allocation_granularity): Ditto.
-
- * mmap.cc: Throughout, accommodate the fact that AT_ROUND_TO_PAGE isn't
- support on 64 bit at all.
- (class mmap_allocator): New class to allocate mmap slots on x86_64.
- (mmap_alloc): Define global instant of mmap_allocator.
- (mmap64): Call mmap_alloc.alloc on x86_64.
-
-2013-02-11 Corinna Vinschen <corinna@vinschen.de>
-
- * gendef (longjmp): Fix indirect addressing in x86_64 setjmp.
-
-2013-02-11 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin64.din: Add missing symbols.
- * mkimport: Make sure to use and test against platform dependent
- "imp" prefix.
-
-2013-02-09 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.sc.in (.rdata): Add .rdata_cygwin_nocopy subsection.
- (.cygheap): Raise size to 3 Megs on x86_64.
- * dcrt0.cc (dll_crt0_0): Drop call to init_global_security.
- * dtable.cc (std_consts): Drop NO_COPY.
- * errno.cc (errmap): Drop NO_COPY, constify instead.
- (_sys_errlist): Drop NO_COPY.
- * fhandler_clipboard.cc (CYGWIN_NATIVE): Ditto.
- * fhandler_console.cc (keytable): Drop NO_COPY, constify instead.
- * grp.cc (null_ptr): Make NO_COPY_RO.
- * heap.cc (eval_start_address): Fix comment.
- * localtime.cc (wildabbr): Make NO_COPY_RO.
- (gmt): Ditto.
- * miscfuncs.cc (case_folded_lower): Drop NO_COPY.
- (case_folded_upper): Ditto.
- (isalpha_array): Ditto.
- (nice_to_winprio): Ditto for priority.
- (class thread_allocator): New class to allocate thread stack on x86_64.
- (thr_alloc): Define global NO_COPY instant of thread_allocator.
- (CygwinCreateThread): Call thr_alloc.alloc on x86_64 to reserve stack.
- * net.cc (errmap): Drop NO_COPY, constify instead.
- (host_errmap): Ditto.
- * netdb.cc (SPACE): Drop NO_COPY.
- * sec_helper.cc (null_sdp): Static NO_COPY_RO definition of null SD.
- (sec_none): Define NO_COPY_RO, define content statically.
- (sec_none_nih): Ditto.
- (sec_all): Ditto.
- (sec_all_nih): Ditto.
- (get_null_sd): Remove.
- (init_global_security): Remove.
- * security.cc (file_mapping): Define NO_COPY_RO.
- (check_registry_access): Ditto for reg_mapping.
- * spawn.cc (exe_suffixes): Drop NO_COPY, constify instead.
- (dll_suffixes): Drop unused, disabled definition and comment.
- * strsig.cc (sys_sigabbrev): Drop NO_COPY_INIT.
- (sys_siglist): Ditto.
- * syscalls.cc (def_shells): Drop NO_COPY.
- * winsup.h (NO_COPY_RO): Define to place variable in
- .rdata_cygwin_nocopy section.
- (init_global_security): Drop declaration.
-
-2013-02-09 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_process.cc (win_heap_info::~win_heap_info): Only try to free
- heap_vm_chunks if it's not NULL.
- * pinfo.h (struct commune_result): Change type of n to DWORD.
- * pinfo.cc (_pinfo::commune_request): Change type of n to DWORD to
- fix subsequent sizeof test after reading from commune pipe on x86_64.
- Raise read timeout to match write timeout.
-
-2013-02-09 Corinna Vinschen <corinna@vinschen.de>
-
- * cygserver_ipc.h (ipc_retval::operator =): Disable size_t variant
- on x86_64 since type is identical to vm_offset_t.
-
-2013-02-08 Corinna Vinschen <corinna@vinschen.de>
-
- * regparm.h: New file to define platform dependent regparm attributes.
- Define all of them empty if __CYGMAGIC__ is defined.
- * cygerrno.h: Include regparm.h instead of defining _reg[123] here.
- * winsup.h: Ditto.
- * cygmagic: Define __CYGMAGIC__ to help generate same result on all
- platforms.
-
-2013-02-08 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin64.din (BASE): Set to 0x180040000.
- (_fe_dfl_env): Remove useless symbol.
- (_fe_nomask_env): Remove useless symbol.
- (exit): Add missing symbol.
- (setmode): Ditto.
- * gendef (longjmp): Convert all displacements to hex for readability.
- Change all movaps instructions to movdqu to accommodate unaligned
- access to 128 bit values.
-
-2013-02-05 Corinna Vinschen <corinna@vinschen.de>
-
- * pseudo-reloc.cc (do_pseudo_reloc): Enable 64 bit code for x86_64
- Cygwin.
-
-2013-02-05 Corinna Vinschen <corinna@vinschen.de>
-
- * miscfuncs.cc (RtlFillMemory): Declare.
- (RtlCopyMemory): Declare.
- (memset): Just call RtlFillMemory.
- (memcpy): Just call RtlCopyMemory.
- * mmap.cc (class mmap_record): Drop enforced packing. Reorder members
- to allow tight packing on 32 as well as on 64 bit.
- * include/sys/dirent.h: Don't enforced structure packing on x86_64.
- (__DIRENT_COOKIE): Use different value on 64 bit.
-
-2013-02-04 Corinna Vinschen <corinna@vinschen.de>
-
- * gendef (fefunc): Fix incorrect pc-relative jmp instruction.
- (_sigfe): Fix offset to return address on stack. Add and fix comments.
- (_sigbe): Fix stack alignment when creating spill area for call to
- yield. Add and fix comments.
- (sigdelayed): Add fake push to make sure stack is aligned correctly.
- Use fake stack alignment on exit to store return address and call ret,
- rather than jmp. Fix comments.
- (_cygtls::lock): Only create and destroy spill area when really calling
- yield.
-
-2013-02-04 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (LoadDLLfuncEx3): Adjust address computation required
- by latest change to the 64 bit code.
- * cygmalloc.h (MALLOC_ALIGNMENT): Set to 16 on x86_64.
- * cygtls.h: Set struct alignment to 8 on x86_64. Move inclusion of
- other header files outside of alignment-enforced code area. Drop
- inclusion of security.h entirely.
- (_cygtls::get_signal_arrived): Use NULL SECURITY_ATTRIBUTES rather than
- &sec_none_nih.
- * gendef (_cygtls::lock): Fix stack alignment.
- * heap.cc (page_const): Change type to ptrdiff_t, otherwise negation
- operator in pround creates broken bitmask.
- * shared.cc (page_const): Add cast to ptrdiff_t.
- * tlsoffsets64.h: Regenerate.
-
-2013-01-30 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in ($(LIB_NAME)): Add --target option to mkimport call.
- * gendef: Drop -w option. Make callto sigfe function pc-relative
- on x86_64.
- * miscfuncs.cc (__import_address): Drop comment and misguide attempt
- to handle absolute addressing in x86_64 mode.
- * mkimport: Add --target option. Handle x86_64 target, especially
- create pc-relative jmp calls.
-
-2013-01-29 Corinna Vinschen <corinna@vinschen.de>
-
- * cygtls.h: Cleanup x86_64 related comment.
- (_tlsbase): Change return type to PVOID.
- (_tlstop): Ditto.
- (_my_tls): Accommodate above change.
- * dcrt0.cc (child_info_fork::alloc_stack): Revert previous patch, but
- keep cast to PVOID.
- (dll_crt0_1): Ditto.
- * exception.h: Define _exception_list as _EXCEPTION_REGISTRATION_RECORD
- on x86_64.
- (_except_list): Define in terms of NtCurrentTeb() on x86_64.
- * miscfuncs.cc (__import_address): Handle 32 bit absolute addressing
- in IAT on x86_64.
- * include/cygwin/config.h (___getreent): New inline function on
- x86_64. Define __getreent in terms of ___getreent on x86_64. Fix
- comment accordingly.
-
-2013-01-29 Corinna Vinschen <corinna@vinschen.de>
-
- * cygtls.h (_tlsbase): Temporary workaround for GCC bug.
- (_tlsbase): Ditto.
- * cygwin64.din: Set BASE temporariliy to address < 32 bit to workaround
- GDB bug.
- * dcrt0.cc (child_info_fork::alloc_stack): Temporary workaround for GCC
- bug.
- (dll_crt0_1): Ditto.
- * miscfuncs.cc (memset): Temporary workaround missing MSABI function in
- newlib.
- (memcpy): Ditto.
- * include/cygwin/config.h (__getreent): Drop definition for x86_64 to
- workaround GCC bug.
-
-2013-01-29 Corinna Vinschen <corinna@vinschen.de>
-
- * winbase.h (ilockcmpexch): Define always.
- (InterlockedCompareExchange): Ditto.
- (ilockcmpexch64): Define for x86_64.
- (InterlockedCompareExchange64): Ditto.
- (InterlockedCompareExchangePointer): Define in terms of
- InterlockedCompareExchange64 on x86_64.
-
-2013-01-29 Kai Tietz <ktietz@redhat.com>
-
- * cygwin.sc.in: Fix ctors and dtors filler and zero-terminator for
- 64 bit.
-
-2013-01-29 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (TEST_DLL_NAME): Fix to use correct name per target.
- * gendef (fefunc): Resurrect accidentally dropped 32 bit code.
-
-2013-01-29 Corinna Vinschen <corinna@vinschen.de>
-
- * heap.cc (eval_start_address): Change address and comment for 64 bit.
- (eval_initial_heap_size): Change return type to SIZE_T. Use different
- values for 64 bit.
-
-2013-01-28 Corinna Vinschen <corinna@vinschen.de>
-
- * gendef: Add missing setjmp/longjmp functionality, still untested.
-
-2013-01-25 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.sc.in: Accommodate extra .text, .pdata, and .xdata section on
- 64 bit.
- * cygwin64.din: Set BASE to 0x200040000 to start shared sections at
- 0x200000000.
- * gendef: Second cut 64 bit assembler functionality, still untested.
-
-2013-01-25 Kai Tietz <ktietz@redhat.com>
-
- * autoload.cc (LoadDLLfuncEx3): Adjust assembler for x64 to avoid
- relocations.
- (noload): Likewise.
-
-2013-01-23 Corinna Vinschen <corinna@vinschen.de>
-
- * gendef: First cut 64 bit assembler functionality, untested.
-
-2013-01-22 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (speclib): Exclude main symbol.
- (NEW_FUNCTIONS): Set to empty for x86_64.
- ($(DEF_FILE)): Call gendef with target_alias as additional parameter.
- * configure.ac (DLL_ENTRY): Drop leading underscore for x86_64.
- * configure: Regenerate.
- * cygwin.sc.in: Drop _SYM usage for __data_start__, __data_end__,
- __bss_start__, and __bss_end__.
- * cygwin64.din: Remove all fast-call math function entry points.
- (_alloca): Define as __alloca.
- (_dll_crt0): Drop 32 bit stdcall specifier.
- (dll_entry): Ditto.
- (dll_noncygwin_dllcrt0): Remove.
- (getpwduid): Remove.
- (lacl): Remove.
- * dcrt0.cc (dll_data_start): Define for x86_64.
- (dll_data_end): Ditto.
- (dll_bss_start): Ditto.
- (dll_bss_end): Ditto.
- * gendef: Handle new target argument. Handle 64 bit target.
- Add preliminiary empty function definitions for 64 bit to allow linking.
- * winsup.h: Define linker data and bss section symbols with
- additional underscore for x86_64.
- * lib/_cygwin_crt0_common.cc (__image_base__): Define for 64 bit and
- map to _image_base__ via macro.
- (_cygwin_crt0_common): Fix setting data and bss section borders on
- x86_64.
-
-2013-01-21 Corinna Vinschen <corinna@vinschen.de>
-
- * miscfuncs.cc (__import_address): Fix address computation for 64 bit.
-
-2013-01-19 Corinna Vinschen <corinna@vinschen.de>
-
- * dcrt0.cc (_cygwin_exit_return): Define to allow usage of same C
- symbol name independent of target.
- * perprocess.h (SIZEOF_PER_PROCESS): Define for x86_64.
- * include/sys/cygwin.h (struct per_process): Tweak definition for
- x86_64.
-
-2013-01-18 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/config.h (__SYMBOL_PREFIX): Define.
- (_SYMSTR): Define.
- * child_info.h (spawn_info): Use _SYMSTR macro to define assembler
- symbol.
- (fork_info): Ditto.
- * libstdcxx_wrapper.cc: Ditto, throughout.
- * winsup.h (dll_crt0): Ditto.
- * include/cygwin/time.h (daylight): Ditto.
- (timezone): Ditto.
- * lib/_cygwin_crt0_common.cc: Ditto, throughout.
-
-2013-01-17 Corinna Vinschen <corinna@vinschen.de>
-
- * child_info.h (spawn_info): Define asm symbol without leading
- underscore for x86_64.
- (fork_info): Ditto.
- * cygwin.sc.in (__CONCAT1): Define.
- (__CONCAT): Define.
- (_SYM): Define.
- (_data_start__): Define using _SYM macro to accommodate multiple
- platforms.
- (_data_end__): Ditto.
- (_bss_start__): Ditto.
- (_bss_end__): Ditto.
- (_cygheap_start): Ditto.
- (_cygheap_end): Ditto.
-
-2013-01-09 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/config.h (_tlsbase): Define for x86_64.
-
-2012-12-14 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.sc.in (.gnu_debuglink_overlay): Accommodate longer dbg file
- name on 64 bit.
-
-2012-12-13 Corinna Vinschen <corinna@vinschen.de>
-
- * pinfo.h (enum picom): Add PICOM_HEAP_INFO.
- (_pinfo::win_heap_info): Declare.
- (struct win_heap_info): Rename from heap_info and define here. Change
- to accommodate 64 bit.
- * fhandler_process.cc (struct win_heap_info): Just implement here.
- (win_heap_info::gen_heap_info): New method.
- (format_process_maps): Accommodate above changes. Add FIXME comment
- to explain 32->64 bit problem with VirtualQueryEx.
- * pinfo.cc (commune_process): Handle PICOM_HEAP_INFO.
- (_pinfo::commune_request): Ditto.
- (_pinfo::win_heap_info): New method.
-
-2012-12-13 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.sc.in (OUTPUT_FORMAT): Fix typo in 64 bit code.
- * spawn.cc (av::fixup): Drop '!!' to keep argument to set_cygexec a
- void *.
-
-2012-12-11 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (TLSOFFSETS_H): Let configure fill in. Change all
- occurence of tlsoffsets.h to $(TLSOFFSETS_H).
- $(srcdir)/$(TLSOFFSETS_H): Add @CONFIG_DIR@ as parameter to
- gentls_offsets so the script knows the target CPU.
- * configure.ac (TLSOFFSETS_H): Set according to target.
- * configure: Regenerate.
- * gentls_offsets: Handle x86_64 as target. Add FIXME comment. Unlink
- all temporary files.
- * tlsoffsets64.h: New file.
-
-2012-12-11 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (DLL_NAME): Let configure fill in.
- (DIN_FILE): Ditto. Change all occurence of cygwin.din to $(DIN_FILE).
- * configure.ac (DLL_NAME): Set according to target.
- (DIN_FILE): Ditto.
- * configure: Regenerate.
- * cygwin64.din: New file.
-
-2012-12-10 Corinna Vinschen <corinna@vinschen.de>
-
- * posix_ipc.cc: Enforce 4 byte alignment on all structs used in the
- message queue file.
- (struct mq_fattr): Fixed size mq_attr structure as stored in file.
- (struct mq_hdr): Change to have same size on 32 and 64 bit. Add
- mqh_magic to allow check for old message queue file.
- (struct msg_hdr): Change to have same size on 32 and 64 bit. Change
- type of mqh_attr to struct mq_fattr.
- (struct mq_info): Change to have same size on 32 and 64 bit.
- (mq_open): Add check for maximum mq_maxmsg and mq_msgsize values which
- still fit into 32 bit values. Set mqh_magic in file to MQI_MAGIC.
- Check mqh_magic value on existing file to detect old message queue file.
- (mq_getattr): Change type of local attr variable to struct mq_fattr.
- (mq_setattr): Ditto.
- (_mq_send): Ditto.
- (_mq_receive): Ditto.
- (mq_close): Ditto.
-
-2012-12-10 Corinna Vinschen <corinna@vinschen.de>
-
- * hookapi.cc (hook_or_detect_cygwin): Only check for one cygwin DLL
- file name depending on executable target type. Return value indicating
- executable target type. Change comment accordingly.
- * path.h (enum path_types): Add FIXME comment to definition of
- PATH_OPEN. Add PATH_64BITEXEC.
- (iscygexec32): New method.
- (iscygexec64): New method.
- (set_cygexec): Implement additionally with void * parameter to be able
- to set PATH_64BITEXEC if required.
-
-2012-12-10 Corinna Vinschen <corinna@vinschen.de>
-
- * Throughout, fix format string of debug printf and api_fatal calls
- to work in 32 and 64 bit environment, as well as to honor signedness.
- Use %y instead of 0x%x.
- * fhandler.h (class fhandler_dev_mem): Change type of mem_size from
- DWORD to SIZE_T.
- * fhandler_mem.cc: Throughout, cast mem_size in comparisons to make
- GCC happy.
- * fhandler_process.cc (format_process_maps): Change type of ret_len
- to SIZE_T.
- (get_mem_values): Ditto for n and length.
- * mmap.cc (MapView): Ditto for commitsize and viewsize.
- (class mmap_record): Ditto for len. Use SIZE_T througout for memory
- size in method args and return types.
- * ntdll.h (NtLockVirtualMemory): Fix type of memory size parameters
- to SIZE_T.
- (NtMapViewOfSection): Ditto.
- (NtQueryVirtualMemory): Ditto.
- (NtUnlockVirtualMemory): Ditto.
- (RtlFreeHeap): Change type of first parameter to HANDLE.
- * shm.cc (shmat): Change type of viewsize to SIZE_T.
- * timer.cc (timer_thread): Change type of sleep_ms to LONG.
- (ualarm): Drop casts to unsigned int in timer value computation.
-
-2012-12-06 Corinna Vinschen <corinna@vinschen.de>
-
- * cygserver_ipc.h (conv_timespec32_to_timespec): Implement here.
- (conv_timespec_to_timespec32): Ditto.
- * include/cygwin/ipc.h (struct _ts32): Define here.
- * include/cygwin/msg.h: Enforce 4 byte alignment on all structs.
- (struct _ts32): Move definition to include/cygwin/ipc.h.
- (struct _msqid_ds32): Drop member comments.
- * include/cygwin/sem.h: Enforce 4 byte alignment on all structs.
- (struct _semid_ds32): Define on 64 bit in _KERNEL mode.
- * include/cygwin/shm.h: Enforce 4 byte alignment on all structs.
- (struct _shmid_ds32): Define on 64 bit in _KERNEL mode.
- (struct shminfo): Enhance coment on shmall member.
- (struct shm_info): Convert type of all members to int32_t.
- * include/cygwin/sysproto.h (struct semctl_args): Change definition to
- use the same structure on 32 and 64 bit.
- (struct semop_args): Ditto.
- (struct shmat_args): Ditto.
- (struct shmctl_args): Ditto.
- (struct shmdt_args): Ditto.
- (struct shmget_args): Ditto.
-
-2012-12-05 Corinna Vinschen <corinna@vinschen.de>
-
- * cygserver.h (struct client_request::header_t): Change definition of
- msglen to use the same structure on 32 and 64 bit. Add read and write
- accessors. Change type of error_code to int.
- (class client_request): Align accessor methods to above change.
- * cygserver_ipc.h (ipc_set_proc_info): Use _TYPE64_CLR macros.
- * winlean.h (_TYPE64_CLR): New macro.
- (_TYPE64_SET): Ditto.
- * include/cygwin/msg.h (struct _ts32): Define on 64 bit in _KERNEL mode.
- (struct _msqid_ds32): Ditto. Add comment to explain why.
- * include/cygwin/sysproto.h: Enforce 4 byte alignment on all structs.
- (struct msgctl_args): Change definition to use the same structure on
- 32 and 64 bit.
- (struct msgrcv_args): Ditto.
- (struct msgsnd_args): Ditto.
-
-2012-12-05 Corinna Vinschen <corinna@vinschen.de>
-
- * shm.cc (fixup_shms_after_fork): Fix initialization of local variable
- parent.
-
-2012-12-04 Corinna Vinschen <corinna@vinschen.de>
-
- * winlean.h (_TYPE64): Define.
- * cygserver_ipc.h (struct proc): Rearrange to use same structure on
- 32 and 64 bit. Add member is_64bit.
- (ipc_set_proc_info): Change accordingly.
-
-2012-12-04 Kai Tietz <ktietz@redhat.com>
-
- * child_info.h (child_info): Re-type magic to DWORD.
-
-2012-12-03 Corinna Vinschen <corinna@vinschen.de>
-
- * cygtls.h (CYGTLS_PADSIZE): Change comment noting alignment has to
- be 16 bytes on x86_64.
-
-2012-12-03 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in: Add rule to build cygwin.sc dynamically using the
- target compiler.
- * cygwin.sc.in: Rename from cygwin.sc. Make OUTPUT_FORMAT and
- SEARCH_DIR dependent on target CPU. Add extra alignment and .xdata
- section on x86_64. Keep up with latest dwarf debug section changes.
-
-2012-11-29 Corinna Vinschen <corinna@vinschen.de>
-
- * miscfuncs.cc (thread_wrapper): Use PVOID instead of VOID *.
- Fix stack alignment before calling VirtualFree. Fix comments.
-
-2012-11-28 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc (wsock_init): Drop vendor info debug printout. It's
- undefined since Wsock version 2.
-
-2012-11-28 Corinna Vinschen <corinna@vinschen.de>
-
- * autoload.cc: Extend leading comment to describe the 64 bit
- implementation as well.
- (LoadDLLprime): Define for x86_64.
- (LoadDLLfuncEx3): Ditto.
- (dll_func_load): Ditto.
- (struct dll_info): Use target-agnostic type for load_state.
- (struct func_info): Add func_addr member on x86_64.
- (two_addr_t): New type to be twice the size of an address on either
- target.
- (union retchain): Use target-agnostic type for low and high,
- use two_addr_t as type for ll member.
- (std_dll_init): Define as SYSV ABI function on x86_64. Explain why.
- Change return type to two_addr_t. Add casts as necessary. Convert
- assembler code to tweak return address into C code.
- (wsock_init): Ditto. Drop leading underscore in LoadDLLprime
- macro call on x86_64.
- (GetAdaptersAddresses): Define using LoadDLLfunc since it's not called
- on pre-XP anyway.
- (AttachConsole): Don't define on x86_64.
- (GetModuleHandleExW): Ditto.
- (GetSystemWow64DirectoryW): Ditto.
- (GetVolumePathNamesForVolumeNameW): Ditto.
-
-2012-11-22 Corinna Vinschen <corinna@vinschen.de>
-
- * include/sys/strace.h: Include sys/types.h for pid_t.
-
-2012-11-16 Corinna Vinschen <corinna@vinschen.de>
-
- * cygtls.h (CYGTLS_PADSIZE): Define for 64 bit. Add FIXME comment.
- * profil.c: Replace usage of network types with types as documented
- in Linux, throughout.
- (get_thrpc): Fix access to instruction pointer for x86_64.
- * profil.h: Include stdin.t.h. Replace usage of network types with
- types as documented in Linux, throughout.
- * config/x86_64/profile.h (mcount): Use unsigned long rather than
- __uintptr_t.
-
-2012-11-16 Corinna Vinschen <corinna@vinschen.de>
-
- * cygmalloc.h (dlmalloc): Change unsigned in declaration to size_t.
- (dlrealloc): Ditto.
- * wait.cc (wait4): Cast second parameter in proc_subproc call to
- uintptr_t.
-
-2012-11-16 Corinna Vinschen <corinna@vinschen.de>
-
- * thread.cc (verifyable_object_isvalid): Temporarily define as
- non-inline on x86_64 to workaround compiler bug.
-
-2012-11-16 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_netdrive.cc: Use UINT32_MAX rather than UINT_MAX to make
- absolutely clear that we mean the 32 bit maximum.
- * fhandler_socket.cc: Ditto.
- * pinfo.cc: Ditto with INT32_MAX.
- * select.cc (fd_mask): Drop gratuitious definition.
- (sizeof_fd_set): Cast to size_t.
- * shared.cc (pround): Cast to ptrdiff_t.
- * strace.cc (strace::activate): Fix format string.
- (strace::write_childpid): Take pid_t as parameter.
- * include/sys/strace.h (strace::write_childpid): Change declaration
- accordingly.
- * sync.cc (muto::init): Cast in call to InterlockedExchangePointer to
- make compiler happy.
- * sync.h (class muto): De-const name.
- * syslog.cc (try_connect_syslogd): Take size_t as third argument.
- (vsyslog): Convert len to size_t.
- * thread.cc: Use {U}INT32_MAX rather than {U}LONG_MAX. Througout change
- types used in Windows calls to matching Windows types.
- (pthread::cancel): Fix access to instruction pointer for x86_64.
- (pthread_attr_getstack): Cast to ptrdiff_t for pointer arithmetic.
- * thread.h: Throughout convert 'long' types to uint32_t or LONG.
-
-2012-11-16 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/acl.h (struct __acl32): Drop. Use struct acl or
- aclent_t throughout instead.
- * sec_acl.cc (aclcheck32): Mark currently unused variables as unused.
- (lacl32): Disable on x86_64.
- (acl): Alias to acl32 on x86_64.
- (facl): Alias to facl32 on x86_64.
- (aclcheck): Alias to aclcheck32 on x86_64.
- (aclsort): Alias to aclsort32 on x86_64.
- (acltomode): Alias to acltomode32 on x86_64.
- (aclfrommode): Alias to aclfrommode32 on x86_64.
- (acltopbits): Alias to acltopbits32 on x86_64.
- (aclfrompbits): Alias to aclfrompbits32 on x86_64.
- (acltotext): Alias to acltotext32 on x86_64.
- (aclfromtext): Alias to aclfromtext32 on x86_64.
- * resource.cc (getrlimit): Use correct cast to rlim_t rather than DWORD.
- * sched.cc (sched_setparam): Drop ThreadPriority and all code setting
- it.
-
-2012-11-15 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_process.cc (format_process_stat): Add comment to explain
- the WOW64 problems concerning the BasePriority value. Fix format
- string in __small_sprintf call.
- * ntdll.h: Mark more native structures as tested on 64 bit.
- (enum _EVENT_TYPE): Drop definition.
- (enum _TIMER_TYPE): Ditto.
- (enum _SECTION_INHERIT): Drop __MINGW64_VERSION_MAJOR guard.
-
-2012-11-14 Corinna Vinschen <corinna@vinschen.de>
-
- * ntdll.h: Mark more native structures as tested on 64 bit.
- (struct _FILE_BOTH_DIR_INFORMATION): Rename from
- _FILE_BOTH_DIRECTORY_INFORMATION as per WDK documentation.
- * fhandler_disk_file.cc: Accommodate aforementioned structure name
- change.
- * path.cc: Ditto.
-
-2012-11-13 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.h (class fcwd_access_t): Remove wrong alignment attribute from
- Buffer member of FAST_CWD_OLD structure. Add comment that everything
- has been tested.
- * ntdll.h: Mark more native structures as tested on 64 bit.
-
-2012-11-12 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.h (class fcwd_access_t): Add alignment attribute to Buffer
- member of FAST_CWD_* structures to work on 64 bit.
- * path.cc (symlink_info::check_shortcut): Add cast to avoid compiler
- warning.
- (cygwin_conv_path_list): Drop ununsed variable.
- (peek32): Define with int32_t cast on 64 bit to allow easier fetching
- of instruction pointer relative addresses.
- (find_fast_cwd_pointer): Add new implementation for x86_64.
- Tweak a comment in 32 bit version.
-
-2012-11-12 Corinna Vinschen <corinna@vinschen.de>
-
- * dlfcn.cc (dlopen): Change cast to accommodate type change in ntdll.h
- * fhandler_process.cc (thread_info::thread_info): Change type of local
- variable size to ULONG to match NtQuerySystemInformation call.
- Add cast to avoid compiler warnings.
- (get_process_state): Add cast to avoid compiler warnings. Accommodate
- name change of NextEntryOffset member of PSYSTEM_PROCESS_INFORMATION
- structure.
- * mmap.cc: Add casts to avoid compiler warnings.
- (mlock): Change type of local variables min and max to match
- GetProcessWorkingSetSize call.
- * nlsfuncs.cc (__collate_range_cmp): Add casts to avoid compiler
- warnings.
- * ntdll.h: Drop accommodations for Mingw32. Fix a couple of formatting
- glitches. Add a comment to all structures explicitely tested on 64 bit.
- (SYSTEM_INFORMATION_CLASS): Change SystemProcessesAndThreadsInformation
- to SystemProcessInformation and SystemProcessorTimes to
- SystemProcessorPerformanceInformation to match MSDN.
- (SYSTEM_BASIC_INFORMATION): Fix member types to match 64 bit.
- (SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION): Rename from
- SYSTEM_PROCESSOR_TIMES to use official name from MSDN. Accommodate
- throughout. Drop unneeded align attribute.
- (VM_COUNTERS): Fix member types to match 64 bit.
- (SYSTEM_PROCESS_INFORMATION): Rename from SYSTEM_PROCESSES to use
- official name from MSDN. Fix member types to match 64 bit. Change
- member names to match MSDN and Mingw64. Accommodate throughout.
- (IO_STATUS_BLOCK): Change to use MSDN definition.
- (SYSTEM_TIMEOFDAY_INFORMATION): Rename from
- SYSTEM_TIME_OF_DAY_INFORMATION to use official name from MSDN.
- Accommodate throughout. Add Reserved1 area per MSDN.
- (LDR_DATA_TABLE_ENTRY): Add comment for future reference. Change
- type of LoadCount to USHORT.
- (PEB_LDR_DATA): Change type of Initialized to BOOLEAN. Add comment for
- future reference.
- (PEB): Fix member types to match 64 bit.
- (GDI_TEB_BATCH): New type.
- (TEB): Fix member types to match 64 bit.
- (PROCESS_BASIC_INFORMATION): Ditto.
- (MEMORY_WORKING_SET_LIST): Ditto.
- (SharedUserData): Change comment to note the fact that the address
- is valid on 32 and 64 bit.
- * pinfo.cc (winpids::enum_processes): Add cast to avoid compiler
- warnings.
- * select.cc (pipe_data_available): Add braces in initalization of an
- IO_STATUS_BLOCK to match new definition.
- * wincap.h (class wincapc): Change type of wow64 to ULONG_PTR to match
- MSDN description.
- (wincapc::is_wow64): Convert return value explicitely to bool.
- * wow64.cc (wow64_test_for_64bit_parent): Change type of wow64 to
- ULONG_PTR to match MSDN description. Add a cast to avoid compiler
- warning.
- * regex/engine.c: Avoid compiler warnings about unused and potentially
- uninitialized variables.
- * regex/regcomp.c: Ditto. Drop unnecessary definition of LCID.
-
-2012-11-11 Corinna Vinschen <corinna@vinschen.de>
-
- * pinfo.cc (_pinfo::commune_request): Accommodate the fact that LONG_MAX
- does not match sizeof LONG.
-
-2012-11-09 Corinna Vinschen <corinna@vinschen.de>
-
- * miscfuncs.cc (case_folded_lower): Change to unsigned char to avoid
- compiler warnings.
- (case_folded_upper): Ditto.
- (thread_wrapper): Add assembler code for x86_64.
- * winsup.h (case_folded_lower): Change to unsigned char.
- (case_folded_upper): Ditto.
- (cyg_tolower): Add cast to avoid compiler warnings.
- (cyg_toupper): Add cast to avoid compiler warnings.
-
-2012-11-08 Corinna Vinschen <corinna@vinschen.de>
-
- * tty.h (class tty): Store from_master and to_master HANDLEs in
- unions to make sure the storage is 64 bit compatible. Add comment to
- explain why.
- (from_master): Convert to read accessor method.
- (to_master): Ditto.
- (set_from_master): New method to store HANDLE value 64 bit clean.
- (set_to_master): Ditto.
- * fhandler_tty.cc: Fix debug printfs to work in 64 bit mode as well.
- Change usage of from_master and to_master throughout to accommodate
- aforementioned change.
- * fhandler_termios.cc (fhandler_termios::ioctl): Add cast to avoid
- compiler warning.
-
-2012-11-08 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.h (struct user_heap_info): Change type of chunk to SIZE_T.
- Remove unused slop member.
- * fork.cc (fork): Rename esp to stackp. Add 64 bit asm expression to
- fetch stack pointer.
- (child_copy): Use platform independent types.
- * heap.cc (eval_start_address): Add comment. Disable 3GB code on 64 bit.
- (eval_initial_heap_size): Use platform independent types. Fix debug
- printf format strings.
- (sbrk): Add comment. Change argument type according to newlib
- definition. Use platform independent types. Drop unneeded else and
- move comment to the right spot.
- * hookapi.cc (PEHeaderFromHModule): Return PVOID. Add comment to
- explain why. Add bool parameter to return if target executable is
- 64 bit or not.
- (rvadelta_get): New inline function to fetch section address platform
- independent.
- (rvadelta32, rvadelta64): Platform dependent wrappers.
- (rvadelta): Change to macro calling the platform dependent rvadelta
- wrappers.
- (putmem): Define platform dependent THUNK_FUNC_TYPE and use throughout.
- (RedirectIAT): Add comment.
- (get_export): Add comment.
- (find_first_notloaded_dll): Allow to fetch information in a platform
- and target independent way.
- (hook_or_detect_cygwin): Ditto. Recognize the cyg64win1.dll file name
- as well.
- * kernel32.cc (CreateFileMappingW): Cast to avoid compiler warning.
-
- * fhandler.h (class fhandler_dev_tape): Replace mt_evt with an
- OVERLAPPED structure ov.
- * mtinfo.h (class mtinfo_part): Define members as int32_t rather than
- long. Change member function declarations accordingly.
- (class mtinfo_drive): Ditto. Store OVERLAPPED pointer rather than
- holding the full structure. Add comment to explain why.
- * fhandler_tape.cc: Accommodate above changes throughout.
-
-2012-11-08 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc (fhandler_socket::ioctl): Don't use __ms_u_long
- directly. Rather only use it on 64 bit. Add comment to explain the
- problem.
-
-2012-11-07 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_socket.cc: Throughout, fix casts to work on 64 bit. Move
- calls to pthread_testcancel to upper syscall level for consistency.
- Move read, readv, write, and writev methods to keep together with
- equivalent recv and send methods.
- (fhandler_socket::read): Compute WSAMSG buffer on 64 bit to overcome
- type restriction of WSABUF len member.
- (fhandler_socket::recvfrom): Ditto.
- (fhandler_socket::write): Ditto.
- (fhandler_socket::sendto): Ditto.
- (fhandler_socket::sendmsg): Restructure for readability.
- * net.cc (cygwin_sendto): Call pthread_testcancel here.
- (cygwin_recvfrom): Ditto.
- (cygwin_connect): Ditto.
- (cygwin_accept): Ditto.
- (cygwin_recv): Ditto.
- (cygwin_send): Ditto.
- (cygwin_recvmsg): Ditto.
- (cygwin_sendmsg): Ditto.
-
-2012-11-07 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_process.cc (heap_info::heap_info): Add comment to explain a
- TODO item.
-
-2012-11-07 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_procsysvipc.cc (format_procsysvipc_msg): Fix printf format
- string for 32 bit as well.
-
-2012-11-07 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_procsysvipc.cc (format_procsysvipc_msg): Fix printf format
- string for 64 bit.
- * fhandler_registry.cc (fhandler_registry::readdir): Fix cast.
- * fhandler_serial.cc (ibuf): Avoid compiler warning.
- * include/cygwin/ipc.h: Include stdint.h.
- * include/cygwin/msg.h (msgqnum_t): Define as uint32_t.
- (msglen_t): Ditto.
- (struct msginfo): Convert all long members to int32_t.
- (struct msg_info): Ditto.
- * include/cygwin/sem.h (struct seminfo): Ditto.
- * include/cygwin/shm.h (shmatt_t): Define as uint32_t.
- (struct shmid_ds): Define shm_segsz as uint32_t.
- (struct shminfo): Convert all long members to int32_t.
-
-2012-11-06 Corinna Vinschen <corinna@vinschen.de>
-
- * ntdll.h (PDI_WOW64_MODULES): Define.
- (struct _DEBUG_BUFFER): Fix definition to work on 32 and 64 bit.
- (struct _DEBUG_HEAP_INFORMATION): Ditto.
- (struct _DEBUG_HEAP_BLOCK): Ditto.
-
-2012-11-05 Corinna Vinschen <corinna@vinschen.de>
-
- * fhandler_process.cc: Fix debug printf calls to be type safe.
- Add casts to avoid compiler warnings.
- (get_mem_values): Avoid using ULONG_MAX since it's NOT matching
- ULONG on 64 bit.
- * fhandler_procnet.cc (fhandler_procnet::open): Fix syscall_printf call
- to be type safe.
- (format_procnet_ifinet6): Add cast to avoid compiler warnings.
- * ntdll.h (struct _DEBUG_HEAP_BLOCK): Change Address to ULONG_PTR.
-
- * include/bits/wordsize.h: Fix __WORDSIZE definition for x86_64.
- Add __WORDSIZE_COMPAT32 as on Linux.
- * include/inttypes.h: Include bits/wordsize.h. Use __WORDSIZE check
- where appropriate.
- * include/limits.h: Include bits/wordsize.h.
- (CHAR_BIT): Change definition to rely on default
- compiler definition.
- (LONG_BIT): Ditto.
- (WORD_BIT): Ditto.
- (__LONG_MAX__): Use __WORDSIZE check.
- (RTSIG_MAX): Ditto.
- * include/stdint.h: Include bits/wordsize.h. Use __WORDSIZE check
- where appropriate.
- * include/cygwin/signal.h: Ditto.
- * include/cygwin/types.h: Ditto.
-
- * include/asm/byteorder.h (__ntohl): Use bswap instruction, available
- since i486.
- (__ntohs): Fix constraint to work on 64 bit CPU as well.
-
-2012-11-05 Corinna Vinschen <corinna@vinschen.de>
-
- * cpuid.h (can_set_flag): Implement for x86_64.
- * fhandler.h (class fhandler_dev_raw): Define devbuf members taking
- numerical values as DWORD, rather than size_t.
- * fhandler_dsp.cc: Fix debug printf calls to be type safe.
- (waveOut_callback): Align parameter types to latest MSDN description.
- (waveIn_callback): Ditto.
- (fhandler_dev_dsp::Audio_out::start): Change casts in call to
- waveOutOpen according to MSDN.
- (fhandler_dev_dsp::Audio_out::parsewav): Fix a cast.
- (fhandler_dev_dsp::Audio_in::start): Change casts in call to
- waveInOpen according to MSDN.
- * fhandler_floppy.cc: Fix debug printf calls to be type safe.
- (fhandler_dev_floppy::ioctl): Add casts to be on the safe side.
- * fhandler_proc.cc: Fix debug printf calls to be type safe.
-
-2012-10-31 Corinna Vinschen <corinna@vinschen.de>
-
- * cygthread.cc: Fix usage of %p in debug printfs, throughout.
- * dcrt0.cc: Ditto.
- * dtable.cc: Ditto.
- * errno.cc: Ditto.
- * exceptions.cc: Ditto.
- * fhandler.cc: Ditto.
- * fhandler_console.cc: Ditto.
- * fhandler_disk_file.cc: Ditto.
-
- * fhandler_clipboard.cc (cygnativeformat): Define as UINT.
- (fhandler_dev_clipboard::read): Ditto for local format variable.
- Use casts to compare off_t with size_t value.
- * fhandler_console.cc (fhandler_console::ioctl): Avoid compiler
- warnings.
- * fhandler_disk_file.cc (fhandler_disk_file::opendir): Fix cast.
- * include/sys/dirent.h (struct __DIR): Define __d_internal as uintptr_t,
- rather than unsigned int.
-
-2012-10-30 Corinna Vinschen <corinna@vinschen.de>
-
- * fcntl.cc (fcntl64): Make arg an intptr_t. Add comment to explain a
- potential type problem. Fix syscall_printf.
- (_fcntl): Make arg an intptr_t.
- * fhandler.cc (fhandler_base::fcntl): Ditto.
- * fhandler_socket.cc (fhandler_socket::fcntl): Ditto.
- * fhandler.h: Align declarations.
-
-2012-10-30 Corinna Vinschen <corinna@vinschen.de>
-
- * dtable.cc: Use %y rather than 0x%x.
- * exceptions.cc: Ditto.
-
-2012-10-30 Corinna Vinschen <corinna@vinschen.de>
-
- * smallprint.cc (__small_vsprintf): Add 'y' and 'Y' conversion.
- Add description to comment.
- (__small_vswprintf): Align behaviour to __small_vsprintf.
-
-2012-10-30 Corinna Vinschen <corinna@vinschen.de>
-
- * external.cc (get_cygdrive_info): Return uintptr_t rather than DWORD.
- (check_ntsec): Return bool.
- (cygwin_internal): Return uintptr_t. Accommodate throughout.
- * include/sys/cygwin.h (cygwin_internal): Align declaration.
-
-2012-10-30 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/signal.h (NSIG): Define differently for x86_64 and
- i686. Change FIXME comment accordingly.
- (SIGRTMAX): Define in terms of NSIG.
- * include/limits.h (RTSIG_MAX): Define for x86_64.
- * strsig.cc (__signals_common): Hold all signals available on both
- platforms.
- (__signals): Define differently for x86_64 and i686.
-
-2012-10-30 Corinna Vinschen <corinna@vinschen.de>
-
- * dll_init.cc: Fix debug printf to be type-safe.
- * dtable.cc: Ditto.
-
-2012-10-26 Corinna Vinschen <corinna@vinschen.de>
-
- * cygtls.cc (_cygtls::remove): Fix debug printf to be type-safe.
- * dcrt0.cc: Ditto, throughout.
- * include/sys/cygwin.h (struct per_process): Define magic_biscuit,
- dll_major and dll_minor as uint32_t.
-
-2012-10-26 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.h (struct init_cygheap): Define sthreads as uint32_t.
-
-2012-10-26 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.cc: Fix debug printfs to work in 64 bit mode as well,
- throughout.
- (nthreads): Define as uint32_t to make always 4 byte. Accommodate
- throughout.
- (threadlist_ix): Ditto.
-
-2012-10-26 Corinna Vinschen <corinna@vinschen.de>
-
- * exception.h (stackdump): Change first parameter to PUINT_PTR.
- * exceptions.cc: Define cpu specific macros _GR, _AFMT and _ADDR.
- Use throughout to avoid ifdef's. Fix debug printfs to work in
- 64 bit mode as well, throughout.
- (status_info): Define member code as NTSTATUS. Add casts where
- necessary throughout.
- (dump_exception): Dump all x86_64 registers if building for it.
- (class stack_info): Define dummy_frame as PUINT_PTR.
- (stack_info::init): Change first parameter to PUINT_PTR. Rename
- ebp to framep for CPU independent naming. Drop debp macro.
- (stack_info::walk): Rename ebp to framep for CPU independent naming.
- Disable WOW64 hack in 64 bit mode.
- (stackdump): Change first parameter to PUINT_PTR. Rename ebp to framep
- for CPU independent naming.
- (_cygtls::inside_kernel): Ignore system_wow64_directory on 64 bit.
- (rtl_unwind): Redefine for x86_64 cpu.
- (_except_list): Drop redundant definition.
- (_cygtls::copy_context): Just use __COPY_CONTEXT_SIZE.
- * sigproc.cc (_cygtls::signal_exit): Conditionalize stackdump call per
- cpu.
- * smallprint.cc (__small_vsprintf): Fix up for 64 bit. Handle 'l' size
- modifier in 'd', 'o', 'u', 'x' conversion to print "long" values on a
- per cpu base. Add 'O' conversion. Change comment accrdingly.
- * include/cygwin/signal.h (struct _uc_fpxreg): Define for 64 bit.
- (struct _uc_xmmreg): Ditto.
- (struct _fpstate): Ditto.
- (struct ucontext): Ditto.
- (struct _uc_fpreg): Define for 32 bit.
- (struct _fpstate): Use struct _uc_fpreg for _st. Use explicit sized
- types.
- (struct ucontext): Use explicit sized types.
- (__COPY_CONTEXT_SIZE): Cast safely.
- (sigset_t): Define as __uint64_t on 64 bit. Add FIXME comment in 32
- bit case.
-
-2012-10-24 Corinna Vinschen <corinna@vinschen.de>
-
- * smallprint.cc (rnarg): Make type-safe.
- (rnargLL): Ditto.
- (__small_vsprintf): Add comment to document meaning of each possible
- conversion. Fix 'p' conversion for 64 bit.
-
-2012-10-23 Corinna Vinschen <corinna@vinschen.de>
-
- * globals.cc: Redefine _RDATA as "const", if not already defined.
- Apply extern "C" linkage to the R/O UNICODE_STRINGs and cygwin_props.
- Change comments to explain new method.
- * winsup.h (_RDATA): Define as empty string and only if including
- globals.h.
- (cygwin_finished_initializing): Drop redundant declaration.
-
-2012-10-23 Corinna Vinschen <corinna@vinschen.de>
-
- * dtable.cc (dtable::get_debugger_info): Raise size of buf to allow
- 64 bit values. Call sprintf in a type-safe manner.
-
-2012-10-23 Corinna Vinschen <corinna@vinschen.de>
-
- * dll_init.cc (reserve_at): Use PVOID rather than DWORD as type for
- pointer parameters and return type.
- (release_at): Ditto.
- (dll_list::load_after_fork_impl): Fix format strings. Call reserve_at
- without casts to DWORD.
- (struct dllcrt0_info): Change type of res to PVOID.
- (dll_dllcrt0): Return PVOID rather than int.
- (dll_dllcrt0_1): Accommodate type change of dllcrt0_info::res.
- (dll_noncygwin_dllcrt0): Disable on 64 bit. Add a cast for 32 bit.
- * dll_init.h (struct pefile): Drop 32 bit decoration from Windows
- types.
- * ntdll.h (struct _DEBUG_HEAP_INFORMATION): Define Base as UINT_PTR.
- (struct _DEBUG_MODULE_INFORMATION): Define Reserved and Base as
- UINT_PTR.
- * winsup.h (dll_dllcrt0): Declare as PVOID.
- (dll_noncygwin_dllcrt0): Don't declare on 64 bit.
- * include/cygwin/cygwin_dll.h (cygwin_attach_dll): Declare as PVOID.
- (cygwin_detach_dll): Declare with PVOID parameter.
- (dll_index): Declare as PVOID.
- (_cygwin_dll_entry): Accommodate type change of dll_index.
- * lib/crt0.h (dll_dllcrt0): Declare as PVOID.
- * lib/cygwin_attach_dll.c (cygwin_attach_dll): Define PVOID.
-
-2012-10-23 Corinna Vinschen <corinna@vinschen.de>
-
- * dcrt0.cc (init_windows_system_directory): Disable setting
- system_wow64_directory{_length} on 64 bit.
- (dll_crt0_0): Disable WOW64-specific code on 64 bit.
- (_dll_crt0): Ditto.
- * globals.cc (system_wow64_directory): Don't define on 64 bit.
- (system_wow64_directory_length): Ditto.
- * wincap.cc (wincapc::init): On 64 bit, always set wow64 to 0 and
- related bool values to false.
- * wow64.cc: Disable entire code on 64 bit.
- * wow64.h: Ditto.
-
-2012-10-23 Corinna Vinschen <corinna@vinschen.de>
-
- * cygtls.h (__stack_t): Define as uintptr_t.
- * dcrt0.cc (child_info_fork::alloc_stack): Conditionalize assembler
- code on a per-CPU base. Rename esp to stackp.
- (get_cygwin_startup_info): Cast pointers to uintptr_t in
- multiple_cygwin_problem call. Minor formatting change.
- (_dll_crt0): Conditionalize assembler code on a per-CPU base.
- (multiple_cygwin_problem): Change parameters from unsigned to uintptr_t.
- * winsup.h (multiple_cygwin_problem): Change declaration accordingly.
- * pinfo.h (pinfo::reattach): Cast 2nd argument in proc_subproc call
- to uintptr_t.
- (pinfo::remember): Ditto.
- * sigproc.cc (proc_subproc): Change 2nd parameter to uintptr_t to allow
- pointer values.
- * sigproc.h (proc_subproc): Change declaration accordingly.
- * include/sys/cygwin.h (per_process_overwrite): Use offsetof to compute
- value.
-
-2012-10-23 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.cc (N0): Remove.
- (N): Ditto.
- (to_cmalloc): Use offsetof to compute value.
- (tocygheap): Use offsetof to compute value.
-
-2012-10-22 Corinna Vinschen <corinna@vinschen.de>
-
- * cygtls.h (_tlsbase): Define for __x86_64__.
- (_tlstop): Ditto.
- * exception.h (exception_list): Ditto.
-
-2012-10-22 Corinna Vinschen <corinna@vinschen.de>
-
- * cygheap.cc (to_cmalloc): Fix pointer cast.
- (nextpage): Ditto. Base definition on roundup2.
- (allocsize): Cast to SIZE_T.
- (_csbrk): Drop granmask. Define adjsbs SIZE_T as 2nd parameter to
- VirtualAlloc.
- (tocygheap): Fix pointer cast.
-
-2012-10-18 Corinna Vinschen <corinna@vinschen.de>
-
- Avoid various type ambiguity problems showing up in the 64 bit case:
- * cygheap.h (cygheap_user::set_sid): Convert to void.
- (cygheap_user::set_saved_sid): Ditto.
- * devices.h (struct device): Drop operator int& and DWORD& entirely.
- Throughout, use dev_t or fh_devices instead.
- * devices.cc: Regenerate.
- * fhandler.h (class fhandler_base): Convert _refcnt member to LONG.
- (fhandler_base::inc_refcnt): Return LONG.
- (fhandler_base::dec_refcnt): Ditto.
- (fhandler_base::get_major): Return _major_t.
- (fhandler_base::get_minor): Return _minor_t.
- (fhandler_base::get_unit): Delete. Throughout, use get_minor instead
- of get_unit.
- (fhandler_socket::get_socket): Use SOCKET rather than int. Only define
- if __INSIDE_CYGWIN_NET__ is defined.
- (fhandler_pty_slave::get_unit): Drop declaration.
- * fhandler_procnet.cc: Include Windows headers early.
- * fhandler_socket.cc: Ditto.
- * fhandler_tty.cc (fhandler_pty_slave::get_unit): Remove.
- * path.h (path_conv::get_device): Rename from get_devn and change return
- type to dev_t. Accommodate throughout.
- (path_conv::get_unitn): Remove unused method.
- * pinfo.h (class pinfo): Drop operator== for int case.
- (pinfo::operator!): Define.
- * poll.cc: Don't define __INSIDE_CYGWIN_NET__.
- * syscalls.cc (getpgid): Replace use of pinfo::operator== with
- pinfo::operator!.
- * tty.h (tty_min::setntty): Convert 2nd parameter to _minor_t.
- * tty.h (tty_min::getntty): Change return type to dev_t.
- (tty_min::get_minor): Rename from get_unit. Change return type to
- _minor_t.
-
-2012-08-16 Corinna Vinschen <corinna@vinschen.de>
-
- * include/mntent.h: Don't include paths.h and don't define macros if
- _NOMNTENT_MACROS is set.
-
-2012-08-14 Corinna Vinschen <corinna@vinschen.de>
-
- * advapi32.cc (DuplicateTokenEx): Make ?: expression type-safe.
- * ntdll.h (KAFFINITY): Don't define if building with Mingw64 headers.
- * thread.cc: Throughout drop casts in calls to Interlocked functions.
- * thread.h (class fast_mutex): Ditto. Define lock_counter as LONG.
- (class pthread_mutex): Define lock_counter as LONG.
- (struct MTinterface): Define threadcount as LONG.
-
-2012-08-14 Corinna Vinschen <corinna@vinschen.de>
-
- * configure.in: Add AC_NO_EXECUTABLES to allow bootstrap.
- Add x86_64 to allowed cpu types.
- * configure: Regenerate.
- * config/x86_64/profile.h: New file.
-
-2012-08-14 Corinna Vinschen <corinna@vinschen.de>
-
- * thread.cc (semaphore::_fixup_after_fork): Fix Win32 error output in
- api_fatal call.
-
-2012-08-14 Corinna Vinschen <corinna@vinschen.de>
-
- * mkvers.sh: Drop reference to w32api includes.
-
-2012-08-13 Corinna Vinschen <corinna@vinschen.de>
-
- * include/cygwin/stat.h (struct __stat64): Drop entirely in favor of
- struct stat. Accommodate throughout Cygwin.
- * include/cygwin/types.h: Throughout, drop current, internal types
- used since Cygwin 1.5 with the base type they have been used for.
- Throughout, define types based on bitsize-specific types where
- appropriate. Accommodate throughout Cygwin.
- * include/sys/cygwin.h: Drop __uid32_t and __gid32_t in favor of
- uid_t and gid_t. Define uid/gid types based on bitsize-specific types.
- (struct external_pinfo): Accommodate above change.
- * cygtls.h (struct _local_storage): Drop unused members grp and
- namearray,
- * tlsoffsets.h: Regenerate.
- * devices.h (_dev_t): Drop definition. Use dev_t throughout instead.
- * devices.cc: Regenerate.
-
- Probably temporary patch to drop unneeded functionality on x86_64:
- * fcntl.cc (_fcntl): Alias to fcntl64 on x86_64.
- * glob.cc (CYGWIN_gl_stat): Simplify on x86_64.
- * grp.cc (grp32togrp16): Don't define on x86_64.
- (getgrgid): Alias to getgrgid32 on x86_64.
- (getgrnam): Alias to getgrnam32 on x86_64.
- (getgrent): Alias to getgrent32 on x86_64.
- (getgroups): Alias to getgroups32 on x86_64.
- (initgroups): Alias to initgroups32 on x86_64.
- (setgroups): Alias to setgroups32 on x86_64.
- * mmap.cc (mmap): Alias to mmap64 on x86_64.
- * passwd.cc (getpwuid): Alias to getpwuid32 on x86_64.
- (getpwuid_r): Alias to getpwuid_r32 on x86_64.
- (getpwduid): Don't define on x86_64.
- * syscalls.cc (lseek): Alias to lseek64 on x86_64.
- (_lseek): Alias to lseek64 on x86_64.
- (chown): Alias to chown32 on x86_64.
- (lchown): Alias to lchown32 on x86_64.
- (fchown): Alias to fchown32 on x86_64.
- (stat64_to_stat32): Don't define on x86_64.
- (fstat): Alias to fstat64 on x86_64.
- (_fstat_r): Alias to _fstat64_r on x86_64.
- (stat): Alias to stat64 on x86_64.
- (_stat_r): Alias to _stat64_r on x86_64.
- (lstat): Alias to lstat64 on x86_64.
- (ftruncate): Alias to ftruncate64 on x86_64.
- (truncate): Alias to truncate64 on x86_64.
- (seteuid): Alias to seteuid32 on x86_64.
- (setuid): Alias to setuid32 on x86_64.
- (setreuid): Alias to setreuid32 on x86_64.
- (setegid): Alias to setegid32 on x86_64.
- (setgid): Alias to setgid32 on x86_64.
- (setregid): Alias to setregid32 on x86_64.
- * uinfo.cc (getuid): Alias to getuid32 on x86_64.
- (getgid): Alias to getgid32 on x86_64.
- (geteuid): Alias to geteuid32 on x86_64.
- (getegid): Alias to getegid32 on x86_64.
- * winsup.h (ILLEGAL_UID16): Don't define on x86_64.
- (ILLEGAL_GID16): Ditto.
- (uid16touid32): Don't declare on x86_64.
- (gid16togid32): Don't declare on x86_64.
-
-2012-08-13 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (TEST_DLL_NAME): Use -nostdlib flag unconditionally.
-
-2012-08-10 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.sc: Add default w32api search dirs.
- * Makefile.in (DLL_IMPORTS); Just use -l syntax.
- (TEST_DLL_NAME): Drop DLL_IMPORTS dependency.
-
diff --git a/winsup/cygwin/DevNotes b/winsup/cygwin/DevNotes
deleted file mode 100644
index 5d31ed72e..000000000
--- a/winsup/cygwin/DevNotes
+++ /dev/null
@@ -1,562 +0,0 @@
-2014-04-26 cgf-000026
-
-Forgot to clear to the end of screen when restoring a screen buffer.
-That worked, for some reason, with Take Command but not with normal
-consoles. I don't remember why I didn't resize the screen like a Linux
-X terminal emulator but that might have made things work a little
-better. Right now, there is a scroll bar for apps like less or vi and
-that doesn't feel right.
-
-2014-03-29 cgf-000025
-
-Reorganized _cygtls::signal_debugger to avoid sending anything to the
-debugger if we've seen an exception. I think it used to work that way
-and I changed it without noting why. It sure seems like, if we don't do
-this, gdb will see two signals and, it really does, when there has been
-a Windows-recognized exception.
-
-2014-02-15 cgf-000024
-
-Wow. It's hard getting the screen handling stuff working correctly when
-there is a screen buffer larger than screen size and vice versa. These
-changes attempt to use SetConsoleWindowInfo whenever possible so that
-the contents of the screen buffer are never wiped out. They also fix
-some previously misbehaving "scroll the screen" commands.
-
-2013-06-07 cgf-000023
-
-Given the fact that the signal thread never exits there is no need
-for exit_thread to ever block. So, nuke this code.
-
-2013-01-31 cgf-000022
-
-While researching the lftp behavior reported here:
-
-http://cygwin.com/ml/cygwin/2013-01/msg00390.html
-
-after a frenzy of rewriting sigflush handling to avoid blocking in the
-signal thread (which is now and should ever have been illegal), it
-dawned on me that we're not supposed to be flushing the tty input buffer
-every time a signal is received. We're supposed to do this only when
-the user hits a character (e.g., CTRL-C) which initiates a signal
-action. So, I removed sigflush from sigpacket::process and moved it to
-tc ()->kill_pgrp (). This function should only be called to send
-signals related to the tty so this should have the desired effect.
-
-2013-01-11 cgf-000021
-
-Apparently I got the signal handling semantics of select() wrong again
-even though I would have sworn that I tested this on Linux and Windows.
-
-select() is apparently *always* interrupted by a signal and *never*
-restarts. Hopefully, between the comment added to the code and this
-note, I'll not make this mistake again.
-
-2013-01-02 cgf-000020
-
-(This entry should have been checked in with the changes but... I forgot)
-
-This is a fairly big revamp of the way that windows signals are handled.
-The intent is that all signal decisions should be made by the signal
-thread; not by the exception handler.
-
-This required the ability to pass information from the exception handler
-to the signal thread so, a si_cyg field was added to siginfo_t. This
-contains information needed to generate a "core dump". Hmm. Haven't
-checked to see if this breaks Cygwin's hardly-ever-used real core dump
-facility.
-
-Anyway, I moved signal_exit back into exceptions.cc and removed it from
-the sigpacket class. This function is now treated like a signal handler
-function - Cygwin will cause it to be dispatched in the context of
-whatever thread caught the signal. signal_exit also makes the
-determination about when to write a stackdump.
-
-The signal-handler thread will no longer ever attempt to exit. It will
-just keep processing signals (it will not process real signals after
-Cygwin stops shutting down, however). This should make it impossible
-for the signal thread to ever block waiting for the process lock since
-it now never grabs the process lock. The signal-handler thread will
-notify gdb when it gets a signal now but, in theory, gdb should see the
-context of the thread which received the signal, not the signal-handler
-thread.
-
-2012-12-28 cgf-000019
-
-(I forgot to mention that cgf-000018 was reverted. Although I never saw
-a hang from this, I couldn't convince myself that one wasn't possible.)
-
-This fix attempts to correct a deadlock where, when a true Windows
-signal arrives, Windows creates a thread which "does stuff" and attempts
-to exit. In the process of exiting Cygwin grabs the process lock. If
-the signal thread has seen the signal and wants to exit, it can't
-because the newly-created thread now holds it. But, since the new
-thread is relying on the signal thread to release its process lock,
-it exits and the process lock is never released.
-
-To fix this, I removed calls to _cygtls::signal_exit in favor of
-flagging that we were exiting by setting signal_exit_code (almost forgot
-to mark that NO_COPY: that would have been fun). The new function
-setup_signal_exit() now handles setting things up so that ReadFile loop
-in wait_sig will do the right thing when it terminates. This function
-may just Sleep indefinitely if a signal is being sent from a thread
-other than the signal thread. wait_sig() was changed so that it will
-essentially drop into asychronous-read-mode when a signal which exits
-has been detected. The ReadFile loop is exited when we know that the
-process is supposed to be exiting and there is nothing else in the
-signal queue.
-
-Although I never actually saw this happen, exit_thread() was also
-changed to release the process lock and just sleep indefintely if it is
-detected that we are exiting.
-
-2012-12-21 cgf-000018
-
-Re: cgf-000017
-
-It occurred to me that just getting the process lock during
-DLL_THREAD_DETACH in dll_entry() might be adequate to fix this
-problem. It's certainly much less intrusive.
-
-There are potential deadlock problems with grabbing a lock in
-this code, though, so this check-in will be experimental.
-
-2012-12-21 cgf-000017
-
-The changes in this set are to work around the issue noted here:
-
-http://cygwin.com/ml/cygwin/2012-12/threads.html#00140
-
-The problem is, apparently, that the return value of an ExitThread()
-will take precedence over the return value of TerminateProcess/ExitProcess
-if the thread is the last one exiting. That's rather amazing...
-
-For the fix, I replaced all calls to ExitThread with exit_thread(). The
-exit_thread function, creates a handle to the current thread and sends
-it to a packet via sig_send(__SIGTHREADEXIT). Then it acquires the
-process lock and calls ExitThread.
-
-wait_sig will then wait for the handle, indicating that the thread has
-exited, and, when that has happened, removes the process lock on behalf
-of the now-defunct thread. wait_sig will now also avoid actually
-exiting since it could trigger the same problem.
-
-Holding process_lock should prevent threads from exiting while a Cygwin
-process is shutting down. They will just block forever in that case -
-just like wait_sig.
-
-2012-08-17 cgf-000016
-
-While debugging another problem I finally noticed that
-sigpacket::process was unconditionally calling tls->set_siginfo prior to
-calling setup_handler even though setup_handler could fail. In the
-event of two successive signals, that would cause the second signal's
-info to overwrite the first even though the signal handler for the first
-would eventually be called. Doh.
-
-Fixing this required passing the sigpacket si field into setup_handler.
-Making setup_handler part of the sigpacket class seemed to make a lot of
-sense so that's what I did. Then I passed the si element into
-interrupt_setup so that the infodata structure could be filled out prior
-to arming the signal.
-
-The other changes checked in here eliminate the ResetEvent for
-signal_arrived since previous changes to cygwait should handle the
-case of spurious signal_arrived detection. Since signal_arrived is
-not a manual-reset event, we really should just let the appropriate
-WFMO handle it. Otherwise, there is a race where a signal comes in
-a "split second" after WFMO responds to some other event. Resetting
-the signal_arrived would cause any subsequent WFMO to never be
-triggered. My current theory is that this is what is causing:
-
-http://cygwin.com/ml/cygwin/2012-08/msg00310.html
-
-2012-08-15 cgf-000015
-
-RIP cancelable_wait. Yay.
-
-2012-08-09 cgf-000014
-
-So, apparently I got it somewhat right before wrt signal handling.
-Checking on linux, it appears that signals will be sent to a thread
-which can accept the signal. So resurrecting and extending the
-"find_tls" function is in order. This function will return the tls
-of any thread which 1) is waiting for a signal with sigwait*() or
-2) has the signal unmasked.
-
-In redoing this it became obvious that I had the class designation wrong
-for the threadlist handling so I moved the manipulation of the global
-threadlist into the cygheap where it logically belongs.
-
-2012-07-21 cgf-000013
-
-These changes reflect a revamp of the "wait for signal" functionality
-which has existed in Cygwin through several signal massages.
-
-We now create a signal event only when a thread is waiting for a signal
-and arm it only for that thread. The "set_signal_arrived" function is
-used to establish the event and set it in a location referencable by
-the caller.
-
-I still do not handle all of the race conditions. What happens when
-a signal comes in just after a WF?O succeeds for some other purpose? I
-suspect that it will arm the next WF?O call and the subsequent call to
-call_signal_handler could cause a function to get an EINTR when possibly
-it shouldn't have.
-
-I haven't yet checked all of the test cases for the URL listed in the
-previous entry.
-
-Baby steps.
-
-2012-06-12 cgf-000012
-
-These changes are the preliminary for redoing the way threads wait for
-signals. The problems are shown by the test case mentioned here:
-
-http://cygwin.com/ml/cygwin/2012-05/msg00434.html
-
-I've known that the signal handling in threads wasn't quite right for
-some time. I lost all of my thread signal tests in the great "rm -r"
-debacle of a few years ago and have been less than enthusiastic about
-redoing everything (I had PCTS tests and everything). But it really is
-time to redo this signal handling to make it more like it is supposed to
-be.
-
-This change should not introduce any new behavior. Things should
-continue to behave as before. The major differences are a change in the
-arguments to cancelable_wait and cygwait now uses cancelable_wait and,
-so, the returns from cygwait now mirror cancelable_wait.
-
-The next change will consolidate cygwait and cancelable_wait into one
-cygwait function.
-
-2012-06-02 cgf-000011
-
-The refcnt handling was tricky to get right but I had convinced myself
-that the refcnt's were always incremented/decremented under a lock.
-Corinna's 2012-05-23 change to refcnt exposed a potential problem with
-dup handling where the fdtab could be updated while not locked.
-
-That should be fixed by this change but, on closer examination, it seems
-like there are many places where it is possible for the refcnt to be
-updated while the fdtab is not locked since the default for
-cygheap_fdget is to not lock the fdtab (and that should be the default -
-you can't have read holding a lock).
-
-Since refcnt was only ever called with 1 or -1, I broke it up into two
-functions but kept the Interlocked* operation. Incrementing a variable
-should not be as racy as adding an arbitrary number to it but we have
-InterlockedIncrement/InterlockedDecrement for a reason so I kept the
-Interlocked operation here.
-
-In the meantime, I'll be mulling over whether the refcnt operations are
-actually safe as they are. Maybe just ensuring that they are atomically
-updated is enough since they control the destruction of an fh. If I got
-the ordering right with incrementing and decrementing then that should
-be adequate.
-
-2012-06-02 cgf-000010
-
-<1.7.16>
-- Fix emacs problem which exposed an issue with Cygwin's select() function.
- If a signal arrives while select is blocking and the program longjmps
- out of the signal handler then threads and memory may be left hanging.
- Fixes: http://cygwin.com/ml/cygwin/2012-05/threads.html#00275
-</1.7.16>
-
-This was try #4 or #5 to get select() signal handling working right.
-It's still not there but it should now at least not leak memory or
-threads.
-
-I mucked with the interface between cygwin_select and select_stuff::wait
-so that the "new" loop in select_stuff::wait() was essentially moved
-into the caller. cygwin_select now uses various enum states to decide
-what to do. It builds the select linked list at the beginning of the
-loop, allowing wait() to tear everything down and restart. This is
-necessary before calling a signal handler because the signal handler may
-longjmp away.
-
-I initially had this all coded up to use a special signal_cleanup
-callback which could be called when a longjmp is called in a signal
-handler. And cygwin_select() set up and tore down this callback. Once
-I got everything compiling it, of course, dawned on me that just because
-you call a longjmp in a signal handler it doesn't mean that you are
-jumping *out* of the signal handler. So, if the signal handler invokes
-the callback and returns it will be very bad for select(). Hence, this
-slower, but hopefully more correct implementation.
-
-(I still wonder if some sort of signal cleanup callback might still
-be useful in the future)
-
-TODO: I need to do an audit of other places where this problem could be
-occurring.
-
-As alluded to above, select's signal handling is still not right. It
-still acts as if it could call a signal handler from something other
-than the main thread but, AFAICT, from my STC, this doesn't seem to be
-the case. It might be worthwhile to extend cygwait to just magically
-figure this out and not even bother using w4[0] for scenarios like this.
-
-2012-05-16 cgf-000009
-
-<1.7.16>
-- Fix broken console mouse handling. Reported here:
- http://cygwin.com/ml/cygwin/2012-05/msg00360.html
-</1.7.16>
-
-I did a cvs annotate on smallprint.cc and see that the code to translate
-%characters > 127 to 0x notation was in the 1.1 revision. Then I
-checked the smallprint.c predecessor. It was in the 1.1 version of that
-program too, which means that this odd change has probably been around
-since <= 2000.
-
-Since __small_sprintf is supposed to emulate sprintf, I got rid of the
-special case handling. This may affect fhandler_socket::bind. If so, we
-should work around this problem there rather than keeping this strange
-hack in __small_printf.
-
-2012-05-14 cgf-000008
-
-<1.7.16>
-- Fix hang when zero bytes are written to a pty using
- Windows WriteFile or equivalent. Fixes:
- http://cygwin.com/ml/cygwin/2012-05/msg00323.html
-</1.7.16>
-
-cgf-000002, as usual, fixed one thing while breaking another. See
-Larry's predicament in: http://goo.gl/oGEr2 .
-
-The problem is that zero byte writes to the pty pipe caused the dread
-end-of-the-world-as-we-know-it problem reported on the mailing list
-where ReadFile reads zero bytes even though there is still more to read
-on the pipe. This is because that change caused a 'record' to be read
-and a record can be zero bytes.
-
-I was never really keen about using a throwaway buffer just to get a
-count of the number of characters available to be read in the pty pipe.
-On closer reading of the documentation for PeekNamedPipe it seemed like
-the sixth argument to PeekNamedPipe should return what I needed without
-using a buffer. And, amazingly, it did, except that the problem still
-remained - a zero byte message still screwed things up.
-
-So, we now detect the case where there is zero bytes available as a
-message but there are bytes available in the pipe. In that scenario,
-return the bytes available in the pipe rather than the message length of
-zero. This could conceivably cause problems with pty pipe handling in
-this scenario but since the only way this scenario could possibly happen
-is when someone is writing zero bytes using WriteFile to a pty pipe, I'm
-ok with that.
-
-2012-05-14 cgf-000007
-
-<1.7.16>
-- Fix invocation of strace from a cygwin process. Fixes:
- http://cygwin.com/ml/cygwin/2012-05/msg00292.html
-</1.7.16>
-
-The change in cgf-000004 introduced a problem for processes which load
-cygwin1.dll dynamically. strace.exe is the most prominent example of
-this.
-
-Since the parent handle is now closed for "non-Cygwin" processes, when
-strace.exe tried to dynamically load cygwin1.dll, the handle was invalid
-and child_info_spawn::handle_spawn couldn't use retrieve information
-from the parent. This eventually led to a strace_printf error due to an
-attempt to dereference an unavailable cygheap. Probably have to fix
-this someday. You shouldn't use the cygheap while attempting to print
-an error about the inavailability of said cygheap.
-
-This was fixed by saving the parent pid in child_info_spawn and calling
-OpenProcess for the parent pid and using that handle iff a process is
-dynamically loaded.
-
-2012-05-12 cgf-000006
-
-<1.7.16>
-- Fix hang when calling pthread_testcancel in a canceled thread.
- Fixes some of: http://cygwin.com/ml/cygwin/2012-05/msg00186.html
-</1.7.16>
-
-This should fix the first part of the reported problem in the above
-message. The cancel seemed to actually be working but, the fprintf
-eventually ended up calling pthread_testcancel. Since we'd gotten here
-via a cancel, it tried to recursively call the cancel handler causing a
-recursive loop.
-
-2012-05-12 cgf-000005
-
-<1.7.16>
-- Fix pipe creation problem which manifested as a problem creating a
-fifo. Fixes: http://cygwin.com/ml/cygwin/2012-05/msg00253.html
-</1.7.16>
-
-My change on 2012-04-28 introduced a problem with fifos. The passed
-in name was overwritten. This was because I wasn't properly keeping
-track of the length of the generated pipe name when there was a
-name passed in to fhandler_pipe::create.
-
-There was also another problem in fhandler_pipe::create. Since fifos
-use PIPE_ACCESS_DUPLEX and PIPE_ACCESS_DUPLEX is an or'ing of
-PIPE_ACCESS_INBOUND and PIPE_ACCESS_OUTBOUND, using PIPE_ACCESS_OUTBOUND
-as a "never-used" option for PIPE_ADD_PID in fhandler.h was wrong. So,
-fifo creation attempted to add the pid of a pipe to the name which is
-wrong for fifos.
-
-2012-05-08 cgf-000004
-
-The change for cgf-000003 introduced a new problem:
-http://cygwin.com/ml/cygwin/2012-05/msg00154.html
-http://cygwin.com/ml/cygwin/2012-05/msg00157.html
-
-Since a handle associated with the parent is no longer being duplicated
-into a non-cygwin "execed child", Windows is free to reuse the pid of
-the parent when the parent exits. However, since we *did* duplicate a
-handle pointing to the pid's shared memory area into the "execed child",
-the shared memory for the pid was still active.
-
-Since the shared memory was still available, if a new process reuses the
-previous pid, Cygwin would detect that the shared memory was not created
-and had a "PID_REAPED" flag. That was considered an error, and, so, it
-would set procinfo to NULL and pinfo::thisproc would die since this
-situation is not supposed to occur.
-
-I fixed this in two ways:
-
-1) If a shared memory region has a PID_REAPED flag then zero it and
-reuse it. This should be safe since you are not really supposed to be
-querying the shared memory region for anything after PID_REAPED has been
-set.
-
-2) Forego duping a copy of myself_pinfo if we're starting a non-cygwin
-child for exec.
-
-It seems like 2) is a common theme and an audit of all of the handles
-that are being passed to non-cygwin children is in order for 1.7.16.
-
-The other minor modification that was made in this change was to add the
-pid of the failing process to fork error output. This helps slightly
-when looking at strace output, even though in this case it was easy to
-find what was failing by looking for '^---' when running the "stv"
-strace dumper. That found the offending exception quickly.
-
-2012-05-07 cgf-000003
-
-<1.7.15>
-Don't make Cygwin wait for all children of a non-cygwin child program.
-Fixes: http://cygwin.com/ml/cygwin/2012-05/msg00063.html,
- http://cygwin.com/ml/cygwin/2012-05/msg00075.html
-</1.7.15>
-
-This problem is due to a recent change which added some robustness and
-speed to Cygwin's exec/spawn handling by not trying to force inheritance
-every time a process is started. See ChangeLog entries starting on
-2012-03-20, and multiple on 2012-03-21.
-
-Making the handle inheritable meant that, as usual, there were problems
-with non-Cygwin processes. When Cygwin "execs" a non-Cygwin process N,
-all of its N + 1, N + 2, ... children will also inherit the handle.
-That means that Cygwin will wait until all subprocesses have exited
-before it returns.
-
-I was willing to make this a restriction of starting non-Cygwin
-processes but the problem with allowing that is that it can cause the
-creation of a "limbo" pid when N exits and N + 1 and friends are still
-around. In this scenario, Cygwin dutifully notices that process N has
-died and sets the exit code to indicate that but N's parent will wait on
-rd_proc_pipe and will only return when every N + ... windows process
-has exited.
-
-The removal of cygheap::pid_handle was not related to the initial
-problem that I set out to fix. The change came from the realization
-that we were duping the current process handle into the child twice and
-only needed to do it once. The current process handle is used by exec
-to keep the Windows pid "alive" so that it will not be reused. So, now
-we just close parent in child_info_spawn::handle_spawn iff we're not
-execing.
-
-In debugging this it bothered me that 'ps' identified a nonactive pid as
-active. Part of the reason for this was the 'parent' handle in
-child_info was opened in non-Cygwin processes, keeping the pid alive.
-That has been kluged around (more changes after 1.7.15) but that didn't
-fix the problem. On further investigation, this seems to be caused by
-the fact that the shared memory region pid handles were still being
-passed to non-cygwin children, keeping the pid alive in a limbo-like
-fashion. This was easily fixed by having pinfo::init() consider a
-memory region with PID_REAPED as not available. A more robust fix
-should be considered for 1.7.15+ where these handles are not passed
-to non-cygwin processes.
-
-This fixed the problem where a pid showed up in the list after a user
-does something like: "bash$ cmd /c start notepad" but, for some reason,
-it does not fix the problem where "bash$ setsid cmd /c start notepad".
-That bears investigation after 1.7.15 is released but it is not a
-regression and so is not a blocker for the release.
-
-2012-05-03 cgf-000002
-
-<1.7.15>
-Fix problem where too much input was attempted to be read from a
-pty slave. Fixes: http://cygwin.com/ml/cygwin/2012-05/msg00049.html
-</1.7.15>
-
-My change on 2012/04/05 reintroduced the problem first described by:
-http://cygwin.com/ml/cygwin/2011-10/threads.html#00445
-
-The problem then was, IIRC, due to the fact that bytes sent to the pty
-pipe were not written as records. Changing pipe to PIPE_TYPE_MESSAGE in
-pipe.cc fixed the problem since writing lines to one side of the pipe
-caused exactly that the number of characters to be read on the other
-even if there were more characters in the pipe.
-
-To debug this, I first replaced fhandler_tty.cc with the 1.258,
-2012/04/05 version. The test case started working when I did that.
-
-So, then, I replaced individual functions, one at a time, in
-fhandler_tty.cc with their previous versions. I'd expected this to be a
-problem with fhandler_pty_master::process_slave_output since that had
-seen the most changes but was surprised to see that the culprit was
-fhandler_pty_slave::read().
-
-The reason was that I really needed the bytes_available() function to
-return the number of bytes which would be read in the next operation
-rather than the number of bytes available in the pipe. That's because
-there may be a number of lines available to be read but the number of
-bytes which will be read by ReadFile should reflect the mode of the pty
-and, if there is a line to read, only the number of bytes in the line
-should be seen as available for the next read.
-
-Having bytes_available() return the number of bytes which would be read
-seemed to fix the problem but it could subtly change the behavior of
-other callers of this function. However, I actually think this is
-probably a good thing since they probably should have been seeing the
-line behavior.
-
-2012-05-02 cgf-000001
-
-<1.7.15>
-Fix problem setting parent pid to 1 when process with children execs
-itself. Fixes: http://cygwin.com/ml/cygwin/2012-05/msg00009.html
-</1.7.15>
-
-Investigating this problem with strace showed that ssh-agent was
-checking the parent pid and getting a 1 when it shouldn't have. Other
-stuff looked ok so I chose to consider this a smoking gun.
-
-Going back to the version that the OP said did not have the problem, I
-worked forward until I found where the problem first occurred -
-somewhere around 2012-03-19. And, indeed, the getppid call returned the
-correct value in the working version. That means that this stopped
-working when I redid the way the process pipe was inherited around
-this time period.
-
-It isn't clear why (and I suspect I may have to debug this further at
-some point) this hasn't always been a problem but I made the obvious fix.
-We shouldn't have been setting ppid = 1 when we're about to pass off to
-an execed process.
-
-As I was writing this, I realized that it was necessary to add some
-additional checks. Just checking for "have_execed" isn't enough. If
-we've execed a non-cygwin process then it won't know how to deal with
-any inherited children. So, always set ppid = 1 if we've execed a
-non-cygwin process.
diff --git a/winsup/cygwin/Makefile.in b/winsup/cygwin/Makefile.in
deleted file mode 100644
index 3d09e2133..000000000
--- a/winsup/cygwin/Makefile.in
+++ /dev/null
@@ -1,728 +0,0 @@
-# Makefile.in for Cygwin.
-# Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-# 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Red Hat, Inc.
-#
-# This file is part of Cygwin.
-#
-# This software is a copyrighted work licensed under the terms of the
-# Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-# details.
-# configure_input: @configure_input@
-
-# This makefile requires GNU make.
-
-srcdir:=@srcdir@
-target_builddir:=@target_builddir@
-winsup_srcdir:=@winsup_srcdir@
-configure_args=@configure_args@
-
-export CC:=@CC@
-export CXX:=@CXX@
-
-CFLAGS?=@CFLAGS@
-CXXFLAGS?=@CXXFLAGS@
-
-include ${srcdir}/../Makefile.common
-
-# environment variables used by ccwrap
-export CCWRAP_HEADERS:=. ${srcdir}
-export CCWRAP_SYSTEM_HEADERS:=@cygwin_headers@ @newlib_headers@
-export CCWRAP_DIRAFTER_HEADERS:=@windows_headers@
-
-VPATH+=$(srcdir)/regex $(srcdir)/lib $(srcdir)/libc
-
-target_cpu:=@target_cpu@
-target_alias:=@target_alias@
-build_alias:=@build_alias@
-host_alias:=@host_alias@
-prefix:=@prefix@
-
-program_transform_name:=@program_transform_name@
-exec_prefix:=@exec_prefix@
-bindir:=@bindir@
-libdir:=@libdir@
-mandir:=@mandir@
-sysconfdir:=@sysconfdir@
-datarootdir:=@datarootdir@
-ifeq ($(target_alias),$(host_alias))
-ifeq ($(build_alias),$(host_alias))
-tooldir:=$(exec_prefix)
-else
-tooldir:=$(exec_prefix)/$(target_alias)
-endif
-else
-tooldir:=$(exec_prefix)/$(target_alias)
-endif
-datadir:=@datadir@
-infodir:=@infodir@
-includedir:=@includedir@
-
-override INSTALL:=@INSTALL@
-override INSTALL_PROGRAM:=@INSTALL_PROGRAM@
-override INSTALL_DATA:=@INSTALL_DATA@
-
-WINDOWS_LIBDIR:=@windows_libdir@
-
-cygserver_blddir:=${target_builddir}/winsup/cygserver
-LIBSERVER:=${cygserver_blddir}/libcygserver.a
-
-LIBC:=$(newlib_build)/libc/libc.a
-LIBM:=$(newlib_build)/libm/libm.a
-CRT0:=$(cygwin_build)/crt0.o
-
-#
-# --enable options from configure
-#
-MT_SAFE:=@MT_SAFE@
-CCEXTRA=
-COMMON_CFLAGS=-MMD ${$(*F)_CFLAGS} -Werror -fmerge-constants -ftracer $(CCEXTRA)
-ifeq ($(target_cpu),x86_64)
-COMMON_CFLAGS+=-mcmodel=small
-endif
-COMPILE.cc+=${COMMON_CFLAGS}
-COMPILE.c+=${COMMON_CFLAGS}
-
-AR:=@AR@
-AR_FLAGS:=qv
-RANLIB:=@RANLIB@
-LD:=@LD@
-DLLTOOL:=@DLLTOOL@
-WINDRES:=@WINDRES@
-AS:=@AS@
-NM:=@NM@
-OBJCOPY:=@OBJCOPY@
-OBJDUMP:=@OBJDUMP@
-STRIP:=@STRIP@
-LDSCRIPT:=cygwin.sc
-MKDIRP:=$(INSTALL) -m 755 -d
-
-@SET_MAKE@
-
-# Setup the testing framework, if you have one
-EXPECT = `if [ -f $${rootme}/../../expect/expect$(EXEEXT) ] ; then \
- echo $${rootme}/../../expect/expect$(EXEEXT) ; \
- else echo expect ; fi`
-
-RUNTEST = `if [ -f $${srcdir}/../dejagnu/runtest ] ; then \
- echo $${srcdir}/../dejagnu/runtest ; \
- else echo runtest; fi`
-RUNTESTFLAGS =
-
-# Parameters used in building the cygwin.dll.
-# We build as cygwin0.dll and rename at install time to overcome
-# native rebuilding issues (we don't want the build tools to see a partially
-# built cygwin.dll and attempt to use it instead of the old one).
-
-DLL_NAME:=@DLL_NAME@
-TEST_DLL_NAME:=${patsubst %1.dll,%0.dll,@DLL_NAME@}
-TEST_LIB_NAME:=libcygwin0.a
-STATIC_LIB_NAME:=libcygwin_s.a
-DIN_FILE=@DIN_FILE@ common.din
-DEF_FILE:=cygwin.def
-TLSOFFSETS_H:=@TLSOFFSETS_H@
-DLL_ENTRY:=@DLL_ENTRY@
-
-LIBGMON_A:=libgmon.a
-CYGWIN_START:=crt0.o
-GMON_START:=gcrt0.o
-
-toolopts:=--cpu=${target_cpu} --ar=${AR} --as=${AS} --nm=${NM} --objcopy=${OBJCOPY}
-speclib=\
- ${srcdir}/speclib ${toolopts} \
- --exclude='cygwin' \
- --exclude='(?i:dll)' \
- --exclude='reloc' \
- --exclude='^main$$' \
- --exclude='^_main$$' \
- $^
-
-# Some things want these from libc, but they have their own static
-# data which apps can get to, which is a pain in the dll, so we
-# include them directly into the library.
-
-LIBCOS:=${sort ${addsuffix .o,${basename ${notdir ${wildcard $(srcdir)/lib/*.c}}}} \
- ${addsuffix .o,${basename ${notdir ${wildcard $(srcdir)/lib/*.cc}}}}}
-
-# Build all source files in the config directory
-
-EXTRA_OFILES:=
-
-MALLOC_OFILES:=malloc.o
-
-DLL_IMPORTS:=${shell $(CC) -print-file-name=w32api/libkernel32.a} ${shell $(CC) -print-file-name=w32api/libntdll.a}
-
-MT_SAFE_OBJECTS:=
-#
-DLL_OFILES:= \
- advapi32.o \
- arc4random.o \
- assert.o \
- autoload.o \
- base64.o \
- bsdlib.o \
- ctype.o \
- cxx.o \
- cygheap.o \
- cygthread.o \
- cygtls.o \
- cygwait.o \
- cygxdr.o \
- dcrt0.o \
- debug.o \
- devices.o \
- dir.o \
- dlfcn.o \
- dll_init.o \
- dtable.o \
- environ.o \
- errno.o \
- exceptions.o \
- exec.o \
- external.o \
- fcntl.o \
- fenv.o \
- fhandler.o \
- fhandler_clipboard.o \
- fhandler_console.o \
- fhandler_dev.o \
- fhandler_disk_file.o \
- fhandler_dsp.o \
- fhandler_fifo.o \
- fhandler_floppy.o \
- fhandler_mailslot.o \
- fhandler_netdrive.o \
- fhandler_nodevice.o \
- fhandler_proc.o \
- fhandler_process.o \
- fhandler_procnet.o \
- fhandler_procsys.o \
- fhandler_procsysvipc.o \
- fhandler_random.o \
- fhandler_raw.o \
- fhandler_registry.o \
- fhandler_serial.o \
- fhandler_socket.o \
- fhandler_tape.o \
- fhandler_termios.o \
- fhandler_tty.o \
- fhandler_virtual.o \
- fhandler_windows.o \
- fhandler_zero.o \
- flock.o \
- fnmatch.o \
- fork.o \
- fts.o \
- ftw.o \
- getopt.o \
- glob.o \
- glob_pattern_p.o \
- globals.o \
- grp.o \
- heap.o \
- hookapi.o \
- inet_addr.o \
- inet_network.o \
- init.o \
- ioctl.o \
- ipc.o \
- kernel32.o \
- ldap.o \
- libstdcxx_wrapper.o \
- localtime.o \
- lsearch.o \
- malloc_wrapper.o \
- minires-os-if.o \
- minires.o \
- miscfuncs.o \
- mktemp.o \
- mmap.o \
- msg.o \
- mount.o \
- net.o \
- netdb.o \
- nfs.o \
- nftw.o \
- nlsfuncs.o \
- ntea.o \
- passwd.o \
- path.o \
- pinfo.o \
- pipe.o \
- poll.o \
- posix_ipc.o \
- pseudo-reloc.o \
- pthread.o \
- quotactl.o \
- random.o \
- regcomp.o \
- regerror.o \
- regexec.o \
- regfree.o \
- registry.o \
- resource.o \
- rexec.o \
- rcmd.o \
- scandir.o \
- sched.o \
- sec_acl.o \
- sec_auth.o \
- sec_helper.o \
- security.o \
- select.o \
- sem.o \
- setlsapwd.o \
- shared.o \
- shm.o \
- sigfe.o \
- signal.o \
- sigproc.o \
- smallprint.o \
- spawn.o \
- strace.o \
- strfmon.o \
- strfuncs.o \
- strptime.o \
- strsep.o \
- strsig.o \
- sync.o \
- syscalls.o \
- sysconf.o \
- syslog.o \
- termios.o \
- thread.o \
- timer.o \
- times.o \
- tls_pbuf.o \
- tty.o \
- uinfo.o \
- uname.o \
- wait.o \
- wincap.o \
- window.o \
- winf.o \
- wow64.o \
- xsique.o \
- $(EXTRA_OFILES) \
- $(MALLOC_OFILES) \
- $(MT_SAFE_OBJECTS)
-
-EXCLUDE_STATIC_OFILES:=$(addprefix --exclude=,\
- cygtls.o \
- dcrt0.o \
- exceptions.o \
- fork.o \
- signal.o \
- spawn.o \
-)
-
-ifdef PREPROCESS
-override DLL_OFILES:=$(patsubst %.o,%_E,${DLL_OFILES})
-override EXCLUDE_STATIC_OFILES:=$(patsubst %.o,%_E,${EXCLUDE_STATIC_OFILES})
-override EXTRA_OFILES=$(patsubst %.o,%_E,${DLL_OFILES}))
-override MALLOC_OFILES:=$(patsubst %.o,%.E,${MALLOC_OFILES})
-endif #PREPROCESS
-
-ifeq ($(target_cpu),x86_64)
-# Needed by mcountFunc.S to choose the right code path and symbol names
-ASFLAGS:=-D_WIN64
-endif
-
-GMON_OFILES:=gmon.o mcount.o profil.o mcountFunc.o
-
-NEW_FUNCTIONS:=$(addprefix --replace=,\
- atexit= \
- timezone= \
- __xdrrec_getrec= \
- __xdrrec_setnonblock= \
- xdr_array= \
- xdr_bool= \
- xdr_bytes= \
- xdr_char= \
- xdr_double= \
- xdr_enum= \
- xdr_float= \
- xdr_free= \
- xdr_hyper= \
- xdr_int= \
- xdr_int16_t= \
- xdr_int32_t= \
- xdr_int64_t= \
- xdr_int8_t= \
- xdr_long= \
- xdr_longlong_t= \
- xdr_netobj= \
- xdr_opaque= \
- xdr_pointer= \
- xdr_reference= \
- xdr_short= \
- xdr_sizeof= \
- xdr_string= \
- xdr_u_char= \
- xdr_u_hyper= \
- xdr_u_int= \
- xdr_u_int16_t= \
- xdr_u_int32_t= \
- xdr_u_int64_t= \
- xdr_u_int8_t= \
- xdr_u_long= \
- xdr_u_longlong_t= \
- xdr_u_short= \
- xdr_uint16_t= \
- xdr_uint32_t= \
- xdr_uint64_t= \
- xdr_uint8_t= \
- xdr_union= \
- xdr_vector= \
- xdr_void= \
- xdr_wrapstring= \
- xdrmem_create= \
- xdrrec_create= \
- xdrrec_endofrecord= \
- xdrrec_eof= \
- xdrrec_skiprecord= \
- xdrstdio_create= \
-)
-ifeq ($(target_cpu),x86_64)
-NEW_FUNCTIONS+=
-else
-NEW_FUNCTIONS+=$(addprefix --replace=,\
- acl=_acl32 \
- aclcheck=_aclcheck32 \
- aclfrommode=_aclfrommode32 \
- aclfrompbits=_aclfrompbits32 \
- aclfromtext=_aclfromtext32 \
- aclsort=_aclsort32 \
- acltomode=_acltomode32 \
- acltopbits=_acltopbits32 \
- acltotext=_acltotext32 \
- chown=_chown32 \
- facl=_facl32 \
- fchown=_fchown32 \
- fcntl=_fcntl64 \
- fdopen=_fdopen64 \
- fgetpos=_fgetpos64 \
- fopen=_fopen64 \
- freopen=_freopen64 \
- fseeko=_fseeko64 \
- fsetpos=_fsetpos64 \
- fstat=_fstat64 \
- ftello=_ftello64 \
- ftruncate=_ftruncate64 \
- getegid=_getegid32 \
- geteuid=_geteuid32 \
- getgid=_getgid32 \
- getgrent=_getgrent32 \
- getgrgid=_getgrgid32 \
- getgrnam=_getgrnam32 \
- getgroups=_getgroups32 \
- getpwuid=_getpwuid32 \
- getpwuid_r=_getpwuid_r32 \
- getuid=_getuid32 \
- initgroups=_initgroups32 \
- lchown=_lchown32 \
- lseek=_lseek64 \
- lstat=_lstat64 \
- mknod=_mknod32 \
- mmap=_mmap64 \
- open=_open64 \
- setegid=_setegid32 \
- seteuid=_seteuid32 \
- setgid=_setgid32 \
- setgroups=_setgroups32 \
- setregid=_setregid32 \
- setreuid=_setreuid32 \
- setuid=_setuid32 \
- stat=_stat64 \
- tmpfile=_tmpfile64 \
- truncate=_truncate64 \
-)
-endif
-
-API_VER:=$(srcdir)/include/cygwin/version.h
-
-LIB_NAME:=libcygwin.a
-SUBLIBS:=libpthread.a libutil.a ${CURDIR}/libm.a ${CURDIR}/libc.a libdl.a libresolv.a librt.a
-EXTRALIBS:=libautomode.a libbinmode.a libtextmode.a libtextreadmode.a
-INSTOBJS:=automode.o binmode.o textmode.o textreadmode.o
-TARGET_LIBS:=$(LIB_NAME) $(CYGWIN_START) $(GMON_START) $(LIBGMON_A) $(SUBLIBS) $(INSTOBJS) $(EXTRALIBS)
-
-ifneq "${filter -O%,$(CFLAGS)}" ""
-cygheap_CFLAGS:=-fomit-frame-pointer
-cygthread_CFLAGS:=-fomit-frame-pointer
-cygtls_CFLAGS:=-fomit-frame-pointer
-cygwait_CFLAGS=-fomit-frame-pointer
-delqueue_CFLAGS:=-fomit-frame-pointer
-devices_CFLAGS:=-fomit-frame-pointer
-dir_CFLAGS:=-fomit-frame-pointer
-dlfcn_CFLAGS:=-fomit-frame-pointer
-dll_init_CFLAGS:=-fomit-frame-pointer
-dtable_CFLAGS:=-fomit-frame-pointer -fcheck-new
-fcntl_CFLAGS:=-fomit-frame-pointer
-fenv_CFLAGS:=-fomit-frame-pointer
-fhandler_CFLAGS:=-fomit-frame-pointer
-fhandler_clipboard_CFLAGS:=-fomit-frame-pointer
-fhandler_console_CFLAGS:=-fomit-frame-pointer
-fhandler_disk_file_CFLAGS:=-fomit-frame-pointer
-fhandler_dsp_CFLAGS:=-fomit-frame-pointer
-fhandler_floppy_CFLAGS:=-fomit-frame-pointer
-fhandler_netdrive_CFLAGS:=-fomit-frame-pointer
-fhandler_proc_CFLAGS:=-fomit-frame-pointer
-fhandler_process_CFLAGS:=-fomit-frame-pointer
-fhandler_random_CFLAGS:=-fomit-frame-pointer
-fhandler_raw_CFLAGS:=-fomit-frame-pointer
-fhandler_registry_CFLAGS:=-fomit-frame-pointer
-fhandler_serial_CFLAGS:=-fomit-frame-pointer
-fhandler_socket_CFLAGS:=-fomit-frame-pointer
-fhandler_syslog_CFLAGS:=-fomit-frame-pointer
-fhandler_tape_CFLAGS:=-fomit-frame-pointer
-fhandler_termios_CFLAGS:=-fomit-frame-pointer
-fhandler_tty_CFLAGS:=-fomit-frame-pointer
-fhandler_virtual_CFLAGS:=-fomit-frame-pointer
-fhandler_windows_CFLAGS:=-fomit-frame-pointer
-fhandler_zero_CFLAGS:=-fomit-frame-pointer
-flock_CFLAGS:=-fomit-frame-pointer
-grp_CFLAGS:=-fomit-frame-pointer
-libstdcxx_wrapper_CFLAGS:=-fomit-frame-pointer
-localtime_CFLAGS:=-fwrapv
-malloc_CFLAGS:=-fomit-frame-pointer -O3
-malloc_wrapper_CFLAGS:=-fomit-frame-pointer
-miscfuncs_CFLAGS:=-fomit-frame-pointer
-net_CFLAGS:=-fomit-frame-pointer
-passwd_CFLAGS:=-fomit-frame-pointer
-path_CFLAGS=-fomit-frame-pointer
-regcomp_CFLAGS=-fomit-frame-pointer
-regerror_CFLAGS=-fomit-frame-pointer
-regexec_CFLAGS=-fomit-frame-pointer
-regfree_CFLAGS=-fomit-frame-pointer
-shared_CFLAGS:=-fomit-frame-pointer
-sync_CFLAGS:=-fomit-frame-pointer -O3
-smallprint_CFLAGS:=-fomit-frame-pointer
-syscalls_CFLAGS:=-fomit-frame-pointer
-sysconf_CFLAGS:=-fomit-frame-pointer
-uinfo_CFLAGS:=-fomit-frame-pointer
-endif
-
-fhandler_proc_CFLAGS+=-DUSERNAME="\"$(USER)\"" -DHOSTNAME="\"$(HOSTNAME)\""
-fhandler_proc_CFLAGS+=-DGCC_VERSION="\"`$(CC) -v 2>&1 | tail -n 1`\""
-
-_cygwin_crt0_common_STDINCFLAGS:=yes
-libstdcxx_wrapper_STDINCFLAGS:=yes
-cxx_STDINCFLAGS:=yes
-
-.PHONY: all force dll_ofiles install all_target install_target all_host install_host \
- install install-libs install-headers
-
-all_host=@all_host@
-install_host=@install_host@
-
-all: all_target $(all_host)
-
-all_target: $(TARGET_LIBS)
-
-all_host: $(TEST_LIB_NAME)
-
-force:
-
-install: install-libs install-headers install-man install-ldif install_target \
- $(install_host) $(install_target)
-
-uninstall: uninstall-libs uninstall-headers uninstall-man
-
-install-libs: $(TARGET_LIBS)
- @$(MKDIRP) $(DESTDIR)$(bindir)
- $(INSTALL_PROGRAM) $(TEST_DLL_NAME) $(DESTDIR)$(bindir)/$(DLL_NAME); \
- for i in $^; do \
- $(INSTALL_DATA) $$i $(DESTDIR)$(tooldir)/lib/`basename $$i` ; \
- done
- cd $(DESTDIR)$(tooldir)/lib && ln -sf libcygwin.a libg.a
-
-install-headers:
- cd $(srcdir); \
- for sub in `find include -name '[a-z]*' -type d -print | sort`; do \
- $(MKDIRP) $(DESTDIR)$(tooldir)/$$sub; \
- for i in $$sub/*.h ; do \
- $(INSTALL_DATA) $$i $(DESTDIR)$(tooldir)/$$sub/`basename $$i` ; \
- done ; \
- done ; \
-
-install-man:
- @$(MKDIRP) $(DESTDIR)$(mandir)/man2 $(DESTDIR)$(mandir)/man3 $(DESTDIR)$(mandir)/man5 $(DESTDIR)$(mandir)/man7
- cd $(srcdir); \
- for i in `find . -type f -name '*.2'`; do \
- $(INSTALL_DATA) $$i $(DESTDIR)$(mandir)/man2/`basename $$i` ; \
- done; \
- for i in `find . -type f -name '*.3'`; do \
- $(INSTALL_DATA) $$i $(DESTDIR)$(mandir)/man3/`basename $$i` ; \
- done; \
- for i in `find . -type f -name '*.5'`; do \
- $(INSTALL_DATA) $$i $(DESTDIR)$(mandir)/man5/`basename $$i` ; \
- done; \
- for i in `find . -type f -name '*.7'`; do \
- $(INSTALL_DATA) $$i $(DESTDIR)$(mandir)/man7/`basename $$i` ; \
- done
-
-install-ldif:
- @$(MKDIRP) $(DESTDIR)$(datarootdir)/cygwin
- $(INSTALL_DATA) $(srcdir)/cygwin.ldif $(DESTDIR)$(datarootdir)/cygwin
-
-install_target:
-
-install_host:
-
-uninstall-libs: $(TARGET_LIBS)
- rm -f $(bindir)/$(DLL_NAME); \
- for i in $^; do \
- rm -f $(tooldir)/lib/$$i ; \
- done
-
-uninstall-headers:
- cd $(srcdir); \
- for sub in `find include -name '[a-z]*' -type d -print | sort`; do \
- for i in $$sub/*.h ; do \
- rm -f $(tooldir)/$$sub/`basename $$i` ; \
- done ; \
- done ; \
-
-uninstall-man:
- cd $(srcdir); \
- for i in `find . -type f -name '*.2'`; do \
- rm -f $(DESTDIR)$(mandir)/man2/`basename $$i` ; \
- done; \
- for i in `find . -type f -name '*.3'`; do \
- rm -f $(DESTDIR)$(mandir)/man3/`basename $$i` ; \
- done; \
- for i in `find . -type f -name '*.5'`; do \
- rm -f $(DESTDIR)$(mandir)/man5/`basename $$i` ; \
- done; \
- for i in `find . -type f -name '*.7'`; do \
- rm -f $(DESTDIR)$(mandir)/man7/`basename $$i` ; \
- done
-
-clean:
- -rm -f *.o *.dll *.dbg *.a *.exp junk *.base version.cc winver_stamp *.exe *.d *stamp* *_magic.h sigfe.s cygwin.def globals.h $(srcdir)/$(TLSOFFSETS_H) $(srcdir)/devices.cc
- -@$(MAKE) -C ${cygserver_blddir} libclean
-
-maintainer-clean realclean: clean
- @echo "This command is intended for maintainers to use;"
- @echo "it deletes files that may require special tools to rebuild."
- -rm -fr configure
-
-# Rule to build LDSCRIPT
-$(LDSCRIPT): $(LDSCRIPT).in
- $(CC) -E - -P < $^ -o $@
-
-# Rule to build cygwin.dll
-$(TEST_DLL_NAME): $(LDSCRIPT) dllfixdbg $(DLL_OFILES) $(LIBSERVER) $(LIBC) $(LIBM) $(API_VER) Makefile winver_stamp
- $(CXX) $(CXXFLAGS) \
- -mno-use-libstdc-wrappers -L${WINDOWS_LIBDIR} \
- -Wl,--gc-sections $(nostdlib) -Wl,-T$(firstword $^) -static \
- -Wl,--heap=0 -Wl,--out-implib,cygdll.a -shared -o $@ \
- -e $(DLL_ENTRY) $(DEF_FILE) $(DLL_OFILES) version.o winver.o \
- $(MALLOC_OBJ) $(LIBSERVER) $(LIBM) $(LIBC) \
- -lgcc $(DLL_IMPORTS) -Wl,-Map,cygwin.map
- @$(word 2,$^) $(OBJDUMP) $(OBJCOPY) $@ ${patsubst %0.dll,%1.dbg,$@}
- @ln -f $@ new-$(DLL_NAME)
-
-# Rule to build libcygwin.a
-$(LIB_NAME): $(DEF_FILE) $(LIBCOS) | $(TEST_DLL_NAME)
- ${srcdir}/mkimport ${toolopts} ${NEW_FUNCTIONS} $@ cygdll.a $(wordlist 2,99,$^)
-
-${STATIC_LIB_NAME}: mkstatic ${TEST_DLL_NAME}
- perl -d $< -x ${EXCLUDE_STATIC_OFILES} --library=${LIBC} --library=${LIBM} --ar=${AR} $@ cygwin.map
-
-# Rule to make stub library used by testsuite
-# dependency set to $(LIB_NAME) to accommodate make -j2.
-$(TEST_LIB_NAME): $(LIB_NAME)
- perl -p -e 'BEGIN{binmode(STDIN); binmode(STDOUT);}; s/cygwin1/cygwin0/g' < $? > $@
-
-$(LIBSERVER): ${cygserver_blddir}/Makefile
- $(MAKE) -C ${cygserver_blddir} libcygserver.a
-
-${cygserver_blddir}/Makefile:
- /bin/mkdir -p ${@D}
- cd ${@D} && exec /bin/sh $(dir ${srcdir})/cygserver/configure ${configure_args}
-
-dll_ofiles: $(DLL_OFILES)
-
-$(LIBGMON_A): $(GMON_OFILES) $(GMON_START)
- $(AR) rcv $(LIBGMON_A) $(GMON_OFILES)
-
-version.cc winver.o: winver_stamp
- @ :
-
-globals.h: mkglobals_h globals.cc
- $^ > $@
-
-${DLL_OFILES} ${LIBCOS}: globals.h
-
-shared_info_magic.h: cygmagic shared_info.h
- /bin/sh $(word 1,$^) $@ "${COMPILE.cc} -E -x c++" $(word 2,$^) SHARED_MAGIC 'class shared_info' USER_MAGIC 'class user_info'
-
-child_info_magic.h: cygmagic child_info.h
- /bin/sh $(word 1,$^) $@ "${COMPILE.cc} -E -x c++" $(word 2,$^) CHILD_INFO_MAGIC 'class child_info'
-
-dcrt0.o sigproc.o: child_info_magic.h
-
-shared.o: shared_info_magic.h
-
-$(srcdir)/devices.cc: gendevices devices.in devices.h
- ${wordlist 1,2,$^} $@
-
-${CURDIR}/libc.a: ${LIB_NAME} ${CURDIR}/libm.a libpthread.a libutil.a
- ${speclib} -v ${@F}
-
-${CURDIR}/libm.a: ${LIB_NAME} $(LIBM)
- ${speclib} ${@F}
-
-libpthread.a: ${LIB_NAME} pthread.o thread.o
- ${speclib} ${@F}
-
-libutil.a: ${LIB_NAME} bsdlib.o
- ${speclib} ${@F}
-
-libdl.a: ${LIB_NAME} dlfcn.o
- ${speclib} ${@F}
-
-libresolv.a: ${LIB_NAME} minires.o
- ${speclib} ${@F}
-
-librt.a: ${LIB_NAME} posix_ipc.o
- ${speclib} ${@F}
-
-${EXTRALIBS}: lib%.a: %.o
- $(AR) cru $@ $?
-
-winver_stamp: mkvers.sh include/cygwin/version.h winver.rc $(DLL_OFILES)
- @echo "Making version.o and winver.o";\
- /bin/sh ${word 1,$^} ${word 2,$^} ${word 3,$^} $(WINDRES) ${CFLAGS} $(addprefix -I,${CCWRAP_SYSTEM_HEADERS} ${CCWRAP_DIRAFTER_HEADERS}) S&& \
- $(COMPILE.cc) -c -o version.o version.cc && \
- touch $@
-
-Makefile: ${srcdir}/Makefile.in
- /bin/sh ./config.status
-
-$(DEF_FILE): gendef $(srcdir)/$(TLSOFFSETS_H) $(DIN_FILE)
- $(word 1,$^) --cpu=${target_cpu} --output-def=$@ --tlsoffsets=$(word 2,$^) $(wordlist 3,99,$^)
-
-$(srcdir)/$(TLSOFFSETS_H): gentls_offsets cygtls.h
- $^ $@ $(target_cpu) $(COMPILE.cc) -c
-
-sigfe.s: $(DEF_FILE)
- @[ -s $@ ] || \
- { rm -f $(DEF_FILE); $(MAKE) -s -j1 $(DEF_FILE); }; \
- [ -s $@ ] && touch $@
-
-sigfe.o: sigfe.s
- $(CC) -c -o $@ $<
-
-ctags: CTAGS
-tags: CTAGS
-CTAGS:
- -cd $(srcdir) && ctags -R --regex-C++='/^([a-zA-Z0-9_]*::[a-zA-Z0-9_]*) /\1/f/' .
-
-deps:=${wildcard *.d}
-ifneq (,$(deps))
-include $(deps)
-endif
-
-%: RCS/%,v
diff --git a/winsup/cygwin/ROADMAP b/winsup/cygwin/ROADMAP
deleted file mode 100644
index fd0387d59..000000000
--- a/winsup/cygwin/ROADMAP
+++ /dev/null
@@ -1,129 +0,0 @@
-
- WINSUP ROADMAP
-
-The purpose of this document is to give the briefest overview of how
-the various parts of cygwin work together and where everything can be
-found. The intended audience is people developing the cygwin dll
-itself. Comments to dj@cygnus.com.
-
-=== cygwin1.dll source files
-
-- overhead
-.h winsup autoload debug external shared sync
-.cc assert dcrt0 debug external init ntea registry security
- shared smallprint strace sync
-.din cygwin
-.rc winver
-.sgml external shared
-
-- processes
-.h sigproc
-.cc exec fork pinfo resource signal sigproc spawn wait
-
-- signals
-.cc exceptions window
-
-- files and I/O
-.h delqueue fhandler path select
-.cc delqueue dir fhandler* dtable path pipe select tty
-.sgml dtable path
-
-- common unix functions
-.h dll_init tz_posixrules
-.cc dlfcn dll_init environ errno fcntl flog grp ioctl localtime
- malloc passwd scandir strsep syscalls sysconf syslog termios
-.c longjmp setjmp
-.sgml dll_init
-
-- unix emulation
-.cc heap mmap net times unifo uname
-
-
---- if MT_SAFE
-.h thread
-.cc pthread thread
-
---- from other places
-regex/*
-../libiberty/{random,strsignal}
-../newlib/* (libc)
-
-=== libcygwin.a source files
-
-libccrt0.cc
-libcmain.cc
-dll_entry.cc
-dll_main.cc
-getopt.c
-
-=== gmon (profiling, -pg)
-
-gcrt0.c
-gmon.c gmon.h
-mcount.c
-profil.c profil.h
-
-=== entry points
-
-- normal cygwin program
-
-newlib/libc/sys/cygwin/crt0.c has mainCRTStartup() and calls cygwin_crt0()
-
-libccrt0.cc has cygwin_crt0() and calls dll_crt0()
-
-dcrt0.cc - has dll_crt0()
-
-Note: dll_init.cc has nothing to do with initializing the cygwin dll.
-It initializes the dlls you have dl_open'd.
-
-- cygwin-built dll
-
-dll_entry.cc - has a macro for wrapping your dll startup function
- (equivalent of DllMain()) in such a way that you get your
- cygwin environment set up automatically when your dll is
- loaded.
-
-dll_main.cc - has empty DllMain() in case you don't have your own
-
-- manually loading cygwin1.dll
-
-init.cc - has dll_entry() which is called by the OS when the dll is
- loaded. It doesn't do much except note if you linked
- cygwin1.dll or are manually loading it.
-
-=== About "fhandlers"
-
-An fhandler is a file type handler. This is where the unix device
-emulation happens.
-
-dtable.cc maps posix file descriptors to a table of file handlers (type
-fhandler) in the dll. It's mostly concerned with managing the table
-of descriptors (open, dup, fork, select). Most of the posix I/O
-system calls (syscalls.cc) use the fdtab table to call the right
-fhandler directly.
-
-fhandler.cc is the base class; specific types are derived as
-appropriate (see fhandler.h). dtable.cc is in charge of selecting and
-creating a suitable fhandler when you open a file. path.cc handles
-emulated files in /dev (like /dev/null) by returning an FH_* value
-from get_device_number (which dtable.cc calls in dtable::build_fhandler).
-
-Note: if you're looking for read() and write(), they call _read() and
-_write() in syscalls.cc. The non-underscored ones are in
-newlib/libc/syscalls and just call the underscored ones.
-
-=== How "fork" works
-
-It all starts in fork() in fork.cc.
-
-Set up a pid in the shared memory area for the new child. Use
-setjmp() to capture state. First time (parent), set up some stuff and
-use CreateProcess to run a second copy of the same executable. The
-second copy will note in the shared memory area that it's a fork, and
-do the longjmp. They sync up and the parent copies all it's program
-memory to the child's address space. There's also code to reload
-dlls, map shared memory and mmap'd files, etc.
-
-Handling the special startup for the child is done in dcrt0.cc in many
-places. This case is triggered by a special StartupInfo structure
-that's passed from the parent to the child in CreateProcessA.
diff --git a/winsup/cygwin/acconfig.h b/winsup/cygwin/acconfig.h
deleted file mode 100644
index 0c1dc6610..000000000
--- a/winsup/cygwin/acconfig.h
+++ /dev/null
@@ -1,11 +0,0 @@
-/* Define if DEBUGGING support is requested. */
-#undef DEBUGGING
-
-/* Define if GCC supports builtin memset. */
-#undef HAVE_BUILTIN_MEMSET
-
-/* Define if MALLOC_DEBUGGING support is requested. */
-#undef MALLOC_DEBUG
-
-/* Define if using new vfork functionality. */
-#undef NEWVFORK
diff --git a/winsup/cygwin/aclocal.m4 b/winsup/cygwin/aclocal.m4
deleted file mode 100644
index c48aad01d..000000000
--- a/winsup/cygwin/aclocal.m4
+++ /dev/null
@@ -1,97 +0,0 @@
-# generated automatically by aclocal 1.12.6 -*- Autoconf -*-
-
-# Copyright (C) 1996-2012 Free Software Foundation, Inc.
-
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-dnl This provides configure definitions used by all the cygwin
-dnl configure.in files.
-
-AC_DEFUN([AC_WINDOWS_HEADERS],[
-AC_ARG_WITH(
- [windows-headers],
- [AS_HELP_STRING([--with-windows-headers=DIR],
- [specify where the windows includes are located])],
- [test -z "$withval" && AC_MSG_ERROR([must specify value for --with-windows-headers])]
-)
-])
-
-AC_DEFUN([AC_WINDOWS_LIBS],[
-AC_ARG_WITH(
- [windows-libs],
- [AS_HELP_STRING([--with-windows-libs=DIR],
- [specify where the windows libraries are located])],
- [test -z "$withval" && AC_MSG_ERROR([must specify value for --with-windows-libs])]
-)
-windows_libdir=$(realdirpath "$with_windows_libs")
-if test -z "$windows_libdir"; then
- windows_libdir=$(realdirpath $(${ac_cv_prog_CC:-$CC} -xc /dev/null -Wl,--verbose=1 -lntdll 2>&1 | sed -rn 's%^.*\s(\S+)/libntdll\..*succeeded%\1%p'))
- if test -z "$windows_libdir"; then
- AC_MSG_ERROR([cannot find windows library files])
- fi
-fi
-AC_SUBST(windows_libdir)
-]
-)
-
-AC_DEFUN([AC_CYGWIN_INCLUDES], [
-addto_CPPFLAGS -nostdinc
-: ${ac_cv_prog_CXX:=$CXX}
-: ${ac_cv_prog_CC:=$CC}
-
-cygwin_headers=$(realdirpath "$winsup_srcdir/cygwin/include")
-if test -z "$cygwin_headers"; then
- AC_MSG_ERROR([cannot find $winsup_srcdir/cygwin/include directory])
-fi
-
-newlib_headers=$(realdirpath $winsup_srcdir/../newlib/libc/include)
-if test -z "$newlib_headers"; then
- AC_MSG_ERROR([cannot find newlib source directory: $winsup_srcdir/../newlib/libc/include])
-fi
-newlib_headers="$target_builddir/newlib/targ-include $newlib_headers"
-
-if test -n "$with_windows_headers"; then
- if test -e "$with_windows_headers/windef.h"; then
- windows_headers="$with_windows_headers"
- else
- AC_MSG_ERROR([cannot find windef.h in specified --with-windows-headers path: $saw_windows_headers]);
- fi
-elif test -d "$winsup_srcdir/w32api/include/windef.h"; then
- windows_headers="$winsup_srcdir/w32api/include"
-else
- windows_headers=$(cd $($ac_cv_prog_CC -xc /dev/null -E -include windef.h 2>/dev/null | sed -n 's%^# 1 "\([^"]*\)/windef\.h".*$%\1%p' | head -n1) 2>/dev/null && pwd)
- if test -z "$windows_headers" -o ! -d "$windows_headers"; then
- AC_MSG_ERROR([cannot find windows header files])
- fi
-fi
-CC=$ac_cv_prog_CC
-CXX=$ac_cv_prog_CXX
-export CC
-export CXX
-AC_SUBST(windows_headers)
-AC_SUBST(newlib_headers)
-AC_SUBST(cygwin_headers)
-])
-
-AC_DEFUN([AC_CONFIGURE_ARGS], [
-configure_args=X
-for f in $ac_configure_args; do
- case "$f" in
- *--srcdir*) ;;
- *) configure_args="$configure_args $f" ;;
- esac
-done
-configure_args=$(/usr/bin/expr "$configure_args" : 'X \(.*\)')
-AC_SUBST(configure_args)
-])
-
-AC_SUBST(target_builddir)
-AC_SUBST(winsup_srcdir)
-
diff --git a/winsup/cygwin/advapi32.cc b/winsup/cygwin/advapi32.cc
deleted file mode 100644
index 07d26e710..000000000
--- a/winsup/cygwin/advapi32.cc
+++ /dev/null
@@ -1,98 +0,0 @@
-/* advapi32.cc: Win32 replacement functions.
-
- Copyright 2011, 2012, 2013 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include <winioctl.h>
-#include "shared_info.h"
-#include "ntdll.h"
-
-#define DEFAULT_NTSTATUS_TO_BOOL_RETURN \
- if (!NT_SUCCESS (status)) \
- SetLastError (RtlNtStatusToDosError (status)); \
- return NT_SUCCESS (status);
-
-/* This file should only contain non-trivial implementations of advapi32
- functions, or advapi32 functions for which the ntdll.dll equivalent
- is not easy to understand. In all other case, use the ntdll.dll
- equivalent. */
-
-BOOL WINAPI
-RevertToSelf ()
-{
- HANDLE tok = NULL;
- NTSTATUS status = NtSetInformationThread (NtCurrentThread (),
- ThreadImpersonationToken,
- &tok, sizeof tok);
- DEFAULT_NTSTATUS_TO_BOOL_RETURN
-}
-
-BOOL WINAPI
-DuplicateTokenEx (HANDLE tok, DWORD access, LPSECURITY_ATTRIBUTES sec_attr,
- SECURITY_IMPERSONATION_LEVEL level, TOKEN_TYPE type,
- PHANDLE new_tok)
-{
- SECURITY_QUALITY_OF_SERVICE sqos =
- { sizeof sqos, level, SECURITY_STATIC_TRACKING, FALSE };
- OBJECT_ATTRIBUTES attr =
- { sizeof attr, NULL, NULL,
- (sec_attr && sec_attr->bInheritHandle) ? OBJ_INHERIT : 0U,
- sec_attr ? sec_attr->lpSecurityDescriptor : NULL, &sqos };
- NTSTATUS status = NtDuplicateToken (tok, access, &attr, FALSE, type, new_tok);
- DEFAULT_NTSTATUS_TO_BOOL_RETURN
-}
-
-BOOL WINAPI
-ImpersonateLoggedOnUser (HANDLE tok)
-{
- NTSTATUS status;
- HANDLE ptok = NULL;
- TOKEN_TYPE type;
- ULONG size;
-
- status = NtQueryInformationToken (tok, TokenType, &type, sizeof type, &size);
- if (!NT_SUCCESS (status))
- {
- SetLastError (RtlNtStatusToDosError (status));
- return FALSE;
- }
- if (type == TokenPrimary)
- {
- /* If its a primary token it must be converted to an impersonated
- token. */
- SECURITY_QUALITY_OF_SERVICE sqos =
- { sizeof sqos, SecurityImpersonation, SECURITY_DYNAMIC_TRACKING, FALSE};
- OBJECT_ATTRIBUTES attr =
- { sizeof attr, NULL, NULL, 0, NULL, &sqos };
-
- /* The required rights for the impersonation token according to MSDN. */
- status = NtDuplicateToken (tok, TOKEN_QUERY | TOKEN_IMPERSONATE,
- &attr, FALSE, TokenImpersonation, &ptok);
- if (!NT_SUCCESS (status))
- {
- SetLastError (RtlNtStatusToDosError (status));
- return FALSE;
- }
- tok = ptok;
- }
- status = NtSetInformationThread (NtCurrentThread (), ThreadImpersonationToken,
- &tok, sizeof tok);
- if (ptok)
- NtClose (ptok);
- DEFAULT_NTSTATUS_TO_BOOL_RETURN
-}
-
-BOOL WINAPI
-ImpersonateNamedPipeClient (HANDLE pipe)
-{
- IO_STATUS_BLOCK io;
- NTSTATUS status = NtFsControlFile (pipe, NULL, NULL, NULL, &io,
- FSCTL_PIPE_IMPERSONATE, NULL, 0, NULL, 0);
- DEFAULT_NTSTATUS_TO_BOOL_RETURN
-}
diff --git a/winsup/cygwin/analyze_sigfe b/winsup/cygwin/analyze_sigfe
deleted file mode 100755
index 0b9b7219f..000000000
--- a/winsup/cygwin/analyze_sigfe
+++ /dev/null
@@ -1,80 +0,0 @@
-#!/usr/bin/perl -s
-# Copyright 2006 Red Hat, Inc.
-#
-# This file is part of Cygwin.
-#
-# This software is a copyrighted work licensed under the terms of the
-# Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-# details.
-
-# This will do a crude test to see if the (NO)?SIGFE stuff is used properly
-# in cygwin.din. It is not perfect so do not use it to do a wholesale replacement.
-#
-# Input is the output of 'objdump --disassemble --demangle cygwin0.dll'.
-#
-use strict;
-use vars qw'$v';
-sub star($);
-
-my %funcs;
-my $func = '';
-
-$| = 1;
-while (<>) {
- /^610.....\s+<([^\(>]+).*?:/o and do {
- $func = $1;
- $funcs{$func} = {} unless defined $funcs{$func};
- next;
- };
- $func and /call\s+\S+\s+<([^\(>]+)/o and do {
- my $called = $1;
- $funcs{$func}{$called} = 1;
- if ($called =~ /^[A-Z].*@/o || ($called = $funcs{$called}{-uses_kernel})) {
- $funcs{$func}{-uses_kernel} ||= $called;
- my @a = ($func);
- while (my $f = shift @a) {
- for my $k (keys %funcs) {
- if ($funcs{$k}{$f} && !$funcs{$k}{-uses_kernel}) {
- $funcs{$k}{-uses_kernel} = $called;
- push(@a, $k);
- }
- }
- }
- }
- next;
- };
-}
-
-if ($v) {
- for my $k (sort keys %funcs) {
- print star($funcs{$k}), $k, $funcs{$k}{-uses_kernel} ? " ($funcs{$k}{-uses_kernel})\n" : "\n";
- my $indent = ' ';
- for (sort keys %{$funcs{$k}}) {
- next if /^-/o;
- print $indent, $_, star($funcs{$k});
- $indent = ' ';
- }
- print "\n";
- }
-}
-
-open(DIN, '<', 'cygwin.din') or die "$0: couldn't open cygwin.din - $!\n";
-while (<DIN>) {
- my $line = $_;
- /^LIBRARY\s+/o and next;
- /^\s*$/ and next;
- /^EXPORTS/o and next;
- / DATA$/o and next;
- my $sigfe = (/\s+((?:NO)?SIGFE)\s*$/o)[0] !~ /^NO/o;
- s/\s+((?:NO)?SIGFE)\s*$//o;
- my $func = (/\s+=\s+(\S+)/o)[0] || (/^\s*(\S+)/o)[0];
- if (!defined($funcs{$func})) {
- warn "hmm. couldn't find $func in disassembled output\n";
- } elsif (!!$funcs{$func}{-uses_kernel} != $sigfe) {
- warn "mismatch detected: $line";
- }
-}
-
-sub star($) {
- return $_[0]->{-uses_kernel} ? '*' : '';
-}
diff --git a/winsup/cygwin/assert.cc b/winsup/cygwin/assert.cc
deleted file mode 100644
index 934d9c58a..000000000
--- a/winsup/cygwin/assert.cc
+++ /dev/null
@@ -1,64 +0,0 @@
-/* assert.cc: Handle the assert macro for WIN32.
-
- Copyright 1997, 1998, 2000, 2001, 2002, 2007, 2008, 2009, 2011, 2013
- Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-
-#include <assert.h>
-#include <stdlib.h>
-
-/* This function is called when the assert macro fails. This will
- override the function of the same name in newlib. */
-
-extern "C" void
-__assert (const char *file, int line, const char *failedexpr)
-{
- __assert_func (file, line, NULL, failedexpr);
-}
-
-extern "C" void
-__assert_func (const char *file, int line, const char *func,
- const char *failedexpr)
-{
- HANDLE h;
-
- /* If we don't have a console in a Windows program, then bring up a
- message box for the assertion failure. */
-
- h = CreateFile ("CONOUT$", GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,
- &sec_none_nih, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
- if (h == INVALID_HANDLE_VALUE)
- {
- PWCHAR buf = (PWCHAR) alloca ((100 + strlen (failedexpr))
- * sizeof (WCHAR));
- __small_swprintf (buf,
- L"Failed assertion\n\t%s\nat line %d of file %s%s%s",
- failedexpr, line, file,
- func ? "\nin function " : "", func ? func : "");
- MessageBoxW (NULL, buf, NULL, MB_OK | MB_ICONERROR | MB_TASKMODAL);
- }
- else
- {
- CloseHandle (h);
- small_printf ("assertion \"%s\" failed: file \"%s\", line %d%s%s\n",
- failedexpr, file, line,
- func ? ", function: " : "", func ? func : "");
- debug_printf ("assertion \"%s\" failed: file \"%s\", line %d%s%s",
- failedexpr, file, line,
- func ? ", function: " : "", func ? func : "");
- }
-
-#ifdef DEBUGGING
- try_to_debug ();
-#endif
- abort (); // FIXME: Someday this should work.
-
- /* NOTREACHED */
-}
diff --git a/winsup/cygwin/autogen.sh b/winsup/cygwin/autogen.sh
deleted file mode 100755
index 87a0d9c06..000000000
--- a/winsup/cygwin/autogen.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh -e
-/usr/bin/aclocal --acdir=..
-/usr/bin/autoconf -f
-exec /bin/rm -rf autom4te.cache
diff --git a/winsup/cygwin/autoload.cc b/winsup/cygwin/autoload.cc
deleted file mode 100644
index ce5d32834..000000000
--- a/winsup/cygwin/autoload.cc
+++ /dev/null
@@ -1,737 +0,0 @@
-/* autoload.cc: all dynamic load stuff.
-
- Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
- 2011, 2012, 2013, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include "miscfuncs.h"
-#include "fenv.h"
-#define USE_SYS_TYPES_FD_SET
-#include <winsock2.h>
-
-bool NO_COPY wsock_started;
-
-/* Macro for defining "auto-load" functions.
- * Note that this is self-modifying code *gasp*.
- * The first invocation of a routine will trigger the loading of
- * the DLL. This will then be followed by the discovery of
- * the procedure's entry point, which is placed into the location
- * pointed to by the stack pointer. This code then changes
- * the "call" operand which invoked it to a "jmp" which will
- * transfer directly to the DLL function on the next invocation.
- *
- * Subsequent calls to routines whose transfer address has not been
- * determined will skip the "load the dll" step, starting at the
- * "discovery of the entry point" step.
- *
- * So, immediately following the the call to one of the above routines
- * we have:
- * DLL info (4/8 bytes) Pointer to a block of information concerning
- * the DLL (see below).
- * DLL args (4 bytes) The number of arguments pushed on the stack by
- * the call. If this is an odd value then this
- * is a flag that non-existence of this function
- * is not a fatal error
- * func addr (8 bytes) (64 bit ONLY!)
- * Address of the actual Win32 function. For the
- * reason why this is necessary, see the below
- * description of the load_state.
- * func name (n bytes) asciz string containing the name of the function
- * to be loaded.
- *
- * The DLL info block consists of the following
- * load_state (4/8 bytes) Pointer to a word containing the routine used
- * to eventually invoke the function. Initially
- * points to an init function which loads the DLL,
- * gets the process's load address, changes the contents
- * here to point to the function address, and changes
- * the address argument of the initial jmp call.
- * On 64 bit, the jmp is not tweaked directly. Rather,
- * the address of the Win32 function is stored in the
- * aforementioned Win32 function address slot and fetched
- * there for a jmp *%rax call. This indirection is
- * necessary to workaround the lack of a jmp opcode with
- * offset values > 32 bit. If the initialization has
- * been done, only the load part is done.
- * DLL handle (4/8 bytes) The handle to use when loading the DLL.
- * DLL locker (4 bytes) Word to use to avoid multi-thread access during
- * initialization.
- * extra init (4/8 bytes) Extra initialization function.
- * DLL name (n bytes) asciz string containing the name of the DLL.
- */
-
-/* LoadDLLprime is used to prime the DLL info information, providing an
- additional initialization routine to call prior to calling the first
- function. */
-#ifdef __x86_64__
-#define LoadDLLprime(dllname, init_also, no_resolve_on_fork) __asm__ (" \n\
-.ifndef " #dllname "_primed \n\
- .section .data_cygwin_nocopy,\"w\" \n\
- .align 8 \n\
-."#dllname "_info: \n\
- .quad _std_dll_init \n\
- .quad " #no_resolve_on_fork " \n\
- .long -1 \n\
- .align 8 \n\
- .quad " #init_also " \n\
- .string16 \"" #dllname ".dll\" \n\
- .text \n\
- .set " #dllname "_primed, 1 \n\
-.endif \n\
-");
-#else
-#define LoadDLLprime(dllname, init_also, no_resolve_on_fork) __asm__ (" \n\
-.ifndef " #dllname "_primed \n\
- .section .data_cygwin_nocopy,\"w\" \n\
- .align 4 \n\
-."#dllname "_info: \n\
- .long _std_dll_init \n\
- .long " #no_resolve_on_fork " \n\
- .long -1 \n\
- .long " #init_also " \n\
- .string16 \"" #dllname ".dll\" \n\
- .text \n\
- .set " #dllname "_primed, 1 \n\
-.endif \n\
-");
-#endif
-
-/* Create a "decorated" name */
-#define mangle(name, n) #name "@" #n
-
-/* Standard DLL load macro. May invoke a fatal error if the function isn't
- found. */
-#define LoadDLLfunc(name, n, dllname) \
- LoadDLLfuncEx (name, n, dllname, 0)
-#define LoadDLLfuncEx(name, n, dllname, notimp) \
- LoadDLLfuncEx2(name, n, dllname, notimp, 0)
-#define LoadDLLfuncEx2(name, n, dllname, notimp, err) \
- LoadDLLfuncEx3(name, n, dllname, notimp, err, 0)
-
-/* Main DLL setup stuff. */
-#ifdef __x86_64__
-#define LoadDLLfuncEx3(name, n, dllname, notimp, err, no_resolve_on_fork) \
- LoadDLLprime (dllname, dll_func_load, no_resolve_on_fork) \
- __asm__ (" \n\
- .section ." #dllname "_autoload_text,\"wx\" \n\
- .global " #name " \n\
- .global _win32_" #name " \n\
- .align 16 \n\
-" #name ": \n\
-_win32_" #name ": \n\
- movq 3f(%rip),%rax \n\
- jmp *%rax \n\
-1:movq 2f(%rip),%rax \n\
- push %rbp # Keep 16 byte aligned \n\
- push %r9 \n\
- push %r8 \n\
- push %rdx \n\
- push %rcx \n\
- call *(%rax) \n\
-2:.quad ." #dllname "_info \n\
- .long (" #n "+" #notimp ") | (((" #err ") & 0xff) <<16) \n\
-3:.quad 1b \n\
- .asciz \"" #name "\" \n\
- .text \n\
-");
-#else
-#define LoadDLLfuncEx3(name, n, dllname, notimp, err, no_resolve_on_fork) \
- LoadDLLprime (dllname, dll_func_load, no_resolve_on_fork) \
- __asm__ (" \n\
- .section ." #dllname "_autoload_text,\"wx\" \n\
- .global _" mangle (name, n) " \n\
- .global _win32_" mangle (name, n) " \n\
- .align 8 \n\
-_" mangle (name, n) ": \n\
-_win32_" mangle (name, n) ": \n\
- .byte 0xe9 \n\
- .long -4 + 1f - . \n\
-1:movl (2f),%eax \n\
- call *(%eax) \n\
-2:.long ." #dllname "_info \n\
- .long (" #n "+" #notimp ") | (((" #err ") & 0xff) <<16) \n\
- .asciz \"" #name "\" \n\
- .text \n\
-");
-#endif
-
-/* DLL loader helper functions used during initialization. */
-
-/* The function which finds the address, given the name and overwrites
- the call so that future invocations go straight to the function in
- the DLL. */
-extern "C" void dll_func_load () __asm__ ("dll_func_load");
-
-/* Called by the primary initialization function "init_std_dll" to
- setup the stack and eliminate future calls to init_std_dll for other
- functions from this DLL. */
-extern "C" void dll_chain () __asm__ ("dll_chain");
-
-extern "C" {
-
-#ifdef __x86_64__
-__asm__ (" \n\
- .section .rdata,\"r\" \n\
-msg1: \n\
- .ascii \"couldn't dynamically determine load address for '%s' (handle %p), %E\\0\"\n\
- \n\
- .text \n\
- .p2align 4,,15 \n\
-noload: \n\
- movq 40(%rsp),%rdx # Get the address of the information block\n\
- movl 8(%rdx),%eax # Should we 'ignore' the lack \n\
- test $1,%eax # of this function? \n\
- jz 1f # Nope. \n\
- andl $0xffff0000,%eax# upper word (== desired return value) \n\
- movl %eax,32(%rsp) # Save for later (in shadow space) \n\
- movl $127,%ecx # ERROR_PROC_NOT_FOUND \n\
- call SetLastError # Set it \n\
- movl 32(%rsp),%eax # Get back return value \n\
- sarl $16,%eax # swap to low order word \n\
- addq $40,%rsp # Revert stack \n\
- pop %r10 # Drop pointer to 'return address' \n\
- pop %rcx # Restore arg registers \n\
- pop %rdx \n\
- pop %r8 \n\
- pop %r9 \n\
- pop %rbp # ...and restore frame pointer \n\
- ret # Return \n\
-1: \n\
- movq (%rdx),%rax # Handle value \n\
- movq 8(%rax),%r8 \n\
- lea 20(%rdx),%rdx # Location of name of function \n\
- lea msg1(%rip),%rcx # The message \n\
- call api_fatal # Print message. Never returns \n\
- \n\
- .globl dll_func_load \n\
-dll_func_load: \n\
- movq (%rsp),%rdx # 'Return address' contains load info \n\
- movq (%rdx),%rcx # Where handle lives \n\
- movq 8(%rcx),%rcx # Address of Handle to DLL \n\
- addq $20,%rdx # Address of name of function to load \n\
- subq $40,%rsp # Shadow space + 8 byte for alignment \n\
- call GetProcAddress # Load it \n\
- test %rax,%rax # Success? \n\
- jne gotit # Yes \n\
- jmp noload # Issue an error or return \n\
-gotit: \n\
- addq $40,%rsp # Revert stack \n\
- pop %r10 # Pointer to 'return address' \n\
- movq %rax,12(%r10) # Move absolute address to address slot \n\
- subq $25,%r10 # Point to jmp \n\
- pop %rcx # Restore arg registers \n\
- pop %rdx \n\
- pop %r8 \n\
- pop %r9 \n\
- pop %rbp # ...and restore frame pointer \n\
- jmp *%r10 # Jump to actual function \n\
- \n\
- .global dll_chain \n\
-dll_chain: \n\
- push %rax # Restore 'return address' \n\
- jmp *%rdx # Jump to next init function \n\
-");
-#else
-__asm__ (" \n\
- .text \n\
-msg1: \n\
- .ascii \"couldn't dynamically determine load address for '%s' (handle %p), %E\\0\"\n\
- \n\
- .align 32 \n\
-noload: \n\
- popl %edx # Get the address of the information block\n\
- movl 4(%edx),%eax # Should we 'ignore' the lack \n\
- test $1,%eax # of this function? \n\
- jz 1f # Nope. \n\
- decl %eax # Yes. This is the # of bytes + 1 \n\
- popl %edx # Caller's caller \n\
- addl %eax,%esp # Pop off bytes \n\
- andl $0xffff0000,%eax# upper word \n\
- subl %eax,%esp # adjust for possible return value \n\
- pushl %eax # Save for later \n\
- movl $127,%eax # ERROR_PROC_NOT_FOUND \n\
- pushl %eax # First argument \n\
- call _SetLastError@4 # Set it \n\
- popl %eax # Get back argument \n\
- sarl $16,%eax # return value in high order word \n\
- jmp *%edx # Return \n\
-1: \n\
- movl (%edx),%eax # Handle value \n\
- pushl 4(%eax) \n\
- leal 8(%edx),%eax # Location of name of function \n\
- pushl %eax \n\
- pushl $msg1 # The message \n\
- call _api_fatal # Print message. Never returns \n\
- \n\
- .globl dll_func_load \n\
-dll_func_load: \n\
- movl (%esp),%eax # 'Return address' contains load info \n\
- addl $8,%eax # Address of name of function to load \n\
- pushl %eax # Second argument \n\
- movl -8(%eax),%eax # Where handle lives \n\
- movl 4(%eax),%eax # Address of Handle to DLL \n\
- pushl %eax # Handle to DLL \n\
- call _GetProcAddress@8# Load it \n\
- test %eax,%eax # Success? \n\
- jne gotit # Yes \n\
- jmp noload # Issue an error or return \n\
-gotit: \n\
- popl %edx # Pointer to 'return address' \n\
- subl %edx,%eax # Make it relative \n\
- addl $7,%eax # Tweak \n\
- subl $12,%edx # Point to jmp \n\
- movl %eax,1(%edx) # Move relative address after jump \n\
- jmp *%edx # Jump to actual function \n\
- \n\
- .global dll_chain \n\
-dll_chain: \n\
- pushl %eax # Restore 'return address' \n\
- jmp *%edx # Jump to next init function \n\
-");
-#endif
-
-/* C representations of the two info blocks described above.
- FIXME: These structures confuse gdb for some reason. GDB can print
- the whole structure but has problems with the name field? */
-struct dll_info
-{
- UINT_PTR load_state;
- HANDLE handle;
- LONG here;
- void (*init) ();
- WCHAR name[];
-};
-
-struct func_info
-{
- struct dll_info *dll;
- LONG decoration;
-#ifdef __x86_64__
- UINT_PTR func_addr;
-#endif
- char name[];
-};
-
-/* Mechanism for setting up info for passing to dll_chain routines. */
-#ifdef __x86_64__
-typedef __uint128_t two_addr_t;
-#else
-typedef __uint64_t two_addr_t;
-#endif
-union retchain
-{
- struct {uintptr_t high; uintptr_t low;};
- two_addr_t ll;
-};
-
-
-/* This function is a workaround for the problem reported here:
- http://cygwin.com/ml/cygwin/2011-02/msg00552.html
- and discussed here:
- http://cygwin.com/ml/cygwin-developers/2011-02/threads.html#00007
-
- To wit: winmm.dll calls FreeLibrary in its DllMain and that can result
- in LoadLibraryExW returning an ERROR_INVALID_ADDRESS. */
-static __inline bool
-dll_load (HANDLE& handle, WCHAR *name)
-{
- HANDLE h = LoadLibraryW (name);
- if (!h && handle && wincap.use_dont_resolve_hack ()
- && GetLastError () == ERROR_INVALID_ADDRESS)
- h = LoadLibraryExW (name, NULL, DONT_RESOLVE_DLL_REFERENCES);
- if (!h)
- return false;
- handle = h;
- return true;
-}
-
-#define RETRY_COUNT 10
-
-/* The standard DLL initialization routine. */
-#ifdef __x86_64__
-
-/* On x86_64, we need assembler wrappers for std_dll_init and wsock_init.
- In the x86_64 ABI it's no safe bet that frame[1] (aka 8(%rbp)) contains
- the return address. Consequentially, if we try to overwrite frame[1]
- with the address of dll_chain, we end up with a scrambled stack, the
- result depending on the optimization settings and the current frame of
- mind of the compiler. So for x86_64, we disable overwriting the return
- address in the real std_dll_init/wsock_init function, but rather do this
- in the wrapper, after return from the function, when we exactly know
- where the original return address is stored on the stack. */
-
-#define INIT_WRAPPER(func) \
-__asm__ (" \n\
- .text \n\
- .p2align 4,,15 \n\
- .seh_proc _" #func " \n\
-_" #func ": \n\
- pushq %rbp \n\
- .seh_pushreg %rbp \n\
- movq %rsp,%rbp \n\
- .seh_setframe %rbp,0 \n\
- subq $0x20,%rsp \n\
- .seh_stackalloc 32 \n\
- .seh_endprologue \n\
- movq 0x28(%rsp),%rcx # return address as parameter \n\
- call " #func " \n\
- movdqa %xmm0,0x10(%rsp) # 128 bit return value in xmm0 \n\
- movq 0x10(%rsp),%rax # copy over to %rax and %rdx \n\
- movq 0x18(%rsp),%rdx \n\
- leaq dll_chain(%rip),%rcx # load address of dll_chain \n\
- movq %rcx,0x28(%rsp) # and overwrite return address \n\
- addq $0x20,%rsp \n\
- popq %rbp \n\
- ret \n\
- .seh_endproc \n\
-");
-
-INIT_WRAPPER (std_dll_init)
-
-__attribute__ ((used, noinline)) static two_addr_t
-std_dll_init (struct func_info *func)
-#else
-__attribute__ ((used, noinline)) static two_addr_t
-std_dll_init ()
-#endif
-{
-#ifndef __x86_64__
- struct func_info *func = (struct func_info *) __builtin_return_address (0);
-#endif
- struct dll_info *dll = func->dll;
- retchain ret;
-
- if (InterlockedIncrement (&dll->here))
- do
- {
- InterlockedDecrement (&dll->here);
- yield ();
- }
- while (InterlockedIncrement (&dll->here));
- else if ((uintptr_t) dll->handle <= 1)
- {
- fenv_t fpuenv;
- fegetenv (&fpuenv);
- WCHAR dll_path[MAX_PATH];
- DWORD err = ERROR_SUCCESS;
- int i;
- /* http://www.microsoft.com/technet/security/advisory/2269637.mspx */
- wcpcpy (wcpcpy (dll_path, windows_system_directory), dll->name);
- /* MSDN seems to imply that LoadLibrary can fail mysteriously, so,
- since there have been reports of this in the mailing list, retry
- several times before giving up. */
- for (i = 1; i <= RETRY_COUNT; i++)
- {
- /* If loading the library succeeds, just leave the loop. */
- if (!dll_load (dll->handle, dll_path))
- break;
- /* Otherwise check error code returned by LoadLibrary. If the
- error code is neither NOACCESS nor DLL_INIT_FAILED, break out
- of the loop. */
- err = GetLastError ();
- if (err != ERROR_NOACCESS && err != ERROR_DLL_INIT_FAILED)
- break;
- if (i < RETRY_COUNT)
- yield ();
- }
- if ((uintptr_t) dll->handle <= 1)
- {
- /* If LoadLibrary with full path returns one of the weird errors
- reported on the Cygwin mailing list, retry with only the DLL
- name. Only do this when the above retry loop has been exhausted. */
- if (i > RETRY_COUNT && dll_load (dll->handle, dll->name))
- /* got it with the fallback */;
- else if ((func->decoration & 1))
- dll->handle = INVALID_HANDLE_VALUE;
- else
- api_fatal ("unable to load %W, %E", dll_path);
- }
- fesetenv (&fpuenv);
- }
-
- /* Set "arguments" for dll_chain. */
- ret.low = (uintptr_t) dll->init;
- ret.high = (uintptr_t) func;
-
- InterlockedDecrement (&dll->here);
-
-#ifndef __x86_64__
- /* Kludge alert. Redirects the return address to dll_chain. */
- uintptr_t *volatile frame = (uintptr_t *) __builtin_frame_address (0);
- frame[1] = (uintptr_t) dll_chain;
-#endif
-
- return ret.ll;
-}
-
-/* Initialization function for winsock stuff. */
-WSADATA NO_COPY wsadata;
-
-#ifdef __x86_64__
-/* See above comment preceeding std_dll_init. */
-INIT_WRAPPER (wsock_init)
-
-__attribute__ ((used, noinline)) static two_addr_t
-wsock_init (struct func_info *func)
-#else
-__attribute__ ((used, noinline)) static two_addr_t
-wsock_init ()
-#endif
-{
- static LONG NO_COPY here = -1L;
-#ifndef __x86_64__
- struct func_info *func = (struct func_info *) __builtin_return_address (0);
-#endif
- struct dll_info *dll = func->dll;
-
- while (InterlockedIncrement (&here))
- {
- InterlockedDecrement (&here);
- yield ();
- }
-
- if (!wsock_started)
- {
- int __stdcall (*wsastartup) (int, WSADATA *);
-
- /* Don't use autoload to load WSAStartup to eliminate recursion. */
- wsastartup = (int __stdcall (*)(int, WSADATA *))
- GetProcAddress ((HMODULE) (dll->handle), "WSAStartup");
- if (wsastartup)
- {
- int res = wsastartup ((2<<8) | 2, &wsadata);
-
- debug_printf ("res %d", res);
- debug_printf ("wVersion %d", wsadata.wVersion);
- debug_printf ("wHighVersion %d", wsadata.wHighVersion);
- debug_printf ("szDescription %s", wsadata.szDescription);
- debug_printf ("szSystemStatus %s", wsadata.szSystemStatus);
- debug_printf ("iMaxSockets %d", wsadata.iMaxSockets);
- debug_printf ("iMaxUdpDg %d", wsadata.iMaxUdpDg);
-
- wsock_started = 1;
- }
- }
-
-#ifndef __x86_64__
- /* Kludge alert. Redirects the return address to dll_chain. */
- uintptr_t *volatile frame = (uintptr_t *) __builtin_frame_address (0);
- frame[1] = (uintptr_t) dll_chain;
-#endif
-
- InterlockedDecrement (&here);
-
- volatile retchain ret;
- /* Set "arguments for dll_chain. */
- ret.low = (uintptr_t) dll_func_load;
- ret.high = (uintptr_t) func;
- return ret.ll;
-}
-
-LoadDLLprime (ws2_32, _wsock_init, 0)
-
-LoadDLLfunc (CheckTokenMembership, 12, advapi32)
-LoadDLLfunc (CreateProcessAsUserW, 44, advapi32)
-LoadDLLfunc (DeregisterEventSource, 4, advapi32)
-LoadDLLfunc (LogonUserW, 24, advapi32)
-LoadDLLfunc (LookupAccountNameW, 28, advapi32)
-LoadDLLfunc (LookupAccountSidW, 28, advapi32)
-LoadDLLfunc (LsaClose, 4, advapi32)
-LoadDLLfunc (LsaEnumerateAccountRights, 16, advapi32)
-LoadDLLfunc (LsaFreeMemory, 4, advapi32)
-LoadDLLfunc (LsaOpenPolicy, 16, advapi32)
-LoadDLLfunc (LsaQueryInformationPolicy, 12, advapi32)
-LoadDLLfunc (LsaRetrievePrivateData, 12, advapi32)
-LoadDLLfunc (LsaStorePrivateData, 12, advapi32)
-LoadDLLfunc (RegOpenUserClassesRoot, 16, advapi32)
-LoadDLLfunc (RegOpenCurrentUser, 8, advapi32)
-LoadDLLfunc (RegCloseKey, 4, advapi32)
-LoadDLLfunc (RegCreateKeyExW, 36, advapi32)
-LoadDLLfunc (RegEnumKeyExW, 32, advapi32)
-LoadDLLfunc (RegEnumValueW, 32, advapi32)
-LoadDLLfunc (RegGetKeySecurity, 16, advapi32)
-LoadDLLfunc (RegOpenKeyExW, 20, advapi32)
-LoadDLLfunc (RegQueryInfoKeyW, 48, advapi32)
-LoadDLLfunc (RegQueryValueExW, 24, advapi32)
-LoadDLLfunc (RegisterEventSourceW, 8, advapi32)
-LoadDLLfunc (ReportEventW, 36, advapi32)
-LoadDLLfunc (SystemFunction036, 8, advapi32) /* Aka "RtlGenRandom" */
-
-LoadDLLfunc (DnsQuery_A, 24, dnsapi)
-LoadDLLfunc (DnsRecordListFree, 8, dnsapi)
-
-LoadDLLfunc (GetAdaptersAddresses, 20, iphlpapi)
-LoadDLLfunc (GetIfEntry, 4, iphlpapi)
-LoadDLLfunc (GetIpAddrTable, 12, iphlpapi)
-LoadDLLfunc (GetIpForwardTable, 12, iphlpapi)
-LoadDLLfunc (GetNetworkParams, 8, iphlpapi)
-LoadDLLfunc (GetUdpTable, 12, iphlpapi)
-
-LoadDLLfuncEx (CancelSynchronousIo, 4, kernel32, 1)
-LoadDLLfunc (CreateSymbolicLinkW, 12, kernel32)
-LoadDLLfuncEx (GetNamedPipeClientProcessId, 8, kernel32, 1)
-LoadDLLfunc (GetSystemTimePreciseAsFileTime, 4, kernel32)
-LoadDLLfuncEx (IdnToAscii, 20, kernel32, 1)
-LoadDLLfuncEx (IdnToUnicode, 20, kernel32, 1)
-LoadDLLfunc (LocaleNameToLCID, 8, kernel32)
-
-/* ldap functions are cdecl! */
-#pragma push_macro ("mangle")
-#undef mangle
-#define mangle(name, n) #name
-LoadDLLfunc (ldap_bind_s, 0, wldap32)
-LoadDLLfunc (ldap_count_entries, 0, wldap32)
-LoadDLLfunc (ldap_count_valuesW, 0, wldap32)
-LoadDLLfunc (ldap_first_entry, 0, wldap32)
-LoadDLLfunc (ldap_get_next_page_s, 0, wldap32)
-LoadDLLfunc (ldap_get_valuesW, 0, wldap32)
-LoadDLLfunc (ldap_get_values_lenW, 0, wldap32)
-LoadDLLfunc (ldap_initW, 0, wldap32)
-LoadDLLfunc (ldap_msgfree, 0, wldap32)
-LoadDLLfunc (ldap_next_entry, 0, wldap32)
-LoadDLLfunc (ldap_search_abandon_page, 0, wldap32)
-LoadDLLfunc (ldap_search_init_pageW, 0, wldap32)
-LoadDLLfunc (ldap_search_sW, 0, wldap32)
-LoadDLLfunc (ldap_set_option, 0, wldap32)
-LoadDLLfunc (ldap_sslinitW, 0, wldap32)
-LoadDLLfunc (ldap_unbind, 0, wldap32)
-LoadDLLfunc (ldap_value_freeW, 0, wldap32)
-LoadDLLfunc (ldap_value_free_len, 0, wldap32)
-LoadDLLfunc (LdapGetLastError, 0, wldap32)
-LoadDLLfunc (LdapMapErrorToWin32, 0, wldap32)
-#pragma pop_macro ("mangle")
-
-LoadDLLfunc (WNetCloseEnum, 4, mpr)
-LoadDLLfunc (WNetEnumResourceW, 16, mpr)
-LoadDLLfunc (WNetGetProviderNameW, 12, mpr)
-LoadDLLfunc (WNetGetResourceInformationW, 16, mpr)
-LoadDLLfunc (WNetOpenEnumW, 20, mpr)
-
-LoadDLLfunc (DsEnumerateDomainTrustsW, 16, netapi32)
-LoadDLLfunc (DsGetDcNameW, 24, netapi32)
-LoadDLLfunc (NetApiBufferFree, 4, netapi32)
-LoadDLLfunc (NetGroupEnum, 28, netapi32)
-LoadDLLfunc (NetLocalGroupEnum, 28, netapi32)
-LoadDLLfunc (NetLocalGroupGetInfo, 16, netapi32)
-LoadDLLfunc (NetUseGetInfo, 16, netapi32)
-LoadDLLfunc (NetUserEnum, 32, netapi32)
-LoadDLLfunc (NetUserGetGroups, 28, netapi32)
-LoadDLLfunc (NetUserGetInfo, 16, netapi32)
-LoadDLLfunc (NetUserGetLocalGroups, 32, netapi32)
-
-LoadDLLfunc (NtCommitTransaction, 8, ntdll)
-LoadDLLfunc (NtCreateTransaction, 40, ntdll)
-LoadDLLfunc (NtRollbackTransaction, 8, ntdll)
-LoadDLLfunc (RtlGetCurrentTransaction, 0, ntdll)
-LoadDLLfunc (RtlSetCurrentTransaction, 4, ntdll)
-
-LoadDLLfunc (CoTaskMemFree, 4, ole32)
-
-LoadDLLfunc (LsaDeregisterLogonProcess, 4, secur32)
-LoadDLLfunc (LsaFreeReturnBuffer, 4, secur32)
-LoadDLLfunc (LsaLogonUser, 56, secur32)
-LoadDLLfunc (LsaLookupAuthenticationPackage, 12, secur32)
-LoadDLLfunc (LsaRegisterLogonProcess, 12, secur32)
-
-LoadDLLfunc (SHGetDesktopFolder, 4, shell32)
-
-LoadDLLfunc (CloseClipboard, 0, user32)
-LoadDLLfunc (CloseDesktop, 4, user32)
-LoadDLLfunc (CloseWindowStation, 4, user32)
-LoadDLLfunc (CreateDesktopW, 24, user32)
-LoadDLLfunc (CreateWindowExW, 48, user32)
-LoadDLLfunc (CreateWindowStationW, 16, user32)
-LoadDLLfunc (DefWindowProcW, 16, user32)
-LoadDLLfunc (DispatchMessageW, 4, user32)
-LoadDLLfunc (EmptyClipboard, 0, user32)
-LoadDLLfunc (EnumWindows, 8, user32)
-LoadDLLfunc (GetClipboardData, 4, user32)
-LoadDLLfunc (GetForegroundWindow, 0, user32)
-LoadDLLfunc (GetKeyboardLayout, 4, user32)
-LoadDLLfunc (GetMessageW, 16, user32)
-LoadDLLfunc (GetPriorityClipboardFormat, 8, user32)
-LoadDLLfunc (GetProcessWindowStation, 0, user32)
-LoadDLLfunc (GetThreadDesktop, 4, user32)
-LoadDLLfunc (GetUserObjectInformationW, 20, user32)
-LoadDLLfunc (GetWindowThreadProcessId, 8, user32)
-LoadDLLfunc (MessageBeep, 4, user32)
-LoadDLLfunc (MessageBoxW, 16, user32)
-LoadDLLfunc (MsgWaitForMultipleObjectsEx, 20, user32)
-LoadDLLfunc (OpenClipboard, 4, user32)
-LoadDLLfunc (PeekMessageW, 20, user32)
-LoadDLLfunc (PostMessageW, 16, user32)
-LoadDLLfunc (PostQuitMessage, 4, user32)
-LoadDLLfunc (RegisterClassW, 4, user32)
-LoadDLLfunc (RegisterClipboardFormatW, 4, user32)
-LoadDLLfunc (SendNotifyMessageW, 16, user32)
-LoadDLLfunc (SetClipboardData, 8, user32)
-LoadDLLfunc (SetParent, 8, user32)
-LoadDLLfunc (SetProcessWindowStation, 4, user32)
-LoadDLLfunc (SetThreadDesktop, 4, user32)
-
-LoadDLLfunc (CreateEnvironmentBlock, 12, userenv)
-LoadDLLfuncEx2 (CreateProfile, 16, userenv, 1, 1)
-LoadDLLfunc (DestroyEnvironmentBlock, 4, userenv)
-LoadDLLfunc (LoadUserProfileW, 8, userenv)
-
-LoadDLLfuncEx3 (waveInAddBuffer, 12, winmm, 1, 0, 1)
-LoadDLLfuncEx3 (waveInClose, 4, winmm, 1, 0, 1)
-LoadDLLfuncEx3 (waveInGetNumDevs, 0, winmm, 1, 0, 1)
-LoadDLLfuncEx3 (waveInOpen, 24, winmm, 1, 0, 1)
-LoadDLLfuncEx3 (waveInPrepareHeader, 12, winmm, 1, 0, 1)
-LoadDLLfuncEx3 (waveInReset, 4, winmm, 1, 0, 1)
-LoadDLLfuncEx3 (waveInStart, 4, winmm, 1, 0, 1)
-LoadDLLfuncEx3 (waveInUnprepareHeader, 12, winmm, 1, 0, 1)
-LoadDLLfuncEx3 (waveOutClose, 4, winmm, 1, 0, 1)
-LoadDLLfuncEx3 (waveOutGetNumDevs, 0, winmm, 1, 0, 1)
-LoadDLLfuncEx3 (waveOutGetVolume, 8, winmm, 1, 0, 1)
-LoadDLLfuncEx3 (waveOutOpen, 24, winmm, 1, 0, 1)
-LoadDLLfuncEx3 (waveOutPrepareHeader, 12, winmm, 1, 0, 1)
-LoadDLLfuncEx3 (waveOutReset, 4, winmm, 1, 0, 1)
-LoadDLLfuncEx3 (waveOutSetVolume, 8, winmm, 1, 0, 1)
-LoadDLLfuncEx3 (waveOutUnprepareHeader, 12, winmm, 1, 0, 1)
-LoadDLLfuncEx3 (waveOutWrite, 12, winmm, 1, 0, 1)
-
-LoadDLLfunc (accept, 12, ws2_32)
-LoadDLLfunc (bind, 12, ws2_32)
-LoadDLLfunc (closesocket, 4, ws2_32)
-LoadDLLfunc (connect, 12, ws2_32)
-LoadDLLfunc (FreeAddrInfoW, 4, ws2_32)
-LoadDLLfunc (GetAddrInfoW, 16, ws2_32)
-LoadDLLfunc (GetNameInfoW, 28, ws2_32)
-LoadDLLfunc (gethostbyaddr, 12, ws2_32)
-LoadDLLfunc (gethostbyname, 4, ws2_32)
-LoadDLLfunc (gethostname, 8, ws2_32)
-LoadDLLfunc (getpeername, 12, ws2_32)
-LoadDLLfunc (getprotobyname, 4, ws2_32)
-LoadDLLfunc (getprotobynumber, 4, ws2_32)
-LoadDLLfunc (getservbyname, 8, ws2_32)
-LoadDLLfunc (getservbyport, 8, ws2_32)
-LoadDLLfunc (getsockname, 12, ws2_32)
-LoadDLLfunc (getsockopt, 20, ws2_32)
-LoadDLLfunc (ioctlsocket, 12, ws2_32)
-LoadDLLfunc (listen, 8, ws2_32)
-LoadDLLfunc (setsockopt, 20, ws2_32)
-LoadDLLfunc (shutdown, 8, ws2_32)
-LoadDLLfunc (socket, 12, ws2_32)
-LoadDLLfunc (WSAAsyncSelect, 16, ws2_32)
-LoadDLLfunc (WSADuplicateSocketW, 12, ws2_32)
-LoadDLLfunc (WSAEnumNetworkEvents, 12, ws2_32)
-LoadDLLfunc (WSAEventSelect, 12, ws2_32)
-LoadDLLfunc (WSAGetLastError, 0, ws2_32)
-LoadDLLfunc (WSAIoctl, 36, ws2_32)
-LoadDLLfunc (WSARecv, 28, ws2_32)
-LoadDLLfunc (WSARecvFrom, 36, ws2_32)
-LoadDLLfunc (WSASendMsg, 24, ws2_32)
-LoadDLLfunc (WSASendTo, 36, ws2_32)
-LoadDLLfunc (WSASetLastError, 4, ws2_32)
-LoadDLLfunc (WSASocketW, 24, ws2_32)
-// LoadDLLfunc (WSAStartup, 8, ws2_32)
-LoadDLLfunc (WSAWaitForMultipleEvents, 20, ws2_32)
-}
diff --git a/winsup/cygwin/automode.c b/winsup/cygwin/automode.c
deleted file mode 100644
index 6951bfd6b..000000000
--- a/winsup/cygwin/automode.c
+++ /dev/null
@@ -1,28 +0,0 @@
-/* automode.c
-
- Copyright 2000, 2001, 2010, 2013 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winlean.h"
-#include <sys/fcntl.h>
-#include <sys/cygwin.h>
-
-extern int _fmode;
-void
-cygwin_premain0 (int argc __attribute__ ((unused)),
- char **argv __attribute__ ((unused)),
- struct per_process *myself __attribute__ ((unused)))
-{
- static struct __cygwin_perfile pf[] =
- {
- {"", O_RDONLY | O_TEXT},
- {"", O_WRONLY | O_BINARY},
- {NULL, 0}
- };
- cygwin_internal (CW_PERFILE, pf);
-}
diff --git a/winsup/cygwin/binmode.c b/winsup/cygwin/binmode.c
deleted file mode 100644
index 4c6c2ddba..000000000
--- a/winsup/cygwin/binmode.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/* binmode.c
-
- Copyright 2000, 2001, 2010, 2013, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winlean.h"
-#include <sys/fcntl.h>
-#include <sys/cygwin.h>
-
-extern int _fmode;
-void
-cygwin_premain0 (int argc __attribute__ ((unused)),
- char **argv __attribute__ ((unused)),
- struct per_process *myself __attribute__ ((unused)))
-{
- _fmode &= ~O_TEXT;
- _fmode |= O_BINARY;
-}
diff --git a/winsup/cygwin/child_info.h b/winsup/cygwin/child_info.h
deleted file mode 100644
index d9467274f..000000000
--- a/winsup/cygwin/child_info.h
+++ /dev/null
@@ -1,199 +0,0 @@
-/* child_info.h: shared child info for cygwin
-
- Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2008, 2009, 2011, 2012,
- 2013 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include <setjmp.h>
-
-enum child_info_types
-{
- _CH_NADA = 0,
- _CH_EXEC = 1,
- _CH_SPAWN = 2,
- _CH_FORK = 3,
- _CH_WHOOPS = 4
-};
-
-enum child_status
-{
- _CI_STRACED = 0x01,
- _CI_ISCYGWIN = 0x02,
- _CI_SAW_CTRL_C = 0x04
-};
-
-#define OPROC_MAGIC_MASK 0xff00ff00
-#define OPROC_MAGIC_GENERIC 0xaf00f000
-
-#ifdef __x86_64__
-#define PROC_MAGIC_GENERIC 0xaf00fa64
-#else /*!x86_64*/
-#define PROC_MAGIC_GENERIC 0xaf00fa32
-#endif
-
-#define EXEC_MAGIC_SIZE sizeof(child_info)
-
-/* Change this value if you get a message indicating that it is out-of-sync. */
-#define CURR_CHILD_INFO_MAGIC 0x93737edaU
-
-#define NPROCS 256
-
-#include "pinfo.h"
-struct cchildren
-{
- pid_t pid;
- pinfo_minimal p;
-};
-
-/* NOTE: Do not make gratuitous changes to the names or organization of the
- below class. The layout is checksummed to determine compatibility between
- different cygwin versions. */
-class child_info
-{
-public:
- DWORD msv_count; // zeroed on < W2K3, set to pseudo-count on Vista
- DWORD cb; // size of this record
- DWORD intro; // improbable string
- DWORD magic; // magic number unique to child_info
- unsigned short type; // type of record, exec, spawn, fork
- init_cygheap *cygheap;
- void *cygheap_max;
- unsigned char flag;
- int retry; // number of times we've tried to start child process
- HANDLE rd_proc_pipe;
- HANDLE wr_proc_pipe;
- HANDLE subproc_ready; // used for synchronization with parent
- HANDLE user_h;
- HANDLE parent;
- DWORD parent_winpid;
- DWORD cygheap_reserve_sz;
- unsigned fhandler_union_cb;
- DWORD exit_code; // process exit code
- static int retry_count;// retry count;
- child_info (unsigned, child_info_types, bool);
- child_info (): subproc_ready (NULL), parent (NULL) {}
- ~child_info ();
- void refresh_cygheap () { cygheap_max = ::cygheap_max; }
- void ready (bool);
- bool __reg3 sync (int, HANDLE&, DWORD);
- DWORD __reg2 proc_retry (HANDLE);
- bool isstraced () const {return !!(flag & _CI_STRACED);}
- bool iscygwin () const {return !!(flag & _CI_ISCYGWIN);}
- bool saw_ctrl_c () const {return !!(flag & _CI_SAW_CTRL_C);}
- void prefork (bool = false);
- void cleanup ();
- void postfork (pinfo& child)
- {
- ForceCloseHandle (wr_proc_pipe);
- wr_proc_pipe = NULL;
- child.set_rd_proc_pipe (rd_proc_pipe);
- rd_proc_pipe = NULL;
- }
-};
-
-class mount_info;
-
-class child_info_fork: public child_info
-{
-public:
- HANDLE forker_finished;// for synchronization with child
- jmp_buf jmp; // where child will jump to
- void *stackaddr; // address of parent stack
- void *stacktop; // location of top of parent stack
- void *stackbottom; // location of bottom of parent stack
- size_t guardsize; // size of POSIX guard region or (size_t) -1 if
- // user stack
- char filler[4];
- child_info_fork ();
- void __reg1 handle_fork ();
- bool abort (const char *fmt = NULL, ...);
- void alloc_stack ();
- void alloc_stack_hard_way (volatile char *);
-};
-
-class fhandler_base;
-
-class cygheap_exec_info
-{
-public:
- int argc;
- char **argv;
- int envc;
- char **envp;
- HANDLE myself_pinfo;
- sigset_t sigmask;
- int nchildren;
- cchildren children[0];
- static cygheap_exec_info *alloc ();
- void record_children ();
- void reattach_children (HANDLE);
-};
-
-class child_info_spawn: public child_info
-{
- HANDLE hExeced;
- HANDLE ev;
-public:
- cygheap_exec_info *moreinfo;
- int __stdin;
- int __stdout;
- char filler[4];
-
- void cleanup ();
- child_info_spawn () {};
- child_info_spawn (child_info_types, bool);
- void record_children ();
- void reattach_children ();
- void *operator new (size_t, void *p) __attribute__ ((nothrow)) {return p;}
- void set (child_info_types ci, bool b) { new (this) child_info_spawn (ci, b);}
- void __reg1 handle_spawn ();
- bool set_saw_ctrl_c ()
- {
- if (!has_execed ())
- return false;
- flag |= _CI_SAW_CTRL_C;
- return true;
- }
- bool signal_myself_exited ()
- {
- if (!ev)
- return false;
- else
- {
- SetEvent (ev);
- return true;
- }
- }
- void wait_for_myself ();
- bool has_execed () const
- {
- if (hExeced)
- return true;
- if (type != _CH_EXEC)
- return false;
- return !!hExeced;
- }
- bool get_parent_handle ();
- bool has_execed_cygwin () const { return iscygwin () && has_execed (); }
- operator HANDLE& () {return hExeced;}
- int __reg3 worker (const char *, const char *const *, const char *const [], int,
- int = -1, int = -1);;
-};
-
-extern child_info_spawn ch_spawn;
-
-#define have_execed ch_spawn.has_execed ()
-#define have_execed_cygwin ch_spawn.has_execed_cygwin ()
-
-void __stdcall init_child_info (DWORD, child_info *, HANDLE);
-
-extern "C" {
-extern child_info *child_proc_info;
-extern child_info_spawn *spawn_info asm (_SYMSTR (child_proc_info));
-extern child_info_fork *fork_info asm (_SYMSTR (child_proc_info));
-}
diff --git a/winsup/cygwin/collate.h b/winsup/cygwin/collate.h
deleted file mode 100644
index 3cfb8880c..000000000
--- a/winsup/cygwin/collate.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/* collate.h: Internal BSD libc header, used in glob and regcomp, for instance.
-
- Copyright 2012 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* We never have a collate load error. */
-const int __collate_load_error = 0;
-
-int __collate_range_cmp (int c1, int c2);
-
-#ifdef __cplusplus
-};
-#endif
diff --git a/winsup/cygwin/common.din b/winsup/cygwin/common.din
deleted file mode 100644
index 67c30bb40..000000000
--- a/winsup/cygwin/common.din
+++ /dev/null
@@ -1,1400 +0,0 @@
-# Exported variables
-__argc DATA
-__argv DATA
-__check_rhosts_file DATA
-__ctype_ptr__ DATA
-__cygwin_user_data DATA
-__mb_cur_max DATA
-__progname DATA
-__rcmd_errstr DATA
-_check_for_executable DATA
-_ctype_ DATA
-_daylight DATA
-_impure_ptr DATA
-_sys_errlist DATA
-_sys_nerr DATA
-_timezone DATA
-_tzname DATA
-error_message_count DATA
-error_one_per_line DATA
-error_print_progname DATA
-h_errno DATA
-in6addr_any DATA
-in6addr_loopback DATA
-optarg DATA
-opterr DATA
-optind DATA
-optopt DATA
-optreset DATA
-program_invocation_name DATA
-program_invocation_short_name DATA
-reent_data DATA
-sys_errlist = _sys_errlist DATA
-sys_nerr = _sys_nerr DATA
-sys_sigabbrev DATA
-sys_siglist DATA
-
-# Exported functions
-_Exit SIGFE
-__assert NOSIGFE
-__assert_func NOSIGFE
-__assertfail NOSIGFE
-__b64_ntop NOSIGFE
-__b64_pton NOSIGFE
-__bsd_qsort_r NOSIGFE
-__cxa_atexit = cygwin__cxa_atexit SIGFE
-__cxa_finalize SIGFE
-__dn_comp SIGFE
-__dn_expand SIGFE
-__dn_skipname SIGFE
-__eprintf SIGFE
-__errno NOSIGFE
-__fbufsize NOSIGFE
-__flbf NOSIGFE
-__fpclassifyd NOSIGFE
-__fpclassifyf NOSIGFE
-__fpending NOSIGFE
-__fpurge SIGFE
-__freadable NOSIGFE
-__freading NOSIGFE
-__fsetlocking SIGFE
-__fwritable NOSIGFE
-__fwriting NOSIGFE
-__getreent NOSIGFE
-__infinity NOSIGFE
-__isinfd NOSIGFE
-__isinff NOSIGFE
-__isnand NOSIGFE
-__isnanf NOSIGFE
-__locale_mb_cur_max NOSIGFE
-__main NOSIGFE
-__opendir_with_d_ino SIGFE
-__res_close SIGFE
-__res_init SIGFE
-__res_mkquery SIGFE
-__res_nclose SIGFE
-__res_ninit SIGFE
-__res_nmkquery SIGFE
-__res_nquery SIGFE
-__res_nquerydomain SIGFE
-__res_nsearch SIGFE
-__res_nsend SIGFE
-__res_query SIGFE
-__res_querydomain SIGFE
-__res_search SIGFE
-__res_send SIGFE
-__res_state SIGFE
-__signbitd NOSIGFE
-__signbitf NOSIGFE
-__signgam NOSIGFE
-__srget SIGFE
-__srget_r SIGFE
-__swbuf SIGFE
-__swbuf_r SIGFE
-__wrap__ZdaPv NOSIGFE # void operator delete[](void *p) throw()
-__wrap__ZdaPvRKSt9nothrow_t NOSIGFE # void operator delete[](void *p, const std::nothrow_t &nt) throw()
-__wrap__ZdlPv NOSIGFE # void operator delete(void *p) throw()
-__wrap__ZdlPvRKSt9nothrow_t NOSIGFE # void operator delete(void *p, const std::nothrow_t &nt) throw()
-__xdrrec_getrec SIGFE
-__xdrrec_setnonblock SIGFE
-__xpg_strerror_r SIGFE
-_exit SIGFE
-_feinitialise NOSIGFE
-_fscanf_r SIGFE
-_get_osfhandle SIGFE
-_longjmp = longjmp NOSIGFE
-_pipe SIGFE
-_pthread_cleanup_pop SIGFE
-_pthread_cleanup_push SIGFE
-_setjmp = setjmp NOSIGFE
-_setmode = cygwin_setmode SIGFE
-a64l NOSIGFE
-abort NOSIGFE
-abs NOSIGFE
-accept = cygwin_accept SIGFE
-accept4 SIGFE
-access SIGFE
-acl SIGFE
-aclcheck NOSIGFE
-aclfrommode SIGFE
-aclfrompbits SIGFE
-aclfromtext SIGFE
-aclsort SIGFE
-acltomode SIGFE
-acltopbits SIGFE
-acltotext SIGFE
-acos NOSIGFE
-acosf NOSIGFE
-acosh NOSIGFE
-acoshf NOSIGFE
-alarm SIGFE
-alphasort NOSIGFE
-arc4random NOSIGFE
-arc4random_addrandom NOSIGFE
-arc4random_buf NOSIGFE
-arc4random_stir NOSIGFE
-arc4random_uniform NOSIGFE
-argz_add SIGFE
-argz_add_sep SIGFE
-argz_append SIGFE
-argz_count NOSIGFE
-argz_create SIGFE
-argz_create_sep SIGFE
-argz_delete SIGFE
-argz_extract NOSIGFE
-argz_insert SIGFE
-argz_next NOSIGFE
-argz_replace SIGFE
-argz_stringify NOSIGFE
-asctime SIGFE
-asctime_r SIGFE
-asin NOSIGFE
-asinf NOSIGFE
-asinh NOSIGFE
-asinhf NOSIGFE
-asnprintf SIGFE
-asprintf SIGFE
-atan NOSIGFE
-atan2 NOSIGFE
-atan2f NOSIGFE
-atanf NOSIGFE
-atanh NOSIGFE
-atanhf NOSIGFE
-atexit = cygwin_atexit SIGFE
-atof SIGFE
-atoff SIGFE
-atoi NOSIGFE
-atol NOSIGFE
-atoll NOSIGFE
-basename NOSIGFE
-bcmp NOSIGFE
-bcopy NOSIGFE
-bind = cygwin_bind SIGFE
-bindresvport = cygwin_bindresvport SIGFE
-bindresvport_sa = cygwin_bindresvport_sa SIGFE
-bsearch NOSIGFE
-btowc NOSIGFE
-bzero NOSIGFE
-cabs NOSIGFE
-cabsf NOSIGFE
-cacos NOSIGFE
-cacosf NOSIGFE
-cacosh NOSIGFE
-cacoshf NOSIGFE
-calloc SIGFE
-canonicalize_file_name SIGFE
-carg NOSIGFE
-cargf NOSIGFE
-casin NOSIGFE
-casinf NOSIGFE
-casinh NOSIGFE
-casinhf NOSIGFE
-catan NOSIGFE
-catanf NOSIGFE
-catanh NOSIGFE
-catanhf NOSIGFE
-cbrt NOSIGFE
-cbrtf NOSIGFE
-ccos NOSIGFE
-ccosf NOSIGFE
-ccosh NOSIGFE
-ccoshf NOSIGFE
-ceil NOSIGFE
-ceilf NOSIGFE
-cexp NOSIGFE
-cexpf NOSIGFE
-cfgetispeed NOSIGFE
-cfgetospeed NOSIGFE
-cfmakeraw NOSIGFE
-cfsetispeed SIGFE
-cfsetospeed SIGFE
-cfsetspeed SIGFE
-chdir SIGFE
-chmod SIGFE
-chown SIGFE
-chroot SIGFE
-cimag NOSIGFE
-cimagf NOSIGFE
-cleanup_glue NOSIGFE
-clearerr SIGFE
-clearerr_unlocked SIGFE
-clock SIGFE
-clock_getcpuclockid SIGFE
-clock_getres SIGFE
-clock_gettime SIGFE
-clock_nanosleep SIGFE
-clock_setres SIGFE
-clock_settime SIGFE
-clog NOSIGFE
-clogf NOSIGFE
-close SIGFE
-closedir SIGFE
-closelog SIGFE
-confstr NOSIGFE
-conj NOSIGFE
-conjf NOSIGFE
-connect = cygwin_connect SIGFE
-copysign NOSIGFE
-copysignf NOSIGFE
-cos NOSIGFE
-cosf NOSIGFE
-cosh NOSIGFE
-coshf NOSIGFE
-cpow NOSIGFE
-cpowf NOSIGFE
-cproj NOSIGFE
-cprojf NOSIGFE
-creal NOSIGFE
-crealf NOSIGFE
-creat SIGFE
-csin NOSIGFE
-csinf NOSIGFE
-csinh NOSIGFE
-csinhf NOSIGFE
-csqrt NOSIGFE
-csqrtf NOSIGFE
-ctan NOSIGFE
-ctanf NOSIGFE
-ctanh NOSIGFE
-ctanhf NOSIGFE
-ctermid SIGFE
-ctime SIGFE
-ctime_r SIGFE
-cuserid NOSIGFE
-cwait SIGFE
-cygwin_attach_handle_to_fd SIGFE
-cygwin_conv_path SIGFE
-cygwin_conv_path_list SIGFE
-cygwin_create_path SIGFE
-cygwin_detach_dll SIGFE_MAYBE
-cygwin_dll_init NOSIGFE
-cygwin_internal NOSIGFE
-cygwin_logon_user SIGFE
-cygwin_posix_path_list_p NOSIGFE
-cygwin_set_impersonation_token SIGFE
-cygwin_split_path NOSIGFE
-cygwin_stackdump SIGFE
-cygwin_umount SIGFE
-cygwin_winpid_to_pid SIGFE
-daemon SIGFE
-difftime NOSIGFE
-dirfd SIGFE
-dirname NOSIGFE
-div NOSIGFE
-dlclose SIGFE
-dlerror NOSIGFE
-dlfork NOSIGFE
-dll_crt0__FP11per_process NOSIGFE # dll_crt0(per_process *)
-dll_dllcrt0 NOSIGFE
-dlopen SIGFE
-dlsym SIGFE
-dn_comp = __dn_comp SIGFE
-dn_expand = __dn_expand SIGFE
-dn_skipname = __dn_skipname SIGFE
-dprintf SIGFE
-drand48 NOSIGFE
-drem NOSIGFE
-dremf NOSIGFE
-dup SIGFE
-dup2 SIGFE
-dup3 SIGFE
-eaccess = euidaccess SIGFE
-ecvt SIGFE
-ecvtbuf SIGFE
-ecvtf SIGFE
-endgrent NOSIGFE
-endhostent NOSIGFE
-endmntent NOSIGFE
-endprotoent = cygwin_endprotoent SIGFE
-endpwent NOSIGFE
-endservent = cygwin_endservent SIGFE
-endusershell SIGFE
-endutent SIGFE
-endutxent SIGFE
-envz_add SIGFE
-envz_entry NOSIGFE
-envz_get NOSIGFE
-envz_merge SIGFE
-envz_remove SIGFE
-envz_strip SIGFE
-erand48 NOSIGFE
-erf NOSIGFE
-erfc NOSIGFE
-erfcf NOSIGFE
-erff NOSIGFE
-err SIGFE
-error SIGFE
-error_at_line SIGFE
-errx SIGFE
-euidaccess SIGFE
-execl SIGFE
-execle SIGFE
-execlp SIGFE
-execv SIGFE
-execve SIGFE
-execvp SIGFE
-execvpe SIGFE
-exit = cygwin_exit SIGFE
-exp NOSIGFE
-exp10 NOSIGFE
-exp10f NOSIGFE
-exp2 NOSIGFE
-exp2f NOSIGFE
-expf NOSIGFE
-expm1 NOSIGFE
-expm1f NOSIGFE
-fabs NOSIGFE
-fabsf NOSIGFE
-faccessat SIGFE
-facl SIGFE
-fchdir SIGFE
-fchmod SIGFE
-fchmodat SIGFE
-fchown SIGFE
-fchownat SIGFE
-fclose SIGFE
-fcloseall SIGFE
-fcntl SIGFE
-fcvt SIGFE
-fcvtbuf SIGFE
-fcvtf SIGFE
-fdatasync SIGFE
-fdim NOSIGFE
-fdimf NOSIGFE
-fdopen SIGFE
-fdopendir SIGFE
-feclearexcept NOSIGFE
-fedisableexcept NOSIGFE
-feenableexcept SIGFE
-fegetenv NOSIGFE
-fegetexcept NOSIGFE
-fegetexceptflag NOSIGFE
-fegetprec NOSIGFE
-fegetround NOSIGFE
-feholdexcept SIGFE
-feof SIGFE
-feof_unlocked SIGFE
-feraiseexcept SIGFE
-ferror SIGFE
-ferror_unlocked SIGFE
-fesetenv SIGFE
-fesetexceptflag SIGFE
-fesetprec NOSIGFE
-fesetround NOSIGFE
-fetestexcept NOSIGFE
-feupdateenv SIGFE
-fexecve SIGFE
-fflush SIGFE
-fflush_unlocked SIGFE
-ffs NOSIGFE
-ffsl NOSIGFE
-ffsll NOSIGFE
-fgetc SIGFE
-fgetc_unlocked SIGFE
-fgetpos SIGFE
-fgets SIGFE
-fgets_unlocked SIGFE
-fgetwc SIGFE
-fgetwc_unlocked SIGFE
-fgetws SIGFE
-fgetws_unlocked SIGFE
-fgetxattr SIGFE
-fileno SIGFE
-fileno_unlocked SIGFE
-finite NOSIGFE
-finitef NOSIGFE
-fiprintf SIGFE
-flistxattr SIGFE
-flock SIGFE
-flockfile SIGFE
-floor NOSIGFE
-floorf NOSIGFE
-fma NOSIGFE
-fmaf NOSIGFE
-fmax NOSIGFE
-fmaxf NOSIGFE
-fmemopen SIGFE
-fmin NOSIGFE
-fminf NOSIGFE
-fmod NOSIGFE
-fmodf NOSIGFE
-fnmatch NOSIGFE
-fopen SIGFE
-fopencookie SIGFE
-fork SIGFE
-forkpty SIGFE
-fpathconf SIGFE
-fprintf SIGFE
-fpurge SIGFE
-fputc SIGFE
-fputc_unlocked SIGFE
-fputs SIGFE
-fputs_unlocked SIGFE
-fputwc SIGFE
-fputwc_unlocked SIGFE
-fputws SIGFE
-fputws_unlocked SIGFE
-fread SIGFE
-fread_unlocked SIGFE
-free SIGFE
-freeaddrinfo = cygwin_freeaddrinfo SIGFE
-freeifaddrs SIGFE
-fremovexattr SIGFE
-freopen SIGFE
-frexp NOSIGFE
-frexpf NOSIGFE
-fscanf SIGFE
-fseek SIGFE
-fseeko SIGFE
-fsetpos SIGFE
-fsetxattr SIGFE
-fstat SIGFE
-fstatat SIGFE
-fstatfs SIGFE
-fstatvfs SIGFE
-fsync SIGFE
-ftell SIGFE
-ftello SIGFE
-ftime SIGFE
-ftok SIGFE
-ftruncate SIGFE
-ftrylockfile SIGFE
-fts_children SIGFE
-fts_close SIGFE
-fts_get_clientptr NOSIGFE
-fts_get_stream NOSIGFE
-fts_open SIGFE
-fts_read SIGFE
-fts_set NOSIGFE
-fts_set_clientptr NOSIGFE
-ftw SIGFE
-funlockfile SIGFE
-funopen SIGFE
-futimens SIGFE
-futimes SIGFE
-futimesat SIGFE
-fwide SIGFE
-fwprintf SIGFE
-fwrite SIGFE
-fwrite_unlocked SIGFE
-fwscanf SIGFE
-gai_strerror = cygwin_gai_strerror NOSIGFE
-gamma NOSIGFE
-gamma_r NOSIGFE
-gammaf NOSIGFE
-gammaf_r NOSIGFE
-gcvt SIGFE
-gcvtf SIGFE
-GetCommandLineA@0 = cygwin_GetCommandLineA@0 NOSIGFE
-GetCommandLineW@0 = cygwin_GetCommandLineW@0 NOSIGFE
-get_avphys_pages SIGFE
-get_current_dir_name SIGFE
-get_nprocs SIGFE
-get_nprocs_conf SIGFE
-get_phys_pages SIGFE
-getaddrinfo = cygwin_getaddrinfo SIGFE
-getc SIGFE
-getc_unlocked SIGFE
-getchar SIGFE
-getchar_unlocked SIGFE
-getcwd SIGFE
-getdelim = __getdelim SIGFE
-getdomainname SIGFE
-getdtablesize NOSIGFE
-getegid NOSIGFE
-getenv NOSIGFE
-geteuid NOSIGFE
-getgid NOSIGFE
-getgrent SIGFE
-getgrgid SIGFE
-getgrgid_r SIGFE
-getgrnam SIGFE
-getgrnam_r SIGFE
-getgrouplist SIGFE
-getgroups SIGFE
-gethostbyaddr = cygwin_gethostbyaddr SIGFE
-gethostbyname = cygwin_gethostbyname SIGFE
-gethostbyname2 SIGFE
-gethostid SIGFE
-gethostname = cygwin_gethostname SIGFE
-getifaddrs SIGFE
-getitimer SIGFE
-getline = __getline SIGFE
-getlogin NOSIGFE
-getlogin_r NOSIGFE
-getmntent SIGFE
-getmntent_r SIGFE
-getmode SIGFE
-getnameinfo = cygwin_getnameinfo SIGFE
-getopt SIGFE
-getopt_long SIGFE
-getopt_long_only SIGFE
-getpagesize SIGFE
-getpass SIGFE
-getpeereid SIGFE
-getpeername = cygwin_getpeername SIGFE
-getpgid SIGFE
-getpgrp SIGFE
-getpid NOSIGFE
-getppid NOSIGFE
-getpriority SIGFE
-getprogname NOSIGFE
-getprotobyname = cygwin_getprotobyname SIGFE
-getprotobynumber = cygwin_getprotobynumber SIGFE
-getprotoent = cygwin_getprotoent SIGFE
-getpt SIGFE
-getpwent SIGFE
-getpwnam SIGFE
-getpwnam_r SIGFE
-getpwuid SIGFE
-getpwuid_r SIGFE
-getrlimit SIGFE
-getrusage SIGFE
-gets SIGFE
-getservbyname = cygwin_getservbyname SIGFE
-getservbyport = cygwin_getservbyport SIGFE
-getservent = cygwin_getservent SIGFE
-getsid SIGFE
-getsockname = cygwin_getsockname SIGFE
-getsockopt = cygwin_getsockopt SIGFE
-getsubopt NOSIGFE
-gettimeofday SIGFE
-getuid NOSIGFE
-getusershell SIGFE
-getutent SIGFE
-getutid SIGFE
-getutline SIGFE
-getutxent SIGFE
-getutxid SIGFE
-getutxline SIGFE
-getw SIGFE
-getwc SIGFE
-getwc_unlocked SIGFE
-getwchar SIGFE
-getwchar_unlocked SIGFE
-getwd SIGFE
-getxattr SIGFE
-glob SIGFE
-glob_pattern_p
-globfree SIGFE
-gmtime SIGFE
-gmtime_r SIGFE
-grantpt NOSIGFE
-hcreate SIGFE
-hcreate_r SIGFE
-hdestroy SIGFE
-hdestroy_r SIGFE
-herror = cygwin_herror SIGFE
-hsearch SIGFE
-hsearch_r SIGFE
-hstrerror = cygwin_hstrerror NOSIGFE
-htonl NOSIGFE
-htons NOSIGFE
-hypot NOSIGFE
-hypotf NOSIGFE
-if_freenameindex SIGFE
-if_indextoname SIGFE
-if_nameindex SIGFE
-if_nametoindex SIGFE
-ilogb NOSIGFE
-ilogbf NOSIGFE
-imaxabs = llabs NOSIGFE
-imaxdiv = lldiv NOSIGFE
-index NOSIGFE
-inet_addr = cygwin_inet_addr SIGFE
-inet_aton = cygwin_inet_aton SIGFE
-inet_makeaddr NOSIGFE
-inet_netof NOSIGFE
-inet_network = cygwin_inet_network SIGFE
-inet_ntoa = cygwin_inet_ntoa SIGFE
-inet_ntop = cygwin_inet_ntop SIGFE
-inet_pton = cygwin_inet_pton SIGFE
-infinity NOSIGFE
-infinityf NOSIGFE
-initgroups SIGFE
-initstate NOSIGFE
-insque NOSIGFE
-ioctl SIGFE
-iprintf SIGFE
-iruserok SIGFE
-iruserok_sa SIGFE
-isalnum NOSIGFE
-isalpha NOSIGFE
-isascii NOSIGFE
-isatty SIGFE
-isblank NOSIGFE
-iscntrl NOSIGFE
-isdigit NOSIGFE
-isgraph NOSIGFE
-isinf NOSIGFE
-isinff NOSIGFE
-islower NOSIGFE
-isnan NOSIGFE
-isnanf NOSIGFE
-isprint NOSIGFE
-ispunct NOSIGFE
-isspace NOSIGFE
-isupper NOSIGFE
-iswalnum NOSIGFE
-iswalpha NOSIGFE
-iswblank NOSIGFE
-iswcntrl NOSIGFE
-iswctype NOSIGFE
-iswdigit NOSIGFE
-iswgraph NOSIGFE
-iswlower NOSIGFE
-iswprint NOSIGFE
-iswpunct NOSIGFE
-iswspace NOSIGFE
-iswupper NOSIGFE
-iswxdigit NOSIGFE
-isxdigit NOSIGFE
-j0 NOSIGFE
-j0f NOSIGFE
-j1 NOSIGFE
-j1f NOSIGFE
-jn NOSIGFE
-jnf NOSIGFE
-jrand48 NOSIGFE
-kill SIGFE
-killpg SIGFE
-l64a NOSIGFE
-labs NOSIGFE
-lchown SIGFE
-lcong48 NOSIGFE
-ldexp NOSIGFE
-ldexpf NOSIGFE
-ldiv NOSIGFE
-lfind NOSIGFE
-lgamma NOSIGFE
-lgamma_r NOSIGFE
-lgammaf NOSIGFE
-lgammaf_r NOSIGFE
-lgetxattr SIGFE
-link SIGFE
-linkat SIGFE
-listen = cygwin_listen SIGFE
-listxattr SIGFE
-llabs NOSIGFE
-lldiv NOSIGFE
-llistxattr SIGFE
-llround NOSIGFE
-llroundf NOSIGFE
-localeconv NOSIGFE
-localtime SIGFE
-localtime_r SIGFE
-lockf SIGFE
-log NOSIGFE
-log10 NOSIGFE
-log10f NOSIGFE
-log1p NOSIGFE
-log1pf NOSIGFE
-log2 NOSIGFE
-log2f NOSIGFE
-logb NOSIGFE
-logbf NOSIGFE
-logf NOSIGFE
-login SIGFE
-login_tty SIGFE
-logout SIGFE
-logwtmp SIGFE
-longjmp NOSIGFE
-lrand48 NOSIGFE
-lremovexattr SIGFE
-lround NOSIGFE
-lroundf NOSIGFE
-lsearch NOSIGFE
-lseek SIGFE
-lsetxattr SIGFE
-lstat SIGFE
-lutimes SIGFE
-madvise = posix_madvise SIGFE
-mallinfo SIGFE
-malloc SIGFE
-malloc_stats SIGFE
-malloc_trim SIGFE
-malloc_usable_size SIGFE
-mallopt SIGFE
-matherr NOSIGFE
-mblen NOSIGFE
-mbrlen NOSIGFE
-mbrtowc NOSIGFE
-mbsinit NOSIGFE
-mbsnrtowcs NOSIGFE
-mbsrtowcs NOSIGFE
-mbstowcs NOSIGFE
-mbtowc NOSIGFE
-memalign SIGFE
-memccpy NOSIGFE
-memchr NOSIGFE
-memcmp NOSIGFE
-memcpy NOSIGFE
-memmem NOSIGFE
-memmove NOSIGFE
-mempcpy NOSIGFE
-memrchr NOSIGFE
-memset NOSIGFE
-mkdir SIGFE
-mkdirat SIGFE
-mkdtemp SIGFE
-mkfifo SIGFE
-mkfifoat SIGFE
-mknod SIGFE
-mknodat SIGFE
-mkostemp SIGFE
-mkostemps SIGFE
-mkstemp SIGFE
-mkstemps SIGFE
-mktemp SIGFE
-mktime SIGFE
-mlock SIGFE
-mmap SIGFE
-modf NOSIGFE
-modff NOSIGFE
-mount SIGFE
-mprotect SIGFE
-mq_close SIGFE
-mq_getattr SIGFE
-mq_notify SIGFE
-mq_open SIGFE
-mq_receive SIGFE
-mq_send SIGFE
-mq_setattr SIGFE
-mq_timedreceive SIGFE
-mq_timedsend SIGFE
-mq_unlink SIGFE
-mrand48 NOSIGFE
-msgctl SIGFE
-msgget SIGFE
-msgrcv SIGFE
-msgsnd SIGFE
-msync SIGFE
-munlock SIGFE
-munmap SIGFE
-nan NOSIGFE
-nanf NOSIGFE
-nanosleep SIGFE
-nearbyint NOSIGFE
-nearbyintf NOSIGFE
-nextafter NOSIGFE
-nextafterf NOSIGFE
-nftw SIGFE
-nice SIGFE
-nl_langinfo SIGFE
-nrand48 NOSIGFE
-ntohl NOSIGFE
-ntohs NOSIGFE
-on_exit SIGFE
-open SIGFE
-open_memstream SIGFE
-open_wmemstream SIGFE
-openat SIGFE
-opendir SIGFE
-openlog SIGFE
-openpty SIGFE
-pathconf SIGFE
-pause SIGFE
-pclose SIGFE
-perror SIGFE
-pipe SIGFE
-pipe2 SIGFE
-poll SIGFE
-popen SIGFE
-posix_fadvise SIGFE
-posix_fallocate SIGFE
-posix_madvise SIGFE
-posix_memalign SIGFE
-posix_openpt SIGFE
-posix_spawn SIGFE
-posix_spawnattr_destroy SIGFE
-posix_spawnattr_init SIGFE
-posix_spawnattr_getflags NOSIGFE
-posix_spawnattr_getpgroup NOSIGFE
-posix_spawnattr_getschedparam NOSIGFE
-posix_spawnattr_getschedpolicy NOSIGFE
-posix_spawnattr_getsigdefault NOSIGFE
-posix_spawnattr_getsigmask NOSIGFE
-posix_spawnattr_setflags NOSIGFE
-posix_spawnattr_setpgroup NOSIGFE
-posix_spawnattr_setschedparam NOSIGFE
-posix_spawnattr_setschedpolicy NOSIGFE
-posix_spawnattr_setsigdefault NOSIGFE
-posix_spawnattr_setsigmask NOSIGFE
-posix_spawnp SIGFE
-posix_spawn_file_actions_destroy SIGFE
-posix_spawn_file_actions_init SIGFE
-posix_spawn_file_actions_addclose SIGFE
-posix_spawn_file_actions_adddup2 SIGFE
-posix_spawn_file_actions_addopen SIGFE
-pow NOSIGFE
-pow10 NOSIGFE
-pow10f NOSIGFE
-powf NOSIGFE
-ppoll SIGFE
-pread SIGFE
-printf SIGFE
-pselect SIGFE
-psiginfo SIGFE
-psignal SIGFE
-pthread_atfork SIGFE
-pthread_attr_destroy SIGFE
-pthread_attr_getdetachstate SIGFE
-pthread_attr_getguardsize SIGFE
-pthread_attr_getinheritsched SIGFE
-pthread_attr_getschedparam SIGFE
-pthread_attr_getschedpolicy SIGFE
-pthread_attr_getscope SIGFE
-pthread_attr_getstack SIGFE
-pthread_attr_getstackaddr SIGFE
-pthread_attr_getstacksize SIGFE
-pthread_attr_init SIGFE
-pthread_attr_setdetachstate SIGFE
-pthread_attr_setguardsize SIGFE
-pthread_attr_setinheritsched SIGFE
-pthread_attr_setschedparam SIGFE
-pthread_attr_setschedpolicy SIGFE
-pthread_attr_setscope SIGFE
-pthread_attr_setstack SIGFE
-pthread_attr_setstackaddr SIGFE
-pthread_attr_setstacksize SIGFE
-pthread_cancel SIGFE
-pthread_cond_broadcast SIGFE
-pthread_cond_destroy SIGFE
-pthread_cond_init SIGFE
-pthread_cond_signal SIGFE
-pthread_cond_timedwait SIGFE
-pthread_cond_wait SIGFE
-pthread_condattr_destroy SIGFE
-pthread_condattr_getclock SIGFE
-pthread_condattr_getpshared SIGFE
-pthread_condattr_init SIGFE
-pthread_condattr_setclock SIGFE
-pthread_condattr_setpshared SIGFE
-pthread_continue SIGFE
-pthread_create SIGFE
-pthread_detach SIGFE
-pthread_equal SIGFE
-pthread_exit SIGFE
-pthread_getattr_np SIGFE
-pthread_getconcurrency SIGFE
-pthread_getcpuclockid SIGFE
-pthread_getschedparam SIGFE
-pthread_getsequence_np SIGFE
-pthread_getspecific SIGFE
-pthread_join SIGFE
-pthread_key_create SIGFE
-pthread_key_delete SIGFE
-pthread_kill SIGFE
-pthread_mutex_destroy SIGFE
-pthread_mutex_getprioceiling SIGFE
-pthread_mutex_init SIGFE
-pthread_mutex_lock SIGFE
-pthread_mutex_setprioceiling SIGFE
-pthread_mutex_trylock SIGFE
-pthread_mutex_unlock SIGFE
-pthread_mutexattr_destroy SIGFE
-pthread_mutexattr_getprioceiling SIGFE
-pthread_mutexattr_getprotocol SIGFE
-pthread_mutexattr_getpshared SIGFE
-pthread_mutexattr_gettype SIGFE
-pthread_mutexattr_init SIGFE
-pthread_mutexattr_setprioceiling SIGFE
-pthread_mutexattr_setprotocol SIGFE
-pthread_mutexattr_setpshared SIGFE
-pthread_mutexattr_settype SIGFE
-pthread_once SIGFE
-pthread_rwlock_destroy SIGFE
-pthread_rwlock_init SIGFE
-pthread_rwlock_rdlock SIGFE
-pthread_rwlock_tryrdlock SIGFE
-pthread_rwlock_trywrlock SIGFE
-pthread_rwlock_unlock SIGFE
-pthread_rwlock_wrlock SIGFE
-pthread_rwlockattr_destroy SIGFE
-pthread_rwlockattr_getpshared SIGFE
-pthread_rwlockattr_init SIGFE
-pthread_rwlockattr_setpshared SIGFE
-pthread_self SIGFE
-pthread_setcancelstate SIGFE
-pthread_setcanceltype SIGFE
-pthread_setconcurrency SIGFE
-pthread_setschedparam SIGFE
-pthread_setschedprio SIGFE
-pthread_setspecific SIGFE
-pthread_sigmask SIGFE
-pthread_sigqueue SIGFE
-pthread_spin_destroy SIGFE
-pthread_spin_init SIGFE
-pthread_spin_lock SIGFE
-pthread_spin_trylock SIGFE
-pthread_spin_unlock SIGFE
-pthread_suspend SIGFE
-pthread_testcancel SIGFE
-pthread_yield = sched_yield SIGFE
-ptsname SIGFE
-ptsname_r SIGFE
-putc SIGFE
-putc_unlocked SIGFE
-putchar SIGFE
-putchar_unlocked SIGFE
-putenv SIGFE
-puts SIGFE
-pututline SIGFE
-pututxline SIGFE
-putw SIGFE
-putwc SIGFE
-putwc_unlocked SIGFE
-putwchar SIGFE
-putwchar_unlocked SIGFE
-pwrite SIGFE
-qsort NOSIGFE
-qsort_r NOSIGFE
-quotactl SIGFE
-raise SIGFE
-rand NOSIGFE
-rand_r NOSIGFE
-random NOSIGFE
-rawmemchr NOSIGFE
-rcmd = cygwin_rcmd SIGFE
-rcmd_af = cygwin_rcmd_af SIGFE
-read SIGFE
-readdir SIGFE
-readdir_r SIGFE
-readlink SIGFE
-readlinkat SIGFE
-readv SIGFE
-realloc SIGFE
-reallocf SIGFE
-realpath SIGFE
-recv = cygwin_recv SIGFE
-recvfrom = cygwin_recvfrom SIGFE
-recvmsg = cygwin_recvmsg SIGFE
-regcomp SIGFE
-regerror SIGFE
-regexec SIGFE
-regfree SIGFE
-remainder NOSIGFE
-remainderf NOSIGFE
-remove SIGFE
-removexattr SIGFE
-remque NOSIGFE
-remquo NOSIGFE
-remquof NOSIGFE
-rename SIGFE
-renameat SIGFE
-res_close = __res_close SIGFE
-res_init = __res_init SIGFE
-res_mkquery = __res_mkquery SIGFE
-res_nclose = __res_nclose SIGFE
-res_ninit = __res_ninit SIGFE
-res_nmkquery = __res_nmkquery SIGFE
-res_nquery = __res_nquery SIGFE
-res_nquerydomain = __res_nquerydomain SIGFE
-res_nsearch = __res_nsearch SIGFE
-res_nsend = __res_nsend SIGFE
-res_query = __res_query SIGFE
-res_querydomain = __res_querydomain SIGFE
-res_search = __res_search SIGFE
-res_send = __res_send SIGFE
-revoke SIGFE
-rewind SIGFE
-rewinddir SIGFE
-rexec = cygwin_rexec SIGFE
-rindex NOSIGFE
-rmdir SIGFE
-round NOSIGFE
-roundf NOSIGFE
-rresvport = cygwin_rresvport SIGFE
-rresvport_af = cygwin_rresvport_af SIGFE
-ruserok SIGFE
-sbrk SIGFE
-scalb NOSIGFE
-scalbf NOSIGFE
-scalbln NOSIGFE
-scalblnf NOSIGFE
-scalbn NOSIGFE
-scalbnf NOSIGFE
-scandir SIGFE
-scandirat SIGFE
-scanf SIGFE
-sched_get_priority_max SIGFE
-sched_get_priority_min SIGFE
-sched_getparam SIGFE
-sched_getscheduler NOSIGFE
-sched_rr_get_interval SIGFE
-sched_setparam SIGFE
-sched_setscheduler SIGFE
-sched_yield SIGFE
-seed48 NOSIGFE
-seekdir SIGFE
-select = cygwin_select SIGFE
-sem_close SIGFE
-sem_destroy SIGFE
-sem_getvalue SIGFE
-sem_init SIGFE
-sem_open SIGFE
-sem_post SIGFE
-sem_timedwait SIGFE
-sem_trywait SIGFE
-sem_unlink SIGFE
-sem_wait SIGFE
-semctl SIGFE
-semget SIGFE
-semop SIGFE
-send = cygwin_send SIGFE
-sendmsg = cygwin_sendmsg SIGFE
-sendto = cygwin_sendto SIGFE
-setbuf SIGFE
-setbuffer SIGFE
-setdtablesize SIGFE
-setegid SIGFE
-setenv SIGFE
-seteuid SIGFE
-setgid SIGFE
-setgrent NOSIGFE
-setgroups SIGFE
-sethostent NOSIGFE
-setitimer SIGFE
-setjmp NOSIGFE
-setlinebuf SIGFE
-setlocale NOSIGFE
-setlogmask NOSIGFE
-setmntent SIGFE
-setpassent NOSIGFE
-setpgid SIGFE
-setpgrp SIGFE
-setpriority SIGFE
-setprogname NOSIGFE
-setprotoent = cygwin_setprotoent SIGFE
-setpwent NOSIGFE
-setregid SIGFE
-setreuid SIGFE
-setrlimit SIGFE
-setservent = cygwin_setservent SIGFE
-setsid SIGFE
-setsockopt = cygwin_setsockopt SIGFE
-setstate NOSIGFE
-settimeofday SIGFE
-setuid SIGFE
-setusershell SIGFE
-setutent SIGFE
-setutxent SIGFE
-setvbuf SIGFE
-setxattr SIGFE
-shm_open SIGFE
-shm_unlink SIGFE
-shmat SIGFE
-shmctl SIGFE
-shmdt SIGFE
-shmget SIGFE
-shutdown = cygwin_shutdown SIGFE
-sigaction SIGFE
-sigaddset SIGFE
-sigdelset SIGFE
-sigemptyset NOSIGFE
-sigfillset NOSIGFE
-sighold SIGFE
-sigignore SIGFE
-siginterrupt SIGFE
-sigismember SIGFE
-signal SIGFE
-significand NOSIGFE
-significandf NOSIGFE
-sigpause SIGFE
-sigpending SIGFE
-sigprocmask SIGFE
-sigqueue SIGFE
-sigrelse SIGFE
-sigset SIGFE
-sigsuspend SIGFE
-sigwait SIGFE
-sigwaitinfo SIGFE
-sin NOSIGFE
-sincos NOSIGFE
-sincosf NOSIGFE
-sinf NOSIGFE
-sinh NOSIGFE
-sinhf NOSIGFE
-siprintf SIGFE
-sleep SIGFE
-snprintf SIGFE
-socket = cygwin_socket SIGFE
-socketpair SIGFE
-spawnl SIGFE
-spawnle SIGFE
-spawnlp SIGFE
-spawnlpe SIGFE
-spawnv SIGFE
-spawnve SIGFE
-spawnvp SIGFE
-spawnvpe SIGFE
-sprintf SIGFE
-sqrt NOSIGFE
-sqrtf NOSIGFE
-srand NOSIGFE
-srand48 NOSIGFE
-srandom NOSIGFE
-sscanf SIGFE
-stat SIGFE
-statfs SIGFE
-statvfs SIGFE
-stime SIGFE
-stpcpy NOSIGFE
-stpncpy NOSIGFE
-strcasecmp NOSIGFE
-strcasestr NOSIGFE
-strcat NOSIGFE
-strchr NOSIGFE
-strchrnul NOSIGFE
-strcmp NOSIGFE
-strcoll NOSIGFE
-strcpy NOSIGFE
-strcspn NOSIGFE
-strdup SIGFE
-strerror SIGFE
-strerror_r SIGFE
-strfmon SIGFE
-strftime SIGFE
-strlcat NOSIGFE
-strlcpy NOSIGFE
-strlen NOSIGFE
-strlwr NOSIGFE
-strncasecmp NOSIGFE
-strncat NOSIGFE
-strncmp NOSIGFE
-strncpy NOSIGFE
-strndup SIGFE
-strnlen NOSIGFE
-strpbrk NOSIGFE
-strptime SIGFE
-strrchr NOSIGFE
-strsep NOSIGFE
-strsignal SIGFE
-strspn NOSIGFE
-strstr NOSIGFE
-strtod SIGFE
-strtof SIGFE
-strtoimax = strtoll NOSIGFE
-strtok NOSIGFE
-strtok_r NOSIGFE
-strtol NOSIGFE
-strtold = _strtold SIGFE
-strtoll NOSIGFE
-strtosigno NOSIGFE
-strtoul NOSIGFE
-strtoull NOSIGFE
-strtoumax = strtoull NOSIGFE
-strupr NOSIGFE
-strxfrm NOSIGFE
-swab NOSIGFE
-swprintf SIGFE
-swscanf SIGFE
-symlink SIGFE
-symlinkat SIGFE
-sync SIGFE
-sysconf SIGFE
-sysinfo SIGFE
-syslog SIGFE
-system SIGFE
-tan NOSIGFE
-tanf NOSIGFE
-tanh NOSIGFE
-tanhf NOSIGFE
-tcdrain SIGFE
-tcflow SIGFE
-tcflush SIGFE
-tcgetattr SIGFE
-tcgetpgrp SIGFE
-tcgetsid SIGFE
-tcsendbreak SIGFE
-tcsetattr SIGFE
-tcsetpgrp SIGFE
-tdelete SIGFE
-tdestroy NOSIGFE
-telldir SIGFE
-tempnam SIGFE
-tfind NOSIGFE
-tgamma NOSIGFE
-tgammaf NOSIGFE
-time SIGFE
-timegm NOSIGFE
-timelocal SIGFE
-timer_create SIGFE
-timer_delete SIGFE
-timer_gettime SIGFE
-timer_settime SIGFE
-times SIGFE
-timezone SIGFE
-tmpfile SIGFE
-tmpnam SIGFE
-toascii NOSIGFE
-tolower NOSIGFE
-toupper NOSIGFE
-towctrans NOSIGFE
-towlower NOSIGFE
-towupper NOSIGFE
-trunc NOSIGFE
-truncate SIGFE
-truncf NOSIGFE
-tsearch SIGFE
-ttyname SIGFE
-ttyname_r SIGFE
-ttyslot NOSIGFE
-twalk NOSIGFE
-tzset SIGFE
-ualarm SIGFE
-umask NOSIGFE
-umount SIGFE
-uname SIGFE
-ungetc SIGFE
-ungetwc SIGFE
-unlink SIGFE
-unlinkat SIGFE
-unlockpt NOSIGFE
-unsetenv SIGFE
-updwtmp SIGFE
-updwtmpx SIGFE
-usleep SIGFE
-utime SIGFE
-utimensat SIGFE
-utimes SIGFE
-utmpname SIGFE
-utmpxname SIGFE
-valloc SIGFE
-vasnprintf SIGFE
-vasprintf SIGFE
-vdprintf SIGFE
-verr SIGFE
-verrx SIGFE
-vfiprintf SIGFE
-vfork SIGFE
-vfprintf SIGFE
-vfscanf SIGFE
-vfwprintf SIGFE
-vfwscanf SIGFE
-vhangup SIGFE
-vprintf SIGFE
-vscanf SIGFE
-vsnprintf SIGFE
-vsprintf SIGFE
-vsscanf SIGFE
-vswprintf SIGFE
-vswscanf SIGFE
-vsyslog SIGFE
-vwarn SIGFE
-vwarnx SIGFE
-vwprintf SIGFE
-vwscanf SIGFE
-wait SIGFE
-wait3 SIGFE
-wait4 SIGFE
-waitpid SIGFE
-warn SIGFE
-warnx SIGFE
-wcpcpy NOSIGFE
-wcpncpy NOSIGFE
-wcrtomb NOSIGFE
-wcscasecmp NOSIGFE
-wcscat NOSIGFE
-wcschr NOSIGFE
-wcscmp NOSIGFE
-wcscoll NOSIGFE
-wcscpy NOSIGFE
-wcscspn NOSIGFE
-wcsdup NOSIGFE
-wcsftime SIGFE
-wcslcat NOSIGFE
-wcslcpy NOSIGFE
-wcslen NOSIGFE
-wcsncasecmp NOSIGFE
-wcsncat NOSIGFE
-wcsncmp NOSIGFE
-wcsncpy NOSIGFE
-wcsnlen NOSIGFE
-wcsnrtombs NOSIGFE
-wcspbrk NOSIGFE
-wcsrchr NOSIGFE
-wcsrtombs NOSIGFE
-wcsspn NOSIGFE
-wcsstr NOSIGFE
-wcstod NOSIGFE
-wcstof NOSIGFE
-wcstoimax = wcstoll NOSIGFE
-wcstok NOSIGFE
-wcstol NOSIGFE
-wcstoll NOSIGFE
-wcstombs NOSIGFE
-wcstoul NOSIGFE
-wcstoull NOSIGFE
-wcstoumax = wcstoull NOSIGFE
-wcswidth NOSIGFE
-wcsxfrm NOSIGFE
-wctob NOSIGFE
-wctomb NOSIGFE
-wctrans NOSIGFE
-wctype NOSIGFE
-wcwidth NOSIGFE
-wmemchr NOSIGFE
-wmemcmp NOSIGFE
-wmemcpy NOSIGFE
-wmemmove NOSIGFE
-wmemset NOSIGFE
-wordexp NOSIGFE
-wordfree NOSIGFE
-wprintf SIGFE
-write SIGFE
-writev SIGFE
-wscanf SIGFE
-xdr_array SIGFE
-xdr_bool SIGFE
-xdr_bytes SIGFE
-xdr_char SIGFE
-xdr_double SIGFE
-xdr_enum SIGFE
-xdr_float SIGFE
-xdr_free SIGFE
-xdr_hyper SIGFE
-xdr_int SIGFE
-xdr_int16_t SIGFE
-xdr_int32_t SIGFE
-xdr_int64_t SIGFE
-xdr_int8_t SIGFE
-xdr_long SIGFE
-xdr_longlong_t SIGFE
-xdr_netobj SIGFE
-xdr_opaque SIGFE
-xdr_pointer SIGFE
-xdr_reference SIGFE
-xdr_short SIGFE
-xdr_sizeof SIGFE
-xdr_string SIGFE
-xdr_u_char SIGFE
-xdr_u_hyper SIGFE
-xdr_u_int SIGFE
-xdr_u_int16_t SIGFE
-xdr_u_int32_t SIGFE
-xdr_u_int64_t SIGFE
-xdr_u_int8_t SIGFE
-xdr_u_long SIGFE
-xdr_u_longlong_t SIGFE
-xdr_u_short SIGFE
-xdr_uint16_t SIGFE
-xdr_uint32_t SIGFE
-xdr_uint64_t SIGFE
-xdr_uint8_t SIGFE
-xdr_union SIGFE
-xdr_vector SIGFE
-xdr_void SIGFE
-xdr_wrapstring SIGFE
-xdrmem_create SIGFE
-xdrrec_create SIGFE
-xdrrec_endofrecord SIGFE
-xdrrec_eof SIGFE
-xdrrec_skiprecord SIGFE
-xdrstdio_create SIGFE
-y0 NOSIGFE
-y0f NOSIGFE
-y1 NOSIGFE
-y1f NOSIGFE
-yn NOSIGFE
-ynf NOSIGFE
diff --git a/winsup/cygwin/config.h.in b/winsup/cygwin/config.h.in
deleted file mode 100644
index 32cba72d8..000000000
--- a/winsup/cygwin/config.h.in
+++ /dev/null
@@ -1,50 +0,0 @@
-/* config.h.in. Generated from configure.in by autoheader. */
-/* Define if DEBUGGING support is requested. */
-#undef DEBUGGING
-
-/* Define if GCC supports builtin memset. */
-#undef HAVE_BUILTIN_MEMSET
-
-/* Define if MALLOC_DEBUGGING support is requested. */
-#undef MALLOC_DEBUG
-
-/* Define if using new vfork functionality. */
-#undef NEWVFORK
-
-/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP
- systems. This function is required for `alloca.c' support on those systems.
- */
-#undef CRAY_STACKSEG_END
-
-/* Define to 1 if using `alloca.c'. */
-#undef C_ALLOCA
-
-/* Define to 1 if you have `alloca', as a function or macro. */
-#undef HAVE_ALLOCA
-
-/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
- */
-#undef HAVE_ALLOCA_H
-
-/* Define to the address where bug reports for this package should be sent. */
-#undef PACKAGE_BUGREPORT
-
-/* Define to the full name of this package. */
-#undef PACKAGE_NAME
-
-/* Define to the full name and version of this package. */
-#undef PACKAGE_STRING
-
-/* Define to the one symbol short name of this package. */
-#undef PACKAGE_TARNAME
-
-/* Define to the version of this package. */
-#undef PACKAGE_VERSION
-
-/* If using the C implementation of alloca, define if you know the
- direction of stack growth for your system; otherwise it will be
- automatically deduced at run-time.
- STACK_DIRECTION > 0 => grows toward higher addresses
- STACK_DIRECTION < 0 => grows toward lower addresses
- STACK_DIRECTION = 0 => direction of growth unknown */
-#undef STACK_DIRECTION
diff --git a/winsup/cygwin/configure b/winsup/cygwin/configure
deleted file mode 100755
index 522fae6df..000000000
--- a/winsup/cygwin/configure
+++ /dev/null
@@ -1,5756 +0,0 @@
-#! /bin/sh
-# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for Cygwin DLL 0.
-#
-# Report bugs to <cygwin@cygwin.com>.
-#
-#
-# Copyright (C) 1992-1996, 1998-2012 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 more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in #(
- *posix*) :
- set -o posix ;; #(
- *) :
- ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- PATH_SEPARATOR=:
- (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
- (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
- PATH_SEPARATOR=';'
- }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
-# Find who we are. Look in the path if we contain no directory separator.
-as_myself=
-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
-IFS=$as_save_IFS
-
- ;;
-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
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
- exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-# Use a proper internal environment variable to ensure we don't fall
- # into an infinite loop, continuously re-executing ourselves.
- if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
- _as_can_reexec=no; export _as_can_reexec;
- # We cannot yet assume a decent shell, so we have to provide a
-# neutralization value for shells without unset; and this also
-# works around shells that cannot unset nonexistent variables.
-# Preserve -v and -x to the replacement shell.
-BASH_ENV=/dev/null
-ENV=/dev/null
-(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-case $- in # ((((
- *v*x* | *x*v* ) as_opts=-vx ;;
- *v* ) as_opts=-v ;;
- *x* ) as_opts=-x ;;
- * ) as_opts= ;;
-esac
-exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
-# Admittedly, this is quite paranoid, since all the known shells bail
-# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-as_fn_exit 255
- fi
- # We don't want this to propagate to other subprocesses.
- { _as_can_reexec=; unset _as_can_reexec;}
-if test "x$CONFIG_SHELL" = x; then
- as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '\${1+\"\$@\"}'='\"\$@\"'
- setopt NO_GLOB_SUBST
-else
- case \`(set -o) 2>/dev/null\` in #(
- *posix*) :
- set -o posix ;; #(
- *) :
- ;;
-esac
-fi
-"
- as_required="as_fn_return () { (exit \$1); }
-as_fn_success () { as_fn_return 0; }
-as_fn_failure () { as_fn_return 1; }
-as_fn_ret_success () { return 0; }
-as_fn_ret_failure () { return 1; }
-
-exitcode=0
-as_fn_success || { exitcode=1; echo as_fn_success failed.; }
-as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
-as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
-as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
-if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
-
-else
- exitcode=1; echo positional parameters were not saved.
-fi
-test x\$exitcode = x0 || exit 1
-test -x / || exit 1"
- as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
- as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
- eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
- test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1"
- if (eval "$as_required") 2>/dev/null; then :
- as_have_required=yes
-else
- as_have_required=no
-fi
- if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
-
-else
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-as_found=false
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- as_found=:
- case $as_dir in #(
- /*)
- for as_base in sh bash ksh sh5; do
- # Try only shells that exist, to save several forks.
- as_shell=$as_dir/$as_base
- if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
- CONFIG_SHELL=$as_shell as_have_required=yes
- if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
- break 2
-fi
-fi
- done;;
- esac
- as_found=false
-done
-$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
- CONFIG_SHELL=$SHELL as_have_required=yes
-fi; }
-IFS=$as_save_IFS
-
-
- if test "x$CONFIG_SHELL" != x; then :
- export CONFIG_SHELL
- # We cannot yet assume a decent shell, so we have to provide a
-# neutralization value for shells without unset; and this also
-# works around shells that cannot unset nonexistent variables.
-# Preserve -v and -x to the replacement shell.
-BASH_ENV=/dev/null
-ENV=/dev/null
-(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-case $- in # ((((
- *v*x* | *x*v* ) as_opts=-vx ;;
- *v* ) as_opts=-v ;;
- *x* ) as_opts=-x ;;
- * ) as_opts= ;;
-esac
-exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
-# Admittedly, this is quite paranoid, since all the known shells bail
-# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-exit 255
-fi
-
- if test x$as_have_required = xno; then :
- $as_echo "$0: This script requires a shell more modern than all"
- $as_echo "$0: the shells that I found on your system."
- if test x${ZSH_VERSION+set} = xset ; then
- $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
- $as_echo "$0: be upgraded to zsh 4.3.4 or later."
- else
- $as_echo "$0: Please tell bug-autoconf@gnu.org and cygwin@cygwin.com
-$0: about your system, including any error possibly output
-$0: before this message. Then install a modern shell, or
-$0: manually run the script under such a shell if you do
-$0: have one."
- fi
- exit 1
-fi
-fi
-fi
-SHELL=${CONFIG_SHELL-/bin/sh}
-export SHELL
-# Unset more variables known to interfere with behavior of common tools.
-CLICOLOR_FORCE= GREP_OPTIONS=
-unset CLICOLOR_FORCE GREP_OPTIONS
-
-## --------------------- ##
-## M4sh Shell Functions. ##
-## --------------------- ##
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
- { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
- return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
- set +e
- as_fn_set_status $1
- exit $1
-} # as_fn_exit
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
- case $as_dir in #(
- -*) as_dir=./$as_dir;;
- esac
- test -d "$as_dir" || eval $as_mkdir_p || {
- as_dirs=
- while :; do
- case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
- *) as_qdir=$as_dir;;
- esac
- as_dirs="'$as_qdir' $as_dirs"
- as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- test -d "$as_dir" && break
- done
- test -z "$as_dirs" || eval "mkdir $as_dirs"
- } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-
-# as_fn_executable_p FILE
-# -----------------------
-# Test if FILE is an executable regular file.
-as_fn_executable_p ()
-{
- test -f "$1" && test -x "$1"
-} # as_fn_executable_p
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
- eval 'as_fn_append ()
- {
- eval $1+=\$2
- }'
-else
- as_fn_append ()
- {
- eval $1=\$$1\$2
- }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
- eval 'as_fn_arith ()
- {
- as_val=$(( $* ))
- }'
-else
- as_fn_arith ()
- {
- as_val=`expr "$@" || test $? -eq 1`
- }
-fi # as_fn_arith
-
-
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
-as_fn_error ()
-{
- as_status=$1; test $as_status -eq 0 && as_status=1
- if test "$4"; then
- as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
- fi
- $as_echo "$as_me: error: $2" >&2
- as_fn_exit $as_status
-} # as_fn_error
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; 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
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
- }
- /^X\/\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\/\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
-
-# 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
-
-
- as_lineno_1=$LINENO as_lineno_1a=$LINENO
- as_lineno_2=$LINENO as_lineno_2a=$LINENO
- eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
- test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
- # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
- sed -n '
- p
- /[$]LINENO/=
- ' <$as_myself |
- sed '
- s/[$]LINENO.*/&-/
- t lineno
- b
- :lineno
- N
- :loop
- s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
- t loop
- s/-\n.*//
- ' >$as_me.lineno &&
- chmod +x "$as_me.lineno" ||
- { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
-
- # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
- # already done that, so ensure we don't try to do so again and fall
- # in an infinite loop. This has already happened in practice.
- _as_can_reexec=no; export _as_can_reexec
- # 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 sensitive to this).
- . "./$as_me.lineno"
- # Exit status is that of the last command.
- exit
-}
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
- case `echo 'xy\c'` in
- *c*) ECHO_T=' ';; # ECHO_T is single tab character.
- xy) ECHO_C='\c';;
- *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
- ECHO_T=' ';;
- esac;;
-*)
- ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
- rm -f conf$$.dir/conf$$.file
-else
- rm -f conf$$.dir
- mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
- if ln -s conf$$.file conf$$ 2>/dev/null; then
- as_ln_s='ln -s'
- # ... but there are two gotchas:
- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -pR'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -pR'
- elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
- else
- as_ln_s='cp -pR'
- fi
-else
- as_ln_s='cp -pR'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p='mkdir -p "$as_dir"'
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-as_test_x='test -x'
-as_executable_p=as_fn_executable_p
-
-# 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'"
-
-
-test -n "$DJDIR" || exec 7<&0 </dev/null
-exec 6>&1
-
-# Name of the host.
-# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
-# so uname gets run too.
-ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
-
-#
-# Initializations.
-#
-ac_default_prefix=/usr/local
-ac_clean_files=
-ac_config_libobj_dir=.
-LIBOBJS=
-cross_compiling=no
-subdirs=
-MFLAGS=
-MAKEFLAGS=
-
-# Identity of this package.
-PACKAGE_NAME='Cygwin DLL'
-PACKAGE_TARNAME='cygwin'
-PACKAGE_VERSION='0'
-PACKAGE_STRING='Cygwin DLL 0'
-PACKAGE_BUGREPORT='cygwin@cygwin.com'
-PACKAGE_URL='https://cygwin.com'
-
-ac_unique_file="Makefile.in"
-ac_no_link=no
-ac_subst_vars='LTLIBOBJS
-LIBOBJS
-TLSOFFSETS_H
-DIN_FILE
-DEF_DLL_ENTRY
-DLL_ENTRY
-DLL_NAME
-LIBSERVER
-configure_args
-SET_MAKE
-WINDRES
-STRIP
-RANLIB
-OBJDUMP
-OBJCOPY
-NM
-LD
-DLLTOOL
-AS
-AR
-install_host
-all_host
-cygwin_headers
-newlib_headers
-windows_headers
-windows_libdir
-CPP
-ac_ct_CXX
-CXXFLAGS
-CXX
-OBJEXT
-EXEEXT
-ac_ct_CC
-CPPFLAGS
-LDFLAGS
-CFLAGS
-CC
-target_os
-target_vendor
-target_cpu
-target
-host_os
-host_vendor
-host_cpu
-host
-build_os
-build_vendor
-build_cpu
-build
-INSTALL_DATA
-INSTALL_SCRIPT
-INSTALL_PROGRAM
-target_alias
-host_alias
-build_alias
-LIBS
-ECHO_T
-ECHO_N
-ECHO_C
-DEFS
-mandir
-localedir
-libdir
-psdir
-pdfdir
-dvidir
-htmldir
-infodir
-docdir
-oldincludedir
-includedir
-localstatedir
-sharedstatedir
-sysconfdir
-datadir
-datarootdir
-libexecdir
-sbindir
-bindir
-program_transform_name
-prefix
-exec_prefix
-PACKAGE_URL
-PACKAGE_BUGREPORT
-PACKAGE_STRING
-PACKAGE_VERSION
-PACKAGE_TARNAME
-PACKAGE_NAME
-PATH_SEPARATOR
-SHELL
-winsup_srcdir
-target_builddir'
-ac_subst_files=''
-ac_user_opts='
-enable_option_checking
-with_windows_headers
-with_windows_libs
-enable_debugging
-'
- ac_precious_vars='build_alias
-host_alias
-target_alias
-CC
-CFLAGS
-LDFLAGS
-LIBS
-CPPFLAGS
-CXX
-CXXFLAGS
-CCC
-CPP'
-
-
-# Initialize some variables set by options.
-ac_init_help=
-ac_init_version=false
-ac_unrecognized_opts=
-ac_unrecognized_sep=
-# 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.
-# (The list follows the same order as the GNU Coding Standards.)
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datarootdir='${prefix}/share'
-datadir='${datarootdir}'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
-infodir='${datarootdir}/info'
-htmldir='${docdir}'
-dvidir='${docdir}'
-pdfdir='${docdir}'
-psdir='${docdir}'
-libdir='${exec_prefix}/lib'
-localedir='${datarootdir}/locale'
-mandir='${datarootdir}/man'
-
-ac_prev=
-ac_dashdash=
-for ac_option
-do
- # If the previous option needs an argument, assign it.
- if test -n "$ac_prev"; then
- eval $ac_prev=\$ac_option
- ac_prev=
- continue
- fi
-
- case $ac_option in
- *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
- *=) ac_optarg= ;;
- *) ac_optarg=yes ;;
- esac
-
- # Accept the important Cygnus configure options, so we can diagnose typos.
-
- case $ac_dashdash$ac_option in
- --)
- ac_dashdash=yes ;;
-
- -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)
- ac_prev=datadir ;;
- -datadir=* | --datadir=* | --datadi=* | --datad=*)
- datadir=$ac_optarg ;;
-
- -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
- | --dataroo | --dataro | --datar)
- ac_prev=datarootdir ;;
- -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
- | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
- datarootdir=$ac_optarg ;;
-
- -disable-* | --disable-*)
- ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid feature name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"enable_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval enable_$ac_useropt=no ;;
-
- -docdir | --docdir | --docdi | --doc | --do)
- ac_prev=docdir ;;
- -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
- docdir=$ac_optarg ;;
-
- -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
- ac_prev=dvidir ;;
- -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
- dvidir=$ac_optarg ;;
-
- -enable-* | --enable-*)
- ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid feature name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"enable_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval enable_$ac_useropt=\$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 ;;
-
- -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
- ac_prev=htmldir ;;
- -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
- | --ht=*)
- htmldir=$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 ;;
-
- -localedir | --localedir | --localedi | --localed | --locale)
- ac_prev=localedir ;;
- -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
- localedir=$ac_optarg ;;
-
- -localstatedir | --localstatedir | --localstatedi | --localstated \
- | --localstate | --localstat | --localsta | --localst | --locals)
- ac_prev=localstatedir ;;
- -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
- | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
- 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 ;;
-
- -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
- ac_prev=pdfdir ;;
- -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
- pdfdir=$ac_optarg ;;
-
- -psdir | --psdir | --psdi | --psd | --ps)
- ac_prev=psdir ;;
- -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
- psdir=$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_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid package name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"with_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval with_$ac_useropt=\$ac_optarg ;;
-
- -without-* | --without-*)
- ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid package name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"with_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval with_$ac_useropt=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 ;;
-
- -*) as_fn_error $? "unrecognized option: \`$ac_option'
-Try \`$0 --help' for more information"
- ;;
-
- *=*)
- ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
- # Reject names that are not valid shell variable names.
- case $ac_envvar in #(
- '' | [0-9]* | *[!_$as_cr_alnum]* )
- as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
- esac
- eval $ac_envvar=\$ac_optarg
- export $ac_envvar ;;
-
- *)
- # FIXME: should be removed in autoconf 3.0.
- $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
- expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- $as_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'`
- as_fn_error $? "missing argument to $ac_option"
-fi
-
-if test -n "$ac_unrecognized_opts"; then
- case $enable_option_checking in
- no) ;;
- fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
- *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
- esac
-fi
-
-# Check all directory arguments for consistency.
-for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
- datadir sysconfdir sharedstatedir localstatedir includedir \
- oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
- libdir localedir mandir
-do
- eval ac_val=\$$ac_var
- # Remove trailing slashes.
- case $ac_val in
- */ )
- ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
- eval $ac_var=\$ac_val;;
- esac
- # Be sure to have absolute directory names.
- case $ac_val in
- [\\/$]* | ?:[\\/]* ) continue;;
- NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
- esac
- as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
-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
- 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
-
-
-ac_pwd=`pwd` && test -n "$ac_pwd" &&
-ac_ls_di=`ls -di .` &&
-ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
- as_fn_error $? "working directory cannot be determined"
-test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
- as_fn_error $? "pwd does not report name of working directory"
-
-
-# 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 the parent directory.
- ac_confdir=`$as_dirname -- "$as_myself" ||
-$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_myself" : 'X\(//\)[^/]' \| \
- X"$as_myself" : 'X\(//\)$' \| \
- X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_myself" |
- 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
- test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
- as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
-fi
-ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
-ac_abs_confdir=`(
- cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
- pwd)`
-# When building in place, set srcdir=.
-if test "$ac_abs_confdir" = "$ac_pwd"; then
- srcdir=.
-fi
-# Remove unnecessary trailing slashes from srcdir.
-# Double slashes in file names in object file debugging info
-# mess up M-x gdb in Emacs.
-case $srcdir in
-*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
-esac
-for ac_var in $ac_precious_vars; do
- eval ac_env_${ac_var}_set=\${${ac_var}+set}
- eval ac_env_${ac_var}_value=\$${ac_var}
- eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
- eval ac_cv_env_${ac_var}_value=\$${ac_var}
-done
-
-#
-# 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 Cygwin DLL 0 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 \`..']
-
-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]
- --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]
- --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
- --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
- --infodir=DIR info documentation [DATAROOTDIR/info]
- --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
- --mandir=DIR man documentation [DATAROOTDIR/man]
- --docdir=DIR documentation root [DATAROOTDIR/doc/cygwin]
- --htmldir=DIR html documentation [DOCDIR]
- --dvidir=DIR dvi documentation [DOCDIR]
- --pdfdir=DIR pdf documentation [DOCDIR]
- --psdir=DIR ps documentation [DOCDIR]
-_ACEOF
-
- cat <<\_ACEOF
-
-System types:
- --build=BUILD configure for building on BUILD [guessed]
- --host=HOST cross-compile to build programs to run on HOST [BUILD]
- --target=TARGET configure for building compilers for TARGET [HOST]
-_ACEOF
-fi
-
-if test -n "$ac_init_help"; then
- case $ac_init_help in
- short | recursive ) echo "Configuration of Cygwin DLL 0:";;
- esac
- cat <<\_ACEOF
-
-Optional Features:
- --disable-option-checking ignore unrecognized --enable/--with options
- --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
- --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
- --enable-debugging Build a cygwin DLL which has more consistency checking for debugging
-
-Optional Packages:
- --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
- --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
- --with-windows-headers=DIR
- specify where the windows includes are located
- --with-windows-libs=DIR specify where the windows libraries are located
-
-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>
- LIBS libraries to pass to the linker, e.g. -l<library>
- CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
- you have headers in a nonstandard directory <include dir>
- CXX C++ compiler command
- CXXFLAGS C++ compiler flags
- 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.
-
-Report bugs to <cygwin@cygwin.com>.
-Cygwin DLL home page: <https://cygwin.com>.
-_ACEOF
-ac_status=$?
-fi
-
-if test "$ac_init_help" = "recursive"; then
- # If there are subdirs, report their specific --help.
- for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
- test -d "$ac_dir" ||
- { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
- continue
- ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
- # A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
- esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
- .) # We are building in place.
- ac_srcdir=.
- ac_top_srcdir=$ac_top_builddir_sub
- ac_abs_top_srcdir=$ac_pwd ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir
- ac_abs_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_build_prefix$srcdir
- ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
- cd "$ac_dir" || { ac_status=$?; continue; }
- # Check for guested 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
- else
- $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
- fi || ac_status=$?
- cd "$ac_pwd" || { ac_status=$?; break; }
- done
-fi
-
-test -n "$ac_init_help" && exit $ac_status
-if $ac_init_version; then
- cat <<\_ACEOF
-Cygwin DLL configure 0
-generated by GNU Autoconf 2.69
-
-Copyright (C) 2012 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
-fi
-
-## ------------------------ ##
-## Autoconf initialization. ##
-## ------------------------ ##
-
-# ac_fn_c_try_compile LINENO
-# --------------------------
-# Try to compile conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_compile ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext
- if { { ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compile") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_compile
-
-# ac_fn_cxx_try_compile LINENO
-# ----------------------------
-# Try to compile conftest.$ac_ext, and return whether this succeeded.
-ac_fn_cxx_try_compile ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext
- if { { ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compile") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && {
- test -z "$ac_cxx_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_cxx_try_compile
-
-# ac_fn_c_try_cpp LINENO
-# ----------------------
-# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_cpp ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if { { ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } > conftest.i && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_cpp
-cat >config.log <<_ACEOF
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-
-It was created by Cygwin DLL $as_me 0, which was
-generated by GNU Autoconf 2.69. Invocation command line was
-
- $ $0 $@
-
-_ACEOF
-exec 5>>config.log
-{
-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`
-/usr/bin/hostinfo = `(/usr/bin/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=.
- $as_echo "PATH: $as_dir"
- done
-IFS=$as_save_IFS
-
-} >&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_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=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- case $ac_pass in
- 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
- 2)
- as_fn_append 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
- as_fn_append ac_configure_args " '$ac_arg'"
- ;;
- esac
- done
-done
-{ ac_configure_args0=; unset ac_configure_args0;}
-{ ac_configure_args1=; unset 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: Use '\'' to represent an apostrophe within the trap.
-# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
-trap 'exit_status=$?
- # Save into config.log some information that might help in debugging.
- {
- echo
-
- $as_echo "## ---------------- ##
-## Cache variables. ##
-## ---------------- ##"
- echo
- # The following way of writing the cache mishandles newlines in values,
-(
- for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
- eval ac_val=\$$ac_var
- case $ac_val in #(
- *${as_nl}*)
- case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
- esac
- case $ac_var in #(
- _ | IFS | as_nl) ;; #(
- BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
- *) { eval $ac_var=; unset $ac_var;} ;;
- esac ;;
- esac
- done
- (set) 2>&1 |
- case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
- *${as_nl}ac_space=\ *)
- sed -n \
- "s/'\''/'\''\\\\'\'''\''/g;
- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
- ;; #(
- *)
- sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
- ;;
- esac |
- sort
-)
- echo
-
- $as_echo "## ----------------- ##
-## Output variables. ##
-## ----------------- ##"
- echo
- for ac_var in $ac_subst_vars
- do
- eval ac_val=\$$ac_var
- case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
- esac
- $as_echo "$ac_var='\''$ac_val'\''"
- done | sort
- echo
-
- if test -n "$ac_subst_files"; then
- $as_echo "## ------------------- ##
-## File substitutions. ##
-## ------------------- ##"
- echo
- for ac_var in $ac_subst_files
- do
- eval ac_val=\$$ac_var
- case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
- esac
- $as_echo "$ac_var='\''$ac_val'\''"
- done | sort
- echo
- fi
-
- if test -s confdefs.h; then
- $as_echo "## ----------- ##
-## confdefs.h. ##
-## ----------- ##"
- echo
- cat confdefs.h
- echo
- fi
- test "$ac_signal" != 0 &&
- $as_echo "$as_me: caught signal $ac_signal"
- $as_echo "$as_me: exit $exit_status"
- } >&5
- rm -f core *.core core.conftest.* &&
- rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
- exit $exit_status
-' 0
-for ac_signal in 1 2 13 15; do
- trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
-done
-ac_signal=0
-
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -f -r conftest* confdefs.h
-
-$as_echo "/* confdefs.h */" > 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
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_URL "$PACKAGE_URL"
-_ACEOF
-
-
-# Let the site file select an alternate cache file if it wants to.
-# Prefer an explicitly selected file to automatically selected ones.
-ac_site_file1=NONE
-ac_site_file2=NONE
-if test -n "$CONFIG_SITE"; then
- # We do not want a PATH search for config.site.
- case $CONFIG_SITE in #((
- -*) ac_site_file1=./$CONFIG_SITE;;
- */*) ac_site_file1=$CONFIG_SITE;;
- *) ac_site_file1=./$CONFIG_SITE;;
- esac
-elif test "x$prefix" != xNONE; then
- ac_site_file1=$prefix/share/config.site
- ac_site_file2=$prefix/etc/config.site
-else
- ac_site_file1=$ac_default_prefix/share/config.site
- ac_site_file2=$ac_default_prefix/etc/config.site
-fi
-for ac_site_file in "$ac_site_file1" "$ac_site_file2"
-do
- test "x$ac_site_file" = xNONE && continue
- if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
-$as_echo "$as_me: loading site script $ac_site_file" >&6;}
- sed 's/^/| /' "$ac_site_file" >&5
- . "$ac_site_file" \
- || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "failed to load site script $ac_site_file
-See \`config.log' for more details" "$LINENO" 5; }
- 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. DJGPP emulates it as a regular file.
- if test /dev/null != "$cache_file" && test -f "$cache_file"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
-$as_echo "$as_me: loading cache $cache_file" >&6;}
- case $cache_file in
- [\\/]* | ?:[\\/]* ) . "$cache_file";;
- *) . "./$cache_file";;
- esac
- fi
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
-$as_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 $ac_precious_vars; 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,)
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
- ac_cache_corrupted=: ;;
- ,set)
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
-$as_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
- # differences in whitespace do not lead to failure.
- ac_old_val_w=`echo x $ac_old_val`
- ac_new_val_w=`echo x $ac_new_val`
- if test "$ac_old_val_w" != "$ac_new_val_w"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
-$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
- ac_cache_corrupted=:
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
-$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
- eval $ac_var=\$ac_old_val
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
-$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
-$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
- fi;;
- esac
- # Pass precious variables to config.status.
- if test "$ac_new_set" = set; then
- case $ac_new_val in
- *\'*) ac_arg=$ac_var=`$as_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.
- *) as_fn_append ac_configure_args " '$ac_arg'" ;;
- esac
- fi
-done
-if $ac_cache_corrupted; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
-$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
- as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
-fi
-## -------------------- ##
-## Main body of script. ##
-## -------------------- ##
-
-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"
-
-ac_aux_dir=
-for ac_dir in .. "$srcdir"/..; do
- if test -f "$ac_dir/install-sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install-sh -c"
- break
- elif test -f "$ac_dir/install.sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install.sh -c"
- break
- elif test -f "$ac_dir/shtool"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/shtool install -c"
- break
- fi
-done
-if test -z "$ac_aux_dir"; then
- as_fn_error $? "cannot find install-sh, install.sh, or shtool in .. \"$srcdir\"/.." "$LINENO" 5
-fi
-
-# These three variables are undocumented and unsupported,
-# and are intended to be withdrawn in a future Autoconf release.
-# They can cause serious problems if a builder's source tree is in a directory
-# whose full name contains unusual characters.
-ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
-ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
-ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
-
-
-
-. ${srcdir}/../configure.cygwin
-
-# Find a good install program. We prefer a C program (faster),
-# so one script is as good as another. But avoid the broken or
-# incompatible versions:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if ${ac_cv_path_install+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
- ./ | .// | /[cC]/* | \
- /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
- ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
- /usr/ucb/* ) ;;
- *)
- # OSF1 and SCO ODT 3.0 have their own names for install.
- # Don't use installbsd from OSF since it installs stuff as root
- # by default.
- for ac_prog in ginstall scoinst install; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
- if test $ac_prog = install &&
- grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
- # AIX install. It has an incompatible calling convention.
- :
- elif test $ac_prog = install &&
- grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
- # program-specific install script used by HP pwplus--don't use.
- :
- else
- rm -rf conftest.one conftest.two conftest.dir
- echo one > conftest.one
- echo two > conftest.two
- mkdir conftest.dir
- if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
- test -s conftest.one && test -s conftest.two &&
- test -s conftest.dir/conftest.one &&
- test -s conftest.dir/conftest.two
- then
- ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
- break 3
- fi
- fi
- fi
- done
- done
- ;;
-esac
-
- done
-IFS=$as_save_IFS
-
-rm -rf conftest.one conftest.two conftest.dir
-
-fi
- if test "${ac_cv_path_install+set}" = set; then
- INSTALL=$ac_cv_path_install
- else
- # As a last resort, use the slow shell script. Don't cache a
- # value for INSTALL within a source directory, because that will
- # break other packages using the cache if that directory is
- # removed, or if the value is a relative name.
- INSTALL=$ac_install_sh
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-
-# Make sure we can run config.sub.
-$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
- as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
-$as_echo_n "checking build system type... " >&6; }
-if ${ac_cv_build+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_build_alias=$build_alias
-test "x$ac_build_alias" = x &&
- ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
-test "x$ac_build_alias" = x &&
- as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
-ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
- as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
-$as_echo "$ac_cv_build" >&6; }
-case $ac_cv_build in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
-esac
-build=$ac_cv_build
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_build
-shift
-build_cpu=$1
-build_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-build_os=$*
-IFS=$ac_save_IFS
-case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
-$as_echo_n "checking host system type... " >&6; }
-if ${ac_cv_host+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test "x$host_alias" = x; then
- ac_cv_host=$ac_cv_build
-else
- ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
- as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
-$as_echo "$ac_cv_host" >&6; }
-case $ac_cv_host in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
-esac
-host=$ac_cv_host
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_host
-shift
-host_cpu=$1
-host_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-host_os=$*
-IFS=$ac_save_IFS
-case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5
-$as_echo_n "checking target system type... " >&6; }
-if ${ac_cv_target+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test "x$target_alias" = x; then
- ac_cv_target=$ac_cv_host
-else
- ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` ||
- as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5
-$as_echo "$ac_cv_target" >&6; }
-case $ac_cv_target in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;;
-esac
-target=$ac_cv_target
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_target
-shift
-target_cpu=$1
-target_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-target_os=$*
-IFS=$ac_save_IFS
-case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac
-
-
-# The aliases save the names the user supplied, while $host etc.
-# will get canonicalized.
-test -n "$target_alias" &&
- test "$program_prefix$program_suffix$program_transform_name" = \
- NONENONEs,x,x, &&
- program_prefix=${target_alias}-
-
-
-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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="${ac_tool_prefix}gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
- $as_echo_n "(cached) " >&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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="${ac_tool_prefix}cc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- 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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&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_fn_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"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-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
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- for ac_prog in cl.exe
- 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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$CC" && break
- done
-fi
-if test -z "$CC"; then
- ac_ct_CC=$CC
- for ac_prog in cl.exe
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
- $as_echo_n "(cached) " >&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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$ac_ct_CC" && break
-done
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-fi
-
-fi
-
-
-test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "no acceptable C compiler found in \$PATH
-See \`config.log' for more details" "$LINENO" 5; }
-
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
- { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compiler $ac_option >&5") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- sed '10a\
-... rest of stderr output deleted ...
- 10q' conftest.err >conftest.er1
- cat conftest.er1 >&5
- fi
- rm -f conftest.er1 conftest.err
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
-done
-
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- ac_no_link=no
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.out.dSYM 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.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
-$as_echo_n "checking whether the C compiler works... " >&6; }
-ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-
-# The possible output files:
-ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
-
-ac_rmfiles=
-for ac_file in $ac_files
-do
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
- * ) ac_rmfiles="$ac_rmfiles $ac_file";;
- esac
-done
-rm -f $ac_rmfiles
-
-if { { ac_try="$ac_link_default"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link_default") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
- # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
-# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
-# in a Makefile. We should not override ac_cv_exeext if it was cached,
-# so that the user can short-circuit this test for compilers unknown to
-# Autoconf.
-for ac_file in $ac_files ''
-do
- test -f "$ac_file" || continue
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
- ;;
- [ab].out )
- # We found the default executable, but exeext='' is most
- # certainly right.
- break;;
- *.* )
- if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
- then :; else
- ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- fi
- # We set ac_cv_exeext here because the later test for it is not
- # safe: cross compilers may not add the suffix if given an `-o'
- # argument, so we may need to know it at that point already.
- # Even if this section looks crufty: it has the advantage of
- # actually working.
- break;;
- * )
- break;;
- esac
-done
-test "$ac_cv_exeext" = no && ac_cv_exeext=
-
-else
- ac_file=''
-fi
-if test -z "$ac_file"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-$as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "C compiler cannot create executables
-See \`config.log' for more details" "$LINENO" 5; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
-$as_echo_n "checking for C compiler default output file name... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
-ac_exeext=$ac_cv_exeext
-
-rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
-ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
-$as_echo_n "checking for suffix of executables... " >&6; }
-if { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; 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 | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
- *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- break;;
- * ) break;;
- esac
-done
-else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-rm -f conftest conftest$ac_cv_exeext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
-$as_echo "$ac_cv_exeext" >&6; }
-
-rm -f conftest.$ac_ext
-EXEEXT=$ac_cv_exeext
-ac_exeext=$EXEEXT
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdio.h>
-int
-main ()
-{
-FILE *f = fopen ("conftest.out", "w");
- return ferror (f) || fclose (f) != 0;
-
- ;
- return 0;
-}
-_ACEOF
-ac_clean_files="$ac_clean_files conftest.out"
-# Check that the compiler produces executables we can run. If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
-if test "$cross_compiling" != yes; then
- { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
- if { ac_try='./conftest$ac_cv_exeext'
- { { case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then
- cross_compiling=no
- else
- if test "$cross_compiling" = maybe; then
- cross_compiling=yes
- else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details" "$LINENO" 5; }
- fi
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
-
-rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
-ac_clean_files=$ac_clean_files_save
-
-else
- rm -f -r a.out a.exe b.out conftest.$ac_ext conftest.o conftest.obj conftest.dSYM
- ac_no_link=yes
- # Setting cross_compile will disable run tests; it will
- # also disable AC_CHECK_FILE but that's generally
- # correct if we can't link.
- cross_compiling=yes
- EXEEXT=
- # Check that the compiler produces executables we can run. If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
-if test "$cross_compiling" != yes; then
- { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
- if { ac_try='./conftest$ac_cv_exeext'
- { { case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then
- cross_compiling=no
- else
- if test "$cross_compiling" = maybe; then
- cross_compiling=yes
- else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details" "$LINENO" 5; }
- fi
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
-$as_echo_n "checking for suffix of object files... " >&6; }
-if ${ac_cv_objext+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.o conftest.obj
-if { { ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compile") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
- for ac_file in conftest.o conftest.obj conftest.*; do
- test -f "$ac_file" || continue;
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
- *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
- break;;
- esac
-done
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of object files: cannot compile
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
-$as_echo "$ac_cv_objext" >&6; }
-OBJEXT=$ac_cv_objext
-ac_objext=$OBJEXT
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
-$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if ${ac_cv_c_compiler_gnu+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-#ifndef __GNUC__
- choke me
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_compiler_gnu=yes
-else
- ac_compiler_gnu=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
-$as_echo "$ac_cv_c_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
- GCC=yes
-else
- GCC=
-fi
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if ${ac_cv_prog_cc_g+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_save_c_werror_flag=$ac_c_werror_flag
- ac_c_werror_flag=yes
- ac_cv_prog_cc_g=no
- CFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_g=yes
-else
- CFLAGS=""
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-else
- ac_c_werror_flag=$ac_save_c_werror_flag
- CFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_g=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_c_werror_flag=$ac_save_c_werror_flag
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
-$as_echo "$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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if ${ac_cv_prog_cc_c89+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_cv_prog_cc_c89=no
-ac_save_CC=$CC
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdarg.h>
-#include <stdio.h>
-struct stat;
-/* 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 -std 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 -std. */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
- inside strings and character constants. */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 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
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
- -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
- CC="$ac_save_CC $ac_arg"
- if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_c89=$ac_arg
-fi
-rm -f core conftest.err conftest.$ac_objext
- test "x$ac_cv_prog_cc_c89" != "xno" && break
-done
-rm -f conftest.$ac_ext
-CC=$ac_save_CC
-
-fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
- x)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
- xno)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
- *)
- CC="$CC $ac_cv_prog_cc_c89"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-if test "x$ac_cv_prog_cc_c89" != xno; then :
-
-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_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-if test -z "$CXX"; then
- if test -n "$CCC"; then
- CXX=$CCC
- else
- if test -n "$ac_tool_prefix"; then
- for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
- 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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CXX+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CXX"; then
- ac_cv_prog_CXX="$CXX" # 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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CXX=$ac_cv_prog_CXX
-if test -n "$CXX"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
-$as_echo "$CXX" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$CXX" && break
- done
-fi
-if test -z "$CXX"; then
- ac_ct_CXX=$CXX
- for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CXX+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_CXX"; then
- ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # 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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CXX="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
-if test -n "$ac_ct_CXX"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
-$as_echo "$ac_ct_CXX" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$ac_ct_CXX" && break
-done
-
- if test "x$ac_ct_CXX" = x; then
- CXX="g++"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CXX=$ac_ct_CXX
- fi
-fi
-
- fi
-fi
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
- { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compiler $ac_option >&5") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- sed '10a\
-... rest of stderr output deleted ...
- 10q' conftest.err >conftest.er1
- cat conftest.er1 >&5
- fi
- rm -f conftest.er1 conftest.err
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
-done
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
-$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
-if ${ac_cv_cxx_compiler_gnu+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-#ifndef __GNUC__
- choke me
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- ac_compiler_gnu=yes
-else
- ac_compiler_gnu=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
-$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
- GXX=yes
-else
- GXX=
-fi
-ac_test_CXXFLAGS=${CXXFLAGS+set}
-ac_save_CXXFLAGS=$CXXFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
-$as_echo_n "checking whether $CXX accepts -g... " >&6; }
-if ${ac_cv_prog_cxx_g+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_save_cxx_werror_flag=$ac_cxx_werror_flag
- ac_cxx_werror_flag=yes
- ac_cv_prog_cxx_g=no
- CXXFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- ac_cv_prog_cxx_g=yes
-else
- CXXFLAGS=""
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-
-else
- ac_cxx_werror_flag=$ac_save_cxx_werror_flag
- CXXFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- ac_cv_prog_cxx_g=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_cxx_werror_flag=$ac_save_cxx_werror_flag
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
-$as_echo "$ac_cv_prog_cxx_g" >&6; }
-if test "$ac_test_CXXFLAGS" = set; then
- CXXFLAGS=$ac_save_CXXFLAGS
-elif test $ac_cv_prog_cxx_g = yes; then
- if test "$GXX" = yes; then
- CXXFLAGS="-g -O2"
- else
- CXXFLAGS="-g"
- fi
-else
- if test "$GXX" = yes; then
- CXXFLAGS="-O2"
- else
- CXXFLAGS=
- fi
-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_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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
-$as_echo_n "checking how to run the C preprocessor... " >&6; }
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
- CPP=
-fi
-if test -z "$CPP"; then
- if ${ac_cv_prog_CPP+:} false; then :
- $as_echo_n "(cached) " >&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 confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- # Broken: success on invalid input.
-continue
-else
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i 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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
-$as_echo "$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 confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- # Broken: success on invalid input.
-continue
-else
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-
-else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details" "$LINENO" 5; }
-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_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
-
-
-
-
-# Check whether --with-windows-headers was given.
-if test "${with_windows_headers+set}" = set; then :
- withval=$with_windows_headers; test -z "$withval" && as_fn_error $? "must specify value for --with-windows-headers" "$LINENO" 5
-
-fi
-
-
-
-
-# Check whether --with-windows-libs was given.
-if test "${with_windows_libs+set}" = set; then :
- withval=$with_windows_libs; test -z "$withval" && as_fn_error $? "must specify value for --with-windows-libs" "$LINENO" 5
-
-fi
-
-windows_libdir=$(realdirpath "$with_windows_libs")
-if test -z "$windows_libdir"; then
- windows_libdir=$(realdirpath $(${ac_cv_prog_CC:-$CC} -xc /dev/null -Wl,--verbose=1 -lntdll 2>&1 | sed -rn 's%^.*\s(\S+)/libntdll\..*succeeded%\1%p'))
- if test -z "$windows_libdir"; then
- as_fn_error $? "cannot find windows library files" "$LINENO" 5
- fi
-fi
-
-
-
-
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-
-
-addto_CPPFLAGS -nostdinc
-: ${ac_cv_prog_CXX:=$CXX}
-: ${ac_cv_prog_CC:=$CC}
-
-cygwin_headers=$(realdirpath "$winsup_srcdir/cygwin/include")
-if test -z "$cygwin_headers"; then
- as_fn_error $? "cannot find $winsup_srcdir/cygwin/include directory" "$LINENO" 5
-fi
-
-newlib_headers=$(realdirpath $winsup_srcdir/../newlib/libc/include)
-if test -z "$newlib_headers"; then
- as_fn_error $? "cannot find newlib source directory: $winsup_srcdir/../newlib/libc/include" "$LINENO" 5
-fi
-newlib_headers="$target_builddir/newlib/targ-include $newlib_headers"
-
-if test -n "$with_windows_headers"; then
- if test -e "$with_windows_headers/windef.h"; then
- windows_headers="$with_windows_headers"
- else
- as_fn_error $? "cannot find windef.h in specified --with-windows-headers path: $saw_windows_headers" "$LINENO" 5;
- fi
-elif test -d "$winsup_srcdir/w32api/include/windef.h"; then
- windows_headers="$winsup_srcdir/w32api/include"
-else
- windows_headers=$(cd $($ac_cv_prog_CC -xc /dev/null -E -include windef.h 2>/dev/null | sed -n 's%^# 1 "\([^"]*\)/windef\.h".*$%\1%p' | head -n1) 2>/dev/null && pwd)
- if test -z "$windows_headers" -o ! -d "$windows_headers"; then
- as_fn_error $? "cannot find windows header files" "$LINENO" 5
- fi
-fi
-CC=$ac_cv_prog_CC
-CXX=$ac_cv_prog_CXX
-export CC
-export CXX
-
-
-
-
-
-case "$with_cross_host" in
- ""|*cygwin*)
- all_host="all_host"
- install_host="install_host"
- ;;
- *)
- all_host=
- install_host=
- ;;
-esac
-
-
-
-
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ar; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_AR+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$AR"; then
- ac_cv_prog_AR="$AR" # 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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_AR="${ac_tool_prefix}ar"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-AR=$ac_cv_prog_AR
-if test -n "$AR"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
-$as_echo "$AR" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_AR"; then
- ac_ct_AR=$AR
- # Extract the first word of "ar", so it can be a program name with args.
-set dummy ar; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_AR+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_AR"; then
- ac_cv_prog_ac_ct_AR="$ac_ct_AR" # 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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_AR="ar"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_AR=$ac_cv_prog_ac_ct_AR
-if test -n "$ac_ct_AR"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
-$as_echo "$ac_ct_AR" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_AR" = x; then
- AR="ar"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- AR=$ac_ct_AR
- fi
-else
- AR="$ac_cv_prog_AR"
-fi
-
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args.
-set dummy ${ac_tool_prefix}as; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_AS+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$AS"; then
- ac_cv_prog_AS="$AS" # 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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_AS="${ac_tool_prefix}as"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-AS=$ac_cv_prog_AS
-if test -n "$AS"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5
-$as_echo "$AS" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_AS"; then
- ac_ct_AS=$AS
- # Extract the first word of "as", so it can be a program name with args.
-set dummy as; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_AS+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_AS"; then
- ac_cv_prog_ac_ct_AS="$ac_ct_AS" # 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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_AS="as"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_AS=$ac_cv_prog_ac_ct_AS
-if test -n "$ac_ct_AS"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5
-$as_echo "$ac_ct_AS" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_AS" = x; then
- AS="as"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- AS=$ac_ct_AS
- fi
-else
- AS="$ac_cv_prog_AS"
-fi
-
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
-set dummy ${ac_tool_prefix}dlltool; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_DLLTOOL+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$DLLTOOL"; then
- ac_cv_prog_DLLTOOL="$DLLTOOL" # 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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-DLLTOOL=$ac_cv_prog_DLLTOOL
-if test -n "$DLLTOOL"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
-$as_echo "$DLLTOOL" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_DLLTOOL"; then
- ac_ct_DLLTOOL=$DLLTOOL
- # Extract the first word of "dlltool", so it can be a program name with args.
-set dummy dlltool; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_DLLTOOL"; then
- ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # 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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_DLLTOOL="dlltool"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
-if test -n "$ac_ct_DLLTOOL"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
-$as_echo "$ac_ct_DLLTOOL" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_DLLTOOL" = x; then
- DLLTOOL="dlltool"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- DLLTOOL=$ac_ct_DLLTOOL
- fi
-else
- DLLTOOL="$ac_cv_prog_DLLTOOL"
-fi
-
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}ld", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ld; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_LD+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$LD"; then
- ac_cv_prog_LD="$LD" # 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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_LD="${ac_tool_prefix}ld"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-LD=$ac_cv_prog_LD
-if test -n "$LD"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
-$as_echo "$LD" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_LD"; then
- ac_ct_LD=$LD
- # Extract the first word of "ld", so it can be a program name with args.
-set dummy ld; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_LD+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_LD"; then
- ac_cv_prog_ac_ct_LD="$ac_ct_LD" # 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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_LD="ld"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_LD=$ac_cv_prog_ac_ct_LD
-if test -n "$ac_ct_LD"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LD" >&5
-$as_echo "$ac_ct_LD" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_LD" = x; then
- LD="ld"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- LD=$ac_ct_LD
- fi
-else
- LD="$ac_cv_prog_LD"
-fi
-
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}nm", so it can be a program name with args.
-set dummy ${ac_tool_prefix}nm; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_NM+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$NM"; then
- ac_cv_prog_NM="$NM" # 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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_NM="${ac_tool_prefix}nm"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-NM=$ac_cv_prog_NM
-if test -n "$NM"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NM" >&5
-$as_echo "$NM" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_NM"; then
- ac_ct_NM=$NM
- # Extract the first word of "nm", so it can be a program name with args.
-set dummy nm; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_NM+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_NM"; then
- ac_cv_prog_ac_ct_NM="$ac_ct_NM" # 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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_NM="nm"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_NM=$ac_cv_prog_ac_ct_NM
-if test -n "$ac_ct_NM"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NM" >&5
-$as_echo "$ac_ct_NM" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_NM" = x; then
- NM="nm"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- NM=$ac_ct_NM
- fi
-else
- NM="$ac_cv_prog_NM"
-fi
-
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}objcopy", so it can be a program name with args.
-set dummy ${ac_tool_prefix}objcopy; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_OBJCOPY+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$OBJCOPY"; then
- ac_cv_prog_OBJCOPY="$OBJCOPY" # 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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_OBJCOPY="${ac_tool_prefix}objcopy"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-OBJCOPY=$ac_cv_prog_OBJCOPY
-if test -n "$OBJCOPY"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJCOPY" >&5
-$as_echo "$OBJCOPY" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_OBJCOPY"; then
- ac_ct_OBJCOPY=$OBJCOPY
- # Extract the first word of "objcopy", so it can be a program name with args.
-set dummy objcopy; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_OBJCOPY+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_OBJCOPY"; then
- ac_cv_prog_ac_ct_OBJCOPY="$ac_ct_OBJCOPY" # 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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_OBJCOPY="objcopy"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_OBJCOPY=$ac_cv_prog_ac_ct_OBJCOPY
-if test -n "$ac_ct_OBJCOPY"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJCOPY" >&5
-$as_echo "$ac_ct_OBJCOPY" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_OBJCOPY" = x; then
- OBJCOPY="objcopy"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- OBJCOPY=$ac_ct_OBJCOPY
- fi
-else
- OBJCOPY="$ac_cv_prog_OBJCOPY"
-fi
-
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
-set dummy ${ac_tool_prefix}objdump; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_OBJDUMP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$OBJDUMP"; then
- ac_cv_prog_OBJDUMP="$OBJDUMP" # 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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-OBJDUMP=$ac_cv_prog_OBJDUMP
-if test -n "$OBJDUMP"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
-$as_echo "$OBJDUMP" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_OBJDUMP"; then
- ac_ct_OBJDUMP=$OBJDUMP
- # Extract the first word of "objdump", so it can be a program name with args.
-set dummy objdump; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_OBJDUMP"; then
- ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # 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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_OBJDUMP="objdump"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
-if test -n "$ac_ct_OBJDUMP"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
-$as_echo "$ac_ct_OBJDUMP" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_OBJDUMP" = x; then
- OBJDUMP="objdump"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- OBJDUMP=$ac_ct_OBJDUMP
- fi
-else
- OBJDUMP="$ac_cv_prog_OBJDUMP"
-fi
-
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ranlib; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_RANLIB+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$RANLIB"; then
- ac_cv_prog_RANLIB="$RANLIB" # 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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-RANLIB=$ac_cv_prog_RANLIB
-if test -n "$RANLIB"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
-$as_echo "$RANLIB" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_RANLIB"; then
- ac_ct_RANLIB=$RANLIB
- # Extract the first word of "ranlib", so it can be a program name with args.
-set dummy ranlib; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_RANLIB"; then
- ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # 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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_RANLIB="ranlib"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
-if test -n "$ac_ct_RANLIB"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
-$as_echo "$ac_ct_RANLIB" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_RANLIB" = x; then
- RANLIB="ranlib"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- RANLIB=$ac_ct_RANLIB
- fi
-else
- RANLIB="$ac_cv_prog_RANLIB"
-fi
-
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
-set dummy ${ac_tool_prefix}strip; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_STRIP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$STRIP"; then
- ac_cv_prog_STRIP="$STRIP" # 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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_STRIP="${ac_tool_prefix}strip"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-STRIP=$ac_cv_prog_STRIP
-if test -n "$STRIP"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
-$as_echo "$STRIP" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_STRIP"; then
- ac_ct_STRIP=$STRIP
- # Extract the first word of "strip", so it can be a program name with args.
-set dummy strip; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_STRIP"; then
- ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # 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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_STRIP="strip"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
-if test -n "$ac_ct_STRIP"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
-$as_echo "$ac_ct_STRIP" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_STRIP" = x; then
- STRIP="strip"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- STRIP=$ac_ct_STRIP
- fi
-else
- STRIP="$ac_cv_prog_STRIP"
-fi
-
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args.
-set dummy ${ac_tool_prefix}windres; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_WINDRES+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$WINDRES"; then
- ac_cv_prog_WINDRES="$WINDRES" # 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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_WINDRES="${ac_tool_prefix}windres"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-WINDRES=$ac_cv_prog_WINDRES
-if test -n "$WINDRES"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINDRES" >&5
-$as_echo "$WINDRES" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_WINDRES"; then
- ac_ct_WINDRES=$WINDRES
- # Extract the first word of "windres", so it can be a program name with args.
-set dummy windres; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_WINDRES+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_WINDRES"; then
- ac_cv_prog_ac_ct_WINDRES="$ac_ct_WINDRES" # 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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_WINDRES="windres"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_WINDRES=$ac_cv_prog_ac_ct_WINDRES
-if test -n "$ac_ct_WINDRES"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_WINDRES" >&5
-$as_echo "$ac_ct_WINDRES" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_WINDRES" = x; then
- WINDRES="windres"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- WINDRES=$ac_ct_WINDRES
- fi
-else
- WINDRES="$ac_cv_prog_WINDRES"
-fi
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
-$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
-set x ${MAKE-make}
-ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
-if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat >conftest.make <<\_ACEOF
-SHELL = /bin/sh
-all:
- @echo '@@@%%%=$(MAKE)=@@@%%%'
-_ACEOF
-# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
-case `${MAKE-make} -f conftest.make 2>/dev/null` in
- *@@@%%%=?*=@@@%%%*)
- eval ac_cv_prog_make_${ac_make}_set=yes;;
- *)
- eval ac_cv_prog_make_${ac_make}_set=no;;
-esac
-rm -f conftest.make
-fi
-if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- SET_MAKE=
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- SET_MAKE="MAKE=${MAKE-make}"
-fi
-
-
-# Check whether --enable-debugging was given.
-if test "${enable_debugging+set}" = set; then :
- enableval=$enable_debugging; case "${enableval}" in
-yes) $as_echo "#define DEBUGGING 1" >>confdefs.h
- ;;
-no) ;;
-esac
-
-fi
-
-
-
-
-case "$target_cpu" in
- i?86)
- DLL_NAME="cygwin1.dll"
- DLL_ENTRY="_dll_entry@12"
- DEF_DLL_ENTRY="dll_entry@12"
- DIN_FILE="i686.din"
- TLSOFFSETS_H="tlsoffsets.h"
- ;;
- x86_64)
- DLL_NAME="cygwin1.dll"
- DLL_ENTRY="dll_entry"
- DEF_DLL_ENTRY="dll_entry"
- DIN_FILE="x86_64.din"
- TLSOFFSETS_H="tlsoffsets64.h"
- ;;
- *) as_fn_error $? "Invalid target processor \"$target_cpu\"" "$LINENO" 5 ;;
-esac
-
-
-configure_args=X
-for f in $ac_configure_args; do
- case "$f" in
- *--srcdir*) ;;
- *) configure_args="$configure_args $f" ;;
- esac
-done
-configure_args=$(/usr/bin/expr "$configure_args" : 'X \(.*\)')
-
-
-
-
-
-
-
-
-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, we kill variables containing newlines.
-# 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.
-(
- for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
- eval ac_val=\$$ac_var
- case $ac_val in #(
- *${as_nl}*)
- case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
- esac
- case $ac_var in #(
- _ | IFS | as_nl) ;; #(
- BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
- *) { eval $ac_var=; unset $ac_var;} ;;
- esac ;;
- esac
- done
-
- (set) 2>&1 |
- case $as_nl`(ac_space=' '; set) 2>&1` in #(
- *${as_nl}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 "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
- ;;
- esac |
- sort
-) |
- sed '
- /^ac_cv_env_/b end
- t clear
- :clear
- s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
- t end
- s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
- :end' >>confcache
-if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
- if test -w "$cache_file"; then
- if test "x$cache_file" != "x/dev/null"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
-$as_echo "$as_me: updating cache $cache_file" >&6;}
- if test ! -f "$cache_file" || test -h "$cache_file"; then
- cat confcache >"$cache_file"
- else
- case $cache_file in #(
- */* | ?:*)
- mv -f confcache "$cache_file"$$ &&
- mv -f "$cache_file"$$ "$cache_file" ;; #(
- *)
- mv -f confcache "$cache_file" ;;
- esac
- fi
- fi
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
-$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
- 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}'
-
-DEFS=-DHAVE_CONFIG_H
-
-ac_libobjs=
-ac_ltlibobjs=
-U=
-for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
- # 1. Remove the extension, and $U if already installed.
- ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
- ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
- # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
- # will be set to the directory where LIBOBJS objects are built.
- as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
- as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
-done
-LIBOBJS=$ac_libobjs
-
-LTLIBOBJS=$ac_ltlibobjs
-
-
-
-: "${CONFIG_STATUS=./config.status}"
-ac_write_fail=0
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
-as_write_fail=0
-cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
-#! $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}
-export SHELL
-_ASEOF
-cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
-## -------------------- ##
-## M4sh Initialization. ##
-## -------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in #(
- *posix*) :
- set -o posix ;; #(
- *) :
- ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- PATH_SEPARATOR=:
- (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
- (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
- PATH_SEPARATOR=';'
- }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
-# Find who we are. Look in the path if we contain no directory separator.
-as_myself=
-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
-IFS=$as_save_IFS
-
- ;;
-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
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
- exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
-as_fn_error ()
-{
- as_status=$1; test $as_status -eq 0 && as_status=1
- if test "$4"; then
- as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
- fi
- $as_echo "$as_me: error: $2" >&2
- as_fn_exit $as_status
-} # as_fn_error
-
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
- return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
- set +e
- as_fn_set_status $1
- exit $1
-} # as_fn_exit
-
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
- { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
- eval 'as_fn_append ()
- {
- eval $1+=\$2
- }'
-else
- as_fn_append ()
- {
- eval $1=\$$1\$2
- }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
- eval 'as_fn_arith ()
- {
- as_val=$(( $* ))
- }'
-else
- as_fn_arith ()
- {
- as_val=`expr "$@" || test $? -eq 1`
- }
-fi # as_fn_arith
-
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; 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
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
- }
- /^X\/\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\/\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
-
-# 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
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
- case `echo 'xy\c'` in
- *c*) ECHO_T=' ';; # ECHO_T is single tab character.
- xy) ECHO_C='\c';;
- *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
- ECHO_T=' ';;
- esac;;
-*)
- ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
- rm -f conf$$.dir/conf$$.file
-else
- rm -f conf$$.dir
- mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
- if ln -s conf$$.file conf$$ 2>/dev/null; then
- as_ln_s='ln -s'
- # ... but there are two gotchas:
- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -pR'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -pR'
- elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
- else
- as_ln_s='cp -pR'
- fi
-else
- as_ln_s='cp -pR'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
- case $as_dir in #(
- -*) as_dir=./$as_dir;;
- esac
- test -d "$as_dir" || eval $as_mkdir_p || {
- as_dirs=
- while :; do
- case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
- *) as_qdir=$as_dir;;
- esac
- as_dirs="'$as_qdir' $as_dirs"
- as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- test -d "$as_dir" && break
- done
- test -z "$as_dirs" || eval "mkdir $as_dirs"
- } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p='mkdir -p "$as_dir"'
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-
-# as_fn_executable_p FILE
-# -----------------------
-# Test if FILE is an executable regular file.
-as_fn_executable_p ()
-{
- test -f "$1" && test -x "$1"
-} # as_fn_executable_p
-as_test_x='test -x'
-as_executable_p=as_fn_executable_p
-
-# 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'"
-
-
-exec 6>&1
-## ----------------------------------- ##
-## Main body of $CONFIG_STATUS script. ##
-## ----------------------------------- ##
-_ASEOF
-test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# Save the log message, to keep $0 and so on meaningful, and to
-# report actual input values of CONFIG_FILES etc. instead of their
-# values after options handling.
-ac_log="
-This file was extended by Cygwin DLL $as_me 0, which was
-generated by GNU Autoconf 2.69. Invocation command line was
-
- CONFIG_FILES = $CONFIG_FILES
- CONFIG_HEADERS = $CONFIG_HEADERS
- CONFIG_LINKS = $CONFIG_LINKS
- CONFIG_COMMANDS = $CONFIG_COMMANDS
- $ $0 $@
-
-on `(hostname || uname -n) 2>/dev/null | sed 1q`
-"
-
-_ACEOF
-
-case $ac_config_files in *"
-"*) set x $ac_config_files; shift; ac_config_files=$*;;
-esac
-
-case $ac_config_headers in *"
-"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
-esac
-
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-# Files that config.status was made for.
-config_files="$ac_config_files"
-config_headers="$ac_config_headers"
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-ac_cs_usage="\
-\`$as_me' instantiates files and other configuration actions
-from templates according to the current configuration. Unless the files
-and actions are specified as TAGs, all are instantiated by default.
-
-Usage: $0 [OPTION]... [TAG]...
-
- -h, --help print this help, then exit
- -V, --version print version number and configuration settings, then exit
- --config print configuration, then exit
- -q, --quiet, --silent
- 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 <cygwin@cygwin.com>.
-Cygwin DLL home page: <https://cygwin.com>."
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
-ac_cs_version="\\
-Cygwin DLL config.status 0
-configured by $0, generated by GNU Autoconf 2.69,
- with options \\"\$ac_cs_config\\"
-
-Copyright (C) 2012 Free Software Foundation, Inc.
-This config.status script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it."
-
-ac_pwd='$ac_pwd'
-srcdir='$srcdir'
-INSTALL='$INSTALL'
-test -n "\$AWK" || AWK=awk
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# The default lists apply if the user does not specify any file.
-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=`expr "X$1" : 'X\([^=]*\)='`
- ac_optarg=
- ac_shift=:
- ;;
- *)
- ac_option=$1
- ac_optarg=$2
- ac_shift=shift
- ;;
- esac
-
- case $ac_option in
- # Handling of the options.
- -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
- ac_cs_recheck=: ;;
- --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
- $as_echo "$ac_cs_version"; exit ;;
- --config | --confi | --conf | --con | --co | --c )
- $as_echo "$ac_cs_config"; exit ;;
- --debug | --debu | --deb | --de | --d | -d )
- debug=: ;;
- --file | --fil | --fi | --f )
- $ac_shift
- case $ac_optarg in
- *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
- '') as_fn_error $? "missing file argument" ;;
- esac
- as_fn_append CONFIG_FILES " '$ac_optarg'"
- ac_need_defaults=false;;
- --header | --heade | --head | --hea )
- $ac_shift
- case $ac_optarg in
- *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- as_fn_append CONFIG_HEADERS " '$ac_optarg'"
- ac_need_defaults=false;;
- --he | --h)
- # Conflict between --help and --header
- as_fn_error $? "ambiguous option: \`$1'
-Try \`$0 --help' for more information.";;
- --help | --hel | -h )
- $as_echo "$ac_cs_usage"; exit ;;
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil | --si | --s)
- ac_cs_silent=: ;;
-
- # This is an error.
- -*) as_fn_error $? "unrecognized option: \`$1'
-Try \`$0 --help' for more information." ;;
-
- *) as_fn_append ac_config_targets " $1"
- ac_need_defaults=false ;;
-
- 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 || ac_write_fail=1
-if \$ac_cs_recheck; then
- set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
- shift
- \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
- CONFIG_SHELL='$SHELL'
- export CONFIG_SHELL
- exec "\$@"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-exec 5>>config.log
-{
- echo
- sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
- $as_echo "$ac_log"
-} >&5
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-
-# Handling of arguments.
-for ac_config_target in $ac_config_targets
-do
- case $ac_config_target in
- "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
- "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
-
- *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
- 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 against having it here, and in addition,
-# creating and moving files from /tmp can sometimes cause problems.
-# Hook for its removal unless debugging.
-# Note that there is a small window in which the directory will not be cleaned:
-# after its creation but before its name has been assigned to `$tmp'.
-$debug ||
-{
- tmp= ac_tmp=
- trap 'exit_status=$?
- : "${ac_tmp:=$tmp}"
- { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
-' 0
- trap 'as_fn_exit 1' 1 2 13 15
-}
-# Create a (secure) tmp directory for tmp files.
-
-{
- tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
- test -d "$tmp"
-} ||
-{
- tmp=./conf$$-$RANDOM
- (umask 077 && mkdir "$tmp")
-} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
-ac_tmp=$tmp
-
-# Set up the scripts for CONFIG_FILES section.
-# No need to generate them if there are no CONFIG_FILES.
-# This happens for instance with `./config.status config.h'.
-if test -n "$CONFIG_FILES"; then
-
-
-ac_cr=`echo X | tr X '\015'`
-# On cygwin, bash can eat \r inside `` if the user requested igncr.
-# But we know of no other shell where ac_cr would be empty at this
-# point, so we can use a bashism as a fallback.
-if test "x$ac_cr" = x; then
- eval ac_cr=\$\'\\r\'
-fi
-ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
-if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
- ac_cs_awk_cr='\\r'
-else
- ac_cs_awk_cr=$ac_cr
-fi
-
-echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
-_ACEOF
-
-
-{
- echo "cat >conf$$subs.awk <<_ACEOF" &&
- echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
- echo "_ACEOF"
-} >conf$$subs.sh ||
- as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
-ac_delim='%!_!# '
-for ac_last_try in false false false false false :; do
- . ./conf$$subs.sh ||
- as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-
- ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
- if test $ac_delim_n = $ac_delim_num; then
- break
- elif $ac_last_try; then
- as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
- else
- ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
- fi
-done
-rm -f conf$$subs.sh
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
-_ACEOF
-sed -n '
-h
-s/^/S["/; s/!.*/"]=/
-p
-g
-s/^[^!]*!//
-:repl
-t repl
-s/'"$ac_delim"'$//
-t delim
-:nl
-h
-s/\(.\{148\}\)..*/\1/
-t more1
-s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
-p
-n
-b repl
-:more1
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t nl
-:delim
-h
-s/\(.\{148\}\)..*/\1/
-t more2
-s/["\\]/\\&/g; s/^/"/; s/$/"/
-p
-b
-:more2
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t delim
-' <conf$$subs.awk | sed '
-/^[^""]/{
- N
- s/\n//
-}
-' >>$CONFIG_STATUS || ac_write_fail=1
-rm -f conf$$subs.awk
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACAWK
-cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
- for (key in S) S_is_set[key] = 1
- FS = ""
-
-}
-{
- line = $ 0
- nfields = split(line, field, "@")
- substed = 0
- len = length(field[1])
- for (i = 2; i < nfields; i++) {
- key = field[i]
- keylen = length(key)
- if (S_is_set[key]) {
- value = S[key]
- line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
- len += length(value) + length(field[++i])
- substed = 1
- } else
- len += 1 + keylen
- }
-
- print line
-}
-
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
- sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
-else
- cat
-fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
- || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
-_ACEOF
-
-# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
-# ${srcdir} and @srcdir@ entries 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[ ]*=[ ]*/{
-h
-s///
-s/^/:/
-s/[ ]*$/:/
-s/:\$(srcdir):/:/g
-s/:\${srcdir}:/:/g
-s/:@srcdir@:/:/g
-s/^:*//
-s/:*$//
-x
-s/\(=[ ]*\).*/\1/
-G
-s/\n//
-s/^[^=]*=[ ]*$//
-}'
-fi
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-fi # test -n "$CONFIG_FILES"
-
-# Set up the scripts for CONFIG_HEADERS section.
-# No need to generate them if there are no CONFIG_HEADERS.
-# This happens for instance with `./config.status Makefile'.
-if test -n "$CONFIG_HEADERS"; then
-cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
-BEGIN {
-_ACEOF
-
-# Transform confdefs.h into an awk script `defines.awk', embedded as
-# here-document in config.status, that substitutes the proper values into
-# config.h.in to produce config.h.
-
-# Create a delimiter string that does not exist in confdefs.h, to ease
-# handling of long lines.
-ac_delim='%!_!# '
-for ac_last_try in false false :; do
- ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
- if test -z "$ac_tt"; then
- break
- elif $ac_last_try; then
- as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
- else
- ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
- fi
-done
-
-# For the awk script, D is an array of macro values keyed by name,
-# likewise P contains macro parameters if any. Preserve backslash
-# newline sequences.
-
-ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
-sed -n '
-s/.\{148\}/&'"$ac_delim"'/g
-t rset
-:rset
-s/^[ ]*#[ ]*define[ ][ ]*/ /
-t def
-d
-:def
-s/\\$//
-t bsnl
-s/["\\]/\\&/g
-s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
-D["\1"]=" \3"/p
-s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p
-d
-:bsnl
-s/["\\]/\\&/g
-s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
-D["\1"]=" \3\\\\\\n"\\/p
-t cont
-s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
-t cont
-d
-:cont
-n
-s/.\{148\}/&'"$ac_delim"'/g
-t clear
-:clear
-s/\\$//
-t bsnlc
-s/["\\]/\\&/g; s/^/"/; s/$/"/p
-d
-:bsnlc
-s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
-b cont
-' <confdefs.h | sed '
-s/'"$ac_delim"'/"\\\
-"/g' >>$CONFIG_STATUS || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
- for (key in D) D_is_set[key] = 1
- FS = ""
-}
-/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
- line = \$ 0
- split(line, arg, " ")
- if (arg[1] == "#") {
- defundef = arg[2]
- mac1 = arg[3]
- } else {
- defundef = substr(arg[1], 2)
- mac1 = arg[2]
- }
- split(mac1, mac2, "(") #)
- macro = mac2[1]
- prefix = substr(line, 1, index(line, defundef) - 1)
- if (D_is_set[macro]) {
- # Preserve the white space surrounding the "#".
- print prefix "define", macro P[macro] D[macro]
- next
- } else {
- # Replace #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.
- if (defundef == "undef") {
- print "/*", prefix defundef, macro, "*/"
- next
- }
- }
-}
-{ print }
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
- as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
-fi # test -n "$CONFIG_HEADERS"
-
-
-eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS "
-shift
-for ac_tag
-do
- case $ac_tag in
- :[FHLC]) ac_mode=$ac_tag; continue;;
- esac
- case $ac_mode$ac_tag in
- :[FHL]*:*);;
- :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
- :[FH]-) ac_tag=-:-;;
- :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
- esac
- ac_save_IFS=$IFS
- IFS=:
- set x $ac_tag
- IFS=$ac_save_IFS
- shift
- ac_file=$1
- shift
-
- case $ac_mode in
- :L) ac_source=$1;;
- :[FH])
- ac_file_inputs=
- for ac_f
- do
- case $ac_f in
- -) ac_f="$ac_tmp/stdin";;
- *) # Look for the file first in the build tree, then in the source tree
- # (if the path is not absolute). The absolute path cannot be DOS-style,
- # because $ac_f cannot contain `:'.
- test -f "$ac_f" ||
- case $ac_f in
- [\\/$]*) false;;
- *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
- esac ||
- as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
- esac
- case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
- as_fn_append ac_file_inputs " '$ac_f'"
- done
-
- # 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. */
- configure_input='Generated from '`
- $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
- `' by configure.'
- if test x"$ac_file" != x-; then
- configure_input="$ac_file. $configure_input"
- { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
-$as_echo "$as_me: creating $ac_file" >&6;}
- fi
- # Neutralize special characters interpreted by sed in replacement strings.
- case $configure_input in #(
- *\&* | *\|* | *\\* )
- ac_sed_conf_input=`$as_echo "$configure_input" |
- sed 's/[\\\\&|]/\\\\&/g'`;; #(
- *) ac_sed_conf_input=$configure_input;;
- esac
-
- case $ac_tag in
- *:-:* | *:-) cat >"$ac_tmp/stdin" \
- || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
- esac
- ;;
- esac
-
- ac_dir=`$as_dirname -- "$ac_file" ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$ac_file" : 'X\(//\)[^/]' \| \
- X"$ac_file" : 'X\(//\)$' \| \
- X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$ac_file" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- as_dir="$ac_dir"; as_fn_mkdir_p
- ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
- # A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
- esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
- .) # We are building in place.
- ac_srcdir=.
- ac_top_srcdir=$ac_top_builddir_sub
- ac_abs_top_srcdir=$ac_pwd ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir
- ac_abs_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_build_prefix$srcdir
- ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
-
- case $ac_mode in
- :F)
- #
- # CONFIG_FILE
- #
-
- case $INSTALL in
- [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
- *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
- esac
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# If the template does not know about datarootdir, expand it.
-# FIXME: This hack should be removed a few years after 2.60.
-ac_datarootdir_hack=; ac_datarootdir_seen=
-ac_sed_dataroot='
-/datarootdir/ {
- p
- q
-}
-/@datadir@/p
-/@docdir@/p
-/@infodir@/p
-/@localedir@/p
-/@mandir@/p'
-case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
-*datarootdir*) ac_datarootdir_seen=yes;;
-*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
- ac_datarootdir_hack='
- s&@datadir@&$datadir&g
- s&@docdir@&$docdir&g
- s&@infodir@&$infodir&g
- s&@localedir@&$localedir&g
- s&@mandir@&$mandir&g
- s&\\\${datarootdir}&$datarootdir&g' ;;
-esac
-_ACEOF
-
-# Neutralize VPATH when `$srcdir' = `.'.
-# Shell code in configure.ac might set extrasub.
-# FIXME: do we really want to maintain this feature?
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_sed_extra="$ac_vpsub
-$extrasub
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-:t
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s|@configure_input@|$ac_sed_conf_input|;t t
-s&@top_builddir@&$ac_top_builddir_sub&;t t
-s&@top_build_prefix@&$ac_top_build_prefix&;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&@abs_top_builddir@&$ac_abs_top_builddir&;t t
-s&@INSTALL@&$ac_INSTALL&;t t
-$ac_datarootdir_hack
-"
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
- >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
-
-test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
- { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
- { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
- "$ac_tmp/out"`; test -z "$ac_out"; } &&
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined. Please make sure it is defined" >&5
-$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined. Please make sure it is defined" >&2;}
-
- rm -f "$ac_tmp/stdin"
- case $ac_file in
- -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
- *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
- esac \
- || as_fn_error $? "could not create $ac_file" "$LINENO" 5
- ;;
- :H)
- #
- # CONFIG_HEADER
- #
- if test x"$ac_file" != x-; then
- {
- $as_echo "/* $configure_input */" \
- && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
- } >"$ac_tmp/config.h" \
- || as_fn_error $? "could not create $ac_file" "$LINENO" 5
- if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
-$as_echo "$as_me: $ac_file is unchanged" >&6;}
- else
- rm -f "$ac_file"
- mv "$ac_tmp/config.h" "$ac_file" \
- || as_fn_error $? "could not create $ac_file" "$LINENO" 5
- fi
- else
- $as_echo "/* $configure_input */" \
- && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
- || as_fn_error $? "could not create -" "$LINENO" 5
- fi
- ;;
-
-
- esac
-
-done # for ac_tag
-
-
-as_fn_exit 0
-_ACEOF
-ac_clean_files=$ac_clean_files_save
-
-test $ac_write_fail = 0 ||
- as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
-
-
-# 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 || as_fn_exit 1
-fi
-if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
-$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
-fi
-
diff --git a/winsup/cygwin/configure.ac b/winsup/cygwin/configure.ac
deleted file mode 100644
index fc7697b3b..000000000
--- a/winsup/cygwin/configure.ac
+++ /dev/null
@@ -1,113 +0,0 @@
-dnl Autoconf configure script for Cygwin.
-dnl Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-dnl 2006, 2008, 2009, 2011, 2012, 2013, 2014 Red Hat, Inc.
-dnl
-dnl This file is part of Cygwin.
-dnl
-dnl This software is a copyrighted work licensed under the terms of the
-dnl Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-dnl details.
-dnl
-dnl Process this file with autoconf to produce a configure script.
-
-AC_PREREQ(2.59)dnl
-AC_INIT([Cygwin DLL], 0,
- cygwin@cygwin.com, cygwin, https://cygwin.com)
-AC_CONFIG_SRCDIR(Makefile.in)
-AC_CONFIG_HEADER(config.h)
-AC_CONFIG_AUX_DIR(..)
-
-. ${srcdir}/../configure.cygwin
-
-AC_PROG_INSTALL
-AC_NO_EXECUTABLES
-AC_CANONICAL_SYSTEM
-
-AC_PROG_CC
-AC_PROG_CXX
-AC_PROG_CPP
-AC_LANG(C)
-
-AC_WINDOWS_HEADERS
-AC_WINDOWS_LIBS
-
-AC_LANG(C++)
-
-AC_CYGWIN_INCLUDES
-
-case "$with_cross_host" in
- ""|*cygwin*)
- all_host="all_host"
- install_host="install_host"
- ;;
- *)
- all_host=
- install_host=
- ;;
-esac
-
-AC_SUBST(all_host)
-AC_SUBST(install_host)
-
-AC_CHECK_TOOL(AR, ar, ar)
-AC_CHECK_TOOL(AS, as, as)
-AC_CHECK_TOOL(DLLTOOL, dlltool, dlltool)
-AC_CHECK_TOOL(LD, ld, ld)
-AC_CHECK_TOOL(NM, nm, nm)
-AC_CHECK_TOOL(OBJCOPY, objcopy, objcopy)
-AC_CHECK_TOOL(OBJDUMP, objdump, objdump)
-AC_CHECK_TOOL(RANLIB, ranlib, ranlib)
-AC_CHECK_TOOL(STRIP, strip, strip)
-AC_CHECK_TOOL(WINDRES, windres, windres)
-
-AC_PROG_MAKE_SET
-
-AC_ARG_ENABLE(debugging,
-[ --enable-debugging Build a cygwin DLL which has more consistency checking for debugging],
-[case "${enableval}" in
-yes) AC_DEFINE(DEBUGGING) ;;
-no) ;;
-esac
-])
-
-dnl The only time we might want to transform the install names
-dnl is for unix x cygwin. Otherwise we don't. For now we don't
-dnl transform names.
-
-dnl if test "x$cross_compiling" = "xno" -a ; then
-dnl if test "x$program_transform_name" = "xs,x,x,"; then
-dnl program_transform_name=""
-dnl fi
-dnl if test "x$program_transform_name" = "x"; then
-dnl program_transform_name="s,^,$target_alias-,"
-dnl else
-dnl program_transform_name="$program_transform_name -e s,^,$target_alias-,"
-dnl fi
-dnl fi
-
-case "$target_cpu" in
- i?86)
- DLL_NAME="cygwin1.dll"
- DLL_ENTRY="_dll_entry@12"
- DEF_DLL_ENTRY="dll_entry@12"
- DIN_FILE="i686.din"
- TLSOFFSETS_H="tlsoffsets.h"
- ;;
- x86_64)
- DLL_NAME="cygwin1.dll"
- DLL_ENTRY="dll_entry"
- DEF_DLL_ENTRY="dll_entry"
- DIN_FILE="x86_64.din"
- TLSOFFSETS_H="tlsoffsets64.h"
- ;;
- *) AC_MSG_ERROR(Invalid target processor \"$target_cpu\") ;;
-esac
-
-AC_CONFIGURE_ARGS
-AC_SUBST(LIBSERVER)
-AC_SUBST(DLL_NAME)
-AC_SUBST(DLL_ENTRY)
-AC_SUBST(DEF_DLL_ENTRY)
-AC_SUBST(DIN_FILE)
-AC_SUBST(TLSOFFSETS_H)
-AC_OUTPUT(Makefile)
diff --git a/winsup/cygwin/cpuid.h b/winsup/cygwin/cpuid.h
deleted file mode 100644
index 7053b4d9d..000000000
--- a/winsup/cygwin/cpuid.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/* cpuid.h: Define cpuid instruction
-
- Copyright 2003, 2012, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef CPUID_H
-#define CPUID_H
-
-static inline void __attribute ((always_inline))
-cpuid (uint32_t *a, uint32_t *b, uint32_t *c, uint32_t *d, uint32_t ain,
- uint32_t cin = 0)
-{
- asm volatile ("cpuid"
- : "=a" (*a), "=b" (*b), "=c" (*c), "=d" (*d)
- : "a" (ain), "c" (cin));
-}
-
-#ifdef __x86_64__
-static inline bool __attribute ((always_inline))
-can_set_flag (register uint32_t long flag)
-{
- register uint32_t long r1, r2;
-
- asm volatile ("pushfq\n"
- "popq %0\n"
- "movq %0, %1\n"
- "xorq %2, %0\n"
- "pushq %0\n"
- "popfq\n"
- "pushfq\n"
- "popq %0\n"
- "pushq %1\n"
- "popfq\n"
- : "=&r" (r1), "=&r" (r2)
- : "ir" (flag)
- );
- return ((r1 ^ r2) & flag) != 0;
-}
-#else
-static inline bool __attribute ((always_inline))
-can_set_flag (register uint32_t flag)
-{
- register uint32_t r1, r2;
-
- asm volatile ("pushfl\n"
- "popl %0\n"
- "movl %0, %1\n"
- "xorl %2, %0\n"
- "pushl %0\n"
- "popfl\n"
- "pushfl\n"
- "popl %0\n"
- "pushl %1\n"
- "popfl\n"
- : "=&r" (r1), "=&r" (r2)
- : "ir" (flag)
- );
- return ((r1 ^ r2) & flag) != 0;
-}
-#endif
-
-#endif // !CPUID_H
diff --git a/winsup/cygwin/crt0.c b/winsup/cygwin/crt0.c
deleted file mode 100644
index b5a21bd35..000000000
--- a/winsup/cygwin/crt0.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/* crt0.c
-
- Copyright 2001, 2003, 2004, 2005, 2010, 2011 Red Hat, Inc.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-/* In the following ifdef'd i386 code, the FPU precision is set to 80 bits
- and all FPU exceptions are masked. The former is needed to make long
- doubles work correctly. The latter causes the FPU to generate NaNs and
- Infinities instead of signals for certain operations. */
-
-#include "winlean.h"
-#include <sys/cygwin.h>
-
-extern int main (int argc, char **argv);
-
-void cygwin_crt0 (int (*main) (int, char **));
-
-void
-mainCRTStartup ()
-{
-#ifdef __i386__
- (void)__builtin_return_address(1);
- asm volatile ("andl $-16,%%esp" ::: "%esp");
-#endif
-
- cygwin_crt0 (main);
-
- /* These are never actually called. They are just here to force the inclusion
- of things like -lbinmode. */
-
- cygwin_premain0 (0, NULL, NULL);
- cygwin_premain1 (0, NULL, NULL);
- cygwin_premain2 (0, NULL, NULL);
- cygwin_premain3 (0, NULL, NULL);
-}
-
-void WinMainCRTStartup(void) __attribute__ ((alias("mainCRTStartup")));
diff --git a/winsup/cygwin/ctype.cc b/winsup/cygwin/ctype.cc
deleted file mode 100644
index fa8aad3eb..000000000
--- a/winsup/cygwin/ctype.cc
+++ /dev/null
@@ -1,90 +0,0 @@
-#include "winsup.h"
-extern "C" {
-#include <ctype.h>
-#include <stdlib.h>
-#include <wctype.h>
-
-extern char _ctype_b[128 + 256];
-
-/* Called from newlib's setlocale(). What we do here is to copy the
- 128 bytes of charset specific ctype data into the array at _ctype_b.
- Given that the functionality is usually implemented locally in the
- application, that's the only backward compatible way to do it.
- Setlocale is usually only called once in an application, so this isn't
- time-critical anyway. */
-extern int __iso_8859_index (const char *charset_ext); /* Newlib */
-extern int __cp_index (const char *charset_ext); /* Newlib */
-extern const char __ctype_cp[22][128 + 256]; /* Newlib */
-extern const char __ctype_iso[15][128 + 256]; /* Newlib */
-
-void
-__set_ctype (const char *charset)
-{
- int idx;
-
- switch (*charset)
- {
- case 'I':
- idx = __iso_8859_index (charset + 9);
- /* Our ctype table has a leading ISO-8859-1 element. */
- if (idx < 0)
- idx = 0;
- else
- ++idx;
- if (CYGWIN_VERSION_CHECK_FOR_OLD_CTYPE)
- {
- memcpy (_ctype_b, __ctype_iso[idx], 128);
- memcpy (_ctype_b + 256, __ctype_iso[idx] + 256, 128);
- }
- __ctype_ptr__ = (char *) (__ctype_iso[idx] + 127);
- return;
- case 'C':
- idx = __cp_index (charset + 2);
- if (idx < 0)
- break;
- if (CYGWIN_VERSION_CHECK_FOR_OLD_CTYPE)
- {
- memcpy (_ctype_b, __ctype_cp[idx], 128);
- memcpy (_ctype_b + 256, __ctype_cp[idx] + 256, 128);
- }
- __ctype_ptr__ = (char *) (__ctype_cp[idx] + 127);
- return;
- default:
- break;
- }
- if (CYGWIN_VERSION_CHECK_FOR_OLD_CTYPE)
- {
- memset (_ctype_b, 0, 128);
- memset (_ctype_b + 256, 0, 128);
- }
- __ctype_ptr__ = (char *) _ctype_b + 127;
-}
-
-} /* extern "C" */
-
-/*
- * Copyright (c) 1989 The Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
diff --git a/winsup/cygwin/cxx.cc b/winsup/cygwin/cxx.cc
deleted file mode 100644
index 0faeaf7ee..000000000
--- a/winsup/cygwin/cxx.cc
+++ /dev/null
@@ -1,108 +0,0 @@
-/* cxx.cc
-
- Copyright 2002, 2003, 2005, 2009 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#if (__GNUC__ >= 3)
-
-#include "winsup.h"
-#include "cygwin-cxx.h"
-
-/* These implementations of operators new and delete are used internally by
- the DLL, and are kept separate from the user's/libstdc++'s versions by
- use of LD's --wrap option. */
-
-void *
-operator new (std::size_t s)
-{
- void *p = calloc (1, s);
- return p;
-}
-
-void
-operator delete (void *p)
-{
- free (p);
-}
-
-void *
-operator new[] (std::size_t s)
-{
- return ::operator new (s);
-}
-
-void
-operator delete[] (void *p)
-{
- ::operator delete (p);
-}
-
-/* Nothrow versions, provided only for completeness in the fallback array. */
-
-void *
-operator new (std::size_t s, const std::nothrow_t &)
-{
- void *p = calloc (1, s);
- return p;
-}
-
-void
-operator delete (void *p, const std::nothrow_t &)
-{
- free (p);
-}
-
-void *
-operator new[] (std::size_t s, const std::nothrow_t &nt)
-{
- return ::operator new (s, nt);
-}
-
-void
-operator delete[] (void *p, const std::nothrow_t &nt)
-{
- ::operator delete (p, nt);
-}
-
-
-extern "C" void
-__cxa_pure_virtual (void)
-{
- api_fatal ("pure virtual method called");
-}
-
-extern "C" void
-__cxa_guard_acquire ()
-{
-}
-
-extern "C" void
-__cxa_guard_release ()
-{
-}
-
-/* These routines are made available as last-resort fallbacks
- for the application. Should not be used in practice; the
- entries in this struct get overwritten by each DLL as it
- is loaded, and libstdc++ will override the whole lot first
- thing of all. */
-
-struct per_process_cxx_malloc default_cygwin_cxx_malloc =
-{
- &(operator new),
- &(operator new[]),
- &(operator delete),
- &(operator delete[]),
- &(operator new),
- &(operator new[]),
- &(operator delete),
- &(operator delete[]),
-};
-
-
-#endif
diff --git a/winsup/cygwin/cygerrno.h b/winsup/cygwin/cygerrno.h
deleted file mode 100644
index b9ec7b61d..000000000
--- a/winsup/cygwin/cygerrno.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/* cygerrno.h: main Cygwin header file.
-
- Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2009, 2010, 2011, 2012, 2013,
- 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _CYGERRNO_H
-#define _CYGERRNO_H
-#include <errno.h>
-#include "regparm.h"
-
-void __reg3 seterrno_from_win_error (const char *file, int line, DWORD code);
-void __reg3 seterrno_from_nt_status (const char *file, int line, NTSTATUS status);
-int __reg2 geterrno_from_win_error (DWORD code = GetLastError (), int deferrno = 13 /*EACCESS*/);
-int __reg2 geterrno_from_nt_status (NTSTATUS status, int deferrno = 13 /*EACCESS*/);
-
-inline void __attribute__ ((always_inline))
-seterrno (const char *file, int line)
-{
- seterrno_from_win_error (file, line, GetLastError ());
-}
-
-#define __seterrno() seterrno (__FILE__, __LINE__)
-#define __seterrno_from_win_error(val) seterrno_from_win_error (__FILE__, __LINE__, val)
-#define __seterrno_from_nt_status(status) seterrno_from_nt_status (__FILE__, __LINE__, status)
-
-extern inline int
-__set_errno (const char *fn, int ln, int val)
-{
- debug_printf ("%s:%d setting errno %d", fn, ln, val);
- return errno = _impure_ptr->_errno = val;
-}
-#define set_errno(val) __set_errno (__PRETTY_FUNCTION__, __LINE__, (val))
-
-#define get_errno() (errno)
-extern "C" void __stdcall set_sig_errno (int e);
-
-class save_errno
- {
- int saved;
- public:
- save_errno () {saved = get_errno ();}
- save_errno (int what) {saved = get_errno (); set_errno (what); }
- void set (int what) {set_errno (what); saved = what;}
- void reset () {saved = get_errno ();}
- ~save_errno () {errno = _impure_ptr->_errno = saved;}
- };
-
-extern const char *__sp_fn;
-extern int __sp_ln;
-#endif /*_CYGERRNO_H*/
diff --git a/winsup/cygwin/cygheap.cc b/winsup/cygwin/cygheap.cc
deleted file mode 100644
index 6493485c3..000000000
--- a/winsup/cygwin/cygheap.cc
+++ /dev/null
@@ -1,746 +0,0 @@
-/* cygheap.cc: Cygwin heap manager.
-
- Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
- 2011, 2012, 2013, 2014 Red Hat, Inc.
-
- This file is part of Cygwin.
-
- This software is a copyrighted work licensed under the terms of the
- Cygwin license. Please consult the file "CYGWIN_LICENSE" for
- details. */
-
-#include "winsup.h"
-#include <assert.h>
-#include <stdlib.h>
-#include "cygerrno.h"
-#include "security.h"
-#include "path.h"
-#include "tty.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "child_info.h"
-#include "heap.h"
-#include "sigproc.h"
-#include "pinfo.h"
-#include "registry.h"
-#include "ntdll.h"
-#include <unistd.h>
-#include <wchar.h>
-#include <sys/param.h>
-
-static mini_cygheap NO_COPY cygheap_dummy =
-{
- {__utf8_mbtowc, __utf8_wctomb}
-};
-
-init_cygheap NO_COPY *cygheap = (init_cygheap *) &cygheap_dummy;
-void NO_COPY *cygheap_max;
-
-extern "C" char _cygheap_end[];
-
-static NO_COPY muto cygheap_protect;
-
-struct cygheap_entry
-{
- int type;
- struct cygheap_entry *next;
- char data[0];
-};
-
-class tls_sentry
-{
-public:
- static muto lock;
- int destroy;
- void init ();
- bool acquired () {return lock.acquired ();}
- tls_sentry () {destroy = 0;}
- tls_sentry (DWORD wait) {destroy = lock.acquire (wait);}
- ~tls_sentry () {if (destroy) lock.release ();}
-};
-
-muto NO_COPY tls_sentry::lock;
-static NO_COPY uint32_t nthreads;
-
-#define THREADLIST_CHUNK 256
-
-#define to_cmalloc(s) ((_cmalloc_entry *) (((char *) (s)) - offsetof (_cmalloc_entry, data)))
-
-#define CFMAP_OPTIONS (SEC_RESERVE | PAGE_READWRITE)
-#define MVMAP_OPTIONS (FILE_MAP_WRITE)
-
-extern "C" {
-static void __reg1 _cfree (void *);
-static void *__stdcall _csbrk (int);
-}
-
-/* Called by fork or spawn to reallocate cygwin heap */
-void __stdcall
-cygheap_fixup_in_child (bool execed)
-{
- cygheap_max = cygheap = (init_cygheap *) _cygheap_start;
- _csbrk ((char *) child_proc_info->cygheap_max - (char *) cygheap);
- child_copy (child_proc_info->parent, false, "cygheap", cygheap, cygheap_max, NULL);
- cygheap_init ();
- debug_fixup_after_fork_exec ();
- if (execed)
- {
- cygheap->hooks.next = NULL;
- cygheap->user_heap.base = NULL; /* We can allocate the heap anywhere */
- }
- /* Walk the allocated memory chain looking for orphaned memory from
- previous execs or forks */
- for (_cmalloc_entry *rvc = cygheap->chain; rvc; rvc = rvc->prev)
- {
- cygheap_entry *ce = (cygheap_entry *) rvc->data;
- if (!rvc->ptr || rvc->b >= NBUCKETS || ce->type <= HEAP_1_START)
- continue;
- else if (ce->type > HEAP_2_MAX)
- _cfree (ce); /* Marked for freeing in any child */
- else if (!execed)
- continue;
- else if (ce->type > HEAP_1_MAX)
- _cfree (ce); /* Marked for freeing in execed child */
- else
- ce->type += HEAP_1_MAX; /* Mark for freeing after next exec */
- }
-}
-
-void
-init_cygheap::close_ctty ()
-{
- debug_printf ("closing cygheap->ctty %p", cygheap->ctty);
- cygheap->ctty->close_with_arch ();
- cygheap->ctty = NULL;
-}
-
-/* Use absolute path of cygwin1.dll to derive the Win32 dir which
- is our installation_root. Note that we can't handle Cygwin installation
- root dirs of more than 4K path length. I assume that's ok...
-
- This function also generates the installation_key value. It's a 64 bit
- hash value based on the path of the Cygwin DLL itself. It's subsequently
- used when generating shared object names. Thus, different Cygwin
- installations generate different object names and so are isolated from
- each other.
-
- Having this information, the installation key together with the
- installation root path is written to the registry. The idea is that
- cygcheck can print the paths into which the Cygwin DLL has been
- installed for debugging purposes.
-
- Last but not least, the new cygwin properties datastructure is checked
- for the "disabled_key" value, which is used to determine whether the
- installation key is actually added to all object names or not. This is
- used as a last resort for debugging purposes, usually. However, there
- could be another good reason to re-enable object name collisions between
- multiple Cygwin DLLs, which we're just not aware of right now. Cygcheck
- can be used to change the value in an existing Cygwin DLL binary. */
-void
-init_cygheap::init_installation_root ()
-{
- ptrdiff_t len = 0;
-
- if (!GetModuleFileNameW (cygwin_hmodule, installation_root, PATH_MAX))
- api_fatal ("Can't initialize Cygwin installation root dir.\n"
- "GetModuleFileNameW(%p, %p, %u), %E",
- cygwin_hmodule, installation_root, PATH_MAX);
- PWCHAR p = installation_root;
- if (wcsncasecmp (p, L"\\\\", 2)) /* Normal drive letter path */
- {
- len = 4;
- memmove (p + 4, p, PATH_MAX - 4);
- p = wcpncpy (p, L"\\\\?\\", 4);
- }
- else
- {
- bool unc = false;
- if (wcsncmp (p + 2, L"?\\", 2)) /* No long path prefix, so UNC path. */
- {
- len = 6;
- memmove (p + 6, p, PATH_MAX - 6);
- p = wcpncpy (p, L"\\??\\UN", 6);
- *p = L'C';
- unc = true;
- }
- else if (!wcsncmp (p + 4, L"UNC\\", 4)) /* Native NT UNC path. */
- unc = true;
- if (unc)
- {
- p = wcschr (p + 2, L'\\'); /* Skip server name */
- if (p)
- p = wcschr (p + 1, L'\\'); /* Skip share name */
- }
- }
- installation_root[1] = L'?';
- RtlInitEmptyUnicodeString (&installation_key, installation_key_buf,
- sizeof installation_key_buf);
- RtlInt64ToHexUnicodeString (hash_path_name (0, installation_root),
- &installation_key, FALSE);
-
- /* Strip off last path component ("\\cygwin1.dll") */
- PWCHAR w = wcsrchr (installation_root, L'\\');
- if (w)
- {
- *w = L'\0';
- w = wcsrchr (installation_root, L'\\');
- }
- if (!w)
- api_fatal ("Can't initialize Cygwin installation root dir.\n"
- "Invalid DLL path");
-
- /* Copy result into installation_dir before stripping off "bin" dir and
- revert to Win32 path. This path is added to the Windows environment
- in build_env. See there for a description. */
- installation_dir_len = wcpncpy (installation_dir, installation_root + len,
- PATH_MAX)
- - installation_dir;
- if (len == 4) /* Local path */
- ;
- else if (len == 6) /* UNC path */
- installation_dir[0] = L'\\';
- else /* Long, prefixed path */
- installation_dir[1] = L'\\';
-
- /* If w < p, the Cygwin DLL resides in the root dir of a drive or network
- path. In that case, if we strip off yet another backslash, the path
- becomes invalid. We avoid that here so that the DLL also works in this
- scenario. The /usr/bin and /usr/lib default mounts will probably point
- to something non-existing, but that's life. */
- if (w > p)
- *w = L'\0';
-
- for (int i = 1; i >= 0; --i)
- {
- reg_key r (i, KEY_WRITE, _WIDE (CYGWIN_INFO_INSTALLATIONS_NAME),
- NULL);
- if (NT_SUCCESS (r.set_string (installation_key_buf,
- installation_root)))
- break;
- }
-
- if (cygwin_props.disable_key)
- {
- installation_key.Length = 0;
- installation_key.Buffer[0] = L'\0';
- }
-}
-
-void __stdcall
-cygheap_init ()
-{
- cygheap_protect.init ("cygheap_protect");
- if (cygheap == &cygheap_dummy)
- {
- cygheap = (init_cygheap *) memset (_cygheap_start, 0,
- sizeof (*cygheap));
- cygheap_max = cygheap;
- _csbrk (sizeof (*cygheap));
- /* Initialize bucket_val. The value is the max size of a block
- fitting into the bucket. The values are powers of two and their
- medians: 12, 16, 24, 32, 48, 64, ... On 64 bit, start with 24 to
- accommodate bigger size of struct cygheap_entry.
- With NBUCKETS == 40, the maximum block size is 6291456/12582912.
- The idea is to have better matching bucket sizes (not wasting
- space) without trading in performance compared to the old powers
- of 2 method. */
-#ifdef __x86_64__
- unsigned sz[2] = { 16, 24 }; /* sizeof cygheap_entry == 16 */
-#else
- unsigned sz[2] = { 8, 12 }; /* sizeof cygheap_entry == 8 */
-#endif
- for (unsigned b = 1; b < NBUCKETS; b++, sz[b & 1] <<= 1)
- cygheap->bucket_val[b] = sz[b & 1];
- /* Default locale settings. */
- cygheap->locale.mbtowc = __utf8_mbtowc;
- cygheap->locale.wctomb = __utf8_wctomb;
- strcpy (cygheap->locale.charset, "UTF-8");
- /* Set umask to a sane default. */
- cygheap->umask = 022;
- cygheap->rlim_core = RLIM_INFINITY;
- }
- if (!cygheap->fdtab)
- cygheap->fdtab.init ();
- if (!cygheap->sigs)
- sigalloc ();
- cygheap->init_tls_list ();
-}
-
-/* Initial Cygwin heap setup.
- Called by root process of a Cygwin process tree. */
-void
-setup_cygheap ()
-{
- cygheap_init ();
- cygheap->user.init ();
- cygheap->init_installation_root (); /* Requires user.init! */
- cygheap->pg.init ();
-}
-
-#define nextpage(x) ((char *) roundup2 ((uintptr_t) (x), \
- wincap.allocation_granularity ()))
-#define allocsize(x) ((SIZE_T) nextpage (x))
-#ifdef DEBUGGING
-#define somekinda_printf debug_printf
-#else
-#define somekinda_printf malloc_printf
-#endif
-
-static void *__stdcall
-_csbrk (int sbs)
-{
- void *prebrk = cygheap_max;
- char *newbase = nextpage (prebrk);
- cygheap_max = (char *) cygheap_max + sbs;
- if (!sbs || (newbase >= cygheap_max) || (cygheap_max <= _cygheap_end))
- /* nothing to do */;
- else
- {
- if (prebrk <= _cygheap_end)
- newbase = _cygheap_end;
-
- SIZE_T adjsbs = allocsize ((char *) cygheap_max - newbase);
- if (adjsbs && !VirtualAlloc (newbase, adjsbs, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE))
- {
- MEMORY_BASIC_INFORMATION m;
- if (!VirtualQuery (newbase, &m, sizeof m))
- system_printf ("couldn't get memory info, %E");
- somekinda_printf ("Couldn't reserve/commit %ld bytes of space for cygwin's heap, %E",
- adjsbs);
- somekinda_printf ("AllocationBase %p, BaseAddress %p, RegionSize %lx, State %x\n",
- m.AllocationBase, m.BaseAddress, m.RegionSize, m.State);
- __seterrno ();
- cygheap_max = (char *) cygheap_max - sbs;
- return NULL;
- }
- }
-
- return prebrk;
-}
-
-/* Copyright (C) 1997, 2000 DJ Delorie */
-
-static void *__reg1 _cmalloc (unsigned size);
-static void *__reg2 _crealloc (void *ptr, unsigned size);
-
-static void *__reg1
-_cmalloc (unsigned size)
-{
- _cmalloc_entry *rvc;
- unsigned b;
-
- /* Calculate "bit bucket". */
- for (b = 1; b < NBUCKETS && cygheap->bucket_val[b] < size; b++)
- continue;
- if (b >= NBUCKETS)
- return NULL;
-
- cygheap_protect.acquire ();
- if (cygheap->buckets[b])
- {
- rvc = (_cmalloc_entry *) cygheap->buckets[b];
- cygheap->buckets[b] = rvc->ptr;
- rvc->b = b;
- }
- else
- {
- rvc = (_cmalloc_entry *) _csbrk (cygheap->bucket_val[b]
- + sizeof (_cmalloc_entry));
- if (!rvc)
- {
- cygheap_protect.release ();
- return NULL;
- }
-
- rvc->b = b;
- rvc->prev = cygheap->chain;
- cygheap->chain = rvc;
- }
- cygheap_protect.release ();
- return rvc->data;
-}
-
-static void __reg1
-_cfree (void *ptr)
-{
- cygheap_protect.acquire ();
- _cmalloc_entry *rvc = to_cmalloc (ptr);
- unsigned b = rvc->b;
- rvc->ptr = cygheap->buckets[b];
- cygheap->buckets[b] = (char *) rvc;
- cygheap_protect.release ();
-}
-
-static void *__reg2
-_crealloc (void *ptr, unsigned size)
-{
- void *newptr;
- if (ptr == NULL)
- newptr = _cmalloc (size);
- else
- {
- unsigned oldsize = cygheap->bucket_val[to_cmalloc (ptr)->b];
- if (size <= oldsize)
- return ptr;
- newptr = _cmalloc (size);
- if (newptr)
- {
- memcpy (newptr, ptr, oldsize);
- _cfree (ptr);
- }
- }
- return newptr;
-}
-
-/* End Copyright (C) 1997 DJ Delorie */
-
-#define sizeof_cygheap(n) ((n) + sizeof (cygheap_entry))
-
-#define tocygheap(s) ((cygheap_entry *) (((char *) (s)) - offsetof (cygheap_entry, data)))
-
-inline static void *
-creturn (cygheap_types x, cygheap_entry * c, unsigned len, const char *fn = NULL)
-{
- if (c)
- /* nothing to do */;
- else if (fn)
- api_fatal ("%s would have returned NULL", fn);
- else
- {
- set_errno (ENOMEM);
- return NULL;
- }
- c->type = x;
- char *cend = ((char *) c + sizeof (*c) + len);
- if (cygheap_max < cend)
- cygheap_max = cend;
- MALLOC_CHECK;
- return (void *) c->data;
-}
-
-inline static void *
-cmalloc (cygheap_types x, size_t n, const char *fn)
-{
- cygheap_entry *c;
- MALLOC_CHECK;
- c = (cygheap_entry *) _cmalloc (sizeof_cygheap (n));
- return creturn (x, c, n, fn);
-}
-
-extern "C" void *
-cmalloc (cygheap_types x, size_t n)
-{
- return cmalloc (x, n, NULL);
-}
-
-extern "C" void *
-cmalloc_abort (cygheap_types x, size_t n)
-{
- return cmalloc (x, n, "cmalloc");
-}
-
-inline static void *
-crealloc (void *s, size_t n, const char *fn)
-{
- MALLOC_CHECK;
- if (s == NULL)
- return cmalloc (HEAP_STR, n); // kludge
-
- assert (!inheap (s));
- cygheap_entry *c = tocygheap (s);
- cygheap_types t = (cygheap_types) c->type;
- c = (cygheap_entry *) _crealloc (c, sizeof_cygheap (n));
- return creturn (t, c, n, fn);
-}
-
-extern "C" void *__reg2
-crealloc (void *s, size_t n)
-{
- return crealloc (s, n, NULL);
-}
-
-extern "C" void *__reg2
-crealloc_abort (void *s, size_t n)
-{
- return crealloc (s, n, "crealloc");
-}
-
-extern "C" void __reg1
-cfree (void *s)
-{
- assert (!inheap (s));
- _cfree (tocygheap (s));
- MALLOC_CHECK;
-}
-
-extern "C" void __reg2
-cfree_and_set (char *&s, char *what)
-{
- if (s && s != almost_null)
- cfree (s);
- s = what;
-}
-
-inline static void *
-ccalloc (cygheap_types x, size_t n, size_t size, const char *fn)
-{
- cygheap_entry *c;
- MALLOC_CHECK;
- n *= size;
- c = (cygheap_entry *) _cmalloc (sizeof_cygheap (n));
- if (c)
- memset (c->data, 0, n);
- return creturn (x, c, n, fn);
-}
-
-extern "C" void *__reg3
-ccalloc (cygheap_types x, size_t n, size_t size)
-{
- return ccalloc (x, n, size, NULL);
-}
-
-extern "C" void *__reg3
-ccalloc_abort (cygheap_types x, size_t n, size_t size)
-{
- return ccalloc (x, n, size, "ccalloc");
-}
-
-extern "C" PWCHAR __reg1
-cwcsdup (PCWSTR s)
-{
- MALLOC_CHECK;
- PWCHAR p = (PWCHAR) cmalloc (HEAP_STR, (wcslen (s) + 1) * sizeof (WCHAR));
- if (!p)
- return NULL;
- wcpcpy (p, s);
- MALLOC_CHECK;
- return p;
-}
-
-extern "C" PWCHAR __reg1
-cwcsdup1 (PCWSTR s)
-{
- MALLOC_CHECK;
- PWCHAR p = (PWCHAR) cmalloc (HEAP_1_STR, (wcslen (s) + 1) * sizeof (WCHAR));
- if (!p)
- return NULL;
- wcpcpy (p, s);
- MALLOC_CHECK;
- return p;
-}
-
-extern "C" char *__reg1
-cstrdup (const char *s)
-{
- MALLOC_CHECK;
- char *p = (char *) cmalloc (HEAP_STR, strlen (s) + 1);
- if (!p)
- return NULL;
- strcpy (p, s);
- MALLOC_CHECK;
- return p;
-}
-
-extern "C" char *__reg1
-cstrdup1 (const char *s)
-{
- MALLOC_CHECK;
- char *p = (char *) cmalloc (HEAP_1_STR, strlen (s) + 1);
- if (!p)
- return NULL;
- strcpy (p, s);
- MALLOC_CHECK;
- return p;
-}
-
-void
-cygheap_root::set (const char *posix, const char *native, bool caseinsensitive)
-{
- if (*posix == '/' && posix[1] == '\0')
- {
- if (m)
- {
- cfree (m);
- m = NULL;
- }
- return;
- }
- if (!m)
- m = (struct cygheap_root_mount_info *) ccalloc (HEAP_MOUNT, 1, sizeof (*m));
- strcpy (m->posix_path, posix);
- m->posix_pathlen = strlen (posix);
- if (m->posix_pathlen >= 1 && m->posix_path[m->posix_pathlen - 1] == '/')
- m->posix_path[--m->posix_pathlen] = '\0';
-
- strcpy (m->native_path, native);
- m->native_pathlen = strlen (native);
- if (m->native_pathlen >= 1 && m->native_path[m->native_pathlen - 1] == '\\')
- m->native_path[--m->native_pathlen] = '\0';
- m->caseinsensitive = caseinsensitive;
-}
-
-cygheap_user::~cygheap_user ()
-{
-}
-
-void
-cygheap_user::set_name (const char *new_name)
-{
- bool allocated = !!pname;
-
- if (allocated)
- {
- /* Windows user names are case-insensitive. Here we want the correct
- username, though, even if it only differs by case. */
- if (!strcmp (new_name, pname))
- return;
- cfree (pname);
- }
-
- pname = cstrdup (new_name ? new_name : "");
- if (!allocated)
- return; /* Initializing. Don't bother with other stuff. */
-
- cfree_and_set (homedrive);
- cfree_and_set (homepath);
- cfree_and_set (plogsrv);
- cfree_and_set (pdomain);
- cfree_and_set (pwinname);
-}
-
-void
-init_cygheap::init_tls_list ()
-{
- if (threadlist)
- memset (cygheap->threadlist, 0, cygheap->sthreads * sizeof (cygheap->threadlist[0]));
- else
- {
- sthreads = THREADLIST_CHUNK;
- threadlist = (threadlist_t *)
- ccalloc_abort (HEAP_TLS, cygheap->sthreads,
- sizeof (cygheap->threadlist[0]));
- }
- tls_sentry::lock.init ("thread_tls_sentry");
-}
-
-void
-init_cygheap::add_tls (_cygtls *t)
-{
- cygheap->user.reimpersonate ();
- tls_sentry here (INFINITE);
- if (nthreads >= cygheap->sthreads)
- {
- threadlist = (threadlist_t *)
- crealloc_abort (threadlist, (sthreads += THREADLIST_CHUNK)
- * sizeof (threadlist[0]));
-#if 0
- memset (threadlist + nthreads, 0,
- THREADLIST_CHUNK * sizeof (threadlist[0]));
-#endif
- }
-
- /* Create a mutex to lock the thread's _cygtls area. This is required for
- the following reason: The thread's _cygtls area is on the thread's
- own stack. Thus, when the thread exits, its _cygtls area is automatically
- destroyed by the OS. Thus, when this happens while the signal thread
- still utilizes the thread's _cygtls area, things go awry.
-
- The following methods take this into account:
-
- - The thread mutex is generally only locked under tls_sentry locking.
- - remove_tls, called from _cygtls::remove, locks the mutex before
- removing the threadlist entry and _cygtls::remove then unlocks and
- destroyes the mutex.
- - find_tls, called from several places but especially from the signal
- thread, will lock the mutex on exit and the caller can access the
- _cygtls area locked. Always make sure to unlock the mutex when the
- _cygtls area isn't needed anymore. */
- threadlist[nthreads].thread = t;
- threadlist[nthreads].mutex = CreateMutexW (&sec_none_nih, FALSE, NULL);
- if (!threadlist[nthreads].mutex)
- api_fatal ("Can't create per-thread mutex, %E");
- ++nthreads;
-}
-
-HANDLE __reg3
-init_cygheap::remove_tls (_cygtls *t)
-{
- HANDLE mutex = NULL;
-
- tls_sentry here (INFINITE);
- if (here.acquired ())
- {
- for (uint32_t i = 0; i < nthreads; i++)
- if (t == threadlist[i].thread)
- {
- mutex = threadlist[i].mutex;
- WaitForSingleObject (mutex, INFINITE);
- if (i < --nthreads)
- threadlist[i] = threadlist[nthreads];
- debug_only_printf ("removed %p element %u", this, i);
- break;
- }
- }
- /* Leave with locked mutex. The calling function is responsible for
- unlocking the mutex. */
- return mutex;
-}
-
-threadlist_t __reg2 *
-init_cygheap::find_tls (_cygtls *tls)
-{
- tls_sentry here (INFINITE);
-
- threadlist_t *t = NULL;
- int ix = -1;
- while (++ix < (int) nthreads)
- {
- if (!threadlist[ix].thread->tid
- || !threadlist[ix].thread->initialized)
- ;
- if (threadlist[ix].thread == tls)
- {
- t = &threadlist[ix];
- break;
- }
- }
- /* Leave with locked mutex. The calling function is responsible for
- unlocking the mutex. */
- if (t)
- WaitForSingleObject (t->mutex, INFINITE);
- return t;
-}
-
-threadlist_t __reg3 *
-init_cygheap::find_tls (int sig, bool& issig_wait)
-{
- debug_printf ("sig %d\n", sig);
- tls_sentry here (INFINITE);
-
- threadlist_t *t = NULL;
- issig_wait = false;
-
- int ix = -1;
- /* Scan thread list looking for valid signal-delivery candidates */
- while (++ix < (int) nthreads)
- {
- /* Only pthreads have tid set to non-0. */
- if (!threadlist[ix].thread->tid
- || !threadlist[ix].thread->initialized)
- ;
- else if (sigismember (&(threadlist[ix].thread->sigwait_mask), sig))
- {
- t = &cygheap->threadlist[ix];
- issig_wait = true;
- break;
- }
- else if (!t && !sigismember (&(threadlist[ix].thread->sigmask), sig))
- t = &cygheap->threadlist[ix];
- }
- /* Leave with locked mutex. The calling function is responsible for
- unlocking the mutex. */
- if (t)
- WaitForSingleObject (t->mutex, INFINITE);
- return t;
-}
diff --git a/winsup/cygwin/cygheap.h b/winsup/cygwin/cygheap.h
deleted file mode 100644
index 4ed9bfb5a..000000000
--- a/winsup/cygwin/cygheap.h
+++ /dev/null
@@ -1,719 +0,0 @@
-/* cygheap.h: Cygwin heap manager.
-
- Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
- 2011, 2012, 2013, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "hires.h"
-#include "cygheap_malloc.h"
-#include "pwdgrp.h"
-
-#define incygheap(s) (cygheap && ((char *) (s) >= (char *) cygheap) && ((char *) (s) <= ((char *) cygheap_max)))
-
-struct _cmalloc_entry
-{
- union
- {
- unsigned b;
- char *ptr;
- };
- struct _cmalloc_entry *prev;
- char data[0];
-};
-
-struct cygheap_root_mount_info
-{
- char posix_path[CYG_MAX_PATH];
- unsigned posix_pathlen;
- char native_path[CYG_MAX_PATH];
- unsigned native_pathlen;
- bool caseinsensitive;
-};
-
-/* CGF: FIXME This doesn't belong here */
-
-class cygheap_root
-{
- /* Root directory information.
- This is used after a chroot is called. */
- struct cygheap_root_mount_info *m;
-
-public:
- bool posix_ok (const char *path)
- {
- if (!m)
- return 1;
- return path_prefix_p (m->posix_path, path, m->posix_pathlen,
- m->caseinsensitive);
- }
- bool ischroot_native (const char *path)
- {
- if (!m)
- return 1;
- return strncasematch (m->native_path, path, m->native_pathlen)
- && (path[m->native_pathlen] == '\\' || !path[m->native_pathlen]);
- }
- const char *unchroot (const char *path)
- {
- if (!m)
- return path;
- const char *p = path + m->posix_pathlen;
- if (!*p)
- p = "/";
- return p;
- }
- bool exists () {return !!m;}
- void set (const char *, const char *, bool);
- size_t posix_length () const { return m->posix_pathlen; }
- const char *posix_path () const { return m->posix_path; }
- size_t native_length () const { return m->native_pathlen; }
- const char *native_path () const { return m->native_path; }
-};
-
-enum homebodies
-{
- CH_HOMEDRIVE,
- CH_HOMEPATH,
- CH_HOME
-};
-
-class cygheap_user
-{
- /* Extendend user information.
- The information is derived from the internal_getlogin call
- when on a NT system. */
- char *pname; /* user's name */
- char *plogsrv; /* Logon server, may be FQDN */
- char *pdomain; /* Logon domain of the user */
- char *homedrive; /* User's home drive */
- char *homepath; /* User's home path */
- char *psystemroot; /* Value of SYSTEMROOT */
- char *pwinname; /* User's name as far as Windows knows it */
- char *puserprof; /* User profile */
- cygsid effec_cygsid; /* buffer for user's SID */
- cygsid saved_cygsid; /* Remains intact even after impersonation */
-public:
- uid_t saved_uid; /* Remains intact even after impersonation */
- gid_t saved_gid; /* Ditto */
- uid_t real_uid; /* Remains intact on seteuid, replaced by setuid */
- gid_t real_gid; /* Ditto */
- user_groups groups; /* Primary and supp SIDs */
-
- /* token is needed if set(e)uid should be called. It can be set by a call
- to `set_impersonation_token()'. */
- HANDLE external_token;
- HANDLE internal_token;
- HANDLE curr_primary_token;
- HANDLE curr_imp_token;
- bool ext_token_is_restricted; /* external_token is restricted token */
- bool curr_token_is_restricted; /* curr_primary_token is restricted token */
- bool setuid_to_restricted; /* switch to restricted token by setuid () */
-
- /* CGF 2002-06-27. I removed the initializaton from this constructor
- since this class is always allocated statically. That means that everything
- is zero anyway so there is no need to initialize it to zero. Since the
- token initialization is always handled during process startup as well,
- I've removed the constructor entirely. Please reinstate this if this
- situation ever changes.
- cygheap_user () : pname (NULL), plogsrv (NULL), pdomain (NULL),
- homedrive (NULL), homepath (NULL),
- token (INVALID_HANDLE_VALUE) {}
- */
-
- ~cygheap_user ();
-
- void init ();
- void set_name (const char *new_name);
- const char *name () const { return pname; }
-
- const char *env_logsrv (const char *, size_t);
- const char *env_homepath (const char *, size_t);
- const char *env_homedrive (const char *, size_t);
- const char *env_userprofile (const char *, size_t);
- const char *env_domain (const char *, size_t);
- const char *env_name (const char *, size_t);
- const char *env_systemroot (const char *, size_t);
-
- const char *logsrv ()
- {
- const char *p = env_logsrv ("LOGONSERVER=", sizeof ("LOGONSERVER=") - 1);
- return (p == almost_null) ? NULL : p;
- }
- const char *winname ()
- {
- const char *p = env_name ("USERNAME=", sizeof ("USERNAME=") - 1);
- return (p == almost_null) ? NULL : p;
- }
- const char *domain ()
- {
- const char *p = env_domain ("USERDOMAIN=", sizeof ("USERDOMAIN=") - 1);
- return (p == almost_null) ? NULL : p;
- }
- void set_sid (PSID new_sid) { effec_cygsid = new_sid;}
- void set_saved_sid () { saved_cygsid = effec_cygsid; }
- cygpsid &sid () { return effec_cygsid; }
- cygpsid &saved_sid () { return saved_cygsid; }
- const char *ontherange (homebodies what, struct passwd * = NULL);
-#define NO_IMPERSONATION NULL
- bool issetuid () const { return curr_imp_token != NO_IMPERSONATION; }
- HANDLE primary_token () { return curr_primary_token; }
- HANDLE imp_token () { return curr_imp_token; }
- void deimpersonate ()
- {
- RevertToSelf ();
- }
- bool reimpersonate ()
- {
- if (issetuid ())
- return ImpersonateLoggedOnUser (primary_token ());
- return true;
- }
- bool has_impersonation_tokens ()
- { return external_token != NO_IMPERSONATION
- || internal_token != NO_IMPERSONATION
- || curr_primary_token != NO_IMPERSONATION; }
- void close_impersonation_tokens ()
- {
- if (curr_imp_token != NO_IMPERSONATION)
- CloseHandle (curr_imp_token);
- if (curr_primary_token != NO_IMPERSONATION
- && curr_primary_token != external_token
- && curr_primary_token != internal_token)
- CloseHandle (curr_primary_token);
- if (external_token != NO_IMPERSONATION)
- CloseHandle (external_token);
- if (internal_token != NO_IMPERSONATION)
- CloseHandle (internal_token);
- }
- PWCHAR get_windows_id (PWCHAR buf)
- {
- return effec_cygsid.string (buf);
- }
- char *get_windows_id (char *buf)
- {
- return effec_cygsid.string (buf);
- }
-
- const char __reg3 *test_uid (char *&, const char *, size_t);
-};
-
-/* cwd cache stuff. */
-
-enum fcwd_version_t {
- FCWD_OLD,
- FCWD_W7,
- FCWD_W8
-};
-
-/* This class is used to store the CWD starting with Windows Vista.
- The CWD storage in the RTL_USER_PROCESS_PARAMETERS block is only
- an afterthought now. The actual CWD storage is a FAST_CWD structure
- which is allocated on the process heap. The new method only requires
- minimal locking and it's much more multi-thread friendly. Presumably
- it minimizes contention when accessing the CWD.
- The class fcwd_access_t is supposed to encapsulate the gory implementation
- details depending on OS version from the calling functions.
- The layout of all structures has been tested on 32 and 64 bit. */
-class fcwd_access_t {
- /* This is the layout used in Windows 8. */
- struct FAST_CWD_8 {
- LONG ReferenceCount; /* Only release when this is 0. */
- HANDLE DirectoryHandle;
- ULONG OldDismountCount; /* Reflects the system DismountCount
- at the time the CWD has been set. */
- UNICODE_STRING Path; /* Path's Buffer member always refers
- to the following Buffer array. */
- LONG FSCharacteristics; /* Taken from FileFsDeviceInformation */
- WCHAR Buffer[MAX_PATH] __attribute ((aligned (8)));
- };
- /* This is the layout used in Windows 7 and Vista. */
- struct FAST_CWD_7 {
- UNICODE_STRING Path; /* Path's Buffer member always refers
- to the following Buffer array. */
- HANDLE DirectoryHandle;
- LONG FSCharacteristics; /* Taken from FileFsDeviceInformation */
- LONG ReferenceCount; /* Only release when this is 0. */
- ULONG OldDismountCount; /* Reflects the system DismountCount
- at the time the CWD has been set. */
- WCHAR Buffer[MAX_PATH] __attribute ((aligned (8)));
- };
- /* This is the old FAST_CWD structure up to the patch from KB 2393802,
- release in February 2011. */
- struct FAST_CWD_OLD {
- LONG ReferenceCount; /* Only release when this is 0. */
- HANDLE DirectoryHandle;
- ULONG OldDismountCount; /* Reflects the system DismountCount
- at the time the CWD has been set. */
- UNICODE_STRING Path; /* Path's Buffer member always refers
- to the following Buffer array. */
- WCHAR Buffer[MAX_PATH];
- };
- union {
- FAST_CWD_OLD fold;
- FAST_CWD_7 f7;
- FAST_CWD_8 f8;
- };
-
-#define IMPLEMENT(type, name) \
- type name () { \
- switch (fast_cwd_version ()) { \
- case FCWD_OLD: \
- default: \
- return fold.name; \
- case FCWD_W7: \
- return f7.name; \
- case FCWD_W8: \
- return f8.name; \
- } \
- }
- IMPLEMENT (LONG &, ReferenceCount)
- IMPLEMENT (HANDLE &, DirectoryHandle)
- IMPLEMENT (ULONG &, OldDismountCount)
- IMPLEMENT (UNICODE_STRING &, Path)
- IMPLEMENT (WCHAR *, Buffer)
- void SetFSCharacteristics (LONG val);
- static fcwd_version_t &fast_cwd_version (void);
-
-public:
- void CopyPath (UNICODE_STRING &target);
- void Free (PVOID heap);
- void FillIn (HANDLE dir, PUNICODE_STRING name, ULONG old_dismount_count);
- static void SetDirHandleFromBufferPointer (PWCHAR buf_p, HANDLE dir);
- static void SetVersionFromPointer (PBYTE buf_p, bool is_buffer);
-};
-
-class cwdstuff
-{
-private:
- char *posix;
- HANDLE dir;
- DWORD drive_length;
- int error; /* This contains an errno number which corresponds
- to the problem with this path when trying to start
- a native Win32 application. See cwdstuff::set for
- how it gets set. See child_info_spawn::worker for how
- it's evaluated. */
-
- friend class fcwd_access_t;
- /* fast_cwd_ptr is a pointer to the global RtlpCurDirRef pointer in
- ntdll.dll pointing to the FAST_CWD structure which constitutes the CWD.
- Unfortunately RtlpCurDirRef is not exported from ntdll.dll. */
- fcwd_access_t **fast_cwd_ptr;
- /* Type of FAST_CWD used on this system. Keeping this information
- available in shared memory avoids to test for the version every time
- around. Default to new version. */
- fcwd_version_t fast_cwd_version;
- void override_win32_cwd (bool init, ULONG old_dismount_count);
-
-public:
- UNICODE_STRING win32;
- static muto cwd_lock;
- const char *get_posix () const { return posix; };
- void reset_posix (wchar_t *w_cwd);
- char *get (char *buf, int need_posix = 1, int with_chroot = 0,
- unsigned ulen = NT_MAX_PATH);
- PWCHAR get (PWCHAR buf, unsigned buflen = NT_MAX_PATH)
- {
- cwd_lock.acquire ();
- buf[0] = L'\0';
- wcsncat (buf, win32.Buffer, buflen - 1);
- cwd_lock.release ();
- return buf;
- }
- HANDLE get_handle () { return dir; }
- DWORD get_drive (char * dst)
- {
- cwd_lock.acquire ();
- DWORD ret = sys_wcstombs (dst, NT_MAX_PATH, win32.Buffer, drive_length);
- cwd_lock.release ();
- return ret;
- }
- int get_error () const { return error; }
- const char *get_error_desc () const;
- void init ();
- int set (path_conv *, const char *);
-};
-
-#ifdef DEBUGGING
-struct cygheap_debug
-{
- handle_list starth;
- handle_list freeh[500];
-};
-#endif
-
-struct cygheap_locale
-{
- mbtowc_p mbtowc;
- wctomb_p wctomb;
- char charset[ENCODING_LEN + 1];
-};
-
-struct user_heap_info
-{
- void *base;
- void *ptr;
- void *top;
- void *max;
- SIZE_T chunk;
- void __reg2 *sbrk (ptrdiff_t);
- void __reg1 init ();
-};
-
-class cygheap_domain_info
-{
- PWCHAR pdom_name;
- PWCHAR pdom_dns_name;
- cygsid pdom_sid;
-
- PWCHAR adom_name;
- cygsid adom_sid;
-
- PDS_DOMAIN_TRUSTSW tdom;
- ULONG tdom_count;
-
- PWCHAR rfc2307_domain_buf;
-
-public:
- bool init ();
-
- inline PCWSTR primary_flat_name () const { return pdom_name; }
- inline PCWSTR primary_dns_name () const { return pdom_dns_name; }
- inline cygsid &primary_sid () { return pdom_sid; }
-
- inline bool member_machine () const { return pdom_sid != NO_SID; }
-
- inline PCWSTR account_flat_name () const { return adom_name; }
- inline cygsid &account_sid () { return adom_sid; }
-
- inline PDS_DOMAIN_TRUSTSW trusted_domain (ULONG idx) const
- { return (idx < tdom_count) ? tdom + idx : NULL; }
-
- inline PWCHAR get_rfc2307_domain () const
- { return rfc2307_domain_buf ?: NULL; }
-};
-
-class cygheap_pwdgrp
-{
- enum nss_pfx_t {
- NSS_PFX_AUTO = 0,
- NSS_PFX_PRIMARY,
- NSS_PFX_ALWAYS
- };
-public:
- enum nss_scheme_method {
- NSS_SCHEME_FALLBACK = 0,
- NSS_SCHEME_WINDOWS,
- NSS_SCHEME_CYGWIN,
- NSS_SCHEME_UNIX,
- NSS_SCHEME_DESC,
- NSS_SCHEME_PATH,
- NSS_SCHEME_FREEATTR
- };
- struct nss_scheme_t {
- nss_scheme_method method;
- PWCHAR attrib;
- };
-private:
- bool nss_inited;
- uint32_t pwd_src;
- uint32_t grp_src;
- nss_pfx_t prefix;
- WCHAR separator[2];
- bool caching;
-
-#define NSS_SCHEME_MAX 4
- nss_scheme_t home_scheme[NSS_SCHEME_MAX];
- nss_scheme_t shell_scheme[NSS_SCHEME_MAX];
- nss_scheme_t gecos_scheme[NSS_SCHEME_MAX];
-
- uint32_t enums;
- PWCHAR enum_tdoms;
-
- void nss_init_line (const char *line);
- void _nss_init ();
-
-public:
- struct {
- pwdgrp cygserver;
- pwdgrp file;
- pwdgrp win;
- } pwd_cache;
- struct {
- pwdgrp cygserver;
- pwdgrp file;
- pwdgrp win;
- } grp_cache;
-
- void init ();
-
- /* Implemented in ldap.cc */
- PWCHAR *ldap_user_attr;
- void init_ldap_user_attr ();
-
- inline void nss_init () { if (!nss_inited) _nss_init (); }
- inline bool nss_pwd_files () const { return !!(pwd_src & NSS_SRC_FILES); }
- inline bool nss_pwd_db () const { return !!(pwd_src & NSS_SRC_DB); }
- inline int nss_pwd_src () const { return pwd_src; } /* CW_GETNSS_PWD_SRC */
- inline bool nss_grp_files () const { return !!(grp_src & NSS_SRC_FILES); }
- inline bool nss_grp_db () const { return !!(grp_src & NSS_SRC_DB); }
- inline int nss_grp_src () const { return grp_src; } /* CW_GETNSS_GRP_SRC */
- inline bool nss_prefix_auto () const { return prefix == NSS_PFX_AUTO; }
- inline bool nss_prefix_primary () const { return prefix == NSS_PFX_PRIMARY; }
- inline bool nss_prefix_always () const { return prefix == NSS_PFX_ALWAYS; }
- inline PCWSTR nss_separator () const { return separator; }
- inline bool nss_cygserver_caching () const { return caching; }
- inline void nss_disable_cygserver_caching () { caching = false; }
-
- char *get_home (cyg_ldap *pldap, cygpsid &sid, PCWSTR dom, PCWSTR name,
- bool fq);
- char *get_home (struct _USER_INFO_3 *ui, cygpsid &sid, PCWSTR dom,
- PCWSTR name, bool fq);
-
- char *get_shell (cyg_ldap *pldap, PCWSTR dom, PCWSTR name, bool fq);
- char *get_shell (struct _USER_INFO_3 *ui, PCWSTR dom, PCWSTR name, bool fq);
-
- char *get_gecos (cyg_ldap *pldap, PCWSTR dom, PCWSTR name, bool fq);
- char *get_gecos (struct _USER_INFO_3 *ui, PCWSTR dom, PCWSTR name, bool fq);
-
- inline int nss_db_enums () const { return enums; }
- inline PCWSTR nss_db_enum_tdoms () const { return enum_tdoms; }
-};
-
-class cygheap_ugid_cache
-{
- struct idmap {
- uint32_t nfs_id;
- uint32_t cyg_id;
- };
- class idmaps {
- uint32_t _cnt;
- uint32_t _max;
- idmap *_map;
- public:
- uint32_t get (uint32_t id) const
- {
- for (uint32_t i = 0; i < _cnt; ++i)
- if (_map[i].nfs_id == id)
- return _map[i].cyg_id;
- return (uint32_t) -1;
- }
- void add (uint32_t nfs_id, uint32_t cyg_id)
- {
- if (_cnt >= _max)
- _map = (idmap *) crealloc (_map, (_max += 10) * sizeof (*_map));
- _map[_cnt].nfs_id = nfs_id;
- _map[_cnt].cyg_id = cyg_id;
- ++_cnt;
- }
- };
- idmaps uids;
- idmaps gids;
-
-public:
- uid_t get_uid (uid_t uid) const { return uids.get (uid); }
- gid_t get_gid (gid_t gid) const { return gids.get (gid); }
- void add_uid (uid_t nfs_uid, uid_t cyg_uid) { uids.add (nfs_uid, cyg_uid); }
- void add_gid (gid_t nfs_gid, gid_t cyg_gid) { gids.add (nfs_gid, cyg_gid); }
-};
-
-struct hook_chain
-{
- void **loc;
- const void *func;
- struct hook_chain *next;
-};
-
-struct mini_cygheap
-{
- cygheap_locale locale;
-};
-
-#define NBUCKETS 40
-
-struct threadlist_t
-{
- struct _cygtls *thread;
- HANDLE mutex; /* Used to avoid accessing tls area of
- deleted thread. See comment in
- cygheap::remove_tls for a description. */
-};
-
-struct init_cygheap: public mini_cygheap
-{
- _cmalloc_entry *chain;
- unsigned bucket_val[NBUCKETS];
- char *buckets[NBUCKETS];
- WCHAR installation_root[PATH_MAX];
- WCHAR installation_dir[PATH_MAX];
- size_t installation_dir_len;
- UNICODE_STRING installation_key;
- WCHAR installation_key_buf[18];
- cygheap_root root;
- cygheap_domain_info dom;
- cygheap_pwdgrp pg;
- cygheap_ugid_cache ugid_cache;
- cygheap_user user;
- user_heap_info user_heap;
- mode_t umask;
- unsigned long rlim_core;
- HANDLE console_h;
- cwdstuff cwd;
- dtable fdtab;
-#ifdef DEBUGGING
- cygheap_debug debug;
-#endif
- struct sigaction *sigs;
-
- fhandler_termios *ctty; /* Current tty */
- threadlist_t *threadlist;
- uint32_t sthreads;
- pid_t pid; /* my pid */
- struct { /* Equivalent to using LIST_HEAD. */
- struct inode_t *lh_first;
- } inode_list; /* Global inode pointer for adv. locking. */
- hook_chain hooks;
- void close_ctty ();
- void init_installation_root ();
- void __reg1 init_tls_list ();;
- void __reg2 add_tls (_cygtls *);
- HANDLE __reg3 remove_tls (_cygtls *);
- threadlist_t __reg2 *find_tls (_cygtls *);
- threadlist_t __reg3 *find_tls (int, bool&);
- void unlock_tls (threadlist_t *t) { if (t) ReleaseMutex (t->mutex); }
-};
-
-
-#define _CYGHEAPSIZE_SLOP (128 * 1024)
-#define CYGHEAPSIZE (sizeof (init_cygheap) + (20000 * sizeof (fhandler_union)) + _CYGHEAPSIZE_SLOP)
-#define CYGHEAPSIZE_MIN (sizeof (init_cygheap) + (10000 * sizeof (fhandler_union)))
-
-extern init_cygheap *cygheap;
-extern void *cygheap_max;
-
-class cygheap_fdmanip
-{
- protected:
- int fd;
- bool locked;
- public:
- cygheap_fdmanip (): fd (-1), locked (false) {}
- virtual ~cygheap_fdmanip ()
- {
- if (locked)
- cygheap->fdtab.unlock ();
- }
- virtual void release () { cygheap->fdtab.release (fd); }
- operator int &() {return fd;}
- operator fhandler_base* &() {return cygheap->fdtab[fd];}
- operator fhandler_socket* () const {return reinterpret_cast<fhandler_socket *> (cygheap->fdtab[fd]);}
- operator fhandler_pipe* () const {return reinterpret_cast<fhandler_pipe *> (cygheap->fdtab[fd]);}
- void operator = (fhandler_base *fh) {cygheap->fdtab[fd] = fh;}
- fhandler_base *operator -> () const {return cygheap->fdtab[fd];}
- bool isopen () const
- {
- if (cygheap->fdtab[fd])
- return true;
- set_errno (EBADF);
- return false;
- }
-};
-
-class cygheap_fdnew : public cygheap_fdmanip
-{
- public:
- cygheap_fdnew (int seed_fd = -1, bool lockit = true)
- {
- if (lockit)
- cygheap->fdtab.lock ();
- if (seed_fd < 0)
- fd = cygheap->fdtab.find_unused_handle ();
- else
- fd = cygheap->fdtab.find_unused_handle (seed_fd + 1);
- if (fd >= 0)
- locked = lockit;
- else
- {
- /* errno set by find_unused_handle */
- if (lockit)
- cygheap->fdtab.unlock ();
- locked = false;
- }
- }
- ~cygheap_fdnew ()
- {
- if (cygheap->fdtab[fd])
- cygheap->fdtab[fd]->inc_refcnt ();
- }
- void operator = (fhandler_base *fh) {cygheap->fdtab[fd] = fh;}
-};
-
-class cygheap_fdget : public cygheap_fdmanip
-{
- fhandler_base *fh;
-public:
- cygheap_fdget (int fd, bool lockit = false, bool do_set_errno = true)
- {
- if (lockit)
- cygheap->fdtab.lock ();
- if (fd >= 0 && fd < (int) cygheap->fdtab.size && cygheap->fdtab[fd] != NULL)
- {
- this->fd = fd;
- locked = lockit;
- fh = cygheap->fdtab[fd];
- fh->inc_refcnt ();
- }
- else
- {
- this->fd = -1;
- if (do_set_errno)
- set_errno (EBADF);
- if (lockit)
- cygheap->fdtab.unlock ();
- locked = false;
- fh = NULL;
- }
- }
- ~cygheap_fdget ()
- {
- if (fh && fh->dec_refcnt () <= 0)
- {
- debug_only_printf ("deleting fh %p", fh);
- delete fh;
- }
- }
- void release () { cygheap->fdtab.release (fd); }
-};
-
-class cygheap_fdenum : public cygheap_fdmanip
-{
- public:
- cygheap_fdenum (bool lockit = false)
- {
- locked = lockit;
- if (lockit)
- cygheap->fdtab.lock ();
- fd = -1;
- }
- int next ()
- {
- while (++fd < (int) cygheap->fdtab.size)
- if (cygheap->fdtab[fd] != NULL)
- return fd;
- return -1;
- }
- void rewind ()
- {
- fd = -1;
- }
-};
-
-void __stdcall cygheap_fixup_in_child (bool);
-void __stdcall cygheap_init ();
-void setup_cygheap ();
-extern char _cygheap_start[] __attribute__((section(".idata")));
diff --git a/winsup/cygwin/cygheap_malloc.h b/winsup/cygwin/cygheap_malloc.h
deleted file mode 100644
index 088243ee3..000000000
--- a/winsup/cygwin/cygheap_malloc.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* cygheap_malloc.h: Cygwin heap manager allocation functions.
-
- Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2011,
- 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _CYGHEAP_MALLOC_H
-#define _CYGHEAP_MALLOC_H
-
-#undef cfree
-
-enum cygheap_types
-{
- HEAP_FHANDLER,
- HEAP_STR,
- HEAP_ARGV,
- HEAP_BUF,
- HEAP_MOUNT,
- HEAP_SIGS,
- HEAP_ARCHETYPES,
- HEAP_TLS,
- HEAP_COMMUNE,
- HEAP_USER,
- HEAP_1_START,
- HEAP_1_HOOK,
- HEAP_1_STR,
- HEAP_1_ARGV,
- HEAP_1_BUF,
- HEAP_1_EXEC,
- HEAP_1_MAX = 100,
- HEAP_2_STR,
- HEAP_2_DLL,
- HEAP_MMAP,
- HEAP_2_MAX = 200,
- HEAP_3_FHANDLER
-};
-
-extern "C" {
-void __reg1 cfree (void *);
-void *__reg2 cmalloc (cygheap_types, size_t);
-void *__reg2 crealloc (void *, size_t);
-void *__reg3 ccalloc (cygheap_types, size_t, size_t);
-void *__reg2 cmalloc_abort (cygheap_types, size_t);
-void *__reg2 crealloc_abort (void *, size_t);
-void *__reg3 ccalloc_abort (cygheap_types, size_t, size_t);
-PWCHAR __reg1 cwcsdup (PCWSTR);
-PWCHAR __reg1 cwcsdup1 (PCWSTR);
-char *__reg1 cstrdup (const char *);
-char *__reg1 cstrdup1 (const char *);
-void __reg2 cfree_and_set (char *&, char * = NULL);
-}
-
-#endif /*_CYGHEAP_MALLOC_H*/
diff --git a/winsup/cygwin/cyglsa.h b/winsup/cygwin/cyglsa.h
deleted file mode 100644
index cc180daf3..000000000
--- a/winsup/cygwin/cyglsa.h
+++ /dev/null
@@ -1,213 +0,0 @@
-/* cyglsa.h: Header file for Cygwin LSA authentication
-
- Copyright 2006, 2008 Red Hat, Inc.
-
- Written by Corinna Vinschen <corinna@vinschen.de>
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for details. */
-
-#ifndef _CYGLSA_H
-#define _CYGLSA_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define CYG_LSA_PKGNAME "CygwinLsa"
-
-#define CYG_LSA_MAGIC_OLD1 0x0379f014LU
-/* First change to cyglsa_t.
- - Username and domain are now of type WCHAR instead of char.
- - domain is MAX_DOMAIN_NAME_LEN instead of INTERNET_MAX_HOST_NAME_LENGTH. */
-#define CYG_LSA_MAGIC 0x0379f115LU
-
-/* Datastructures not defined in w32api. */
-typedef PVOID *PLSA_CLIENT_REQUEST;
-
-typedef UNICODE_STRING SECURITY_STRING, *PSECURITY_STRING;
-
-typedef struct _SECPKG_CLIENT_INFO
-{
- LUID LogonId;
- ULONG ProcessID;
- ULONG ThreadID;
- BOOLEAN HasTcbPrivilege;
- BOOLEAN Impersonating;
- BOOLEAN Restricted;
-} SECPKG_CLIENT_INFO, *PSECPKG_CLIENT_INFO;
-
-typedef enum _SECPKG_NAME_TYPE
-{
- SecNameSamCompatible,
- SecNameAlternateId,
- SecNameFlat,
- SecNameDN,
- SecNameSPN
-} SECPKG_NAME_TYPE, *PSECPKG_NAME_TYPE;
-
-typedef struct _SECPKG_CALL_INFO
-{
- ULONG ProcessId;
- ULONG ThreadId;
- ULONG Attributes;
- ULONG CallCount;
-} SECPKG_CALL_INFO, *PSECPKG_CALL_INFO;
-
-/* The table returned by LsaApInitializePackage is actually a
- LSA_SECPKG_FUNCTION_TABLE even though that's not documented.
- We need only a subset of this table, basically the LSA_DISPATCH_TABLE
- plus the pointer to the GetClientInfo function. */
-typedef struct _LSA_SECPKG_FUNCS
-{
- NTSTATUS (NTAPI *CreateLogonSession)(PLUID);
- NTSTATUS (NTAPI *DeleteLogonSession)(PLUID);
- NTSTATUS (NTAPI *AddCredentials)(PLUID, ULONG, PLSA_STRING, PLSA_STRING);
- NTSTATUS (NTAPI *GetCredentials)(PVOID); /* wrong prototype, unused */
- NTSTATUS (NTAPI *DeleteCredentials)(PVOID); /* wrong prototype, unused */
- PVOID (NTAPI *AllocateLsaHeap)(ULONG);
- VOID (NTAPI *FreeLsaHeap)(PVOID);
- NTSTATUS (NTAPI *AllocateClientBuffer)(PLSA_CLIENT_REQUEST, ULONG, PVOID *);
- NTSTATUS (NTAPI *FreeClientBuffer)(PLSA_CLIENT_REQUEST, PVOID);
- NTSTATUS (NTAPI *CopyToClientBuffer)(PLSA_CLIENT_REQUEST, ULONG,
- PVOID, PVOID);
- NTSTATUS (NTAPI *CopyFromClientBuffer)(PLSA_CLIENT_REQUEST, ULONG,
- PVOID, PVOID);
- NTSTATUS (NTAPI *ImpersonateClient)(VOID);
- NTSTATUS (NTAPI *UnloadPackage)(VOID);
- NTSTATUS (NTAPI *DuplicateHandle)(HANDLE, PHANDLE);
- NTSTATUS (NTAPI *SaveSupplementalCredentials)(VOID);
- NTSTATUS (NTAPI *CreateThread)(PVOID); /* wrong prototype, unused */
- NTSTATUS (NTAPI *GetClientInfo)(PSECPKG_CLIENT_INFO);
- NTSTATUS (NTAPI *RegisterNotification)(PVOID); /* wrong prototype, unused */
- NTSTATUS (NTAPI *CancelNotification)(PVOID); /* wrong prototype, unused */
- NTSTATUS (NTAPI *MapBuffer)(PVOID); /* wrong prototype, unused */
- NTSTATUS (NTAPI *CreateToken)(PVOID); /* wrong prototype, unused */
- NTSTATUS (NTAPI *AuditLogon)(PVOID); /* wrong prototype, unused */
- NTSTATUS (NTAPI *CallPackage)(PVOID); /* wrong prototype, unused */
- NTSTATUS (NTAPI *FreeReturnBuffer)(PVOID); /* wrong prototype, unused */
- BOOLEAN (NTAPI *GetCallInfo)(PSECPKG_CALL_INFO);
- NTSTATUS (NTAPI *CallPackageEx)(PVOID); /* wrong prototype, unused */
- NTSTATUS (NTAPI *CreateSharedMemory)(PVOID); /* wrong prototype, unused */
- NTSTATUS (NTAPI *AllocateSharedMemory)(PVOID); /* wrong prototype, unused */
- NTSTATUS (NTAPI *FreeSharedMemory)(PVOID); /* wrong prototype, unused */
- NTSTATUS (NTAPI *DeleteSharedMemory)(PVOID); /* wrong prototype, unused */
- NTSTATUS (NTAPI *OpenSamUser)(PSECURITY_STRING, SECPKG_NAME_TYPE,
- PSECURITY_STRING, BOOLEAN, ULONG, PVOID *);
- NTSTATUS (NTAPI *GetUserCredentials)(PVOID, PVOID, PULONG, PVOID *, PULONG);
- NTSTATUS (NTAPI *GetUserAuthData)(PVOID, PUCHAR *, PULONG);
- NTSTATUS (NTAPI *CloseSamUser)(PVOID);
- NTSTATUS (NTAPI *ConvertAuthDataToToken)(PVOID, ULONG,
- SECURITY_IMPERSONATION_LEVEL,
- PTOKEN_SOURCE, SECURITY_LOGON_TYPE,
- PUNICODE_STRING, PHANDLE, PLUID,
- PUNICODE_STRING, PNTSTATUS);
- NTSTATUS (NTAPI *ClientCallback)(PVOID); /* wrong prototype, unused */
- NTSTATUS (NTAPI *UpdateCredentials)(PVOID); /* wrong prototype, unused */
- NTSTATUS (NTAPI *GetAuthDataForUser)(PSECURITY_STRING, SECPKG_NAME_TYPE,
- PSECURITY_STRING, PUCHAR *, PULONG,
- PUNICODE_STRING);
- NTSTATUS (NTAPI *CrackSingleName)(PVOID); /* wrong prototype, unused */
- NTSTATUS (NTAPI *AuditAccountLogon)(PVOID); /* wrong prototype, unused */
- NTSTATUS (NTAPI *CallPackagePassthrough)(PVOID); /* wrong prototype, unused */
-} LSA_SECPKG_FUNCS, *PLSA_SECPKG_FUNCS;
-
-typedef enum _LSA_TOKEN_INFORMATION_TYPE
-{
- LsaTokenInformationNull,
- LsaTokenInformationV1,
- LsaTokenInformationV2
-} LSA_TOKEN_INFORMATION_TYPE, *PLSA_TOKEN_INFORMATION_TYPE;
-
-typedef struct _LSA_TOKEN_INFORMATION_V2
-{
- LARGE_INTEGER ExpirationTime;
- TOKEN_USER User;
- PTOKEN_GROUPS Groups;
- TOKEN_PRIMARY_GROUP PrimaryGroup;
- PTOKEN_PRIVILEGES Privileges;
- TOKEN_OWNER Owner;
- TOKEN_DEFAULT_DACL DefaultDacl;
-} LSA_TOKEN_INFORMATION_V2, *PLSA_TOKEN_INFORMATION_V2;
-
-/* These structures are eqivalent to the appropriate Windows structures,
- using 32 bit offsets instead of pointers. These datastructures are
- used to transfer the logon information to the LSA authentication package.
- We can't use the LSA_TOKEN_INFORMATION_V2 structure directly, because
- its size differs between 32 bit and 64 bit Windows. */
-
-typedef DWORD OFFSET;
-
-typedef struct _CYG_SID_AND_ATTRIBUTES
-{
- OFFSET Sid;
- DWORD Attributes;
-} CYG_SID_AND_ATTRIBUTES, *PCYG_SID_AND_ATTRIBUTES;
-
-typedef struct _CYG_TOKEN_USER
-{
- CYG_SID_AND_ATTRIBUTES User;
-} CYG_TOKEN_USER, *PCYG_TOKEN_USER;
-
-typedef struct _CYG_TOKEN_GROUPS
-{
- DWORD GroupCount;
- CYG_SID_AND_ATTRIBUTES Groups[ANYSIZE_ARRAY];
-} CYG_TOKEN_GROUPS, *PCYG_TOKEN_GROUPS;
-
-typedef struct _CYG_TOKEN_PRIMARY_GROUP
-{
- OFFSET PrimaryGroup;
-} CYG_TOKEN_PRIMARY_GROUP, *PCYG_TOKEN_PRIMARY_GROUP;
-
-typedef struct _CYG_TOKEN_OWNER
-{
- OFFSET Owner;
-} CYG_TOKEN_OWNER, *PCYG_TOKEN_OWNER;
-
-typedef struct _CYG_TOKEN_DEFAULT_DACL
-{
- OFFSET DefaultDacl;
-} CYG_TOKEN_DEFAULT_DACL, *PCYG_TOKEN_DEFAULT_DACL;
-
-typedef struct _CYG_LSA_TOKEN_INFORMATION
-{
- LARGE_INTEGER ExpirationTime;
- CYG_TOKEN_USER User;
- OFFSET Groups;
- CYG_TOKEN_PRIMARY_GROUP PrimaryGroup;
- OFFSET Privileges;
- CYG_TOKEN_OWNER Owner;
- CYG_TOKEN_DEFAULT_DACL DefaultDacl;
-} CYG_LSA_TOKEN_INFORMATION, *PCYG_LSA_TOKEN_INFORMATION;
-
-/* This is the structure created by security.cc:lsaauth(), which is given to
- LsaApLogonUser to create the token information returned to the LSA. */
-typedef struct
-{
- DWORD magic;
- DWORD checksum;
- WCHAR username[UNLEN + 1];
- WCHAR domain[MAX_DOMAIN_NAME_LEN + 1];
- ULONG inf_size;
- CYG_LSA_TOKEN_INFORMATION inf;
- BYTE data[1];
-} cyglsa_t;
-
-typedef struct
-{
- DWORD magic_pre;
- HANDLE token;
- DWORD magic_post;
-} cygprf_t;
-
-#define MAGIC_PRE 0x12345678UL
-#define MAGIC_POST 0x87654321UL
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _CYGLSA_H */
diff --git a/winsup/cygwin/cygmagic b/winsup/cygwin/cygmagic
deleted file mode 100755
index b94529109..000000000
--- a/winsup/cygwin/cygmagic
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/bin/sh
-# cygmagic - Generate "magic numbers" from a structure.
-#
-# Copyright 2001, 2002, 2005, 2013 Red Hat, Inc.
-#
-# This file is part of Cygwin.
-#
-# This software is a copyrighted work licensed under the terms of the
-# Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-# details.
-
-file_magic=$1; shift
-gcc=$1; shift
-file=$1; shift
-trap "rm -f /tmp/$$.magic" 0 1 2 15
-cat <<EOF > $file_magic
-/* autogenerated - do not edit */
-#include "$file"
-EOF
-sumit() {
- cksum $*
-}
-
-while [ -n "$1" ]; do
- define=$1; shift
- struct=$1; shift
- sum=`$gcc -D__CYGMAGIC__ -E $file | sed -n "/^$struct/,/^};/p" | sed -e 's/[ ]//g' -e '/^$/d' | sumit | awk '{printf "0x%xU", $1}'`
- echo "#define $define $sum"
- curr=`sed -n "s/^#[ ]*define CURR_$define[ ][ ]*\([^ ][^ ]*\)/\1/p" $file`
- [ "$curr" != "$sum" ] && echo "*** WARNING WARNING WARNING WARNING WARNING ***
-*** $file: magic number for $define changed old $curr != new $sum
-*** WARNING WARNING WARNING WARNING WARNING ***" 1>&2
-done >> $file_magic
-exit 0
diff --git a/winsup/cygwin/cygmalloc.h b/winsup/cygwin/cygmalloc.h
deleted file mode 100644
index 092e2f695..000000000
--- a/winsup/cygwin/cygmalloc.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/* cygmalloc.h: cygwin DLL malloc stuff
-
- Copyright 2002, 2003, 2004, 2005, 2007, 2013 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#include "regparm.h"
-
-void __reg1 dlfree (void *p);
-void __reg1 *dlmalloc (size_t size);
-void __reg2 *dlrealloc (void *p, size_t size);
-void __reg2 *dlcalloc (size_t nmemb, size_t size);
-void __reg2 *dlmemalign (size_t alignment, size_t bytes);
-void __reg1 *dlvalloc (size_t bytes);
-size_t __reg1 dlmalloc_usable_size (void *p);
-int __reg1 dlmalloc_trim (size_t);
-int __reg2 dlmallopt (int p, int v);
-void dlmalloc_stats ();
-
-#ifdef __x86_64__
-#define MALLOC_ALIGNMENT ((size_t)16U)
-#endif
-
-#ifndef __INSIDE_CYGWIN__
-extern "C" void __set_ENOMEM ();
-void *mmap64 (void *, size_t, int, int, int, off_t);
-#define mmap mmap64
-# define MALLOC_FAILURE_ACTION __set_ENOMEM ()
-# define USE_DL_PREFIX 1
-#else
-# define __malloc_lock() mallock.acquire ()
-# define __malloc_unlock() mallock.release ()
-extern muto mallock;
-#endif
-#ifdef __cplusplus
-}
-#endif
diff --git a/winsup/cygwin/cygprops.h b/winsup/cygwin/cygprops.h
deleted file mode 100644
index 70ea3cc5a..000000000
--- a/winsup/cygwin/cygprops.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/* cygprops.h: Cygwin DLL properties
-
- Copyright 2009, 2012 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#pragma once
-/* DLL properties data. */
-struct cygwin_props_t
-{
- char magic[68];
- ULONG size;
- ULONG disable_key;
-};
-
-#define CYGWIN_PROPS_MAGIC \
- "Fortunately, I keep my feathers numbered for just such an emergency"
diff --git a/winsup/cygwin/cygserver.h b/winsup/cygwin/cygserver.h
deleted file mode 100644
index 1313d3c1e..000000000
--- a/winsup/cygwin/cygserver.h
+++ /dev/null
@@ -1,192 +0,0 @@
-/* cygserver.h
-
- Copyright 2001, 2002, 2003, 2004, 2008, 2012, 2013 Red Hat Inc.
-
- Written by Egor Duda <deo@logos-m.ru>
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _CYGSERVER_H_
-#define _CYGSERVER_H_
-
-#ifdef __GNUC__
-#define CYGSERVER_PACKED __attribute__ ((packed))
-#else
-#define CYGSERVER_PACKED
-#endif
-
-#define CYGWIN_SERVER_VERSION_MAJOR 1
-#define CYGWIN_SERVER_VERSION_API 4
-#define CYGWIN_SERVER_VERSION_MINOR 0
-#define CYGWIN_SERVER_VERSION_PATCH 0
-
-typedef enum {
- CYGSERVER_UNKNOWN = 0,
- CYGSERVER_OK,
- CYGSERVER_UNAVAIL
-} cygserver_states;
-
-/*---------------------------------------------------------------------------*
- * class client_request
- *---------------------------------------------------------------------------*/
-
-class transport_layer_base;
-
-#ifndef __INSIDE_CYGWIN__
-class process_cache;
-#endif
-
-class client_request
-{
-protected:
- typedef enum {
- CYGSERVER_REQUEST_INVALID,
- CYGSERVER_REQUEST_GET_VERSION,
- CYGSERVER_REQUEST_SHUTDOWN,
- CYGSERVER_REQUEST_ATTACH_TTY,
- CYGSERVER_REQUEST_MSG,
- CYGSERVER_REQUEST_SEM,
- CYGSERVER_REQUEST_SHM,
- CYGSERVER_REQUEST_SETPWD,
- CYGSERVER_REQUEST_PWDGRP,
- CYGSERVER_REQUEST_LAST
- } request_code_t;
-
- struct header_t
- {
- size_t msglen;
- union
- {
- request_code_t request_code;
- int error_code;
- };
-
- header_t () {};
- header_t (request_code_t, size_t);
- } CYGSERVER_PACKED;
-
-public:
-#ifndef __INSIDE_CYGWIN__
- static void handle_request (transport_layer_base *, process_cache *);
-#endif
-
- client_request (request_code_t request_code,
- void *buf = NULL,
- size_t bufsiz = 0);
- virtual ~client_request ();
-
- request_code_t request_code () const { return _header.request_code; }
-
- int error_code () const { return _header.error_code; };
- void error_code (int error_code) { _header.error_code = error_code; };
-
- size_t msglen () const { return _header.msglen; };
- void msglen (size_t len) { _header.msglen = len; };
-
- int make_request ();
-
-protected:
- virtual void send (transport_layer_base *);
-
-private:
- header_t _header;
- void * const _buf;
- const size_t _buflen;
-
-#ifndef __INSIDE_CYGWIN__
- void handle (transport_layer_base *, process_cache *);
- virtual void serve (transport_layer_base *, process_cache *) = 0;
-#endif
-};
-
-/*---------------------------------------------------------------------------*
- * class client_request_get_version
- *---------------------------------------------------------------------------*/
-
-class client_request_get_version : public client_request
-{
-private:
- struct request_get_version
- {
- DWORD major, api, minor, patch;
- } CYGSERVER_PACKED;
-
-public:
- client_request_get_version ();
- bool check_version () const;
-
-private:
- struct request_get_version version;
-
-#ifndef __INSIDE_CYGWIN__
- virtual void serve (transport_layer_base *, process_cache *);
-#endif
-};
-
-/*---------------------------------------------------------------------------*
- * class client_request_shutdown
- *
- * Nb. This whole class is only !__INSIDE_CYGWIN__ since it is used
- * solely by cygserver itself.
- *---------------------------------------------------------------------------*/
-
-#ifndef __INSIDE_CYGWIN__
-
-class client_request_shutdown : public client_request
-{
-public:
- client_request_shutdown ();
-
-private:
- virtual void serve (transport_layer_base *, process_cache *);
-};
-
-#endif /* !__INSIDE_CYGWIN__ */
-
-/*---------------------------------------------------------------------------*
- * class client_request_attach_tty
- *---------------------------------------------------------------------------*/
-
-class client_request_attach_tty : public client_request
-{
-private:
- struct request_attach_tty
- {
- DWORD pid, master_pid;
- HANDLE from_master, to_master;
- } CYGSERVER_PACKED;
-
-public:
-#ifdef __INSIDE_CYGWIN__
- client_request_attach_tty (DWORD nmaster_pid,
- HANDLE nfrom_master, HANDLE nto_master);
-#else
- client_request_attach_tty ();
-#endif
-
- HANDLE from_master () const { return req.from_master; };
- HANDLE to_master () const { return req.to_master; };
-
-protected:
- virtual void send (transport_layer_base *);
-
-private:
- struct request_attach_tty req;
-
-#ifndef __INSIDE_CYGWIN__
- virtual void serve (transport_layer_base *, process_cache *);
-#endif
-};
-
-#ifndef __INSIDE_CYGWIN__
-extern PSID admininstrator_group_sid;
-#endif
-
-extern bool check_cygserver_available ();
-extern void cygserver_init ();
-
-#endif /* _CYGSERVER_H_ */
diff --git a/winsup/cygwin/cygserver_ipc.h b/winsup/cygwin/cygserver_ipc.h
deleted file mode 100644
index 52f9f5ddd..000000000
--- a/winsup/cygwin/cygserver_ipc.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/* cygserver_ipc.h
-
- Copyright 2002, 2003, 2004, 2012, 2013, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef __CYGSERVER_IPC_H__
-#define __CYGSERVER_IPC_H__
-
-/*
- * Datastructure which is part of any IPC input parameter block.
- */
-struct vmspace {
- void *vm_map; /* UNUSED */
- struct shmmap_state *vm_shm;
-};
-
-struct proc {
- pid_t cygpid;
- DWORD winpid;
- uid_t uid;
- gid_t gid;
- int gidcnt;
- gid_t *gidlist;
- bool is_admin;
- struct vmspace *p_vmspace;
- HANDLE signal_arrived;
-};
-
-#ifdef __INSIDE_CYGWIN__
-#include "sigproc.h"
-extern inline void
-ipc_set_proc_info (proc &blk, bool in_fork = false)
-{
- blk.cygpid = getpid ();
- blk.winpid = GetCurrentProcessId ();
- blk.uid = geteuid32 ();
- blk.gid = getegid32 ();
- blk.gidcnt = 0;
- blk.gidlist = NULL;
- blk.is_admin = false;
- if (in_fork)
- blk.signal_arrived = NULL;
- else
- _my_tls.set_signal_arrived (true, blk.signal_arrived);
-}
-#endif /* __INSIDE_CYGWIN__ */
-
-#ifndef __INSIDE_CYGWIN__
-class ipc_retval {
-private:
- union {
- int i;
- ssize_t ssz;
- size_t sz;
- vm_offset_t off;
- vm_object_t obj;
- };
-
-public:
- ipc_retval (ssize_t nssz) { ssz = nssz; }
-
- operator int () const { return i; }
- int operator = (int ni) { return i = ni; }
-
-#ifndef __x86_64__
- /* On x86_64: size_t == vm_offset_t == unsigned long */
- operator size_t () const { return sz; }
- size_t operator = (size_t nsz) { return sz = nsz; }
-#else
- /* On i686: ssize_t == long == int */
- operator ssize_t () const { return ssz; }
- ssize_t operator = (ssize_t nssz) { return ssz = nssz; }
-#endif
-
- operator vm_offset_t () const { return off; }
- vm_offset_t operator = (vm_offset_t noff) { return off = noff; }
-
- operator vm_object_t () const { return obj; }
- vm_object_t operator = (vm_object_t nobj) { return obj = nobj; }
-};
-
-struct thread {
- class process *client;
- proc *ipcblk;
- ipc_retval td_retval[2];
-};
-#define td_proc ipcblk
-#define p_pid cygpid
-#endif
-
-#endif /* __CYGSERVER_IPC_H__ */
diff --git a/winsup/cygwin/cygserver_msg.h b/winsup/cygwin/cygserver_msg.h
deleted file mode 100644
index fc1277621..000000000
--- a/winsup/cygwin/cygserver_msg.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/* cygserver_msg.h: Single unix specification IPC interface for Cygwin.
-
- Copyright 2003, 2004, 2005, 2008 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef __CYGSERVER_MSG_H__
-#define __CYGSERVER_MSG_H__
-
-#include <sys/types.h>
-#include <sys/sysproto.h>
-#ifndef _KERNEL
-#define _KERNEL 1
-#endif
-#include <cygwin/msg.h>
-
-#include "cygserver.h"
-#include "cygserver_ipc.h"
-
-#ifndef __INSIDE_CYGWIN__
-class transport_layer_base;
-class process_cache;
-#endif
-
-class client_request_msg : public client_request
-{
- friend class client_request;
-
-public:
- enum msgop_t
- {
- MSGOP_msgctl,
- MSGOP_msgget,
- MSGOP_msgrcv,
- MSGOP_msgsnd
- };
-
-private:
- union
- {
- struct
- {
- msgop_t msgop;
- proc ipcblk;
- union
- {
- struct msgctl_args ctlargs;
- struct msgget_args getargs;
- struct msgrcv_args rcvargs;
- struct msgsnd_args sndargs;
- };
- } in;
-
- union {
- int ret;
- ssize_t rcv;
- } out;
- } _parameters;
-
-#ifndef __INSIDE_CYGWIN__
- client_request_msg ();
- virtual void serve (transport_layer_base *, process_cache *);
-#endif
-
-public:
-
-#ifdef __INSIDE_CYGWIN__
- client_request_msg (int, int, struct msqid_ds *); // msgctl
- client_request_msg (key_t, int); // msgget
- client_request_msg (int, void *, size_t, long, int); // msgrcv
- client_request_msg (int, const void *, size_t, int); // msgsnd
-#endif
-
- int retval () const { return msglen () ? _parameters.out.ret : -1; }
- ssize_t rcvval () const { return _parameters.out.rcv; }
-};
-
-#ifndef __INSIDE_CYGWIN__
-int msginit ();
-int msgunload ();
-int msgctl (struct thread *, struct msgctl_args *);
-int msgget (struct thread *, struct msgget_args *);
-int msgsnd (struct thread *, struct msgsnd_args *);
-int msgrcv (struct thread *, struct msgrcv_args *);
-#endif
-
-#endif /* __CYGSERVER_MSG_H__ */
diff --git a/winsup/cygwin/cygserver_pwdgrp.h b/winsup/cygwin/cygserver_pwdgrp.h
deleted file mode 100644
index 52b9b42ba..000000000
--- a/winsup/cygwin/cygserver_pwdgrp.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/* cygserver_pwdgrp.h: Request account information
-
- Copyright 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef __CYGSERVER_PWDGRP_H__
-#define __CYGSERVER_PWDGRP_H__
-
-#include <sys/types.h>
-#include "cygserver.h"
-
-class transport_layer_base;
-class process_cache;
-
-#ifdef __INSIDE_CYGWIN__
-#include "pwdgrp.h"
-#else
-/* Don't include pwdgrp.h, but keep this in sync. */
-enum fetch_user_arg_type_t {
- SID_arg,
- NAME_arg,
- ID_arg
-};
-#endif
-
-class client_request_pwdgrp : public client_request
-{
- friend class client_request;
-
-private:
- union _pwdgrp_param_t
- {
- struct _pwdgrp_in_t
- {
- bool group;
- fetch_user_arg_type_t type;
- union
- {
- BYTE sid[40];
- char name[UNLEN + 1];
- uint32_t id;
- } arg;
- } in;
-
- struct
- {
- char line[1024];
- } out;
- } _parameters;
-
-#ifndef __INSIDE_CYGWIN__
- client_request_pwdgrp ();
- virtual void serve (transport_layer_base *, process_cache *);
- void pwd_serve ();
- void grp_serve ();
-#endif
-
-public:
-
-#ifdef __INSIDE_CYGWIN__
- client_request_pwdgrp (fetch_user_arg_t &arg, bool group);
-#endif
-
- const char *line () const { return (msglen () > 0) ? _parameters.out.line
- : NULL; }
-};
-
-#endif /* __CYGSERVER_PWDGRP_H__ */
diff --git a/winsup/cygwin/cygserver_sem.h b/winsup/cygwin/cygserver_sem.h
deleted file mode 100644
index e7b8eb237..000000000
--- a/winsup/cygwin/cygserver_sem.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/* cygserver_sem.h: Single unix specification IPC interface for Cygwin.
-
- Copyright 2003, 2004, 2005, 2008 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef __CYGSERVER_SEM_H__
-#define __CYGSERVER_SEM_H__
-
-#include <sys/types.h>
-#include <sys/sysproto.h>
-#ifndef _KERNEL
-#define _KERNEL 1
-#endif
-#include <cygwin/sem.h>
-
-#include "cygserver.h"
-#include "cygserver_ipc.h"
-
-#ifndef __INSIDE_CYGWIN__
-class transport_layer_base;
-class process_cache;
-#endif
-
-class client_request_sem : public client_request
-{
- friend class client_request;
-
-public:
- enum semop_t
- {
- SEMOP_semctl,
- SEMOP_semget,
- SEMOP_semop
- };
-
-private:
- union
- {
- struct
- {
- semop_t semop;
- proc ipcblk;
- union
- {
- struct semctl_args ctlargs;
- struct semget_args getargs;
- struct semop_args opargs;
- };
- } in;
-
- union {
- int ret;
- } out;
- } _parameters;
-
-#ifndef __INSIDE_CYGWIN__
- client_request_sem ();
- virtual void serve (transport_layer_base *, process_cache *);
-#endif
-
-public:
-
-#ifdef __INSIDE_CYGWIN__
- client_request_sem (int, int, int, union semun *); // semctl
- client_request_sem (key_t, int, int); // semget
- client_request_sem (int, struct sembuf *, size_t); // semop
-#endif
-
- int retval () const { return msglen () ? _parameters.out.ret : -1; }
-};
-
-#ifndef __INSIDE_CYGWIN__
-int seminit ();
-int semunload ();
-void semexit_myhook(void *arg, struct proc *p);
-
-int semctl (struct thread *, struct semctl_args *);
-int semget (struct thread *, struct semget_args *);
-int semop (struct thread *, struct semop_args *);
-#endif
-
-#endif /* __CYGSERVER_SEM_H__ */
diff --git a/winsup/cygwin/cygserver_setpwd.h b/winsup/cygwin/cygserver_setpwd.h
deleted file mode 100644
index 8fa34793b..000000000
--- a/winsup/cygwin/cygserver_setpwd.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/* cygserver_setpwd.h: Set LSA private data password for current user.
-
- Copyright 2008, 2011 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef __CYGSERVER_SETPWD_H__
-#define __CYGSERVER_SETPWD_H__
-
-#include <sys/types.h>
-#include "cygserver.h"
-
-#define CYGWIN_LSA_KEY_PREFIX L"L$CYGWIN_"
-
-#ifndef __INSIDE_CYGWIN__
-class transport_layer_base;
-class process_cache;
-#endif
-
-class client_request_setpwd : public client_request
-{
- friend class client_request;
-
-private:
- union
- {
- struct
- {
- WCHAR passwd[256];
- } in;
- } _parameters;
-
-#ifndef __INSIDE_CYGWIN__
- client_request_setpwd ();
- virtual void serve (transport_layer_base *, process_cache *);
-#endif
-
-public:
-
-#ifdef __INSIDE_CYGWIN__
- client_request_setpwd (PUNICODE_STRING);
-#endif
-};
-
-#ifdef __INSIDE_CYGWIN__
-unsigned long setlsapwd (const char *passwd, const char *username);
-#endif
-
-#endif /* __CYGSERVER_SETPWD_H__ */
diff --git a/winsup/cygwin/cygserver_shm.h b/winsup/cygwin/cygserver_shm.h
deleted file mode 100644
index 1d4e837bb..000000000
--- a/winsup/cygwin/cygserver_shm.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/* cygserver_shm.h: Single unix specification IPC interface for Cygwin.
-
- Copyright 2001, 2002, 2003, 2005, 2008 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef __CYGSERVER_SHM_H__
-#define __CYGSERVER_SHM_H__
-
-#include <sys/types.h>
-#include <sys/sysproto.h>
-#ifndef _KERNEL
-#define _KERNEL 1
-#endif
-#include <cygwin/shm.h>
-
-#include "cygserver.h"
-#include "cygserver_ipc.h"
-
-#ifndef __INSIDE_CYGWIN__
-class transport_layer_base;
-class process_cache;
-#endif
-
-class client_request_shm : public client_request
-{
- friend class client_request;
-
-public:
- enum shmop_t
- {
- SHMOP_shmat,
- SHMOP_shmctl,
- SHMOP_shmdt,
- SHMOP_shmget,
- SHMOP_shmfork /* Called on fixup_after_fork */
- };
-
-private:
- union
- {
- struct
- {
- shmop_t shmop;
- proc ipcblk;
- struct shmat_args atargs;
- struct shmctl_args ctlargs;
- struct shmdt_args dtargs;
- struct shmget_args getargs;
- struct proc forkargs;
- } in;
-
- struct {
- union {
- int ret;
- vm_offset_t ptr;
- };
- vm_object_t obj;
- } out;
- } _parameters;
-
-#ifndef __INSIDE_CYGWIN__
- client_request_shm ();
- virtual void serve (transport_layer_base *, process_cache *);
-#endif
-
-public:
-
-#ifdef __INSIDE_CYGWIN__
- client_request_shm (int, const void *, int); // shmat
- client_request_shm (int, int, struct shmid_ds *); // shmctl
- client_request_shm (const void *); // shmdt
- client_request_shm (key_t, size_t, int); // shmget
- client_request_shm (proc *); // shmfork
-#endif
-
- int retval () const { return msglen () ? _parameters.out.ret : -1; }
- void *ptrval () const { return (void *)_parameters.out.ptr; }
- vm_object_t objval () const { return _parameters.out.obj; }
-};
-
-#ifndef __INSIDE_CYGWIN__
-void shminit ();
-int shmunload ();
-void shmexit_myhook (struct vmspace *vm);
-int cygwin_shmfork_myhook (struct thread *, struct proc *);
-
-int shmat (struct thread *, struct shmat_args *);
-int shmctl (struct thread *, struct shmctl_args *);
-int shmdt (struct thread *, struct shmdt_args *);
-int shmget (struct thread *, struct shmget_args *);
-#endif
-
-#endif /* __CYGSERVER_SHM_H__ */
diff --git a/winsup/cygwin/cygthread.cc b/winsup/cygwin/cygthread.cc
deleted file mode 100644
index e48a73e54..000000000
--- a/winsup/cygwin/cygthread.cc
+++ /dev/null
@@ -1,524 +0,0 @@
-/* cygthread.cc
-
- Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2008, 2009,
- 2010, 2011, 2012, 2013 Red Hat, Inc.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include "miscfuncs.h"
-#include <stdlib.h>
-#include "sigproc.h"
-#include "cygtls.h"
-#include "ntdll.h"
-
-#undef CloseHandle
-
-static cygthread NO_COPY threads[64];
-#define NTHREADS (sizeof (threads) / sizeof (threads[0]))
-
-DWORD NO_COPY cygthread::main_thread_id;
-bool NO_COPY cygthread::exiting;
-
-void
-cygthread::callfunc (bool issimplestub)
-{
- void *pass_arg;
- if (arg == cygself)
- pass_arg = this;
- else if (!arglen)
- pass_arg = arg;
- else
- {
- if (issimplestub)
- ev = CreateEvent (&sec_none_nih, TRUE, FALSE, NULL);
- pass_arg = alloca (arglen);
- memcpy (pass_arg, arg, arglen);
- SetEvent (ev);
- }
- if (issimplestub)
- {
- /* Wait for main thread to assign 'h' */
- while (!h)
- yield ();
- if (ev)
- CloseHandle (ev);
- ev = h;
- }
- /* Cygwin threads should not call ExitThread directly */
- func (pass_arg);
- /* ...so the above should always return */
-}
-
-/* Initial stub called by cygthread constructor. Performs initial
- per-thread initialization and loops waiting for another thread function
- to execute. */
-DWORD WINAPI
-cygthread::stub (VOID *arg)
-{
- cygthread *info = (cygthread *) arg;
- _my_tls._ctinfo = info;
- if (info->arg == cygself)
- {
- if (info->ev)
- {
- CloseHandle (info->ev);
- CloseHandle (info->thread_sync);
- }
- info->ev = info->thread_sync = info->stack_ptr = NULL;
- }
- else
- {
- info->stack_ptr = &arg;
- debug_printf ("thread '%s', id %y, stack_ptr %p", info->name (), info->id, info->stack_ptr);
- if (!info->ev)
- {
- info->ev = CreateEvent (&sec_none_nih, TRUE, FALSE, NULL);
- info->thread_sync = CreateEvent (&sec_none_nih, FALSE, FALSE, NULL);
- }
- }
-
- while (1)
- {
- if (!info->__name)
-#ifdef DEBUGGING
- system_printf ("erroneous thread activation, name is NULL prev thread name = '%s'", info->__oldname);
-#else
- system_printf ("erroneous thread activation, name is NULL");
-#endif
- else
- {
- info->callfunc (false);
-
- HANDLE notify = info->notify_detached;
- /* If func is NULL, the above function has set that to indicate
- that it doesn't want to alert anyone with a SetEvent and should
- just be marked as no longer inuse. Hopefully the function knows
- what it is doing. */
- if (!info->func)
- info->release (false);
- else
- {
-#ifdef DEBUGGING
- info->func = NULL; // catch erroneous activation
- info->__oldname = info->__name;
-#endif
- info->__name = NULL;
- SetEvent (info->ev);
- }
- if (notify)
- SetEvent (notify);
- }
- switch (WaitForSingleObject (info->thread_sync, INFINITE))
- {
- case WAIT_OBJECT_0:
- continue;
- default:
- api_fatal ("WFSO failed, %E");
- break;
- }
- }
-}
-
-/* Overflow stub called by cygthread constructor. Calls specified function
- and then exits the thread. */
-DWORD WINAPI
-cygthread::simplestub (VOID *arg)
-{
- cygthread *info = (cygthread *) arg;
- _my_tls._ctinfo = info;
- info->stack_ptr = &arg;
- HANDLE notify = info->notify_detached;
- info->callfunc (true);
- if (notify)
- SetEvent (notify);
- return 0;
-}
-
-/* Start things going. Called from dll_crt0_1. */
-void
-cygthread::init ()
-{
- main_thread_id = GetCurrentThreadId ();
-}
-
-cygthread *
-cygthread::freerange ()
-{
- cygthread *self = (cygthread *) calloc (1, sizeof (*self));
- self->is_freerange = true;
- self->inuse = 1;
- return self;
-}
-
-void * cygthread::operator
-new (size_t)
-{
- cygthread *info;
-
- /* Search the threads array for an empty slot to use */
- for (info = threads; info < threads + NTHREADS; info++)
- if (!InterlockedExchange (&info->inuse, 1))
- {
- /* available */
-#ifdef DEBUGGING
- if (info->__name)
- api_fatal ("name not NULL? %s, id %y, i %ld", info->__name, info->id, info - threads);
-#endif
- goto out;
- }
-
-#ifdef DEBUGGING
- if (!getenv ("CYGWIN_FREERANGE_NOCHECK"))
- api_fatal ("overflowed cygwin thread pool");
- else
- thread_printf ("overflowed cygwin thread pool");
-#endif
-
- info = freerange (); /* exhausted thread pool */
-
-out:
- return info;
-}
-
-/* This function is called via QueueUserAPC. Apparently creating threads
- asynchronously is a huge performance win on Win64. */
-void CALLBACK
-cygthread::async_create (ULONG_PTR arg)
-{
- cygthread *that = (cygthread *) arg;
- that->create ();
- ::SetThreadPriority (that->h, THREAD_PRIORITY_HIGHEST);
- that->zap_h ();
-}
-
-void
-cygthread::create ()
-{
- thread_printf ("name %s, id %y, this %p", __name, id, this);
- HANDLE htobe;
- if (h)
- {
- if (ev)
- ResetEvent (ev);
- while (!thread_sync)
- yield ();
- SetEvent (thread_sync);
- thread_printf ("activated name '%s', thread_sync %p for id %y", __name, thread_sync, id);
- htobe = h;
- }
- else
- {
- stack_ptr = NULL;
- htobe = CreateThread (&sec_none_nih, 0, is_freerange ? simplestub : stub,
- this, 0, &id);
- if (!htobe)
- api_fatal ("CreateThread failed for %s - %p<%y>, %E", __name, h, id);
- thread_printf ("created name '%s', thread %p, id %y", __name, h, id);
-#ifdef DEBUGGING
- terminated = false;
-#endif
- }
-
- if (arglen)
- {
- while (!ev)
- yield ();
- WaitForSingleObject (ev, INFINITE);
- ResetEvent (ev);
- }
- h = htobe;
-}
-
-/* Return the symbolic name of the current thread for debugging.
- */
-const char *
-cygthread::name (DWORD tid)
-{
- const char *res = NULL;
- if (!tid)
- tid = GetCurrentThreadId ();
-
- if (tid == main_thread_id)
- return "main";
-
- for (DWORD i = 0; i < NTHREADS; i++)
- if (threads[i].id == tid)
- {
- res = threads[i].__name ?: "exiting thread";
- break;
- }
-
- if (res)
- /* ok */;
- else if (!_main_tls)
- res = "main";
- else
- {
- __small_sprintf (_my_tls.locals.unknown_thread_name, "unknown (%y)", tid);
- res = _my_tls.locals.unknown_thread_name;
- }
- return res;
-}
-
-cygthread::operator
-HANDLE ()
-{
- while (!ev)
- yield ();
- return ev;
-}
-
-void
-cygthread::release (bool nuke_h)
-{
- if (nuke_h)
- h = NULL;
-#ifdef DEBUGGING
- __oldname = __name;
- debug_printf ("released thread '%s'", __oldname);
-#endif
- __name = NULL;
- func = NULL;
- /* Must be last */
- if (!InterlockedExchange (&inuse, 0))
-#ifdef DEBUGGING
- api_fatal ("released a thread that was not inuse");
-#else
- system_printf ("released a thread that was not inuse");
-#endif
-}
-
-/* Forcibly terminate a thread. */
-bool
-cygthread::terminate_thread ()
-{
- bool terminated = true;
- debug_printf ("thread '%s', id %y, inuse %d, stack_ptr %p", __name, id, inuse, stack_ptr);
- while (inuse && !stack_ptr)
- yield ();
-
- if (!inuse)
- goto force_notterminated;
-
- TerminateThread (h, 0);
- WaitForSingleObject (h, INFINITE);
- CloseHandle (h);
-
- if (!inuse || exiting)
- goto force_notterminated;
-
- if (ev && !(terminated = !IsEventSignalled (ev)))
- ResetEvent (ev);
-
- if (!wincap.terminate_thread_frees_stack ())
- {
- MEMORY_BASIC_INFORMATION m;
- memset (&m, 0, sizeof (m));
- VirtualQuery (stack_ptr, &m, sizeof m);
-
- if (!m.RegionSize)
- system_printf ("m.RegionSize 0? stack_ptr %p", stack_ptr);
- else if (!VirtualFree (m.AllocationBase, 0, MEM_RELEASE))
- debug_printf ("VirtualFree of allocation base %p<%p> failed, %E",
- stack_ptr, m.AllocationBase);
- }
-
- if (is_freerange)
- free (this);
- else
- {
-#ifdef DEBUGGING
- terminated = true;
-#endif
- release (true);
- }
-
- goto out;
-
-force_notterminated:
- terminated = false;
-out:
- return terminated;
-}
-
-/* Detach the cygthread from the current thread. Note that the
- theory is that cygthreads are only associated with one thread.
- So, there should be never be multiple threads doing waits
- on the same cygthread. */
-bool
-cygthread::detach (HANDLE sigwait)
-{
- bool signalled = false;
- bool thread_was_reset = false;
- if (!inuse)
- system_printf ("called detach but inuse %d, thread %y?", inuse, id);
- else
- {
- DWORD res;
-
- if (!sigwait)
- /* If the caller specified a special handle for notification, wait for that.
- This assumes that the thread in question is auto releasing. */
- res = WaitForSingleObject (*this, INFINITE);
- else
- {
- /* Lower our priority and give priority to the read thread */
- HANDLE hth = GetCurrentThread ();
- LONG prio = GetThreadPriority (hth);
- ::SetThreadPriority (hth, THREAD_PRIORITY_BELOW_NORMAL);
-
- HANDLE w4[2];
- unsigned n = 2;
- DWORD howlong = INFINITE;
- w4[0] = sigwait;
- set_signal_arrived here (w4[1]);
- /* For a description of the below loop see the end of this file */
- for (int i = 0; i < 2; i++)
- switch (res = WaitForMultipleObjects (n, w4, FALSE, howlong))
- {
- case WAIT_OBJECT_0:
- if (n == 1)
- howlong = 50;
- break;
- case WAIT_OBJECT_0 + 1:
- n = 1;
- if (i--)
- howlong = 50;
- break;
- case WAIT_TIMEOUT:
- break;
- default:
- if (!exiting)
- {
- system_printf ("WFMO failed waiting for cygthread '%s', %E", __name);
- for (unsigned j = 0; j < n; j++)
- switch (WaitForSingleObject (w4[j], 0))
- {
- case WAIT_OBJECT_0:
- case WAIT_TIMEOUT:
- break;
- default:
- system_printf ("%s handle %p is bad", (j ? "signal_arrived" : "semaphore"), w4[j]);
- break;
- }
- api_fatal ("exiting on fatal error");
- }
- break;
- }
- /* WAIT_OBJECT_0 means that the thread successfully read something,
- so wait for the cygthread to "terminate". */
- if (res == WAIT_OBJECT_0)
- WaitForSingleObject (*this, INFINITE);
- else
- {
- /* Thread didn't terminate on its own, so maybe we have to
- do it. */
- signalled = terminate_thread ();
- /* Possibly the thread completed *just* before it was
- terminated. Detect this. If this happened then the
- read was not terminated on a signal. */
- if (WaitForSingleObject (sigwait, 0) == WAIT_OBJECT_0)
- signalled = false;
- if (signalled)
- set_sig_errno (EINTR);
- thread_was_reset = true;
- }
- ::SetThreadPriority (hth, prio);
- }
-
- thread_printf ("%s returns %d, id %y", sigwait ? "WFMO" : "WFSO",
- res, id);
-
- if (thread_was_reset)
- /* already handled */;
- else if (is_freerange)
- {
- CloseHandle (h);
- free (this);
- }
- else
- {
- ResetEvent (*this);
- /* Mark the thread as available by setting inuse to zero */
- InterlockedExchange (&inuse, 0);
- }
- }
- return signalled;
-}
-
-void
-cygthread::terminate ()
-{
- exiting = 1;
-}
-
-/* The below is an explanation of synchronization loop in cygthread::detach.
- The intent is that the loop will always try hard to wait for both
- synchronization events from the reader thread but will exit with
- res == WAIT_TIMEOUT if a signal occurred and the reader thread is
- still blocked.
-
- case 0 - no signal
-
- i == 0 (howlong == INFINITE)
- W0 activated
- howlong not set because n != 1
- just loop
-
- i == 1 (howlong == INFINITE)
- W0 activated
- howlong not set because n != 1
- just loop (to exit loop) - no signal
-
- i == 2 (howlong == INFINITE)
- exit loop
-
- case 1 - signal before thread initialized
-
- i == 0 (howlong == INFINITE)
- WO + 1 activated
- n set to 1
- howlong untouched because i-- == 0
- loop
-
- i == 0 (howlong == INFINITE)
- W0 must be activated
- howlong set to 50 because n == 1
-
- i == 1 (howlong == 50)
- W0 activated
- loop (to exit loop) - no signal
-
- WAIT_TIMEOUT activated
- signal potentially detected
- loop (to exit loop)
-
- i == 2 (howlong == 50)
- exit loop
-
- case 2 - signal after thread initialized
-
- i == 0 (howlong == INFINITE)
- W0 activated
- howlong not set because n != 1
- loop
-
- i == 1 (howlong == INFINITE)
- W0 + 1 activated
- n set to 1
- howlong set to 50 because i-- != 0
- loop
-
- i == 1 (howlong == 50)
- W0 activated
- loop (to exit loop) - no signal
-
- WAIT_TIMEOUT activated
- loop (to exit loop) - signal
-
- i == 2 (howlong == 50)
- exit loop
-*/
diff --git a/winsup/cygwin/cygthread.h b/winsup/cygwin/cygthread.h
deleted file mode 100644
index f0b5f733e..000000000
--- a/winsup/cygwin/cygthread.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/* cygthread.h
-
- Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2010, 2011 Red
- Hat, Inc.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _CYGTHREAD_H
-#define _CYGTHREAD_H
-
-typedef void WINAPI (*LPVOID_THREAD_START_ROUTINE) (void *) __attribute__((noreturn)); // Input queue thread
-
-class cygthread
-{
- LONG inuse;
- DWORD id;
- HANDLE h;
- HANDLE ev;
- HANDLE thread_sync;
- void *stack_ptr;
- const char *__name;
-#ifdef DEBUGGING
- const char *__oldname;
- bool terminated;
-#endif
- LPTHREAD_START_ROUTINE func;
- unsigned arglen;
- VOID *arg;
- bool is_freerange;
- static bool exiting;
- HANDLE notify_detached;
- void __reg1 create ();
- static void CALLBACK async_create (ULONG_PTR);
- public:
- bool terminate_thread ();
- static DWORD WINAPI stub (VOID *);
- static DWORD WINAPI simplestub (VOID *);
- static DWORD main_thread_id;
- static const char *name (DWORD = 0);
- void __reg2 callfunc (bool) __attribute__ ((noinline, ));
- void auto_release () {func = NULL;}
- void release (bool);
- cygthread (LPTHREAD_START_ROUTINE start, unsigned n, LPVOID param, const char *name, HANDLE notify = NULL)
- : __name (name), func (start), arglen (n), arg (param),
- notify_detached (notify)
- {
- create ();
- }
- cygthread (LPVOID_THREAD_START_ROUTINE start, LPVOID param, const char *name)
- : __name (name), func ((LPTHREAD_START_ROUTINE) start), arglen (0),
- arg (param), notify_detached (NULL)
- {
- QueueUserAPC (async_create, GetCurrentThread (), (ULONG_PTR) this);
- }
- cygthread (LPTHREAD_START_ROUTINE start, LPVOID param, const char *name, HANDLE notify = NULL)
- : __name (name), func (start), arglen (0), arg (param),
- notify_detached (notify)
- {
- create ();
- }
- cygthread (LPVOID_THREAD_START_ROUTINE start, unsigned n, LPVOID param, const char *name)
- : __name (name), func ((LPTHREAD_START_ROUTINE) start), arglen (n),
- arg (param), notify_detached (NULL)
- {
- QueueUserAPC (async_create, GetCurrentThread (), (ULONG_PTR) this);
- }
- cygthread () {};
- static void init ();
- bool detach (HANDLE = NULL);
- operator HANDLE ();
- void * operator new (size_t);
- static cygthread *freerange ();
- static void terminate ();
- HANDLE thread_handle () const {return h;}
- bool SetThreadPriority (int nPriority) {return ::SetThreadPriority (h, nPriority);}
- void zap_h ()
- {
- CloseHandle (h);
- h = NULL;
- }
-};
-
-#define cygself NULL
-#endif /*_CYGTHREAD_H*/
diff --git a/winsup/cygwin/cygtls.cc b/winsup/cygwin/cygtls.cc
deleted file mode 100644
index 84170ca01..000000000
--- a/winsup/cygwin/cygtls.cc
+++ /dev/null
@@ -1,227 +0,0 @@
-/* cygtls.cc
-
- Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012,
- 2013, 2014 Red Hat, Inc.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#define USE_SYS_TYPES_FD_SET
-#include "cygtls.h"
-#include <syslog.h>
-#include <stdlib.h>
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "sigproc.h"
-#include "exception.h"
-
-/* Two calls to get the stack right... */
-void
-_cygtls::call (DWORD (*func) (void *, void *), void *arg)
-{
- char buf[CYGTLS_PADSIZE];
- /* Initialize this thread's ability to respond to things like
- SIGSEGV or SIGFPE. */
- exception protect;
- _my_tls.call2 (func, arg, buf);
-}
-
-static int
-dll_cmp (const void *a, const void *b)
-{
- return wcscasecmp ((const wchar_t *) a, *(const wchar_t **) b);
-}
-
-/* Keep sorted!
- This is a list of well-known core system DLLs which contain code
- started in its own thread by the system. Kernel32.dll, for instance,
- contains the thread called on every Ctrl-C keypress in a console window.
- The DLLs in this list are not recognized as BLODAs. */
-const wchar_t *well_known_dlls[] =
-{
- L"advapi32.dll",
- L"kernel32.dll",
- L"kernelbase.dll",
- L"mswsock.dll",
- L"ntdll.dll",
- L"ole32.dll",
- L"shlwapi.dll",
- L"wbemprox.dll",
- L"ws2_32.dll",
-};
-
-/* Optional BLODA detection. The idea is that the function address is supposed
- to be within Cygwin itself. This is also true for pthreads, since pthreads
- are always calling pthread::thread_init_wrapper() in thread.cc. Therefore,
- every function call to a function outside of the Cygwin DLL is potentially
- a thread injected into the Cygwin process by some BLODA.
-
- But that's too simple. Assuming the application itself calls CreateThread,
- then this is a bad idea, but not really invalid. So we shouldn't print a
- BLODA message if the address is within the loaded image of the application.
- Also, ntdll.dll starts threads into the application which */
-static void
-bloda_detect (DWORD (*func) (void *, void *))
-{
- PIMAGE_DOS_HEADER img_start = (PIMAGE_DOS_HEADER)
- GetModuleHandle (NULL);
- PIMAGE_NT_HEADERS32 ntheader = (PIMAGE_NT_HEADERS32)
- ((PBYTE) img_start + img_start->e_lfanew);
- void *img_end = (void *) ((PBYTE) img_start
- + ntheader->OptionalHeader.SizeOfImage);
- if (((void *) func < (void *) cygwin_hmodule
- || (void *) func > (void *) cygheap)
- && ((void *) func < (void *) img_start || (void *) func >= img_end))
- {
- MEMORY_BASIC_INFORMATION mbi;
- wchar_t modname[PATH_MAX];
-
- VirtualQuery ((PVOID) func, &mbi, sizeof mbi);
- GetModuleFileNameW ((HMODULE) mbi.AllocationBase, modname,
- PATH_MAX);
- /* Fetch basename and check against list of above system DLLs. */
- const wchar_t *modbasename = wcsrchr (modname, L'\\') + 1;
- if (!bsearch (modbasename, well_known_dlls,
- sizeof well_known_dlls / sizeof well_known_dlls[0],
- sizeof well_known_dlls[0], dll_cmp))
- small_printf ("\n\nPotential BLODA detected! Thread function "
- "called outside of Cygwin DLL:\n %W\n\n",
- modname);
- }
-}
-
-void
-_cygtls::call2 (DWORD (*func) (void *, void *), void *arg, void *buf)
-{
- /* If func is pthread_wrapper, the final stack hasn't been set up yet.
- This only happens in pthread_wrapper itself. Thus it doesn't make
- sense to call init_thread or perform BLODA detection. pthread_wrapper
- eventually calls init_thread by itself. */
- if ((void *) func != (void *) pthread_wrapper)
- {
- init_thread (buf, func);
- if (detect_bloda)
- bloda_detect (func);
- }
-
- DWORD res = func (arg, buf);
- remove (INFINITE);
- /* Don't call ExitThread on the main thread since we may have been
- dynamically loaded. */
- if ((void *) func != (void *) dll_crt0_1
- && (void *) func != (void *) dll_dllcrt0_1)
- ExitThread (res);
-}
-
-void
-_cygtls::init_thread (void *x, DWORD (*func) (void *, void *))
-{
- if (x)
- {
- memset (this, 0, sizeof (*this));
- _REENT_INIT_PTR (&local_clib);
- stackptr = stack;
- if (_GLOBAL_REENT)
- {
- local_clib._stdin = _GLOBAL_REENT->_stdin;
- local_clib._stdout = _GLOBAL_REENT->_stdout;
- local_clib._stderr = _GLOBAL_REENT->_stderr;
- local_clib.__sdidinit = _GLOBAL_REENT->__sdidinit ? -1 : 0;
- local_clib.__cleanup = _GLOBAL_REENT->__cleanup;
- local_clib.__sglue._niobs = 3;
- local_clib.__sglue._iobs = &_GLOBAL_REENT->__sf[0];
- }
- }
-
- thread_id = GetCurrentThreadId ();
- initialized = CYGTLS_INITIALIZED;
- errno_addr = &(local_clib._errno);
- locals.cw_timer = NULL;
-
- if ((void *) func == (void *) cygthread::stub
- || (void *) func == (void *) cygthread::simplestub)
- return;
-
- cygheap->add_tls (this);
-}
-
-void
-_cygtls::fixup_after_fork ()
-{
- if (sig)
- {
- pop ();
- sig = 0;
- }
- stacklock = spinning = 0;
- signal_arrived = NULL;
- locals.select.sockevt = NULL;
- locals.cw_timer = NULL;
- wq.thread_ev = NULL;
-}
-
-#define free_local(x) \
- if (locals.x) \
- { \
- free (locals.x); \
- locals.x = NULL; \
- }
-
-void
-_cygtls::remove (DWORD wait)
-{
- initialized = 0;
- if (exit_state >= ES_FINAL)
- return;
-
- debug_printf ("wait %u", wait);
-
- HANDLE mutex = cygheap->remove_tls (this);
- remove_wq (wait);
-
- /* FIXME: Need some sort of atthreadexit function to allow things like
- select to control this themselves. */
-
- if (signal_arrived)
- {
- HANDLE h = signal_arrived;
- signal_arrived = NULL;
- CloseHandle (h);
- }
-
- /* Close handle and free memory used by select. */
- if (locals.select.sockevt)
- {
- CloseHandle (locals.select.sockevt);
- locals.select.sockevt = NULL;
- free_local (select.ser_num);
- free_local (select.w4);
- }
- /* Free memory used by network functions. */
- free_local (ntoa_buf);
- free_local (protoent_buf);
- free_local (servent_buf);
- free_local (hostent_buf);
- /* Free temporary TLS path buffers. */
- locals.pathbufs.destroy ();
- /* Close timer handle. */
- if (locals.cw_timer)
- NtClose (locals.cw_timer);
- if (mutex)
- {
- ReleaseMutex (mutex);
- CloseHandle (mutex);
- }
-}
-
-#ifdef __x86_64__
-void san::leave ()
-{
- /* Restore tls_pathbuf counters in case of error. */
- _my_tls.locals.pathbufs._counters = _cnt;
-}
-#endif
diff --git a/winsup/cygwin/cygtls.h b/winsup/cygwin/cygtls.h
deleted file mode 100644
index 91533f2a0..000000000
--- a/winsup/cygwin/cygtls.h
+++ /dev/null
@@ -1,430 +0,0 @@
-/* cygtls.h
-
- Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013,
- 2014 Red Hat, Inc.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#pragma once
-
-#include <signal.h>
-#include <pwd.h>
-#include <grp.h>
-#include <time.h>
-#define _NOMNTENT_FUNCS
-#include <mntent.h>
-#undef _NOMNTENT_FUNCS
-#include <setjmp.h>
-
-#define CYGTLS_INITIALIZED 0xc763173f
-
-#ifndef CYG_MAX_PATH
-# define CYG_MAX_PATH 260
-#endif
-
-#ifndef UNLEN
-# define UNLEN 256
-#endif
-
-#define TLS_STACK_SIZE 256
-
-#include "cygthread.h"
-
-#define TP_NUM_C_BUFS 50
-#define TP_NUM_W_BUFS 50
-
-#ifdef CYGTLS_HANDLE
-#include "thread.h"
-#endif
-
-#ifdef __x86_64__
-#pragma pack(push,8)
-#else
-#pragma pack(push,4)
-#endif
-
-/* Defined here to support auto rebuild of tlsoffsets.h. */
-class tls_pathbuf
-{
- /* Make sure that c_cnt and w_cnt are always the first two members of this
- class, and never change the size (32 bit), unless you also change the
- mov statements in sigbe! */
- union
- {
- struct
- {
- uint32_t c_cnt;
- uint32_t w_cnt;
- };
- uint64_t _counters;
- };
- char *c_buf[TP_NUM_C_BUFS];
- WCHAR *w_buf[TP_NUM_W_BUFS];
-
-public:
- void destroy ();
- friend class tmp_pathbuf;
- friend class san;
-};
-
-class unionent
-{
-public:
- char *name;
- char **list;
- short port_proto_addrtype;
- short h_len;
- union
- {
- char *s_proto;
- char **h_addr_list;
- };
- enum struct_type
- {
- t_hostent, t_protoent, t_servent
- };
-};
-
-struct _local_storage
-{
- /* passwd.cc */
- char pass[_PASSWORD_LEN];
-
- /* dlfcn.cc */
- int dl_error;
- char dl_buffer[256];
-
- /* path.cc */
- struct mntent mntbuf;
- int iteration;
- unsigned available_drives;
- char mnt_type[80];
- char mnt_opts[80];
- char mnt_fsname[CYG_MAX_PATH];
- char mnt_dir[CYG_MAX_PATH];
-
- /* select.cc */
- struct {
- HANDLE sockevt;
- int max_w4;
- LONG *ser_num; // note: malloced
- HANDLE *w4; // note: malloced
- } select;
-
- /* strerror errno.cc */
- char strerror_buf[sizeof ("Unknown error -2147483648")];
- char strerror_r_buf[sizeof ("Unknown error -2147483648")];
-
- /* times.cc */
- char timezone_buf[20];
-
- /* strsig.cc */
- char signamebuf[sizeof ("Unknown signal 4294967295 ")];
-
- /* net.cc */
- char *ntoa_buf; // note: malloced
- unionent *hostent_buf; // note: malloced
- unionent *protoent_buf; // note: malloced
- unionent *servent_buf; // note: malloced
-
- /* cygthread.cc */
- char unknown_thread_name[30];
-
- /* syscalls.cc */
- int setmode_file;
- int setmode_mode;
-
- /* thread.cc */
- HANDLE cw_timer;
-
- tls_pathbuf pathbufs;
- char ttybuf[32];
-};
-
-typedef struct struct_waitq
-{
- int pid;
- int options;
- int status;
- HANDLE ev;
- void *rusage; /* pointer to potential rusage */
- struct struct_waitq *next;
- HANDLE thread_ev;
-} waitq;
-
-/* Changes to the below structure may require acompanying changes to the very
- simple parser in the perl script 'gentls_offsets' (<<-- start parsing here).
- The union in this structure is used to force alignment between the version
- of the compiler used to generate tlsoffsets.h and the cygwin cross compiler.
-*/
-
-/*gentls_offsets*/
-
-extern "C" int __sjfault (jmp_buf);
-extern "C" int __ljfault (jmp_buf, int);
-
-/*gentls_offsets*/
-
-typedef uintptr_t __stack_t;
-
-class _cygtls
-{
-public:
- /* Please keep these two declarations first */
- struct _local_storage locals;
- union
- {
- struct _reent local_clib;
- char __dontuse[8 * ((sizeof(struct _reent) + 4) / 8)];
- };
- /**/
- void (*func) /*gentls_offsets*/(int, siginfo_t *, void *)/*gentls_offsets*/;
- int saved_errno;
- int sa_flags;
- sigset_t oldmask;
- sigset_t deltamask;
- int *errno_addr;
- sigset_t sigmask;
- sigset_t sigwait_mask;
- siginfo_t *sigwait_info;
- HANDLE signal_arrived;
- bool will_wait_for_signal;
- struct ucontext thread_context;
- DWORD thread_id;
- siginfo_t infodata;
- struct pthread *tid;
- class cygthread *_ctinfo;
- class san *andreas;
- waitq wq;
- int sig;
- unsigned incyg;
- unsigned spinning;
- unsigned stacklock;
- __stack_t *stackptr;
- __stack_t stack[TLS_STACK_SIZE];
- unsigned initialized;
-
- /*gentls_offsets*/
- void init_thread (void *, DWORD (*) (void *, void *));
- static void call (DWORD (*) (void *, void *), void *);
- void remove (DWORD);
- void push (__stack_t addr) {*stackptr++ = (__stack_t) addr;}
- __stack_t __reg1 pop ();
- __stack_t retaddr () {return stackptr[-1];}
- bool isinitialized () const
- {
- return initialized == CYGTLS_INITIALIZED;
- }
- bool __reg3 interrupt_now (CONTEXT *, siginfo_t&, void *, struct sigaction&);
- void __reg3 interrupt_setup (siginfo_t&, void *, struct sigaction&);
-
- bool inside_kernel (CONTEXT *);
- void __reg2 signal_debugger (siginfo_t&);
-
-#ifdef CYGTLS_HANDLE
- operator HANDLE () const {return tid ? tid->win32_obj_id : NULL;}
-#endif
- int __reg1 call_signal_handler ();
- void __reg1 remove_wq (DWORD);
- void __reg1 fixup_after_fork ();
- void __reg1 lock ();
- void __reg1 unlock ();
- bool __reg1 locked ();
- HANDLE get_signal_arrived (bool wait_for_lock = true)
- {
- if (!signal_arrived)
- {
- if (wait_for_lock)
- lock ();
- if (!signal_arrived)
- signal_arrived = CreateEvent (NULL, false, false, NULL);
- if (wait_for_lock)
- unlock ();
- }
- return signal_arrived;
- }
- void set_signal_arrived (bool setit, HANDLE& h)
- {
- if (!setit)
- will_wait_for_signal = false;
- else
- {
- h = get_signal_arrived ();
- will_wait_for_signal = true;
- }
- }
- void reset_signal_arrived ()
- {
- if (signal_arrived)
- ResetEvent (signal_arrived);
- will_wait_for_signal = false;
- }
- void handle_SIGCONT ();
-private:
- void __reg3 call2 (DWORD (*) (void *, void *), void *, void *);
- /*gentls_offsets*/
-};
-#pragma pack(pop)
-
-/* FIXME: Find some way to autogenerate this value */
-#ifdef __x86_64__
-const int CYGTLS_PADSIZE = 12800; /* Must be 16-byte aligned */
-#else
-const int CYGTLS_PADSIZE = 12700;
-#endif
-
-/*gentls_offsets*/
-
-#include "cygerrno.h"
-#include "ntdll.h"
-
-#ifdef __x86_64__
-/* When just using a "gs:X" asm for the x86_64 code, gcc wrongly creates
- pc-relative instructions. However, NtCurrentTeb() is inline assembler
- anyway, so using it here should be fast enough on x86_64. */
-#define _tlsbase (NtCurrentTeb()->Tib.StackBase)
-#define _tlstop (NtCurrentTeb()->Tib.StackLimit)
-#else
-extern PVOID _tlsbase __asm__ ("%fs:4");
-extern PVOID _tlstop __asm__ ("%fs:8");
-#endif
-
-#define _my_tls (*((_cygtls *) ((char *)_tlsbase - CYGTLS_PADSIZE)))
-extern _cygtls *_main_tls;
-extern _cygtls *_sig_tls;
-
-#ifdef __x86_64__
-class san
-{
- uint64_t _cnt;
-public:
- san () __attribute__ ((always_inline))
- {
- _cnt = _my_tls.locals.pathbufs._counters;
- }
- /* This is the first thing called in the __except handler. The attribute
- "returns_twice" makes sure that GCC disregards any register value set
- earlier in the function, so this call serves as a register barrier. */
- void leave () __attribute__ ((returns_twice));
-};
-#else
-class san
-{
- san *_clemente;
- jmp_buf _context;
- uint32_t _c_cnt;
- uint32_t _w_cnt;
-public:
- int setup () __attribute__ ((always_inline))
- {
- _clemente = _my_tls.andreas;
- _my_tls.andreas = this;
- _c_cnt = _my_tls.locals.pathbufs.c_cnt;
- _w_cnt = _my_tls.locals.pathbufs.w_cnt;
- return __sjfault (_context);
- }
- void leave () __attribute__ ((always_inline))
- {
- /* Restore tls_pathbuf counters in case of error. */
- _my_tls.locals.pathbufs.c_cnt = _c_cnt;
- _my_tls.locals.pathbufs.w_cnt = _w_cnt;
- __ljfault (_context, 1);
- }
- void reset () __attribute__ ((always_inline))
- {
- _my_tls.andreas = _clemente;
- }
-};
-
-class myfault
-{
- san sebastian;
-public:
- ~myfault () __attribute__ ((always_inline)) { sebastian.reset (); }
- inline int faulted () __attribute__ ((always_inline))
- {
- return sebastian.setup ();
- }
-};
-#endif
-
-/* Exception handling macros. These are required because SEH differs a lot
- between 32 and 64 bit. Essentially, on 64 bit, we have to create compile
- time SEH tables which define the handler and try/except labels, while on
- 32 bit we can simply set up an SJLJ handler within the myfault class. */
-#define __mem_barrier __asm__ __volatile__ ("" ::: "memory")
-#ifdef __x86_64__
-#define __try \
- { \
- __label__ __l_try, __l_except, __l_endtry; \
- __mem_barrier; \
- san __sebastian; \
- __asm__ goto ("\n" \
- " .seh_handler _ZN9exception7myfaultEP17_EXCEPTION_RECORDPvP8_CONTEXTP19_DISPATCHER_CONTEXT, @except \n" \
- " .seh_handlerdata \n" \
- " .long 1 \n" \
- " .rva %l[__l_try],%l[__l_endtry],%l[__l_except],%l[__l_except] \n" \
- " .seh_code \n" \
- : : : : __l_try, __l_endtry, __l_except); \
- { \
- __l_try: \
- __mem_barrier;
-
-#define __leave \
- goto __l_endtry
-
-#define __except(__errno) \
- goto __l_endtry; \
- } \
- { \
- __l_except: \
- __mem_barrier; \
- __sebastian.leave (); \
- if (__errno) \
- set_errno (__errno);
-
-#define __endtry \
- } \
- __l_endtry: \
- __mem_barrier; \
- }
-
-#else /* !__x86_64__ */
-#define __try \
- { \
- __label__ __l_endtry; \
- myfault efault; \
- if (!efault.faulted ()) \
- {
-
-#define __leave \
- goto __l_endtry
-
-#define __except(__errno) \
- goto __l_endtry; \
- } \
- { \
- if (__errno) \
- set_errno (__errno);
-
-#define __endtry \
- } \
- __l_endtry: \
- __mem_barrier; \
- }
-#endif /* __x86_64__ */
-
-class set_signal_arrived
-{
-public:
- set_signal_arrived (bool setit, HANDLE& h) { _my_tls.set_signal_arrived (setit, h); }
- set_signal_arrived (HANDLE& h) { _my_tls.set_signal_arrived (true, h); }
-
- operator int () const {return _my_tls.will_wait_for_signal;}
- ~set_signal_arrived () { _my_tls.reset_signal_arrived (); }
-};
-
-#define __getreent() (&_my_tls.local_clib)
-/*gentls_offsets*/
diff --git a/winsup/cygwin/cygwait.cc b/winsup/cygwin/cygwait.cc
deleted file mode 100644
index b6bffa27f..000000000
--- a/winsup/cygwin/cygwait.cc
+++ /dev/null
@@ -1,114 +0,0 @@
-/* cygwait.h
-
- Copyright 2011, 2012, 2013 Red Hat, Inc.
-
- This file is part of Cygwin.
-
- This software is a copyrighted work licensed under the terms of the
- Cygwin license. Please consult the file "CYGWIN_LICENSE" for
- details. */
-
-#include "winsup.h"
-#include "sigproc.h"
-#include "cygwait.h"
-#include "ntdll.h"
-
-#define is_cw_cancel (mask & cw_cancel)
-#define is_cw_cancel_self (mask & cw_cancel_self)
-#define is_cw_sig (mask & cw_sig)
-#define is_cw_sig_eintr (mask & cw_sig_eintr)
-#define is_cw_sig_cont (mask & cw_sig_cont)
-
-#define is_cw_sig_handle (mask & (cw_sig | cw_sig_eintr | cw_sig_cont))
-
-LARGE_INTEGER cw_nowait_storage;
-
-DWORD
-cygwait (HANDLE object, PLARGE_INTEGER timeout, unsigned mask)
-{
- DWORD res;
- DWORD num = 0;
- HANDLE wait_objects[4];
- pthread_t thread = pthread::self ();
-
- /* Do not change the wait order.
- The object must have higher priority than the cancel event,
- because WaitForMultipleObjects will return the smallest index
- if both objects are signaled. */
- if (object)
- wait_objects[num++] = object;
-
- set_signal_arrived thread_waiting (is_cw_sig_handle, wait_objects[num]);
- debug_only_printf ("object %p, thread waiting %d, signal_arrived %p", object, (int) thread_waiting, _my_tls.signal_arrived);
- DWORD sig_n;
- if (!thread_waiting)
- sig_n = WAIT_TIMEOUT + 1;
- else
- sig_n = WAIT_OBJECT_0 + num++;
-
- DWORD cancel_n;
- if (!is_cw_cancel || !pthread::is_good_object (&thread) ||
- thread->cancelstate == PTHREAD_CANCEL_DISABLE)
- cancel_n = WAIT_TIMEOUT + 1;
- else
- {
- cancel_n = WAIT_OBJECT_0 + num++;
- wait_objects[cancel_n] = thread->cancel_event;
- }
-
- DWORD timeout_n;
- if (!timeout)
- timeout_n = WAIT_TIMEOUT + 1;
- else
- {
- timeout_n = WAIT_OBJECT_0 + num++;
- if (!_my_tls.locals.cw_timer)
- NtCreateTimer (&_my_tls.locals.cw_timer, TIMER_ALL_ACCESS, NULL,
- NotificationTimer);
- NtSetTimer (_my_tls.locals.cw_timer, timeout, NULL, NULL, FALSE, 0, NULL);
- wait_objects[timeout_n] = _my_tls.locals.cw_timer;
- }
-
- while (1)
- {
- res = WaitForMultipleObjects (num, wait_objects, FALSE, INFINITE);
- debug_only_printf ("res %d", res);
- if (res == cancel_n)
- res = WAIT_CANCELED;
- else if (res == timeout_n)
- res = WAIT_TIMEOUT;
- else if (res != sig_n)
- /* all set */;
- else
- {
- int sig = _my_tls.sig;
- if (is_cw_sig_cont && sig == SIGCONT)
- _my_tls.sig = 0;
- if (!sig)
- continue;
- if (is_cw_sig_eintr || (is_cw_sig_cont && sig == SIGCONT))
- res = WAIT_SIGNALED; /* caller will deal with signals */
- else if (_my_tls.call_signal_handler ())
- continue;
- }
- break;
- }
-
- if (timeout)
- {
- TIMER_BASIC_INFORMATION tbi;
-
- NtQueryTimer (_my_tls.locals.cw_timer, TimerBasicInformation, &tbi,
- sizeof tbi, NULL);
- /* if timer expired, TimeRemaining is negative and represents the
- system uptime when signalled */
- if (timeout->QuadPart < 0LL)
- timeout->QuadPart = tbi.SignalState ? 0LL : tbi.TimeRemaining.QuadPart;
- NtCancelTimer (_my_tls.locals.cw_timer, NULL);
- }
-
- if (res == WAIT_CANCELED && is_cw_cancel_self)
- pthread::static_cancel_self ();
-
- return res;
-}
diff --git a/winsup/cygwin/cygwait.h b/winsup/cygwin/cygwait.h
deleted file mode 100644
index 496817bcf..000000000
--- a/winsup/cygwin/cygwait.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/* cygwait.h
-
- Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
- Red Hat, Inc.
-
- This file is part of Cygwin.
-
- This software is a copyrighted work licensed under the terms of the
- Cygwin license. Please consult the file "CYGWIN_LICENSE" for
- details. */
-
-#pragma once
-
-#define WAIT_CANCELED (WAIT_OBJECT_0 + 2)
-#define WAIT_SIGNALED (WAIT_OBJECT_0 + 1)
-
-enum cw_wait_mask
-{
- cw_cancel = 0x0001,
- cw_cancel_self = 0x0002,
- cw_sig = 0x0004,
- cw_sig_eintr = 0x0008,
- cw_sig_cont = 0x0010
-};
-
-extern LARGE_INTEGER cw_nowait_storage;
-#define cw_nowait (&cw_nowait_storage)
-#define cw_infinite ((PLARGE_INTEGER) NULL)
-
-const unsigned cw_std_mask = cw_cancel | cw_cancel_self | cw_sig;
-
-DWORD __reg3 cygwait (HANDLE, PLARGE_INTEGER timeout,
- unsigned = cw_std_mask);
-
-extern inline DWORD __attribute__ ((always_inline))
-cygwait (HANDLE h, DWORD howlong, unsigned mask)
-{
- LARGE_INTEGER li_howlong;
- PLARGE_INTEGER pli_howlong;
- if (howlong == INFINITE)
- pli_howlong = NULL;
- else
- {
- li_howlong.QuadPart = -(10000ULL * howlong);
- pli_howlong = &li_howlong;
- }
- return cygwait (h, pli_howlong, mask);
-}
-
-static inline DWORD __attribute__ ((always_inline))
-cygwait (HANDLE h, DWORD howlong = INFINITE)
-{
- return cygwait (h, howlong, cw_cancel | cw_sig);
-}
-
-static inline DWORD __attribute__ ((always_inline))
-cygwait (DWORD howlong)
-{
- return cygwait (NULL, howlong);
-}
diff --git a/winsup/cygwin/cygwin-cxx.h b/winsup/cygwin/cygwin-cxx.h
deleted file mode 100755
index b0eb8c25c..000000000
--- a/winsup/cygwin/cygwin-cxx.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/* cygwin-cxx.h
-
- Copyright 2009 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _CYGWIN_CXX_H
-#define _CYGWIN_CXX_H
-
-#ifndef __cplusplus
-#error This header should not be included by C source files.
-#endif
-
-/* Files including this header must override -nostdinc++ */
-#include <new>
-
-/* This is an optional struct pointed to by per_process if it exists. */
-struct per_process_cxx_malloc
-{
- void *(*oper_new) (std::size_t);
- void *(*oper_new__) (std::size_t);
- void (*oper_delete) (void *);
- void (*oper_delete__) (void *);
- void *(*oper_new_nt) (std::size_t, const std::nothrow_t &);
- void *(*oper_new___nt) (std::size_t, const std::nothrow_t &);
- void (*oper_delete_nt) (void *, const std::nothrow_t &);
- void (*oper_delete___nt) (void *, const std::nothrow_t &);
-};
-
-/* Defined in cxx.cc */
-extern struct per_process_cxx_malloc default_cygwin_cxx_malloc;
-
-#endif /* _CYGWIN_CXX_H */
diff --git a/winsup/cygwin/cygwin-shilka b/winsup/cygwin/cygwin-shilka
deleted file mode 100755
index 9abbf230f..000000000
--- a/winsup/cygwin/cygwin-shilka
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh
-c="$(basename $1 .shilka).c"
-shilka -length -strip -no-definitions $1 && \
-sed -e '1,4d' -e '/KR_reset.*;/d' -e '/KR_output_statistics.*;/d' \
- -e '/KR_reset.*)/,/}/d' -e '/KR_output_statistics.*)/,/}/d' \
- -e '/# *line/d' "$c" > $2 &&
-rm -f "$c"
-# -e "s%$c"'"%'"$2"'"%g'
diff --git a/winsup/cygwin/cygwin.ldif b/winsup/cygwin/cygwin.ldif
deleted file mode 100644
index 166a58123..000000000
--- a/winsup/cygwin/cygwin.ldif
+++ /dev/null
@@ -1,253 +0,0 @@
-# =========================================================================
-#
-# Schema Extension for Cygwin User and Group auxiliary classes
-#
-# Extend your Active Directory using
-#
-# ldifde -i -f <path>\<this>.ldif -b <username> <domain> <password> \
-# -k -c "CN=schema,CN=Configuration,DC=X" #schemaNamingContext
-#
-# Remember:
-# - you have to be schema admin for your active directory
-# - you have to run the above command directly from your schema master
-#
-# For further information read
-# http://technet.microsoft.com/en-us/magazine/2008.05.schema.aspx
-#
-# ----------------------------------------------------------------------
-#
-# Explanation for the OIDs:
-#
-# Value Meaning Description
-# 1 ISO Identifies the root authority.
-# 3 IANA Group designation assigned by ISO.
-# 6.1.4.1.2312 Red Hat Organization assigned by IANA.
-# 15 Cygwin Assigned by Organization.
-# Y Object Type Number defining the different object type
-# (category) such as classSchema or
-# attributeSchema. For example, 5 defines
-# object class.
-# Z Object Number identifying a particular object
-# within the category. For example, the user
-# class has the number 9 assigned to it.
-#
-# ----------------------------------------------------------------------
-
-# Attribute definition for cygwinHome
-
-dn: CN=cygwin-Home,CN=Schema,CN=Configuration,DC=X
-changetype: ntdsschemaadd
-objectClass: top
-objectClass: attributeSchema
-cn: cygwin-Home
-attributeID: 1.3.6.1.4.1.2312.15.2.1
-# attributeSyntax 2.5.5.12 is String(Unicode) with oMSyntax == 64
-# see http://technet.microsoft.com/en-us/library/cc961740.aspx
-attributeSyntax: 2.5.5.12
-isSingleValued: TRUE
-adminDisplayName: cygwin-Home
-adminDescription: cygwin-Home
-oMSyntax: 64
-searchFlags: 1
-lDAPDisplayName: cygwinHome
-systemOnly: FALSE
-
-dn:
-changetype: modify
-add: schemaUpdateNow
-schemaUpdateNow: 1
--
-
-# Attribute definition for cygwinShell
-
-dn: CN=cygwin-Shell,CN=Schema,CN=Configuration,DC=X
-changetype: ntdsschemaadd
-objectClass: top
-objectClass: attributeSchema
-cn: cygwin-Shell
-attributeID: 1.3.6.1.4.1.2312.15.2.2
-attributeSyntax: 2.5.5.12
-isSingleValued: TRUE
-adminDisplayName: cygwin-Shell
-adminDescription: cygwin-Shell
-oMSyntax: 64
-searchFlags: 1
-lDAPDisplayName: cygwinShell
-systemOnly: FALSE
-
-dn:
-changetype: modify
-add: schemaUpdateNow
-schemaUpdateNow: 1
--
-
-# Attribute definition for cygwinGecos
-
-dn: CN=cygwin-Gecos,CN=Schema,CN=Configuration,DC=X
-changetype: ntdsschemaadd
-objectClass: top
-objectClass: attributeSchema
-cn: cygwin-Gecos
-attributeID: 1.3.6.1.4.1.2312.15.2.3
-attributeSyntax: 2.5.5.12
-isSingleValued: TRUE
-adminDisplayName: cygwin-Gecos
-adminDescription: cygwin-Gecos
-oMSyntax: 64
-searchFlags: 1
-lDAPDisplayName: cygwinGecos
-systemOnly: FALSE
-
-dn:
-changetype: modify
-add: schemaUpdateNow
-schemaUpdateNow: 1
--
-
-# Attribute definition for cygwinFstab
-
-dn: CN=cygwin-Fstab,CN=Schema,CN=Configuration,DC=X
-changetype: ntdsschemaadd
-objectClass: top
-objectClass: attributeSchema
-cn: cygwin-Fstab
-attributeID: 1.3.6.1.4.1.2312.15.2.4
-attributeSyntax: 2.5.5.12
-isSingleValued: FALSE
-adminDisplayName: cygwin-Fstab
-adminDescription: cygwin-Fstab
-oMSyntax: 64
-searchFlags: 1
-lDAPDisplayName: cygwinFstab
-systemOnly: FALSE
-
-dn:
-changetype: modify
-add: schemaUpdateNow
-schemaUpdateNow: 1
--
-
-# Attribute definition for cygwinUnixUid
-
-dn: CN=cygwin-UnixUid,CN=Schema,CN=Configuration,DC=X
-changetype: ntdsschemaadd
-objectClass: top
-objectClass: attributeSchema
-cn: cygwin-UnixUid
-attributeID: 1.3.6.1.4.1.2312.15.2.5
-# attributeSyntax 2.5.5.9 is Integer with oMSyntax == 2
-attributeSyntax: 2.5.5.9
-isSingleValued: TRUE
-adminDisplayName: cygwin-UnixUid
-adminDescription: cygwin-UnixUid
-oMSyntax: 2
-searchFlags: 1
-lDAPDisplayName: cygwinUnixUid
-systemOnly: FALSE
-
-dn:
-changetype: modify
-add: schemaUpdateNow
-schemaUpdateNow: 1
--
-
-# Attribute definition for cygwinUnixGid
-
-dn: CN=cygwin-UnixGid,CN=Schema,CN=Configuration,DC=X
-changetype: ntdsschemaadd
-objectClass: top
-objectClass: attributeSchema
-cn: cygwin-UnixGid
-attributeID: 1.3.6.1.4.1.2312.15.2.6
-attributeSyntax: 2.5.5.9
-isSingleValued: TRUE
-adminDisplayName: cygwin-UnixGid
-adminDescription: cygwin-UnixGid
-oMSyntax: 2
-searchFlags: 1
-lDAPDisplayName: cygwinUnixGid
-systemOnly: FALSE
-
-dn:
-changetype: modify
-add: schemaUpdateNow
-schemaUpdateNow: 1
--
-
-# cygwin-User auxiliary class
-
-dn: CN=cygwin-User,CN=Schema,CN=Configuration,DC=X
-changetype: ntdsschemaadd
-objectClass: top
-objectClass: classSchema
-cn: cygwin-User
-governsID: 1.3.6.1.4.1.2312.15.1.1
-mayContain: cygwinHome
-mayContain: cygwinShell
-mayContain: cygwinGecos
-mayContain: cygwinFstab
-mayContain: cygwinUnixUid
-rDNAttID: cn
-adminDisplayName: cygwin-User
-adminDescription: cygwin-User
-objectClassCategory: 3
-lDAPDisplayName: cygwinUser
-name: cygwin-User
-systemOnly: FALSE
-
-dn:
-changetype: modify
-add: schemaUpdateNow
-schemaUpdateNow: 1
--
-
-# cygwin-Group auxiliary class
-
-dn: CN=cygwin-Group,CN=Schema,CN=Configuration,DC=X
-changetype: ntdsschemaadd
-objectClass: top
-objectClass: classSchema
-cn: cygwin-Group
-governsID: 1.3.6.1.4.1.2312.15.1.2
-mayContain: cygwinUnixGid
-rDNAttID: cn
-adminDisplayName: cygwin-Group
-adminDescription: cygwin-Group
-objectClassCategory: 3
-lDAPDisplayName: cygwinGroup
-name: cygwin-Group
-systemOnly: FALSE
-
-dn:
-changetype: modify
-add: schemaUpdateNow
-schemaUpdateNow: 1
--
-
-# Attach cygwin-User to User
-
-dn: CN=User,CN=Schema,CN=Configuration,DC=X
-changetype: ntdsschemamodify
-add: auxiliaryClass
-auxiliaryClass: cygwinUser
--
-
-dn:
-changetype: modify
-add: schemaUpdateNow
-schemaUpdateNow: 1
--
-
-# Attach cygwin-Group to Group
-
-dn: CN=Group,CN=Schema,CN=Configuration,DC=X
-changetype: ntdsschemamodify
-add: auxiliaryClass
-auxiliaryClass: cygwinGroup
--
-
-dn:
-changetype: modify
-add: schemaUpdateNow
-schemaUpdateNow: 1
--
diff --git a/winsup/cygwin/cygwin.sc.in b/winsup/cygwin/cygwin.sc.in
deleted file mode 100644
index 134ae3f76..000000000
--- a/winsup/cygwin/cygwin.sc.in
+++ /dev/null
@@ -1,185 +0,0 @@
-#ifdef __x86_64__
-OUTPUT_FORMAT(pei-x86-64)
-SEARCH_DIR("/usr/x86_64-pc-cygwin/lib/w32api"); SEARCH_DIR("=/usr/lib/w32api");
-#else
-#undef i386
-OUTPUT_FORMAT(pei-i386)
-SEARCH_DIR("/usr/i686-pc-cygwin/lib/w32api"); SEARCH_DIR("=/usr/lib/w32api");
-#endif
-#define __CONCAT1(a,b) a##b
-#define __CONCAT(a,b) __CONCAT1(a,b)
-#define _SYM(x) __CONCAT(__USER_LABEL_PREFIX__, x)
-SECTIONS
-{
- .text __image_base__ + __section_alignment__ :
- {
- *(.init)
- *(.text)
- *(.text.*)
- *(SORT(.text$*))
- *(.glue_7t)
- *(.glue_7)
-#ifdef __x86_64__
- . = ALIGN(8);
- ___CTOR_LIST__ = .; __CTOR_LIST__ = .;
- LONG (-1); LONG (-1); *(SORT(.ctors.*)); *(.ctors); *(.ctor); LONG (0); LONG (0);
- ___DTOR_LIST__ = .; __DTOR_LIST__ = .;
- LONG (-1); LONG (-1); *(SORT(.dtors.*)); *(.dtors); *(.dtor); LONG (0); LONG (0);
-#else
- ___CTOR_LIST__ = .; __CTOR_LIST__ = .;
- LONG (-1); *(SORT(.ctors.*)); *(.ctors); *(.ctor); LONG (0);
- ___DTOR_LIST__ = .; __DTOR_LIST__ = .;
- LONG (-1); *(SORT(.dtors.*)); *(.dtors); *(.dtor); LONG (0);
-#endif
- *(.fini)
- /* ??? Why is .gcc_exc here? */
- *(.gcc_exc)
- etext = .;
- *(.gcc_except_table)
- }
- .autoload_text ALIGN(__section_alignment__) :
- {
- *(.*_autoload_text);
- }
- /* The Cygwin DLL uses a section to avoid copying certain data
- on fork. This used to be named ".data$nocopy". The linker used
- to include this between __data_start__ and __data_end__, but that
- breaks building the cygwin dll. Instead, we name the section
- ".data_cygwin_nocopy" and explicitly include it after __data_end__. */
- .data ALIGN(__section_alignment__) :
- {
- __data_start__ = .;
- *(.data)
- *(.data2)
- *(SORT(.data$*))
- __data_end__ = .;
- *(.data_cygwin_nocopy)
- }
- .rdata ALIGN(__section_alignment__) :
- {
- *(.rdata)
- *(SORT(.rdata$*))
- *(.rdata_cygwin_nocopy)
- ___RUNTIME_PSEUDO_RELOC_LIST__ = .;
- __RUNTIME_PSEUDO_RELOC_LIST__ = .;
- *(.rdata_runtime_pseudo_reloc)
- ___RUNTIME_PSEUDO_RELOC_LIST_END__ = .;
- __RUNTIME_PSEUDO_RELOC_LIST_END__ = .;
- }
- .eh_frame ALIGN(__section_alignment__) :
- {
- *(.eh_frame*)
- }
- .pdata ALIGN(__section_alignment__) :
- {
- *(.pdata*)
- }
-#ifdef __x86_64__
- .xdata ALIGN(__section_alignment__) :
- {
- *(.xdata*)
- }
-#endif
- .bss ALIGN(__section_alignment__) :
- {
- __bss_start__ = .;
- *(.bss)
- *(COMMON)
- __bss_end__ = .;
- }
- .edata ALIGN(__section_alignment__) :
- {
- *(.edata)
- }
- .reloc BLOCK(__section_alignment__) :
- {
- *(.reloc)
- }
- .cygwin_dll_common ALIGN(__section_alignment__):
- {
- *(.cygwin_dll_common)
- }
- .idata ALIGN(__section_alignment__) :
- {
- /* This cannot currently be handled with grouped sections.
- See pe.em:sort_sections. */
- SORT(*)(.idata$2)
- SORT(*)(.idata$3)
- /* These zeroes mark the end of the import list. */
- LONG (0); LONG (0); LONG (0); LONG (0); LONG (0);
- SORT(*)(.idata$4)
- SORT(*)(.idata$5)
- SORT(*)(.idata$6)
- SORT(*)(.idata$7)
- . = ALIGN(16);
- }
- .gnu_debuglink_overlay ALIGN(__section_alignment__) (NOLOAD):
- {
- BYTE(0) /* c */
- BYTE(0) /* y */
- BYTE(0) /* g */
- BYTE(0) /* w */
- BYTE(0) /* i */
- BYTE(0) /* n */
- BYTE(0) /* 1 */
- BYTE(0) /* . */
- BYTE(0) /* d */
- BYTE(0) /* b */
- BYTE(0) /* g */
- BYTE(0) /* \0 */
- LONG(0) /* checksum */
- }
- .rsrc BLOCK(__section_alignment__) :
- {
- *(.rsrc)
- *(SORT(.rsrc$*))
- _SYM (_cygheap_start) = .;
- }
- .cygheap ALIGN(__section_alignment__) :
- {
-#ifdef __x86_64__
- . = . + (3072 * 1024);
-#else
- . = . + (2048 * 1024);
-#endif
- . = ALIGN(0x10000);
- _SYM (_cygheap_end) = .;
- }
- /DISCARD/ :
- {
- *(.debug$S)
- *(.debug$T)
- *(.debug$F)
- *(.drectve)
- }
- .stab ALIGN(__section_alignment__) (NOLOAD) :
- {
- *(.stab)
- }
- .stabstr ALIGN(__section_alignment__) (NOLOAD) :
- {
- *(.stabstr)
- }
- /* DWARF 1.1 and DWARF 2 */
- .debug_aranges ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_aranges) }
- .debug_pubnames ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_pubnames) }
- .debug_pubtypes ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_pubtypes) }
- /* DWARF 2 */
- .debug_info ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_info) }
- .debug_abbrev ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_abbrev) }
- .debug_line ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_line) }
- .debug_frame ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_frame) }
- .debug_str ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_str) }
- .debug_loc ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_loc) }
- .debug_macinfo ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_macinfo) }
- /* SGI/MIPS DWARF 2 extensions. */
- .debug_weaknames ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_weaknames) }
- .debug_funcnames ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_funcnames) }
- .debug_typenames ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_typenames) }
- .debug_varnames ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_varnames) }
- .debug_macro ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_macro) }
- /* DWARF 3. */
- .debug_ranges ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_ranges) }
- /* DWARF 4. */
- .debug_types ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_types .gnu.linkonce.wt.*) }
-}
diff --git a/winsup/cygwin/cygwin_version.h b/winsup/cygwin/cygwin_version.h
deleted file mode 100644
index 18bdf2416..000000000
--- a/winsup/cygwin/cygwin_version.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/* cygwin_version.h: shared info for cygwin
-
- Copyright 2000, 2001 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include <cygwin/version.h>
-
-extern "C" {
-/* This is for programs that want to access the shared data. */
-class shared_info *cygwin_getshared (void);
-
-struct cygwin_version_info
-{
- unsigned short api_major;
- unsigned short api_minor;
- unsigned short dll_major;
- unsigned short dll_minor;
- unsigned short shared_data;
- unsigned short mount_registry;
- const char *dll_build_date;
- char shared_id[sizeof (CYGWIN_VERSION_DLL_IDENTIFIER) + 64];
-};
-
-extern cygwin_version_info cygwin_version;
-extern const char *cygwin_version_strings;
-}
diff --git a/winsup/cygwin/cygxdr.cc b/winsup/cygwin/cygxdr.cc
deleted file mode 100644
index 8686c17ae..000000000
--- a/winsup/cygwin/cygxdr.cc
+++ /dev/null
@@ -1,24 +0,0 @@
-/* cygxdr.cc:
-
- Copyright 2010, 2011 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include <stdarg.h>
-#include <stdio.h>
-#include "cygxdr.h"
-
-extern "C" void
-cygxdr_vwarnx (const char * fmt, va_list ap)
-{
- /* Imitate glibc behavior for xdr: messages are printed to stderr */
- (void) fputs ("xdr-routines: ", stderr);
- (void) vfprintf (stderr, fmt, ap);
- (void) fputs ("\n", stderr);
-}
-
diff --git a/winsup/cygwin/cygxdr.h b/winsup/cygwin/cygxdr.h
deleted file mode 100644
index a2dac36db..000000000
--- a/winsup/cygwin/cygxdr.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/* cygxdr.h:
-
- Copyright 2010, 2011 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-#ifndef _CYGXDR_H
-#define _CYGXDR_H
-
-extern "C"
-{
-
-typedef void (*xdr_vprintf_t)(const char *, va_list);
-
-xdr_vprintf_t xdr_set_vprintf (xdr_vprintf_t);
-
-void cygxdr_vwarnx (const char *, va_list);
-
-}
-
-#endif
-
diff --git a/winsup/cygwin/dcrt0.cc b/winsup/cygwin/dcrt0.cc
deleted file mode 100644
index 738860d0e..000000000
--- a/winsup/cygwin/dcrt0.cc
+++ /dev/null
@@ -1,1367 +0,0 @@
-/* dcrt0.cc -- essentially the main() for the Cygwin dll
-
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include "miscfuncs.h"
-#include <unistd.h>
-#include <stdlib.h>
-#include "glob.h"
-#include <ctype.h>
-#include <locale.h>
-#include "environ.h"
-#include "sigproc.h"
-#include "pinfo.h"
-#include "cygerrno.h"
-#define NEED_VFORK
-#include "perprocess.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "child_info_magic.h"
-#include "cygtls.h"
-#include "shared_info.h"
-#include "cygwin_version.h"
-#include "dll_init.h"
-#include "heap.h"
-#include "tls_pbuf.h"
-#include "exception.h"
-#include "cygxdr.h"
-#include "fenv.h"
-#include "ntdll.h"
-#include "wow64.h"
-
-#define MAX_AT_FILE_LEVEL 10
-
-#define PREMAIN_LEN (sizeof (user_data->premain) / sizeof (user_data->premain[0]))
-
-extern "C" void cygwin_exit (int) __attribute__ ((noreturn));
-extern "C" void __sinit (_reent *);
-
-static int NO_COPY envc;
-static char NO_COPY **envp;
-
-bool NO_COPY jit_debug;
-
-static void
-do_global_dtors ()
-{
- void (**pfunc) () = user_data->dtors;
- if (pfunc)
- {
- user_data->dtors = NULL;
- while (*++pfunc)
- (*pfunc) ();
- }
-}
-
-static void __stdcall
-do_global_ctors (void (**in_pfunc)(), int force)
-{
- if (!force && in_forkee)
- return; // inherit constructed stuff from parent pid
-
- /* Run ctors backwards, so skip the first entry and find how many
- there are, then run them. */
-
- void (**pfunc) () = in_pfunc;
-
- while (*++pfunc)
- ;
- while (--pfunc > in_pfunc)
- (*pfunc) ();
-}
-
-/*
- * Replaces @file in the command line with the contents of the file.
- * There may be multiple @file's in a single command line
- * A \@file is replaced with @file so that echo \@foo would print
- * @foo and not the contents of foo.
- */
-static bool __stdcall
-insert_file (char *name, char *&cmd)
-{
- HANDLE f;
- DWORD size;
- tmp_pathbuf tp;
-
- PWCHAR wname = tp.w_get ();
- sys_mbstowcs (wname, NT_MAX_PATH, name + 1);
- f = CreateFileW (wname,
- GENERIC_READ, /* open for reading */
- FILE_SHARE_VALID_FLAGS, /* share for reading */
- &sec_none_nih, /* default security */
- OPEN_EXISTING, /* existing file only */
- FILE_ATTRIBUTE_NORMAL, /* normal file */
- NULL); /* no attr. template */
-
- if (f == INVALID_HANDLE_VALUE)
- {
- debug_printf ("couldn't open file '%s', %E", name);
- return false;
- }
-
- /* This only supports files up to about 4 billion bytes in
- size. I am making the bold assumption that this is big
- enough for this feature */
- size = GetFileSize (f, NULL);
- if (size == 0xFFFFFFFF)
- {
- CloseHandle (f);
- debug_printf ("couldn't get file size for '%s', %E", name);
- return false;
- }
-
- int new_size = strlen (cmd) + size + 2;
- char *tmp = (char *) malloc (new_size);
- if (!tmp)
- {
- CloseHandle (f);
- debug_printf ("malloc failed, %E");
- return false;
- }
-
- /* realloc passed as it should */
- DWORD rf_read;
- BOOL rf_result;
- rf_result = ReadFile (f, tmp, size, &rf_read, NULL);
- CloseHandle (f);
- if (!rf_result || (rf_read != size))
- {
- free (tmp);
- debug_printf ("ReadFile failed, %E");
- return false;
- }
-
- tmp[size++] = ' ';
- strcpy (tmp + size, cmd);
- cmd = tmp;
- return true;
-}
-
-static inline int
-isquote (char c)
-{
- char ch = c;
- return ch == '"' || ch == '\'';
-}
-
-/* Step over a run of characters delimited by quotes */
-static /*__inline*/ char *
-quoted (char *cmd, int winshell)
-{
- char *p;
- char quote = *cmd;
-
- if (!winshell)
- {
- char *p;
- strcpy (cmd, cmd + 1);
- if (*(p = strchrnul (cmd, quote)))
- strcpy (p, p + 1);
- return p;
- }
-
- const char *s = quote == '\'' ? "'" : "\\\"";
- /* This must have been run from a Windows shell, so preserve
- quotes for globify to play with later. */
- while (*cmd && *++cmd)
- if ((p = strpbrk (cmd, s)) == NULL)
- {
- cmd = strchr (cmd, '\0'); // no closing quote
- break;
- }
- else if (*p == '\\')
- cmd = ++p;
- else if (quote == '"' && p[1] == '"')
- {
- *p = '\\';
- cmd = ++p; // a quoted quote
- }
- else
- {
- cmd = p + 1; // point to after end
- break;
- }
- return cmd;
-}
-
-/* Perform a glob on word if it contains wildcard characters.
- Also quote every character between quotes to force glob to
- treat the characters literally. */
-
-/* Either X:[...] or \\server\[...] */
-#define is_dos_path(s) (isdrive(s) \
- || ((s)[0] == '\\' \
- && (s)[1] == '\\' \
- && isalpha ((s)[2]) \
- && strchr ((s) + 3, '\\')))
-
-static int __stdcall
-globify (char *word, char **&argv, int &argc, int &argvlen)
-{
- if (*word != '~' && strpbrk (word, "?*[\"\'(){}") == NULL)
- return 0;
-
- int n = 0;
- char *p, *s;
- int dos_spec = is_dos_path (word);
- if (!dos_spec && isquote (*word) && word[1] && word[2])
- dos_spec = is_dos_path (word + 1);
-
- /* We'll need more space if there are quoting characters in
- word. If that is the case, doubling the size of the
- string should provide more than enough space. */
- if (strpbrk (word, "'\""))
- n = strlen (word);
- char pattern[strlen (word) + ((dos_spec + 1) * n) + 1];
-
- /* Fill pattern with characters from word, quoting any
- characters found within quotes. */
- for (p = pattern, s = word; *s != '\000'; s++, p++)
- if (!isquote (*s))
- {
- if (dos_spec && *s == '\\')
- *p++ = '\\';
- *p = *s;
- }
- else
- {
- char quote = *s;
- while (*++s && *s != quote)
- {
- if (dos_spec || *s != '\\')
- /* nothing */;
- else if (s[1] == quote || s[1] == '\\')
- s++;
- *p++ = '\\';
- size_t cnt = isascii (*s) ? 1 : mbtowc (NULL, s, MB_CUR_MAX);
- if (cnt <= 1 || cnt == (size_t)-1)
- *p++ = *s;
- else
- {
- --s;
- while (cnt-- > 0)
- *p++ = *++s;
- }
- }
- if (*s == quote)
- p--;
- if (*s == '\0')
- break;
- }
-
- *p = '\0';
-
- glob_t gl;
- gl.gl_offs = 0;
-
- /* Attempt to match the argument. Return just word (minus quoting) if no match. */
- if (glob (pattern, GLOB_TILDE | GLOB_NOCHECK | GLOB_BRACE | GLOB_QUOTE, NULL, &gl) || !gl.gl_pathc)
- return 0;
-
- /* Allocate enough space in argv for the matched filenames. */
- n = argc;
- if ((argc += gl.gl_pathc) > argvlen)
- {
- argvlen = argc + 10;
- argv = (char **) realloc (argv, (1 + argvlen) * sizeof (argv[0]));
- }
-
- /* Copy the matched filenames to argv. */
- char **gv = gl.gl_pathv;
- char **av = argv + n;
- while (*gv)
- {
- debug_printf ("argv[%d] = '%s'", n++, *gv);
- *av++ = *gv++;
- }
-
- /* Clean up after glob. */
- free (gl.gl_pathv);
- return 1;
-}
-
-/* Build argv, argc from string passed from Windows. */
-
-static void __stdcall
-build_argv (char *cmd, char **&argv, int &argc, int winshell)
-{
- int argvlen = 0;
- int nesting = 0; // monitor "nesting" from insert_file
-
- argc = 0;
- argvlen = 0;
- argv = NULL;
-
- /* Scan command line until there is nothing left. */
- while (*cmd)
- {
- /* Ignore spaces */
- if (issep (*cmd))
- {
- cmd++;
- continue;
- }
-
- /* Found the beginning of an argument. */
- char *word = cmd;
- char *sawquote = NULL;
- while (*cmd)
- {
- if (*cmd != '"' && (!winshell || *cmd != '\''))
- cmd++; // Skip over this character
- else
- /* Skip over characters until the closing quote */
- {
- sawquote = cmd;
- /* Handle quoting. Only strip off quotes if the parent is
- a Cygwin process, or if the word starts with a '@'.
- In this case, the insert_file function needs an unquoted
- DOS filename and globbing isn't performed anyway. */
- cmd = quoted (cmd, winshell && argc > 0 && *word != '@');
- }
- if (issep (*cmd)) // End of argument if space
- break;
- }
- if (*cmd)
- *cmd++ = '\0'; // Terminate `word'
-
- /* Possibly look for @file construction assuming that this isn't
- the very first argument and the @ wasn't quoted */
- if (argc && sawquote != word && *word == '@')
- {
- if (++nesting > MAX_AT_FILE_LEVEL)
- api_fatal ("Too many levels of nesting for %s", word);
- if (insert_file (word, cmd))
- continue; // There's new stuff in cmd now
- }
-
- /* See if we need to allocate more space for argv */
- if (argc >= argvlen)
- {
- argvlen = argc + 10;
- argv = (char **) realloc (argv, (1 + argvlen) * sizeof (argv[0]));
- }
-
- /* Add word to argv file after (optional) wildcard expansion. */
- if (!winshell || !argc || !globify (word, argv, argc, argvlen))
- {
- debug_printf ("argv[%d] = '%s'", argc, word);
- argv[argc++] = word;
- }
- }
-
- if (argv)
- argv[argc] = NULL;
-
- debug_printf ("argc %d", argc);
-}
-
-/* sanity and sync check */
-void __stdcall
-check_sanity_and_sync (per_process *p)
-{
- /* Sanity check to make sure developers didn't change the per_process */
- /* struct without updating SIZEOF_PER_PROCESS [it makes them think twice */
- /* about changing it]. */
- if (sizeof (per_process) != SIZEOF_PER_PROCESS)
- api_fatal ("per_process sanity check failed");
-
- /* Make sure that the app and the dll are in sync. */
-
- /* Complain if older than last incompatible change */
- if (p->dll_major < CYGWIN_VERSION_DLL_EPOCH)
- api_fatal ("cygwin DLL and APP are out of sync -- DLL version mismatch %u < %u",
- p->dll_major, CYGWIN_VERSION_DLL_EPOCH);
-
- /* magic_biscuit != 0 if using the old style version numbering scheme. */
- if (p->magic_biscuit != SIZEOF_PER_PROCESS)
- api_fatal ("Incompatible cygwin .dll -- incompatible per_process info %u != %u",
- p->magic_biscuit, SIZEOF_PER_PROCESS);
-
- /* Complain if incompatible API changes made */
- if (p->api_major > cygwin_version.api_major)
- api_fatal ("cygwin DLL and APP are out of sync -- API version mismatch %u > %u",
- p->api_major, cygwin_version.api_major);
-
-#ifndef __x86_64__
- /* This is a kludge to work around a version of _cygwin_common_crt0
- which overwrote the cxx_malloc field with the local DLL copy.
- Hilarity ensues if the DLL is not loaded while the process
- is forking. */
- __cygwin_user_data.cxx_malloc = &default_cygwin_cxx_malloc;
-#endif
-}
-
-child_info NO_COPY *child_proc_info;
-
-#define CYGWIN_GUARD (PAGE_READWRITE | PAGE_GUARD)
-
-void
-child_info_fork::alloc_stack_hard_way (volatile char *b)
-{
- void *stack_ptr;
- SIZE_T stacksize;
-
- /* First check if the requested stack area is part of the user heap
- or part of a mmapped region. If so, we have been started from a
- pthread with an application-provided stack, and the stack has just
- to be used as is. */
- if ((stacktop >= cygheap->user_heap.base
- && stackbottom <= cygheap->user_heap.max)
- || is_mmapped_region ((caddr_t) stacktop, (caddr_t) stackbottom))
- return;
- /* First, try to reserve the entire stack. */
- stacksize = (SIZE_T) stackbottom - (SIZE_T) stackaddr;
- if (!VirtualAlloc (stackaddr, stacksize, MEM_RESERVE, PAGE_NOACCESS))
- {
- PTEB teb = NtCurrentTeb ();
- api_fatal ("fork: can't reserve memory for parent stack "
- "%p - %p, (child has %p - %p), %E",
- stackaddr, stackbottom, teb->DeallocationStack, _tlsbase);
- }
- stacksize = (SIZE_T) stackbottom - (SIZE_T) stacktop;
- stack_ptr = VirtualAlloc (stacktop, stacksize, MEM_COMMIT, PAGE_READWRITE);
- if (!stack_ptr)
- abort ("can't commit memory for stack %p(%ly), %E", stacktop, stacksize);
- if (guardsize != (size_t) -1)
- {
- /* Allocate PAGE_GUARD page if it still fits. */
- if (stack_ptr > stackaddr)
- {
- stack_ptr = (void *) ((LPBYTE) stack_ptr
- - wincap.page_size ());
- if (!VirtualAlloc (stack_ptr, wincap.page_size (), MEM_COMMIT,
- CYGWIN_GUARD))
- api_fatal ("fork: couldn't allocate new stack guard page %p, %E",
- stack_ptr);
- }
- /* Allocate POSIX guard pages. */
- if (guardsize > 0)
- VirtualAlloc (stackaddr, guardsize, MEM_COMMIT, PAGE_NOACCESS);
- }
- b[0] = '\0';
-}
-
-void *getstack (void *) __attribute__ ((noinline));
-volatile char *
-getstack (volatile char * volatile p)
-{
- *p ^= 1;
- *p ^= 1;
- return p - 4096;
-}
-
-/* extend the stack prior to fork longjmp */
-
-void
-child_info_fork::alloc_stack ()
-{
- volatile char * volatile stackp;
-#ifdef __x86_64__
- __asm__ volatile ("movq %%rsp,%0": "=r" (stackp));
-#else
- __asm__ volatile ("movl %%esp,%0": "=r" (stackp));
-#endif
- /* Make sure not to try a hard allocation if we have been forked off from
- the main thread of a Cygwin process which has been started from a 64 bit
- parent. In that case the _tlsbase of the forked child is not the same
- as the _tlsbase of the parent (== stackbottom), but only because the
- stack of the parent has been slightly rearranged. See comment in
- wow64_revert_to_original_stack for details. We check here if the
- parent stack fits into the child stack. */
- if (_tlsbase != stackbottom
- && (!wincap.is_wow64 ()
- || stacktop < (char *) NtCurrentTeb ()->DeallocationStack
- || stackbottom > _tlsbase))
- alloc_stack_hard_way (stackp);
- else
- {
- char *st = (char *) stacktop;
- while (_tlstop > st)
- stackp = getstack (stackp);
- stackaddr = 0;
- /* This only affects forked children of a process started from a native
- 64 bit process, but it doesn't hurt to do it unconditionally. Fix
- StackBase in the child to be the same as in the parent, so that the
- computation of _my_tls is correct. */
- _tlsbase = (PVOID) stackbottom;
- }
-}
-
-extern "C" void
-break_here ()
-{
- static int NO_COPY sent_break;
- if (!sent_break++)
- DebugBreak ();
- debug_printf ("break here");
-}
-
-static void
-initial_env ()
-{
- if (GetEnvironmentVariableA ("CYGWIN_TESTING", NULL, 0))
- _cygwin_testing = 1;
-
-#ifdef DEBUGGING
- char buf[NT_MAX_PATH];
- if (GetEnvironmentVariableA ("CYGWIN_DEBUG", buf, sizeof (buf) - 1))
- {
- char buf1[NT_MAX_PATH];
- GetModuleFileName (NULL, buf1, NT_MAX_PATH);
- char *p = strpbrk (buf, ":=");
- if (!p)
- p = (char *) "gdb.exe -nw";
- else
- *p++ = '\0';
- if (strcasestr (buf1, buf))
- {
- error_start_init (p);
- jit_debug = true;
- try_to_debug ();
- console_printf ("*** Sending Break. gdb may issue spurious SIGTRAP message.\n");
- break_here ();
- }
- }
-#endif
-}
-
-child_info *
-get_cygwin_startup_info ()
-{
- STARTUPINFO si;
-
- GetStartupInfo (&si);
- child_info *res = (child_info *) si.lpReserved2;
-
- if (si.cbReserved2 < EXEC_MAGIC_SIZE || !res
- || res->intro != PROC_MAGIC_GENERIC || res->magic != CHILD_INFO_MAGIC)
- {
- strace.activate (false);
- res = NULL;
- }
- else
- {
- if ((res->intro & OPROC_MAGIC_MASK) == OPROC_MAGIC_GENERIC)
- multiple_cygwin_problem ("proc intro", res->intro, 0);
- else if (res->cygheap != (void *) &_cygheap_start)
- multiple_cygwin_problem ("cygheap base", (uintptr_t) res->cygheap,
- (uintptr_t) &_cygheap_start);
-
- unsigned should_be_cb = 0;
- switch (res->type)
- {
- case _CH_FORK:
- in_forkee = true;
- should_be_cb = sizeof (child_info_fork);
- /* fall through */;
- case _CH_SPAWN:
- case _CH_EXEC:
- if (!should_be_cb)
- should_be_cb = sizeof (child_info_spawn);
- if (should_be_cb != res->cb)
- multiple_cygwin_problem ("proc size", res->cb, should_be_cb);
- else if (sizeof (fhandler_union) != res->fhandler_union_cb)
- multiple_cygwin_problem ("fhandler size", res->fhandler_union_cb,
- sizeof (fhandler_union));
- if (res->isstraced ())
- {
- while (!being_debugged ())
- yield ();
- strace.activate (res->type == _CH_FORK);
- }
- break;
- default:
- system_printf ("unknown exec type %u", res->type);
- /* intentionally fall through */
- case _CH_WHOOPS:
- res = NULL;
- break;
- }
- }
-
- return res;
-}
-
-#ifdef __x86_64__
-#define dll_data_start &__data_start__
-#define dll_data_end &__data_end__
-#define dll_bss_start &__bss_start__
-#define dll_bss_end &__bss_end__
-#else
-#define dll_data_start &_data_start__
-#define dll_data_end &_data_end__
-#define dll_bss_start &_bss_start__
-#define dll_bss_end &_bss_end__
-#endif
-
-void
-child_info_fork::handle_fork ()
-{
- cygheap_fixup_in_child (false);
- memory_init ();
- myself.thisproc (NULL);
- myself->uid = cygheap->user.real_uid;
- myself->gid = cygheap->user.real_gid;
-
- child_copy (parent, false,
- "dll data", dll_data_start, dll_data_end,
- "dll bss", dll_bss_start, dll_bss_end,
- "user heap", cygheap->user_heap.base, cygheap->user_heap.ptr,
- NULL);
-
- /* If my_wr_proc_pipe != NULL then it's a leftover handle from a previously
- forked process. Close it now or suffer confusion with the parent of our
- parent. */
- if (my_wr_proc_pipe)
- ForceCloseHandle1 (my_wr_proc_pipe, wr_proc_pipe);
-
- /* Setup our write end of the process pipe. Clear the one in the structure.
- The destructor should never be called for this but, it can't hurt to be
- safe. */
- my_wr_proc_pipe = wr_proc_pipe;
- rd_proc_pipe = wr_proc_pipe = NULL;
- /* Do the relocations here. These will actually likely be overwritten by the
- below child_copy but we do them here in case there is a read-only section
- which does not get copied by fork. */
- _pei386_runtime_relocator (user_data);
-
- /* step 2 now that the dll has its heap filled in, we can fill in the
- user's data and bss since user_data is now filled out. */
- child_copy (parent, false,
- "data", user_data->data_start, user_data->data_end,
- "bss", user_data->bss_start, user_data->bss_end,
- NULL);
-
- if (fixup_mmaps_after_fork (parent))
- api_fatal ("recreate_mmaps_after_fork_failed");
-}
-
-bool
-child_info_spawn::get_parent_handle ()
-{
- parent = OpenProcess (PROCESS_VM_READ, false, parent_winpid);
- moreinfo->myself_pinfo = NULL;
- return !!parent;
-}
-
-void
-child_info_spawn::handle_spawn ()
-{
- extern void fixup_lockf_after_exec (bool);
- HANDLE h;
- if (!dynamically_loaded || get_parent_handle ())
- {
- cygheap_fixup_in_child (true);
- memory_init ();
- }
- if (!moreinfo->myself_pinfo ||
- !DuplicateHandle (GetCurrentProcess (), moreinfo->myself_pinfo,
- GetCurrentProcess (), &h, 0,
- FALSE, DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE))
- h = NULL;
-
- /* Setup our write end of the process pipe. Clear the one in the structure.
- The destructor should never be called for this but, it can't hurt to be
- safe. */
- my_wr_proc_pipe = wr_proc_pipe;
- rd_proc_pipe = wr_proc_pipe = NULL;
-
- myself.thisproc (h);
- __argc = moreinfo->argc;
- __argv = moreinfo->argv;
- envp = moreinfo->envp;
- envc = moreinfo->envc;
- if (!dynamically_loaded)
- cygheap->fdtab.fixup_after_exec ();
- if (__stdin >= 0)
- cygheap->fdtab.move_fd (__stdin, 0);
- if (__stdout >= 0)
- cygheap->fdtab.move_fd (__stdout, 1);
- cygheap->user.groups.clear_supp ();
-
- /* If we're execing we may have "inherited" a list of children forked by the
- previous process executing under this pid. Reattach them here so that we
- can wait for them. */
- if (type == _CH_EXEC)
- reattach_children ();
-
- ready (true);
-
- /* Keep pointer to parent open if we've execed so that pid will not be reused.
- Otherwise, we no longer need this handle so close it.
- Need to do this after debug_fixup_after_fork_exec or DEBUGGING handling of
- handles might get confused. */
- if (type != _CH_EXEC && child_proc_info->parent)
- {
- CloseHandle (child_proc_info->parent);
- child_proc_info->parent = NULL;
- }
-
- signal_fixup_after_exec ();
- fixup_lockf_after_exec (type == _CH_EXEC);
-}
-
-/* Retrieve and store system directory for later use. Note that the
- directory is stored with a trailing backslash! */
-static void
-init_windows_system_directory ()
-{
- if (!windows_system_directory_length)
- {
- windows_system_directory_length =
- GetSystemDirectoryW (windows_system_directory, MAX_PATH);
- if (windows_system_directory_length == 0)
- api_fatal ("can't find windows system directory");
- windows_system_directory[windows_system_directory_length++] = L'\\';
- windows_system_directory[windows_system_directory_length] = L'\0';
-#ifndef __x86_64__
- system_wow64_directory_length =
- GetSystemWow64DirectoryW (system_wow64_directory, MAX_PATH);
- if (system_wow64_directory_length)
- {
- system_wow64_directory[system_wow64_directory_length++] = L'\\';
- system_wow64_directory[system_wow64_directory_length] = L'\0';
- }
-#endif /* !__x86_64__ */
- }
-}
-
-void
-dll_crt0_0 ()
-{
- wincap.init ();
- child_proc_info = get_cygwin_startup_info ();
- init_windows_system_directory ();
- initial_env ();
-
- SetErrorMode (SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX);
-
- lock_process::init ();
- _impure_ptr = _GLOBAL_REENT;
- _impure_ptr->_stdin = &_impure_ptr->__sf[0];
- _impure_ptr->_stdout = &_impure_ptr->__sf[1];
- _impure_ptr->_stderr = &_impure_ptr->__sf[2];
- _impure_ptr->_current_locale = "C";
- user_data->impure_ptr = _impure_ptr;
- user_data->impure_ptr_ptr = &_impure_ptr;
-
- DuplicateHandle (GetCurrentProcess (), GetCurrentThread (),
- GetCurrentProcess (), &hMainThread,
- 0, false, DUPLICATE_SAME_ACCESS);
-
- NtOpenProcessToken (NtCurrentProcess (), MAXIMUM_ALLOWED, &hProcToken);
- set_cygwin_privileges (hProcToken);
-
- device::init ();
- do_global_ctors (&__CTOR_LIST__, 1);
- cygthread::init ();
-
- if (!child_proc_info)
- {
- setup_cygheap ();
- memory_init ();
-#ifndef __x86_64__
- /* WOW64 process on XP/64 or Server 2003/64? Check if we have been
- started from 64 bit process and if our stack is at an unusual
- address. Set wow64_needs_stack_adjustment if so. Problem
- description in wow64_test_for_64bit_parent. */
- if (wincap.wow64_has_secondary_stack ())
- wow64_needs_stack_adjustment = wow64_test_for_64bit_parent ();
-#endif /* !__x86_64__ */
- }
- else
- {
- cygwin_user_h = child_proc_info->user_h;
- switch (child_proc_info->type)
- {
- case _CH_FORK:
- fork_info->handle_fork ();
- break;
- case _CH_SPAWN:
- case _CH_EXEC:
- spawn_info->handle_spawn ();
- break;
- }
- }
-
- user_data->threadinterface->Init ();
-
- _main_tls = &_my_tls;
-
- /* Initialize signal processing here, early, in the hopes that the creation
- of a thread early in the process will cause more predictability in memory
- layout for the main thread. */
- if (!dynamically_loaded)
- sigproc_init ();
-
- debug_printf ("finished dll_crt0_0 initialization");
-}
-
-static inline void
-main_thread_sinit ()
-{
- __sinit (_impure_ptr);
- /* At this point, _impure_ptr == _global_impure_ptr == _GLOBAL_REENT is
- initialized, but _REENT == _my_tls.local_clib doesn't know about it.
- It has been copied over from _GLOBAL_REENT in _cygtls::init_thread
- *before* the initialization took place.
-
- As soon as the main thread calls a stdio function, this would be
- rectified. But if another thread calls a stdio function on
- stdin/out/err before the main thread does, all the required
- initialization of stdin/out/err will be done, but _REENT->__sdidinit
- is *still* 0. This in turn will result in a call to __sinit in the
- wrong spot. The input or output buffer will be NULLed and nothing is
- read or written in the first stdio function call in the main thread.
-
- To fix this issue we have to copy over the relevant part of _GLOBAL_REENT
- to _REENT here again. */
- _REENT->__sdidinit = -1;
- _REENT->__cleanup = _GLOBAL_REENT->__cleanup;
-}
-
-/* Take over from libc's crt0.o and start the application. Note the
- various special cases when Cygwin DLL is being runtime loaded (as
- opposed to being link-time loaded by Cygwin apps) from a non
- cygwin app via LoadLibrary. */
-void
-dll_crt0_1 (void *)
-{
- extern void initial_setlocale ();
-
- _my_tls.incyg++;
- /* Inherit "parent" exec'ed process sigmask */
- if (spawn_info && !in_forkee)
- _my_tls.sigmask = spawn_info->moreinfo->sigmask;
-
- if (dynamically_loaded)
- sigproc_init ();
-
- check_sanity_and_sync (user_data);
-
- /* Initialize malloc and then call user_shared_initialize since it relies
- on a functioning malloc and it's possible that the user's program may
- have overridden malloc. We only know about that at this stage,
- unfortunately. */
- malloc_init ();
- user_shared->initialize ();
-
-#ifdef CYGHEAP_DEBUG
- int i = 0;
- const int n = 2 * 1024 * 1024;
- while (i--)
- {
- void *p = cmalloc (HEAP_STR, n);
- if (p)
- small_printf ("cmalloc returns %p\n", cmalloc (HEAP_STR, n));
- else
- {
- small_printf ("total allocated %y\n", (i - 1) * n);
- break;
- }
- }
-#endif
-
- ProtectHandle (hMainThread);
-
- cygheap->cwd.init ();
-
- /* Initialize pthread mainthread when not forked and it is safe to call new,
- otherwise it is reinitalized in fixup_after_fork */
- if (!in_forkee)
- {
- pthread::init_mainthread ();
- _pei386_runtime_relocator (user_data);
- }
-
-#ifdef DEBUGGING
- strace.microseconds ();
-#endif
-
- /* Initialize debug muto, if DLL is built with --enable-debugging.
- Need to do this before any helper threads start. */
- debug_init ();
-
-#ifdef NEWVFORK
- cygheap->fdtab.vfork_child_fixup ();
- main_vfork = vfork_storage.create ();
-#endif
-
- cygbench ("pre-forkee");
- if (in_forkee)
- {
- /* If we've played with the stack, stacksize != 0. That means that
- fork() was invoked from other than the main thread. Make sure that
- frame pointer is referencing the new stack so that the OS knows what
- to do when it needs to increase the size of the stack.
-
- NOTE: Don't do anything that involves the stack until you've completed
- this step. */
- if (fork_info->stackaddr)
- {
- _tlsbase = (PVOID) fork_info->stackbottom;
- _tlstop = (PVOID) fork_info->stacktop;
- }
-
- /* Not resetting _my_tls.incyg here because presumably fork will overwrite
- it with the value of the forker and all will be good. */
- longjmp (fork_info->jmp, true);
- }
-
- main_thread_sinit ();
-
-#ifdef DEBUGGING
- {
- extern void fork_init ();
- fork_init ();
- }
-#endif
- pinfo_init (envp, envc);
- strace.dll_info ();
-
- /* Allocate cygheap->fdtab */
- dtable_init ();
-
- /* Set internal locale to the environment settings. */
- initial_setlocale ();
-
- uinfo_init (); /* initialize user info */
-
- /* Connect to tty. */
- tty::init_session ();
-
- if (!__argc)
- {
- PWCHAR wline = GetCommandLineW ();
- size_t size = sys_wcstombs (NULL, 0, wline);
- char *line = (char *) alloca (size);
- sys_wcstombs (line, size, wline);
-
- /* Scan the command line and build argv. Expand wildcards if not
- called from another cygwin process. */
- build_argv (line, __argv, __argc,
- NOTSTATE (myself, PID_CYGPARENT) && allow_glob);
-
- /* Convert argv[0] to posix rules if it's currently blatantly
- win32 style. */
- if ((strchr (__argv[0], ':')) || (strchr (__argv[0], '\\')))
- {
- char *new_argv0 = (char *) malloc (NT_MAX_PATH);
- cygwin_conv_path (CCP_WIN_A_TO_POSIX | CCP_RELATIVE, __argv[0],
- new_argv0, NT_MAX_PATH);
- __argv[0] = (char *) realloc (new_argv0, strlen (new_argv0) + 1);
- }
- }
-
- __argc_safe = __argc;
- if (user_data->premain[0])
- for (unsigned int i = 0; i < PREMAIN_LEN / 2; i++)
- user_data->premain[i] (__argc, __argv, user_data);
-
- /* Set up standard fds in file descriptor table. */
- cygheap->fdtab.stdio_init ();
-
- /* Set up __progname for getopt error call. */
- if (__argv[0] && (__progname = strrchr (__argv[0], '/')))
- ++__progname;
- else
- __progname = __argv[0];
- program_invocation_name = __argv[0];
- program_invocation_short_name = __progname;
- if (__progname)
- {
- char *cp = strchr (__progname, '\0') - 4;
- if (cp > __progname && ascii_strcasematch (cp, ".exe"))
- *cp = '\0';
- }
-
- (void) xdr_set_vprintf (&cygxdr_vwarnx);
- cygwin_finished_initializing = true;
- /* Call init of loaded dlls. */
- dlls.init ();
-
- /* Execute any specified "premain" functions */
- if (user_data->premain[PREMAIN_LEN / 2])
- for (unsigned int i = PREMAIN_LEN / 2; i < PREMAIN_LEN; i++)
- user_data->premain[i] (__argc, __argv, user_data);
-
- set_errno (0);
-
- if (dynamically_loaded)
- {
- _setlocale_r (_REENT, LC_CTYPE, "C");
- return;
- }
-
- /* Disable case-insensitive globbing */
- ignore_case_with_glob = false;
-
- MALLOC_CHECK;
- cygbench (__progname);
-
- ld_preload ();
- /* Per POSIX set the default application locale back to "C". */
- _setlocale_r (_REENT, LC_CTYPE, "C");
-
- if (!user_data->main)
- {
- /* Handle any signals which may have arrived */
- _my_tls.call_signal_handler ();
- _my_tls.incyg--; /* Not in Cygwin anymore */
- }
- else
- {
- /* Create a copy of Cygwin's version of __argv so that, if the user makes
- a change to an element of argv[] it does not affect Cygwin's argv.
- Changing the the contents of what argv[n] points to will still
- affect Cygwin. This is similar (but not exactly like) Linux. */
- char *newargv[__argc + 1];
- char **nav = newargv;
- char **oav = __argv;
- while ((*nav++ = *oav++) != NULL)
- continue;
- /* Handle any signals which may have arrived */
- sig_dispatch_pending (false);
- _my_tls.call_signal_handler ();
- _my_tls.incyg--; /* Not in Cygwin anymore */
-#ifdef __x86_64__
- cygwin_exit (user_data->main (__argc, newargv, __cygwin_environ));
-#else
- cygwin_exit (user_data->main (__argc, newargv, *user_data->envptr));
-#endif
- }
- __asm__ (" \n\
- .global _cygwin_exit_return \n\
- .global __cygwin_exit_return \n\
-_cygwin_exit_return: \n\
-__cygwin_exit_return: \n\
- nop \n\
-");
-}
-
-extern "C" void __stdcall
-_dll_crt0 ()
-{
-#ifndef __x86_64__
- /* Handle WOW64 process on XP/2K3 which has been started from native 64 bit
- process. See comment in wow64_test_for_64bit_parent for a full problem
- description. */
- if (wow64_needs_stack_adjustment && !dynamically_loaded)
- {
- /* Must be static since it's referenced after the stack and frame
- pointer registers have been changed. */
- static PVOID allocationbase = 0;
-
- /* Check if we just move the stack. If so, wow64_revert_to_original_stack
- returns a non-NULL, 16 byte aligned address. See comments in
- wow64_revert_to_original_stack for the gory details. */
- PVOID stackaddr = wow64_revert_to_original_stack (allocationbase);
- if (stackaddr)
- {
- /* 2nd half of the stack move. Set stack pointer to new address.
- Set frame pointer to 0. */
- __asm__ ("\n\
- movl %[ADDR], %%esp \n\
- xorl %%ebp, %%ebp \n"
- : : [ADDR] "r" (stackaddr));
- /* Now we're back on the original stack. Free up space taken by the
- former main thread stack and set DeallocationStack correctly. */
- VirtualFree (NtCurrentTeb ()->DeallocationStack, 0, MEM_RELEASE);
- NtCurrentTeb ()->DeallocationStack = allocationbase;
- }
- else
- /* Fall back to respawn if wow64_revert_to_original_stack fails. */
- wow64_respawn_process ();
- }
-#endif /* !__x86_64__ */
- _feinitialise ();
-#ifndef __x86_64__
- main_environ = user_data->envptr;
-#endif
- if (in_forkee)
- {
- fork_info->alloc_stack ();
- _main_tls = &_my_tls;
- }
-
- _main_tls->call ((DWORD (*) (void *, void *)) dll_crt0_1, NULL);
-}
-
-void
-dll_crt0 (per_process *uptr)
-{
- /* Set the local copy of the pointer into the user space. */
- if (!in_forkee && uptr && uptr != user_data)
- {
- memcpy (user_data, uptr, per_process_overwrite);
- *(user_data->impure_ptr_ptr) = _GLOBAL_REENT;
- }
- _dll_crt0 ();
-}
-
-/* This must be called by anyone who uses LoadLibrary to load cygwin1.dll.
- You must have CYGTLS_PADSIZE bytes reserved at the bottom of the stack
- calling this function, and that storage must not be overwritten until you
- unload cygwin1.dll, as it is used for _my_tls. It is best to load
- cygwin1.dll before spawning any additional threads in your process.
-
- See winsup/testsuite/cygload for an example of how to use cygwin1.dll
- from MSVC and non-cygwin MinGW applications. */
-extern "C" void
-cygwin_dll_init ()
-{
-#ifndef __x86_64__
- static char **envp;
-#endif
- static int _fmode;
-
- user_data->magic_biscuit = sizeof (per_process);
-
-#ifndef __x86_64__
- user_data->envptr = &envp;
-#endif
- user_data->fmode_ptr = &_fmode;
-
- _dll_crt0 ();
-}
-
-extern "C" void
-__main (void)
-{
- /* Ordering is critical here. DLL ctors have already been
- run as they were being loaded, so we should stack the
- queued call to DLL dtors now. */
- atexit (dll_global_dtors);
- do_global_ctors (user_data->ctors, false);
- /* Now we have run global ctors, register their dtors.
-
- At exit, global dtors will run first, so the app can still
- use shared library functions while terminating; then the
- DLLs will be destroyed; finally newlib will shut down stdio
- and terminate itself. */
- atexit (do_global_dtors);
- sig_dispatch_pending (true);
-}
-
-void __reg1
-do_exit (int status)
-{
- syscall_printf ("do_exit (%d), exit_state %d", status, exit_state);
-
-#ifdef NEWVFORK
- vfork_save *vf = vfork_storage.val ();
- if (vf != NULL && vf->pid < 0)
- {
- exit_state = ES_NOT_EXITING;
- vf->restore_exit (status);
- }
-#endif
-
- lock_process until_exit (true);
-
- if (exit_state < ES_EVENTS_TERMINATE)
- exit_state = ES_EVENTS_TERMINATE;
-
- if (exit_state < ES_SIGNAL)
- {
- exit_state = ES_SIGNAL;
- signal (SIGCHLD, SIG_IGN);
- signal (SIGHUP, SIG_IGN);
- signal (SIGINT, SIG_IGN);
- signal (SIGQUIT, SIG_IGN);
- }
-
- if (exit_state < ES_CLOSEALL)
- {
- exit_state = ES_CLOSEALL;
- close_all_files ();
- }
-
- UINT n = (UINT) status;
- if (exit_state < ES_THREADTERM)
- {
- exit_state = ES_THREADTERM;
- cygthread::terminate ();
- }
-
- myself->stopsig = 0;
-
- if (exit_state < ES_HUP_PGRP)
- {
- exit_state = ES_HUP_PGRP;
- /* Kill orphaned children on group leader exit */
- if (myself->has_pgid_children && myself->pid == myself->pgid)
- {
- siginfo_t si = {0};
- si.si_signo = -SIGHUP;
- si.si_code = SI_KERNEL;
- sigproc_printf ("%u == pgrp %u, send SIG{HUP,CONT} to stopped children",
- myself->pid, myself->pgid);
- kill_pgrp (myself->pgid, si);
- }
- }
-
- if (exit_state < ES_HUP_SID)
- {
- exit_state = ES_HUP_SID;
- /* Kill the foreground process group on session leader exit */
- if (getpgrp () > 0 && myself->pid == myself->sid && real_tty_attached (myself))
- {
- tty *tp = cygwin_shared->tty[myself->ctty];
- sigproc_printf ("%u == sid %u, send SIGHUP to children",
- myself->pid, myself->sid);
-
- /* CGF FIXME: This can't be right. */
- if (tp->getsid () == myself->sid)
- tp->kill_pgrp (SIGHUP);
- }
-
- }
-
- myself.exit (n);
-}
-
-/* When introducing support for -fuse-cxa-atexit with Cygwin 1.7.32 and
- GCC 4.8.3-3, we defined __dso_value as &ImageBase. This supposedly allowed
- a reproducible value which could also be easily evaluated in cygwin_atexit.
- However, when building C++ applications with -fuse-cxa-atexit, G++ creates
- calls to __cxa_atexit using the *address* of __dso_handle as DSO handle.
-
- So what we do here is this: A call to __cxa_atexit from the application
- actually calls cygwin__cxa_atexit. From dso_handle (which is either
- &__dso_handle, or __dso_handle == ImageBase or NULL) we fetch the dll
- structure of the DLL. Then use dll::handle == ImageBase as the actual DSO
- handle value in calls to __cxa_atexit and __cxa_finalize.
- Thus, __cxa_atexit becomes entirely independent of the incoming value of
- dso_handle, as long as it's *some* pointer into the DSO's address space. */
-extern "C" int
-cygwin__cxa_atexit (void (*fn)(void *), void *obj, void *dso_handle)
-{
- dll *d = dso_handle ? dlls.find (dso_handle) : NULL;
- return __cxa_atexit (fn, obj, d ? d->handle : NULL);
-}
-
-/* This function is only called for applications built with Cygwin versions
- up to API 0.279. Starting with API 0.280 (Cygwin 1.7.33/1.8.6-2), atexit
- is a statically linked function inside of libcygwin.a. The reason is that
- the old method to fetch the caller return address is unreliable given GCCs
- ability to perform tail call elimination. For the details, see the below
- comment. The atexit replacement is defined in libcygwin.a to allow reliable
- access to the correct DSO handle. */
-extern "C" int
-cygwin_atexit (void (*fn) (void))
-{
- int res;
-
- dll *d = dlls.find ((void *) _my_tls.retaddr ());
-#ifdef __x86_64__
- /* x86_64 DLLs created with GCC 4.8.3-3 register __gcc_deregister_frame
- as atexit function using a call to atexit, rather than __cxa_atexit.
- Due to GCC's tail call optimizing, cygwin_atexit doesn't get the correct
- return address on the stack. As a result it fails to get the HMODULE of
- the caller and thus calls atexit rather than __cxa_atexit. Then, if the
- module gets dlclosed, __cxa_finalize (called from dll_list::detach) can't
- remove __gcc_deregister_frame from the atexit function chain. So at
- process exit, __call_exitprocs calls __gcc_deregister_frame while the
- module is already unloaded and the __gcc_deregister_frame function not
- available ==> SEGV.
-
- This also occurs for other functions.
-
- Workaround: If dlls.find fails, try to find the dll entry of the DLL
- containing fn. If that works, proceed by calling __cxa_atexit, otherwise
- call atexit.
-
- This *should* be sufficiently safe. Ultimately, new applications will
- use the statically linked atexit function though, as outlined above. */
- if (!d)
- d = dlls.find ((void *) fn);
-#endif
- res = d ? __cxa_atexit ((void (*) (void *)) fn, NULL, d->handle) : atexit (fn);
- return res;
-}
-
-extern "C" void
-cygwin_exit (int n)
-{
- exit_state = ES_EXIT_STARTING;
- exit (n);
-}
-
-extern "C" void
-_exit (int n)
-{
- do_exit (((DWORD) n & 0xff) << 8);
-}
-
-extern "C" void cygwin_stackdump ();
-
-extern "C" void
-vapi_fatal (const char *fmt, va_list ap)
-{
- char buf[4096];
- int n = __small_sprintf (buf, "%P: *** fatal error %s- ", in_forkee ? "in forked process " : "");
- __small_vsprintf (buf + n, fmt, ap);
- va_end (ap);
- strace.prntf (_STRACE_SYSTEM, NULL, "%s", buf);
-
-#ifdef DEBUGGING
- try_to_debug ();
-#endif
- cygwin_stackdump ();
- myself.exit (__api_fatal_exit_val);
-}
-
-extern "C" void
-api_fatal (const char *fmt, ...)
-{
- va_list ap;
-
- va_start (ap, fmt);
- vapi_fatal (fmt, ap);
-}
-
-void
-multiple_cygwin_problem (const char *what, uintptr_t magic_version, uintptr_t version)
-{
- if (_cygwin_testing && (strstr (what, "proc") || strstr (what, "cygheap")))
- {
- child_proc_info->type = _CH_WHOOPS;
- return;
- }
-
- if (GetEnvironmentVariableA ("CYGWIN_MISMATCH_OK", NULL, 0))
- return;
-
- if (CYGWIN_VERSION_MAGIC_VERSION (magic_version) == version)
- system_printf ("%s magic number mismatch detected - %p/%ly", what, magic_version, version);
- else
- api_fatal ("%s mismatch detected - %ly/%ly.\n\
-This problem is probably due to using incompatible versions of the cygwin DLL.\n\
-Search for cygwin1.dll using the Windows Start->Find/Search facility\n\
-and delete all but the most recent version. The most recent version *should*\n\
-reside in x:\\cygwin\\bin, where 'x' is the drive on which you have\n\
-installed the cygwin distribution. Rebooting is also suggested if you\n\
-are unable to find another cygwin DLL.",
- what, magic_version, version);
-}
-
-#ifdef DEBUGGING
-void __reg1
-cygbench (const char *s)
-{
- if (GetEnvironmentVariableA ("CYGWIN_BENCH", NULL, 0))
- small_printf ("%05u ***** %s : %10d\n", GetCurrentProcessId (), s, strace.microseconds ());
-}
-#endif
diff --git a/winsup/cygwin/debug.cc b/winsup/cygwin/debug.cc
deleted file mode 100644
index 075803cc0..000000000
--- a/winsup/cygwin/debug.cc
+++ /dev/null
@@ -1,235 +0,0 @@
-/* debug.cc
-
- Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
- 2008, 2009, 2011
- Red Hat, Inc.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include "cygerrno.h"
-#ifdef DEBUGGING
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#endif
-
-#undef CloseHandle
-
-#ifdef DEBUGGING
-/* Here lies extra debugging routines which help track down internal
- Cygwin problems when compiled with -DDEBUGGING . */
-#define NFREEH (sizeof (cygheap->debug.freeh) / sizeof (cygheap->debug.freeh[0]))
-
-class lock_debug
-{
- static muto locker;
- public:
- lock_debug ()
- {
- locker.acquire (INFINITE);
- }
- void unlock ()
- {
- locker.release ();
- }
- ~lock_debug () {unlock ();}
- friend void debug_init ();
-};
-
-muto NO_COPY lock_debug::locker;
-
-static bool __stdcall mark_closed (const char *, int, HANDLE, const char *, bool);
-
-void
-debug_init ()
-{
- lock_debug::locker.init ("debug_lock");
-}
-
-/* Find a registered handle in the linked list of handles. */
-static handle_list * __stdcall
-find_handle (HANDLE h)
-{
- handle_list *hl;
- for (hl = &cygheap->debug.starth; hl->next != NULL; hl = hl->next)
- if (hl->next->h == h)
- goto out;
- hl = NULL;
-
-out:
- return hl;
-}
-
-void
-verify_handle (const char *func, int ln, HANDLE h)
-{
- lock_debug here;
- handle_list *hl = find_handle (h);
- if (!hl)
- return;
- system_printf ("%s:%d - multiple attempts to add handle %p", func, ln, h);
-
- system_printf (" previously allocated by %s:%d(%s<%p>) winpid %d",
- hl->func, hl->ln, hl->name, hl->h, hl->pid);
-}
-
-void
-setclexec (HANDLE oh, HANDLE nh, bool not_inheriting)
-{
- lock_debug here;
- handle_list *hl = find_handle (oh);
- if (hl)
- {
- hl = hl->next;
- hl->inherited = !not_inheriting;
- hl->h = nh;
- }
-}
-
-/* Create a new handle record */
-static handle_list * __stdcall
-newh ()
-{
- handle_list *hl;
-
- for (hl = cygheap->debug.freeh; hl < cygheap->debug.freeh + NFREEH; hl++)
- if (hl->name == NULL)
- return hl;
-
- return NULL;
-}
-
-void __reg3
-modify_handle (const char *func, int ln, HANDLE h, const char *name, bool inh)
-{
- lock_debug here;
- handle_list *hl = find_handle (h);
- if (!hl)
- {
- system_printf ("%s:%d handle %s<%p> not found", func, ln, name, h);
- return;
- }
- hl->next->inherited = inh;
- debug_printf ("%s:%d set handle %s<%p> inheritance flag to %d", func, ln,
- name, h, inh);
-}
-
-/* Add a handle to the linked list of known handles. */
-void __reg3
-add_handle (const char *func, int ln, HANDLE h, const char *name, bool inh)
-{
- handle_list *hl;
-
- if (!cygheap)
- return;
-
- lock_debug here;
- if ((hl = find_handle (h)))
- {
- hl = hl->next;
- if (hl->name == name && hl->func == func && hl->ln == ln)
- return;
- system_printf ("%s:%d - multiple attempts to add handle %s<%p>", func,
- ln, name, h);
- system_printf (" previously allocated by %s:%d(%s<%p>) winpid %d",
- hl->func, hl->ln, hl->name, hl->h, hl->pid);
- return;
- }
-
- if ((hl = newh ()) == NULL)
- {
- here.unlock ();
- debug_printf ("couldn't allocate memory for %s(%d): %s(%p)",
- func, ln, name, h);
- return;
- }
- hl->h = h;
- hl->name = name;
- hl->func = func;
- hl->ln = ln;
- hl->inherited = inh;
- hl->pid = GetCurrentProcessId ();
- hl->next = cygheap->debug.starth.next;
- cygheap->debug.starth.next = hl;
- SetHandleInformation (h, HANDLE_FLAG_PROTECT_FROM_CLOSE, HANDLE_FLAG_PROTECT_FROM_CLOSE);
- debug_printf ("protecting handle '%s'(%p), inherited flag %d", hl->name, hl->h, hl->inherited);
-}
-
-static void __stdcall
-delete_handle (handle_list *hl)
-{
- handle_list *hnuke = hl->next;
- debug_printf ("nuking handle '%s' (%p)", hnuke->name, hnuke->h);
- hl->next = hnuke->next;
- memset (hnuke, 0, sizeof (*hnuke));
-}
-
-void
-debug_fixup_after_fork_exec ()
-{
- /* No lock needed at this point */
- handle_list *hl;
- for (hl = &cygheap->debug.starth; hl->next != NULL; /* nothing */)
- if (hl->next->inherited)
- hl = hl->next;
- else
- delete_handle (hl); // removes hl->next
-}
-
-static bool __stdcall
-mark_closed (const char *func, int ln, HANDLE h, const char *name, bool force)
-{
- handle_list *hl;
-
- if (!cygheap)
- return true;
-
- if ((hl = find_handle (h)) && !force)
- {
- hl = hl->next;
- system_printf ("attempt to close protected handle %s:%d(%s<%p>) winpid %d",
- hl->func, hl->ln, hl->name, hl->h, hl->pid);
- system_printf (" by %s:%d(%s<%p>)", func, ln, name, h);
- return false;
- }
-
- handle_list *hln;
- if (hl && (hln = hl->next) && strcmp (name, hln->name) != 0)
- {
- system_printf ("closing protected handle %s:%d(%s<%p>)",
- hln->func, hln->ln, hln->name, hln->h);
- system_printf (" by %s:%d(%s<%p>)", func, ln, name, h);
- }
-
- if (hl)
- delete_handle (hl);
-
- return true;
-}
-
-/* Close a known handle. Complain if !force and closing a known handle or
- if the name of the handle being closed does not match the registered name. */
-bool __reg3
-close_handle (const char *func, int ln, HANDLE h, const char *name, bool force)
-{
- bool ret;
-
- lock_debug here;
- if (!mark_closed (func, ln, h, name, force))
- return false;
-
- SetHandleInformation (h, HANDLE_FLAG_PROTECT_FROM_CLOSE, 0);
- ret = CloseHandle (h);
-
- if (!ret)
- {
- system_printf ("CloseHandle(%s<%p>) failed %s:%d, %E", name, h, func, ln);
- try_to_debug ();
- }
- return ret;
-}
-#endif /*DEBUGGING*/
diff --git a/winsup/cygwin/debug.h b/winsup/cygwin/debug.h
deleted file mode 100644
index 627c77ed6..000000000
--- a/winsup/cygwin/debug.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/* debug.h
-
- Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2008, 2010,
- 2013 Red Hat, Inc.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef MALLOC_DEBUG
-#define MALLOC_CHECK do {} while (0)
-#else
-#include <stdlib.h>
-#include <malloc.h>
-#define MALLOC_CHECK ({\
- debug_printf ("checking malloc pool");\
- mallinfo ();\
-})
-#endif
-
-#if !defined(_DEBUG_H_)
-#define _DEBUG_H_
-
-#define being_debugged() (IsDebuggerPresent ())
-
-#ifndef DEBUGGING
-# define cygbench(s)
-# define ForceCloseHandle CloseHandle
-# define ForceCloseHandle1(h, n) CloseHandle (h)
-# define ForceCloseHandle2(h, n) CloseHandle (h)
-# define ModifyHandle(h, n) do {} while (0)
-# define ProtectHandle(h) do {} while (0)
-# define ProtectHandle1(h,n) do {} while (0)
-# define ProtectHandle2(h,n) do {} while (0)
-# define ProtectHandleINH(h) do {} while (0)
-# define ProtectHandle1INH(h,n) do {} while (0)
-# define ProtectHandle2INH(h,n) do {} while (0)
-# define debug_init() do {} while (0)
-# define setclexec(h, nh, b) do {} while (0)
-# define debug_fixup_after_fork_exec() do {} while (0)
-# define VerifyHandle(h) do {} while (0)
-# define console_printf small_printf
-
-#else
-
-# ifdef NO_DEBUG_DEFINES
-# undef NO_DEBUG_DEFINES
-# else
-# define CloseHandle(h) \
- close_handle (__PRETTY_FUNCTION__, __LINE__, (h), #h, FALSE)
-# define ForceCloseHandle(h) \
- close_handle (__PRETTY_FUNCTION__, __LINE__, (h), #h, TRUE)
-# define ForceCloseHandle1(h,n) \
- close_handle (__PRETTY_FUNCTION__, __LINE__, (h), #n, TRUE)
-# define ForceCloseHandle2(h,n) \
- close_handle (__PRETTY_FUNCTION__, __LINE__, (h), n, TRUE)
-# endif
-
-# define ModifyHandle(h, n) modify_handle (__PRETTY_FUNCTION__, __LINE__, (h), #h, n)
-
-# define ProtectHandle(h) add_handle (__PRETTY_FUNCTION__, __LINE__, (h), #h)
-# define ProtectHandle1(h, n) add_handle (__PRETTY_FUNCTION__, __LINE__, (h), #n)
-# define ProtectHandle2(h, n) add_handle (__PRETTY_FUNCTION__, __LINE__, (h), n)
-# define ProtectHandleINH(h) add_handle (__PRETTY_FUNCTION__, __LINE__, (h), #h, 1)
-# define ProtectHandle1INH(h, n) add_handle (__PRETTY_FUNCTION__, __LINE__, (h), #n, 1)
-# define ProtectHandle2INH(h, n) add_handle (__PRETTY_FUNCTION__, __LINE__, (h), n, 1)
-# define VerifyHandle(h) verify_handle (__PRETTY_FUNCTION__, __LINE__, (h))
-
-void debug_init ();
-void __reg3 add_handle (const char *, int, HANDLE, const char *, bool = false);
-void __reg3 verify_handle (const char *, int, HANDLE);
-bool __reg3 close_handle (const char *, int, HANDLE, const char *, bool);
-extern "C" void console_printf (const char *fmt,...);
-void __reg1 cygbench (const char *s);
-void __reg3 modify_handle (const char *, int, HANDLE, const char *, bool);
-void setclexec (HANDLE, HANDLE, bool);
-void debug_fixup_after_fork_exec ();
-
-struct handle_list
- {
- HANDLE h;
- const char *name;
- const char *func;
- int ln;
- bool inherited;
- DWORD pid;
- struct handle_list *next;
- };
-
-#endif /*DEBUGGING*/
-#endif /*_DEBUG_H_*/
diff --git a/winsup/cygwin/devices.cc b/winsup/cygwin/devices.cc
deleted file mode 100644
index 8aba6d840..000000000
--- a/winsup/cygwin/devices.cc
+++ /dev/null
@@ -1,45858 +0,0 @@
-
-
-#include "winsup.h"
-#include "devices.h"
-#include "sys/cygwin.h"
-#include "tty.h"
-#include "pinfo.h"
-#include "shared_info.h"
-#include "path.h"
-#include "fhandler.h"
-#include "ntdll.h"
-
-typedef const device *KR_device_t;
-
-
-static KR_device_t KR_find_keyword (const char *KR_keyword, int KR_length);
-
-
-
-
-static int
-exists_internal (const device&)
-{
- return false;
-}
-
-static int
-exists (const device&)
-{
- return true;
-}
-
-/* Check existence of POSIX devices backed by real NT devices. */
-static int
-exists_ntdev (const device& dev)
-{
- WCHAR wpath[MAX_PATH];
- UNICODE_STRING upath;
- OBJECT_ATTRIBUTES attr;
- HANDLE h;
- NTSTATUS status;
-
- sys_mbstowcs (wpath, MAX_PATH, dev.native);
- RtlInitUnicodeString (&upath, wpath);
- InitializeObjectAttributes (&attr, &upath, OBJ_CASE_INSENSITIVE, NULL, NULL);
- /* Except for the serial IO devices, the native paths are
- direct device paths, not symlinks, so every status code
- except for "NOT_FOUND" means the device exists. */
- status = NtOpenSymbolicLinkObject (&h, SYMBOLIC_LINK_QUERY, &attr);
- switch (status)
- {
- case STATUS_OBJECT_NAME_NOT_FOUND:
- case STATUS_OBJECT_PATH_NOT_FOUND:
- return false;
- case STATUS_SUCCESS:
- NtClose (h);
- default:
- break;
- }
- return true;
-}
-
-/* Don't list via readdir but allow as a direct reference. */
-static int
-exists_ntdev_silent (const device& dev)
-{
- return exists_ntdev (dev) ? -1 : false;
-}
-
-static int
-exists_console (const device& dev)
-{
- fh_devices devn = *const_cast<device *> (&dev);
- switch (devn)
- {
- case FH_CONSOLE:
- case FH_CONIN:
- case FH_CONOUT:
- return fhandler_console::exists ();
- default:
- /* Only show my own console device (for now?) */
- return iscons_dev (myself->ctty) && myself->ctty == devn;
- }
-}
-
-static int
-exists_pty (const device& dev)
-{
- /* Only existing slave ptys. */
- return cygwin_shared->tty.connect (dev.get_minor ()) != -1;
-}
-
-const device dev_cygdrive_storage =
- {"/cygdrive", {FH_CYGDRIVE}, "", exists};
-
-const device dev_fs_storage =
- {"", {FH_FS}, "", exists};
-
-const device dev_proc_storage =
- {"", {FH_PROC}, "", exists};
-
-const device dev_procnet_storage =
- {"", {FH_PROCNET}, "", exists};
-
-const device dev_procsys_storage =
- {"", {FH_PROCSYS}, "", exists};
-
-const device dev_procsysvipc_storage =
- {"", {FH_PROCSYSVIPC}, "", exists};
-
-const device dev_netdrive_storage =
- {"", {FH_NETDRIVE}, "", exists};
-
-const device dev_registry_storage =
- {"", {FH_REGISTRY}, "", exists_internal};
-
-const device dev_piper_storage =
- {"", {FH_PIPER}, "", exists_internal};
-
-const device dev_pipew_storage =
- {"", {FH_PIPEW}, "", exists_internal};
-
-const device dev_tcp_storage =
- {"", {FH_TCP}, "", exists_internal};
-
-const device dev_udp_storage =
- {"", {FH_UDP}, "", exists_internal};
-
-const device dev_stream_storage =
- {"", {FH_STREAM}, "", exists_internal};
-
-const device dev_dgram_storage =
- {"", {FH_DGRAM}, "", exists_internal};
-
-const device dev_bad_storage =
- {"", {FH_NADA}, "", exists_internal};
-
-const device dev_error_storage =
- {"", {FH_ERROR}, "", exists_internal};
-
-#define BRACK(x) {devn_int: x}
-const _RDATA device dev_storage[] =
-{
- {"/dev", BRACK(FH_DEV), "", exists, S_IFDIR, false},
- {"/dev/clipboard", BRACK(FH_CLIPBOARD), "\\Device\\Null", exists_ntdev, S_IFCHR, true},
- {"/dev/com1", BRACK(FHDEV(DEV_SERIAL_MAJOR, 0)), "\\??\\COM1", exists_ntdev_silent, S_IFCHR, true},
- {"/dev/com2", BRACK(FHDEV(DEV_SERIAL_MAJOR, 1)), "\\??\\COM2", exists_ntdev_silent, S_IFCHR, true},
- {"/dev/com3", BRACK(FHDEV(DEV_SERIAL_MAJOR, 2)), "\\??\\COM3", exists_ntdev_silent, S_IFCHR, true},
- {"/dev/com4", BRACK(FHDEV(DEV_SERIAL_MAJOR, 3)), "\\??\\COM4", exists_ntdev_silent, S_IFCHR, true},
- {"/dev/com5", BRACK(FHDEV(DEV_SERIAL_MAJOR, 4)), "\\??\\COM5", exists_ntdev_silent, S_IFCHR, true},
- {"/dev/com6", BRACK(FHDEV(DEV_SERIAL_MAJOR, 5)), "\\??\\COM6", exists_ntdev_silent, S_IFCHR, true},
- {"/dev/com7", BRACK(FHDEV(DEV_SERIAL_MAJOR, 6)), "\\??\\COM7", exists_ntdev_silent, S_IFCHR, true},
- {"/dev/com8", BRACK(FHDEV(DEV_SERIAL_MAJOR, 7)), "\\??\\COM8", exists_ntdev_silent, S_IFCHR, true},
- {"/dev/com9", BRACK(FHDEV(DEV_SERIAL_MAJOR, 8)), "\\??\\COM9", exists_ntdev_silent, S_IFCHR, true},
- {"/dev/com10", BRACK(FHDEV(DEV_SERIAL_MAJOR, 9)), "\\??\\COM10", exists_ntdev_silent, S_IFCHR, true},
- {"/dev/com11", BRACK(FHDEV(DEV_SERIAL_MAJOR, 10)), "\\??\\COM11", exists_ntdev_silent, S_IFCHR, true},
- {"/dev/com12", BRACK(FHDEV(DEV_SERIAL_MAJOR, 11)), "\\??\\COM12", exists_ntdev_silent, S_IFCHR, true},
- {"/dev/com13", BRACK(FHDEV(DEV_SERIAL_MAJOR, 12)), "\\??\\COM13", exists_ntdev_silent, S_IFCHR, true},
- {"/dev/com14", BRACK(FHDEV(DEV_SERIAL_MAJOR, 13)), "\\??\\COM14", exists_ntdev_silent, S_IFCHR, true},
- {"/dev/com15", BRACK(FHDEV(DEV_SERIAL_MAJOR, 14)), "\\??\\COM15", exists_ntdev_silent, S_IFCHR, true},
- {"/dev/com16", BRACK(FHDEV(DEV_SERIAL_MAJOR, 15)), "\\??\\COM16", exists_ntdev_silent, S_IFCHR, true},
- {"/dev/conin", BRACK(FH_CONIN), "/dev/conin", exists_console, S_IFCHR, true},
- {"/dev/conout", BRACK(FH_CONOUT), "/dev/conout", exists_console, S_IFCHR, true},
- {"/dev/cons0", BRACK(FHDEV(DEV_CONS_MAJOR, 0)), "/dev/cons0", exists_console, S_IFCHR, true},
- {"/dev/cons1", BRACK(FHDEV(DEV_CONS_MAJOR, 1)), "/dev/cons1", exists_console, S_IFCHR, true},
- {"/dev/cons2", BRACK(FHDEV(DEV_CONS_MAJOR, 2)), "/dev/cons2", exists_console, S_IFCHR, true},
- {"/dev/cons3", BRACK(FHDEV(DEV_CONS_MAJOR, 3)), "/dev/cons3", exists_console, S_IFCHR, true},
- {"/dev/cons4", BRACK(FHDEV(DEV_CONS_MAJOR, 4)), "/dev/cons4", exists_console, S_IFCHR, true},
- {"/dev/cons5", BRACK(FHDEV(DEV_CONS_MAJOR, 5)), "/dev/cons5", exists_console, S_IFCHR, true},
- {"/dev/cons6", BRACK(FHDEV(DEV_CONS_MAJOR, 6)), "/dev/cons6", exists_console, S_IFCHR, true},
- {"/dev/cons7", BRACK(FHDEV(DEV_CONS_MAJOR, 7)), "/dev/cons7", exists_console, S_IFCHR, true},
- {"/dev/cons8", BRACK(FHDEV(DEV_CONS_MAJOR, 8)), "/dev/cons8", exists_console, S_IFCHR, true},
- {"/dev/cons9", BRACK(FHDEV(DEV_CONS_MAJOR, 9)), "/dev/cons9", exists_console, S_IFCHR, true},
- {"/dev/cons10", BRACK(FHDEV(DEV_CONS_MAJOR, 10)), "/dev/cons10", exists_console, S_IFCHR, true},
- {"/dev/cons11", BRACK(FHDEV(DEV_CONS_MAJOR, 11)), "/dev/cons11", exists_console, S_IFCHR, true},
- {"/dev/cons12", BRACK(FHDEV(DEV_CONS_MAJOR, 12)), "/dev/cons12", exists_console, S_IFCHR, true},
- {"/dev/cons13", BRACK(FHDEV(DEV_CONS_MAJOR, 13)), "/dev/cons13", exists_console, S_IFCHR, true},
- {"/dev/cons14", BRACK(FHDEV(DEV_CONS_MAJOR, 14)), "/dev/cons14", exists_console, S_IFCHR, true},
- {"/dev/cons15", BRACK(FHDEV(DEV_CONS_MAJOR, 15)), "/dev/cons15", exists_console, S_IFCHR, true},
- {"/dev/cons16", BRACK(FHDEV(DEV_CONS_MAJOR, 16)), "/dev/cons16", exists_console, S_IFCHR, true},
- {"/dev/cons17", BRACK(FHDEV(DEV_CONS_MAJOR, 17)), "/dev/cons17", exists_console, S_IFCHR, true},
- {"/dev/cons18", BRACK(FHDEV(DEV_CONS_MAJOR, 18)), "/dev/cons18", exists_console, S_IFCHR, true},
- {"/dev/cons19", BRACK(FHDEV(DEV_CONS_MAJOR, 19)), "/dev/cons19", exists_console, S_IFCHR, true},
- {"/dev/cons20", BRACK(FHDEV(DEV_CONS_MAJOR, 20)), "/dev/cons20", exists_console, S_IFCHR, true},
- {"/dev/cons21", BRACK(FHDEV(DEV_CONS_MAJOR, 21)), "/dev/cons21", exists_console, S_IFCHR, true},
- {"/dev/cons22", BRACK(FHDEV(DEV_CONS_MAJOR, 22)), "/dev/cons22", exists_console, S_IFCHR, true},
- {"/dev/cons23", BRACK(FHDEV(DEV_CONS_MAJOR, 23)), "/dev/cons23", exists_console, S_IFCHR, true},
- {"/dev/cons24", BRACK(FHDEV(DEV_CONS_MAJOR, 24)), "/dev/cons24", exists_console, S_IFCHR, true},
- {"/dev/cons25", BRACK(FHDEV(DEV_CONS_MAJOR, 25)), "/dev/cons25", exists_console, S_IFCHR, true},
- {"/dev/cons26", BRACK(FHDEV(DEV_CONS_MAJOR, 26)), "/dev/cons26", exists_console, S_IFCHR, true},
- {"/dev/cons27", BRACK(FHDEV(DEV_CONS_MAJOR, 27)), "/dev/cons27", exists_console, S_IFCHR, true},
- {"/dev/cons28", BRACK(FHDEV(DEV_CONS_MAJOR, 28)), "/dev/cons28", exists_console, S_IFCHR, true},
- {"/dev/cons29", BRACK(FHDEV(DEV_CONS_MAJOR, 29)), "/dev/cons29", exists_console, S_IFCHR, true},
- {"/dev/cons30", BRACK(FHDEV(DEV_CONS_MAJOR, 30)), "/dev/cons30", exists_console, S_IFCHR, true},
- {"/dev/cons31", BRACK(FHDEV(DEV_CONS_MAJOR, 31)), "/dev/cons31", exists_console, S_IFCHR, true},
- {"/dev/cons32", BRACK(FHDEV(DEV_CONS_MAJOR, 32)), "/dev/cons32", exists_console, S_IFCHR, true},
- {"/dev/cons33", BRACK(FHDEV(DEV_CONS_MAJOR, 33)), "/dev/cons33", exists_console, S_IFCHR, true},
- {"/dev/cons34", BRACK(FHDEV(DEV_CONS_MAJOR, 34)), "/dev/cons34", exists_console, S_IFCHR, true},
- {"/dev/cons35", BRACK(FHDEV(DEV_CONS_MAJOR, 35)), "/dev/cons35", exists_console, S_IFCHR, true},
- {"/dev/cons36", BRACK(FHDEV(DEV_CONS_MAJOR, 36)), "/dev/cons36", exists_console, S_IFCHR, true},
- {"/dev/cons37", BRACK(FHDEV(DEV_CONS_MAJOR, 37)), "/dev/cons37", exists_console, S_IFCHR, true},
- {"/dev/cons38", BRACK(FHDEV(DEV_CONS_MAJOR, 38)), "/dev/cons38", exists_console, S_IFCHR, true},
- {"/dev/cons39", BRACK(FHDEV(DEV_CONS_MAJOR, 39)), "/dev/cons39", exists_console, S_IFCHR, true},
- {"/dev/cons40", BRACK(FHDEV(DEV_CONS_MAJOR, 40)), "/dev/cons40", exists_console, S_IFCHR, true},
- {"/dev/cons41", BRACK(FHDEV(DEV_CONS_MAJOR, 41)), "/dev/cons41", exists_console, S_IFCHR, true},
- {"/dev/cons42", BRACK(FHDEV(DEV_CONS_MAJOR, 42)), "/dev/cons42", exists_console, S_IFCHR, true},
- {"/dev/cons43", BRACK(FHDEV(DEV_CONS_MAJOR, 43)), "/dev/cons43", exists_console, S_IFCHR, true},
- {"/dev/cons44", BRACK(FHDEV(DEV_CONS_MAJOR, 44)), "/dev/cons44", exists_console, S_IFCHR, true},
- {"/dev/cons45", BRACK(FHDEV(DEV_CONS_MAJOR, 45)), "/dev/cons45", exists_console, S_IFCHR, true},
- {"/dev/cons46", BRACK(FHDEV(DEV_CONS_MAJOR, 46)), "/dev/cons46", exists_console, S_IFCHR, true},
- {"/dev/cons47", BRACK(FHDEV(DEV_CONS_MAJOR, 47)), "/dev/cons47", exists_console, S_IFCHR, true},
- {"/dev/cons48", BRACK(FHDEV(DEV_CONS_MAJOR, 48)), "/dev/cons48", exists_console, S_IFCHR, true},
- {"/dev/cons49", BRACK(FHDEV(DEV_CONS_MAJOR, 49)), "/dev/cons49", exists_console, S_IFCHR, true},
- {"/dev/cons50", BRACK(FHDEV(DEV_CONS_MAJOR, 50)), "/dev/cons50", exists_console, S_IFCHR, true},
- {"/dev/cons51", BRACK(FHDEV(DEV_CONS_MAJOR, 51)), "/dev/cons51", exists_console, S_IFCHR, true},
- {"/dev/cons52", BRACK(FHDEV(DEV_CONS_MAJOR, 52)), "/dev/cons52", exists_console, S_IFCHR, true},
- {"/dev/cons53", BRACK(FHDEV(DEV_CONS_MAJOR, 53)), "/dev/cons53", exists_console, S_IFCHR, true},
- {"/dev/cons54", BRACK(FHDEV(DEV_CONS_MAJOR, 54)), "/dev/cons54", exists_console, S_IFCHR, true},
- {"/dev/cons55", BRACK(FHDEV(DEV_CONS_MAJOR, 55)), "/dev/cons55", exists_console, S_IFCHR, true},
- {"/dev/cons56", BRACK(FHDEV(DEV_CONS_MAJOR, 56)), "/dev/cons56", exists_console, S_IFCHR, true},
- {"/dev/cons57", BRACK(FHDEV(DEV_CONS_MAJOR, 57)), "/dev/cons57", exists_console, S_IFCHR, true},
- {"/dev/cons58", BRACK(FHDEV(DEV_CONS_MAJOR, 58)), "/dev/cons58", exists_console, S_IFCHR, true},
- {"/dev/cons59", BRACK(FHDEV(DEV_CONS_MAJOR, 59)), "/dev/cons59", exists_console, S_IFCHR, true},
- {"/dev/cons60", BRACK(FHDEV(DEV_CONS_MAJOR, 60)), "/dev/cons60", exists_console, S_IFCHR, true},
- {"/dev/cons61", BRACK(FHDEV(DEV_CONS_MAJOR, 61)), "/dev/cons61", exists_console, S_IFCHR, true},
- {"/dev/cons62", BRACK(FHDEV(DEV_CONS_MAJOR, 62)), "/dev/cons62", exists_console, S_IFCHR, true},
- {"/dev/cons63", BRACK(FHDEV(DEV_CONS_MAJOR, 63)), "/dev/cons63", exists_console, S_IFCHR, true},
- {"/dev/console", BRACK(FH_CONSOLE), "/dev/console", exists_console, S_IFCHR, true},
- {"/dev/dsp", BRACK(FH_OSS_DSP), "\\Device\\Null", exists_ntdev, S_IFCHR, true},
- {"/dev/fd0", BRACK(FHDEV(DEV_FLOPPY_MAJOR, 0)), "\\Device\\Floppy0", exists_ntdev, S_IFBLK, true},
- {"/dev/fd1", BRACK(FHDEV(DEV_FLOPPY_MAJOR, 1)), "\\Device\\Floppy1", exists_ntdev, S_IFBLK, true},
- {"/dev/fd2", BRACK(FHDEV(DEV_FLOPPY_MAJOR, 2)), "\\Device\\Floppy2", exists_ntdev, S_IFBLK, true},
- {"/dev/fd3", BRACK(FHDEV(DEV_FLOPPY_MAJOR, 3)), "\\Device\\Floppy3", exists_ntdev, S_IFBLK, true},
- {"/dev/fd4", BRACK(FHDEV(DEV_FLOPPY_MAJOR, 4)), "\\Device\\Floppy4", exists_ntdev, S_IFBLK, true},
- {"/dev/fd5", BRACK(FHDEV(DEV_FLOPPY_MAJOR, 5)), "\\Device\\Floppy5", exists_ntdev, S_IFBLK, true},
- {"/dev/fd6", BRACK(FHDEV(DEV_FLOPPY_MAJOR, 6)), "\\Device\\Floppy6", exists_ntdev, S_IFBLK, true},
- {"/dev/fd7", BRACK(FHDEV(DEV_FLOPPY_MAJOR, 7)), "\\Device\\Floppy7", exists_ntdev, S_IFBLK, true},
- {"/dev/fd8", BRACK(FHDEV(DEV_FLOPPY_MAJOR, 8)), "\\Device\\Floppy8", exists_ntdev, S_IFBLK, true},
- {"/dev/fd9", BRACK(FHDEV(DEV_FLOPPY_MAJOR, 9)), "\\Device\\Floppy9", exists_ntdev, S_IFBLK, true},
- {"/dev/fd10", BRACK(FHDEV(DEV_FLOPPY_MAJOR, 10)), "\\Device\\Floppy10", exists_ntdev, S_IFBLK, true},
- {"/dev/fd11", BRACK(FHDEV(DEV_FLOPPY_MAJOR, 11)), "\\Device\\Floppy11", exists_ntdev, S_IFBLK, true},
- {"/dev/fd12", BRACK(FHDEV(DEV_FLOPPY_MAJOR, 12)), "\\Device\\Floppy12", exists_ntdev, S_IFBLK, true},
- {"/dev/fd13", BRACK(FHDEV(DEV_FLOPPY_MAJOR, 13)), "\\Device\\Floppy13", exists_ntdev, S_IFBLK, true},
- {"/dev/fd14", BRACK(FHDEV(DEV_FLOPPY_MAJOR, 14)), "\\Device\\Floppy14", exists_ntdev, S_IFBLK, true},
- {"/dev/fd15", BRACK(FHDEV(DEV_FLOPPY_MAJOR, 15)), "\\Device\\Floppy15", exists_ntdev, S_IFBLK, true},
- {"/dev/full", BRACK(FH_FULL), "\\Device\\Null", exists_ntdev, S_IFCHR, true},
- {"/dev/kmsg", BRACK(FH_KMSG), "\\Device\\MailSlot\\cygwin\\dev\\kmsg", exists_ntdev, S_IFCHR, true},
- {"/dev/nst0", BRACK(FHDEV(DEV_TAPE_MAJOR, 128)), "\\Device\\Tape0", exists_ntdev, S_IFBLK, true},
- {"/dev/nst1", BRACK(FHDEV(DEV_TAPE_MAJOR, 129)), "\\Device\\Tape1", exists_ntdev, S_IFBLK, true},
- {"/dev/nst2", BRACK(FHDEV(DEV_TAPE_MAJOR, 130)), "\\Device\\Tape2", exists_ntdev, S_IFBLK, true},
- {"/dev/nst3", BRACK(FHDEV(DEV_TAPE_MAJOR, 131)), "\\Device\\Tape3", exists_ntdev, S_IFBLK, true},
- {"/dev/nst4", BRACK(FHDEV(DEV_TAPE_MAJOR, 132)), "\\Device\\Tape4", exists_ntdev, S_IFBLK, true},
- {"/dev/nst5", BRACK(FHDEV(DEV_TAPE_MAJOR, 133)), "\\Device\\Tape5", exists_ntdev, S_IFBLK, true},
- {"/dev/nst6", BRACK(FHDEV(DEV_TAPE_MAJOR, 134)), "\\Device\\Tape6", exists_ntdev, S_IFBLK, true},
- {"/dev/nst7", BRACK(FHDEV(DEV_TAPE_MAJOR, 135)), "\\Device\\Tape7", exists_ntdev, S_IFBLK, true},
- {"/dev/nst8", BRACK(FHDEV(DEV_TAPE_MAJOR, 136)), "\\Device\\Tape8", exists_ntdev, S_IFBLK, true},
- {"/dev/nst9", BRACK(FHDEV(DEV_TAPE_MAJOR, 137)), "\\Device\\Tape9", exists_ntdev, S_IFBLK, true},
- {"/dev/nst10", BRACK(FHDEV(DEV_TAPE_MAJOR, 138)), "\\Device\\Tape10", exists_ntdev, S_IFBLK, true},
- {"/dev/nst11", BRACK(FHDEV(DEV_TAPE_MAJOR, 139)), "\\Device\\Tape11", exists_ntdev, S_IFBLK, true},
- {"/dev/nst12", BRACK(FHDEV(DEV_TAPE_MAJOR, 140)), "\\Device\\Tape12", exists_ntdev, S_IFBLK, true},
- {"/dev/nst13", BRACK(FHDEV(DEV_TAPE_MAJOR, 141)), "\\Device\\Tape13", exists_ntdev, S_IFBLK, true},
- {"/dev/nst14", BRACK(FHDEV(DEV_TAPE_MAJOR, 142)), "\\Device\\Tape14", exists_ntdev, S_IFBLK, true},
- {"/dev/nst15", BRACK(FHDEV(DEV_TAPE_MAJOR, 143)), "\\Device\\Tape15", exists_ntdev, S_IFBLK, true},
- {"/dev/nst16", BRACK(FHDEV(DEV_TAPE_MAJOR, 144)), "\\Device\\Tape16", exists_ntdev, S_IFBLK, true},
- {"/dev/nst17", BRACK(FHDEV(DEV_TAPE_MAJOR, 145)), "\\Device\\Tape17", exists_ntdev, S_IFBLK, true},
- {"/dev/nst18", BRACK(FHDEV(DEV_TAPE_MAJOR, 146)), "\\Device\\Tape18", exists_ntdev, S_IFBLK, true},
- {"/dev/nst19", BRACK(FHDEV(DEV_TAPE_MAJOR, 147)), "\\Device\\Tape19", exists_ntdev, S_IFBLK, true},
- {"/dev/nst20", BRACK(FHDEV(DEV_TAPE_MAJOR, 148)), "\\Device\\Tape20", exists_ntdev, S_IFBLK, true},
- {"/dev/nst21", BRACK(FHDEV(DEV_TAPE_MAJOR, 149)), "\\Device\\Tape21", exists_ntdev, S_IFBLK, true},
- {"/dev/nst22", BRACK(FHDEV(DEV_TAPE_MAJOR, 150)), "\\Device\\Tape22", exists_ntdev, S_IFBLK, true},
- {"/dev/nst23", BRACK(FHDEV(DEV_TAPE_MAJOR, 151)), "\\Device\\Tape23", exists_ntdev, S_IFBLK, true},
- {"/dev/nst24", BRACK(FHDEV(DEV_TAPE_MAJOR, 152)), "\\Device\\Tape24", exists_ntdev, S_IFBLK, true},
- {"/dev/nst25", BRACK(FHDEV(DEV_TAPE_MAJOR, 153)), "\\Device\\Tape25", exists_ntdev, S_IFBLK, true},
- {"/dev/nst26", BRACK(FHDEV(DEV_TAPE_MAJOR, 154)), "\\Device\\Tape26", exists_ntdev, S_IFBLK, true},
- {"/dev/nst27", BRACK(FHDEV(DEV_TAPE_MAJOR, 155)), "\\Device\\Tape27", exists_ntdev, S_IFBLK, true},
- {"/dev/nst28", BRACK(FHDEV(DEV_TAPE_MAJOR, 156)), "\\Device\\Tape28", exists_ntdev, S_IFBLK, true},
- {"/dev/nst29", BRACK(FHDEV(DEV_TAPE_MAJOR, 157)), "\\Device\\Tape29", exists_ntdev, S_IFBLK, true},
- {"/dev/nst30", BRACK(FHDEV(DEV_TAPE_MAJOR, 158)), "\\Device\\Tape30", exists_ntdev, S_IFBLK, true},
- {"/dev/nst31", BRACK(FHDEV(DEV_TAPE_MAJOR, 159)), "\\Device\\Tape31", exists_ntdev, S_IFBLK, true},
- {"/dev/nst32", BRACK(FHDEV(DEV_TAPE_MAJOR, 160)), "\\Device\\Tape32", exists_ntdev, S_IFBLK, true},
- {"/dev/nst33", BRACK(FHDEV(DEV_TAPE_MAJOR, 161)), "\\Device\\Tape33", exists_ntdev, S_IFBLK, true},
- {"/dev/nst34", BRACK(FHDEV(DEV_TAPE_MAJOR, 162)), "\\Device\\Tape34", exists_ntdev, S_IFBLK, true},
- {"/dev/nst35", BRACK(FHDEV(DEV_TAPE_MAJOR, 163)), "\\Device\\Tape35", exists_ntdev, S_IFBLK, true},
- {"/dev/nst36", BRACK(FHDEV(DEV_TAPE_MAJOR, 164)), "\\Device\\Tape36", exists_ntdev, S_IFBLK, true},
- {"/dev/nst37", BRACK(FHDEV(DEV_TAPE_MAJOR, 165)), "\\Device\\Tape37", exists_ntdev, S_IFBLK, true},
- {"/dev/nst38", BRACK(FHDEV(DEV_TAPE_MAJOR, 166)), "\\Device\\Tape38", exists_ntdev, S_IFBLK, true},
- {"/dev/nst39", BRACK(FHDEV(DEV_TAPE_MAJOR, 167)), "\\Device\\Tape39", exists_ntdev, S_IFBLK, true},
- {"/dev/nst40", BRACK(FHDEV(DEV_TAPE_MAJOR, 168)), "\\Device\\Tape40", exists_ntdev, S_IFBLK, true},
- {"/dev/nst41", BRACK(FHDEV(DEV_TAPE_MAJOR, 169)), "\\Device\\Tape41", exists_ntdev, S_IFBLK, true},
- {"/dev/nst42", BRACK(FHDEV(DEV_TAPE_MAJOR, 170)), "\\Device\\Tape42", exists_ntdev, S_IFBLK, true},
- {"/dev/nst43", BRACK(FHDEV(DEV_TAPE_MAJOR, 171)), "\\Device\\Tape43", exists_ntdev, S_IFBLK, true},
- {"/dev/nst44", BRACK(FHDEV(DEV_TAPE_MAJOR, 172)), "\\Device\\Tape44", exists_ntdev, S_IFBLK, true},
- {"/dev/nst45", BRACK(FHDEV(DEV_TAPE_MAJOR, 173)), "\\Device\\Tape45", exists_ntdev, S_IFBLK, true},
- {"/dev/nst46", BRACK(FHDEV(DEV_TAPE_MAJOR, 174)), "\\Device\\Tape46", exists_ntdev, S_IFBLK, true},
- {"/dev/nst47", BRACK(FHDEV(DEV_TAPE_MAJOR, 175)), "\\Device\\Tape47", exists_ntdev, S_IFBLK, true},
- {"/dev/nst48", BRACK(FHDEV(DEV_TAPE_MAJOR, 176)), "\\Device\\Tape48", exists_ntdev, S_IFBLK, true},
- {"/dev/nst49", BRACK(FHDEV(DEV_TAPE_MAJOR, 177)), "\\Device\\Tape49", exists_ntdev, S_IFBLK, true},
- {"/dev/nst50", BRACK(FHDEV(DEV_TAPE_MAJOR, 178)), "\\Device\\Tape50", exists_ntdev, S_IFBLK, true},
- {"/dev/nst51", BRACK(FHDEV(DEV_TAPE_MAJOR, 179)), "\\Device\\Tape51", exists_ntdev, S_IFBLK, true},
- {"/dev/nst52", BRACK(FHDEV(DEV_TAPE_MAJOR, 180)), "\\Device\\Tape52", exists_ntdev, S_IFBLK, true},
- {"/dev/nst53", BRACK(FHDEV(DEV_TAPE_MAJOR, 181)), "\\Device\\Tape53", exists_ntdev, S_IFBLK, true},
- {"/dev/nst54", BRACK(FHDEV(DEV_TAPE_MAJOR, 182)), "\\Device\\Tape54", exists_ntdev, S_IFBLK, true},
- {"/dev/nst55", BRACK(FHDEV(DEV_TAPE_MAJOR, 183)), "\\Device\\Tape55", exists_ntdev, S_IFBLK, true},
- {"/dev/nst56", BRACK(FHDEV(DEV_TAPE_MAJOR, 184)), "\\Device\\Tape56", exists_ntdev, S_IFBLK, true},
- {"/dev/nst57", BRACK(FHDEV(DEV_TAPE_MAJOR, 185)), "\\Device\\Tape57", exists_ntdev, S_IFBLK, true},
- {"/dev/nst58", BRACK(FHDEV(DEV_TAPE_MAJOR, 186)), "\\Device\\Tape58", exists_ntdev, S_IFBLK, true},
- {"/dev/nst59", BRACK(FHDEV(DEV_TAPE_MAJOR, 187)), "\\Device\\Tape59", exists_ntdev, S_IFBLK, true},
- {"/dev/nst60", BRACK(FHDEV(DEV_TAPE_MAJOR, 188)), "\\Device\\Tape60", exists_ntdev, S_IFBLK, true},
- {"/dev/nst61", BRACK(FHDEV(DEV_TAPE_MAJOR, 189)), "\\Device\\Tape61", exists_ntdev, S_IFBLK, true},
- {"/dev/nst62", BRACK(FHDEV(DEV_TAPE_MAJOR, 190)), "\\Device\\Tape62", exists_ntdev, S_IFBLK, true},
- {"/dev/nst63", BRACK(FHDEV(DEV_TAPE_MAJOR, 191)), "\\Device\\Tape63", exists_ntdev, S_IFBLK, true},
- {"/dev/nst64", BRACK(FHDEV(DEV_TAPE_MAJOR, 192)), "\\Device\\Tape64", exists_ntdev, S_IFBLK, true},
- {"/dev/nst65", BRACK(FHDEV(DEV_TAPE_MAJOR, 193)), "\\Device\\Tape65", exists_ntdev, S_IFBLK, true},
- {"/dev/nst66", BRACK(FHDEV(DEV_TAPE_MAJOR, 194)), "\\Device\\Tape66", exists_ntdev, S_IFBLK, true},
- {"/dev/nst67", BRACK(FHDEV(DEV_TAPE_MAJOR, 195)), "\\Device\\Tape67", exists_ntdev, S_IFBLK, true},
- {"/dev/nst68", BRACK(FHDEV(DEV_TAPE_MAJOR, 196)), "\\Device\\Tape68", exists_ntdev, S_IFBLK, true},
- {"/dev/nst69", BRACK(FHDEV(DEV_TAPE_MAJOR, 197)), "\\Device\\Tape69", exists_ntdev, S_IFBLK, true},
- {"/dev/nst70", BRACK(FHDEV(DEV_TAPE_MAJOR, 198)), "\\Device\\Tape70", exists_ntdev, S_IFBLK, true},
- {"/dev/nst71", BRACK(FHDEV(DEV_TAPE_MAJOR, 199)), "\\Device\\Tape71", exists_ntdev, S_IFBLK, true},
- {"/dev/nst72", BRACK(FHDEV(DEV_TAPE_MAJOR, 200)), "\\Device\\Tape72", exists_ntdev, S_IFBLK, true},
- {"/dev/nst73", BRACK(FHDEV(DEV_TAPE_MAJOR, 201)), "\\Device\\Tape73", exists_ntdev, S_IFBLK, true},
- {"/dev/nst74", BRACK(FHDEV(DEV_TAPE_MAJOR, 202)), "\\Device\\Tape74", exists_ntdev, S_IFBLK, true},
- {"/dev/nst75", BRACK(FHDEV(DEV_TAPE_MAJOR, 203)), "\\Device\\Tape75", exists_ntdev, S_IFBLK, true},
- {"/dev/nst76", BRACK(FHDEV(DEV_TAPE_MAJOR, 204)), "\\Device\\Tape76", exists_ntdev, S_IFBLK, true},
- {"/dev/nst77", BRACK(FHDEV(DEV_TAPE_MAJOR, 205)), "\\Device\\Tape77", exists_ntdev, S_IFBLK, true},
- {"/dev/nst78", BRACK(FHDEV(DEV_TAPE_MAJOR, 206)), "\\Device\\Tape78", exists_ntdev, S_IFBLK, true},
- {"/dev/nst79", BRACK(FHDEV(DEV_TAPE_MAJOR, 207)), "\\Device\\Tape79", exists_ntdev, S_IFBLK, true},
- {"/dev/nst80", BRACK(FHDEV(DEV_TAPE_MAJOR, 208)), "\\Device\\Tape80", exists_ntdev, S_IFBLK, true},
- {"/dev/nst81", BRACK(FHDEV(DEV_TAPE_MAJOR, 209)), "\\Device\\Tape81", exists_ntdev, S_IFBLK, true},
- {"/dev/nst82", BRACK(FHDEV(DEV_TAPE_MAJOR, 210)), "\\Device\\Tape82", exists_ntdev, S_IFBLK, true},
- {"/dev/nst83", BRACK(FHDEV(DEV_TAPE_MAJOR, 211)), "\\Device\\Tape83", exists_ntdev, S_IFBLK, true},
- {"/dev/nst84", BRACK(FHDEV(DEV_TAPE_MAJOR, 212)), "\\Device\\Tape84", exists_ntdev, S_IFBLK, true},
- {"/dev/nst85", BRACK(FHDEV(DEV_TAPE_MAJOR, 213)), "\\Device\\Tape85", exists_ntdev, S_IFBLK, true},
- {"/dev/nst86", BRACK(FHDEV(DEV_TAPE_MAJOR, 214)), "\\Device\\Tape86", exists_ntdev, S_IFBLK, true},
- {"/dev/nst87", BRACK(FHDEV(DEV_TAPE_MAJOR, 215)), "\\Device\\Tape87", exists_ntdev, S_IFBLK, true},
- {"/dev/nst88", BRACK(FHDEV(DEV_TAPE_MAJOR, 216)), "\\Device\\Tape88", exists_ntdev, S_IFBLK, true},
- {"/dev/nst89", BRACK(FHDEV(DEV_TAPE_MAJOR, 217)), "\\Device\\Tape89", exists_ntdev, S_IFBLK, true},
- {"/dev/nst90", BRACK(FHDEV(DEV_TAPE_MAJOR, 218)), "\\Device\\Tape90", exists_ntdev, S_IFBLK, true},
- {"/dev/nst91", BRACK(FHDEV(DEV_TAPE_MAJOR, 219)), "\\Device\\Tape91", exists_ntdev, S_IFBLK, true},
- {"/dev/nst92", BRACK(FHDEV(DEV_TAPE_MAJOR, 220)), "\\Device\\Tape92", exists_ntdev, S_IFBLK, true},
- {"/dev/nst93", BRACK(FHDEV(DEV_TAPE_MAJOR, 221)), "\\Device\\Tape93", exists_ntdev, S_IFBLK, true},
- {"/dev/nst94", BRACK(FHDEV(DEV_TAPE_MAJOR, 222)), "\\Device\\Tape94", exists_ntdev, S_IFBLK, true},
- {"/dev/nst95", BRACK(FHDEV(DEV_TAPE_MAJOR, 223)), "\\Device\\Tape95", exists_ntdev, S_IFBLK, true},
- {"/dev/nst96", BRACK(FHDEV(DEV_TAPE_MAJOR, 224)), "\\Device\\Tape96", exists_ntdev, S_IFBLK, true},
- {"/dev/nst97", BRACK(FHDEV(DEV_TAPE_MAJOR, 225)), "\\Device\\Tape97", exists_ntdev, S_IFBLK, true},
- {"/dev/nst98", BRACK(FHDEV(DEV_TAPE_MAJOR, 226)), "\\Device\\Tape98", exists_ntdev, S_IFBLK, true},
- {"/dev/nst99", BRACK(FHDEV(DEV_TAPE_MAJOR, 227)), "\\Device\\Tape99", exists_ntdev, S_IFBLK, true},
- {"/dev/nst100", BRACK(FHDEV(DEV_TAPE_MAJOR, 228)), "\\Device\\Tape100", exists_ntdev, S_IFBLK, true},
- {"/dev/nst101", BRACK(FHDEV(DEV_TAPE_MAJOR, 229)), "\\Device\\Tape101", exists_ntdev, S_IFBLK, true},
- {"/dev/nst102", BRACK(FHDEV(DEV_TAPE_MAJOR, 230)), "\\Device\\Tape102", exists_ntdev, S_IFBLK, true},
- {"/dev/nst103", BRACK(FHDEV(DEV_TAPE_MAJOR, 231)), "\\Device\\Tape103", exists_ntdev, S_IFBLK, true},
- {"/dev/nst104", BRACK(FHDEV(DEV_TAPE_MAJOR, 232)), "\\Device\\Tape104", exists_ntdev, S_IFBLK, true},
- {"/dev/nst105", BRACK(FHDEV(DEV_TAPE_MAJOR, 233)), "\\Device\\Tape105", exists_ntdev, S_IFBLK, true},
- {"/dev/nst106", BRACK(FHDEV(DEV_TAPE_MAJOR, 234)), "\\Device\\Tape106", exists_ntdev, S_IFBLK, true},
- {"/dev/nst107", BRACK(FHDEV(DEV_TAPE_MAJOR, 235)), "\\Device\\Tape107", exists_ntdev, S_IFBLK, true},
- {"/dev/nst108", BRACK(FHDEV(DEV_TAPE_MAJOR, 236)), "\\Device\\Tape108", exists_ntdev, S_IFBLK, true},
- {"/dev/nst109", BRACK(FHDEV(DEV_TAPE_MAJOR, 237)), "\\Device\\Tape109", exists_ntdev, S_IFBLK, true},
- {"/dev/nst110", BRACK(FHDEV(DEV_TAPE_MAJOR, 238)), "\\Device\\Tape110", exists_ntdev, S_IFBLK, true},
- {"/dev/nst111", BRACK(FHDEV(DEV_TAPE_MAJOR, 239)), "\\Device\\Tape111", exists_ntdev, S_IFBLK, true},
- {"/dev/nst112", BRACK(FHDEV(DEV_TAPE_MAJOR, 240)), "\\Device\\Tape112", exists_ntdev, S_IFBLK, true},
- {"/dev/nst113", BRACK(FHDEV(DEV_TAPE_MAJOR, 241)), "\\Device\\Tape113", exists_ntdev, S_IFBLK, true},
- {"/dev/nst114", BRACK(FHDEV(DEV_TAPE_MAJOR, 242)), "\\Device\\Tape114", exists_ntdev, S_IFBLK, true},
- {"/dev/nst115", BRACK(FHDEV(DEV_TAPE_MAJOR, 243)), "\\Device\\Tape115", exists_ntdev, S_IFBLK, true},
- {"/dev/nst116", BRACK(FHDEV(DEV_TAPE_MAJOR, 244)), "\\Device\\Tape116", exists_ntdev, S_IFBLK, true},
- {"/dev/nst117", BRACK(FHDEV(DEV_TAPE_MAJOR, 245)), "\\Device\\Tape117", exists_ntdev, S_IFBLK, true},
- {"/dev/nst118", BRACK(FHDEV(DEV_TAPE_MAJOR, 246)), "\\Device\\Tape118", exists_ntdev, S_IFBLK, true},
- {"/dev/nst119", BRACK(FHDEV(DEV_TAPE_MAJOR, 247)), "\\Device\\Tape119", exists_ntdev, S_IFBLK, true},
- {"/dev/nst120", BRACK(FHDEV(DEV_TAPE_MAJOR, 248)), "\\Device\\Tape120", exists_ntdev, S_IFBLK, true},
- {"/dev/nst121", BRACK(FHDEV(DEV_TAPE_MAJOR, 249)), "\\Device\\Tape121", exists_ntdev, S_IFBLK, true},
- {"/dev/nst122", BRACK(FHDEV(DEV_TAPE_MAJOR, 250)), "\\Device\\Tape122", exists_ntdev, S_IFBLK, true},
- {"/dev/nst123", BRACK(FHDEV(DEV_TAPE_MAJOR, 251)), "\\Device\\Tape123", exists_ntdev, S_IFBLK, true},
- {"/dev/nst124", BRACK(FHDEV(DEV_TAPE_MAJOR, 252)), "\\Device\\Tape124", exists_ntdev, S_IFBLK, true},
- {"/dev/nst125", BRACK(FHDEV(DEV_TAPE_MAJOR, 253)), "\\Device\\Tape125", exists_ntdev, S_IFBLK, true},
- {"/dev/nst126", BRACK(FHDEV(DEV_TAPE_MAJOR, 254)), "\\Device\\Tape126", exists_ntdev, S_IFBLK, true},
- {"/dev/nst127", BRACK(FHDEV(DEV_TAPE_MAJOR, 255)), "\\Device\\Tape127", exists_ntdev, S_IFBLK, true},
- {"/dev/null", BRACK(FH_NULL), "\\Device\\Null", exists_ntdev, S_IFCHR, true},
- {"/dev/ptmx", BRACK(FH_PTMX), "/dev/ptmx", exists, S_IFCHR, true},
- {"/dev/pty0", BRACK(FHDEV(DEV_PTYS_MAJOR, 0)), "/dev/pty0", exists_pty, S_IFCHR, true},
- {"/dev/pty1", BRACK(FHDEV(DEV_PTYS_MAJOR, 1)), "/dev/pty1", exists_pty, S_IFCHR, true},
- {"/dev/pty2", BRACK(FHDEV(DEV_PTYS_MAJOR, 2)), "/dev/pty2", exists_pty, S_IFCHR, true},
- {"/dev/pty3", BRACK(FHDEV(DEV_PTYS_MAJOR, 3)), "/dev/pty3", exists_pty, S_IFCHR, true},
- {"/dev/pty4", BRACK(FHDEV(DEV_PTYS_MAJOR, 4)), "/dev/pty4", exists_pty, S_IFCHR, true},
- {"/dev/pty5", BRACK(FHDEV(DEV_PTYS_MAJOR, 5)), "/dev/pty5", exists_pty, S_IFCHR, true},
- {"/dev/pty6", BRACK(FHDEV(DEV_PTYS_MAJOR, 6)), "/dev/pty6", exists_pty, S_IFCHR, true},
- {"/dev/pty7", BRACK(FHDEV(DEV_PTYS_MAJOR, 7)), "/dev/pty7", exists_pty, S_IFCHR, true},
- {"/dev/pty8", BRACK(FHDEV(DEV_PTYS_MAJOR, 8)), "/dev/pty8", exists_pty, S_IFCHR, true},
- {"/dev/pty9", BRACK(FHDEV(DEV_PTYS_MAJOR, 9)), "/dev/pty9", exists_pty, S_IFCHR, true},
- {"/dev/pty10", BRACK(FHDEV(DEV_PTYS_MAJOR, 10)), "/dev/pty10", exists_pty, S_IFCHR, true},
- {"/dev/pty11", BRACK(FHDEV(DEV_PTYS_MAJOR, 11)), "/dev/pty11", exists_pty, S_IFCHR, true},
- {"/dev/pty12", BRACK(FHDEV(DEV_PTYS_MAJOR, 12)), "/dev/pty12", exists_pty, S_IFCHR, true},
- {"/dev/pty13", BRACK(FHDEV(DEV_PTYS_MAJOR, 13)), "/dev/pty13", exists_pty, S_IFCHR, true},
- {"/dev/pty14", BRACK(FHDEV(DEV_PTYS_MAJOR, 14)), "/dev/pty14", exists_pty, S_IFCHR, true},
- {"/dev/pty15", BRACK(FHDEV(DEV_PTYS_MAJOR, 15)), "/dev/pty15", exists_pty, S_IFCHR, true},
- {"/dev/pty16", BRACK(FHDEV(DEV_PTYS_MAJOR, 16)), "/dev/pty16", exists_pty, S_IFCHR, true},
- {"/dev/pty17", BRACK(FHDEV(DEV_PTYS_MAJOR, 17)), "/dev/pty17", exists_pty, S_IFCHR, true},
- {"/dev/pty18", BRACK(FHDEV(DEV_PTYS_MAJOR, 18)), "/dev/pty18", exists_pty, S_IFCHR, true},
- {"/dev/pty19", BRACK(FHDEV(DEV_PTYS_MAJOR, 19)), "/dev/pty19", exists_pty, S_IFCHR, true},
- {"/dev/pty20", BRACK(FHDEV(DEV_PTYS_MAJOR, 20)), "/dev/pty20", exists_pty, S_IFCHR, true},
- {"/dev/pty21", BRACK(FHDEV(DEV_PTYS_MAJOR, 21)), "/dev/pty21", exists_pty, S_IFCHR, true},
- {"/dev/pty22", BRACK(FHDEV(DEV_PTYS_MAJOR, 22)), "/dev/pty22", exists_pty, S_IFCHR, true},
- {"/dev/pty23", BRACK(FHDEV(DEV_PTYS_MAJOR, 23)), "/dev/pty23", exists_pty, S_IFCHR, true},
- {"/dev/pty24", BRACK(FHDEV(DEV_PTYS_MAJOR, 24)), "/dev/pty24", exists_pty, S_IFCHR, true},
- {"/dev/pty25", BRACK(FHDEV(DEV_PTYS_MAJOR, 25)), "/dev/pty25", exists_pty, S_IFCHR, true},
- {"/dev/pty26", BRACK(FHDEV(DEV_PTYS_MAJOR, 26)), "/dev/pty26", exists_pty, S_IFCHR, true},
- {"/dev/pty27", BRACK(FHDEV(DEV_PTYS_MAJOR, 27)), "/dev/pty27", exists_pty, S_IFCHR, true},
- {"/dev/pty28", BRACK(FHDEV(DEV_PTYS_MAJOR, 28)), "/dev/pty28", exists_pty, S_IFCHR, true},
- {"/dev/pty29", BRACK(FHDEV(DEV_PTYS_MAJOR, 29)), "/dev/pty29", exists_pty, S_IFCHR, true},
- {"/dev/pty30", BRACK(FHDEV(DEV_PTYS_MAJOR, 30)), "/dev/pty30", exists_pty, S_IFCHR, true},
- {"/dev/pty31", BRACK(FHDEV(DEV_PTYS_MAJOR, 31)), "/dev/pty31", exists_pty, S_IFCHR, true},
- {"/dev/pty32", BRACK(FHDEV(DEV_PTYS_MAJOR, 32)), "/dev/pty32", exists_pty, S_IFCHR, true},
- {"/dev/pty33", BRACK(FHDEV(DEV_PTYS_MAJOR, 33)), "/dev/pty33", exists_pty, S_IFCHR, true},
- {"/dev/pty34", BRACK(FHDEV(DEV_PTYS_MAJOR, 34)), "/dev/pty34", exists_pty, S_IFCHR, true},
- {"/dev/pty35", BRACK(FHDEV(DEV_PTYS_MAJOR, 35)), "/dev/pty35", exists_pty, S_IFCHR, true},
- {"/dev/pty36", BRACK(FHDEV(DEV_PTYS_MAJOR, 36)), "/dev/pty36", exists_pty, S_IFCHR, true},
- {"/dev/pty37", BRACK(FHDEV(DEV_PTYS_MAJOR, 37)), "/dev/pty37", exists_pty, S_IFCHR, true},
- {"/dev/pty38", BRACK(FHDEV(DEV_PTYS_MAJOR, 38)), "/dev/pty38", exists_pty, S_IFCHR, true},
- {"/dev/pty39", BRACK(FHDEV(DEV_PTYS_MAJOR, 39)), "/dev/pty39", exists_pty, S_IFCHR, true},
- {"/dev/pty40", BRACK(FHDEV(DEV_PTYS_MAJOR, 40)), "/dev/pty40", exists_pty, S_IFCHR, true},
- {"/dev/pty41", BRACK(FHDEV(DEV_PTYS_MAJOR, 41)), "/dev/pty41", exists_pty, S_IFCHR, true},
- {"/dev/pty42", BRACK(FHDEV(DEV_PTYS_MAJOR, 42)), "/dev/pty42", exists_pty, S_IFCHR, true},
- {"/dev/pty43", BRACK(FHDEV(DEV_PTYS_MAJOR, 43)), "/dev/pty43", exists_pty, S_IFCHR, true},
- {"/dev/pty44", BRACK(FHDEV(DEV_PTYS_MAJOR, 44)), "/dev/pty44", exists_pty, S_IFCHR, true},
- {"/dev/pty45", BRACK(FHDEV(DEV_PTYS_MAJOR, 45)), "/dev/pty45", exists_pty, S_IFCHR, true},
- {"/dev/pty46", BRACK(FHDEV(DEV_PTYS_MAJOR, 46)), "/dev/pty46", exists_pty, S_IFCHR, true},
- {"/dev/pty47", BRACK(FHDEV(DEV_PTYS_MAJOR, 47)), "/dev/pty47", exists_pty, S_IFCHR, true},
- {"/dev/pty48", BRACK(FHDEV(DEV_PTYS_MAJOR, 48)), "/dev/pty48", exists_pty, S_IFCHR, true},
- {"/dev/pty49", BRACK(FHDEV(DEV_PTYS_MAJOR, 49)), "/dev/pty49", exists_pty, S_IFCHR, true},
- {"/dev/pty50", BRACK(FHDEV(DEV_PTYS_MAJOR, 50)), "/dev/pty50", exists_pty, S_IFCHR, true},
- {"/dev/pty51", BRACK(FHDEV(DEV_PTYS_MAJOR, 51)), "/dev/pty51", exists_pty, S_IFCHR, true},
- {"/dev/pty52", BRACK(FHDEV(DEV_PTYS_MAJOR, 52)), "/dev/pty52", exists_pty, S_IFCHR, true},
- {"/dev/pty53", BRACK(FHDEV(DEV_PTYS_MAJOR, 53)), "/dev/pty53", exists_pty, S_IFCHR, true},
- {"/dev/pty54", BRACK(FHDEV(DEV_PTYS_MAJOR, 54)), "/dev/pty54", exists_pty, S_IFCHR, true},
- {"/dev/pty55", BRACK(FHDEV(DEV_PTYS_MAJOR, 55)), "/dev/pty55", exists_pty, S_IFCHR, true},
- {"/dev/pty56", BRACK(FHDEV(DEV_PTYS_MAJOR, 56)), "/dev/pty56", exists_pty, S_IFCHR, true},
- {"/dev/pty57", BRACK(FHDEV(DEV_PTYS_MAJOR, 57)), "/dev/pty57", exists_pty, S_IFCHR, true},
- {"/dev/pty58", BRACK(FHDEV(DEV_PTYS_MAJOR, 58)), "/dev/pty58", exists_pty, S_IFCHR, true},
- {"/dev/pty59", BRACK(FHDEV(DEV_PTYS_MAJOR, 59)), "/dev/pty59", exists_pty, S_IFCHR, true},
- {"/dev/pty60", BRACK(FHDEV(DEV_PTYS_MAJOR, 60)), "/dev/pty60", exists_pty, S_IFCHR, true},
- {"/dev/pty61", BRACK(FHDEV(DEV_PTYS_MAJOR, 61)), "/dev/pty61", exists_pty, S_IFCHR, true},
- {"/dev/pty62", BRACK(FHDEV(DEV_PTYS_MAJOR, 62)), "/dev/pty62", exists_pty, S_IFCHR, true},
- {"/dev/pty63", BRACK(FHDEV(DEV_PTYS_MAJOR, 63)), "/dev/pty63", exists_pty, S_IFCHR, true},
- {"/dev/random", BRACK(FH_RANDOM), "\\Device\\Null", exists_ntdev, S_IFCHR, true},
- {"/dev/scd0", BRACK(FHDEV(DEV_CDROM_MAJOR, 0)), "\\Device\\CdRom0", exists_ntdev, S_IFBLK, true},
- {"/dev/scd1", BRACK(FHDEV(DEV_CDROM_MAJOR, 1)), "\\Device\\CdRom1", exists_ntdev, S_IFBLK, true},
- {"/dev/scd2", BRACK(FHDEV(DEV_CDROM_MAJOR, 2)), "\\Device\\CdRom2", exists_ntdev, S_IFBLK, true},
- {"/dev/scd3", BRACK(FHDEV(DEV_CDROM_MAJOR, 3)), "\\Device\\CdRom3", exists_ntdev, S_IFBLK, true},
- {"/dev/scd4", BRACK(FHDEV(DEV_CDROM_MAJOR, 4)), "\\Device\\CdRom4", exists_ntdev, S_IFBLK, true},
- {"/dev/scd5", BRACK(FHDEV(DEV_CDROM_MAJOR, 5)), "\\Device\\CdRom5", exists_ntdev, S_IFBLK, true},
- {"/dev/scd6", BRACK(FHDEV(DEV_CDROM_MAJOR, 6)), "\\Device\\CdRom6", exists_ntdev, S_IFBLK, true},
- {"/dev/scd7", BRACK(FHDEV(DEV_CDROM_MAJOR, 7)), "\\Device\\CdRom7", exists_ntdev, S_IFBLK, true},
- {"/dev/scd8", BRACK(FHDEV(DEV_CDROM_MAJOR, 8)), "\\Device\\CdRom8", exists_ntdev, S_IFBLK, true},
- {"/dev/scd9", BRACK(FHDEV(DEV_CDROM_MAJOR, 9)), "\\Device\\CdRom9", exists_ntdev, S_IFBLK, true},
- {"/dev/scd10", BRACK(FHDEV(DEV_CDROM_MAJOR, 10)), "\\Device\\CdRom10", exists_ntdev, S_IFBLK, true},
- {"/dev/scd11", BRACK(FHDEV(DEV_CDROM_MAJOR, 11)), "\\Device\\CdRom11", exists_ntdev, S_IFBLK, true},
- {"/dev/scd12", BRACK(FHDEV(DEV_CDROM_MAJOR, 12)), "\\Device\\CdRom12", exists_ntdev, S_IFBLK, true},
- {"/dev/scd13", BRACK(FHDEV(DEV_CDROM_MAJOR, 13)), "\\Device\\CdRom13", exists_ntdev, S_IFBLK, true},
- {"/dev/scd14", BRACK(FHDEV(DEV_CDROM_MAJOR, 14)), "\\Device\\CdRom14", exists_ntdev, S_IFBLK, true},
- {"/dev/scd15", BRACK(FHDEV(DEV_CDROM_MAJOR, 15)), "\\Device\\CdRom15", exists_ntdev, S_IFBLK, true},
- {"/dev/sda", BRACK(FH_SDA), "\\Device\\Harddisk0\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdb", BRACK(FH_SDB), "\\Device\\Harddisk1\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdc", BRACK(FH_SDC), "\\Device\\Harddisk2\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdd", BRACK(FH_SDD), "\\Device\\Harddisk3\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sde", BRACK(FH_SDE), "\\Device\\Harddisk4\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdf", BRACK(FH_SDF), "\\Device\\Harddisk5\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdg", BRACK(FH_SDG), "\\Device\\Harddisk6\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdh", BRACK(FH_SDH), "\\Device\\Harddisk7\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdi", BRACK(FH_SDI), "\\Device\\Harddisk8\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdj", BRACK(FH_SDJ), "\\Device\\Harddisk9\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdk", BRACK(FH_SDK), "\\Device\\Harddisk10\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdl", BRACK(FH_SDL), "\\Device\\Harddisk11\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdm", BRACK(FH_SDM), "\\Device\\Harddisk12\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdn", BRACK(FH_SDN), "\\Device\\Harddisk13\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdo", BRACK(FH_SDO), "\\Device\\Harddisk14\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdp", BRACK(FH_SDP), "\\Device\\Harddisk15\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdq", BRACK(FH_SDQ), "\\Device\\Harddisk16\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdr", BRACK(FH_SDR), "\\Device\\Harddisk17\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sds", BRACK(FH_SDS), "\\Device\\Harddisk18\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdt", BRACK(FH_SDT), "\\Device\\Harddisk19\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdu", BRACK(FH_SDU), "\\Device\\Harddisk20\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdv", BRACK(FH_SDV), "\\Device\\Harddisk21\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdw", BRACK(FH_SDW), "\\Device\\Harddisk22\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdx", BRACK(FH_SDX), "\\Device\\Harddisk23\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdy", BRACK(FH_SDY), "\\Device\\Harddisk24\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdz", BRACK(FH_SDZ), "\\Device\\Harddisk25\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sda1", BRACK(FH_SDA | 1), "\\Device\\Harddisk0\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sda2", BRACK(FH_SDA | 2), "\\Device\\Harddisk0\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sda3", BRACK(FH_SDA | 3), "\\Device\\Harddisk0\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sda4", BRACK(FH_SDA | 4), "\\Device\\Harddisk0\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sda5", BRACK(FH_SDA | 5), "\\Device\\Harddisk0\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sda6", BRACK(FH_SDA | 6), "\\Device\\Harddisk0\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sda7", BRACK(FH_SDA | 7), "\\Device\\Harddisk0\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sda8", BRACK(FH_SDA | 8), "\\Device\\Harddisk0\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sda9", BRACK(FH_SDA | 9), "\\Device\\Harddisk0\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sda10", BRACK(FH_SDA | 10), "\\Device\\Harddisk0\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sda11", BRACK(FH_SDA | 11), "\\Device\\Harddisk0\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sda12", BRACK(FH_SDA | 12), "\\Device\\Harddisk0\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sda13", BRACK(FH_SDA | 13), "\\Device\\Harddisk0\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sda14", BRACK(FH_SDA | 14), "\\Device\\Harddisk0\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sda15", BRACK(FH_SDA | 15), "\\Device\\Harddisk0\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdb1", BRACK(FH_SDB | 1), "\\Device\\Harddisk1\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdb2", BRACK(FH_SDB | 2), "\\Device\\Harddisk1\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdb3", BRACK(FH_SDB | 3), "\\Device\\Harddisk1\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdb4", BRACK(FH_SDB | 4), "\\Device\\Harddisk1\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdb5", BRACK(FH_SDB | 5), "\\Device\\Harddisk1\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdb6", BRACK(FH_SDB | 6), "\\Device\\Harddisk1\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdb7", BRACK(FH_SDB | 7), "\\Device\\Harddisk1\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdb8", BRACK(FH_SDB | 8), "\\Device\\Harddisk1\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdb9", BRACK(FH_SDB | 9), "\\Device\\Harddisk1\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdb10", BRACK(FH_SDB | 10), "\\Device\\Harddisk1\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdb11", BRACK(FH_SDB | 11), "\\Device\\Harddisk1\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdb12", BRACK(FH_SDB | 12), "\\Device\\Harddisk1\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdb13", BRACK(FH_SDB | 13), "\\Device\\Harddisk1\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdb14", BRACK(FH_SDB | 14), "\\Device\\Harddisk1\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdb15", BRACK(FH_SDB | 15), "\\Device\\Harddisk1\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdc1", BRACK(FH_SDC | 1), "\\Device\\Harddisk2\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdc2", BRACK(FH_SDC | 2), "\\Device\\Harddisk2\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdc3", BRACK(FH_SDC | 3), "\\Device\\Harddisk2\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdc4", BRACK(FH_SDC | 4), "\\Device\\Harddisk2\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdc5", BRACK(FH_SDC | 5), "\\Device\\Harddisk2\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdc6", BRACK(FH_SDC | 6), "\\Device\\Harddisk2\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdc7", BRACK(FH_SDC | 7), "\\Device\\Harddisk2\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdc8", BRACK(FH_SDC | 8), "\\Device\\Harddisk2\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdc9", BRACK(FH_SDC | 9), "\\Device\\Harddisk2\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdc10", BRACK(FH_SDC | 10), "\\Device\\Harddisk2\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdc11", BRACK(FH_SDC | 11), "\\Device\\Harddisk2\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdc12", BRACK(FH_SDC | 12), "\\Device\\Harddisk2\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdc13", BRACK(FH_SDC | 13), "\\Device\\Harddisk2\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdc14", BRACK(FH_SDC | 14), "\\Device\\Harddisk2\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdc15", BRACK(FH_SDC | 15), "\\Device\\Harddisk2\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdd1", BRACK(FH_SDD | 1), "\\Device\\Harddisk3\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdd2", BRACK(FH_SDD | 2), "\\Device\\Harddisk3\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdd3", BRACK(FH_SDD | 3), "\\Device\\Harddisk3\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdd4", BRACK(FH_SDD | 4), "\\Device\\Harddisk3\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdd5", BRACK(FH_SDD | 5), "\\Device\\Harddisk3\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdd6", BRACK(FH_SDD | 6), "\\Device\\Harddisk3\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdd7", BRACK(FH_SDD | 7), "\\Device\\Harddisk3\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdd8", BRACK(FH_SDD | 8), "\\Device\\Harddisk3\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdd9", BRACK(FH_SDD | 9), "\\Device\\Harddisk3\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdd10", BRACK(FH_SDD | 10), "\\Device\\Harddisk3\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdd11", BRACK(FH_SDD | 11), "\\Device\\Harddisk3\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdd12", BRACK(FH_SDD | 12), "\\Device\\Harddisk3\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdd13", BRACK(FH_SDD | 13), "\\Device\\Harddisk3\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdd14", BRACK(FH_SDD | 14), "\\Device\\Harddisk3\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdd15", BRACK(FH_SDD | 15), "\\Device\\Harddisk3\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sde1", BRACK(FH_SDE | 1), "\\Device\\Harddisk4\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sde2", BRACK(FH_SDE | 2), "\\Device\\Harddisk4\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sde3", BRACK(FH_SDE | 3), "\\Device\\Harddisk4\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sde4", BRACK(FH_SDE | 4), "\\Device\\Harddisk4\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sde5", BRACK(FH_SDE | 5), "\\Device\\Harddisk4\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sde6", BRACK(FH_SDE | 6), "\\Device\\Harddisk4\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sde7", BRACK(FH_SDE | 7), "\\Device\\Harddisk4\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sde8", BRACK(FH_SDE | 8), "\\Device\\Harddisk4\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sde9", BRACK(FH_SDE | 9), "\\Device\\Harddisk4\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sde10", BRACK(FH_SDE | 10), "\\Device\\Harddisk4\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sde11", BRACK(FH_SDE | 11), "\\Device\\Harddisk4\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sde12", BRACK(FH_SDE | 12), "\\Device\\Harddisk4\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sde13", BRACK(FH_SDE | 13), "\\Device\\Harddisk4\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sde14", BRACK(FH_SDE | 14), "\\Device\\Harddisk4\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sde15", BRACK(FH_SDE | 15), "\\Device\\Harddisk4\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdf1", BRACK(FH_SDF | 1), "\\Device\\Harddisk5\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdf2", BRACK(FH_SDF | 2), "\\Device\\Harddisk5\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdf3", BRACK(FH_SDF | 3), "\\Device\\Harddisk5\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdf4", BRACK(FH_SDF | 4), "\\Device\\Harddisk5\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdf5", BRACK(FH_SDF | 5), "\\Device\\Harddisk5\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdf6", BRACK(FH_SDF | 6), "\\Device\\Harddisk5\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdf7", BRACK(FH_SDF | 7), "\\Device\\Harddisk5\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdf8", BRACK(FH_SDF | 8), "\\Device\\Harddisk5\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdf9", BRACK(FH_SDF | 9), "\\Device\\Harddisk5\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdf10", BRACK(FH_SDF | 10), "\\Device\\Harddisk5\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdf11", BRACK(FH_SDF | 11), "\\Device\\Harddisk5\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdf12", BRACK(FH_SDF | 12), "\\Device\\Harddisk5\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdf13", BRACK(FH_SDF | 13), "\\Device\\Harddisk5\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdf14", BRACK(FH_SDF | 14), "\\Device\\Harddisk5\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdf15", BRACK(FH_SDF | 15), "\\Device\\Harddisk5\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdg1", BRACK(FH_SDG | 1), "\\Device\\Harddisk6\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdg2", BRACK(FH_SDG | 2), "\\Device\\Harddisk6\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdg3", BRACK(FH_SDG | 3), "\\Device\\Harddisk6\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdg4", BRACK(FH_SDG | 4), "\\Device\\Harddisk6\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdg5", BRACK(FH_SDG | 5), "\\Device\\Harddisk6\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdg6", BRACK(FH_SDG | 6), "\\Device\\Harddisk6\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdg7", BRACK(FH_SDG | 7), "\\Device\\Harddisk6\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdg8", BRACK(FH_SDG | 8), "\\Device\\Harddisk6\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdg9", BRACK(FH_SDG | 9), "\\Device\\Harddisk6\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdg10", BRACK(FH_SDG | 10), "\\Device\\Harddisk6\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdg11", BRACK(FH_SDG | 11), "\\Device\\Harddisk6\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdg12", BRACK(FH_SDG | 12), "\\Device\\Harddisk6\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdg13", BRACK(FH_SDG | 13), "\\Device\\Harddisk6\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdg14", BRACK(FH_SDG | 14), "\\Device\\Harddisk6\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdg15", BRACK(FH_SDG | 15), "\\Device\\Harddisk6\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdh1", BRACK(FH_SDH | 1), "\\Device\\Harddisk7\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdh2", BRACK(FH_SDH | 2), "\\Device\\Harddisk7\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdh3", BRACK(FH_SDH | 3), "\\Device\\Harddisk7\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdh4", BRACK(FH_SDH | 4), "\\Device\\Harddisk7\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdh5", BRACK(FH_SDH | 5), "\\Device\\Harddisk7\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdh6", BRACK(FH_SDH | 6), "\\Device\\Harddisk7\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdh7", BRACK(FH_SDH | 7), "\\Device\\Harddisk7\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdh8", BRACK(FH_SDH | 8), "\\Device\\Harddisk7\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdh9", BRACK(FH_SDH | 9), "\\Device\\Harddisk7\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdh10", BRACK(FH_SDH | 10), "\\Device\\Harddisk7\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdh11", BRACK(FH_SDH | 11), "\\Device\\Harddisk7\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdh12", BRACK(FH_SDH | 12), "\\Device\\Harddisk7\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdh13", BRACK(FH_SDH | 13), "\\Device\\Harddisk7\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdh14", BRACK(FH_SDH | 14), "\\Device\\Harddisk7\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdh15", BRACK(FH_SDH | 15), "\\Device\\Harddisk7\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdi1", BRACK(FH_SDI | 1), "\\Device\\Harddisk8\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdi2", BRACK(FH_SDI | 2), "\\Device\\Harddisk8\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdi3", BRACK(FH_SDI | 3), "\\Device\\Harddisk8\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdi4", BRACK(FH_SDI | 4), "\\Device\\Harddisk8\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdi5", BRACK(FH_SDI | 5), "\\Device\\Harddisk8\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdi6", BRACK(FH_SDI | 6), "\\Device\\Harddisk8\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdi7", BRACK(FH_SDI | 7), "\\Device\\Harddisk8\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdi8", BRACK(FH_SDI | 8), "\\Device\\Harddisk8\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdi9", BRACK(FH_SDI | 9), "\\Device\\Harddisk8\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdi10", BRACK(FH_SDI | 10), "\\Device\\Harddisk8\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdi11", BRACK(FH_SDI | 11), "\\Device\\Harddisk8\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdi12", BRACK(FH_SDI | 12), "\\Device\\Harddisk8\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdi13", BRACK(FH_SDI | 13), "\\Device\\Harddisk8\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdi14", BRACK(FH_SDI | 14), "\\Device\\Harddisk8\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdi15", BRACK(FH_SDI | 15), "\\Device\\Harddisk8\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdj1", BRACK(FH_SDJ | 1), "\\Device\\Harddisk9\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdj2", BRACK(FH_SDJ | 2), "\\Device\\Harddisk9\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdj3", BRACK(FH_SDJ | 3), "\\Device\\Harddisk9\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdj4", BRACK(FH_SDJ | 4), "\\Device\\Harddisk9\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdj5", BRACK(FH_SDJ | 5), "\\Device\\Harddisk9\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdj6", BRACK(FH_SDJ | 6), "\\Device\\Harddisk9\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdj7", BRACK(FH_SDJ | 7), "\\Device\\Harddisk9\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdj8", BRACK(FH_SDJ | 8), "\\Device\\Harddisk9\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdj9", BRACK(FH_SDJ | 9), "\\Device\\Harddisk9\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdj10", BRACK(FH_SDJ | 10), "\\Device\\Harddisk9\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdj11", BRACK(FH_SDJ | 11), "\\Device\\Harddisk9\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdj12", BRACK(FH_SDJ | 12), "\\Device\\Harddisk9\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdj13", BRACK(FH_SDJ | 13), "\\Device\\Harddisk9\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdj14", BRACK(FH_SDJ | 14), "\\Device\\Harddisk9\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdj15", BRACK(FH_SDJ | 15), "\\Device\\Harddisk9\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdk1", BRACK(FH_SDK | 1), "\\Device\\Harddisk10\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdk2", BRACK(FH_SDK | 2), "\\Device\\Harddisk10\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdk3", BRACK(FH_SDK | 3), "\\Device\\Harddisk10\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdk4", BRACK(FH_SDK | 4), "\\Device\\Harddisk10\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdk5", BRACK(FH_SDK | 5), "\\Device\\Harddisk10\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdk6", BRACK(FH_SDK | 6), "\\Device\\Harddisk10\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdk7", BRACK(FH_SDK | 7), "\\Device\\Harddisk10\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdk8", BRACK(FH_SDK | 8), "\\Device\\Harddisk10\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdk9", BRACK(FH_SDK | 9), "\\Device\\Harddisk10\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdk10", BRACK(FH_SDK | 10), "\\Device\\Harddisk10\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdk11", BRACK(FH_SDK | 11), "\\Device\\Harddisk10\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdk12", BRACK(FH_SDK | 12), "\\Device\\Harddisk10\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdk13", BRACK(FH_SDK | 13), "\\Device\\Harddisk10\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdk14", BRACK(FH_SDK | 14), "\\Device\\Harddisk10\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdk15", BRACK(FH_SDK | 15), "\\Device\\Harddisk10\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdl1", BRACK(FH_SDL | 1), "\\Device\\Harddisk11\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdl2", BRACK(FH_SDL | 2), "\\Device\\Harddisk11\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdl3", BRACK(FH_SDL | 3), "\\Device\\Harddisk11\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdl4", BRACK(FH_SDL | 4), "\\Device\\Harddisk11\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdl5", BRACK(FH_SDL | 5), "\\Device\\Harddisk11\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdl6", BRACK(FH_SDL | 6), "\\Device\\Harddisk11\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdl7", BRACK(FH_SDL | 7), "\\Device\\Harddisk11\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdl8", BRACK(FH_SDL | 8), "\\Device\\Harddisk11\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdl9", BRACK(FH_SDL | 9), "\\Device\\Harddisk11\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdl10", BRACK(FH_SDL | 10), "\\Device\\Harddisk11\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdl11", BRACK(FH_SDL | 11), "\\Device\\Harddisk11\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdl12", BRACK(FH_SDL | 12), "\\Device\\Harddisk11\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdl13", BRACK(FH_SDL | 13), "\\Device\\Harddisk11\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdl14", BRACK(FH_SDL | 14), "\\Device\\Harddisk11\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdl15", BRACK(FH_SDL | 15), "\\Device\\Harddisk11\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdm1", BRACK(FH_SDM | 1), "\\Device\\Harddisk12\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdm2", BRACK(FH_SDM | 2), "\\Device\\Harddisk12\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdm3", BRACK(FH_SDM | 3), "\\Device\\Harddisk12\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdm4", BRACK(FH_SDM | 4), "\\Device\\Harddisk12\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdm5", BRACK(FH_SDM | 5), "\\Device\\Harddisk12\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdm6", BRACK(FH_SDM | 6), "\\Device\\Harddisk12\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdm7", BRACK(FH_SDM | 7), "\\Device\\Harddisk12\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdm8", BRACK(FH_SDM | 8), "\\Device\\Harddisk12\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdm9", BRACK(FH_SDM | 9), "\\Device\\Harddisk12\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdm10", BRACK(FH_SDM | 10), "\\Device\\Harddisk12\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdm11", BRACK(FH_SDM | 11), "\\Device\\Harddisk12\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdm12", BRACK(FH_SDM | 12), "\\Device\\Harddisk12\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdm13", BRACK(FH_SDM | 13), "\\Device\\Harddisk12\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdm14", BRACK(FH_SDM | 14), "\\Device\\Harddisk12\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdm15", BRACK(FH_SDM | 15), "\\Device\\Harddisk12\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdn1", BRACK(FH_SDN | 1), "\\Device\\Harddisk13\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdn2", BRACK(FH_SDN | 2), "\\Device\\Harddisk13\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdn3", BRACK(FH_SDN | 3), "\\Device\\Harddisk13\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdn4", BRACK(FH_SDN | 4), "\\Device\\Harddisk13\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdn5", BRACK(FH_SDN | 5), "\\Device\\Harddisk13\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdn6", BRACK(FH_SDN | 6), "\\Device\\Harddisk13\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdn7", BRACK(FH_SDN | 7), "\\Device\\Harddisk13\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdn8", BRACK(FH_SDN | 8), "\\Device\\Harddisk13\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdn9", BRACK(FH_SDN | 9), "\\Device\\Harddisk13\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdn10", BRACK(FH_SDN | 10), "\\Device\\Harddisk13\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdn11", BRACK(FH_SDN | 11), "\\Device\\Harddisk13\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdn12", BRACK(FH_SDN | 12), "\\Device\\Harddisk13\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdn13", BRACK(FH_SDN | 13), "\\Device\\Harddisk13\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdn14", BRACK(FH_SDN | 14), "\\Device\\Harddisk13\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdn15", BRACK(FH_SDN | 15), "\\Device\\Harddisk13\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdo1", BRACK(FH_SDO | 1), "\\Device\\Harddisk14\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdo2", BRACK(FH_SDO | 2), "\\Device\\Harddisk14\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdo3", BRACK(FH_SDO | 3), "\\Device\\Harddisk14\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdo4", BRACK(FH_SDO | 4), "\\Device\\Harddisk14\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdo5", BRACK(FH_SDO | 5), "\\Device\\Harddisk14\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdo6", BRACK(FH_SDO | 6), "\\Device\\Harddisk14\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdo7", BRACK(FH_SDO | 7), "\\Device\\Harddisk14\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdo8", BRACK(FH_SDO | 8), "\\Device\\Harddisk14\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdo9", BRACK(FH_SDO | 9), "\\Device\\Harddisk14\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdo10", BRACK(FH_SDO | 10), "\\Device\\Harddisk14\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdo11", BRACK(FH_SDO | 11), "\\Device\\Harddisk14\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdo12", BRACK(FH_SDO | 12), "\\Device\\Harddisk14\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdo13", BRACK(FH_SDO | 13), "\\Device\\Harddisk14\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdo14", BRACK(FH_SDO | 14), "\\Device\\Harddisk14\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdo15", BRACK(FH_SDO | 15), "\\Device\\Harddisk14\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdp1", BRACK(FH_SDP | 1), "\\Device\\Harddisk15\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdp2", BRACK(FH_SDP | 2), "\\Device\\Harddisk15\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdp3", BRACK(FH_SDP | 3), "\\Device\\Harddisk15\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdp4", BRACK(FH_SDP | 4), "\\Device\\Harddisk15\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdp5", BRACK(FH_SDP | 5), "\\Device\\Harddisk15\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdp6", BRACK(FH_SDP | 6), "\\Device\\Harddisk15\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdp7", BRACK(FH_SDP | 7), "\\Device\\Harddisk15\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdp8", BRACK(FH_SDP | 8), "\\Device\\Harddisk15\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdp9", BRACK(FH_SDP | 9), "\\Device\\Harddisk15\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdp10", BRACK(FH_SDP | 10), "\\Device\\Harddisk15\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdp11", BRACK(FH_SDP | 11), "\\Device\\Harddisk15\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdp12", BRACK(FH_SDP | 12), "\\Device\\Harddisk15\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdp13", BRACK(FH_SDP | 13), "\\Device\\Harddisk15\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdp14", BRACK(FH_SDP | 14), "\\Device\\Harddisk15\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdp15", BRACK(FH_SDP | 15), "\\Device\\Harddisk15\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdq1", BRACK(FH_SDQ | 1), "\\Device\\Harddisk16\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdq2", BRACK(FH_SDQ | 2), "\\Device\\Harddisk16\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdq3", BRACK(FH_SDQ | 3), "\\Device\\Harddisk16\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdq4", BRACK(FH_SDQ | 4), "\\Device\\Harddisk16\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdq5", BRACK(FH_SDQ | 5), "\\Device\\Harddisk16\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdq6", BRACK(FH_SDQ | 6), "\\Device\\Harddisk16\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdq7", BRACK(FH_SDQ | 7), "\\Device\\Harddisk16\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdq8", BRACK(FH_SDQ | 8), "\\Device\\Harddisk16\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdq9", BRACK(FH_SDQ | 9), "\\Device\\Harddisk16\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdq10", BRACK(FH_SDQ | 10), "\\Device\\Harddisk16\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdq11", BRACK(FH_SDQ | 11), "\\Device\\Harddisk16\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdq12", BRACK(FH_SDQ | 12), "\\Device\\Harddisk16\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdq13", BRACK(FH_SDQ | 13), "\\Device\\Harddisk16\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdq14", BRACK(FH_SDQ | 14), "\\Device\\Harddisk16\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdq15", BRACK(FH_SDQ | 15), "\\Device\\Harddisk16\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdr1", BRACK(FH_SDR | 1), "\\Device\\Harddisk17\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdr2", BRACK(FH_SDR | 2), "\\Device\\Harddisk17\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdr3", BRACK(FH_SDR | 3), "\\Device\\Harddisk17\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdr4", BRACK(FH_SDR | 4), "\\Device\\Harddisk17\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdr5", BRACK(FH_SDR | 5), "\\Device\\Harddisk17\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdr6", BRACK(FH_SDR | 6), "\\Device\\Harddisk17\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdr7", BRACK(FH_SDR | 7), "\\Device\\Harddisk17\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdr8", BRACK(FH_SDR | 8), "\\Device\\Harddisk17\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdr9", BRACK(FH_SDR | 9), "\\Device\\Harddisk17\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdr10", BRACK(FH_SDR | 10), "\\Device\\Harddisk17\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdr11", BRACK(FH_SDR | 11), "\\Device\\Harddisk17\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdr12", BRACK(FH_SDR | 12), "\\Device\\Harddisk17\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdr13", BRACK(FH_SDR | 13), "\\Device\\Harddisk17\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdr14", BRACK(FH_SDR | 14), "\\Device\\Harddisk17\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdr15", BRACK(FH_SDR | 15), "\\Device\\Harddisk17\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sds1", BRACK(FH_SDS | 1), "\\Device\\Harddisk18\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sds2", BRACK(FH_SDS | 2), "\\Device\\Harddisk18\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sds3", BRACK(FH_SDS | 3), "\\Device\\Harddisk18\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sds4", BRACK(FH_SDS | 4), "\\Device\\Harddisk18\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sds5", BRACK(FH_SDS | 5), "\\Device\\Harddisk18\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sds6", BRACK(FH_SDS | 6), "\\Device\\Harddisk18\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sds7", BRACK(FH_SDS | 7), "\\Device\\Harddisk18\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sds8", BRACK(FH_SDS | 8), "\\Device\\Harddisk18\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sds9", BRACK(FH_SDS | 9), "\\Device\\Harddisk18\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sds10", BRACK(FH_SDS | 10), "\\Device\\Harddisk18\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sds11", BRACK(FH_SDS | 11), "\\Device\\Harddisk18\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sds12", BRACK(FH_SDS | 12), "\\Device\\Harddisk18\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sds13", BRACK(FH_SDS | 13), "\\Device\\Harddisk18\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sds14", BRACK(FH_SDS | 14), "\\Device\\Harddisk18\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sds15", BRACK(FH_SDS | 15), "\\Device\\Harddisk18\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdt1", BRACK(FH_SDT | 1), "\\Device\\Harddisk19\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdt2", BRACK(FH_SDT | 2), "\\Device\\Harddisk19\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdt3", BRACK(FH_SDT | 3), "\\Device\\Harddisk19\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdt4", BRACK(FH_SDT | 4), "\\Device\\Harddisk19\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdt5", BRACK(FH_SDT | 5), "\\Device\\Harddisk19\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdt6", BRACK(FH_SDT | 6), "\\Device\\Harddisk19\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdt7", BRACK(FH_SDT | 7), "\\Device\\Harddisk19\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdt8", BRACK(FH_SDT | 8), "\\Device\\Harddisk19\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdt9", BRACK(FH_SDT | 9), "\\Device\\Harddisk19\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdt10", BRACK(FH_SDT | 10), "\\Device\\Harddisk19\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdt11", BRACK(FH_SDT | 11), "\\Device\\Harddisk19\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdt12", BRACK(FH_SDT | 12), "\\Device\\Harddisk19\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdt13", BRACK(FH_SDT | 13), "\\Device\\Harddisk19\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdt14", BRACK(FH_SDT | 14), "\\Device\\Harddisk19\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdt15", BRACK(FH_SDT | 15), "\\Device\\Harddisk19\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdu1", BRACK(FH_SDU | 1), "\\Device\\Harddisk20\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdu2", BRACK(FH_SDU | 2), "\\Device\\Harddisk20\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdu3", BRACK(FH_SDU | 3), "\\Device\\Harddisk20\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdu4", BRACK(FH_SDU | 4), "\\Device\\Harddisk20\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdu5", BRACK(FH_SDU | 5), "\\Device\\Harddisk20\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdu6", BRACK(FH_SDU | 6), "\\Device\\Harddisk20\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdu7", BRACK(FH_SDU | 7), "\\Device\\Harddisk20\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdu8", BRACK(FH_SDU | 8), "\\Device\\Harddisk20\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdu9", BRACK(FH_SDU | 9), "\\Device\\Harddisk20\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdu10", BRACK(FH_SDU | 10), "\\Device\\Harddisk20\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdu11", BRACK(FH_SDU | 11), "\\Device\\Harddisk20\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdu12", BRACK(FH_SDU | 12), "\\Device\\Harddisk20\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdu13", BRACK(FH_SDU | 13), "\\Device\\Harddisk20\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdu14", BRACK(FH_SDU | 14), "\\Device\\Harddisk20\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdu15", BRACK(FH_SDU | 15), "\\Device\\Harddisk20\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdv1", BRACK(FH_SDV | 1), "\\Device\\Harddisk21\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdv2", BRACK(FH_SDV | 2), "\\Device\\Harddisk21\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdv3", BRACK(FH_SDV | 3), "\\Device\\Harddisk21\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdv4", BRACK(FH_SDV | 4), "\\Device\\Harddisk21\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdv5", BRACK(FH_SDV | 5), "\\Device\\Harddisk21\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdv6", BRACK(FH_SDV | 6), "\\Device\\Harddisk21\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdv7", BRACK(FH_SDV | 7), "\\Device\\Harddisk21\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdv8", BRACK(FH_SDV | 8), "\\Device\\Harddisk21\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdv9", BRACK(FH_SDV | 9), "\\Device\\Harddisk21\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdv10", BRACK(FH_SDV | 10), "\\Device\\Harddisk21\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdv11", BRACK(FH_SDV | 11), "\\Device\\Harddisk21\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdv12", BRACK(FH_SDV | 12), "\\Device\\Harddisk21\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdv13", BRACK(FH_SDV | 13), "\\Device\\Harddisk21\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdv14", BRACK(FH_SDV | 14), "\\Device\\Harddisk21\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdv15", BRACK(FH_SDV | 15), "\\Device\\Harddisk21\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdw1", BRACK(FH_SDW | 1), "\\Device\\Harddisk22\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdw2", BRACK(FH_SDW | 2), "\\Device\\Harddisk22\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdw3", BRACK(FH_SDW | 3), "\\Device\\Harddisk22\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdw4", BRACK(FH_SDW | 4), "\\Device\\Harddisk22\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdw5", BRACK(FH_SDW | 5), "\\Device\\Harddisk22\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdw6", BRACK(FH_SDW | 6), "\\Device\\Harddisk22\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdw7", BRACK(FH_SDW | 7), "\\Device\\Harddisk22\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdw8", BRACK(FH_SDW | 8), "\\Device\\Harddisk22\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdw9", BRACK(FH_SDW | 9), "\\Device\\Harddisk22\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdw10", BRACK(FH_SDW | 10), "\\Device\\Harddisk22\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdw11", BRACK(FH_SDW | 11), "\\Device\\Harddisk22\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdw12", BRACK(FH_SDW | 12), "\\Device\\Harddisk22\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdw13", BRACK(FH_SDW | 13), "\\Device\\Harddisk22\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdw14", BRACK(FH_SDW | 14), "\\Device\\Harddisk22\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdw15", BRACK(FH_SDW | 15), "\\Device\\Harddisk22\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdx1", BRACK(FH_SDX | 1), "\\Device\\Harddisk23\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdx2", BRACK(FH_SDX | 2), "\\Device\\Harddisk23\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdx3", BRACK(FH_SDX | 3), "\\Device\\Harddisk23\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdx4", BRACK(FH_SDX | 4), "\\Device\\Harddisk23\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdx5", BRACK(FH_SDX | 5), "\\Device\\Harddisk23\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdx6", BRACK(FH_SDX | 6), "\\Device\\Harddisk23\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdx7", BRACK(FH_SDX | 7), "\\Device\\Harddisk23\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdx8", BRACK(FH_SDX | 8), "\\Device\\Harddisk23\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdx9", BRACK(FH_SDX | 9), "\\Device\\Harddisk23\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdx10", BRACK(FH_SDX | 10), "\\Device\\Harddisk23\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdx11", BRACK(FH_SDX | 11), "\\Device\\Harddisk23\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdx12", BRACK(FH_SDX | 12), "\\Device\\Harddisk23\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdx13", BRACK(FH_SDX | 13), "\\Device\\Harddisk23\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdx14", BRACK(FH_SDX | 14), "\\Device\\Harddisk23\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdx15", BRACK(FH_SDX | 15), "\\Device\\Harddisk23\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdy1", BRACK(FH_SDY | 1), "\\Device\\Harddisk24\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdy2", BRACK(FH_SDY | 2), "\\Device\\Harddisk24\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdy3", BRACK(FH_SDY | 3), "\\Device\\Harddisk24\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdy4", BRACK(FH_SDY | 4), "\\Device\\Harddisk24\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdy5", BRACK(FH_SDY | 5), "\\Device\\Harddisk24\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdy6", BRACK(FH_SDY | 6), "\\Device\\Harddisk24\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdy7", BRACK(FH_SDY | 7), "\\Device\\Harddisk24\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdy8", BRACK(FH_SDY | 8), "\\Device\\Harddisk24\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdy9", BRACK(FH_SDY | 9), "\\Device\\Harddisk24\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdy10", BRACK(FH_SDY | 10), "\\Device\\Harddisk24\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdy11", BRACK(FH_SDY | 11), "\\Device\\Harddisk24\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdy12", BRACK(FH_SDY | 12), "\\Device\\Harddisk24\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdy13", BRACK(FH_SDY | 13), "\\Device\\Harddisk24\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdy14", BRACK(FH_SDY | 14), "\\Device\\Harddisk24\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdy15", BRACK(FH_SDY | 15), "\\Device\\Harddisk24\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdz1", BRACK(FH_SDZ | 1), "\\Device\\Harddisk25\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdz2", BRACK(FH_SDZ | 2), "\\Device\\Harddisk25\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdz3", BRACK(FH_SDZ | 3), "\\Device\\Harddisk25\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdz4", BRACK(FH_SDZ | 4), "\\Device\\Harddisk25\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdz5", BRACK(FH_SDZ | 5), "\\Device\\Harddisk25\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdz6", BRACK(FH_SDZ | 6), "\\Device\\Harddisk25\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdz7", BRACK(FH_SDZ | 7), "\\Device\\Harddisk25\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdz8", BRACK(FH_SDZ | 8), "\\Device\\Harddisk25\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdz9", BRACK(FH_SDZ | 9), "\\Device\\Harddisk25\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdz10", BRACK(FH_SDZ | 10), "\\Device\\Harddisk25\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdz11", BRACK(FH_SDZ | 11), "\\Device\\Harddisk25\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdz12", BRACK(FH_SDZ | 12), "\\Device\\Harddisk25\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdz13", BRACK(FH_SDZ | 13), "\\Device\\Harddisk25\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdz14", BRACK(FH_SDZ | 14), "\\Device\\Harddisk25\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdz15", BRACK(FH_SDZ | 15), "\\Device\\Harddisk25\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaa", BRACK(FH_SDAA), "\\Device\\Harddisk26\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdab", BRACK(FH_SDAB), "\\Device\\Harddisk27\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdac", BRACK(FH_SDAC), "\\Device\\Harddisk28\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdad", BRACK(FH_SDAD), "\\Device\\Harddisk29\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdae", BRACK(FH_SDAE), "\\Device\\Harddisk30\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaf", BRACK(FH_SDAF), "\\Device\\Harddisk31\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdag", BRACK(FH_SDAG), "\\Device\\Harddisk32\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdah", BRACK(FH_SDAH), "\\Device\\Harddisk33\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdai", BRACK(FH_SDAI), "\\Device\\Harddisk34\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaj", BRACK(FH_SDAJ), "\\Device\\Harddisk35\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdak", BRACK(FH_SDAK), "\\Device\\Harddisk36\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdal", BRACK(FH_SDAL), "\\Device\\Harddisk37\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdam", BRACK(FH_SDAM), "\\Device\\Harddisk38\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdan", BRACK(FH_SDAN), "\\Device\\Harddisk39\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdao", BRACK(FH_SDAO), "\\Device\\Harddisk40\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdap", BRACK(FH_SDAP), "\\Device\\Harddisk41\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaq", BRACK(FH_SDAQ), "\\Device\\Harddisk42\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdar", BRACK(FH_SDAR), "\\Device\\Harddisk43\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdas", BRACK(FH_SDAS), "\\Device\\Harddisk44\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdat", BRACK(FH_SDAT), "\\Device\\Harddisk45\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdau", BRACK(FH_SDAU), "\\Device\\Harddisk46\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdav", BRACK(FH_SDAV), "\\Device\\Harddisk47\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaw", BRACK(FH_SDAW), "\\Device\\Harddisk48\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdax", BRACK(FH_SDAX), "\\Device\\Harddisk49\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sday", BRACK(FH_SDAY), "\\Device\\Harddisk50\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaz", BRACK(FH_SDAZ), "\\Device\\Harddisk51\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaa1", BRACK(FH_SDAA | 1), "\\Device\\Harddisk26\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaa2", BRACK(FH_SDAA | 2), "\\Device\\Harddisk26\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaa3", BRACK(FH_SDAA | 3), "\\Device\\Harddisk26\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaa4", BRACK(FH_SDAA | 4), "\\Device\\Harddisk26\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaa5", BRACK(FH_SDAA | 5), "\\Device\\Harddisk26\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaa6", BRACK(FH_SDAA | 6), "\\Device\\Harddisk26\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaa7", BRACK(FH_SDAA | 7), "\\Device\\Harddisk26\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaa8", BRACK(FH_SDAA | 8), "\\Device\\Harddisk26\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaa9", BRACK(FH_SDAA | 9), "\\Device\\Harddisk26\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaa10", BRACK(FH_SDAA | 10), "\\Device\\Harddisk26\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaa11", BRACK(FH_SDAA | 11), "\\Device\\Harddisk26\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaa12", BRACK(FH_SDAA | 12), "\\Device\\Harddisk26\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaa13", BRACK(FH_SDAA | 13), "\\Device\\Harddisk26\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaa14", BRACK(FH_SDAA | 14), "\\Device\\Harddisk26\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaa15", BRACK(FH_SDAA | 15), "\\Device\\Harddisk26\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdab1", BRACK(FH_SDAB | 1), "\\Device\\Harddisk27\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdab2", BRACK(FH_SDAB | 2), "\\Device\\Harddisk27\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdab3", BRACK(FH_SDAB | 3), "\\Device\\Harddisk27\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdab4", BRACK(FH_SDAB | 4), "\\Device\\Harddisk27\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdab5", BRACK(FH_SDAB | 5), "\\Device\\Harddisk27\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdab6", BRACK(FH_SDAB | 6), "\\Device\\Harddisk27\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdab7", BRACK(FH_SDAB | 7), "\\Device\\Harddisk27\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdab8", BRACK(FH_SDAB | 8), "\\Device\\Harddisk27\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdab9", BRACK(FH_SDAB | 9), "\\Device\\Harddisk27\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdab10", BRACK(FH_SDAB | 10), "\\Device\\Harddisk27\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdab11", BRACK(FH_SDAB | 11), "\\Device\\Harddisk27\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdab12", BRACK(FH_SDAB | 12), "\\Device\\Harddisk27\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdab13", BRACK(FH_SDAB | 13), "\\Device\\Harddisk27\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdab14", BRACK(FH_SDAB | 14), "\\Device\\Harddisk27\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdab15", BRACK(FH_SDAB | 15), "\\Device\\Harddisk27\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdac1", BRACK(FH_SDAC | 1), "\\Device\\Harddisk28\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdac2", BRACK(FH_SDAC | 2), "\\Device\\Harddisk28\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdac3", BRACK(FH_SDAC | 3), "\\Device\\Harddisk28\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdac4", BRACK(FH_SDAC | 4), "\\Device\\Harddisk28\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdac5", BRACK(FH_SDAC | 5), "\\Device\\Harddisk28\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdac6", BRACK(FH_SDAC | 6), "\\Device\\Harddisk28\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdac7", BRACK(FH_SDAC | 7), "\\Device\\Harddisk28\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdac8", BRACK(FH_SDAC | 8), "\\Device\\Harddisk28\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdac9", BRACK(FH_SDAC | 9), "\\Device\\Harddisk28\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdac10", BRACK(FH_SDAC | 10), "\\Device\\Harddisk28\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdac11", BRACK(FH_SDAC | 11), "\\Device\\Harddisk28\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdac12", BRACK(FH_SDAC | 12), "\\Device\\Harddisk28\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdac13", BRACK(FH_SDAC | 13), "\\Device\\Harddisk28\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdac14", BRACK(FH_SDAC | 14), "\\Device\\Harddisk28\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdac15", BRACK(FH_SDAC | 15), "\\Device\\Harddisk28\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdad1", BRACK(FH_SDAD | 1), "\\Device\\Harddisk29\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdad2", BRACK(FH_SDAD | 2), "\\Device\\Harddisk29\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdad3", BRACK(FH_SDAD | 3), "\\Device\\Harddisk29\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdad4", BRACK(FH_SDAD | 4), "\\Device\\Harddisk29\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdad5", BRACK(FH_SDAD | 5), "\\Device\\Harddisk29\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdad6", BRACK(FH_SDAD | 6), "\\Device\\Harddisk29\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdad7", BRACK(FH_SDAD | 7), "\\Device\\Harddisk29\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdad8", BRACK(FH_SDAD | 8), "\\Device\\Harddisk29\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdad9", BRACK(FH_SDAD | 9), "\\Device\\Harddisk29\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdad10", BRACK(FH_SDAD | 10), "\\Device\\Harddisk29\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdad11", BRACK(FH_SDAD | 11), "\\Device\\Harddisk29\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdad12", BRACK(FH_SDAD | 12), "\\Device\\Harddisk29\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdad13", BRACK(FH_SDAD | 13), "\\Device\\Harddisk29\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdad14", BRACK(FH_SDAD | 14), "\\Device\\Harddisk29\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdad15", BRACK(FH_SDAD | 15), "\\Device\\Harddisk29\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdae1", BRACK(FH_SDAE | 1), "\\Device\\Harddisk30\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdae2", BRACK(FH_SDAE | 2), "\\Device\\Harddisk30\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdae3", BRACK(FH_SDAE | 3), "\\Device\\Harddisk30\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdae4", BRACK(FH_SDAE | 4), "\\Device\\Harddisk30\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdae5", BRACK(FH_SDAE | 5), "\\Device\\Harddisk30\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdae6", BRACK(FH_SDAE | 6), "\\Device\\Harddisk30\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdae7", BRACK(FH_SDAE | 7), "\\Device\\Harddisk30\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdae8", BRACK(FH_SDAE | 8), "\\Device\\Harddisk30\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdae9", BRACK(FH_SDAE | 9), "\\Device\\Harddisk30\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdae10", BRACK(FH_SDAE | 10), "\\Device\\Harddisk30\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdae11", BRACK(FH_SDAE | 11), "\\Device\\Harddisk30\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdae12", BRACK(FH_SDAE | 12), "\\Device\\Harddisk30\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdae13", BRACK(FH_SDAE | 13), "\\Device\\Harddisk30\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdae14", BRACK(FH_SDAE | 14), "\\Device\\Harddisk30\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdae15", BRACK(FH_SDAE | 15), "\\Device\\Harddisk30\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaf1", BRACK(FH_SDAF | 1), "\\Device\\Harddisk31\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaf2", BRACK(FH_SDAF | 2), "\\Device\\Harddisk31\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaf3", BRACK(FH_SDAF | 3), "\\Device\\Harddisk31\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaf4", BRACK(FH_SDAF | 4), "\\Device\\Harddisk31\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaf5", BRACK(FH_SDAF | 5), "\\Device\\Harddisk31\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaf6", BRACK(FH_SDAF | 6), "\\Device\\Harddisk31\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaf7", BRACK(FH_SDAF | 7), "\\Device\\Harddisk31\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaf8", BRACK(FH_SDAF | 8), "\\Device\\Harddisk31\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaf9", BRACK(FH_SDAF | 9), "\\Device\\Harddisk31\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaf10", BRACK(FH_SDAF | 10), "\\Device\\Harddisk31\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaf11", BRACK(FH_SDAF | 11), "\\Device\\Harddisk31\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaf12", BRACK(FH_SDAF | 12), "\\Device\\Harddisk31\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaf13", BRACK(FH_SDAF | 13), "\\Device\\Harddisk31\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaf14", BRACK(FH_SDAF | 14), "\\Device\\Harddisk31\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaf15", BRACK(FH_SDAF | 15), "\\Device\\Harddisk31\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdag1", BRACK(FH_SDAG | 1), "\\Device\\Harddisk32\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdag2", BRACK(FH_SDAG | 2), "\\Device\\Harddisk32\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdag3", BRACK(FH_SDAG | 3), "\\Device\\Harddisk32\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdag4", BRACK(FH_SDAG | 4), "\\Device\\Harddisk32\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdag5", BRACK(FH_SDAG | 5), "\\Device\\Harddisk32\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdag6", BRACK(FH_SDAG | 6), "\\Device\\Harddisk32\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdag7", BRACK(FH_SDAG | 7), "\\Device\\Harddisk32\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdag8", BRACK(FH_SDAG | 8), "\\Device\\Harddisk32\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdag9", BRACK(FH_SDAG | 9), "\\Device\\Harddisk32\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdag10", BRACK(FH_SDAG | 10), "\\Device\\Harddisk32\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdag11", BRACK(FH_SDAG | 11), "\\Device\\Harddisk32\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdag12", BRACK(FH_SDAG | 12), "\\Device\\Harddisk32\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdag13", BRACK(FH_SDAG | 13), "\\Device\\Harddisk32\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdag14", BRACK(FH_SDAG | 14), "\\Device\\Harddisk32\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdag15", BRACK(FH_SDAG | 15), "\\Device\\Harddisk32\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdah1", BRACK(FH_SDAH | 1), "\\Device\\Harddisk33\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdah2", BRACK(FH_SDAH | 2), "\\Device\\Harddisk33\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdah3", BRACK(FH_SDAH | 3), "\\Device\\Harddisk33\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdah4", BRACK(FH_SDAH | 4), "\\Device\\Harddisk33\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdah5", BRACK(FH_SDAH | 5), "\\Device\\Harddisk33\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdah6", BRACK(FH_SDAH | 6), "\\Device\\Harddisk33\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdah7", BRACK(FH_SDAH | 7), "\\Device\\Harddisk33\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdah8", BRACK(FH_SDAH | 8), "\\Device\\Harddisk33\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdah9", BRACK(FH_SDAH | 9), "\\Device\\Harddisk33\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdah10", BRACK(FH_SDAH | 10), "\\Device\\Harddisk33\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdah11", BRACK(FH_SDAH | 11), "\\Device\\Harddisk33\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdah12", BRACK(FH_SDAH | 12), "\\Device\\Harddisk33\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdah13", BRACK(FH_SDAH | 13), "\\Device\\Harddisk33\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdah14", BRACK(FH_SDAH | 14), "\\Device\\Harddisk33\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdah15", BRACK(FH_SDAH | 15), "\\Device\\Harddisk33\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdai1", BRACK(FH_SDAI | 1), "\\Device\\Harddisk34\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdai2", BRACK(FH_SDAI | 2), "\\Device\\Harddisk34\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdai3", BRACK(FH_SDAI | 3), "\\Device\\Harddisk34\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdai4", BRACK(FH_SDAI | 4), "\\Device\\Harddisk34\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdai5", BRACK(FH_SDAI | 5), "\\Device\\Harddisk34\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdai6", BRACK(FH_SDAI | 6), "\\Device\\Harddisk34\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdai7", BRACK(FH_SDAI | 7), "\\Device\\Harddisk34\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdai8", BRACK(FH_SDAI | 8), "\\Device\\Harddisk34\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdai9", BRACK(FH_SDAI | 9), "\\Device\\Harddisk34\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdai10", BRACK(FH_SDAI | 10), "\\Device\\Harddisk34\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdai11", BRACK(FH_SDAI | 11), "\\Device\\Harddisk34\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdai12", BRACK(FH_SDAI | 12), "\\Device\\Harddisk34\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdai13", BRACK(FH_SDAI | 13), "\\Device\\Harddisk34\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdai14", BRACK(FH_SDAI | 14), "\\Device\\Harddisk34\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdai15", BRACK(FH_SDAI | 15), "\\Device\\Harddisk34\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaj1", BRACK(FH_SDAJ | 1), "\\Device\\Harddisk35\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaj2", BRACK(FH_SDAJ | 2), "\\Device\\Harddisk35\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaj3", BRACK(FH_SDAJ | 3), "\\Device\\Harddisk35\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaj4", BRACK(FH_SDAJ | 4), "\\Device\\Harddisk35\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaj5", BRACK(FH_SDAJ | 5), "\\Device\\Harddisk35\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaj6", BRACK(FH_SDAJ | 6), "\\Device\\Harddisk35\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaj7", BRACK(FH_SDAJ | 7), "\\Device\\Harddisk35\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaj8", BRACK(FH_SDAJ | 8), "\\Device\\Harddisk35\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaj9", BRACK(FH_SDAJ | 9), "\\Device\\Harddisk35\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaj10", BRACK(FH_SDAJ | 10), "\\Device\\Harddisk35\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaj11", BRACK(FH_SDAJ | 11), "\\Device\\Harddisk35\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaj12", BRACK(FH_SDAJ | 12), "\\Device\\Harddisk35\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaj13", BRACK(FH_SDAJ | 13), "\\Device\\Harddisk35\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaj14", BRACK(FH_SDAJ | 14), "\\Device\\Harddisk35\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaj15", BRACK(FH_SDAJ | 15), "\\Device\\Harddisk35\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdak1", BRACK(FH_SDAK | 1), "\\Device\\Harddisk36\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdak2", BRACK(FH_SDAK | 2), "\\Device\\Harddisk36\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdak3", BRACK(FH_SDAK | 3), "\\Device\\Harddisk36\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdak4", BRACK(FH_SDAK | 4), "\\Device\\Harddisk36\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdak5", BRACK(FH_SDAK | 5), "\\Device\\Harddisk36\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdak6", BRACK(FH_SDAK | 6), "\\Device\\Harddisk36\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdak7", BRACK(FH_SDAK | 7), "\\Device\\Harddisk36\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdak8", BRACK(FH_SDAK | 8), "\\Device\\Harddisk36\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdak9", BRACK(FH_SDAK | 9), "\\Device\\Harddisk36\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdak10", BRACK(FH_SDAK | 10), "\\Device\\Harddisk36\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdak11", BRACK(FH_SDAK | 11), "\\Device\\Harddisk36\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdak12", BRACK(FH_SDAK | 12), "\\Device\\Harddisk36\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdak13", BRACK(FH_SDAK | 13), "\\Device\\Harddisk36\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdak14", BRACK(FH_SDAK | 14), "\\Device\\Harddisk36\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdak15", BRACK(FH_SDAK | 15), "\\Device\\Harddisk36\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdal1", BRACK(FH_SDAL | 1), "\\Device\\Harddisk37\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdal2", BRACK(FH_SDAL | 2), "\\Device\\Harddisk37\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdal3", BRACK(FH_SDAL | 3), "\\Device\\Harddisk37\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdal4", BRACK(FH_SDAL | 4), "\\Device\\Harddisk37\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdal5", BRACK(FH_SDAL | 5), "\\Device\\Harddisk37\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdal6", BRACK(FH_SDAL | 6), "\\Device\\Harddisk37\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdal7", BRACK(FH_SDAL | 7), "\\Device\\Harddisk37\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdal8", BRACK(FH_SDAL | 8), "\\Device\\Harddisk37\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdal9", BRACK(FH_SDAL | 9), "\\Device\\Harddisk37\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdal10", BRACK(FH_SDAL | 10), "\\Device\\Harddisk37\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdal11", BRACK(FH_SDAL | 11), "\\Device\\Harddisk37\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdal12", BRACK(FH_SDAL | 12), "\\Device\\Harddisk37\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdal13", BRACK(FH_SDAL | 13), "\\Device\\Harddisk37\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdal14", BRACK(FH_SDAL | 14), "\\Device\\Harddisk37\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdal15", BRACK(FH_SDAL | 15), "\\Device\\Harddisk37\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdam1", BRACK(FH_SDAM | 1), "\\Device\\Harddisk38\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdam2", BRACK(FH_SDAM | 2), "\\Device\\Harddisk38\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdam3", BRACK(FH_SDAM | 3), "\\Device\\Harddisk38\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdam4", BRACK(FH_SDAM | 4), "\\Device\\Harddisk38\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdam5", BRACK(FH_SDAM | 5), "\\Device\\Harddisk38\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdam6", BRACK(FH_SDAM | 6), "\\Device\\Harddisk38\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdam7", BRACK(FH_SDAM | 7), "\\Device\\Harddisk38\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdam8", BRACK(FH_SDAM | 8), "\\Device\\Harddisk38\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdam9", BRACK(FH_SDAM | 9), "\\Device\\Harddisk38\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdam10", BRACK(FH_SDAM | 10), "\\Device\\Harddisk38\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdam11", BRACK(FH_SDAM | 11), "\\Device\\Harddisk38\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdam12", BRACK(FH_SDAM | 12), "\\Device\\Harddisk38\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdam13", BRACK(FH_SDAM | 13), "\\Device\\Harddisk38\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdam14", BRACK(FH_SDAM | 14), "\\Device\\Harddisk38\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdam15", BRACK(FH_SDAM | 15), "\\Device\\Harddisk38\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdan1", BRACK(FH_SDAN | 1), "\\Device\\Harddisk39\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdan2", BRACK(FH_SDAN | 2), "\\Device\\Harddisk39\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdan3", BRACK(FH_SDAN | 3), "\\Device\\Harddisk39\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdan4", BRACK(FH_SDAN | 4), "\\Device\\Harddisk39\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdan5", BRACK(FH_SDAN | 5), "\\Device\\Harddisk39\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdan6", BRACK(FH_SDAN | 6), "\\Device\\Harddisk39\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdan7", BRACK(FH_SDAN | 7), "\\Device\\Harddisk39\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdan8", BRACK(FH_SDAN | 8), "\\Device\\Harddisk39\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdan9", BRACK(FH_SDAN | 9), "\\Device\\Harddisk39\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdan10", BRACK(FH_SDAN | 10), "\\Device\\Harddisk39\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdan11", BRACK(FH_SDAN | 11), "\\Device\\Harddisk39\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdan12", BRACK(FH_SDAN | 12), "\\Device\\Harddisk39\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdan13", BRACK(FH_SDAN | 13), "\\Device\\Harddisk39\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdan14", BRACK(FH_SDAN | 14), "\\Device\\Harddisk39\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdan15", BRACK(FH_SDAN | 15), "\\Device\\Harddisk39\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdao1", BRACK(FH_SDAO | 1), "\\Device\\Harddisk40\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdao2", BRACK(FH_SDAO | 2), "\\Device\\Harddisk40\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdao3", BRACK(FH_SDAO | 3), "\\Device\\Harddisk40\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdao4", BRACK(FH_SDAO | 4), "\\Device\\Harddisk40\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdao5", BRACK(FH_SDAO | 5), "\\Device\\Harddisk40\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdao6", BRACK(FH_SDAO | 6), "\\Device\\Harddisk40\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdao7", BRACK(FH_SDAO | 7), "\\Device\\Harddisk40\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdao8", BRACK(FH_SDAO | 8), "\\Device\\Harddisk40\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdao9", BRACK(FH_SDAO | 9), "\\Device\\Harddisk40\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdao10", BRACK(FH_SDAO | 10), "\\Device\\Harddisk40\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdao11", BRACK(FH_SDAO | 11), "\\Device\\Harddisk40\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdao12", BRACK(FH_SDAO | 12), "\\Device\\Harddisk40\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdao13", BRACK(FH_SDAO | 13), "\\Device\\Harddisk40\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdao14", BRACK(FH_SDAO | 14), "\\Device\\Harddisk40\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdao15", BRACK(FH_SDAO | 15), "\\Device\\Harddisk40\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdap1", BRACK(FH_SDAP | 1), "\\Device\\Harddisk41\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdap2", BRACK(FH_SDAP | 2), "\\Device\\Harddisk41\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdap3", BRACK(FH_SDAP | 3), "\\Device\\Harddisk41\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdap4", BRACK(FH_SDAP | 4), "\\Device\\Harddisk41\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdap5", BRACK(FH_SDAP | 5), "\\Device\\Harddisk41\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdap6", BRACK(FH_SDAP | 6), "\\Device\\Harddisk41\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdap7", BRACK(FH_SDAP | 7), "\\Device\\Harddisk41\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdap8", BRACK(FH_SDAP | 8), "\\Device\\Harddisk41\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdap9", BRACK(FH_SDAP | 9), "\\Device\\Harddisk41\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdap10", BRACK(FH_SDAP | 10), "\\Device\\Harddisk41\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdap11", BRACK(FH_SDAP | 11), "\\Device\\Harddisk41\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdap12", BRACK(FH_SDAP | 12), "\\Device\\Harddisk41\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdap13", BRACK(FH_SDAP | 13), "\\Device\\Harddisk41\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdap14", BRACK(FH_SDAP | 14), "\\Device\\Harddisk41\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdap15", BRACK(FH_SDAP | 15), "\\Device\\Harddisk41\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaq1", BRACK(FH_SDAQ | 1), "\\Device\\Harddisk42\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaq2", BRACK(FH_SDAQ | 2), "\\Device\\Harddisk42\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaq3", BRACK(FH_SDAQ | 3), "\\Device\\Harddisk42\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaq4", BRACK(FH_SDAQ | 4), "\\Device\\Harddisk42\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaq5", BRACK(FH_SDAQ | 5), "\\Device\\Harddisk42\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaq6", BRACK(FH_SDAQ | 6), "\\Device\\Harddisk42\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaq7", BRACK(FH_SDAQ | 7), "\\Device\\Harddisk42\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaq8", BRACK(FH_SDAQ | 8), "\\Device\\Harddisk42\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaq9", BRACK(FH_SDAQ | 9), "\\Device\\Harddisk42\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaq10", BRACK(FH_SDAQ | 10), "\\Device\\Harddisk42\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaq11", BRACK(FH_SDAQ | 11), "\\Device\\Harddisk42\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaq12", BRACK(FH_SDAQ | 12), "\\Device\\Harddisk42\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaq13", BRACK(FH_SDAQ | 13), "\\Device\\Harddisk42\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaq14", BRACK(FH_SDAQ | 14), "\\Device\\Harddisk42\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaq15", BRACK(FH_SDAQ | 15), "\\Device\\Harddisk42\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdar1", BRACK(FH_SDAR | 1), "\\Device\\Harddisk43\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdar2", BRACK(FH_SDAR | 2), "\\Device\\Harddisk43\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdar3", BRACK(FH_SDAR | 3), "\\Device\\Harddisk43\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdar4", BRACK(FH_SDAR | 4), "\\Device\\Harddisk43\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdar5", BRACK(FH_SDAR | 5), "\\Device\\Harddisk43\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdar6", BRACK(FH_SDAR | 6), "\\Device\\Harddisk43\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdar7", BRACK(FH_SDAR | 7), "\\Device\\Harddisk43\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdar8", BRACK(FH_SDAR | 8), "\\Device\\Harddisk43\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdar9", BRACK(FH_SDAR | 9), "\\Device\\Harddisk43\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdar10", BRACK(FH_SDAR | 10), "\\Device\\Harddisk43\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdar11", BRACK(FH_SDAR | 11), "\\Device\\Harddisk43\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdar12", BRACK(FH_SDAR | 12), "\\Device\\Harddisk43\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdar13", BRACK(FH_SDAR | 13), "\\Device\\Harddisk43\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdar14", BRACK(FH_SDAR | 14), "\\Device\\Harddisk43\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdar15", BRACK(FH_SDAR | 15), "\\Device\\Harddisk43\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdas1", BRACK(FH_SDAS | 1), "\\Device\\Harddisk44\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdas2", BRACK(FH_SDAS | 2), "\\Device\\Harddisk44\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdas3", BRACK(FH_SDAS | 3), "\\Device\\Harddisk44\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdas4", BRACK(FH_SDAS | 4), "\\Device\\Harddisk44\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdas5", BRACK(FH_SDAS | 5), "\\Device\\Harddisk44\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdas6", BRACK(FH_SDAS | 6), "\\Device\\Harddisk44\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdas7", BRACK(FH_SDAS | 7), "\\Device\\Harddisk44\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdas8", BRACK(FH_SDAS | 8), "\\Device\\Harddisk44\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdas9", BRACK(FH_SDAS | 9), "\\Device\\Harddisk44\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdas10", BRACK(FH_SDAS | 10), "\\Device\\Harddisk44\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdas11", BRACK(FH_SDAS | 11), "\\Device\\Harddisk44\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdas12", BRACK(FH_SDAS | 12), "\\Device\\Harddisk44\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdas13", BRACK(FH_SDAS | 13), "\\Device\\Harddisk44\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdas14", BRACK(FH_SDAS | 14), "\\Device\\Harddisk44\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdas15", BRACK(FH_SDAS | 15), "\\Device\\Harddisk44\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdat1", BRACK(FH_SDAT | 1), "\\Device\\Harddisk45\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdat2", BRACK(FH_SDAT | 2), "\\Device\\Harddisk45\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdat3", BRACK(FH_SDAT | 3), "\\Device\\Harddisk45\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdat4", BRACK(FH_SDAT | 4), "\\Device\\Harddisk45\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdat5", BRACK(FH_SDAT | 5), "\\Device\\Harddisk45\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdat6", BRACK(FH_SDAT | 6), "\\Device\\Harddisk45\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdat7", BRACK(FH_SDAT | 7), "\\Device\\Harddisk45\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdat8", BRACK(FH_SDAT | 8), "\\Device\\Harddisk45\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdat9", BRACK(FH_SDAT | 9), "\\Device\\Harddisk45\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdat10", BRACK(FH_SDAT | 10), "\\Device\\Harddisk45\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdat11", BRACK(FH_SDAT | 11), "\\Device\\Harddisk45\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdat12", BRACK(FH_SDAT | 12), "\\Device\\Harddisk45\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdat13", BRACK(FH_SDAT | 13), "\\Device\\Harddisk45\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdat14", BRACK(FH_SDAT | 14), "\\Device\\Harddisk45\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdat15", BRACK(FH_SDAT | 15), "\\Device\\Harddisk45\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdau1", BRACK(FH_SDAU | 1), "\\Device\\Harddisk46\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdau2", BRACK(FH_SDAU | 2), "\\Device\\Harddisk46\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdau3", BRACK(FH_SDAU | 3), "\\Device\\Harddisk46\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdau4", BRACK(FH_SDAU | 4), "\\Device\\Harddisk46\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdau5", BRACK(FH_SDAU | 5), "\\Device\\Harddisk46\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdau6", BRACK(FH_SDAU | 6), "\\Device\\Harddisk46\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdau7", BRACK(FH_SDAU | 7), "\\Device\\Harddisk46\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdau8", BRACK(FH_SDAU | 8), "\\Device\\Harddisk46\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdau9", BRACK(FH_SDAU | 9), "\\Device\\Harddisk46\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdau10", BRACK(FH_SDAU | 10), "\\Device\\Harddisk46\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdau11", BRACK(FH_SDAU | 11), "\\Device\\Harddisk46\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdau12", BRACK(FH_SDAU | 12), "\\Device\\Harddisk46\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdau13", BRACK(FH_SDAU | 13), "\\Device\\Harddisk46\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdau14", BRACK(FH_SDAU | 14), "\\Device\\Harddisk46\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdau15", BRACK(FH_SDAU | 15), "\\Device\\Harddisk46\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdav1", BRACK(FH_SDAV | 1), "\\Device\\Harddisk47\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdav2", BRACK(FH_SDAV | 2), "\\Device\\Harddisk47\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdav3", BRACK(FH_SDAV | 3), "\\Device\\Harddisk47\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdav4", BRACK(FH_SDAV | 4), "\\Device\\Harddisk47\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdav5", BRACK(FH_SDAV | 5), "\\Device\\Harddisk47\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdav6", BRACK(FH_SDAV | 6), "\\Device\\Harddisk47\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdav7", BRACK(FH_SDAV | 7), "\\Device\\Harddisk47\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdav8", BRACK(FH_SDAV | 8), "\\Device\\Harddisk47\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdav9", BRACK(FH_SDAV | 9), "\\Device\\Harddisk47\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdav10", BRACK(FH_SDAV | 10), "\\Device\\Harddisk47\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdav11", BRACK(FH_SDAV | 11), "\\Device\\Harddisk47\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdav12", BRACK(FH_SDAV | 12), "\\Device\\Harddisk47\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdav13", BRACK(FH_SDAV | 13), "\\Device\\Harddisk47\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdav14", BRACK(FH_SDAV | 14), "\\Device\\Harddisk47\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdav15", BRACK(FH_SDAV | 15), "\\Device\\Harddisk47\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaw1", BRACK(FH_SDAW | 1), "\\Device\\Harddisk48\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaw2", BRACK(FH_SDAW | 2), "\\Device\\Harddisk48\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaw3", BRACK(FH_SDAW | 3), "\\Device\\Harddisk48\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaw4", BRACK(FH_SDAW | 4), "\\Device\\Harddisk48\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaw5", BRACK(FH_SDAW | 5), "\\Device\\Harddisk48\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaw6", BRACK(FH_SDAW | 6), "\\Device\\Harddisk48\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaw7", BRACK(FH_SDAW | 7), "\\Device\\Harddisk48\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaw8", BRACK(FH_SDAW | 8), "\\Device\\Harddisk48\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaw9", BRACK(FH_SDAW | 9), "\\Device\\Harddisk48\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaw10", BRACK(FH_SDAW | 10), "\\Device\\Harddisk48\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaw11", BRACK(FH_SDAW | 11), "\\Device\\Harddisk48\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaw12", BRACK(FH_SDAW | 12), "\\Device\\Harddisk48\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaw13", BRACK(FH_SDAW | 13), "\\Device\\Harddisk48\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaw14", BRACK(FH_SDAW | 14), "\\Device\\Harddisk48\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaw15", BRACK(FH_SDAW | 15), "\\Device\\Harddisk48\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdax1", BRACK(FH_SDAX | 1), "\\Device\\Harddisk49\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdax2", BRACK(FH_SDAX | 2), "\\Device\\Harddisk49\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdax3", BRACK(FH_SDAX | 3), "\\Device\\Harddisk49\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdax4", BRACK(FH_SDAX | 4), "\\Device\\Harddisk49\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdax5", BRACK(FH_SDAX | 5), "\\Device\\Harddisk49\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdax6", BRACK(FH_SDAX | 6), "\\Device\\Harddisk49\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdax7", BRACK(FH_SDAX | 7), "\\Device\\Harddisk49\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdax8", BRACK(FH_SDAX | 8), "\\Device\\Harddisk49\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdax9", BRACK(FH_SDAX | 9), "\\Device\\Harddisk49\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdax10", BRACK(FH_SDAX | 10), "\\Device\\Harddisk49\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdax11", BRACK(FH_SDAX | 11), "\\Device\\Harddisk49\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdax12", BRACK(FH_SDAX | 12), "\\Device\\Harddisk49\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdax13", BRACK(FH_SDAX | 13), "\\Device\\Harddisk49\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdax14", BRACK(FH_SDAX | 14), "\\Device\\Harddisk49\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdax15", BRACK(FH_SDAX | 15), "\\Device\\Harddisk49\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sday1", BRACK(FH_SDAY | 1), "\\Device\\Harddisk50\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sday2", BRACK(FH_SDAY | 2), "\\Device\\Harddisk50\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sday3", BRACK(FH_SDAY | 3), "\\Device\\Harddisk50\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sday4", BRACK(FH_SDAY | 4), "\\Device\\Harddisk50\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sday5", BRACK(FH_SDAY | 5), "\\Device\\Harddisk50\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sday6", BRACK(FH_SDAY | 6), "\\Device\\Harddisk50\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sday7", BRACK(FH_SDAY | 7), "\\Device\\Harddisk50\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sday8", BRACK(FH_SDAY | 8), "\\Device\\Harddisk50\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sday9", BRACK(FH_SDAY | 9), "\\Device\\Harddisk50\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sday10", BRACK(FH_SDAY | 10), "\\Device\\Harddisk50\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sday11", BRACK(FH_SDAY | 11), "\\Device\\Harddisk50\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sday12", BRACK(FH_SDAY | 12), "\\Device\\Harddisk50\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sday13", BRACK(FH_SDAY | 13), "\\Device\\Harddisk50\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sday14", BRACK(FH_SDAY | 14), "\\Device\\Harddisk50\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sday15", BRACK(FH_SDAY | 15), "\\Device\\Harddisk50\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaz1", BRACK(FH_SDAZ | 1), "\\Device\\Harddisk51\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaz2", BRACK(FH_SDAZ | 2), "\\Device\\Harddisk51\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaz3", BRACK(FH_SDAZ | 3), "\\Device\\Harddisk51\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaz4", BRACK(FH_SDAZ | 4), "\\Device\\Harddisk51\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaz5", BRACK(FH_SDAZ | 5), "\\Device\\Harddisk51\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaz6", BRACK(FH_SDAZ | 6), "\\Device\\Harddisk51\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaz7", BRACK(FH_SDAZ | 7), "\\Device\\Harddisk51\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaz8", BRACK(FH_SDAZ | 8), "\\Device\\Harddisk51\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaz9", BRACK(FH_SDAZ | 9), "\\Device\\Harddisk51\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaz10", BRACK(FH_SDAZ | 10), "\\Device\\Harddisk51\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaz11", BRACK(FH_SDAZ | 11), "\\Device\\Harddisk51\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaz12", BRACK(FH_SDAZ | 12), "\\Device\\Harddisk51\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaz13", BRACK(FH_SDAZ | 13), "\\Device\\Harddisk51\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaz14", BRACK(FH_SDAZ | 14), "\\Device\\Harddisk51\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdaz15", BRACK(FH_SDAZ | 15), "\\Device\\Harddisk51\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdba", BRACK(FH_SDBA), "\\Device\\Harddisk52\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbb", BRACK(FH_SDBB), "\\Device\\Harddisk53\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbc", BRACK(FH_SDBC), "\\Device\\Harddisk54\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbd", BRACK(FH_SDBD), "\\Device\\Harddisk55\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbe", BRACK(FH_SDBE), "\\Device\\Harddisk56\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbf", BRACK(FH_SDBF), "\\Device\\Harddisk57\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbg", BRACK(FH_SDBG), "\\Device\\Harddisk58\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbh", BRACK(FH_SDBH), "\\Device\\Harddisk59\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbi", BRACK(FH_SDBI), "\\Device\\Harddisk60\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbj", BRACK(FH_SDBJ), "\\Device\\Harddisk61\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbk", BRACK(FH_SDBK), "\\Device\\Harddisk62\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbl", BRACK(FH_SDBL), "\\Device\\Harddisk63\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbm", BRACK(FH_SDBM), "\\Device\\Harddisk64\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbn", BRACK(FH_SDBN), "\\Device\\Harddisk65\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbo", BRACK(FH_SDBO), "\\Device\\Harddisk66\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbp", BRACK(FH_SDBP), "\\Device\\Harddisk67\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbq", BRACK(FH_SDBQ), "\\Device\\Harddisk68\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbr", BRACK(FH_SDBR), "\\Device\\Harddisk69\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbs", BRACK(FH_SDBS), "\\Device\\Harddisk70\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbt", BRACK(FH_SDBT), "\\Device\\Harddisk71\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbu", BRACK(FH_SDBU), "\\Device\\Harddisk72\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbv", BRACK(FH_SDBV), "\\Device\\Harddisk73\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbw", BRACK(FH_SDBW), "\\Device\\Harddisk74\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbx", BRACK(FH_SDBX), "\\Device\\Harddisk75\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdby", BRACK(FH_SDBY), "\\Device\\Harddisk76\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbz", BRACK(FH_SDBZ), "\\Device\\Harddisk77\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdba1", BRACK(FH_SDBA | 1), "\\Device\\Harddisk52\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdba2", BRACK(FH_SDBA | 2), "\\Device\\Harddisk52\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdba3", BRACK(FH_SDBA | 3), "\\Device\\Harddisk52\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdba4", BRACK(FH_SDBA | 4), "\\Device\\Harddisk52\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdba5", BRACK(FH_SDBA | 5), "\\Device\\Harddisk52\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdba6", BRACK(FH_SDBA | 6), "\\Device\\Harddisk52\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdba7", BRACK(FH_SDBA | 7), "\\Device\\Harddisk52\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdba8", BRACK(FH_SDBA | 8), "\\Device\\Harddisk52\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdba9", BRACK(FH_SDBA | 9), "\\Device\\Harddisk52\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdba10", BRACK(FH_SDBA | 10), "\\Device\\Harddisk52\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdba11", BRACK(FH_SDBA | 11), "\\Device\\Harddisk52\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdba12", BRACK(FH_SDBA | 12), "\\Device\\Harddisk52\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdba13", BRACK(FH_SDBA | 13), "\\Device\\Harddisk52\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdba14", BRACK(FH_SDBA | 14), "\\Device\\Harddisk52\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdba15", BRACK(FH_SDBA | 15), "\\Device\\Harddisk52\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbb1", BRACK(FH_SDBB | 1), "\\Device\\Harddisk53\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbb2", BRACK(FH_SDBB | 2), "\\Device\\Harddisk53\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbb3", BRACK(FH_SDBB | 3), "\\Device\\Harddisk53\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbb4", BRACK(FH_SDBB | 4), "\\Device\\Harddisk53\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbb5", BRACK(FH_SDBB | 5), "\\Device\\Harddisk53\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbb6", BRACK(FH_SDBB | 6), "\\Device\\Harddisk53\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbb7", BRACK(FH_SDBB | 7), "\\Device\\Harddisk53\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbb8", BRACK(FH_SDBB | 8), "\\Device\\Harddisk53\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbb9", BRACK(FH_SDBB | 9), "\\Device\\Harddisk53\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbb10", BRACK(FH_SDBB | 10), "\\Device\\Harddisk53\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbb11", BRACK(FH_SDBB | 11), "\\Device\\Harddisk53\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbb12", BRACK(FH_SDBB | 12), "\\Device\\Harddisk53\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbb13", BRACK(FH_SDBB | 13), "\\Device\\Harddisk53\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbb14", BRACK(FH_SDBB | 14), "\\Device\\Harddisk53\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbb15", BRACK(FH_SDBB | 15), "\\Device\\Harddisk53\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbc1", BRACK(FH_SDBC | 1), "\\Device\\Harddisk54\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbc2", BRACK(FH_SDBC | 2), "\\Device\\Harddisk54\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbc3", BRACK(FH_SDBC | 3), "\\Device\\Harddisk54\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbc4", BRACK(FH_SDBC | 4), "\\Device\\Harddisk54\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbc5", BRACK(FH_SDBC | 5), "\\Device\\Harddisk54\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbc6", BRACK(FH_SDBC | 6), "\\Device\\Harddisk54\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbc7", BRACK(FH_SDBC | 7), "\\Device\\Harddisk54\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbc8", BRACK(FH_SDBC | 8), "\\Device\\Harddisk54\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbc9", BRACK(FH_SDBC | 9), "\\Device\\Harddisk54\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbc10", BRACK(FH_SDBC | 10), "\\Device\\Harddisk54\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbc11", BRACK(FH_SDBC | 11), "\\Device\\Harddisk54\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbc12", BRACK(FH_SDBC | 12), "\\Device\\Harddisk54\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbc13", BRACK(FH_SDBC | 13), "\\Device\\Harddisk54\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbc14", BRACK(FH_SDBC | 14), "\\Device\\Harddisk54\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbc15", BRACK(FH_SDBC | 15), "\\Device\\Harddisk54\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbd1", BRACK(FH_SDBD | 1), "\\Device\\Harddisk55\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbd2", BRACK(FH_SDBD | 2), "\\Device\\Harddisk55\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbd3", BRACK(FH_SDBD | 3), "\\Device\\Harddisk55\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbd4", BRACK(FH_SDBD | 4), "\\Device\\Harddisk55\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbd5", BRACK(FH_SDBD | 5), "\\Device\\Harddisk55\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbd6", BRACK(FH_SDBD | 6), "\\Device\\Harddisk55\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbd7", BRACK(FH_SDBD | 7), "\\Device\\Harddisk55\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbd8", BRACK(FH_SDBD | 8), "\\Device\\Harddisk55\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbd9", BRACK(FH_SDBD | 9), "\\Device\\Harddisk55\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbd10", BRACK(FH_SDBD | 10), "\\Device\\Harddisk55\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbd11", BRACK(FH_SDBD | 11), "\\Device\\Harddisk55\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbd12", BRACK(FH_SDBD | 12), "\\Device\\Harddisk55\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbd13", BRACK(FH_SDBD | 13), "\\Device\\Harddisk55\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbd14", BRACK(FH_SDBD | 14), "\\Device\\Harddisk55\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbd15", BRACK(FH_SDBD | 15), "\\Device\\Harddisk55\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbe1", BRACK(FH_SDBE | 1), "\\Device\\Harddisk56\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbe2", BRACK(FH_SDBE | 2), "\\Device\\Harddisk56\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbe3", BRACK(FH_SDBE | 3), "\\Device\\Harddisk56\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbe4", BRACK(FH_SDBE | 4), "\\Device\\Harddisk56\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbe5", BRACK(FH_SDBE | 5), "\\Device\\Harddisk56\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbe6", BRACK(FH_SDBE | 6), "\\Device\\Harddisk56\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbe7", BRACK(FH_SDBE | 7), "\\Device\\Harddisk56\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbe8", BRACK(FH_SDBE | 8), "\\Device\\Harddisk56\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbe9", BRACK(FH_SDBE | 9), "\\Device\\Harddisk56\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbe10", BRACK(FH_SDBE | 10), "\\Device\\Harddisk56\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbe11", BRACK(FH_SDBE | 11), "\\Device\\Harddisk56\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbe12", BRACK(FH_SDBE | 12), "\\Device\\Harddisk56\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbe13", BRACK(FH_SDBE | 13), "\\Device\\Harddisk56\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbe14", BRACK(FH_SDBE | 14), "\\Device\\Harddisk56\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbe15", BRACK(FH_SDBE | 15), "\\Device\\Harddisk56\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbf1", BRACK(FH_SDBF | 1), "\\Device\\Harddisk57\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbf2", BRACK(FH_SDBF | 2), "\\Device\\Harddisk57\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbf3", BRACK(FH_SDBF | 3), "\\Device\\Harddisk57\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbf4", BRACK(FH_SDBF | 4), "\\Device\\Harddisk57\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbf5", BRACK(FH_SDBF | 5), "\\Device\\Harddisk57\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbf6", BRACK(FH_SDBF | 6), "\\Device\\Harddisk57\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbf7", BRACK(FH_SDBF | 7), "\\Device\\Harddisk57\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbf8", BRACK(FH_SDBF | 8), "\\Device\\Harddisk57\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbf9", BRACK(FH_SDBF | 9), "\\Device\\Harddisk57\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbf10", BRACK(FH_SDBF | 10), "\\Device\\Harddisk57\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbf11", BRACK(FH_SDBF | 11), "\\Device\\Harddisk57\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbf12", BRACK(FH_SDBF | 12), "\\Device\\Harddisk57\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbf13", BRACK(FH_SDBF | 13), "\\Device\\Harddisk57\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbf14", BRACK(FH_SDBF | 14), "\\Device\\Harddisk57\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbf15", BRACK(FH_SDBF | 15), "\\Device\\Harddisk57\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbg1", BRACK(FH_SDBG | 1), "\\Device\\Harddisk58\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbg2", BRACK(FH_SDBG | 2), "\\Device\\Harddisk58\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbg3", BRACK(FH_SDBG | 3), "\\Device\\Harddisk58\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbg4", BRACK(FH_SDBG | 4), "\\Device\\Harddisk58\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbg5", BRACK(FH_SDBG | 5), "\\Device\\Harddisk58\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbg6", BRACK(FH_SDBG | 6), "\\Device\\Harddisk58\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbg7", BRACK(FH_SDBG | 7), "\\Device\\Harddisk58\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbg8", BRACK(FH_SDBG | 8), "\\Device\\Harddisk58\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbg9", BRACK(FH_SDBG | 9), "\\Device\\Harddisk58\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbg10", BRACK(FH_SDBG | 10), "\\Device\\Harddisk58\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbg11", BRACK(FH_SDBG | 11), "\\Device\\Harddisk58\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbg12", BRACK(FH_SDBG | 12), "\\Device\\Harddisk58\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbg13", BRACK(FH_SDBG | 13), "\\Device\\Harddisk58\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbg14", BRACK(FH_SDBG | 14), "\\Device\\Harddisk58\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbg15", BRACK(FH_SDBG | 15), "\\Device\\Harddisk58\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbh1", BRACK(FH_SDBH | 1), "\\Device\\Harddisk59\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbh2", BRACK(FH_SDBH | 2), "\\Device\\Harddisk59\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbh3", BRACK(FH_SDBH | 3), "\\Device\\Harddisk59\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbh4", BRACK(FH_SDBH | 4), "\\Device\\Harddisk59\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbh5", BRACK(FH_SDBH | 5), "\\Device\\Harddisk59\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbh6", BRACK(FH_SDBH | 6), "\\Device\\Harddisk59\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbh7", BRACK(FH_SDBH | 7), "\\Device\\Harddisk59\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbh8", BRACK(FH_SDBH | 8), "\\Device\\Harddisk59\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbh9", BRACK(FH_SDBH | 9), "\\Device\\Harddisk59\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbh10", BRACK(FH_SDBH | 10), "\\Device\\Harddisk59\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbh11", BRACK(FH_SDBH | 11), "\\Device\\Harddisk59\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbh12", BRACK(FH_SDBH | 12), "\\Device\\Harddisk59\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbh13", BRACK(FH_SDBH | 13), "\\Device\\Harddisk59\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbh14", BRACK(FH_SDBH | 14), "\\Device\\Harddisk59\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbh15", BRACK(FH_SDBH | 15), "\\Device\\Harddisk59\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbi1", BRACK(FH_SDBI | 1), "\\Device\\Harddisk60\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbi2", BRACK(FH_SDBI | 2), "\\Device\\Harddisk60\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbi3", BRACK(FH_SDBI | 3), "\\Device\\Harddisk60\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbi4", BRACK(FH_SDBI | 4), "\\Device\\Harddisk60\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbi5", BRACK(FH_SDBI | 5), "\\Device\\Harddisk60\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbi6", BRACK(FH_SDBI | 6), "\\Device\\Harddisk60\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbi7", BRACK(FH_SDBI | 7), "\\Device\\Harddisk60\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbi8", BRACK(FH_SDBI | 8), "\\Device\\Harddisk60\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbi9", BRACK(FH_SDBI | 9), "\\Device\\Harddisk60\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbi10", BRACK(FH_SDBI | 10), "\\Device\\Harddisk60\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbi11", BRACK(FH_SDBI | 11), "\\Device\\Harddisk60\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbi12", BRACK(FH_SDBI | 12), "\\Device\\Harddisk60\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbi13", BRACK(FH_SDBI | 13), "\\Device\\Harddisk60\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbi14", BRACK(FH_SDBI | 14), "\\Device\\Harddisk60\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbi15", BRACK(FH_SDBI | 15), "\\Device\\Harddisk60\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbj1", BRACK(FH_SDBJ | 1), "\\Device\\Harddisk61\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbj2", BRACK(FH_SDBJ | 2), "\\Device\\Harddisk61\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbj3", BRACK(FH_SDBJ | 3), "\\Device\\Harddisk61\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbj4", BRACK(FH_SDBJ | 4), "\\Device\\Harddisk61\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbj5", BRACK(FH_SDBJ | 5), "\\Device\\Harddisk61\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbj6", BRACK(FH_SDBJ | 6), "\\Device\\Harddisk61\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbj7", BRACK(FH_SDBJ | 7), "\\Device\\Harddisk61\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbj8", BRACK(FH_SDBJ | 8), "\\Device\\Harddisk61\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbj9", BRACK(FH_SDBJ | 9), "\\Device\\Harddisk61\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbj10", BRACK(FH_SDBJ | 10), "\\Device\\Harddisk61\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbj11", BRACK(FH_SDBJ | 11), "\\Device\\Harddisk61\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbj12", BRACK(FH_SDBJ | 12), "\\Device\\Harddisk61\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbj13", BRACK(FH_SDBJ | 13), "\\Device\\Harddisk61\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbj14", BRACK(FH_SDBJ | 14), "\\Device\\Harddisk61\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbj15", BRACK(FH_SDBJ | 15), "\\Device\\Harddisk61\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbk1", BRACK(FH_SDBK | 1), "\\Device\\Harddisk62\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbk2", BRACK(FH_SDBK | 2), "\\Device\\Harddisk62\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbk3", BRACK(FH_SDBK | 3), "\\Device\\Harddisk62\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbk4", BRACK(FH_SDBK | 4), "\\Device\\Harddisk62\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbk5", BRACK(FH_SDBK | 5), "\\Device\\Harddisk62\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbk6", BRACK(FH_SDBK | 6), "\\Device\\Harddisk62\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbk7", BRACK(FH_SDBK | 7), "\\Device\\Harddisk62\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbk8", BRACK(FH_SDBK | 8), "\\Device\\Harddisk62\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbk9", BRACK(FH_SDBK | 9), "\\Device\\Harddisk62\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbk10", BRACK(FH_SDBK | 10), "\\Device\\Harddisk62\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbk11", BRACK(FH_SDBK | 11), "\\Device\\Harddisk62\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbk12", BRACK(FH_SDBK | 12), "\\Device\\Harddisk62\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbk13", BRACK(FH_SDBK | 13), "\\Device\\Harddisk62\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbk14", BRACK(FH_SDBK | 14), "\\Device\\Harddisk62\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbk15", BRACK(FH_SDBK | 15), "\\Device\\Harddisk62\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbl1", BRACK(FH_SDBL | 1), "\\Device\\Harddisk63\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbl2", BRACK(FH_SDBL | 2), "\\Device\\Harddisk63\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbl3", BRACK(FH_SDBL | 3), "\\Device\\Harddisk63\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbl4", BRACK(FH_SDBL | 4), "\\Device\\Harddisk63\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbl5", BRACK(FH_SDBL | 5), "\\Device\\Harddisk63\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbl6", BRACK(FH_SDBL | 6), "\\Device\\Harddisk63\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbl7", BRACK(FH_SDBL | 7), "\\Device\\Harddisk63\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbl8", BRACK(FH_SDBL | 8), "\\Device\\Harddisk63\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbl9", BRACK(FH_SDBL | 9), "\\Device\\Harddisk63\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbl10", BRACK(FH_SDBL | 10), "\\Device\\Harddisk63\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbl11", BRACK(FH_SDBL | 11), "\\Device\\Harddisk63\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbl12", BRACK(FH_SDBL | 12), "\\Device\\Harddisk63\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbl13", BRACK(FH_SDBL | 13), "\\Device\\Harddisk63\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbl14", BRACK(FH_SDBL | 14), "\\Device\\Harddisk63\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbl15", BRACK(FH_SDBL | 15), "\\Device\\Harddisk63\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbm1", BRACK(FH_SDBM | 1), "\\Device\\Harddisk64\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbm2", BRACK(FH_SDBM | 2), "\\Device\\Harddisk64\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbm3", BRACK(FH_SDBM | 3), "\\Device\\Harddisk64\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbm4", BRACK(FH_SDBM | 4), "\\Device\\Harddisk64\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbm5", BRACK(FH_SDBM | 5), "\\Device\\Harddisk64\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbm6", BRACK(FH_SDBM | 6), "\\Device\\Harddisk64\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbm7", BRACK(FH_SDBM | 7), "\\Device\\Harddisk64\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbm8", BRACK(FH_SDBM | 8), "\\Device\\Harddisk64\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbm9", BRACK(FH_SDBM | 9), "\\Device\\Harddisk64\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbm10", BRACK(FH_SDBM | 10), "\\Device\\Harddisk64\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbm11", BRACK(FH_SDBM | 11), "\\Device\\Harddisk64\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbm12", BRACK(FH_SDBM | 12), "\\Device\\Harddisk64\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbm13", BRACK(FH_SDBM | 13), "\\Device\\Harddisk64\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbm14", BRACK(FH_SDBM | 14), "\\Device\\Harddisk64\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbm15", BRACK(FH_SDBM | 15), "\\Device\\Harddisk64\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbn1", BRACK(FH_SDBN | 1), "\\Device\\Harddisk65\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbn2", BRACK(FH_SDBN | 2), "\\Device\\Harddisk65\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbn3", BRACK(FH_SDBN | 3), "\\Device\\Harddisk65\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbn4", BRACK(FH_SDBN | 4), "\\Device\\Harddisk65\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbn5", BRACK(FH_SDBN | 5), "\\Device\\Harddisk65\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbn6", BRACK(FH_SDBN | 6), "\\Device\\Harddisk65\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbn7", BRACK(FH_SDBN | 7), "\\Device\\Harddisk65\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbn8", BRACK(FH_SDBN | 8), "\\Device\\Harddisk65\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbn9", BRACK(FH_SDBN | 9), "\\Device\\Harddisk65\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbn10", BRACK(FH_SDBN | 10), "\\Device\\Harddisk65\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbn11", BRACK(FH_SDBN | 11), "\\Device\\Harddisk65\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbn12", BRACK(FH_SDBN | 12), "\\Device\\Harddisk65\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbn13", BRACK(FH_SDBN | 13), "\\Device\\Harddisk65\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbn14", BRACK(FH_SDBN | 14), "\\Device\\Harddisk65\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbn15", BRACK(FH_SDBN | 15), "\\Device\\Harddisk65\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbo1", BRACK(FH_SDBO | 1), "\\Device\\Harddisk66\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbo2", BRACK(FH_SDBO | 2), "\\Device\\Harddisk66\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbo3", BRACK(FH_SDBO | 3), "\\Device\\Harddisk66\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbo4", BRACK(FH_SDBO | 4), "\\Device\\Harddisk66\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbo5", BRACK(FH_SDBO | 5), "\\Device\\Harddisk66\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbo6", BRACK(FH_SDBO | 6), "\\Device\\Harddisk66\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbo7", BRACK(FH_SDBO | 7), "\\Device\\Harddisk66\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbo8", BRACK(FH_SDBO | 8), "\\Device\\Harddisk66\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbo9", BRACK(FH_SDBO | 9), "\\Device\\Harddisk66\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbo10", BRACK(FH_SDBO | 10), "\\Device\\Harddisk66\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbo11", BRACK(FH_SDBO | 11), "\\Device\\Harddisk66\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbo12", BRACK(FH_SDBO | 12), "\\Device\\Harddisk66\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbo13", BRACK(FH_SDBO | 13), "\\Device\\Harddisk66\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbo14", BRACK(FH_SDBO | 14), "\\Device\\Harddisk66\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbo15", BRACK(FH_SDBO | 15), "\\Device\\Harddisk66\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbp1", BRACK(FH_SDBP | 1), "\\Device\\Harddisk67\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbp2", BRACK(FH_SDBP | 2), "\\Device\\Harddisk67\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbp3", BRACK(FH_SDBP | 3), "\\Device\\Harddisk67\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbp4", BRACK(FH_SDBP | 4), "\\Device\\Harddisk67\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbp5", BRACK(FH_SDBP | 5), "\\Device\\Harddisk67\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbp6", BRACK(FH_SDBP | 6), "\\Device\\Harddisk67\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbp7", BRACK(FH_SDBP | 7), "\\Device\\Harddisk67\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbp8", BRACK(FH_SDBP | 8), "\\Device\\Harddisk67\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbp9", BRACK(FH_SDBP | 9), "\\Device\\Harddisk67\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbp10", BRACK(FH_SDBP | 10), "\\Device\\Harddisk67\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbp11", BRACK(FH_SDBP | 11), "\\Device\\Harddisk67\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbp12", BRACK(FH_SDBP | 12), "\\Device\\Harddisk67\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbp13", BRACK(FH_SDBP | 13), "\\Device\\Harddisk67\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbp14", BRACK(FH_SDBP | 14), "\\Device\\Harddisk67\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbp15", BRACK(FH_SDBP | 15), "\\Device\\Harddisk67\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbq1", BRACK(FH_SDBQ | 1), "\\Device\\Harddisk68\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbq2", BRACK(FH_SDBQ | 2), "\\Device\\Harddisk68\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbq3", BRACK(FH_SDBQ | 3), "\\Device\\Harddisk68\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbq4", BRACK(FH_SDBQ | 4), "\\Device\\Harddisk68\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbq5", BRACK(FH_SDBQ | 5), "\\Device\\Harddisk68\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbq6", BRACK(FH_SDBQ | 6), "\\Device\\Harddisk68\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbq7", BRACK(FH_SDBQ | 7), "\\Device\\Harddisk68\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbq8", BRACK(FH_SDBQ | 8), "\\Device\\Harddisk68\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbq9", BRACK(FH_SDBQ | 9), "\\Device\\Harddisk68\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbq10", BRACK(FH_SDBQ | 10), "\\Device\\Harddisk68\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbq11", BRACK(FH_SDBQ | 11), "\\Device\\Harddisk68\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbq12", BRACK(FH_SDBQ | 12), "\\Device\\Harddisk68\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbq13", BRACK(FH_SDBQ | 13), "\\Device\\Harddisk68\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbq14", BRACK(FH_SDBQ | 14), "\\Device\\Harddisk68\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbq15", BRACK(FH_SDBQ | 15), "\\Device\\Harddisk68\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbr1", BRACK(FH_SDBR | 1), "\\Device\\Harddisk69\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbr2", BRACK(FH_SDBR | 2), "\\Device\\Harddisk69\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbr3", BRACK(FH_SDBR | 3), "\\Device\\Harddisk69\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbr4", BRACK(FH_SDBR | 4), "\\Device\\Harddisk69\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbr5", BRACK(FH_SDBR | 5), "\\Device\\Harddisk69\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbr6", BRACK(FH_SDBR | 6), "\\Device\\Harddisk69\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbr7", BRACK(FH_SDBR | 7), "\\Device\\Harddisk69\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbr8", BRACK(FH_SDBR | 8), "\\Device\\Harddisk69\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbr9", BRACK(FH_SDBR | 9), "\\Device\\Harddisk69\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbr10", BRACK(FH_SDBR | 10), "\\Device\\Harddisk69\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbr11", BRACK(FH_SDBR | 11), "\\Device\\Harddisk69\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbr12", BRACK(FH_SDBR | 12), "\\Device\\Harddisk69\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbr13", BRACK(FH_SDBR | 13), "\\Device\\Harddisk69\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbr14", BRACK(FH_SDBR | 14), "\\Device\\Harddisk69\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbr15", BRACK(FH_SDBR | 15), "\\Device\\Harddisk69\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbs1", BRACK(FH_SDBS | 1), "\\Device\\Harddisk70\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbs2", BRACK(FH_SDBS | 2), "\\Device\\Harddisk70\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbs3", BRACK(FH_SDBS | 3), "\\Device\\Harddisk70\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbs4", BRACK(FH_SDBS | 4), "\\Device\\Harddisk70\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbs5", BRACK(FH_SDBS | 5), "\\Device\\Harddisk70\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbs6", BRACK(FH_SDBS | 6), "\\Device\\Harddisk70\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbs7", BRACK(FH_SDBS | 7), "\\Device\\Harddisk70\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbs8", BRACK(FH_SDBS | 8), "\\Device\\Harddisk70\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbs9", BRACK(FH_SDBS | 9), "\\Device\\Harddisk70\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbs10", BRACK(FH_SDBS | 10), "\\Device\\Harddisk70\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbs11", BRACK(FH_SDBS | 11), "\\Device\\Harddisk70\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbs12", BRACK(FH_SDBS | 12), "\\Device\\Harddisk70\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbs13", BRACK(FH_SDBS | 13), "\\Device\\Harddisk70\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbs14", BRACK(FH_SDBS | 14), "\\Device\\Harddisk70\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbs15", BRACK(FH_SDBS | 15), "\\Device\\Harddisk70\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbt1", BRACK(FH_SDBT | 1), "\\Device\\Harddisk71\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbt2", BRACK(FH_SDBT | 2), "\\Device\\Harddisk71\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbt3", BRACK(FH_SDBT | 3), "\\Device\\Harddisk71\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbt4", BRACK(FH_SDBT | 4), "\\Device\\Harddisk71\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbt5", BRACK(FH_SDBT | 5), "\\Device\\Harddisk71\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbt6", BRACK(FH_SDBT | 6), "\\Device\\Harddisk71\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbt7", BRACK(FH_SDBT | 7), "\\Device\\Harddisk71\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbt8", BRACK(FH_SDBT | 8), "\\Device\\Harddisk71\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbt9", BRACK(FH_SDBT | 9), "\\Device\\Harddisk71\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbt10", BRACK(FH_SDBT | 10), "\\Device\\Harddisk71\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbt11", BRACK(FH_SDBT | 11), "\\Device\\Harddisk71\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbt12", BRACK(FH_SDBT | 12), "\\Device\\Harddisk71\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbt13", BRACK(FH_SDBT | 13), "\\Device\\Harddisk71\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbt14", BRACK(FH_SDBT | 14), "\\Device\\Harddisk71\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbt15", BRACK(FH_SDBT | 15), "\\Device\\Harddisk71\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbu1", BRACK(FH_SDBU | 1), "\\Device\\Harddisk72\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbu2", BRACK(FH_SDBU | 2), "\\Device\\Harddisk72\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbu3", BRACK(FH_SDBU | 3), "\\Device\\Harddisk72\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbu4", BRACK(FH_SDBU | 4), "\\Device\\Harddisk72\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbu5", BRACK(FH_SDBU | 5), "\\Device\\Harddisk72\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbu6", BRACK(FH_SDBU | 6), "\\Device\\Harddisk72\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbu7", BRACK(FH_SDBU | 7), "\\Device\\Harddisk72\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbu8", BRACK(FH_SDBU | 8), "\\Device\\Harddisk72\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbu9", BRACK(FH_SDBU | 9), "\\Device\\Harddisk72\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbu10", BRACK(FH_SDBU | 10), "\\Device\\Harddisk72\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbu11", BRACK(FH_SDBU | 11), "\\Device\\Harddisk72\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbu12", BRACK(FH_SDBU | 12), "\\Device\\Harddisk72\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbu13", BRACK(FH_SDBU | 13), "\\Device\\Harddisk72\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbu14", BRACK(FH_SDBU | 14), "\\Device\\Harddisk72\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbu15", BRACK(FH_SDBU | 15), "\\Device\\Harddisk72\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbv1", BRACK(FH_SDBV | 1), "\\Device\\Harddisk73\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbv2", BRACK(FH_SDBV | 2), "\\Device\\Harddisk73\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbv3", BRACK(FH_SDBV | 3), "\\Device\\Harddisk73\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbv4", BRACK(FH_SDBV | 4), "\\Device\\Harddisk73\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbv5", BRACK(FH_SDBV | 5), "\\Device\\Harddisk73\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbv6", BRACK(FH_SDBV | 6), "\\Device\\Harddisk73\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbv7", BRACK(FH_SDBV | 7), "\\Device\\Harddisk73\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbv8", BRACK(FH_SDBV | 8), "\\Device\\Harddisk73\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbv9", BRACK(FH_SDBV | 9), "\\Device\\Harddisk73\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbv10", BRACK(FH_SDBV | 10), "\\Device\\Harddisk73\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbv11", BRACK(FH_SDBV | 11), "\\Device\\Harddisk73\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbv12", BRACK(FH_SDBV | 12), "\\Device\\Harddisk73\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbv13", BRACK(FH_SDBV | 13), "\\Device\\Harddisk73\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbv14", BRACK(FH_SDBV | 14), "\\Device\\Harddisk73\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbv15", BRACK(FH_SDBV | 15), "\\Device\\Harddisk73\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbw1", BRACK(FH_SDBW | 1), "\\Device\\Harddisk74\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbw2", BRACK(FH_SDBW | 2), "\\Device\\Harddisk74\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbw3", BRACK(FH_SDBW | 3), "\\Device\\Harddisk74\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbw4", BRACK(FH_SDBW | 4), "\\Device\\Harddisk74\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbw5", BRACK(FH_SDBW | 5), "\\Device\\Harddisk74\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbw6", BRACK(FH_SDBW | 6), "\\Device\\Harddisk74\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbw7", BRACK(FH_SDBW | 7), "\\Device\\Harddisk74\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbw8", BRACK(FH_SDBW | 8), "\\Device\\Harddisk74\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbw9", BRACK(FH_SDBW | 9), "\\Device\\Harddisk74\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbw10", BRACK(FH_SDBW | 10), "\\Device\\Harddisk74\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbw11", BRACK(FH_SDBW | 11), "\\Device\\Harddisk74\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbw12", BRACK(FH_SDBW | 12), "\\Device\\Harddisk74\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbw13", BRACK(FH_SDBW | 13), "\\Device\\Harddisk74\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbw14", BRACK(FH_SDBW | 14), "\\Device\\Harddisk74\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbw15", BRACK(FH_SDBW | 15), "\\Device\\Harddisk74\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbx1", BRACK(FH_SDBX | 1), "\\Device\\Harddisk75\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbx2", BRACK(FH_SDBX | 2), "\\Device\\Harddisk75\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbx3", BRACK(FH_SDBX | 3), "\\Device\\Harddisk75\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbx4", BRACK(FH_SDBX | 4), "\\Device\\Harddisk75\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbx5", BRACK(FH_SDBX | 5), "\\Device\\Harddisk75\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbx6", BRACK(FH_SDBX | 6), "\\Device\\Harddisk75\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbx7", BRACK(FH_SDBX | 7), "\\Device\\Harddisk75\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbx8", BRACK(FH_SDBX | 8), "\\Device\\Harddisk75\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbx9", BRACK(FH_SDBX | 9), "\\Device\\Harddisk75\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbx10", BRACK(FH_SDBX | 10), "\\Device\\Harddisk75\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbx11", BRACK(FH_SDBX | 11), "\\Device\\Harddisk75\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbx12", BRACK(FH_SDBX | 12), "\\Device\\Harddisk75\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbx13", BRACK(FH_SDBX | 13), "\\Device\\Harddisk75\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbx14", BRACK(FH_SDBX | 14), "\\Device\\Harddisk75\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbx15", BRACK(FH_SDBX | 15), "\\Device\\Harddisk75\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdby1", BRACK(FH_SDBY | 1), "\\Device\\Harddisk76\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdby2", BRACK(FH_SDBY | 2), "\\Device\\Harddisk76\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdby3", BRACK(FH_SDBY | 3), "\\Device\\Harddisk76\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdby4", BRACK(FH_SDBY | 4), "\\Device\\Harddisk76\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdby5", BRACK(FH_SDBY | 5), "\\Device\\Harddisk76\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdby6", BRACK(FH_SDBY | 6), "\\Device\\Harddisk76\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdby7", BRACK(FH_SDBY | 7), "\\Device\\Harddisk76\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdby8", BRACK(FH_SDBY | 8), "\\Device\\Harddisk76\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdby9", BRACK(FH_SDBY | 9), "\\Device\\Harddisk76\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdby10", BRACK(FH_SDBY | 10), "\\Device\\Harddisk76\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdby11", BRACK(FH_SDBY | 11), "\\Device\\Harddisk76\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdby12", BRACK(FH_SDBY | 12), "\\Device\\Harddisk76\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdby13", BRACK(FH_SDBY | 13), "\\Device\\Harddisk76\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdby14", BRACK(FH_SDBY | 14), "\\Device\\Harddisk76\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdby15", BRACK(FH_SDBY | 15), "\\Device\\Harddisk76\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbz1", BRACK(FH_SDBZ | 1), "\\Device\\Harddisk77\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbz2", BRACK(FH_SDBZ | 2), "\\Device\\Harddisk77\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbz3", BRACK(FH_SDBZ | 3), "\\Device\\Harddisk77\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbz4", BRACK(FH_SDBZ | 4), "\\Device\\Harddisk77\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbz5", BRACK(FH_SDBZ | 5), "\\Device\\Harddisk77\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbz6", BRACK(FH_SDBZ | 6), "\\Device\\Harddisk77\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbz7", BRACK(FH_SDBZ | 7), "\\Device\\Harddisk77\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbz8", BRACK(FH_SDBZ | 8), "\\Device\\Harddisk77\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbz9", BRACK(FH_SDBZ | 9), "\\Device\\Harddisk77\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbz10", BRACK(FH_SDBZ | 10), "\\Device\\Harddisk77\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbz11", BRACK(FH_SDBZ | 11), "\\Device\\Harddisk77\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbz12", BRACK(FH_SDBZ | 12), "\\Device\\Harddisk77\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbz13", BRACK(FH_SDBZ | 13), "\\Device\\Harddisk77\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbz14", BRACK(FH_SDBZ | 14), "\\Device\\Harddisk77\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdbz15", BRACK(FH_SDBZ | 15), "\\Device\\Harddisk77\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdca", BRACK(FH_SDCA), "\\Device\\Harddisk78\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcb", BRACK(FH_SDCB), "\\Device\\Harddisk79\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcc", BRACK(FH_SDCC), "\\Device\\Harddisk80\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcd", BRACK(FH_SDCD), "\\Device\\Harddisk81\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdce", BRACK(FH_SDCE), "\\Device\\Harddisk82\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcf", BRACK(FH_SDCF), "\\Device\\Harddisk83\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcg", BRACK(FH_SDCG), "\\Device\\Harddisk84\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdch", BRACK(FH_SDCH), "\\Device\\Harddisk85\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdci", BRACK(FH_SDCI), "\\Device\\Harddisk86\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcj", BRACK(FH_SDCJ), "\\Device\\Harddisk87\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdck", BRACK(FH_SDCK), "\\Device\\Harddisk88\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcl", BRACK(FH_SDCL), "\\Device\\Harddisk89\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcm", BRACK(FH_SDCM), "\\Device\\Harddisk90\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcn", BRACK(FH_SDCN), "\\Device\\Harddisk91\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdco", BRACK(FH_SDCO), "\\Device\\Harddisk92\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcp", BRACK(FH_SDCP), "\\Device\\Harddisk93\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcq", BRACK(FH_SDCQ), "\\Device\\Harddisk94\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcr", BRACK(FH_SDCR), "\\Device\\Harddisk95\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcs", BRACK(FH_SDCS), "\\Device\\Harddisk96\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdct", BRACK(FH_SDCT), "\\Device\\Harddisk97\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcu", BRACK(FH_SDCU), "\\Device\\Harddisk98\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcv", BRACK(FH_SDCV), "\\Device\\Harddisk99\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcw", BRACK(FH_SDCW), "\\Device\\Harddisk100\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcx", BRACK(FH_SDCX), "\\Device\\Harddisk101\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcy", BRACK(FH_SDCY), "\\Device\\Harddisk102\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcz", BRACK(FH_SDCZ), "\\Device\\Harddisk103\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdca1", BRACK(FH_SDCA | 1), "\\Device\\Harddisk78\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdca2", BRACK(FH_SDCA | 2), "\\Device\\Harddisk78\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdca3", BRACK(FH_SDCA | 3), "\\Device\\Harddisk78\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdca4", BRACK(FH_SDCA | 4), "\\Device\\Harddisk78\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdca5", BRACK(FH_SDCA | 5), "\\Device\\Harddisk78\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdca6", BRACK(FH_SDCA | 6), "\\Device\\Harddisk78\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdca7", BRACK(FH_SDCA | 7), "\\Device\\Harddisk78\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdca8", BRACK(FH_SDCA | 8), "\\Device\\Harddisk78\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdca9", BRACK(FH_SDCA | 9), "\\Device\\Harddisk78\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdca10", BRACK(FH_SDCA | 10), "\\Device\\Harddisk78\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdca11", BRACK(FH_SDCA | 11), "\\Device\\Harddisk78\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdca12", BRACK(FH_SDCA | 12), "\\Device\\Harddisk78\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdca13", BRACK(FH_SDCA | 13), "\\Device\\Harddisk78\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdca14", BRACK(FH_SDCA | 14), "\\Device\\Harddisk78\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdca15", BRACK(FH_SDCA | 15), "\\Device\\Harddisk78\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcb1", BRACK(FH_SDCB | 1), "\\Device\\Harddisk79\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcb2", BRACK(FH_SDCB | 2), "\\Device\\Harddisk79\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcb3", BRACK(FH_SDCB | 3), "\\Device\\Harddisk79\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcb4", BRACK(FH_SDCB | 4), "\\Device\\Harddisk79\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcb5", BRACK(FH_SDCB | 5), "\\Device\\Harddisk79\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcb6", BRACK(FH_SDCB | 6), "\\Device\\Harddisk79\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcb7", BRACK(FH_SDCB | 7), "\\Device\\Harddisk79\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcb8", BRACK(FH_SDCB | 8), "\\Device\\Harddisk79\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcb9", BRACK(FH_SDCB | 9), "\\Device\\Harddisk79\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcb10", BRACK(FH_SDCB | 10), "\\Device\\Harddisk79\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcb11", BRACK(FH_SDCB | 11), "\\Device\\Harddisk79\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcb12", BRACK(FH_SDCB | 12), "\\Device\\Harddisk79\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcb13", BRACK(FH_SDCB | 13), "\\Device\\Harddisk79\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcb14", BRACK(FH_SDCB | 14), "\\Device\\Harddisk79\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcb15", BRACK(FH_SDCB | 15), "\\Device\\Harddisk79\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcc1", BRACK(FH_SDCC | 1), "\\Device\\Harddisk80\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcc2", BRACK(FH_SDCC | 2), "\\Device\\Harddisk80\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcc3", BRACK(FH_SDCC | 3), "\\Device\\Harddisk80\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcc4", BRACK(FH_SDCC | 4), "\\Device\\Harddisk80\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcc5", BRACK(FH_SDCC | 5), "\\Device\\Harddisk80\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcc6", BRACK(FH_SDCC | 6), "\\Device\\Harddisk80\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcc7", BRACK(FH_SDCC | 7), "\\Device\\Harddisk80\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcc8", BRACK(FH_SDCC | 8), "\\Device\\Harddisk80\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcc9", BRACK(FH_SDCC | 9), "\\Device\\Harddisk80\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcc10", BRACK(FH_SDCC | 10), "\\Device\\Harddisk80\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcc11", BRACK(FH_SDCC | 11), "\\Device\\Harddisk80\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcc12", BRACK(FH_SDCC | 12), "\\Device\\Harddisk80\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcc13", BRACK(FH_SDCC | 13), "\\Device\\Harddisk80\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcc14", BRACK(FH_SDCC | 14), "\\Device\\Harddisk80\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcc15", BRACK(FH_SDCC | 15), "\\Device\\Harddisk80\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcd1", BRACK(FH_SDCD | 1), "\\Device\\Harddisk81\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcd2", BRACK(FH_SDCD | 2), "\\Device\\Harddisk81\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcd3", BRACK(FH_SDCD | 3), "\\Device\\Harddisk81\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcd4", BRACK(FH_SDCD | 4), "\\Device\\Harddisk81\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcd5", BRACK(FH_SDCD | 5), "\\Device\\Harddisk81\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcd6", BRACK(FH_SDCD | 6), "\\Device\\Harddisk81\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcd7", BRACK(FH_SDCD | 7), "\\Device\\Harddisk81\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcd8", BRACK(FH_SDCD | 8), "\\Device\\Harddisk81\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcd9", BRACK(FH_SDCD | 9), "\\Device\\Harddisk81\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcd10", BRACK(FH_SDCD | 10), "\\Device\\Harddisk81\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcd11", BRACK(FH_SDCD | 11), "\\Device\\Harddisk81\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcd12", BRACK(FH_SDCD | 12), "\\Device\\Harddisk81\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcd13", BRACK(FH_SDCD | 13), "\\Device\\Harddisk81\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcd14", BRACK(FH_SDCD | 14), "\\Device\\Harddisk81\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcd15", BRACK(FH_SDCD | 15), "\\Device\\Harddisk81\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdce1", BRACK(FH_SDCE | 1), "\\Device\\Harddisk82\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdce2", BRACK(FH_SDCE | 2), "\\Device\\Harddisk82\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdce3", BRACK(FH_SDCE | 3), "\\Device\\Harddisk82\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdce4", BRACK(FH_SDCE | 4), "\\Device\\Harddisk82\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdce5", BRACK(FH_SDCE | 5), "\\Device\\Harddisk82\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdce6", BRACK(FH_SDCE | 6), "\\Device\\Harddisk82\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdce7", BRACK(FH_SDCE | 7), "\\Device\\Harddisk82\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdce8", BRACK(FH_SDCE | 8), "\\Device\\Harddisk82\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdce9", BRACK(FH_SDCE | 9), "\\Device\\Harddisk82\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdce10", BRACK(FH_SDCE | 10), "\\Device\\Harddisk82\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdce11", BRACK(FH_SDCE | 11), "\\Device\\Harddisk82\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdce12", BRACK(FH_SDCE | 12), "\\Device\\Harddisk82\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdce13", BRACK(FH_SDCE | 13), "\\Device\\Harddisk82\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdce14", BRACK(FH_SDCE | 14), "\\Device\\Harddisk82\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdce15", BRACK(FH_SDCE | 15), "\\Device\\Harddisk82\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcf1", BRACK(FH_SDCF | 1), "\\Device\\Harddisk83\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcf2", BRACK(FH_SDCF | 2), "\\Device\\Harddisk83\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcf3", BRACK(FH_SDCF | 3), "\\Device\\Harddisk83\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcf4", BRACK(FH_SDCF | 4), "\\Device\\Harddisk83\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcf5", BRACK(FH_SDCF | 5), "\\Device\\Harddisk83\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcf6", BRACK(FH_SDCF | 6), "\\Device\\Harddisk83\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcf7", BRACK(FH_SDCF | 7), "\\Device\\Harddisk83\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcf8", BRACK(FH_SDCF | 8), "\\Device\\Harddisk83\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcf9", BRACK(FH_SDCF | 9), "\\Device\\Harddisk83\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcf10", BRACK(FH_SDCF | 10), "\\Device\\Harddisk83\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcf11", BRACK(FH_SDCF | 11), "\\Device\\Harddisk83\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcf12", BRACK(FH_SDCF | 12), "\\Device\\Harddisk83\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcf13", BRACK(FH_SDCF | 13), "\\Device\\Harddisk83\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcf14", BRACK(FH_SDCF | 14), "\\Device\\Harddisk83\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcf15", BRACK(FH_SDCF | 15), "\\Device\\Harddisk83\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcg1", BRACK(FH_SDCG | 1), "\\Device\\Harddisk84\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcg2", BRACK(FH_SDCG | 2), "\\Device\\Harddisk84\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcg3", BRACK(FH_SDCG | 3), "\\Device\\Harddisk84\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcg4", BRACK(FH_SDCG | 4), "\\Device\\Harddisk84\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcg5", BRACK(FH_SDCG | 5), "\\Device\\Harddisk84\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcg6", BRACK(FH_SDCG | 6), "\\Device\\Harddisk84\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcg7", BRACK(FH_SDCG | 7), "\\Device\\Harddisk84\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcg8", BRACK(FH_SDCG | 8), "\\Device\\Harddisk84\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcg9", BRACK(FH_SDCG | 9), "\\Device\\Harddisk84\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcg10", BRACK(FH_SDCG | 10), "\\Device\\Harddisk84\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcg11", BRACK(FH_SDCG | 11), "\\Device\\Harddisk84\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcg12", BRACK(FH_SDCG | 12), "\\Device\\Harddisk84\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcg13", BRACK(FH_SDCG | 13), "\\Device\\Harddisk84\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcg14", BRACK(FH_SDCG | 14), "\\Device\\Harddisk84\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcg15", BRACK(FH_SDCG | 15), "\\Device\\Harddisk84\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdch1", BRACK(FH_SDCH | 1), "\\Device\\Harddisk85\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdch2", BRACK(FH_SDCH | 2), "\\Device\\Harddisk85\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdch3", BRACK(FH_SDCH | 3), "\\Device\\Harddisk85\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdch4", BRACK(FH_SDCH | 4), "\\Device\\Harddisk85\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdch5", BRACK(FH_SDCH | 5), "\\Device\\Harddisk85\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdch6", BRACK(FH_SDCH | 6), "\\Device\\Harddisk85\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdch7", BRACK(FH_SDCH | 7), "\\Device\\Harddisk85\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdch8", BRACK(FH_SDCH | 8), "\\Device\\Harddisk85\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdch9", BRACK(FH_SDCH | 9), "\\Device\\Harddisk85\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdch10", BRACK(FH_SDCH | 10), "\\Device\\Harddisk85\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdch11", BRACK(FH_SDCH | 11), "\\Device\\Harddisk85\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdch12", BRACK(FH_SDCH | 12), "\\Device\\Harddisk85\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdch13", BRACK(FH_SDCH | 13), "\\Device\\Harddisk85\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdch14", BRACK(FH_SDCH | 14), "\\Device\\Harddisk85\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdch15", BRACK(FH_SDCH | 15), "\\Device\\Harddisk85\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdci1", BRACK(FH_SDCI | 1), "\\Device\\Harddisk86\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdci2", BRACK(FH_SDCI | 2), "\\Device\\Harddisk86\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdci3", BRACK(FH_SDCI | 3), "\\Device\\Harddisk86\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdci4", BRACK(FH_SDCI | 4), "\\Device\\Harddisk86\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdci5", BRACK(FH_SDCI | 5), "\\Device\\Harddisk86\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdci6", BRACK(FH_SDCI | 6), "\\Device\\Harddisk86\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdci7", BRACK(FH_SDCI | 7), "\\Device\\Harddisk86\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdci8", BRACK(FH_SDCI | 8), "\\Device\\Harddisk86\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdci9", BRACK(FH_SDCI | 9), "\\Device\\Harddisk86\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdci10", BRACK(FH_SDCI | 10), "\\Device\\Harddisk86\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdci11", BRACK(FH_SDCI | 11), "\\Device\\Harddisk86\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdci12", BRACK(FH_SDCI | 12), "\\Device\\Harddisk86\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdci13", BRACK(FH_SDCI | 13), "\\Device\\Harddisk86\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdci14", BRACK(FH_SDCI | 14), "\\Device\\Harddisk86\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdci15", BRACK(FH_SDCI | 15), "\\Device\\Harddisk86\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcj1", BRACK(FH_SDCJ | 1), "\\Device\\Harddisk87\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcj2", BRACK(FH_SDCJ | 2), "\\Device\\Harddisk87\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcj3", BRACK(FH_SDCJ | 3), "\\Device\\Harddisk87\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcj4", BRACK(FH_SDCJ | 4), "\\Device\\Harddisk87\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcj5", BRACK(FH_SDCJ | 5), "\\Device\\Harddisk87\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcj6", BRACK(FH_SDCJ | 6), "\\Device\\Harddisk87\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcj7", BRACK(FH_SDCJ | 7), "\\Device\\Harddisk87\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcj8", BRACK(FH_SDCJ | 8), "\\Device\\Harddisk87\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcj9", BRACK(FH_SDCJ | 9), "\\Device\\Harddisk87\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcj10", BRACK(FH_SDCJ | 10), "\\Device\\Harddisk87\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcj11", BRACK(FH_SDCJ | 11), "\\Device\\Harddisk87\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcj12", BRACK(FH_SDCJ | 12), "\\Device\\Harddisk87\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcj13", BRACK(FH_SDCJ | 13), "\\Device\\Harddisk87\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcj14", BRACK(FH_SDCJ | 14), "\\Device\\Harddisk87\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcj15", BRACK(FH_SDCJ | 15), "\\Device\\Harddisk87\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdck1", BRACK(FH_SDCK | 1), "\\Device\\Harddisk88\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdck2", BRACK(FH_SDCK | 2), "\\Device\\Harddisk88\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdck3", BRACK(FH_SDCK | 3), "\\Device\\Harddisk88\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdck4", BRACK(FH_SDCK | 4), "\\Device\\Harddisk88\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdck5", BRACK(FH_SDCK | 5), "\\Device\\Harddisk88\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdck6", BRACK(FH_SDCK | 6), "\\Device\\Harddisk88\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdck7", BRACK(FH_SDCK | 7), "\\Device\\Harddisk88\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdck8", BRACK(FH_SDCK | 8), "\\Device\\Harddisk88\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdck9", BRACK(FH_SDCK | 9), "\\Device\\Harddisk88\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdck10", BRACK(FH_SDCK | 10), "\\Device\\Harddisk88\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdck11", BRACK(FH_SDCK | 11), "\\Device\\Harddisk88\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdck12", BRACK(FH_SDCK | 12), "\\Device\\Harddisk88\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdck13", BRACK(FH_SDCK | 13), "\\Device\\Harddisk88\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdck14", BRACK(FH_SDCK | 14), "\\Device\\Harddisk88\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdck15", BRACK(FH_SDCK | 15), "\\Device\\Harddisk88\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcl1", BRACK(FH_SDCL | 1), "\\Device\\Harddisk89\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcl2", BRACK(FH_SDCL | 2), "\\Device\\Harddisk89\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcl3", BRACK(FH_SDCL | 3), "\\Device\\Harddisk89\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcl4", BRACK(FH_SDCL | 4), "\\Device\\Harddisk89\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcl5", BRACK(FH_SDCL | 5), "\\Device\\Harddisk89\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcl6", BRACK(FH_SDCL | 6), "\\Device\\Harddisk89\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcl7", BRACK(FH_SDCL | 7), "\\Device\\Harddisk89\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcl8", BRACK(FH_SDCL | 8), "\\Device\\Harddisk89\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcl9", BRACK(FH_SDCL | 9), "\\Device\\Harddisk89\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcl10", BRACK(FH_SDCL | 10), "\\Device\\Harddisk89\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcl11", BRACK(FH_SDCL | 11), "\\Device\\Harddisk89\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcl12", BRACK(FH_SDCL | 12), "\\Device\\Harddisk89\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcl13", BRACK(FH_SDCL | 13), "\\Device\\Harddisk89\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcl14", BRACK(FH_SDCL | 14), "\\Device\\Harddisk89\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcl15", BRACK(FH_SDCL | 15), "\\Device\\Harddisk89\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcm1", BRACK(FH_SDCM | 1), "\\Device\\Harddisk90\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcm2", BRACK(FH_SDCM | 2), "\\Device\\Harddisk90\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcm3", BRACK(FH_SDCM | 3), "\\Device\\Harddisk90\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcm4", BRACK(FH_SDCM | 4), "\\Device\\Harddisk90\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcm5", BRACK(FH_SDCM | 5), "\\Device\\Harddisk90\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcm6", BRACK(FH_SDCM | 6), "\\Device\\Harddisk90\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcm7", BRACK(FH_SDCM | 7), "\\Device\\Harddisk90\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcm8", BRACK(FH_SDCM | 8), "\\Device\\Harddisk90\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcm9", BRACK(FH_SDCM | 9), "\\Device\\Harddisk90\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcm10", BRACK(FH_SDCM | 10), "\\Device\\Harddisk90\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcm11", BRACK(FH_SDCM | 11), "\\Device\\Harddisk90\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcm12", BRACK(FH_SDCM | 12), "\\Device\\Harddisk90\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcm13", BRACK(FH_SDCM | 13), "\\Device\\Harddisk90\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcm14", BRACK(FH_SDCM | 14), "\\Device\\Harddisk90\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcm15", BRACK(FH_SDCM | 15), "\\Device\\Harddisk90\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcn1", BRACK(FH_SDCN | 1), "\\Device\\Harddisk91\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcn2", BRACK(FH_SDCN | 2), "\\Device\\Harddisk91\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcn3", BRACK(FH_SDCN | 3), "\\Device\\Harddisk91\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcn4", BRACK(FH_SDCN | 4), "\\Device\\Harddisk91\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcn5", BRACK(FH_SDCN | 5), "\\Device\\Harddisk91\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcn6", BRACK(FH_SDCN | 6), "\\Device\\Harddisk91\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcn7", BRACK(FH_SDCN | 7), "\\Device\\Harddisk91\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcn8", BRACK(FH_SDCN | 8), "\\Device\\Harddisk91\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcn9", BRACK(FH_SDCN | 9), "\\Device\\Harddisk91\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcn10", BRACK(FH_SDCN | 10), "\\Device\\Harddisk91\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcn11", BRACK(FH_SDCN | 11), "\\Device\\Harddisk91\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcn12", BRACK(FH_SDCN | 12), "\\Device\\Harddisk91\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcn13", BRACK(FH_SDCN | 13), "\\Device\\Harddisk91\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcn14", BRACK(FH_SDCN | 14), "\\Device\\Harddisk91\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcn15", BRACK(FH_SDCN | 15), "\\Device\\Harddisk91\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdco1", BRACK(FH_SDCO | 1), "\\Device\\Harddisk92\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdco2", BRACK(FH_SDCO | 2), "\\Device\\Harddisk92\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdco3", BRACK(FH_SDCO | 3), "\\Device\\Harddisk92\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdco4", BRACK(FH_SDCO | 4), "\\Device\\Harddisk92\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdco5", BRACK(FH_SDCO | 5), "\\Device\\Harddisk92\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdco6", BRACK(FH_SDCO | 6), "\\Device\\Harddisk92\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdco7", BRACK(FH_SDCO | 7), "\\Device\\Harddisk92\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdco8", BRACK(FH_SDCO | 8), "\\Device\\Harddisk92\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdco9", BRACK(FH_SDCO | 9), "\\Device\\Harddisk92\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdco10", BRACK(FH_SDCO | 10), "\\Device\\Harddisk92\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdco11", BRACK(FH_SDCO | 11), "\\Device\\Harddisk92\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdco12", BRACK(FH_SDCO | 12), "\\Device\\Harddisk92\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdco13", BRACK(FH_SDCO | 13), "\\Device\\Harddisk92\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdco14", BRACK(FH_SDCO | 14), "\\Device\\Harddisk92\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdco15", BRACK(FH_SDCO | 15), "\\Device\\Harddisk92\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcp1", BRACK(FH_SDCP | 1), "\\Device\\Harddisk93\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcp2", BRACK(FH_SDCP | 2), "\\Device\\Harddisk93\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcp3", BRACK(FH_SDCP | 3), "\\Device\\Harddisk93\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcp4", BRACK(FH_SDCP | 4), "\\Device\\Harddisk93\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcp5", BRACK(FH_SDCP | 5), "\\Device\\Harddisk93\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcp6", BRACK(FH_SDCP | 6), "\\Device\\Harddisk93\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcp7", BRACK(FH_SDCP | 7), "\\Device\\Harddisk93\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcp8", BRACK(FH_SDCP | 8), "\\Device\\Harddisk93\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcp9", BRACK(FH_SDCP | 9), "\\Device\\Harddisk93\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcp10", BRACK(FH_SDCP | 10), "\\Device\\Harddisk93\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcp11", BRACK(FH_SDCP | 11), "\\Device\\Harddisk93\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcp12", BRACK(FH_SDCP | 12), "\\Device\\Harddisk93\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcp13", BRACK(FH_SDCP | 13), "\\Device\\Harddisk93\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcp14", BRACK(FH_SDCP | 14), "\\Device\\Harddisk93\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcp15", BRACK(FH_SDCP | 15), "\\Device\\Harddisk93\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcq1", BRACK(FH_SDCQ | 1), "\\Device\\Harddisk94\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcq2", BRACK(FH_SDCQ | 2), "\\Device\\Harddisk94\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcq3", BRACK(FH_SDCQ | 3), "\\Device\\Harddisk94\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcq4", BRACK(FH_SDCQ | 4), "\\Device\\Harddisk94\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcq5", BRACK(FH_SDCQ | 5), "\\Device\\Harddisk94\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcq6", BRACK(FH_SDCQ | 6), "\\Device\\Harddisk94\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcq7", BRACK(FH_SDCQ | 7), "\\Device\\Harddisk94\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcq8", BRACK(FH_SDCQ | 8), "\\Device\\Harddisk94\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcq9", BRACK(FH_SDCQ | 9), "\\Device\\Harddisk94\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcq10", BRACK(FH_SDCQ | 10), "\\Device\\Harddisk94\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcq11", BRACK(FH_SDCQ | 11), "\\Device\\Harddisk94\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcq12", BRACK(FH_SDCQ | 12), "\\Device\\Harddisk94\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcq13", BRACK(FH_SDCQ | 13), "\\Device\\Harddisk94\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcq14", BRACK(FH_SDCQ | 14), "\\Device\\Harddisk94\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcq15", BRACK(FH_SDCQ | 15), "\\Device\\Harddisk94\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcr1", BRACK(FH_SDCR | 1), "\\Device\\Harddisk95\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcr2", BRACK(FH_SDCR | 2), "\\Device\\Harddisk95\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcr3", BRACK(FH_SDCR | 3), "\\Device\\Harddisk95\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcr4", BRACK(FH_SDCR | 4), "\\Device\\Harddisk95\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcr5", BRACK(FH_SDCR | 5), "\\Device\\Harddisk95\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcr6", BRACK(FH_SDCR | 6), "\\Device\\Harddisk95\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcr7", BRACK(FH_SDCR | 7), "\\Device\\Harddisk95\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcr8", BRACK(FH_SDCR | 8), "\\Device\\Harddisk95\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcr9", BRACK(FH_SDCR | 9), "\\Device\\Harddisk95\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcr10", BRACK(FH_SDCR | 10), "\\Device\\Harddisk95\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcr11", BRACK(FH_SDCR | 11), "\\Device\\Harddisk95\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcr12", BRACK(FH_SDCR | 12), "\\Device\\Harddisk95\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcr13", BRACK(FH_SDCR | 13), "\\Device\\Harddisk95\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcr14", BRACK(FH_SDCR | 14), "\\Device\\Harddisk95\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcr15", BRACK(FH_SDCR | 15), "\\Device\\Harddisk95\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcs1", BRACK(FH_SDCS | 1), "\\Device\\Harddisk96\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcs2", BRACK(FH_SDCS | 2), "\\Device\\Harddisk96\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcs3", BRACK(FH_SDCS | 3), "\\Device\\Harddisk96\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcs4", BRACK(FH_SDCS | 4), "\\Device\\Harddisk96\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcs5", BRACK(FH_SDCS | 5), "\\Device\\Harddisk96\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcs6", BRACK(FH_SDCS | 6), "\\Device\\Harddisk96\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcs7", BRACK(FH_SDCS | 7), "\\Device\\Harddisk96\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcs8", BRACK(FH_SDCS | 8), "\\Device\\Harddisk96\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcs9", BRACK(FH_SDCS | 9), "\\Device\\Harddisk96\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcs10", BRACK(FH_SDCS | 10), "\\Device\\Harddisk96\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcs11", BRACK(FH_SDCS | 11), "\\Device\\Harddisk96\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcs12", BRACK(FH_SDCS | 12), "\\Device\\Harddisk96\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcs13", BRACK(FH_SDCS | 13), "\\Device\\Harddisk96\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcs14", BRACK(FH_SDCS | 14), "\\Device\\Harddisk96\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcs15", BRACK(FH_SDCS | 15), "\\Device\\Harddisk96\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdct1", BRACK(FH_SDCT | 1), "\\Device\\Harddisk97\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdct2", BRACK(FH_SDCT | 2), "\\Device\\Harddisk97\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdct3", BRACK(FH_SDCT | 3), "\\Device\\Harddisk97\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdct4", BRACK(FH_SDCT | 4), "\\Device\\Harddisk97\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdct5", BRACK(FH_SDCT | 5), "\\Device\\Harddisk97\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdct6", BRACK(FH_SDCT | 6), "\\Device\\Harddisk97\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdct7", BRACK(FH_SDCT | 7), "\\Device\\Harddisk97\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdct8", BRACK(FH_SDCT | 8), "\\Device\\Harddisk97\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdct9", BRACK(FH_SDCT | 9), "\\Device\\Harddisk97\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdct10", BRACK(FH_SDCT | 10), "\\Device\\Harddisk97\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdct11", BRACK(FH_SDCT | 11), "\\Device\\Harddisk97\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdct12", BRACK(FH_SDCT | 12), "\\Device\\Harddisk97\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdct13", BRACK(FH_SDCT | 13), "\\Device\\Harddisk97\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdct14", BRACK(FH_SDCT | 14), "\\Device\\Harddisk97\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdct15", BRACK(FH_SDCT | 15), "\\Device\\Harddisk97\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcu1", BRACK(FH_SDCU | 1), "\\Device\\Harddisk98\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcu2", BRACK(FH_SDCU | 2), "\\Device\\Harddisk98\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcu3", BRACK(FH_SDCU | 3), "\\Device\\Harddisk98\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcu4", BRACK(FH_SDCU | 4), "\\Device\\Harddisk98\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcu5", BRACK(FH_SDCU | 5), "\\Device\\Harddisk98\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcu6", BRACK(FH_SDCU | 6), "\\Device\\Harddisk98\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcu7", BRACK(FH_SDCU | 7), "\\Device\\Harddisk98\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcu8", BRACK(FH_SDCU | 8), "\\Device\\Harddisk98\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcu9", BRACK(FH_SDCU | 9), "\\Device\\Harddisk98\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcu10", BRACK(FH_SDCU | 10), "\\Device\\Harddisk98\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcu11", BRACK(FH_SDCU | 11), "\\Device\\Harddisk98\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcu12", BRACK(FH_SDCU | 12), "\\Device\\Harddisk98\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcu13", BRACK(FH_SDCU | 13), "\\Device\\Harddisk98\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcu14", BRACK(FH_SDCU | 14), "\\Device\\Harddisk98\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcu15", BRACK(FH_SDCU | 15), "\\Device\\Harddisk98\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcv1", BRACK(FH_SDCV | 1), "\\Device\\Harddisk99\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcv2", BRACK(FH_SDCV | 2), "\\Device\\Harddisk99\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcv3", BRACK(FH_SDCV | 3), "\\Device\\Harddisk99\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcv4", BRACK(FH_SDCV | 4), "\\Device\\Harddisk99\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcv5", BRACK(FH_SDCV | 5), "\\Device\\Harddisk99\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcv6", BRACK(FH_SDCV | 6), "\\Device\\Harddisk99\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcv7", BRACK(FH_SDCV | 7), "\\Device\\Harddisk99\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcv8", BRACK(FH_SDCV | 8), "\\Device\\Harddisk99\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcv9", BRACK(FH_SDCV | 9), "\\Device\\Harddisk99\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcv10", BRACK(FH_SDCV | 10), "\\Device\\Harddisk99\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcv11", BRACK(FH_SDCV | 11), "\\Device\\Harddisk99\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcv12", BRACK(FH_SDCV | 12), "\\Device\\Harddisk99\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcv13", BRACK(FH_SDCV | 13), "\\Device\\Harddisk99\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcv14", BRACK(FH_SDCV | 14), "\\Device\\Harddisk99\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcv15", BRACK(FH_SDCV | 15), "\\Device\\Harddisk99\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcw1", BRACK(FH_SDCW | 1), "\\Device\\Harddisk100\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcw2", BRACK(FH_SDCW | 2), "\\Device\\Harddisk100\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcw3", BRACK(FH_SDCW | 3), "\\Device\\Harddisk100\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcw4", BRACK(FH_SDCW | 4), "\\Device\\Harddisk100\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcw5", BRACK(FH_SDCW | 5), "\\Device\\Harddisk100\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcw6", BRACK(FH_SDCW | 6), "\\Device\\Harddisk100\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcw7", BRACK(FH_SDCW | 7), "\\Device\\Harddisk100\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcw8", BRACK(FH_SDCW | 8), "\\Device\\Harddisk100\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcw9", BRACK(FH_SDCW | 9), "\\Device\\Harddisk100\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcw10", BRACK(FH_SDCW | 10), "\\Device\\Harddisk100\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcw11", BRACK(FH_SDCW | 11), "\\Device\\Harddisk100\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcw12", BRACK(FH_SDCW | 12), "\\Device\\Harddisk100\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcw13", BRACK(FH_SDCW | 13), "\\Device\\Harddisk100\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcw14", BRACK(FH_SDCW | 14), "\\Device\\Harddisk100\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcw15", BRACK(FH_SDCW | 15), "\\Device\\Harddisk100\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcx1", BRACK(FH_SDCX | 1), "\\Device\\Harddisk101\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcx2", BRACK(FH_SDCX | 2), "\\Device\\Harddisk101\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcx3", BRACK(FH_SDCX | 3), "\\Device\\Harddisk101\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcx4", BRACK(FH_SDCX | 4), "\\Device\\Harddisk101\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcx5", BRACK(FH_SDCX | 5), "\\Device\\Harddisk101\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcx6", BRACK(FH_SDCX | 6), "\\Device\\Harddisk101\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcx7", BRACK(FH_SDCX | 7), "\\Device\\Harddisk101\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcx8", BRACK(FH_SDCX | 8), "\\Device\\Harddisk101\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcx9", BRACK(FH_SDCX | 9), "\\Device\\Harddisk101\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcx10", BRACK(FH_SDCX | 10), "\\Device\\Harddisk101\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcx11", BRACK(FH_SDCX | 11), "\\Device\\Harddisk101\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcx12", BRACK(FH_SDCX | 12), "\\Device\\Harddisk101\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcx13", BRACK(FH_SDCX | 13), "\\Device\\Harddisk101\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcx14", BRACK(FH_SDCX | 14), "\\Device\\Harddisk101\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcx15", BRACK(FH_SDCX | 15), "\\Device\\Harddisk101\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcy1", BRACK(FH_SDCY | 1), "\\Device\\Harddisk102\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcy2", BRACK(FH_SDCY | 2), "\\Device\\Harddisk102\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcy3", BRACK(FH_SDCY | 3), "\\Device\\Harddisk102\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcy4", BRACK(FH_SDCY | 4), "\\Device\\Harddisk102\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcy5", BRACK(FH_SDCY | 5), "\\Device\\Harddisk102\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcy6", BRACK(FH_SDCY | 6), "\\Device\\Harddisk102\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcy7", BRACK(FH_SDCY | 7), "\\Device\\Harddisk102\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcy8", BRACK(FH_SDCY | 8), "\\Device\\Harddisk102\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcy9", BRACK(FH_SDCY | 9), "\\Device\\Harddisk102\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcy10", BRACK(FH_SDCY | 10), "\\Device\\Harddisk102\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcy11", BRACK(FH_SDCY | 11), "\\Device\\Harddisk102\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcy12", BRACK(FH_SDCY | 12), "\\Device\\Harddisk102\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcy13", BRACK(FH_SDCY | 13), "\\Device\\Harddisk102\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcy14", BRACK(FH_SDCY | 14), "\\Device\\Harddisk102\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcy15", BRACK(FH_SDCY | 15), "\\Device\\Harddisk102\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcz1", BRACK(FH_SDCZ | 1), "\\Device\\Harddisk103\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcz2", BRACK(FH_SDCZ | 2), "\\Device\\Harddisk103\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcz3", BRACK(FH_SDCZ | 3), "\\Device\\Harddisk103\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcz4", BRACK(FH_SDCZ | 4), "\\Device\\Harddisk103\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcz5", BRACK(FH_SDCZ | 5), "\\Device\\Harddisk103\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcz6", BRACK(FH_SDCZ | 6), "\\Device\\Harddisk103\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcz7", BRACK(FH_SDCZ | 7), "\\Device\\Harddisk103\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcz8", BRACK(FH_SDCZ | 8), "\\Device\\Harddisk103\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcz9", BRACK(FH_SDCZ | 9), "\\Device\\Harddisk103\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcz10", BRACK(FH_SDCZ | 10), "\\Device\\Harddisk103\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcz11", BRACK(FH_SDCZ | 11), "\\Device\\Harddisk103\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcz12", BRACK(FH_SDCZ | 12), "\\Device\\Harddisk103\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcz13", BRACK(FH_SDCZ | 13), "\\Device\\Harddisk103\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcz14", BRACK(FH_SDCZ | 14), "\\Device\\Harddisk103\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdcz15", BRACK(FH_SDCZ | 15), "\\Device\\Harddisk103\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdda", BRACK(FH_SDDA), "\\Device\\Harddisk104\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sddb", BRACK(FH_SDDB), "\\Device\\Harddisk105\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sddc", BRACK(FH_SDDC), "\\Device\\Harddisk106\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sddd", BRACK(FH_SDDD), "\\Device\\Harddisk107\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdde", BRACK(FH_SDDE), "\\Device\\Harddisk108\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sddf", BRACK(FH_SDDF), "\\Device\\Harddisk109\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sddg", BRACK(FH_SDDG), "\\Device\\Harddisk110\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sddh", BRACK(FH_SDDH), "\\Device\\Harddisk111\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sddi", BRACK(FH_SDDI), "\\Device\\Harddisk112\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sddj", BRACK(FH_SDDJ), "\\Device\\Harddisk113\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sddk", BRACK(FH_SDDK), "\\Device\\Harddisk114\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sddl", BRACK(FH_SDDL), "\\Device\\Harddisk115\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sddm", BRACK(FH_SDDM), "\\Device\\Harddisk116\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sddn", BRACK(FH_SDDN), "\\Device\\Harddisk117\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sddo", BRACK(FH_SDDO), "\\Device\\Harddisk118\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sddp", BRACK(FH_SDDP), "\\Device\\Harddisk119\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sddq", BRACK(FH_SDDQ), "\\Device\\Harddisk120\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sddr", BRACK(FH_SDDR), "\\Device\\Harddisk121\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdds", BRACK(FH_SDDS), "\\Device\\Harddisk122\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sddt", BRACK(FH_SDDT), "\\Device\\Harddisk123\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sddu", BRACK(FH_SDDU), "\\Device\\Harddisk124\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sddv", BRACK(FH_SDDV), "\\Device\\Harddisk125\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sddw", BRACK(FH_SDDW), "\\Device\\Harddisk126\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sddx", BRACK(FH_SDDX), "\\Device\\Harddisk127\\Partition0", exists_ntdev, S_IFBLK, true},
- {"/dev/sdda1", BRACK(FH_SDDA | 1), "\\Device\\Harddisk104\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdda2", BRACK(FH_SDDA | 2), "\\Device\\Harddisk104\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdda3", BRACK(FH_SDDA | 3), "\\Device\\Harddisk104\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdda4", BRACK(FH_SDDA | 4), "\\Device\\Harddisk104\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdda5", BRACK(FH_SDDA | 5), "\\Device\\Harddisk104\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdda6", BRACK(FH_SDDA | 6), "\\Device\\Harddisk104\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdda7", BRACK(FH_SDDA | 7), "\\Device\\Harddisk104\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdda8", BRACK(FH_SDDA | 8), "\\Device\\Harddisk104\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdda9", BRACK(FH_SDDA | 9), "\\Device\\Harddisk104\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdda10", BRACK(FH_SDDA | 10), "\\Device\\Harddisk104\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdda11", BRACK(FH_SDDA | 11), "\\Device\\Harddisk104\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdda12", BRACK(FH_SDDA | 12), "\\Device\\Harddisk104\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdda13", BRACK(FH_SDDA | 13), "\\Device\\Harddisk104\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdda14", BRACK(FH_SDDA | 14), "\\Device\\Harddisk104\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdda15", BRACK(FH_SDDA | 15), "\\Device\\Harddisk104\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sddb1", BRACK(FH_SDDB | 1), "\\Device\\Harddisk105\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sddb2", BRACK(FH_SDDB | 2), "\\Device\\Harddisk105\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sddb3", BRACK(FH_SDDB | 3), "\\Device\\Harddisk105\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sddb4", BRACK(FH_SDDB | 4), "\\Device\\Harddisk105\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sddb5", BRACK(FH_SDDB | 5), "\\Device\\Harddisk105\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sddb6", BRACK(FH_SDDB | 6), "\\Device\\Harddisk105\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sddb7", BRACK(FH_SDDB | 7), "\\Device\\Harddisk105\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sddb8", BRACK(FH_SDDB | 8), "\\Device\\Harddisk105\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sddb9", BRACK(FH_SDDB | 9), "\\Device\\Harddisk105\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sddb10", BRACK(FH_SDDB | 10), "\\Device\\Harddisk105\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sddb11", BRACK(FH_SDDB | 11), "\\Device\\Harddisk105\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sddb12", BRACK(FH_SDDB | 12), "\\Device\\Harddisk105\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sddb13", BRACK(FH_SDDB | 13), "\\Device\\Harddisk105\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sddb14", BRACK(FH_SDDB | 14), "\\Device\\Harddisk105\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sddb15", BRACK(FH_SDDB | 15), "\\Device\\Harddisk105\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sddc1", BRACK(FH_SDDC | 1), "\\Device\\Harddisk106\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sddc2", BRACK(FH_SDDC | 2), "\\Device\\Harddisk106\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sddc3", BRACK(FH_SDDC | 3), "\\Device\\Harddisk106\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sddc4", BRACK(FH_SDDC | 4), "\\Device\\Harddisk106\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sddc5", BRACK(FH_SDDC | 5), "\\Device\\Harddisk106\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sddc6", BRACK(FH_SDDC | 6), "\\Device\\Harddisk106\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sddc7", BRACK(FH_SDDC | 7), "\\Device\\Harddisk106\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sddc8", BRACK(FH_SDDC | 8), "\\Device\\Harddisk106\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sddc9", BRACK(FH_SDDC | 9), "\\Device\\Harddisk106\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sddc10", BRACK(FH_SDDC | 10), "\\Device\\Harddisk106\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sddc11", BRACK(FH_SDDC | 11), "\\Device\\Harddisk106\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sddc12", BRACK(FH_SDDC | 12), "\\Device\\Harddisk106\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sddc13", BRACK(FH_SDDC | 13), "\\Device\\Harddisk106\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sddc14", BRACK(FH_SDDC | 14), "\\Device\\Harddisk106\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sddc15", BRACK(FH_SDDC | 15), "\\Device\\Harddisk106\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sddd1", BRACK(FH_SDDD | 1), "\\Device\\Harddisk107\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sddd2", BRACK(FH_SDDD | 2), "\\Device\\Harddisk107\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sddd3", BRACK(FH_SDDD | 3), "\\Device\\Harddisk107\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sddd4", BRACK(FH_SDDD | 4), "\\Device\\Harddisk107\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sddd5", BRACK(FH_SDDD | 5), "\\Device\\Harddisk107\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sddd6", BRACK(FH_SDDD | 6), "\\Device\\Harddisk107\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sddd7", BRACK(FH_SDDD | 7), "\\Device\\Harddisk107\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sddd8", BRACK(FH_SDDD | 8), "\\Device\\Harddisk107\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sddd9", BRACK(FH_SDDD | 9), "\\Device\\Harddisk107\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sddd10", BRACK(FH_SDDD | 10), "\\Device\\Harddisk107\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sddd11", BRACK(FH_SDDD | 11), "\\Device\\Harddisk107\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sddd12", BRACK(FH_SDDD | 12), "\\Device\\Harddisk107\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sddd13", BRACK(FH_SDDD | 13), "\\Device\\Harddisk107\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sddd14", BRACK(FH_SDDD | 14), "\\Device\\Harddisk107\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sddd15", BRACK(FH_SDDD | 15), "\\Device\\Harddisk107\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdde1", BRACK(FH_SDDE | 1), "\\Device\\Harddisk108\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdde2", BRACK(FH_SDDE | 2), "\\Device\\Harddisk108\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdde3", BRACK(FH_SDDE | 3), "\\Device\\Harddisk108\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdde4", BRACK(FH_SDDE | 4), "\\Device\\Harddisk108\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdde5", BRACK(FH_SDDE | 5), "\\Device\\Harddisk108\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdde6", BRACK(FH_SDDE | 6), "\\Device\\Harddisk108\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdde7", BRACK(FH_SDDE | 7), "\\Device\\Harddisk108\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdde8", BRACK(FH_SDDE | 8), "\\Device\\Harddisk108\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdde9", BRACK(FH_SDDE | 9), "\\Device\\Harddisk108\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdde10", BRACK(FH_SDDE | 10), "\\Device\\Harddisk108\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdde11", BRACK(FH_SDDE | 11), "\\Device\\Harddisk108\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdde12", BRACK(FH_SDDE | 12), "\\Device\\Harddisk108\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdde13", BRACK(FH_SDDE | 13), "\\Device\\Harddisk108\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdde14", BRACK(FH_SDDE | 14), "\\Device\\Harddisk108\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdde15", BRACK(FH_SDDE | 15), "\\Device\\Harddisk108\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sddf1", BRACK(FH_SDDF | 1), "\\Device\\Harddisk109\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sddf2", BRACK(FH_SDDF | 2), "\\Device\\Harddisk109\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sddf3", BRACK(FH_SDDF | 3), "\\Device\\Harddisk109\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sddf4", BRACK(FH_SDDF | 4), "\\Device\\Harddisk109\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sddf5", BRACK(FH_SDDF | 5), "\\Device\\Harddisk109\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sddf6", BRACK(FH_SDDF | 6), "\\Device\\Harddisk109\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sddf7", BRACK(FH_SDDF | 7), "\\Device\\Harddisk109\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sddf8", BRACK(FH_SDDF | 8), "\\Device\\Harddisk109\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sddf9", BRACK(FH_SDDF | 9), "\\Device\\Harddisk109\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sddf10", BRACK(FH_SDDF | 10), "\\Device\\Harddisk109\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sddf11", BRACK(FH_SDDF | 11), "\\Device\\Harddisk109\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sddf12", BRACK(FH_SDDF | 12), "\\Device\\Harddisk109\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sddf13", BRACK(FH_SDDF | 13), "\\Device\\Harddisk109\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sddf14", BRACK(FH_SDDF | 14), "\\Device\\Harddisk109\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sddf15", BRACK(FH_SDDF | 15), "\\Device\\Harddisk109\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sddg1", BRACK(FH_SDDG | 1), "\\Device\\Harddisk110\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sddg2", BRACK(FH_SDDG | 2), "\\Device\\Harddisk110\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sddg3", BRACK(FH_SDDG | 3), "\\Device\\Harddisk110\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sddg4", BRACK(FH_SDDG | 4), "\\Device\\Harddisk110\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sddg5", BRACK(FH_SDDG | 5), "\\Device\\Harddisk110\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sddg6", BRACK(FH_SDDG | 6), "\\Device\\Harddisk110\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sddg7", BRACK(FH_SDDG | 7), "\\Device\\Harddisk110\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sddg8", BRACK(FH_SDDG | 8), "\\Device\\Harddisk110\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sddg9", BRACK(FH_SDDG | 9), "\\Device\\Harddisk110\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sddg10", BRACK(FH_SDDG | 10), "\\Device\\Harddisk110\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sddg11", BRACK(FH_SDDG | 11), "\\Device\\Harddisk110\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sddg12", BRACK(FH_SDDG | 12), "\\Device\\Harddisk110\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sddg13", BRACK(FH_SDDG | 13), "\\Device\\Harddisk110\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sddg14", BRACK(FH_SDDG | 14), "\\Device\\Harddisk110\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sddg15", BRACK(FH_SDDG | 15), "\\Device\\Harddisk110\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sddh1", BRACK(FH_SDDH | 1), "\\Device\\Harddisk111\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sddh2", BRACK(FH_SDDH | 2), "\\Device\\Harddisk111\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sddh3", BRACK(FH_SDDH | 3), "\\Device\\Harddisk111\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sddh4", BRACK(FH_SDDH | 4), "\\Device\\Harddisk111\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sddh5", BRACK(FH_SDDH | 5), "\\Device\\Harddisk111\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sddh6", BRACK(FH_SDDH | 6), "\\Device\\Harddisk111\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sddh7", BRACK(FH_SDDH | 7), "\\Device\\Harddisk111\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sddh8", BRACK(FH_SDDH | 8), "\\Device\\Harddisk111\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sddh9", BRACK(FH_SDDH | 9), "\\Device\\Harddisk111\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sddh10", BRACK(FH_SDDH | 10), "\\Device\\Harddisk111\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sddh11", BRACK(FH_SDDH | 11), "\\Device\\Harddisk111\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sddh12", BRACK(FH_SDDH | 12), "\\Device\\Harddisk111\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sddh13", BRACK(FH_SDDH | 13), "\\Device\\Harddisk111\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sddh14", BRACK(FH_SDDH | 14), "\\Device\\Harddisk111\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sddh15", BRACK(FH_SDDH | 15), "\\Device\\Harddisk111\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sddi1", BRACK(FH_SDDI | 1), "\\Device\\Harddisk112\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sddi2", BRACK(FH_SDDI | 2), "\\Device\\Harddisk112\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sddi3", BRACK(FH_SDDI | 3), "\\Device\\Harddisk112\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sddi4", BRACK(FH_SDDI | 4), "\\Device\\Harddisk112\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sddi5", BRACK(FH_SDDI | 5), "\\Device\\Harddisk112\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sddi6", BRACK(FH_SDDI | 6), "\\Device\\Harddisk112\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sddi7", BRACK(FH_SDDI | 7), "\\Device\\Harddisk112\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sddi8", BRACK(FH_SDDI | 8), "\\Device\\Harddisk112\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sddi9", BRACK(FH_SDDI | 9), "\\Device\\Harddisk112\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sddi10", BRACK(FH_SDDI | 10), "\\Device\\Harddisk112\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sddi11", BRACK(FH_SDDI | 11), "\\Device\\Harddisk112\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sddi12", BRACK(FH_SDDI | 12), "\\Device\\Harddisk112\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sddi13", BRACK(FH_SDDI | 13), "\\Device\\Harddisk112\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sddi14", BRACK(FH_SDDI | 14), "\\Device\\Harddisk112\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sddi15", BRACK(FH_SDDI | 15), "\\Device\\Harddisk112\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sddj1", BRACK(FH_SDDJ | 1), "\\Device\\Harddisk113\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sddj2", BRACK(FH_SDDJ | 2), "\\Device\\Harddisk113\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sddj3", BRACK(FH_SDDJ | 3), "\\Device\\Harddisk113\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sddj4", BRACK(FH_SDDJ | 4), "\\Device\\Harddisk113\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sddj5", BRACK(FH_SDDJ | 5), "\\Device\\Harddisk113\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sddj6", BRACK(FH_SDDJ | 6), "\\Device\\Harddisk113\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sddj7", BRACK(FH_SDDJ | 7), "\\Device\\Harddisk113\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sddj8", BRACK(FH_SDDJ | 8), "\\Device\\Harddisk113\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sddj9", BRACK(FH_SDDJ | 9), "\\Device\\Harddisk113\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sddj10", BRACK(FH_SDDJ | 10), "\\Device\\Harddisk113\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sddj11", BRACK(FH_SDDJ | 11), "\\Device\\Harddisk113\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sddj12", BRACK(FH_SDDJ | 12), "\\Device\\Harddisk113\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sddj13", BRACK(FH_SDDJ | 13), "\\Device\\Harddisk113\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sddj14", BRACK(FH_SDDJ | 14), "\\Device\\Harddisk113\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sddj15", BRACK(FH_SDDJ | 15), "\\Device\\Harddisk113\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sddk1", BRACK(FH_SDDK | 1), "\\Device\\Harddisk114\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sddk2", BRACK(FH_SDDK | 2), "\\Device\\Harddisk114\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sddk3", BRACK(FH_SDDK | 3), "\\Device\\Harddisk114\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sddk4", BRACK(FH_SDDK | 4), "\\Device\\Harddisk114\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sddk5", BRACK(FH_SDDK | 5), "\\Device\\Harddisk114\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sddk6", BRACK(FH_SDDK | 6), "\\Device\\Harddisk114\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sddk7", BRACK(FH_SDDK | 7), "\\Device\\Harddisk114\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sddk8", BRACK(FH_SDDK | 8), "\\Device\\Harddisk114\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sddk9", BRACK(FH_SDDK | 9), "\\Device\\Harddisk114\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sddk10", BRACK(FH_SDDK | 10), "\\Device\\Harddisk114\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sddk11", BRACK(FH_SDDK | 11), "\\Device\\Harddisk114\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sddk12", BRACK(FH_SDDK | 12), "\\Device\\Harddisk114\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sddk13", BRACK(FH_SDDK | 13), "\\Device\\Harddisk114\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sddk14", BRACK(FH_SDDK | 14), "\\Device\\Harddisk114\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sddk15", BRACK(FH_SDDK | 15), "\\Device\\Harddisk114\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sddl1", BRACK(FH_SDDL | 1), "\\Device\\Harddisk115\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sddl2", BRACK(FH_SDDL | 2), "\\Device\\Harddisk115\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sddl3", BRACK(FH_SDDL | 3), "\\Device\\Harddisk115\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sddl4", BRACK(FH_SDDL | 4), "\\Device\\Harddisk115\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sddl5", BRACK(FH_SDDL | 5), "\\Device\\Harddisk115\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sddl6", BRACK(FH_SDDL | 6), "\\Device\\Harddisk115\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sddl7", BRACK(FH_SDDL | 7), "\\Device\\Harddisk115\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sddl8", BRACK(FH_SDDL | 8), "\\Device\\Harddisk115\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sddl9", BRACK(FH_SDDL | 9), "\\Device\\Harddisk115\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sddl10", BRACK(FH_SDDL | 10), "\\Device\\Harddisk115\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sddl11", BRACK(FH_SDDL | 11), "\\Device\\Harddisk115\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sddl12", BRACK(FH_SDDL | 12), "\\Device\\Harddisk115\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sddl13", BRACK(FH_SDDL | 13), "\\Device\\Harddisk115\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sddl14", BRACK(FH_SDDL | 14), "\\Device\\Harddisk115\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sddl15", BRACK(FH_SDDL | 15), "\\Device\\Harddisk115\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sddm1", BRACK(FH_SDDM | 1), "\\Device\\Harddisk116\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sddm2", BRACK(FH_SDDM | 2), "\\Device\\Harddisk116\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sddm3", BRACK(FH_SDDM | 3), "\\Device\\Harddisk116\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sddm4", BRACK(FH_SDDM | 4), "\\Device\\Harddisk116\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sddm5", BRACK(FH_SDDM | 5), "\\Device\\Harddisk116\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sddm6", BRACK(FH_SDDM | 6), "\\Device\\Harddisk116\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sddm7", BRACK(FH_SDDM | 7), "\\Device\\Harddisk116\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sddm8", BRACK(FH_SDDM | 8), "\\Device\\Harddisk116\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sddm9", BRACK(FH_SDDM | 9), "\\Device\\Harddisk116\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sddm10", BRACK(FH_SDDM | 10), "\\Device\\Harddisk116\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sddm11", BRACK(FH_SDDM | 11), "\\Device\\Harddisk116\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sddm12", BRACK(FH_SDDM | 12), "\\Device\\Harddisk116\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sddm13", BRACK(FH_SDDM | 13), "\\Device\\Harddisk116\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sddm14", BRACK(FH_SDDM | 14), "\\Device\\Harddisk116\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sddm15", BRACK(FH_SDDM | 15), "\\Device\\Harddisk116\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sddn1", BRACK(FH_SDDN | 1), "\\Device\\Harddisk117\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sddn2", BRACK(FH_SDDN | 2), "\\Device\\Harddisk117\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sddn3", BRACK(FH_SDDN | 3), "\\Device\\Harddisk117\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sddn4", BRACK(FH_SDDN | 4), "\\Device\\Harddisk117\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sddn5", BRACK(FH_SDDN | 5), "\\Device\\Harddisk117\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sddn6", BRACK(FH_SDDN | 6), "\\Device\\Harddisk117\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sddn7", BRACK(FH_SDDN | 7), "\\Device\\Harddisk117\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sddn8", BRACK(FH_SDDN | 8), "\\Device\\Harddisk117\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sddn9", BRACK(FH_SDDN | 9), "\\Device\\Harddisk117\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sddn10", BRACK(FH_SDDN | 10), "\\Device\\Harddisk117\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sddn11", BRACK(FH_SDDN | 11), "\\Device\\Harddisk117\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sddn12", BRACK(FH_SDDN | 12), "\\Device\\Harddisk117\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sddn13", BRACK(FH_SDDN | 13), "\\Device\\Harddisk117\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sddn14", BRACK(FH_SDDN | 14), "\\Device\\Harddisk117\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sddn15", BRACK(FH_SDDN | 15), "\\Device\\Harddisk117\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sddo1", BRACK(FH_SDDO | 1), "\\Device\\Harddisk118\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sddo2", BRACK(FH_SDDO | 2), "\\Device\\Harddisk118\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sddo3", BRACK(FH_SDDO | 3), "\\Device\\Harddisk118\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sddo4", BRACK(FH_SDDO | 4), "\\Device\\Harddisk118\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sddo5", BRACK(FH_SDDO | 5), "\\Device\\Harddisk118\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sddo6", BRACK(FH_SDDO | 6), "\\Device\\Harddisk118\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sddo7", BRACK(FH_SDDO | 7), "\\Device\\Harddisk118\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sddo8", BRACK(FH_SDDO | 8), "\\Device\\Harddisk118\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sddo9", BRACK(FH_SDDO | 9), "\\Device\\Harddisk118\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sddo10", BRACK(FH_SDDO | 10), "\\Device\\Harddisk118\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sddo11", BRACK(FH_SDDO | 11), "\\Device\\Harddisk118\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sddo12", BRACK(FH_SDDO | 12), "\\Device\\Harddisk118\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sddo13", BRACK(FH_SDDO | 13), "\\Device\\Harddisk118\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sddo14", BRACK(FH_SDDO | 14), "\\Device\\Harddisk118\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sddo15", BRACK(FH_SDDO | 15), "\\Device\\Harddisk118\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sddp1", BRACK(FH_SDDP | 1), "\\Device\\Harddisk119\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sddp2", BRACK(FH_SDDP | 2), "\\Device\\Harddisk119\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sddp3", BRACK(FH_SDDP | 3), "\\Device\\Harddisk119\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sddp4", BRACK(FH_SDDP | 4), "\\Device\\Harddisk119\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sddp5", BRACK(FH_SDDP | 5), "\\Device\\Harddisk119\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sddp6", BRACK(FH_SDDP | 6), "\\Device\\Harddisk119\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sddp7", BRACK(FH_SDDP | 7), "\\Device\\Harddisk119\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sddp8", BRACK(FH_SDDP | 8), "\\Device\\Harddisk119\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sddp9", BRACK(FH_SDDP | 9), "\\Device\\Harddisk119\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sddp10", BRACK(FH_SDDP | 10), "\\Device\\Harddisk119\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sddp11", BRACK(FH_SDDP | 11), "\\Device\\Harddisk119\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sddp12", BRACK(FH_SDDP | 12), "\\Device\\Harddisk119\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sddp13", BRACK(FH_SDDP | 13), "\\Device\\Harddisk119\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sddp14", BRACK(FH_SDDP | 14), "\\Device\\Harddisk119\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sddp15", BRACK(FH_SDDP | 15), "\\Device\\Harddisk119\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sddq1", BRACK(FH_SDDQ | 1), "\\Device\\Harddisk120\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sddq2", BRACK(FH_SDDQ | 2), "\\Device\\Harddisk120\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sddq3", BRACK(FH_SDDQ | 3), "\\Device\\Harddisk120\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sddq4", BRACK(FH_SDDQ | 4), "\\Device\\Harddisk120\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sddq5", BRACK(FH_SDDQ | 5), "\\Device\\Harddisk120\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sddq6", BRACK(FH_SDDQ | 6), "\\Device\\Harddisk120\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sddq7", BRACK(FH_SDDQ | 7), "\\Device\\Harddisk120\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sddq8", BRACK(FH_SDDQ | 8), "\\Device\\Harddisk120\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sddq9", BRACK(FH_SDDQ | 9), "\\Device\\Harddisk120\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sddq10", BRACK(FH_SDDQ | 10), "\\Device\\Harddisk120\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sddq11", BRACK(FH_SDDQ | 11), "\\Device\\Harddisk120\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sddq12", BRACK(FH_SDDQ | 12), "\\Device\\Harddisk120\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sddq13", BRACK(FH_SDDQ | 13), "\\Device\\Harddisk120\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sddq14", BRACK(FH_SDDQ | 14), "\\Device\\Harddisk120\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sddq15", BRACK(FH_SDDQ | 15), "\\Device\\Harddisk120\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sddr1", BRACK(FH_SDDR | 1), "\\Device\\Harddisk121\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sddr2", BRACK(FH_SDDR | 2), "\\Device\\Harddisk121\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sddr3", BRACK(FH_SDDR | 3), "\\Device\\Harddisk121\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sddr4", BRACK(FH_SDDR | 4), "\\Device\\Harddisk121\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sddr5", BRACK(FH_SDDR | 5), "\\Device\\Harddisk121\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sddr6", BRACK(FH_SDDR | 6), "\\Device\\Harddisk121\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sddr7", BRACK(FH_SDDR | 7), "\\Device\\Harddisk121\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sddr8", BRACK(FH_SDDR | 8), "\\Device\\Harddisk121\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sddr9", BRACK(FH_SDDR | 9), "\\Device\\Harddisk121\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sddr10", BRACK(FH_SDDR | 10), "\\Device\\Harddisk121\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sddr11", BRACK(FH_SDDR | 11), "\\Device\\Harddisk121\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sddr12", BRACK(FH_SDDR | 12), "\\Device\\Harddisk121\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sddr13", BRACK(FH_SDDR | 13), "\\Device\\Harddisk121\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sddr14", BRACK(FH_SDDR | 14), "\\Device\\Harddisk121\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sddr15", BRACK(FH_SDDR | 15), "\\Device\\Harddisk121\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sdds1", BRACK(FH_SDDS | 1), "\\Device\\Harddisk122\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sdds2", BRACK(FH_SDDS | 2), "\\Device\\Harddisk122\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sdds3", BRACK(FH_SDDS | 3), "\\Device\\Harddisk122\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sdds4", BRACK(FH_SDDS | 4), "\\Device\\Harddisk122\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sdds5", BRACK(FH_SDDS | 5), "\\Device\\Harddisk122\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sdds6", BRACK(FH_SDDS | 6), "\\Device\\Harddisk122\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sdds7", BRACK(FH_SDDS | 7), "\\Device\\Harddisk122\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sdds8", BRACK(FH_SDDS | 8), "\\Device\\Harddisk122\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sdds9", BRACK(FH_SDDS | 9), "\\Device\\Harddisk122\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sdds10", BRACK(FH_SDDS | 10), "\\Device\\Harddisk122\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sdds11", BRACK(FH_SDDS | 11), "\\Device\\Harddisk122\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sdds12", BRACK(FH_SDDS | 12), "\\Device\\Harddisk122\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sdds13", BRACK(FH_SDDS | 13), "\\Device\\Harddisk122\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sdds14", BRACK(FH_SDDS | 14), "\\Device\\Harddisk122\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sdds15", BRACK(FH_SDDS | 15), "\\Device\\Harddisk122\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sddt1", BRACK(FH_SDDT | 1), "\\Device\\Harddisk123\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sddt2", BRACK(FH_SDDT | 2), "\\Device\\Harddisk123\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sddt3", BRACK(FH_SDDT | 3), "\\Device\\Harddisk123\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sddt4", BRACK(FH_SDDT | 4), "\\Device\\Harddisk123\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sddt5", BRACK(FH_SDDT | 5), "\\Device\\Harddisk123\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sddt6", BRACK(FH_SDDT | 6), "\\Device\\Harddisk123\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sddt7", BRACK(FH_SDDT | 7), "\\Device\\Harddisk123\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sddt8", BRACK(FH_SDDT | 8), "\\Device\\Harddisk123\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sddt9", BRACK(FH_SDDT | 9), "\\Device\\Harddisk123\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sddt10", BRACK(FH_SDDT | 10), "\\Device\\Harddisk123\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sddt11", BRACK(FH_SDDT | 11), "\\Device\\Harddisk123\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sddt12", BRACK(FH_SDDT | 12), "\\Device\\Harddisk123\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sddt13", BRACK(FH_SDDT | 13), "\\Device\\Harddisk123\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sddt14", BRACK(FH_SDDT | 14), "\\Device\\Harddisk123\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sddt15", BRACK(FH_SDDT | 15), "\\Device\\Harddisk123\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sddu1", BRACK(FH_SDDU | 1), "\\Device\\Harddisk124\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sddu2", BRACK(FH_SDDU | 2), "\\Device\\Harddisk124\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sddu3", BRACK(FH_SDDU | 3), "\\Device\\Harddisk124\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sddu4", BRACK(FH_SDDU | 4), "\\Device\\Harddisk124\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sddu5", BRACK(FH_SDDU | 5), "\\Device\\Harddisk124\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sddu6", BRACK(FH_SDDU | 6), "\\Device\\Harddisk124\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sddu7", BRACK(FH_SDDU | 7), "\\Device\\Harddisk124\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sddu8", BRACK(FH_SDDU | 8), "\\Device\\Harddisk124\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sddu9", BRACK(FH_SDDU | 9), "\\Device\\Harddisk124\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sddu10", BRACK(FH_SDDU | 10), "\\Device\\Harddisk124\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sddu11", BRACK(FH_SDDU | 11), "\\Device\\Harddisk124\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sddu12", BRACK(FH_SDDU | 12), "\\Device\\Harddisk124\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sddu13", BRACK(FH_SDDU | 13), "\\Device\\Harddisk124\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sddu14", BRACK(FH_SDDU | 14), "\\Device\\Harddisk124\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sddu15", BRACK(FH_SDDU | 15), "\\Device\\Harddisk124\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sddv1", BRACK(FH_SDDV | 1), "\\Device\\Harddisk125\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sddv2", BRACK(FH_SDDV | 2), "\\Device\\Harddisk125\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sddv3", BRACK(FH_SDDV | 3), "\\Device\\Harddisk125\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sddv4", BRACK(FH_SDDV | 4), "\\Device\\Harddisk125\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sddv5", BRACK(FH_SDDV | 5), "\\Device\\Harddisk125\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sddv6", BRACK(FH_SDDV | 6), "\\Device\\Harddisk125\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sddv7", BRACK(FH_SDDV | 7), "\\Device\\Harddisk125\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sddv8", BRACK(FH_SDDV | 8), "\\Device\\Harddisk125\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sddv9", BRACK(FH_SDDV | 9), "\\Device\\Harddisk125\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sddv10", BRACK(FH_SDDV | 10), "\\Device\\Harddisk125\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sddv11", BRACK(FH_SDDV | 11), "\\Device\\Harddisk125\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sddv12", BRACK(FH_SDDV | 12), "\\Device\\Harddisk125\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sddv13", BRACK(FH_SDDV | 13), "\\Device\\Harddisk125\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sddv14", BRACK(FH_SDDV | 14), "\\Device\\Harddisk125\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sddv15", BRACK(FH_SDDV | 15), "\\Device\\Harddisk125\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sddw1", BRACK(FH_SDDW | 1), "\\Device\\Harddisk126\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sddw2", BRACK(FH_SDDW | 2), "\\Device\\Harddisk126\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sddw3", BRACK(FH_SDDW | 3), "\\Device\\Harddisk126\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sddw4", BRACK(FH_SDDW | 4), "\\Device\\Harddisk126\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sddw5", BRACK(FH_SDDW | 5), "\\Device\\Harddisk126\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sddw6", BRACK(FH_SDDW | 6), "\\Device\\Harddisk126\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sddw7", BRACK(FH_SDDW | 7), "\\Device\\Harddisk126\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sddw8", BRACK(FH_SDDW | 8), "\\Device\\Harddisk126\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sddw9", BRACK(FH_SDDW | 9), "\\Device\\Harddisk126\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sddw10", BRACK(FH_SDDW | 10), "\\Device\\Harddisk126\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sddw11", BRACK(FH_SDDW | 11), "\\Device\\Harddisk126\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sddw12", BRACK(FH_SDDW | 12), "\\Device\\Harddisk126\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sddw13", BRACK(FH_SDDW | 13), "\\Device\\Harddisk126\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sddw14", BRACK(FH_SDDW | 14), "\\Device\\Harddisk126\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sddw15", BRACK(FH_SDDW | 15), "\\Device\\Harddisk126\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sddx1", BRACK(FH_SDDX | 1), "\\Device\\Harddisk127\\Partition1", exists_ntdev, S_IFBLK, true},
- {"/dev/sddx2", BRACK(FH_SDDX | 2), "\\Device\\Harddisk127\\Partition2", exists_ntdev, S_IFBLK, true},
- {"/dev/sddx3", BRACK(FH_SDDX | 3), "\\Device\\Harddisk127\\Partition3", exists_ntdev, S_IFBLK, true},
- {"/dev/sddx4", BRACK(FH_SDDX | 4), "\\Device\\Harddisk127\\Partition4", exists_ntdev, S_IFBLK, true},
- {"/dev/sddx5", BRACK(FH_SDDX | 5), "\\Device\\Harddisk127\\Partition5", exists_ntdev, S_IFBLK, true},
- {"/dev/sddx6", BRACK(FH_SDDX | 6), "\\Device\\Harddisk127\\Partition6", exists_ntdev, S_IFBLK, true},
- {"/dev/sddx7", BRACK(FH_SDDX | 7), "\\Device\\Harddisk127\\Partition7", exists_ntdev, S_IFBLK, true},
- {"/dev/sddx8", BRACK(FH_SDDX | 8), "\\Device\\Harddisk127\\Partition8", exists_ntdev, S_IFBLK, true},
- {"/dev/sddx9", BRACK(FH_SDDX | 9), "\\Device\\Harddisk127\\Partition9", exists_ntdev, S_IFBLK, true},
- {"/dev/sddx10", BRACK(FH_SDDX | 10), "\\Device\\Harddisk127\\Partition10", exists_ntdev, S_IFBLK, true},
- {"/dev/sddx11", BRACK(FH_SDDX | 11), "\\Device\\Harddisk127\\Partition11", exists_ntdev, S_IFBLK, true},
- {"/dev/sddx12", BRACK(FH_SDDX | 12), "\\Device\\Harddisk127\\Partition12", exists_ntdev, S_IFBLK, true},
- {"/dev/sddx13", BRACK(FH_SDDX | 13), "\\Device\\Harddisk127\\Partition13", exists_ntdev, S_IFBLK, true},
- {"/dev/sddx14", BRACK(FH_SDDX | 14), "\\Device\\Harddisk127\\Partition14", exists_ntdev, S_IFBLK, true},
- {"/dev/sddx15", BRACK(FH_SDDX | 15), "\\Device\\Harddisk127\\Partition15", exists_ntdev, S_IFBLK, true},
- {"/dev/sr0", BRACK(FHDEV(DEV_CDROM_MAJOR, 0)), "\\Device\\CdRom0", exists_ntdev, S_IFBLK, true},
- {"/dev/sr1", BRACK(FHDEV(DEV_CDROM_MAJOR, 1)), "\\Device\\CdRom1", exists_ntdev, S_IFBLK, true},
- {"/dev/sr2", BRACK(FHDEV(DEV_CDROM_MAJOR, 2)), "\\Device\\CdRom2", exists_ntdev, S_IFBLK, true},
- {"/dev/sr3", BRACK(FHDEV(DEV_CDROM_MAJOR, 3)), "\\Device\\CdRom3", exists_ntdev, S_IFBLK, true},
- {"/dev/sr4", BRACK(FHDEV(DEV_CDROM_MAJOR, 4)), "\\Device\\CdRom4", exists_ntdev, S_IFBLK, true},
- {"/dev/sr5", BRACK(FHDEV(DEV_CDROM_MAJOR, 5)), "\\Device\\CdRom5", exists_ntdev, S_IFBLK, true},
- {"/dev/sr6", BRACK(FHDEV(DEV_CDROM_MAJOR, 6)), "\\Device\\CdRom6", exists_ntdev, S_IFBLK, true},
- {"/dev/sr7", BRACK(FHDEV(DEV_CDROM_MAJOR, 7)), "\\Device\\CdRom7", exists_ntdev, S_IFBLK, true},
- {"/dev/sr8", BRACK(FHDEV(DEV_CDROM_MAJOR, 8)), "\\Device\\CdRom8", exists_ntdev, S_IFBLK, true},
- {"/dev/sr9", BRACK(FHDEV(DEV_CDROM_MAJOR, 9)), "\\Device\\CdRom9", exists_ntdev, S_IFBLK, true},
- {"/dev/sr10", BRACK(FHDEV(DEV_CDROM_MAJOR, 10)), "\\Device\\CdRom10", exists_ntdev, S_IFBLK, true},
- {"/dev/sr11", BRACK(FHDEV(DEV_CDROM_MAJOR, 11)), "\\Device\\CdRom11", exists_ntdev, S_IFBLK, true},
- {"/dev/sr12", BRACK(FHDEV(DEV_CDROM_MAJOR, 12)), "\\Device\\CdRom12", exists_ntdev, S_IFBLK, true},
- {"/dev/sr13", BRACK(FHDEV(DEV_CDROM_MAJOR, 13)), "\\Device\\CdRom13", exists_ntdev, S_IFBLK, true},
- {"/dev/sr14", BRACK(FHDEV(DEV_CDROM_MAJOR, 14)), "\\Device\\CdRom14", exists_ntdev, S_IFBLK, true},
- {"/dev/sr15", BRACK(FHDEV(DEV_CDROM_MAJOR, 15)), "\\Device\\CdRom15", exists_ntdev, S_IFBLK, true},
- {"/dev/st0", BRACK(FHDEV(DEV_TAPE_MAJOR, 0)), "\\Device\\Tape0", exists_ntdev, S_IFBLK, true},
- {"/dev/st1", BRACK(FHDEV(DEV_TAPE_MAJOR, 1)), "\\Device\\Tape1", exists_ntdev, S_IFBLK, true},
- {"/dev/st2", BRACK(FHDEV(DEV_TAPE_MAJOR, 2)), "\\Device\\Tape2", exists_ntdev, S_IFBLK, true},
- {"/dev/st3", BRACK(FHDEV(DEV_TAPE_MAJOR, 3)), "\\Device\\Tape3", exists_ntdev, S_IFBLK, true},
- {"/dev/st4", BRACK(FHDEV(DEV_TAPE_MAJOR, 4)), "\\Device\\Tape4", exists_ntdev, S_IFBLK, true},
- {"/dev/st5", BRACK(FHDEV(DEV_TAPE_MAJOR, 5)), "\\Device\\Tape5", exists_ntdev, S_IFBLK, true},
- {"/dev/st6", BRACK(FHDEV(DEV_TAPE_MAJOR, 6)), "\\Device\\Tape6", exists_ntdev, S_IFBLK, true},
- {"/dev/st7", BRACK(FHDEV(DEV_TAPE_MAJOR, 7)), "\\Device\\Tape7", exists_ntdev, S_IFBLK, true},
- {"/dev/st8", BRACK(FHDEV(DEV_TAPE_MAJOR, 8)), "\\Device\\Tape8", exists_ntdev, S_IFBLK, true},
- {"/dev/st9", BRACK(FHDEV(DEV_TAPE_MAJOR, 9)), "\\Device\\Tape9", exists_ntdev, S_IFBLK, true},
- {"/dev/st10", BRACK(FHDEV(DEV_TAPE_MAJOR, 10)), "\\Device\\Tape10", exists_ntdev, S_IFBLK, true},
- {"/dev/st11", BRACK(FHDEV(DEV_TAPE_MAJOR, 11)), "\\Device\\Tape11", exists_ntdev, S_IFBLK, true},
- {"/dev/st12", BRACK(FHDEV(DEV_TAPE_MAJOR, 12)), "\\Device\\Tape12", exists_ntdev, S_IFBLK, true},
- {"/dev/st13", BRACK(FHDEV(DEV_TAPE_MAJOR, 13)), "\\Device\\Tape13", exists_ntdev, S_IFBLK, true},
- {"/dev/st14", BRACK(FHDEV(DEV_TAPE_MAJOR, 14)), "\\Device\\Tape14", exists_ntdev, S_IFBLK, true},
- {"/dev/st15", BRACK(FHDEV(DEV_TAPE_MAJOR, 15)), "\\Device\\Tape15", exists_ntdev, S_IFBLK, true},
- {"/dev/st16", BRACK(FHDEV(DEV_TAPE_MAJOR, 16)), "\\Device\\Tape16", exists_ntdev, S_IFBLK, true},
- {"/dev/st17", BRACK(FHDEV(DEV_TAPE_MAJOR, 17)), "\\Device\\Tape17", exists_ntdev, S_IFBLK, true},
- {"/dev/st18", BRACK(FHDEV(DEV_TAPE_MAJOR, 18)), "\\Device\\Tape18", exists_ntdev, S_IFBLK, true},
- {"/dev/st19", BRACK(FHDEV(DEV_TAPE_MAJOR, 19)), "\\Device\\Tape19", exists_ntdev, S_IFBLK, true},
- {"/dev/st20", BRACK(FHDEV(DEV_TAPE_MAJOR, 20)), "\\Device\\Tape20", exists_ntdev, S_IFBLK, true},
- {"/dev/st21", BRACK(FHDEV(DEV_TAPE_MAJOR, 21)), "\\Device\\Tape21", exists_ntdev, S_IFBLK, true},
- {"/dev/st22", BRACK(FHDEV(DEV_TAPE_MAJOR, 22)), "\\Device\\Tape22", exists_ntdev, S_IFBLK, true},
- {"/dev/st23", BRACK(FHDEV(DEV_TAPE_MAJOR, 23)), "\\Device\\Tape23", exists_ntdev, S_IFBLK, true},
- {"/dev/st24", BRACK(FHDEV(DEV_TAPE_MAJOR, 24)), "\\Device\\Tape24", exists_ntdev, S_IFBLK, true},
- {"/dev/st25", BRACK(FHDEV(DEV_TAPE_MAJOR, 25)), "\\Device\\Tape25", exists_ntdev, S_IFBLK, true},
- {"/dev/st26", BRACK(FHDEV(DEV_TAPE_MAJOR, 26)), "\\Device\\Tape26", exists_ntdev, S_IFBLK, true},
- {"/dev/st27", BRACK(FHDEV(DEV_TAPE_MAJOR, 27)), "\\Device\\Tape27", exists_ntdev, S_IFBLK, true},
- {"/dev/st28", BRACK(FHDEV(DEV_TAPE_MAJOR, 28)), "\\Device\\Tape28", exists_ntdev, S_IFBLK, true},
- {"/dev/st29", BRACK(FHDEV(DEV_TAPE_MAJOR, 29)), "\\Device\\Tape29", exists_ntdev, S_IFBLK, true},
- {"/dev/st30", BRACK(FHDEV(DEV_TAPE_MAJOR, 30)), "\\Device\\Tape30", exists_ntdev, S_IFBLK, true},
- {"/dev/st31", BRACK(FHDEV(DEV_TAPE_MAJOR, 31)), "\\Device\\Tape31", exists_ntdev, S_IFBLK, true},
- {"/dev/st32", BRACK(FHDEV(DEV_TAPE_MAJOR, 32)), "\\Device\\Tape32", exists_ntdev, S_IFBLK, true},
- {"/dev/st33", BRACK(FHDEV(DEV_TAPE_MAJOR, 33)), "\\Device\\Tape33", exists_ntdev, S_IFBLK, true},
- {"/dev/st34", BRACK(FHDEV(DEV_TAPE_MAJOR, 34)), "\\Device\\Tape34", exists_ntdev, S_IFBLK, true},
- {"/dev/st35", BRACK(FHDEV(DEV_TAPE_MAJOR, 35)), "\\Device\\Tape35", exists_ntdev, S_IFBLK, true},
- {"/dev/st36", BRACK(FHDEV(DEV_TAPE_MAJOR, 36)), "\\Device\\Tape36", exists_ntdev, S_IFBLK, true},
- {"/dev/st37", BRACK(FHDEV(DEV_TAPE_MAJOR, 37)), "\\Device\\Tape37", exists_ntdev, S_IFBLK, true},
- {"/dev/st38", BRACK(FHDEV(DEV_TAPE_MAJOR, 38)), "\\Device\\Tape38", exists_ntdev, S_IFBLK, true},
- {"/dev/st39", BRACK(FHDEV(DEV_TAPE_MAJOR, 39)), "\\Device\\Tape39", exists_ntdev, S_IFBLK, true},
- {"/dev/st40", BRACK(FHDEV(DEV_TAPE_MAJOR, 40)), "\\Device\\Tape40", exists_ntdev, S_IFBLK, true},
- {"/dev/st41", BRACK(FHDEV(DEV_TAPE_MAJOR, 41)), "\\Device\\Tape41", exists_ntdev, S_IFBLK, true},
- {"/dev/st42", BRACK(FHDEV(DEV_TAPE_MAJOR, 42)), "\\Device\\Tape42", exists_ntdev, S_IFBLK, true},
- {"/dev/st43", BRACK(FHDEV(DEV_TAPE_MAJOR, 43)), "\\Device\\Tape43", exists_ntdev, S_IFBLK, true},
- {"/dev/st44", BRACK(FHDEV(DEV_TAPE_MAJOR, 44)), "\\Device\\Tape44", exists_ntdev, S_IFBLK, true},
- {"/dev/st45", BRACK(FHDEV(DEV_TAPE_MAJOR, 45)), "\\Device\\Tape45", exists_ntdev, S_IFBLK, true},
- {"/dev/st46", BRACK(FHDEV(DEV_TAPE_MAJOR, 46)), "\\Device\\Tape46", exists_ntdev, S_IFBLK, true},
- {"/dev/st47", BRACK(FHDEV(DEV_TAPE_MAJOR, 47)), "\\Device\\Tape47", exists_ntdev, S_IFBLK, true},
- {"/dev/st48", BRACK(FHDEV(DEV_TAPE_MAJOR, 48)), "\\Device\\Tape48", exists_ntdev, S_IFBLK, true},
- {"/dev/st49", BRACK(FHDEV(DEV_TAPE_MAJOR, 49)), "\\Device\\Tape49", exists_ntdev, S_IFBLK, true},
- {"/dev/st50", BRACK(FHDEV(DEV_TAPE_MAJOR, 50)), "\\Device\\Tape50", exists_ntdev, S_IFBLK, true},
- {"/dev/st51", BRACK(FHDEV(DEV_TAPE_MAJOR, 51)), "\\Device\\Tape51", exists_ntdev, S_IFBLK, true},
- {"/dev/st52", BRACK(FHDEV(DEV_TAPE_MAJOR, 52)), "\\Device\\Tape52", exists_ntdev, S_IFBLK, true},
- {"/dev/st53", BRACK(FHDEV(DEV_TAPE_MAJOR, 53)), "\\Device\\Tape53", exists_ntdev, S_IFBLK, true},
- {"/dev/st54", BRACK(FHDEV(DEV_TAPE_MAJOR, 54)), "\\Device\\Tape54", exists_ntdev, S_IFBLK, true},
- {"/dev/st55", BRACK(FHDEV(DEV_TAPE_MAJOR, 55)), "\\Device\\Tape55", exists_ntdev, S_IFBLK, true},
- {"/dev/st56", BRACK(FHDEV(DEV_TAPE_MAJOR, 56)), "\\Device\\Tape56", exists_ntdev, S_IFBLK, true},
- {"/dev/st57", BRACK(FHDEV(DEV_TAPE_MAJOR, 57)), "\\Device\\Tape57", exists_ntdev, S_IFBLK, true},
- {"/dev/st58", BRACK(FHDEV(DEV_TAPE_MAJOR, 58)), "\\Device\\Tape58", exists_ntdev, S_IFBLK, true},
- {"/dev/st59", BRACK(FHDEV(DEV_TAPE_MAJOR, 59)), "\\Device\\Tape59", exists_ntdev, S_IFBLK, true},
- {"/dev/st60", BRACK(FHDEV(DEV_TAPE_MAJOR, 60)), "\\Device\\Tape60", exists_ntdev, S_IFBLK, true},
- {"/dev/st61", BRACK(FHDEV(DEV_TAPE_MAJOR, 61)), "\\Device\\Tape61", exists_ntdev, S_IFBLK, true},
- {"/dev/st62", BRACK(FHDEV(DEV_TAPE_MAJOR, 62)), "\\Device\\Tape62", exists_ntdev, S_IFBLK, true},
- {"/dev/st63", BRACK(FHDEV(DEV_TAPE_MAJOR, 63)), "\\Device\\Tape63", exists_ntdev, S_IFBLK, true},
- {"/dev/st64", BRACK(FHDEV(DEV_TAPE_MAJOR, 64)), "\\Device\\Tape64", exists_ntdev, S_IFBLK, true},
- {"/dev/st65", BRACK(FHDEV(DEV_TAPE_MAJOR, 65)), "\\Device\\Tape65", exists_ntdev, S_IFBLK, true},
- {"/dev/st66", BRACK(FHDEV(DEV_TAPE_MAJOR, 66)), "\\Device\\Tape66", exists_ntdev, S_IFBLK, true},
- {"/dev/st67", BRACK(FHDEV(DEV_TAPE_MAJOR, 67)), "\\Device\\Tape67", exists_ntdev, S_IFBLK, true},
- {"/dev/st68", BRACK(FHDEV(DEV_TAPE_MAJOR, 68)), "\\Device\\Tape68", exists_ntdev, S_IFBLK, true},
- {"/dev/st69", BRACK(FHDEV(DEV_TAPE_MAJOR, 69)), "\\Device\\Tape69", exists_ntdev, S_IFBLK, true},
- {"/dev/st70", BRACK(FHDEV(DEV_TAPE_MAJOR, 70)), "\\Device\\Tape70", exists_ntdev, S_IFBLK, true},
- {"/dev/st71", BRACK(FHDEV(DEV_TAPE_MAJOR, 71)), "\\Device\\Tape71", exists_ntdev, S_IFBLK, true},
- {"/dev/st72", BRACK(FHDEV(DEV_TAPE_MAJOR, 72)), "\\Device\\Tape72", exists_ntdev, S_IFBLK, true},
- {"/dev/st73", BRACK(FHDEV(DEV_TAPE_MAJOR, 73)), "\\Device\\Tape73", exists_ntdev, S_IFBLK, true},
- {"/dev/st74", BRACK(FHDEV(DEV_TAPE_MAJOR, 74)), "\\Device\\Tape74", exists_ntdev, S_IFBLK, true},
- {"/dev/st75", BRACK(FHDEV(DEV_TAPE_MAJOR, 75)), "\\Device\\Tape75", exists_ntdev, S_IFBLK, true},
- {"/dev/st76", BRACK(FHDEV(DEV_TAPE_MAJOR, 76)), "\\Device\\Tape76", exists_ntdev, S_IFBLK, true},
- {"/dev/st77", BRACK(FHDEV(DEV_TAPE_MAJOR, 77)), "\\Device\\Tape77", exists_ntdev, S_IFBLK, true},
- {"/dev/st78", BRACK(FHDEV(DEV_TAPE_MAJOR, 78)), "\\Device\\Tape78", exists_ntdev, S_IFBLK, true},
- {"/dev/st79", BRACK(FHDEV(DEV_TAPE_MAJOR, 79)), "\\Device\\Tape79", exists_ntdev, S_IFBLK, true},
- {"/dev/st80", BRACK(FHDEV(DEV_TAPE_MAJOR, 80)), "\\Device\\Tape80", exists_ntdev, S_IFBLK, true},
- {"/dev/st81", BRACK(FHDEV(DEV_TAPE_MAJOR, 81)), "\\Device\\Tape81", exists_ntdev, S_IFBLK, true},
- {"/dev/st82", BRACK(FHDEV(DEV_TAPE_MAJOR, 82)), "\\Device\\Tape82", exists_ntdev, S_IFBLK, true},
- {"/dev/st83", BRACK(FHDEV(DEV_TAPE_MAJOR, 83)), "\\Device\\Tape83", exists_ntdev, S_IFBLK, true},
- {"/dev/st84", BRACK(FHDEV(DEV_TAPE_MAJOR, 84)), "\\Device\\Tape84", exists_ntdev, S_IFBLK, true},
- {"/dev/st85", BRACK(FHDEV(DEV_TAPE_MAJOR, 85)), "\\Device\\Tape85", exists_ntdev, S_IFBLK, true},
- {"/dev/st86", BRACK(FHDEV(DEV_TAPE_MAJOR, 86)), "\\Device\\Tape86", exists_ntdev, S_IFBLK, true},
- {"/dev/st87", BRACK(FHDEV(DEV_TAPE_MAJOR, 87)), "\\Device\\Tape87", exists_ntdev, S_IFBLK, true},
- {"/dev/st88", BRACK(FHDEV(DEV_TAPE_MAJOR, 88)), "\\Device\\Tape88", exists_ntdev, S_IFBLK, true},
- {"/dev/st89", BRACK(FHDEV(DEV_TAPE_MAJOR, 89)), "\\Device\\Tape89", exists_ntdev, S_IFBLK, true},
- {"/dev/st90", BRACK(FHDEV(DEV_TAPE_MAJOR, 90)), "\\Device\\Tape90", exists_ntdev, S_IFBLK, true},
- {"/dev/st91", BRACK(FHDEV(DEV_TAPE_MAJOR, 91)), "\\Device\\Tape91", exists_ntdev, S_IFBLK, true},
- {"/dev/st92", BRACK(FHDEV(DEV_TAPE_MAJOR, 92)), "\\Device\\Tape92", exists_ntdev, S_IFBLK, true},
- {"/dev/st93", BRACK(FHDEV(DEV_TAPE_MAJOR, 93)), "\\Device\\Tape93", exists_ntdev, S_IFBLK, true},
- {"/dev/st94", BRACK(FHDEV(DEV_TAPE_MAJOR, 94)), "\\Device\\Tape94", exists_ntdev, S_IFBLK, true},
- {"/dev/st95", BRACK(FHDEV(DEV_TAPE_MAJOR, 95)), "\\Device\\Tape95", exists_ntdev, S_IFBLK, true},
- {"/dev/st96", BRACK(FHDEV(DEV_TAPE_MAJOR, 96)), "\\Device\\Tape96", exists_ntdev, S_IFBLK, true},
- {"/dev/st97", BRACK(FHDEV(DEV_TAPE_MAJOR, 97)), "\\Device\\Tape97", exists_ntdev, S_IFBLK, true},
- {"/dev/st98", BRACK(FHDEV(DEV_TAPE_MAJOR, 98)), "\\Device\\Tape98", exists_ntdev, S_IFBLK, true},
- {"/dev/st99", BRACK(FHDEV(DEV_TAPE_MAJOR, 99)), "\\Device\\Tape99", exists_ntdev, S_IFBLK, true},
- {"/dev/st100", BRACK(FHDEV(DEV_TAPE_MAJOR, 100)), "\\Device\\Tape100", exists_ntdev, S_IFBLK, true},
- {"/dev/st101", BRACK(FHDEV(DEV_TAPE_MAJOR, 101)), "\\Device\\Tape101", exists_ntdev, S_IFBLK, true},
- {"/dev/st102", BRACK(FHDEV(DEV_TAPE_MAJOR, 102)), "\\Device\\Tape102", exists_ntdev, S_IFBLK, true},
- {"/dev/st103", BRACK(FHDEV(DEV_TAPE_MAJOR, 103)), "\\Device\\Tape103", exists_ntdev, S_IFBLK, true},
- {"/dev/st104", BRACK(FHDEV(DEV_TAPE_MAJOR, 104)), "\\Device\\Tape104", exists_ntdev, S_IFBLK, true},
- {"/dev/st105", BRACK(FHDEV(DEV_TAPE_MAJOR, 105)), "\\Device\\Tape105", exists_ntdev, S_IFBLK, true},
- {"/dev/st106", BRACK(FHDEV(DEV_TAPE_MAJOR, 106)), "\\Device\\Tape106", exists_ntdev, S_IFBLK, true},
- {"/dev/st107", BRACK(FHDEV(DEV_TAPE_MAJOR, 107)), "\\Device\\Tape107", exists_ntdev, S_IFBLK, true},
- {"/dev/st108", BRACK(FHDEV(DEV_TAPE_MAJOR, 108)), "\\Device\\Tape108", exists_ntdev, S_IFBLK, true},
- {"/dev/st109", BRACK(FHDEV(DEV_TAPE_MAJOR, 109)), "\\Device\\Tape109", exists_ntdev, S_IFBLK, true},
- {"/dev/st110", BRACK(FHDEV(DEV_TAPE_MAJOR, 110)), "\\Device\\Tape110", exists_ntdev, S_IFBLK, true},
- {"/dev/st111", BRACK(FHDEV(DEV_TAPE_MAJOR, 111)), "\\Device\\Tape111", exists_ntdev, S_IFBLK, true},
- {"/dev/st112", BRACK(FHDEV(DEV_TAPE_MAJOR, 112)), "\\Device\\Tape112", exists_ntdev, S_IFBLK, true},
- {"/dev/st113", BRACK(FHDEV(DEV_TAPE_MAJOR, 113)), "\\Device\\Tape113", exists_ntdev, S_IFBLK, true},
- {"/dev/st114", BRACK(FHDEV(DEV_TAPE_MAJOR, 114)), "\\Device\\Tape114", exists_ntdev, S_IFBLK, true},
- {"/dev/st115", BRACK(FHDEV(DEV_TAPE_MAJOR, 115)), "\\Device\\Tape115", exists_ntdev, S_IFBLK, true},
- {"/dev/st116", BRACK(FHDEV(DEV_TAPE_MAJOR, 116)), "\\Device\\Tape116", exists_ntdev, S_IFBLK, true},
- {"/dev/st117", BRACK(FHDEV(DEV_TAPE_MAJOR, 117)), "\\Device\\Tape117", exists_ntdev, S_IFBLK, true},
- {"/dev/st118", BRACK(FHDEV(DEV_TAPE_MAJOR, 118)), "\\Device\\Tape118", exists_ntdev, S_IFBLK, true},
- {"/dev/st119", BRACK(FHDEV(DEV_TAPE_MAJOR, 119)), "\\Device\\Tape119", exists_ntdev, S_IFBLK, true},
- {"/dev/st120", BRACK(FHDEV(DEV_TAPE_MAJOR, 120)), "\\Device\\Tape120", exists_ntdev, S_IFBLK, true},
- {"/dev/st121", BRACK(FHDEV(DEV_TAPE_MAJOR, 121)), "\\Device\\Tape121", exists_ntdev, S_IFBLK, true},
- {"/dev/st122", BRACK(FHDEV(DEV_TAPE_MAJOR, 122)), "\\Device\\Tape122", exists_ntdev, S_IFBLK, true},
- {"/dev/st123", BRACK(FHDEV(DEV_TAPE_MAJOR, 123)), "\\Device\\Tape123", exists_ntdev, S_IFBLK, true},
- {"/dev/st124", BRACK(FHDEV(DEV_TAPE_MAJOR, 124)), "\\Device\\Tape124", exists_ntdev, S_IFBLK, true},
- {"/dev/st125", BRACK(FHDEV(DEV_TAPE_MAJOR, 125)), "\\Device\\Tape125", exists_ntdev, S_IFBLK, true},
- {"/dev/st126", BRACK(FHDEV(DEV_TAPE_MAJOR, 126)), "\\Device\\Tape126", exists_ntdev, S_IFBLK, true},
- {"/dev/st127", BRACK(FHDEV(DEV_TAPE_MAJOR, 127)), "\\Device\\Tape127", exists_ntdev, S_IFBLK, true},
- {"/dev/tty", BRACK(FH_TTY), "/dev/tty", exists, S_IFCHR, true},
- {"/dev/ttyS0", BRACK(FHDEV(DEV_SERIAL_MAJOR, 0)), "\\??\\COM1", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS1", BRACK(FHDEV(DEV_SERIAL_MAJOR, 1)), "\\??\\COM2", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS2", BRACK(FHDEV(DEV_SERIAL_MAJOR, 2)), "\\??\\COM3", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS3", BRACK(FHDEV(DEV_SERIAL_MAJOR, 3)), "\\??\\COM4", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS4", BRACK(FHDEV(DEV_SERIAL_MAJOR, 4)), "\\??\\COM5", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS5", BRACK(FHDEV(DEV_SERIAL_MAJOR, 5)), "\\??\\COM6", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS6", BRACK(FHDEV(DEV_SERIAL_MAJOR, 6)), "\\??\\COM7", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS7", BRACK(FHDEV(DEV_SERIAL_MAJOR, 7)), "\\??\\COM8", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS8", BRACK(FHDEV(DEV_SERIAL_MAJOR, 8)), "\\??\\COM9", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS9", BRACK(FHDEV(DEV_SERIAL_MAJOR, 9)), "\\??\\COM10", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS10", BRACK(FHDEV(DEV_SERIAL_MAJOR, 10)), "\\??\\COM11", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS11", BRACK(FHDEV(DEV_SERIAL_MAJOR, 11)), "\\??\\COM12", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS12", BRACK(FHDEV(DEV_SERIAL_MAJOR, 12)), "\\??\\COM13", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS13", BRACK(FHDEV(DEV_SERIAL_MAJOR, 13)), "\\??\\COM14", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS14", BRACK(FHDEV(DEV_SERIAL_MAJOR, 14)), "\\??\\COM15", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS15", BRACK(FHDEV(DEV_SERIAL_MAJOR, 15)), "\\??\\COM16", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS16", BRACK(FHDEV(DEV_SERIAL_MAJOR, 16)), "\\??\\COM17", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS17", BRACK(FHDEV(DEV_SERIAL_MAJOR, 17)), "\\??\\COM18", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS18", BRACK(FHDEV(DEV_SERIAL_MAJOR, 18)), "\\??\\COM19", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS19", BRACK(FHDEV(DEV_SERIAL_MAJOR, 19)), "\\??\\COM20", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS20", BRACK(FHDEV(DEV_SERIAL_MAJOR, 20)), "\\??\\COM21", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS21", BRACK(FHDEV(DEV_SERIAL_MAJOR, 21)), "\\??\\COM22", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS22", BRACK(FHDEV(DEV_SERIAL_MAJOR, 22)), "\\??\\COM23", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS23", BRACK(FHDEV(DEV_SERIAL_MAJOR, 23)), "\\??\\COM24", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS24", BRACK(FHDEV(DEV_SERIAL_MAJOR, 24)), "\\??\\COM25", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS25", BRACK(FHDEV(DEV_SERIAL_MAJOR, 25)), "\\??\\COM26", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS26", BRACK(FHDEV(DEV_SERIAL_MAJOR, 26)), "\\??\\COM27", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS27", BRACK(FHDEV(DEV_SERIAL_MAJOR, 27)), "\\??\\COM28", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS28", BRACK(FHDEV(DEV_SERIAL_MAJOR, 28)), "\\??\\COM29", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS29", BRACK(FHDEV(DEV_SERIAL_MAJOR, 29)), "\\??\\COM30", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS30", BRACK(FHDEV(DEV_SERIAL_MAJOR, 30)), "\\??\\COM31", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS31", BRACK(FHDEV(DEV_SERIAL_MAJOR, 31)), "\\??\\COM32", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS32", BRACK(FHDEV(DEV_SERIAL_MAJOR, 32)), "\\??\\COM33", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS33", BRACK(FHDEV(DEV_SERIAL_MAJOR, 33)), "\\??\\COM34", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS34", BRACK(FHDEV(DEV_SERIAL_MAJOR, 34)), "\\??\\COM35", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS35", BRACK(FHDEV(DEV_SERIAL_MAJOR, 35)), "\\??\\COM36", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS36", BRACK(FHDEV(DEV_SERIAL_MAJOR, 36)), "\\??\\COM37", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS37", BRACK(FHDEV(DEV_SERIAL_MAJOR, 37)), "\\??\\COM38", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS38", BRACK(FHDEV(DEV_SERIAL_MAJOR, 38)), "\\??\\COM39", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS39", BRACK(FHDEV(DEV_SERIAL_MAJOR, 39)), "\\??\\COM40", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS40", BRACK(FHDEV(DEV_SERIAL_MAJOR, 40)), "\\??\\COM41", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS41", BRACK(FHDEV(DEV_SERIAL_MAJOR, 41)), "\\??\\COM42", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS42", BRACK(FHDEV(DEV_SERIAL_MAJOR, 42)), "\\??\\COM43", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS43", BRACK(FHDEV(DEV_SERIAL_MAJOR, 43)), "\\??\\COM44", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS44", BRACK(FHDEV(DEV_SERIAL_MAJOR, 44)), "\\??\\COM45", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS45", BRACK(FHDEV(DEV_SERIAL_MAJOR, 45)), "\\??\\COM46", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS46", BRACK(FHDEV(DEV_SERIAL_MAJOR, 46)), "\\??\\COM47", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS47", BRACK(FHDEV(DEV_SERIAL_MAJOR, 47)), "\\??\\COM48", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS48", BRACK(FHDEV(DEV_SERIAL_MAJOR, 48)), "\\??\\COM49", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS49", BRACK(FHDEV(DEV_SERIAL_MAJOR, 49)), "\\??\\COM50", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS50", BRACK(FHDEV(DEV_SERIAL_MAJOR, 50)), "\\??\\COM51", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS51", BRACK(FHDEV(DEV_SERIAL_MAJOR, 51)), "\\??\\COM52", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS52", BRACK(FHDEV(DEV_SERIAL_MAJOR, 52)), "\\??\\COM53", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS53", BRACK(FHDEV(DEV_SERIAL_MAJOR, 53)), "\\??\\COM54", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS54", BRACK(FHDEV(DEV_SERIAL_MAJOR, 54)), "\\??\\COM55", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS55", BRACK(FHDEV(DEV_SERIAL_MAJOR, 55)), "\\??\\COM56", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS56", BRACK(FHDEV(DEV_SERIAL_MAJOR, 56)), "\\??\\COM57", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS57", BRACK(FHDEV(DEV_SERIAL_MAJOR, 57)), "\\??\\COM58", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS58", BRACK(FHDEV(DEV_SERIAL_MAJOR, 58)), "\\??\\COM59", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS59", BRACK(FHDEV(DEV_SERIAL_MAJOR, 59)), "\\??\\COM60", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS60", BRACK(FHDEV(DEV_SERIAL_MAJOR, 60)), "\\??\\COM61", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS61", BRACK(FHDEV(DEV_SERIAL_MAJOR, 61)), "\\??\\COM62", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS62", BRACK(FHDEV(DEV_SERIAL_MAJOR, 62)), "\\??\\COM63", exists_ntdev, S_IFCHR, true},
- {"/dev/ttyS63", BRACK(FHDEV(DEV_SERIAL_MAJOR, 63)), "\\??\\COM64", exists_ntdev, S_IFCHR, true},
- {"/dev/urandom", BRACK(FH_URANDOM), "\\Device\\Null", exists_ntdev, S_IFCHR, true},
- {"/dev/windows", BRACK(FH_WINDOWS), "\\Device\\Null", exists_ntdev, S_IFCHR, true},
- {"/dev/zero", BRACK(FH_ZERO), "\\Device\\Null", exists_ntdev, S_IFCHR, true},
- {":fifo", BRACK(FH_FIFO), "/dev/fifo", exists_internal, S_IFCHR, false},
- {":pipe", BRACK(FH_PIPE), "/dev/pipe", exists_internal, S_IFCHR, false},
- {":ptym0", BRACK(FHDEV(DEV_PTYM_MAJOR, 0)), "/dev/ptym0", exists_internal, S_IFCHR, false},
- {":ptym1", BRACK(FHDEV(DEV_PTYM_MAJOR, 1)), "/dev/ptym1", exists_internal, S_IFCHR, false},
- {":ptym2", BRACK(FHDEV(DEV_PTYM_MAJOR, 2)), "/dev/ptym2", exists_internal, S_IFCHR, false},
- {":ptym3", BRACK(FHDEV(DEV_PTYM_MAJOR, 3)), "/dev/ptym3", exists_internal, S_IFCHR, false},
- {":ptym4", BRACK(FHDEV(DEV_PTYM_MAJOR, 4)), "/dev/ptym4", exists_internal, S_IFCHR, false},
- {":ptym5", BRACK(FHDEV(DEV_PTYM_MAJOR, 5)), "/dev/ptym5", exists_internal, S_IFCHR, false},
- {":ptym6", BRACK(FHDEV(DEV_PTYM_MAJOR, 6)), "/dev/ptym6", exists_internal, S_IFCHR, false},
- {":ptym7", BRACK(FHDEV(DEV_PTYM_MAJOR, 7)), "/dev/ptym7", exists_internal, S_IFCHR, false},
- {":ptym8", BRACK(FHDEV(DEV_PTYM_MAJOR, 8)), "/dev/ptym8", exists_internal, S_IFCHR, false},
- {":ptym9", BRACK(FHDEV(DEV_PTYM_MAJOR, 9)), "/dev/ptym9", exists_internal, S_IFCHR, false},
- {":ptym10", BRACK(FHDEV(DEV_PTYM_MAJOR, 10)), "/dev/ptym10", exists_internal, S_IFCHR, false},
- {":ptym11", BRACK(FHDEV(DEV_PTYM_MAJOR, 11)), "/dev/ptym11", exists_internal, S_IFCHR, false},
- {":ptym12", BRACK(FHDEV(DEV_PTYM_MAJOR, 12)), "/dev/ptym12", exists_internal, S_IFCHR, false},
- {":ptym13", BRACK(FHDEV(DEV_PTYM_MAJOR, 13)), "/dev/ptym13", exists_internal, S_IFCHR, false},
- {":ptym14", BRACK(FHDEV(DEV_PTYM_MAJOR, 14)), "/dev/ptym14", exists_internal, S_IFCHR, false},
- {":ptym15", BRACK(FHDEV(DEV_PTYM_MAJOR, 15)), "/dev/ptym15", exists_internal, S_IFCHR, false},
- {":ptym16", BRACK(FHDEV(DEV_PTYM_MAJOR, 16)), "/dev/ptym16", exists_internal, S_IFCHR, false},
- {":ptym17", BRACK(FHDEV(DEV_PTYM_MAJOR, 17)), "/dev/ptym17", exists_internal, S_IFCHR, false},
- {":ptym18", BRACK(FHDEV(DEV_PTYM_MAJOR, 18)), "/dev/ptym18", exists_internal, S_IFCHR, false},
- {":ptym19", BRACK(FHDEV(DEV_PTYM_MAJOR, 19)), "/dev/ptym19", exists_internal, S_IFCHR, false},
- {":ptym20", BRACK(FHDEV(DEV_PTYM_MAJOR, 20)), "/dev/ptym20", exists_internal, S_IFCHR, false},
- {":ptym21", BRACK(FHDEV(DEV_PTYM_MAJOR, 21)), "/dev/ptym21", exists_internal, S_IFCHR, false},
- {":ptym22", BRACK(FHDEV(DEV_PTYM_MAJOR, 22)), "/dev/ptym22", exists_internal, S_IFCHR, false},
- {":ptym23", BRACK(FHDEV(DEV_PTYM_MAJOR, 23)), "/dev/ptym23", exists_internal, S_IFCHR, false},
- {":ptym24", BRACK(FHDEV(DEV_PTYM_MAJOR, 24)), "/dev/ptym24", exists_internal, S_IFCHR, false},
- {":ptym25", BRACK(FHDEV(DEV_PTYM_MAJOR, 25)), "/dev/ptym25", exists_internal, S_IFCHR, false},
- {":ptym26", BRACK(FHDEV(DEV_PTYM_MAJOR, 26)), "/dev/ptym26", exists_internal, S_IFCHR, false},
- {":ptym27", BRACK(FHDEV(DEV_PTYM_MAJOR, 27)), "/dev/ptym27", exists_internal, S_IFCHR, false},
- {":ptym28", BRACK(FHDEV(DEV_PTYM_MAJOR, 28)), "/dev/ptym28", exists_internal, S_IFCHR, false},
- {":ptym29", BRACK(FHDEV(DEV_PTYM_MAJOR, 29)), "/dev/ptym29", exists_internal, S_IFCHR, false},
- {":ptym30", BRACK(FHDEV(DEV_PTYM_MAJOR, 30)), "/dev/ptym30", exists_internal, S_IFCHR, false},
- {":ptym31", BRACK(FHDEV(DEV_PTYM_MAJOR, 31)), "/dev/ptym31", exists_internal, S_IFCHR, false},
- {":ptym32", BRACK(FHDEV(DEV_PTYM_MAJOR, 32)), "/dev/ptym32", exists_internal, S_IFCHR, false},
- {":ptym33", BRACK(FHDEV(DEV_PTYM_MAJOR, 33)), "/dev/ptym33", exists_internal, S_IFCHR, false},
- {":ptym34", BRACK(FHDEV(DEV_PTYM_MAJOR, 34)), "/dev/ptym34", exists_internal, S_IFCHR, false},
- {":ptym35", BRACK(FHDEV(DEV_PTYM_MAJOR, 35)), "/dev/ptym35", exists_internal, S_IFCHR, false},
- {":ptym36", BRACK(FHDEV(DEV_PTYM_MAJOR, 36)), "/dev/ptym36", exists_internal, S_IFCHR, false},
- {":ptym37", BRACK(FHDEV(DEV_PTYM_MAJOR, 37)), "/dev/ptym37", exists_internal, S_IFCHR, false},
- {":ptym38", BRACK(FHDEV(DEV_PTYM_MAJOR, 38)), "/dev/ptym38", exists_internal, S_IFCHR, false},
- {":ptym39", BRACK(FHDEV(DEV_PTYM_MAJOR, 39)), "/dev/ptym39", exists_internal, S_IFCHR, false},
- {":ptym40", BRACK(FHDEV(DEV_PTYM_MAJOR, 40)), "/dev/ptym40", exists_internal, S_IFCHR, false},
- {":ptym41", BRACK(FHDEV(DEV_PTYM_MAJOR, 41)), "/dev/ptym41", exists_internal, S_IFCHR, false},
- {":ptym42", BRACK(FHDEV(DEV_PTYM_MAJOR, 42)), "/dev/ptym42", exists_internal, S_IFCHR, false},
- {":ptym43", BRACK(FHDEV(DEV_PTYM_MAJOR, 43)), "/dev/ptym43", exists_internal, S_IFCHR, false},
- {":ptym44", BRACK(FHDEV(DEV_PTYM_MAJOR, 44)), "/dev/ptym44", exists_internal, S_IFCHR, false},
- {":ptym45", BRACK(FHDEV(DEV_PTYM_MAJOR, 45)), "/dev/ptym45", exists_internal, S_IFCHR, false},
- {":ptym46", BRACK(FHDEV(DEV_PTYM_MAJOR, 46)), "/dev/ptym46", exists_internal, S_IFCHR, false},
- {":ptym47", BRACK(FHDEV(DEV_PTYM_MAJOR, 47)), "/dev/ptym47", exists_internal, S_IFCHR, false},
- {":ptym48", BRACK(FHDEV(DEV_PTYM_MAJOR, 48)), "/dev/ptym48", exists_internal, S_IFCHR, false},
- {":ptym49", BRACK(FHDEV(DEV_PTYM_MAJOR, 49)), "/dev/ptym49", exists_internal, S_IFCHR, false},
- {":ptym50", BRACK(FHDEV(DEV_PTYM_MAJOR, 50)), "/dev/ptym50", exists_internal, S_IFCHR, false},
- {":ptym51", BRACK(FHDEV(DEV_PTYM_MAJOR, 51)), "/dev/ptym51", exists_internal, S_IFCHR, false},
- {":ptym52", BRACK(FHDEV(DEV_PTYM_MAJOR, 52)), "/dev/ptym52", exists_internal, S_IFCHR, false},
- {":ptym53", BRACK(FHDEV(DEV_PTYM_MAJOR, 53)), "/dev/ptym53", exists_internal, S_IFCHR, false},
- {":ptym54", BRACK(FHDEV(DEV_PTYM_MAJOR, 54)), "/dev/ptym54", exists_internal, S_IFCHR, false},
- {":ptym55", BRACK(FHDEV(DEV_PTYM_MAJOR, 55)), "/dev/ptym55", exists_internal, S_IFCHR, false},
- {":ptym56", BRACK(FHDEV(DEV_PTYM_MAJOR, 56)), "/dev/ptym56", exists_internal, S_IFCHR, false},
- {":ptym57", BRACK(FHDEV(DEV_PTYM_MAJOR, 57)), "/dev/ptym57", exists_internal, S_IFCHR, false},
- {":ptym58", BRACK(FHDEV(DEV_PTYM_MAJOR, 58)), "/dev/ptym58", exists_internal, S_IFCHR, false},
- {":ptym59", BRACK(FHDEV(DEV_PTYM_MAJOR, 59)), "/dev/ptym59", exists_internal, S_IFCHR, false},
- {":ptym60", BRACK(FHDEV(DEV_PTYM_MAJOR, 60)), "/dev/ptym60", exists_internal, S_IFCHR, false},
- {":ptym61", BRACK(FHDEV(DEV_PTYM_MAJOR, 61)), "/dev/ptym61", exists_internal, S_IFCHR, false},
- {":ptym62", BRACK(FHDEV(DEV_PTYM_MAJOR, 62)), "/dev/ptym62", exists_internal, S_IFCHR, false},
- {":ptym63", BRACK(FHDEV(DEV_PTYM_MAJOR, 63)), "/dev/ptym63", exists_internal, S_IFCHR, false}
-};
-
-const device *cons_dev = dev_storage + 20;
-const device *console_dev = dev_storage + 84;
-const device *ptym_dev = dev_storage + 2577;
-const device *ptys_dev = dev_storage + 234;
-const device *urandom_dev = dev_storage + 2572;
-
-
-static KR_device_t KR_find_keyword (const char *KR_keyword, int KR_length)
-{
-
- switch (KR_length)
- {
- case 4:
- if (strncmp (KR_keyword, "/dev", 4) == 0)
- {
-{
-return dev_storage + 0;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 5:
- switch (KR_keyword [1])
- {
- case 'p':
- if (strncmp (KR_keyword, ":pipe", 5) == 0)
- {
-{
-return dev_storage + 2576;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, ":fifo", 5) == 0)
- {
-{
-return dev_storage + 2575;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 6:
- switch (KR_keyword [5])
- {
- case '9':
- if (strncmp (KR_keyword, ":ptym9", 6) == 0)
- {
-{
-return dev_storage + 2586;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '8':
- if (strncmp (KR_keyword, ":ptym8", 6) == 0)
- {
-{
-return dev_storage + 2585;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '7':
- if (strncmp (KR_keyword, ":ptym7", 6) == 0)
- {
-{
-return dev_storage + 2584;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, ":ptym6", 6) == 0)
- {
-{
-return dev_storage + 2583;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, ":ptym5", 6) == 0)
- {
-{
-return dev_storage + 2582;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, ":ptym4", 6) == 0)
- {
-{
-return dev_storage + 2581;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, ":ptym3", 6) == 0)
- {
-{
-return dev_storage + 2580;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, ":ptym2", 6) == 0)
- {
-{
-return dev_storage + 2579;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, ":ptym1", 6) == 0)
- {
-{
-return dev_storage + 2578;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '0':
- if (strncmp (KR_keyword, ":ptym0", 6) == 0)
- {
-{
-return dev_storage + 2577;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 7:
- switch (KR_keyword [5])
- {
- case '6':
- switch (KR_keyword [6])
- {
- case '3':
- if (strncmp (KR_keyword, ":ptym63", 7) == 0)
- {
-{
-return dev_storage + 2640;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, ":ptym62", 7) == 0)
- {
-{
-return dev_storage + 2639;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, ":ptym61", 7) == 0)
- {
-{
-return dev_storage + 2638;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '0':
- if (strncmp (KR_keyword, ":ptym60", 7) == 0)
- {
-{
-return dev_storage + 2637;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '5':
- switch (KR_keyword [6])
- {
- case '9':
- if (strncmp (KR_keyword, ":ptym59", 7) == 0)
- {
-{
-return dev_storage + 2636;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '8':
- if (strncmp (KR_keyword, ":ptym58", 7) == 0)
- {
-{
-return dev_storage + 2635;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '7':
- if (strncmp (KR_keyword, ":ptym57", 7) == 0)
- {
-{
-return dev_storage + 2634;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, ":ptym56", 7) == 0)
- {
-{
-return dev_storage + 2633;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, ":ptym55", 7) == 0)
- {
-{
-return dev_storage + 2632;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, ":ptym54", 7) == 0)
- {
-{
-return dev_storage + 2631;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, ":ptym53", 7) == 0)
- {
-{
-return dev_storage + 2630;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, ":ptym52", 7) == 0)
- {
-{
-return dev_storage + 2629;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, ":ptym51", 7) == 0)
- {
-{
-return dev_storage + 2628;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '0':
- if (strncmp (KR_keyword, ":ptym50", 7) == 0)
- {
-{
-return dev_storage + 2627;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '4':
- switch (KR_keyword [6])
- {
- case '9':
- if (strncmp (KR_keyword, ":ptym49", 7) == 0)
- {
-{
-return dev_storage + 2626;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '8':
- if (strncmp (KR_keyword, ":ptym48", 7) == 0)
- {
-{
-return dev_storage + 2625;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '7':
- if (strncmp (KR_keyword, ":ptym47", 7) == 0)
- {
-{
-return dev_storage + 2624;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, ":ptym46", 7) == 0)
- {
-{
-return dev_storage + 2623;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, ":ptym45", 7) == 0)
- {
-{
-return dev_storage + 2622;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, ":ptym44", 7) == 0)
- {
-{
-return dev_storage + 2621;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, ":ptym43", 7) == 0)
- {
-{
-return dev_storage + 2620;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, ":ptym42", 7) == 0)
- {
-{
-return dev_storage + 2619;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, ":ptym41", 7) == 0)
- {
-{
-return dev_storage + 2618;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '0':
- if (strncmp (KR_keyword, ":ptym40", 7) == 0)
- {
-{
-return dev_storage + 2617;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '3':
- switch (KR_keyword [6])
- {
- case '9':
- if (strncmp (KR_keyword, ":ptym39", 7) == 0)
- {
-{
-return dev_storage + 2616;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '8':
- if (strncmp (KR_keyword, ":ptym38", 7) == 0)
- {
-{
-return dev_storage + 2615;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '7':
- if (strncmp (KR_keyword, ":ptym37", 7) == 0)
- {
-{
-return dev_storage + 2614;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, ":ptym36", 7) == 0)
- {
-{
-return dev_storage + 2613;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, ":ptym35", 7) == 0)
- {
-{
-return dev_storage + 2612;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, ":ptym34", 7) == 0)
- {
-{
-return dev_storage + 2611;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, ":ptym33", 7) == 0)
- {
-{
-return dev_storage + 2610;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, ":ptym32", 7) == 0)
- {
-{
-return dev_storage + 2609;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, ":ptym31", 7) == 0)
- {
-{
-return dev_storage + 2608;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '0':
- if (strncmp (KR_keyword, ":ptym30", 7) == 0)
- {
-{
-return dev_storage + 2607;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '2':
- switch (KR_keyword [6])
- {
- case '9':
- if (strncmp (KR_keyword, ":ptym29", 7) == 0)
- {
-{
-return dev_storage + 2606;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '8':
- if (strncmp (KR_keyword, ":ptym28", 7) == 0)
- {
-{
-return dev_storage + 2605;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '7':
- if (strncmp (KR_keyword, ":ptym27", 7) == 0)
- {
-{
-return dev_storage + 2604;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, ":ptym26", 7) == 0)
- {
-{
-return dev_storage + 2603;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, ":ptym25", 7) == 0)
- {
-{
-return dev_storage + 2602;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, ":ptym24", 7) == 0)
- {
-{
-return dev_storage + 2601;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, ":ptym23", 7) == 0)
- {
-{
-return dev_storage + 2600;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, ":ptym22", 7) == 0)
- {
-{
-return dev_storage + 2599;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, ":ptym21", 7) == 0)
- {
-{
-return dev_storage + 2598;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '0':
- if (strncmp (KR_keyword, ":ptym20", 7) == 0)
- {
-{
-return dev_storage + 2597;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '1':
- switch (KR_keyword [6])
- {
- case '9':
- if (strncmp (KR_keyword, ":ptym19", 7) == 0)
- {
-{
-return dev_storage + 2596;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '8':
- if (strncmp (KR_keyword, ":ptym18", 7) == 0)
- {
-{
-return dev_storage + 2595;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '7':
- if (strncmp (KR_keyword, ":ptym17", 7) == 0)
- {
-{
-return dev_storage + 2594;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, ":ptym16", 7) == 0)
- {
-{
-return dev_storage + 2593;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, ":ptym15", 7) == 0)
- {
-{
-return dev_storage + 2592;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, ":ptym14", 7) == 0)
- {
-{
-return dev_storage + 2591;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, ":ptym13", 7) == 0)
- {
-{
-return dev_storage + 2590;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, ":ptym12", 7) == 0)
- {
-{
-return dev_storage + 2589;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, ":ptym11", 7) == 0)
- {
-{
-return dev_storage + 2588;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '0':
- if (strncmp (KR_keyword, ":ptym10", 7) == 0)
- {
-{
-return dev_storage + 2587;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 8:
- switch (KR_keyword [7])
- {
- case 'z':
- if (strncmp (KR_keyword, "/dev/sdz", 8) == 0)
- {
-{
-return dev_storage + 340;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'y':
- switch (KR_keyword [5])
- {
- case 't':
- if (strncmp (KR_keyword, "/dev/tty", 8) == 0)
- {
-{
-return dev_storage + 2507;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sdy", 8) == 0)
- {
-{
-return dev_storage + 339;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'x':
- if (strncmp (KR_keyword, "/dev/sdx", 8) == 0)
- {
-{
-return dev_storage + 338;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sdw", 8) == 0)
- {
-{
-return dev_storage + 337;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sdv", 8) == 0)
- {
-{
-return dev_storage + 336;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sdu", 8) == 0)
- {
-{
-return dev_storage + 335;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- if (strncmp (KR_keyword, "/dev/sdt", 8) == 0)
- {
-{
-return dev_storage + 334;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sds", 8) == 0)
- {
-{
-return dev_storage + 333;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sdr", 8) == 0)
- {
-{
-return dev_storage + 332;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sdq", 8) == 0)
- {
-{
-return dev_storage + 331;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- switch (KR_keyword [5])
- {
- case 's':
- if (strncmp (KR_keyword, "/dev/sdp", 8) == 0)
- {
-{
-return dev_storage + 330;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/dsp", 8) == 0)
- {
-{
-return dev_storage + 85;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sdo", 8) == 0)
- {
-{
-return dev_storage + 329;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/sdn", 8) == 0)
- {
-{
-return dev_storage + 328;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'm':
- if (strncmp (KR_keyword, "/dev/sdm", 8) == 0)
- {
-{
-return dev_storage + 327;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sdl", 8) == 0)
- {
-{
-return dev_storage + 326;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sdk", 8) == 0)
- {
-{
-return dev_storage + 325;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sdj", 8) == 0)
- {
-{
-return dev_storage + 324;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sdi", 8) == 0)
- {
-{
-return dev_storage + 323;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sdh", 8) == 0)
- {
-{
-return dev_storage + 322;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sdg", 8) == 0)
- {
-{
-return dev_storage + 321;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sdf", 8) == 0)
- {
-{
-return dev_storage + 320;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sde", 8) == 0)
- {
-{
-return dev_storage + 319;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdd", 8) == 0)
- {
-{
-return dev_storage + 318;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdc", 8) == 0)
- {
-{
-return dev_storage + 317;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdb", 8) == 0)
- {
-{
-return dev_storage + 316;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sda", 8) == 0)
- {
-{
-return dev_storage + 315;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '9':
- switch (KR_keyword [6])
- {
- case 't':
- if (strncmp (KR_keyword, "/dev/st9", 8) == 0)
- {
-{
-return dev_storage + 2388;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sr9", 8) == 0)
- {
-{
-return dev_storage + 2372;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/fd9", 8) == 0)
- {
-{
-return dev_storage + 95;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '8':
- switch (KR_keyword [6])
- {
- case 't':
- if (strncmp (KR_keyword, "/dev/st8", 8) == 0)
- {
-{
-return dev_storage + 2387;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sr8", 8) == 0)
- {
-{
-return dev_storage + 2371;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/fd8", 8) == 0)
- {
-{
-return dev_storage + 94;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '7':
- switch (KR_keyword [6])
- {
- case 't':
- if (strncmp (KR_keyword, "/dev/st7", 8) == 0)
- {
-{
-return dev_storage + 2386;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sr7", 8) == 0)
- {
-{
-return dev_storage + 2370;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/fd7", 8) == 0)
- {
-{
-return dev_storage + 93;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '6':
- switch (KR_keyword [6])
- {
- case 't':
- if (strncmp (KR_keyword, "/dev/st6", 8) == 0)
- {
-{
-return dev_storage + 2385;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sr6", 8) == 0)
- {
-{
-return dev_storage + 2369;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/fd6", 8) == 0)
- {
-{
-return dev_storage + 92;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '5':
- switch (KR_keyword [6])
- {
- case 't':
- if (strncmp (KR_keyword, "/dev/st5", 8) == 0)
- {
-{
-return dev_storage + 2384;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sr5", 8) == 0)
- {
-{
-return dev_storage + 2368;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/fd5", 8) == 0)
- {
-{
-return dev_storage + 91;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '4':
- switch (KR_keyword [6])
- {
- case 't':
- if (strncmp (KR_keyword, "/dev/st4", 8) == 0)
- {
-{
-return dev_storage + 2383;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sr4", 8) == 0)
- {
-{
-return dev_storage + 2367;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/fd4", 8) == 0)
- {
-{
-return dev_storage + 90;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '3':
- switch (KR_keyword [6])
- {
- case 't':
- if (strncmp (KR_keyword, "/dev/st3", 8) == 0)
- {
-{
-return dev_storage + 2382;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sr3", 8) == 0)
- {
-{
-return dev_storage + 2366;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/fd3", 8) == 0)
- {
-{
-return dev_storage + 89;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '2':
- switch (KR_keyword [6])
- {
- case 't':
- if (strncmp (KR_keyword, "/dev/st2", 8) == 0)
- {
-{
-return dev_storage + 2381;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sr2", 8) == 0)
- {
-{
-return dev_storage + 2365;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/fd2", 8) == 0)
- {
-{
-return dev_storage + 88;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '1':
- switch (KR_keyword [6])
- {
- case 't':
- if (strncmp (KR_keyword, "/dev/st1", 8) == 0)
- {
-{
-return dev_storage + 2380;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sr1", 8) == 0)
- {
-{
-return dev_storage + 2364;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/fd1", 8) == 0)
- {
-{
-return dev_storage + 87;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '0':
- switch (KR_keyword [6])
- {
- case 't':
- if (strncmp (KR_keyword, "/dev/st0", 8) == 0)
- {
-{
-return dev_storage + 2379;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sr0", 8) == 0)
- {
-{
-return dev_storage + 2363;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/fd0", 8) == 0)
- {
-{
-return dev_storage + 86;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 9:
- switch (KR_keyword [7])
- {
- case 'z':
- switch (KR_keyword [8])
- {
- case '9':
- if (strncmp (KR_keyword, "/dev/sdz9", 9) == 0)
- {
-{
-return dev_storage + 724;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '8':
- if (strncmp (KR_keyword, "/dev/sdz8", 9) == 0)
- {
-{
-return dev_storage + 723;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '7':
- if (strncmp (KR_keyword, "/dev/sdz7", 9) == 0)
- {
-{
-return dev_storage + 722;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, "/dev/sdz6", 9) == 0)
- {
-{
-return dev_storage + 721;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, "/dev/sdz5", 9) == 0)
- {
-{
-return dev_storage + 720;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/sdz4", 9) == 0)
- {
-{
-return dev_storage + 719;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/sdz3", 9) == 0)
- {
-{
-return dev_storage + 718;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/sdz2", 9) == 0)
- {
-{
-return dev_storage + 717;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/sdz1", 9) == 0)
- {
-{
-return dev_storage + 716;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'y':
- switch (KR_keyword [8])
- {
- case '9':
- switch (KR_keyword [5])
- {
- case 's':
- if (strncmp (KR_keyword, "/dev/sdy9", 9) == 0)
- {
-{
-return dev_storage + 709;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/pty9", 9) == 0)
- {
-{
-return dev_storage + 243;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '8':
- switch (KR_keyword [5])
- {
- case 's':
- if (strncmp (KR_keyword, "/dev/sdy8", 9) == 0)
- {
-{
-return dev_storage + 708;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/pty8", 9) == 0)
- {
-{
-return dev_storage + 242;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '7':
- switch (KR_keyword [5])
- {
- case 's':
- if (strncmp (KR_keyword, "/dev/sdy7", 9) == 0)
- {
-{
-return dev_storage + 707;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/pty7", 9) == 0)
- {
-{
-return dev_storage + 241;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '6':
- switch (KR_keyword [5])
- {
- case 's':
- if (strncmp (KR_keyword, "/dev/sdy6", 9) == 0)
- {
-{
-return dev_storage + 706;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/pty6", 9) == 0)
- {
-{
-return dev_storage + 240;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '5':
- switch (KR_keyword [5])
- {
- case 's':
- if (strncmp (KR_keyword, "/dev/sdy5", 9) == 0)
- {
-{
-return dev_storage + 705;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/pty5", 9) == 0)
- {
-{
-return dev_storage + 239;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '4':
- switch (KR_keyword [5])
- {
- case 's':
- if (strncmp (KR_keyword, "/dev/sdy4", 9) == 0)
- {
-{
-return dev_storage + 704;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/pty4", 9) == 0)
- {
-{
-return dev_storage + 238;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '3':
- switch (KR_keyword [5])
- {
- case 's':
- if (strncmp (KR_keyword, "/dev/sdy3", 9) == 0)
- {
-{
-return dev_storage + 703;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/pty3", 9) == 0)
- {
-{
-return dev_storage + 237;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '2':
- switch (KR_keyword [5])
- {
- case 's':
- if (strncmp (KR_keyword, "/dev/sdy2", 9) == 0)
- {
-{
-return dev_storage + 702;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/pty2", 9) == 0)
- {
-{
-return dev_storage + 236;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '1':
- switch (KR_keyword [5])
- {
- case 's':
- if (strncmp (KR_keyword, "/dev/sdy1", 9) == 0)
- {
-{
-return dev_storage + 701;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/pty1", 9) == 0)
- {
-{
-return dev_storage + 235;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '0':
- if (strncmp (KR_keyword, "/dev/pty0", 9) == 0)
- {
-{
-return dev_storage + 234;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'x':
- switch (KR_keyword [8])
- {
- case '9':
- if (strncmp (KR_keyword, "/dev/sdx9", 9) == 0)
- {
-{
-return dev_storage + 694;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '8':
- if (strncmp (KR_keyword, "/dev/sdx8", 9) == 0)
- {
-{
-return dev_storage + 693;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '7':
- if (strncmp (KR_keyword, "/dev/sdx7", 9) == 0)
- {
-{
-return dev_storage + 692;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, "/dev/sdx6", 9) == 0)
- {
-{
-return dev_storage + 691;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, "/dev/sdx5", 9) == 0)
- {
-{
-return dev_storage + 690;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/sdx4", 9) == 0)
- {
-{
-return dev_storage + 689;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/sdx3", 9) == 0)
- {
-{
-return dev_storage + 688;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/sdx2", 9) == 0)
- {
-{
-return dev_storage + 687;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/sdx1", 9) == 0)
- {
-{
-return dev_storage + 686;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'w':
- switch (KR_keyword [8])
- {
- case '9':
- if (strncmp (KR_keyword, "/dev/sdw9", 9) == 0)
- {
-{
-return dev_storage + 679;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '8':
- if (strncmp (KR_keyword, "/dev/sdw8", 9) == 0)
- {
-{
-return dev_storage + 678;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '7':
- if (strncmp (KR_keyword, "/dev/sdw7", 9) == 0)
- {
-{
-return dev_storage + 677;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, "/dev/sdw6", 9) == 0)
- {
-{
-return dev_storage + 676;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, "/dev/sdw5", 9) == 0)
- {
-{
-return dev_storage + 675;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/sdw4", 9) == 0)
- {
-{
-return dev_storage + 674;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/sdw3", 9) == 0)
- {
-{
-return dev_storage + 673;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/sdw2", 9) == 0)
- {
-{
-return dev_storage + 672;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/sdw1", 9) == 0)
- {
-{
-return dev_storage + 671;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'v':
- switch (KR_keyword [8])
- {
- case '9':
- if (strncmp (KR_keyword, "/dev/sdv9", 9) == 0)
- {
-{
-return dev_storage + 664;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '8':
- if (strncmp (KR_keyword, "/dev/sdv8", 9) == 0)
- {
-{
-return dev_storage + 663;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '7':
- if (strncmp (KR_keyword, "/dev/sdv7", 9) == 0)
- {
-{
-return dev_storage + 662;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, "/dev/sdv6", 9) == 0)
- {
-{
-return dev_storage + 661;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, "/dev/sdv5", 9) == 0)
- {
-{
-return dev_storage + 660;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/sdv4", 9) == 0)
- {
-{
-return dev_storage + 659;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/sdv3", 9) == 0)
- {
-{
-return dev_storage + 658;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/sdv2", 9) == 0)
- {
-{
-return dev_storage + 657;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/sdv1", 9) == 0)
- {
-{
-return dev_storage + 656;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'u':
- switch (KR_keyword [8])
- {
- case '9':
- if (strncmp (KR_keyword, "/dev/sdu9", 9) == 0)
- {
-{
-return dev_storage + 649;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '8':
- if (strncmp (KR_keyword, "/dev/sdu8", 9) == 0)
- {
-{
-return dev_storage + 648;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '7':
- if (strncmp (KR_keyword, "/dev/sdu7", 9) == 0)
- {
-{
-return dev_storage + 647;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, "/dev/sdu6", 9) == 0)
- {
-{
-return dev_storage + 646;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, "/dev/sdu5", 9) == 0)
- {
-{
-return dev_storage + 645;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/sdu4", 9) == 0)
- {
-{
-return dev_storage + 644;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/sdu3", 9) == 0)
- {
-{
-return dev_storage + 643;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/sdu2", 9) == 0)
- {
-{
-return dev_storage + 642;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/sdu1", 9) == 0)
- {
-{
-return dev_storage + 641;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 't':
- switch (KR_keyword [8])
- {
- case '9':
- switch (KR_keyword [5])
- {
- case 's':
- if (strncmp (KR_keyword, "/dev/sdt9", 9) == 0)
- {
-{
-return dev_storage + 634;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/nst9", 9) == 0)
- {
-{
-return dev_storage + 113;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '8':
- switch (KR_keyword [5])
- {
- case 's':
- if (strncmp (KR_keyword, "/dev/sdt8", 9) == 0)
- {
-{
-return dev_storage + 633;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/nst8", 9) == 0)
- {
-{
-return dev_storage + 112;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '7':
- switch (KR_keyword [5])
- {
- case 's':
- if (strncmp (KR_keyword, "/dev/sdt7", 9) == 0)
- {
-{
-return dev_storage + 632;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/nst7", 9) == 0)
- {
-{
-return dev_storage + 111;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '6':
- switch (KR_keyword [5])
- {
- case 's':
- if (strncmp (KR_keyword, "/dev/sdt6", 9) == 0)
- {
-{
-return dev_storage + 631;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/nst6", 9) == 0)
- {
-{
-return dev_storage + 110;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '5':
- switch (KR_keyword [5])
- {
- case 's':
- if (strncmp (KR_keyword, "/dev/sdt5", 9) == 0)
- {
-{
-return dev_storage + 630;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/nst5", 9) == 0)
- {
-{
-return dev_storage + 109;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '4':
- switch (KR_keyword [5])
- {
- case 's':
- if (strncmp (KR_keyword, "/dev/sdt4", 9) == 0)
- {
-{
-return dev_storage + 629;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/nst4", 9) == 0)
- {
-{
-return dev_storage + 108;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '3':
- switch (KR_keyword [5])
- {
- case 's':
- if (strncmp (KR_keyword, "/dev/sdt3", 9) == 0)
- {
-{
-return dev_storage + 628;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/nst3", 9) == 0)
- {
-{
-return dev_storage + 107;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '2':
- switch (KR_keyword [5])
- {
- case 's':
- if (strncmp (KR_keyword, "/dev/sdt2", 9) == 0)
- {
-{
-return dev_storage + 627;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/nst2", 9) == 0)
- {
-{
-return dev_storage + 106;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '1':
- switch (KR_keyword [5])
- {
- case 's':
- if (strncmp (KR_keyword, "/dev/sdt1", 9) == 0)
- {
-{
-return dev_storage + 626;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/nst1", 9) == 0)
- {
-{
-return dev_storage + 105;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '0':
- if (strncmp (KR_keyword, "/dev/nst0", 9) == 0)
- {
-{
-return dev_storage + 104;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 's':
- switch (KR_keyword [8])
- {
- case 'g':
- if (strncmp (KR_keyword, "/dev/kmsg", 9) == 0)
- {
-{
-return dev_storage + 103;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '9':
- if (strncmp (KR_keyword, "/dev/sds9", 9) == 0)
- {
-{
-return dev_storage + 619;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '8':
- if (strncmp (KR_keyword, "/dev/sds8", 9) == 0)
- {
-{
-return dev_storage + 618;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '7':
- if (strncmp (KR_keyword, "/dev/sds7", 9) == 0)
- {
-{
-return dev_storage + 617;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, "/dev/sds6", 9) == 0)
- {
-{
-return dev_storage + 616;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, "/dev/sds5", 9) == 0)
- {
-{
-return dev_storage + 615;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/sds4", 9) == 0)
- {
-{
-return dev_storage + 614;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/sds3", 9) == 0)
- {
-{
-return dev_storage + 613;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/sds2", 9) == 0)
- {
-{
-return dev_storage + 612;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/sds1", 9) == 0)
- {
-{
-return dev_storage + 611;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'r':
- switch (KR_keyword [8])
- {
- case 'o':
- if (strncmp (KR_keyword, "/dev/zero", 9) == 0)
- {
-{
-return dev_storage + 2574;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '9':
- if (strncmp (KR_keyword, "/dev/sdr9", 9) == 0)
- {
-{
-return dev_storage + 604;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '8':
- if (strncmp (KR_keyword, "/dev/sdr8", 9) == 0)
- {
-{
-return dev_storage + 603;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '7':
- if (strncmp (KR_keyword, "/dev/sdr7", 9) == 0)
- {
-{
-return dev_storage + 602;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, "/dev/sdr6", 9) == 0)
- {
-{
-return dev_storage + 601;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, "/dev/sdr5", 9) == 0)
- {
-{
-return dev_storage + 600;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/sdr4", 9) == 0)
- {
-{
-return dev_storage + 599;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/sdr3", 9) == 0)
- {
-{
-return dev_storage + 598;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/sdr2", 9) == 0)
- {
-{
-return dev_storage + 597;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/sdr1", 9) == 0)
- {
-{
-return dev_storage + 596;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'q':
- switch (KR_keyword [8])
- {
- case '9':
- if (strncmp (KR_keyword, "/dev/sdq9", 9) == 0)
- {
-{
-return dev_storage + 589;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '8':
- if (strncmp (KR_keyword, "/dev/sdq8", 9) == 0)
- {
-{
-return dev_storage + 588;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '7':
- if (strncmp (KR_keyword, "/dev/sdq7", 9) == 0)
- {
-{
-return dev_storage + 587;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, "/dev/sdq6", 9) == 0)
- {
-{
-return dev_storage + 586;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, "/dev/sdq5", 9) == 0)
- {
-{
-return dev_storage + 585;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/sdq4", 9) == 0)
- {
-{
-return dev_storage + 584;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/sdq3", 9) == 0)
- {
-{
-return dev_storage + 583;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/sdq2", 9) == 0)
- {
-{
-return dev_storage + 582;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/sdq1", 9) == 0)
- {
-{
-return dev_storage + 581;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'p':
- switch (KR_keyword [8])
- {
- case '9':
- if (strncmp (KR_keyword, "/dev/sdp9", 9) == 0)
- {
-{
-return dev_storage + 574;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '8':
- if (strncmp (KR_keyword, "/dev/sdp8", 9) == 0)
- {
-{
-return dev_storage + 573;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '7':
- if (strncmp (KR_keyword, "/dev/sdp7", 9) == 0)
- {
-{
-return dev_storage + 572;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, "/dev/sdp6", 9) == 0)
- {
-{
-return dev_storage + 571;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, "/dev/sdp5", 9) == 0)
- {
-{
-return dev_storage + 570;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/sdp4", 9) == 0)
- {
-{
-return dev_storage + 569;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/sdp3", 9) == 0)
- {
-{
-return dev_storage + 568;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/sdp2", 9) == 0)
- {
-{
-return dev_storage + 567;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/sdp1", 9) == 0)
- {
-{
-return dev_storage + 566;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'o':
- switch (KR_keyword [8])
- {
- case '9':
- if (strncmp (KR_keyword, "/dev/sdo9", 9) == 0)
- {
-{
-return dev_storage + 559;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '8':
- if (strncmp (KR_keyword, "/dev/sdo8", 9) == 0)
- {
-{
-return dev_storage + 558;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '7':
- if (strncmp (KR_keyword, "/dev/sdo7", 9) == 0)
- {
-{
-return dev_storage + 557;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, "/dev/sdo6", 9) == 0)
- {
-{
-return dev_storage + 556;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, "/dev/sdo5", 9) == 0)
- {
-{
-return dev_storage + 555;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/sdo4", 9) == 0)
- {
-{
-return dev_storage + 554;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/sdo3", 9) == 0)
- {
-{
-return dev_storage + 553;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/sdo2", 9) == 0)
- {
-{
-return dev_storage + 552;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/sdo1", 9) == 0)
- {
-{
-return dev_storage + 551;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'n':
- switch (KR_keyword [8])
- {
- case '9':
- if (strncmp (KR_keyword, "/dev/sdn9", 9) == 0)
- {
-{
-return dev_storage + 544;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '8':
- if (strncmp (KR_keyword, "/dev/sdn8", 9) == 0)
- {
-{
-return dev_storage + 543;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '7':
- if (strncmp (KR_keyword, "/dev/sdn7", 9) == 0)
- {
-{
-return dev_storage + 542;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, "/dev/sdn6", 9) == 0)
- {
-{
-return dev_storage + 541;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, "/dev/sdn5", 9) == 0)
- {
-{
-return dev_storage + 540;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/sdn4", 9) == 0)
- {
-{
-return dev_storage + 539;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/sdn3", 9) == 0)
- {
-{
-return dev_storage + 538;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/sdn2", 9) == 0)
- {
-{
-return dev_storage + 537;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/sdn1", 9) == 0)
- {
-{
-return dev_storage + 536;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'm':
- switch (KR_keyword [5])
- {
- case 's':
- switch (KR_keyword [8])
- {
- case '9':
- if (strncmp (KR_keyword, "/dev/sdm9", 9) == 0)
- {
-{
-return dev_storage + 529;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '8':
- if (strncmp (KR_keyword, "/dev/sdm8", 9) == 0)
- {
-{
-return dev_storage + 528;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '7':
- if (strncmp (KR_keyword, "/dev/sdm7", 9) == 0)
- {
-{
-return dev_storage + 527;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, "/dev/sdm6", 9) == 0)
- {
-{
-return dev_storage + 526;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, "/dev/sdm5", 9) == 0)
- {
-{
-return dev_storage + 525;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/sdm4", 9) == 0)
- {
-{
-return dev_storage + 524;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/sdm3", 9) == 0)
- {
-{
-return dev_storage + 523;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/sdm2", 9) == 0)
- {
-{
-return dev_storage + 522;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/sdm1", 9) == 0)
- {
-{
-return dev_storage + 521;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/ptmx", 9) == 0)
- {
-{
-return dev_storage + 233;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- switch (KR_keyword [8])
- {
- case '9':
- if (strncmp (KR_keyword, "/dev/com9", 9) == 0)
- {
-{
-return dev_storage + 10;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '8':
- if (strncmp (KR_keyword, "/dev/com8", 9) == 0)
- {
-{
-return dev_storage + 9;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '7':
- if (strncmp (KR_keyword, "/dev/com7", 9) == 0)
- {
-{
-return dev_storage + 8;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, "/dev/com6", 9) == 0)
- {
-{
-return dev_storage + 7;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, "/dev/com5", 9) == 0)
- {
-{
-return dev_storage + 6;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/com4", 9) == 0)
- {
-{
-return dev_storage + 5;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/com3", 9) == 0)
- {
-{
-return dev_storage + 4;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/com2", 9) == 0)
- {
-{
-return dev_storage + 3;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/com1", 9) == 0)
- {
-{
-return dev_storage + 2;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'l':
- switch (KR_keyword [8])
- {
- case 'l':
- switch (KR_keyword [5])
- {
- case 'n':
- if (strncmp (KR_keyword, "/dev/null", 9) == 0)
- {
-{
-return dev_storage + 232;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/full", 9) == 0)
- {
-{
-return dev_storage + 102;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '9':
- if (strncmp (KR_keyword, "/dev/sdl9", 9) == 0)
- {
-{
-return dev_storage + 514;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '8':
- if (strncmp (KR_keyword, "/dev/sdl8", 9) == 0)
- {
-{
-return dev_storage + 513;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '7':
- if (strncmp (KR_keyword, "/dev/sdl7", 9) == 0)
- {
-{
-return dev_storage + 512;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, "/dev/sdl6", 9) == 0)
- {
-{
-return dev_storage + 511;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, "/dev/sdl5", 9) == 0)
- {
-{
-return dev_storage + 510;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/sdl4", 9) == 0)
- {
-{
-return dev_storage + 509;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/sdl3", 9) == 0)
- {
-{
-return dev_storage + 508;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/sdl2", 9) == 0)
- {
-{
-return dev_storage + 507;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/sdl1", 9) == 0)
- {
-{
-return dev_storage + 506;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'k':
- switch (KR_keyword [8])
- {
- case '9':
- if (strncmp (KR_keyword, "/dev/sdk9", 9) == 0)
- {
-{
-return dev_storage + 499;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '8':
- if (strncmp (KR_keyword, "/dev/sdk8", 9) == 0)
- {
-{
-return dev_storage + 498;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '7':
- if (strncmp (KR_keyword, "/dev/sdk7", 9) == 0)
- {
-{
-return dev_storage + 497;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, "/dev/sdk6", 9) == 0)
- {
-{
-return dev_storage + 496;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, "/dev/sdk5", 9) == 0)
- {
-{
-return dev_storage + 495;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/sdk4", 9) == 0)
- {
-{
-return dev_storage + 494;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/sdk3", 9) == 0)
- {
-{
-return dev_storage + 493;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/sdk2", 9) == 0)
- {
-{
-return dev_storage + 492;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/sdk1", 9) == 0)
- {
-{
-return dev_storage + 491;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'j':
- switch (KR_keyword [8])
- {
- case '9':
- if (strncmp (KR_keyword, "/dev/sdj9", 9) == 0)
- {
-{
-return dev_storage + 484;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '8':
- if (strncmp (KR_keyword, "/dev/sdj8", 9) == 0)
- {
-{
-return dev_storage + 483;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '7':
- if (strncmp (KR_keyword, "/dev/sdj7", 9) == 0)
- {
-{
-return dev_storage + 482;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, "/dev/sdj6", 9) == 0)
- {
-{
-return dev_storage + 481;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, "/dev/sdj5", 9) == 0)
- {
-{
-return dev_storage + 480;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/sdj4", 9) == 0)
- {
-{
-return dev_storage + 479;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/sdj3", 9) == 0)
- {
-{
-return dev_storage + 478;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/sdj2", 9) == 0)
- {
-{
-return dev_storage + 477;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/sdj1", 9) == 0)
- {
-{
-return dev_storage + 476;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'i':
- switch (KR_keyword [8])
- {
- case '9':
- if (strncmp (KR_keyword, "/dev/sdi9", 9) == 0)
- {
-{
-return dev_storage + 469;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '8':
- if (strncmp (KR_keyword, "/dev/sdi8", 9) == 0)
- {
-{
-return dev_storage + 468;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '7':
- if (strncmp (KR_keyword, "/dev/sdi7", 9) == 0)
- {
-{
-return dev_storage + 467;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, "/dev/sdi6", 9) == 0)
- {
-{
-return dev_storage + 466;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, "/dev/sdi5", 9) == 0)
- {
-{
-return dev_storage + 465;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/sdi4", 9) == 0)
- {
-{
-return dev_storage + 464;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/sdi3", 9) == 0)
- {
-{
-return dev_storage + 463;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/sdi2", 9) == 0)
- {
-{
-return dev_storage + 462;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/sdi1", 9) == 0)
- {
-{
-return dev_storage + 461;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'h':
- switch (KR_keyword [8])
- {
- case '9':
- if (strncmp (KR_keyword, "/dev/sdh9", 9) == 0)
- {
-{
-return dev_storage + 454;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '8':
- if (strncmp (KR_keyword, "/dev/sdh8", 9) == 0)
- {
-{
-return dev_storage + 453;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '7':
- if (strncmp (KR_keyword, "/dev/sdh7", 9) == 0)
- {
-{
-return dev_storage + 452;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, "/dev/sdh6", 9) == 0)
- {
-{
-return dev_storage + 451;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, "/dev/sdh5", 9) == 0)
- {
-{
-return dev_storage + 450;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/sdh4", 9) == 0)
- {
-{
-return dev_storage + 449;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/sdh3", 9) == 0)
- {
-{
-return dev_storage + 448;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/sdh2", 9) == 0)
- {
-{
-return dev_storage + 447;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/sdh1", 9) == 0)
- {
-{
-return dev_storage + 446;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'g':
- switch (KR_keyword [8])
- {
- case '9':
- if (strncmp (KR_keyword, "/dev/sdg9", 9) == 0)
- {
-{
-return dev_storage + 439;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '8':
- if (strncmp (KR_keyword, "/dev/sdg8", 9) == 0)
- {
-{
-return dev_storage + 438;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '7':
- if (strncmp (KR_keyword, "/dev/sdg7", 9) == 0)
- {
-{
-return dev_storage + 437;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, "/dev/sdg6", 9) == 0)
- {
-{
-return dev_storage + 436;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, "/dev/sdg5", 9) == 0)
- {
-{
-return dev_storage + 435;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/sdg4", 9) == 0)
- {
-{
-return dev_storage + 434;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/sdg3", 9) == 0)
- {
-{
-return dev_storage + 433;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/sdg2", 9) == 0)
- {
-{
-return dev_storage + 432;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/sdg1", 9) == 0)
- {
-{
-return dev_storage + 431;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'f':
- switch (KR_keyword [8])
- {
- case '9':
- if (strncmp (KR_keyword, "/dev/sdf9", 9) == 0)
- {
-{
-return dev_storage + 424;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '8':
- if (strncmp (KR_keyword, "/dev/sdf8", 9) == 0)
- {
-{
-return dev_storage + 423;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '7':
- if (strncmp (KR_keyword, "/dev/sdf7", 9) == 0)
- {
-{
-return dev_storage + 422;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, "/dev/sdf6", 9) == 0)
- {
-{
-return dev_storage + 421;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, "/dev/sdf5", 9) == 0)
- {
-{
-return dev_storage + 420;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/sdf4", 9) == 0)
- {
-{
-return dev_storage + 419;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/sdf3", 9) == 0)
- {
-{
-return dev_storage + 418;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/sdf2", 9) == 0)
- {
-{
-return dev_storage + 417;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/sdf1", 9) == 0)
- {
-{
-return dev_storage + 416;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'e':
- switch (KR_keyword [8])
- {
- case '9':
- if (strncmp (KR_keyword, "/dev/sde9", 9) == 0)
- {
-{
-return dev_storage + 409;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '8':
- if (strncmp (KR_keyword, "/dev/sde8", 9) == 0)
- {
-{
-return dev_storage + 408;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '7':
- if (strncmp (KR_keyword, "/dev/sde7", 9) == 0)
- {
-{
-return dev_storage + 407;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, "/dev/sde6", 9) == 0)
- {
-{
-return dev_storage + 406;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, "/dev/sde5", 9) == 0)
- {
-{
-return dev_storage + 405;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/sde4", 9) == 0)
- {
-{
-return dev_storage + 404;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/sde3", 9) == 0)
- {
-{
-return dev_storage + 403;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/sde2", 9) == 0)
- {
-{
-return dev_storage + 402;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/sde1", 9) == 0)
- {
-{
-return dev_storage + 401;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'd':
- switch (KR_keyword [8])
- {
- case 'x':
- if (strncmp (KR_keyword, "/dev/sddx", 9) == 0)
- {
-{
-return dev_storage + 2002;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sddw", 9) == 0)
- {
-{
-return dev_storage + 2001;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sddv", 9) == 0)
- {
-{
-return dev_storage + 2000;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sddu", 9) == 0)
- {
-{
-return dev_storage + 1999;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- if (strncmp (KR_keyword, "/dev/sddt", 9) == 0)
- {
-{
-return dev_storage + 1998;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sdds", 9) == 0)
- {
-{
-return dev_storage + 1997;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sddr", 9) == 0)
- {
-{
-return dev_storage + 1996;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sddq", 9) == 0)
- {
-{
-return dev_storage + 1995;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sddp", 9) == 0)
- {
-{
-return dev_storage + 1994;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sddo", 9) == 0)
- {
-{
-return dev_storage + 1993;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/sddn", 9) == 0)
- {
-{
-return dev_storage + 1992;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'm':
- if (strncmp (KR_keyword, "/dev/sddm", 9) == 0)
- {
-{
-return dev_storage + 1991;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sddl", 9) == 0)
- {
-{
-return dev_storage + 1990;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sddk", 9) == 0)
- {
-{
-return dev_storage + 1989;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sddj", 9) == 0)
- {
-{
-return dev_storage + 1988;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sddi", 9) == 0)
- {
-{
-return dev_storage + 1987;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sddh", 9) == 0)
- {
-{
-return dev_storage + 1986;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sddg", 9) == 0)
- {
-{
-return dev_storage + 1985;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sddf", 9) == 0)
- {
-{
-return dev_storage + 1984;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sdde", 9) == 0)
- {
-{
-return dev_storage + 1983;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddd", 9) == 0)
- {
-{
-return dev_storage + 1982;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sddc", 9) == 0)
- {
-{
-return dev_storage + 1981;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sddb", 9) == 0)
- {
-{
-return dev_storage + 1980;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdda", 9) == 0)
- {
-{
-return dev_storage + 1979;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '9':
- switch (KR_keyword [6])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdd9", 9) == 0)
- {
-{
-return dev_storage + 394;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/scd9", 9) == 0)
- {
-{
-return dev_storage + 308;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '8':
- switch (KR_keyword [6])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdd8", 9) == 0)
- {
-{
-return dev_storage + 393;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/scd8", 9) == 0)
- {
-{
-return dev_storage + 307;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '7':
- switch (KR_keyword [6])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdd7", 9) == 0)
- {
-{
-return dev_storage + 392;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/scd7", 9) == 0)
- {
-{
-return dev_storage + 306;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '6':
- switch (KR_keyword [6])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdd6", 9) == 0)
- {
-{
-return dev_storage + 391;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/scd6", 9) == 0)
- {
-{
-return dev_storage + 305;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '5':
- switch (KR_keyword [6])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdd5", 9) == 0)
- {
-{
-return dev_storage + 390;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/scd5", 9) == 0)
- {
-{
-return dev_storage + 304;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '4':
- switch (KR_keyword [6])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdd4", 9) == 0)
- {
-{
-return dev_storage + 389;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/scd4", 9) == 0)
- {
-{
-return dev_storage + 303;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '3':
- switch (KR_keyword [6])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdd3", 9) == 0)
- {
-{
-return dev_storage + 388;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/scd3", 9) == 0)
- {
-{
-return dev_storage + 302;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '2':
- switch (KR_keyword [6])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdd2", 9) == 0)
- {
-{
-return dev_storage + 387;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/scd2", 9) == 0)
- {
-{
-return dev_storage + 301;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '1':
- switch (KR_keyword [6])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdd1", 9) == 0)
- {
-{
-return dev_storage + 386;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/scd1", 9) == 0)
- {
-{
-return dev_storage + 300;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '0':
- if (strncmp (KR_keyword, "/dev/scd0", 9) == 0)
- {
-{
-return dev_storage + 299;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'c':
- switch (KR_keyword [8])
- {
- case 'z':
- if (strncmp (KR_keyword, "/dev/sdcz", 9) == 0)
- {
-{
-return dev_storage + 1588;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'y':
- if (strncmp (KR_keyword, "/dev/sdcy", 9) == 0)
- {
-{
-return dev_storage + 1587;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'x':
- if (strncmp (KR_keyword, "/dev/sdcx", 9) == 0)
- {
-{
-return dev_storage + 1586;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sdcw", 9) == 0)
- {
-{
-return dev_storage + 1585;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sdcv", 9) == 0)
- {
-{
-return dev_storage + 1584;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sdcu", 9) == 0)
- {
-{
-return dev_storage + 1583;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- if (strncmp (KR_keyword, "/dev/sdct", 9) == 0)
- {
-{
-return dev_storage + 1582;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sdcs", 9) == 0)
- {
-{
-return dev_storage + 1581;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sdcr", 9) == 0)
- {
-{
-return dev_storage + 1580;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sdcq", 9) == 0)
- {
-{
-return dev_storage + 1579;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sdcp", 9) == 0)
- {
-{
-return dev_storage + 1578;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sdco", 9) == 0)
- {
-{
-return dev_storage + 1577;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/sdcn", 9) == 0)
- {
-{
-return dev_storage + 1576;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'm':
- if (strncmp (KR_keyword, "/dev/sdcm", 9) == 0)
- {
-{
-return dev_storage + 1575;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sdcl", 9) == 0)
- {
-{
-return dev_storage + 1574;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sdck", 9) == 0)
- {
-{
-return dev_storage + 1573;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sdcj", 9) == 0)
- {
-{
-return dev_storage + 1572;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sdci", 9) == 0)
- {
-{
-return dev_storage + 1571;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sdch", 9) == 0)
- {
-{
-return dev_storage + 1570;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sdcg", 9) == 0)
- {
-{
-return dev_storage + 1569;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sdcf", 9) == 0)
- {
-{
-return dev_storage + 1568;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sdce", 9) == 0)
- {
-{
-return dev_storage + 1567;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdcd", 9) == 0)
- {
-{
-return dev_storage + 1566;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcc", 9) == 0)
- {
-{
-return dev_storage + 1565;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdcb", 9) == 0)
- {
-{
-return dev_storage + 1564;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdca", 9) == 0)
- {
-{
-return dev_storage + 1563;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '9':
- if (strncmp (KR_keyword, "/dev/sdc9", 9) == 0)
- {
-{
-return dev_storage + 379;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '8':
- if (strncmp (KR_keyword, "/dev/sdc8", 9) == 0)
- {
-{
-return dev_storage + 378;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '7':
- if (strncmp (KR_keyword, "/dev/sdc7", 9) == 0)
- {
-{
-return dev_storage + 377;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, "/dev/sdc6", 9) == 0)
- {
-{
-return dev_storage + 376;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, "/dev/sdc5", 9) == 0)
- {
-{
-return dev_storage + 375;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/sdc4", 9) == 0)
- {
-{
-return dev_storage + 374;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/sdc3", 9) == 0)
- {
-{
-return dev_storage + 373;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/sdc2", 9) == 0)
- {
-{
-return dev_storage + 372;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/sdc1", 9) == 0)
- {
-{
-return dev_storage + 371;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'b':
- switch (KR_keyword [8])
- {
- case 'z':
- if (strncmp (KR_keyword, "/dev/sdbz", 9) == 0)
- {
-{
-return dev_storage + 1172;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'y':
- if (strncmp (KR_keyword, "/dev/sdby", 9) == 0)
- {
-{
-return dev_storage + 1171;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'x':
- if (strncmp (KR_keyword, "/dev/sdbx", 9) == 0)
- {
-{
-return dev_storage + 1170;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sdbw", 9) == 0)
- {
-{
-return dev_storage + 1169;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sdbv", 9) == 0)
- {
-{
-return dev_storage + 1168;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sdbu", 9) == 0)
- {
-{
-return dev_storage + 1167;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- if (strncmp (KR_keyword, "/dev/sdbt", 9) == 0)
- {
-{
-return dev_storage + 1166;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sdbs", 9) == 0)
- {
-{
-return dev_storage + 1165;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sdbr", 9) == 0)
- {
-{
-return dev_storage + 1164;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sdbq", 9) == 0)
- {
-{
-return dev_storage + 1163;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sdbp", 9) == 0)
- {
-{
-return dev_storage + 1162;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sdbo", 9) == 0)
- {
-{
-return dev_storage + 1161;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/sdbn", 9) == 0)
- {
-{
-return dev_storage + 1160;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'm':
- if (strncmp (KR_keyword, "/dev/sdbm", 9) == 0)
- {
-{
-return dev_storage + 1159;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sdbl", 9) == 0)
- {
-{
-return dev_storage + 1158;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sdbk", 9) == 0)
- {
-{
-return dev_storage + 1157;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sdbj", 9) == 0)
- {
-{
-return dev_storage + 1156;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sdbi", 9) == 0)
- {
-{
-return dev_storage + 1155;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sdbh", 9) == 0)
- {
-{
-return dev_storage + 1154;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sdbg", 9) == 0)
- {
-{
-return dev_storage + 1153;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sdbf", 9) == 0)
- {
-{
-return dev_storage + 1152;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sdbe", 9) == 0)
- {
-{
-return dev_storage + 1151;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdbd", 9) == 0)
- {
-{
-return dev_storage + 1150;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdbc", 9) == 0)
- {
-{
-return dev_storage + 1149;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbb", 9) == 0)
- {
-{
-return dev_storage + 1148;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdba", 9) == 0)
- {
-{
-return dev_storage + 1147;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '9':
- if (strncmp (KR_keyword, "/dev/sdb9", 9) == 0)
- {
-{
-return dev_storage + 364;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '8':
- if (strncmp (KR_keyword, "/dev/sdb8", 9) == 0)
- {
-{
-return dev_storage + 363;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '7':
- if (strncmp (KR_keyword, "/dev/sdb7", 9) == 0)
- {
-{
-return dev_storage + 362;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, "/dev/sdb6", 9) == 0)
- {
-{
-return dev_storage + 361;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, "/dev/sdb5", 9) == 0)
- {
-{
-return dev_storage + 360;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/sdb4", 9) == 0)
- {
-{
-return dev_storage + 359;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/sdb3", 9) == 0)
- {
-{
-return dev_storage + 358;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/sdb2", 9) == 0)
- {
-{
-return dev_storage + 357;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/sdb1", 9) == 0)
- {
-{
-return dev_storage + 356;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'a':
- switch (KR_keyword [8])
- {
- case 'z':
- if (strncmp (KR_keyword, "/dev/sdaz", 9) == 0)
- {
-{
-return dev_storage + 756;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'y':
- if (strncmp (KR_keyword, "/dev/sday", 9) == 0)
- {
-{
-return dev_storage + 755;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'x':
- if (strncmp (KR_keyword, "/dev/sdax", 9) == 0)
- {
-{
-return dev_storage + 754;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sdaw", 9) == 0)
- {
-{
-return dev_storage + 753;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sdav", 9) == 0)
- {
-{
-return dev_storage + 752;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sdau", 9) == 0)
- {
-{
-return dev_storage + 751;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- if (strncmp (KR_keyword, "/dev/sdat", 9) == 0)
- {
-{
-return dev_storage + 750;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sdas", 9) == 0)
- {
-{
-return dev_storage + 749;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sdar", 9) == 0)
- {
-{
-return dev_storage + 748;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sdaq", 9) == 0)
- {
-{
-return dev_storage + 747;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sdap", 9) == 0)
- {
-{
-return dev_storage + 746;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sdao", 9) == 0)
- {
-{
-return dev_storage + 745;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/sdan", 9) == 0)
- {
-{
-return dev_storage + 744;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'm':
- if (strncmp (KR_keyword, "/dev/sdam", 9) == 0)
- {
-{
-return dev_storage + 743;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sdal", 9) == 0)
- {
-{
-return dev_storage + 742;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sdak", 9) == 0)
- {
-{
-return dev_storage + 741;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sdaj", 9) == 0)
- {
-{
-return dev_storage + 740;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sdai", 9) == 0)
- {
-{
-return dev_storage + 739;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sdah", 9) == 0)
- {
-{
-return dev_storage + 738;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sdag", 9) == 0)
- {
-{
-return dev_storage + 737;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sdaf", 9) == 0)
- {
-{
-return dev_storage + 736;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sdae", 9) == 0)
- {
-{
-return dev_storage + 735;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdad", 9) == 0)
- {
-{
-return dev_storage + 734;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdac", 9) == 0)
- {
-{
-return dev_storage + 733;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdab", 9) == 0)
- {
-{
-return dev_storage + 732;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdaa", 9) == 0)
- {
-{
-return dev_storage + 731;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '9':
- if (strncmp (KR_keyword, "/dev/sda9", 9) == 0)
- {
-{
-return dev_storage + 349;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '8':
- if (strncmp (KR_keyword, "/dev/sda8", 9) == 0)
- {
-{
-return dev_storage + 348;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '7':
- if (strncmp (KR_keyword, "/dev/sda7", 9) == 0)
- {
-{
-return dev_storage + 347;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, "/dev/sda6", 9) == 0)
- {
-{
-return dev_storage + 346;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, "/dev/sda5", 9) == 0)
- {
-{
-return dev_storage + 345;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/sda4", 9) == 0)
- {
-{
-return dev_storage + 344;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/sda3", 9) == 0)
- {
-{
-return dev_storage + 343;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/sda2", 9) == 0)
- {
-{
-return dev_storage + 342;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/sda1", 9) == 0)
- {
-{
-return dev_storage + 341;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '9':
- switch (KR_keyword [8])
- {
- case '9':
- if (strncmp (KR_keyword, "/dev/st99", 9) == 0)
- {
-{
-return dev_storage + 2478;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '8':
- if (strncmp (KR_keyword, "/dev/st98", 9) == 0)
- {
-{
-return dev_storage + 2477;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '7':
- if (strncmp (KR_keyword, "/dev/st97", 9) == 0)
- {
-{
-return dev_storage + 2476;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, "/dev/st96", 9) == 0)
- {
-{
-return dev_storage + 2475;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, "/dev/st95", 9) == 0)
- {
-{
-return dev_storage + 2474;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/st94", 9) == 0)
- {
-{
-return dev_storage + 2473;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/st93", 9) == 0)
- {
-{
-return dev_storage + 2472;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/st92", 9) == 0)
- {
-{
-return dev_storage + 2471;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/st91", 9) == 0)
- {
-{
-return dev_storage + 2470;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '0':
- if (strncmp (KR_keyword, "/dev/st90", 9) == 0)
- {
-{
-return dev_storage + 2469;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '8':
- switch (KR_keyword [8])
- {
- case '9':
- if (strncmp (KR_keyword, "/dev/st89", 9) == 0)
- {
-{
-return dev_storage + 2468;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '8':
- if (strncmp (KR_keyword, "/dev/st88", 9) == 0)
- {
-{
-return dev_storage + 2467;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '7':
- if (strncmp (KR_keyword, "/dev/st87", 9) == 0)
- {
-{
-return dev_storage + 2466;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, "/dev/st86", 9) == 0)
- {
-{
-return dev_storage + 2465;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, "/dev/st85", 9) == 0)
- {
-{
-return dev_storage + 2464;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/st84", 9) == 0)
- {
-{
-return dev_storage + 2463;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/st83", 9) == 0)
- {
-{
-return dev_storage + 2462;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/st82", 9) == 0)
- {
-{
-return dev_storage + 2461;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/st81", 9) == 0)
- {
-{
-return dev_storage + 2460;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '0':
- if (strncmp (KR_keyword, "/dev/st80", 9) == 0)
- {
-{
-return dev_storage + 2459;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '7':
- switch (KR_keyword [8])
- {
- case '9':
- if (strncmp (KR_keyword, "/dev/st79", 9) == 0)
- {
-{
-return dev_storage + 2458;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '8':
- if (strncmp (KR_keyword, "/dev/st78", 9) == 0)
- {
-{
-return dev_storage + 2457;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '7':
- if (strncmp (KR_keyword, "/dev/st77", 9) == 0)
- {
-{
-return dev_storage + 2456;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, "/dev/st76", 9) == 0)
- {
-{
-return dev_storage + 2455;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, "/dev/st75", 9) == 0)
- {
-{
-return dev_storage + 2454;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/st74", 9) == 0)
- {
-{
-return dev_storage + 2453;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/st73", 9) == 0)
- {
-{
-return dev_storage + 2452;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/st72", 9) == 0)
- {
-{
-return dev_storage + 2451;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/st71", 9) == 0)
- {
-{
-return dev_storage + 2450;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '0':
- if (strncmp (KR_keyword, "/dev/st70", 9) == 0)
- {
-{
-return dev_storage + 2449;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '6':
- switch (KR_keyword [8])
- {
- case '9':
- if (strncmp (KR_keyword, "/dev/st69", 9) == 0)
- {
-{
-return dev_storage + 2448;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '8':
- if (strncmp (KR_keyword, "/dev/st68", 9) == 0)
- {
-{
-return dev_storage + 2447;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '7':
- if (strncmp (KR_keyword, "/dev/st67", 9) == 0)
- {
-{
-return dev_storage + 2446;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, "/dev/st66", 9) == 0)
- {
-{
-return dev_storage + 2445;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, "/dev/st65", 9) == 0)
- {
-{
-return dev_storage + 2444;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/st64", 9) == 0)
- {
-{
-return dev_storage + 2443;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/st63", 9) == 0)
- {
-{
-return dev_storage + 2442;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/st62", 9) == 0)
- {
-{
-return dev_storage + 2441;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/st61", 9) == 0)
- {
-{
-return dev_storage + 2440;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '0':
- if (strncmp (KR_keyword, "/dev/st60", 9) == 0)
- {
-{
-return dev_storage + 2439;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '5':
- switch (KR_keyword [8])
- {
- case '9':
- if (strncmp (KR_keyword, "/dev/st59", 9) == 0)
- {
-{
-return dev_storage + 2438;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '8':
- if (strncmp (KR_keyword, "/dev/st58", 9) == 0)
- {
-{
-return dev_storage + 2437;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '7':
- if (strncmp (KR_keyword, "/dev/st57", 9) == 0)
- {
-{
-return dev_storage + 2436;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, "/dev/st56", 9) == 0)
- {
-{
-return dev_storage + 2435;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, "/dev/st55", 9) == 0)
- {
-{
-return dev_storage + 2434;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/st54", 9) == 0)
- {
-{
-return dev_storage + 2433;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/st53", 9) == 0)
- {
-{
-return dev_storage + 2432;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/st52", 9) == 0)
- {
-{
-return dev_storage + 2431;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/st51", 9) == 0)
- {
-{
-return dev_storage + 2430;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '0':
- if (strncmp (KR_keyword, "/dev/st50", 9) == 0)
- {
-{
-return dev_storage + 2429;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '4':
- switch (KR_keyword [8])
- {
- case '9':
- if (strncmp (KR_keyword, "/dev/st49", 9) == 0)
- {
-{
-return dev_storage + 2428;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '8':
- if (strncmp (KR_keyword, "/dev/st48", 9) == 0)
- {
-{
-return dev_storage + 2427;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '7':
- if (strncmp (KR_keyword, "/dev/st47", 9) == 0)
- {
-{
-return dev_storage + 2426;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, "/dev/st46", 9) == 0)
- {
-{
-return dev_storage + 2425;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, "/dev/st45", 9) == 0)
- {
-{
-return dev_storage + 2424;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/st44", 9) == 0)
- {
-{
-return dev_storage + 2423;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/st43", 9) == 0)
- {
-{
-return dev_storage + 2422;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/st42", 9) == 0)
- {
-{
-return dev_storage + 2421;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/st41", 9) == 0)
- {
-{
-return dev_storage + 2420;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '0':
- if (strncmp (KR_keyword, "/dev/st40", 9) == 0)
- {
-{
-return dev_storage + 2419;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '3':
- switch (KR_keyword [8])
- {
- case '9':
- if (strncmp (KR_keyword, "/dev/st39", 9) == 0)
- {
-{
-return dev_storage + 2418;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '8':
- if (strncmp (KR_keyword, "/dev/st38", 9) == 0)
- {
-{
-return dev_storage + 2417;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '7':
- if (strncmp (KR_keyword, "/dev/st37", 9) == 0)
- {
-{
-return dev_storage + 2416;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, "/dev/st36", 9) == 0)
- {
-{
-return dev_storage + 2415;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, "/dev/st35", 9) == 0)
- {
-{
-return dev_storage + 2414;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/st34", 9) == 0)
- {
-{
-return dev_storage + 2413;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/st33", 9) == 0)
- {
-{
-return dev_storage + 2412;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/st32", 9) == 0)
- {
-{
-return dev_storage + 2411;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/st31", 9) == 0)
- {
-{
-return dev_storage + 2410;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '0':
- if (strncmp (KR_keyword, "/dev/st30", 9) == 0)
- {
-{
-return dev_storage + 2409;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '2':
- switch (KR_keyword [8])
- {
- case '9':
- if (strncmp (KR_keyword, "/dev/st29", 9) == 0)
- {
-{
-return dev_storage + 2408;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '8':
- if (strncmp (KR_keyword, "/dev/st28", 9) == 0)
- {
-{
-return dev_storage + 2407;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '7':
- if (strncmp (KR_keyword, "/dev/st27", 9) == 0)
- {
-{
-return dev_storage + 2406;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, "/dev/st26", 9) == 0)
- {
-{
-return dev_storage + 2405;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, "/dev/st25", 9) == 0)
- {
-{
-return dev_storage + 2404;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/st24", 9) == 0)
- {
-{
-return dev_storage + 2403;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/st23", 9) == 0)
- {
-{
-return dev_storage + 2402;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/st22", 9) == 0)
- {
-{
-return dev_storage + 2401;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/st21", 9) == 0)
- {
-{
-return dev_storage + 2400;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '0':
- if (strncmp (KR_keyword, "/dev/st20", 9) == 0)
- {
-{
-return dev_storage + 2399;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '1':
- switch (KR_keyword [8])
- {
- case '9':
- if (strncmp (KR_keyword, "/dev/st19", 9) == 0)
- {
-{
-return dev_storage + 2398;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '8':
- if (strncmp (KR_keyword, "/dev/st18", 9) == 0)
- {
-{
-return dev_storage + 2397;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '7':
- if (strncmp (KR_keyword, "/dev/st17", 9) == 0)
- {
-{
-return dev_storage + 2396;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, "/dev/st16", 9) == 0)
- {
-{
-return dev_storage + 2395;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- switch (KR_keyword [6])
- {
- case 't':
- if (strncmp (KR_keyword, "/dev/st15", 9) == 0)
- {
-{
-return dev_storage + 2394;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sr15", 9) == 0)
- {
-{
-return dev_storage + 2378;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/fd15", 9) == 0)
- {
-{
-return dev_storage + 101;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '4':
- switch (KR_keyword [6])
- {
- case 't':
- if (strncmp (KR_keyword, "/dev/st14", 9) == 0)
- {
-{
-return dev_storage + 2393;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sr14", 9) == 0)
- {
-{
-return dev_storage + 2377;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/fd14", 9) == 0)
- {
-{
-return dev_storage + 100;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '3':
- switch (KR_keyword [6])
- {
- case 't':
- if (strncmp (KR_keyword, "/dev/st13", 9) == 0)
- {
-{
-return dev_storage + 2392;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sr13", 9) == 0)
- {
-{
-return dev_storage + 2376;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/fd13", 9) == 0)
- {
-{
-return dev_storage + 99;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '2':
- switch (KR_keyword [6])
- {
- case 't':
- if (strncmp (KR_keyword, "/dev/st12", 9) == 0)
- {
-{
-return dev_storage + 2391;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sr12", 9) == 0)
- {
-{
-return dev_storage + 2375;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/fd12", 9) == 0)
- {
-{
-return dev_storage + 98;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '1':
- switch (KR_keyword [6])
- {
- case 't':
- if (strncmp (KR_keyword, "/dev/st11", 9) == 0)
- {
-{
-return dev_storage + 2390;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sr11", 9) == 0)
- {
-{
-return dev_storage + 2374;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/fd11", 9) == 0)
- {
-{
-return dev_storage + 97;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '0':
- switch (KR_keyword [6])
- {
- case 't':
- if (strncmp (KR_keyword, "/dev/st10", 9) == 0)
- {
-{
-return dev_storage + 2389;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sr10", 9) == 0)
- {
-{
-return dev_storage + 2373;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/fd10", 9) == 0)
- {
-{
-return dev_storage + 96;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 10:
- switch (KR_keyword [9])
- {
- case 'n':
- if (strncmp (KR_keyword, "/dev/conin", 10) == 0)
- {
-{
-return dev_storage + 18;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '9':
- switch (KR_keyword [8])
- {
- case 'z':
- switch (KR_keyword [7])
- {
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcz9", 10) == 0)
- {
-{
-return dev_storage + 1972;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbz9", 10) == 0)
- {
-{
-return dev_storage + 1556;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdaz9", 10) == 0)
- {
-{
-return dev_storage + 1140;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'y':
- switch (KR_keyword [7])
- {
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcy9", 10) == 0)
- {
-{
-return dev_storage + 1957;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdby9", 10) == 0)
- {
-{
-return dev_storage + 1541;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sday9", 10) == 0)
- {
-{
-return dev_storage + 1125;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'x':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddx9", 10) == 0)
- {
-{
-return dev_storage + 2356;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcx9", 10) == 0)
- {
-{
-return dev_storage + 1942;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbx9", 10) == 0)
- {
-{
-return dev_storage + 1526;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdax9", 10) == 0)
- {
-{
-return dev_storage + 1110;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'w':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddw9", 10) == 0)
- {
-{
-return dev_storage + 2341;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcw9", 10) == 0)
- {
-{
-return dev_storage + 1927;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbw9", 10) == 0)
- {
-{
-return dev_storage + 1511;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdaw9", 10) == 0)
- {
-{
-return dev_storage + 1095;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'v':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddv9", 10) == 0)
- {
-{
-return dev_storage + 2326;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcv9", 10) == 0)
- {
-{
-return dev_storage + 1912;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbv9", 10) == 0)
- {
-{
-return dev_storage + 1496;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdav9", 10) == 0)
- {
-{
-return dev_storage + 1080;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'u':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddu9", 10) == 0)
- {
-{
-return dev_storage + 2311;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcu9", 10) == 0)
- {
-{
-return dev_storage + 1897;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbu9", 10) == 0)
- {
-{
-return dev_storage + 1481;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdau9", 10) == 0)
- {
-{
-return dev_storage + 1065;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 't':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddt9", 10) == 0)
- {
-{
-return dev_storage + 2296;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdct9", 10) == 0)
- {
-{
-return dev_storage + 1882;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbt9", 10) == 0)
- {
-{
-return dev_storage + 1466;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdat9", 10) == 0)
- {
-{
-return dev_storage + 1050;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 's':
- switch (KR_keyword [7])
- {
- case 'n':
- if (strncmp (KR_keyword, "/dev/cons9", 10) == 0)
- {
-{
-return dev_storage + 29;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdds9", 10) == 0)
- {
-{
-return dev_storage + 2281;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcs9", 10) == 0)
- {
-{
-return dev_storage + 1867;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbs9", 10) == 0)
- {
-{
-return dev_storage + 1451;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdas9", 10) == 0)
- {
-{
-return dev_storage + 1035;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'r':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddr9", 10) == 0)
- {
-{
-return dev_storage + 2266;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcr9", 10) == 0)
- {
-{
-return dev_storage + 1852;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbr9", 10) == 0)
- {
-{
-return dev_storage + 1436;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdar9", 10) == 0)
- {
-{
-return dev_storage + 1020;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'q':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddq9", 10) == 0)
- {
-{
-return dev_storage + 2251;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcq9", 10) == 0)
- {
-{
-return dev_storage + 1837;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbq9", 10) == 0)
- {
-{
-return dev_storage + 1421;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdaq9", 10) == 0)
- {
-{
-return dev_storage + 1005;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'p':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddp9", 10) == 0)
- {
-{
-return dev_storage + 2236;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcp9", 10) == 0)
- {
-{
-return dev_storage + 1822;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbp9", 10) == 0)
- {
-{
-return dev_storage + 1406;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdap9", 10) == 0)
- {
-{
-return dev_storage + 990;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'o':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddo9", 10) == 0)
- {
-{
-return dev_storage + 2221;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdco9", 10) == 0)
- {
-{
-return dev_storage + 1807;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbo9", 10) == 0)
- {
-{
-return dev_storage + 1391;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdao9", 10) == 0)
- {
-{
-return dev_storage + 975;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'n':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddn9", 10) == 0)
- {
-{
-return dev_storage + 2206;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcn9", 10) == 0)
- {
-{
-return dev_storage + 1792;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbn9", 10) == 0)
- {
-{
-return dev_storage + 1376;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdan9", 10) == 0)
- {
-{
-return dev_storage + 960;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'm':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddm9", 10) == 0)
- {
-{
-return dev_storage + 2191;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcm9", 10) == 0)
- {
-{
-return dev_storage + 1777;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbm9", 10) == 0)
- {
-{
-return dev_storage + 1361;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdam9", 10) == 0)
- {
-{
-return dev_storage + 945;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'l':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddl9", 10) == 0)
- {
-{
-return dev_storage + 2176;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcl9", 10) == 0)
- {
-{
-return dev_storage + 1762;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbl9", 10) == 0)
- {
-{
-return dev_storage + 1346;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdal9", 10) == 0)
- {
-{
-return dev_storage + 930;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'k':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddk9", 10) == 0)
- {
-{
-return dev_storage + 2161;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdck9", 10) == 0)
- {
-{
-return dev_storage + 1747;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbk9", 10) == 0)
- {
-{
-return dev_storage + 1331;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdak9", 10) == 0)
- {
-{
-return dev_storage + 915;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'j':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddj9", 10) == 0)
- {
-{
-return dev_storage + 2146;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcj9", 10) == 0)
- {
-{
-return dev_storage + 1732;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbj9", 10) == 0)
- {
-{
-return dev_storage + 1316;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdaj9", 10) == 0)
- {
-{
-return dev_storage + 900;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'i':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddi9", 10) == 0)
- {
-{
-return dev_storage + 2131;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdci9", 10) == 0)
- {
-{
-return dev_storage + 1717;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbi9", 10) == 0)
- {
-{
-return dev_storage + 1301;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdai9", 10) == 0)
- {
-{
-return dev_storage + 885;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'h':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddh9", 10) == 0)
- {
-{
-return dev_storage + 2116;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdch9", 10) == 0)
- {
-{
-return dev_storage + 1702;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbh9", 10) == 0)
- {
-{
-return dev_storage + 1286;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdah9", 10) == 0)
- {
-{
-return dev_storage + 870;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'g':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddg9", 10) == 0)
- {
-{
-return dev_storage + 2101;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcg9", 10) == 0)
- {
-{
-return dev_storage + 1687;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbg9", 10) == 0)
- {
-{
-return dev_storage + 1271;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdag9", 10) == 0)
- {
-{
-return dev_storage + 855;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'f':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddf9", 10) == 0)
- {
-{
-return dev_storage + 2086;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcf9", 10) == 0)
- {
-{
-return dev_storage + 1672;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbf9", 10) == 0)
- {
-{
-return dev_storage + 1256;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdaf9", 10) == 0)
- {
-{
-return dev_storage + 840;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'e':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdde9", 10) == 0)
- {
-{
-return dev_storage + 2071;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdce9", 10) == 0)
- {
-{
-return dev_storage + 1657;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbe9", 10) == 0)
- {
-{
-return dev_storage + 1241;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdae9", 10) == 0)
- {
-{
-return dev_storage + 825;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'd':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddd9", 10) == 0)
- {
-{
-return dev_storage + 2056;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcd9", 10) == 0)
- {
-{
-return dev_storage + 1642;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbd9", 10) == 0)
- {
-{
-return dev_storage + 1226;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdad9", 10) == 0)
- {
-{
-return dev_storage + 810;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'c':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddc9", 10) == 0)
- {
-{
-return dev_storage + 2041;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcc9", 10) == 0)
- {
-{
-return dev_storage + 1627;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbc9", 10) == 0)
- {
-{
-return dev_storage + 1211;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdac9", 10) == 0)
- {
-{
-return dev_storage + 795;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'b':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddb9", 10) == 0)
- {
-{
-return dev_storage + 2026;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcb9", 10) == 0)
- {
-{
-return dev_storage + 1612;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbb9", 10) == 0)
- {
-{
-return dev_storage + 1196;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdab9", 10) == 0)
- {
-{
-return dev_storage + 780;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'a':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdda9", 10) == 0)
- {
-{
-return dev_storage + 2011;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdca9", 10) == 0)
- {
-{
-return dev_storage + 1597;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdba9", 10) == 0)
- {
-{
-return dev_storage + 1181;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdaa9", 10) == 0)
- {
-{
-return dev_storage + 765;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'S':
- if (strncmp (KR_keyword, "/dev/ttyS9", 10) == 0)
- {
-{
-return dev_storage + 2517;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '9':
- if (strncmp (KR_keyword, "/dev/nst99", 10) == 0)
- {
-{
-return dev_storage + 203;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '8':
- if (strncmp (KR_keyword, "/dev/nst89", 10) == 0)
- {
-{
-return dev_storage + 193;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '7':
- if (strncmp (KR_keyword, "/dev/nst79", 10) == 0)
- {
-{
-return dev_storage + 183;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, "/dev/nst69", 10) == 0)
- {
-{
-return dev_storage + 173;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- switch (KR_keyword [5])
- {
- case 'p':
- if (strncmp (KR_keyword, "/dev/pty59", 10) == 0)
- {
-{
-return dev_storage + 293;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/nst59", 10) == 0)
- {
-{
-return dev_storage + 163;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '4':
- switch (KR_keyword [5])
- {
- case 'p':
- if (strncmp (KR_keyword, "/dev/pty49", 10) == 0)
- {
-{
-return dev_storage + 283;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/nst49", 10) == 0)
- {
-{
-return dev_storage + 153;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '3':
- switch (KR_keyword [5])
- {
- case 'p':
- if (strncmp (KR_keyword, "/dev/pty39", 10) == 0)
- {
-{
-return dev_storage + 273;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/nst39", 10) == 0)
- {
-{
-return dev_storage + 143;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '2':
- switch (KR_keyword [5])
- {
- case 'p':
- if (strncmp (KR_keyword, "/dev/pty29", 10) == 0)
- {
-{
-return dev_storage + 263;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/nst29", 10) == 0)
- {
-{
-return dev_storage + 133;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '1':
- switch (KR_keyword [5])
- {
- case 's':
- if (strncmp (KR_keyword, "/dev/st119", 10) == 0)
- {
-{
-return dev_storage + 2498;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/pty19", 10) == 0)
- {
-{
-return dev_storage + 253;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/nst19", 10) == 0)
- {
-{
-return dev_storage + 123;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '0':
- if (strncmp (KR_keyword, "/dev/st109", 10) == 0)
- {
-{
-return dev_storage + 2488;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '8':
- switch (KR_keyword [8])
- {
- case 'z':
- switch (KR_keyword [7])
- {
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcz8", 10) == 0)
- {
-{
-return dev_storage + 1971;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbz8", 10) == 0)
- {
-{
-return dev_storage + 1555;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdaz8", 10) == 0)
- {
-{
-return dev_storage + 1139;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'y':
- switch (KR_keyword [7])
- {
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcy8", 10) == 0)
- {
-{
-return dev_storage + 1956;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdby8", 10) == 0)
- {
-{
-return dev_storage + 1540;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sday8", 10) == 0)
- {
-{
-return dev_storage + 1124;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'x':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddx8", 10) == 0)
- {
-{
-return dev_storage + 2355;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcx8", 10) == 0)
- {
-{
-return dev_storage + 1941;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbx8", 10) == 0)
- {
-{
-return dev_storage + 1525;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdax8", 10) == 0)
- {
-{
-return dev_storage + 1109;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'w':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddw8", 10) == 0)
- {
-{
-return dev_storage + 2340;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcw8", 10) == 0)
- {
-{
-return dev_storage + 1926;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbw8", 10) == 0)
- {
-{
-return dev_storage + 1510;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdaw8", 10) == 0)
- {
-{
-return dev_storage + 1094;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'v':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddv8", 10) == 0)
- {
-{
-return dev_storage + 2325;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcv8", 10) == 0)
- {
-{
-return dev_storage + 1911;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbv8", 10) == 0)
- {
-{
-return dev_storage + 1495;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdav8", 10) == 0)
- {
-{
-return dev_storage + 1079;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'u':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddu8", 10) == 0)
- {
-{
-return dev_storage + 2310;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcu8", 10) == 0)
- {
-{
-return dev_storage + 1896;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbu8", 10) == 0)
- {
-{
-return dev_storage + 1480;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdau8", 10) == 0)
- {
-{
-return dev_storage + 1064;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 't':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddt8", 10) == 0)
- {
-{
-return dev_storage + 2295;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdct8", 10) == 0)
- {
-{
-return dev_storage + 1881;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbt8", 10) == 0)
- {
-{
-return dev_storage + 1465;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdat8", 10) == 0)
- {
-{
-return dev_storage + 1049;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 's':
- switch (KR_keyword [7])
- {
- case 'n':
- if (strncmp (KR_keyword, "/dev/cons8", 10) == 0)
- {
-{
-return dev_storage + 28;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdds8", 10) == 0)
- {
-{
-return dev_storage + 2280;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcs8", 10) == 0)
- {
-{
-return dev_storage + 1866;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbs8", 10) == 0)
- {
-{
-return dev_storage + 1450;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdas8", 10) == 0)
- {
-{
-return dev_storage + 1034;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'r':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddr8", 10) == 0)
- {
-{
-return dev_storage + 2265;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcr8", 10) == 0)
- {
-{
-return dev_storage + 1851;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbr8", 10) == 0)
- {
-{
-return dev_storage + 1435;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdar8", 10) == 0)
- {
-{
-return dev_storage + 1019;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'q':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddq8", 10) == 0)
- {
-{
-return dev_storage + 2250;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcq8", 10) == 0)
- {
-{
-return dev_storage + 1836;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbq8", 10) == 0)
- {
-{
-return dev_storage + 1420;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdaq8", 10) == 0)
- {
-{
-return dev_storage + 1004;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'p':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddp8", 10) == 0)
- {
-{
-return dev_storage + 2235;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcp8", 10) == 0)
- {
-{
-return dev_storage + 1821;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbp8", 10) == 0)
- {
-{
-return dev_storage + 1405;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdap8", 10) == 0)
- {
-{
-return dev_storage + 989;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'o':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddo8", 10) == 0)
- {
-{
-return dev_storage + 2220;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdco8", 10) == 0)
- {
-{
-return dev_storage + 1806;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbo8", 10) == 0)
- {
-{
-return dev_storage + 1390;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdao8", 10) == 0)
- {
-{
-return dev_storage + 974;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'n':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddn8", 10) == 0)
- {
-{
-return dev_storage + 2205;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcn8", 10) == 0)
- {
-{
-return dev_storage + 1791;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbn8", 10) == 0)
- {
-{
-return dev_storage + 1375;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdan8", 10) == 0)
- {
-{
-return dev_storage + 959;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'm':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddm8", 10) == 0)
- {
-{
-return dev_storage + 2190;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcm8", 10) == 0)
- {
-{
-return dev_storage + 1776;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbm8", 10) == 0)
- {
-{
-return dev_storage + 1360;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdam8", 10) == 0)
- {
-{
-return dev_storage + 944;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'l':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddl8", 10) == 0)
- {
-{
-return dev_storage + 2175;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcl8", 10) == 0)
- {
-{
-return dev_storage + 1761;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbl8", 10) == 0)
- {
-{
-return dev_storage + 1345;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdal8", 10) == 0)
- {
-{
-return dev_storage + 929;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'k':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddk8", 10) == 0)
- {
-{
-return dev_storage + 2160;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdck8", 10) == 0)
- {
-{
-return dev_storage + 1746;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbk8", 10) == 0)
- {
-{
-return dev_storage + 1330;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdak8", 10) == 0)
- {
-{
-return dev_storage + 914;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'j':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddj8", 10) == 0)
- {
-{
-return dev_storage + 2145;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcj8", 10) == 0)
- {
-{
-return dev_storage + 1731;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbj8", 10) == 0)
- {
-{
-return dev_storage + 1315;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdaj8", 10) == 0)
- {
-{
-return dev_storage + 899;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'i':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddi8", 10) == 0)
- {
-{
-return dev_storage + 2130;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdci8", 10) == 0)
- {
-{
-return dev_storage + 1716;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbi8", 10) == 0)
- {
-{
-return dev_storage + 1300;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdai8", 10) == 0)
- {
-{
-return dev_storage + 884;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'h':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddh8", 10) == 0)
- {
-{
-return dev_storage + 2115;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdch8", 10) == 0)
- {
-{
-return dev_storage + 1701;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbh8", 10) == 0)
- {
-{
-return dev_storage + 1285;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdah8", 10) == 0)
- {
-{
-return dev_storage + 869;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'g':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddg8", 10) == 0)
- {
-{
-return dev_storage + 2100;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcg8", 10) == 0)
- {
-{
-return dev_storage + 1686;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbg8", 10) == 0)
- {
-{
-return dev_storage + 1270;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdag8", 10) == 0)
- {
-{
-return dev_storage + 854;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'f':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddf8", 10) == 0)
- {
-{
-return dev_storage + 2085;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcf8", 10) == 0)
- {
-{
-return dev_storage + 1671;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbf8", 10) == 0)
- {
-{
-return dev_storage + 1255;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdaf8", 10) == 0)
- {
-{
-return dev_storage + 839;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'e':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdde8", 10) == 0)
- {
-{
-return dev_storage + 2070;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdce8", 10) == 0)
- {
-{
-return dev_storage + 1656;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbe8", 10) == 0)
- {
-{
-return dev_storage + 1240;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdae8", 10) == 0)
- {
-{
-return dev_storage + 824;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'd':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddd8", 10) == 0)
- {
-{
-return dev_storage + 2055;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcd8", 10) == 0)
- {
-{
-return dev_storage + 1641;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbd8", 10) == 0)
- {
-{
-return dev_storage + 1225;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdad8", 10) == 0)
- {
-{
-return dev_storage + 809;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'c':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddc8", 10) == 0)
- {
-{
-return dev_storage + 2040;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcc8", 10) == 0)
- {
-{
-return dev_storage + 1626;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbc8", 10) == 0)
- {
-{
-return dev_storage + 1210;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdac8", 10) == 0)
- {
-{
-return dev_storage + 794;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'b':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddb8", 10) == 0)
- {
-{
-return dev_storage + 2025;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcb8", 10) == 0)
- {
-{
-return dev_storage + 1611;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbb8", 10) == 0)
- {
-{
-return dev_storage + 1195;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdab8", 10) == 0)
- {
-{
-return dev_storage + 779;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'a':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdda8", 10) == 0)
- {
-{
-return dev_storage + 2010;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdca8", 10) == 0)
- {
-{
-return dev_storage + 1596;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdba8", 10) == 0)
- {
-{
-return dev_storage + 1180;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdaa8", 10) == 0)
- {
-{
-return dev_storage + 764;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'S':
- if (strncmp (KR_keyword, "/dev/ttyS8", 10) == 0)
- {
-{
-return dev_storage + 2516;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '9':
- if (strncmp (KR_keyword, "/dev/nst98", 10) == 0)
- {
-{
-return dev_storage + 202;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '8':
- if (strncmp (KR_keyword, "/dev/nst88", 10) == 0)
- {
-{
-return dev_storage + 192;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '7':
- if (strncmp (KR_keyword, "/dev/nst78", 10) == 0)
- {
-{
-return dev_storage + 182;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, "/dev/nst68", 10) == 0)
- {
-{
-return dev_storage + 172;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- switch (KR_keyword [5])
- {
- case 'p':
- if (strncmp (KR_keyword, "/dev/pty58", 10) == 0)
- {
-{
-return dev_storage + 292;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/nst58", 10) == 0)
- {
-{
-return dev_storage + 162;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '4':
- switch (KR_keyword [5])
- {
- case 'p':
- if (strncmp (KR_keyword, "/dev/pty48", 10) == 0)
- {
-{
-return dev_storage + 282;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/nst48", 10) == 0)
- {
-{
-return dev_storage + 152;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '3':
- switch (KR_keyword [5])
- {
- case 'p':
- if (strncmp (KR_keyword, "/dev/pty38", 10) == 0)
- {
-{
-return dev_storage + 272;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/nst38", 10) == 0)
- {
-{
-return dev_storage + 142;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '2':
- switch (KR_keyword [5])
- {
- case 'p':
- if (strncmp (KR_keyword, "/dev/pty28", 10) == 0)
- {
-{
-return dev_storage + 262;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/nst28", 10) == 0)
- {
-{
-return dev_storage + 132;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '1':
- switch (KR_keyword [5])
- {
- case 's':
- if (strncmp (KR_keyword, "/dev/st118", 10) == 0)
- {
-{
-return dev_storage + 2497;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/pty18", 10) == 0)
- {
-{
-return dev_storage + 252;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/nst18", 10) == 0)
- {
-{
-return dev_storage + 122;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '0':
- if (strncmp (KR_keyword, "/dev/st108", 10) == 0)
- {
-{
-return dev_storage + 2487;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '7':
- switch (KR_keyword [8])
- {
- case 'z':
- switch (KR_keyword [7])
- {
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcz7", 10) == 0)
- {
-{
-return dev_storage + 1970;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbz7", 10) == 0)
- {
-{
-return dev_storage + 1554;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdaz7", 10) == 0)
- {
-{
-return dev_storage + 1138;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'y':
- switch (KR_keyword [7])
- {
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcy7", 10) == 0)
- {
-{
-return dev_storage + 1955;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdby7", 10) == 0)
- {
-{
-return dev_storage + 1539;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sday7", 10) == 0)
- {
-{
-return dev_storage + 1123;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'x':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddx7", 10) == 0)
- {
-{
-return dev_storage + 2354;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcx7", 10) == 0)
- {
-{
-return dev_storage + 1940;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbx7", 10) == 0)
- {
-{
-return dev_storage + 1524;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdax7", 10) == 0)
- {
-{
-return dev_storage + 1108;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'w':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddw7", 10) == 0)
- {
-{
-return dev_storage + 2339;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcw7", 10) == 0)
- {
-{
-return dev_storage + 1925;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbw7", 10) == 0)
- {
-{
-return dev_storage + 1509;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdaw7", 10) == 0)
- {
-{
-return dev_storage + 1093;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'v':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddv7", 10) == 0)
- {
-{
-return dev_storage + 2324;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcv7", 10) == 0)
- {
-{
-return dev_storage + 1910;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbv7", 10) == 0)
- {
-{
-return dev_storage + 1494;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdav7", 10) == 0)
- {
-{
-return dev_storage + 1078;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'u':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddu7", 10) == 0)
- {
-{
-return dev_storage + 2309;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcu7", 10) == 0)
- {
-{
-return dev_storage + 1895;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbu7", 10) == 0)
- {
-{
-return dev_storage + 1479;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdau7", 10) == 0)
- {
-{
-return dev_storage + 1063;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 't':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddt7", 10) == 0)
- {
-{
-return dev_storage + 2294;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdct7", 10) == 0)
- {
-{
-return dev_storage + 1880;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbt7", 10) == 0)
- {
-{
-return dev_storage + 1464;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdat7", 10) == 0)
- {
-{
-return dev_storage + 1048;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 's':
- switch (KR_keyword [7])
- {
- case 'n':
- if (strncmp (KR_keyword, "/dev/cons7", 10) == 0)
- {
-{
-return dev_storage + 27;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdds7", 10) == 0)
- {
-{
-return dev_storage + 2279;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcs7", 10) == 0)
- {
-{
-return dev_storage + 1865;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbs7", 10) == 0)
- {
-{
-return dev_storage + 1449;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdas7", 10) == 0)
- {
-{
-return dev_storage + 1033;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'r':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddr7", 10) == 0)
- {
-{
-return dev_storage + 2264;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcr7", 10) == 0)
- {
-{
-return dev_storage + 1850;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbr7", 10) == 0)
- {
-{
-return dev_storage + 1434;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdar7", 10) == 0)
- {
-{
-return dev_storage + 1018;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'q':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddq7", 10) == 0)
- {
-{
-return dev_storage + 2249;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcq7", 10) == 0)
- {
-{
-return dev_storage + 1835;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbq7", 10) == 0)
- {
-{
-return dev_storage + 1419;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdaq7", 10) == 0)
- {
-{
-return dev_storage + 1003;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'p':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddp7", 10) == 0)
- {
-{
-return dev_storage + 2234;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcp7", 10) == 0)
- {
-{
-return dev_storage + 1820;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbp7", 10) == 0)
- {
-{
-return dev_storage + 1404;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdap7", 10) == 0)
- {
-{
-return dev_storage + 988;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'o':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddo7", 10) == 0)
- {
-{
-return dev_storage + 2219;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdco7", 10) == 0)
- {
-{
-return dev_storage + 1805;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbo7", 10) == 0)
- {
-{
-return dev_storage + 1389;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdao7", 10) == 0)
- {
-{
-return dev_storage + 973;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'n':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddn7", 10) == 0)
- {
-{
-return dev_storage + 2204;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcn7", 10) == 0)
- {
-{
-return dev_storage + 1790;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbn7", 10) == 0)
- {
-{
-return dev_storage + 1374;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdan7", 10) == 0)
- {
-{
-return dev_storage + 958;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'm':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddm7", 10) == 0)
- {
-{
-return dev_storage + 2189;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcm7", 10) == 0)
- {
-{
-return dev_storage + 1775;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbm7", 10) == 0)
- {
-{
-return dev_storage + 1359;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdam7", 10) == 0)
- {
-{
-return dev_storage + 943;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'l':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddl7", 10) == 0)
- {
-{
-return dev_storage + 2174;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcl7", 10) == 0)
- {
-{
-return dev_storage + 1760;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbl7", 10) == 0)
- {
-{
-return dev_storage + 1344;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdal7", 10) == 0)
- {
-{
-return dev_storage + 928;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'k':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddk7", 10) == 0)
- {
-{
-return dev_storage + 2159;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdck7", 10) == 0)
- {
-{
-return dev_storage + 1745;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbk7", 10) == 0)
- {
-{
-return dev_storage + 1329;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdak7", 10) == 0)
- {
-{
-return dev_storage + 913;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'j':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddj7", 10) == 0)
- {
-{
-return dev_storage + 2144;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcj7", 10) == 0)
- {
-{
-return dev_storage + 1730;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbj7", 10) == 0)
- {
-{
-return dev_storage + 1314;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdaj7", 10) == 0)
- {
-{
-return dev_storage + 898;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'i':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddi7", 10) == 0)
- {
-{
-return dev_storage + 2129;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdci7", 10) == 0)
- {
-{
-return dev_storage + 1715;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbi7", 10) == 0)
- {
-{
-return dev_storage + 1299;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdai7", 10) == 0)
- {
-{
-return dev_storage + 883;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'h':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddh7", 10) == 0)
- {
-{
-return dev_storage + 2114;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdch7", 10) == 0)
- {
-{
-return dev_storage + 1700;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbh7", 10) == 0)
- {
-{
-return dev_storage + 1284;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdah7", 10) == 0)
- {
-{
-return dev_storage + 868;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'g':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddg7", 10) == 0)
- {
-{
-return dev_storage + 2099;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcg7", 10) == 0)
- {
-{
-return dev_storage + 1685;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbg7", 10) == 0)
- {
-{
-return dev_storage + 1269;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdag7", 10) == 0)
- {
-{
-return dev_storage + 853;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'f':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddf7", 10) == 0)
- {
-{
-return dev_storage + 2084;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcf7", 10) == 0)
- {
-{
-return dev_storage + 1670;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbf7", 10) == 0)
- {
-{
-return dev_storage + 1254;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdaf7", 10) == 0)
- {
-{
-return dev_storage + 838;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'e':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdde7", 10) == 0)
- {
-{
-return dev_storage + 2069;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdce7", 10) == 0)
- {
-{
-return dev_storage + 1655;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbe7", 10) == 0)
- {
-{
-return dev_storage + 1239;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdae7", 10) == 0)
- {
-{
-return dev_storage + 823;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'd':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddd7", 10) == 0)
- {
-{
-return dev_storage + 2054;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcd7", 10) == 0)
- {
-{
-return dev_storage + 1640;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbd7", 10) == 0)
- {
-{
-return dev_storage + 1224;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdad7", 10) == 0)
- {
-{
-return dev_storage + 808;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'c':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddc7", 10) == 0)
- {
-{
-return dev_storage + 2039;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcc7", 10) == 0)
- {
-{
-return dev_storage + 1625;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbc7", 10) == 0)
- {
-{
-return dev_storage + 1209;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdac7", 10) == 0)
- {
-{
-return dev_storage + 793;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'b':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddb7", 10) == 0)
- {
-{
-return dev_storage + 2024;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcb7", 10) == 0)
- {
-{
-return dev_storage + 1610;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbb7", 10) == 0)
- {
-{
-return dev_storage + 1194;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdab7", 10) == 0)
- {
-{
-return dev_storage + 778;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'a':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdda7", 10) == 0)
- {
-{
-return dev_storage + 2009;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdca7", 10) == 0)
- {
-{
-return dev_storage + 1595;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdba7", 10) == 0)
- {
-{
-return dev_storage + 1179;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdaa7", 10) == 0)
- {
-{
-return dev_storage + 763;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'S':
- if (strncmp (KR_keyword, "/dev/ttyS7", 10) == 0)
- {
-{
-return dev_storage + 2515;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '9':
- if (strncmp (KR_keyword, "/dev/nst97", 10) == 0)
- {
-{
-return dev_storage + 201;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '8':
- if (strncmp (KR_keyword, "/dev/nst87", 10) == 0)
- {
-{
-return dev_storage + 191;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '7':
- if (strncmp (KR_keyword, "/dev/nst77", 10) == 0)
- {
-{
-return dev_storage + 181;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, "/dev/nst67", 10) == 0)
- {
-{
-return dev_storage + 171;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- switch (KR_keyword [5])
- {
- case 'p':
- if (strncmp (KR_keyword, "/dev/pty57", 10) == 0)
- {
-{
-return dev_storage + 291;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/nst57", 10) == 0)
- {
-{
-return dev_storage + 161;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '4':
- switch (KR_keyword [5])
- {
- case 'p':
- if (strncmp (KR_keyword, "/dev/pty47", 10) == 0)
- {
-{
-return dev_storage + 281;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/nst47", 10) == 0)
- {
-{
-return dev_storage + 151;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '3':
- switch (KR_keyword [5])
- {
- case 'p':
- if (strncmp (KR_keyword, "/dev/pty37", 10) == 0)
- {
-{
-return dev_storage + 271;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/nst37", 10) == 0)
- {
-{
-return dev_storage + 141;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '2':
- switch (KR_keyword [5])
- {
- case 's':
- if (strncmp (KR_keyword, "/dev/st127", 10) == 0)
- {
-{
-return dev_storage + 2506;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/pty27", 10) == 0)
- {
-{
-return dev_storage + 261;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/nst27", 10) == 0)
- {
-{
-return dev_storage + 131;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '1':
- switch (KR_keyword [5])
- {
- case 's':
- if (strncmp (KR_keyword, "/dev/st117", 10) == 0)
- {
-{
-return dev_storage + 2496;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/pty17", 10) == 0)
- {
-{
-return dev_storage + 251;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/nst17", 10) == 0)
- {
-{
-return dev_storage + 121;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '0':
- if (strncmp (KR_keyword, "/dev/st107", 10) == 0)
- {
-{
-return dev_storage + 2486;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '6':
- switch (KR_keyword [8])
- {
- case 'z':
- switch (KR_keyword [7])
- {
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcz6", 10) == 0)
- {
-{
-return dev_storage + 1969;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbz6", 10) == 0)
- {
-{
-return dev_storage + 1553;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdaz6", 10) == 0)
- {
-{
-return dev_storage + 1137;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'y':
- switch (KR_keyword [7])
- {
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcy6", 10) == 0)
- {
-{
-return dev_storage + 1954;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdby6", 10) == 0)
- {
-{
-return dev_storage + 1538;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sday6", 10) == 0)
- {
-{
-return dev_storage + 1122;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'x':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddx6", 10) == 0)
- {
-{
-return dev_storage + 2353;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcx6", 10) == 0)
- {
-{
-return dev_storage + 1939;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbx6", 10) == 0)
- {
-{
-return dev_storage + 1523;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdax6", 10) == 0)
- {
-{
-return dev_storage + 1107;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'w':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddw6", 10) == 0)
- {
-{
-return dev_storage + 2338;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcw6", 10) == 0)
- {
-{
-return dev_storage + 1924;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbw6", 10) == 0)
- {
-{
-return dev_storage + 1508;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdaw6", 10) == 0)
- {
-{
-return dev_storage + 1092;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'v':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddv6", 10) == 0)
- {
-{
-return dev_storage + 2323;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcv6", 10) == 0)
- {
-{
-return dev_storage + 1909;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbv6", 10) == 0)
- {
-{
-return dev_storage + 1493;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdav6", 10) == 0)
- {
-{
-return dev_storage + 1077;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'u':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddu6", 10) == 0)
- {
-{
-return dev_storage + 2308;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcu6", 10) == 0)
- {
-{
-return dev_storage + 1894;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbu6", 10) == 0)
- {
-{
-return dev_storage + 1478;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdau6", 10) == 0)
- {
-{
-return dev_storage + 1062;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 't':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddt6", 10) == 0)
- {
-{
-return dev_storage + 2293;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdct6", 10) == 0)
- {
-{
-return dev_storage + 1879;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbt6", 10) == 0)
- {
-{
-return dev_storage + 1463;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdat6", 10) == 0)
- {
-{
-return dev_storage + 1047;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 's':
- switch (KR_keyword [7])
- {
- case 'n':
- if (strncmp (KR_keyword, "/dev/cons6", 10) == 0)
- {
-{
-return dev_storage + 26;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdds6", 10) == 0)
- {
-{
-return dev_storage + 2278;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcs6", 10) == 0)
- {
-{
-return dev_storage + 1864;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbs6", 10) == 0)
- {
-{
-return dev_storage + 1448;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdas6", 10) == 0)
- {
-{
-return dev_storage + 1032;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'r':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddr6", 10) == 0)
- {
-{
-return dev_storage + 2263;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcr6", 10) == 0)
- {
-{
-return dev_storage + 1849;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbr6", 10) == 0)
- {
-{
-return dev_storage + 1433;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdar6", 10) == 0)
- {
-{
-return dev_storage + 1017;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'q':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddq6", 10) == 0)
- {
-{
-return dev_storage + 2248;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcq6", 10) == 0)
- {
-{
-return dev_storage + 1834;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbq6", 10) == 0)
- {
-{
-return dev_storage + 1418;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdaq6", 10) == 0)
- {
-{
-return dev_storage + 1002;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'p':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddp6", 10) == 0)
- {
-{
-return dev_storage + 2233;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcp6", 10) == 0)
- {
-{
-return dev_storage + 1819;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbp6", 10) == 0)
- {
-{
-return dev_storage + 1403;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdap6", 10) == 0)
- {
-{
-return dev_storage + 987;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'o':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddo6", 10) == 0)
- {
-{
-return dev_storage + 2218;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdco6", 10) == 0)
- {
-{
-return dev_storage + 1804;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbo6", 10) == 0)
- {
-{
-return dev_storage + 1388;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdao6", 10) == 0)
- {
-{
-return dev_storage + 972;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'n':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddn6", 10) == 0)
- {
-{
-return dev_storage + 2203;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcn6", 10) == 0)
- {
-{
-return dev_storage + 1789;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbn6", 10) == 0)
- {
-{
-return dev_storage + 1373;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdan6", 10) == 0)
- {
-{
-return dev_storage + 957;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'm':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddm6", 10) == 0)
- {
-{
-return dev_storage + 2188;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcm6", 10) == 0)
- {
-{
-return dev_storage + 1774;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbm6", 10) == 0)
- {
-{
-return dev_storage + 1358;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdam6", 10) == 0)
- {
-{
-return dev_storage + 942;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'l':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddl6", 10) == 0)
- {
-{
-return dev_storage + 2173;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcl6", 10) == 0)
- {
-{
-return dev_storage + 1759;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbl6", 10) == 0)
- {
-{
-return dev_storage + 1343;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdal6", 10) == 0)
- {
-{
-return dev_storage + 927;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'k':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddk6", 10) == 0)
- {
-{
-return dev_storage + 2158;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdck6", 10) == 0)
- {
-{
-return dev_storage + 1744;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbk6", 10) == 0)
- {
-{
-return dev_storage + 1328;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdak6", 10) == 0)
- {
-{
-return dev_storage + 912;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'j':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddj6", 10) == 0)
- {
-{
-return dev_storage + 2143;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcj6", 10) == 0)
- {
-{
-return dev_storage + 1729;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbj6", 10) == 0)
- {
-{
-return dev_storage + 1313;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdaj6", 10) == 0)
- {
-{
-return dev_storage + 897;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'i':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddi6", 10) == 0)
- {
-{
-return dev_storage + 2128;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdci6", 10) == 0)
- {
-{
-return dev_storage + 1714;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbi6", 10) == 0)
- {
-{
-return dev_storage + 1298;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdai6", 10) == 0)
- {
-{
-return dev_storage + 882;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'h':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddh6", 10) == 0)
- {
-{
-return dev_storage + 2113;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdch6", 10) == 0)
- {
-{
-return dev_storage + 1699;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbh6", 10) == 0)
- {
-{
-return dev_storage + 1283;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdah6", 10) == 0)
- {
-{
-return dev_storage + 867;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'g':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddg6", 10) == 0)
- {
-{
-return dev_storage + 2098;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcg6", 10) == 0)
- {
-{
-return dev_storage + 1684;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbg6", 10) == 0)
- {
-{
-return dev_storage + 1268;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdag6", 10) == 0)
- {
-{
-return dev_storage + 852;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'f':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddf6", 10) == 0)
- {
-{
-return dev_storage + 2083;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcf6", 10) == 0)
- {
-{
-return dev_storage + 1669;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbf6", 10) == 0)
- {
-{
-return dev_storage + 1253;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdaf6", 10) == 0)
- {
-{
-return dev_storage + 837;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'e':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdde6", 10) == 0)
- {
-{
-return dev_storage + 2068;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdce6", 10) == 0)
- {
-{
-return dev_storage + 1654;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbe6", 10) == 0)
- {
-{
-return dev_storage + 1238;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdae6", 10) == 0)
- {
-{
-return dev_storage + 822;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'd':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddd6", 10) == 0)
- {
-{
-return dev_storage + 2053;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcd6", 10) == 0)
- {
-{
-return dev_storage + 1639;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbd6", 10) == 0)
- {
-{
-return dev_storage + 1223;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdad6", 10) == 0)
- {
-{
-return dev_storage + 807;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'c':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddc6", 10) == 0)
- {
-{
-return dev_storage + 2038;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcc6", 10) == 0)
- {
-{
-return dev_storage + 1624;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbc6", 10) == 0)
- {
-{
-return dev_storage + 1208;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdac6", 10) == 0)
- {
-{
-return dev_storage + 792;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'b':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddb6", 10) == 0)
- {
-{
-return dev_storage + 2023;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcb6", 10) == 0)
- {
-{
-return dev_storage + 1609;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbb6", 10) == 0)
- {
-{
-return dev_storage + 1193;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdab6", 10) == 0)
- {
-{
-return dev_storage + 777;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'a':
- switch (KR_keyword [7])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdda6", 10) == 0)
- {
-{
-return dev_storage + 2008;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdca6", 10) == 0)
- {
-{
-return dev_storage + 1594;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdba6", 10) == 0)
- {
-{
-return dev_storage + 1178;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdaa6", 10) == 0)
- {
-{
-return dev_storage + 762;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'S':
- if (strncmp (KR_keyword, "/dev/ttyS6", 10) == 0)
- {
-{
-return dev_storage + 2514;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '9':
- if (strncmp (KR_keyword, "/dev/nst96", 10) == 0)
- {
-{
-return dev_storage + 200;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '8':
- if (strncmp (KR_keyword, "/dev/nst86", 10) == 0)
- {
-{
-return dev_storage + 190;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '7':
- if (strncmp (KR_keyword, "/dev/nst76", 10) == 0)
- {
-{
-return dev_storage + 180;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, "/dev/nst66", 10) == 0)
- {
-{
-return dev_storage + 170;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- switch (KR_keyword [5])
- {
- case 'p':
- if (strncmp (KR_keyword, "/dev/pty56", 10) == 0)
- {
-{
-return dev_storage + 290;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/nst56", 10) == 0)
- {
-{
-return dev_storage + 160;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '4':
- switch (KR_keyword [5])
- {
- case 'p':
- if (strncmp (KR_keyword, "/dev/pty46", 10) == 0)
- {
-{
-return dev_storage + 280;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/nst46", 10) == 0)
- {
-{
-return dev_storage + 150;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '3':
- switch (KR_keyword [5])
- {
- case 'p':
- if (strncmp (KR_keyword, "/dev/pty36", 10) == 0)
- {
-{
-return dev_storage + 270;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/nst36", 10) == 0)
- {
-{
-return dev_storage + 140;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '2':
- switch (KR_keyword [5])
- {
- case 's':
- if (strncmp (KR_keyword, "/dev/st126", 10) == 0)
- {
-{
-return dev_storage + 2505;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/pty26", 10) == 0)
- {
-{
-return dev_storage + 260;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/nst26", 10) == 0)
- {
-{
-return dev_storage + 130;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '1':
- switch (KR_keyword [5])
- {
- case 's':
- if (strncmp (KR_keyword, "/dev/st116", 10) == 0)
- {
-{
-return dev_storage + 2495;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/pty16", 10) == 0)
- {
-{
-return dev_storage + 250;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/nst16", 10) == 0)
- {
-{
-return dev_storage + 120;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/com16", 10) == 0)
- {
-{
-return dev_storage + 17;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '0':
- if (strncmp (KR_keyword, "/dev/st106", 10) == 0)
- {
-{
-return dev_storage + 2485;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '5':
- switch (KR_keyword [7])
- {
- case 'z':
- if (strncmp (KR_keyword, "/dev/sdz15", 10) == 0)
- {
-{
-return dev_storage + 730;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'y':
- switch (KR_keyword [8])
- {
- case 'S':
- if (strncmp (KR_keyword, "/dev/ttyS5", 10) == 0)
- {
-{
-return dev_storage + 2513;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, "/dev/pty55", 10) == 0)
- {
-{
-return dev_storage + 289;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/pty45", 10) == 0)
- {
-{
-return dev_storage + 279;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/pty35", 10) == 0)
- {
-{
-return dev_storage + 269;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/pty25", 10) == 0)
- {
-{
-return dev_storage + 259;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- switch (KR_keyword [5])
- {
- case 's':
- if (strncmp (KR_keyword, "/dev/sdy15", 10) == 0)
- {
-{
-return dev_storage + 715;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/pty15", 10) == 0)
- {
-{
-return dev_storage + 249;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'x':
- if (strncmp (KR_keyword, "/dev/sdx15", 10) == 0)
- {
-{
-return dev_storage + 700;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sdw15", 10) == 0)
- {
-{
-return dev_storage + 685;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sdv15", 10) == 0)
- {
-{
-return dev_storage + 670;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sdu15", 10) == 0)
- {
-{
-return dev_storage + 655;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- switch (KR_keyword [8])
- {
- case '9':
- if (strncmp (KR_keyword, "/dev/nst95", 10) == 0)
- {
-{
-return dev_storage + 199;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '8':
- if (strncmp (KR_keyword, "/dev/nst85", 10) == 0)
- {
-{
-return dev_storage + 189;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '7':
- if (strncmp (KR_keyword, "/dev/nst75", 10) == 0)
- {
-{
-return dev_storage + 179;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, "/dev/nst65", 10) == 0)
- {
-{
-return dev_storage + 169;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, "/dev/nst55", 10) == 0)
- {
-{
-return dev_storage + 159;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/nst45", 10) == 0)
- {
-{
-return dev_storage + 149;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/nst35", 10) == 0)
- {
-{
-return dev_storage + 139;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/nst25", 10) == 0)
- {
-{
-return dev_storage + 129;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- switch (KR_keyword [5])
- {
- case 's':
- if (strncmp (KR_keyword, "/dev/sdt15", 10) == 0)
- {
-{
-return dev_storage + 640;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/nst15", 10) == 0)
- {
-{
-return dev_storage + 119;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sds15", 10) == 0)
- {
-{
-return dev_storage + 625;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sdr15", 10) == 0)
- {
-{
-return dev_storage + 610;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sdq15", 10) == 0)
- {
-{
-return dev_storage + 595;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sdp15", 10) == 0)
- {
-{
-return dev_storage + 580;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sdo15", 10) == 0)
- {
-{
-return dev_storage + 565;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- switch (KR_keyword [5])
- {
- case 's':
- if (strncmp (KR_keyword, "/dev/sdn15", 10) == 0)
- {
-{
-return dev_storage + 550;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/cons5", 10) == 0)
- {
-{
-return dev_storage + 25;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'm':
- switch (KR_keyword [5])
- {
- case 's':
- if (strncmp (KR_keyword, "/dev/sdm15", 10) == 0)
- {
-{
-return dev_storage + 535;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/com15", 10) == 0)
- {
-{
-return dev_storage + 16;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sdl15", 10) == 0)
- {
-{
-return dev_storage + 520;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sdk15", 10) == 0)
- {
-{
-return dev_storage + 505;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sdj15", 10) == 0)
- {
-{
-return dev_storage + 490;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sdi15", 10) == 0)
- {
-{
-return dev_storage + 475;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sdh15", 10) == 0)
- {
-{
-return dev_storage + 460;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sdg15", 10) == 0)
- {
-{
-return dev_storage + 445;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sdf15", 10) == 0)
- {
-{
-return dev_storage + 430;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sde15", 10) == 0)
- {
-{
-return dev_storage + 415;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- switch (KR_keyword [8])
- {
- case 'x':
- if (strncmp (KR_keyword, "/dev/sddx5", 10) == 0)
- {
-{
-return dev_storage + 2352;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sddw5", 10) == 0)
- {
-{
-return dev_storage + 2337;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sddv5", 10) == 0)
- {
-{
-return dev_storage + 2322;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sddu5", 10) == 0)
- {
-{
-return dev_storage + 2307;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- if (strncmp (KR_keyword, "/dev/sddt5", 10) == 0)
- {
-{
-return dev_storage + 2292;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sdds5", 10) == 0)
- {
-{
-return dev_storage + 2277;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sddr5", 10) == 0)
- {
-{
-return dev_storage + 2262;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sddq5", 10) == 0)
- {
-{
-return dev_storage + 2247;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sddp5", 10) == 0)
- {
-{
-return dev_storage + 2232;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sddo5", 10) == 0)
- {
-{
-return dev_storage + 2217;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/sddn5", 10) == 0)
- {
-{
-return dev_storage + 2202;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'm':
- if (strncmp (KR_keyword, "/dev/sddm5", 10) == 0)
- {
-{
-return dev_storage + 2187;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sddl5", 10) == 0)
- {
-{
-return dev_storage + 2172;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sddk5", 10) == 0)
- {
-{
-return dev_storage + 2157;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sddj5", 10) == 0)
- {
-{
-return dev_storage + 2142;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sddi5", 10) == 0)
- {
-{
-return dev_storage + 2127;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sddh5", 10) == 0)
- {
-{
-return dev_storage + 2112;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sddg5", 10) == 0)
- {
-{
-return dev_storage + 2097;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sddf5", 10) == 0)
- {
-{
-return dev_storage + 2082;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sdde5", 10) == 0)
- {
-{
-return dev_storage + 2067;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddd5", 10) == 0)
- {
-{
-return dev_storage + 2052;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sddc5", 10) == 0)
- {
-{
-return dev_storage + 2037;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sddb5", 10) == 0)
- {
-{
-return dev_storage + 2022;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdda5", 10) == 0)
- {
-{
-return dev_storage + 2007;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- switch (KR_keyword [6])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdd15", 10) == 0)
- {
-{
-return dev_storage + 400;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/scd15", 10) == 0)
- {
-{
-return dev_storage + 314;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'c':
- switch (KR_keyword [8])
- {
- case 'z':
- if (strncmp (KR_keyword, "/dev/sdcz5", 10) == 0)
- {
-{
-return dev_storage + 1968;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'y':
- if (strncmp (KR_keyword, "/dev/sdcy5", 10) == 0)
- {
-{
-return dev_storage + 1953;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'x':
- if (strncmp (KR_keyword, "/dev/sdcx5", 10) == 0)
- {
-{
-return dev_storage + 1938;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sdcw5", 10) == 0)
- {
-{
-return dev_storage + 1923;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sdcv5", 10) == 0)
- {
-{
-return dev_storage + 1908;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sdcu5", 10) == 0)
- {
-{
-return dev_storage + 1893;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- if (strncmp (KR_keyword, "/dev/sdct5", 10) == 0)
- {
-{
-return dev_storage + 1878;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sdcs5", 10) == 0)
- {
-{
-return dev_storage + 1863;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sdcr5", 10) == 0)
- {
-{
-return dev_storage + 1848;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sdcq5", 10) == 0)
- {
-{
-return dev_storage + 1833;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sdcp5", 10) == 0)
- {
-{
-return dev_storage + 1818;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sdco5", 10) == 0)
- {
-{
-return dev_storage + 1803;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/sdcn5", 10) == 0)
- {
-{
-return dev_storage + 1788;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'm':
- if (strncmp (KR_keyword, "/dev/sdcm5", 10) == 0)
- {
-{
-return dev_storage + 1773;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sdcl5", 10) == 0)
- {
-{
-return dev_storage + 1758;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sdck5", 10) == 0)
- {
-{
-return dev_storage + 1743;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sdcj5", 10) == 0)
- {
-{
-return dev_storage + 1728;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sdci5", 10) == 0)
- {
-{
-return dev_storage + 1713;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sdch5", 10) == 0)
- {
-{
-return dev_storage + 1698;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sdcg5", 10) == 0)
- {
-{
-return dev_storage + 1683;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sdcf5", 10) == 0)
- {
-{
-return dev_storage + 1668;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sdce5", 10) == 0)
- {
-{
-return dev_storage + 1653;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdcd5", 10) == 0)
- {
-{
-return dev_storage + 1638;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcc5", 10) == 0)
- {
-{
-return dev_storage + 1623;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdcb5", 10) == 0)
- {
-{
-return dev_storage + 1608;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdca5", 10) == 0)
- {
-{
-return dev_storage + 1593;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/sdc15", 10) == 0)
- {
-{
-return dev_storage + 385;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'b':
- switch (KR_keyword [8])
- {
- case 'z':
- if (strncmp (KR_keyword, "/dev/sdbz5", 10) == 0)
- {
-{
-return dev_storage + 1552;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'y':
- if (strncmp (KR_keyword, "/dev/sdby5", 10) == 0)
- {
-{
-return dev_storage + 1537;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'x':
- if (strncmp (KR_keyword, "/dev/sdbx5", 10) == 0)
- {
-{
-return dev_storage + 1522;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sdbw5", 10) == 0)
- {
-{
-return dev_storage + 1507;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sdbv5", 10) == 0)
- {
-{
-return dev_storage + 1492;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sdbu5", 10) == 0)
- {
-{
-return dev_storage + 1477;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- if (strncmp (KR_keyword, "/dev/sdbt5", 10) == 0)
- {
-{
-return dev_storage + 1462;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sdbs5", 10) == 0)
- {
-{
-return dev_storage + 1447;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sdbr5", 10) == 0)
- {
-{
-return dev_storage + 1432;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sdbq5", 10) == 0)
- {
-{
-return dev_storage + 1417;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sdbp5", 10) == 0)
- {
-{
-return dev_storage + 1402;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sdbo5", 10) == 0)
- {
-{
-return dev_storage + 1387;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/sdbn5", 10) == 0)
- {
-{
-return dev_storage + 1372;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'm':
- if (strncmp (KR_keyword, "/dev/sdbm5", 10) == 0)
- {
-{
-return dev_storage + 1357;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sdbl5", 10) == 0)
- {
-{
-return dev_storage + 1342;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sdbk5", 10) == 0)
- {
-{
-return dev_storage + 1327;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sdbj5", 10) == 0)
- {
-{
-return dev_storage + 1312;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sdbi5", 10) == 0)
- {
-{
-return dev_storage + 1297;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sdbh5", 10) == 0)
- {
-{
-return dev_storage + 1282;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sdbg5", 10) == 0)
- {
-{
-return dev_storage + 1267;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sdbf5", 10) == 0)
- {
-{
-return dev_storage + 1252;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sdbe5", 10) == 0)
- {
-{
-return dev_storage + 1237;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdbd5", 10) == 0)
- {
-{
-return dev_storage + 1222;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdbc5", 10) == 0)
- {
-{
-return dev_storage + 1207;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbb5", 10) == 0)
- {
-{
-return dev_storage + 1192;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdba5", 10) == 0)
- {
-{
-return dev_storage + 1177;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/sdb15", 10) == 0)
- {
-{
-return dev_storage + 370;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'a':
- switch (KR_keyword [8])
- {
- case 'z':
- if (strncmp (KR_keyword, "/dev/sdaz5", 10) == 0)
- {
-{
-return dev_storage + 1136;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'y':
- if (strncmp (KR_keyword, "/dev/sday5", 10) == 0)
- {
-{
-return dev_storage + 1121;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'x':
- if (strncmp (KR_keyword, "/dev/sdax5", 10) == 0)
- {
-{
-return dev_storage + 1106;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sdaw5", 10) == 0)
- {
-{
-return dev_storage + 1091;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sdav5", 10) == 0)
- {
-{
-return dev_storage + 1076;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sdau5", 10) == 0)
- {
-{
-return dev_storage + 1061;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- if (strncmp (KR_keyword, "/dev/sdat5", 10) == 0)
- {
-{
-return dev_storage + 1046;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sdas5", 10) == 0)
- {
-{
-return dev_storage + 1031;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sdar5", 10) == 0)
- {
-{
-return dev_storage + 1016;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sdaq5", 10) == 0)
- {
-{
-return dev_storage + 1001;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sdap5", 10) == 0)
- {
-{
-return dev_storage + 986;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sdao5", 10) == 0)
- {
-{
-return dev_storage + 971;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/sdan5", 10) == 0)
- {
-{
-return dev_storage + 956;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'm':
- if (strncmp (KR_keyword, "/dev/sdam5", 10) == 0)
- {
-{
-return dev_storage + 941;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sdal5", 10) == 0)
- {
-{
-return dev_storage + 926;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sdak5", 10) == 0)
- {
-{
-return dev_storage + 911;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sdaj5", 10) == 0)
- {
-{
-return dev_storage + 896;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sdai5", 10) == 0)
- {
-{
-return dev_storage + 881;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sdah5", 10) == 0)
- {
-{
-return dev_storage + 866;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sdag5", 10) == 0)
- {
-{
-return dev_storage + 851;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sdaf5", 10) == 0)
- {
-{
-return dev_storage + 836;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sdae5", 10) == 0)
- {
-{
-return dev_storage + 821;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdad5", 10) == 0)
- {
-{
-return dev_storage + 806;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdac5", 10) == 0)
- {
-{
-return dev_storage + 791;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdab5", 10) == 0)
- {
-{
-return dev_storage + 776;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdaa5", 10) == 0)
- {
-{
-return dev_storage + 761;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/sda15", 10) == 0)
- {
-{
-return dev_storage + 355;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '1':
- switch (KR_keyword [8])
- {
- case '2':
- if (strncmp (KR_keyword, "/dev/st125", 10) == 0)
- {
-{
-return dev_storage + 2504;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/st115", 10) == 0)
- {
-{
-return dev_storage + 2494;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '0':
- if (strncmp (KR_keyword, "/dev/st105", 10) == 0)
- {
-{
-return dev_storage + 2484;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '4':
- switch (KR_keyword [7])
- {
- case 'z':
- if (strncmp (KR_keyword, "/dev/sdz14", 10) == 0)
- {
-{
-return dev_storage + 729;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'y':
- switch (KR_keyword [8])
- {
- case 'S':
- if (strncmp (KR_keyword, "/dev/ttyS4", 10) == 0)
- {
-{
-return dev_storage + 2512;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, "/dev/pty54", 10) == 0)
- {
-{
-return dev_storage + 288;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/pty44", 10) == 0)
- {
-{
-return dev_storage + 278;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/pty34", 10) == 0)
- {
-{
-return dev_storage + 268;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/pty24", 10) == 0)
- {
-{
-return dev_storage + 258;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- switch (KR_keyword [5])
- {
- case 's':
- if (strncmp (KR_keyword, "/dev/sdy14", 10) == 0)
- {
-{
-return dev_storage + 714;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/pty14", 10) == 0)
- {
-{
-return dev_storage + 248;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'x':
- if (strncmp (KR_keyword, "/dev/sdx14", 10) == 0)
- {
-{
-return dev_storage + 699;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sdw14", 10) == 0)
- {
-{
-return dev_storage + 684;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sdv14", 10) == 0)
- {
-{
-return dev_storage + 669;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sdu14", 10) == 0)
- {
-{
-return dev_storage + 654;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- switch (KR_keyword [8])
- {
- case '9':
- if (strncmp (KR_keyword, "/dev/nst94", 10) == 0)
- {
-{
-return dev_storage + 198;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '8':
- if (strncmp (KR_keyword, "/dev/nst84", 10) == 0)
- {
-{
-return dev_storage + 188;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '7':
- if (strncmp (KR_keyword, "/dev/nst74", 10) == 0)
- {
-{
-return dev_storage + 178;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, "/dev/nst64", 10) == 0)
- {
-{
-return dev_storage + 168;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, "/dev/nst54", 10) == 0)
- {
-{
-return dev_storage + 158;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/nst44", 10) == 0)
- {
-{
-return dev_storage + 148;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/nst34", 10) == 0)
- {
-{
-return dev_storage + 138;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/nst24", 10) == 0)
- {
-{
-return dev_storage + 128;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- switch (KR_keyword [5])
- {
- case 's':
- if (strncmp (KR_keyword, "/dev/sdt14", 10) == 0)
- {
-{
-return dev_storage + 639;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/nst14", 10) == 0)
- {
-{
-return dev_storage + 118;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sds14", 10) == 0)
- {
-{
-return dev_storage + 624;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sdr14", 10) == 0)
- {
-{
-return dev_storage + 609;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sdq14", 10) == 0)
- {
-{
-return dev_storage + 594;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sdp14", 10) == 0)
- {
-{
-return dev_storage + 579;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sdo14", 10) == 0)
- {
-{
-return dev_storage + 564;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- switch (KR_keyword [5])
- {
- case 's':
- if (strncmp (KR_keyword, "/dev/sdn14", 10) == 0)
- {
-{
-return dev_storage + 549;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/cons4", 10) == 0)
- {
-{
-return dev_storage + 24;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'm':
- switch (KR_keyword [5])
- {
- case 's':
- if (strncmp (KR_keyword, "/dev/sdm14", 10) == 0)
- {
-{
-return dev_storage + 534;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/com14", 10) == 0)
- {
-{
-return dev_storage + 15;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sdl14", 10) == 0)
- {
-{
-return dev_storage + 519;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sdk14", 10) == 0)
- {
-{
-return dev_storage + 504;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sdj14", 10) == 0)
- {
-{
-return dev_storage + 489;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sdi14", 10) == 0)
- {
-{
-return dev_storage + 474;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sdh14", 10) == 0)
- {
-{
-return dev_storage + 459;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sdg14", 10) == 0)
- {
-{
-return dev_storage + 444;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sdf14", 10) == 0)
- {
-{
-return dev_storage + 429;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sde14", 10) == 0)
- {
-{
-return dev_storage + 414;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- switch (KR_keyword [8])
- {
- case 'x':
- if (strncmp (KR_keyword, "/dev/sddx4", 10) == 0)
- {
-{
-return dev_storage + 2351;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sddw4", 10) == 0)
- {
-{
-return dev_storage + 2336;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sddv4", 10) == 0)
- {
-{
-return dev_storage + 2321;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sddu4", 10) == 0)
- {
-{
-return dev_storage + 2306;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- if (strncmp (KR_keyword, "/dev/sddt4", 10) == 0)
- {
-{
-return dev_storage + 2291;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sdds4", 10) == 0)
- {
-{
-return dev_storage + 2276;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sddr4", 10) == 0)
- {
-{
-return dev_storage + 2261;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sddq4", 10) == 0)
- {
-{
-return dev_storage + 2246;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sddp4", 10) == 0)
- {
-{
-return dev_storage + 2231;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sddo4", 10) == 0)
- {
-{
-return dev_storage + 2216;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/sddn4", 10) == 0)
- {
-{
-return dev_storage + 2201;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'm':
- if (strncmp (KR_keyword, "/dev/sddm4", 10) == 0)
- {
-{
-return dev_storage + 2186;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sddl4", 10) == 0)
- {
-{
-return dev_storage + 2171;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sddk4", 10) == 0)
- {
-{
-return dev_storage + 2156;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sddj4", 10) == 0)
- {
-{
-return dev_storage + 2141;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sddi4", 10) == 0)
- {
-{
-return dev_storage + 2126;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sddh4", 10) == 0)
- {
-{
-return dev_storage + 2111;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sddg4", 10) == 0)
- {
-{
-return dev_storage + 2096;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sddf4", 10) == 0)
- {
-{
-return dev_storage + 2081;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sdde4", 10) == 0)
- {
-{
-return dev_storage + 2066;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddd4", 10) == 0)
- {
-{
-return dev_storage + 2051;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sddc4", 10) == 0)
- {
-{
-return dev_storage + 2036;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sddb4", 10) == 0)
- {
-{
-return dev_storage + 2021;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdda4", 10) == 0)
- {
-{
-return dev_storage + 2006;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- switch (KR_keyword [6])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdd14", 10) == 0)
- {
-{
-return dev_storage + 399;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/scd14", 10) == 0)
- {
-{
-return dev_storage + 313;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'c':
- switch (KR_keyword [8])
- {
- case 'z':
- if (strncmp (KR_keyword, "/dev/sdcz4", 10) == 0)
- {
-{
-return dev_storage + 1967;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'y':
- if (strncmp (KR_keyword, "/dev/sdcy4", 10) == 0)
- {
-{
-return dev_storage + 1952;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'x':
- if (strncmp (KR_keyword, "/dev/sdcx4", 10) == 0)
- {
-{
-return dev_storage + 1937;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sdcw4", 10) == 0)
- {
-{
-return dev_storage + 1922;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sdcv4", 10) == 0)
- {
-{
-return dev_storage + 1907;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sdcu4", 10) == 0)
- {
-{
-return dev_storage + 1892;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- if (strncmp (KR_keyword, "/dev/sdct4", 10) == 0)
- {
-{
-return dev_storage + 1877;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sdcs4", 10) == 0)
- {
-{
-return dev_storage + 1862;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sdcr4", 10) == 0)
- {
-{
-return dev_storage + 1847;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sdcq4", 10) == 0)
- {
-{
-return dev_storage + 1832;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sdcp4", 10) == 0)
- {
-{
-return dev_storage + 1817;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sdco4", 10) == 0)
- {
-{
-return dev_storage + 1802;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/sdcn4", 10) == 0)
- {
-{
-return dev_storage + 1787;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'm':
- if (strncmp (KR_keyword, "/dev/sdcm4", 10) == 0)
- {
-{
-return dev_storage + 1772;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sdcl4", 10) == 0)
- {
-{
-return dev_storage + 1757;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sdck4", 10) == 0)
- {
-{
-return dev_storage + 1742;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sdcj4", 10) == 0)
- {
-{
-return dev_storage + 1727;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sdci4", 10) == 0)
- {
-{
-return dev_storage + 1712;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sdch4", 10) == 0)
- {
-{
-return dev_storage + 1697;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sdcg4", 10) == 0)
- {
-{
-return dev_storage + 1682;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sdcf4", 10) == 0)
- {
-{
-return dev_storage + 1667;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sdce4", 10) == 0)
- {
-{
-return dev_storage + 1652;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdcd4", 10) == 0)
- {
-{
-return dev_storage + 1637;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcc4", 10) == 0)
- {
-{
-return dev_storage + 1622;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdcb4", 10) == 0)
- {
-{
-return dev_storage + 1607;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdca4", 10) == 0)
- {
-{
-return dev_storage + 1592;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/sdc14", 10) == 0)
- {
-{
-return dev_storage + 384;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'b':
- switch (KR_keyword [8])
- {
- case 'z':
- if (strncmp (KR_keyword, "/dev/sdbz4", 10) == 0)
- {
-{
-return dev_storage + 1551;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'y':
- if (strncmp (KR_keyword, "/dev/sdby4", 10) == 0)
- {
-{
-return dev_storage + 1536;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'x':
- if (strncmp (KR_keyword, "/dev/sdbx4", 10) == 0)
- {
-{
-return dev_storage + 1521;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sdbw4", 10) == 0)
- {
-{
-return dev_storage + 1506;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sdbv4", 10) == 0)
- {
-{
-return dev_storage + 1491;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sdbu4", 10) == 0)
- {
-{
-return dev_storage + 1476;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- if (strncmp (KR_keyword, "/dev/sdbt4", 10) == 0)
- {
-{
-return dev_storage + 1461;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sdbs4", 10) == 0)
- {
-{
-return dev_storage + 1446;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sdbr4", 10) == 0)
- {
-{
-return dev_storage + 1431;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sdbq4", 10) == 0)
- {
-{
-return dev_storage + 1416;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sdbp4", 10) == 0)
- {
-{
-return dev_storage + 1401;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sdbo4", 10) == 0)
- {
-{
-return dev_storage + 1386;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/sdbn4", 10) == 0)
- {
-{
-return dev_storage + 1371;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'm':
- if (strncmp (KR_keyword, "/dev/sdbm4", 10) == 0)
- {
-{
-return dev_storage + 1356;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sdbl4", 10) == 0)
- {
-{
-return dev_storage + 1341;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sdbk4", 10) == 0)
- {
-{
-return dev_storage + 1326;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sdbj4", 10) == 0)
- {
-{
-return dev_storage + 1311;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sdbi4", 10) == 0)
- {
-{
-return dev_storage + 1296;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sdbh4", 10) == 0)
- {
-{
-return dev_storage + 1281;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sdbg4", 10) == 0)
- {
-{
-return dev_storage + 1266;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sdbf4", 10) == 0)
- {
-{
-return dev_storage + 1251;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sdbe4", 10) == 0)
- {
-{
-return dev_storage + 1236;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdbd4", 10) == 0)
- {
-{
-return dev_storage + 1221;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdbc4", 10) == 0)
- {
-{
-return dev_storage + 1206;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbb4", 10) == 0)
- {
-{
-return dev_storage + 1191;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdba4", 10) == 0)
- {
-{
-return dev_storage + 1176;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/sdb14", 10) == 0)
- {
-{
-return dev_storage + 369;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'a':
- switch (KR_keyword [8])
- {
- case 'z':
- if (strncmp (KR_keyword, "/dev/sdaz4", 10) == 0)
- {
-{
-return dev_storage + 1135;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'y':
- if (strncmp (KR_keyword, "/dev/sday4", 10) == 0)
- {
-{
-return dev_storage + 1120;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'x':
- if (strncmp (KR_keyword, "/dev/sdax4", 10) == 0)
- {
-{
-return dev_storage + 1105;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sdaw4", 10) == 0)
- {
-{
-return dev_storage + 1090;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sdav4", 10) == 0)
- {
-{
-return dev_storage + 1075;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sdau4", 10) == 0)
- {
-{
-return dev_storage + 1060;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- if (strncmp (KR_keyword, "/dev/sdat4", 10) == 0)
- {
-{
-return dev_storage + 1045;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sdas4", 10) == 0)
- {
-{
-return dev_storage + 1030;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sdar4", 10) == 0)
- {
-{
-return dev_storage + 1015;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sdaq4", 10) == 0)
- {
-{
-return dev_storage + 1000;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sdap4", 10) == 0)
- {
-{
-return dev_storage + 985;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sdao4", 10) == 0)
- {
-{
-return dev_storage + 970;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/sdan4", 10) == 0)
- {
-{
-return dev_storage + 955;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'm':
- if (strncmp (KR_keyword, "/dev/sdam4", 10) == 0)
- {
-{
-return dev_storage + 940;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sdal4", 10) == 0)
- {
-{
-return dev_storage + 925;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sdak4", 10) == 0)
- {
-{
-return dev_storage + 910;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sdaj4", 10) == 0)
- {
-{
-return dev_storage + 895;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sdai4", 10) == 0)
- {
-{
-return dev_storage + 880;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sdah4", 10) == 0)
- {
-{
-return dev_storage + 865;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sdag4", 10) == 0)
- {
-{
-return dev_storage + 850;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sdaf4", 10) == 0)
- {
-{
-return dev_storage + 835;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sdae4", 10) == 0)
- {
-{
-return dev_storage + 820;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdad4", 10) == 0)
- {
-{
-return dev_storage + 805;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdac4", 10) == 0)
- {
-{
-return dev_storage + 790;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdab4", 10) == 0)
- {
-{
-return dev_storage + 775;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdaa4", 10) == 0)
- {
-{
-return dev_storage + 760;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/sda14", 10) == 0)
- {
-{
-return dev_storage + 354;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '1':
- switch (KR_keyword [8])
- {
- case '2':
- if (strncmp (KR_keyword, "/dev/st124", 10) == 0)
- {
-{
-return dev_storage + 2503;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/st114", 10) == 0)
- {
-{
-return dev_storage + 2493;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '0':
- if (strncmp (KR_keyword, "/dev/st104", 10) == 0)
- {
-{
-return dev_storage + 2483;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '3':
- switch (KR_keyword [7])
- {
- case 'z':
- if (strncmp (KR_keyword, "/dev/sdz13", 10) == 0)
- {
-{
-return dev_storage + 728;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'y':
- switch (KR_keyword [8])
- {
- case 'S':
- if (strncmp (KR_keyword, "/dev/ttyS3", 10) == 0)
- {
-{
-return dev_storage + 2511;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, "/dev/pty63", 10) == 0)
- {
-{
-return dev_storage + 297;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, "/dev/pty53", 10) == 0)
- {
-{
-return dev_storage + 287;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/pty43", 10) == 0)
- {
-{
-return dev_storage + 277;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/pty33", 10) == 0)
- {
-{
-return dev_storage + 267;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/pty23", 10) == 0)
- {
-{
-return dev_storage + 257;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- switch (KR_keyword [5])
- {
- case 's':
- if (strncmp (KR_keyword, "/dev/sdy13", 10) == 0)
- {
-{
-return dev_storage + 713;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/pty13", 10) == 0)
- {
-{
-return dev_storage + 247;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'x':
- if (strncmp (KR_keyword, "/dev/sdx13", 10) == 0)
- {
-{
-return dev_storage + 698;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sdw13", 10) == 0)
- {
-{
-return dev_storage + 683;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sdv13", 10) == 0)
- {
-{
-return dev_storage + 668;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sdu13", 10) == 0)
- {
-{
-return dev_storage + 653;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- switch (KR_keyword [8])
- {
- case '9':
- if (strncmp (KR_keyword, "/dev/nst93", 10) == 0)
- {
-{
-return dev_storage + 197;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '8':
- if (strncmp (KR_keyword, "/dev/nst83", 10) == 0)
- {
-{
-return dev_storage + 187;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '7':
- if (strncmp (KR_keyword, "/dev/nst73", 10) == 0)
- {
-{
-return dev_storage + 177;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, "/dev/nst63", 10) == 0)
- {
-{
-return dev_storage + 167;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, "/dev/nst53", 10) == 0)
- {
-{
-return dev_storage + 157;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/nst43", 10) == 0)
- {
-{
-return dev_storage + 147;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/nst33", 10) == 0)
- {
-{
-return dev_storage + 137;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/nst23", 10) == 0)
- {
-{
-return dev_storage + 127;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- switch (KR_keyword [5])
- {
- case 's':
- if (strncmp (KR_keyword, "/dev/sdt13", 10) == 0)
- {
-{
-return dev_storage + 638;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/nst13", 10) == 0)
- {
-{
-return dev_storage + 117;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sds13", 10) == 0)
- {
-{
-return dev_storage + 623;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sdr13", 10) == 0)
- {
-{
-return dev_storage + 608;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sdq13", 10) == 0)
- {
-{
-return dev_storage + 593;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sdp13", 10) == 0)
- {
-{
-return dev_storage + 578;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sdo13", 10) == 0)
- {
-{
-return dev_storage + 563;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- switch (KR_keyword [5])
- {
- case 's':
- if (strncmp (KR_keyword, "/dev/sdn13", 10) == 0)
- {
-{
-return dev_storage + 548;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/cons3", 10) == 0)
- {
-{
-return dev_storage + 23;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'm':
- switch (KR_keyword [5])
- {
- case 's':
- if (strncmp (KR_keyword, "/dev/sdm13", 10) == 0)
- {
-{
-return dev_storage + 533;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/com13", 10) == 0)
- {
-{
-return dev_storage + 14;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sdl13", 10) == 0)
- {
-{
-return dev_storage + 518;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sdk13", 10) == 0)
- {
-{
-return dev_storage + 503;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sdj13", 10) == 0)
- {
-{
-return dev_storage + 488;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sdi13", 10) == 0)
- {
-{
-return dev_storage + 473;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sdh13", 10) == 0)
- {
-{
-return dev_storage + 458;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sdg13", 10) == 0)
- {
-{
-return dev_storage + 443;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sdf13", 10) == 0)
- {
-{
-return dev_storage + 428;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sde13", 10) == 0)
- {
-{
-return dev_storage + 413;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- switch (KR_keyword [8])
- {
- case 'x':
- if (strncmp (KR_keyword, "/dev/sddx3", 10) == 0)
- {
-{
-return dev_storage + 2350;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sddw3", 10) == 0)
- {
-{
-return dev_storage + 2335;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sddv3", 10) == 0)
- {
-{
-return dev_storage + 2320;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sddu3", 10) == 0)
- {
-{
-return dev_storage + 2305;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- if (strncmp (KR_keyword, "/dev/sddt3", 10) == 0)
- {
-{
-return dev_storage + 2290;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sdds3", 10) == 0)
- {
-{
-return dev_storage + 2275;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sddr3", 10) == 0)
- {
-{
-return dev_storage + 2260;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sddq3", 10) == 0)
- {
-{
-return dev_storage + 2245;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sddp3", 10) == 0)
- {
-{
-return dev_storage + 2230;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sddo3", 10) == 0)
- {
-{
-return dev_storage + 2215;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/sddn3", 10) == 0)
- {
-{
-return dev_storage + 2200;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'm':
- if (strncmp (KR_keyword, "/dev/sddm3", 10) == 0)
- {
-{
-return dev_storage + 2185;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sddl3", 10) == 0)
- {
-{
-return dev_storage + 2170;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sddk3", 10) == 0)
- {
-{
-return dev_storage + 2155;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sddj3", 10) == 0)
- {
-{
-return dev_storage + 2140;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sddi3", 10) == 0)
- {
-{
-return dev_storage + 2125;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sddh3", 10) == 0)
- {
-{
-return dev_storage + 2110;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sddg3", 10) == 0)
- {
-{
-return dev_storage + 2095;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sddf3", 10) == 0)
- {
-{
-return dev_storage + 2080;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sdde3", 10) == 0)
- {
-{
-return dev_storage + 2065;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddd3", 10) == 0)
- {
-{
-return dev_storage + 2050;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sddc3", 10) == 0)
- {
-{
-return dev_storage + 2035;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sddb3", 10) == 0)
- {
-{
-return dev_storage + 2020;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdda3", 10) == 0)
- {
-{
-return dev_storage + 2005;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- switch (KR_keyword [6])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdd13", 10) == 0)
- {
-{
-return dev_storage + 398;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/scd13", 10) == 0)
- {
-{
-return dev_storage + 312;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'c':
- switch (KR_keyword [8])
- {
- case 'z':
- if (strncmp (KR_keyword, "/dev/sdcz3", 10) == 0)
- {
-{
-return dev_storage + 1966;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'y':
- if (strncmp (KR_keyword, "/dev/sdcy3", 10) == 0)
- {
-{
-return dev_storage + 1951;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'x':
- if (strncmp (KR_keyword, "/dev/sdcx3", 10) == 0)
- {
-{
-return dev_storage + 1936;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sdcw3", 10) == 0)
- {
-{
-return dev_storage + 1921;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sdcv3", 10) == 0)
- {
-{
-return dev_storage + 1906;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sdcu3", 10) == 0)
- {
-{
-return dev_storage + 1891;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- if (strncmp (KR_keyword, "/dev/sdct3", 10) == 0)
- {
-{
-return dev_storage + 1876;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sdcs3", 10) == 0)
- {
-{
-return dev_storage + 1861;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sdcr3", 10) == 0)
- {
-{
-return dev_storage + 1846;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sdcq3", 10) == 0)
- {
-{
-return dev_storage + 1831;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sdcp3", 10) == 0)
- {
-{
-return dev_storage + 1816;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sdco3", 10) == 0)
- {
-{
-return dev_storage + 1801;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/sdcn3", 10) == 0)
- {
-{
-return dev_storage + 1786;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'm':
- if (strncmp (KR_keyword, "/dev/sdcm3", 10) == 0)
- {
-{
-return dev_storage + 1771;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sdcl3", 10) == 0)
- {
-{
-return dev_storage + 1756;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sdck3", 10) == 0)
- {
-{
-return dev_storage + 1741;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sdcj3", 10) == 0)
- {
-{
-return dev_storage + 1726;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sdci3", 10) == 0)
- {
-{
-return dev_storage + 1711;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sdch3", 10) == 0)
- {
-{
-return dev_storage + 1696;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sdcg3", 10) == 0)
- {
-{
-return dev_storage + 1681;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sdcf3", 10) == 0)
- {
-{
-return dev_storage + 1666;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sdce3", 10) == 0)
- {
-{
-return dev_storage + 1651;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdcd3", 10) == 0)
- {
-{
-return dev_storage + 1636;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcc3", 10) == 0)
- {
-{
-return dev_storage + 1621;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdcb3", 10) == 0)
- {
-{
-return dev_storage + 1606;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdca3", 10) == 0)
- {
-{
-return dev_storage + 1591;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/sdc13", 10) == 0)
- {
-{
-return dev_storage + 383;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'b':
- switch (KR_keyword [8])
- {
- case 'z':
- if (strncmp (KR_keyword, "/dev/sdbz3", 10) == 0)
- {
-{
-return dev_storage + 1550;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'y':
- if (strncmp (KR_keyword, "/dev/sdby3", 10) == 0)
- {
-{
-return dev_storage + 1535;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'x':
- if (strncmp (KR_keyword, "/dev/sdbx3", 10) == 0)
- {
-{
-return dev_storage + 1520;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sdbw3", 10) == 0)
- {
-{
-return dev_storage + 1505;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sdbv3", 10) == 0)
- {
-{
-return dev_storage + 1490;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sdbu3", 10) == 0)
- {
-{
-return dev_storage + 1475;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- if (strncmp (KR_keyword, "/dev/sdbt3", 10) == 0)
- {
-{
-return dev_storage + 1460;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sdbs3", 10) == 0)
- {
-{
-return dev_storage + 1445;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sdbr3", 10) == 0)
- {
-{
-return dev_storage + 1430;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sdbq3", 10) == 0)
- {
-{
-return dev_storage + 1415;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sdbp3", 10) == 0)
- {
-{
-return dev_storage + 1400;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sdbo3", 10) == 0)
- {
-{
-return dev_storage + 1385;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/sdbn3", 10) == 0)
- {
-{
-return dev_storage + 1370;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'm':
- if (strncmp (KR_keyword, "/dev/sdbm3", 10) == 0)
- {
-{
-return dev_storage + 1355;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sdbl3", 10) == 0)
- {
-{
-return dev_storage + 1340;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sdbk3", 10) == 0)
- {
-{
-return dev_storage + 1325;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sdbj3", 10) == 0)
- {
-{
-return dev_storage + 1310;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sdbi3", 10) == 0)
- {
-{
-return dev_storage + 1295;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sdbh3", 10) == 0)
- {
-{
-return dev_storage + 1280;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sdbg3", 10) == 0)
- {
-{
-return dev_storage + 1265;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sdbf3", 10) == 0)
- {
-{
-return dev_storage + 1250;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sdbe3", 10) == 0)
- {
-{
-return dev_storage + 1235;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdbd3", 10) == 0)
- {
-{
-return dev_storage + 1220;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdbc3", 10) == 0)
- {
-{
-return dev_storage + 1205;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbb3", 10) == 0)
- {
-{
-return dev_storage + 1190;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdba3", 10) == 0)
- {
-{
-return dev_storage + 1175;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/sdb13", 10) == 0)
- {
-{
-return dev_storage + 368;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'a':
- switch (KR_keyword [8])
- {
- case 'z':
- if (strncmp (KR_keyword, "/dev/sdaz3", 10) == 0)
- {
-{
-return dev_storage + 1134;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'y':
- if (strncmp (KR_keyword, "/dev/sday3", 10) == 0)
- {
-{
-return dev_storage + 1119;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'x':
- if (strncmp (KR_keyword, "/dev/sdax3", 10) == 0)
- {
-{
-return dev_storage + 1104;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sdaw3", 10) == 0)
- {
-{
-return dev_storage + 1089;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sdav3", 10) == 0)
- {
-{
-return dev_storage + 1074;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sdau3", 10) == 0)
- {
-{
-return dev_storage + 1059;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- if (strncmp (KR_keyword, "/dev/sdat3", 10) == 0)
- {
-{
-return dev_storage + 1044;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sdas3", 10) == 0)
- {
-{
-return dev_storage + 1029;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sdar3", 10) == 0)
- {
-{
-return dev_storage + 1014;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sdaq3", 10) == 0)
- {
-{
-return dev_storage + 999;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sdap3", 10) == 0)
- {
-{
-return dev_storage + 984;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sdao3", 10) == 0)
- {
-{
-return dev_storage + 969;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/sdan3", 10) == 0)
- {
-{
-return dev_storage + 954;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'm':
- if (strncmp (KR_keyword, "/dev/sdam3", 10) == 0)
- {
-{
-return dev_storage + 939;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sdal3", 10) == 0)
- {
-{
-return dev_storage + 924;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sdak3", 10) == 0)
- {
-{
-return dev_storage + 909;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sdaj3", 10) == 0)
- {
-{
-return dev_storage + 894;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sdai3", 10) == 0)
- {
-{
-return dev_storage + 879;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sdah3", 10) == 0)
- {
-{
-return dev_storage + 864;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sdag3", 10) == 0)
- {
-{
-return dev_storage + 849;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sdaf3", 10) == 0)
- {
-{
-return dev_storage + 834;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sdae3", 10) == 0)
- {
-{
-return dev_storage + 819;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdad3", 10) == 0)
- {
-{
-return dev_storage + 804;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdac3", 10) == 0)
- {
-{
-return dev_storage + 789;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdab3", 10) == 0)
- {
-{
-return dev_storage + 774;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdaa3", 10) == 0)
- {
-{
-return dev_storage + 759;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/sda13", 10) == 0)
- {
-{
-return dev_storage + 353;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '1':
- switch (KR_keyword [8])
- {
- case '2':
- if (strncmp (KR_keyword, "/dev/st123", 10) == 0)
- {
-{
-return dev_storage + 2502;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/st113", 10) == 0)
- {
-{
-return dev_storage + 2492;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '0':
- if (strncmp (KR_keyword, "/dev/st103", 10) == 0)
- {
-{
-return dev_storage + 2482;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '2':
- switch (KR_keyword [7])
- {
- case 'z':
- if (strncmp (KR_keyword, "/dev/sdz12", 10) == 0)
- {
-{
-return dev_storage + 727;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'y':
- switch (KR_keyword [8])
- {
- case 'S':
- if (strncmp (KR_keyword, "/dev/ttyS2", 10) == 0)
- {
-{
-return dev_storage + 2510;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, "/dev/pty62", 10) == 0)
- {
-{
-return dev_storage + 296;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, "/dev/pty52", 10) == 0)
- {
-{
-return dev_storage + 286;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/pty42", 10) == 0)
- {
-{
-return dev_storage + 276;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/pty32", 10) == 0)
- {
-{
-return dev_storage + 266;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/pty22", 10) == 0)
- {
-{
-return dev_storage + 256;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- switch (KR_keyword [5])
- {
- case 's':
- if (strncmp (KR_keyword, "/dev/sdy12", 10) == 0)
- {
-{
-return dev_storage + 712;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/pty12", 10) == 0)
- {
-{
-return dev_storage + 246;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'x':
- if (strncmp (KR_keyword, "/dev/sdx12", 10) == 0)
- {
-{
-return dev_storage + 697;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sdw12", 10) == 0)
- {
-{
-return dev_storage + 682;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sdv12", 10) == 0)
- {
-{
-return dev_storage + 667;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sdu12", 10) == 0)
- {
-{
-return dev_storage + 652;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- switch (KR_keyword [8])
- {
- case '9':
- if (strncmp (KR_keyword, "/dev/nst92", 10) == 0)
- {
-{
-return dev_storage + 196;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '8':
- if (strncmp (KR_keyword, "/dev/nst82", 10) == 0)
- {
-{
-return dev_storage + 186;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '7':
- if (strncmp (KR_keyword, "/dev/nst72", 10) == 0)
- {
-{
-return dev_storage + 176;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, "/dev/nst62", 10) == 0)
- {
-{
-return dev_storage + 166;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, "/dev/nst52", 10) == 0)
- {
-{
-return dev_storage + 156;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/nst42", 10) == 0)
- {
-{
-return dev_storage + 146;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/nst32", 10) == 0)
- {
-{
-return dev_storage + 136;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/nst22", 10) == 0)
- {
-{
-return dev_storage + 126;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- switch (KR_keyword [5])
- {
- case 's':
- if (strncmp (KR_keyword, "/dev/sdt12", 10) == 0)
- {
-{
-return dev_storage + 637;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/nst12", 10) == 0)
- {
-{
-return dev_storage + 116;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sds12", 10) == 0)
- {
-{
-return dev_storage + 622;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sdr12", 10) == 0)
- {
-{
-return dev_storage + 607;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sdq12", 10) == 0)
- {
-{
-return dev_storage + 592;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sdp12", 10) == 0)
- {
-{
-return dev_storage + 577;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sdo12", 10) == 0)
- {
-{
-return dev_storage + 562;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- switch (KR_keyword [5])
- {
- case 's':
- if (strncmp (KR_keyword, "/dev/sdn12", 10) == 0)
- {
-{
-return dev_storage + 547;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/cons2", 10) == 0)
- {
-{
-return dev_storage + 22;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'm':
- switch (KR_keyword [5])
- {
- case 's':
- if (strncmp (KR_keyword, "/dev/sdm12", 10) == 0)
- {
-{
-return dev_storage + 532;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/com12", 10) == 0)
- {
-{
-return dev_storage + 13;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sdl12", 10) == 0)
- {
-{
-return dev_storage + 517;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sdk12", 10) == 0)
- {
-{
-return dev_storage + 502;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sdj12", 10) == 0)
- {
-{
-return dev_storage + 487;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sdi12", 10) == 0)
- {
-{
-return dev_storage + 472;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sdh12", 10) == 0)
- {
-{
-return dev_storage + 457;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sdg12", 10) == 0)
- {
-{
-return dev_storage + 442;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sdf12", 10) == 0)
- {
-{
-return dev_storage + 427;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sde12", 10) == 0)
- {
-{
-return dev_storage + 412;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- switch (KR_keyword [8])
- {
- case 'x':
- if (strncmp (KR_keyword, "/dev/sddx2", 10) == 0)
- {
-{
-return dev_storage + 2349;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sddw2", 10) == 0)
- {
-{
-return dev_storage + 2334;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sddv2", 10) == 0)
- {
-{
-return dev_storage + 2319;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sddu2", 10) == 0)
- {
-{
-return dev_storage + 2304;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- if (strncmp (KR_keyword, "/dev/sddt2", 10) == 0)
- {
-{
-return dev_storage + 2289;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sdds2", 10) == 0)
- {
-{
-return dev_storage + 2274;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sddr2", 10) == 0)
- {
-{
-return dev_storage + 2259;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sddq2", 10) == 0)
- {
-{
-return dev_storage + 2244;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sddp2", 10) == 0)
- {
-{
-return dev_storage + 2229;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sddo2", 10) == 0)
- {
-{
-return dev_storage + 2214;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/sddn2", 10) == 0)
- {
-{
-return dev_storage + 2199;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'm':
- if (strncmp (KR_keyword, "/dev/sddm2", 10) == 0)
- {
-{
-return dev_storage + 2184;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sddl2", 10) == 0)
- {
-{
-return dev_storage + 2169;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sddk2", 10) == 0)
- {
-{
-return dev_storage + 2154;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sddj2", 10) == 0)
- {
-{
-return dev_storage + 2139;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sddi2", 10) == 0)
- {
-{
-return dev_storage + 2124;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sddh2", 10) == 0)
- {
-{
-return dev_storage + 2109;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sddg2", 10) == 0)
- {
-{
-return dev_storage + 2094;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sddf2", 10) == 0)
- {
-{
-return dev_storage + 2079;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sdde2", 10) == 0)
- {
-{
-return dev_storage + 2064;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddd2", 10) == 0)
- {
-{
-return dev_storage + 2049;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sddc2", 10) == 0)
- {
-{
-return dev_storage + 2034;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sddb2", 10) == 0)
- {
-{
-return dev_storage + 2019;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdda2", 10) == 0)
- {
-{
-return dev_storage + 2004;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- switch (KR_keyword [6])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdd12", 10) == 0)
- {
-{
-return dev_storage + 397;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/scd12", 10) == 0)
- {
-{
-return dev_storage + 311;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'c':
- switch (KR_keyword [8])
- {
- case 'z':
- if (strncmp (KR_keyword, "/dev/sdcz2", 10) == 0)
- {
-{
-return dev_storage + 1965;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'y':
- if (strncmp (KR_keyword, "/dev/sdcy2", 10) == 0)
- {
-{
-return dev_storage + 1950;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'x':
- if (strncmp (KR_keyword, "/dev/sdcx2", 10) == 0)
- {
-{
-return dev_storage + 1935;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sdcw2", 10) == 0)
- {
-{
-return dev_storage + 1920;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sdcv2", 10) == 0)
- {
-{
-return dev_storage + 1905;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sdcu2", 10) == 0)
- {
-{
-return dev_storage + 1890;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- if (strncmp (KR_keyword, "/dev/sdct2", 10) == 0)
- {
-{
-return dev_storage + 1875;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sdcs2", 10) == 0)
- {
-{
-return dev_storage + 1860;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sdcr2", 10) == 0)
- {
-{
-return dev_storage + 1845;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sdcq2", 10) == 0)
- {
-{
-return dev_storage + 1830;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sdcp2", 10) == 0)
- {
-{
-return dev_storage + 1815;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sdco2", 10) == 0)
- {
-{
-return dev_storage + 1800;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/sdcn2", 10) == 0)
- {
-{
-return dev_storage + 1785;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'm':
- if (strncmp (KR_keyword, "/dev/sdcm2", 10) == 0)
- {
-{
-return dev_storage + 1770;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sdcl2", 10) == 0)
- {
-{
-return dev_storage + 1755;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sdck2", 10) == 0)
- {
-{
-return dev_storage + 1740;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sdcj2", 10) == 0)
- {
-{
-return dev_storage + 1725;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sdci2", 10) == 0)
- {
-{
-return dev_storage + 1710;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sdch2", 10) == 0)
- {
-{
-return dev_storage + 1695;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sdcg2", 10) == 0)
- {
-{
-return dev_storage + 1680;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sdcf2", 10) == 0)
- {
-{
-return dev_storage + 1665;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sdce2", 10) == 0)
- {
-{
-return dev_storage + 1650;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdcd2", 10) == 0)
- {
-{
-return dev_storage + 1635;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcc2", 10) == 0)
- {
-{
-return dev_storage + 1620;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdcb2", 10) == 0)
- {
-{
-return dev_storage + 1605;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdca2", 10) == 0)
- {
-{
-return dev_storage + 1590;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/sdc12", 10) == 0)
- {
-{
-return dev_storage + 382;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'b':
- switch (KR_keyword [8])
- {
- case 'z':
- if (strncmp (KR_keyword, "/dev/sdbz2", 10) == 0)
- {
-{
-return dev_storage + 1549;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'y':
- if (strncmp (KR_keyword, "/dev/sdby2", 10) == 0)
- {
-{
-return dev_storage + 1534;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'x':
- if (strncmp (KR_keyword, "/dev/sdbx2", 10) == 0)
- {
-{
-return dev_storage + 1519;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sdbw2", 10) == 0)
- {
-{
-return dev_storage + 1504;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sdbv2", 10) == 0)
- {
-{
-return dev_storage + 1489;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sdbu2", 10) == 0)
- {
-{
-return dev_storage + 1474;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- if (strncmp (KR_keyword, "/dev/sdbt2", 10) == 0)
- {
-{
-return dev_storage + 1459;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sdbs2", 10) == 0)
- {
-{
-return dev_storage + 1444;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sdbr2", 10) == 0)
- {
-{
-return dev_storage + 1429;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sdbq2", 10) == 0)
- {
-{
-return dev_storage + 1414;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sdbp2", 10) == 0)
- {
-{
-return dev_storage + 1399;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sdbo2", 10) == 0)
- {
-{
-return dev_storage + 1384;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/sdbn2", 10) == 0)
- {
-{
-return dev_storage + 1369;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'm':
- if (strncmp (KR_keyword, "/dev/sdbm2", 10) == 0)
- {
-{
-return dev_storage + 1354;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sdbl2", 10) == 0)
- {
-{
-return dev_storage + 1339;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sdbk2", 10) == 0)
- {
-{
-return dev_storage + 1324;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sdbj2", 10) == 0)
- {
-{
-return dev_storage + 1309;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sdbi2", 10) == 0)
- {
-{
-return dev_storage + 1294;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sdbh2", 10) == 0)
- {
-{
-return dev_storage + 1279;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sdbg2", 10) == 0)
- {
-{
-return dev_storage + 1264;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sdbf2", 10) == 0)
- {
-{
-return dev_storage + 1249;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sdbe2", 10) == 0)
- {
-{
-return dev_storage + 1234;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdbd2", 10) == 0)
- {
-{
-return dev_storage + 1219;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdbc2", 10) == 0)
- {
-{
-return dev_storage + 1204;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbb2", 10) == 0)
- {
-{
-return dev_storage + 1189;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdba2", 10) == 0)
- {
-{
-return dev_storage + 1174;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/sdb12", 10) == 0)
- {
-{
-return dev_storage + 367;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'a':
- switch (KR_keyword [8])
- {
- case 'z':
- if (strncmp (KR_keyword, "/dev/sdaz2", 10) == 0)
- {
-{
-return dev_storage + 1133;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'y':
- if (strncmp (KR_keyword, "/dev/sday2", 10) == 0)
- {
-{
-return dev_storage + 1118;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'x':
- if (strncmp (KR_keyword, "/dev/sdax2", 10) == 0)
- {
-{
-return dev_storage + 1103;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sdaw2", 10) == 0)
- {
-{
-return dev_storage + 1088;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sdav2", 10) == 0)
- {
-{
-return dev_storage + 1073;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sdau2", 10) == 0)
- {
-{
-return dev_storage + 1058;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- if (strncmp (KR_keyword, "/dev/sdat2", 10) == 0)
- {
-{
-return dev_storage + 1043;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sdas2", 10) == 0)
- {
-{
-return dev_storage + 1028;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sdar2", 10) == 0)
- {
-{
-return dev_storage + 1013;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sdaq2", 10) == 0)
- {
-{
-return dev_storage + 998;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sdap2", 10) == 0)
- {
-{
-return dev_storage + 983;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sdao2", 10) == 0)
- {
-{
-return dev_storage + 968;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/sdan2", 10) == 0)
- {
-{
-return dev_storage + 953;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'm':
- if (strncmp (KR_keyword, "/dev/sdam2", 10) == 0)
- {
-{
-return dev_storage + 938;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sdal2", 10) == 0)
- {
-{
-return dev_storage + 923;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sdak2", 10) == 0)
- {
-{
-return dev_storage + 908;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sdaj2", 10) == 0)
- {
-{
-return dev_storage + 893;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sdai2", 10) == 0)
- {
-{
-return dev_storage + 878;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sdah2", 10) == 0)
- {
-{
-return dev_storage + 863;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sdag2", 10) == 0)
- {
-{
-return dev_storage + 848;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sdaf2", 10) == 0)
- {
-{
-return dev_storage + 833;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sdae2", 10) == 0)
- {
-{
-return dev_storage + 818;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdad2", 10) == 0)
- {
-{
-return dev_storage + 803;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdac2", 10) == 0)
- {
-{
-return dev_storage + 788;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdab2", 10) == 0)
- {
-{
-return dev_storage + 773;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdaa2", 10) == 0)
- {
-{
-return dev_storage + 758;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/sda12", 10) == 0)
- {
-{
-return dev_storage + 352;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '1':
- switch (KR_keyword [8])
- {
- case '2':
- if (strncmp (KR_keyword, "/dev/st122", 10) == 0)
- {
-{
-return dev_storage + 2501;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/st112", 10) == 0)
- {
-{
-return dev_storage + 2491;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '0':
- if (strncmp (KR_keyword, "/dev/st102", 10) == 0)
- {
-{
-return dev_storage + 2481;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '1':
- switch (KR_keyword [7])
- {
- case 'z':
- if (strncmp (KR_keyword, "/dev/sdz11", 10) == 0)
- {
-{
-return dev_storage + 726;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'y':
- switch (KR_keyword [8])
- {
- case 'S':
- if (strncmp (KR_keyword, "/dev/ttyS1", 10) == 0)
- {
-{
-return dev_storage + 2509;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, "/dev/pty61", 10) == 0)
- {
-{
-return dev_storage + 295;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, "/dev/pty51", 10) == 0)
- {
-{
-return dev_storage + 285;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/pty41", 10) == 0)
- {
-{
-return dev_storage + 275;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/pty31", 10) == 0)
- {
-{
-return dev_storage + 265;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/pty21", 10) == 0)
- {
-{
-return dev_storage + 255;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- switch (KR_keyword [5])
- {
- case 's':
- if (strncmp (KR_keyword, "/dev/sdy11", 10) == 0)
- {
-{
-return dev_storage + 711;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/pty11", 10) == 0)
- {
-{
-return dev_storage + 245;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'x':
- if (strncmp (KR_keyword, "/dev/sdx11", 10) == 0)
- {
-{
-return dev_storage + 696;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sdw11", 10) == 0)
- {
-{
-return dev_storage + 681;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sdv11", 10) == 0)
- {
-{
-return dev_storage + 666;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sdu11", 10) == 0)
- {
-{
-return dev_storage + 651;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- switch (KR_keyword [8])
- {
- case '9':
- if (strncmp (KR_keyword, "/dev/nst91", 10) == 0)
- {
-{
-return dev_storage + 195;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '8':
- if (strncmp (KR_keyword, "/dev/nst81", 10) == 0)
- {
-{
-return dev_storage + 185;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '7':
- if (strncmp (KR_keyword, "/dev/nst71", 10) == 0)
- {
-{
-return dev_storage + 175;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, "/dev/nst61", 10) == 0)
- {
-{
-return dev_storage + 165;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, "/dev/nst51", 10) == 0)
- {
-{
-return dev_storage + 155;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/nst41", 10) == 0)
- {
-{
-return dev_storage + 145;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/nst31", 10) == 0)
- {
-{
-return dev_storage + 135;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/nst21", 10) == 0)
- {
-{
-return dev_storage + 125;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- switch (KR_keyword [5])
- {
- case 's':
- if (strncmp (KR_keyword, "/dev/sdt11", 10) == 0)
- {
-{
-return dev_storage + 636;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/nst11", 10) == 0)
- {
-{
-return dev_storage + 115;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sds11", 10) == 0)
- {
-{
-return dev_storage + 621;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sdr11", 10) == 0)
- {
-{
-return dev_storage + 606;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sdq11", 10) == 0)
- {
-{
-return dev_storage + 591;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sdp11", 10) == 0)
- {
-{
-return dev_storage + 576;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sdo11", 10) == 0)
- {
-{
-return dev_storage + 561;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- switch (KR_keyword [5])
- {
- case 's':
- if (strncmp (KR_keyword, "/dev/sdn11", 10) == 0)
- {
-{
-return dev_storage + 546;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/cons1", 10) == 0)
- {
-{
-return dev_storage + 21;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'm':
- switch (KR_keyword [5])
- {
- case 's':
- if (strncmp (KR_keyword, "/dev/sdm11", 10) == 0)
- {
-{
-return dev_storage + 531;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/com11", 10) == 0)
- {
-{
-return dev_storage + 12;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sdl11", 10) == 0)
- {
-{
-return dev_storage + 516;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sdk11", 10) == 0)
- {
-{
-return dev_storage + 501;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sdj11", 10) == 0)
- {
-{
-return dev_storage + 486;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sdi11", 10) == 0)
- {
-{
-return dev_storage + 471;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sdh11", 10) == 0)
- {
-{
-return dev_storage + 456;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sdg11", 10) == 0)
- {
-{
-return dev_storage + 441;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sdf11", 10) == 0)
- {
-{
-return dev_storage + 426;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sde11", 10) == 0)
- {
-{
-return dev_storage + 411;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- switch (KR_keyword [8])
- {
- case 'x':
- if (strncmp (KR_keyword, "/dev/sddx1", 10) == 0)
- {
-{
-return dev_storage + 2348;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sddw1", 10) == 0)
- {
-{
-return dev_storage + 2333;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sddv1", 10) == 0)
- {
-{
-return dev_storage + 2318;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sddu1", 10) == 0)
- {
-{
-return dev_storage + 2303;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- if (strncmp (KR_keyword, "/dev/sddt1", 10) == 0)
- {
-{
-return dev_storage + 2288;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sdds1", 10) == 0)
- {
-{
-return dev_storage + 2273;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sddr1", 10) == 0)
- {
-{
-return dev_storage + 2258;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sddq1", 10) == 0)
- {
-{
-return dev_storage + 2243;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sddp1", 10) == 0)
- {
-{
-return dev_storage + 2228;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sddo1", 10) == 0)
- {
-{
-return dev_storage + 2213;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/sddn1", 10) == 0)
- {
-{
-return dev_storage + 2198;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'm':
- if (strncmp (KR_keyword, "/dev/sddm1", 10) == 0)
- {
-{
-return dev_storage + 2183;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sddl1", 10) == 0)
- {
-{
-return dev_storage + 2168;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sddk1", 10) == 0)
- {
-{
-return dev_storage + 2153;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sddj1", 10) == 0)
- {
-{
-return dev_storage + 2138;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sddi1", 10) == 0)
- {
-{
-return dev_storage + 2123;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sddh1", 10) == 0)
- {
-{
-return dev_storage + 2108;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sddg1", 10) == 0)
- {
-{
-return dev_storage + 2093;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sddf1", 10) == 0)
- {
-{
-return dev_storage + 2078;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sdde1", 10) == 0)
- {
-{
-return dev_storage + 2063;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddd1", 10) == 0)
- {
-{
-return dev_storage + 2048;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sddc1", 10) == 0)
- {
-{
-return dev_storage + 2033;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sddb1", 10) == 0)
- {
-{
-return dev_storage + 2018;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdda1", 10) == 0)
- {
-{
-return dev_storage + 2003;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- switch (KR_keyword [6])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdd11", 10) == 0)
- {
-{
-return dev_storage + 396;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/scd11", 10) == 0)
- {
-{
-return dev_storage + 310;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'c':
- switch (KR_keyword [8])
- {
- case 'z':
- if (strncmp (KR_keyword, "/dev/sdcz1", 10) == 0)
- {
-{
-return dev_storage + 1964;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'y':
- if (strncmp (KR_keyword, "/dev/sdcy1", 10) == 0)
- {
-{
-return dev_storage + 1949;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'x':
- if (strncmp (KR_keyword, "/dev/sdcx1", 10) == 0)
- {
-{
-return dev_storage + 1934;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sdcw1", 10) == 0)
- {
-{
-return dev_storage + 1919;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sdcv1", 10) == 0)
- {
-{
-return dev_storage + 1904;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sdcu1", 10) == 0)
- {
-{
-return dev_storage + 1889;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- if (strncmp (KR_keyword, "/dev/sdct1", 10) == 0)
- {
-{
-return dev_storage + 1874;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sdcs1", 10) == 0)
- {
-{
-return dev_storage + 1859;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sdcr1", 10) == 0)
- {
-{
-return dev_storage + 1844;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sdcq1", 10) == 0)
- {
-{
-return dev_storage + 1829;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sdcp1", 10) == 0)
- {
-{
-return dev_storage + 1814;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sdco1", 10) == 0)
- {
-{
-return dev_storage + 1799;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/sdcn1", 10) == 0)
- {
-{
-return dev_storage + 1784;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'm':
- if (strncmp (KR_keyword, "/dev/sdcm1", 10) == 0)
- {
-{
-return dev_storage + 1769;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sdcl1", 10) == 0)
- {
-{
-return dev_storage + 1754;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sdck1", 10) == 0)
- {
-{
-return dev_storage + 1739;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sdcj1", 10) == 0)
- {
-{
-return dev_storage + 1724;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sdci1", 10) == 0)
- {
-{
-return dev_storage + 1709;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sdch1", 10) == 0)
- {
-{
-return dev_storage + 1694;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sdcg1", 10) == 0)
- {
-{
-return dev_storage + 1679;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sdcf1", 10) == 0)
- {
-{
-return dev_storage + 1664;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sdce1", 10) == 0)
- {
-{
-return dev_storage + 1649;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdcd1", 10) == 0)
- {
-{
-return dev_storage + 1634;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcc1", 10) == 0)
- {
-{
-return dev_storage + 1619;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdcb1", 10) == 0)
- {
-{
-return dev_storage + 1604;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdca1", 10) == 0)
- {
-{
-return dev_storage + 1589;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/sdc11", 10) == 0)
- {
-{
-return dev_storage + 381;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'b':
- switch (KR_keyword [8])
- {
- case 'z':
- if (strncmp (KR_keyword, "/dev/sdbz1", 10) == 0)
- {
-{
-return dev_storage + 1548;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'y':
- if (strncmp (KR_keyword, "/dev/sdby1", 10) == 0)
- {
-{
-return dev_storage + 1533;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'x':
- if (strncmp (KR_keyword, "/dev/sdbx1", 10) == 0)
- {
-{
-return dev_storage + 1518;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sdbw1", 10) == 0)
- {
-{
-return dev_storage + 1503;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sdbv1", 10) == 0)
- {
-{
-return dev_storage + 1488;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sdbu1", 10) == 0)
- {
-{
-return dev_storage + 1473;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- if (strncmp (KR_keyword, "/dev/sdbt1", 10) == 0)
- {
-{
-return dev_storage + 1458;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sdbs1", 10) == 0)
- {
-{
-return dev_storage + 1443;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sdbr1", 10) == 0)
- {
-{
-return dev_storage + 1428;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sdbq1", 10) == 0)
- {
-{
-return dev_storage + 1413;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sdbp1", 10) == 0)
- {
-{
-return dev_storage + 1398;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sdbo1", 10) == 0)
- {
-{
-return dev_storage + 1383;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/sdbn1", 10) == 0)
- {
-{
-return dev_storage + 1368;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'm':
- if (strncmp (KR_keyword, "/dev/sdbm1", 10) == 0)
- {
-{
-return dev_storage + 1353;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sdbl1", 10) == 0)
- {
-{
-return dev_storage + 1338;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sdbk1", 10) == 0)
- {
-{
-return dev_storage + 1323;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sdbj1", 10) == 0)
- {
-{
-return dev_storage + 1308;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sdbi1", 10) == 0)
- {
-{
-return dev_storage + 1293;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sdbh1", 10) == 0)
- {
-{
-return dev_storage + 1278;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sdbg1", 10) == 0)
- {
-{
-return dev_storage + 1263;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sdbf1", 10) == 0)
- {
-{
-return dev_storage + 1248;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sdbe1", 10) == 0)
- {
-{
-return dev_storage + 1233;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdbd1", 10) == 0)
- {
-{
-return dev_storage + 1218;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdbc1", 10) == 0)
- {
-{
-return dev_storage + 1203;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbb1", 10) == 0)
- {
-{
-return dev_storage + 1188;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdba1", 10) == 0)
- {
-{
-return dev_storage + 1173;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/sdb11", 10) == 0)
- {
-{
-return dev_storage + 366;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'a':
- switch (KR_keyword [8])
- {
- case 'z':
- if (strncmp (KR_keyword, "/dev/sdaz1", 10) == 0)
- {
-{
-return dev_storage + 1132;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'y':
- if (strncmp (KR_keyword, "/dev/sday1", 10) == 0)
- {
-{
-return dev_storage + 1117;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'x':
- if (strncmp (KR_keyword, "/dev/sdax1", 10) == 0)
- {
-{
-return dev_storage + 1102;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sdaw1", 10) == 0)
- {
-{
-return dev_storage + 1087;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sdav1", 10) == 0)
- {
-{
-return dev_storage + 1072;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sdau1", 10) == 0)
- {
-{
-return dev_storage + 1057;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- if (strncmp (KR_keyword, "/dev/sdat1", 10) == 0)
- {
-{
-return dev_storage + 1042;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sdas1", 10) == 0)
- {
-{
-return dev_storage + 1027;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sdar1", 10) == 0)
- {
-{
-return dev_storage + 1012;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sdaq1", 10) == 0)
- {
-{
-return dev_storage + 997;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sdap1", 10) == 0)
- {
-{
-return dev_storage + 982;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sdao1", 10) == 0)
- {
-{
-return dev_storage + 967;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/sdan1", 10) == 0)
- {
-{
-return dev_storage + 952;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'm':
- if (strncmp (KR_keyword, "/dev/sdam1", 10) == 0)
- {
-{
-return dev_storage + 937;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sdal1", 10) == 0)
- {
-{
-return dev_storage + 922;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sdak1", 10) == 0)
- {
-{
-return dev_storage + 907;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sdaj1", 10) == 0)
- {
-{
-return dev_storage + 892;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sdai1", 10) == 0)
- {
-{
-return dev_storage + 877;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sdah1", 10) == 0)
- {
-{
-return dev_storage + 862;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sdag1", 10) == 0)
- {
-{
-return dev_storage + 847;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sdaf1", 10) == 0)
- {
-{
-return dev_storage + 832;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sdae1", 10) == 0)
- {
-{
-return dev_storage + 817;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdad1", 10) == 0)
- {
-{
-return dev_storage + 802;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdac1", 10) == 0)
- {
-{
-return dev_storage + 787;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdab1", 10) == 0)
- {
-{
-return dev_storage + 772;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdaa1", 10) == 0)
- {
-{
-return dev_storage + 757;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/sda11", 10) == 0)
- {
-{
-return dev_storage + 351;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '1':
- switch (KR_keyword [8])
- {
- case '2':
- if (strncmp (KR_keyword, "/dev/st121", 10) == 0)
- {
-{
-return dev_storage + 2500;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/st111", 10) == 0)
- {
-{
-return dev_storage + 2490;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '0':
- if (strncmp (KR_keyword, "/dev/st101", 10) == 0)
- {
-{
-return dev_storage + 2480;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '0':
- switch (KR_keyword [7])
- {
- case 'z':
- if (strncmp (KR_keyword, "/dev/sdz10", 10) == 0)
- {
-{
-return dev_storage + 725;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'y':
- switch (KR_keyword [8])
- {
- case 'S':
- if (strncmp (KR_keyword, "/dev/ttyS0", 10) == 0)
- {
-{
-return dev_storage + 2508;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, "/dev/pty60", 10) == 0)
- {
-{
-return dev_storage + 294;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, "/dev/pty50", 10) == 0)
- {
-{
-return dev_storage + 284;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/pty40", 10) == 0)
- {
-{
-return dev_storage + 274;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/pty30", 10) == 0)
- {
-{
-return dev_storage + 264;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/pty20", 10) == 0)
- {
-{
-return dev_storage + 254;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- switch (KR_keyword [5])
- {
- case 's':
- if (strncmp (KR_keyword, "/dev/sdy10", 10) == 0)
- {
-{
-return dev_storage + 710;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/pty10", 10) == 0)
- {
-{
-return dev_storage + 244;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'x':
- if (strncmp (KR_keyword, "/dev/sdx10", 10) == 0)
- {
-{
-return dev_storage + 695;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sdw10", 10) == 0)
- {
-{
-return dev_storage + 680;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sdv10", 10) == 0)
- {
-{
-return dev_storage + 665;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sdu10", 10) == 0)
- {
-{
-return dev_storage + 650;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- switch (KR_keyword [8])
- {
- case '9':
- if (strncmp (KR_keyword, "/dev/nst90", 10) == 0)
- {
-{
-return dev_storage + 194;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '8':
- if (strncmp (KR_keyword, "/dev/nst80", 10) == 0)
- {
-{
-return dev_storage + 184;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '7':
- if (strncmp (KR_keyword, "/dev/nst70", 10) == 0)
- {
-{
-return dev_storage + 174;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '6':
- if (strncmp (KR_keyword, "/dev/nst60", 10) == 0)
- {
-{
-return dev_storage + 164;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, "/dev/nst50", 10) == 0)
- {
-{
-return dev_storage + 154;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/nst40", 10) == 0)
- {
-{
-return dev_storage + 144;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/nst30", 10) == 0)
- {
-{
-return dev_storage + 134;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/nst20", 10) == 0)
- {
-{
-return dev_storage + 124;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- switch (KR_keyword [5])
- {
- case 's':
- if (strncmp (KR_keyword, "/dev/sdt10", 10) == 0)
- {
-{
-return dev_storage + 635;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/nst10", 10) == 0)
- {
-{
-return dev_storage + 114;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sds10", 10) == 0)
- {
-{
-return dev_storage + 620;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sdr10", 10) == 0)
- {
-{
-return dev_storage + 605;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sdq10", 10) == 0)
- {
-{
-return dev_storage + 590;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sdp10", 10) == 0)
- {
-{
-return dev_storage + 575;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sdo10", 10) == 0)
- {
-{
-return dev_storage + 560;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- switch (KR_keyword [5])
- {
- case 's':
- if (strncmp (KR_keyword, "/dev/sdn10", 10) == 0)
- {
-{
-return dev_storage + 545;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/cons0", 10) == 0)
- {
-{
-return dev_storage + 20;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'm':
- switch (KR_keyword [5])
- {
- case 's':
- if (strncmp (KR_keyword, "/dev/sdm10", 10) == 0)
- {
-{
-return dev_storage + 530;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/com10", 10) == 0)
- {
-{
-return dev_storage + 11;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sdl10", 10) == 0)
- {
-{
-return dev_storage + 515;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sdk10", 10) == 0)
- {
-{
-return dev_storage + 500;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sdj10", 10) == 0)
- {
-{
-return dev_storage + 485;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sdi10", 10) == 0)
- {
-{
-return dev_storage + 470;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sdh10", 10) == 0)
- {
-{
-return dev_storage + 455;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sdg10", 10) == 0)
- {
-{
-return dev_storage + 440;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sdf10", 10) == 0)
- {
-{
-return dev_storage + 425;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sde10", 10) == 0)
- {
-{
-return dev_storage + 410;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- switch (KR_keyword [6])
- {
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdd10", 10) == 0)
- {
-{
-return dev_storage + 395;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/scd10", 10) == 0)
- {
-{
-return dev_storage + 309;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdc10", 10) == 0)
- {
-{
-return dev_storage + 380;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdb10", 10) == 0)
- {
-{
-return dev_storage + 365;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sda10", 10) == 0)
- {
-{
-return dev_storage + 350;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- switch (KR_keyword [8])
- {
- case '2':
- if (strncmp (KR_keyword, "/dev/st120", 10) == 0)
- {
-{
-return dev_storage + 2499;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/st110", 10) == 0)
- {
-{
-return dev_storage + 2489;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '0':
- if (strncmp (KR_keyword, "/dev/st100", 10) == 0)
- {
-{
-return dev_storage + 2479;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 11:
- switch (KR_keyword [10])
- {
- case 't':
- if (strncmp (KR_keyword, "/dev/conout", 11) == 0)
- {
-{
-return dev_storage + 19;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'm':
- if (strncmp (KR_keyword, "/dev/random", 11) == 0)
- {
-{
-return dev_storage + 298;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '9':
- switch (KR_keyword [9])
- {
- case '5':
- switch (KR_keyword [5])
- {
- case 't':
- if (strncmp (KR_keyword, "/dev/ttyS59", 11) == 0)
- {
-{
-return dev_storage + 2567;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/cons59", 11) == 0)
- {
-{
-return dev_storage + 79;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '4':
- switch (KR_keyword [5])
- {
- case 't':
- if (strncmp (KR_keyword, "/dev/ttyS49", 11) == 0)
- {
-{
-return dev_storage + 2557;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/cons49", 11) == 0)
- {
-{
-return dev_storage + 69;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '3':
- switch (KR_keyword [5])
- {
- case 't':
- if (strncmp (KR_keyword, "/dev/ttyS39", 11) == 0)
- {
-{
-return dev_storage + 2547;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/cons39", 11) == 0)
- {
-{
-return dev_storage + 59;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '2':
- switch (KR_keyword [5])
- {
- case 't':
- if (strncmp (KR_keyword, "/dev/ttyS29", 11) == 0)
- {
-{
-return dev_storage + 2537;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/cons29", 11) == 0)
- {
-{
-return dev_storage + 49;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '1':
- switch (KR_keyword [5])
- {
- case 't':
- if (strncmp (KR_keyword, "/dev/ttyS19", 11) == 0)
- {
-{
-return dev_storage + 2527;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/nst119", 11) == 0)
- {
-{
-return dev_storage + 223;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/cons19", 11) == 0)
- {
-{
-return dev_storage + 39;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '0':
- if (strncmp (KR_keyword, "/dev/nst109", 11) == 0)
- {
-{
-return dev_storage + 213;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '8':
- switch (KR_keyword [9])
- {
- case '5':
- switch (KR_keyword [5])
- {
- case 't':
- if (strncmp (KR_keyword, "/dev/ttyS58", 11) == 0)
- {
-{
-return dev_storage + 2566;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/cons58", 11) == 0)
- {
-{
-return dev_storage + 78;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '4':
- switch (KR_keyword [5])
- {
- case 't':
- if (strncmp (KR_keyword, "/dev/ttyS48", 11) == 0)
- {
-{
-return dev_storage + 2556;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/cons48", 11) == 0)
- {
-{
-return dev_storage + 68;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '3':
- switch (KR_keyword [5])
- {
- case 't':
- if (strncmp (KR_keyword, "/dev/ttyS38", 11) == 0)
- {
-{
-return dev_storage + 2546;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/cons38", 11) == 0)
- {
-{
-return dev_storage + 58;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '2':
- switch (KR_keyword [5])
- {
- case 't':
- if (strncmp (KR_keyword, "/dev/ttyS28", 11) == 0)
- {
-{
-return dev_storage + 2536;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/cons28", 11) == 0)
- {
-{
-return dev_storage + 48;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '1':
- switch (KR_keyword [5])
- {
- case 't':
- if (strncmp (KR_keyword, "/dev/ttyS18", 11) == 0)
- {
-{
-return dev_storage + 2526;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/nst118", 11) == 0)
- {
-{
-return dev_storage + 222;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/cons18", 11) == 0)
- {
-{
-return dev_storage + 38;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '0':
- if (strncmp (KR_keyword, "/dev/nst108", 11) == 0)
- {
-{
-return dev_storage + 212;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '7':
- switch (KR_keyword [9])
- {
- case '5':
- switch (KR_keyword [5])
- {
- case 't':
- if (strncmp (KR_keyword, "/dev/ttyS57", 11) == 0)
- {
-{
-return dev_storage + 2565;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/cons57", 11) == 0)
- {
-{
-return dev_storage + 77;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '4':
- switch (KR_keyword [5])
- {
- case 't':
- if (strncmp (KR_keyword, "/dev/ttyS47", 11) == 0)
- {
-{
-return dev_storage + 2555;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/cons47", 11) == 0)
- {
-{
-return dev_storage + 67;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '3':
- switch (KR_keyword [5])
- {
- case 't':
- if (strncmp (KR_keyword, "/dev/ttyS37", 11) == 0)
- {
-{
-return dev_storage + 2545;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/cons37", 11) == 0)
- {
-{
-return dev_storage + 57;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '2':
- switch (KR_keyword [5])
- {
- case 't':
- if (strncmp (KR_keyword, "/dev/ttyS27", 11) == 0)
- {
-{
-return dev_storage + 2535;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/nst127", 11) == 0)
- {
-{
-return dev_storage + 231;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/cons27", 11) == 0)
- {
-{
-return dev_storage + 47;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '1':
- switch (KR_keyword [5])
- {
- case 't':
- if (strncmp (KR_keyword, "/dev/ttyS17", 11) == 0)
- {
-{
-return dev_storage + 2525;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/nst117", 11) == 0)
- {
-{
-return dev_storage + 221;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/cons17", 11) == 0)
- {
-{
-return dev_storage + 37;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '0':
- if (strncmp (KR_keyword, "/dev/nst107", 11) == 0)
- {
-{
-return dev_storage + 211;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '6':
- switch (KR_keyword [9])
- {
- case '5':
- switch (KR_keyword [5])
- {
- case 't':
- if (strncmp (KR_keyword, "/dev/ttyS56", 11) == 0)
- {
-{
-return dev_storage + 2564;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/cons56", 11) == 0)
- {
-{
-return dev_storage + 76;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '4':
- switch (KR_keyword [5])
- {
- case 't':
- if (strncmp (KR_keyword, "/dev/ttyS46", 11) == 0)
- {
-{
-return dev_storage + 2554;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/cons46", 11) == 0)
- {
-{
-return dev_storage + 66;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '3':
- switch (KR_keyword [5])
- {
- case 't':
- if (strncmp (KR_keyword, "/dev/ttyS36", 11) == 0)
- {
-{
-return dev_storage + 2544;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/cons36", 11) == 0)
- {
-{
-return dev_storage + 56;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '2':
- switch (KR_keyword [5])
- {
- case 't':
- if (strncmp (KR_keyword, "/dev/ttyS26", 11) == 0)
- {
-{
-return dev_storage + 2534;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/nst126", 11) == 0)
- {
-{
-return dev_storage + 230;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/cons26", 11) == 0)
- {
-{
-return dev_storage + 46;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '1':
- switch (KR_keyword [5])
- {
- case 't':
- if (strncmp (KR_keyword, "/dev/ttyS16", 11) == 0)
- {
-{
-return dev_storage + 2524;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/nst116", 11) == 0)
- {
-{
-return dev_storage + 220;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/cons16", 11) == 0)
- {
-{
-return dev_storage + 36;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '0':
- if (strncmp (KR_keyword, "/dev/nst106", 11) == 0)
- {
-{
-return dev_storage + 210;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '5':
- switch (KR_keyword [7])
- {
- case 'y':
- switch (KR_keyword [9])
- {
- case '5':
- if (strncmp (KR_keyword, "/dev/ttyS55", 11) == 0)
- {
-{
-return dev_storage + 2563;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/ttyS45", 11) == 0)
- {
-{
-return dev_storage + 2553;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/ttyS35", 11) == 0)
- {
-{
-return dev_storage + 2543;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/ttyS25", 11) == 0)
- {
-{
-return dev_storage + 2533;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/ttyS15", 11) == 0)
- {
-{
-return dev_storage + 2523;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 't':
- switch (KR_keyword [9])
- {
- case '2':
- if (strncmp (KR_keyword, "/dev/nst125", 11) == 0)
- {
-{
-return dev_storage + 229;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/nst115", 11) == 0)
- {
-{
-return dev_storage + 219;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '0':
- if (strncmp (KR_keyword, "/dev/nst105", 11) == 0)
- {
-{
-return dev_storage + 209;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'n':
- switch (KR_keyword [9])
- {
- case '5':
- if (strncmp (KR_keyword, "/dev/cons55", 11) == 0)
- {
-{
-return dev_storage + 75;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/cons45", 11) == 0)
- {
-{
-return dev_storage + 65;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/cons35", 11) == 0)
- {
-{
-return dev_storage + 55;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/cons25", 11) == 0)
- {
-{
-return dev_storage + 45;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/cons15", 11) == 0)
- {
-{
-return dev_storage + 35;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'd':
- switch (KR_keyword [8])
- {
- case 'x':
- if (strncmp (KR_keyword, "/dev/sddx15", 11) == 0)
- {
-{
-return dev_storage + 2362;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sddw15", 11) == 0)
- {
-{
-return dev_storage + 2347;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sddv15", 11) == 0)
- {
-{
-return dev_storage + 2332;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sddu15", 11) == 0)
- {
-{
-return dev_storage + 2317;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- if (strncmp (KR_keyword, "/dev/sddt15", 11) == 0)
- {
-{
-return dev_storage + 2302;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sdds15", 11) == 0)
- {
-{
-return dev_storage + 2287;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sddr15", 11) == 0)
- {
-{
-return dev_storage + 2272;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sddq15", 11) == 0)
- {
-{
-return dev_storage + 2257;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sddp15", 11) == 0)
- {
-{
-return dev_storage + 2242;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sddo15", 11) == 0)
- {
-{
-return dev_storage + 2227;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/sddn15", 11) == 0)
- {
-{
-return dev_storage + 2212;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'm':
- if (strncmp (KR_keyword, "/dev/sddm15", 11) == 0)
- {
-{
-return dev_storage + 2197;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sddl15", 11) == 0)
- {
-{
-return dev_storage + 2182;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sddk15", 11) == 0)
- {
-{
-return dev_storage + 2167;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sddj15", 11) == 0)
- {
-{
-return dev_storage + 2152;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sddi15", 11) == 0)
- {
-{
-return dev_storage + 2137;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sddh15", 11) == 0)
- {
-{
-return dev_storage + 2122;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sddg15", 11) == 0)
- {
-{
-return dev_storage + 2107;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sddf15", 11) == 0)
- {
-{
-return dev_storage + 2092;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sdde15", 11) == 0)
- {
-{
-return dev_storage + 2077;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddd15", 11) == 0)
- {
-{
-return dev_storage + 2062;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sddc15", 11) == 0)
- {
-{
-return dev_storage + 2047;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sddb15", 11) == 0)
- {
-{
-return dev_storage + 2032;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdda15", 11) == 0)
- {
-{
-return dev_storage + 2017;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'c':
- switch (KR_keyword [8])
- {
- case 'z':
- if (strncmp (KR_keyword, "/dev/sdcz15", 11) == 0)
- {
-{
-return dev_storage + 1978;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'y':
- if (strncmp (KR_keyword, "/dev/sdcy15", 11) == 0)
- {
-{
-return dev_storage + 1963;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'x':
- if (strncmp (KR_keyword, "/dev/sdcx15", 11) == 0)
- {
-{
-return dev_storage + 1948;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sdcw15", 11) == 0)
- {
-{
-return dev_storage + 1933;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sdcv15", 11) == 0)
- {
-{
-return dev_storage + 1918;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sdcu15", 11) == 0)
- {
-{
-return dev_storage + 1903;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- if (strncmp (KR_keyword, "/dev/sdct15", 11) == 0)
- {
-{
-return dev_storage + 1888;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sdcs15", 11) == 0)
- {
-{
-return dev_storage + 1873;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sdcr15", 11) == 0)
- {
-{
-return dev_storage + 1858;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sdcq15", 11) == 0)
- {
-{
-return dev_storage + 1843;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sdcp15", 11) == 0)
- {
-{
-return dev_storage + 1828;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sdco15", 11) == 0)
- {
-{
-return dev_storage + 1813;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/sdcn15", 11) == 0)
- {
-{
-return dev_storage + 1798;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'm':
- if (strncmp (KR_keyword, "/dev/sdcm15", 11) == 0)
- {
-{
-return dev_storage + 1783;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sdcl15", 11) == 0)
- {
-{
-return dev_storage + 1768;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sdck15", 11) == 0)
- {
-{
-return dev_storage + 1753;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sdcj15", 11) == 0)
- {
-{
-return dev_storage + 1738;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sdci15", 11) == 0)
- {
-{
-return dev_storage + 1723;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sdch15", 11) == 0)
- {
-{
-return dev_storage + 1708;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sdcg15", 11) == 0)
- {
-{
-return dev_storage + 1693;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sdcf15", 11) == 0)
- {
-{
-return dev_storage + 1678;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sdce15", 11) == 0)
- {
-{
-return dev_storage + 1663;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdcd15", 11) == 0)
- {
-{
-return dev_storage + 1648;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcc15", 11) == 0)
- {
-{
-return dev_storage + 1633;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdcb15", 11) == 0)
- {
-{
-return dev_storage + 1618;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdca15", 11) == 0)
- {
-{
-return dev_storage + 1603;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'b':
- switch (KR_keyword [8])
- {
- case 'z':
- if (strncmp (KR_keyword, "/dev/sdbz15", 11) == 0)
- {
-{
-return dev_storage + 1562;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'y':
- if (strncmp (KR_keyword, "/dev/sdby15", 11) == 0)
- {
-{
-return dev_storage + 1547;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'x':
- if (strncmp (KR_keyword, "/dev/sdbx15", 11) == 0)
- {
-{
-return dev_storage + 1532;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sdbw15", 11) == 0)
- {
-{
-return dev_storage + 1517;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sdbv15", 11) == 0)
- {
-{
-return dev_storage + 1502;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sdbu15", 11) == 0)
- {
-{
-return dev_storage + 1487;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- if (strncmp (KR_keyword, "/dev/sdbt15", 11) == 0)
- {
-{
-return dev_storage + 1472;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sdbs15", 11) == 0)
- {
-{
-return dev_storage + 1457;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sdbr15", 11) == 0)
- {
-{
-return dev_storage + 1442;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sdbq15", 11) == 0)
- {
-{
-return dev_storage + 1427;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sdbp15", 11) == 0)
- {
-{
-return dev_storage + 1412;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sdbo15", 11) == 0)
- {
-{
-return dev_storage + 1397;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/sdbn15", 11) == 0)
- {
-{
-return dev_storage + 1382;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'm':
- if (strncmp (KR_keyword, "/dev/sdbm15", 11) == 0)
- {
-{
-return dev_storage + 1367;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sdbl15", 11) == 0)
- {
-{
-return dev_storage + 1352;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sdbk15", 11) == 0)
- {
-{
-return dev_storage + 1337;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sdbj15", 11) == 0)
- {
-{
-return dev_storage + 1322;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sdbi15", 11) == 0)
- {
-{
-return dev_storage + 1307;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sdbh15", 11) == 0)
- {
-{
-return dev_storage + 1292;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sdbg15", 11) == 0)
- {
-{
-return dev_storage + 1277;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sdbf15", 11) == 0)
- {
-{
-return dev_storage + 1262;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sdbe15", 11) == 0)
- {
-{
-return dev_storage + 1247;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdbd15", 11) == 0)
- {
-{
-return dev_storage + 1232;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdbc15", 11) == 0)
- {
-{
-return dev_storage + 1217;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbb15", 11) == 0)
- {
-{
-return dev_storage + 1202;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdba15", 11) == 0)
- {
-{
-return dev_storage + 1187;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'a':
- switch (KR_keyword [8])
- {
- case 'z':
- if (strncmp (KR_keyword, "/dev/sdaz15", 11) == 0)
- {
-{
-return dev_storage + 1146;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'y':
- if (strncmp (KR_keyword, "/dev/sday15", 11) == 0)
- {
-{
-return dev_storage + 1131;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'x':
- if (strncmp (KR_keyword, "/dev/sdax15", 11) == 0)
- {
-{
-return dev_storage + 1116;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sdaw15", 11) == 0)
- {
-{
-return dev_storage + 1101;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sdav15", 11) == 0)
- {
-{
-return dev_storage + 1086;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sdau15", 11) == 0)
- {
-{
-return dev_storage + 1071;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- if (strncmp (KR_keyword, "/dev/sdat15", 11) == 0)
- {
-{
-return dev_storage + 1056;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sdas15", 11) == 0)
- {
-{
-return dev_storage + 1041;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sdar15", 11) == 0)
- {
-{
-return dev_storage + 1026;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sdaq15", 11) == 0)
- {
-{
-return dev_storage + 1011;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sdap15", 11) == 0)
- {
-{
-return dev_storage + 996;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sdao15", 11) == 0)
- {
-{
-return dev_storage + 981;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/sdan15", 11) == 0)
- {
-{
-return dev_storage + 966;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'm':
- if (strncmp (KR_keyword, "/dev/sdam15", 11) == 0)
- {
-{
-return dev_storage + 951;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sdal15", 11) == 0)
- {
-{
-return dev_storage + 936;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sdak15", 11) == 0)
- {
-{
-return dev_storage + 921;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sdaj15", 11) == 0)
- {
-{
-return dev_storage + 906;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sdai15", 11) == 0)
- {
-{
-return dev_storage + 891;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sdah15", 11) == 0)
- {
-{
-return dev_storage + 876;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sdag15", 11) == 0)
- {
-{
-return dev_storage + 861;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sdaf15", 11) == 0)
- {
-{
-return dev_storage + 846;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sdae15", 11) == 0)
- {
-{
-return dev_storage + 831;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdad15", 11) == 0)
- {
-{
-return dev_storage + 816;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdac15", 11) == 0)
- {
-{
-return dev_storage + 801;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdab15", 11) == 0)
- {
-{
-return dev_storage + 786;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdaa15", 11) == 0)
- {
-{
-return dev_storage + 771;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '4':
- switch (KR_keyword [7])
- {
- case 'y':
- switch (KR_keyword [9])
- {
- case '5':
- if (strncmp (KR_keyword, "/dev/ttyS54", 11) == 0)
- {
-{
-return dev_storage + 2562;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/ttyS44", 11) == 0)
- {
-{
-return dev_storage + 2552;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/ttyS34", 11) == 0)
- {
-{
-return dev_storage + 2542;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/ttyS24", 11) == 0)
- {
-{
-return dev_storage + 2532;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/ttyS14", 11) == 0)
- {
-{
-return dev_storage + 2522;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 't':
- switch (KR_keyword [9])
- {
- case '2':
- if (strncmp (KR_keyword, "/dev/nst124", 11) == 0)
- {
-{
-return dev_storage + 228;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/nst114", 11) == 0)
- {
-{
-return dev_storage + 218;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '0':
- if (strncmp (KR_keyword, "/dev/nst104", 11) == 0)
- {
-{
-return dev_storage + 208;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'n':
- switch (KR_keyword [9])
- {
- case '5':
- if (strncmp (KR_keyword, "/dev/cons54", 11) == 0)
- {
-{
-return dev_storage + 74;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/cons44", 11) == 0)
- {
-{
-return dev_storage + 64;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/cons34", 11) == 0)
- {
-{
-return dev_storage + 54;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/cons24", 11) == 0)
- {
-{
-return dev_storage + 44;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/cons14", 11) == 0)
- {
-{
-return dev_storage + 34;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'd':
- switch (KR_keyword [8])
- {
- case 'x':
- if (strncmp (KR_keyword, "/dev/sddx14", 11) == 0)
- {
-{
-return dev_storage + 2361;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sddw14", 11) == 0)
- {
-{
-return dev_storage + 2346;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sddv14", 11) == 0)
- {
-{
-return dev_storage + 2331;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sddu14", 11) == 0)
- {
-{
-return dev_storage + 2316;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- if (strncmp (KR_keyword, "/dev/sddt14", 11) == 0)
- {
-{
-return dev_storage + 2301;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sdds14", 11) == 0)
- {
-{
-return dev_storage + 2286;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sddr14", 11) == 0)
- {
-{
-return dev_storage + 2271;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sddq14", 11) == 0)
- {
-{
-return dev_storage + 2256;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sddp14", 11) == 0)
- {
-{
-return dev_storage + 2241;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sddo14", 11) == 0)
- {
-{
-return dev_storage + 2226;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/sddn14", 11) == 0)
- {
-{
-return dev_storage + 2211;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'm':
- if (strncmp (KR_keyword, "/dev/sddm14", 11) == 0)
- {
-{
-return dev_storage + 2196;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sddl14", 11) == 0)
- {
-{
-return dev_storage + 2181;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sddk14", 11) == 0)
- {
-{
-return dev_storage + 2166;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sddj14", 11) == 0)
- {
-{
-return dev_storage + 2151;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sddi14", 11) == 0)
- {
-{
-return dev_storage + 2136;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sddh14", 11) == 0)
- {
-{
-return dev_storage + 2121;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sddg14", 11) == 0)
- {
-{
-return dev_storage + 2106;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sddf14", 11) == 0)
- {
-{
-return dev_storage + 2091;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sdde14", 11) == 0)
- {
-{
-return dev_storage + 2076;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddd14", 11) == 0)
- {
-{
-return dev_storage + 2061;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sddc14", 11) == 0)
- {
-{
-return dev_storage + 2046;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sddb14", 11) == 0)
- {
-{
-return dev_storage + 2031;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdda14", 11) == 0)
- {
-{
-return dev_storage + 2016;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'c':
- switch (KR_keyword [8])
- {
- case 'z':
- if (strncmp (KR_keyword, "/dev/sdcz14", 11) == 0)
- {
-{
-return dev_storage + 1977;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'y':
- if (strncmp (KR_keyword, "/dev/sdcy14", 11) == 0)
- {
-{
-return dev_storage + 1962;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'x':
- if (strncmp (KR_keyword, "/dev/sdcx14", 11) == 0)
- {
-{
-return dev_storage + 1947;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sdcw14", 11) == 0)
- {
-{
-return dev_storage + 1932;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sdcv14", 11) == 0)
- {
-{
-return dev_storage + 1917;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sdcu14", 11) == 0)
- {
-{
-return dev_storage + 1902;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- if (strncmp (KR_keyword, "/dev/sdct14", 11) == 0)
- {
-{
-return dev_storage + 1887;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sdcs14", 11) == 0)
- {
-{
-return dev_storage + 1872;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sdcr14", 11) == 0)
- {
-{
-return dev_storage + 1857;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sdcq14", 11) == 0)
- {
-{
-return dev_storage + 1842;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sdcp14", 11) == 0)
- {
-{
-return dev_storage + 1827;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sdco14", 11) == 0)
- {
-{
-return dev_storage + 1812;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/sdcn14", 11) == 0)
- {
-{
-return dev_storage + 1797;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'm':
- if (strncmp (KR_keyword, "/dev/sdcm14", 11) == 0)
- {
-{
-return dev_storage + 1782;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sdcl14", 11) == 0)
- {
-{
-return dev_storage + 1767;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sdck14", 11) == 0)
- {
-{
-return dev_storage + 1752;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sdcj14", 11) == 0)
- {
-{
-return dev_storage + 1737;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sdci14", 11) == 0)
- {
-{
-return dev_storage + 1722;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sdch14", 11) == 0)
- {
-{
-return dev_storage + 1707;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sdcg14", 11) == 0)
- {
-{
-return dev_storage + 1692;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sdcf14", 11) == 0)
- {
-{
-return dev_storage + 1677;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sdce14", 11) == 0)
- {
-{
-return dev_storage + 1662;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdcd14", 11) == 0)
- {
-{
-return dev_storage + 1647;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcc14", 11) == 0)
- {
-{
-return dev_storage + 1632;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdcb14", 11) == 0)
- {
-{
-return dev_storage + 1617;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdca14", 11) == 0)
- {
-{
-return dev_storage + 1602;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'b':
- switch (KR_keyword [8])
- {
- case 'z':
- if (strncmp (KR_keyword, "/dev/sdbz14", 11) == 0)
- {
-{
-return dev_storage + 1561;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'y':
- if (strncmp (KR_keyword, "/dev/sdby14", 11) == 0)
- {
-{
-return dev_storage + 1546;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'x':
- if (strncmp (KR_keyword, "/dev/sdbx14", 11) == 0)
- {
-{
-return dev_storage + 1531;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sdbw14", 11) == 0)
- {
-{
-return dev_storage + 1516;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sdbv14", 11) == 0)
- {
-{
-return dev_storage + 1501;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sdbu14", 11) == 0)
- {
-{
-return dev_storage + 1486;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- if (strncmp (KR_keyword, "/dev/sdbt14", 11) == 0)
- {
-{
-return dev_storage + 1471;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sdbs14", 11) == 0)
- {
-{
-return dev_storage + 1456;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sdbr14", 11) == 0)
- {
-{
-return dev_storage + 1441;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sdbq14", 11) == 0)
- {
-{
-return dev_storage + 1426;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sdbp14", 11) == 0)
- {
-{
-return dev_storage + 1411;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sdbo14", 11) == 0)
- {
-{
-return dev_storage + 1396;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/sdbn14", 11) == 0)
- {
-{
-return dev_storage + 1381;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'm':
- if (strncmp (KR_keyword, "/dev/sdbm14", 11) == 0)
- {
-{
-return dev_storage + 1366;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sdbl14", 11) == 0)
- {
-{
-return dev_storage + 1351;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sdbk14", 11) == 0)
- {
-{
-return dev_storage + 1336;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sdbj14", 11) == 0)
- {
-{
-return dev_storage + 1321;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sdbi14", 11) == 0)
- {
-{
-return dev_storage + 1306;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sdbh14", 11) == 0)
- {
-{
-return dev_storage + 1291;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sdbg14", 11) == 0)
- {
-{
-return dev_storage + 1276;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sdbf14", 11) == 0)
- {
-{
-return dev_storage + 1261;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sdbe14", 11) == 0)
- {
-{
-return dev_storage + 1246;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdbd14", 11) == 0)
- {
-{
-return dev_storage + 1231;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdbc14", 11) == 0)
- {
-{
-return dev_storage + 1216;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbb14", 11) == 0)
- {
-{
-return dev_storage + 1201;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdba14", 11) == 0)
- {
-{
-return dev_storage + 1186;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'a':
- switch (KR_keyword [8])
- {
- case 'z':
- if (strncmp (KR_keyword, "/dev/sdaz14", 11) == 0)
- {
-{
-return dev_storage + 1145;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'y':
- if (strncmp (KR_keyword, "/dev/sday14", 11) == 0)
- {
-{
-return dev_storage + 1130;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'x':
- if (strncmp (KR_keyword, "/dev/sdax14", 11) == 0)
- {
-{
-return dev_storage + 1115;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sdaw14", 11) == 0)
- {
-{
-return dev_storage + 1100;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sdav14", 11) == 0)
- {
-{
-return dev_storage + 1085;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sdau14", 11) == 0)
- {
-{
-return dev_storage + 1070;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- if (strncmp (KR_keyword, "/dev/sdat14", 11) == 0)
- {
-{
-return dev_storage + 1055;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sdas14", 11) == 0)
- {
-{
-return dev_storage + 1040;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sdar14", 11) == 0)
- {
-{
-return dev_storage + 1025;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sdaq14", 11) == 0)
- {
-{
-return dev_storage + 1010;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sdap14", 11) == 0)
- {
-{
-return dev_storage + 995;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sdao14", 11) == 0)
- {
-{
-return dev_storage + 980;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/sdan14", 11) == 0)
- {
-{
-return dev_storage + 965;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'm':
- if (strncmp (KR_keyword, "/dev/sdam14", 11) == 0)
- {
-{
-return dev_storage + 950;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sdal14", 11) == 0)
- {
-{
-return dev_storage + 935;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sdak14", 11) == 0)
- {
-{
-return dev_storage + 920;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sdaj14", 11) == 0)
- {
-{
-return dev_storage + 905;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sdai14", 11) == 0)
- {
-{
-return dev_storage + 890;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sdah14", 11) == 0)
- {
-{
-return dev_storage + 875;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sdag14", 11) == 0)
- {
-{
-return dev_storage + 860;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sdaf14", 11) == 0)
- {
-{
-return dev_storage + 845;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sdae14", 11) == 0)
- {
-{
-return dev_storage + 830;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdad14", 11) == 0)
- {
-{
-return dev_storage + 815;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdac14", 11) == 0)
- {
-{
-return dev_storage + 800;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdab14", 11) == 0)
- {
-{
-return dev_storage + 785;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdaa14", 11) == 0)
- {
-{
-return dev_storage + 770;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '3':
- switch (KR_keyword [7])
- {
- case 'y':
- switch (KR_keyword [9])
- {
- case '6':
- if (strncmp (KR_keyword, "/dev/ttyS63", 11) == 0)
- {
-{
-return dev_storage + 2571;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, "/dev/ttyS53", 11) == 0)
- {
-{
-return dev_storage + 2561;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/ttyS43", 11) == 0)
- {
-{
-return dev_storage + 2551;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/ttyS33", 11) == 0)
- {
-{
-return dev_storage + 2541;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/ttyS23", 11) == 0)
- {
-{
-return dev_storage + 2531;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/ttyS13", 11) == 0)
- {
-{
-return dev_storage + 2521;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 't':
- switch (KR_keyword [9])
- {
- case '2':
- if (strncmp (KR_keyword, "/dev/nst123", 11) == 0)
- {
-{
-return dev_storage + 227;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/nst113", 11) == 0)
- {
-{
-return dev_storage + 217;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '0':
- if (strncmp (KR_keyword, "/dev/nst103", 11) == 0)
- {
-{
-return dev_storage + 207;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'n':
- switch (KR_keyword [9])
- {
- case '6':
- if (strncmp (KR_keyword, "/dev/cons63", 11) == 0)
- {
-{
-return dev_storage + 83;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, "/dev/cons53", 11) == 0)
- {
-{
-return dev_storage + 73;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/cons43", 11) == 0)
- {
-{
-return dev_storage + 63;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/cons33", 11) == 0)
- {
-{
-return dev_storage + 53;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/cons23", 11) == 0)
- {
-{
-return dev_storage + 43;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/cons13", 11) == 0)
- {
-{
-return dev_storage + 33;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'd':
- switch (KR_keyword [8])
- {
- case 'x':
- if (strncmp (KR_keyword, "/dev/sddx13", 11) == 0)
- {
-{
-return dev_storage + 2360;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sddw13", 11) == 0)
- {
-{
-return dev_storage + 2345;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sddv13", 11) == 0)
- {
-{
-return dev_storage + 2330;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sddu13", 11) == 0)
- {
-{
-return dev_storage + 2315;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- if (strncmp (KR_keyword, "/dev/sddt13", 11) == 0)
- {
-{
-return dev_storage + 2300;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sdds13", 11) == 0)
- {
-{
-return dev_storage + 2285;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sddr13", 11) == 0)
- {
-{
-return dev_storage + 2270;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sddq13", 11) == 0)
- {
-{
-return dev_storage + 2255;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sddp13", 11) == 0)
- {
-{
-return dev_storage + 2240;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sddo13", 11) == 0)
- {
-{
-return dev_storage + 2225;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/sddn13", 11) == 0)
- {
-{
-return dev_storage + 2210;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'm':
- if (strncmp (KR_keyword, "/dev/sddm13", 11) == 0)
- {
-{
-return dev_storage + 2195;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sddl13", 11) == 0)
- {
-{
-return dev_storage + 2180;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sddk13", 11) == 0)
- {
-{
-return dev_storage + 2165;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sddj13", 11) == 0)
- {
-{
-return dev_storage + 2150;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sddi13", 11) == 0)
- {
-{
-return dev_storage + 2135;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sddh13", 11) == 0)
- {
-{
-return dev_storage + 2120;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sddg13", 11) == 0)
- {
-{
-return dev_storage + 2105;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sddf13", 11) == 0)
- {
-{
-return dev_storage + 2090;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sdde13", 11) == 0)
- {
-{
-return dev_storage + 2075;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddd13", 11) == 0)
- {
-{
-return dev_storage + 2060;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sddc13", 11) == 0)
- {
-{
-return dev_storage + 2045;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sddb13", 11) == 0)
- {
-{
-return dev_storage + 2030;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdda13", 11) == 0)
- {
-{
-return dev_storage + 2015;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'c':
- switch (KR_keyword [8])
- {
- case 'z':
- if (strncmp (KR_keyword, "/dev/sdcz13", 11) == 0)
- {
-{
-return dev_storage + 1976;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'y':
- if (strncmp (KR_keyword, "/dev/sdcy13", 11) == 0)
- {
-{
-return dev_storage + 1961;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'x':
- if (strncmp (KR_keyword, "/dev/sdcx13", 11) == 0)
- {
-{
-return dev_storage + 1946;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sdcw13", 11) == 0)
- {
-{
-return dev_storage + 1931;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sdcv13", 11) == 0)
- {
-{
-return dev_storage + 1916;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sdcu13", 11) == 0)
- {
-{
-return dev_storage + 1901;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- if (strncmp (KR_keyword, "/dev/sdct13", 11) == 0)
- {
-{
-return dev_storage + 1886;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sdcs13", 11) == 0)
- {
-{
-return dev_storage + 1871;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sdcr13", 11) == 0)
- {
-{
-return dev_storage + 1856;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sdcq13", 11) == 0)
- {
-{
-return dev_storage + 1841;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sdcp13", 11) == 0)
- {
-{
-return dev_storage + 1826;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sdco13", 11) == 0)
- {
-{
-return dev_storage + 1811;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/sdcn13", 11) == 0)
- {
-{
-return dev_storage + 1796;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'm':
- if (strncmp (KR_keyword, "/dev/sdcm13", 11) == 0)
- {
-{
-return dev_storage + 1781;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sdcl13", 11) == 0)
- {
-{
-return dev_storage + 1766;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sdck13", 11) == 0)
- {
-{
-return dev_storage + 1751;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sdcj13", 11) == 0)
- {
-{
-return dev_storage + 1736;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sdci13", 11) == 0)
- {
-{
-return dev_storage + 1721;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sdch13", 11) == 0)
- {
-{
-return dev_storage + 1706;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sdcg13", 11) == 0)
- {
-{
-return dev_storage + 1691;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sdcf13", 11) == 0)
- {
-{
-return dev_storage + 1676;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sdce13", 11) == 0)
- {
-{
-return dev_storage + 1661;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdcd13", 11) == 0)
- {
-{
-return dev_storage + 1646;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcc13", 11) == 0)
- {
-{
-return dev_storage + 1631;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdcb13", 11) == 0)
- {
-{
-return dev_storage + 1616;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdca13", 11) == 0)
- {
-{
-return dev_storage + 1601;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'b':
- switch (KR_keyword [8])
- {
- case 'z':
- if (strncmp (KR_keyword, "/dev/sdbz13", 11) == 0)
- {
-{
-return dev_storage + 1560;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'y':
- if (strncmp (KR_keyword, "/dev/sdby13", 11) == 0)
- {
-{
-return dev_storage + 1545;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'x':
- if (strncmp (KR_keyword, "/dev/sdbx13", 11) == 0)
- {
-{
-return dev_storage + 1530;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sdbw13", 11) == 0)
- {
-{
-return dev_storage + 1515;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sdbv13", 11) == 0)
- {
-{
-return dev_storage + 1500;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sdbu13", 11) == 0)
- {
-{
-return dev_storage + 1485;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- if (strncmp (KR_keyword, "/dev/sdbt13", 11) == 0)
- {
-{
-return dev_storage + 1470;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sdbs13", 11) == 0)
- {
-{
-return dev_storage + 1455;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sdbr13", 11) == 0)
- {
-{
-return dev_storage + 1440;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sdbq13", 11) == 0)
- {
-{
-return dev_storage + 1425;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sdbp13", 11) == 0)
- {
-{
-return dev_storage + 1410;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sdbo13", 11) == 0)
- {
-{
-return dev_storage + 1395;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/sdbn13", 11) == 0)
- {
-{
-return dev_storage + 1380;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'm':
- if (strncmp (KR_keyword, "/dev/sdbm13", 11) == 0)
- {
-{
-return dev_storage + 1365;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sdbl13", 11) == 0)
- {
-{
-return dev_storage + 1350;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sdbk13", 11) == 0)
- {
-{
-return dev_storage + 1335;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sdbj13", 11) == 0)
- {
-{
-return dev_storage + 1320;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sdbi13", 11) == 0)
- {
-{
-return dev_storage + 1305;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sdbh13", 11) == 0)
- {
-{
-return dev_storage + 1290;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sdbg13", 11) == 0)
- {
-{
-return dev_storage + 1275;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sdbf13", 11) == 0)
- {
-{
-return dev_storage + 1260;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sdbe13", 11) == 0)
- {
-{
-return dev_storage + 1245;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdbd13", 11) == 0)
- {
-{
-return dev_storage + 1230;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdbc13", 11) == 0)
- {
-{
-return dev_storage + 1215;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbb13", 11) == 0)
- {
-{
-return dev_storage + 1200;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdba13", 11) == 0)
- {
-{
-return dev_storage + 1185;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'a':
- switch (KR_keyword [8])
- {
- case 'z':
- if (strncmp (KR_keyword, "/dev/sdaz13", 11) == 0)
- {
-{
-return dev_storage + 1144;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'y':
- if (strncmp (KR_keyword, "/dev/sday13", 11) == 0)
- {
-{
-return dev_storage + 1129;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'x':
- if (strncmp (KR_keyword, "/dev/sdax13", 11) == 0)
- {
-{
-return dev_storage + 1114;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sdaw13", 11) == 0)
- {
-{
-return dev_storage + 1099;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sdav13", 11) == 0)
- {
-{
-return dev_storage + 1084;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sdau13", 11) == 0)
- {
-{
-return dev_storage + 1069;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- if (strncmp (KR_keyword, "/dev/sdat13", 11) == 0)
- {
-{
-return dev_storage + 1054;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sdas13", 11) == 0)
- {
-{
-return dev_storage + 1039;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sdar13", 11) == 0)
- {
-{
-return dev_storage + 1024;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sdaq13", 11) == 0)
- {
-{
-return dev_storage + 1009;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sdap13", 11) == 0)
- {
-{
-return dev_storage + 994;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sdao13", 11) == 0)
- {
-{
-return dev_storage + 979;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/sdan13", 11) == 0)
- {
-{
-return dev_storage + 964;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'm':
- if (strncmp (KR_keyword, "/dev/sdam13", 11) == 0)
- {
-{
-return dev_storage + 949;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sdal13", 11) == 0)
- {
-{
-return dev_storage + 934;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sdak13", 11) == 0)
- {
-{
-return dev_storage + 919;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sdaj13", 11) == 0)
- {
-{
-return dev_storage + 904;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sdai13", 11) == 0)
- {
-{
-return dev_storage + 889;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sdah13", 11) == 0)
- {
-{
-return dev_storage + 874;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sdag13", 11) == 0)
- {
-{
-return dev_storage + 859;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sdaf13", 11) == 0)
- {
-{
-return dev_storage + 844;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sdae13", 11) == 0)
- {
-{
-return dev_storage + 829;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdad13", 11) == 0)
- {
-{
-return dev_storage + 814;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdac13", 11) == 0)
- {
-{
-return dev_storage + 799;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdab13", 11) == 0)
- {
-{
-return dev_storage + 784;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdaa13", 11) == 0)
- {
-{
-return dev_storage + 769;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '2':
- switch (KR_keyword [7])
- {
- case 'y':
- switch (KR_keyword [9])
- {
- case '6':
- if (strncmp (KR_keyword, "/dev/ttyS62", 11) == 0)
- {
-{
-return dev_storage + 2570;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, "/dev/ttyS52", 11) == 0)
- {
-{
-return dev_storage + 2560;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/ttyS42", 11) == 0)
- {
-{
-return dev_storage + 2550;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/ttyS32", 11) == 0)
- {
-{
-return dev_storage + 2540;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/ttyS22", 11) == 0)
- {
-{
-return dev_storage + 2530;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/ttyS12", 11) == 0)
- {
-{
-return dev_storage + 2520;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 't':
- switch (KR_keyword [9])
- {
- case '2':
- if (strncmp (KR_keyword, "/dev/nst122", 11) == 0)
- {
-{
-return dev_storage + 226;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/nst112", 11) == 0)
- {
-{
-return dev_storage + 216;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '0':
- if (strncmp (KR_keyword, "/dev/nst102", 11) == 0)
- {
-{
-return dev_storage + 206;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'n':
- switch (KR_keyword [9])
- {
- case '6':
- if (strncmp (KR_keyword, "/dev/cons62", 11) == 0)
- {
-{
-return dev_storage + 82;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, "/dev/cons52", 11) == 0)
- {
-{
-return dev_storage + 72;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/cons42", 11) == 0)
- {
-{
-return dev_storage + 62;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/cons32", 11) == 0)
- {
-{
-return dev_storage + 52;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/cons22", 11) == 0)
- {
-{
-return dev_storage + 42;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/cons12", 11) == 0)
- {
-{
-return dev_storage + 32;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'd':
- switch (KR_keyword [8])
- {
- case 'x':
- if (strncmp (KR_keyword, "/dev/sddx12", 11) == 0)
- {
-{
-return dev_storage + 2359;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sddw12", 11) == 0)
- {
-{
-return dev_storage + 2344;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sddv12", 11) == 0)
- {
-{
-return dev_storage + 2329;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sddu12", 11) == 0)
- {
-{
-return dev_storage + 2314;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- if (strncmp (KR_keyword, "/dev/sddt12", 11) == 0)
- {
-{
-return dev_storage + 2299;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sdds12", 11) == 0)
- {
-{
-return dev_storage + 2284;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sddr12", 11) == 0)
- {
-{
-return dev_storage + 2269;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sddq12", 11) == 0)
- {
-{
-return dev_storage + 2254;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sddp12", 11) == 0)
- {
-{
-return dev_storage + 2239;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sddo12", 11) == 0)
- {
-{
-return dev_storage + 2224;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/sddn12", 11) == 0)
- {
-{
-return dev_storage + 2209;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'm':
- if (strncmp (KR_keyword, "/dev/sddm12", 11) == 0)
- {
-{
-return dev_storage + 2194;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sddl12", 11) == 0)
- {
-{
-return dev_storage + 2179;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sddk12", 11) == 0)
- {
-{
-return dev_storage + 2164;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sddj12", 11) == 0)
- {
-{
-return dev_storage + 2149;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sddi12", 11) == 0)
- {
-{
-return dev_storage + 2134;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sddh12", 11) == 0)
- {
-{
-return dev_storage + 2119;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sddg12", 11) == 0)
- {
-{
-return dev_storage + 2104;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sddf12", 11) == 0)
- {
-{
-return dev_storage + 2089;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sdde12", 11) == 0)
- {
-{
-return dev_storage + 2074;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddd12", 11) == 0)
- {
-{
-return dev_storage + 2059;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sddc12", 11) == 0)
- {
-{
-return dev_storage + 2044;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sddb12", 11) == 0)
- {
-{
-return dev_storage + 2029;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdda12", 11) == 0)
- {
-{
-return dev_storage + 2014;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'c':
- switch (KR_keyword [8])
- {
- case 'z':
- if (strncmp (KR_keyword, "/dev/sdcz12", 11) == 0)
- {
-{
-return dev_storage + 1975;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'y':
- if (strncmp (KR_keyword, "/dev/sdcy12", 11) == 0)
- {
-{
-return dev_storage + 1960;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'x':
- if (strncmp (KR_keyword, "/dev/sdcx12", 11) == 0)
- {
-{
-return dev_storage + 1945;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sdcw12", 11) == 0)
- {
-{
-return dev_storage + 1930;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sdcv12", 11) == 0)
- {
-{
-return dev_storage + 1915;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sdcu12", 11) == 0)
- {
-{
-return dev_storage + 1900;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- if (strncmp (KR_keyword, "/dev/sdct12", 11) == 0)
- {
-{
-return dev_storage + 1885;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sdcs12", 11) == 0)
- {
-{
-return dev_storage + 1870;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sdcr12", 11) == 0)
- {
-{
-return dev_storage + 1855;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sdcq12", 11) == 0)
- {
-{
-return dev_storage + 1840;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sdcp12", 11) == 0)
- {
-{
-return dev_storage + 1825;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sdco12", 11) == 0)
- {
-{
-return dev_storage + 1810;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/sdcn12", 11) == 0)
- {
-{
-return dev_storage + 1795;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'm':
- if (strncmp (KR_keyword, "/dev/sdcm12", 11) == 0)
- {
-{
-return dev_storage + 1780;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sdcl12", 11) == 0)
- {
-{
-return dev_storage + 1765;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sdck12", 11) == 0)
- {
-{
-return dev_storage + 1750;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sdcj12", 11) == 0)
- {
-{
-return dev_storage + 1735;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sdci12", 11) == 0)
- {
-{
-return dev_storage + 1720;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sdch12", 11) == 0)
- {
-{
-return dev_storage + 1705;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sdcg12", 11) == 0)
- {
-{
-return dev_storage + 1690;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sdcf12", 11) == 0)
- {
-{
-return dev_storage + 1675;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sdce12", 11) == 0)
- {
-{
-return dev_storage + 1660;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdcd12", 11) == 0)
- {
-{
-return dev_storage + 1645;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcc12", 11) == 0)
- {
-{
-return dev_storage + 1630;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdcb12", 11) == 0)
- {
-{
-return dev_storage + 1615;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdca12", 11) == 0)
- {
-{
-return dev_storage + 1600;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'b':
- switch (KR_keyword [8])
- {
- case 'z':
- if (strncmp (KR_keyword, "/dev/sdbz12", 11) == 0)
- {
-{
-return dev_storage + 1559;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'y':
- if (strncmp (KR_keyword, "/dev/sdby12", 11) == 0)
- {
-{
-return dev_storage + 1544;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'x':
- if (strncmp (KR_keyword, "/dev/sdbx12", 11) == 0)
- {
-{
-return dev_storage + 1529;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sdbw12", 11) == 0)
- {
-{
-return dev_storage + 1514;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sdbv12", 11) == 0)
- {
-{
-return dev_storage + 1499;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sdbu12", 11) == 0)
- {
-{
-return dev_storage + 1484;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- if (strncmp (KR_keyword, "/dev/sdbt12", 11) == 0)
- {
-{
-return dev_storage + 1469;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sdbs12", 11) == 0)
- {
-{
-return dev_storage + 1454;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sdbr12", 11) == 0)
- {
-{
-return dev_storage + 1439;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sdbq12", 11) == 0)
- {
-{
-return dev_storage + 1424;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sdbp12", 11) == 0)
- {
-{
-return dev_storage + 1409;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sdbo12", 11) == 0)
- {
-{
-return dev_storage + 1394;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/sdbn12", 11) == 0)
- {
-{
-return dev_storage + 1379;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'm':
- if (strncmp (KR_keyword, "/dev/sdbm12", 11) == 0)
- {
-{
-return dev_storage + 1364;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sdbl12", 11) == 0)
- {
-{
-return dev_storage + 1349;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sdbk12", 11) == 0)
- {
-{
-return dev_storage + 1334;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sdbj12", 11) == 0)
- {
-{
-return dev_storage + 1319;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sdbi12", 11) == 0)
- {
-{
-return dev_storage + 1304;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sdbh12", 11) == 0)
- {
-{
-return dev_storage + 1289;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sdbg12", 11) == 0)
- {
-{
-return dev_storage + 1274;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sdbf12", 11) == 0)
- {
-{
-return dev_storage + 1259;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sdbe12", 11) == 0)
- {
-{
-return dev_storage + 1244;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdbd12", 11) == 0)
- {
-{
-return dev_storage + 1229;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdbc12", 11) == 0)
- {
-{
-return dev_storage + 1214;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbb12", 11) == 0)
- {
-{
-return dev_storage + 1199;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdba12", 11) == 0)
- {
-{
-return dev_storage + 1184;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'a':
- switch (KR_keyword [8])
- {
- case 'z':
- if (strncmp (KR_keyword, "/dev/sdaz12", 11) == 0)
- {
-{
-return dev_storage + 1143;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'y':
- if (strncmp (KR_keyword, "/dev/sday12", 11) == 0)
- {
-{
-return dev_storage + 1128;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'x':
- if (strncmp (KR_keyword, "/dev/sdax12", 11) == 0)
- {
-{
-return dev_storage + 1113;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sdaw12", 11) == 0)
- {
-{
-return dev_storage + 1098;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sdav12", 11) == 0)
- {
-{
-return dev_storage + 1083;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sdau12", 11) == 0)
- {
-{
-return dev_storage + 1068;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- if (strncmp (KR_keyword, "/dev/sdat12", 11) == 0)
- {
-{
-return dev_storage + 1053;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sdas12", 11) == 0)
- {
-{
-return dev_storage + 1038;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sdar12", 11) == 0)
- {
-{
-return dev_storage + 1023;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sdaq12", 11) == 0)
- {
-{
-return dev_storage + 1008;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sdap12", 11) == 0)
- {
-{
-return dev_storage + 993;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sdao12", 11) == 0)
- {
-{
-return dev_storage + 978;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/sdan12", 11) == 0)
- {
-{
-return dev_storage + 963;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'm':
- if (strncmp (KR_keyword, "/dev/sdam12", 11) == 0)
- {
-{
-return dev_storage + 948;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sdal12", 11) == 0)
- {
-{
-return dev_storage + 933;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sdak12", 11) == 0)
- {
-{
-return dev_storage + 918;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sdaj12", 11) == 0)
- {
-{
-return dev_storage + 903;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sdai12", 11) == 0)
- {
-{
-return dev_storage + 888;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sdah12", 11) == 0)
- {
-{
-return dev_storage + 873;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sdag12", 11) == 0)
- {
-{
-return dev_storage + 858;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sdaf12", 11) == 0)
- {
-{
-return dev_storage + 843;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sdae12", 11) == 0)
- {
-{
-return dev_storage + 828;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdad12", 11) == 0)
- {
-{
-return dev_storage + 813;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdac12", 11) == 0)
- {
-{
-return dev_storage + 798;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdab12", 11) == 0)
- {
-{
-return dev_storage + 783;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdaa12", 11) == 0)
- {
-{
-return dev_storage + 768;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '1':
- switch (KR_keyword [7])
- {
- case 'y':
- switch (KR_keyword [9])
- {
- case '6':
- if (strncmp (KR_keyword, "/dev/ttyS61", 11) == 0)
- {
-{
-return dev_storage + 2569;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, "/dev/ttyS51", 11) == 0)
- {
-{
-return dev_storage + 2559;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/ttyS41", 11) == 0)
- {
-{
-return dev_storage + 2549;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/ttyS31", 11) == 0)
- {
-{
-return dev_storage + 2539;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/ttyS21", 11) == 0)
- {
-{
-return dev_storage + 2529;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/ttyS11", 11) == 0)
- {
-{
-return dev_storage + 2519;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 't':
- switch (KR_keyword [9])
- {
- case '2':
- if (strncmp (KR_keyword, "/dev/nst121", 11) == 0)
- {
-{
-return dev_storage + 225;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/nst111", 11) == 0)
- {
-{
-return dev_storage + 215;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '0':
- if (strncmp (KR_keyword, "/dev/nst101", 11) == 0)
- {
-{
-return dev_storage + 205;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'n':
- switch (KR_keyword [9])
- {
- case '6':
- if (strncmp (KR_keyword, "/dev/cons61", 11) == 0)
- {
-{
-return dev_storage + 81;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, "/dev/cons51", 11) == 0)
- {
-{
-return dev_storage + 71;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/cons41", 11) == 0)
- {
-{
-return dev_storage + 61;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/cons31", 11) == 0)
- {
-{
-return dev_storage + 51;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/cons21", 11) == 0)
- {
-{
-return dev_storage + 41;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/cons11", 11) == 0)
- {
-{
-return dev_storage + 31;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'd':
- switch (KR_keyword [8])
- {
- case 'x':
- if (strncmp (KR_keyword, "/dev/sddx11", 11) == 0)
- {
-{
-return dev_storage + 2358;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sddw11", 11) == 0)
- {
-{
-return dev_storage + 2343;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sddv11", 11) == 0)
- {
-{
-return dev_storage + 2328;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sddu11", 11) == 0)
- {
-{
-return dev_storage + 2313;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- if (strncmp (KR_keyword, "/dev/sddt11", 11) == 0)
- {
-{
-return dev_storage + 2298;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sdds11", 11) == 0)
- {
-{
-return dev_storage + 2283;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sddr11", 11) == 0)
- {
-{
-return dev_storage + 2268;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sddq11", 11) == 0)
- {
-{
-return dev_storage + 2253;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sddp11", 11) == 0)
- {
-{
-return dev_storage + 2238;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sddo11", 11) == 0)
- {
-{
-return dev_storage + 2223;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/sddn11", 11) == 0)
- {
-{
-return dev_storage + 2208;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'm':
- if (strncmp (KR_keyword, "/dev/sddm11", 11) == 0)
- {
-{
-return dev_storage + 2193;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sddl11", 11) == 0)
- {
-{
-return dev_storage + 2178;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sddk11", 11) == 0)
- {
-{
-return dev_storage + 2163;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sddj11", 11) == 0)
- {
-{
-return dev_storage + 2148;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sddi11", 11) == 0)
- {
-{
-return dev_storage + 2133;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sddh11", 11) == 0)
- {
-{
-return dev_storage + 2118;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sddg11", 11) == 0)
- {
-{
-return dev_storage + 2103;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sddf11", 11) == 0)
- {
-{
-return dev_storage + 2088;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sdde11", 11) == 0)
- {
-{
-return dev_storage + 2073;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddd11", 11) == 0)
- {
-{
-return dev_storage + 2058;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sddc11", 11) == 0)
- {
-{
-return dev_storage + 2043;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sddb11", 11) == 0)
- {
-{
-return dev_storage + 2028;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdda11", 11) == 0)
- {
-{
-return dev_storage + 2013;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'c':
- switch (KR_keyword [8])
- {
- case 'z':
- if (strncmp (KR_keyword, "/dev/sdcz11", 11) == 0)
- {
-{
-return dev_storage + 1974;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'y':
- if (strncmp (KR_keyword, "/dev/sdcy11", 11) == 0)
- {
-{
-return dev_storage + 1959;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'x':
- if (strncmp (KR_keyword, "/dev/sdcx11", 11) == 0)
- {
-{
-return dev_storage + 1944;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sdcw11", 11) == 0)
- {
-{
-return dev_storage + 1929;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sdcv11", 11) == 0)
- {
-{
-return dev_storage + 1914;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sdcu11", 11) == 0)
- {
-{
-return dev_storage + 1899;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- if (strncmp (KR_keyword, "/dev/sdct11", 11) == 0)
- {
-{
-return dev_storage + 1884;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sdcs11", 11) == 0)
- {
-{
-return dev_storage + 1869;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sdcr11", 11) == 0)
- {
-{
-return dev_storage + 1854;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sdcq11", 11) == 0)
- {
-{
-return dev_storage + 1839;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sdcp11", 11) == 0)
- {
-{
-return dev_storage + 1824;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sdco11", 11) == 0)
- {
-{
-return dev_storage + 1809;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/sdcn11", 11) == 0)
- {
-{
-return dev_storage + 1794;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'm':
- if (strncmp (KR_keyword, "/dev/sdcm11", 11) == 0)
- {
-{
-return dev_storage + 1779;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sdcl11", 11) == 0)
- {
-{
-return dev_storage + 1764;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sdck11", 11) == 0)
- {
-{
-return dev_storage + 1749;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sdcj11", 11) == 0)
- {
-{
-return dev_storage + 1734;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sdci11", 11) == 0)
- {
-{
-return dev_storage + 1719;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sdch11", 11) == 0)
- {
-{
-return dev_storage + 1704;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sdcg11", 11) == 0)
- {
-{
-return dev_storage + 1689;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sdcf11", 11) == 0)
- {
-{
-return dev_storage + 1674;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sdce11", 11) == 0)
- {
-{
-return dev_storage + 1659;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdcd11", 11) == 0)
- {
-{
-return dev_storage + 1644;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcc11", 11) == 0)
- {
-{
-return dev_storage + 1629;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdcb11", 11) == 0)
- {
-{
-return dev_storage + 1614;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdca11", 11) == 0)
- {
-{
-return dev_storage + 1599;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'b':
- switch (KR_keyword [8])
- {
- case 'z':
- if (strncmp (KR_keyword, "/dev/sdbz11", 11) == 0)
- {
-{
-return dev_storage + 1558;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'y':
- if (strncmp (KR_keyword, "/dev/sdby11", 11) == 0)
- {
-{
-return dev_storage + 1543;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'x':
- if (strncmp (KR_keyword, "/dev/sdbx11", 11) == 0)
- {
-{
-return dev_storage + 1528;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sdbw11", 11) == 0)
- {
-{
-return dev_storage + 1513;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sdbv11", 11) == 0)
- {
-{
-return dev_storage + 1498;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sdbu11", 11) == 0)
- {
-{
-return dev_storage + 1483;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- if (strncmp (KR_keyword, "/dev/sdbt11", 11) == 0)
- {
-{
-return dev_storage + 1468;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sdbs11", 11) == 0)
- {
-{
-return dev_storage + 1453;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sdbr11", 11) == 0)
- {
-{
-return dev_storage + 1438;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sdbq11", 11) == 0)
- {
-{
-return dev_storage + 1423;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sdbp11", 11) == 0)
- {
-{
-return dev_storage + 1408;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sdbo11", 11) == 0)
- {
-{
-return dev_storage + 1393;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/sdbn11", 11) == 0)
- {
-{
-return dev_storage + 1378;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'm':
- if (strncmp (KR_keyword, "/dev/sdbm11", 11) == 0)
- {
-{
-return dev_storage + 1363;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sdbl11", 11) == 0)
- {
-{
-return dev_storage + 1348;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sdbk11", 11) == 0)
- {
-{
-return dev_storage + 1333;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sdbj11", 11) == 0)
- {
-{
-return dev_storage + 1318;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sdbi11", 11) == 0)
- {
-{
-return dev_storage + 1303;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sdbh11", 11) == 0)
- {
-{
-return dev_storage + 1288;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sdbg11", 11) == 0)
- {
-{
-return dev_storage + 1273;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sdbf11", 11) == 0)
- {
-{
-return dev_storage + 1258;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sdbe11", 11) == 0)
- {
-{
-return dev_storage + 1243;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdbd11", 11) == 0)
- {
-{
-return dev_storage + 1228;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdbc11", 11) == 0)
- {
-{
-return dev_storage + 1213;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbb11", 11) == 0)
- {
-{
-return dev_storage + 1198;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdba11", 11) == 0)
- {
-{
-return dev_storage + 1183;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'a':
- switch (KR_keyword [8])
- {
- case 'z':
- if (strncmp (KR_keyword, "/dev/sdaz11", 11) == 0)
- {
-{
-return dev_storage + 1142;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'y':
- if (strncmp (KR_keyword, "/dev/sday11", 11) == 0)
- {
-{
-return dev_storage + 1127;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'x':
- if (strncmp (KR_keyword, "/dev/sdax11", 11) == 0)
- {
-{
-return dev_storage + 1112;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sdaw11", 11) == 0)
- {
-{
-return dev_storage + 1097;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sdav11", 11) == 0)
- {
-{
-return dev_storage + 1082;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sdau11", 11) == 0)
- {
-{
-return dev_storage + 1067;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- if (strncmp (KR_keyword, "/dev/sdat11", 11) == 0)
- {
-{
-return dev_storage + 1052;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sdas11", 11) == 0)
- {
-{
-return dev_storage + 1037;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sdar11", 11) == 0)
- {
-{
-return dev_storage + 1022;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sdaq11", 11) == 0)
- {
-{
-return dev_storage + 1007;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sdap11", 11) == 0)
- {
-{
-return dev_storage + 992;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sdao11", 11) == 0)
- {
-{
-return dev_storage + 977;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/sdan11", 11) == 0)
- {
-{
-return dev_storage + 962;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'm':
- if (strncmp (KR_keyword, "/dev/sdam11", 11) == 0)
- {
-{
-return dev_storage + 947;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sdal11", 11) == 0)
- {
-{
-return dev_storage + 932;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sdak11", 11) == 0)
- {
-{
-return dev_storage + 917;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sdaj11", 11) == 0)
- {
-{
-return dev_storage + 902;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sdai11", 11) == 0)
- {
-{
-return dev_storage + 887;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sdah11", 11) == 0)
- {
-{
-return dev_storage + 872;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sdag11", 11) == 0)
- {
-{
-return dev_storage + 857;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sdaf11", 11) == 0)
- {
-{
-return dev_storage + 842;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sdae11", 11) == 0)
- {
-{
-return dev_storage + 827;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdad11", 11) == 0)
- {
-{
-return dev_storage + 812;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdac11", 11) == 0)
- {
-{
-return dev_storage + 797;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdab11", 11) == 0)
- {
-{
-return dev_storage + 782;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdaa11", 11) == 0)
- {
-{
-return dev_storage + 767;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case '0':
- switch (KR_keyword [7])
- {
- case 'y':
- switch (KR_keyword [9])
- {
- case '6':
- if (strncmp (KR_keyword, "/dev/ttyS60", 11) == 0)
- {
-{
-return dev_storage + 2568;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, "/dev/ttyS50", 11) == 0)
- {
-{
-return dev_storage + 2558;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/ttyS40", 11) == 0)
- {
-{
-return dev_storage + 2548;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/ttyS30", 11) == 0)
- {
-{
-return dev_storage + 2538;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/ttyS20", 11) == 0)
- {
-{
-return dev_storage + 2528;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/ttyS10", 11) == 0)
- {
-{
-return dev_storage + 2518;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 't':
- switch (KR_keyword [9])
- {
- case '2':
- if (strncmp (KR_keyword, "/dev/nst120", 11) == 0)
- {
-{
-return dev_storage + 224;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/nst110", 11) == 0)
- {
-{
-return dev_storage + 214;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '0':
- if (strncmp (KR_keyword, "/dev/nst100", 11) == 0)
- {
-{
-return dev_storage + 204;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'n':
- switch (KR_keyword [9])
- {
- case '6':
- if (strncmp (KR_keyword, "/dev/cons60", 11) == 0)
- {
-{
-return dev_storage + 80;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '5':
- if (strncmp (KR_keyword, "/dev/cons50", 11) == 0)
- {
-{
-return dev_storage + 70;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '4':
- if (strncmp (KR_keyword, "/dev/cons40", 11) == 0)
- {
-{
-return dev_storage + 60;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '3':
- if (strncmp (KR_keyword, "/dev/cons30", 11) == 0)
- {
-{
-return dev_storage + 50;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '2':
- if (strncmp (KR_keyword, "/dev/cons20", 11) == 0)
- {
-{
-return dev_storage + 40;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case '1':
- if (strncmp (KR_keyword, "/dev/cons10", 11) == 0)
- {
-{
-return dev_storage + 30;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'd':
- switch (KR_keyword [8])
- {
- case 'x':
- if (strncmp (KR_keyword, "/dev/sddx10", 11) == 0)
- {
-{
-return dev_storage + 2357;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sddw10", 11) == 0)
- {
-{
-return dev_storage + 2342;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sddv10", 11) == 0)
- {
-{
-return dev_storage + 2327;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sddu10", 11) == 0)
- {
-{
-return dev_storage + 2312;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- if (strncmp (KR_keyword, "/dev/sddt10", 11) == 0)
- {
-{
-return dev_storage + 2297;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sdds10", 11) == 0)
- {
-{
-return dev_storage + 2282;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sddr10", 11) == 0)
- {
-{
-return dev_storage + 2267;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sddq10", 11) == 0)
- {
-{
-return dev_storage + 2252;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sddp10", 11) == 0)
- {
-{
-return dev_storage + 2237;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sddo10", 11) == 0)
- {
-{
-return dev_storage + 2222;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/sddn10", 11) == 0)
- {
-{
-return dev_storage + 2207;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'm':
- if (strncmp (KR_keyword, "/dev/sddm10", 11) == 0)
- {
-{
-return dev_storage + 2192;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sddl10", 11) == 0)
- {
-{
-return dev_storage + 2177;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sddk10", 11) == 0)
- {
-{
-return dev_storage + 2162;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sddj10", 11) == 0)
- {
-{
-return dev_storage + 2147;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sddi10", 11) == 0)
- {
-{
-return dev_storage + 2132;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sddh10", 11) == 0)
- {
-{
-return dev_storage + 2117;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sddg10", 11) == 0)
- {
-{
-return dev_storage + 2102;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sddf10", 11) == 0)
- {
-{
-return dev_storage + 2087;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sdde10", 11) == 0)
- {
-{
-return dev_storage + 2072;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sddd10", 11) == 0)
- {
-{
-return dev_storage + 2057;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sddc10", 11) == 0)
- {
-{
-return dev_storage + 2042;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sddb10", 11) == 0)
- {
-{
-return dev_storage + 2027;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdda10", 11) == 0)
- {
-{
-return dev_storage + 2012;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'c':
- switch (KR_keyword [8])
- {
- case 'z':
- if (strncmp (KR_keyword, "/dev/sdcz10", 11) == 0)
- {
-{
-return dev_storage + 1973;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'y':
- if (strncmp (KR_keyword, "/dev/sdcy10", 11) == 0)
- {
-{
-return dev_storage + 1958;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'x':
- if (strncmp (KR_keyword, "/dev/sdcx10", 11) == 0)
- {
-{
-return dev_storage + 1943;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sdcw10", 11) == 0)
- {
-{
-return dev_storage + 1928;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sdcv10", 11) == 0)
- {
-{
-return dev_storage + 1913;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sdcu10", 11) == 0)
- {
-{
-return dev_storage + 1898;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- if (strncmp (KR_keyword, "/dev/sdct10", 11) == 0)
- {
-{
-return dev_storage + 1883;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sdcs10", 11) == 0)
- {
-{
-return dev_storage + 1868;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sdcr10", 11) == 0)
- {
-{
-return dev_storage + 1853;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sdcq10", 11) == 0)
- {
-{
-return dev_storage + 1838;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sdcp10", 11) == 0)
- {
-{
-return dev_storage + 1823;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sdco10", 11) == 0)
- {
-{
-return dev_storage + 1808;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/sdcn10", 11) == 0)
- {
-{
-return dev_storage + 1793;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'm':
- if (strncmp (KR_keyword, "/dev/sdcm10", 11) == 0)
- {
-{
-return dev_storage + 1778;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sdcl10", 11) == 0)
- {
-{
-return dev_storage + 1763;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sdck10", 11) == 0)
- {
-{
-return dev_storage + 1748;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sdcj10", 11) == 0)
- {
-{
-return dev_storage + 1733;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sdci10", 11) == 0)
- {
-{
-return dev_storage + 1718;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sdch10", 11) == 0)
- {
-{
-return dev_storage + 1703;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sdcg10", 11) == 0)
- {
-{
-return dev_storage + 1688;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sdcf10", 11) == 0)
- {
-{
-return dev_storage + 1673;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sdce10", 11) == 0)
- {
-{
-return dev_storage + 1658;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdcd10", 11) == 0)
- {
-{
-return dev_storage + 1643;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdcc10", 11) == 0)
- {
-{
-return dev_storage + 1628;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdcb10", 11) == 0)
- {
-{
-return dev_storage + 1613;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdca10", 11) == 0)
- {
-{
-return dev_storage + 1598;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'b':
- switch (KR_keyword [8])
- {
- case 'z':
- if (strncmp (KR_keyword, "/dev/sdbz10", 11) == 0)
- {
-{
-return dev_storage + 1557;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'y':
- if (strncmp (KR_keyword, "/dev/sdby10", 11) == 0)
- {
-{
-return dev_storage + 1542;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'x':
- if (strncmp (KR_keyword, "/dev/sdbx10", 11) == 0)
- {
-{
-return dev_storage + 1527;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sdbw10", 11) == 0)
- {
-{
-return dev_storage + 1512;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sdbv10", 11) == 0)
- {
-{
-return dev_storage + 1497;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sdbu10", 11) == 0)
- {
-{
-return dev_storage + 1482;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- if (strncmp (KR_keyword, "/dev/sdbt10", 11) == 0)
- {
-{
-return dev_storage + 1467;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sdbs10", 11) == 0)
- {
-{
-return dev_storage + 1452;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sdbr10", 11) == 0)
- {
-{
-return dev_storage + 1437;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sdbq10", 11) == 0)
- {
-{
-return dev_storage + 1422;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sdbp10", 11) == 0)
- {
-{
-return dev_storage + 1407;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sdbo10", 11) == 0)
- {
-{
-return dev_storage + 1392;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/sdbn10", 11) == 0)
- {
-{
-return dev_storage + 1377;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'm':
- if (strncmp (KR_keyword, "/dev/sdbm10", 11) == 0)
- {
-{
-return dev_storage + 1362;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sdbl10", 11) == 0)
- {
-{
-return dev_storage + 1347;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sdbk10", 11) == 0)
- {
-{
-return dev_storage + 1332;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sdbj10", 11) == 0)
- {
-{
-return dev_storage + 1317;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sdbi10", 11) == 0)
- {
-{
-return dev_storage + 1302;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sdbh10", 11) == 0)
- {
-{
-return dev_storage + 1287;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sdbg10", 11) == 0)
- {
-{
-return dev_storage + 1272;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sdbf10", 11) == 0)
- {
-{
-return dev_storage + 1257;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sdbe10", 11) == 0)
- {
-{
-return dev_storage + 1242;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdbd10", 11) == 0)
- {
-{
-return dev_storage + 1227;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdbc10", 11) == 0)
- {
-{
-return dev_storage + 1212;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdbb10", 11) == 0)
- {
-{
-return dev_storage + 1197;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdba10", 11) == 0)
- {
-{
-return dev_storage + 1182;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 'a':
- switch (KR_keyword [8])
- {
- case 'z':
- if (strncmp (KR_keyword, "/dev/sdaz10", 11) == 0)
- {
-{
-return dev_storage + 1141;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'y':
- if (strncmp (KR_keyword, "/dev/sday10", 11) == 0)
- {
-{
-return dev_storage + 1126;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'x':
- if (strncmp (KR_keyword, "/dev/sdax10", 11) == 0)
- {
-{
-return dev_storage + 1111;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'w':
- if (strncmp (KR_keyword, "/dev/sdaw10", 11) == 0)
- {
-{
-return dev_storage + 1096;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'v':
- if (strncmp (KR_keyword, "/dev/sdav10", 11) == 0)
- {
-{
-return dev_storage + 1081;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/sdau10", 11) == 0)
- {
-{
-return dev_storage + 1066;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 't':
- if (strncmp (KR_keyword, "/dev/sdat10", 11) == 0)
- {
-{
-return dev_storage + 1051;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 's':
- if (strncmp (KR_keyword, "/dev/sdas10", 11) == 0)
- {
-{
-return dev_storage + 1036;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'r':
- if (strncmp (KR_keyword, "/dev/sdar10", 11) == 0)
- {
-{
-return dev_storage + 1021;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'q':
- if (strncmp (KR_keyword, "/dev/sdaq10", 11) == 0)
- {
-{
-return dev_storage + 1006;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'p':
- if (strncmp (KR_keyword, "/dev/sdap10", 11) == 0)
- {
-{
-return dev_storage + 991;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'o':
- if (strncmp (KR_keyword, "/dev/sdao10", 11) == 0)
- {
-{
-return dev_storage + 976;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'n':
- if (strncmp (KR_keyword, "/dev/sdan10", 11) == 0)
- {
-{
-return dev_storage + 961;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'm':
- if (strncmp (KR_keyword, "/dev/sdam10", 11) == 0)
- {
-{
-return dev_storage + 946;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'l':
- if (strncmp (KR_keyword, "/dev/sdal10", 11) == 0)
- {
-{
-return dev_storage + 931;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'k':
- if (strncmp (KR_keyword, "/dev/sdak10", 11) == 0)
- {
-{
-return dev_storage + 916;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'j':
- if (strncmp (KR_keyword, "/dev/sdaj10", 11) == 0)
- {
-{
-return dev_storage + 901;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'i':
- if (strncmp (KR_keyword, "/dev/sdai10", 11) == 0)
- {
-{
-return dev_storage + 886;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'h':
- if (strncmp (KR_keyword, "/dev/sdah10", 11) == 0)
- {
-{
-return dev_storage + 871;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'g':
- if (strncmp (KR_keyword, "/dev/sdag10", 11) == 0)
- {
-{
-return dev_storage + 856;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'f':
- if (strncmp (KR_keyword, "/dev/sdaf10", 11) == 0)
- {
-{
-return dev_storage + 841;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'e':
- if (strncmp (KR_keyword, "/dev/sdae10", 11) == 0)
- {
-{
-return dev_storage + 826;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'd':
- if (strncmp (KR_keyword, "/dev/sdad10", 11) == 0)
- {
-{
-return dev_storage + 811;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/sdac10", 11) == 0)
- {
-{
-return dev_storage + 796;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'b':
- if (strncmp (KR_keyword, "/dev/sdab10", 11) == 0)
- {
-{
-return dev_storage + 781;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'a':
- if (strncmp (KR_keyword, "/dev/sdaa10", 11) == 0)
- {
-{
-return dev_storage + 766;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 12:
- switch (KR_keyword [5])
- {
- case 'w':
- if (strncmp (KR_keyword, "/dev/windows", 12) == 0)
- {
-{
-return dev_storage + 2573;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'u':
- if (strncmp (KR_keyword, "/dev/urandom", 12) == 0)
- {
-{
-return dev_storage + 2572;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- case 'c':
- if (strncmp (KR_keyword, "/dev/console", 12) == 0)
- {
-{
-return dev_storage + 84;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
- case 14:
- if (strncmp (KR_keyword, "/dev/clipboard", 14) == 0)
- {
-{
-return dev_storage + 1;
-
-}
- }
- else
- {
-{
-return NULL;
-
-}
- }
- default:
-{
-return NULL;
-
-}
- }
-}
-
-
-
-
-
-
-#undef BRACK
-
-const device *dev_storage_end = dev_storage + (sizeof dev_storage / sizeof dev_storage[0]);
-
-void
-device::parse (const char *s)
-{
- size_t len = strlen (s);
- const device *dev = KR_find_keyword (s, len);
-
- if (!dev)
- *this = *fs_dev;
- else
- *this = *dev;
-}
-
-void
-device::init ()
-{
- /* nothing to do... yet */
-}
-
-void
-device::parse (_major_t major, _minor_t minor)
-{
- dev_t devn = FHDEV (major, minor);
-
- d.devn = 0;
-
- for (const device *devidx = dev_storage; devidx < dev_storage_end; devidx++)
- if (devidx->d.devn == devn)
- {
- *this = *devidx;
- break;
- }
-
- if (!*this)
- d.devn = FHDEV (major, minor);
-}
-
-void
-device::parse (dev_t dev)
-{
- parse (_major (dev), _minor (dev));
-}
-
-void
-device::parsedisk (int drive, int part)
-{
- int base;
- if (drive < ('q' - 'a')) /* /dev/sda -to- /dev/sdp */
- base = DEV_SD_MAJOR;
- else if (drive < 32) /* /dev/sdq -to- /dev/sdaf */
- {
- base = DEV_SD1_MAJOR;
- drive -= 'q' - 'a';
- }
- else if (drive < 48) /* /dev/sdag -to- /dev/sdav */
- {
- base = DEV_SD2_MAJOR;
- drive -= 32;
- }
- else if (drive < 64) /* /dev/sdaw -to- /dev/sdbl */
- {
- base = DEV_SD3_MAJOR;
- drive -= 48;
- }
- else if (drive < 80) /* /dev/sdbm -to- /dev/sdcb */
- {
- base = DEV_SD4_MAJOR;
- drive -= 64;
- }
- else if (drive < 96) /* /dev/sdcc -to- /dev/sdcr */
- {
- base = DEV_SD5_MAJOR;
- drive -= 80;
- }
- else if (drive < 112) /* /dev/sdcs -to- /dev/sddh */
- {
- base = DEV_SD6_MAJOR;
- drive -= 96;
- }
- /* NOTE: This will cause multiple /dev/sddx entries in
- /proc/partitions if there are more than 128 devices */
- else /* /dev/sddi -to- /dev/sddx */
- {
- base = DEV_SD7_MAJOR;
- drive -= 112;
- }
- parse (base, part + (drive * 16));
-}
-
-
diff --git a/winsup/cygwin/devices.h b/winsup/cygwin/devices.h
deleted file mode 100644
index 21120bdfc..000000000
--- a/winsup/cygwin/devices.h
+++ /dev/null
@@ -1,380 +0,0 @@
-/* devices.h
-
- Copyright 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2011, 2012 Red
- Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#pragma once
-
-typedef unsigned short _major_t;
-typedef unsigned short _minor_t;
-typedef mode_t _mode_t;
-
-#define FHDEV(maj, min) ((((unsigned) (maj)) << (sizeof (_major_t) * 8)) | (unsigned) (min))
-#define _minor(dev) ((dev) & ((1 << (sizeof (_minor_t) * 8)) - 1))
-#define _major(dev) ((dev) >> (sizeof (_major_t) * 8))
-
-#include <sys/stat.h>
-#include <dirent.h>
-
-#define MAX_CONSOLES 63
-enum fh_devices
-{
- DEV_TTY_MAJOR = 5,
- FH_TTY = FHDEV (DEV_TTY_MAJOR, 0),
- FH_CONSOLE = FHDEV (DEV_TTY_MAJOR, 1),
- FH_PTMX = FHDEV (DEV_TTY_MAJOR, 2),
- FH_CONIN = FHDEV (DEV_TTY_MAJOR, 255),
- FH_CONOUT = FHDEV (DEV_TTY_MAJOR, 254),
-
- DEV_CONS_MAJOR = 3,
- FH_CONS = FHDEV (DEV_CONS_MAJOR, 0),
- FH_CONS_MAX = FHDEV (DEV_CONS_MAJOR, MAX_CONSOLES),
-
- DEV_PTYM_MAJOR = 128,
- FH_PTYM = FHDEV (DEV_PTYM_MAJOR, 0),
- FH_PTYM_MAX= FHDEV (DEV_PTYM_MAJOR, 255),
-
- DEV_PTYS_MAJOR = 136,
- FH_PTYS = FHDEV (DEV_PTYS_MAJOR, 0), /* FIXME: Should separate ttys and ptys */
- FH_PTYS_MAX= FHDEV (DEV_PTYS_MAJOR, 255), /* FIXME: Should separate ttys and ptys */
-
- DEV_SERIAL_MAJOR = 117,
- FH_SERIAL = FHDEV (117, 0), /* /dev/ttyS? */
-
- DEV_MISC_MAJOR = 13,
- FH_WINDOWS = FHDEV (DEV_MISC_MAJOR, 255),
- FH_CLIPBOARD=FHDEV (DEV_MISC_MAJOR, 254),
-
- /* begin /proc directories */
-
- DEV_VIRTFS_MAJOR = 0,
- FH_PROC_MIN_MINOR = FHDEV (DEV_VIRTFS_MAJOR, 200),
- FH_PROCSYSVIPC = FHDEV (DEV_VIRTFS_MAJOR, 249),
- FH_PROCSYS = FHDEV (DEV_VIRTFS_MAJOR, 250),
- FH_PROCESSFD = FHDEV (DEV_VIRTFS_MAJOR, 251),
- FH_PROCNET = FHDEV (DEV_VIRTFS_MAJOR, 252),
- FH_REGISTRY= FHDEV (DEV_VIRTFS_MAJOR, 253),
- FH_PROCESS = FHDEV (DEV_VIRTFS_MAJOR, 254),
- FH_PROC = FHDEV (DEV_VIRTFS_MAJOR, 255),
- FH_PROC_MAX_MINOR = FHDEV (DEV_VIRTFS_MAJOR, 255),
-
- /* end /proc directories */
-
- FH_PIPE = FHDEV (DEV_VIRTFS_MAJOR, 199),
- FH_PIPER = FHDEV (DEV_VIRTFS_MAJOR, 198),
- FH_PIPEW = FHDEV (DEV_VIRTFS_MAJOR, 197),
- FH_FIFO = FHDEV (DEV_VIRTFS_MAJOR, 196),
- FH_FS = FHDEV (DEV_VIRTFS_MAJOR, 195), /* filesystem based device */
- FH_NETDRIVE= FHDEV (DEV_VIRTFS_MAJOR, 194),
- FH_DEV = FHDEV (DEV_VIRTFS_MAJOR, 193),
- FH_CYGDRIVE= FHDEV (DEV_VIRTFS_MAJOR, 192),
-
- DEV_FLOPPY_MAJOR = 2,
- FH_FLOPPY = FHDEV (DEV_FLOPPY_MAJOR, 0),
-
- DEV_CDROM_MAJOR = 11,
- FH_CDROM = FHDEV (DEV_CDROM_MAJOR, 0),
-
- DEV_TAPE_MAJOR = 9,
- FH_TAPE = FHDEV (DEV_TAPE_MAJOR, 0),
- FH_NTAPE = FHDEV (DEV_TAPE_MAJOR, 128),
- FH_MAXNTAPE= FHDEV (DEV_TAPE_MAJOR, 255),
-
- DEV_SD_MAJOR = 8,
- DEV_SD1_MAJOR = 65,
- DEV_SD2_MAJOR = 66,
- DEV_SD3_MAJOR = 67,
- DEV_SD4_MAJOR = 68,
- DEV_SD5_MAJOR = 69,
- DEV_SD6_MAJOR = 70,
- DEV_SD7_MAJOR = 71,
- FH_SD = FHDEV (DEV_SD_MAJOR, 0),
- FH_SD1 = FHDEV (DEV_SD1_MAJOR, 0),
- FH_SD2 = FHDEV (DEV_SD2_MAJOR, 0),
- FH_SD3 = FHDEV (DEV_SD3_MAJOR, 0),
- FH_SD4 = FHDEV (DEV_SD4_MAJOR, 0),
- FH_SD5 = FHDEV (DEV_SD5_MAJOR, 0),
- FH_SD6 = FHDEV (DEV_SD6_MAJOR, 0),
- FH_SD7 = FHDEV (DEV_SD7_MAJOR, 0),
- FH_SDA = FHDEV (DEV_SD_MAJOR, 0),
- FH_SDB = FHDEV (DEV_SD_MAJOR, 16),
- FH_SDC = FHDEV (DEV_SD_MAJOR, 32),
- FH_SDD = FHDEV (DEV_SD_MAJOR, 48),
- FH_SDE = FHDEV (DEV_SD_MAJOR, 64),
- FH_SDF = FHDEV (DEV_SD_MAJOR, 80),
- FH_SDG = FHDEV (DEV_SD_MAJOR, 96),
- FH_SDH = FHDEV (DEV_SD_MAJOR, 112),
- FH_SDI = FHDEV (DEV_SD_MAJOR, 128),
- FH_SDJ = FHDEV (DEV_SD_MAJOR, 144),
- FH_SDK = FHDEV (DEV_SD_MAJOR, 160),
- FH_SDL = FHDEV (DEV_SD_MAJOR, 176),
- FH_SDM = FHDEV (DEV_SD_MAJOR, 192),
- FH_SDN = FHDEV (DEV_SD_MAJOR, 208),
- FH_SDO = FHDEV (DEV_SD_MAJOR, 224),
- FH_SDP = FHDEV (DEV_SD_MAJOR, 240),
- FH_SDQ = FHDEV (DEV_SD1_MAJOR, 0),
- FH_SDR = FHDEV (DEV_SD1_MAJOR, 16),
- FH_SDS = FHDEV (DEV_SD1_MAJOR, 32),
- FH_SDT = FHDEV (DEV_SD1_MAJOR, 48),
- FH_SDU = FHDEV (DEV_SD1_MAJOR, 64),
- FH_SDV = FHDEV (DEV_SD1_MAJOR, 80),
- FH_SDW = FHDEV (DEV_SD1_MAJOR, 96),
- FH_SDX = FHDEV (DEV_SD1_MAJOR, 112),
- FH_SDY = FHDEV (DEV_SD1_MAJOR, 128),
- FH_SDZ = FHDEV (DEV_SD1_MAJOR, 144),
- FH_SDAA = FHDEV (DEV_SD1_MAJOR, 160),
- FH_SDAB = FHDEV (DEV_SD1_MAJOR, 176),
- FH_SDAC = FHDEV (DEV_SD1_MAJOR, 192),
- FH_SDAD = FHDEV (DEV_SD1_MAJOR, 208),
- FH_SDAE = FHDEV (DEV_SD1_MAJOR, 224),
- FH_SDAF = FHDEV (DEV_SD1_MAJOR, 240),
- FH_SDAG = FHDEV (DEV_SD2_MAJOR, 0),
- FH_SDAH = FHDEV (DEV_SD2_MAJOR, 16),
- FH_SDAI = FHDEV (DEV_SD2_MAJOR, 32),
- FH_SDAJ = FHDEV (DEV_SD2_MAJOR, 48),
- FH_SDAK = FHDEV (DEV_SD2_MAJOR, 64),
- FH_SDAL = FHDEV (DEV_SD2_MAJOR, 80),
- FH_SDAM = FHDEV (DEV_SD2_MAJOR, 96),
- FH_SDAN = FHDEV (DEV_SD2_MAJOR, 112),
- FH_SDAO = FHDEV (DEV_SD2_MAJOR, 128),
- FH_SDAP = FHDEV (DEV_SD2_MAJOR, 144),
- FH_SDAQ = FHDEV (DEV_SD2_MAJOR, 160),
- FH_SDAR = FHDEV (DEV_SD2_MAJOR, 176),
- FH_SDAS = FHDEV (DEV_SD2_MAJOR, 192),
- FH_SDAT = FHDEV (DEV_SD2_MAJOR, 208),
- FH_SDAU = FHDEV (DEV_SD2_MAJOR, 224),
- FH_SDAV = FHDEV (DEV_SD2_MAJOR, 240),
- FH_SDAW = FHDEV (DEV_SD3_MAJOR, 0),
- FH_SDAX = FHDEV (DEV_SD3_MAJOR, 16),
- FH_SDAY = FHDEV (DEV_SD3_MAJOR, 32),
- FH_SDAZ = FHDEV (DEV_SD3_MAJOR, 48),
- FH_SDBA = FHDEV (DEV_SD3_MAJOR, 64),
- FH_SDBB = FHDEV (DEV_SD3_MAJOR, 80),
- FH_SDBC = FHDEV (DEV_SD3_MAJOR, 96),
- FH_SDBD = FHDEV (DEV_SD3_MAJOR, 112),
- FH_SDBE = FHDEV (DEV_SD3_MAJOR, 128),
- FH_SDBF = FHDEV (DEV_SD3_MAJOR, 144),
- FH_SDBG = FHDEV (DEV_SD3_MAJOR, 160),
- FH_SDBH = FHDEV (DEV_SD3_MAJOR, 176),
- FH_SDBI = FHDEV (DEV_SD3_MAJOR, 192),
- FH_SDBJ = FHDEV (DEV_SD3_MAJOR, 208),
- FH_SDBK = FHDEV (DEV_SD3_MAJOR, 224),
- FH_SDBL = FHDEV (DEV_SD3_MAJOR, 240),
- FH_SDBM = FHDEV (DEV_SD4_MAJOR, 0),
- FH_SDBN = FHDEV (DEV_SD4_MAJOR, 16),
- FH_SDBO = FHDEV (DEV_SD4_MAJOR, 32),
- FH_SDBP = FHDEV (DEV_SD4_MAJOR, 48),
- FH_SDBQ = FHDEV (DEV_SD4_MAJOR, 64),
- FH_SDBR = FHDEV (DEV_SD4_MAJOR, 80),
- FH_SDBS = FHDEV (DEV_SD4_MAJOR, 96),
- FH_SDBT = FHDEV (DEV_SD4_MAJOR, 112),
- FH_SDBU = FHDEV (DEV_SD4_MAJOR, 128),
- FH_SDBV = FHDEV (DEV_SD4_MAJOR, 144),
- FH_SDBW = FHDEV (DEV_SD4_MAJOR, 160),
- FH_SDBX = FHDEV (DEV_SD4_MAJOR, 176),
- FH_SDBY = FHDEV (DEV_SD4_MAJOR, 192),
- FH_SDBZ = FHDEV (DEV_SD4_MAJOR, 208),
- FH_SDCA = FHDEV (DEV_SD4_MAJOR, 224),
- FH_SDCB = FHDEV (DEV_SD4_MAJOR, 240),
- FH_SDCC = FHDEV (DEV_SD5_MAJOR, 0),
- FH_SDCD = FHDEV (DEV_SD5_MAJOR, 16),
- FH_SDCE = FHDEV (DEV_SD5_MAJOR, 32),
- FH_SDCF = FHDEV (DEV_SD5_MAJOR, 48),
- FH_SDCG = FHDEV (DEV_SD5_MAJOR, 64),
- FH_SDCH = FHDEV (DEV_SD5_MAJOR, 80),
- FH_SDCI = FHDEV (DEV_SD5_MAJOR, 96),
- FH_SDCJ = FHDEV (DEV_SD5_MAJOR, 112),
- FH_SDCK = FHDEV (DEV_SD5_MAJOR, 128),
- FH_SDCL = FHDEV (DEV_SD5_MAJOR, 144),
- FH_SDCM = FHDEV (DEV_SD5_MAJOR, 160),
- FH_SDCN = FHDEV (DEV_SD5_MAJOR, 176),
- FH_SDCO = FHDEV (DEV_SD5_MAJOR, 192),
- FH_SDCP = FHDEV (DEV_SD5_MAJOR, 208),
- FH_SDCQ = FHDEV (DEV_SD5_MAJOR, 224),
- FH_SDCR = FHDEV (DEV_SD5_MAJOR, 240),
- FH_SDCS = FHDEV (DEV_SD6_MAJOR, 0),
- FH_SDCT = FHDEV (DEV_SD6_MAJOR, 16),
- FH_SDCU = FHDEV (DEV_SD6_MAJOR, 32),
- FH_SDCV = FHDEV (DEV_SD6_MAJOR, 48),
- FH_SDCW = FHDEV (DEV_SD6_MAJOR, 64),
- FH_SDCX = FHDEV (DEV_SD6_MAJOR, 80),
- FH_SDCY = FHDEV (DEV_SD6_MAJOR, 96),
- FH_SDCZ = FHDEV (DEV_SD6_MAJOR, 112),
- FH_SDDA = FHDEV (DEV_SD6_MAJOR, 128),
- FH_SDDB = FHDEV (DEV_SD6_MAJOR, 144),
- FH_SDDC = FHDEV (DEV_SD6_MAJOR, 160),
- FH_SDDD = FHDEV (DEV_SD6_MAJOR, 176),
- FH_SDDE = FHDEV (DEV_SD6_MAJOR, 192),
- FH_SDDF = FHDEV (DEV_SD6_MAJOR, 208),
- FH_SDDG = FHDEV (DEV_SD6_MAJOR, 224),
- FH_SDDH = FHDEV (DEV_SD6_MAJOR, 240),
- FH_SDDI = FHDEV (DEV_SD7_MAJOR, 0),
- FH_SDDJ = FHDEV (DEV_SD7_MAJOR, 16),
- FH_SDDK = FHDEV (DEV_SD7_MAJOR, 32),
- FH_SDDL = FHDEV (DEV_SD7_MAJOR, 48),
- FH_SDDM = FHDEV (DEV_SD7_MAJOR, 64),
- FH_SDDN = FHDEV (DEV_SD7_MAJOR, 80),
- FH_SDDO = FHDEV (DEV_SD7_MAJOR, 96),
- FH_SDDP = FHDEV (DEV_SD7_MAJOR, 112),
- FH_SDDQ = FHDEV (DEV_SD7_MAJOR, 128),
- FH_SDDR = FHDEV (DEV_SD7_MAJOR, 144),
- FH_SDDS = FHDEV (DEV_SD7_MAJOR, 160),
- FH_SDDT = FHDEV (DEV_SD7_MAJOR, 176),
- FH_SDDU = FHDEV (DEV_SD7_MAJOR, 192),
- FH_SDDV = FHDEV (DEV_SD7_MAJOR, 208),
- FH_SDDW = FHDEV (DEV_SD7_MAJOR, 224),
- FH_SDDX = FHDEV (DEV_SD7_MAJOR, 240),
-
- DEV_MEM_MAJOR = 1,
- FH_NULL = FHDEV (DEV_MEM_MAJOR, 3),
- FH_ZERO = FHDEV (DEV_MEM_MAJOR, 5),
- FH_FULL = FHDEV (DEV_MEM_MAJOR, 7),
- FH_RANDOM = FHDEV (DEV_MEM_MAJOR, 8),
- FH_URANDOM = FHDEV (DEV_MEM_MAJOR, 9),
- FH_KMSG = FHDEV (DEV_MEM_MAJOR, 11),
-
- DEV_SOUND_MAJOR = 14,
- FH_OSS_DSP = FHDEV (DEV_SOUND_MAJOR, 3),
-
- DEV_TCP_MAJOR = 30,
- FH_TCP = FHDEV (DEV_TCP_MAJOR, 36),
- FH_UDP = FHDEV (DEV_TCP_MAJOR, 39),
- FH_ICMP = FHDEV (DEV_TCP_MAJOR, 33),
- FH_UNIX = FHDEV (DEV_TCP_MAJOR, 120),
- FH_STREAM = FHDEV (DEV_TCP_MAJOR, 121),
- FH_DGRAM = FHDEV (DEV_TCP_MAJOR, 122),
-
- FH_NADA = FHDEV (0, 0),
- FH_ERROR = FHDEV (255, 255) /* Set by fh constructor when error detected */
-};
-
-struct device
-{
- const char *name;
- union __cygwin_dev
- {
- dev_t devn;
- DWORD devn_dword;
- int devn_int;
- fh_devices devn_fh_devices;
- struct
- {
- _minor_t minor;
- _major_t major;
- };
- } d;
- const char *native;
- int (*exists_func) (const device&);
- _mode_t mode;
- bool lives_in_dev:4;
- bool dev_on_fs:4;
- static const device *lookup (const char *, unsigned int = UINT32_MAX);
- void parse (const char *);
- void parse (_major_t major, _minor_t minor);
- void parse (dev_t dev);
- void parsedisk (int, int);
- inline bool setunit (unsigned n)
- {
- d.minor = n;
- return true;
- }
- static void init ();
-
- static _major_t major (dev_t n)
- {
- __cygwin_dev d;
- d.devn = n;
- return d.major;
- }
- static _minor_t minor (dev_t n)
- {
- __cygwin_dev d;
- d.devn = n;
- return d.minor;
- }
- static _major_t major (int n) {return major ((dev_t) n);}
- static _minor_t minor (int n) {return minor ((dev_t) n);}
-
- bool is_device (dev_t n) const {return n == d.devn; }
- bool not_device (dev_t n) const {return d.devn && n != d.devn; }
-
- _minor_t get_minor () const {return d.minor;}
- _major_t get_major () const {return d.major;}
- dev_t get_device () const {return d.devn;}
-
- inline operator fh_devices () {return d.devn_fh_devices;}
- inline operator bool () {return !!d.devn_int;}
- inline operator dev_t& () {return d.devn;}
- fh_devices operator = (fh_devices n) {return d.devn_fh_devices = n;}
- inline void setfs (bool x) {dev_on_fs = x;}
- inline bool isfs () const {return dev_on_fs || d.devn == FH_FS;}
- inline bool is_fs_special () const {return dev_on_fs && d.devn != FH_FS;}
- inline bool is_dev_resident () const {return lives_in_dev;}
- inline int exists () const {return exists_func (*this);}
- unsigned char type () const
- {
- if (S_ISBLK (mode))
- return DT_BLK;
- return mode >> 12;
- }
-};
-
-extern const device dev_storage[];
-extern const device *dev_storage_end;
-
-extern const device *console_dev;
-extern const device *ptmx_dev;
-extern const device *ptys_dev;
-extern const device *urandom_dev;
-
-extern const device dev_dgram_storage;
-#define dgram_dev (&dev_dgram_storage)
-extern const device dev_stream_storage;
-#define stream_dev (&dev_stream_storage)
-extern const device dev_tcp_storage;
-#define tcp_dev (&dev_tcp_storage)
-extern const device dev_udp_storage;
-#define udp_dev (&dev_udp_storage)
-
-extern const device dev_piper_storage;
-#define piper_dev (&dev_piper_storage)
-extern const device dev_pipew_storage;
-#define pipew_dev (&dev_pipew_storage)
-extern const device dev_proc_storage;
-#define proc_dev (&dev_proc_storage)
-extern const device dev_dev_storage;
-#define dev_dev (&dev_dev_storage)
-extern const device dev_netdrive_storage;
-#define netdrive_dev (&dev_netdrive_storage)
-extern const device dev_cygdrive_storage;
-#define cygdrive_dev (&dev_cygdrive_storage)
-extern const device dev_fh_storage;
-#define fh_dev (&dev_fh_storage)
-extern const device dev_fs_storage;
-#define fs_dev (&dev_fs_storage)
-
-#define isproc_dev(devn) \
- (devn >= FH_PROC_MIN_MINOR && devn <= FH_PROC_MAX_MINOR)
-
-#define iscygdrive_dev(devn) (devn == FH_CYGDRIVE)
-
-#define isdev_dev(devn) (devn == FH_DEV)
-
-#define isprocsys_dev(devn) (devn == FH_PROCSYS)
-
-#define isvirtual_dev(devn) \
- (isproc_dev (devn) || devn == FH_CYGDRIVE || devn == FH_NETDRIVE)
-
-#define iscons_dev(n) \
- ((device::major ((dev_t) (n)) == DEV_CONS_MAJOR) \
- || (((dev_t) n) == FH_CONSOLE) \
- || (((dev_t) n) == FH_CONIN) \
- || (((dev_t) n) == FH_CONOUT))
-
-#define istty_slave_dev(n) (device::major (n) == DEV_PTYS_MAJOR)
diff --git a/winsup/cygwin/devices.in b/winsup/cygwin/devices.in
deleted file mode 100644
index c43f11c0f..000000000
--- a/winsup/cygwin/devices.in
+++ /dev/null
@@ -1,272 +0,0 @@
-%import {
-#include "winsup.h"
-#include "devices.h"
-#include "sys/cygwin.h"
-#include "tty.h"
-#include "pinfo.h"
-#include "shared_info.h"
-#include "path.h"
-#include "fhandler.h"
-#include "ntdll.h"
-
-typedef const device *KR_device_t;
-}
-%type KR_device_t
-%local {
-
-static int
-exists_internal (const device&)
-{
- return false;
-}
-
-static int
-exists (const device&)
-{
- return true;
-}
-
-/* Check existence of POSIX devices backed by real NT devices. */
-static int
-exists_ntdev (const device& dev)
-{
- WCHAR wpath[MAX_PATH];
- UNICODE_STRING upath;
- OBJECT_ATTRIBUTES attr;
- HANDLE h;
- NTSTATUS status;
-
- sys_mbstowcs (wpath, MAX_PATH, dev.native);
- RtlInitUnicodeString (&upath, wpath);
- InitializeObjectAttributes (&attr, &upath, OBJ_CASE_INSENSITIVE, NULL, NULL);
- /* Except for the serial IO devices, the native paths are
- direct device paths, not symlinks, so every status code
- except for "NOT_FOUND" means the device exists. */
- status = NtOpenSymbolicLinkObject (&h, SYMBOLIC_LINK_QUERY, &attr);
- switch (status)
- {
- case STATUS_OBJECT_NAME_NOT_FOUND:
- case STATUS_OBJECT_PATH_NOT_FOUND:
- return false;
- case STATUS_SUCCESS:
- NtClose (h);
- default:
- break;
- }
- return true;
-}
-
-/* Don't list via readdir but allow as a direct reference. */
-static int
-exists_ntdev_silent (const device& dev)
-{
- return exists_ntdev (dev) ? -1 : false;
-}
-
-static int
-exists_console (const device& dev)
-{
- fh_devices devn = *const_cast<device *> (&dev);
- switch (devn)
- {
- case FH_CONSOLE:
- case FH_CONIN:
- case FH_CONOUT:
- return fhandler_console::exists ();
- default:
- /* Only show my own console device (for now?) */
- return iscons_dev (myself->ctty) && myself->ctty == devn;
- }
-}
-
-static int
-exists_pty (const device& dev)
-{
- /* Only existing slave ptys. */
- return cygwin_shared->tty.connect (dev.get_minor ()) != -1;
-}
-
-const device dev_cygdrive_storage =
- {"/cygdrive", {FH_CYGDRIVE}, "", exists};
-
-const device dev_fs_storage =
- {"", {FH_FS}, "", exists};
-
-const device dev_proc_storage =
- {"", {FH_PROC}, "", exists};
-
-const device dev_procnet_storage =
- {"", {FH_PROCNET}, "", exists};
-
-const device dev_procsys_storage =
- {"", {FH_PROCSYS}, "", exists};
-
-const device dev_procsysvipc_storage =
- {"", {FH_PROCSYSVIPC}, "", exists};
-
-const device dev_netdrive_storage =
- {"", {FH_NETDRIVE}, "", exists};
-
-const device dev_registry_storage =
- {"", {FH_REGISTRY}, "", exists_internal};
-
-const device dev_piper_storage =
- {"", {FH_PIPER}, "", exists_internal};
-
-const device dev_pipew_storage =
- {"", {FH_PIPEW}, "", exists_internal};
-
-const device dev_tcp_storage =
- {"", {FH_TCP}, "", exists_internal};
-
-const device dev_udp_storage =
- {"", {FH_UDP}, "", exists_internal};
-
-const device dev_stream_storage =
- {"", {FH_STREAM}, "", exists_internal};
-
-const device dev_dgram_storage =
- {"", {FH_DGRAM}, "", exists_internal};
-
-const device dev_bad_storage =
- {"", {FH_NADA}, "", exists_internal};
-
-const device dev_error_storage =
- {"", {FH_ERROR}, "", exists_internal};
-
-#define BRACK(x) {devn_int: x}
-%storage_here
-}
-/* Internal devices below are prefixed with a ":". This moves them out of
- the POSIX namespace. */
-%%
-"/dev", BRACK(FH_DEV), "", exists, S_IFDIR
-"/dev/tty", BRACK(FH_TTY), "/dev/tty", exists, S_IFCHR
-"/dev/pty%(0-63)d", BRACK(FHDEV(DEV_PTYS_MAJOR, {$1})), "/dev/pty{$1}", exists_pty, S_IFCHR, =ptys_dev
-":ptym%(0-63)d", BRACK(FHDEV(DEV_PTYM_MAJOR, {$1})), "/dev/ptym{$1}", exists_internal, S_IFCHR, =ptym_dev
-"/dev/cons%(0-63)d", BRACK(FHDEV(DEV_CONS_MAJOR, {$1})), "/dev/cons{$1}", exists_console, S_IFCHR, =cons_dev
-"/dev/console", BRACK(FH_CONSOLE), "/dev/console", exists_console, S_IFCHR, =console_dev
-"/dev/ptmx", BRACK(FH_PTMX), "/dev/ptmx", exists, S_IFCHR
-"/dev/windows", BRACK(FH_WINDOWS), "\\Device\\Null", exists_ntdev, S_IFCHR
-"/dev/dsp", BRACK(FH_OSS_DSP), "\\Device\\Null", exists_ntdev, S_IFCHR
-"/dev/conin", BRACK(FH_CONIN), "/dev/conin", exists_console, S_IFCHR
-"/dev/conout", BRACK(FH_CONOUT), "/dev/conout", exists_console, S_IFCHR
-"/dev/null", BRACK(FH_NULL), "\\Device\\Null", exists_ntdev, S_IFCHR
-"/dev/zero", BRACK(FH_ZERO), "\\Device\\Null", exists_ntdev, S_IFCHR
-"/dev/full", BRACK(FH_FULL), "\\Device\\Null", exists_ntdev, S_IFCHR
-"/dev/random", BRACK(FH_RANDOM), "\\Device\\Null", exists_ntdev, S_IFCHR
-"/dev/urandom", BRACK(FH_URANDOM), "\\Device\\Null", exists_ntdev, S_IFCHR, =urandom_dev
-"/dev/clipboard", BRACK(FH_CLIPBOARD), "\\Device\\Null", exists_ntdev, S_IFCHR
-"/dev/com%(1-16)d", BRACK(FHDEV(DEV_SERIAL_MAJOR, {$1 - 1})), "\\??\\COM{$1}", exists_ntdev_silent, S_IFCHR
-"/dev/ttyS%(0-63)d", BRACK(FHDEV(DEV_SERIAL_MAJOR, {$1})), "\\??\\COM{$1 + 1}", exists_ntdev, S_IFCHR
-":pipe", BRACK(FH_PIPE), "/dev/pipe", exists_internal, S_IFCHR
-":fifo", BRACK(FH_FIFO), "/dev/fifo", exists_internal, S_IFCHR
-"/dev/st%(0-127)d", BRACK(FHDEV(DEV_TAPE_MAJOR, {$1})), "\\Device\\Tape{$1}", exists_ntdev, S_IFBLK
-"/dev/nst%(0-127)d", BRACK(FHDEV(DEV_TAPE_MAJOR, {$1 + 128})), "\\Device\\Tape{$1}", exists_ntdev, S_IFBLK
-"/dev/fd%(0-15)d", BRACK(FHDEV(DEV_FLOPPY_MAJOR, {$1})), "\\Device\\Floppy{$1}", exists_ntdev, S_IFBLK
-"/dev/scd%(0-15)d", BRACK(FHDEV(DEV_CDROM_MAJOR, {$1})), "\\Device\\CdRom{$1}", exists_ntdev, S_IFBLK
-"/dev/sr%(0-15)d", BRACK(FHDEV(DEV_CDROM_MAJOR, {$1})), "\\Device\\CdRom{$1}", exists_ntdev, S_IFBLK
-"/dev/sd%{a-z}s", BRACK(FH_SD{uc $1}), "\\Device\\Harddisk{ord($1) - ord('a')}\\Partition0", exists_ntdev, S_IFBLK
-"/dev/sda%{a-z}s", BRACK(FH_SDA{uc $1}), "\\Device\\Harddisk{26 + ord($1) - ord('a')}\\Partition0", exists_ntdev, S_IFBLK
-"/dev/sdb%{a-z}s", BRACK(FH_SDB{uc $1}), "\\Device\\Harddisk{52 + ord($1) - ord('a')}\\Partition0", exists_ntdev, S_IFBLK
-"/dev/sdc%{a-z}s", BRACK(FH_SDC{uc $1}), "\\Device\\Harddisk{78 + ord($1) - ord('a')}\\Partition0", exists_ntdev, S_IFBLK
-"/dev/sdd%{a-x}s", BRACK(FH_SDD{uc $1}), "\\Device\\Harddisk{104 + ord($1) - ord('a')}\\Partition0", exists_ntdev, S_IFBLK
-"/dev/sd%{a-z}s%(1-15)d", BRACK(FH_SD{uc $1} | {$2}), "\\Device\\Harddisk{ord($1) - ord('a')}\\Partition{$2 % 16}", exists_ntdev, S_IFBLK
-"/dev/sda%{a-z}s%(1-15)d", BRACK(FH_SDA{uc $1} | {$2}), "\\Device\\Harddisk{26 + ord($1) - ord('a')}\\Partition{$2 % 16}", exists_ntdev, S_IFBLK
-"/dev/sdb%{a-z}s%(1-15)d", BRACK(FH_SDB{uc $1} | {$2}), "\\Device\\Harddisk{52 + ord($1) - ord('a')}\\Partition{$2 % 16}", exists_ntdev, S_IFBLK
-"/dev/sdc%{a-z}s%(1-15)d", BRACK(FH_SDC{uc $1} | {$2}), "\\Device\\Harddisk{78 + ord($1) - ord('a')}\\Partition{$2 % 16}", exists_ntdev, S_IFBLK
-"/dev/sdd%{a-x}s%(1-15)d", BRACK(FH_SDD{uc $1} | {$2}), "\\Device\\Harddisk{104 + ord($1) - ord('a')}\\Partition{$2 % 16}", exists_ntdev, S_IFBLK
-"/dev/kmsg", BRACK(FH_KMSG), "\\Device\\MailSlot\\cygwin\\dev\\kmsg", exists_ntdev, S_IFCHR
-%other {return NULL;}
-%%
-#undef BRACK
-
-const device *dev_storage_end = dev_storage + (sizeof dev_storage / sizeof dev_storage[0]);
-
-void
-device::parse (const char *s)
-{
- size_t len = strlen (s);
- const device *dev = KR_find_keyword (s, len);
-
- if (!dev)
- *this = *fs_dev;
- else
- *this = *dev;
-}
-
-void
-device::init ()
-{
- /* nothing to do... yet */
-}
-
-void
-device::parse (_major_t major, _minor_t minor)
-{
- dev_t devn = FHDEV (major, minor);
-
- d.devn = 0;
-
- for (const device *devidx = dev_storage; devidx < dev_storage_end; devidx++)
- if (devidx->d.devn == devn)
- {
- *this = *devidx;
- break;
- }
-
- if (!*this)
- d.devn = FHDEV (major, minor);
-}
-
-void
-device::parse (dev_t dev)
-{
- parse (_major (dev), _minor (dev));
-}
-
-void
-device::parsedisk (int drive, int part)
-{
- int base;
- if (drive < ('q' - 'a')) /* /dev/sda -to- /dev/sdp */
- base = DEV_SD_MAJOR;
- else if (drive < 32) /* /dev/sdq -to- /dev/sdaf */
- {
- base = DEV_SD1_MAJOR;
- drive -= 'q' - 'a';
- }
- else if (drive < 48) /* /dev/sdag -to- /dev/sdav */
- {
- base = DEV_SD2_MAJOR;
- drive -= 32;
- }
- else if (drive < 64) /* /dev/sdaw -to- /dev/sdbl */
- {
- base = DEV_SD3_MAJOR;
- drive -= 48;
- }
- else if (drive < 80) /* /dev/sdbm -to- /dev/sdcb */
- {
- base = DEV_SD4_MAJOR;
- drive -= 64;
- }
- else if (drive < 96) /* /dev/sdcc -to- /dev/sdcr */
- {
- base = DEV_SD5_MAJOR;
- drive -= 80;
- }
- else if (drive < 112) /* /dev/sdcs -to- /dev/sddh */
- {
- base = DEV_SD6_MAJOR;
- drive -= 96;
- }
- /* NOTE: This will cause multiple /dev/sddx entries in
- /proc/partitions if there are more than 128 devices */
- else /* /dev/sddi -to- /dev/sddx */
- {
- base = DEV_SD7_MAJOR;
- drive -= 112;
- }
- parse (base, part + (drive * 16));
-}
diff --git a/winsup/cygwin/dir.cc b/winsup/cygwin/dir.cc
deleted file mode 100644
index a8eeb2327..000000000
--- a/winsup/cygwin/dir.cc
+++ /dev/null
@@ -1,380 +0,0 @@
-/* dir.cc: Posix directory-related routines
-
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include <stdlib.h>
-#include <unistd.h>
-
-#define _COMPILING_NEWLIB
-#include <dirent.h>
-
-#include "cygerrno.h"
-#include "security.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "cygtls.h"
-#include "tls_pbuf.h"
-
-extern "C" int
-dirfd (DIR *dir)
-{
- __try
- {
- if (dir->__d_cookie == __DIRENT_COOKIE)
- return dir->__d_fd;
- syscall_printf ("-1 = dirfd (%p)", dir);
- set_errno (EINVAL);
- }
- __except (EFAULT) {}
- __endtry
- return -1;
-}
-
-/* Symbol kept for backward compatibility. Don't remove. Don't declare
- in public header file. */
-extern "C" DIR *
-__opendir_with_d_ino (const char *name)
-{
- return opendir (name);
-}
-
-/* opendir: POSIX 5.1.2.1 */
-extern "C" DIR *
-opendir (const char *name)
-{
- fhandler_base *fh;
- DIR *res;
-
- fh = build_fh_name (name, PC_SYM_FOLLOW);
- if (!fh)
- res = NULL;
- else if (fh->error ())
- {
- set_errno (fh->error ());
- res = NULL;
- }
- else if (fh->exists ())
- res = fh->opendir (-1);
- else
- {
- set_errno (ENOENT);
- res = NULL;
- }
-
- if (!res && fh)
- delete fh;
- /* Applications calling flock(2) on dirfd(fd) need this... */
- if (res && !fh->nohandle ())
- fh->set_unique_id ();
- return res;
-}
-
-extern "C" DIR *
-fdopendir (int fd)
-{
- DIR *res = NULL;
-
- cygheap_fdget cfd (fd);
- if (cfd >= 0)
- res = cfd->opendir (fd);
- return res;
-}
-
-static int
-readdir_worker (DIR *dir, dirent *de)
-{
- int res = 0;
-
- __try
- {
- if (dir->__d_cookie != __DIRENT_COOKIE)
- {
- syscall_printf ("%p = readdir (%p)", NULL, dir);
- res = EBADF;
- __leave;
- }
-
- de->d_ino = 0;
- de->d_type = DT_UNKNOWN;
- memset (&de->__d_unused1, 0, sizeof (de->__d_unused1));
-
- res = ((fhandler_base *) dir->__fh)->readdir (dir, de);
-
- if (res == ENMFILE)
- {
- if (!(dir->__flags & dirent_saw_dot))
- {
- strcpy (de->d_name, ".");
- dir->__flags |= dirent_saw_dot;
- dir->__d_position++;
- res = 0;
- }
- else if (!(dir->__flags & dirent_saw_dot_dot))
- {
- strcpy (de->d_name, "..");
- dir->__flags |= dirent_saw_dot_dot;
- dir->__d_position++;
- res = 0;
- }
- }
-
- if (!res && !de->d_ino)
- {
- bool is_dot = false;
- bool is_dot_dot = false;
-
- if (de->d_name[0] == '.')
- {
- if (de->d_name[1] == '\0')
- is_dot = true;
- else if (de->d_name[1] == '.' && de->d_name[2] == '\0')
- is_dot_dot = true;
- }
-
- if (is_dot_dot && !(dir->__flags & dirent_isroot))
- de->d_ino = readdir_get_ino (((fhandler_base *)
- dir->__fh)->get_name (),
- true);
- else
- {
- /* Compute d_ino by combining filename hash with directory hash. */
- de->d_ino = ((fhandler_base *) dir->__fh)->get_ino ();
- if (!is_dot && !is_dot_dot)
- {
- PUNICODE_STRING w32name =
- ((fhandler_base *) dir->__fh)->pc.get_nt_native_path ();
- DWORD devn = ((fhandler_base *) dir->__fh)->get_device ();
- /* Paths below /proc don't have a Win32 pendant. */
- if (isproc_dev (devn))
- de->d_ino = hash_path_name (de->d_ino, L"/");
- else if (w32name->Buffer[w32name->Length / sizeof (WCHAR) - 1]
- != L'\\')
- de->d_ino = hash_path_name (de->d_ino, L"\\");
- de->d_ino = hash_path_name (de->d_ino, de->d_name);
- }
- }
- }
- /* This fills out the old 32 bit d_ino field for old applications,
- build under Cygwin before 1.5.x. */
- de->__d_internal1 = de->d_ino;
- }
- __except (NO_ERROR)
- {
- res = EFAULT;
- }
- __endtry
- return res;
-}
-
-/* readdir: POSIX 5.1.2.1 */
-extern "C" struct dirent *
-readdir (DIR *dir)
-{
- int res = readdir_worker (dir, dir->__d_dirent);
- if (res == 0)
- return dir->__d_dirent;
- if (res != ENMFILE)
- set_errno (res);
- return NULL;
-}
-
-extern "C" int
-readdir_r (DIR *__restrict dir, dirent *__restrict de, dirent **__restrict ode)
-{
- int res = readdir_worker (dir, de);
- if (!res)
- *ode = de;
- else
- {
- *ode = NULL;
- if (res == ENMFILE)
- res = 0;
- }
- return res;
-}
-
-/* telldir */
-extern "C" long
-telldir (DIR *dir)
-{
- __try
- {
- if (dir->__d_cookie == __DIRENT_COOKIE)
- return ((fhandler_base *) dir->__fh)->telldir (dir);
- set_errno (EBADF);
- }
- __except (EFAULT) {}
- __endtry
- return -1;
-}
-
-/* telldir was never defined using off_t in POSIX, only in early versions
- of glibc. We have to keep the function in as entry point for backward
- compatibility. */
-extern "C" off_t
-telldir64 (DIR *dir)
-{
- return (off_t) telldir (dir);
-}
-
-/* seekdir */
-extern "C" void
-seekdir (DIR *dir, long loc)
-{
- __try
- {
- if (dir->__d_cookie == __DIRENT_COOKIE)
- {
- dir->__flags &= dirent_info_mask;
- ((fhandler_base *) dir->__fh)->seekdir (dir, loc);
- }
- set_errno (EINVAL); /* Diagnosis */
- }
- __except (EFAULT) {}
- __endtry
-}
-
-/* seekdir was never defined using off_t in POSIX, only in early versions
- of glibc. We have to keep the function in as entry point for backward
- compatibility. */
-extern "C" void
-seekdir64 (DIR *dir, off_t loc)
-{
- seekdir (dir, (long) loc);
-}
-
-/* rewinddir: POSIX 5.1.2.1 */
-extern "C" void
-rewinddir (DIR *dir)
-{
- __try
- {
- if (dir->__d_cookie == __DIRENT_COOKIE)
- {
- dir->__flags &= dirent_info_mask;
- ((fhandler_base *) dir->__fh)->rewinddir (dir);
- }
- set_errno (EINVAL); /* Diagnosis */
- }
- __except (EFAULT) {}
- __endtry
-}
-
-/* closedir: POSIX 5.1.2.1 */
-extern "C" int
-closedir (DIR *dir)
-{
- __try
- {
- if (dir->__d_cookie == __DIRENT_COOKIE)
- {
- /* Reset the marker in case the caller tries to use `dir' again. */
- dir->__d_cookie = 0;
-
- int res = ((fhandler_base *) dir->__fh)->closedir (dir);
-
- close (dir->__d_fd);
- free (dir->__d_dirname);
- free (dir->__d_dirent);
- free (dir);
- syscall_printf ("%R = closedir(%p)", res, dir);
- return res;
- }
- set_errno (EBADF);
- }
- __except (EFAULT) {}
- __endtry
- syscall_printf ("%R = closedir(%p)", -1, dir);
- return -1;
-}
-
-/* mkdir: POSIX 5.4.1.1 */
-extern "C" int
-mkdir (const char *dir, mode_t mode)
-{
- int res = -1;
- fhandler_base *fh = NULL;
- tmp_pathbuf tp;
-
- __try
- {
- /* POSIX says mkdir("symlink-to-missing/") should create the
- directory "missing", but Linux rejects it with EEXIST. Copy
- Linux behavior for now. */
-
- if (!*dir)
- {
- set_errno (ENOENT);
- __leave;
- }
- if (isdirsep (dir[strlen (dir) - 1]))
- {
- /* This converts // to /, but since both give EEXIST, we're okay. */
- char *buf;
- char *p = stpcpy (buf = tp.c_get (), dir) - 1;
- dir = buf;
- while (p > dir && isdirsep (*p))
- *p-- = '\0';
- }
- if (!(fh = build_fh_name (dir, PC_SYM_NOFOLLOW)))
- __leave; /* errno already set */;
-
- if (fh->error ())
- {
- debug_printf ("got %d error from build_fh_name", fh->error ());
- set_errno (fh->error ());
- }
- else if (has_dot_last_component (dir, true))
- set_errno (fh->exists () ? EEXIST : ENOENT);
- else if (!fh->mkdir (mode))
- res = 0;
- delete fh;
- }
- __except (EFAULT) {}
- __endtry
- syscall_printf ("%R = mkdir(%s, %d)", res, dir, mode);
- return res;
-}
-
-/* rmdir: POSIX 5.5.2.1 */
-extern "C" int
-rmdir (const char *dir)
-{
- int res = -1;
- fhandler_base *fh = NULL;
-
- __try
- {
- if (!(fh = build_fh_name (dir, PC_SYM_NOFOLLOW)))
- __leave; /* errno already set */;
-
- if (fh->error ())
- {
- debug_printf ("got %d error from build_fh_name", fh->error ());
- set_errno (fh->error ());
- }
- else if (!fh->exists ())
- set_errno (ENOENT);
- else if (has_dot_last_component (dir, false))
- set_errno (EINVAL);
- else if (isdev_dev (fh->dev ()))
- set_errno (ENOTEMPTY);
- else if (!fh->rmdir ())
- res = 0;
- delete fh;
- }
- __except (EFAULT) {}
- __endtry
- syscall_printf ("%R = rmdir(%s)", res, dir);
- return res;
-}
diff --git a/winsup/cygwin/dlfcn.cc b/winsup/cygwin/dlfcn.cc
deleted file mode 100644
index 658551b70..000000000
--- a/winsup/cygwin/dlfcn.cc
+++ /dev/null
@@ -1,258 +0,0 @@
-/* dlfcn.cc
-
- Copyright 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
- 2010, 2011, 2013, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include <psapi.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <wctype.h>
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "perprocess.h"
-#include "dlfcn.h"
-#include "cygtls.h"
-#include "tls_pbuf.h"
-#include "ntdll.h"
-
-static void
-set_dl_error (const char *str)
-{
- strcpy (_my_tls.locals.dl_buffer, strerror (get_errno ()));
- _my_tls.locals.dl_error = 1;
-}
-
-/* Look for an executable file given the name and the environment
- variable to use for searching (eg., PATH); returns the full
- pathname (static buffer) if found or NULL if not. */
-inline const char *
-check_path_access (const char *mywinenv, const char *name, path_conv& buf)
-{
- return find_exec (name, buf, mywinenv, FE_NNF | FE_NATIVE | FE_DLL);
-}
-
-/* Search LD_LIBRARY_PATH for dll, if it exists. Search /usr/bin and /usr/lib
- by default. Return valid full path in path_conv real_filename. */
-static inline bool
-gfpod_helper (const char *name, path_conv &real_filename)
-{
- if (strchr (name, '/'))
- real_filename.check (name, PC_SYM_FOLLOW | PC_NULLEMPTY);
- else if (!check_path_access ("LD_LIBRARY_PATH=", name, real_filename))
- check_path_access ("/usr/bin:/usr/lib", name, real_filename);
- if (!real_filename.exists ())
- real_filename.error = ENOENT;
- return !real_filename.error;
-}
-
-static bool
-get_full_path_of_dll (const char* str, path_conv &real_filename)
-{
- int len = strlen (str);
-
- /* empty string? */
- if (len == 0)
- {
- set_errno (EINVAL);
- return false; /* Yes. Let caller deal with it. */
- }
-
- tmp_pathbuf tp;
- char *name = tp.c_get ();
-
- strcpy (name, str); /* Put it somewhere where we can manipulate it. */
-
- char *basename = strrchr (name, '/');
- basename = basename ? basename + 1 : name;
- char *suffix = strrchr (name, '.');
- if (suffix && suffix < basename)
- suffix = NULL;
-
- /* Is suffix ".so"? */
- if (suffix && !strcmp (suffix, ".so"))
- {
- /* Does the file exist? */
- if (gfpod_helper (name, real_filename))
- return true;
- /* No, replace ".so" with ".dll". */
- strcpy (suffix, ".dll");
- }
- /* Does the filename start with "lib"? */
- if (!strncmp (basename, "lib", 3))
- {
- /* Yes, replace "lib" with "cyg". */
- strncpy (basename, "cyg", 3);
- /* Does the file exist? */
- if (gfpod_helper (name, real_filename))
- return true;
- /* No, revert back to "lib". */
- strncpy (basename, "lib", 3);
- }
- if (gfpod_helper (name, real_filename))
- return true;
-
- /* If nothing worked, create a relative path from the original incoming
- filename and let LoadLibrary search for it using the system default
- DLL search path. */
- real_filename.check (str, PC_SYM_FOLLOW | PC_NOFULL | PC_NULLEMPTY);
- if (!real_filename.error)
- return true;
-
- set_errno (real_filename.error);
- return false;
-}
-
-extern "C" void *
-dlopen (const char *name, int flags)
-{
- void *ret = NULL;
-
- if (name == NULL)
- {
- ret = (void *) GetModuleHandle (NULL); /* handle for the current module */
- if (!ret)
- __seterrno ();
- }
- else
- {
- /* handle for the named library */
- path_conv pc;
- if (get_full_path_of_dll (name, pc))
- {
- tmp_pathbuf tp;
- wchar_t *path = tp.w_get ();
-
- pc.get_wide_win32_path (path);
- /* Check if the last path component contains a dot. If so,
- leave the filename alone. Otherwise add a trailing dot
- to override LoadLibrary's automatic adding of a ".dll" suffix. */
- wchar_t *last_bs = wcsrchr (path, L'\\');
- if (last_bs && !wcschr (last_bs, L'.'))
- wcscat (last_bs, L".");
-
-#ifndef __x86_64__
- /* Workaround for broken DLLs built against Cygwin versions 1.7.0-49
- up to 1.7.0-57. They override the cxx_malloc pointer in their
- DLL initialization code even if loaded dynamically. This is a
- no-no since a later dlclose lets cxx_malloc point into nirvana.
- The below kludge "fixes" that by reverting the original cxx_malloc
- pointer after LoadLibrary. This implies that their overrides
- won't be applied; that's OK. All overrides should be present at
- final link time, as Windows doesn't allow undefined references;
- it would actually be wrong for a dlopen'd DLL to opportunistically
- override functions in a way that wasn't known then. We're not
- going to try and reproduce the full ELF dynamic loader here! */
-
- /* Store original cxx_malloc pointer. */
- struct per_process_cxx_malloc *tmp_malloc;
- tmp_malloc = __cygwin_user_data.cxx_malloc;
-#endif
-
- if (flags & RTLD_NOLOAD)
- GetModuleHandleExW (0, path, (HMODULE *) &ret);
- else
- ret = (void *) LoadLibraryW (path);
- if (ret && (flags & RTLD_NODELETE))
- GetModuleHandleExW (GET_MODULE_HANDLE_EX_FLAG_PIN, path,
- (HMODULE *) &ret);
-
-#ifndef __x86_64__
- /* Restore original cxx_malloc pointer. */
- __cygwin_user_data.cxx_malloc = tmp_malloc;
-#endif
-
- if (!ret)
- __seterrno ();
- }
- }
-
- if (!ret)
- set_dl_error ("dlopen");
- debug_printf ("ret %p", ret);
-
- return ret;
-}
-
-extern "C" void *
-dlsym (void *handle, const char *name)
-{
- void *ret = NULL;
-
- if (handle == RTLD_DEFAULT)
- { /* search all modules */
- PDEBUG_BUFFER buf;
- NTSTATUS status;
-
- buf = RtlCreateQueryDebugBuffer (0, FALSE);
- if (!buf)
- {
- set_errno (ENOMEM);
- set_dl_error ("dlsym");
- return NULL;
- }
- status = RtlQueryProcessDebugInformation (GetCurrentProcessId (),
- PDI_MODULES, buf);
- if (!NT_SUCCESS (status))
- __seterrno_from_nt_status (status);
- else
- {
- PDEBUG_MODULE_ARRAY mods = (PDEBUG_MODULE_ARRAY)
- buf->ModuleInformation;
- for (ULONG i = 0; i < mods->Count; ++i)
- if ((ret = (void *)
- GetProcAddress ((HMODULE) mods->Modules[i].Base, name)))
- break;
- if (!ret)
- set_errno (ENOENT);
- }
- RtlDestroyQueryDebugBuffer (buf);
- }
- else
- {
- ret = (void *) GetProcAddress ((HMODULE) handle, name);
- if (!ret)
- __seterrno ();
- }
- if (!ret)
- set_dl_error ("dlsym");
- debug_printf ("ret %p", ret);
- return ret;
-}
-
-extern "C" int
-dlclose (void *handle)
-{
- int ret;
- if (handle == GetModuleHandle (NULL))
- ret = 0;
- else if (FreeLibrary ((HMODULE) handle))
- ret = 0;
- else
- ret = -1;
- if (ret)
- set_dl_error ("dlclose");
- return ret;
-}
-
-extern "C" char *
-dlerror ()
-{
- char *res;
- if (!_my_tls.locals.dl_error)
- res = NULL;
- else
- {
- _my_tls.locals.dl_error = 0;
- res = _my_tls.locals.dl_buffer;
- }
- return res;
-}
diff --git a/winsup/cygwin/dll_init.cc b/winsup/cygwin/dll_init.cc
deleted file mode 100644
index 51ef186a3..000000000
--- a/winsup/cygwin/dll_init.cc
+++ /dev/null
@@ -1,728 +0,0 @@
-/* dll_init.cc
-
- Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
- 2009, 2010, 2011, 2012, 2013, 2014 Red Hat, Inc.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include "cygerrno.h"
-#include "perprocess.h"
-#include "sync.h"
-#include "dll_init.h"
-#include "environ.h"
-#include "security.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "pinfo.h"
-#include "child_info.h"
-#include "cygtls.h"
-#include "exception.h"
-#include <wchar.h>
-#include <sys/reent.h>
-#include <assert.h>
-
-extern void __stdcall check_sanity_and_sync (per_process *);
-
-#define fabort fork_info->abort
-
-dll_list dlls;
-
-muto dll_list::protect;
-
-static bool dll_global_dtors_recorded;
-
-/* Run destructors for all DLLs on exit. */
-void
-dll_global_dtors ()
-{
- /* Don't attempt to call destructors if we're still in fork processing
- since that likely means fork is failing and everything will not have been
- set up. */
- if (in_forkee)
- return;
- int recorded = dll_global_dtors_recorded;
- dll_global_dtors_recorded = false;
- if (recorded && dlls.start.next)
- for (dll *d = dlls.end; d != &dlls.start; d = d->prev)
- d->run_dtors ();
-}
-
-/* Run all constructors associated with a dll */
-void
-per_module::run_ctors ()
-{
- void (**pfunc)() = ctors;
-
- /* Run ctors backwards, so skip the first entry and find how many
- there are, then run them. */
-
- if (pfunc)
- {
- int i;
- for (i = 1; pfunc[i]; i++);
-
- for (int j = i - 1; j > 0; j--)
- (pfunc[j]) ();
- }
-}
-
-/* Run all destructors associated with a dll */
-void
-per_module::run_dtors ()
-{
- void (**pfunc)() = dtors;
- while (*++pfunc)
- (*pfunc) ();
-}
-
-/* Initialize an individual DLL */
-int
-dll::init ()
-{
- int ret = 1;
-
-#ifndef __x86_64__
- /* This should be a no-op. Why didn't we just import this variable? */
- if (!p.envptr)
- p.envptr = &__cygwin_environ;
- else if (*(p.envptr) != __cygwin_environ)
- *(p.envptr) = __cygwin_environ;
-#endif
-
- /* Don't run constructors or the "main" if we've forked. */
- if (!in_forkee)
- {
- /* global contructors */
- p.run_ctors ();
-
- /* entry point of dll (use main of per_process with null args...) */
- if (p.main)
- ret = p.main (0, 0, 0);
- }
-
- return ret;
-}
-
-/* Look for a dll based on the full path.
-
- CV, 2012-03-04: Per MSDN, If a DLL with the same module name is already
- loaded in memory, the system uses the loaded DLL, no matter which directory
- it is in. The system does not search for the DLL. See
- http://msdn.microsoft.com/en-us/library/ms682586%28v=vs.85%29.aspx
-
- On 2012-02-08 I interpreted "module name" as "basename". So the assumption
- was that the Windows Loader does not load another DLL with the same basename,
- if one such DLL is already loaded. Consequentially I changed the code so
- that DLLs are only compared by basename.
-
- This assumption was obviously wrong, as the perl dynaloader proves. It
- loads multiple DLLs with the same basename into memory, just from different
- locations. This mechanism is broken when only comparing basenames in the
- below code.
-
- However, the original problem reported on 2012-02-07 was a result of
- a subtil difference between the paths returned by different calls to
- GetModuleFileNameW: Sometimes the path is a plain DOS path, sometimes
- it's preceeded by the long pathname prefix "\\?\".
-
- So I reverted the original change from 2012-02-08 and only applied the
- following fix: Check if the path is preceeded by a long pathname prefix,
- and, if so, drop it forthwith so that subsequent full path comparisons
- work as expected.
-
- At least that was the original idea. In fact there are two case, linked
- and runtime loaded DLLs, which have to be distinguished:
-
- - Linked DLLs are loaded by only specifying the basename of the DLL and
- searching it using the system DLL search order as given in the
- aforementioned MSDN URL.
-
- - Runtime loaded DLLs are specified with the full path since that's how
- dlopen works.
-
- In effect, we have to be careful not to mix linked and loaded DLLs.
- For more info how this gets accomplished, see the comments at the start
- of dll_list::alloc, as well as the comment preceeding the definition of
- the in_load_after_fork bool later in the file. */
-dll *
-dll_list::operator[] (const PWCHAR name)
-{
- dll *d = &start;
- while ((d = d->next) != NULL)
- if (!wcscasecmp (name, d->name))
- return d;
-
- return NULL;
-}
-
-/* Look for a dll based on the basename. */
-dll *
-dll_list::find_by_modname (const PWCHAR modname)
-{
- dll *d = &start;
- while ((d = d->next) != NULL)
- if (!wcscasecmp (modname, d->modname))
- return d;
-
- return NULL;
-}
-
-#define RETRIES 1000
-
-/* Allocate space for a dll struct. */
-dll *
-dll_list::alloc (HINSTANCE h, per_process *p, dll_type type)
-{
- WCHAR buf[NT_MAX_PATH];
- GetModuleFileNameW (h, buf, NT_MAX_PATH);
- PWCHAR name = buf;
- if (!wcsncmp (name, L"\\\\?\\", 4))
- {
- name += 4;
- if (!wcsncmp (name, L"UNC\\", 4))
- {
- name += 2;
- *name = L'\\';
- }
- }
- DWORD namelen = wcslen (name);
- PWCHAR modname = wcsrchr (name, L'\\') + 1;
-
- guard (true);
- /* Already loaded? For linked DLLs, only compare the basenames. Linked
- DLLs are loaded using just the basename and the default DLL search path.
- The Windows loader picks up the first one it finds. */
- dll *d = (type == DLL_LINK) ? dlls.find_by_modname (modname) : dlls[name];
- if (d)
- {
- if (!in_forkee)
- d->count++; /* Yes. Bump the usage count. */
- else if (d->handle != h)
- fabort ("%W: Loaded to different address: parent(%p) != child(%p)",
- name, d->handle, h);
- /* If this DLL has been linked against, and the full path differs, try
- to sanity check if this is the same DLL, just in another path. */
- else if (type == DLL_LINK && wcscasecmp (name, d->name)
- && (d->p.data_start != p->data_start
- || d->p.data_start != p->data_start
- || d->p.bss_start != p->bss_start
- || d->p.bss_end != p->bss_end
- || d->p.ctors != p->ctors
- || d->p.dtors != p->dtors))
- fabort ("\nLoaded different DLL with same basename in forked child,\n"
- "parent loaded: %W\n"
- " child loaded: %W\n"
- "The DLLs differ, so it's not safe to run the forked child.\n"
- "Make sure to remove the offending DLL before trying again.",
- d->name, name);
- d->p = p;
- }
- else
- {
- /* FIXME: Change this to new at some point. */
- d = (dll *) cmalloc (HEAP_2_DLL, sizeof (*d) + (namelen * sizeof (*name)));
-
- /* Now we've allocated a block of information. Fill it in with the
- supplied info about this DLL. */
- d->count = 1;
- wcscpy (d->name, name);
- d->modname = d->name + (modname - name);
- d->handle = h;
- d->has_dtors = true;
- d->p = p;
- d->ndeps = 0;
- d->deps = NULL;
- d->image_size = ((pefile*)h)->optional_hdr ()->SizeOfImage;
- d->preferred_base = (void*) ((pefile*)h)->optional_hdr()->ImageBase;
- d->type = type;
- append (d);
- if (type == DLL_LOAD)
- loaded_dlls++;
- }
- guard (false);
-#ifndef __x86_64__
- assert (p->envptr != NULL);
-#endif
- return d;
-}
-
-void
-dll_list::append (dll* d)
-{
- if (end == NULL)
- end = &start; /* Point to "end" of dll chain. */
- end->next = d; /* Standard linked list stuff. */
- d->next = NULL;
- d->prev = end;
- end = d;
-}
-
-void dll_list::populate_deps (dll* d)
-{
- WCHAR wmodname[NT_MAX_PATH];
- pefile* pef = (pefile*) d->handle;
- PIMAGE_DATA_DIRECTORY dd = pef->idata_dir (IMAGE_DIRECTORY_ENTRY_IMPORT);
- /* Annoyance: calling crealloc with a NULL pointer will use the
- wrong heap and crash, so we have to replicate some code */
- long maxdeps = 4;
- d->deps = (dll**) cmalloc (HEAP_2_DLL, maxdeps*sizeof (dll*));
- d->ndeps = 0;
- for (PIMAGE_IMPORT_DESCRIPTOR id=
- (PIMAGE_IMPORT_DESCRIPTOR) pef->rva (dd->VirtualAddress);
- dd->Size && id->Name;
- id++)
- {
- char* modname = pef->rva (id->Name);
- sys_mbstowcs (wmodname, NT_MAX_PATH, modname);
- if (dll* dep = find_by_modname (wmodname))
- {
- if (d->ndeps >= maxdeps)
- {
- maxdeps = 2*(1+maxdeps);
- d->deps = (dll**) crealloc (d->deps, maxdeps*sizeof (dll*));
- }
- d->deps[d->ndeps++] = dep;
- }
- }
-
- /* add one to differentiate no deps from unknown */
- d->ndeps++;
-}
-
-
-void
-dll_list::topsort ()
-{
- /* Anything to do? */
- if (!end || end == &start)
- return;
-
- /* make sure we have all the deps available */
- dll* d = &start;
- while ((d = d->next))
- if (!d->ndeps)
- populate_deps (d);
-
- /* unlink head and tail pointers so the sort can rebuild the list */
- d = start.next;
- start.next = end = NULL;
- topsort_visit (d, true);
-
- /* clear node markings made by the sort */
- d = &start;
- while ((d = d->next))
- {
-#ifdef DEBUGGING
- paranoid_printf ("%W", d->modname);
- for (int i = 1; i < -d->ndeps; i++)
- paranoid_printf ("-> %W", d->deps[i - 1]->modname);
-#endif
-
- /* It would be really nice to be able to keep this information
- around for next time, but we don't have an easy way to
- invalidate cached dependencies when a module unloads. */
- d->ndeps = 0;
- cfree (d->deps);
- d->deps = NULL;
- }
-}
-
-/* A recursive in-place topological sort. The result is ordered so that
- dependencies of a dll appear before it in the list.
-
- NOTE: this algorithm is guaranteed to terminate with a "partial
- order" of dlls but does not do anything smart about cycles: an
- arbitrary dependent dll will necessarily appear first. Perhaps not
- surprisingly, Windows ships several dlls containing dependency
- cycles, including SspiCli/RPCRT4.dll and a lovely tangle involving
- USP10/LPK/GDI32/USER32.dll). Fortunately, we don't care about
- Windows DLLs here, and cygwin dlls should behave better */
-void
-dll_list::topsort_visit (dll* d, bool seek_tail)
-{
- /* Recurse to the end of the dll chain, then visit nodes as we
- unwind. We do this because once we start visiting nodes we can no
- longer trust any _next_ pointers.
-
- We "mark" visited nodes (to avoid revisiting them) by negating
- ndeps (undone once the sort completes). */
- if (seek_tail && d->next)
- topsort_visit (d->next, true);
-
- if (d->ndeps > 0)
- {
- d->ndeps = -d->ndeps;
- for (long i = 1; i < -d->ndeps; i++)
- topsort_visit (d->deps[i - 1], false);
-
- append (d);
- }
-}
-
-
-dll *
-dll_list::find (void *retaddr)
-{
- MEMORY_BASIC_INFORMATION m;
- if (!VirtualQuery (retaddr, &m, sizeof m))
- return NULL;
- HMODULE h = (HMODULE) m.AllocationBase;
-
- dll *d = &start;
- while ((d = d->next))
- if (d->handle == h)
- break;
- return d;
-}
-
-/* Detach a DLL from the chain. */
-void
-dll_list::detach (void *retaddr)
-{
- dll *d;
- /* Don't attempt to call destructors if we're still in fork processing
- since that likely means fork is failing and everything will not have been
- set up. */
- if (!myself || in_forkee)
- return;
- guard (true);
- if ((d = find (retaddr)))
- {
- if (d->count <= 0)
- system_printf ("WARNING: trying to detach an already detached dll ...");
- if (--d->count == 0)
- {
- /* Ensure our exception handler is enabled for destructors */
- exception protect;
- /* Call finalize function if we are not already exiting */
- if (!exit_state)
- __cxa_finalize (d->handle);
- d->run_dtors ();
- d->prev->next = d->next;
- if (d->next)
- d->next->prev = d->prev;
- if (d->type == DLL_LOAD)
- loaded_dlls--;
- if (end == d)
- end = d->prev;
- cfree (d);
- }
- }
- guard (false);
-}
-
-/* Initialization for all linked DLLs, called by dll_crt0_1. */
-void
-dll_list::init ()
-{
- /* Walk the dll chain, initializing each dll */
- dll *d = &start;
- dll_global_dtors_recorded = d->next != NULL;
- while ((d = d->next))
- d->init ();
-}
-
-#define A64K (64 * 1024)
-
-
-/* Reserve the chunk of free address space starting _here_ and (usually)
- covering at least _dll_size_ bytes. However, we must take care not
- to clobber the dll's target address range because it often overlaps.
- */
-static PVOID
-reserve_at (const PWCHAR name, PVOID here, PVOID dll_base, DWORD dll_size)
-{
- DWORD size;
- MEMORY_BASIC_INFORMATION mb;
-
- if (!VirtualQuery (here, &mb, sizeof (mb)))
- fabort ("couldn't examine memory at %p while mapping %W, %E", here, name);
- if (mb.State != MEM_FREE)
- return 0;
-
- size = mb.RegionSize;
-
- // don't clobber the space where we want the dll to land
- caddr_t end = (caddr_t) here + size;
- caddr_t dll_end = (caddr_t) dll_base + dll_size;
- if (dll_base < here && dll_end > (caddr_t) here)
- here = (PVOID) dll_end; // the dll straddles our left edge
- else if (dll_base >= here && (caddr_t) dll_base < end)
- end = (caddr_t) dll_base; // the dll overlaps partly or fully to our right
-
- size = end - (caddr_t) here;
- if (!VirtualAlloc (here, size, MEM_RESERVE, PAGE_NOACCESS))
- fabort ("couldn't allocate memory %p(%d) for '%W' alignment, %E\n",
- here, size, name);
- return here;
-}
-
-/* Release the memory previously allocated by "reserve_at" above. */
-static void
-release_at (const PWCHAR name, PVOID here)
-{
- if (!VirtualFree (here, 0, MEM_RELEASE))
- fabort ("couldn't release memory %p for '%W' alignment, %E\n",
- here, name);
-}
-
-/* Step 1: Reserve memory for all DLL_LOAD dlls. This is to prevent
- anything else from taking their spot as we compensate for Windows
- randomly relocating things.
-
- NOTE: because we can't depend on LoadLibraryExW to do the right
- thing, we have to do a vanilla VirtualAlloc instead. One possible
- optimization might attempt a LoadLibraryExW first, in case it lands
- in the right place, but then we have to find a way of tracking
- which dlls ended up needing VirtualAlloc after all. */
-void
-dll_list::reserve_space ()
-{
- for (dll* d = dlls.istart (DLL_LOAD); d; d = dlls.inext ())
- if (!VirtualAlloc (d->handle, d->image_size, MEM_RESERVE, PAGE_NOACCESS))
- fabort ("address space needed by '%W' (%p) is already occupied",
- d->modname, d->handle);
-}
-
-/* We need the in_load_after_fork flag so dll_dllcrt0_1 can decide at fork
- time if this is a linked DLL or a dynamically loaded DLL. In either case,
- both, cygwin_finished_initializing and in_forkee are true, so they are not
- sufficient to discern the situation. */
-static bool NO_COPY in_load_after_fork;
-
-/* Reload DLLs after a fork. Iterates over the list of dynamically loaded
- DLLs and attempts to load them in the same place as they were loaded in the
- parent. */
-void
-dll_list::load_after_fork (HANDLE parent)
-{
- // moved to frok::child for performance reasons:
- // dll_list::reserve_space();
-
- in_load_after_fork = true;
- load_after_fork_impl (parent, dlls.istart (DLL_LOAD), 0);
- in_load_after_fork = false;
-}
-
-static int const DLL_RETRY_MAX = 6;
-void dll_list::load_after_fork_impl (HANDLE parent, dll* d, int retries)
-{
- /* Step 2: For each dll which did not map at its preferred base
- address in the parent, try to coerce it to land at the same spot
- as before. If not, unload it, reserve the memory around it, and
- try again. Use recursion to remember blocked regions address
- space so we can release them later.
-
- We DONT_RESOLVE_DLL_REFERENCES at first in case the DLL lands in
- the wrong spot;
-
- NOTE: This step skips DLLs which loaded at their preferred
- address in the parent because they should behave (we already
- verified that their preferred address in the child is
- available). However, this may fail on a Vista/Win7 machine with
- ASLR active, because the ASLR base address will usually not equal
- the preferred base recorded in the dll. In this case, we should
- make the LoadLibraryExW call unconditional.
- */
- for ( ; d; d = dlls.inext ())
- if (d->handle != d->preferred_base)
- {
- /* See if the DLL will load in proper place. If not, unload it,
- reserve the memory around it, and try again.
-
- If this is the first attempt, we need to release the
- dll's protective reservation from step 1
- */
- if (!retries && !VirtualFree (d->handle, 0, MEM_RELEASE))
- fabort ("unable to release protective reservation for %W (%p), %E",
- d->modname, d->handle);
-
- HMODULE h = LoadLibraryExW (d->name, NULL, DONT_RESOLVE_DLL_REFERENCES);
- if (!h)
- fabort ("unable to create interim mapping for %W, %E", d->name);
- if (h != d->handle)
- {
- sigproc_printf ("%W loaded in wrong place: %p != %p",
- d->modname, h, d->handle);
- FreeLibrary (h);
- PVOID reservation = reserve_at (d->modname, h,
- d->handle, d->image_size);
- if (!reservation)
- fabort ("unable to block off %p to prevent %W from loading there",
- h, d->modname);
-
- if (retries < DLL_RETRY_MAX)
- load_after_fork_impl (parent, d, retries+1);
- else
- fabort ("unable to remap %W to same address as parent (%p) - try running rebaseall",
- d->modname, d->handle);
-
- /* once the above returns all the dlls are mapped; release
- the reservation and continue unwinding */
- sigproc_printf ("releasing blocked space at %p", reservation);
- release_at (d->modname, reservation);
- return;
- }
- }
-
- /* Step 3: try to load each dll for real after either releasing the
- protective reservation (for well-behaved dlls) or unloading the
- interim mapping (for rebased dlls) . The dll list is sorted in
- dependency order, so we shouldn't pull in any additional dlls
- outside our control. */
- for (dll *d = dlls.istart (DLL_LOAD); d; d = dlls.inext ())
- {
- if (d->handle == d->preferred_base)
- {
- if (!VirtualFree (d->handle, 0, MEM_RELEASE))
- fabort ("unable to release protective reservation for %W (%p), %E",
- d->modname, d->handle);
- }
- else
- {
- /* Free the library using our parent's handle: it's identical
- to ours or we wouldn't have gotten this far */
- if (!FreeLibrary (d->handle))
- fabort ("unable to unload interim mapping of %W, %E",
- d->modname);
- }
- HMODULE h = LoadLibraryW (d->name);
- if (!h)
- fabort ("unable to map %W, %E", d->name);
- if (h != d->handle)
- fabort ("unable to map %W to same address as parent: %p != %p",
- d->modname, d->handle, h);
- }
-}
-
-struct dllcrt0_info
-{
- HMODULE h;
- per_process *p;
- PVOID res;
- dllcrt0_info (HMODULE h0, per_process *p0): h (h0), p (p0) {}
-};
-
-extern "C" PVOID
-dll_dllcrt0 (HMODULE h, per_process *p)
-{
- if (dynamically_loaded)
- return (PVOID) 1;
- dllcrt0_info x (h, p);
- dll_dllcrt0_1 (&x);
- return x.res;
-}
-
-void
-dll_dllcrt0_1 (VOID *x)
-{
- HMODULE& h = ((dllcrt0_info *) x)->h;
- per_process*& p = ((dllcrt0_info *) x)->p;
- PVOID& res = ((dllcrt0_info *) x)->res;
-
- if (p == NULL)
- p = &__cygwin_user_data;
- else
- {
- *(p->impure_ptr_ptr) = __cygwin_user_data.impure_ptr;
- _pei386_runtime_relocator (p);
- }
-
- bool linked = !cygwin_finished_initializing && !in_load_after_fork;
-
- /* Broken DLLs built against Cygwin versions 1.7.0-49 up to 1.7.0-57
- override the cxx_malloc pointer in their DLL initialization code,
- when loaded either statically or dynamically. Because this leaves
- a stale pointer into demapped memory space if the DLL is unloaded
- by a call to dlclose, we prevent this happening for dynamically
- loaded DLLs in dlopen by saving and restoring cxx_malloc around
- the call to LoadLibrary, which invokes the DLL's startup sequence.
- Modern DLLs won't even attempt to override the pointer when loaded
- statically, but will write their overrides directly into the
- struct it points to. With all modern DLLs, this will remain the
- default_cygwin_cxx_malloc struct in cxx.cc, but if any broken DLLs
- are in the mix they will have overridden the pointer and subsequent
- overrides will go into their embedded cxx_malloc structs. This is
- almost certainly not a problem as they can never be unloaded, but
- if we ever did want to do anything about it, we could check here to
- see if the pointer had been altered in the early parts of the DLL's
- startup, and if so copy back the new overrides and reset it here.
- However, that's just a note for the record; at the moment, we can't
- see any need to worry about this happening. */
-
- check_sanity_and_sync (p);
-
- dll_type type;
-
- /* If this function is called before cygwin has finished
- initializing, then the DLL must be a cygwin-aware DLL
- that was explicitly linked into the program rather than
- a dlopened DLL. */
- if (linked)
- type = DLL_LINK;
- else
- {
- type = DLL_LOAD;
- dlls.reload_on_fork = 1;
- }
-
- /* Allocate and initialize space for the DLL. */
- dll *d = dlls.alloc (h, p, type);
-
- /* If d == NULL, then something is broken.
- Otherwise, if we've finished initializing, it's ok to
- initialize the DLL. If we haven't finished initializing,
- it may not be safe to call the dll's "main" since not
- all of cygwin's internal structures may have been set up. */
- if (!d || (!linked && !d->init ()))
- res = (PVOID) -1;
- else
- res = (PVOID) d;
-}
-
-#ifndef __x86_64__
-/* OBSOLETE: This function is obsolete and will go away in the
- future. Cygwin can now handle being loaded from a noncygwin app
- using the same entry point. */
-extern "C" int
-dll_noncygwin_dllcrt0 (HMODULE h, per_process *p)
-{
- return (int) dll_dllcrt0 (h, p);
-}
-#endif /* !__x86_64__ */
-
-extern "C" void
-cygwin_detach_dll (dll *)
-{
- HANDLE retaddr;
- if (_my_tls.isinitialized ())
- retaddr = (void *) _my_tls.retaddr ();
- else
- retaddr = __builtin_return_address (0);
- dlls.detach (retaddr);
-}
-
-extern "C" void
-dlfork (int val)
-{
- dlls.reload_on_fork = val;
-}
-
-#ifndef __x86_64__
-/* Called from various places to update all of the individual
- ideas of the environ block. Explain to me again why we didn't
- just import __cygwin_environ? */
-void __stdcall
-update_envptrs ()
-{
- for (dll *d = dlls.istart (DLL_ANY); d; d = dlls.inext ())
- if (*(d->p.envptr) != __cygwin_environ)
- *(d->p.envptr) = __cygwin_environ;
- *main_environ = __cygwin_environ;
-}
-#endif
diff --git a/winsup/cygwin/dll_init.h b/winsup/cygwin/dll_init.h
deleted file mode 100644
index 8127d0bb4..000000000
--- a/winsup/cygwin/dll_init.h
+++ /dev/null
@@ -1,152 +0,0 @@
-/* dll_init.h
-
- Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2007, 2008, 2009, 2010,
- 2011, 2012, 2013 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-struct per_module
-{
-#ifndef __x86_64__
- char ***envptr;
-#endif
- void (**ctors)(void);
- void (**dtors)(void);
- void *data_start;
- void *data_end;
- void *bss_start;
- void *bss_end;
- int (*main)(int, char **, char **);
- per_module &operator = (per_process *p)
- {
-#ifndef __x86_64__
- envptr = p->envptr;
-#endif
- ctors = p->ctors;
- dtors = p->dtors;
- data_start = p->data_start;
- data_end = p->data_end;
- bss_start = p->bss_start;
- bss_end = p->bss_end;
- main = p->main;
- return *this;
- }
- void run_ctors ();
- void run_dtors ();
-};
-
-
-typedef enum
-{
- DLL_NONE,
- DLL_LINK,
- DLL_LOAD,
- DLL_ANY
-} dll_type;
-
-struct dll
-{
- struct dll *next, *prev;
- per_module p;
- HMODULE handle;
- int count;
- bool has_dtors;
- dll_type type;
- long ndeps;
- dll** deps;
- DWORD image_size;
- void* preferred_base;
- PWCHAR modname;
- WCHAR name[1];
- void detach ();
- int init ();
- void run_dtors ()
- {
- if (has_dtors)
- {
- has_dtors = 0;
- p.run_dtors ();
- }
- }
-};
-
-#define MAX_DLL_BEFORE_INIT 100
-
-class dll_list
-{
- dll *end;
- dll *hold;
- dll_type hold_type;
- static muto protect;
-public:
- dll start;
- int loaded_dlls;
- int reload_on_fork;
- dll *operator [] (const PWCHAR name);
- dll *alloc (HINSTANCE, per_process *, dll_type);
- dll *find (void *);
- void detach (void *);
- void init ();
- void load_after_fork (HANDLE);
- void reserve_space ();
- void load_after_fork_impl (HANDLE, dll* which, int retries);
- dll *find_by_modname (const PWCHAR name);
- void populate_deps (dll* d);
- void topsort ();
- void topsort_visit (dll* d, bool goto_tail);
- void append (dll* d);
-
- dll *inext ()
- {
- while ((hold = hold->next))
- if (hold_type == DLL_ANY || hold->type == hold_type)
- break;
- return hold;
- }
-
- dll *istart (dll_type t)
- {
- hold_type = t;
- hold = &start;
- return inext ();
- }
- void guard(bool lockit)
- {
- if (lockit)
- protect.acquire ();
- else
- protect.release ();
- }
- friend void dll_global_dtors ();
- dll_list () { protect.init ("dll_list"); }
-};
-
-/* References:
- http://msdn.microsoft.com/en-us/windows/hardware/gg463125
- http://msdn.microsoft.com/en-us/library/ms809762.aspx
-*/
-struct pefile
-{
- IMAGE_DOS_HEADER dos_hdr;
-
- char* rva (ptrdiff_t offset) { return (char*) this + offset; }
- PIMAGE_NT_HEADERS pe_hdr () { return (PIMAGE_NT_HEADERS) rva (dos_hdr.e_lfanew); }
- PIMAGE_OPTIONAL_HEADER optional_hdr () { return &pe_hdr ()->OptionalHeader; }
- PIMAGE_DATA_DIRECTORY idata_dir (DWORD which)
- {
- PIMAGE_OPTIONAL_HEADER oh = optional_hdr ();
- return (which < oh->NumberOfRvaAndSizes)? oh->DataDirectory + which : 0;
- }
-};
-
-extern dll_list dlls;
-void dll_global_dtors ();
-
-/* These probably belong in a newlib header but we can keep them here
- for now. */
-extern "C" int __cxa_atexit(void (*)(void*), void*, void*);
-extern "C" int __cxa_finalize(void*);
diff --git a/winsup/cygwin/dllfixdbg b/winsup/cygwin/dllfixdbg
deleted file mode 100755
index 95c4470cd..000000000
--- a/winsup/cygwin/dllfixdbg
+++ /dev/null
@@ -1,75 +0,0 @@
-#!/usr/bin/perl
-# Copyright 2005, 2006, 2007, 2008, 2011 Red Hat, Inc.
-#
-# This file is part of Cygwin.
-#
-# This software is a copyrighted work licensed under the terms of the
-# Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-# details.
-#
-use integer;
-use strict;
-sub xit($@);
-my $strip = $ARGV[0] eq '-s';
-shift if $strip;
-my $objdump = shift;
-my @objcopy = ((shift));
-my $dll = shift;
-my $dbg = shift;
-xit 0, @objcopy, '-R', '.gnu_debuglink_overlay', '--add-gnu-debuglink=/dev/null', '--only-keep-debug', $dll, $dbg;
-xit 0, @objcopy, '-g', '--add-gnu-debuglink=' . $dbg, $dll;
-open(OBJDUMP, '-|', "$objdump --headers $dll");
-my %section;
-while (<OBJDUMP>) {
- my ($idx, $name, $size, $vma, $lma, $fileoff, $algn) = /^\s*(\d+)\s+(\.\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s*$/;
- if ($name eq '.gnu_debuglink') {
- push(@objcopy, '--set-section-flag', '.gnu_debuglink=contents,readonly,debug,noload');
- $idx = $section{'.gnu_debuglink'}{-idx} if defined($section{'.gnu_debuglink'}{-idx});
- } elsif ($name eq '.gnu_debuglink_overlay') {
- push (@objcopy, '-R', '.gnu_debuglink_overlay');
- $section{'.gnu_debuglink'}{-idx} = $idx;
- next;
- }
- defined($idx) and
- $section{$name} = {-idx=>int($idx), -size=>hex($size), -vma=>hex($vma), -lma=>hex($lma), -fileoff=>hex($fileoff),
- -algn=>0x00001000};
-}
-close OBJDUMP;
-my $vma;
-for my $k (sort {$section{$a}{-idx} <=> $section{$b}{-idx}} keys %section) {
- if ($strip && $k =~ /\.(?:stab|debug)/o) {
- push(@objcopy, '-R', $k);
- next;
- }
- if (!defined($vma)) {
- $vma = $section{$k}{-vma};
- }
- if ($vma != $section{$k}{-vma}) {
- my $newvma = align($vma, $section{$k}{-algn});
- if ($newvma != $vma) {
- printf STDERR "$0: ERROR $k VMA 0x%08x != 0x%08x\n", $vma, $newvma;
- exit 1;
- }
- push(@objcopy, '--change-section-address', sprintf "$k=0x%08x", $vma);
- }
- $vma = align($vma + $section{$k}{-size}, $section{$k}{-algn});
-}
-
-warn "$0: ERROR final VMA (" . sprintf("0x%08x", $vma) . ") not on 64K boundary\n" if $vma != align($vma, 64 * 1024);
-push(@objcopy, $dll, @ARGV);
-xit 1, @objcopy;
-sub align {
- my $n = $_[0];
- my $align = $_[1] - 1;
- return ($n + $align) & ~$align;
-}
-
-sub xit($@) {
- my $execit = shift;
- print "+ @_\n";
- if ($execit) {
- exec @_ or die "$0: couldn't exec $_[0] - $!\n";
- } else {
- system @_ and die "$0: couldn't exec $_[0] - $!\n";
- }
-}
diff --git a/winsup/cygwin/dtable.cc b/winsup/cygwin/dtable.cc
deleted file mode 100644
index 17ed51f9a..000000000
--- a/winsup/cygwin/dtable.cc
+++ /dev/null
@@ -1,1099 +0,0 @@
-/* dtable.cc: file descriptor support.
-
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#define __INSIDE_CYGWIN_NET__
-
-#include "winsup.h"
-#include <stdlib.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <wchar.h>
-
-#define USE_SYS_TYPES_FD_SET
-#include <winsock.h>
-#include "pinfo.h"
-#include "cygerrno.h"
-#include "perprocess.h"
-#include "path.h"
-#include "fhandler.h"
-#include "select.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "tls_pbuf.h"
-#include "ntdll.h"
-#include "shared_info.h"
-
-static const DWORD std_consts[] = {STD_INPUT_HANDLE, STD_OUTPUT_HANDLE,
- STD_ERROR_HANDLE};
-
-static bool handle_to_fn (HANDLE, char *);
-
-#define WCLEN(x) ((sizeof (x) / sizeof (WCHAR)) - 1)
-static const char unknown_file[] = "some disk file";
-static const WCHAR DEV_NULL[] = L"\\Device\\Null";
-static const WCHAR DEV_SOCKET[] = L"\\Device\\Afd";
-
-static const WCHAR DEVICE_PREFIX[] = L"\\device\\";
-static const size_t DEVICE_PREFIX_LEN WCLEN (DEVICE_PREFIX);
-
-static const WCHAR DEV_NAMED_PIPE[] = L"\\Device\\NamedPipe\\";
-static const size_t DEV_NAMED_PIPE_LEN = WCLEN (DEV_NAMED_PIPE);
-
-static const WCHAR DEV_REMOTE[] = L"\\Device\\LanmanRedirector\\";
-static const size_t DEV_REMOTE_LEN = WCLEN (DEV_REMOTE);
-
-static const WCHAR DEV_REMOTE1[] = L"\\Device\\WinDfs\\Root\\";
-static const size_t DEV_REMOTE1_LEN = WCLEN (DEV_REMOTE1);
-
-/* Set aside space for the table of fds */
-void
-dtable_init ()
-{
- if (!cygheap->fdtab.size)
- cygheap->fdtab.extend (NOFILE_INCR, 0);
-}
-
-void __stdcall
-set_std_handle (int fd)
-{
- fhandler_base *fh = cygheap->fdtab[fd];
- if (fd == 0)
- SetStdHandle (std_consts[fd], fh ? fh->get_handle () : NULL);
- else if (fd <= 2)
- SetStdHandle (std_consts[fd], fh ? fh->get_output_handle () : NULL);
-}
-
-int
-dtable::extend (size_t howmuch, size_t min)
-{
- size_t new_size = size + howmuch;
- fhandler_base **newfds;
-
- if (new_size <= OPEN_MAX_MAX)
- /* ok */;
- else if (size < OPEN_MAX_MAX && min < OPEN_MAX_MAX)
- new_size = OPEN_MAX_MAX;
- else
- {
- set_errno (EMFILE);
- return 0;
- }
-
- /* Try to allocate more space for fd table. We can't call realloc ()
- here to preserve old table if memory allocation fails */
-
- if (!(newfds = (fhandler_base **) ccalloc (HEAP_ARGV, new_size, sizeof newfds[0])))
- {
- debug_printf ("calloc failed");
- set_errno (ENOMEM);
- return 0;
- }
- if (fds)
- {
- memcpy (newfds, fds, size * sizeof (fds[0]));
- cfree (fds);
- }
-
- size = new_size;
- fds = newfds;
- debug_printf ("size %ld, fds %p", size, fds);
- return 1;
-}
-
-void
-dtable::get_debugger_info ()
-{
- extern bool jit_debug;
- if (!jit_debug && being_debugged ())
- {
- char std[3][sizeof ("/dev/ptyNNNN")];
- std[0][0] = std[1][0] = std [2][0] = '\0';
- char buf[sizeof ("cYgstd %x") + 64];
- sprintf (buf, "cYgstd %p %zx %x", &std, sizeof (std[0]), 3);
- OutputDebugString (buf);
- for (int i = 0; i < 3; i++)
- if (std[i][0])
- {
- HANDLE h = GetStdHandle (std_consts[i]);
- fhandler_base *fh = build_fh_name (std[i]);
- if (!fh)
- continue;
- fds[i] = fh;
- if (!fh->open ((i ? (i == 2 ? O_RDWR : O_WRONLY) : O_RDONLY)
- | O_BINARY, 0777))
- release (i);
- else
- {
- CloseHandle (h);
- /* Copy to Windows' idea of a standard handle, otherwise
- we have invalid standard handles when calling Windows
- functions (small_printf and strace might suffer, too). */
- SetStdHandle (std_consts[i], i ? fh->get_output_handle ()
- : fh->get_handle ());
- }
- }
- }
-}
-
-/* Initialize the file descriptor/handle mapping table.
- This function should only be called when a cygwin function is invoked
- by a non-cygwin function, i.e., it should only happen very rarely. */
-
-void
-dtable::stdio_init ()
-{
- if (myself->cygstarted || ISSTATE (myself, PID_CYGPARENT))
- {
- tty_min *t = cygwin_shared->tty.get_cttyp ();
- if (t && t->is_console)
- init_console_handler (true);
- return;
- }
-
- HANDLE in = GetStdHandle (STD_INPUT_HANDLE);
- HANDLE out = GetStdHandle (STD_OUTPUT_HANDLE);
- HANDLE err = GetStdHandle (STD_ERROR_HANDLE);
-
- init_std_file_from_handle (0, in);
-
- /* STD_ERROR_HANDLE has been observed to be the same as
- STD_OUTPUT_HANDLE. We need separate handles (e.g. using pipes
- to pass data from child to parent). */
- /* CV 2008-10-17: Under debugger control, std fd's have been potentially
- initialized in dtable::get_debugger_info (). In this case
- init_std_file_from_handle is a no-op, so, even if out == err we don't
- want to duplicate the handle since it will be unused. */
- if (out == err && (!being_debugged () || not_open (2)))
- {
- /* Since this code is not invoked for forked tasks, we don't have
- to worry about the close-on-exec flag here. */
- if (!DuplicateHandle (GetCurrentProcess (), out,
- GetCurrentProcess (), &err,
- 0, TRUE, DUPLICATE_SAME_ACCESS))
- {
- /* If that fails, do this as a fall back. */
- err = out;
- system_printf ("couldn't make stderr distinct from stdout, %E");
- }
- }
-
- init_std_file_from_handle (1, out);
- init_std_file_from_handle (2, err);
-}
-
-const int dtable::initial_archetype_size;
-
-fhandler_base *
-dtable::find_archetype (device& dev)
-{
- for (unsigned i = 0; i < farchetype; i++)
- if (archetypes[i]->get_device () == (dev_t) dev)
- return archetypes[i];
- return NULL;
-}
-
-fhandler_base **
-dtable::add_archetype ()
-{
- if (farchetype++ >= narchetypes)
- archetypes = (fhandler_base **) crealloc_abort (archetypes, (narchetypes += initial_archetype_size) * sizeof archetypes[0]);
- return archetypes + farchetype - 1;
-}
-
-void
-dtable::delete_archetype (fhandler_base *fh)
-{
- for (unsigned i = 0; i < farchetype; i++)
- if (fh == archetypes[i])
- {
- debug_printf ("deleting element %d for %s(%d/%d)", i, fh->get_name (),
- fh->dev ().get_major (), fh->dev ().get_minor ());
- if (i < --farchetype)
- archetypes[i] = archetypes[farchetype];
- break;
- }
-
- delete fh;
-}
-
-int
-dtable::find_unused_handle (size_t start)
-{
- /* When extending, try to allocate a NOFILE_INCR chunk
- following the empty fd. */
- size_t extendby = NOFILE_INCR + ((start >= size) ? 1 + start - size : 0);
-
- /* This do loop should only ever execute twice. */
- int res = -1;
- do
- {
- for (size_t i = start; i < size; i++)
- if (fds[i] == NULL)
- {
- res = (int) i;
- goto out;
- }
- }
- while (extend (extendby, start));
-out:
- return res;
-}
-
-void
-dtable::release (int fd)
-{
- if (fds[fd]->need_fixup_before ())
- dec_need_fixup_before ();
- fds[fd]->dec_refcnt ();
- fds[fd] = NULL;
- if (fd <= 2)
- set_std_handle (fd);
-}
-
-extern "C" int
-cygwin_attach_handle_to_fd (char *name, int fd, HANDLE handle, mode_t bin,
- DWORD myaccess)
-{
- cygheap->fdtab.lock ();
- if (fd == -1)
- fd = cygheap->fdtab.find_unused_handle ();
- fhandler_base *fh = build_fh_name (name);
- if (!fh)
- fd = -1;
- else
- {
- cygheap->fdtab[fd] = fh;
- cygheap->fdtab[fd]->inc_refcnt ();
- fh->init (handle, myaccess, bin ?: fh->pc_binmode ());
- }
- cygheap->fdtab.unlock ();
- return fd;
-}
-
-void
-dtable::init_std_file_from_handle (int fd, HANDLE handle)
-{
- tmp_pathbuf tp;
- CONSOLE_SCREEN_BUFFER_INFO buf;
- DCB dcb;
- unsigned bin = O_BINARY;
- device dev = {};
-
- first_fd_for_open = 0;
-
- if (!not_open (fd))
- return;
-
- SetLastError (0);
- DWORD access = 0;
- DWORD ft = GetFileType (handle);
- char *name = tp.c_get ();
- name[0] = '\0';
- if (ft == FILE_TYPE_UNKNOWN && GetLastError () == ERROR_INVALID_HANDLE)
- /* can't figure out what this is */;
- else if (ft == FILE_TYPE_PIPE)
- {
- int rcv = 0, len = sizeof (int);
-
- if (handle_to_fn (handle, name))
- dev.parse (name);
- else if (strcmp (name, ":sock:") == 0
- /* NtQueryObject returns an error when called on an LSP socket
- handle. While fdsock now tries to fetch the underlying
- base socket, this only works on Vista and later. */
- || (strcmp (name, unknown_file) == 0
- && !::getsockopt ((SOCKET) handle, SOL_SOCKET, SO_RCVBUF,
- (char *) &rcv, &len)))
- {
- /* socket */
- dev = *tcp_dev;
- name[0] = '\0';
- }
- else if (fd == 0)
- dev = *piper_dev;
- else
- dev = *pipew_dev;
- }
- else if (GetConsoleScreenBufferInfo (handle, &buf)
- || GetNumberOfConsoleInputEvents (handle, (DWORD *) &buf))
- {
- /* Console I/O */
- if (myself->ctty > 0)
- dev.parse (myself->ctty);
- else
- {
- dev.parse (FH_CONSOLE);
- CloseHandle (handle);
- handle = INVALID_HANDLE_VALUE;
- }
- }
- else if (GetCommState (handle, &dcb))
- /* FIXME: Not right - assumes ttyS0 */
- dev.parse (DEV_SERIAL_MAJOR, 0);
- else
- /* Try to figure it out from context - probably a disk file */
- handle_to_fn (handle, name);
-
- if (!name[0] && !dev)
- fds[fd] = NULL;
- else
- {
- fhandler_base *fh;
-
- if (dev)
- fh = build_fh_dev (dev);
- else
- fh = build_fh_name (name);
-
- if (!fh)
- return;
-
- if (name[0])
- {
- bin = fh->pc_binmode ();
- if (!bin)
- {
- bin = fh->get_default_fmode (O_RDWR);
- if (!bin && dev)
- bin = O_BINARY;
- }
- }
-
- IO_STATUS_BLOCK io;
- FILE_ACCESS_INFORMATION fai;
- int openflags = O_BINARY;
-
- /* Console windows are no kernel objects up to Windows 7/2008R2, so the
- access mask returned by NtQueryInformationFile is meaningless. CMD
- always hands down stdin handles as R/O handles, but our tty slave
- sides are R/W. */
- if (fh->is_tty ())
- {
- openflags |= O_RDWR;
- access |= GENERIC_READ | GENERIC_WRITE;
- }
- else if (!iscons_dev (dev)
- && NT_SUCCESS (NtQueryInformationFile (handle, &io, &fai,
- sizeof fai,
- FileAccessInformation)))
- {
- if (fai.AccessFlags & FILE_WRITE_DATA)
- {
- openflags |= O_WRONLY;
- access |= GENERIC_WRITE;
- }
- if (fai.AccessFlags & FILE_READ_DATA)
- {
- openflags |= openflags & O_WRONLY ? O_RDWR : O_RDONLY;
- access |= GENERIC_READ;
- }
- }
- else if (fd == 0)
- {
- openflags |= O_RDONLY;
- access |= GENERIC_READ;
- }
- else
- {
- openflags |= O_WRONLY;
- access |= GENERIC_WRITE; /* Should be rdwr for stderr but not sure that's
- possible for some versions of handles */
- }
- if (!fh->init (handle, access, bin))
- api_fatal ("couldn't initialize fd %d for %s", fd, fh->get_name ());
-
- fh->open_setup (openflags);
- fh->usecount = 0;
- cygheap->fdtab[fd] = fh;
- cygheap->fdtab[fd]->inc_refcnt ();
- set_std_handle (fd);
- paranoid_printf ("fd %d, handle %p", fd, handle);
- }
-}
-
-#define cnew(name, ...) \
- ({ \
- void* ptr = (void*) ccalloc (HEAP_FHANDLER, 1, sizeof (name)); \
- ptr ? new (ptr) name (__VA_ARGS__) : NULL; \
- })
-
-#define cnew_no_ctor(name, ...) \
- ({ \
- void* ptr = (void*) ccalloc (HEAP_FHANDLER, 1, sizeof (name)); \
- ptr ? new (ptr) name (ptr) : NULL; \
- })
-
-fhandler_base *
-build_fh_name (const char *name, unsigned opt, suffix_info *si)
-{
- path_conv pc (name, opt | PC_NULLEMPTY | PC_POSIX, si);
- if (pc.error)
- {
- fhandler_base *fh = cnew (fhandler_nodevice);
- if (fh)
- fh->set_error (pc.error);
- set_errno (fh ? pc.error : EMFILE);
- return fh;
- }
-
- return build_fh_pc (pc);
-}
-
-fhandler_base *
-build_fh_dev (const device& dev, const char *unix_name)
-{
- path_conv pc (dev);
- if (unix_name)
- pc.set_normalized_path (unix_name);
- else
- pc.set_normalized_path (dev.name);
- return build_fh_pc (pc);
-}
-
-#define fh_unset ((fhandler_base *) 1)
-static device last_tty_dev;
-#define fh_last_tty_dev ((fhandler_termios *) cygheap->fdtab.find_archetype (last_tty_dev))
-
-static fhandler_base *
-fh_alloc (path_conv& pc)
-{
- fhandler_base *fh = fh_unset;
- fhandler_base *fhraw = NULL;
-
- switch (pc.dev.get_major ())
- {
- case DEV_PTYS_MAJOR:
- fh = cnew (fhandler_pty_slave, pc.dev.get_minor ());
- break;
- case DEV_PTYM_MAJOR:
- fh = cnew (fhandler_pty_master, pc.dev.get_minor ());
- break;
- case DEV_FLOPPY_MAJOR:
- case DEV_CDROM_MAJOR:
- case DEV_SD_MAJOR:
- case DEV_SD1_MAJOR:
- case DEV_SD2_MAJOR:
- case DEV_SD3_MAJOR:
- case DEV_SD4_MAJOR:
- case DEV_SD5_MAJOR:
- case DEV_SD6_MAJOR:
- case DEV_SD7_MAJOR:
- fh = cnew (fhandler_dev_floppy);
- break;
- case DEV_TAPE_MAJOR:
- fh = cnew (fhandler_dev_tape);
- break;
- case DEV_SERIAL_MAJOR:
- fh = cnew (fhandler_serial);
- break;
- case DEV_CONS_MAJOR:
- fh = cnew (fhandler_console, pc.dev);
- break;
- default:
- switch ((dev_t) pc.dev)
- {
- case FH_CONSOLE:
- case FH_CONIN:
- case FH_CONOUT:
- fh = cnew (fhandler_console, pc.dev);
- break;
- case FH_PTMX:
- if (pc.isopen ())
- fh = cnew (fhandler_pty_master, -1);
- else
- fhraw = cnew_no_ctor (fhandler_pty_master, -1);
- break;
- case FH_WINDOWS:
- fh = cnew (fhandler_windows);
- break;
- case FH_FIFO:
- fh = cnew (fhandler_fifo);
- break;
- case FH_PIPE:
- case FH_PIPER:
- case FH_PIPEW:
- fh = cnew (fhandler_pipe);
- break;
- case FH_TCP:
- case FH_UDP:
- case FH_ICMP:
- case FH_UNIX:
- case FH_STREAM:
- case FH_DGRAM:
- fh = cnew (fhandler_socket);
- break;
- case FH_FS:
- fh = cnew (fhandler_disk_file);
- break;
- case FH_NULL:
- fh = cnew (fhandler_dev_null);
- break;
- case FH_ZERO:
- case FH_FULL:
- fh = cnew (fhandler_dev_zero);
- break;
- case FH_RANDOM:
- case FH_URANDOM:
- fh = cnew (fhandler_dev_random);
- break;
- case FH_CLIPBOARD:
- fh = cnew (fhandler_dev_clipboard);
- break;
- case FH_OSS_DSP:
- fh = cnew (fhandler_dev_dsp);
- break;
- case FH_PROC:
- fh = cnew (fhandler_proc);
- break;
- case FH_REGISTRY:
- fh = cnew (fhandler_registry);
- break;
- case FH_PROCESS:
- case FH_PROCESSFD:
- fh = cnew (fhandler_process);
- break;
- case FH_PROCNET:
- fh = cnew (fhandler_procnet);
- break;
- case FH_PROCSYS:
- fh = cnew (fhandler_procsys);
- break;
- case FH_PROCSYSVIPC:
- fh = cnew (fhandler_procsysvipc);
- break;
- case FH_NETDRIVE:
- fh = cnew (fhandler_netdrive);
- break;
- case FH_DEV:
- fh = cnew (fhandler_dev);
- break;
- case FH_CYGDRIVE:
- fh = cnew (fhandler_cygdrive);
- break;
- case FH_TTY:
- if (!pc.isopen ())
- {
- fhraw = cnew_no_ctor (fhandler_console, -1);
- debug_printf ("not called from open for /dev/tty");
- }
- else if (myself->ctty <= 0 && last_tty_dev
- && !myself->set_ctty (fh_last_tty_dev, 0))
- debug_printf ("no /dev/tty assigned");
- else if (myself->ctty > 0)
- {
- debug_printf ("determining /dev/tty assignment for ctty %p", myself->ctty);
- if (iscons_dev (myself->ctty))
- fh = cnew (fhandler_console, pc.dev);
- else
- fh = cnew (fhandler_pty_slave, myself->ctty);
- if (fh->dev () != FH_NADA)
- fh->set_name ("/dev/tty");
- }
- break;
- case FH_KMSG:
- fh = cnew (fhandler_mailslot);
- break;
- }
- }
-
- /* If `fhraw' is set that means that this fhandler is just a dummy
- set up for stat(). Mock it up for use by stat without actually
- trying to do any real initialization. */
- if (fhraw)
- {
- fh = fhraw;
- fh->set_name (pc);
- if (fh->use_archetype ())
- fh->archetype = fh;
- }
- if (fh == fh_unset)
- fh = cnew (fhandler_nodevice);
- else if (fh->dev () == FH_ERROR)
- {
- if (!pc.isopen () && pc.dev.isfs ())
- fh->dev () = pc.dev; /* Special case: This file actually exists on
- disk and we're not trying to open it so just
- return the info from pc. */
- else
- {
- delete fh;
- fh = NULL;
- }
- }
- return fh;
-}
-
-fhandler_base *
-build_fh_pc (path_conv& pc)
-{
- fhandler_base *fh = fh_alloc (pc);
-
- if (!fh)
- {
- set_errno (ENXIO);
- goto out;
- }
-
- if (!fh->use_archetype ())
- fh->set_name (pc);
- else if ((fh->archetype = cygheap->fdtab.find_archetype (fh->dev ())))
- {
- debug_printf ("found an archetype for %s(%d/%d) io_handle %p", fh->get_name (), fh->dev ().get_major (), fh->dev ().get_minor (),
- fh->archetype->get_io_handle ());
- if (!fh->get_name ())
- fh->set_name (fh->archetype->dev ().name);
- }
- else if (cygwin_finished_initializing && !pc.isopen ())
- fh->set_name (pc);
- else
- {
- if (!fh->get_name ())
- fh->set_name (fh->dev ().native);
- fh->archetype = fh->clone ();
- debug_printf ("created an archetype (%p) for %s(%d/%d)", fh->archetype, fh->get_name (), fh->dev ().get_major (), fh->dev ().get_minor ());
- fh->archetype->archetype = NULL;
- *cygheap->fdtab.add_archetype () = fh->archetype;
- }
-
-
- /* Keep track of the last tty-like thing opened. We could potentially want
- to open it if /dev/tty is referenced. */
- if (myself->ctty > 0 || !fh->is_tty () || !pc.isctty_capable ())
- last_tty_dev = FH_NADA;
- else
- last_tty_dev = fh->dev ();
-
-out:
- debug_printf ("fh %p, dev %08x", fh, fh ? (dev_t) fh->dev () : 0);
- return fh;
-}
-
-fhandler_base *
-dtable::dup_worker (fhandler_base *oldfh, int flags)
-{
- /* Don't call set_name in build_fh_pc. It will be called in
- fhandler_base::operator= below. Calling it twice will result
- in double allocation. */
- fhandler_base *newfh = oldfh->clone ();
- if (!newfh)
- debug_printf ("build_fh_pc failed");
- else
- {
- if (!oldfh->archetype)
- newfh->set_io_handle (NULL);
-
- newfh->pc.reset_conv_handle ();
- if (oldfh->dup (newfh, flags))
- {
- delete newfh;
- newfh = NULL;
- debug_printf ("oldfh->dup failed");
- }
- else
- {
- /* Don't increment refcnt here since we don't know if this is a
- allocated fd. So we leave this chore to the caller. */
-
- newfh->usecount = 0;
- newfh->archetype_usecount (1);
-
- /* The O_CLOEXEC flag enforces close-on-exec behaviour. */
- newfh->set_close_on_exec (!!(flags & O_CLOEXEC));
- debug_printf ("duped '%s' old %p, new %p", oldfh->get_name (),
- oldfh->get_io_handle (), newfh->get_io_handle ());
- }
- }
- return newfh;
-}
-
-int
-dtable::dup3 (int oldfd, int newfd, int flags)
-{
- int res = -1;
- fhandler_base *newfh = NULL; // = NULL to avoid an incorrect warning
-
- MALLOC_CHECK;
- debug_printf ("dup3 (%d, %d, %y)", oldfd, newfd, flags);
- lock ();
- bool do_unlock = true;
- bool unlock_on_return;
- if (!(flags & O_EXCL))
- unlock_on_return = true; /* Relinquish lock on return */
- else
- {
- flags &= ~O_EXCL;
- unlock_on_return = false; /* Return with lock set on success */
- }
-
- if (not_open (oldfd))
- {
- syscall_printf ("fd %d not open", oldfd);
- set_errno (EBADF);
- goto done;
- }
- if (newfd >= OPEN_MAX_MAX || newfd < 0)
- {
- syscall_printf ("new fd out of bounds: %d", newfd);
- set_errno (EBADF);
- goto done;
- }
- if ((flags & ~O_CLOEXEC) != 0)
- {
- syscall_printf ("invalid flags value %y", flags);
- set_errno (EINVAL);
- return -1;
- }
-
- /* This is a temporary kludge until all utilities can catch up with
- a change in behavior that implements linux functionality: opening
- a tty should not automatically cause it to become the controlling
- tty for the process. */
- if (newfd > 2)
- flags |= O_NOCTTY;
-
- if ((newfh = dup_worker (fds[oldfd], flags)) == NULL)
- {
- res = -1;
- goto done;
- }
-
- debug_printf ("newfh->io_handle %p, oldfh->io_handle %p, new win32_name %p, old win32_name %p",
- newfh->get_io_handle (), fds[oldfd]->get_io_handle (), newfh->get_win32_name (), fds[oldfd]->get_win32_name ());
-
- if (!not_open (newfd))
- close (newfd);
- else if ((size_t) newfd >= size
- && find_unused_handle (newfd) < 0)
- /* couldn't extend fdtab */
- {
- newfh->close ();
- res = -1;
- goto done;
- }
-
- fds[newfd] = newfh;
-
- if ((res = newfd) <= 2)
- set_std_handle (res);
- do_unlock = unlock_on_return;
-
-done:
- MALLOC_CHECK;
- if (do_unlock)
- unlock ();
- syscall_printf ("%R = dup3(%d, %d, %y)", res, oldfd, newfd, flags);
-
- return res;
-}
-
-bool
-dtable::select_read (int fd, select_stuff *ss)
-{
- if (not_open (fd))
- {
- set_errno (EBADF);
- return false;
- }
- fhandler_base *fh = fds[fd];
- select_record *s = fh->select_read (ss);
- s->fd = fd;
- if (!s->fh)
- s->fh = fh;
- s->thread_errno = 0;
- debug_printf ("%s fd %d", fh->get_name (), fd);
- return true;
-}
-
-bool
-dtable::select_write (int fd, select_stuff *ss)
-{
- if (not_open (fd))
- {
- set_errno (EBADF);
- return NULL;
- }
- fhandler_base *fh = fds[fd];
- select_record *s = fh->select_write (ss);
- s->fd = fd;
- s->fh = fh;
- s->thread_errno = 0;
- debug_printf ("%s fd %d", fh->get_name (), fd);
- return true;
-}
-
-bool
-dtable::select_except (int fd, select_stuff *ss)
-{
- if (not_open (fd))
- {
- set_errno (EBADF);
- return NULL;
- }
- fhandler_base *fh = fds[fd];
- select_record *s = fh->select_except (ss);
- s->fd = fd;
- s->fh = fh;
- s->thread_errno = 0;
- debug_printf ("%s fd %d", fh->get_name (), fd);
- return true;
-}
-
-void
-dtable::move_fd (int from, int to)
-{
- // close (to); /* It is assumed that this is close-on-exec */
- fds[to] = fds[from];
- fds[from] = NULL;
-}
-
-void
-dtable::set_file_pointers_for_exec ()
-{
-/* This is not POSIX-compliant so the function is only called for
- non-Cygwin processes. */
- LONG off_high = 0;
- lock ();
- fhandler_base *fh;
- for (size_t i = 0; i < size; i++)
- if ((fh = fds[i]) != NULL && fh->get_flags () & O_APPEND)
- SetFilePointer (fh->get_handle (), 0, &off_high, FILE_END);
- unlock ();
-}
-
-void
-dtable::fixup_close (size_t i, fhandler_base *fh)
-{
- if (fh->archetype)
- {
- debug_printf ("closing fd %d since it is an archetype", i);
- fh->close_with_arch ();
- }
- release (i);
-}
-
-void
-dtable::fixup_after_exec ()
-{
- first_fd_for_open = 0;
- fhandler_base *fh;
- for (size_t i = 0; i < size; i++)
- if ((fh = fds[i]) != NULL)
- {
- fh->clear_readahead ();
- fh->fixup_after_exec ();
- /* Close the handle if it's close-on-exec or if an error was detected
- (typically with opening a console in a gui app) by fixup_after_exec.
- */
- if (fh->close_on_exec () || (!fh->nohandle () && !fh->get_io_handle ()))
- fixup_close (i, fh);
- else if (fh->get_popen_pid ())
- close (i);
- else if (i == 0)
- SetStdHandle (std_consts[i], fh->get_io_handle ());
- else if (i <= 2)
- SetStdHandle (std_consts[i], fh->get_output_handle ());
- }
-}
-
-void
-dtable::fixup_after_fork (HANDLE parent)
-{
- fhandler_base *fh;
- for (size_t i = 0; i < size; i++)
- if ((fh = fds[i]) != NULL)
- {
- if (fh->close_on_exec () || fh->need_fork_fixup ())
- {
- debug_printf ("fd %d (%s)", i, fh->get_name ());
- fh->fixup_after_fork (parent);
- if (!fh->nohandle () && !fh->get_io_handle ())
- {
- /* This should actually never happen but it's here to make sure
- we don't crash due to access of an unopened file handle. */
- fixup_close (i, fh);
- continue;
- }
- }
- if (i == 0)
- SetStdHandle (std_consts[i], fh->get_io_handle ());
- else if (i <= 2)
- SetStdHandle (std_consts[i], fh->get_output_handle ());
- }
-}
-
-static void
-decode_tty (char *buf, WCHAR *w32)
-{
- int ttyn = wcstol (w32, NULL, 10);
- __ptsname (buf, ttyn);
-}
-
-/* Try to derive posix filename from given handle. Return true if
- the handle is associated with a cygwin tty. */
-static bool
-handle_to_fn (HANDLE h, char *posix_fn)
-{
- tmp_pathbuf tp;
- ULONG len = 0;
- WCHAR *maxmatchdos = NULL;
- PWCHAR device = tp.w_get ();
- int maxmatchlen = 0;
- OBJECT_NAME_INFORMATION *ntfn = (OBJECT_NAME_INFORMATION *) tp.w_get ();
-
- NTSTATUS status = NtQueryObject (h, ObjectNameInformation, ntfn, 65536, &len);
- if (!NT_SUCCESS (status))
- debug_printf ("NtQueryObject failed, %y", status);
- // NT seems to do this on an unopened file
- else if (!ntfn->Name.Buffer)
- debug_printf ("nt->Name.Buffer == NULL");
- else
- {
- WCHAR *w32 = ntfn->Name.Buffer;
- size_t w32len = ntfn->Name.Length / sizeof (WCHAR);
- w32[w32len] = L'\0';
-
- if (wcscasecmp (w32, DEV_NULL) == 0)
- {
- strcpy (posix_fn, "/dev/null");
- return false;
- }
-
- if (wcscasecmp (w32, DEV_SOCKET) == 0)
- {
- strcpy (posix_fn, ":sock:");
- return false;
- }
-
- if (wcsncasecmp (w32, DEV_NAMED_PIPE, DEV_NAMED_PIPE_LEN) == 0)
- {
- w32 += DEV_NAMED_PIPE_LEN;
- if (wcsncmp (w32, L"cygwin-", WCLEN (L"cygwin-")) != 0)
- return false;
- w32 += WCLEN (L"cygwin-");
- /* Check for installation key and trailing dash. */
- w32len = cygheap->installation_key.Length / sizeof (WCHAR);
- if (w32len
- && wcsncmp (w32, cygheap->installation_key.Buffer, w32len) != 0)
- return false;
- w32 += w32len;
- if (*w32 != L'-')
- return false;
- ++w32;
- bool istty = wcsncmp (w32, L"pty", WCLEN (L"pty")) == 0;
- if (istty)
- decode_tty (posix_fn, w32 + WCLEN (L"pty"));
- else if (wcsncmp (w32, L"pipe", WCLEN (L"pipe")) == 0)
- strcpy (posix_fn, "/dev/pipe");
- return istty;
- }
-
- WCHAR fnbuf[64 * 1024];
- if (wcsncasecmp (w32, DEVICE_PREFIX, DEVICE_PREFIX_LEN) != 0
- || !QueryDosDeviceW (NULL, fnbuf, sizeof (fnbuf) / sizeof (WCHAR)))
- {
- sys_wcstombs (posix_fn, NT_MAX_PATH, w32, w32len);
- return false;
- }
-
- for (WCHAR *s = fnbuf; *s; s = wcschr (s, '\0') + 1)
- {
- if (!QueryDosDeviceW (s, device, NT_MAX_PATH))
- continue;
- if (wcschr (s, ':') == NULL)
- continue;
- WCHAR *q = wcsrchr (device, ';');
- if (q)
- {
- WCHAR *r = wcschr (q, '\\');
- if (r)
- wcscpy (q, r + 1);
- }
- int devlen = wcslen (device);
- if (device[devlen - 1] == L'\\')
- device[--devlen] = L'\0';
- if (devlen < maxmatchlen)
- continue;
- if (wcsncmp (device, w32, devlen) != 0||
- (w32[devlen] != L'\0' && w32[devlen] != L'\\'))
- continue;
- maxmatchlen = devlen;
- maxmatchdos = s;
- debug_printf ("current match '%W' = '%W'\n", s, device);
- }
-
- if (maxmatchlen)
- {
- WCHAR *p = wcschr (w32 + DEVICE_PREFIX_LEN, L'\\');
- size_t n = wcslen (maxmatchdos);
- WCHAR ch;
- if (!p)
- ch = L'\0';
- else
- {
- if (maxmatchdos[n - 1] == L'\\')
- n--;
- w32 += maxmatchlen - n;
- ch = L'\\';
- }
- memcpy (w32, maxmatchdos, n * sizeof (WCHAR));
- w32[n] = ch;
- }
- else if (wcsncmp (w32, DEV_REMOTE, DEV_REMOTE_LEN) == 0)
- {
- w32 += DEV_REMOTE_LEN - 2;
- *w32 = L'\\';
- debug_printf ("remote drive");
- }
- else if (wcsncmp (w32, DEV_REMOTE1, DEV_REMOTE1_LEN) == 0)
- {
- w32 += DEV_REMOTE1_LEN - 2;
- *w32 = L'\\';
- debug_printf ("remote drive");
- }
-
- cygwin_conv_path (CCP_WIN_W_TO_POSIX | CCP_ABSOLUTE, w32, posix_fn,
- NT_MAX_PATH);
-
- debug_printf ("derived path '%W', posix '%s'", w32, posix_fn);
- return false;
- }
-
- strcpy (posix_fn, unknown_file);
- return false;
-}
-
-void
-dtable::fixup_before_fork (DWORD target_proc_id)
-{
- lock ();
- fhandler_base *fh;
- for (size_t i = 0; i < size; i++)
- if ((fh = fds[i]) != NULL)
- {
- debug_printf ("fd %d (%s)", i, fh->get_name ());
- fh->fixup_before_fork_exec (target_proc_id);
- }
- unlock ();
-}
-
-void
-dtable::fixup_before_exec (DWORD target_proc_id)
-{
- lock ();
- fhandler_base *fh;
- for (size_t i = 0; i < size; i++)
- if ((fh = fds[i]) != NULL && !fh->close_on_exec ())
- {
- debug_printf ("fd %d (%s)", i, fh->get_name ());
- fh->fixup_before_fork_exec (target_proc_id);
- }
- unlock ();
-}
diff --git a/winsup/cygwin/dtable.h b/winsup/cygwin/dtable.h
deleted file mode 100644
index 34e975b47..000000000
--- a/winsup/cygwin/dtable.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/* dtable.h: fd table definition.
-
- Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
- 2011, 2012, 2013, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#pragma once
-
-/* Initial and increment values for cygwin's fd table */
-#define NOFILE_INCR 32
-/* Maximum size we allow expanding to. */
-#define OPEN_MAX_MAX (100 * NOFILE_INCR)
-
-#include "thread.h"
-#include "sync.h"
-
-class suffix_info;
-
-#define BFH_OPTS (PC_NULLEMPTY | PC_FULL | PC_POSIX)
-class dtable
-{
- fhandler_base **fds;
-#ifdef NEWVFORK
- fhandler_base **fds_on_hold;
-#endif
- fhandler_base **archetypes;
- unsigned narchetypes;
- unsigned farchetype;
- static const int initial_archetype_size = 8;
- size_t first_fd_for_open;
- int cnt_need_fixup_before;
-public:
- size_t size;
-
- dtable () : archetypes (NULL), narchetypes (0), farchetype (0), first_fd_for_open(3), cnt_need_fixup_before(0) {}
- void init () {first_fd_for_open = 3;}
-
- void dec_need_fixup_before ()
- { if (cnt_need_fixup_before > 0) --cnt_need_fixup_before; }
- void inc_need_fixup_before ()
- { cnt_need_fixup_before++; }
- bool need_fixup_before ()
- { return cnt_need_fixup_before > 0; }
-
- void move_fd (int, int);
- int vfork_child_dup ();
- void vfork_parent_restore ();
- void vfork_child_fixup ();
- fhandler_base *dup_worker (fhandler_base *oldfh, int flags);
- int extend (size_t, size_t) __reg3;
- void fixup_after_fork (HANDLE);
- void fixup_close (size_t, fhandler_base *);
-
- inline int not_open (int fd)
- {
- lock ();
- int res = fd < 0 || fd >= (int) size || fds[fd] == NULL;
- unlock ();
- return res;
- }
- int find_unused_handle (size_t start);
- int find_unused_handle () { return find_unused_handle (first_fd_for_open);}
- void __reg2 release (int fd);
- void init_std_file_from_handle (int fd, HANDLE handle);
- int dup3 (int oldfd, int newfd, int flags);
- void fixup_after_exec ();
- inline fhandler_base *&operator [](int fd) const { return fds[fd]; }
- bool select_read (int fd, select_stuff *);
- bool select_write (int fd, select_stuff *);
- bool select_except (int fd, select_stuff *);
- operator fhandler_base **() {return fds;}
- void stdio_init ();
- void get_debugger_info ();
- void set_file_pointers_for_exec ();
-#ifdef NEWVFORK
- bool in_vfork_cleanup () {return fds_on_hold == fds;}
-#endif
- fhandler_base *find_archetype (device& dev);
- fhandler_base **add_archetype ();
- void delete_archetype (fhandler_base *);
- void fixup_before_exec (DWORD win_proc_id);
- void fixup_before_fork (DWORD win_proc_id);
- void lock () {lock_process::locker.acquire ();}
- void unlock () {lock_process::locker.release ();}
-};
-
-fhandler_base *build_fh_dev (const device&, const char * = NULL);
-fhandler_base *build_fh_name (const char *, unsigned = 0, suffix_info * = NULL);
-fhandler_base *build_fh_pc (path_conv& pc);
-
-void dtable_init ();
-void stdio_init ();
-extern dtable fdtab;
-
-extern "C" int getfdtabsize ();
-extern "C" void setfdtabsize (int);
diff --git a/winsup/cygwin/environ.cc b/winsup/cygwin/environ.cc
deleted file mode 100644
index e9c92c42e..000000000
--- a/winsup/cygwin/environ.cc
+++ /dev/null
@@ -1,1286 +0,0 @@
-/* environ.cc: Cygwin-adopted functions from newlib to manipulate
- process's environment.
-
- Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
- 2008, 2009, 2010, 2011, 2012, 2013, 2014 Red Hat, Inc.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include <userenv.h>
-#include <stdlib.h>
-#include <wchar.h>
-#include <wctype.h>
-#include <ctype.h>
-#include <locale.h>
-#include <assert.h>
-#include <sys/param.h>
-#include <cygwin/version.h>
-#include "pinfo.h"
-#include "perprocess.h"
-#include "path.h"
-#include "cygerrno.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "cygtls.h"
-#include "tls_pbuf.h"
-#include "registry.h"
-#include "environ.h"
-#include "child_info.h"
-#include "shared_info.h"
-#include "ntdll.h"
-
-static char **lastenviron;
-
-/* Parse CYGWIN options */
-
-static NO_COPY bool export_settings = false;
-
-enum settings
- {
- isfunc,
- setdword,
- setbool,
- setbit
- };
-
-/* When BUF is:
- null or empty: disables globbing
- "ignorecase": enables case-insensitive globbing
- anything else: enables case-sensitive globbing */
-static void
-glob_init (const char *buf)
-{
- if (!buf || !*buf)
- {
- allow_glob = false;
- ignore_case_with_glob = false;
- }
- else if (ascii_strncasematch (buf, "ignorecase", 10))
- {
- allow_glob = true;
- ignore_case_with_glob = true;
- }
- else
- {
- allow_glob = true;
- ignore_case_with_glob = false;
- }
-}
-
-static void
-set_proc_retry (const char *buf)
-{
- child_info::retry_count = strtoul (buf, NULL, 0);
-}
-
-static void
-set_winsymlinks (const char *buf)
-{
- if (!buf || !*buf)
- allow_winsymlinks = WSYM_lnk;
- else if (ascii_strncasematch (buf, "lnk", 3))
- allow_winsymlinks = WSYM_lnk;
- /* Make sure to try native symlinks only on systems supporting them. */
- else if (ascii_strncasematch (buf, "native", 6))
- {
- if (wincap.max_sys_priv () < SE_CREATE_SYMBOLIC_LINK_PRIVILEGE)
- {
- if (!user_shared->warned_nonativesyms)
- {
- small_printf ("\"winsymlinks:%s\" option detected in CYGWIN environment variable.\n"
- "Native symlinks are not supported on Windows versions prior to\n"
- "Windows Vista/Server 2008. This option will be ignored.\n", buf);
- user_shared->warned_nonativesyms = 1;
- }
- }
- else
- allow_winsymlinks = ascii_strcasematch (buf + 6, "strict")
- ? WSYM_nativestrict : WSYM_native;
- }
-}
-
-/* The structure below is used to set up an array which is used to
- parse the CYGWIN environment variable or, if enabled, options from
- the registry. */
-static struct parse_thing
- {
- const char *name;
- union parse_setting
- {
- bool *b;
- DWORD *x;
- int *i;
- void (*func)(const char *);
- } setting;
-
- enum settings disposition;
- char *remember;
- union parse_values
- {
- DWORD i;
- const char *s;
- } values[2];
- } known[] NO_COPY =
-{
- {"detect_bloda", {&detect_bloda}, setbool, NULL, {{false}, {true}}},
- {"dosfilewarning", {&dos_file_warning}, setbool, NULL, {{false}, {true}}},
- {"error_start", {func: error_start_init}, isfunc, NULL, {{0}, {0}}},
- {"export", {&export_settings}, setbool, NULL, {{false}, {true}}},
- {"glob", {func: glob_init}, isfunc, NULL, {{0}, {s: "normal"}}},
- {"pipe_byte", {&pipe_byte}, setbool, NULL, {{false}, {true}}},
- {"proc_retry", {func: set_proc_retry}, isfunc, NULL, {{0}, {5}}},
- {"reset_com", {&reset_com}, setbool, NULL, {{false}, {true}}},
- {"wincmdln", {&wincmdln}, setbool, NULL, {{false}, {true}}},
- {"winsymlinks", {func: set_winsymlinks}, isfunc, NULL, {{0}, {0}}},
- {NULL, {0}, setdword, 0, {{0}, {0}}}
-};
-
-/* Return a possibly-quoted token.
- Returns NULL when no more tokens available. */
-static char *
-strbrk(char *&buf)
-{
- buf += strspn(buf, " \t");
- if (!*buf)
- return NULL;
- char *tok = buf;
- char *sep = buf + strcspn(buf, " \t");
- char *quotestart = strchr(buf, '"');
- if (!quotestart || quotestart > sep)
- {
- buf = sep + !!*sep; /* Don't point beyond EOS */
- quotestart = NULL;
- }
- else
- {
- char *quote = quotestart;
- sep = NULL;
- while (!sep)
- {
- char *clquote = strchr (quote + 1, '"');
- if (!clquote)
- sep = strchr (quote, '\0');
- else if (clquote[-1] != '\\')
- sep = clquote;
- else
- {
- memmove (clquote - 1, clquote, 1 + strchr (clquote, '\0') - clquote);
- quote = clquote - 1;
- }
- }
- buf = sep + 1;
- memmove (quotestart, quotestart + 1, sep - quotestart);
- sep--;
- }
- *sep = '\0';
- return tok;
-}
-
-
-/* Parse a string of the form "something=stuff somethingelse=more-stuff",
- silently ignoring unknown "somethings". */
-static void __stdcall
-parse_options (const char *inbuf)
-{
- int istrue;
- parse_thing *k;
-
- if (inbuf == NULL)
- {
- tmp_pathbuf tp;
- char *newbuf = tp.c_get ();
- newbuf[0] = '\0';
- for (k = known; k->name != NULL; k++)
- if (k->remember)
- {
- strcat (strcat (newbuf, " "), k->remember);
- free (k->remember);
- k->remember = NULL;
- }
-
- if (export_settings)
- {
- debug_printf ("%s", newbuf + 1);
- setenv ("CYGWIN", newbuf + 1, 1);
- }
- return;
- }
-
- char *buf = strcpy ((char *) alloca (strlen (inbuf) + 1), inbuf);
-
- while (char *p = strbrk (buf))
- {
- char *keyword_here = p;
- if (!(istrue = !ascii_strncasematch (p, "no", 2)))
- p += 2;
- else if (!(istrue = *p != '-'))
- p++;
-
- char ch, *eq;
- if ((eq = strchr (p, '=')) != NULL || (eq = strchr (p, ':')) != NULL)
- ch = *eq, *eq++ = '\0';
- else
- ch = 0;
-
- for (parse_thing *k = known; k->name != NULL; k++)
- if (ascii_strcasematch (p, k->name))
- {
- switch (k->disposition)
- {
- case isfunc:
- k->setting.func ((!eq || !istrue) ?
- k->values[istrue].s : eq);
- debug_printf ("%s (called func)", k->name);
- break;
- case setdword:
- if (!istrue || !eq)
- *k->setting.x = k->values[istrue].i;
- else
- *k->setting.x = strtol (eq, NULL, 0);
- debug_printf ("%s %u", k->name, *k->setting.x);
- break;
- case setbool:
- if (!istrue || !eq)
- *k->setting.b = k->values[istrue].i;
- else
- *k->setting.b = !!strtol (eq, NULL, 0);
- debug_printf ("%s%s", *k->setting.b ? "" : "no", k->name);
- break;
- case setbit:
- *k->setting.x &= ~k->values[istrue].i;
- if (istrue || (eq && strtol (eq, NULL, 0)))
- *k->setting.x |= k->values[istrue].i;
- debug_printf ("%s %x", k->name, *k->setting.x);
- break;
- }
-
- if (eq)
- *--eq = ch;
-
- int n = eq - p;
- p = strdup (keyword_here);
- if (n > 0)
- p[n] = ':';
- k->remember = p;
- break;
- }
- }
- debug_printf ("returning");
-}
-
-/* Helper functions for the below environment variables which have to
- be converted Win32<->POSIX. */
-extern "C" ssize_t env_PATH_to_posix (const void *, void *, size_t);
-
-ssize_t
-env_plist_to_posix (const void *win32, void *posix, size_t size)
-{
- return cygwin_conv_path_list (CCP_WIN_A_TO_POSIX | CCP_RELATIVE, win32,
- posix, size);
-}
-
-ssize_t
-env_plist_to_win32 (const void *posix, void *win32, size_t size)
-{
- return cygwin_conv_path_list (CCP_POSIX_TO_WIN_A | CCP_RELATIVE, posix,
- win32, size);
-}
-
-ssize_t
-env_path_to_posix (const void *win32, void *posix, size_t size)
-{
- return cygwin_conv_path (CCP_WIN_A_TO_POSIX | CCP_ABSOLUTE, win32,
- posix, size);
-}
-
-ssize_t
-env_path_to_win32 (const void *posix, void *win32, size_t size)
-{
- return cygwin_conv_path (CCP_POSIX_TO_WIN_A | CCP_ABSOLUTE, posix,
- win32, size);
-}
-
-#define ENVMALLOC \
- (CYGWIN_VERSION_DLL_MAKE_COMBINED (user_data->api_major, user_data->api_minor) \
- <= CYGWIN_VERSION_DLL_MALLOC_ENV)
-
-#define NL(x) x, (sizeof (x) - 1)
-/* List of names which are converted from dos to unix
- on the way in and back again on the way out.
-
- PATH needs to be here because CreateProcess uses it and gdb uses
- CreateProcess. HOME is here because most shells use it and would be
- confused by Windows style path names. */
-static win_env conv_envvars[] =
- {
- {NL ("PATH="), NULL, NULL, env_PATH_to_posix, env_plist_to_win32, true},
- {NL ("HOME="), NULL, NULL, env_path_to_posix, env_path_to_win32, false},
- {NL ("LD_LIBRARY_PATH="), NULL, NULL,
- env_plist_to_posix, env_plist_to_win32, true},
- {NL ("TMPDIR="), NULL, NULL, env_path_to_posix, env_path_to_win32, false},
- {NL ("TMP="), NULL, NULL, env_path_to_posix, env_path_to_win32, false},
- {NL ("TEMP="), NULL, NULL, env_path_to_posix, env_path_to_win32, false},
- {NULL, 0, NULL, NULL, 0, 0}
- };
-
-#define WC ((unsigned char) 1)
-/* Note: You *must* fill in this array setting the ordinal value of the first
- character of the above environment variable names to 1.
- This table is intended to speed up lookup of these variables. */
-
-static const unsigned char conv_start_chars[256] =
- {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-/* A B C D E F G */
- 0, 0, 0, 0, 0, 0, 0, 0,
- /* 72 */
-/* H I J K L M N O */
- WC, 0, 0, 0, WC, 0, 0, 0,
- /* 80 */
-/* P Q R S T U V W */
- WC, 0, 0, 0, WC, 0, 0, 0,
- /* 88 */
-/* x Y Z */
- 0, 0, 0, 0, 0, 0, 0, 0,
- /* 96 */
-/* a b c d e f g */
- 0, 0, 0, 0, 0, 0, 0, 0,
- /* 104 */
-/* h i j k l m n o */
- WC, 0, 0, 0, WC, 0, 0, 0,
- /* 112 */
-/* p q r s t u v w */
- WC, 0, 0, 0, WC, 0, 0, 0,
- };
-
-static inline char
-match_first_char (const char *s, unsigned char m)
-{
- return conv_start_chars[(unsigned) *s] & m;
-}
-
-struct win_env&
-win_env::operator = (struct win_env& x)
-{
- name = x.name;
- namelen = x.namelen;
- toposix = x.toposix;
- towin32 = x.towin32;
- immediate = false;
- return *this;
-}
-
-win_env::~win_env ()
-{
- if (posix)
- free (posix);
- if (native)
- free (native);
-}
-
-void
-win_env::add_cache (const char *in_posix, const char *in_native)
-{
- MALLOC_CHECK;
- posix = (char *) realloc (posix, strlen (in_posix) + 1);
- strcpy (posix, in_posix);
- if (in_native)
- {
- native = (char *) realloc (native, namelen + 1 + strlen (in_native));
- stpcpy (stpcpy (native, name), in_native);
- }
- else
- {
- tmp_pathbuf tp;
- char *buf = tp.c_get ();
- towin32 (in_posix, buf, NT_MAX_PATH);
- native = (char *) realloc (native, namelen + 1 + strlen (buf));
- stpcpy (stpcpy (native, name), buf);
- }
- MALLOC_CHECK;
- if (immediate && cygwin_finished_initializing)
- {
- wchar_t s[sys_mbstowcs (NULL, 0, native) + 1];
- sys_mbstowcs (s, sizeof s, native);
- /* Hack. Relies on affected variables only having ASCII names. */
- s[namelen - 1] = L'\0';
- SetEnvironmentVariableW (s, s + namelen);
- }
- debug_printf ("posix %s", posix);
- debug_printf ("native %s", native);
-}
-
-
-/* Check for a "special" environment variable name. *env is the pointer
- to the beginning of the environment variable name. *in_posix is any
- known posix value for the environment variable. Returns a pointer to
- the appropriate conversion structure. */
-win_env * __reg3
-getwinenv (const char *env, const char *in_posix, win_env *temp)
-{
- if (!match_first_char (env, WC))
- return NULL;
-
- for (int i = 0; conv_envvars[i].name != NULL; i++)
- if (strncmp (env, conv_envvars[i].name, conv_envvars[i].namelen) == 0)
- {
- win_env *we = conv_envvars + i;
- const char *val;
- if (!cur_environ () || !(val = in_posix ?: getenv (we->name)))
- debug_printf ("can't set native for %s since no environ yet",
- we->name);
- else if (!we->posix || strcmp (val, we->posix) != 0)
- {
- if (temp)
- {
- *temp = *we;
- we = temp;
- }
- we->add_cache (val);
- }
- return we;
- }
- return NULL;
-}
-
-/* Convert windows path specs to POSIX, if appropriate.
- */
-inline static void
-posify_maybe (char **here, const char *value, char *outenv)
-{
- char *src = *here;
- win_env *conv;
-
- if (!(conv = getwinenv (src)))
- return;
-
- int len = strcspn (src, "=") + 1;
-
- /* Turn all the items from c:<foo>;<bar> into their
- mounted equivalents - if there is one. */
-
- memcpy (outenv, src, len);
- char *newvalue = outenv + len;
- if (!conv->toposix (value, newvalue, NT_MAX_PATH - len)
- || _impure_ptr->_errno != EIDRM)
- conv->add_cache (newvalue, *value != '/' ? value : NULL);
- else
- {
- /* The conversion routine removed elements from a path list so we have
- to recalculate the windows path to remove elements there, too. */
- tmp_pathbuf tp;
- char *cleanvalue = tp.c_get ();
- conv->towin32 (newvalue, cleanvalue, NT_MAX_PATH);
- conv->add_cache (newvalue, cleanvalue);
- }
-
- debug_printf ("env var converted to %s", outenv);
- *here = strdup (outenv);
- free (src);
- MALLOC_CHECK;
-}
-
-/* Returns pointer to value associated with name, if any, else NULL.
- Sets offset to be the offset of the name/value combination in the
- environment array, for use by setenv(3) and unsetenv(3).
- Explicitly removes '=' in argument name. */
-
-static char *
-my_findenv (const char *name, int *offset)
-{
- register int len;
- register char **p;
- const char *c;
-
- c = name;
- len = 0;
- while (*c && *c != '=')
- {
- c++;
- len++;
- }
-
- for (p = cur_environ (); *p; ++p)
- if (!strncmp (*p, name, len))
- if (*(c = *p + len) == '=')
- {
- *offset = p - cur_environ ();
- return (char *) (++c);
- }
- MALLOC_CHECK;
- return NULL;
-}
-
-/* Primitive getenv before the environment is built. */
-
-static char *
-getearly (const char * name, int *)
-{
- char *ret;
- char **ptr;
- int len;
-
- if (spawn_info && (ptr = spawn_info->moreinfo->envp))
- {
- len = strlen (name);
- for (; *ptr; ptr++)
- if (strncasematch (name, *ptr, len) && (*ptr)[len] == '=')
- return *ptr + len + 1;
- }
- else if ((len = GetEnvironmentVariableA (name, NULL, 0))
- && (ret = (char *) cmalloc_abort (HEAP_2_STR, len))
- && GetEnvironmentVariableA (name, ret, len))
- return ret;
-
- return NULL;
-}
-
-static char * (*findenv_func)(const char *, int *) = getearly;
-
-/* Returns ptr to value associated with name, if any, else NULL. */
-
-extern "C" char *
-getenv (const char *name)
-{
- int offset;
- return findenv_func (name, &offset);
-}
-
-/* This function is required so that newlib uses the same environment
- as Cygwin. */
-extern "C" char *
-_getenv_r (struct _reent *, const char *name)
-{
- int offset;
- return findenv_func (name, &offset);
-}
-
-static int __stdcall
-envsize (const char * const *in_envp)
-{
- const char * const *envp;
- for (envp = in_envp; *envp; envp++)
- continue;
- return (1 + envp - in_envp) * sizeof (const char *);
-}
-
-/* Takes similar arguments to setenv except that overwrite is
- either -1, 0, or 1. 0 or 1 signify that the function should
- perform similarly to setenv. Otherwise putenv is assumed. */
-static int __stdcall
-_addenv (const char *name, const char *value, int overwrite)
-{
- int issetenv = overwrite >= 0;
- int offset;
- char *p;
-
- unsigned int valuelen = strlen (value);
- if ((p = my_findenv (name, &offset)))
- { /* Already exists. */
- if (!overwrite) /* Ok to overwrite? */
- return 0; /* No. Wanted to add new value. FIXME: Right return value? */
-
- /* We've found the offset into environ. If this is a setenv call and
- there is room in the current environment entry then just overwrite it.
- Otherwise handle this case below. */
- if (issetenv && strlen (p) >= valuelen)
- {
- strcpy (p, value);
- return 0;
- }
- }
- else
- { /* Create new slot. */
- int sz = envsize (cur_environ ());
- int allocsz = sz + (2 * sizeof (char *));
-
- offset = (sz - 1) / sizeof (char *);
-
- /* Allocate space for additional element plus terminating NULL. */
- if (cur_environ () == lastenviron)
- lastenviron = __cygwin_environ = (char **) realloc (cur_environ (),
- allocsz);
- else if ((lastenviron = (char **) malloc (allocsz)) != NULL)
- __cygwin_environ = (char **) memcpy ((char **) lastenviron,
- __cygwin_environ, sz);
-
- if (!__cygwin_environ)
- {
-#ifdef DEBUGGING
- try_to_debug ();
-#endif
- return -1; /* Oops. No more memory. */
- }
-
- __cygwin_environ[offset + 1] = NULL; /* NULL terminate. */
- update_envptrs (); /* Update any local copies of 'environ'. */
- }
-
- char *envhere;
- if (!issetenv)
- /* Not setenv. Just overwrite existing. */
- envhere = cur_environ ()[offset] = (char *) (ENVMALLOC ? strdup (name) : name);
- else
- { /* setenv */
- /* Look for an '=' in the name and ignore anything after that if found. */
- for (p = (char *) name; *p && *p != '='; p++)
- continue;
-
- int namelen = p - name; /* Length of name. */
- /* Allocate enough space for name + '=' + value + '\0' */
- envhere = cur_environ ()[offset] = (char *) malloc (namelen + valuelen + 2);
- if (!envhere)
- return -1; /* Oops. No more memory. */
-
- /* Put name '=' value into current slot. */
- strncpy (envhere, name, namelen);
- envhere[namelen] = '=';
- strcpy (envhere + namelen + 1, value);
- }
-
- /* Update cygwin's cache, if appropriate */
- win_env *spenv;
- if ((spenv = getwinenv (envhere)))
- spenv->add_cache (value);
- if (strcmp (name, "CYGWIN") == 0)
- parse_options (value);
-
- MALLOC_CHECK;
- return 0;
-}
-
-/* Set an environment variable */
-extern "C" int
-putenv (char *str)
-{
- __try
- {
- if (*str)
- {
- char *eq = strchr (str, '=');
- if (eq)
- return _addenv (str, eq + 1, -1);
-
- /* Remove str from the environment. */
- unsetenv (str);
- }
- return 0;
- }
- __except (EFAULT) {}
- __endtry
- return -1;
-}
-
-/* Set the value of the environment variable "name" to be
- "value". If overwrite is set, replace any current value. */
-extern "C" int
-setenv (const char *name, const char *value, int overwrite)
-{
- __try
- {
- if (!name || !*name || strchr (name, '='))
- {
- set_errno (EINVAL);
- __leave;
- }
- return _addenv (name, value, !!overwrite);
- }
- __except (EFAULT) {}
- __endtry
- return -1;
-}
-
-/* Delete environment variable "name". */
-extern "C" int
-unsetenv (const char *name)
-{
- register char **e;
- int offset;
-
- __try
- {
- if (!name || *name == '\0' || strchr (name, '='))
- {
- set_errno (EINVAL);
- __leave;
- }
-
- while (my_findenv (name, &offset)) /* if set multiple times */
- /* Move up the rest of the array */
- for (e = cur_environ () + offset; ; e++)
- if (!(*e = *(e + 1)))
- break;
-
- return 0;
- }
- __except (EFAULT) {}
- __endtry
- return -1;
-}
-
-/* Minimal list of Windows vars which must be converted to uppercase.
- Either for POSIX compatibility of for backward compatibility with
- existing applications. */
-static struct renv {
- const char *name;
- const size_t namelen;
-} renv_arr[] = {
- { NL("ALLUSERSPROFILE=") }, // 0
- { NL("COMMONPROGRAMFILES=") }, // 1
- { NL("COMPUTERNAME=") },
- { NL("COMSPEC=") },
- { NL("HOME=") }, // 4
- { NL("HOMEDRIVE=") },
- { NL("HOMEPATH=") },
- { NL("NUMBER_OF_PROCESSORS=") }, // 7
- { NL("OS=") }, // 8
- { NL("PATH=") }, // 9
- { NL("PATHEXT=") },
- { NL("PROCESSOR_ARCHITECTURE=") },
- { NL("PROCESSOR_IDENTIFIER=") },
- { NL("PROCESSOR_LEVEL=") },
- { NL("PROCESSOR_REVISION=") },
- { NL("PROGRAMFILES=") },
- { NL("SYSTEMDRIVE=") }, // 16
- { NL("SYSTEMROOT=") },
- { NL("TEMP=") }, // 18
- { NL("TERM=") },
- { NL("TMP=") },
- { NL("TMPDIR=") },
- { NL("WINDIR=") } // 22
-};
-#define RENV_SIZE (sizeof (renv_arr) / sizeof (renv_arr[0]))
-
-/* Set of first characters of the above list of variables. */
-static const char idx_arr[] = "ACHNOPSTW";
-/* Index into renv_arr at which the variables with this specific character
- starts. */
-static const int start_at[] = { 0, 1, 4, 7, 8, 9, 16, 18, 22 };
-
-/* Turn environment variable part of a=b string into uppercase - for some
- environment variables only. */
-static __inline__ void
-ucenv (char *p, const char *eq)
-{
- /* Hopefully as quickly as possible - only upper case specific set of important
- Windows variables. */
- char first = cyg_toupper (*p);
- const char *idx = strchr (idx_arr, first);
- if (idx)
- for (size_t i = start_at[idx - idx_arr];
- i < RENV_SIZE && renv_arr[i].name[0] == first;
- ++i)
- if (strncasematch (p, renv_arr[i].name, renv_arr[i].namelen))
- {
- strncpy (p, renv_arr[i].name, renv_arr[i].namelen);
- break;
- }
-}
-
-/* Initialize the environ array. Look for the CYGWIN environment variable and
- set appropriate options from it. */
-void
-environ_init (char **envp, int envc)
-{
- PWCHAR rawenv, w;
- int i;
- char *p;
- char *newp;
- int sawTERM = 0;
- bool envp_passed_in;
- static char NO_COPY cygterm[] = "TERM=cygwin";
- tmp_pathbuf tp;
-
- __try
- {
- char *tmpbuf = tp.t_get ();
- if (!envp)
- envp_passed_in = 0;
- else
- {
- envc++;
- envc *= sizeof (char *);
- char **newenv = (char **) malloc (envc);
- memcpy (newenv, envp, envc);
- cfree (envp);
-
- /* Older applications relied on the fact that cygwin malloced elements of the
- environment list. */
- envp = newenv;
- if (ENVMALLOC)
- for (char **e = newenv; *e; e++)
- {
- char *p = *e;
- *e = strdup (p);
- cfree (p);
- }
- envp_passed_in = 1;
- goto out;
- }
-
- /* Allocate space for environment + trailing NULL + CYGWIN env. */
- lastenviron = envp = (char **) malloc ((4 + (envc = 100)) * sizeof (char *));
-
- rawenv = GetEnvironmentStringsW ();
- if (!rawenv)
- {
- system_printf ("GetEnvironmentStrings returned NULL, %E");
- return;
- }
- debug_printf ("GetEnvironmentStrings returned %p", rawenv);
-
- /* Current directory information is recorded as variables of the
- form "=X:=X:\foo\bar; these must be changed into something legal
- (we could just ignore them but maybe an application will
- eventually want to use them). */
- for (i = 0, w = rawenv; *w != L'\0'; w = wcschr (w, L'\0') + 1, i++)
- {
- sys_wcstombs_alloc (&newp, HEAP_NOTHEAP, w);
- if (i >= envc)
- envp = (char **) realloc (envp, (4 + (envc += 100)) * sizeof (char *));
- envp[i] = newp;
- if (*newp == '=')
- *newp = '!';
- char *eq = strchrnul (newp, '=');
- ucenv (newp, eq); /* uppercase env vars which need it */
- if (*newp == 'T' && strncmp (newp, "TERM=", 5) == 0)
- sawTERM = 1;
- else if (*newp == 'C' && strncmp (newp, "CYGWIN=", 7) == 0)
- parse_options (newp + 7);
- if (*eq)
- posify_maybe (envp + i, *++eq ? eq : --eq, tmpbuf);
- debug_printf ("%p: %s", envp[i], envp[i]);
- }
-
- if (!sawTERM)
- envp[i++] = strdup (cygterm);
- envp[i] = NULL;
- FreeEnvironmentStringsW (rawenv);
-
- out:
- findenv_func = (char * (*)(const char*, int*)) my_findenv;
- __cygwin_environ = envp;
- update_envptrs ();
- if (envp_passed_in)
- {
- p = getenv ("CYGWIN");
- if (p)
- parse_options (p);
- }
- MALLOC_CHECK;
- }
- __except (NO_ERROR)
- {
- api_fatal ("internal error reading the windows environment "
- "- too many environment variables?");
- }
- __endtry
-}
-
-/* Function called by qsort to sort environment strings. */
-static int
-env_sort (const void *a, const void *b)
-{
- const char **p = (const char **) a;
- const char **q = (const char **) b;
-
- return strcmp (*p, *q);
-}
-
-char * __reg3
-getwinenveq (const char *name, size_t namelen, int x)
-{
- WCHAR name0[namelen - 1];
- WCHAR valbuf[32768]; /* Max size of an env.var including trailing '\0'. */
-
- name0[sys_mbstowcs (name0, sizeof name0, name, namelen - 1)] = L'\0';
- int totlen = GetEnvironmentVariableW (name0, valbuf, 32768);
- if (totlen > 0)
- {
- totlen = sys_wcstombs (NULL, 0, valbuf);
- if (x == HEAP_1_STR)
- totlen += namelen;
- else
- namelen = 0;
- char *p = (char *) cmalloc_abort ((cygheap_types) x, totlen);
- if (namelen)
- strcpy (p, name);
- sys_wcstombs (p + namelen, totlen, valbuf);
- debug_printf ("using value from GetEnvironmentVariable for '%W'", name0);
- return p;
- }
-
- debug_printf ("warning: %s not present in environment", name);
- return NULL;
-}
-
-struct spenv
-{
- const char *name;
- size_t namelen;
- bool force_into_environment; /* If true, always add to env if missing */
- bool add_if_exists; /* if true, retrieve value from cache */
- const char * (cygheap_user::*from_cygheap) (const char *, size_t);
-
- char __reg3 *retrieve (bool, const char * const = NULL);
-};
-
-#define env_dontadd almost_null
-
-/* Keep this list in upper case and sorted */
-static NO_COPY spenv spenvs[] =
-{
-#ifdef DEBUGGING
- {NL ("CYGWIN_DEBUG="), false, true, NULL},
-#endif
- {NL ("HOMEDRIVE="), false, false, &cygheap_user::env_homedrive},
- {NL ("HOMEPATH="), false, false, &cygheap_user::env_homepath},
- {NL ("LOGONSERVER="), false, false, &cygheap_user::env_logsrv},
- {NL ("PATH="), false, true, NULL},
- {NL ("SYSTEMDRIVE="), false, true, NULL},
- {NL ("SYSTEMROOT="), true, true, &cygheap_user::env_systemroot},
- {NL ("USERDOMAIN="), false, false, &cygheap_user::env_domain},
- {NL ("USERNAME="), false, false, &cygheap_user::env_name},
- {NL ("USERPROFILE="), false, false, &cygheap_user::env_userprofile},
- {NL ("WINDIR="), true, true, &cygheap_user::env_systemroot}
-};
-
-char *
-spenv::retrieve (bool no_envblock, const char *const env)
-{
- if (env && !ascii_strncasematch (env, name, namelen))
- return NULL;
-
- debug_printf ("no_envblock %d", no_envblock);
-
- if (from_cygheap)
- {
- const char *p;
- if (env && !cygheap->user.issetuid ())
- {
- debug_printf ("duping existing value for '%s'", name);
- /* Don't really care what it's set to if we're calling a cygwin program */
- return cstrdup1 (env);
- }
-
- /* Calculate (potentially) value for given environment variable. */
- p = (cygheap->user.*from_cygheap) (name, namelen);
- if (!p || (no_envblock && !env) || (p == env_dontadd))
- return env_dontadd;
- char *s = (char *) cmalloc_abort (HEAP_1_STR, namelen + strlen (p) + 1);
- strcpy (s, name);
- strcpy (s + namelen, p);
- debug_printf ("using computed value for '%s'", name);
- return s;
- }
-
- if (env)
- return cstrdup1 (env);
-
- return getwinenveq (name, namelen, HEAP_1_STR);
-}
-
-static inline int
-raise_envblock (int new_tl, PWCHAR &envblock, PWCHAR &s)
-{
- int tl = new_tl + 100;
- PWCHAR new_envblock =
- (PWCHAR) realloc (envblock, (2 + tl) * sizeof (WCHAR));
- /* If realloc moves the block, move `s' with it. */
- if (new_envblock != envblock)
- {
- s += new_envblock - envblock;
- envblock = new_envblock;
- }
- return tl;
-}
-
-#define SPENVS_SIZE (sizeof (spenvs) / sizeof (spenvs[0]))
-
-int
-env_compare (const void *key, const void *memb)
-{
- const char *k = *(const char **) key;
- const char *m = *(const char **) memb;
-
- char *ke = strchr (k, '=');
- char *me = strchr (m, '=');
- if (ke == NULL || me == NULL)
- return strcasecmp (k, m);
- int ret = strncasecmp (k, m, MIN (ke - k, me - m));
- if (!ret)
- ret = (ke - k) - (me - m);
- return ret;
-}
-
-/* Create a Windows-style environment block, i.e. a typical character buffer
- filled with null terminated strings, terminated by double null characters.
- Converts environment variables noted in conv_envvars into win32 form
- prior to placing them in the string.
-
- If new_token is set, we're going to switch the user account in
- child_info_spawn::worker. If so, we're also fetching the Windows default
- environment for the new user, and merge it into the environment we propage
- to the child. */
-char ** __reg3
-build_env (const char * const *envp, PWCHAR &envblock, int &envc,
- bool no_envblock, HANDLE new_token)
-{
- PWCHAR cwinenv = NULL;
- size_t winnum = 0;
- char **winenv = NULL;
-
- int len, n;
- const char * const *srcp;
- char **dstp;
- bool saw_spenv[SPENVS_SIZE] = {0};
-
- debug_printf ("envp %p", envp);
-
- /* How many elements? */
- for (n = 0; envp[n]; n++)
- continue;
-
- /* Fetch windows env and convert to POSIX-style env. */
- if (new_token
- && CreateEnvironmentBlock ((LPVOID *) &cwinenv, new_token, FALSE))
- {
- PWCHAR var = cwinenv;
- while (*var)
- {
- ++winnum;
- var = wcschr (var, L'\0') + 1;
- }
- winenv = (char **) calloc (winnum + 1, sizeof (char *));
- if (winenv)
- {
- for (winnum = 0, var = cwinenv;
- *var;
- ++winnum, var = wcschr (var, L'\0') + 1)
- sys_wcstombs_alloc (&winenv[winnum], HEAP_NOTHEAP, var);
- }
- DestroyEnvironmentBlock (cwinenv);
- /* Eliminate variables which are already available in envp. The windows
- env is sorted, so we can use bsearch. We're doing this first step,
- so the following code doesn't allocate too much memory. */
- if (winenv)
- {
- for (srcp = envp; *srcp; srcp++)
- {
- char **elem = (char **) bsearch (srcp, winenv, winnum,
- sizeof *winenv, env_compare);
- if (elem)
- {
- free (*elem);
- /* Use memmove to keep array sorted.
- winnum - (elem - winenv) copies all elements following
- elem, including the trailing NULL pointer. */
- memmove (elem, elem + 1,
- (winnum - (elem - winenv)) * sizeof *elem);
- --winnum;
- }
- }
- }
- }
-
- /* Allocate a new "argv-style" environ list with room for extra stuff. */
- char **newenv = (char **) cmalloc_abort (HEAP_1_ARGV, sizeof (char *) *
- (n + winnum + SPENVS_SIZE + 1));
-
- int tl = 0;
- char **pass_dstp;
- char **pass_env = (char **) alloca (sizeof (char *)
- * (n + winnum + SPENVS_SIZE + 1));
- /* Iterate over input list, generating a new environment list and refreshing
- "special" entries, if necessary. */
- for (srcp = envp, dstp = newenv, pass_dstp = pass_env; *srcp; srcp++)
- {
- bool calc_tl = !no_envblock;
- /* Look for entries that require special attention */
- for (unsigned i = 0; i < SPENVS_SIZE; i++)
- if (!saw_spenv[i] && (*dstp = spenvs[i].retrieve (no_envblock, *srcp)))
- {
- saw_spenv[i] = 1;
- if (*dstp == env_dontadd)
- goto next1;
- if (spenvs[i].add_if_exists)
- calc_tl = true;
- goto next0;
- }
-
- /* Add entry to new environment */
- *dstp = cstrdup1 (*srcp);
-
- next0:
- if (calc_tl)
- {
- *pass_dstp++ = *dstp;
- tl += strlen (*dstp) + 1;
- }
- dstp++;
- next1:
- continue;
- }
-
- assert ((srcp - envp) == n);
- /* Fill in any required-but-missing environment variables. */
- for (unsigned i = 0; i < SPENVS_SIZE; i++)
- if (!saw_spenv[i] && (spenvs[i].force_into_environment
- || cygheap->user.issetuid ()))
- {
- *dstp = spenvs[i].retrieve (false);
- if (*dstp && *dstp != env_dontadd)
- {
- *pass_dstp++ = *dstp;
- tl += strlen (*dstp) + 1;
- /* Eliminate from winenv. */
- if (winenv)
- {
- char **elem = (char **) bsearch (dstp, winenv, winnum,
- sizeof *winenv, env_compare);
- if (elem)
- {
- free (*elem);
- memmove (elem, elem + 1,
- (winnum - (elem - winenv)) * sizeof *elem);
- --winnum;
- }
- }
- dstp++;
- }
- }
-
- /* Fill in any Windows environment vars still missing. */
- if (winenv)
- {
- char **elem;
- for (elem = winenv; *elem; ++elem)
- {
- *dstp = cstrdup1 (*elem);
- free (*elem);
- *pass_dstp++ = *dstp;
- tl += strlen (*dstp) + 1;
- ++dstp;
- }
- free (winenv);
- }
-
- envc = dstp - newenv; /* Number of entries in newenv */
- assert ((size_t) envc <= (n + winnum + SPENVS_SIZE));
- *dstp = NULL; /* Terminate */
-
- size_t pass_envc = pass_dstp - pass_env;
- if (!pass_envc)
- envblock = NULL;
- else
- {
- *pass_dstp = NULL;
- debug_printf ("env count %ld, bytes %d", pass_envc, tl);
- win_env temp;
- temp.reset ();
-
- /* Windows programs expect the environment block to be sorted. */
- qsort (pass_env, pass_envc, sizeof (char *), env_sort);
-
- /* Create an environment block suitable for passing to CreateProcess. */
- PWCHAR s;
- envblock = (PWCHAR) malloc ((2 + tl) * sizeof (WCHAR));
- int new_tl = 0;
- bool saw_PATH = false;
- for (srcp = pass_env, s = envblock; *srcp; srcp++)
- {
- const char *p;
- win_env *conv;
- len = strcspn (*srcp, "=") + 1;
- const char *rest = *srcp + len;
-
- /* Check for a bad entry. This is necessary to get rid of empty
- strings, induced by putenv and changing the string afterwards.
- Note that this doesn't stop invalid strings without '=' in it
- etc., but we're opting for speed here for now. Adding complete
- checking would be pretty expensive. */
- if (len == 1 || !*rest)
- continue;
-
- /* See if this entry requires posix->win32 conversion. */
- conv = getwinenv (*srcp, rest, &temp);
- if (conv)
- {
- p = conv->native; /* Use win32 path */
- /* Does PATH exist in the environment? */
- if (**srcp == 'P')
- {
- /* And is it non-empty? */
- if (!conv->native || !conv->native[0])
- continue;
- saw_PATH = true;
- }
- }
- else
- p = *srcp; /* Don't worry about it */
-
- len = sys_mbstowcs (NULL, 0, p);
- new_tl += len; /* Keep running total of block length so far */
-
- /* See if we need to increase the size of the block. */
- if (new_tl > tl)
- tl = raise_envblock (new_tl, envblock, s);
-
- len = sys_mbstowcs (s, len, p);
-
- /* See if environment variable is "special" in a Windows sense.
- Under NT, the current directories for visited drives are stored
- as =C:=\bar. Cygwin converts the '=' to '!' for hopefully obvious
- reasons. We need to convert it back when building the envblock */
- if (s[0] == L'!' && (iswdrive (s + 1) || (s[1] == L':' && s[2] == L':'))
- && s[3] == L'=')
- *s = L'=';
- s += len + 1;
- }
- /* If PATH doesn't exist in the environment, add a PATH with just
- Cygwin's bin dir to the Windows env to allow loading system DLLs
- during execve. */
- if (!saw_PATH)
- {
- new_tl += cygheap->installation_dir_len + 5;
- if (new_tl > tl)
- tl = raise_envblock (new_tl, envblock, s);
- s = wcpcpy (wcpcpy (s, L"PATH="), cygheap->installation_dir) + 1;
- }
- *s = L'\0'; /* Two null bytes at the end */
- assert ((s - envblock) <= tl); /* Detect if we somehow ran over end
- of buffer */
- }
-
- debug_printf ("envp %p, envc %d", newenv, envc);
- return newenv;
-}
-
-#ifndef __x86_64__
-/* This idiocy is necessary because the early implementers of cygwin
- did not seem to know about importing data variables from the DLL.
- So, we have to synchronize cygwin's idea of the environment with the
- main program's with each reference to the environment. */
-extern "C" char ** __stdcall
-cur_environ ()
-{
- if (*main_environ != __cygwin_environ)
- {
- __cygwin_environ = *main_environ;
- update_envptrs ();
- }
-
- return __cygwin_environ;
-}
-#endif
diff --git a/winsup/cygwin/environ.h b/winsup/cygwin/environ.h
deleted file mode 100644
index 5048fcd2f..000000000
--- a/winsup/cygwin/environ.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/* environ.h: Declarations for environ manipulation
-
- Copyright 2000, 2001, 2002, 2003, 2005, 2006, 2008, 2013, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-/* Initialize the environment */
-void __reg2 environ_init (char **, int);
-
-/* The structure below is used to control conversion to/from posix-style
- file specs. Currently, only PATH and HOME are converted, but PATH
- needs to use a "convert path list" function while HOME needs a simple
- "convert to posix/win32". */
-struct win_env
- {
- const char *name;
- size_t namelen;
- char *posix;
- char *native;
- ssize_t (*toposix) (const void *, void *, size_t);
- ssize_t (*towin32) (const void *, void *, size_t);
- bool immediate;
- void __reg3 add_cache (const char *in_posix, const char *in_native = NULL);
- const char * get_native () const {return native ? native + namelen : NULL;}
- const char * get_posix () const {return posix ? posix : NULL;}
- struct win_env& operator = (struct win_env& x);
- void reset () {native = posix = NULL;}
- ~win_env ();
- };
-
-win_env * __reg3 getwinenv (const char *name, const char *posix = NULL, win_env * = NULL);
-char * __reg3 getwinenveq (const char *name, size_t len, int);
-
-#ifdef __x86_64__
-#define update_envptrs()
-extern "C" char **__cygwin_environ;
-#define cur_environ() __cygwin_environ
-#else
-void __stdcall update_envptrs ();
-extern "C" char **__cygwin_environ, ***main_environ;
-extern "C" char __stdcall **cur_environ ();
-#endif
-char ** __reg3 build_env (const char * const *envp, PWCHAR &envblock,
- int &envc, bool need_envblock, HANDLE new_token);
-
-#define ENV_CVT -1
diff --git a/winsup/cygwin/errno.cc b/winsup/cygwin/errno.cc
deleted file mode 100644
index 589410a9a..000000000
--- a/winsup/cygwin/errno.cc
+++ /dev/null
@@ -1,510 +0,0 @@
-/* errno.cc: errno-related functions
-
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2008, 2009, 2010, 2011, 2012, 2013, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#define _sys_nerr FOO_sys_nerr
-#define sys_nerr FOOsys_nerr
-#define _sys_errlist FOO_sys_errlist
-#define strerror_r FOO_strerror_r
-#define __INSIDE_CYGWIN__
-#include <errno.h>
-#include <error.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "winsup.h"
-#include "cygtls.h"
-#include "ntdll.h"
-#undef _sys_nerr
-#undef sys_nerr
-#undef _sys_errlist
-#undef strerror_r
-
-/* Table to map Windows error codes to Errno values. */
-/* FIXME: Doing things this way is a little slow. It's trivial to change
- this into a big case statement if necessary. Left as is for now. */
-
-#define X(w, e) {ERROR_##w, #w, e}
-
-static const struct
-{
- DWORD w; /* windows version of error */
- const char *s; /* text of windows version */
- int e; /* errno version of error */
-} errmap[] =
-{
- /* FIXME: Some of these choices are arbitrary! */
- X (ACCESS_DENIED, EACCES),
- X (ACTIVE_CONNECTIONS, EAGAIN),
- X (ALREADY_EXISTS, EEXIST),
- X (BAD_DEVICE, ENODEV),
- X (BAD_EXE_FORMAT, ENOEXEC),
- X (BAD_NETPATH, ENOENT),
- X (BAD_NET_NAME, ENOENT),
- X (BAD_NET_RESP, ENOSYS),
- X (BAD_PATHNAME, ENOENT),
- X (BAD_PIPE, EINVAL),
- X (BAD_UNIT, ENODEV),
- X (BAD_USERNAME, EINVAL),
- X (BEGINNING_OF_MEDIA, EIO),
- X (BROKEN_PIPE, EPIPE),
- X (BUSY, EBUSY),
- X (BUS_RESET, EIO),
- X (CALL_NOT_IMPLEMENTED, ENOSYS),
- X (CANCELLED, EINTR),
- X (CANNOT_MAKE, EPERM),
- X (CHILD_NOT_COMPLETE, EBUSY),
- X (COMMITMENT_LIMIT, EAGAIN),
- X (CONNECTION_REFUSED, ECONNREFUSED),
- X (CRC, EIO),
- X (DEVICE_DOOR_OPEN, EIO),
- X (DEVICE_IN_USE, EAGAIN),
- X (DEVICE_REQUIRES_CLEANING, EIO),
- X (DEV_NOT_EXIST, ENOENT),
- X (DIRECTORY, ENOTDIR),
- X (DIR_NOT_EMPTY, ENOTEMPTY),
- X (DISK_CORRUPT, EIO),
- X (DISK_FULL, ENOSPC),
- X (DS_GENERIC_ERROR, EIO),
- X (DUP_NAME, ENOTUNIQ),
- X (EAS_DIDNT_FIT, ENOSPC),
- X (EAS_NOT_SUPPORTED, ENOTSUP),
- X (EA_LIST_INCONSISTENT, EINVAL),
- X (EA_TABLE_FULL, ENOSPC),
- X (END_OF_MEDIA, ENOSPC),
- X (EOM_OVERFLOW, EIO),
- X (EXE_MACHINE_TYPE_MISMATCH, ENOEXEC),
- X (EXE_MARKED_INVALID, ENOEXEC),
- X (FILEMARK_DETECTED, EIO),
- X (FILENAME_EXCED_RANGE, ENAMETOOLONG),
- X (FILE_CORRUPT, EEXIST),
- X (FILE_EXISTS, EEXIST),
- X (FILE_INVALID, ENXIO),
- X (FILE_NOT_FOUND, ENOENT),
- X (HANDLE_DISK_FULL, ENOSPC),
- X (HANDLE_EOF, ENODATA),
- X (INVALID_ADDRESS, EINVAL),
- X (INVALID_AT_INTERRUPT_TIME, EINTR),
- X (INVALID_BLOCK_LENGTH, EIO),
- X (INVALID_DATA, EINVAL),
- X (INVALID_DRIVE, ENODEV),
- X (INVALID_EA_NAME, EINVAL),
- X (INVALID_EXE_SIGNATURE, ENOEXEC),
- X (INVALID_FUNCTION, EBADRQC),
- X (INVALID_HANDLE, EBADF),
- X (INVALID_NAME, ENOENT),
- X (INVALID_PARAMETER, EINVAL),
- X (INVALID_SIGNAL_NUMBER, EINVAL),
- X (IOPL_NOT_ENABLED, ENOEXEC),
- X (IO_DEVICE, EIO),
- X (IO_INCOMPLETE, EAGAIN),
- X (IO_PENDING, EAGAIN),
- X (LOCK_VIOLATION, EBUSY),
- X (MAX_THRDS_REACHED, EAGAIN),
- X (META_EXPANSION_TOO_LONG, EINVAL),
- X (MOD_NOT_FOUND, ENOENT),
- X (MORE_DATA, EMSGSIZE),
- X (NEGATIVE_SEEK, EINVAL),
- X (NETNAME_DELETED, ENOENT),
- X (NOACCESS, EFAULT),
- X (NONE_MAPPED, EINVAL),
- X (NONPAGED_SYSTEM_RESOURCES, EAGAIN),
- X (NOT_CONNECTED, ENOLINK),
- X (NOT_ENOUGH_MEMORY, ENOMEM),
- X (NOT_ENOUGH_QUOTA, EIO),
- X (NOT_OWNER, EPERM),
- X (NOT_READY, ENOMEDIUM),
- X (NOT_SAME_DEVICE, EXDEV),
- X (NOT_SUPPORTED, ENOSYS),
- X (NO_DATA, EPIPE),
- X (NO_DATA_DETECTED, EIO),
- X (NO_MEDIA_IN_DRIVE, ENOMEDIUM),
- X (NO_MORE_FILES, ENMFILE),
- X (NO_MORE_ITEMS, ENMFILE),
- X (NO_MORE_SEARCH_HANDLES, ENFILE),
- X (NO_PROC_SLOTS, EAGAIN),
- X (NO_SIGNAL_SENT, EIO),
- X (NO_SYSTEM_RESOURCES, EFBIG),
- X (NO_TOKEN, EINVAL),
- X (OPEN_FAILED, EIO),
- X (OPEN_FILES, EAGAIN),
- X (OUTOFMEMORY, ENOMEM),
- X (PAGED_SYSTEM_RESOURCES, EAGAIN),
- X (PAGEFILE_QUOTA, EAGAIN),
- X (PATH_NOT_FOUND, ENOENT),
- X (PIPE_BUSY, EBUSY),
- X (PIPE_CONNECTED, EBUSY),
- X (PIPE_LISTENING, ECOMM),
- X (PIPE_NOT_CONNECTED, ECOMM),
- X (POSSIBLE_DEADLOCK, EDEADLOCK),
- X (PRIVILEGE_NOT_HELD, EPERM),
- X (PROCESS_ABORTED, EFAULT),
- X (PROC_NOT_FOUND, ESRCH),
- X (REM_NOT_LIST, ENONET),
- X (SECTOR_NOT_FOUND, EINVAL),
- X (SEEK, EINVAL),
- X (SERVICE_REQUEST_TIMEOUT, EBUSY),
- X (SETMARK_DETECTED, EIO),
- X (SHARING_BUFFER_EXCEEDED, ENOLCK),
- X (SHARING_VIOLATION, EBUSY),
- X (SIGNAL_PENDING, EBUSY),
- X (SIGNAL_REFUSED, EIO),
- X (SXS_CANT_GEN_ACTCTX, ELIBBAD),
- X (THREAD_1_INACTIVE, EINVAL),
- X (TIMEOUT, EBUSY),
- X (TOO_MANY_LINKS, EMLINK),
- X (TOO_MANY_OPEN_FILES, EMFILE),
- X (UNEXP_NET_ERR, EIO),
- X (WAIT_NO_CHILDREN, ECHILD),
- X (WORKING_SET_QUOTA, EAGAIN),
- X (WRITE_PROTECT, EROFS),
- { 0, NULL, 0}
-};
-
-extern "C" {
-const char *_sys_errlist[] =
-{
-/* NOERROR 0 */ "No error",
-/* EPERM 1 */ "Operation not permitted",
-/* ENOENT 2 */ "No such file or directory",
-/* ESRCH 3 */ "No such process",
-/* EINTR 4 */ "Interrupted system call",
-/* EIO 5 */ "Input/output error",
-/* ENXIO 6 */ "No such device or address",
-/* E2BIG 7 */ "Argument list too long",
-/* ENOEXEC 8 */ "Exec format error",
-/* EBADF 9 */ "Bad file descriptor",
-/* ECHILD 10 */ "No child processes",
-/* EAGAIN 11 */ "Resource temporarily unavailable",
-/* ENOMEM 12 */ "Cannot allocate memory",
-/* EACCES 13 */ "Permission denied",
-/* EFAULT 14 */ "Bad address",
-/* ENOTBLK 15 */ "Block device required",
-/* EBUSY 16 */ "Device or resource busy",
-/* EEXIST 17 */ "File exists",
-/* EXDEV 18 */ "Invalid cross-device link",
-/* ENODEV 19 */ "No such device",
-/* ENOTDIR 20 */ "Not a directory",
-/* EISDIR 21 */ "Is a directory",
-/* EINVAL 22 */ "Invalid argument",
-/* ENFILE 23 */ "Too many open files in system",
-/* EMFILE 24 */ "Too many open files",
-/* ENOTTY 25 */ "Inappropriate ioctl for device",
-/* ETXTBSY 26 */ "Text file busy",
-/* EFBIG 27 */ "File too large",
-/* ENOSPC 28 */ "No space left on device",
-/* ESPIPE 29 */ "Illegal seek",
-/* EROFS 30 */ "Read-only file system",
-/* EMLINK 31 */ "Too many links",
-/* EPIPE 32 */ "Broken pipe",
-/* EDOM 33 */ "Numerical argument out of domain",
-/* ERANGE 34 */ "Numerical result out of range",
-/* ENOMSG 35 */ "No message of desired type",
-/* EIDRM 36 */ "Identifier removed",
-/* ECHRNG 37 */ "Channel number out of range",
-/* EL2NSYNC 38 */ "Level 2 not synchronized",
-/* EL3HLT 39 */ "Level 3 halted",
-/* EL3RST 40 */ "Level 3 reset",
-/* ELNRNG 41 */ "Link number out of range",
-/* EUNATCH 42 */ "Protocol driver not attached",
-/* ENOCSI 43 */ "No CSI structure available",
-/* EL2HLT 44 */ "Level 2 halted",
-/* EDEADLK 45 */ "Resource deadlock avoided",
-/* ENOLCK 46 */ "No locks available",
- NULL,
- NULL,
- NULL,
-/* EBADE 50 */ "Invalid exchange",
-/* EBADR 51 */ "Invalid request descriptor",
-/* EXFULL 52 */ "Exchange full",
-/* ENOANO 53 */ "No anode",
-/* EBADRQC 54 */ "Invalid request code",
-/* EBADSLT 55 */ "Invalid slot",
-/* EDEADLOCK 56 */ "File locking deadlock error",
-/* EBFONT 57 */ "Bad font file format",
- NULL,
- NULL,
-/* ENOSTR 60 */ "Device not a stream",
-/* ENODATA 61 */ "No data available",
-/* ETIME 62 */ "Timer expired",
-/* ENOSR 63 */ "Out of streams resources",
-/* ENONET 64 */ "Machine is not on the network",
-/* ENOPKG 65 */ "Package not installed",
-/* EREMOTE 66 */ "Object is remote",
-/* ENOLINK 67 */ "Link has been severed",
-/* EADV 68 */ "Advertise error",
-/* ESRMNT 69 */ "Srmount error",
-/* ECOMM 70 */ "Communication error on send",
-/* EPROTO 71 */ "Protocol error",
- NULL,
- NULL,
-/* EMULTIHOP 74 */ "Multihop attempted",
-/* ELBIN 75 */ "Inode is remote (not really error)",
-/* EDOTDOT 76 */ "RFS specific error",
-/* EBADMSG 77 */ "Bad message",
- NULL,
-/* EFTYPE 79 */ "Inappropriate file type or format",
-/* ENOTUNIQ 80 */ "Name not unique on network",
-/* EBADFD 81 */ "File descriptor in bad state",
-/* EREMCHG 82 */ "Remote address changed",
-/* ELIBACC 83 */ "Can not access a needed shared library",
-/* ELIBBAD 84 */ "Accessing a corrupted shared library",
-/* ELIBSCN 85 */ ".lib section in a.out corrupted",
-/* ELIBMAX 86 */ "Attempting to link in too many shared libraries",
-/* ELIBEXEC 87 */ "Cannot exec a shared library directly",
-/* ENOSYS 88 */ "Function not implemented",
-/* ENMFILE 89 */ "No more files",
-/* ENOTEMPTY 90 */ "Directory not empty",
-/* ENAMETOOLONG 91 */ "File name too long",
-/* ELOOP 92 */ "Too many levels of symbolic links",
- NULL,
- NULL,
-/* EOPNOTSUPP 95 */ "Operation not supported",
-/* EPFNOSUPPORT 96 */ "Protocol family not supported",
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
-/* ECONNRESET 104 */ "Connection reset by peer",
-/* ENOBUFS 105 */ "No buffer space available",
-/* EAFNOSUPPORT 106 */ "Address family not supported by protocol",
-/* EPROTOTYPE 107 */ "Protocol wrong type for socket",
-/* ENOTSOCK 108 */ "Socket operation on non-socket",
-/* ENOPROTOOPT 109 */ "Protocol not available",
-/* ESHUTDOWN 110 */ "Cannot send after transport endpoint shutdown",
-/* ECONNREFUSED 111 */ "Connection refused",
-/* EADDRINUSE 112 */ "Address already in use",
-/* ECONNABORTED 113 */ "Software caused connection abort",
-/* ENETUNREACH 114 */ "Network is unreachable",
-/* ENETDOWN 115 */ "Network is down",
-/* ETIMEDOUT 116 */ "Connection timed out",
-/* EHOSTDOWN 117 */ "Host is down",
-/* EHOSTUNREACH 118 */ "No route to host",
-/* EINPROGRESS 119 */ "Operation now in progress",
-/* EALREADY 120 */ "Operation already in progress",
-/* EDESTADDRREQ 121 */ "Destination address required",
-/* EMSGSIZE 122 */ "Message too long",
-/* EPROTONOSUPPORT 123 */ "Protocol not supported",
-/* ESOCKTNOSUPPORT 124 */ "Socket type not supported",
-/* EADDRNOTAVAIL 125 */ "Cannot assign requested address",
-/* ENETRESET 126 */ "Network dropped connection on reset",
-/* EISCONN 127 */ "Transport endpoint is already connected",
-/* ENOTCONN 128 */ "Transport endpoint is not connected",
-/* ETOOMANYREFS 129 */ "Too many references: cannot splice",
-/* EPROCLIM 130 */ "Too many processes",
-/* EUSERS 131 */ "Too many users",
-/* EDQUOT 132 */ "Disk quota exceeded",
-/* ESTALE 133 */ "Stale NFS file handle",
-/* ENOTSUP 134 */ "Not supported",
-/* ENOMEDIUM 135 */ "No medium found",
-/* ENOSHARE 136 */ "No such host or network path",
-/* ECASECLASH 137 */ "Filename exists with different case",
-/* EILSEQ 138 */ "Invalid or incomplete multibyte or wide character",
-/* EOVERFLOW 139 */ "Value too large for defined data type",
-/* ECANCELED 140 */ "Operation canceled",
-/* ENOTRECOVERABLE 141 */ "State not recoverable",
-/* EOWNERDEAD 142 */ "Previous owner died",
-/* ESTRPIPE 143 */ "Streams pipe error"
-};
-
-int NO_COPY_INIT _sys_nerr = sizeof (_sys_errlist) / sizeof (_sys_errlist[0]);
-};
-
-int __reg2
-geterrno_from_win_error (DWORD code, int deferrno)
-{
- for (int i = 0; errmap[i].w != 0; ++i)
- if (code == errmap[i].w)
- {
- syscall_printf ("windows error %u == errno %d", code, errmap[i].e);
- return errmap[i].e;
- }
-
- syscall_printf ("unknown windows error %u, setting errno to %d", code,
- deferrno);
- return deferrno; /* FIXME: what's so special about EACCESS? */
-}
-
-/* seterrno_from_win_error: Given a Windows error code, set errno
- as appropriate. */
-void __reg3
-seterrno_from_win_error (const char *file, int line, DWORD code)
-{
- syscall_printf ("%s:%d windows error %u", file, line, code);
- errno = _impure_ptr->_errno = geterrno_from_win_error (code, EACCES);
-}
-
-int __reg2
-geterrno_from_nt_status (NTSTATUS status, int deferrno)
-{
- return geterrno_from_win_error (RtlNtStatusToDosError (status));
-}
-
-/* seterrno_from_nt_status: Given a NT status code, set errno
- as appropriate. */
-void __reg3
-seterrno_from_nt_status (const char *file, int line, NTSTATUS status)
-{
- DWORD code = RtlNtStatusToDosError (status);
- SetLastError (code);
- syscall_printf ("%s:%d status %y -> windows error %u",
- file, line, status, code);
- errno = _impure_ptr->_errno = geterrno_from_win_error (code, EACCES);
-}
-
-static char *
-strerror_worker (int errnum)
-{
- char *res;
- if (errnum >= 0 && errnum < _sys_nerr)
- res = (char *) _sys_errlist [errnum];
- else
- res = NULL;
- return res;
-}
-
-/* Newlib requires this override for perror and friends to avoid
- clobbering strerror() buffer, without having to differentiate
- between strerror_r signatures. This function is intentionally not
- exported, so that only newlib can use it. */
-extern "C" char *
-_strerror_r (struct _reent *, int errnum, int internal, int *errptr)
-{
- char *errstr = strerror_worker (errnum);
- if (!errstr)
- {
- errstr = internal ? _my_tls.locals.strerror_r_buf
- : _my_tls.locals.strerror_buf;
- __small_sprintf (errstr, "Unknown error %d", errnum);
- if (errptr)
- *errptr = EINVAL;
- }
- return errstr;
-}
-
-/* strerror: convert from errno values to error strings. Newlib's
- strerror_r returns "" for unknown values, so we override it to
- provide a nicer thread-safe result string and set errno. */
-extern "C" char *
-strerror (int errnum)
-{
- int error = 0;
- char *result = _strerror_r (NULL, errnum, 0, &error);
- if (error)
- set_errno (error);
- return result;
-}
-
-/* Newlib's <string.h> provides declarations for two strerror_r
- variants, according to preprocessor feature macros. However, it
- returns "" instead of "Unknown error ...", so we override both
- versions. */
-extern "C" char *
-strerror_r (int errnum, char *buf, size_t n)
-{
- int error = 0;
- char *errstr = _strerror_r (NULL, errnum, 1, &error);
- if (error)
- set_errno (error);
- if (strlen (errstr) >= n)
- return errstr;
- return strcpy (buf, errstr);
-}
-
-extern "C" int
-__xpg_strerror_r (int errnum, char *buf, size_t n)
-{
- if (!n)
- return ERANGE;
- int result = 0;
- char *error = strerror_worker (errnum);
- char tmp[sizeof "Unknown error -2147483648"];
- if (!error)
- {
- __small_sprintf (error = tmp, "Unknown error %d", errnum);
- result = EINVAL;
- }
- if (strlen (error) >= n)
- {
- memcpy (buf, error, n - 1);
- buf[n - 1] = '\0';
- return ERANGE;
- }
- strcpy (buf, error);
- return result;
-}
-
-unsigned int error_message_count = 0;
-int error_one_per_line = 0;
-void (*error_print_progname) (void) = NULL;
-
-static void
-_verror (int status, int errnum, const char *filename, unsigned int lineno, const char *fmt, va_list ap)
-{
- error_message_count++;
-
- fflush (stdout);
-
- if (error_print_progname)
- (*error_print_progname) ();
- else
- fprintf (stderr, "%s:%s", program_invocation_name, filename ? "" : " ");
-
- if (filename)
- fprintf (stderr, "%s:%d: ", filename, lineno);
-
- vfprintf (stderr, fmt, ap);
-
- if (errnum != 0)
- fprintf (stderr, ": %s", strerror (errnum));
-
- fprintf (stderr, "\n");
-
- if (status != 0)
- exit (status);
-}
-
-extern "C" void
-error (int status, int errnum, const char *fmt, ...)
-{
- va_list ap;
- va_start (ap, fmt);
- _verror (status, errnum, NULL, 0, fmt, ap);
- va_end (ap);
-}
-
-extern "C" void
-error_at_line (int status, int errnum, const char *filename, unsigned int lineno, const char *fmt, ...)
-{
- va_list ap;
-
- if (error_one_per_line != 0)
- {
- static const char *last_filename;
- static unsigned int last_lineno;
-
- /* strcmp(3) will SEGV if filename or last_filename are NULL */
- if (lineno == last_lineno
- && ((!filename && !last_filename)
- || (filename && last_filename && strcmp (filename, last_filename) == 0)))
- return;
-
- last_filename = filename;
- last_lineno = lineno;
- }
-
- va_start (ap, fmt);
- _verror (status, errnum, filename, lineno, fmt, ap);
- va_end (ap);
-}
diff --git a/winsup/cygwin/exception.h b/winsup/cygwin/exception.h
deleted file mode 100644
index 3686bb0b2..000000000
--- a/winsup/cygwin/exception.h
+++ /dev/null
@@ -1,178 +0,0 @@
-/* exception.h
-
- Copyright 1996, 1997, 1998, 2000, 2001, 2005, 2010, 2011, 1012, 2013, 2014
- Red Hat, Inc.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#pragma once
-
-#ifndef __x86_64__
-/* Documentation on the innards of 32 bit Windows exception handling (i.e.
- from the perspective of a compiler implementor) apparently doesn't exist.
- However, the following came from Onno Hovers <onno@stack.urc.tue.nl>
-
-The first pointer to the chain of handlers is in the thread environment block
-at FS:[0]. This chain has the following format:
-
-typedef struct __EXCEPTION_FRAME
-{
- struct __EXCEPTION_FRAME *Prev; /-* pointer to the previous frame *-/
- PEXCEPTION_HANDLER Handler; /-* handler function *-/
-}
-
-You register an exception handler in your compiler with this simple ASM
-sequence:
- PUSH _MyExceptionHandler
- PUSH FS:[0]
- MOV FS:[0],ESP
-An exception frame MUST be on the stack! The frame may have more fields and
-both Visual C++ and Borland C++ use more fields for themselves.
-
-When an exception occurs the system calls all handlers starting with the
-handler at FS:0, and then the previous etc. until one handler returns
-ExceptionContinueExecution, which is 0. If a handler does not want to handle
-the exception it should just return ExceptionContinueSearch, which is 1.
-
-The handler has the following parameters:
-ehandler (
- PEXCEPTION_RECORD erecord,
- PEXCEPTION_FRAME myframe,
- PCONTEXT context, /-* context before and after *-/
- PVOID dispatch) /-* something *-/
-
-When a handler wants to handle the exception, it has some alternatives:
-
--one is to do do something about the exception condition, like emulating
-an invalid instruction, mapping memory where there was a page fault, etc.
-If the handler wants to have the context of the thread that causes the
-exception changed, it should make that change in the context passed to the
-handler.
-
--the second alternative is to call all exception handlers again, indicating
-that you want them to clean up. This way all the __finally blocks get
-executed. After doing that you change the context passed to the handler so
-the code starts executing in the except block. For this purpose you could
-call RtlUnwind. This (undocumented) function calls all exception handlers
-up to but not including the exception frame passed to it. If NULL is passed
-as exception frame RtlUnwind calls all exception handlers and then exits the
-process. The parameters to RtlUnwind are:
-
-RtlUnwind (
- PEXCEPTION_FRAME endframe,
- PVOID unusedEip,
- PEXCEPTION_RECORD erecord,
- DWORD returnEax)
-
-You should set unusedEip to the address where RtlUnwind should return like
-this:
- PUSH 0
- PUSH OFFSET ReturnUnwind
- PUSH 0
- PUSH 0
- CALL RtlUnwind
-ReturnUnwind:
- .....
-
-If no EXCEPTION_RECORD is passed, RtlUnwind makes a default exception
-record. In any case, the ExceptionFlags part of this record has the
-EH_UNWINDING (=2), flag set. (and EH_EXIT_UNWIND (=4), when NULL is passed as the end
-frame.).
-
-The handler for a exception as well as a for unwinds may be executed in the
-thread causing the exception, but may also be executed in another (special
-exception) thread. So it is not wise to make any assumptions about that!
-
-As an alternative you may consider the SetUnhandledExceptionFilter API
-to install your own exception filter. This one is documented.
-*/
-
-/* The January 1994 MSJ has an article entitled "Clearer, More Comprehensive
- Error Processing with Win32 Structured Exception Handling". It goes into
- a teensy bit of detail of the innards of exception handling (i.e. what we
- have to do). */
-
-typedef EXCEPTION_DISPOSITION (exception_handler) (EXCEPTION_RECORD *,
- struct _exception_list *,
- CONTEXT *,
- void *);
-
-typedef struct _exception_list
-{
- struct _exception_list *prev;
- exception_handler *handler;
-} exception_list;
-
-extern exception_list *_except_list asm ("%fs:0");
-typedef void *PDISPATCHER_CONTEXT;
-
-class exception
-{
- exception_list el;
- exception_list *save;
- static EXCEPTION_DISPOSITION handle (EXCEPTION_RECORD *, exception_list *,
- CONTEXT *, PDISPATCHER_CONTEXT);
-public:
- exception () __attribute__ ((always_inline))
- {
- /* Install SEH handler. */
- save = _except_list;
- el.handler = handle;
- el.prev = _except_list;
- _except_list = &el;
- };
- ~exception () __attribute__ ((always_inline)) { _except_list = save; }
-};
-
-#else /* __x86_64__ */
-
-#define exception_list void
-typedef struct _DISPATCHER_CONTEXT *PDISPATCHER_CONTEXT;
-
-class exception
-{
- static EXCEPTION_DISPOSITION myfault (EXCEPTION_RECORD *, exception_list *,
- CONTEXT *, PDISPATCHER_CONTEXT);
- static EXCEPTION_DISPOSITION handle (EXCEPTION_RECORD *, exception_list *,
- CONTEXT *, PDISPATCHER_CONTEXT);
-public:
- exception () __attribute__ ((always_inline))
- {
- /* Install SEH handler. */
- asm volatile ("\n\
- 1: \n\
- .seh_handler \
- _ZN9exception6handleEP17_EXCEPTION_RECORDPvP8_CONTEXTP19_DISPATCHER_CONTEXT, \
- @except \n\
- .seh_handlerdata \n\
- .long 1 \n\
- .rva 1b, 2f, 2f, 2f \n\
- .seh_code \n");
- };
- ~exception () __attribute__ ((always_inline))
- {
- asm volatile ("\n\
- nop \n\
- 2: \n\
- nop \n");
- }
-};
-
-#endif /* !__x86_64__ */
-
-class cygwin_exception
-{
- PUINT_PTR framep;
- PCONTEXT ctx;
- EXCEPTION_RECORD *e;
- HANDLE h;
- void dump_exception ();
- void open_stackdumpfile ();
-public:
- cygwin_exception (PUINT_PTR in_framep, PCONTEXT in_ctx = NULL, EXCEPTION_RECORD *in_e = NULL):
- framep (in_framep), ctx (in_ctx), e (in_e), h (NULL) {}
- void dumpstack ();
- PCONTEXT context () const {return ctx;}
-};
diff --git a/winsup/cygwin/exceptions.cc b/winsup/cygwin/exceptions.cc
deleted file mode 100644
index c16b073c6..000000000
--- a/winsup/cygwin/exceptions.cc
+++ /dev/null
@@ -1,1526 +0,0 @@
-/* exceptions.cc
-
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
- 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#define CYGTLS_HANDLE
-#include "winsup.h"
-#include "miscfuncs.h"
-#include <imagehlp.h>
-#include <stdlib.h>
-#include <syslog.h>
-#include <wchar.h>
-
-#include "cygtls.h"
-#include "pinfo.h"
-#include "sigproc.h"
-#include "shared_info.h"
-#include "perprocess.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "child_info.h"
-#include "ntdll.h"
-#include "exception.h"
-
-/* Definitions for code simplification */
-#ifdef __x86_64__
-# define _GR(reg) R ## reg
-# define _AFMT "%011X"
-# define _ADDR DWORD64
-#else
-# define _GR(reg) E ## reg
-# define _AFMT "%08x"
-# define _ADDR DWORD
-#endif
-
-#define CALL_HANDLER_RETRY_OUTER 10
-#define CALL_HANDLER_RETRY_INNER 10
-
-char debugger_command[2 * NT_MAX_PATH + 20];
-
-static BOOL WINAPI ctrl_c_handler (DWORD);
-
-static const struct
-{
- NTSTATUS code;
- const char *name;
-} status_info[] =
-{
-#define X(s) s, #s
- { X (STATUS_ABANDONED_WAIT_0) },
- { X (STATUS_ACCESS_VIOLATION) },
- { X (STATUS_ARRAY_BOUNDS_EXCEEDED) },
- { X (STATUS_BREAKPOINT) },
- { X (STATUS_CONTROL_C_EXIT) },
- { X (STATUS_DATATYPE_MISALIGNMENT) },
- { X (STATUS_FLOAT_DENORMAL_OPERAND) },
- { X (STATUS_FLOAT_DIVIDE_BY_ZERO) },
- { X (STATUS_FLOAT_INEXACT_RESULT) },
- { X (STATUS_FLOAT_INVALID_OPERATION) },
- { X (STATUS_FLOAT_OVERFLOW) },
- { X (STATUS_FLOAT_STACK_CHECK) },
- { X (STATUS_FLOAT_UNDERFLOW) },
- { X (STATUS_GUARD_PAGE_VIOLATION) },
- { X (STATUS_ILLEGAL_INSTRUCTION) },
- { X (STATUS_INTEGER_DIVIDE_BY_ZERO) },
- { X (STATUS_INTEGER_OVERFLOW) },
- { X (STATUS_INVALID_DISPOSITION) },
- { X (STATUS_IN_PAGE_ERROR) },
- { X (STATUS_NONCONTINUABLE_EXCEPTION) },
- { X (STATUS_NO_MEMORY) },
- { X (STATUS_PENDING) },
- { X (STATUS_PRIVILEGED_INSTRUCTION) },
- { X (STATUS_SINGLE_STEP) },
- { X (STATUS_STACK_OVERFLOW) },
- { X (STATUS_TIMEOUT) },
- { X (STATUS_USER_APC) },
- { X (STATUS_WAIT_0) },
- { 0, 0 }
-#undef X
-};
-
-/* Initialization code. */
-
-void
-init_console_handler (bool install_handler)
-{
- BOOL res;
-
- SetConsoleCtrlHandler (ctrl_c_handler, FALSE);
- SetConsoleCtrlHandler (NULL, FALSE);
- if (install_handler)
- res = SetConsoleCtrlHandler (ctrl_c_handler, TRUE);
- else
- res = SetConsoleCtrlHandler (NULL, TRUE);
- if (!res)
- system_printf ("SetConsoleCtrlHandler failed, %E");
-}
-
-extern "C" void
-error_start_init (const char *buf)
-{
- if (!buf || !*buf)
- {
- debugger_command[0] = '\0';
- return;
- }
-
- char pgm[NT_MAX_PATH];
- if (!GetModuleFileName (NULL, pgm, NT_MAX_PATH))
- strcpy (pgm, "cygwin1.dll");
- for (char *p = strchr (pgm, '\\'); p; p = strchr (p, '\\'))
- *p = '/';
-
- __small_sprintf (debugger_command, "%s \"%s\"", buf, pgm);
-}
-
-void
-cygwin_exception::open_stackdumpfile ()
-{
- /* If we have no executable name, or if the CWD handle is NULL,
- which means, the CWD is a virtual path, don't even try to open
- a stackdump file. */
- if (myself->progname[0] && cygheap->cwd.get_handle ())
- {
- const WCHAR *p;
- /* write to progname.stackdump if possible */
- if (!myself->progname[0])
- p = L"unknown";
- else if ((p = wcsrchr (myself->progname, L'\\')))
- p++;
- else
- p = myself->progname;
-
- WCHAR corefile[wcslen (p) + sizeof (".stackdump")];
- wcpcpy (wcpcpy(corefile, p), L".stackdump");
- UNICODE_STRING ucore;
- OBJECT_ATTRIBUTES attr;
- /* Create the UNICODE variation of <progname>.stackdump. */
- RtlInitUnicodeString (&ucore, corefile);
- /* Create an object attribute which refers to <progname>.stackdump
- in Cygwin's cwd. Stick to caseinsensitivity. */
- InitializeObjectAttributes (&attr, &ucore, OBJ_CASE_INSENSITIVE,
- cygheap->cwd.get_handle (), NULL);
- IO_STATUS_BLOCK io;
- NTSTATUS status;
- /* Try to open it to dump the stack in it. */
- status = NtCreateFile (&h, GENERIC_WRITE | SYNCHRONIZE, &attr, &io,
- NULL, FILE_ATTRIBUTE_NORMAL, 0, FILE_OVERWRITE_IF,
- FILE_SYNCHRONOUS_IO_NONALERT
- | FILE_OPEN_FOR_BACKUP_INTENT, NULL, 0);
- if (NT_SUCCESS (status))
- {
- if (!myself->cygstarted)
- system_printf ("Dumping stack trace to %S", &ucore);
- else
- debug_printf ("Dumping stack trace to %S", &ucore);
- SetStdHandle (STD_ERROR_HANDLE, h);
- }
- }
-}
-
-/* Utilities for dumping the stack, etc. */
-
-void
-cygwin_exception::dump_exception ()
-{
- const char *exception_name = NULL;
-
- if (e)
- {
- for (int i = 0; status_info[i].name; i++)
- {
- if (status_info[i].code == (NTSTATUS) e->ExceptionCode)
- {
- exception_name = status_info[i].name;
- break;
- }
- }
- }
-
-#ifdef __x86_64__
- if (exception_name)
- small_printf ("Exception: %s at rip=%011X\r\n", exception_name, ctx->Rip);
- else
- small_printf ("Signal %d at rip=%011X\r\n", e->ExceptionCode, ctx->Rip);
- small_printf ("rax=%016X rbx=%016X rcx=%016X\r\n", ctx->Rax, ctx->Rbx, ctx->Rcx);
- small_printf ("rdx=%016X rsi=%016X rdi=%016X\r\n", ctx->Rdx, ctx->Rsi, ctx->Rdi);
- small_printf ("r8 =%016X r9 =%016X r10=%016X\r\n", ctx->R8, ctx->R9, ctx->R10);
- small_printf ("r11=%016X r12=%016X r13=%016X\r\n", ctx->R11, ctx->R12, ctx->R13);
- small_printf ("r14=%016X r15=%016X\r\n", ctx->R14, ctx->R15);
- small_printf ("rbp=%016X rsp=%016X\r\n", ctx->Rbp, ctx->Rsp);
- small_printf ("program=%W, pid %u, thread %s\r\n",
- myself->progname, myself->pid, cygthread::name ());
-#else
- if (exception_name)
- small_printf ("Exception: %s at eip=%08x\r\n", exception_name, ctx->Eip);
- else
- small_printf ("Signal %d at eip=%08x\r\n", e->ExceptionCode, ctx->Eip);
- small_printf ("eax=%08x ebx=%08x ecx=%08x edx=%08x esi=%08x edi=%08x\r\n",
- ctx->Eax, ctx->Ebx, ctx->Ecx, ctx->Edx, ctx->Esi, ctx->Edi);
- small_printf ("ebp=%08x esp=%08x program=%W, pid %u, thread %s\r\n",
- ctx->Ebp, ctx->Esp, myself->progname, myself->pid,
- cygthread::name ());
-#endif
- small_printf ("cs=%04x ds=%04x es=%04x fs=%04x gs=%04x ss=%04x\r\n",
- ctx->SegCs, ctx->SegDs, ctx->SegEs, ctx->SegFs, ctx->SegGs, ctx->SegSs);
-}
-
-/* A class for manipulating the stack. */
-class stack_info
-{
- int walk (); /* Uses the "old" method */
- char *next_offset () {return *((char **) sf.AddrFrame.Offset);}
- bool needargs;
- PUINT_PTR dummy_frame;
-#ifdef __x86_64__
- CONTEXT c;
- UNWIND_HISTORY_TABLE hist;
-#endif
-public:
- STACKFRAME sf; /* For storing the stack information */
- void init (PUINT_PTR, bool, PCONTEXT); /* Called the first time that stack info is needed */
-
- /* Postfix ++ iterates over the stack, returning zero when nothing is left. */
- int operator ++(int) { return walk (); }
-};
-
-/* The number of parameters used in STACKFRAME */
-#define NPARAMS (sizeof (thestack.sf.Params) / sizeof (thestack.sf.Params[0]))
-
-/* This is the main stack frame info for this process. */
-static NO_COPY stack_info thestack;
-
-/* Initialize everything needed to start iterating. */
-void
-stack_info::init (PUINT_PTR framep, bool wantargs, PCONTEXT ctx)
-{
-#ifdef __x86_64__
- memset (&hist, 0, sizeof hist);
- if (ctx)
- memcpy (&c, ctx, sizeof c);
- else
- {
- memset (&c, 0, sizeof c);
- c.ContextFlags = CONTEXT_ALL;
- }
-#endif
- memset (&sf, 0, sizeof (sf));
- if (ctx)
- sf.AddrFrame.Offset = (UINT_PTR) framep;
- else
- {
- dummy_frame = framep;
- sf.AddrFrame.Offset = (UINT_PTR) &dummy_frame;
- }
- if (framep)
- sf.AddrReturn.Offset = framep[1];
- sf.AddrFrame.Mode = AddrModeFlat;
- needargs = wantargs;
-}
-
-extern "C" void _cygwin_exit_return ();
-
-/* Walk the stack by looking at successive stored 'bp' frames.
- This is not foolproof. */
-int
-stack_info::walk ()
-{
-#ifdef __x86_64__
- PRUNTIME_FUNCTION f;
- ULONG64 imagebase;
- DWORD64 establisher;
- PVOID hdl;
-
- if (!c.Rip)
- return 0;
-
- sf.AddrPC.Offset = c.Rip;
- sf.AddrStack.Offset = c.Rsp;
- sf.AddrFrame.Offset = c.Rbp;
-
- f = RtlLookupFunctionEntry (c.Rip, &imagebase, &hist);
- if (f)
- RtlVirtualUnwind (0, imagebase, c.Rip, f, &c, &hdl, &establisher, NULL);
- else
- {
- c.Rip = *(ULONG_PTR *) c.Rsp;
- c.Rsp += 8;
- }
- if (needargs && c.Rip)
- {
- PULONG_PTR p = (PULONG_PTR) c.Rsp;
- for (unsigned i = 0; i < NPARAMS; ++i)
- sf.Params[i] = p[i + 1];
- }
- return 1;
-#else
- char **framep;
-
- if ((void (*) ()) sf.AddrPC.Offset == _cygwin_exit_return)
- return 0; /* stack frames are exhausted */
-
- if (((framep = (char **) next_offset ()) == NULL)
- || (framep >= (char **) cygwin_hmodule))
- return 0;
-
- sf.AddrFrame.Offset = (_ADDR) framep;
- sf.AddrPC.Offset = sf.AddrReturn.Offset;
-
- /* The return address always follows the stack pointer */
- sf.AddrReturn.Offset = (_ADDR) *++framep;
-
- if (needargs)
- {
- unsigned nparams = NPARAMS;
-
- /* The arguments follow the return address */
- sf.Params[0] = (_ADDR) *++framep;
- /* Hack for XP/2K3 WOW64. If the first stack param points to the
- application entry point, we can only fetch one additional
- parameter. Accessing anything beyond this address results in
- a SEGV. This is fixed in Vista/2K8 WOW64. */
- if (wincap.has_restricted_stack_args () && sf.Params[0] == 0x401000)
- nparams = 2;
- for (unsigned i = 1; i < nparams; i++)
- sf.Params[i] = (_ADDR) *++framep;
- }
- return 1;
-#endif
-}
-
-void
-cygwin_exception::dumpstack ()
-{
- static bool already_dumped;
-
- __try
- {
- if (already_dumped || cygheap->rlim_core == 0Ul)
- return;
- already_dumped = true;
- open_stackdumpfile ();
-
- if (e)
- dump_exception ();
-
- int i;
-
- thestack.init (framep, 1, ctx); /* Initialize from the input CONTEXT */
-#ifdef __x86_64__
- small_printf ("Stack trace:\r\nFrame Function Args\r\n");
-#else
- small_printf ("Stack trace:\r\nFrame Function Args\r\n");
-#endif
- for (i = 0; i < 16 && thestack++; i++)
- {
- small_printf (_AFMT " " _AFMT, thestack.sf.AddrFrame.Offset,
- thestack.sf.AddrPC.Offset);
- for (unsigned j = 0; j < NPARAMS; j++)
- small_printf ("%s" _AFMT, j == 0 ? " (" : ", ",
- thestack.sf.Params[j]);
- small_printf (")\r\n");
- }
- small_printf ("End of stack trace%s\n",
- i == 16 ? " (more stack frames may be present)" : "");
- if (h)
- NtClose (h);
- }
- __except (NO_ERROR) {}
- __endtry
-}
-
-bool
-_cygtls::inside_kernel (CONTEXT *cx)
-{
- int res;
- MEMORY_BASIC_INFORMATION m;
-
- if (!isinitialized ())
- return true;
-
- memset (&m, 0, sizeof m);
- if (!VirtualQuery ((LPCVOID) cx->_GR(ip), &m, sizeof m))
- sigproc_printf ("couldn't get memory info, pc %p, %E", cx->_GR(ip));
-
- size_t size = (windows_system_directory_length + 6) * sizeof (WCHAR);
- PWCHAR checkdir = (PWCHAR) alloca (size);
- memset (checkdir, 0, size);
-
-# define h ((HMODULE) m.AllocationBase)
- if (!h || m.State != MEM_COMMIT) /* Be defensive */
- res = true;
- else if (h == hntdll)
- res = true; /* Calling GetModuleFilename on ntdll.dll
- can hang */
- else if (h == user_data->hmodule)
- res = false;
- else if (!GetModuleFileNameW (h, checkdir, windows_system_directory_length + 6))
- res = false;
- else
- {
- /* Skip potential long path prefix. */
- if (!wcsncmp (checkdir, L"\\\\?\\", 4))
- checkdir += 4;
- res = wcsncasecmp (windows_system_directory, checkdir,
- windows_system_directory_length) == 0;
-#ifndef __x86_64__
- if (!res && system_wow64_directory_length)
- res = wcsncasecmp (system_wow64_directory, checkdir,
- system_wow64_directory_length) == 0;
-
-#endif
- }
- sigproc_printf ("pc %p, h %p, inside_kernel %d", cx->_GR(ip), h, res);
-# undef h
- return res;
-}
-
-/* Temporary (?) function for external callers to get a stack dump */
-extern "C" void
-cygwin_stackdump ()
-{
- CONTEXT c;
- c.ContextFlags = CONTEXT_FULL;
- RtlCaptureContext (&c);
- cygwin_exception exc ((PUINT_PTR) c._GR(bp), &c);
- exc.dumpstack ();
-}
-
-#define TIME_TO_WAIT_FOR_DEBUGGER 10000
-
-extern "C" int
-try_to_debug (bool waitloop)
-{
- debug_printf ("debugger_command '%s'", debugger_command);
- if (*debugger_command == '\0')
- return 0;
- if (being_debugged ())
- {
- extern void break_here ();
- break_here ();
- return 0;
- }
-
- __small_sprintf (strchr (debugger_command, '\0'), " %u", GetCurrentProcessId ());
-
- LONG prio = GetThreadPriority (GetCurrentThread ());
- SetThreadPriority (GetCurrentThread (), THREAD_PRIORITY_HIGHEST);
- PROCESS_INFORMATION pi = {NULL, 0, 0, 0};
-
- STARTUPINFOW si = {0, NULL, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL};
- si.lpReserved = NULL;
- si.lpDesktop = NULL;
- si.dwFlags = 0;
- si.cb = sizeof (si);
-
- /* FIXME: need to know handles of all running threads to
- suspend_all_threads_except (current_thread_id);
- */
-
- /* If the tty mutex is owned, we will fail to start any cygwin app
- until the trapped app exits. However, this will only release any
- the mutex if it is owned by this thread so that may be problematic. */
-
- lock_ttys::release ();
-
- /* prevent recursive exception handling */
- PWCHAR rawenv = GetEnvironmentStringsW () ;
- for (PWCHAR p = rawenv; *p != L'\0'; p = wcschr (p, L'\0') + 1)
- {
- if (wcsncmp (p, L"CYGWIN=", wcslen (L"CYGWIN=")) == 0)
- {
- PWCHAR q = wcsstr (p, L"error_start") ;
- /* replace 'error_start=...' with '_rror_start=...' */
- if (q)
- {
- *q = L'_' ;
- SetEnvironmentVariableW (L"CYGWIN", p + wcslen (L"CYGWIN=")) ;
- }
- break;
- }
- }
- FreeEnvironmentStringsW (rawenv);
-
- console_printf ("*** starting debugger for pid %u, tid %u\n",
- cygwin_pid (GetCurrentProcessId ()), GetCurrentThreadId ());
- BOOL dbg;
- WCHAR dbg_cmd[strlen(debugger_command) + 1];
- sys_mbstowcs (dbg_cmd, strlen(debugger_command) + 1, debugger_command);
- dbg = CreateProcessW (NULL,
- dbg_cmd,
- NULL,
- NULL,
- FALSE,
- CREATE_NEW_CONSOLE | CREATE_NEW_PROCESS_GROUP,
- NULL,
- NULL,
- &si,
- &pi);
-
- if (!dbg)
- system_printf ("Failed to start debugger, %E");
- else
- {
- if (!waitloop)
- return dbg;
- SetThreadPriority (GetCurrentThread (), THREAD_PRIORITY_IDLE);
- while (!being_debugged ())
- Sleep (1);
- Sleep (2000);
- }
-
- console_printf ("*** continuing pid %u from debugger call (%d)\n",
- cygwin_pid (GetCurrentProcessId ()), dbg);
-
- SetThreadPriority (GetCurrentThread (), prio);
- return dbg;
-}
-
-#ifdef __x86_64__
-/* Don't unwind the stack on x86_64. It's not necessary to do that from the
- exception handler. */
-#define rtl_unwind(el,er)
-#else
-static void __reg3 rtl_unwind (exception_list *, PEXCEPTION_RECORD) __attribute__ ((noinline, regparm (3)));
-void __reg3
-rtl_unwind (exception_list *frame, PEXCEPTION_RECORD e)
-{
- __asm__ ("\n\
- pushl %%ebx \n\
- pushl %%edi \n\
- pushl %%esi \n\
- pushl $0 \n\
- pushl %1 \n\
- pushl $1f \n\
- pushl %0 \n\
- call _RtlUnwind@16 \n\
-1: \n\
- popl %%esi \n\
- popl %%edi \n\
- popl %%ebx \n\
-": : "r" (frame), "r" (e));
-}
-#endif /* __x86_64 */
-
-#ifdef __x86_64__
-/* myfault exception handler. */
-EXCEPTION_DISPOSITION
-exception::myfault (EXCEPTION_RECORD *e, exception_list *frame, CONTEXT *in,
- PDISPATCHER_CONTEXT dispatch)
-{
- PSCOPE_TABLE table = (PSCOPE_TABLE) dispatch->HandlerData;
- RtlUnwindEx (frame,
- (char *) dispatch->ImageBase + table->ScopeRecord[0].JumpTarget,
- e, 0, in, dispatch->HistoryTable);
- /* NOTREACHED, make gcc happy. */
- return ExceptionContinueSearch;
-}
-#endif
-
-/* Main exception handler. */
-EXCEPTION_DISPOSITION
-exception::handle (EXCEPTION_RECORD *e, exception_list *frame, CONTEXT *in,
- PDISPATCHER_CONTEXT dispatch)
-{
- static bool NO_COPY debugging;
- _cygtls& me = _my_tls;
-
-#ifndef __x86_64__
- if (me.andreas)
- me.andreas->leave (); /* Return from a "san" caught fault */
-#endif
-
- if (debugging && ++debugging < 500000)
- {
- SetThreadPriority (hMainThread, THREAD_PRIORITY_NORMAL);
- return ExceptionContinueExecution;
- }
-
- /* If we're exiting, tell Windows to keep looking for an
- exception handler. */
- if (exit_state || e->ExceptionFlags)
- return ExceptionContinueSearch;
-
- siginfo_t si = {};
- si.si_code = SI_KERNEL;
- /* Coerce win32 value to posix value. */
- switch (e->ExceptionCode)
- {
- case STATUS_FLOAT_DENORMAL_OPERAND:
- case STATUS_FLOAT_DIVIDE_BY_ZERO:
- case STATUS_FLOAT_INVALID_OPERATION:
- case STATUS_FLOAT_STACK_CHECK:
- si.si_signo = SIGFPE;
- si.si_code = FPE_FLTSUB;
- break;
- case STATUS_FLOAT_INEXACT_RESULT:
- si.si_signo = SIGFPE;
- si.si_code = FPE_FLTRES;
- break;
- case STATUS_FLOAT_OVERFLOW:
- si.si_signo = SIGFPE;
- si.si_code = FPE_FLTOVF;
- break;
- case STATUS_FLOAT_UNDERFLOW:
- si.si_signo = SIGFPE;
- si.si_code = FPE_FLTUND;
- break;
- case STATUS_INTEGER_DIVIDE_BY_ZERO:
- si.si_signo = SIGFPE;
- si.si_code = FPE_INTDIV;
- break;
- case STATUS_INTEGER_OVERFLOW:
- si.si_signo = SIGFPE;
- si.si_code = FPE_INTOVF;
- break;
-
- case STATUS_ILLEGAL_INSTRUCTION:
- si.si_signo = SIGILL;
- si.si_code = ILL_ILLOPC;
- break;
-
- case STATUS_PRIVILEGED_INSTRUCTION:
- si.si_signo = SIGILL;
- si.si_code = ILL_PRVOPC;
- break;
-
- case STATUS_NONCONTINUABLE_EXCEPTION:
- si.si_signo = SIGILL;
- si.si_code = ILL_ILLADR;
- break;
-
- case STATUS_TIMEOUT:
- si.si_signo = SIGALRM;
- break;
-
- case STATUS_GUARD_PAGE_VIOLATION:
- si.si_signo = SIGBUS;
- si.si_code = BUS_OBJERR;
- break;
-
- case STATUS_DATATYPE_MISALIGNMENT:
- si.si_signo = SIGBUS;
- si.si_code = BUS_ADRALN;
- break;
-
- case STATUS_ACCESS_VIOLATION:
- switch (mmap_is_attached_or_noreserve ((void *)e->ExceptionInformation[1],
- 1))
- {
- case MMAP_NORESERVE_COMMITED:
- return ExceptionContinueExecution;
- case MMAP_RAISE_SIGBUS: /* MAP_NORESERVE page, commit failed, or
- access to mmap page beyond EOF. */
- si.si_signo = SIGBUS;
- si.si_code = BUS_OBJERR;
- break;
- default:
- MEMORY_BASIC_INFORMATION m;
- VirtualQuery ((PVOID) e->ExceptionInformation[1], &m, sizeof m);
- si.si_signo = SIGSEGV;
- si.si_code = m.State == MEM_FREE ? SEGV_MAPERR : SEGV_ACCERR;
- break;
- }
- break;
-
- case STATUS_ARRAY_BOUNDS_EXCEEDED:
- case STATUS_IN_PAGE_ERROR:
- case STATUS_NO_MEMORY:
- case STATUS_INVALID_DISPOSITION:
- case STATUS_STACK_OVERFLOW:
- si.si_signo = SIGSEGV;
- si.si_code = SEGV_MAPERR;
- break;
-
- case STATUS_CONTROL_C_EXIT:
- si.si_signo = SIGINT;
- break;
-
- case STATUS_INVALID_HANDLE:
- /* CloseHandle will throw this exception if it is given an
- invalid handle. We don't care about the exception; we just
- want CloseHandle to return an error. This can be revisited
- if gcc ever supports Windows style structured exception
- handling. */
- return ExceptionContinueExecution;
-
- default:
- /* If we don't recognize the exception, we have to assume that
- we are doing structured exception handling, and we let
- something else handle it. */
- return ExceptionContinueSearch;
- }
-
- debug_printf ("In cygwin_except_handler exception %y at %p sp %p", e->ExceptionCode, in->_GR(ip), in->_GR(sp));
- debug_printf ("In cygwin_except_handler signal %d at %p", si.si_signo, in->_GR(ip));
-
-#ifdef __x86_64__
- PUINT_PTR framep = (PUINT_PTR) in->Rbp;
- /* Sometimes, when a stack is screwed up, Rbp tends to be NULL. In that
- case, base the stacktrace on Rsp. In most cases, it allows to generate
- useful stack trace. */
- if (!framep)
- framep = (PUINT_PTR) in->Rsp;
-#else
- PUINT_PTR framep = (PUINT_PTR) in->_GR(sp);
- for (PUINT_PTR bpend = (PUINT_PTR) __builtin_frame_address (0); framep > bpend; framep--)
- if (*framep == in->SegCs && framep[-1] == in->_GR(ip))
- {
- framep -= 2;
- break;
- }
-
- /* Temporarily replace windows top level SEH with our own handler.
- We don't want any Windows magic kicking in. This top level frame
- will be removed automatically after our exception handler returns. */
- _except_list->handler = handle;
-#endif
-
- if (exit_state >= ES_SIGNAL_EXIT
- && (NTSTATUS) e->ExceptionCode != STATUS_CONTROL_C_EXIT)
- api_fatal ("Exception during process exit");
- else if (!try_to_debug (0))
- rtl_unwind (frame, e);
- else
- {
- debugging = true;
- return ExceptionContinueExecution;
- }
-
- /* FIXME: Probably should be handled in signal processing code */
- if ((NTSTATUS) e->ExceptionCode == STATUS_ACCESS_VIOLATION)
- {
- int error_code = 0;
- if (si.si_code == SEGV_ACCERR) /* Address present */
- error_code |= 1;
- if (e->ExceptionInformation[0]) /* Write access */
- error_code |= 2;
- if (!me.inside_kernel (in)) /* User space */
- error_code |= 4;
- klog (LOG_INFO,
-#ifdef __x86_64__
- "%s[%d]: segfault at %011X rip %011X rsp %011X error %d",
-#else
- "%s[%d]: segfault at %08x rip %08x rsp %08x error %d",
-#endif
- __progname, myself->pid,
- e->ExceptionInformation[1], in->_GR(ip), in->_GR(sp),
- error_code);
- }
- cygwin_exception exc (framep, in, e);
- si.si_cyg = (void *) &exc;
- /* POSIX requires that for SIGSEGV and SIGBUS, si_addr should be set to the
- address of faulting memory reference. For SIGILL and SIGFPE these should
- be the address of the faulting instruction. Other signals are apparently
- undefined so we just set those to the faulting instruction too. */
- si.si_addr = (si.si_signo == SIGSEGV || si.si_signo == SIGBUS)
- ? (void *) e->ExceptionInformation[1] : (void *) in->_GR(ip);
- me.incyg++;
- sig_send (NULL, si, &me); /* Signal myself */
- me.incyg--;
- e->ExceptionFlags = 0;
- return ExceptionContinueExecution;
-}
-
-/* Utilities to call a user supplied exception handler. */
-
-#define SIG_NONMASKABLE (SIGTOMASK (SIGKILL) | SIGTOMASK (SIGSTOP))
-
-/* Non-raceable sigsuspend
- Note: This implementation is based on the Single UNIX Specification
- man page. This indicates that sigsuspend always returns -1 and that
- attempts to block unblockable signals will be silently ignored.
- This is counter to what appears to be documented in some UNIX
- man pages, e.g. Linux. */
-int __stdcall
-handle_sigsuspend (sigset_t tempmask)
-{
- sigset_t oldmask = _my_tls.sigmask; // Remember for restoration
-
- set_signal_mask (_my_tls.sigmask, tempmask);
- sigproc_printf ("oldmask %ly, newmask %ly", oldmask, tempmask);
-
- pthread_testcancel ();
- cygwait (NULL, cw_infinite, cw_cancel | cw_cancel_self | cw_sig_eintr);
-
- set_sig_errno (EINTR); // Per POSIX
-
- /* A signal dispatch function will have been added to our stack and will
- be hit eventually. Set the old mask to be restored when the signal
- handler returns and indicate its presence by modifying deltamask. */
-
- _my_tls.deltamask |= SIG_NONMASKABLE;
- _my_tls.oldmask = oldmask; // Will be restored by signal handler
- return -1;
-}
-
-extern DWORD exec_exit; // Possible exit value for exec
-
-extern "C" {
-static void
-sig_handle_tty_stop (int sig, siginfo_t *, void *)
-{
- /* Silently ignore attempts to suspend if there is no accommodating
- cygwin parent to deal with this behavior. */
- if (!myself->cygstarted)
- myself->process_state &= ~PID_STOPPED;
- else
- {
- _my_tls.incyg = 1;
- myself->stopsig = sig;
- myself->alert_parent (sig);
- sigproc_printf ("process %d stopped by signal %d", myself->pid, sig);
- /* FIXME! This does nothing to suspend anything other than the main
- thread. */
- /* Use special cygwait parameter to handle SIGCONT. _main_tls.sig will
- be cleared under lock when SIGCONT is detected. */
- DWORD res = cygwait (NULL, cw_infinite, cw_sig_cont);
- switch (res)
- {
- case WAIT_SIGNALED:
- myself->stopsig = SIGCONT;
- myself->alert_parent (SIGCONT);
- break;
- default:
- api_fatal ("WaitSingleObject returned %d", res);
- break;
- }
- _my_tls.incyg = 0;
- }
-}
-} /* end extern "C" */
-
-bool
-_cygtls::interrupt_now (CONTEXT *cx, siginfo_t& si, void *handler,
- struct sigaction& siga)
-{
- bool interrupted;
-
- /* Delay the interrupt if we are
- 1) somehow inside the DLL
- 2) in _sigfe (spinning is true) and about to enter cygwin DLL
- 3) in a Windows DLL. */
- if (incyg || spinning || inside_kernel (cx))
- interrupted = false;
- else
- {
- _ADDR &ip = cx->_GR(ip);
- push (ip);
- interrupt_setup (si, handler, siga);
- ip = pop ();
- SetThreadContext (*this, cx); /* Restart the thread in a new location */
- interrupted = true;
- }
- return interrupted;
-}
-
-void __reg3
-_cygtls::interrupt_setup (siginfo_t& si, void *handler, struct sigaction& siga)
-{
- push ((__stack_t) sigdelayed);
- deltamask = siga.sa_mask & ~SIG_NONMASKABLE;
- sa_flags = siga.sa_flags;
- func = (void (*) (int, siginfo_t *, void *)) handler;
- if (siga.sa_flags & SA_RESETHAND)
- siga.sa_handler = SIG_DFL;
- saved_errno = -1; // Flag: no errno to save
- if (handler == sig_handle_tty_stop)
- {
- myself->stopsig = 0;
- myself->process_state |= PID_STOPPED;
- }
-
- infodata = si;
- this->sig = si.si_signo; // Should always be last thing set to avoid a race
-
- if (incyg)
- SetEvent (get_signal_arrived (false));
-
- if (!have_execed)
- proc_subproc (PROC_CLEARWAIT, 1);
- sigproc_printf ("armed signal_arrived %p, signal %d", signal_arrived, si.si_signo);
-}
-
-extern "C" void __stdcall
-set_sig_errno (int e)
-{
- *_my_tls.errno_addr = e;
- _my_tls.saved_errno = e;
-}
-
-int
-sigpacket::setup_handler (void *handler, struct sigaction& siga, _cygtls *tls)
-{
- CONTEXT cx;
- bool interrupted = false;
-
- if (tls->sig)
- {
- sigproc_printf ("trying to send signal %d but signal %d already armed",
- si.si_signo, tls->sig);
- goto out;
- }
-
- for (int n = 0; n < CALL_HANDLER_RETRY_OUTER; n++)
- {
- for (int i = 0; i < CALL_HANDLER_RETRY_INNER; i++)
- {
- tls->lock ();
- if (tls->incyg)
- {
- sigproc_printf ("controlled interrupt. stackptr %p, stack %p, stackptr[-1] %p",
- tls->stackptr, tls->stack, tls->stackptr[-1]);
- tls->interrupt_setup (si, handler, siga);
- interrupted = true;
- tls->unlock ();
- goto out;
- }
-
- DWORD res;
- HANDLE hth = (HANDLE) *tls;
- if (!hth)
- {
- tls->unlock ();
- sigproc_printf ("thread handle NULL, not set up yet?");
- }
- else
- {
- /* Suspend the thread which will receive the signal.
- If one of these conditions is not true we loop.
- If the thread is already suspended (which can occur when a program
- has called SuspendThread on itself) then just queue the signal. */
-
- sigproc_printf ("suspending thread, tls %p, _main_tls %p", tls, _main_tls);
- res = SuspendThread (hth);
- /* Just set pending if thread is already suspended */
- if (res)
- {
- tls->unlock ();
- ResumeThread (hth);
- goto out;
- }
- cx.ContextFlags = CONTEXT_CONTROL | CONTEXT_INTEGER;
- if (!GetThreadContext (hth, &cx))
- sigproc_printf ("couldn't get context of thread, %E");
- else
- interrupted = tls->interrupt_now (&cx, si, handler, siga);
-
- tls->unlock ();
- ResumeThread (hth);
- if (interrupted)
- goto out;
- }
-
- sigproc_printf ("couldn't interrupt. trying again.");
- yield ();
- }
- /* Hit here if we couldn't deliver the signal. Take a more drastic
- action before trying again. */
- Sleep (1);
- }
-
-out:
- sigproc_printf ("signal %d %sdelivered", si.si_signo, interrupted ? "" : "not ");
- return interrupted;
-}
-
-static inline bool
-has_visible_window_station ()
-{
- HWINSTA station_hdl;
- USEROBJECTFLAGS uof;
- DWORD len;
-
- /* Check if the process is associated with a visible window station.
- These are processes running on the local desktop as well as processes
- running in terminal server sessions.
- Processes running in a service session not explicitely associated
- with the desktop (using the "Allow service to interact with desktop"
- property) are running in an invisible window station. */
- if ((station_hdl = GetProcessWindowStation ())
- && GetUserObjectInformationW (station_hdl, UOI_FLAGS, &uof,
- sizeof uof, &len)
- && (uof.dwFlags & WSF_VISIBLE))
- return true;
- return false;
-}
-
-/* Keyboard interrupt handler. */
-static BOOL WINAPI
-ctrl_c_handler (DWORD type)
-{
- static bool saw_close;
-
- /* Remove early or we could overthrow the threadlist in cygheap.
- Deleting this line causes ash to SEGV if CTRL-C is hit repeatedly.
- I am not exactly sure why that is. Maybe it's just because this
- adds some early serialization to ctrl_c_handler which prevents
- multiple simultaneous calls? */
- _my_tls.remove (INFINITE);
-
-#if 0
- if (type == CTRL_C_EVENT || type == CTRL_BREAK_EVENT)
- proc_subproc (PROC_KILLFORKED, 0);
-#endif
-
- /* Return FALSE to prevent an "End task" dialog box from appearing
- for each Cygwin process window that's open when the computer
- is shut down or console window is closed. */
-
- if (type == CTRL_SHUTDOWN_EVENT)
- {
-#if 0
- /* Don't send a signal. Only NT service applications and their child
- processes will receive this event and the services typically already
- handle the shutdown action when getting the SERVICE_CONTROL_SHUTDOWN
- control message. */
- sig_send (NULL, SIGTERM);
-#endif
- return FALSE;
- }
-
- if (myself->ctty != -1)
- {
- if (type == CTRL_CLOSE_EVENT)
- {
- sig_send (NULL, SIGHUP);
- saw_close = true;
- return FALSE;
- }
- if (!saw_close && type == CTRL_LOGOFF_EVENT)
- {
- /* The CTRL_LOGOFF_EVENT is sent when *any* user logs off.
- The below code sends a SIGHUP only if it is not performing the
- default activity for SIGHUP. Note that it is possible for two
- SIGHUP signals to arrive if a process group leader is exiting
- too. Getting this 100% right is saved for a future cygwin mailing
- list goad. */
- if (global_sigs[SIGHUP].sa_handler != SIG_DFL)
- {
- sig_send (myself, SIGHUP);
- return TRUE;
- }
- return FALSE;
- }
- }
-
- if (ch_spawn.set_saw_ctrl_c ())
- return TRUE;
-
- /* We're only the process group leader when we have a valid pinfo structure.
- If we don't have one, then the parent "stub" will handle the signal. */
- if (!pinfo (cygwin_pid (GetCurrentProcessId ())))
- return TRUE;
-
- tty_min *t = cygwin_shared->tty.get_cttyp ();
- /* Ignore this if we're not the process group leader since it should be handled
- *by* the process group leader. */
- if (t && (!have_execed || have_execed_cygwin)
- && t->getpgid () == myself->pid &&
- (GetTickCount () - t->last_ctrl_c) >= MIN_CTRL_C_SLOP)
- /* Otherwise we just send a SIGINT to the process group and return TRUE (to indicate
- that we have handled the signal). At this point, type should be
- a CTRL_C_EVENT or CTRL_BREAK_EVENT. */
- {
- int sig = SIGINT;
- /* If intr and quit are both mapped to ^C, send SIGQUIT on ^BREAK */
- if (type == CTRL_BREAK_EVENT
- && t->ti.c_cc[VINTR] == 3 && t->ti.c_cc[VQUIT] == 3)
- sig = SIGQUIT;
- t->last_ctrl_c = GetTickCount ();
- t->kill_pgrp (sig);
- t->last_ctrl_c = GetTickCount ();
- return TRUE;
- }
-
- return TRUE;
-}
-
-/* Function used by low level sig wrappers. */
-extern "C" void __stdcall
-set_process_mask (sigset_t newmask)
-{
- set_signal_mask (_my_tls.sigmask, newmask);
-}
-
-extern "C" int
-sighold (int sig)
-{
- /* check that sig is in right range */
- if (sig < 0 || sig >= NSIG)
- {
- set_errno (EINVAL);
- syscall_printf ("signal %d out of range", sig);
- return -1;
- }
- sigset_t mask = _my_tls.sigmask;
- sigaddset (&mask, sig);
- set_signal_mask (_my_tls.sigmask, mask);
- return 0;
-}
-
-extern "C" int
-sigrelse (int sig)
-{
- /* check that sig is in right range */
- if (sig < 0 || sig >= NSIG)
- {
- set_errno (EINVAL);
- syscall_printf ("signal %d out of range", sig);
- return -1;
- }
- sigset_t mask = _my_tls.sigmask;
- sigdelset (&mask, sig);
- set_signal_mask (_my_tls.sigmask, mask);
- return 0;
-}
-
-extern "C" _sig_func_ptr
-sigset (int sig, _sig_func_ptr func)
-{
- sig_dispatch_pending ();
- _sig_func_ptr prev;
-
- /* check that sig is in right range */
- if (sig < 0 || sig >= NSIG || sig == SIGKILL || sig == SIGSTOP)
- {
- set_errno (EINVAL);
- syscall_printf ("SIG_ERR = sigset (%d, %p)", sig, func);
- return (_sig_func_ptr) SIG_ERR;
- }
-
- sigset_t mask = _my_tls.sigmask;
- /* If sig was in the signal mask return SIG_HOLD, otherwise return the
- previous disposition. */
- if (sigismember (&mask, sig))
- prev = SIG_HOLD;
- else
- prev = global_sigs[sig].sa_handler;
- /* If func is SIG_HOLD, add sig to the signal mask, otherwise set the
- disposition to func and remove sig from the signal mask. */
- if (func == SIG_HOLD)
- sigaddset (&mask, sig);
- else
- {
- /* No error checking. The test which could return SIG_ERR has already
- been made above. */
- signal (sig, func);
- sigdelset (&mask, sig);
- }
- set_signal_mask (_my_tls.sigmask, mask);
- return prev;
-}
-
-extern "C" int
-sigignore (int sig)
-{
- return sigset (sig, SIG_IGN) == SIG_ERR ? -1 : 0;
-}
-
-/* Update the signal mask for this process and return the old mask.
- Called from call_signal_handler */
-extern "C" sigset_t
-set_process_mask_delta ()
-{
- sigset_t newmask, oldmask;
-
- if (_my_tls.deltamask & SIG_NONMASKABLE)
- oldmask = _my_tls.oldmask; /* from handle_sigsuspend */
- else
- oldmask = _my_tls.sigmask;
- newmask = (oldmask | _my_tls.deltamask) & ~SIG_NONMASKABLE;
- sigproc_printf ("oldmask %lx, newmask %lx, deltamask %lx", oldmask, newmask,
- _my_tls.deltamask);
- _my_tls.sigmask = newmask;
- return oldmask;
-}
-
-/* Set the signal mask for this process.
- Note that some signals are unmaskable, as in UNIX. */
-
-void
-set_signal_mask (sigset_t& setmask, sigset_t newmask)
-{
- newmask &= ~SIG_NONMASKABLE;
- sigset_t mask_bits = setmask & ~newmask;
- sigproc_printf ("setmask %lx, newmask %lx, mask_bits %lx", setmask, newmask,
- mask_bits);
- setmask = newmask;
- if (mask_bits)
- sig_dispatch_pending (true);
-}
-
-/* Exit due to a signal. Should only be called from the signal thread. */
-extern "C" {
-static void
-signal_exit (int sig, siginfo_t *si)
-{
- debug_printf ("exiting due to signal %d", sig);
- exit_state = ES_SIGNAL_EXIT;
-
- if (cygheap->rlim_core > 0UL)
- switch (sig)
- {
- case SIGABRT:
- case SIGBUS:
- case SIGFPE:
- case SIGILL:
- case SIGQUIT:
- case SIGSEGV:
- case SIGSYS:
- case SIGTRAP:
- case SIGXCPU:
- case SIGXFSZ:
- sig |= 0x80; /* Flag that we've "dumped core" */
- if (try_to_debug ())
- break;
- if (si->si_code != SI_USER && si->si_cyg)
- ((cygwin_exception *) si->si_cyg)->dumpstack ();
- else
- {
- CONTEXT c;
- c.ContextFlags = CONTEXT_FULL;
-#ifdef __x86_64__
- RtlCaptureContext (&c);
- cygwin_exception exc ((PUINT_PTR) __builtin_frame_address (0), &c);
-#else
- GetThreadContext (GetCurrentThread (), &c);
- cygwin_exception exc ((PUINT_PTR) __builtin_frame_address (0), &c);
-#endif
- exc.dumpstack ();
- }
- break;
- }
-
- lock_process until_exit (true);
-
- if (have_execed || exit_state > ES_PROCESS_LOCKED)
- {
- debug_printf ("recursive exit?");
- myself.exit (sig);
- }
-
- /* Starve other threads in a vain attempt to stop them from doing something
- stupid. */
- SetThreadPriority (GetCurrentThread (), THREAD_PRIORITY_TIME_CRITICAL);
-
- sigproc_printf ("about to call do_exit (%x)", sig);
- do_exit (sig);
-}
-} /* extern "C" */
-
-/* Attempt to carefully handle SIGCONT when we are stopped. */
-void
-_cygtls::handle_SIGCONT ()
-{
- if (NOTSTATE (myself, PID_STOPPED))
- return;
-
- myself->stopsig = 0;
- myself->process_state &= ~PID_STOPPED;
- /* Carefully tell sig_handle_tty_stop to wake up.
- Make sure that any pending signal is handled before trying to
- send a new one. Then make sure that SIGCONT has been recognized
- before exiting the loop. */
- bool sigsent = false;
- while (1)
- if (sig) /* Assume that it's ok to just test sig outside of a
- lock since setup_handler does it this way. */
- yield (); /* Attempt to schedule another thread. */
- else if (sigsent)
- break; /* SIGCONT has been recognized by other thread */
- else
- {
- sig = SIGCONT;
- SetEvent (signal_arrived); /* alert sig_handle_tty_stop */
- sigsent = true;
- }
- /* Clear pending stop signals */
- sig_clear (SIGSTOP);
- sig_clear (SIGTSTP);
- sig_clear (SIGTTIN);
- sig_clear (SIGTTOU);
-}
-
-int __reg1
-sigpacket::process ()
-{
- int rc = 1;
- bool issig_wait = false;
- struct sigaction& thissig = global_sigs[si.si_signo];
- void *handler = have_execed ? NULL : (void *) thissig.sa_handler;
-
- threadlist_t *tl_entry = NULL;
- _cygtls *tls = NULL;
-
- /* Don't try to send signals if we're just starting up since signal masks
- may not be available. */
- if (!cygwin_finished_initializing)
- {
- rc = -1;
- goto done;
- }
-
- sigproc_printf ("signal %d processing", si.si_signo);
-
- myself->rusage_self.ru_nsignals++;
-
- if (si.si_signo == SIGCONT)
- {
- tl_entry = cygheap->find_tls (_main_tls);
- _main_tls->handle_SIGCONT ();
- cygheap->unlock_tls (tl_entry);
- }
-
- /* SIGKILL is special. It always goes through. */
- if (si.si_signo == SIGKILL)
- {
- tl_entry = cygheap->find_tls (_main_tls);
- tls = _main_tls;
- }
- else if (ISSTATE (myself, PID_STOPPED))
- {
- rc = -1; /* Don't send signals when stopped */
- goto done;
- }
- else if (!sigtls)
- {
- tl_entry = cygheap->find_tls (si.si_signo, issig_wait);
- if (tl_entry)
- {
- tls = tl_entry->thread;
- sigproc_printf ("using tls %p", tls);
- }
- }
- else
- {
- tl_entry = cygheap->find_tls (sigtls);
- if (tl_entry)
- {
- tls = tl_entry->thread;
- if (sigismember (&tls->sigwait_mask, si.si_signo))
- issig_wait = true;
- else if (!sigismember (&tls->sigmask, si.si_signo))
- issig_wait = false;
- else
- {
- cygheap->unlock_tls (tl_entry);
- tls = NULL;
- }
- }
- }
-
- /* !tls means no threads available to catch a signal. */
- if (!tls)
- {
- sigproc_printf ("signal %d blocked", si.si_signo);
- rc = -1;
- goto done;
- }
-
- /* Do stuff for gdb */
- if ((HANDLE) *tls)
- tls->signal_debugger (si);
-
- if (issig_wait)
- {
- tls->sigwait_mask = 0;
- goto dosig;
- }
-
- if (handler == SIG_IGN)
- {
- sigproc_printf ("signal %d ignored", si.si_signo);
- goto done;
- }
-
- if (si.si_signo == SIGKILL)
- goto exit_sig;
- if (si.si_signo == SIGSTOP)
- {
- sig_clear (SIGCONT);
- goto stop;
- }
-
- /* Clear pending SIGCONT on stop signals */
- if (si.si_signo == SIGTSTP || si.si_signo == SIGTTIN
- || si.si_signo == SIGTTOU)
- sig_clear (SIGCONT);
-
- if (handler == (void *) SIG_DFL)
- {
- if (si.si_signo == SIGCHLD || si.si_signo == SIGIO
- || si.si_signo == SIGCONT || si.si_signo == SIGWINCH
- || si.si_signo == SIGURG)
- {
- sigproc_printf ("signal %d default is currently ignore", si.si_signo);
- goto done;
- }
-
- if (si.si_signo == SIGTSTP || si.si_signo == SIGTTIN
- || si.si_signo == SIGTTOU)
- goto stop;
-
- goto exit_sig;
- }
-
- if (handler == (void *) SIG_ERR)
- goto exit_sig;
-
- goto dosig;
-
-stop:
- if (tls != _main_tls)
- {
- cygheap->unlock_tls (tl_entry);
- tl_entry = cygheap->find_tls (_main_tls);
- tls = _main_tls;
- }
- handler = (void *) sig_handle_tty_stop;
- thissig = global_sigs[SIGSTOP];
- goto dosig;
-
-exit_sig:
- handler = (void *) signal_exit;
- thissig.sa_flags |= SA_SIGINFO;
-
-dosig:
- if (have_execed)
- {
- sigproc_printf ("terminating captive process");
- TerminateProcess (ch_spawn, sigExeced = si.si_signo);
- }
- /* Dispatch to the appropriate function. */
- sigproc_printf ("signal %d, signal handler %p", si.si_signo, handler);
- rc = setup_handler (handler, thissig, tls);
-
-done:
- cygheap->unlock_tls (tl_entry);
- sigproc_printf ("returning %d", rc);
- return rc;
-
-}
-
-int
-_cygtls::call_signal_handler ()
-{
- int this_sa_flags = SA_RESTART;
- while (1)
- {
- lock ();
- if (!sig)
- {
- unlock ();
- break;
- }
-
- /* Pop the stack if the next "return address" is sigdelayed, since
- this function is doing what sigdelayed would have done anyway. */
- if (retaddr () == (__stack_t) sigdelayed)
- pop ();
-
- debug_only_printf ("dealing with signal %d", sig);
- this_sa_flags = sa_flags;
-
- /* Save information locally on stack to pass to handler. */
- int thissig = sig;
- siginfo_t thissi = infodata;
- void (*thisfunc) (int, siginfo_t *, void *) = func;
-
- sigset_t this_oldmask = set_process_mask_delta ();
- int this_errno = saved_errno;
- reset_signal_arrived ();
- incyg = false;
- sig = 0; /* Flag that we can accept another signal */
- unlock (); /* unlock signal stack */
-
- /* no ucontext_t information provided yet, so third arg is NULL */
- thisfunc (thissig, &thissi, NULL);
- incyg = true;
-
- set_signal_mask (_my_tls.sigmask, this_oldmask);
- if (this_errno >= 0)
- set_errno (this_errno);
- }
-
- return this_sa_flags & SA_RESTART || (this != _main_tls);
-}
-
-void
-_cygtls::signal_debugger (siginfo_t& si)
-{
- HANDLE th;
- /* If si.si_cyg is set then the signal was already sent to the debugger. */
- if (isinitialized () && !si.si_cyg && (th = (HANDLE) *this)
- && being_debugged () && SuspendThread (th) >= 0)
- {
- CONTEXT c;
- c.ContextFlags = CONTEXT_FULL;
- if (GetThreadContext (th, &c))
- {
- if (incyg)
-#ifdef __x86_64__
- c.Rip = retaddr ();
-#else
- c.Eip = retaddr ();
-#endif
- memcpy (&thread_context, &c, (&thread_context._internal -
- (unsigned char *) &thread_context));
- /* Enough space for 32/64 bit addresses */
- char sigmsg[2 * sizeof (_CYGWIN_SIGNAL_STRING " ffffffff ffffffffffffffff")];
- __small_sprintf (sigmsg, _CYGWIN_SIGNAL_STRING " %d %y %p", si.si_signo,
- thread_id, &thread_context);
- OutputDebugString (sigmsg);
- }
- ResumeThread (th);
- }
-}
diff --git a/winsup/cygwin/exec.cc b/winsup/cygwin/exec.cc
deleted file mode 100644
index b7342d7c2..000000000
--- a/winsup/cygwin/exec.cc
+++ /dev/null
@@ -1,139 +0,0 @@
-/* exec.cc: exec system call support.
-
- Copyright 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2008,
- 2009, 2011, 2012 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include <process.h>
-#include "cygerrno.h"
-#include "path.h"
-#include "environ.h"
-#include "sync.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "pinfo.h"
-#include "cygheap.h"
-#include "winf.h"
-
-extern "C" int
-execl (const char *path, const char *arg0, ...)
-{
- int i;
- va_list args;
- const char *argv[1024];
-
- va_start (args, arg0);
- argv[0] = arg0;
- i = 1;
- do
- argv[i] = va_arg (args, const char *);
- while (argv[i++] != NULL);
- va_end (args);
- MALLOC_CHECK;
- return spawnve (_P_OVERLAY, path, (char * const *) argv, cur_environ ());
-}
-
-extern "C" int
-execle (const char *path, const char *arg0, ...)
-{
- int i;
- va_list args;
- const char *argv[1024];
- const char * const *envp;
-
- va_start (args, arg0);
- argv[0] = arg0;
- i = 1;
- do
- argv[i] = va_arg (args, const char *);
- while (argv[i++] != NULL);
- envp = va_arg (args, const char * const *);
- va_end (args);
- MALLOC_CHECK;
- return spawnve (_P_OVERLAY, path, (char * const *) argv, envp);
-}
-
-extern "C" int
-execlp (const char *file, const char *arg0, ...)
-{
- int i;
- va_list args;
- const char *argv[1024];
- path_conv buf;
-
- va_start (args, arg0);
- argv[0] = arg0;
- i = 1;
- do
- argv[i] = va_arg (args, const char *);
- while (argv[i++] != NULL);
- va_end (args);
- MALLOC_CHECK;
- return spawnve (_P_OVERLAY | _P_PATH_TYPE_EXEC,
- find_exec (file, buf, "PATH=", FE_NNF) ?: "",
- (char * const *) argv, cur_environ ());
-}
-
-extern "C" int
-execv (const char *path, char * const *argv)
-{
- MALLOC_CHECK;
- return spawnve (_P_OVERLAY, path, argv, cur_environ ());
-}
-
-extern "C" int
-execve (const char *path, char *const argv[], char *const envp[])
-{
- MALLOC_CHECK;
- return spawnve (_P_OVERLAY, path, argv, envp);
-}
-EXPORT_ALIAS (execve, _execve) /* For newlib */
-
-extern "C" int
-execvp (const char *file, char * const *argv)
-{
- path_conv buf;
-
- MALLOC_CHECK;
- return spawnve (_P_OVERLAY | _P_PATH_TYPE_EXEC,
- find_exec (file, buf, "PATH=", FE_NNF) ?: "",
- argv, cur_environ ());
-}
-
-extern "C" int
-execvpe (const char *file, char * const *argv, char *const *envp)
-{
- path_conv buf;
-
- MALLOC_CHECK;
- return spawnve (_P_OVERLAY | _P_PATH_TYPE_EXEC,
- find_exec (file, buf, "PATH=", FE_NNF) ?: "",
- argv, envp);
-}
-
-extern "C" int
-fexecve (int fd, char * const *argv, char *const *envp)
-{
- cygheap_fdget cfd (fd);
- if (cfd < 0)
- {
- syscall_printf ("-1 = fexecve (%d, %p, %p)", fd, argv, envp);
- return -1;
- }
-
- MALLOC_CHECK;
- return spawnve (_P_OVERLAY, cfd->pc.get_win32 (), argv, envp);
-}
-
-extern "C" pid_t
-sexecve_is_bad ()
-{
- set_errno (ENOSYS);
- return 0;
-}
diff --git a/winsup/cygwin/external.cc b/winsup/cygwin/external.cc
deleted file mode 100644
index 5fac4bb66..000000000
--- a/winsup/cygwin/external.cc
+++ /dev/null
@@ -1,696 +0,0 @@
-/* external.cc: Interface to Cygwin internals from external programs.
-
- Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
- 2008, 2009, 2010, 2011, 2012, 2014 Red Hat, Inc.
-
- Written by Christopher Faylor <cgf@cygnus.com>
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include "sigproc.h"
-#include "pinfo.h"
-#include "shared_info.h"
-#include "cygwin_version.h"
-#include "cygerrno.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "heap.h"
-#include "cygtls.h"
-#include "child_info.h"
-#include "environ.h"
-#include "cygserver_setpwd.h"
-#include "pwdgrp.h"
-#include <unistd.h>
-#include <stdlib.h>
-#include <wchar.h>
-#include <iptypes.h>
-
-child_info *get_cygwin_startup_info ();
-static void exit_process (UINT, bool) __attribute__((noreturn));
-
-static winpids pids;
-
-static external_pinfo *
-fillout_pinfo (pid_t pid, int winpid)
-{
- BOOL nextpid;
- static external_pinfo ep;
- static char ep_progname_long_buf[NT_MAX_PATH];
-
- if ((nextpid = !!(pid & CW_NEXTPID)))
- pid ^= CW_NEXTPID;
-
-
- static unsigned int i;
- if (!pids.npids || !nextpid)
- {
- pids.set (winpid);
- i = 0;
- }
-
- if (!pid)
- i = 0;
-
- memset (&ep, 0, sizeof ep);
- while (i < pids.npids)
- {
- DWORD thispid = pids.winpid (i);
- _pinfo *p = pids[i];
- i++;
-
- if (!p)
- {
- if (!nextpid && thispid != (DWORD) pid)
- continue;
- ep.pid = cygwin_pid (thispid);
- ep.dwProcessId = thispid;
- ep.process_state = PID_IN_USE;
- ep.ctty = -1;
- break;
- }
- else if (nextpid || p->pid == pid || (winpid && thispid == (DWORD) pid))
- {
- ep.ctty = (p->ctty < 0 || iscons_dev (p->ctty)) ? p->ctty : device::minor (p->ctty);
- ep.pid = p->pid;
- ep.ppid = p->ppid;
- ep.dwProcessId = p->dwProcessId;
- ep.uid = p->uid;
- ep.gid = p->gid;
- ep.pgid = p->pgid;
- ep.sid = p->sid;
- ep.umask = 0;
- ep.start_time = p->start_time;
- ep.rusage_self = p->rusage_self;
- ep.rusage_children = p->rusage_children;
- ep.progname[0] = '\0';
- sys_wcstombs(ep.progname, MAX_PATH, p->progname);
- ep.strace_mask = 0;
- ep.version = EXTERNAL_PINFO_VERSION;
-
- ep.process_state = p->process_state;
-
- ep.uid32 = p->uid;
- ep.gid32 = p->gid;
-
- ep.progname_long = ep_progname_long_buf;
- mount_table->conv_to_posix_path (p->progname, ep.progname_long, 0);
- break;
- }
- }
-
- if (!ep.pid)
- {
- i = 0;
- pids.reset ();
- return NULL;
- }
- return &ep;
-}
-
-static inline uintptr_t
-get_cygdrive_info (char *user, char *system, char *user_flags,
- char *system_flags)
-{
- int res = mount_table->get_cygdrive_info (user, system, user_flags,
- system_flags);
- return (res == ERROR_SUCCESS) ? 1 : 0;
-}
-
-static bool
-check_ntsec (const char *filename)
-{
- if (!filename)
- return true;
- path_conv pc (filename);
- return pc.has_acls ();
-}
-
-/* Copy cygwin environment variables to the Windows environment. */
-static PWCHAR
-create_winenv (const char * const *env)
-{
- int unused_envc;
- PWCHAR envblock = NULL;
- char **envp = build_env (env ?: cur_environ (), envblock, unused_envc, false,
- NULL);
- PWCHAR p = envblock;
-
- if (envp)
- {
- for (char **e = envp; *e; e++)
- cfree (*e);
- cfree (envp);
- }
- /* If we got an env block, just return pointer to win env. */
- if (env)
- return envblock;
- /* Otherwise sync win env of current process with its posix env. */
- if (!p)
- return NULL;
- while (*p)
- {
- PWCHAR eq = wcschr (p, L'=');
- if (eq)
- {
- *eq = L'\0';
- SetEnvironmentVariableW (p, ++eq);
- p = eq;
- }
- p = wcschr (p, L'\0') + 1;
- }
- free (envblock);
- return NULL;
-}
-
-/*
- * Cygwin-specific wrapper for win32 ExitProcess and TerminateProcess.
- * It ensures that the correct exit code, derived from the specified
- * status value, will be made available to this process's parent (if
- * that parent is also a cygwin process). If useTerminateProcess is
- * true, then TerminateProcess(GetCurrentProcess(),...) will be used;
- * otherwise, ExitProcess(...) is called.
- *
- * Used by startup code for cygwin processes which is linked statically
- * into applications, and is not part of the cygwin DLL -- which is why
- * this interface is exposed. "Normal" programs should use ANSI exit(),
- * ANSI abort(), or POSIX _exit(), rather than this function -- because
- * calling ExitProcess or TerminateProcess, even through this wrapper,
- * skips much of the cygwin process cleanup code.
- */
-static void
-exit_process (UINT status, bool useTerminateProcess)
-{
- pid_t pid = getpid ();
- external_pinfo *ep = fillout_pinfo (pid, 1);
- DWORD dwpid = ep ? ep->dwProcessId : pid;
- pinfo p (pid, PID_MAP_RW);
- if (ep)
- pid = ep->pid;
- if ((dwpid == GetCurrentProcessId()) && (p->pid == pid))
- p.set_exit_code ((DWORD)status);
- if (useTerminateProcess)
- TerminateProcess (GetCurrentProcess(), status);
- /* avoid 'else' clause to silence warning */
- ExitProcess (status);
-}
-
-
-extern "C" uintptr_t
-cygwin_internal (cygwin_getinfo_types t, ...)
-{
- va_list arg;
- uintptr_t res = (uintptr_t) -1;
- va_start (arg, t);
-
- switch (t)
- {
- case CW_LOCK_PINFO:
- res = 1;
- break;
-
- case CW_UNLOCK_PINFO:
- res = 1;
- break;
-
- case CW_GETTHREADNAME:
- res = (uintptr_t) cygthread::name (va_arg (arg, DWORD));
- break;
-
- case CW_SETTHREADNAME:
- {
- set_errno (ENOSYS);
- res = 0;
- }
- break;
-
- case CW_GETPINFO:
- res = (uintptr_t) fillout_pinfo (va_arg (arg, DWORD), 0);
- break;
-
- case CW_GETVERSIONINFO:
- res = (uintptr_t) cygwin_version_strings;
- break;
-
- case CW_READ_V1_MOUNT_TABLES:
- set_errno (ENOSYS);
- res = 1;
- break;
-
- case CW_USER_DATA:
-#ifndef __x86_64__
- /* This is a kludge to work around a version of _cygwin_common_crt0
- which overwrote the cxx_malloc field with the local DLL copy.
- Hilarity ensues if the DLL is not loaded like while the process
- is forking. */
- __cygwin_user_data.cxx_malloc = &default_cygwin_cxx_malloc;
-#endif
- res = (uintptr_t) &__cygwin_user_data;
- break;
-
- case CW_PERFILE:
- perfile_table = va_arg (arg, struct __cygwin_perfile *);
- res = 0;
- break;
-
- case CW_GET_CYGDRIVE_PREFIXES:
- {
- char *user = va_arg (arg, char *);
- char *system = va_arg (arg, char *);
- res = get_cygdrive_info (user, system, NULL, NULL);
- }
- break;
-
- case CW_GETPINFO_FULL:
- res = (uintptr_t) fillout_pinfo (va_arg (arg, pid_t), 1);
- break;
-
- case CW_INIT_EXCEPTIONS:
- /* noop */ /* init_exceptions (va_arg (arg, exception_list *)); */
- res = 0;
- break;
-
- case CW_GET_CYGDRIVE_INFO:
- {
- char *user = va_arg (arg, char *);
- char *system = va_arg (arg, char *);
- char *user_flags = va_arg (arg, char *);
- char *system_flags = va_arg (arg, char *);
- res = get_cygdrive_info (user, system, user_flags, system_flags);
- }
- break;
-
- case CW_SET_CYGWIN_REGISTRY_NAME:
- case CW_GET_CYGWIN_REGISTRY_NAME:
- res = 0;
- break;
-
- case CW_STRACE_TOGGLE:
- {
- pid_t pid = va_arg (arg, pid_t);
- pinfo p (pid);
- if (p)
- {
- sig_send (p, __SIGSTRACE);
- res = 0;
- }
- else
- {
- set_errno (ESRCH);
- res = (uintptr_t) -1;
- }
- }
- break;
-
- case CW_STRACE_ACTIVE:
- {
- res = strace.active ();
- }
- break;
-
- case CW_CYGWIN_PID_TO_WINPID:
- {
- pinfo p (va_arg (arg, pid_t));
- res = p ? p->dwProcessId : 0;
- }
- break;
- case CW_EXTRACT_DOMAIN_AND_USER:
- {
- WCHAR nt_domain[MAX_DOMAIN_NAME_LEN + 1];
- WCHAR nt_user[UNLEN + 1];
-
- struct passwd *pw = va_arg (arg, struct passwd *);
- char *domain = va_arg (arg, char *);
- char *user = va_arg (arg, char *);
- extract_nt_dom_user (pw, nt_domain, nt_user);
- if (domain)
- sys_wcstombs (domain, MAX_DOMAIN_NAME_LEN + 1, nt_domain);
- if (user)
- sys_wcstombs (user, UNLEN + 1, nt_user);
- res = 0;
- }
- break;
- case CW_CMDLINE:
- {
- size_t n;
- pid_t pid = va_arg (arg, pid_t);
- pinfo p (pid);
- res = (uintptr_t) p->cmdline (n);
- }
- break;
- case CW_CHECK_NTSEC:
- {
- char *filename = va_arg (arg, char *);
- res = check_ntsec (filename);
- }
- break;
- case CW_GET_ERRNO_FROM_WINERROR:
- {
- int error = va_arg (arg, int);
- int deferrno = va_arg (arg, int);
- res = geterrno_from_win_error (error, deferrno);
- }
- break;
- case CW_GET_POSIX_SECURITY_ATTRIBUTE:
- {
- path_conv dummy;
- security_descriptor sd;
- int attribute = va_arg (arg, int);
- PSECURITY_ATTRIBUTES psa = va_arg (arg, PSECURITY_ATTRIBUTES);
- void *sd_buf = va_arg (arg, void *);
- DWORD sd_buf_size = va_arg (arg, DWORD);
- set_security_attribute (dummy, attribute, psa, sd);
- if (!psa->lpSecurityDescriptor)
- res = sd.size ();
- else
- {
- psa->lpSecurityDescriptor = sd_buf;
- res = sd.copy (sd_buf, sd_buf_size);
- }
- }
- break;
- case CW_GET_SHMLBA:
- {
- res = wincap.allocation_granularity ();
- }
- break;
- case CW_GET_UID_FROM_SID:
- {
- cygpsid psid = va_arg (arg, PSID);
- res = psid.get_uid (NULL);
- }
- break;
- case CW_GET_GID_FROM_SID:
- {
- cygpsid psid = va_arg (arg, PSID);
- res = psid.get_gid (NULL);
- }
- break;
- case CW_GET_BINMODE:
- {
- const char *path = va_arg (arg, const char *);
- path_conv p (path, PC_SYM_FOLLOW | PC_NULLEMPTY);
- if (p.error)
- {
- set_errno (p.error);
- res = (unsigned long) -1;
- }
- else
- res = p.binmode ();
- }
- break;
- case CW_HOOK:
- {
- const char *name = va_arg (arg, const char *);
- const void *hookfn = va_arg (arg, const void *);
- WORD subsys;
- res = (uintptr_t) hook_or_detect_cygwin (name, hookfn, subsys);
- }
- break;
- case CW_ARGV:
- {
- child_info_spawn *ci = (child_info_spawn *) get_cygwin_startup_info ();
- res = (uintptr_t) (ci ? ci->moreinfo->argv : NULL);
- }
- break;
- case CW_ENVP:
- {
- child_info_spawn *ci = (child_info_spawn *) get_cygwin_startup_info ();
- res = (uintptr_t) (ci ? ci->moreinfo->envp : NULL);
- }
- break;
- case CW_DEBUG_SELF:
- error_start_init (va_arg (arg, const char *));
- res = try_to_debug ();
- break;
- case CW_SYNC_WINENV:
- create_winenv (NULL);
- res = 0;
- break;
- case CW_CYGTLS_PADSIZE:
- res = CYGTLS_PADSIZE;
- break;
- case CW_SET_DOS_FILE_WARNING:
- {
- dos_file_warning = va_arg (arg, int);
- res = 0;
- }
- break;
- case CW_SET_PRIV_KEY:
- {
- const char *passwd = va_arg (arg, const char *);
- const char *username = va_arg (arg, const char *);
- res = setlsapwd (passwd, username);
- }
- break;
- case CW_SETERRNO:
- {
- const char *file = va_arg (arg, const char *);
- int line = va_arg (arg, int);
- seterrno(file, line);
- res = 0;
- }
- break;
- case CW_EXIT_PROCESS:
- {
- UINT status = va_arg (arg, UINT);
- int useTerminateProcess = va_arg (arg, int);
- exit_process (status, !!useTerminateProcess); /* no return */
- }
- case CW_SET_EXTERNAL_TOKEN:
- {
- HANDLE token = va_arg (arg, HANDLE);
- int type = va_arg (arg, int);
- set_imp_token (token, type);
- res = 0;
- }
- break;
- case CW_GET_INSTKEY:
- {
- PWCHAR dest = va_arg (arg, PWCHAR);
- wcscpy (dest, cygheap->installation_key_buf);
- res = 0;
- }
- break;
- case CW_INT_SETLOCALE:
- {
- extern void internal_setlocale ();
- internal_setlocale ();
- res = 0;
- }
- break;
- case CW_CVT_MNT_OPTS:
- {
- extern bool fstab_read_flags (char **, unsigned &, bool);
- char **option_string = va_arg (arg, char **);
- if (!option_string || !*option_string)
- set_errno (EINVAL);
- else
- {
- unsigned *pflags = va_arg (arg, unsigned *);
- unsigned flags = pflags ? *pflags : 0;
- if (fstab_read_flags (option_string, flags, true))
- {
- if (pflags)
- *pflags = flags;
- res = 0;
- }
- }
- }
- break;
- case CW_LST_MNT_OPTS:
- {
- extern char *fstab_list_flags ();
- char **option_string = va_arg (arg, char **);
- if (!option_string)
- set_errno (EINVAL);
- else
- {
- *option_string = fstab_list_flags ();
- if (*option_string)
- res = 0;
- }
- }
- break;
- case CW_STRERROR:
- {
- int err = va_arg (arg, int);
- res = (uintptr_t) strerror (err);
- }
- break;
-
- case CW_CVT_ENV_TO_WINENV:
- {
- char **posix_env = va_arg (arg, char **);
- res = (uintptr_t) create_winenv (posix_env);
- }
- break;
-
- case CW_ALLOC_DRIVE_MAP:
- {
- dos_drive_mappings *ddm = new dos_drive_mappings ();
- res = (uintptr_t) ddm;
- }
- break;
-
- case CW_MAP_DRIVE_MAP:
- {
- dos_drive_mappings *ddm = va_arg (arg, dos_drive_mappings *);
- wchar_t *pathbuf = va_arg (arg, wchar_t *);
- if (ddm && pathbuf)
- res = (uintptr_t) ddm->fixup_if_match (pathbuf);
- }
- break;
-
- case CW_FREE_DRIVE_MAP:
- {
- dos_drive_mappings *ddm = va_arg (arg, dos_drive_mappings *);
- if (ddm)
- delete ddm;
- res = 0;
- }
- break;
-
- case CW_SETENT:
- {
- int group = va_arg (arg, int);
- int enums = va_arg (arg, int);
- PCWSTR enum_tdoms = va_arg (arg, PCWSTR);
- if (group)
- res = (uintptr_t) setgrent_filtered (enums, enum_tdoms);
- else
- res = (uintptr_t) setpwent_filtered (enums, enum_tdoms);
- }
- break;
-
- case CW_GETENT:
- {
- int group = va_arg (arg, int);
- void *obj = va_arg (arg, void *);
- if (obj)
- {
- if (group)
- res = (uintptr_t) getgrent_filtered (obj);
- else
- res = (uintptr_t) getpwent_filtered (obj);
- }
- }
- break;
-
- case CW_ENDENT:
- {
- int group = va_arg (arg, int);
- void *obj = va_arg (arg, void *);
- if (obj)
- {
- if (group)
- endgrent_filtered (obj);
- else
- endpwent_filtered (obj);
- res = 0;
- }
- }
- break;
-
- case CW_GETNSSSEP:
- res = (uintptr_t) cygheap->pg.nss_separator ();
- break;
-
- case CW_GETNSS_PWD_SRC:
- res = (uintptr_t) cygheap->pg.nss_pwd_src ();
- break;
-
- case CW_GETNSS_GRP_SRC:
- res = (uintptr_t) cygheap->pg.nss_grp_src ();
- break;
-
- case CW_GETPWSID:
- {
- int db_only = va_arg (arg, int);
- PSID psid = va_arg (arg, PSID);
- cygpsid sid (psid);
- res = (uintptr_t) (db_only ? internal_getpwsid_from_db (sid)
- : internal_getpwsid (sid));
- }
- break;
-
- case CW_GETGRSID:
- {
- int db_only = va_arg (arg, int);
- PSID psid = va_arg (arg, PSID);
- cygpsid sid (psid);
- res = (uintptr_t) (db_only ? internal_getgrsid_from_db (sid)
- : internal_getgrsid (sid));
- }
- break;
-
- case CW_CYGNAME_FROM_WINNAME:
- {
- /* This functionality has been added mainly for sshd. Sshd
- calls getpwnam() with the username of the non-privileged
- user used for privilege separation. This is usually a
- fixed string "sshd". However, when using usernames from
- the Windows DBs, it's no safe bet anymore if the username
- is "sshd", it could also be "DOMAIN+sshd". So what we do
- here is this:
-
- Sshd calls cygwin_internal (CW_CYGNAME_FROM_WINNAME,
- "sshd",
- username_buffer,
- sizeof username_buffer);
-
- If this call succeeds, sshd expects the correct Cygwin
- username of the unprivileged sshd account in username_buffer.
-
- The below code checks for a Windows username matching the
- incoming username, and then fetches the Cygwin username with
- the matching SID. This is our username used for privsep then.
-
- Of course, other applications with similar needs can use the
- same method. */
- const char *winname = va_arg (arg, const char *);
- char *buffer = va_arg (arg, char *);
- size_t buflen = va_arg (arg, size_t);
-
- if (!winname || !buffer || !buflen)
- break;
-
- WCHAR name[UNLEN + 1];
- sys_mbstowcs (name, sizeof name, winname);
-
- cygsid sid;
- DWORD slen = SECURITY_MAX_SID_SIZE;
- WCHAR dom[DNLEN + 1];
- DWORD dlen = DNLEN + 1;
- SID_NAME_USE acc_type;
-
- if (!LookupAccountNameW (NULL, name, sid, &slen, dom, &dlen,
- &acc_type))
- break;
-
- struct passwd *pw = internal_getpwsid (sid);
- if (!pw)
- break;
-
- buffer[0] = '\0';
- strncat (buffer, pw->pw_name, buflen - 1);
- res = 0;
- }
- break;
-
- case CW_FIXED_ATEXIT:
- res = 0;
- break;
-
- default:
- set_errno (ENOSYS);
- }
- va_end (arg);
- return res;
-}
diff --git a/winsup/cygwin/fcntl.cc b/winsup/cygwin/fcntl.cc
deleted file mode 100644
index babb06424..000000000
--- a/winsup/cygwin/fcntl.cc
+++ /dev/null
@@ -1,125 +0,0 @@
-/* fcntl.cc: fcntl syscall
-
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2008, 2009,
- 2010, 2011, 2012, 2013, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include <unistd.h>
-#include "cygerrno.h"
-#include "security.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "cygtls.h"
-
-extern "C" int
-fcntl64 (int fd, int cmd, ...)
-{
- int res = -1;
- intptr_t arg = 0;
- va_list args;
-
- pthread_testcancel ();
-
- __try
- {
-
- debug_printf ("fcntl(%d, %d, ...)", fd, cmd);
- cygheap_fdget cfd (fd, true);
- if (cfd < 0)
- __leave;
-
- /* FIXME? All numerical args to fcntl are defined as long on Linux.
- This relies on a really dirty trick on x86_64: A 32 bit mov to
- a register (e.g. mov $1, %edx) always sets the high 32 bit to 0.
- We're following the Linux lead here since the third arg to any
- function is in a register anyway (%r8 in MS ABI). That's the easy
- case which is covered here by always reading the arg with
- sizeof (intptr_t) == sizeof (long) == sizeof (void*) which matches
- all targets.
-
- However, the POSIX standard defines all numerical args as type int.
- If we take that literally, we had a (small) problem on 64 bit, since
- sizeof (void*) != sizeof (int). If we would like to follow POSIX more
- closely than Linux, we'd have to call va_arg on a per cmd basis. */
-
- va_start (args, cmd);
- arg = va_arg (args, intptr_t);
- va_end (args);
-
- switch (cmd)
- {
- case F_DUPFD:
- case F_DUPFD_CLOEXEC:
- if (arg >= 0 && arg < OPEN_MAX_MAX)
- {
- int flags = cmd == F_DUPFD_CLOEXEC ? O_CLOEXEC : 0;
- res = cygheap->fdtab.dup3 (fd, cygheap_fdnew ((arg) - 1), flags);
- }
- else
- {
- set_errno (EINVAL);
- res = -1;
- }
- break;
- default:
- res = cfd->fcntl (cmd, arg);
- break;
- }
- }
- __except (EFAULT) {}
- __endtry
- syscall_printf ("%R = fcntl(%d, %d, %ly)", res, fd, cmd, arg);
- return res;
-}
-
-#ifdef __x86_64__
-EXPORT_ALIAS (fcntl64, fcntl)
-EXPORT_ALIAS (fcntl64, _fcntl)
-#else
-extern "C" int
-_fcntl (int fd, int cmd, ...)
-{
- intptr_t arg = 0;
- va_list args;
- struct __flock32 *src = NULL;
- struct flock dst;
-
- __try
- {
- va_start (args, cmd);
- arg = va_arg (args, intptr_t);
- va_end (args);
- if (cmd == F_GETLK || cmd == F_SETLK || cmd == F_SETLKW)
- {
- src = (struct __flock32 *) arg;
- dst.l_type = src->l_type;
- dst.l_whence = src->l_whence;
- dst.l_start = src->l_start;
- dst.l_len = src->l_len;
- dst.l_pid = src->l_pid;
- arg = (intptr_t) &dst;
- }
- int res = fcntl64 (fd, cmd, arg);
- if (cmd == F_GETLK)
- {
- src->l_type = dst.l_type;
- src->l_whence = dst.l_whence;
- src->l_start = dst.l_start;
- src->l_len = dst.l_len;
- src->l_pid = (short) dst.l_pid;
- }
- return res;
- }
- __except (EFAULT)
- __endtry
- return -1;
-}
-#endif
diff --git a/winsup/cygwin/fenv.cc b/winsup/cygwin/fenv.cc
deleted file mode 100755
index 5443681f9..000000000
--- a/winsup/cygwin/fenv.cc
+++ /dev/null
@@ -1,447 +0,0 @@
-/* fenv.cc
-
- Copyright 2010, 2011, 2012 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include "fenv.h"
-#include "errno.h"
-#include "wincap.h"
-#include <string.h>
-
-/* Mask and shift amount for rounding bits. */
-#define FE_CW_ROUND_MASK (0x0c00)
-#define FE_CW_ROUND_SHIFT (10)
-/* Same, for SSE MXCSR. */
-#define FE_MXCSR_ROUND_MASK (0x6000)
-#define FE_MXCSR_ROUND_SHIFT (13)
-
-/* Mask and shift amount for precision bits. */
-#define FE_CW_PREC_MASK (0x0300)
-#define FE_CW_PREC_SHIFT (8)
-
-/* In x87, exception status bits and mask bits occupy
- corresponding bit positions in the status and control
- registers, respectively. In SSE, they are both located
- in the control-and-status register, with the status bits
- corresponding to the x87 positions, and the mask bits
- shifted by this amount to the left. */
-#define FE_SSE_EXCEPT_MASK_SHIFT (7)
-
-/* These are writable so we can initialise them at startup. */
-static fenv_t fe_dfl_env;
-static fenv_t fe_nomask_env;
-
-/* These pointers provide the outside world with read-only access to them. */
-const fenv_t *_fe_dfl_env = &fe_dfl_env;
-const fenv_t *_fe_nomask_env = &fe_nomask_env;
-
-/* Although Cygwin assumes i686 or above (hence SSE available) these
- days, and the compiler feels free to use it (depending on compile-
- time flags of course), we should avoid needlessly breaking any
- purely integer mode apps (or apps compiled with -mno-sse), so we
- only manage SSE state in this fenv module if we detect that SSE
- instructions are available at runtime. If we didn't do this, all
- applications run on older machines would bomb out with an invalid
- instruction exception right at startup; let's not be *that* WJM! */
-static bool use_sse = false;
-
-/* This function enables traps for each of the exceptions as indicated
- by the parameter except. The individual exceptions are described in
- [ ... glibc manual xref elided ...]. Only the specified exceptions are
- enabled, the status of the other exceptions is not changed.
- The function returns the previous enabled exceptions in case the
- operation was successful, -1 otherwise. */
-int
-feenableexcept (int excepts)
-{
- unsigned short cw, old_cw;
- unsigned int mxcsr = 0;
-
- if (excepts & ~FE_ALL_EXCEPT)
- return -1;
-
- /* Get control words. */
- __asm__ volatile ("fnstcw %0" : "=m" (old_cw) : );
- if (use_sse)
- __asm__ volatile ("stmxcsr %0" : "=m" (mxcsr) : );
-
- /* Enable exceptions by clearing mask bits. */
- cw = old_cw & ~excepts;
- mxcsr &= ~(excepts << FE_SSE_EXCEPT_MASK_SHIFT);
-
- /* Store updated control words. */
- __asm__ volatile ("fldcw %0" :: "m" (cw));
- if (use_sse)
- __asm__ volatile ("ldmxcsr %0" :: "m" (mxcsr));
-
- /* Return old value. We assume SSE and x87 stay in sync. Note that
- we are returning a mask of enabled exceptions, which is the opposite
- of the flags in the register, which are set to disable (mask) their
- related exceptions. */
- return (~old_cw) & FE_ALL_EXCEPT;
-}
-
-/* This function disables traps for each of the exceptions as indicated
- by the parameter except. The individual exceptions are described in
- [ ... glibc manual xref elided ...]. Only the specified exceptions are
- disabled, the status of the other exceptions is not changed.
- The function returns the previous enabled exceptions in case the
- operation was successful, -1 otherwise. */
-int
-fedisableexcept (int excepts)
-{
- unsigned short cw, old_cw;
- unsigned int mxcsr = 0;
-
- if (excepts & ~FE_ALL_EXCEPT)
- return -1;
-
- /* Get control words. */
- __asm__ volatile ("fnstcw %0" : "=m" (old_cw) : );
- if (use_sse)
- __asm__ volatile ("stmxcsr %0" : "=m" (mxcsr) : );
-
- /* Disable exceptions by setting mask bits. */
- cw = old_cw | excepts;
- mxcsr |= (excepts << FE_SSE_EXCEPT_MASK_SHIFT);
-
- /* Store updated control words. */
- __asm__ volatile ("fldcw %0" :: "m" (cw));
- if (use_sse)
- __asm__ volatile ("ldmxcsr %0" :: "m" (mxcsr));
-
- /* Return old value. We assume SSE and x87 stay in sync. Note that
- we are returning a mask of enabled exceptions, which is the opposite
- of the flags in the register, which are set to disable (mask) their
- related exceptions. */
- return (~old_cw) & FE_ALL_EXCEPT;
-}
-
-/* This function returns a bitmask of all currently enabled exceptions. It
- returns -1 in case of failure. */
-int
-fegetexcept (void)
-{
- unsigned short cw;
-
- /* Get control word. We assume SSE and x87 stay in sync. */
- __asm__ volatile ("fnstcw %0" : "=m" (cw) : );
-
- /* Exception is *dis*abled when mask bit is set. */
- return (~cw) & FE_ALL_EXCEPT;
-}
-
-/* Store the floating-point environment in the variable pointed to by envp.
- The function returns zero in case the operation was successful, a non-zero
- value otherwise. */
-int
-fegetenv (fenv_t *envp)
-{
- __asm__ volatile ("fnstenv %0" : "=m" (envp->_fpu) : );
- if (use_sse)
- __asm__ volatile ("stmxcsr %0" : "=m" (envp->_sse_mxcsr) : );
- return 0;
-}
-
-/* Store the current floating-point environment in the object pointed to
- by envp. Then clear all exception flags, and set the FPU to trap no
- exceptions. Not all FPUs support trapping no exceptions; if feholdexcept
- cannot set this mode, it returns nonzero value. If it succeeds, it
- returns zero. */
-int
-feholdexcept (fenv_t *envp)
-{
- unsigned int mxcsr;
- fegetenv (envp);
- mxcsr = envp->_sse_mxcsr & ~FE_ALL_EXCEPT;
- if (use_sse)
- __asm__ volatile ("ldmxcsr %0" :: "m" (mxcsr));
- __asm__ volatile ("fnclex");
- fedisableexcept (FE_ALL_EXCEPT);
- return 0;
-}
-
-/* Set the floating-point environment to that described by envp. The
- function returns zero in case the operation was successful, a non-zero
- value otherwise. */
-int
-fesetenv (const fenv_t *envp)
-{
- __asm__ volatile ("fldenv %0" :: "m" (envp->_fpu) );
- if (use_sse)
- __asm__ volatile ("ldmxcsr %0" :: "m" (envp->_sse_mxcsr));
- return 0;
-}
-
-/* Like fesetenv, this function sets the floating-point environment to
- that described by envp. However, if any exceptions were flagged in the
- status word before feupdateenv was called, they remain flagged after
- the call. In other words, after feupdateenv is called, the status
- word is the bitwise OR of the previous status word and the one saved
- in envp. The function returns zero in case the operation was successful,
- a non-zero value otherwise. */
-int
-feupdateenv (const fenv_t *envp)
-{
- fenv_t envcopy;
- unsigned int mxcsr = 0;
- unsigned short sw;
-
- /* Don't want to modify *envp, but want to update environment atomically,
- so take a copy and merge the existing exceptions into it. */
- memcpy (&envcopy, envp, sizeof *envp);
- __asm__ volatile ("fnstsw %0" : "=m" (sw) : );
- if (use_sse)
- __asm__ volatile ("stmxcsr %0" : "=m" (mxcsr) : );
- envcopy._fpu._fpu_sw |= (sw & FE_ALL_EXCEPT);
- envcopy._sse_mxcsr |= (mxcsr & FE_ALL_EXCEPT);
-
- return fesetenv (&envcopy);
-}
-
-/* This function clears all of the supported exception flags indicated by
- excepts. The function returns zero in case the operation was successful,
- a non-zero value otherwise. */
-int
-feclearexcept (int excepts)
-{
- fenv_t fenv;
-
- if (excepts & ~FE_ALL_EXCEPT)
- return EINVAL;
-
- /* Need to save/restore whole environment to modify status word. */
- fegetenv (&fenv);
-
- /* Mask undesired bits out. */
- fenv._fpu._fpu_sw &= ~excepts;
- fenv._sse_mxcsr &= ~excepts;
-
- /* Set back into FPU state. */
- return fesetenv (&fenv);
-}
-
-/* This function raises the supported exceptions indicated by
- excepts. If more than one exception bit in excepts is set the order
- in which the exceptions are raised is undefined except that overflow
- (FE_OVERFLOW) or underflow (FE_UNDERFLOW) are raised before inexact
- (FE_INEXACT). Whether for overflow or underflow the inexact exception
- is also raised is also implementation dependent. The function returns
- zero in case the operation was successful, a non-zero value otherwise. */
-int
-feraiseexcept (int excepts)
-{
- fenv_t fenv;
-
- if (excepts & ~FE_ALL_EXCEPT)
- return EINVAL;
-
- /* Need to save/restore whole environment to modify status word. */
- __asm__ volatile ("fnstenv %0" : "=m" (fenv) : );
-
- /* Set desired exception bits. */
- fenv._fpu._fpu_sw |= excepts;
-
- /* Set back into FPU state. */
- __asm__ volatile ("fldenv %0" :: "m" (fenv));
-
- /* And trigger them - whichever are unmasked. */
- __asm__ volatile ("fwait");
-
- return 0;
-}
-
-/* Test whether the exception flags indicated by the parameter except
- are currently set. If any of them are, a nonzero value is returned
- which specifies which exceptions are set. Otherwise the result is zero. */
-int
-fetestexcept (int excepts)
-{
- unsigned short sw;
- unsigned int mxcsr = 0;
-
- if (excepts & ~FE_ALL_EXCEPT)
- return EINVAL;
-
- /* Get status registers. */
- __asm__ volatile ("fnstsw %0" : "=m" (sw) : );
- if (use_sse)
- __asm__ volatile ("stmxcsr %0" : "=m" (mxcsr) : );
-
- /* Mask undesired bits out and return result. */
- return (sw | mxcsr) & excepts;
-}
-/* This function stores in the variable pointed to by flagp an
- implementation-defined value representing the current setting of the
- exception flags indicated by excepts. The function returns zero in
- case the operation was successful, a non-zero value otherwise. */
-int
-fegetexceptflag (fexcept_t *flagp, int excepts)
-{
- unsigned short sw;
- unsigned int mxcsr = 0;
-
- if (excepts & ~FE_ALL_EXCEPT)
- return EINVAL;
-
- /* Get status registers. */
- __asm__ volatile ("fnstsw %0" : "=m" (sw) : );
- if (use_sse)
- __asm__ volatile ("stmxcsr %0" : "=m" (mxcsr) : );
-
- /* Mask undesired bits out and set result struct. */
- flagp->_fpu_exceptions = (sw & excepts);
- flagp->_sse_exceptions = (mxcsr & excepts);
-
- return 0;
-}
-
-/* This function restores the flags for the exceptions indicated by
- excepts to the values stored in the variable pointed to by flagp. */
-int
-fesetexceptflag (const fexcept_t *flagp, int excepts)
-{
- fenv_t fenv;
-
- if (excepts & ~FE_ALL_EXCEPT)
- return EINVAL;
-
- /* Need to save/restore whole environment to modify status word. */
- fegetenv (&fenv);
-
- /* Set/Clear desired exception bits. */
- fenv._fpu._fpu_sw &= ~excepts;
- fenv._fpu._fpu_sw |= (excepts & flagp->_fpu_exceptions);
- fenv._sse_mxcsr &= ~excepts;
- fenv._sse_mxcsr |= (excepts & flagp->_sse_exceptions);
-
- /* Set back into FPU state. */
- return fesetenv (&fenv);
-}
-
-/* Returns the currently selected rounding mode, represented by one of the
- values of the defined rounding mode macros. */
-int
-fegetround (void)
-{
- unsigned short cw;
-
- /* Get control word. We assume SSE and x87 stay in sync. */
- __asm__ volatile ("fnstcw %0" : "=m" (cw) : );
-
- return (cw & FE_CW_ROUND_MASK) >> FE_CW_ROUND_SHIFT;
-}
-
-/* Changes the currently selected rounding mode to round. If round does
- not correspond to one of the supported rounding modes nothing is changed.
- fesetround returns zero if it changed the rounding mode, a nonzero value
- if the mode is not supported. */
-int
-fesetround (int round)
-{
- unsigned short cw;
- unsigned int mxcsr = 0;
-
- /* Will succeed for any valid value of the input parameter. */
- if (round < FE_TONEAREST || round > FE_TOWARDZERO)
- return EINVAL;
-
- /* Get control words. */
- __asm__ volatile ("fnstcw %0" : "=m" (cw) : );
- if (use_sse)
- __asm__ volatile ("stmxcsr %0" : "=m" (mxcsr) : );
-
- /* Twiddle bits. */
- cw &= ~FE_CW_ROUND_MASK;
- cw |= (round << FE_CW_ROUND_SHIFT);
- mxcsr &= ~FE_MXCSR_ROUND_MASK;
- mxcsr |= (round << FE_MXCSR_ROUND_SHIFT);
-
- /* Set back into FPU state. */
- __asm__ volatile ("fldcw %0" :: "m" (cw));
- if (use_sse)
- __asm__ volatile ("ldmxcsr %0" :: "m" (mxcsr));
-
- /* Indicate success. */
- return 0;
-}
-
-/* Returns the currently selected precision, represented by one of the
- values of the defined precision macros. */
-int
-fegetprec (void)
-{
- unsigned short cw;
-
- /* Get control word. */
- __asm__ volatile ("fnstcw %0" : "=m" (cw) : );
-
- return (cw & FE_CW_PREC_MASK) >> FE_CW_PREC_SHIFT;
-}
-
-/* Changes the currently selected precision to prec. If prec does not
- correspond to one of the supported rounding modes nothing is changed.
- fesetprec returns zero if it changed the precision, or a nonzero value
- if the mode is not supported. */
-int
-fesetprec (int prec)
-{
- unsigned short cw;
-
- /* Will succeed for any valid value of the input parameter. */
- if (prec < FE_SINGLEPREC || prec > FE_EXTENDEDPREC)
- return EINVAL;
-
- /* Get control word. */
- __asm__ volatile ("fnstcw %0" : "=m" (cw) : );
-
- /* Twiddle bits. */
- cw &= ~FE_CW_PREC_MASK;
- cw |= (prec << FE_CW_PREC_SHIFT);
-
- /* Set back into FPU state. */
- __asm__ volatile ("fldcw %0" :: "m" (cw));
-
- /* Indicate success. */
- return 0;
-}
-
-/* Set up the FPU and SSE environment at the start of execution. */
-void
-_feinitialise (void)
-{
- unsigned int edx, eax, mxcsr;
-
- /* Check for presence of SSE: invoke CPUID #1, check EDX bit 25. */
- eax = 1;
- __asm__ volatile ("cpuid" : "=d" (edx), "+a" (eax) :: "%ecx", "%ebx");
- /* If this flag isn't set we'll avoid trying to execute any SSE. */
- if ((edx & (1 << 25)) != 0)
- use_sse = true;
-
- /* Reset FPU: extended prec, all exceptions cleared and masked off. */
- __asm__ volatile ("fninit");
- /* The default cw value, 0x37f, is rounding mode zero. The MXCSR has
- no precision control, so the only thing to do is set the exception
- mask bits. */
- mxcsr = FE_ALL_EXCEPT << FE_SSE_EXCEPT_MASK_SHIFT;
- if (use_sse)
- __asm__ volatile ("ldmxcsr %0" :: "m" (mxcsr));
-
- /* Setup unmasked environment. */
- feenableexcept (FE_ALL_EXCEPT);
- fegetenv (&fe_nomask_env);
-
- /* Restore default exception masking (all masked). */
- fedisableexcept (FE_ALL_EXCEPT);
-
- /* Finally cache state as default environment. */
- fegetenv (&fe_dfl_env);
-}
-
diff --git a/winsup/cygwin/fhandler.cc b/winsup/cygwin/fhandler.cc
deleted file mode 100644
index 8444d4abc..000000000
--- a/winsup/cygwin/fhandler.cc
+++ /dev/null
@@ -1,2122 +0,0 @@
-/* fhandler.cc. See console.cc for fhandler_console functions.
-
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include <unistd.h>
-#include <stdlib.h>
-#include <sys/uio.h>
-#include <sys/acl.h>
-#include <sys/param.h>
-#include "cygerrno.h"
-#include "perprocess.h"
-#include "security.h"
-#include "cygwin/version.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "pinfo.h"
-#include <assert.h>
-#include <winioctl.h>
-#include "ntdll.h"
-#include "cygtls.h"
-#include "sigproc.h"
-#include "shared_info.h"
-#include <asm/socket.h>
-#include "cygwait.h"
-
-#define MAX_OVERLAPPED_WRITE_LEN (64 * 1024 * 1024)
-#define MIN_OVERLAPPED_WRITE_LEN (1 * 1024 * 1024)
-
-static const int CHUNK_SIZE = 1024; /* Used for crlf conversions */
-
-struct __cygwin_perfile *perfile_table;
-
-HANDLE NO_COPY fhandler_base_overlapped::asio_done;
-LONG NO_COPY fhandler_base_overlapped::asio_close_counter;
-
-void
-fhandler_base::reset (const fhandler_base *from)
-{
- pc << from->pc;
- rabuf = NULL;
- ralen = 0;
- raixget = 0;
- raixput = 0;
- rabuflen = 0;
- _refcnt = 0;
-}
-
-int
-fhandler_base::puts_readahead (const char *s, size_t len)
-{
- int success = 1;
- while ((len == (size_t) -1 ? *s : len--)
- && (success = put_readahead (*s++) > 0))
- continue;
- return success;
-}
-
-int
-fhandler_base::put_readahead (char value)
-{
- char *newrabuf;
- if (raixput < rabuflen)
- /* Nothing to do */;
- else if ((newrabuf = (char *) realloc (rabuf, rabuflen += 32)))
- rabuf = newrabuf;
- else
- return 0;
-
- rabuf[raixput++] = value;
- ralen++;
- return 1;
-}
-
-int
-fhandler_base::get_readahead ()
-{
- int chret = -1;
- if (raixget < ralen)
- chret = ((unsigned char) rabuf[raixget++]) & 0xff;
- /* FIXME - not thread safe */
- if (raixget >= ralen)
- raixget = raixput = ralen = 0;
- return chret;
-}
-
-int
-fhandler_base::peek_readahead (int queryput)
-{
- int chret = -1;
- if (!queryput && raixget < ralen)
- chret = ((unsigned char) rabuf[raixget]) & 0xff;
- else if (queryput && raixput > 0)
- chret = ((unsigned char) rabuf[raixput - 1]) & 0xff;
- return chret;
-}
-
-void
-fhandler_base::set_readahead_valid (int val, int ch)
-{
- if (!val)
- ralen = raixget = raixput = 0;
- if (ch != -1)
- put_readahead (ch);
-}
-
-int
-fhandler_base::eat_readahead (int n)
-{
- int oralen = ralen;
- if (n < 0)
- n = ralen;
- if (n > 0 && ralen)
- {
- if ((int) (ralen -= n) < 0)
- ralen = 0;
-
- if (raixget >= ralen)
- raixget = raixput = ralen = 0;
- else if (raixput > ralen)
- raixput = ralen;
- }
-
- return oralen;
-}
-
-int
-fhandler_base::get_readahead_into_buffer (char *buf, size_t buflen)
-{
- int ch;
- int copied_chars = 0;
-
- while (buflen)
- if ((ch = get_readahead ()) < 0)
- break;
- else
- {
- buf[copied_chars++] = (unsigned char)(ch & 0xff);
- buflen--;
- }
-
- return copied_chars;
-}
-
-/* Record the file name. and name hash */
-void
-fhandler_base::set_name (path_conv &in_pc)
-{
- pc << in_pc;
-}
-
-char *fhandler_base::get_proc_fd_name (char *buf)
-{
- if (get_name ())
- return strcpy (buf, get_name ());
- if (dev ().name)
- return strcpy (buf, dev ().name);
- return strcpy (buf, "");
-}
-
-/* Detect if we are sitting at EOF for conditions where Windows
- returns an error but UNIX doesn't. */
-int __stdcall
-is_at_eof (HANDLE h)
-{
- IO_STATUS_BLOCK io;
- FILE_POSITION_INFORMATION fpi;
- FILE_STANDARD_INFORMATION fsi;
-
- if (NT_SUCCESS (NtQueryInformationFile (h, &io, &fsi, sizeof fsi,
- FileStandardInformation))
- && NT_SUCCESS (NtQueryInformationFile (h, &io, &fpi, sizeof fpi,
- FilePositionInformation))
- && fsi.EndOfFile.QuadPart == fpi.CurrentByteOffset.QuadPart)
- return 1;
- return 0;
-}
-
-void
-fhandler_base::set_flags (int flags, int supplied_bin)
-{
- int bin;
- int fmode;
- debug_printf ("flags %y, supplied_bin %y", flags, supplied_bin);
- if ((bin = flags & (O_BINARY | O_TEXT)))
- debug_printf ("O_TEXT/O_BINARY set in flags %y", bin);
- else if (rbinset () && wbinset ())
- bin = rbinary () ? O_BINARY : O_TEXT; // FIXME: Not quite right
- else if ((fmode = get_default_fmode (flags)) & O_BINARY)
- bin = O_BINARY;
- else if (fmode & O_TEXT)
- bin = O_TEXT;
- else if (supplied_bin)
- bin = supplied_bin;
- else
- bin = wbinary () || rbinary () ? O_BINARY : O_TEXT;
-
- openflags = flags | bin;
-
- bin &= O_BINARY;
- rbinary (bin ? true : false);
- wbinary (bin ? true : false);
- syscall_printf ("filemode set to %s", bin ? "binary" : "text");
-}
-
-/* Normal file i/o handlers. */
-
-/* Cover function to ReadFile to achieve (as much as possible) Posix style
- semantics and use of errno. */
-void __reg3
-fhandler_base::raw_read (void *ptr, size_t& len)
-{
- NTSTATUS status;
- IO_STATUS_BLOCK io;
- int try_noreserve = 1;
-
-retry:
- status = NtReadFile (get_handle (), NULL, NULL, NULL, &io, ptr, len,
- NULL, NULL);
- if (NT_SUCCESS (status))
- len = io.Information;
- else
- {
- /* Some errors are not really errors. Detect such cases here. */
- switch (status)
- {
- case STATUS_END_OF_FILE:
- case STATUS_PIPE_BROKEN:
- /* This is really EOF. */
- len = 0;
- break;
- case STATUS_MORE_ENTRIES:
- case STATUS_BUFFER_OVERFLOW:
- /* `io.Information' is supposedly valid. */
- len = io.Information;
- break;
- case STATUS_ACCESS_VIOLATION:
- if (is_at_eof (get_handle ()))
- {
- len = 0;
- break;
- }
- if (try_noreserve)
- {
- try_noreserve = 0;
- switch (mmap_is_attached_or_noreserve (ptr, len))
- {
- case MMAP_NORESERVE_COMMITED:
- goto retry;
- case MMAP_RAISE_SIGBUS:
- raise(SIGBUS);
- case MMAP_NONE:
- break;
- }
- }
- /*FALLTHRU*/
- case STATUS_INVALID_DEVICE_REQUEST:
- case STATUS_INVALID_PARAMETER:
- case STATUS_INVALID_HANDLE:
- if (pc.isdir ())
- {
- set_errno (EISDIR);
- len = (size_t) -1;
- break;
- }
- default:
- __seterrno_from_nt_status (status);
- len = (size_t) -1;
- break;
- }
- }
-}
-
-/* Cover function to WriteFile to provide Posix interface and semantics
- (as much as possible). */
-ssize_t __reg3
-fhandler_base::raw_write (const void *ptr, size_t len)
-{
- NTSTATUS status;
- IO_STATUS_BLOCK io;
- static _RDATA LARGE_INTEGER off_current =
- { QuadPart:FILE_USE_FILE_POINTER_POSITION };
- static _RDATA LARGE_INTEGER off_append =
- { QuadPart:FILE_WRITE_TO_END_OF_FILE };
-
- status = NtWriteFile (get_output_handle (), NULL, NULL, NULL, &io,
- (PVOID) ptr, len,
- (get_flags () & O_APPEND) ? &off_append : &off_current,
- NULL);
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- if (get_errno () == EPIPE)
- raise (SIGPIPE);
- return -1;
- }
- return io.Information;
-}
-
-int
-fhandler_base::get_default_fmode (int flags)
-{
- int fmode = __fmode;
- if (perfile_table)
- {
- size_t nlen = strlen (get_name ());
- unsigned accflags = (flags & O_ACCMODE);
- for (__cygwin_perfile *pf = perfile_table; pf->name; pf++)
- if (!*pf->name && (pf->flags & O_ACCMODE) == accflags)
- {
- fmode = pf->flags & ~O_ACCMODE;
- break;
- }
- else
- {
- size_t pflen = strlen (pf->name);
- const char *stem = get_name () + nlen - pflen;
- if (pflen > nlen || (stem != get_name () && !isdirsep (stem[-1])))
- continue;
- else if ((pf->flags & O_ACCMODE) == accflags
- && pathmatch (stem, pf->name, !!pc.objcaseinsensitive ()))
- {
- fmode = pf->flags & ~O_ACCMODE;
- break;
- }
- }
- }
- return fmode;
-}
-
-bool
-fhandler_base::device_access_denied (int flags)
-{
- int mode = 0;
-
- if (flags & O_RDWR)
- mode |= R_OK | W_OK;
- if (flags & (O_WRONLY | O_APPEND))
- mode |= W_OK;
- if (!mode)
- mode |= R_OK;
-
- return fhaccess (mode, true);
-}
-
-int
-fhandler_base::fhaccess (int flags, bool effective)
-{
- int res = -1;
- if (error ())
- {
- set_errno (error ());
- goto done;
- }
-
- if (!exists ())
- {
- set_errno (ENOENT);
- goto done;
- }
-
- if (!(flags & (R_OK | W_OK | X_OK)))
- return 0;
-
- if (is_fs_special ())
- /* short circuit */;
- else if (has_attribute (FILE_ATTRIBUTE_READONLY) && (flags & W_OK)
- && !pc.isdir ())
- goto eaccess_done;
- else if (has_acls ())
- {
- res = check_file_access (pc, flags, effective);
- goto done;
- }
- else if (get_device () == FH_REGISTRY && open (O_RDONLY, 0) && get_handle ())
- {
- res = check_registry_access (get_handle (), flags, effective);
- close ();
- return res;
- }
-
- struct stat st;
- if (fstat (&st))
- goto done;
-
- if (flags & R_OK)
- {
- if (st.st_uid == (effective ? myself->uid : cygheap->user.real_uid))
- {
- if (!(st.st_mode & S_IRUSR))
- goto eaccess_done;
- }
- else if (st.st_gid == (effective ? myself->gid : cygheap->user.real_gid))
- {
- if (!(st.st_mode & S_IRGRP))
- goto eaccess_done;
- }
- else if (!(st.st_mode & S_IROTH))
- goto eaccess_done;
- }
-
- if (flags & W_OK)
- {
- if (st.st_uid == (effective ? myself->uid : cygheap->user.real_uid))
- {
- if (!(st.st_mode & S_IWUSR))
- goto eaccess_done;
- }
- else if (st.st_gid == (effective ? myself->gid : cygheap->user.real_gid))
- {
- if (!(st.st_mode & S_IWGRP))
- goto eaccess_done;
- }
- else if (!(st.st_mode & S_IWOTH))
- goto eaccess_done;
- }
-
- if (flags & X_OK)
- {
- if (st.st_uid == (effective ? myself->uid : cygheap->user.real_uid))
- {
- if (!(st.st_mode & S_IXUSR))
- goto eaccess_done;
- }
- else if (st.st_gid == (effective ? myself->gid : cygheap->user.real_gid))
- {
- if (!(st.st_mode & S_IXGRP))
- goto eaccess_done;
- }
- else if (!(st.st_mode & S_IXOTH))
- goto eaccess_done;
- }
-
- res = 0;
- goto done;
-
-eaccess_done:
- set_errno (EACCES);
-done:
- if (!res && (flags & W_OK) && get_device () == FH_FS
- && (pc.fs_flags () & FILE_READ_ONLY_VOLUME))
- {
- set_errno (EROFS);
- res = -1;
- }
- debug_printf ("returning %d", res);
- return res;
-}
-
-int
-fhandler_base::open_with_arch (int flags, mode_t mode)
-{
- int res;
- if (!(res = (archetype && archetype->io_handle)
- || open (flags, (mode & 07777) & ~cygheap->umask)))
- {
- if (archetype)
- delete archetype;
- }
- else if (archetype)
- {
- if (!archetype->get_io_handle ())
- {
- copyto (archetype);
- archetype_usecount (1);
- archetype->archetype = NULL;
- usecount = 0;
- }
- else
- {
- char *name;
- /* Preserve any name (like /dev/tty) derived from build_fh_pc. */
- if (!get_name ())
- name = NULL;
- else
- {
- name = (char *) alloca (strlen (get_name ()) + 1);
- strcpy (name, get_name ());
- }
- fhandler_base *arch = archetype;
- archetype->copyto (this);
- if (name)
- set_name (name);
- archetype = arch;
- archetype_usecount (1);
- usecount = 0;
- }
- open_setup (flags);
- }
-
- close_on_exec (flags & O_CLOEXEC);
- /* A unique ID is necessary to recognize fhandler entries which are
- duplicated by dup(2) or fork(2). This is used in BSD flock calls
- to identify the descriptor. Skip nohandle fhandlers since advisory
- locking is unusable for those anyway. */
- if (!nohandle ())
- set_unique_id ();
- return res;
-}
-
-/* Open a fake handle to \\Device\\Null. This is a helper function for
- fhandlers which just need some handle to keep track of BSD flock locks. */
-int
-fhandler_base::open_null (int flags)
-{
- int res = 0;
- HANDLE fh;
- OBJECT_ATTRIBUTES attr;
- IO_STATUS_BLOCK io;
- NTSTATUS status;
-
- InitializeObjectAttributes (&attr, &ro_u_null, OBJ_CASE_INSENSITIVE |
- ((flags & O_CLOEXEC) ? 0 : OBJ_INHERIT),
- NULL, NULL);
- status = NtCreateFile (&fh, GENERIC_READ | SYNCHRONIZE, &attr, &io, NULL, 0,
- FILE_SHARE_READ | FILE_SHARE_WRITE, FILE_OPEN,
- FILE_SYNCHRONOUS_IO_NONALERT, NULL, 0);
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- goto done;
- }
- set_io_handle (fh);
- set_flags (flags, pc.binmode ());
- res = 1;
- set_open_status ();
-done:
- debug_printf ("%y = NtCreateFile (%p, ... %S ...)", status, fh, &ro_u_null);
- syscall_printf ("%d = fhandler_base::open_null (%y)", res, flags);
- return res;
-}
-
-/* Open system call handler function. */
-int
-fhandler_base::open (int flags, mode_t mode)
-{
- int res = 0;
- HANDLE fh;
- ULONG file_attributes = 0;
- ULONG shared = (get_major () == DEV_TAPE_MAJOR ? 0 : FILE_SHARE_VALID_FLAGS);
- ULONG create_disposition;
- OBJECT_ATTRIBUTES attr;
- IO_STATUS_BLOCK io;
- NTSTATUS status;
- PFILE_FULL_EA_INFORMATION p = NULL;
- ULONG plen = 0;
-
- syscall_printf ("(%S, %y)", pc.get_nt_native_path (), flags);
-
- pc.get_object_attr (attr, *sec_none_cloexec (flags));
-
- options = FILE_OPEN_FOR_BACKUP_INTENT;
- switch (query_open ())
- {
- case query_read_control:
- access = READ_CONTROL;
- break;
- case query_read_attributes:
- access = READ_CONTROL | FILE_READ_ATTRIBUTES;
- break;
- case query_write_control:
- access = READ_CONTROL | WRITE_OWNER | WRITE_DAC | FILE_WRITE_ATTRIBUTES;
- break;
- case query_write_dac:
- access = READ_CONTROL | WRITE_DAC | FILE_WRITE_ATTRIBUTES;
- break;
- case query_write_attributes:
- access = READ_CONTROL | FILE_WRITE_ATTRIBUTES;
- break;
- default:
- switch (flags & O_ACCMODE)
- {
- case O_RDONLY:
- access = GENERIC_READ;
- break;
- case O_WRONLY:
- access = GENERIC_WRITE | READ_CONTROL | FILE_READ_ATTRIBUTES;
- break;
- default:
- access = GENERIC_READ | GENERIC_WRITE;
- break;
- }
- if (flags & O_SYNC)
- options |= FILE_WRITE_THROUGH;
- if (flags & O_DIRECT)
- options |= FILE_NO_INTERMEDIATE_BUFFERING;
- if (get_major () != DEV_SERIAL_MAJOR && get_major () != DEV_TAPE_MAJOR)
- {
- options |= FILE_SYNCHRONOUS_IO_NONALERT;
- access |= SYNCHRONIZE;
- }
- break;
- }
-
- /* Don't use the FILE_OVERWRITE{_IF} flags here. See below for an
- explanation, why that's not such a good idea. */
- if ((flags & O_EXCL) && (flags & O_CREAT))
- create_disposition = FILE_CREATE;
- else
- create_disposition = (flags & O_CREAT) ? FILE_OPEN_IF : FILE_OPEN;
-
- if (get_device () == FH_FS)
- {
- /* Add the reparse point flag to native symlinks, otherwise we open the
- target, not the symlink. This would break lstat. */
- if (pc.is_rep_symlink ())
- options |= FILE_OPEN_REPARSE_POINT;
-
- if (pc.fs_is_nfs ())
- {
- /* Make sure we can read EAs of files on an NFS share. Also make
- sure that we're going to act on the file itself, even if it's a
- a symlink. */
- access |= FILE_READ_EA;
- if (query_open ())
- {
- if (query_open () >= query_write_control)
- access |= FILE_WRITE_EA;
- plen = sizeof nfs_aol_ffei;
- p = (PFILE_FULL_EA_INFORMATION) &nfs_aol_ffei;
- }
- }
-
- /* Trying to overwrite an already existing file with FILE_ATTRIBUTE_HIDDEN
- and/or FILE_ATTRIBUTE_SYSTEM attribute set, NtCreateFile fails with
- STATUS_ACCESS_DENIED. Per MSDN you have to create the file with the
- same attributes as already specified for the file. */
- if (create_disposition == FILE_CREATE
- && has_attribute (FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM))
- file_attributes |= pc.file_attributes ();
-
- if (flags & O_CREAT)
- {
- file_attributes |= FILE_ATTRIBUTE_NORMAL;
-
- if (pc.fs_is_nfs ())
- {
- /* When creating a file on an NFS share, we have to set the
- file mode by writing a NFS fattr3 structure with the
- correct mode bits set. */
- access |= FILE_WRITE_EA;
- plen = sizeof (FILE_FULL_EA_INFORMATION) + sizeof (NFS_V3_ATTR)
- + sizeof (fattr3);
- p = (PFILE_FULL_EA_INFORMATION) alloca (plen);
- p->NextEntryOffset = 0;
- p->Flags = 0;
- p->EaNameLength = sizeof (NFS_V3_ATTR) - 1;
- p->EaValueLength = sizeof (fattr3);
- strcpy (p->EaName, NFS_V3_ATTR);
- fattr3 *nfs_attr = (fattr3 *) (p->EaName
- + p->EaNameLength + 1);
- memset (nfs_attr, 0, sizeof (fattr3));
- nfs_attr->type = NF3REG;
- nfs_attr->mode = mode;
- }
- else if (!has_acls () && !(mode & (S_IWUSR | S_IWGRP | S_IWOTH)))
- /* If mode has no write bits set, and ACLs are not used, we set
- the DOS R/O attribute. */
- file_attributes |= FILE_ATTRIBUTE_READONLY;
- /* The file attributes are needed for later use in, e.g. fchmod. */
- pc.file_attributes (file_attributes);
- /* Never set the WRITE_DAC flag here. Calls to fstat may return
- wrong st_ctime information after calls to fchmod, fchown, etc
- because Windows only guarantees the update of metadata when
- the handle is closed or flushed. However, flushing the file
- on every fstat to enforce POSIXy stat behaviour is excessivly
- slow, compared to an extra open/close to change the file's
- security descriptor. */
- }
- }
-
- status = NtCreateFile (&fh, access, &attr, &io, NULL, file_attributes, shared,
- create_disposition, options, p, plen);
- if (!NT_SUCCESS (status))
- {
- /* Trying to create a directory should return EISDIR, not ENOENT. */
- PUNICODE_STRING upath = pc.get_nt_native_path ();
- if (status == STATUS_OBJECT_NAME_INVALID && (flags & O_CREAT)
- && upath->Buffer[upath->Length / sizeof (WCHAR) - 1] == '\\')
- set_errno (EISDIR);
- else
- __seterrno_from_nt_status (status);
- if (!nohandle ())
- goto done;
- }
-
- /* Always create files using a NULL SD. Create correct permission bits
- afterwards, maintaining the owner and group information just like chmod.
-
- This is done for two reasons.
-
- On Windows filesystems we need to create the file with default
- permissions to allow inheriting ACEs. When providing an explicit DACL
- in calls to [Nt]CreateFile, the created file will not inherit default
- permissions from the parent object. This breaks not only Windows
- inheritance, but also POSIX ACL inheritance.
-
- Another reason to do this are remote shares. Files on a remote share
- are created as the user used for authentication. In a domain that's
- usually the user you're logged in as. Outside of a domain you're
- authenticating using a local user account on the sharing machine.
- If the SIDs of the client machine are used, that's entirely
- unexpected behaviour. Doing it like we do here creates the expected SD
- in a domain as well as on standalone servers.
- This is the result of a discussion on the samba-technical list, starting at
- http://lists.samba.org/archive/samba-technical/2008-July/060247.html */
- if (io.Information == FILE_CREATED && has_acls ())
- set_file_attribute (fh, pc, ILLEGAL_UID, ILLEGAL_GID, S_JUSTCREATED | mode);
-
- /* If you O_TRUNC a file on Linux, the data is truncated, but the EAs are
- preserved. If you open a file on Windows with FILE_OVERWRITE{_IF} or
- FILE_SUPERSEDE, all streams are truncated, including the EAs. So we don't
- use the FILE_OVERWRITE{_IF} flags, but instead just open the file and set
- the size of the data stream explicitely to 0. Apart from being more Linux
- compatible, this implementation has the pleasant side-effect to be more
- than 5% faster than using FILE_OVERWRITE{_IF} (tested on W7 32 bit). */
- if ((flags & O_TRUNC)
- && (flags & O_ACCMODE) != O_RDONLY
- && io.Information != FILE_CREATED
- && get_device () == FH_FS)
- {
- FILE_END_OF_FILE_INFORMATION feofi = { EndOfFile:{ QuadPart:0 } };
- status = NtSetInformationFile (fh, &io, &feofi, sizeof feofi,
- FileEndOfFileInformation);
- /* In theory, truncating the file should never fail, since the opened
- handle has FILE_WRITE_DATA permissions, which is all you need to
- be allowed to truncate a file. Better safe than sorry. */
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- NtClose (fh);
- goto done;
- }
- }
-
- set_io_handle (fh);
- set_flags (flags, pc.binmode ());
-
- res = 1;
- set_open_status ();
-done:
- debug_printf ("%y = NtCreateFile "
- "(%p, %y, %S, io, NULL, %y, %y, %y, %y, NULL, 0)",
- status, fh, access, pc.get_nt_native_path (), file_attributes,
- shared, create_disposition, options);
-
- syscall_printf ("%d = fhandler_base::open(%S, %y)",
- res, pc.get_nt_native_path (), flags);
- return res;
-}
-
-void
-fhandler_base::open_setup (int)
-{
-}
-
-/* states:
- open buffer in binary mode? Just do the read.
-
- open buffer in text mode? Scan buffer for control zs and handle
- the first one found. Then scan buffer, converting every \r\n into
- an \n. If last char is an \r, look ahead one more char, if \n then
- modify \r, if not, remember char.
-*/
-void __reg3
-fhandler_base::read (void *in_ptr, size_t& len)
-{
- char *ptr = (char *) in_ptr;
- ssize_t copied_chars = get_readahead_into_buffer (ptr, len);
-
- if (copied_chars || !len)
- {
- len = (size_t) copied_chars;
- goto out;
- }
-
- raw_read (ptr, len);
-
- if (rbinary () || (ssize_t) len <= 0)
- goto out;
-
- /* Scan buffer and turn \r\n into \n */
- char *src, *dst, *end;
- src = (char *) ptr;
- dst = (char *) ptr;
- end = src + len - 1;
-
- /* Read up to the last but one char - the last char needs special handling */
- while (src < end)
- {
- if (*src == '\r' && src[1] == '\n')
- src++;
- *dst++ = *src++;
- }
-
- /* If not beyond end and last char is a '\r' then read one more
- to see if we should translate this one too */
- if (src > end)
- /* nothing */;
- else if (*src != '\r')
- *dst++ = *src;
- else
- {
- char c1;
- size_t c1len = 1;
- raw_read (&c1, c1len);
- if (c1len <= 0)
- /* nothing */;
- else if (c1 == '\n')
- *dst++ = '\n';
- else
- {
- set_readahead_valid (1, c1);
- *dst++ = *src;
- }
- }
-
- len = dst - (char *) ptr;
-
-out:
- debug_printf ("returning %d, %s mode", len, rbinary () ? "binary" : "text");
-}
-
-ssize_t __stdcall
-fhandler_base::write (const void *ptr, size_t len)
-{
- int res;
-
- if (did_lseek ())
- {
- IO_STATUS_BLOCK io;
- FILE_POSITION_INFORMATION fpi;
- FILE_STANDARD_INFORMATION fsi;
-
- did_lseek (false); /* don't do it again */
-
- if (!(get_flags () & O_APPEND)
- && !has_attribute (FILE_ATTRIBUTE_SPARSE_FILE)
- && NT_SUCCESS (NtQueryInformationFile (get_output_handle (),
- &io, &fsi, sizeof fsi,
- FileStandardInformation))
- && NT_SUCCESS (NtQueryInformationFile (get_output_handle (),
- &io, &fpi, sizeof fpi,
- FilePositionInformation))
- && fpi.CurrentByteOffset.QuadPart
- >= fsi.EndOfFile.QuadPart + (128 * 1024))
- {
- /* If the file system supports sparse files and the application
- is writing after a long seek beyond EOF, convert the file to
- a sparse file. */
- NTSTATUS status;
- status = NtFsControlFile (get_output_handle (), NULL, NULL, NULL,
- &io, FSCTL_SET_SPARSE, NULL, 0, NULL, 0);
- if (NT_SUCCESS (status))
- pc.file_attributes (pc.file_attributes ()
- | FILE_ATTRIBUTE_SPARSE_FILE);
- debug_printf ("%y = NtFsControlFile(%S, FSCTL_SET_SPARSE)",
- status, pc.get_nt_native_path ());
- }
- }
-
- if (wbinary ())
- res = raw_write (ptr, len);
- else
- {
- debug_printf ("text write");
- /* This is the Microsoft/DJGPP way. Still not ideal, but it's
- compatible.
- Modified slightly by CGF 2000-10-07 */
-
- int left_in_data = len;
- char *data = (char *)ptr;
- res = 0;
-
- while (left_in_data > 0)
- {
- char buf[CHUNK_SIZE + 1], *buf_ptr = buf;
- int left_in_buf = CHUNK_SIZE;
-
- while (left_in_buf > 0 && left_in_data > 0)
- {
- char ch = *data++;
- if (ch == '\n')
- {
- *buf_ptr++ = '\r';
- left_in_buf--;
- }
- *buf_ptr++ = ch;
- left_in_buf--;
- left_in_data--;
- if (left_in_data > 0 && ch == '\r' && *data == '\n')
- {
- *buf_ptr++ = *data++;
- left_in_buf--;
- left_in_data--;
- }
- }
-
- /* We've got a buffer-full, or we're out of data. Write it out */
- int nbytes;
- int want = buf_ptr - buf;
- if ((nbytes = raw_write (buf, want)) == want)
- {
- /* Keep track of how much written not counting additional \r's */
- res = data - (char *)ptr;
- continue;
- }
-
- if (nbytes == -1)
- res = -1; /* Error */
- else
- res += nbytes; /* Partial write. Return total bytes written. */
- break; /* All done */
- }
- }
-
- return res;
-}
-
-ssize_t __stdcall
-fhandler_base::readv (const struct iovec *const iov, const int iovcnt,
- ssize_t tot)
-{
- assert (iov);
- assert (iovcnt >= 1);
-
- size_t len = tot;
- if (iovcnt == 1)
- {
- len = iov->iov_len;
- read (iov->iov_base, len);
- return len;
- }
-
- if (tot == -1) // i.e. if not pre-calculated by the caller.
- {
- len = 0;
- const struct iovec *iovptr = iov + iovcnt;
- do
- {
- iovptr -= 1;
- len += iovptr->iov_len;
- }
- while (iovptr != iov);
- }
-
- if (!len)
- return 0;
-
- char *buf = (char *) malloc (len);
-
- if (!buf)
- {
- set_errno (ENOMEM);
- return -1;
- }
-
- read (buf, len);
- ssize_t nbytes = (ssize_t) len;
-
- const struct iovec *iovptr = iov;
-
- char *p = buf;
- while (nbytes > 0)
- {
- const int frag = MIN (nbytes, (ssize_t) iovptr->iov_len);
- memcpy (iovptr->iov_base, p, frag);
- p += frag;
- iovptr += 1;
- nbytes -= frag;
- }
-
- free (buf);
- return len;
-}
-
-ssize_t __stdcall
-fhandler_base::writev (const struct iovec *const iov, const int iovcnt,
- ssize_t tot)
-{
- assert (iov);
- assert (iovcnt >= 1);
-
- if (iovcnt == 1)
- return write (iov->iov_base, iov->iov_len);
-
- if (tot == -1) // i.e. if not pre-calculated by the caller.
- {
- tot = 0;
- const struct iovec *iovptr = iov + iovcnt;
- do
- {
- iovptr -= 1;
- tot += iovptr->iov_len;
- }
- while (iovptr != iov);
- }
-
- assert (tot >= 0);
-
- if (tot == 0)
- return 0;
-
- char *const buf = (char *) malloc (tot);
-
- if (!buf)
- {
- set_errno (ENOMEM);
- return -1;
- }
-
- char *bufptr = buf;
- const struct iovec *iovptr = iov;
- int nbytes = tot;
-
- while (nbytes != 0)
- {
- const int frag = MIN (nbytes, (ssize_t) iovptr->iov_len);
- memcpy (bufptr, iovptr->iov_base, frag);
- bufptr += frag;
- iovptr += 1;
- nbytes -= frag;
- }
- ssize_t ret = write (buf, tot);
- free (buf);
- return ret;
-}
-
-off_t
-fhandler_base::lseek (off_t offset, int whence)
-{
- NTSTATUS status;
- IO_STATUS_BLOCK io;
- FILE_POSITION_INFORMATION fpi;
- FILE_STANDARD_INFORMATION fsi;
-
- /* Seeks on text files is tough, we rewind and read till we get to the
- right place. */
-
- if (whence != SEEK_CUR || offset != 0)
- {
- if (whence == SEEK_CUR)
- offset -= ralen - raixget;
- set_readahead_valid (0);
- }
-
- switch (whence)
- {
- case SEEK_SET:
- fpi.CurrentByteOffset.QuadPart = offset;
- break;
- case SEEK_CUR:
- status = NtQueryInformationFile (get_handle (), &io, &fpi, sizeof fpi,
- FilePositionInformation);
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- return -1;
- }
- fpi.CurrentByteOffset.QuadPart += offset;
- break;
- default: /* SEEK_END */
- status = NtQueryInformationFile (get_handle (), &io, &fsi, sizeof fsi,
- FileStandardInformation);
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- return -1;
- }
- fpi.CurrentByteOffset.QuadPart = fsi.EndOfFile.QuadPart + offset;
- break;
- }
-
- debug_printf ("setting file pointer to %U", fpi.CurrentByteOffset.QuadPart);
- status = NtSetInformationFile (get_handle (), &io, &fpi, sizeof fpi,
- FilePositionInformation);
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- return -1;
- }
- off_t res = fpi.CurrentByteOffset.QuadPart;
-
- /* When next we write(), we will check to see if *this* seek went beyond
- the end of the file and if so, potentially sparsify the file. */
- if (pc.support_sparse ())
- did_lseek (true);
-
- /* If this was a SEEK_CUR with offset 0, we still might have
- readahead that we have to take into account when calculating
- the actual position for the application. */
- if (whence == SEEK_CUR)
- res -= ralen - raixget;
-
- return res;
-}
-
-ssize_t __reg3
-fhandler_base::pread (void *, size_t, off_t)
-{
- set_errno (ESPIPE);
- return -1;
-}
-
-ssize_t __reg3
-fhandler_base::pwrite (void *, size_t, off_t)
-{
- set_errno (ESPIPE);
- return -1;
-}
-
-int
-fhandler_base::close_with_arch ()
-{
- int res;
- fhandler_base *fh;
- if (usecount)
- {
- /* This was the archetype itself. */
- if (--usecount)
- {
- debug_printf ("not closing passed in archetype %p, usecount %d", archetype, usecount);
- return 0;
- }
- debug_printf ("closing passed in archetype %p, usecount %d", archetype, usecount);
- /* Set archetype temporarily so that it will eventually be deleted. */
- archetype = fh = this;
- }
- else if (!archetype)
- fh = this;
- else if (archetype_usecount (-1) == 0)
- {
- debug_printf ("closing archetype");
- fh = archetype;
- }
- else
- {
- debug_printf ("not closing archetype");
- return 0;
- }
-
- cleanup ();
- res = fh->close ();
- if (archetype)
- {
- cygheap->fdtab.delete_archetype (archetype);
- archetype = NULL;
- }
- return res;
-}
-
-void
-fhandler_base::cleanup ()
-{
- /* Delete all POSIX locks on the file. Delete all flock locks on the
- file if this is the last reference to this file. */
- if (unique_id)
- del_my_locks (on_close);
-}
-
-int
-fhandler_base::close ()
-{
- int res = -1;
-
- syscall_printf ("closing '%s' handle %p", get_name (), get_handle ());
- if (nohandle () || CloseHandle (get_handle ()))
- res = 0;
- else
- {
- paranoid_printf ("CloseHandle failed, %E");
- __seterrno ();
- }
- return res;
-}
-
-DWORD WINAPI
-flush_async_io (void *arg)
-{
- fhandler_base_overlapped *fh = (fhandler_base_overlapped *) arg;
- debug_only_printf ("waiting for write I/O for %s", fh->get_name ());
- DWORD nbytes;
- bool res = GetOverlappedResult (fh->get_output_handle (),
- fh->get_overlapped (), &nbytes, true);
- debug_printf ("finished waiting for I/O from %s, res %d", fh->get_name (),
- res);
- fh->close ();
- delete fh;
-
- InterlockedDecrement (&fhandler_base_overlapped::asio_close_counter);
- SetEvent (fhandler_base_overlapped::asio_done);
-
- _my_tls._ctinfo->auto_release ();
- return 0;
-}
-
-void
-fhandler_base_overlapped::flush_all_async_io ()
-{
- while (asio_close_counter > 0)
- if (WaitForSingleObject (asio_done, INFINITE) != WAIT_OBJECT_0)
- {
- system_printf ("WaitForSingleObject failed, possible data loss in pipe, %E");
- break;
- }
- asio_close_counter = 0;
- if (asio_done)
- CloseHandle (asio_done);
-}
-
-/* Start a thread to handle closing of overlapped asynchronous I/O since
- Windows amazingly does not seem to always flush I/O on close. */
-void
-fhandler_base_overlapped::check_later ()
-{
- set_close_on_exec (true);
- char buf[MAX_PATH];
- if (!asio_done
- && !(asio_done = CreateEvent (&sec_none_nih, false, false,
- shared_name (buf, "asio",
- GetCurrentProcessId ()))))
- api_fatal ("CreateEvent failed, %E");
-
- InterlockedIncrement (&asio_close_counter);
- if (!new cygthread(flush_async_io, this, "flasio"))
- api_fatal ("couldn't create a thread to track async I/O, %E");
- debug_printf ("started thread to handle asynchronous closing for %s", get_name ());
-}
-
-int
-fhandler_base_overlapped::close ()
-{
- int res;
- int writer = (get_access () & GENERIC_WRITE);
- /* Need to treat non-blocking I/O specially because Windows appears to
- be brain-dead */
- if (writer && is_nonblocking () && has_ongoing_io ())
- {
- clone (HEAP_3_FHANDLER)->check_later ();
- res = 0;
- }
- else
- {
- /* Cancelling seems to be necessary for cases where a reader is
- still executing when a signal handler performs a close. */
- if (!writer)
- CancelIo (get_io_handle ());
- destroy_overlapped ();
- res = fhandler_base::close ();
- }
- return res;
-}
-
-int
-fhandler_base::ioctl (unsigned int cmd, void *buf)
-{
- int res;
-
- switch (cmd)
- {
- case FIONBIO:
- set_nonblocking (*(int *) buf);
- res = 0;
- break;
- case FIONREAD:
- case TIOCSCTTY:
- set_errno (ENOTTY);
- res = -1;
- break;
- default:
- set_errno (EINVAL);
- res = -1;
- break;
- }
-
- syscall_printf ("%d = ioctl(%x, %p)", res, cmd, buf);
- return res;
-}
-
-int __reg2
-fhandler_base::fstat (struct stat *buf)
-{
- if (is_fs_special ())
- return fstat_fs (buf);
-
- switch (get_device ())
- {
- case FH_PIPE:
- buf->st_mode = S_IFIFO | S_IRUSR | S_IWUSR;
- break;
- case FH_PIPEW:
- buf->st_mode = S_IFIFO | S_IWUSR;
- break;
- case FH_PIPER:
- buf->st_mode = S_IFIFO | S_IRUSR;
- break;
- default:
- buf->st_mode = S_IFCHR | STD_RBITS | STD_WBITS | S_IWGRP | S_IWOTH;
- break;
- }
-
- buf->st_uid = geteuid32 ();
- buf->st_gid = getegid32 ();
- buf->st_nlink = 1;
- buf->st_blksize = PREFERRED_IO_BLKSIZE;
-
- buf->st_ctim.tv_sec = 1164931200L; /* Arbitrary value: 2006-12-01 */
- buf->st_ctim.tv_nsec = 0L;
- buf->st_birthtim = buf->st_ctim;
- buf->st_mtim.tv_sec = time (NULL); /* Arbitrary value: current time,
- like Linux */
- buf->st_mtim.tv_nsec = 0L;
- buf->st_atim = buf->st_mtim;
-
- return 0;
-}
-
-int __reg2
-fhandler_base::fstatvfs (struct statvfs *sfs)
-{
- /* If we hit this base implementation, it's some device in /dev.
- Just call statvfs on /dev for simplicity. */
- path_conv pc ("/dev", PC_KEEP_HANDLE);
- fhandler_disk_file fh (pc);
- return fh.fstatvfs (sfs);
-}
-
-int
-fhandler_base::init (HANDLE f, DWORD a, mode_t bin)
-{
- set_io_handle (f);
- access = a;
- a &= GENERIC_READ | GENERIC_WRITE;
- int flags = 0;
- if (a == GENERIC_READ)
- flags = O_RDONLY;
- else if (a == GENERIC_WRITE)
- flags = O_WRONLY;
- else if (a == (GENERIC_READ | GENERIC_WRITE))
- flags = O_RDWR;
- set_flags (flags | bin);
- set_open_status ();
- debug_printf ("created new fhandler_base for handle %p, bin %d", f, rbinary ());
- return 1;
-}
-
-int
-fhandler_base::dup (fhandler_base *child, int)
-{
- debug_printf ("in fhandler_base dup");
-
- HANDLE nh;
- if (!nohandle () && !archetype)
- {
- if (!DuplicateHandle (GetCurrentProcess (), get_handle (),
- GetCurrentProcess (), &nh,
- 0, TRUE, DUPLICATE_SAME_ACCESS))
- {
- debug_printf ("dup(%s) failed, handle %p, %E",
- get_name (), get_handle ());
- __seterrno ();
- return -1;
- }
-
- VerifyHandle (nh);
- child->set_io_handle (nh);
- }
- return 0;
-}
-
-int
-fhandler_base_overlapped::dup (fhandler_base *child, int flags)
-{
- int res = fhandler_base::dup (child, flags) ||
- ((fhandler_base_overlapped *) child)->setup_overlapped ();
- return res;
-}
-
-int fhandler_base::fcntl (int cmd, intptr_t arg)
-{
- int res;
-
- switch (cmd)
- {
- case F_GETFD:
- res = close_on_exec () ? FD_CLOEXEC : 0;
- break;
- case F_SETFD:
- set_close_on_exec ((arg & FD_CLOEXEC) ? 1 : 0);
- res = 0;
- break;
- case F_GETFL:
- res = get_flags ();
- debug_printf ("GETFL: %y", res);
- break;
- case F_SETFL:
- {
- /* Only O_APPEND, O_ASYNC and O_NONBLOCK/O_NDELAY are allowed.
- Each other flag will be ignored.
- Since O_ASYNC isn't defined in fcntl.h it's currently
- ignored as well. */
- const int allowed_flags = O_APPEND | O_NONBLOCK_MASK;
- int new_flags = arg & allowed_flags;
- /* Carefully test for the O_NONBLOCK or deprecated OLD_O_NDELAY flag.
- Set only the flag that has been passed in. If both are set, just
- record O_NONBLOCK. */
- if ((new_flags & OLD_O_NDELAY) && (new_flags & O_NONBLOCK))
- new_flags &= ~OLD_O_NDELAY;
- set_flags ((get_flags () & ~allowed_flags) | new_flags);
- }
- res = 0;
- break;
- case F_GETLK:
- case F_SETLK:
- case F_SETLKW:
- {
- struct flock *fl = (struct flock *) arg;
- fl->l_type &= F_RDLCK | F_WRLCK | F_UNLCK;
- res = mandatory_locking () ? mand_lock (cmd, fl) : lock (cmd, fl);
- }
- break;
- default:
- set_errno (EINVAL);
- res = -1;
- break;
- }
- return res;
-}
-
-/* Base terminal handlers. These just return errors. */
-
-int
-fhandler_base::tcflush (int)
-{
- set_errno (ENOTTY);
- return -1;
-}
-
-int
-fhandler_base::tcsendbreak (int)
-{
- set_errno (ENOTTY);
- return -1;
-}
-
-int
-fhandler_base::tcdrain ()
-{
- set_errno (ENOTTY);
- return -1;
-}
-
-int
-fhandler_base::tcflow (int)
-{
- set_errno (ENOTTY);
- return -1;
-}
-
-int
-fhandler_base::tcsetattr (int, const struct termios *)
-{
- set_errno (ENOTTY);
- return -1;
-}
-
-int
-fhandler_base::tcgetattr (struct termios *)
-{
- set_errno (ENOTTY);
- return -1;
-}
-
-int
-fhandler_base::tcsetpgrp (const pid_t)
-{
- set_errno (ENOTTY);
- return -1;
-}
-
-int
-fhandler_base::tcgetpgrp ()
-{
- set_errno (ENOTTY);
- return -1;
-}
-
-pid_t
-fhandler_base::tcgetsid ()
-{
- set_errno (ENOTTY);
- return -1;
-}
-
-int
-fhandler_base::ptsname_r (char *, size_t)
-{
- set_errno (ENOTTY);
- return ENOTTY;
-}
-
-/* Normal I/O constructor */
-fhandler_base::fhandler_base () :
- status (),
- open_status (),
- access (0),
- io_handle (NULL),
- ino (0),
- _refcnt (0),
- openflags (0),
- rabuf (NULL),
- ralen (0),
- raixget (0),
- raixput (0),
- rabuflen (0),
- unique_id (0),
- archetype (NULL),
- usecount (0)
-{
- isclosed (false);
-}
-
-/* Normal I/O destructor */
-fhandler_base::~fhandler_base ()
-{
- if (rabuf)
- free (rabuf);
-}
-
-/**********************************************************************/
-/* /dev/null */
-
-fhandler_dev_null::fhandler_dev_null () :
- fhandler_base ()
-{
-}
-
-void
-fhandler_base::set_no_inheritance (HANDLE &h, bool not_inheriting)
-{
- if (!SetHandleInformation (h, HANDLE_FLAG_INHERIT,
- not_inheriting ? 0 : HANDLE_FLAG_INHERIT))
- debug_printf ("SetHandleInformation failed, %E");
-#ifdef DEBUGGING_AND_FDS_PROTECTED
- if (h)
- setclexec (oh, h, not_inheriting);
-#endif
-}
-
-bool
-fhandler_base::fork_fixup (HANDLE parent, HANDLE &h, const char *name)
-{
- HANDLE oh = h;
- bool res = false;
- if (/* !is_socket () && */ !close_on_exec ())
- debug_printf ("handle %p already opened", h);
- else if (!DuplicateHandle (parent, h, GetCurrentProcess (), &h,
- 0, !close_on_exec (), DUPLICATE_SAME_ACCESS))
- system_printf ("%s - %E, handle %s<%p>", get_name (), name, h);
- else
- {
- if (oh != h)
- VerifyHandle (h);
- res = true;
- }
- return res;
-}
-
-void
-fhandler_base::set_close_on_exec (bool val)
-{
- if (!nohandle ())
- set_no_inheritance (io_handle, val);
- close_on_exec (val);
- debug_printf ("set close_on_exec for %s to %d", get_name (), val);
-}
-
-void
-fhandler_base::fixup_after_fork (HANDLE parent)
-{
- debug_printf ("inheriting '%s' from parent", get_name ());
- if (!nohandle ())
- fork_fixup (parent, io_handle, "io_handle");
- /* POSIX locks are not inherited across fork. */
- if (unique_id)
- del_my_locks (after_fork);
-}
-
-void
-fhandler_base_overlapped::fixup_after_fork (HANDLE parent)
-{
- setup_overlapped ();
- fhandler_base::fixup_after_fork (parent);
-}
-
-void
-fhandler_base::fixup_after_exec ()
-{
- debug_printf ("here for '%s'", get_name ());
- if (unique_id && close_on_exec ())
- del_my_locks (after_exec);
- mandatory_locking (false);
-}
-void
-fhandler_base_overlapped::fixup_after_exec ()
-{
- setup_overlapped ();
- fhandler_base::fixup_after_exec ();
-}
-
-bool
-fhandler_base::is_nonblocking ()
-{
- return (openflags & O_NONBLOCK_MASK) != 0;
-}
-
-void
-fhandler_base::set_nonblocking (int yes)
-{
- int current = openflags & O_NONBLOCK_MASK;
- int new_flags = yes ? (!current ? O_NONBLOCK : current) : 0;
- openflags = (openflags & ~O_NONBLOCK_MASK) | new_flags;
-}
-
-int
-fhandler_base::mkdir (mode_t)
-{
- if (exists ())
- set_errno (EEXIST);
- else
- set_errno (EROFS);
- return -1;
-}
-
-int
-fhandler_base::rmdir ()
-{
- if (!exists ())
- set_errno (ENOENT);
- else if (!pc.isdir ())
- set_errno (ENOTDIR);
- else
- set_errno (EROFS);
- return -1;
-}
-
-DIR *
-fhandler_base::opendir (int fd)
-{
- set_errno (ENOTDIR);
- return NULL;
-}
-
-int
-fhandler_base::readdir (DIR *, dirent *)
-{
- return ENOTDIR;
-}
-
-long
-fhandler_base::telldir (DIR *)
-{
- set_errno (ENOTDIR);
- return -1;
-}
-
-void
-fhandler_base::seekdir (DIR *, long)
-{
- set_errno (ENOTDIR);
-}
-
-void
-fhandler_base::rewinddir (DIR *)
-{
- set_errno (ENOTDIR);
-}
-
-int
-fhandler_base::closedir (DIR *)
-{
- set_errno (ENOTDIR);
- return -1;
-}
-
-int
-fhandler_base::fchmod (mode_t mode)
-{
- extern int chmod_device (path_conv& pc, mode_t mode);
- if (pc.is_fs_special ())
- return chmod_device (pc, mode);
- /* By default, just succeeds. */
- return 0;
-}
-
-int
-fhandler_base::fchown (uid_t uid, gid_t gid)
-{
- if (pc.is_fs_special ())
- return ((fhandler_disk_file *) this)->fhandler_disk_file::fchown (uid, gid);
- /* By default, just succeeds. */
- return 0;
-}
-
-int
-fhandler_base::facl (int cmd, int nentries, aclent_t *aclbufp)
-{
- int res = -1;
- switch (cmd)
- {
- case SETACL:
- /* By default, just succeeds. */
- res = 0;
- break;
- case GETACL:
- if (!aclbufp)
- set_errno(EFAULT);
- else if (nentries < MIN_ACL_ENTRIES)
- set_errno (ENOSPC);
- else
- {
- aclbufp[0].a_type = USER_OBJ;
- aclbufp[0].a_id = myself->uid;
- aclbufp[0].a_perm = (S_IRUSR | S_IWUSR) >> 6;
- aclbufp[1].a_type = GROUP_OBJ;
- aclbufp[1].a_id = myself->gid;
- aclbufp[1].a_perm = (S_IRGRP | S_IWGRP) >> 3;
- aclbufp[2].a_type = OTHER_OBJ;
- aclbufp[2].a_id = ILLEGAL_GID;
- aclbufp[2].a_perm = S_IROTH | S_IWOTH;
- res = MIN_ACL_ENTRIES;
- }
- break;
- case GETACLCNT:
- res = MIN_ACL_ENTRIES;
- break;
- default:
- set_errno (EINVAL);
- break;
- }
- return res;
-}
-
-ssize_t
-fhandler_base::fgetxattr (const char *name, void *value, size_t size)
-{
- set_errno (ENOTSUP);
- return -1;
-}
-
-int
-fhandler_base::fsetxattr (const char *name, const void *value, size_t size,
- int flags)
-{
- set_errno (ENOTSUP);
- return -1;
-}
-
-int
-fhandler_base::fadvise (off_t offset, off_t length, int advice)
-{
- set_errno (EINVAL);
- return -1;
-}
-
-int
-fhandler_base::ftruncate (off_t length, bool allow_truncate)
-{
- set_errno (EINVAL);
- return -1;
-}
-
-int
-fhandler_base::link (const char *newpath)
-{
- set_errno (EPERM);
- return -1;
-}
-
-int
-fhandler_base::utimens (const struct timespec *tvp)
-{
- if (is_fs_special ())
- return utimens_fs (tvp);
-
- set_errno (EINVAL);
- return -1;
-}
-
-int
-fhandler_base::fsync ()
-{
- if (!get_handle () || nohandle ())
- {
- set_errno (EINVAL);
- return -1;
- }
- if (pc.isdir ()) /* Just succeed. */
- return 0;
- if (FlushFileBuffers (get_handle ()))
- return 0;
-
- /* Ignore ERROR_INVALID_FUNCTION because FlushFileBuffers() always fails
- with this code on raw devices which are unbuffered by default. */
- DWORD errcode = GetLastError();
- if (errcode == ERROR_INVALID_FUNCTION)
- return 0;
-
- __seterrno_from_win_error (errcode);
- return -1;
-}
-
-int
-fhandler_base::fpathconf (int v)
-{
- int ret;
-
- switch (v)
- {
- case _PC_LINK_MAX:
- return pc.fs_is_ntfs () || pc.fs_is_samba () || pc.fs_is_nfs ()
- ? LINK_MAX : 1;
- case _PC_MAX_CANON:
- if (is_tty ())
- return MAX_CANON;
- set_errno (EINVAL);
- break;
- case _PC_MAX_INPUT:
- if (is_tty ())
- return MAX_INPUT;
- set_errno (EINVAL);
- break;
- case _PC_NAME_MAX:
- /* NAME_MAX is without trailing \0 */
- if (!pc.isdir ())
- return NAME_MAX;
- ret = NT_MAX_PATH - strlen (get_name ()) - 2;
- return ret < 0 ? 0 : ret > NAME_MAX ? NAME_MAX : ret;
- case _PC_PATH_MAX:
- /* PATH_MAX is with trailing \0 */
- if (!pc.isdir ())
- return PATH_MAX;
- ret = NT_MAX_PATH - strlen (get_name ()) - 1;
- return ret < 0 ? 0 : ret > PATH_MAX ? PATH_MAX : ret;
- case _PC_PIPE_BUF:
- if (pc.isdir ()
- || get_device () == FH_FIFO || get_device () == FH_PIPE
- || get_device () == FH_PIPER || get_device () == FH_PIPEW)
- return PIPE_BUF;
- set_errno (EINVAL);
- break;
- case _PC_CHOWN_RESTRICTED:
- return 1;
- case _PC_NO_TRUNC:
- return 1;
- case _PC_VDISABLE:
- if (is_tty ())
- return _POSIX_VDISABLE;
- set_errno (EINVAL);
- break;
- case _PC_ASYNC_IO:
- case _PC_PRIO_IO:
- break;
- case _PC_SYNC_IO:
- return 1;
- case _PC_FILESIZEBITS:
- return FILESIZEBITS;
- case _PC_2_SYMLINKS:
- return 1;
- case _PC_SYMLINK_MAX:
- return SYMLINK_MAX;
- case _PC_POSIX_PERMISSIONS:
- case _PC_POSIX_SECURITY:
- if (get_device () == FH_FS)
- return pc.has_acls () || pc.fs_is_nfs ();
- set_errno (EINVAL);
- break;
- default:
- set_errno (EINVAL);
- break;
- }
- return -1;
-}
-
-/* Overlapped I/O */
-
-int __reg1
-fhandler_base_overlapped::setup_overlapped ()
-{
- OVERLAPPED *ov = get_overlapped_buffer ();
- memset (ov, 0, sizeof (*ov));
- set_overlapped (ov);
- ov->hEvent = CreateEvent (&sec_none_nih, true, true, NULL);
- io_pending = false;
- return ov->hEvent ? 0 : -1;
-}
-
-void __reg1
-fhandler_base_overlapped::destroy_overlapped ()
-{
- OVERLAPPED *ov = get_overlapped ();
- if (ov && ov->hEvent)
- {
- SetEvent (ov->hEvent);
- CloseHandle (ov->hEvent);
- ov->hEvent = NULL;
- }
- io_pending = false;
- get_overlapped () = NULL;
-}
-
-bool __reg1
-fhandler_base_overlapped::has_ongoing_io ()
-{
- if (!io_pending)
- return false;
-
- if (!IsEventSignalled (get_overlapped ()->hEvent))
- return true;
- io_pending = false;
- DWORD nbytes;
- GetOverlappedResult (get_output_handle (), get_overlapped (), &nbytes, false);
- return false;
-}
-
-fhandler_base_overlapped::wait_return __reg3
-fhandler_base_overlapped::wait_overlapped (bool inres, bool writing, DWORD *bytes, bool nonblocking, DWORD len)
-{
- if (!get_overlapped ())
- return inres ? overlapped_success : overlapped_error;
-
- wait_return res = overlapped_unknown;
- DWORD err;
- if (inres)
- /* handle below */;
- else if ((err = GetLastError ()) != ERROR_IO_PENDING)
- res = overlapped_error;
- else if (!nonblocking)
- /* handle below */;
- else if (!writing)
- SetEvent (get_overlapped ()->hEvent); /* Force immediate WFMO return */
- else
- {
- *bytes = len; /* Assume that this worked */
- io_pending = true; /* but don't allow subsequent */
- res = overlapped_success; /* writes until completed */
- }
- if (res == overlapped_unknown)
- {
- DWORD wfres = cygwait (get_overlapped ()->hEvent);
- HANDLE h = writing ? get_output_handle () : get_handle ();
- BOOL wores;
- if (isclosed ())
- {
- switch (wfres)
- {
- case WAIT_OBJECT_0:
- err = ERROR_INVALID_HANDLE;
- break;
- case WAIT_SIGNALED:
- err = ERROR_INVALID_AT_INTERRUPT_TIME;
- break;
- default:
- err = GetLastError ();
- break;
- }
- res = overlapped_error;
- }
- else
- {
- /* Cancelling here to prevent races. It's possible that the I/O has
- completed already, in which case this is a no-op. Otherwise,
- WFMO returned because 1) This is a non-blocking call, 2) a signal
- arrived, or 3) the operation was cancelled. These cases may be
- overridden by the return of GetOverlappedResult which could detect
- that I/O completion occurred. */
- CancelIo (h);
- wores = GetOverlappedResult (h, get_overlapped (), bytes, false);
- err = GetLastError ();
- ResetEvent (get_overlapped ()->hEvent); /* Probably not needed but CYA */
- debug_printf ("wfres %u, wores %d, bytes %u", wfres, wores, *bytes);
- if (wores)
- res = overlapped_success; /* operation succeeded */
- else if (wfres == WAIT_OBJECT_0 + 1)
- {
- err = ERROR_INVALID_AT_INTERRUPT_TIME; /* forces an EINTR below */
- debug_printf ("signal");
- res = overlapped_error;
- }
- else if (wfres == WAIT_OBJECT_0 + 2)
- pthread::static_cancel_self (); /* never returns */
- else if (nonblocking)
- res = overlapped_nonblocking_no_data; /* more handling below */
- else
- {
- debug_printf ("GetOverlappedResult failed, h %p, bytes %u, %E", h, *bytes);
- res = overlapped_error;
- }
- }
- }
-
- if (res == overlapped_success)
- {
- debug_printf ("normal %s, %u bytes ispipe() %d", writing ? "write" : "read", *bytes, ispipe ());
- if (*bytes == 0 && !writing && ispipe ())
- res = overlapped_nullread;
- }
- else if (res == overlapped_nonblocking_no_data)
- {
- *bytes = (DWORD) -1;
- set_errno (EAGAIN);
- debug_printf ("no data to read for nonblocking I/O");
- }
- else if (err == ERROR_HANDLE_EOF || err == ERROR_BROKEN_PIPE)
- {
- debug_printf ("EOF, %E");
- *bytes = 0;
- res = overlapped_success;
- if (writing && err == ERROR_BROKEN_PIPE)
- raise (SIGPIPE);
- }
- else
- {
- debug_printf ("res %u, Win32 Error %u", (unsigned) res, err);
- *bytes = (DWORD) -1;
- __seterrno_from_win_error (err);
- if (writing && err == ERROR_NO_DATA)
- raise (SIGPIPE);
- }
-
- return res;
-}
-
-void __reg3
-fhandler_base_overlapped::raw_read (void *ptr, size_t& len)
-{
- DWORD nbytes;
- bool keep_looping;
- do
- {
- bool res = ReadFile (get_handle (), ptr, len, &nbytes,
- get_overlapped ());
- switch (wait_overlapped (res, false, &nbytes, is_nonblocking ()))
- {
- case overlapped_nullread:
- keep_looping = true;
- break;
- default: /* Added to quiet gcc */
- case overlapped_success:
- case overlapped_error:
- keep_looping = false;
- break;
- }
- }
- while (keep_looping);
- len = (nbytes == (DWORD) -1) ? (size_t) -1 : (size_t) nbytes;
-}
-
-ssize_t __reg3
-fhandler_base_overlapped::raw_write (const void *ptr, size_t len)
-{
- size_t nbytes;
- if (has_ongoing_io ())
- {
- set_errno (EAGAIN);
- nbytes = (size_t) -1;
- }
- else
- {
- size_t chunk;
- if (!max_atomic_write || len < max_atomic_write)
- chunk = MIN (len, INT_MAX);
- else if (is_nonblocking ())
- chunk = len = max_atomic_write;
- else
- chunk = max_atomic_write;
-
- nbytes = 0;
- DWORD nbytes_now = 0;
- /* Write to fd in smaller chunks, accumulating a total.
- If there's an error, just return the accumulated total
- unless the first write fails, in which case return value
- from wait_overlapped(). */
- while (nbytes < len)
- {
- size_t left = len - nbytes;
- size_t len1;
- if (left > chunk)
- len1 = chunk;
- else
- len1 = left;
- bool res = WriteFile (get_output_handle (), ptr, len1, &nbytes_now,
- get_overlapped ());
- switch (wait_overlapped (res, true, &nbytes_now,
- is_nonblocking (), len1))
- {
- case overlapped_success:
- ptr = ((char *) ptr) + chunk;
- nbytes += nbytes_now;
- /* fall through intentionally */
- case overlapped_error:
- len = 0; /* terminate loop */
- case overlapped_unknown:
- case overlapped_nullread:
- case overlapped_nonblocking_no_data:
- break;
- }
- }
- if (!nbytes)
- nbytes = (nbytes_now == (DWORD) -1) ? (size_t) -1 : nbytes_now;
- }
- return nbytes;
-}
diff --git a/winsup/cygwin/fhandler.h b/winsup/cygwin/fhandler.h
deleted file mode 100644
index 0128815e7..000000000
--- a/winsup/cygwin/fhandler.h
+++ /dev/null
@@ -1,2169 +0,0 @@
-/* fhandler.h
-
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#pragma once
-#include "pinfo.h"
-
-#include "tty.h"
-/* fcntl flags used only internaly. */
-#define O_NOSYMLINK 0x080000
-#define O_DIROPEN 0x100000
-
-/* newlib used to define O_NDELAY differently from O_NONBLOCK. Now it
- properly defines both to be the same. Unfortunately, we have to
- behave properly the old version, too, to accommodate older executables. */
-#define OLD_O_NDELAY (CYGWIN_VERSION_CHECK_FOR_OLD_O_NONBLOCK ? 4 : 0)
-
-/* Care for the old O_NDELAY flag. If one of the flags is set,
- both flags are set. */
-#define O_NONBLOCK_MASK (O_NONBLOCK | OLD_O_NDELAY)
-
-/* It appears that 64K is the block size used for buffered I/O on NT.
- Using this blocksize in read/write calls in the application results
- in a much better performance than using smaller values. */
-#define PREFERRED_IO_BLKSIZE ((blksize_t) 65536)
-
-/* It also appears that this may be the only acceptable block size for
- atomic writes to a pipe. It is a shame that we have to make this
- so small. http://cygwin.com/ml/cygwin/2011-03/msg00541.html */
-#define DEFAULT_PIPEBUFSIZE PREFERRED_IO_BLKSIZE
-
-/* Used for fhandler_pipe::create. Use an available flag which will
- never be used in Cygwin for this function. */
-#define PIPE_ADD_PID FILE_FLAG_FIRST_PIPE_INSTANCE
-
-extern const char *windows_device_names[];
-extern struct __cygwin_perfile *perfile_table;
-#define __fmode (*(user_data->fmode_ptr))
-extern const char proc[];
-extern const size_t proc_len;
-extern const char procsys[];
-extern const size_t procsys_len;
-
-class select_record;
-class select_stuff;
-class fhandler_disk_file;
-class inode_t;
-typedef struct __DIR DIR;
-struct dirent;
-struct iovec;
-struct acl;
-
-enum dirent_states
-{
- dirent_ok = 0x0000,
- dirent_saw_dot = 0x0001,
- dirent_saw_dot_dot = 0x0002,
- dirent_saw_eof = 0x0004,
- dirent_isroot = 0x0008,
- dirent_set_d_ino = 0x0010,
- dirent_get_d_ino = 0x0020,
- dirent_nfs_d_ino = 0x0040,
-
- /* Global flags which must not be deleted on rewinddir or seekdir. */
- dirent_info_mask = 0x0078
-};
-
-enum conn_state
-{
- unconnected = 0,
- connect_pending = 1,
- connected = 2,
- listener = 3,
- connect_failed = 4
-};
-
-enum line_edit_status
-{
- line_edit_ok = 0,
- line_edit_input_done = 1,
- line_edit_signalled = 2,
- line_edit_error = 3,
- line_edit_pipe_full = 4
-};
-
-enum bg_check_types
-{
- bg_error = -1,
- bg_eof = 0,
- bg_ok = 1,
- bg_signalled = 2
-};
-
-enum query_state {
- no_query = 0,
- query_read_control = 1,
- query_read_attributes = 2,
- query_write_control = 3,
- query_write_dac = 4,
- query_write_attributes = 5
-};
-
-enum del_lock_called_from {
- on_close,
- after_fork,
- after_exec
-};
-
-enum virtual_ftype_t {
- virt_blk = -7, /* Block special */
- virt_chr = -6, /* Character special */
- virt_fsfile = -5, /* FS-based file via /proc/sys */
- virt_socket = -4, /* Socket */
- virt_pipe = -3, /* Pipe */
- virt_symlink = -2, /* Symlink */
- virt_file = -1, /* Regular file */
- virt_none = 0, /* Invalid, Error */
- virt_directory = 1, /* Directory */
- virt_rootdir = 2, /* Root directory of virtual FS */
- virt_fsdir = 3, /* FS-based directory via /proc/sys */
-};
-
-class fhandler_base
-{
- friend class dtable;
- friend void close_all_files (bool);
-
- struct status_flags
- {
- unsigned rbinary : 1; /* binary read mode */
- unsigned rbinset : 1; /* binary read mode explicitly set */
- unsigned wbinary : 1; /* binary write mode */
- unsigned wbinset : 1; /* binary write mode explicitly set */
- unsigned nohandle : 1; /* No handle associated with fhandler. */
- unsigned did_lseek : 1; /* set when lseek is called as a flag that
- _write should check if we've moved
- beyond EOF, zero filling or making
- file sparse if so. */
- unsigned query_open : 3; /* open file without requesting either
- read or write access */
- unsigned close_on_exec : 1; /* close-on-exec */
- unsigned need_fork_fixup : 1; /* Set if need to fixup after fork. */
- unsigned isclosed : 1; /* Set when fhandler is closed. */
- unsigned mandatory_locking : 1; /* Windows mandatory locking */
-
- public:
- status_flags () :
- rbinary (0), rbinset (0), wbinary (0), wbinset (0), nohandle (0),
- did_lseek (0), query_open (no_query), close_on_exec (0),
- need_fork_fixup (0), isclosed (0), mandatory_locking (0)
- {}
- } status, open_status;
-
- private:
- ACCESS_MASK access;
- ULONG options;
-
- HANDLE io_handle;
-
- ino_t ino; /* file ID or hashed filename, depends on FS. */
- LONG _refcnt;
-
- protected:
- /* File open flags from open () and fcntl () calls */
- int openflags;
-
- char *rabuf; /* used for crlf conversion in text files */
- size_t ralen;
- size_t raixget;
- size_t raixput;
- size_t rabuflen;
-
- /* Used for advisory file locking. See flock.cc. */
- long long unique_id;
- void del_my_locks (del_lock_called_from);
-
- HANDLE read_state;
-
- public:
- LONG inc_refcnt () {return InterlockedIncrement (&_refcnt);}
- LONG dec_refcnt () {return InterlockedDecrement (&_refcnt);}
- class fhandler_base *archetype;
- int usecount;
-
- path_conv pc;
-
- void reset (const fhandler_base *);
- virtual bool use_archetype () const {return false;}
- virtual void set_name (path_conv &pc);
- virtual void set_name (const char *s)
- {
- pc.set_normalized_path (s);
- pc.set_path (s);
- }
- int error () const {return pc.error;}
- void set_error (int error) {pc.error = error;}
- bool exists () const {return pc.exists ();}
- int pc_binmode () const {return pc.binmode ();}
- device& dev () {return pc.dev;}
- operator DWORD& () {return (DWORD&) pc;}
- fhandler_base ();
- virtual ~fhandler_base ();
-
- /* Non-virtual simple accessor functions. */
- void set_io_handle (HANDLE x) { io_handle = x; }
-
- dev_t& get_device () { return dev (); }
- _major_t get_major () { return dev ().get_major (); }
- _minor_t get_minor () { return dev ().get_minor (); }
-
- ACCESS_MASK get_access () const { return access; }
- void set_access (ACCESS_MASK x) { access = x; }
-
- ULONG get_options () const { return options; }
- void set_options (ULONG x) { options = x; }
-
- int get_flags () { return openflags; }
- void set_flags (int x, int supplied_bin = 0);
-
- bool is_nonblocking ();
- void set_nonblocking (int);
-
- bool wbinary () const { return status.wbinset ? status.wbinary : 1; }
- bool rbinary () const { return status.rbinset ? status.rbinary : 1; }
-
- void wbinary (bool b) {status.wbinary = b; status.wbinset = 1;}
- void rbinary (bool b) {status.rbinary = b; status.rbinset = 1;}
-
- void set_open_status () {open_status = status;}
- void reset_to_open_binmode ()
- {
- set_flags ((get_flags () & ~(O_TEXT | O_BINARY))
- | ((open_status.wbinary || open_status.rbinary)
- ? O_BINARY : O_TEXT));
- }
-
- IMPLEMENT_STATUS_FLAG (bool, wbinset)
- IMPLEMENT_STATUS_FLAG (bool, rbinset)
- IMPLEMENT_STATUS_FLAG (bool, nohandle)
- IMPLEMENT_STATUS_FLAG (bool, did_lseek)
- IMPLEMENT_STATUS_FLAG (query_state, query_open)
- IMPLEMENT_STATUS_FLAG (bool, close_on_exec)
- IMPLEMENT_STATUS_FLAG (bool, need_fork_fixup)
- IMPLEMENT_STATUS_FLAG (bool, isclosed)
- IMPLEMENT_STATUS_FLAG (bool, mandatory_locking)
-
- int get_default_fmode (int flags);
-
- virtual void set_close_on_exec (bool val);
-
- LPSECURITY_ATTRIBUTES get_inheritance (bool all = 0)
- {
- if (all)
- return close_on_exec () ? &sec_all_nih : &sec_all;
- else
- return close_on_exec () ? &sec_none_nih : &sec_none;
- }
-
- virtual int fixup_before_fork_exec (DWORD) { return 0; }
- virtual void fixup_after_fork (HANDLE);
- virtual void fixup_after_exec ();
- void create_read_state (LONG n)
- {
- read_state = CreateSemaphore (&sec_none_nih, 0, n, NULL);
- ProtectHandle (read_state);
- }
-
- void signal_read_state (LONG n)
- {
- ReleaseSemaphore (read_state, n, NULL);
- }
-
- bool get_readahead_valid () { return raixget < ralen; }
- int puts_readahead (const char *s, size_t len = (size_t) -1);
- int put_readahead (char value);
-
- int get_readahead ();
- int peek_readahead (int queryput = 0);
-
- int eat_readahead (int n);
-
- void set_readahead_valid (int val, int ch = -1);
-
- int get_readahead_into_buffer (char *buf, size_t buflen);
-
- bool has_acls () const { return pc.has_acls (); }
-
- bool isremote () { return pc.isremote (); }
-
- bool has_attribute (DWORD x) const {return pc.has_attribute (x);}
- const char *get_name () const { return pc.normalized_path; }
- const char *get_win32_name () { return pc.get_win32 (); }
- virtual dev_t get_dev () { return get_device (); }
- ino_t get_ino () { return ino ?: ino = hash_path_name (0, pc.get_nt_native_path ()); }
- long long get_unique_id () const { return unique_id; }
- /* Returns name used for /proc/<pid>/fd in buf. */
- virtual char *get_proc_fd_name (char *buf);
-
- virtual void hclose (HANDLE h) {CloseHandle (h);}
- virtual void set_no_inheritance (HANDLE &, bool);
-
- /* fixup fd possibly non-inherited handles after fork */
- bool fork_fixup (HANDLE, HANDLE &, const char *);
- virtual bool need_fixup_before () const {return false;}
-
- int open_with_arch (int, mode_t = 0);
- int open_null (int flags);
- virtual int open (int, mode_t);
- virtual void open_setup (int flags);
- void set_unique_id () { NtAllocateLocallyUniqueId ((PLUID) &unique_id); }
-
- int close_with_arch ();
- virtual int close ();
- virtual void cleanup ();
- int _archetype_usecount (const char *fn, int ln, int n)
- {
- if (!archetype)
- return 0;
- archetype->usecount += n;
- if (strace.active ())
- strace.prntf (_STRACE_ALL, fn, "line %d: %s<%p> usecount + %d = %d", ln, get_name (), archetype, n, archetype->usecount);
- return archetype->usecount;
- }
-
- int open_fs (int, mode_t = 0);
-# define archetype_usecount(n) _archetype_usecount (__PRETTY_FUNCTION__, __LINE__, (n))
- int close_fs () { return fhandler_base::close (); }
- virtual int __reg2 fstat (struct stat *buf);
- void __reg2 stat_fixup (struct stat *buf);
- int __reg2 fstat_fs (struct stat *buf);
-private:
- int __reg3 fstat_helper (struct stat *buf,
- DWORD nNumberOfLinks);
- int __reg2 fstat_by_nfs_ea (struct stat *buf);
- int __reg2 fstat_by_handle (struct stat *buf);
- int __reg2 fstat_by_name (struct stat *buf);
-public:
- virtual int __reg2 fstatvfs (struct statvfs *buf);
- int __reg2 utimens_fs (const struct timespec *);
- virtual int __reg1 fchmod (mode_t mode);
- virtual int __reg2 fchown (uid_t uid, gid_t gid);
- virtual int __reg3 facl (int, int, struct acl *);
- virtual ssize_t __reg3 fgetxattr (const char *, void *, size_t);
- virtual int __reg3 fsetxattr (const char *, const void *, size_t, int);
- virtual int __reg3 fadvise (off_t, off_t, int);
- virtual int __reg3 ftruncate (off_t, bool);
- virtual int __reg2 link (const char *);
- virtual int __reg2 utimens (const struct timespec *);
- virtual int __reg1 fsync ();
- virtual int ioctl (unsigned int cmd, void *);
- virtual int fcntl (int cmd, intptr_t);
- virtual char const *ttyname () { return get_name (); }
- virtual void __reg3 read (void *ptr, size_t& len);
- virtual ssize_t __stdcall write (const void *ptr, size_t len);
- virtual ssize_t __stdcall readv (const struct iovec *, int iovcnt, ssize_t tot = -1);
- virtual ssize_t __stdcall writev (const struct iovec *, int iovcnt, ssize_t tot = -1);
- virtual ssize_t __reg3 pread (void *, size_t, off_t);
- virtual ssize_t __reg3 pwrite (void *, size_t, off_t);
- virtual off_t lseek (off_t offset, int whence);
- virtual int lock (int, struct flock *);
- virtual int mand_lock (int, struct flock *);
- virtual int dup (fhandler_base *child, int flags);
- virtual int fpathconf (int);
-
- virtual HANDLE mmap (caddr_t *addr, size_t len, int prot,
- int flags, off_t off);
- virtual int munmap (HANDLE h, caddr_t addr, size_t len);
- virtual int msync (HANDLE h, caddr_t addr, size_t len, int flags);
- virtual bool fixup_mmap_after_fork (HANDLE h, int prot, int flags,
- off_t offset, DWORD size,
- void *address);
-
- void *operator new (size_t, void *p) __attribute__ ((nothrow)) {return p;}
-
- virtual int init (HANDLE, DWORD, mode_t);
-
- virtual int tcflush (int);
- virtual int tcsendbreak (int);
- virtual int tcdrain ();
- virtual int tcflow (int);
- virtual int tcsetattr (int a, const struct termios *t);
- virtual int tcgetattr (struct termios *t);
- virtual int tcsetpgrp (const pid_t pid);
- virtual int tcgetpgrp ();
- virtual pid_t tcgetsid ();
- virtual bool is_tty () const { return false; }
- virtual bool ispipe () const { return false; }
- virtual pid_t get_popen_pid () const {return 0;}
- virtual bool isdevice () const { return true; }
- virtual bool isfifo () const { return false; }
- virtual int ptsname_r (char *, size_t);
- virtual class fhandler_socket *is_socket () { return NULL; }
- virtual class fhandler_console *is_console () { return 0; }
- virtual int is_windows () {return 0; }
-
- virtual void __reg3 raw_read (void *ptr, size_t& ulen);
- virtual ssize_t __reg3 raw_write (const void *ptr, size_t ulen);
-
- /* Virtual accessor functions to hide the fact
- that some fd's have two handles. */
- virtual HANDLE& get_handle () { return io_handle; }
- virtual HANDLE& get_io_handle () { return io_handle; }
- virtual HANDLE& get_output_handle () { return io_handle; }
- virtual HANDLE get_stat_handle () { return pc.handle () ?: io_handle; }
- virtual bool hit_eof () {return false;}
- virtual select_record *select_read (select_stuff *);
- virtual select_record *select_write (select_stuff *);
- virtual select_record *select_except (select_stuff *);
- virtual const char *get_native_name ()
- {
- return dev ().native;
- }
- virtual bg_check_types bg_check (int) {return bg_ok;}
- void clear_readahead ()
- {
- raixput = raixget = ralen = rabuflen = 0;
- rabuf = NULL;
- }
- void operator delete (void *p) {cfree (p);}
- virtual void set_eof () {}
- virtual int mkdir (mode_t mode);
- virtual int rmdir ();
- virtual __reg2 DIR *opendir (int fd);
- virtual __reg3 int readdir (DIR *, dirent *);
- virtual long telldir (DIR *);
- virtual void seekdir (DIR *, long);
- virtual void rewinddir (DIR *);
- virtual int closedir (DIR *);
- bool is_auto_device () {return isdevice () && !dev ().isfs ();}
- bool is_fs_special () {return pc.is_fs_special ();}
- bool issymlink () {return pc.issymlink ();}
- bool __reg2 device_access_denied (int);
- int __reg3 fhaccess (int flags, bool);
- virtual bool __reg1 has_ongoing_io () {return false;}
-
- fhandler_base (void *) {}
-
- virtual void copyto (fhandler_base *x)
- {
- x->pc.free_strings ();
- *reinterpret_cast<fhandler_base *> (x) = *this;
- x->reset (this);
- }
-
- virtual fhandler_base *clone (cygheap_types malloc_type = HEAP_FHANDLER)
- {
- void *ptr = (void *) ccalloc (malloc_type, 1, sizeof (fhandler_base));
- fhandler_base *fh = new (ptr) fhandler_base (ptr);
- copyto (fh);
- return fh;
- }
-};
-
-struct wsa_event
-{
- LONG serial_number;
- long events;
- int connect_errorcode;
- pid_t owner;
-};
-
-class fhandler_socket: public fhandler_base
-{
- private:
- int addr_family;
- int type;
- int connect_secret[4];
-
- wsa_event *wsock_events;
- HANDLE wsock_mtx;
- HANDLE wsock_evt;
- public:
- bool init_events ();
- int evaluate_events (const long event_mask, long &events, const bool erase);
- const HANDLE wsock_event () const { return wsock_evt; }
- const LONG serial_number () const { return wsock_events->serial_number; }
- private:
- int wait_for_events (const long event_mask, const DWORD flags);
- void release_events ();
-
- pid_t sec_pid;
- uid_t sec_uid;
- gid_t sec_gid;
- pid_t sec_peer_pid;
- uid_t sec_peer_uid;
- gid_t sec_peer_gid;
- void af_local_set_secret (char *);
- void af_local_setblocking (bool &, bool &);
- void af_local_unsetblocking (bool, bool);
- void af_local_set_cred ();
- void af_local_copy (fhandler_socket *);
- bool af_local_recv_secret ();
- bool af_local_send_secret ();
- bool af_local_recv_cred ();
- bool af_local_send_cred ();
- int af_local_accept ();
- public:
- int af_local_connect ();
- int af_local_set_no_getpeereid ();
- void af_local_set_sockpair_cred ();
-
- private:
- int _rmem;
- int _wmem;
- public:
- int &rmem () { return _rmem; }
- int &wmem () { return _wmem; }
- void rmem (int nrmem) { _rmem = nrmem; }
- void wmem (int nwmem) { _wmem = nwmem; }
-
- private:
- struct _WSAPROTOCOL_INFOW *prot_info_ptr;
- public:
- void init_fixup_before ();
- bool need_fixup_before () const {return prot_info_ptr != NULL;}
-
- private:
- char *sun_path;
- char *peer_sun_path;
- struct status_flags
- {
- unsigned async_io : 1; /* async I/O */
- unsigned saw_shutdown_read : 1; /* Socket saw a SHUT_RD */
- unsigned saw_shutdown_write : 1; /* Socket saw a SHUT_WR */
- unsigned saw_reuseaddr : 1; /* Socket saw SO_REUSEADDR call */
- unsigned connect_state : 3;
- unsigned no_getpeereid : 1;
- public:
- status_flags () :
- async_io (0), saw_shutdown_read (0), saw_shutdown_write (0),
- connect_state (unconnected), no_getpeereid (0)
- {}
- } status;
-
- public:
- fhandler_socket ();
- ~fhandler_socket ();
-/* Originally get_socket returned an int, which is not a good idea
- to cast a handle to on 64 bit. The right type here is very certainly
- SOCKET instead. On the other hand, we don't want to have to include
- winsock.h just to build fhandler.h. Therefore we define get_socket
- now only when building network related code. */
-#ifdef __INSIDE_CYGWIN_NET__
- SOCKET get_socket () { return (SOCKET) get_handle(); }
-#endif
- fhandler_socket *is_socket () { return this; }
-
- IMPLEMENT_STATUS_FLAG (bool, async_io)
- IMPLEMENT_STATUS_FLAG (bool, saw_shutdown_read)
- IMPLEMENT_STATUS_FLAG (bool, saw_shutdown_write)
- IMPLEMENT_STATUS_FLAG (bool, saw_reuseaddr)
- IMPLEMENT_STATUS_FLAG (conn_state, connect_state)
- IMPLEMENT_STATUS_FLAG (bool, no_getpeereid)
-
- int bind (const struct sockaddr *name, int namelen);
- int connect (const struct sockaddr *name, int namelen);
- int listen (int backlog);
- int accept4 (struct sockaddr *peer, int *len, int flags);
- int getsockname (struct sockaddr *name, int *namelen);
- int getpeername (struct sockaddr *name, int *namelen);
- int getpeereid (pid_t *pid, uid_t *euid, gid_t *egid);
-
- int open (int flags, mode_t mode = 0);
- void __reg3 read (void *ptr, size_t& len);
- ssize_t __stdcall readv (const struct iovec *, int iovcnt, ssize_t tot = -1);
- inline ssize_t __reg3 recv_internal (struct _WSAMSG *wsamsg, bool use_recvmsg);
- ssize_t recvfrom (void *ptr, size_t len, int flags,
- struct sockaddr *from, int *fromlen);
- ssize_t recvmsg (struct msghdr *msg, int flags);
-
- ssize_t __stdcall write (const void *ptr, size_t len);
- ssize_t __stdcall writev (const struct iovec *, int iovcnt, ssize_t tot = -1);
- inline ssize_t send_internal (struct _WSAMSG *wsamsg, int flags);
- ssize_t sendto (const void *ptr, size_t len, int flags,
- const struct sockaddr *to, int tolen);
- ssize_t sendmsg (const struct msghdr *msg, int flags);
-
- int ioctl (unsigned int cmd, void *);
- int fcntl (int cmd, intptr_t);
- off_t lseek (off_t, int)
- {
- set_errno (ESPIPE);
- return -1;
- }
- int shutdown (int how);
- int close ();
- void hclose (HANDLE) {close ();}
- int dup (fhandler_base *child, int);
-
- void set_close_on_exec (bool val);
- int fixup_before_fork_exec (DWORD);
- void fixup_after_fork (HANDLE);
- void fixup_after_exec ();
- char *get_proc_fd_name (char *buf);
-
- select_record *select_read (select_stuff *);
- select_record *select_write (select_stuff *);
- select_record *select_except (select_stuff *);
- void set_addr_family (int af) {addr_family = af;}
- int get_addr_family () {return addr_family;}
- void set_socket_type (int st) { type = st;}
- int get_socket_type () {return type;}
- void set_sun_path (const char *path);
- char *get_sun_path () {return sun_path;}
- void set_peer_sun_path (const char *path);
- char *get_peer_sun_path () {return peer_sun_path;}
-
- int __reg2 fstat (struct stat *buf);
- int __reg2 fstatvfs (struct statvfs *buf);
- int __reg1 fchmod (mode_t mode);
- int __reg2 fchown (uid_t uid, gid_t gid);
- int __reg3 facl (int, int, struct acl *);
- int __reg2 link (const char *);
-
- fhandler_socket (void *) {}
-
- void copyto (fhandler_base *x)
- {
- x->pc.free_strings ();
- *reinterpret_cast<fhandler_socket *> (x) = *this;
- x->reset (this);
- }
-
- fhandler_socket *clone (cygheap_types malloc_type = HEAP_FHANDLER)
- {
- void *ptr = (void *) ccalloc (malloc_type, 1, sizeof (fhandler_socket));
- fhandler_socket *fh = new (ptr) fhandler_socket (ptr);
- copyto (fh);
- return fh;
- }
-};
-
-class fhandler_base_overlapped: public fhandler_base
-{
- static HANDLE asio_done;
- static LONG asio_close_counter;
-protected:
- enum wait_return
- {
- overlapped_unknown = 0,
- overlapped_success,
- overlapped_nonblocking_no_data,
- overlapped_nullread,
- overlapped_error
- };
- bool io_pending;
- OVERLAPPED io_status;
- OVERLAPPED *overlapped;
- size_t max_atomic_write;
-public:
- wait_return __reg3 wait_overlapped (bool, bool, DWORD *, bool, DWORD = 0);
- int __reg1 setup_overlapped ();
- void __reg1 destroy_overlapped ();
- virtual void __reg3 raw_read (void *ptr, size_t& len);
- virtual ssize_t __reg3 raw_write (const void *ptr, size_t len);
- OVERLAPPED *&get_overlapped () {return overlapped;}
- OVERLAPPED *get_overlapped_buffer () {return &io_status;}
- void set_overlapped (OVERLAPPED *ov) {overlapped = ov;}
- fhandler_base_overlapped (): io_pending (false), overlapped (NULL), max_atomic_write (0)
- {
- memset (&io_status, 0, sizeof io_status);
- }
- bool __reg1 has_ongoing_io ();
-
- void fixup_after_fork (HANDLE);
- void fixup_after_exec ();
-
- int close ();
- int dup (fhandler_base *child, int);
-
- void check_later ();
- static void __reg1 flush_all_async_io ();;
-
- fhandler_base_overlapped (void *) {}
-
- virtual void copyto (fhandler_base *x)
- {
- x->pc.free_strings ();
- *reinterpret_cast<fhandler_base_overlapped *> (x) = *this;
- x->reset (this);
- }
-
- virtual fhandler_base_overlapped *clone (cygheap_types malloc_type = HEAP_FHANDLER)
- {
- void *ptr = (void *) ccalloc (malloc_type, 1, sizeof (fhandler_base_overlapped));
- fhandler_base_overlapped *fh = new (ptr) fhandler_base_overlapped (ptr);
- copyto (fh);
- return fh;
- }
-
- friend DWORD WINAPI flush_async_io (void *);
-};
-
-class fhandler_pipe: public fhandler_base_overlapped
-{
-private:
- pid_t popen_pid;
-public:
- fhandler_pipe ();
-
-
- bool ispipe() const { return true; }
-
- void set_popen_pid (pid_t pid) {popen_pid = pid;}
- pid_t get_popen_pid () const {return popen_pid;}
- off_t lseek (off_t offset, int whence);
- select_record *select_read (select_stuff *);
- select_record *select_write (select_stuff *);
- select_record *select_except (select_stuff *);
- char *get_proc_fd_name (char *buf);
- int open (int flags, mode_t mode = 0);
- int dup (fhandler_base *child, int);
- int ioctl (unsigned int cmd, void *);
- int __reg2 fstatvfs (struct statvfs *buf);
- int __reg3 fadvise (off_t, off_t, int);
- int __reg3 ftruncate (off_t, bool);
- int init (HANDLE, DWORD, mode_t);
- static int create (fhandler_pipe *[2], unsigned, int);
- static DWORD create (LPSECURITY_ATTRIBUTES, HANDLE *, HANDLE *, DWORD,
- const char *, DWORD);
- fhandler_pipe (void *) {}
-
- void copyto (fhandler_base *x)
- {
- x->pc.free_strings ();
- *reinterpret_cast<fhandler_pipe *> (x) = *this;
- x->reset (this);
- }
-
- fhandler_pipe *clone (cygheap_types malloc_type = HEAP_FHANDLER)
- {
- void *ptr = (void *) ccalloc (malloc_type, 1, sizeof (fhandler_pipe));
- fhandler_pipe *fh = new (ptr) fhandler_pipe (ptr);
- copyto (fh);
- return fh;
- }
-};
-
-class fhandler_fifo: public fhandler_base_overlapped
-{
- HANDLE read_ready;
- HANDLE write_ready;
- bool __reg2 wait (HANDLE);
- char __reg2 *fifo_name (char *, const char *);
-public:
- fhandler_fifo ();
- int open (int, mode_t);
- int close ();
- int dup (fhandler_base *child, int);
- bool isfifo () const { return true; }
- void set_close_on_exec (bool val);
- void __reg3 raw_read (void *ptr, size_t& ulen);
- bool arm (HANDLE h);
- void fixup_after_fork (HANDLE);
- int __reg2 fstatvfs (struct statvfs *buf);
- select_record *select_read (select_stuff *);
- select_record *select_write (select_stuff *);
- select_record *select_except (select_stuff *);
-
- fhandler_fifo (void *) {}
-
- void copyto (fhandler_base *x)
- {
- x->pc.free_strings ();
- *reinterpret_cast<fhandler_fifo *> (x) = *this;
- x->reset (this);
- }
-
- fhandler_fifo *clone (cygheap_types malloc_type = HEAP_FHANDLER)
- {
- void *ptr = (void *) ccalloc (malloc_type, 1, sizeof (fhandler_fifo));
- fhandler_fifo *fh = new (ptr) fhandler_fifo (ptr);
- copyto (fh);
- return fh;
- }
-};
-
-class fhandler_mailslot : public fhandler_base_overlapped
-{
- POBJECT_ATTRIBUTES get_object_attr (OBJECT_ATTRIBUTES &, PUNICODE_STRING, int);
- public:
- fhandler_mailslot ();
- int __reg2 fstat (struct stat *buf);
- int open (int flags, mode_t mode = 0);
- ssize_t __reg3 raw_write (const void *, size_t);
- int ioctl (unsigned int cmd, void *);
- select_record *select_read (select_stuff *);
-
- fhandler_mailslot (void *) {}
-
- void copyto (fhandler_base *x)
- {
- x->pc.free_strings ();
- *reinterpret_cast<fhandler_mailslot *> (x) = *this;
- x->reset (this);
- }
-
- fhandler_mailslot *clone (cygheap_types malloc_type = HEAP_FHANDLER)
- {
- void *ptr = (void *) ccalloc (malloc_type, 1, sizeof (fhandler_mailslot));
- fhandler_mailslot *fh = new (ptr) fhandler_mailslot (ptr);
- copyto (fh);
- return fh;
- }
-};
-
-class fhandler_dev_raw: public fhandler_base
-{
- protected:
- char *devbufalloc;
- char *devbuf;
- DWORD devbufalign;
- DWORD devbufsiz;
- DWORD devbufstart;
- DWORD devbufend;
- struct status_flags
- {
- unsigned lastblk_to_read : 1;
- public:
- status_flags () : lastblk_to_read (0) {}
- } status;
-
- IMPLEMENT_STATUS_FLAG (bool, lastblk_to_read)
-
- fhandler_dev_raw ();
-
- public:
- ~fhandler_dev_raw ();
-
- int open (int flags, mode_t mode = 0);
-
- int __reg2 fstat (struct stat *buf);
-
- int dup (fhandler_base *child, int);
- int ioctl (unsigned int cmd, void *buf);
-
- void fixup_after_fork (HANDLE);
- void fixup_after_exec ();
-
- fhandler_dev_raw (void *) {}
-
- void copyto (fhandler_base *x)
- {
- x->pc.free_strings ();
- *reinterpret_cast<fhandler_dev_raw *> (x) = *this;
- x->reset (this);
- }
-
- fhandler_dev_raw *clone (cygheap_types malloc_type = HEAP_FHANDLER)
- {
- void *ptr = (void *) ccalloc (malloc_type, 1, sizeof (fhandler_dev_raw));
- fhandler_dev_raw *fh = new (ptr) fhandler_dev_raw (ptr);
- copyto (fh);
- return fh;
- }
-};
-
-#define MAX_PARTITIONS 15
-
-struct part_t
-{
- LONG refcnt;
- HANDLE hdl[MAX_PARTITIONS];
-};
-
-class fhandler_dev_floppy: public fhandler_dev_raw
-{
- private:
- off_t drive_size;
- part_t *partitions;
- struct status_flags
- {
- unsigned eom_detected : 1;
- public:
- status_flags () : eom_detected (0) {}
- } status;
-
- IMPLEMENT_STATUS_FLAG (bool, eom_detected)
-
- inline off_t get_current_position ();
- int get_drive_info (struct hd_geometry *geo);
-
- int lock_partition (DWORD to_write);
-
- BOOL write_file (const void *buf, DWORD to_write, DWORD *written, int *err);
- BOOL read_file (void *buf, DWORD to_read, DWORD *read, int *err);
-
- public:
- fhandler_dev_floppy ();
-
- int open (int flags, mode_t mode = 0);
- int close ();
- int dup (fhandler_base *child, int);
- void __reg3 raw_read (void *ptr, size_t& ulen);
- ssize_t __reg3 raw_write (const void *ptr, size_t ulen);
- off_t lseek (off_t offset, int whence);
- int ioctl (unsigned int cmd, void *buf);
-
- fhandler_dev_floppy (void *) {}
-
- void copyto (fhandler_base *x)
- {
- x->pc.free_strings ();
- *reinterpret_cast<fhandler_dev_floppy *> (x) = *this;
- x->reset (this);
- }
-
- fhandler_dev_floppy *clone (cygheap_types malloc_type = HEAP_FHANDLER)
- {
- void *ptr = (void *) ccalloc (malloc_type, 1, sizeof (fhandler_dev_floppy));
- fhandler_dev_floppy *fh = new (ptr) fhandler_dev_floppy (ptr);
- copyto (fh);
- return fh;
- }
-};
-
-class fhandler_dev_tape: public fhandler_dev_raw
-{
- HANDLE mt_mtx;
- OVERLAPPED ov;
-
- bool is_rewind_device () { return get_minor () < 128; }
- unsigned int driveno () { return (unsigned int) get_minor () & 0x7f; }
- void drive_init ();
-
- inline bool _lock (bool);
- inline int unlock (int ret = 0);
-
- public:
- fhandler_dev_tape ();
-
- int open (int flags, mode_t mode = 0);
- virtual int close ();
-
- void __reg3 raw_read (void *ptr, size_t& ulen);
- ssize_t __reg3 raw_write (const void *ptr, size_t ulen);
-
- virtual off_t lseek (off_t offset, int whence);
-
- virtual int __reg2 fstat (struct stat *buf);
-
- virtual int dup (fhandler_base *child, int);
- virtual void fixup_after_fork (HANDLE parent);
- virtual void set_close_on_exec (bool val);
- virtual int ioctl (unsigned int cmd, void *buf);
-
- fhandler_dev_tape (void *) {}
-
- void copyto (fhandler_base *x)
- {
- x->pc.free_strings ();
- *reinterpret_cast<fhandler_dev_tape *> (x) = *this;
- x->reset (this);
- }
-
- fhandler_dev_tape *clone (cygheap_types malloc_type = HEAP_FHANDLER)
- {
- void *ptr = (void *) ccalloc (malloc_type, 1, sizeof (fhandler_dev_tape));
- fhandler_dev_tape *fh = new (ptr) fhandler_dev_tape (ptr);
- copyto (fh);
- return fh;
- }
-};
-
-/* Standard disk file */
-
-class fhandler_disk_file: public fhandler_base
-{
- HANDLE prw_handle;
- int __reg3 readdir_helper (DIR *, dirent *, DWORD, DWORD, PUNICODE_STRING fname);
-
- int prw_open (bool);
-
- public:
- fhandler_disk_file ();
- fhandler_disk_file (path_conv &pc);
-
- int open (int flags, mode_t mode);
- int close ();
- int fcntl (int cmd, intptr_t);
- int dup (fhandler_base *child, int);
- void fixup_after_fork (HANDLE parent);
- int mand_lock (int, struct flock *);
- bool isdevice () const { return false; }
- int __reg2 fstat (struct stat *buf);
- int __reg1 fchmod (mode_t mode);
- int __reg2 fchown (uid_t uid, gid_t gid);
- int __reg3 facl (int, int, struct acl *);
- ssize_t __reg3 fgetxattr (const char *, void *, size_t);
- int __reg3 fsetxattr (const char *, const void *, size_t, int);
- int __reg3 fadvise (off_t, off_t, int);
- int __reg3 ftruncate (off_t, bool);
- int __reg2 link (const char *);
- int __reg2 utimens (const struct timespec *);
- int __reg2 fstatvfs (struct statvfs *buf);
-
- HANDLE mmap (caddr_t *addr, size_t len, int prot, int flags, off_t off);
- int munmap (HANDLE h, caddr_t addr, size_t len);
- int msync (HANDLE h, caddr_t addr, size_t len, int flags);
- bool fixup_mmap_after_fork (HANDLE h, int prot, int flags,
- off_t offset, DWORD size, void *address);
- int mkdir (mode_t mode);
- int rmdir ();
- DIR __reg2 *opendir (int fd);
- int __reg3 readdir (DIR *, dirent *);
- long telldir (DIR *);
- void seekdir (DIR *, long);
- void rewinddir (DIR *);
- int closedir (DIR *);
-
- ssize_t __reg3 pread (void *, size_t, off_t);
- ssize_t __reg3 pwrite (void *, size_t, off_t);
-
- fhandler_disk_file (void *) {}
- dev_t get_dev () { return pc.fs_serial_number (); }
-
- void copyto (fhandler_base *x)
- {
- x->pc.free_strings ();
- *reinterpret_cast<fhandler_disk_file *> (x) = *this;
- x->reset (this);
- }
-
- fhandler_disk_file *clone (cygheap_types malloc_type = HEAP_FHANDLER)
- {
- void *ptr = (void *) ccalloc (malloc_type, 1, sizeof (fhandler_disk_file));
- fhandler_disk_file *fh = new (ptr) fhandler_disk_file (ptr);
- copyto (fh);
- return fh;
- }
-};
-
-class fhandler_dev: public fhandler_disk_file
-{
- const struct device *devidx;
- bool dir_exists;
-public:
- fhandler_dev ();
- int open (int flags, mode_t mode);
- int close ();
- int __reg2 fstat (struct stat *buf);
- int __reg2 fstatvfs (struct statvfs *buf);
- DIR __reg2 *opendir (int fd);
- int __reg3 readdir (DIR *, dirent *);
- void rewinddir (DIR *);
-
- fhandler_dev (void *) {}
- dev_t get_dev () { return dir_exists ? pc.fs_serial_number ()
- : get_device (); }
-
- void copyto (fhandler_base *x)
- {
- x->pc.free_strings ();
- *reinterpret_cast<fhandler_dev *> (x) = *this;
- x->reset (this);
- }
-
- fhandler_dev *clone (cygheap_types malloc_type = HEAP_FHANDLER)
- {
- void *ptr = (void *) ccalloc (malloc_type, 1, sizeof (fhandler_dev));
- fhandler_dev *fh = new (ptr) fhandler_dev (ptr);
- copyto (fh);
- return fh;
- }
-};
-
-class fhandler_cygdrive: public fhandler_disk_file
-{
- enum
- {
- DRVSZ = sizeof ("x:\\")
- };
- int ndrives;
- const char *pdrive;
- char pdrive_buf[1 + (2 * 26 * DRVSZ)];
- void set_drives ();
- public:
- fhandler_cygdrive ();
- int open (int flags, mode_t mode);
- DIR __reg2 *opendir (int fd);
- int __reg3 readdir (DIR *, dirent *);
- void rewinddir (DIR *);
- int closedir (DIR *);
- int __reg2 fstat (struct stat *buf);
- int __reg2 fstatvfs (struct statvfs *buf);
-
- fhandler_cygdrive (void *) {}
- dev_t get_dev () { return get_device (); }
-
- void copyto (fhandler_base *x)
- {
- x->pc.free_strings ();
- *reinterpret_cast<fhandler_cygdrive *> (x) = *this;
- x->reset (this);
- }
-
- fhandler_cygdrive *clone (cygheap_types malloc_type = HEAP_FHANDLER)
- {
- void *ptr = (void *) ccalloc (malloc_type, 1, sizeof (fhandler_cygdrive));
- fhandler_cygdrive *fh = new (ptr) fhandler_cygdrive (ptr);
- copyto (fh);
- return fh;
- }
-};
-
-class fhandler_serial: public fhandler_base
-{
- private:
- size_t vmin_; /* from termios */
- unsigned int vtime_; /* from termios */
- pid_t pgrp_;
- int rts; /* for Windows 9x purposes only */
- int dtr; /* for Windows 9x purposes only */
-
- public:
- int overlapped_armed;
- OVERLAPPED io_status;
- DWORD ev;
-
- /* Constructor */
- fhandler_serial ();
-
- int open (int flags, mode_t mode);
- int close ();
- int init (HANDLE h, DWORD a, mode_t flags);
- void overlapped_setup ();
- int dup (fhandler_base *child, int);
- void __reg3 raw_read (void *ptr, size_t& ulen);
- ssize_t __reg3 raw_write (const void *ptr, size_t ulen);
- int tcsendbreak (int);
- int tcdrain ();
- int tcflow (int);
- int ioctl (unsigned int cmd, void *);
- int switch_modem_lines (int set, int clr);
- int tcsetattr (int a, const struct termios *t);
- int tcgetattr (struct termios *t);
- off_t lseek (off_t, int)
- {
- set_errno (ESPIPE);
- return -1;
- }
- int tcflush (int);
- bool is_tty () const { return true; }
- void fixup_after_fork (HANDLE parent);
- void fixup_after_exec ();
-
- /* We maintain a pgrp so that tcsetpgrp and tcgetpgrp work, but we
- don't use it for permissions checking. fhandler_pty_slave does
- permission checking on pgrps. */
- virtual int tcgetpgrp () { return pgrp_; }
- virtual int tcsetpgrp (const pid_t pid) { pgrp_ = pid; return 0; }
- select_record *select_read (select_stuff *);
- select_record *select_write (select_stuff *);
- select_record *select_except (select_stuff *);
-
- fhandler_serial (void *) {}
-
- void copyto (fhandler_base *x)
- {
- x->pc.free_strings ();
- *reinterpret_cast<fhandler_serial *> (x) = *this;
- x->reset (this);
- }
-
- fhandler_serial *clone (cygheap_types malloc_type = HEAP_FHANDLER)
- {
- void *ptr = (void *) ccalloc (malloc_type, 1, sizeof (fhandler_serial));
- fhandler_serial *fh = new (ptr) fhandler_serial (ptr);
- copyto (fh);
- return fh;
- }
-};
-
-#define acquire_output_mutex(ms) \
- __acquire_output_mutex (__PRETTY_FUNCTION__, __LINE__, ms)
-
-#define release_output_mutex() \
- __release_output_mutex (__PRETTY_FUNCTION__, __LINE__)
-
-class tty;
-class tty_min;
-class fhandler_termios: public fhandler_base
-{
- private:
- HANDLE output_handle;
- protected:
- virtual void doecho (const void *, DWORD) {};
- virtual int accept_input () {return 1;};
- int ioctl (int, void *);
- tty_min *_tc;
- tty *get_ttyp () {return (tty *) tc ();}
- public:
- tty_min*& tc () {return _tc;}
- fhandler_termios () :
- fhandler_base ()
- {
- need_fork_fixup (true);
- }
- HANDLE& get_output_handle () { return output_handle; }
- line_edit_status line_edit (const char *rptr, size_t nread, termios&,
- ssize_t *bytes_read = NULL);
- void set_output_handle (HANDLE h) { output_handle = h; }
- void tcinit (bool force);
- bool is_tty () const { return true; }
- void sigflush ();
- int tcgetpgrp ();
- int tcsetpgrp (int pid);
- bg_check_types bg_check (int sig);
- virtual DWORD __acquire_output_mutex (const char *fn, int ln, DWORD ms) {return 1;}
- virtual void __release_output_mutex (const char *fn, int ln) {}
- void echo_erase (int force = 0);
- virtual off_t lseek (off_t, int);
- pid_t tcgetsid ();
-
- fhandler_termios (void *) {}
-
- virtual void copyto (fhandler_base *x)
- {
- x->pc.free_strings ();
- *reinterpret_cast<fhandler_termios *> (x) = *this;
- x->reset (this);
- }
-
- virtual fhandler_termios *clone (cygheap_types malloc_type = HEAP_FHANDLER)
- {
- void *ptr = (void *) ccalloc (malloc_type, 1, sizeof (fhandler_termios));
- fhandler_termios *fh = new (ptr) fhandler_termios (ptr);
- copyto (fh);
- return fh;
- }
-};
-
-enum ansi_intensity
-{
- INTENSITY_INVISIBLE,
- INTENSITY_DIM,
- INTENSITY_NORMAL,
- INTENSITY_BOLD
-};
-
-#define normal 0
-#define gotesc 1
-#define gotsquare 2
-#define gotarg1 3
-#define gotrsquare 4
-#define gotcommand 5
-#define gettitle 6
-#define eattitle 7
-#define gotparen 8
-#define gotrparen 9
-#define MAXARGS 10
-
-enum cltype
-{
- cl_curr_pos = 1,
- cl_disp_beg,
- cl_disp_end,
- cl_buf_beg,
- cl_buf_end
-};
-
-class dev_console
-{
- WORD default_color, underline_color, dim_color;
-
- /* Used to determine if an input keystroke should be modified with META. */
- int meta_mask;
-
-/* Output state */
- int state;
- int args[MAXARGS];
- int nargs;
- unsigned rarg;
- bool saw_question_mark;
- bool saw_greater_than_sign;
- bool saw_space;
- bool vt100_graphics_mode_G0;
- bool vt100_graphics_mode_G1;
- bool iso_2022_G1;
- bool alternate_charset_active;
- bool metabit;
- char backspace_keycode;
-
- char my_title_buf [TITLESIZE + 1];
-
- WORD current_win32_attr;
- ansi_intensity intensity;
- bool underline, blink, reverse;
- WORD fg, bg;
-
- /* saved cursor coordinates */
- int savex, savey;
-
-
- struct
- {
- short Top;
- short Bottom;
- } scroll_region;
-
- CONSOLE_SCREEN_BUFFER_INFO b;
- COORD dwWinSize;
- COORD dwEnd;
-
- /* saved screen */
- COORD save_bufsize;
- PCHAR_INFO save_buf;
- COORD save_cursor;
- SHORT save_top;
-
- COORD dwLastCursorPosition;
- COORD dwMousePosition; /* scroll-adjusted coord of mouse event */
- COORD dwLastMousePosition; /* scroll-adjusted coord of previous mouse event */
- DWORD dwLastButtonState; /* (not noting mouse wheel events) */
- int last_button_code; /* transformed mouse report button code */
- int nModifiers;
-
- bool insert_mode;
- int use_mouse;
- bool ext_mouse_mode5;
- bool ext_mouse_mode6;
- bool ext_mouse_mode15;
- bool use_focus;
- bool raw_win32_keyboard_mode;
-
- inline UINT get_console_cp ();
- DWORD con_to_str (char *d, int dlen, WCHAR w);
- DWORD str_to_con (mbtowc_p, const char *, PWCHAR d, const char *s, DWORD sz);
- void set_color (HANDLE);
- void set_default_attr ();
- int set_cl_x (cltype);
- int set_cl_y (cltype);
- bool fillin (HANDLE);
- bool __reg3 scroll_window (HANDLE, int, int, int, int);
- void __reg3 scroll_buffer (HANDLE, int, int, int, int, int, int);
- void __reg3 clear_screen (HANDLE, int, int, int, int);
- void __reg3 save_restore (HANDLE, char);
-
- friend class fhandler_console;
-};
-
-/* This is a input and output console handle */
-class fhandler_console: public fhandler_termios
-{
-public:
- struct console_state
- {
- tty_min tty_min_state;
- dev_console con;
- };
-private:
- static const unsigned MAX_WRITE_CHARS;
- static console_state *shared_console_info;
- static bool invisible_console;
-
- /* Used when we encounter a truncated multi-byte sequence. The
- lead bytes are stored here and revisited in the next write call. */
- struct {
- int len;
- unsigned char buf[4]; /* Max len of valid UTF-8 sequence. */
- } trunc_buf;
- PWCHAR write_buf;
-
-/* Output calls */
- void set_default_attr ();
-
- void scroll_buffer (int, int, int, int, int, int);
- void scroll_buffer_screen (int, int, int, int, int, int);
- void __reg3 clear_screen (cltype, cltype, cltype, cltype);
- void __reg3 cursor_set (bool, int, int);
- void __reg3 cursor_get (int *, int *);
- void __reg3 cursor_rel (int, int);
- inline void write_replacement_char ();
- inline bool write_console (PWCHAR, DWORD, DWORD&);
- const unsigned char *write_normal (unsigned const char*, unsigned const char *);
- void char_command (char);
- bool set_raw_win32_keyboard_mode (bool);
- int output_tcsetattr (int a, const struct termios *t);
-
-/* Input calls */
- int igncr_enabled ();
- int input_tcsetattr (int a, const struct termios *t);
- void set_cursor_maybe ();
- static bool create_invisible_console (HWINSTA);
- static bool create_invisible_console_workaround ();
- static console_state *open_shared_console (HWND, HANDLE&, bool&);
-
- public:
- static pid_t tc_getpgid ()
- {
- return shared_console_info ? shared_console_info->tty_min_state.getpgid () : myself->pgid;
- }
- fhandler_console (fh_devices);
- static console_state *open_shared_console (HWND hw, HANDLE& h)
- {
- bool createit = false;
- return open_shared_console (hw, h, createit);
- }
-
- fhandler_console* is_console () { return this; }
-
- bool use_archetype () const {return true;}
-
- int open (int flags, mode_t mode);
- void open_setup (int flags);
- int dup (fhandler_base *, int);
-
- void __reg3 read (void *ptr, size_t& len);
- ssize_t __stdcall write (const void *ptr, size_t len);
- void doecho (const void *str, DWORD len) { (void) write (str, len); }
- int close ();
- static bool exists () {return !!GetConsoleCP ();}
-
- int tcflush (int);
- int tcsetattr (int a, const struct termios *t);
- int tcgetattr (struct termios *t);
-
- int ioctl (unsigned int cmd, void *);
- int init (HANDLE, DWORD, mode_t);
- bool mouse_aware (MOUSE_EVENT_RECORD& mouse_event);
- bool focus_aware () {return shared_console_info->con.use_focus;}
-
- select_record *select_read (select_stuff *);
- select_record *select_write (select_stuff *);
- select_record *select_except (select_stuff *);
- void fixup_after_fork_exec (bool);
- void fixup_after_exec () {fixup_after_fork_exec (true);}
- void fixup_after_fork (HANDLE) {fixup_after_fork_exec (false);}
- void set_close_on_exec (bool val);
- void set_input_state ();
- void send_winch_maybe ();
- void setup ();
- bool set_unit ();
- static bool need_invisible ();
- static void free_console ();
-
- fhandler_console (void *) {}
-
- void copyto (fhandler_base *x)
- {
- x->pc.free_strings ();
- *reinterpret_cast<fhandler_console *> (x) = *this;
- x->reset (this);
- }
-
- fhandler_console *clone (cygheap_types malloc_type = HEAP_FHANDLER)
- {
- void *ptr = (void *) ccalloc (malloc_type, 1, sizeof (fhandler_console));
- fhandler_console *fh = new (ptr) fhandler_console (ptr);
- copyto (fh);
- return fh;
- }
- friend tty_min * tty_list::get_cttyp ();
-};
-
-class fhandler_pty_common: public fhandler_termios
-{
- public:
- fhandler_pty_common ()
- : fhandler_termios (),
- output_mutex (NULL),
- input_mutex (NULL), input_available_event (NULL)
- {
- pc.file_attributes (FILE_ATTRIBUTE_NORMAL);
- }
- static const unsigned pipesize = 128 * 1024;
- HANDLE output_mutex, input_mutex;
- HANDLE input_available_event;
-
- bool use_archetype () const {return true;}
- DWORD __acquire_output_mutex (const char *fn, int ln, DWORD ms);
- void __release_output_mutex (const char *fn, int ln);
-
- int close ();
- off_t lseek (off_t, int);
- bool bytes_available (DWORD& n);
- void set_close_on_exec (bool val);
- select_record *select_read (select_stuff *);
- select_record *select_write (select_stuff *);
- select_record *select_except (select_stuff *);
-
- fhandler_pty_common (void *) {}
-
- virtual void copyto (fhandler_base *x)
- {
- x->pc.free_strings ();
- *reinterpret_cast<fhandler_pty_common *> (x) = *this;
- x->reset (this);
- }
-
- virtual fhandler_pty_common *clone (cygheap_types malloc_type = HEAP_FHANDLER)
- {
- void *ptr = (void *) ccalloc (malloc_type, 1, sizeof (fhandler_pty_common));
- fhandler_pty_common *fh = new (ptr) fhandler_pty_common (ptr);
- copyto (fh);
- return fh;
- }
-};
-
-class fhandler_pty_slave: public fhandler_pty_common
-{
- HANDLE inuse; // used to indicate that a tty is in use
-
- /* Helper functions for fchmod and fchown. */
- bool fch_open_handles (bool chown);
- int fch_set_sd (security_descriptor &sd, bool chown);
- void fch_close_handles ();
-
- public:
- /* Constructor */
- fhandler_pty_slave (int);
-
- int open (int flags, mode_t mode = 0);
- void open_setup (int flags);
- ssize_t __stdcall write (const void *ptr, size_t len);
- void __reg3 read (void *ptr, size_t& len);
- int init (HANDLE, DWORD, mode_t);
-
- int tcsetattr (int a, const struct termios *t);
- int tcgetattr (struct termios *t);
- int tcflush (int);
- int ioctl (unsigned int cmd, void *);
- int close ();
- void cleanup ();
- int dup (fhandler_base *child, int);
- void fixup_after_fork (HANDLE parent);
- void fixup_after_exec ();
-
- select_record *select_read (select_stuff *);
- virtual char const *ttyname () { return pc.dev.name; }
- int __reg2 fstat (struct stat *buf);
- int __reg1 fchmod (mode_t mode);
- int __reg2 fchown (uid_t uid, gid_t gid);
-
- fhandler_pty_slave (void *) {}
-
- void copyto (fhandler_base *x)
- {
- x->pc.free_strings ();
- *reinterpret_cast<fhandler_pty_slave *> (x) = *this;
- x->reset (this);
- }
-
- fhandler_pty_slave *clone (cygheap_types malloc_type = HEAP_FHANDLER)
- {
- void *ptr = (void *) ccalloc (malloc_type, 1, sizeof (fhandler_pty_slave));
- fhandler_pty_slave *fh = new (ptr) fhandler_pty_slave (ptr);
- copyto (fh);
- return fh;
- }
-};
-
-#define __ptsname(buf, unit) __small_sprintf ((buf), "/dev/pty%d", (unit))
-class fhandler_pty_master: public fhandler_pty_common
-{
- int pktmode; // non-zero if pty in a packet mode.
- HANDLE master_ctl; // Control socket for handle duplication
- cygthread *master_thread; // Master control thread
- HANDLE from_master, to_master;
- DWORD dwProcessId; // Owner of master handles
-
-public:
- int need_nl; // Next read should start with \n
-
- /* Constructor */
- fhandler_pty_master (int);
-
- DWORD pty_master_thread ();
- int process_slave_output (char *buf, size_t len, int pktmode_on);
- void doecho (const void *str, DWORD len);
- int accept_input ();
- int open (int flags, mode_t mode = 0);
- void open_setup (int flags);
- ssize_t __stdcall write (const void *ptr, size_t len);
- void __reg3 read (void *ptr, size_t& len);
- int close ();
- void cleanup ();
-
- int tcsetattr (int a, const struct termios *t);
- int tcgetattr (struct termios *t);
- int tcflush (int);
- int ioctl (unsigned int cmd, void *);
-
- int ptsname_r (char *, size_t);
-
- bool hit_eof ();
- bool setup ();
- int dup (fhandler_base *, int);
- void fixup_after_fork (HANDLE parent);
- void fixup_after_exec ();
- int tcgetpgrp ();
- void flush_to_slave ();
-
- fhandler_pty_master (void *) {}
-
- void copyto (fhandler_base *x)
- {
- x->pc.free_strings ();
- *reinterpret_cast<fhandler_pty_master *> (x) = *this;
- x->reset (this);
- }
-
- fhandler_pty_master *clone (cygheap_types malloc_type = HEAP_FHANDLER)
- {
- void *ptr = (void *) ccalloc (malloc_type, 1, sizeof (fhandler_pty_master));
- fhandler_pty_master *fh = new (ptr) fhandler_pty_master (ptr);
- copyto (fh);
- return fh;
- }
-};
-
-class fhandler_dev_null: public fhandler_base
-{
- public:
- fhandler_dev_null ();
-
- select_record *select_read (select_stuff *);
- select_record *select_write (select_stuff *);
- select_record *select_except (select_stuff *);
-
- fhandler_dev_null (void *) {}
-
- void copyto (fhandler_base *x)
- {
- x->pc.free_strings ();
- *reinterpret_cast<fhandler_dev_null *> (x) = *this;
- x->reset (this);
- }
-
- fhandler_dev_null *clone (cygheap_types malloc_type = HEAP_FHANDLER)
- {
- void *ptr = (void *) ccalloc (malloc_type, 1, sizeof (fhandler_dev_null));
- fhandler_dev_null *fh = new (ptr) fhandler_dev_null (ptr);
- copyto (fh);
- return fh;
- }
-};
-
-class fhandler_dev_zero: public fhandler_base
-{
- public:
- fhandler_dev_zero ();
- ssize_t __stdcall write (const void *ptr, size_t len);
- void __reg3 read (void *ptr, size_t& len);
- off_t lseek (off_t, int) { return 0; }
-
- virtual HANDLE mmap (caddr_t *addr, size_t len, int prot,
- int flags, off_t off);
- virtual int munmap (HANDLE h, caddr_t addr, size_t len);
- virtual int msync (HANDLE h, caddr_t addr, size_t len, int flags);
- virtual bool fixup_mmap_after_fork (HANDLE h, int prot, int flags,
- off_t offset, DWORD size,
- void *address);
-
- fhandler_dev_zero (void *) {}
-
- void copyto (fhandler_base *x)
- {
- x->pc.free_strings ();
- *reinterpret_cast<fhandler_dev_zero *> (x) = *this;
- x->reset (this);
- }
-
- fhandler_dev_zero *clone (cygheap_types malloc_type = HEAP_FHANDLER)
- {
- void *ptr = (void *) ccalloc (malloc_type, 1, sizeof (fhandler_dev_zero));
- fhandler_dev_zero *fh = new (ptr) fhandler_dev_zero (ptr);
- copyto (fh);
- return fh;
- }
-};
-
-class fhandler_dev_random: public fhandler_base
-{
- protected:
- uint32_t pseudo;
-
- int pseudo_write (const void *ptr, size_t len);
- int pseudo_read (void *ptr, size_t len);
-
- public:
- ssize_t __stdcall write (const void *ptr, size_t len);
- void __reg3 read (void *ptr, size_t& len);
- off_t lseek (off_t, int) { return 0; }
-
- static bool crypt_gen_random (void *ptr, size_t len);
-
- fhandler_dev_random () : fhandler_base () {}
- fhandler_dev_random (void *) {}
-
- void copyto (fhandler_base *x)
- {
- x->pc.free_strings ();
- *reinterpret_cast<fhandler_dev_random *> (x) = *this;
- x->reset (this);
- }
-
- fhandler_dev_random *clone (cygheap_types malloc_type = HEAP_FHANDLER)
- {
- void *ptr = (void *) ccalloc (malloc_type, 1, sizeof (fhandler_dev_random));
- fhandler_dev_random *fh = new (ptr) fhandler_dev_random (ptr);
- copyto (fh);
- return fh;
- }
-};
-
-class fhandler_dev_clipboard: public fhandler_base
-{
- UINT cygnativeformat;
- off_t pos;
- void *membuffer;
- size_t msize;
- int set_clipboard (const void *buf, size_t len);
-
- public:
- fhandler_dev_clipboard ();
- int is_windows () { return 1; }
- int __reg2 fstat (struct stat *buf);
- ssize_t __stdcall write (const void *ptr, size_t len);
- void __reg3 read (void *ptr, size_t& len);
- off_t lseek (off_t offset, int whence);
- int close ();
-
- int dup (fhandler_base *child, int);
- void fixup_after_exec ();
-
- fhandler_dev_clipboard (void *) {}
-
- void copyto (fhandler_base *x)
- {
- x->pc.free_strings ();
- *reinterpret_cast<fhandler_dev_clipboard *> (x) = *this;
- x->reset (this);
- }
-
- fhandler_dev_clipboard *clone (cygheap_types malloc_type = HEAP_FHANDLER)
- {
- void *ptr = (void *) ccalloc (malloc_type, 1, sizeof (fhandler_dev_clipboard));
- fhandler_dev_clipboard *fh = new (ptr) fhandler_dev_clipboard (ptr);
- copyto (fh);
- return fh;
- }
-};
-
-class fhandler_windows: public fhandler_base
-{
- private:
- HWND hWnd_; // the window whose messages are to be retrieved by read() call
- int method_; // write method (Post or Send)
- public:
- fhandler_windows ();
- int is_windows () { return 1; }
- HWND get_hwnd () { return hWnd_; }
- int open (int flags, mode_t mode = 0);
- ssize_t __stdcall write (const void *ptr, size_t len);
- void __reg3 read (void *ptr, size_t& len);
- int ioctl (unsigned int cmd, void *);
- off_t lseek (off_t, int) { return 0; }
- int close () { return 0; }
-
- select_record *select_read (select_stuff *);
- select_record *select_write (select_stuff *);
- select_record *select_except (select_stuff *);
-
- fhandler_windows (void *) {}
-
- void copyto (fhandler_base *x)
- {
- x->pc.free_strings ();
- *reinterpret_cast<fhandler_windows *> (x) = *this;
- x->reset (this);
- }
-
- fhandler_windows *clone (cygheap_types malloc_type = HEAP_FHANDLER)
- {
- void *ptr = (void *) ccalloc (malloc_type, 1, sizeof (fhandler_windows));
- fhandler_windows *fh = new (ptr) fhandler_windows (ptr);
- copyto (fh);
- return fh;
- }
-};
-
-class fhandler_dev_dsp: public fhandler_base
-{
- public:
- class Audio;
- class Audio_out;
- class Audio_in;
- private:
- int audioformat_;
- int audiofreq_;
- int audiobits_;
- int audiochannels_;
- Audio_out *audio_out_;
- Audio_in *audio_in_;
- public:
- fhandler_dev_dsp ();
- fhandler_dev_dsp *base () const {return (fhandler_dev_dsp *)archetype;}
-
- int open (int, mode_t mode = 0);
- ssize_t __stdcall write (const void *, size_t);
- void __reg3 read (void *, size_t&);
- int ioctl (unsigned int, void *);
- int close ();
- void fixup_after_fork (HANDLE);
- void fixup_after_exec ();
-
- private:
- ssize_t __stdcall _write (const void *, size_t);
- void __reg3 _read (void *, size_t&);
- int _ioctl (unsigned int, void *);
- void _fixup_after_fork (HANDLE);
- void _fixup_after_exec ();
-
- void __reg1 close_audio_in ();
- void __reg2 close_audio_out (bool = false);
- bool use_archetype () const {return true;}
-
- fhandler_dev_dsp (void *) {}
-
- void copyto (fhandler_base *x)
- {
- x->pc.free_strings ();
- *reinterpret_cast<fhandler_dev_dsp *> (x) = *this;
- x->reset (this);
- }
-
- fhandler_dev_dsp *clone (cygheap_types malloc_type = HEAP_FHANDLER)
- {
- void *ptr = (void *) ccalloc (malloc_type, 1, sizeof (fhandler_dev_dsp));
- fhandler_dev_dsp *fh = new (ptr) fhandler_dev_dsp (ptr);
- copyto (fh);
- return fh;
- }
-};
-
-class fhandler_virtual : public fhandler_base
-{
- protected:
- char *filebuf;
- off_t filesize;
- off_t position;
- int fileid; // unique within each class
- public:
-
- fhandler_virtual ();
- virtual ~fhandler_virtual();
-
- virtual virtual_ftype_t exists();
- DIR __reg2 *opendir (int fd);
- long telldir (DIR *);
- void seekdir (DIR *, long);
- void rewinddir (DIR *);
- int closedir (DIR *);
- ssize_t __stdcall write (const void *ptr, size_t len);
- void __reg3 read (void *ptr, size_t& len);
- off_t lseek (off_t, int);
- int dup (fhandler_base *child, int);
- int open (int flags, mode_t mode = 0);
- int close ();
- int __reg2 fstatvfs (struct statvfs *buf);
- int __reg1 fchmod (mode_t mode);
- int __reg2 fchown (uid_t uid, gid_t gid);
- int __reg3 facl (int, int, struct acl *);
- virtual bool fill_filebuf ();
- char *get_filebuf () { return filebuf; }
- void fixup_after_exec ();
-
- fhandler_virtual (void *) {}
-
- virtual void copyto (fhandler_base *x)
- {
- x->pc.free_strings ();
- *reinterpret_cast<fhandler_virtual *> (x) = *this;
- x->reset (this);
- }
-
- virtual fhandler_virtual *clone (cygheap_types malloc_type = HEAP_FHANDLER)
- {
- void *ptr = (void *) ccalloc (malloc_type, 1, sizeof (fhandler_virtual));
- fhandler_virtual *fh = new (ptr) fhandler_virtual (ptr);
- copyto (fh);
- return fh;
- }
-};
-
-class fhandler_proc: public fhandler_virtual
-{
- public:
- fhandler_proc ();
- virtual_ftype_t exists();
- DIR __reg2 *opendir (int fd);
- int closedir (DIR *);
- int __reg3 readdir (DIR *, dirent *);
- static fh_devices get_proc_fhandler (const char *path);
-
- int open (int flags, mode_t mode = 0);
- int __reg2 fstat (struct stat *buf);
- bool fill_filebuf ();
-
- fhandler_proc (void *) {}
-
- virtual void copyto (fhandler_base *x)
- {
- x->pc.free_strings ();
- *reinterpret_cast<fhandler_proc *> (x) = *this;
- x->reset (this);
- }
-
- virtual fhandler_proc *clone (cygheap_types malloc_type = HEAP_FHANDLER)
- {
- void *ptr = (void *) ccalloc (malloc_type, 1, sizeof (fhandler_proc));
- fhandler_proc *fh = new (ptr) fhandler_proc (ptr);
- copyto (fh);
- return fh;
- }
-};
-
-class fhandler_procsys: public fhandler_virtual
-{
- public:
- fhandler_procsys ();
- virtual_ftype_t __reg2 exists(struct stat *buf);
- virtual_ftype_t exists();
- DIR __reg2 *opendir (int fd);
- int __reg3 readdir (DIR *, dirent *);
- long telldir (DIR *);
- void seekdir (DIR *, long);
- int closedir (DIR *);
- int open (int flags, mode_t mode = 0);
- int close ();
- void __reg3 read (void *ptr, size_t& len);
- ssize_t __stdcall write (const void *ptr, size_t len);
- int __reg2 fstat (struct stat *buf);
- bool fill_filebuf ();
-
- fhandler_procsys (void *) {}
-
- void copyto (fhandler_base *x)
- {
- x->pc.free_strings ();
- *reinterpret_cast<fhandler_procsys *> (x) = *this;
- x->reset (this);
- }
-
- fhandler_procsys *clone (cygheap_types malloc_type = HEAP_FHANDLER)
- {
- void *ptr = (void *) ccalloc (malloc_type, 1, sizeof (fhandler_procsys));
- fhandler_procsys *fh = new (ptr) fhandler_procsys (ptr);
- copyto (fh);
- return fh;
- }
-};
-
-class fhandler_procsysvipc: public fhandler_proc
-{
- pid_t pid;
- public:
- fhandler_procsysvipc ();
- virtual_ftype_t exists();
- int __reg3 readdir (DIR *, dirent *);
- int open (int flags, mode_t mode = 0);
- int __reg2 fstat (struct stat *buf);
- bool fill_filebuf ();
-
- fhandler_procsysvipc (void *) {}
-
- void copyto (fhandler_base *x)
- {
- x->pc.free_strings ();
- *reinterpret_cast<fhandler_procsysvipc *> (x) = *this;
- x->reset (this);
- }
-
- fhandler_procsysvipc *clone (cygheap_types malloc_type = HEAP_FHANDLER)
- {
- void *ptr = (void *) ccalloc (malloc_type, 1, sizeof (fhandler_procsysvipc));
- fhandler_procsysvipc *fh = new (ptr) fhandler_procsysvipc (ptr);
- copyto (fh);
- return fh;
- }
-};
-
-class fhandler_netdrive: public fhandler_virtual
-{
- public:
- fhandler_netdrive ();
- virtual_ftype_t exists();
- int __reg3 readdir (DIR *, dirent *);
- void seekdir (DIR *, long);
- void rewinddir (DIR *);
- int closedir (DIR *);
- int open (int flags, mode_t mode = 0);
- int close ();
- int __reg2 fstat (struct stat *buf);
-
- fhandler_netdrive (void *) {}
-
- void copyto (fhandler_base *x)
- {
- x->pc.free_strings ();
- *reinterpret_cast<fhandler_netdrive *> (x) = *this;
- x->reset (this);
- }
-
- fhandler_netdrive *clone (cygheap_types malloc_type = HEAP_FHANDLER)
- {
- void *ptr = (void *) ccalloc (malloc_type, 1, sizeof (fhandler_netdrive));
- fhandler_netdrive *fh = new (ptr) fhandler_netdrive (ptr);
- copyto (fh);
- return fh;
- }
-};
-
-class fhandler_registry: public fhandler_proc
-{
- private:
- wchar_t *value_name;
- DWORD wow64;
- int prefix_len;
- public:
- fhandler_registry ();
- void set_name (path_conv &pc);
- virtual_ftype_t exists();
- DIR __reg2 *opendir (int fd);
- int __reg3 readdir (DIR *, dirent *);
- long telldir (DIR *);
- void seekdir (DIR *, long);
- void rewinddir (DIR *);
- int closedir (DIR *);
-
- int open (int flags, mode_t mode = 0);
- int __reg2 fstat (struct stat *buf);
- bool fill_filebuf ();
- int close ();
- int dup (fhandler_base *child, int);
-
- fhandler_registry (void *) {}
-
- void copyto (fhandler_base *x)
- {
- x->pc.free_strings ();
- *reinterpret_cast<fhandler_registry *> (x) = *this;
- x->reset (this);
- }
-
- fhandler_registry *clone (cygheap_types malloc_type = HEAP_FHANDLER)
- {
- void *ptr = (void *) ccalloc (malloc_type, 1, sizeof (fhandler_registry));
- fhandler_registry *fh = new (ptr) fhandler_registry (ptr);
- copyto (fh);
- return fh;
- }
-};
-
-class pinfo;
-class fhandler_process: public fhandler_proc
-{
- pid_t pid;
- public:
- fhandler_process ();
- virtual_ftype_t exists();
- DIR __reg2 *opendir (int fd);
- int closedir (DIR *);
- int __reg3 readdir (DIR *, dirent *);
- int open (int flags, mode_t mode = 0);
- int __reg2 fstat (struct stat *buf);
- bool fill_filebuf ();
-
- fhandler_process (void *) {}
-
- void copyto (fhandler_base *x)
- {
- x->pc.free_strings ();
- *reinterpret_cast<fhandler_process *> (x) = *this;
- x->reset (this);
- }
-
- fhandler_process *clone (cygheap_types malloc_type = HEAP_FHANDLER)
- {
- void *ptr = (void *) ccalloc (malloc_type, 1, sizeof (fhandler_process));
- fhandler_process *fh = new (ptr) fhandler_process (ptr);
- copyto (fh);
- return fh;
- }
-};
-
-class fhandler_procnet: public fhandler_proc
-{
- pid_t pid;
- public:
- fhandler_procnet ();
- virtual_ftype_t exists();
- int __reg3 readdir (DIR *, dirent *);
- int open (int flags, mode_t mode = 0);
- int __reg2 fstat (struct stat *buf);
- bool fill_filebuf ();
-
- fhandler_procnet (void *) {}
-
- void copyto (fhandler_base *x)
- {
- x->pc.free_strings ();
- *reinterpret_cast<fhandler_procnet *> (x) = *this;
- x->reset (this);
- }
-
- fhandler_procnet *clone (cygheap_types malloc_type = HEAP_FHANDLER)
- {
- void *ptr = (void *) ccalloc (malloc_type, 1, sizeof (fhandler_procnet));
- fhandler_procnet *fh = new (ptr) fhandler_procnet (ptr);
- copyto (fh);
- return fh;
- }
-};
-
-struct fhandler_nodevice: public fhandler_base
-{
- fhandler_nodevice ();
- int open (int flags, mode_t mode = 0);
-};
-
-#define report_tty_counts(fh, call, use_op) \
- termios_printf ("%s %s, %susecount %d",\
- fh->ttyname (), call,\
- use_op, ((fhandler_pty_slave *) (fh->archetype ?: fh))->usecount);
-
-typedef union
-{
- char __base[sizeof (fhandler_base)];
- char __console[sizeof (fhandler_console)];
- char __dev[sizeof (fhandler_dev)];
- char __cygdrive[sizeof (fhandler_cygdrive)];
- char __dev_clipboard[sizeof (fhandler_dev_clipboard)];
- char __dev_dsp[sizeof (fhandler_dev_dsp)];
- char __dev_floppy[sizeof (fhandler_dev_floppy)];
- char __dev_null[sizeof (fhandler_dev_null)];
- char __dev_random[sizeof (fhandler_dev_random)];
- char __dev_raw[sizeof (fhandler_dev_raw)];
- char __dev_tape[sizeof (fhandler_dev_tape)];
- char __dev_zero[sizeof (fhandler_dev_zero)];
- char __disk_file[sizeof (fhandler_disk_file)];
- char __fifo[sizeof (fhandler_fifo)];
- char __mailslot[sizeof (fhandler_mailslot)];
- char __netdrive[sizeof (fhandler_netdrive)];
- char __nodevice[sizeof (fhandler_nodevice)];
- char __pipe[sizeof (fhandler_pipe)];
- char __proc[sizeof (fhandler_proc)];
- char __process[sizeof (fhandler_process)];
- char __procnet[sizeof (fhandler_procnet)];
- char __procsys[sizeof (fhandler_procsys)];
- char __procsysvipc[sizeof (fhandler_procsysvipc)];
- char __pty_master[sizeof (fhandler_pty_master)];
- char __registry[sizeof (fhandler_registry)];
- char __serial[sizeof (fhandler_serial)];
- char __socket[sizeof (fhandler_socket)];
- char __termios[sizeof (fhandler_termios)];
- char __pty_common[sizeof (fhandler_pty_common)];
- char __pty_slave[sizeof (fhandler_pty_slave)];
- char __virtual[sizeof (fhandler_virtual)];
- char __windows[sizeof (fhandler_windows)];
-} fhandler_union;
diff --git a/winsup/cygwin/fhandler_clipboard.cc b/winsup/cygwin/fhandler_clipboard.cc
deleted file mode 100644
index 92f833c3d..000000000
--- a/winsup/cygwin/fhandler_clipboard.cc
+++ /dev/null
@@ -1,348 +0,0 @@
-/* fhandler_dev_clipboard: code to access /dev/clipboard
-
- Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2008, 2009, 2011, 2012, 2013
- Red Hat, Inc
-
- Written by Charles Wilson (cwilson@ece.gatech.edu)
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include <wchar.h>
-#include "cygerrno.h"
-#include "path.h"
-#include "fhandler.h"
-#include "sync.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "child_info.h"
-
-/*
- * Robert Collins:
- * FIXME: should we use GetClipboardSequenceNumber to tell if the clipboard has
- * changed? How does /dev/clipboard operate under (say) linux?
- */
-
-static const WCHAR *CYGWIN_NATIVE = L"CYGWIN_NATIVE_CLIPBOARD";
-
-typedef struct
-{
- timestruc_t timestamp;
- size_t len;
- char data[1];
-} cygcb_t;
-
-fhandler_dev_clipboard::fhandler_dev_clipboard ()
- : fhandler_base (), pos (0), membuffer (NULL), msize (0)
-{
- /* FIXME: check for errors and loop until we can open the clipboard */
- OpenClipboard (NULL);
- cygnativeformat = RegisterClipboardFormatW (CYGWIN_NATIVE);
- CloseClipboard ();
-}
-
-/*
- * Special clipboard dup to duplicate input and output
- * handles.
- */
-
-int
-fhandler_dev_clipboard::dup (fhandler_base * child, int flags)
-{
- fhandler_dev_clipboard *fhc = (fhandler_dev_clipboard *) child;
- fhc->pos = fhc->msize = 0;
- fhc->membuffer = NULL;
- return fhandler_base::dup (child, flags);
-}
-
-int
-fhandler_dev_clipboard::set_clipboard (const void *buf, size_t len)
-{
- HGLOBAL hmem;
- /* Native CYGWIN format */
- if (OpenClipboard (NULL))
- {
- cygcb_t *clipbuf;
-
- hmem = GlobalAlloc (GMEM_MOVEABLE, sizeof (cygcb_t) + len);
- if (!hmem)
- {
- __seterrno ();
- CloseClipboard ();
- return -1;
- }
- clipbuf = (cygcb_t *) GlobalLock (hmem);
-
- clock_gettime (CLOCK_REALTIME, &clipbuf->timestamp);
- clipbuf->len = len;
- memcpy (clipbuf->data, buf, len);
-
- GlobalUnlock (hmem);
- EmptyClipboard ();
- HANDLE ret = SetClipboardData (cygnativeformat, hmem);
- CloseClipboard ();
- /* According to MSDN, hmem must not be free'd after transferring the
- data to the clipboard via SetClipboardData. */
- /* GlobalFree (hmem); */
- if (!ret)
- {
- __seterrno ();
- return -1;
- }
- }
-
- /* CF_TEXT/CF_OEMTEXT for copying to wordpad and the like */
- len = sys_mbstowcs (NULL, 0, (const char *) buf, len);
- if (!len)
- {
- set_errno (EILSEQ);
- return -1;
- }
- if (OpenClipboard (NULL))
- {
- PWCHAR clipbuf;
-
- hmem = GlobalAlloc (GMEM_MOVEABLE, (len + 1) * sizeof (WCHAR));
- if (!hmem)
- {
- __seterrno ();
- CloseClipboard ();
- return -1;
- }
- clipbuf = (PWCHAR) GlobalLock (hmem);
- sys_mbstowcs (clipbuf, len + 1, (const char *) buf);
- GlobalUnlock (hmem);
- HANDLE ret = SetClipboardData (CF_UNICODETEXT, hmem);
- CloseClipboard ();
- /* According to MSDN, hmem must not be free'd after transferring the
- data to the clipboard via SetClipboardData. */
- /* GlobalFree (hmem); */
- if (!ret)
- {
- __seterrno ();
- return -1;
- }
- }
- return 0;
-}
-
-/* FIXME: arbitrary seeking is not handled */
-ssize_t __stdcall
-fhandler_dev_clipboard::write (const void *buf, size_t len)
-{
- /* write to our membuffer */
- size_t cursize = msize;
- void *tempbuffer = realloc (membuffer, cursize + len);
- if (!tempbuffer)
- {
- debug_printf ("Couldn't realloc() clipboard buffer for write");
- return -1;
- }
- membuffer = tempbuffer;
- msize = cursize + len;
- memcpy ((unsigned char *) membuffer + cursize, buf, len);
-
- /* now pass to windows */
- if (set_clipboard (membuffer, msize))
- {
- /* FIXME: membuffer is now out of sync with pos, but msize
- is used above */
- return -1;
- }
-
- pos = msize;
- return len;
-}
-
-int __reg2
-fhandler_dev_clipboard::fstat (struct stat *buf)
-{
- buf->st_mode = S_IFCHR | STD_RBITS | STD_WBITS | S_IWGRP | S_IWOTH;
- buf->st_uid = geteuid32 ();
- buf->st_gid = getegid32 ();
- buf->st_nlink = 1;
- buf->st_blksize = PREFERRED_IO_BLKSIZE;
-
- buf->st_ctim.tv_sec = 1164931200L; /* Arbitrary value: 2006-12-01 */
- buf->st_ctim.tv_nsec = 0L;
- buf->st_birthtim = buf->st_atim = buf->st_mtim = buf->st_ctim;
-
- if (OpenClipboard (NULL))
- {
- UINT formatlist[1] = { cygnativeformat };
- int format;
- HGLOBAL hglb;
- cygcb_t *clipbuf;
-
- if ((format = GetPriorityClipboardFormat (formatlist, 1)) > 0
- && (hglb = GetClipboardData (format))
- && (clipbuf = (cygcb_t *) GlobalLock (hglb)))
- {
- buf->st_atim = buf->st_mtim = clipbuf->timestamp;
- buf->st_size = clipbuf->len;
- GlobalUnlock (hglb);
- }
- CloseClipboard ();
- }
-
- return 0;
-}
-
-void __reg3
-fhandler_dev_clipboard::read (void *ptr, size_t& len)
-{
- HGLOBAL hglb;
- size_t ret = 0;
- UINT formatlist[2];
- UINT format;
- LPVOID cb_data;
- int rach;
-
- if (!OpenClipboard (NULL))
- {
- len = 0;
- return;
- }
- formatlist[0] = cygnativeformat;
- formatlist[1] = CF_UNICODETEXT;
- if ((format = GetPriorityClipboardFormat (formatlist, 2)) <= 0
- || !(hglb = GetClipboardData (format))
- || !(cb_data = GlobalLock (hglb)))
- {
- CloseClipboard ();
- len = 0;
- return;
- }
- if (format == cygnativeformat)
- {
- cygcb_t *clipbuf = (cygcb_t *) cb_data;
-
- if (pos < (off_t) clipbuf->len)
- {
- ret = ((len > (clipbuf->len - pos)) ? (clipbuf->len - pos) : len);
- memcpy (ptr, clipbuf->data + pos , ret);
- pos += ret;
- }
- }
- else if ((rach = get_readahead ()) >= 0)
- {
- /* Deliver from read-ahead buffer. */
- char * out_ptr = (char *) ptr;
- * out_ptr++ = rach;
- ret = 1;
- while (ret < len && (rach = get_readahead ()) >= 0)
- {
- * out_ptr++ = rach;
- ret++;
- }
- }
- else
- {
- wchar_t *buf = (wchar_t *) cb_data;
-
- size_t glen = GlobalSize (hglb) / sizeof (WCHAR) - 1;
- if (pos < (off_t) glen)
- {
- /* If caller's buffer is too small to hold at least one
- max-size character, redirect algorithm to local
- read-ahead buffer, finally fill class read-ahead buffer
- with result and feed caller from there. */
- char *conv_ptr = (char *) ptr;
- size_t conv_len = len;
-#define cprabuf_len MB_LEN_MAX /* max MB_CUR_MAX of all encodings */
- char cprabuf [cprabuf_len];
- if (len < cprabuf_len)
- {
- conv_ptr = cprabuf;
- conv_len = cprabuf_len;
- }
-
- /* Comparing apples and oranges here, but the below loop could become
- extremly slow otherwise. We rather return a few bytes less than
- possible instead of being even more slow than usual... */
- if (glen > pos + conv_len)
- glen = pos + conv_len;
- /* This loop is necessary because the number of bytes returned by
- sys_wcstombs does not indicate the number of wide chars used for
- it, so we could potentially drop wide chars. */
- while ((ret = sys_wcstombs (NULL, 0, buf + pos, glen - pos))
- != (size_t) -1
- && (ret > conv_len
- /* Skip separated high surrogate: */
- || ((buf [glen - 1] & 0xFC00) == 0xD800
- && glen - pos > 1)))
- --glen;
- if (ret == (size_t) -1)
- ret = 0;
- else
- {
- ret = sys_wcstombs ((char *) conv_ptr, (size_t) -1,
- buf + pos, glen - pos);
- pos = glen;
- /* If using read-ahead buffer, copy to class read-ahead buffer
- and deliver first byte. */
- if (conv_ptr == cprabuf)
- {
- puts_readahead (cprabuf, ret);
- char *out_ptr = (char *) ptr;
- ret = 0;
- while (ret < len && (rach = get_readahead ()) >= 0)
- {
- * out_ptr++ = rach;
- ret++;
- }
- }
- }
- }
- }
- GlobalUnlock (hglb);
- CloseClipboard ();
- len = ret;
-}
-
-off_t
-fhandler_dev_clipboard::lseek (off_t offset, int whence)
-{
- /* On reads we check this at read time, not seek time.
- * On writes we use this to decide how to write - empty and write, or open, copy, empty
- * and write
- */
- pos = offset;
- /* treat seek like rewind */
- if (membuffer)
- {
- free (membuffer);
- membuffer = NULL;
- }
- msize = 0;
- return 0;
-}
-
-int
-fhandler_dev_clipboard::close ()
-{
- if (!have_execed)
- {
- pos = msize = 0;
- if (membuffer)
- {
- free (membuffer);
- membuffer = NULL;
- }
- }
- return fhandler_base::close ();
-}
-
-void
-fhandler_dev_clipboard::fixup_after_exec ()
-{
- if (!close_on_exec ())
- {
- pos = msize = 0;
- membuffer = NULL;
- }
-}
diff --git a/winsup/cygwin/fhandler_console.cc b/winsup/cygwin/fhandler_console.cc
deleted file mode 100644
index 44ee1c404..000000000
--- a/winsup/cygwin/fhandler_console.cc
+++ /dev/null
@@ -1,2643 +0,0 @@
-/* fhandler_console.cc
-
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include "miscfuncs.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <wchar.h>
-#include <ctype.h>
-#include <sys/param.h>
-#include <sys/cygwin.h>
-#include <cygwin/kd.h>
-#include "cygerrno.h"
-#include "security.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "sigproc.h"
-#include "pinfo.h"
-#include "shared_info.h"
-#include "cygtls.h"
-#include "tls_pbuf.h"
-#include "registry.h"
-#include <asm/socket.h>
-#include "sync.h"
-#include "child_info.h"
-#include "cygwait.h"
-
-/* Don't make this bigger than NT_MAX_PATH as long as the temporary buffer
- is allocated using tmp_pathbuf!!! */
-#define CONVERT_LIMIT NT_MAX_PATH
-
-#define ALT_PRESSED (LEFT_ALT_PRESSED | RIGHT_ALT_PRESSED)
-#define CTRL_PRESSED (LEFT_CTRL_PRESSED | RIGHT_CTRL_PRESSED)
-
-#define con (shared_console_info->con)
-#define srTop (con.b.srWindow.Top + con.scroll_region.Top)
-#define srBottom ((con.scroll_region.Bottom < 0) ? con.b.srWindow.Bottom : con.b.srWindow.Top + con.scroll_region.Bottom)
-
-const char *get_nonascii_key (INPUT_RECORD&, char *);
-
-const unsigned fhandler_console::MAX_WRITE_CHARS = 16384;
-
-fhandler_console::console_state NO_COPY *fhandler_console::shared_console_info;
-
-bool NO_COPY fhandler_console::invisible_console;
-
-static void
-beep ()
-{
- const WCHAR ding[] = L"\\media\\ding.wav";
- reg_key r (HKEY_CURRENT_USER, KEY_ALL_ACCESS, L"AppEvents", L"Schemes",
- L"Apps", L".Default", L".Default", L".Current", NULL);
- if (r.created ())
- {
- PWCHAR buf = NULL;
- UINT len = GetSystemWindowsDirectoryW (buf, 0) * sizeof (WCHAR);
- buf = (PWCHAR) alloca (len += sizeof (ding));
- UINT res = GetSystemWindowsDirectoryW (buf, len);
- if (res && res <= len)
- r.set_string (L"", wcscat (buf, ding));
- }
- MessageBeep (MB_OK);
-}
-
-fhandler_console::console_state *
-fhandler_console::open_shared_console (HWND hw, HANDLE& h, bool& create)
-{
- wchar_t namebuf[(sizeof "XXXXXXXXXXXXXXXXXX-consNNNNNNNNNN")];
- __small_swprintf (namebuf, L"%S-cons%p", &cygheap->installation_key, hw);
-
- shared_locations m = create ? SH_SHARED_CONSOLE : SH_JUSTOPEN;
- console_state *res = (console_state *)
- open_shared (namebuf, 0, h, sizeof (*shared_console_info), &m);
- create = m != SH_JUSTOPEN;
- return res;
-}
-
-class console_unit
-{
- int n;
- unsigned long bitmask;
- HWND me;
-
-public:
- operator int () const {return n;}
- console_unit (HWND);
- friend BOOL CALLBACK enum_windows (HWND, LPARAM);
-};
-
-BOOL CALLBACK
-enum_windows (HWND hw, LPARAM lp)
-{
- console_unit *this1 = (console_unit *) lp;
- if (hw == this1->me)
- return TRUE;
- HANDLE h = NULL;
- fhandler_console::console_state *cs;
- if ((cs = fhandler_console::open_shared_console (hw, h)))
- {
- this1->bitmask ^= 1 << cs->tty_min_state.getntty ();
- UnmapViewOfFile ((void *) cs);
- CloseHandle (h);
- }
- return TRUE;
-}
-
-console_unit::console_unit (HWND me0):
- bitmask (0xffffffff), me (me0)
-{
- EnumWindows (enum_windows, (LPARAM) this);
- n = (_minor_t) ffs (bitmask) - 1;
- if (n < 0)
- api_fatal ("console device allocation failure - too many consoles in use, max consoles is 32");
-}
-
-bool
-fhandler_console::set_unit ()
-{
- bool created;
- fh_devices devset;
- lock_ttys here;
- HWND me;
- fh_devices this_unit = dev ();
- bool generic_console = this_unit == FH_CONIN || this_unit == FH_CONOUT;
- if (shared_console_info)
- {
- fh_devices shared_unit =
- (fh_devices) shared_console_info->tty_min_state.getntty ();
- devset = (shared_unit == this_unit || this_unit == FH_CONSOLE
- || generic_console
- || this_unit == FH_TTY) ?
- shared_unit : FH_ERROR;
- created = false;
- }
- else if ((!generic_console && (myself->ctty != -1 && !iscons_dev (myself->ctty)))
- || !(me = GetConsoleWindow ()))
- devset = FH_ERROR;
- else
- {
- created = true;
- shared_console_info = open_shared_console (me, cygheap->console_h, created);
- ProtectHandleINH (cygheap->console_h);
- if (created)
- shared_console_info->tty_min_state.setntty (DEV_CONS_MAJOR, console_unit (me));
- devset = (fh_devices) shared_console_info->tty_min_state.getntty ();
- }
-
- dev ().parse (devset);
- if (devset != FH_ERROR)
- pc.file_attributes (FILE_ATTRIBUTE_NORMAL);
- else
- {
- set_io_handle (NULL);
- set_output_handle (NULL);
- created = false;
- }
- return created;
-}
-
-/* Allocate and initialize the shared record for the current console. */
-void
-fhandler_console::setup ()
-{
- if (set_unit ())
- {
- con.scroll_region.Bottom = -1;
- con.dwLastCursorPosition.X = -1;
- con.dwLastCursorPosition.Y = -1;
- con.dwLastMousePosition.X = -1;
- con.dwLastMousePosition.Y = -1;
- con.dwLastButtonState = 0; /* none pressed */
- con.last_button_code = 3; /* released */
- con.underline_color = FOREGROUND_GREEN | FOREGROUND_BLUE;
- con.dim_color = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE;
- con.meta_mask = LEFT_ALT_PRESSED;
- /* Set the mask that determines if an input keystroke is modified by
- META. We set this based on the keyboard layout language loaded
- for the current thread. The left <ALT> key always generates
- META, but the right <ALT> key only generates META if we are using
- an English keyboard because many "international" keyboards
- replace common shell symbols ('[', '{', etc.) with accented
- language-specific characters (umlaut, accent grave, etc.). On
- these keyboards right <ALT> (called AltGr) is used to produce the
- shell symbols and should not be interpreted as META. */
- if (PRIMARYLANGID (LOWORD (GetKeyboardLayout (0))) == LANG_ENGLISH)
- con.meta_mask |= RIGHT_ALT_PRESSED;
- con.set_default_attr ();
- con.backspace_keycode = CERASE;
- shared_console_info->tty_min_state.is_console = true;
- }
-}
-
-/* Return the tty structure associated with a given tty number. If the
- tty number is < 0, just return a dummy record. */
-tty_min *
-tty_list::get_cttyp ()
-{
- dev_t n = myself->ctty;
- if (iscons_dev (n))
- return fhandler_console::shared_console_info ?
- &fhandler_console::shared_console_info->tty_min_state : NULL;
- else if (istty_slave_dev (n))
- return &ttys[device::minor (n)];
- else
- return NULL;
-}
-
-inline DWORD
-dev_console::con_to_str (char *d, int dlen, WCHAR w)
-{
- return sys_cp_wcstombs (cygheap->locale.wctomb, cygheap->locale.charset,
- d, dlen, &w, 1);
-}
-
-inline UINT
-dev_console::get_console_cp ()
-{
- /* The alternate charset is always 437, just as in the Linux console. */
- return alternate_charset_active ? 437 : 0;
-}
-
-inline DWORD
-dev_console::str_to_con (mbtowc_p f_mbtowc, const char *charset,
- PWCHAR d, const char *s, DWORD sz)
-{
- return sys_cp_mbstowcs (f_mbtowc, charset, d, CONVERT_LIMIT, s, sz);
-}
-
-bool
-fhandler_console::set_raw_win32_keyboard_mode (bool new_mode)
-{
- bool old_mode = con.raw_win32_keyboard_mode;
- con.raw_win32_keyboard_mode = new_mode;
- syscall_printf ("raw keyboard mode %sabled", con.raw_win32_keyboard_mode ? "en" : "dis");
- return old_mode;
-};
-
-void
-fhandler_console::set_cursor_maybe ()
-{
- con.fillin (get_output_handle ());
- if (con.dwLastCursorPosition.X != con.b.dwCursorPosition.X ||
- con.dwLastCursorPosition.Y != con.b.dwCursorPosition.Y)
- {
- SetConsoleCursorPosition (get_output_handle (), con.b.dwCursorPosition);
- con.dwLastCursorPosition = con.b.dwCursorPosition;
- }
-}
-
-void
-fhandler_console::send_winch_maybe ()
-{
- SHORT y = con.dwWinSize.Y;
- SHORT x = con.dwWinSize.X;
- con.fillin (get_output_handle ());
-
- if (y != con.dwWinSize.Y || x != con.dwWinSize.X)
- {
- con.scroll_region.Top = 0;
- con.scroll_region.Bottom = -1;
- get_ttyp ()->kill_pgrp (SIGWINCH);
- }
-}
-
-/* Check whether a mouse event is to be reported as an escape sequence */
-bool
-fhandler_console::mouse_aware (MOUSE_EVENT_RECORD& mouse_event)
-{
- if (!con.use_mouse)
- return 0;
-
- /* Adjust mouse position by window scroll buffer offset
- and remember adjusted position in state for use by read() */
- CONSOLE_SCREEN_BUFFER_INFO now;
- if (!GetConsoleScreenBufferInfo (get_output_handle (), &now))
- /* Cannot adjust position by window scroll buffer offset */
- return 0;
-
- con.dwMousePosition.X = mouse_event.dwMousePosition.X - now.srWindow.Left;
- con.dwMousePosition.Y = mouse_event.dwMousePosition.Y - now.srWindow.Top;
-
- return ((mouse_event.dwEventFlags == 0 || mouse_event.dwEventFlags == DOUBLE_CLICK)
- && mouse_event.dwButtonState != con.dwLastButtonState)
- || mouse_event.dwEventFlags == MOUSE_WHEELED
- || (mouse_event.dwEventFlags == MOUSE_MOVED
- && (con.dwMousePosition.X != con.dwLastMousePosition.X
- || con.dwMousePosition.Y != con.dwLastMousePosition.Y)
- && ((con.use_mouse >= 2 && mouse_event.dwButtonState)
- || con.use_mouse >= 3));
-}
-
-void __reg3
-fhandler_console::read (void *pv, size_t& buflen)
-{
- push_process_state process_state (PID_TTYIN);
-
- HANDLE h = get_io_handle ();
-
-#define buf ((char *) pv)
-
- int ch;
- set_input_state ();
-
- int copied_chars = get_readahead_into_buffer (buf, buflen);
-
- if (copied_chars)
- {
- buflen = copied_chars;
- return;
- }
-
- DWORD timeout = is_nonblocking () ? 0 : INFINITE;
- char tmp[60];
-
- termios ti = get_ttyp ()->ti;
- for (;;)
- {
- int bgres;
- if ((bgres = bg_check (SIGTTIN)) <= bg_eof)
- {
- buflen = bgres;
- return;
- }
-
- set_cursor_maybe (); /* to make cursor appear on the screen immediately */
- switch (cygwait (h, timeout))
- {
- case WAIT_OBJECT_0:
- break;
- case WAIT_SIGNALED:
- goto sig_exit;
- case WAIT_CANCELED:
- process_state.pop ();
- pthread::static_cancel_self ();
- /*NOTREACHED*/
- case WAIT_TIMEOUT:
- set_sig_errno (EAGAIN);
- buflen = (size_t) -1;
- return;
- default:
- goto err;
- }
-
- DWORD nread;
- INPUT_RECORD input_rec;
- const char *toadd = NULL;
-
- if (!ReadConsoleInputW (h, &input_rec, 1, &nread))
- {
- syscall_printf ("ReadConsoleInput failed, %E");
- goto err; /* seems to be failure */
- }
-
- /* check the event that occurred */
- switch (input_rec.EventType)
- {
- case KEY_EVENT:
-#define virtual_key_code (input_rec.Event.KeyEvent.wVirtualKeyCode)
-#define control_key_state (input_rec.Event.KeyEvent.dwControlKeyState)
-
- con.nModifiers = 0;
-
-#ifdef DEBUGGING
- /* allow manual switching to/from raw mode via ctrl-alt-scrolllock */
- if (input_rec.Event.KeyEvent.bKeyDown &&
- virtual_key_code == VK_SCROLL &&
- ((control_key_state & (LEFT_ALT_PRESSED | LEFT_CTRL_PRESSED)) == (LEFT_ALT_PRESSED | LEFT_CTRL_PRESSED))
- )
- {
- set_raw_win32_keyboard_mode (!con.raw_win32_keyboard_mode);
- continue;
- }
-#endif
-
- if (con.raw_win32_keyboard_mode)
- {
- __small_sprintf (tmp, "\033{%u;%u;%u;%u;%u;%luK",
- input_rec.Event.KeyEvent.bKeyDown,
- input_rec.Event.KeyEvent.wRepeatCount,
- input_rec.Event.KeyEvent.wVirtualKeyCode,
- input_rec.Event.KeyEvent.wVirtualScanCode,
- input_rec.Event.KeyEvent.uChar.UnicodeChar,
- input_rec.Event.KeyEvent.dwControlKeyState);
- toadd = tmp;
- nread = strlen (toadd);
- break;
- }
-
-#define ich (input_rec.Event.KeyEvent.uChar.AsciiChar)
-#define wch (input_rec.Event.KeyEvent.uChar.UnicodeChar)
-
- /* Ignore key up events, except for left alt events with non-zero character
- */
- if (!input_rec.Event.KeyEvent.bKeyDown &&
- /*
- Event for left alt, with a non-zero character, comes from
- "alt + numerics" key sequence.
- e.g. <left-alt> 0233 => &eacute;
- */
- !(wch != 0
- // ?? experimentally determined on an XP system
- && virtual_key_code == VK_MENU
- // left alt -- see http://www.microsoft.com/hwdev/tech/input/Scancode.asp
- && input_rec.Event.KeyEvent.wVirtualScanCode == 0x38))
- continue;
-
- if (control_key_state & SHIFT_PRESSED)
- con.nModifiers |= 1;
- if (control_key_state & RIGHT_ALT_PRESSED)
- con.nModifiers |= 2;
- if (control_key_state & CTRL_PRESSED)
- con.nModifiers |= 4;
- if (control_key_state & LEFT_ALT_PRESSED)
- con.nModifiers |= 8;
-
- /* Allow Backspace to emit ^? and escape sequences. */
- if (input_rec.Event.KeyEvent.wVirtualKeyCode == VK_BACK)
- {
- char c = con.backspace_keycode;
- nread = 0;
- if (control_key_state & ALT_PRESSED)
- {
- if (con.metabit)
- c |= 0x80;
- else
- tmp[nread++] = '\e';
- }
- tmp[nread++] = c;
- tmp[nread] = 0;
- toadd = tmp;
- }
- /* Allow Ctrl-Space to emit ^@ */
- else if (input_rec.Event.KeyEvent.wVirtualKeyCode == VK_SPACE
- && (control_key_state & CTRL_PRESSED)
- && !(control_key_state & ALT_PRESSED))
- toadd = "";
- else if (wch == 0
- /* arrow/function keys */
- || (input_rec.Event.KeyEvent.dwControlKeyState & ENHANCED_KEY))
- {
- toadd = get_nonascii_key (input_rec, tmp);
- if (!toadd)
- {
- con.nModifiers = 0;
- continue;
- }
- nread = strlen (toadd);
- }
- else
- {
- nread = con.con_to_str (tmp + 1, 59, wch);
- /* Determine if the keystroke is modified by META. The tricky
- part is to distinguish whether the right Alt key should be
- recognized as Alt, or as AltGr. */
- bool meta =
- /* Alt but not AltGr (= left ctrl + right alt)? */
- (control_key_state & ALT_PRESSED) != 0
- && ((control_key_state & CTRL_PRESSED) == 0
- /* but also allow Alt-AltGr: */
- || (control_key_state & ALT_PRESSED) == ALT_PRESSED
- || (wch <= 0x1f || wch == 0x7f));
- if (!meta)
- {
- /* Determine if the character is in the current multibyte
- charset. The test is easy. If the multibyte sequence
- is > 1 and the first byte is ASCII CAN, the character
- has been translated into the ASCII CAN + UTF-8 replacement
- sequence. If so, just ignore the keypress.
- FIXME: Is there a better solution? */
- if (nread > 1 && tmp[1] == 0x18)
- beep ();
- else
- toadd = tmp + 1;
- }
- else if (con.metabit)
- {
- tmp[1] |= 0x80;
- toadd = tmp + 1;
- }
- else
- {
- tmp[0] = '\033';
- tmp[1] = cyg_tolower (tmp[1]);
- toadd = tmp;
- nread++;
- con.nModifiers &= ~4;
- }
- }
-#undef ich
-#undef wch
- break;
-
- case MOUSE_EVENT:
- send_winch_maybe ();
- {
- MOUSE_EVENT_RECORD& mouse_event = input_rec.Event.MouseEvent;
- /* As a unique guard for mouse report generation,
- call mouse_aware() which is common with select(), so the result
- of select() and the actual read() will be consistent on the
- issue of whether input (i.e. a mouse escape sequence) will
- be available or not */
- if (mouse_aware (mouse_event))
- {
- /* Note: Reported mouse position was already retrieved by
- mouse_aware() and adjusted by window scroll buffer offset */
-
- /* Treat the double-click event like a regular button press */
- if (mouse_event.dwEventFlags == DOUBLE_CLICK)
- {
- syscall_printf ("mouse: double-click -> click");
- mouse_event.dwEventFlags = 0;
- }
-
- /* This code assumes Windows never reports multiple button
- events at the same time. */
- int b = 0;
- char sz[32];
- char mode6_term = 'M';
-
- if (mouse_event.dwEventFlags == MOUSE_WHEELED)
- {
- if (mouse_event.dwButtonState & 0xFF800000)
- {
- b = 0x41;
- strcpy (sz, "wheel down");
- }
- else
- {
- b = 0x40;
- strcpy (sz, "wheel up");
- }
- }
- else
- {
- /* Ignore unimportant mouse buttons */
- mouse_event.dwButtonState &= 0x7;
-
- if (mouse_event.dwEventFlags == MOUSE_MOVED)
- {
- b = con.last_button_code;
- }
- else if (mouse_event.dwButtonState < con.dwLastButtonState && !con.ext_mouse_mode6)
- {
- b = 3;
- strcpy (sz, "btn up");
- }
- else if ((mouse_event.dwButtonState & 1) != (con.dwLastButtonState & 1))
- {
- b = 0;
- strcpy (sz, "btn1 down");
- }
- else if ((mouse_event.dwButtonState & 2) != (con.dwLastButtonState & 2))
- {
- b = 2;
- strcpy (sz, "btn2 down");
- }
- else if ((mouse_event.dwButtonState & 4) != (con.dwLastButtonState & 4))
- {
- b = 1;
- strcpy (sz, "btn3 down");
- }
-
- if (con.ext_mouse_mode6 /* distinguish release */
- && mouse_event.dwButtonState < con.dwLastButtonState)
- mode6_term = 'm';
-
- con.last_button_code = b;
-
- if (mouse_event.dwEventFlags == MOUSE_MOVED)
- {
- b += 32;
- strcpy (sz, "move");
- }
- else
- {
- /* Remember the modified button state */
- con.dwLastButtonState = mouse_event.dwButtonState;
- }
- }
-
- /* Remember mouse position */
- con.dwLastMousePosition.X = con.dwMousePosition.X;
- con.dwLastMousePosition.Y = con.dwMousePosition.Y;
-
- /* Remember the modifiers */
- con.nModifiers = 0;
- if (mouse_event.dwControlKeyState & SHIFT_PRESSED)
- con.nModifiers |= 0x4;
- if (mouse_event.dwControlKeyState & ALT_PRESSED)
- con.nModifiers |= 0x8;
- if (mouse_event.dwControlKeyState & CTRL_PRESSED)
- con.nModifiers |= 0x10;
-
- /* Indicate the modifiers */
- b |= con.nModifiers;
-
- /* We can now create the code. */
- if (con.ext_mouse_mode6)
- {
- __small_sprintf (tmp, "\033[<%d;%d;%d%c", b,
- con.dwMousePosition.X + 1,
- con.dwMousePosition.Y + 1,
- mode6_term);
- nread = strlen (tmp);
- }
- else if (con.ext_mouse_mode15)
- {
- __small_sprintf (tmp, "\033[%d;%d;%dM", b + 32,
- con.dwMousePosition.X + 1,
- con.dwMousePosition.Y + 1);
- nread = strlen (tmp);
- }
- else if (con.ext_mouse_mode5)
- {
- unsigned int xcode = con.dwMousePosition.X + ' ' + 1;
- unsigned int ycode = con.dwMousePosition.Y + ' ' + 1;
-
- __small_sprintf (tmp, "\033[M%c", b + ' ');
- nread = 4;
- /* the neat nested encoding function of mintty
- does not compile in g++, so let's unfold it: */
- if (xcode < 0x80)
- tmp [nread++] = xcode;
- else if (xcode < 0x800)
- {
- tmp [nread++] = 0xC0 + (xcode >> 6);
- tmp [nread++] = 0x80 + (xcode & 0x3F);
- }
- else
- tmp [nread++] = 0;
- if (ycode < 0x80)
- tmp [nread++] = ycode;
- else if (ycode < 0x800)
- {
- tmp [nread++] = 0xC0 + (ycode >> 6);
- tmp [nread++] = 0x80 + (ycode & 0x3F);
- }
- else
- tmp [nread++] = 0;
- }
- else
- {
- unsigned int xcode = con.dwMousePosition.X + ' ' + 1;
- unsigned int ycode = con.dwMousePosition.Y + ' ' + 1;
- if (xcode >= 256)
- xcode = 0;
- if (ycode >= 256)
- ycode = 0;
- __small_sprintf (tmp, "\033[M%c%c%c", b + ' ',
- xcode, ycode);
- nread = 6; /* tmp may contain NUL bytes */
- }
- syscall_printf ("mouse: %s at (%d,%d)", sz,
- con.dwMousePosition.X,
- con.dwMousePosition.Y);
-
- toadd = tmp;
- }
- }
- break;
-
- case FOCUS_EVENT:
- if (con.use_focus)
- {
- if (input_rec.Event.FocusEvent.bSetFocus)
- __small_sprintf (tmp, "\033[I");
- else
- __small_sprintf (tmp, "\033[O");
-
- toadd = tmp;
- nread = 3;
- }
- break;
-
- case WINDOW_BUFFER_SIZE_EVENT:
- send_winch_maybe ();
- /* fall through */
- default:
- continue;
- }
-
- if (toadd)
- {
- line_edit_status res = line_edit (toadd, nread, ti);
- if (res == line_edit_signalled)
- goto sig_exit;
- else if (res == line_edit_input_done)
- break;
- }
- }
-
- while (buflen)
- if ((ch = get_readahead ()) < 0)
- break;
- else
- {
- buf[copied_chars++] = (unsigned char)(ch & 0xff);
- buflen--;
- }
-#undef buf
-
- buflen = copied_chars;
- return;
-
-err:
- __seterrno ();
- buflen = (size_t) -1;
- return;
-
-sig_exit:
- set_sig_errno (EINTR);
- buflen = (size_t) -1;
-}
-
-void
-fhandler_console::set_input_state ()
-{
- if (get_ttyp ()->rstcons ())
- input_tcsetattr (0, &get_ttyp ()->ti);
-}
-
-bool
-dev_console::fillin (HANDLE h)
-{
- bool ret;
-
- if ((ret = GetConsoleScreenBufferInfo (h, &b)))
- {
- dwWinSize.Y = 1 + b.srWindow.Bottom - b.srWindow.Top;
- dwWinSize.X = 1 + b.srWindow.Right - b.srWindow.Left;
- if (b.dwSize.Y != b.dwSize.Y || b.dwSize.X != b.dwSize.X)
- dwEnd.X = dwEnd.Y = 0;
- if (b.dwCursorPosition.Y > dwEnd.Y
- || (b.dwCursorPosition.Y >= dwEnd.Y && b.dwCursorPosition.X > dwEnd.X))
- dwEnd = b.dwCursorPosition;
- }
- else
- {
- memset (&b, 0, sizeof (b));
- dwWinSize.Y = 25;
- dwWinSize.X = 80;
- b.srWindow.Bottom = 24;
- b.srWindow.Right = 79;
- }
-
- return ret;
-}
-
-void __reg3
-dev_console::scroll_buffer (HANDLE h, int x1, int y1, int x2, int y2, int xn, int yn)
-{
-/* Scroll the screen context.
- x1, y1 - ul corner
- x2, y2 - dr corner
- xn, yn - new ul corner
- Negative values represents current screen dimensions
-*/
- SMALL_RECT sr1, sr2;
- CHAR_INFO fill;
- COORD dest;
- fill.Char.AsciiChar = ' ';
- fill.Attributes = current_win32_attr;
-
- fillin (h);
- sr1.Left = x1 >= 0 ? x1 : dwWinSize.X - 1;
- sr1.Top = y1 >= 0 ? y1 : b.srWindow.Bottom;
- sr1.Right = x2 >= 0 ? x2 : dwWinSize.X - 1;
- sr1.Bottom = y2 >= 0 ? y2 : b.srWindow.Bottom;
- sr2.Top = b.srWindow.Top + scroll_region.Top;
- sr2.Left = 0;
- sr2.Bottom = (scroll_region.Bottom < 0) ? b.srWindow.Bottom : b.srWindow.Top + scroll_region.Bottom;
- sr2.Right = dwWinSize.X - 1;
- if (sr1.Bottom > sr2.Bottom && sr1.Top <= sr2.Bottom)
- sr1.Bottom = sr2.Bottom;
- dest.X = xn >= 0 ? xn : dwWinSize.X - 1;
- dest.Y = yn >= 0 ? yn : b.srWindow.Bottom;
- ScrollConsoleScreenBuffer (h, &sr1, &sr2, dest, &fill);
-}
-
-inline void
-fhandler_console::scroll_buffer (int x1, int y1, int x2, int y2, int xn, int yn)
-{
- con.scroll_buffer (get_output_handle (), x1, y1, x2, y2, xn, yn);
-}
-
-inline void
-fhandler_console::scroll_buffer_screen (int x1, int y1, int x2, int y2, int xn, int yn)
-{
- if (y1 >= 0)
- y1 += con.b.srWindow.Top;
- if (y2 >= 0)
- y1 += con.b.srWindow.Top;
- if (yn >= 0)
- yn += con.b.srWindow.Top;
- con.scroll_buffer (get_output_handle (), x1, y1, x2, y2, xn, yn);
-}
-
-int
-fhandler_console::dup (fhandler_base *child, int flags)
-{
- /* See comments in fhandler_pty_slave::dup */
- if (myself->ctty != -2)
- myself->set_ctty (this, flags);
- return 0;
-}
-
-int
-fhandler_console::open (int flags, mode_t)
-{
- HANDLE h;
-
- if (dev () == FH_ERROR)
- {
- set_errno (EPERM); /* constructor found an error */
- return 0;
- }
-
- tcinit (false);
-
- set_io_handle (NULL);
- set_output_handle (NULL);
-
- /* Open the input handle as handle_ */
- h = CreateFile ("CONIN$", GENERIC_READ | GENERIC_WRITE,
- FILE_SHARE_READ | FILE_SHARE_WRITE, &sec_none,
- OPEN_EXISTING, 0, 0);
-
- if (h == INVALID_HANDLE_VALUE)
- {
- __seterrno ();
- return 0;
- }
- set_io_handle (h);
-
- h = CreateFile ("CONOUT$", GENERIC_READ | GENERIC_WRITE,
- FILE_SHARE_READ | FILE_SHARE_WRITE, &sec_none,
- OPEN_EXISTING, 0, 0);
-
- if (h == INVALID_HANDLE_VALUE)
- {
- __seterrno ();
- return 0;
- }
- set_output_handle (h);
-
- if (con.fillin (get_output_handle ()))
- {
- con.current_win32_attr = con.b.wAttributes;
- if (!con.default_color)
- con.default_color = con.b.wAttributes;
- con.set_default_attr ();
- }
-
- get_ttyp ()->rstcons (false);
- set_open_status ();
-
- DWORD cflags;
- if (GetConsoleMode (get_io_handle (), &cflags))
- SetConsoleMode (get_io_handle (),
- ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT | cflags);
-
- debug_printf ("opened conin$ %p, conout$ %p", get_io_handle (),
- get_output_handle ());
-
- return 1;
-}
-
-void
-fhandler_console::open_setup (int flags)
-{
- set_flags ((flags & ~O_TEXT) | O_BINARY);
- if (myself->set_ctty (this, flags) && !myself->cygstarted)
- init_console_handler (true);
- fhandler_base::open_setup (flags);
-}
-
-int
-fhandler_console::close ()
-{
- CloseHandle (get_io_handle ());
- CloseHandle (get_output_handle ());
- if (!have_execed)
- free_console ();
- return 0;
-}
-
-int
-fhandler_console::ioctl (unsigned int cmd, void *arg)
-{
- int res = fhandler_termios::ioctl (cmd, arg);
- if (res <= 0)
- return res;
- switch (cmd)
- {
- case TIOCGWINSZ:
- int st;
-
- st = con.fillin (get_output_handle ());
- if (st)
- {
- /* *not* the buffer size, the actual screen size... */
- /* based on Left Top Right Bottom of srWindow */
- ((struct winsize *) arg)->ws_row = con.dwWinSize.Y;
- ((struct winsize *) arg)->ws_col = con.dwWinSize.X;
- syscall_printf ("WINSZ: (row=%d,col=%d)",
- ((struct winsize *) arg)->ws_row,
- ((struct winsize *) arg)->ws_col);
- return 0;
- }
- else
- {
- syscall_printf ("WINSZ failed");
- __seterrno ();
- return -1;
- }
- return 0;
- case TIOCSWINSZ:
- bg_check (SIGTTOU);
- return 0;
- case KDGKBMETA:
- *(int *) arg = (con.metabit) ? K_METABIT : K_ESCPREFIX;
- return 0;
- case KDSKBMETA:
- if ((intptr_t) arg == K_METABIT)
- con.metabit = TRUE;
- else if ((intptr_t) arg == K_ESCPREFIX)
- con.metabit = FALSE;
- else
- {
- set_errno (EINVAL);
- return -1;
- }
- return 0;
- case TIOCLINUX:
- if (*(unsigned char *) arg == 6)
- {
- *(unsigned char *) arg = (unsigned char) con.nModifiers;
- return 0;
- }
- set_errno (EINVAL);
- return -1;
- case FIONREAD:
- {
- /* Per MSDN, max size of buffer required is below 64K. */
-#define INREC_SIZE (65536 / sizeof (INPUT_RECORD))
-
- DWORD n;
- int ret = 0;
- INPUT_RECORD inp[INREC_SIZE];
- if (!PeekConsoleInputW (get_io_handle (), inp, INREC_SIZE, &n))
- {
- set_errno (EINVAL);
- return -1;
- }
- while (n-- > 0)
- if (inp[n].EventType == KEY_EVENT && inp[n].Event.KeyEvent.bKeyDown)
- ++ret;
- *(int *) arg = ret;
- return 0;
- }
- break;
- }
-
- return fhandler_base::ioctl (cmd, arg);
-}
-
-int
-fhandler_console::tcflush (int queue)
-{
- int res = 0;
- if (queue == TCIFLUSH
- || queue == TCIOFLUSH)
- {
- if (!FlushConsoleInputBuffer (get_io_handle ()))
- {
- __seterrno ();
- res = -1;
- }
- }
- return res;
-}
-
-int
-fhandler_console::output_tcsetattr (int, struct termios const *t)
-{
- /* All the output bits we can ignore */
-
- DWORD flags = ENABLE_PROCESSED_OUTPUT | ENABLE_WRAP_AT_EOL_OUTPUT;
-
- int res = SetConsoleMode (get_output_handle (), flags) ? 0 : -1;
- if (res)
- __seterrno_from_win_error (GetLastError ());
- syscall_printf ("%d = tcsetattr(,%p) (ENABLE FLAGS %y) (lflag %y oflag %y)",
- res, t, flags, t->c_lflag, t->c_oflag);
- return res;
-}
-
-int
-fhandler_console::input_tcsetattr (int, struct termios const *t)
-{
- /* Ignore the optional_actions stuff, since all output is emitted
- instantly */
-
- DWORD oflags;
-
- if (!GetConsoleMode (get_io_handle (), &oflags))
- oflags = 0;
- DWORD flags = 0;
-
-#if 0
- /* Enable/disable LF -> CRLF conversions */
- rbinary ((t->c_iflag & INLCR) ? false : true);
-#endif
-
- /* There's some disparity between what we need and what's
- available. We've got ECHO and ICANON, they've
- got ENABLE_ECHO_INPUT and ENABLE_LINE_INPUT. */
-
- termios_printf ("this %p, get_ttyp () %p, t %p", this, get_ttyp (), t);
- get_ttyp ()->ti = *t;
-
- if (t->c_lflag & ECHO)
- {
- flags |= ENABLE_ECHO_INPUT;
- }
- if (t->c_lflag & ICANON)
- {
- flags |= ENABLE_LINE_INPUT;
- }
-
- if (flags & ENABLE_ECHO_INPUT
- && !(flags & ENABLE_LINE_INPUT))
- {
- /* This is illegal, so turn off the echo here, and fake it
- when we read the characters */
-
- flags &= ~ENABLE_ECHO_INPUT;
- }
-
- if ((t->c_lflag & ISIG) && !(t->c_iflag & IGNBRK))
- {
- flags |= ENABLE_PROCESSED_INPUT;
- }
-
- flags |= ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT;
-
- int res;
- if (flags == oflags)
- res = 0;
- else
- {
- res = SetConsoleMode (get_io_handle (), flags) ? 0 : -1;
- if (res < 0)
- __seterrno ();
- syscall_printf ("%d = tcsetattr(,%p) enable flags %y, c_lflag %y iflag %y",
- res, t, flags, t->c_lflag, t->c_iflag);
- }
-
- get_ttyp ()->rstcons (false);
- return res;
-}
-
-int
-fhandler_console::tcsetattr (int a, struct termios const *t)
-{
- int res = output_tcsetattr (a, t);
- if (res != 0)
- return res;
- return input_tcsetattr (a, t);
-}
-
-int
-fhandler_console::tcgetattr (struct termios *t)
-{
- int res;
- *t = get_ttyp ()->ti;
-
- t->c_cflag |= CS8;
-
- DWORD flags;
-
- if (!GetConsoleMode (get_io_handle (), &flags))
- {
- __seterrno ();
- res = -1;
- }
- else
- {
- if (flags & ENABLE_ECHO_INPUT)
- t->c_lflag |= ECHO;
-
- if (flags & ENABLE_LINE_INPUT)
- t->c_lflag |= ICANON;
-
- if (flags & ENABLE_PROCESSED_INPUT)
- t->c_lflag |= ISIG;
- else
- t->c_iflag |= IGNBRK;
-
- /* What about ENABLE_WINDOW_INPUT
- and ENABLE_MOUSE_INPUT ? */
-
- /* All the output bits we can ignore */
- res = 0;
- }
- syscall_printf ("%d = tcgetattr(%p) enable flags %y, t->lflag %y, t->iflag %y",
- res, t, flags, t->c_lflag, t->c_iflag);
- return res;
-}
-
-fhandler_console::fhandler_console (fh_devices unit) :
- fhandler_termios ()
-{
- if (unit > 0)
- dev ().parse (unit);
- setup ();
- trunc_buf.len = 0;
- _tc = &(shared_console_info->tty_min_state);
-}
-
-void
-dev_console::set_color (HANDLE h)
-{
- WORD win_fg = fg;
- WORD win_bg = bg;
- if (reverse)
- {
- WORD save_fg = win_fg;
- win_fg = (win_bg & BACKGROUND_RED ? FOREGROUND_RED : 0) |
- (win_bg & BACKGROUND_GREEN ? FOREGROUND_GREEN : 0) |
- (win_bg & BACKGROUND_BLUE ? FOREGROUND_BLUE : 0) |
- (win_bg & BACKGROUND_INTENSITY ? FOREGROUND_INTENSITY : 0);
- win_bg = (save_fg & FOREGROUND_RED ? BACKGROUND_RED : 0) |
- (save_fg & FOREGROUND_GREEN ? BACKGROUND_GREEN : 0) |
- (save_fg & FOREGROUND_BLUE ? BACKGROUND_BLUE : 0) |
- (save_fg & FOREGROUND_INTENSITY ? BACKGROUND_INTENSITY : 0);
- }
-
- /* apply attributes */
- if (underline)
- win_fg = underline_color;
- /* emulate blink with bright background */
- if (blink)
- win_bg |= BACKGROUND_INTENSITY;
- if (intensity == INTENSITY_INVISIBLE)
- win_fg = win_bg;
- else if (intensity != INTENSITY_BOLD)
- /* nothing to do */;
- /* apply foreground intensity only in non-reverse mode! */
- else if (reverse)
- win_bg |= BACKGROUND_INTENSITY;
- else
- win_fg |= FOREGROUND_INTENSITY;
-
- current_win32_attr = win_fg | win_bg;
- if (h)
- SetConsoleTextAttribute (h, current_win32_attr);
-}
-
-#define FOREGROUND_ATTR_MASK (FOREGROUND_RED | FOREGROUND_GREEN | \
- FOREGROUND_BLUE | FOREGROUND_INTENSITY)
-#define BACKGROUND_ATTR_MASK (BACKGROUND_RED | BACKGROUND_GREEN | \
- BACKGROUND_BLUE | BACKGROUND_INTENSITY)
-void
-dev_console::set_default_attr ()
-{
- blink = underline = reverse = false;
- intensity = INTENSITY_NORMAL;
- fg = default_color & FOREGROUND_ATTR_MASK;
- bg = default_color & BACKGROUND_ATTR_MASK;
- set_color (NULL);
-}
-
-int
-dev_console::set_cl_x (cltype x)
-{
- if (x == cl_disp_beg || x == cl_buf_beg)
- return 0;
- if (x == cl_disp_end)
- return dwWinSize.X - 1;
- if (x == cl_buf_end)
- return b.dwSize.X - 1;
- return b.dwCursorPosition.X;
-}
-
-int
-dev_console::set_cl_y (cltype y)
-{
- if (y == cl_buf_beg)
- return 0;
- if (y == cl_disp_beg)
- return b.srWindow.Top;
- if (y == cl_disp_end)
- return b.srWindow.Bottom;
- if (y == cl_buf_end)
- return b.dwSize.Y - 1;
- return b.dwCursorPosition.Y;
-}
-
-bool
-dev_console::scroll_window (HANDLE h, int x1, int y1, int x2, int y2)
-{
- if (save_buf || x1 != 0 || x2 != dwWinSize.X - 1 || y1 != b.srWindow.Top
- || y2 != b.srWindow.Bottom || b.dwSize.Y <= dwWinSize.Y)
- return false;
-
- SMALL_RECT sr;
- int toscroll = 2 + dwEnd.Y - b.srWindow.Top;
- int shrink = 1 + toscroll + b.srWindow.Bottom - b.dwSize.Y;
- sr.Left = sr.Right = dwEnd.X = 0;
- /* Can't increment dwEnd yet since we may not have space in
- the buffer. */
- SetConsoleCursorPosition (h, dwEnd);
- if (shrink > 0)
- {
- COORD c = b.dwSize;
- c.Y = dwEnd.Y - shrink;
- SetConsoleScreenBufferSize (h, c);
- SetConsoleScreenBufferSize (h, b.dwSize);
- dwEnd.Y = 0;
- fillin (h);
- toscroll = 2 + dwEnd.Y - b.srWindow.Top;
- }
-
- sr.Top = sr.Bottom = toscroll;
-
- SetConsoleWindowInfo (h, FALSE, &sr);
-
- dwEnd.Y++;
- SetConsoleCursorPosition (h, dwEnd);
-
- fillin (h);
- return true;
-}
-
-/*
- * Clear the screen context from x1/y1 to x2/y2 cell.
- * Negative values represents current screen dimensions
- */
-void __reg3
-fhandler_console::clear_screen (cltype xc1, cltype yc1, cltype xc2, cltype yc2)
-{
- HANDLE h = get_output_handle ();
- con.fillin (h);
-
- int x1 = con.set_cl_x (xc1);
- int y1 = con.set_cl_y (yc1);
- int x2 = con.set_cl_x (xc2);
- int y2 = con.set_cl_y (yc2);
-
- /* Detect special case - scroll the screen if we have a buffer in order to
- preserve the buffer. */
- if (!con.scroll_window (h, x1, y1, x2, y2))
- con.clear_screen (h, x1, y1, x2, y2);
-}
-
-void __reg3
-dev_console::clear_screen (HANDLE h, int x1, int y1, int x2, int y2)
-{
- COORD tlc;
- DWORD done;
- int num;
-
- num = abs (y1 - y2) * b.dwSize.X + abs (x1 - x2) + 1;
-
- if ((y2 * b.dwSize.X + x2) > (y1 * b.dwSize.X + x1))
- {
- tlc.X = x1;
- tlc.Y = y1;
- }
- else
- {
- tlc.X = x2;
- tlc.Y = y2;
- }
- FillConsoleOutputCharacterA (h, ' ', num, tlc, &done);
- FillConsoleOutputAttribute (h, current_win32_attr, num, tlc, &done);
-}
-
-void __reg3
-fhandler_console::cursor_set (bool rel_to_top, int x, int y)
-{
- COORD pos;
-
- con.fillin (get_output_handle ());
-#if 0
- /* Setting y to the current b.srWindow.Bottom here is the reason that the window
- isn't scrolled back to the current cursor position like it's done in
- any other terminal. Rather, the curser is forced to the bottom of the
- currently scrolled region. This breaks the console buffer content if
- output is generated while the user had the window scrolled back. This
- behaviour is very old, it has no matching ChangeLog entry.
- Just disable for now but keep the code in for future reference. */
- if (y > con.b.srWindow.Bottom)
- y = con.b.srWindow.Bottom;
- else
-#endif
- if (y < 0)
- y = 0;
- else if (rel_to_top)
- y += con.b.srWindow.Top;
-
- if (x > con.dwWinSize.X)
- x = con.dwWinSize.X - 1;
- else if (x < 0)
- x = 0;
-
- pos.X = x;
- pos.Y = y;
- SetConsoleCursorPosition (get_output_handle (), pos);
-}
-
-void __reg3
-fhandler_console::cursor_rel (int x, int y)
-{
- con.fillin (get_output_handle ());
- x += con.b.dwCursorPosition.X;
- y += con.b.dwCursorPosition.Y;
- cursor_set (false, x, y);
-}
-
-void __reg3
-fhandler_console::cursor_get (int *x, int *y)
-{
- con.fillin (get_output_handle ());
- *y = con.b.dwCursorPosition.Y;
- *x = con.b.dwCursorPosition.X;
-}
-
-/* VT100 line drawing graphics mode maps `abcdefghijklmnopqrstuvwxyz{|}~ to
- graphical characters */
-static const wchar_t __vt100_conv[31] = {
- 0x25C6, /* Black Diamond */
- 0x2592, /* Medium Shade */
- 0x2409, /* Symbol for Horizontal Tabulation */
- 0x240C, /* Symbol for Form Feed */
- 0x240D, /* Symbol for Carriage Return */
- 0x240A, /* Symbol for Line Feed */
- 0x00B0, /* Degree Sign */
- 0x00B1, /* Plus-Minus Sign */
- 0x2424, /* Symbol for Newline */
- 0x240B, /* Symbol for Vertical Tabulation */
- 0x2518, /* Box Drawings Light Up And Left */
- 0x2510, /* Box Drawings Light Down And Left */
- 0x250C, /* Box Drawings Light Down And Right */
- 0x2514, /* Box Drawings Light Up And Right */
- 0x253C, /* Box Drawings Light Vertical And Horizontal */
- 0x23BA, /* Horizontal Scan Line-1 */
- 0x23BB, /* Horizontal Scan Line-3 */
- 0x2500, /* Box Drawings Light Horizontal */
- 0x23BC, /* Horizontal Scan Line-7 */
- 0x23BD, /* Horizontal Scan Line-9 */
- 0x251C, /* Box Drawings Light Vertical And Right */
- 0x2524, /* Box Drawings Light Vertical And Left */
- 0x2534, /* Box Drawings Light Up And Horizontal */
- 0x252C, /* Box Drawings Light Down And Horizontal */
- 0x2502, /* Box Drawings Light Vertical */
- 0x2264, /* Less-Than Or Equal To */
- 0x2265, /* Greater-Than Or Equal To */
- 0x03C0, /* Greek Small Letter Pi */
- 0x2260, /* Not Equal To */
- 0x00A3, /* Pound Sign */
- 0x00B7, /* Middle Dot */
-};
-
-inline
-bool fhandler_console::write_console (PWCHAR buf, DWORD len, DWORD& done)
-{
- if (con.iso_2022_G1
- ? con.vt100_graphics_mode_G1
- : con.vt100_graphics_mode_G0)
- for (DWORD i = 0; i < len; i ++)
- if (buf[i] >= (unsigned char) '`' && buf[i] <= (unsigned char) '~')
- buf[i] = __vt100_conv[buf[i] - (unsigned char) '`'];
-
- while (len > 0)
- {
- DWORD nbytes = len > MAX_WRITE_CHARS ? MAX_WRITE_CHARS : len;
- if (!WriteConsoleW (get_output_handle (), buf, nbytes, &done, 0))
- {
- __seterrno ();
- return false;
- }
- len -= done;
- buf += done;
- }
- return true;
-}
-
-/* The following three functions were adapted (i.e., mildly modified) from
- http://stackoverflow.com/questions/14699043/replacement-to-systemcolor */
-
-/* Split a rectangular region into two smaller rectangles based on the
- largest dimension. */
-static void
-region_split (PCHAR_INFO& buf, COORD& bufsiz, SMALL_RECT& region,
- PCHAR_INFO& buf_b, COORD& bufsiz_b, SMALL_RECT& region_b)
-{
- region_b = region;
- bufsiz_b = bufsiz;
-
- SHORT half = (1 + region.Bottom - region.Top) / 2;
- region_b.Top += half;
- region.Bottom = (bufsiz.Y = region_b.Top) - 1;
- buf_b = buf + (half * (1 + region.Right));
- bufsiz_b.Y = region_b.Bottom - region_b.Top;
-}
-
-/* Utility function to figure out the distance between two points. */
-static SHORT
-delta (SHORT first, SHORT second)
-{
- return (second >= first) ? (second - first + 1) : 0;
-}
-
-/* Subdivide the ReadConsoleInput operation into smaller and smaller chunks as
- needed until it succeeds in reading the entire screen buffer. */
-static BOOL
-ReadConsoleOutputWrapper (HANDLE h, PCHAR_INFO buf, COORD bufsiz,
- SMALL_RECT region)
-{
- COORD coord = {};
- SHORT width = delta (region.Left, region.Right);
- SHORT height = delta (region.Top, region.Bottom);
-
- if ((width == 0) || (height == 0))
- return TRUE;
-
- BOOL success = ReadConsoleOutputW (h, buf, bufsiz, coord, &region);
- if (success)
- /* it worked */;
- else if (GetLastError () == ERROR_NOT_ENOUGH_MEMORY && (width * height) > 1)
- {
- PCHAR_INFO buf_b;
- COORD bufsiz_b;
- SMALL_RECT region_b;
- region_split (buf, bufsiz, region, buf_b, bufsiz_b, region_b);
- success = ReadConsoleOutputWrapper (h, buf, bufsiz, region)
- && ReadConsoleOutputWrapper (h, buf_b, bufsiz_b, region_b);
- }
- return success;
-}
-
-void
-dev_console::save_restore (HANDLE h, char c)
-{
- if (c == 'h') /* save */
- {
- fillin (h);
- save_bufsize.X = b.dwSize.X;
- if ((save_bufsize.Y = dwEnd.Y + 1) > b.dwSize.Y)
- save_bufsize.X = b.dwSize.Y;
-
- if (save_buf)
- cfree (save_buf);
- size_t screen_size = sizeof (CHAR_INFO) * save_bufsize.X * save_bufsize.Y;
- save_buf = (PCHAR_INFO) cmalloc_abort (HEAP_1_BUF, screen_size);
-
- save_cursor = b.dwCursorPosition; /* Remember where we were. */
- save_top = b.srWindow.Top;
-
- SMALL_RECT now = {}; /* Read the whole buffer */
- now.Bottom = save_bufsize.Y - 1;
- now.Right = save_bufsize.X - 1;
- if (!ReadConsoleOutputWrapper (h, save_buf, save_bufsize, now))
- debug_printf ("ReadConsoleOutputWrapper(h, ...) failed during save, %E");
-
- /* Position at top of buffer */
- COORD cob = {};
- if (!SetConsoleCursorPosition (h, cob))
- debug_printf ("SetConsoleCursorInfo(%p, ...) failed during save, %E", h);
-
- /* Clear entire buffer */
- clear_screen (h, 0, 0, now.Right, now.Bottom);
- b.dwCursorPosition.X = b.dwCursorPosition.Y = dwEnd.X = dwEnd.Y = 0;
- }
- else if (save_buf)
- {
- COORD cob = {};
- SMALL_RECT now = {};
- now.Bottom = save_bufsize.Y - 1;
- now.Right = save_bufsize.X - 1;
- /* Restore whole buffer */
- clear_screen (h, 0, 0, b.dwSize.X - 1, b.dwSize.Y - 1);
- BOOL res = WriteConsoleOutputW (h, save_buf, save_bufsize, cob, &now);
- if (!res)
- debug_printf ("WriteConsoleOutputW failed, %E");
-
- cfree (save_buf);
- save_buf = NULL;
-
- cob.X = 0;
- cob.Y = save_top;
- /* CGF: NOOP? Doesn't seem to position screen as expected */
- /* Temporarily position at top of screen */
- if (!SetConsoleCursorPosition (h, cob))
- debug_printf ("SetConsoleCursorInfo(%p, cob) failed during restore, %E", h);
- /* Position where we were previously */
- if (!SetConsoleCursorPosition (h, save_cursor))
- debug_printf ("SetConsoleCursorInfo(%p, save_cursor) failed during restore, %E", h);
- /* Get back correct version of buffer information */
- dwEnd.X = dwEnd.Y = 0;
- fillin (h);
- }
-}
-
-#define BAK 1
-#define ESC 2
-#define NOR 0
-#define IGN 4
-#if 1
-#define ERR 5
-#else
-#define ERR NOR
-#endif
-#define DWN 6
-#define BEL 7
-#define TAB 8 /* We should't let the console deal with these */
-#define CR 13
-#define LF 10
-#define SO 14
-#define SI 15
-
-static const char base_chars[256] =
-{
-/*00 01 02 03 04 05 06 07 */ IGN, ERR, ERR, NOR, NOR, NOR, NOR, BEL,
-/*08 09 0A 0B 0C 0D 0E 0F */ BAK, TAB, DWN, ERR, ERR, CR, SO, SI,
-/*10 11 12 13 14 15 16 17 */ NOR, NOR, ERR, ERR, ERR, ERR, ERR, ERR,
-/*18 19 1A 1B 1C 1D 1E 1F */ NOR, NOR, ERR, ESC, ERR, ERR, ERR, ERR,
-/* ! " # $ % & ' */ NOR, NOR, NOR, NOR, NOR, NOR, NOR, NOR,
-/*( ) * + , - . / */ NOR, NOR, NOR, NOR, NOR, NOR, NOR, NOR,
-/*0 1 2 3 4 5 6 7 */ NOR, NOR, NOR, NOR, NOR, NOR, NOR, NOR,
-/*8 9 : ; < = > ? */ NOR, NOR, NOR, NOR, NOR, NOR, NOR, NOR,
-/*@ A B C D E F G */ NOR, NOR, NOR, NOR, NOR, NOR, NOR, NOR,
-/*H I J K L M N O */ NOR, NOR, NOR, NOR, NOR, NOR, NOR, NOR,
-/*P Q R S T U V W */ NOR, NOR, NOR, NOR, NOR, NOR, NOR, NOR,
-/*X Y Z [ \ ] ^ _ */ NOR, NOR, NOR, NOR, NOR, NOR, NOR, NOR,
-/*` a b c d e f g */ NOR, NOR, NOR, NOR, NOR, NOR, NOR, NOR,
-/*h i j k l m n o */ NOR, NOR, NOR, NOR, NOR, NOR, NOR, NOR,
-/*p q r s t u v w */ NOR, NOR, NOR, NOR, NOR, NOR, NOR, NOR,
-/*x y z { | } ~ 7F */ NOR, NOR, NOR, NOR, NOR, NOR, NOR, NOR,
-/*80 81 82 83 84 85 86 87 */ NOR, NOR, NOR, NOR, NOR, NOR, NOR, NOR,
-/*88 89 8A 8B 8C 8D 8E 8F */ NOR, NOR, NOR, NOR, NOR, NOR, NOR, NOR,
-/*90 91 92 93 94 95 96 97 */ NOR, NOR, NOR, NOR, NOR, NOR, NOR, NOR,
-/*98 99 9A 9B 9C 9D 9E 9F */ NOR, NOR, NOR, NOR, NOR, NOR, NOR, NOR,
-/*A0 A1 A2 A3 A4 A5 A6 A7 */ NOR, NOR, NOR, NOR, NOR, NOR, NOR, NOR,
-/*A8 A9 AA AB AC AD AE AF */ NOR, NOR, NOR, NOR, NOR, NOR, NOR, NOR,
-/*B0 B1 B2 B3 B4 B5 B6 B7 */ NOR, NOR, NOR, NOR, NOR, NOR, NOR, NOR,
-/*B8 B9 BA BB BC BD BE BF */ NOR, NOR, NOR, NOR, NOR, NOR, NOR, NOR,
-/*C0 C1 C2 C3 C4 C5 C6 C7 */ NOR, NOR, NOR, NOR, NOR, NOR, NOR, NOR,
-/*C8 C9 CA CB CC CD CE CF */ NOR, NOR, NOR, NOR, NOR, NOR, NOR, NOR,
-/*D0 D1 D2 D3 D4 D5 D6 D7 */ NOR, NOR, NOR, NOR, NOR, NOR, NOR, NOR,
-/*D8 D9 DA DB DC DD DE DF */ NOR, NOR, NOR, NOR, NOR, NOR, NOR, NOR,
-/*E0 E1 E2 E3 E4 E5 E6 E7 */ NOR, NOR, NOR, NOR, NOR, NOR, NOR, NOR,
-/*E8 E9 EA EB EC ED EE EF */ NOR, NOR, NOR, NOR, NOR, NOR, NOR, NOR,
-/*F0 F1 F2 F3 F4 F5 F6 F7 */ NOR, NOR, NOR, NOR, NOR, NOR, NOR, NOR,
-/*F8 F9 FA FB FC FD FE FF */ NOR, NOR, NOR, NOR, NOR, NOR, NOR, NOR };
-
-void
-fhandler_console::char_command (char c)
-{
- int x, y, n;
- char buf[40];
-
- switch (c)
- {
- case 'm': /* Set Graphics Rendition */
- for (int i = 0; i <= con.nargs; i++)
- switch (con.args[i])
- {
- case 0: /* normal color */
- con.set_default_attr ();
- break;
- case 1: /* bold */
- con.intensity = INTENSITY_BOLD;
- break;
- case 2: /* dim */
- con.intensity = INTENSITY_DIM;
- break;
- case 4: /* underlined */
- con.underline = 1;
- break;
- case 5: /* blink mode */
- con.blink = true;
- break;
- case 7: /* reverse */
- con.reverse = true;
- break;
- case 8: /* invisible */
- con.intensity = INTENSITY_INVISIBLE;
- break;
- case 10: /* end alternate charset */
- con.alternate_charset_active = false;
- break;
- case 11: /* start alternate charset */
- con.alternate_charset_active = true;
- break;
- case 22:
- case 28:
- con.intensity = INTENSITY_NORMAL;
- break;
- case 24:
- con.underline = false;
- break;
- case 25:
- con.blink = false;
- break;
- case 27:
- con.reverse = false;
- break;
- case 30: /* BLACK foreground */
- con.fg = 0;
- break;
- case 31: /* RED foreground */
- con.fg = FOREGROUND_RED;
- break;
- case 32: /* GREEN foreground */
- con.fg = FOREGROUND_GREEN;
- break;
- case 33: /* YELLOW foreground */
- con.fg = FOREGROUND_RED | FOREGROUND_GREEN;
- break;
- case 34: /* BLUE foreground */
- con.fg = FOREGROUND_BLUE;
- break;
- case 35: /* MAGENTA foreground */
- con.fg = FOREGROUND_RED | FOREGROUND_BLUE;
- break;
- case 36: /* CYAN foreground */
- con.fg = FOREGROUND_BLUE | FOREGROUND_GREEN;
- break;
- case 37: /* WHITE foreg */
- con.fg = FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED;
- break;
- case 39:
- con.fg = con.default_color & FOREGROUND_ATTR_MASK;
- break;
- case 40: /* BLACK background */
- con.bg = 0;
- break;
- case 41: /* RED background */
- con.bg = BACKGROUND_RED;
- break;
- case 42: /* GREEN background */
- con.bg = BACKGROUND_GREEN;
- break;
- case 43: /* YELLOW background */
- con.bg = BACKGROUND_RED | BACKGROUND_GREEN;
- break;
- case 44: /* BLUE background */
- con.bg = BACKGROUND_BLUE;
- break;
- case 45: /* MAGENTA background */
- con.bg = BACKGROUND_RED | BACKGROUND_BLUE;
- break;
- case 46: /* CYAN background */
- con.bg = BACKGROUND_BLUE | BACKGROUND_GREEN;
- break;
- case 47: /* WHITE background */
- con.bg = BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED;
- break;
- case 49:
- con.bg = con.default_color & BACKGROUND_ATTR_MASK;
- break;
- }
- con.set_color (get_output_handle ());
- break;
- case 'q': /* Set cursor style (DECSCUSR) */
- if (con.saw_space)
- {
- CONSOLE_CURSOR_INFO console_cursor_info;
- GetConsoleCursorInfo (get_output_handle (), &console_cursor_info);
- switch (con.args[0])
- {
- case 0: /* blinking block */
- case 1: /* blinking block (default) */
- case 2: /* steady block */
- console_cursor_info.dwSize = 100;
- SetConsoleCursorInfo (get_output_handle (), &console_cursor_info);
- break;
- case 3: /* blinking underline */
- case 4: /* steady underline */
- console_cursor_info.dwSize = 10; /* or Windows default 25? */
- SetConsoleCursorInfo (get_output_handle (), &console_cursor_info);
- break;
- default: /* use value as percentage */
- console_cursor_info.dwSize = con.args[0];
- SetConsoleCursorInfo (get_output_handle (), &console_cursor_info);
- break;
- }
- }
- break;
- case 'h':
- case 'l':
- if (!con.saw_question_mark)
- {
- switch (con.args[0])
- {
- case 4: /* Insert mode */
- con.insert_mode = (c == 'h') ? true : false;
- syscall_printf ("insert mode %sabled", con.insert_mode ? "en" : "dis");
- break;
- }
- break;
- }
- switch (con.args[0])
- {
- case 25: /* Show/Hide Cursor (DECTCEM) */
- {
- CONSOLE_CURSOR_INFO console_cursor_info;
- GetConsoleCursorInfo (get_output_handle (), & console_cursor_info);
- if (c == 'h')
- console_cursor_info.bVisible = TRUE;
- else
- console_cursor_info.bVisible = FALSE;
- SetConsoleCursorInfo (get_output_handle (), & console_cursor_info);
- break;
- }
- case 47: /* Save/Restore screen */
- con.save_restore (get_output_handle (), c);
- break;
-
- case 67: /* DECBKM ("DEC Backarrow Key Mode") */
- con.backspace_keycode = (c == 'h' ? CTRL('H') : CERASE);
- break;
-
- case 1000: /* Mouse tracking */
- con.use_mouse = (c == 'h') ? 1 : 0;
- break;
-
- case 1002: /* Mouse button event tracking */
- con.use_mouse = (c == 'h') ? 2 : 0;
- break;
-
- case 1003: /* Mouse any event tracking */
- con.use_mouse = (c == 'h') ? 3 : 0;
- break;
-
- case 1004: /* Focus in/out event reporting */
- con.use_focus = (c == 'h') ? true : false;
- break;
-
- case 1005: /* Extended mouse mode */
- con.ext_mouse_mode5 = c == 'h';
- break;
-
- case 1006: /* SGR extended mouse mode */
- con.ext_mouse_mode6 = c == 'h';
- break;
-
- case 1015: /* Urxvt extended mouse mode */
- con.ext_mouse_mode15 = c == 'h';
- break;
-
- case 2000: /* Raw keyboard mode */
- set_raw_win32_keyboard_mode ((c == 'h') ? true : false);
- break;
-
- default: /* Ignore */
- syscall_printf ("unknown h/l command: %d", con.args[0]);
- break;
- }
- break;
- case 'J':
- switch (con.args[0])
- {
- case 0: /* Clear to end of screen */
- clear_screen (cl_curr_pos, cl_curr_pos, cl_disp_end, cl_disp_end);
- break;
- case 1: /* Clear from beginning of screen to cursor */
- clear_screen (cl_disp_beg, cl_disp_beg, cl_curr_pos, cl_curr_pos);
- break;
- case 2: /* Clear screen */
- cursor_get (&x, &y);
- clear_screen (cl_disp_beg, cl_disp_beg, cl_disp_end, cl_disp_end);
- cursor_set (false, x, y);
- break;
- default:
- goto bad_escape;
- }
- break;
-
- case 'A':
- cursor_rel (0, -(con.args[0] ?: 1));
- break;
- case 'B':
- cursor_rel (0, con.args[0] ?: 1);
- break;
- case 'C':
- cursor_rel (con.args[0] ?: 1, 0);
- break;
- case 'D':
- cursor_rel (-(con.args[0] ?: 1),0);
- break;
- case 'K':
- switch (con.args[0])
- {
- case 0: /* Clear to end of line */
- clear_screen (cl_curr_pos, cl_curr_pos, cl_disp_end, cl_curr_pos);
- break;
- case 2: /* Clear line */
- clear_screen (cl_disp_beg, cl_curr_pos, cl_disp_end, cl_curr_pos);
- break;
- case 1: /* Clear from bol to cursor */
- clear_screen (cl_disp_beg, cl_curr_pos, cl_curr_pos, cl_curr_pos);
- break;
- default:
- goto bad_escape;
- }
- break;
- case 'H':
- case 'f':
- cursor_set (true, (con.args[1] ?: 1) - 1,
- (con.args[0] ?: 1) - 1);
- break;
- case 'G': /* hpa - position cursor at column n - 1 */
- cursor_get (&x, &y);
- cursor_set (false, (con.args[0] ? con.args[0] - 1 : 0), y);
- break;
- case 'd': /* vpa - position cursor at line n */
- cursor_get (&x, &y);
- cursor_set (true, x, (con.args[0] ? con.args[0] - 1 : 0));
- break;
- case 's': /* Save cursor position */
- cursor_get (&con.savex, &con.savey);
- con.savey -= con.b.srWindow.Top;
- break;
- case 'u': /* Restore cursor position */
- cursor_set (true, con.savex, con.savey);
- break;
- case 'I': /* TAB */
- cursor_get (&x, &y);
- cursor_set (false, 8 * (x / 8 + 1), y);
- break;
- case 'L': /* AL - insert blank lines */
- n = con.args[0] ?: 1;
- cursor_get (&x, &y);
- scroll_buffer (0, y, -1, -1, 0, y + n);
- break;
- case 'M': /* DL - delete lines */
- n = con.args[0] ?: 1;
- cursor_get (&x, &y);
- scroll_buffer (0, y + n, -1, -1, 0, y);
- break;
- case '@': /* IC - insert chars */
- n = con.args[0] ?: 1;
- cursor_get (&x, &y);
- scroll_buffer (x, y, -1, y, x + n, y);
- break;
- case 'P': /* DC - delete chars */
- n = con.args[0] ?: 1;
- cursor_get (&x, &y);
- scroll_buffer (x + n, y, -1, y, x, y);
- break;
- case 'S': /* SF - Scroll forward */
- n = con.args[0] ?: 1;
- scroll_buffer_screen (0, n, -1, -1, 0, 0);
- break;
- case 'T': /* SR - Scroll down */
- con.fillin (get_output_handle ());
- n = con.b.srWindow.Top + con.args[0] ?: 1;
- scroll_buffer_screen (0, 0, -1, -1, 0, n);
- break;
- case 'X': /* ec - erase chars */
- n = con.args[0] ?: 1;
- cursor_get (&x, &y);
- scroll_buffer (x + n, y, -1, y, x, y);
- scroll_buffer (x, y, -1, y, x + n, y);
- break;
- case 'Z': /* Back tab */
- cursor_get (&x, &y);
- cursor_set (false, ((8 * (x / 8 + 1)) - 8), y);
- break;
- case 'b': /* Repeat char #1 #2 times */
- if (con.insert_mode)
- {
- cursor_get (&x, &y);
- scroll_buffer (x, y, -1, y, x + con.args[1], y);
- }
- while (con.args[1]--)
- WriteFile (get_output_handle (), &con.args[0], 1, (DWORD *) &x, 0);
- break;
- case 'c': /* u9 - Terminal enquire string */
- if (con.saw_greater_than_sign)
- /* Generate Secondary Device Attribute report, using 67 = ASCII 'C'
- to indicate Cygwin (convention used by Rxvt, Urxvt, Screen, Mintty),
- and cygwin version for terminal version. */
- __small_sprintf (buf, "\033[>67;%d%02d;0c", CYGWIN_VERSION_DLL_MAJOR, CYGWIN_VERSION_DLL_MINOR);
- else
- strcpy (buf, "\033[?6c");
- /* The generated report needs to be injected for read-ahead into the
- fhandler_console object associated with standard input.
- The current call does not work. */
- puts_readahead (buf);
- break;
- case 'n':
- switch (con.args[0])
- {
- case 6: /* u7 - Cursor position request */
- cursor_get (&x, &y);
- y -= con.b.srWindow.Top;
- /* x -= con.b.srWindow.Left; // not available yet */
- __small_sprintf (buf, "\033[%d;%dR", y + 1, x + 1);
- puts_readahead (buf);
- break;
- default:
- goto bad_escape;
- }
- break;
- case 'r': /* Set Scroll region */
- con.scroll_region.Top = con.args[0] ? con.args[0] - 1 : 0;
- con.scroll_region.Bottom = con.args[1] ? con.args[1] - 1 : -1;
- cursor_set (true, 0, 0);
- break;
- case 'g': /* TAB set/clear */
- break;
- default:
-bad_escape:
- break;
- }
-}
-
-/* This gets called when we found an invalid input character. We just
- print a half filled square (UTF 0x2592). We have no chance to figure
- out the "meaning" of the input char anyway. */
-inline void
-fhandler_console::write_replacement_char ()
-{
- static const wchar_t replacement_char = 0x2592; /* Half filled square */
- DWORD done;
- WriteConsoleW (get_output_handle (), &replacement_char, 1, &done, 0);
-}
-
-const unsigned char *
-fhandler_console::write_normal (const unsigned char *src,
- const unsigned char *end)
-{
- /* Scan forward to see what a char which needs special treatment */
- DWORD done;
- DWORD buf_len;
- const unsigned char *found = src;
- size_t ret;
- mbstate_t ps;
- UINT cp = con.get_console_cp ();
- const char *charset;
- mbtowc_p f_mbtowc;
-
- if (cp)
- {
- /* The alternate charset is always 437, just as in the Linux console. */
- f_mbtowc = __cp_mbtowc;
- charset = "CP437";
- }
- else
- {
- f_mbtowc = cygheap->locale.mbtowc;
- charset = cygheap->locale.charset;
- }
-
- /* First check if we have cached lead bytes of a former try to write
- a truncated multibyte sequence. If so, process it. */
- if (trunc_buf.len)
- {
- const unsigned char *nfound;
- int cp_len = MIN (end - src, 4 - trunc_buf.len);
- memcpy (trunc_buf.buf + trunc_buf.len, src, cp_len);
- memset (&ps, 0, sizeof ps);
- switch (ret = f_mbtowc (_REENT, NULL, (const char *) trunc_buf.buf,
- trunc_buf.len + cp_len, charset, &ps))
- {
- case -2:
- /* Still truncated multibyte sequence? Keep in trunc_buf. */
- trunc_buf.len += cp_len;
- return end;
- case -1:
- /* Give up, print replacement chars for trunc_buf... */
- for (int i = 0; i < trunc_buf.len; ++i)
- write_replacement_char ();
- /* ... mark trunc_buf as unused... */
- trunc_buf.len = 0;
- /* ... and proceed. */
- nfound = NULL;
- break;
- case 0:
- nfound = trunc_buf.buf + 1;
- break;
- default:
- nfound = trunc_buf.buf + ret;
- break;
- }
- /* Valid multibyte sequence? Process. */
- if (nfound)
- {
- buf_len = con.str_to_con (f_mbtowc, charset, write_buf,
- (const char *) trunc_buf.buf,
- nfound - trunc_buf.buf);
- if (!write_console (write_buf, buf_len, done))
- {
- debug_printf ("multibyte sequence write failed, handle %p", get_output_handle ());
- return 0;
- }
- found = src + (nfound - trunc_buf.buf - trunc_buf.len);
- trunc_buf.len = 0;
- return found;
- }
- }
-
- /* Loop over src buffer as long as we have just simple characters. Stop
- as soon as we reach the conversion limit, or if we encounter a control
- character or a truncated or invalid mutibyte sequence. */
- memset (&ps, 0, sizeof ps);
- while (found < end
- && found - src < CONVERT_LIMIT
- && base_chars[*found] == NOR)
- {
- switch (ret = f_mbtowc (_REENT, NULL, (const char *) found,
- end - found, charset, &ps))
- {
- case -2: /* Truncated multibyte sequence. Store for next write. */
- trunc_buf.len = end - found;
- memcpy (trunc_buf.buf, found, trunc_buf.len);
- goto do_print;
- case -1: /* Invalid multibyte sequence. Handled below. */
- goto do_print;
- case 0:
- found++;
- break;
- default:
- found += ret;
- break;
- }
- }
-
-do_print:
-
- /* Print all the base characters out */
- if (found != src)
- {
- DWORD len = found - src;
- buf_len = con.str_to_con (f_mbtowc, charset, write_buf,
- (const char *) src, len);
- if (!buf_len)
- {
- debug_printf ("conversion error, handle %p",
- get_output_handle ());
- __seterrno ();
- return 0;
- }
-
- if (con.insert_mode)
- {
- int x, y;
- cursor_get (&x, &y);
- scroll_buffer (x, y, -1, y, x + buf_len, y);
- }
-
- if (!write_console (write_buf, buf_len, done))
- {
- debug_printf ("write failed, handle %p", get_output_handle ());
- return 0;
- }
- /* Stop here if we reached the conversion limit. */
- if (len >= CONVERT_LIMIT)
- return found + trunc_buf.len;
- }
- /* If there's still something in the src buffer, but it's not a truncated
- multibyte sequence, then we stumbled over a control character or an
- invalid multibyte sequence. Print it. */
- if (found < end && trunc_buf.len == 0)
- {
- int x, y;
- switch (base_chars[*found])
- {
- case SO: /* Shift Out: Invoke G1 character set (ISO 2022) */
- con.iso_2022_G1 = true;
- break;
- case SI: /* Shift In: Invoke G0 character set (ISO 2022) */
- con.iso_2022_G1 = false;
- break;
- case BEL:
- beep ();
- break;
- case ESC:
- con.state = gotesc;
- break;
- case DWN:
- cursor_get (&x, &y);
- if (y >= srBottom)
- {
- if (y >= con.b.srWindow.Bottom && !con.scroll_region.Top)
- WriteConsoleW (get_output_handle (), L"\n", 1, &done, 0);
- else
- {
- scroll_buffer (0, srTop + 1, -1, srBottom, 0, srTop);
- y--;
- }
- }
- cursor_set (false, ((get_ttyp ()->ti.c_oflag & ONLCR) ? 0 : x), y + 1);
- break;
- case BAK:
- cursor_rel (-1, 0);
- break;
- case IGN:
- cursor_rel (1, 0);
- break;
- case CR:
- cursor_get (&x, &y);
- cursor_set (false, 0, y);
- break;
- case ERR:
- /* Don't print chars marked as ERR chars, except for a ASCII CAN
- sequence which is printed as singlebyte chars from the UTF
- Basic Latin and Latin 1 Supplement plains. */
- if (*found == 0x18)
- {
- write_replacement_char ();
- if (found + 1 < end)
- {
- ret = __utf8_mbtowc (_REENT, NULL, (const char *) found + 1,
- end - found - 1, NULL, &ps);
- if (ret != (size_t) -1)
- while (ret-- > 0)
- {
- WCHAR w = *(found + 1);
- WriteConsoleW (get_output_handle (), &w, 1, &done, 0);
- found++;
- }
- }
- }
- break;
- case TAB:
- cursor_get (&x, &y);
- cursor_set (false, 8 * (x / 8 + 1), y);
- break;
- case NOR:
- write_replacement_char ();
- break;
- }
- found++;
- }
- return found + trunc_buf.len;
-}
-
-ssize_t __stdcall
-fhandler_console::write (const void *vsrc, size_t len)
-{
- bg_check_types bg = bg_check (SIGTTOU);
- if (bg <= bg_eof)
- return (ssize_t) bg;
-
- push_process_state process_state (PID_TTYOU);
-
- /* Run and check for ansi sequences */
- unsigned const char *src = (unsigned char *) vsrc;
- unsigned const char *end = src + len;
- /* This might look a bit far fetched, but using the TLS path buffer allows
- to allocate a big buffer without using the stack too much. Doing it here
- in write instead of in write_normal should be faster, too. */
- tmp_pathbuf tp;
- write_buf = tp.w_get ();
-
- debug_printf ("%p, %ld", vsrc, len);
-
- while (src < end)
- {
- paranoid_printf ("char %0c state is %d", *src, con.state);
- switch (con.state)
- {
- case normal:
- src = write_normal (src, end);
- if (!src) /* write_normal failed */
- return -1;
- break;
- case gotesc:
- if (*src == '[') /* CSI Control Sequence Introducer */
- {
- con.state = gotsquare;
- con.saw_question_mark = false;
- con.saw_greater_than_sign = false;
- con.saw_space = false;
- for (con.nargs = 0; con.nargs < MAXARGS; con.nargs++)
- con.args[con.nargs] = 0;
- con.nargs = 0;
- }
- else if (*src == ']') /* OSC Operating System Command */
- {
- con.rarg = 0;
- con.my_title_buf[0] = '\0';
- con.state = gotrsquare;
- }
- else if (*src == '(') /* Designate G0 character set */
- {
- con.state = gotparen;
- }
- else if (*src == ')') /* Designate G1 character set */
- {
- con.state = gotrparen;
- }
- else if (*src == 'M') /* Reverse Index (scroll down) */
- {
- con.fillin (get_output_handle ());
- scroll_buffer_screen (0, 0, -1, -1, 0, 1);
- con.state = normal;
- }
- else if (*src == 'c') /* RIS Full Reset */
- {
- con.set_default_attr ();
- con.vt100_graphics_mode_G0 = false;
- con.vt100_graphics_mode_G1 = false;
- con.iso_2022_G1 = false;
- cursor_set (false, 0, 0);
- clear_screen (cl_buf_beg, cl_buf_beg, cl_buf_end, cl_buf_end);
- con.state = normal;
- }
- else if (*src == '8') /* DECRC Restore cursor position */
- {
- cursor_set (false, con.savex, con.savey);
- con.state = normal;
- }
- else if (*src == '7') /* DECSC Save cursor position */
- {
- cursor_get (&con.savex, &con.savey);
- con.state = normal;
- }
- else if (*src == 'R') /* ? */
- con.state = normal;
- else
- {
- con.state = normal;
- }
- src++;
- break;
- case gotarg1:
- if (isdigit (*src))
- {
- con.args[con.nargs] = con.args[con.nargs] * 10 + *src - '0';
- src++;
- }
- else if (*src == ';')
- {
- src++;
- con.nargs++;
- if (con.nargs >= MAXARGS)
- con.nargs--;
- }
- else if (*src == ' ')
- {
- src++;
- con.saw_space = true;
- con.state = gotcommand;
- }
- else
- con.state = gotcommand;
- break;
- case gotcommand:
- char_command (*src++);
- con.state = normal;
- break;
- case gotrsquare:
- if (isdigit (*src))
- con.rarg = con.rarg * 10 + (*src - '0');
- else if (*src == ';' && (con.rarg == 2 || con.rarg == 0))
- con.state = gettitle;
- else
- con.state = eattitle;
- src++;
- break;
- case eattitle:
- case gettitle:
- {
- int n = strlen (con.my_title_buf);
- if (*src < ' ')
- {
- if (*src == '\007' && con.state == gettitle)
- set_console_title (con.my_title_buf);
- con.state = normal;
- }
- else if (n < TITLESIZE)
- {
- con.my_title_buf[n++] = *src;
- con.my_title_buf[n] = '\0';
- }
- src++;
- break;
- }
- case gotsquare:
- if (*src == ';')
- {
- con.state = gotarg1;
- con.nargs++;
- src++;
- }
- else if (isalpha (*src))
- con.state = gotcommand;
- else if (*src != '@' && !isalpha (*src) && !isdigit (*src))
- {
- if (*src == '?')
- con.saw_question_mark = true;
- else if (*src == '>')
- con.saw_greater_than_sign = true;
- /* ignore any extra chars between [ and first arg or command */
- src++;
- }
- else
- con.state = gotarg1;
- break;
- case gotparen: /* Designate G0 Character Set (ISO 2022) */
- if (*src == '0')
- con.vt100_graphics_mode_G0 = true;
- else
- con.vt100_graphics_mode_G0 = false;
- con.state = normal;
- src++;
- break;
- case gotrparen: /* Designate G1 Character Set (ISO 2022) */
- if (*src == '0')
- con.vt100_graphics_mode_G1 = true;
- else
- con.vt100_graphics_mode_G1 = false;
- con.state = normal;
- src++;
- break;
- }
- }
-
- syscall_printf ("%ld = fhandler_console::write(...)", len);
-
- return len;
-}
-
-static const struct {
- int vk;
- const char *val[4];
-} keytable[] = {
- /* NORMAL */ /* SHIFT */ /* CTRL */ /* CTRL-SHIFT */
- /* Unmodified and Alt-modified keypad keys comply with linux console
- SHIFT, CTRL, CTRL-SHIFT modifiers comply with xterm modifier usage */
- {VK_NUMPAD5, {"\033[G", "\033[1;2G", "\033[1;5G", "\033[1;6G"}},
- {VK_CLEAR, {"\033[G", "\033[1;2G", "\033[1;5G", "\033[1;6G"}},
- {VK_LEFT, {"\033[D", "\033[1;2D", "\033[1;5D", "\033[1;6D"}},
- {VK_RIGHT, {"\033[C", "\033[1;2C", "\033[1;5C", "\033[1;6C"}},
- {VK_UP, {"\033[A", "\033[1;2A", "\033[1;5A", "\033[1;6A"}},
- {VK_DOWN, {"\033[B", "\033[1;2B", "\033[1;5B", "\033[1;6B"}},
- {VK_PRIOR, {"\033[5~", "\033[5;2~", "\033[5;5~", "\033[5;6~"}},
- {VK_NEXT, {"\033[6~", "\033[6;2~", "\033[6;5~", "\033[6;6~"}},
- {VK_HOME, {"\033[1~", "\033[1;2~", "\033[1;5~", "\033[1;6~"}},
- {VK_END, {"\033[4~", "\033[4;2~", "\033[4;5~", "\033[4;6~"}},
- {VK_INSERT, {"\033[2~", "\033[2;2~", "\033[2;5~", "\033[2;6~"}},
- {VK_DELETE, {"\033[3~", "\033[3;2~", "\033[3;5~", "\033[3;6~"}},
- /* F1...F12, SHIFT-F1...SHIFT-F10 comply with linux console
- F6...F12, and all modified F-keys comply with rxvt (compatible extension) */
- {VK_F1, {"\033[[A", "\033[23~", "\033[11^", "\033[23^"}},
- {VK_F2, {"\033[[B", "\033[24~", "\033[12^", "\033[24^"}},
- {VK_F3, {"\033[[C", "\033[25~", "\033[13^", "\033[25^"}},
- {VK_F4, {"\033[[D", "\033[26~", "\033[14^", "\033[26^"}},
- {VK_F5, {"\033[[E", "\033[28~", "\033[15^", "\033[28^"}},
- {VK_F6, {"\033[17~", "\033[29~", "\033[17^", "\033[29^"}},
- {VK_F7, {"\033[18~", "\033[31~", "\033[18^", "\033[31^"}},
- {VK_F8, {"\033[19~", "\033[32~", "\033[19^", "\033[32^"}},
- {VK_F9, {"\033[20~", "\033[33~", "\033[20^", "\033[33^"}},
- {VK_F10, {"\033[21~", "\033[34~", "\033[21^", "\033[34^"}},
- {VK_F11, {"\033[23~", "\033[23$", "\033[23^", "\033[23@"}},
- {VK_F12, {"\033[24~", "\033[24$", "\033[24^", "\033[24@"}},
- /* CTRL-6 complies with Windows cmd console but should be fixed */
- {'6', {NULL, NULL, "\036", NULL}},
- /* Table end marker */
- {0}
-};
-
-const char *
-get_nonascii_key (INPUT_RECORD& input_rec, char *tmp)
-{
-#define NORMAL 0
-#define SHIFT 1
-#define CONTROL 2
-/*#define CONTROLSHIFT 3*/
-
- int modifier_index = NORMAL;
- if (input_rec.Event.KeyEvent.dwControlKeyState & SHIFT_PRESSED)
- modifier_index = SHIFT;
- if (input_rec.Event.KeyEvent.dwControlKeyState & CTRL_PRESSED)
- modifier_index += CONTROL;
-
- for (int i = 0; keytable[i].vk; i++)
- if (input_rec.Event.KeyEvent.wVirtualKeyCode == keytable[i].vk)
- {
- if ((input_rec.Event.KeyEvent.dwControlKeyState & ALT_PRESSED)
- && keytable[i].val[modifier_index] != NULL)
- { /* Generic ESC prefixing if Alt is pressed */
- tmp[0] = '\033';
- strcpy (tmp + 1, keytable[i].val[modifier_index]);
- return tmp;
- }
- else
- return keytable[i].val[modifier_index];
- }
-
- if (input_rec.Event.KeyEvent.uChar.AsciiChar)
- {
- tmp[0] = input_rec.Event.KeyEvent.uChar.AsciiChar;
- tmp[1] = '\0';
- return tmp;
- }
- return NULL;
-}
-
-int
-fhandler_console::init (HANDLE h, DWORD a, mode_t bin)
-{
- // this->fhandler_termios::init (h, mode, bin);
- /* Ensure both input and output console handles are open */
- int flags = 0;
-
- a &= GENERIC_READ | GENERIC_WRITE;
- if (a == GENERIC_READ)
- flags = O_RDONLY;
- if (a == GENERIC_WRITE)
- flags = O_WRONLY;
- if (a == (GENERIC_READ | GENERIC_WRITE))
- flags = O_RDWR;
- open_with_arch (flags | O_BINARY | (h ? 0 : O_NOCTTY));
-
- return !tcsetattr (0, &get_ttyp ()->ti);
-}
-
-int
-fhandler_console::igncr_enabled ()
-{
- return get_ttyp ()->ti.c_iflag & IGNCR;
-}
-
-void
-fhandler_console::set_close_on_exec (bool val)
-{
- close_on_exec (val);
-}
-
-void __stdcall
-set_console_title (char *title)
-{
- wchar_t buf[TITLESIZE + 1];
- sys_mbstowcs (buf, TITLESIZE + 1, title);
- lock_ttys here (15000);
- SetConsoleTitleW (buf);
- debug_printf ("title '%W'", buf);
-}
-
-void
-fhandler_console::fixup_after_fork_exec (bool execing)
-{
- set_unit ();
-}
-
-// #define WINSTA_ACCESS (WINSTA_READATTRIBUTES | STANDARD_RIGHTS_READ | STANDARD_RIGHTS_WRITE | WINSTA_CREATEDESKTOP | WINSTA_EXITWINDOWS)
-#define WINSTA_ACCESS WINSTA_ALL_ACCESS
-
-/* Create a console in an invisible window station. This should work
- in all versions of Windows NT except Windows 7 (so far). */
-bool
-fhandler_console::create_invisible_console (HWINSTA horig)
-{
- HWINSTA h = CreateWindowStationW (NULL, 0, WINSTA_ACCESS, NULL);
- termios_printf ("%p = CreateWindowStation(NULL), %E", h);
- BOOL b;
- if (h)
- {
- b = SetProcessWindowStation (h);
- termios_printf ("SetProcessWindowStation %d, %E", b);
- }
- b = AllocConsole (); /* will cause flashing if CreateWindowStation
- failed */
- if (!h)
- SetParent (GetConsoleWindow (), HWND_MESSAGE);
- if (horig && h && h != horig && SetProcessWindowStation (horig))
- CloseWindowStation (h);
- termios_printf ("%d = AllocConsole (), %E", b);
- invisible_console = true;
- return b;
-}
-
-/* Ugly workaround for Windows 7 and later.
-
- First try to just attach to any console which may have started this
- app. If that works use this as our "invisible console".
-
- This will fail if not started from the command prompt. In that case, start
- a dummy console application in a hidden state so that we can use its console
- as our invisible console. This probably works everywhere but process
- creation is slow and to be avoided if possible so the window station method
- is vastly preferred.
-
- FIXME: This is not completely thread-safe since it creates two inheritable
- handles which are known only to this function. If another thread starts
- a process the new process will inherit these handles. However, since this
- function is currently only called at startup and during exec, it shouldn't
- be a big deal. */
-bool
-fhandler_console::create_invisible_console_workaround ()
-{
- if (!AttachConsole (-1))
- {
- bool taskbar;
- DWORD err = GetLastError ();
- path_conv helper ("/bin/cygwin-console-helper.exe");
- HANDLE hello = NULL;
- HANDLE goodbye = NULL;
- /* If err == ERROR_PROC_FOUND then this method won't work. But that's
- ok. The window station method should work ok when AttachConsole doesn't
- work.
-
- If the helper doesn't exist or we can't create event handles then we
- can't use this method. */
- if (err == ERROR_PROC_NOT_FOUND || !helper.exists ()
- || !(hello = CreateEvent (&sec_none, true, false, NULL))
- || !(goodbye = CreateEvent (&sec_none, true, false, NULL)))
- {
- AllocConsole (); /* This is just sanity check code. We should
- never actually hit here unless we're running
- in an environment which lacks the helper
- app. */
- taskbar = true;
- }
- else
- {
- STARTUPINFOW si = {};
- PROCESS_INFORMATION pi;
- size_t len = helper.get_wide_win32_path_len ();
- WCHAR cmd[len + (2 * strlen (" 0xffffffff")) + 1];
- WCHAR title[] = L"invisible cygwin console";
-
- helper.get_wide_win32_path (cmd);
- __small_swprintf (cmd + len, L" %p %p", hello, goodbye);
-
- si.cb = sizeof (si);
- si.dwFlags = STARTF_USESHOWWINDOW;
- si.wShowWindow = SW_HIDE;
- si.lpTitle = title;
-
- /* Create a new hidden process. Use the two event handles as
- argv[1] and argv[2]. */
- BOOL x = CreateProcessW (NULL, cmd, &sec_none_nih, &sec_none_nih, true,
- CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);
- if (x)
- {
- CloseHandle (pi.hProcess); /* Don't need */
- CloseHandle (pi.hThread); /* these. */
- }
- taskbar = false;
- /* Wait for subprocess to indicate that it is live. This may not
- actually be needed but it's hard to say since it is possible that
- there will be no console for a brief time after the process
- returns and there is no easy way to determine if/when this happens
- in Windows. So play it safe. */
- if (!x || (WaitForSingleObject (hello, 10000) != WAIT_OBJECT_0)
- || !AttachConsole (pi.dwProcessId))
- AllocConsole (); /* Oh well. Watch the flash. */
- }
-
- if (!taskbar)
- /* Setting the owner of the console window to HWND_MESSAGE seems to
- hide it from the taskbar. Don't know if this method is faster than
- calling ShowWindowAsync but it should guarantee no taskbar presence
- for the hidden console. */
- SetParent (GetConsoleWindow (), HWND_MESSAGE);
- if (hello)
- CloseHandle (hello);
- if (goodbye)
- {
- SetEvent (goodbye); /* Tell helper process it's ok to exit. */
- CloseHandle (goodbye);
- }
- }
- return invisible_console = true;
-}
-
-void
-fhandler_console::free_console ()
-{
- BOOL res = FreeConsole ();
- debug_printf ("freed console, res %d", res);
- init_console_handler (false);
-}
-
-bool
-fhandler_console::need_invisible ()
-{
- BOOL b = false;
- if (exists ())
- invisible_console = false;
- else
- {
- HWINSTA h;
- /* The intent here is to allocate an "invisible" console if we have no
- controlling tty or to reuse the existing console if we already have
- a tty. So, first get the old window station. If there is no controlling
- terminal, create a new window station and then set it as the current
- window station. The subsequent AllocConsole will then be allocated
- invisibly. But, after doing that we have to restore any existing windows
- station or, strangely, characters will not be displayed in any windows
- drawn on the current screen. We only do this if we have changed to
- a new window station and if we had an existing windows station previously.
- We also close the previously opened window station even though AllocConsole
- is now "using" it. This doesn't seem to cause any problems.
-
- Things to watch out for if you make changes in this code:
-
- - Flashing, black consoles showing up when you start, e.g., ssh in
- an xterm.
- - Non-displaying of characters in rxvt or xemacs if you start a
- process using setsid: bash -lc "setsid rxvt". */
-
- h = GetProcessWindowStation ();
-
- USEROBJECTFLAGS oi;
- DWORD len;
- if (!h
- || !GetUserObjectInformationW (h, UOI_FLAGS, &oi, sizeof (oi), &len)
- || !(oi.dwFlags & WSF_VISIBLE))
- {
- b = true;
- debug_printf ("window station is not visible");
- AllocConsole ();
- invisible_console = true;
- }
- else if (wincap.has_broken_alloc_console ())
- b = create_invisible_console_workaround ();
- else
- b = create_invisible_console (h);
- }
-
- debug_printf ("invisible_console %d", invisible_console);
- return b;
-}
diff --git a/winsup/cygwin/fhandler_dev.cc b/winsup/cygwin/fhandler_dev.cc
deleted file mode 100644
index 4f92a1db8..000000000
--- a/winsup/cygwin/fhandler_dev.cc
+++ /dev/null
@@ -1,229 +0,0 @@
-/* fhandler_dev.cc, Implement /dev.
-
- Copyright 2012, 2013 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include <stdlib.h>
-#include <sys/statvfs.h>
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "devices.h"
-
-#define _COMPILING_NEWLIB
-#include <dirent.h>
-
-#define dev_prefix_len (sizeof ("/dev"))
-#define dev_storage_scan_start (dev_storage + 1)
-#define dev_storage_size (dev_storage_end - dev_storage_scan_start)
-
-static int
-device_cmp (const void *a, const void *b)
-{
- return strcmp (((const device *) a)->name,
- ((const device *) b)->name + dev_prefix_len);
-}
-
-fhandler_dev::fhandler_dev () :
- fhandler_disk_file (), devidx (NULL), dir_exists (true)
-{
-}
-
-int
-fhandler_dev::open (int flags, mode_t mode)
-{
- if ((flags & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL))
- {
- set_errno (EEXIST);
- return 0;
- }
- if (flags & O_WRONLY)
- {
- set_errno (EISDIR);
- return 0;
- }
- /* Filter O_CREAT flag to avoid creating a file called /dev accidentally. */
- int ret = fhandler_disk_file::open (flags & ~O_CREAT, mode);
- if (!ret)
- {
- /* Open a fake handle to \\Device\\Null */
- ret = open_null (flags);
- dir_exists = false;
- }
- return ret;
-}
-
-int
-fhandler_dev::close ()
-{
- return fhandler_disk_file::close ();
-}
-
-int __reg2
-fhandler_dev::fstat (struct stat *st)
-{
- /* If /dev really exists on disk, return correct disk information. */
- if (pc.fs_got_fs ())
- return fhandler_disk_file::fstat (st);
- /* Otherwise fake virtual filesystem. */
- fhandler_base::fstat (st);
- st->st_ino = 2;
- st->st_mode = S_IFDIR | STD_RBITS | STD_XBITS;
- st->st_nlink = 1;
- return 0;
-}
-
-int __reg2
-fhandler_dev::fstatvfs (struct statvfs *sfs)
-{
- int ret = -1, opened = 0;
- HANDLE fh = get_handle ();
-
- if (!fh)
- {
- if (!open (O_RDONLY, 0))
- return -1;
- opened = 1;
- }
- if (pc.fs_got_fs ())
- ret = fhandler_disk_file::fstatvfs (sfs);
- else
- {
- /* Virtual file system. Just return an empty buffer with a few values
- set to something useful similar to Linux. */
- memset (sfs, 0, sizeof (*sfs));
- sfs->f_bsize = sfs->f_frsize = 4096;
- sfs->f_flag = ST_RDONLY;
- sfs->f_namemax = NAME_MAX;
- ret = 0;
- }
- if (opened)
- close ();
- return ret;
-}
-
-DIR *
-fhandler_dev::opendir (int fd)
-{
- DIR *dir = fhandler_disk_file::opendir (fd);
- if (dir)
- dir_exists = true;
- else if ((dir = (DIR *) malloc (sizeof (DIR))) == NULL)
- set_errno (ENOMEM);
- else if ((dir->__d_dirent =
- (struct dirent *) malloc (sizeof (struct dirent))) == NULL)
- {
- set_errno (ENOMEM);
- goto free_dir;
- }
- else
- {
- cygheap_fdnew cfd;
- if (cfd < 0 && fd < 0)
- goto free_dirent;
-
- dir->__d_dirname = NULL;
- dir->__d_dirent->__d_version = __DIRENT_VERSION;
- dir->__d_cookie = __DIRENT_COOKIE;
- dir->__handle = INVALID_HANDLE_VALUE;
- dir->__d_position = 0;
- dir->__flags = 0;
- dir->__d_internal = 0;
-
- if (fd >= 0)
- dir->__d_fd = fd;
- else if (!open (O_RDONLY, 0))
- goto free_dirent;
- else
- {
- cfd = this;
- dir->__d_fd = cfd;
- }
- set_close_on_exec (true);
- dir->__fh = this;
- dir_exists = false;
- }
-
- devidx = dir_exists ? NULL : dev_storage_scan_start;
-
- syscall_printf ("%p = opendir (%s)", dir, get_name ());
- return dir;
-
-free_dirent:
- free (dir->__d_dirent);
-free_dir:
- free (dir);
- return NULL;
-}
-
-int
-fhandler_dev::readdir (DIR *dir, dirent *de)
-{
- int ret;
- const device *curdev;
- device dev;
-
- if (!devidx)
- {
- while ((ret = fhandler_disk_file::readdir (dir, de)) == 0)
- {
- /* Avoid to print devices for which users have created files under
- /dev already, for instance by using the old script from Igor
- Peshansky. */
- dev.name = de->d_name;
- if (!bsearch (&dev, dev_storage_scan_start, dev_storage_size,
- sizeof dev, device_cmp))
- break;
- }
- if (ret != ENMFILE)
- goto out;
- devidx = dev_storage_scan_start;
- }
-
- /* Now start processing our internal dev table. */
- ret = ENMFILE;
- while ((curdev = devidx++) < dev_storage_end)
- {
- /* If exists returns < 0 it means that the device can be used by a
- program but its use is deprecated and, so, it is not returned
- by readdir((). */
- if (curdev->exists () <= 0)
- continue;
- ++dir->__d_position;
- strcpy (de->d_name, curdev->name + dev_prefix_len);
- if (curdev->get_major () == DEV_TTY_MAJOR
- && (curdev->is_device (FH_CONIN)
- || curdev->is_device (FH_CONOUT)
- || curdev->is_device (FH_CONSOLE)))
- {
- /* Make sure conin, conout, and console have the same inode number
- as the current consX. */
- de->d_ino = myself->ctty;
- }
- else
- de->d_ino = curdev->get_device ();
- de->d_type = curdev->type ();
- ret = 0;
- break;
- }
-
-out:
- debug_printf ("returning %d", ret);
- return ret;
-}
-
-void
-fhandler_dev::rewinddir (DIR *dir)
-{
- devidx = dir_exists ? NULL : dev_storage_scan_start;
- dir->__d_position = 0;
- if (dir_exists)
- fhandler_disk_file::rewinddir (dir);
-}
diff --git a/winsup/cygwin/fhandler_disk_file.cc b/winsup/cygwin/fhandler_disk_file.cc
deleted file mode 100644
index ba615c26f..000000000
--- a/winsup/cygwin/fhandler_disk_file.cc
+++ /dev/null
@@ -1,2543 +0,0 @@
-/* fhandler_disk_file.cc
-
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include <winioctl.h>
-#include <lm.h>
-#include <stdlib.h>
-#include <sys/acl.h>
-#include <sys/statvfs.h>
-#include "cygerrno.h"
-#include "security.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "shared_info.h"
-#include "pinfo.h"
-#include "ntdll.h"
-#include "tls_pbuf.h"
-#include "devices.h"
-#include "ldap.h"
-
-#define _COMPILING_NEWLIB
-#include <dirent.h>
-
-class __DIR_mounts
-{
- int count;
- const char *parent_dir;
- int parent_dir_len;
- UNICODE_STRING mounts[MAX_MOUNTS];
- bool found[MAX_MOUNTS + 3];
- UNICODE_STRING cygdrive;
-
-#define __DIR_PROC (MAX_MOUNTS)
-#define __DIR_CYGDRIVE (MAX_MOUNTS+1)
-#define __DIR_DEV (MAX_MOUNTS+2)
-
- ino_t eval_ino (int idx)
- {
- ino_t ino = 0;
- char fname[parent_dir_len + mounts[idx].Length + 2];
- struct stat st;
-
- char *c = stpcpy (fname, parent_dir);
- if (c[- 1] != '/')
- *c++ = '/';
- sys_wcstombs (c, mounts[idx].Length + 1,
- mounts[idx].Buffer, mounts[idx].Length / sizeof (WCHAR));
- path_conv pc (fname, PC_SYM_NOFOLLOW | PC_POSIX | PC_KEEP_HANDLE);
- if (!stat_worker (pc, &st))
- ino = st.st_ino;
- return ino;
- }
-
-public:
- __DIR_mounts (const char *posix_path)
- : parent_dir (posix_path)
- {
- parent_dir_len = strlen (parent_dir);
- count = mount_table->get_mounts_here (parent_dir, parent_dir_len, mounts,
- &cygdrive);
- rewind ();
- }
- ~__DIR_mounts ()
- {
- for (int i = 0; i < count; ++i)
- RtlFreeUnicodeString (&mounts[i]);
- RtlFreeUnicodeString (&cygdrive);
- }
- ino_t check_mount (PUNICODE_STRING fname, ino_t ino,
- bool eval = true)
- {
- if (parent_dir_len == 1) /* root dir */
- {
- if (RtlEqualUnicodeString (fname, &ro_u_proc, FALSE))
- {
- found[__DIR_PROC] = true;
- return 2;
- }
- if (RtlEqualUnicodeString (fname, &ro_u_dev, FALSE))
- {
- found[__DIR_DEV] = true;
- return 2;
- }
- if (fname->Length / sizeof (WCHAR) == mount_table->cygdrive_len - 2
- && RtlEqualUnicodeString (fname, &cygdrive, FALSE))
- {
- found[__DIR_CYGDRIVE] = true;
- return 2;
- }
- }
- for (int i = 0; i < count; ++i)
- if (RtlEqualUnicodeString (fname, &mounts[i], FALSE))
- {
- found[i] = true;
- return eval ? eval_ino (i) : 1;
- }
- return ino;
- }
- ino_t check_missing_mount (PUNICODE_STRING retname = NULL)
- {
- for (int i = 0; i < count; ++i)
- if (!found[i])
- {
- found[i] = true;
- if (retname)
- {
- *retname = mounts[i];
- return eval_ino (i);
- }
- return 1;
- }
- if (parent_dir_len == 1) /* root dir */
- {
- if (!found[__DIR_PROC])
- {
- found[__DIR_PROC] = true;
- if (retname)
- *retname = ro_u_proc;
- return 2;
- }
- if (!found[__DIR_DEV])
- {
- found[__DIR_DEV] = true;
- if (retname)
- *retname = ro_u_dev;
- return 2;
- }
- if (!found[__DIR_CYGDRIVE])
- {
- found[__DIR_CYGDRIVE] = true;
- if (cygdrive.Length > 0)
- {
- if (retname)
- *retname = cygdrive;
- return 2;
- }
- }
- }
- return 0;
- }
- void rewind () { memset (found, 0, sizeof found); }
-};
-
-inline bool
-path_conv::isgood_inode (ino_t ino) const
-{
- /* If the FS doesn't support nonambiguous inode numbers anyway, bail out
- immediately. */
- if (!hasgood_inode ())
- return false;
- /* If the inode numbers are 64 bit numbers or if it's a local FS, they
- are to be trusted. */
- if (ino > UINT32_MAX || !isremote ())
- return true;
- /* The inode numbers returned from a remote NT4 NTFS are ephemeral
- 32 bit numbers. */
- if (fs_is_ntfs ())
- return false;
- /* Starting with version 3.5.4, Samba returns the real inode numbers, if
- the file is on the same device as the root of the share (Samba function
- get_FileIndex). 32 bit inode numbers returned by older versions (likely
- < 3.0) are ephemeral. */
- if (fs_is_samba () && fs.samba_version () < 0x03050400)
- return false;
- /* Otherwise, trust the inode numbers unless proved otherwise. */
- return true;
-}
-
-/* Check reparse point for type. IO_REPARSE_TAG_MOUNT_POINT types are
- either volume mount points, which are treated as directories, or they
- are directory mount points, which are treated as symlinks.
- IO_REPARSE_TAG_SYMLINK types are always symlinks. We don't know
- anything about other reparse points, so they are treated as unknown. */
-static inline int
-readdir_check_reparse_point (POBJECT_ATTRIBUTES attr)
-{
- DWORD ret = DT_UNKNOWN;
- IO_STATUS_BLOCK io;
- HANDLE reph;
- UNICODE_STRING subst;
-
- if (NT_SUCCESS (NtOpenFile (&reph, READ_CONTROL, attr, &io,
- FILE_SHARE_VALID_FLAGS,
- FILE_OPEN_FOR_BACKUP_INTENT
- | FILE_OPEN_REPARSE_POINT)))
- {
- PREPARSE_DATA_BUFFER rp = (PREPARSE_DATA_BUFFER)
- alloca (MAXIMUM_REPARSE_DATA_BUFFER_SIZE);
- if (NT_SUCCESS (NtFsControlFile (reph, NULL, NULL, NULL,
- &io, FSCTL_GET_REPARSE_POINT, NULL, 0,
- (LPVOID) rp, MAXIMUM_REPARSE_DATA_BUFFER_SIZE)))
- {
- if (rp->ReparseTag == IO_REPARSE_TAG_MOUNT_POINT)
- {
- RtlInitCountedUnicodeString (&subst,
- (WCHAR *)((char *)rp->MountPointReparseBuffer.PathBuffer
- + rp->MountPointReparseBuffer.SubstituteNameOffset),
- rp->MountPointReparseBuffer.SubstituteNameLength);
- /* Only volume mountpoints are treated as directories. */
- if (RtlEqualUnicodePathPrefix (&subst, &ro_u_volume, TRUE))
- ret = DT_DIR;
- else
- ret = DT_LNK;
- }
- else if (rp->ReparseTag == IO_REPARSE_TAG_SYMLINK)
- ret = DT_LNK;
- NtClose (reph);
- }
- }
- return ret;
-}
-
-inline ino_t
-path_conv::get_ino_by_handle (HANDLE hdl)
-{
- IO_STATUS_BLOCK io;
- FILE_INTERNAL_INFORMATION fai;
-
- if (NT_SUCCESS (NtQueryInformationFile (hdl, &io, &fai, sizeof fai,
- FileInternalInformation))
- && isgood_inode (fai.FileId.QuadPart))
- return fai.FileId.QuadPart;
- return 0;
-}
-
-#if 0
-/* This function is obsolete. We're keeping it in so we don't forget
- that we already did all that at one point. */
-unsigned __stdcall
-path_conv::ndisk_links (DWORD nNumberOfLinks)
-{
- if (!isdir () || isremote ())
- return nNumberOfLinks;
-
- OBJECT_ATTRIBUTES attr;
- IO_STATUS_BLOCK io;
- HANDLE fh;
-
- if (!NT_SUCCESS (NtOpenFile (&fh, SYNCHRONIZE | FILE_LIST_DIRECTORY,
- get_object_attr (attr, sec_none_nih),
- &io, FILE_SHARE_VALID_FLAGS,
- FILE_SYNCHRONOUS_IO_NONALERT
- | FILE_OPEN_FOR_BACKUP_INTENT
- | FILE_DIRECTORY_FILE)))
- return nNumberOfLinks;
-
- unsigned count = 0;
- bool first = true;
- PFILE_BOTH_DIR_INFORMATION fdibuf = (PFILE_BOTH_DIR_INFORMATION)
- alloca (65536);
- __DIR_mounts *dir = new __DIR_mounts (normalized_path);
- while (NT_SUCCESS (NtQueryDirectoryFile (fh, NULL, NULL, NULL, &io, fdibuf,
- 65536, FileBothDirectoryInformation,
- FALSE, NULL, first)))
- {
- if (first)
- {
- first = false;
- /* All directories have . and .. as their first entries.
- If . is not present as first entry, we're on a drive's
- root direcotry, which doesn't have these entries. */
- if (fdibuf->FileNameLength != 2 || fdibuf->FileName[0] != L'.')
- count = 2;
- }
- for (PFILE_BOTH_DIR_INFORMATION pfdi = fdibuf;
- pfdi;
- pfdi = (PFILE_BOTH_DIR_INFORMATION)
- (pfdi->NextEntryOffset ? (PBYTE) pfdi + pfdi->NextEntryOffset
- : NULL))
- {
- switch (pfdi->FileAttributes
- & (FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_REPARSE_POINT))
- {
- case FILE_ATTRIBUTE_DIRECTORY:
- /* Just a directory */
- ++count;
- break;
- case FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_REPARSE_POINT:
- /* Volume mount point or symlink to directory */
- {
- UNICODE_STRING fname;
-
- RtlInitCountedUnicodeString (&fname, pfdi->FileName,
- pfdi->FileNameLength);
- InitializeObjectAttributes (&attr, &fname,
- objcaseinsensitive (), fh, NULL);
- if (is_volume_mountpoint (&attr))
- ++count;
- }
- break;
- default:
- break;
- }
- UNICODE_STRING fname;
- RtlInitCountedUnicodeString (&fname, pfdi->FileName,
- pfdi->FileNameLength);
- dir->check_mount (&fname, 0, false);
- }
- }
- while (dir->check_missing_mount ())
- ++count;
- NtClose (fh);
- delete dir;
- return count;
-}
-#endif
-
-/* For files on NFS shares, we request an EA of type NfsV3Attributes.
- This returns the content of a struct fattr3 as defined in RFC 1813.
- The content is the NFS equivalent of struct stat. so there's not much
- to do here except for copying. */
-int __reg2
-fhandler_base::fstat_by_nfs_ea (struct stat *buf)
-{
- fattr3 *nfs_attr = pc.nfsattr ();
- PWCHAR domain;
- cyg_ldap cldap;
- bool ldap_open = false;
-
- if (get_io_handle ())
- {
- /* NFS stumbles over its own caching. If you write to the file,
- a subsequent fstat does not return the actual size of the file,
- but the size at the time the handle has been opened. Unless
- access through another handle invalidates the caching within the
- NFS client. */
- if (get_access () & GENERIC_WRITE)
- FlushFileBuffers (get_io_handle ());
- nfs_fetch_fattr3 (get_io_handle (), nfs_attr);
- }
- buf->st_dev = nfs_attr->fsid;
- buf->st_ino = nfs_attr->fileid;
- buf->st_mode = (nfs_attr->mode & 0xfff)
- | nfs_type_mapping[nfs_attr->type & 7];
- buf->st_nlink = nfs_attr->nlink;
- /* Try to map UNIX uid/gid to Cygwin uid/gid. If there's no mapping in
- the cache, try to fetch it from the configured RFC 2307 domain (see
- last comment in cygheap_domain_info::init() for more information) and
- add it to the mapping cache. */
- buf->st_uid = cygheap->ugid_cache.get_uid (nfs_attr->uid);
- buf->st_gid = cygheap->ugid_cache.get_gid (nfs_attr->gid);
- if (buf->st_uid == ILLEGAL_UID)
- {
- uid_t map_uid = ILLEGAL_UID;
-
- domain = cygheap->dom.get_rfc2307_domain ();
- if ((ldap_open = (cldap.open (domain) == NO_ERROR)))
- map_uid = cldap.remap_uid (nfs_attr->uid);
- if (map_uid == ILLEGAL_UID)
- map_uid = MAP_UNIX_TO_CYGWIN_ID (nfs_attr->uid);
- cygheap->ugid_cache.add_uid (nfs_attr->uid, map_uid);
- buf->st_uid = map_uid;
- }
- if (buf->st_gid == ILLEGAL_GID)
- {
- gid_t map_gid = ILLEGAL_GID;
-
- domain = cygheap->dom.get_rfc2307_domain ();
- if ((ldap_open || cldap.open (domain) == NO_ERROR))
- map_gid = cldap.remap_gid (nfs_attr->gid);
- if (map_gid == ILLEGAL_GID)
- map_gid = MAP_UNIX_TO_CYGWIN_ID (nfs_attr->gid);
- cygheap->ugid_cache.add_gid (nfs_attr->gid, map_gid);
- buf->st_gid = map_gid;
- }
- buf->st_rdev = makedev (nfs_attr->rdev.specdata1,
- nfs_attr->rdev.specdata2);
- buf->st_size = nfs_attr->size;
- buf->st_blksize = PREFERRED_IO_BLKSIZE;
- buf->st_blocks = (nfs_attr->used + S_BLKSIZE - 1) / S_BLKSIZE;
- buf->st_atim.tv_sec = nfs_attr->atime.tv_sec;
- buf->st_atim.tv_nsec = nfs_attr->atime.tv_nsec;
- buf->st_mtim.tv_sec = nfs_attr->mtime.tv_sec;
- buf->st_mtim.tv_nsec = nfs_attr->mtime.tv_nsec;
- buf->st_ctim.tv_sec = nfs_attr->ctime.tv_sec;
- buf->st_ctim.tv_nsec = nfs_attr->ctime.tv_nsec;
- return 0;
-}
-
-int __reg2
-fhandler_base::fstat_by_handle (struct stat *buf)
-{
- /* Don't use FileAllInformation info class. It returns a pathname rather
- than a filename, so it needs a really big buffer for no good reason
- since we don't need the name anyway. So we just call the three info
- classes necessary to get all information required by stat(2). */
- FILE_STANDARD_INFORMATION fsi;
- FILE_INTERNAL_INFORMATION fii;
-
- HANDLE h = get_stat_handle ();
- NTSTATUS status = 0;
- IO_STATUS_BLOCK io;
-
- /* If the file has been opened for other purposes than stat, we can't rely
- on the information stored in pc.fnoi. So we overwrite them here. */
- if (get_io_handle ())
- {
- status = file_get_fnoi (h, pc.fs_is_netapp (), pc.fnoi ());
- if (!NT_SUCCESS (status))
- {
- debug_printf ("%y = NtQueryInformationFile(%S, "
- "FileNetworkOpenInformation)",
- status, pc.get_nt_native_path ());
- return -1;
- }
- }
- if (!pc.hasgood_inode ())
- fsi.NumberOfLinks = 1;
- else
- {
- status = NtQueryInformationFile (h, &io, &fsi, sizeof fsi,
- FileStandardInformation);
- if (!NT_SUCCESS (status))
- {
- debug_printf ("%y = NtQueryInformationFile(%S, "
- "FileStandardInformation)",
- status, pc.get_nt_native_path ());
- return -1;
- }
- if (!ino)
- {
- status = NtQueryInformationFile (h, &io, &fii, sizeof fii,
- FileInternalInformation);
- if (!NT_SUCCESS (status))
- {
- debug_printf ("%y = NtQueryInformationFile(%S, "
- "FileInternalInformation)",
- status, pc.get_nt_native_path ());
- return -1;
- }
- else if (pc.isgood_inode (fii.FileId.QuadPart))
- ino = fii.FileId.QuadPart;
- }
- }
- return fstat_helper (buf, fsi.NumberOfLinks);
-}
-
-int __reg2
-fhandler_base::fstat_by_name (struct stat *buf)
-{
- NTSTATUS status;
- OBJECT_ATTRIBUTES attr;
- IO_STATUS_BLOCK io;
- UNICODE_STRING dirname;
- UNICODE_STRING basename;
- HANDLE dir;
- struct {
- FILE_ID_BOTH_DIR_INFORMATION fdi;
- WCHAR buf[NAME_MAX + 1];
- } fdi_buf;
-
- if (!ino && pc.hasgood_inode () && !pc.has_buggy_fileid_dirinfo ())
- {
- RtlSplitUnicodePath (pc.get_nt_native_path (), &dirname, &basename);
- InitializeObjectAttributes (&attr, &dirname, pc.objcaseinsensitive (),
- NULL, NULL);
- status = NtOpenFile (&dir, SYNCHRONIZE | FILE_LIST_DIRECTORY,
- &attr, &io, FILE_SHARE_VALID_FLAGS,
- FILE_SYNCHRONOUS_IO_NONALERT
- | FILE_OPEN_FOR_BACKUP_INTENT
- | FILE_DIRECTORY_FILE);
- if (!NT_SUCCESS (status))
- debug_printf ("%y = NtOpenFile(%S)", status,
- pc.get_nt_native_path ());
- else
- {
- status = NtQueryDirectoryFile (dir, NULL, NULL, NULL, &io,
- &fdi_buf.fdi, sizeof fdi_buf,
- FileIdBothDirectoryInformation,
- TRUE, &basename, TRUE);
- NtClose (dir);
- if (!NT_SUCCESS (status))
- debug_printf ("%y = NtQueryDirectoryFile(%S)", status,
- pc.get_nt_native_path ());
- else
- ino = fdi_buf.fdi.FileId.QuadPart;
- }
- }
- return fstat_helper (buf, 1);
-}
-
-int __reg2
-fhandler_base::fstat_fs (struct stat *buf)
-{
- int res = -1;
- int oret;
- int open_flags = O_RDONLY | O_BINARY;
-
- if (get_stat_handle ())
- {
- if (!nohandle () && !is_fs_special ())
- res = pc.fs_is_nfs () ? fstat_by_nfs_ea (buf) : fstat_by_handle (buf);
- if (res)
- res = fstat_by_name (buf);
- return res;
- }
- /* First try to open with generic read access. This allows to read the file
- in fstat_helper (when checking for executability) without having to
- re-open it. Opening a file can take a lot of time on network drives
- so we try to avoid that. */
- oret = open_fs (open_flags, 0);
- if (!oret)
- {
- query_open (query_read_attributes);
- oret = open_fs (open_flags, 0);
- }
- if (oret)
- {
- /* We now have a valid handle, regardless of the "nohandle" state.
- Since fhandler_base::close only calls CloseHandle if !nohandle,
- we have to set it to false before calling close and restore
- the state afterwards. */
- res = pc.fs_is_nfs () ? fstat_by_nfs_ea (buf) : fstat_by_handle (buf);
- bool no_handle = nohandle ();
- nohandle (false);
- close_fs ();
- nohandle (no_handle);
- set_io_handle (NULL);
- }
- if (res)
- res = fstat_by_name (buf);
-
- return res;
-}
-
-int __reg3
-fhandler_base::fstat_helper (struct stat *buf, DWORD nNumberOfLinks)
-{
- IO_STATUS_BLOCK st;
- FILE_COMPRESSION_INFORMATION fci;
- HANDLE h = get_stat_handle ();
- PFILE_NETWORK_OPEN_INFORMATION pfnoi = pc.fnoi ();
- ULONG attributes = pc.file_attributes ();
-
- to_timestruc_t (&pfnoi->LastAccessTime, &buf->st_atim);
- to_timestruc_t (&pfnoi->LastWriteTime, &buf->st_mtim);
- /* If the ChangeTime is 0, the underlying FS doesn't support this timestamp
- (FAT for instance). If so, it's faked using LastWriteTime. */
- to_timestruc_t (pfnoi->ChangeTime.QuadPart ? &pfnoi->ChangeTime
- : &pfnoi->LastWriteTime,
- &buf->st_ctim);
- to_timestruc_t (&pfnoi->CreationTime, &buf->st_birthtim);
- buf->st_dev = get_dev ();
- /* CV 2011-01-13: Observations on the Cygwin mailing list point to an
- interesting behaviour in some Windows versions. Apparently the size of
- a directory is computed at the time the directory is first scanned. This
- can result in two subsequent NtQueryInformationFile calls to return size
- 0 in the first call and size > 0 in the second call. This in turn can
- affect applications like newer tar.
- FIXME: Is the allocation size affected as well? */
- buf->st_size = pc.isdir () ? 0 : (off_t) pfnoi->EndOfFile.QuadPart;
- /* The number of links to a directory includes the number of subdirectories
- in the directory, since all those subdirectories point to it. However,
- this is painfully slow, so we do without it. */
-#if 0
- buf->st_nlink = pc.ndisk_links (nNumberOfLinks);
-#else
- buf->st_nlink = nNumberOfLinks;
-#endif
-
- /* Enforce namehash as inode number on untrusted file systems. */
- if (ino && pc.isgood_inode (ino))
- buf->st_ino = (ino_t) ino;
- else
- buf->st_ino = get_ino ();
-
- buf->st_blksize = PREFERRED_IO_BLKSIZE;
-
- if (pfnoi->AllocationSize.QuadPart >= 0LL)
- /* A successful NtQueryInformationFile returns the allocation size
- correctly for compressed and sparse files as well. */
- buf->st_blocks = (pfnoi->AllocationSize.QuadPart + S_BLKSIZE - 1)
- / S_BLKSIZE;
- else if (::has_attribute (attributes, FILE_ATTRIBUTE_COMPRESSED
- | FILE_ATTRIBUTE_SPARSE_FILE)
- && h && !is_fs_special ()
- && !NtQueryInformationFile (h, &st, (PVOID) &fci, sizeof fci,
- FileCompressionInformation))
- /* Otherwise we request the actual amount of bytes allocated for
- compressed and sparsed files. */
- buf->st_blocks = (fci.CompressedFileSize.QuadPart + S_BLKSIZE - 1)
- / S_BLKSIZE;
- else
- /* Otherwise compute no. of blocks from file size. */
- buf->st_blocks = (buf->st_size + S_BLKSIZE - 1) / S_BLKSIZE;
-
- buf->st_mode = 0;
- /* Using a side effect: get_file_attributes checks for directory.
- This is used, to set S_ISVTX, if needed. */
- if (pc.isdir ())
- buf->st_mode = S_IFDIR;
- else if (pc.issymlink ())
- {
- buf->st_size = pc.get_symlink_length ();
- /* symlinks are everything for everyone! */
- buf->st_mode = S_IFLNK | S_IRWXU | S_IRWXG | S_IRWXO;
- get_file_attribute (h, pc, NULL,
- &buf->st_uid, &buf->st_gid);
- goto done;
- }
- else if (pc.issocket ())
- buf->st_mode = S_IFSOCK;
-
- if (!get_file_attribute (is_fs_special () && !pc.issocket () ? NULL : h, pc,
- &buf->st_mode, &buf->st_uid, &buf->st_gid))
- {
- /* If read-only attribute is set, modify ntsec return value */
- if (::has_attribute (attributes, FILE_ATTRIBUTE_READONLY)
- && !pc.isdir () && !pc.issymlink ())
- buf->st_mode &= ~(S_IWUSR | S_IWGRP | S_IWOTH);
-
- if (buf->st_mode & S_IFMT)
- /* nothing */;
- else if (!is_fs_special ())
- buf->st_mode |= S_IFREG;
- else
- {
- buf->st_dev = buf->st_rdev = dev ();
- buf->st_mode = dev ().mode;
- buf->st_size = 0;
- }
- }
- else
- {
- buf->st_mode |= STD_RBITS;
-
- if (!::has_attribute (attributes, FILE_ATTRIBUTE_READONLY))
- buf->st_mode |= STD_WBITS;
- /* | S_IWGRP | S_IWOTH; we don't give write to group etc */
-
- if (pc.isdir ())
- buf->st_mode |= S_IFDIR | STD_WBITS | STD_XBITS;
- else if (buf->st_mode & S_IFMT)
- /* nothing */;
- else if (is_fs_special ())
- {
- buf->st_dev = buf->st_rdev = dev ();
- buf->st_mode = dev ().mode;
- buf->st_size = 0;
- }
- else
- {
- buf->st_mode |= S_IFREG;
- /* Check suffix for executable file. */
- if (pc.exec_state () != is_executable)
- {
- PUNICODE_STRING path = pc.get_nt_native_path ();
-
- if (RtlEqualUnicodePathSuffix (path, &ro_u_exe, TRUE)
- || RtlEqualUnicodePathSuffix (path, &ro_u_lnk, TRUE)
- || RtlEqualUnicodePathSuffix (path, &ro_u_com, TRUE))
- pc.set_exec ();
- }
- /* No known suffix, check file header. This catches binaries and
- shebang scripts. */
- if (pc.exec_state () == dont_know_if_executable)
- {
- OBJECT_ATTRIBUTES attr;
- NTSTATUS status = 0;
- IO_STATUS_BLOCK io;
-
- /* We have to re-open the file. Either the file is not opened
- for reading, or the read will change the file position of the
- original handle. */
- status = NtOpenFile (&h, SYNCHRONIZE | FILE_READ_DATA,
- pc.init_reopen_attr (attr, h), &io,
- FILE_SHARE_VALID_FLAGS,
- FILE_OPEN_FOR_BACKUP_INTENT
- | FILE_SYNCHRONOUS_IO_NONALERT);
- if (!NT_SUCCESS (status))
- debug_printf ("%y = NtOpenFile(%S)", status,
- pc.get_nt_native_path ());
- else
- {
- LARGE_INTEGER off = { QuadPart:0LL };
- char magic[3];
-
- status = NtReadFile (h, NULL, NULL, NULL,
- &io, magic, 3, &off, NULL);
- if (!NT_SUCCESS (status))
- debug_printf ("%y = NtReadFile(%S)", status,
- pc.get_nt_native_path ());
- else if (has_exec_chars (magic, io.Information))
- {
- /* Heureka, it's an executable */
- pc.set_exec ();
- buf->st_mode |= STD_XBITS;
- }
- NtClose (h);
- }
- }
- }
- if (pc.exec_state () == is_executable)
- buf->st_mode |= STD_XBITS;
-
- /* This fakes the permissions of all files to match the current umask. */
- buf->st_mode &= ~(cygheap->umask);
- /* If the FS supports ACLs, we're here because we couldn't even open
- the file for READ_CONTROL access. Chances are high that the file's
- security descriptor has no ACE for "Everyone", so we should not fake
- any access for "others". */
- if (has_acls ())
- buf->st_mode &= ~(S_IROTH | S_IWOTH | S_IXOTH);
- }
-
- done:
- syscall_printf ("0 = fstat (%S, %p) st_size=%D, st_mode=0%o, st_ino=%D"
- "st_atim=%lx.%lx st_ctim=%lx.%lx "
- "st_mtim=%lx.%lx st_birthtim=%lx.%lx",
- pc.get_nt_native_path (), buf,
- buf->st_size, buf->st_mode, buf->st_ino,
- buf->st_atim.tv_sec, buf->st_atim.tv_nsec,
- buf->st_ctim.tv_sec, buf->st_ctim.tv_nsec,
- buf->st_mtim.tv_sec, buf->st_mtim.tv_nsec,
- buf->st_birthtim.tv_sec, buf->st_birthtim.tv_nsec);
- return 0;
-}
-
-int __reg2
-fhandler_disk_file::fstat (struct stat *buf)
-{
- return fstat_fs (buf);
-}
-
-int __reg2
-fhandler_disk_file::fstatvfs (struct statvfs *sfs)
-{
- int ret = -1, opened = 0;
- NTSTATUS status;
- IO_STATUS_BLOCK io;
- FILE_FS_FULL_SIZE_INFORMATION full_fsi;
- /* We must not use the stat handle here, even if it exists. The handle
- has been opened with FILE_OPEN_REPARSE_POINT, thus, in case of a volume
- mount point, it points to the FS of the mount point, rather than to the
- mounted FS. */
- HANDLE fh = get_handle ();
-
- if (!fh)
- {
- OBJECT_ATTRIBUTES attr;
- opened = NT_SUCCESS (NtOpenFile (&fh, READ_CONTROL,
- pc.get_object_attr (attr, sec_none_nih),
- &io, FILE_SHARE_VALID_FLAGS,
- FILE_OPEN_FOR_BACKUP_INTENT));
- if (!opened)
- {
- /* Can't open file. Try again with parent dir. */
- UNICODE_STRING dirname;
- RtlSplitUnicodePath (pc.get_nt_native_path (), &dirname, NULL);
- attr.ObjectName = &dirname;
- opened = NT_SUCCESS (NtOpenFile (&fh, READ_CONTROL, &attr, &io,
- FILE_SHARE_VALID_FLAGS,
- FILE_OPEN_FOR_BACKUP_INTENT));
- if (!opened)
- goto out;
- }
- }
-
- sfs->f_files = ULONG_MAX;
- sfs->f_ffree = ULONG_MAX;
- sfs->f_favail = ULONG_MAX;
- sfs->f_fsid = pc.fs_serial_number ();
- sfs->f_flag = pc.fs_flags ();
- sfs->f_namemax = pc.fs_name_len ();
- /* Get allocation related information. */
- status = NtQueryVolumeInformationFile (fh, &io, &full_fsi, sizeof full_fsi,
- FileFsFullSizeInformation);
- if (NT_SUCCESS (status))
- {
- sfs->f_bsize = full_fsi.BytesPerSector * full_fsi.SectorsPerAllocationUnit;
- sfs->f_frsize = sfs->f_bsize;
- sfs->f_blocks = (fsblkcnt_t) full_fsi.TotalAllocationUnits.QuadPart;
- sfs->f_bfree = (fsblkcnt_t)
- full_fsi.ActualAvailableAllocationUnits.QuadPart;
- sfs->f_bavail = (fsblkcnt_t)
- full_fsi.CallerAvailableAllocationUnits.QuadPart;
- if (sfs->f_bfree > sfs->f_bavail)
- {
- /* Quotas active. We can't trust TotalAllocationUnits. */
- NTFS_VOLUME_DATA_BUFFER nvdb;
-
- status = NtFsControlFile (fh, NULL, NULL, NULL, &io,
- FSCTL_GET_NTFS_VOLUME_DATA,
- NULL, 0, &nvdb, sizeof nvdb);
- if (!NT_SUCCESS (status))
- debug_printf ("%y = NtFsControlFile(%S, FSCTL_GET_NTFS_VOLUME_DATA)",
- status, pc.get_nt_native_path ());
- else
- sfs->f_blocks = (fsblkcnt_t) nvdb.TotalClusters.QuadPart;
- }
- ret = 0;
- }
- else if (status == STATUS_INVALID_PARAMETER /* Netapp */
- || status == STATUS_INVALID_INFO_CLASS)
- {
- FILE_FS_SIZE_INFORMATION fsi;
- status = NtQueryVolumeInformationFile (fh, &io, &fsi, sizeof fsi,
- FileFsSizeInformation);
- if (NT_SUCCESS (status))
- {
- sfs->f_bsize = fsi.BytesPerSector * fsi.SectorsPerAllocationUnit;
- sfs->f_frsize = sfs->f_bsize;
- sfs->f_blocks = (fsblkcnt_t) fsi.TotalAllocationUnits.QuadPart;
- sfs->f_bfree = sfs->f_bavail =
- (fsblkcnt_t) fsi.AvailableAllocationUnits.QuadPart;
- ret = 0;
- }
- else
- debug_printf ("%y = NtQueryVolumeInformationFile"
- "(%S, FileFsSizeInformation)",
- status, pc.get_nt_native_path ());
- }
- else
- debug_printf ("%y = NtQueryVolumeInformationFile"
- "(%S, FileFsFullSizeInformation)",
- status, pc.get_nt_native_path ());
-out:
- if (opened)
- NtClose (fh);
- syscall_printf ("%d = fstatvfs(%s, %p)", ret, get_name (), sfs);
- return ret;
-}
-
-int __reg1
-fhandler_disk_file::fchmod (mode_t mode)
-{
- extern int chmod_device (path_conv& pc, mode_t mode);
- int res = -1;
- int oret = 0;
- NTSTATUS status;
- IO_STATUS_BLOCK io;
-
- if (pc.is_fs_special ())
- return chmod_device (pc, mode);
-
- if (!get_handle ())
- {
- query_open (query_write_dac);
- if (!(oret = open (O_BINARY, 0)))
- {
- /* Need WRITE_DAC|WRITE_OWNER to write ACLs. */
- if (pc.has_acls ())
- return -1;
- /* Otherwise FILE_WRITE_ATTRIBUTES is sufficient. */
- query_open (query_write_attributes);
- if (!(oret = open (O_BINARY, 0)))
- return -1;
- }
- }
-
- if (pc.fs_is_nfs ())
- {
- /* chmod on NFS shares works by writing an EA of type NfsV3Attributes.
- Only type and mode have to be set. Apparently type isn't checked
- for consistency, so it's sufficent to set it to NF3REG all the time. */
- struct {
- FILE_FULL_EA_INFORMATION ffei;
- char buf[sizeof (NFS_V3_ATTR) + sizeof (fattr3)];
- } ffei_buf;
- ffei_buf.ffei.NextEntryOffset = 0;
- ffei_buf.ffei.Flags = 0;
- ffei_buf.ffei.EaNameLength = sizeof (NFS_V3_ATTR) - 1;
- ffei_buf.ffei.EaValueLength = sizeof (fattr3);
- strcpy (ffei_buf.ffei.EaName, NFS_V3_ATTR);
- fattr3 *nfs_attr = (fattr3 *) (ffei_buf.ffei.EaName
- + ffei_buf.ffei.EaNameLength + 1);
- memset (nfs_attr, 0, sizeof (fattr3));
- nfs_attr->type = NF3REG;
- nfs_attr->mode = mode;
- status = NtSetEaFile (get_handle (), &io,
- &ffei_buf.ffei, sizeof ffei_buf);
- if (!NT_SUCCESS (status))
- __seterrno_from_nt_status (status);
- else
- res = 0;
- goto out;
- }
-
- if (pc.has_acls ())
- {
- if (pc.isdir ())
- mode |= S_IFDIR;
- if (!set_file_attribute (get_handle (), pc,
- ILLEGAL_UID, ILLEGAL_GID, mode))
- res = 0;
- }
-
- /* If the mode has any write bits set, the DOS R/O flag is in the way. */
- if (mode & (S_IWUSR | S_IWGRP | S_IWOTH))
- pc &= (DWORD) ~FILE_ATTRIBUTE_READONLY;
- else if (!pc.has_acls ()) /* Never set DOS R/O if security is used. */
- pc |= (DWORD) FILE_ATTRIBUTE_READONLY;
- if (S_ISSOCK (mode))
- pc |= (DWORD) FILE_ATTRIBUTE_SYSTEM;
-
- status = NtSetAttributesFile (get_handle (), pc.file_attributes ());
- /* MVFS needs a good amount of kicking to be convinced that it has to write
- back metadata changes and to invalidate the cached metadata information
- stored for the given handle. This method to open a second handle to
- the file and write the same metadata information twice has been found
- experimentally: http://cygwin.com/ml/cygwin/2009-07/msg00533.html */
- if (pc.fs_is_mvfs () && NT_SUCCESS (status) && !oret)
- {
- OBJECT_ATTRIBUTES attr;
- HANDLE fh;
-
- if (NT_SUCCESS (NtOpenFile (&fh, FILE_WRITE_ATTRIBUTES,
- pc.init_reopen_attr (attr, get_handle ()),
- &io, FILE_SHARE_VALID_FLAGS,
- FILE_OPEN_FOR_BACKUP_INTENT)))
- {
- NtSetAttributesFile (fh, pc.file_attributes ());
- NtClose (fh);
- }
- }
- /* Correct NTFS security attributes have higher priority */
- if (!pc.has_acls ())
- {
- if (!NT_SUCCESS (status))
- __seterrno_from_nt_status (status);
- else
- res = 0;
- }
-
-out:
- if (oret)
- close_fs ();
-
- return res;
-}
-
-int __reg2
-fhandler_disk_file::fchown (uid_t uid, gid_t gid)
-{
- int oret = 0;
-
- if (!pc.has_acls ())
- {
- /* fake - if not supported, pretend we're like win95
- where it just works */
- /* FIXME: Could be supported on NFS when user->uid mapping is in place. */
- return 0;
- }
-
- if (!get_handle ())
- {
- query_open (query_write_control);
- if (!(oret = fhandler_disk_file::open (O_BINARY, 0)))
- return -1;
- }
-
- mode_t attrib = 0;
- if (pc.isdir ())
- attrib |= S_IFDIR;
- uid_t old_uid;
- int res = get_file_attribute (get_handle (), pc, &attrib, &old_uid, NULL);
- if (!res)
- {
- /* Typical Windows default ACLs can contain permissions for one
- group, while being owned by another user/group. The permission
- bits returned above are pretty much useless then. Creating a
- new ACL with these useless permissions results in a potentially
- broken symlink. So what we do here is to set the underlying
- permissions of symlinks to a sensible value which allows the
- world to read the symlink and only the new owner to change it. */
- if (pc.issymlink ())
- attrib = S_IFLNK | STD_RBITS | STD_WBITS;
- res = set_file_attribute (get_handle (), pc, uid, gid, attrib);
- /* If you're running a Samba server which has no winbind running, the
- uid<->SID mapping is disfunctional. Even trying to chown to your
- own account fails since the account used on the server is the UNIX
- account which gets used for the standard user mapping. This is a
- default mechanism which doesn't know your real Windows SID.
- There are two possible error codes in different Samba releases for
- this situation, one of them is unfortunately the not very significant
- STATUS_ACCESS_DENIED. Instead of relying on the error codes, we're
- using the below very simple heuristic. If set_file_attribute failed,
- and the original user account was either already unknown, or one of
- the standard UNIX accounts, we're faking success. */
- if (res == -1 && pc.fs_is_samba ())
- {
- cygsid sid;
-
- if (old_uid == ILLEGAL_UID
- || (sid.getfrompw (internal_getpwuid (old_uid))
- && RtlEqualPrefixSid (sid,
- well_known_samba_unix_user_fake_sid)))
- {
- debug_printf ("Faking chown worked on standalone Samba");
- res = 0;
- }
- }
- }
- if (oret)
- close_fs ();
-
- return res;
-}
-
-int __reg3
-fhandler_disk_file::facl (int cmd, int nentries, aclent_t *aclbufp)
-{
- int res = -1;
- int oret = 0;
-
- if (!pc.has_acls ())
- {
-cant_access_acl:
- switch (cmd)
- {
-
- case SETACL:
- /* Open for writing required to be able to set ctime
- (even though setting the ACL is just pretended). */
- if (!get_handle ())
- oret = open (O_WRONLY | O_BINARY, 0);
- res = 0;
- break;
- case GETACL:
- if (!aclbufp)
- set_errno (EFAULT);
- else if (nentries < MIN_ACL_ENTRIES)
- set_errno (ENOSPC);
- else
- {
- struct stat st;
- if (!fstat (&st))
- {
- aclbufp[0].a_type = USER_OBJ;
- aclbufp[0].a_id = st.st_uid;
- aclbufp[0].a_perm = (st.st_mode & S_IRWXU) >> 6;
- aclbufp[1].a_type = GROUP_OBJ;
- aclbufp[1].a_id = st.st_gid;
- aclbufp[1].a_perm = (st.st_mode & S_IRWXG) >> 3;
- aclbufp[2].a_type = OTHER_OBJ;
- aclbufp[2].a_id = ILLEGAL_GID;
- aclbufp[2].a_perm = st.st_mode & S_IRWXO;
- res = MIN_ACL_ENTRIES;
- }
- }
- break;
- case GETACLCNT:
- res = MIN_ACL_ENTRIES;
- break;
- default:
- set_errno (EINVAL);
- break;
- }
- }
- else
- {
- if ((cmd == SETACL && !get_handle ())
- || (cmd != SETACL && !get_stat_handle ()))
- {
- query_open (cmd == SETACL ? query_write_control : query_read_control);
- if (!(oret = open (O_BINARY, 0)))
- {
- if (cmd == GETACL || cmd == GETACLCNT)
- goto cant_access_acl;
- return -1;
- }
- }
- switch (cmd)
- {
- case SETACL:
- if (!aclsort32 (nentries, 0, aclbufp))
- {
- bool rw = false;
- res = setacl (get_handle (), pc, nentries, aclbufp, rw);
- if (rw)
- {
- IO_STATUS_BLOCK io;
- FILE_BASIC_INFORMATION fbi;
- fbi.CreationTime.QuadPart
- = fbi.LastAccessTime.QuadPart
- = fbi.LastWriteTime.QuadPart
- = fbi.ChangeTime.QuadPart = 0LL;
- fbi.FileAttributes = (pc.file_attributes ()
- & ~FILE_ATTRIBUTE_READONLY)
- ?: FILE_ATTRIBUTE_NORMAL;
- NtSetInformationFile (get_handle (), &io, &fbi, sizeof fbi,
- FileBasicInformation);
- }
- }
- break;
- case GETACL:
- if (!aclbufp)
- set_errno(EFAULT);
- else
- res = getacl (get_stat_handle (), pc, nentries, aclbufp);
- /* For this ENOSYS case, see security.cc:get_file_attribute(). */
- if (res == -1 && get_errno () == ENOSYS)
- goto cant_access_acl;
- break;
- case GETACLCNT:
- res = getacl (get_stat_handle (), pc, 0, NULL);
- /* Ditto. */
- if (res == -1 && get_errno () == ENOSYS)
- goto cant_access_acl;
- break;
- default:
- set_errno (EINVAL);
- break;
- }
- }
-
- if (oret)
- close_fs ();
-
- return res;
-}
-
-ssize_t
-fhandler_disk_file::fgetxattr (const char *name, void *value, size_t size)
-{
- if (pc.is_fs_special ())
- {
- set_errno (ENOTSUP);
- return -1;
- }
- return read_ea (get_handle (), pc, name, (char *) value, size);
-}
-
-int
-fhandler_disk_file::fsetxattr (const char *name, const void *value, size_t size,
- int flags)
-{
- if (pc.is_fs_special ())
- {
- set_errno (ENOTSUP);
- return -1;
- }
- return write_ea (get_handle (), pc, name, (const char *) value, size, flags);
-}
-
-int
-fhandler_disk_file::fadvise (off_t offset, off_t length, int advice)
-{
- if (advice < POSIX_FADV_NORMAL || advice > POSIX_FADV_NOREUSE)
- {
- set_errno (EINVAL);
- return -1;
- }
-
- /* Windows only supports advice flags for the whole file. We're using
- a simplified test here so that we don't have to ask for the actual
- file size. Length == 0 means all bytes starting at offset anyway.
- So we only actually follow the advice, if it's given for offset == 0. */
- if (offset != 0)
- return 0;
-
- /* We only support normal and sequential mode for now. Everything which
- is not POSIX_FADV_SEQUENTIAL is treated like POSIX_FADV_NORMAL. */
- if (advice != POSIX_FADV_SEQUENTIAL)
- advice = POSIX_FADV_NORMAL;
-
- IO_STATUS_BLOCK io;
- FILE_MODE_INFORMATION fmi;
- NTSTATUS status = NtQueryInformationFile (get_handle (), &io,
- &fmi, sizeof fmi,
- FileModeInformation);
- if (!NT_SUCCESS (status))
- __seterrno_from_nt_status (status);
- else
- {
- fmi.Mode &= ~FILE_SEQUENTIAL_ONLY;
- if (advice == POSIX_FADV_SEQUENTIAL)
- fmi.Mode |= FILE_SEQUENTIAL_ONLY;
- status = NtSetInformationFile (get_handle (), &io, &fmi, sizeof fmi,
- FileModeInformation);
- if (NT_SUCCESS (status))
- return 0;
- __seterrno_from_nt_status (status);
- }
-
- return -1;
-}
-
-int
-fhandler_disk_file::ftruncate (off_t length, bool allow_truncate)
-{
- int res = -1;
-
- if (length < 0 || !get_handle ())
- set_errno (EINVAL);
- else if (pc.isdir ())
- set_errno (EISDIR);
- else if (!(get_access () & GENERIC_WRITE))
- set_errno (EBADF);
- else
- {
- NTSTATUS status;
- IO_STATUS_BLOCK io;
- FILE_STANDARD_INFORMATION fsi;
- FILE_END_OF_FILE_INFORMATION feofi;
-
- status = NtQueryInformationFile (get_handle (), &io, &fsi, sizeof fsi,
- FileStandardInformation);
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- return -1;
- }
-
- /* If called through posix_fallocate, silently succeed if length
- is less than the file's actual length. */
- if (!allow_truncate && length < fsi.EndOfFile.QuadPart)
- return 0;
-
- feofi.EndOfFile.QuadPart = length;
- /* Create sparse files only when called through ftruncate, not when
- called through posix_fallocate. */
- if (allow_truncate && pc.support_sparse ()
- && !has_attribute (FILE_ATTRIBUTE_SPARSE_FILE)
- && length >= fsi.EndOfFile.QuadPart + (128 * 1024))
- {
- status = NtFsControlFile (get_handle (), NULL, NULL, NULL, &io,
- FSCTL_SET_SPARSE, NULL, 0, NULL, 0);
- if (NT_SUCCESS (status))
- pc.file_attributes (pc.file_attributes ()
- | FILE_ATTRIBUTE_SPARSE_FILE);
- syscall_printf ("%y = NtFsControlFile(%S, FSCTL_SET_SPARSE)",
- status, pc.get_nt_native_path ());
- }
- status = NtSetInformationFile (get_handle (), &io,
- &feofi, sizeof feofi,
- FileEndOfFileInformation);
- if (!NT_SUCCESS (status))
- __seterrno_from_nt_status (status);
- else
- res = 0;
- }
- return res;
-}
-
-int
-fhandler_disk_file::link (const char *newpath)
-{
- size_t nlen = strlen (newpath);
- path_conv newpc (newpath, PC_SYM_NOFOLLOW | PC_POSIX | PC_NULLEMPTY, stat_suffixes);
- if (newpc.error)
- {
- set_errno (newpc.error);
- return -1;
- }
-
- if (newpc.exists ())
- {
- syscall_printf ("file '%S' exists?", newpc.get_nt_native_path ());
- set_errno (EEXIST);
- return -1;
- }
-
- if (isdirsep (newpath[nlen - 1]) || has_dot_last_component (newpath, false))
- {
- set_errno (ENOENT);
- return -1;
- }
-
- char new_buf[nlen + 5];
- if (!newpc.error)
- {
- /* If the original file is a lnk special file (except for sockets),
- and if the original file has a .lnk suffix, add one to the hardlink
- as well. */
- if (pc.is_lnk_special () && !pc.issocket ()
- && RtlEqualUnicodePathSuffix (pc.get_nt_native_path (),
- &ro_u_lnk, TRUE))
- {
- /* Shortcut hack. */
- stpcpy (stpcpy (new_buf, newpath), ".lnk");
- newpath = new_buf;
- newpc.check (newpath, PC_SYM_NOFOLLOW);
- }
- else if (!pc.isdir ()
- && pc.is_binary ()
- && RtlEqualUnicodePathSuffix (pc.get_nt_native_path (),
- &ro_u_exe, TRUE)
- && !RtlEqualUnicodePathSuffix (newpc.get_nt_native_path (),
- &ro_u_exe, TRUE))
- {
- /* Executable hack. */
- stpcpy (stpcpy (new_buf, newpath), ".exe");
- newpath = new_buf;
- newpc.check (newpath, PC_SYM_NOFOLLOW);
- }
- }
-
- /* We only need READ_CONTROL access so the handle returned in pc is
- sufficient. And if the file couldn't be opened with READ_CONTROL
- access in path_conv, we won't be able to do it here anyway. */
- HANDLE fh = get_stat_handle ();
- if (!fh)
- {
- set_errno (EACCES);
- return -1;
- }
- PUNICODE_STRING tgt = newpc.get_nt_native_path ();
- ULONG size = sizeof (FILE_LINK_INFORMATION) + tgt->Length;
- PFILE_LINK_INFORMATION pfli = (PFILE_LINK_INFORMATION) alloca (size);
- pfli->ReplaceIfExists = FALSE;
- pfli->RootDirectory = NULL;
- memcpy (pfli->FileName, tgt->Buffer, pfli->FileNameLength = tgt->Length);
-
- NTSTATUS status;
- IO_STATUS_BLOCK io;
- status = NtSetInformationFile (fh, &io, pfli, size, FileLinkInformation);
- if (!NT_SUCCESS (status))
- {
- if (status == STATUS_INVALID_DEVICE_REQUEST
- || status == STATUS_NOT_SUPPORTED)
- {
- /* FS doesn't support hard links. Linux returns EPERM. */
- set_errno (EPERM);
- return -1;
- }
- else
- {
- __seterrno_from_nt_status (status);
- return -1;
- }
- }
- return 0;
-}
-
-int
-fhandler_disk_file::utimens (const struct timespec *tvp)
-{
- return utimens_fs (tvp);
-}
-
-int
-fhandler_base::utimens_fs (const struct timespec *tvp)
-{
- struct timespec timeofday;
- struct timespec tmp[2];
- bool closeit = false;
-
- if (!get_handle ())
- {
- query_open (query_write_attributes);
- if (!open_fs (O_BINARY, 0))
- {
- /* It's documented in MSDN that FILE_WRITE_ATTRIBUTES is sufficient
- to change the timestamps. Unfortunately it's not sufficient for a
- remote HPFS which requires GENERIC_WRITE, so we just retry to open
- for writing, though this fails for R/O files of course. */
- query_open (no_query);
- if (!open_fs (O_WRONLY | O_BINARY, 0))
- {
- syscall_printf ("Opening file failed");
- return -1;
- }
- }
- closeit = true;
- }
-
- clock_gettime (CLOCK_REALTIME, &timeofday);
- if (!tvp)
- tmp[1] = tmp[0] = timeofday;
- else
- {
- if ((tvp[0].tv_nsec < UTIME_NOW || tvp[0].tv_nsec > 999999999L)
- || (tvp[1].tv_nsec < UTIME_NOW || tvp[1].tv_nsec > 999999999L))
- {
- if (closeit)
- close_fs ();
- set_errno (EINVAL);
- return -1;
- }
- tmp[0] = (tvp[0].tv_nsec == UTIME_NOW) ? timeofday : tvp[0];
- tmp[1] = (tvp[1].tv_nsec == UTIME_NOW) ? timeofday : tvp[1];
- }
- debug_printf ("incoming lastaccess %ly %ly", tmp[0].tv_sec, tmp[0].tv_nsec);
-
- IO_STATUS_BLOCK io;
- FILE_BASIC_INFORMATION fbi;
-
- fbi.CreationTime.QuadPart = 0LL;
- /* UTIME_OMIT is handled in timespec_to_filetime by setting FILETIME to 0. */
- timespec_to_filetime (&tmp[0], &fbi.LastAccessTime);
- timespec_to_filetime (&tmp[1], &fbi.LastWriteTime);
- fbi.ChangeTime.QuadPart = 0LL;
- fbi.FileAttributes = 0;
- NTSTATUS status = NtSetInformationFile (get_handle (), &io, &fbi, sizeof fbi,
- FileBasicInformation);
- /* For this special case for MVFS see the comment in
- fhandler_disk_file::fchmod. */
- if (pc.fs_is_mvfs () && NT_SUCCESS (status) && !closeit)
- {
- OBJECT_ATTRIBUTES attr;
- HANDLE fh;
-
- if (NT_SUCCESS (NtOpenFile (&fh, FILE_WRITE_ATTRIBUTES,
- pc.init_reopen_attr (attr, get_handle ()),
- &io, FILE_SHARE_VALID_FLAGS,
- FILE_OPEN_FOR_BACKUP_INTENT)))
- {
- NtSetInformationFile (fh, &io, &fbi, sizeof fbi,
- FileBasicInformation);
- NtClose (fh);
- }
- }
- if (closeit)
- close_fs ();
- /* Opening a directory on a 9x share from a NT machine works(!), but
- then NtSetInformationFile fails with STATUS_NOT_SUPPORTED. Oh well... */
- if (!NT_SUCCESS (status) && status != STATUS_NOT_SUPPORTED)
- {
- __seterrno_from_nt_status (status);
- return -1;
- }
- return 0;
-}
-
-fhandler_disk_file::fhandler_disk_file () :
- fhandler_base (), prw_handle (NULL)
-{
-}
-
-fhandler_disk_file::fhandler_disk_file (path_conv &pc) :
- fhandler_base (), prw_handle (NULL)
-{
- set_name (pc);
-}
-
-int
-fhandler_disk_file::open (int flags, mode_t mode)
-{
- return open_fs (flags, mode);
-}
-
-int
-fhandler_disk_file::close ()
-{
- /* Close extra pread/pwrite handle, if it exists. */
- if (prw_handle)
- NtClose (prw_handle);
- return fhandler_base::close ();
-}
-
-int
-fhandler_disk_file::fcntl (int cmd, intptr_t arg)
-{
- int res;
-
- switch (cmd)
- {
- case F_LCK_MANDATORY: /* Mandatory locking only works on files. */
- mandatory_locking (!!arg);
- need_fork_fixup (true);
- res = 0;
- break;
- default:
- res = fhandler_base::fcntl (cmd, arg);
- break;
- }
- return res;
-}
-
-int
-fhandler_disk_file::dup (fhandler_base *child, int flags)
-{
- fhandler_disk_file *fhc = (fhandler_disk_file *) child;
-
- int ret = fhandler_base::dup (child, flags);
- if (!ret && prw_handle
- && !DuplicateHandle (GetCurrentProcess (), prw_handle,
- GetCurrentProcess (), &fhc->prw_handle,
- 0, TRUE, DUPLICATE_SAME_ACCESS))
- fhc->prw_handle = NULL;
- return ret;
-}
-
-void
-fhandler_disk_file::fixup_after_fork (HANDLE parent)
-{
- prw_handle = NULL;
- mandatory_locking (false);
- fhandler_base::fixup_after_fork (parent);
-}
-
-int
-fhandler_base::open_fs (int flags, mode_t mode)
-{
- /* Unfortunately NT allows to open directories for writing, but that's
- disallowed according to SUSv3. */
- if (pc.isdir () && (flags & O_ACCMODE) != O_RDONLY)
- {
- set_errno (EISDIR);
- return 0;
- }
-
- int res = fhandler_base::open (flags | O_DIROPEN, mode);
- if (!res)
- goto out;
-
- /* This is for file systems known for having a buggy CreateFile call
- which might return a valid HANDLE without having actually opened
- the file.
- The only known file system to date is the SUN NFS Solstice Client 3.1
- which returns a valid handle when trying to open a file in a nonexistent
- directory. */
- if (pc.has_buggy_open () && !pc.exists ())
- {
- debug_printf ("Buggy open detected.");
- close_fs ();
- set_errno (ENOENT);
- return 0;
- }
-
- ino = pc.get_ino_by_handle (get_handle ());
-
-out:
- syscall_printf ("%d = fhandler_disk_file::open(%S, %y)", res,
- pc.get_nt_native_path (), flags);
- return res;
-}
-
-/* POSIX demands that pread/pwrite don't change the current file position.
- While NtReadFile/NtWriteFile support atomic seek-and-io, both change the
- file pointer if the file handle has been opened for synchonous I/O.
- Using this handle for pread/pwrite would break atomicity, because the
- read/write operation would have to be followed by a seek back to the old
- file position. What we do is to open another handle to the file on the
- first call to either pread or pwrite. This is used for any subsequent
- pread/pwrite. Thus the current file position of the "normal" file
- handle is not touched.
-
- FIXME:
-
- Note that this is just a hack. The problem with this approach is that
- a change to the file permissions might disallow to open the file with
- the required permissions to read or write. This appears to be a border case,
- but that's exactly what git does. It creates the file for reading and
- writing and after writing it, it chmods the file to read-only. Then it
- calls pread on the file to examine the content. This works, but if git
- would use the original handle to pwrite to the file, it would be broken
- with our approach.
-
- One way to implement this is to open the pread/pwrite handle right at
- file open time. We would simply maintain two handles, which wouldn't
- be much of a problem given how we do that for other fhandler types as
- well.
-
- However, ultimately fhandler_disk_file should become a derived class of
- fhandler_base_overlapped. Each raw_read or raw_write would fetch the
- actual file position, read/write from there, and then set the file
- position again. Fortunately, while the file position is not maintained
- by the I/O manager, it can be fetched and set to a new value by all
- processes holding a handle to that file object. Pread and pwrite differ
- from raw_read and raw_write just by not touching the current file pos.
- Actually they could be merged with raw_read/raw_write if we add a position
- parameter to the latter. */
-
-int
-fhandler_disk_file::prw_open (bool write)
-{
- NTSTATUS status;
- IO_STATUS_BLOCK io;
- OBJECT_ATTRIBUTES attr;
-
- /* First try to open with the original access mask */
- ACCESS_MASK access = get_access ();
- status = NtOpenFile (&prw_handle, access,
- pc.init_reopen_attr (attr, get_handle ()), &io,
- FILE_SHARE_VALID_FLAGS, get_options ());
- if (status == STATUS_ACCESS_DENIED)
- {
- /* If we get an access denied, chmod has been called. Try again
- with just the required rights to perform the called function. */
- access &= write ? ~GENERIC_READ : ~GENERIC_WRITE;
- status = NtOpenFile (&prw_handle, access, &attr, &io,
- FILE_SHARE_VALID_FLAGS, get_options ());
- }
- debug_printf ("%y = NtOpenFile (%p, %y, %S, io, %y, %y)",
- status, prw_handle, access, pc.get_nt_native_path (),
- FILE_SHARE_VALID_FLAGS, get_options ());
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- return -1;
- }
- return 0;
-}
-
-ssize_t __reg3
-fhandler_disk_file::pread (void *buf, size_t count, off_t offset)
-{
- ssize_t res;
-
- if ((get_flags () & O_ACCMODE) == O_WRONLY)
- {
- set_errno (EBADF);
- return -1;
- }
-
- /* In binary mode, we can use an atomic NtReadFile call.
- Windows mandatory locking semantics disallow to use another HANDLE. */
- if (rbinary () && !mandatory_locking ())
- {
- extern int __stdcall is_at_eof (HANDLE h);
- NTSTATUS status;
- IO_STATUS_BLOCK io;
- LARGE_INTEGER off = { QuadPart:offset };
-
- if (!prw_handle && prw_open (false))
- goto non_atomic;
- status = NtReadFile (prw_handle, NULL, NULL, NULL, &io, buf, count,
- &off, NULL);
- if (!NT_SUCCESS (status) && status != STATUS_END_OF_FILE)
- {
- if (pc.isdir ())
- {
- set_errno (EISDIR);
- return -1;
- }
- if (status == (NTSTATUS) STATUS_ACCESS_VIOLATION)
- {
- if (is_at_eof (prw_handle))
- return 0;
- switch (mmap_is_attached_or_noreserve (buf, count))
- {
- case MMAP_NORESERVE_COMMITED:
- status = NtReadFile (prw_handle, NULL, NULL, NULL, &io,
- buf, count, &off, NULL);
- if (NT_SUCCESS (status))
- return io.Information;
- break;
- case MMAP_RAISE_SIGBUS:
- raise (SIGBUS);
- default:
- break;
- }
- }
- __seterrno_from_nt_status (status);
- return -1;
- }
- res = io.Information; /* Valid on EOF. */
- }
- else
- {
-non_atomic:
- /* Text mode stays slow and non-atomic. */
- off_t curpos = lseek (0, SEEK_CUR);
- if (curpos < 0 || lseek (offset, SEEK_SET) < 0)
- res = -1;
- else
- {
- size_t tmp_count = count;
- read (buf, tmp_count);
- if (lseek (curpos, SEEK_SET) >= 0)
- res = (ssize_t) tmp_count;
- else
- res = -1;
- }
- }
- debug_printf ("%d = pread(%p, %ld, %D)\n", res, buf, count, offset);
- return res;
-}
-
-ssize_t __reg3
-fhandler_disk_file::pwrite (void *buf, size_t count, off_t offset)
-{
- if ((get_flags () & O_ACCMODE) == O_RDONLY)
- {
- set_errno (EBADF);
- return -1;
- }
-
- /* In binary mode, we can use an atomic NtWriteFile call.
- Windows mandatory locking semantics disallow to use another HANDLE. */
- if (wbinary () && !mandatory_locking ())
- {
- NTSTATUS status;
- IO_STATUS_BLOCK io;
- LARGE_INTEGER off = { QuadPart:offset };
-
- if (!prw_handle && prw_open (true))
- goto non_atomic;
- status = NtWriteFile (prw_handle, NULL, NULL, NULL, &io, buf, count,
- &off, NULL);
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- return -1;
- }
- return io.Information;
- }
-
-non_atomic:
- /* Text mode stays slow and non-atomic. */
- int res;
- off_t curpos = lseek (0, SEEK_CUR);
- if (curpos < 0 || lseek (offset, SEEK_SET) < 0)
- res = curpos;
- else
- {
- res = (ssize_t) write (buf, count);
- if (lseek (curpos, SEEK_SET) < 0)
- res = -1;
- }
- debug_printf ("%d = pwrite(%p, %ld, %D)\n", res, buf, count, offset);
- return res;
-}
-
-int
-fhandler_disk_file::mkdir (mode_t mode)
-{
- int res = -1;
- SECURITY_ATTRIBUTES sa = sec_none_nih;
- NTSTATUS status;
- HANDLE dir;
- OBJECT_ATTRIBUTES attr;
- IO_STATUS_BLOCK io;
- PFILE_FULL_EA_INFORMATION p = NULL;
- ULONG plen = 0;
- ULONG access = FILE_LIST_DIRECTORY | SYNCHRONIZE;
-
- if (pc.fs_is_nfs ())
- {
- /* When creating a dir on an NFS share, we have to set the
- file mode by writing a NFS fattr3 structure with the
- correct mode bits set. */
- plen = sizeof (FILE_FULL_EA_INFORMATION) + sizeof (NFS_V3_ATTR)
- + sizeof (fattr3);
- p = (PFILE_FULL_EA_INFORMATION) alloca (plen);
- p->NextEntryOffset = 0;
- p->Flags = 0;
- p->EaNameLength = sizeof (NFS_V3_ATTR) - 1;
- p->EaValueLength = sizeof (fattr3);
- strcpy (p->EaName, NFS_V3_ATTR);
- fattr3 *nfs_attr = (fattr3 *) (p->EaName + p->EaNameLength + 1);
- memset (nfs_attr, 0, sizeof (fattr3));
- nfs_attr->type = NF3DIR;
- nfs_attr->mode = (mode & 07777) & ~cygheap->umask;
- }
- else if (has_acls () && !isremote ())
- /* If the filesystem supports ACLs, we will overwrite the DACL after the
- call to NtCreateFile. This requires a handle with READ_CONTROL and
- WRITE_DAC access, otherwise get_file_sd and set_file_sd both have to
- open the file again.
- FIXME: On remote NTFS shares open sometimes fails because even the
- creator of the file doesn't have the right to change the DACL.
- I don't know what setting that is or how to recognize such a share,
- so for now we don't request WRITE_DAC on remote drives. */
- access |= READ_CONTROL | WRITE_DAC;
- status = NtCreateFile (&dir, access, pc.get_object_attr (attr, sa), &io, NULL,
- FILE_ATTRIBUTE_DIRECTORY, FILE_SHARE_VALID_FLAGS,
- FILE_CREATE,
- FILE_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT
- | FILE_OPEN_FOR_BACKUP_INTENT,
- p, plen);
- if (NT_SUCCESS (status))
- {
- if (has_acls ())
- set_file_attribute (dir, pc, ILLEGAL_UID, ILLEGAL_GID,
- S_JUSTCREATED | S_IFDIR
- | ((mode & 07777) & ~cygheap->umask));
- NtClose (dir);
- res = 0;
- }
- else
- __seterrno_from_nt_status (status);
-
- return res;
-}
-
-int
-fhandler_disk_file::rmdir ()
-{
- extern NTSTATUS unlink_nt (path_conv &pc);
-
- if (!pc.isdir ())
- {
- set_errno (ENOTDIR);
- return -1;
- }
- if (!pc.exists ())
- {
- set_errno (ENOENT);
- return -1;
- }
-
- NTSTATUS status = unlink_nt (pc);
-
- /* Check for existence of remote dirs after trying to delete them.
- Two reasons:
- - Sometimes SMB indicates failure when it really succeeds.
- - Removing a directory on a Samba drive using an old Samba version
- sometimes doesn't return an error, if the directory can't be removed
- because it's not empty. */
- if (isremote ())
- {
- OBJECT_ATTRIBUTES attr;
- FILE_BASIC_INFORMATION fbi;
- NTSTATUS q_status;
-
- q_status = NtQueryAttributesFile (pc.get_object_attr (attr, sec_none_nih),
- &fbi);
- if (!NT_SUCCESS (status) && q_status == STATUS_OBJECT_NAME_NOT_FOUND)
- status = STATUS_SUCCESS;
- else if (pc.fs_is_samba ()
- && NT_SUCCESS (status) && NT_SUCCESS (q_status))
- status = STATUS_DIRECTORY_NOT_EMPTY;
- }
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- return -1;
- }
- return 0;
-}
-
-/* This is the minimal number of entries which fit into the readdir cache.
- The number of bytes allocated by the cache is determined by this number,
- To tune caching, just tweak this number. To get a feeling for the size,
- the size of the readdir cache is DIR_NUM_ENTRIES * 624 + 4 bytes. */
-
-#define DIR_NUM_ENTRIES 100 /* Cache size 62404 bytes */
-
-#define DIR_BUF_SIZE (DIR_NUM_ENTRIES \
- * (sizeof (FILE_ID_BOTH_DIR_INFORMATION) \
- + (NAME_MAX + 1) * sizeof (WCHAR)))
-
-struct __DIR_cache
-{
- char __cache[DIR_BUF_SIZE];
- ULONG __pos;
-};
-
-#define d_cachepos(d) (((__DIR_cache *) (d)->__d_dirname)->__pos)
-#define d_cache(d) (((__DIR_cache *) (d)->__d_dirname)->__cache)
-
-#define d_mounts(d) ((__DIR_mounts *) (d)->__d_internal)
-
-DIR *
-fhandler_disk_file::opendir (int fd)
-{
- DIR *dir;
- DIR *res = NULL;
-
- if (!pc.isdir ())
- set_errno (ENOTDIR);
- else if ((dir = (DIR *) malloc (sizeof (DIR))) == NULL)
- set_errno (ENOMEM);
- else if ((dir->__d_dirname = (char *) malloc ( sizeof (struct __DIR_cache)))
- == NULL)
- {
- set_errno (ENOMEM);
- goto free_dir;
- }
- else if ((dir->__d_dirent =
- (struct dirent *) malloc (sizeof (struct dirent))) == NULL)
- {
- set_errno (ENOMEM);
- goto free_dirname;
- }
- else
- {
- cygheap_fdnew cfd;
- if (cfd < 0 && fd < 0)
- goto free_dirent;
-
- dir->__d_dirent->__d_version = __DIRENT_VERSION;
- dir->__d_cookie = __DIRENT_COOKIE;
- dir->__handle = INVALID_HANDLE_VALUE;
- dir->__d_position = 0;
- dir->__flags = (get_name ()[0] == '/' && get_name ()[1] == '\0')
- ? dirent_isroot : 0;
- dir->__d_internal = 0;
-
- if (pc.iscygdrive ())
- {
- if (fd < 0 && !open (O_RDONLY, 0))
- goto free_mounts;
- }
- else
- {
- dir->__d_internal = (uintptr_t) new __DIR_mounts (get_name ());
- d_cachepos (dir) = 0;
- if (fd < 0)
- {
- /* opendir() case. Initialize with given directory name and
- NULL directory handle. */
- OBJECT_ATTRIBUTES attr;
- NTSTATUS status;
- IO_STATUS_BLOCK io;
- /* Tools like ls(1) call dirfd() to fetch the directory
- descriptor for calls to facl or fstat. The tight access mask
- used so far is not sufficient to reuse the handle for these
- calls, instead the facl/fstat calls find the handle to be
- unusable and have to re-open the file for reading attributes
- and control data. So, what we do here is to try to open the
- directory with more relaxed access mask which enables to use
- the handle for the aforementioned purpose. This should work
- in almost all cases. Only if it doesn't work due to
- permission problems, we drop the additional access bits and
- try again. */
- ACCESS_MASK fstat_mask = READ_CONTROL | FILE_READ_ATTRIBUTES;
-
- do
- {
- status = NtOpenFile (&get_handle (),
- SYNCHRONIZE | FILE_LIST_DIRECTORY
- | fstat_mask,
- pc.get_object_attr (attr, sec_none_nih),
- &io, FILE_SHARE_VALID_FLAGS,
- FILE_SYNCHRONOUS_IO_NONALERT
- | FILE_OPEN_FOR_BACKUP_INTENT
- | FILE_DIRECTORY_FILE);
- if (!NT_SUCCESS (status))
- {
- if (status == STATUS_ACCESS_DENIED && fstat_mask)
- fstat_mask = 0;
- else
- {
- __seterrno_from_nt_status (status);
- goto free_mounts;
- }
- }
- }
- while (!NT_SUCCESS (status));
- }
-
- /* FileIdBothDirectoryInformation is apparently unsupported on
- XP when accessing directories on UDF. When trying to use it
- so, NtQueryDirectoryFile returns with STATUS_ACCESS_VIOLATION.
- It's not clear if the call isn't also unsupported on other
- OS/FS combinations. Instead of testing for yet another error
- code, let's use FileIdBothDirectoryInformation only on FSes
- supporting persistent ACLs, FileBothDirectoryInformation otherwise.
-
- NFS clients hide dangling symlinks from directory queries,
- unless you use the FileNamesInformation info class.
- On newer NFS clients (>=Vista) FileIdBothDirectoryInformation
- works fine, but only if the NFS share is mounted to a drive
- letter. TODO: We don't test that here for now, but it might
- be worth to test if there's a speed gain in using
- FileIdBothDirectoryInformation, because it doesn't require to
- open the file to read the inode number. */
- if (pc.hasgood_inode ())
- {
- dir->__flags |= dirent_set_d_ino;
- if (pc.fs_is_nfs ())
- dir->__flags |= dirent_nfs_d_ino;
- else if (!pc.has_buggy_fileid_dirinfo ())
- dir->__flags |= dirent_get_d_ino;
- }
- }
- if (fd >= 0)
- dir->__d_fd = fd;
- else
- {
- /* Filling cfd with `this' (aka storing this in the file
- descriptor table should only happen after it's clear that
- opendir doesn't fail, otherwise we end up cfree'ing the
- fhandler twice, once in opendir() in dir.cc, the second
- time on exit. Nasty, nasty... */
- cfd = this;
- dir->__d_fd = cfd;
- }
- set_close_on_exec (true);
- dir->__fh = this;
- res = dir;
- }
-
- syscall_printf ("%p = opendir (%s)", res, get_name ());
- return res;
-
-free_mounts:
- delete d_mounts (dir);
-free_dirent:
- free (dir->__d_dirent);
-free_dirname:
- free (dir->__d_dirname);
-free_dir:
- free (dir);
- return res;
-}
-
-ino_t __reg2
-readdir_get_ino (const char *path, bool dot_dot)
-{
- char *fname;
- struct stat st;
- HANDLE hdl;
- OBJECT_ATTRIBUTES attr;
- IO_STATUS_BLOCK io;
- ino_t ino = 0;
-
- if (dot_dot)
- {
- fname = (char *) alloca (strlen (path) + 4);
- char *c = stpcpy (fname, path);
- if (c[-1] != '/')
- *c++ = '/';
- strcpy (c, "..");
- path = fname;
- }
- path_conv pc (path, PC_SYM_NOFOLLOW | PC_POSIX | PC_NOWARN | PC_KEEP_HANDLE);
- if (pc.isspecial ())
- {
- if (!stat_worker (pc, &st))
- ino = st.st_ino;
- }
- else if (!pc.hasgood_inode ())
- ino = hash_path_name (0, pc.get_nt_native_path ());
- else if ((hdl = pc.handle ()) != NULL
- || NT_SUCCESS (NtOpenFile (&hdl, READ_CONTROL,
- pc.get_object_attr (attr, sec_none_nih),
- &io, FILE_SHARE_VALID_FLAGS,
- FILE_OPEN_FOR_BACKUP_INTENT
- | (pc.is_rep_symlink ()
- ? FILE_OPEN_REPARSE_POINT : 0)))
- )
- {
- ino = pc.get_ino_by_handle (hdl);
- if (!ino)
- ino = hash_path_name (0, pc.get_nt_native_path ());
- }
- return ino;
-}
-
-int
-fhandler_disk_file::readdir_helper (DIR *dir, dirent *de, DWORD w32_err,
- DWORD attr, PUNICODE_STRING fname)
-{
- if (w32_err)
- {
- bool added = false;
- if ((de->d_ino = d_mounts (dir)->check_missing_mount (fname)))
- added = true;
- if (!added)
- {
- fname->Length = 0;
- return geterrno_from_win_error (w32_err);
- }
- if (de->d_ino == 2) /* Inode number for virtual dirs. */
- de->d_type = DT_DIR;
- attr = 0;
- dir->__flags &= ~dirent_set_d_ino;
- }
-
- /* Set d_type if type can be determined from file attributes. For .lnk
- symlinks, d_type will be reset below. Reparse points can be NTFS
- symlinks, even if they have the FILE_ATTRIBUTE_DIRECTORY flag set. */
- if (attr &&
- !(attr & (~FILE_ATTRIBUTE_VALID_FLAGS | FILE_ATTRIBUTE_REPARSE_POINT)))
- {
- if (attr & FILE_ATTRIBUTE_DIRECTORY)
- de->d_type = DT_DIR;
- /* FILE_ATTRIBUTE_SYSTEM might denote system-bit type symlinks. */
- else if (!(attr & FILE_ATTRIBUTE_SYSTEM))
- de->d_type = DT_REG;
- }
-
- /* Check for directory reparse point. These are potential volume mount
- points which have another inode than the underlying directory. */
- if ((attr & (FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_REPARSE_POINT))
- == (FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_REPARSE_POINT))
- {
- HANDLE reph;
- OBJECT_ATTRIBUTES attr;
- IO_STATUS_BLOCK io;
-
- InitializeObjectAttributes (&attr, fname, pc.objcaseinsensitive (),
- get_handle (), NULL);
- de->d_type = readdir_check_reparse_point (&attr);
- if (de->d_type == DT_DIR)
- {
- /* Volume mountpoints are treated as directories. We have to fix
- the inode number, otherwise we have the inode number of the
- mount point, rather than the inode number of the toplevel
- directory of the mounted drive. */
- if (NT_SUCCESS (NtOpenFile (&reph, READ_CONTROL, &attr, &io,
- FILE_SHARE_VALID_FLAGS,
- FILE_OPEN_FOR_BACKUP_INTENT)))
- {
- de->d_ino = pc.get_ino_by_handle (reph);
- NtClose (reph);
- }
- }
- }
-
- /* Check for Windows shortcut. If it's a Cygwin or U/WIN symlink, drop the
- .lnk suffix and set d_type accordingly. */
- if ((attr & (FILE_ATTRIBUTE_DIRECTORY
- | FILE_ATTRIBUTE_REPARSE_POINT
- | FILE_ATTRIBUTE_READONLY)) == FILE_ATTRIBUTE_READONLY
- && fname->Length > 4 * sizeof (WCHAR))
- {
- UNICODE_STRING uname;
-
- RtlInitCountedUnicodeString (&uname,
- fname->Buffer
- + fname->Length / sizeof (WCHAR) - 4,
- 4 * sizeof (WCHAR));
- if (RtlEqualUnicodeString (&uname, &ro_u_lnk, TRUE))
- {
- tmp_pathbuf tp;
- char *file = tp.c_get ();
- char *p = stpcpy (file, pc.normalized_path);
- if (p[-1] != '/')
- *p++ = '/';
- sys_wcstombs (p, NT_MAX_PATH - (p - file),
- fname->Buffer, fname->Length / sizeof (WCHAR));
- path_conv fpath (file, PC_SYM_NOFOLLOW);
- if (fpath.issymlink ())
- {
- fname->Length -= 4 * sizeof (WCHAR);
- de->d_type = DT_LNK;
- }
- else if (fpath.isfifo ())
- {
- fname->Length -= 4 * sizeof (WCHAR);
- de->d_type = DT_FIFO;
- }
- else if (fpath.is_fs_special ())
- {
- fname->Length -= 4 * sizeof (WCHAR);
- de->d_type = S_ISCHR (fpath.dev.mode) ? DT_CHR : DT_BLK;
- }
- }
- }
-
- sys_wcstombs (de->d_name, NAME_MAX + 1, fname->Buffer,
- fname->Length / sizeof (WCHAR));
-
- /* Don't try to optimize relative to dir->__d_position. On several
- filesystems it's no safe bet that "." and ".." entries always
- come first. */
- if (de->d_name[0] == '.')
- {
- if (de->d_name[1] == '\0')
- dir->__flags |= dirent_saw_dot;
- else if (de->d_name[1] == '.' && de->d_name[2] == '\0')
- dir->__flags |= dirent_saw_dot_dot;
- }
- return 0;
-}
-
-int
-fhandler_disk_file::readdir (DIR *dir, dirent *de)
-{
- int res = 0;
- NTSTATUS status = STATUS_SUCCESS;
- PFILE_ID_BOTH_DIR_INFORMATION buf = NULL;
- PWCHAR FileName;
- ULONG FileNameLength;
- ULONG FileAttributes = 0;
- IO_STATUS_BLOCK io;
- UNICODE_STRING fname;
-
- /* d_cachepos always refers to the next cache entry to use. If it's 0
- we must reload the cache. */
- if (d_cachepos (dir) == 0)
- {
- if ((dir->__flags & dirent_get_d_ino))
- {
- status = NtQueryDirectoryFile (get_handle (), NULL, NULL, NULL, &io,
- d_cache (dir), DIR_BUF_SIZE,
- FileIdBothDirectoryInformation,
- FALSE, NULL, dir->__d_position == 0);
- /* FileIdBothDirectoryInformation isn't supported for remote drives
- on NT4 and 2K systems. There are also hacked versions of
- Samba 3.0.x out there (Debian-based it seems), which return
- STATUS_NOT_SUPPORTED rather than handling this info class.
- We just fall back to using a standard directory query in
- this case and note this case using the dirent_get_d_ino flag. */
- if (!NT_SUCCESS (status) && status != STATUS_NO_MORE_FILES
- && (status == STATUS_INVALID_LEVEL
- || status == STATUS_NOT_SUPPORTED
- || status == STATUS_INVALID_PARAMETER
- || status == STATUS_INVALID_NETWORK_RESPONSE
- || status == STATUS_INVALID_INFO_CLASS))
- dir->__flags &= ~dirent_get_d_ino;
- /* Something weird happens on Samba up to version 3.0.21c, which is
- fixed in 3.0.22. FileIdBothDirectoryInformation seems to work
- nicely, but only up to the 128th entry in the directory. After
- reaching this entry, the next call to NtQueryDirectoryFile
- (FileIdBothDirectoryInformation) returns STATUS_INVALID_LEVEL.
- Why should we care, we can just switch to
- FileBothDirectoryInformation, isn't it? Nope! The next call to
- NtQueryDirectoryFile(FileBothDirectoryInformation) actually
- returns STATUS_NO_MORE_FILES, regardless how many files are left
- unread in the directory. This does not happen when using
- FileBothDirectoryInformation right from the start, but since
- we can't decide whether the server we're talking with has this
- bug or not, we end up serving Samba shares always in the slow
- mode using FileBothDirectoryInformation. So, what we do here is
- to implement the solution suggested by Andrew Tridgell, we just
- reread all entries up to dir->d_position using
- FileBothDirectoryInformation.
- However, We do *not* mark this server as broken and fall back to
- using FileBothDirectoryInformation further on. This would slow
- down every access to such a server, even for directories under
- 128 entries. Also, bigger dirs only suffer from one additional
- call per full directory scan, which shouldn't be too big a hit.
- This can easily be changed if necessary. */
- if (status == STATUS_INVALID_LEVEL && dir->__d_position)
- {
- d_cachepos (dir) = 0;
- for (int cnt = 0; cnt < dir->__d_position; ++cnt)
- {
- if (d_cachepos (dir) == 0)
- {
- status = NtQueryDirectoryFile (get_handle (), NULL, NULL,
- NULL, &io, d_cache (dir),
- DIR_BUF_SIZE,
- FileBothDirectoryInformation,
- FALSE, NULL, cnt == 0);
- if (!NT_SUCCESS (status))
- goto go_ahead;
- }
- buf = (PFILE_ID_BOTH_DIR_INFORMATION) (d_cache (dir)
- + d_cachepos (dir));
- if (buf->NextEntryOffset == 0)
- d_cachepos (dir) = 0;
- else
- d_cachepos (dir) += buf->NextEntryOffset;
- }
- goto go_ahead;
- }
- }
- if (!(dir->__flags & dirent_get_d_ino))
- status = NtQueryDirectoryFile (get_handle (), NULL, NULL, NULL, &io,
- d_cache (dir), DIR_BUF_SIZE,
- (dir->__flags & dirent_nfs_d_ino)
- ? FileNamesInformation
- : FileBothDirectoryInformation,
- FALSE, NULL, dir->__d_position == 0);
- }
-
-go_ahead:
-
- if (status == STATUS_NO_MORE_FILES)
- /*nothing*/;
- else if (!NT_SUCCESS (status))
- debug_printf ("NtQueryDirectoryFile failed, status %y, win32 error %u",
- status, RtlNtStatusToDosError (status));
- else
- {
- buf = (PFILE_ID_BOTH_DIR_INFORMATION) (d_cache (dir) + d_cachepos (dir));
- if (buf->NextEntryOffset == 0)
- d_cachepos (dir) = 0;
- else
- d_cachepos (dir) += buf->NextEntryOffset;
- if ((dir->__flags & dirent_get_d_ino))
- {
- FileName = buf->FileName;
- FileNameLength = buf->FileNameLength;
- FileAttributes = buf->FileAttributes;
- if ((dir->__flags & dirent_set_d_ino))
- de->d_ino = buf->FileId.QuadPart;
- }
- else if ((dir->__flags & dirent_nfs_d_ino))
- {
- FileName = ((PFILE_NAMES_INFORMATION) buf)->FileName;
- FileNameLength = ((PFILE_NAMES_INFORMATION) buf)->FileNameLength;
- }
- else
- {
- FileName = ((PFILE_BOTH_DIR_INFORMATION) buf)->FileName;
- FileNameLength =
- ((PFILE_BOTH_DIR_INFORMATION) buf)->FileNameLength;
- FileAttributes =
- ((PFILE_BOTH_DIR_INFORMATION) buf)->FileAttributes;
- }
- RtlInitCountedUnicodeString (&fname, FileName, FileNameLength);
- de->d_ino = d_mounts (dir)->check_mount (&fname, de->d_ino);
- if (de->d_ino == 0 && (dir->__flags & dirent_set_d_ino))
- {
- /* Don't try to optimize relative to dir->__d_position. On several
- filesystems it's no safe bet that "." and ".." entries always
- come first. */
- if (FileNameLength == sizeof (WCHAR) && FileName[0] == '.')
- de->d_ino = pc.get_ino_by_handle (get_handle ());
- else if (FileNameLength == 2 * sizeof (WCHAR)
- && FileName[0] == L'.' && FileName[1] == L'.')
- {
- if (!(dir->__flags & dirent_isroot))
- de->d_ino = readdir_get_ino (get_name (), true);
- else
- de->d_ino = pc.get_ino_by_handle (get_handle ());
- }
- else
- {
- OBJECT_ATTRIBUTES attr;
- HANDLE hdl;
- NTSTATUS f_status;
-
- InitializeObjectAttributes (&attr, &fname,
- pc.objcaseinsensitive (),
- get_handle (), NULL);
- /* FILE_OPEN_REPARSE_POINT on NFS is a no-op, so the normal
- NtOpenFile here returns the inode number of the symlink target,
- rather than the inode number of the symlink itself.
-
- Worse, trying to open a symlink without setting the special
- "ActOnSymlink" EA triggers a bug in Windows 7 which results
- in a timeout of up to 20 seconds, followed by two exceptions
- in the NT kernel.
-
- Since both results are far from desirable, we open symlinks
- on NFS so that we get the right inode and a happy W7.
- And, since some filesystems choke on the EAs, we don't
- use them unconditionally. */
- f_status = (dir->__flags & dirent_nfs_d_ino)
- ? NtCreateFile (&hdl, READ_CONTROL, &attr, &io,
- NULL, 0, FILE_SHARE_VALID_FLAGS,
- FILE_OPEN, FILE_OPEN_FOR_BACKUP_INTENT,
- &nfs_aol_ffei, sizeof nfs_aol_ffei)
- : NtOpenFile (&hdl, READ_CONTROL, &attr, &io,
- FILE_SHARE_VALID_FLAGS,
- FILE_OPEN_FOR_BACKUP_INTENT
- | FILE_OPEN_REPARSE_POINT);
- if (NT_SUCCESS (f_status))
- {
- /* We call NtQueryInformationFile here, rather than
- pc.get_ino_by_handle(), otherwise we can't short-circuit
- dirent_set_d_ino correctly. */
- FILE_INTERNAL_INFORMATION fai;
- f_status = NtQueryInformationFile (hdl, &io, &fai, sizeof fai,
- FileInternalInformation);
- NtClose (hdl);
- if (NT_SUCCESS (f_status))
- {
- if (pc.isgood_inode (fai.FileId.QuadPart))
- de->d_ino = fai.FileId.QuadPart;
- else
- /* Untrusted file system. Don't try to fetch inode
- number again. */
- dir->__flags &= ~dirent_set_d_ino;
- }
- }
- }
- }
- }
-
- if (!(res = readdir_helper (dir, de, RtlNtStatusToDosError (status),
- FileAttributes, &fname)))
- dir->__d_position++;
- else if (!(dir->__flags & dirent_saw_dot))
- {
- strcpy (de->d_name , ".");
- de->d_ino = pc.get_ino_by_handle (get_handle ());
- de->d_type = DT_DIR;
- dir->__d_position++;
- dir->__flags |= dirent_saw_dot;
- res = 0;
- }
- else if (!(dir->__flags & dirent_saw_dot_dot))
- {
- strcpy (de->d_name , "..");
- if (!(dir->__flags & dirent_isroot))
- de->d_ino = readdir_get_ino (get_name (), true);
- else
- de->d_ino = pc.get_ino_by_handle (get_handle ());
- de->d_type = DT_DIR;
- dir->__d_position++;
- dir->__flags |= dirent_saw_dot_dot;
- res = 0;
- }
-
- syscall_printf ("%d = readdir(%p, %p) (L\"%lS\" > \"%ls\") (attr %y > type %d)",
- res, dir, &de, res ? NULL : &fname, res ? "***" : de->d_name,
- FileAttributes, de->d_type);
- return res;
-}
-
-long
-fhandler_disk_file::telldir (DIR *dir)
-{
- return dir->__d_position;
-}
-
-void
-fhandler_disk_file::seekdir (DIR *dir, long loc)
-{
- rewinddir (dir);
- while (loc > dir->__d_position)
- if (!::readdir (dir))
- break;
-}
-
-void
-fhandler_disk_file::rewinddir (DIR *dir)
-{
- d_cachepos (dir) = 0;
- dir->__d_position = 0;
- d_mounts (dir)->rewind ();
-}
-
-int
-fhandler_disk_file::closedir (DIR *dir)
-{
- int res = 0;
-
- delete d_mounts (dir);
- syscall_printf ("%d = closedir(%p, %s)", res, dir, get_name ());
- return res;
-}
-
-fhandler_cygdrive::fhandler_cygdrive () :
- fhandler_disk_file (), ndrives (0), pdrive (NULL)
-{
-}
-
-int
-fhandler_cygdrive::open (int flags, mode_t mode)
-{
- if ((flags & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL))
- {
- set_errno (EEXIST);
- return 0;
- }
- if (flags & O_WRONLY)
- {
- set_errno (EISDIR);
- return 0;
- }
- /* Open a fake handle to \\Device\\Null */
- return open_null (flags);
-}
-
-void
-fhandler_cygdrive::set_drives ()
-{
- pdrive = pdrive_buf;
- ndrives = GetLogicalDriveStrings (sizeof pdrive_buf, pdrive_buf) / DRVSZ;
-}
-
-int
-fhandler_cygdrive::fstat (struct stat *buf)
-{
- fhandler_base::fstat (buf);
- buf->st_ino = 2;
- buf->st_mode = S_IFDIR | STD_RBITS | STD_XBITS;
- buf->st_nlink = 1;
- return 0;
-}
-
-int __reg2
-fhandler_cygdrive::fstatvfs (struct statvfs *sfs)
-{
- /* Virtual file system. Just return an empty buffer with a few values
- set to something useful. Just as on Linux. */
- memset (sfs, 0, sizeof (*sfs));
- sfs->f_bsize = sfs->f_frsize = 4096;
- sfs->f_flag = ST_RDONLY;
- sfs->f_namemax = NAME_MAX;
- return 0;
-}
-
-DIR *
-fhandler_cygdrive::opendir (int fd)
-{
- DIR *dir;
-
- dir = fhandler_disk_file::opendir (fd);
- if (dir && !ndrives)
- set_drives ();
-
- return dir;
-}
-
-int
-fhandler_cygdrive::readdir (DIR *dir, dirent *de)
-{
- WCHAR drive[] = L"X:";
-
- while (true)
- {
- if (!pdrive || !*pdrive)
- {
- if (!(dir->__flags & dirent_saw_dot))
- {
- de->d_name[0] = '.';
- de->d_name[1] = '\0';
- de->d_ino = 2;
- }
- return ENMFILE;
- }
- disk_type dt = get_disk_type ((drive[0] = *pdrive, drive));
- if (dt == DT_SHARE_SMB)
- {
- /* Calling NetUseGetInfo on SMB drives allows to fetch the
- current state of the drive without trying to open a file
- descriptor on the share (GetFileAttributes). This avoids
- waiting for SMB timeouts. Of course, there's a downside:
- If a drive becomes availabe again, it can take a couple of
- minutes to recognize it. As long as this didn't happen,
- the drive will not show up in the cygdrive dir. */
- PUSE_INFO_1 pui1;
- DWORD status;
-
- if (NetUseGetInfo (NULL, drive, 1, (PBYTE *) &pui1) == NERR_Success)
- {
- status = pui1->ui1_status;
- NetApiBufferFree (pui1);
- if (status == USE_OK)
- break;
- }
- }
- else if (dt != DT_FLOPPY
- && GetFileAttributes (pdrive) != INVALID_FILE_ATTRIBUTES)
- break;
- pdrive = strchr (pdrive, '\0') + 1;
- }
- *de->d_name = cyg_tolower (*pdrive);
- de->d_name[1] = '\0';
- user_shared->warned_msdos = true;
- de->d_ino = readdir_get_ino (pdrive, false);
- dir->__d_position++;
- pdrive = strchr (pdrive, '\0') + 1;
- syscall_printf ("%p = readdir (%p) (%s)", &de, dir, de->d_name);
- return 0;
-}
-
-void
-fhandler_cygdrive::rewinddir (DIR *dir)
-{
- pdrive = pdrive_buf;
- dir->__d_position = 0;
-}
-
-int
-fhandler_cygdrive::closedir (DIR *dir)
-{
- pdrive = pdrive_buf;
- return 0;
-}
diff --git a/winsup/cygwin/fhandler_dsp.cc b/winsup/cygwin/fhandler_dsp.cc
deleted file mode 100644
index b5eaba7be..000000000
--- a/winsup/cygwin/fhandler_dsp.cc
+++ /dev/null
@@ -1,1420 +0,0 @@
-/* fhandler_dev_dsp: code to emulate OSS sound model /dev/dsp
-
- Copyright 2001, 2002, 2003, 2004, 2008, 2011, 2012, 2013 Red Hat, Inc
-
- Written by Andy Younger (andy@snoogie.demon.co.uk)
- Extended by Gerd Spalink (Gerd.Spalink@t-online.de)
- to support recording from the audio input
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include <sys/soundcard.h>
-#include "cygerrno.h"
-#include "security.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "sigproc.h"
-#include "cygwait.h"
-
-/*------------------------------------------------------------------------
- Simple encapsulation of the win32 audio device.
-
- Implementation Notes
- 1. Audio structures are malloced just before the first read or
- write to /dev/dsp. The actual buffer size is determined at that time,
- such that one buffer holds about 125ms of audio data.
- At the time of this writing, 12 buffers are allocated,
- so that up to 1.5 seconds can be buffered within Win32.
- The buffer size can be queried with the ioctl SNDCTL_DSP_GETBLKSIZE,
- but for this implementation only returns meaningful results if
- sampling rate, number of channels and number of bits per sample
- are not changed afterwards.
- The audio structures are freed when the device is reset or closed,
- and they are not passed to exec'ed processes.
- The dev_ member is cleared after a fork. This forces the child
- to reopen the audio device._
-
- 2. Every open call creates a new instance of the handler. After a
- successful open, every subsequent open from the same process
- to the device fails with EBUSY.
- The structures are shared between duped handles, but not with
- children. They only inherit the settings from the parent.
- */
-
-class fhandler_dev_dsp::Audio
-{ // This class contains functionality common to Audio_in and Audio_out
- public:
- Audio (fhandler_dev_dsp *my_fh);
- ~Audio ();
-
- class queue;
-
- bool isvalid ();
- void setconvert (int format);
- void convert_none (unsigned char *buffer, int size_bytes) { }
- void convert_U8_S8 (unsigned char *buffer, int size_bytes);
- void convert_S16LE_U16LE (unsigned char *buffer, int size_bytes);
- void convert_S16LE_U16BE (unsigned char *buffer, int size_bytes);
- void convert_S16LE_S16BE (unsigned char *buffer, int size_bytes);
- void fillFormat (WAVEFORMATEX * format,
- int rate, int bits, int channels);
- unsigned blockSize (int rate, int bits, int channels);
- void (fhandler_dev_dsp::Audio::*convert_)
- (unsigned char *buffer, int size_bytes);
-
- enum { MAX_BLOCKS = 12 };
- int bufferIndex_; // offset into pHdr_->lpData
- WAVEHDR *pHdr_; // data to be filled by write
- WAVEHDR wavehdr_[MAX_BLOCKS];
- char *bigwavebuffer_; // audio samples only
- // Member variables below must be locked
- queue *Qisr2app_; // blocks passed from wave callback
-
- fhandler_dev_dsp *fh;
-};
-
-class fhandler_dev_dsp::Audio::queue
-{ // non-blocking fixed size queues for buffer management
- public:
- queue (int depth = 4);
- ~queue ();
-
- bool send (WAVEHDR *); // queue an item, returns true if successful
- bool recv (WAVEHDR **); // retrieve an item, returns true if successful
- void reset ();
- int query (); // return number of items queued
- inline void lock () { EnterCriticalSection (&lock_); }
- inline void unlock () { LeaveCriticalSection (&lock_); }
- inline void dellock () { debug_printf ("Deleting Critical Section"); DeleteCriticalSection (&lock_); }
- bool isvalid () { return storage_; }
- private:
- CRITICAL_SECTION lock_;
- int head_;
- int tail_;
- int depth_;
- WAVEHDR **storage_;
-};
-
-static void CALLBACK waveOut_callback (HWAVEOUT hWave, UINT msg,
- DWORD_PTR instance, DWORD_PTR param1,
- DWORD_PTR param2);
-
-class fhandler_dev_dsp::Audio_out: public Audio
-{
- public:
- Audio_out (fhandler_dev_dsp *my_fh) : Audio (my_fh) {}
-
- void fork_fixup (HANDLE parent);
- bool query (int rate, int bits, int channels);
- bool start ();
- void stop (bool immediately = false);
- int write (const char *pSampleData, int nBytes);
- void buf_info (audio_buf_info *p, int rate, int bits, int channels);
- void callback_sampledone (WAVEHDR *pHdr);
- bool parsewav (const char *&pData, int &nBytes,
- int rate, int bits, int channels);
-
- private:
- void init (unsigned blockSize);
- void waitforallsent ();
- bool waitforspace ();
- bool sendcurrent ();
-
- enum { MAX_BLOCKS = 12 };
- HWAVEOUT dev_; // The wave device
- /* Private copies of audiofreq_, audiobits_, audiochannels_,
- possibly set from wave file */
- int freq_;
- int bits_;
- int channels_;
-};
-
-static void CALLBACK waveIn_callback (HWAVEIN hWave, UINT msg,
- DWORD_PTR instance, DWORD_PTR param1,
- DWORD_PTR param2);
-
-class fhandler_dev_dsp::Audio_in: public Audio
-{
-public:
- Audio_in (fhandler_dev_dsp *my_fh) : Audio (my_fh) {}
-
- void fork_fixup (HANDLE parent);
- bool query (int rate, int bits, int channels);
- bool start (int rate, int bits, int channels);
- void stop ();
- bool read (char *pSampleData, int &nBytes);
- void buf_info (audio_buf_info *p, int rate, int bits, int channels);
- void callback_blockfull (WAVEHDR *pHdr);
-
-private:
- bool init (unsigned blockSize);
- bool queueblock (WAVEHDR *pHdr);
- bool waitfordata (); // blocks until we have a good pHdr_ unless O_NONBLOCK
-
- HWAVEIN dev_;
-};
-
-/* --------------------------------------------------------------------
- Implementation */
-
-// Simple fixed length FIFO queue implementation for audio buffer management
-fhandler_dev_dsp::Audio::queue::queue (int depth)
-{
- // allow space for one extra object in the queue
- // so we can distinguish full and empty status
- depth_ = depth;
- storage_ = new WAVEHDR *[depth_ + 1];
-}
-
-fhandler_dev_dsp::Audio::queue::~queue ()
-{
- delete[] storage_;
-}
-
-void
-fhandler_dev_dsp::Audio::queue::reset ()
- {
- /* When starting, after reset and after fork */
- head_ = tail_ = 0;
- debug_printf ("InitializeCriticalSection");
- memset (&lock_, 0, sizeof (lock_));
- InitializeCriticalSection (&lock_);
- }
-
-bool
-fhandler_dev_dsp::Audio::queue::send (WAVEHDR *x)
-{
- bool res = false;
- lock ();
- if (query () == depth_)
- system_printf ("Queue overflow");
- else
- {
- storage_[tail_] = x;
- if (++tail_ > depth_)
- tail_ = 0;
- res = true;
- }
- unlock ();
- return res;
-}
-
-bool
-fhandler_dev_dsp::Audio::queue::recv (WAVEHDR **x)
-{
- bool res = false;
- lock ();
- if (query () != 0)
- {
- *x = storage_[head_];
- if (++head_ > depth_)
- head_ = 0;
- res = true;
- }
- unlock ();
- return res;
-}
-
-int
-fhandler_dev_dsp::Audio::queue::query ()
-{
- int n = tail_ - head_;
- if (n < 0)
- n += depth_ + 1;
- return n;
-}
-
-// Audio class implements functionality need for both read and write
-fhandler_dev_dsp::Audio::Audio (fhandler_dev_dsp *my_fh)
-{
- bigwavebuffer_ = NULL;
- Qisr2app_ = new queue (MAX_BLOCKS);
- convert_ = &fhandler_dev_dsp::Audio::convert_none;
- fh = my_fh;
-}
-
-fhandler_dev_dsp::Audio::~Audio ()
-{
- debug_printf("");
- delete Qisr2app_;
- delete[] bigwavebuffer_;
-}
-
-inline bool
-fhandler_dev_dsp::Audio::isvalid ()
-{
- return bigwavebuffer_ && Qisr2app_ && Qisr2app_->isvalid ();
-}
-
-void
-fhandler_dev_dsp::Audio::setconvert (int format)
-{
- switch (format)
- {
- case AFMT_S8:
- convert_ = &fhandler_dev_dsp::Audio::convert_U8_S8;
- debug_printf ("U8_S8");
- break;
- case AFMT_U16_LE:
- convert_ = &fhandler_dev_dsp::Audio::convert_S16LE_U16LE;
- debug_printf ("S16LE_U16LE");
- break;
- case AFMT_U16_BE:
- convert_ = &fhandler_dev_dsp::Audio::convert_S16LE_U16BE;
- debug_printf ("S16LE_U16BE");
- break;
- case AFMT_S16_BE:
- convert_ = &fhandler_dev_dsp::Audio::convert_S16LE_S16BE;
- debug_printf ("S16LE_S16BE");
- break;
- default:
- convert_ = &fhandler_dev_dsp::Audio::convert_none;
- debug_printf ("none");
- }
-}
-
-void
-fhandler_dev_dsp::Audio::convert_U8_S8 (unsigned char *buffer,
- int size_bytes)
-{
- while (size_bytes-- > 0)
- {
- *buffer ^= (unsigned char)0x80;
- buffer++;
- }
-}
-
-void
-fhandler_dev_dsp::Audio::convert_S16LE_U16BE (unsigned char *buffer,
- int size_bytes)
-{
- int size_samples = size_bytes / 2;
- unsigned char hi, lo;
- while (size_samples-- > 0)
- {
- hi = buffer[0];
- lo = buffer[1];
- *buffer++ = lo;
- *buffer++ = hi ^ (unsigned char)0x80;
- }
-}
-
-void
-fhandler_dev_dsp::Audio::convert_S16LE_U16LE (unsigned char *buffer,
- int size_bytes)
-{
- int size_samples = size_bytes / 2;
- while (size_samples-- > 0)
- {
- buffer++;
- *buffer ^= (unsigned char)0x80;
- buffer++;
- }
-}
-
-void
-fhandler_dev_dsp::Audio::convert_S16LE_S16BE (unsigned char *buffer,
- int size_bytes)
-{
- int size_samples = size_bytes / 2;
- unsigned char hi, lo;
- while (size_samples-- > 0)
- {
- hi = buffer[0];
- lo = buffer[1];
- *buffer++ = lo;
- *buffer++ = hi;
- }
-}
-
-void
-fhandler_dev_dsp::Audio::fillFormat (WAVEFORMATEX * format,
- int rate, int bits, int channels)
-{
- memset (format, 0, sizeof (*format));
- format->wFormatTag = WAVE_FORMAT_PCM;
- format->wBitsPerSample = bits;
- format->nChannels = channels;
- format->nSamplesPerSec = rate;
- format->nAvgBytesPerSec = format->nSamplesPerSec * format->nChannels
- * (bits / 8);
- format->nBlockAlign = format->nChannels * (bits / 8);
-}
-
-// calculate a good block size
-unsigned
-fhandler_dev_dsp::Audio::blockSize (int rate, int bits, int channels)
-{
- unsigned blockSize;
- blockSize = ((bits / 8) * channels * rate) / 8; // approx 125ms per block
- // round up to multiple of 64
- blockSize += 0x3f;
- blockSize &= ~0x3f;
- return blockSize;
-}
-
-//=======================================================================
-void
-fhandler_dev_dsp::Audio_out::fork_fixup (HANDLE parent)
-{
- /* Null dev_.
- It will be necessary to reset the queue, open the device
- and create a lock when writing */
- debug_printf ("parent=%p", parent);
- dev_ = NULL;
-}
-
-
-bool
-fhandler_dev_dsp::Audio_out::query (int rate, int bits, int channels)
-{
- WAVEFORMATEX format;
- MMRESULT rc;
-
- fillFormat (&format, rate, bits, channels);
- rc = waveOutOpen (NULL, WAVE_MAPPER, &format, 0L, 0L, WAVE_FORMAT_QUERY);
- debug_printf ("%u = waveOutOpen(freq=%d bits=%d channels=%d)", rc, rate, bits, channels);
- return (rc == MMSYSERR_NOERROR);
-}
-
-bool
-fhandler_dev_dsp::Audio_out::start ()
-{
- WAVEFORMATEX format;
- MMRESULT rc;
- unsigned bSize = blockSize (freq_, bits_, channels_);
-
- if (dev_)
- return true;
-
- /* In case of fork bigwavebuffer may already exist */
- if (!bigwavebuffer_)
- bigwavebuffer_ = new char[MAX_BLOCKS * bSize];
-
- if (!isvalid ())
- return false;
-
- fillFormat (&format, freq_, bits_, channels_);
- rc = waveOutOpen (&dev_, WAVE_MAPPER, &format, (DWORD_PTR) waveOut_callback,
- (DWORD_PTR) this, CALLBACK_FUNCTION);
- if (rc == MMSYSERR_NOERROR)
- init (bSize);
-
- debug_printf ("%u = waveOutOpen(freq=%d bits=%d channels=%d)", rc, freq_, bits_, channels_);
-
- return (rc == MMSYSERR_NOERROR);
-}
-
-void
-fhandler_dev_dsp::Audio_out::stop (bool immediately)
-{
- MMRESULT rc;
- WAVEHDR *pHdr;
-
- debug_printf ("dev_=%p", dev_);
- if (dev_)
- {
- if (!immediately)
- {
- sendcurrent (); // force out last block whatever size..
- waitforallsent (); // block till finished..
- }
-
- rc = waveOutReset (dev_);
- debug_printf ("%u = waveOutReset()", rc);
- while (Qisr2app_->recv (&pHdr))
- {
- rc = waveOutUnprepareHeader (dev_, pHdr, sizeof (WAVEHDR));
- debug_printf ("%u = waveOutUnprepareHeader(%p)", rc, pHdr);
- }
-
- no_thread_exit_protect for_now (true);
- rc = waveOutClose (dev_);
- debug_printf ("%u = waveOutClose()", rc);
-
- Qisr2app_->dellock ();
- }
-}
-
-void
-fhandler_dev_dsp::Audio_out::init (unsigned blockSize)
-{
- int i;
-
- // internally queue all of our buffer for later use by write
- Qisr2app_->reset ();
- for (i = 0; i < MAX_BLOCKS; i++)
- {
- wavehdr_[i].lpData = &bigwavebuffer_[i * blockSize];
- wavehdr_[i].dwUser = (int) blockSize;
- wavehdr_[i].dwFlags = 0;
- if (!Qisr2app_->send (&wavehdr_[i]))
- {
- system_printf ("Internal Error i=%d", i);
- break; // should not happen
- }
- }
- pHdr_ = NULL;
-}
-
-int
-fhandler_dev_dsp::Audio_out::write (const char *pSampleData, int nBytes)
-{
- int bytes_to_write = nBytes;
- while (bytes_to_write != 0)
- { // Block if all blocks used until at least one is free
- if (!waitforspace ())
- {
- if (bytes_to_write != nBytes)
- break;
- return -1;
- }
-
- int sizeleft = (int)pHdr_->dwUser - bufferIndex_;
- if (bytes_to_write < sizeleft)
- { // all data fits into the current block, with some space left
- memcpy (&pHdr_->lpData[bufferIndex_], pSampleData, bytes_to_write);
- bufferIndex_ += bytes_to_write;
- bytes_to_write = 0;
- break;
- }
- else
- { // data will fill up the current block
- memcpy (&pHdr_->lpData[bufferIndex_], pSampleData, sizeleft);
- bufferIndex_ += sizeleft;
- sendcurrent ();
- pSampleData += sizeleft;
- bytes_to_write -= sizeleft;
- }
- }
- return nBytes - bytes_to_write;
-}
-
-void
-fhandler_dev_dsp::Audio_out::buf_info (audio_buf_info *p,
- int rate, int bits, int channels)
-{
- p->fragstotal = MAX_BLOCKS;
- if (this && dev_)
- {
- /* If the device is running we use the internal values,
- possibly set from the wave file. */
- p->fragsize = blockSize (freq_, bits_, channels_);
- p->fragments = Qisr2app_->query ();
- if (pHdr_ != NULL)
- p->bytes = (int)pHdr_->dwUser - bufferIndex_
- + p->fragsize * p->fragments;
- else
- p->bytes = p->fragsize * p->fragments;
- }
- else
- {
- p->fragsize = blockSize (rate, bits, channels);
- p->fragments = MAX_BLOCKS;
- p->bytes = p->fragsize * p->fragments;
- }
-}
-
-/* This is called on an interupt so use locking.. Note Qisr2app_
- is used so we should wrap all references to it in locks. */
-inline void
-fhandler_dev_dsp::Audio_out::callback_sampledone (WAVEHDR *pHdr)
-{
- Qisr2app_->send (pHdr);
-}
-
-bool
-fhandler_dev_dsp::Audio_out::waitforspace ()
-{
- WAVEHDR *pHdr;
- MMRESULT rc = WAVERR_STILLPLAYING;
-
- if (pHdr_ != NULL)
- return true;
- while (!Qisr2app_->recv (&pHdr))
- {
- if (fh->is_nonblocking ())
- {
- set_errno (EAGAIN);
- return false;
- }
- debug_printf ("100ms");
- switch (cygwait (100))
- {
- case WAIT_SIGNALED:
- if (!_my_tls.call_signal_handler ())
- {
- set_errno (EINTR);
- return false;
- }
- break;
- case WAIT_CANCELED:
- pthread::static_cancel_self ();
- /*NOTREACHED*/
- default:
- break;
- }
- }
- if (pHdr->dwFlags)
- {
- /* Errors are ignored here. They will probbaly cause a failure
- in the subsequent PrepareHeader */
- rc = waveOutUnprepareHeader (dev_, pHdr, sizeof (WAVEHDR));
- debug_printf ("%u = waveOutUnprepareHeader(%p)", rc, pHdr);
- }
- pHdr_ = pHdr;
- bufferIndex_ = 0;
- return true;
-}
-
-void
-fhandler_dev_dsp::Audio_out::waitforallsent ()
-{
- while (Qisr2app_->query () != MAX_BLOCKS)
- {
- debug_printf ("%d blocks in Qisr2app", Qisr2app_->query ());
- Sleep (100);
- }
-}
-
-// send the block described by pHdr_ and bufferIndex_ to wave device
-bool
-fhandler_dev_dsp::Audio_out::sendcurrent ()
-{
- WAVEHDR *pHdr = pHdr_;
- MMRESULT rc;
- debug_printf ("pHdr=%p bytes=%d", pHdr, bufferIndex_);
-
- if (pHdr_ == NULL)
- return false;
- pHdr_ = NULL;
-
- // Sample buffer conversion
- (this->*convert_) ((unsigned char *)pHdr->lpData, bufferIndex_);
-
- // Send internal buffer out to the soundcard
- pHdr->dwBufferLength = bufferIndex_;
- rc = waveOutPrepareHeader (dev_, pHdr, sizeof (WAVEHDR));
- debug_printf ("%u = waveOutPrepareHeader(%p)", rc, pHdr);
- if (rc == MMSYSERR_NOERROR)
- {
- rc = waveOutWrite (dev_, pHdr, sizeof (WAVEHDR));
- debug_printf ("%u = waveOutWrite(%p)", rc, pHdr);
- }
- if (rc == MMSYSERR_NOERROR)
- return true;
-
- /* FIXME: Should we return an error instead ?*/
- pHdr->dwFlags = 0; /* avoid calling UnprepareHeader again */
- Qisr2app_->send (pHdr);
- return false;
-}
-
-//------------------------------------------------------------------------
-// Call back routine
-static void CALLBACK
-waveOut_callback (HWAVEOUT hWave, UINT msg, DWORD_PTR instance,
- DWORD_PTR param1, DWORD_PTR param2)
-{
- if (msg == WOM_DONE)
- {
- fhandler_dev_dsp::Audio_out *ptr =
- (fhandler_dev_dsp::Audio_out *) instance;
- ptr->callback_sampledone ((WAVEHDR *) param1);
- }
-}
-
-//------------------------------------------------------------------------
-// wav file detection..
-#pragma pack(1)
-struct wavchunk
-{
- char id[4];
- unsigned int len;
-};
-struct wavformat
-{
- unsigned short wFormatTag;
- unsigned short wChannels;
- unsigned int dwSamplesPerSec;
- unsigned int dwAvgBytesPerSec;
- unsigned short wBlockAlign;
- unsigned short wBitsPerSample;
-};
-#pragma pack()
-
-bool
-fhandler_dev_dsp::Audio_out::parsewav (const char * &pData, int &nBytes,
- int dev_freq, int dev_bits, int dev_channels)
-{
- int len;
- const char *end = pData + nBytes;
- const char *pDat;
- int skip = 0;
-
- /* Start with default values from the device handler */
- freq_ = dev_freq;
- bits_ = dev_bits;
- channels_ = dev_channels;
- setconvert (bits_ == 8 ? AFMT_U8 : AFMT_S16_LE);
-
- // Check alignment first: A lot of the code below depends on it
- if (((uintptr_t)pData & 0x3) != 0)
- return false;
- if (!(pData[0] == 'R' && pData[1] == 'I'
- && pData[2] == 'F' && pData[3] == 'F'))
- return false;
- if (!(pData[8] == 'W' && pData[9] == 'A'
- && pData[10] == 'V' && pData[11] == 'E'))
- return false;
-
- len = *(int *) &pData[4];
- len -= 12;
- pDat = pData + 12;
- skip = 12;
- while ((len > 0) && (pDat + sizeof (wavchunk) < end))
- { /* We recognize two kinds of wavchunk:
- "fmt " for the PCM parameters (only PCM supported here)
- "data" for the start of PCM data */
- wavchunk * pChunk = (wavchunk *) pDat;
- int blklen = pChunk-> len;
- if (pChunk->id[0] == 'f' && pChunk->id[1] == 'm'
- && pChunk->id[2] == 't' && pChunk->id[3] == ' ')
- {
- wavformat *format = (wavformat *) (pChunk + 1);
- if ((char *) (format + 1) >= end)
- return false;
- // We have found the parameter chunk
- if (format->wFormatTag == 0x0001)
- { // Micr*s*ft PCM; check if parameters work with our device
- if (query (format->dwSamplesPerSec, format->wBitsPerSample,
- format->wChannels))
- { // return the parameters we found
- freq_ = format->dwSamplesPerSec;
- bits_ = format->wBitsPerSample;
- channels_ = format->wChannels;
- }
- }
- }
- else
- {
- if (pChunk->id[0] == 'd' && pChunk->id[1] == 'a'
- && pChunk->id[2] == 't' && pChunk->id[3] == 'a')
- { // throw away all the header & not output it to the soundcard.
- skip += sizeof (wavchunk);
- debug_printf ("Discard %d bytes wave header", skip);
- pData += skip;
- nBytes -= skip;
- setconvert (bits_ == 8 ? AFMT_U8 : AFMT_S16_LE);
- return true;
- }
- }
- pDat += blklen + sizeof (wavchunk);
- skip += blklen + sizeof (wavchunk);
- len -= blklen + sizeof (wavchunk);
- }
- return false;
-}
-
-/* ========================================================================
- Buffering concept for Audio_in:
- On the first read, we queue all blocks of our bigwavebuffer
- for reception and start the wave-in device.
- We manage queues of pointers to WAVEHDR
- When a block has been filled, the callback puts the corresponding
- WAVEHDR pointer into a queue.
- The function read() blocks (polled, sigh) until at least one good buffer
- has arrived, then the data is copied into the buffer provided to read().
- After a buffer has been fully used by read(), it is queued again
- to the wave-in device immediately.
- The function read() iterates until all data requested has been
- received, there is no way to interrupt it */
-
-void
-fhandler_dev_dsp::Audio_in::fork_fixup (HANDLE parent)
-{
- /* Null dev_.
- It will be necessary to reset the queue, open the device
- and create a lock when reading */
- debug_printf ("parent=%p", parent);
- dev_ = NULL;
-}
-
-bool
-fhandler_dev_dsp::Audio_in::query (int rate, int bits, int channels)
-{
- WAVEFORMATEX format;
- MMRESULT rc;
-
- fillFormat (&format, rate, bits, channels);
- rc = waveInOpen (NULL, WAVE_MAPPER, &format, 0L, 0L, WAVE_FORMAT_QUERY);
- debug_printf ("%u = waveInOpen(freq=%d bits=%d channels=%d)", rc, rate, bits, channels);
- return (rc == MMSYSERR_NOERROR);
-}
-
-bool
-fhandler_dev_dsp::Audio_in::start (int rate, int bits, int channels)
-{
- WAVEFORMATEX format;
- MMRESULT rc;
- unsigned bSize = blockSize (rate, bits, channels);
-
- if (dev_)
- return true;
-
- /* In case of fork bigwavebuffer may already exist */
- if (!bigwavebuffer_)
- bigwavebuffer_ = new char[MAX_BLOCKS * bSize];
-
- if (!isvalid ())
- return false;
-
- fillFormat (&format, rate, bits, channels);
- rc = waveInOpen (&dev_, WAVE_MAPPER, &format, (DWORD_PTR) waveIn_callback,
- (DWORD_PTR) this, CALLBACK_FUNCTION);
- debug_printf ("%u = waveInOpen(rate=%d bits=%d channels=%d)", rc, rate, bits, channels);
-
- if (rc == MMSYSERR_NOERROR)
- {
- if (!init (bSize))
- return false;
- }
- return (rc == MMSYSERR_NOERROR);
-}
-
-void
-fhandler_dev_dsp::Audio_in::stop ()
-{
- MMRESULT rc;
- WAVEHDR *pHdr;
-
- debug_printf ("dev_=%p", dev_);
- if (dev_)
- {
- /* Note that waveInReset calls our callback for all incomplete buffers.
- Since all the win32 wave functions appear to use a common lock,
- we must not call into the wave API from the callback.
- Otherwise we end up in a deadlock. */
- rc = waveInReset (dev_);
- debug_printf ("%u = waveInReset()", rc);
-
- while (Qisr2app_->recv (&pHdr))
- {
- rc = waveInUnprepareHeader (dev_, pHdr, sizeof (WAVEHDR));
- debug_printf ("%u = waveInUnprepareHeader(%p)", rc, pHdr);
- }
-
- no_thread_exit_protect for_now (true);
- rc = waveInClose (dev_);
- debug_printf ("%u = waveInClose()", rc);
-
- Qisr2app_->dellock ();
- }
-}
-
-bool
-fhandler_dev_dsp::Audio_in::queueblock (WAVEHDR *pHdr)
-{
- MMRESULT rc;
- rc = waveInPrepareHeader (dev_, pHdr, sizeof (WAVEHDR));
- debug_printf ("%u = waveInPrepareHeader(%p)", rc, pHdr);
- if (rc == MMSYSERR_NOERROR)
- {
- rc = waveInAddBuffer (dev_, pHdr, sizeof (WAVEHDR));
- debug_printf ("%u = waveInAddBuffer(%p)", rc, pHdr);
- }
- if (rc == MMSYSERR_NOERROR)
- return true;
-
- /* FIXME: Should the calling function return an error instead ?*/
- pHdr->dwFlags = 0; /* avoid calling UnprepareHeader again */
- pHdr->dwBytesRecorded = 0; /* no data will have been read */
- Qisr2app_->send (pHdr);
- return false;
-}
-
-bool
-fhandler_dev_dsp::Audio_in::init (unsigned blockSize)
-{
- MMRESULT rc;
- int i;
-
- // try to queue all of our buffer for reception
- Qisr2app_->reset ();
- for (i = 0; i < MAX_BLOCKS; i++)
- {
- wavehdr_[i].lpData = &bigwavebuffer_[i * blockSize];
- wavehdr_[i].dwBufferLength = blockSize;
- wavehdr_[i].dwFlags = 0;
- if (!queueblock (&wavehdr_[i]))
- break;
- }
- pHdr_ = NULL;
- rc = waveInStart (dev_);
- debug_printf ("%u = waveInStart(), queued=%d", rc, i);
- return (rc == MMSYSERR_NOERROR);
-}
-
-bool
-fhandler_dev_dsp::Audio_in::read (char *pSampleData, int &nBytes)
-{
- int bytes_to_read = nBytes;
- nBytes = 0;
- debug_printf ("pSampleData=%p nBytes=%d", pSampleData, bytes_to_read);
- while (bytes_to_read != 0)
- { // Block till next sound has been read
- if (!waitfordata ())
- {
- if (nBytes)
- return true;
- nBytes = -1;
- return false;
- }
-
- // Handle gathering our blocks into smaller or larger buffer
- int sizeleft = pHdr_->dwBytesRecorded - bufferIndex_;
- if (bytes_to_read < sizeleft)
- { // The current buffer holds more data than requested
- memcpy (pSampleData, &pHdr_->lpData[bufferIndex_], bytes_to_read);
- (this->*convert_) ((unsigned char *)pSampleData, bytes_to_read);
- nBytes += bytes_to_read;
- bufferIndex_ += bytes_to_read;
- debug_printf ("got %d", bytes_to_read);
- break; // done; use remaining data in next call to read
- }
- else
- { // not enough or exact amount in the current buffer
- if (sizeleft)
- { // use up what we have
- memcpy (pSampleData, &pHdr_->lpData[bufferIndex_], sizeleft);
- (this->*convert_) ((unsigned char *)pSampleData, sizeleft);
- nBytes += sizeleft;
- bytes_to_read -= sizeleft;
- pSampleData += sizeleft;
- debug_printf ("got %d", sizeleft);
- }
- queueblock (pHdr_); // re-queue this block to ISR
- pHdr_ = NULL; // need to wait for a new block
- // if more samples are needed, we need a new block now
- }
- }
- debug_printf ("end nBytes=%d", nBytes);
- return true;
-}
-
-bool
-fhandler_dev_dsp::Audio_in::waitfordata ()
-{
- WAVEHDR *pHdr;
- MMRESULT rc;
-
- if (pHdr_ != NULL)
- return true;
- while (!Qisr2app_->recv (&pHdr))
- {
- if (fh->is_nonblocking ())
- {
- set_errno (EAGAIN);
- return false;
- }
- debug_printf ("100ms");
- switch (cygwait (100))
- {
- case WAIT_SIGNALED:
- if (!_my_tls.call_signal_handler ())
- {
- set_errno (EINTR);
- return false;
- }
- break;
- case WAIT_CANCELED:
- pthread::static_cancel_self ();
- /*NOTREACHED*/
- default:
- break;
- }
- }
- if (pHdr->dwFlags) /* Zero if queued following error in queueblock */
- {
- /* Errors are ignored here. They will probbaly cause a failure
- in the subsequent PrepareHeader */
- rc = waveInUnprepareHeader (dev_, pHdr, sizeof (WAVEHDR));
- debug_printf ("%u = waveInUnprepareHeader(%p)", rc, pHdr);
- }
- pHdr_ = pHdr;
- bufferIndex_ = 0;
- return true;
-}
-
-void
-fhandler_dev_dsp::Audio_in::buf_info (audio_buf_info *p,
- int rate, int bits, int channels)
-{
- p->fragstotal = MAX_BLOCKS;
- p->fragsize = blockSize (rate, bits, channels);
- if (this && dev_)
- {
- p->fragments = Qisr2app_->query ();
- if (pHdr_ != NULL)
- p->bytes = pHdr_->dwBytesRecorded - bufferIndex_
- + p->fragsize * p->fragments;
- else
- p->bytes = p->fragsize * p->fragments;
- }
- else
- {
- p->fragments = 0;
- p->bytes = 0;
- }
-}
-
-inline void
-fhandler_dev_dsp::Audio_in::callback_blockfull (WAVEHDR *pHdr)
-{
- Qisr2app_->send (pHdr);
-}
-
-static void CALLBACK
-waveIn_callback (HWAVEIN hWave, UINT msg, DWORD_PTR instance, DWORD_PTR param1,
- DWORD_PTR param2)
-{
- if (msg == WIM_DATA)
- {
- fhandler_dev_dsp::Audio_in *ptr =
- (fhandler_dev_dsp::Audio_in *) instance;
- ptr->callback_blockfull ((WAVEHDR *) param1);
- }
-}
-
-
-/* ------------------------------------------------------------------------
- /dev/dsp handler
- ------------------------------------------------------------------------ */
-fhandler_dev_dsp::fhandler_dev_dsp ():
- fhandler_base ()
-{
- audio_in_ = NULL;
- audio_out_ = NULL;
- dev ().parse (FH_OSS_DSP);
-}
-
-ssize_t __stdcall
-fhandler_dev_dsp::write (const void *ptr, size_t len)
-{
- return base ()->_write (ptr, len);
-}
-
-void __reg3
-fhandler_dev_dsp::read (void *ptr, size_t& len)
-{
- return base ()->_read (ptr, len);
-}
-
-int
-fhandler_dev_dsp::ioctl (unsigned int cmd, void *buf)
-{
- return base ()->_ioctl (cmd, buf);
-}
-
-void
-fhandler_dev_dsp::fixup_after_fork (HANDLE parent)
-{
- base ()->_fixup_after_fork (parent);
-}
-
-void
-fhandler_dev_dsp::fixup_after_exec ()
-{
- base ()->_fixup_after_exec ();
-}
-
-
-int
-fhandler_dev_dsp::open (int flags, mode_t mode)
-{
- int ret = 0, err = 0;
- UINT num_in = 0, num_out = 0;
- set_flags ((flags & ~O_TEXT) | O_BINARY);
- // Work out initial sample format & frequency, /dev/dsp defaults
- audioformat_ = AFMT_U8;
- audiofreq_ = 8000;
- audiobits_ = 8;
- audiochannels_ = 1;
- switch (flags & O_ACCMODE)
- {
- case O_RDWR:
- if ((num_in = waveInGetNumDevs ()) == 0)
- err = ENXIO;
- /* Fall through */
- case O_WRONLY:
- if ((num_out = waveOutGetNumDevs ()) == 0)
- err = ENXIO;
- break;
- case O_RDONLY:
- if ((num_in = waveInGetNumDevs ()) == 0)
- err = ENXIO;
- break;
- default:
- err = EINVAL;
- }
-
- if (err)
- set_errno (err);
- else
- ret = fhandler_base::open (flags, mode);
-
- debug_printf ("ACCMODE=%y audio_in=%d audio_out=%d, err=%d, ret=%d",
- flags & O_ACCMODE, num_in, num_out, err, ret);
- return ret;
-}
-
-#define IS_WRITE() ((get_flags() & O_ACCMODE) != O_RDONLY)
-#define IS_READ() ((get_flags() & O_ACCMODE) != O_WRONLY)
-
-ssize_t __stdcall
-fhandler_dev_dsp::_write (const void *ptr, size_t len)
-{
- debug_printf ("ptr=%p len=%ld", ptr, len);
- int len_s = len;
- const char *ptr_s = static_cast <const char *> (ptr);
-
- if (audio_out_)
- /* nothing to do */;
- else if (IS_WRITE ())
- {
- debug_printf ("Allocating");
- if (!(audio_out_ = new Audio_out (this)))
- return -1;
-
- /* check for wave file & get parameters & skip header if possible. */
-
- if (audio_out_->parsewav (ptr_s, len_s,
- audiofreq_, audiobits_, audiochannels_))
- debug_printf ("=> ptr_s=%p len_s=%d", ptr_s, len_s);
- }
- else
- {
- set_errno (EBADF); // device was opened for read?
- return -1;
- }
-
- /* Open audio device properly with callbacks.
- Private parameters were set in call to parsewav.
- This is a no-op when there are successive writes in the same process */
- if (!audio_out_->start ())
- {
- set_errno (EIO);
- return -1;
- }
-
- int written = audio_out_->write (ptr_s, len_s);
- if (written < 0)
- {
- if (len - len_s > 0)
- return len - len_s;
- return -1;
- }
- return len - len_s + written;
-}
-
-void __reg3
-fhandler_dev_dsp::_read (void *ptr, size_t& len)
-{
- debug_printf ("ptr=%p len=%ld", ptr, len);
-
- if (audio_in_)
- /* nothing to do */;
- else if (IS_READ ())
- {
- debug_printf ("Allocating");
- if (!(audio_in_ = new Audio_in (this)))
- {
- len = (size_t)-1;
- return;
- }
- audio_in_->setconvert (audioformat_);
- }
- else
- {
- len = (size_t)-1;
- set_errno (EBADF); // device was opened for write?
- return;
- }
-
- /* Open audio device properly with callbacks.
- This is a noop when there are successive reads in the same process */
- if (!audio_in_->start (audiofreq_, audiobits_, audiochannels_))
- {
- len = (size_t)-1;
- set_errno (EIO);
- return;
- }
-
- audio_in_->read ((char *)ptr, (int&)len);
-}
-
-void __reg1
-fhandler_dev_dsp::close_audio_in ()
-{
- if (audio_in_)
- {
- audio_in_->stop ();
- delete audio_in_;
- audio_in_ = NULL;
- }
-}
-
-void __reg2
-fhandler_dev_dsp::close_audio_out (bool immediately)
-{
- if (audio_out_)
- {
- audio_out_->stop (immediately);
- delete audio_out_;
- audio_out_ = NULL;
- }
-}
-
-int
-fhandler_dev_dsp::close ()
-{
- debug_printf ("audio_in=%p audio_out=%p", audio_in_, audio_out_);
- close_audio_in ();
- close_audio_out ();
- return fhandler_base::close ();
-}
-
-int
-fhandler_dev_dsp::_ioctl (unsigned int cmd, void *buf)
-{
- debug_printf ("audio_in=%p audio_out=%p", audio_in_, audio_out_);
- int *intbuf = (int *) buf;
- switch (cmd)
- {
-#define CASE(a) case a : debug_printf ("/dev/dsp: ioctl %s", #a);
-
- CASE (SNDCTL_DSP_RESET)
- close_audio_in ();
- close_audio_out (true);
- return 0;
- break;
-
- CASE (SNDCTL_DSP_GETBLKSIZE)
- /* This is valid even if audio_X is NULL */
- if (IS_WRITE ())
- {
- *intbuf = audio_out_->blockSize (audiofreq_,
- audiobits_,
- audiochannels_);
- }
- else
- { // I am very sure that IS_READ is valid
- *intbuf = audio_in_->blockSize (audiofreq_,
- audiobits_,
- audiochannels_);
- }
- return 0;
-
- CASE (SNDCTL_DSP_SETFMT)
- {
- int nBits;
- switch (*intbuf)
- {
- case AFMT_QUERY:
- *intbuf = audioformat_;
- return 0;
- break;
- case AFMT_U16_BE:
- case AFMT_U16_LE:
- case AFMT_S16_BE:
- case AFMT_S16_LE:
- nBits = 16;
- break;
- case AFMT_U8:
- case AFMT_S8:
- nBits = 8;
- break;
- default:
- nBits = 0;
- }
- if (nBits && IS_WRITE ())
- {
- close_audio_out ();
- if (audio_out_->query (audiofreq_, nBits, audiochannels_))
- {
- audiobits_ = nBits;
- audioformat_ = *intbuf;
- }
- else
- {
- *intbuf = audiobits_;
- return -1;
- }
- }
- if (nBits && IS_READ ())
- {
- close_audio_in ();
- if (audio_in_->query (audiofreq_, nBits, audiochannels_))
- {
- audiobits_ = nBits;
- audioformat_ = *intbuf;
- }
- else
- {
- *intbuf = audiobits_;
- return -1;
- }
- }
- return 0;
- }
-
- CASE (SNDCTL_DSP_SPEED)
- if (IS_WRITE ())
- {
- close_audio_out ();
- if (audio_out_->query (*intbuf, audiobits_, audiochannels_))
- audiofreq_ = *intbuf;
- else
- {
- *intbuf = audiofreq_;
- return -1;
- }
- }
- if (IS_READ ())
- {
- close_audio_in ();
- if (audio_in_->query (*intbuf, audiobits_, audiochannels_))
- audiofreq_ = *intbuf;
- else
- {
- *intbuf = audiofreq_;
- return -1;
- }
- }
- return 0;
-
- CASE (SNDCTL_DSP_STEREO)
- {
- int nChannels = *intbuf + 1;
- int res = _ioctl (SNDCTL_DSP_CHANNELS, &nChannels);
- *intbuf = nChannels - 1;
- return res;
- }
-
- CASE (SNDCTL_DSP_CHANNELS)
- {
- int nChannels = *intbuf;
-
- if (IS_WRITE ())
- {
- close_audio_out ();
- if (audio_out_->query (audiofreq_, audiobits_, nChannels))
- audiochannels_ = nChannels;
- else
- {
- *intbuf = audiochannels_;
- return -1;
- }
- }
- if (IS_READ ())
- {
- close_audio_in ();
- if (audio_in_->query (audiofreq_, audiobits_, nChannels))
- audiochannels_ = nChannels;
- else
- {
- *intbuf = audiochannels_;
- return -1;
- }
- }
- return 0;
- }
-
- CASE (SNDCTL_DSP_GETOSPACE)
- {
- if (!IS_WRITE ())
- {
- set_errno(EBADF);
- return -1;
- }
- audio_buf_info *p = (audio_buf_info *) buf;
- audio_out_->buf_info (p, audiofreq_, audiobits_, audiochannels_);
- debug_printf ("buf=%p frags=%d fragsize=%d bytes=%d",
- buf, p->fragments, p->fragsize, p->bytes);
- return 0;
- }
-
- CASE (SNDCTL_DSP_GETISPACE)
- {
- if (!IS_READ ())
- {
- set_errno(EBADF);
- return -1;
- }
- audio_buf_info *p = (audio_buf_info *) buf;
- audio_in_->buf_info (p, audiofreq_, audiobits_, audiochannels_);
- debug_printf ("buf=%p frags=%d fragsize=%d bytes=%d",
- buf, p->fragments, p->fragsize, p->bytes);
- return 0;
- }
-
- CASE (SNDCTL_DSP_SETFRAGMENT)
- // Fake!! esound & mikmod require this on non PowerPC platforms.
- //
- return 0;
-
- CASE (SNDCTL_DSP_GETFMTS)
- *intbuf = AFMT_S16_LE | AFMT_U8; // only native formats returned here
- return 0;
-
- CASE (SNDCTL_DSP_GETCAPS)
- *intbuf = DSP_CAP_BATCH | DSP_CAP_DUPLEX;
- return 0;
-
- CASE (SNDCTL_DSP_POST)
- CASE (SNDCTL_DSP_SYNC)
- // Stop audio out device
- close_audio_out ();
- // Stop audio in device
- close_audio_in ();
- return 0;
-
- default:
- return fhandler_base::ioctl (cmd, buf);
- break;
-
-#undef CASE
- }
-}
-
-void
-fhandler_dev_dsp::_fixup_after_fork (HANDLE parent)
-{ // called from new child process
- debug_printf ("audio_in=%p audio_out=%p",
- audio_in_, audio_out_);
-
- fhandler_base::fixup_after_fork (parent);
- if (audio_in_)
- audio_in_->fork_fixup (parent);
- if (audio_out_)
- audio_out_->fork_fixup (parent);
-}
-
-void
-fhandler_dev_dsp::_fixup_after_exec ()
-{
- debug_printf ("audio_in=%p audio_out=%p, close_on_exec %d",
- audio_in_, audio_out_, close_on_exec ());
- if (!close_on_exec ())
- {
- audio_in_ = NULL;
- audio_out_ = NULL;
- }
-}
diff --git a/winsup/cygwin/fhandler_fifo.cc b/winsup/cygwin/fhandler_fifo.cc
deleted file mode 100644
index 46a0aba58..000000000
--- a/winsup/cygwin/fhandler_fifo.cc
+++ /dev/null
@@ -1,375 +0,0 @@
-/* fhandler_fifo.cc - See fhandler.h for a description of the fhandler classes.
-
- Copyright 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
- Red Hat, Inc.
-
- This file is part of Cygwin.
-
- This software is a copyrighted work licensed under the terms of the
- Cygwin license. Please consult the file "CYGWIN_LICENSE" for
- details. */
-
-#include "winsup.h"
-#include "miscfuncs.h"
-
-#include "cygerrno.h"
-#include "security.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "sigproc.h"
-#include "cygtls.h"
-#include "shared_info.h"
-#include "ntdll.h"
-#include "cygwait.h"
-
-fhandler_fifo::fhandler_fifo ():
- fhandler_base_overlapped (),
- read_ready (NULL), write_ready (NULL)
-{
- max_atomic_write = DEFAULT_PIPEBUFSIZE;
- need_fork_fixup (true);
-}
-
-#define fnevent(w) fifo_name (npbuf, w "-event")
-#define fnpipe() fifo_name (npbuf, "fifo")
-#define create_pipe(r, w) \
- fhandler_pipe::create (sa_buf, (r), (w), 0, fnpipe (), open_mode)
-
-char *
-fhandler_fifo::fifo_name (char *buf, const char *what)
-{
- /* Generate a semi-unique name to associate with this fifo. */
- __small_sprintf (buf, "%s.%08x.%016X", what, get_dev (),
- get_ino ());
- return buf;
-}
-
-inline PSECURITY_ATTRIBUTES
-sec_user_cloexec (bool cloexec, PSECURITY_ATTRIBUTES sa, PSID sid)
-{
- return cloexec ? sec_user_nih (sa, sid) : sec_user (sa, sid);
-}
-
-bool inline
-fhandler_fifo::arm (HANDLE h)
-{
-#ifdef DEBUGGING
- const char *what;
- if (h == read_ready)
- what = "reader";
- else if (h == write_ready)
- what = "writer";
- else
- what = "overlapped event";
- debug_only_printf ("arming %s", what);
-#endif
-
- bool res = SetEvent (h);
- if (!res)
-#ifdef DEBUGGING
- debug_printf ("SetEvent for %s failed, %E", what);
-#else
- debug_printf ("SetEvent failed, %E");
-#endif
- return res;
-}
-
-int
-fhandler_fifo::open (int flags, mode_t)
-{
- enum
- {
- success,
- error_errno_set,
- error_set_errno
- } res;
- bool reader, writer, duplexer;
- DWORD open_mode = FILE_FLAG_OVERLAPPED;
-
- /* Determine what we're doing with this fhandler: reading, writing, both */
- switch (flags & O_ACCMODE)
- {
- case O_RDONLY:
- reader = true;
- writer = false;
- duplexer = false;
- break;
- case O_WRONLY:
- writer = true;
- reader = false;
- duplexer = false;
- break;
- case O_RDWR:
- open_mode |= PIPE_ACCESS_DUPLEX;
- reader = true;
- writer = false;
- duplexer = true;
- break;
- default:
- set_errno (EINVAL);
- res = error_errno_set;
- goto out;
- }
-
- debug_only_printf ("reader %d, writer %d, duplexer %d", reader, writer, duplexer);
- set_flags (flags);
- char char_sa_buf[1024];
- LPSECURITY_ATTRIBUTES sa_buf;
- sa_buf = sec_user_cloexec (flags & O_CLOEXEC, (PSECURITY_ATTRIBUTES) char_sa_buf,
- cygheap->user.sid());
- char npbuf[MAX_PATH];
-
- /* Create control events for this named pipe */
- if (!(read_ready = CreateEvent (sa_buf, duplexer, false, fnevent ("r"))))
- {
- debug_printf ("CreatEvent for %s failed, %E", npbuf);
- res = error_set_errno;
- goto out;
- }
- if (!(write_ready = CreateEvent (sa_buf, false, false, fnevent ("w"))))
- {
- debug_printf ("CreatEvent for %s failed, %E", npbuf);
- res = error_set_errno;
- goto out;
- }
-
- /* If we're reading, create the pipe, signal that we're ready and wait for
- a writer.
- FIXME: Probably need to special case O_RDWR case. */
- if (!reader)
- /* We are not a reader */;
- else if (create_pipe (&get_io_handle (), NULL))
- {
- debug_printf ("create of reader failed");
- res = error_set_errno;
- goto out;
- }
- else if (!arm (read_ready))
- {
- res = error_set_errno;
- goto out;
- }
- else if (!duplexer && !wait (write_ready))
- {
- res = error_errno_set;
- goto out;
- }
-
- /* If we're writing, it's a little tricky since it is possible that
- we're attempting to open the other end of a pipe which is already
- connected. In that case, we detect ERROR_PIPE_BUSY, reset the
- read_ready event and wait for the reader to allow us to connect
- by signalling read_ready.
-
- Once the pipe has been set up, we signal write_ready. */
- if (writer)
- {
- int err;
- while (1)
- if (!wait (read_ready))
- {
- res = error_errno_set;
- goto out;
- }
- else if ((err = create_pipe (NULL, &get_io_handle ())) == 0)
- break;
- else if (err == ERROR_PIPE_BUSY)
- {
- debug_only_printf ("pipe busy");
- ResetEvent (read_ready);
- }
- else
- {
- debug_printf ("create of writer failed");
- res = error_set_errno;
- goto out;
- }
- if (!arm (write_ready))
- {
- res = error_set_errno;
- goto out;
- }
- }
-
- /* If setup_overlapped() succeeds (and why wouldn't it?) we are all set. */
- if (setup_overlapped () == 0)
- res = success;
- else
- {
- debug_printf ("setup_overlapped failed, %E");
- res = error_set_errno;
- }
-
-out:
- if (res == error_set_errno)
- __seterrno ();
- if (res != success)
- {
- if (read_ready)
- {
- CloseHandle (read_ready);
- read_ready = NULL;
- }
- if (write_ready)
- {
- CloseHandle (write_ready);
- write_ready = NULL;
- }
- if (get_io_handle ())
- CloseHandle (get_io_handle ());
- }
- debug_printf ("res %d", res);
- return res == success;
-}
-
-bool
-fhandler_fifo::wait (HANDLE h)
-{
-#ifdef DEBUGGING
- const char *what;
- if (h == read_ready)
- what = "reader";
- else if (h == write_ready)
- what = "writer";
- else
- what = "overlapped event";
-#endif
- /* Set the wait to zero for non-blocking I/O-related events. */
- DWORD wait = ((h == read_ready || h == write_ready)
- && get_flags () & O_NONBLOCK) ? 0 : INFINITE;
-
- debug_only_printf ("waiting for %s", what);
- /* Wait for the event. Set errno, as appropriate if something goes wrong. */
- switch (cygwait (h, wait))
- {
- case WAIT_OBJECT_0:
- debug_only_printf ("successfully waited for %s", what);
- return true;
- case WAIT_SIGNALED:
- debug_only_printf ("interrupted by signal while waiting for %s", what);
- set_errno (EINTR);
- return false;
- case WAIT_CANCELED:
- debug_only_printf ("cancellable interruption while waiting for %s", what);
- pthread::static_cancel_self (); /* never returns */
- break;
- case WAIT_TIMEOUT:
- if (h == write_ready)
- {
- debug_only_printf ("wait timed out waiting for write but will still open reader since non-blocking mode");
- return true;
- }
- else
- {
- set_errno (ENXIO);
- return false;
- }
- break;
- default:
- debug_only_printf ("unknown error while waiting for %s", what);
- __seterrno ();
- return false;
- }
-}
-
-void __reg3
-fhandler_fifo::raw_read (void *in_ptr, size_t& len)
-{
- size_t orig_len = len;
- for (int i = 0; i < 2; i++)
- {
- fhandler_base_overlapped::raw_read (in_ptr, len);
- if (len || i || WaitForSingleObject (read_ready, 0) != WAIT_OBJECT_0)
- break;
- /* If we got here, then fhandler_base_overlapped::raw_read returned 0,
- indicating "EOF" and something has set read_ready to zero. That means
- we should have a client waiting to connect.
- FIXME: If the client CTRL-C's the open during this time then this
- could hang indefinitely. Maybe implement a timeout? */
- if (!DisconnectNamedPipe (get_io_handle ()))
- {
- debug_printf ("DisconnectNamedPipe failed, %E");
- goto errno_out;
- }
- else if (!ConnectNamedPipe (get_io_handle (), get_overlapped ())
- && GetLastError () != ERROR_IO_PENDING)
- {
- debug_printf ("ConnectNamedPipe failed, %E");
- goto errno_out;
- }
- else if (!arm (read_ready))
- goto errno_out;
- else if (!wait (get_overlapped_buffer ()->hEvent))
- goto errout; /* If wait() fails, errno is set so no need to set it */
- len = orig_len; /* Reset since raw_read above set it to zero. */
- }
- return;
-
-errno_out:
- __seterrno ();
-errout:
- len = -1;
-}
-
-int __reg2
-fhandler_fifo::fstatvfs (struct statvfs *sfs)
-{
- fhandler_disk_file fh (pc);
- fh.get_device () = FH_FS;
- return fh.fstatvfs (sfs);
-}
-
-int
-fhandler_fifo::close ()
-{
- CloseHandle (read_ready);
- CloseHandle (write_ready);
- return fhandler_base::close ();
-}
-
-int
-fhandler_fifo::dup (fhandler_base *child, int flags)
-{
- if (fhandler_base_overlapped::dup (child, flags))
- {
- __seterrno ();
- return -1;
- }
- fhandler_fifo *fhf = (fhandler_fifo *) child;
- if (!DuplicateHandle (GetCurrentProcess (), read_ready,
- GetCurrentProcess (), &fhf->read_ready,
- 0, true, DUPLICATE_SAME_ACCESS))
- {
- fhf->close ();
- __seterrno ();
- return -1;
- }
- if (!DuplicateHandle (GetCurrentProcess (), write_ready,
- GetCurrentProcess (), &fhf->write_ready,
- 0, true, DUPLICATE_SAME_ACCESS))
- {
- CloseHandle (fhf->read_ready);
- fhf->close ();
- __seterrno ();
- return -1;
- }
- return 0;
-}
-
-void
-fhandler_fifo::fixup_after_fork (HANDLE parent)
-{
- fhandler_base_overlapped::fixup_after_fork (parent);
- fork_fixup (parent, read_ready, "read_ready");
- fork_fixup (parent, write_ready, "write_ready");
-}
-
-void
-fhandler_fifo::set_close_on_exec (bool val)
-{
- fhandler_base::set_close_on_exec (val);
- set_no_inheritance (read_ready, val);
- set_no_inheritance (write_ready, val);
-}
diff --git a/winsup/cygwin/fhandler_floppy.cc b/winsup/cygwin/fhandler_floppy.cc
deleted file mode 100644
index 8cf19bf82..000000000
--- a/winsup/cygwin/fhandler_floppy.cc
+++ /dev/null
@@ -1,760 +0,0 @@
-/* fhandler_floppy.cc. See fhandler.h for a description of the
- fhandler classes.
-
- Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
- 2011, 2012, 2013, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include <alloca.h>
-#include <unistd.h>
-#include <sys/param.h>
-#include <winioctl.h>
-#include <cygwin/rdevio.h>
-#include <cygwin/hdreg.h>
-#include <cygwin/fs.h>
-#include "cygerrno.h"
-#include "security.h"
-#include "path.h"
-#include "fhandler.h"
-#include "ntdll.h"
-
-#define IS_EOM(err) ((err) == ERROR_INVALID_PARAMETER \
- || (err) == ERROR_SEEK \
- || (err) == ERROR_SECTOR_NOT_FOUND)
-
-#define bytes_per_sector devbufalign
-
-/**********************************************************************/
-/* fhandler_dev_floppy */
-
-fhandler_dev_floppy::fhandler_dev_floppy ()
- : fhandler_dev_raw (), status ()
-{
-}
-
-int
-fhandler_dev_floppy::get_drive_info (struct hd_geometry *geo)
-{
- char dbuf[256];
- char pbuf[256];
-
- DISK_GEOMETRY_EX *dix = NULL;
- DISK_GEOMETRY *di = NULL;
- PARTITION_INFORMATION_EX *pix = NULL;
- PARTITION_INFORMATION *pi = NULL;
- DWORD bytes_read = 0;
-
- /* Always try using the new EX ioctls first (>= XP). If not available,
- fall back to trying the old non-EX ioctls.
- Unfortunately the EX ioctls are not implemented in the floppy driver. */
- if (get_major () != DEV_FLOPPY_MAJOR)
- {
- if (!DeviceIoControl (get_handle (),
- IOCTL_DISK_GET_DRIVE_GEOMETRY_EX, NULL, 0,
- dbuf, 256, &bytes_read, NULL))
- __seterrno ();
- else
- {
- dix = (DISK_GEOMETRY_EX *) dbuf;
- di = &dix->Geometry;
- }
- }
- if (!di)
- {
- if (!DeviceIoControl (get_handle (),
- IOCTL_DISK_GET_DRIVE_GEOMETRY, NULL, 0,
- dbuf, 256, &bytes_read, NULL))
- {
- __seterrno ();
- return -1;
- }
- di = (DISK_GEOMETRY *) dbuf;
- }
- if (dix) /* Don't try IOCTL_DISK_GET_PARTITION_INFO_EX if
- IOCTL_DISK_GET_DRIVE_GEOMETRY_EX didn't work.
- Probably a floppy.*/
- {
- if (!DeviceIoControl (get_handle (),
- IOCTL_DISK_GET_PARTITION_INFO_EX, NULL, 0,
- pbuf, 256, &bytes_read, NULL))
- __seterrno ();
- else
- pix = (PARTITION_INFORMATION_EX *) pbuf;
- }
- if (!pix && get_major () != DEV_FLOPPY_MAJOR)
- {
- /* It's unlikely that this code path will be used at all. Either the
- _EX call already worked, or it's a floppy. But it doesn't hurt to
- keep the code in. */
- if (!DeviceIoControl (get_handle (),
- IOCTL_DISK_GET_PARTITION_INFO, NULL, 0,
- pbuf, 256, &bytes_read, NULL))
- __seterrno ();
- else
- pi = (PARTITION_INFORMATION *) pbuf;
- }
- debug_printf ("disk geometry: (%D cyl)*(%u trk)*(%u sec)*(%u bps)",
- di->Cylinders.QuadPart,
- di->TracksPerCylinder,
- di->SectorsPerTrack,
- di->BytesPerSector);
- bytes_per_sector = di->BytesPerSector;
- if (pix)
- {
- debug_printf ("partition info: offset %D length %D",
- pix->StartingOffset.QuadPart,
- pix->PartitionLength.QuadPart);
- drive_size = pix->PartitionLength.QuadPart;
- }
- else if (pi)
- {
- debug_printf ("partition info: offset %D length %D",
- pi->StartingOffset.QuadPart,
- pi->PartitionLength.QuadPart);
- drive_size = pi->PartitionLength.QuadPart;
- }
- else /* Floppy drive. */
- drive_size = di->Cylinders.QuadPart * di->TracksPerCylinder
- * di->SectorsPerTrack * di->BytesPerSector;
- if (geo)
- {
- geo->heads = di->TracksPerCylinder;
- geo->sectors = di->SectorsPerTrack;
- geo->cylinders = di->Cylinders.LowPart;
- if (pix)
- geo->start = pix->StartingOffset.QuadPart >> 9ULL;
- else if (pi)
- geo->start = pi->StartingOffset.QuadPart >> 9ULL;
- else
- geo->start = 0;
- }
- debug_printf ("drive size: %D", drive_size);
-
- return 0;
-}
-
-/* Wrapper functions for ReadFile and WriteFile to simplify error handling. */
-BOOL
-fhandler_dev_floppy::read_file (void *buf, DWORD to_read, DWORD *read, int *err)
-{
- BOOL ret;
-
- *err = 0;
- if (!(ret = ReadFile (get_handle (), buf, to_read, read, 0)))
- *err = GetLastError ();
- syscall_printf ("%d (err %d) = ReadFile (%p, %p, to_read %u, read %u, 0)",
- ret, *err, get_handle (), buf, to_read, *read);
- return ret;
-}
-
-/* See comment in write_file below. */
-BOOL
-fhandler_dev_floppy::lock_partition (DWORD to_write)
-{
- DWORD bytes_read;
-
- /* The simple case. We have only a single partition open anyway.
- Try to lock the partition so that a subsequent write succeeds.
- If there's some file handle open on one of the affected partitions,
- this fails, but that's how it works on Vista and later... */
- if (get_minor () % 16 != 0)
- {
- if (!DeviceIoControl (get_handle (), FSCTL_LOCK_VOLUME,
- NULL, 0, NULL, 0, &bytes_read, NULL))
- {
- debug_printf ("DeviceIoControl (FSCTL_LOCK_VOLUME) failed, %E");
- return FALSE;
- }
- return TRUE;
- }
-
- /* The tricky case. We're writing to the entire disk. What this code
- basically does is to find out if the current write operation affects
- one or more partitions on the disk. If so, it tries to lock all these
- partitions and stores the handles for a subsequent close(). */
- NTSTATUS status;
- IO_STATUS_BLOCK io;
- FILE_POSITION_INFORMATION fpi;
- /* Allocate space for 4 times the maximum partition count we can handle.
- The reason is that for *every* single logical drive in an extended
- partition on an MBR drive, 3 filler entries with partition number set
- to 0 are added into the partition table returned by
- IOCTL_DISK_GET_DRIVE_LAYOUT_EX. The first of them reproduces the data
- of the next partition entry, if any, except for the partiton number.
- Then two entries with everything set to 0 follow. Well, the
- documentation states that for MBR drives the number of partition entries
- in the PARTITION_INFORMATION_EX array is always a multiple of 4, but,
- nevertheless, how crappy is that layout? */
- const DWORD size = sizeof (DRIVE_LAYOUT_INFORMATION_EX)
- + 4 * MAX_PARTITIONS * sizeof (PARTITION_INFORMATION_EX);
- PDRIVE_LAYOUT_INFORMATION_EX pdlix = (PDRIVE_LAYOUT_INFORMATION_EX)
- alloca (size);
- BOOL found = FALSE;
-
- /* Fetch current file pointer position on disk. */
- status = NtQueryInformationFile (get_handle (), &io, &fpi, sizeof fpi,
- FilePositionInformation);
- if (!NT_SUCCESS (status))
- {
- debug_printf ("NtQueryInformationFile(FilePositionInformation): %y",
- status);
- return FALSE;
- }
- /* Fetch drive layout to get start and end positions of partitions on disk. */
- if (!DeviceIoControl (get_handle (), IOCTL_DISK_GET_DRIVE_LAYOUT_EX, NULL, 0,
- pdlix, size, &bytes_read, NULL))
- {
- debug_printf ("DeviceIoControl(IOCTL_DISK_GET_DRIVE_LAYOUT_EX): %E");
- return FALSE;
- }
- /* Scan through partition info to find the partition(s) into which we're
- currently trying to write. */
- PARTITION_INFORMATION_EX *ppie = pdlix->PartitionEntry;
- for (DWORD i = 0; i < pdlix->PartitionCount; ++i, ++ppie)
- {
- /* A partition number of 0 denotes an extended partition or one of the
- aforementioned filler entries. Just skip. */
- if (ppie->PartitionNumber == 0)
- continue;
- /* Check if our writing range affects this partition. */
- if (fpi.CurrentByteOffset.QuadPart < ppie->StartingOffset.QuadPart
- + ppie->PartitionLength.QuadPart
- && ppie->StartingOffset.QuadPart < fpi.CurrentByteOffset.QuadPart
- + to_write)
- {
- /* Yes. Now check if we can handle it. We can only handle
- up to MAX_PARTITIONS partitions. The partition numbering is
- one-based, so we decrement the partition number by 1 when using
- as index into the partition array. */
- DWORD &part_no = ppie->PartitionNumber;
- if (part_no >= MAX_PARTITIONS)
- return FALSE;
- found = TRUE;
- debug_printf ("%u %D->%D : %D->%D", part_no,
- ppie->StartingOffset.QuadPart,
- ppie->StartingOffset.QuadPart
- + ppie->PartitionLength.QuadPart,
- fpi.CurrentByteOffset.QuadPart,
- fpi.CurrentByteOffset.QuadPart + to_write);
- /* Do we already have partitions? If not, create it. */
- if (!partitions)
- {
- partitions = (part_t *) ccalloc_abort (HEAP_FHANDLER, 1,
- sizeof (part_t));
- partitions->refcnt = 1;
- }
- /* Next, check if the partition is already open. If so, skip it. */
- if (partitions->hdl[part_no - 1])
- continue;
- /* Now open the partition and lock it. */
- WCHAR part[MAX_PATH], *p;
- NTSTATUS status;
- UNICODE_STRING upart;
- OBJECT_ATTRIBUTES attr;
- IO_STATUS_BLOCK io;
-
- sys_mbstowcs (part, MAX_PATH, get_win32_name ());
- p = wcschr (part, L'\0') - 1;
- __small_swprintf (p, L"%d", part_no);
- RtlInitUnicodeString (&upart, part);
- InitializeObjectAttributes (&attr, &upart,
- OBJ_CASE_INSENSITIVE
- | ((get_flags () & O_CLOEXEC)
- ? 0 : OBJ_INHERIT),
- NULL, NULL);
- status = NtOpenFile (&partitions->hdl[part_no - 1],
- GENERIC_READ | GENERIC_WRITE, &attr,
- &io, FILE_SHARE_READ | FILE_SHARE_WRITE, 0);
- if (!NT_SUCCESS (status))
- {
- debug_printf ("NtCreateFile(%W): %y", part, status);
- return FALSE;
- }
- if (!DeviceIoControl (partitions->hdl[part_no - 1], FSCTL_LOCK_VOLUME,
- NULL, 0, NULL, 0, &bytes_read, NULL))
- {
- debug_printf ("DeviceIoControl (%W, FSCTL_LOCK_VOLUME) "
- "failed, %E", part);
- return FALSE;
- }
- }
- }
- /* If we didn't find a single matching partition, the "Access denied"
- had another reason, so return FALSE in that case. */
- return found;
-}
-
-BOOL
-fhandler_dev_floppy::write_file (const void *buf, DWORD to_write,
- DWORD *written, int *err)
-{
- BOOL ret;
-
- *err = 0;
- if (!(ret = WriteFile (get_handle (), buf, to_write, written, 0)))
- *err = GetLastError ();
- /* When writing to a disk or partition on Vista, an "Access denied" error
- is potentially a result of the raw disk write restriction. See
- http://support.microsoft.com/kb/942448 for details. What we have to
- do here is to lock the partition and retry. The previous solution
- locked one or all partitions immediately in open. Which is overly
- wasteful, given that the user might only want to change, say, the boot
- sector. */
- if (*err == ERROR_ACCESS_DENIED
- && wincap.has_restricted_raw_disk_access ()
- && get_major () != DEV_FLOPPY_MAJOR
- && get_major () != DEV_CDROM_MAJOR
- && (get_flags () & O_ACCMODE) != O_RDONLY
- && lock_partition (to_write))
- {
- *err = 0;
- if (!(ret = WriteFile (get_handle (), buf, to_write, written, 0)))
- *err = GetLastError ();
- }
- syscall_printf ("%d (err %d) = WriteFile (%p, %p, write %u, written %u, 0)",
- ret, *err, get_handle (), buf, to_write, *written);
- return ret;
-}
-
-int
-fhandler_dev_floppy::open (int flags, mode_t)
-{
- int ret = fhandler_dev_raw::open (flags);
-
- if (ret)
- {
- DWORD bytes_read;
-
- if (get_drive_info (NULL))
- {
- close ();
- return 0;
- }
- if (!(flags & O_DIRECT))
- {
- /* Create sector-aligned buffer. As default buffer size, we're using
- some big, sector-aligned value. Since direct blockdev IO is
- usually non-buffered and non-cached, the performance without
- buffering is worse than access to a file system on same device.
- Whoever uses O_DIRECT has my condolences. */
- devbufsiz = MAX (16 * bytes_per_sector, 65536);
- devbufalloc = new char [devbufsiz + devbufalign];
- devbuf = (char *) roundup2 ((uintptr_t) devbufalloc,
- (uintptr_t) devbufalign);
- }
-
- /* If we're not trying to access a floppy disk, make sure we're actually
- allowed to read *all* of the device or volume. This is actually
- documented in the MSDN CreateFile man page. */
- if (get_major () != DEV_FLOPPY_MAJOR
- && !DeviceIoControl (get_handle (), FSCTL_ALLOW_EXTENDED_DASD_IO,
- NULL, 0, NULL, 0, &bytes_read, NULL))
- debug_printf ("DeviceIoControl (FSCTL_ALLOW_EXTENDED_DASD_IO) "
- "failed, %E");
- }
-
- return ret;
-}
-
-int
-fhandler_dev_floppy::close ()
-{
- int ret = fhandler_dev_raw::close ();
-
- if (partitions && InterlockedDecrement (&partitions->refcnt) == 0)
- {
- for (int i = 0; i < MAX_PARTITIONS; ++i)
- if (partitions->hdl[i])
- NtClose (partitions->hdl[i]);
- cfree (partitions);
- }
- return ret;
-}
-
-int
-fhandler_dev_floppy::dup (fhandler_base *child, int flags)
-{
- int ret = fhandler_dev_raw::dup (child, flags);
-
- if (!ret && partitions)
- InterlockedIncrement (&partitions->refcnt);
- return ret;
-}
-
-inline off_t
-fhandler_dev_floppy::get_current_position ()
-{
- LARGE_INTEGER off = { QuadPart: 0LL };
- off.LowPart = SetFilePointer (get_handle (), 0, &off.HighPart, FILE_CURRENT);
- return off.QuadPart;
-}
-
-void __reg3
-fhandler_dev_floppy::raw_read (void *ptr, size_t& ulen)
-{
- DWORD bytes_read = 0;
- DWORD read2;
- DWORD bytes_to_read;
- int ret;
- size_t len = ulen;
- char *tgt;
- char *p = (char *) ptr;
-
- /* Checking a previous end of media */
- if (eom_detected () && !lastblk_to_read ())
- {
- set_errno (ENOSPC);
- goto err;
- }
-
- if (devbuf)
- {
- while (len > 0)
- {
- if (devbufstart < devbufend)
- {
- bytes_to_read = MIN (len, devbufend - devbufstart);
- debug_printf ("read %u bytes from buffer (rest %u)",
- bytes_to_read,
- devbufend - devbufstart - bytes_to_read);
- memcpy (p, devbuf + devbufstart, bytes_to_read);
- len -= bytes_to_read;
- p += bytes_to_read;
- bytes_read += bytes_to_read;
- devbufstart += bytes_to_read;
-
- if (lastblk_to_read ())
- {
- lastblk_to_read (false);
- break;
- }
- }
- if (len > 0)
- {
- if (len >= devbufsiz)
- {
- bytes_to_read = (len / bytes_per_sector) * bytes_per_sector;
- tgt = p;
- }
- else
- {
- tgt = devbuf;
- bytes_to_read = devbufsiz;
- }
- off_t current_position = get_current_position ();
- if (current_position + bytes_to_read >= drive_size)
- bytes_to_read = drive_size - current_position;
- if (!bytes_to_read)
- break;
-
- debug_printf ("read %u bytes from pos %U %s", bytes_to_read,
- current_position,
- len < devbufsiz ? "into buffer" : "directly");
- if (!read_file (tgt, bytes_to_read, &read2, &ret))
- {
- if (!IS_EOM (ret))
- {
- __seterrno ();
- goto err;
- }
-
- eom_detected (true);
-
- if (!read2)
- {
- if (!bytes_read)
- {
- debug_printf ("return -1, set errno to ENOSPC");
- set_errno (ENOSPC);
- goto err;
- }
- break;
- }
- lastblk_to_read (true);
- }
- if (!read2)
- break;
- if (tgt == devbuf)
- {
- devbufstart = 0;
- devbufend = read2;
- }
- else
- {
- len -= read2;
- p += read2;
- bytes_read += read2;
- }
- }
- }
- }
- else
- {
- off_t current_position = get_current_position ();
- bytes_to_read = len;
- if (current_position + bytes_to_read >= drive_size)
- bytes_to_read = drive_size - current_position;
- debug_printf ("read %u bytes from pos %U directly", bytes_to_read,
- current_position);
- if (bytes_to_read && !read_file (p, bytes_to_read, &bytes_read, &ret))
- {
- if (!IS_EOM (ret))
- {
- __seterrno ();
- goto err;
- }
- if (bytes_read)
- eom_detected (true);
- else
- {
- debug_printf ("return -1, set errno to ENOSPC");
- set_errno (ENOSPC);
- goto err;
- }
- }
- }
-
- ulen = (size_t) bytes_read;
- return;
-
-err:
- ulen = (size_t) -1;
-}
-
-ssize_t __reg3
-fhandler_dev_floppy::raw_write (const void *ptr, size_t len)
-{
- DWORD bytes_written = 0;
- char *p = (char *) ptr;
- int ret;
-
- /* Checking a previous end of media */
- if (eom_detected ())
- {
- set_errno (ENOSPC);
- return -1;
- }
-
- if (!len)
- return 0;
-
- if (devbuf)
- {
- DWORD cplen, written;
-
- /* First check if we have an active read buffer. If so, try to fit in
- the start of the input buffer and write out the entire result.
- This also covers the situation after lseek since lseek fills the read
- buffer in case we seek to an address which is not sector aligned. */
- if (devbufend && devbufstart < devbufend)
- {
- off_t current_pos = get_current_position ();
- cplen = MIN (len, devbufend - devbufstart);
- memcpy (devbuf + devbufstart, p, cplen);
- LARGE_INTEGER off = { QuadPart:current_pos - devbufend };
- if (!SetFilePointerEx (get_handle (), off, NULL, FILE_BEGIN))
- {
- devbufstart = devbufend = 0;
- __seterrno ();
- return -1;
- }
- if (!write_file (devbuf, devbufend, &written, &ret))
- {
- devbufstart = devbufend = 0;
- goto err;
- }
- /* Align pointers, lengths, etc. */
- cplen = MIN (cplen, written);
- devbufstart += cplen;
- p += cplen;
- len -= cplen;
- bytes_written += cplen;
- if (len)
- devbufstart = devbufend = 0;
- }
- /* As long as there's still something left in the input buffer ... */
- while (len)
- {
- /* Compute the length to write. The problem is that the underlying
- driver may require sector aligned read/write. So we copy the data
- over to devbuf, which is guaranteed to be sector aligned. */
- cplen = MIN (len, devbufsiz);
- if (cplen >= bytes_per_sector)
- /* If the remaining len is >= sector size, write out the maximum
- possible multiple of the sector size which fits into devbuf. */
- cplen = rounddown (cplen, bytes_per_sector);
- else
- {
- /* If len < sector size, read in the next sector, seek back,
- and just copy the new data over the old one before writing. */
- LARGE_INTEGER off = { QuadPart:get_current_position () };
- if (!read_file (devbuf, bytes_per_sector, &written, &ret))
- goto err;
- if (!SetFilePointerEx (get_handle (), off, NULL, FILE_BEGIN))
- {
- __seterrno ();
- return -1;
- }
- }
- memcpy (devbuf, p, cplen);
- if (!write_file (devbuf, MAX (cplen, bytes_per_sector), &written,
- &ret))
- {
- bytes_written += MIN (cplen, written);
- goto err;
- }
- cplen = MIN (cplen, written);
- p += cplen;
- len -= cplen;
- bytes_written += cplen;
- }
- return bytes_written;
- }
-
- /* In O_DIRECT case, just write. */
- if (write_file (p, len, &bytes_written, &ret))
- return bytes_written;
-
-err:
- if (IS_EOM (ret))
- {
- eom_detected (true);
- if (!bytes_written)
- set_errno (ENOSPC);
- }
- else if (!bytes_written)
- __seterrno ();
- return bytes_written ?: -1;
-}
-
-off_t
-fhandler_dev_floppy::lseek (off_t offset, int whence)
-{
- char buf[bytes_per_sector];
- off_t current_pos = (off_t) -1;
- LARGE_INTEGER sector_aligned_offset;
- size_t bytes_left;
-
- if (whence == SEEK_END)
- {
- offset += drive_size;
- whence = SEEK_SET;
- }
- else if (whence == SEEK_CUR)
- {
- current_pos = get_current_position ();
- off_t exact_pos = current_pos - (devbufend - devbufstart);
- /* Shortcut when used to get current position. */
- if (offset == 0)
- return exact_pos;
- offset += exact_pos;
- whence = SEEK_SET;
- }
-
- if (whence != SEEK_SET || offset < 0 || offset > drive_size)
- {
- set_errno (EINVAL);
- return -1;
- }
-
- /* If new position is in buffered range, adjust buffer and return */
- if (devbufstart < devbufend)
- {
- if (current_pos == (off_t) -1)
- current_pos = get_current_position ();
- if (current_pos - devbufend <= offset && offset <= current_pos)
- {
- devbufstart = devbufend - (current_pos - offset);
- return offset;
- }
- }
-
- sector_aligned_offset.QuadPart = rounddown (offset, bytes_per_sector);
- bytes_left = offset - sector_aligned_offset.QuadPart;
-
- /* Invalidate buffer. */
- devbufstart = devbufend = 0;
-
- if (!SetFilePointerEx (get_handle (), sector_aligned_offset, NULL,
- FILE_BEGIN))
- {
- __seterrno ();
- return -1;
- }
-
- eom_detected (false);
-
- if (bytes_left)
- {
- raw_read (buf, bytes_left);
- if (bytes_left == (size_t) -1)
- return -1;
- }
-
- return sector_aligned_offset.QuadPart + bytes_left;
-}
-
-int
-fhandler_dev_floppy::ioctl (unsigned int cmd, void *buf)
-{
- int ret = 0;
- DWORD bytes_read;
-
- switch (cmd)
- {
- case HDIO_GETGEO:
- debug_printf ("HDIO_GETGEO");
- ret = get_drive_info ((struct hd_geometry *) buf);
- break;
- case BLKGETSIZE:
- case BLKGETSIZE64:
- debug_printf ("BLKGETSIZE");
- if (cmd == BLKGETSIZE)
- *(long *)buf = drive_size >> 9UL;
- else
- *(off_t *)buf = drive_size;
- break;
- case BLKRRPART:
- debug_printf ("BLKRRPART");
- if (!DeviceIoControl (get_handle (), IOCTL_DISK_UPDATE_PROPERTIES,
- NULL, 0, NULL, 0, &bytes_read, NULL))
- {
- __seterrno ();
- ret = -1;
- }
- else
- get_drive_info (NULL);
- break;
- case BLKSSZGET:
- debug_printf ("BLKSSZGET");
- *(int *)buf = (int) bytes_per_sector;
- break;
- case BLKIOMIN:
- debug_printf ("BLKIOMIN");
- *(int *)buf = (int) bytes_per_sector;
- break;
- case BLKIOOPT:
- debug_printf ("BLKIOOPT");
- *(int *)buf = (int) bytes_per_sector;
- break;
- case BLKPBSZGET:
- debug_printf ("BLKPBSZGET");
- *(int *)buf = (int) bytes_per_sector;
- break;
- case BLKALIGNOFF:
- debug_printf ("BLKALIGNOFF");
- *(int *)buf = 0;
- break;
- default:
- ret = fhandler_dev_raw::ioctl (cmd, buf);
- break;
- }
- return ret;
-}
-
diff --git a/winsup/cygwin/fhandler_mailslot.cc b/winsup/cygwin/fhandler_mailslot.cc
deleted file mode 100644
index 217e3b7ee..000000000
--- a/winsup/cygwin/fhandler_mailslot.cc
+++ /dev/null
@@ -1,192 +0,0 @@
-/* fhandler_mailslot.cc. See fhandler.h for a description of the fhandler classes.
-
- Copyright 2005, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Red Hat, Inc.
-
- This file is part of Cygwin.
-
- This software is a copyrighted work licensed under the terms of the
- Cygwin license. Please consult the file "CYGWIN_LICENSE" for
- details. */
-
-#include "winsup.h"
-
-#include "cygerrno.h"
-#include "security.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "ntdll.h"
-#include "shared_info.h"
-#include "tls_pbuf.h"
-
-/**********************************************************************/
-/* fhandler_mailslot */
-
-fhandler_mailslot::fhandler_mailslot ()
- : fhandler_base_overlapped ()
-{
-}
-
-int __reg2
-fhandler_mailslot::fstat (struct stat *buf)
-{
- debug_printf ("here");
-
- fhandler_base_overlapped::fstat (buf);
- if (is_auto_device ())
- {
- buf->st_mode = S_IFCHR | S_IRUSR | S_IWUSR;
- buf->st_uid = geteuid32 ();
- buf->st_gid = getegid32 ();
- buf->st_nlink = 1;
- buf->st_blksize = PREFERRED_IO_BLKSIZE;
- time_as_timestruc_t (&buf->st_ctim);
- buf->st_atim = buf->st_mtim = buf->st_birthtim = buf->st_ctim;
- }
- return 0;
-}
-
-POBJECT_ATTRIBUTES
-fhandler_mailslot::get_object_attr (OBJECT_ATTRIBUTES &attr,
- PUNICODE_STRING path,
- int flags)
-{
-
- RtlCopyUnicodeString (path, pc.get_nt_native_path ());
- RtlAppendUnicodeStringToString (path, &cygheap->installation_key);
- InitializeObjectAttributes (&attr, path,
- OBJ_CASE_INSENSITIVE
- | (flags & O_CLOEXEC ? 0 : OBJ_INHERIT),
- NULL, NULL);
- return &attr;
-}
-
-int
-fhandler_mailslot::open (int flags, mode_t mode)
-{
- int res = 0;
- NTSTATUS status;
- IO_STATUS_BLOCK io;
- OBJECT_ATTRIBUTES attr;
- HANDLE x;
- LARGE_INTEGER timeout;
- tmp_pathbuf tp;
- UNICODE_STRING path;
-
- tp.u_get (&path);
-
- switch (flags & O_ACCMODE)
- {
- case O_RDONLY: /* Server */
- timeout.QuadPart = (flags & O_NONBLOCK) ? 0LL : 0x8000000000000000LL;
- status = NtCreateMailslotFile (&x, GENERIC_READ | SYNCHRONIZE,
- get_object_attr (attr, &path, flags),
- &io, FILE_SYNCHRONOUS_IO_NONALERT,
- 0, 0, &timeout);
- if (!NT_SUCCESS (status))
- {
- /* FIXME: It's not possible to open the read side of an existing
- mailslot again. You'll get a handle, but using it in ReadFile
- returns ERROR_INVALID_PARAMETER. On the other hand,
- NtCreateMailslotFile returns with STATUS_OBJECT_NAME_EXISTS if
- the mailslot has been created already.
- So this is an exclusive open for now. *Duplicating* read side
- handles works, though, so it might be an option to duplicate
- the handle from the first process to the current process for
- opening the mailslot. */
-#if 0
- if (status != STATUS_OBJECT_NAME_COLLISION)
- {
- __seterrno_from_nt_status (status);
- break;
- }
- status = NtOpenFile (&x, GENERIC_READ | SYNCHRONIZE,
- get_object_attr (attr, &path, flags), &io,
- FILE_SHARE_VALID_FLAGS,
- FILE_SYNCHRONOUS_IO_NONALERT);
-#endif
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- break;
- }
- }
- set_io_handle (x);
- set_flags (flags, O_BINARY);
- res = 1;
- set_open_status ();
- break;
- case O_WRONLY: /* Client */
- /* The client is the DLL exclusively. Don't allow opening from
- application code. */
- extern fhandler_mailslot *dev_kmsg;
- if (this != dev_kmsg)
- {
- set_errno (EPERM); /* As on Linux. */
- break;
- }
- status = NtOpenFile (&x, GENERIC_WRITE | SYNCHRONIZE,
- get_object_attr (attr, &path, flags), &io,
- FILE_SHARE_VALID_FLAGS, 0);
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- break;
- }
- set_io_handle (x);
- set_flags (flags, O_BINARY);
- res = 1;
- set_open_status ();
- break;
- default:
- set_errno (EINVAL);
- break;
- }
- return res;
-}
-
-ssize_t __reg3
-fhandler_mailslot::raw_write (const void *ptr, size_t len)
-{
- /* Check for 425/426 byte weirdness */
- if (len == 425 || len == 426)
- {
- char buf[427];
- buf[425] = buf[426] = '\0';
- memcpy (buf, ptr, len);
- return raw_write (buf, 427);
- }
- return fhandler_base_overlapped::raw_write (ptr, len);
-}
-
-int
-fhandler_mailslot::ioctl (unsigned int cmd, void *buf)
-{
- int res = -1;
- NTSTATUS status;
- IO_STATUS_BLOCK io;
-
- switch (cmd)
- {
- case FIONBIO:
- {
- FILE_MAILSLOT_SET_INFORMATION fmsi;
- fmsi.ReadTimeout.QuadPart = buf ? 0LL : 0x8000000000000000LL;
- status = NtSetInformationFile (get_handle (), &io, &fmsi, sizeof fmsi,
- FileMailslotSetInformation);
- if (!NT_SUCCESS (status))
- {
- debug_printf ("NtSetInformationFile (%X): %p",
- fmsi.ReadTimeout.QuadPart, status);
- __seterrno_from_nt_status (status);
- break;
- }
- }
- /*FALLTHRU*/
- default:
- res = fhandler_base_overlapped::ioctl (cmd, buf);
- break;
- }
- return res;
-}
diff --git a/winsup/cygwin/fhandler_netdrive.cc b/winsup/cygwin/fhandler_netdrive.cc
deleted file mode 100644
index 39ec0cdff..000000000
--- a/winsup/cygwin/fhandler_netdrive.cc
+++ /dev/null
@@ -1,338 +0,0 @@
-/* fhandler_netdrive.cc: fhandler for // and //MACHINE handling
-
- Copyright 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014
- Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include <stdlib.h>
-#include "cygerrno.h"
-#include "security.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "cygthread.h"
-#include "tls_pbuf.h"
-
-#include <dirent.h>
-
-enum
- {
- GET_RESOURCE_OPENENUM = 1,
- GET_RESOURCE_OPENENUMTOP = 2,
- GET_RESOURCE_ENUM = 3
- };
-
-struct netdriveinf
- {
- int what;
- int ret;
- PVOID in;
- PVOID out;
- DWORD outsize;
- HANDLE sem;
- };
-
-struct net_hdls
- {
- HANDLE net;
- HANDLE dom;
- };
-
-static DWORD WINAPI
-thread_netdrive (void *arg)
-{
- netdriveinf *ndi = (netdriveinf *) arg;
- WCHAR provider[256], *dummy = NULL;
- LPNETRESOURCEW nro;
- DWORD cnt, size;
- struct net_hdls *nh;
- tmp_pathbuf tp;
-
- ReleaseSemaphore (ndi->sem, 1, NULL);
- switch (ndi->what)
- {
- case GET_RESOURCE_OPENENUMTOP:
- nro = (LPNETRESOURCEW) tp.c_get ();
- nh = (struct net_hdls *) ndi->out;
- ndi->ret = WNetGetProviderNameW (WNNC_NET_LANMAN, provider,
- (size = 256, &size));
- if (ndi->ret != NO_ERROR)
- break;
- memset (nro, 0, sizeof *nro);
- nro->dwScope = RESOURCE_GLOBALNET;
- nro->dwType = RESOURCETYPE_ANY;
- nro->dwDisplayType = RESOURCEDISPLAYTYPE_GROUP;
- nro->dwUsage = RESOURCEUSAGE_RESERVED | RESOURCEUSAGE_CONTAINER;
- nro->lpRemoteName = provider;
- nro->lpProvider = provider;
- ndi->ret = WNetOpenEnumW (RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
- RESOURCEUSAGE_ALL, nro, &nh->net);
- if (ndi->ret != NO_ERROR)
- break;
- while ((ndi->ret = WNetEnumResourceW (nh->net, (cnt = 1, &cnt), nro,
- (size = NT_MAX_PATH, &size)))
- == NO_ERROR)
- {
- ndi->ret = WNetOpenEnumW (RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
- RESOURCEUSAGE_ALL, nro, &nh->dom);
- if (ndi->ret == NO_ERROR)
- break;
- }
- break;
- case GET_RESOURCE_OPENENUM:
- nro = (LPNETRESOURCEW) tp.c_get ();
- nh = (struct net_hdls *) ndi->out;
- ndi->ret = WNetGetProviderNameW (WNNC_NET_LANMAN, provider,
- (size = 256, &size));
- if (ndi->ret != NO_ERROR)
- break;
- ((LPNETRESOURCEW) ndi->in)->lpProvider = provider;
- ndi->ret = WNetGetResourceInformationW ((LPNETRESOURCEW) ndi->in, nro,
- (size = NT_MAX_PATH, &size),
- &dummy);
- if (ndi->ret != NO_ERROR)
- break;
- ndi->ret = WNetOpenEnumW (RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
- RESOURCEUSAGE_ALL, nro, &nh->dom);
- break;
- case GET_RESOURCE_ENUM:
- nh = (struct net_hdls *) ndi->in;
- if (!nh->dom)
- {
- ndi->ret = ERROR_NO_MORE_ITEMS;
- break;
- }
- nro = (LPNETRESOURCEW) tp.c_get ();
- while ((ndi->ret = WNetEnumResourceW (nh->dom, (cnt = 1, &cnt),
- (LPNETRESOURCEW) ndi->out,
- &ndi->outsize)) != NO_ERROR
- && nh->net)
- {
- WNetCloseEnum (nh->dom);
- nh->dom = NULL;
- while ((ndi->ret = WNetEnumResourceW (nh->net, (cnt = 1, &cnt), nro,
- (size = NT_MAX_PATH, &size)))
- == NO_ERROR)
- {
- ndi->ret = WNetOpenEnumW (RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
- RESOURCEUSAGE_ALL, nro, &nh->dom);
- if (ndi->ret == NO_ERROR)
- break;
- }
- if (ndi->ret != NO_ERROR)
- break;
- }
- break;
- }
- ReleaseSemaphore (ndi->sem, 1, NULL);
- return 0;
-}
-
-static DWORD
-create_thread_and_wait (int what, PVOID in, PVOID out, DWORD outsize,
- const char *name)
-{
- netdriveinf ndi = { what, 0, in, out, outsize,
- CreateSemaphore (&sec_none_nih, 0, 2, NULL) };
- cygthread *thr = new cygthread (thread_netdrive, &ndi, name);
- if (thr->detach (ndi.sem))
- ndi.ret = ERROR_OPERATION_ABORTED;
- CloseHandle (ndi.sem);
- return ndi.ret;
-}
-
-/* Returns 0 if path doesn't exist, >0 if path is a directory,
- -1 if path is a file, -2 if it's a symlink. */
-virtual_ftype_t
-fhandler_netdrive::exists ()
-{
- char *to;
- const char *from;
- size_t len = strlen (get_name ());
- if (len == 2)
- return virt_rootdir;
-
- char namebuf[len + 1];
- tmp_pathbuf tp;
- PWCHAR name = tp.w_get ();
-
- for (to = namebuf, from = get_name (); *from; to++, from++)
- *to = (*from == '/') ? '\\' : *from;
- *to = '\0';
-
- struct net_hdls nh = { NULL, NULL };
- NETRESOURCEW nr = {0};
- nr.dwType = RESOURCETYPE_DISK;
- sys_mbstowcs (name, NT_MAX_PATH, namebuf);
- nr.lpRemoteName = name;
- DWORD ret = create_thread_and_wait (GET_RESOURCE_OPENENUM,
- &nr, &nh, 0, "WNetOpenEnum");
- if (nh.dom)
- WNetCloseEnum (nh.dom);
- return ret != NO_ERROR ? virt_none : virt_directory;
-}
-
-fhandler_netdrive::fhandler_netdrive ():
- fhandler_virtual ()
-{
-}
-
-int __reg2
-fhandler_netdrive::fstat (struct stat *buf)
-{
- const char *path = get_name ();
- debug_printf ("fstat (%s)", path);
-
- fhandler_base::fstat (buf);
-
- buf->st_mode = S_IFDIR | STD_RBITS | STD_XBITS;
- buf->st_ino = get_ino ();
-
- return 0;
-}
-
-int
-fhandler_netdrive::readdir (DIR *dir, dirent *de)
-{
- NETRESOURCEW *nro;
- DWORD ret;
- int res;
- tmp_pathbuf tp;
-
- if (!dir->__d_position)
- {
- size_t len = strlen (get_name ());
- PWCHAR name = NULL;
- NETRESOURCEW nr = { 0 };
- struct net_hdls *nh;
-
- if (len != 2) /* // */
- {
- const char *from;
- char *to;
- char *namebuf = (char *) alloca (len + 1);
- for (to = namebuf, from = get_name (); *from; to++, from++)
- *to = (*from == '/') ? '\\' : *from;
- *to = '\0';
- name = tp.w_get ();
- sys_mbstowcs (name, NT_MAX_PATH, namebuf);
- }
- nr.lpRemoteName = name;
- nr.dwType = RESOURCETYPE_DISK;
- nh = (struct net_hdls *) ccalloc (HEAP_FHANDLER, 1, sizeof *nh);
- ret = create_thread_and_wait (len == 2 ? GET_RESOURCE_OPENENUMTOP
- : GET_RESOURCE_OPENENUM,
- &nr, nh, 0, "WNetOpenEnum");
- if (ret != NO_ERROR)
- {
- dir->__handle = INVALID_HANDLE_VALUE;
- res = geterrno_from_win_error (ret);
- goto out;
- }
- dir->__handle = (HANDLE) nh;
- }
- nro = (LPNETRESOURCEW) tp.c_get ();
- ret = create_thread_and_wait (GET_RESOURCE_ENUM, dir->__handle, nro,
- NT_MAX_PATH, "WnetEnumResource");
- if (ret != NO_ERROR)
- res = geterrno_from_win_error (ret);
- else
- {
- dir->__d_position++;
- PWCHAR bs = wcsrchr (nro->lpRemoteName, L'\\');
- bs = bs ? bs + 1 : nro->lpRemoteName;
- if (strlen (get_name ()) == 2)
- {
- UNICODE_STRING ss, ds;
-
- tp.u_get (&ds);
- RtlInitUnicodeString (&ss, bs);
- RtlDowncaseUnicodeString (&ds, &ss, FALSE);
- sys_wcstombs (de->d_name, sizeof de->d_name,
- ds.Buffer, ds.Length / sizeof (WCHAR));
- de->d_ino = hash_path_name (get_ino (), de->d_name);
- }
- else
- {
- sys_wcstombs (de->d_name, sizeof de->d_name, bs);
- char *rpath = tp.c_get ();
- sys_wcstombs (rpath, NT_MAX_PATH, nro->lpRemoteName);
- de->d_ino = readdir_get_ino (rpath, false);
- /* We can't trust remote inode numbers of only 32 bit. That means,
- remote NT4 NTFS, as well as shares of Samba version < 3.0. */
- if (de->d_ino <= UINT32_MAX)
- de->d_ino = hash_path_name (0, rpath);
- }
- de->d_type = DT_DIR;
-
- res = 0;
- }
-out:
- syscall_printf ("%d = readdir(%p, %p)", res, dir, de);
- return res;
-}
-
-void
-fhandler_netdrive::seekdir (DIR *dir, long pos)
-{
- rewinddir (dir);
- if (pos < 0)
- return;
- while (dir->__d_position < pos)
- if (readdir (dir, dir->__d_dirent))
- break;
-}
-
-void
-fhandler_netdrive::rewinddir (DIR *dir)
-{
- if (dir->__handle != INVALID_HANDLE_VALUE)
- {
- struct net_hdls *nh = (struct net_hdls *) dir->__handle;
- if (nh->dom)
- WNetCloseEnum (nh->dom);
- if (nh->net)
- WNetCloseEnum (nh->net);
- cfree (nh);
- }
- dir->__handle = INVALID_HANDLE_VALUE;
- return fhandler_virtual::rewinddir (dir);
-}
-
-int
-fhandler_netdrive::closedir (DIR *dir)
-{
- rewinddir (dir);
- return fhandler_virtual::closedir (dir);
-}
-
-int
-fhandler_netdrive::open (int flags, mode_t mode)
-{
- if ((flags & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL))
- {
- set_errno (EEXIST);
- return 0;
- }
- if (flags & O_WRONLY)
- {
- set_errno (EISDIR);
- return 0;
- }
- /* Open a fake handle to \\Device\\Null */
- return open_null (flags);
-}
-
-int
-fhandler_netdrive::close ()
-{
- /* Skip fhandler_virtual::close, which is a no-op. */
- return fhandler_base::close ();
-}
diff --git a/winsup/cygwin/fhandler_nodevice.cc b/winsup/cygwin/fhandler_nodevice.cc
deleted file mode 100644
index 39842d394..000000000
--- a/winsup/cygwin/fhandler_nodevice.cc
+++ /dev/null
@@ -1,31 +0,0 @@
-/* fhandler_nodevice.cc. "No such device" handler.
-
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2008, 2009
- Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include "cygerrno.h"
-#include "path.h"
-#include "fhandler.h"
-
-int
-fhandler_nodevice::open (int flags, mode_t)
-{
- if (!pc.error)
- set_errno (ENXIO);
- /* Fixup EROFS error returned from path_conv if /dev is not backed by real
- directory on disk and the file doesn't exist. */
- else if (pc.error == EROFS && (flags & O_ACCMODE) == O_RDONLY)
- set_errno (ENOENT);
- return 0;
-}
-
-fhandler_nodevice::fhandler_nodevice ()
-{
-}
diff --git a/winsup/cygwin/fhandler_proc.cc b/winsup/cygwin/fhandler_proc.cc
deleted file mode 100644
index 0fd2e569c..000000000
--- a/winsup/cygwin/fhandler_proc.cc
+++ /dev/null
@@ -1,1510 +0,0 @@
-/* fhandler_proc.cc: fhandler for /proc virtual filesystem
-
- Copyright 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012,
- 2013, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include "miscfuncs.h"
-#include <unistd.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include "cygerrno.h"
-#include "security.h"
-#include "path.h"
-#include "shared_info.h"
-#include "fhandler.h"
-#include "fhandler_virtual.h"
-#include "pinfo.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "tls_pbuf.h"
-#include <sys/utsname.h>
-#include <sys/param.h>
-#include <sys/sysinfo.h>
-#include "ntdll.h"
-#include <winioctl.h>
-#include <wchar.h>
-#include <wctype.h>
-#include "cpuid.h"
-#include "mount.h"
-
-#define _COMPILING_NEWLIB
-#include <dirent.h>
-
-static off_t format_proc_loadavg (void *, char *&);
-static off_t format_proc_meminfo (void *, char *&);
-static off_t format_proc_stat (void *, char *&);
-static off_t format_proc_version (void *, char *&);
-static off_t format_proc_uptime (void *, char *&);
-static off_t format_proc_cpuinfo (void *, char *&);
-static off_t format_proc_partitions (void *, char *&);
-static off_t format_proc_self (void *, char *&);
-static off_t format_proc_cygdrive (void *, char *&);
-static off_t format_proc_mounts (void *, char *&);
-static off_t format_proc_filesystems (void *, char *&);
-static off_t format_proc_swaps (void *, char *&);
-static off_t format_proc_devices (void *, char *&);
-static off_t format_proc_misc (void *, char *&);
-
-/* names of objects in /proc */
-static const virt_tab_t proc_tab[] = {
- { _VN ("."), FH_PROC, virt_directory, NULL },
- { _VN (".."), FH_PROC, virt_directory, NULL },
- { _VN ("cpuinfo"), FH_PROC, virt_file, format_proc_cpuinfo },
- { _VN ("cygdrive"), FH_PROC, virt_symlink, format_proc_cygdrive },
- { _VN ("devices"), FH_PROC, virt_file, format_proc_devices },
- { _VN ("filesystems"), FH_PROC, virt_file, format_proc_filesystems },
- { _VN ("loadavg"), FH_PROC, virt_file, format_proc_loadavg },
- { _VN ("meminfo"), FH_PROC, virt_file, format_proc_meminfo },
- { _VN ("misc"), FH_PROC, virt_file, format_proc_misc },
- { _VN ("mounts"), FH_PROC, virt_symlink, format_proc_mounts },
- { _VN ("net"), FH_PROCNET, virt_directory, NULL },
- { _VN ("partitions"), FH_PROC, virt_file, format_proc_partitions },
- { _VN ("registry"), FH_REGISTRY, virt_directory, NULL },
- { _VN ("registry32"), FH_REGISTRY, virt_directory, NULL },
- { _VN ("registry64"), FH_REGISTRY, virt_directory, NULL },
- { _VN ("self"), FH_PROC, virt_symlink, format_proc_self },
- { _VN ("stat"), FH_PROC, virt_file, format_proc_stat },
- { _VN ("swaps"), FH_PROC, virt_file, format_proc_swaps },
- { _VN ("sys"), FH_PROCSYS, virt_directory, NULL },
- { _VN ("sysvipc"), FH_PROCSYSVIPC, virt_directory, NULL },
- { _VN ("uptime"), FH_PROC, virt_file, format_proc_uptime },
- { _VN ("version"), FH_PROC, virt_file, format_proc_version },
- { NULL, 0, FH_NADA, virt_none, NULL }
-};
-
-#define PROC_DIR_COUNT 4
-
-static const int PROC_LINK_COUNT = (sizeof (proc_tab) / sizeof (virt_tab_t)) - 1;
-
-/* name of the /proc filesystem */
-const char proc[] = "/proc";
-const size_t proc_len = sizeof (proc) - 1;
-
-/* bsearch compare function. */
-static int
-proc_tab_cmp (const void *key, const void *memb)
-{
- int ret = strncmp (((virt_tab_t *) key)->name, ((virt_tab_t *) memb)->name,
- ((virt_tab_t *) memb)->name_len);
- if (!ret && ((virt_tab_t *) key)->name[((virt_tab_t *) memb)->name_len] != '\0' && ((virt_tab_t *) key)->name[((virt_tab_t *) memb)->name_len] != '/')
- return 1;
- return ret;
-}
-
-/* Helper function to perform a binary search of the incoming pathname
- against the alpha-sorted virtual file table. */
-virt_tab_t *
-virt_tab_search (const char *path, bool prefix, const virt_tab_t *table,
- size_t nelem)
-{
- virt_tab_t key = { path, 0, FH_NADA, virt_none, NULL };
- virt_tab_t *entry = (virt_tab_t *) bsearch (&key, table, nelem,
- sizeof (virt_tab_t),
- proc_tab_cmp);
- if (entry && (path[entry->name_len] == '\0'
- || (prefix && path[entry->name_len] == '/')))
- return entry;
- return NULL;
-}
-
-/* Auxillary function that returns the fhandler associated with the given
- path. */
-fh_devices
-fhandler_proc::get_proc_fhandler (const char *path)
-{
- debug_printf ("get_proc_fhandler(%s)", path);
- path += proc_len;
- /* Since this method is called from path_conv::check we can't rely on
- it being normalised and therefore the path may have runs of slashes
- in it. */
- while (isdirsep (*path))
- path++;
-
- /* Check if this is the root of the virtual filesystem (i.e. /proc). */
- if (*path == 0)
- return FH_PROC;
-
- virt_tab_t *entry = virt_tab_search (path, true, proc_tab,
- PROC_LINK_COUNT);
- if (entry)
- return entry->fhandler;
-
- int pid = atoi (path);
- pinfo p (pid);
- /* If p->pid != pid, then pid is actually the Windows PID for an execed
- Cygwin process, and the pinfo entry is the additional entry created
- at exec time. We don't want to enable the user to access a process
- entry by using the Win32 PID, though. */
- if (p && p->pid == pid)
- return FH_PROCESS;
-
- bool has_subdir = false;
- while (*path)
- if (isdirsep (*path++))
- {
- has_subdir = true;
- break;
- }
-
- if (has_subdir)
- /* The user is trying to access a non-existent subdirectory of /proc. */
- return FH_NADA;
- else
- /* Return FH_PROC so that we can return EROFS if the user is trying to
- create a file. */
- return FH_PROC;
-}
-
-/* Returns 0 if path doesn't exist, >0 if path is a directory,
- -1 if path is a file, -2 if it's a symlink. */
-virtual_ftype_t
-fhandler_proc::exists ()
-{
- const char *path = get_name ();
- debug_printf ("exists (%s)", path);
- path += proc_len;
- if (*path == 0)
- return virt_rootdir;
- virt_tab_t *entry = virt_tab_search (path + 1, false, proc_tab,
- PROC_LINK_COUNT);
- if (entry)
- {
- fileid = entry - proc_tab;
- return entry->type;
- }
- return virt_none;
-}
-
-fhandler_proc::fhandler_proc ():
- fhandler_virtual ()
-{
-}
-
-int __reg2
-fhandler_proc::fstat (struct stat *buf)
-{
- const char *path = get_name ();
- debug_printf ("fstat (%s)", path);
-
- path += proc_len;
- fhandler_base::fstat (buf);
-
- buf->st_mode &= ~_IFMT & NO_W;
-
- if (!*path)
- {
- winpids pids ((DWORD) 0);
- buf->st_ino = 2;
- buf->st_mode |= S_IFDIR | S_IXUSR | S_IXGRP | S_IXOTH;
- buf->st_nlink = PROC_DIR_COUNT + 2 + pids.npids;
- return 0;
- }
- else
- {
- virt_tab_t *entry = virt_tab_search (path + 1, false, proc_tab,
- PROC_LINK_COUNT);
- if (entry)
- {
- if (entry->type == virt_directory)
- buf->st_mode |= S_IFDIR | S_IXUSR | S_IXGRP | S_IXOTH;
- else if (entry->type == virt_symlink)
- buf->st_mode = S_IFLNK | S_IRWXU | S_IRWXG | S_IRWXO;
- else
- {
- buf->st_mode &= NO_X;
- buf->st_mode |= S_IFREG;
- }
- return 0;
- }
- }
- set_errno (ENOENT);
- return -1;
-}
-
-DIR *
-fhandler_proc::opendir (int fd)
-{
- DIR *dir = fhandler_virtual::opendir (fd);
- if (dir && !(dir->__handle = (void *) new winpids ((DWORD) 0)))
- {
- free (dir);
- dir = NULL;
- set_errno (ENOMEM);
- }
- return dir;
-}
-
-int
-fhandler_proc::closedir (DIR *dir)
-{
- delete (winpids *) dir->__handle;
- return fhandler_virtual::closedir (dir);
-}
-
-int
-fhandler_proc::readdir (DIR *dir, dirent *de)
-{
- int res;
- if (dir->__d_position < PROC_LINK_COUNT)
- {
- strcpy (de->d_name, proc_tab[dir->__d_position].name);
- de->d_type = virt_ftype_to_dtype (proc_tab[dir->__d_position].type);
- dir->__d_position++;
- dir->__flags |= dirent_saw_dot | dirent_saw_dot_dot;
- res = 0;
- }
- else
- {
- winpids &pids = *(winpids *) dir->__handle;
- int found = 0;
- res = ENMFILE;
- for (unsigned i = 0; i < pids.npids; i++)
- if (found++ == dir->__d_position - PROC_LINK_COUNT)
- {
- __small_sprintf (de->d_name, "%d", pids[i]->pid);
- de->d_type = DT_DIR;
- dir->__d_position++;
- res = 0;
- break;
- }
- }
-
- syscall_printf ("%d = readdir(%p, %p) (%s)", res, dir, de, de->d_name);
- return res;
-}
-
-int
-fhandler_proc::open (int flags, mode_t mode)
-{
- int proc_file_no = -1;
-
- int res = fhandler_virtual::open (flags, mode);
- if (!res)
- goto out;
-
- nohandle (true);
-
- const char *path;
-
- path = get_name () + proc_len;
-
- if (!*path)
- {
- if ((flags & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL))
- {
- set_errno (EEXIST);
- res = 0;
- goto out;
- }
- else if (flags & O_WRONLY)
- {
- set_errno (EISDIR);
- res = 0;
- goto out;
- }
- else
- {
- flags |= O_DIROPEN;
- goto success;
- }
- }
-
- proc_file_no = -1;
- for (int i = 0; proc_tab[i].name; i++)
- if (path_prefix_p (proc_tab[i].name, path + 1, strlen (proc_tab[i].name),
- false))
- {
- proc_file_no = i;
- if (proc_tab[i].fhandler != FH_PROC)
- {
- if ((flags & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL))
- {
- set_errno (EEXIST);
- res = 0;
- goto out;
- }
- else if (flags & O_WRONLY)
- {
- set_errno (EISDIR);
- res = 0;
- goto out;
- }
- else
- {
- flags |= O_DIROPEN;
- goto success;
- }
- }
- }
-
- if (proc_file_no == -1)
- {
- if (flags & O_CREAT)
- {
- set_errno (EROFS);
- res = 0;
- goto out;
- }
- else
- {
- set_errno (ENOENT);
- res = 0;
- goto out;
- }
- }
- if (flags & O_WRONLY)
- {
- set_errno (EROFS);
- res = 0;
- goto out;
- }
-
- fileid = proc_file_no;
- if (!fill_filebuf ())
- {
- res = 0;
- goto out;
- }
-
- if (flags & O_APPEND)
- position = filesize;
- else
- position = 0;
-
-success:
- res = 1;
- set_flags ((flags & ~O_TEXT) | O_BINARY);
- set_open_status ();
-out:
- syscall_printf ("%d = fhandler_proc::open(%y, 0%o)", res, flags, mode);
- return res;
-}
-
-bool
-fhandler_proc::fill_filebuf ()
-{
- if (fileid < PROC_LINK_COUNT && proc_tab[fileid].format_func)
- {
- filesize = proc_tab[fileid].format_func (NULL, filebuf);
- if (filesize > 0)
- return true;
- }
- return false;
-}
-
-static off_t
-format_proc_version (void *, char *&destbuf)
-{
- tmp_pathbuf tp;
- char *buf = tp.c_get ();
- char *bufptr = buf;
- struct utsname uts_name;
-
- uname (&uts_name);
- bufptr += __small_sprintf (bufptr, "%s version %s (%s@%s) (%s) %s\n",
- uts_name.sysname, uts_name.release, USERNAME, HOSTNAME,
- GCC_VERSION, uts_name.version);
-
- destbuf = (char *) crealloc_abort (destbuf, bufptr - buf);
- memcpy (destbuf, buf, bufptr - buf);
- return bufptr - buf;
-}
-
-static off_t
-format_proc_loadavg (void *, char *&destbuf)
-{
- extern int get_process_state (DWORD dwProcessId);
- unsigned running = 0;
- winpids pids ((DWORD) 0);
-
- for (unsigned i = 0; i < pids.npids; i++)
- switch (get_process_state (i)) {
- case 'O':
- case 'R':
- running++;
- break;
- }
-
- destbuf = (char *) crealloc_abort (destbuf, 48);
- return __small_sprintf (destbuf, "%u.%02u %u.%02u %u.%02u %u/%u\n",
- 0, 0, 0, 0, 0, 0, running, pids.npids);
-}
-
-static off_t
-format_proc_meminfo (void *, char *&destbuf)
-{
- unsigned long long mem_total, mem_free, swap_total, swap_free;
- struct sysinfo info;
-
- sysinfo (&info);
- mem_total = (unsigned long long) info.totalram * info.mem_unit;
- mem_free = (unsigned long long) info.freeram * info.mem_unit;
- swap_total = (unsigned long long) info.totalswap * info.mem_unit;
- swap_free = (unsigned long long) info.freeswap * info.mem_unit;
-
- destbuf = (char *) crealloc_abort (destbuf, 512);
- return sprintf (destbuf, "MemTotal: %10llu kB\n"
- "MemFree: %10llu kB\n"
- "HighTotal: 0 kB\n"
- "HighFree: 0 kB\n"
- "LowTotal: %10llu kB\n"
- "LowFree: %10llu kB\n"
- "SwapTotal: %10llu kB\n"
- "SwapFree: %10llu kB\n",
- mem_total >> 10, mem_free >> 10,
- mem_total >> 10, mem_free >> 10,
- swap_total >> 10, swap_free >> 10);
-}
-
-static off_t
-format_proc_uptime (void *, char *&destbuf)
-{
- unsigned long long uptime = 0ULL, idle_time = 0ULL;
- NTSTATUS status;
- SYSTEM_TIMEOFDAY_INFORMATION stodi;
- /* Sizeof SYSTEM_PERFORMANCE_INFORMATION on 64 bit systems. It
- appears to contain some trailing additional information from
- what I can tell after examining the content.
- FIXME: It would be nice if this could be verified somehow. */
- const size_t sizeof_spi = sizeof (SYSTEM_PERFORMANCE_INFORMATION) + 16;
- PSYSTEM_PERFORMANCE_INFORMATION spi = (PSYSTEM_PERFORMANCE_INFORMATION)
- alloca (sizeof_spi);
-
- status = NtQuerySystemInformation (SystemTimeOfDayInformation, &stodi,
- sizeof stodi, NULL);
- if (NT_SUCCESS (status))
- uptime = (stodi.CurrentTime.QuadPart - stodi.BootTime.QuadPart) / 100000ULL;
- else
- debug_printf ("NtQuerySystemInformation(SystemTimeOfDayInformation), "
- "status %y", status);
-
- if (NT_SUCCESS (NtQuerySystemInformation (SystemPerformanceInformation,
- spi, sizeof_spi, NULL)))
- idle_time = (spi->IdleTime.QuadPart / wincap.cpu_count ())
- / 100000ULL;
-
- destbuf = (char *) crealloc_abort (destbuf, 80);
- return __small_sprintf (destbuf, "%U.%02u %U.%02u\n",
- uptime / 100, long (uptime % 100),
- idle_time / 100, long (idle_time % 100));
-}
-
-static off_t
-format_proc_stat (void *, char *&destbuf)
-{
- unsigned long pages_in = 0UL, pages_out = 0UL, interrupt_count = 0UL,
- context_switches = 0UL, swap_in = 0UL, swap_out = 0UL;
- time_t boot_time = 0;
- NTSTATUS status;
- /* Sizeof SYSTEM_PERFORMANCE_INFORMATION on 64 bit systems. It
- appears to contain some trailing additional information from
- what I can tell after examining the content.
- FIXME: It would be nice if this could be verified somehow. */
- const size_t sizeof_spi = sizeof (SYSTEM_PERFORMANCE_INFORMATION) + 16;
- PSYSTEM_PERFORMANCE_INFORMATION spi = (PSYSTEM_PERFORMANCE_INFORMATION)
- alloca (sizeof_spi);
- SYSTEM_TIMEOFDAY_INFORMATION stodi;
- tmp_pathbuf tp;
-
- char *buf = tp.c_get ();
- char *eobuf = buf;
-
- SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION spt[wincap.cpu_count ()];
- status = NtQuerySystemInformation (SystemProcessorPerformanceInformation,
- (PVOID) spt,
- sizeof spt[0] * wincap.cpu_count (), NULL);
- if (!NT_SUCCESS (status))
- debug_printf ("NtQuerySystemInformation(SystemProcessorPerformanceInformation), "
- "status %y", status);
- else
- {
- unsigned long long user_time = 0ULL, kernel_time = 0ULL, idle_time = 0ULL;
- for (unsigned long i = 0; i < wincap.cpu_count (); i++)
- {
- kernel_time += (spt[i].KernelTime.QuadPart - spt[i].IdleTime.QuadPart)
- * HZ / 10000000ULL;
- user_time += spt[i].UserTime.QuadPart * HZ / 10000000ULL;
- idle_time += spt[i].IdleTime.QuadPart * HZ / 10000000ULL;
- }
-
- eobuf += __small_sprintf (eobuf, "cpu %U %U %U %U\n",
- user_time, 0ULL, kernel_time, idle_time);
- user_time = 0ULL, kernel_time = 0ULL, idle_time = 0ULL;
- for (unsigned long i = 0; i < wincap.cpu_count (); i++)
- {
- interrupt_count += spt[i].InterruptCount;
- kernel_time = (spt[i].KernelTime.QuadPart - spt[i].IdleTime.QuadPart) * HZ / 10000000ULL;
- user_time = spt[i].UserTime.QuadPart * HZ / 10000000ULL;
- idle_time = spt[i].IdleTime.QuadPart * HZ / 10000000ULL;
- eobuf += __small_sprintf (eobuf, "cpu%d %U %U %U %U\n", i,
- user_time, 0ULL, kernel_time, idle_time);
- }
-
- status = NtQuerySystemInformation (SystemPerformanceInformation,
- (PVOID) spi, sizeof_spi, NULL);
- if (!NT_SUCCESS (status))
- {
- debug_printf ("NtQuerySystemInformation(SystemPerformanceInformation)"
- ", status %y", status);
- memset (spi, 0, sizeof_spi);
- }
- status = NtQuerySystemInformation (SystemTimeOfDayInformation,
- (PVOID) &stodi, sizeof stodi, NULL);
- if (!NT_SUCCESS (status))
- debug_printf ("NtQuerySystemInformation(SystemTimeOfDayInformation), "
- "status %y", status);
- }
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- return 0;
- }
-
- pages_in = spi->PagesRead;
- pages_out = spi->PagefilePagesWritten + spi->MappedFilePagesWritten;
- /* Note: there is no distinction made in this structure between pages read
- from the page file and pages read from mapped files, but there is such
- a distinction made when it comes to writing. Goodness knows why. The
- value of swap_in, then, will obviously be wrong but its our best guess. */
- swap_in = spi->PagesRead;
- swap_out = spi->PagefilePagesWritten;
- context_switches = spi->ContextSwitches;
- boot_time = to_time_t (&stodi.BootTime);
-
- eobuf += __small_sprintf (eobuf, "page %u %u\n"
- "swap %u %u\n"
- "intr %u\n"
- "ctxt %u\n"
- "btime %u\n",
- pages_in, pages_out,
- swap_in, swap_out,
- interrupt_count,
- context_switches,
- boot_time);
- destbuf = (char *) crealloc_abort (destbuf, eobuf - buf);
- memcpy (destbuf, buf, eobuf - buf);
- return eobuf - buf;
-}
-
-#define print(x) { bufptr = stpcpy (bufptr, (x)); }
-
-static off_t
-format_proc_cpuinfo (void *, char *&destbuf)
-{
- DWORD orig_affinity_mask;
- int cpu_number;
- const int BUFSIZE = 256;
- union
- {
- BYTE b[BUFSIZE];
- char s[BUFSIZE];
- WCHAR w[BUFSIZE / sizeof (WCHAR)];
- DWORD d;
- uint32_t m[13];
- } in_buf;
- tmp_pathbuf tp;
-
- char *buf = tp.c_get ();
- char *bufptr = buf;
-
- for (cpu_number = 0; ; cpu_number++)
- {
- WCHAR cpu_key[128];
- __small_swprintf (cpu_key, L"\\Registry\\Machine\\HARDWARE\\DESCRIPTION"
- "\\System\\CentralProcessor\\%d", cpu_number);
- if (!NT_SUCCESS (RtlCheckRegistryKey (RTL_REGISTRY_ABSOLUTE, cpu_key)))
- break;
- if (cpu_number)
- print ("\n");
-
- orig_affinity_mask = SetThreadAffinityMask (GetCurrentThread (),
- 1 << cpu_number);
- if (orig_affinity_mask == 0)
- debug_printf ("SetThreadAffinityMask failed %E");
- /* I'm not sure whether the thread changes processor immediately
- and I'm not sure whether this function will cause the thread
- to be rescheduled */
- yield ();
-
- bool has_cpuid = false;
-
- if (!can_set_flag (0x00040000))
- debug_printf ("386 processor - no cpuid");
- else
- {
- debug_printf ("486 processor");
- if (can_set_flag (0x00200000))
- {
- debug_printf ("processor supports CPUID instruction");
- has_cpuid = true;
- }
- else
- debug_printf ("processor does not support CPUID instruction");
- }
-
- if (!has_cpuid)
- {
- WCHAR vendor[64], id[64];
- UNICODE_STRING uvendor, uid;
- RtlInitEmptyUnicodeString (&uvendor, vendor, sizeof (vendor));
- RtlInitEmptyUnicodeString (&uid, id, sizeof (id));
- DWORD cpu_mhz = 0;
- RTL_QUERY_REGISTRY_TABLE tab[4] = {
- { NULL, RTL_QUERY_REGISTRY_NOEXPAND | RTL_QUERY_REGISTRY_DIRECT,
- L"VendorIdentifier", &uvendor, REG_NONE, NULL, 0 },
- { NULL, RTL_QUERY_REGISTRY_NOEXPAND | RTL_QUERY_REGISTRY_DIRECT,
- L"Identifier", &uid, REG_NONE, NULL, 0 },
- { NULL, RTL_QUERY_REGISTRY_DIRECT | RTL_QUERY_REGISTRY_NOSTRING,
- L"~Mhz", &cpu_mhz, REG_NONE, NULL, 0 },
- { NULL, 0, NULL, NULL, 0, NULL, 0 }
- };
-
- RtlQueryRegistryValues (RTL_REGISTRY_ABSOLUTE, cpu_key, tab,
- NULL, NULL);
- bufptr += __small_sprintf (bufptr,
- "processor : %d\n"
- "vendor_id : %S\n"
- "identifier : %S\n"
- "cpu MHz : %u\n",
- cpu_number, &uvendor, &uid, cpu_mhz);
- print ("flags :");
- if (IsProcessorFeaturePresent (PF_3DNOW_INSTRUCTIONS_AVAILABLE))
- print (" 3dnow");
- if (IsProcessorFeaturePresent (PF_COMPARE_EXCHANGE_DOUBLE))
- print (" cx8");
- if (!IsProcessorFeaturePresent (PF_FLOATING_POINT_EMULATED))
- print (" fpu");
- if (IsProcessorFeaturePresent (PF_MMX_INSTRUCTIONS_AVAILABLE))
- print (" mmx");
- if (IsProcessorFeaturePresent (PF_PAE_ENABLED))
- print (" pae");
- if (IsProcessorFeaturePresent (PF_RDTSC_INSTRUCTION_AVAILABLE))
- print (" tsc");
- if (IsProcessorFeaturePresent (PF_XMMI_INSTRUCTIONS_AVAILABLE))
- print (" sse");
- if (IsProcessorFeaturePresent (PF_XMMI64_INSTRUCTIONS_AVAILABLE))
- print (" sse2");
- }
- else
- {
- DWORD cpu_mhz = 0;
- RTL_QUERY_REGISTRY_TABLE tab[2] = {
- { NULL, RTL_QUERY_REGISTRY_DIRECT | RTL_QUERY_REGISTRY_NOSTRING,
- L"~Mhz", &cpu_mhz, REG_NONE, NULL, 0 },
- { NULL, 0, NULL, NULL, 0, NULL, 0 }
- };
-
- RtlQueryRegistryValues (RTL_REGISTRY_ABSOLUTE, cpu_key, tab,
- NULL, NULL);
- bufptr += __small_sprintf (bufptr, "processor\t: %d\n", cpu_number);
- uint32_t maxf, vendor_id[4], unused;
- cpuid (&maxf, &vendor_id[0], &vendor_id[2], &vendor_id[1], 0);
- maxf &= 0xffff;
- vendor_id[3] = 0;
-
- /* Vendor identification. */
- bool is_amd = false, is_intel = false;
- if (!strcmp ((char*)vendor_id, "AuthenticAMD"))
- is_amd = true;
- else if (!strcmp ((char*)vendor_id, "GenuineIntel"))
- is_intel = true;
-
- bufptr += __small_sprintf (bufptr, "vendor_id\t: %s\n",
- (char *)vendor_id);
- if (maxf >= 1)
- {
- uint32_t features2, features1, extra_info, cpuid_sig;
- cpuid (&cpuid_sig, &extra_info, &features2, &features1, 1);
- /* uint32_t extended_family = (cpuid_sig & 0x0ff00000) >> 20,
- extended_model = (cpuid_sig & 0x000f0000) >> 16,
- type = (cpuid_sig & 0x00003000) >> 12; */
- uint32_t family = (cpuid_sig & 0x00000f00) >> 8,
- model = (cpuid_sig & 0x000000f0) >> 4,
- stepping = cpuid_sig & 0x0000000f;
- /* Not printed on Linux */
- //uint32_t brand_id = extra_info & 0x0000000f;
- //uint32_t cpu_count = (extra_info & 0x00ff0000) >> 16;
- uint32_t apic_id = (extra_info & 0xff000000) >> 24;
- if (family == 15)
- family += (cpuid_sig >> 20) & 0xff;
- if (family >= 6)
- model += ((cpuid_sig >> 16) & 0x0f) << 4;
- uint32_t maxe = 0;
- cpuid (&maxe, &unused, &unused, &unused, 0x80000000);
- if (maxe >= 0x80000004)
- {
- cpuid (&in_buf.m[0], &in_buf.m[1], &in_buf.m[2],
- &in_buf.m[3], 0x80000002);
- cpuid (&in_buf.m[4], &in_buf.m[5], &in_buf.m[6],
- &in_buf.m[7], 0x80000003);
- cpuid (&in_buf.m[8], &in_buf.m[9], &in_buf.m[10],
- &in_buf.m[11], 0x80000004);
- in_buf.m[12] = 0;
- }
- else
- {
- /* Could implement a lookup table here if someone needs it. */
- strcpy (in_buf.s, "unknown");
- }
- int cache_size = -1,
- tlb_size = -1,
- clflush = 64,
- cache_alignment = 64;
- if (features1 & (1 << 19)) /* CLFSH */
- clflush = ((extra_info >> 8) & 0xff) << 3;
- if (is_intel && family == 15)
- cache_alignment = clflush * 2;
- if (maxe >= 0x80000005) /* L1 Cache and TLB Identifiers. */
- {
- uint32_t data_cache, inst_cache;
- cpuid (&unused, &unused, &data_cache, &inst_cache,
- 0x80000005);
-
- cache_size = (inst_cache >> 24) + (data_cache >> 24);
- tlb_size = 0;
- }
- if (maxe >= 0x80000006) /* L2 Cache and L2 TLB Identifiers. */
- {
- uint32_t tlb, l2;
- cpuid (&unused, &tlb, &l2, &unused, 0x80000006);
-
- cache_size = l2 >> 16;
- tlb_size = ((tlb >> 16) & 0xfff) + (tlb & 0xfff);
- }
- bufptr += __small_sprintf (bufptr, "cpu family\t: %d\n"
- "model\t\t: %d\n"
- "model name\t: %s\n"
- "stepping\t: %d\n"
- "cpu MHz\t\t: %d.000\n",
- family,
- model,
- in_buf.s + strspn (in_buf.s, " "),
- stepping,
- cpu_mhz);
- if (cache_size >= 0)
- bufptr += __small_sprintf (bufptr, "cache size\t: %d KB\n",
- cache_size);
-
- /* Recognize multi-core CPUs. */
- if (is_amd && maxe >= 0x80000008)
- {
- uint32_t core_info;
- cpuid (&unused, &unused, &core_info, &unused, 0x80000008);
-
- int max_cores = 1 + (core_info & 0xff);
- if (max_cores > 1)
- {
- int shift = (core_info >> 12) & 0x0f;
- if (!shift)
- while ((1 << shift) < max_cores)
- ++shift;
- int core_id = apic_id & ((1 << shift) - 1);
- apic_id >>= shift;
-
- bufptr += __small_sprintf (bufptr, "physical id\t: %d\n"
- "core id\t\t: %d\n"
- "cpu cores\t: %d\n",
- apic_id, core_id, max_cores);
- }
- }
- /* Recognize Intel Hyper-Transport CPUs. */
- else if (is_intel && (features1 & (1 << 28)) && maxf >= 4)
- {
- /* TODO */
- }
-
- bufptr += __small_sprintf (bufptr, "fpu\t\t: %s\n"
- "fpu_exception\t: %s\n"
- "cpuid level\t: %d\n"
- "wp\t\t: yes\n",
- (features1 & (1 << 0)) ? "yes" : "no",
- (features1 & (1 << 0)) ? "yes" : "no",
- maxf);
- print ("flags\t\t:");
- if (features1 & (1 << 0))
- print (" fpu");
- if (features1 & (1 << 1))
- print (" vme");
- if (features1 & (1 << 2))
- print (" de");
- if (features1 & (1 << 3))
- print (" pse");
- if (features1 & (1 << 4))
- print (" tsc");
- if (features1 & (1 << 5))
- print (" msr");
- if (features1 & (1 << 6))
- print (" pae");
- if (features1 & (1 << 7))
- print (" mce");
- if (features1 & (1 << 8))
- print (" cx8");
- if (features1 & (1 << 9))
- print (" apic");
- if (features1 & (1 << 11))
- print (" sep");
- if (features1 & (1 << 12))
- print (" mtrr");
- if (features1 & (1 << 13))
- print (" pge");
- if (features1 & (1 << 14))
- print (" mca");
- if (features1 & (1 << 15))
- print (" cmov");
- if (features1 & (1 << 16))
- print (" pat");
- if (features1 & (1 << 17))
- print (" pse36");
- if (features1 & (1 << 18))
- print (" pn");
- if (features1 & (1 << 19))
- print (" clflush");
- if (is_intel && features1 & (1 << 21))
- print (" dts");
- if (is_intel && features1 & (1 << 22))
- print (" acpi");
- if (features1 & (1 << 23))
- print (" mmx");
- if (features1 & (1 << 24))
- print (" fxsr");
- if (features1 & (1 << 25))
- print (" sse");
- if (features1 & (1 << 26))
- print (" sse2");
- if (is_intel && (features1 & (1 << 27)))
- print (" ss");
- if (features1 & (1 << 28))
- print (" ht");
- if (is_intel)
- {
- if (features1 & (1 << 29))
- print (" tm");
- if (features1 & (1 << 30))
- print (" ia64");
- if (features1 & (1 << 31))
- print (" pbe");
- }
-
- if (is_amd && maxe >= 0x80000001)
- {
- cpuid (&unused, &unused, &unused, &features1, 0x80000001);
-
- if (features1 & (1 << 11))
- print (" syscall");
- if (features1 & (1 << 19)) /* Huh? Not in AMD64 specs. */
- print (" mp");
- if (features1 & (1 << 20))
- print (" nx");
- if (features1 & (1 << 22))
- print (" mmxext");
- if (features1 & (1 << 25))
- print (" fxsr_opt");
- if (features1 & (1 << 26))
- print (" pdpe1gb");
- if (features1 & (1 << 27))
- print (" rdtscp");
- if (features1 & (1 << 29))
- print (" lm");
- if (features1 & (1 << 30)) /* 31th bit is on. */
- print (" 3dnowext");
- if (features1 & (1 << 31)) /* 32th bit (highest) is on. */
- print (" 3dnow");
- }
-
- if (features2 & (1 << 0))
- print (" pni");
- if (is_intel)
- {
- if (features2 & (1 << 2))
- print (" dtes64");
- if (features2 & (1 << 3))
- print (" monitor");
- if (features2 & (1 << 4))
- print (" ds_cpl");
- if (features2 & (1 << 5))
- print (" vmx");
- if (features2 & (1 << 6))
- print (" smx");
- if (features2 & (1 << 7))
- print (" est");
- if (features2 & (1 << 8))
- print (" tm2");
- if (features2 & (1 << 9))
- print (" ssse3");
- if (features2 & (1 << 10))
- print (" cid");
- if (features2 & (1 << 12))
- print (" fma");
- }
- if (features2 & (1 << 13))
- print (" cx16");
- if (is_intel)
- {
- if (features2 & (1 << 14))
- print (" xtpr");
- if (features2 & (1 << 15))
- print (" pdcm");
- if (features2 & (1 << 18))
- print (" dca");
- if (features2 & (1 << 19))
- print (" sse4_1");
- if (features2 & (1 << 20))
- print (" sse4_2");
- if (features2 & (1 << 21))
- print (" x2apic");
- if (features2 & (1 << 22))
- print (" movbe");
- if (features2 & (1 << 23))
- print (" popcnt");
- if (features2 & (1 << 25))
- print (" aes");
- if (features2 & (1 << 26))
- print (" xsave");
- if (features2 & (1 << 27))
- print (" osxsave");
- if (features2 & (1 << 28))
- print (" avx");
- if (features2 & (1 << 29))
- print (" f16c");
- if (features2 & (1 << 30))
- print (" rdrand");
- if (features2 & (1 << 31))
- print (" hypervisor");
- }
-
- if (maxe >= 0x80000001)
- {
- cpuid (&unused, &unused, &features1, &unused, 0x80000001);
-
- if (features1 & (1 << 0))
- print (" lahf_lm");
- if (features1 & (1 << 1))
- print (" cmp_legacy");
- if (is_amd)
- {
- if (features1 & (1 << 2))
- print (" svm");
- if (features1 & (1 << 3))
- print (" extapic");
- if (features1 & (1 << 4))
- print (" cr8_legacy");
- if (features1 & (1 << 5))
- print (" abm");
- if (features1 & (1 << 6))
- print (" sse4a");
- if (features1 & (1 << 7))
- print (" misalignsse");
- if (features1 & (1 << 8))
- print (" 3dnowprefetch");
- if (features1 & (1 << 9))
- print (" osvw");
- }
- if (features1 & (1 << 10))
- print (" ibs");
- if (is_amd)
- {
- if (features1 & (1 << 11))
- print (" sse5");
- if (features1 & (1 << 12))
- print (" skinit");
- if (features1 & (1 << 13))
- print (" wdt");
- if (features1 & (1 << 15))
- print (" lwp");
- if (features1 & (1 << 16))
- print (" fma4");
- if (features1 & (1 << 17))
- print (" tce");
- if (features1 & (1 << 19))
- print (" nodeid_msr");
- if (features1 & (1 << 21))
- print (" tbm");
- if (features1 & (1 << 22))
- print (" topoext");
- if (features1 & (1 << 23))
- print (" perfctr_core");
- if (features1 & (1 << 24))
- print (" perfctr_nb");
- if (features1 & (1 << 28))
- print (" perfctr_l2");
- }
- }
- if (is_intel) /* features scattered in various CPUID levels. */
- {
- cpuid (&features1, &unused, &features2, &unused, 0x06);
-
- if (features1 & (1 << 1))
- print (" ida");
- if (features1 & (1 << 2))
- print (" arat");
- if (features2 & (1 << 3))
- print (" epb");
-
- cpuid (&features2, &unused, &unused, &unused, 0x0d, 1);
- if (features2 & (1 << 0))
- print (" xsaveopt");
-
- if (features1 & (1 << 4))
- print (" pln");
- if (features1 & (1 << 6))
- print (" pts");
- if (features1 & (1 << 0))
- print (" dtherm");
- }
- if (is_intel) /* Extended feature flags */
- {
- cpuid (&unused, &features1, &unused, &unused, 0x07, 0);
-
- if (features1 & (1 << 0))
- print (" fsgsbase");
- if (features1 & (1 << 1))
- print (" tsc_adjust");
- if (features1 & (1 << 3))
- print (" bmi1");
- if (features1 & (1 << 4))
- print (" hle");
- if (features1 & (1 << 5))
- print (" avx2");
- if (features1 & (1 << 7))
- print (" smep");
- if (features1 & (1 << 8))
- print (" bmi2");
- if (features1 & (1 << 9))
- print (" erms");
- if (features1 & (1 << 10))
- print (" invpcid");
- if (features1 & (1 << 11))
- print (" rtm");
- if (features1 & (1 << 14))
- print (" mpx");
- if (features1 & (1 << 16))
- print (" avx512f");
- if (features1 & (1 << 18))
- print (" rdseed");
- if (features1 & (1 << 19))
- print (" adx");
- if (features1 & (1 << 20))
- print (" smap");
- if (features1 & (1 << 23))
- print (" clflushopt");
- if (features1 & (1 << 26))
- print (" avx512pf");
- if (features1 & (1 << 27))
- print (" avx512er");
- if (features1 & (1 << 28))
- print (" avx512cd");
- }
-
- print ("\n");
-
- /* TODO: bogomips */
-
- if (tlb_size >= 0)
- bufptr += __small_sprintf (bufptr,
- "TLB size\t: %d 4K pages\n",
- tlb_size);
- bufptr += __small_sprintf (bufptr, "clflush size\t: %d\n"
- "cache_alignment\t: %d\n",
- clflush,
- cache_alignment);
-
- if (maxe >= 0x80000008) /* Address size. */
- {
- uint32_t addr_size, phys, virt;
- cpuid (&addr_size, &unused, &unused, &unused, 0x80000008);
-
- phys = addr_size & 0xff;
- virt = (addr_size >> 8) & 0xff;
- /* Fix an errata on Intel CPUs */
- if (is_intel && family == 15 && model == 3 && stepping == 4)
- phys = 36;
- bufptr += __small_sprintf (bufptr, "address sizes\t: "
- "%u bits physical, "
- "%u bits virtual\n",
- phys, virt);
- }
-
- if (maxe >= 0x80000007) /* Advanced power management. */
- {
- cpuid (&unused, &unused, &unused, &features1, 0x80000007);
-
- print ("power management:");
- if (features1 & (1 << 0))
- print (" ts");
- if (features1 & (1 << 1))
- print (" fid");
- if (features1 & (1 << 2))
- print (" vid");
- if (features1 & (1 << 3))
- print (" ttp");
- if (features1 & (1 << 4))
- print (" tm");
- if (features1 & (1 << 5))
- print (" stc");
- if (features1 & (1 << 6))
- print (" 100mhzsteps");
- if (features1 & (1 << 7))
- print (" hwpstate");
- }
- }
- else
- {
- bufptr += __small_sprintf (bufptr, "cpu MHz : %d\n"
- "fpu : %s\n",
- cpu_mhz,
- IsProcessorFeaturePresent (PF_FLOATING_POINT_EMULATED) ? "no" : "yes");
- }
- }
- if (orig_affinity_mask != 0)
- SetThreadAffinityMask (GetCurrentThread (), orig_affinity_mask);
- print ("\n");
- }
-
- destbuf = (char *) crealloc_abort (destbuf, bufptr - buf);
- memcpy (destbuf, buf, bufptr - buf);
- return bufptr - buf;
-}
-
-static off_t
-format_proc_partitions (void *, char *&destbuf)
-{
- OBJECT_ATTRIBUTES attr;
- IO_STATUS_BLOCK io;
- NTSTATUS status;
- HANDLE dirhdl;
- tmp_pathbuf tp;
-
- char *buf = tp.c_get ();
- char *bufptr = buf;
- char *ioctl_buf = tp.c_get ();
- PWCHAR mp_buf = tp.w_get ();
- WCHAR fpath[MAX_PATH];
- WCHAR gpath[MAX_PATH];
- DWORD len;
-
- /* Open \Device object directory. */
- wchar_t wpath[MAX_PATH] = L"\\Device";
- UNICODE_STRING upath = {14, 16, wpath};
- InitializeObjectAttributes (&attr, &upath, OBJ_CASE_INSENSITIVE, NULL, NULL);
- status = NtOpenDirectoryObject (&dirhdl, DIRECTORY_QUERY, &attr);
- if (!NT_SUCCESS (status))
- {
- debug_printf ("NtOpenDirectoryObject, status %y", status);
- __seterrno_from_nt_status (status);
- return 0;
- }
-
- /* Traverse \Device directory ... */
- PDIRECTORY_BASIC_INFORMATION dbi = (PDIRECTORY_BASIC_INFORMATION)
- alloca (640);
- BOOLEAN restart = TRUE;
- bool got_one = false;
- ULONG context = 0;
- while (NT_SUCCESS (NtQueryDirectoryObject (dirhdl, dbi, 640, TRUE, restart,
- &context, NULL)))
- {
- HANDLE devhdl;
- PARTITION_INFORMATION_EX *pix = NULL;
- PARTITION_INFORMATION *pi = NULL;
- DWORD bytes_read;
- DWORD part_cnt = 0;
- unsigned long long size;
- device dev;
-
- restart = FALSE;
- /* ... and check for a "Harddisk[0-9]*" entry. */
- if (dbi->ObjectName.Length < 9 * sizeof (WCHAR)
- || wcsncasecmp (dbi->ObjectName.Buffer, L"Harddisk", 8) != 0
- || !iswdigit (dbi->ObjectName.Buffer[8]))
- continue;
- /* Got it. Now construct the path to the entire disk, which is
- "\\Device\\HarddiskX\\Partition0", and open the disk with
- minimum permissions. */
- unsigned long drive_num = wcstoul (dbi->ObjectName.Buffer + 8, NULL, 10);
- wcscpy (wpath, dbi->ObjectName.Buffer);
- PWCHAR wpart = wpath + dbi->ObjectName.Length / sizeof (WCHAR);
- wcpcpy (wpart, L"\\Partition0");
- upath.Length = dbi->ObjectName.Length + 22;
- upath.MaximumLength = upath.Length + sizeof (WCHAR);
- InitializeObjectAttributes (&attr, &upath, OBJ_CASE_INSENSITIVE,
- dirhdl, NULL);
- status = NtOpenFile (&devhdl, READ_CONTROL, &attr, &io,
- FILE_SHARE_VALID_FLAGS, 0);
- if (!NT_SUCCESS (status))
- {
- debug_printf ("NtOpenFile(%S), status %y", &upath, status);
- __seterrno_from_nt_status (status);
- continue;
- }
- if (!got_one)
- {
- print ("major minor #blocks name win-mounts\n\n");
- got_one = true;
- }
- /* Fetch partition info for the entire disk to get its size. */
- if (DeviceIoControl (devhdl, IOCTL_DISK_GET_PARTITION_INFO_EX, NULL, 0,
- ioctl_buf, NT_MAX_PATH, &bytes_read, NULL))
- {
- pix = (PARTITION_INFORMATION_EX *) ioctl_buf;
- size = pix->PartitionLength.QuadPart;
- }
- else if (DeviceIoControl (devhdl, IOCTL_DISK_GET_PARTITION_INFO, NULL, 0,
- ioctl_buf, NT_MAX_PATH, &bytes_read, NULL))
- {
- pi = (PARTITION_INFORMATION *) ioctl_buf;
- size = pi->PartitionLength.QuadPart;
- }
- else
- {
- debug_printf ("DeviceIoControl (%S, "
- "IOCTL_DISK_GET_PARTITION_INFO{_EX}) %E", &upath);
- size = 0;
- }
- dev.parsedisk (drive_num, 0);
- bufptr += __small_sprintf (bufptr, "%5d %5d %9U %s\n",
- dev.get_major (), dev.get_minor (),
- size >> 10, dev.name + 5);
- /* Fetch drive layout info to get size of all partitions on the disk. */
- if (DeviceIoControl (devhdl, IOCTL_DISK_GET_DRIVE_LAYOUT_EX,
- NULL, 0, ioctl_buf, NT_MAX_PATH, &bytes_read, NULL))
- {
- PDRIVE_LAYOUT_INFORMATION_EX pdlix = (PDRIVE_LAYOUT_INFORMATION_EX)
- ioctl_buf;
- part_cnt = pdlix->PartitionCount;
- pix = pdlix->PartitionEntry;
- }
- else if (DeviceIoControl (devhdl, IOCTL_DISK_GET_DRIVE_LAYOUT,
- NULL, 0, ioctl_buf, NT_MAX_PATH, &bytes_read, NULL))
- {
- PDRIVE_LAYOUT_INFORMATION pdli = (PDRIVE_LAYOUT_INFORMATION) ioctl_buf;
- part_cnt = pdli->PartitionCount;
- pi = pdli->PartitionEntry;
- }
- else
- debug_printf ("DeviceIoControl(%S, "
- "IOCTL_DISK_GET_DRIVE_LAYOUT{_EX}): %E", &upath);
- /* Loop over partitions. */
- if (pix || pi)
- for (DWORD i = 0; i < part_cnt; ++i)
- {
- DWORD part_num;
-
- if (pix)
- {
- size = pix->PartitionLength.QuadPart;
- part_num = pix->PartitionNumber;
- ++pix;
- }
- else
- {
- size = pi->PartitionLength.QuadPart;
- part_num = pi->PartitionNumber;
- ++pi;
- }
- /* A partition number of 0 denotes an extended partition or a
- filler entry as described in fhandler_dev_floppy::lock_partition.
- Just skip. */
- if (part_num == 0)
- continue;
- dev.parsedisk (drive_num, part_num);
-
- bufptr += __small_sprintf (bufptr, "%5d %5d %9U %s",
- dev.get_major (), dev.get_minor (),
- size >> 10, dev.name + 5);
- /* Check if the partition is mounted in Windows and, if so,
- print the mount point list. */
- __small_swprintf (fpath,
- L"\\\\?\\GLOBALROOT\\Device\\%S\\Partition%u\\",
- &dbi->ObjectName, part_num);
- if (GetVolumeNameForVolumeMountPointW (fpath, gpath, MAX_PATH)
- && GetVolumePathNamesForVolumeNameW (gpath, mp_buf,
- NT_MAX_PATH, &len))
- {
- len = strlen (dev.name + 5);
- while (len++ < 6)
- *bufptr++ = ' ';
- for (PWCHAR p = mp_buf; *p; p = wcschr (p, L'\0') + 1)
- bufptr += __small_sprintf (bufptr, " %W", p);
- }
-
- *bufptr++ = '\n';
- }
- NtClose (devhdl);
- }
- NtClose (dirhdl);
-
- if (!got_one)
- return 0;
-
- destbuf = (char *) crealloc_abort (destbuf, bufptr - buf);
- memcpy (destbuf, buf, bufptr - buf);
- return bufptr - buf;
-}
-
-static off_t
-format_proc_self (void *, char *&destbuf)
-{
- destbuf = (char *) crealloc_abort (destbuf, 16);
- return __small_sprintf (destbuf, "%d", getpid ());
-}
-
-static off_t
-format_proc_cygdrive (void *, char *&destbuf)
-{
- destbuf = (char *) crealloc_abort (destbuf, mount_table->cygdrive_len + 1);
- char *dend = stpcpy (destbuf, mount_table->cygdrive);
- if (dend > destbuf + 1) /* cygdrive != "/"? */
- *--dend = '\0';
- return dend - destbuf;
-}
-
-static off_t
-format_proc_mounts (void *, char *&destbuf)
-{
- destbuf = (char *) crealloc_abort (destbuf, sizeof ("self/mounts"));
- return __small_sprintf (destbuf, "self/mounts");
-}
-
-static off_t
-format_proc_filesystems (void *, char *&destbuf)
-{
- tmp_pathbuf tp;
- char *buf = tp.c_get ();
- char *bufptr = buf;
-
- /* start at 1 to skip type "none" */
- for (int i = 1; fs_names[i].name; i++)
- bufptr += __small_sprintf(bufptr, "%s\t%s\n",
- fs_names[i].block_device ? "" : "nodev",
- fs_names[i].name);
-
- destbuf = (char *) crealloc_abort (destbuf, bufptr - buf);
- memcpy (destbuf, buf, bufptr - buf);
- return bufptr - buf;
-}
-
-static off_t
-format_proc_swaps (void *, char *&destbuf)
-{
- unsigned long long total = 0ULL, used = 0ULL;
- PSYSTEM_PAGEFILE_INFORMATION spi = NULL;
- ULONG size = 512;
- NTSTATUS status = STATUS_SUCCESS;
-
- tmp_pathbuf tp;
- char *buf = tp.c_get ();
- char *bufptr = buf;
-
- spi = (PSYSTEM_PAGEFILE_INFORMATION) malloc (size);
- if (spi)
- {
- status = NtQuerySystemInformation (SystemPagefileInformation, (PVOID) spi,
- size, &size);
- if (status == STATUS_INFO_LENGTH_MISMATCH)
- {
- free (spi);
- spi = (PSYSTEM_PAGEFILE_INFORMATION) malloc (size);
- if (spi)
- status = NtQuerySystemInformation (SystemPagefileInformation,
- (PVOID) spi, size, &size);
- }
- }
-
- bufptr += __small_sprintf (bufptr,
- "Filename\t\t\t\tType\t\tSize\tUsed\tPriority\n");
-
- if (spi && NT_SUCCESS (status))
- {
- PSYSTEM_PAGEFILE_INFORMATION spp = spi;
- char *filename = tp.c_get ();
- do
- {
- total = (unsigned long long) spp->CurrentSize * wincap.page_size ();
- used = (unsigned long long) spp->TotalUsed * wincap.page_size ();
- cygwin_conv_path (CCP_WIN_W_TO_POSIX, spp->FileName.Buffer,
- filename, NT_MAX_PATH);
- bufptr += sprintf (bufptr, "%-40s%-16s%-8llu%-8llu%-8d\n",
- filename, "file", total >> 10, used >> 10, 0);
- }
- while (spp->NextEntryOffset
- && (spp = (PSYSTEM_PAGEFILE_INFORMATION)
- ((char *) spp + spp->NextEntryOffset)));
- }
-
- if (spi)
- free (spi);
-
- destbuf = (char *) crealloc_abort (destbuf, bufptr - buf);
- memcpy (destbuf, buf, bufptr - buf);
- return bufptr - buf;
-}
-
-static off_t
-format_proc_devices (void *, char *&destbuf)
-{
- tmp_pathbuf tp;
- char *buf = tp.c_get ();
- char *bufptr = buf;
-
- bufptr += __small_sprintf (bufptr,
- "Character devices:\n"
- "%3d mem\n"
- "%3d cons\n"
- "%3d /dev/tty\n"
- "%3d /dev/console\n"
- "%3d /dev/ptmx\n"
- "%3d st\n"
- "%3d misc\n"
- "%3d sound\n"
- "%3d ttyS\n"
- "%3d tty\n"
- "\n"
- "Block devices:\n"
- "%3d fd\n"
- "%3d sd\n"
- "%3d sr\n"
- "%3d sd\n"
- "%3d sd\n"
- "%3d sd\n"
- "%3d sd\n"
- "%3d sd\n"
- "%3d sd\n"
- "%3d sd\n",
- DEV_MEM_MAJOR, DEV_CONS_MAJOR, _major (FH_TTY),
- _major (FH_CONSOLE), _major (FH_PTMX),
- DEV_TAPE_MAJOR, DEV_MISC_MAJOR, DEV_SOUND_MAJOR,
- DEV_SERIAL_MAJOR, DEV_PTYS_MAJOR, DEV_FLOPPY_MAJOR,
- DEV_SD_MAJOR, DEV_CDROM_MAJOR, DEV_SD1_MAJOR,
- DEV_SD2_MAJOR, DEV_SD3_MAJOR, DEV_SD4_MAJOR,
- DEV_SD5_MAJOR, DEV_SD6_MAJOR, DEV_SD7_MAJOR);
-
- destbuf = (char *) crealloc_abort (destbuf, bufptr - buf);
- memcpy (destbuf, buf, bufptr - buf);
- return bufptr - buf;
-}
-
-static off_t
-format_proc_misc (void *, char *&destbuf)
-{
- tmp_pathbuf tp;
- char *buf = tp.c_get ();
- char *bufptr = buf;
-
- bufptr += __small_sprintf (bufptr,
- "%3d clipboard\n"
- "%3d windows\n",
- _minor (FH_CLIPBOARD), _minor (FH_WINDOWS));
-
- destbuf = (char *) crealloc_abort (destbuf, bufptr - buf);
- memcpy (destbuf, buf, bufptr - buf);
- return bufptr - buf;
-}
-
-#undef print
diff --git a/winsup/cygwin/fhandler_process.cc b/winsup/cygwin/fhandler_process.cc
deleted file mode 100644
index e2de05b3c..000000000
--- a/winsup/cygwin/fhandler_process.cc
+++ /dev/null
@@ -1,1415 +0,0 @@
-/* fhandler_process.cc: fhandler for /proc/<pid> virtual filesystem
-
- Copyright 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012,
- 2013, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include <stdlib.h>
-#include <stdio.h>
-#include <sys/cygwin.h>
-#include "cygerrno.h"
-#include "security.h"
-#include "path.h"
-#include "fhandler.h"
-#include "fhandler_virtual.h"
-#include "pinfo.h"
-#include "shared_info.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "ntdll.h"
-#include "cygtls.h"
-#include "mount.h"
-#include "tls_pbuf.h"
-#include <sys/sysmacros.h>
-#include <sys/param.h>
-#include <ctype.h>
-
-#define _COMPILING_NEWLIB
-#include <dirent.h>
-
-static off_t format_process_maps (void *, char *&);
-static off_t format_process_stat (void *, char *&);
-static off_t format_process_status (void *, char *&);
-static off_t format_process_statm (void *, char *&);
-static off_t format_process_winexename (void *, char *&);
-static off_t format_process_winpid (void *, char *&);
-static off_t format_process_exename (void *, char *&);
-static off_t format_process_root (void *, char *&);
-static off_t format_process_cwd (void *, char *&);
-static off_t format_process_cmdline (void *, char *&);
-static off_t format_process_ppid (void *, char *&);
-static off_t format_process_uid (void *, char *&);
-static off_t format_process_pgid (void *, char *&);
-static off_t format_process_sid (void *, char *&);
-static off_t format_process_gid (void *, char *&);
-static off_t format_process_ctty (void *, char *&);
-static off_t format_process_fd (void *, char *&);
-static off_t format_process_mounts (void *, char *&);
-static off_t format_process_mountinfo (void *, char *&);
-
-static const virt_tab_t process_tab[] =
-{
- { _VN ("."), FH_PROCESS, virt_directory, NULL },
- { _VN (".."), FH_PROCESS, virt_directory, NULL },
- { _VN ("cmdline"), FH_PROCESS, virt_file, format_process_cmdline },
- { _VN ("ctty"), FH_PROCESS, virt_file, format_process_ctty },
- { _VN ("cwd"), FH_PROCESS, virt_symlink, format_process_cwd },
- { _VN ("exe"), FH_PROCESS, virt_symlink, format_process_exename },
- { _VN ("exename"), FH_PROCESS, virt_file, format_process_exename },
- { _VN ("fd"), FH_PROCESSFD, virt_directory, format_process_fd },
- { _VN ("gid"), FH_PROCESS, virt_file, format_process_gid },
- { _VN ("maps"), FH_PROCESS, virt_file, format_process_maps },
- { _VN ("mountinfo"), FH_PROCESS, virt_file, format_process_mountinfo },
- { _VN ("mounts"), FH_PROCESS, virt_file, format_process_mounts },
- { _VN ("pgid"), FH_PROCESS, virt_file, format_process_pgid },
- { _VN ("ppid"), FH_PROCESS, virt_file, format_process_ppid },
- { _VN ("root"), FH_PROCESS, virt_symlink, format_process_root },
- { _VN ("sid"), FH_PROCESS, virt_file, format_process_sid },
- { _VN ("stat"), FH_PROCESS, virt_file, format_process_stat },
- { _VN ("statm"), FH_PROCESS, virt_file, format_process_statm },
- { _VN ("status"), FH_PROCESS, virt_file, format_process_status },
- { _VN ("uid"), FH_PROCESS, virt_file, format_process_uid },
- { _VN ("winexename"), FH_PROCESS, virt_file, format_process_winexename },
- { _VN ("winpid"), FH_PROCESS, virt_file, format_process_winpid },
- { NULL, 0, FH_NADA, virt_none, NULL }
-};
-
-static const int PROCESS_LINK_COUNT =
- (sizeof (process_tab) / sizeof (virt_tab_t)) - 1;
-int get_process_state (DWORD dwProcessId);
-static bool get_mem_values (DWORD dwProcessId, unsigned long *vmsize,
- unsigned long *vmrss, unsigned long *vmtext,
- unsigned long *vmdata, unsigned long *vmlib,
- unsigned long *vmshare);
-
-/* Returns 0 if path doesn't exist, >0 if path is a directory,
- -1 if path is a file, -2 if path is a symlink, -3 if path is a pipe,
- -4 if path is a socket. */
-virtual_ftype_t
-fhandler_process::exists ()
-{
- const char *path = get_name ();
- debug_printf ("exists (%s)", path);
- path += proc_len + 1;
- while (*path != 0 && !isdirsep (*path))
- path++;
- if (*path == 0)
- return virt_rootdir;
-
- virt_tab_t *entry = virt_tab_search (path + 1, true, process_tab,
- PROCESS_LINK_COUNT);
- if (entry)
- {
- if (!path[entry->name_len + 1])
- {
- fileid = entry - process_tab;
- return entry->type;
- }
- if (entry->type == virt_directory)
- {
- fileid = entry - process_tab;
- if (fill_filebuf ())
- return virt_symlink;
- /* Check for nameless device entries. */
- path = strrchr (path, '/');
- if (path && *++path)
- {
- if (!strncmp (path, "pipe:[", 6))
- return virt_pipe;
- else if (!strncmp (path, "socket:[", 8))
- return virt_socket;
- }
- }
- }
- return virt_none;
-}
-
-fhandler_process::fhandler_process ():
- fhandler_proc ()
-{
-}
-
-int __reg2
-fhandler_process::fstat (struct stat *buf)
-{
- const char *path = get_name ();
- int file_type = exists ();
- fhandler_base::fstat (buf);
- path += proc_len + 1;
- pid = atoi (path);
-
- pinfo p (pid);
- /* If p->pid != pid, then pid is actually the Windows PID for an execed
- Cygwin process, and the pinfo entry is the additional entry created
- at exec time. We don't want to enable the user to access a process
- entry by using the Win32 PID, though. */
- if (!p || p->pid != pid)
- {
- set_errno (ENOENT);
- return -1;
- }
-
- buf->st_mode &= ~_IFMT & NO_W;
-
- switch (file_type)
- {
- case virt_none:
- set_errno (ENOENT);
- return -1;
- case virt_directory:
- case virt_rootdir:
- buf->st_ctime = buf->st_mtime = buf->st_birthtime = p->start_time;
- buf->st_ctim.tv_nsec = buf->st_mtim.tv_nsec
- = buf->st_birthtim.tv_nsec = 0;
- time_as_timestruc_t (&buf->st_atim);
- buf->st_uid = p->uid;
- buf->st_gid = p->gid;
- buf->st_mode |= S_IFDIR | S_IXUSR | S_IXGRP | S_IXOTH;
- if (file_type == 1)
- buf->st_nlink = 2;
- else
- buf->st_nlink = 3;
- return 0;
- case virt_symlink:
- buf->st_uid = p->uid;
- buf->st_gid = p->gid;
- buf->st_mode = S_IFLNK | S_IRWXU | S_IRWXG | S_IRWXO;
- return 0;
- case virt_pipe:
- buf->st_uid = p->uid;
- buf->st_gid = p->gid;
- buf->st_mode = S_IFIFO | S_IRUSR | S_IWUSR;
- return 0;
- case virt_socket:
- buf->st_uid = p->uid;
- buf->st_gid = p->gid;
- buf->st_mode = S_IFSOCK | S_IRUSR | S_IWUSR;
- return 0;
- case virt_file:
- default:
- buf->st_uid = p->uid;
- buf->st_gid = p->gid;
- buf->st_mode |= S_IFREG | S_IRUSR | S_IRGRP | S_IROTH;
- return 0;
- }
-}
-
-DIR *
-fhandler_process::opendir (int fd)
-{
- DIR *dir = fhandler_virtual::opendir (fd);
- if (dir && process_tab[fileid].fhandler == FH_PROCESSFD)
- fill_filebuf ();
- return dir;
-}
-
-int
-fhandler_process::closedir (DIR *dir)
-{
- return fhandler_virtual::closedir (dir);
-}
-
-int
-fhandler_process::readdir (DIR *dir, dirent *de)
-{
- int res = ENMFILE;
- if (process_tab[fileid].fhandler == FH_PROCESSFD)
- {
- if ((size_t) dir->__d_position >= 2 + filesize / sizeof (int))
- goto out;
- }
- else if (dir->__d_position >= PROCESS_LINK_COUNT)
- goto out;
- if (process_tab[fileid].fhandler == FH_PROCESSFD && dir->__d_position > 1)
- {
- int *p = (int *) filebuf;
- __small_sprintf (de->d_name, "%d", p[dir->__d_position++ - 2]);
- de->d_type = DT_LNK;
- }
- else
- {
- strcpy (de->d_name, process_tab[dir->__d_position].name);
- de->d_type = virt_ftype_to_dtype (process_tab[dir->__d_position].type);
- dir->__d_position++;
- }
- dir->__flags |= dirent_saw_dot | dirent_saw_dot_dot;
- res = 0;
-out:
- syscall_printf ("%d = readdir(%p, %p) (%s)", res, dir, de, de->d_name);
- return res;
-}
-
-int
-fhandler_process::open (int flags, mode_t mode)
-{
- int res = fhandler_virtual::open (flags, mode);
- if (!res)
- goto out;
-
- nohandle (true);
-
- const char *path;
- path = get_name () + proc_len + 1;
- pid = atoi (path);
- while (*path != 0 && !isdirsep (*path))
- path++;
-
- if (*path == 0)
- {
- if ((flags & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL))
- {
- set_errno (EEXIST);
- res = 0;
- goto out;
- }
- else if (flags & O_WRONLY)
- {
- set_errno (EISDIR);
- res = 0;
- goto out;
- }
- else
- {
- flags |= O_DIROPEN;
- goto success;
- }
- }
-
- virt_tab_t *entry;
- entry = virt_tab_search (path + 1, true, process_tab, PROCESS_LINK_COUNT);
- if (!entry)
- {
- set_errno ((flags & O_CREAT) ? EROFS : ENOENT);
- res = 0;
- goto out;
- }
- if (entry->fhandler == FH_PROCESSFD)
- {
- flags |= O_DIROPEN;
- goto success;
- }
- if (flags & O_WRONLY)
- {
- set_errno (EROFS);
- res = 0;
- goto out;
- }
-
- fileid = entry - process_tab;
- if (!fill_filebuf ())
- {
- res = 0;
- goto out;
- }
-
- if (flags & O_APPEND)
- position = filesize;
- else
- position = 0;
-
-success:
- res = 1;
- set_flags ((flags & ~O_TEXT) | O_BINARY);
- set_open_status ();
-out:
- syscall_printf ("%d = fhandler_proc::open(%y, 0%o)", res, flags, mode);
- return res;
-}
-
-struct process_fd_t {
- const char *path;
- _pinfo *p;
-};
-
-bool
-fhandler_process::fill_filebuf ()
-{
- const char *path;
- path = get_name () + proc_len + 1;
- if (!pid)
- pid = atoi (path);
-
- pinfo p (pid);
- /* If p->pid != pid, then pid is actually the Windows PID for an execed
- Cygwin process, and the pinfo entry is the additional entry created
- at exec time. We don't want to enable the user to access a process
- entry by using the Win32 PID, though. */
- if (!p || p->pid != pid)
- {
- set_errno (ENOENT);
- return false;
- }
-
- if (process_tab[fileid].format_func)
- {
- if (process_tab[fileid].fhandler == FH_PROCESSFD)
- {
- process_fd_t fd = { path, p };
- filesize = process_tab[fileid].format_func (&fd, filebuf);
- }
- else
- filesize = process_tab[fileid].format_func (p, filebuf);
- return !filesize ? false : true;
- }
- return false;
-}
-
-static off_t
-format_process_fd (void *data, char *&destbuf)
-{
- _pinfo *p = ((process_fd_t *) data)->p;
- const char *path = ((process_fd_t *) data)->path;
- size_t fs = 0;
- char *fdp = strrchr (path, '/');
-
- if (!fdp || *++fdp == 'f') /* The "fd" directory itself. */
- {
- if (destbuf)
- cfree (destbuf);
- destbuf = p->fds (fs);
- }
- else
- {
- if (destbuf)
- cfree (destbuf);
- int fd = atoi (fdp);
- if (fd < 0 || (fd == 0 && !isdigit (*fdp)))
- {
- set_errno (ENOENT);
- return 0;
- }
- destbuf = p->fd (fd, fs);
- if (!destbuf || !*destbuf)
- {
- set_errno (ENOENT);
- return 0;
- }
- }
- return fs;
-}
-
-static off_t
-format_process_ppid (void *data, char *&destbuf)
-{
- _pinfo *p = (_pinfo *) data;
- destbuf = (char *) crealloc_abort (destbuf, 40);
- return __small_sprintf (destbuf, "%d\n", p->ppid);
-}
-
-static off_t
-format_process_uid (void *data, char *&destbuf)
-{
- _pinfo *p = (_pinfo *) data;
- destbuf = (char *) crealloc_abort (destbuf, 40);
- return __small_sprintf (destbuf, "%d\n", p->uid);
-}
-
-static off_t
-format_process_pgid (void *data, char *&destbuf)
-{
- _pinfo *p = (_pinfo *) data;
- destbuf = (char *) crealloc_abort (destbuf, 40);
- return __small_sprintf (destbuf, "%d\n", p->pgid);
-}
-
-static off_t
-format_process_sid (void *data, char *&destbuf)
-{
- _pinfo *p = (_pinfo *) data;
- destbuf = (char *) crealloc_abort (destbuf, 40);
- return __small_sprintf (destbuf, "%d\n", p->sid);
-}
-
-static off_t
-format_process_gid (void *data, char *&destbuf)
-{
- _pinfo *p = (_pinfo *) data;
- destbuf = (char *) crealloc_abort (destbuf, 40);
- return __small_sprintf (destbuf, "%d\n", p->gid);
-}
-
-static off_t
-format_process_ctty (void *data, char *&destbuf)
-{
- _pinfo *p = (_pinfo *) data;
- if (p->ctty < 0)
- {
- destbuf = (char *) crealloc_abort (destbuf, 2);
- return __small_sprintf (destbuf, "\n");
- }
- device d;
- d.parse (p->ctty);
- destbuf = (char *) crealloc_abort (destbuf, strlen (d.name) + 2);
- return __small_sprintf (destbuf, "%s\n", d.name);
-}
-
-static off_t
-format_process_root (void *data, char *&destbuf)
-{
- _pinfo *p = (_pinfo *) data;
- size_t fs;
-
- if (destbuf)
- {
- cfree (destbuf);
- destbuf = NULL;
- }
- destbuf = p->root (fs);
- if (!destbuf || !*destbuf)
- {
- destbuf = cstrdup ("<defunct>");
- fs = strlen (destbuf) + 1;
- }
- return fs;
-}
-
-static off_t
-format_process_cwd (void *data, char *&destbuf)
-{
- _pinfo *p = (_pinfo *) data;
- size_t fs;
-
- if (destbuf)
- {
- cfree (destbuf);
- destbuf = NULL;
- }
- destbuf = p->cwd (fs);
- if (!destbuf || !*destbuf)
- {
- destbuf = cstrdup ("<defunct>");
- fs = strlen (destbuf) + 1;
- }
- return fs;
-}
-
-static off_t
-format_process_cmdline (void *data, char *&destbuf)
-{
- _pinfo *p = (_pinfo *) data;
- size_t fs;
-
- if (destbuf)
- {
- cfree (destbuf);
- destbuf = NULL;
- }
- destbuf = p->cmdline (fs);
- if (!destbuf || !*destbuf)
- {
- destbuf = cstrdup ("<defunct>");
- fs = strlen (destbuf) + 1;
- }
- return fs;
-}
-
-static off_t
-format_process_exename (void *data, char *&destbuf)
-{
- _pinfo *p = (_pinfo *) data;
- int len;
- tmp_pathbuf tp;
-
- char *buf = tp.c_get ();
- if (p->process_state & PID_EXITED)
- stpcpy (buf, "<defunct>");
- else
- {
- mount_table->conv_to_posix_path (p->progname, buf, 1);
- len = strlen (buf);
- if (len > 4)
- {
- char *s = buf + len - 4;
- if (ascii_strcasematch (s, ".exe"))
- *s = 0;
- }
- }
- destbuf = (char *) crealloc_abort (destbuf, (len = strlen (buf)) + 1);
- stpcpy (destbuf, buf);
- return len;
-}
-
-static off_t
-format_process_winpid (void *data, char *&destbuf)
-{
- _pinfo *p = (_pinfo *) data;
- destbuf = (char *) crealloc_abort (destbuf, 20);
- return __small_sprintf (destbuf, "%d\n", p->dwProcessId);
-}
-
-static off_t
-format_process_winexename (void *data, char *&destbuf)
-{
- _pinfo *p = (_pinfo *) data;
- size_t len = sys_wcstombs (NULL, 0, p->progname);
- destbuf = (char *) crealloc_abort (destbuf, len + 1);
- sys_wcstombs (destbuf, len, p->progname);
- destbuf[len] = '\n';
- return len + 1;
-}
-
-struct heap_info
-{
- struct heap
- {
- heap *next;
- unsigned heap_id;
- char *base;
- char *end;
- unsigned long flags;
- };
- heap *heap_vm_chunks;
-
- heap_info (DWORD pid)
- : heap_vm_chunks (NULL)
- {
- PDEBUG_BUFFER buf;
- NTSTATUS status;
- PDEBUG_HEAP_ARRAY harray;
-
- buf = RtlCreateQueryDebugBuffer (0, FALSE);
- if (!buf)
- return;
- status = RtlQueryProcessDebugInformation (pid, PDI_HEAPS | PDI_HEAP_BLOCKS,
- buf);
- if (NT_SUCCESS (status)
- && (harray = (PDEBUG_HEAP_ARRAY) buf->HeapInformation) != NULL)
- for (ULONG hcnt = 0; hcnt < harray->Count; ++hcnt)
- {
- PDEBUG_HEAP_BLOCK barray = (PDEBUG_HEAP_BLOCK)
- harray->Heaps[hcnt].Blocks;
- if (!barray)
- continue;
- for (ULONG bcnt = 0; bcnt < harray->Heaps[hcnt].BlockCount; ++bcnt)
- if (barray[bcnt].Flags & 2)
- {
- heap *h = (heap *) malloc (sizeof (heap));
- if (h)
- {
- *h = (heap) { heap_vm_chunks,
- hcnt, (char *) barray[bcnt].Address,
- (char *) barray[bcnt].Address
- + barray[bcnt].Size,
- harray->Heaps[hcnt].Flags };
- heap_vm_chunks = h;
- }
- }
- }
- RtlDestroyQueryDebugBuffer (buf);
- }
-
- char *fill_if_match (char *base, ULONG type, char *dest)
- {
- for (heap *h = heap_vm_chunks; h; h = h->next)
- if (base >= h->base && base < h->end)
- {
- char *p = dest + __small_sprintf (dest, "[win heap %ld", h->heap_id);
- if (!(h->flags & HEAP_FLAG_NONDEFAULT))
- p = stpcpy (p, " default");
- if ((h->flags & HEAP_FLAG_SHAREABLE) && (type & MEM_MAPPED))
- p = stpcpy (p, " shared");
- if (h->flags & HEAP_FLAG_EXECUTABLE)
- p = stpcpy (p, " exec");
- if (h->flags & HEAP_FLAG_GROWABLE)
- p = stpcpy (p, " grow");
- if (h->flags & HEAP_FLAG_NOSERIALIZE)
- p = stpcpy (p, " noserial");
- if (h->flags == HEAP_FLAG_DEBUGGED)
- p = stpcpy (p, " debug");
- stpcpy (p, "]");
- return dest;
- }
- return 0;
- }
-
- ~heap_info ()
- {
- heap *n = 0;
- for (heap *m = heap_vm_chunks; m; m = n)
- {
- n = m->next;
- free (m);
- }
- }
-};
-
-struct thread_info
-{
- struct region
- {
- region *next;
- ULONG thread_id;
- char *start;
- char *end;
- bool teb;
- };
- region *regions;
-
- thread_info (DWORD pid, HANDLE process)
- : regions (NULL)
- {
- NTSTATUS status;
- PVOID buf = NULL;
- ULONG size = 50 * (sizeof (SYSTEM_PROCESS_INFORMATION)
- + 16 * sizeof (SYSTEM_THREADS));
- PSYSTEM_PROCESS_INFORMATION proc;
- PSYSTEM_THREADS thread;
-
- do
- {
- buf = realloc (buf, size);
- status = NtQuerySystemInformation (SystemProcessInformation,
- buf, size, NULL);
- size <<= 1;
- }
- while (status == STATUS_INFO_LENGTH_MISMATCH);
- if (!NT_SUCCESS (status))
- {
- if (buf)
- free (buf);
- debug_printf ("NtQuerySystemInformation, %y", status);
- return;
- }
- proc = (PSYSTEM_PROCESS_INFORMATION) buf;
- while (true)
- {
- if ((DWORD) (uintptr_t) proc->UniqueProcessId == pid)
- break;
- if (!proc->NextEntryOffset)
- {
- free (buf);
- return;
- }
- proc = (PSYSTEM_PROCESS_INFORMATION) ((PBYTE) proc + proc->NextEntryOffset);
- }
- thread = proc->Threads;
- for (ULONG i = 0; i < proc->NumberOfThreads; ++i)
- {
- THREAD_BASIC_INFORMATION tbi;
- TEB teb;
- HANDLE thread_h;
-
- if (!(thread_h = OpenThread (THREAD_QUERY_INFORMATION, FALSE,
- (ULONG) (ULONG_PTR) thread[i].ClientId.UniqueThread)))
- continue;
- status = NtQueryInformationThread (thread_h, ThreadBasicInformation,
- &tbi, sizeof tbi, NULL);
- CloseHandle (thread_h);
- if (!NT_SUCCESS (status))
- continue;
- region *r = (region *) malloc (sizeof (region));
- if (r)
- {
- *r = (region) { regions, (ULONG) (ULONG_PTR) thread[i].ClientId.UniqueThread,
- (char *) tbi.TebBaseAddress,
- (char *) tbi.TebBaseAddress + wincap.page_size (),
- true };
- regions = r;
- }
- if (!ReadProcessMemory (process, (PVOID) tbi.TebBaseAddress,
- &teb, sizeof teb, NULL))
- continue;
- r = (region *) malloc (sizeof (region));
- if (r)
- {
- *r = (region) { regions, (ULONG) (ULONG_PTR) thread[i].ClientId.UniqueThread,
- (char *) (teb.DeallocationStack
- ?: teb.Tib.StackLimit),
- (char *) teb.Tib.StackBase,
- false };
- regions = r;
- }
- }
- free (buf);
- }
-
- char *fill_if_match (char *base, ULONG type, char *dest)
- {
- for (region *r = regions; r; r = r->next)
- if ((base >= r->start && base < r->end)
- /* Special case WOW64. The TEB is 8K within the region reserved
- for it. No idea what the lower 8K are used for. */
- || (r->teb && wincap.is_wow64 ()
- && r->start == base + 2 * wincap.page_size ()))
- {
- char *p = dest + __small_sprintf (dest, "[%s (tid %ld)",
- r->teb ? "teb" : "stack",
- r->thread_id);
- if (type & MEM_MAPPED)
- p = stpcpy (p, " shared");
- stpcpy (p, "]");
- return dest;
- }
- return 0;
- }
-
- ~thread_info ()
- {
- region *n = 0;
- for (region *m = regions; m; m = n)
- {
- n = m->next;
- free (m);
- }
- }
-};
-
-static off_t
-format_process_maps (void *data, char *&destbuf)
-{
- _pinfo *p = (_pinfo *) data;
- HANDLE proc = OpenProcess (PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,
- FALSE, p->dwProcessId);
- if (!proc)
- return 0;
-
- NTSTATUS status;
- PROCESS_BASIC_INFORMATION pbi;
- PPEB peb = NULL;
-
- memset (&pbi, 0, sizeof (pbi));
- status = NtQueryInformationProcess (proc, ProcessBasicInformation,
- &pbi, sizeof pbi, NULL);
- if (NT_SUCCESS (status))
- peb = pbi.PebBaseAddress;
- /* myself is in the same spot in every process, so is the pointer to the
- procinfo. But make sure the destructor doesn't try to release procinfo! */
- pinfo proc_pinfo;
- if (ReadProcessMemory (proc, &myself, &proc_pinfo, sizeof proc_pinfo, NULL))
- proc_pinfo.preserve ();
- /* The heap info on the cygheap is also in the same spot in each process
- because the cygheap is located at the same address. */
- user_heap_info user_heap;
- ReadProcessMemory (proc, &cygheap->user_heap, &user_heap,
- sizeof user_heap, NULL);
-
- off_t len = 0;
-
- union access
- {
- char flags[8];
- off_t word;
- } a;
-
- struct region {
- access a;
- char *abase;
- char *rbase;
- char *rend;
- } cur = {{{'\0'}}, (char *)1, 0, 0};
-
- MEMORY_BASIC_INFORMATION mb;
- dos_drive_mappings drive_maps;
- heap_info heaps (p->dwProcessId);
- thread_info threads (p->dwProcessId, proc);
- struct stat st;
- long last_pass = 0;
-
- tmp_pathbuf tp;
- PMEMORY_SECTION_NAME msi = (PMEMORY_SECTION_NAME) tp.w_get ();
- char *posix_modname = tp.c_get ();
- size_t maxsize = 0;
-
- if (destbuf)
- {
- cfree (destbuf);
- destbuf = NULL;
- }
-
- /* Iterate over each VM region in the address space, coalescing
- memory regions with the same permissions. Once we run out, do one
- last_pass to trigger output of the last accumulated region.
-
- FIXME: 32 bit processes can't get address information beyond the
- 32 bit address space from 64 bit processes. We have to run
- this functionality in the target process, if the target
- process is 64 bit and our own process is 32 bit. */
- for (char *i = 0;
- VirtualQueryEx (proc, i, &mb, sizeof(mb)) || (1 == ++last_pass);
- i = cur.rend)
- {
- if (last_pass)
- posix_modname[0] = '\0';
- if (mb.State == MEM_FREE)
- a.word = 0;
- else if (mb.State == MEM_RESERVE)
- {
- char *p = stpcpy (a.flags, "===");
- stpcpy (p, (mb.Type & MEM_MAPPED) ? "s" : "p");
- }
- else
- {
- static DWORD const RO = (PAGE_EXECUTE_READ | PAGE_READONLY);
- static DWORD const RW = (PAGE_EXECUTE_READWRITE | PAGE_READWRITE
- | PAGE_EXECUTE_WRITECOPY | PAGE_WRITECOPY);
- static DWORD const X = (PAGE_EXECUTE | PAGE_EXECUTE_READ
- | PAGE_EXECUTE_READWRITE | PAGE_EXECUTE_WRITECOPY);
- static DWORD const WC = (PAGE_EXECUTE_WRITECOPY | PAGE_WRITECOPY);
- DWORD p = mb.Protect;
- a = (access) {{
- (p & (RO | RW)) ? 'r' : '-',
- (p & (RW)) ? 'w' : '-',
- (p & (X)) ? 'x' : '-',
- (mb.Type & MEM_MAPPED) && !(p & (WC)) ? 's'
- : (p & PAGE_GUARD) ? 'g' : 'p',
- '\0', // zero-fill the remaining bytes
- }};
- }
-
- region next = { a,
- (char *) mb.AllocationBase,
- (char *) mb.BaseAddress,
- (char *) mb.BaseAddress+mb.RegionSize
- };
-
- /* Windows permissions are more fine-grained than the unix rwxp,
- so we reduce clutter by manually coalescing regions sharing
- the same allocation base and effective permissions. */
- bool newbase = (next.abase != cur.abase);
- if (!last_pass && !newbase && next.a.word == cur.a.word)
- cur.rend = next.rend; /* merge with previous */
- else
- {
- /* output the current region if it's "interesting". */
- if (cur.a.word)
- {
- size_t newlen = strlen (posix_modname) + 62;
- if (len + newlen >= maxsize)
- destbuf = (char *)
- crealloc_abort (destbuf,
- maxsize += roundup2 (newlen, 2048UL));
- int written = __small_sprintf (destbuf + len,
- "%08lx-%08lx %s %08lx %04x:%04x %U ",
- cur.rbase, cur.rend, cur.a.flags,
- cur.rbase - cur.abase,
- st.st_dev >> 16,
- st.st_dev & 0xffff,
- st.st_ino);
- while (written < 62)
- destbuf[len + written++] = ' ';
- len += written;
- len += __small_sprintf (destbuf + len, "%s\n", posix_modname);
- }
- /* start of a new region (but possibly still the same allocation). */
- cur = next;
- /* if a new allocation, figure out what kind it is. */
- if (newbase && !last_pass && mb.State != MEM_FREE)
- {
- /* If the return length pointer is missing, NtQueryVirtualMemory
- returns with STATUS_ACCESS_VIOLATION on Windows 2000. */
- SIZE_T ret_len = 0;
-
- st.st_dev = 0;
- st.st_ino = 0;
- if ((mb.Type & (MEM_MAPPED | MEM_IMAGE))
- && NT_SUCCESS (status = NtQueryVirtualMemory (proc, cur.abase,
- MemorySectionName,
- msi, 65536, &ret_len)))
- {
- PWCHAR dosname =
- drive_maps.fixup_if_match (msi->SectionFileName.Buffer);
- if (mount_table->conv_to_posix_path (dosname,
- posix_modname, 0))
- sys_wcstombs (posix_modname, NT_MAX_PATH, dosname);
- stat64 (posix_modname, &st);
- }
- else if (!threads.fill_if_match (cur.abase, mb.Type,
- posix_modname)
- && !heaps.fill_if_match (cur.abase, mb.Type,
- posix_modname))
- {
- if (cur.abase == (char *) peb)
- strcpy (posix_modname, "[peb]");
- else if (cur.abase == (char *) &SharedUserData)
- strcpy (posix_modname, "[shared-user-data]");
- else if (cur.abase == (char *) cygwin_shared)
- strcpy (posix_modname, "[cygwin-shared]");
- else if (cur.abase == (char *) user_shared)
- strcpy (posix_modname, "[cygwin-user-shared]");
- else if (cur.abase == (char *) *proc_pinfo)
- strcpy (posix_modname, "[procinfo]");
- else if (cur.abase == user_heap.base)
- strcpy (posix_modname, "[heap]");
- else
- posix_modname[0] = 0;
- }
- }
- }
- }
- CloseHandle (proc);
- return len;
-}
-
-static off_t
-format_process_stat (void *data, char *&destbuf)
-{
- _pinfo *p = (_pinfo *) data;
- char cmd[NAME_MAX + 1];
- int state = 'R';
- unsigned long fault_count = 0UL,
- utime = 0UL, stime = 0UL,
- start_time = 0UL,
- vmsize = 0UL, vmrss = 0UL, vmmaxrss = 0UL;
- int priority = 0;
- if (p->process_state & PID_EXITED)
- strcpy (cmd, "<defunct>");
- else
- {
- PWCHAR last_slash = wcsrchr (p->progname, L'\\');
- sys_wcstombs (cmd, NAME_MAX + 1,
- last_slash ? last_slash + 1 : p->progname);
- int len = strlen (cmd);
- if (len > 4)
- {
- char *s = cmd + len - 4;
- if (ascii_strcasematch (s, ".exe"))
- *s = 0;
- }
- }
- /* Note: under Windows, a process is always running - it's only threads
- that get suspended. Therefore the default state is R (runnable). */
- if (p->process_state & PID_EXITED)
- state = 'Z';
- else if (p->process_state & PID_STOPPED)
- state = 'T';
- else
- state = get_process_state (p->dwProcessId);
- start_time = (GetTickCount () / 1000 - time (NULL) + p->start_time) * HZ;
-
- NTSTATUS status;
- HANDLE hProcess;
- VM_COUNTERS vmc;
- KERNEL_USER_TIMES put;
- PROCESS_BASIC_INFORMATION pbi;
- QUOTA_LIMITS ql;
- SYSTEM_TIMEOFDAY_INFORMATION stodi;
- SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION spt;
- hProcess = OpenProcess (PROCESS_VM_READ | PROCESS_QUERY_INFORMATION,
- FALSE, p->dwProcessId);
- if (hProcess != NULL)
- {
- status = NtQueryInformationProcess (hProcess, ProcessVmCounters,
- (PVOID) &vmc, sizeof vmc, NULL);
- if (NT_SUCCESS (status))
- status = NtQueryInformationProcess (hProcess, ProcessTimes,
- (PVOID) &put, sizeof put, NULL);
- if (NT_SUCCESS (status))
- status = NtQueryInformationProcess (hProcess, ProcessBasicInformation,
- (PVOID) &pbi, sizeof pbi, NULL);
- if (NT_SUCCESS (status))
- status = NtQueryInformationProcess (hProcess, ProcessQuotaLimits,
- (PVOID) &ql, sizeof ql, NULL);
- CloseHandle (hProcess);
- }
- else
- {
- DWORD error = GetLastError ();
- __seterrno_from_win_error (error);
- debug_printf ("OpenProcess: ret %u", error);
- return 0;
- }
- if (NT_SUCCESS (status))
- status = NtQuerySystemInformation (SystemTimeOfDayInformation,
- (PVOID) &stodi, sizeof stodi, NULL);
- if (NT_SUCCESS (status))
- status = NtQuerySystemInformation (SystemProcessorPerformanceInformation,
- (PVOID) &spt, sizeof spt, NULL);
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- debug_printf ("NtQueryInformationProcess: status %y, %E", status);
- return 0;
- }
- fault_count = vmc.PageFaultCount;
- utime = put.UserTime.QuadPart * HZ / 10000000ULL;
- stime = put.KernelTime.QuadPart * HZ / 10000000ULL;
-#if 0
- if (stodi.CurrentTime.QuadPart > put.CreateTime.QuadPart)
- start_time = (spt.KernelTime.QuadPart + spt.UserTime.QuadPart -
- stodi.CurrentTime.QuadPart + put.CreateTime.QuadPart) * HZ / 10000000ULL;
- else
- /*
- * sometimes stodi.CurrentTime is a bit behind
- * Note: some older versions of procps are broken and can't cope
- * with process start times > time(NULL).
- */
- start_time = (spt.KernelTme.QuadPart + spt.UserTime.QuadPart) * HZ / 10000000ULL;
-#endif
- /* The BasePriority returned to a 32 bit process under WOW64 is
- apparently broken, for 32 and 64 bit target processes. 64 bit
- processes get the correct base priority, even for 32 bit processes. */
- if (wincap.is_wow64 ())
- priority = 8; /* Default value. */
- else
- priority = pbi.BasePriority;
- unsigned page_size = wincap.page_size ();
- vmsize = vmc.PagefileUsage;
- vmrss = vmc.WorkingSetSize / page_size;
- vmmaxrss = ql.MaximumWorkingSetSize / page_size;
-
- destbuf = (char *) crealloc_abort (destbuf, strlen (cmd) + 320);
- return __small_sprintf (destbuf, "%d (%s) %c "
- "%d %d %d %d %d "
- "%u %lu %lu %u %u %lu %lu "
- "%ld %ld %d %d %d %d "
- "%lu %lu "
- "%ld %lu",
- p->pid, cmd, state,
- p->ppid, p->pgid, p->sid, p->ctty, -1,
- 0, fault_count, fault_count, 0, 0, utime, stime,
- utime, stime, priority, 0, 0, 0,
- start_time, vmsize,
- vmrss, vmmaxrss
- );
-}
-
-static off_t
-format_process_status (void *data, char *&destbuf)
-{
- _pinfo *p = (_pinfo *) data;
- char cmd[NAME_MAX + 1];
- int state = 'R';
- const char *state_str = "unknown";
- unsigned long vmsize = 0UL, vmrss = 0UL, vmdata = 0UL, vmlib = 0UL,
- vmtext = 0UL, vmshare = 0UL;
-
- PWCHAR last_slash = wcsrchr (p->progname, L'\\');
- sys_wcstombs (cmd, NAME_MAX + 1, last_slash ? last_slash + 1 : p->progname);
- int len = strlen (cmd);
- if (len > 4)
- {
- char *s = cmd + len - 4;
- if (ascii_strcasematch (s, ".exe"))
- *s = 0;
- }
- /* Note: under Windows, a process is always running - it's only threads
- that get suspended. Therefore the default state is R (runnable). */
- if (p->process_state & PID_EXITED)
- state = 'Z';
- else if (p->process_state & PID_STOPPED)
- state = 'T';
- else
- state = get_process_state (p->dwProcessId);
- switch (state)
- {
- case 'O':
- state_str = "running";
- break;
- case 'D':
- case 'S':
- state_str = "sleeping";
- break;
- case 'R':
- state_str = "runnable";
- break;
- case 'Z':
- state_str = "zombie";
- break;
- case 'T':
- state_str = "stopped";
- break;
- }
- if (!get_mem_values (p->dwProcessId, &vmsize, &vmrss, &vmtext, &vmdata,
- &vmlib, &vmshare))
- return 0;
- unsigned page_size = wincap.page_size ();
- vmsize *= page_size; vmrss *= page_size; vmdata *= page_size;
- vmtext *= page_size; vmlib *= page_size;
- /* The real uid value for *this* process is stored at cygheap->user.real_uid
- but we can't get at the real uid value for any other process, so
- just fake it as p->uid. Similar for p->gid. */
- destbuf = (char *) crealloc_abort (destbuf, strlen (cmd) + 320);
- return __small_sprintf (destbuf, "Name:\t%s\n"
- "State:\t%c (%s)\n"
- "Tgid:\t%d\n"
- "Pid:\t%d\n"
- "PPid:\t%d\n"
- "Uid:\t%d %d %d %d\n"
- "Gid:\t%d %d %d %d\n"
- "VmSize:\t%8d kB\n"
- "VmLck:\t%8d kB\n"
- "VmRSS:\t%8d kB\n"
- "VmData:\t%8d kB\n"
- "VmStk:\t%8d kB\n"
- "VmExe:\t%8d kB\n"
- "VmLib:\t%8d kB\n"
- "SigPnd:\t%016x\n"
- "SigBlk:\t%016x\n"
- "SigIgn:\t%016x\n",
- cmd,
- state, state_str,
- p->pgid,
- p->pid,
- p->ppid,
- p->uid, p->uid, p->uid, p->uid,
- p->gid, p->gid, p->gid, p->gid,
- vmsize >> 10, 0, vmrss >> 10, vmdata >> 10, 0,
- vmtext >> 10, vmlib >> 10,
- 0, 0, _my_tls.sigmask
- );
-}
-
-static off_t
-format_process_statm (void *data, char *&destbuf)
-{
- _pinfo *p = (_pinfo *) data;
- unsigned long vmsize = 0UL, vmrss = 0UL, vmtext = 0UL, vmdata = 0UL,
- vmlib = 0UL, vmshare = 0UL;
- if (!get_mem_values (p->dwProcessId, &vmsize, &vmrss, &vmtext, &vmdata,
- &vmlib, &vmshare))
- return 0;
- destbuf = (char *) crealloc_abort (destbuf, 96);
- return __small_sprintf (destbuf, "%ld %ld %ld %ld %ld %ld 0\n",
- vmsize, vmrss, vmshare, vmtext, vmlib, vmdata);
-}
-
-extern "C" {
- FILE *setmntent (const char *, const char *);
- struct mntent *getmntent (FILE *);
-};
-
-static off_t
-format_process_mountstuff (void *data, char *&destbuf, bool mountinfo)
-{
- _pinfo *p = (_pinfo *) data;
- user_info *u_shared = NULL;
- HANDLE u_hdl = NULL;
- off_t len = 0;
- struct mntent *mnt;
-
- if (p->uid != myself->uid)
- {
- WCHAR sid_string[UNLEN + 1] = L""; /* Large enough for SID */
-
- cygsid p_sid;
-
- if (!p_sid.getfrompw (internal_getpwuid (p->uid)))
- return 0;
- p_sid.string (sid_string);
- u_shared = (user_info *) open_shared (sid_string, USER_VERSION, u_hdl,
- sizeof (user_info), SH_JUSTOPEN,
- &sec_none_nih);
- if (!u_shared)
- return 0;
- }
- else
- u_shared = user_shared;
- mount_info *mtab = &u_shared->mountinfo;
-
- /* Store old value of _my_tls.locals here. */
- int iteration = _my_tls.locals.iteration;
- unsigned available_drives = _my_tls.locals.available_drives;
- /* This reinitializes the above values in _my_tls. */
- setmntent (NULL, NULL);
- /* Restore iteration immediately since it's not used below. We use the
- local iteration variable instead*/
- _my_tls.locals.iteration = iteration;
-
- for (iteration = 0; (mnt = mtab->getmntent (iteration)); ++iteration)
- {
- /* We have no access to the drives mapped into another user session and
- _my_tls.locals.available_drives contains the mappings of the current
- user. So, when printing the mount table of another user, we check
- each cygdrive entry if it's a remote drive. If so, ignore it. */
- if (iteration >= mtab->nmounts && u_hdl)
- {
- WCHAR drive[3] = { (WCHAR) mnt->mnt_fsname[0], L':', L'\0' };
- disk_type dt = get_disk_type (drive);
-
- if (dt == DT_SHARE_SMB || dt == DT_SHARE_NFS)
- continue;
- }
- destbuf = (char *) crealloc_abort (destbuf, len
- + strlen (mnt->mnt_fsname)
- + strlen (mnt->mnt_dir)
- + strlen (mnt->mnt_type)
- + strlen (mnt->mnt_opts)
- + 30);
- if (mountinfo)
- {
- path_conv pc (mnt->mnt_dir, PC_SYM_NOFOLLOW | PC_POSIX);
- dev_t dev = pc.exists () ? pc.fs_serial_number () : -1;
-
- len += __small_sprintf (destbuf + len,
- "%d %d %d:%d / %s %s - %s %s %s\n",
- iteration, iteration,
- major (dev), minor (dev),
- mnt->mnt_dir, mnt->mnt_opts,
- mnt->mnt_type, mnt->mnt_fsname,
- (pc.fs_flags () & FILE_READ_ONLY_VOLUME)
- ? "ro" : "rw");
- }
- else
- len += __small_sprintf (destbuf + len, "%s %s %s %s %d %d\n",
- mnt->mnt_fsname, mnt->mnt_dir, mnt->mnt_type,
- mnt->mnt_opts, mnt->mnt_freq, mnt->mnt_passno);
- }
-
- /* Restore available_drives */
- _my_tls.locals.available_drives = available_drives;
-
- if (u_hdl) /* Only not-NULL if open_shared has been called. */
- {
- UnmapViewOfFile (u_shared);
- CloseHandle (u_hdl);
- }
- return len;
-}
-
-static off_t
-format_process_mounts (void *data, char *&destbuf)
-{
- return format_process_mountstuff (data, destbuf, false);
-}
-
-static off_t
-format_process_mountinfo (void *data, char *&destbuf)
-{
- return format_process_mountstuff (data, destbuf, true);
-}
-
-int
-get_process_state (DWORD dwProcessId)
-{
- /* This isn't really heavy magic - just go through the processes' threads
- one by one and return a value accordingly. Errors are silently ignored. */
- NTSTATUS status;
- PSYSTEM_PROCESS_INFORMATION p, sp;
- ULONG n = 0x4000;
- int state =' ';
-
- p = (PSYSTEM_PROCESS_INFORMATION) malloc (n);
- if (!p)
- return state;
- while (true)
- {
- status = NtQuerySystemInformation (SystemProcessInformation,
- (PVOID) p, n, NULL);
- if (status != STATUS_INFO_LENGTH_MISMATCH)
- break;
- n <<= 1;
- PSYSTEM_PROCESS_INFORMATION new_p = (PSYSTEM_PROCESS_INFORMATION) realloc (p, n);
- if (!new_p)
- goto out;
- p = new_p;
- }
- if (!NT_SUCCESS (status))
- {
- debug_printf ("NtQuerySystemInformation: status %y, %u",
- status, RtlNtStatusToDosError (status));
- goto out;
- }
- state = 'Z';
- sp = p;
- for (;;)
- {
- if ((DWORD) (uintptr_t) sp->UniqueProcessId == dwProcessId)
- {
- SYSTEM_THREADS *st;
- st = &sp->Threads[0];
- state = 'S';
- for (unsigned i = 0; i < sp->NumberOfThreads; i++)
- {
- /* FIXME: at some point we should consider generating 'O' */
- if (st->State == StateRunning ||
- st->State == StateReady)
- {
- state = 'R';
- goto out;
- }
- st++;
- }
- break;
- }
- if (!sp->NextEntryOffset)
- break;
- sp = (PSYSTEM_PROCESS_INFORMATION) ((char *) sp + sp->NextEntryOffset);
- }
-out:
- free (p);
- return state;
-}
-
-static bool
-get_mem_values (DWORD dwProcessId, unsigned long *vmsize, unsigned long *vmrss,
- unsigned long *vmtext, unsigned long *vmdata,
- unsigned long *vmlib, unsigned long *vmshare)
-{
- bool res = false;
- NTSTATUS status;
- HANDLE hProcess;
- VM_COUNTERS vmc;
- PMEMORY_WORKING_SET_LIST p;
- SIZE_T n = 0x4000, length;
-
- hProcess = OpenProcess (PROCESS_QUERY_INFORMATION, FALSE, dwProcessId);
- if (hProcess == NULL)
- {
- __seterrno ();
- debug_printf ("OpenProcess, %E");
- return false;
- }
- p = (PMEMORY_WORKING_SET_LIST) malloc (n);
- if (!p)
- goto out;
- while (true)
- {
- status = NtQueryVirtualMemory (hProcess, 0, MemoryWorkingSetList,
- (PVOID) p, n,
- (length = (SIZE_T) -1, &length));
- if (status != STATUS_INFO_LENGTH_MISMATCH)
- break;
- n <<= 1;
- PMEMORY_WORKING_SET_LIST new_p = (PMEMORY_WORKING_SET_LIST)
- realloc (p, n);
- if (!new_p)
- goto out;
- p = new_p;
- }
- if (!NT_SUCCESS (status))
- {
- debug_printf ("NtQueryVirtualMemory: status %y", status);
- if (status == STATUS_PROCESS_IS_TERMINATING)
- {
- *vmsize = *vmrss = *vmtext = *vmdata = *vmlib = *vmshare = 0;
- res = true;
- }
- else
- __seterrno_from_nt_status (status);
- goto out;
- }
- for (unsigned long i = 0; i < p->NumberOfPages; i++)
- {
- ++*vmrss;
- unsigned flags = p->WorkingSetList[i] & 0x0FFF;
- if ((flags & (WSLE_PAGE_EXECUTE | WSLE_PAGE_SHAREABLE))
- == (WSLE_PAGE_EXECUTE | WSLE_PAGE_SHAREABLE))
- ++*vmlib;
- else if (flags & WSLE_PAGE_SHAREABLE)
- ++*vmshare;
- else if (flags & WSLE_PAGE_EXECUTE)
- ++*vmtext;
- else
- ++*vmdata;
- }
- status = NtQueryInformationProcess (hProcess, ProcessVmCounters, (PVOID) &vmc,
- sizeof vmc, NULL);
- if (!NT_SUCCESS (status))
- {
- debug_printf ("NtQueryInformationProcess: status %y", status);
- __seterrno_from_nt_status (status);
- goto out;
- }
- *vmsize = vmc.PagefileUsage / wincap.page_size ();
- res = true;
-out:
- free (p);
- CloseHandle (hProcess);
- return res;
-}
diff --git a/winsup/cygwin/fhandler_procnet.cc b/winsup/cygwin/fhandler_procnet.cc
deleted file mode 100644
index 1961fdda3..000000000
--- a/winsup/cygwin/fhandler_procnet.cc
+++ /dev/null
@@ -1,278 +0,0 @@
-/* fhandler_procnet.cc: fhandler for /proc/net virtual filesystem
-
- Copyright 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#define __INSIDE_CYGWIN_NET__
-#define USE_SYS_TYPES_FD_SET
-#include "winsup.h"
-#ifdef __x86_64__
-/* 2014-04-24: Current Mingw headers define sockaddr_in6 using u_long (8 byte)
- because a redefinition for LP64 systems is missing. This leads to a wrong
- definition and size of sockaddr_in6 when building with winsock headers. */
-#undef u_long
-#define u_long __ms_u_long
-#endif
-#include <ws2tcpip.h>
-#include <iphlpapi.h>
-#include "cygerrno.h"
-#include "security.h"
-#include "path.h"
-#include "fhandler.h"
-#include "fhandler_virtual.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include <asm/byteorder.h>
-
-#define _COMPILING_NEWLIB
-#include <dirent.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-extern "C" int ip_addr_prefix (PIP_ADAPTER_UNICAST_ADDRESS pua,
- PIP_ADAPTER_PREFIX pap);
-bool get_adapters_addresses (PIP_ADAPTER_ADDRESSES *pa0, ULONG family);
-
-static off_t format_procnet_ifinet6 (void *, char *&);
-
-static const virt_tab_t procnet_tab[] =
-{
- { _VN ("."), FH_PROCNET, virt_directory, NULL },
- { _VN (".."), FH_PROCNET, virt_directory, NULL },
- { _VN ("if_inet6"), FH_PROCNET, virt_file, format_procnet_ifinet6 },
- { NULL, 0, FH_NADA, virt_none, NULL }
-};
-
-static const int PROCNET_LINK_COUNT =
- (sizeof (procnet_tab) / sizeof (virt_tab_t)) - 1;
-
-/* Returns 0 if path doesn't exist, >0 if path is a directory,
- * -1 if path is a file, -2 if path is a symlink, -3 if path is a pipe,
- * -4 if path is a socket.
- */
-virtual_ftype_t
-fhandler_procnet::exists ()
-{
- const char *path = get_name ();
- debug_printf ("exists (%s)", path);
- path += proc_len + 1;
- while (*path != 0 && !isdirsep (*path))
- path++;
- if (*path == 0)
- return virt_rootdir;
-
- virt_tab_t *entry = virt_tab_search (path + 1, false, procnet_tab,
- PROCNET_LINK_COUNT);
- if (entry)
- {
- if (entry->type == virt_file && !get_adapters_addresses (NULL, AF_INET6))
- return virt_none;
- fileid = entry - procnet_tab;
- return entry->type;
- }
- return virt_none;
-}
-
-fhandler_procnet::fhandler_procnet ():
- fhandler_proc ()
-{
-}
-
-int __reg2
-fhandler_procnet::fstat (struct stat *buf)
-{
- fhandler_base::fstat (buf);
- buf->st_mode &= ~_IFMT & NO_W;
- int file_type = exists ();
- switch (file_type)
- {
- case virt_none:
- set_errno (ENOENT);
- return -1;
- case virt_directory:
- case virt_rootdir:
- buf->st_mode |= S_IFDIR | S_IXUSR | S_IXGRP | S_IXOTH;
- buf->st_nlink = 2;
- return 0;
- case virt_file:
- default:
- buf->st_mode |= S_IFREG | S_IRUSR | S_IRGRP | S_IROTH;
- return 0;
- }
-}
-
-int
-fhandler_procnet::readdir (DIR *dir, dirent *de)
-{
- int res = ENMFILE;
- if (dir->__d_position >= PROCNET_LINK_COUNT)
- goto out;
- if (procnet_tab[dir->__d_position].type == virt_file
- && !get_adapters_addresses (NULL, AF_INET6))
- goto out;
- strcpy (de->d_name, procnet_tab[dir->__d_position].name);
- de->d_type = virt_ftype_to_dtype (procnet_tab[dir->__d_position].type);
- dir->__d_position++;
- dir->__flags |= dirent_saw_dot | dirent_saw_dot_dot;
- res = 0;
-out:
- syscall_printf ("%d = readdir(%p, %p) (%s)", res, dir, de, de->d_name);
- return res;
-}
-
-int
-fhandler_procnet::open (int flags, mode_t mode)
-{
- int res = fhandler_virtual::open (flags, mode);
- if (!res)
- goto out;
-
- nohandle (true);
-
- const char *path;
- path = get_name () + proc_len + 1;
- while (*path != 0 && !isdirsep (*path))
- path++;
-
- if (*path == 0)
- {
- if ((flags & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL))
- {
- set_errno (EEXIST);
- res = 0;
- goto out;
- }
- else if (flags & O_WRONLY)
- {
- set_errno (EISDIR);
- res = 0;
- goto out;
- }
- else
- {
- flags |= O_DIROPEN;
- goto success;
- }
- }
-
- virt_tab_t *entry;
- entry = virt_tab_search (path + 1, true, procnet_tab, PROCNET_LINK_COUNT);
- if (!entry)
- {
- set_errno ((flags & O_CREAT) ? EROFS : ENOENT);
- res = 0;
- goto out;
- }
- if (flags & O_WRONLY)
- {
- set_errno (EROFS);
- res = 0;
- goto out;
- }
-
- fileid = entry - procnet_tab;
- if (!fill_filebuf ())
- {
- res = 0;
- goto out;
- }
-
- if (flags & O_APPEND)
- position = filesize;
- else
- position = 0;
-
-success:
- res = 1;
- set_flags ((flags & ~O_TEXT) | O_BINARY);
- set_open_status ();
-out:
- syscall_printf ("%d = fhandler_proc::open(%y, 0%o)", res, flags, mode);
- return res;
-}
-
-bool
-fhandler_procnet::fill_filebuf ()
-{
- if (procnet_tab[fileid].format_func)
- {
- filesize = procnet_tab[fileid].format_func (NULL, filebuf);
- return true;
- }
- return false;
-}
-
-/* Return the same scope values as Linux. */
-static unsigned int
-get_scope (struct in6_addr *addr)
-{
- if (IN6_IS_ADDR_LOOPBACK (addr))
- return 0x10;
- if (IN6_IS_ADDR_LINKLOCAL (addr))
- return 0x20;
- if (IN6_IS_ADDR_SITELOCAL (addr))
- return 0x40;
- if (IN6_IS_ADDR_V4COMPAT (addr))
- return 0x80;
- return 0x0;
-}
-
-/* Convert DAD state into Linux compatible values. */
-static unsigned int dad_to_flags[] =
-{
- 0x02, /* Invalid -> NODAD */
- 0x40, /* Tentative -> TENTATIVE */
- 0xc0, /* Duplicate -> PERMANENT | TENTATIVE */
- 0x20, /* Deprecated -> DEPRECATED */
- 0x80 /* Preferred -> PERMANENT */
-};
-
-static off_t
-format_procnet_ifinet6 (void *, char *&filebuf)
-{
- PIP_ADAPTER_ADDRESSES pa0 = NULL, pap;
- PIP_ADAPTER_UNICAST_ADDRESS pua;
- ULONG alloclen;
- off_t filesize = 0;
-
- if (!get_adapters_addresses (&pa0, AF_INET6))
- goto out;
- alloclen = 0;
- for (pap = pa0; pap; pap = pap->Next)
- for (pua = pap->FirstUnicastAddress; pua; pua = pua->Next)
- alloclen += 100;
- if (!alloclen)
- goto out;
- filebuf = (char *) crealloc (filebuf, alloclen);
- if (!filebuf)
- goto out;
- for (pap = pa0; pap; pap = pap->Next)
- for (pua = pap->FirstUnicastAddress; pua; pua = pua->Next)
- {
- struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)
- pua->Address.lpSockaddr;
- for (int i = 0; i < 8; ++i)
- /* __small_sprintf generates upper-case hex. */
- filesize += sprintf (filebuf + filesize, "%04x",
- ntohs (sin6->sin6_addr.s6_addr16[i]));
- filebuf[filesize++] = ' ';
- filesize += sprintf (filebuf + filesize,
- "%02lx %02x %02x %02x %s\n",
- (long) pap->Ipv6IfIndex,
- ip_addr_prefix (pua, pap->FirstPrefix),
- get_scope (&((struct sockaddr_in6 *)
- pua->Address.lpSockaddr)->sin6_addr),
- dad_to_flags [pua->DadState],
- pap->AdapterName);
- }
-
-out:
- if (pa0)
- free (pa0);
- return filesize;
-}
diff --git a/winsup/cygwin/fhandler_procsys.cc b/winsup/cygwin/fhandler_procsys.cc
deleted file mode 100644
index 1e937c89d..000000000
--- a/winsup/cygwin/fhandler_procsys.cc
+++ /dev/null
@@ -1,459 +0,0 @@
-/* fhandler_procsys.cc: fhandler for native NT namespace.
-
- Copyright 2010, 2011, 2012, 2013, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include <stdlib.h>
-#include "cygerrno.h"
-#include "security.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include <winioctl.h>
-#include "ntdll.h"
-#include "tls_pbuf.h"
-
-#include <dirent.h>
-
-/* Path of the /proc/sys filesystem */
-const char procsys[] = "/proc/sys";
-const size_t procsys_len = sizeof (procsys) - 1;
-
-#define mk_unicode_path(p) \
- WCHAR namebuf[strlen (get_name ()) + 1]; \
- { \
- const char *from; \
- PWCHAR to; \
- for (to = namebuf, from = get_name () + procsys_len; *from; \
- to++, from++) \
- /* The NT device namespace is ASCII only. */ \
- *to = (*from == '/') ? L'\\' : (WCHAR) *from; \
- if (to == namebuf) \
- *to++ = L'\\'; \
- *to = L'\0'; \
- RtlInitUnicodeString ((p), namebuf); \
- }
-
-/* Returns 0 if path doesn't exist, >0 if path is a directory,
- -1 if path is a file, -2 if it's a symlink. */
-virtual_ftype_t
-fhandler_procsys::exists (struct stat *buf)
-{
- UNICODE_STRING path;
- UNICODE_STRING dir;
- OBJECT_ATTRIBUTES attr;
- IO_STATUS_BLOCK io;
- NTSTATUS status;
- HANDLE h;
- FILE_BASIC_INFORMATION fbi;
- bool internal = false;
- bool desperate_parent_check = false;
- /* Default device type is character device. */
- virtual_ftype_t file_type = virt_chr;
-
- if (strlen (get_name ()) == procsys_len)
- return virt_rootdir;
- mk_unicode_path (&path);
-
- /* Try to open parent dir. If it works, the object is definitely
- an object within the internal namespace. We don't need to test
- it for being a file or dir on the filesystem anymore. If the
- error is STATUS_OBJECT_TYPE_MISMATCH, we know that the file
- itself is external. Otherwise we don't know. */
- RtlSplitUnicodePath (&path, &dir, NULL);
- /* RtlSplitUnicodePath preserves the trailing backslash in dir. Don't
- preserve it to open the dir, unless it's the object root. */
- if (dir.Length > sizeof (WCHAR))
- dir.Length -= sizeof (WCHAR);
- InitializeObjectAttributes (&attr, &dir, OBJ_CASE_INSENSITIVE, NULL, NULL);
- status = NtOpenDirectoryObject (&h, DIRECTORY_QUERY, &attr);
- debug_printf ("NtOpenDirectoryObject: %y", status);
- if (NT_SUCCESS (status))
- {
- internal = true;
- NtClose (h);
- }
-
- /* First check if the object is a symlink. */
- InitializeObjectAttributes (&attr, &path, OBJ_CASE_INSENSITIVE, NULL, NULL);
- status = NtOpenSymbolicLinkObject (&h, READ_CONTROL | SYMBOLIC_LINK_QUERY,
- &attr);
- debug_printf ("NtOpenSymbolicLinkObject: %y", status);
- if (NT_SUCCESS (status))
- {
- /* If requested, check permissions. */
- if (buf)
- get_object_attribute (h, &buf->st_uid, &buf->st_gid, &buf->st_mode);
- NtClose (h);
- return virt_symlink;
- }
- else if (status == STATUS_ACCESS_DENIED)
- return virt_symlink;
- /* Then check if it's an object directory. */
- status = NtOpenDirectoryObject (&h, READ_CONTROL | DIRECTORY_QUERY, &attr);
- debug_printf ("NtOpenDirectoryObject: %y", status);
- if (NT_SUCCESS (status))
- {
- /* If requested, check permissions. */
- if (buf)
- get_object_attribute (h, &buf->st_uid, &buf->st_gid, &buf->st_mode);
- NtClose (h);
- return virt_directory;
- }
- else if (status == STATUS_ACCESS_DENIED)
- return virt_directory;
- /* Next try to open as file/device. */
- status = NtOpenFile (&h, READ_CONTROL | FILE_READ_ATTRIBUTES, &attr, &io,
- FILE_SHARE_VALID_FLAGS, FILE_OPEN_FOR_BACKUP_INTENT);
- debug_printf ("NtOpenFile: %y", status);
- /* Name is invalid, that's nothing. */
- if (status == STATUS_OBJECT_NAME_INVALID)
- return virt_none;
- /* If no media is found, or we get this dreaded sharing violation, let
- the caller immediately try again as normal file. */
- if (status == STATUS_NO_MEDIA_IN_DEVICE
- || status == STATUS_SHARING_VIOLATION)
- return virt_fsfile; /* Just try again as normal file. */
- /* If file or path can't be found, let caller try again as normal file. */
- if (status == STATUS_OBJECT_PATH_NOT_FOUND
- || status == STATUS_OBJECT_NAME_NOT_FOUND)
- return virt_fsfile;
- /* Check for pipe errors, which make a good hint... */
- if (status >= STATUS_PIPE_NOT_AVAILABLE && status <= STATUS_PIPE_BUSY)
- return virt_pipe;
- if (status == STATUS_ACCESS_DENIED && !internal)
- {
- /* Check if this is just some file or dir on a real FS to circumvent
- most permission problems. Don't try that on internal objects,
- since NtQueryAttributesFile might crash the machine if the underlying
- driver is badly written. */
- status = NtQueryAttributesFile (&attr, &fbi);
- debug_printf ("NtQueryAttributesFile: %y", status);
- if (NT_SUCCESS (status))
- return (fbi.FileAttributes & FILE_ATTRIBUTE_DIRECTORY)
- ? virt_fsdir : virt_fsfile;
- /* Ok, so we're desperate and the file still maybe on some filesystem.
- To check this, we now split the path until we can finally access any
- of the parent's. Then we fall through to check the parent type. In
- contrast to the first parent check, we now check explicitely with
- trailing backslash. This will fail for directories in the internal
- namespace, so we won't accidentally test those. */
- dir = path;
- InitializeObjectAttributes (&attr, &dir, OBJ_CASE_INSENSITIVE,
- NULL, NULL);
- do
- {
- RtlSplitUnicodePath (&dir, &dir, NULL);
- status = NtOpenFile (&h, READ_CONTROL | FILE_READ_ATTRIBUTES,
- &attr, &io, FILE_SHARE_VALID_FLAGS,
- FILE_OPEN_FOR_BACKUP_INTENT);
- debug_printf ("NtOpenDirectoryObject: %y", status);
- if (dir.Length > sizeof (WCHAR))
- dir.Length -= sizeof (WCHAR);
- }
- while (dir.Length > sizeof (WCHAR) && !NT_SUCCESS (status));
- desperate_parent_check = true;
- }
- if (NT_SUCCESS (status))
- {
- FILE_FS_DEVICE_INFORMATION ffdi;
-
- /* If requested, check permissions. If this is a parent handle from
- the above desperate parent check, skip. */
- if (buf && !desperate_parent_check)
- get_object_attribute (h, &buf->st_uid, &buf->st_gid, &buf->st_mode);
-
- /* Check for the device type. */
- status = NtQueryVolumeInformationFile (h, &io, &ffdi, sizeof ffdi,
- FileFsDeviceInformation);
- debug_printf ("NtQueryVolumeInformationFile: %y", status);
- /* Don't call NtQueryInformationFile unless we know it's a safe type.
- The call is known to crash machines, if the underlying driver is
- badly written. */
- if (NT_SUCCESS (status))
- {
- if (ffdi.DeviceType == FILE_DEVICE_NETWORK_FILE_SYSTEM)
- file_type = virt_blk;
- else if (ffdi.DeviceType == FILE_DEVICE_NAMED_PIPE)
- file_type = internal ? virt_blk : virt_pipe;
- else if (ffdi.DeviceType == FILE_DEVICE_DISK
- || ffdi.DeviceType == FILE_DEVICE_CD_ROM
- || ffdi.DeviceType == FILE_DEVICE_DFS
- || ffdi.DeviceType == FILE_DEVICE_VIRTUAL_DISK)
- {
- /* Check for file attributes. If we get them, we peeked
- into a real FS through /proc/sys. */
- status = NtQueryInformationFile (h, &io, &fbi, sizeof fbi,
- FileBasicInformation);
- debug_printf ("NtQueryInformationFile: %y", status);
- if (!NT_SUCCESS (status))
- file_type = virt_blk;
- else
- file_type = (fbi.FileAttributes & FILE_ATTRIBUTE_DIRECTORY)
- ? virt_fsdir : virt_fsfile;
- }
- }
- NtClose (h);
- }
- /* That's it. Return type we found above. */
- return file_type;
-}
-
-virtual_ftype_t
-fhandler_procsys::exists ()
-{
- return exists (NULL);
-}
-
-fhandler_procsys::fhandler_procsys ():
- fhandler_virtual ()
-{
-}
-
-#define UNREADABLE_SYMLINK_CONTENT "<access denied>"
-
-bool
-fhandler_procsys::fill_filebuf ()
-{
- char *fnamep;
- UNICODE_STRING path, target;
- OBJECT_ATTRIBUTES attr;
- NTSTATUS status;
- HANDLE h;
- tmp_pathbuf tp;
- size_t len;
-
- mk_unicode_path (&path);
- if (path.Buffer[path.Length / sizeof (WCHAR) - 1] == L'\\')
- path.Length -= sizeof (WCHAR);
- InitializeObjectAttributes (&attr, &path, OBJ_CASE_INSENSITIVE, NULL, NULL);
- status = NtOpenSymbolicLinkObject (&h, SYMBOLIC_LINK_QUERY, &attr);
- if (!NT_SUCCESS (status))
- goto unreadable;
- RtlInitEmptyUnicodeString (&target, tp.w_get (),
- (NT_MAX_PATH - 1) * sizeof (WCHAR));
- status = NtQuerySymbolicLinkObject (h, &target, NULL);
- NtClose (h);
- if (!NT_SUCCESS (status))
- goto unreadable;
- len = sys_wcstombs (NULL, 0, target.Buffer, target.Length / sizeof (WCHAR));
- filebuf = (char *) crealloc_abort (filebuf, procsys_len + len + 1);
- sys_wcstombs (fnamep = stpcpy (filebuf, procsys), len + 1, target.Buffer,
- target.Length / sizeof (WCHAR));
- while ((fnamep = strchr (fnamep, '\\')))
- *fnamep = '/';
- return true;
-
-unreadable:
- filebuf = (char *) crealloc_abort (filebuf,
- sizeof (UNREADABLE_SYMLINK_CONTENT));
- strcpy (filebuf, UNREADABLE_SYMLINK_CONTENT);
- return false;
-}
-
-int __reg2
-fhandler_procsys::fstat (struct stat *buf)
-{
- const char *path = get_name ();
- debug_printf ("fstat (%s)", path);
-
- fhandler_base::fstat (buf);
- /* Best bet. */
- buf->st_mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP;
- buf->st_uid = 544;
- buf->st_gid = 18;
- buf->st_dev = buf->st_rdev = dev ();
- buf->st_ino = get_ino ();
- switch (exists (buf))
- {
- case virt_directory:
- case virt_rootdir:
- case virt_fsdir:
- buf->st_mode |= S_IFDIR;
- if (buf->st_mode & S_IRUSR)
- buf->st_mode |= S_IXUSR;
- if (buf->st_mode & S_IRGRP)
- buf->st_mode |= S_IXGRP;
- if (buf->st_mode & S_IROTH)
- buf->st_mode |= S_IXOTH;
- break;
- case virt_file:
- case virt_fsfile:
- buf->st_mode |= S_IFREG;
- break;
- case virt_symlink:
- buf->st_mode |= S_IFLNK;
- break;
- case virt_pipe:
- buf->st_mode |= S_IFIFO;
- break;
- case virt_socket:
- buf->st_mode |= S_IFSOCK;
- break;
- case virt_chr:
- buf->st_mode |= S_IFCHR;
- break;
- case virt_blk:
- buf->st_mode |= S_IFBLK;
- break;
- default:
- set_errno (ENOENT);
- return -1;
- }
- return 0;
-}
-
-DIR *
-fhandler_procsys::opendir (int fd)
-{
- UNICODE_STRING path;
- OBJECT_ATTRIBUTES attr;
- NTSTATUS status;
- HANDLE h;
- DIR *dir;
-
- mk_unicode_path (&path);
- InitializeObjectAttributes (&attr, &path, OBJ_CASE_INSENSITIVE, NULL, NULL);
- status = NtOpenDirectoryObject (&h, DIRECTORY_QUERY, &attr);
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- return NULL;
- }
- if (!(dir = fhandler_virtual::opendir (fd)))
- NtClose (h);
- else
- dir->__handle = h;
- return dir;
-}
-
-int
-fhandler_procsys::readdir (DIR *dir, dirent *de)
-{
- NTSTATUS status;
- struct fdbi
- {
- DIRECTORY_BASIC_INFORMATION dbi;
- WCHAR buf[2][NAME_MAX + 1];
- } f;
- int res = EBADF;
-
- if (dir->__handle != INVALID_HANDLE_VALUE)
- {
- BOOLEAN restart = dir->__d_position ? FALSE : TRUE;
- status = NtQueryDirectoryObject (dir->__handle, &f, sizeof f, TRUE,
- restart, (PULONG) &dir->__d_position,
- NULL);
- if (!NT_SUCCESS (status))
- res = ENMFILE;
- else
- {
- sys_wcstombs (de->d_name, NAME_MAX + 1, f.dbi.ObjectName.Buffer,
- f.dbi.ObjectName.Length / sizeof (WCHAR));
- de->d_ino = hash_path_name (get_ino (), de->d_name);
- if (RtlEqualUnicodeString (&f.dbi.ObjectTypeName, &ro_u_natdir,
- FALSE))
- de->d_type = DT_DIR;
- else if (RtlEqualUnicodeString (&f.dbi.ObjectTypeName, &ro_u_natsyml,
- FALSE))
- de->d_type = DT_LNK;
- else if (!RtlEqualUnicodeString (&f.dbi.ObjectTypeName, &ro_u_natdev,
- FALSE))
- de->d_type = DT_CHR;
- else /* Can't nail down "Device" objects without further testing. */
- de->d_type = DT_UNKNOWN;
- res = 0;
- }
- }
- syscall_printf ("%d = readdir(%p, %p)", res, dir, de);
- return res;
-}
-
-long
-fhandler_procsys::telldir (DIR *dir)
-{
- return dir->__d_position;
-}
-
-void
-fhandler_procsys::seekdir (DIR *dir, long pos)
-{
- dir->__d_position = pos;
-}
-
-int
-fhandler_procsys::closedir (DIR *dir)
-{
- if (dir->__handle != INVALID_HANDLE_VALUE)
- {
- NtClose (dir->__handle);
- dir->__handle = INVALID_HANDLE_VALUE;
- }
- return fhandler_virtual::closedir (dir);
-}
-
-void __reg3
-fhandler_procsys::read (void *ptr, size_t& len)
-{
- fhandler_base::raw_read (ptr, len);
-}
-
-ssize_t __stdcall
-fhandler_procsys::write (const void *ptr, size_t len)
-{
- return fhandler_base::raw_write (ptr, len);
-}
-
-int
-fhandler_procsys::open (int flags, mode_t mode)
-{
- int res = 0;
-
- if ((flags & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL))
- set_errno (EINVAL);
- else
- {
- switch (exists (NULL))
- {
- case virt_directory:
- case virt_rootdir:
- if ((flags & O_ACCMODE) != O_RDONLY)
- set_errno (EISDIR);
- else
- {
- nohandle (true);
- res = 1;
- }
- break;
- case virt_none:
- set_errno (ENOENT);
- break;
- default:
- res = fhandler_base::open (flags, mode);
- break;
- }
- }
- syscall_printf ("%d = fhandler_procsys::open(%p, 0%o)", res, flags, mode);
- return res;
-}
-
-int
-fhandler_procsys::close ()
-{
- if (!nohandle ())
- NtClose (get_handle ());
- return fhandler_virtual::close ();
-}
-#if 0
-int
-fhandler_procsys::ioctl (unsigned int cmd, void *)
-{
-}
-#endif
diff --git a/winsup/cygwin/fhandler_procsysvipc.cc b/winsup/cygwin/fhandler_procsysvipc.cc
deleted file mode 100644
index bd1eee0a1..000000000
--- a/winsup/cygwin/fhandler_procsysvipc.cc
+++ /dev/null
@@ -1,394 +0,0 @@
-/* fhandler_procsysvipc.cc: fhandler for /proc/sysvipc virtual filesystem
-
- Copyright 2011, 2012, 2013, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include <stdlib.h>
-#include <stdio.h>
-#include <sys/cygwin.h>
-#include "cygerrno.h"
-#include "cygserver.h"
-#include "security.h"
-#include "path.h"
-#include "fhandler.h"
-#include "fhandler_virtual.h"
-#include "pinfo.h"
-#include "shared_info.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "ntdll.h"
-#include "cygtls.h"
-#include "tls_pbuf.h"
-#include <sys/param.h>
-#include <ctype.h>
-
-#define _COMPILING_NEWLIB
-#include <dirent.h>
-
-#define _KERNEL
-#include <sys/ipc.h>
-#include <sys/msg.h>
-#include <sys/sem.h>
-#include <sys/shm.h>
-
-static off_t format_procsysvipc_msg (void *, char *&);
-static off_t format_procsysvipc_sem (void *, char *&);
-static off_t format_procsysvipc_shm (void *, char *&);
-
-static const virt_tab_t procsysvipc_tab[] =
-{
- { _VN ("."), FH_PROCSYSVIPC, virt_directory, NULL },
- { _VN (".."), FH_PROCSYSVIPC, virt_directory, NULL },
- { _VN ("msg"), FH_PROCSYSVIPC, virt_file, format_procsysvipc_msg },
- { _VN ("sem"), FH_PROCSYSVIPC, virt_file, format_procsysvipc_sem },
- { _VN ("shm"), FH_PROCSYSVIPC, virt_file, format_procsysvipc_shm },
- { NULL, 0, FH_NADA, virt_none, NULL }
-};
-
-static const int PROCSYSVIPC_LINK_COUNT =
- (sizeof (procsysvipc_tab) / sizeof (virt_tab_t)) - 1;
-
-/* Returns 0 if path doesn't exist, >0 if path is a directory,
- * -1 if path is a file.
- */
-virtual_ftype_t
-fhandler_procsysvipc::exists ()
-{
- const char *path = get_name ();
- debug_printf ("exists (%s)", path);
- path += proc_len + 1;
- while (*path != 0 && !isdirsep (*path))
- path++;
- if (*path == 0)
- return virt_rootdir;
-
- virt_tab_t *entry = virt_tab_search (path + 1, true, procsysvipc_tab,
- PROCSYSVIPC_LINK_COUNT);
-
- cygserver_init ();
-
- if (entry)
- {
- if (entry->type == virt_file)
- {
- if (cygserver_running != CYGSERVER_OK)
- return virt_none;
- }
- fileid = entry - procsysvipc_tab;
- return entry->type;
- }
- return virt_none;
-}
-
-fhandler_procsysvipc::fhandler_procsysvipc ():
- fhandler_proc ()
-{
-}
-
-int __reg2
-fhandler_procsysvipc::fstat (struct stat *buf)
-{
- fhandler_base::fstat (buf);
- buf->st_mode &= ~_IFMT & NO_W;
- int file_type = exists ();
- switch (file_type)
- {
- case virt_none:
- set_errno (ENOENT);
- return -1;
- case virt_directory:
- case virt_rootdir:
- buf->st_mode |= S_IFDIR | S_IXUSR | S_IXGRP | S_IXOTH;
- buf->st_nlink = 2;
- return 0;
- case virt_file:
- default:
- buf->st_mode |= S_IFREG | S_IRUSR | S_IRGRP | S_IROTH;
- return 0;
- }
-}
-
-int
-fhandler_procsysvipc::readdir (DIR *dir, dirent *de)
-{
- int res = ENMFILE;
- if (dir->__d_position >= PROCSYSVIPC_LINK_COUNT)
- goto out;
- {
- cygserver_init ();
- if (cygserver_running != CYGSERVER_OK)
- goto out;
- }
- strcpy (de->d_name, procsysvipc_tab[dir->__d_position].name);
- de->d_type = virt_ftype_to_dtype (procsysvipc_tab[dir->__d_position].type);
- dir->__d_position++;
- dir->__flags |= dirent_saw_dot | dirent_saw_dot_dot;
- res = 0;
-out:
- syscall_printf ("%d = readdir(%p, %p) (%s)", res, dir, de, de->d_name);
- return res;
-}
-
-int
-fhandler_procsysvipc::open (int flags, mode_t mode)
-{
- int res = fhandler_virtual::open (flags, mode);
- if (!res)
- goto out;
-
- nohandle (true);
-
- const char *path;
- path = get_name () + proc_len + 1;
- pid = atoi (path);
- while (*path != 0 && !isdirsep (*path))
- path++;
-
- if (*path == 0)
- {
- if ((flags & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL))
- {
- set_errno (EEXIST);
- res = 0;
- goto out;
- }
- else if (flags & O_WRONLY)
- {
- set_errno (EISDIR);
- res = 0;
- goto out;
- }
- else
- {
- flags |= O_DIROPEN;
- goto success;
- }
- }
-
- virt_tab_t *entry;
- entry = virt_tab_search (path + 1, true, procsysvipc_tab, PROCSYSVIPC_LINK_COUNT);
- if (!entry)
- {
- set_errno ((flags & O_CREAT) ? EROFS : ENOENT);
- res = 0;
- goto out;
- }
- if (flags & O_WRONLY)
- {
- set_errno (EROFS);
- res = 0;
- goto out;
- }
-
- fileid = entry - procsysvipc_tab;
- if (!fill_filebuf ())
- {
- res = 0;
- goto out;
- }
-
- if (flags & O_APPEND)
- position = filesize;
- else
- position = 0;
-
-success:
- res = 1;
- set_flags ((flags & ~O_TEXT) | O_BINARY);
- set_open_status ();
-out:
- syscall_printf ("%d = fhandler_proc::open(%p, 0%o)", res, flags, mode);
- return res;
-}
-
-bool
-fhandler_procsysvipc::fill_filebuf ()
-{
- if (procsysvipc_tab[fileid].format_func)
- {
- filesize = procsysvipc_tab[fileid].format_func (NULL, filebuf);
- return true;
- }
- return false;
-}
-
-#define MSG_HEADLINE " key msqid perms cbytes qnum lspid lrpid uid gid cuid cgid stime rtime ctime\n"
-
-static off_t
-format_procsysvipc_msg (void *, char *&destbuf)
-{
- char *buf;
- struct msginfo msginfo;
- struct msqid_ds *xmsqids;
-
- msgctl (0, IPC_INFO, (struct msqid_ds *) &msginfo);
- /* Don't use tmp_pathbuf. The required buffer sizes can be up to 128K! */
- xmsqids = (struct msqid_ds *) malloc (sizeof (struct msqid_ds)
- * msginfo.msgmni);
- if (!xmsqids)
- return 0;
- /* buf size = sizeof headline + 128 bytes per msg queue entry. */
- buf = (char *) malloc (sizeof (MSG_HEADLINE) + msginfo.msgmni * 128);
- if (!buf)
- {
- free (xmsqids);
- return 0;
- }
-
- char *bufptr = stpcpy (buf, MSG_HEADLINE);
- msgctl (msginfo.msgmni, IPC_INFO, (struct msqid_ds *) xmsqids);
- for (int i = 0; i < msginfo.msgmni; i++)
- {
- if (xmsqids[i].msg_qbytes != 0)
- {
- bufptr += sprintf (bufptr,
- "%10llu %10u %5o %11u %10u %5d %5d %5u %5u %5u %5u "
- "%10ld %10ld %10ld\n",
- xmsqids[i].msg_perm.key,
- IXSEQ_TO_IPCID(i, xmsqids[i].msg_perm),
- xmsqids[i].msg_perm.mode,
- xmsqids[i].msg_cbytes,
- xmsqids[i].msg_qnum,
- xmsqids[i].msg_lspid,
- xmsqids[i].msg_lrpid,
- (unsigned) xmsqids[i].msg_perm.uid,
- (unsigned) xmsqids[i].msg_perm.gid,
- (unsigned) xmsqids[i].msg_perm.cuid,
- (unsigned) xmsqids[i].msg_perm.cgid,
- xmsqids[i].msg_stime,
- xmsqids[i].msg_rtime,
- xmsqids[i].msg_ctime);
- }
- }
-
- off_t size = bufptr - buf;
- destbuf = (char *) crealloc_abort (destbuf, size);
- memcpy (destbuf, buf, size);
- free (buf);
- free (xmsqids);
- return size;
-}
-
-#undef MSG_HEADLINE
-
-#define SEM_HEADLINE " key semid perms nsems uid gid cuid cgid otime ctime\n"
-
-static off_t
-format_procsysvipc_sem (void *, char *&destbuf)
-{
- char *buf;
- union semun semun;
- struct seminfo seminfo;
- struct semid_ds *xsemids;
-
- semun.buf = (struct semid_ds *) &seminfo;
- semctl (0, 0, IPC_INFO, semun);
- /* Don't use tmp_pathbuf. The required buffer sizes can be up to 96K! */
- xsemids = (struct semid_ds *) malloc (sizeof (struct semid_ds)
- * seminfo.semmni);
- if (!xsemids)
- return 0;
- /* buf size = sizeof headline + 96 bytes per semaphore entry. */
- buf = (char *) malloc (sizeof (SEM_HEADLINE) + seminfo.semmni * 96);
- if (!buf)
- {
- free (xsemids);
- return 0;
- }
-
- char *bufptr = stpcpy (buf, SEM_HEADLINE);
- semun.buf = xsemids;
- semctl (seminfo.semmni, 0, IPC_INFO, semun);
- for (int i = 0; i < seminfo.semmni; i++)
- {
- if ((xsemids[i].sem_perm.mode & SEM_ALLOC) != 0)
- {
- bufptr += sprintf (bufptr,
- "%10llu %10u %5o %10d %5u %5u %5u %5u %10ld %10ld\n",
- xsemids[i].sem_perm.key,
- IXSEQ_TO_IPCID(i, xsemids[i].sem_perm),
- xsemids[i].sem_perm.mode,
- xsemids[i].sem_nsems,
- (unsigned) xsemids[i].sem_perm.uid,
- (unsigned) xsemids[i].sem_perm.gid,
- (unsigned) xsemids[i].sem_perm.cuid,
- (unsigned) xsemids[i].sem_perm.cgid,
- xsemids[i].sem_otime,
- xsemids[i].sem_ctime);
- }
- }
-
- off_t size = bufptr - buf;
- destbuf = (char *) crealloc_abort (destbuf, size);
- memcpy (destbuf, buf, size);
- free (buf);
- free (xsemids);
- return size;
-}
-
-#undef SEM_HEADLINE
-
-#define SHM_HEADLINE " key shmid perms size cpid lpid nattch uid gid cuid cgid atime dtime ctime\n"
-
-static off_t
-format_procsysvipc_shm (void *, char *&destbuf)
-{
- char *buf;
- struct shminfo shminfo;
- struct shmid_ds *xshmids;
-
- shmctl (0, IPC_INFO, (struct shmid_ds *) &shminfo);
- /* Don't use tmp_pathbuf. The required buffer sizes can be up to 120K! */
- xshmids = (struct shmid_ds *) malloc (sizeof (struct shmid_ds)
- * shminfo.shmmni);
- if (!xshmids)
- return 0;
- /* buf size = sizeof headline + 120 bytes per shmem entry. */
- buf = (char *) malloc (sizeof (SHM_HEADLINE) + shminfo.shmmni * 120);
- if (!buf)
- {
- free (xshmids);
- return 0;
- }
-
- char *bufptr = stpcpy (buf, SHM_HEADLINE);
- shmctl (shminfo.shmmni, IPC_INFO, (struct shmid_ds *) xshmids);
- for (int i = 0; i < shminfo.shmmni; i++)
- {
- if (xshmids[i].shm_perm.mode & 0x0800)
- {
- bufptr += sprintf (bufptr,
- "%10llu %10u %5o %10u %5d %5d %6u %5u %5u %5u %5u "
- "%10ld %10ld %10ld\n",
- xshmids[i].shm_perm.key,
- IXSEQ_TO_IPCID(i, xshmids[i].shm_perm),
- xshmids[i].shm_perm.mode,
- xshmids[i].shm_segsz,
- xshmids[i].shm_cpid,
- xshmids[i].shm_lpid,
- xshmids[i].shm_nattch,
- (unsigned) xshmids[i].shm_perm.uid,
- (unsigned) xshmids[i].shm_perm.gid,
- (unsigned) xshmids[i].shm_perm.cuid,
- (unsigned) xshmids[i].shm_perm.cgid,
- xshmids[i].shm_atime,
- xshmids[i].shm_dtime,
- xshmids[i].shm_ctime);
- }
- }
-
- off_t size = bufptr - buf;
- destbuf = (char *) crealloc_abort (destbuf, size);
- memcpy (destbuf, buf, size);
- free (buf);
- free (xshmids);
- return size;
-}
-
-#undef SHM_HEADLINE
diff --git a/winsup/cygwin/fhandler_random.cc b/winsup/cygwin/fhandler_random.cc
deleted file mode 100644
index 375398296..000000000
--- a/winsup/cygwin/fhandler_random.cc
+++ /dev/null
@@ -1,143 +0,0 @@
-/* fhandler_random.cc: code to access /dev/random and /dev/urandom
-
- Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2009, 2011, 2013
- Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include <unistd.h>
-#include <sys/param.h>
-#include "cygerrno.h"
-#include "path.h"
-#include "fhandler.h"
-#include "sync.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "child_info.h"
-
-#define RANDOM 8
-#define URANDOM 9
-
-/* The system PRNG is reseeded after reading 128K bytes. */
-#define RESEED_INTERVAL (128 * 1024)
-
-#define PSEUDO_MULTIPLIER (6364136223846793005LL)
-#define PSEUDO_SHIFTVAL (21)
-
-/* There's a bug in ntsecapi.h (Mingw as well as MSFT). SystemFunction036
- is, in fact, a WINAPI function, but it's not defined as such. Therefore
- we have to do it correctly here. */
-#define RtlGenRandom SystemFunction036
-extern "C" BOOLEAN WINAPI RtlGenRandom (PVOID, ULONG);
-
-bool
-fhandler_dev_random::crypt_gen_random (void *ptr, size_t len)
-{
- if (!RtlGenRandom (ptr, len))
- {
- debug_printf ("%E = RtlGenRandom()");
- return false;
- }
- return true;
-}
-
-int
-fhandler_dev_random::pseudo_write (const void *ptr, size_t len)
-{
- /* Use buffer to mess up the pseudo random number generator. */
- for (size_t i = 0; i < len; ++i)
- pseudo = (pseudo + ((unsigned char *)ptr)[i]) * PSEUDO_MULTIPLIER + 1;
- return len;
-}
-
-ssize_t __stdcall
-fhandler_dev_random::write (const void *ptr, size_t len)
-{
- if (!len)
- return 0;
- if (!ptr)
- {
- set_errno (EINVAL);
- return -1;
- }
-
- /* Limit len to a value <= 4096 since we don't want to overact.
- Copy to local buffer because CryptGenRandom violates const. */
- size_t limited_len = MIN (len, 4096);
- unsigned char buf[limited_len];
- memcpy (buf, ptr, limited_len);
-
- /* Mess up system entropy source. Return error if device is /dev/random. */
- if (!crypt_gen_random (buf, limited_len) && dev () == FH_RANDOM)
- {
- __seterrno ();
- return -1;
- }
- /* Mess up the pseudo random number generator. */
- pseudo_write (buf, limited_len);
- return len;
-}
-
-int
-fhandler_dev_random::pseudo_read (void *ptr, size_t len)
-{
- /* Use pseudo random number generator as fallback entropy source.
- This multiplier was obtained from Knuth, D.E., "The Art of
- Computer Programming," Vol 2, Seminumerical Algorithms, Third
- Edition, Addison-Wesley, 1998, p. 106 (line 26) & p. 108 */
- for (size_t i = 0; i < len; ++i)
- {
- pseudo = pseudo * PSEUDO_MULTIPLIER + 1;
- ((unsigned char *)ptr)[i] = (pseudo >> PSEUDO_SHIFTVAL) & UCHAR_MAX;
- }
- return len;
-}
-
-void __reg3
-fhandler_dev_random::read (void *ptr, size_t& len)
-{
- if (!len)
- return;
-
- if (!ptr)
- {
- set_errno (EINVAL);
- len = (size_t) -1;
- return;
- }
-
- /* /dev/random has to provide high quality random numbers. Therefore we
- re-seed the system PRNG for each block of 512 bytes. This results in
- sufficiently random sequences, comparable to the Linux /dev/random. */
- if (dev () == FH_RANDOM)
- {
- void *dummy = malloc (RESEED_INTERVAL);
- if (!dummy)
- {
- __seterrno ();
- len = (size_t) -1;
- return;
- }
- for (size_t offset = 0; offset < len; offset += 512)
- {
- if (!crypt_gen_random (dummy, RESEED_INTERVAL) ||
- !crypt_gen_random ((PBYTE) ptr + offset, len - offset))
- {
- __seterrno ();
- len = (size_t) -1;
- break;
- }
- }
- free (dummy);
- }
-
- /* If device is /dev/urandom, just use system RNG as is, with our own
- PRNG as fallback. */
- else if (!crypt_gen_random (ptr, len))
- len = pseudo_read (ptr, len);
-}
diff --git a/winsup/cygwin/fhandler_raw.cc b/winsup/cygwin/fhandler_raw.cc
deleted file mode 100644
index 23a6beaad..000000000
--- a/winsup/cygwin/fhandler_raw.cc
+++ /dev/null
@@ -1,209 +0,0 @@
-/* fhandler_raw.cc. See fhandler.h for a description of the fhandler classes.
-
- Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2011,
- 2012, 2013 Red Hat, Inc.
-
- This file is part of Cygwin.
-
- This software is a copyrighted work licensed under the terms of the
- Cygwin license. Please consult the file "CYGWIN_LICENSE" for
- details. */
-
-#include "winsup.h"
-
-#include <unistd.h>
-#include <cygwin/rdevio.h>
-#include <sys/mtio.h>
-#include <sys/param.h>
-#include "cygerrno.h"
-#include "path.h"
-#include "fhandler.h"
-
-/**********************************************************************/
-/* fhandler_dev_raw */
-
-fhandler_dev_raw::fhandler_dev_raw ()
- : fhandler_base (),
- status ()
-{
- need_fork_fixup (true);
-}
-
-fhandler_dev_raw::~fhandler_dev_raw ()
-{
- if (devbufsiz > 1L)
- delete [] devbufalloc;
-}
-
-int __reg2
-fhandler_dev_raw::fstat (struct stat *buf)
-{
- debug_printf ("here");
-
- fhandler_base::fstat (buf);
- if (is_auto_device ())
- {
- if (get_major () == DEV_TAPE_MAJOR)
- buf->st_mode = S_IFCHR | STD_RBITS | STD_WBITS | S_IWGRP | S_IWOTH;
- else
- buf->st_mode = S_IFBLK | STD_RBITS | STD_WBITS | S_IWGRP | S_IWOTH;
-
- buf->st_uid = geteuid32 ();
- buf->st_gid = getegid32 ();
- buf->st_nlink = 1;
- buf->st_blksize = PREFERRED_IO_BLKSIZE;
- time_as_timestruc_t (&buf->st_ctim);
- buf->st_atim = buf->st_mtim = buf->st_birthtim = buf->st_ctim;
- }
- return 0;
-}
-
-int
-fhandler_dev_raw::open (int flags, mode_t)
-{
- /* Check for illegal flags. */
- if (get_major () != DEV_TAPE_MAJOR && (flags & O_APPEND))
- {
- set_errno (EINVAL);
- return 0;
- }
-
- /* Always open a raw device existing and binary. */
- flags &= ~(O_CREAT | O_TRUNC);
- flags |= O_BINARY;
-
- /* Write-only doesn't work well with raw devices */
- if ((flags & O_ACCMODE) == O_WRONLY)
- flags = ((flags & ~O_WRONLY) | O_RDWR);
-
- int res = fhandler_base::open (flags, 0);
-
- return res;
-}
-
-int
-fhandler_dev_raw::dup (fhandler_base *child, int flags)
-{
- int ret = fhandler_base::dup (child, flags);
-
- if (!ret)
- {
- fhandler_dev_raw *fhc = (fhandler_dev_raw *) child;
-
- if (devbufsiz > 1L)
- {
- /* Create sector-aligned buffer */
- fhc->devbufalloc = new char [devbufsiz + devbufalign];
- fhc->devbuf = (char *) roundup2 ((uintptr_t) fhc->devbufalloc,
- (uintptr_t) devbufalign);
- }
- fhc->devbufstart = 0;
- fhc->devbufend = 0;
- fhc->lastblk_to_read (false);
- }
- return ret;
-}
-
-void
-fhandler_dev_raw::fixup_after_fork (HANDLE parent)
-{
- fhandler_base::fixup_after_fork (parent);
- devbufstart = 0;
- devbufend = 0;
- lastblk_to_read (false);
-}
-
-void
-fhandler_dev_raw::fixup_after_exec ()
-{
- if (!close_on_exec ())
- {
- if (devbufsiz > 1L)
- {
- /* Create sector-aligned buffer */
- devbufalloc = new char [devbufsiz + devbufalign];
- devbuf = (char *) roundup2 ((uintptr_t) devbufalloc,
- (uintptr_t) devbufalign);
- }
- devbufstart = 0;
- devbufend = 0;
- lastblk_to_read (false);
- }
-}
-
-int
-fhandler_dev_raw::ioctl (unsigned int cmd, void *buf)
-{
- int ret = NO_ERROR;
-
- if (cmd == RDIOCDOP)
- {
- struct rdop *op = (struct rdop *) buf;
-
- if (!op)
- ret = ERROR_INVALID_PARAMETER;
- else
- switch (op->rd_op)
- {
- case RDSETBLK:
- if (get_major () == DEV_TAPE_MAJOR)
- {
- struct mtop mop;
-
- mop.mt_op = MTSETBLK;
- mop.mt_count = op->rd_parm;
- ret = ioctl (MTIOCTOP, &mop);
- }
- else if ((op->rd_parm <= 1 && get_major () != DEV_TAPE_MAJOR)
- || (op->rd_parm > 1 && (op->rd_parm % devbufalign))
- || (get_flags () & O_DIRECT))
- /* The conditions for a valid parameter are:
- - The new size is either 0 or 1, both indicating unbuffered
- I/O, and the device is a tape device.
- - Or, the new buffersize must be a multiple of the
- required buffer alignment.
- - In the O_DIRECT case, the whole request is invalid. */
- ret = ERROR_INVALID_PARAMETER;
- else if (!devbuf || op->rd_parm != devbufsiz)
- {
- char *buf = NULL;
- off_t curpos = lseek (0, SEEK_CUR);
-
- if (op->rd_parm > 1L)
- buf = new char [op->rd_parm + devbufalign];
-
- if (devbufsiz > 1L)
- delete [] devbufalloc;
-
- devbufalloc = buf;
- devbuf = (char *) roundup2 ((uintptr_t) buf,
- (uintptr_t) devbufalign);
- devbufsiz = op->rd_parm ?: 1L;
- devbufstart = devbufend = 0;
- lseek (curpos, SEEK_SET);
- }
- break;
- default:
- break;
- }
- }
- else if (cmd == RDIOCGET)
- {
- struct rdget *get = (struct rdget *) buf;
-
- if (!get)
- ret = ERROR_INVALID_PARAMETER;
- else
- get->bufsiz = devbufsiz;
- }
- else
- return fhandler_base::ioctl (cmd, buf);
-
- if (ret != NO_ERROR)
- {
- SetLastError (ret);
- __seterrno ();
- return -1;
- }
- return 0;
-}
diff --git a/winsup/cygwin/fhandler_registry.cc b/winsup/cygwin/fhandler_registry.cc
deleted file mode 100644
index fd3b76824..000000000
--- a/winsup/cygwin/fhandler_registry.cc
+++ /dev/null
@@ -1,1127 +0,0 @@
-/* fhandler_registry.cc: fhandler for /proc/registry virtual filesystem
-
- Copyright 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012,
- 2013 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-/* FIXME: Access permissions are ignored at the moment. */
-
-#include "winsup.h"
-#include <stdlib.h>
-#include "cygerrno.h"
-#include "security.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "child_info.h"
-
-#define _COMPILING_NEWLIB
-#include <dirent.h>
-
-/* If this bit is set in __d_position then we are enumerating values,
- * else sub-keys. keeping track of where we are is horribly messy
- * the bottom 16 bits are the absolute position and the top 15 bits
- * make up the value index if we are enuerating values.
- */
-static const __int32_t REG_ENUM_VALUES_MASK = 0x8000000;
-static const __int32_t REG_POSITION_MASK = 0xffff;
-
-/* These key paths are used below whenever we return key information.
- The problem is UAC virtualization when running an admin account with
- restricted rights. In that case the subkey "Classes" in the VirtualStore
- points to the HKEY_CLASSES_ROOT key again. If "Classes" is handled as a
- normal subdirectory, applications recursing throught the directory
- hirarchy will invariably run into an infinite recursion. What we do here
- is to handle the "Classes" subkey as a symlink to HKEY_CLASSES_ROOT. This
- avoids the infinite recursion, unless the application blindly follows
- symlinks pointing to directories, in which case it's their own fault. */
-#define VIRT_CLASSES_KEY_PREFIX "/VirtualStore/MACHINE/SOFTWARE"
-#define VIRT_CLASSES_KEY_SUFFIX "Classes"
-#define VIRT_CLASSES_KEY VIRT_CLASSES_KEY_PREFIX "/" VIRT_CLASSES_KEY_SUFFIX
-#define VIRT_CLASSES_LINKTGT "/proc/registry/HKEY_CLASSES_ROOT"
-
-/* List of root keys in /proc/registry.
- * Possibly we should filter out those not relevant to the flavour of Windows
- * Cygwin is running on.
- */
-static const char *registry_listing[] =
-{
- ".",
- "..",
- "HKEY_CLASSES_ROOT",
- "HKEY_CURRENT_CONFIG",
- "HKEY_CURRENT_USER",
- "HKEY_LOCAL_MACHINE",
- "HKEY_USERS",
- "HKEY_PERFORMANCE_DATA",
- NULL
-};
-
-static const HKEY registry_keys[] =
-{
- (HKEY) INVALID_HANDLE_VALUE,
- (HKEY) INVALID_HANDLE_VALUE,
- HKEY_CLASSES_ROOT,
- HKEY_CURRENT_CONFIG,
- HKEY_CURRENT_USER,
- HKEY_LOCAL_MACHINE,
- HKEY_USERS,
- HKEY_PERFORMANCE_DATA
-};
-
-static const int ROOT_KEY_COUNT = sizeof (registry_keys) / sizeof (HKEY);
-
-/* Make sure to access the correct per-user HKCR and HKCU hives, even if
- the current user is only impersonated in another user's session. */
-static HKEY
-fetch_hkey (int idx) /* idx *must* be valid */
-{
- HKEY key;
-
- if (registry_keys[idx] == HKEY_CLASSES_ROOT)
- {
- if (RegOpenUserClassesRoot (cygheap->user.issetuid ()
- ? cygheap->user.imp_token () : hProcToken,
- 0, KEY_READ, &key) == ERROR_SUCCESS)
- return key;
- }
- else if (registry_keys[idx] == HKEY_CURRENT_USER)
- {
- if (RegOpenCurrentUser (KEY_READ, &key) == ERROR_SUCCESS)
- return key;
- }
- else if (registry_keys[idx] == HKEY_CURRENT_CONFIG)
- {
- if (RegOpenKeyExW (HKEY_LOCAL_MACHINE,
- L"System\\CurrentControlSet\\Hardware Profiles\\Current",
- 0, KEY_READ, &key) == ERROR_SUCCESS)
- return key;
- }
- /* Unfortunately there's no way to generate a valid OS registry key for
- the other root keys. HKEY_USERS and HKEY_LOCAL_MACHINE are file
- handles internally, HKEY_PERFORMANCE_DATA is just a bad hack and
- no registry key at all. */
- return registry_keys[idx];
-}
-
-/* These get added to each subdirectory in /proc/registry.
- * If we wanted to implement writing, we could maybe add a '.writable' entry or
- * suchlike.
- */
-static const char *special_dot_files[] =
-{
- ".",
- "..",
- NULL
-};
-
-static const int SPECIAL_DOT_FILE_COUNT =
- (sizeof (special_dot_files) / sizeof (const char *)) - 1;
-
-/* Value names for HKEY_PERFORMANCE_DATA.
- *
- * CAUTION: Never call RegQueryValueEx (HKEY_PERFORMANCE_DATA, "Add", ...).
- * It WRITES data and may destroy the perfc009.dat file. Same applies to
- * name prefixes "Ad" and "A".
- */
-static const char * const perf_data_files[] =
-{
- "@",
- "Costly",
- "Global"
-};
-
-static const int PERF_DATA_FILE_COUNT =
- sizeof (perf_data_files) / sizeof (perf_data_files[0]);
-
-static HKEY open_key (const char *name, REGSAM access, DWORD wow64, bool isValue);
-
-/* Return true if char must be encoded.
- */
-static inline bool
-must_encode (wchar_t c)
-{
- return (iswdirsep (c) || c == L':' || c == L'%');
-}
-
-/* Encode special chars in registry key or value name.
- * Returns 0: success, -1: error.
- */
-static int
-encode_regname (char *dst, const wchar_t *src, bool add_val)
-{
- int di = 0;
- if (!src[0])
- dst[di++] = '@'; // Default value.
- else
- for (int si = 0; src[si]; si++)
- {
- wchar_t c = src[si];
- if (must_encode (c) ||
- (si == 0 && ((c == L'.'
- && (!src[1] || (src[1] == L'.' && !src[2])))
- || (c == L'@' && !src[1]))))
- {
- if (di + 3 >= NAME_MAX + 1)
- return -1;
- __small_sprintf (dst + di, "%%%02x", c);
- di += 3;
- }
- else
- di += sys_wcstombs (dst + di, NAME_MAX + 1 - di, &c, 1);
- }
-
- if (add_val)
- {
- if (di + 4 >= NAME_MAX + 1)
- return -1;
- memcpy (dst + di, "%val", 4);
- di += 4;
- }
-
- dst[di] = 0;
- return 0;
-}
-
-/* Decode special chars in registry key or value name.
- * Returns 0: success, 1: "%val" detected, -1: error.
- */
-static int
-decode_regname (wchar_t *wdst, const char *src, int len = -1)
-{
- if (len < 0)
- len = strlen (src);
- char dst[len + 1];
- int res = 0;
-
- if (len > 4 && !memcmp (src + len - 4, "%val", 4))
- {
- len -= 4;
- res = 1;
- }
-
- int di = 0;
- if (len == 1 && src[0] == '@')
- ; // Default value.
- else
- for (int si = 0; si < len; si++)
- {
- char c = src[si];
- if (c == '%')
- {
- if (si + 2 >= len)
- return -1;
- char s[] = {src[si+1], src[si+2], '\0'};
- char *p;
- c = strtoul (s, &p, 16);
- if (!(must_encode ((wchar_t) c) ||
- (si == 0 && ((c == '.' && (len == 3 || (src[3] == '.' && len == 4))) ||
- (c == '@' && len == 3)))))
- return -1;
- dst[di++] = c;
- si += 2;
- }
- else
- dst[di++] = c;
- }
-
- dst[di] = 0;
- sys_mbstowcs (wdst, NAME_MAX + 1, dst);
- return res;
-}
-
-
-/* Hash table to limit calls to key_exists ().
- */
-class __DIR_hash
-{
-public:
- __DIR_hash ()
- {
- memset (table, 0, sizeof(table));
- }
-
- void set (unsigned h)
- {
- table [(h >> 3) & (HASH_SIZE - 1)] |= (1 << (h & 0x3));
- }
-
- bool is_set (unsigned h) const
- {
- return (table [(h >> 3) & (HASH_SIZE - 1)] & (1 << (h & 0x3))) != 0;
- }
-
-private:
- enum { HASH_SIZE = 1024 };
- unsigned char table[HASH_SIZE];
-};
-
-#define d_hash(d) ((__DIR_hash *) (d)->__d_internal)
-
-
-/* Return true if subkey NAME exists in key PARENT.
- */
-static bool
-key_exists (HKEY parent, const wchar_t *name, DWORD wow64)
-{
- HKEY hKey = (HKEY) INVALID_HANDLE_VALUE;
- LONG error = RegOpenKeyExW (parent, name, 0, KEY_READ | wow64, &hKey);
- if (error == ERROR_SUCCESS)
- RegCloseKey (hKey);
-
- return (error == ERROR_SUCCESS || error == ERROR_ACCESS_DENIED);
-}
-
-static size_t
-multi_wcstombs (char *dst, size_t len, const wchar_t *src, size_t nwc)
-{
- size_t siz, sum = 0;
- const wchar_t *nsrc;
-
- while (nwc)
- {
- siz = sys_wcstombs (dst, len, src, nwc);
- sum += siz;
- if (dst)
- {
- dst += siz;
- len -= siz;
- }
- nsrc = wcschr (src, L'\0') + 1;
- if ((size_t) (nsrc - src) >= nwc)
- break;
- nwc -= nsrc - src;
- src = nsrc;
- if (*src == L'\0')
- {
- if (dst)
- *dst++ = '\0';
- ++sum;
- break;
- }
- }
- return sum;
-}
-
-/* Returns 0 if path doesn't exist, >0 if path is a directory,
- * <0 if path is a file.
- *
- * We open the last key but one and then enum it's sub-keys and values to see if the
- * final component is there. This gets round the problem of not having security access
- * to the final key in the path.
- */
-virtual_ftype_t
-fhandler_registry::exists ()
-{
- virtual_ftype_t file_type = virt_none;
- int index = 0, pathlen;
- DWORD buf_size = NAME_MAX + 1;
- LONG error;
- wchar_t buf[buf_size];
- const char *file;
- HKEY hKey = (HKEY) INVALID_HANDLE_VALUE;
-
- const char *path = get_name ();
- debug_printf ("exists (%s)", path);
- path += proc_len + prefix_len + 1;
- if (*path)
- path++;
- else
- {
- file_type = virt_rootdir;
- goto out;
- }
- pathlen = strlen (path);
- file = path + pathlen - 1;
- if (isdirsep (*file) && pathlen > 1)
- file--;
- while (!isdirsep (*file))
- file--;
- file++;
-
- if (file == path)
- {
- for (int i = 0; registry_listing[i]; i++)
- if (path_prefix_p (registry_listing[i], path,
- strlen (registry_listing[i]), true))
- {
- file_type = virt_directory;
- break;
- }
- }
- else
- {
- wchar_t dec_file[NAME_MAX + 1];
-
- int val_only = decode_regname (dec_file, file);
- if (val_only < 0)
- goto out;
-
- if (!val_only)
- hKey = open_key (path, KEY_READ, wow64, false);
- if (hKey != (HKEY) INVALID_HANDLE_VALUE)
- {
- if (!strcasecmp (path + strlen (path)
- - sizeof (VIRT_CLASSES_KEY) + 1,
- VIRT_CLASSES_KEY))
- file_type = virt_symlink;
- else
- file_type = virt_directory;
- }
- else
- {
- /* Key does not exist or open failed with EACCES,
- enumerate subkey and value names of parent key. */
- hKey = open_key (path, KEY_READ, wow64, true);
- if (hKey == (HKEY) INVALID_HANDLE_VALUE)
- return virt_none;
-
- if (hKey == HKEY_PERFORMANCE_DATA)
- {
- /* RegEnumValue () returns garbage for this key.
- RegQueryValueEx () returns a PERF_DATA_BLOCK even
- if a value does not contain any counter objects.
- So allow access to the generic names and to
- (blank separated) lists of counter numbers.
- Never allow access to "Add", see above comment. */
- for (int i = 0; i < PERF_DATA_FILE_COUNT
- && file_type == virt_none; i++)
- {
- if (strcasematch (perf_data_files[i], file))
- file_type = virt_file;
- }
- if (file_type == virt_none && !file[strspn (file, " 0123456789")])
- file_type = virt_file;
- goto out;
- }
-
- if (!val_only && dec_file[0])
- {
- while (ERROR_SUCCESS ==
- (error = RegEnumKeyExW (hKey, index++, buf, &buf_size,
- NULL, NULL, NULL, NULL))
- || (error == ERROR_MORE_DATA))
- {
- if (!wcscasecmp (buf, dec_file))
- {
- file_type = virt_directory;
- goto out;
- }
- buf_size = NAME_MAX + 1;
- }
- if (error != ERROR_NO_MORE_ITEMS)
- {
- seterrno_from_win_error (__FILE__, __LINE__, error);
- goto out;
- }
- index = 0;
- buf_size = NAME_MAX + 1;
- }
-
- while (ERROR_SUCCESS ==
- (error = RegEnumValueW (hKey, index++, buf, &buf_size,
- NULL, NULL, NULL, NULL))
- || (error == ERROR_MORE_DATA))
- {
- if (!wcscasecmp (buf, dec_file))
- {
- file_type = virt_file;
- goto out;
- }
- buf_size = NAME_MAX + 1;
- }
- if (error != ERROR_NO_MORE_ITEMS)
- {
- seterrno_from_win_error (__FILE__, __LINE__, error);
- goto out;
- }
- }
- }
-out:
- if (hKey != (HKEY) INVALID_HANDLE_VALUE)
- RegCloseKey (hKey);
- return file_type;
-}
-
-void
-fhandler_registry::set_name (path_conv &in_pc)
-{
- if (strncasematch (in_pc.normalized_path, "/proc/registry32", 16))
- {
- wow64 = KEY_WOW64_32KEY;
- prefix_len += 2;
- }
- else if (strncasematch (in_pc.normalized_path, "/proc/registry64", 16))
- {
- wow64 = KEY_WOW64_64KEY;
- prefix_len += 2;
- }
- fhandler_base::set_name (in_pc);
-}
-
-fhandler_registry::fhandler_registry ():
-fhandler_proc ()
-{
- wow64 = 0;
- prefix_len = sizeof ("registry") - 1;
-}
-
-int __reg2
-fhandler_registry::fstat (struct stat *buf)
-{
- fhandler_base::fstat (buf);
- buf->st_mode &= ~_IFMT & NO_W;
- virtual_ftype_t file_type = exists ();
- switch (file_type)
- {
- case virt_none:
- set_errno (ENOENT);
- return -1;
- case virt_symlink:
- buf->st_mode |= S_IFLNK | S_IRWXU | S_IRWXG | S_IRWXO;
- break;
- case virt_directory:
- buf->st_mode |= S_IFDIR | S_IXUSR | S_IXGRP | S_IXOTH;
- break;
- case virt_rootdir:
- buf->st_mode |= S_IFDIR | S_IXUSR | S_IXGRP | S_IXOTH;
- buf->st_nlink = ROOT_KEY_COUNT;
- break;
- default:
- case virt_file:
- buf->st_mode |= S_IFREG;
- buf->st_mode &= NO_X;
- break;
- }
- if (file_type != virt_none && file_type != virt_rootdir)
- {
- HKEY hKey;
- const char *path = get_name () + proc_len + prefix_len + 2;
- hKey =
- open_key (path, STANDARD_RIGHTS_READ | KEY_QUERY_VALUE, wow64,
- (file_type < virt_none) ? true : false);
-
- if (hKey == HKEY_PERFORMANCE_DATA)
- /* RegQueryInfoKey () always returns write time 0,
- RegQueryValueEx () does not return required buffer size. */
- ;
- else if (hKey != (HKEY) INVALID_HANDLE_VALUE)
- {
- FILETIME ftLastWriteTime;
- DWORD subkey_count;
- if (ERROR_SUCCESS ==
- RegQueryInfoKeyW (hKey, NULL, NULL, NULL, &subkey_count, NULL,
- NULL, NULL, NULL, NULL, NULL, &ftLastWriteTime))
- {
- to_timestruc_t ((PLARGE_INTEGER) &ftLastWriteTime, &buf->st_mtim);
- buf->st_ctim = buf->st_birthtim = buf->st_mtim;
- time_as_timestruc_t (&buf->st_atim);
- if (file_type > virt_none)
- buf->st_nlink = subkey_count + 2;
- else
- {
- int pathlen = strlen (path);
- const char *value_name = path + pathlen - 1;
- if (isdirsep (*value_name) && pathlen > 1)
- value_name--;
- while (!isdirsep (*value_name))
- value_name--;
- value_name++;
- wchar_t dec_value_name[NAME_MAX + 1];
- DWORD dwSize = 0;
- DWORD type;
- if (decode_regname (dec_value_name, value_name) >= 0
- && RegQueryValueExW (hKey, dec_value_name, NULL, &type,
- NULL, &dwSize) == ERROR_SUCCESS
- && (type == REG_SZ || type == REG_EXPAND_SZ
- || type == REG_MULTI_SZ || type == REG_LINK))
- {
- PBYTE tmpbuf = (PBYTE) malloc (dwSize);
- if (!tmpbuf
- || RegQueryValueExW (hKey, dec_value_name,
- NULL, NULL, tmpbuf, &dwSize)
- != ERROR_SUCCESS)
- buf->st_size = dwSize / sizeof (wchar_t);
- else if (type == REG_MULTI_SZ)
- buf->st_size = multi_wcstombs (NULL, 0,
- (wchar_t *) tmpbuf,
- dwSize / sizeof (wchar_t));
- else
- buf->st_size = sys_wcstombs (NULL, 0,
- (wchar_t *) tmpbuf,
- dwSize / sizeof (wchar_t));
- if (tmpbuf)
- free (tmpbuf);
- }
- else
- buf->st_size = dwSize;
- }
- uid_t uid;
- gid_t gid;
- if (get_reg_attribute (hKey, &buf->st_mode, &uid, &gid) == 0)
- {
- buf->st_uid = uid;
- buf->st_gid = gid;
- buf->st_mode &= ~(S_IWUSR | S_IWGRP | S_IWOTH);
- if (file_type > virt_none)
- buf->st_mode |= S_IFDIR;
- else
- buf->st_mode &= NO_X;
- }
- }
- RegCloseKey (hKey);
- }
- else
- {
- /* Here's the problem: If we can't open the key, we don't know
- nothing at all about the key/value. It's only clear that
- the current user has no read access. At this point it's
- rather unlikely that the user has write or execute access
- and it's also rather unlikely that the user is the owner.
- Therefore it's probably most safe to assume unknown ownership
- and no permissions for nobody. */
- buf->st_uid = ILLEGAL_UID;
- buf->st_gid = ILLEGAL_GID;
- buf->st_mode &= ~0777;
- }
- }
- return 0;
-}
-
-DIR *
-fhandler_registry::opendir (int fd)
-{
- /* Skip fhandler_proc::opendir, which allocates dir->_d_handle for its
- own devilish purposes... */
- return fhandler_virtual::opendir (fd);
-}
-
-int
-fhandler_registry::readdir (DIR *dir, dirent *de)
-{
- DWORD buf_size = NAME_MAX + 1;
- wchar_t buf[buf_size];
- const char *path = dir->__d_dirname + proc_len + 1 + prefix_len;
- LONG error;
- int res = ENMFILE;
-
- dir->__flags |= dirent_saw_dot | dirent_saw_dot_dot;
- if (*path == 0)
- {
- if (dir->__d_position >= ROOT_KEY_COUNT)
- goto out;
- strcpy (de->d_name, registry_listing[dir->__d_position++]);
- res = 0;
- goto out;
- }
- if (dir->__handle == INVALID_HANDLE_VALUE)
- {
- if (dir->__d_position != 0)
- goto out;
- dir->__handle = open_key (path + 1, KEY_READ, wow64, false);
- if (dir->__handle == INVALID_HANDLE_VALUE)
- goto out;
- dir->__d_internal = (uintptr_t) new __DIR_hash ();
- }
- if (dir->__d_position < SPECIAL_DOT_FILE_COUNT)
- {
- strcpy (de->d_name, special_dot_files[dir->__d_position++]);
- res = 0;
- goto out;
- }
- if ((HKEY) dir->__handle == HKEY_PERFORMANCE_DATA)
- {
- /* RegEnumValue () returns garbage for this key,
- simulate only a minimal listing of the generic names. */
- if (dir->__d_position >= SPECIAL_DOT_FILE_COUNT + PERF_DATA_FILE_COUNT)
- goto out;
- strcpy (de->d_name, perf_data_files[dir->__d_position - SPECIAL_DOT_FILE_COUNT]);
- dir->__d_position++;
- res = 0;
- goto out;
- }
-
-retry:
- if (dir->__d_position & REG_ENUM_VALUES_MASK)
- /* For the moment, the type of key is ignored here. when write access is added,
- * maybe add an extension for the type of each value?
- */
- error = RegEnumValueW ((HKEY) dir->__handle,
- (dir->__d_position & ~REG_ENUM_VALUES_MASK) >> 16,
- buf, &buf_size, NULL, NULL, NULL, NULL);
- else
- error =
- RegEnumKeyExW ((HKEY) dir->__handle, dir->__d_position -
- SPECIAL_DOT_FILE_COUNT, buf, &buf_size,
- NULL, NULL, NULL, NULL);
- if (error == ERROR_NO_MORE_ITEMS
- && (dir->__d_position & REG_ENUM_VALUES_MASK) == 0)
- {
- /* If we're finished with sub-keys, start on values under this key. */
- dir->__d_position |= REG_ENUM_VALUES_MASK;
- buf_size = NAME_MAX + 1;
- goto retry;
- }
- if (error != ERROR_SUCCESS && error != ERROR_MORE_DATA)
- {
- delete d_hash (dir);
- RegCloseKey ((HKEY) dir->__handle);
- dir->__handle = INVALID_HANDLE_VALUE;
- if (error != ERROR_NO_MORE_ITEMS)
- seterrno_from_win_error (__FILE__, __LINE__, error);
- goto out;
- }
-
- /* We get here if `buf' contains valid data. */
- dir->__d_position++;
- if (dir->__d_position & REG_ENUM_VALUES_MASK)
- dir->__d_position += 0x10000;
-
- {
- /* Append "%val" if value name is identical to a previous key name. */
- unsigned h = hash_path_name (1, buf);
- bool add_val = false;
- if (! (dir->__d_position & REG_ENUM_VALUES_MASK))
- d_hash (dir)->set (h);
- else if (d_hash (dir)->is_set (h)
- && key_exists ((HKEY) dir->__handle, buf, wow64))
- add_val = true;
-
- if (encode_regname (de->d_name, buf, add_val))
- {
- buf_size = NAME_MAX + 1;
- goto retry;
- }
- }
-
- if (dir->__d_position & REG_ENUM_VALUES_MASK)
- de->d_type = DT_REG;
- else if (!strcasecmp (de->d_name, "Classes")
- && !strcasecmp (path + strlen (path)
- - sizeof (VIRT_CLASSES_KEY_PREFIX) + 1,
- VIRT_CLASSES_KEY_PREFIX))
- de->d_type = DT_LNK;
- else
- de->d_type = DT_DIR;
-
- res = 0;
-out:
- syscall_printf ("%d = readdir(%p, %p)", res, dir, de);
- return res;
-}
-
-long
-fhandler_registry::telldir (DIR * dir)
-{
- return dir->__d_position & REG_POSITION_MASK;
-}
-
-void
-fhandler_registry::seekdir (DIR * dir, long loc)
-{
- /* Unfortunately cannot simply set __d_position due to transition from sub-keys to
- * values.
- */
- rewinddir (dir);
- while (loc > (dir->__d_position & REG_POSITION_MASK))
- if (readdir (dir, dir->__d_dirent))
- break;
-}
-
-void
-fhandler_registry::rewinddir (DIR * dir)
-{
- if (dir->__handle != INVALID_HANDLE_VALUE)
- {
- delete d_hash (dir);
- RegCloseKey ((HKEY) dir->__handle);
- dir->__handle = INVALID_HANDLE_VALUE;
- }
- dir->__d_position = 0;
- dir->__flags = dirent_saw_dot | dirent_saw_dot_dot;
-}
-
-int
-fhandler_registry::closedir (DIR * dir)
-{
- int res = 0;
- if (dir->__handle != INVALID_HANDLE_VALUE)
- {
- delete d_hash (dir);
- if (RegCloseKey ((HKEY) dir->__handle) != ERROR_SUCCESS)
- {
- __seterrno ();
- res = -1;
- }
- }
- syscall_printf ("%d = closedir(%p)", res, dir);
- return 0;
-}
-
-int
-fhandler_registry::open (int flags, mode_t mode)
-{
- int pathlen;
- const char *file;
- HKEY handle = (HKEY) INVALID_HANDLE_VALUE;
-
- int res = fhandler_virtual::open (flags, mode);
- if (!res)
- goto out;
-
- const char *path;
- path = get_name () + proc_len + 1 + prefix_len;
- if (!*path)
- {
- if ((flags & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL))
- {
- set_errno (EEXIST);
- res = 0;
- goto out;
- }
- else if (flags & O_WRONLY)
- {
- set_errno (EISDIR);
- res = 0;
- goto out;
- }
- else
- {
- flags |= O_DIROPEN;
- /* Marking as nohandle allows to call dup. */
- nohandle (true);
- goto success;
- }
- }
- path++;
- pathlen = strlen (path);
- file = path + pathlen - 1;
- if (isdirsep (*file) && pathlen > 1)
- file--;
- while (!isdirsep (*file))
- file--;
- file++;
-
- if (file == path)
- {
- for (int i = 0; registry_listing[i]; i++)
- if (path_prefix_p (registry_listing[i], path,
- strlen (registry_listing[i]), true))
- {
- if ((flags & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL))
- {
- set_errno (EEXIST);
- res = 0;
- goto out;
- }
- else if (flags & O_WRONLY)
- {
- set_errno (EISDIR);
- res = 0;
- goto out;
- }
- else
- {
- set_io_handle (fetch_hkey (i));
- /* Marking as nohandle allows to call dup on pseudo registry
- handles. */
- if (get_handle () >= HKEY_CLASSES_ROOT)
- nohandle (true);
- flags |= O_DIROPEN;
- goto success;
- }
- }
-
- if (flags & O_CREAT)
- {
- set_errno (EROFS);
- res = 0;
- }
- else
- {
- set_errno (ENOENT);
- res = 0;
- }
- goto out;
- }
-
- if (flags & O_WRONLY)
- {
- set_errno (EROFS);
- res = 0;
- goto out;
- }
- else
- {
- wchar_t dec_file[NAME_MAX + 1];
- int val_only = decode_regname (dec_file, file);
- if (val_only < 0)
- {
- set_errno (EINVAL);
- res = 0;
- goto out;
- }
-
- if (!val_only)
- handle = open_key (path, KEY_READ, wow64, false);
- if (handle == (HKEY) INVALID_HANDLE_VALUE)
- {
- if (val_only || get_errno () != EACCES)
- handle = open_key (path, KEY_READ, wow64, true);
- if (handle == (HKEY) INVALID_HANDLE_VALUE)
- {
- res = 0;
- goto out;
- }
- }
- else
- flags |= O_DIROPEN;
-
- set_io_handle (handle);
- set_close_on_exec (!!(flags & O_CLOEXEC));
- value_name = cwcsdup (dec_file);
-
- if (!(flags & O_DIROPEN) && !fill_filebuf ())
- {
- RegCloseKey (handle);
- res = 0;
- goto out;
- }
-
- if (flags & O_APPEND)
- position = filesize;
- else
- position = 0;
- }
-
-success:
- res = 1;
- set_flags ((flags & ~O_TEXT) | O_BINARY);
- set_open_status ();
-out:
- syscall_printf ("%d = fhandler_registry::open(%p, 0%o)", res, flags, mode);
- return res;
-}
-
-int
-fhandler_registry::close ()
-{
- int res = fhandler_virtual::close ();
- if (res != 0)
- return res;
- HKEY handle = (HKEY) get_handle ();
- if (handle != (HKEY) INVALID_HANDLE_VALUE && handle < HKEY_CLASSES_ROOT)
- {
- if (RegCloseKey (handle) != ERROR_SUCCESS)
- {
- __seterrno ();
- res = -1;
- }
- }
- if (!have_execed && value_name)
- {
- cfree (value_name);
- value_name = NULL;
- }
- return res;
-}
-
-bool
-fhandler_registry::fill_filebuf ()
-{
- DWORD type, size;
- LONG error;
- HKEY handle = (HKEY) get_handle ();
- size_t bufalloc;
-
- if (handle != HKEY_PERFORMANCE_DATA)
- {
- error = RegQueryValueExW (handle, value_name, NULL, &type, NULL, &size);
- if (error != ERROR_SUCCESS)
- {
- if (error == ERROR_INVALID_HANDLE
- && !strcasecmp (get_name () + strlen (get_name ())
- - sizeof (VIRT_CLASSES_KEY) + 1,
- VIRT_CLASSES_KEY))
- {
- filesize = sizeof (VIRT_CLASSES_LINKTGT);
- filebuf = (char *) cmalloc_abort (HEAP_BUF, filesize);
- strcpy (filebuf, VIRT_CLASSES_LINKTGT);
- return true;
- }
- if (error != ERROR_FILE_NOT_FOUND)
- {
- seterrno_from_win_error (__FILE__, __LINE__, error);
- return false;
- }
- goto value_not_found;
- }
- PBYTE tmpbuf = (PBYTE) cmalloc_abort (HEAP_BUF, size);
- error =
- RegQueryValueExW (handle, value_name, NULL, NULL, tmpbuf, &size);
- if (error != ERROR_SUCCESS)
- {
- seterrno_from_win_error (__FILE__, __LINE__, error);
- return true;
- }
- if (type == REG_SZ || type == REG_EXPAND_SZ || type == REG_LINK)
- bufalloc = sys_wcstombs (NULL, 0, (wchar_t *) tmpbuf,
- size / sizeof (wchar_t));
- else if (type == REG_MULTI_SZ)
- bufalloc = multi_wcstombs (NULL, 0, (wchar_t *) tmpbuf,
- size / sizeof (wchar_t));
- else
- bufalloc = size;
- filebuf = (char *) cmalloc_abort (HEAP_BUF, bufalloc);
- if (type == REG_SZ || type == REG_EXPAND_SZ || type == REG_LINK)
- sys_wcstombs (filebuf, bufalloc, (wchar_t *) tmpbuf,
- size / sizeof (wchar_t));
- else if (type == REG_MULTI_SZ)
- multi_wcstombs (filebuf, bufalloc, (wchar_t *) tmpbuf,
- size / sizeof (wchar_t));
- else
- memcpy (filebuf, tmpbuf, bufalloc);
- filesize = bufalloc;
- }
- else
- {
- bufalloc = 0;
- do
- {
- bufalloc += 16 * 1024;
- filebuf = (char *) crealloc_abort (filebuf, bufalloc);
- size = bufalloc;
- error = RegQueryValueExW (handle, value_name, NULL, &type,
- (PBYTE) filebuf, &size);
- if (error != ERROR_SUCCESS && error != ERROR_MORE_DATA)
- {
- seterrno_from_win_error (__FILE__, __LINE__, error);
- return false;
- }
- }
- while (error == ERROR_MORE_DATA);
- filesize = size;
- /* RegQueryValueEx () opens HKEY_PERFORMANCE_DATA. */
- RegCloseKey (handle);
- }
- return true;
-value_not_found:
- DWORD buf_size = NAME_MAX + 1;
- wchar_t buf[buf_size];
- int index = 0;
- while (ERROR_SUCCESS ==
- (error = RegEnumKeyExW (handle, index++, buf, &buf_size, NULL, NULL,
- NULL, NULL)) || (error == ERROR_MORE_DATA))
- {
- if (!wcscasecmp (buf, value_name))
- {
- set_errno (EISDIR);
- return false;
- }
- buf_size = NAME_MAX + 1;
- }
- if (error != ERROR_NO_MORE_ITEMS)
- {
- seterrno_from_win_error (__FILE__, __LINE__, error);
- return false;
- }
- set_errno (ENOENT);
- return false;
-}
-
-/* Auxillary member function to open registry keys. */
-static HKEY
-open_key (const char *name, REGSAM access, DWORD wow64, bool isValue)
-{
- HKEY hKey = (HKEY) INVALID_HANDLE_VALUE;
- HKEY hParentKey = (HKEY) INVALID_HANDLE_VALUE;
- bool parentOpened = false;
- wchar_t component[NAME_MAX + 1];
-
- while (*name)
- {
- const char *anchor = name;
- while (*name && !isdirsep (*name))
- name++;
- int val_only = decode_regname (component, anchor, name - anchor);
- if (val_only < 0)
- {
- set_errno (EINVAL);
- if (parentOpened)
- RegCloseKey (hParentKey);
- hKey = (HKEY) INVALID_HANDLE_VALUE;
- break;
- }
- if (*name)
- name++;
- if (*name == 0 && isValue == true)
- break;
-
- if (val_only || !component[0] || hKey == HKEY_PERFORMANCE_DATA)
- {
- set_errno (ENOENT);
- if (parentOpened)
- RegCloseKey (hParentKey);
- hKey = (HKEY) INVALID_HANDLE_VALUE;
- break;
- }
-
- if (hParentKey != (HKEY) INVALID_HANDLE_VALUE)
- {
- REGSAM effective_access = KEY_READ;
- if ((strchr (name, '/') == NULL && isValue == true) || *name == 0)
- effective_access = access;
- LONG error = RegOpenKeyExW (hParentKey, component, 0,
- effective_access | wow64, &hKey);
- if (error == ERROR_ACCESS_DENIED) /* Try opening with backup intent */
- error = RegCreateKeyExW (hParentKey, component, 0, NULL,
- REG_OPTION_BACKUP_RESTORE,
- effective_access | wow64, NULL,
- &hKey, NULL);
- if (parentOpened)
- RegCloseKey (hParentKey);
- if (error != ERROR_SUCCESS)
- {
- hKey = (HKEY) INVALID_HANDLE_VALUE;
- seterrno_from_win_error (__FILE__, __LINE__, error);
- return hKey;
- }
- hParentKey = hKey;
- parentOpened = true;
- }
- else
- {
- for (int i = 0; registry_listing[i]; i++)
- if (strncasematch (anchor, registry_listing[i], name - anchor - 1))
- hKey = fetch_hkey (i);
- if (hKey == (HKEY) INVALID_HANDLE_VALUE)
- return hKey;
- hParentKey = hKey;
- }
- }
- return hKey;
-}
-
-int
-fhandler_registry::dup (fhandler_base *child, int flags)
-{
- debug_printf ("here");
- fhandler_registry *fhs = (fhandler_registry *) child;
-
- int ret = fhandler_virtual::dup (fhs, flags);
- /* Pseudo registry handles can't be duplicated using DuplicateHandle.
- Therefore those fhandlers are marked with the nohandle flag. This
- allows fhandler_base::dup to succeed as usual for nohandle fhandlers.
- Here we just have to fix up by copying the pseudo handle value. */
- if ((HKEY) get_handle () >= HKEY_CLASSES_ROOT)
- fhs->set_io_handle (get_handle ());
- if (value_name)
- fhs->value_name = cwcsdup (value_name);
- return ret;
-}
diff --git a/winsup/cygwin/fhandler_serial.cc b/winsup/cygwin/fhandler_serial.cc
deleted file mode 100644
index b6641e5e4..000000000
--- a/winsup/cygwin/fhandler_serial.cc
+++ /dev/null
@@ -1,1167 +0,0 @@
-/* fhandler_serial.cc
-
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2011, 2012 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include <unistd.h>
-#include <sys/param.h>
-#include "cygerrno.h"
-#include "security.h"
-#include "path.h"
-#include "fhandler.h"
-#include "sigproc.h"
-#include "pinfo.h"
-#include <asm/socket.h>
-#include <devioctl.h>
-#include <ntddser.h>
-#include "cygwait.h"
-
-/**********************************************************************/
-/* fhandler_serial */
-
-fhandler_serial::fhandler_serial ()
- : fhandler_base (), vmin_ (0), vtime_ (0), pgrp_ (myself->pgid)
-{
- need_fork_fixup (true);
-}
-
-void
-fhandler_serial::overlapped_setup ()
-{
- memset (&io_status, 0, sizeof (io_status));
- io_status.hEvent = CreateEvent (&sec_none_nih, TRUE, FALSE, NULL);
- ProtectHandle (io_status.hEvent);
- overlapped_armed = 0;
-}
-
-void __reg3
-fhandler_serial::raw_read (void *ptr, size_t& ulen)
-{
- int tot;
- DWORD n;
-
- size_t minchars = vmin_ ? MIN (vmin_, ulen) : ulen;
-
- debug_printf ("ulen %ld, vmin_ %ld, vtime_ %u, hEvent %p",
- ulen, vmin_, vtime_, io_status.hEvent);
- if (!overlapped_armed)
- {
- SetCommMask (get_handle (), EV_RXCHAR);
- ResetEvent (io_status.hEvent);
- }
-
- for (n = 0, tot = 0; ulen; ulen -= n, ptr = (char *) ptr + n)
- {
- COMSTAT st;
- DWORD inq = vmin_ ? minchars : vtime_ ? ulen : 1;
-
- n = 0;
-
- if (vtime_) // non-interruptible -- have to use kernel timeouts
- overlapped_armed = -1;
-
- if (!ClearCommError (get_handle (), &ev, &st))
- goto err;
- else if (ev)
- termios_printf ("error detected %x", ev);
- else if (st.cbInQue && !vtime_)
- inq = st.cbInQue;
- else if (!is_nonblocking () && !overlapped_armed)
- {
- if ((size_t) tot >= minchars)
- break;
- else if (WaitCommEvent (get_handle (), &ev, &io_status))
- {
- debug_printf ("WaitCommEvent succeeded: ev %x", ev);
- if (!ev)
- continue;
- }
- else if (GetLastError () != ERROR_IO_PENDING)
- goto err;
- else
- {
- overlapped_armed = 1;
- switch (cygwait (io_status.hEvent))
- {
- case WAIT_OBJECT_0:
- if (!GetOverlappedResult (get_handle (), &io_status, &n,
- FALSE))
- goto err;
- debug_printf ("n %u, ev %x", n, ev);
- break;
- case WAIT_SIGNALED:
- tot = -1;
- PurgeComm (get_handle (), PURGE_RXABORT);
- overlapped_armed = 0;
- set_sig_errno (EINTR);
- goto out;
- case WAIT_CANCELED:
- PurgeComm (get_handle (), PURGE_RXABORT);
- overlapped_armed = 0;
- pthread::static_cancel_self ();
- /*NOTREACHED*/
- default:
- goto err;
- }
- }
- }
-
- overlapped_armed = 0;
- ResetEvent (io_status.hEvent);
- if (inq > ulen)
- inq = ulen;
- debug_printf ("inq %u", inq);
- if (ReadFile (get_handle (), ptr, inq, &n, &io_status))
- /* Got something */;
- else if (GetLastError () != ERROR_IO_PENDING)
- goto err;
- else if (is_nonblocking ())
- {
- /* Use CancelIo rather than PurgeComm (PURGE_RXABORT) since
- PurgeComm apparently discards in-flight bytes while CancelIo
- only stops the overlapped IO routine. */
- CancelIo (get_handle ());
- if (GetOverlappedResult (get_handle (), &io_status, &n, FALSE))
- tot = n;
- else if (GetLastError () != ERROR_OPERATION_ABORTED)
- goto err;
- if (tot == 0)
- {
- tot = -1;
- set_errno (EAGAIN);
- }
- goto out;
- }
- else if (!GetOverlappedResult (get_handle (), &io_status, &n, TRUE))
- goto err;
-
- tot += n;
- debug_printf ("vtime_ %u, vmin_ %lu, n %u, tot %d", vtime_, vmin_, n, tot);
- if (vtime_ || !vmin_ || !n)
- break;
- continue;
-
- err:
- debug_printf ("err %E");
- if (GetLastError () != ERROR_OPERATION_ABORTED)
- {
- PurgeComm (get_handle (), PURGE_RXABORT);
- tot = -1;
- __seterrno ();
- break;
- }
-
- n = 0;
- }
-
-out:
- ulen = tot;
-}
-
-/* Cover function to WriteFile to provide Posix interface and semantics
- (as much as possible). */
-ssize_t __reg3
-fhandler_serial::raw_write (const void *ptr, size_t len)
-{
- DWORD bytes_written;
- OVERLAPPED write_status;
-
- memset (&write_status, 0, sizeof (write_status));
- write_status.hEvent = CreateEvent (&sec_none_nih, TRUE, FALSE, NULL);
- ProtectHandle (write_status.hEvent);
-
- for (;;)
- {
- if (WriteFile (get_handle (), ptr, len, &bytes_written, &write_status))
- break;
-
- switch (GetLastError ())
- {
- case ERROR_OPERATION_ABORTED:
- DWORD ev;
- if (!ClearCommError (get_handle (), &ev, NULL))
- goto err;
- if (ev)
- termios_printf ("error detected %x", ev);
- continue;
- case ERROR_IO_PENDING:
- break;
- default:
- goto err;
- }
-
- if (!is_nonblocking ())
- {
- switch (cygwait (write_status.hEvent))
- {
- case WAIT_OBJECT_0:
- break;
- case WAIT_SIGNALED:
- PurgeComm (get_handle (), PURGE_TXABORT);
- set_sig_errno (EINTR);
- ForceCloseHandle (write_status.hEvent);
- return -1;
- case WAIT_CANCELED:
- PurgeComm (get_handle (), PURGE_TXABORT);
- pthread::static_cancel_self ();
- /*NOTREACHED*/
- default:
- goto err;
- }
- }
- if (!GetOverlappedResult (get_handle (), &write_status, &bytes_written, TRUE))
- goto err;
-
- break;
- }
-
- ForceCloseHandle (write_status.hEvent);
-
- return bytes_written;
-
-err:
- __seterrno ();
- ForceCloseHandle (write_status.hEvent);
- return -1;
-}
-
-int
-fhandler_serial::init (HANDLE f, DWORD flags, mode_t bin)
-{
- return open (flags, bin & (O_BINARY | O_TEXT));
-}
-
-int
-fhandler_serial::open (int flags, mode_t mode)
-{
- int res;
- COMMTIMEOUTS to;
-
- syscall_printf ("fhandler_serial::open (%s, %y, 0%o)",
- get_name (), flags, mode);
-
- if (!fhandler_base::open (flags, mode))
- return 0;
-
- res = 1;
-
- SetCommMask (get_handle (), EV_RXCHAR);
-
- overlapped_setup ();
-
- memset (&to, 0, sizeof (to));
- SetCommTimeouts (get_handle (), &to);
-
- /* Reset serial port to known state of 9600-8-1-no flow control
- on open for better behavior under Win 95.
-
- FIXME: This should only be done when explicitly opening the com
- port. It should not be reset if an fd is inherited.
- Using __progname in this way, to determine how far along in the
- initialization we are, is really a terrible kludge and should
- be fixed ASAP.
- */
- if (reset_com && __progname)
- {
- DCB state;
- GetCommState (get_handle (), &state);
- syscall_printf ("setting initial state on %s (reset_com %d)",
- get_name (), reset_com);
- state.BaudRate = CBR_9600;
- state.ByteSize = 8;
- state.StopBits = ONESTOPBIT;
- state.Parity = NOPARITY; /* FIXME: correct default? */
- state.fBinary = TRUE; /* binary xfer */
- state.EofChar = 0; /* no end-of-data in binary mode */
- state.fNull = FALSE; /* don't discard nulls in binary mode */
- state.fParity = FALSE; /* ignore parity errors */
- state.fErrorChar = FALSE;
- state.fTXContinueOnXoff = TRUE; /* separate TX and RX flow control */
- state.fOutX = FALSE; /* disable transmission flow control */
- state.fInX = FALSE; /* disable reception flow control */
- state.XonChar = 0x11;
- state.XoffChar = 0x13;
- state.fOutxDsrFlow = FALSE; /* disable DSR flow control */
- state.fRtsControl = RTS_CONTROL_ENABLE; /* ignore lead control except
- DTR */
- state.fOutxCtsFlow = FALSE; /* disable output flow control */
- state.fDtrControl = DTR_CONTROL_ENABLE; /* assert DTR */
- state.fDsrSensitivity = FALSE; /* don't assert DSR */
- state.fAbortOnError = TRUE;
- if (!SetCommState (get_handle (), &state))
- system_printf ("couldn't set initial state for %s, %E", get_name ());
- }
-
- SetCommMask (get_handle (), EV_RXCHAR);
- set_open_status ();
- syscall_printf ("%p = fhandler_serial::open (%s, %y, 0%o)",
- res, get_name (), flags, mode);
- return res;
-}
-
-int
-fhandler_serial::close ()
-{
- ForceCloseHandle (io_status.hEvent);
- return fhandler_base::close ();
-}
-
-/* tcsendbreak: POSIX 7.2.2.1 */
-/* Break for 250-500 milliseconds if duration == 0 */
-/* Otherwise, units for duration are undefined */
-int
-fhandler_serial::tcsendbreak (int duration)
-{
- unsigned int sleeptime = 300000;
-
- if (duration > 0)
- sleeptime *= duration;
-
- if (SetCommBreak (get_handle ()) == 0)
- return -1;
-
- /* FIXME: need to send zero bits during duration */
- usleep (sleeptime);
-
- if (ClearCommBreak (get_handle ()) == 0)
- return -1;
-
- syscall_printf ("0 = fhandler_serial:tcsendbreak (%d)", duration);
-
- return 0;
-}
-
-/* tcdrain: POSIX 7.2.2.1 */
-int
-fhandler_serial::tcdrain ()
-{
- if (FlushFileBuffers (get_handle ()) == 0)
- return -1;
-
- return 0;
-}
-
-/* tcflow: POSIX 7.2.2.1 */
-int
-fhandler_serial::tcflow (int action)
-{
- DWORD win32action = 0;
- DCB dcb;
- char xchar;
-
- termios_printf ("action %d", action);
-
- switch (action)
- {
- case TCOOFF:
- win32action = SETXOFF;
- break;
- case TCOON:
- win32action = SETXON;
- break;
- case TCION:
- case TCIOFF:
- if (GetCommState (get_handle (), &dcb) == 0)
- return -1;
- if (action == TCION)
- xchar = (dcb.XonChar ? dcb.XonChar : 0x11);
- else
- xchar = (dcb.XoffChar ? dcb.XoffChar : 0x13);
- if (TransmitCommChar (get_handle (), xchar) == 0)
- return -1;
- return 0;
- break;
- default:
- return -1;
- break;
- }
-
- if (EscapeCommFunction (get_handle (), win32action) == 0)
- return -1;
-
- return 0;
-}
-
-
-/* switch_modem_lines: set or clear RTS and/or DTR */
-int
-fhandler_serial::switch_modem_lines (int set, int clr)
-{
- int res = 0;
-
- if (set & TIOCM_RTS)
- {
- if (EscapeCommFunction (get_handle (), SETRTS))
- rts = TIOCM_RTS;
- else
- {
- __seterrno ();
- res = -1;
- }
- }
- else if (clr & TIOCM_RTS)
- {
- if (EscapeCommFunction (get_handle (), CLRRTS))
- rts = 0;
- else
- {
- __seterrno ();
- res = -1;
- }
- }
- if (set & TIOCM_DTR)
- {
- if (EscapeCommFunction (get_handle (), SETDTR))
- rts = TIOCM_DTR;
- else
- {
- __seterrno ();
- res = -1;
- }
- }
- else if (clr & TIOCM_DTR)
- {
- if (EscapeCommFunction (get_handle (), CLRDTR))
- rts = 0;
- else
- {
- __seterrno ();
- res = -1;
- }
- }
-
- return res;
-}
-
-/* ioctl: */
-int
-fhandler_serial::ioctl (unsigned int cmd, void *buf)
-{
- int res = 0;
-
-# define ibuf ((int) (intptr_t) buf)
-# define ipbuf (*(int *) buf)
-
- DWORD ev;
- COMSTAT st;
- if (!ClearCommError (get_handle (), &ev, &st))
- {
- __seterrno ();
- res = -1;
- }
- else
- switch (cmd)
- {
- case TCFLSH:
- res = tcflush (ibuf);
- break;
- case TIOCMGET:
- DWORD modem_lines;
- if (!GetCommModemStatus (get_handle (), &modem_lines))
- {
- __seterrno ();
- res = -1;
- }
- else
- {
- ipbuf = 0;
- if (modem_lines & MS_CTS_ON)
- ipbuf |= TIOCM_CTS;
- if (modem_lines & MS_DSR_ON)
- ipbuf |= TIOCM_DSR;
- if (modem_lines & MS_RING_ON)
- ipbuf |= TIOCM_RI;
- if (modem_lines & MS_RLSD_ON)
- ipbuf |= TIOCM_CD;
-
- DWORD cb;
- DWORD mcr;
- if (!DeviceIoControl (get_handle (), IOCTL_SERIAL_GET_DTRRTS,
- NULL, 0, &mcr, 4, &cb, 0) || cb != 4)
- ipbuf |= rts | dtr;
- else
- {
- if (mcr & 2)
- ipbuf |= TIOCM_RTS;
- if (mcr & 1)
- ipbuf |= TIOCM_DTR;
- }
- }
- break;
- case TIOCMSET:
- if (switch_modem_lines (ipbuf, ~ipbuf))
- res = -1;
- break;
- case TIOCMBIS:
- if (switch_modem_lines (ipbuf, 0))
- res = -1;
- break;
- case TIOCMBIC:
- if (switch_modem_lines (0, ipbuf))
- res = -1;
- break;
- case TIOCCBRK:
- if (ClearCommBreak (get_handle ()) == 0)
- {
- __seterrno ();
- res = -1;
- }
- break;
- case TIOCSBRK:
- if (SetCommBreak (get_handle ()) == 0)
- {
- __seterrno ();
- res = -1;
- }
- break;
- case TIOCINQ:
- if (ev & CE_FRAME || ev & CE_IOE || ev & CE_OVERRUN || ev & CE_RXOVER
- || ev & CE_RXPARITY)
- {
- set_errno (EINVAL); /* FIXME: Use correct errno */
- res = -1;
- }
- else
- ipbuf = st.cbInQue;
- break;
- case TIOCGWINSZ:
- ((struct winsize *) buf)->ws_row = 0;
- ((struct winsize *) buf)->ws_col = 0;
- break;
- case FIONREAD:
- set_errno (ENOTSUP);
- res = -1;
- break;
- default:
- res = fhandler_base::ioctl (cmd, buf);
- break;
- }
-
- termios_printf ("%d = ioctl(%x, %p)", res, cmd, buf);
-# undef ibuf
-# undef ipbuf
- return res;
-}
-
-/* tcflush: POSIX 7.2.2.1 */
-int
-fhandler_serial::tcflush (int queue)
-{
- DWORD flags;
-
- switch (queue)
- {
- case TCOFLUSH:
- flags = PURGE_TXABORT | PURGE_TXCLEAR;
- break;
- case TCIFLUSH:
- flags = PURGE_RXABORT | PURGE_RXCLEAR;
- break;
- case TCIOFLUSH:
- flags = PURGE_TXABORT | PURGE_TXCLEAR | PURGE_RXABORT | PURGE_RXCLEAR;
- break;
- default:
- termios_printf ("Invalid tcflush queue %d", queue);
- set_errno (EINVAL);
- return -1;
- }
-
- if (!PurgeComm (get_handle (), flags))
- {
- __seterrno ();
- return -1;
- }
-
- return 0;
-}
-
-/* tcsetattr: POSIX 7.2.1.1 */
-int
-fhandler_serial::tcsetattr (int action, const struct termios *t)
-{
- /* Possible actions:
- TCSANOW: immediately change attributes.
- TCSADRAIN: flush output, then change attributes.
- TCSAFLUSH: flush output and discard input, then change attributes.
- */
-
- bool dropDTR = false;
- COMMTIMEOUTS to;
- DCB ostate, state;
- unsigned int ovtime = vtime_, ovmin = vmin_;
- int tmpDtr, tmpRts, res;
- res = tmpDtr = tmpRts = 0;
-
- termios_printf ("action %d", action);
- if ((action == TCSADRAIN) || (action == TCSAFLUSH))
- {
- FlushFileBuffers (get_handle ());
- termios_printf ("flushed file buffers");
- }
- if (action == TCSAFLUSH)
- PurgeComm (get_handle (), (PURGE_RXABORT | PURGE_RXCLEAR));
-
- /* get default/last comm state */
- if (!GetCommState (get_handle (), &ostate))
- return -1;
-
- state = ostate;
-
- /* -------------- Set baud rate ------------------ */
- /* FIXME: WIN32 also has 14400, 56000, 128000, and 256000.
- Unix also has 230400. */
-
- switch (t->c_ospeed)
- {
- case B0:
- /* Drop DTR - but leave DCB-resident bitrate as-is since
- 0 is an invalid bitrate in Win32 */
- dropDTR = true;
- break;
- case B110:
- state.BaudRate = CBR_110;
- break;
- case B300:
- state.BaudRate = CBR_300;
- break;
- case B600:
- state.BaudRate = CBR_600;
- break;
- case B1200:
- state.BaudRate = CBR_1200;
- break;
- case B2400:
- state.BaudRate = CBR_2400;
- break;
- case B4800:
- state.BaudRate = CBR_4800;
- break;
- case B9600:
- state.BaudRate = CBR_9600;
- break;
- case B19200:
- state.BaudRate = CBR_19200;
- break;
- case B38400:
- state.BaudRate = CBR_38400;
- break;
- case B57600:
- state.BaudRate = CBR_57600;
- break;
- case B115200:
- state.BaudRate = CBR_115200;
- break;
- case B128000:
- state.BaudRate = CBR_128000;
- break;
- case B230400:
- state.BaudRate = 230400 /* CBR_230400 - not defined */;
- break;
- case B256000:
- state.BaudRate = CBR_256000;
- break;
- case B460800:
- state.BaudRate = 460800 /* CBR_460800 - not defined */;
- break;
- case B500000:
- state.BaudRate = 500000 /* CBR_500000 - not defined */;
- break;
- case B576000:
- state.BaudRate = 576000 /* CBR_576000 - not defined */;
- break;
- case B921600:
- state.BaudRate = 921600 /* CBR_921600 - not defined */;
- break;
- case B1000000:
- state.BaudRate = 1000000 /* CBR_1000000 - not defined */;
- break;
- case B1152000:
- state.BaudRate = 1152000 /* CBR_1152000 - not defined */;
- break;
- case B1500000:
- state.BaudRate = 1500000 /* CBR_1500000 - not defined */;
- break;
- case B2000000:
- state.BaudRate = 2000000 /* CBR_2000000 - not defined */;
- break;
- case B2500000:
- state.BaudRate = 2500000 /* CBR_2500000 - not defined */;
- break;
- case B3000000:
- state.BaudRate = 3000000 /* CBR_3000000 - not defined */;
- break;
- default:
- /* Unsupported baud rate! */
- termios_printf ("Invalid t->c_ospeed %u", t->c_ospeed);
- set_errno (EINVAL);
- return -1;
- }
-
- /* -------------- Set byte size ------------------ */
-
- switch (t->c_cflag & CSIZE)
- {
- case CS5:
- state.ByteSize = 5;
- break;
- case CS6:
- state.ByteSize = 6;
- break;
- case CS7:
- state.ByteSize = 7;
- break;
- case CS8:
- state.ByteSize = 8;
- break;
- default:
- /* Unsupported byte size! */
- termios_printf ("Invalid t->c_cflag byte size %u",
- t->c_cflag & CSIZE);
- set_errno (EINVAL);
- return -1;
- }
-
- /* -------------- Set stop bits ------------------ */
-
- if (t->c_cflag & CSTOPB)
- state.StopBits = TWOSTOPBITS;
- else
- state.StopBits = ONESTOPBIT;
-
- /* -------------- Set parity ------------------ */
-
- if (t->c_cflag & PARENB)
- state.Parity = (t->c_cflag & PARODD) ? ODDPARITY : EVENPARITY;
- else
- state.Parity = NOPARITY;
-
- state.fBinary = TRUE; /* Binary transfer */
- state.EofChar = 0; /* No end-of-data in binary mode */
- state.fNull = FALSE; /* Don't discard nulls in binary mode */
-
- /* -------------- Parity errors ------------------ */
- /* fParity combines the function of INPCK and NOT IGNPAR */
-
- if ((t->c_iflag & INPCK) && !(t->c_iflag & IGNPAR))
- state.fParity = TRUE; /* detect parity errors */
- else
- state.fParity = FALSE; /* ignore parity errors */
-
- /* Only present in Win32, Unix has no equivalent */
- state.fErrorChar = FALSE;
- state.ErrorChar = 0;
-
- /* -------------- Set software flow control ------------------ */
- /* Set fTXContinueOnXoff to FALSE. This prevents the triggering of a
- premature XON when the remote device interprets a received character
- as XON (same as IXANY on the remote side). Otherwise, a TRUE
- value separates the TX and RX functions. */
-
- state.fTXContinueOnXoff = TRUE; /* separate TX and RX flow control */
-
- /* Transmission flow control */
- if (t->c_iflag & IXON)
- state.fOutX = TRUE; /* enable */
- else
- state.fOutX = FALSE; /* disable */
-
- /* Reception flow control */
- if (t->c_iflag & IXOFF)
- state.fInX = TRUE; /* enable */
- else
- state.fInX = FALSE; /* disable */
-
- /* XoffLim and XonLim are left at default values */
-
- state.XonChar = (t->c_cc[VSTART] ? t->c_cc[VSTART] : 0x11);
- state.XoffChar = (t->c_cc[VSTOP] ? t->c_cc[VSTOP] : 0x13);
-
- /* -------------- Set hardware flow control ------------------ */
-
- /* Disable DSR flow control */
- state.fOutxDsrFlow = FALSE;
-
- /* Some old flavors of Unix automatically enabled hardware flow
- control when software flow control was not enabled. Since newer
- Unices tend to require explicit setting of hardware flow-control,
- this is what we do. */
-
- /* RTS/CTS flow control */
- if (t->c_cflag & CRTSCTS)
- { /* enable */
- state.fOutxCtsFlow = TRUE;
- state.fRtsControl = RTS_CONTROL_HANDSHAKE;
- }
- else
- { /* disable */
- state.fRtsControl = RTS_CONTROL_ENABLE;
- state.fOutxCtsFlow = FALSE;
- tmpRts = TIOCM_RTS;
- }
-
- if (t->c_cflag & CRTSXOFF)
- state.fRtsControl = RTS_CONTROL_HANDSHAKE;
-
- /* -------------- DTR ------------------ */
- /* Assert DTR on device open */
-
- state.fDtrControl = DTR_CONTROL_ENABLE;
-
- /* -------------- DSR ------------------ */
- /* Assert DSR at the device? */
-
- if (t->c_cflag & CLOCAL)
- state.fDsrSensitivity = FALSE; /* no */
- else
- state.fDsrSensitivity = TRUE; /* yes */
-
- /* -------------- Error handling ------------------ */
- /* Since read/write operations terminate upon error, we
- will use ClearCommError() to resume. */
-
- state.fAbortOnError = TRUE;
-
- if ((memcmp (&ostate, &state, sizeof (state)) != 0)
- && !SetCommState (get_handle (), &state))
- {
- /* SetCommState() failed, usually due to invalid DCB param.
- Keep track of this so we can set errno to EINVAL later
- and return failure */
- termios_printf ("SetCommState() failed, %E");
- __seterrno ();
- res = -1;
- }
-
- rbinary ((t->c_iflag & IGNCR) ? false : true);
- wbinary ((t->c_oflag & ONLCR) ? false : true);
-
- if (dropDTR)
- {
- EscapeCommFunction (get_handle (), CLRDTR);
- tmpDtr = 0;
- }
- else
- {
- /* FIXME: Sometimes when CLRDTR is set, setting
- state.fDtrControl = DTR_CONTROL_ENABLE will fail. This
- is a problem since a program might want to change some
- parameters while DTR is still down. */
-
- EscapeCommFunction (get_handle (), SETDTR);
- tmpDtr = TIOCM_DTR;
- }
-
- rts = tmpRts;
- dtr = tmpDtr;
-
- /* The following documentation on was taken from "Linux Serial Programming
- HOWTO". It explains how MIN (t->c_cc[VMIN] || vmin_) and TIME
- (t->c_cc[VTIME] || vtime_) is to be used.
-
- In non-canonical input processing mode, input is not assembled into
- lines and input processing (erase, kill, delete, etc.) does not
- occur. Two parameters control the behavior of this mode: c_cc[VTIME]
- sets the character timer, and c_cc[VMIN] sets the minimum number of
- characters to receive before satisfying the read.
-
- If MIN > 0 and TIME = 0, MIN sets the number of characters to receive
- before the read is satisfied. As TIME is zero, the timer is not used.
-
- If MIN = 0 and TIME > 0, TIME serves as a timeout value. The read will
- be satisfied if a single character is read, or TIME is exceeded (t =
- TIME *0.1 s). If TIME is exceeded, no character will be returned.
-
- If MIN > 0 and TIME > 0, TIME serves as an inter-character timer. The
- read will be satisfied if MIN characters are received, or the time
- between two characters exceeds TIME. The timer is restarted every time
- a character is received and only becomes active after the first
- character has been received.
-
- If MIN = 0 and TIME = 0, read will be satisfied immediately. The
- number of characters currently available, or the number of characters
- requested will be returned. According to Antonino (see contributions),
- you could issue a fcntl(fd, F_SETFL, FNDELAY); before reading to get
- the same result.
- */
-
- if (t->c_lflag & ICANON)
- {
- vmin_ = 0;
- vtime_ = 0;
- }
- else
- {
- vtime_ = t->c_cc[VTIME] * 100;
- vmin_ = t->c_cc[VMIN];
- }
-
- debug_printf ("vtime %d, vmin %ld", vtime_, vmin_);
-
- if (ovmin != vmin_ || ovtime != vtime_)
- {
- memset (&to, 0, sizeof (to));
-
- if ((vmin_ > 0) && (vtime_ == 0))
- {
- /* Returns immediately with whatever is in buffer on a ReadFile();
- or blocks if nothing found. We will keep calling ReadFile(); until
- vmin_ characters are read */
- to.ReadIntervalTimeout = to.ReadTotalTimeoutMultiplier = MAXDWORD;
- to.ReadTotalTimeoutConstant = MAXDWORD - 1;
- }
- else if ((vmin_ == 0) && (vtime_ > 0))
- {
- /* set timeoout constant appropriately and we will only try to
- read one character in ReadFile() */
- to.ReadTotalTimeoutConstant = vtime_;
- to.ReadIntervalTimeout = to.ReadTotalTimeoutMultiplier = MAXDWORD;
- }
- else if ((vmin_ > 0) && (vtime_ > 0))
- {
- /* time applies to the interval time for this case */
- to.ReadIntervalTimeout = vtime_;
- }
- else if ((vmin_ == 0) && (vtime_ == 0))
- {
- /* returns immediately with whatever is in buffer as per
- Time-Outs docs in Win32 SDK API docs */
- to.ReadIntervalTimeout = MAXDWORD;
- }
-
- debug_printf ("ReadTotalTimeoutConstant %u, ReadIntervalTimeout %u, ReadTotalTimeoutMultiplier %u",
- to.ReadTotalTimeoutConstant, to.ReadIntervalTimeout, to.ReadTotalTimeoutMultiplier);
-
- if (!SetCommTimeouts(get_handle (), &to))
- {
- /* SetCommTimeouts() failed. Keep track of this so we
- can set errno to EINVAL later and return failure */
- termios_printf ("SetCommTimeouts() failed, %E");
- __seterrno ();
- res = -1;
- }
- }
-
- return res;
-}
-
-/* tcgetattr: POSIX 7.2.1.1 */
-int
-fhandler_serial::tcgetattr (struct termios *t)
-{
- DCB state;
-
- /* Get current Win32 comm state */
- if (GetCommState (get_handle (), &state) == 0)
- return -1;
-
- /* for safety */
- memset (t, 0, sizeof (*t));
-
- t->c_cflag = 0;
- /* -------------- Baud rate ------------------ */
- switch (state.BaudRate)
- {
- case CBR_110:
- t->c_ospeed = t->c_ispeed = B110;
- break;
- case CBR_300:
- t->c_ospeed = t->c_ispeed = B300;
- break;
- case CBR_600:
- t->c_ospeed = t->c_ispeed = B600;
- break;
- case CBR_1200:
- t->c_ospeed = t->c_ispeed = B1200;
- break;
- case CBR_2400:
- t->c_ospeed = t->c_ispeed = B2400;
- break;
- case CBR_4800:
- t->c_ospeed = t->c_ispeed = B4800;
- break;
- case CBR_9600:
- t->c_ospeed = t->c_ispeed = B9600;
- break;
- case CBR_19200:
- t->c_ospeed = t->c_ispeed = B19200;
- break;
- case CBR_38400:
- t->c_ospeed = t->c_ispeed = B38400;
- break;
- case CBR_57600:
- t->c_ospeed = t->c_ispeed = B57600;
- break;
- case CBR_115200:
- t->c_ospeed = t->c_ispeed = B115200;
- break;
- case CBR_128000:
- t->c_ospeed = t->c_ispeed = B128000;
- break;
- case 230400: /* CBR_230400 - not defined */
- t->c_ospeed = t->c_ispeed = B230400;
- break;
- case CBR_256000:
- t->c_ospeed = t->c_ispeed = B256000;
- break;
- case 460800: /* CBR_460000 - not defined */
- t->c_ospeed = t->c_ispeed = B460800;
- break;
- case 500000: /* CBR_500000 - not defined */
- t->c_ospeed = t->c_ispeed = B500000;
- break;
- case 576000: /* CBR_576000 - not defined */
- t->c_ospeed = t->c_ispeed = B576000;
- break;
- case 921600: /* CBR_921600 - not defined */
- t->c_ospeed = t->c_ispeed = B921600;
- break;
- case 1000000: /* CBR_1000000 - not defined */
- t->c_ospeed = t->c_ispeed = B1000000;
- break;
- case 1152000: /* CBR_1152000 - not defined */
- t->c_ospeed = t->c_ispeed = B1152000;
- break;
- case 1500000: /* CBR_1500000 - not defined */
- t->c_ospeed = t->c_ispeed = B1500000;
- break;
- case 2000000: /* CBR_2000000 - not defined */
- t->c_ospeed = t->c_ispeed = B2000000;
- break;
- case 2500000: /* CBR_2500000 - not defined */
- t->c_ospeed = t->c_ispeed = B2500000;
- break;
- case 3000000: /* CBR_3000000 - not defined */
- t->c_ospeed = t->c_ispeed = B3000000;
- break;
- default:
- /* Unsupported baud rate! */
- termios_printf ("Invalid baud rate %u", state.BaudRate);
- set_errno (EINVAL);
- return -1;
- }
-
- /* -------------- Byte size ------------------ */
-
- switch (state.ByteSize)
- {
- case 5:
- t->c_cflag |= CS5;
- break;
- case 6:
- t->c_cflag |= CS6;
- break;
- case 7:
- t->c_cflag |= CS7;
- break;
- case 8:
- t->c_cflag |= CS8;
- break;
- default:
- /* Unsupported byte size! */
- termios_printf ("Invalid byte size %u", state.ByteSize);
- set_errno (EINVAL);
- return -1;
- }
-
- /* -------------- Stop bits ------------------ */
-
- if (state.StopBits == TWOSTOPBITS)
- t->c_cflag |= CSTOPB;
-
- /* -------------- Parity ------------------ */
-
- if (state.Parity == ODDPARITY)
- t->c_cflag |= (PARENB | PARODD);
- if (state.Parity == EVENPARITY)
- t->c_cflag |= PARENB;
-
- /* -------------- Parity errors ------------------ */
-
- /* fParity combines the function of INPCK and NOT IGNPAR */
- if (state.fParity)
- t->c_iflag |= INPCK;
- else
- t->c_iflag |= IGNPAR; /* not necessarily! */
-
- /* -------------- Software flow control ------------------ */
-
- /* transmission flow control */
- if (state.fOutX)
- t->c_iflag |= IXON;
-
- /* reception flow control */
- if (state.fInX)
- t->c_iflag |= IXOFF;
-
- t->c_cc[VSTART] = (state.XonChar ? state.XonChar : 0x11);
- t->c_cc[VSTOP] = (state.XoffChar ? state.XoffChar : 0x13);
-
- /* -------------- Hardware flow control ------------------ */
- /* Some old flavors of Unix automatically enabled hardware flow
- control when software flow control was not enabled. Since newer
- Unices tend to require explicit setting of hardware flow-control,
- this is what we do. */
-
- /* Input flow-control */
- if ((state.fRtsControl == RTS_CONTROL_HANDSHAKE) && state.fOutxCtsFlow)
- t->c_cflag |= CRTSCTS;
- if (state.fRtsControl == RTS_CONTROL_HANDSHAKE)
- t->c_cflag |= CRTSXOFF;
-
- /* -------------- CLOCAL --------------- */
- /* DSR is only lead toggled only by CLOCAL. Check it to see if
- CLOCAL was called. */
- /* FIXME: If tcsetattr() hasn't been called previously, this may
- give a false CLOCAL. */
-
- if (!state.fDsrSensitivity)
- t->c_cflag |= CLOCAL;
-
- /* FIXME: need to handle IGNCR */
-#if 0
- if (!rbinary ())
- t->c_iflag |= IGNCR;
-#endif
-
- if (!wbinary ())
- t->c_oflag |= ONLCR;
-
- t->c_cc[VTIME] = vtime_ / 100;
- t->c_cc[VMIN] = vmin_;
-
- debug_printf ("vmin_ %lu, vtime_ %u", vmin_, vtime_);
-
- return 0;
-}
-
-void
-fhandler_serial::fixup_after_fork (HANDLE parent)
-{
- if (close_on_exec ())
- fhandler_base::fixup_after_fork (parent);
- overlapped_setup ();
- debug_printf ("io_status.hEvent %p", io_status.hEvent);
-}
-
-void
-fhandler_serial::fixup_after_exec ()
-{
- if (!close_on_exec ())
- overlapped_setup ();
- debug_printf ("io_status.hEvent %p, close_on_exec %d", io_status.hEvent, close_on_exec ());
-}
-
-int
-fhandler_serial::dup (fhandler_base *child, int flags)
-{
- fhandler_serial *fhc = (fhandler_serial *) child;
- fhc->overlapped_setup ();
- return fhandler_base::dup (child, flags);
-}
diff --git a/winsup/cygwin/fhandler_socket.cc b/winsup/cygwin/fhandler_socket.cc
deleted file mode 100644
index 59561bc58..000000000
--- a/winsup/cygwin/fhandler_socket.cc
+++ /dev/null
@@ -1,2364 +0,0 @@
-/* fhandler_socket.cc. See fhandler.h for a description of the fhandler classes.
-
- Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
- 2011, 2012, 2013, 2014 Red Hat, Inc.
-
- This file is part of Cygwin.
-
- This software is a copyrighted work licensed under the terms of the
- Cygwin license. Please consult the file "CYGWIN_LICENSE" for
- details. */
-
-/* #define DEBUG_NEST_ON 1 */
-
-#define __INSIDE_CYGWIN_NET__
-#define USE_SYS_TYPES_FD_SET
-
-#define _BSDTYPES_DEFINED
-#include "winsup.h"
-#undef _BSDTYPES_DEFINED
-#ifdef __x86_64__
-/* 2014-04-24: Current Mingw headers define sockaddr_in6 using u_long (8 byte)
- because a redefinition for LP64 systems is missing. This leads to a wrong
- definition and size of sockaddr_in6 when building with winsock headers.
- This definition is also required to use the right u_long type in subsequent
- function calls. */
-#undef u_long
-#define u_long __ms_u_long
-#endif
-#include <ws2tcpip.h>
-#include <mswsock.h>
-#include <iphlpapi.h>
-#include "cygerrno.h"
-#include "security.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include <asm/byteorder.h>
-#include "cygwin/version.h"
-#include "perprocess.h"
-#include "shared_info.h"
-#include "sigproc.h"
-#include "wininfo.h"
-#include <unistd.h>
-#include <sys/param.h>
-#include <sys/acl.h>
-#include "cygtls.h"
-#include <sys/un.h>
-#include "ntdll.h"
-#include "miscfuncs.h"
-
-#define ASYNC_MASK (FD_READ|FD_WRITE|FD_OOB|FD_ACCEPT|FD_CONNECT)
-#define EVENT_MASK (FD_READ|FD_WRITE|FD_OOB|FD_ACCEPT|FD_CONNECT|FD_CLOSE)
-
-extern bool fdsock (cygheap_fdmanip& fd, const device *, SOCKET soc);
-extern "C" {
-int sscanf (const char *, const char *, ...);
-} /* End of "C" section */
-
-static inline mode_t
-adjust_socket_file_mode (mode_t mode)
-{
- /* Kludge: Don't allow to remove read bit on socket files for
- user/group/other, if the accompanying write bit is set. It would
- be nice to have exact permissions on a socket file, but it's
- necessary that somebody able to access the socket can always read
- the contents of the socket file to avoid spurious "permission
- denied" messages. */
- return mode | ((mode & (S_IWUSR | S_IWGRP | S_IWOTH)) << 1);
-}
-
-/* cygwin internal: map sockaddr into internet domain address */
-int
-get_inet_addr (const struct sockaddr *in, int inlen,
- struct sockaddr_storage *out, int *outlen,
- int *type = NULL, int *secret = NULL)
-{
- int secret_buf [4];
- int* secret_ptr = (secret ? : secret_buf);
-
- switch (in->sa_family)
- {
- case AF_LOCAL:
- /* Check for abstract socket. These are generated for AF_LOCAL datagram
- sockets in recv_internal, to allow a datagram server to use sendto
- after recvfrom. */
- if (inlen >= (int) sizeof (in->sa_family) + 7
- && in->sa_data[0] == '\0' && in->sa_data[1] == 'd'
- && in->sa_data[6] == '\0')
- {
- struct sockaddr_in addr;
- addr.sin_family = AF_INET;
- sscanf (in->sa_data + 2, "%04hx", &addr.sin_port);
- addr.sin_addr.s_addr = htonl (INADDR_LOOPBACK);
- *outlen = sizeof addr;
- memcpy (out, &addr, *outlen);
- return 0;
- }
- break;
- case AF_INET:
- memcpy (out, in, inlen);
- *outlen = inlen;
- /* If the peer address given in connect or sendto is the ANY address,
- Winsock fails with WSAEADDRNOTAVAIL, while Linux converts that into
- a connection/send attempt to LOOPBACK. We're doing the same here. */
- if (((struct sockaddr_in *) out)->sin_addr.s_addr == htonl (INADDR_ANY))
- ((struct sockaddr_in *) out)->sin_addr.s_addr = htonl (INADDR_LOOPBACK);
- return 0;
- case AF_INET6:
- memcpy (out, in, inlen);
- *outlen = inlen;
- /* See comment in AF_INET case. */
- if (IN6_IS_ADDR_UNSPECIFIED (&((struct sockaddr_in6 *) out)->sin6_addr))
- ((struct sockaddr_in6 *) out)->sin6_addr = in6addr_loopback;
- return 0;
- default:
- set_errno (EAFNOSUPPORT);
- return SOCKET_ERROR;
- }
- /* AF_LOCAL/AF_UNIX only */
- path_conv pc (in->sa_data, PC_SYM_FOLLOW);
- if (pc.error)
- {
- set_errno (pc.error);
- return SOCKET_ERROR;
- }
- if (!pc.exists ())
- {
- set_errno (ENOENT);
- return SOCKET_ERROR;
- }
- /* Do NOT test for the file being a socket file here. The socket file
- creation is not an atomic operation, so there is a chance that socket
- files which are just in the process of being created are recognized
- as non-socket files. To work around this problem we now create the
- file with all sharing disabled. If the below NtOpenFile fails
- with STATUS_SHARING_VIOLATION we know that the file already exists,
- but the creating process isn't finished yet. So we yield and try
- again, until we can either open the file successfully, or some error
- other than STATUS_SHARING_VIOLATION occurs.
- Since we now don't know if the file is actually a socket file, we
- perform this check here explicitely. */
- NTSTATUS status;
- HANDLE fh;
- OBJECT_ATTRIBUTES attr;
- IO_STATUS_BLOCK io;
-
- pc.get_object_attr (attr, sec_none_nih);
- do
- {
- status = NtOpenFile (&fh, GENERIC_READ | SYNCHRONIZE, &attr, &io,
- FILE_SHARE_VALID_FLAGS,
- FILE_SYNCHRONOUS_IO_NONALERT
- | FILE_OPEN_FOR_BACKUP_INTENT
- | FILE_NON_DIRECTORY_FILE);
- if (status == STATUS_SHARING_VIOLATION)
- {
- /* While we hope that the sharing violation is only temporary, we
- also could easily get stuck here, waiting for a file in use by
- some greedy Win32 application. Therefore we should never wait
- endlessly without checking for signals and thread cancel event. */
- pthread_testcancel ();
- if (cygwait (NULL, cw_nowait, cw_sig_eintr) == WAIT_SIGNALED
- && !_my_tls.call_signal_handler ())
- {
- set_errno (EINTR);
- return SOCKET_ERROR;
- }
- yield ();
- }
- else if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- return SOCKET_ERROR;
- }
- }
- while (status == STATUS_SHARING_VIOLATION);
- /* Now test for the SYSTEM bit. */
- FILE_BASIC_INFORMATION fbi;
- status = NtQueryInformationFile (fh, &io, &fbi, sizeof fbi,
- FileBasicInformation);
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- return SOCKET_ERROR;
- }
- if (!(fbi.FileAttributes & FILE_ATTRIBUTE_SYSTEM))
- {
- NtClose (fh);
- set_errno (EBADF);
- return SOCKET_ERROR;
- }
- /* Eventually check the content and fetch the required information. */
- char buf[128];
- memset (buf, 0, sizeof buf);
- status = NtReadFile (fh, NULL, NULL, NULL, &io, buf, 128, NULL, NULL);
- NtClose (fh);
- if (NT_SUCCESS (status))
- {
- struct sockaddr_in sin;
- char ctype;
- sin.sin_family = AF_INET;
- if (strncmp (buf, SOCKET_COOKIE, strlen (SOCKET_COOKIE)))
- {
- set_errno (EBADF);
- return SOCKET_ERROR;
- }
- sscanf (buf + strlen (SOCKET_COOKIE), "%hu %c %08x-%08x-%08x-%08x",
- &sin.sin_port,
- &ctype,
- secret_ptr, secret_ptr + 1, secret_ptr + 2, secret_ptr + 3);
- sin.sin_port = htons (sin.sin_port);
- sin.sin_addr.s_addr = htonl (INADDR_LOOPBACK);
- memcpy (out, &sin, sizeof sin);
- *outlen = sizeof sin;
- if (type)
- *type = (ctype == 's' ? SOCK_STREAM :
- ctype == 'd' ? SOCK_DGRAM
- : 0);
- return 0;
- }
- __seterrno_from_nt_status (status);
- return SOCKET_ERROR;
-}
-
-/**********************************************************************/
-/* fhandler_socket */
-
-fhandler_socket::fhandler_socket () :
- fhandler_base (),
- wsock_events (NULL),
- wsock_mtx (NULL),
- wsock_evt (NULL),
- prot_info_ptr (NULL),
- sun_path (NULL),
- peer_sun_path (NULL),
- status ()
-{
- need_fork_fixup (true);
-}
-
-fhandler_socket::~fhandler_socket ()
-{
- if (prot_info_ptr)
- cfree (prot_info_ptr);
- if (sun_path)
- cfree (sun_path);
- if (peer_sun_path)
- cfree (peer_sun_path);
-}
-
-char *
-fhandler_socket::get_proc_fd_name (char *buf)
-{
- __small_sprintf (buf, "socket:[%lu]", get_socket ());
- return buf;
-}
-
-int
-fhandler_socket::open (int flags, mode_t mode)
-{
- set_errno (ENXIO);
- return 0;
-}
-
-void
-fhandler_socket::af_local_set_sockpair_cred ()
-{
- sec_pid = sec_peer_pid = getpid ();
- sec_uid = sec_peer_uid = geteuid32 ();
- sec_gid = sec_peer_gid = getegid32 ();
-}
-
-void
-fhandler_socket::af_local_setblocking (bool &async, bool &nonblocking)
-{
- async = async_io ();
- nonblocking = is_nonblocking ();
- if (async)
- {
- WSAAsyncSelect (get_socket (), winmsg, 0, 0);
- WSAEventSelect (get_socket (), wsock_evt, EVENT_MASK);
- }
- set_nonblocking (false);
- async_io (false);
-}
-
-void
-fhandler_socket::af_local_unsetblocking (bool async, bool nonblocking)
-{
- if (nonblocking)
- set_nonblocking (true);
- if (async)
- {
- WSAAsyncSelect (get_socket (), winmsg, WM_ASYNCIO, ASYNC_MASK);
- async_io (true);
- }
-}
-
-bool
-fhandler_socket::af_local_recv_secret ()
-{
- int out[4] = { 0, 0, 0, 0 };
- int rest = sizeof out;
- char *ptr = (char *) out;
- while (rest > 0)
- {
- int ret = recvfrom (ptr, rest, 0, NULL, NULL);
- if (ret <= 0)
- break;
- rest -= ret;
- ptr += ret;
- }
- if (rest == 0)
- {
- debug_printf ("Received af_local secret: %08x-%08x-%08x-%08x",
- out[0], out[1], out[2], out[3]);
- if (out[0] != connect_secret[0] || out[1] != connect_secret[1]
- || out[2] != connect_secret[2] || out[3] != connect_secret[3])
- {
- debug_printf ("Receiving af_local secret mismatch");
- return false;
- }
- }
- else
- debug_printf ("Receiving af_local secret failed");
- return rest == 0;
-}
-
-bool
-fhandler_socket::af_local_send_secret ()
-{
- int rest = sizeof connect_secret;
- char *ptr = (char *) connect_secret;
- while (rest > 0)
- {
- int ret = sendto (ptr, rest, 0, NULL, 0);
- if (ret <= 0)
- break;
- rest -= ret;
- ptr += ret;
- }
- debug_printf ("Sending af_local secret %s", rest == 0 ? "succeeded"
- : "failed");
- return rest == 0;
-}
-
-bool
-fhandler_socket::af_local_recv_cred ()
-{
- struct ucred out = { (pid_t) 0, (uid_t) -1, (gid_t) -1 };
- int rest = sizeof out;
- char *ptr = (char *) &out;
- while (rest > 0)
- {
- int ret = recvfrom (ptr, rest, 0, NULL, NULL);
- if (ret <= 0)
- break;
- rest -= ret;
- ptr += ret;
- }
- if (rest == 0)
- {
- debug_printf ("Received eid credentials: pid: %d, uid: %d, gid: %d",
- out.pid, out.uid, out.gid);
- sec_peer_pid = out.pid;
- sec_peer_uid = out.uid;
- sec_peer_gid = out.gid;
- }
- else
- debug_printf ("Receiving eid credentials failed");
- return rest == 0;
-}
-
-bool
-fhandler_socket::af_local_send_cred ()
-{
- struct ucred in = { sec_pid, sec_uid, sec_gid };
- int rest = sizeof in;
- char *ptr = (char *) &in;
- while (rest > 0)
- {
- int ret = sendto (ptr, rest, 0, NULL, 0);
- if (ret <= 0)
- break;
- rest -= ret;
- ptr += ret;
- }
- if (rest == 0)
- debug_printf ("Sending eid credentials succeeded");
- else
- debug_printf ("Sending eid credentials failed");
- return rest == 0;
-}
-
-int
-fhandler_socket::af_local_connect ()
-{
- bool orig_async_io, orig_is_nonblocking;
-
- if (get_addr_family () != AF_LOCAL || get_socket_type () != SOCK_STREAM)
- return 0;
-
- debug_printf ("af_local_connect called, no_getpeereid=%d", no_getpeereid ());
- if (no_getpeereid ())
- return 0;
-
- af_local_setblocking (orig_async_io, orig_is_nonblocking);
- if (!af_local_send_secret () || !af_local_recv_secret ()
- || !af_local_send_cred () || !af_local_recv_cred ())
- {
- debug_printf ("accept from unauthorized server");
- ::shutdown (get_socket (), SD_BOTH);
- WSASetLastError (WSAECONNREFUSED);
- return -1;
- }
- af_local_unsetblocking (orig_async_io, orig_is_nonblocking);
- return 0;
-}
-
-int
-fhandler_socket::af_local_accept ()
-{
- bool orig_async_io, orig_is_nonblocking;
-
- debug_printf ("af_local_accept called, no_getpeereid=%d", no_getpeereid ());
- if (no_getpeereid ())
- return 0;
-
- af_local_setblocking (orig_async_io, orig_is_nonblocking);
- if (!af_local_recv_secret () || !af_local_send_secret ()
- || !af_local_recv_cred () || !af_local_send_cred ())
- {
- debug_printf ("connect from unauthorized client");
- ::shutdown (get_socket (), SD_BOTH);
- ::closesocket (get_socket ());
- WSASetLastError (WSAECONNABORTED);
- return -1;
- }
- af_local_unsetblocking (orig_async_io, orig_is_nonblocking);
- return 0;
-}
-
-int
-fhandler_socket::af_local_set_no_getpeereid ()
-{
- if (get_addr_family () != AF_LOCAL || get_socket_type () != SOCK_STREAM)
- {
- set_errno (EINVAL);
- return -1;
- }
- if (connect_state () != unconnected)
- {
- set_errno (EALREADY);
- return -1;
- }
-
- debug_printf ("no_getpeereid set");
- no_getpeereid (true);
- return 0;
-}
-
-void
-fhandler_socket::af_local_set_cred ()
-{
- sec_pid = getpid ();
- sec_uid = geteuid32 ();
- sec_gid = getegid32 ();
- sec_peer_pid = (pid_t) 0;
- sec_peer_uid = (uid_t) -1;
- sec_peer_gid = (gid_t) -1;
-}
-
-void
-fhandler_socket::af_local_copy (fhandler_socket *sock)
-{
- sock->connect_secret[0] = connect_secret[0];
- sock->connect_secret[1] = connect_secret[1];
- sock->connect_secret[2] = connect_secret[2];
- sock->connect_secret[3] = connect_secret[3];
- sock->sec_pid = sec_pid;
- sock->sec_uid = sec_uid;
- sock->sec_gid = sec_gid;
- sock->sec_peer_pid = sec_peer_pid;
- sock->sec_peer_uid = sec_peer_uid;
- sock->sec_peer_gid = sec_peer_gid;
- sock->no_getpeereid (no_getpeereid ());
-}
-
-void
-fhandler_socket::af_local_set_secret (char *buf)
-{
- if (!fhandler_dev_random::crypt_gen_random (connect_secret,
- sizeof (connect_secret)))
- bzero ((char*) connect_secret, sizeof (connect_secret));
- __small_sprintf (buf, "%08x-%08x-%08x-%08x",
- connect_secret [0], connect_secret [1],
- connect_secret [2], connect_secret [3]);
-}
-
-/* Maximum number of concurrently opened sockets from all Cygwin processes
- per session. Note that shared sockets (through dup/fork/exec) are
- counted as one socket. */
-#define NUM_SOCKS (32768 / sizeof (wsa_event))
-
-#define LOCK_EVENTS WaitForSingleObject (wsock_mtx, INFINITE)
-#define UNLOCK_EVENTS ReleaseMutex (wsock_mtx)
-
-static wsa_event wsa_events[NUM_SOCKS] __attribute__((section (".cygwin_dll_common"), shared));
-
-static LONG socket_serial_number __attribute__((section (".cygwin_dll_common"), shared));
-
-static HANDLE wsa_slot_mtx;
-
-static PWCHAR
-sock_shared_name (PWCHAR buf, LONG num)
-{
- __small_swprintf (buf, L"socket.%d", num);
- return buf;
-}
-
-static wsa_event *
-search_wsa_event_slot (LONG new_serial_number)
-{
- WCHAR name[32], searchname[32];
- UNICODE_STRING uname;
- OBJECT_ATTRIBUTES attr;
- NTSTATUS status;
-
- if (!wsa_slot_mtx)
- {
- RtlInitUnicodeString (&uname, sock_shared_name (name, 0));
- InitializeObjectAttributes (&attr, &uname, OBJ_INHERIT | OBJ_OPENIF,
- get_session_parent_dir (),
- everyone_sd (CYG_MUTANT_ACCESS));
- status = NtCreateMutant (&wsa_slot_mtx, CYG_MUTANT_ACCESS, &attr, FALSE);
- if (!NT_SUCCESS (status))
- api_fatal ("Couldn't create/open shared socket mutex %S, %y",
- &uname, status);
- }
- switch (WaitForSingleObject (wsa_slot_mtx, INFINITE))
- {
- case WAIT_OBJECT_0:
- case WAIT_ABANDONED:
- break;
- default:
- api_fatal ("WFSO failed for shared socket mutex, %E");
- break;
- }
- unsigned int slot = new_serial_number % NUM_SOCKS;
- while (wsa_events[slot].serial_number)
- {
- HANDLE searchmtx;
- RtlInitUnicodeString (&uname, sock_shared_name (searchname,
- wsa_events[slot].serial_number));
- InitializeObjectAttributes (&attr, &uname, 0, get_session_parent_dir (),
- NULL);
- status = NtOpenMutant (&searchmtx, READ_CONTROL, &attr);
- if (!NT_SUCCESS (status))
- break;
- /* Mutex still exists, attached socket is active, try next slot. */
- NtClose (searchmtx);
- slot = (slot + 1) % NUM_SOCKS;
- if (slot == (new_serial_number % NUM_SOCKS))
- {
- /* Did the whole array once. Too bad. */
- debug_printf ("No free socket slot");
- ReleaseMutex (wsa_slot_mtx);
- return NULL;
- }
- }
- memset (&wsa_events[slot], 0, sizeof (wsa_event));
- wsa_events[slot].serial_number = new_serial_number;
- ReleaseMutex (wsa_slot_mtx);
- return wsa_events + slot;
-}
-
-bool
-fhandler_socket::init_events ()
-{
- LONG new_serial_number;
- WCHAR name[32];
- UNICODE_STRING uname;
- OBJECT_ATTRIBUTES attr;
- NTSTATUS status;
-
- do
- {
- new_serial_number =
- InterlockedIncrement (&socket_serial_number);
- if (!new_serial_number) /* 0 is reserved for global mutex */
- InterlockedIncrement (&socket_serial_number);
- RtlInitUnicodeString (&uname, sock_shared_name (name, new_serial_number));
- InitializeObjectAttributes (&attr, &uname, OBJ_INHERIT | OBJ_OPENIF,
- get_session_parent_dir (),
- everyone_sd (CYG_MUTANT_ACCESS));
- status = NtCreateMutant (&wsock_mtx, CYG_MUTANT_ACCESS, &attr, FALSE);
- if (!NT_SUCCESS (status))
- {
- debug_printf ("NtCreateMutant(%S), %y", &uname, status);
- set_errno (ENOBUFS);
- return false;
- }
- if (status == STATUS_OBJECT_NAME_EXISTS)
- NtClose (wsock_mtx);
- }
- while (status == STATUS_OBJECT_NAME_EXISTS);
- if ((wsock_evt = CreateEvent (&sec_all, TRUE, FALSE, NULL))
- == WSA_INVALID_EVENT)
- {
- debug_printf ("CreateEvent, %E");
- set_errno (ENOBUFS);
- NtClose (wsock_mtx);
- return false;
- }
- if (WSAEventSelect (get_socket (), wsock_evt, EVENT_MASK) == SOCKET_ERROR)
- {
- debug_printf ("WSAEventSelect, %E");
- set_winsock_errno ();
- NtClose (wsock_evt);
- NtClose (wsock_mtx);
- return false;
- }
- wsock_events = search_wsa_event_slot (new_serial_number);
- /* sock type not yet set here. */
- if (pc.dev == FH_UDP || pc.dev == FH_DGRAM)
- wsock_events->events = FD_WRITE;
- return true;
-}
-
-int
-fhandler_socket::evaluate_events (const long event_mask, long &events,
- const bool erase)
-{
- int ret = 0;
- long events_now = 0;
-
- WSANETWORKEVENTS evts = { 0 };
- if (!(WSAEnumNetworkEvents (get_socket (), wsock_evt, &evts)))
- {
- if (evts.lNetworkEvents)
- {
- LOCK_EVENTS;
- wsock_events->events |= evts.lNetworkEvents;
- events_now = (wsock_events->events & event_mask);
- if (evts.lNetworkEvents & FD_CONNECT)
- {
- wsock_events->connect_errorcode = evts.iErrorCode[FD_CONNECT_BIT];
-
- /* Setting the connect_state and calling the AF_LOCAL handshake
- here allows to handle this stuff from a single point. This
- is independent of FD_CONNECT being requested. Consider a
- server calling connect(2) and then immediately poll(2) with
- only polling for POLLIN (example: postfix), or select(2) just
- asking for descriptors ready to read.
-
- Something weird occurs in Winsock: If you fork off and call
- recv/send on the duplicated, already connected socket, another
- FD_CONNECT event is generated in the child process. This
- would trigger a call to af_local_connect which obviously fail.
- Avoid this by calling set_connect_state only if connect_state
- is connect_pending. */
- if (connect_state () == connect_pending)
- {
- if (wsock_events->connect_errorcode)
- connect_state (connect_failed);
- else if (af_local_connect ())
- {
- wsock_events->connect_errorcode = WSAGetLastError ();
- connect_state (connect_failed);
- }
- else
- connect_state (connected);
- }
- }
- UNLOCK_EVENTS;
- if ((evts.lNetworkEvents & FD_OOB) && wsock_events->owner)
- kill (wsock_events->owner, SIGURG);
- }
- }
-
- LOCK_EVENTS;
- if ((events = events_now) != 0
- || (events = (wsock_events->events & event_mask)) != 0)
- {
- if (events & FD_CONNECT)
- {
- int wsa_err = wsock_events->connect_errorcode;
- if (wsa_err)
- {
- /* CV 2014-04-23: This is really weird. If you call connect
- asynchronously on a socket and then select, an error like
- "Connection refused" is set in the event and in the SO_ERROR
- socket option. If you call connect, then dup, then select,
- the error is set in the event, but not in the SO_ERROR socket
- option, despite the dup'ed socket handle referring to the same
- socket. We're trying to workaround this problem here by
- taking the connect errorcode from the event and write it back
- into the SO_ERROR socket option.
-
- CV 2014-06-16: Call WSASetLastError *after* setsockopt since,
- apparently, setsockopt sets the last WSA error code to 0 on
- success. */
- setsockopt (get_socket (), SOL_SOCKET, SO_ERROR,
- (const char *) &wsa_err, sizeof wsa_err);
- WSASetLastError (wsa_err);
- ret = SOCKET_ERROR;
- }
- else
- wsock_events->events |= FD_WRITE;
- wsock_events->events &= ~FD_CONNECT;
- wsock_events->connect_errorcode = 0;
- }
- /* This test makes the accept function behave as on Linux when
- accept is called on a socket for which shutdown for the read side
- has been called. The second half of this code is in the shutdown
- method. See there for more info. */
- if ((event_mask & FD_ACCEPT) && (events & FD_CLOSE))
- {
- WSASetLastError (WSAEINVAL);
- ret = SOCKET_ERROR;
- }
- if (erase)
- wsock_events->events &= ~(events & ~(FD_WRITE | FD_CLOSE));
- }
- UNLOCK_EVENTS;
-
- return ret;
-}
-
-int
-fhandler_socket::wait_for_events (const long event_mask, const DWORD flags)
-{
- if (async_io ())
- return 0;
-
- int ret;
- long events;
-
- while (!(ret = evaluate_events (event_mask, events, !(flags & MSG_PEEK)))
- && !events)
- {
- if (is_nonblocking () || (flags & MSG_DONTWAIT))
- {
- WSASetLastError (WSAEWOULDBLOCK);
- return SOCKET_ERROR;
- }
-
- WSAEVENT ev[2] = { wsock_evt };
- set_signal_arrived here (ev[1]);
- switch (WSAWaitForMultipleEvents (2, ev, FALSE, 50, FALSE))
- {
- case WSA_WAIT_TIMEOUT:
- pthread_testcancel ();
- /*FALLTHRU*/
- case WSA_WAIT_EVENT_0:
- break;
-
- case WSA_WAIT_EVENT_0 + 1:
- if (_my_tls.call_signal_handler ())
- break;
- WSASetLastError (WSAEINTR);
- return SOCKET_ERROR;
-
- default:
- WSASetLastError (WSAEFAULT);
- return SOCKET_ERROR;
- }
- }
-
- return ret;
-}
-
-void
-fhandler_socket::release_events ()
-{
- NtClose (wsock_evt);
- NtClose (wsock_mtx);
-}
-
-/* Called from net.cc:fdsock() if a freshly created socket is not
- inheritable. In that case we use fixup_before_fork_exec. See
- the comment in fdsock() for a description of the problem. */
-void
-fhandler_socket::init_fixup_before ()
-{
- prot_info_ptr = (LPWSAPROTOCOL_INFOW)
- cmalloc_abort (HEAP_BUF, sizeof (WSAPROTOCOL_INFOW));
- cygheap->fdtab.inc_need_fixup_before ();
-}
-
-int
-fhandler_socket::fixup_before_fork_exec (DWORD win_pid)
-{
- SOCKET ret = WSADuplicateSocketW (get_socket (), win_pid, prot_info_ptr);
- if (ret)
- set_winsock_errno ();
- else
- debug_printf ("WSADuplicateSocket succeeded (%x)", prot_info_ptr->dwProviderReserved);
- return (int) ret;
-}
-
-void
-fhandler_socket::fixup_after_fork (HANDLE parent)
-{
- fork_fixup (parent, wsock_mtx, "wsock_mtx");
- fork_fixup (parent, wsock_evt, "wsock_evt");
-
- if (!need_fixup_before ())
- {
- fhandler_base::fixup_after_fork (parent);
- return;
- }
-
- SOCKET new_sock = WSASocketW (FROM_PROTOCOL_INFO, FROM_PROTOCOL_INFO,
- FROM_PROTOCOL_INFO, prot_info_ptr, 0,
- WSA_FLAG_OVERLAPPED);
- if (new_sock == INVALID_SOCKET)
- {
- set_winsock_errno ();
- set_io_handle ((HANDLE) INVALID_SOCKET);
- }
- else
- {
- /* Even though the original socket was not inheritable, the duplicated
- socket is potentially inheritable again. */
- SetHandleInformation ((HANDLE) new_sock, HANDLE_FLAG_INHERIT, 0);
- set_io_handle ((HANDLE) new_sock);
- debug_printf ("WSASocket succeeded (%p)", new_sock);
- }
-}
-
-void
-fhandler_socket::fixup_after_exec ()
-{
- if (need_fixup_before () && !close_on_exec ())
- fixup_after_fork (NULL);
-}
-
-int
-fhandler_socket::dup (fhandler_base *child, int flags)
-{
- debug_printf ("here");
- fhandler_socket *fhs = (fhandler_socket *) child;
-
- if (!DuplicateHandle (GetCurrentProcess (), wsock_mtx,
- GetCurrentProcess (), &fhs->wsock_mtx,
- 0, TRUE, DUPLICATE_SAME_ACCESS))
- {
- __seterrno ();
- return -1;
- }
- if (!DuplicateHandle (GetCurrentProcess (), wsock_evt,
- GetCurrentProcess (), &fhs->wsock_evt,
- 0, TRUE, DUPLICATE_SAME_ACCESS))
- {
- __seterrno ();
- NtClose (fhs->wsock_mtx);
- return -1;
- }
- if (get_addr_family () == AF_LOCAL)
- {
- fhs->set_sun_path (get_sun_path ());
- fhs->set_peer_sun_path (get_peer_sun_path ());
- }
- if (!need_fixup_before ())
- {
- int ret = fhandler_base::dup (child, flags);
- if (ret)
- {
- NtClose (fhs->wsock_evt);
- NtClose (fhs->wsock_mtx);
- }
- return ret;
- }
-
- cygheap->user.deimpersonate ();
- fhs->init_fixup_before ();
- fhs->set_io_handle (get_io_handle ());
- int ret = fhs->fixup_before_fork_exec (GetCurrentProcessId ());
- cygheap->user.reimpersonate ();
- if (!ret)
- {
- fhs->fixup_after_fork (GetCurrentProcess ());
- if (fhs->get_io_handle() != (HANDLE) INVALID_SOCKET)
- return 0;
- }
- cygheap->fdtab.dec_need_fixup_before ();
- NtClose (fhs->wsock_evt);
- NtClose (fhs->wsock_mtx);
- return -1;
-}
-
-int __reg2
-fhandler_socket::fstat (struct stat *buf)
-{
- int res;
- if (get_device () == FH_UNIX)
- {
- res = fhandler_base::fstat_fs (buf);
- if (!res)
- {
- buf->st_mode = (buf->st_mode & ~S_IFMT) | S_IFSOCK;
- buf->st_size = 0;
- }
- }
- else
- {
- res = fhandler_base::fstat (buf);
- if (!res)
- {
- buf->st_dev = 0;
- buf->st_ino = (ino_t) ((uintptr_t) get_handle ());
- buf->st_mode = S_IFSOCK | S_IRWXU | S_IRWXG | S_IRWXO;
- buf->st_size = 0;
- }
- }
- return res;
-}
-
-int __reg2
-fhandler_socket::fstatvfs (struct statvfs *sfs)
-{
- if (get_device () == FH_UNIX)
- {
- fhandler_disk_file fh (pc);
- fh.get_device () = FH_FS;
- return fh.fstatvfs (sfs);
- }
- set_errno (EBADF);
- return -1;
-}
-
-int
-fhandler_socket::fchmod (mode_t mode)
-{
- if (get_device () == FH_UNIX)
- {
- fhandler_disk_file fh (pc);
- fh.get_device () = FH_FS;
- int ret = fh.fchmod (S_IFSOCK | adjust_socket_file_mode (mode));
- return ret;
- }
- set_errno (EBADF);
- return -1;
-}
-
-int
-fhandler_socket::fchown (uid_t uid, gid_t gid)
-{
- if (get_device () == FH_UNIX)
- {
- fhandler_disk_file fh (pc);
- return fh.fchown (uid, gid);
- }
- set_errno (EBADF);
- return -1;
-}
-
-int
-fhandler_socket::facl (int cmd, int nentries, aclent_t *aclbufp)
-{
- if (get_device () == FH_UNIX)
- {
- fhandler_disk_file fh (pc);
- return fh.facl (cmd, nentries, aclbufp);
- }
- set_errno (EBADF);
- return -1;
-}
-
-int
-fhandler_socket::link (const char *newpath)
-{
- if (get_device () == FH_UNIX)
- {
- fhandler_disk_file fh (pc);
- return fh.link (newpath);
- }
- return fhandler_base::link (newpath);
-}
-
-int
-fhandler_socket::bind (const struct sockaddr *name, int namelen)
-{
- int res = -1;
-
- if (name->sa_family == AF_LOCAL)
- {
-#define un_addr ((struct sockaddr_un *) name)
- struct sockaddr_in sin;
- int len = namelen - offsetof (struct sockaddr_un, sun_path);
-
- /* Check that name is within bounds. Don't check if the string is
- NUL-terminated, because there are projects out there which set
- namelen to a value which doesn't cover the trailing NUL. */
- if (len <= 1 || (len = strnlen (un_addr->sun_path, len)) > UNIX_PATH_MAX)
- {
- set_errno (len <= 1 ? (len == 1 ? ENOENT : EINVAL) : ENAMETOOLONG);
- goto out;
- }
- /* Copy over the sun_path string into a buffer big enough to add a
- trailing NUL. */
- char sun_path[len + 1];
- strncpy (sun_path, un_addr->sun_path, len);
- sun_path[len] = '\0';
-
- /* This isn't entirely foolproof, but we check first if the file exists
- so we can return with EADDRINUSE before having bound the socket.
- This allows an application to call bind again on the same socket using
- another filename. If we bind first, the application will not be able
- to call bind successfully ever again. */
- path_conv pc (sun_path, PC_SYM_FOLLOW);
- if (pc.error)
- {
- set_errno (pc.error);
- goto out;
- }
- if (pc.exists ())
- {
- set_errno (EADDRINUSE);
- goto out;
- }
-
- sin.sin_family = AF_INET;
- sin.sin_port = 0;
- sin.sin_addr.s_addr = htonl (INADDR_LOOPBACK);
- if (::bind (get_socket (), (sockaddr *) &sin, len = sizeof sin))
- {
- syscall_printf ("AF_LOCAL: bind failed");
- set_winsock_errno ();
- goto out;
- }
- if (::getsockname (get_socket (), (sockaddr *) &sin, &len))
- {
- syscall_printf ("AF_LOCAL: getsockname failed");
- set_winsock_errno ();
- goto out;
- }
-
- sin.sin_port = ntohs (sin.sin_port);
- debug_printf ("AF_LOCAL: socket bound to port %u", sin.sin_port);
-
- mode_t mode = adjust_socket_file_mode ((S_IRWXU | S_IRWXG | S_IRWXO)
- & ~cygheap->umask);
- DWORD fattr = FILE_ATTRIBUTE_SYSTEM;
- if (!(mode & (S_IWUSR | S_IWGRP | S_IWOTH)) && !pc.has_acls ())
- fattr |= FILE_ATTRIBUTE_READONLY;
- SECURITY_ATTRIBUTES sa = sec_none_nih;
- NTSTATUS status;
- HANDLE fh;
- OBJECT_ATTRIBUTES attr;
- IO_STATUS_BLOCK io;
- ULONG access = DELETE | FILE_GENERIC_WRITE;
-
- /* If the filesystem supports ACLs, we will overwrite the DACL after the
- call to NtCreateFile. This requires a handle with READ_CONTROL and
- WRITE_DAC access, otherwise get_file_sd and set_file_sd both have to
- open the file again.
- FIXME: On remote NTFS shares open sometimes fails because even the
- creator of the file doesn't have the right to change the DACL.
- I don't know what setting that is or how to recognize such a share,
- so for now we don't request WRITE_DAC on remote drives. */
- if (pc.has_acls () && !pc.isremote ())
- access |= READ_CONTROL | WRITE_DAC;
-
- status = NtCreateFile (&fh, access, pc.get_object_attr (attr, sa), &io,
- NULL, fattr, 0, FILE_CREATE,
- FILE_NON_DIRECTORY_FILE
- | FILE_SYNCHRONOUS_IO_NONALERT
- | FILE_OPEN_FOR_BACKUP_INTENT,
- NULL, 0);
- if (!NT_SUCCESS (status))
- {
- if (io.Information == FILE_EXISTS)
- set_errno (EADDRINUSE);
- else
- __seterrno_from_nt_status (status);
- }
- else
- {
- if (pc.has_acls ())
- set_file_attribute (fh, pc, ILLEGAL_UID, ILLEGAL_GID,
- S_JUSTCREATED | mode);
- char buf[sizeof (SOCKET_COOKIE) + 80];
- __small_sprintf (buf, "%s%u %c ", SOCKET_COOKIE, sin.sin_port,
- get_socket_type () == SOCK_STREAM ? 's'
- : get_socket_type () == SOCK_DGRAM ? 'd' : '-');
- af_local_set_secret (strchr (buf, '\0'));
- DWORD blen = strlen (buf) + 1;
- status = NtWriteFile (fh, NULL, NULL, NULL, &io, buf, blen, NULL, 0);
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- FILE_DISPOSITION_INFORMATION fdi = { TRUE };
- status = NtSetInformationFile (fh, &io, &fdi, sizeof fdi,
- FileDispositionInformation);
- if (!NT_SUCCESS (status))
- debug_printf ("Setting delete dispostion failed, status = %y",
- status);
- }
- else
- {
- set_sun_path (sun_path);
- res = 0;
- }
- NtClose (fh);
- }
-#undef un_addr
- }
- else
- {
- if (!saw_reuseaddr ())
- {
- /* If the application didn't explicitely request SO_REUSEADDR,
- enforce POSIX standard socket binding behaviour by setting the
- SO_EXCLUSIVEADDRUSE socket option. See cygwin_setsockopt()
- for a more detailed description. */
- int on = 1;
- int ret = ::setsockopt (get_socket (), SOL_SOCKET,
- ~(SO_REUSEADDR),
- (const char *) &on, sizeof on);
- debug_printf ("%d = setsockopt(SO_EXCLUSIVEADDRUSE), %E", ret);
- }
- if (::bind (get_socket (), name, namelen))
- set_winsock_errno ();
- else
- res = 0;
- }
-
-out:
- return res;
-}
-
-int
-fhandler_socket::connect (const struct sockaddr *name, int namelen)
-{
- struct sockaddr_storage sst;
- int type;
-
- if (get_inet_addr (name, namelen, &sst, &namelen, &type, connect_secret)
- == SOCKET_ERROR)
- return SOCKET_ERROR;
-
- if (get_addr_family () == AF_LOCAL)
- {
- if (get_socket_type () != type)
- {
- WSASetLastError (WSAEPROTOTYPE);
- set_winsock_errno ();
- return SOCKET_ERROR;
- }
-
- set_peer_sun_path (name->sa_data);
-
- /* Don't move af_local_set_cred into af_local_connect which may be called
- via select, possibly running under another identity. Call early here,
- because af_local_connect is called in wait_for_events. */
- if (get_socket_type () == SOCK_STREAM)
- af_local_set_cred ();
- }
-
- /* Initialize connect state to "connect_pending". State is ultimately set
- to "connected" or "connect_failed" in wait_for_events when the FD_CONNECT
- event occurs. Note that the underlying OS sockets are always non-blocking
- and a successfully initiated non-blocking Winsock connect always returns
- WSAEWOULDBLOCK. Thus it's safe to rely on event handling.
-
- Check for either unconnected or connect_failed since in both cases it's
- allowed to retry connecting the socket. It's also ok (albeit ugly) to
- call connect to check if a previous non-blocking connect finished.
-
- Set connect_state before calling connect, otherwise a race condition with
- an already running select or poll might occur. */
- if (connect_state () == unconnected || connect_state () == connect_failed)
- connect_state (connect_pending);
-
- int res = ::connect (get_socket (), (struct sockaddr *) &sst, namelen);
- if (!is_nonblocking ()
- && res == SOCKET_ERROR
- && WSAGetLastError () == WSAEWOULDBLOCK)
- res = wait_for_events (FD_CONNECT | FD_CLOSE, 0);
-
- if (res)
- {
- DWORD err = WSAGetLastError ();
-
- /* Some applications use the ugly technique to check if a non-blocking
- connect succeeded by calling connect again, until it returns EISCONN.
- This circumvents the event handling and connect_state is never set.
- Thus we check for this situation here. */
- if (err == WSAEISCONN)
- connect_state (connected);
- /* Winsock returns WSAEWOULDBLOCK if the non-blocking socket cannot be
- conected immediately. Convert to POSIX/Linux compliant EINPROGRESS. */
- else if (is_nonblocking () && err == WSAEWOULDBLOCK)
- WSASetLastError (WSAEINPROGRESS);
- /* Winsock returns WSAEINVAL if the socket is already a listener.
- Convert to POSIX/Linux compliant EISCONN. */
- else if (err == WSAEINVAL && connect_state () == listener)
- WSASetLastError (WSAEISCONN);
- /* Any other error except WSAEALREADY during connect_pending means the
- connect failed. */
- else if (connect_state () == connect_pending && err != WSAEALREADY)
- connect_state (connect_failed);
- set_winsock_errno ();
- }
-
- return res;
-}
-
-int
-fhandler_socket::listen (int backlog)
-{
- int res = ::listen (get_socket (), backlog);
- if (res && WSAGetLastError () == WSAEINVAL)
- {
- /* It's perfectly valid to call listen on an unbound INET socket.
- In this case the socket is automatically bound to an unused
- port number, listening on all interfaces. On WinSock, listen
- fails with WSAEINVAL when it's called on an unbound socket.
- So we have to bind manually here to have POSIX semantics. */
- if (get_addr_family () == AF_INET)
- {
- struct sockaddr_in sin;
- sin.sin_family = AF_INET;
- sin.sin_port = 0;
- sin.sin_addr.s_addr = INADDR_ANY;
- if (!::bind (get_socket (), (struct sockaddr *) &sin, sizeof sin))
- res = ::listen (get_socket (), backlog);
- }
- else if (get_addr_family () == AF_INET6)
- {
- struct sockaddr_in6 sin6;
- memset (&sin6, 0, sizeof sin6);
- sin6.sin6_family = AF_INET6;
- if (!::bind (get_socket (), (struct sockaddr *) &sin6, sizeof sin6))
- res = ::listen (get_socket (), backlog);
- }
- }
- if (!res)
- {
- if (get_addr_family () == AF_LOCAL && get_socket_type () == SOCK_STREAM)
- af_local_set_cred ();
- connect_state (listener); /* gets set to connected on accepted socket. */
- }
- else
- set_winsock_errno ();
- return res;
-}
-
-int
-fhandler_socket::accept4 (struct sockaddr *peer, int *len, int flags)
-{
- /* Allows NULL peer and len parameters. */
- struct sockaddr_storage lpeer;
- int llen = sizeof (struct sockaddr_storage);
-
- int res = (int) INVALID_SOCKET;
-
- /* Windows event handling does not check for the validity of the desired
- flags so we have to do it here. */
- if (connect_state () != listener)
- {
- WSASetLastError (WSAEINVAL);
- set_winsock_errno ();
- goto out;
- }
-
- while (!(res = wait_for_events (FD_ACCEPT | FD_CLOSE, 0))
- && (res = ::accept (get_socket (), (struct sockaddr *) &lpeer, &llen))
- == SOCKET_ERROR
- && WSAGetLastError () == WSAEWOULDBLOCK)
- ;
- if (res == (int) INVALID_SOCKET)
- set_winsock_errno ();
- else
- {
- cygheap_fdnew res_fd;
- if (res_fd >= 0 && fdsock (res_fd, &dev (), res))
- {
- fhandler_socket *sock = (fhandler_socket *) res_fd;
- sock->set_addr_family (get_addr_family ());
- sock->set_socket_type (get_socket_type ());
- sock->async_io (false); /* fdsock switches async mode off. */
- if (get_addr_family () == AF_LOCAL)
- {
- sock->set_sun_path (get_sun_path ());
- sock->set_peer_sun_path (get_peer_sun_path ());
- if (get_socket_type () == SOCK_STREAM)
- {
- /* Don't forget to copy credentials from accepting
- socket to accepted socket and start transaction
- on accepted socket! */
- af_local_copy (sock);
- res = sock->af_local_accept ();
- if (res == -1)
- {
- res_fd.release ();
- set_winsock_errno ();
- goto out;
- }
- }
- }
- sock->set_nonblocking (flags & SOCK_NONBLOCK);
- if (flags & SOCK_CLOEXEC)
- sock->set_close_on_exec (true);
- /* No locking necessary at this point. */
- sock->wsock_events->events = wsock_events->events | FD_WRITE;
- sock->wsock_events->owner = wsock_events->owner;
- sock->connect_state (connected);
- res = res_fd;
- if (peer)
- {
- if (get_addr_family () == AF_LOCAL)
- {
- /* FIXME: Right now we have no way to determine the
- bound socket name of the peer's socket. For now
- we just fake an unbound socket on the other side. */
- static struct sockaddr_un un = { AF_LOCAL, "" };
- memcpy (peer, &un, MIN (*len, (int) sizeof (un.sun_family)));
- *len = (int) sizeof (un.sun_family);
- }
- else
- {
- memcpy (peer, &lpeer, MIN (*len, llen));
- *len = llen;
- }
- }
- }
- else
- {
- closesocket (res);
- res = -1;
- }
- }
-
-out:
- debug_printf ("res %d", res);
- return res;
-}
-
-int
-fhandler_socket::getsockname (struct sockaddr *name, int *namelen)
-{
- int res = -1;
-
- if (get_addr_family () == AF_LOCAL)
- {
- struct sockaddr_un sun;
- sun.sun_family = AF_LOCAL;
- sun.sun_path[0] = '\0';
- if (get_sun_path ())
- strncat (sun.sun_path, get_sun_path (), UNIX_PATH_MAX - 1);
- memcpy (name, &sun, MIN (*namelen, (int) SUN_LEN (&sun) + 1));
- *namelen = (int) SUN_LEN (&sun) + (get_sun_path () ? 1 : 0);
- res = 0;
- }
- else
- {
- /* Always use a local big enough buffer and truncate later as necessary
- per POSIX. WinSock unfortunaltey only returns WSAEFAULT if the buffer
- is too small. */
- struct sockaddr_storage sock;
- int len = sizeof sock;
- res = ::getsockname (get_socket (), (struct sockaddr *) &sock, &len);
- if (!res)
- {
- memcpy (name, &sock, MIN (*namelen, len));
- *namelen = len;
- }
- else
- {
- if (WSAGetLastError () == WSAEINVAL)
- {
- /* WinSock returns WSAEINVAL if the socket is locally
- unbound. Per SUSv3 this is not an error condition.
- We're faking a valid return value here by creating the
- same content in the sockaddr structure as on Linux. */
- memset (&sock, 0, sizeof sock);
- sock.ss_family = get_addr_family ();
- switch (get_addr_family ())
- {
- case AF_INET:
- res = 0;
- len = (int) sizeof (struct sockaddr_in);
- break;
- case AF_INET6:
- res = 0;
- len = (int) sizeof (struct sockaddr_in6);
- break;
- default:
- WSASetLastError (WSAEOPNOTSUPP);
- break;
- }
- if (!res)
- {
- memcpy (name, &sock, MIN (*namelen, len));
- *namelen = len;
- }
- }
- if (res)
- set_winsock_errno ();
- }
- }
-
- return res;
-}
-
-int
-fhandler_socket::getpeername (struct sockaddr *name, int *namelen)
-{
- /* Always use a local big enough buffer and truncate later as necessary
- per POSIX. WinSock unfortunately only returns WSAEFAULT if the buffer
- is too small. */
- struct sockaddr_storage sock;
- int len = sizeof sock;
- int res = ::getpeername (get_socket (), (struct sockaddr *) &sock, &len);
- if (res)
- set_winsock_errno ();
- else if (get_addr_family () == AF_LOCAL)
- {
- struct sockaddr_un sun;
- memset (&sun, 0, sizeof sun);
- sun.sun_family = AF_LOCAL;
- sun.sun_path[0] = '\0';
- if (get_peer_sun_path ())
- strncat (sun.sun_path, get_peer_sun_path (), UNIX_PATH_MAX - 1);
- memcpy (name, &sun, MIN (*namelen, (int) SUN_LEN (&sun) + 1));
- *namelen = (int) SUN_LEN (&sun) + (get_peer_sun_path () ? 1 : 0);
- }
- else
- {
- memcpy (name, &sock, MIN (*namelen, len));
- *namelen = len;
- }
-
- return res;
-}
-
-/* There's no DLL which exports the symbol WSARecvMsg. One has to call
- WSAIoctl as below to fetch the function pointer. Why on earth did the
- MS developers decide not to export a normal symbol for these extension
- functions? */
-inline int
-get_ext_funcptr (SOCKET sock, void *funcptr)
-{
- DWORD bret;
- const GUID guid = WSAID_WSARECVMSG;
- return WSAIoctl (sock, SIO_GET_EXTENSION_FUNCTION_POINTER,
- (void *) &guid, sizeof (GUID), funcptr, sizeof (void *),
- &bret, NULL, NULL);
-}
-
-inline ssize_t
-fhandler_socket::recv_internal (LPWSAMSG wsamsg, bool use_recvmsg)
-{
- ssize_t res = 0;
- DWORD ret = 0, wret;
- int evt_mask = FD_READ | ((wsamsg->dwFlags & MSG_OOB) ? FD_OOB : 0);
- LPWSABUF &wsabuf = wsamsg->lpBuffers;
- ULONG &wsacnt = wsamsg->dwBufferCount;
- static NO_COPY LPFN_WSARECVMSG WSARecvMsg;
- int orig_namelen = wsamsg->namelen;
-
- /* CV 2014-10-26: Do not check for the connect_state at this point. In
- certain scenarios there's no way to check the connect state reliably.
- Example (hexchat): Parent process creates socket, forks, child process
- calls connect, parent process calls read. Even if the event handling
- allows to check for FD_CONNECT in the parent, there is always yet another
- scenario we can easily break. */
-
- DWORD wait_flags = wsamsg->dwFlags;
- bool waitall = !!(wait_flags & MSG_WAITALL);
- wsamsg->dwFlags &= (MSG_OOB | MSG_PEEK | MSG_DONTROUTE);
- if (use_recvmsg)
- {
- if (!WSARecvMsg
- && get_ext_funcptr (get_socket (), &WSARecvMsg) == SOCKET_ERROR)
- {
- if (wsamsg->Control.len > 0)
- {
- set_winsock_errno ();
- return SOCKET_ERROR;
- }
- use_recvmsg = false;
- }
- else /* Only MSG_PEEK is supported by WSARecvMsg. */
- wsamsg->dwFlags &= MSG_PEEK;
- }
- if (waitall)
- {
- if (get_socket_type () != SOCK_STREAM)
- {
- WSASetLastError (WSAEOPNOTSUPP);
- set_winsock_errno ();
- return SOCKET_ERROR;
- }
- if (is_nonblocking () || (wsamsg->dwFlags & (MSG_OOB | MSG_PEEK)))
- waitall = false;
- }
-
- /* Note: Don't call WSARecvFrom(MSG_PEEK) without actually having data
- waiting in the buffers, otherwise the event handling gets messed up
- for some reason. */
- while (!(res = wait_for_events (evt_mask | FD_CLOSE, wait_flags))
- || saw_shutdown_read ())
- {
- if (use_recvmsg)
- res = WSARecvMsg (get_socket (), wsamsg, &wret, NULL, NULL);
- /* This is working around a really weird problem in WinSock.
-
- Assume you create a socket, fork the process (thus duplicating
- the socket), connect the socket in the child, then call recv
- on the original socket handle in the parent process.
- In this scenario, calls to WinSock's recvfrom and WSARecvFrom
- in the parent will fail with WSAEINVAL, regardless whether both
- address parameters, name and namelen, are NULL or point to valid
- storage. However, calls to recv and WSARecv succeed as expected.
- Per MSDN, WSAEINVAL in the context of recv means "The socket has not
- been bound". It is as if the recvfrom functions test if the socket
- is bound locally, but in the parent process, WinSock doesn't know
- about that and fails, while the same test is omitted in the recv
- functions.
-
- This also covers another weird case: WinSock returns WSAEFAULT if
- namelen is a valid pointer while name is NULL. Both parameters are
- ignored for TCP sockets, so this only occurs when using UDP socket. */
- else if (!wsamsg->name || get_socket_type () == SOCK_STREAM)
- res = WSARecv (get_socket (), wsabuf, wsacnt, &wret, &wsamsg->dwFlags,
- NULL, NULL);
- else
- res = WSARecvFrom (get_socket (), wsabuf, wsacnt, &wret,
- &wsamsg->dwFlags, wsamsg->name, &wsamsg->namelen,
- NULL, NULL);
- if (!res)
- {
- ret += wret;
- if (!waitall)
- break;
- while (wret && wsacnt)
- {
- if (wsabuf->len > wret)
- {
- wsabuf->len -= wret;
- wsabuf->buf += wret;
- wret = 0;
- }
- else
- {
- wret -= wsabuf->len;
- ++wsabuf;
- --wsacnt;
- }
- }
- if (!wret)
- break;
- }
- else if (WSAGetLastError () != WSAEWOULDBLOCK)
- break;
- }
-
- if (res)
- {
- /* According to SUSv3, errno isn't set in that case and no error
- condition is returned. */
- if (WSAGetLastError () == WSAEMSGSIZE)
- ret += wret;
- else if (!ret)
- {
- /* ESHUTDOWN isn't defined for recv in SUSv3. Simply EOF is returned
- in this case. */
- if (WSAGetLastError () == WSAESHUTDOWN)
- ret = 0;
- else
- {
- set_winsock_errno ();
- return SOCKET_ERROR;
- }
- }
- }
-
- if (get_addr_family () == AF_LOCAL && wsamsg->name != NULL
- && orig_namelen >= (int) sizeof (sa_family_t))
- {
- /* WSARecvFrom copied the sockaddr_in block to wsamsg->name. We have to
- overwrite it with a sockaddr_un block. For datagram sockets we
- generate a sockaddr_un with a filename analogue to abstract socket
- names under Linux. See `man 7 unix' under Linux for a description. */
- sockaddr_un *un = (sockaddr_un *) wsamsg->name;
- un->sun_family = AF_LOCAL;
- int len = orig_namelen - offsetof (struct sockaddr_un, sun_path);
- if (len > 0)
- {
- if (get_socket_type () == SOCK_DGRAM)
- {
- if (len >= 7)
- {
- __small_sprintf (un->sun_path + 1, "d%04x",
- ((struct sockaddr_in *) wsamsg->name)->sin_port);
- wsamsg->namelen = offsetof (struct sockaddr_un, sun_path) + 7;
- }
- else
- wsamsg->namelen = offsetof (struct sockaddr_un, sun_path) + 1;
- un->sun_path[0] = '\0';
- }
- else if (!get_peer_sun_path ())
- wsamsg->namelen = sizeof (sa_family_t);
- else
- {
- memset (un->sun_path, 0, len);
- strncpy (un->sun_path, get_peer_sun_path (), len);
- if (un->sun_path[len - 1] == '\0')
- len = strlen (un->sun_path) + 1;
- if (len > UNIX_PATH_MAX)
- len = UNIX_PATH_MAX;
- wsamsg->namelen = offsetof (struct sockaddr_un, sun_path) + len;
- }
- }
- }
-
- return ret;
-}
-
-void __reg3
-fhandler_socket::read (void *in_ptr, size_t& len)
-{
- char *ptr = (char *) in_ptr;
-
-#ifdef __x86_64__
- /* size_t is 64 bit, but the len member in WSABUF is 32 bit.
- Split buffer if necessary. */
- DWORD bufcnt = len / UINT32_MAX + ((!len || (len % UINT32_MAX)) ? 1 : 0);
- WSABUF wsabuf[bufcnt];
- WSAMSG wsamsg = { NULL, 0, wsabuf, bufcnt, { 0, NULL }, 0 };
- /* Don't use len as loop condition, it could be 0. */
- for (WSABUF *wsaptr = wsabuf; bufcnt--; ++wsaptr)
- {
- wsaptr->len = MIN (len, UINT32_MAX);
- wsaptr->buf = ptr;
- len -= wsaptr->len;
- ptr += wsaptr->len;
- }
-#else
- WSABUF wsabuf = { len, ptr };
- WSAMSG wsamsg = { NULL, 0, &wsabuf, 1, { 0, NULL }, 0 };
-#endif
-
- len = recv_internal (&wsamsg, false);
-}
-
-ssize_t
-fhandler_socket::readv (const struct iovec *const iov, const int iovcnt,
- ssize_t tot)
-{
- WSABUF wsabuf[iovcnt];
- WSABUF *wsaptr = wsabuf + iovcnt;
- const struct iovec *iovptr = iov + iovcnt;
- while (--wsaptr >= wsabuf)
- {
- wsaptr->len = (--iovptr)->iov_len;
- wsaptr->buf = (char *) iovptr->iov_base;
- }
- WSAMSG wsamsg = { NULL, 0, wsabuf, (DWORD) iovcnt, { 0, NULL}, 0 };
- return recv_internal (&wsamsg, false);
-}
-
-ssize_t
-fhandler_socket::recvfrom (void *in_ptr, size_t len, int flags,
- struct sockaddr *from, int *fromlen)
-{
- char *ptr = (char *) in_ptr;
-
-#ifdef __x86_64__
- /* size_t is 64 bit, but the len member in WSABUF is 32 bit.
- Split buffer if necessary. */
- DWORD bufcnt = len / UINT32_MAX + ((!len || (len % UINT32_MAX)) ? 1 : 0);
- WSABUF wsabuf[bufcnt];
- WSAMSG wsamsg = { from, from && fromlen ? *fromlen : 0,
- wsabuf, bufcnt,
- { 0, NULL },
- (DWORD) flags };
- /* Don't use len as loop condition, it could be 0. */
- for (WSABUF *wsaptr = wsabuf; bufcnt--; ++wsaptr)
- {
- wsaptr->len = MIN (len, UINT32_MAX);
- wsaptr->buf = ptr;
- len -= wsaptr->len;
- ptr += wsaptr->len;
- }
-#else
- WSABUF wsabuf = { len, ptr };
- WSAMSG wsamsg = { from, from && fromlen ? *fromlen : 0,
- &wsabuf, 1,
- { 0, NULL},
- (DWORD) flags };
-#endif
- ssize_t ret = recv_internal (&wsamsg, false);
- if (fromlen)
- *fromlen = wsamsg.namelen;
- return ret;
-}
-
-ssize_t
-fhandler_socket::recvmsg (struct msghdr *msg, int flags)
-{
- /* TODO: Descriptor passing on AF_LOCAL sockets. */
-
- /* Disappointing but true: Even if WSARecvMsg is supported, it's only
- supported for datagram and raw sockets. */
- bool use_recvmsg = true;
- if (get_socket_type () == SOCK_STREAM || get_addr_family () == AF_LOCAL)
- {
- use_recvmsg = false;
- msg->msg_controllen = 0;
- }
-
- WSABUF wsabuf[msg->msg_iovlen];
- WSABUF *wsaptr = wsabuf + msg->msg_iovlen;
- const struct iovec *iovptr = msg->msg_iov + msg->msg_iovlen;
- while (--wsaptr >= wsabuf)
- {
- wsaptr->len = (--iovptr)->iov_len;
- wsaptr->buf = (char *) iovptr->iov_base;
- }
- WSAMSG wsamsg = { (struct sockaddr *) msg->msg_name, msg->msg_namelen,
- wsabuf, (DWORD) msg->msg_iovlen,
- { (DWORD) msg->msg_controllen, (char *) msg->msg_control },
- (DWORD) flags };
- ssize_t ret = recv_internal (&wsamsg, use_recvmsg);
- if (ret >= 0)
- {
- msg->msg_namelen = wsamsg.namelen;
- msg->msg_controllen = wsamsg.Control.len;
- if (!CYGWIN_VERSION_CHECK_FOR_USING_ANCIENT_MSGHDR)
- msg->msg_flags = wsamsg.dwFlags;
- }
- return ret;
-}
-
-inline ssize_t
-fhandler_socket::send_internal (struct _WSAMSG *wsamsg, int flags)
-{
- ssize_t res = 0;
- DWORD ret = 0, err = 0, sum = 0;
- WSABUF out_buf[wsamsg->dwBufferCount];
- bool use_sendmsg = false;
- DWORD wait_flags = flags & MSG_DONTWAIT;
- bool nosignal = !!(flags & MSG_NOSIGNAL);
-
- flags &= (MSG_OOB | MSG_DONTROUTE);
- if (wsamsg->Control.len > 0)
- use_sendmsg = true;
- /* Workaround for MSDN KB 823764: Split a message into chunks <= SO_SNDBUF.
- in_idx is the index of the current lpBuffers from the input wsamsg buffer.
- in_off is used to keep track of the next byte to write from a wsamsg
- buffer which only gets partially written. */
- for (DWORD in_idx = 0, in_off = 0;
- in_idx < wsamsg->dwBufferCount;
- in_off >= wsamsg->lpBuffers[in_idx].len && (++in_idx, in_off = 0))
- {
- /* Split a message into the least number of pieces to minimize the
- number of WsaSendTo calls. Don't split datagram messages (bad idea).
- out_idx is the index of the next buffer in the out_buf WSABUF,
- also the number of buffers given to WSASendTo.
- out_len is the number of bytes in the buffers given to WSASendTo.
- Don't split datagram messages (very bad idea). */
- DWORD out_idx = 0;
- DWORD out_len = 0;
- if (get_socket_type () == SOCK_STREAM)
- {
- do
- {
- out_buf[out_idx].buf = wsamsg->lpBuffers[in_idx].buf + in_off;
- out_buf[out_idx].len = wsamsg->lpBuffers[in_idx].len - in_off;
- out_len += out_buf[out_idx].len;
- out_idx++;
- }
- while (out_len < (unsigned) wmem ()
- && (in_off = 0, ++in_idx < wsamsg->dwBufferCount));
- /* Tweak len of the last out_buf buffer so the entire number of bytes
- is (less than or) equal to wmem (). Fix out_len as well since it's
- used in a subsequent test expression. */
- if (out_len > (unsigned) wmem ())
- {
- out_buf[out_idx - 1].len -= out_len - (unsigned) wmem ();
- out_len = (unsigned) wmem ();
- }
- /* Add the bytes written from the current last buffer to in_off,
- so in_off points to the next byte to be written from that buffer,
- or beyond which lets the outper loop skip to the next buffer. */
- in_off += out_buf[out_idx - 1].len;
- }
-
- do
- {
- if (use_sendmsg)
- res = WSASendMsg (get_socket (), wsamsg, flags, &ret, NULL, NULL);
- else if (get_socket_type () == SOCK_STREAM)
- res = WSASendTo (get_socket (), out_buf, out_idx, &ret, flags,
- wsamsg->name, wsamsg->namelen, NULL, NULL);
- else
- res = WSASendTo (get_socket (), wsamsg->lpBuffers,
- wsamsg->dwBufferCount, &ret, flags,
- wsamsg->name, wsamsg->namelen, NULL, NULL);
- if (res && (err = WSAGetLastError ()) == WSAEWOULDBLOCK)
- {
- LOCK_EVENTS;
- wsock_events->events &= ~FD_WRITE;
- UNLOCK_EVENTS;
- }
- }
- while (res && err == WSAEWOULDBLOCK
- && !(res = wait_for_events (FD_WRITE | FD_CLOSE, wait_flags)));
-
- if (!res)
- {
- sum += ret;
- /* For streams, return to application if the number of bytes written
- is less than the number of bytes we intended to write in a single
- call to WSASendTo. Otherwise we would have to add code to
- backtrack in the input buffers, which is questionable. There was
- probably a good reason we couldn't write more. */
- if (get_socket_type () != SOCK_STREAM || ret < out_len)
- break;
- }
- else if (is_nonblocking () || err != WSAEWOULDBLOCK)
- break;
- }
-
- if (sum)
- res = sum;
- else if (res == SOCKET_ERROR)
- {
- set_winsock_errno ();
-
- /* Special handling for EPIPE and SIGPIPE.
-
- EPIPE is generated if the local end has been shut down on a connection
- oriented socket. In this case the process will also receive a SIGPIPE
- unless MSG_NOSIGNAL is set. */
- if ((get_errno () == ECONNABORTED || get_errno () == ESHUTDOWN)
- && get_socket_type () == SOCK_STREAM)
- {
- set_errno (EPIPE);
- if (!nosignal)
- raise (SIGPIPE);
- }
- }
-
- return res;
-}
-
-ssize_t
-fhandler_socket::write (const void *in_ptr, size_t len)
-{
- char *ptr = (char *) in_ptr;
-
-#ifdef __x86_64__
- /* size_t is 64 bit, but the len member in WSABUF is 32 bit.
- Split buffer if necessary. */
- DWORD bufcnt = len / UINT32_MAX + ((!len || (len % UINT32_MAX)) ? 1 : 0);
- WSABUF wsabuf[bufcnt];
- WSAMSG wsamsg = { NULL, 0, wsabuf, bufcnt, { 0, NULL }, 0 };
- /* Don't use len as loop condition, it could be 0. */
- for (WSABUF *wsaptr = wsabuf; bufcnt--; ++wsaptr)
- {
- wsaptr->len = MIN (len, UINT32_MAX);
- wsaptr->buf = ptr;
- len -= wsaptr->len;
- ptr += wsaptr->len;
- }
-#else
- WSABUF wsabuf = { len, ptr };
- WSAMSG wsamsg = { NULL, 0, &wsabuf, 1, { 0, NULL }, 0 };
-#endif
- return send_internal (&wsamsg, 0);
-}
-
-ssize_t
-fhandler_socket::writev (const struct iovec *const iov, const int iovcnt,
- ssize_t tot)
-{
- WSABUF wsabuf[iovcnt];
- WSABUF *wsaptr = wsabuf;
- const struct iovec *iovptr = iov;
- for (int i = 0; i < iovcnt; ++i)
- {
- wsaptr->len = iovptr->iov_len;
- (wsaptr++)->buf = (char *) (iovptr++)->iov_base;
- }
- WSAMSG wsamsg = { NULL, 0, wsabuf, (DWORD) iovcnt, { 0, NULL}, 0 };
- return send_internal (&wsamsg, 0);
-}
-
-ssize_t
-fhandler_socket::sendto (const void *in_ptr, size_t len, int flags,
- const struct sockaddr *to, int tolen)
-{
- char *ptr = (char *) in_ptr;
- struct sockaddr_storage sst;
-
- if (to && get_inet_addr (to, tolen, &sst, &tolen) == SOCKET_ERROR)
- return SOCKET_ERROR;
-
-#ifdef __x86_64__
- /* size_t is 64 bit, but the len member in WSABUF is 32 bit.
- Split buffer if necessary. */
- DWORD bufcnt = len / UINT32_MAX + ((!len || (len % UINT32_MAX)) ? 1 : 0);
- WSABUF wsabuf[bufcnt];
- WSAMSG wsamsg = { to ? (struct sockaddr *) &sst : NULL, tolen,
- wsabuf, bufcnt,
- { 0, NULL },
- 0 };
- /* Don't use len as loop condition, it could be 0. */
- for (WSABUF *wsaptr = wsabuf; bufcnt--; ++wsaptr)
- {
- wsaptr->len = MIN (len, UINT32_MAX);
- wsaptr->buf = ptr;
- len -= wsaptr->len;
- ptr += wsaptr->len;
- }
-#else
- WSABUF wsabuf = { len, ptr };
- WSAMSG wsamsg = { to ? (struct sockaddr *) &sst : NULL, tolen,
- &wsabuf, 1,
- { 0, NULL},
- 0 };
-#endif
- return send_internal (&wsamsg, flags);
-}
-
-ssize_t
-fhandler_socket::sendmsg (const struct msghdr *msg, int flags)
-{
- /* TODO: Descriptor passing on AF_LOCAL sockets. */
-
- struct sockaddr_storage sst;
- int len = 0;
-
- if (msg->msg_name
- && get_inet_addr ((struct sockaddr *) msg->msg_name, msg->msg_namelen,
- &sst, &len) == SOCKET_ERROR)
- return SOCKET_ERROR;
-
- WSABUF wsabuf[msg->msg_iovlen];
- WSABUF *wsaptr = wsabuf;
- const struct iovec *iovptr = msg->msg_iov;
- for (int i = 0; i < msg->msg_iovlen; ++i)
- {
- wsaptr->len = iovptr->iov_len;
- (wsaptr++)->buf = (char *) (iovptr++)->iov_base;
- }
- /* Disappointing but true: Even if WSASendMsg is supported, it's only
- supported for datagram and raw sockets. */
- DWORD controllen = (DWORD) (!wincap.has_sendmsg ()
- || get_socket_type () == SOCK_STREAM
- || get_addr_family () == AF_LOCAL
- ? 0 : msg->msg_controllen);
- WSAMSG wsamsg = { msg->msg_name ? (struct sockaddr *) &sst : NULL, len,
- wsabuf, (DWORD) msg->msg_iovlen,
- { controllen, (char *) msg->msg_control },
- 0 };
- return send_internal (&wsamsg, flags);
-}
-
-int
-fhandler_socket::shutdown (int how)
-{
- int res = ::shutdown (get_socket (), how);
-
- /* Linux allows to call shutdown for any socket, even if it's not connected.
- This also disables to call accept on this socket, if shutdown has been
- called with the SHUT_RD or SHUT_RDWR parameter. In contrast, WinSock
- only allows to call shutdown on a connected socket. The accept function
- is in no way affected. So, what we do here is to fake success, and to
- change the event settings so that an FD_CLOSE event is triggered for the
- calling Cygwin function. The evaluate_events method handles the call
- from accept specially to generate a Linux-compatible behaviour. */
- if (res && WSAGetLastError () != WSAENOTCONN)
- set_winsock_errno ();
- else
- {
- res = 0;
- switch (how)
- {
- case SHUT_RD:
- saw_shutdown_read (true);
- wsock_events->events |= FD_CLOSE;
- SetEvent (wsock_evt);
- break;
- case SHUT_WR:
- saw_shutdown_write (true);
- break;
- case SHUT_RDWR:
- saw_shutdown_read (true);
- saw_shutdown_write (true);
- wsock_events->events |= FD_CLOSE;
- SetEvent (wsock_evt);
- break;
- }
- }
- return res;
-}
-
-int
-fhandler_socket::close ()
-{
- int res = 0;
-
- release_events ();
- while ((res = closesocket (get_socket ())) != 0)
- {
- if (WSAGetLastError () != WSAEWOULDBLOCK)
- {
- set_winsock_errno ();
- res = -1;
- break;
- }
- if (cygwait (10) == WAIT_SIGNALED)
- {
- set_errno (EINTR);
- res = -1;
- break;
- }
- WSASetLastError (0);
- }
-
- debug_printf ("%d = fhandler_socket::close()", res);
- return res;
-}
-
-/* Definitions of old ifreq stuff used prior to Cygwin 1.7.0. */
-#define OLD_SIOCGIFFLAGS _IOW('s', 101, struct __old_ifreq)
-#define OLD_SIOCGIFADDR _IOW('s', 102, struct __old_ifreq)
-#define OLD_SIOCGIFBRDADDR _IOW('s', 103, struct __old_ifreq)
-#define OLD_SIOCGIFNETMASK _IOW('s', 104, struct __old_ifreq)
-#define OLD_SIOCGIFHWADDR _IOW('s', 105, struct __old_ifreq)
-#define OLD_SIOCGIFMETRIC _IOW('s', 106, struct __old_ifreq)
-#define OLD_SIOCGIFMTU _IOW('s', 107, struct __old_ifreq)
-#define OLD_SIOCGIFINDEX _IOW('s', 108, struct __old_ifreq)
-
-#define CONV_OLD_TO_NEW_SIO(old) (((old)&0xff00ffff)|(((long)sizeof(struct ifreq)&IOCPARM_MASK)<<16))
-
-struct __old_ifreq {
-#define __OLD_IFNAMSIZ 16
- union {
- char ifrn_name[__OLD_IFNAMSIZ]; /* if name, e.g. "en0" */
- } ifr_ifrn;
-
- union {
- struct sockaddr ifru_addr;
- struct sockaddr ifru_broadaddr;
- struct sockaddr ifru_netmask;
- struct sockaddr ifru_hwaddr;
- short ifru_flags;
- int ifru_metric;
- int ifru_mtu;
- int ifru_ifindex;
- } ifr_ifru;
-};
-
-int
-fhandler_socket::ioctl (unsigned int cmd, void *p)
-{
- extern int get_ifconf (struct ifconf *ifc, int what); /* net.cc */
- int res;
- struct ifconf ifc, *ifcp;
- struct ifreq *ifrp;
-
- switch (cmd)
- {
- case SIOCGIFCONF:
- ifcp = (struct ifconf *) p;
- if (!ifcp)
- {
- set_errno (EINVAL);
- return -1;
- }
- if (CYGWIN_VERSION_CHECK_FOR_OLD_IFREQ)
- {
- ifc.ifc_len = ifcp->ifc_len / sizeof (struct __old_ifreq)
- * sizeof (struct ifreq);
- ifc.ifc_buf = (caddr_t) alloca (ifc.ifc_len);
- }
- else
- {
- ifc.ifc_len = ifcp->ifc_len;
- ifc.ifc_buf = ifcp->ifc_buf;
- }
- res = get_ifconf (&ifc, cmd);
- if (res)
- debug_printf ("error in get_ifconf");
- if (CYGWIN_VERSION_CHECK_FOR_OLD_IFREQ)
- {
- struct __old_ifreq *ifr = (struct __old_ifreq *) ifcp->ifc_buf;
- for (ifrp = ifc.ifc_req;
- (caddr_t) ifrp < ifc.ifc_buf + ifc.ifc_len;
- ++ifrp, ++ifr)
- {
- memcpy (&ifr->ifr_ifrn, &ifrp->ifr_ifrn, sizeof ifr->ifr_ifrn);
- ifr->ifr_name[__OLD_IFNAMSIZ - 1] = '\0';
- memcpy (&ifr->ifr_ifru, &ifrp->ifr_ifru, sizeof ifr->ifr_ifru);
- }
- ifcp->ifc_len = ifc.ifc_len / sizeof (struct ifreq)
- * sizeof (struct __old_ifreq);
- }
- else
- ifcp->ifc_len = ifc.ifc_len;
- break;
- case OLD_SIOCGIFFLAGS:
- case OLD_SIOCGIFADDR:
- case OLD_SIOCGIFBRDADDR:
- case OLD_SIOCGIFNETMASK:
- case OLD_SIOCGIFHWADDR:
- case OLD_SIOCGIFMETRIC:
- case OLD_SIOCGIFMTU:
- case OLD_SIOCGIFINDEX:
- cmd = CONV_OLD_TO_NEW_SIO (cmd);
- /*FALLTHRU*/
- case SIOCGIFFLAGS:
- case SIOCGIFBRDADDR:
- case SIOCGIFNETMASK:
- case SIOCGIFADDR:
- case SIOCGIFHWADDR:
- case SIOCGIFMETRIC:
- case SIOCGIFMTU:
- case SIOCGIFINDEX:
- case SIOCGIFFRNDLYNAM:
- case SIOCGIFDSTADDR:
- {
- if (!p)
- {
- debug_printf ("ifr == NULL");
- set_errno (EINVAL);
- return -1;
- }
-
- if (cmd > SIOCGIFINDEX && CYGWIN_VERSION_CHECK_FOR_OLD_IFREQ)
- {
- debug_printf ("cmd not supported on this platform");
- set_errno (EINVAL);
- return -1;
- }
- ifc.ifc_len = 64 * sizeof (struct ifreq);
- ifc.ifc_buf = (caddr_t) alloca (ifc.ifc_len);
- if (cmd == SIOCGIFFRNDLYNAM)
- {
- struct ifreq_frndlyname *iff = (struct ifreq_frndlyname *)
- alloca (64 * sizeof (struct ifreq_frndlyname));
- for (int i = 0; i < 64; ++i)
- ifc.ifc_req[i].ifr_frndlyname = &iff[i];
- }
-
- res = get_ifconf (&ifc, cmd);
- if (res)
- {
- debug_printf ("error in get_ifconf");
- break;
- }
-
- if (CYGWIN_VERSION_CHECK_FOR_OLD_IFREQ)
- {
- struct __old_ifreq *ifr = (struct __old_ifreq *) p;
- debug_printf (" name: %s", ifr->ifr_name);
- for (ifrp = ifc.ifc_req;
- (caddr_t) ifrp < ifc.ifc_buf + ifc.ifc_len;
- ++ifrp)
- {
- debug_printf ("testname: %s", ifrp->ifr_name);
- if (! strcmp (ifrp->ifr_name, ifr->ifr_name))
- {
- memcpy (&ifr->ifr_ifru, &ifrp->ifr_ifru,
- sizeof ifr->ifr_ifru);
- break;
- }
- }
- }
- else
- {
- struct ifreq *ifr = (struct ifreq *) p;
- debug_printf (" name: %s", ifr->ifr_name);
- for (ifrp = ifc.ifc_req;
- (caddr_t) ifrp < ifc.ifc_buf + ifc.ifc_len;
- ++ifrp)
- {
- debug_printf ("testname: %s", ifrp->ifr_name);
- if (! strcmp (ifrp->ifr_name, ifr->ifr_name))
- {
- if (cmd == SIOCGIFFRNDLYNAM)
- /* The application has to care for the space. */
- memcpy (ifr->ifr_frndlyname, ifrp->ifr_frndlyname,
- sizeof (struct ifreq_frndlyname));
- else
- memcpy (&ifr->ifr_ifru, &ifrp->ifr_ifru,
- sizeof ifr->ifr_ifru);
- break;
- }
- }
- }
- if ((caddr_t) ifrp >= ifc.ifc_buf + ifc.ifc_len)
- {
- set_errno (EINVAL);
- return -1;
- }
- break;
- }
- /* From this point on we handle only ioctl commands which are understood by
- Winsock. However, we have a problem, which is, the different size of
- u_long in Windows and 64 bit Cygwin. This affects the definitions of
- FIOASYNC, etc, because they are defined in terms of sizeof(u_long).
- So we have to use case labels which are independent of the sizeof
- u_long. Since we're redefining u_long at the start of this file to
- matching Winsock's idea of u_long, we can use the real definitions in
- calls to Windows. In theory we also have to make sure to convert the
- different ideas of u_long between the application and Winsock, but
- fortunately, the parameters defined as u_long pointers are on Linux
- and BSD systems defined as int pointer, so the applications will
- use a type of the expected size. Hopefully. */
- case FIOASYNC:
-#ifdef __x86_64__
- case _IOW('f', 125, unsigned long):
-#endif
- res = WSAAsyncSelect (get_socket (), winmsg, WM_ASYNCIO,
- *(int *) p ? ASYNC_MASK : 0);
- syscall_printf ("Async I/O on socket %s",
- *(int *) p ? "started" : "cancelled");
- async_io (*(int *) p != 0);
- /* If async_io is switched off, revert the event handling. */
- if (*(int *) p == 0)
- WSAEventSelect (get_socket (), wsock_evt, EVENT_MASK);
- break;
- case FIONREAD:
-#ifdef __x86_64__
- case _IOR('f', 127, unsigned long):
-#endif
- res = ioctlsocket (get_socket (), FIONREAD, (u_long *) p);
- if (res == SOCKET_ERROR)
- set_winsock_errno ();
- break;
- default:
- /* Sockets are always non-blocking internally. So we just note the
- state here. */
-#ifdef __x86_64__
- /* Convert the different idea of u_long in the definition of cmd. */
- if (((cmd >> 16) & IOCPARM_MASK) == sizeof (unsigned long))
- cmd = (cmd & ~(IOCPARM_MASK << 16)) | (sizeof (u_long) << 16);
-#endif
- if (cmd == FIONBIO)
- {
- syscall_printf ("socket is now %sblocking",
- *(int *) p ? "non" : "");
- set_nonblocking (*(int *) p);
- res = 0;
- }
- else
- res = ioctlsocket (get_socket (), cmd, (u_long *) p);
- break;
- }
- syscall_printf ("%d = ioctl_socket(%x, %p)", res, cmd, p);
- return res;
-}
-
-int
-fhandler_socket::fcntl (int cmd, intptr_t arg)
-{
- int res = 0;
- int request, current;
-
- switch (cmd)
- {
- case F_SETOWN:
- {
- pid_t pid = (pid_t) arg;
- LOCK_EVENTS;
- wsock_events->owner = pid;
- UNLOCK_EVENTS;
- debug_printf ("owner set to %d", pid);
- }
- break;
- case F_GETOWN:
- res = wsock_events->owner;
- break;
- case F_SETFL:
- {
- /* Carefully test for the O_NONBLOCK or deprecated OLD_O_NDELAY flag.
- Set only the flag that has been passed in. If both are set, just
- record O_NONBLOCK. */
- int new_flags = arg & O_NONBLOCK_MASK;
- if ((new_flags & OLD_O_NDELAY) && (new_flags & O_NONBLOCK))
- new_flags = O_NONBLOCK;
- current = get_flags () & O_NONBLOCK_MASK;
- request = new_flags ? 1 : 0;
- if (!!current != !!new_flags && (res = ioctl (FIONBIO, &request)))
- break;
- set_flags ((get_flags () & ~O_NONBLOCK_MASK) | new_flags);
- break;
- }
- default:
- res = fhandler_base::fcntl (cmd, arg);
- break;
- }
- return res;
-}
-
-void
-fhandler_socket::set_close_on_exec (bool val)
-{
- set_no_inheritance (wsock_mtx, val);
- set_no_inheritance (wsock_evt, val);
- if (need_fixup_before ())
- {
- close_on_exec (val);
- debug_printf ("set close_on_exec for %s to %d", get_name (), val);
- }
- else
- fhandler_base::set_close_on_exec (val);
-}
-
-void
-fhandler_socket::set_sun_path (const char *path)
-{
- sun_path = path ? cstrdup (path) : NULL;
-}
-
-void
-fhandler_socket::set_peer_sun_path (const char *path)
-{
- peer_sun_path = path ? cstrdup (path) : NULL;
-}
-
-int
-fhandler_socket::getpeereid (pid_t *pid, uid_t *euid, gid_t *egid)
-{
- if (get_addr_family () != AF_LOCAL || get_socket_type () != SOCK_STREAM)
- {
- set_errno (EINVAL);
- return -1;
- }
- if (no_getpeereid ())
- {
- set_errno (ENOTSUP);
- return -1;
- }
- if (connect_state () != connected)
- {
- set_errno (ENOTCONN);
- return -1;
- }
-
- __try
- {
- if (pid)
- *pid = sec_peer_pid;
- if (euid)
- *euid = sec_peer_uid;
- if (egid)
- *egid = sec_peer_gid;
- return 0;
- }
- __except (EFAULT) {}
- __endtry
- return -1;
-}
diff --git a/winsup/cygwin/fhandler_tape.cc b/winsup/cygwin/fhandler_tape.cc
deleted file mode 100644
index 5b09e4262..000000000
--- a/winsup/cygwin/fhandler_tape.cc
+++ /dev/null
@@ -1,1515 +0,0 @@
-/* fhandler_tape.cc. See fhandler.h for a description of the fhandler
- classes.
-
- Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
- 2010, 2011, 2012, 2013, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include "cygtls.h"
-#include <stdlib.h>
-#include <sys/mtio.h>
-#include <sys/param.h>
-#include <devioctl.h>
-#include <ntddstor.h>
-#include "security.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "shared_info.h"
-#include "sigproc.h"
-#include "child_info.h"
-
-/* Media changes and bus resets are sometimes reported and the function
- hasn't been executed. We repeat all functions which return with one
- of these error codes. */
-#define TAPE_FUNC(func) while ((lasterr = (func)) == ERROR_MEDIA_CHANGED) \
- { \
- initialize (drive, false); \
- part (partition)->initialize (0); \
- }
-
-#define IS_BOT(err) ((err) == ERROR_BEGINNING_OF_MEDIA)
-
-#define IS_EOF(err) ((err) == ERROR_FILEMARK_DETECTED \
- || (err) == ERROR_SETMARK_DETECTED)
-
-#define IS_SM(err) ((err) == ERROR_SETMARK_DETECTED)
-
-#define IS_EOD(err) ((err) == ERROR_END_OF_MEDIA \
- || (err) == ERROR_EOM_OVERFLOW \
- || (err) == ERROR_NO_DATA_DETECTED)
-
-#define IS_EOM(err) ((err) == ERROR_END_OF_MEDIA \
- || (err) == ERROR_EOM_OVERFLOW)
-
-/**********************************************************************/
-/* mtinfo_part */
-
-void
-mtinfo_part::initialize (int64_t nblock)
-{
- block = nblock;
- if (block == 0)
- file = fblock = 0;
- else
- file = fblock = -1;
- smark = false;
- emark = no_eof;
-}
-
-/**********************************************************************/
-/* mtinfo_drive */
-
-void
-mtinfo_drive::initialize (int num, bool first_time)
-{
- drive = num;
- partition = 0;
- block = -1;
- lock = unlocked;
- if (first_time)
- {
- buffer_writes (true);
- async_writes (false);
- two_fm (false);
- fast_eom (false);
- auto_lock (false);
- sysv (false);
- nowait (false);
- }
- for (int i = 0; i < MAX_PARTITION_NUM; ++i)
- part (i)->initialize ();
-}
-
-int
-mtinfo_drive::get_dp (HANDLE mt)
-{
- DWORD len = sizeof _dp;
- TAPE_FUNC (GetTapeParameters (mt, GET_TAPE_DRIVE_INFORMATION, &len, &_dp));
- return error ("get_dp");
-}
-
-int
-mtinfo_drive::get_mp (HANDLE mt)
-{
- DWORD len = sizeof _mp;
- TAPE_FUNC (GetTapeParameters (mt, GET_TAPE_MEDIA_INFORMATION, &len, &_mp));
- return error ("get_mp");
-}
-
-int
-mtinfo_drive::open (HANDLE mt)
-{
- /* First access after opening the device can return BUS RESET, but we
- need the drive parameters, so just try again. */
- while (get_dp (mt) == ERROR_BUS_RESET)
- ;
- get_mp (mt);
- get_pos (mt);
- if (partition < MAX_PARTITION_NUM && part (partition)->block != block)
- part (partition)->initialize (block);
- /* The following rewind in position 0 solves a problem which appears
- * in case of multi volume archives (at least on NT4): The last ReadFile
- * on the previous medium returns ERROR_NO_DATA_DETECTED. After media
- * change, all subsequent ReadFile calls return ERROR_NO_DATA_DETECTED,
- * too. The call to set_pos apparently reset some internal flags.
- * FIXME: Is that really true or based on a misinterpretation? */
- if (!block)
- {
- debug_printf ("rewind in position 0");
- set_pos (mt, TAPE_REWIND, 0, false);
- }
- return error ("open");
-}
-
-int
-mtinfo_drive::close (HANDLE mt, bool rewind)
-{
- lasterr = 0;
- if (GetTapeStatus (mt) == ERROR_NO_MEDIA_IN_DRIVE)
- dirty = clean;
- if (dirty >= has_written)
- {
- /* If an async write is still pending, wait for completion. */
- if (dirty == async_write_pending)
- lasterr = async_wait (mt, NULL);
- if (!lasterr)
- {
- /* if last operation was writing, write a filemark */
- debug_printf ("writing filemark");
- write_marks (mt, TAPE_FILEMARKS, two_fm () ? 2 : 1);
- if (two_fm () && !lasterr && !rewind) /* Backspace over 2nd fmark. */
- {
- set_pos (mt, TAPE_SPACE_FILEMARKS, -1, false);
- if (!lasterr)
- part (partition)->fblock = 0; /* That's obvious, isn't it? */
- }
- }
- }
- else if (dirty == has_read && !rewind)
- {
- if (sysv ())
- {
- /* Under SYSV semantics, the tape is moved past the next file mark
- after read. */
- if (part (partition)->emark == no_eof)
- set_pos (mt, TAPE_SPACE_FILEMARKS, 1, false);
- else if (part (partition)->emark == eof_hit)
- part (partition)->emark = eof;
- }
- else
- {
- /* Under BSD semantics, we must check if the filemark has been
- inadvertendly crossed. If so cross the filemark backwards
- and position the tape right before EOF. */
- if (part (partition)->emark == eof_hit)
- set_pos (mt, TAPE_SPACE_FILEMARKS, -1, false);
- }
- }
- if (rewind)
- {
- debug_printf ("rewinding");
- set_pos (mt, TAPE_REWIND, 0, false);
- }
- if (auto_lock () && lock == auto_locked)
- prepare (mt, TAPE_UNLOCK);
- dirty = clean;
- return error ("close");
-}
-
-int
-mtinfo_drive::read (HANDLE mt, LPOVERLAPPED pov, void *ptr, size_t &ulen)
-{
- BOOL ret;
- DWORD bytes_read = 0;
-
- if (GetTapeStatus (mt) == ERROR_NO_MEDIA_IN_DRIVE)
- return lasterr = ERROR_NO_MEDIA_IN_DRIVE;
- if (lasterr == ERROR_BUS_RESET)
- {
- ulen = 0;
- goto out;
- }
- /* If an async write is still pending, wait for completion. */
- if (dirty == async_write_pending)
- lasterr = async_wait (mt, NULL);
- dirty = clean;
- if (part (partition)->emark == eof_hit)
- {
- part (partition)->emark = eof;
- lasterr = ulen = 0;
- goto out;
- }
- else if (part (partition)->emark == eod_hit)
- {
- part (partition)->emark = eod;
- lasterr = ulen = 0;
- goto out;
- }
- else if (part (partition)->emark == eod)
- {
- lasterr = ERROR_NO_DATA_DETECTED;
- ulen = (size_t) -1;
- goto out;
- }
- else if (part (partition)->emark == eom_hit)
- {
- part (partition)->emark = eom;
- lasterr = ulen = 0;
- goto out;
- }
- else if (part (partition)->emark == eom)
- {
- lasterr = ERROR_END_OF_MEDIA;
- ulen = (size_t) -1;
- goto out;
- }
- part (partition)->smark = false;
- if (auto_lock () && lock < auto_locked)
- prepare (mt, TAPE_LOCK, true);
- ov = pov;
- ov->Offset = ov->OffsetHigh = 0;
- ret = ReadFile (mt, ptr, ulen, &bytes_read, ov);
- lasterr = ret ? 0 : GetLastError ();
- if (lasterr == ERROR_IO_PENDING)
- lasterr = async_wait (mt, &bytes_read);
- ulen = (size_t) bytes_read;
- if (bytes_read > 0)
- {
- int32_t blocks_read = mp ()->BlockSize == 0
- ? 1 : howmany (bytes_read, mp ()->BlockSize);
- block += blocks_read;
- part (partition)->block += blocks_read;
- if (part (partition)->fblock >= 0)
- part (partition)->fblock += blocks_read;
- }
- if (IS_EOF (lasterr))
- {
- block++;
- part (partition)->block++;
- if (part (partition)->file >= 0)
- part (partition)->file++;
- part (partition)->fblock = 0;
- part (partition)->smark = IS_SM (lasterr);
- part (partition)->emark = bytes_read > 0 ? eof_hit : eof;
- lasterr = 0;
- }
- else if (IS_EOD (lasterr))
- {
- if (part (partition)->emark == eof)
- part (partition)->emark = IS_EOM (lasterr) ? eom : eod;
- else
- {
- part (partition)->emark = IS_EOM (lasterr) ? eom_hit : eod_hit;
- lasterr = 0;
- }
- }
- else
- {
- part (partition)->emark = no_eof;
- /* This happens if the buffer is too small when in variable block
- size mode. Linux returns ENOMEM here. We're doing the same. */
- if (lasterr == ERROR_MORE_DATA)
- lasterr = ERROR_NOT_ENOUGH_MEMORY;
- }
- if (!lasterr)
- dirty = has_read;
-out:
- return error ("read");
-}
-
-int
-mtinfo_drive::async_wait (HANDLE mt, DWORD *bytes_written)
-{
- DWORD written;
-
- bool ret = GetOverlappedResult (mt, ov, &written, TRUE);
- if (bytes_written)
- *bytes_written = written;
- return ret ? 0 : GetLastError ();
-}
-
-int
-mtinfo_drive::write (HANDLE mt, LPOVERLAPPED pov, const void *ptr, size_t &len)
-{
- BOOL ret;
- DWORD bytes_written = 0;
- int async_err = 0;
-
- if (GetTapeStatus (mt) == ERROR_NO_MEDIA_IN_DRIVE)
- return lasterr = ERROR_NO_MEDIA_IN_DRIVE;
- if (lasterr == ERROR_BUS_RESET)
- {
- len = 0;
- return error ("write");
- }
- if (dirty == async_write_pending)
- async_err = async_wait (mt, &bytes_written);
- dirty = clean;
- part (partition)->smark = false;
- if (auto_lock () && lock < auto_locked)
- prepare (mt, TAPE_LOCK, true);
- ov = pov;
- ov->Offset = ov->OffsetHigh = 0;
- ret = WriteFile (mt, ptr, len, &bytes_written, ov);
- lasterr = ret ? 0: GetLastError ();
- if (lasterr == ERROR_IO_PENDING)
- {
- if (async_writes () && mp ()->BlockSize == 0)
- dirty = async_write_pending;
- else
- /* Wait for completion if a non-async write. */
- lasterr = async_wait (mt, &bytes_written);
- }
- len = (size_t) bytes_written;
- if (bytes_written > 0)
- {
- int32_t blocks_written = mp ()->BlockSize == 0
- ? 1 : howmany (bytes_written, mp ()->BlockSize);
- block += blocks_written;
- part (partition)->block += blocks_written;
- if (part (partition)->fblock >= 0)
- part (partition)->fblock += blocks_written;
- }
- if (!lasterr && async_err)
- lasterr = async_err;
- if (lasterr == ERROR_EOM_OVERFLOW)
- part (partition)->emark = eom;
- else if (lasterr == ERROR_END_OF_MEDIA)
- ; // FIXME?: part (partition)->emark = eom_hit;
- else
- {
- part (partition)->emark = no_eof;
- if (!lasterr)
- dirty = has_written;
- else if (lasterr == ERROR_IO_PENDING)
- dirty = async_write_pending;
- }
- return error ("write");
-}
-
-int
-mtinfo_drive::get_pos (HANDLE mt, int32_t *ppartition, int64_t *pblock)
-{
- DWORD p;
- ULARGE_INTEGER b;
-
- TAPE_FUNC (GetTapePosition (mt, TAPE_LOGICAL_POSITION, &p,
- &b.LowPart, &b.HighPart));
- if (lasterr == ERROR_INVALID_FUNCTION)
- TAPE_FUNC (GetTapePosition (mt, TAPE_ABSOLUTE_POSITION, &p,
- &b.LowPart, &b.HighPart));
- if (!lasterr)
- {
- if (p > 0)
- partition = (int32_t) p - 1;
- block = (int64_t) b.QuadPart;
- if (ppartition)
- *ppartition= partition;
- if (pblock)
- *pblock = block;
- }
- else
- {
- partition = 0;
- block = -1;
- }
- return error ("get_pos");
-}
-
-int
-mtinfo_drive::_set_pos (HANDLE mt, int mode, int64_t count, int partition,
- BOOL dont_wait)
-{
- /* If an async write is still pending, wait for completion. */
- if (dirty == async_write_pending)
- lasterr = async_wait (mt, NULL);
- dirty = clean;
- LARGE_INTEGER c = { QuadPart:count };
- TAPE_FUNC (SetTapePosition (mt, mode, partition, c.LowPart, c.HighPart,
- dont_wait));
- return lasterr;
-}
-
-int
-mtinfo_drive::set_pos (HANDLE mt, int mode, int64_t count, bool sfm_func)
-{
- int err = 0;
- int64_t undone = count;
- BOOL dont_wait = FALSE;
-
- switch (mode)
- {
- case TAPE_SPACE_RELATIVE_BLOCKS:
- case TAPE_SPACE_FILEMARKS:
- case TAPE_SPACE_SETMARKS:
- if (!count)
- {
- lasterr = 0;
- goto out;
- }
- break;
- case TAPE_ABSOLUTE_BLOCK:
- case TAPE_LOGICAL_BLOCK:
- case TAPE_REWIND:
- dont_wait = nowait () ? TRUE : FALSE;
- break;
- }
- if (mode == TAPE_SPACE_FILEMARKS)
- {
- while (!err && undone > 0)
- if (!(err = _set_pos (mt, mode, 1, 0, FALSE)) || IS_SM (err))
- --undone;
- while (!err && undone < 0)
- if (!(err = _set_pos (mt, mode, -1, 0, FALSE)) || IS_SM (err))
- ++undone;
- }
- else
- err = _set_pos (mt, mode, count, 0, dont_wait);
- switch (mode)
- {
- case TAPE_ABSOLUTE_BLOCK:
- case TAPE_LOGICAL_BLOCK:
- get_pos (mt);
- part (partition)->initialize (block);
- break;
- case TAPE_REWIND:
- if (!err)
- {
- block = 0;
- part (partition)->initialize (0);
- }
- else
- {
- get_pos (mt);
- part (partition)->initialize (block);
- }
- break;
- case TAPE_SPACE_END_OF_DATA:
- get_pos (mt);
- part (partition)->initialize (block);
- part (partition)->emark = IS_EOM (err) ? eom : eod;
- break;
- case TAPE_SPACE_FILEMARKS:
- if (!err || IS_SM (err))
- {
- get_pos (mt);
- part (partition)->block = block;
- if (count > 0)
- {
- if (part (partition)->file >= 0)
- part (partition)->file += count - undone;
- part (partition)->fblock = 0;
- part (partition)->smark = IS_SM (err);
- }
- else
- {
- if (part (partition)->file >= 0)
- part (partition)->file += count - undone;
- part (partition)->fblock = -1;
- part (partition)->smark = false;
- }
- if (sfm_func)
- err = set_pos (mt, mode, count > 0 ? -1 : 1, false);
- else
- part (partition)->emark = count > 0 ? eof : no_eof;
- }
- else if (IS_EOD (err))
- {
- get_pos (mt);
- part (partition)->block = block;
- if (part (partition)->file >= 0)
- part (partition)->file += count - undone;
- part (partition)->fblock = -1;
- part (partition)->smark = false;
- part (partition)->emark = IS_EOM (err) ? eom : eod;
- }
- else if (IS_BOT (err))
- {
- block = 0;
- part (partition)->initialize (0);
- }
- else
- {
- get_pos (mt);
- part (partition)->initialize (block);
- }
- break;
- case TAPE_SPACE_RELATIVE_BLOCKS:
- if (!err)
- {
- block += count;
- part (partition)->block += count;
- if (part (partition)->fblock >= 0)
- part (partition)->fblock += count;
- part (partition)->smark = false;
- part (partition)->emark = no_eof;
- }
- else if (IS_EOF (err))
- {
- get_pos (mt);
- part (partition)->block = block;
- if (part (partition)->file >= 0)
- part (partition)->file += count > 0 ? 1 : -1;
- part (partition)->fblock = count > 0 ? 0 : -1;
- part (partition)->smark = (count > 0 && IS_SM (err));
- part (partition)->emark = count > 0 ? eof : no_eof;
- }
- else if (IS_EOD (err))
- {
- get_pos (mt);
- part (partition)->fblock = block - part (partition)->block;
- part (partition)->block = block;
- part (partition)->smark = false;
- part (partition)->emark = IS_EOM (err) ? eom : eod;
- }
- else if (IS_BOT (err))
- {
- block = 0;
- part (partition)->initialize (0);
- }
- break;
- case TAPE_SPACE_SETMARKS:
- get_pos (mt);
- part (partition)->block = block;
- if (!err)
- {
- part (partition)->file = -1;
- part (partition)->fblock = -1;
- part (partition)->smark = true;
- }
- break;
- }
- lasterr = err;
-out:
- return error ("set_pos");
-}
-
-int
-mtinfo_drive::create_partitions (HANDLE mt, int32_t count)
-{
- if (dp ()->MaximumPartitionCount <= 1)
- return ERROR_INVALID_PARAMETER;
- if (set_pos (mt, TAPE_REWIND, 0, false))
- goto out;
- partition = 0;
- part (partition)->initialize (0);
- debug_printf ("Format tape with %s partition(s)", count <= 0 ? "one" : "two");
- if (get_feature (TAPE_DRIVE_INITIATOR))
- {
- TAPE_FUNC (CreateTapePartition (mt, TAPE_INITIATOR_PARTITIONS,
- count <= 0 ? 0 : 2, (DWORD) count));
- }
- else if (get_feature (TAPE_DRIVE_SELECT))
- {
- TAPE_FUNC (CreateTapePartition (mt, TAPE_SELECT_PARTITIONS,
- count <= 0 ? 0 : 2, 0));
- }
- else if (get_feature (TAPE_DRIVE_FIXED))
- {
- /* This is supposed to work for Tandberg SLR drivers up to version
- 1.6 which missed to set the TAPE_DRIVE_INITIATOR flag. According
- to Tandberg, CreateTapePartition(TAPE_FIXED_PARTITIONS) apparently
- does not ignore the dwCount parameter. Go figure! */
- TAPE_FUNC (CreateTapePartition (mt, TAPE_FIXED_PARTITIONS,
- count <= 0 ? 0 : 2, (DWORD) count));
- }
- else
- lasterr = ERROR_INVALID_PARAMETER;
-out:
- return error ("partition");
-}
-
-int
-mtinfo_drive::set_partition (HANDLE mt, int32_t count)
-{
- if (count < 0 || (uint32_t) count >= MAX_PARTITION_NUM)
- lasterr = ERROR_INVALID_PARAMETER;
- else if ((DWORD) count >= dp ()->MaximumPartitionCount)
- lasterr = ERROR_IO_DEVICE;
- else
- {
- uint64_t part_block = part (count)->block >= 0 ? part (count)->block : 0;
- int err = _set_pos (mt, TAPE_LOGICAL_BLOCK, part_block, count + 1, FALSE);
- if (err)
- {
- int64_t sav_block = block;
- int32_t sav_partition = partition;
- get_pos (mt);
- if (sav_partition != partition)
- {
- if (partition < MAX_PARTITION_NUM
- && part (partition)->block != block)
- part (partition)->initialize (block);
- }
- else if (sav_block != block && partition < MAX_PARTITION_NUM)
- part (partition)->initialize (block);
- lasterr = err;
- }
- else
- {
- partition = count;
- if (part (partition)->block == -1)
- part (partition)->initialize (0);
- }
- }
- return error ("set_partition");
-}
-
-int
-mtinfo_drive::write_marks (HANDLE mt, int marktype, DWORD count)
-{
- /* If an async write is still pending, wait for completion. */
- if (dirty == async_write_pending)
- {
- lasterr = async_wait (mt, NULL);
- dirty = has_written;
- }
- if (marktype != TAPE_SETMARKS)
- dirty = clean;
- if (marktype == TAPE_FILEMARKS
- && !get_feature (TAPE_DRIVE_WRITE_FILEMARKS))
- {
- if (get_feature (TAPE_DRIVE_WRITE_LONG_FMKS))
- marktype = TAPE_LONG_FILEMARKS;
- else
- marktype = TAPE_SHORT_FILEMARKS;
- }
- TAPE_FUNC (WriteTapemark (mt, marktype, count, FALSE));
- int err = lasterr;
- if (!err)
- {
- block += count;
- part (partition)->block += count;
- if (part (partition)->file >= 0)
- part (partition)->file += count;
- part (partition)->fblock = 0;
- part (partition)->emark = eof;
- part (partition)->smark = (marktype == TAPE_SETMARKS);
- }
- else
- {
- int64_t sav_block = block;
- int32_t sav_partition = partition;
- get_pos (mt);
- if (sav_partition != partition)
- {
- if (partition < MAX_PARTITION_NUM
- && part (partition)->block != block)
- part (partition)->initialize (block);
- }
- else if (sav_block != block && partition < MAX_PARTITION_NUM)
- part (partition)->initialize (block);
- lasterr = err;
- }
- return error ("write_marks");
-}
-
-int
-mtinfo_drive::erase (HANDLE mt, int mode)
-{
- switch (mode)
- {
- case TAPE_ERASE_SHORT:
- if (!get_feature (TAPE_DRIVE_ERASE_SHORT))
- mode = TAPE_ERASE_LONG;
- break;
- case TAPE_ERASE_LONG:
- if (!get_feature (TAPE_DRIVE_ERASE_LONG))
- mode = TAPE_ERASE_SHORT;
- break;
- }
- TAPE_FUNC (EraseTape (mt, mode, nowait () ? TRUE : FALSE));
- part (partition)->initialize (0);
- return error ("erase");
-}
-
-int
-mtinfo_drive::prepare (HANDLE mt, int action, bool is_auto)
-{
- BOOL dont_wait = FALSE;
-
- /* If an async write is still pending, wait for completion. */
- if (dirty == async_write_pending)
- lasterr = async_wait (mt, NULL);
- dirty = clean;
- if (action == TAPE_UNLOAD || action == TAPE_LOAD || action == TAPE_TENSION)
- dont_wait = nowait () ? TRUE : FALSE;
- TAPE_FUNC (PrepareTape (mt, action, dont_wait));
- /* Reset buffer after all successful preparations but lock and unlock. */
- switch (action)
- {
- case TAPE_FORMAT:
- case TAPE_UNLOAD:
- case TAPE_LOAD:
- initialize (drive, false);
- break;
- case TAPE_TENSION:
- part (partition)->initialize (0);
- break;
- case TAPE_LOCK:
- lock = lasterr ? lock_error : is_auto ? auto_locked : locked;
- break;
- case TAPE_UNLOCK:
- lock = lasterr ? lock_error : unlocked;
- break;
- }
- return error ("prepare");
-}
-
-int
-mtinfo_drive::set_compression (HANDLE mt, int32_t count)
-{
- if (!get_feature (TAPE_DRIVE_SET_COMPRESSION))
- return ERROR_INVALID_PARAMETER;
- TAPE_SET_DRIVE_PARAMETERS sdp =
- {
- dp ()->ECC,
- (BOOLEAN) (count ? TRUE : FALSE),
- dp ()->DataPadding,
- dp ()->ReportSetmarks,
- dp ()->EOTWarningZoneSize
- };
- TAPE_FUNC (SetTapeParameters (mt, SET_TAPE_DRIVE_INFORMATION, &sdp));
- int err = lasterr;
- if (!err)
- dp ()->Compression = sdp.Compression;
- else
- get_dp (mt);
- lasterr = err;
- return error ("set_compression");
-}
-
-int
-mtinfo_drive::set_blocksize (HANDLE mt, DWORD count)
-{
- TAPE_SET_MEDIA_PARAMETERS smp = {count};
- TAPE_FUNC (SetTapeParameters (mt, SET_TAPE_MEDIA_INFORMATION, &smp));
- /* Make sure to update blocksize info! */
- return lasterr ? error ("set_blocksize") : get_mp (mt);
-}
-
-int
-mtinfo_drive::get_status (HANDLE mt, struct mtget *get)
-{
- int notape = 0;
- DWORD tstat;
-
- if (!get)
- return ERROR_INVALID_PARAMETER;
-
- if ((tstat = GetTapeStatus (mt)) == ERROR_NO_MEDIA_IN_DRIVE
- || get_mp (mt) == ERROR_NO_MEDIA_IN_DRIVE)
- notape = 1;
-
- memset (get, 0, sizeof *get);
-
- get->mt_type = MT_ISUNKNOWN;
-
- if (!notape && get_feature (TAPE_DRIVE_SET_BLOCK_SIZE))
- get->mt_dsreg = (mp ()->BlockSize << MT_ST_BLKSIZE_SHIFT)
- & MT_ST_BLKSIZE_MASK;
- else
- get->mt_dsreg = (dp ()->DefaultBlockSize << MT_ST_BLKSIZE_SHIFT)
- & MT_ST_BLKSIZE_MASK;
-
- DWORD size = sizeof (GET_MEDIA_TYPES) + 10 * sizeof (DEVICE_MEDIA_INFO);
- void *buf = alloca (size);
- if (DeviceIoControl (mt, IOCTL_STORAGE_GET_MEDIA_TYPES_EX,
- NULL, 0, buf, size, &size, NULL)
- || GetLastError () == ERROR_MORE_DATA)
- {
- PGET_MEDIA_TYPES gmt = (PGET_MEDIA_TYPES) buf;
- for (DWORD i = 0; i < gmt->MediaInfoCount; ++i)
- {
- PDEVICE_MEDIA_INFO dmi = &gmt->MediaInfo[i];
- get->mt_type = dmi->DeviceSpecific.TapeInfo.MediaType;
-#define TINFO DeviceSpecific.TapeInfo
- if (dmi->TINFO.MediaCharacteristics & MEDIA_CURRENTLY_MOUNTED)
- {
- get->mt_type = dmi->DeviceSpecific.TapeInfo.MediaType;
- if (dmi->TINFO.BusType == BusTypeScsi)
- get->mt_dsreg |=
- (dmi->TINFO.BusSpecificData.ScsiInformation.DensityCode
- << MT_ST_DENSITY_SHIFT)
- & MT_ST_DENSITY_MASK;
- break;
- }
-#undef TINFO
- }
- }
-
- if (!notape)
- {
- get->mt_resid = (partition & 0xffff)
- | ((mp ()->PartitionCount & 0xffff) << 16);
- get->mt_fileno = part (partition)->file;
- get->mt_blkno = part (partition)->fblock;
-
- if (get->mt_blkno != 0)
- /* nothing to do */;
- else if (get->mt_fileno == 0)
- get->mt_gstat |= GMT_BOT (-1);
- else
- get->mt_gstat |= GMT_EOF (-1);
- if (part (partition)->emark >= eod_hit)
- get->mt_gstat |= GMT_EOD (-1);
- if (part (partition)->emark >= eom_hit)
- get->mt_gstat |= GMT_EOT (-1);
-
- if (part (partition)->smark)
- get->mt_gstat |= GMT_SM (-1);
-
- get->mt_gstat |= GMT_ONLINE (-1);
-
- if (mp ()->WriteProtected)
- get->mt_gstat |= GMT_WR_PROT (-1);
-
- get->mt_capacity = mp ()->Capacity.QuadPart;
- get->mt_remaining = mp ()->Remaining.QuadPart;
- }
-
- if (notape)
- get->mt_gstat |= GMT_DR_OPEN (-1);
-
- if (buffer_writes ())
- get->mt_gstat |= GMT_IM_REP_EN (-1); /* TODO: Async writes */
-
- if (tstat == ERROR_DEVICE_REQUIRES_CLEANING)
- get->mt_gstat |= GMT_CLN (-1);
-
- /* Cygwin specials: */
- if (dp ()->ReportSetmarks)
- get->mt_gstat |= GMT_REP_SM (-1);
- if (dp ()->DataPadding)
- get->mt_gstat |= GMT_PADDING (-1);
- if (dp ()->ECC)
- get->mt_gstat |= GMT_HW_ECC (-1);
- if (dp ()->Compression)
- get->mt_gstat |= GMT_HW_COMP (-1);
- if (two_fm ())
- get->mt_gstat |= GMT_TWO_FM (-1);
- if (fast_eom ())
- get->mt_gstat |= GMT_FAST_MTEOM (-1);
- if (auto_lock ())
- get->mt_gstat |= GMT_AUTO_LOCK (-1);
- if (sysv ())
- get->mt_gstat |= GMT_SYSV (-1);
- if (nowait ())
- get->mt_gstat |= GMT_NOWAIT (-1);
- if (async_writes ())
- get->mt_gstat |= GMT_ASYNC (-1);
-
- get->mt_erreg = 0; /* FIXME: No softerr counting */
-
- get->mt_minblksize = dp ()->MinimumBlockSize;
- get->mt_maxblksize = dp ()->MaximumBlockSize;
- get->mt_defblksize = dp ()->DefaultBlockSize;
- get->mt_featureslow = dp ()->FeaturesLow;
- get->mt_featureshigh = dp ()->FeaturesHigh;
- get->mt_eotwarningzonesize = dp ()->EOTWarningZoneSize;
-
- return 0;
-}
-
-int
-mtinfo_drive::set_options (HANDLE mt, int32_t options)
-{
- int32_t what = (options & MT_ST_OPTIONS);
- bool call_setparams = false;
- bool set;
- TAPE_SET_DRIVE_PARAMETERS sdp =
- {
- dp ()->ECC,
- dp ()->Compression,
- dp ()->DataPadding,
- dp ()->ReportSetmarks,
- dp ()->EOTWarningZoneSize
- };
-
- lasterr = 0;
- switch (what)
- {
- case 0:
- if (options == 0 || options == 1)
- {
- buffer_writes ((options == 1));
- }
- break;
- case MT_ST_BOOLEANS:
- buffer_writes (!!(options & MT_ST_BUFFER_WRITES));
- async_writes (!!(options & MT_ST_ASYNC_WRITES));
- two_fm (!!(options & MT_ST_TWO_FM));
- fast_eom (!!(options & MT_ST_FAST_MTEOM));
- auto_lock (!!(options & MT_ST_AUTO_LOCK));
- sysv (!!(options & MT_ST_SYSV));
- nowait (!!(options & MT_ST_NOWAIT));
- if (get_feature (TAPE_DRIVE_SET_ECC))
- sdp.ECC = !!(options & MT_ST_ECC);
- if (get_feature (TAPE_DRIVE_SET_PADDING))
- sdp.DataPadding = !!(options & MT_ST_PADDING);
- if (get_feature (TAPE_DRIVE_SET_REPORT_SMKS))
- sdp.ReportSetmarks = !!(options & MT_ST_REPORT_SM);
- if (sdp.ECC != dp ()->ECC || sdp.DataPadding != dp ()->DataPadding
- || sdp.ReportSetmarks != dp ()->ReportSetmarks)
- call_setparams = true;
- break;
- case MT_ST_SETBOOLEANS:
- case MT_ST_CLEARBOOLEANS:
- set = (what == MT_ST_SETBOOLEANS);
- if (options & MT_ST_BUFFER_WRITES)
- buffer_writes (set);
- if (options & MT_ST_ASYNC_WRITES)
- async_writes (set);
- if (options & MT_ST_TWO_FM)
- two_fm (set);
- if (options & MT_ST_FAST_MTEOM)
- fast_eom (set);
- if (options & MT_ST_AUTO_LOCK)
- auto_lock (set);
- if (options & MT_ST_SYSV)
- sysv (set);
- if (options & MT_ST_NOWAIT)
- nowait (set);
- if (options & MT_ST_ECC)
- sdp.ECC = set;
- if (options & MT_ST_PADDING)
- sdp.DataPadding = set;
- if (options & MT_ST_REPORT_SM)
- sdp.ReportSetmarks = set;
- if (sdp.ECC != dp ()->ECC || sdp.DataPadding != dp ()->DataPadding
- || sdp.ReportSetmarks != dp ()->ReportSetmarks)
- call_setparams = true;
- break;
- case MT_ST_EOT_WZ_SIZE:
- if (get_feature (TAPE_DRIVE_SET_EOT_WZ_SIZE))
- {
- sdp.EOTWarningZoneSize = (options & ~MT_ST_OPTIONS);
- if (sdp.EOTWarningZoneSize != dp ()->EOTWarningZoneSize)
- call_setparams = true;
- }
- break;
- }
- if (call_setparams)
- {
- TAPE_FUNC (SetTapeParameters (mt, SET_TAPE_DRIVE_INFORMATION, &sdp));
- int err = lasterr;
- if (!err)
- {
- dp ()->ECC = sdp.ECC;
- dp ()->DataPadding = sdp.DataPadding;
- dp ()->ReportSetmarks = sdp.ReportSetmarks;
- }
- else
- get_dp (mt);
- lasterr = err;
- }
- return error ("set_options");
-}
-
-int
-mtinfo_drive::ioctl (HANDLE mt, unsigned int cmd, void *buf)
-{
- __try
- {
- if (cmd == MTIOCTOP)
- {
- struct mtop *op = (struct mtop *) buf;
- if (lasterr == ERROR_BUS_RESET)
- {
- /* If a bus reset occurs, block further access to this device
- until the user rewinds, unloads or in any other way tries
- to maintain a well-known tape position. */
- if (op->mt_op != MTREW && op->mt_op != MTOFFL
- && op->mt_op != MTRETEN && op->mt_op != MTERASE
- && op->mt_op != MTSEEK && op->mt_op != MTEOM)
- return ERROR_BUS_RESET;
- /* Try to maintain last lock state after bus reset. */
- if (lock >= auto_locked && PrepareTape (mt, TAPE_LOCK, FALSE))
- {
- debug_printf ("Couldn't relock drive after bus reset.");
- lock = unlocked;
- }
- }
- switch (op->mt_op)
- {
- case MTRESET:
- break;
- case MTFSF:
- set_pos (mt, TAPE_SPACE_FILEMARKS, op->mt_count, false);
- break;
- case MTBSF:
- set_pos (mt, TAPE_SPACE_FILEMARKS, -op->mt_count, false);
- break;
- case MTFSR:
- set_pos (mt, TAPE_SPACE_RELATIVE_BLOCKS, op->mt_count, false);
- break;
- case MTBSR:
- set_pos (mt, TAPE_SPACE_RELATIVE_BLOCKS, -op->mt_count, false);
- break;
- case MTWEOF:
- write_marks (mt, TAPE_FILEMARKS, op->mt_count);
- break;
- case MTREW:
- set_pos (mt, TAPE_REWIND, 0, false);
- break;
- case MTOFFL:
- case MTUNLOAD:
- prepare (mt, TAPE_UNLOAD);
- break;
- case MTNOP:
- lasterr = 0;
- break;
- case MTRETEN:
- if (!get_feature (TAPE_DRIVE_TENSION))
- lasterr = ERROR_INVALID_PARAMETER;
- else if (!set_pos (mt, TAPE_REWIND, 0, false))
- prepare (mt, TAPE_TENSION);
- break;
- case MTBSFM:
- set_pos (mt, TAPE_SPACE_FILEMARKS, -op->mt_count, true);
- break;
- case MTFSFM:
- set_pos (mt, TAPE_SPACE_FILEMARKS, op->mt_count, true);
- break;
- case MTEOM:
- if (fast_eom () && get_feature (TAPE_DRIVE_END_OF_DATA))
- set_pos (mt, TAPE_SPACE_END_OF_DATA, 0, false);
- else
- set_pos (mt, TAPE_SPACE_FILEMARKS, 32767, false);
- break;
- case MTERASE:
- erase (mt, TAPE_ERASE_LONG);
- break;
- case MTRAS1:
- case MTRAS2:
- case MTRAS3:
- lasterr = ERROR_INVALID_PARAMETER;
- break;
- case MTSETBLK:
- if (!get_feature (TAPE_DRIVE_SET_BLOCK_SIZE))
- {
- lasterr = ERROR_INVALID_PARAMETER;
- break;
- }
- if ((DWORD) op->mt_count == mp ()->BlockSize)
- {
- /* Nothing has changed. */
- lasterr = 0;
- break;
- }
- if ((op->mt_count == 0 && !get_feature (TAPE_DRIVE_VARIABLE_BLOCK))
- || (op->mt_count > 0
- && ((DWORD) op->mt_count < dp ()->MinimumBlockSize
- || (DWORD) op->mt_count > dp ()->MaximumBlockSize)))
- {
- lasterr = ERROR_INVALID_PARAMETER;
- break;
- }
- if (set_blocksize (mt, op->mt_count)
- && lasterr == ERROR_INVALID_FUNCTION)
- lasterr = ERROR_INVALID_BLOCK_LENGTH;
- break;
- case MTSEEK:
- if (get_feature (TAPE_DRIVE_LOGICAL_BLK))
- set_pos (mt, TAPE_LOGICAL_BLOCK, op->mt_count, false);
- else if (!get_pos (mt))
- set_pos (mt, TAPE_SPACE_RELATIVE_BLOCKS,
- op->mt_count - block, false);
- break;
- case MTTELL:
- if (!get_pos (mt))
- op->mt_count = (int) block;
- break;
- case MTFSS:
- set_pos (mt, TAPE_SPACE_SETMARKS, op->mt_count, false);
- break;
- case MTBSS:
- set_pos (mt, TAPE_SPACE_SETMARKS, -op->mt_count, false);
- break;
- case MTWSM:
- write_marks (mt, TAPE_SETMARKS, op->mt_count);
- break;
- case MTLOCK:
- prepare (mt, TAPE_LOCK);
- break;
- case MTUNLOCK:
- prepare (mt, TAPE_UNLOCK);
- break;
- case MTLOAD:
- prepare (mt, TAPE_LOAD);
- break;
- case MTCOMPRESSION:
- set_compression (mt, op->mt_count);
- break;
- case MTSETPART:
- set_partition (mt, op->mt_count);
- break;
- case MTMKPART:
- create_partitions (mt, op->mt_count);
- break;
- case MTSETDRVBUFFER:
- set_options (mt, op->mt_count);
- break;
- case MTSETDENSITY:
- default:
- lasterr = ERROR_INVALID_PARAMETER;
- break;
- }
- }
- else if (cmd == MTIOCGET)
- get_status (mt, (struct mtget *) buf);
- else if (cmd == MTIOCPOS && !get_pos (mt))
- ((struct mtpos *) buf)->mt_blkno = (long) block;
- }
- __except (NO_ERROR)
- {
- lasterr = ERROR_NOACCESS;
- }
- __endtry
- return lasterr;
-}
-
-/**********************************************************************/
-/* mtinfo */
-
-void
-mtinfo::initialize ()
-{
- for (unsigned i = 0; i < MAX_DRIVE_NUM; ++i)
- drive (i)->initialize (i, true);
-}
-
-/**********************************************************************/
-/* fhandler_dev_tape */
-
-#define mt (cygwin_shared->mt)
-
-#define lock(err_ret_val) if (!_lock (false)) return (err_ret_val);
-
-inline bool
-fhandler_dev_tape::_lock (bool cancelable)
-{
- /* O_NONBLOCK is only valid in a read or write call. Only those are
- cancelable. */
- DWORD timeout = cancelable && is_nonblocking () ? 0 : INFINITE;
- switch (cygwait (mt_mtx, timeout, cw_sig | cw_cancel | cw_cancel_self))
- {
- case WAIT_OBJECT_0:
- return true;
- case WAIT_TIMEOUT:
- set_errno (EAGAIN);
- return false;
- default:
- __seterrno ();
- return false;
- }
-}
-
-inline int
-fhandler_dev_tape::unlock (int ret)
-{
- ReleaseMutex (mt_mtx);
- return ret;
-}
-
-fhandler_dev_tape::fhandler_dev_tape ()
- : fhandler_dev_raw ()
-{
- debug_printf ("unit: %d", dev ().get_minor ());
-}
-
-int
-fhandler_dev_tape::open (int flags, mode_t)
-{
- int ret;
-
- if (driveno () >= MAX_DRIVE_NUM)
- {
- set_errno (ENOENT);
- return 0;
- }
- if (!(mt_mtx = CreateMutex (&sec_all, !!(flags & O_CLOEXEC), NULL)))
- {
- __seterrno ();
- return 0;
- }
-
- /* The O_SYNC flag is not supported by the tape driver. Use the
- MT_ST_BUFFER_WRITES and MT_ST_ASYNC_WRITES flags in the drive
- settings instead. In turn, the MT_ST_BUFFER_WRITES is translated
- into O_SYNC, which controls the FILE_WRITE_THROUGH flag in the
- NtCreateFile call in fhandler_base::open. */
- flags &= ~O_SYNC;
- if (!mt.drive (driveno ())->buffer_writes ())
- flags |= O_SYNC;
-
- ret = fhandler_dev_raw::open (flags);
- if (ret)
- {
- mt.drive (driveno ())->open (get_handle ());
-
- /* In append mode, seek to beginning of next filemark */
- if (flags & O_APPEND)
- mt.drive (driveno ())->set_pos (get_handle (),
- TAPE_SPACE_FILEMARKS, 1, true);
-
- if (!(flags & O_DIRECT))
- {
- devbufsiz = mt.drive (driveno ())->dp ()->MaximumBlockSize;
- devbufalign = 1;
- devbufalloc = devbuf = new char [devbufsiz];
- }
- }
- else
- ReleaseMutex (mt_mtx);
- return ret;
-}
-
-int
-fhandler_dev_tape::close ()
-{
- int ret = 0;
- int cret = 0;
-
- if (!have_execed)
- {
- lock (-1);
- ret = mt.drive (driveno ())->close (get_handle (), is_rewind_device ());
- if (ret)
- __seterrno_from_win_error (ret);
- cret = fhandler_dev_raw::close ();
- unlock (0);
- }
- if (ov.hEvent)
- CloseHandle (ov.hEvent);
- CloseHandle (mt_mtx);
- return ret ? -1 : cret;
-}
-
-void __reg3
-fhandler_dev_tape::raw_read (void *ptr, size_t &ulen)
-{
- char *buf = (char *) ptr;
- size_t len = ulen;
- size_t block_size;
- size_t bytes_to_read;
- size_t bytes_read = 0;
- int ret = 0;
-
- if (lastblk_to_read ())
- {
- lastblk_to_read (false);
- ulen = 0;
- return;
- }
- if (!_lock (true))
- {
- ulen = (size_t) -1;
- return;
- }
- block_size = mt.drive (driveno ())->mp ()->BlockSize;
- if (devbuf)
- {
- if (devbufend > devbufstart)
- {
- bytes_to_read = MIN (len, devbufend - devbufstart);
- debug_printf ("read %lu bytes from buffer (rest %lu)",
- bytes_to_read, devbufend - devbufstart - bytes_to_read);
- memcpy (buf, devbuf + devbufstart, bytes_to_read);
- len -= bytes_to_read;
- bytes_read += bytes_to_read;
- buf += bytes_to_read;
- devbufstart += bytes_to_read;
- if (devbufstart == devbufend)
- devbufstart = devbufend = 0;
- /* If a switch to variable block_size occured, just return the buffer
- remains until the buffer is empty, then proceed with usual variable
- block size handling (one block per read call). */
- if (!block_size)
- len = 0;
- }
- if (len > 0)
- {
- if (!ov.hEvent
- && !(ov.hEvent = CreateEvent (&sec_none, TRUE, FALSE, NULL)))
- debug_printf ("Creating event failed, %E");
- size_t block_fit = !block_size ? len : rounddown(len, block_size);
- if (block_fit)
- {
- debug_printf ("read %lu bytes from tape (rest %lu)",
- block_fit, len - block_fit);
- ret = mt.drive (driveno ())->read (get_handle (), &ov, buf,
- block_fit);
- if (ret)
- __seterrno_from_win_error (ret);
- else if (block_fit)
- {
- len -= block_fit;
- bytes_read += block_fit;
- buf += block_fit;
- /* Only one block in each read call, please. */
- if (!block_size)
- len = 0;
- }
- else {
- len = 0;
- if (bytes_read)
- lastblk_to_read (true);
- }
- }
- if (!ret && len > 0)
- {
- debug_printf ("read %lu bytes from tape (one block)", block_size);
- ret = mt.drive (driveno ())->read (get_handle (), &ov, devbuf,
- block_size);
- if (ret)
- __seterrno_from_win_error (ret);
- else if (block_size)
- {
- devbufstart = len;
- devbufend = block_size;
- bytes_read += len;
- memcpy (buf, devbuf, len);
- }
- else if (bytes_read)
- lastblk_to_read (true);
- }
- }
- }
- else
- {
- if (!ov.hEvent
- && !(ov.hEvent = CreateEvent (&sec_none, TRUE, FALSE, NULL)))
- debug_printf ("Creating event failed, %E");
- bytes_read = ulen;
- ret = mt.drive (driveno ())->read (get_handle (), &ov, ptr, bytes_read);
- }
- ulen = (ret ? (size_t) -1 : bytes_read);
- unlock ();
-}
-
-ssize_t __reg3
-fhandler_dev_tape::raw_write (const void *ptr, size_t len)
-{
- if (!_lock (true))
- return -1;
- if (!ov.hEvent && !(ov.hEvent = CreateEvent (&sec_none, TRUE, FALSE, NULL)))
- debug_printf ("Creating event failed, %E");
- int ret = mt.drive (driveno ())->write (get_handle (), &ov, ptr, len);
- if (ret)
- __seterrno_from_win_error (ret);
- return unlock (ret ? -1 : (int) len);
-}
-
-off_t
-fhandler_dev_tape::lseek (off_t offset, int whence)
-{
-#if 1
- /* On Linux lseek on tapes is a no-op. For now, let's keep the old code
- intact but commented out, should incompatibilities arise. */
- return 0;
-#else
- struct mtop op;
- struct mtpos pos;
- DWORD block_size;
- off_t ret = ILLEGAL_SEEK;
-
- lock (ILLEGAL_SEEK);
-
- debug_printf ("lseek (%s, %D, %d)", get_name (), offset, whence);
-
- block_size = mt.drive (driveno ())->mp ()->BlockSize;
- if (block_size == 0)
- {
- set_errno (EIO);
- goto out;
- }
-
- if (ioctl (MTIOCPOS, &pos))
- goto out;
-
- switch (whence)
- {
- case SEEK_END:
- op.mt_op = MTFSF;
- op.mt_count = 1;
- if (ioctl (MTIOCTOP, &op))
- goto out;
- break;
- case SEEK_SET:
- if (whence == SEEK_SET && offset < 0)
- {
- set_errno (EINVAL);
- goto out;
- }
- break;
- case SEEK_CUR:
- break;
- default:
- set_errno (EINVAL);
- goto out;
- }
-
- op.mt_op = MTFSR;
- op.mt_count = offset / block_size
- - (whence == SEEK_SET ? pos.mt_blkno : 0);
-
- if (op.mt_count < 0)
- {
- op.mt_op = MTBSR;
- op.mt_count = -op.mt_count;
- }
-
- if (ioctl (MTIOCTOP, &op) || ioctl (MTIOCPOS, &pos))
- goto out;
-
- ret = pos.mt_blkno * block_size;
-
-out:
- return unlock (ret);
-#endif
-}
-
-int __reg2
-fhandler_dev_tape::fstat (struct stat *buf)
-{
- int ret;
-
- if (driveno () >= MAX_DRIVE_NUM)
- {
- set_errno (ENOENT);
- return -1;
- }
- if (!(ret = fhandler_base::fstat (buf)))
- buf->st_blocks = 0;
- return ret;
-}
-
-int
-fhandler_dev_tape::dup (fhandler_base *child, int flags)
-{
- lock (-1);
- fhandler_dev_tape *fh = (fhandler_dev_tape *) child;
- if (!DuplicateHandle (GetCurrentProcess (), mt_mtx,
- GetCurrentProcess (), &fh->mt_mtx,
- 0, TRUE, DUPLICATE_SAME_ACCESS))
- {
- debug_printf ("dup(%s) failed, mutex handle %p, %E",
- get_name (), mt_mtx);
- __seterrno ();
- return unlock (-1);
- }
- fh->ov.hEvent = NULL;
- if (ov.hEvent &&
- !DuplicateHandle (GetCurrentProcess (), ov.hEvent,
- GetCurrentProcess (), &fh->ov.hEvent,
- 0, TRUE, DUPLICATE_SAME_ACCESS))
- {
- debug_printf ("dup(%s) failed, event handle %p, %E",
- get_name (), ov.hEvent);
- __seterrno ();
- return unlock (-1);
- }
- return unlock (fhandler_dev_raw::dup (child, flags));
-}
-
-void
-fhandler_dev_tape::fixup_after_fork (HANDLE parent)
-{
- fhandler_dev_raw::fixup_after_fork (parent);
- fork_fixup (parent, mt_mtx, "mt_mtx");
- if (ov.hEvent)
- fork_fixup (parent, ov.hEvent, "ov.hEvent");
-}
-
-void
-fhandler_dev_tape::set_close_on_exec (bool val)
-{
- fhandler_dev_raw::set_close_on_exec (val);
- set_no_inheritance (mt_mtx, val);
- if (ov.hEvent)
- set_no_inheritance (ov.hEvent, val);
-}
-
-int
-fhandler_dev_tape::ioctl (unsigned int cmd, void *buf)
-{
- int ret = 0;
- lock (-1);
- if (cmd == MTIOCTOP || cmd == MTIOCGET || cmd == MTIOCPOS)
- {
- ret = mt.drive (driveno ())->ioctl (get_handle (), cmd, buf);
- if (ret)
- __seterrno_from_win_error (ret);
- return unlock (ret ? -1 : 0);
- }
- return unlock (fhandler_dev_raw::ioctl (cmd, buf));
-}
diff --git a/winsup/cygwin/fhandler_termios.cc b/winsup/cygwin/fhandler_termios.cc
deleted file mode 100644
index 6a4d666a0..000000000
--- a/winsup/cygwin/fhandler_termios.cc
+++ /dev/null
@@ -1,470 +0,0 @@
-/* fhandler_termios.cc
-
- Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2008, 2009, 2010,
- 2011, 2012, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include <stdlib.h>
-#include <ctype.h>
-#include "cygerrno.h"
-#include "path.h"
-#include "fhandler.h"
-#include "sigproc.h"
-#include "pinfo.h"
-#include "tty.h"
-#include "cygtls.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "child_info.h"
-#include "ntdll.h"
-
-/* Common functions shared by tty/console */
-
-void
-fhandler_termios::tcinit (bool is_pty_master)
-{
- /* Initial termios values */
-
- if (is_pty_master || !tc ()->initialized ())
- {
- tc ()->ti.c_iflag = BRKINT | ICRNL | IXON;
- tc ()->ti.c_oflag = OPOST | ONLCR;
- tc ()->ti.c_cflag = B38400 | CS8 | CREAD;
- tc ()->ti.c_lflag = ISIG | ICANON | ECHO | IEXTEN;
-
- tc ()->ti.c_cc[VDISCARD] = CFLUSH;
- tc ()->ti.c_cc[VEOL] = CEOL;
- tc ()->ti.c_cc[VEOL2] = CEOL2;
- tc ()->ti.c_cc[VEOF] = CEOF;
- tc ()->ti.c_cc[VERASE] = CERASE;
- tc ()->ti.c_cc[VINTR] = CINTR;
- tc ()->ti.c_cc[VKILL] = CKILL;
- tc ()->ti.c_cc[VLNEXT] = CLNEXT;
- tc ()->ti.c_cc[VMIN] = 1;
- tc ()->ti.c_cc[VQUIT] = CQUIT;
- tc ()->ti.c_cc[VREPRINT] = CRPRNT;
- tc ()->ti.c_cc[VSTART] = CSTART;
- tc ()->ti.c_cc[VSTOP] = CSTOP;
- tc ()->ti.c_cc[VSUSP] = CSUSP;
- tc ()->ti.c_cc[VSWTC] = CSWTCH;
- tc ()->ti.c_cc[VTIME] = 0;
- tc ()->ti.c_cc[VWERASE] = CWERASE;
-
- tc ()->ti.c_ispeed = tc ()->ti.c_ospeed = B38400;
- tc ()->pgid = is_pty_master ? 0 : myself->pgid;
- tc ()->initialized (true);
- }
-}
-
-int
-fhandler_termios::tcsetpgrp (const pid_t pgid)
-{
- termios_printf ("%s, pgid %d, sid %d, tsid %d", tc ()->ttyname (), pgid,
- myself->sid, tc ()->getsid ());
- if (myself->sid != tc ()->getsid ())
- {
- set_errno (EPERM);
- return -1;
- }
- int res;
- while (1)
- {
- res = bg_check (-SIGTTOU);
-
- switch (res)
- {
- case bg_ok:
- tc ()->setpgid (pgid);
- if (tc ()->is_console && (strace.active () || !being_debugged ()))
- tc ()->kill_pgrp (__SIGSETPGRP);
- res = 0;
- break;
- case bg_signalled:
- if (_my_tls.call_signal_handler ())
- continue;
- set_errno (EINTR);
- /* fall through intentionally */
- default:
- res = -1;
- break;
- }
- break;
- }
- return res;
-}
-
-int
-fhandler_termios::tcgetpgrp ()
-{
- if (myself->ctty > 0 && myself->ctty == tc ()->ntty)
- return tc ()->pgid;
- set_errno (ENOTTY);
- return -1;
-}
-
-int
-fhandler_pty_master::tcgetpgrp ()
-{
- return tc ()->pgid;
-}
-
-static inline bool
-is_flush_sig (int sig)
-{
- return sig == SIGINT || sig == SIGQUIT || sig == SIGTSTP;
-}
-
-void
-tty_min::kill_pgrp (int sig)
-{
- bool killself = false;
- if (is_flush_sig (sig) && cygheap->ctty)
- cygheap->ctty->sigflush ();
- winpids pids ((DWORD) PID_MAP_RW);
- siginfo_t si = {0};
- si.si_signo = sig;
- si.si_code = SI_KERNEL;
-
- for (unsigned i = 0; i < pids.npids; i++)
- {
- _pinfo *p = pids[i];
- if (!p->exists () || p->ctty != ntty || p->pgid != pgid)
- continue;
- if (p == myself)
- killself = sig != __SIGSETPGRP && !exit_state;
- else
- sig_send (p, si);
- }
- if (killself)
- sig_send (myself, si);
-}
-
-int
-tty_min::is_orphaned_process_group (int pgid)
-{
- /* An orphaned process group is a process group in which the parent
- of every member is either itself a member of the group or is not
- a member of the group's session. */
- termios_printf ("checking pgid %d, my sid %d, my parent %d", pgid, myself->sid, myself->ppid);
- winpids pids ((DWORD) 0);
- for (unsigned i = 0; i < pids.npids; i++)
- {
- _pinfo *p = pids[i];
- termios_printf ("checking pid %d - has pgid %d\n", p->pid, p->pgid);
- if (!p || !p->exists () || p->pgid != pgid)
- continue;
- pinfo ppid (p->ppid);
- if (!ppid)
- continue;
- termios_printf ("ppid->pgid %d, ppid->sid %d", ppid->pgid, ppid->sid);
- if (ppid->pgid != pgid && ppid->sid == myself->sid)
- return 0;
- }
- return 1;
-}
-
-bg_check_types
-fhandler_termios::bg_check (int sig)
-{
- if (!myself->pgid || !tc () || tc ()->getpgid () == myself->pgid ||
- myself->ctty != tc ()->ntty ||
- ((sig == SIGTTOU) && !(tc ()->ti.c_lflag & TOSTOP)))
- return bg_ok;
-
- if (sig < 0)
- sig = -sig;
-
- termios_printf ("%s, bg I/O pgid %d, tpgid %d, myctty %s", tc ()->ttyname (),
- myself->pgid, tc ()->getpgid (), myctty ());
-
- if (tc ()->getsid () == 0)
- {
- /* The pty has been closed by the master. Return an EOF
- indication. FIXME: There is nothing to stop somebody
- from reallocating this pty. I think this is the case
- which is handled by unlockpt on a Unix system. */
- termios_printf ("closed by master");
- return bg_eof;
- }
-
- threadlist_t *tl_entry;
- tl_entry = cygheap->find_tls (_main_tls);
- int sigs_ignored =
- ((void *) global_sigs[sig].sa_handler == (void *) SIG_IGN) ||
- (_main_tls->sigmask & SIGTOMASK (sig));
- cygheap->unlock_tls (tl_entry);
-
- /* If the process is ignoring SIGTT*, then background IO is OK. If
- the process is not ignoring SIGTT*, then the sig is to be sent to
- all processes in the process group (unless the process group of the
- process is orphaned, in which case we return EIO). */
- if (sigs_ignored)
- return bg_ok; /* Just allow the IO */
- else if (tc ()->is_orphaned_process_group (myself->pgid))
- {
- termios_printf ("process group is orphaned");
- set_errno (EIO); /* This is an IO error */
- return bg_error;
- }
- else
- {
- /* Don't raise a SIGTT* signal if we have already been
- interrupted by another signal. */
- if (cygwait ((DWORD) 0) != WAIT_SIGNALED)
- {
- siginfo_t si = {0};
- si.si_signo = sig;
- si.si_code = SI_KERNEL;
- kill_pgrp (myself->pgid, si);
- }
- return bg_signalled;
- }
-}
-
-#define set_input_done(x) input_done = input_done || (x)
-
-inline void
-fhandler_termios::echo_erase (int force)
-{
- if (force || tc ()->ti.c_lflag & ECHO)
- doecho ("\b \b", 3);
-}
-
-line_edit_status
-fhandler_termios::line_edit (const char *rptr, size_t nread, termios& ti,
- ssize_t *bytes_read)
-{
- line_edit_status ret = line_edit_ok;
- char c;
- int input_done = 0;
- bool sawsig = false;
- int iscanon = ti.c_lflag & ICANON;
-
- if (bytes_read)
- *bytes_read = nread;
- while (nread-- > 0)
- {
- c = *rptr++;
-
- paranoid_printf ("char %0o", c);
-
- if (ti.c_iflag & ISTRIP)
- c &= 0x7f;
- if (ti.c_lflag & ISIG)
- {
- int sig;
- if (CCEQ (ti.c_cc[VINTR], c))
- sig = SIGINT;
- else if (CCEQ (ti.c_cc[VQUIT], c))
- sig = SIGQUIT;
- else if (CCEQ (ti.c_cc[VSUSP], c))
- sig = SIGTSTP;
- else
- goto not_a_sig;
-
- termios_printf ("got interrupt %d, sending signal %d", c, sig);
- eat_readahead (-1);
- tc ()->kill_pgrp (sig);
- ti.c_lflag &= ~FLUSHO;
- sawsig = true;
- goto restart_output;
- }
- not_a_sig:
- if (ti.c_iflag & IXON)
- {
- if (CCEQ (ti.c_cc[VSTOP], c))
- {
- if (!tc ()->output_stopped)
- tc ()->output_stopped = true;
- continue;
- }
- else if (CCEQ (ti.c_cc[VSTART], c))
- {
- restart_output:
- tc ()->output_stopped = false;
- continue;
- }
- else if ((ti.c_iflag & IXANY) && tc ()->output_stopped)
- goto restart_output;
- }
- /* Check for special chars */
-
- if (c == '\r')
- {
- if (ti.c_iflag & IGNCR)
- continue;
- if (ti.c_iflag & ICRNL)
- {
- c = '\n';
- set_input_done (iscanon);
- }
- }
- else if (c == '\n')
- {
- if (ti.c_iflag & INLCR)
- c = '\r';
- else
- set_input_done (iscanon);
- }
-
- if (iscanon && ti.c_lflag & IEXTEN && CCEQ (ti.c_cc[VDISCARD], c))
- {
- ti.c_lflag ^= FLUSHO;
- continue;
- }
-
- if (!iscanon)
- /* nothing */;
- else if (CCEQ (ti.c_cc[VERASE], c))
- {
- if (eat_readahead (1))
- echo_erase ();
- continue;
- }
- else if (CCEQ (ti.c_cc[VWERASE], c))
- {
- int ch;
- do
- if (!eat_readahead (1))
- break;
- else
- echo_erase ();
- while ((ch = peek_readahead (1)) >= 0 && !isspace (ch));
- continue;
- }
- else if (CCEQ (ti.c_cc[VKILL], c))
- {
- int nchars = eat_readahead (-1);
- if (ti.c_lflag & ECHO)
- while (nchars--)
- echo_erase (1);
- continue;
- }
- else if (CCEQ (ti.c_cc[VREPRINT], c))
- {
- if (ti.c_lflag & ECHO)
- {
- doecho ("\n\r", 2);
- doecho (rabuf, ralen);
- }
- continue;
- }
- else if (CCEQ (ti.c_cc[VEOF], c))
- {
- termios_printf ("EOF");
- accept_input ();
- ret = line_edit_input_done;
- continue;
- }
- else if (CCEQ (ti.c_cc[VEOL], c) ||
- CCEQ (ti.c_cc[VEOL2], c) ||
- c == '\n')
- {
- set_input_done (1);
- termios_printf ("EOL");
- }
-
- if (ti.c_iflag & IUCLC && isupper (c))
- c = cyg_tolower (c);
-
- put_readahead (c);
- if (ti.c_lflag & ECHO)
- doecho (&c, 1);
- /* Write in chunks of 32 bytes to reduce the number of WriteFile calls
- in non-canonical mode. */
- if ((!iscanon && ralen >= 32) || input_done)
- {
- int status = accept_input ();
- if (status != 1)
- {
- ret = status ? line_edit_error : line_edit_pipe_full;
- nread += ralen;
- break;
- }
- ret = line_edit_input_done;
- input_done = 0;
- }
- }
-
- /* If we didn't write all bytes in non-canonical mode, write them now. */
- if (!iscanon && ralen > 0)
- {
- if (ret == line_edit_ok)
- {
- int status = accept_input ();
- if (status != 1)
- nread += ralen;
- }
- ret = line_edit_input_done;
- }
-
- /* Adding one compensates for the postdecrement in the above loop. */
- if (bytes_read)
- *bytes_read -= (nread + 1);
-
- if (sawsig)
- ret = line_edit_signalled;
-
- return ret;
-}
-
-off_t
-fhandler_termios::lseek (off_t, int)
-{
- set_errno (ESPIPE);
- return -1;
-}
-
-void
-fhandler_termios::sigflush ()
-{
- /* FIXME: Checking get_ttyp() for NULL is not right since it should not
- be NULL while this is alive. However, we can conceivably close a
- ctty while exiting and that will zero this. */
- if ((!have_execed || have_execed_cygwin) && tc ()
- && (tc ()->getpgid () == myself->pgid)
- && !(tc ()->ti.c_lflag & NOFLSH))
- tcflush (TCIFLUSH);
-}
-
-pid_t
-fhandler_termios::tcgetsid ()
-{
- if (myself->ctty > 0 && myself->ctty == tc ()->ntty)
- return tc ()->getsid ();
- set_errno (ENOTTY);
- return -1;
-}
-
-int
-fhandler_termios::ioctl (int cmd, void *varg)
-{
- if (cmd != TIOCSCTTY)
- return 1; /* Not handled by this function */
-
- int arg = (int) (intptr_t) varg;
-
- if (arg != 0 && arg != 1)
- {
- set_errno (EINVAL);
- return -1;
- }
-
- termios_printf ("myself->ctty %d, myself->sid %d, myself->pid %d, arg %d, tc()->getsid () %d\n",
- myself->ctty, myself->sid, myself->pid, arg, tc ()->getsid ());
- if (myself->ctty > 0 || myself->sid != myself->pid || (!arg && tc ()->getsid () > 0))
- {
- set_errno (EPERM);
- return -1;
- }
-
- myself->ctty = -1;
- myself->set_ctty (this, 0);
- return 0;
-}
diff --git a/winsup/cygwin/fhandler_tty.cc b/winsup/cygwin/fhandler_tty.cc
deleted file mode 100644
index 25076810e..000000000
--- a/winsup/cygwin/fhandler_tty.cc
+++ /dev/null
@@ -1,1764 +0,0 @@
-/* fhandler_tty.cc
-
- Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
- 2008, 2009, 2010, 2011, 2012, 2013 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include <stdlib.h>
-#include <sys/param.h>
-#include <cygwin/kd.h>
-#include "cygerrno.h"
-#include "security.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "sigproc.h"
-#include "pinfo.h"
-#include "ntdll.h"
-#include "cygheap.h"
-#include "shared_info.h"
-#include "cygthread.h"
-#include "child_info.h"
-#include <asm/socket.h>
-#include "cygwait.h"
-
-#define close_maybe(h) \
- do { \
- if (h && h != INVALID_HANDLE_VALUE) \
- CloseHandle (h); \
- } while (0)
-
-/* pty master control pipe messages */
-struct pipe_request {
- DWORD pid;
-};
-
-struct pipe_reply {
- HANDLE from_master;
- HANDLE to_master;
- DWORD error;
-};
-
-bool
-bytes_available (DWORD& n, HANDLE h)
-{
- DWORD navail, nleft;
- navail = nleft = 0;
- bool succeeded = PeekNamedPipe (h, NULL, 0, NULL, &navail, &nleft);
- if (succeeded)
- /* nleft should always be the right choice unless something has written 0
- bytes to the pipe. In that pathological case we return the actual number
- of bytes available in the pipe. See cgf-000008 for more details. */
- n = nleft ?: navail;
- else
- {
- termios_printf ("PeekNamedPipe(%p) failed, %E", h);
- n = 0;
- }
- debug_only_printf ("n %u, nleft %u, navail %u", n, nleft, navail);
- return succeeded;
-}
-
-bool
-fhandler_pty_common::bytes_available (DWORD &n)
-{
- return ::bytes_available (n, get_handle ());
-}
-
-#ifdef DEBUGGING
-static class mutex_stack
-{
-public:
- const char *fn;
- int ln;
- const char *tname;
-} ostack[100];
-
-static int osi;
-#endif /*DEBUGGING*/
-
-void
-fhandler_pty_master::flush_to_slave ()
-{
- if (get_readahead_valid () && !(get_ttyp ()->ti.c_lflag & ICANON))
- accept_input ();
-}
-
-DWORD
-fhandler_pty_common::__acquire_output_mutex (const char *fn, int ln,
- DWORD ms)
-{
- if (strace.active ())
- strace.prntf (_STRACE_TERMIOS, fn, "(%d): pty output_mutex (%p): waiting %d ms", ln, output_mutex, ms);
- if (ms == INFINITE)
- ms = 100;
- DWORD res = WaitForSingleObject (output_mutex, ms);
- if (res == WAIT_OBJECT_0)
- {
-#ifndef DEBUGGING
- if (strace.active ())
- strace.prntf (_STRACE_TERMIOS, fn, "(%d): pty output_mutex: acquired", ln, res);
-#else
- ostack[osi].fn = fn;
- ostack[osi].ln = ln;
- ostack[osi].tname = cygthread::name ();
- termios_printf ("acquired for %s:%d, osi %d", fn, ln, osi);
- osi++;
-#endif
- }
- return res;
-}
-
-void
-fhandler_pty_common::__release_output_mutex (const char *fn, int ln)
-{
- if (ReleaseMutex (output_mutex))
- {
-#ifndef DEBUGGING
- if (strace.active ())
- strace.prntf (_STRACE_TERMIOS, fn, "(%d): pty output_mutex(%p) released", ln, output_mutex);
-#else
- if (osi > 0)
- osi--;
- termios_printf ("released(%p) at %s:%d, osi %d", output_mutex, fn, ln, osi);
- termios_printf (" for %s:%d (%s)", ostack[osi].fn, ostack[osi].ln, ostack[osi].tname);
- ostack[osi].ln = -ln;
-#endif
- }
-#ifdef DEBUGGING
- else if (osi > 0)
- {
- system_printf ("couldn't release output mutex but we seem to own it, %E");
- try_to_debug ();
- }
-#endif
-}
-
-/* Process pty input. */
-
-void
-fhandler_pty_master::doecho (const void *str, DWORD len)
-{
- acquire_output_mutex (INFINITE);
- if (!WriteFile (to_master, str, len, &len, NULL))
- termios_printf ("Write to %p failed, %E", to_master);
- release_output_mutex ();
-}
-
-int
-fhandler_pty_master::accept_input ()
-{
- DWORD bytes_left;
- int ret = 1;
-
- WaitForSingleObject (input_mutex, INFINITE);
-
- bytes_left = eat_readahead (-1);
-
- if (!bytes_left)
- {
- termios_printf ("sending EOF to slave");
- get_ttyp ()->read_retval = 0;
- }
- else
- {
- char *p = rabuf;
- DWORD rc;
- DWORD written = 0;
-
- paranoid_printf ("about to write %u chars to slave", bytes_left);
- rc = WriteFile (get_output_handle (), p, bytes_left, &written, NULL);
- if (!rc)
- {
- debug_printf ("error writing to pipe %p %E", get_output_handle ());
- get_ttyp ()->read_retval = -1;
- ret = -1;
- }
- else
- {
- get_ttyp ()->read_retval = 1;
- p += written;
- bytes_left -= written;
- if (bytes_left > 0)
- {
- debug_printf ("to_slave pipe is full");
- puts_readahead (p, bytes_left);
- ret = 0;
- }
- }
- }
-
- SetEvent (input_available_event);
- ReleaseMutex (input_mutex);
- return ret;
-}
-
-bool
-fhandler_pty_master::hit_eof ()
-{
- if (get_ttyp ()->was_opened && !get_ttyp ()->slave_alive ())
- {
- /* We have the only remaining open handle to this pty, and
- the slave pty has been opened at least once. We treat
- this as EOF. */
- termios_printf ("all other handles closed");
- return 1;
- }
- return 0;
-}
-
-/* Process pty output requests */
-
-int
-fhandler_pty_master::process_slave_output (char *buf, size_t len, int pktmode_on)
-{
- size_t rlen;
- char outbuf[OUT_BUFFER_SIZE + 1];
- DWORD n;
- int column = 0;
- int rc = 0;
-
- flush_to_slave ();
-
- if (len == 0)
- goto out;
-
- if (need_nl)
- {
- /* We need to return a left over \n character, resulting from
- \r\n conversion. Note that we already checked for FLUSHO and
- output_stopped at the time that we read the character, so we
- don't check again here. */
- if (buf)
- buf[0] = '\n';
- need_nl = 0;
- rc = 1;
- goto out;
- }
-
- for (;;)
- {
- /* Set RLEN to the number of bytes to read from the pipe. */
- rlen = len;
- if (get_ttyp ()->ti.c_oflag & OPOST && get_ttyp ()->ti.c_oflag & ONLCR)
- {
- /* We are going to expand \n to \r\n, so don't read more than
- half of the number of bytes requested. */
- rlen /= 2;
- if (rlen == 0)
- rlen = 1;
- }
- if (rlen > sizeof outbuf)
- rlen = sizeof outbuf;
-
- n = 0;
- for (;;)
- {
- if (!bytes_available (n))
- goto err;
- if (n)
- break;
- if (hit_eof ())
- goto out;
- /* DISCARD (FLUSHO) and tcflush can finish here. */
- if ((get_ttyp ()->ti.c_lflag & FLUSHO || !buf))
- goto out;
-
- if (is_nonblocking ())
- {
- set_errno (EAGAIN);
- rc = -1;
- goto out;
- }
- pthread_testcancel ();
- if (cygwait (NULL, 10, cw_sig_eintr) == WAIT_SIGNALED
- && !_my_tls.call_signal_handler ())
- {
- set_errno (EINTR);
- rc = -1;
- goto out;
- }
- flush_to_slave ();
- }
-
- if (!ReadFile (get_handle (), outbuf, rlen, &n, NULL))
- {
- termios_printf ("ReadFile failed, %E");
- goto err;
- }
-
- termios_printf ("bytes read %u", n);
- get_ttyp ()->write_error = 0;
-
- if (get_ttyp ()->ti.c_lflag & FLUSHO || !buf)
- continue;
-
- char *optr;
- optr = buf;
- if (pktmode_on)
- *optr++ = TIOCPKT_DATA;
-
- if (!(get_ttyp ()->ti.c_oflag & OPOST)) // post-process output
- {
- memcpy (optr, outbuf, n);
- optr += n;
- }
- else // raw output mode
- {
- char *iptr = outbuf;
-
- while (n--)
- {
- switch (*iptr)
- {
- case '\r':
- if ((get_ttyp ()->ti.c_oflag & ONOCR) && column == 0)
- {
- iptr++;
- continue;
- }
- if (get_ttyp ()->ti.c_oflag & OCRNL)
- *iptr = '\n';
- else
- column = 0;
- break;
- case '\n':
- if (get_ttyp ()->ti.c_oflag & ONLCR)
- {
- *optr++ = '\r';
- column = 0;
- }
- if (get_ttyp ()->ti.c_oflag & ONLRET)
- column = 0;
- break;
- default:
- column++;
- break;
- }
-
- /* Don't store data past the end of the user's buffer. This
- can happen if the user requests a read of 1 byte when
- doing \r\n expansion. */
- if (optr - buf >= (int) len)
- {
- if (*iptr != '\n' || n != 0)
- system_printf ("internal error: %u unexpected characters", n);
- need_nl = 1;
- break;
- }
-
- *optr++ = *iptr++;
- }
- }
- rc = optr - buf;
- break;
-
- err:
- if (GetLastError () == ERROR_BROKEN_PIPE)
- rc = 0;
- else
- {
- __seterrno ();
- rc = -1;
- }
- break;
- }
-
-out:
- termios_printf ("returning %d", rc);
- return rc;
-}
-
-/* pty slave stuff */
-
-fhandler_pty_slave::fhandler_pty_slave (int unit)
- : fhandler_pty_common (), inuse (NULL)
-{
- if (unit >= 0)
- dev ().parse (DEV_PTYS_MAJOR, unit);
-}
-
-int
-fhandler_pty_slave::open (int flags, mode_t)
-{
- HANDLE pty_owner, from_master_local, to_master_local;
- HANDLE *handles[] =
- {
- &from_master_local, &input_available_event, &input_mutex, &inuse,
- &output_mutex, &to_master_local, &pty_owner,
- NULL
- };
-
- for (HANDLE **h = handles; *h; h++)
- **h = NULL;
-
- _tc = cygwin_shared->tty[get_minor ()];
-
- tcinit (false);
-
- cygwin_shared->tty.attach (get_minor ());
-
- /* Create synchronisation events */
- char buf[MAX_PATH];
-
- const char *errmsg = NULL;
-
- if (!(output_mutex = get_ttyp ()->open_output_mutex (MAXIMUM_ALLOWED)))
- {
- errmsg = "open output mutex failed, %E";
- goto err;
- }
- if (!(input_mutex = get_ttyp ()->open_input_mutex (MAXIMUM_ALLOWED)))
- {
- errmsg = "open input mutex failed, %E";
- goto err;
- }
- shared_name (buf, INPUT_AVAILABLE_EVENT, get_minor ());
- if (!(input_available_event = OpenEvent (MAXIMUM_ALLOWED, TRUE, buf)))
- {
- errmsg = "open input event failed, %E";
- goto err;
- }
-
- /* FIXME: Needs a method to eliminate tty races */
- {
- /* Create security attribute. Default permissions are 0620. */
- security_descriptor sd;
- sd.malloc (sizeof (SECURITY_DESCRIPTOR));
- RtlCreateSecurityDescriptor (sd, SECURITY_DESCRIPTOR_REVISION);
- SECURITY_ATTRIBUTES sa = { sizeof (SECURITY_ATTRIBUTES), NULL, TRUE };
- if (!create_object_sd_from_attribute (NULL, myself->uid, myself->gid,
- S_IFCHR | S_IRUSR | S_IWUSR | S_IWGRP,
- sd))
- sa.lpSecurityDescriptor = (PSECURITY_DESCRIPTOR) sd;
- acquire_output_mutex (INFINITE);
- inuse = get_ttyp ()->create_inuse (&sa);
- get_ttyp ()->was_opened = true;
- release_output_mutex ();
- }
-
- if (!get_ttyp ()->from_master () || !get_ttyp ()->to_master ())
- {
- errmsg = "pty handles have been closed";
- set_errno (EACCES);
- goto err_no_errno;
- }
-
- if (get_ttyp ()->is_master_closed ())
- {
- errmsg = "*** master is closed";
- set_errno (EAGAIN);
- goto err_no_errno;
- }
- /* Three case for duplicating the pipe handles:
- - Either we're the master. In this case, just duplicate the handles.
- - Or, we have the right to open the master process for handle duplication.
- In this case, just duplicate the handles.
- - Or, we have to ask the master process itself. In this case, send our
- pid to the master process and check the reply. The reply contains
- either the handles, or an error code which tells us why we didn't
- get the handles. */
- if (myself->pid == get_ttyp ()->master_pid)
- {
- /* This is the most common case, just calling openpty. */
- termios_printf ("dup handles within myself.");
- pty_owner = GetCurrentProcess ();
- }
- else
- {
- pinfo p (get_ttyp ()->master_pid);
- if (!p)
- termios_printf ("*** couldn't find pty master");
- else
- {
- pty_owner = OpenProcess (PROCESS_DUP_HANDLE, FALSE, p->dwProcessId);
- if (pty_owner)
- termios_printf ("dup handles directly since I'm the owner");
- }
- }
- if (pty_owner)
- {
- if (!DuplicateHandle (pty_owner, get_ttyp ()->from_master (),
- GetCurrentProcess (), &from_master_local, 0, TRUE,
- DUPLICATE_SAME_ACCESS))
- {
- termios_printf ("can't duplicate input from %u/%p, %E",
- get_ttyp ()->master_pid, get_ttyp ()->from_master ());
- __seterrno ();
- goto err_no_msg;
- }
- if (!DuplicateHandle (pty_owner, get_ttyp ()->to_master (),
- GetCurrentProcess (), &to_master_local, 0, TRUE,
- DUPLICATE_SAME_ACCESS))
- {
- errmsg = "can't duplicate output, %E";
- goto err;
- }
- if (pty_owner != GetCurrentProcess ())
- CloseHandle (pty_owner);
- }
- else
- {
- pipe_request req = { GetCurrentProcessId () };
- pipe_reply repl;
- DWORD len;
-
- __small_sprintf (buf, "\\\\.\\pipe\\cygwin-%S-pty%d-master-ctl",
- &cygheap->installation_key, get_minor ());
- termios_printf ("dup handles via master control pipe %s", buf);
- if (!CallNamedPipe (buf, &req, sizeof req, &repl, sizeof repl,
- &len, 500))
- {
- errmsg = "can't call master, %E";
- goto err;
- }
- from_master_local = repl.from_master;
- to_master_local = repl.to_master;
- if (!from_master_local || !to_master_local)
- {
- SetLastError (repl.error);
- errmsg = "error duplicating pipes, %E";
- goto err;
- }
- }
- VerifyHandle (from_master_local);
- VerifyHandle (to_master_local);
-
- termios_printf ("duplicated from_master %p->%p from pty_owner",
- get_ttyp ()->from_master (), from_master_local);
- termios_printf ("duplicated to_master %p->%p from pty_owner",
- get_ttyp ()->to_master (), to_master_local);
-
- set_io_handle (from_master_local);
- set_output_handle (to_master_local);
-
- fhandler_console::need_invisible ();
- set_open_status ();
- return 1;
-
-err:
- if (GetLastError () == ERROR_FILE_NOT_FOUND)
- set_errno (ENXIO);
- else
- __seterrno ();
-err_no_errno:
- termios_printf (errmsg);
-err_no_msg:
- for (HANDLE **h = handles; *h; h++)
- if (**h && **h != INVALID_HANDLE_VALUE)
- CloseHandle (**h);
- return 0;
-}
-
-void
-fhandler_pty_slave::open_setup (int flags)
-{
- set_flags ((flags & ~O_TEXT) | O_BINARY);
- myself->set_ctty (this, flags);
- report_tty_counts (this, "opened", "");
- fhandler_base::open_setup (flags);
-}
-
-void
-fhandler_pty_slave::cleanup ()
-{
- /* This used to always call fhandler_pty_common::close when we were execing
- but that caused multiple closes of the handles associated with this pty.
- Since close_all_files is not called until after the cygwin process has
- synced or before a non-cygwin process has exited, it should be safe to
- just close this normally. cgf 2006-05-20 */
- report_tty_counts (this, "closed", "");
- fhandler_base::cleanup ();
-}
-
-int
-fhandler_pty_slave::close ()
-{
- termios_printf ("closing last open %s handle", ttyname ());
- if (inuse && !CloseHandle (inuse))
- termios_printf ("CloseHandle (inuse), %E");
- if (!ForceCloseHandle (input_available_event))
- termios_printf ("CloseHandle (input_available_event<%p>), %E", input_available_event);
- if ((unsigned) myself->ctty == FHDEV (DEV_PTYS_MAJOR, get_minor ()))
- fhandler_console::free_console (); /* assumes that we are the last pty closer */
- return fhandler_pty_common::close ();
-}
-
-int
-fhandler_pty_slave::init (HANDLE h, DWORD a, mode_t)
-{
- int flags = 0;
-
- a &= GENERIC_READ | GENERIC_WRITE;
- if (a == GENERIC_READ)
- flags = O_RDONLY;
- if (a == GENERIC_WRITE)
- flags = O_WRONLY;
- if (a == (GENERIC_READ | GENERIC_WRITE))
- flags = O_RDWR;
-
- int ret = open_with_arch (flags);
-
- if (ret && !cygwin_finished_initializing && !being_debugged ())
- {
- /* This only occurs when called from dtable::init_std_file_from_handle
- We have been started from a non-Cygwin process. So we should become
- pty process group leader.
- TODO: Investigate how SIGTTIN should be handled with pure-windows
- programs. */
- pinfo p (tc ()->getpgid ());
- /* We should only grab this when the process group owner for this
- pty is a non-cygwin process or we've been started directly
- from a non-Cygwin process with no Cygwin ancestry. */
- if (!p || ISSTATE (p, PID_NOTCYGWIN))
- {
- termios_printf ("Setting process group leader to %d since %W(%d) is not a cygwin process",
- myself->pgid, p->progname, p->pid);
- tc ()->setpgid (myself->pgid);
- }
- }
-
- if (h != INVALID_HANDLE_VALUE)
- CloseHandle (h); /* Reopened by open */
-
- return ret;
-}
-
-ssize_t __stdcall
-fhandler_pty_slave::write (const void *ptr, size_t len)
-{
- DWORD n;
- ssize_t towrite = len;
-
- bg_check_types bg = bg_check (SIGTTOU);
- if (bg <= bg_eof)
- return (ssize_t) bg;
-
- termios_printf ("pty%d, write(%p, %lu)", get_minor (), ptr, len);
-
- push_process_state process_state (PID_TTYOU);
-
- while (len)
- {
- n = MIN (OUT_BUFFER_SIZE, len);
- char *buf = (char *)ptr;
- ptr = (char *) ptr + n;
- len -= n;
-
- while (tc ()->output_stopped)
- cygwait (10);
- acquire_output_mutex (INFINITE);
-
- /* Previous write may have set write_error to != 0. Check it here.
- This is less than optimal, but the alternative slows down pty
- writes enormously. */
- if (get_ttyp ()->write_error)
- {
- set_errno (get_ttyp ()->write_error);
- towrite = -1;
- get_ttyp ()->write_error = 0;
- release_output_mutex ();
- break;
- }
-
- BOOL res = WriteFile (get_output_handle (), buf, n, &n, NULL);
- release_output_mutex ();
- if (!res)
- {
- DWORD err = GetLastError ();
- termios_printf ("WriteFile failed, %E");
- switch (err)
- {
- case ERROR_NO_DATA:
- err = ERROR_IO_DEVICE;
- default:
- __seterrno_from_win_error (err);
- }
- raise (SIGHUP); /* FIXME: Should this be SIGTTOU? */
- towrite = -1;
- break;
- }
- }
- return towrite;
-}
-
-void __reg3
-fhandler_pty_slave::read (void *ptr, size_t& len)
-{
- ssize_t totalread = 0;
- int vmin = 0;
- int vtime = 0; /* Initialized to prevent -Wuninitialized warning */
- size_t readlen;
- DWORD bytes_in_pipe;
- char buf[INP_BUFFER_SIZE];
- DWORD time_to_wait;
-
- bg_check_types bg = bg_check (SIGTTIN);
- if (bg <= bg_eof)
- {
- len = (size_t) bg;
- return;
- }
-
- termios_printf ("read(%p, %lu) handle %p", ptr, len, get_handle ());
-
- push_process_state process_state (PID_TTYIN);
-
- if (is_nonblocking () || !ptr) /* Indicating tcflush(). */
- time_to_wait = 0;
- else if ((get_ttyp ()->ti.c_lflag & ICANON))
- time_to_wait = INFINITE;
- else
- {
- vmin = get_ttyp ()->ti.c_cc[VMIN];
- if (vmin > INP_BUFFER_SIZE)
- vmin = INP_BUFFER_SIZE;
- vtime = get_ttyp ()->ti.c_cc[VTIME];
- if (vmin < 0)
- vmin = 0;
- if (vtime < 0)
- vtime = 0;
- if (!vmin && !vtime)
- time_to_wait = 0;
- else
- time_to_wait = !vtime ? INFINITE : 100 * vtime;
- }
-
- while (len)
- {
- switch (cygwait (input_available_event, time_to_wait))
- {
- case WAIT_OBJECT_0:
- if (get_ttyp ()->is_master_closed ())
- {
- raise (SIGHUP);
- totalread = 0;
- goto out;
- }
- break;
- case WAIT_SIGNALED:
- if (totalread > 0)
- goto out;
- termios_printf ("wait catched signal");
- set_sig_errno (EINTR);
- totalread = -1;
- goto out;
- case WAIT_CANCELED:
- process_state.pop ();
- pthread::static_cancel_self ();
- /*NOTREACHED*/
- case WAIT_TIMEOUT:
- termios_printf ("wait timed out, time_to_wait %u", time_to_wait);
- if (!totalread)
- {
- set_sig_errno (EAGAIN);
- totalread = -1;
- }
- goto out;
- default:
- termios_printf ("wait for input event failed, %E");
- if (!totalread)
- {
- __seterrno ();
- totalread = -1;
- }
- goto out;
- }
- /* Now that we know that input is available we have to grab the
- input mutex. */
- switch (cygwait (input_mutex, 1000))
- {
- case WAIT_OBJECT_0:
- case WAIT_ABANDONED_0:
- break;
- case WAIT_SIGNALED:
- if (totalread > 0)
- goto out;
- termios_printf ("wait for mutex caught signal");
- set_sig_errno (EINTR);
- totalread = -1;
- goto out;
- case WAIT_CANCELED:
- process_state.pop ();
- pthread::static_cancel_self ();
- /*NOTREACHED*/
- case WAIT_TIMEOUT:
- termios_printf ("failed to acquire input mutex after input event "
- "arrived");
- /* If we have a timeout, we can simply handle this failure to
- grab the mutex as an EAGAIN situation. Otherwise, if this
- is an infinitely blocking read, restart the loop. */
- if (time_to_wait != INFINITE)
- {
- if (!totalread)
- {
- set_sig_errno (EAGAIN);
- totalread = -1;
- }
- goto out;
- }
- continue;
- default:
- termios_printf ("wait for input mutex failed, %E");
- if (!totalread)
- {
- __seterrno ();
- totalread = -1;
- }
- goto out;
- }
- if (!bytes_available (bytes_in_pipe))
- raise (SIGHUP);
-
- /* On first peek determine no. of bytes to flush. */
- if (!ptr && len == UINT_MAX)
- len = (size_t) bytes_in_pipe;
-
- if (ptr && !bytes_in_pipe && !vmin && !time_to_wait)
- {
- ReleaseMutex (input_mutex);
- len = (size_t) bytes_in_pipe;
- return;
- }
-
- readlen = MIN (bytes_in_pipe, MIN (len, sizeof (buf)));
-
-#if 0
- /* Why on earth is the read length reduced to vmin, even if more bytes
- are available *and* len is bigger *and* the local buf is big enough?
- Disable this code for now, it looks like a remnant of old. */
- if (ptr && vmin && readlen > (unsigned) vmin)
- readlen = vmin;
-#endif
-
- DWORD n = 0;
- if (readlen)
- {
- termios_printf ("reading %lu bytes (vtime %d)", readlen, vtime);
- if (!ReadFile (get_handle (), buf, readlen, &n, NULL))
- {
- termios_printf ("read failed, %E");
- raise (SIGHUP);
- bytes_in_pipe = 0;
- ptr = NULL;
- }
- else
- {
- /* MSDN states that 5th prameter can be used to determine total
- number of bytes in pipe, but for some reason this number doesn't
- change after successful read. So we have to peek into the pipe
- again to see if input is still available */
- if (!bytes_available (bytes_in_pipe))
- raise (SIGHUP);
- if (n)
- {
- len -= n;
- totalread += n;
- if (ptr)
- {
- memcpy (ptr, buf, n);
- ptr = (char *) ptr + n;
- }
- }
- }
- }
-
- if (!bytes_in_pipe)
- ResetEvent (input_available_event);
-
- ReleaseMutex (input_mutex);
-
- if (!ptr)
- {
- if (!bytes_in_pipe)
- break;
- continue;
- }
-
- if (get_ttyp ()->read_retval < 0) // read error
- {
- set_errno (-get_ttyp ()->read_retval);
- totalread = -1;
- break;
- }
- if (get_ttyp ()->read_retval == 0) //EOF
- {
- termios_printf ("saw EOF");
- break;
- }
- if (get_ttyp ()->ti.c_lflag & ICANON || is_nonblocking ())
- break;
- if (vmin && totalread >= vmin)
- break;
-
- /* vmin == 0 && vtime == 0:
- * we've already read all input, if any, so return immediately
- * vmin == 0 && vtime > 0:
- * we've waited for input 10*vtime ms in WFSO(input_available_event),
- * no matter whether any input arrived, we shouldn't wait any longer,
- * so return immediately
- * vmin > 0 && vtime == 0:
- * here, totalread < vmin, so continue waiting until more data
- * arrive
- * vmin > 0 && vtime > 0:
- * similar to the previous here, totalread < vmin, and timer
- * hadn't expired -- WFSO(input_available_event) != WAIT_TIMEOUT,
- * so "restart timer" and wait until more data arrive
- */
-
- if (vmin == 0)
- break;
- }
-out:
- termios_printf ("%d=read(%p, %lu)", totalread, ptr, len);
- len = (size_t) totalread;
-}
-
-int
-fhandler_pty_slave::dup (fhandler_base *child, int flags)
-{
- /* This code was added in Oct 2001 for some undisclosed reason.
- However, setting the controlling tty on a dup causes rxvt to
- hang when the parent does a dup since the controlling pgid changes.
- Specifically testing for -2 (ctty has been setsid'ed) works around
- this problem. However, it's difficult to see scenarios in which you
- have a dup'able fd, no controlling tty, and not having run setsid.
- So, we might want to consider getting rid of the set_ctty in tty-like dup
- methods entirely at some point */
- if (myself->ctty != -2)
- myself->set_ctty (this, flags);
- report_tty_counts (child, "duped slave", "");
- return 0;
-}
-
-int
-fhandler_pty_master::dup (fhandler_base *child, int)
-{
- report_tty_counts (child, "duped master", "");
- return 0;
-}
-
-int
-fhandler_pty_slave::tcgetattr (struct termios *t)
-{
- *t = get_ttyp ()->ti;
- return 0;
-}
-
-int
-fhandler_pty_slave::tcsetattr (int, const struct termios *t)
-{
- acquire_output_mutex (INFINITE);
- get_ttyp ()->ti = *t;
- release_output_mutex ();
- return 0;
-}
-
-int
-fhandler_pty_slave::tcflush (int queue)
-{
- int ret = 0;
-
- termios_printf ("tcflush(%d) handle %p", queue, get_handle ());
-
- if (queue == TCIFLUSH || queue == TCIOFLUSH)
- {
- size_t len = UINT_MAX;
- read (NULL, len);
- ret = ((int) len) >= 0 ? 0 : -1;
- }
- if (queue == TCOFLUSH || queue == TCIOFLUSH)
- {
- /* do nothing for now. */
- }
-
- termios_printf ("%d=tcflush(%d)", ret, queue);
- return ret;
-}
-
-int
-fhandler_pty_slave::ioctl (unsigned int cmd, void *arg)
-{
- termios_printf ("ioctl (%x)", cmd);
- int res = fhandler_termios::ioctl (cmd, arg);
- if (res <= 0)
- return res;
-
- if (myself->pgid && get_ttyp ()->getpgid () != myself->pgid
- && (unsigned) myself->ctty == FHDEV (DEV_PTYS_MAJOR, get_minor ())
- && (get_ttyp ()->ti.c_lflag & TOSTOP))
- {
- /* background process */
- termios_printf ("bg ioctl pgid %d, tpgid %d, %s", myself->pgid,
- get_ttyp ()->getpgid (), myctty ());
- raise (SIGTTOU);
- }
-
- int retval;
- switch (cmd)
- {
- case TIOCGWINSZ:
- case TIOCSWINSZ:
- break;
- case TIOCGPGRP:
- {
- pid_t pid = this->tcgetpgrp ();
- if (pid < 0)
- retval = -1;
- else
- {
- *((pid_t *) arg) = pid;
- retval = 0;
- }
- }
- goto out;
- case TIOCSPGRP:
- retval = this->tcsetpgrp ((pid_t) (intptr_t) arg);
- goto out;
- case FIONREAD:
- {
- DWORD n;
- if (!bytes_available (n))
- {
- set_errno (EINVAL);
- retval = -1;
- }
- else
- {
- *(int *) arg = (int) n;
- retval = 0;
- }
- }
- goto out;
- default:
- return fhandler_base::ioctl (cmd, arg);
- }
-
- acquire_output_mutex (INFINITE);
-
- get_ttyp ()->cmd = cmd;
- get_ttyp ()->ioctl_retval = 0;
- switch (cmd)
- {
- case TIOCGWINSZ:
- get_ttyp ()->arg.winsize = get_ttyp ()->winsize;
- *(struct winsize *) arg = get_ttyp ()->arg.winsize;
- get_ttyp ()->winsize = get_ttyp ()->arg.winsize;
- break;
- case TIOCSWINSZ:
- if (get_ttyp ()->winsize.ws_row != ((struct winsize *) arg)->ws_row
- || get_ttyp ()->winsize.ws_col != ((struct winsize *) arg)->ws_col)
- {
- get_ttyp ()->arg.winsize = *(struct winsize *) arg;
- get_ttyp ()->winsize = *(struct winsize *) arg;
- get_ttyp ()->kill_pgrp (SIGWINCH);
- }
- break;
- }
-
- release_output_mutex ();
- retval = get_ttyp ()->ioctl_retval;
- if (retval < 0)
- {
- set_errno (-retval);
- retval = -1;
- }
-
-out:
- termios_printf ("%d = ioctl(%x)", retval, cmd);
- return retval;
-}
-
-int __reg2
-fhandler_pty_slave::fstat (struct stat *st)
-{
- fhandler_base::fstat (st);
-
- bool to_close = false;
- if (!input_available_event)
- {
- char buf[MAX_PATH];
- shared_name (buf, INPUT_AVAILABLE_EVENT, get_minor ());
- input_available_event = OpenEvent (READ_CONTROL, TRUE, buf);
- if (input_available_event)
- to_close = true;
- }
- if (!input_available_event
- || get_object_attribute (input_available_event, &st->st_uid, &st->st_gid,
- &st->st_mode))
- {
- /* If we can't access the ACL, or if the tty doesn't actually exist,
- then fake uid and gid to strict, system-like values. */
- st->st_mode = S_IFCHR | S_IRUSR | S_IWUSR;
- st->st_uid = 18;
- st->st_gid = 544;
- }
- if (to_close)
- CloseHandle (input_available_event);
- return 0;
-}
-
-/* Helper function for fchmod and fchown, which just opens all handles
- and signals success via bool return. */
-bool
-fhandler_pty_slave::fch_open_handles (bool chown)
-{
- char buf[MAX_PATH];
- DWORD write_access = WRITE_DAC | (chown ? WRITE_OWNER : 0);
-
- _tc = cygwin_shared->tty[get_minor ()];
- shared_name (buf, INPUT_AVAILABLE_EVENT, get_minor ());
- input_available_event = OpenEvent (READ_CONTROL | write_access,
- TRUE, buf);
- output_mutex = get_ttyp ()->open_output_mutex (write_access);
- input_mutex = get_ttyp ()->open_input_mutex (write_access);
- inuse = get_ttyp ()->open_inuse (write_access);
- if (!input_available_event || !output_mutex || !input_mutex || !inuse)
- {
- __seterrno ();
- return false;
- }
- return true;
-}
-
-/* Helper function for fchmod and fchown, which sets the new security
- descriptor on all objects representing the pty. */
-int
-fhandler_pty_slave::fch_set_sd (security_descriptor &sd, bool chown)
-{
- security_descriptor sd_old;
-
- get_object_sd (input_available_event, sd_old);
- if (!set_object_sd (input_available_event, sd, chown)
- && !set_object_sd (output_mutex, sd, chown)
- && !set_object_sd (input_mutex, sd, chown)
- && !set_object_sd (inuse, sd, chown))
- return 0;
- set_object_sd (input_available_event, sd_old, chown);
- set_object_sd (output_mutex, sd_old, chown);
- set_object_sd (input_mutex, sd_old, chown);
- set_object_sd (inuse, sd_old, chown);
- return -1;
-}
-
-/* Helper function for fchmod and fchown, which closes all object handles in
- the pty. */
-void
-fhandler_pty_slave::fch_close_handles ()
-{
- close_maybe (get_io_handle ());
- close_maybe (get_output_handle ());
- close_maybe (input_available_event);
- close_maybe (output_mutex);
- close_maybe (input_mutex);
- close_maybe (inuse);
-}
-
-int __reg1
-fhandler_pty_slave::fchmod (mode_t mode)
-{
- int ret = -1;
- bool to_close = false;
- security_descriptor sd;
- uid_t uid;
- gid_t gid;
-
- if (!input_available_event)
- {
- to_close = true;
- if (!fch_open_handles (false))
- goto errout;
- }
- sd.malloc (sizeof (SECURITY_DESCRIPTOR));
- RtlCreateSecurityDescriptor (sd, SECURITY_DESCRIPTOR_REVISION);
- if (!get_object_attribute (input_available_event, &uid, &gid, NULL)
- && !create_object_sd_from_attribute (NULL, uid, gid, S_IFCHR | mode, sd))
- ret = fch_set_sd (sd, false);
-errout:
- if (to_close)
- fch_close_handles ();
- return ret;
-}
-
-int __reg2
-fhandler_pty_slave::fchown (uid_t uid, gid_t gid)
-{
- int ret = -1;
- bool to_close = false;
- mode_t mode = 0;
- uid_t o_uid;
- gid_t o_gid;
- security_descriptor sd;
-
- if (uid == ILLEGAL_UID && gid == ILLEGAL_GID)
- return 0;
- if (!input_available_event)
- {
- to_close = true;
- if (!fch_open_handles (true))
- goto errout;
- }
- sd.malloc (sizeof (SECURITY_DESCRIPTOR));
- RtlCreateSecurityDescriptor (sd, SECURITY_DESCRIPTOR_REVISION);
- if (!get_object_attribute (input_available_event, &o_uid, &o_gid, &mode))
- {
- if ((uid == ILLEGAL_UID || uid == o_uid)
- && (gid == ILLEGAL_GID || gid == o_gid))
- ret = 0;
- else if (!create_object_sd_from_attribute (input_available_event,
- uid, gid, S_IFCHR | mode, sd))
- ret = fch_set_sd (sd, true);
- }
-errout:
- if (to_close)
- fch_close_handles ();
- return ret;
-}
-
-/*******************************************************
- fhandler_pty_master
-*/
-fhandler_pty_master::fhandler_pty_master (int unit)
- : fhandler_pty_common (), pktmode (0), master_ctl (NULL),
- master_thread (NULL), from_master (NULL), to_master (NULL),
- dwProcessId (0), need_nl (0)
-{
- if (unit >= 0)
- dev ().parse (DEV_PTYM_MAJOR, unit);
- else if (!setup ())
- {
- dev ().parse (FH_ERROR);
- return;
- }
- set_name ("/dev/ptmx");
-}
-
-int
-fhandler_pty_master::open (int flags, mode_t)
-{
- set_open_status ();
- dwProcessId = GetCurrentProcessId ();
- return 1;
-}
-
-void
-fhandler_pty_master::open_setup (int flags)
-{
- set_flags ((flags & ~O_TEXT) | O_BINARY);
- char buf[sizeof ("opened pty master for ptyNNNNNNNNNNN")];
- __small_sprintf (buf, "opened pty master for pty%d", get_minor ());
- report_tty_counts (this, buf, "");
- fhandler_base::open_setup (flags);
-}
-
-off_t
-fhandler_pty_common::lseek (off_t, int)
-{
- set_errno (ESPIPE);
- return -1;
-}
-
-int
-fhandler_pty_common::close ()
-{
- termios_printf ("pty%d <%p,%p> closing", get_minor (), get_handle (), get_output_handle ());
- if (!ForceCloseHandle (input_mutex))
- termios_printf ("CloseHandle (input_mutex<%p>), %E", input_mutex);
- if (!ForceCloseHandle (output_mutex))
- termios_printf ("CloseHandle (output_mutex<%p>), %E", output_mutex);
- if (!ForceCloseHandle1 (get_handle (), from_pty))
- termios_printf ("CloseHandle (get_handle ()<%p>), %E", get_handle ());
- if (!ForceCloseHandle1 (get_output_handle (), to_pty))
- termios_printf ("CloseHandle (get_output_handle ()<%p>), %E", get_output_handle ());
-
- return 0;
-}
-
-void
-fhandler_pty_master::cleanup ()
-{
- report_tty_counts (this, "closing master", "");
- if (archetype)
- from_master = to_master = NULL;
- fhandler_base::cleanup ();
-}
-
-int
-fhandler_pty_master::close ()
-{
- termios_printf ("closing from_master(%p)/to_master(%p) since we own them(%u)",
- from_master, to_master, dwProcessId);
- if (cygwin_finished_initializing)
- {
- if (master_ctl && get_ttyp ()->master_pid == myself->pid)
- {
- char buf[MAX_PATH];
- pipe_request req = { (DWORD) -1 };
- pipe_reply repl;
- DWORD len;
-
- __small_sprintf (buf, "\\\\.\\pipe\\cygwin-%S-pty%d-master-ctl",
- &cygheap->installation_key, get_minor ());
- CallNamedPipe (buf, &req, sizeof req, &repl, sizeof repl, &len, 500);
- CloseHandle (master_ctl);
- master_thread->detach ();
- }
- }
-
- if (!ForceCloseHandle (from_master))
- termios_printf ("error closing from_master %p, %E", from_master);
- if (!ForceCloseHandle (to_master))
- termios_printf ("error closing from_master %p, %E", to_master);
- from_master = to_master = NULL;
-
- fhandler_pty_common::close ();
-
- if (have_execed || get_ttyp ()->master_pid != myself->pid)
- termios_printf ("not clearing: %d, master_pid %d", have_execed, get_ttyp ()->master_pid);
- else
- {
- get_ttyp ()->set_master_closed ();
- SetEvent (input_available_event);
- }
- if (!ForceCloseHandle (input_available_event))
- termios_printf ("CloseHandle (input_available_event<%p>), %E", input_available_event);
-
- return 0;
-}
-
-ssize_t __stdcall
-fhandler_pty_master::write (const void *ptr, size_t len)
-{
- ssize_t ret;
- char *p = (char *) ptr;
- termios ti = tc ()->ti;
-
- bg_check_types bg = bg_check (SIGTTOU);
- if (bg <= bg_eof)
- return (ssize_t) bg;
-
- push_process_state process_state (PID_TTYOU);
- line_edit_status status = line_edit (p++, len, ti, &ret);
- if (status > line_edit_signalled && status != line_edit_pipe_full)
- ret = -1;
- return ret;
-}
-
-void __reg3
-fhandler_pty_master::read (void *ptr, size_t& len)
-{
- bg_check_types bg = bg_check (SIGTTIN);
- if (bg <= bg_eof)
- {
- len = (size_t) bg;
- return;
- }
- push_process_state process_state (PID_TTYIN);
- len = (size_t) process_slave_output ((char *) ptr, len, pktmode);
-}
-
-int
-fhandler_pty_master::tcgetattr (struct termios *t)
-{
- *t = cygwin_shared->tty[get_minor ()]->ti;
- return 0;
-}
-
-int
-fhandler_pty_master::tcsetattr (int, const struct termios *t)
-{
- cygwin_shared->tty[get_minor ()]->ti = *t;
- return 0;
-}
-
-int
-fhandler_pty_master::tcflush (int queue)
-{
- int ret = 0;
-
- termios_printf ("tcflush(%d) handle %p", queue, get_handle ());
-
- if (queue == TCIFLUSH || queue == TCIOFLUSH)
- ret = process_slave_output (NULL, OUT_BUFFER_SIZE, 0);
- else if (queue == TCIFLUSH || queue == TCIOFLUSH)
- {
- /* do nothing for now. */
- }
-
- termios_printf ("%d=tcflush(%d)", ret, queue);
- return ret;
-}
-
-int
-fhandler_pty_master::ioctl (unsigned int cmd, void *arg)
-{
- int res = fhandler_termios::ioctl (cmd, arg);
- if (res <= 0)
- return res;
-
- switch (cmd)
- {
- case TIOCPKT:
- pktmode = *(int *) arg;
- break;
- case TIOCGWINSZ:
- *(struct winsize *) arg = get_ttyp ()->winsize;
- break;
- case TIOCSWINSZ:
- if (get_ttyp ()->winsize.ws_row != ((struct winsize *) arg)->ws_row
- || get_ttyp ()->winsize.ws_col != ((struct winsize *) arg)->ws_col)
- {
- get_ttyp ()->winsize = *(struct winsize *) arg;
- get_ttyp ()->kill_pgrp (SIGWINCH);
- }
- break;
- case TIOCGPGRP:
- *((pid_t *) arg) = this->tcgetpgrp ();
- break;
- case TIOCSPGRP:
- return this->tcsetpgrp ((pid_t) (intptr_t) arg);
- case FIONREAD:
- {
- DWORD n;
- if (!::bytes_available (n, to_master))
- {
- set_errno (EINVAL);
- return -1;
- }
- *(int *) arg = (int) n;
- }
- break;
- default:
- return fhandler_base::ioctl (cmd, arg);
- }
- return 0;
-}
-
-int
-fhandler_pty_master::ptsname_r (char *buf, size_t buflen)
-{
- char tmpbuf[TTY_NAME_MAX];
-
- __ptsname (tmpbuf, get_minor ());
- if (buflen <= strlen (tmpbuf))
- {
- set_errno (ERANGE);
- return ERANGE;
- }
- strcpy (buf, tmpbuf);
- return 0;
-}
-
-void
-fhandler_pty_common::set_close_on_exec (bool val)
-{
- // Cygwin processes will handle this specially on exec.
- close_on_exec (val);
-}
-
-void
-fhandler_pty_slave::fixup_after_fork (HANDLE parent)
-{
- // fork_fixup (parent, inuse, "inuse");
- // fhandler_pty_common::fixup_after_fork (parent);
- report_tty_counts (this, "inherited", "");
-}
-
-void
-fhandler_pty_slave::fixup_after_exec ()
-{
- if (!close_on_exec ())
- fixup_after_fork (NULL);
-}
-
-/* This thread function handles the master control pipe. It waits for a
- client to connect. Then it checks if the client process has permissions
- to access the tty handles. If so, it opens the client process and
- duplicates the handles into that process. If that fails, it sends a reply
- with at least one handle set to NULL and an error code. Last but not
- least, the client is disconnected and the thread waits for the next client.
-
- A special case is when the master side of the tty is about to be closed.
- The client side is the fhandler_pty_master::close function and it sends
- a PID -1 in that case. On Vista and later a check is performed that the
- request to leave really comes from the master process itself. On earlier
- OSes there's no function to check for the PID of the client process so
- we have to trust the client side.
-
- Since there's always only one pipe instance, there's a chance that clients
- have to wait to connect to the master control pipe. Therefore the client
- calls to CallNamedPipe should have a big enough timeout value. For now this
- is 500ms. Hope that's enough. */
-
-DWORD
-fhandler_pty_master::pty_master_thread ()
-{
- bool exit = false;
- GENERIC_MAPPING map = { EVENT_QUERY_STATE, EVENT_MODIFY_STATE, 0,
- EVENT_QUERY_STATE | EVENT_MODIFY_STATE };
- pipe_request req;
- DWORD len;
- security_descriptor sd;
- HANDLE token;
- PRIVILEGE_SET ps;
- DWORD pid;
- NTSTATUS status;
-
- termios_printf ("Entered");
- while (!exit && (ConnectNamedPipe (master_ctl, NULL)
- || GetLastError () == ERROR_PIPE_CONNECTED))
- {
- pipe_reply repl = { NULL, NULL, 0 };
- bool deimp = false;
- NTSTATUS allow = STATUS_ACCESS_DENIED;
- ACCESS_MASK access = EVENT_MODIFY_STATE;
- HANDLE client = NULL;
-
- if (!ReadFile (master_ctl, &req, sizeof req, &len, NULL))
- {
- termios_printf ("ReadFile, %E");
- goto reply;
- }
- /* This function is only available since Vista, unfortunately.
- In earlier OSes we simply have to believe that the client
- has no malicious intent (== sends arbitrary PIDs). */
- if (!GetNamedPipeClientProcessId (master_ctl, &pid))
- pid = req.pid;
- if (get_object_sd (input_available_event, sd))
- {
- termios_printf ("get_object_sd, %E");
- goto reply;
- }
- cygheap->user.deimpersonate ();
- deimp = true;
- if (!ImpersonateNamedPipeClient (master_ctl))
- {
- termios_printf ("ImpersonateNamedPipeClient, %E");
- goto reply;
- }
- status = NtOpenThreadToken (GetCurrentThread (), TOKEN_QUERY, TRUE,
- &token);
- if (!NT_SUCCESS (status))
- {
- termios_printf ("NtOpenThreadToken, %y", status);
- SetLastError (RtlNtStatusToDosError (status));
- goto reply;
- }
- len = sizeof ps;
- status = NtAccessCheck (sd, token, access, &map, &ps, &len, &access,
- &allow);
- NtClose (token);
- if (!NT_SUCCESS (status))
- {
- termios_printf ("NtAccessCheck, %y", status);
- SetLastError (RtlNtStatusToDosError (status));
- goto reply;
- }
- if (!RevertToSelf ())
- {
- termios_printf ("RevertToSelf, %E");
- goto reply;
- }
- if (req.pid == (DWORD) -1) /* Request to finish thread. */
- {
- /* Pre-Vista: Just believe in the good of the client process.
- Post-Vista: Check if the requesting process is the master
- process itself. */
- if (pid == (DWORD) -1 || pid == GetCurrentProcessId ())
- exit = true;
- goto reply;
- }
- if (NT_SUCCESS (allow))
- {
- client = OpenProcess (PROCESS_DUP_HANDLE, FALSE, pid);
- if (!client)
- {
- termios_printf ("OpenProcess, %E");
- goto reply;
- }
- if (!DuplicateHandle (GetCurrentProcess (), from_master,
- client, &repl.from_master,
- 0, TRUE, DUPLICATE_SAME_ACCESS))
- {
- termios_printf ("DuplicateHandle (from_master), %E");
- goto reply;
- }
- if (!DuplicateHandle (GetCurrentProcess (), to_master,
- client, &repl.to_master,
- 0, TRUE, DUPLICATE_SAME_ACCESS))
- {
- termios_printf ("DuplicateHandle (to_master), %E");
- goto reply;
- }
- }
-reply:
- repl.error = GetLastError ();
- if (client)
- CloseHandle (client);
- if (deimp)
- cygheap->user.reimpersonate ();
- sd.free ();
- termios_printf ("Reply: from %p, to %p, error %u",
- repl.from_master, repl.to_master, repl.error );
- if (!WriteFile (master_ctl, &repl, sizeof repl, &len, NULL))
- termios_printf ("WriteFile, %E");
- if (!DisconnectNamedPipe (master_ctl))
- termios_printf ("DisconnectNamedPipe, %E");
- }
- termios_printf ("Leaving");
- return 0;
-}
-
-static DWORD WINAPI
-pty_master_thread (VOID *arg)
-{
- return ((fhandler_pty_master *) arg)->pty_master_thread ();
-}
-
-bool
-fhandler_pty_master::setup ()
-{
- int res;
- security_descriptor sd;
- SECURITY_ATTRIBUTES sa = { sizeof (SECURITY_ATTRIBUTES), NULL, TRUE };
-
- /* Find an unallocated pty to use. */
- int unit = cygwin_shared->tty.allocate (from_master, get_output_handle ());
- if (unit < 0)
- return false;
-
- ProtectHandle1 (get_output_handle (), to_pty);
-
- tty& t = *cygwin_shared->tty[unit];
- _tc = (tty_min *) &t;
-
- tcinit (true); /* Set termios information. Force initialization. */
-
- const char *errstr = NULL;
- DWORD pipe_mode = PIPE_NOWAIT;
-
- if (!SetNamedPipeHandleState (get_output_handle (), &pipe_mode, NULL, NULL))
- termios_printf ("can't set output_handle(%p) to non-blocking mode",
- get_output_handle ());
-
- char pipename[sizeof("ptyNNNN-from-master")];
- __small_sprintf (pipename, "pty%d-to-master", unit);
- res = fhandler_pipe::create (&sec_none, &get_io_handle (), &to_master,
- fhandler_pty_common::pipesize, pipename, 0);
- if (res)
- {
- errstr = "output pipe";
- goto err;
- }
-
- ProtectHandle1 (get_io_handle (), from_pty);
-
- /* Create security attribute. Default permissions are 0620. */
- sd.malloc (sizeof (SECURITY_DESCRIPTOR));
- RtlCreateSecurityDescriptor (sd, SECURITY_DESCRIPTOR_REVISION);
- if (!create_object_sd_from_attribute (NULL, myself->uid, myself->gid,
- S_IFCHR | S_IRUSR | S_IWUSR | S_IWGRP,
- sd))
- sa.lpSecurityDescriptor = (PSECURITY_DESCRIPTOR) sd;
-
- /* Carefully check that the input_available_event didn't already exist.
- This is a measure to make sure that the event security descriptor
- isn't occupied by a malicious process. We must make sure that the
- event's security descriptor is what we expect it to be. */
- if (!(input_available_event = t.get_event (errstr = INPUT_AVAILABLE_EVENT,
- &sa, TRUE))
- || GetLastError () == ERROR_ALREADY_EXISTS)
- goto err;
-
- char buf[MAX_PATH];
- errstr = shared_name (buf, OUTPUT_MUTEX, unit);
- if (!(output_mutex = CreateMutex (&sa, FALSE, buf)))
- goto err;
-
- errstr = shared_name (buf, INPUT_MUTEX, unit);
- if (!(input_mutex = CreateMutex (&sa, FALSE, buf)))
- goto err;
-
- /* Create master control pipe which allows the master to duplicate
- the pty pipe handles to processes which deserve it. */
- __small_sprintf (buf, "\\\\.\\pipe\\cygwin-%S-pty%d-master-ctl",
- &cygheap->installation_key, unit);
- master_ctl = CreateNamedPipe (buf, PIPE_ACCESS_DUPLEX
- | FILE_FLAG_FIRST_PIPE_INSTANCE,
- PIPE_WAIT | PIPE_TYPE_MESSAGE
- | PIPE_READMODE_MESSAGE
- | (wincap.has_pipe_reject_remote_clients ()
- ? PIPE_REJECT_REMOTE_CLIENTS : 0),
- 1, 4096, 4096, 0, &sec_all_nih);
- if (master_ctl == INVALID_HANDLE_VALUE)
- {
- errstr = "pty master control pipe";
- goto err;
- }
- master_thread = new cygthread (::pty_master_thread, this, "ptym");
- if (!master_thread)
- {
- errstr = "pty master control thread";
- goto err;
- }
-
- t.set_from_master (from_master);
- t.set_to_master (to_master);
- t.winsize.ws_col = 80;
- t.winsize.ws_row = 25;
- t.master_pid = myself->pid;
-
- dev ().parse (DEV_PTYM_MAJOR, unit);
-
- termios_printf ("this %p, pty%d opened - from_pty %p, to_pty %p", this, unit,
- get_io_handle (), get_output_handle ());
- return true;
-
-err:
- __seterrno ();
- close_maybe (get_io_handle ());
- close_maybe (get_output_handle ());
- close_maybe (input_available_event);
- close_maybe (output_mutex);
- close_maybe (input_mutex);
- close_maybe (from_master);
- close_maybe (to_master);
- close_maybe (master_ctl);
- termios_printf ("pty%d open failed - failed to create %s", unit, errstr);
- return false;
-}
-
-void
-fhandler_pty_master::fixup_after_fork (HANDLE parent)
-{
- DWORD wpid = GetCurrentProcessId ();
- fhandler_pty_master *arch = (fhandler_pty_master *) archetype;
- if (arch->dwProcessId != wpid)
- {
- tty& t = *get_ttyp ();
- if (myself->pid == t.master_pid)
- {
- t.set_from_master (arch->from_master);
- t.set_to_master (arch->to_master);
- }
- arch->dwProcessId = wpid;
- }
- from_master = arch->from_master;
- to_master = arch->to_master;
- report_tty_counts (this, "inherited master", "");
-}
-
-void
-fhandler_pty_master::fixup_after_exec ()
-{
- if (!close_on_exec ())
- fixup_after_fork (spawn_info->parent);
- else
- from_master = to_master = NULL;
-}
diff --git a/winsup/cygwin/fhandler_virtual.cc b/winsup/cygwin/fhandler_virtual.cc
deleted file mode 100644
index 2d56d7413..000000000
--- a/winsup/cygwin/fhandler_virtual.cc
+++ /dev/null
@@ -1,278 +0,0 @@
-/* fhandler_virtual.cc: base fhandler class for virtual filesystems
-
- Copyright 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012,
- 2013 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include <sys/acl.h>
-#include <sys/statvfs.h>
-#include "cygerrno.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "sync.h"
-#include "child_info.h"
-
-#include <dirent.h>
-
-fhandler_virtual::fhandler_virtual ():
- fhandler_base (), filebuf (NULL), fileid (-1)
-{
-}
-
-fhandler_virtual::~fhandler_virtual ()
-{
- if (filebuf)
- {
- cfree (filebuf);
- filebuf = NULL;
- }
-}
-
-void
-fhandler_virtual::fixup_after_exec ()
-{
-}
-
-DIR *
-fhandler_virtual::opendir (int fd)
-{
- DIR *dir;
- DIR *res = NULL;
- size_t len;
-
- if (exists () <= 0)
- set_errno (ENOTDIR);
- else if ((len = strlen (get_name ())) > PATH_MAX - 3)
- set_errno (ENAMETOOLONG);
- else if ((dir = (DIR *) malloc (sizeof (DIR))) == NULL)
- set_errno (ENOMEM);
- else if ((dir->__d_dirname = (char *) malloc (len + 3)) == NULL)
- {
- free (dir);
- set_errno (ENOMEM);
- }
- else if ((dir->__d_dirent =
- (struct dirent *) malloc (sizeof (struct dirent))) == NULL)
- {
- free (dir->__d_dirname);
- free (dir);
- set_errno (ENOMEM);
- }
- else
- {
- strcpy (dir->__d_dirname, get_name ());
- dir->__d_dirent->__d_version = __DIRENT_VERSION;
- dir->__d_cookie = __DIRENT_COOKIE;
- dir->__handle = INVALID_HANDLE_VALUE;
- dir->__d_position = 0;
- dir->__flags = 0;
-
- if (fd >= 0)
- {
- dir->__d_fd = fd;
- dir->__fh = this;
- res = dir;
- }
- else
- {
- cygheap_fdnew cfd;
- if (cfd >= 0 && open (O_RDONLY, 0))
- {
- cfd = this;
- dir->__d_fd = cfd;
- dir->__fh = this;
- res = dir;
- }
- }
- close_on_exec (true);
- }
-
- syscall_printf ("%p = opendir (%s)", res, get_name ());
- return res;
-}
-
-long
-fhandler_virtual::telldir (DIR * dir)
-{
- return dir->__d_position;
-}
-
-void
-fhandler_virtual::seekdir (DIR * dir, long loc)
-{
- dir->__flags |= dirent_saw_dot | dirent_saw_dot_dot;
- dir->__d_position = loc;
-}
-
-void
-fhandler_virtual::rewinddir (DIR * dir)
-{
- dir->__d_position = 0;
- dir->__flags |= dirent_saw_dot | dirent_saw_dot_dot;
-}
-
-int
-fhandler_virtual::closedir (DIR * dir)
-{
- return 0;
-}
-
-off_t
-fhandler_virtual::lseek (off_t offset, int whence)
-{
- /*
- * On Linux, when you lseek within a /proc file,
- * the contents of the file are updated.
- */
- if (!fill_filebuf ())
- return (off_t) -1;
- switch (whence)
- {
- case SEEK_SET:
- position = offset;
- break;
- case SEEK_CUR:
- position += offset;
- break;
- case SEEK_END:
- position = filesize + offset;
- break;
- default:
- set_errno (EINVAL);
- return (off_t) -1;
- }
- return position;
-}
-
-int
-fhandler_virtual::dup (fhandler_base * child, int flags)
-{
- int ret = fhandler_base::dup (child, flags);
-
- if (!ret)
- {
- fhandler_virtual *fhproc_child = (fhandler_virtual *) child;
- fhproc_child->filebuf = (char *) cmalloc_abort (HEAP_BUF, filesize);
- memcpy (fhproc_child->filebuf, filebuf, filesize);
- }
- return ret;
-}
-
-int
-fhandler_virtual::close ()
-{
- if (!have_execed)
- {
- if (filebuf)
- {
- cfree (filebuf);
- filebuf = NULL;
- }
- }
- return 0;
-}
-
-void __reg3
-fhandler_virtual::read (void *ptr, size_t& len)
-{
- if (len == 0)
- return;
- if (openflags & O_DIROPEN)
- {
- set_errno (EISDIR);
- len = (size_t) -1;
- return;
- }
- if (!filebuf)
- {
- len = (size_t) 0;
- return;
- }
- if ((ssize_t) len > filesize - position)
- len = (size_t) (filesize - position);
- if ((ssize_t) len < 0)
- len = 0;
- else
- memcpy (ptr, filebuf + position, len);
- position += len;
-}
-
-ssize_t __stdcall
-fhandler_virtual::write (const void *ptr, size_t len)
-{
- set_errno (EACCES);
- return -1;
-}
-
-/* low-level open for all proc files */
-int
-fhandler_virtual::open (int flags, mode_t mode)
-{
- rbinary (true);
- wbinary (true);
-
- set_flags ((flags & ~O_TEXT) | O_BINARY);
-
- return 1;
-}
-
-virtual_ftype_t
-fhandler_virtual::exists ()
-{
- return virt_none;
-}
-
-bool
-fhandler_virtual::fill_filebuf ()
-{
- return true;
-}
-
-int
-fhandler_virtual::fchmod (mode_t mode)
-{
- /* Same as on Linux. */
- set_errno (EPERM);
- return -1;
-}
-
-int
-fhandler_virtual::fchown (uid_t uid, gid_t gid)
-{
- /* Same as on Linux. */
- set_errno (EPERM);
- return -1;
-}
-
-int
-fhandler_virtual::facl (int cmd, int nentries, aclent_t *aclbufp)
-{
- int res = fhandler_base::facl (cmd, nentries, aclbufp);
- if (res >= 0 && cmd == GETACL)
- {
- aclbufp[0].a_perm = (S_IRUSR | (pc.isdir () ? S_IXUSR : 0)) >> 6;
- aclbufp[1].a_perm = (S_IRGRP | (pc.isdir () ? S_IXGRP : 0)) >> 3;
- aclbufp[2].a_perm = S_IROTH | (pc.isdir () ? S_IXOTH : 0);
- }
- return res;
-}
-
-int __reg2
-fhandler_virtual::fstatvfs (struct statvfs *sfs)
-{
- /* Virtual file system. Just return an empty buffer with a few values
- set to something useful. Just as on Linux. */
- memset (sfs, 0, sizeof (*sfs));
- sfs->f_bsize = sfs->f_frsize = 4096;
- sfs->f_flag = ST_RDONLY;
- sfs->f_namemax = NAME_MAX;
- return 0;
-}
diff --git a/winsup/cygwin/fhandler_virtual.h b/winsup/cygwin/fhandler_virtual.h
deleted file mode 100644
index f92c06b89..000000000
--- a/winsup/cygwin/fhandler_virtual.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/* fhandler_virtual.h: Header for virtual fhandlers
-
- Copyright 2009, 2010, 2011, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-struct virt_tab_t {
- const char *name;
- size_t name_len;
- fh_devices fhandler;
- virtual_ftype_t type;
- off_t (*format_func)(void *data, char *&);
-};
-
-#define _VN(s) s, sizeof (s) - 1
-
-extern virt_tab_t *virt_tab_search (const char *, bool, const virt_tab_t *,
- size_t);
-
-static inline unsigned char
-virt_ftype_to_dtype (virtual_ftype_t type)
-{
- unsigned char d_type;
-
- switch (type)
- {
- case virt_directory:
- d_type = DT_DIR;
- break;
- case virt_symlink:
- d_type = DT_LNK;
- break;
- case virt_file:
- d_type = DT_REG;
- break;
- default:
- d_type = DT_UNKNOWN;
- break;
- }
- return d_type;
-}
diff --git a/winsup/cygwin/fhandler_windows.cc b/winsup/cygwin/fhandler_windows.cc
deleted file mode 100644
index 5cafe13d9..000000000
--- a/winsup/cygwin/fhandler_windows.cc
+++ /dev/null
@@ -1,164 +0,0 @@
-/* fhandler_windows.cc: code to access windows message queues.
-
- Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2009, 2011, 2012,
- 2013 Red Hat, Inc.
-
- Written by Sergey S. Okhapkin (sos@prospect.com.ru).
- Feedback and testing by Andy Piper (andyp@parallax.co.uk).
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include "cygerrno.h"
-#include "path.h"
-#include "fhandler.h"
-#include "sigproc.h"
-#include "thread.h"
-
-
-/*
-The following unix-style calls are supported:
-
- open ("/dev/windows", flags, mode=0)
- - create a unix fd for message queue.
-
- read (fd, buf, len)
- - return next message from queue. buf must point to MSG
- structure, len must be >= sizeof (MSG). If read is set to
- non-blocking and the queue is empty, read call returns -1
- immediately with errno set to EAGAIN, otherwise it blocks
- untill the message will be received.
-
- write (fd, buf, len)
- - send a message pointed by buf. len argument ignored.
-
- ioctl (fd, command, *param)
- - control read()/write() behavior.
- ioctl (fd, WINDOWS_POST, NULL): write() will PostMessage();
- ioctl (fd, WINDOWS_SEND, NULL): write() will SendMessage();
- ioctl (fd, WINDOWS_HWND, &hWnd): read() messages for
- hWnd window.
-
- select () call marks read fd when any message posted to queue.
-*/
-
-fhandler_windows::fhandler_windows ()
- : fhandler_base (), hWnd_ (NULL), method_ (WINDOWS_POST)
-{
-}
-
-int
-fhandler_windows::open (int flags, mode_t mode)
-{
- return fhandler_base::open ((flags & ~O_TEXT) | O_BINARY, mode);
-}
-
-ssize_t __stdcall
-fhandler_windows::write (const void *buf, size_t)
-{
- MSG *ptr = (MSG *) buf;
-
- if (method_ == WINDOWS_POST)
- {
- if (!PostMessageW (ptr->hwnd, ptr->message, ptr->wParam, ptr->lParam))
- {
- __seterrno ();
- return -1;
- }
- }
- else if (!SendNotifyMessageW (ptr->hwnd, ptr->message, ptr->wParam,
- ptr->lParam))
- {
- __seterrno ();
- return -1;
- }
- return sizeof (MSG);
-}
-
-void __reg3
-fhandler_windows::read (void *buf, size_t& len)
-{
- MSG *ptr = (MSG *) buf;
-
- if (len < sizeof (MSG))
- {
- set_errno (EINVAL);
- len = (size_t) -1;
- return;
- }
-
- HANDLE w4[2];
- set_signal_arrived here (w4[0]);
- DWORD cnt = 1;
- if ((w4[1] = pthread::get_cancel_event ()) != NULL)
- ++cnt;
- for (;;)
- {
- switch (MsgWaitForMultipleObjectsEx (cnt, w4,
- is_nonblocking () ? 0 : INFINITE,
- QS_ALLINPUT | QS_ALLPOSTMESSAGE,
- MWMO_INPUTAVAILABLE))
- {
- case WAIT_OBJECT_0:
- if (_my_tls.call_signal_handler ())
- continue;
- len = (size_t) -1;
- set_errno (EINTR);
- break;
- case WAIT_OBJECT_0 + 1:
- if (cnt > 1) /* WAIT_OBJECT_0 + 1 is the cancel event object. */
- {
- pthread::static_cancel_self ();
- break;
- }
- /*FALLTHRU*/
- case WAIT_OBJECT_0 + 2:
- if (!PeekMessageW (ptr, hWnd_, 0, 0, PM_REMOVE))
- {
- len = (size_t) -1;
- __seterrno ();
- }
- else if (ptr->message == WM_QUIT)
- len = 0;
- else
- len = sizeof (MSG);
- break;
- case WAIT_TIMEOUT:
- len = (size_t) -1;
- set_errno (EAGAIN);
- break;
- default:
- len = (size_t) -1;
- __seterrno ();
- break;
- }
- break;
- }
-}
-
-int
-fhandler_windows::ioctl (unsigned int cmd, void *val)
-{
- switch (cmd)
- {
- case WINDOWS_POST:
- case WINDOWS_SEND:
- method_ = cmd;
- break;
- case WINDOWS_HWND:
- if (val == NULL)
- {
- set_errno (EINVAL);
- return -1;
- }
- hWnd_ = * ((HWND *) val);
- break;
- default:
- return fhandler_base::ioctl (cmd, val);
- }
- return 0;
-}
diff --git a/winsup/cygwin/fhandler_zero.cc b/winsup/cygwin/fhandler_zero.cc
deleted file mode 100644
index 6e89683f9..000000000
--- a/winsup/cygwin/fhandler_zero.cc
+++ /dev/null
@@ -1,39 +0,0 @@
-/* fhandler_dev_zero.cc: code to access /dev/zero
-
- Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2008, 2009, 2013 Red Hat, Inc.
-
- Written by DJ Delorie (dj@cygnus.com)
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include "security.h"
-#include "cygerrno.h"
-#include "path.h"
-#include "fhandler.h"
-
-fhandler_dev_zero::fhandler_dev_zero ()
- : fhandler_base ()
-{
-}
-
-ssize_t __stdcall
-fhandler_dev_zero::write (const void *, size_t len)
-{
- if (get_device () == FH_FULL)
- {
- set_errno (ENOSPC);
- return -1;
- }
- return len;
-}
-
-void __reg3
-fhandler_dev_zero::read (void *ptr, size_t& len)
-{
- memset (ptr, 0, len);
-}
diff --git a/winsup/cygwin/flock.cc b/winsup/cygwin/flock.cc
deleted file mode 100644
index 783bf327d..000000000
--- a/winsup/cygwin/flock.cc
+++ /dev/null
@@ -1,2065 +0,0 @@
-/* flock.cc. NT specific implementation of advisory file locking.
-
- Copyright 2003, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Red Hat, Inc.
-
- This file is part of Cygwin.
-
- This software is a copyrighted work licensed under the terms of the
- Cygwin license. Please consult the file "CYGWIN_LICENSE" for
- details. */
-
-/* The basic mechanism as well as the datastructures used in the below
- implementation are taken from the FreeBSD repository on 2008-03-18.
- The essential code of the lf_XXX functions has been taken from the
- module src/sys/kern/kern_lockf.c. It has been adapted to use NT
- global namespace subdirs and event objects for synchronization
- purposes.
-
- So, the following copyright applies to most of the code in the lf_XXX
- functions.
-
- * Copyright (c) 1982, 1986, 1989, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Scooter Morris at Genentech Inc.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)ufs_lockf.c 8.3 (Berkeley) 1/6/94
-*/
-
-/*
- * The flock() function is based upon source taken from the Red Hat
- * implementation used in their imap-2002d SRPM.
- *
- * $RH: flock.c,v 1.2 2000/08/23 17:07:00 nalin Exp $
- */
-
-/* The lockf function is based upon FreeBSD sources with the following
- * copyright.
- */
-/*
- * Copyright (c) 1997 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Klaus Klein.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "winsup.h"
-#include <assert.h>
-#include <sys/file.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include "cygerrno.h"
-#include "security.h"
-#include "shared_info.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "pinfo.h"
-#include "sigproc.h"
-#include "cygtls.h"
-#include "tls_pbuf.h"
-#include "miscfuncs.h"
-#include "ntdll.h"
-#include <sys/queue.h>
-#include <wchar.h>
-
-#define F_WAIT 0x10 /* Wait until lock is granted */
-#define F_FLOCK 0x20 /* Use flock(2) semantics for lock */
-#define F_POSIX 0x40 /* Use POSIX semantics for lock */
-
-#ifndef OFF_MAX
-#define OFF_MAX LLONG_MAX
-#endif
-
-static NO_COPY muto lockf_guard;
-
-#define INODE_LIST_LOCK() (lockf_guard.init ("lockf_guard")->acquire ())
-#define INODE_LIST_UNLOCK() (lockf_guard.release ())
-
-#define LOCK_DIR_NAME_FMT L"flock-%08x-%016X"
-#define LOCK_DIR_NAME_LEN 31 /* Length of the resulting name */
-#define LOCK_DIR_NAME_DEV_OFF 6 /* Offset to device number */
-#define LOCK_DIR_NAME_INO_OFF 15 /* Offset to inode number */
-
-/* Don't change format without also changing lockf_t::from_obj_name! */
-#define LOCK_OBJ_NAME_FMT L"%02x-%01x-%016X-%016X-%016X-%08x-%04x"
-#define LOCK_OBJ_NAME_LEN 69 /* Length of the resulting name */
-
-#define FLOCK_INODE_DIR_ACCESS (DIRECTORY_QUERY \
- | DIRECTORY_TRAVERSE \
- | DIRECTORY_CREATE_OBJECT \
- | READ_CONTROL)
-
-#define FLOCK_EVENT_ACCESS (EVENT_QUERY_STATE \
- | SYNCHRONIZE \
- | READ_CONTROL)
-
-/* This function takes the own process security descriptor DACL and adds
- SYNCHRONIZE permissions for everyone. This allows all processes
- to wait for this process to die when blocking in a F_SETLKW on a lock
- which is hold by this process. */
-static void
-allow_others_to_sync ()
-{
- static NO_COPY bool done;
-
- if (done)
- return;
-
- NTSTATUS status;
- PACL dacl;
- LPVOID ace;
- ULONG len;
-
- /* Get this process DACL. We use a rather small stack buffer here which
- should be more than sufficient for process ACLs. Can't use tls functions
- at this point because this gets called during initialization when the tls
- is not really available. */
-#define MAX_PROCESS_SD_SIZE 3072
- PISECURITY_DESCRIPTOR sd = (PISECURITY_DESCRIPTOR) alloca (MAX_PROCESS_SD_SIZE);
- status = NtQuerySecurityObject (NtCurrentProcess (),
- DACL_SECURITY_INFORMATION, sd,
- MAX_PROCESS_SD_SIZE, &len);
- if (!NT_SUCCESS (status))
- {
- debug_printf ("NtQuerySecurityObject: %y", status);
- return;
- }
- /* Create a valid dacl pointer and set its size to be as big as
- there's room in the temporary buffer. Note that the descriptor
- is in self-relative format. */
- BOOLEAN present, defaulted;
- RtlGetDaclSecurityDescriptor (sd, &present, &dacl, &defaulted);
- if (!present) /* If so, dacl has undefined value. */
- {
- dacl = (PACL) (sd + 1);
- RtlCreateAcl (dacl, MAX_PROCESS_SD_SIZE - sizeof *sd, ACL_REVISION);
- }
- else if (dacl == NULL) /* Everyone has all access anyway */
- {
- done = true;
- return;
- }
- else
- {
- dacl->AclSize = MAX_PROCESS_SD_SIZE - ((PBYTE) dacl - (PBYTE) sd);
- }
- /* Allow everyone to SYNCHRONIZE with this process. */
- status = RtlAddAccessAllowedAce (dacl, ACL_REVISION, SYNCHRONIZE,
- well_known_world_sid);
- if (!NT_SUCCESS (status))
- {
- debug_printf ("RtlAddAccessAllowedAce: %y", status);
- return;
- }
- /* Set the size of the DACL correctly. */
- status = RtlFirstFreeAce (dacl, &ace);
- if (!NT_SUCCESS (status))
- {
- debug_printf ("RtlFirstFreeAce: %y", status);
- return;
- }
- dacl->AclSize = (char *) ace - (char *) dacl;
- /* Write the DACL back. */
- status = NtSetSecurityObject (NtCurrentProcess (), DACL_SECURITY_INFORMATION, sd);
- if (!NT_SUCCESS (status))
- {
- debug_printf ("NtSetSecurityObject: %y", status);
- return;
- }
- done = true;
-}
-
-/* Get the handle count of an object. */
-static ULONG
-get_obj_handle_count (HANDLE h)
-{
- OBJECT_BASIC_INFORMATION obi;
- NTSTATUS status;
- ULONG hdl_cnt = 0;
-
- status = NtQueryObject (h, ObjectBasicInformation, &obi, sizeof obi, NULL);
- if (!NT_SUCCESS (status))
- debug_printf ("NtQueryObject: %y", status);
- else
- hdl_cnt = obi.HandleCount;
- return hdl_cnt;
-}
-
-/* Helper struct to construct a local OBJECT_ATTRIBUTES on the stack. */
-struct lockfattr_t
-{
- OBJECT_ATTRIBUTES attr;
- UNICODE_STRING uname;
- WCHAR name[LOCK_OBJ_NAME_LEN + 1];
-};
-
-/* Per lock class. */
-class lockf_t
-{
- public:
- uint16_t lf_flags; /* Semantics: F_POSIX, F_FLOCK, F_WAIT */
- uint16_t lf_type; /* Lock type: F_RDLCK, F_WRLCK */
- off_t lf_start; /* Byte # of the start of the lock */
- off_t lf_end; /* Byte # of the end of the lock (-1=EOF) */
- int64_t lf_id; /* Cygwin PID for POSIX locks, a unique id per
- file table entry for BSD flock locks. */
- DWORD lf_wid; /* Win PID of the resource holding the lock */
- uint16_t lf_ver; /* Version number of the lock. If a released
- lock event yet exists because another process
- is still waiting for it, we use the version
- field to distinguish old from new locks. */
- class lockf_t **lf_head; /* Back pointer to the head of the lockf_t list */
- class inode_t *lf_inode; /* Back pointer to the inode_t */
- class lockf_t *lf_next; /* Pointer to the next lock on this inode_t */
- HANDLE lf_obj; /* Handle to the lock event object. */
-
- lockf_t ()
- : lf_flags (0), lf_type (0), lf_start (0), lf_end (0), lf_id (0),
- lf_wid (0), lf_ver (0), lf_head (NULL), lf_inode (NULL),
- lf_next (NULL), lf_obj (NULL)
- {}
- lockf_t (class inode_t *node, class lockf_t **head,
- short flags, short type, off_t start, off_t end,
- long long id, DWORD wid, uint16_t ver)
- : lf_flags (flags), lf_type (type), lf_start (start), lf_end (end),
- lf_id (id), lf_wid (wid), lf_ver (ver), lf_head (head), lf_inode (node),
- lf_next (NULL), lf_obj (NULL)
- {}
- ~lockf_t ();
-
- bool from_obj_name (class inode_t *node, class lockf_t **head,
- const wchar_t *name);
-
- /* Used to create all locks list in a given TLS buffer. */
- void *operator new (size_t size, void *p)
- { return p; }
- /* Used to store own lock list in the cygheap. */
- void *operator new (size_t size)
- { return cmalloc (HEAP_FHANDLER, sizeof (lockf_t)); }
- /* Never call on node->i_all_lf! */
- void operator delete (void *p)
- { cfree (p); }
-
- POBJECT_ATTRIBUTES create_lock_obj_attr (lockfattr_t *attr,
- ULONG flags);
-
- void create_lock_obj ();
- bool open_lock_obj ();
- void close_lock_obj () { NtClose (lf_obj); lf_obj = NULL; }
- void del_lock_obj (HANDLE fhdl, bool signal = false);
-};
-
-/* Per inode_t class */
-class inode_t
-{
- friend class lockf_t;
-
- public:
- LIST_ENTRY (inode_t) i_next;
- lockf_t *i_lockf; /* List of locks of this process. */
- lockf_t *i_all_lf; /* Temp list of all locks for this file. */
-
- dev_t i_dev; /* Device ID */
- ino_t i_ino; /* inode number */
-
- private:
- HANDLE i_dir;
- HANDLE i_mtx;
- uint32_t i_cnt; /* # of threads referencing this instance. */
-
- public:
- inode_t (dev_t dev, ino_t ino);
- ~inode_t ();
-
- void *operator new (size_t size)
- { return cmalloc (HEAP_FHANDLER, sizeof (inode_t)); }
- void operator delete (void *p)
- { cfree (p); }
-
- static inode_t *get (dev_t dev, ino_t ino,
- bool create_if_missing, bool lock);
-
- void LOCK () { WaitForSingleObject (i_mtx, INFINITE); }
- void UNLOCK () { ReleaseMutex (i_mtx); }
-
- void use () { ++i_cnt; }
- void unuse () { if (i_cnt > 0) --i_cnt; }
- bool inuse () { return i_cnt > 0; }
- void notused () { i_cnt = 0; }
-
- void unlock_and_remove_if_unused ();
-
- lockf_t *get_all_locks_list ();
-
- bool del_my_locks (long long id, HANDLE fhdl);
-};
-
-inode_t::~inode_t ()
-{
- lockf_t *lock, *n_lock;
- for (lock = i_lockf; lock && (n_lock = lock->lf_next, 1); lock = n_lock)
- delete lock;
- NtClose (i_mtx);
- NtClose (i_dir);
-}
-
-void
-inode_t::unlock_and_remove_if_unused ()
-{
- UNLOCK ();
- INODE_LIST_LOCK ();
- unuse ();
- if (i_lockf == NULL && !inuse ())
- {
- LIST_REMOVE (this, i_next);
- delete this;
- }
- INODE_LIST_UNLOCK ();
-}
-
-bool
-inode_t::del_my_locks (long long id, HANDLE fhdl)
-{
- lockf_t *lock, *n_lock;
- lockf_t **prev = &i_lockf;
- for (lock = *prev; lock && (n_lock = lock->lf_next, 1); lock = n_lock)
- {
- if (lock->lf_flags & F_POSIX)
- {
- /* Delete all POSIX locks. */
- *prev = n_lock;
- /* When called during fork, the POSIX lock must get deleted but
- *not* signalled. The lock is still active and locked in the
- parent. So in case of fork, we call close_lock_obj explicitely,
- since del_lock_obj is called from the destructor. */
- if (!id)
- lock->close_lock_obj ();
- delete lock;
- }
- else if (id && lock->lf_id == id)
- {
- int cnt = 0;
- cygheap_fdenum cfd (true);
- while (cfd.next () >= 0)
- if (cfd->get_unique_id () == lock->lf_id && ++cnt > 1)
- break;
- /* Delete BSD flock lock when no other fd in this process references
- it anymore. */
- if (cnt <= 1)
- {
- *prev = n_lock;
- lock->del_lock_obj (fhdl);
- delete lock;
- }
- }
- else
- prev = &lock->lf_next;
- }
- return i_lockf == NULL;
-}
-
-/* Used to delete the locks on a file hold by this process. Called from
- close(2) and fixup_after_fork, as well as from fixup_after_exec in
- case the close_on_exec flag is set. The whole inode is deleted as
- soon as no lock exists on it anymore. */
-void
-fhandler_base::del_my_locks (del_lock_called_from from)
-{
- inode_t *node = inode_t::get (get_dev (), get_ino (), false, true);
- if (node)
- {
- /* When we're called from fixup_after_exec, the fhandler is a
- close-on-exec fhandler. In this case our io handle is already
- invalid. We can't use it to test for the object reference count.
- However, that shouldn't be necessary for the following reason.
- After exec, there are no threads in the current process waiting for
- the lock. So, either we're the only process accessing the file table
- entry and there are no threads which require signalling, or we have
- a parent process still accessing the file object and signalling the
- lock event would be premature. */
- node->del_my_locks (from == after_fork ? 0 : get_unique_id (),
- from == after_exec ? NULL : get_handle ());
- node->unlock_and_remove_if_unused ();
- }
-}
-
-/* Called in an execed child. The exec'ed process must allow SYNCHRONIZE
- access to everyone if at least one inode exists.
- The lock owner's Windows PID changed and all POSIX lock event objects
- have to be relabeled so that waiting processes know which process to
- wait on. If the node has been abandoned due to close_on_exec on the
- referencing fhandlers, remove the inode entirely. */
-void
-fixup_lockf_after_exec (bool exec)
-{
- inode_t *node, *next_node;
-
- INODE_LIST_LOCK ();
- if (LIST_FIRST (&cygheap->inode_list))
- allow_others_to_sync ();
- LIST_FOREACH_SAFE (node, &cygheap->inode_list, i_next, next_node)
- {
- node->notused ();
- int cnt = 0;
- cygheap_fdenum cfd (true);
- while (cfd.next () >= 0)
- if (cfd->get_dev () == node->i_dev
- && cfd->get_ino () == node->i_ino
- && ++cnt >= 1)
- break;
- if (cnt == 0)
- {
- LIST_REMOVE (node, i_next);
- delete node;
- }
- else
- {
- node->LOCK ();
- lockf_t *lock, *n_lock;
- lockf_t **prev = &node->i_lockf;
- for (lock = *prev; lock && (n_lock = lock->lf_next, 1); lock = n_lock)
- if (lock->lf_flags & F_POSIX)
- {
- if (exec)
- {
- /* The parent called exec. The lock is passed to the child.
- Recreate lock object with changed ownership. */
- lock->del_lock_obj (NULL);
- lock->lf_wid = myself->dwProcessId;
- lock->lf_ver = 0;
- lock->create_lock_obj ();
- }
- else
- {
- /* The parent called spawn. The parent continues to hold
- the POSIX lock, ownership is not passed to the child.
- Give up the lock in the child. */
- *prev = n_lock;
- lock->close_lock_obj ();
- delete lock;
- }
- }
- node->UNLOCK ();
- }
- }
- INODE_LIST_UNLOCK ();
-}
-
-/* static method to return a pointer to the inode_t structure for a specific
- file. The file is specified by the device and inode_t number. If inode_t
- doesn't exist, create it. */
-inode_t *
-inode_t::get (dev_t dev, ino_t ino, bool create_if_missing, bool lock)
-{
- inode_t *node;
-
- INODE_LIST_LOCK ();
- LIST_FOREACH (node, &cygheap->inode_list, i_next)
- if (node->i_dev == dev && node->i_ino == ino)
- break;
- if (!node && create_if_missing)
- {
- node = new inode_t (dev, ino);
- if (node)
- LIST_INSERT_HEAD (&cygheap->inode_list, node, i_next);
- }
- if (node)
- node->use ();
- INODE_LIST_UNLOCK ();
- if (node && lock)
- node->LOCK ();
- return node;
-}
-
-inode_t::inode_t (dev_t dev, ino_t ino)
-: i_lockf (NULL), i_all_lf (NULL), i_dev (dev), i_ino (ino), i_cnt (0L)
-{
- HANDLE parent_dir;
- WCHAR name[48];
- UNICODE_STRING uname;
- OBJECT_ATTRIBUTES attr;
- NTSTATUS status;
-
- parent_dir = get_shared_parent_dir ();
- /* Create a subdir which is named after the device and inode_t numbers
- of the given file, in hex notation. */
- int len = __small_swprintf (name, LOCK_DIR_NAME_FMT, dev, ino);
- RtlInitCountedUnicodeString (&uname, name, len * sizeof (WCHAR));
- InitializeObjectAttributes (&attr, &uname, OBJ_INHERIT | OBJ_OPENIF,
- parent_dir, everyone_sd (FLOCK_INODE_DIR_ACCESS));
- status = NtCreateDirectoryObject (&i_dir, FLOCK_INODE_DIR_ACCESS, &attr);
- if (!NT_SUCCESS (status))
- api_fatal ("NtCreateDirectoryObject(inode): %y", status);
- /* Create a mutex object in the file specific dir, which is used for
- access synchronization on the dir and its objects. */
- InitializeObjectAttributes (&attr, &ro_u_mtx, OBJ_INHERIT | OBJ_OPENIF, i_dir,
- everyone_sd (CYG_MUTANT_ACCESS));
- status = NtCreateMutant (&i_mtx, CYG_MUTANT_ACCESS, &attr, FALSE);
- if (!NT_SUCCESS (status))
- api_fatal ("NtCreateMutant(inode): %y", status);
-}
-
-/* Enumerate all lock event objects for this file and create a lockf_t
- list in the i_all_lf member. This list is searched in lf_getblock
- for locks which potentially block our lock request. */
-
-/* Number of lockf_t structs which fit in the temporary buffer. */
-#define MAX_LOCKF_CNT ((intptr_t)((NT_MAX_PATH * sizeof (WCHAR)) \
- / sizeof (lockf_t)))
-
-bool
-lockf_t::from_obj_name (inode_t *node, lockf_t **head, const wchar_t *name)
-{
- wchar_t *endptr;
-
- /* "%02x-%01x-%016X-%016X-%016X-%08x-%04x",
- lf_flags, lf_type, lf_start, lf_end, lf_id, lf_wid, lf_ver */
- lf_flags = wcstol (name, &endptr, 16);
- if ((lf_flags & ~(F_FLOCK | F_POSIX)) != 0
- || ((lf_flags & (F_FLOCK | F_POSIX)) == (F_FLOCK | F_POSIX)))
- return false;
- lf_type = wcstol (endptr + 1, &endptr, 16);
- if ((lf_type != F_RDLCK && lf_type != F_WRLCK) || !endptr || *endptr != L'-')
- return false;
- lf_start = (off_t) wcstoull (endptr + 1, &endptr, 16);
- if (lf_start < 0 || !endptr || *endptr != L'-')
- return false;
- lf_end = (off_t) wcstoull (endptr + 1, &endptr, 16);
- if (lf_end < -1LL
- || (lf_end > 0 && lf_end < lf_start)
- || !endptr || *endptr != L'-')
- return false;
- lf_id = wcstoll (endptr + 1, &endptr, 16);
- if (!endptr || *endptr != L'-'
- || ((lf_flags & F_POSIX) && (lf_id < 1 || lf_id > UINT32_MAX)))
- return false;
- lf_wid = wcstoul (endptr + 1, &endptr, 16);
- if (!endptr || *endptr != L'-')
- return false;
- lf_ver = wcstoul (endptr + 1, &endptr, 16);
- if (endptr && *endptr != L'\0')
- return false;
- lf_head = head;
- lf_inode = node;
- lf_next = NULL;
- lf_obj = NULL;
- return true;
-}
-
-lockf_t *
-inode_t::get_all_locks_list ()
-{
- struct fdbi
- {
- DIRECTORY_BASIC_INFORMATION dbi;
- WCHAR buf[2][NAME_MAX + 1];
- } f;
- ULONG context;
- NTSTATUS status;
- lockf_t newlock, *lock = i_all_lf;
-
- for (BOOLEAN restart = TRUE;
- NT_SUCCESS (status = NtQueryDirectoryObject (i_dir, &f, sizeof f, TRUE,
- restart, &context, NULL));
- restart = FALSE)
- {
- if (f.dbi.ObjectName.Length != LOCK_OBJ_NAME_LEN * sizeof (WCHAR))
- continue;
- f.dbi.ObjectName.Buffer[LOCK_OBJ_NAME_LEN] = L'\0';
- if (!newlock.from_obj_name (this, &i_all_lf, f.dbi.ObjectName.Buffer))
- continue;
- if (lock - i_all_lf >= MAX_LOCKF_CNT)
- {
- system_printf ("Warning, can't handle more than %d locks per file.",
- MAX_LOCKF_CNT);
- break;
- }
- if (lock > i_all_lf)
- lock[-1].lf_next = lock;
- new (lock++) lockf_t (newlock);
- }
- /* If no lock has been found, return NULL. */
- if (lock == i_all_lf)
- return NULL;
- return i_all_lf;
-}
-
-/* Create the lock object name. The name is constructed from the lock
- properties which identify it uniquely, all values in hex. */
-POBJECT_ATTRIBUTES
-lockf_t::create_lock_obj_attr (lockfattr_t *attr, ULONG flags)
-{
- __small_swprintf (attr->name, LOCK_OBJ_NAME_FMT,
- lf_flags & (F_POSIX | F_FLOCK), lf_type, lf_start, lf_end,
- lf_id, lf_wid, lf_ver);
- RtlInitCountedUnicodeString (&attr->uname, attr->name,
- LOCK_OBJ_NAME_LEN * sizeof (WCHAR));
- InitializeObjectAttributes (&attr->attr, &attr->uname, flags, lf_inode->i_dir,
- everyone_sd (FLOCK_EVENT_ACCESS));
- return &attr->attr;
-}
-
-DWORD WINAPI
-create_lock_in_parent (PVOID param)
-{
- HANDLE lf_obj;
- ULONG size;
- OBJECT_NAME_INFORMATION *ntfn;
- NTSTATUS status;
- wchar_t *lockname, *inodename, *endptr;
- dev_t dev;
- ino_t ino;
- inode_t *node;
- lockf_t newlock, *lock;
- int cnt;
-
- /* param is the handle to the lock object, created by caller. */
- lf_obj = (HANDLE) param;
- /* Fetch object path from handle. Typically the length of the path
- is 146 characters, starting with
- "\BaseNamedObject\cygwin-1S5-<16-hex-digits>\..." */
- size = sizeof (OBJECT_NAME_INFORMATION) + 256 * sizeof (WCHAR);
- ntfn = (OBJECT_NAME_INFORMATION *) alloca (size);
- memset (ntfn, 0, size);
- status = NtQueryObject (lf_obj, ObjectNameInformation, ntfn, size, &size);
- if (!NT_SUCCESS (status))
- goto err;
- ntfn->Name.Buffer[ntfn->Name.Length / sizeof (WCHAR)] = L'\0';
- /* Sanity check so that we don't peek into unchartered territory. */
- if (ntfn->Name.Length < LOCK_OBJ_NAME_LEN + LOCK_DIR_NAME_LEN + 1)
- goto err;
- /* The names have fixed size, so we know where the substrings start. */
- lockname = ntfn->Name.Buffer + ntfn->Name.Length / sizeof (WCHAR)
- - LOCK_OBJ_NAME_LEN;
- inodename = lockname - LOCK_DIR_NAME_LEN - 1;
- dev = wcstoul (inodename + LOCK_DIR_NAME_DEV_OFF, &endptr, 16);
- if (*endptr != L'-')
- goto err;
- ino = wcstoull (inodename + LOCK_DIR_NAME_INO_OFF, &endptr, 16);
- if (*endptr != L'\\')
- goto err;
- if (!newlock.from_obj_name (NULL, NULL, lockname))
- goto err;
- /* Check if we have an open file handle with the same unique id. */
- {
- cnt = 0;
- cygheap_fdenum cfd (true);
- while (cfd.next () >= 0)
- if (cfd->get_unique_id () == newlock.lf_id && ++cnt > 0)
- break;
- }
- /* If not, close handle and return. */
- if (!cnt)
- {
- NtClose (lf_obj);
- return 0;
- }
- /* The handle gets created non-inheritable. That's fine, unless the parent
- starts another process accessing this object. So, after it's clear we
- have to store the handle for further use, make sure it gets inheritable
- by child processes. */
- if (!SetHandleInformation (lf_obj, HANDLE_FLAG_INHERIT, HANDLE_FLAG_INHERIT))
- goto err;
- /* otherwise generate inode from directory name... */
- node = inode_t::get (dev, ino, true, false);
- /* ...and generate lock from object name. */
- lock = new lockf_t (newlock);
- lock->lf_inode = node;
- lock->lf_head = &node->i_lockf;
- lock->lf_next = node->i_lockf;
- lock->lf_obj = lf_obj;
- node->i_lockf = lock;
- node->unuse ();
- return 0;
-
-err:
- system_printf ("Adding <%S> lock failed", &ntfn->Name);
- NtClose (lf_obj);
- return 1;
-}
-
-DWORD WINAPI
-delete_lock_in_parent (PVOID param)
-{
- inode_t *node, *next_node;
- lockf_t *lock, **prev;
-
- /* Scan list of all inodes, and reap stale BSD lock if lf_id matches.
- Remove inode if empty. */
- INODE_LIST_LOCK ();
- LIST_FOREACH_SAFE (node, &cygheap->inode_list, i_next, next_node)
- if (!node->inuse ())
- {
- for (prev = &node->i_lockf, lock = *prev; lock; lock = *prev)
- {
- if ((lock->lf_flags & F_FLOCK) && IsEventSignalled (lock->lf_obj))
- {
- *prev = lock->lf_next;
- delete lock;
- }
- else
- prev = &lock->lf_next;
- }
- if (node->i_lockf == NULL)
- {
- LIST_REMOVE (node, i_next);
- delete node;
- }
- }
- INODE_LIST_UNLOCK ();
- return 0;
-}
-
-/* Create the lock event object in the file's subdir in the NT global
- namespace. */
-void
-lockf_t::create_lock_obj ()
-{
- lockfattr_t attr;
- NTSTATUS status;
-
- do
- {
- status = NtCreateEvent (&lf_obj, CYG_EVENT_ACCESS,
- create_lock_obj_attr (&attr, OBJ_INHERIT),
- NotificationEvent, FALSE);
- if (!NT_SUCCESS (status))
- {
- if (status != STATUS_OBJECT_NAME_COLLISION)
- api_fatal ("NtCreateEvent(lock): %y", status);
- /* If we get a STATUS_OBJECT_NAME_COLLISION, the event still exists
- because some other process is waiting for it in lf_setlock.
- If so, check the event's signal state. If we can't open it, it
- has been closed in the meantime, so just try again. If we can
- open it and the object is not signalled, it's surely a bug in the
- code somewhere. Otherwise, close the event and retry to create
- a new event with another name. */
- if (open_lock_obj ())
- {
- if (!IsEventSignalled (lf_obj))
- api_fatal ("NtCreateEvent(lock): %y", status);
- close_lock_obj ();
- /* Increment the lf_ver field until we have no collision. */
- ++lf_ver;
- }
- }
- }
- while (!NT_SUCCESS (status));
- /* For BSD locks, notify the parent process. */
- if (lf_flags & F_FLOCK)
- {
- HANDLE parent_proc, parent_thread, parent_lf_obj;
-
- pinfo p (myself->ppid);
- if (!p) /* No access or not a Cygwin parent. */
- return;
-
- parent_proc = OpenProcess (PROCESS_DUP_HANDLE
- | PROCESS_CREATE_THREAD
- | PROCESS_QUERY_INFORMATION
- | PROCESS_VM_OPERATION
- | PROCESS_VM_WRITE
- | PROCESS_VM_READ,
- FALSE, p->dwProcessId);
- if (!parent_proc)
- {
- debug_printf ("OpenProcess (%u): %E", p->dwProcessId);
- return;
- }
- if (!DuplicateHandle (GetCurrentProcess (), lf_obj, parent_proc,
- &parent_lf_obj, TRUE, FALSE, DUPLICATE_SAME_ACCESS))
- debug_printf ("DuplicateHandle (lf_obj): %E");
- else
- {
- parent_thread = CreateRemoteThread (parent_proc, NULL, 256 * 1024,
- create_lock_in_parent,
- parent_lf_obj,
- STACK_SIZE_PARAM_IS_A_RESERVATION,
- NULL);
- if (!parent_thread)
- {
- debug_printf ("CreateRemoteThread: %E");
- /* If thread didn't get started, close object handle in parent,
- otherwise suffer handle leaks. */
- DuplicateHandle (parent_proc, parent_lf_obj, parent_proc,
- NULL, 0, FALSE, DUPLICATE_CLOSE_SOURCE);
- }
- else
- {
- /* Must wait to avoid race conditions. */
- WaitForSingleObject (parent_thread, INFINITE);
- CloseHandle (parent_thread);
- }
- }
- CloseHandle (parent_proc);
- }
-}
-
-/* Open a lock event object for SYNCHRONIZE access (to wait for it). */
-bool
-lockf_t::open_lock_obj ()
-{
- lockfattr_t attr;
- NTSTATUS status;
-
- status = NtOpenEvent (&lf_obj, FLOCK_EVENT_ACCESS,
- create_lock_obj_attr (&attr, 0));
- if (!NT_SUCCESS (status))
- {
- SetLastError (RtlNtStatusToDosError (status));
- lf_obj = NULL; /* Paranoia... */
- }
- return lf_obj != NULL;
-}
-
-/* Delete a lock event handle. The important thing here is to signal it
- before closing the handle. This way all threads waiting for this lock
- can wake up. */
-void
-lockf_t::del_lock_obj (HANDLE fhdl, bool signal)
-{
- if (lf_obj)
- {
- /* Only signal the event if it's either a POSIX lock, or, in case of
- BSD flock locks, if it's an explicit unlock or if the calling fhandler
- holds the last reference to the file table entry. The file table
- entry in UNIX terms is equivalent to the FILE_OBJECT in Windows NT
- terms. It's what the handle/descriptor references when calling
- CreateFile/open. Calling DuplicateHandle/dup only creates a new
- handle/descriptor to the same FILE_OBJECT/file table entry. */
- if ((lf_flags & F_POSIX) || signal
- || (fhdl && get_obj_handle_count (fhdl) <= 1))
- {
- NTSTATUS status = NtSetEvent (lf_obj, NULL);
- if (!NT_SUCCESS (status))
- system_printf ("NtSetEvent, %y", status);
- /* For BSD locks, notify the parent process. */
- if (lf_flags & F_FLOCK)
- {
- HANDLE parent_proc, parent_thread;
-
- pinfo p (myself->ppid);
- if (p && (parent_proc = OpenProcess (PROCESS_CREATE_THREAD
- | PROCESS_QUERY_INFORMATION
- | PROCESS_VM_OPERATION
- | PROCESS_VM_WRITE
- | PROCESS_VM_READ,
- FALSE, p->dwProcessId)))
- {
- parent_thread = CreateRemoteThread (parent_proc, NULL,
- 256 * 1024, delete_lock_in_parent,
- NULL,
- STACK_SIZE_PARAM_IS_A_RESERVATION,
- NULL);
- if (parent_thread)
- {
- /* Must wait to avoid race conditions. */
- WaitForSingleObject (parent_thread, INFINITE);
- CloseHandle (parent_thread);
- }
- CloseHandle (parent_proc);
- }
- }
- }
- close_lock_obj ();
- }
-}
-
-lockf_t::~lockf_t ()
-{
- del_lock_obj (NULL);
-}
-
-/*
- * This variable controls the maximum number of processes that will
- * be checked in doing deadlock detection.
- */
-#ifndef __CYGWIN__
-#define MAXDEPTH 50
-static int maxlockdepth = MAXDEPTH;
-#endif
-
-#define NOLOCKF (struct lockf_t *)0
-#define SELF 0x1
-#define OTHERS 0x2
-static int lf_clearlock (lockf_t *, lockf_t **, HANDLE);
-static int lf_findoverlap (lockf_t *, lockf_t *, int, lockf_t ***, lockf_t **);
-static lockf_t *lf_getblock (lockf_t *, inode_t *node);
-static int lf_getlock (lockf_t *, inode_t *, struct flock *);
-static int lf_setlock (lockf_t *, inode_t *, lockf_t **, HANDLE);
-static void lf_split (lockf_t *, lockf_t *, lockf_t **);
-static void lf_wakelock (lockf_t *, HANDLE);
-
-/* This is the fcntl advisory lock implementation. For the implementation
- of mandatory locks using the Windows mandatory locking functions, see the
- fhandler_disk_file::mand_lock method at the end of this file. */
-int
-fhandler_base::lock (int a_op, struct flock *fl)
-{
- off_t start, end, oadd;
- int error = 0;
-
- short a_flags = fl->l_type & (F_POSIX | F_FLOCK);
- short type = fl->l_type & (F_RDLCK | F_WRLCK | F_UNLCK);
-
- if (!a_flags)
- a_flags = F_POSIX; /* default */
-
- /* FIXME: For BSD flock(2) we need a valid, per file table entry OS handle.
- Therefore we can't allow using flock(2) on nohandle devices and
- pre-Windows 8 console handles (recognized by their odd handle value). */
- if ((a_flags & F_FLOCK)
- && (nohandle () || (((uintptr_t) get_handle () & 0x3) == 0x3)))
- {
- set_errno (EINVAL);
- debug_printf ("BSD locking on nohandle and old-style console devices "
- "not supported");
- return -1;
- }
-
- if (a_op == F_SETLKW)
- {
- a_op = F_SETLK;
- a_flags |= F_WAIT;
- }
- if (a_op == F_SETLK)
- switch (type)
- {
- case F_UNLCK:
- a_op = F_UNLCK;
- break;
- case F_RDLCK:
- /* flock semantics don't specify a requirement that the file has
- been opened with a specific open mode, in contrast to POSIX locks
- which require that a file is opened for reading to place a read
- lock and opened for writing to place a write lock. */
- /* CV 2013-10-22: Test POSIX R/W mode flags rather than Windows R/W
- access flags. The reason is that POSIX mode flags are set for
- all types of fhandlers, while Windows access flags are only set
- for most of the actual Windows device backed fhandlers. */
- if ((a_flags & F_POSIX)
- && ((get_flags () & O_ACCMODE) == O_WRONLY))
- {
- system_printf ("get_access() == %x", get_access ());
- set_errno (EBADF);
- return -1;
- }
- break;
- case F_WRLCK:
- /* See above comment. */
- if ((a_flags & F_POSIX)
- && ((get_flags () & O_ACCMODE) == O_RDONLY))
- {
- system_printf ("get_access() == %x", get_access ());
- set_errno (EBADF);
- return -1;
- }
- break;
- default:
- set_errno (EINVAL);
- return -1;
- }
-
- /*
- * Convert the flock structure into a start and end.
- */
- switch (fl->l_whence)
- {
- case SEEK_SET:
- start = fl->l_start;
- break;
-
- case SEEK_CUR:
- if ((start = lseek (0, SEEK_CUR)) == ILLEGAL_SEEK)
- start = 0;
- break;
-
- case SEEK_END:
- if (get_device () != FH_FS)
- start = 0;
- else
- {
- NTSTATUS status;
- IO_STATUS_BLOCK io;
- FILE_STANDARD_INFORMATION fsi;
-
- status = NtQueryInformationFile (get_handle (), &io, &fsi, sizeof fsi,
- FileStandardInformation);
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- return -1;
- }
- if (fl->l_start > 0 && fsi.EndOfFile.QuadPart > OFF_MAX - fl->l_start)
- {
- set_errno (EOVERFLOW);
- return -1;
- }
- start = fsi.EndOfFile.QuadPart + fl->l_start;
- }
- break;
-
- default:
- return (EINVAL);
- }
- if (start < 0)
- {
- set_errno (EINVAL);
- return -1;
- }
- if (fl->l_len < 0)
- {
- if (start == 0)
- {
- set_errno (EINVAL);
- return -1;
- }
- end = start - 1;
- start += fl->l_len;
- if (start < 0)
- {
- set_errno (EINVAL);
- return -1;
- }
- }
- else if (fl->l_len == 0)
- end = -1;
- else
- {
- oadd = fl->l_len - 1;
- if (oadd > OFF_MAX - start)
- {
- set_errno (EOVERFLOW);
- return -1;
- }
- end = start + oadd;
- }
-
-restart: /* Entry point after a restartable signal came in. */
-
- inode_t *node = inode_t::get (get_dev (), get_ino (), true, true);
- if (!node)
- {
- set_errno (ENOLCK);
- return -1;
- }
-
- /* Unlock the fd table which has been locked in fcntl_worker/lock_worker,
- otherwise a blocking F_SETLKW never wakes up on a signal. */
- cygheap->fdtab.unlock ();
-
- lockf_t **head = &node->i_lockf;
-
-#if 0
- /*
- * Avoid the common case of unlocking when inode_t has no locks.
- *
- * This shortcut is invalid for Cygwin because the above inode_t::get
- * call returns with an empty lock list if this process has no locks
- * on the file yet.
- */
- if (*head == NULL)
- {
- if (a_op != F_SETLK)
- {
- node->UNLOCK ();
- fl->l_type = F_UNLCK;
- return 0;
- }
- }
-#endif
- /*
- * Allocate a spare structure in case we have to split.
- */
- lockf_t *clean = NULL;
- if (a_op == F_SETLK || a_op == F_UNLCK)
- {
- clean = new lockf_t ();
- if (!clean)
- {
- node->unlock_and_remove_if_unused ();
- set_errno (ENOLCK);
- return -1;
- }
- }
- /*
- * Create the lockf_t structure
- */
- lockf_t *lock = new lockf_t (node, head, a_flags, type, start, end,
- (a_flags & F_FLOCK) ? get_unique_id ()
- : getpid (),
- myself->dwProcessId, 0);
- if (!lock)
- {
- node->unlock_and_remove_if_unused ();
- set_errno (ENOLCK);
- return -1;
- }
-
- switch (a_op)
- {
- case F_SETLK:
- error = lf_setlock (lock, node, &clean, get_handle ());
- break;
-
- case F_UNLCK:
- error = lf_clearlock (lock, &clean, get_handle ());
- lock->lf_next = clean;
- clean = lock;
- break;
-
- case F_GETLK:
- error = lf_getlock (lock, node, fl);
- lock->lf_next = clean;
- clean = lock;
- break;
-
- default:
- lock->lf_next = clean;
- clean = lock;
- error = EINVAL;
- break;
- }
- for (lock = clean; lock != NULL; )
- {
- lockf_t *n = lock->lf_next;
- lock->del_lock_obj (get_handle (), a_op == F_UNLCK);
- delete lock;
- lock = n;
- }
- node->unlock_and_remove_if_unused ();
- switch (error)
- {
- case 0: /* All is well. */
- need_fork_fixup (true);
- return 0;
- case EINTR: /* Signal came in. */
- if (_my_tls.call_signal_handler ())
- goto restart;
- break;
- case ECANCELED: /* The thread has been sent a cancellation request. */
- pthread::static_cancel_self ();
- /*NOTREACHED*/
- default:
- break;
- }
- set_errno (error);
- return -1;
-}
-
-/*
- * Set a byte-range lock.
- */
-static int
-lf_setlock (lockf_t *lock, inode_t *node, lockf_t **clean, HANDLE fhdl)
-{
- lockf_t *block;
- lockf_t **head = lock->lf_head;
- lockf_t **prev, *overlap;
- int ovcase, priority, old_prio, needtolink;
- tmp_pathbuf tp;
-
- /*
- * Set the priority
- */
- priority = old_prio = GetThreadPriority (GetCurrentThread ());
- if (lock->lf_type == F_WRLCK && priority <= THREAD_PRIORITY_ABOVE_NORMAL)
- priority = THREAD_PRIORITY_HIGHEST;
- /*
- * Scan lock list for this file looking for locks that would block us.
- */
- /* Create temporary space for the all locks list. */
- node->i_all_lf = (lockf_t *) (void *) tp.w_get ();
- while ((block = lf_getblock(lock, node)))
- {
- HANDLE obj = block->lf_obj;
- block->lf_obj = NULL;
-
- /*
- * Free the structure and return if nonblocking.
- */
- if ((lock->lf_flags & F_WAIT) == 0)
- {
- NtClose (obj);
- lock->lf_next = *clean;
- *clean = lock;
- return EAGAIN;
- }
- /*
- * We are blocked. Since flock style locks cover
- * the whole file, there is no chance for deadlock.
- * For byte-range locks we must check for deadlock.
- *
- * Deadlock detection is done by looking through the
- * wait channels to see if there are any cycles that
- * involve us. MAXDEPTH is set just to make sure we
- * do not go off into neverland.
- */
- /* FIXME: We check the handle count of all the lock event objects
- this process holds. If it's > 1, another process is
- waiting for one of our locks. This method isn't overly
- intelligent. If it turns out to be too dumb, we might
- have to remove it or to find another method. */
- if (lock->lf_flags & F_POSIX)
- for (lockf_t *lk = node->i_lockf; lk; lk = lk->lf_next)
- if ((lk->lf_flags & F_POSIX) && get_obj_handle_count (lk->lf_obj) > 1)
- {
- NtClose (obj);
- return EDEADLK;
- }
-
- /*
- * For flock type locks, we must first remove
- * any shared locks that we hold before we sleep
- * waiting for an exclusive lock.
- */
- if ((lock->lf_flags & F_FLOCK) && lock->lf_type == F_WRLCK)
- {
- lock->lf_type = F_UNLCK;
- (void) lf_clearlock (lock, clean, fhdl);
- lock->lf_type = F_WRLCK;
- }
-
- /*
- * Add our lock to the blocked list and sleep until we're free.
- * Remember who blocked us (for deadlock detection).
- */
- /* Cygwin: No locked list. See deadlock recognition above. */
-
- node->UNLOCK ();
-
- /* Create list of objects to wait for. */
- HANDLE w4[4] = { obj, NULL, NULL, NULL };
- DWORD wait_count = 1;
-
- DWORD timeout;
- HANDLE proc = NULL;
- if (lock->lf_flags & F_POSIX)
- {
- proc = OpenProcess (SYNCHRONIZE, FALSE, block->lf_wid);
- if (!proc)
- timeout = 0L;
- else
- {
- w4[wait_count++] = proc;
- timeout = INFINITE;
- }
- }
- else
- timeout = 100L;
-
- DWORD WAIT_SIGNAL_ARRIVED = WAIT_OBJECT_0 + wait_count;
- set_signal_arrived here (w4[wait_count++]);
-
- DWORD WAIT_THREAD_CANCELED = WAIT_TIMEOUT + 1;
- HANDLE cancel_event = pthread::get_cancel_event ();
- if (cancel_event)
- {
- WAIT_THREAD_CANCELED = WAIT_OBJECT_0 + wait_count;
- w4[wait_count++] = cancel_event;
- }
-
- /* Wait for the blocking object and, for POSIX locks, its holding process.
- Unfortunately, since BSD flock locks are not attached to a specific
- process, we can't recognize an abandoned lock by sync'ing with the
- creator process. We have to make sure the event object is in a
- signalled state, or that it has gone away. The latter we can only
- recognize by retrying to fetch the block list, so we must not wait
- infinitely. For POSIX locks, if the process has already exited,
- just check if a signal or a thread cancel request arrived. */
- SetThreadPriority (GetCurrentThread (), priority);
- DWORD ret = WaitForMultipleObjects (wait_count, w4, FALSE, timeout);
- SetThreadPriority (GetCurrentThread (), old_prio);
- if (proc)
- CloseHandle (proc);
- node->LOCK ();
- /* Never close lock object handle outside of node lock! */
- NtClose (obj);
- if (ret == WAIT_SIGNAL_ARRIVED)
- {
- /* A signal came in. */
- lock->lf_next = *clean;
- *clean = lock;
- return EINTR;
- }
- else if (ret == WAIT_THREAD_CANCELED)
- {
- /* The thread has been sent a cancellation request. */
- lock->lf_next = *clean;
- *clean = lock;
- return ECANCELED;
- }
- else
- /* The lock object has been set to signalled or ...
- for POSIX locks, the process holding the lock has exited, or ...
- just a timeout. Just retry. */
- continue;
- }
- allow_others_to_sync ();
- /*
- * No blocks!! Add the lock. Note that we will
- * downgrade or upgrade any overlapping locks this
- * process already owns.
- *
- * Handle any locks that overlap.
- */
- prev = head;
- block = *head;
- needtolink = 1;
- for (;;)
- {
- ovcase = lf_findoverlap (block, lock, SELF, &prev, &overlap);
- if (ovcase)
- block = overlap->lf_next;
- /*
- * Six cases:
- * 0) no overlap
- * 1) overlap == lock
- * 2) overlap contains lock
- * 3) lock contains overlap
- * 4) overlap starts before lock
- * 5) overlap ends after lock
- */
- switch (ovcase)
- {
- case 0: /* no overlap */
- if (needtolink)
- {
- *prev = lock;
- lock->lf_next = overlap;
- lock->create_lock_obj ();
- }
- break;
-
- case 1: /* overlap == lock */
- /*
- * If downgrading lock, others may be
- * able to acquire it.
- * Cygwin: Always wake lock.
- */
- lf_wakelock (overlap, fhdl);
- overlap->lf_type = lock->lf_type;
- overlap->create_lock_obj ();
- lock->lf_next = *clean;
- *clean = lock;
- break;
-
- case 2: /* overlap contains lock */
- /*
- * Check for common starting point and different types.
- */
- if (overlap->lf_type == lock->lf_type)
- {
- lock->lf_next = *clean;
- *clean = lock;
- break;
- }
- if (overlap->lf_start == lock->lf_start)
- {
- *prev = lock;
- lock->lf_next = overlap;
- overlap->lf_start = lock->lf_end + 1;
- }
- else
- lf_split (overlap, lock, clean);
- lf_wakelock (overlap, fhdl);
- overlap->create_lock_obj ();
- lock->create_lock_obj ();
- if (lock->lf_next && !lock->lf_next->lf_obj)
- lock->lf_next->create_lock_obj ();
- break;
-
- case 3: /* lock contains overlap */
- /*
- * If downgrading lock, others may be able to
- * acquire it, otherwise take the list.
- * Cygwin: Always wake old lock and create new lock.
- */
- lf_wakelock (overlap, fhdl);
- /*
- * Add the new lock if necessary and delete the overlap.
- */
- if (needtolink)
- {
- *prev = lock;
- lock->lf_next = overlap->lf_next;
- prev = &lock->lf_next;
- lock->create_lock_obj ();
- needtolink = 0;
- }
- else
- *prev = overlap->lf_next;
- overlap->lf_next = *clean;
- *clean = overlap;
- continue;
-
- case 4: /* overlap starts before lock */
- /*
- * Add lock after overlap on the list.
- */
- lock->lf_next = overlap->lf_next;
- overlap->lf_next = lock;
- overlap->lf_end = lock->lf_start - 1;
- prev = &lock->lf_next;
- lf_wakelock (overlap, fhdl);
- overlap->create_lock_obj ();
- lock->create_lock_obj ();
- needtolink = 0;
- continue;
-
- case 5: /* overlap ends after lock */
- /*
- * Add the new lock before overlap.
- */
- if (needtolink) {
- *prev = lock;
- lock->lf_next = overlap;
- }
- overlap->lf_start = lock->lf_end + 1;
- lf_wakelock (overlap, fhdl);
- lock->create_lock_obj ();
- overlap->create_lock_obj ();
- break;
- }
- break;
- }
- return 0;
-}
-
-/*
- * Remove a byte-range lock on an inode_t.
- *
- * Generally, find the lock (or an overlap to that lock)
- * and remove it (or shrink it), then wakeup anyone we can.
- */
-static int
-lf_clearlock (lockf_t *unlock, lockf_t **clean, HANDLE fhdl)
-{
- lockf_t **head = unlock->lf_head;
- lockf_t *lf = *head;
- lockf_t *overlap, **prev;
- int ovcase;
-
- if (lf == NOLOCKF)
- return 0;
- prev = head;
- while ((ovcase = lf_findoverlap (lf, unlock, SELF, &prev, &overlap)))
- {
- /*
- * Wakeup the list of locks to be retried.
- */
- lf_wakelock (overlap, fhdl);
-
- switch (ovcase)
- {
- case 1: /* overlap == lock */
- *prev = overlap->lf_next;
- overlap->lf_next = *clean;
- *clean = overlap;
- break;
-
- case 2: /* overlap contains lock: split it */
- if (overlap->lf_start == unlock->lf_start)
- {
- overlap->lf_start = unlock->lf_end + 1;
- overlap->create_lock_obj ();
- break;
- }
- lf_split (overlap, unlock, clean);
- overlap->lf_next = unlock->lf_next;
- overlap->create_lock_obj ();
- if (overlap->lf_next && !overlap->lf_next->lf_obj)
- overlap->lf_next->create_lock_obj ();
- break;
-
- case 3: /* lock contains overlap */
- *prev = overlap->lf_next;
- lf = overlap->lf_next;
- overlap->lf_next = *clean;
- *clean = overlap;
- continue;
-
- case 4: /* overlap starts before lock */
- overlap->lf_end = unlock->lf_start - 1;
- prev = &overlap->lf_next;
- lf = overlap->lf_next;
- overlap->create_lock_obj ();
- continue;
-
- case 5: /* overlap ends after lock */
- overlap->lf_start = unlock->lf_end + 1;
- overlap->create_lock_obj ();
- break;
- }
- break;
- }
- return 0;
-}
-
-/*
- * Check whether there is a blocking lock,
- * and if so return its process identifier.
- */
-static int
-lf_getlock (lockf_t *lock, inode_t *node, struct flock *fl)
-{
- lockf_t *block;
- tmp_pathbuf tp;
-
- /* Create temporary space for the all locks list. */
- node->i_all_lf = (lockf_t *) (void * ) tp.w_get ();
- if ((block = lf_getblock (lock, node)))
- {
- if (block->lf_obj)
- block->close_lock_obj ();
- fl->l_type = block->lf_type;
- fl->l_whence = SEEK_SET;
- fl->l_start = block->lf_start;
- if (block->lf_end == -1)
- fl->l_len = 0;
- else
- fl->l_len = block->lf_end - block->lf_start + 1;
- if (block->lf_flags & F_POSIX)
- fl->l_pid = (pid_t) block->lf_id;
- else
- fl->l_pid = -1;
- }
- else
- fl->l_type = F_UNLCK;
- return 0;
-}
-
-/*
- * Walk the list of locks for an inode_t and
- * return the first blocking lock.
- */
-static lockf_t *
-lf_getblock (lockf_t *lock, inode_t *node)
-{
- lockf_t **prev, *overlap;
- lockf_t *lf = node->get_all_locks_list ();
- int ovcase;
-
- prev = lock->lf_head;
- while ((ovcase = lf_findoverlap (lf, lock, OTHERS, &prev, &overlap)))
- {
- /*
- * We've found an overlap, see if it blocks us
- */
- if ((lock->lf_type == F_WRLCK || overlap->lf_type == F_WRLCK))
- {
- /* Open the event object for synchronization. */
- if (overlap->open_lock_obj ())
- {
- /* Check if the event object is signalled. If so, the overlap
- doesn't actually exist anymore. There are just a few open
- handles left. */
- if (!IsEventSignalled (overlap->lf_obj))
- return overlap;
- overlap->close_lock_obj ();
- }
- }
- /*
- * Nope, point to the next one on the list and
- * see if it blocks us
- */
- lf = overlap->lf_next;
- }
- return NOLOCKF;
-}
-
-/*
- * Walk the list of locks for an inode_t to
- * find an overlapping lock (if any).
- *
- * NOTE: this returns only the FIRST overlapping lock. There
- * may be more than one.
- */
-static int
-lf_findoverlap (lockf_t *lf, lockf_t *lock, int type, lockf_t ***prev,
- lockf_t **overlap)
-{
- off_t start, end;
-
- *overlap = lf;
- if (lf == NOLOCKF)
- return 0;
-
- start = lock->lf_start;
- end = lock->lf_end;
- while (lf != NOLOCKF)
- {
- if (((type & SELF) && lf->lf_id != lock->lf_id)
- || ((type & OTHERS) && lf->lf_id == lock->lf_id)
- /* As on Linux: POSIX locks and BSD flock locks don't interact. */
- || (lf->lf_flags & (F_POSIX | F_FLOCK))
- != (lock->lf_flags & (F_POSIX | F_FLOCK)))
- {
- *prev = &lf->lf_next;
- *overlap = lf = lf->lf_next;
- continue;
- }
- /*
- * OK, check for overlap
- *
- * Six cases:
- * 0) no overlap
- * 1) overlap == lock
- * 2) overlap contains lock
- * 3) lock contains overlap
- * 4) overlap starts before lock
- * 5) overlap ends after lock
- */
- if ((lf->lf_end != -1 && start > lf->lf_end) ||
- (end != -1 && lf->lf_start > end))
- {
- /* Case 0 */
- if ((type & SELF) && end != -1 && lf->lf_start > end)
- return 0;
- *prev = &lf->lf_next;
- *overlap = lf = lf->lf_next;
- continue;
- }
- if ((lf->lf_start == start) && (lf->lf_end == end))
- {
- /* Case 1 */
- return 1;
- }
- if ((lf->lf_start <= start) && (end != -1) &&
- ((lf->lf_end >= end) || (lf->lf_end == -1)))
- {
- /* Case 2 */
- return 2;
- }
- if (start <= lf->lf_start && (end == -1 ||
- (lf->lf_end != -1 && end >= lf->lf_end)))
- {
- /* Case 3 */
- return 3;
- }
- if ((lf->lf_start < start) &&
- ((lf->lf_end >= start) || (lf->lf_end == -1)))
- {
- /* Case 4 */
- return 4;
- }
- if ((lf->lf_start > start) && (end != -1) &&
- ((lf->lf_end > end) || (lf->lf_end == -1)))
- {
- /* Case 5 */
- return 5;
- }
- api_fatal ("lf_findoverlap: default\n");
- }
- return 0;
-}
-
-/*
- * Split a lock and a contained region into
- * two or three locks as necessary.
- */
-static void
-lf_split (lockf_t *lock1, lockf_t *lock2, lockf_t **split)
-{
- lockf_t *splitlock;
-
- /*
- * Check to see if spliting into only two pieces.
- */
- if (lock1->lf_start == lock2->lf_start)
- {
- lock1->lf_start = lock2->lf_end + 1;
- lock2->lf_next = lock1;
- return;
- }
- if (lock1->lf_end == lock2->lf_end)
- {
- lock1->lf_end = lock2->lf_start - 1;
- lock2->lf_next = lock1->lf_next;
- lock1->lf_next = lock2;
- return;
- }
- /*
- * Make a new lock consisting of the last part of
- * the encompassing lock. We use the preallocated
- * splitlock so we don't have to block.
- */
- splitlock = *split;
- assert (splitlock != NULL);
- *split = splitlock->lf_next;
- memcpy (splitlock, lock1, sizeof *splitlock);
- /* We have to unset the obj HANDLE here which has been copied by the
- above memcpy, so that the calling function recognizes the new object.
- See post-lf_split handling in lf_setlock and lf_clearlock. */
- splitlock->lf_obj = NULL;
- splitlock->lf_start = lock2->lf_end + 1;
- lock1->lf_end = lock2->lf_start - 1;
- /*
- * OK, now link it in
- */
- splitlock->lf_next = lock1->lf_next;
- lock2->lf_next = splitlock;
- lock1->lf_next = lock2;
-}
-
-/*
- * Wakeup a blocklist
- * Cygwin: Just signal the lock which gets removed. This unblocks
- * all threads waiting for this lock.
- */
-static void
-lf_wakelock (lockf_t *listhead, HANDLE fhdl)
-{
- listhead->del_lock_obj (fhdl, true);
-}
-
-extern "C" int
-flock (int fd, int operation)
-{
- int res = -1;
- int cmd;
- struct flock fl = { 0, SEEK_SET, 0, 0, 0 };
-
- __try
- {
- cygheap_fdget cfd (fd, true);
- if (cfd < 0)
- __leave;
-
- cmd = (operation & LOCK_NB) ? F_SETLK : F_SETLKW;
- switch (operation & (~LOCK_NB))
- {
- case LOCK_EX:
- fl.l_type = F_WRLCK;
- break;
- case LOCK_SH:
- fl.l_type = F_RDLCK;
- break;
- case LOCK_UN:
- fl.l_type = F_UNLCK;
- break;
- default:
- set_errno (EINVAL);
- __leave;
- }
- if (!cfd->mandatory_locking ())
- fl.l_type |= F_FLOCK;
- res = cfd->mandatory_locking () ? cfd->mand_lock (cmd, &fl)
- : cfd->lock (cmd, &fl);
- if ((res == -1) && ((get_errno () == EAGAIN) || (get_errno () == EACCES)))
- set_errno (EWOULDBLOCK);
- }
- __except (EFAULT) {}
- __endtry
- syscall_printf ("%R = flock(%d, %d)", res, fd, operation);
- return res;
-}
-
-extern "C" int
-lockf (int filedes, int function, off_t size)
-{
- int res = -1;
- int cmd;
- struct flock fl;
-
- pthread_testcancel ();
-
- __try
- {
- cygheap_fdget cfd (filedes, true);
- if (cfd < 0)
- __leave;
-
- fl.l_start = 0;
- fl.l_len = size;
- fl.l_whence = SEEK_CUR;
-
- switch (function)
- {
- case F_ULOCK:
- cmd = F_SETLK;
- fl.l_type = F_UNLCK;
- break;
- case F_LOCK:
- cmd = F_SETLKW;
- fl.l_type = F_WRLCK;
- break;
- case F_TLOCK:
- cmd = F_SETLK;
- fl.l_type = F_WRLCK;
- break;
- case F_TEST:
- fl.l_type = F_WRLCK;
- if (cfd->lock (F_GETLK, &fl) == -1)
- __leave;
- if (fl.l_type == F_UNLCK || fl.l_pid == getpid ())
- res = 0;
- else
- errno = EAGAIN;
- __leave;
- /* NOTREACHED */
- default:
- errno = EINVAL;
- __leave;
- /* NOTREACHED */
- }
- res = cfd->mandatory_locking () ? cfd->mand_lock (cmd, &fl)
- : cfd->lock (cmd, &fl);
- }
- __except (EFAULT) {}
- __endtry
- syscall_printf ("%R = lockf(%d, %d, %D)", res, filedes, function, size);
- return res;
-}
-
-/* This is the fcntl lock implementation for mandatory locks using the
- Windows mandatory locking functions. For the UNIX-like advisory locking
- implementation see the fhandler_disk_file::lock method earlier in this
- file. */
-struct lock_parms {
- HANDLE h;
- PIO_STATUS_BLOCK pio;
- PLARGE_INTEGER poff;
- PLARGE_INTEGER plen;
- BOOL type;
- NTSTATUS status;
-};
-
-static DWORD WINAPI
-blocking_lock_thr (LPVOID param)
-{
- struct lock_parms *lp = (struct lock_parms *) param;
- lp->status = NtLockFile (lp->h, NULL, NULL, NULL, lp->pio, lp->poff,
- lp->plen, 0, FALSE, lp->type);
- return 0;
-}
-
-int
-fhandler_base::mand_lock (int, struct flock *)
-{
- set_errno (EINVAL);
- return -1;
-}
-
-int
-fhandler_disk_file::mand_lock (int a_op, struct flock *fl)
-{
- NTSTATUS status;
- IO_STATUS_BLOCK io;
- FILE_POSITION_INFORMATION fpi;
- FILE_STANDARD_INFORMATION fsi;
- off_t startpos;
- LARGE_INTEGER offset;
- LARGE_INTEGER length;
-
- /* Calculate where to start from, then adjust this by fl->l_start. */
- switch (fl->l_whence)
- {
- case SEEK_SET:
- startpos = 0;
- break;
- case SEEK_CUR:
- status = NtQueryInformationFile (get_handle (), &io, &fpi, sizeof fpi,
- FilePositionInformation);
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- return -1;
- }
- startpos = fpi.CurrentByteOffset.QuadPart;
- break;
- case SEEK_END:
- status = NtQueryInformationFile (get_handle (), &io, &fsi, sizeof fsi,
- FileStandardInformation);
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- return -1;
- }
- startpos = fsi.EndOfFile.QuadPart;
- break;
- default:
- set_errno (EINVAL);
- return -1;
- }
- /* Adjust start and length until they make sense. */
- offset.QuadPart = startpos + fl->l_start;
- if (fl->l_len < 0)
- {
- offset.QuadPart -= fl->l_len;
- length.QuadPart = -fl->l_len;
- }
- else
- length.QuadPart = fl->l_len;
- if (offset.QuadPart < 0)
- {
- length.QuadPart -= -offset.QuadPart;
- if (length.QuadPart <= 0)
- {
- set_errno (EINVAL);
- return -1;
- }
- offset.QuadPart = 0;
- }
- /* Special case if len == 0. For POSIX this means lock to the end of
- the entire file, even when file grows later. */
- if (length.QuadPart == 0)
- length.QuadPart = UINT64_MAX;
- /* Action! */
- if (fl->l_type == F_UNLCK)
- {
- status = NtUnlockFile (get_handle (), &io, &offset, &length, 0);
- if (status == STATUS_RANGE_NOT_LOCKED) /* Not an error */
- status = STATUS_SUCCESS;
- }
- else if (a_op == F_SETLKW)
- {
- /* We open file handles synchronously. To allow asynchronous operation
- the file locking functions require a file handle opened in asynchronous
- mode. Since Windows locks are per-process/per-file object, we can't
- open another handle asynchrously and lock/unlock using that handle:
- The original file handle would not have placed the lock and would be
- restricted by the lock like any other file handle.
- So, what we do here is to start a thread which calls the potentially
- blocking NtLockFile call. Then we wait for thread completion in an
- interruptible fashion. */
- OBJECT_ATTRIBUTES attr;
- HANDLE evt;
- struct lock_parms lp = { get_handle (), &io, &offset, &length,
- fl->l_type == F_WRLCK, 0 };
- cygthread *thr = NULL;
-
- InitializeObjectAttributes (&attr, NULL, 0, NULL, NULL);
- status = NtCreateEvent (&evt, EVENT_ALL_ACCESS, &attr,
- NotificationEvent, FALSE);
- if (evt)
- thr = new cygthread (blocking_lock_thr, &lp, "blk_lock", evt);
- if (!thr)
- {
- /* Thread creation failed. Fall back to blocking lock call. */
- if (evt)
- NtClose (evt);
- status = NtLockFile (get_handle (), NULL, NULL, NULL, &io, &offset,
- &length, 0, FALSE, fl->l_type == F_WRLCK);
- }
- else
- {
- /* F_SETLKW and lock cannot be established. Wait until the lock can
- be established, or a signal request arrived. We deliberately
- don't handle thread cancel requests here. */
- DWORD wait_res = cygwait (evt, INFINITE, cw_sig | cw_sig_eintr);
- NtClose (evt);
- switch (wait_res)
- {
- case WAIT_OBJECT_0:
- /* Fetch completion status. */
- status = lp.status;
- thr->detach ();
- break;
- default:
- /* Signal arrived. */
- /* Starting with Vista, CancelSynchronousIo works, and we wait
- for the thread to exit. lp.status will be either
- STATUS_SUCCESS, or STATUS_CANCELLED. We only call
- NtUnlockFile in the first case.
- Prior to Vista, CancelSynchronousIo doesn't exist, so we
- terminated the thread and always call NtUnlockFile since
- lp.status was 0 to begin with. */
- if (CancelSynchronousIo (thr->thread_handle ()))
- thr->detach ();
- else
- thr->terminate_thread ();
- if (NT_SUCCESS (lp.status))
- NtUnlockFile (get_handle (), &io, &offset, &length, 0);
- /* Per SUSv4: If a signal is received while fcntl is waiting,
- fcntl shall be interrupted. Upon return from the signal
- handler, fcntl shall return -1 with errno set to EINTR,
- and the lock operation shall not be done. */
- _my_tls.call_signal_handler ();
- set_errno (EINTR);
- return -1;
- }
- }
- }
- else
- {
- status = NtLockFile (get_handle (), NULL, NULL, NULL, &io, &offset,
- &length, 0, TRUE, fl->l_type == F_WRLCK);
- if (a_op == F_GETLK)
- {
- /* This is non-atomic, but there's no other way on Windows to detect
- if another lock is blocking our lock, other than trying to place
- the lock, and then having to unlock it again. */
- if (NT_SUCCESS (status))
- {
- NtUnlockFile (get_handle (), &io, &offset, &length, 0);
- fl->l_type = F_UNLCK;
- }
- else
- {
- /* FAKE! FAKE! FAKE! */
- fl->l_type = F_WRLCK;
- fl->l_whence = SEEK_SET;
- fl->l_start = offset.QuadPart;
- fl->l_len = length.QuadPart;
- fl->l_pid = (pid_t) -1;
- }
- status = STATUS_SUCCESS;
- }
- }
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- return -1;
- }
- return 0;
-}
diff --git a/winsup/cygwin/fork.cc b/winsup/cygwin/fork.cc
deleted file mode 100644
index faccb482c..000000000
--- a/winsup/cygwin/fork.cc
+++ /dev/null
@@ -1,710 +0,0 @@
-/* fork.cc
-
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include <stdio.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include "cygerrno.h"
-#include "sigproc.h"
-#include "pinfo.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "child_info.h"
-#include "cygtls.h"
-#include "tls_pbuf.h"
-#include "dll_init.h"
-#include "cygmalloc.h"
-#include "ntdll.h"
-
-#define NPIDS_HELD 4
-
-/* Timeout to wait for child to start, parent to init child, etc. */
-/* FIXME: Once things stabilize, bump up to a few minutes. */
-#define FORK_WAIT_TIMEOUT (300 * 1000) /* 300 seconds */
-
-class frok
-{
- bool load_dlls;
- child_info_fork ch;
- const char *errmsg;
- int child_pid;
- int this_errno;
- HANDLE hchild;
- int __stdcall parent (volatile char * volatile here);
- int __stdcall child (volatile char * volatile here);
- bool error (const char *fmt, ...);
- friend int fork ();
-};
-
-static void
-resume_child (HANDLE forker_finished)
-{
- SetEvent (forker_finished);
- debug_printf ("signalled child");
- return;
-}
-
-/* Notify parent that it is time for the next step. */
-static void __stdcall
-sync_with_parent (const char *s, bool hang_self)
-{
- debug_printf ("signalling parent: %s", s);
- fork_info->ready (false);
- if (hang_self)
- {
- HANDLE h = fork_info->forker_finished;
- /* Wait for the parent to fill in our stack and heap.
- Don't wait forever here. If our parent dies we don't want to clog
- the system. If the wait fails, we really can't continue so exit. */
- DWORD psync_rc = WaitForSingleObject (h, FORK_WAIT_TIMEOUT);
- debug_printf ("awake");
- switch (psync_rc)
- {
- case WAIT_TIMEOUT:
- api_fatal ("WFSO timed out %s", s);
- break;
- case WAIT_FAILED:
- if (GetLastError () == ERROR_INVALID_HANDLE &&
- WaitForSingleObject (fork_info->forker_finished, 1) != WAIT_FAILED)
- break;
- api_fatal ("WFSO failed %s, fork_finished %p, %E", s,
- fork_info->forker_finished);
- break;
- default:
- debug_printf ("no problems");
- break;
- }
- }
-}
-
-bool
-frok::error (const char *fmt, ...)
-{
- DWORD exit_code = ch.exit_code;
- if (!exit_code && hchild)
- {
- exit_code = ch.proc_retry (hchild);
- if (!exit_code)
- return false;
- }
- if (exit_code != EXITCODE_FORK_FAILED)
- {
- va_list ap;
- static char buf[NT_MAX_PATH + 256];
- va_start (ap, fmt);
- __small_vsprintf (buf, fmt, ap);
- errmsg = buf;
- }
- return true;
-}
-
-/* Set up a pipe which will track the life of a "pid" through
- even after we've exec'ed. */
-void
-child_info::prefork (bool detached)
-{
- if (!detached)
- {
- if (!CreatePipe (&rd_proc_pipe, &wr_proc_pipe, &sec_none_nih, 16))
- api_fatal ("prefork: couldn't create pipe process tracker, %E");
-
- if (!SetHandleInformation (wr_proc_pipe, HANDLE_FLAG_INHERIT,
- HANDLE_FLAG_INHERIT))
- api_fatal ("prefork: couldn't set process pipe(%p) inherit state, %E",
- wr_proc_pipe);
- ProtectHandle1 (rd_proc_pipe, rd_proc_pipe);
- ProtectHandle1 (wr_proc_pipe, wr_proc_pipe);
- }
-}
-
-int __stdcall
-frok::child (volatile char * volatile here)
-{
- HANDLE& hParent = ch.parent;
- extern void fixup_hooks_after_fork ();
- extern void fixup_timers_after_fork ();
-
- /* NOTE: Logically this belongs in dll_list::load_after_fork, but by
- doing it here, before the first sync_with_parent, we can exploit
- the existing retry mechanism in hopes of getting a more favorable
- address space layout next time. */
- dlls.reserve_space ();
-
- sync_with_parent ("after longjmp", true);
- debug_printf ("child is running. pid %d, ppid %d, stack here %p",
- myself->pid, myself->ppid, __builtin_frame_address (0));
- sigproc_printf ("hParent %p, load_dlls %d", hParent, load_dlls);
-
- /* If we've played with the stack, stacksize != 0. That means that
- fork() was invoked from other than the main thread. Make sure that
- the threadinfo information is properly set up. */
- if (fork_info->stackaddr)
- {
- _main_tls = &_my_tls;
- _main_tls->init_thread (NULL, NULL);
- _main_tls->local_clib = *_impure_ptr;
- _impure_ptr = &_main_tls->local_clib;
- }
-
- set_cygwin_privileges (hProcToken);
- clear_procimptoken ();
- cygheap->user.reimpersonate ();
-
-#ifdef DEBUGGING
- if (GetEnvironmentVariableA ("FORKDEBUG", NULL, 0))
- try_to_debug ();
- char buf[80];
- /* This is useful for debugging fork problems. Use gdb to attach to
- the pid reported here. */
- if (GetEnvironmentVariableA ("CYGWIN_FORK_SLEEP", buf, sizeof (buf)))
- {
- small_printf ("Sleeping %d after fork, pid %u\n", atoi (buf), GetCurrentProcessId ());
- Sleep (atoi (buf));
- }
-#endif
-
- MALLOC_CHECK;
-
- /* Incredible but true: If we use sockets and SYSV IPC shared memory,
- there's a good chance that a duplicated socket in the child occupies
- memory which is needed to duplicate shared memory from the parent
- process, if the shared memory hasn't been duplicated already.
- The same goes very likely for "normal" mmap shared memory, too, but
- with SYSV IPC it was the first time observed. So, *never* fixup
- fdtab before fixing up shared memory. */
- if (fixup_shms_after_fork ())
- api_fatal ("recreate_shm areas after fork failed");
-
- MALLOC_CHECK;
-
- /* If we haven't dynamically loaded any dlls, just signal
- the parent. Otherwise, load all the dlls, tell the parent
- that we're done, and wait for the parent to fill in the.
- loaded dlls' data/bss. */
- if (!load_dlls)
- {
- cygheap->fdtab.fixup_after_fork (hParent);
- sync_with_parent ("performed fork fixup", false);
- }
- else
- {
- dlls.load_after_fork (hParent);
- cygheap->fdtab.fixup_after_fork (hParent);
- sync_with_parent ("loaded dlls", true);
- }
-
- init_console_handler (myself->ctty > 0);
- ForceCloseHandle1 (fork_info->forker_finished, forker_finished);
-
- pthread::atforkchild ();
- fixup_timers_after_fork ();
- cygbench ("fork-child");
- ld_preload ();
- fixup_hooks_after_fork ();
- _my_tls.fixup_after_fork ();
- /* Clear this or the destructor will close them. In the case of
- rd_proc_pipe that would be an invalid handle. In the case of
- wr_proc_pipe it would be == my_wr_proc_pipe. Both would be bad. */
- ch.rd_proc_pipe = ch.wr_proc_pipe = NULL;
- cygwin_finished_initializing = true;
- return 0;
-}
-
-#define NO_SLOW_PID_REUSE
-#ifndef NO_SLOW_PID_REUSE
-static void
-slow_pid_reuse (HANDLE h)
-{
- static NO_COPY HANDLE last_fork_procs[NPIDS_HELD];
- static NO_COPY unsigned nfork_procs;
-
- if (nfork_procs >= (sizeof (last_fork_procs) / sizeof (last_fork_procs [0])))
- nfork_procs = 0;
- /* Keep a list of handles to child processes sitting around to prevent
- Windows from reusing the same pid n times in a row. Having the same pids
- close in succesion confuses bash. Keeping a handle open will stop
- windows from reusing the same pid. */
- if (last_fork_procs[nfork_procs])
- ForceCloseHandle1 (last_fork_procs[nfork_procs], fork_stupidity);
- if (DuplicateHandle (GetCurrentProcess (), h,
- GetCurrentProcess (), &last_fork_procs[nfork_procs],
- 0, FALSE, DUPLICATE_SAME_ACCESS))
- ProtectHandle1 (last_fork_procs[nfork_procs], fork_stupidity);
- else
- {
- last_fork_procs[nfork_procs] = NULL;
- system_printf ("couldn't create last_fork_proc, %E");
- }
- nfork_procs++;
-}
-#endif
-
-int __stdcall
-frok::parent (volatile char * volatile stack_here)
-{
- HANDLE forker_finished;
- DWORD rc;
- child_pid = -1;
- this_errno = 0;
- bool fix_impersonation = false;
- pinfo child;
-
- int c_flags = GetPriorityClass (GetCurrentProcess ());
- debug_printf ("priority class %d", c_flags);
- /* Per MSDN, this must be specified even if lpEnvironment is set to NULL,
- otherwise UNICODE characters in the parent environment are not copied
- correctly to the child. Omitting it may scramble %PATH% on non-English
- systems. */
- c_flags |= CREATE_UNICODE_ENVIRONMENT;
-
- errmsg = NULL;
- hchild = NULL;
-
- /* If we don't have a console, then don't create a console for the
- child either. */
- HANDLE console_handle = CreateFile ("CONOUT$", GENERIC_WRITE,
- FILE_SHARE_READ | FILE_SHARE_WRITE,
- &sec_none_nih, OPEN_EXISTING,
- FILE_ATTRIBUTE_NORMAL, NULL);
-
- if (console_handle != INVALID_HANDLE_VALUE)
- CloseHandle (console_handle);
- else
- c_flags |= DETACHED_PROCESS;
-
- /* Some file types (currently only sockets) need extra effort in the
- parent after CreateProcess and before copying the datastructures
- to the child. So we have to start the child in suspend state,
- unfortunately, to avoid a race condition. */
- if (cygheap->fdtab.need_fixup_before ())
- c_flags |= CREATE_SUSPENDED;
-
- /* Remember if we need to load dynamically linked dlls.
- We do this here so that this information will be available
- in the parent and, when the stack is copied, in the child. */
- load_dlls = dlls.reload_on_fork && dlls.loaded_dlls;
-
- forker_finished = CreateEvent (&sec_all, FALSE, FALSE, NULL);
- if (forker_finished == NULL)
- {
- this_errno = geterrno_from_win_error ();
- error ("unable to allocate forker_finished event");
- return -1;
- }
-
- ProtectHandleINH (forker_finished);
-
- ch.forker_finished = forker_finished;
-
- PTEB teb = NtCurrentTeb ();
- ch.stackbottom = _tlsbase;
- ch.stacktop = (void *) _tlstop;
- ch.stackaddr = teb->DeallocationStack;
- ch.guardsize = 0;
- if (&_my_tls != _main_tls)
- {
- /* We have not been started from the main thread. Fetch the
- information required to set up the thread stack identically
- in the child. */
- if (!ch.stackaddr)
- {
- /* Pthread with application-provided stack. Don't set up a
- PAGE_GUARD page. guardsize == -1 is used in alloc_stack_hard_way
- to recognize this type of stack. */
- ch.stackaddr = _my_tls.tid->attr.stackaddr;
- ch.guardsize = (size_t) -1;
- }
- else if (_my_tls.tid)
- /* If it's a pthread, fetch guardsize from thread attributes. */
- ch.guardsize = _my_tls.tid->attr.guardsize;
- }
- debug_printf ("stack - bottom %p, top %p, addr %p, guardsize %ly",
- ch.stackbottom, ch.stacktop, ch.stackaddr, ch.guardsize);
-
- PROCESS_INFORMATION pi;
- STARTUPINFOW si;
-
- memset (&si, 0, sizeof (si));
- si.cb = sizeof si;
-
- si.lpReserved2 = (LPBYTE) &ch;
- si.cbReserved2 = sizeof (ch);
-
- syscall_printf ("CreateProcessW (%W, %W, 0, 0, 1, %y, 0, 0, %p, %p)",
- myself->progname, myself->progname, c_flags, &si, &pi);
- bool locked = __malloc_lock ();
-
- /* Remove impersonation */
- cygheap->user.deimpersonate ();
- fix_impersonation = true;
- ch.refresh_cygheap ();
- ch.prefork (); /* set up process tracking pipes. */
-
- while (1)
- {
- hchild = NULL;
- rc = CreateProcessW (myself->progname, /* image to run */
- GetCommandLineW (), /* Take same space for command
- line as in parent to make
- sure child stack is allocated
- in the same memory location
- as in parent. */
- &sec_none_nih,
- &sec_none_nih,
- TRUE, /* inherit handles from parent */
- c_flags,
- NULL, /* environment filled in later */
- 0, /* use current drive/directory */
- &si,
- &pi);
-
- if (rc)
- debug_printf ("forked pid %u", pi.dwProcessId);
- else
- {
- this_errno = geterrno_from_win_error ();
- error ("CreateProcessW failed for '%W'", myself->progname);
- memset (&pi, 0, sizeof (pi));
- goto cleanup;
- }
-
- if (cygheap->fdtab.need_fixup_before ())
- {
- cygheap->fdtab.fixup_before_fork (pi.dwProcessId);
- ResumeThread (pi.hThread);
- }
-
- CloseHandle (pi.hThread);
- hchild = pi.hProcess;
-
- /* Protect the handle but name it similarly to the way it will
- be called in subproc handling. */
- ProtectHandle1 (hchild, childhProc);
-
- strace.write_childpid (pi.dwProcessId);
-
- /* Wait for subproc to initialize itself. */
- if (!ch.sync (pi.dwProcessId, hchild, FORK_WAIT_TIMEOUT))
- {
- if (!error ("forked process %u died unexpectedly, retry %d, exit code %y",
- pi.dwProcessId, ch.retry, ch.exit_code))
- continue;
- this_errno = EAGAIN;
- goto cleanup;
- }
- break;
- }
-
- /* Restore impersonation */
- cygheap->user.reimpersonate ();
- fix_impersonation = false;
-
- child_pid = cygwin_pid (pi.dwProcessId);
- child.init (child_pid, PID_IN_USE | PID_NEW, NULL);
-
- if (!child)
- {
- this_errno = get_errno () == ENOMEM ? ENOMEM : EAGAIN;
- syscall_printf ("pinfo failed");
- goto cleanup;
- }
-
- child->nice = myself->nice;
-
- /* Initialize things that are done later in dll_crt0_1 that aren't done
- for the forkee. */
- wcscpy (child->progname, myself->progname);
-
- /* Fill in fields in the child's process table entry. */
- child->dwProcessId = pi.dwProcessId;
- child.hProcess = hchild;
- ch.postfork (child);
-
- /* Hopefully, this will succeed. The alternative to doing things this
- way is to reserve space prior to calling CreateProcess and then fill
- it in afterwards. This requires more bookkeeping than I like, though,
- so we'll just do it the easy way. So, terminate any child process if
- we can't actually record the pid in the internal table. */
- if (!child.remember (false))
- {
- TerminateProcess (hchild, 1);
- this_errno = EAGAIN;
-#ifdef DEBUGGING0
- error ("child remember failed");
-#endif
- goto cleanup;
- }
-
-#ifndef NO_SLOW_PID_REUSE
- slow_pid_reuse (hchild);
-#endif
-
- /* CHILD IS STOPPED */
- debug_printf ("child is alive (but stopped)");
-
-
- /* Initialize, in order: stack, dll data, dll bss.
- data, bss, heap were done earlier (in dcrt0.cc)
- Note: variables marked as NO_COPY will not be copied since they are
- placed in a protected segment. */
-
- MALLOC_CHECK;
- const void *impure_beg;
- const void *impure_end;
- const char *impure;
- if (&_my_tls == _main_tls)
- impure_beg = impure_end = impure = NULL;
- else
- {
- impure = "impure";
- impure_beg = _impure_ptr;
- impure_end = _impure_ptr + 1;
- }
- rc = child_copy (hchild, true,
- "stack", stack_here, ch.stackbottom,
- impure, impure_beg, impure_end,
- NULL);
-
- __malloc_unlock ();
- locked = false;
- MALLOC_CHECK;
- if (!rc)
- {
- this_errno = get_errno ();
- error ("pid %u, exitval %p", pi.dwProcessId, ch.exit_code);
- goto cleanup;
- }
-
- /* Now fill data/bss of any DLLs that were linked into the program. */
- for (dll *d = dlls.istart (DLL_LINK); d; d = dlls.inext ())
- {
- debug_printf ("copying data/bss of a linked dll");
- if (!child_copy (hchild, true,
- "linked dll data", d->p.data_start, d->p.data_end,
- "linked dll bss", d->p.bss_start, d->p.bss_end,
- NULL))
- {
- this_errno = get_errno ();
- error ("couldn't copy linked dll data/bss");
- goto cleanup;
- }
- }
-
- /* Start thread, and then wait for it to reload dlls. */
- resume_child (forker_finished);
- if (!ch.sync (child->pid, hchild, FORK_WAIT_TIMEOUT))
- {
- this_errno = EAGAIN;
- error ("died waiting for dll loading");
- goto cleanup;
- }
-
- /* If DLLs were loaded in the parent, then the child has reloaded all
- of them and is now waiting to have all of the individual data and
- bss sections filled in. */
- if (load_dlls)
- {
- /* CHILD IS STOPPED */
- /* write memory of reloaded dlls */
- for (dll *d = dlls.istart (DLL_LOAD); d; d = dlls.inext ())
- {
- debug_printf ("copying data/bss for a loaded dll");
- if (!child_copy (hchild, true,
- "loaded dll data", d->p.data_start, d->p.data_end,
- "loaded dll bss", d->p.bss_start, d->p.bss_end,
- NULL))
- {
- this_errno = get_errno ();
-#ifdef DEBUGGING
- error ("copying data/bss for a loaded dll");
-#endif
- goto cleanup;
- }
- }
- /* Start the child up again. */
- resume_child (forker_finished);
- }
-
- ForceCloseHandle (forker_finished);
- forker_finished = NULL;
-
- return child_pid;
-
-/* Common cleanup code for failure cases */
-cleanup:
- if (fix_impersonation)
- cygheap->user.reimpersonate ();
- if (locked)
- __malloc_unlock ();
-
- /* Remember to de-allocate the fd table. */
- if (hchild && !child.hProcess)
- ForceCloseHandle1 (hchild, childhProc);
- if (forker_finished)
- ForceCloseHandle (forker_finished);
- debug_printf ("returning -1");
- return -1;
-}
-
-extern "C" int
-fork ()
-{
- frok grouped;
-
- debug_printf ("entering");
- grouped.load_dlls = 0;
-
- int res;
- bool ischild = false;
-
- myself->set_has_pgid_children ();
-
- if (grouped.ch.parent == NULL)
- return -1;
- if (grouped.ch.subproc_ready == NULL)
- {
- system_printf ("unable to allocate subproc_ready event, %E");
- return -1;
- }
-
- {
- hold_everything held_everything (ischild);
- /* This tmp_pathbuf constructor is required here because the below setjmp
- magic will otherwise not restore the original buffer count values in
- the thread-local storage. A process forking too deeply will run into
- the problem to be out of temporary TLS path buffers. */
- tmp_pathbuf tp;
-
- if (!held_everything)
- {
- if (exit_state)
- Sleep (INFINITE);
- set_errno (EAGAIN);
- return -1;
- }
-
- /* Put the dll list in topological dependency ordering, in
- hopes that the child will have a better shot at loading dlls
- properly if it only has to deal with one at a time. */
- dlls.topsort ();
-
- ischild = !!setjmp (grouped.ch.jmp);
-
- volatile char * volatile stackp;
-#ifdef __x86_64__
- __asm__ volatile ("movq %%rsp,%0": "=r" (stackp));
-#else
- __asm__ volatile ("movl %%esp,%0": "=r" (stackp));
-#endif
-
- if (!ischild)
- res = grouped.parent (stackp);
- else
- {
- res = grouped.child (stackp);
- in_forkee = false;
- ischild = true; /* might have been reset by fork mem copy */
- }
- }
-
- MALLOC_CHECK;
- if (ischild)
- {
- myself->process_state |= PID_ACTIVE;
- myself->process_state &= ~(PID_INITIALIZING | PID_EXITED | PID_REAPED);
- }
- else if (res < 0)
- {
- if (!grouped.errmsg)
- syscall_printf ("fork failed - child pid %d, errno %d", grouped.child_pid, grouped.this_errno);
- else
- {
- char buf[strlen (grouped.errmsg) + sizeof ("child %d - , errno 4294967295 ")];
- strcpy (buf, "child %d - ");
- strcat (buf, grouped.errmsg);
- strcat (buf, ", errno %d");
- system_printf (buf, grouped.child_pid, grouped.this_errno);
- }
-
- set_errno (grouped.this_errno);
- }
- syscall_printf ("%R = fork()", res);
- return res;
-}
-#ifdef DEBUGGING
-void
-fork_init ()
-{
-}
-#endif /*DEBUGGING*/
-
-
-extern "C" int
-vfork ()
-{
- debug_printf ("stub called");
- return fork ();
-}
-
-/* Copy memory from one process to another. */
-
-bool
-child_copy (HANDLE hp, bool write, ...)
-{
- va_list args;
- va_start (args, write);
- static const char *huh[] = {"read", "write"};
-
- char *what;
- while ((what = va_arg (args, char *)))
- {
- char *low = va_arg (args, char *);
- char *high = va_arg (args, char *);
- SIZE_T todo = high - low;
- char *here;
-
- for (here = low; here < high; here += todo)
- {
- SIZE_T done = 0;
- if (here + todo > high)
- todo = high - here;
- int res;
- if (write)
- res = WriteProcessMemory (hp, here, here, todo, &done);
- else
- res = ReadProcessMemory (hp, here, here, todo, &done);
- debug_printf ("%s - hp %p low %p, high %p, res %d", what, hp, low, high, res);
- if (!res || todo != done)
- {
- if (!res)
- __seterrno ();
- /* If this happens then there is a bug in our fork
- implementation somewhere. */
- system_printf ("%s %s copy failed, %p..%p, done %lu, windows pid %u, %E",
- what, huh[write], low, high, done, myself->dwProcessId);
- goto err;
- }
- }
- }
-
- va_end (args);
- debug_printf ("done");
- return true;
-
- err:
- va_end (args);
- TerminateProcess (hp, 1);
- set_errno (EAGAIN);
- return false;
-}
diff --git a/winsup/cygwin/gcrt0.c b/winsup/cygwin/gcrt0.c
deleted file mode 100644
index 87c7d36ad..000000000
--- a/winsup/cygwin/gcrt0.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/* gcrt0.c
-
- Copyright 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-/*
- * This file is taken from Cygwin distribution. Please keep it in sync.
- * The differences should be within __MINGW32__ guard.
- */
-
-#include <sys/types.h>
-#include <stdlib.h>
-
-#ifdef __MINGW32__
-#include <_bsd_types.h>
-#endif
-
-extern u_char etext asm ("etext");
-extern u_char eprol asm ("__eprol");
-extern void _mcleanup (void);
-extern void monstartup (size_t, size_t);
-void _monstartup (void) __attribute__((__constructor__));
-
-/* startup initialization for -pg support */
-
-void
-_monstartup (void)
-{
- static int called;
-
- /* Guard against multiple calls that may happen if DLLs are linked
- with profile option set as well. Addede side benefit is that it
- makes profiling backward compatible (GCC used to emit a call to
- _monstartup when compiling main with profiling enabled). */
- if (called++)
- return;
-
- monstartup ((size_t) &eprol, (size_t) &etext);
- atexit (&_mcleanup);
-}
-
-asm (".text");
-asm ("__eprol:");
-
diff --git a/winsup/cygwin/gendef b/winsup/cygwin/gendef
deleted file mode 100755
index a1c549fc5..000000000
--- a/winsup/cygwin/gendef
+++ /dev/null
@@ -1,908 +0,0 @@
-#!/usr/bin/perl
-# Copyright 2003, 2004, 2005, 2006, 2008, 2009, 2010, 2011, 2012, 2013, 2014
-# Red Hat, Inc.
-#
-# This file is part of Cygwin.
-#
-# This software is a copyrighted work licensed under the terms of the
-# Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-# details.
-#
-use strict;
-use integer;
-use Getopt::Long;
-
-sub cleanup(@);
-
-my $cpu;
-my $output_def;
-my $tls_offsets;
-GetOptions('cpu=s'=>\$cpu, 'output-def=s'=>\$output_def, 'tlsoffsets=s'=>\$tls_offsets);
-
-$main::first = 0;
-if (!defined($cpu) || !defined($output_def) || !defined($tls_offsets)) {
- die "$0: missing required option\n";
-}
-
-require $tls_offsets;
-
-my $is64bit = $cpu eq 'x86_64';
-my $sym_prefix = $is64bit ? '' : '_';
-
-my @top = ();
-while (<>) {
- push(@top, cleanup $_);
- last if /^\s*exports$/oi;
-}
-my @in = cleanup <>;
-
-my %sigfe = ();
-my @data = ();
-my @nosigfuncs = ();
-my @text = ();
-for (@in) {
- chomp;
- s/\s+DATA$//o and do {
- push @data, $_;
- next;
- };
- if (/=/o) {
- if (s/\s+NOSIGFE\s*$//) {
- # nothing
- } elsif (s/\s+SIGFE(_MAYBE)?$//) {
- my $func = (split(' '))[2];
- my $maybe = (defined($1) ? lc $1 : '') . '_';
- $sigfe{$func} = '_sigfe' . $maybe . $func;
- }
- } else {
- my ($func, $sigfe) = m%^\s*(\S+)(?:\s+((?:NO)?SIGFE(?:_MAYBE)?))?$%o;
- if (defined($sigfe) && $sigfe =~ /^NO/o) {
- $_ = $func;
- } else {
- $sigfe ||= 'sigfe';
- $_ = '_' . lc($sigfe) . '_' . $func;
- $sigfe{$func} = $_;
- $_ = $func . ' = ' . $_;
- }
- }
- s/(\S)\s+(\S)/$1 $2/go;
- s/(\S)\s+$/$1/o;
- s/^\s+(\S)/$1/o;
- push @text, $_;
-}
-
-for (@text) {
- my ($alias, $func) = /^(\S+)\s+=\s+(\S+)\s*$/o;
- $_ = $alias . ' = ' . $sigfe{$func}
- if defined($func) && $sigfe{$func};
-}
-
-open OUT, '>', $output_def or die "$0: couldn't open \"$output_def\" - $!\n";
-push @top, (map {$_ . " DATA\n"} @data), (map {$_ . "\n"} @text);
-print OUT @top;
-close OUT;
-
-open SIGFE, '>', 'sigfe.s' or die "$0: couldn't open 'sigfe.s' file for writing - $!\n";
-
-for my $k (sort keys %sigfe) {
- print SIGFE fefunc($k, $sigfe{$k});
-}
-close SIGFE;
-
-sub fefunc {
- my $func = $sym_prefix . shift;
- my $fe = $sym_prefix . shift;
- my $sigfe_func;
- if ($is64bit) {
- $sigfe_func = ($fe =~ /^(.*)_${func}$/)[0];
- } else {
- $sigfe_func = ($fe =~ /^(.*)${func}$/)[0];
- }
- my $extra;
- my $res;
- if ($is64bit) {
- $res = <<EOF;
- .extern $func
- .global $fe
- .seh_proc $fe
-$fe:
- leaq $func(%rip),%r10
- pushq %r10
- .seh_pushreg %r10
- .seh_endprologue
- jmp $sigfe_func
- .seh_endproc
-
-EOF
- } else {
- $res = <<EOF;
- .extern $func
- .global $fe
-$fe:
- pushl \$$func
- jmp $sigfe_func
-
-EOF
- }
- if (!$main::first++) {
- if ($is64bit) {
- $res = <<EOF . longjmp () . $res;
- .text
-
- .seh_proc _sigfe_maybe
-_sigfe_maybe: # stack is aligned on entry!
- .seh_endprologue
- movq %gs:8,%r10 # location of bottom of stack
- leaq $tls::initialized(%r10),%r11 # where we will be looking
- cmpq %r11,%rsp # stack loc > than tls
- jge 0f # yep. we don't have a tls.
- movl $tls::initialized(%r10),%r11d
- cmpl \$0xc763173f,%r11d # initialized?
- je 1f
-0: ret
- .seh_endproc
-
- .seh_proc _sigfe
-_sigfe: # stack is aligned on entry!
- .seh_endprologue
- movq %gs:8,%r10 # location of bottom of stack
-1: movl \$1,%r11d # potential lock value
- xchgl %r11d,$tls::stacklock(%r10) # see if we can grab it
- movl %r11d,$tls::spinning(%r10) # flag if we are waiting for lock
- testl %r11d,%r11d # it will be zero
- jz 2f # if so
- pause
- jmp 1b # loop
-2: movq \$8,%rax # have the lock, now increment the
- xaddq %rax,$tls::stackptr(%r10) # stack pointer and get pointer
- leaq _sigbe(%rip),%r11 # new place to return to
- xchgq %r11,8(%rsp) # exchange with real return value
- movq %r11,(%rax) # store real return value on alt stack
- incl $tls::incyg(%r10)
- decl $tls::stacklock(%r10) # remove lock
- popq %rax # pop real function address from stack
- jmp *%rax # and jmp to it
- .seh_endproc
-
- .seh_proc _sigbe
-_sigbe: # return here after cygwin syscall
- # stack is aligned on entry!
- .seh_endprologue
- movq %gs:8,%r10 # address of bottom of tls
-1: movl \$1,%r11d # potential lock value
- xchgl %r11d,$tls::stacklock(%r10) # see if we can grab it
- movl %r11d,$tls::spinning(%r10) # flag if we are waiting for lock
- testl %r11d,%r11d # it will be zero
- jz 2f # if so
- pause
- jmp 1b # and loop
-2: movq \$-8,%r11 # now decrement aux stack
- xaddq %r11,$tls::stackptr(%r10) # and get pointer
- movq -8(%r11),%r11 # get return address from signal stack
- decl $tls::incyg(%r10)
- decl $tls::stacklock(%r10) # release lock
- jmp *%r11 # "return" to caller
- .seh_endproc
-
- .global sigdelayed
- .seh_proc sigdelayed
-sigdelayed:
- pushq %r10 # used for return address injection
- .seh_pushreg %r10
- pushq %rbp
- .seh_pushreg %rbp
- movq %rsp,%rbp
- pushf
- .seh_pushreg %rax # fake, there's no .seh_pushreg for the flags
- # stack is aligned or unaligned on entry!
- # make sure it is aligned from here on
- # We could be called from an interrupted thread which doesn't know
- # about his fate, so save and restore everything and the kitchen sink.
- andq \$0xfffffffffffffff0,%rsp
- .seh_setframe %rbp,0
- pushq %r15
- .seh_pushreg %r15
- pushq %r14
- .seh_pushreg %r14
- pushq %r13
- .seh_pushreg %r13
- pushq %r12
- .seh_pushreg %r12
- pushq %r11
- .seh_pushreg %r11
- pushq %r9
- .seh_pushreg %r9
- pushq %r8
- .seh_pushreg %r8
- pushq %rsi
- .seh_pushreg %rsi
- pushq %rdi
- .seh_pushreg %rdi
- pushq %rdx
- .seh_pushreg %rdx
- pushq %rcx
- .seh_pushreg %rcx
- pushq %rbx
- .seh_pushreg %rbx
- pushq %rax
- .seh_pushreg %rax
- subq \$0x128,%rsp
- .seh_stackalloc 0x128
- fnstcw 0x120(%rsp)
- movdqa %xmm15,0x110(%rsp)
- movdqa %xmm14,0x100(%rsp)
- movdqa %xmm13,0xf0(%rsp)
- movdqa %xmm12,0xe0(%rsp)
- movdqa %xmm11,0xd0(%rsp)
- movdqa %xmm10,0xc0(%rsp)
- movdqa %xmm9,0xb0(%rsp)
- movdqa %xmm8,0xa0(%rsp)
- movdqa %xmm7,0x90(%rsp)
- movdqa %xmm6,0x80(%rsp)
- movdqa %xmm5,0x70(%rsp)
- movdqa %xmm4,0x60(%rsp)
- movdqa %xmm3,0x50(%rsp)
- movdqa %xmm2,0x40(%rsp)
- movdqa %xmm1,0x30(%rsp)
- movdqa %xmm0,0x20(%rsp)
- .seh_endprologue
-
- movq %gs:8,%r12 # get tls
- movl $tls::saved_errno(%r12),%r15d # temporarily save saved_errno
- movq \$$tls::start_offset,%rcx # point to beginning of tls block
- addq %r12,%rcx # and store as first arg to method
- call _ZN7_cygtls19call_signal_handlerEv # call handler
-
-1: movl \$1,%r11d # potential lock value
- xchgl %r11d,$tls::stacklock(%r12) # see if we can grab it
- movl %r11d,$tls::spinning(%r12) # flag if we are waiting for lock
- testl %r11d,%r11d # it will be zero
- jz 2f # if so
- pause
- jmp 1b # and loop
-2: testl %r15d,%r15d # was saved_errno < 0
- jl 3f # yup. ignore it
- movq $tls::errno_addr(%r12),%r11
- movl %r15d,(%r11)
-3: movq \$-8,%r11 # now decrement aux stack
- xaddq %r11,$tls::stackptr(%r12) # and get pointer
- xorq %r10,%r10
- xchgq %r10,-8(%r11) # get return address from signal stack
- xorl %r11d,%r11d
- movl %r11d,$tls::incyg(%r12)
- movl %r11d,$tls::stacklock(%r12) # unlock
- movdqa 0x20(%rsp),%xmm0
- movdqa 0x30(%rsp),%xmm1
- movdqa 0x40(%rsp),%xmm2
- movdqa 0x50(%rsp),%xmm3
- movdqa 0x60(%rsp),%xmm4
- movdqa 0x70(%rsp),%xmm5
- movdqa 0x80(%rsp),%xmm6
- movdqa 0x90(%rsp),%xmm7
- movdqa 0xa0(%rsp),%xmm8
- movdqa 0xb0(%rsp),%xmm9
- movdqa 0xc0(%rsp),%xmm10
- movdqa 0xd0(%rsp),%xmm11
- movdqa 0xe0(%rsp),%xmm12
- movdqa 0xf0(%rsp),%xmm13
- movdqa 0x100(%rsp),%xmm14
- movdqa 0x110(%rsp),%xmm15
- fninit
- fldcw 0x120(%rsp)
- addq \$0x128,%rsp
- popq %rax
- popq %rbx
- popq %rcx
- popq %rdx
- popq %rdi
- popq %rsi
- popq %r8
- popq %r9
- popq %r11
- popq %r12
- popq %r13
- popq %r14
- popq %r15
- movq %rbp,%rsp
- subq \$8, %rsp
- popf
- popq %rbp
- xchgq %r10,(%rsp)
- ret
- .seh_endproc
-
-# _cygtls::pop
- .global _ZN7_cygtls3popEv
- .seh_proc _ZN7_cygtls3popEv
-_ZN7_cygtls3popEv:
- .seh_endprologue
- movq \$-8,%r11
- xaddq %r11,$tls::pstackptr(%rcx)
- movq -8(%r11),%rax
- ret
- .seh_endproc
-
-# _cygtls::lock
- .global _ZN7_cygtls4lockEv
- .seh_proc _ZN7_cygtls4lockEv
-_ZN7_cygtls4lockEv:
- pushq %r12
- .seh_pushreg %r12
- .seh_endprologue
- movq %rcx,%r12
-1: movl \$1,%r11d
- xchgl %r11d,$tls::pstacklock(%r12)
- testl %r11d,%r11d
- jz 2f
- pause
- jmp 1b
-2: popq %r12
- ret
- .seh_endproc
-
-# _cygtls::unlock
- .global _ZN7_cygtls6unlockEv
- .seh_proc _ZN7_cygtls6unlockEv
-_ZN7_cygtls6unlockEv:
- .seh_endprologue
- decl $tls::pstacklock(%rcx)
- ret
- .seh_endproc
-
-# _cygtls::locked
- .global _ZN7_cygtls6lockedEv
- .seh_proc _ZN7_cygtls6lockedEv
-_ZN7_cygtls6lockedEv:
- .seh_endprologue
- movl $tls::pstacklock(%rcx),%eax
- ret
- .seh_endproc
-
- .seh_proc stabilize_sig_stack
-stabilize_sig_stack:
- pushq %r12
- .seh_pushreg %r12
- subq \$0x20,%rsp
- .seh_stackalloc 32
- .seh_endprologue
- movq %gs:8,%r12
-1: movl \$1,%r10d
- xchgl %r10d,$tls::stacklock(%r12)
- movl %r10d,$tls::spinning(%r12) # flag if we are waiting for lock
- testl %r10d,%r10d
- jz 2f
- pause
- jmp 1b
-2: incl $tls::incyg(%r12)
- cmpl \$0,$tls::sig(%r12)
- jz 3f
- decl $tls::stacklock(%r12) # unlock
- movq \$$tls::start_offset,%rcx # point to beginning
- addq %r12,%rcx # of tls block
- call _ZN7_cygtls19call_signal_handlerEv
- jmp 1b
-3: decl $tls::incyg(%r12)
- addq \$0x20,%rsp
- movq %r12,%r11 # return tls addr in r11
- popq %r12
- ret
- .seh_endproc
-EOF
- } else {
- $res = <<EOF . longjmp () . $res;
- .text
-
-__sigfe_maybe:
- pushl %ebx
- pushl %edx
- movl %fs:4,%ebx # location of bottom of stack
- addl \$$tls::initialized,%ebx # where we will be looking
- cmpl %ebx,%esp # stack loc > than tls
- jge 0f # yep. we don't have a tls.
- subl \$$tls::initialized,%ebx # where we will be looking
- movl $tls::initialized(%ebx),%eax
- cmpl \$0xc763173f,%eax # initialized?
- je 1f
-0: popl %edx
- popl %ebx
- ret
-
-__sigfe:
- pushl %ebx
- pushl %edx
- movl %fs:4,%ebx # location of bottom of stack
-1: movl \$1,%eax # potential lock value
- xchgl %eax,$tls::stacklock(%ebx) # see if we can grab it
- movl %eax,$tls::spinning(%ebx) # flag if we are waiting for lock
- testl %eax,%eax # it will be zero
- jz 2f # if so
- call _yield # should be a short-time thing, so
- jmp 1b # sleep and loop
-2: movl \$4,%eax # have the lock, now increment the
- xadd %eax,$tls::stackptr(%ebx) # stack pointer and get pointer
- leal __sigbe,%edx # new place to return to
- xchgl %edx,12(%esp) # exchange with real return value
- movl %edx,(%eax) # store real return value on alt stack
- incl $tls::incyg(%ebx)
- decl $tls::stacklock(%ebx) # remove lock
- popl %edx # restore saved value
- popl %ebx
- ret
-
- .global __sigbe
-__sigbe: # return here after cygwin syscall
- pushl %eax # don't clobber
- pushl %ebx # tls pointer
-1: movl %fs:4,%ebx # address of bottom of tls
- movl \$1,%eax # potential lock value
- xchgl %eax,$tls::stacklock(%ebx) # see if we can grab it
- movl %eax,$tls::spinning(%ebx) # flag if we are waiting for lock
- testl %eax,%eax # it will be zero
- jz 2f # if so
- call _yield # sleep
- jmp 1b # and loop
-2: movl \$-4,%eax # now decrement aux stack
- xadd %eax,$tls::stackptr(%ebx) # and get pointer
- movl -4(%eax),%eax # get return address from signal stack
- xchgl %eax,4(%esp) # swap return address with saved eax
- decl $tls::incyg(%ebx)
- decl $tls::stacklock(%ebx) # release lock
- popl %ebx
- ret
-
- .global _sigdelayed
-_sigdelayed:
- pushl %ebp
- movl %esp,%ebp
- # We could be called from an interrupted thread which doesn't know
- # about his fate, so save and restore everything and the kitchen sink.
- pushf
- pushl %esi
- pushl %edi
- pushl %edx
- pushl %ecx
- pushl %ebx
- pushl %eax
- subl \$0x84,%esp
- fnstcw 0x80(%esp)
- movdqu %xmm7,0x70(%esp)
- movdqu %xmm6,0x60(%esp)
- movdqu %xmm5,0x50(%esp)
- movdqu %xmm4,0x40(%esp)
- movdqu %xmm3,0x30(%esp)
- movdqu %xmm2,0x20(%esp)
- movdqu %xmm1,0x10(%esp)
- movdqu %xmm0,(%esp)
- movl %fs:4,%ebx # get tls
- pushl $tls::saved_errno(%ebx) # saved errno
-
- movl \$$tls::start_offset,%eax # point to beginning
- addl %ebx,%eax # of tls block
- call __ZN7_cygtls19call_signal_handlerEv\@4 # call handler
-
- movl %fs:4,%ebx # reget tls
-1: movl \$1,%eax # potential lock value
- xchgl %eax,$tls::stacklock(%ebx) # see if we can grab it
- movl %eax,$tls::spinning(%ebx) # flag if we are waiting for lock
- testl %eax,%eax # it will be zero
- jz 2f # if so
- call _yield # sleep
- jmp 1b # and loop
-2: popl %edx # saved errno
- testl %edx,%edx # Is it < 0
- jl 3f # yup. ignore it
- movl $tls::errno_addr(%ebx),%eax
- movl %edx,(%eax)
-3: movl \$-4,%eax # now decrement aux stack
- xadd %eax,$tls::stackptr(%ebx) # and get pointer
- xorl %ebp,%ebp
- xchgl %ebp,-4(%eax) # get return address from signal stack
- xchgl %ebp,0xa0(%esp) # store real return address
-leave: xorl %eax,%eax
- movl %eax,$tls::incyg(%ebx)
- movl %eax,$tls::stacklock(%ebx) # unlock
-
- movdqu (%esp),%xmm0
- movdqu 0x10(%esp),%xmm1
- movdqu 0x20(%esp),%xmm2
- movdqu 0x30(%esp),%xmm3
- movdqu 0x40(%esp),%xmm4
- movdqu 0x50(%esp),%xmm5
- movdqu 0x60(%esp),%xmm6
- movdqu 0x70(%esp),%xmm7
- fninit
- fldcw 0x80(%esp)
- addl \$0x84,%esp
- popl %eax
- popl %ebx
- popl %ecx
- popl %edx
- popl %edi
- popl %esi
- popf
- ret
-
- .global __ZN7_cygtls3popEv\@4
-__ZN7_cygtls3popEv\@4:
-1: pushl %ebx
- movl %eax,%ebx # this
- movl \$-4,%eax
- xadd %eax,$tls::pstackptr(%ebx)
- movl -4(%eax),%eax
- popl %ebx
- ret
-
-# _cygtls::lock
- .global __ZN7_cygtls4lockEv\@4
-__ZN7_cygtls4lockEv\@4:
- pushl %ebx
- movl %eax,%ebx
-1: movl \$1,%eax
- xchgl %eax,$tls::pstacklock(%ebx)
- testl %eax,%eax
- jz 2f
- call _yield
- jmp 1b
-2: popl %ebx
- ret
-
-# _cygtls::unlock
- .global __ZN7_cygtls6unlockEv\@4
-__ZN7_cygtls6unlockEv\@4:
- decl $tls::pstacklock(%eax)
- ret
-
- .global __ZN7_cygtls6lockedEv
-__ZN7_cygtls6lockedEv:
- movl $tls::pstacklock(%eax),%eax
- ret
-
- .extern __ZN7_cygtls19call_signal_handlerEv\@4
-stabilize_sig_stack:
- movl %fs:4,%ebx
-1: movl \$1,%eax
- xchgl %eax,$tls::stacklock(%ebx)
- movl %eax,$tls::spinning(%ebx) # flag if we are waiting for lock
- testl %eax,%eax
- jz 2f
- call _yield
- jmp 1b
-2: incl $tls::incyg(%ebx)
- cmpl \$0,$tls::sig(%ebx)
- jz 3f
- decl $tls::stacklock(%ebx) # unlock
- movl \$$tls::start_offset,%eax # point to beginning
- addl %ebx,%eax # of tls block
- call __ZN7_cygtls19call_signal_handlerEv\@4
- jmp 1b
-3: decl $tls::incyg(%ebx)
- ret
-EOF
- }
- }
- return $res;
-}
-
-sub longjmp {
- if ($is64bit) {
- return <<EOF;
-
- .globl setjmp
- .seh_proc setjmp
-setjmp:
- .seh_endprologue
- leaq 8(%rsp),%rdx
- jmp __setjmpex
- .seh_endproc
-
- .globl __setjmpex
- .seh_proc __setjmpex
-__setjmpex:
- .seh_endprologue
- # We use the Windows jmp_buf layout.
- # Store alternative stackptr in Spare.
- movq %rdx,(%rcx)
- movq %rbx,0x8(%rcx)
- movq %rsp,0x10(%rcx)
- movq %rbp,0x18(%rcx)
- movq %rsi,0x20(%rcx)
- movq %rdi,0x28(%rcx)
- movq %r12,0x30(%rcx)
- movq %r13,0x38(%rcx)
- movq %r14,0x40(%rcx)
- movq %r15,0x48(%rcx)
- movq (%rsp),%r10
- movq %r10,0x50(%rcx)
- # jmp_buf is potentially unaligned!
- movdqu %xmm6,0x60(%rcx)
- movdqu %xmm7,0x70(%rcx)
- movdqu %xmm8,0x80(%rcx)
- movdqu %xmm9,0x90(%rcx)
- movdqu %xmm10,0xa0(%rcx)
- movdqu %xmm11,0xb0(%rcx)
- movdqu %xmm12,0xc0(%rcx)
- movdqu %xmm13,0xd0(%rcx)
- movdqu %xmm14,0xe0(%rcx)
- movdqu %xmm15,0xf0(%rcx)
- pushq %rcx
- .seh_pushreg %rcx
- call stabilize_sig_stack # returns tls in r11
- popq %rcx
- movq $tls::stackptr(%r11),%r10
- movq %r10,0x58(%rcx)
- decl $tls::stacklock(%r11)
- movl \$0,%eax
- ret
- .seh_endproc
-
- .globl __sjfault
- .seh_proc __sjfault
-__sjfault:
- .seh_endprologue
- # Like setjmp, just w/o storing the alternate stackptr.
- movq %rdx,(%rcx)
- movq %rbx,0x8(%rcx)
- movq %rsp,0x10(%rcx)
- movq %rbp,0x18(%rcx)
- movq %rsi,0x20(%rcx)
- movq %rdi,0x28(%rcx)
- movq %r12,0x30(%rcx)
- movq %r13,0x38(%rcx)
- movq %r14,0x40(%rcx)
- movq %r15,0x48(%rcx)
- movq (%rsp),%r10
- movq %r10,0x50(%rcx)
- # jmp_buf is potentially unaligned!
- movdqu %xmm6,0x60(%rcx)
- movdqu %xmm7,0x70(%rcx)
- movdqu %xmm8,0x80(%rcx)
- movdqu %xmm9,0x90(%rcx)
- movdqu %xmm10,0xa0(%rcx)
- movdqu %xmm11,0xb0(%rcx)
- movdqu %xmm12,0xc0(%rcx)
- movdqu %xmm13,0xd0(%rcx)
- movdqu %xmm14,0xe0(%rcx)
- movdqu %xmm15,0xf0(%rcx)
- movl \$0,%eax
- ret
- .seh_endproc
-
- .globl __ljfault
- .seh_proc __ljfault
-__ljfault:
- movq 0x8(%rcx),%rbx
- movq 0x10(%rcx),%rsp
- movq 0x18(%rcx),%rbp
- movq 0x20(%rcx),%rsi
- movq 0x28(%rcx),%rdi
- movq 0x30(%rcx),%r12
- movq 0x38(%rcx),%r13
- movq 0x40(%rcx),%r14
- movq 0x48(%rcx),%r15
- movq 0x50(%rcx),%r10
- movq %r10,(%rsp)
- # jmp_buf is potentially unaligned!
- movdqu 0x60(%rcx),%xmm6
- movdqu 0x70(%rcx),%xmm7
- movdqu 0x80(%rcx),%xmm8
- movdqu 0x90(%rcx),%xmm9
- movdqu 0xa0(%rcx),%xmm10
- movdqu 0xb0(%rcx),%xmm11
- movdqu 0xc0(%rcx),%xmm12
- movdqu 0xd0(%rcx),%xmm13
- movdqu 0xe0(%rcx),%xmm14
- movdqu 0xf0(%rcx),%xmm15
- movl %edx,%eax
- testl %eax,%eax
- jne 0f
- incl %eax
-0: ret
- .seh_endproc
-
- .globl longjmp
- .seh_proc longjmp
-longjmp:
- pushq %rcx
- .seh_pushreg %rcx
- .seh_endprologue
- movl %edx,%r12d # save return value (r12 is overwritten anyway)
- call stabilize_sig_stack # returns tls in r11
- popq %rcx
- movl %r12d,%eax # restore return value
- movq 0x58(%rcx),%r10 # get old signal stack
- movq %r10,$tls::stackptr(%r11) # restore
- decl $tls::stacklock(%r11) # relinquish lock
- xorl %r10d,%r10d
- movl %r10d,$tls::incyg(%r11) # we're definitely not in cygwin anymore
- movq 0x8(%rcx),%rbx
- movq 0x10(%rcx),%rsp
- movq 0x18(%rcx),%rbp
- movq 0x20(%rcx),%rsi
- movq 0x28(%rcx),%rdi
- movq 0x30(%rcx),%r12
- movq 0x38(%rcx),%r13
- movq 0x40(%rcx),%r14
- movq 0x48(%rcx),%r15
- movq 0x50(%rcx),%r10
- movq %r10,(%rsp)
- # jmp_buf is potentially unaligned!
- movdqu 0x60(%rcx),%xmm6
- movdqu 0x70(%rcx),%xmm7
- movdqu 0x80(%rcx),%xmm8
- movdqu 0x90(%rcx),%xmm9
- movdqu 0xa0(%rcx),%xmm10
- movdqu 0xb0(%rcx),%xmm11
- movdqu 0xc0(%rcx),%xmm12
- movdqu 0xd0(%rcx),%xmm13
- movdqu 0xe0(%rcx),%xmm14
- movdqu 0xf0(%rcx),%xmm15
- testl %eax,%eax
- jne 0f
- incl %eax
-0: ret
- .seh_endproc
-EOF
- } else {
- return <<EOF;
-
- .globl _setjmp
-_setjmp:
- pushl %ebp
- movl %esp,%ebp
- pushl %edi
- movl 8(%ebp),%edi
- movl %eax,0(%edi)
- movl %ebx,4(%edi)
- movl %ecx,8(%edi)
- movl %edx,12(%edi)
- movl %esi,16(%edi)
- movl -4(%ebp),%eax
- movl %eax,20(%edi)
- movl 0(%ebp),%eax
- movl %eax,24(%edi)
- movl %esp,%eax
- addl \$12,%eax
- movl %eax,28(%edi)
- movl 4(%ebp),%eax
- movl %eax,32(%edi)
- movw %es,%ax
- movw %ax,36(%edi)
- movw %fs,%ax
- movw %ax,38(%edi)
- movw %gs,%ax
- movw %ax,40(%edi)
- movw %ss,%ax
- movw %ax,42(%edi)
- movl %fs:0,%eax
- movl %eax,44(%edi)
- fnstcw 48(%edi)
- pushl %ebx
- call stabilize_sig_stack
- movl $tls::stackptr(%ebx),%eax # save stack pointer contents
- decl $tls::stacklock(%ebx)
- popl %ebx
- movl %eax,52(%edi)
- popl %edi
- movl \$0,%eax
- leave
- ret
-
- .globl ___sjfault
-___sjfault:
- pushl %ebp
- movl %esp,%ebp
- pushl %edi
- movl 8(%ebp),%edi
- movl %eax,0(%edi)
- movl %ebx,4(%edi)
- movl %ecx,8(%edi)
- movl %edx,12(%edi)
- movl %esi,16(%edi)
- movl -4(%ebp),%eax
- movl %eax,20(%edi)
- movl 0(%ebp),%eax
- movl %eax,24(%edi)
- movl %esp,%eax
- addl \$12,%eax
- movl %eax,28(%edi)
- movl 4(%ebp),%eax
- movl %eax,32(%edi)
- movw %es,%ax
- movw %ax,36(%edi)
- movw %fs,%ax
- movw %ax,38(%edi)
- movw %gs,%ax
- movw %ax,40(%edi)
- movw %ss,%ax
- movw %ax,42(%edi)
- movl %fs:0,%eax
- movl %eax,44(%edi)
- popl %edi
- movl \$0,%eax
- leave
- ret
-
- .global ___ljfault
-___ljfault:
- pushl %ebp
- movl %esp,%ebp
- movl 8(%ebp),%edi
-
- movl 12(%ebp),%eax
- testl %eax,%eax
- jne 0f
- incl %eax
-
-0: movl %eax,0(%edi)
- movl 24(%edi),%ebp
- pushfl
- popl %ebx
- movl 44(%edi),%eax
- movl %eax,%fs:0
- movw 42(%edi),%ax
- movw %ax,%ss
- movl 28(%edi),%esp
- pushl 32(%edi)
- pushl %ebx
- movw 36(%edi),%ax
- movw %ax,%es
- movw 40(%edi),%ax
- movw %ax,%gs
- movl 0(%edi),%eax
- movl 4(%edi),%ebx
- movl 8(%edi),%ecx
- movl 16(%edi),%esi
- movl 12(%edi),%edx
- movl 20(%edi),%edi
- popfl
- ret
-
- .globl _longjmp
-_longjmp:
- pushl %ebp
- movl %esp,%ebp
- movl 8(%ebp),%edi # address of buffer
- call stabilize_sig_stack
- movl 52(%edi),%eax # get old signal stack
- movl %eax,$tls::stackptr(%ebx) # restore
- decl $tls::stacklock(%ebx) # relinquish lock
- xorl %eax,%eax
- movl %eax,$tls::incyg(%ebx) # we're definitely not in cygwin anymore
-
- movl 12(%ebp),%eax
- testl %eax,%eax
- jne 3f
- incl %eax
-
-3: movl %eax,0(%edi)
- movl 24(%edi),%ebp
- pushfl
- popl %ebx
- fninit
- fldcw 48(%edi)
- movl 44(%edi),%eax
- movl %eax,%fs:0
- movw 42(%edi),%ax
- movw %ax,%ss
- movl 28(%edi),%esp
- pushl 32(%edi)
- pushl %ebx
- movw 36(%edi),%ax
- movw %ax,%es
- movw 40(%edi),%ax
- movw %ax,%gs
- movl 0(%edi),%eax
- movl 4(%edi),%ebx
- movl 8(%edi),%ecx
- movl 16(%edi),%esi
- movl 12(%edi),%edx
- movl 20(%edi),%edi
- popfl
- ret
-EOF
- }
-}
-
-sub cleanup(@) {
- grep {s/\r//og; s/#.*//og; s/\s+\n//sog; !/^$/o && $_} @_;
-}
diff --git a/winsup/cygwin/gendevices b/winsup/cygwin/gendevices
deleted file mode 100755
index 3e514bcab..000000000
--- a/winsup/cygwin/gendevices
+++ /dev/null
@@ -1,163 +0,0 @@
-#!/usr/bin/perl
-# Copyright 2003, 2004, 2005, 2006, 2012 Red Hat, Inc.
-#
-# This file is part of Cygwin.
-#
-# This software is a copyrighted work licensed under the terms of the
-# Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-# details.
-#
-use File::Basename;
-use Cwd;
-my $cwd = getcwd;
-
-use strict;
-use integer;
-sub devsort;
-
-my $input = shift;
-my $output = shift;
-my $base = "/tmp/" . basename($input, '.in') . '.' . $$;
-my $c = $base . '.c';
-my $shilka = $base . '.shilka';
-
-open(INPUT, $input) or die "$0: couldn't open '$input' - $!\n";
-
-my @lines = ();
-my $storage_ix = -1;
-my @storage = ();
-my %pointers = ();
-my @patterns = ();
-my $patterns_ix = -1;
-while (<INPUT>) {
- if (/%storage_here/) {
- $storage_ix = @lines;
- } elsif (/^"([^"]+)",\s*(.*)$/o) {
- push(@patterns, [$1, $2]);
- next;
- }
- if (@patterns) {
- for my $f (sort devsort @patterns) {
- my $x = $f->[0];
- my $rest = $f->[1];
- my ($dev, $devrest) = ($x =~ /([^%]+)(%.*)?$/o);
- $rest .= ', ' . (($dev =~ m%/dev/%o) ? 'true' : 'false');
- push(@lines, generate($dev, $devrest, $rest, []));
- }
- @patterns = ();
- }
- push(@lines, $_);
-}
-
-close INPUT;
-# @storage = sort devsort @storage;
-chop $storage[$#storage];
-chop $storage[$#storage];
-$storage[$#storage] .= "\n";
-splice(@lines, $storage_ix, 1,
- "const _RDATA device dev_storage[] =\n", "{\n",
- @storage, "};\n\n",
- sort {$a cmp $b} values %pointers);
-open(SHILKA, '>', $shilka);
-print SHILKA @lines;
-close SHILKA;
-
-chdir '/tmp';
-system qw'shilka -length -strip -no-definitions', $shilka;
-if ($? == -1) {
- die "$0: shilka command missing? - $!\n";
-} else {
- exit $? if $?;
-}
-chdir $cwd;
-unlink $shilka;
-open(C, '<', $c) or die "$0: couldn't open $c - $!\n";
-@lines = <C>;
-close C;
-unlink $c;
-splice(@lines, 0, 3);
-my $ign_until_brace = 0;
-for (my $i = 0; $i < @lines; $i++) {
- $_ = $lines[$i];
- $ign_until_brace = 1 if /(?:KR_reset|KR_output_statistics).*\)\s*$/o;
- if ($ign_until_brace || /(?:#\s*line|(?:KR_reset|KR_output_statistics).*;)/) {
- $ign_until_brace = 0 if $ign_until_brace && /}/o;
- splice(@lines, $i, 1);
- redo;
- };
-}
-open(OUTPUT, '>', $output) or do {{
- if (chmod(0664, $output)) {
- open(OUTPUT, '>', $output);
- last;
- }
- die "$0: couldn't open $output - $!\n";
-}};
-print OUTPUT @lines;
-close OUTPUT;
-
-sub generate {
- my $dev = shift;
- my $devrest = shift;
- my $rest = shift;
- my $vars = shift;
- my $res;
- my @lines = ();
- if ($devrest) {
- my ($a, $low, $high, $fmt, $b) = ($devrest =~ /%([\({])([^-]+)-([^\)}]+)[\)}](.)(.*)/o);
- my ($middle, $devrest0) = ($b =~ /^([^%]*)(%.*)?$/);
- $fmt = "%$fmt";
- my $vars_ix = @{$vars};
- for my $f ($low .. $high) {
- $vars->[$vars_ix] = $f;
- $#{$vars} = $vars_ix;
- my $dev0 = $dev . sprintf($fmt, $f) . $middle;
- push(@lines, generate($dev0, $devrest0, $rest, $vars));
- }
- } else {
- my $fh = $dev;
- $fh =~ s%/%_%og;
- $fh =~ s%^:%__%o;
- my $shilka_id = $fh;
- my $storage_str = $fh . '_storage';
- $fh =~ s/^_dev_/FH_/o;
- $fh = uc $fh;
- $shilka_id =~ s/^_dev_//o;
- $storage_str =~ s/^_dev/dev/o;
- my $storage_loc = "dev_storage + " . @storage;
- @lines = ('"' . $dev . '"' . " = $shilka_id {return $storage_loc;}\n");
- $rest = "$fh, $rest" if $rest =~ /^"/o;
- $rest = fixup($rest, $vars);
- if ($rest =~ /^(.*), =(\S*_dev)\b\s*(.*)$/) {
- $pointers{$2} ||= "const device *$2 = $storage_loc;\n";
- $rest = $1 . $3;
- }
- push(@storage, " {\"$dev\", " . $rest . "},\n");
- }
- return @lines;
-}
-
-sub fixup {
- my $rest = shift;
- my $vars = shift;
- 0 while $rest =~ s/{([^}]*)}/evalit($1, $vars)/eg;
- return $rest;
-}
-
-sub evalit {
- my $what = shift;
- my $vars = shift;
- $what =~ s/\$(\d+)/'$vars->[$1-1]'/g;
- my $res = eval $what;
- return $res;
-}
-
-sub devsort {
- my $a0 = $a->[0];
- my $b0 = $b->[0];
- $a0 =~ s/(\D)(\d+)/"$1" . sprintf "%05d", $2/e;
- $b0 =~ s/(\D)(\d+)/"$1" . sprintf "%05d", $2/e;
- $a0 =~ s%^//%:%o;
- $b0 =~ s%^//%:%o;
- return $a0 cmp $b0;
-}
diff --git a/winsup/cygwin/gentls_offsets b/winsup/cygwin/gentls_offsets
deleted file mode 100755
index e4543f597..000000000
--- a/winsup/cygwin/gentls_offsets
+++ /dev/null
@@ -1,104 +0,0 @@
-#!/usr/bin/perl -s
-# Copyright 2003, 2004, 2005, 2012, 2013 Red Hat, Inc.
-#
-# This file is part of Cygwin.
-#
-# This software is a copyrighted work licensed under the terms of the
-# Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-# details.
-#
-my $tls = shift;
-my $tls_out = shift;
-my $tgt = shift;
-# FIXME? This method obviously requires a 64 bit OS to build tlsoffsets64.h
-# Another method which doesn't requires to run an executable would be to
-# generate assembler code accessing the various struct members and analyzing
-# it, but that's arguably a lot more effort.
-my $tgt_opt = $tgt eq 'x86_64' ? '-m64' : '-m32';
-open TLS, '<', $tls or die "$0: couldn't open tls file \"$tls\" - $!\n";
-my $struct = '';
-my @fields = ();
-my $def = '';
-$tls = join('', <TLS>);
-$tls =~ s/\A.*\n#pragma once\n//os;
-$tls =~ s/\n[^\n]*gentls_offsets[^\n]*\n(.+)\Z/$1/os;
-my $pre = $`;
-substr($tls, 0, length($pre)) = '';
-$pre .= "\n//*/";
-$tls =~ s%/\*\s*gentls_offsets.*?/\*\s*gentls_offsets\s*\*/%%ogs;
-foreach ($tls =~ /^.*\n/mg) {
- /^}|\s*(?:typedef|const)/o and do {
- $def .= $_ ;
- next;
- };
- $def .= $_ if $struct;
- if (!s/;.*$//o) {
- if (!$struct && /^\s*(?:struct|class)\s*([a-z_0-9]+)/o) {
- $def .= $_;
- $struct = $1
- }
- next;
- }
- s/(?:\[[^\]]*\]|struct|class)//o;
- s/^\s+\S+\s+//o;
- s/[\*\s()]+//go;
- for my $f (split(/,/)) {
- push(@fields, $f);
- }
-}
-close TLS;
-open TMP, '>', "/tmp/$$.cc" or die "$0: couldn't open temporary index file \"/tmp/$$.c\" - $!\n";
-print TMP <<EOF;
-#define __INSIDE_CYGWIN__
-#ifndef __x86_64__
-#define __attribute__(X)
-#endif
-#define __reg1
-#define __reg2
-#define __reg3
-#include <stdio.h>
-#include <stdlib.h>
-#include <signal.h>
-#include <windows.h>
-$pre
-$def
-int
-main(int argc, char **argv)
-{
- $struct *foo;
-# define foo_beg ((char *) foo)
-# define offset(f) ((unsigned)((int) (((char *) &(foo->f)) - foo_beg) - CYGTLS_PADSIZE))
-# define poffset(f) ((unsigned)(((char *) &(foo->f)) - ((char *) foo)))
-EOF
- print TMP 'puts ("//;# autogenerated: Do not edit.\n");', "\n\n";
- print TMP "printf (\"//; \$tls::start_offset = -%d;\\n\", CYGTLS_PADSIZE);\n";
- for my $f (@fields) {
- print TMP ' printf ("//; $tls::', $f, ' = %d;\n", ', "offset($f));\n";
- print TMP ' printf ("//; $tls::p', $f, ' = %d;\n", ', "poffset($f));\n";
- }
- print TMP ' puts ("//; __DATA__\n");', "\n";
- for my $f (@fields) {
- print TMP ' printf ("#define tls_', $f, ' (%d)\n", ', "offset($f));\n";
- print TMP ' printf ("#define tls_p', $f, ' (%d)\n", ', "poffset($f));\n";
- }
-
- print TMP <<EOF;
-
- exit (0);
-}
-EOF
-close TMP;
-my @avoid_headers = qw'-D_XMMINTRIN_H_INCLUDED -D_ADXINTRIN_H_INCLUDED -D_EMMINTRIN_H_INCLUDED -D_X86INTRIN_H_INCLUDED';
-my @cmd = (@ARGV, @avoid_headers, '-o', "/tmp/$$-1.cc", '-E', "/tmp/$$.cc");
-$ENV{CCWRAP_VERBOSE}=1;
-system @cmd;
-system 'g++', "$tgt_opt", '-o', "/tmp/$$.a.out", "/tmp/$$-1.cc" and
-($? == 127 && system 'c++', "$tgt_opt", '-o', "/tmp/$$.a.out", "/tmp/$$-1.cc") and
-die "$0: couldn't generate executable for offset calculation \"/tmp/$$.a.out\" - $!\n";
-open TLS_OUT, '>', $tls_out or die "$0: couldn't open tls index file \"$tls_out\" - $!\n";
-open OFFS, '-|', "/tmp/$$.a.out" or die "$0: couldn't run \"/tmp/$$.a.out\" - $!\n";
-print TLS_OUT <OFFS>;
-close OFFS;
-close TLS_OUT;
-unlink "/tmp/$$.cc", "/tmp/$$-1.cc", "/tmp/$$-1.d", "/tmp/$$.a.out";
-exit(0);
diff --git a/winsup/cygwin/glob.cc b/winsup/cygwin/glob.cc
deleted file mode 100644
index be2a6013b..000000000
--- a/winsup/cygwin/glob.cc
+++ /dev/null
@@ -1,968 +0,0 @@
-/*
- * Copyright (c) 1989, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Guido van Rossum.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#ifdef __CYGWIN__
-#include "winsup.h"
-#endif
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)glob.c 8.3 (Berkeley) 10/13/93";
-#endif /* LIBC_SCCS and not lint */
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/lib/libc/gen/glob.c,v 1.28 2010/05/12 17:44:00 gordon Exp $");
-
-/*
- * glob(3) -- a superset of the one defined in POSIX 1003.2.
- *
- * The [!...] convention to negate a range is supported (SysV, Posix, ksh).
- *
- * Optional extra services, controlled by flags not defined by POSIX:
- *
- * GLOB_QUOTE:
- * Escaping convention: \ inhibits any special meaning the following
- * character might have (except \ at end of string is retained).
- * GLOB_MAGCHAR:
- * Set in gl_flags if pattern contained a globbing character.
- * GLOB_NOMAGIC:
- * Same as GLOB_NOCHECK, but it will only append pattern if it did
- * not contain any magic characters. [Used in csh style globbing]
- * GLOB_ALTDIRFUNC:
- * Use alternately specified directory access functions.
- * GLOB_TILDE:
- * expand ~user/foo to the /home/dir/of/user/foo
- * GLOB_BRACE:
- * expand {1,2}{a,b} to 1a 1b 2a 2b
- * gl_matchc:
- * Number of matches in the current invocation of glob.
- */
-
-/*
- * Some notes on multibyte character support:
- * 1. Patterns with illegal byte sequences match nothing - even if
- * GLOB_NOCHECK is specified.
- * 2. Illegal byte sequences in filenames are handled by treating them as
- * single-byte characters with a value of the first byte of the sequence
- * cast to wchar_t.
- * 3. State-dependent encodings are not currently supported.
- */
-
-#include <sys/param.h>
-#include <sys/stat.h>
-
-#include <ctype.h>
-#include <dirent.h>
-#include <errno.h>
-#include <glob.h>
-#include <limits.h>
-#include <pwd.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <wchar.h>
-
-#include "collate.h"
-
-#ifdef __CYGWIN__
-#include <wctype.h>
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "cygwin/version.h"
-
-#define getpwuid(uid) getpwuid32 (uid)
-#define getuid() getuid32 ()
-#define issetugid() (cygheap->user.issetuid ())
-
-#define CCHAR(c) (ignore_case_with_glob ? towlower (CHAR (c)) : CHAR (c))
-#define Cchar(c) (ignore_case_with_glob ? towlower (c) : (c))
-#endif
-
-#undef MAXPATHLEN
-#define MAXPATHLEN 8192
-
-#define DOLLAR '$'
-#define DOT '.'
-#define EOS '\0'
-#define LBRACKET '['
-#define NOT '!'
-#define QUESTION '?'
-#define QUOTE '\\'
-#define RANGE '-'
-#define RBRACKET ']'
-#define SEP '/'
-#define STAR '*'
-#define TILDE '~'
-#define UNDERSCORE '_'
-#define LBRACE '{'
-#define RBRACE '}'
-#define SLASH '/'
-#define COMMA ','
-
-#ifndef DEBUG
-
-#define M_QUOTE 0x8000000000ULL
-#define M_PROTECT 0x4000000000ULL
-#define M_MASK 0xffffffffffULL
-#define M_CHAR 0x00ffffffffULL
-
-typedef uint_fast64_t Char;
-
-#else
-
-#define M_QUOTE 0x80
-#define M_PROTECT 0x40
-#define M_MASK 0xff
-#define M_CHAR 0x7f
-
-typedef char Char;
-
-#endif
-
-
-#define CHAR(c) ((Char)((c)&M_CHAR))
-#define META(c) ((Char)((c)|M_QUOTE))
-#define M_ALL META('*')
-#define M_END META(']')
-#define M_NOT META('!')
-#define M_ONE META('?')
-#define M_RNG META('-')
-#define M_SET META('[')
-#define ismeta(c) (((c)&M_QUOTE) != 0)
-
-
-static int compare(const void *, const void *);
-static int g_Ctoc(const Char *, char *, size_t);
-static int g_lstat(Char *, struct stat *, glob_t *);
-static DIR *g_opendir(Char *, glob_t *);
-static const Char *g_strchr(const Char *, wchar_t);
-#ifdef notdef
-static Char *g_strcat(Char *, const Char *);
-#endif
-static int g_stat(Char *, struct stat *, glob_t *);
-static int glob0(const Char *, glob_t *, size_t *);
-static int glob1(Char *, glob_t *, size_t *);
-static int glob2(Char *, Char *, Char *, Char *, glob_t *, size_t *);
-static int glob3(Char *, Char *, Char *, Char *, Char *, glob_t *, size_t *);
-static int globextend(const Char *, glob_t *, size_t *);
-static const Char *
- globtilde(const Char *, Char *, size_t, glob_t *);
-static int globexp1(const Char *, glob_t *, size_t *);
-static int globexp2(const Char *, const Char *, glob_t *, int *, size_t *);
-static int match(Char *, Char *, Char *);
-#ifdef DEBUG
-static void qprintf(const char *, Char *);
-#endif
-
-int
-glob(const char *__restrict pattern, int flags, int (*errfunc)(const char *, int), glob_t *__restrict pglob)
-{
- const char *patnext;
- size_t limit;
- Char *bufnext, *bufend, patbuf[MAXPATHLEN], prot;
- mbstate_t mbs;
- wchar_t wc;
- size_t clen;
-
- patnext = pattern;
- if (!(flags & GLOB_APPEND)) {
- pglob->gl_pathc = 0;
- pglob->gl_pathv = NULL;
- if (!(flags & GLOB_DOOFFS))
- pglob->gl_offs = 0;
- }
- if (flags & GLOB_LIMIT) {
- limit = pglob->gl_matchc;
- if (limit == 0)
- limit = ARG_MAX;
- } else
- limit = 0;
- pglob->gl_flags = flags & ~GLOB_MAGCHAR;
- pglob->gl_errfunc = errfunc;
- pglob->gl_matchc = 0;
-
- bufnext = patbuf;
- bufend = bufnext + MAXPATHLEN - 1;
- if (flags & GLOB_NOESCAPE) {
- memset(&mbs, 0, sizeof(mbs));
- while (bufend - bufnext >= MB_CUR_MAX) {
- clen = mbrtowc(&wc, patnext, MB_LEN_MAX, &mbs);
- if (clen == (size_t)-1 || clen == (size_t)-2)
- return (GLOB_NOMATCH);
- else if (clen == 0)
- break;
- *bufnext++ = wc;
- patnext += clen;
- }
- } else {
- /* Protect the quoted characters. */
- memset(&mbs, 0, sizeof(mbs));
- while (bufend - bufnext >= MB_CUR_MAX) {
- if (*patnext == QUOTE) {
- if (*++patnext == EOS) {
- *bufnext++ = QUOTE | M_PROTECT;
- continue;
- }
- prot = M_PROTECT;
- } else
- prot = 0;
- clen = mbrtowc(&wc, patnext, MB_LEN_MAX, &mbs);
- if (clen == (size_t)-1 || clen == (size_t)-2)
- return (GLOB_NOMATCH);
- else if (clen == 0)
- break;
- *bufnext++ = wc | prot;
- patnext += clen;
- }
- }
- *bufnext = EOS;
-
- if (flags & GLOB_BRACE)
- return globexp1(patbuf, pglob, &limit);
- else
- return glob0(patbuf, pglob, &limit);
-}
-
-/*
- * Expand recursively a glob {} pattern. When there is no more expansion
- * invoke the standard globbing routine to glob the rest of the magic
- * characters
- */
-static int
-globexp1(const Char *pattern, glob_t *pglob, size_t *limit)
-{
- const Char* ptr = pattern;
- int rv;
-
- /* Protect a single {}, for find(1), like csh */
- if (pattern[0] == LBRACE && pattern[1] == RBRACE && pattern[2] == EOS)
- return glob0(pattern, pglob, limit);
-
- while ((ptr = g_strchr(ptr, LBRACE)) != NULL)
- if (!globexp2(ptr, pattern, pglob, &rv, limit))
- return rv;
-
- return glob0(pattern, pglob, limit);
-}
-
-
-/*
- * Recursive brace globbing helper. Tries to expand a single brace.
- * If it succeeds then it invokes globexp1 with the new pattern.
- * If it fails then it tries to glob the rest of the pattern and returns.
- */
-static int
-globexp2(const Char *ptr, const Char *pattern, glob_t *pglob, int *rv, size_t *limit)
-{
- int i;
- Char *lm, *ls;
- const Char *pe, *pm, *pm1, *pl;
- Char patbuf[MAXPATHLEN];
-
- /* copy part up to the brace */
- for (lm = patbuf, pm = pattern; pm != ptr; *lm++ = *pm++)
- continue;
- *lm = EOS;
- ls = lm;
-
- /* Find the balanced brace */
- for (i = 0, pe = ++ptr; *pe; pe++)
- if (*pe == LBRACKET) {
- /* Ignore everything between [] */
- for (pm = pe++; *pe != RBRACKET && *pe != EOS; pe++)
- continue;
- if (*pe == EOS) {
- /*
- * We could not find a matching RBRACKET.
- * Ignore and just look for RBRACE
- */
- pe = pm;
- }
- }
- else if (*pe == LBRACE)
- i++;
- else if (*pe == RBRACE) {
- if (i == 0)
- break;
- i--;
- }
-
- /* Non matching braces; just glob the pattern */
- if (i != 0 || *pe == EOS) {
- *rv = glob0(patbuf, pglob, limit);
- return 0;
- }
-
- for (i = 0, pl = pm = ptr; pm <= pe; pm++)
- switch (*pm) {
- case LBRACKET:
- /* Ignore everything between [] */
- for (pm1 = pm++; *pm != RBRACKET && *pm != EOS; pm++)
- continue;
- if (*pm == EOS) {
- /*
- * We could not find a matching RBRACKET.
- * Ignore and just look for RBRACE
- */
- pm = pm1;
- }
- break;
-
- case LBRACE:
- i++;
- break;
-
- case RBRACE:
- if (i) {
- i--;
- break;
- }
- /* FALLTHROUGH */
- case COMMA:
- if (i && *pm == COMMA)
- break;
- else {
- /* Append the current string */
- for (lm = ls; (pl < pm); *lm++ = *pl++)
- continue;
- /*
- * Append the rest of the pattern after the
- * closing brace
- */
- for (pl = pe + 1; (*lm++ = *pl++) != EOS;)
- continue;
-
- /* Expand the current pattern */
-#ifdef DEBUG
- qprintf("globexp2:", patbuf);
-#endif
- *rv = globexp1(patbuf, pglob, limit);
-
- /* move after the comma, to the next string */
- pl = pm + 1;
- }
- break;
-
- default:
- break;
- }
- *rv = 0;
- return 0;
-}
-
-
-
-/*
- * expand tilde from the passwd file.
- */
-static const Char *
-globtilde(const Char *pattern, Char *patbuf, size_t patbuf_len, glob_t *pglob)
-{
- struct passwd *pwd;
- char *h;
- const Char *p;
- Char *b, *eb;
-
- if (*pattern != TILDE || !(pglob->gl_flags & GLOB_TILDE))
- return pattern;
-
- /*
- * Copy up to the end of the string or /
- */
- eb = &patbuf[patbuf_len - 1];
- for (p = pattern + 1, h = (char *) patbuf;
- h < (char *)eb && *p && *p != SLASH; *h++ = *p++)
- continue;
-
- *h = EOS;
-
- if (((char *) patbuf)[0] == EOS) {
- /*
- * handle a plain ~ or ~/ by expanding $HOME first (iff
- * we're not running setuid or setgid) and then trying
- * the password file
- */
- if (issetugid() != 0 ||
- (h = getenv("HOME")) == NULL) {
- if (((h = getlogin()) != NULL &&
- (pwd = getpwnam(h)) != NULL) ||
- (pwd = getpwuid(getuid())) != NULL)
- h = pwd->pw_dir;
- else
- return pattern;
- }
- }
- else {
- /*
- * Expand a ~user
- */
- if ((pwd = getpwnam((char*) patbuf)) == NULL)
- return pattern;
- else
- h = pwd->pw_dir;
- }
-
- /* Copy the home directory */
- for (b = patbuf; b < eb && *h; *b++ = *h++)
- continue;
-
- /* Append the rest of the pattern */
- while (b < eb && (*b++ = *p++) != EOS)
- continue;
- *b = EOS;
-
- return patbuf;
-}
-
-
-/*
- * The main glob() routine: compiles the pattern (optionally processing
- * quotes), calls glob1() to do the real pattern matching, and finally
- * sorts the list (unless unsorted operation is requested). Returns 0
- * if things went well, nonzero if errors occurred.
- */
-static int
-glob0(const Char *pattern, glob_t *pglob, size_t *limit)
-{
- const Char *qpatnext;
- int err;
- size_t oldpathc;
- Char *bufnext, c, patbuf[MAXPATHLEN];
-
- qpatnext = globtilde(pattern, patbuf, MAXPATHLEN, pglob);
- oldpathc = pglob->gl_pathc;
- bufnext = patbuf;
-
- /* We don't need to check for buffer overflow any more. */
- while ((c = *qpatnext++) != EOS) {
- switch (c) {
- case LBRACKET:
- c = *qpatnext;
- if (c == NOT)
- ++qpatnext;
- if (*qpatnext == EOS ||
- g_strchr(qpatnext+1, RBRACKET) == NULL) {
- *bufnext++ = LBRACKET;
- if (c == NOT)
- --qpatnext;
- break;
- }
- *bufnext++ = M_SET;
- if (c == NOT)
- *bufnext++ = M_NOT;
- c = *qpatnext++;
- do {
- *bufnext++ = CHAR(c);
- if (*qpatnext == RANGE &&
- (c = qpatnext[1]) != RBRACKET) {
- *bufnext++ = M_RNG;
- *bufnext++ = CHAR(c);
- qpatnext += 2;
- }
- } while ((c = *qpatnext++) != RBRACKET);
- pglob->gl_flags |= GLOB_MAGCHAR;
- *bufnext++ = M_END;
- break;
- case QUESTION:
- pglob->gl_flags |= GLOB_MAGCHAR;
- *bufnext++ = M_ONE;
- break;
- case STAR:
- pglob->gl_flags |= GLOB_MAGCHAR;
- /* collapse adjacent stars to one,
- * to avoid exponential behavior
- */
- if (bufnext == patbuf || bufnext[-1] != M_ALL)
- *bufnext++ = M_ALL;
- break;
- default:
- *bufnext++ = CHAR(c);
- break;
- }
- }
- *bufnext = EOS;
-#ifdef DEBUG
- qprintf("glob0:", patbuf);
-#endif
-
- if ((err = glob1(patbuf, pglob, limit)) != 0)
- return(err);
-
- /*
- * If there was no match we are going to append the pattern
- * if GLOB_NOCHECK was specified or if GLOB_NOMAGIC was specified
- * and the pattern did not contain any magic characters
- * GLOB_NOMAGIC is there just for compatibility with csh.
- */
- if (pglob->gl_pathc == oldpathc) {
- if (((pglob->gl_flags & GLOB_NOCHECK) ||
- ((pglob->gl_flags & GLOB_NOMAGIC) &&
- !(pglob->gl_flags & GLOB_MAGCHAR))))
- return(globextend(pattern, pglob, limit));
- else
- return(GLOB_NOMATCH);
- }
- if (!(pglob->gl_flags & GLOB_NOSORT))
- qsort(pglob->gl_pathv + pglob->gl_offs + oldpathc,
- pglob->gl_pathc - oldpathc, sizeof(char *), compare);
- return(0);
-}
-
-static int
-compare(const void *p, const void *q)
-{
- return(strcmp(*(char **)p, *(char **)q));
-}
-
-static int
-glob1(Char *pattern, glob_t *pglob, size_t *limit)
-{
- Char pathbuf[MAXPATHLEN];
-
- /* A null pathname is invalid -- POSIX 1003.1 sect. 2.4. */
- if (*pattern == EOS)
- return(0);
- return(glob2(pathbuf, pathbuf, pathbuf + MAXPATHLEN - 1,
- pattern, pglob, limit));
-}
-
-/*
- * The functions glob2 and glob3 are mutually recursive; there is one level
- * of recursion for each segment in the pattern that contains one or more
- * meta characters.
- */
-static int
-glob2(Char *pathbuf, Char *pathend, Char *pathend_last, Char *pattern,
- glob_t *pglob, size_t *limit)
-{
- struct stat sb;
- Char *p, *q;
- int anymeta;
-
- /*
- * Loop over pattern segments until end of pattern or until
- * segment with meta character found.
- */
- for (anymeta = 0;;) {
- if (*pattern == EOS) { /* End of pattern? */
- *pathend = EOS;
- if (g_lstat(pathbuf, &sb, pglob))
- return(0);
-
- if (((pglob->gl_flags & GLOB_MARK) &&
- pathend[-1] != SEP) && (S_ISDIR(sb.st_mode)
- || (S_ISLNK(sb.st_mode) &&
- (g_stat(pathbuf, &sb, pglob) == 0) &&
- S_ISDIR(sb.st_mode)))) {
- if (pathend + 1 > pathend_last)
- return (GLOB_ABORTED);
- *pathend++ = SEP;
- *pathend = EOS;
- }
- ++pglob->gl_matchc;
- return(globextend(pathbuf, pglob, limit));
- }
-
- /* Find end of next segment, copy tentatively to pathend. */
- q = pathend;
- p = pattern;
- while (*p != EOS && *p != SEP) {
- if (ismeta(*p))
- anymeta = 1;
- if (q + 1 > pathend_last)
- return (GLOB_ABORTED);
- *q++ = *p++;
- }
-
- if (!anymeta) { /* No expansion, do next segment. */
- pathend = q;
- pattern = p;
- while (*pattern == SEP) {
- if (pathend + 1 > pathend_last)
- return (GLOB_ABORTED);
- *pathend++ = *pattern++;
- }
- } else /* Need expansion, recurse. */
- return(glob3(pathbuf, pathend, pathend_last, pattern, p,
- pglob, limit));
- }
- /* NOTREACHED */
-}
-
-static int
-glob3(Char *pathbuf, Char *pathend, Char *pathend_last,
- Char *pattern, Char *restpattern,
- glob_t *pglob, size_t *limit)
-{
- struct dirent *dp;
- DIR *dirp;
- int err;
- char buf[MAXPATHLEN];
-
- /*
- * The readdirfunc declaration can't be prototyped, because it is
- * assigned, below, to two functions which are prototyped in glob.h
- * and dirent.h as taking pointers to differently typed opaque
- * structures.
- * CYGWIN: Needs prototype and subsequently wild casting to avoid
- * compiler error.
- */
- struct dirent *(*readdirfunc)(void *);
-
- if (pathend > pathend_last)
- return (GLOB_ABORTED);
- *pathend = EOS;
- errno = 0;
-
- if ((dirp = g_opendir(pathbuf, pglob)) == NULL) {
- /* TODO: don't call for ENOENT or ENOTDIR? */
- if (pglob->gl_errfunc) {
- if (g_Ctoc(pathbuf, buf, sizeof(buf)))
- return (GLOB_ABORTED);
- if (pglob->gl_errfunc(buf, errno) ||
- pglob->gl_flags & GLOB_ERR)
- return (GLOB_ABORTED);
- }
- return(0);
- }
-
- err = 0;
-
- /* Search directory for matching names. */
- if (pglob->gl_flags & GLOB_ALTDIRFUNC)
- readdirfunc = pglob->gl_readdir;
- else
- readdirfunc = (dirent*(*)(void*)) readdir;
- while ((dp = (*readdirfunc)(dirp))) {
- char *sc;
- Char *dc;
- wchar_t wc;
- size_t clen;
- mbstate_t mbs;
-
- /* Initial DOT must be matched literally. */
- if (dp->d_name[0] == DOT && *pattern != DOT)
- continue;
- memset(&mbs, 0, sizeof(mbs));
- dc = pathend;
- sc = dp->d_name;
- while (dc < pathend_last) {
- clen = mbrtowc(&wc, sc, MB_LEN_MAX, &mbs);
- if (clen == (size_t)-1 || clen == (size_t)-2) {
- wc = *sc;
- clen = 1;
- memset(&mbs, 0, sizeof(mbs));
- }
- if ((*dc++ = wc) == EOS)
- break;
- sc += clen;
- }
- if (!match(pathend, pattern, restpattern)) {
- *pathend = EOS;
- continue;
- }
- err = glob2(pathbuf, --dc, pathend_last, restpattern,
- pglob, limit);
- if (err)
- break;
- }
-
- if (pglob->gl_flags & GLOB_ALTDIRFUNC)
- (*pglob->gl_closedir)(dirp);
- else
- closedir(dirp);
- return(err);
-}
-
-
-/*
- * Extend the gl_pathv member of a glob_t structure to accomodate a new item,
- * add the new item, and update gl_pathc.
- *
- * This assumes the BSD realloc, which only copies the block when its size
- * crosses a power-of-two boundary; for v7 realloc, this would cause quadratic
- * behavior.
- *
- * Return 0 if new item added, error code if memory couldn't be allocated.
- *
- * Invariant of the glob_t structure:
- * Either gl_pathc is zero and gl_pathv is NULL; or gl_pathc > 0 and
- * gl_pathv points to (gl_offs + gl_pathc + 1) items.
- */
-static int
-globextend(const Char *path, glob_t *pglob, size_t *limit)
-{
- char **pathv;
- size_t i, newsize, len;
- char *copy;
- const Char *p;
-
- if (*limit && pglob->gl_pathc > *limit) {
- errno = 0;
- return (GLOB_NOSPACE);
- }
-
- newsize = sizeof(*pathv) * (2 + pglob->gl_pathc + pglob->gl_offs);
- pathv = pglob->gl_pathv ?
- (char **) realloc((char *)pglob->gl_pathv, newsize) :
- (char **) malloc(newsize);
- if (pathv == NULL) {
- if (pglob->gl_pathv) {
- free(pglob->gl_pathv);
- pglob->gl_pathv = NULL;
- }
- return(GLOB_NOSPACE);
- }
-
- if (pglob->gl_pathv == NULL && pglob->gl_offs > 0) {
- /* first time around -- clear initial gl_offs items */
- pathv += pglob->gl_offs;
- for (i = pglob->gl_offs + 1; --i > 0; )
- *--pathv = NULL;
- }
- pglob->gl_pathv = pathv;
-
- for (p = path; *p++;)
- continue;
- len = MB_CUR_MAX * (size_t)(p - path); /* XXX overallocation */
- if ((copy = (char *) malloc(len)) != NULL) {
- if (g_Ctoc(path, copy, len)) {
- free(copy);
- return (GLOB_NOSPACE);
- }
- pathv[pglob->gl_offs + pglob->gl_pathc++] = copy;
- }
- pathv[pglob->gl_offs + pglob->gl_pathc] = NULL;
- return(copy == NULL ? GLOB_NOSPACE : 0);
-}
-
-/*
- * pattern matching function for filenames. Each occurrence of the *
- * pattern causes a recursion level.
- */
-static int
-match(Char *name, Char *pat, Char *patend)
-{
- int ok, negate_range;
- Char c, k;
-
- while (pat < patend) {
- c = *pat++;
- switch (c & M_MASK) {
- case M_ALL:
- if (pat == patend)
- return(1);
- do
- if (match(name, pat, patend))
- return(1);
- while (*name++ != EOS);
- return(0);
- case M_ONE:
- if (*name++ == EOS)
- return(0);
- break;
- case M_SET:
- ok = 0;
- if ((k = *name++) == EOS)
- return(0);
- if ((negate_range = ((*pat & M_MASK) == M_NOT)) != EOS)
- ++pat;
- while (((c = *pat++) & M_MASK) != M_END)
- if ((*pat & M_MASK) == M_RNG) {
- if (__collate_load_error ?
- CCHAR(c) <= CCHAR(k) && CCHAR(k) <= CCHAR(pat[1]) :
- __collate_range_cmp(CCHAR(c), CCHAR(k)) <= 0
- && __collate_range_cmp(CCHAR(k), CCHAR(pat[1])) <= 0
- )
- ok = 1;
- pat += 2;
- } else if (c == k)
- ok = 1;
- if (ok == negate_range)
- return(0);
- break;
- default:
- if (Cchar(*name++) != Cchar(c))
- return(0);
- break;
- }
- }
- return(*name == EOS);
-}
-
-/* Free allocated data belonging to a glob_t structure. */
-void
-globfree(glob_t *pglob)
-{
- size_t i;
- char **pp;
-
- if (pglob->gl_pathv != NULL) {
- pp = pglob->gl_pathv + pglob->gl_offs;
- for (i = pglob->gl_pathc; i--; ++pp)
- if (*pp)
- free(*pp);
- free(pglob->gl_pathv);
- pglob->gl_pathv = NULL;
- }
-}
-
-static DIR *
-g_opendir(Char *str, glob_t *pglob)
-{
- char buf[MAXPATHLEN];
-
- if (!*str)
- strcpy(buf, ".");
- else {
- if (g_Ctoc(str, buf, sizeof(buf)))
- return (NULL);
- }
-
- if (pglob->gl_flags & GLOB_ALTDIRFUNC)
- return (DIR *) ((*pglob->gl_opendir)((const char *) buf));
-
- return(opendir(buf));
-}
-
-#ifdef __x86_64__
-#define CYGWIN_gl_stat(sfptr) ((*pglob->sfptr) (buf, sb))
-#else
-static void
-stat32_to_stat64 (struct __stat32 *src, struct stat *dst)
-{
- dst->st_dev = src->st_dev;
- dst->st_ino = src->st_ino;
- dst->st_mode = src->st_mode;
- dst->st_nlink = src->st_nlink;
- dst->st_uid = src->st_uid;
- dst->st_gid = src->st_gid;
- dst->st_rdev = src->st_rdev;
- dst->st_size = src->st_size;
- dst->st_atim = src->st_atim;
- dst->st_mtim = src->st_mtim;
- dst->st_ctim = src->st_ctim;
- dst->st_birthtim = src->st_mtim;
- dst->st_blksize = src->st_blksize;
- dst->st_blocks = src->st_blocks;
-}
-
-#define CYGWIN_gl_stat(sfptr) \
- ({ int ret; \
- struct __stat32 lsb; \
- if (CYGWIN_VERSION_CHECK_FOR_USING_BIG_TYPES) \
- ret = (*pglob->sfptr) (buf, sb); \
- else if (!(ret = (*pglob->sfptr) (buf, (struct stat *) &lsb))) \
- stat32_to_stat64 (&lsb, sb); \
- ret; \
- })
-#endif
-
-static int
-g_lstat(Char *fn, struct stat *sb, glob_t *pglob)
-{
- char buf[MAXPATHLEN];
-
- if (g_Ctoc(fn, buf, sizeof(buf))) {
- errno = ENAMETOOLONG;
- return (-1);
- }
- if (pglob->gl_flags & GLOB_ALTDIRFUNC)
- return CYGWIN_gl_stat (gl_lstat);
- return(lstat64(buf, sb));
-}
-
-static int
-g_stat(Char *fn, struct stat *sb, glob_t *pglob)
-{
- char buf[MAXPATHLEN];
-
- if (g_Ctoc(fn, buf, sizeof(buf))) {
- errno = ENAMETOOLONG;
- return (-1);
- }
- if (pglob->gl_flags & GLOB_ALTDIRFUNC)
- return CYGWIN_gl_stat (gl_stat);
- return(stat64(buf, sb));
-}
-
-static const Char *
-g_strchr(const Char *str, wchar_t ch)
-{
-
- do {
- if (*str == ch)
- return (str);
- } while (*str++);
- return (NULL);
-}
-
-static int
-g_Ctoc(const Char *str, char *buf, size_t len)
-{
- mbstate_t mbs;
- size_t clen;
-
- memset(&mbs, 0, sizeof(mbs));
- while (len >= (size_t) MB_CUR_MAX) {
- clen = wcrtomb(buf, *str, &mbs);
- if (clen == (size_t)-1)
- return (1);
- if (*str == L'\0')
- return (0);
- str++;
- buf += clen;
- len -= clen;
- }
- return (1);
-}
-
-#ifdef DEBUG
-static void
-qprintf(const char *str, Char *s)
-{
- Char *p;
-
- (void)printf("%s:\n", str);
- for (p = s; *p; p++)
- (void)printf("%c", CHAR(*p));
- (void)printf("\n");
- for (p = s; *p; p++)
- (void)printf("%c", *p & M_PROTECT ? '"' : ' ');
- (void)printf("\n");
- for (p = s; *p; p++)
- (void)printf("%c", ismeta(*p) ? '_' : ' ');
- (void)printf("\n");
-}
-#endif
diff --git a/winsup/cygwin/glob_pattern_p.cc b/winsup/cygwin/glob_pattern_p.cc
deleted file mode 100644
index e8f42519b..000000000
--- a/winsup/cygwin/glob_pattern_p.cc
+++ /dev/null
@@ -1,28 +0,0 @@
-/* glob_pattern_p.c
-
- int glob_pattern_p (__const char *__pattern, int __quote)
-
- Return nonzero if PATTERN contains any metacharacters.
- Metacharacters can be quoted with backslashes if QUOTE is nonzero.
-
- This function is not part of the interface specified by POSIX.2
- but several programs want to use it. */
-
-#include <string.h>
-
-extern "C" {
-
-int glob_pattern_p (const char *pattern, int quote)
-{
- const char *quote_chars = "\\?*[]";
- if (!quote)
- quote_chars++;
- while ((pattern = strpbrk (pattern, quote_chars)) != NULL)
- if (*pattern == '\\')
- pattern++;
- else
- return true;
- return false;
-}
-
-} /* extern "C" */
diff --git a/winsup/cygwin/globals.cc b/winsup/cygwin/globals.cc
deleted file mode 100644
index 92f9acc8a..000000000
--- a/winsup/cygwin/globals.cc
+++ /dev/null
@@ -1,212 +0,0 @@
-/* globals.cc - Define global variables here.
-
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#define NO_GLOBALS_H
-#include "winsup.h"
-#include "cygtls.h"
-#include "perprocess.h"
-#include "cygprops.h"
-#include "thread.h"
-#include <malloc.h>
-#include <cygwin/version.h>
-
-HANDLE NO_COPY hMainThread;
-HANDLE NO_COPY hProcToken;
-HANDLE NO_COPY hProcImpToken;
-HANDLE my_wr_proc_pipe;
-HMODULE NO_COPY cygwin_hmodule;
-HMODULE NO_COPY hntdll;
-int NO_COPY sigExeced;
-WCHAR windows_system_directory[MAX_PATH];
-UINT windows_system_directory_length;
-#ifndef __x86_64__
-WCHAR system_wow64_directory[MAX_PATH];
-UINT system_wow64_directory_length;
-#endif /* !__x86_64__ */
-
-/* program exit the program */
-
-enum exit_states
-{
- ES_NOT_EXITING = 0,
- ES_EXIT_STARTING,
- ES_SIGNAL_EXIT,
- ES_PROCESS_LOCKED,
- ES_EVENTS_TERMINATE,
- ES_SIGNAL,
- ES_CLOSEALL,
- ES_THREADTERM,
- ES_HUP_PGRP,
- ES_HUP_SID,
- ES_TTY_TERMINATE,
- ES_FINAL
-};
-
-/* The type of symlink to create. The value is set depending on the
- "winsymlinks" setting of the CYGWIN environment variable. */
-enum winsym_t
-{
- WSYM_sysfile = 0,
- WSYM_lnk,
- WSYM_native,
- WSYM_nativestrict,
- WSYM_nfs
-};
-
-exit_states NO_COPY exit_state;
-
-/* Set in init.cc. Used to check if Cygwin DLL is dynamically loaded. */
-int NO_COPY dynamically_loaded;
-
-/* Some CYGWIN environment variable variables. */
-bool allow_glob = true;
-bool detect_bloda;
-bool dos_file_warning;
-bool ignore_case_with_glob;
-bool pipe_byte;
-bool reset_com;
-bool wincmdln;
-winsym_t allow_winsymlinks = WSYM_sysfile;
-
-bool NO_COPY in_forkee;
-
-/* Taken from BSD libc:
- This variable is zero until a process has created a pthread. It is used
- to avoid calling locking functions in libc when they are not required.
- Note that this is moderately dangerous. Do not rely on it if the public
- API is also used from a non-pthread thread like the signal thread. */
-int NO_COPY __isthreaded = 0;
-
-int __argc_safe;
-int __argc;
-char **__argv;
-#ifdef NEWVFORK
-vfork_save NO_COPY *main_vfork;
-#endif
-
-_cygtls NO_COPY *_main_tls /* !globals.h */;
-
-bool NO_COPY cygwin_finished_initializing;
-
-bool NO_COPY _cygwin_testing;
-
-char NO_COPY almost_null[1];
-
-extern "C" {
-
- /* Heavily-used const UNICODE_STRINGs are defined here once. The idea is a
- speed improvement by not having to initialize a UNICODE_STRING every time
- we make a string comparison. The _RDATA trick allows defining the strings
- as const (so we get a SEGV if some code erroneously tries to overwrite
- them), while declaring them as non-const in the auto-generated globals.h.
- The strings are usually used in NT functions which don't take const
- arguments. We avoid a lot of extra casts here...
- Note: The "extern" is required, otherwise either the variables are dropped
- entirely, or C++ name mangling is applied despite the extern "C"
- bracket, depending on the compiler version */
-#ifndef _RDATA
-# define _RDATA const
-#endif
-
-#define _ROU(_s) \
- { Length: sizeof (_s) - sizeof (WCHAR), \
- MaximumLength: sizeof (_s), \
- Buffer: (PWSTR) (_s) }
- extern UNICODE_STRING _RDATA ro_u_empty = _ROU (L"");
- extern UNICODE_STRING _RDATA ro_u_lnk = _ROU (L".lnk");
- extern UNICODE_STRING _RDATA ro_u_exe = _ROU (L".exe");
- extern UNICODE_STRING _RDATA ro_u_dll = _ROU (L".dll");
- extern UNICODE_STRING _RDATA ro_u_com = _ROU (L".com");
- extern UNICODE_STRING _RDATA ro_u_scr = _ROU (L".scr");
- extern UNICODE_STRING _RDATA ro_u_sys = _ROU (L".sys");
- extern UNICODE_STRING _RDATA ro_u_proc = _ROU (L"proc");
- extern UNICODE_STRING _RDATA ro_u_dev = _ROU (L"dev");
- extern UNICODE_STRING _RDATA ro_u_natp = _ROU (L"\\??\\");
- extern UNICODE_STRING _RDATA ro_u_uncp = _ROU (L"\\??\\UNC\\");
- extern UNICODE_STRING _RDATA ro_u_mtx = _ROU (L"mtx");
- extern UNICODE_STRING _RDATA ro_u_csc = _ROU (L"CSC-CACHE");
- extern UNICODE_STRING _RDATA ro_u_fat = _ROU (L"FAT");
- extern UNICODE_STRING _RDATA ro_u_mvfs = _ROU (L"MVFS");
- extern UNICODE_STRING _RDATA ro_u_nfs = _ROU (L"NFS");
- extern UNICODE_STRING _RDATA ro_u_ntfs = _ROU (L"NTFS");
- extern UNICODE_STRING _RDATA ro_u_refs = _ROU (L"ReFS");
- extern UNICODE_STRING _RDATA ro_u_sunwnfs = _ROU (L"SUNWNFS");
- extern UNICODE_STRING _RDATA ro_u_udf = _ROU (L"UDF");
- extern UNICODE_STRING _RDATA ro_u_unixfs = _ROU (L"UNIXFS");
- extern UNICODE_STRING _RDATA ro_u_nwfs = _ROU (L"NWFS");
- extern UNICODE_STRING _RDATA ro_u_ncfsd = _ROU (L"NcFsd");
- extern UNICODE_STRING _RDATA ro_u_afs = _ROU (L"AFSRDRFsd");
- extern UNICODE_STRING _RDATA ro_u_volume = _ROU (L"\\??\\Volume{");
- extern UNICODE_STRING _RDATA ro_u_pipedir = _ROU (L"\\\\?\\PIPE\\");
- extern UNICODE_STRING _RDATA ro_u_globalroot = _ROU (L"\\\\.\\GLOBALROOT");
- extern UNICODE_STRING _RDATA ro_u_null = _ROU (L"\\Device\\Null");
- extern UNICODE_STRING _RDATA ro_u_natdir = _ROU (L"Directory");
- extern UNICODE_STRING _RDATA ro_u_natsyml = _ROU (L"SymbolicLink");
- extern UNICODE_STRING _RDATA ro_u_natdev = _ROU (L"Device");
- #undef _ROU
-
- /* Cygwin properties are meant to be readonly data placed in the DLL, but
- which can be changed by external tools to make adjustments to the
- behaviour of a DLL based on the binary of the DLL itself. This is
- different from $CYGWIN since it only affects that very DLL, not all
- DLLs which have access to the $CYGWIN environment variable. We use the
- same _RDATA trick as for the above UNICODE_STRINGs. */
- extern cygwin_props_t _RDATA cygwin_props =
- {
- CYGWIN_PROPS_MAGIC,
- sizeof (cygwin_props_t),
- 0
- };
-
- /* This is an exported copy of environ which can be used by DLLs
- which use cygwin.dll. */
- char **__cygwin_environ;
-#ifndef __x86_64__
- char ***main_environ = &__cygwin_environ;
-#endif
- /* __progname used in getopt error message */
- char *__progname;
- char *program_invocation_name;
- char *program_invocation_short_name;
- static MTinterface _mtinterf;
- struct per_process __cygwin_user_data =
- {/* initial_sp */ 0, /* magic_biscuit */ 0,
- /* dll_major */ CYGWIN_VERSION_DLL_MAJOR,
- /* dll_major */ CYGWIN_VERSION_DLL_MINOR,
- /* impure_ptr_ptr */ NULL,
-#ifndef __x86_64__
- /* envptr */ NULL,
-#endif
- /* malloc */ malloc, /* free */ free,
- /* realloc */ realloc,
- /* fmode_ptr */ NULL, /* main */ NULL, /* ctors */ NULL,
- /* dtors */ NULL, /* data_start */ NULL, /* data_end */ NULL,
- /* bss_start */ NULL, /* bss_end */ NULL,
- /* calloc */ calloc,
- /* premain */ {NULL, NULL, NULL, NULL},
- /* run_ctors_p */ 0,
- /* unused */ {},
- /* cxx_malloc */ &default_cygwin_cxx_malloc,
- /* hmodule */ NULL,
- /* api_major */ 0,
- /* api_minor */ 0,
- /* unused2 */ {},
- /* posix_memalign */ posix_memalign,
- /* pseudo_reloc_start */ NULL,
- /* pseudo_reloc_end */ NULL,
- /* image_base */ NULL,
- /* threadinterface */ &_mtinterf,
- /* impure_ptr */ _GLOBAL_REENT,
- };
- int _check_for_executable = true;
-};
-
-int NO_COPY __api_fatal_exit_val = 1;
diff --git a/winsup/cygwin/gmon.c b/winsup/cygwin/gmon.c
deleted file mode 100644
index 96b1189ee..000000000
--- a/winsup/cygwin/gmon.c
+++ /dev/null
@@ -1,295 +0,0 @@
-/*-
- * Copyright (c) 1983, 1992, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#if !defined(lint) && defined(LIBC_SCCS)
-static char rcsid[] = "$OpenBSD: gmon.c,v 1.8 1997/07/23 21:11:27 kstailey Exp $";
-#endif
-
-/*
- * This file is taken from Cygwin distribution. Please keep it in sync.
- * The differences should be within __MINGW32__ guard.
- */
-
-#include <fcntl.h>
-#include <stdlib.h>
-#include <stdio.h>
-#ifndef __MINGW32__
-#include <unistd.h>
-#include <sys/param.h>
-#endif
-#include <sys/types.h>
-#include "gmon.h"
-#include "profil.h"
-
-/* XXX needed? */
-//extern char *minbrk __asm ("minbrk");
-
-#ifdef _WIN64
-#define MINUS_ONE_P (-1LL)
-#else
-#define MINUS_ONE_P (-1)
-#endif
-
-#include <string.h>
-#define bzero(ptr,size) memset (ptr, 0, size);
-
-struct gmonparam _gmonparam = { GMON_PROF_OFF, NULL, 0, NULL, 0, NULL, 0, 0L,
- 0, 0, 0, 0};
-
-static int s_scale;
-/* see profil(2) where this is describe (incorrectly) */
-#define SCALE_1_TO_1 0x10000L
-
-#define ERR(s) write(2, s, sizeof(s))
-
-void moncontrol __P((int));
-
-static void *
-fake_sbrk(int size)
-{
- void *rv = malloc(size);
- if (rv)
- return rv;
- else
- return (void *) MINUS_ONE_P;
-}
-
-void monstartup (size_t, size_t);
-
-void
-monstartup (size_t lowpc, size_t highpc)
-{
- register size_t o;
- char *cp;
- struct gmonparam *p = &_gmonparam;
-
- /*
- * round lowpc and highpc to multiples of the density we're using
- * so the rest of the scaling (here and in gprof) stays in ints.
- */
- p->lowpc = ROUNDDOWN(lowpc, HISTFRACTION * sizeof(HISTCOUNTER));
- p->highpc = ROUNDUP(highpc, HISTFRACTION * sizeof(HISTCOUNTER));
- p->textsize = p->highpc - p->lowpc;
- p->kcountsize = p->textsize / HISTFRACTION;
- p->hashfraction = HASHFRACTION;
- p->fromssize = p->textsize / p->hashfraction;
- p->tolimit = p->textsize * ARCDENSITY / 100;
- if (p->tolimit < MINARCS)
- p->tolimit = MINARCS;
- else if (p->tolimit > MAXARCS)
- p->tolimit = MAXARCS;
- p->tossize = p->tolimit * sizeof(struct tostruct);
-
- cp = fake_sbrk(p->kcountsize + p->fromssize + p->tossize);
- if (cp == (char *)MINUS_ONE_P) {
- ERR("monstartup: out of memory\n");
- return;
- }
-
- /* zero out cp as value will be added there */
- bzero(cp, p->kcountsize + p->fromssize + p->tossize);
-
- p->tos = (struct tostruct *)cp;
- cp += p->tossize;
- p->kcount = (u_short *)cp;
- cp += p->kcountsize;
- p->froms = (u_short *)cp;
-
- /* XXX minbrk needed? */
- //minbrk = fake_sbrk(0);
- p->tos[0].link = 0;
-
- o = p->highpc - p->lowpc;
- if (p->kcountsize < o) {
-#ifndef notdef
- s_scale = ((float)p->kcountsize / o ) * SCALE_1_TO_1;
-#else /* avoid floating point */
- int quot = o / p->kcountsize;
-
- if (quot >= 0x10000)
- s_scale = 1;
- else if (quot >= 0x100)
- s_scale = 0x10000 / quot;
- else if (o >= 0x800000)
- s_scale = 0x1000000 / (o / (p->kcountsize >> 8));
- else
- s_scale = 0x1000000 / ((o << 8) / p->kcountsize);
-#endif
- } else
- s_scale = SCALE_1_TO_1;
-
- moncontrol(1);
-}
-
-void _mcleanup (void);
-void
-_mcleanup(void)
-{
- static char gmon_out[] = "gmon.out";
- int fd;
- int hz;
- int fromindex;
- int endfrom;
- size_t frompc;
- int toindex;
- struct rawarc rawarc;
- struct gmonparam *p = &_gmonparam;
- struct gmonhdr gmonhdr, *hdr;
- const char *proffile;
-#ifdef DEBUG
- int log, len;
- char dbuf[200];
-#endif
-
- if (p->state == GMON_PROF_ERROR)
- ERR("_mcleanup: tos overflow\n");
-
- hz = PROF_HZ;
- moncontrol(0);
-
-#ifdef nope
- if ((profdir = getenv("PROFDIR")) != NULL) {
- extern char *__progname;
- char *s, *t, *limit;
- pid_t pid;
- long divisor;
-
- /* If PROFDIR contains a null value, no profiling
- output is produced */
- if (*profdir == '\0') {
- return;
- }
-
- limit = buf + sizeof buf - 1 - 10 - 1 -
- strlen(__progname) - 1;
- t = buf;
- s = profdir;
- while((*t = *s) != '\0' && t < limit) {
- t++;
- s++;
- }
- *t++ = '/';
-
- /*
- * Copy and convert pid from a pid_t to a string. For
- * best performance, divisor should be initialized to
- * the largest power of 10 less than PID_MAX.
- */
- pid = getpid();
- divisor=10000;
- while (divisor > pid) divisor /= 10; /* skip leading zeros */
- do {
- *t++ = (pid/divisor) + '0';
- pid %= divisor;
- } while (divisor /= 10);
- *t++ = '.';
-
- s = __progname;
- while ((*t++ = *s++) != '\0')
- ;
-
- proffile = buf;
- } else {
- proffile = gmon_out;
- }
-#else
- proffile = gmon_out;
-#endif
-
- fd = open(proffile , O_CREAT|O_TRUNC|O_WRONLY|O_BINARY, 0666);
- if (fd < 0) {
- perror( proffile );
- return;
- }
-#ifdef DEBUG
- log = open("gmon.log", O_CREAT|O_TRUNC|O_WRONLY, 0664);
- if (log < 0) {
- perror("mcount: gmon.log");
- return;
- }
- len = sprintf(dbuf, "[mcleanup1] kcount 0x%x ssiz %d\n",
- p->kcount, p->kcountsize);
- write(log, dbuf, len);
-#endif
- hdr = (struct gmonhdr *)&gmonhdr;
- hdr->lpc = p->lowpc;
- hdr->hpc = p->highpc;
- hdr->ncnt = p->kcountsize + sizeof(gmonhdr);
- hdr->version = GMONVERSION;
- hdr->profrate = hz;
- write(fd, (char *)hdr, sizeof *hdr);
- write(fd, p->kcount, p->kcountsize);
- endfrom = p->fromssize / sizeof(*p->froms);
- for (fromindex = 0; fromindex < endfrom; fromindex++) {
- if (p->froms[fromindex] == 0)
- continue;
-
- frompc = p->lowpc;
- frompc += fromindex * p->hashfraction * sizeof(*p->froms);
- for (toindex = p->froms[fromindex]; toindex != 0;
- toindex = p->tos[toindex].link) {
-#ifdef DEBUG
- len = sprintf(dbuf,
- "[mcleanup2] frompc 0x%x selfpc 0x%x count %d\n" ,
- frompc, p->tos[toindex].selfpc,
- p->tos[toindex].count);
- write(log, dbuf, len);
-#endif
- rawarc.raw_frompc = frompc;
- rawarc.raw_selfpc = p->tos[toindex].selfpc;
- rawarc.raw_count = p->tos[toindex].count;
- write(fd, &rawarc, sizeof rawarc);
- }
- }
- close(fd);
-}
-
-/*
- * Control profiling
- * profiling is what mcount checks to see if
- * all the data structures are ready.
- */
-void
-moncontrol(int mode)
-{
- struct gmonparam *p = &_gmonparam;
-
- if (mode) {
- /* start */
- profil((char *)p->kcount, p->kcountsize, p->lowpc,
- s_scale);
- p->state = GMON_PROF_ON;
- } else {
- /* stop */
- profil((char *)0, 0, 0, 0);
- p->state = GMON_PROF_OFF;
- }
-}
-
-
diff --git a/winsup/cygwin/gmon.h b/winsup/cygwin/gmon.h
deleted file mode 100644
index 0932ed94c..000000000
--- a/winsup/cygwin/gmon.h
+++ /dev/null
@@ -1,187 +0,0 @@
-/* $OpenBSD: gmon.h,v 1.3 1996/04/21 22:31:46 deraadt Exp $ */
-/* $NetBSD: gmon.h,v 1.5 1996/04/09 20:55:30 cgd Exp $ */
-
-/*-
- * Copyright (c) 1982, 1986, 1992, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)gmon.h 8.2 (Berkeley) 1/4/94
- */
-
-/*
- * This file is taken from Cygwin distribution. Please keep it in sync.
- * The differences should be within __MINGW32__ guard.
- */
-
-#ifndef _SYS_GMON_H_
-#define _SYS_GMON_H_
-
-#ifndef __P
-#define __P(x) x
-#endif
-
-/* On POSIX systems, profile.h is a KRB5 header. To avoid collisions, just
- pull in profile.h's content here. The profile.h header won't be provided
- by Mingw-w64 anymore at one point. */
-#if 0
-#include <profile.h>
-#else
-#ifndef _WIN64
-#define _MCOUNT_CALL __attribute__ ((regparm (2)))
-extern void _mcount(void);
-#else
-#define _MCOUNT_CALL
-extern void mcount(void);
-#endif
-#define _MCOUNT_DECL __attribute__((gnu_inline)) __inline__ \
- void _MCOUNT_CALL _mcount_private
-#define MCOUNT
-#endif
-
-#ifdef __MINGW32__
-#include <_bsd_types.h>
-#endif /* __MINGW32__*/
-
-/*
- * Structure prepended to gmon.out profiling data file.
- */
-struct gmonhdr {
- size_t lpc; /* base pc address of sample buffer */
- size_t hpc; /* max pc address of sampled buffer */
- int ncnt; /* size of sample buffer (plus this header) */
- int version; /* version number */
- int profrate; /* profiling clock rate */
- int spare[3]; /* reserved */
-};
-#define GMONVERSION 0x00051879
-
-/*
- * histogram counters are unsigned shorts (according to the kernel).
- */
-#define HISTCOUNTER unsigned short
-
-/*
- * fraction of text space to allocate for histogram counters here, 1/2
- */
-#define HISTFRACTION 2
-
-/*
- * Fraction of text space to allocate for from hash buckets.
- * The value of HASHFRACTION is based on the minimum number of bytes
- * of separation between two subroutine call points in the object code.
- * Given MIN_SUBR_SEPARATION bytes of separation the value of
- * HASHFRACTION is calculated as:
- *
- * HASHFRACTION = MIN_SUBR_SEPARATION / (2 * sizeof(short) - 1);
- *
- * For example, on the VAX, the shortest two call sequence is:
- *
- * calls $0,(r0)
- * calls $0,(r0)
- *
- * which is separated by only three bytes, thus HASHFRACTION is
- * calculated as:
- *
- * HASHFRACTION = 3 / (2 * 2 - 1) = 1
- *
- * Note that the division above rounds down, thus if MIN_SUBR_FRACTION
- * is less than three, this algorithm will not work!
- *
- * In practice, however, call instructions are rarely at a minimal
- * distance. Hence, we will define HASHFRACTION to be 2 across all
- * architectures. This saves a reasonable amount of space for
- * profiling data structures without (in practice) sacrificing
- * any granularity.
- */
-#define HASHFRACTION 2
-
-/*
- * percent of text space to allocate for tostructs with a minimum.
- */
-#define ARCDENSITY 2
-#define MINARCS 50
-#define MAXARCS ((1 << (8 * sizeof(HISTCOUNTER))) - 2)
-
-struct tostruct {
- size_t selfpc;
- long count;
- u_short link;
- u_short pad;
-};
-
-/*
- * a raw arc, with pointers to the calling site and
- * the called site and a count.
- */
-struct rawarc {
- size_t raw_frompc;
- size_t raw_selfpc;
- long raw_count;
-};
-
-/*
- * general rounding functions.
- */
-#define ROUNDDOWN(x,y) (((x)/(y))*(y))
-#define ROUNDUP(x,y) ((((x)+(y)-1)/(y))*(y))
-
-/*
- * The profiling data structures are housed in this structure.
- */
-struct gmonparam {
- int state;
- u_short *kcount;
- size_t kcountsize;
- u_short *froms;
- size_t fromssize;
- struct tostruct *tos;
- size_t tossize;
- long tolimit;
- size_t lowpc;
- size_t highpc;
- size_t textsize;
- size_t hashfraction;
-};
-extern struct gmonparam _gmonparam;
-
-/*
- * Possible states of profiling.
- */
-#define GMON_PROF_ON 0
-#define GMON_PROF_BUSY 1
-#define GMON_PROF_ERROR 2
-#define GMON_PROF_OFF 3
-
-/*
- * Sysctl definitions for extracting profiling information from the kernel.
- */
-#define GPROF_STATE 0 /* int: profiling enabling variable */
-#define GPROF_COUNT 1 /* struct: profile tick count buffer */
-#define GPROF_FROMS 2 /* struct: from location hash bucket */
-#define GPROF_TOS 3 /* struct: destination/count structure */
-#define GPROF_GMONPARAM 4 /* struct: profiling parameters (see above) */
-#endif /* !_SYS_GMONH_ */
diff --git a/winsup/cygwin/grp.cc b/winsup/cygwin/grp.cc
deleted file mode 100644
index f7ce61b08..000000000
--- a/winsup/cygwin/grp.cc
+++ /dev/null
@@ -1,720 +0,0 @@
-/* grp.cc
-
- Copyright 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
- 2008, 2009, 2011, 2012, 2013, 2014 Red Hat, Inc.
-
- Original stubs by Jason Molenda of Cygnus Support, crash@cygnus.com
- First implementation by Gunther Ebert, gunther.ebert@ixos-leipzig.de
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include <lm.h>
-#include <assert.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "cygerrno.h"
-#include "pinfo.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "ntdll.h"
-#include "miscfuncs.h"
-#include "ldap.h"
-#include "tls_pbuf.h"
-
-static char * NO_COPY_RO null_ptr;
-
-bool
-pwdgrp::parse_group ()
-{
- pg_grp &grp = group ()[curr_lines];
- grp.g.gr_name = next_str (':');
- if (!*grp.g.gr_name)
- return false;
- grp.g.gr_passwd = next_str (':');
- /* Note that lptr points to the first byte of the gr_gid field.
- We deliberately ignore the gr_gid and gr_mem entries when copying
- the buffer content since they are not referenced anymore. */
- grp.len = lptr - grp.g.gr_name;
- if (!next_num (grp.g.gr_gid))
- return false;
- /* Don't generate gr_mem entries. */
- grp.g.gr_mem = &null_ptr;
- grp.sid.getfromgr (&grp.g);
- return true;
-}
-
-muto NO_COPY pwdgrp::pglock;
-
-void
-pwdgrp::init_grp ()
-{
- pwdgrp_buf_elem_size = sizeof (pg_grp);
- parse = &pwdgrp::parse_group;
-}
-
-struct group *
-pwdgrp::find_group (cygpsid &sid)
-{
- for (ULONG i = 0; i < curr_lines; i++)
- if (sid == group ()[i].sid)
- return &group ()[i].g;
- return NULL;
-}
-
-struct group *
-pwdgrp::find_group (const char *name)
-{
- for (ULONG i = 0; i < curr_lines; i++)
- if (strcasematch (group ()[i].g.gr_name, name))
- return &group ()[i].g;
- return NULL;
-}
-
-struct group *
-pwdgrp::find_group (gid_t gid)
-{
- for (ULONG i = 0; i < curr_lines; i++)
- if (gid == group ()[i].g.gr_gid)
- return &group ()[i].g;
- return NULL;
-}
-
-struct group *
-internal_getgrsid (cygpsid &sid, cyg_ldap *pldap)
-{
- struct group *ret;
-
- cygheap->pg.nss_init ();
- /* Check caches first. */
- if (cygheap->pg.nss_cygserver_caching ()
- && (ret = cygheap->pg.grp_cache.cygserver.find_group (sid)))
- return ret;
- if (cygheap->pg.nss_grp_files ()
- && (ret = cygheap->pg.grp_cache.file.find_group (sid)))
- return ret;
- if (cygheap->pg.nss_grp_db ()
- && (ret = cygheap->pg.grp_cache.win.find_group (sid)))
- return ret;
- /* Ask sources afterwards. */
- if (cygheap->pg.nss_cygserver_caching ()
- && (ret = cygheap->pg.grp_cache.cygserver.add_group_from_cygserver (sid)))
- return ret;
- if (cygheap->pg.nss_grp_files ())
- {
- cygheap->pg.grp_cache.file.check_file ();
- if ((ret = cygheap->pg.grp_cache.file.add_group_from_file (sid)))
- return ret;
- }
- if (cygheap->pg.nss_grp_db ())
- return cygheap->pg.grp_cache.win.add_group_from_windows (sid, pldap);
- return NULL;
-}
-
-/* This function gets only called from mkgroup via cygwin_internal. */
-struct group *
-internal_getgrsid_from_db (cygpsid &sid)
-{
- cygheap->pg.nss_init ();
- return cygheap->pg.grp_cache.win.add_group_from_windows (sid);
-}
-
-struct group *
-internal_getgrnam (const char *name, cyg_ldap *pldap)
-{
- struct group *ret;
-
- cygheap->pg.nss_init ();
- /* Check caches first. */
- if (cygheap->pg.nss_cygserver_caching ()
- && (ret = cygheap->pg.grp_cache.cygserver.find_group (name)))
- return ret;
- if (cygheap->pg.nss_grp_files ()
- && (ret = cygheap->pg.grp_cache.file.find_group (name)))
- return ret;
- if (cygheap->pg.nss_grp_db ()
- && (ret = cygheap->pg.grp_cache.win.find_group (name)))
- return ret;
- /* Ask sources afterwards. */
- if (cygheap->pg.nss_cygserver_caching ()
- && (ret = cygheap->pg.grp_cache.cygserver.add_group_from_cygserver (name)))
- return ret;
- if (cygheap->pg.nss_grp_files ())
- {
- cygheap->pg.grp_cache.file.check_file ();
- if ((ret = cygheap->pg.grp_cache.file.add_group_from_file (name)))
- return ret;
- }
- if (cygheap->pg.nss_grp_db ())
- return cygheap->pg.grp_cache.win.add_group_from_windows (name, pldap);
- return NULL;
-}
-
-struct group *
-internal_getgrgid (gid_t gid, cyg_ldap *pldap)
-{
- struct group *ret;
-
- cygheap->pg.nss_init ();
- /* Check caches first. */
- if (cygheap->pg.nss_cygserver_caching ()
- && (ret = cygheap->pg.grp_cache.cygserver.find_group (gid)))
- return ret;
- if (cygheap->pg.nss_grp_files ()
- && (ret = cygheap->pg.grp_cache.file.find_group (gid)))
- return ret;
- if (cygheap->pg.nss_grp_db ()
- && (ret = cygheap->pg.grp_cache.win.find_group (gid)))
- return ret;
- /* Ask sources afterwards. */
- if (cygheap->pg.nss_cygserver_caching ()
- && (ret = cygheap->pg.grp_cache.cygserver.add_group_from_cygserver (gid)))
- return ret;
- if (cygheap->pg.nss_grp_files ())
- {
- cygheap->pg.grp_cache.file.check_file ();
- if ((ret = cygheap->pg.grp_cache.file.add_group_from_file (gid)))
- return ret;
- }
- if (cygheap->pg.nss_grp_db () || gid == ILLEGAL_GID)
- return cygheap->pg.grp_cache.win.add_group_from_windows (gid, pldap);
- return NULL;
-}
-
-#ifndef __x86_64__
-static struct __group16 *
-grp32togrp16 (struct __group16 *gp16, struct group *gp32)
-{
- if (!gp16 || !gp32)
- return NULL;
-
- /* Copying the pointers is actually unnecessary. Just having the correct
- return type is important. */
- gp16->gr_name = gp32->gr_name;
- gp16->gr_passwd = gp32->gr_passwd;
- gp16->gr_gid = (__gid16_t) gp32->gr_gid; /* Not loss-free */
- gp16->gr_mem = gp32->gr_mem;
-
- return gp16;
-}
-#endif
-
-extern "C" int
-getgrgid_r (gid_t gid, struct group *grp, char *buffer, size_t bufsize,
- struct group **result)
-{
- *result = NULL;
-
- if (!grp || !buffer)
- return ERANGE;
-
- struct group *tempgr = internal_getgrgid (gid);
- pthread_testcancel ();
- if (!tempgr)
- return 0;
-
- /* Check needed buffer size. Deliberately ignore gr_mem. */
- size_t needsize = strlen (tempgr->gr_name) + strlen (tempgr->gr_passwd)
- + 2 + sizeof (char *);
- if (needsize > bufsize)
- return ERANGE;
-
- /* Make a copy of tempgr. Deliberately ignore gr_mem. */
- *result = grp;
- grp->gr_gid = tempgr->gr_gid;
- buffer = stpcpy (grp->gr_name = buffer, tempgr->gr_name);
- buffer = stpcpy (grp->gr_passwd = buffer + 1, tempgr->gr_passwd);
- grp->gr_mem = (char **) (buffer + 1);
- grp->gr_mem[0] = NULL;
- return 0;
-}
-
-/* getgrgid/getgrnam are not reentrant. */
-static struct {
- struct group g;
- char *buf;
- size_t bufsiz;
-} app_gr;
-
-static struct group *
-getgr_cp (struct group *tempgr)
-{
- if (!tempgr)
- return NULL;
- pg_grp *gr = (pg_grp *) tempgr;
- if (app_gr.bufsiz < gr->len)
- {
- char *newbuf = (char *) realloc (app_gr.buf, gr->len);
- if (!newbuf)
- {
- set_errno (ENOMEM);
- return NULL;
- }
- app_gr.buf = newbuf;
- app_gr.bufsiz = gr->len;
- }
- memcpy (app_gr.buf, gr->g.gr_name, gr->len);
- memcpy (&app_gr.g, &gr->g, sizeof gr->g);
- ptrdiff_t diff = app_gr.buf - gr->g.gr_name;
- app_gr.g.gr_name += diff;
- app_gr.g.gr_passwd += diff;
- return &app_gr.g;
-}
-
-extern "C" struct group *
-getgrgid32 (gid_t gid)
-{
- struct group *tempgr = internal_getgrgid (gid);
- pthread_testcancel ();
- return getgr_cp (tempgr);
-}
-
-#ifdef __x86_64__
-EXPORT_ALIAS (getgrgid32, getgrgid)
-#else
-extern "C" struct __group16 *
-getgrgid (__gid16_t gid)
-{
- static struct __group16 g16; /* FIXME: thread-safe? */
-
- return grp32togrp16 (&g16, getgrgid32 (gid16togid32 (gid)));
-}
-#endif
-
-extern "C" int
-getgrnam_r (const char *nam, struct group *grp, char *buffer,
- size_t bufsize, struct group **result)
-{
- *result = NULL;
-
- if (!grp || !buffer)
- return ERANGE;
-
- struct group *tempgr = internal_getgrnam (nam);
- pthread_testcancel ();
- if (!tempgr)
- return 0;
-
- /* Check needed buffer size. Deliberately ignore gr_mem. */
- size_t needsize = strlen (tempgr->gr_name) + strlen (tempgr->gr_passwd)
- + 2 + sizeof (char *);
- if (needsize > bufsize)
- return ERANGE;
-
- /* Make a copy of tempgr. Deliberately ignore gr_mem. */
- *result = grp;
- grp->gr_gid = tempgr->gr_gid;
- buffer = stpcpy (grp->gr_name = buffer, tempgr->gr_name);
- buffer = stpcpy (grp->gr_passwd = buffer + 1, tempgr->gr_passwd);
- grp->gr_mem = (char **) (buffer + 1);
- grp->gr_mem[0] = NULL;
- return 0;
-}
-
-extern "C" struct group *
-getgrnam32 (const char *name)
-{
- struct group *tempgr = internal_getgrnam (name);
- pthread_testcancel ();
- return getgr_cp (tempgr);
-}
-
-#ifdef __x86_64__
-EXPORT_ALIAS (getgrnam32, getgrnam)
-#else
-extern "C" struct __group16 *
-getgrnam (const char *name)
-{
- static struct __group16 g16; /* FIXME: thread-safe? */
-
- return grp32togrp16 (&g16, getgrnam32 (name));
-}
-#endif
-
-/* getgrent functions are not reentrant. */
-static gr_ent grent;
-
-void *
-gr_ent::enumerate_caches ()
-{
- switch (max)
- {
- case 0:
- if (cygheap->pg.nss_cygserver_caching ())
- {
- pwdgrp &grc = cygheap->pg.grp_cache.cygserver;
- if (cnt < grc.cached_groups ())
- return &grc.group ()[cnt++].g;
- }
- cnt = 0;
- max = 1;
- /*FALLTHRU*/
- case 1:
- if (from_files)
- {
- pwdgrp &grf = cygheap->pg.grp_cache.file;
- grf.check_file ();
- if (cnt < grf.cached_groups ())
- return &grf.group ()[cnt++].g;
- }
- cnt = 0;
- max = 2;
- /*FALLTHRU*/
- case 2:
- if (from_db)
- {
- pwdgrp &grw = cygheap->pg.grp_cache.win;
- if (cnt < grw.cached_groups ())
- return &grw.group ()[cnt++].g;
- }
- break;
- }
- cnt = max = 0;
- return NULL;
-}
-
-void *
-gr_ent::enumerate_local ()
-{
- while (true)
- {
- if (!cnt)
- {
- DWORD total;
- NET_API_STATUS ret;
-
- if (buf)
- {
- NetApiBufferFree (buf);
- buf = NULL;
- }
- if (resume == ULONG_MAX)
- ret = ERROR_NO_MORE_ITEMS;
- else
- ret = NetLocalGroupEnum (NULL, 0, (PBYTE *) &buf,
- MAX_PREFERRED_LENGTH,
- &max, &total, &resume);
- if (ret == NERR_Success)
- resume = ULONG_MAX;
- else if (ret != ERROR_MORE_DATA)
- {
- cnt = max = resume = 0;
- return NULL;
- }
- }
- while (cnt < max)
- {
- cygsid sid;
- DWORD slen = SECURITY_MAX_SID_SIZE;
- WCHAR dom[DNLEN + 1];
- DWORD dlen = DNLEN + 1;
- SID_NAME_USE acc_type;
-
- LookupAccountNameW (NULL,
- ((PLOCALGROUP_INFO_0) buf)[cnt++].lgrpi0_name,
- sid, &slen, dom, &dlen, &acc_type);
- fetch_user_arg_t arg;
- arg.type = SID_arg;
- arg.sid = &sid;
- char *line = pg.fetch_account_from_windows (arg);
- if (line)
- return pg.add_account_post_fetch (line, false);
- }
- cnt = 0;
- }
-}
-
-struct group *
-gr_ent::getgrent (void)
-{
- if (state == rewound)
- setent (true);
- else
- clear_cache ();
- return (struct group *) getent ();
-}
-
-extern "C" void
-setgrent ()
-{
- grent.setgrent ();
-}
-
-extern "C" struct group *
-getgrent32 (void)
-{
- return grent.getgrent ();
-}
-
-#ifdef __x86_64__
-EXPORT_ALIAS (getgrent32, getgrent)
-#else
-extern "C" struct __group16 *
-getgrent ()
-{
- static struct __group16 g16; /* FIXME: thread-safe? */
-
- return grp32togrp16 (&g16, getgrent32 ());
-}
-#endif
-
-extern "C" void
-endgrent (void)
-{
- grent.endgrent ();
-}
-
-/* *_filtered functions are called from mkgroup */
-void *
-setgrent_filtered (int enums, PCWSTR enum_tdoms)
-{
- gr_ent *gr = new gr_ent;
- if (gr)
- gr->setgrent (enums, enum_tdoms);
- return (void *) gr;
-}
-
-void *
-getgrent_filtered (void *gr)
-{
- return (void *) ((gr_ent *) gr)->getgrent ();
-}
-
-void
-endgrent_filtered (void *gr)
-{
- ((gr_ent *) gr)->endgrent ();
-}
-
-int
-internal_getgroups (int gidsetsize, gid_t *grouplist, cyg_ldap *pldap)
-{
- NTSTATUS status;
- HANDLE tok;
- ULONG size;
- int cnt = 0;
- struct group *grp;
-
- if (cygheap->user.groups.issetgroups ())
- {
- for (int pg = 0; pg < cygheap->user.groups.sgsids.count (); ++pg)
- if ((grp = internal_getgrsid (cygheap->user.groups.sgsids.sids[pg],
- pldap)))
- {
- if (cnt < gidsetsize)
- grouplist[cnt] = grp->gr_gid;
- ++cnt;
- if (gidsetsize && cnt > gidsetsize)
- goto error;
- }
- return cnt;
- }
-
- /* If impersonated, use impersonation token. */
- tok = cygheap->user.issetuid () ? cygheap->user.primary_token () : hProcToken;
-
- status = NtQueryInformationToken (tok, TokenGroups, NULL, 0, &size);
- if (NT_SUCCESS (status) || status == STATUS_BUFFER_TOO_SMALL)
- {
- PTOKEN_GROUPS groups = (PTOKEN_GROUPS) alloca (size);
-
- status = NtQueryInformationToken (tok, TokenGroups, groups, size, &size);
- if (NT_SUCCESS (status))
- {
- for (DWORD pg = 0; pg < groups->GroupCount; ++pg)
- {
- cygpsid sid = groups->Groups[pg].Sid;
- if ((grp = internal_getgrsid (sid, pldap)))
- {
- if ((groups->Groups[pg].Attributes
- & (SE_GROUP_ENABLED | SE_GROUP_INTEGRITY_ENABLED))
- && sid != well_known_world_sid)
- {
- if (cnt < gidsetsize)
- grouplist[cnt] = grp->gr_gid;
- ++cnt;
- if (gidsetsize && cnt > gidsetsize)
- goto error;
- }
- }
- }
- }
- }
- else
- debug_printf ("%u = NtQueryInformationToken(NULL) %y", size, status);
- return cnt;
-
-error:
- set_errno (EINVAL);
- return -1;
-}
-
-extern "C" int
-getgroups32 (int gidsetsize, gid_t *grouplist)
-{
- cyg_ldap cldap;
-
- return internal_getgroups (gidsetsize, grouplist, &cldap);
-}
-
-#ifdef __x86_64__
-EXPORT_ALIAS (getgroups32, getgroups)
-#else
-extern "C" int
-getgroups (int gidsetsize, __gid16_t *grouplist)
-{
- gid_t *grouplist32 = NULL;
-
- if (gidsetsize < 0)
- {
- set_errno (EINVAL);
- return -1;
- }
- if (gidsetsize > 0 && grouplist)
- grouplist32 = (gid_t *) alloca (gidsetsize * sizeof (gid_t));
-
- int ret = getgroups32 (gidsetsize, grouplist32);
-
- if (gidsetsize > 0 && grouplist)
- for (int i = 0; i < ret; ++ i)
- grouplist[i] = grouplist32[i];
-
- return ret;
-}
-#endif
-
-/* Core functionality of initgroups and getgrouplist. */
-static void
-get_groups (const char *user, gid_t gid, cygsidlist &gsids)
-{
- cyg_ldap cldap;
-
- cygheap->user.deimpersonate ();
- struct passwd *pw = internal_getpwnam (user, &cldap);
- struct group *grp = internal_getgrgid (gid, &cldap);
- cygsid usersid, grpsid;
- if (usersid.getfrompw (pw))
- get_server_groups (gsids, usersid, pw);
- if (gid != ILLEGAL_GID && grpsid.getfromgr (grp))
- gsids += grpsid;
- cygheap->user.reimpersonate ();
-}
-
-extern "C" int
-initgroups32 (const char *user, gid_t gid)
-{
- assert (user != NULL);
- cygsidlist tmp_gsids (cygsidlist_auto, 12);
- get_groups (user, gid, tmp_gsids);
- cygsidlist new_gsids (cygsidlist_alloc, tmp_gsids.count ());
- for (int i = 0; i < tmp_gsids.count (); i++)
- new_gsids.sids[i] = tmp_gsids.sids[i];
- new_gsids.count (tmp_gsids.count ());
- cygheap->user.groups.update_supp (new_gsids);
- syscall_printf ( "0 = initgroups(%s, %u)", user, gid);
- return 0;
-}
-
-#ifdef __x86_64__
-EXPORT_ALIAS (initgroups32, initgroups)
-#else
-extern "C" int
-initgroups (const char *user, __gid16_t gid)
-{
- return initgroups32 (user, gid16togid32(gid));
-}
-#endif
-
-extern "C" int
-getgrouplist (const char *user, gid_t gid, gid_t *groups, int *ngroups)
-{
- int ret = 0;
- int cnt = 0;
- struct group *grp;
- cyg_ldap cldap;
-
- /* Note that it's not defined if groups or ngroups may be NULL!
- GLibc does not check the pointers on entry and just uses them.
- FreeBSD calls assert for ngroups and allows a NULL groups if
- *ngroups is 0. We follow FreeBSD's lead here, but always allow
- a NULL groups pointer. */
- assert (user != NULL);
- assert (ngroups != NULL);
-
- cygsidlist tmp_gsids (cygsidlist_auto, 12);
- get_groups (user, gid, tmp_gsids);
- for (int i = 0; i < tmp_gsids.count (); i++)
- if ((grp = internal_getgrsid (tmp_gsids.sids[i], &cldap)) != NULL)
- {
- if (groups && cnt < *ngroups)
- groups[cnt] = grp->gr_gid;
- ++cnt;
- }
- if (cnt > *ngroups)
- ret = -1;
- else
- ret = cnt;
- *ngroups = cnt;
-
- syscall_printf ( "%d = getgrouplist(%s, %u, %p, %d)",
- ret, user, gid, groups, *ngroups);
- return ret;
-}
-
-/* setgroups32: standards? */
-extern "C" int
-setgroups32 (int ngroups, const gid_t *grouplist)
-{
- syscall_printf ("setgroups32 (%d)", ngroups);
- if (ngroups < 0 || (ngroups > 0 && !grouplist))
- {
- set_errno (EINVAL);
- return -1;
- }
-
- cygsidlist gsids (cygsidlist_alloc, ngroups);
- struct group *grp;
- cyg_ldap cldap;
-
- if (ngroups && !gsids.sids)
- return -1;
-
- for (int gidx = 0; gidx < ngroups; ++gidx)
- {
- if ((grp = internal_getgrgid (grouplist[gidx], &cldap))
- && gsids.addfromgr (grp))
- continue;
- debug_printf ("No sid found for gid %u", grouplist[gidx]);
- gsids.free_sids ();
- set_errno (EINVAL);
- return -1;
- }
- cygheap->user.groups.update_supp (gsids);
- return 0;
-}
-
-#ifdef __x86_64__
-EXPORT_ALIAS (setgroups32, setgroups)
-#else
-extern "C" int
-setgroups (int ngroups, const __gid16_t *grouplist)
-{
- gid_t *grouplist32 = NULL;
-
- if (ngroups > 0 && grouplist)
- {
- grouplist32 = (gid_t *) alloca (ngroups * sizeof (gid_t));
- if (grouplist32 == NULL)
- return -1;
- for (int i = 0; i < ngroups; i++)
- grouplist32[i] = grouplist[i];
- }
- return setgroups32 (ngroups, grouplist32);
-}
-#endif
diff --git a/winsup/cygwin/heap.cc b/winsup/cygwin/heap.cc
deleted file mode 100644
index d08e8bf17..000000000
--- a/winsup/cygwin/heap.cc
+++ /dev/null
@@ -1,334 +0,0 @@
-/* heap.cc: Cygwin heap manager.
-
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include "cygerrno.h"
-#include "shared_info.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "child_info.h"
-#include "ntdll.h"
-#include <sys/param.h>
-
-#define assert(x)
-
-static ptrdiff_t page_const;
-
-/* Minimum size of the base heap. */
-#define MINHEAP_SIZE (4 * 1024 * 1024)
-/* Chunksize of subsequent heap reservations. */
-#define RAISEHEAP_SIZE (1 * 1024 * 1024)
-
-static uintptr_t
-eval_start_address ()
-{
-#ifdef __x86_64__
- /* On 64 bit, we choose a fixed address outside the 32 bit area. The
- executable starts at 0x1:00400000L, the Cygwin DLL starts at
- 0x1:80040000L, other rebased DLLs are located in the region from
- 0x2:00000000L up to 0x4:00000000L, -auto-image-based DLLs are located
- in the region from 0x4:00000000L up to 0x6:00000000L.
- So we let the heap start at 0x6:00000000L. */
- uintptr_t start_address = 0x600000000L;
-#else
- /* Starting with Vista, Windows performs heap ASLR. This spoils the entire
- region below 0x20000000 for us, because that region is used by Windows
- to randomize heap and stack addresses. Therefore we put our heap into a
- safe region starting at 0x20000000. This should work right from the start
- in 99% of the cases. */
- uintptr_t start_address = 0x20000000L;
- if ((uintptr_t) NtCurrentTeb () >= 0xbf000000L)
- {
- /* However, if we're running on a /3GB enabled 32 bit system or on
- a 64 bit system, and the executable is large address aware, then
- we know that we have spare 1 Gig (32 bit) or even 2 Gigs (64 bit)
- virtual address space. This memory region is practically unused
- by Windows, only PEB and TEBs are allocated top-down here. We use
- the current TEB address as very simple test that this is a large
- address aware executable.
- The above test for an address beyond 0xbf000000 is supposed to
- make sure that we really have 3GB on a 32 bit system. XP and
- later support smaller large address regions, but then it's not
- that interesting for us to use it for the heap.
- If the region is big enough, the heap gets allocated at its
- start. What we get are 0.999 or 1.999 Gigs of free contiguous
- memory for heap, thread stacks, and shared memory regions. */
- start_address = 0x80000000L;
- }
-#endif
- return start_address;
-}
-
-static SIZE_T
-eval_initial_heap_size ()
-{
- PIMAGE_DOS_HEADER dosheader;
- PIMAGE_NT_HEADERS ntheader;
- SIZE_T size;
-
- dosheader = (PIMAGE_DOS_HEADER) GetModuleHandle (NULL);
- ntheader = (PIMAGE_NT_HEADERS) ((PBYTE) dosheader + dosheader->e_lfanew);
- /* LoaderFlags is an obsolete DWORD member of the PE/COFF file header.
- It's value is ignored by the loader, so we're free to use it for
- Cygwin. If it's 0, we default to the usual 384 Megs on 32 bit and
- 512 on 64 bit. Otherwise, we use it as the default initial heap size
- in megabyte. Valid values are between 4 and 2048/8388608 Megs. */
-
- size = ntheader->OptionalHeader.LoaderFlags;
-#ifdef __x86_64__
- if (size == 0)
- size = 512;
- else if (size < 4)
- size = 4;
- else if (size > 8388608)
- size = 8388608;
-#else
- if (size == 0)
- size = 384;
- else if (size < 4)
- size = 4;
- else if (size > 2048)
- size = 2048;
-#endif
- return size << 20;
-}
-
-/* Initialize the heap at process start up. */
-void
-user_heap_info::init ()
-{
- const DWORD alloctype = MEM_RESERVE;
- /* If we're the forkee, we must allocate the heap at exactly the same place
- as our parent. If not, we (almost) don't care where it ends up. */
-
- page_const = wincap.page_size ();
- if (!base)
- {
- uintptr_t start_address = eval_start_address ();
- PVOID largest_found = NULL;
- SIZE_T largest_found_size = 0;
- SIZE_T ret;
- MEMORY_BASIC_INFORMATION mbi;
-
- chunk = eval_initial_heap_size ();
- do
- {
- base = VirtualAlloc ((LPVOID) start_address, chunk, alloctype,
- PAGE_NOACCESS);
- if (base)
- break;
-
- /* Ok, so we are at the 1% which didn't work with 0x20000000 out
- of the box. What we do now is to search for the next free
- region which matches our desired heap size. While doing that,
- we keep track of the largest region we found, including the
- region starting at 0x20000000. */
- while ((ret = VirtualQuery ((LPCVOID) start_address, &mbi,
- sizeof mbi)) != 0)
- {
- if (mbi.State == MEM_FREE)
- {
- if (mbi.RegionSize >= chunk)
- break;
- if (mbi.RegionSize > largest_found_size)
- {
- largest_found = mbi.BaseAddress;
- largest_found_size = mbi.RegionSize;
- }
- }
- /* Since VirtualAlloc only reserves at allocation granularity
- boundaries, we round up here, too. Otherwise we might end
- up at a bogus page-aligned address. */
- start_address = roundup2 (start_address + mbi.RegionSize,
- wincap.allocation_granularity ());
- }
- if (!ret)
- {
- /* In theory this should not happen. But if it happens, we have
- collected the information about the largest available region
- in the above loop. So, next we squeeze the heap into that
- region, unless it's smaller than the minimum size. */
- if (largest_found_size >= MINHEAP_SIZE)
- {
- chunk = largest_found_size;
- base = VirtualAlloc (largest_found, chunk, alloctype,
- PAGE_NOACCESS);
- }
- /* Last resort (but actually we are probably broken anyway):
- Use the minimal heap size and let the system decide. */
- if (!base)
- {
- chunk = MINHEAP_SIZE;
- base = VirtualAlloc (NULL, chunk, alloctype, PAGE_NOACCESS);
- }
- }
- }
- while (!base && ret);
- if (base == NULL)
- api_fatal ("unable to allocate heap, heap_chunk_size %ly, %E",
- chunk);
- ptr = top = base;
- max = (char *) base + chunk;
- }
- else
- {
- /* total size commited in parent */
- SIZE_T allocsize = (char *) top - (char *) base;
-
- /* Loop until we've managed to reserve an adequate amount of memory. */
- SIZE_T reserve_size = chunk * ((allocsize + (chunk - 1)) / chunk);
-
- /* With ptmalloc3 there's a good chance that there has been no memory
- allocated on the heap. If we don't check that, reserve_size will
- be 0 and from there, the below loop will end up overallocating due
- to integer overflow. */
- if (!reserve_size)
- reserve_size = chunk;
-
- char *p;
- while (1)
- {
- p = (char *) VirtualAlloc (base, reserve_size, alloctype,
- PAGE_READWRITE);
- if (p)
- break;
- if ((reserve_size -= page_const) < allocsize)
- break;
- }
- if (!p && in_forkee && !fork_info->abort (NULL))
- api_fatal ("couldn't allocate heap, %E, base %p, top %p, "
- "reserve_size %ld, allocsize %ld, page_const %d",
- base, top,
- reserve_size, allocsize, page_const);
- if (p != base)
- api_fatal ("heap allocated at wrong address %p (mapped) "
- "!= %p (expected)", p, base);
- if (allocsize && !VirtualAlloc (base, allocsize,
- MEM_COMMIT, PAGE_READWRITE))
- api_fatal ("MEM_COMMIT failed, %E");
- }
-
- /* CV 2012-05-21: Moved printing heap size here from strace::activate.
- The value printed in strace.activate was always wrong, because at the
- time it's called, cygheap points to cygheap_dummy. Above all, the heap
- size has not been evaluated yet, except in a forked child. Since
- heap_init is called early, the heap size is printed pretty much at the
- start of the strace output, so there isn't anything lost. */
- debug_printf ("heap base %p, heap top %p, heap size %ly (%lu)",
- base, top, chunk, chunk);
- page_const--;
- // malloc_init ();
-}
-
-#define pround(n) (((size_t)(n) + page_const) & ~page_const)
-/* Linux defines n to be intptr_t, newlib defines it to be ptrdiff_t.
- It shouldn't matter much, though, since the function is not standarized
- and sizeof(ptrdiff_t) == sizeof(intptr_t) anyway. */
-extern "C" void *
-sbrk (ptrdiff_t n)
-{
- return cygheap->user_heap.sbrk (n);
-}
-
-void __reg2 *
-user_heap_info::sbrk (ptrdiff_t n)
-{
-/* FIXME: This function no longer handles "split heaps". */
-
- char *newtop, *newbrk;
- SIZE_T commitbytes, newbrksize, reservebytes;
-
- if (n == 0)
- return ptr; /* Just wanted to find current ptr
- address */
-
- newbrk = (char *) ptr + n; /* Where new cptr will be */
- newtop = (char *) pround (newbrk); /* Actual top of allocated memory -
- on page boundary */
-
- if (newtop == top)
- goto good;
-
- if (n < 0)
- { /* Freeing memory */
- assert (newtop < top);
- n = (char *) top - newtop;
- /* FIXME: This doesn't work if we cross a virtual memory reservation
- border. If that happens, we have to free the space in multiple
- VirtualFree calls, aligned to the former reservation borders. */
- if (VirtualFree (newtop, n, MEM_DECOMMIT)) /* Give it back to OS */
- goto good;
- goto err; /* Didn't take */
- }
-
- assert (newtop > top);
-
- /* Find the number of bytes to commit, rounded up to the nearest page. */
- commitbytes = pround (newtop - (char *) top);
-
- /* Need to grab more pages from the OS. If this fails it may be because
- we have used up previously reserved memory. Or, we're just plumb out
- of memory. Only attempt to commit memory that we know we've previously
- reserved. */
- if (newtop <= max)
- {
- if (VirtualAlloc (top, commitbytes, MEM_COMMIT, PAGE_READWRITE))
- goto good;
- goto err;
- }
-
- /* The remainder of the existing heap is too small to fulfill the memory
- request. We have to extend the heap, so we reserve some more memory
- and then commit the remainder of the old heap, if any, and the rest of
- the required space from the extended heap. */
-
- /* For subsequent chunks following the base heap, reserve either 1 Megs
- per chunk, or the requested amount if it's bigger than 1 Megs. */
- reservebytes = commitbytes - ((char *) max - (char *) top);
- commitbytes -= reservebytes;
- if ((newbrksize = RAISEHEAP_SIZE) < reservebytes)
- newbrksize = reservebytes;
-
- if (VirtualAlloc (max, newbrksize, MEM_RESERVE, PAGE_NOACCESS)
- || VirtualAlloc (max, newbrksize = reservebytes, MEM_RESERVE,
- PAGE_NOACCESS))
- {
- /* Now commit the requested memory. Windows keeps all virtual
- reservations separate, so we can't commit the two regions in a single,
- combined call or we suffer an ERROR_INVALID_ADDRESS. The same error
- is returned when trying to VirtualAlloc 0 bytes, which would occur if
- the existing heap was already full. */
- if ((!commitbytes || VirtualAlloc (top, commitbytes, MEM_COMMIT,
- PAGE_READWRITE))
- && VirtualAlloc (max, reservebytes, MEM_COMMIT, PAGE_READWRITE))
- {
- max = (char *) max + pround (newbrksize);
- goto good;
- }
- /* If committing the memory failed, we must free the extendend reserved
- region, otherwise any other try to fetch memory (for instance by using
- mmap) may fail just because we still reserve memory we don't even know
- about. */
- VirtualFree (max, newbrksize, MEM_RELEASE);
- }
-
-err:
- set_errno (ENOMEM);
- return (void *) -1;
-
-good:
- void *oldbrk = ptr;
- ptr = newbrk;
- top = newtop;
- return oldbrk;
-}
diff --git a/winsup/cygwin/heap.h b/winsup/cygwin/heap.h
deleted file mode 100644
index bd15189b1..000000000
--- a/winsup/cygwin/heap.h
+++ /dev/null
@@ -1,20 +0,0 @@
-/* heap.h: Cygwin heap manager definitions.
-
- Copyright 2000, 2001, 2002 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "perprocess.h"
-
-/* Heap management. */
-void heap_init ();
-void malloc_init ();
-
-#define inheap(s) \
- (cygheap->user_heap.ptr && s \
- && ((char *) (s) >= (char *) cygheap->user_heap.base) \
- && ((char *) (s) <= (char *) cygheap->user_heap.top))
diff --git a/winsup/cygwin/hires.h b/winsup/cygwin/hires.h
deleted file mode 100644
index 23b2391d2..000000000
--- a/winsup/cygwin/hires.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/* hires.h: Definitions for hires clock calculations
-
- Copyright 2002, 2003, 2004, 2005, 2009, 2010, 2011, 2012, 2013 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef __HIRES_H__
-#define __HIRES_H__
-
-#include <mmsystem.h>
-
-/* Conversions for per-process and per-thread clocks */
-#define PID_TO_CLOCKID(pid) (pid * 8 + CLOCK_PROCESS_CPUTIME_ID)
-#define CLOCKID_TO_PID(cid) ((cid - CLOCK_PROCESS_CPUTIME_ID) / 8)
-#define CLOCKID_IS_PROCESS(cid) ((cid % 8) == CLOCK_PROCESS_CPUTIME_ID)
-#define THREADID_TO_CLOCKID(tid) (tid * 8 + CLOCK_THREAD_CPUTIME_ID)
-#define CLOCKID_TO_THREADID(cid) ((cid - CLOCK_THREAD_CPUTIME_ID) / 8)
-#define CLOCKID_IS_THREAD(cid) ((cid % 8) == CLOCK_THREAD_CPUTIME_ID)
-
-/* Largest delay in ms for sleep and alarm calls.
- Allow actual delay to exceed requested delay by 10 s.
- Express as multiple of 1000 (i.e. seconds) + max resolution
- The tv_sec argument in timeval structures cannot exceed
- HIRES_DELAY_MAX / 1000 - 1, so that adding fractional part
- and rounding won't exceed HIRES_DELAY_MAX */
-#define HIRES_DELAY_MAX ((((UINT_MAX - 10000) / 1000) * 1000) + 10)
-
-/* 100ns difference between Windows and UNIX timebase. */
-#define FACTOR (0x19db1ded53e8000LL)
-/* # of 100ns intervals per second. */
-#define NSPERSEC 10000000LL
-
-class hires_base
-{
- protected:
- int inited;
- public:
- void reset() {inited = false;}
-};
-
-class hires_ns : public hires_base
-{
- LARGE_INTEGER primed_pc;
- double freq;
- void prime ();
- public:
- LONGLONG nsecs (bool monotonic = false);
- LONGLONG usecs () {return nsecs () / 1000LL;}
- LONGLONG resolution();
-};
-
-class hires_ms : public hires_base
-{
- public:
- LONGLONG nsecs ();
- LONGLONG usecs () {return nsecs () / 10LL;}
- LONGLONG msecs () {return nsecs () / 10000LL;}
- UINT resolution ();
-};
-
-extern hires_ms gtod;
-#endif /*__HIRES_H__*/
diff --git a/winsup/cygwin/hookapi.cc b/winsup/cygwin/hookapi.cc
deleted file mode 100644
index 133d8cbf5..000000000
--- a/winsup/cygwin/hookapi.cc
+++ /dev/null
@@ -1,461 +0,0 @@
-/* hookapi.cc
-
- Copyright 2005, 2006, 2007, 2008, 2011, 2012, 2013 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include <stdlib.h>
-#include <sys/param.h>
-#include "ntdll.h"
-#include "cygerrno.h"
-#include "security.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-
-#define rva(coerce, base, addr) (coerce) ((char *) (base) + (addr))
-#define rvacyg(coerce, addr) rva (coerce, cygwin_hmodule, addr)
-
-struct function_hook
-{
- const char *name; // Function name, e.g. "DirectDrawCreateEx".
- const void *hookfn; // Address of your function.
- void *origfn; // Stored by HookAPICalls, the address of the original function.
-};
-
-/* Given an HMODULE, returns a pointer to the PE header. */
-static PIMAGE_NT_HEADERS
-PEHeaderFromHModule (HMODULE hModule, bool &is_64bit)
-{
- PIMAGE_NT_HEADERS pNTHeader;
-
- if (PIMAGE_DOS_HEADER (hModule) ->e_magic != IMAGE_DOS_SIGNATURE)
- pNTHeader = NULL;
- else
- {
- pNTHeader = PIMAGE_NT_HEADERS (PBYTE (hModule)
- + PIMAGE_DOS_HEADER (hModule) ->e_lfanew);
- if (pNTHeader->Signature != IMAGE_NT_SIGNATURE)
- pNTHeader = NULL;
- else if (pNTHeader->FileHeader.Machine == IMAGE_FILE_MACHINE_AMD64)
- is_64bit = true;
- else if (pNTHeader->FileHeader.Machine == IMAGE_FILE_MACHINE_I386)
- is_64bit = false;
- else
- pNTHeader = NULL;
- }
-
- return pNTHeader;
-}
-
-static long
-rvadelta (PIMAGE_NT_HEADERS pnt, DWORD import_rva, DWORD &max_size)
-{
- PIMAGE_SECTION_HEADER section = (PIMAGE_SECTION_HEADER) (pnt + 1);
- for (int i = 0; i < pnt->FileHeader.NumberOfSections; i++)
- if (section[i].VirtualAddress <= import_rva
- && (section[i].VirtualAddress + section[i].Misc.VirtualSize) > import_rva)
- {
- max_size = section[i].SizeOfRawData
- - (import_rva - section[i].VirtualAddress);
- return section[i].VirtualAddress - section[i].PointerToRawData;
- }
- return -1;
-}
-
-/* This function is only used for the current architecture.
- Just the size of the IMAGE_THUNK_DATA Function member differs. */
-static void *
-putmem (PIMAGE_THUNK_DATA pi, const void *hookfn)
-{
-#ifdef __x86_64__
-#define THUNK_FUNC_TYPE ULONGLONG
-#else
-#define THUNK_FUNC_TYPE DWORD
-#endif
-
- DWORD ofl;
- if (!VirtualProtect (pi, sizeof (THUNK_FUNC_TYPE), PAGE_READWRITE, &ofl) )
- return NULL;
-
- void *origfn = (void *) pi->u1.Function;
- pi->u1.Function = (THUNK_FUNC_TYPE) hookfn;
-
- VirtualProtect (pi, sizeof (THUNK_FUNC_TYPE), ofl, &ofl);
- return origfn;
-}
-
-/* Builds stubs for and redirects the IAT for one DLL (pImportDesc)
- This function is only used for the current architecture. */
-
-static bool
-RedirectIAT (function_hook& fh, PIMAGE_IMPORT_DESCRIPTOR pImportDesc,
- HMODULE hm)
-{
- // If no import names table, we can't redirect this, so bail
- if (pImportDesc->OriginalFirstThunk == 0)
- return false;
-
- /* import address table */
- PIMAGE_THUNK_DATA pt = rva (PIMAGE_THUNK_DATA, hm, pImportDesc->FirstThunk);
- /* import names table */
- PIMAGE_THUNK_DATA pn = rva (PIMAGE_THUNK_DATA, hm, pImportDesc->OriginalFirstThunk);
-
- /* Scan through the IAT, completing the stubs and redirecting the IAT
- entries to point to the stubs. */
- for (PIMAGE_THUNK_DATA pi = pt; pn->u1.Ordinal; pi++, pn++)
- {
- if (IMAGE_SNAP_BY_ORDINAL (pn->u1.Ordinal) )
- continue;
-
- /* import by name */
- PIMAGE_IMPORT_BY_NAME pimp = rva (PIMAGE_IMPORT_BY_NAME, hm, pn->u1.AddressOfData);
-
- if (strcmp (fh.name, (char *) pimp->Name) == 0)
- {
- fh.origfn = putmem (pi, fh.hookfn);
- if (!fh.origfn)
- return false;
- hook_chain *hc;
- for (hc = &cygheap->hooks; hc->next; hc = hc->next)
- continue;
- hc->next = (hook_chain *) cmalloc_abort (HEAP_1_HOOK, sizeof (hook_chain));
- hc->next->loc = (void **) pi;
- hc->next->func = fh.hookfn;
- hc->next->next = NULL;
- break;
- }
- }
-
- return true;
-}
-
-/* This function is only used for the current architecture. */
-static void
-get_export (function_hook& fh)
-{
- PIMAGE_DOS_HEADER pdh = (PIMAGE_DOS_HEADER) cygwin_hmodule;
- if (pdh->e_magic != IMAGE_DOS_SIGNATURE)
- return;
- PIMAGE_NT_HEADERS pnt = (PIMAGE_NT_HEADERS) ((char *) pdh + pdh->e_lfanew);
- if (pnt->Signature != IMAGE_NT_SIGNATURE || pnt->FileHeader.SizeOfOptionalHeader == 0)
- return;
- PIMAGE_EXPORT_DIRECTORY pexp =
- rvacyg (PIMAGE_EXPORT_DIRECTORY,
- pnt->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress);
- if (!pexp)
- return;
-
- PDWORD pfuncs = rvacyg (PDWORD, pexp->AddressOfFunctions);
- PDWORD pnames = rvacyg (PDWORD, pexp->AddressOfNames);
- for (DWORD i = 0; i < pexp->NumberOfNames; i++)
- if (strcmp (fh.name, rvacyg (char *, pnames[i])) == 0)
- {
- fh.origfn = rvacyg (void *, pfuncs[i]);
- break;
- }
-}
-
-static const char *
-makename (const char *name, char *&buf, int& i, int inc)
-{
- i += inc;
- static const char *testers[] = {"NOTUSED", "64", "32"};
- if (i < 0 || i >= (int) (sizeof (testers) / sizeof (testers[0])))
- return NULL;
- if (i)
- {
- __small_sprintf (buf, "_%s%s", name, testers[i]);
- name = buf;
- }
- return name;
-}
-
-static HMODULE
-remap (PIMAGE_IMPORT_DESCRIPTOR &pdfirst, long &delta, HANDLE hc,
- DWORD importRVA, DWORD importRVASize, DWORD importRVAMaxSize)
-{
- /* If h is not NULL, the calling function only mapped at most the first
- 64K of the image. The IAT is usually at the end of the image, so
- what we do here is to map the IAT into our address space if it doesn't
- reside in the first 64K anyway. The offset must be a multiple of the
- allocation granularity, though, so we have to map a bit more. */
- HMODULE map;
- DWORD offset = rounddown (importRVA, wincap.allocation_granularity ());
- /* But that's not all, unfortunately. Apparently there's a difference
- between the importRVASize of applications built with gcc and those
- built with Visual Studio. When built with gcc, importRVASize contains
- the size of the import RVA table plus the size of the referenced
- string table with the DLL names. When built with VS, it only contains
- the size of the naked import RVA table. The following code handles
- the situation. importRVAMaxSize contains the size of the remainder
- of the section. If the difference between importRVAMaxSize and
- importRVASize is less than 64K, we just use importRVAMaxSize to
- compute the size of the memory map. Otherwise the executable may be
- very big. In that case we only map the import RVA table and ... */
- DWORD size = importRVA - offset + ((importRVAMaxSize - importRVASize
- <= wincap.allocation_granularity ())
- ? importRVAMaxSize : importRVASize);
- map = (HMODULE) MapViewOfFile (hc, FILE_MAP_READ, 0, offset, size);
- if (!map)
- return NULL;
- pdfirst = rva (PIMAGE_IMPORT_DESCRIPTOR, map, importRVA - offset);
- /* ... carefully check the required size to fit the string table into
- the map as well. Allow NAME_MAX bytes for the DLL name, but don't
- go beyond the remainder of the section. */
- if (importRVAMaxSize - importRVASize > wincap.allocation_granularity ())
- {
- DWORD newsize = size;
- for (PIMAGE_IMPORT_DESCRIPTOR pd = pdfirst; pd->FirstThunk; pd++)
- if (pd->Name - delta - offset + (NAME_MAX + 1) > newsize)
- newsize = pd->Name - delta - offset + (NAME_MAX + 1);
- if (newsize > size)
- {
- if (newsize > importRVA - offset + importRVAMaxSize)
- newsize = importRVA - offset + importRVAMaxSize;
- UnmapViewOfFile (map);
- map = (HMODULE) MapViewOfFile (hc, FILE_MAP_READ, 0, offset, newsize);
- if (!map)
- return NULL;
- pdfirst = rva (PIMAGE_IMPORT_DESCRIPTOR, map, importRVA - offset);
- }
- }
- delta += offset;
- return map;
-}
-
-/* Find first missing dll in a given executable.
- FIXME: This is not foolproof since it doesn't look for dlls in the
- same directory as the given executable, like Windows. Instead it
- searches for dlls in the context of the current executable.
- It also only finds direct dependencies, not indirect ones. */
-const char *
-find_first_notloaded_dll (path_conv& pc)
-{
- const char *res = "?";
- HANDLE hc = NULL;
- HMODULE hm = NULL;
- OBJECT_ATTRIBUTES attr;
- IO_STATUS_BLOCK io;
- HANDLE h;
- NTSTATUS status;
- LARGE_INTEGER size;
- PIMAGE_NT_HEADERS pExeNTHdr;
- DWORD importRVA, importRVASize, importRVAMaxSize;
- HMODULE map;
- long delta;
-
- status = NtOpenFile (&h, SYNCHRONIZE | GENERIC_READ,
- pc.get_object_attr (attr, sec_none_nih),
- &io, FILE_SHARE_VALID_FLAGS,
- FILE_SYNCHRONOUS_IO_NONALERT
- | FILE_OPEN_FOR_BACKUP_INTENT
- | FILE_NON_DIRECTORY_FILE);
- if (!NT_SUCCESS (status))
- goto out;
- /* Just as in hook_or_detect_cygwin below, we have to take big executables
- into account. That means, we must not try to map the entire file, since
- there's no guarantee that the current process has enough VM in one block
- left for this mapping. The offset computation below ignores very big
- executables for now. In theory, since the import RVA table appears to
- be more or less at the end of the data section, independent of the used
- compiler, that shouldn't matter. */
- if (!GetFileSizeEx (h, &size))
- {
- NtClose (h);
- goto out;
- }
- if (size.QuadPart > (LONGLONG) wincap.allocation_granularity ())
- size.LowPart = wincap.allocation_granularity ();
- hc = CreateFileMapping (h, &sec_none_nih, PAGE_READONLY, 0, 0, NULL);
- NtClose (h);
- if (!hc)
- goto out;
- hm = (HMODULE) MapViewOfFile(hc, FILE_MAP_READ, 0, 0, size.LowPart);
- if (!hm)
- goto out;
-
- bool is_64bit;
- pExeNTHdr = PEHeaderFromHModule (hm, is_64bit);
-
- if (!pExeNTHdr)
- goto out;
-
-#ifdef __x86_64__
- if (!is_64bit)
-#else
- if (is_64bit)
-#endif
- goto out;
-
- importRVA = pExeNTHdr->OptionalHeader.DataDirectory
- [IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress;
- importRVASize = pExeNTHdr->OptionalHeader.DataDirectory
- [IMAGE_DIRECTORY_ENTRY_IMPORT].Size;
- if (!importRVA)
- goto out;
-
- delta = rvadelta (pExeNTHdr, importRVA, importRVAMaxSize);
- if (delta < 0)
- goto out;
- importRVA -= delta;
- map = NULL;
-
- PIMAGE_IMPORT_DESCRIPTOR pdfirst;
-
- if (importRVA + importRVAMaxSize > wincap.allocation_granularity ())
- {
- map = remap (pdfirst, delta, hc, importRVA, importRVASize,
- importRVAMaxSize);
- if (!map)
- goto out;
- }
- else
- pdfirst = rva (PIMAGE_IMPORT_DESCRIPTOR, hm, importRVA);
-
- /* Iterate through each import descriptor, and check if DLL can be loaded. */
- for (PIMAGE_IMPORT_DESCRIPTOR pd = pdfirst; pd->FirstThunk; pd++)
- {
- const char *lib = rva (PSTR, map ?: hm, pd->Name - delta);
- if (!LoadLibraryEx (lib, NULL, DONT_RESOLVE_DLL_REFERENCES
- | LOAD_LIBRARY_AS_DATAFILE))
- {
- static char buf[MAX_PATH];
- strlcpy (buf, lib, MAX_PATH);
- res = buf;
- }
- }
- if (map)
- UnmapViewOfFile (map);
-
-out:
- if (hm)
- UnmapViewOfFile (hm);
- if (hc)
- CloseHandle (hc);
-
- return res;
-}
-
-// Top level routine to find the EXE's imports and redirect them
-void *
-hook_or_detect_cygwin (const char *name, const void *fn, WORD& subsys, HANDLE h)
-{
- HMODULE hm = fn ? GetModuleHandle (NULL) : (HMODULE) name;
- bool is_64bit;
- PIMAGE_NT_HEADERS pExeNTHdr = PEHeaderFromHModule (hm, is_64bit);
-
- if (!pExeNTHdr)
- return NULL;
-
- /* Shortcut. We don't have to do anything further from here, if the
- executable's architecture doesn't match, unless we want to support
- a mix of 32 and 64 bit Cygwin at one point. */
-#ifdef __x86_64__
- if (!is_64bit)
-#else
- if (is_64bit)
-#endif
- return NULL;
-
- DWORD importRVA, importRVASize;
- subsys = pExeNTHdr->OptionalHeader.Subsystem;
- importRVA = pExeNTHdr->OptionalHeader.DataDirectory
- [IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress;
- importRVASize = pExeNTHdr->OptionalHeader.DataDirectory
- [IMAGE_DIRECTORY_ENTRY_IMPORT].Size;
- if (!importRVA)
- return NULL;
-
- DWORD importRVAMaxSize = 0;
- long delta = fn ? 0 : rvadelta (pExeNTHdr, importRVA, importRVAMaxSize);
- if (delta < 0)
- return NULL;
- importRVA -= delta;
-
- // Convert imports RVA to a usable pointer
- PIMAGE_IMPORT_DESCRIPTOR pdfirst;
- char *map = NULL;
- if (h && importRVA + importRVAMaxSize > wincap.allocation_granularity ())
- {
- map = (char *) remap (pdfirst, delta, h, importRVA, importRVASize,
- importRVAMaxSize);
- if (!map)
- return NULL;
- }
- else
- pdfirst = rva (PIMAGE_IMPORT_DESCRIPTOR, hm, importRVA);
-
- function_hook fh;
- fh.origfn = NULL;
- fh.hookfn = fn;
- char *buf = NULL;
- if (fn)
- buf = (char *) alloca (strlen (name) + sizeof ("_64"));
- int i = 0;
- // Iterate through each import descriptor, and redirect if appropriate
- for (PIMAGE_IMPORT_DESCRIPTOR pd = pdfirst; pd->FirstThunk; pd++)
- {
- if (!ascii_strcasematch (rva (PSTR, map ?: (char *) hm, pd->Name - delta),
- "cygwin1.dll"))
- continue;
- if (!fn)
- {
- /* Just checking if executable used cygwin1.dll. */
- if (map)
- UnmapViewOfFile (map);
- return (void *) "found it";
- }
- i = -1;
- while (!fh.origfn && (fh.name = makename (name, buf, i, 1)))
- RedirectIAT (fh, pd, hm);
- if (fh.origfn)
- break;
- }
-
- if (map)
- UnmapViewOfFile (map);
- if (!fn)
- return NULL;
-
- while (!fh.origfn && (fh.name = makename (name, buf, i, -1)))
- get_export (fh);
-
- return fh.origfn;
-}
-
-void
-ld_preload ()
-{
- char *p = getenv ("LD_PRELOAD");
- if (!p)
- return;
- char *s = (char *) alloca (strlen (p) + 1);
- strcpy (s, p);
- char *here = NULL;
- for (p = strtok_r (s, ":\t\n", &here); p; p = strtok_r (NULL, ":\t\n", &here))
- {
- path_conv lib (p);
- WCHAR libname[lib.get_wide_win32_path_len () + 1];
- if (!LoadLibraryW (lib.get_wide_win32_path (libname)))
- {
- __seterrno ();
- api_fatal ("error while loading shared libraries: %s: "
- "cannot open shared object file: %s", p,
- strerror (get_errno ()));
- }
- }
-}
-
-void
-fixup_hooks_after_fork ()
-{
- for (hook_chain *hc = &cygheap->hooks; (hc = hc->next); )
- putmem ((PIMAGE_THUNK_DATA) hc->loc, hc->func);
-}
diff --git a/winsup/cygwin/how-autoload-works.txt b/winsup/cygwin/how-autoload-works.txt
deleted file mode 100644
index 8cff52900..000000000
--- a/winsup/cygwin/how-autoload-works.txt
+++ /dev/null
@@ -1,66 +0,0 @@
-Copyright 2002 Red Hat Inc., Egor Duda
-
-How does function autoloading work?
-
-Cygwin has the ability to handle win32 functions which are present on
-some platforms and not present on others via autoload mechanism. It's
-essentially a lazy binding of symbols. It works as following. For
-(almost) every function from OS API which cygwin uses, a stub is created
-in file autoload.cc. Each reference to the such function from win32 API
-in cygwin dll source code is actually pointing to this stub.
-
-When the function, say GetConsoleWindow(), is called for the first time,
-the control is passed to its stub. The stub tries to load the
-appropriate system dll via LoadModule() and get the actual function
-address via GetProcAddress(). If this operation succeeds, the stub is
-"patched" to pass control to actual address of GetConsoleWindow() in
-appropriate system dll, so that next time we won't have to load dll and
-perform address lookup in it again. From this point on, the call to the
-function is performed as if the dll/function were linked statically.
-
-If LoadModule() or GetProcAddress() fail, (and on nt4 the latter indeed
-fails because GetConsoleWindow() is not available in kernel32.dll), then
-the application, depending on what kind of stub is created in
-autoload.cc, will either:
-
-1) Exit with fatal error.
-
-2) Or return a predefined value indicating an error; and set the windows
-error code to 127 (ERROR_PROC_NOT_FOUND).
-
-Almost all w32api functions are linked into the cygwin dll in this
-manner, dynamically, at runtime.
-
-The costs:
-1) A tiny overhead in the initial call to a function call as each call
-is performed, indirectly, via a stub. For the first lookup of a symbol
-of an unloaded dll, there is also some overhead in loading the dll for
-the first time. The dll is only loaded by the first call to a symbol
-in the dll. After the first call to a function, subsequent calls are
-as fast as a normal, statically loaded function.
-
-The benefits:
-1) Speedup at startup time. Applications only load those dlls which are
-actually needed. For example, if application never uses socket
-functions, winsock dlls are never loaded.
-
-2) Greatly simplify wincap system -- we don't need to have a separate
-capability for every win32 function which may or may not be present on
-particular win32 platform.
-
-3) Allows a single cygwin1.dll for all win32 platforms.
-
-If you're changing in cygwin1.dll source code and if you use some
-function that was not used there before, you should add a stub so it
-will be autoloaded. To do so, add one of the LoadDllfunc* macros to
-autoload.cc. All macros eventually resolve to the following form:
-
-LoadDLLfuncEx2 (function name, parameter block length, dll name,
- non-fatality flag , value to return if function not available)
-
-Parameter block length is a sum of sizes (in bytes) of parameters which are
-being passed to the function. If non-fatality flag is set to 0, then failure
-to load dll and find a function will cause fatal error. If non fatality flag
-is set to 1, then call to the function will return default value.
-You can also use shorter versions -- LoadDLLfuncEx and LoadDLLfunc, if the
-defaults they provide suit your needs.
diff --git a/winsup/cygwin/how-cygheap-works.txt b/winsup/cygwin/how-cygheap-works.txt
deleted file mode 100644
index b60f88808..000000000
--- a/winsup/cygwin/how-cygheap-works.txt
+++ /dev/null
@@ -1,120 +0,0 @@
-Copyright 2001 Red Hat Inc., Christopher Faylor
-
-Cygwin has recently adopted something called the "cygwin heap". This is
-an internal heap that is inherited by forked/execed children. It
-consists of process specific information that should be inherited. So
-things like the file descriptor table, the current working directory,
-and the chroot value live there.
-
-The cygheap is also used to pass argv information to a child process.
-There is a problem here, though. If you allocate space for argv on the
-heap and then exec a process the child process (1) will happily use the
-space in the heap. But what happens when that process execs another
-process (2)? The space used by child process (1) still is being used in
-child process (2) but it is basically just a memory leak.
-
-To rectify this problem, memory used by child process 1 is tagged in
-such a way that child process 2 will know to delete it. This is in
-cygheap_fixup_in_child.
-
-The cygheap memory allocation functions are adapted from memory
-allocators developed by DJ Delorie. They are similar to early BSD
-malloc and are intended to be relatively lightweight and relatively
-fast.
-
-How is the cygheap propagated to the child?
-
-Well, it depends if you are running on Windows 9x or Windows NT.
-
-On NT and 9x, just before CreateProcess is about to be called in
-fork or exec, a shared memory region is prepared for copying of the
-cygwin heap. This is in cygheap_setup_for_child. The handle to this
-shared memory region is passed to the new process in the 'child_info'
-structure.
-
-If there are no handles that need "fixing up" prior to starting another
-process, cygheap_setup_for_child will also copy the contents of the
-cygwin heap to the shared memory region.
-
-If there are any handles that need "fixing up" prior to invoking
-another process (i.e., sockets) then the creation of the shared
-memory region and copying of the current cygwin heap is a two
-step process.
-
-First the shared memory region is created and the process is started
-in a "CREATE_SUSPENDED" state, inheriting the handle. After the
-process is created, the fixup_before_*() functions are called. These
-set information in the heap and duplicate handles in the child, essentially
-ensuring that the child's fd table is correct.
-
-(Note that it is vital that the cygwin heap should not grow during this
-process. Currently, there is no guard against this happening so this
-operation is not thread safe.)
-
-Meanwhile, back in fork_parent, the function
-cygheap_setup_for_child_cleanup is called. In the simple "one step"
-case above, all that happens is that the shared memory is ummapped and
-the handle referring to it is closed.
-
-In the two step process, the cygheap is now copied to the shared memory
-region, complete with new fdtab info (the child process will see the
-updated information as soon as it starts). Then the memory is unmapped,
-the handle is closed, and upon return the child process is started.
-
-It is in the child process that the difference between Windows 9x and
-Windows NT becomes evident.
-
-Under Windows NT, the operation is simple. The shared memory handle is
-used to map the information that the parent has set up into the cygheap
-location in the child. This means that the child has a copy of the
-cygwin heap existing in "shared memory" but the only process with a view
-to this "shared memory" is the child.
-
-Under Windows 9x, due to address limitations, we can't just map the
-shared memory region into the cygheap position. So, instead, the memory
-is mapped whereever Windows wants to put it, a new heap region is
-allocated at the same place as in the parent, the contents of the shared
-memory is *copied* to the new heap, and the shared memory is unmapped.
-Simple, huh?
-
-Why do we go to these contortions? Previous versions (<1.3.3) of cygwin
-used to block when creating a child so that the child could copy the
-parent's cygheap. The problem with this was that when a cygwin process
-invoked a non-cygwin child, it would block forever waiting for the child
-to let it know that it was done copying the heap. That caused
-understandable complaints from people who wanted to run non-cygwin
-applications "in the background".
-
-In Cygwin 1.3.3 (and presumably beyond) the location of the cygwin heap
-has been fixed to be at the end of the cygwin1.dll address space.
-Previously, we let the "OS" choose where to allocate the cygwin heap in
-the initial cygwin process and attempted to use this same location in
-subsequent cygwin processes started from this parent.
-
-The reason for putting cygheap at a fixed, known location is that we
-need to put this information at a fixed location since it incorporates
-pointers to entities within itself. So, when a process forks or execs,
-the memory referred to by the pointers has to exist at the same place in
-both the parent or the child.
-
-(It "might be nice" to used something like Microsoft's "based pointers"
-for the cygheap. Unfortunately gcc does not support that feature, as of
-this writing.)
-
-The reason for choosing a fixed, arbitrary location is to accommodate
-Windows XP, although there were sporadic complaints of cygwin heap
-failures in other pathological situations with both NT and 9x. In
-Windows XP, Microsoft made the allocation of memory less deterministic.
-This is certainly their right. Cygwin was previously relying on
-undocumented and "iffy" behavior before. So, now we always allocate
-space immediately after the dll in the theory that there is not going
-to be anything else living there.
-
-Recent (2001-09-20) cygwin email threads have indicated that we're not
-exactly on completely firm ground now, though. We are assuming that
-there is sufficient space after the cygwin DLL for the allocation of the
-cygwin heap. Unfortunately the ld option '--enable-auto-image-base'
-has a tendency to allocate DLLs immediately after cygwin1.dll. This
-causes the dreaded "Couldn't reserve space for cygwin's heap" message.
-
-Solutions for this behavior are currently in the musing state.
diff --git a/winsup/cygwin/how-cygtls-works.txt b/winsup/cygwin/how-cygtls-works.txt
deleted file mode 100644
index 69363f1fb..000000000
--- a/winsup/cygwin/how-cygtls-works.txt
+++ /dev/null
@@ -1,75 +0,0 @@
-Copyright 2005 Red Hat Inc., Max Kaehn
-
-All cygwin threads have separate context in an object of class _cygtls. The
-storage for this object is kept on the stack in the bottom CYGTLS_PADSIZE
-bytes. Each thread references the storage via the Thread Environment Block
-(aka Thread Information Block), which Windows maintains for each user thread
-in the system, with the address in the FS segment register. The memory
-is laid out as in the NT_TIB structure from <w32api/winnt.h>:
-
-typedef struct _NT_TIB {
- struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList;
- PVOID StackBase;
- PVOID StackLimit;
- PVOID SubSystemTib;
- _ANONYMOUS_UNION union {
- PVOID FiberData;
- DWORD Version;
- } DUMMYUNIONNAME;
- PVOID ArbitraryUserPointer;
- struct _NT_TIB *Self;
-} NT_TIB,*PNT_TIB;
-
-Cygwin sees it like this:
-
-extern exception_list *_except_list asm ("%fs:0"); // exceptions.cc
-extern char *_tlsbase __asm__ ("%fs:4"); // cygtls.h
-extern char *_tlstop __asm__ ("%fs:8"); // cygtls.h
-
-And accesses cygtls like this:
-
-#define _my_tls (((_cygtls *) _tlsbase)[-1]) // cygtls.h
-
-
-Initialization always goes through _cygtls::init_thread(). It works
-in the following ways:
-
-* In the main thread, _dll_crt0() provides CYGTLS_PADSIZE bytes on the stack
- and passes them to initialize_main_tls(), which calls _cygtls::init_thread().
- It then calls dll_crt0_1(), which terminates with cygwin_exit() rather than
- by returning, so the storage never goes out of scope.
-
- If you load cygwin1.dll dynamically from a non-cygwin application, it is
- vital that the bottom CYGTLS_PADSIZE bytes of the stack are not in use
- before you call cygwin_dll_init(). See winsup/testsuite/cygload for
- more information.
-
-* Threads other than the main thread receive DLL_THREAD_ATTACH messages
- to dll_entry() (in init.cc).
- - dll_entry() calls munge_threadfunc(), which grabs the function pointer
- for the thread from the stack frame and substitutes threadfunc_fe(),
- - which then passes the original function pointer to _cygtls::call(),
- - which then allocates CYGTLS_PADSIZE bytes on the stack and hands them
- to call2(),
- - which allocates an exception_list object on the stack and hands it to
- init_exceptions() (in exceptions.cc), which attaches it to the end of
- the list of exception handlers, changing _except_list (aka
- tib->ExceptionList), then passes the cygtls storage to init_thread().
- call2() calls ExitThread() instead of returning, so the storage never
- goes out of scope.
-
-Note that the padding isn't necessarily going to be just where the _cygtls
-structure lives; it just makes sure there's enough room on the stack when the
-CYGTLS_PADSIZE bytes down from there are overwritten.
-
-
-Debugging
-
-You can examine the segment registers in gdb via "info w32 selector $fs"
-(which is using GetThreadSelectorEntry()) to get results like this:
-
- Selector $fs
- 0x03b: base=0x7ffdd000 limit=0x00000fff 32-bit Data (Read/Write, Exp-up)
- Priviledge level = 3. Byte granular.
-
-"x/3x 0x7ffdd000" will give you _except_list, _tlsbase, and _tlstop.
diff --git a/winsup/cygwin/how-fhandlers-work.txt b/winsup/cygwin/how-fhandlers-work.txt
deleted file mode 100644
index cef46fedc..000000000
--- a/winsup/cygwin/how-fhandlers-work.txt
+++ /dev/null
@@ -1,75 +0,0 @@
-Copyright 2001 Red Hat Inc., Robert Collins
-
-fhandlers are the core mechanism by which cygwin provides a file descripter (fd)
-interface to things such as a random number generated, winsock sockets, raw disk
-devices, the clipboard, the console and so on. Under unix access to all such
-devices is via a combination of IOCTL's and open/close/read/write calls. Some
-special functions do exist - such as bind () and listen () for sockets, but
-these consistently operate on fd's. Under Win32 there are disparate interfaces
-that have little in common with each other. See for example Direct Sound and
-the Clipboard.
-
-The fhandler class provides all open,read,write,close, ioctl and fork()/exec()
-functionality for the fd interface. The base class operates on win32 backed
-files. The various derived classes utilise win32 primitives to provide their
-specific functionality.
-
-When a file is opened - not necesarily via open() a fd is assigned to it. The fd
-includes a pointer to the actual fhandler that operates this specific file. All
-file-oriented system calls then operate off this basic structure.
-
-For example, lets examine lseek ().
-
-extern "C" off_t
-_lseek (int fd, off_t pos, int dir)
-{
- off_t res;
- sigframe thisframe (mainthread);
-
- if (dir != SEEK_SET && dir != SEEK_CUR && dir != SEEK_END)
- {
- set_errno (EINVAL);
- res = -1;
- }
- else if (cygheap->fdtab.not_open (fd))
- {
- set_errno (EBADF);
- res = -1;
- }
- else
- {
- res = cygheap->fdtab[fd]->lseek (pos, dir);
- }
- syscall_printf ("%d = lseek (%d, %d, %d)", res, fd, pos, dir);
-
- return res;
-}
-
-The sigframe thisframe (mainthread); is signal related - see
-"how_signals_work.txt".
-
-The if, else if, else tests (in order)
-* the validity of the dir parameter,
-* is the fd being passed actually open? (cannot seek on a closed fd)
-* call the lseek virtual function in the associated fhandler.
-
-So as you can see, there is no code that attempts to understand the nature of
-the fhandler.
-
-fhandlers that make cross-function-call use of win32 objects that are not
-inheritable cross-process need to implement fixup-after-fork and recreate those
-objects. HANDLES can be inherited, but memory mapped regions (for example)
-cannot.
-
-For an example step-by-step to create a new fhandler, see
-../doc/fhandler-tut.txt
-
-Note: In most case, it is safe to assume that using new/delete (or
-malloc/free) in an fhandler is dangerous and to be avoided. The reason
-for this is that memory allocated to fhandlers is copied between execed
-processes in the cygwin heap. Memory allocated in new/delete is only
-copied to forked processes. So use cmalloc/cfree.
-
-Obviously it is possible to use new/delete in some situations but if you're
-seeing strange core dumps with usages like cat < /my/newfhandler then the
-above may well be the culprit.
diff --git a/winsup/cygwin/how-signals-work.txt b/winsup/cygwin/how-signals-work.txt
deleted file mode 100644
index 4d94c79dc..000000000
--- a/winsup/cygwin/how-signals-work.txt
+++ /dev/null
@@ -1,158 +0,0 @@
-Copyright 2001, 2002, 2003, 2004 Red Hat Inc., Christopher Faylor
-
-[note that the following discussion is still incomplete]
-
-How do signals work?
-
-On process startup, cygwin starts a secondary thread which deals with
-signals. This thread contains a loop which blocks waiting for
-information to arrive on a pipe whose handle (sendsig) is currently
-stored in _pinfo (this may change).
-
-Communication on the sendsig pipe is via the 'sigpacket' structure.
-This structure is filled out by the sig_send function with information
-about the signal being sent, such as (as of this writing) the signal
-number, the originating pid, the originating thread, and the address of
-the mask to use (this may change).
-
-Any cygwin function which calls a win32 api function is wrapped by the
-assembly functions "_sigfe" and "_sigbe". These functions maintain a
-cygwin "signal stack" which is used by the signal thread to control
-handling of signal interrupts. Cygwin functions which need to be
-wrapped by these functions (the majority) are labelled by the SIGFE
-option in the file cygwin.din.
-
-The cygwin.din function is translated into a standard cygwin.def file by
-the perl script "gendef". This function notices exported cygwin
-functions which are labelled as SIGFE and generates a front end assembly
-file "sigfe.s" which contains the wrapper glue necessary for every
-function to call sigfe prior to actually dispatching to the real cygwin
-function. This generated file contains low-level signal related
-functions: _sigfe, _sigbe, sigdelayed, sigreturn, longjmp, and setjmp.
-
-The signal stack maintained by sigfe/sigbe and friends is a secondary
-shadow stack. Addresses from this stack are swapped into the "real"
-stack as needed to control program flow. The intent is that executing
-cygwin functions will still see the same stack layout as if they had
-been called directly and will be able to retrieve arguments from the
-stack but will always return to the _sigbe routine so that any signal
-handlers will be properly called.
-
-Upon receipt of a "non-special" (see below) signal, the function
-sigpacket::process is called. This function determines what action, if
-any, to take on the signal. Possible actions are: Ignore the signal
-(e.g., SIGUSR1), terminate the program (SIGKILL, SIGTERM), stop the
-program (SIGSTOP, SIGTSTP, etc.), wake up a sigwait or sigwaitinfo in a
-targetted thread, or call a signal handler (possibly in a thread). If
-no thread information has been sent to sigpacket::process, it determines
-the correct thread to use based on various heuristics, as per UNIX. As
-per linux, the only time a handler is called in a thread is when there
-is some kind of fault like SIGSEGV, SIGILL, etc. Signals sent via the
-UNIX kill() function are normally sent to the main thread. Ditto
-signals sent as the result of pressing tty keys, like CTRL-C.
-
-Signals which stop a process are handled by a special internal handler:
-sig_handle_tty_stop. Some signals (e.g., SIGKILL, SIGSTOP) are
-uncatchable, as on UNIX.
-
-If the signal has an associated signal handler, then the setup_handler
-function is eventually called. It is passed the signal, the address of
-the handler, a standard UNIX sigaction structure, and a pointer to the
-thread's "_cygtls" information. The meat of signal processing is in
-setup_handler.
-
-setup_handler has a "simple" task. It tries to stop the appropriate
-thread and either redirect its execution to the signal handler function,
-flag that a signal has been received (sigwait) or both (sigpause).
-
-To accomplish its task, setup_handler first inspects the target thread's
-local storage (_cygtls) structure. This structure contains information
-on any not-yet-handled signals that may have been set up by a previous
-call to setup_handler but not yet dispatched in the target thread. If this
-structure seems to be "active", then setup_handler returns, notifying it's
-parent via a false value. Otherwise processing continues.
-
-(For pending signals, the theory is that the signal handler thread will
-be forced to be rerun by having some strategic cygwin function call
-sig_send with a __SIGFLUSH argument. This causes the signal handler to
-rescan the signal array looking for pending signals.)
-
-After determining that it's ok to send a signal, setup_handler will lock
-the cygtls stack to ensure that it has complete access. It will then
-inspect the thread's 'incyg' boolean. If this is true, the thread is
-currently executing a cygwin function. If it is false, the thread is
-unlocked and it is assumed that the thread is executing "user" code.
-The actions taken by setup_handler differ based on whether the program
-is executing a cygwin routine or not.
-
-If the program is executing a cygwin routine, then the
-interrupt_on_return function is called which causes the address of the
-'sigdelayed' function to be pushed onto the thread's signal stack, and
-the signal's mask and handler to be saved in the tls structure. After
-performing these operations, the 'signal_arrived' event is signalled, as
-well as any thread-specific wait event.
-
-Since the sigdelayed function was saved on the thread's signal stack,
-when the cygwin function returns, it will eventually return to the
-sigdelayed "front end". The sigdelayed function will save a lot of
-state on the stack and set the signal mask as appropriate for POSIX.
-It uses information from the _cygtls structure which has been filled in
-by interrupt_setup, as called by setup_handler. sigdelayed pushes a
-"call" to the function "sigreturn" on the thread's signal stack. This
-will be the return address eventually seen by the signal handler. After
-setting up the return value, modifying the signal mask, and saving other
-information on the stack, sigreturn clears the signal number in the
-_cygtls structure so that setup_handler can use it and jumps to the
-signal handler function. And, so a UNIX signal handler function is
-emulated.
-
-The signal handler function operates as normal for UNIX but, upon
-return, it does not go directly back to the return address of the
-original cygwin function. Instead it returns to the previously
-mentioned 'sigreturn' assembly language function.
-
-sigreturn resets the process mask to its state prior to calling the
-signal handler. It checks to see if a cygwin routine has set a special
-"restore this errno on returning from a signal" value and sets errno to
-this, if so. It pops the signal stack, places the new return address on
-the real stack, restores all of the register values that were in effect
-when sigdelayed was called, and then returns.
-
-Ok. That is more or less how cygwin interrupts a process which is
-executing a cygwin function. We are almost ready to talk about how
-cygwin interrupts user code but there is one more thing to talk about:
-SA_RESTART.
-
-UNIX allows some blocking functions to be interrupted by a signal
-handler and then return to blocking. In cygwin, so far, only
-read/readv() and the wait* functions operate in this fashion. To
-accommodate this behavior, a function notices when a signal comes in and
-then calls the _cygtls function 'call_signal_handler_now'.
-'call_signal_handler_now' emulates the behavior of both sigdelayed and
-sigreturn. It sets the appropriate masks and calls the handler,
-returning true to the caller if SA_RESTART is active. If SA_RESTART is
-active, the function will loop. Otherwise it will typically return -1
-and set the errno to EINTR.
-
-Phew. So, now we turn to the case where cygwin needs to interrupt the
-program when it is not executing a cygwin function. In this scenario,
-we rely on the win32 "SuspendThread" function. Cygwin will suspend the
-thread using this function and then inspect the location at which the
-thread is executing using the win32 "GetThreadContext" call. In theory,
-the program should not be executing in a win32 api since attempts to
-suspend a process executing a win32 call can cause disastrous results,
-especially on Win9x.
-
-If the process is executing in an unsafe location then setup_handler
-will (quickly!) return false as in the case above. Otherwise, the
-current location of the thread is pushed on the thread's signal stack
-and the thread is redirected to the sigdelayed function via the win32
-"SetThreadContext" call. Then the thread is restarted using the win32
-"ResumeThread" call and things proceed as per the sigdelayed discussion
-above.
-
-This leads us to the sig_send function. This is the "client side" part
-of the signal manipulation process. sig_send is the low-level function
-called by a high level process like kill() or pthread_kill().
-
-** More to come **
diff --git a/winsup/cygwin/how-spawn-works.txt b/winsup/cygwin/how-spawn-works.txt
deleted file mode 100644
index e865ebf3e..000000000
--- a/winsup/cygwin/how-spawn-works.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-(THIS DESCRIPTION IS OUT-OF-DATE)
-Spawn.cc in cygwin handles spawn, vfork and exec calls. It does this via
-a mode parameter that determines its behaviour with respect to the
-child.
-
-Of particular interest is the exec behaviour.
-
-In general spawn_guts (where the action happens) does the following:
-* Finds the actual program being run (which may include path searching).
-* Determines the type (.exe, shell script, perl etc) and for non binary
-programs finds the correct interpreter.
-* Creates a commandline (based on the type and the user parameters).
-* Guesses at whether the binary that will be invoked is a cygwin program
-or not (if (real_path.iscygexec ())) and uses that information to copy
-the argv table, or to translate it for win32 program usage.
-* passes a handle to the parent to the child (note: this handle should
-have it's rights restricted the daemon is merged).
-* Start the process.
-* if the mode is _P_OVERLAY (we are doing an exec)
-wait for the child to
-a) if it's a cygwin process, signal us via an event.
-b) if it's a win32 process, exit.
-c) exit.
-
-If a) occurs, we 'reparent' the child which makes it look to the current
-process's parent in the pid and process group chains.
-b) is where the cygwin process hangs around as a 'stub' presenting it's
-pid as the win32 process's pid, to allow cygwin tools to kill the win32
-process.
-once a-c has occured, execution resumes.
-* If the mode is _P_OVERLAY, this process exits, otherwise it's
-behaviour depends on the mode parameter. See the last block of
-spawn_guts.
diff --git a/winsup/cygwin/how-startup-shutdown-works.txt b/winsup/cygwin/how-startup-shutdown-works.txt
deleted file mode 100755
index 578deeb30..000000000
--- a/winsup/cygwin/how-startup-shutdown-works.txt
+++ /dev/null
@@ -1,165 +0,0 @@
-Copyright 2010 Red Hat Inc., contributed by Dave Korn.
-
-
- How the C runtime handles startup and termination.
- --------------------------------------------------
-
-This file documents the processes involved in starting up and shutting down
-a Cygwin executable. The responsibility is divided between code that is
-statically linked into each Cygwin-based DLL or executable as part of the
-C runtime, and code in the Cygwin DLL itself that co-operates with it. The
-runtime library code lives in the winsup/cygwin/lib directory, and a little
-of it is in winsup/cygwin/include/cygwin/cygwin_dll.h
-
-
-
- Process overall startup sequence.
- =================================
-
-Overall process startup (and indeed termination) is under the control of the
-underlying Windows OS. The details of the Win32 CreateProcess API and the
-underlying NT Native API ZwCreateProcess calls are far more complex (and
-unknown, since proprietary) than we need go into here; the important details
-are that the process address space is first created, then an initial thread
-is spawned that performs DLL initialisation, calling the DllMain functions of
-all statically-linked DLLs in load order. This thread is also serialised under
-the Windows OS global loader lock, and DllMain functions are very limited in
-what they can do as a consequence; to help deal with this, cygwin wraps the
-user's DllMain function and defers calling it until runtime. Once the DLLs
-have been initialised, the initial thread then performs C runtime setup and
-calls into the executable's main() function.
-
-
- Entry sequence for Cygwin-based DLLs.
- =====================================
-
-In the compiler's LINK_SPEC, a -e option sets the entry point (what Windows
-regards as DllMain) to __cygwin_dll_entry@12. This is defined in
-include/cygwin/cygwin_dll.h. The user's DllMain function, if any, is called
-from within this function - directly in the case of thread attach/detach
-notifications and process detach, but indirectly at process attach time via
-cygwin_attach_dll in lib/cygwin_attach_dll.c, which calls the CRT common code
-_cygwin_crt0_common and then hands off to the Cygwin DLL at dll_dllcrt0. The
-CRT common code doesn't call the user DllMain at once; it caches a pointer to
-it in the 'main' member of the DLL's per_process struct.
-
-
- __cygwin_dll_entry@12 -> cygwin_attach_dll -> (_cygwin_crt0_common)
- -> dll_dllcrt0 -> (DllMain?maybe?)
-
-dll_dllcrt0 is in dll_init.cc sets up exception handler, ensures cygwin DLL is
-at least partially initialised, allocates a new entry for the DLL chain, and
-either calls the 'main' function (via dll::init) before returning to the OS
-loader, or defers doing so until dll_crt0_1 runs dlls.dll_list::init() during
-the application's startup sequence, depending on whether Cygwin DLL was fully
-initialised yet or not. In general statically linked DLLs will defer, while
-dlopen'd DLLs will run at once. The Cygwin DLL runs the dependent DLL's ctors
-immediately prior to making the call, whether immediate or deferred.
-
-
- Entry sequence for Cygwin-based executables.
- ============================================
-
-The entry point is the windows standard entrypoint, WinMainCRTStartup, aliased
-to mainCRTStartup, defined in crt0.c. It aligns the stack, sets the x87 fpu
-cw, and hands off to cygwin_crt0 in lib/cygwin_crt0.c, which calls the CRT
-common init code in _cygwin_crt0_common and heads off into the DLL, never to
-return from _dll_crt0.
-
- mainCRTStartup -> cygwin_crt0 -> (_cygwin_crt0_common) -> _dll_crt0
- -> dll_crt0_1 -> (n*DllMain?maybe?) -> main -> (__main) -> cygwin_exit
-
-This is a wrapper that does some fork-related stack sorting out then hands off
-to dll_crt0_1, which completes all Cygwin DLL initialisation, runs any
-deferred DllMain calls, and jumps into the application, returning via the
-termination routines.
-
-
- Post-entry construction.
- ========================
-
-The compiler automatically inserts a hidden call to __main at the start of the
-user's main() function. During startup, DLL constructors are run in dll:init()
-immediately prior to calling that DLL's DllMain function (not in a forkee,
-though; once is enough). In __main, all statically-loaded DLL ctors are now
-complete, so we queue an atexit call to dll_global_dtors, then run the
-application's ctors and queue an atexit call to do_global_dtors.
-
-
-
- Process overall termination sequence.
- =====================================
-
-The program termination sequence can begin in one of the following ways:
-
-- by returning from main()
-- by calling exit(), _Exit() or _exit()
-- by calling abort()
- (this can be implicit, such as when an unhandled C++ exception is thrown,
- or when an SEH exception is raised and not trapped, or an unhandled signal
- terminates the program).
-
-
- Unload sequence for Cygwin-based DLLS.
- ======================================
-
- _cygwin_dll_entry@12 -> (DllMain) -> cygwin_detach_dll -> dll_list::detach
- -> (remove_dll_atexit) -> (dll::run_dtors)
-
-When a DLL is unloaded, whether as a result of dlclose() calling FreeLibrary(),
-or when then entire process is terminating, the OS arranges to call the DLL's
-DllMain function with a DLL_PROCESS_DETACH notification. As during the entry
-sequence, this is also wrapped by _cygwin_dll_entry(), although there is in
-this case no need to defer calling the user's DllMain hook; it is called at
-once. If no error is indicated, the dll is then detached from Cygwin's
-internal tracking list, and any atexit functions it has registered are run and
-cancelled from the atexit list. Finally any static destructors are run.
-
-
- Exit sequence for Cygwin-based executables.
- ============================================
-
-This diagram illustrates the code paths, listed above, by which the main
-executable can terminate:
-
- +-------------->-- exception handling --->----------------------------+
- | |
- +-------------->--------- abort --------->--- stdio cleanup ----------+
- | |
- +-------------->-- direct or via _Exit -->-------------------+ |
- | | |
- +-------------->----------+ | |
- | V stdio cleanup, V V
- main -> dll_crt0_1 -> cygwin_exit -> exit -> atexit funcs -> _exit -> do_exit
- -> pinfo::exit -> ExitProcess -> END.
-
-Returning from main() transfers control back to dll_crt0_1(), which passes the
-return value to cygwin_exit(); this is the same as calling exit(), which is
-an export name alias for cygwin_exit() anyway. cygwin_exit() calls the real
-exit() function in newlib, which runs the atexit functions and shuts down
-stdio before exiting via _exit(), which immediately passes the exit status
-through to do_exit(). If exiting via abort(), stdio is cleaned up, but no
-atexit functions are run.
-
-All the termination sequences end up in do_exit(), which takes care of POSIXy
-stuff like process group and child signalling, tty disconnection, etc. This
-finally passes control to pinfo::exit(), which takes care of indicating the
-correct overall exit status and then gives control to the OS process shutdown
-routine, ExitProcess().
-
-During ExitProcess(), all the statically-linked DLLs in the application are
-terminated, by calling their DllMain functions with the DLL_PROCESS_DETACH
-notification.
-
-
- Static object destruction.
- ==========================
-
-Static object destruction for any statically-linked DLLs, or any dlopen()ed
-DLLs that have still not been dlclose()d by termination time, is handled in
-dll_global_dtors(). As the description above makes clear, this relies on the
-atexit functions being run, and so only takes place during a graceful exit,
-and not in the case of termination via _exit(), _Exit(), abort() or through an
-unhandled signal or exception. The destructors are run before stdio has been
-terminated, and in reverse of DLL load order.
-
diff --git a/winsup/cygwin/how-to-debug-cygwin.txt b/winsup/cygwin/how-to-debug-cygwin.txt
deleted file mode 100644
index fcf53a27f..000000000
--- a/winsup/cygwin/how-to-debug-cygwin.txt
+++ /dev/null
@@ -1,128 +0,0 @@
-Copyright 2001, 2002, 2005 Red Hat Inc., Egor Duda
-
-So, your favorite program has crashed? And did you say something about
-'stackdump'? Or it just prints its output from left to right and
-upside-down? Well, you can file an angry bug report and wait until some
-of the core developers try to reproduce your problem, try to find what's
-the matter with your program and cygwin and fix the bug, if any. But
-you can do something better than that. You can debug the problem
-yourself, and even if you can't fix it, your analysis may be very
-helpful. Here's the (incomplete) howto on cygwin debugging.
-
-1. First things first
-
- The first thing you'll need to do is to build cygwin1.dll and your
- crashed application from sources. To debug them you'll need debug
- information, which is normally stripped from executables. You probably
- also want to build a version of the dll with more debugging capabilities
- by reconfiguring your build directory, specifying the --enable-debugging
- option to configure.
-
-2. Creating a known-working cygwin debugging environment
-
- - create a separate directory, say, c:\cygdeb, and put known-working
- cygwin1.dll and gdb.exe in it.
- - create a wrapper c:\cygdeb\debug_wrapper.cmd:
-
-========= debug_wrapper.cmd =========
-rem setting CYGWIN_TESTING environment variable makes cygwin application
-rem not to interfere with other already running cygwin applications.
-set CYGWIN_TESTING=1
-c:\cygdeb\gdb.exe -nw %1 %2
-===================================
-
-3. Using cygwin's JIT debugging facility
-
- add 'error_start=c:\cygdeb\debug_wrapper.cmd' to CYGWIN environment
- variable. When some application encounters critical error, cygwin will stop
- it and execute debug_wrapper.cmd, which will run gdb and make it to attach to
- the crashed application.
-
-4. Strace
-
- You can run your program under 'strace' utility, described if user's manual.
- If you know where the problem approximately is, you can add a bunch of
- additional debug_printf()s in the source code and see what they print in
- strace log. There's one common problem with this method, that some bugs
- may mysteriously disappear once the program is run under strace. Then the
- bug is likely a race condition. strace has two useful options to deal with
- such situation: -b enables buffering of output and reduces additional
- timeouts introduced by strace, and -m option allows you to mask certain
- classes of *_printf() functions, reducing timeouts even more.
-
- Note that strace does not use the cygwin DLL and so any process that it
- starts does not inherit a cygwin environment. It is equivalent to starting
- a program from the command prompt.
-
-5. Problems at early startup
-
- Sometimes, something crashes at the very early stages of application
- initialization, when JIT debugging facility is not yet active. Ok, there's
- another environment variable that may help. Create program_wrapper.cmd:
-
-========= program_wrapper.cmd =========
-rem setting CYGWIN_SLEEP environment variable makes cygwin application
-rem to sleep for x milliseconds at startup
-set CYGWIN_SLEEP=20000
-c:\some\path\bad_program.exe some parameters
-===================================
-
- Now, run program_wrapper.cmd. It should print running program pid.
- After starting program_wrapper.cmd you've got 20 seconds to open another
- window, cd to c:\cygdeb in it, run gdb there and in gdb prompt type
-
- (gdb) attach <pid>
-
- where <pid> is the pid that program_wrapper.cmd have printed.
- After that you can normally step through the code in cygwin1.dll and
- bad_program.exe
-
-6. More problems at early startup
-
- You can also set a CYGWIN_DEBUG variable to force the debugger to pop up
- only when a certain program is run:
-
-set CYGWIN_DEBUG=cat.exe:gdb.exe
-
- This will force gdb.exe to start when the program name contains the string
- "cat.exe". The ':gdb.exe' isn't really needed, since it is the default.
- It is just there to show how you can specify a program to run when the
- program starts. You can optionally set a breakpoint on "break_here"
- once the debugger pops up and then you can single step through the
- initialization process.
-
- Note that it bears repeating that both of the above options are *only*
- available when configuring cygwin with --enable-debugging.
-
-7. Heap corruption
-
- If your program crashes at malloc() or free() or when it references some
- malloc()'ed memory, it looks like heap corruption. You can configure and
- build special version of cygwin1.dll which includes heap sanity checking.
- To do it, just add --enable-malloc-debugging option to configure. Be warned,
- however, that this version of dll is _very_ slow (10-100 times slower than
- normal), so use it only when absolutely necessary.
-
-8. Program dies when running under strace
-
- If your program crashes when you run it using strace but runs ok (or has a
- different problem) otherwise, then there may be a problem in one of the
- strace *_printf statements. Usually this is caused by a change in arguments
- resulting in a %s being used with something other than a pointer to a
- string.
-
- To debug this scenario, do something like this:
-
- bash$ gdb -nw yourapp.exe
- (gdb) dll cygwin1
- (gdb) l dll_crt0_1
- (gdb) b <<first line in the function>>
- (gdb) run
- (gdb) set strace._active=1
- (gdb) continue
-
- The program will then run in "strace mode", calling each strace *_printf,
- just like it does when run under the strace program. Eventually, the
- program will crash, probably in small_printf. At that point, a 'bt'
- command should show you the offending call to strace_printf with the
- improper format string.
diff --git a/winsup/cygwin/how-vfork-works.txt b/winsup/cygwin/how-vfork-works.txt
deleted file mode 100644
index 59fe5f52e..000000000
--- a/winsup/cygwin/how-vfork-works.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-(THIS DESCRIPTION IS OUT-OF-DATE)
-
-How does vfork work?
-
-When a program calls vfork, cygwin attempts to short circuit its
-normal, expensive fork mechanism.
-
-Vfork is mainly smoke and mirrors. A call to vfork contines to execute
-in the current process but first it returns a pid of 0 so that process
-will execute code intended for the child in a UNIX system. Before
-returning the zero, vfork makes a copy of the current fd table so that
-closing an fd in the "child" will not affect the "parent".
-
-Some of this info is stored in a per-thread structure but vfork is not
-really thread-safe since it also stores the fd "backup" table in the
-global fd table.
-
-The process continues to execute until it hits some type of exec call.
-The exec call is essentially translated into a spawn NO_WAIT call and
-the new process is started via this mechanism. After execing, the
-"child" process no longer should exist, so the spawn code longjmps back
-to the original vfork call. The previously opened fds are closed and
-the parent's fd table is restored. vfork() then returns the pid of the
-just-spawned process.
-
-Meanwhile, the just-spawned child notices that it has been spawned as
-the result of a vfork and closes the extra file handles.
-
-This all relies on the fact that the child in a vfork call can affect
-just about everything in the parent except for the parent's fds.
-The assumption is that a vfork is always just used as a method for
-starting a program.
-
-The assumption is also that all of this is much faster than the
-slow method that cygwin uses to implement fork().
-
diff --git a/winsup/cygwin/i686.din b/winsup/cygwin/i686.din
deleted file mode 100644
index 2ef0135fd..000000000
--- a/winsup/cygwin/i686.din
+++ /dev/null
@@ -1,656 +0,0 @@
-LIBRARY "cygwin1.dll" BASE=0x61000000
-
-EXPORTS
-#Exported variables
-__cygwin_environ DATA
-_fe_dfl_env DATA
-_fe_nomask_env DATA
-
-#Exported functions
-__argz_add = argz_add SIGFE
-__argz_add_sep = argz_add_sep SIGFE
-__argz_append = argz_append SIGFE
-__argz_count = argz_count NOSIGFE
-__argz_create = argz_create SIGFE
-__argz_create_sep = argz_create_sep SIGFE
-__argz_delete = argz_delete SIGFE
-__argz_extract = argz_extract NOSIGFE
-__argz_insert = argz_insert SIGFE
-__argz_next = argz_next NOSIGFE
-__argz_replace = argz_replace SIGFE
-__argz_stringify = argz_stringify NOSIGFE
-__envz_add = envz_add SIGFE
-__envz_entry = envz_entry NOSIGFE
-__envz_get = envz_get NOSIGFE
-__envz_merge = envz_merge SIGFE
-__envz_remove = envz_remove SIGFE
-__envz_strip = envz_strip SIGFE
-__f_atan2 = _f_atan2 NOSIGFE
-__f_atan2f = _f_atan2f NOSIGFE
-__f_exp = _f_exp NOSIGFE
-__f_expf = _f_expf NOSIGFE
-__f_frexp = _f_frexp NOSIGFE
-__f_frexpf = _f_frexpf NOSIGFE
-__f_ldexp = _f_ldexp NOSIGFE
-__f_ldexpf = _f_ldexpf NOSIGFE
-__f_log = _f_log NOSIGFE
-__f_log10 = _f_log10 NOSIGFE
-__f_log10f = _f_log10f NOSIGFE
-__f_logf = _f_logf NOSIGFE
-__f_pow = _f_pow NOSIGFE
-__f_powf = _f_powf NOSIGFE
-__f_tan = _f_tan NOSIGFE
-__f_tanf = _f_tanf NOSIGFE
-__getdelim SIGFE
-__getline SIGFE
-__mempcpy = mempcpy NOSIGFE
-__wrap__Znaj NOSIGFE # void *operator new[](std::size_t sz) throw (std::bad_alloc)
-__wrap__ZnajRKSt9nothrow_t NOSIGFE # void *operator new[](std::size_t sz, const std::nothrow_t &nt) throw()
-__wrap__Znwj NOSIGFE # void *operator new(std::size_t sz) throw (std::bad_alloc)
-__wrap__ZnwjRKSt9nothrow_t NOSIGFE # void *operator new(std::size_t sz, const std::nothrow_t &nt) throw()
-_abort = abort NOSIGFE
-_abs = abs NOSIGFE
-_access = access SIGFE
-_acl = acl SIGFE
-_acl32 = acl32 SIGFE
-_aclcheck = aclcheck NOSIGFE
-_aclcheck32 = aclcheck32 NOSIGFE
-_aclfrommode = aclfrommode SIGFE
-_aclfrommode32 = aclfrommode32 SIGFE
-_aclfrompbits = aclfrompbits SIGFE
-_aclfrompbits32 = aclfrompbits32 SIGFE
-_aclfromtext = aclfromtext SIGFE
-_aclfromtext32 = aclfromtext32 SIGFE
-_aclsort = aclsort SIGFE
-_aclsort32 = aclsort32 SIGFE
-_acltomode = acltomode SIGFE
-_acltomode32 = acltomode32 SIGFE
-_acltopbits = acltopbits SIGFE
-_acltopbits32 = acltopbits32 SIGFE
-_acltotext = acltotext SIGFE
-_acltotext32 = acltotext32 SIGFE
-_acos = acos NOSIGFE
-_acosf = acosf NOSIGFE
-_acosh = acosh NOSIGFE
-_acoshf = acoshf NOSIGFE
-_alarm = alarm SIGFE
-_alloca NOSIGFE
-_alphasort = alphasort NOSIGFE
-_asctime = asctime SIGFE
-_asctime_r = asctime_r SIGFE
-_asin = asin NOSIGFE
-_asinf = asinf NOSIGFE
-_asinh = asinh NOSIGFE
-_asinhf = asinhf NOSIGFE
-_asprintf = asprintf SIGFE
-_asprintf_r SIGFE
-_atan = atan NOSIGFE
-_atan2 = atan2 NOSIGFE
-_atan2f = atan2f NOSIGFE
-_atanf = atanf NOSIGFE
-_atanh = atanh NOSIGFE
-_atanhf = atanhf NOSIGFE
-_atexit = cygwin_atexit SIGFE
-_atof = atof SIGFE
-_atoff = atoff SIGFE
-_atoi = atoi NOSIGFE
-_atol = atol NOSIGFE
-_bcmp = bcmp NOSIGFE
-_bcopy = bcopy NOSIGFE
-_bsearch = bsearch NOSIGFE
-_bzero = bzero NOSIGFE
-_cabs = cabs NOSIGFE
-_cabsf = cabsf NOSIGFE
-_calloc = calloc SIGFE
-_cbrt = cbrt NOSIGFE
-_cbrtf = cbrtf NOSIGFE
-_ceil = ceil NOSIGFE
-_ceilf = ceilf NOSIGFE
-_chdir = chdir SIGFE
-_chmod = chmod SIGFE
-_chown = chown SIGFE
-_chown32 = chown32 SIGFE
-_chroot = chroot SIGFE
-_clearerr = clearerr SIGFE
-_clock = clock SIGFE
-_close = close SIGFE
-_closedir = closedir SIGFE
-_copysign = copysign NOSIGFE
-_copysignf = copysignf NOSIGFE
-_cos = cos NOSIGFE
-_cosf = cosf NOSIGFE
-_cosh = cosh NOSIGFE
-_coshf = coshf NOSIGFE
-_creat = creat SIGFE
-_ctime = ctime SIGFE
-_ctime_r = ctime_r SIGFE
-_cuserid = cuserid NOSIGFE
-_cwait = cwait SIGFE
-_difftime = difftime NOSIGFE
-_dirfd = dirfd SIGFE
-_div = div NOSIGFE
-_dll_crt0@0 NOSIGFE
-_drand48 = drand48 NOSIGFE
-_drem = drem NOSIGFE
-_dremf = dremf NOSIGFE
-_dup = dup SIGFE
-_dup2 = dup2 SIGFE
-_ecvt = ecvt SIGFE
-_ecvtbuf = ecvtbuf SIGFE
-_ecvtf = ecvtf SIGFE
-_endgrent = endgrent NOSIGFE
-_endmntent = endmntent NOSIGFE
-_endpwent = endpwent NOSIGFE
-_endutent = endutent SIGFE
-_erand48 = erand48 NOSIGFE
-_erf = erf NOSIGFE
-_erfc = erfc NOSIGFE
-_erfcf = erfcf NOSIGFE
-_erff = erff NOSIGFE
-_execl = execl SIGFE
-_execle = execle SIGFE
-_execlp = execlp SIGFE
-_execv = execv SIGFE
-_execve = execve SIGFE
-_execvp = execvp SIGFE
-_exp = exp NOSIGFE
-_expf = expf NOSIGFE
-_expm1 = expm1 NOSIGFE
-_expm1f = expm1f NOSIGFE
-_f_atan2 NOSIGFE
-_f_atan2f NOSIGFE
-_f_exp NOSIGFE
-_f_expf NOSIGFE
-_f_frexp NOSIGFE
-_f_frexpf NOSIGFE
-_f_ldexp NOSIGFE
-_f_ldexpf NOSIGFE
-_f_llrint NOSIGFE
-_f_llrintf NOSIGFE
-_f_llrintl NOSIGFE
-_f_log NOSIGFE
-_f_log10 NOSIGFE
-_f_log10f NOSIGFE
-_f_logf NOSIGFE
-_f_lrint NOSIGFE
-_f_lrintf NOSIGFE
-_f_lrintl NOSIGFE
-_f_pow NOSIGFE
-_f_powf NOSIGFE
-_f_rint NOSIGFE
-_f_rintf NOSIGFE
-_f_rintl NOSIGFE
-_f_tan NOSIGFE
-_f_tanf NOSIGFE
-_fabs = fabs NOSIGFE
-_fabsf = fabsf NOSIGFE
-_facl = facl SIGFE
-_facl32 = facl32 SIGFE
-_fchdir = fchdir SIGFE
-_fchmod = fchmod SIGFE
-_fchown = fchown SIGFE
-_fchown32 = fchown32 SIGFE
-_fclose = fclose SIGFE
-_fcloseall = fcloseall SIGFE
-_fcloseall_r SIGFE
-_fcntl = fcntl SIGFE
-_fcntl64 = fcntl64 SIGFE
-_fcvt = fcvt SIGFE
-_fcvtbuf = fcvtbuf SIGFE
-_fcvtf = fcvtf SIGFE
-_fdopen = fdopen SIGFE
-_fdopen64 = fdopen64 SIGFE
-_feof = feof SIGFE
-_ferror = ferror SIGFE
-_fflush = fflush SIGFE
-_ffs = ffs NOSIGFE
-_fgetc = fgetc SIGFE
-_fgetpos = fgetpos SIGFE
-_fgetpos64 = fgetpos64 SIGFE
-_fgets = fgets SIGFE
-_fileno = fileno SIGFE
-_finite = finite NOSIGFE
-_finitef = finitef NOSIGFE
-_fiprintf = fiprintf SIGFE
-_floor = floor NOSIGFE
-_floorf = floorf NOSIGFE
-_fmod = fmod NOSIGFE
-_fmodf = fmodf NOSIGFE
-_fnmatch = fnmatch NOSIGFE
-_fopen = fopen SIGFE
-_fopen64 = fopen64 SIGFE
-_fork = fork SIGFE
-_fprintf = fprintf SIGFE
-_fputc = fputc SIGFE
-_fputs = fputs SIGFE
-_fread = fread SIGFE
-_free = free SIGFE
-_freopen = freopen SIGFE
-_freopen64 = freopen64 SIGFE
-_frexp = frexp NOSIGFE
-_frexpf = frexpf NOSIGFE
-_fscanf = fscanf SIGFE
-_fseek = fseek SIGFE
-_fseeko = fseeko SIGFE
-_fseeko64 = fseeko64 SIGFE
-_fsetpos = fsetpos SIGFE
-_fsetpos64 = fsetpos64 SIGFE
-_fstat = fstat SIGFE
-_fstat64 = fstat64 SIGFE
-_fstatfs = fstatfs SIGFE
-_fsync = fsync SIGFE
-_ftell = ftell SIGFE
-_ftello = ftello SIGFE
-_ftello64 = ftello64 SIGFE
-_ftime = ftime SIGFE
-_ftok = ftok SIGFE
-_ftruncate = ftruncate SIGFE
-_ftruncate64 = ftruncate64 SIGFE
-_fwrite = fwrite SIGFE
-_gamma = gamma NOSIGFE
-_gamma_r = gamma_r NOSIGFE
-_gammaf = gammaf NOSIGFE
-_gammaf_r = gammaf_r NOSIGFE
-_gcvt = gcvt SIGFE
-_gcvtf = gcvtf SIGFE
-_getc = getc SIGFE
-_getc_unlocked = getc_unlocked SIGFE
-_getchar = getchar SIGFE
-_getchar_unlocked = getchar_unlocked SIGFE
-_getcwd = getcwd SIGFE
-_getdomainname = getdomainname SIGFE
-_getdtablesize = getdtablesize NOSIGFE
-_getegid = getegid NOSIGFE
-_getegid32 = getegid32 NOSIGFE
-_getenv = getenv NOSIGFE
-_geteuid = geteuid NOSIGFE
-_geteuid32 = geteuid32 NOSIGFE
-_getgid = getgid NOSIGFE
-_getgid32 = getgid32 NOSIGFE
-_getgrent = getgrent SIGFE
-_getgrent32 = getgrent32 SIGFE
-_getgrgid = getgrgid SIGFE
-_getgrgid32 = getgrgid32 SIGFE
-_getgrnam = getgrnam SIGFE
-_getgrnam32 = getgrnam32 SIGFE
-_getgroups = getgroups SIGFE
-_getgroups32 = getgroups32 SIGFE
-_gethostname = cygwin_gethostname SIGFE
-_getlogin = getlogin NOSIGFE
-_getmntent = getmntent SIGFE
-_getmode = getmode SIGFE
-_getpagesize = getpagesize SIGFE
-_getpass = getpass SIGFE
-_getpgrp = getpgrp SIGFE
-_getpid = getpid NOSIGFE
-_getppid = getppid NOSIGFE
-_getpwduid = getpwduid NOSIGFE
-_getpwent = getpwent SIGFE
-_getpwnam = getpwnam SIGFE
-_getpwuid = getpwuid SIGFE
-_getpwuid32 = getpwuid32 SIGFE
-_getpwuid_r32 = getpwuid_r32 SIGFE
-_getrlimit = getrlimit SIGFE
-_getrusage = getrusage SIGFE
-_gets = gets SIGFE
-_gettimeofday = gettimeofday SIGFE
-_getuid = getuid NOSIGFE
-_getuid32 = getuid32 NOSIGFE
-_getutent = getutent SIGFE
-_getutid = getutid SIGFE
-_getw = getw SIGFE
-_getwd = getwd SIGFE
-_gmtime = gmtime SIGFE
-_gmtime_r = gmtime_r SIGFE
-_htonl = htonl NOSIGFE
-_htons = htons NOSIGFE
-_hypot = hypot NOSIGFE
-_hypotf = hypotf NOSIGFE
-_ilogb = ilogb NOSIGFE
-_ilogbf = ilogbf NOSIGFE
-_index = index NOSIGFE
-_infinity = infinity NOSIGFE
-_infinityf = infinityf NOSIGFE
-_initgroups32 = initgroups32 SIGFE
-_ioctl = ioctl SIGFE
-_iprintf = iprintf SIGFE
-_isalnum = isalnum NOSIGFE
-_isalpha = isalpha NOSIGFE
-_isascii = isascii NOSIGFE
-_isatty = isatty SIGFE
-_iscntrl = iscntrl NOSIGFE
-_isdigit = isdigit NOSIGFE
-_isgraph = isgraph NOSIGFE
-_isinf = isinf NOSIGFE
-_isinff = isinff NOSIGFE
-_islower = islower NOSIGFE
-_isnan = isnan NOSIGFE
-_isnanf = isnanf NOSIGFE
-_isprint = isprint NOSIGFE
-_ispunct = ispunct NOSIGFE
-_isspace = isspace NOSIGFE
-_isupper = isupper NOSIGFE
-_isxdigit = isxdigit NOSIGFE
-_j0 = j0 NOSIGFE
-_j0f = j0f NOSIGFE
-_j1 = j1 NOSIGFE
-_j1f = j1f NOSIGFE
-_jn = jn NOSIGFE
-_jnf = jnf NOSIGFE
-_jrand48 = jrand48 NOSIGFE
-_kill = kill SIGFE
-_labs = labs NOSIGFE
-_lacl = lacl SIGFE
-_lchown = lchown SIGFE
-_lchown32 = lchown32 SIGFE
-_lcong48 = lcong48 NOSIGFE
-_ldexp = ldexp NOSIGFE
-_ldexpf = ldexpf NOSIGFE
-_ldiv = ldiv NOSIGFE
-_lgamma = lgamma NOSIGFE
-_lgamma_r = lgamma_r NOSIGFE
-_lgammaf = lgammaf NOSIGFE
-_lgammaf_r = lgammaf_r NOSIGFE
-_link = link SIGFE
-_localeconv = localeconv NOSIGFE
-_localtime = localtime SIGFE
-_localtime_r = localtime_r SIGFE
-_log = log NOSIGFE
-_log10 = log10 NOSIGFE
-_log10f = log10f NOSIGFE
-_log1p = log1p NOSIGFE
-_log1pf = log1pf NOSIGFE
-_logb = logb NOSIGFE
-_logbf = logbf NOSIGFE
-_logf = logf NOSIGFE
-_lrand48 = lrand48 NOSIGFE
-_lseek = lseek SIGFE
-_lseek64 = lseek64 SIGFE
-_lstat = lstat SIGFE
-_lstat64 = lstat64 SIGFE
-_malloc = malloc SIGFE
-_matherr = matherr NOSIGFE
-_mblen = mblen NOSIGFE
-_mbstowcs = mbstowcs NOSIGFE
-_mbtowc = mbtowc NOSIGFE
-_memccpy = memccpy NOSIGFE
-_memchr = memchr NOSIGFE
-_memcmp = memcmp NOSIGFE
-_memcpy = memcpy NOSIGFE
-_memmove = memmove NOSIGFE
-_memset = memset NOSIGFE
-_mkdir = mkdir SIGFE
-_mknod = mknod SIGFE
-_mknod32 = mknod32 SIGFE
-_mkstemp = mkstemp SIGFE
-_mktemp = mktemp SIGFE
-_mktime = mktime SIGFE
-_mmap64 = mmap64 SIGFE
-_modf = modf NOSIGFE
-_modff = modff NOSIGFE
-_mount = mount SIGFE
-_nan = nan NOSIGFE
-_nanf = nanf NOSIGFE
-_nanosleep = nanosleep SIGFE
-_nextafter = nextafter NOSIGFE
-_nextafterf = nextafterf NOSIGFE
-_nice = nice SIGFE
-_nl_langinfo = nl_langinfo SIGFE
-_nrand48 = nrand48 NOSIGFE
-_ntohl = ntohl NOSIGFE
-_ntohs = ntohs NOSIGFE
-_open = open SIGFE
-_open64
-_openlog = openlog SIGFE
-_pathconf = pathconf SIGFE
-_pclose = pclose SIGFE
-_perror = perror SIGFE
-_poll = poll SIGFE
-_popen = popen SIGFE
-_pow = pow NOSIGFE
-_powf = powf NOSIGFE
-_printf = printf SIGFE
-_putc = putc SIGFE
-_putc_unlocked = putc_unlocked SIGFE
-_putchar = putchar SIGFE
-_putchar_unlocked = putchar_unlocked SIGFE
-_putenv = putenv SIGFE
-_puts = puts SIGFE
-_pututline = pututline SIGFE
-_putw = putw SIGFE
-_qsort = qsort NOSIGFE
-_raise = raise SIGFE
-_rand = rand NOSIGFE
-_read = read SIGFE
-_readdir = readdir SIGFE
-_readlink = readlink SIGFE
-_readv = readv SIGFE
-_realloc = realloc SIGFE
-_remainder = remainder NOSIGFE
-_remainderf = remainderf NOSIGFE
-_remove = remove SIGFE
-_rename = rename SIGFE
-_rewind = rewind SIGFE
-_rewinddir = rewinddir SIGFE
-_rindex = rindex NOSIGFE
-_rmdir = rmdir SIGFE
-_sbrk = sbrk SIGFE
-_scalb = scalb NOSIGFE
-_scalbf = scalbf NOSIGFE
-_scalbn = scalbn NOSIGFE
-_scalbnf = scalbnf NOSIGFE
-_scandir = scandir SIGFE
-_scanf = scanf SIGFE
-_scanf_r SIGFE
-_seed48 = seed48 NOSIGFE
-_seekdir = seekdir SIGFE
-_seekdir64 = seekdir64 SIGFE
-_select = cygwin_select SIGFE
-_setbuf = setbuf SIGFE
-_setdtablesize = setdtablesize SIGFE
-_setegid = setegid SIGFE
-_setegid32 = setegid32 SIGFE
-_setenv = setenv SIGFE
-_seteuid = seteuid SIGFE
-_seteuid32 = seteuid32 SIGFE
-_setgid = setgid SIGFE
-_setgid32 = setgid32 SIGFE
-_setgrent = setgrent NOSIGFE
-_setgroups = setgroups SIGFE
-_setgroups32 = setgroups32 SIGFE
-_setlocale = setlocale NOSIGFE
-_setmntent = setmntent SIGFE
-_setpassent = setpassent NOSIGFE
-_setpgid = setpgid SIGFE
-_setpgrp = setpgrp SIGFE
-_setpwent = setpwent NOSIGFE
-_setregid = setregid SIGFE
-_setregid32 = setregid32 SIGFE
-_setreuid = setreuid SIGFE
-_setreuid32 = setreuid32 SIGFE
-_setrlimit = setrlimit SIGFE
-_setsid = setsid SIGFE
-_settimeofday = settimeofday SIGFE
-_setuid = setuid SIGFE
-_setuid32 = setuid32 SIGFE
-_setutent = setutent SIGFE
-_setvbuf = setvbuf SIGFE
-_sin = sin NOSIGFE
-_sinf = sinf NOSIGFE
-_sinh = sinh NOSIGFE
-_sinhf = sinhf NOSIGFE
-_siprintf = siprintf SIGFE
-_sleep = sleep SIGFE
-_snprintf = snprintf SIGFE
-_spawnl = spawnl SIGFE
-_spawnle = spawnle SIGFE
-_spawnlp = spawnlp SIGFE
-_spawnlpe = spawnlpe SIGFE
-_spawnv = spawnv SIGFE
-_spawnve = spawnve SIGFE
-_spawnvp = spawnvp SIGFE
-_spawnvpe = spawnvpe SIGFE
-_sprintf = sprintf SIGFE
-_sqrt = sqrt NOSIGFE
-_sqrtf = sqrtf NOSIGFE
-_srand = srand NOSIGFE
-_srand48 = srand48 NOSIGFE
-_sscanf = sscanf SIGFE
-_sscanf_r SIGFE
-_stat = stat SIGFE
-_stat64 = stat64 SIGFE
-_statfs = statfs SIGFE
-_strcasecmp = strcasecmp NOSIGFE
-_strcat = strcat NOSIGFE
-_strchr = strchr NOSIGFE
-_strcmp = strcmp NOSIGFE
-_strcoll = strcoll NOSIGFE
-_strcpy = strcpy NOSIGFE
-_strcspn = strcspn NOSIGFE
-_strdup = strdup SIGFE
-_strerror = strerror SIGFE
-_strerror_r = strerror_r SIGFE
-_strftime = strftime SIGFE
-_strlcat = strlcat NOSIGFE
-_strlcpy = strlcpy NOSIGFE
-_strlen = strlen NOSIGFE
-_strlwr = strlwr NOSIGFE
-_strncasecmp = strncasecmp NOSIGFE
-_strncat = strncat NOSIGFE
-_strncmp = strncmp NOSIGFE
-_strncpy = strncpy NOSIGFE
-_strpbrk = strpbrk NOSIGFE
-_strptime = strptime SIGFE
-_strrchr = strrchr NOSIGFE
-_strsep = strsep NOSIGFE
-_strspn = strspn NOSIGFE
-_strstr = strstr NOSIGFE
-_strtod = strtod SIGFE
-_strtodf = strtof SIGFE
-_strtok = strtok NOSIGFE
-_strtok_r = strtok_r NOSIGFE
-_strtol = strtol NOSIGFE
-_strtoll = strtoll NOSIGFE
-_strtoul = strtoul NOSIGFE
-_strtoull = strtoull NOSIGFE
-_strupr = strupr NOSIGFE
-_strxfrm = strxfrm NOSIGFE
-_swab = swab NOSIGFE
-_symlink = symlink SIGFE
-_sysconf = sysconf SIGFE
-_syslog = syslog SIGFE
-_system = system SIGFE
-_tan = tan NOSIGFE
-_tanf = tanf NOSIGFE
-_tanh = tanh NOSIGFE
-_tanhf = tanhf NOSIGFE
-_telldir = telldir SIGFE
-_telldir64 = telldir64 SIGFE
-_tempnam = tempnam SIGFE
-_time = time SIGFE
-_times = times SIGFE
-_tmpfile = tmpfile SIGFE
-_tmpfile64 = tmpfile64 SIGFE
-_tmpnam = tmpnam SIGFE
-_toascii = toascii NOSIGFE
-_tolower = tolower NOSIGFE
-_toupper = toupper NOSIGFE
-_truncate = truncate SIGFE
-_truncate64 = truncate64 SIGFE
-_ttyname = ttyname SIGFE
-_tzset = tzset SIGFE
-_ualarm = ualarm SIGFE
-_umask = umask NOSIGFE
-_umount = umount SIGFE
-_uname = uname SIGFE
-_ungetc = ungetc SIGFE
-_unlink = unlink SIGFE
-_unsetenv = unsetenv SIGFE
-_usleep = usleep SIGFE
-_utime = utime SIGFE
-_utimes = utimes SIGFE
-_utmpname = utmpname SIGFE
-_vasprintf = vasprintf SIGFE
-_vasprintf_r SIGFE
-_vfiprintf = vfiprintf SIGFE
-_vfork = vfork SIGFE
-_vfprintf = vfprintf SIGFE
-_vfscanf = vfscanf SIGFE
-_vfscanf_r SIGFE
-_vhangup = vhangup SIGFE
-_vprintf = vprintf SIGFE
-_vscanf = vscanf SIGFE
-_vscanf_r SIGFE
-_vsnprintf = vsnprintf SIGFE
-_vsprintf = vsprintf SIGFE
-_vsscanf = vsscanf SIGFE
-_vsscanf_r SIGFE
-_wait = wait SIGFE
-_waitpid = waitpid SIGFE
-_wcscmp = wcscmp NOSIGFE
-_wcslen = wcslen NOSIGFE
-_wcstombs = wcstombs NOSIGFE
-_wctomb = wctomb NOSIGFE
-_write = write SIGFE
-_writev = writev SIGFE
-asprintf_r = _asprintf_r SIGFE
-cygwin32_attach_handle_to_fd = cygwin_attach_handle_to_fd SIGFE
-cygwin32_conv_to_full_posix_path = cygwin_conv_to_full_posix_path SIGFE
-cygwin32_conv_to_full_win32_path = cygwin_conv_to_full_win32_path SIGFE
-cygwin32_conv_to_posix_path = cygwin_conv_to_posix_path SIGFE
-cygwin32_conv_to_win32_path = cygwin_conv_to_win32_path SIGFE
-cygwin32_detach_dll = cygwin_detach_dll SIGFE_MAYBE
-cygwin32_internal = cygwin_internal SIGFE
-cygwin32_posix_path_list_p = cygwin_posix_path_list_p NOSIGFE
-cygwin32_posix_to_win32_path_list = cygwin_posix_to_win32_path_list SIGFE
-cygwin32_posix_to_win32_path_list_buf_size = cygwin_posix_to_win32_path_list_buf_size SIGFE
-cygwin32_split_path = cygwin_split_path NOSIGFE
-cygwin32_win32_to_posix_path_list = cygwin_win32_to_posix_path_list SIGFE
-cygwin32_win32_to_posix_path_list_buf_size = cygwin_win32_to_posix_path_list_buf_size SIGFE
-cygwin32_winpid_to_pid = cygwin_winpid_to_pid SIGFE
-cygwin_conv_to_full_posix_path SIGFE
-cygwin_conv_to_full_win32_path SIGFE
-cygwin_conv_to_posix_path SIGFE
-cygwin_conv_to_win32_path SIGFE
-cygwin_posix_to_win32_path_list SIGFE
-cygwin_posix_to_win32_path_list_buf_size SIGFE
-cygwin_win32_to_posix_path_list SIGFE
-cygwin_win32_to_posix_path_list_buf_size SIGFE
-dll_entry@12 NOSIGFE
-dll_noncygwin_dllcrt0 NOSIGFE
-fcloseall_r = _fcloseall_r SIGFE
-fscanf_r = _fscanf_r SIGFE
-get_osfhandle = _get_osfhandle SIGFE
-getpwduid NOSIGFE
-lacl SIGFE
-llrint = _f_llrint NOSIGFE
-llrintf = _f_llrintf NOSIGFE
-llrintl = _f_llrintl NOSIGFE
-lrint = _f_lrint NOSIGFE
-lrintf = _f_lrintf NOSIGFE
-lrintl = _f_lrintl NOSIGFE
-posix_regcomp = regcomp SIGFE
-posix_regerror = regerror SIGFE
-posix_regexec = regexec SIGFE
-posix_regfree = regfree SIGFE
-rint = _f_rint NOSIGFE
-rintf = _f_rintf NOSIGFE
-rintl = _f_rintl NOSIGFE
-scanf_r = _scanf_r SIGFE
-setmode = cygwin_setmode SIGFE
-setregid32 SIGFE
-setreuid32 SIGFE
-sexecl = sexecve_is_bad SIGFE
-sexecle = sexecve_is_bad SIGFE
-sexeclp = sexecve_is_bad SIGFE
-sexeclpe = sexecve_is_bad SIGFE
-sexecp = sexecve_is_bad SIGFE
-sexecv = sexecve_is_bad SIGFE
-sexecve = sexecve_is_bad SIGFE
-sexecvpe = sexecve_is_bad SIGFE
-sscanf_r = _sscanf_r SIGFE
-strtodf = strtof SIGFE
-vasprintf_r = _vasprintf_r SIGFE
-vfscanf_r = _vfscanf_r SIGFE
-vscanf_r = _vscanf_r SIGFE
-vsscanf_r = _vsscanf_r SIGFE
diff --git a/winsup/cygwin/import/rexec.c b/winsup/cygwin/import/rexec.c
deleted file mode 100644
index 4e01eb659..000000000
--- a/winsup/cygwin/import/rexec.c
+++ /dev/null
@@ -1,391 +0,0 @@
-/*
- * Copyright (c) 1980, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD$
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)rexec.c 8.1 (Berkeley) 6/4/93";
-#endif /* LIBC_SCCS and not lint */
-
-#include <sys/types.h>
-#include <sys/uio.h>
-#include <sys/socket.h>
-#include <sys/param.h>
-#include <sys/stat.h>
-
-#include <netinet/in.h>
-
-#include <stdio.h>
-#include <unistd.h>
-#include <string.h>
-#include <netdb.h>
-#include <errno.h>
-#include <ctype.h>
-#include <err.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-int rexecoptions;
-char *getpass(), *getlogin();
-
-/*
- * Options and other state info.
- */
-struct macel {
- char mac_name[9]; /* macro name */
- char *mac_start; /* start of macro in macbuf */
- char *mac_end; /* end of macro in macbuf */
-};
-
-int macnum; /* number of defined macros */
-struct macel macros[16];
-char macbuf[4096];
-
-static FILE *cfile;
-
-#define DEFAULT 1
-#define LOGIN 2
-#define PASSWD 3
-#define ACCOUNT 4
-#define MACDEF 5
-#define ID 10
-#define MACH 11
-
-static char tokval[100];
-
-static struct toktab {
- char *tokstr;
- int tval;
-} toktab[]= {
- { "default", DEFAULT },
- { "login", LOGIN },
- { "password", PASSWD },
- { "passwd", PASSWD },
- { "account", ACCOUNT },
- { "machine", MACH },
- { "macdef", MACDEF },
- { NULL, 0 }
-};
-
-static int
-token()
-{
- char *cp;
- int c;
- struct toktab *t;
-
- if (feof(cfile) || ferror(cfile))
- return (0);
- while ((c = getc(cfile)) != EOF &&
- (c == '\n' || c == '\t' || c == ' ' || c == ','))
- continue;
- if (c == EOF)
- return (0);
- cp = tokval;
- if (c == '"') {
- while ((c = getc(cfile)) != EOF && c != '"') {
- if (c == '\\')
- c = getc(cfile);
- *cp++ = c;
- }
- } else {
- *cp++ = c;
- while ((c = getc(cfile)) != EOF
- && c != '\n' && c != '\t' && c != ' ' && c != ',') {
- if (c == '\\')
- c = getc(cfile);
- *cp++ = c;
- }
- }
- *cp = 0;
- if (tokval[0] == 0)
- return (0);
- for (t = toktab; t->tokstr; t++)
- if (!strcmp(t->tokstr, tokval))
- return (t->tval);
- return (ID);
-}
-
-static int
-ruserpass(host, aname, apass, aacct)
- char *host, **aname, **apass, **aacct;
-{
- char *hdir, buf[BUFSIZ], *tmp;
- char myname[MAXHOSTNAMELEN], *mydomain;
- int t, i, c, usedefault = 0;
- struct stat stb;
-
- hdir = getenv("HOME");
- if (hdir == NULL)
- hdir = ".";
- if (strlen(hdir) + 8 > sizeof(buf))
- return (0);
- (void) sprintf(buf, "%s/.netrc", hdir);
- cfile = fopen(buf, "r");
- if (cfile == NULL) {
- if (errno != ENOENT)
- warn("%s", buf);
- return (0);
- }
- if (gethostname(myname, sizeof(myname)) < 0)
- myname[0] = '\0';
- if ((mydomain = strchr(myname, '.')) == NULL)
- mydomain = "";
-next:
- while ((t = token())) switch(t) {
-
- case DEFAULT:
- usedefault = 1;
- /* FALL THROUGH */
-
- case MACH:
- if (!usedefault) {
- if (token() != ID)
- continue;
- /*
- * Allow match either for user's input host name
- * or official hostname. Also allow match of
- * incompletely-specified host in local domain.
- */
- if (strcasecmp(host, tokval) == 0)
- goto match;
- if ((tmp = strchr(host, '.')) != NULL &&
- strcasecmp(tmp, mydomain) == 0 &&
- strncasecmp(host, tokval, tmp - host) == 0 &&
- tokval[tmp - host] == '\0')
- goto match;
- continue;
- }
- match:
- while ((t = token()) && t != MACH && t != DEFAULT) switch(t) {
-
- case LOGIN:
- if (token())
- if (*aname == 0) {
- *aname = malloc((unsigned) strlen(tokval) + 1);
- (void) strcpy(*aname, tokval);
- } else {
- if (strcmp(*aname, tokval))
- goto next;
- }
- break;
- case PASSWD:
- if ((*aname == 0 || strcmp(*aname, "anonymous")) &&
- fstat(fileno(cfile), &stb) >= 0 &&
- (stb.st_mode & 077) != 0) {
- warnx("Error: .netrc file is readable by others.");
- warnx("Remove password or make file unreadable by others.");
- goto bad;
- }
- if (token() && *apass == 0) {
- *apass = malloc((unsigned) strlen(tokval) + 1);
- (void) strcpy(*apass, tokval);
- }
- break;
- case ACCOUNT:
- if (fstat(fileno(cfile), &stb) >= 0
- && (stb.st_mode & 077) != 0) {
- warnx("Error: .netrc file is readable by others.");
- warnx("Remove account or make file unreadable by others.");
- goto bad;
- }
- if (token() && *aacct == 0) {
- *aacct = malloc((unsigned) strlen(tokval) + 1);
- (void) strcpy(*aacct, tokval);
- }
- break;
- case MACDEF:
- while ((c=getc(cfile)) != EOF &&
- (c == ' ' || c == '\t'))
- ;
- if (c == EOF || c == '\n') {
- printf("Missing macdef name argument.\n");
- goto bad;
- }
- if (macnum == 16) {
- printf("Limit of 16 macros have already been defined\n");
- goto bad;
- }
- tmp = macros[macnum].mac_name;
- *tmp++ = c;
- for (i=0; i < 8 && (c=getc(cfile)) != EOF &&
- !isspace(c); ++i) {
- *tmp++ = c;
- }
- if (c == EOF) {
- printf("Macro definition missing null line terminator.\n");
- goto bad;
- }
- *tmp = '\0';
- if (c != '\n') {
- while ((c=getc(cfile)) != EOF && c != '\n');
- }
- if (c == EOF) {
- printf("Macro definition missing null line terminator.\n");
- goto bad;
- }
- if (macnum == 0) {
- macros[macnum].mac_start = macbuf;
- }
- else {
- macros[macnum].mac_start = macros[macnum-1].mac_end + 1;
- }
- tmp = macros[macnum].mac_start;
- while (tmp != macbuf + 4096) {
- if ((c=getc(cfile)) == EOF) {
- printf("Macro definition missing null line terminator.\n");
- goto bad;
- }
- *tmp = c;
- if (*tmp == '\n') {
- if (*(tmp-1) == '\0') {
- macros[macnum++].mac_end = tmp - 1;
- break;
- }
- *tmp = '\0';
- }
- tmp++;
- }
- if (tmp == macbuf + 4096) {
- printf("4K macro buffer exceeded\n");
- goto bad;
- }
- break;
- default:
- warnx("Unknown .netrc keyword %s", tokval);
- break;
- }
- goto done;
- }
-done:
- (void) fclose(cfile);
- return (0);
-bad:
- (void) fclose(cfile);
- return (-1);
-}
-
-int
-rexec(ahost, rport, name, pass, cmd, fd2p)
- char **ahost;
- int rport;
- char *name, *pass, *cmd;
- int *fd2p;
-{
- struct sockaddr_in sin, sin2, from;
- struct hostent *hp;
- u_short port;
- int s, timo = 1, s3;
- char c, *acct;
-
- hp = gethostbyname(*ahost);
- if (hp == 0) {
- herror(*ahost);
- return (-1);
- }
- *ahost = hp->h_name;
- acct = NULL;
- ruserpass(hp->h_name, &name, &pass, &acct);
- free(acct);
-retry:
- s = socket(AF_INET, SOCK_STREAM, 0);
- if (s < 0) {
- perror("rexec: socket");
- return (-1);
- }
- sin.sin_family = hp->h_addrtype;
- sin.sin_port = rport;
- bcopy(hp->h_addr, (caddr_t)&sin.sin_addr, hp->h_length);
- if (connect(s, (struct sockaddr *)&sin, sizeof(sin)) < 0) {
- if (errno == ECONNREFUSED && timo <= 16) {
- (void) close(s);
- sleep(timo);
- timo *= 2;
- goto retry;
- }
- perror(hp->h_name);
- return (-1);
- }
- if (fd2p == 0) {
- (void) write(s, "", 1);
- port = 0;
- } else {
- char num[8];
- int s2, sin2len;
-
- s2 = socket(AF_INET, SOCK_STREAM, 0);
- if (s2 < 0) {
- (void) close(s);
- return (-1);
- }
- listen(s2, 1);
- sin2len = sizeof (sin2);
- if (getsockname(s2, (struct sockaddr *)&sin2, &sin2len) < 0 ||
- sin2len != sizeof (sin2)) {
- perror("getsockname");
- (void) close(s2);
- goto bad;
- }
- port = ntohs((u_short)sin2.sin_port);
- (void) sprintf(num, "%u", port);
- (void) write(s, num, strlen(num)+1);
- { int len = sizeof (from);
- s3 = accept(s2, (struct sockaddr *)&from, &len);
- close(s2);
- if (s3 < 0) {
- perror("accept");
- port = 0;
- goto bad;
- }
- }
- *fd2p = s3;
- }
- (void) write(s, name, strlen(name) + 1);
- /* should public key encypt the password here */
- (void) write(s, pass, strlen(pass) + 1);
- (void) write(s, cmd, strlen(cmd) + 1);
- if (read(s, &c, 1) != 1) {
- perror(*ahost);
- goto bad;
- }
- if (c != 0) {
- while (read(s, &c, 1) == 1) {
- (void) write(2, &c, 1);
- if (c == '\n')
- break;
- }
- goto bad;
- }
- return (s);
-bad:
- if (port)
- (void) close(*fd2p);
- (void) close(s);
- return (-1);
-}
diff --git a/winsup/cygwin/include/a.out.h b/winsup/cygwin/include/a.out.h
deleted file mode 100644
index ad9b5a56f..000000000
--- a/winsup/cygwin/include/a.out.h
+++ /dev/null
@@ -1,455 +0,0 @@
-/* a.out.h
-
- Copyright 1997, 1998, 1999, 2000, 2001, 2013 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _A_OUT_H_
-#define _A_OUT_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <stdint.h>
-
-#define COFF_IMAGE_WITH_PE
-#define COFF_LONG_SECTION_NAMES
-
-/*** coff information for Intel 386/486 and AMD64. */
-
-
-/********************** FILE HEADER **********************/
-
-struct external_filehdr {
- uint16_t f_magic; /* magic number */
- uint16_t f_nscns; /* number of sections */
- uint32_t f_timdat; /* time & date stamp */
- uint32_t f_symptr; /* file pointer to symtab */
- uint32_t f_nsyms; /* number of symtab entries */
- uint16_t f_opthdr; /* sizeof(optional hdr) */
- uint16_t f_flags; /* flags */
-};
-
-/* Bits for f_flags:
- * F_RELFLG relocation info stripped from file
- * F_EXEC file is executable (no unresolved external references)
- * F_LNNO line numbers stripped from file
- * F_LSYMS local symbols stripped from file
- * F_AR32WR file has byte ordering of an AR32WR machine (e.g. vax)
- */
-
-#define F_RELFLG (0x0001)
-#define F_EXEC (0x0002)
-#define F_LNNO (0x0004)
-#define F_LSYMS (0x0008)
-
-
-
-#define I386MAGIC 0x14c
-#define I386PTXMAGIC 0x154
-#define I386AIXMAGIC 0x175
-#define AMD64MAGIC 0x8664
-
-/* This is Lynx's all-platform magic number for executables. */
-
-#define LYNXCOFFMAGIC 0415
-
-#define I386BADMAG(x) (((x).f_magic != I386MAGIC) \
- && (x).f_magic != I386AIXMAGIC \
- && (x).f_magic != I386PTXMAGIC \
- && (x).f_magic != LYNXCOFFMAGIC)
-
-#define FILHDR struct external_filehdr
-#define FILHSZ 20
-
-
-/********************** AOUT "OPTIONAL HEADER"=
- **********************/
-
-
-typedef struct
-{
- uint16_t magic; /* type of file */
- uint16_t vstamp; /* version stamp */
- uint32_t tsize; /* text size in bytes, padded to FW bdry*/
- uint32_t dsize; /* initialized data " " */
- uint32_t bsize; /* uninitialized data " " */
- uint32_t entry; /* entry pt. */
- uint32_t text_start; /* base of text used for this file */
- uint32_t data_start; /* base of data used for this file=
- */
-}
-AOUTHDR;
-
-#define AOUTSZ 28
-#define AOUTHDRSZ 28
-
-#define OMAGIC 0404 /* object files, eg as output */
-#define ZMAGIC 0413 /* demand load format, eg normal ld output */
-#define STMAGIC 0401 /* target shlib */
-#define SHMAGIC 0443 /* host shlib */
-
-
-/* define some NT default values */
-/* #define NT_IMAGE_BASE 0x400000 moved to internal.h */
-#define NT_SECTION_ALIGNMENT 0x1000
-#define NT_FILE_ALIGNMENT 0x200
-#define NT_DEF_RESERVE 0x100000
-#define NT_DEF_COMMIT 0x1000
-
-/********************** SECTION HEADER **********************/
-
-
-struct external_scnhdr {
- char s_name[8]; /* section name */
- uint32_t s_paddr; /* physical address, offset
- of last addr in scn */
- uint32_t s_vaddr; /* virtual address */
- uint32_t s_size; /* section size */
- uint32_t s_scnptr; /* file ptr to raw data for section */
- uint32_t s_relptr; /* file ptr to relocation */
- uint32_t s_lnnoptr; /* file ptr to line numbers */
- uint16_t s_nreloc; /* number of relocation entries */
- uint16_t s_nlnno; /* number of line number entries*/
- uint32_t s_flags; /* flags */
-};
-
-#define SCNHDR struct external_scnhdr
-#define SCNHSZ 40
-
-/*
- * names of "special" sections
- */
-#define _TEXT ".text"
-#define _DATA ".data"
-#define _BSS ".bss"
-#define _COMMENT ".comment"
-#define _LIB ".lib"
-
-/********************** LINE NUMBERS **********************/
-
-/* 1 line number entry for every "breakpointable" source line in a section.
- * Line numbers are grouped on a per function basis; first entry in a function
- * grouping will have l_lnno = 0 and in place of physical address will be the
- * symbol table index of the function name.
- */
-struct external_lineno {
- union {
- uint32_t l_symndx; /* function name symbol index, iff l_lnno 0 */
- uint32_t l_paddr; /* (physical) address of line number */
- } l_addr;
- uint16_t l_lnno; /* line number */
-};
-
-#define LINENO struct external_lineno
-#define LINESZ 6
-
-/********************** SYMBOLS **********************/
-
-#define E_SYMNMLEN 8 /* # characters in a symbol name */
-#define E_FILNMLEN 14 /* # characters in a file name */
-#define E_DIMNUM 4 /* # array dimensions in auxiliary entry */
-
-struct external_syment
-{
- union {
- char e_name[E_SYMNMLEN];
- struct {
- uint32_t e_zeroes;
- uint32_t e_offset;
- } e;
- } e;
- uint32_t e_value;
- uint16_t e_scnum;
- uint16_t e_type;
- char e_sclass[1];
- char e_numaux[1];
-};
-
-#define N_BTMASK (0xf)
-#define N_TMASK (0x30)
-#define N_BTSHFT (4)
-#define N_TSHIFT (2)
-
-union external_auxent {
- struct {
- uint32_t x_tagndx; /* str, un, or enum tag indx */
- union {
- struct {
- uint16_t x_lnno; /* declaration line number */
- uint16_t x_size; /* str/union/array size */
- } x_lnsz;
- uint32_t x_fsize; /* size of function */
- } x_misc;
- union {
- struct { /* if ISFCN, tag, or .bb */
- uint32_t x_lnnoptr; /* ptr to fcn line # */
- uint32_t x_endndx; /* entry ndx past block end */
- } x_fcn;
- struct { /* if ISARY, up to 4 dimen. */
- char x_dimen[E_DIMNUM][2];
- } x_ary;
- } x_fcnary;
- uint16_t x_tvndx; /* tv index */
- } x_sym;
-
- union {
- char x_fname[E_FILNMLEN];
- struct {
- uint32_t x_zeroes;
- uint32_t x_offset;
- } x_n;
- } x_file;
-
- struct {
- uint32_t x_scnlen; /* section length */
- uint16_t x_nreloc; /* # relocation entries */
- uint16_t x_nlinno; /* # line numbers */
- uint32_t x_checksum; /* section COMDAT checksum */
- uint16_t x_associated; /* COMDAT associated section index */
- char x_comdat[1]; /* COMDAT selection number */
- } x_scn;
-
- struct {
- uint32_t x_tvfill; /* tv fill value */
- uint16_t x_tvlen; /* length of .tv */
- char x_tvran[2][2]; /* tv range */
- } x_tv; /* info about .tv section (in auxent of symbol .tv)) */
-
-};
-
-#define SYMENT struct external_syment
-#define SYMESZ 18
-#define AUXENT union external_auxent
-#define AUXESZ 18
-
-#define _ETEXT "etext"
-
-/********************** RELOCATION DIRECTIVES **********************/
-
-struct external_reloc {
- char r_vaddr[4];
- char r_symndx[4];
- char r_type[2];
-};
-
-#define RELOC struct external_reloc
-#define RELSZ 10
-
-/* end of coff/i386.h */
-
-/* PE COFF header information */
-
-#ifndef _PE_H
-#define _PE_H
-
-#define IMAGE_FILE_MACHINE_I386 0x014c
-#define IMAGE_FILE_MACHINE_AMD64 0x8664
-
-#define IMAGE_NT_OPTIONAL_HDR32_MAGIC 0x10b
-#define IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x20b
-
-#define IMAGE_SIZEOF_STD_OPTIONAL_HEADER 28
-#define IMAGE_SIZEOF_NT_OPTIONAL32_HEADER 224
-#define IMAGE_SIZEOF_NT_OPTIONAL64_HEADER 240
-
-#define IMAGE_SUBSYSTEM_NATIVE 1
-#define IMAGE_SUBSYSTEM_WINDOWS_GUI 2
-#define IMAGE_SUBSYSTEM_WINDOWS_CUI 3
-
-/* NT specific file attributes */
-#define IMAGE_FILE_RELOCS_STRIPPED 0x0001
-#define IMAGE_FILE_EXECUTABLE_IMAGE 0x0002
-#define IMAGE_FILE_LINE_NUMS_STRIPPED 0x0004
-#define IMAGE_FILE_LOCAL_SYMS_STRIPPED 0x0008
-#define IMAGE_FILE_BYTES_REVERSED_LO 0x0080
-#define IMAGE_FILE_32BIT_MACHINE 0x0100
-#define IMAGE_FILE_DEBUG_STRIPPED 0x0200
-#define IMAGE_FILE_SYSTEM 0x1000
-#define IMAGE_FILE_DLL 0x2000
-#define IMAGE_FILE_BYTES_REVERSED_HI 0x8000
-
-/* additional flags to be set for section headers to allow the NT loader to
- read and write to the section data (to replace the addresses of data in
- dlls for one thing); also to execute the section in .text's case=
- */
-#define IMAGE_SCN_MEM_DISCARDABLE 0x02000000
-#define IMAGE_SCN_MEM_EXECUTE 0x20000000
-#define IMAGE_SCN_MEM_READ 0x40000000
-#define IMAGE_SCN_MEM_WRITE 0x80000000
-
-/*
- * Section characteristics added for ppc-nt
- */
-
-#define IMAGE_SCN_TYPE_NO_PAD 0x00000008 /* Reserved. */
-
-#define IMAGE_SCN_CNT_CODE 0x00000020 /* Section contains code. */
-#define IMAGE_SCN_CNT_INITIALIZED_DATA 0x00000040 /* Section contains initialized data. */
-#define IMAGE_SCN_CNT_UNINITIALIZED_DATA 0x00000080 /* Section contains uninitialized data. */
-
-#define IMAGE_SCN_LNK_OTHER 0x00000100 /* Reserved. */
-#define IMAGE_SCN_LNK_INFO 0x00000200 /* Section contains comments or some other type of information. */
-#define IMAGE_SCN_LNK_REMOVE 0x00000800 /* Section contents will not become part of image. */
-#define IMAGE_SCN_LNK_COMDAT 0x00001000 /* Section contents comdat. */
-
-#define IMAGE_SCN_MEM_FARDATA 0x00008000
-
-#define IMAGE_SCN_MEM_PURGEABLE 0x00020000
-#define IMAGE_SCN_MEM_16BIT 0x00020000
-#define IMAGE_SCN_MEM_LOCKED 0x00040000
-#define IMAGE_SCN_MEM_PRELOAD 0x00080000
-
-#define IMAGE_SCN_ALIGN_1BYTES 0x00100000
-#define IMAGE_SCN_ALIGN_2BYTES 0x00200000
-#define IMAGE_SCN_ALIGN_4BYTES 0x00300000
-#define IMAGE_SCN_ALIGN_8BYTES 0x00400000
-#define IMAGE_SCN_ALIGN_16BYTES 0x00500000 /* Default alignment if no others are specified. */
-#define IMAGE_SCN_ALIGN_32BYTES 0x00600000
-#define IMAGE_SCN_ALIGN_64BYTES 0x00700000
-
-
-#define IMAGE_SCN_LNK_NRELOC_OVFL 0x01000000 /* Section contains extended relocations. */
-#define IMAGE_SCN_MEM_NOT_CACHED 0x04000000 /* Section is not cachable. */
-#define IMAGE_SCN_MEM_NOT_PAGED 0x08000000 /* Section is not pageable. */
-#define IMAGE_SCN_MEM_SHARED 0x10000000 /* Section is shareable. */
-
-/* COMDAT selection codes. */
-
-#define IMAGE_COMDAT_SELECT_NODUPLICATES (1) /* Warn if duplicates. */
-#define IMAGE_COMDAT_SELECT_ANY (2) /* No warning. */
-#define IMAGE_COMDAT_SELECT_SAME_SIZE (3) /* Warn if different size. */
-#define IMAGE_COMDAT_SELECT_EXACT_MATCH (4) /* Warn if different. */
-#define IMAGE_COMDAT_SELECT_ASSOCIATIVE (5) /* Base on other section. */
-
-/* Magic values that are true for all dos/nt implementations */
-#define DOSMAGIC 0x5a4d
-#define NT_SIGNATURE 0x00004550
-
-/* NT allows long filenames, we want to accommodate this. This may break
- some of the bfd functions */
-#undef FILNMLEN
-#define FILNMLEN 18 /* # characters in a file name */
-
-
-#ifdef COFF_IMAGE_WITH_PE
-/* The filehdr is only weird in images */
-
-#undef FILHDR
-struct external_PE_filehdr
-{
- /* DOS header fields */
- uint16_t e_magic; /* Magic number, 0x5a4d */
- uint16_t e_cblp; /* Bytes on last page of file, 0x90 */
- uint16_t e_cp; /* Pages in file, 0x3 */
- uint16_t e_crlc; /* Relocations, 0x0 */
- uint16_t e_cparhdr; /* Size of header in paragraphs, 0x4 */
- uint16_t e_minalloc; /* Minimum extra paragraphs needed, 0x0 */
- uint16_t e_maxalloc; /* Maximum extra paragraphs needed, 0xFFFF */
- uint16_t e_ss; /* Initial (relative) SS value, 0x0 */
- uint16_t e_sp; /* Initial SP value, 0xb8 */
- uint16_t e_csum; /* Checksum, 0x0 */
- uint16_t e_ip; /* Initial IP value, 0x0 */
- uint16_t e_cs; /* Initial (relative) CS value, 0x0 */
- uint16_t e_lfarlc; /* File address of relocation table, 0x40 */
- uint16_t e_ovno; /* Overlay number, 0x0 */
- char e_res[4][2]; /* Reserved words, all 0x0 */
- uint16_t e_oemid; /* OEM identifier (for e_oeminfo), 0x0 */
- uint16_t e_oeminfo; /* OEM information; e_oemid specific, 0x0 */
- char e_res2[10][2]; /* Reserved words, all 0x0 */
- uint32_t e_lfanew; /* File address of new exe header, 0x80 */
- char dos_message[16][4]; /* other stuff, always follow DOS header */
- uint32_t nt_signature; /* required NT signature, 0x4550 */
-
- /* From standard header */
-
- uint16_t f_magic; /* magic number */
- uint16_t f_nscns; /* number of sections */
- uint32_t f_timdat; /* time & date stamp */
- uint32_t f_symptr; /* file pointer to symtab */
- uint32_t f_nsyms; /* number of symtab entries */
- uint16_t f_opthdr; /* sizeof(optional hdr) */
- uint16_t f_flags; /* flags */
-};
-
-
-#define FILHDR struct external_PE_filehdr
-#undef FILHSZ
-#define FILHSZ 152
-
-#endif
-
-typedef struct
-{
- uint16_t magic; /* type of file */
- uint16_t vstamp; /* version stamp */
- uint32_t tsize; /* text size in bytes, padded to FW bdry*/
- uint32_t dsize; /* initialized data " " */
- uint32_t bsize; /* uninitialized data " " */
- uint32_t entry; /* entry pt. */
- uint32_t text_start; /* base of text used for this file */
-#ifndef __x86_64__
- uint32_t data_start; /* base of all data used for this file */
-#endif
-
- /* NT extra fields; see internal.h for descriptions */
- uintptr_t ImageBase;
- uint32_t SectionAlignment;
- uint32_t FileAlignment;
- uint16_t MajorOperatingSystemVersion;
- uint16_t MinorOperatingSystemVersion;
- uint16_t MajorImageVersion;
- uint16_t MinorImageVersion;
- uint16_t MajorSubsystemVersion;
- uint16_t MinorSubsystemVersion;
- char Reserved1[4];
- uint32_t SizeOfImage;
- uint32_t SizeOfHeaders;
- uint32_t CheckSum;
- uint16_t Subsystem;
- uint16_t DllCharacteristics;
- uintptr_t SizeOfStackReserve;
- uintptr_t SizeOfStackCommit;
- uintptr_t SizeOfHeapReserve;
- uintptr_t SizeOfHeapCommit;
- uint32_t LoaderFlags;
- uint32_t NumberOfRvaAndSizes;
- /* IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; */
- char DataDirectory[16][2][4]; /* 16 entries, 2 elements/entry, 4 chars */
-
-} PEAOUTHDR;
-
-
-#undef AOUTSZ
-#ifdef __x86_64__
-#define AOUTSZ (AOUTHDRSZ + 212)
-#else
-#define AOUTSZ (AOUTHDRSZ + 196)
-#endif
-
-#undef E_FILNMLEN
-#define E_FILNMLEN 18 /* # characters in a file name */
-#endif
-
-/* end of coff/pe.h */
-
-#define DT_NON (0) /* no derived type */
-#define DT_PTR (1) /* pointer */
-#define DT_FCN (2) /* function */
-#define DT_ARY (3) /* array */
-
-#define ISPTR(x) (((x) & N_TMASK) == (DT_PTR << N_BTSHFT))
-#define ISFCN(x) (((x) & N_TMASK) == (DT_FCN << N_BTSHFT))
-#define ISARY(x) (((x) & N_TMASK) == (DT_ARY << N_BTSHFT))
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _A_OUT_H_ */
-
diff --git a/winsup/cygwin/include/arpa/ftp.h b/winsup/cygwin/include/arpa/ftp.h
deleted file mode 100644
index 7d39a3e7a..000000000
--- a/winsup/cygwin/include/arpa/ftp.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (c) 1983, 1989, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)ftp.h 8.1 (Berkeley) 6/2/93
- */
-
-#ifndef _ARPA_FTP_H
-#define _ARPA_FTP_H
-
-/* Definitions for FTP; see RFC-765. */
-
-/*
- * Reply codes.
- */
-#define PRELIM 1 /* positive preliminary */
-#define COMPLETE 2 /* positive completion */
-#define CONTINUE 3 /* positive intermediate */
-#define TRANSIENT 4 /* transient negative completion */
-#define ERROR 5 /* permanent negative completion */
-
-/*
- * Type codes
- */
-#define TYPE_A 1 /* ASCII */
-#define TYPE_E 2 /* EBCDIC */
-#define TYPE_I 3 /* image */
-#define TYPE_L 4 /* local byte size */
-
-#ifdef FTP_NAMES
-char *typenames[] = {"0", "ASCII", "EBCDIC", "Image", "Local" };
-#endif
-
-/*
- * Form codes
- */
-#define FORM_N 1 /* non-print */
-#define FORM_T 2 /* telnet format effectors */
-#define FORM_C 3 /* carriage control (ASA) */
-#ifdef FTP_NAMES
-char *formnames[] = {"0", "Nonprint", "Telnet", "Carriage-control" };
-#endif
-
-/*
- * Structure codes
- */
-#define STRU_F 1 /* file (no record structure) */
-#define STRU_R 2 /* record structure */
-#define STRU_P 3 /* page structure */
-#ifdef FTP_NAMES
-char *strunames[] = {"0", "File", "Record", "Page" };
-#endif
-
-/*
- * Mode types
- */
-#define MODE_S 1 /* stream */
-#define MODE_B 2 /* block */
-#define MODE_C 3 /* compressed */
-#ifdef FTP_NAMES
-char *modenames[] = {"0", "Stream", "Block", "Compressed" };
-#endif
-
-/*
- * Record Tokens
- */
-#define REC_ESC '\377' /* Record-mode Escape */
-#define REC_EOR '\001' /* Record-mode End-of-Record */
-#define REC_EOF '\002' /* Record-mode End-of-File */
-
-/*
- * Block Header
- */
-#define BLK_EOR 0x80 /* Block is End-of-Record */
-#define BLK_EOF 0x40 /* Block is End-of-File */
-#define BLK_ERRORS 0x20 /* Block is suspected of containing errors */
-#define BLK_RESTART 0x10 /* Block is Restart Marker */
-
-#define BLK_BYTECOUNT 2 /* Bytes in this block */
-
-#endif /* !_ARPA_FTP_H */
diff --git a/winsup/cygwin/include/arpa/inet.h b/winsup/cygwin/include/arpa/inet.h
deleted file mode 100644
index 4a3ee90e2..000000000
--- a/winsup/cygwin/include/arpa/inet.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/* arpa/inet.h
-
- Copyright 1997, 1998, 2000, 2001, 2002, 2003, 2005 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _ARPA_INET_H
-#define _ARPA_INET_H
-
-#include <netinet/in.h>
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-#ifndef __INSIDE_CYGWIN_NET__
-in_addr_t inet_addr (const char *);
-int inet_aton (const char *, struct in_addr *);
-in_addr_t inet_lnaof (struct in_addr);
-struct in_addr inet_makeaddr (unsigned long , unsigned long);
-in_addr_t inet_netof (struct in_addr);
-in_addr_t inet_network (const char *);
-char *inet_ntoa (struct in_addr);
-int inet_pton (int, const char *, void *);
-const char *inet_ntop (int, const void *, char *, socklen_t);
-#endif
-
-#ifdef __cplusplus
-};
-#endif
-
-#endif /* _ARPA_INET_H */
diff --git a/winsup/cygwin/include/arpa/nameser.h b/winsup/cygwin/include/arpa/nameser.h
deleted file mode 100755
index ddb32302b..000000000
--- a/winsup/cygwin/include/arpa/nameser.h
+++ /dev/null
@@ -1,563 +0,0 @@
-/*
- * Copyright (c) 1983, 1989, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * Copyright (c) 1996-1999 by Internet Software Consortium.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
- * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
- * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
- * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-
-/*
- * $Id$
- */
-
-#ifndef _ARPA_NAMESER_H_
-#define _ARPA_NAMESER_H_
-
-#ifdef __CYGWIN__
-#define BSD 199903 /* Used inside the .h file */
-#endif
-
-#define BIND_4_COMPAT
-
-#include <sys/param.h>
-#if (!defined(BSD)) || (BSD < 199306)
-# include <sys/bitypes.h>
-#else
-# include <sys/types.h>
-#endif
-#include <sys/cdefs.h>
-
-/*
- * Revision information. This is the release date in YYYYMMDD format.
- * It can change every day so the right thing to do with it is use it
- * in preprocessor commands such as "#if (__NAMESER > 19931104)". Do not
- * compare for equality; rather, use it to determine whether your libbind.a
- * contains a new enough lib/nameser/ to support the feature you need.
- */
-
-#define __NAMESER 19991006 /* New interface version stamp. */
-
-/*
- * Define constants based on RFC 883, RFC 1034, RFC 1035
- */
-#define NS_PACKETSZ 512 /* maximum packet size */
-#define NS_MAXDNAME 1025 /* maximum domain name */
-#define NS_MAXCDNAME 255 /* maximum compressed domain name */
-#define NS_MAXLABEL 63 /* maximum length of domain label */
-#define NS_HFIXEDSZ 12 /* #/bytes of fixed data in header */
-#define NS_QFIXEDSZ 4 /* #/bytes of fixed data in query */
-#define NS_RRFIXEDSZ 10 /* #/bytes of fixed data in r record */
-#define NS_INT32SZ 4 /* #/bytes of data in a u_int32_t */
-#define NS_INT16SZ 2 /* #/bytes of data in a u_int16_t */
-#define NS_INT8SZ 1 /* #/bytes of data in a u_int8_t */
-#define NS_INADDRSZ 4 /* IPv4 T_A */
-#define NS_IN6ADDRSZ 16 /* IPv6 T_AAAA */
-#define NS_CMPRSFLGS 0xc0 /* Flag bits indicating name compression. */
-#define NS_DEFAULTPORT 53 /* For both TCP and UDP. */
-
-/*
- * These can be expanded with synonyms, just keep ns_parse.c:ns_parserecord()
- * in synch with it.
- */
-typedef enum __ns_sect {
- ns_s_qd = 0, /* Query: Question. */
- ns_s_zn = 0, /* Update: Zone. */
- ns_s_an = 1, /* Query: Answer. */
- ns_s_pr = 1, /* Update: Prerequisites. */
- ns_s_ns = 2, /* Query: Name servers. */
- ns_s_ud = 2, /* Update: Update. */
- ns_s_ar = 3, /* Query|Update: Additional records. */
- ns_s_max = 4
-} ns_sect;
-
-/*
- * This is a message handle. It is caller allocated and has no dynamic data.
- * This structure is intended to be opaque to all but ns_parse.c, thus the
- * leading _'s on the member names. Use the accessor functions, not the _'s.
- */
-typedef struct __ns_msg {
- const u_char *_msg, *_eom;
- u_int16_t _id, _flags, _counts[ns_s_max];
- const u_char *_sections[ns_s_max];
- ns_sect _sect;
- int _rrnum;
- const u_char *_msg_ptr;
-} ns_msg;
-
-/* Private data structure - do not use from outside library. */
-struct _ns_flagdata { int mask, shift; };
-extern struct _ns_flagdata _ns_flagdata[];
-
-/* Accessor macros - this is part of the public interface. */
-
-#define ns_msg_id(handle) ((handle)._id + 0)
-#define ns_msg_base(handle) ((handle)._msg + 0)
-#define ns_msg_end(handle) ((handle)._eom + 0)
-#define ns_msg_size(handle) ((handle)._eom - (handle)._msg)
-#define ns_msg_count(handle, section) ((handle)._counts[section] + 0)
-
-/*
- * This is a parsed record. It is caller allocated and has no dynamic data.
- */
-typedef struct __ns_rr {
- char name[NS_MAXDNAME];
- u_int16_t type;
- u_int16_t rr_class;
- u_int32_t ttl;
- u_int16_t rdlength;
- const u_char * rdata;
-} ns_rr;
-
-/* Accessor macros - this is part of the public interface. */
-#define ns_rr_name(rr) (((rr).name[0] != '\0') ? (rr).name : ".")
-#define ns_rr_type(rr) ((ns_type)((rr).type + 0))
-#define ns_rr_class(rr) ((ns_class)((rr).rr_class + 0))
-#define ns_rr_ttl(rr) ((rr).ttl + 0)
-#define ns_rr_rdlen(rr) ((rr).rdlength + 0)
-#define ns_rr_rdata(rr) ((rr).rdata + 0)
-
-/*
- * These don't have to be in the same order as in the packet flags word,
- * and they can even overlap in some cases, but they will need to be kept
- * in synch with ns_parse.c:ns_flagdata[].
- */
-typedef enum __ns_flag {
- ns_f_qr, /* Question/Response. */
- ns_f_opcode, /* Operation code. */
- ns_f_aa, /* Authoritative Answer. */
- ns_f_tc, /* Truncation occurred. */
- ns_f_rd, /* Recursion Desired. */
- ns_f_ra, /* Recursion Available. */
- ns_f_z, /* MBZ. */
- ns_f_ad, /* Authentic Data (DNSSEC). */
- ns_f_cd, /* Checking Disabled (DNSSEC). */
- ns_f_rcode, /* Response code. */
- ns_f_max
-} ns_flag;
-
-/*
- * Currently defined opcodes.
- */
-typedef enum __ns_opcode {
- ns_o_query = 0, /* Standard query. */
- ns_o_iquery = 1, /* Inverse query (deprecated/unsupported). */
- ns_o_status = 2, /* Name server status query (unsupported). */
- /* Opcode 3 is undefined/reserved. */
- ns_o_notify = 4, /* Zone change notification. */
- ns_o_update = 5, /* Zone update message. */
- ns_o_max = 6
-} ns_opcode;
-
-/*
- * Currently defined response codes.
- */
-typedef enum __ns_rcode {
- ns_r_noerror = 0, /* No error occurred. */
- ns_r_formerr = 1, /* Format error. */
- ns_r_servfail = 2, /* Server failure. */
- ns_r_nxdomain = 3, /* Name error. */
- ns_r_notimpl = 4, /* Unimplemented. */
- ns_r_refused = 5, /* Operation refused. */
- /* these are for BIND_UPDATE */
- ns_r_yxdomain = 6, /* Name exists */
- ns_r_yxrrset = 7, /* RRset exists */
- ns_r_nxrrset = 8, /* RRset does not exist */
- ns_r_notauth = 9, /* Not authoritative for zone */
- ns_r_notzone = 10, /* Zone of record different from zone section */
- ns_r_max = 11,
- /* The following are TSIG extended errors */
- ns_r_badsig = 16,
- ns_r_badkey = 17,
- ns_r_badtime = 18
-} ns_rcode;
-
-/* BIND_UPDATE */
-typedef enum __ns_update_operation {
- ns_uop_delete = 0,
- ns_uop_add = 1,
- ns_uop_max = 2
-} ns_update_operation;
-
-/*
- * This structure is used for TSIG authenticated messages
- */
-struct ns_tsig_key {
- char name[NS_MAXDNAME], alg[NS_MAXDNAME];
- unsigned char *data;
- int len;
-};
-typedef struct ns_tsig_key ns_tsig_key;
-
-/*
- * This structure is used for TSIG authenticated TCP messages
- */
-struct ns_tcp_tsig_state {
- int counter;
- struct dst_key *key;
- void *ctx;
- unsigned char sig[NS_PACKETSZ];
- int siglen;
-};
-typedef struct ns_tcp_tsig_state ns_tcp_tsig_state;
-
-#define NS_TSIG_FUDGE 300
-#define NS_TSIG_TCP_COUNT 100
-#define NS_TSIG_ALG_HMAC_MD5 "HMAC-MD5.SIG-ALG.REG.INT"
-
-#define NS_TSIG_ERROR_NO_TSIG -10
-#define NS_TSIG_ERROR_NO_SPACE -11
-#define NS_TSIG_ERROR_FORMERR -12
-
-/*
- * Currently defined type values for resources and queries.
- */
-typedef enum __ns_type {
- ns_t_invalid = 0, /* Cookie. */
- ns_t_a = 1, /* Host address. */
- ns_t_ns = 2, /* Authoritative server. */
- ns_t_md = 3, /* Mail destination. */
- ns_t_mf = 4, /* Mail forwarder. */
- ns_t_cname = 5, /* Canonical name. */
- ns_t_soa = 6, /* Start of authority zone. */
- ns_t_mb = 7, /* Mailbox domain name. */
- ns_t_mg = 8, /* Mail group member. */
- ns_t_mr = 9, /* Mail rename name. */
- ns_t_null = 10, /* Null resource record. */
- ns_t_wks = 11, /* Well known service. */
- ns_t_ptr = 12, /* Domain name pointer. */
- ns_t_hinfo = 13, /* Host information. */
- ns_t_minfo = 14, /* Mailbox information. */
- ns_t_mx = 15, /* Mail routing information. */
- ns_t_txt = 16, /* Text strings. */
- ns_t_rp = 17, /* Responsible person. */
- ns_t_afsdb = 18, /* AFS cell database. */
- ns_t_x25 = 19, /* X_25 calling address. */
- ns_t_isdn = 20, /* ISDN calling address. */
- ns_t_rt = 21, /* Router. */
- ns_t_nsap = 22, /* NSAP address. */
- ns_t_nsap_ptr = 23, /* Reverse NSAP lookup (deprecated). */
- ns_t_sig = 24, /* Security signature. */
- ns_t_key = 25, /* Security key. */
- ns_t_px = 26, /* X.400 mail mapping. */
- ns_t_gpos = 27, /* Geographical position (withdrawn). */
- ns_t_aaaa = 28, /* Ip6 Address. */
- ns_t_loc = 29, /* Location Information. */
- ns_t_nxt = 30, /* Next domain (security). */
- ns_t_eid = 31, /* Endpoint identifier. */
- ns_t_nimloc = 32, /* Nimrod Locator. */
- ns_t_srv = 33, /* Server Selection. */
- ns_t_atma = 34, /* ATM Address */
- ns_t_naptr = 35, /* Naming Authority PoinTeR */
- ns_t_kx = 36, /* Key Exchange */
- ns_t_cert = 37, /* Certification record */
- ns_t_a6 = 38, /* IPv6 address (deprecates AAAA) */
- ns_t_dname = 39, /* Non-terminal DNAME (for IPv6) */
- ns_t_sink = 40, /* Kitchen sink (experimentatl) */
- ns_t_opt = 41, /* EDNS0 option (meta-RR) */
- ns_t_tkey = 249, /* Transaction key */
- ns_t_tsig = 250, /* Transaction signature. */
- ns_t_ixfr = 251, /* Incremental zone transfer. */
- ns_t_axfr = 252, /* Transfer zone of authority. */
- ns_t_mailb = 253, /* Transfer mailbox records. */
- ns_t_maila = 254, /* Transfer mail agent records. */
- ns_t_any = 255, /* Wildcard match. */
- ns_t_zxfr = 256, /* BIND-specific, nonstandard. */
- ns_t_max = 65536
-} ns_type;
-
-/* Exclusively a QTYPE? (not also an RTYPE) */
-#define ns_t_qt_p(t) (ns_t_xfr_p(t) || (t) == ns_t_any || \
- (t) == ns_t_mailb || (t) == ns_t_maila)
-/* Some kind of meta-RR? (not a QTYPE, but also not an RTYPE) */
-#define ns_t_mrr_p(t) ((t) == ns_t_tsig || (t) == ns_t_opt)
-/* Exclusively an RTYPE? (not also a QTYPE or a meta-RR) */
-#define ns_t_rr_p(t) (!ns_t_qt_p(t) && !ns_t_mrr_p(t))
-#define ns_t_udp_p(t) ((t) != ns_t_axfr && (t) != ns_t_zxfr)
-#define ns_t_xfr_p(t) ((t) == ns_t_axfr || (t) == ns_t_ixfr || \
- (t) == ns_t_zxfr)
-
-/*
- * Values for class field
- */
-typedef enum __ns_class {
- ns_c_invalid = 0, /* Cookie. */
- ns_c_in = 1, /* Internet. */
- ns_c_2 = 2, /* unallocated/unsupported. */
- ns_c_chaos = 3, /* MIT Chaos-net. */
- ns_c_hs = 4, /* MIT Hesiod. */
- /* Query class values which do not appear in resource records */
- ns_c_none = 254, /* for prereq. sections in update requests */
- ns_c_any = 255, /* Wildcard match. */
- ns_c_max = 65536
-} ns_class;
-
-/* DNSSEC constants. */
-
-typedef enum __ns_key_types {
- ns_kt_rsa = 1, /* key type RSA/MD5 */
- ns_kt_dh = 2, /* Diffie Hellman */
- ns_kt_dsa = 3, /* Digital Signature Standard (MANDATORY) */
- ns_kt_private = 254 /* Private key type starts with OID */
-} ns_key_types;
-
-typedef enum __ns_cert_types {
- cert_t_pkix = 1, /* PKIX (X.509v3) */
- cert_t_spki = 2, /* SPKI */
- cert_t_pgp = 3, /* PGP */
- cert_t_url = 253, /* URL private type */
- cert_t_oid = 254 /* OID private type */
-} ns_cert_types;
-
-/* Flags field of the KEY RR rdata. */
-#define NS_KEY_TYPEMASK 0xC000 /* Mask for "type" bits */
-#define NS_KEY_TYPE_AUTH_CONF 0x0000 /* Key usable for both */
-#define NS_KEY_TYPE_CONF_ONLY 0x8000 /* Key usable for confidentiality */
-#define NS_KEY_TYPE_AUTH_ONLY 0x4000 /* Key usable for authentication */
-#define NS_KEY_TYPE_NO_KEY 0xC000 /* No key usable for either; no key */
-/* The type bits can also be interpreted independently, as single bits: */
-#define NS_KEY_NO_AUTH 0x8000 /* Key unusable for authentication */
-#define NS_KEY_NO_CONF 0x4000 /* Key unusable for confidentiality */
-#define NS_KEY_RESERVED2 0x2000 /* Security is *mandatory* if bit=0 */
-#define NS_KEY_EXTENDED_FLAGS 0x1000 /* reserved - must be zero */
-#define NS_KEY_RESERVED4 0x0800 /* reserved - must be zero */
-#define NS_KEY_RESERVED5 0x0400 /* reserved - must be zero */
-#define NS_KEY_NAME_TYPE 0x0300 /* these bits determine the type */
-#define NS_KEY_NAME_USER 0x0000 /* key is assoc. with user */
-#define NS_KEY_NAME_ENTITY 0x0200 /* key is assoc. with entity eg host */
-#define NS_KEY_NAME_ZONE 0x0100 /* key is zone key */
-#define NS_KEY_NAME_RESERVED 0x0300 /* reserved meaning */
-#define NS_KEY_RESERVED8 0x0080 /* reserved - must be zero */
-#define NS_KEY_RESERVED9 0x0040 /* reserved - must be zero */
-#define NS_KEY_RESERVED10 0x0020 /* reserved - must be zero */
-#define NS_KEY_RESERVED11 0x0010 /* reserved - must be zero */
-#define NS_KEY_SIGNATORYMASK 0x000F /* key can sign RR's of same name */
-#define NS_KEY_RESERVED_BITMASK ( NS_KEY_RESERVED2 | \
- NS_KEY_RESERVED4 | \
- NS_KEY_RESERVED5 | \
- NS_KEY_RESERVED8 | \
- NS_KEY_RESERVED9 | \
- NS_KEY_RESERVED10 | \
- NS_KEY_RESERVED11 )
-#define NS_KEY_RESERVED_BITMASK2 0xFFFF /* no bits defined here */
-
-/* The Algorithm field of the KEY and SIG RR's is an integer, {1..254} */
-#define NS_ALG_MD5RSA 1 /* MD5 with RSA */
-#define NS_ALG_DH 2 /* Diffie Hellman KEY */
-#define NS_ALG_DSA 3 /* DSA KEY */
-#define NS_ALG_DSS NS_ALG_DSA
-#define NS_ALG_EXPIRE_ONLY 253 /* No alg, no security */
-#define NS_ALG_PRIVATE_OID 254 /* Key begins with OID giving alg */
-
-/* Protocol values */
-/* value 0 is reserved */
-#define NS_KEY_PROT_TLS 1
-#define NS_KEY_PROT_EMAIL 2
-#define NS_KEY_PROT_DNSSEC 3
-#define NS_KEY_PROT_IPSEC 4
-#define NS_KEY_PROT_ANY 255
-
-/* Signatures */
-#define NS_MD5RSA_MIN_BITS 512 /* Size of a mod or exp in bits */
-#define NS_MD5RSA_MAX_BITS 2552
- /* Total of binary mod and exp */
-#define NS_MD5RSA_MAX_BYTES ((NS_MD5RSA_MAX_BITS+7/8)*2+3)
- /* Max length of text sig block */
-#define NS_MD5RSA_MAX_BASE64 (((NS_MD5RSA_MAX_BYTES+2)/3)*4)
-#define NS_MD5RSA_MIN_SIZE ((NS_MD5RSA_MIN_BITS+7)/8)
-#define NS_MD5RSA_MAX_SIZE ((NS_MD5RSA_MAX_BITS+7)/8)
-
-#define NS_DSA_SIG_SIZE 41
-#define NS_DSA_MIN_SIZE 213
-#define NS_DSA_MAX_BYTES 405
-
-/* Offsets into SIG record rdata to find various values */
-#define NS_SIG_TYPE 0 /* Type flags */
-#define NS_SIG_ALG 2 /* Algorithm */
-#define NS_SIG_LABELS 3 /* How many labels in name */
-#define NS_SIG_OTTL 4 /* Original TTL */
-#define NS_SIG_EXPIR 8 /* Expiration time */
-#define NS_SIG_SIGNED 12 /* Signature time */
-#define NS_SIG_FOOT 16 /* Key footprint */
-#define NS_SIG_SIGNER 18 /* Domain name of who signed it */
-
-/* How RR types are represented as bit-flags in NXT records */
-#define NS_NXT_BITS 8
-#define NS_NXT_BIT_SET( n,p) (p[(n)/NS_NXT_BITS] |= (0x80>>((n)%NS_NXT_BITS)))
-#define NS_NXT_BIT_CLEAR(n,p) (p[(n)/NS_NXT_BITS] &= ~(0x80>>((n)%NS_NXT_BITS)))
-#define NS_NXT_BIT_ISSET(n,p) (p[(n)/NS_NXT_BITS] & (0x80>>((n)%NS_NXT_BITS)))
-#define NS_NXT_MAX 127
-
-/*
- * Inline versions of get/put short/long. Pointer is advanced.
- */
-#define NS_GET16(s, cp) do { \
- register const u_char *t_cp = (const u_char *)(cp); \
- (s) = ((u_int16_t)t_cp[0] << 8) \
- | ((u_int16_t)t_cp[1]) \
- ; \
- (cp) += NS_INT16SZ; \
-} while (0)
-
-#define NS_GET32(l, cp) do { \
- register const u_char *t_cp = (const u_char *)(cp); \
- (l) = ((u_int32_t)t_cp[0] << 24) \
- | ((u_int32_t)t_cp[1] << 16) \
- | ((u_int32_t)t_cp[2] << 8) \
- | ((u_int32_t)t_cp[3]) \
- ; \
- (cp) += NS_INT32SZ; \
-} while (0)
-
-#define NS_PUT16(s, cp) do { \
- register u_int16_t t_s = (u_int16_t)(s); \
- register u_char *t_cp = (u_char *)(cp); \
- *t_cp++ = t_s >> 8; \
- *t_cp = t_s; \
- (cp) += NS_INT16SZ; \
-} while (0)
-
-#define NS_PUT32(l, cp) do { \
- register u_int32_t t_l = (u_int32_t)(l); \
- register u_char *t_cp = (u_char *)(cp); \
- *t_cp++ = t_l >> 24; \
- *t_cp++ = t_l >> 16; \
- *t_cp++ = t_l >> 8; \
- *t_cp = t_l; \
- (cp) += NS_INT32SZ; \
-} while (0)
-
-/*
- * ANSI C identifier hiding for bind's lib/nameser.
- */
-#define ns_msg_getflag __ns_msg_getflag
-#define ns_get16 __ns_get16
-#define ns_get32 __ns_get32
-#define ns_put16 __ns_put16
-#define ns_put32 __ns_put32
-#define ns_initparse __ns_initparse
-#define ns_skiprr __ns_skiprr
-#define ns_parserr __ns_parserr
-#define ns_sprintrr __ns_sprintrr
-#define ns_sprintrrf __ns_sprintrrf
-#define ns_format_ttl __ns_format_ttl
-#define ns_parse_ttl __ns_parse_ttl
-#define ns_datetosecs __ns_datetosecs
-#define ns_name_ntol __ns_name_ntol
-#define ns_name_ntop __ns_name_ntop
-#define ns_name_pton __ns_name_pton
-#define ns_name_unpack __ns_name_unpack
-#define ns_name_pack __ns_name_pack
-#define ns_name_compress __ns_name_compress
-#define ns_name_uncompress __ns_name_uncompress
-#define ns_name_skip __ns_name_skip
-#define ns_name_rollback __ns_name_rollback
-#define ns_sign __ns_sign
-#define ns_sign_tcp __ns_sign_tcp
-#define ns_sign_tcp_init __ns_sign_tcp_init
-#define ns_find_tsig __ns_find_tsig
-#define ns_verify __ns_verify
-#define ns_verify_tcp __ns_verify_tcp
-#define ns_verify_tcp_init __ns_verify_tcp_init
-#define ns_samedomain __ns_samedomain
-#define ns_subdomain __ns_subdomain
-#define ns_makecanon __ns_makecanon
-#define ns_samename __ns_samename
-
-__BEGIN_DECLS
-int ns_msg_getflag __P((ns_msg, int));
-u_int ns_get16 __P((const u_char *));
-u_long ns_get32 __P((const u_char *));
-void ns_put16 __P((u_int, u_char *));
-void ns_put32 __P((u_long, u_char *));
-int ns_initparse __P((const u_char *, int, ns_msg *));
-int ns_skiprr __P((const u_char *, const u_char *, ns_sect, int));
-int ns_parserr __P((ns_msg *, ns_sect, int, ns_rr *));
-int ns_sprintrr __P((const ns_msg *, const ns_rr *,
- const char *, const char *, char *, size_t));
-int ns_sprintrrf __P((const u_char *, size_t, const char *,
- ns_class, ns_type, u_long, const u_char *,
- size_t, const char *, const char *,
- char *, size_t));
-int ns_format_ttl __P((u_long, char *, size_t));
-int ns_parse_ttl __P((const char *, u_long *));
-u_int32_t ns_datetosecs __P((const char *cp, int *errp));
-int ns_name_ntol __P((const u_char *, u_char *, size_t));
-int ns_name_ntop __P((const u_char *, char *, size_t));
-int ns_name_pton __P((const char *, u_char *, size_t));
-int ns_name_unpack __P((const u_char *, const u_char *,
- const u_char *, u_char *, size_t));
-int ns_name_pack __P((const u_char *, u_char *, int,
- const u_char **, const u_char **));
-int ns_name_uncompress __P((const u_char *, const u_char *,
- const u_char *, char *, size_t));
-int ns_name_compress __P((const char *, u_char *, size_t,
- const u_char **, const u_char **));
-int ns_name_skip __P((const u_char **, const u_char *));
-void ns_name_rollback __P((const u_char *, const u_char **,
- const u_char **));
-int ns_sign __P((u_char *, int *, int, int, void *,
- const u_char *, int, u_char *, int *, time_t));
-int ns_sign_tcp __P((u_char *, int *, int, int,
- ns_tcp_tsig_state *, int));
-int ns_sign_tcp_init __P((void *, const u_char *, int,
- ns_tcp_tsig_state *));
-u_char *ns_find_tsig __P((u_char *, u_char *));
-int ns_verify __P((u_char *, int *, void *,
- const u_char *, int, u_char *, int *,
- time_t *, int));
-int ns_verify_tcp __P((u_char *, int *, ns_tcp_tsig_state *, int));
-int ns_verify_tcp_init __P((void *, const u_char *, int,
- ns_tcp_tsig_state *));
-int ns_samedomain __P((const char *, const char *));
-int ns_subdomain __P((const char *, const char *));
-int ns_makecanon __P((const char *, char *, size_t));
-int ns_samename __P((const char *, const char *));
-__END_DECLS
-
-#ifdef BIND_4_COMPAT
-#include <arpa/nameser_compat.h>
-#endif
-
-#endif /* !_ARPA_NAMESER_H_ */
diff --git a/winsup/cygwin/include/arpa/nameser_compat.h b/winsup/cygwin/include/arpa/nameser_compat.h
deleted file mode 100755
index 9579913be..000000000
--- a/winsup/cygwin/include/arpa/nameser_compat.h
+++ /dev/null
@@ -1,188 +0,0 @@
-/* Copyright (c) 1983, 1989
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * from nameser.h 8.1 (Berkeley) 6/2/93
- * $Id$
- */
-
-#ifndef _ARPA_NAMESER_COMPAT_
-#define _ARPA_NAMESER_COMPAT_
-
-#define __BIND 19950621 /* (DEAD) interface version stamp. */
-
-#include <endian.h>
-
-/*
- * Structure for query header. The order of the fields is machine- and
- * compiler-dependent, depending on the byte/bit order and the layout
- * of bit fields. We use bit fields only in int variables, as this
- * is all ANSI requires. This requires a somewhat confusing rearrangement.
- */
-
-typedef struct {
- unsigned id :16; /* query identification number */
-#if BYTE_ORDER == BIG_ENDIAN
- /* fields in third byte */
- unsigned qr: 1; /* response flag */
- unsigned opcode: 4; /* purpose of message */
- unsigned aa: 1; /* authoritive answer */
- unsigned tc: 1; /* truncated message */
- unsigned rd: 1; /* recursion desired */
- /* fields in fourth byte */
- unsigned ra: 1; /* recursion available */
- unsigned unused :1; /* unused bits (MBZ as of 4.9.3a3) */
- unsigned ad: 1; /* authentic data from named */
- unsigned cd: 1; /* checking disabled by resolver */
- unsigned rcode :4; /* response code */
-#endif
-#if BYTE_ORDER == LITTLE_ENDIAN || BYTE_ORDER == PDP_ENDIAN
- /* fields in third byte */
- unsigned rd :1; /* recursion desired */
- unsigned tc :1; /* truncated message */
- unsigned aa :1; /* authoritive answer */
- unsigned opcode :4; /* purpose of message */
- unsigned qr :1; /* response flag */
- /* fields in fourth byte */
- unsigned rcode :4; /* response code */
- unsigned cd: 1; /* checking disabled by resolver */
- unsigned ad: 1; /* authentic data from named */
- unsigned unused :1; /* unused bits (MBZ as of 4.9.3a3) */
- unsigned ra :1; /* recursion available */
-#endif
- /* remaining bytes */
- unsigned qdcount :16; /* number of question entries */
- unsigned ancount :16; /* number of answer entries */
- unsigned nscount :16; /* number of authority entries */
- unsigned arcount :16; /* number of resource entries */
-} HEADER;
-
-#define PACKETSZ NS_PACKETSZ
-#define MAXDNAME NS_MAXDNAME
-#define MAXCDNAME NS_MAXCDNAME
-#define MAXLABEL NS_MAXLABEL
-#define HFIXEDSZ NS_HFIXEDSZ
-#define QFIXEDSZ NS_QFIXEDSZ
-#define RRFIXEDSZ NS_RRFIXEDSZ
-#define INT32SZ NS_INT32SZ
-#define INT16SZ NS_INT16SZ
-#define INADDRSZ NS_INADDRSZ
-#define IN6ADDRSZ NS_IN6ADDRSZ
-#define INDIR_MASK NS_CMPRSFLGS
-#define NAMESERVER_PORT NS_DEFAULTPORT
-
-#define S_ZONE ns_s_zn
-#define S_PREREQ ns_s_pr
-#define S_UPDATE ns_s_ud
-#define S_ADDT ns_s_ar
-
-#define QUERY ns_o_query
-#define IQUERY ns_o_iquery
-#define STATUS ns_o_status
-#define NS_NOTIFY_OP ns_o_notify
-#define NS_UPDATE_OP ns_o_update
-
-#define NOERROR ns_r_noerror
-#define FORMERR ns_r_formerr
-#define SERVFAIL ns_r_servfail
-#define NXDOMAIN ns_r_nxdomain
-#define NOTIMP ns_r_notimpl
-#define REFUSED ns_r_refused
-#define YXDOMAIN ns_r_yxdomain
-#define YXRRSET ns_r_yxrrset
-#define NXRRSET ns_r_nxrrset
-#define NOTAUTH ns_r_notauth
-#define NOTZONE ns_r_notzone
-/*#define BADSIG ns_r_badsig*/
-/*#define BADKEY ns_r_badkey*/
-/*#define BADTIME ns_r_badtime*/
-
-
-#define DELETE ns_uop_delete
-#define ADD ns_uop_add
-
-#define T_A ns_t_a
-#define T_NS ns_t_ns
-#define T_MD ns_t_md
-#define T_MF ns_t_mf
-#define T_CNAME ns_t_cname
-#define T_SOA ns_t_soa
-#define T_MB ns_t_mb
-#define T_MG ns_t_mg
-#define T_MR ns_t_mr
-#define T_NULL ns_t_null
-#define T_WKS ns_t_wks
-#define T_PTR ns_t_ptr
-#define T_HINFO ns_t_hinfo
-#define T_MINFO ns_t_minfo
-#define T_MX ns_t_mx
-#define T_TXT ns_t_txt
-#define T_RP ns_t_rp
-#define T_AFSDB ns_t_afsdb
-#define T_X25 ns_t_x25
-#define T_ISDN ns_t_isdn
-#define T_RT ns_t_rt
-#define T_NSAP ns_t_nsap
-#define T_NSAP_PTR ns_t_nsap_ptr
-#define T_SIG ns_t_sig
-#define T_KEY ns_t_key
-#define T_PX ns_t_px
-#define T_GPOS ns_t_gpos
-#define T_AAAA ns_t_aaaa
-#define T_LOC ns_t_loc
-#define T_NXT ns_t_nxt
-#define T_EID ns_t_eid
-#define T_NIMLOC ns_t_nimloc
-#define T_SRV ns_t_srv
-#define T_ATMA ns_t_atma
-#define T_NAPTR ns_t_naptr
-#define T_A6 ns_t_a6
-#define T_TSIG ns_t_tsig
-#define T_IXFR ns_t_ixfr
-#define T_AXFR ns_t_axfr
-#define T_MAILB ns_t_mailb
-#define T_MAILA ns_t_maila
-#define T_ANY ns_t_any
-
-#define C_IN ns_c_in
-#define C_CHAOS ns_c_chaos
-#define C_HS ns_c_hs
-/* BIND_UPDATE */
-#define C_NONE ns_c_none
-#define C_ANY ns_c_any
-
-#define GETSHORT NS_GET16
-#define GETLONG NS_GET32
-#define PUTSHORT NS_PUT16
-#define PUTLONG NS_PUT32
-
-#endif /* _ARPA_NAMESER_COMPAT_ */
diff --git a/winsup/cygwin/include/arpa/telnet.h b/winsup/cygwin/include/arpa/telnet.h
deleted file mode 100644
index 50874765c..000000000
--- a/winsup/cygwin/include/arpa/telnet.h
+++ /dev/null
@@ -1,322 +0,0 @@
-/*
- * Copyright (c) 1983, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)telnet.h 8.2 (Berkeley) 12/15/93
- */
-
-#ifndef _ARPA_TELNET_H
-#define _ARPA_TELNET_H
-
-/*
- * Definitions for the TELNET protocol.
- */
-#define IAC 255 /* interpret as command: */
-#define DONT 254 /* you are not to use option */
-#define DO 253 /* please, you use option */
-#define WONT 252 /* I won't use option */
-#define WILL 251 /* I will use option */
-#define SB 250 /* interpret as subnegotiation */
-#define GA 249 /* you may reverse the line */
-#define EL 248 /* erase the current line */
-#define EC 247 /* erase the current character */
-#define AYT 246 /* are you there */
-#define AO 245 /* abort output--but let prog finish */
-#define IP 244 /* interrupt process--permanently */
-#define BREAK 243 /* break */
-#define DM 242 /* data mark--for connect. cleaning */
-#define NOP 241 /* nop */
-#define SE 240 /* end sub negotiation */
-#define EOR 239 /* end of record (transparent mode) */
-#define ABORT 238 /* Abort process */
-#define SUSP 237 /* Suspend process */
-#define xEOF 236 /* End of file: EOF is already used... */
-
-#define SYNCH 242 /* for telfunc calls */
-
-#ifdef TELCMDS
-char *telcmds[] = {
- "EOF", "SUSP", "ABORT", "EOR",
- "SE", "NOP", "DMARK", "BRK", "IP", "AO", "AYT", "EC",
- "EL", "GA", "SB", "WILL", "WONT", "DO", "DONT", "IAC", 0,
-};
-#else
-extern char *telcmds[];
-#endif
-
-#define TELCMD_FIRST xEOF
-#define TELCMD_LAST IAC
-#define TELCMD_OK(x) ((unsigned int)(x) <= TELCMD_LAST && \
- (unsigned int)(x) >= TELCMD_FIRST)
-#define TELCMD(x) telcmds[(x)-TELCMD_FIRST]
-
-/* telnet options */
-#define TELOPT_BINARY 0 /* 8-bit data path */
-#define TELOPT_ECHO 1 /* echo */
-#define TELOPT_RCP 2 /* prepare to reconnect */
-#define TELOPT_SGA 3 /* suppress go ahead */
-#define TELOPT_NAMS 4 /* approximate message size */
-#define TELOPT_STATUS 5 /* give status */
-#define TELOPT_TM 6 /* timing mark */
-#define TELOPT_RCTE 7 /* remote controlled transmission and echo */
-#define TELOPT_NAOL 8 /* negotiate about output line width */
-#define TELOPT_NAOP 9 /* negotiate about output page size */
-#define TELOPT_NAOCRD 10 /* negotiate about CR disposition */
-#define TELOPT_NAOHTS 11 /* negotiate about horizontal tabstops */
-#define TELOPT_NAOHTD 12 /* negotiate about horizontal tab disposition */
-#define TELOPT_NAOFFD 13 /* negotiate about formfeed disposition */
-#define TELOPT_NAOVTS 14 /* negotiate about vertical tab stops */
-#define TELOPT_NAOVTD 15 /* negotiate about vertical tab disposition */
-#define TELOPT_NAOLFD 16 /* negotiate about output LF disposition */
-#define TELOPT_XASCII 17 /* extended ascic character set */
-#define TELOPT_LOGOUT 18 /* force logout */
-#define TELOPT_BM 19 /* byte macro */
-#define TELOPT_DET 20 /* data entry terminal */
-#define TELOPT_SUPDUP 21 /* supdup protocol */
-#define TELOPT_SUPDUPOUTPUT 22 /* supdup output */
-#define TELOPT_SNDLOC 23 /* send location */
-#define TELOPT_TTYPE 24 /* terminal type */
-#define TELOPT_EOR 25 /* end or record */
-#define TELOPT_TUID 26 /* TACACS user identification */
-#define TELOPT_OUTMRK 27 /* output marking */
-#define TELOPT_TTYLOC 28 /* terminal location number */
-#define TELOPT_3270REGIME 29 /* 3270 regime */
-#define TELOPT_X3PAD 30 /* X.3 PAD */
-#define TELOPT_NAWS 31 /* window size */
-#define TELOPT_TSPEED 32 /* terminal speed */
-#define TELOPT_LFLOW 33 /* remote flow control */
-#define TELOPT_LINEMODE 34 /* Linemode option */
-#define TELOPT_XDISPLOC 35 /* X Display Location */
-#define TELOPT_OLD_ENVIRON 36 /* Old - Environment variables */
-#define TELOPT_AUTHENTICATION 37/* Authenticate */
-#define TELOPT_ENCRYPT 38 /* Encryption option */
-#define TELOPT_NEW_ENVIRON 39 /* New - Environment variables */
-#define TELOPT_EXOPL 255 /* extended-options-list */
-#define TELOPT_ENVIRON TELOPT_OLD_ENVIRON
-
-#define NTELOPTS (1+TELOPT_NEW_ENVIRON)
-#ifdef TELOPTS
-char *telopts[NTELOPTS+1] = {
- "BINARY", "ECHO", "RCP", "SUPPRESS GO AHEAD", "NAME",
- "STATUS", "TIMING MARK", "RCTE", "NAOL", "NAOP",
- "NAOCRD", "NAOHTS", "NAOHTD", "NAOFFD", "NAOVTS",
- "NAOVTD", "NAOLFD", "EXTEND ASCII", "LOGOUT", "BYTE MACRO",
- "DATA ENTRY TERMINAL", "SUPDUP", "SUPDUP OUTPUT",
- "SEND LOCATION", "TERMINAL TYPE", "END OF RECORD",
- "TACACS UID", "OUTPUT MARKING", "TTYLOC",
- "3270 REGIME", "X.3 PAD", "NAWS", "TSPEED", "LFLOW",
- "LINEMODE", "XDISPLOC", "OLD-ENVIRON", "AUTHENTICATION",
- "ENCRYPT", "NEW-ENVIRON",
- 0,
-};
-#define TELOPT_FIRST TELOPT_BINARY
-#define TELOPT_LAST TELOPT_NEW_ENVIRON
-#define TELOPT_OK(x) ((unsigned int)(x) <= TELOPT_LAST)
-#define TELOPT(x) telopts[(x)-TELOPT_FIRST]
-#endif
-
-/* sub-option qualifiers */
-#define TELQUAL_IS 0 /* option is... */
-#define TELQUAL_SEND 1 /* send option */
-#define TELQUAL_INFO 2 /* ENVIRON: informational version of IS */
-#define TELQUAL_REPLY 2 /* AUTHENTICATION: client version of IS */
-#define TELQUAL_NAME 3 /* AUTHENTICATION: client version of IS */
-
-#define LFLOW_OFF 0 /* Disable remote flow control */
-#define LFLOW_ON 1 /* Enable remote flow control */
-#define LFLOW_RESTART_ANY 2 /* Restart output on any char */
-#define LFLOW_RESTART_XON 3 /* Restart output only on XON */
-
-/*
- * LINEMODE suboptions
- */
-
-#define LM_MODE 1
-#define LM_FORWARDMASK 2
-#define LM_SLC 3
-
-#define MODE_EDIT 0x01
-#define MODE_TRAPSIG 0x02
-#define MODE_ACK 0x04
-#define MODE_SOFT_TAB 0x08
-#define MODE_LIT_ECHO 0x10
-
-#define MODE_MASK 0x1f
-
-/* Not part of protocol, but needed to simplify things... */
-#define MODE_FLOW 0x0100
-#define MODE_ECHO 0x0200
-#define MODE_INBIN 0x0400
-#define MODE_OUTBIN 0x0800
-#define MODE_FORCE 0x1000
-
-#define SLC_SYNCH 1
-#define SLC_BRK 2
-#define SLC_IP 3
-#define SLC_AO 4
-#define SLC_AYT 5
-#define SLC_EOR 6
-#define SLC_ABORT 7
-#define SLC_EOF 8
-#define SLC_SUSP 9
-#define SLC_EC 10
-#define SLC_EL 11
-#define SLC_EW 12
-#define SLC_RP 13
-#define SLC_LNEXT 14
-#define SLC_XON 15
-#define SLC_XOFF 16
-#define SLC_FORW1 17
-#define SLC_FORW2 18
-
-#define NSLC 18
-
-/*
- * For backwards compatability, we define SLC_NAMES to be the
- * list of names if SLC_NAMES is not defined.
- */
-#define SLC_NAMELIST "0", "SYNCH", "BRK", "IP", "AO", "AYT", "EOR", \
- "ABORT", "EOF", "SUSP", "EC", "EL", "EW", "RP", \
- "LNEXT", "XON", "XOFF", "FORW1", "FORW2", 0,
-#ifdef SLC_NAMES
-char *slc_names[] = {
- SLC_NAMELIST
-};
-#else
-extern char *slc_names[];
-#define SLC_NAMES SLC_NAMELIST
-#endif
-
-#define SLC_NAME_OK(x) ((unsigned int)(x) <= NSLC)
-#define SLC_NAME(x) slc_names[x]
-
-#define SLC_NOSUPPORT 0
-#define SLC_CANTCHANGE 1
-#define SLC_VARIABLE 2
-#define SLC_DEFAULT 3
-#define SLC_LEVELBITS 0x03
-
-#define SLC_FUNC 0
-#define SLC_FLAGS 1
-#define SLC_VALUE 2
-
-#define SLC_ACK 0x80
-#define SLC_FLUSHIN 0x40
-#define SLC_FLUSHOUT 0x20
-
-#define OLD_ENV_VAR 1
-#define OLD_ENV_VALUE 0
-#define NEW_ENV_VAR 0
-#define NEW_ENV_VALUE 1
-#define ENV_ESC 2
-#define ENV_USERVAR 3
-
-#define ENV_VALUE 0
-#define ENV_VAR 1
-
-/*
- * AUTHENTICATION suboptions
- */
-
-/*
- * Who is authenticating who ...
- */
-#define AUTH_WHO_CLIENT 0 /* Client authenticating server */
-#define AUTH_WHO_SERVER 1 /* Server authenticating client */
-#define AUTH_WHO_MASK 1
-
-/*
- * amount of authentication done
- */
-#define AUTH_HOW_ONE_WAY 0
-#define AUTH_HOW_MUTUAL 2
-#define AUTH_HOW_MASK 2
-
-#define AUTHTYPE_NULL 0
-#define AUTHTYPE_KERBEROS_V4 1
-#define AUTHTYPE_KERBEROS_V5 2
-#define AUTHTYPE_SPX 3
-#define AUTHTYPE_MINK 4
-#define AUTHTYPE_CNT 5
-
-#define AUTHTYPE_TEST 99
-
-#ifdef AUTH_NAMES
-char *authtype_names[] = {
- "NULL", "KERBEROS_V4", "KERBEROS_V5", "SPX", "MINK", 0,
-};
-#else
-extern char *authtype_names[];
-#endif
-
-#define AUTHTYPE_NAME_OK(x) ((unsigned int)(x) < AUTHTYPE_CNT)
-#define AUTHTYPE_NAME(x) authtype_names[x]
-
-/*
- * ENCRYPTion suboptions
- */
-#define ENCRYPT_IS 0 /* I pick encryption type ... */
-#define ENCRYPT_SUPPORT 1 /* I support encryption types ... */
-#define ENCRYPT_REPLY 2 /* Initial setup response */
-#define ENCRYPT_START 3 /* Am starting to send encrypted */
-#define ENCRYPT_END 4 /* Am ending encrypted */
-#define ENCRYPT_REQSTART 5 /* Request you start encrypting */
-#define ENCRYPT_REQEND 6 /* Request you send encrypting */
-#define ENCRYPT_ENC_KEYID 7
-#define ENCRYPT_DEC_KEYID 8
-#define ENCRYPT_CNT 9
-
-#define ENCTYPE_ANY 0
-#define ENCTYPE_DES_CFB64 1
-#define ENCTYPE_DES_OFB64 2
-#define ENCTYPE_CNT 3
-
-#ifdef ENCRYPT_NAMES
-char *encrypt_names[] = {
- "IS", "SUPPORT", "REPLY", "START", "END",
- "REQUEST-START", "REQUEST-END", "ENC-KEYID", "DEC-KEYID",
- 0,
-};
-char *enctype_names[] = {
- "ANY", "DES_CFB64", "DES_OFB64", 0,
-};
-#else
-extern char *encrypt_names[];
-extern char *enctype_names[];
-#endif
-
-
-#define ENCRYPT_NAME_OK(x) ((unsigned int)(x) < ENCRYPT_CNT)
-#define ENCRYPT_NAME(x) encrypt_names[x]
-
-#define ENCTYPE_NAME_OK(x) ((unsigned int)(x) < ENCTYPE_CNT)
-#define ENCTYPE_NAME(x) enctype_names[x]
-#endif /* _ARPA_TELNET_H */
diff --git a/winsup/cygwin/include/asm/byteorder.h b/winsup/cygwin/include/asm/byteorder.h
deleted file mode 100644
index 4f5d7cb59..000000000
--- a/winsup/cygwin/include/asm/byteorder.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/* asm/byteorder.h
-
- Copyright 1996, 1998, 2001, 2006, 2009, 2011, 2012 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _I386_BYTEORDER_H
-#define _I386_BYTEORDER_H
-
-#include <_ansi.h>
-#include <stdint.h>
-#include <bits/endian.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifndef __LITTLE_ENDIAN_BITFIELD
-#define __LITTLE_ENDIAN_BITFIELD
-#endif
-
-extern uint32_t ntohl(uint32_t);
-extern uint16_t ntohs(uint16_t);
-extern uint32_t htonl(uint32_t);
-extern uint16_t htons(uint16_t);
-
-_ELIDABLE_INLINE uint32_t __ntohl(uint32_t);
-_ELIDABLE_INLINE uint16_t __ntohs(uint16_t);
-
-_ELIDABLE_INLINE uint32_t
-__ntohl(uint32_t x)
-{
- __asm__("bswap %0" : "=r" (x) : "0" (x));
- return x;
-}
-
-#define __constant_ntohl(x) \
- ((uint32_t)((((uint32_t)(x) & 0x000000ffU) << 24) | \
- (((uint32_t)(x) & 0x0000ff00U) << 8) | \
- (((uint32_t)(x) & 0x00ff0000U) >> 8) | \
- (((uint32_t)(x) & 0xff000000U) >> 24)))
-
-_ELIDABLE_INLINE uint16_t
-__ntohs(uint16_t x)
-{
- __asm__("xchgb %b0,%h0" /* swap bytes */
- : "=Q" (x)
- : "0" (x));
- return x;
-}
-
-#define __constant_ntohs(x) \
- ((uint16_t)((((uint16_t)(x) & 0x00ff) << 8) | \
- (((uint16_t)(x) & 0xff00) >> 8))) \
-
-#define __htonl(x) __ntohl(x)
-#define __htons(x) __ntohs(x)
-#define __constant_htonl(x) __constant_ntohl(x)
-#define __constant_htons(x) __constant_ntohs(x)
-
-#if defined (__OPTIMIZE__) && !defined (__NO_INLINE__)
-# define ntohl(x) \
-(__builtin_constant_p((long)(x)) ? \
- __constant_ntohl((x)) : \
- __ntohl((x)))
-# define ntohs(x) \
-(__builtin_constant_p((short)(x)) ? \
- __constant_ntohs((x)) : \
- __ntohs((x)))
-# define htonl(x) \
-(__builtin_constant_p((long)(x)) ? \
- __constant_htonl((x)) : \
- __htonl((x)))
-# define htons(x) \
-(__builtin_constant_p((short)(x)) ? \
- __constant_htons((x)) : \
- __htons((x)))
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/winsup/cygwin/include/asm/socket.h b/winsup/cygwin/include/asm/socket.h
deleted file mode 100644
index d5d91f495..000000000
--- a/winsup/cygwin/include/asm/socket.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/* asm/socket.h
-
- Copyright 1996, 1997, 1998, 2000, 2001, 2005, 2007 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _ASM_SOCKET_H
-#define _ASM_SOCKET_H
-
-#include <cygwin/if.h>
-
-#define IOCPARM_MASK 0x7f /* parameters must be < 128 bytes */
-#define IOC_VOID 0x20000000 /* no parameters */
-#define IOC_OUT 0x40000000 /* copy out parameters */
-#define IOC_IN 0x80000000 /* copy in parameters */
-
-#define _IO(x,y) (IOC_VOID|(x<<8)|y)
-#define _IOR(x,y,t) (IOC_OUT|(((long)sizeof(t)&IOCPARM_MASK)<<16)|(x<<8)|y)
-#define _IOW(x,y,t) (IOC_IN|(((long)sizeof(t)&IOCPARM_MASK)<<16)|(x<<8)|y)
-
-#define SIOCATMARK _IOR('s', 7, u_long) /* at oob mark? */
-#define FIONREAD _IOR('f', 127, u_long) /* get # bytes to read */
-#define FIONBIO 0x8004667e /* To be compatible with termiost version */
-#define REAL_FIONBIO _IOW('f', 126, u_long) /* set/clear non-blocking i/o */
-#define FIOASYNC _IOW('f', 125, u_long) /* set/clear async i/o */
-#define SIOCSHIWAT _IOW('s', 0, u_long) /* set high watermark */
-#define SIOCGHIWAT _IOR('s', 1, u_long) /* get high watermark */
-#define SIOCSLOWAT _IOW('s', 2, u_long) /* set low watermark */
-#define SIOCGLOWAT _IOR('s', 3, u_long) /* get low watermark */
-
-/* Needed for if queries */
-#define SIOCGIFCONF _IOW('s', 100, struct ifconf) /* get if list */
-#define SIOCGIFFLAGS _IOW('s', 101, struct ifreq) /* Get if flags */
-#define SIOCGIFADDR _IOW('s', 102, struct ifreq) /* Get if addr */
-#define SIOCGIFBRDADDR _IOW('s', 103, struct ifreq) /* Get if broadcastaddr */
-#define SIOCGIFNETMASK _IOW('s', 104, struct ifreq) /* Get if netmask */
-#define SIOCGIFHWADDR _IOW('s', 105, struct ifreq) /* Get hw addr */
-#define SIOCGIFMETRIC _IOW('s', 106, struct ifreq) /* get metric */
-#define SIOCGIFMTU _IOW('s', 107, struct ifreq) /* get MTU size */
-#define SIOCGIFINDEX _IOW('s', 108, struct ifreq) /* get if index */
-#define SIOGIFINDEX SIOCGIFINDEX /* backward compatibility w/ Linux typo. */
-#define SIOCGIFFRNDLYNAM _IOW('s', 109, struct ifreq) /* get friendly if name */
-#define SIOCGIFDSTADDR _IOW('s', 110, struct ifreq) /* Get if dstaddr */
-
-#define SOL_SOCKET 0xffff /* options for socket level */
-
-#define SO_DEBUG 0x0001 /* turn on debugging info recording */
-#define SO_ACCEPTCONN 0x0002 /* socket has had listen() */
-#define SO_REUSEADDR 0x0004 /* allow local address reuse */
-#define SO_KEEPALIVE 0x0008 /* keep connections alive */
-#define SO_DONTROUTE 0x0010 /* just use interface addresses */
-#define SO_BROADCAST 0x0020 /* permit sending of broadcast msgs */
-#define SO_USELOOPBACK 0x0040 /* bypass hardware when possible */
-#define SO_LINGER 0x0080 /* linger on close if data present */
-#define SO_OOBINLINE 0x0100 /* leave received OOB data in line */
-#define SO_DONTLINGER (u_int)(~SO_LINGER)
-#define SO_PEERCRED 0x0200 /* same as getpeereid */
-
-/*
- * Additional options.
- */
-#define SO_SNDBUF 0x1001 /* send buffer size */
-#define SO_RCVBUF 0x1002 /* receive buffer size */
-#define SO_SNDLOWAT 0x1003 /* send low-water mark */
-#define SO_RCVLOWAT 0x1004 /* receive low-water mark */
-#define SO_SNDTIMEO 0x1005 /* send timeout */
-#define SO_RCVTIMEO 0x1006 /* receive timeout */
-#define SO_ERROR 0x1007 /* get error status and clear */
-#define SO_TYPE 0x1008 /* get socket type */
-
-#endif /* _ASM_SOCKET_H */
-
diff --git a/winsup/cygwin/include/asm/types.h b/winsup/cygwin/include/asm/types.h
deleted file mode 100644
index 19cc2ca60..000000000
--- a/winsup/cygwin/include/asm/types.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/* asm/types.h
-
- Copyright 1998, 2000, 2001 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _ASM_TYPES_H
-#define _ASM_TYPES_H
-
-typedef __signed__ char __s8;
-typedef unsigned char __u8;
-
-typedef __signed__ short __s16;
-typedef unsigned short __u16;
-
-typedef __signed__ int __s32;
-typedef unsigned int __u32;
-
-#endif /* _ASM_TYPES_H */
diff --git a/winsup/cygwin/include/attr/xattr.h b/winsup/cygwin/include/attr/xattr.h
deleted file mode 100644
index 421e6871d..000000000
--- a/winsup/cygwin/include/attr/xattr.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/* attr/xattr.h
-
- Copyright 2008 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _ATTR_XATTR_H
-#define _ATTR_XATTR_H
-
-#include "_ansi.h"
-#if 0
-/* Per man pages you have to include <sys/types.h> explicitely before
- including <attr/xattr.h>. That's how it works on Linux, too. */
-#include <sys/types.h>
-#endif
-#include <sys/errno.h>
-
-#define XATTR_CREATE 1
-#define XATTR_REPLACE 2
-
-#ifndef ENOATTR
-#define ENOATTR ENODATA
-#endif
-
-_BEGIN_STD_C
-
-ssize_t _EXFUN(getxattr,(const char *, const char *, void *, size_t ));
-ssize_t _EXFUN(lgetxattr,(const char *, const char *, void *, size_t ));
-ssize_t _EXFUN(fgetxattr,(int , const char *, void *, size_t ));
-ssize_t _EXFUN(listxattr,(const char *, char *, size_t ));
-ssize_t _EXFUN(llistxattr,(const char *, char *, size_t ));
-ssize_t _EXFUN(flistxattr,(int , char *, size_t ));
-int _EXFUN(setxattr,(const char *, const char *, const void *, size_t , int ));
-int _EXFUN(lsetxattr,(const char *, const char *, const void *, size_t , int ));
-int _EXFUN(fsetxattr,(int , const char *, const void *, size_t , int ));
-int _EXFUN(removexattr,(const char *, const char *));
-int _EXFUN(lremovexattr,(const char *, const char *));
-int _EXFUN(fremovexattr,(int , const char *));
-
-_END_STD_C
-
-#endif /* _ATTR_XATTR_H */
diff --git a/winsup/cygwin/include/bits/endian.h b/winsup/cygwin/include/bits/endian.h
deleted file mode 100644
index 492932990..000000000
--- a/winsup/cygwin/include/bits/endian.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/* bits/endian.h
-
- Copyright 2011 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _BITS_ENDIAN_H_
-#define _BITS_ENDIAN_H_
-
-#ifndef __BIG_ENDIAN
-# define __BIG_ENDIAN 4321
-#endif
-#ifndef __LITTLE_ENDIAN
-# define __LITTLE_ENDIAN 1234
-#endif
-
-#ifndef __BYTE_ORDER
-# define __BYTE_ORDER __LITTLE_ENDIAN
-#endif
-
-#endif /* _BITS_ENDIAN_H_ */
diff --git a/winsup/cygwin/include/bits/wordsize.h b/winsup/cygwin/include/bits/wordsize.h
deleted file mode 100644
index b0ee337f8..000000000
--- a/winsup/cygwin/include/bits/wordsize.h
+++ /dev/null
@@ -1,11 +0,0 @@
-/* wordsize.h - Linux compatibility */
-
-#ifndef _WORDSIZE_H
-#define _WORDSIZE_H 1
-#ifdef __x86_64__
-# define __WORDSIZE 64
-# define __WORDSIZE_COMPAT32 1
-#else
-# define __WORDSIZE 32
-#endif
-#endif /*_WORDSIZE_H*/
diff --git a/winsup/cygwin/include/byteswap.h b/winsup/cygwin/include/byteswap.h
deleted file mode 100644
index cd5a726d4..000000000
--- a/winsup/cygwin/include/byteswap.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/* byteswap.h
-
-Copyright 2005 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _BYTESWAP_H
-#define _BYTESWAP_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-static __inline unsigned short
-bswap_16 (unsigned short __x)
-{
- return (__x >> 8) | (__x << 8);
-}
-
-static __inline unsigned int
-bswap_32 (unsigned int __x)
-{
- return (bswap_16 (__x & 0xffff) << 16) | (bswap_16 (__x >> 16));
-}
-
-static __inline unsigned long long
-bswap_64 (unsigned long long __x)
-{
- return (((unsigned long long) bswap_32 (__x & 0xffffffffull)) << 32) | (bswap_32 (__x >> 32));
-}
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* _BYTESWAP_H */
diff --git a/winsup/cygwin/include/cygwin/_types.h b/winsup/cygwin/include/cygwin/_types.h
deleted file mode 100644
index b96267622..000000000
--- a/winsup/cygwin/include/cygwin/_types.h
+++ /dev/null
@@ -1,16 +0,0 @@
-/* cygwin/_types.h
-
- Copyright 2004 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _CYGWIN__TYPES_H
-#define _CYGWIN__TYPES_H
-
-typedef void *_flock_t;
-
-#endif /* _CYGWIN__TYPES_H */
diff --git a/winsup/cygwin/include/cygwin/acl.h b/winsup/cygwin/include/cygwin/acl.h
deleted file mode 100644
index 8fa5a65a5..000000000
--- a/winsup/cygwin/include/cygwin/acl.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/* cygwin/acl.h header file for Cygwin.
-
- Copyright 1999, 2000, 2001, 2002, 2010, 2014 Red Hat, Inc.
- Written by C. Vinschen.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _CYGWIN_ACL_H
-#ifdef __cplusplus
-extern "C" {
-#endif
-#define _CYGWIN_ACL_H
-
-#include <_ansi.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-
-/* Values for `cmd' in calls to acl(2) and facl(2) */
-#define SETACL (0x0)
-#define GETACL (0x1)
-#define GETACLCNT (0x2)
-
-#define MIN_ACL_ENTRIES (3) // minimal acl entries from GETACLCNT
-#define MAX_ACL_ENTRIES (256) // max entries of each type
-
-// Return values of aclcheck(3) in case of error */
-#define GRP_ERROR (0x1)
-#define USER_ERROR (0x2)
-#define CLASS_ERROR (0x3)
-#define OTHER_ERROR (0x4)
-#define DUPLICATE_ERROR (0x5)
-#define ENTRY_ERROR (0x6)
-#define MISS_ERROR (0x7) // which = -1
-#define MEM_ERROR (0x8) // which = -1
-
-// Values for entry type of struct acl
-#define USER_OBJ (0x0001) // owner
-#define USER (0x0002) // additional user
-#define GROUP_OBJ (0x0004) // owning group
-#define GROUP (0x0008) // additional group
-#define CLASS_OBJ (0x0010) // mask entry
-#define OTHER_OBJ (0x0020) // others
-#define ACL_DEFAULT (0x1000) // default flag
-#define DEF_USER_OBJ (ACL_DEFAULT|USER_OBJ) // default owner
-#define DEF_USER (ACL_DEFAULT|USER) // default additional user
-#define DEF_GROUP_OBJ (ACL_DEFAULT|GROUP_OBJ) // default owning group
-#define DEF_GROUP (ACL_DEFAULT|GROUP) // default additional group
-#define DEF_CLASS_OBJ (ACL_DEFAULT|CLASS_OBJ) // default mask entry
-#define DEF_OTHER_OBJ (ACL_DEFAULT|OTHER_OBJ) // default others
-// Values with equivalent meanings
-#define USER_OWNER USER_OBJ
-#define GROUP_OWNER GROUP_OBJ
-#define MASK CLASS_OBJ
-#define OTHER OTHER_OBJ
-
-#ifdef __INSIDE_CYGWIN__
-#ifndef __x86_64__
-typedef struct __acl16 {
- int a_type;
- __uid16_t a_id;
- mode_t a_perm;
-} __aclent16_t;
-#endif
-#endif
-
-typedef struct acl {
- int a_type; /* entry type */
- uid_t a_id; /* UID | GID */
- mode_t a_perm; /* permissions */
-} aclent_t;
-
-#ifndef __INSIDE_CYGWIN__
-int _EXFUN(acl,(const char *path, int cmd, int nentries, aclent_t *aclbufp));
-int _EXFUN(facl,(int fd, int cmd, int nentries, aclent_t *aclbufp));
-int _EXFUN(aclcheck,(aclent_t *aclbufp, int nentries, int *which));
-int _EXFUN(aclsort,(int nentries, int calclass, aclent_t *aclbufp));
-int _EXFUN(acltomode,(aclent_t *aclbufp, int nentries, mode_t *modep));
-int _EXFUN(aclfrommode,(aclent_t *aclbufp, int nentries, mode_t *modep));
-int _EXFUN(acltopbits,(aclent_t *aclbufp, int nentries, mode_t *pbitsp));
-int _EXFUN(aclfrompbits,(aclent_t *aclbufp, int nentries, mode_t *pbitsp));
-char *_EXFUN(acltotext,(aclent_t *aclbufp, int aclcnt));
-aclent_t *_EXFUN(aclfromtext,(char *acltextp, int *aclcnt));
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* _CYGWIN_ACL_H */
diff --git a/winsup/cygwin/include/cygwin/config.h b/winsup/cygwin/include/cygwin/config.h
deleted file mode 100644
index d3c68a502..000000000
--- a/winsup/cygwin/include/cygwin/config.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/* cygwin/config.h header file for Cygwin.
-
- This wraps Cygwin configuration setting which were in newlib's
- sys/config.h before. This way we can manaage our configuration
- setting without bothering newlib.
-
- Copyright 2003, 2007, 2008, 2009, 2010, 2012, 2013, 2014 Red Hat, Inc.
- Written by C. Vinschen.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _CYGWIN_CONFIG_H
-#ifdef __cplusplus
-extern "C" {
-#endif
-#define _CYGWIN_CONFIG_H
-
-#define __DYNAMIC_REENT__
-
-/* The following provides an inline version of __getreent() for newlib,
- which will be used throughout the library whereever there is a _r
- version of a function that takes _REENT. This saves the overhead
- of a function call for what amounts to a simple computation.
-
- The definition below is essentially equivalent to the one in cygtls.h
- (&_my_tls.local_clib) however it uses a fixed precomputed
- offset rather than dereferencing a field of a structure.
-
- Including tlsoffets.h here in order to get this constant offset
- tls_local_clib is a bit of a hack, but the alternative would require
- dragging the entire definition of struct _cygtls (a large and complex
- Cygwin internal data structure) into newlib. The machinery to
- compute these offsets already exists for the sake of gendef so
- we might as well just use it here. */
-
-#ifdef _COMPILING_NEWLIB
-#ifdef __x86_64__
-#include "../tlsoffsets64.h"
-/* We would like to use just "%gs:8", but on x86_64 gcc uses pc-relative
- addressing and translates "gs:8" into the wrong addressing mode. */
-static inline char *___getreent (void)
-{
- register char *ret;
- __asm __volatile__ ("movq %%gs:8,%0" : "=r" (ret));
- return ret + tls_local_clib;
-}
-#define __getreent() ((struct _reent *) ___getreent())
-#else
-#include "../tlsoffsets.h"
-extern char *_tlsbase __asm__ ("%fs:4");
-#define __getreent() (struct _reent *)(_tlsbase + tls_local_clib)
-#endif
-#endif /* _COMPILING_NEWLIB */
-
-#ifdef __x86_64__
-# define __SYMBOL_PREFIX
-#else
-# define __SYMBOL_PREFIX "_"
-#endif
-#define _SYMSTR(x) __SYMBOL_PREFIX #x
-
-#define __FILENAME_MAX__ 4096 /* Keep in sync with PATH_MAX in limits.h. */
-
-/* The following block of macros is required to build newlib correctly for
- Cygwin. Changing them in applications has no or not the desired effect.
- Just leave them alone. */
-#define _READ_WRITE_RETURN_TYPE _ssize_t
-#define _READ_WRITE_BUFSIZE_TYPE size_t
-#define __LARGE64_FILES 1
-#define __USE_INTERNAL_STAT64 1
-#define __LINUX_ERRNO_EXTENSIONS__ 1
-#define _MB_EXTENDED_CHARSETS_ALL 1
-#define __HAVE_LOCALE_INFO__ 1
-#define __HAVE_LOCALE_INFO_EXTENDED__ 1
-#define _WANT_C99_TIME_FORMATS 1
-#define _GLIBC_EXTENSION 1
-#define _STDIO_BSD_SEMANTICS 1
-#define __TM_GMTOFF tm_gmtoff
-#define __TM_ZONE tm_zone
-
-#if defined(__INSIDE_CYGWIN__) || defined(_COMPILING_NEWLIB)
-#define __EXPORT __declspec(dllexport)
-#define __IMPORT
-#else
-#define __EXPORT
-#define __IMPORT __declspec(dllimport)
-#endif
-
-#ifndef __WCHAR_MAX__
-#define __WCHAR_MAX__ 0xffffu
-#endif
-
-#define DEFAULT_LOCALE "C.UTF-8"
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* _CYGWIN_CONFIG_H */
diff --git a/winsup/cygwin/include/cygwin/core_dump.h b/winsup/cygwin/include/cygwin/core_dump.h
deleted file mode 100644
index 57d90b750..000000000
--- a/winsup/cygwin/include/cygwin/core_dump.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/* core_dump.h
-
- Copyright 1999, 2000, 2001, 2014 Red Hat, Inc.
-
- Written by Egor Duda <deo@logos-m.ru>
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _CYGWIN_CORE_DUMP_H
-#define _CYGWIN_CORE_DUMP_H
-
-#include <windows.h>
-
-#define NOTE_INFO_PROCESS 1
-#define NOTE_INFO_THREAD 2
-#define NOTE_INFO_MODULE 3
-
-struct win32_core_process_info
-{
- DWORD pid;
- int signal;
- int command_line_size;
- char command_line[1];
-}
-#ifdef __GNUC__
- __attribute__ ((__packed__))
-#endif
-;
-
-struct win32_core_thread_info
-{
- DWORD tid;
- BOOL is_active_thread;
- CONTEXT thread_context;
-}
-#ifdef __GNUC__
- __attribute__ ((__packed__))
-#endif
-;
-
-struct win32_core_module_info
-{
- void* base_address;
- int module_name_size;
- char module_name[1];
-}
-#ifdef __GNUC__
- __attribute__ ((__packed__))
-#endif
-;
-
-struct win32_pstatus
-{
- unsigned long data_type;
- union
- {
- struct win32_core_process_info process_info;
- struct win32_core_thread_info thread_info;
- struct win32_core_module_info module_info;
- } data ;
-}
-#ifdef __GNUC__
- __attribute__ ((__packed__))
-#endif
-;
-
-typedef struct win32_pstatus win32_pstatus_t ;
-
-#endif /* _CYGWIN_CORE_DUMP_H */
diff --git a/winsup/cygwin/include/cygwin/cygwin_dll.h b/winsup/cygwin/include/cygwin/cygwin_dll.h
deleted file mode 100644
index 908858c17..000000000
--- a/winsup/cygwin/include/cygwin/cygwin_dll.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/* cygwin_dll.h
-
- Copyright 1998, 1999, 2000, 2001, 2009, 2011, 2012, 2013, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef __CYGWIN_CYGWIN_DLL_H__
-#define __CYGWIN_CYGWIN_DLL_H__
-
-#include <windows.h>
-
-#ifdef __cplusplus
-#define CDECL_BEGIN extern "C" {
-#define CDECL_END }
-#else
-#define CDECL_BEGIN
-#define CDECL_END
-#endif
-
-#define DECLARE_CYGWIN_DLL(Entry) \
- \
-CDECL_BEGIN \
- int WINAPI Entry (HINSTANCE h, DWORD reason, void *ptr); \
- typedef int (*mainfunc) (int, char **, char **); \
- extern PVOID cygwin_attach_dll (HMODULE, mainfunc); \
- extern void cygwin_detach_dll (PVOID); \
-CDECL_END \
- \
-static HINSTANCE storedHandle; \
-static DWORD storedReason; \
-static void* storedPtr; \
-int __dynamically_loaded; \
- \
-static int __dllMain (int a __attribute__ ((__unused__)), \
- char **b __attribute__ ((__unused__)), \
- char **c __attribute__ ((__unused__))) \
-{ \
- return Entry (storedHandle, storedReason, storedPtr); \
-} \
- \
-static PVOID dll_index; \
- \
-int WINAPI _cygwin_dll_entry (HINSTANCE h, DWORD reason, void *ptr) \
-{ \
- int ret; \
- ret = 1; \
- \
- switch (reason) \
- { \
- case DLL_PROCESS_ATTACH: \
- { \
- storedHandle = h; \
- storedReason = reason; \
- storedPtr = ptr; \
- __dynamically_loaded = (ptr == NULL); \
- dll_index = cygwin_attach_dll (h, &__dllMain); \
- if (dll_index == (PVOID) -1) \
- ret = 0; \
- } \
- break; \
- \
- case DLL_PROCESS_DETACH: \
- { \
- ret = Entry (h, reason, ptr); \
- if (ret) \
- { \
- cygwin_detach_dll (dll_index); \
- dll_index = (PVOID) -1; \
- } \
- } \
- break; \
- \
- case DLL_THREAD_ATTACH: \
- { \
- ret = Entry (h, reason, ptr); \
- } \
- break; \
- \
- case DLL_THREAD_DETACH: \
- { \
- ret = Entry (h, reason, ptr); \
- } \
- break; \
- } \
- return ret; \
-} \
- \
-/* OBSOLETE: This is only provided for source level compatibility. */ \
-int WINAPI _cygwin_noncygwin_dll_entry (HINSTANCE h, DWORD reason, void *ptr) \
-{ \
- return _cygwin_dll_entry (h, reason, ptr); \
-} \
-
-#endif /* __CYGWIN_CYGWIN_DLL_H__ */
diff --git a/winsup/cygwin/include/cygwin/fs.h b/winsup/cygwin/include/cygwin/fs.h
deleted file mode 100644
index 509b9c555..000000000
--- a/winsup/cygwin/include/cygwin/fs.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/* cygwin/fs.h
-
- Copyright 2002, 2003, 2012 Red Hat Inc.
- Written by Chris January <chris@atomice.net>
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _CYGWIN_FS_H_
-#define _CYGWIN_FS_H_
-
-#define BLKRRPART 0x0000125f
-#define BLKGETSIZE 0x00001260
-#define BLKSSZGET 0x00001268
-#define BLKIOMIN 0x00001278
-#define BLKIOOPT 0x00001279
-#define BLKALIGNOFF 0x0000127a
-#define BLKPBSZGET 0x0000127b
-#define BLKGETSIZE64 0x00041268
-
-#endif
diff --git a/winsup/cygwin/include/cygwin/grp.h b/winsup/cygwin/include/cygwin/grp.h
deleted file mode 100644
index 056c5f618..000000000
--- a/winsup/cygwin/include/cygwin/grp.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/* cygwin/grp.h
-
- Copyright 2002, 2011 Red Hat Inc.
- Written by Corinna Vinschen <corinna@vinschen.de>
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _CYGWIN_GRP_H_
-#define _CYGWIN_GRP_H_
-
-#include <sys/types.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifdef __INSIDE_CYGWIN__
-#ifndef __x86_64__
-struct __group16
-{
- char *gr_name;
- char *gr_passwd;
- __gid16_t gr_gid;
- char **gr_mem;
-};
-#endif
-
-struct group * getgrgid32 (gid_t gid);
-struct group * getgrnam32 (const char *name);
-gid_t getgid32 ();
-gid_t getegid32 ();
-#endif
-
-extern int getgrouplist (const char *, gid_t, gid_t *, int *);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _CYGWIN_GRP_H_ */
diff --git a/winsup/cygwin/include/cygwin/hdreg.h b/winsup/cygwin/include/cygwin/hdreg.h
deleted file mode 100644
index dc8157838..000000000
--- a/winsup/cygwin/include/cygwin/hdreg.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/* cygwin/hdreg.h
-
- Copyright 2002 Red Hat Inc.
- Written by Chris January <chris@atomice.net>
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _CYGWIN_HDREG_H_
-#define _CYGWIN_HDREG_H_
-
-struct hd_geometry {
- unsigned char heads;
- unsigned char sectors;
- unsigned short cylinders;
- unsigned long start;
-};
-
-#define HDIO_GETGEO 0x301
-
-#endif
diff --git a/winsup/cygwin/include/cygwin/icmp.h b/winsup/cygwin/include/cygwin/icmp.h
deleted file mode 100644
index 7e7aedccd..000000000
--- a/winsup/cygwin/include/cygwin/icmp.h
+++ /dev/null
@@ -1 +0,0 @@
-/* icmp.h */
diff --git a/winsup/cygwin/include/cygwin/if.h b/winsup/cygwin/include/cygwin/if.h
deleted file mode 100644
index 2cd6ac5f3..000000000
--- a/winsup/cygwin/include/cygwin/if.h
+++ /dev/null
@@ -1,125 +0,0 @@
-/* cygwin/if.h
-
- Copyright 1996, 2000, 2001, 2007, 2012, 2013 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _CYGWIN_IF_H_
-#define _CYGWIN_IF_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-#include <sys/types.h>
-#include <cygwin/socket.h>
-
-/* Standard interface flags. */
-#define IFF_UP 0x1 /* interface is up */
-#define IFF_BROADCAST 0x2 /* broadcast address valid */
-#define IFF_LOOPBACK 0x8 /* is a loopback net */
-#define IFF_POINTOPOINT 0x10 /* is a point-to-point interface */
-#define IFF_NOTRAILERS 0x20 /* avoid use of trailers */
-#define IFF_RUNNING 0x40 /* resources allocated */
-#define IFF_NOARP 0x80 /* no ARP protocol */
-#define IFF_PROMISC 0x100 /* receive all packets */
-#define IFF_MULTICAST 0x1000 /* Supports multicast */
-#define IFF_LOWER_UP 0x10000 /* driver signals L1 up */
-#define IFF_DORMANT 0x20000 /* driver signals dormant */
-
-struct if_nameindex {
- unsigned if_index;
- char *if_name;
-};
-
-/* This is the structure expected by ioctl when the application requests
- the friendly adapter name (>= XP SP1). ifru_data should point to such
- a structure when ioctl is called with SIOCGIFFRNDLYNAM. */
-#define IFRF_FRIENDLYNAMESIZ 260
-
-struct ifreq_frndlyname {
- int ifrf_len;
- char ifrf_friendlyname[IFRF_FRIENDLYNAMESIZ];
-};
-
-/*
- * Interface request structure used for socket
- * ioctl's. All interface ioctl's must have parameter
- * definitions which begin with ifr_name. The
- * remainder may be interface specific.
- */
-#define IFNAMSIZ 44
-#define IF_NAMESIZE IFNAMSIZ
-#define IFHWADDRLEN 6
-
-struct ifreq {
- union {
- char ifrn_name[IFNAMSIZ]; /* Unique Windows Adapter name (A GUID) */
- } ifr_ifrn;
-
- union {
- struct sockaddr ifru_addr;
- struct sockaddr ifru_broadaddr;
- struct sockaddr ifru_dstaddr;
- struct sockaddr ifru_netmask;
- struct sockaddr ifru_hwaddr;
- int ifru_flags;
- int ifru_metric;
- int ifru_mtu;
- int ifru_ifindex;
- /* The space must be preallocated by the application. */
- void *ifru_data;
- /* Pad to sizeof sockaddr_in6 for further extensions. */
- char __ifru_pad[28];
- } ifr_ifru;
-};
-
-#define ifr_name ifr_ifrn.ifrn_name /* interface name */
-#define ifr_addr ifr_ifru.ifru_addr /* address */
-#define ifr_broadaddr ifr_ifru.ifru_broadaddr /* broadcast address */
-#define ifr_dstaddr ifr_ifru.ifru_dstaddr /* destination address */
-#define ifr_netmask ifr_ifru.ifru_netmask /* interface net mask */
-#define ifr_flags ifr_ifru.ifru_flags /* flags */
-#define ifr_hwaddr ifr_ifru.ifru_hwaddr /* MAC address */
-#define ifr_metric ifr_ifru.ifru_metric /* metric */
-#define ifr_mtu ifr_ifru.ifru_mtu /* mtu */
-#define ifr_ifindex ifr_ifru.ifru_ifindex /* interface index */
-#define ifr_data ifr_ifru.ifru_data /* for use by interface */
-#define ifr_frndlyname ifr_ifru.ifru_data /* Windows friendly if name */
-
-/*
- * Structure used in SIOCGIFCONF request.
- * Used to retrieve interface configuration
- * for machine (useful for programs which
- * must know all networks accessible).
- */
-
-struct ifconf
-{
- int ifc_len; /* size of buffer */
- union
- {
- caddr_t ifcu_buf;
- struct ifreq *ifcu_req;
- } ifc_ifcu;
-};
-
-#define ifc_buf ifc_ifcu.ifcu_buf /* buffer address */
-#define ifc_req ifc_ifcu.ifcu_req /* array of structures */
-
-#ifndef __INSIDE_CYGWIN_NET__
-extern unsigned if_nametoindex (const char *);
-extern char *if_indextoname (unsigned, char *);
-extern struct if_nameindex *if_nameindex (void);
-extern void if_freenameindex (struct if_nameindex *);
-#endif
-
-#ifdef __cplusplus
-};
-#endif /* __cplusplus */
-
-#endif /* _CYGWIN_IF_H_ */
diff --git a/winsup/cygwin/include/cygwin/in.h b/winsup/cygwin/include/cygwin/in.h
deleted file mode 100644
index a64160e8f..000000000
--- a/winsup/cygwin/include/cygwin/in.h
+++ /dev/null
@@ -1,271 +0,0 @@
-/*
- * INET An implementation of the TCP/IP protocol suite for the LINUX
- * operating system. INET is implemented using the BSD Socket
- * interface as the means of communication with the user level.
- *
- * Definitions of the Internet Protocol.
- *
- * Version: @(#)in.h 1.0.1 04/21/93
- *
- * Authors: Original taken from the GNU Project <netinet/in.h> file.
- * Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
- *
- * 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.
- */
-#ifndef _CYGWIN_IN_H
-#define _CYGWIN_IN_H
-
-#include <cygwin/socket.h>
-
-typedef uint16_t in_port_t;
-typedef uint32_t in_addr_t;
-
-#ifndef __INSIDE_CYGWIN_NET__
-
-/* Standard well-defined IP protocols. If you ever add one here, don't
- forget to define it below. */
-enum
-{
- IPPROTO_IP = 0, /* Dummy protocol for TCP */
- IPPROTO_HOPOPTS = 0, /* IPv6 Hop-by-Hop options */
- IPPROTO_ICMP = 1, /* Internet Control Message Protocol */
- IPPROTO_IGMP = 2, /* Internet Gateway Management Protocol */
- IPPROTO_IPIP = 4, /* IPIP tunnels (older KA9Q tunnels use 94) */
- IPPROTO_TCP = 6, /* Transmission Control Protocol */
- IPPROTO_EGP = 8, /* Exterior Gateway Protocol */
- IPPROTO_PUP = 12, /* PUP protocol */
- IPPROTO_UDP = 17, /* User Datagram Protocol */
- IPPROTO_IDP = 22, /* XNS IDP protocol */
- IPPROTO_IPV6 = 41, /* IPv6 header */
- IPPROTO_ROUTING = 43, /* IPv6 Routing header */
- IPPROTO_FRAGMENT = 44, /* IPv6 fragmentation header */
- IPPROTO_ESP = 50, /* encapsulating security payload */
- IPPROTO_AH = 51, /* authentication header */
- IPPROTO_ICMPV6 = 58, /* ICMPv6 */
- IPPROTO_NONE = 59, /* IPv6 no next header */
- IPPROTO_DSTOPTS = 60, /* IPv6 Destination options */
- IPPROTO_RAW = 255, /* Raw IP packets */
- IPPROTO_MAX
-};
-
-/* Define IPPROTO_xxx values to accomodate SUSv3 */
-#define IPPROTO_IP IPPROTO_IP
-#define IPPROTO_HOPOPTS IPPROTO_HOPOPTS
-#define IPPROTO_ICMP IPPROTO_ICMP
-#define IPPROTO_IGMP IPPROTO_IGMP
-#define IPPROTO_IPIP IPPROTO_IPIP
-#define IPPROTO_TCP IPPROTO_TCP
-#define IPPROTO_EGP IPPROTO_EGP
-#define IPPROTO_PUP IPPROTO_PUP
-#define IPPROTO_UDP IPPROTO_UDP
-#define IPPROTO_IDP IPPROTO_IDP
-#define IPPROTO_RAW IPPROTO_RAW
-#define IPPROTO_IPV6 IPPROTO_IPV6
-#define IPPROTO_ROUTING IPPROTO_ROUTING
-#define IPPROTO_FRAGMENT IPPROTO_FRAGMENT
-#define IPPROTO_ESP IPPROTO_ESP
-#define IPPROTO_AH IPPROTO_AH
-#define IPPROTO_ICMPV6 IPPROTO_ICMPV6
-#define IPPROTO_NONE IPPROTO_NONE
-#define IPPROTO_DSTOPTS IPPROTO_DSTOPTS
-
-/* Standard well-known ports. *//* from winsup/include/netinet/in.h */
-enum
-{
- IPPORT_ECHO = 7, /* Echo service. */
- IPPORT_DISCARD = 9, /* Discard transmissions service. */
- IPPORT_SYSTAT = 11, /* System status service. */
- IPPORT_DAYTIME = 13, /* Time of day service. */
- IPPORT_NETSTAT = 15, /* Network status service. */
- IPPORT_FTP = 21, /* File Transfer Protocol. */
- IPPORT_TELNET = 23, /* Telnet protocol. */
- IPPORT_SMTP = 25, /* Simple Mail Transfer Protocol. */
- IPPORT_TIMESERVER = 37, /* Timeserver service. */
- IPPORT_NAMESERVER = 42, /* Domain Name Service. */
- IPPORT_WHOIS = 43, /* Internet Whois service. */
- IPPORT_MTP = 57,
-
- IPPORT_TFTP = 69, /* Trivial File Transfer Protocol. */
- IPPORT_RJE = 77,
- IPPORT_FINGER = 79, /* Finger service. */
- IPPORT_TTYLINK = 87,
- IPPORT_SUPDUP = 95, /* SUPDUP protocol. */
-
-
- IPPORT_EXECSERVER = 512, /* execd service. */
- IPPORT_LOGINSERVER = 513, /* rlogind service. */
- IPPORT_CMDSERVER = 514,
- IPPORT_EFSSERVER = 520,
-
- /* UDP ports. */
- IPPORT_BIFFUDP = 512,
- IPPORT_WHOSERVER = 513,
- IPPORT_ROUTESERVER = 520,
-
- /* Ports less than this value are reserved for privileged processes. */
- IPPORT_RESERVED = 1024,
-
- /* Ports greater this value are reserved for (non-privileged) servers. */
- IPPORT_USERRESERVED = 5000
-};
-
-/* Avoid collision with Mingw64 headers. */
-#ifndef s_addr
-/* Internet address. */
-struct in_addr
-{
- in_addr_t s_addr;
-};
-#define s_addr s_addr
-#endif
-
-/* Request struct for IPv4 multicast socket ops */
-
-struct ip_mreq
-{
- struct in_addr imr_multiaddr; /* IP multicast address of group */
- struct in_addr imr_interface; /* local IP address of interface */
-};
-
-struct ip_mreq_source
-{
- struct in_addr imr_multiaddr;
- struct in_addr imr_sourceaddr;
- struct in_addr imr_interface;
-};
-
-struct ip_msfilter
-{
- struct in_addr imsf_multiaddr;
- struct in_addr imsf_interface;
- uint32_t imsf_fmode;
- uint32_t imsf_numsrc;
- struct in_addr imsf_slist[1];
-};
-
-#define IP_MSFILTER_SIZE(numsrc) (sizeof (struct ip_msfilter) \
- - sizeof (struct in_addr) \
- + (numsrc) * sizeof (struct in_addr))
-
-struct in_pktinfo
-{
- struct in_addr ipi_addr;
- uint32_t ipi_ifindex;
-};
-
-/* Request struct for IP agnostic multicast socket ops */
-
-struct group_req
-{
- uint32_t gr_interface;
- struct sockaddr_storage gr_group;
-};
-
-struct group_source_req
-{
- uint32_t gsr_interface;
- struct sockaddr_storage gsr_group;
- struct sockaddr_storage gsr_source;
-};
-
-struct group_filter
-{
- uint32_t gf_interface;
- struct sockaddr_storage gf_group;
- uint32_t gf_fmode;
- uint32_t gf_numsrc;
- struct sockaddr_storage gf_slist[1];
-};
-
-#define GROUP_FILTER_SIZE(numsrc) (sizeof (struct group_filter) \
- - sizeof (struct sockaddr_storage) \
- + (numsrc) * sizeof (struct sockaddr_storage))
-
-/* Structure describing an Internet (IP) socket address. */
-#define __SOCK_SIZE__ 16 /* sizeof(struct sockaddr) */
-struct sockaddr_in
-{
- sa_family_t sin_family; /* Address family */
- in_port_t sin_port; /* Port number */
- struct in_addr sin_addr; /* Internet address */
-
- /* Pad to size of `struct sockaddr'. */
- unsigned char __pad[__SOCK_SIZE__ - sizeof(short int)
- - sizeof(unsigned short int) - sizeof(struct in_addr)];
-};
-#define sin_zero __pad /* for BSD UNIX comp. -FvK */
-
-/*
- * Definitions of the bits in an Internet address integer.
- * On subnets, host and network parts are found according
- * to the subnet mask, not these masks.
- */
-#define IN_CLASSA(a) ((((in_addr_t) (a)) & 0x80000000) == 0)
-#define IN_CLASSA_NET 0xff000000
-#define IN_CLASSA_NSHIFT 24
-#define IN_CLASSA_HOST (0xffffffff & ~IN_CLASSA_NET)
-#define IN_CLASSA_MAX 128
-
-#define IN_CLASSB(a) ((((in_addr_t) (a)) & 0xc0000000) == 0x80000000)
-#define IN_CLASSB_NET 0xffff0000
-#define IN_CLASSB_NSHIFT 16
-#define IN_CLASSB_HOST (0xffffffff & ~IN_CLASSB_NET)
-#define IN_CLASSB_MAX 65536
-
-#define IN_CLASSC(a) ((((in_addr_t) (a)) & 0xe0000000) == 0xc0000000)
-#define IN_CLASSC_NET 0xffffff00
-#define IN_CLASSC_NSHIFT 8
-#define IN_CLASSC_HOST (0xffffffff & ~IN_CLASSC_NET)
-
-#define IN_CLASSD(a) ((((in_addr_t) (a)) & 0xf0000000) == 0xe0000000)
-#define IN_MULTICAST(a) IN_CLASSD(a)
-#define IN_MULTICAST_NET 0xF0000000
-
-#define IN_EXPERIMENTAL(a) ((((in_addr_t) (a)) & 0xe0000000) == 0xe0000000)
-#define IN_BADCLASS(a) ((((in_addr_t) (a)) & 0xf0000000) == 0xf0000000)
-
-/* Address to accept any incoming messages. */
-#define INADDR_ANY ((in_addr_t) 0x00000000)
-
-/* Address to send to all hosts. */
-#define INADDR_BROADCAST ((in_addr_t) 0xffffffff)
-
-/* Address indicating an error return. */
-#define INADDR_NONE 0xffffffff
-
-/* Network number for local host loopback. */
-#define IN_LOOPBACKNET 127
-
-/* Address to loopback in software to local host. */
-#define INADDR_LOOPBACK 0x7f000001 /* 127.0.0.1 */
-#define IN_LOOPBACK(a) ((((in_addr_t) (a)) & 0xff000000) == 0x7f000000)
-
-/* Defines for Multicast INADDR */
-#define INADDR_UNSPEC_GROUP 0xe0000000 /* 224.0.0.0 */
-#define INADDR_ALLHOSTS_GROUP 0xe0000001 /* 224.0.0.1 */
-#define INADDR_ALLRTRS_GROUP 0xe0000002 /* 224.0.0.2 */
-#define INADDR_MAX_LOCAL_GROUP 0xe00000ff /* 224.0.0.255 */
-
-#define INET_ADDRSTRLEN 16
-
-/* <asm/byteorder.h> contains the htonl type stuff.. */
-
-#include <asm/byteorder.h>
-
-/* Some random defines to make it easier in the kernel.. */
-#ifdef __KERNEL__
-
-#define LOOPBACK(x) (((x) & htonl(0xff000000)) == htonl(0x7f000000))
-#define MULTICAST(x) (((x) & htonl(0xf0000000)) == htonl(0xe0000000))
-
-#endif
-
-#ifdef AF_INET6
-#include <cygwin/in6.h>
-#endif
-#endif
-
-#endif /* _CYGWIN_IN_H */
diff --git a/winsup/cygwin/include/cygwin/in6.h b/winsup/cygwin/include/cygwin/in6.h
deleted file mode 100644
index 896e1ec19..000000000
--- a/winsup/cygwin/include/cygwin/in6.h
+++ /dev/null
@@ -1,127 +0,0 @@
-/* cygwin/in6.h
-
- Copyright 2006, 2007, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-/* NOTE: This file is NOT for direct inclusion. Use netinet/in.h. */
-
-#ifndef _CYGWIN_IN6_H
-#define _CYGWIN_IN6_H
-
-#define INET6_ADDRSTRLEN 46
-
-#define IN6_ARE_ADDR_EQUAL(a, b) \
- (((const uint32_t *)(a))[0] == ((const uint32_t *)(b))[0] \
- && ((const uint32_t *)(a))[1] == ((const uint32_t *)(b))[1] \
- && ((const uint32_t *)(a))[2] == ((const uint32_t *)(b))[2] \
- && ((const uint32_t *)(a))[3] == ((const uint32_t *)(b))[3])
-
-#define IN6_IS_ADDR_UNSPECIFIED(addr) \
- (((const uint32_t *)(addr))[0] == 0 \
- && ((const uint32_t *)(addr))[1] == 0 \
- && ((const uint32_t *)(addr))[2] == 0 \
- && ((const uint32_t *)(addr))[3] == 0)
-
-#define IN6_IS_ADDR_LOOPBACK(addr) \
- (((const uint32_t *)(addr))[0] == 0 \
- && ((const uint32_t *)(addr))[1] == 0 \
- && ((const uint32_t *)(addr))[2] == 0 \
- && ((const uint32_t *)(addr))[3] == htonl (1))
-
-#define IN6_IS_ADDR_MULTICAST(addr) (((const uint8_t *) (addr))[0] == 0xff)
-
-#define IN6_IS_ADDR_LINKLOCAL(addr) \
- ((((const uint16_t *)(addr))[0] & htons (0xffc0)) == htons (0xfe80))
-
-#define IN6_IS_ADDR_SITELOCAL(addr) \
- ((((const uint16_t *)(addr))[0] & htons (0xffc0)) == htons (0xfec0))
-
-#define IN6_IS_ADDR_V4MAPPED(addr) \
- (((const uint32_t *)(addr))[0] == 0 \
- && ((const uint32_t *)(addr))[1] == 0 \
- && ((const uint32_t *)(addr))[2] == htonl (0xffff))
-
-#define IN6_IS_ADDR_V4COMPAT(addr) \
- (((const uint32_t *)(addr))[0] == 0 \
- && ((const uint32_t *)(addr))[1] == 0 \
- && ((const uint32_t *)(addr))[2] == 0 \
- && ntohl (((const uint32_t *)(addr))[3]) > 1)
-
-#define IN6_IS_ADDR_MC_NODELOCAL(addr) \
- (IN6_IS_ADDR_MULTICAST(addr) \
- && (((const uint8_t *)(addr))[1] & 0xf) == 0x1)
-
-#define IN6_IS_ADDR_MC_LINKLOCAL(addr) \
- (IN6_IS_ADDR_MULTICAST (addr) \
- && (((const uint8_t *)(addr))[1] & 0xf) == 0x2)
-
-#define IN6_IS_ADDR_MC_SITELOCAL(addr) \
- (IN6_IS_ADDR_MULTICAST(addr) \
- && (((const uint8_t *)(addr))[1] & 0xf) == 0x5)
-
-#define IN6_IS_ADDR_MC_ORGLOCAL(addr) \
- (IN6_IS_ADDR_MULTICAST(addr) \
- && (((const uint8_t *)(addr))[1] & 0xf) == 0x8)
-
-#define IN6_IS_ADDR_MC_GLOBAL(addr) \
- (IN6_IS_ADDR_MULTICAST(addr) \
- && (((const uint8_t *)(addr))[1] & 0xf) == 0xe)
-
-struct in6_addr
-{
- union
- {
- uint8_t __s6_addr[16];
- uint16_t __s6_addr16[8];
- uint32_t __s6_addr32[4];
- } __u6;
-#define s6_addr __u6.__s6_addr
-#define s6_addr16 __u6.__s6_addr16
-#define s6_addr32 __u6.__s6_addr32
-};
-
-struct ipv6_mreq
-{
- struct in6_addr ipv6mr_multiaddr;
- uint32_t ipv6mr_interface;
-};
-
-struct ipv6_rt_hdr {
- uint8_t nexthdr;
- uint8_t hdrlen;
- uint8_t type;
- uint8_t segments_left;
- /* type specific data, variable length */
-};
-
-struct in6_pktinfo
-{
- struct in6_addr ipi6_addr;
- uint32_t ipi6_ifindex;
-};
-
-#if defined (__INSIDE_CYGWIN__) && !defined (_CYGWIN_IN_H)
-typedef uint16_t in_port_t;
-#endif
-
-struct sockaddr_in6
-{
- sa_family_t sin6_family; /* AF_INET6 */
- in_port_t sin6_port; /* Port number. */
- uint32_t sin6_flowinfo; /* Traffic class and flow inf. */
- struct in6_addr sin6_addr; /* IPv6 address. */
- uint32_t sin6_scope_id; /* Set of interfaces for a scope. */
-};
-
-#define IN6ADDR_ANY_INIT { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }
-#define IN6ADDR_LOOPBACK_INIT { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 }
-
-extern const struct in6_addr in6addr_any;
-extern const struct in6_addr in6addr_loopback;
-
-#endif /* _CYGWIN_IN6_H */
diff --git a/winsup/cygwin/include/cygwin/in_systm.h b/winsup/cygwin/include/cygwin/in_systm.h
deleted file mode 100644
index 1a2c1b2e7..000000000
--- a/winsup/cygwin/include/cygwin/in_systm.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/* System specific type definitions for networking code.
- *
- * Version: @(#)in_systm.h 1.0.0 06/07/00
- *
- * Authors: Original taken from the GNU Project <netinet/in_systm.h> file.
- * Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
- *
- * 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.
- */
-#ifndef _CYGWIN_IN_SYSTM_H
-#define _CYGWIN_IN_SYSTM_H
-
-#include <sys/cdefs.h>
-#include <sys/types.h>
-
-__BEGIN_DECLS
-
-/*
- * Network order versions of various data types. Unfortunately, BSD
- * assumes specific sizes for shorts (16 bit) and longs (32 bit) which
- * don't hold in general. As a consequence, the network order versions
- * may not reflect the actual size of the native data types.
- */
-
-typedef u_int16_t n_short; /* short as received from the net */
-typedef u_int32_t n_long; /* long as received from the net */
-typedef u_int32_t n_time; /* ms since 00:00 GMT, byte rev */
-
-__END_DECLS
-
-#endif /* _CYGWIN_IN_SYSTM_H */
diff --git a/winsup/cygwin/include/cygwin/ipc.h b/winsup/cygwin/include/cygwin/ipc.h
deleted file mode 100644
index c660d960a..000000000
--- a/winsup/cygwin/include/cygwin/ipc.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/* sys/ipc.h
-
- Copyright 2001, 2002, 2012, 2013 Red Hat Inc.
- Written by Robert Collins <rbtcollins@hotmail.com>
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _CYGWIN_IPC_H
-#define _CYGWIN_IPC_H
-
-#include <sys/types.h>
-#include <stdint.h>
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-struct ipc_perm
-{
- uid_t uid; /* Owner's user ID. */
- gid_t gid; /* Owner's group ID. */
- uid_t cuid; /* Creator's user ID. */
- gid_t cgid; /* Creator's group ID. */
- mode_t mode; /* Read/write permission. */
- key_t key;
- unsigned short seq;
-};
-
-/* Mode bits:
- */
-#define IPC_CREAT 0x0200 /* Create entry if key does not exist. */
-#define IPC_EXCL 0x0400 /* Fail if key exists. */
-#define IPC_NOWAIT 0x0800 /* Error if request must wait. */
-#ifdef _KERNEL
-#define IPC_KEY_IS_SHMID 0x1000 /* Used in shmget when called from shmat. */
-#endif
-
-/* Keys:
- */
-#define IPC_PRIVATE ((key_t) 0) /* Private key. */
-
-/* Control commands:
- */
-#define IPC_RMID 0x1000 /* Remove identifier. */
-#define IPC_SET 0x1001 /* Set options. */
-#define IPC_STAT 0x1002 /* Get options. */
-#ifdef _KERNEL
-#define IPC_INFO 0x1003 /* For ipcs(8). */
-#endif
-
-#ifdef _KERNEL
-#define IPCID_TO_IX(id) ((id) & 0xffff)
-#define IPCID_TO_SEQ(id) (((id) >> 16) & 0xffff)
-#define IXSEQ_TO_IPCID(ix,perm) (((perm.seq) << 16) | (ix & 0xffff))
-
-#define IPC_R 000400 /* read permission */
-#define IPC_W 000200 /* write/alter permission */
-#define IPC_M 010000 /* permission to change control info */
-#endif
-
-key_t ftok (const char *path, int id);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _CYGWIN_IPC_H */
diff --git a/winsup/cygwin/include/cygwin/kd.h b/winsup/cygwin/include/cygwin/kd.h
deleted file mode 100644
index b4ec7c523..000000000
--- a/winsup/cygwin/include/cygwin/kd.h
+++ /dev/null
@@ -1,20 +0,0 @@
-/* cygwin/kd.h
-
- Copyright 2006 Red Hat Inc.
- Written by Kazuhiro Fujieda <fujieda@jaist.ac.jp>
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _CYGWIN_KD_H_
-#define _CYGWIN_KD_H_
-
-#define KDGKBMETA 0x4b62
-#define KDSKBMETA 0x4b63
-#define K_METABIT 0x03
-#define K_ESCPREFIX 0x04
-
-#endif /* _CYGWIN_KD_H_ */
diff --git a/winsup/cygwin/include/cygwin/msg.h b/winsup/cygwin/include/cygwin/msg.h
deleted file mode 100644
index c737971ea..000000000
--- a/winsup/cygwin/include/cygwin/msg.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/* sys/msg.h
-
- Copyright 2002, 2012, 2013 Red Hat Inc.
- Written by Conrad Scott <conrad.scott@dsl.pipex.com>
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _CYGWIN_MSG_H
-#define _CYGWIN_MSG_H
-
-#include <cygwin/ipc.h>
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/* Message operation flags:
- */
-#define MSG_NOERROR 0x01 /* No error if big message. */
-
-#ifdef _KERNEL
-/* Command definitions for the semctl () function:
- */
-#define MSG_STAT 0x2000 /* For ipcs(8) */
-#define MSG_INFO 0x2001 /* For ipcs(8) */
-#endif /* _KERNEL */
-
-/* Used for the number of messages in the message queue.
- */
-typedef uint32_t msgqnum_t;
-
-/* Used for the number of bytes allowed in a message queue.
- */
-typedef uint32_t msglen_t;
-
-struct msqid_ds
-{
- struct ipc_perm msg_perm; /* Operation permission structure. */
- msglen_t msg_cbytes; /* Number of bytes currently on queue. */
- msgqnum_t msg_qnum; /* Number of messages currently on queue. */
- msglen_t msg_qbytes; /* Maximum number of bytes allowed on queue. */
- pid_t msg_lspid; /* Process ID of last msgsnd (). */
- pid_t msg_lrpid; /* Process ID of last msgrcv (). */
- timestruc_t msg_stim; /* Time of last msgsnd (). */
- timestruc_t msg_rtim; /* Time of last msgrcv (). */
- timestruc_t msg_ctim; /* Time of last change. */
-#ifdef _KERNEL
- struct msg *msg_first;
- struct msg *msg_last;
-#else
- long msg_spare4[2];
-#endif /* _KERNEL */
-};
-
-#define msg_stime msg_stim.tv_sec
-#define msg_rtime msg_rtim.tv_sec
-#define msg_ctime msg_ctim.tv_sec
-
-#ifdef _KERNEL
-/* Buffer type for msgctl (IPC_INFO, ...) as used by ipcs(8).
- */
-struct msginfo
-{
- int32_t msgmax; /* Maximum number of bytes per
- message. */
- int32_t msgmnb; /* Maximum number of bytes on any one
- message queue. */
- int32_t msgmni; /* Maximum number of message queues,
- system wide. */
- int32_t msgtql; /* Maximum number of messages, system
- wide. */
- int32_t msgssz; /* Size of a message segment, must be
- small power of 2 greater than 4. */
- int32_t msgseg; /* Number of message segments */
- int32_t msg_spare[2];
-};
-
-/* Buffer type for msgctl (MSG_INFO, ...) as used by ipcs(8).
- */
-struct msg_info
-{
- int32_t msg_ids; /* Number of allocated queues. */
- int32_t msg_num; /* Number of messages, system wide. */
- int32_t msg_tot; /* Size in bytes of messages, system wide. */
-};
-#endif /* _KERNEL */
-
-int msgctl (int msqid, int cmd, struct msqid_ds *buf);
-int msgget (key_t key, int msgflg);
-ssize_t msgrcv (int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg);
-int msgsnd (int msqid, const void *msgp, size_t msgsz, int msgflg);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _CYGWIN_MSG_H */
diff --git a/winsup/cygwin/include/cygwin/mtio.h b/winsup/cygwin/include/cygwin/mtio.h
deleted file mode 100644
index ae3aa8d33..000000000
--- a/winsup/cygwin/include/cygwin/mtio.h
+++ /dev/null
@@ -1,316 +0,0 @@
-/* cygwin/mtio.h
-
- Copyright 1999, 2000, 2001, 2004, 2013 Red Hat, Inc.
-
- Written by Corinna Vinschen <corinna@vinschen.de>
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-/* cygwin/mtio.h header file for Cygwin.
-
- by C. Vinschen. */
-
-#ifndef _CYGWIN_MTIO_H
-#define _CYGWIN_MTIO_H
-
-#include <sys/ioctl.h>
-#include <asm/socket.h>
-
-#ifndef DEFTAPE
-#define DEFTAPE "/dev/tape"
-#endif
-
-/*
- * Structures and definitions for mag tape io control commands
- */
-
-/* structure for MTIOCTOP - mag tape op command */
-struct mtop {
- short mt_op; /* operations defined below */
- int mt_count; /* how many of them */
-};
-
-/* Magnetic Tape operations [Not all operations supported by all drivers]: */
-#define MTRESET 0 /* reset drive in case of problems */
-#define MTFSF 1 /* forward space over FileMark,
- * position at first record of next file
- */
-#define MTBSF 2 /* backward space FileMark (position before FM) */
-#define MTFSR 3 /* forward space record */
-#define MTBSR 4 /* backward space record */
-#define MTWEOF 5 /* write an end-of-file record (mark) */
-#define MTREW 6 /* rewind */
-#define MTOFFL 7 /* rewind and put the drive offline (eject?) */
-#define MTNOP 8 /* no op, set status only (read with MTIOCGET) */
-#define MTRETEN 9 /* retension tape */
-#define MTBSFM 10 /* +backward space FileMark, position at FM */
-#define MTFSFM 11 /* +forward space FileMark, position at FM */
-#define MTEOM 12 /* goto end of recorded media (for appending files).
- * MTEOM positions after the last FM, ready for
- * appending another file.
- */
-#define MTERASE 13 /* erase tape -- be careful! */
-
-#define MTRAS1 14 /* run self test 1 (nondestructive) */
-#define MTRAS2 15 /* run self test 2 (destructive) */
-#define MTRAS3 16 /* reserved for self test 3 */
-
-#define MTSETBLK 20 /* set block length (SCSI) */
-#define MTSETDENSITY 21 /* set tape density (SCSI) */
-#define MTSEEK 22 /* seek to block (Tandberg, etc.) */
-#define MTTELL 23 /* tell block (Tandberg, etc.) */
-#define MTSETDRVBUFFER 24 /* set the drive buffering according to SCSI-2 */
- /* ordinary buffered operation with code 1 */
-#define MTFSS 25 /* space forward over setmarks */
-#define MTBSS 26 /* space backward over setmarks */
-#define MTWSM 27 /* write setmarks */
-
-#define MTLOCK 28 /* lock the drive door */
-#define MTUNLOCK 29 /* unlock the drive door */
-#define MTLOAD 30 /* execute the SCSI load command */
-#define MTUNLOAD 31 /* execute the SCSI unload command */
-#define MTCOMPRESSION 32/* control compression with SCSI mode page 15 */
-#define MTSETPART 33 /* Change the active tape partition */
-#define MTMKPART 34 /* Format the tape with one or two partitions */
-
-/* structure for MTIOCGET - mag tape get status command */
-
-struct mtget {
- long mt_type; /* type of magtape device */
- long mt_resid; /* residual count: (not sure)
- * number of bytes ignored, or
- * number of files not skipped, or
- * number of records not skipped.
- * Cygwin:
- * remaining KB until 1.5.7.
- * active partition until 1.7.24.
- * active partition in low 16 bits,
- * number of partitions on this tape
- * in next 16 bits, since 1.7.25.
- */
- /* the following registers are device dependent */
- long mt_dsreg; /* status register, Contains blocksize and
- density code. See MT_ST_xxx macros below */
- long mt_gstat; /* generic (device independent) status */
- long mt_erreg; /* error register */
- /* The next two fields are not always used */
- long mt_fileno; /* number of current file on tape */
- long mt_blkno; /* current block number */
- /* The next are Windows NT specific */
- long long mt_capacity; /* Tape capacity in bytes */
- long long mt_remaining; /* Remaining bytes */
- int mt_minblksize;
- int mt_maxblksize;
- int mt_defblksize;
- unsigned long mt_featureslow;
- unsigned long mt_featureshigh;
- unsigned long mt_eotwarningzonesize;
-};
-
-/* structure for MTIOCPOS - mag tape get position command */
-
-struct mtpos {
- long mt_blkno; /* current block number */
-};
-
-
-/* mag tape io control commands */
-#define MTIOCTOP _IOW('m', 1, struct mtop) /* do a mag tape op */
-#define MTIOCGET _IOR('m', 2, struct mtget) /* get tape status */
-#define MTIOCPOS _IOR('m', 3, struct mtpos) /* get tape position */
-
-/* Generic Mag Tape (device independent) status macros for examining
- * mt_gstat -- HP-UX compatible.
- * There is room for more generic status bits here, but I don't
- * know which of them are reserved. At least three or so should
- * be added to make this really useful.
- */
-#define GMT_EOF(x) ((x) & 0x80000000)
-#define GMT_BOT(x) ((x) & 0x40000000)
-#define GMT_EOT(x) ((x) & 0x20000000)
-#define GMT_SM(x) ((x) & 0x10000000) /* DDS setmark */
-#define GMT_EOD(x) ((x) & 0x08000000) /* DDS EOD */
-#define GMT_WR_PROT(x) ((x) & 0x04000000)
-#define GMT_REP_SM(x) ((x) & 0x02000000) /* Cygwin: rep. setmarks */
-#define GMT_ONLINE(x) ((x) & 0x01000000)
-#define GMT_D_6250(x) ((x) & 0x00800000)
-#define GMT_D_1600(x) ((x) & 0x00400000)
-#define GMT_D_800(x) ((x) & 0x00200000)
-#define GMT_PADDING(x) ((x) & 0x00100000) /* Cygwin: data padding */
-#define GMT_HW_ECC(x) ((x) & 0x00080000) /* Cygwin: HW error corr. */
-#define GMT_DR_OPEN(x) ((x) & 0x00040000) /* door open (no tape) */
-#define GMT_HW_COMP(x) ((x) & 0x00020000) /* Cygwin: HW compression */
-#define GMT_IM_REP_EN(x) ((x) & 0x00010000) /* immediate report mode */
-#define GMT_CLN(x) ((x) & 0x00008000) /* cleaning requested */
-/* 15 generic status bits unused */
-/* Cygwin only: The below settings are also used by the GNU-Linux SCSI tape
- driver but they aren't usually reported here. Unfortunately, there's no
- other official method to retrieve the values of these settings and
- reporting them here apparently doesn't hurt. */
-#define GMT_TWO_FM(x) ((x) & 0x00000080) /* two fm after write */
-#define GMT_FAST_MTEOM(x) ((x) & 0x00000040) /* fast seek to eom */
-#define GMT_AUTO_LOCK(x) ((x) & 0x00000020) /* auto door lock on r/w */
-#define GMT_SYSV(x) ((x) & 0x00000010) /* SYSV read semantics */
-#define GMT_NOWAIT(x) ((x) & 0x00000008) /* don't wait for positioning commands */
-#define GMT_ASYNC(x) ((x) & 0x00000004) /* asynchronous writes */
-
-
-/* SCSI-tape specific definitions */
-/* Bitfield shifts in the status mt_dsreg */
-#define MT_ST_BLKSIZE_SHIFT 0
-#define MT_ST_BLKSIZE_MASK 0xffffff
-#define MT_ST_DENSITY_SHIFT 24
-#define MT_ST_DENSITY_MASK 0xff000000
-
-#define MT_ST_SOFTERR_SHIFT 0
-#define MT_ST_SOFTERR_MASK 0xffff
-
-/* Bitfields for the MTSETDRVBUFFER ioctl. */
-#define MT_ST_OPTIONS 0xf0000000
-#define MT_ST_BOOLEANS 0x10000000
-#define MT_ST_SETBOOLEANS 0x30000000
-#define MT_ST_CLEARBOOLEANS 0x40000000
-#define MT_ST_WRITE_THRESHOLD 0x20000000 /* Not supported */
-#define MT_ST_DEF_OPTIONS 0x60000000 /* Not supported */
-#define MT_ST_EOT_WZ_SIZE 0xf0000000 /* Cygwin only */
-
-#define MT_ST_BUFFER_WRITES 0x00000001
-#define MT_ST_ASYNC_WRITES 0x00000002
-#define MT_ST_READ_AHEAD 0x00000004 /* Not supported */
-#define MT_ST_DEBUGGING 0x00000008 /* Not supported */
-#define MT_ST_TWO_FM 0x00000010
-#define MT_ST_FAST_MTEOM 0x00000020
-#define MT_ST_AUTO_LOCK 0x00000040
-#define MT_ST_DEF_WRITES 0x00000080 /* Not supported */
-#define MT_ST_CAN_BSR 0x00000100 /* Not supported */
-#define MT_ST_NO_BLKLIMS 0x00000200 /* Not supported */
-#define MT_ST_CAN_PARTITIONS 0x00000400 /* Not supported */
-#define MT_ST_SCSI2LOGICAL 0x00000800 /* Not supported */
-#define MT_ST_SYSV 0x00001000
-#define MT_ST_NOWAIT 0x00002000
-#define MT_ST_ECC 0x00010000 /* Cygwin only */
-#define MT_ST_PADDING 0x00020000 /* Cygwin only */
-#define MT_ST_REPORT_SM 0x00040000 /* Cygwin only */
-
-/*
- * Constants for mt_type. Not all of these are supported,
- * and these are not all of the ones that are supported.
- *
- * Only used when not colliding with Windows codes (see below)
- */
-#define MT_ISUNKNOWN 0x01
-#define MT_ISQIC02 0x02 /* Generic QIC-02 tape streamer */
-#define MT_ISWT5150 0x03 /* Wangtek 5150EQ, QIC-150, QIC-02 */
-#define MT_ISARCHIVE_5945L2 0x04 /* Archive 5945L-2, QIC-24, QIC-02? */
-#define MT_ISCMSJ500 0x05 /* CMS Jumbo 500 (QIC-02?) */
-#define MT_ISTDC3610 0x06 /* Tandberg 6310, QIC-24 */
-#define MT_ISARCHIVE_VP60I 0x07 /* Archive VP60i, QIC-02 */
-#define MT_ISARCHIVE_2150L 0x08 /* Archive Viper 2150L */
-#define MT_ISARCHIVE_2060L 0x09 /* Archive Viper 2060L */
-#define MT_ISARCHIVESC499 0x0A /* Archive SC-499 QIC-36 controller */
-#define MT_ISQIC02_ALL_FEATURES 0x0F /* Generic QIC-02 with all features */
-#define MT_ISWT5099EEN24 0x11 /* Wangtek 5099-een24, 60MB, QIC-24 */
-#define MT_ISTEAC_MT2ST 0x12 /* Teac MT-2ST 155mb drive, Teac DC-1 card (Wangtek type) */
-#define MT_ISEVEREX_FT40A 0x32 /* Everex FT40A (QIC-40) */
-#define MT_ISDDS1 0x51 /* DDS device without partitions */
-#define MT_ISDDS2 0x52 /* DDS device with partitions */
-#define MT_ISSCSI1 0x71 /* Generic ANSI SCSI-1 tape unit */
-#define MT_ISSCSI2 0x72 /* Generic ANSI SCSI-2 tape unit */
-
-/* More constants for mt_type. These are the codes used by Windows >= 5.1 */
-#define MT_ISDDS_4mm 0x20
-#define MT_ISMiniQic 0x21
-#define MT_ISTravan 0x22
-#define MT_ISQIC 0x23
-#define MT_ISMP_8mm 0x24
-#define MT_ISAME_8mm 0x25
-#define MT_ISAIT1_8mm 0x26
-#define MT_ISDLT 0x27
-#define MT_ISNCTP 0x28
-#define MT_ISIBM_3480 0x29
-#define MT_ISIBM_3490E 0x2a
-#define MT_ISIBM_Magstar_3590 0x2b
-#define MT_ISIBM_Magstar_MP 0x2c
-#define MT_ISSTK_DATA_D3 0x2d
-#define MT_ISSONY_DTF 0x2e
-#define MT_ISDV_6mm 0x2f
-#define MT_ISDMI 0x30
-#define MT_ISSONY_D2 0x31
-#define MT_ISCLEANER_CARTRIDGE 0x32
-#define MT_ISAVATAR_F2 0x4f
-#define MT_ISMP2_8mm 0x50
-#define MT_ISDST_S 0x51
-#define MT_ISDST_M 0x52
-#define MT_ISDST_L 0x53
-#define MT_ISVXATape_1 0x54
-#define MT_ISVXATape_2 0x55
-#define MT_ISSTK_9840 0x56
-#define MT_ISLTO_Ultrium 0x57
-#define MT_ISLTO_Accelis 0x58
-#define MT_ISAIT_8mm 0x5a
-#define MT_ISADR_1 0x5b
-#define MT_ISADR_2 0x5c
-#define MT_ISSTK_9940 0x5d
-
-struct mt_tape_info {
- long t_type; /* device type id (mt_type) */
- char *t_name; /* descriptive name */
-};
-
-#define MT_TAPE_INFO { \
- {MT_ISUNKNOWN, "Unknown type of tape device"}, \
- {MT_ISQIC02, "Generic QIC-02 tape streamer"}, \
- {MT_ISWT5150, "Wangtek 5150, QIC-150"}, \
- {MT_ISARCHIVE_5945L2, "Archive 5945L-2"}, \
- {MT_ISCMSJ500, "CMS Jumbo 500"}, \
- {MT_ISTDC3610, "Tandberg TDC 3610, QIC-24"}, \
- {MT_ISARCHIVE_VP60I, "Archive VP60i, QIC-02"}, \
- {MT_ISARCHIVE_2150L, "Archive Viper 2150L"}, \
- {MT_ISARCHIVE_2060L, "Archive Viper 2060L"}, \
- {MT_ISARCHIVESC499, "Archive SC-499 QIC-36 controller"}, \
- {MT_ISQIC02_ALL_FEATURES, "Generic QIC-02 tape, all features"}, \
- {MT_ISWT5099EEN24, "Wangtek 5099-een24, 60MB"}, \
- {MT_ISTEAC_MT2ST, "Teac MT-2ST 155mb data cassette drive"}, \
- {MT_ISDDS_4mm, "DDS"}, \
- {MT_ISMiniQic, "MiniQic"}, \
- {MT_ISTravan, "Travan tape"}, \
- {MT_ISQIC, "QIC tape"}, \
- {MT_ISMP_8mm, "8mm Exabyte metal particle tape"}, \
- {MT_ISAME_8mm, "8mm Exabyte advanced metal evap tape"}, \
- {MT_ISAIT1_8mm, "8mm Sony AIT1 tape"}, \
- {MT_ISDLT, "DLT compact tape)"}, \
- {MT_ISNCTP, "Philips NCTP tape"}, \
- {MT_ISIBM_3480, "IBM 3480 tape"}, \
- {MT_ISIBM_3490E, "IBM 3490E tape"}, \
- {MT_ISIBM_Magstar_3590, "IBM Magstar 3590 tape"}, \
- {MT_ISIBM_Magstar_MP, "IBM Magstar MP tape"}, \
- {MT_ISSTK_DATA_D3, "STK data D3 tape"}, \
- {MT_ISSONY_DTF, "Sony DTF tape"}, \
- {MT_ISDV_6mm, "6mm digital video tape"}, \
- {MT_ISDMI, "Exabyte DMI tape"}, \
- {MT_ISSONY_D2, "Sony D2S or D2L tape"}, \
- {MT_ISCLEANER_CARTRIDGE, "Cleaner (all drive types that support cleaners)"}, \
- {MT_ISAVATAR_F2, "Avatar 2"}, \
- {MT_ISMP2_8mm, "8mm Hitachi tape"}, \
- {MT_ISDST_S, "Ampex DST small tape"}, \
- {MT_ISDST_M, "Ampex DST medium tape"}, \
- {MT_ISDST_L, "Ampex DST large tape"}, \
- {MT_ISVXATape_1, "Ecrix 8mm tape"}, \
- {MT_ISVXATape_2, "Ecrix 8mm tape"}, \
- {MT_ISSTK_9840, "STK 9840"}, \
- {MT_ISLTO_Ultrium, "LTO Ultrium (IBM, HP, Seagate)"}, \
- {MT_ISLTO_Accelis, "LTO Accelis (IBM, HP, Seagate)"}, \
- {MT_ISAIT_8mm, "AIT tape (AIT2 or higher)"}, \
- {MT_ISADR_1, "OnStream ADR1"}, \
- {MT_ISADR_2, "OnStream ADR2"}, \
- {MT_ISSTK_9940, "STK 9940"}, \
- {MT_ISSCSI1, "Generic SCSI-1 tape"}, \
- {MT_ISSCSI2, "Generic SCSI-2 tape"}, \
- {0, NULL} \
-}
-
-#endif /* _CYGWIN_MTIO_H */
diff --git a/winsup/cygwin/include/cygwin/rdevio.h b/winsup/cygwin/include/cygwin/rdevio.h
deleted file mode 100644
index 2333abe43..000000000
--- a/winsup/cygwin/include/cygwin/rdevio.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/* cygwin/rdevio.h
-
- Copyright 1999, 2000, 2001 Red Hat, Inc.
-
- Written by Corinna Vinschen <corinna@vinschen.de>
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-/*
- * cygwin/rdevio.h header file for Cygwin.
- *
- * Written by C. Vinschen.
- */
-
-#ifndef _CYGWIN_RDEVIO_H
-#define _CYGWIN_RDEVIO_H
-
-/* structure for RDIOCDOP - raw device operation */
-struct rdop {
- short rd_op;
- unsigned long rd_parm;
-};
-
-/* Raw device operations */
-#define RDSETBLK 1 /* set buffer for driver */
-
-/* structure for RDIOCGET - get raw device */
-struct rdget {
- unsigned long bufsiz;
-};
-
-/*
- * ioctl commands
-*/
-#define RDIOCDOP _IOW('r', 128, struct rdop)
-#define RDIOCGET _IOR('r', 129, struct rdget)
-
-#endif /* _CYGWIN_RDEVIO_H */
diff --git a/winsup/cygwin/include/cygwin/sem.h b/winsup/cygwin/include/cygwin/sem.h
deleted file mode 100644
index 71592e52f..000000000
--- a/winsup/cygwin/include/cygwin/sem.h
+++ /dev/null
@@ -1,128 +0,0 @@
-/* sys/sem.h
-
- Copyright 2002, 2012, 2013 Red Hat Inc.
- Written by Conrad Scott <conrad.scott@dsl.pipex.com>
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _CYGWIN_SEM_H
-#define _CYGWIN_SEM_H
-
-#include <cygwin/ipc.h>
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/* Semaphore operation flags:
- */
-#define SEM_UNDO 010000 /* Set up adjust on exit entry. */
-
-/* Command definitions for the semctl () function:
- */
-#define GETNCNT 0x3000 /* Get semncnt. */
-#define GETPID 0x3001 /* Get sempid. */
-#define GETVAL 0x3002 /* Get semval. */
-#define GETALL 0x3003 /* Get all cases of semval. */
-#define GETZCNT 0x3004 /* Get semzcnt. */
-#define SETVAL 0x3005 /* Set semval. */
-#define SETALL 0x3006 /* Set all cases of semval. */
-
-#ifdef _KERNEL
-#define SEM_STAT 0x3010 /* For ipcs(8). */
-#define SEM_INFO 0x3011 /* For ipcs(8). */
-#endif /* _KERNEL */
-
-struct semid_ds
-{
- struct ipc_perm sem_perm; /* Operation permission structure. */
- unsigned short sem_nsems; /* Number of semaphores in set. */
- timestruc_t sem_otim; /* Last semop () time. */
- timestruc_t sem_ctim; /* Last time changed by semctl (). */
-#ifdef _KERNEL
- struct sem *sem_base; /* pointer to first semaphore in set */
- long sem_spare4[1];
-#else
- long sem_spare4[2];
-#endif /* _KERNEL */
-};
-
-#define sem_otime sem_otim.tv_sec
-#define sem_ctime sem_ctim.tv_sec
-
-struct sembuf
-{
- unsigned short sem_num; /* Semaphore number. */
- short sem_op; /* Semaphore operation. */
- short sem_flg; /* Operation flags. */
-};
-
-#ifdef _KERNEL
-/* Buffer type for semctl (IPC_INFO, ...) as used by ipcs(8).
- */
-struct seminfo
-{
- int32_t semmni; /* Maximum number of unique semaphore
- sets, system wide. */
- int32_t semmns; /* Maximum number of semaphores,
- system wide. */
- int32_t semmsl; /* Maximum number of semaphores per
- semaphore set. */
- int32_t semopm; /* Maximum number of operations per
- semop call. */
- int32_t semmnu; /* Maximum number of undo structures,
- system wide. */
- int32_t semume; /* Maximum number of undo entries per
- undo structure. */
- int32_t semvmx; /* Maximum semaphore value. */
- int32_t semaem; /* Maximum adjust-on-exit value. */
- int32_t semmap; /* # of entries in semaphore map */
- int32_t semusz; /* size in bytes of undo structure */
- int32_t sem_spare[2];
-};
-
-/* Buffer type for semctl (SEM_INFO, ...) as used by ipcs(8).
- */
-struct sem_info
-{
- long sem_ids; /* Number of allocated semaphore sets. */
- long sem_num; /* Number of allocated semaphores. */
-};
-
-/* Permission flags */
-#define SEM_A IPC_W /* alter permission */
-#define SEM_R IPC_R /* read permission */
-
-/* Internally used mode bits. */
-#define SEM_ALLOC 01000 /* semaphore is allocated */
-
-#endif /* _KERNEL */
-
-#ifdef _KERNEL
-/* According to SUSv3, "the fourth argument [to semctl()] is optional and
- depends upon the operation requested. If required, it is of type
- union semun, which the application shall explicitly declare:" */
-union semun {
- int val; /* value for SETVAL */
- struct semid_ds *buf; /* buffer for IPC_STAT, IPC_SET */
- unsigned short *array; /* array for GETALL, SETALL */
-};
-/* Therefore this union is only declared here if building internal code.
- _KERNEL must not be defined in exernal applications! Declare union
- semun explicitely as required by SUSv3, please. */
-#endif /* _KERNEL */
-
-int semctl (int semid, int semnum, int cmd, ...);
-int semget (key_t key, int nsems, int semflg);
-int semop (int semid, struct sembuf *sops, size_t nsops);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _CYGWIN_SEM_H */
diff --git a/winsup/cygwin/include/cygwin/shm.h b/winsup/cygwin/include/cygwin/shm.h
deleted file mode 100644
index c58599379..000000000
--- a/winsup/cygwin/include/cygwin/shm.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/* sys/shm.h
-
- Copyright 2001, 2002, 2012, 2013 Red Hat Inc.
- Written by Robert Collins <rbtcollins@hotmail.com>
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _CYGWIN_SHM_H
-#define _CYGWIN_SHM_H
-
-#include <cygwin/ipc.h>
-#include <sys/cygwin.h>
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/* Segment low boundary address multiple.
- *
- * 64 Kb was hardcoded for x86. MS states this may change so the constant
- * expression is replaced by a function call returning the correct value. */
-#define SHMLBA (cygwin_internal (CW_GET_SHMLBA))
-
-/* Shared memory operation flags:
- */
-#define SHM_RDONLY 0x01 /* Attach read-only (else read-write). */
-#define SHM_RND 0x02 /* Round attach address to SHMLBA. */
-
-#ifdef _KERNEL
-/* Command definitions for the semctl () function:
- */
-#define SHM_STAT 0x4000 /* For ipcs(8) */
-#define SHM_INFO 0x4001 /* For ipcs(8) */
-#endif /* _KERNEL */
-
-/* Unsigned integer used for the number of current attaches.
- */
-typedef uint32_t shmatt_t;
-
-struct shmid_ds
-{
- struct ipc_perm shm_perm; /* Operation permission structure. */
- uint32_t shm_segsz; /* Size of segment in bytes. */
- pid_t shm_lpid; /* Process ID of last operation. */
- pid_t shm_cpid; /* Process ID of creator. */
- shmatt_t shm_nattch;/* Number of current attaches. */
- timestruc_t shm_atim; /* Time of last shmat (). */
- timestruc_t shm_dtim; /* Time of last shmdt (). */
- timestruc_t shm_ctim; /* Time of last change by shmctl (). */
-#ifdef _KERNEL
- struct shm_handle *shm_internal;
- long shm_spare4[1];
-#else
- long shm_spare4[2];
-#endif /* _KERNEL */
-};
-
-#define shm_atime shm_atim.tv_sec
-#define shm_dtime shm_dtim.tv_sec
-#define shm_ctime shm_ctim.tv_sec
-
-#ifdef _KERNEL
-/* Buffer type for shmctl (IPC_INFO, ...) as used by ipcs(8).
- */
-struct shminfo
-{
- int32_t shmmax; /* Maximum size in bytes of a shared
- memory segment. */
- int32_t shmmin; /* Minimum size in bytes of a shared
- memory segment. */
- int32_t shmmni; /* Maximum number of shared memory
- segments, system wide. */
- int32_t shmseg; /* Maximum number of shared memory
- segments attached per process. */
- int32_t shmall; /* Maximum number of bytes of shared
- memory, system wide.
- Note that XSI IPC shared memory allocation is
- restricted to a bit less than 2 Gigs, even on
- 64 bit, so using an int32_t here is sufficient. */
- int32_t shm_spare[4];
-};
-
-/* Buffer type for shmctl (SHM_INFO, ...) as used by ipcs(8).
- */
-struct shm_info
-{
-#define shm_ids used_ids
- int32_t used_ids; /* Number of allocated segments. */
- int32_t shm_tot; /* Size in bytes of allocated segments. */
- int32_t shm_atts; /* Number of attached segments, system
- wide. */
-};
-#endif /* _KERNEL */
-
-void *shmat (int shmid, const void *shmaddr, int shmflg);
-int shmctl (int shmid, int cmd, struct shmid_ds *buf);
-int shmdt (const void *shmaddr);
-int shmget (key_t key, size_t size, int shmflg);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _CYGWIN_SHM_H */
diff --git a/winsup/cygwin/include/cygwin/signal.h b/winsup/cygwin/include/cygwin/signal.h
deleted file mode 100644
index 3d74c9c8d..000000000
--- a/winsup/cygwin/include/cygwin/signal.h
+++ /dev/null
@@ -1,407 +0,0 @@
-/* signal.h
-
- Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2010, 2011, 2012, 2013
- Red Hat, Inc.
-
- This file is part of Cygwin.
-
- This software is a copyrighted work licensed under the terms of the
- Cygwin license. Please consult the file "CYGWIN_LICENSE" for
- details. */
-
-#ifndef _CYGWIN_SIGNAL_H
-#define _CYGWIN_SIGNAL_H
-
-#include <bits/wordsize.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifdef __x86_64__
-
-struct _uc_fpxreg {
- __uint16_t significand[4];
- __uint16_t exponent;
- __uint16_t padding[3];
-};
-
-struct _uc_xmmreg {
- __uint32_t element[4];
-};
-
-struct _fpstate
-{
- __uint16_t cwd;
- __uint16_t swd;
- __uint16_t ftw;
- __uint16_t fop;
- __uint64_t rip;
- __uint64_t rdp;
- __uint32_t mxcsr;
- __uint32_t mxcr_mask;
- struct _uc_fpxreg st[8];
- struct _uc_xmmreg xmm[16];
- __uint32_t padding[24];
-};
-
-struct ucontext
-{
- __uint64_t p1home;
- __uint64_t p2home;
- __uint64_t p3home;
- __uint64_t p4home;
- __uint64_t p5home;
- __uint64_t p6home;
- __uint32_t cr2;
- __uint32_t mxcsr;
- __uint16_t cs;
- __uint16_t ds;
- __uint16_t es;
- __uint16_t fs;
- __uint16_t gs;
- __uint16_t ss;
- __uint32_t eflags;
- __uint64_t dr0;
- __uint64_t dr1;
- __uint64_t dr2;
- __uint64_t dr3;
- __uint64_t dr6;
- __uint64_t dr7;
- __uint64_t rax;
- __uint64_t rcx;
- __uint64_t rdx;
- __uint64_t rbx;
- __uint64_t rsp;
- __uint64_t rbp;
- __uint64_t rsi;
- __uint64_t rdi;
- __uint64_t r8;
- __uint64_t r9;
- __uint64_t r10;
- __uint64_t r11;
- __uint64_t r12;
- __uint64_t r13;
- __uint64_t r14;
- __uint64_t r15;
- __uint64_t rip;
- struct _fpstate fpregs;
- __uint64_t vcx;
- __uint64_t dbc;
- __uint64_t btr;
- __uint64_t bfr;
- __uint64_t etr;
- __uint64_t efr;
- __uint8_t _internal;
- __uint64_t oldmask;
-};
-
-#else /* !x86_64 */
-
-struct _uc_fpreg
-{
- __uint16_t significand[4];
- __uint16_t exponent;
-};
-
-struct _fpstate
-{
- __uint32_t cw;
- __uint32_t sw;
- __uint32_t tag;
- __uint32_t ipoff;
- __uint32_t cssel;
- __uint32_t dataoff;
- __uint32_t datasel;
- struct _uc_fpreg _st[8];
- __uint32_t nxst;
-};
-
-struct ucontext
-{
- __uint32_t cr2;
- __uint32_t dr0;
- __uint32_t dr1;
- __uint32_t dr2;
- __uint32_t dr3;
- __uint32_t dr6;
- __uint32_t dr7;
- struct _fpstate fpstate;
- __uint32_t gs;
- __uint32_t fs;
- __uint32_t es;
- __uint32_t ds;
- __uint32_t edi;
- __uint32_t esi;
- __uint32_t ebx;
- __uint32_t edx;
- __uint32_t ecx;
- __uint32_t eax;
- __uint32_t ebp;
- __uint32_t eip;
- __uint32_t cs;
- __uint32_t eflags;
- __uint32_t esp;
- __uint32_t ss;
- __uint8_t _internal;
- __uint32_t oldmask;
-};
-
-#endif /* !x86_64 */
-
-#define __COPY_CONTEXT_SIZE ((size_t) (uintptr_t) &((struct ucontext *) 0)->_internal)
-
-typedef union sigval
-{
- int sival_int; /* integer signal value */
- void *sival_ptr; /* pointer signal value */
-} sigval_t;
-
-typedef struct sigevent
-{
- sigval_t sigev_value; /* signal value */
- int sigev_signo; /* signal number */
- int sigev_notify; /* notification type */
- void (*sigev_notify_function) (sigval_t); /* notification function */
- pthread_attr_t *sigev_notify_attributes; /* notification attributes */
-} sigevent_t;
-
-#pragma pack(push,4)
-struct _sigcommune
-{
- __uint32_t _si_code;
- void *_si_read_handle;
- void *_si_write_handle;
- void *_si_process_handle;
- __extension__ union
- {
- int _si_fd;
- void *_si_pipe_fhandler;
- char *_si_str;
- };
-};
-
-#define __SI_PAD_SIZE 32
-#ifdef __INSIDE_CYGWIN__
-# ifndef max
-# define max(a,b) (((a) > (b)) ? (a) : (b))
-# endif /*max*/
-# define __uint32_size(__x) (max(sizeof (__x) / sizeof (uint32_t), 1))
-
-/* This padding represents the elements of the last struct in siginfo_t,
- aligning the elements to the end to avoid conflicts with other struct
- members. */
-# define __SI_CYG_PAD (__SI_PAD_SIZE - __uint32_size (void *))
-#endif /*__INSIDE_CYGWIN__*/
-
-typedef struct
-{
- int si_signo; /* signal number */
- int si_code; /* signal code */
- pid_t si_pid; /* sender's pid */
- uid_t si_uid; /* sender's uid */
- int si_errno; /* errno associated with signal */
-
- __extension__ union
- {
- __uint32_t __pad[__SI_PAD_SIZE]; /* plan for future growth */
- struct _sigcommune _si_commune; /* cygwin ipc */
- __extension__ struct
- {
- __extension__ union
- {
- sigval_t si_sigval; /* signal value */
- sigval_t si_value; /* signal value */
- };
- __extension__ struct
- {
- timer_t si_tid; /* timer id */
- unsigned int si_overrun; /* overrun count */
- };
- };
- /* SIGCHLD */
- __extension__ struct
- {
- int si_status; /* exit code */
- clock_t si_utime; /* user time */
- clock_t si_stime; /* system time */
- };
-
- void *si_addr; /* faulting address for core dumping
- signals */
- /* Cygwin internal fields */
-#ifdef __INSIDE_CYGWIN__
- __extension__ struct
- {
- __uint32_t __pad2[__SI_CYG_PAD]; /* Locate at end of struct */
- void *si_cyg; /* pointer to block containing
- cygwin-special info */
- };
-#endif /*__INSIDE_CYGWIN__*/
- };
-} siginfo_t;
-#pragma pack(pop)
-
-enum
-{
- SI_USER = 0, /* sent by kill, raise, pthread_kill */
- SI_ASYNCIO = 2, /* sent by AIO completion (currently
- unimplemented) */
- SI_MESGQ, /* sent by real time mesq state change
- (currently unimplemented) */
- SI_TIMER, /* sent by timer expiration */
- SI_QUEUE, /* sent by sigqueue (currently
- unimplemented) */
- SI_KERNEL, /* sent by system */
-
- ILL_ILLOPC, /* illegal opcode */
- ILL_ILLOPN, /* illegal operand */
- ILL_ILLADR, /* illegal addressing mode */
- ILL_ILLTRP, /* illegal trap*/
- ILL_PRVOPC, /* privileged opcode */
- ILL_PRVREG, /* privileged register */
- ILL_COPROC, /* coprocessor error */
- ILL_BADSTK, /* internal stack error */
-
- FPE_INTDIV, /* integer divide by zero */
- FPE_INTOVF, /* integer overflow */
- FPE_FLTDIV, /* floating point divide by zero */
- FPE_FLTOVF, /* floating point overflow */
- FPE_FLTUND, /* floating point underflow */
- FPE_FLTRES, /* floating point inexact result */
- FPE_FLTINV, /* floating point invalid operation */
- FPE_FLTSUB, /* subscript out of range */
-
- SEGV_MAPERR, /* address not mapped to object */
- SEGV_ACCERR, /* invalid permissions for mapped object */
-
- BUS_ADRALN, /* invalid address alignment. */
- BUS_ADRERR, /* non-existant physical address. */
- BUS_OBJERR, /* object specific hardware error. */
-
- CLD_EXITED, /* child has exited */
- CLD_KILLED, /* child was killed */
- CLD_DUMPED, /* child terminated abnormally */
- CLD_TRAPPED, /* traced child has trapped */
- CLD_STOPPED, /* child has stopped */
- CLD_CONTINUED /* stopped child has continued */
-};
-
-enum
-{
- SIGEV_SIGNAL = 0, /* a queued signal, with an application
- defined value, is generated when the
- event of interest occurs */
- SIGEV_NONE, /* no asynchronous notification is
- delivered when the event of interest
- occurs */
- SIGEV_THREAD /* a notification function is called to
- perform notification */
-};
-
-#if __WORDSIZE == 64
-typedef __uint64_t sigset_t;
-#else
-/* FIXME: We should probably raise the # of signals for 32 bit as well.
- Unfortunately this is an ABI change so requires some forethought. */
-typedef __uint32_t sigset_t;
-#endif
-
-typedef void (*_sig_func_ptr)(int);
-
-struct sigaction
-{
- __extension__ union
- {
- _sig_func_ptr sa_handler; /* SIG_DFL, SIG_IGN, or pointer to a function */
- void (*sa_sigaction) ( int, siginfo_t *, void * );
- };
- sigset_t sa_mask;
- int sa_flags;
-};
-
-#define SA_NOCLDSTOP 1 /* Do not generate SIGCHLD when children
- stop */
-#define SA_SIGINFO 2 /* Invoke the signal catching function
- with three arguments instead of one
- */
-#define SA_RESTART 0x10000000 /* Restart syscall on signal return */
-#define SA_NODEFER 0x40000000 /* Don't automatically block the signal
- when its handler is being executed */
-#define SA_RESETHAND 0x80000000 /* Reset to SIG_DFL on entry to handler */
-#define SA_ONESHOT SA_RESETHAND /* Historical linux name */
-#define SA_NOMASK SA_NODEFER /* Historical linux name */
-
-/* Used internally by cygwin. Included here to group everything in one place.
- Do not use. */
-#define _SA_INTERNAL_MASK 0xf000 /* bits in this range are internal */
-
-#define SIGHUP 1 /* hangup */
-#define SIGINT 2 /* interrupt */
-#define SIGQUIT 3 /* quit */
-#define SIGILL 4 /* illegal instruction (not reset when caught) */
-#define SIGTRAP 5 /* trace trap (not reset when caught) */
-#define SIGABRT 6 /* used by abort */
-#define SIGEMT 7 /* EMT instruction */
-#define SIGFPE 8 /* floating point exception */
-#define SIGKILL 9 /* kill (cannot be caught or ignored) */
-#define SIGBUS 10 /* bus error */
-#define SIGSEGV 11 /* segmentation violation */
-#define SIGSYS 12 /* bad argument to system call */
-#define SIGPIPE 13 /* write on a pipe with no one to read it */
-#define SIGALRM 14 /* alarm clock */
-#define SIGTERM 15 /* software termination signal from kill */
-#define SIGURG 16 /* urgent condition on IO channel */
-#define SIGSTOP 17 /* sendable stop signal not from tty */
-#define SIGTSTP 18 /* stop signal from tty */
-#define SIGCONT 19 /* continue a stopped process */
-#define SIGCHLD 20 /* to parent on child stop or exit */
-#define SIGCLD 20 /* System V name for SIGCHLD */
-#define SIGTTIN 21 /* to readers pgrp upon background tty read */
-#define SIGTTOU 22 /* like TTIN for output if (tp->t_local&LTOSTOP) */
-#define SIGIO 23 /* input/output possible signal */
-#define SIGPOLL SIGIO /* System V name for SIGIO */
-#define SIGXCPU 24 /* exceeded CPU time limit */
-#define SIGXFSZ 25 /* exceeded file size limit */
-#define SIGVTALRM 26 /* virtual time alarm */
-#define SIGPROF 27 /* profiling time alarm */
-#define SIGWINCH 28 /* window changed */
-#define SIGLOST 29 /* resource lost (eg, record-lock lost) */
-#define SIGPWR SIGLOST /* power failure */
-#define SIGUSR1 30 /* user defined signal 1 */
-#define SIGUSR2 31 /* user defined signal 2 */
-
-#if __WORDSIZE == 64
-#define NSIG 65 /* signal 0 implied */
-#else
-#define NSIG 33 /* signal 0 implied */
-#endif
-
-/* Real-Time signals per SUSv3. RT_SIGMAX is defined as 8 in limits.h */
-#define SIGRTMIN 32
-#define SIGRTMAX (NSIG - 1)
-
-#define SIG_HOLD ((_sig_func_ptr)2) /* Signal in signal mask */
-
-void psiginfo (const siginfo_t *, const char *);
-int sigwait (const sigset_t *, int *);
-int sigwaitinfo (const sigset_t *, siginfo_t *);
-int sighold (int);
-int sigignore (int);
-int sigrelse (int);
-_sig_func_ptr sigset (int, _sig_func_ptr);
-
-int sigqueue(pid_t, int, const union sigval);
-int siginterrupt (int, int);
-#ifdef __INSIDE_CYGWIN__
-extern const char *sys_sigabbrev[];
-extern const char *sys_siglist[];
-#else
-extern const char __declspec(dllimport) *sys_sigabbrev[];
-extern const char __declspec(dllimport) *sys_siglist[];
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-#endif /*_CYGWIN_SIGNAL_H*/
diff --git a/winsup/cygwin/include/cygwin/socket.h b/winsup/cygwin/include/cygwin/socket.h
deleted file mode 100644
index 8288c8320..000000000
--- a/winsup/cygwin/include/cygwin/socket.h
+++ /dev/null
@@ -1,323 +0,0 @@
-/* cygwin/socket.h
-
- Copyright 1999, 2000, 2001, 2002, 2003, 2005, 2006, 2007, 2009, 2010, 2012,
- 2013, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _CYGWIN_SOCKET_H
-#define _CYGWIN_SOCKET_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-#include <stdint.h>
-
-/* Not unsigned for backward compatibility. Keep #define for backward
- compatibility. */
-#ifndef socklen_t
-typedef int socklen_t;
-#define socklen_t socklen_t
-#endif
-
-typedef uint16_t sa_family_t;
-
-#ifndef __INSIDE_CYGWIN_NET__
-struct sockaddr {
- sa_family_t sa_family; /* address family, AF_xxx */
- char sa_data[14]; /* 14 bytes of protocol address */
-};
-
-/* Definition of sockaddr_storage according to SUSv3. */
-#define _SS_MAXSIZE 128 /* Maximum size. */
-#define _SS_ALIGNSIZE (sizeof (int64_t))/* Desired alignment. */
-#define _SS_PAD1SIZE (_SS_ALIGNSIZE - sizeof (sa_family_t))
-#define _SS_PAD2SIZE (_SS_MAXSIZE - (sizeof (sa_family_t) \
- + _SS_PAD1SIZE + _SS_ALIGNSIZE))
-
-struct sockaddr_storage {
- sa_family_t ss_family;
- char _ss_pad1[_SS_PAD1SIZE];
- int64_t __ss_align;
- char _ss_pad2[_SS_PAD2SIZE];
-};
-#endif
-
-#include <asm/socket.h> /* arch-dependent defines */
-#include <cygwin/sockios.h> /* the SIOCxxx I/O controls */
-#include <sys/uio.h> /* iovec support */
-#include <sys/types.h>
-
-struct ucred {
- pid_t pid;
- uid_t uid;
- gid_t gid;
-};
-
-struct linger {
- unsigned short l_onoff; /* Linger active */
- unsigned short l_linger; /* How long to linger for */
-};
-
-struct msghdr
-{
- void * msg_name; /* Socket name */
- socklen_t msg_namelen; /* Length of name */
- struct iovec * msg_iov; /* Data blocks */
- int msg_iovlen; /* Number of blocks */
- void * msg_control; /* Ancillary data */
- socklen_t msg_controllen; /* Ancillary data buffer length */
- int msg_flags; /* Received flags on recvmsg */
-};
-
-struct cmsghdr
-{
- socklen_t cmsg_len; /* Length of cmsghdr + data */
- int cmsg_level; /* Protocol */
- int cmsg_type; /* Protocol type */
-};
-
-#define CMSG_ALIGN(len) \
- (((len) + __alignof__ (struct cmsghdr) - 1) \
- & ~(__alignof__ (struct cmsghdr) - 1))
-#define CMSG_LEN(len) \
- (CMSG_ALIGN (sizeof (struct cmsghdr)) + (len))
-#define CMSG_SPACE(len) \
- (CMSG_ALIGN (sizeof (struct cmsghdr)) + CMSG_ALIGN(len))
-#define CMSG_FIRSTHDR(mhdr) \
- ({ \
- struct msghdr *_m = (struct msghdr *) mhdr; \
- (unsigned) (_m)->msg_controllen >= sizeof (struct cmsghdr) \
- ? (struct cmsghdr *) (_m)->msg_control \
- : (struct cmsghdr *) NULL; \
- })
-#define CMSG_NXTHDR(mhdr,cmsg) \
- ({ \
- struct msghdr *_m = (struct msghdr *) mhdr; \
- struct cmsghdr *_c = (struct cmsghdr *) cmsg; \
- ((char *) _c + CMSG_SPACE (_c->cmsg_len) \
- > (char *) _m->msg_control + _m->msg_controllen) \
- ? (struct cmsghdr *) NULL \
- : (struct cmsghdr *) ((char *) _c + CMSG_ALIGN (_c->cmsg_len)); \
- })
-#define CMSG_DATA(cmsg) \
- ((unsigned char *) ((struct cmsghdr *)(cmsg) + 1))
-
-/* "Socket"-level control message types: */
-#define SCM_RIGHTS 0x01 /* access rights (array of int) */
-
-#ifdef __INSIDE_CYGWIN__
-/* Definition of struct msghdr up to release 1.5.18 */
-struct OLD_msghdr
-{
- void * msg_name; /* Socket name */
- int msg_namelen; /* Length of name */
- struct iovec * msg_iov; /* Data blocks */
- int msg_iovlen; /* Number of blocks */
- void * msg_accrights; /* Per protocol magic */
- /* (eg BSD descriptor passing) */
- int msg_accrightslen; /* Length of rights list */
-};
-#endif
-
-/* Socket types. */
-#define SOCK_STREAM 1 /* stream (connection) socket */
-#define SOCK_DGRAM 2 /* datagram (conn.less) socket */
-#define SOCK_RAW 3 /* raw socket */
-#define SOCK_RDM 4 /* reliably-delivered message */
-#define SOCK_SEQPACKET 5 /* sequential packet socket */
-
-/* GNU extension flags. Or them to the type parameter in calls to
- socket(2) to mark socket as nonblocking and/or close-on-exec. */
-#define SOCK_NONBLOCK 0x01000000
-#define SOCK_CLOEXEC 0x02000000
-#ifdef __INSIDE_CYGWIN__
-#define _SOCK_FLAG_MASK 0xff000000 /* Bits left for more extensions */
-#endif
-
-/* Supported address families. */
-/*
- * Address families.
- */
-#define AF_UNSPEC 0 /* unspecified */
-#define AF_UNIX 1 /* local to host (pipes, portals) */
-#define AF_LOCAL 1 /* POSIX name for AF_UNIX */
-#define AF_INET 2 /* internetwork: UDP, TCP, etc. */
-#define AF_IMPLINK 3 /* arpanet imp addresses */
-#define AF_PUP 4 /* pup protocols: e.g. BSP */
-#define AF_CHAOS 5 /* mit CHAOS protocols */
-#define AF_NS 6 /* XEROX NS protocols */
-#define AF_ISO 7 /* ISO protocols */
-#define AF_OSI AF_ISO /* OSI is ISO */
-#define AF_ECMA 8 /* european computer manufacturers */
-#define AF_DATAKIT 9 /* datakit protocols */
-#define AF_CCITT 10 /* CCITT protocols, X.25 etc */
-#define AF_SNA 11 /* IBM SNA */
-#define AF_DECnet 12 /* DECnet */
-#define AF_DLI 13 /* Direct data link interface */
-#define AF_LAT 14 /* LAT */
-#define AF_HYLINK 15 /* NSC Hyperchannel */
-#define AF_APPLETALK 16 /* AppleTalk */
-#define AF_NETBIOS 17 /* NetBios-style addresses */
-#define AF_INET6 23 /* IP version 6 */
-
-#define AF_MAX 32
-/*
- * Protocol families, same as address families for now.
- */
-#define PF_UNSPEC AF_UNSPEC
-#define PF_UNIX AF_UNIX
-#define PF_LOCAL AF_LOCAL
-#define PF_INET AF_INET
-#define PF_IMPLINK AF_IMPLINK
-#define PF_PUP AF_PUP
-#define PF_CHAOS AF_CHAOS
-#define PF_NS AF_NS
-#define PF_ISO AF_ISO
-#define PF_OSI AF_OSI
-#define PF_ECMA AF_ECMA
-#define PF_DATAKIT AF_DATAKIT
-#define PF_CCITT AF_CCITT
-#define PF_SNA AF_SNA
-#define PF_DECnet AF_DECnet
-#define PF_DLI AF_DLI
-#define PF_LAT AF_LAT
-#define PF_HYLINK AF_HYLINK
-#define PF_APPLETALK AF_APPLETALK
-#define PF_NETBIOS AF_NETBIOS
-#define PF_INET6 AF_INET6
-
-#define PF_MAX AF_MAX
-
-/* Maximum queue length specificable by listen. */
-#define SOMAXCONN 0x7fffffff
-
-/* Flags we can use with send/ and recv. */
-#define MSG_OOB 0x1 /* process out-of-band data */
-#define MSG_PEEK 0x2 /* peek at incoming message */
-#define MSG_DONTROUTE 0x4 /* send without using routing tables */
-#define MSG_WAITALL 0x8 /* wait for all requested bytes */
-#define MSG_DONTWAIT 0x10 /* selective non-blocking operation */
-#define MSG_NOSIGNAL 0x20 /* Don't raise SIGPIPE */
-#define MSG_TRUNC 0x0100 /* Normal data truncated */
-#define MSG_CTRUNC 0x0200 /* Control data truncated */
-/* Windows-specific flag values returned by recvmsg. */
-#define MSG_BCAST 0x0400 /* Broadcast datagram */
-#define MSG_MCAST 0x0800 /* Multicast datagram */
-
-/* Setsockoptions(2) level. Thanks to BSD these must match IPPROTO_xxx */
-#define SOL_IP 0
-#define SOL_IPV6 41
-#define SOL_IPX 256
-#define SOL_AX25 257
-#define SOL_ATALK 258
-#define SOL_NETROM 259
-#define SOL_TCP 6
-#define SOL_UDP 17
-
-/* IP options */
-#ifndef IPTOS_LOWDELAY
-#define IPTOS_LOWDELAY 0x10
-#define IPTOS_THROUGHPUT 0x08
-#define IPTOS_RELIABILITY 0x04
-#endif
-
-/* These need to appear somewhere around here */
-#define IP_DEFAULT_MULTICAST_TTL 1
-#define IP_DEFAULT_MULTICAST_LOOP 1
-#define IP_MAX_MEMBERSHIPS 20
-
-/* IP options for use with getsockopt/setsockopt */
-#define IP_OPTIONS 1
-#define IP_HDRINCL 2
-#define IP_TOS 3
-#define IP_TTL 4
-#define IP_MULTICAST_IF 9
-#define IP_MULTICAST_TTL 10
-#define IP_MULTICAST_LOOP 11
-#define IP_ADD_MEMBERSHIP 12
-#define IP_DROP_MEMBERSHIP 13
-#define IP_DONTFRAGMENT 14
-#define IP_ADD_SOURCE_MEMBERSHIP 15
-#define IP_DROP_SOURCE_MEMBERSHIP 16
-#define IP_BLOCK_SOURCE 17
-#define IP_UNBLOCK_SOURCE 18
-#define IP_PKTINFO 19
-#define IP_UNICAST_IF 31
-
-/* IPv6 options for use with getsockopt/setsockopt */
-#define IPV6_HOPOPTS 1
-#define IPV6_UNICAST_HOPS 4
-#define IPV6_MULTICAST_IF 9
-#define IPV6_MULTICAST_HOPS 10
-#define IPV6_MULTICAST_LOOP 11
-#define IPV6_ADD_MEMBERSHIP 12
-#define IPV6_DROP_MEMBERSHIP 13
-#define IPV6_JOIN_GROUP IPV6_ADD_MEMBERSHIP
-#define IPV6_LEAVE_GROUP IPV6_DROP_MEMBERSHIP
-#define IPV6_DONTFRAG 14
-#define IPV6_PKTINFO 19
-#define IPV6_HOPLIMIT 21
-#define IPV6_CHECKSUM 26
-#define IPV6_V6ONLY 27
-#define IPV6_UNICAST_IF 31
-#define IPV6_RTHDR 32
-#define IPV6_RECVRTHDR 38
-#define IPV6_TCLASS 39
-#define IPV6_RECVTCLASS 40
-
-/* IP agnostic options for use with getsockopt/setsockopt */
-#define MCAST_JOIN_GROUP 41
-#define MCAST_LEAVE_GROUP 42
-#define MCAST_BLOCK_SOURCE 43
-#define MCAST_UNBLOCK_SOURCE 44
-#define MCAST_JOIN_SOURCE_GROUP 45
-#define MCAST_LEAVE_SOURCE_GROUP 46
-
-#ifndef __INSIDE_CYGWIN_NET__
-#define MCAST_INCLUDE 0
-#define MCAST_EXCLUDE 1
-#endif
-
-/* Old WinSock1 values, needed internally */
-#ifdef __INSIDE_CYGWIN__
-#define _WS1_IP_OPTIONS 1
-#define _WS1_IP_MULTICAST_IF 2
-#define _WS1_IP_MULTICAST_TTL 3
-#define _WS1_IP_MULTICAST_LOOP 4
-#define _WS1_IP_ADD_MEMBERSHIP 5
-#define _WS1_IP_DROP_MEMBERSHIP 6
-#define _WS1_IP_TTL 7
-#define _WS1_IP_TOS 8
-#define _WS1_IP_DONTFRAGMENT 9
-#endif
-
-/* IPX options */
-#define IPX_TYPE 1
-
-/* TCP options - this way around because someone left a set in the c library includes */
-#ifndef TCP_NODELAY
-#define TCP_NODELAY 0x0001
-#define TCP_MAXSEG 2
-#endif
-
-/* SUS symbolic values for the second parm to shutdown(2) */
-#define SHUT_RD 0 /* == Win32 SD_RECEIVE */
-#define SHUT_WR 1 /* == Win32 SD_SEND */
-#define SHUT_RDWR 2 /* == Win32 SD_BOTH */
-
-/* The various priorities. */
-#define SOPRI_INTERACTIVE 0
-#define SOPRI_NORMAL 1
-#define SOPRI_BACKGROUND 2
-
-#ifdef __cplusplus
-};
-#endif /* __cplusplus */
-
-#endif /* _CYGWIN_SOCKET_H */
diff --git a/winsup/cygwin/include/cygwin/sockios.h b/winsup/cygwin/include/cygwin/sockios.h
deleted file mode 100644
index 2e756954e..000000000
--- a/winsup/cygwin/include/cygwin/sockios.h
+++ /dev/null
@@ -1 +0,0 @@
-/* sockios.h */
diff --git a/winsup/cygwin/include/cygwin/stat.h b/winsup/cygwin/include/cygwin/stat.h
deleted file mode 100644
index 73f3e9310..000000000
--- a/winsup/cygwin/include/cygwin/stat.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/* cygwin/stat.h
-
- Copyright 2002, 2007, 2010, 2013 Red Hat Inc.
- Written by Corinna Vinschen <corinna@vinschen.de>
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _CYGWIN_STAT_H
-#define _CYGWIN_STAT_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct stat
-{
- dev_t st_dev;
- ino_t st_ino;
- mode_t st_mode;
- nlink_t st_nlink;
- uid_t st_uid;
- gid_t st_gid;
- dev_t st_rdev;
- off_t st_size;
- timestruc_t st_atim;
- timestruc_t st_mtim;
- timestruc_t st_ctim;
- blksize_t st_blksize;
- blkcnt_t st_blocks;
- timestruc_t st_birthtim;
-};
-
-#if defined (__INSIDE_CYGWIN__) || defined (_COMPILING_NEWLIB)
-#ifndef __x86_64__
-struct __stat32
-{
- __dev16_t st_dev;
- __ino32_t st_ino;
- mode_t st_mode;
- nlink_t st_nlink;
- __uid16_t st_uid;
- __gid16_t st_gid;
- __dev16_t st_rdev;
- _off_t st_size;
- timestruc_t st_atim;
- timestruc_t st_mtim;
- timestruc_t st_ctim;
- blksize_t st_blksize;
- __blkcnt32_t st_blocks;
- long st_spare4[2];
-};
-#endif
-
-extern int fstat64 (int fd, struct stat *buf);
-extern int stat64 (const char *__restrict file_name,
- struct stat *__restrict buf);
-extern int lstat64 (const char *__restrict file_name,
- struct stat *__restrict buf);
-
-#endif
-
-#define st_atime st_atim.tv_sec
-#define st_mtime st_mtim.tv_sec
-#define st_ctime st_ctim.tv_sec
-#define st_birthtime st_birthtim.tv_sec
-
-/* POSIX IPC objects are not implemented as distinct file types, so the
- below macros have to return 0. The expression is supposed to catch
- illegal usage with non-stat parameters. */
-#define S_TYPEISMQ(buf) ((void)(buf)->st_mode,0)
-#define S_TYPEISSEM(buf) ((void)(buf)->st_mode,0)
-#define S_TYPEISSHM(buf) ((void)(buf)->st_mode,0)
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _CYGWIN_STAT_H */
diff --git a/winsup/cygwin/include/cygwin/stdlib.h b/winsup/cygwin/include/cygwin/stdlib.h
deleted file mode 100644
index 4d652fd5f..000000000
--- a/winsup/cygwin/include/cygwin/stdlib.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/* stdlib.h
-
- Copyright 2005, 2006, 2007, 2008, 2009, 2011, 2013 Red Hat Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _CYGWIN_STDLIB_H
-#define _CYGWIN_STDLIB_H
-
-#include <cygwin/wait.h>
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-__uint32_t arc4random(void);
-void arc4random_addrandom(unsigned char *, int);
-void arc4random_buf(void *, size_t);
-void arc4random_stir(void);
-__uint32_t arc4random_uniform(__uint32_t);
-
-const char *getprogname (void);
-void setprogname (const char *);
-
-#ifndef __STRICT_ANSI__
-char *canonicalize_file_name (const char *);
-int unsetenv (const char *);
-#endif /*__STRICT_ANSI__*/
-#if !defined(__STRICT_ANSI__) \
- || (defined(_XOPEN_SOURCE) \
- && ((_XOPEN_SOURCE - 0 >= 500) || defined(_XOPEN_SOURCE_EXTENDED)))
-char *initstate (unsigned seed, char *state, size_t size);
-long random (void);
-char *setstate (const char *state);
-void srandom (unsigned);
-#endif
-#ifndef __STRICT_ANSI__
-char *ptsname (int);
-int ptsname_r(int, char *, size_t);
-int getpt (void);
-int grantpt (int);
-int unlockpt (int);
-#endif /*__STRICT_ANSI__*/
-
-int posix_openpt (int);
-int posix_memalign (void **, size_t, size_t);
-
-#ifdef _COMPILING_NEWLIB
-#define unsetenv UNUSED_unsetenv
-#define _unsetenv_r UNUSED__unsetenv_r
-#endif
-
-extern _PTR memalign _PARAMS ((size_t, size_t));
-extern _PTR valloc _PARAMS ((size_t));
-
-#undef _malloc_r
-#define _malloc_r(r, s) malloc (s)
-#undef _free_r
-#define _free_r(r, p) free (p)
-#undef _realloc_r
-#define _realloc_r(r, p, s) realloc (p, s)
-#undef _calloc_r
-#define _calloc_r(r, s1, s2) calloc (s1, s2);
-#undef _memalign_r
-#define _memalign_r(r, s1, s2) memalign (s1, s2);
-#undef _mallinfo_r
-#define _mallinfo_r(r) mallinfo ()
-#undef _malloc_stats_r
-#define _malloc_stats_r(r) malloc_stats ()
-#undef _mallopt_r
-#define _mallopt_r(i1, i2) mallopt (i1, i2)
-#undef _malloc_usable_size_r
-#define _malloc_usable_size_r(r, p) malloc_usable_size (p)
-#undef _valloc_r
-#define _valloc_r(r, s) valloc (s)
-#undef _pvalloc_r
-#define _pvalloc_r(r, s) pvalloc (s)
-#undef _malloc_trim_r
-#define _malloc_trim_r(r, s) malloc_trim (s)
-#undef _mstats_r
-#define _mstats_r(r, p) mstats (p)
-
-#ifdef __cplusplus
-}
-#endif
-#endif /*_CYGWIN_STDLIB_H*/
diff --git a/winsup/cygwin/include/cygwin/sys_time.h b/winsup/cygwin/include/cygwin/sys_time.h
deleted file mode 100644
index 1cbd8ae59..000000000
--- a/winsup/cygwin/include/cygwin/sys_time.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/* sys_time.h
-
- Copyright 2005 Red Hat Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _CYGWIN_SYS_TIME_H
-#define _CYGWIN_SYS_TIME_H
-#include <sys/select.h>
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-int futimes (int, const struct timeval *);
-int lutimes (const char *, const struct timeval *);
-
-
-#ifdef __cplusplus
-}
-#endif
-#endif /*_CYGWIN_SYS_TIME_H*/
diff --git a/winsup/cygwin/include/cygwin/sysproto.h b/winsup/cygwin/include/cygwin/sysproto.h
deleted file mode 100644
index 838555002..000000000
--- a/winsup/cygwin/include/cygwin/sysproto.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/* cygwin/sysproto.h
-
- Copyright 2003, 2005, 2012, 2013 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-/* cygwin/sysproto.h header file for Cygwin. */
-
-#ifndef _CYGWIN_SYSPROTO_H
-#define _CYGWIN_SYSPROTO_H
-#define _SYS_SYSPROTO_H_ /* Keep it, used by BSD files */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <sys/types.h>
-
-struct msgctl_args {
- int msqid;
- int cmd;
- struct msqid_ds *buf;
-};
-
-struct msgget_args {
- key_t key;
- int msgflg;
-};
-
-struct msgrcv_args {
- int msqid;
- void *msgp;
- size_t msgsz;
- long msgtyp;
- int msgflg;
-};
-
-struct msgsnd_args {
- int msqid;
- const void *msgp;
- size_t msgsz;
- int msgflg;
-};
-
-struct semctl_args {
- int semid;
- int semnum;
- int cmd;
- union semun *arg;
-};
-
-struct semget_args {
- key_t key;
- int nsems;
- int semflg;
-};
-
-struct semop_args {
- int semid;
- struct sembuf *sops;
- size_t nsops;
-};
-
-struct shmat_args {
- int shmid;
- const void *shmaddr;
- int shmflg;
-};
-
-struct shmctl_args {
- int shmid;
- int cmd;
- struct shmid_ds *buf;
-};
-
-struct shmdt_args {
- const void *shmaddr;
-};
-
-struct shmget_args {
- key_t key;
- size_t size;
- int shmflg;
-};
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _CYGWIN_SYSPROTO_H */
diff --git a/winsup/cygwin/include/cygwin/time.h b/winsup/cygwin/include/cygwin/time.h
deleted file mode 100644
index 6a82ae657..000000000
--- a/winsup/cygwin/include/cygwin/time.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/* time.h
-
- Copyright 2005, 2007 Red Hat Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _CYGWIN_TIME_H
-#define _CYGWIN_TIME_H
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/* Not defined in main time.h */
-int __cdecl clock_setres (clockid_t, struct timespec *);
-
-/* GNU extensions. */
-time_t __cdecl timelocal (struct tm *);
-time_t __cdecl timegm (struct tm *);
-
-#define TIMER_RELTIME 0 /* For compatibility with HP/UX, Solaris, others? */
-
-#ifndef __STRICT_ANSI__
-
-extern int stime (const time_t *);
-
-extern int daylight __asm__ (_SYMSTR (_daylight));
-
-#ifndef __timezonefunc__
-extern long timezone __asm__ (_SYMSTR (_timezone));
-#endif
-
-#endif /*__STRICT_ANSI__*/
-
-#ifdef __cplusplus
-}
-#endif
-#endif /*_CYGWIN_TIME_H*/
diff --git a/winsup/cygwin/include/cygwin/types.h b/winsup/cygwin/include/cygwin/types.h
deleted file mode 100644
index 54c0c5ba5..000000000
--- a/winsup/cygwin/include/cygwin/types.h
+++ /dev/null
@@ -1,225 +0,0 @@
-/* types.h
-
- Copyright 2001, 2002, 2003, 2005, 2006, 2010, 2011 Red Hat Inc.
- Written by Robert Collins <rbtcollins@hotmail.com>
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _CYGWIN_TYPES_H
-#define _CYGWIN_TYPES_H
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-#include <stdint.h>
-#include <endian.h>
-#include <bits/wordsize.h>
-
-#ifndef __timespec_t_defined
-#define __timespec_t_defined
-typedef struct timespec timespec_t;
-#endif /*__timespec_t_defined*/
-
-#ifndef __timestruc_t_defined
-#define __timestruc_t_defined
-typedef struct timespec timestruc_t;
-#endif /*__timestruc_t_defined*/
-
-#ifndef __off_t_defined
-#define __off_t_defined
-/* Based on the newlib definitions. */
-#if __WORDSIZE == 64
-typedef _off_t off_t;
-#else
-typedef _off64_t off_t;
-#endif
-#endif /*__off_t_defined*/
-
-typedef __loff_t loff_t;
-
-#ifndef __dev_t_defined
-#define __dev_t_defined
-typedef __int16_t __dev16_t;
-typedef __uint32_t dev_t;
-#endif /*__dev_t_defined*/
-
-#ifndef __blksize_t_defined
-#define __blksize_t_defined
-typedef __int32_t blksize_t;
-#endif /*__blksize_t_defined*/
-
-#ifndef __blkcnt_t_defined
-#define __blkcnt_t_defined
-typedef __int32_t __blkcnt32_t;
-typedef __int64_t blkcnt_t;
-#endif /*__blkcnt_t_defined*/
-
-#ifndef __fsblkcnt_t_defined
-#define __fsblkcnt_t_defined
-/* Keep as is. 32 bit on i386, 64 bit on x86_64. */
-typedef unsigned long fsblkcnt_t;
-#endif /* __fsblkcnt_t_defined */
-
-#ifndef __fsfilcnt_t_defined
-#define __fsfilcnt_t_defined
-/* Keep as is. 32 bit on i386, 64 bit on x86_64. */
-typedef unsigned long fsfilcnt_t;
-#endif /* __fsfilcnt_t_defined */
-
-#ifndef __uid_t_defined
-#define __uid_t_defined
-typedef unsigned short __uid16_t;
-typedef __uint32_t uid_t;
-#endif /*__uid_t_defined*/
-
-#ifndef __gid_t_defined
-#define __gid_t_defined
-typedef unsigned short __gid16_t;
-typedef __uint32_t gid_t;
-#endif /*__gid_t_defined*/
-
-#ifndef __ino_t_defined
-#define __ino_t_defined
-#ifndef __x86_64__
-typedef __uint32_t __ino32_t;
-#endif
-typedef __uint64_t ino_t;
-#endif /*__ino_t_defined*/
-
-/* Generic ID type, must match at least pid_t, uid_t and gid_t in size. */
-#ifndef __id_t_defined
-#define __id_t_defined
-typedef __uint32_t id_t;
-#endif /* __id_t_defined */
-
-#if defined (__INSIDE_CYGWIN__) && !defined (__x86_64__)
-struct __flock32 {
- short l_type; /* F_RDLCK, F_WRLCK, or F_UNLCK */
- short l_whence; /* flag to choose starting offset */
- _off_t l_start; /* relative offset, in bytes */
- _off_t l_len; /* length, in bytes; 0 means lock to EOF */
- short l_pid; /* returned with F_GETLK */
- short l_xxx; /* reserved for future use */
-};
-#endif
-
-struct flock {
- short l_type; /* F_RDLCK, F_WRLCK, or F_UNLCK */
- short l_whence; /* flag to choose starting offset */
- off_t l_start; /* relative offset, in bytes */
- off_t l_len; /* length, in bytes; 0 means lock to EOF */
- pid_t l_pid; /* returned with F_GETLK */
-};
-
-#ifndef __key_t_defined
-#define __key_t_defined
-typedef long long key_t;
-#endif /* __key_t_defined */
-
-#ifndef __BIT_TYPES_DEFINED
-#define __BIT_TYPES_DEFINED__ 1
-
-#ifndef __vm_offset_t_defined
-#define __vm_offset_t_defined
-typedef unsigned long vm_offset_t;
-#endif /*__vm_offset_t_defined*/
-
-#ifndef __vm_size_t_defined
-#define __vm_size_t_defined
-typedef unsigned long vm_size_t;
-#endif /*__vm_size_t_defined*/
-
-#ifndef __vm_object_t_defined
-#define __vm_object_t_defined
-typedef void *vm_object_t;
-#endif /* __vm_object_t_defined */
-
-#ifndef __u_int8_t_defined
-#define __u_int8_t_defined
-typedef unsigned char u_int8_t;
-#endif
-#ifndef __u_int16_t_defined
-#define __u_int16_t_defined
-typedef __uint16_t u_int16_t;
-#endif
-#ifndef __u_int32_t_defined
-#define __u_int32_t_defined
-typedef __uint32_t u_int32_t;
-#endif
-#ifndef __u_int64_t_defined
-#define __u_int64_t_defined
-typedef __uint64_t u_int64_t;
-#endif
-
-#ifndef __register_t_defined
-#define __register_t_defined
-typedef __int32_t register_t;
-#endif
-
-#ifndef __addr_t_defined
-#define __addr_t_defined
-typedef char *addr_t;
-#endif
-
-#ifndef __mode_t_defined
-#define __mode_t_defined
-typedef unsigned mode_t;
-#endif
-#endif /*__BIT_TYPES_DEFINED*/
-
-#if !defined(__INSIDE_CYGWIN__) || !defined(__cplusplus)
-
-typedef struct __pthread_t {char __dummy;} *pthread_t;
-typedef struct __pthread_mutex_t {char __dummy;} *pthread_mutex_t;
-
-typedef struct __pthread_key_t {char __dummy;} *pthread_key_t;
-typedef struct __pthread_attr_t {char __dummy;} *pthread_attr_t;
-typedef struct __pthread_mutexattr_t {char __dummy;} *pthread_mutexattr_t;
-typedef struct __pthread_condattr_t {char __dummy;} *pthread_condattr_t;
-typedef struct __pthread_cond_t {char __dummy;} *pthread_cond_t;
-
- /* These variables are not user alterable. This means you!. */
-typedef struct
-{
- pthread_mutex_t mutex;
- int state;
-}
-pthread_once_t;
-typedef struct __pthread_spinlock_t {char __dummy;} *pthread_spinlock_t;
-typedef struct __pthread_rwlock_t {char __dummy;} *pthread_rwlock_t;
-typedef struct __pthread_rwlockattr_t {char __dummy;} *pthread_rwlockattr_t;
-
-#else
-
-/* pthreads types */
-
-typedef class pthread *pthread_t;
-typedef class pthread_mutex *pthread_mutex_t;
-typedef class pthread_key *pthread_key_t;
-typedef class pthread_attr *pthread_attr_t;
-typedef class pthread_mutexattr *pthread_mutexattr_t;
-typedef class pthread_condattr *pthread_condattr_t;
-typedef class pthread_cond *pthread_cond_t;
-typedef class pthread_once pthread_once_t;
-typedef class pthread_spinlock *pthread_spinlock_t;
-typedef class pthread_rwlock *pthread_rwlock_t;
-typedef class pthread_rwlockattr *pthread_rwlockattr_t;
-
-/* semaphores types */
-typedef class semaphore *sem_t;
-#endif /* __INSIDE_CYGWIN__ */
-
-/* this header needs the dev_t typedef */
-#include <sys/sysmacros.h>
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _CYGWIN_TYPES_H */
diff --git a/winsup/cygwin/include/cygwin/utmp.h b/winsup/cygwin/include/cygwin/utmp.h
deleted file mode 100644
index 56a137ffe..000000000
--- a/winsup/cygwin/include/cygwin/utmp.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/* cygwin/utmp.h
-
- Copyright 2004 Red Hat, Inc.
-
- This software is a copyrighted work licensed under the terms of the
- Cygwin license. Please consult the file "CYGWIN_LICENSE" for
- details. */
-
-#ifndef CYGWIN_UTMP_H
-#define CYGWIN_UTMP_H
-
-#include <sys/types.h>
-#include <time.h>
-#include <paths.h>
-
-#define WTMP_FILE _PATH_WTMP
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define UT_LINESIZE 16
-#define UT_NAMESIZE 16
-#define UT_HOSTSIZE 256
-#define UT_IDLEN 2
-
-#define RUN_LVL 1
-#define BOOT_TIME 2
-#define NEW_TIME 3
-#define OLD_TIME 4
-
-#define INIT_PROCESS 5
-#define LOGIN_PROCESS 6
-#define USER_PROCESS 7
-#define DEAD_PROCESS 8
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* CYGWIN_UTMP_H */
diff --git a/winsup/cygwin/include/cygwin/version.h b/winsup/cygwin/include/cygwin/version.h
deleted file mode 100644
index 9062e42fd..000000000
--- a/winsup/cygwin/include/cygwin/version.h
+++ /dev/null
@@ -1,541 +0,0 @@
-/* version.h -- Cygwin version numbers and accompanying documentation.
-
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-/* Cygwin versioning is relatively complicated because of its status
- as a shared library. Let's start with how versioning used to be done.
-
- Historical versioning in Cygwin 16.0 to 19.5:
-
- In the olden days of Cygwin, we had a dll major and minor version
- and a registry version. The major number started at 16 because the
- "b15" GNU-Win32 release of the compiler tools was out when this
- scheme was started. We incremented the DLL name frequently (for
- every official release) and towards the end of this period every
- release used a different shared memory area to prevent DLLs from
- interfering with each other (embedding a build timestamp into the
- name of the shared memory area). This turned out to be a Bad Idea
- (tm) because people needed to mingle separate releases and have
- them work together more than we thought they would. This was
- especially problematic when tty info needed to be retained when an
- old Cygwin executable executed a newer one.
-
- In the old scheme, we incremented the major number whenever a
- change to the dll invalidated existing executables. This can
- happen for a number of reasons, including when functions are
- removed from the export list of the dll. The minor number was
- incremented when a change was made that we wanted to record, but
- that didn't invalidate existing executables. Both numbers were
- recorded in the executable and in the dll.
-
- In October 1998 (starting with Cygwin 19.6), we started a new method
- of Cygwin versioning: */
-
- /* The DLL major and minor numbers correspond to the "version of
- the Cygwin shared library". This version is used to track important
- changes to the DLL and is mainly informative in nature. */
-
-#define CYGWIN_VERSION_DLL_MAJOR 1007
-#define CYGWIN_VERSION_DLL_MINOR 34
-
- /* Major numbers before CYGWIN_VERSION_DLL_EPOCH are
- incompatible. */
-
-#define CYGWIN_VERSION_DLL_EPOCH 19
-
- /* CYGWIN_VERSION_DLL_COMBINED gives us a single number
- representing the combined DLL major and minor numbers. */
-
- /* WATCH OUT FOR OCTAL! Don't use, say, "00020" for 0.20 */
-
-#define CYGWIN_VERSION_DLL_MAKE_COMBINED(maj, min) (((maj) * 1000) + min)
-#define CYGWIN_VERSION_DLL_COMBINED \
- CYGWIN_VERSION_DLL_MAKE_COMBINED (CYGWIN_VERSION_DLL_MAJOR, CYGWIN_VERSION_DLL_MINOR)
-
- /* Every version of cygwin <= this uses an old, incorrect method
- to determine signal masks. */
-
-#define CYGWIN_VERSION_PER_PROCESS_API_VERSION_COMBINED(u) \
- CYGWIN_VERSION_DLL_MAKE_COMBINED ((u)->api_major, (u)->api_minor)
-
-#define CYGWIN_VERSION_USER_API_VERSION_COMBINED \
- CYGWIN_VERSION_PER_PROCESS_API_VERSION_COMBINED (user_data)
-
- /* API versions <= this had a termios structure whose members were
- too small to accomodate modern settings. */
-#define CYGWIN_VERSION_DLL_OLD_TERMIOS 5
-#define CYGWIN_VERSION_DLL_IS_OLD_TERMIOS \
- (CYGWIN_VERSION_USER_API_VERSION_COMBINED <= CYGWIN_VERSION_DLL_OLD_TERMIOS)
-
-#define CYGWIN_VERSION_DLL_MALLOC_ENV 28
- /* Old APIs had getc/putc macros that conflict with new CR/LF
- handling in the stdio buffers */
-#define CYGWIN_VERSION_OLD_STDIO_CRLF_HANDLING \
- (CYGWIN_VERSION_USER_API_VERSION_COMBINED <= 20)
-
-#define CYGWIN_VERSION_CHECK_FOR_S_IEXEC \
- (CYGWIN_VERSION_USER_API_VERSION_COMBINED >= 36)
-
-#define CYGWIN_VERSION_CHECK_FOR_OLD_O_NONBLOCK \
- (CYGWIN_VERSION_USER_API_VERSION_COMBINED <= 28)
-
-#define CYGWIN_VERSION_CHECK_FOR_USING_BIG_TYPES \
- (CYGWIN_VERSION_USER_API_VERSION_COMBINED >= 79)
-
-#define CYGWIN_VERSION_CHECK_FOR_USING_ANCIENT_MSGHDR \
- (CYGWIN_VERSION_USER_API_VERSION_COMBINED <= 138)
-
-#define CYGWIN_VERSION_CHECK_FOR_USING_WINSOCK1_VALUES \
- (CYGWIN_VERSION_USER_API_VERSION_COMBINED <= 138)
-
-#define CYGWIN_VERSION_CHECK_FOR_OLD_IFREQ \
- (CYGWIN_VERSION_USER_API_VERSION_COMBINED <= 161)
-
-#define CYGWIN_VERSION_CHECK_FOR_OLD_CTYPE \
- (CYGWIN_VERSION_USER_API_VERSION_COMBINED <= 209)
-
-#define CYGWIN_VERSION_USE_PSEUDO_RELOC_IN_DLL(u) \
- (CYGWIN_VERSION_PER_PROCESS_API_VERSION_COMBINED (u) >= 227)
-
-#define CYGWIN_VERSION_CHECK_FOR_EXTRA_TM_MEMBERS \
- (CYGWIN_VERSION_USER_API_VERSION_COMBINED >= 272)
-
-#define CYGWIN_VERSION_CYGWIN_CONV 181
-
- /* API_MAJOR 0.0: Initial version. API_MINOR changes:
- 1: Export cygwin32_ calls as cygwin_ as well.
- 2: Export j1, jn, y1, yn.
- 3: Export dll_noncygwin_dllcrt0.
- 4: New socket ioctls, revamped ifconf support.
- 5: Thread support/exports.
- 6: Change in termios handling.
- 7: Export scandir and alphasort.
- 8: Export _ctype_, _sys_errlist, _sys_nerr.
- 9: Mount-related changes, new cygwin_umount export.
- Raw device support (tape, floppies).
- 10: Fast math routine support added.
- 11: Export seekdir, telldir.
- 12: Export pthread_join, pthread_detach.
- 13: Export math funcs gamma and friends, also _j0, _j1, etc.
- 14: Export snprintf and vnsprintf.
- 15: Export glob
- 16: Export cygwin_stackdump
- 17: Export fast math stuff
- 18: Stop exporting _strace_wm
- 19: Export fchown, lchown, lacl
- 20: regsub, inet_network
- 21: incompatible change to stdio cr/lf and buffering
- 22: Export cygwin_logon_user, cygwin_set_impersonation_token.
- geteuid, getegid return effective uid/gid.
- getuid, getgid return real uid/gid.
- seteuid, setegid set only effective uid/gid.
- setuid, setgid set effective and real uid/gid.
- 23: Export new dll_crt0 interface and cygwin_user_data for use
- with crt0 startup code.
- 24: Export poll and _poll.
- 25: Export getmode and _getmode.
- 26: CW_GET_CYGDRIVE_PREFIXES addition to external.cc
- 27: CW_GETPINFO_FULL addition to external.cc
- 28: Accidentally bumped by cgf
- 29: Export hstrerror
- 30: CW_GET_CYGDRIVE_INFO addition to external.cc
- 31: Export inet_aton
- 32: Export getrlimit/setrlimit
- 33: Export setlogmask
- 34: Separated out mount table
- 35: Export drand48, erand48, jrand48, lcong48, lrand48,
- mrand48, nrand48, seed48, and srand48.
- 36: Added _cygwin_S_IEXEC, et al
- 37: [f]pathconv support _PC_POSIX_PERMISSIONS and _PC_POSIX_SECURITY
- 38: vscanf, vscanf_r, and random pthread functions
- 39: asctime_r, ctime_r, gmtime_r, localtime_r
- 40: fchdir
- 41: __signgam
- 42: sys_errlist, sys_nerr
- 43: sigsetjmp, siglongjmp fixed
- 44: Export dirfd
- 45: perprocess change, gamma_r, gammaf_r, lgamma_r, lgammaf_r
- 46: Remove cygwin_getshared
- 47: Report EOTWarningZoneSize in struct mtget.
- 48: Export "posix" regex functions
- 49: Export setutent, endutent, utmpname, getutent, getutid, getutline.
- 50: Export fnmatch.
- 51: Export recvmsg, sendmsg.
- 52: Export strptime
- 53: Export strlcat, strlcpy.
- 54: Export __fpclassifyd, __fpclassifyf, __signbitd, __signbitf.
- 55: Export fcloseall, fcloseall_r.
- 56: Make ntsec on by default.
- 57: Export setgroups.
- 58: Export memalign, valloc, malloc_trim, malloc_usable_size, mallopt,
- malloc_stats
- 59: getsid
- 60: MSG_NOSIGNAL
- 61: Export getc_unlocked, getchar_unlocked, putc_unlocked,
- putchar_unlocked
- 62: Erroneously bumped
- 63: Export pututline
- 64: Export fseeko, ftello
- 65: Export siginterrupt
- 66: Export nl_langinfo
- 67: Export pthread_getsequence_np
- 68: Export netdb stuff
- 69: Export strtof
- 70: Export asprintf, _asprintf_r, vasprintf, _vasprintf_r
- 71: Export strerror_r
- 72: Export nanosleep
- 73: Export setreuid32, setreuid, setregid32, setregid
- 74: Export _strtold a64l hcreate hcreate_r hdestroy hdestroy_r hsearch
- hsearch_r isblank iswalnum iswalpha iswblank iswcntrl iswctype
- iswdigit iswgraph iswlower iswprint iswpunct iswspace iswupper
- iswxdigit l64a mbrlen mbrtowc mbsinit mbsrtowcs mempcpy
- on_exit setbuffer setlinebuf strndup strnlen tdelete tdestroy
- tfind towctrans towlower towupper tsearch twalk wcrtomb wcscat
- wcschr wcscpy wcscspn wcslcat wcslcpy wcsncat wcsncmp wcsncpy
- wcspbrk wcsrchr wcsrtombs wcsspn wcsstr wctob wctob wctrans
- wctype wmemchr wmemcmp wmemcpy wmemmove wmemset
- 75: Export exp2 exp2f fdim fdimf fma fmaf fmax fmaxf fmin fminf lrint
- lrintf lround lroundf nearbyint nearbyintf remquo remquof
- round roundf scalbln scalblnf sincos sincosf tgamma tgammaf
- truncf
- 76: mallinfo
- 77: thread-safe exit/at_exit
- 78: Use stat and fstat rather than _stat, and _fstat.
- Export btowc and trunc.
- 79: Export acl32 aclcheck32 aclfrommode32 aclfrompbits32 aclfromtext32
- aclsort32 acltomode32 acltopbits32 acltotext32 facl32
- fgetpos64 fopen64 freopen64 fseeko64 fsetpos64 ftello64
- _open64 _lseek64 _fstat64 _stat64 mknod32
- 80: Export pthread_rwlock stuff
- 81: CW_CHECK_NTSEC addition to external.cc
- 82: Export wcscoll wcswidth wcwidth
- 83: Export gethostid
- 84: Pty open allocates invisible console. 64 bit interface
- 85: Export new 32/64 functions from API 0.79 only with leading
- underscore. No problems with backward compatibility since no
- official release has been made so far. This change removes
- exported symbols like fopen64, which might confuse configure.
- 86: Export ftok
- 87: Export vsyslog
- 88: Export _getreent
- 89: Export __mempcpy
- 90: Export _fopen64
- 91: Export argz_add argz_add_sep argz_append argz_count argz_create
- argz_create_sep argz_delete argz_extract argz_insert
- argz_next argz_replace argz_stringify envz_add envz_entry
- envz_get envz_merge envz_remove envz_strip
- 92: Export getusershell, setusershell, endusershell
- 93: Export daemon, forkpty, openpty, iruserok, ruserok, login_tty,
- openpty, forkpty, revoke, logwtmp, updwtmp
- 94: Export getopt, getopt_long, optarg, opterr, optind, optopt,
- optreset, __check_rhosts_file, __rcmd_errstr.
- 95: Export shmat, shmctl, shmdt, shmget.
- 96: CW_GET_ERRNO_FROM_WINERROR addition to external.cc
- 97: Export sem_open, sem_close, sem_timedwait, sem_getvalue.
- 98: Export _tmpfile64.
- 99: CW_GET_POSIX_SECURITY_ATTRIBUTE addition to external.cc.
- 100: CW_GET_SHMLBA addition to external.cc.
- 101: Export err, errx, verr, verrx, warn, warnx, vwarn, vwarnx.
- 102: CW_GET_UID_FROM_SID and CW_GET_GID_FROM_SID addition to external.cc.
- 103: Export getprogname, setprogname.
- 104: Export msgctl, msgget, msgrcv, msgsnd, semctl, semget, semop.
- 105: Export sigwait.
- 106: Export flock.
- 107: Export fcntl64.
- 108: Remove unused (hopefully) reent_data export.
- 109: Oh well. Someone uses reent_data.
- 110: Export clock_gettime, sigwaitinfo, timer_create, timer_delete,
- timer_settime
- 111: Export sigqueue, sighold.
- 112: Redefine some mtget fields.
- 113: Again redefine some mtget fields. Use mt_fileno and mt_blkno as
- on Linux.
- 114: Export rand_r, ttyname_r.
- 115: Export flockfile, ftrylockfile, funlockfile, getgrgid_r, getgrnam_r,
- getlogin_r.
- 116: Export atoll.
- 117: Export utmpx functions, Return utmp * from pututent.
- 118: Export getpriority, setpriority.
- 119: Export fdatasync.
- 120: Export basename, dirname.
- 122: Export statvfs, fstatvfs.
- 123: Export utmpxname.
- 124: Add MAP_AUTOGROW flag to mmap.
- 125: LD_PRELOAD/CW_HOOK available.
- 126: Export lsearch, lfind, timer_gettime.
- 127: Export sigrelese.
- 128: Export pselect.
- 129: Export mkdtemp.
- 130: Export strtoimax, strtoumax, llabs, imaxabs, lldiv, imaxdiv.
- 131: Export inet_ntop, inet_pton.
- 132: Add GLOB_LIMIT flag to glob.
- 133: Export __getline, __getdelim.
- 134: Export getline, getdelim.
- 135: Export pread, pwrite
- 136: Add TIOCMBIS/TIOCMBIC ioctl codes.
- 137: fts_children, fts_close, fts_get_clientptr, fts_get_stream,
- fts_open, fts_read, fts_set, fts_set_clientptr, ftw, nftw.
- 138: Export readdir_r.
- 139: Start using POSIX definition of struct msghdr and WinSock2
- IPPROTO_IP values.
- 140: Export mlock, munlock.
- 141: Export futimes, lutimes.
- 142: Export memmem
- 143: Export clock_getres, clock_setres
- 144: Export timelocal, timegm.
- 145: Add MAP_NORESERVE flag to mmap.
- 146: Change SI_USER definition. FIXME: Need to develop compatibility
- macro for this?
- 147: Eliminate problematic d_ino from dirent structure. unsetenv now
- returns int, as per linux.
- 148: Add open(2) flags O_SYNC, O_RSYNC, O_DSYNC and O_DIRECT.
- 149: Add open(2) flag O_NOFOLLOW.
- 150: Export getsubopt.
- 151: Export __opendir_with_d_ino
- 152: Revert to having d_ino in dirent unconditionally.
- 153: Export updwtmpx, Implement CW_SETUP_WINENV.
- 154: Export sigset, sigignore.
- 155: Export __isinff, __isinfd, __isnanf, __isnand.
- 156: Export __srbuf_r, __swget_r.
- 157: Export gai_strerror, getaddrinfo, getnameinfo, freeaddrinfo,
- in6addr_any, in6addr_loopback.
- 158: Export bindresvport, bindresvport_sa, iruserok_sa, rcmd_af,
- rresvport_af.
- 159: Export posix_openpt.
- 160: Export posix_fadvise, posix_fallocate.
- 161: Export resolver functions.
- 162: New struct ifreq. Export if_nametoindex, if_indextoname,
- if_nameindex, if_freenameindex.
- 163: Export posix_madvise, posix_memalign.
- 164: Export shm_open, shm_unlink.
- 165: Export mq_close, mq_getattr, mq_notify, mq_open, mq_receive,
- mq_send, mq_setattr, mq_timedreceive, mq_timedsend, mq_unlink.
- 166: Export sem_unlink.
- 167: Add st_birthtim to struct stat.
- 168: Export asnprintf, dprintf, _Exit, vasnprintf, vdprintf.
- 169: Export confstr.
- 170: Export insque, remque.
- 171: Export exp10, exp10f, pow10, pow10f, strcasestr, funopen,
- fopencookie.
- 172: Export getifaddrs, freeifaddrs.
- 173: Export __assert_func.
- 174: Export stpcpy, stpncpy.
- 175: Export fdopendir.
- 176: Export wcstol, wcstoll, wcstoul, wcstoull, wcsxfrm.
- 177: Export sys_sigabbrev
- 178: Export wcpcpy, wcpncpy.
- 179: Export _f_llrint, _f_llrintf, _f_llrintl, _f_lrint, _f_lrintf,
- _f_lrintl, _f_rint, _f_rintf, _f_rintl, llrint, llrintf, llrintl,
- rintl, lrintl, and redirect exports of lrint, lrintf, rint, rintf.
- 180: Export getxattr, lgetxattr, fgetxattr, listxattr, llistxattr,
- flistxattr, setxattr, lsetxattr, fsetxattr, removexattr,
- lremovexattr, fremovexattr.
- 181: Export cygwin_conv_path, cygwin_create_path, cygwin_conv_path_list.
- 182: Export lockf.
- FIXME: Removed 12 year old and entirely wrong wprintf function at
- this point. We need a working implementation soon.
- 183: Export open_memstream, fmemopen.
- 184: Export openat, faccessat, fchmodat, fchownat, fstatat, futimesat,
- linkat, mkdirat, mkfifoat, mknodat, readlinkat, renameat, symlinkat,
- unlinkat.
- 185: Export futimens, utimensat.
- 186: Remove ancient V8 regexp functions. Also eliminate old crt0 interface
- which provided its own user_data structure.
- 187: Export cfmakeraw.
- 188: Export CW_SET_PRIV_KEY.
- 189: Implement dirent.d_type.
- 190: Export fgetwc, fgetws, fputwc, fputws, fwide, getwc, getwchar,
- putwc, putwchar, ungetwc.
- 191: Export glob_pattern_p
- 192: CW_SETERRNO added
- 193: Export wcstok.
- 194: fcntl.h flags O_DIRECTORY, O_EXEC and O_SEARCH added.
- 195: Export wcstod, wcstof.
- 196: Export wcsnlen.
- 197: Export wcstoimax, wcstoumax.
- 198: Export reallocf.
- 199: Export open_wmemstream.
- 200: Export mbsnrtowcs, wcsnrtombs.
- 201: Export wprintf, fwprintf, swprintf, vwprintf, vfwprintf, vswprintf.
- 202: Export gethostbyname2.
- 203: Export wcsftime.
- 204: recv/send flag MSG_DONTWAIT added.
- 205: Export wscanf, fwscanf, swscanf, vwscanf, vfwscanf, vswscanf.
- 206: Export wcscasecmp, wcsncasecmp.
- 207: Export wcsdup.
- 208: Export log2, log2f.
- 209: Export wordexp, wordfree.
- 210: New ctype layout using variable ctype pointer. Export __ctype_ptr__.
- 211: Export fpurge, mkstemps.
- 212: Add and export libstdc++ malloc wrappers.
- 213: Export canonicalize_file_name, eaccess, euidaccess.
- 214: Export execvpe, fexecve.
- 215: CW_EXIT_PROCESS added.
- 216: CW_SET_EXTERNAL_TOKEN added.
- 217: CW_GET_INSTKEY added.
- 218: Export get_nprocs, get_nprocs_conf, get_phys_pages, get_avphys_pages.
- 219: Export dup3, pipe2, O_CLOEXEC, F_DUPFD_CLOEXEC.
- 220: Export accept4, SOCK_CLOEXEC, SOCK_NONBLOCK.
- 221: Export strfmon.
- 222: CW_INT_SETLOCALE added.
- 223: SIGPWR added.
- 224: Export xdr* functions.
- 225: Export __xdr* functions.
- 226: Export __locale_mb_cur_max.
- 227: Add pseudo_reloc_start, pseudo_reloc_end, image_base to per_process.
- 228: CW_STRERROR added.
- 229: Add mkostemp, mkostemps.
- 230: Add CLOCK_MONOTONIC.
- 231: Add fenv.h functions.
- 232: Export cacos, cacosf, cacosh, cacoshf, carg, cargf, casin, casinf,
- casinh, casinhf, catan, catanf, catanh, catanhf, ccos, ccosf, ccosh,
- ccoshf, cexp, cexpf, cimag, cimagf, clog, clogf, conj, conjf, cpow,
- cpowf, cproj, cprojf, creal, crealf, csin, csinf, csinh, csinhf,
- csqrt, csqrtf, ctan, ctanf, ctanh, ctanhf.
- 233: Add TIOCGPGRP, TIOCSPGRP. Export llround, llroundf.
- 234: Export program_invocation_name, program_invocation_short_name.
- 235: Export madvise.
- 236: Export pthread_yield, __xpg_strerror_r.
- 237: Export strchrnul.
- 238: Export pthread_spin_destroy, pthread_spin_init, pthread_spin_lock,
- pthread_spin_trylock, pthread_spin_unlock.
- 239: Export pthread_setschedprio.
- 240: Export ppoll.
- 241: Export pthread_attr_getstack, pthread_attr_getstackaddr,
- pthread_getattr_np.
- 242: Export psiginfo, psignal, sys_siglist.
- 243: Export sysinfo.
- 244: Export clock_settime.
- 245: Export pthread_attr_getguardsize, pthread_attr_setguardsize,
- pthread_attr_setstack, pthread_attr_setstackaddr.
- 246: Add CLOCK_PROCESS_CPUTIME_ID, CLOCK_THREAD_CPUTIME_ID.
- Export clock_getcpuclockid, pthread_getcpuclockid.
- 247: Export error, error_at_line, error_message_count, error_one_per_line,
- error_print_progname.
- 248: Export __fpurge.
- 249: Export pthread_condattr_getclock, pthread_condattr_setclock.
- 250: Export clock_nanosleep.
- 251: RTLD_NODELETE, RTLD_NOLOAD, RTLD_DEEPBIND added.
- 252: CW_CVT_ENV_TO_WINENV added.
- 253: Export TIOCSCTTY, tcgetsid.
- 254: Export getgrouplist.
- 255: Export ptsname_r.
- 256: Add CW_ALLOC_DRIVE_MAP, CW_MAP_DRIVE_MAP, CW_FREE_DRIVE_MAP.
- 257: Export getpt.
- 258: Export get_current_dir_name.
- 259: Export pthread_sigqueue.
- 260: Export scandirat.
- 261: Export memrchr.
- 262: Export getmntent_r.
- 263: Export cfsetspeed.
- 264: Consistently export strtold
- 265: Export __b64_ntop, __b64_pton.
- 266: Export arc4random, arc4random_addrandom, arc4random_buf,
- arc4random_stir, arc4random_uniform.
- 267: Export rawmemchr.
- 268: Export GetCommandLineA, GetCommandLineW
- 269: Allow application override of posix_memalign.
- 270: Redefine mtget.mt_resid field to contain current partition as well
- as number of partitions on tape.
- 271: Export posix_spawn, posix_spawnp, and helper functions.
- 272: Export tm_gmtoff and tm_zone members.
- 273: Skipped.
- 274: Export __cxa_atexit and __cxa_finalize.
- 275: Introduce account mapping from Windows account DBs. Add CW_SETENT,
- CW_GETENT, CW_ENDENT, CW_GETNSSSEP, CW_GETPWSID, CW_GETGRSID,
- CW_CYGNAME_FROM_WINNAME.
- 276: Export ffsl, ffsll.
- 277: Add setsockopt(SO_PEERCRED).
- 278: Add quotactl.
- 279: Export stime.
- 280: Static atexit in libcygwin.a, CW_FIXED_ATEXIT.
- 281: Add CW_GETNSS_PWD_SRC, CW_GETNSS_GRP_SRC.
- 282: Export __bsd_qsort_r, qsort_r.
- 283: Export __fbufsize, __flbf, __fpending, __freadable, __freading,
- __fsetlocking, __fwritable, __fwriting. clearerr_unlocked,
- feof_unlocked, ferror_unlocked, fflush_unlocked, fgetc_unlocked,
- fgets_unlocked, fgetwc_unlocked, fgetws_unlocked, fileno_unlocked,
- fputc_unlocked, fputs_unlocked, fputwc_unlocked, fputws_unlocked,
- fread_unlocked, fwrite_unlocked, getwc_unlocked, getwchar_unlocked,
- putwc_unlocked, putwchar_unlocked.
- */
-
- /* Note that we forgot to bump the api for ualarm, strtoll, strtoull */
-
-#define CYGWIN_VERSION_API_MAJOR 0
-#define CYGWIN_VERSION_API_MINOR 283
-
- /* There is also a compatibity version number associated with the
- shared memory regions. It is incremented when incompatible
- changes are made to the shared memory region *or* to any named
- shared mutexes, semaphores, etc. The arbitrary starting
- version was 0 (cygwin release 98r2).
- Bump to 4 since this hasn't been rigorously updated in a
- while. */
-
-#define CYGWIN_VERSION_SHARED_DATA 5
-
- /* An identifier used in the names used to create shared objects.
- The full names include the CYGWIN_VERSION_SHARED_DATA version
- as well as this identifier. */
-
-#define CYGWIN_VERSION_DLL_IDENTIFIER "cygwin1"
-
- /* The Cygwin mount table interface in the Win32 registry also
- has a version number associated with it in case that is
- changed in a non-backwards compatible fashion. Increment this
- version number whenever incompatible changes in mount table
- registry usage are made.
-
- 1: Original number version.
- 2: New mount registry layout, system-wide mount accessibility.
- 3: The mount table is not in the registry anymore, but in /etc/fstab.
- */
-
-#define CYGWIN_VERSION_MOUNT_REGISTRY 3
-
- /* Identifiers used in the Win32 registry. */
-
-#define CYGWIN_INFO_CYGWIN_REGISTRY_NAME "Cygwin"
-#define CYGWIN_INFO_INSTALLATIONS_NAME "Installations"
-
- /* The default cygdrive prefix. */
-
-#define CYGWIN_INFO_CYGDRIVE_DEFAULT_PREFIX "/cygdrive"
-
- /* In addition to the above version number strings, the build
- process adds some strings that may be useful in
- debugging/identifying a particular Cygwin DLL:
-
- The mkvers.sh script at the top level produces a .cc file
- which initializes a cygwin_version structure based on the
- above version information and creates a string table for
- grepping via "fgrep '%%%' cygwinwhatever.dll" if you are
- using GNU grep. Otherwise you may want to do a
- "strings cygwinwhatever.dll | fgrep '%%%'" instead.
-
- This will produce output such as:
-
- %%% Cygwin dll_identifier: cygwin
- %%% Cygwin api_major: 0
- %%% Cygwin api_minor: 0
- %%% Cygwin dll_major: 19
- %%% Cygwin dll_minor: 6
- %%% Cygwin shared_data: 1
- %%% Cygwin registry: b15
- %%% Cygwin build date: Wed Oct 14 16:26:51 EDT 1998
- %%% Cygwin shared id: cygwinS1
-
- This information can also be obtained through a call to
- cygwin_internal (CW_GETVERSIONINFO).
- */
-
-#define CYGWIN_VERSION_MAGIC(a, b) ((unsigned) ((((unsigned short) a) << 16) | (unsigned short) b))
-#define CYGWIN_VERSION_MAGIC_VERSION(a) ((unsigned) ((unsigned)a & 0xffff))
diff --git a/winsup/cygwin/include/cygwin/wait.h b/winsup/cygwin/include/cygwin/wait.h
deleted file mode 100644
index 08649f8a2..000000000
--- a/winsup/cygwin/include/cygwin/wait.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/* cygwin/wait.h
-
- Copyright 2006, 2009, 2011, 2012 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _CYGWIN_WAIT_H
-#define _CYGWIN_WAIT_H
-
-#define WAIT_ANY (pid_t)-1
-#define WAIT_MYPGRP (pid_t)0
-
-#define WNOHANG 1
-#define WUNTRACED 2
-#define WCONTINUED 8
-#define __W_CONTINUED 0xffff
-
-/* Will be redefined in sys/wait.h. */
-#define __wait_status_to_int(w) (w)
-
-/* A status is 16 bits, and looks like:
- <1 byte info> <1 byte code>
-
- <code> == 0, child has exited, info is the exit value
- <code> == 1..7e, child has exited, info is the signal number.
- <code> == 7f, child has stopped, info was the signal number.
- <code> == 80, there was a core dump.
-*/
-
-#define WIFEXITED(w) ((__wait_status_to_int(w) & 0xff) == 0)
-#define WIFSIGNALED(w) ((__wait_status_to_int(w) & 0x7f) > 0 \
- && ((__wait_status_to_int(w) & 0x7f) < 0x7f))
-#define WIFSTOPPED(w) ((__wait_status_to_int(w) & 0xff) == 0x7f)
-#define WIFCONTINUED(w) ((__wait_status_to_int(w) & 0xffff) == __W_CONTINUED)
-#define WEXITSTATUS(w) ((__wait_status_to_int(w) >> 8) & 0xff)
-#define WTERMSIG(w) (__wait_status_to_int(w) & 0x7f)
-#define WSTOPSIG WEXITSTATUS
-#define WCOREDUMP(w) (WIFSIGNALED(w) && (__wait_status_to_int(w) & 0x80))
-
-#endif /* _CYGWIN_WAIT_H */
diff --git a/winsup/cygwin/include/dlfcn.h b/winsup/cygwin/include/dlfcn.h
deleted file mode 100644
index 37fb3df9b..000000000
--- a/winsup/cygwin/include/dlfcn.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/* dlfcn.h
-
- Copyright 1998, 1999, 2000, 2001, 2004, 2010, 2011 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _DLFCN_H
-#define _DLFCN_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* declarations used for dynamic linking support routines */
-extern void *dlopen (const char *, int);
-extern void *dlsym (void *, const char *);
-extern int dlclose (void *);
-extern char *dlerror (void);
-
-/* specific to CYGWIN */
-#define FORK_RELOAD 1
-#define FORK_NO_RELOAD 0
-
-extern void dlfork (int);
-
-/* following doesn't exist in Win32 API .... */
-#define RTLD_DEFAULT NULL
-
-/* valid values for mode argument to dlopen */
-#define RTLD_LOCAL 0 /* Symbols in this dlopen'ed obj are not */
- /* visible to other dlopen'ed objs. */
-#define RTLD_LAZY 1 /* Lazy function call binding. */
-#define RTLD_NOW 2 /* Immediate function call binding. */
-#define RTLD_GLOBAL 4 /* Symbols in this dlopen'ed obj are visible */
- /* to other dlopen'ed objs. */
-/* Non-standard GLIBC extensions */
-#define RTLD_NODELETE 8 /* Don't unload lib in dlcose. */
-#define RTLD_NOLOAD 16 /* Don't load lib, just return handle if lib */
- /* is already loaded, NULL otherwise. */
-#define RTLD_DEEPBIND 32 /* Place lookup scope so that this lib is */
- /* preferred over global scope. */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _DLFCN_H */
diff --git a/winsup/cygwin/include/elf.h b/winsup/cygwin/include/elf.h
deleted file mode 100644
index c094a1c78..000000000
--- a/winsup/cygwin/include/elf.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*-
- * Copyright (c) 2001 David E. O'Brien.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD$
- */
-
-/*
- * This is a Solaris compatibility header
- */
-
-#ifndef _ELF_H_
-#define _ELF_H_
-
-#include <sys/types.h>
-#include <machine/elf.h>
-#include <sys/elf32.h>
-#include <sys/elf64.h>
-
-#endif /* !_ELF_H_ */
diff --git a/winsup/cygwin/include/endian.h b/winsup/cygwin/include/endian.h
deleted file mode 100644
index d59d2c89b..000000000
--- a/winsup/cygwin/include/endian.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/* endian.h
-
- Copyright 2005, 2010, 2011 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _ENDIAN_H_
-#define _ENDIAN_H_
-
-#include <sys/config.h>
-#include <bits/endian.h>
-
-/*#ifdef __USE_BSD*/
-# define LITTLE_ENDIAN __LITTLE_ENDIAN
-# define BIG_ENDIAN __BIG_ENDIAN
-# define PDP_ENDIAN __PDP_ENDIAN
-# define BYTE_ORDER __BYTE_ORDER
-/*#endif*/
-
-#if __BYTE_ORDER == __LITTLE_ENDIAN
-# define __LONG_LONG_PAIR(HI, LO) LO, HI
-#elif __BYTE_ORDER == __BIG_ENDIAN
-# define __LONG_LONG_PAIR(HI, LO) HI, LO
-#endif
-
-#if /*defined __USE_BSD ||*/ ! defined _POSIX_SOURCE
-
-#include <byteswap.h>
-
-#if __BYTE_ORDER == __LITTLE_ENDIAN
-
-#define htobe16(x) bswap_16(x)
-#define htobe32(x) bswap_32(x)
-#define htobe64(x) bswap_64(x)
-
-#define be16toh(x) bswap_16(x)
-#define be32toh(x) bswap_32(x)
-#define be64toh(x) bswap_64(x)
-
-#define htole16(x) (x)
-#define htole32(x) (x)
-#define htole64(x) (x)
-
-#define le16toh(x) (x)
-#define le32toh(x) (x)
-#define le64toh(x) (x)
-
-#endif /*__BYTE_ORDER == __LITTLE_ENDIAN*/
-
-#if __BYTE_ORDER == __BIG_ENDIAN
-
-#define htobe16(x) (x)
-#define htobe32(x) (x)
-#define htobe64(x) (x)
-
-#define be16toh(x) (x)
-#define be32toh(x) (x)
-#define be64toh(x) (x)
-
-#define htole16(x) bswap_16(x)
-#define htole32(x) bswap_32(x)
-#define htole64(x) bswap_64(x)
-
-#define le16toh(x) bswap_16(x)
-#define le32toh(x) bswap_32(x)
-#define le64toh(x) bswap_64(x)
-
-#endif /*__BYTE_ORDER == __BIG_ENDIAN*/
-
-#endif /*__USE_BSD || !_POSIX_SOURCE*/
-
-#endif /*_ENDIAN_H_*/
-
diff --git a/winsup/cygwin/include/err.h b/winsup/cygwin/include/err.h
deleted file mode 100644
index 4f3a3602a..000000000
--- a/winsup/cygwin/include/err.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/* err.h
-
- Copyright 2003, 2011 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _ERR_H
-#define _ERR_H
-
-#include <sys/cdefs.h>
-#include <stdarg.h>
-
-__BEGIN_DECLS
-
-extern void warn (const char *fmt, ...);
-extern void warnx (const char *fmt, ...);
-
-extern void err (int eval, const char *fmt, ...) __attribute__ ((__noreturn__));
-extern void errx (int eval, const char *fmt, ...) __attribute__ ((__noreturn__));
-
-extern void vwarn (const char *fmt, va_list ap);
-extern void vwarnx (const char *fmt, va_list ap);
-
-extern void verr (int eval, const char *fmt, va_list ap) __attribute__ ((__noreturn__));
-extern void verrx (int eval, const char *fmt, va_list ap) __attribute__ ((__noreturn__));
-
-__END_DECLS
-
-#endif /* _ERR_H */
diff --git a/winsup/cygwin/include/error.h b/winsup/cygwin/include/error.h
deleted file mode 100644
index c5ec62064..000000000
--- a/winsup/cygwin/include/error.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/* error.h: GNU error reporting functions
-
- Copyright 2011 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _ERROR_H
-#define _ERROR_H
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-void error (int, int, const char *, ...);
-void error_at_line (int, int, const char *, unsigned int, const char *, ...);
-
-#ifdef __INSIDE_CYGWIN__
-extern unsigned int error_message_count;
-extern int error_one_per_line;
-extern void (*error_print_progname) (void);
-#else
-extern __declspec(dllimport) unsigned int error_message_count;
-extern __declspec(dllimport) int error_one_per_line;
-extern __declspec(dllimport) void (*error_print_progname) (void);
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _ERROR_H */
diff --git a/winsup/cygwin/include/fcntl.h b/winsup/cygwin/include/fcntl.h
deleted file mode 100644
index d67ee48ac..000000000
--- a/winsup/cygwin/include/fcntl.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/* fcntl.h
-
- Copyright 1996, 1998, 2000, 2001, 2005, 2006, 2009, 2010, 2013,
- 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _FCNTL_H
-#define _FCNTL_H
-
-#include <sys/fcntl.h>
-#define O_NDELAY _FNDELAY
-
-/* F_LCK_MANDATORY: Request mandatory locks for this file descriptor.
-
- Cygwin extension to fcntl file locking mechanism. By default, fcntl file
- locks are advisory locks. This works nicely as long as only Cygwin
- processes interact. If you have the requirement to interact with native
- Windows applications which use Windows mandatory file locking, your have
- to use mandatory locking as well. The command
-
- fcntl (fd, F_LCK_MANDATORY, 1)
-
- switches subsequent F_GETLK, F_SETLK, F_SETLKW calls to mandatory locking
- for this file descriptor and subsequently duplicated ones WITHIN THE SAME
- PROCESS. Note that mandatory locks are NOT inherited by child processes,
- nor do they survive an execve call. This fully corresponds to Windows
- mandatory locking semantics. */
-#define F_LCK_MANDATORY 0x99
-
-/* POSIX-1.2008 requires this flag and allows to set it to 0 if its
- functionality is not required. */
-#define O_TTY_INIT 0
-
-#define POSIX_FADV_NORMAL 0
-#define POSIX_FADV_SEQUENTIAL 1
-#define POSIX_FADV_RANDOM 2
-#define POSIX_FADV_WILLNEED 3
-#define POSIX_FADV_DONTNEED 4
-#define POSIX_FADV_NOREUSE 5
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-extern int posix_fadvise _PARAMS ((int, off_t, off_t, int));
-extern int posix_fallocate _PARAMS ((int, off_t, off_t));
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _FCNTL_H */
diff --git a/winsup/cygwin/include/features.h b/winsup/cygwin/include/features.h
deleted file mode 100644
index ffeb4f843..000000000
--- a/winsup/cygwin/include/features.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/* features.h
-
- Copyright 2000, 2001, 2002, 2003, 2004, 2006, 2011 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _FEATURES_H
-#define _FEATURES_H
-
-#include <sys/cdefs.h>
-#include <sys/features.h>
-
-/* Various options should be defined here, but the framework to do this
- is not laid down so far. Especially notable are the following defines,
- which can be used by the application to switch on or off various
- datatypes and function prototypes:
-
- _BSD_SOURCE to include pure BSD functions which are not defined
- under POSIX.
-
- _POSIX_SOURCE if the application requests a POSIX compatible system.
-
- _XOPEN_SOURCE if X/Open functions and datatypes are requested. This
- option includes _POSIX_SOURCE.
-
- _GNU_SOURCE to turn on GNU extensions which might collide with defines
- used in application or library headers. This option
- includes _BSD_SOURCE, _XOPEN_SOURCE and _POSIX_SOURCE.
-*/
-
-#endif /* _FEATURES_H */
diff --git a/winsup/cygwin/include/fenv.h b/winsup/cygwin/include/fenv.h
deleted file mode 100755
index b49033f29..000000000
--- a/winsup/cygwin/include/fenv.h
+++ /dev/null
@@ -1,177 +0,0 @@
-/* fenv.h
-
- Copyright 2010, 2011 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _FENV_H_
-#define _FENV_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/* Primary sources:
-
- The Open Group Base Specifications Issue 6:
- http://www.opengroup.org/onlinepubs/000095399/basedefs/fenv.h.html
-
- C99 Language spec (draft n1256):
- <url unknown>
-
- Intel® 64 and IA-32 Architectures Software Developer’s Manuals:
- http://www.intel.com/products/processor/manuals/
-
- GNU C library manual pages:
- http://www.gnu.org/software/libc/manual/html_node/Control-Functions.html
- http://www.gnu.org/software/libc/manual/html_node/Rounding.html
- http://www.gnu.org/software/libc/manual/html_node/FP-Exceptions.html
- http://www.gnu.org/software/libc/manual/html_node/Status-bit-operations.html
-
- Linux online man page(s):
- http://linux.die.net/man/3/fegetexcept
-
- The documentation quotes these sources for reference. All definitions and
- code have been developed solely based on the information from these specs.
-
-*/
-
-/* Represents the entire floating-point environment. The floating-point
- environment refers collectively to any floating-point status flags and
- control modes supported by the implementation.
- In this implementation, the struct contains the state information from
- the fstenv/fnstenv instructions and a copy of the SSE MXCSR, since GCC
- uses SSE for a lot of floating-point operations. (Cygwin assumes i686
- or above these days, as does the compiler.) */
-
-typedef struct _fenv_t
-{
- struct _fpu_env_info {
- unsigned int _fpu_cw; /* low 16 bits only. */
- unsigned int _fpu_sw; /* low 16 bits only. */
- unsigned int _fpu_tagw; /* low 16 bits only. */
- unsigned int _fpu_ipoff;
- unsigned int _fpu_ipsel;
- unsigned int _fpu_opoff;
- unsigned int _fpu_opsel; /* low 16 bits only. */
- } _fpu;
- unsigned int _sse_mxcsr;
-} fenv_t;
-
-/* Represents the floating-point status flags collectively, including
- any status the implementation associates with the flags. A floating-point
- status flag is a system variable whose value is set (but never cleared)
- when a floating-point exception is raised, which occurs as a side effect
- of exceptional floating-point arithmetic to provide auxiliary information.
- A floating-point control mode is a system variable whose value may be
- set by the user to affect the subsequent behavior of floating-point
- arithmetic. */
-
-typedef struct _fexcept_t
-{
- unsigned short _fpu_exceptions;
- unsigned short _sse_exceptions;
-} fexcept_t;
-
-/* The <fenv.h> header shall define the following constants if and only
- if the implementation supports the floating-point exception by means
- of the floating-point functions feclearexcept(), fegetexceptflag(),
- feraiseexcept(), fesetexceptflag(), and fetestexcept(). Each expands to
- an integer constant expression with values such that bitwise-inclusive
- ORs of all combinations of the constants result in distinct values. */
-
-#define FE_DIVBYZERO (1 << 2)
-#define FE_INEXACT (1 << 5)
-#define FE_INVALID (1 << 0)
-#define FE_OVERFLOW (1 << 3)
-#define FE_UNDERFLOW (1 << 4)
-
-/* This is not defined by Posix, but since x87 supports it we provide
- a definition according to the same naming scheme used above. */
-#define FE_DENORMAL (1 << 1)
-
-/* The <fenv.h> header shall define the following constant, which is
- simply the bitwise-inclusive OR of all floating-point exception
- constants defined above: */
-
-#define FE_ALL_EXCEPT (FE_DIVBYZERO | FE_INEXACT | FE_INVALID \
- | FE_OVERFLOW | FE_UNDERFLOW | FE_DENORMAL)
-
-/* The <fenv.h> header shall define the following constants if and only
- if the implementation supports getting and setting the represented
- rounding direction by means of the fegetround() and fesetround()
- functions. Each expands to an integer constant expression whose values
- are distinct non-negative vales. */
-
-#define FE_DOWNWARD (1)
-#define FE_TONEAREST (0)
-#define FE_TOWARDZERO (3)
-#define FE_UPWARD (2)
-
-/* Precision bit values. Not defined by Posix, but follow logically. */
-#define FE_SINGLEPREC (0)
-#define FE_RESERVEDPREC (1)
-#define FE_DOUBLEPREC (2)
-#define FE_EXTENDEDPREC (3)
-
-/* The <fenv.h> header shall define the following constant, which
- represents the default floating-point environment (that is, the one
- installed at program startup) and has type pointer to const-qualified
- fenv_t. It can be used as an argument to the functions within the
- <fenv.h> header that manage the floating-point environment. */
-
-extern const fenv_t *_fe_dfl_env;
-#define FE_DFL_ENV (_fe_dfl_env)
-
-/* Additional implementation-defined environments, with macro
- definitions beginning with FE_ and an uppercase letter,and having
- type "pointer to const-qualified fenv_t",may also be specified by
- the implementation. */
-
-#ifdef _GNU_SOURCE
-/* If possible, the GNU C Library defines a macro FE_NOMASK_ENV which
- represents an environment where every exception raised causes a trap
- to occur. You can test for this macro using #ifdef. It is only defined
- if _GNU_SOURCE is defined. */
-extern const fenv_t *_fe_nomask_env;
-#define FE_NOMASK_ENV (_fe_nomask_env)
-#endif /* _GNU_SOURCE */
-
-
-/* The following shall be declared as functions and may also be
- defined as macros. Function prototypes shall be provided. */
-extern int feclearexcept (int excepts);
-extern int fegetexceptflag (fexcept_t *flagp, int excepts);
-extern int feraiseexcept (int excepts);
-extern int fesetexceptflag (const fexcept_t *flagp, int excepts);
-extern int fetestexcept (int excepts);
-extern int fegetround (void);
-extern int fesetround (int round);
-extern int fegetenv (fenv_t *envp);
-extern int feholdexcept (fenv_t *envp);
-extern int fesetenv (const fenv_t *envp);
-extern int feupdateenv (const fenv_t *envp);
-
-/* These are not defined in Posix, but make sense by obvious extension. */
-extern int fegetprec (void);
-extern int fesetprec (int prec);
-
-/* This is Cygwin-custom, not from the standard, for use in the Cygwin CRT. */
-extern void _feinitialise (void);
-
-/* These are GNU extensions defined in glibc. */
-extern int feenableexcept (int excepts);
-extern int fedisableexcept (int excepts);
-extern int fegetexcept (void);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _FENV_H_ */
diff --git a/winsup/cygwin/include/fnmatch.h b/winsup/cygwin/include/fnmatch.h
deleted file mode 100644
index e4500abe2..000000000
--- a/winsup/cygwin/include/fnmatch.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* $OpenBSD: fnmatch.h,v 1.5 2000/03/24 17:13:23 millert Exp $ */
-/* $NetBSD: fnmatch.h,v 1.5 1994/10/26 00:55:53 cgd Exp $ */
-
-/*-
- * Copyright (c) 1992, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)fnmatch.h 8.1 (Berkeley) 6/2/93
- */
-
-#ifndef _FNMATCH_H_
-#define _FNMATCH_H_
-
-#define FNM_NOMATCH 1 /* Match failed. */
-#define FNM_NOSYS 2 /* Function not supported (unused). */
-
-#define FNM_NOESCAPE 0x01 /* Disable backslash escaping. */
-#define FNM_PATHNAME 0x02 /* Slash must be matched by slash. */
-#define FNM_PERIOD 0x04 /* Period must be matched by period. */
-#ifndef _POSIX_SOURCE
-#define FNM_LEADING_DIR 0x08 /* Ignore /<tail> after Imatch. */
-#define FNM_CASEFOLD 0x10 /* Case insensitive search. */
-#define FNM_IGNORECASE FNM_CASEFOLD
-#define FNM_FILE_NAME FNM_PATHNAME
-#endif
-
-#include <sys/cdefs.h>
-
-__BEGIN_DECLS
-int fnmatch __P((const char *, const char *, int));
-__END_DECLS
-
-#endif /* !_FNMATCH_H_ */
-
-
diff --git a/winsup/cygwin/include/fts.h b/winsup/cygwin/include/fts.h
deleted file mode 100644
index 57e9096b4..000000000
--- a/winsup/cygwin/include/fts.h
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Copyright (c) 1989, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)fts.h 8.3 (Berkeley) 8/14/94
- * $FreeBSD: /repoman/r/ncvs/src/include/fts.h,v 1.11 2005/01/07 00:06:20 pjd Exp $
- */
-
-#ifndef _FTS_H_
-#define _FTS_H_
-
-typedef struct {
- struct _ftsent *fts_cur; /* current node */
- struct _ftsent *fts_child; /* linked list of children */
- struct _ftsent **fts_array; /* sort array */
- dev_t fts_dev; /* starting device # */
- char *fts_path; /* path for this descent */
- int fts_rfd; /* fd for root */
- int fts_pathlen; /* sizeof(path) */
- int fts_nitems; /* elements in the sort array */
- int (*fts_compar) /* compare function */
- (const struct _ftsent * const *, const struct _ftsent * const *);
-
-#define FTS_COMFOLLOW 0x001 /* follow command line symlinks */
-#define FTS_LOGICAL 0x002 /* logical walk */
-#define FTS_NOCHDIR 0x004 /* don't change directories */
-#define FTS_NOSTAT 0x008 /* don't get stat info */
-#define FTS_PHYSICAL 0x010 /* physical walk */
-#define FTS_SEEDOT 0x020 /* return dot and dot-dot */
-#define FTS_XDEV 0x040 /* don't cross devices */
-#ifndef __CYGWIN__
-#define FTS_WHITEOUT 0x080 /* return whiteout information */
-#endif
-#define FTS_OPTIONMASK 0x0ff /* valid user option mask */
-
-#define FTS_NAMEONLY 0x100 /* (private) child names only */
-#define FTS_STOP 0x200 /* (private) unrecoverable error */
- int fts_options; /* fts_open options, global flags */
- void *fts_clientptr; /* thunk for sort function */
-} FTS;
-
-typedef struct _ftsent {
- struct _ftsent *fts_cycle; /* cycle node */
- struct _ftsent *fts_parent; /* parent directory */
- struct _ftsent *fts_link; /* next file in directory */
- union {
- struct {
- long __fts_number; /* local numeric value */
- void *__fts_pointer; /* local address value */
- } __struct_ftsent;
- int64_t __fts_bignum;
- } __union_ftsent;
-#define fts_number __union_ftsent.__struct_ftsent.__fts_number
-#define fts_pointer __union_ftsent.__struct_ftsent.__fts_pointer
-#define fts_bignum __union_ftsent.__fts_bignum
- char *fts_accpath; /* access path */
- char *fts_path; /* root path */
- int fts_errno; /* errno for this node */
- int fts_symfd; /* fd for symlink */
- u_short fts_pathlen; /* strlen(fts_path) */
- u_short fts_namelen; /* strlen(fts_name) */
-
- ino_t fts_ino; /* inode */
- dev_t fts_dev; /* device */
- nlink_t fts_nlink; /* link count */
-
-#define FTS_ROOTPARENTLEVEL -1
-#define FTS_ROOTLEVEL 0
- short fts_level; /* depth (-1 to N) */
-
-#define FTS_D 1 /* preorder directory */
-#define FTS_DC 2 /* directory that causes cycles */
-#define FTS_DEFAULT 3 /* none of the above */
-#define FTS_DNR 4 /* unreadable directory */
-#define FTS_DOT 5 /* dot or dot-dot */
-#define FTS_DP 6 /* postorder directory */
-#define FTS_ERR 7 /* error; errno is set */
-#define FTS_F 8 /* regular file */
-#define FTS_INIT 9 /* initialized only */
-#define FTS_NS 10 /* stat(2) failed */
-#define FTS_NSOK 11 /* no stat(2) requested */
-#define FTS_SL 12 /* symbolic link */
-#define FTS_SLNONE 13 /* symbolic link without target */
-#define FTS_W 14 /* whiteout object */
- u_short fts_info; /* user flags for FTSENT structure */
-
-#define FTS_DONTCHDIR 0x01 /* don't chdir .. to the parent */
-#define FTS_SYMFOLLOW 0x02 /* followed a symlink to get here */
-#define FTS_ISW 0x04 /* this is a whiteout object */
- u_short fts_flags; /* private flags for FTSENT structure */
-
-#define FTS_AGAIN 1 /* read node again */
-#define FTS_FOLLOW 2 /* follow symbolic link */
-#define FTS_NOINSTR 3 /* no instructions */
-#define FTS_SKIP 4 /* discard node */
- u_short fts_instr; /* fts_set() instructions */
-
- struct stat *fts_statp; /* stat(2) information */
- char *fts_name; /* file name */
- FTS *fts_fts; /* back pointer to main FTS */
-} FTSENT;
-
-#include <sys/cdefs.h>
-
-__BEGIN_DECLS
-FTSENT *fts_children(FTS *, int);
-int fts_close(FTS *);
-void *fts_get_clientptr(FTS *);
-#define fts_get_clientptr(fts) ((fts)->fts_clientptr)
-FTS *fts_get_stream(FTSENT *);
-#define fts_get_stream(ftsent) ((ftsent)->fts_fts)
-FTS *fts_open(char * const *, int,
- int (*)(const FTSENT * const *, const FTSENT * const *));
-FTSENT *fts_read(FTS *);
-int fts_set(FTS *, FTSENT *, int);
-void fts_set_clientptr(FTS *, void *);
-__END_DECLS
-
-#endif /* !_FTS_H_ */
diff --git a/winsup/cygwin/include/ftw.h b/winsup/cygwin/include/ftw.h
deleted file mode 100644
index c0025a7c6..000000000
--- a/winsup/cygwin/include/ftw.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* $OpenBSD: ftw.h,v 1.1 2003/07/21 21:13:18 millert Exp $ */
-
-/*
- * Copyright (c) 2003 Todd C. Miller <Todd.Miller@courtesan.com>
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Sponsored in part by the Defense Advanced Research Projects
- * Agency (DARPA) and Air Force Research Laboratory, Air Force
- * Materiel Command, USAF, under agreement number F39502-99-1-0512.
- *
- * $FreeBSD: /repoman/r/ncvs/src/include/ftw.h,v 1.2 2004/08/24 13:00:54 tjr Exp $
- */
-
-#ifndef _FTW_H
-#define _FTW_H
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/cdefs.h>
-
-/*
- * Valid flags for the 3rd argument to the function that is passed as the
- * second argument to ftw(3) and nftw(3). Say it three times fast!
- */
-#define FTW_F 0 /* File. */
-#define FTW_D 1 /* Directory. */
-#define FTW_DNR 2 /* Directory without read permission. */
-#define FTW_DP 3 /* Directory with subdirectories visited. */
-#define FTW_NS 4 /* Unknown type; stat() failed. */
-#define FTW_SL 5 /* Symbolic link. */
-#define FTW_SLN 6 /* Sym link that names a nonexistent file. */
-
-/*
- * Flags for use as the 4th argument to nftw(3). These may be ORed together.
- */
-#define FTW_PHYS 0x01 /* Physical walk, don't follow sym links. */
-#define FTW_MOUNT 0x02 /* The walk does not cross a mount point. */
-#define FTW_DEPTH 0x04 /* Subdirs visited before the dir itself. */
-#define FTW_CHDIR 0x08 /* Change to a directory before reading it. */
-
-struct FTW {
- int base;
- int level;
-};
-
-__BEGIN_DECLS
-int ftw(const char *, int (*)(const char *, const struct stat *, int), int);
-int nftw(const char *, int (*)(const char *, const struct stat *, int,
- struct FTW *), int, int);
-__END_DECLS
-
-#endif /* !_FTW_H */
diff --git a/winsup/cygwin/include/getopt.h b/winsup/cygwin/include/getopt.h
deleted file mode 100644
index 0c1c8c92a..000000000
--- a/winsup/cygwin/include/getopt.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright (c) 1987, 1993, 1994, 1996
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#ifdef _COMPILING_NEWLIB
-#include_next "getopt.h"
-#else
-#ifndef __GETOPT_H__
-#define __GETOPT_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifndef __INSIDE_CYGWIN__
-extern int __declspec(dllimport) opterr; /* if error message should be printed */
-extern int __declspec(dllimport) optind; /* index into parent argv vector */
-extern int __declspec(dllimport) optopt; /* character checked for validity */
-extern int __declspec(dllimport) optreset; /* reset getopt */
-extern char __declspec(dllimport) *optarg; /* argument associated with option */
-#endif
-
-int getopt (int, char * const *, const char *);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __GETOPT_H__ */
-
-#ifndef __UNISTD_GETOPT__
-#ifndef __GETOPT_LONG_H__
-#define __GETOPT_LONG_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct option {
- const char *name;
- int has_arg;
- int *flag;
- int val;
-};
-
-int getopt_long (int, char *const *, const char *, const struct option *, int *);
-int getopt_long_only (int, char *const *, const char *, const struct option *, int *);
-
-#ifndef HAVE_DECL_GETOPT
-#define HAVE_DECL_GETOPT 1
-#endif
-
-#define no_argument 0
-#define required_argument 1
-#define optional_argument 2
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __GETOPT_LONG_H__ */
-#endif /* __UNISTD_GETOPT__ */
-#endif /*_INSIDE_NEWLIB*/
diff --git a/winsup/cygwin/include/glob.h b/winsup/cygwin/include/glob.h
deleted file mode 100644
index 5f1b42050..000000000
--- a/winsup/cygwin/include/glob.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Copyright (c) 1989, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Guido van Rossum.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)glob.h 8.1 (Berkeley) 6/2/93
- * $FreeBSD: /repoman/r/ncvs/src/include/glob.h,v 1.10 2006/05/22 05:57:39 ache Exp $
- */
-
-#ifndef _GLOB_H_
-#define _GLOB_H_
-
-#include <sys/cdefs.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-
-typedef struct {
- size_t gl_pathc; /* Count of total paths so far. */
- size_t gl_matchc; /* Count of paths matching pattern. */
- size_t gl_offs; /* Reserved at beginning of gl_pathv. */
- int gl_flags; /* Copy of flags parameter to glob. */
- char **gl_pathv; /* List of paths matching pattern. */
- /* Copy of errfunc parameter to glob. */
- int (*gl_errfunc) __P((const char *, int));
-
- /*
- * Alternate filesystem access methods for glob; replacement
- * versions of closedir(3), readdir(3), opendir(3), stat(2)
- * and lstat(2).
- */
- void (*gl_closedir)(void *);
- struct dirent *(*gl_readdir)(void *);
- void *(*gl_opendir)(const char *);
- int (*gl_lstat) __P((const char *, struct stat *));
- int (*gl_stat) __P((const char *, struct stat *));
-} glob_t;
-
-/* Believed to have been introduced in 1003.2-1992 */
-#define GLOB_APPEND 0x0001 /* Append to output from previous call. */
-#define GLOB_DOOFFS 0x0002 /* Use gl_offs. */
-#define GLOB_ERR 0x0004 /* Return on error. */
-#define GLOB_MARK 0x0008 /* Append / to matching directories. */
-#define GLOB_NOCHECK 0x0010 /* Return pattern itself if nothing matches. */
-#define GLOB_NOSORT 0x0020 /* Don't sort. */
-#define GLOB_NOESCAPE 0x2000 /* Disable backslash escaping. */
-
-/* Error values returned by glob(3) */
-#define GLOB_NOSPACE (-1) /* Malloc call failed. */
-#define GLOB_ABORTED (-2) /* Unignored error. */
-#define GLOB_NOMATCH (-3) /* No match and GLOB_NOCHECK was not set. */
-#define GLOB_NOSYS (-4) /* Obsolete: source comptability only. */
-
-#ifndef _POSIX_SOURCE
-#define GLOB_ALTDIRFUNC 0x0040 /* Use alternately specified directory funcs. */
-#define GLOB_BRACE 0x0080 /* Expand braces ala csh. */
-#define GLOB_MAGCHAR 0x0100 /* Pattern had globbing characters. */
-#define GLOB_NOMAGIC 0x0200 /* GLOB_NOCHECK without magic chars (csh). */
-#define GLOB_QUOTE 0x0400 /* Quote special chars with \. */
-#define GLOB_TILDE 0x0800 /* Expand tilde names from the passwd file. */
-#define GLOB_LIMIT 0x1000 /* limit number of returned paths */
-
-/* source compatibility, these are the old names */
-#define GLOB_MAXPATH GLOB_LIMIT
-#define GLOB_ABEND GLOB_ABORTED
-#endif /* __BSD_VISIBLE */
-
-__BEGIN_DECLS
-
-#undef DLLEXPORT
-#ifdef __INSIDE_CYGWIN__
-# define DLLEXPORT
-#else
-# define DLLEXPORT __declspec(dllimport)
-#endif
-
-int DLLEXPORT glob (const char *__restrict , int, int (*)(const char *, int), glob_t *__restrict);
-void DLLEXPORT globfree (glob_t *);
-int DLLEXPORT glob_pattern_p (const char *, int);
-__END_DECLS
-
-#endif /* !_GLOB_H_ */
diff --git a/winsup/cygwin/include/icmp.h b/winsup/cygwin/include/icmp.h
deleted file mode 100644
index 7e7aedccd..000000000
--- a/winsup/cygwin/include/icmp.h
+++ /dev/null
@@ -1 +0,0 @@
-/* icmp.h */
diff --git a/winsup/cygwin/include/ifaddrs.h b/winsup/cygwin/include/ifaddrs.h
deleted file mode 100644
index f6c28e798..000000000
--- a/winsup/cygwin/include/ifaddrs.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/* $OpenBSD: ifaddrs.h,v 1.4 2004/01/22 21:48:02 espie Exp $ */
-
-/*
- * Copyright (c) 1995, 1999
- * Berkeley Software Design, Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * THIS SOFTWARE IS PROVIDED BY Berkeley Software Design, Inc. ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL Berkeley Software Design, Inc. BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * BSDI ifaddrs.h,v 2.5 2000/02/23 14:51:59 dab Exp
- */
-
-#ifndef _IFADDRS_H_
-#define _IFADDRS_H_
-
-struct ifaddrs {
- struct ifaddrs *ifa_next;
- char *ifa_name;
- unsigned int ifa_flags;
- struct sockaddr *ifa_addr;
- struct sockaddr *ifa_netmask;
- struct sockaddr *ifa_dstaddr;
- void *ifa_data;
-};
-
-/*
- * This may have been defined in <net/if.h>. Note that if <net/if.h> is
- * to be included it must be included before this header file.
- */
-/* CV 2007-06-20: Not a problem on Cygwin right now. */
-#ifndef ifa_broadaddr
-#define ifa_broadaddr ifa_dstaddr /* broadcast address interface */
-#endif
-
-#include <sys/cdefs.h>
-
-__BEGIN_DECLS
-extern int getifaddrs(struct ifaddrs **);
-extern void freeifaddrs(struct ifaddrs *);
-__END_DECLS
-
-#endif
diff --git a/winsup/cygwin/include/inttypes.h b/winsup/cygwin/include/inttypes.h
deleted file mode 100644
index eb60e79e4..000000000
--- a/winsup/cygwin/include/inttypes.h
+++ /dev/null
@@ -1,274 +0,0 @@
-/* inttypes.h - fixed size integer types
-
- Copyright 2003, 2005, 2009, 2010, 2012 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _INTTYPES_H
-#define _INTTYPES_H
-
-#include <stdint.h>
-#define __need_wchar_t
-#include <stddef.h>
-#include <bits/wordsize.h>
-
-/* C99 requires that in C++ the following macros should be defined only
- if requested. */
-#if !defined (__cplusplus) || defined (__STDC_FORMAT_MACROS) \
- || defined (__INSIDE_CYGWIN__)
-
-#if __WORDSIZE == 64
-#define __PRI64 "l"
-#define __PRIFAST "l"
-#define __PRIPTR "l"
-#else
-#define __PRI64 "ll"
-#define __PRIFAST
-#define __PRIPTR
-#endif
-
-/* fprintf() macros for signed integers */
-
-#define PRId8 "d"
-#define PRId16 "d"
-#define PRId32 "d"
-#define PRId64 __PRI64 "d"
-
-#define PRIdLEAST8 "d"
-#define PRIdLEAST16 "d"
-#define PRIdLEAST32 "d"
-#define PRIdLEAST64 __PRI64 "d"
-
-#define PRIdFAST8 "d"
-#define PRIdFAST16 __PRIFAST "d"
-#define PRIdFAST32 __PRIFAST "d"
-#define PRIdFAST64 __PRI64 "d"
-
-#define PRIdMAX __PRI64 "d"
-#define PRIdPTR __PRIPTR "d"
-
-#define PRIi8 "i"
-#define PRIi16 "i"
-#define PRIi32 "i"
-#define PRIi64 __PRI64 "i"
-
-#define PRIiLEAST8 "i"
-#define PRIiLEAST16 "i"
-#define PRIiLEAST32 "i"
-#define PRIiLEAST64 __PRI64 "i"
-
-#define PRIiFAST8 "i"
-#define PRIiFAST16 __PRIFAST "i"
-#define PRIiFAST32 __PRIFAST "i"
-#define PRIiFAST64 __PRI64 "i"
-
-#define PRIiMAX __PRI64 "i"
-#define PRIiPTR __PRIPTR "i"
-
-/* fprintf() macros for unsigned integers */
-
-#define PRIo8 "o"
-#define PRIo16 "o"
-#define PRIo32 "o"
-#define PRIo64 __PRI64 "o"
-
-#define PRIoLEAST8 "o"
-#define PRIoLEAST16 "o"
-#define PRIoLEAST32 "o"
-#define PRIoLEAST64 __PRI64 "o"
-
-#define PRIoFAST8 "o"
-#define PRIoFAST16 __PRIFAST "o"
-#define PRIoFAST32 __PRIFAST "o"
-#define PRIoFAST64 __PRI64 "o"
-
-#define PRIoMAX __PRI64 "o"
-#define PRIoPTR __PRIPTR "o"
-
-#define PRIu8 "u"
-#define PRIu16 "u"
-#define PRIu32 "u"
-#define PRIu64 __PRI64 "u"
-
-#define PRIuLEAST8 "u"
-#define PRIuLEAST16 "u"
-#define PRIuLEAST32 "u"
-#define PRIuLEAST64 __PRI64 "u"
-
-#define PRIuFAST8 "u"
-#define PRIuFAST16 __PRIFAST "u"
-#define PRIuFAST32 __PRIFAST "u"
-#define PRIuFAST64 __PRI64 "u"
-
-#define PRIuMAX __PRI64 "u"
-#define PRIuPTR __PRIPTR "u"
-
-#define PRIx8 "x"
-#define PRIx16 "x"
-#define PRIx32 "x"
-#define PRIx64 __PRI64 "x"
-
-#define PRIxLEAST8 "x"
-#define PRIxLEAST16 "x"
-#define PRIxLEAST32 "x"
-#define PRIxLEAST64 __PRI64 "x"
-
-#define PRIxFAST8 "x"
-#define PRIxFAST16 __PRIFAST "x"
-#define PRIxFAST32 __PRIFAST "x"
-#define PRIxFAST64 __PRI64 "x"
-
-#define PRIxMAX __PRI64 "x"
-#define PRIxPTR __PRIPTR "x"
-
-#define PRIX8 "X"
-#define PRIX16 "X"
-#define PRIX32 "X"
-#define PRIX64 __PRI64 "X"
-
-#define PRIXLEAST8 "X"
-#define PRIXLEAST16 "X"
-#define PRIXLEAST32 "X"
-#define PRIXLEAST64 __PRI64 "X"
-
-#define PRIXFAST8 "X"
-#define PRIXFAST16 __PRIFAST "X"
-#define PRIXFAST32 __PRIFAST "X"
-#define PRIXFAST64 __PRI64 "X"
-
-#define PRIXMAX __PRI64 "X"
-#define PRIXPTR __PRIPTR "X"
-
-/* fscanf() macros for signed integers */
-
-#if __WORDSIZE == 64
-#define __SCN64 "l"
-#define __SCNFAST "l"
-#define __SCNPTR "l"
-#else
-#define __SCN64 "ll"
-#define __SCNFAST
-#define __SCNPTR
-#endif
-
-#define SCNd8 "hhd"
-#define SCNd16 "hd"
-#define SCNd32 "d"
-#define SCNd64 __SCN64 "d"
-
-#define SCNdLEAST8 "hhd"
-#define SCNdLEAST16 "hd"
-#define SCNdLEAST32 "d"
-#define SCNdLEAST64 __SCN64 "d"
-
-#define SCNdFAST8 "hhd"
-#define SCNdFAST16 __SCNFAST "d"
-#define SCNdFAST32 __SCNFAST "d"
-#define SCNdFAST64 __SCN64 "d"
-
-#define SCNdMAX __SCN64 "d"
-#define SCNdPTR __SCNPTR "d"
-
-#define SCNi8 "hhi"
-#define SCNi16 "hi"
-#define SCNi32 "i"
-#define SCNi64 __SCN64 "i"
-
-#define SCNiLEAST8 "hhi"
-#define SCNiLEAST16 "hi"
-#define SCNiLEAST32 "i"
-#define SCNiLEAST64 __SCN64 "i"
-
-#define SCNiFAST8 "hhi"
-#define SCNiFAST16 __SCNFAST "i"
-#define SCNiFAST32 __SCNFAST "i"
-#define SCNiFAST64 __SCN64 "i"
-
-#define SCNiMAX __SCN64 "i"
-#define SCNiPTR __SCNPTR "i"
-
-/* fscanf() macros for unsigned integers */
-
-#define SCNo8 "hho"
-#define SCNo16 "ho"
-#define SCNo32 "o"
-#define SCNo64 __SCN64 "o"
-
-#define SCNoLEAST8 "hho"
-#define SCNoLEAST16 "ho"
-#define SCNoLEAST32 "o"
-#define SCNoLEAST64 __SCN64 "o"
-
-#define SCNoFAST8 "hho"
-#define SCNoFAST16 __SCNFAST "o"
-#define SCNoFAST32 __SCNFAST "o"
-#define SCNoFAST64 __SCN64 "o"
-
-#define SCNoMAX __SCN64 "o"
-#define SCNoPTR __SCNPTR "o"
-
-#define SCNu8 "hhu"
-#define SCNu16 "hu"
-#define SCNu32 "u"
-#define SCNu64 __SCN64 "u"
-
-#define SCNuLEAST8 "hhu"
-#define SCNuLEAST16 "hu"
-#define SCNuLEAST32 "u"
-#define SCNuLEAST64 __SCN64 "u"
-
-#define SCNuFAST8 "hhu"
-#define SCNuFAST16 __SCNFAST "u"
-#define SCNuFAST32 __SCNFAST "u"
-#define SCNuFAST64 __SCN64 "u"
-
-#define SCNuMAX __SCN64 "u"
-#define SCNuPTR __SCNPTR "u"
-
-#define SCNx8 "hhx"
-#define SCNx16 "hx"
-#define SCNx32 "x"
-#define SCNx64 __SCN64 "x"
-
-#define SCNxLEAST8 "hhx"
-#define SCNxLEAST16 "hx"
-#define SCNxLEAST32 "x"
-#define SCNxLEAST64 __SCN64 "x"
-
-#define SCNxFAST8 "hhx"
-#define SCNxFAST16 __SCNFAST "x"
-#define SCNxFAST32 __SCNFAST "x"
-#define SCNxFAST64 __SCN64 "x"
-
-#define SCNxMAX __SCN64 "x"
-#define SCNxPTR __SCNPTR "x"
-
-#endif /* !__cplusplus || __STDC_FORMAT_MACROS || __INSIDE_CYGWIN__ */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <_ansi.h>
-
-typedef struct {
- intmax_t quot;
- intmax_t rem;
-} imaxdiv_t;
-
-intmax_t _EXFUN(imaxabs, (intmax_t));
-imaxdiv_t _EXFUN(imaxdiv, (intmax_t, intmax_t));
-intmax_t _EXFUN(strtoimax, (const char *, char **, int));
-uintmax_t _EXFUN(strtoumax, (const char *, char **, int));
-intmax_t _EXFUN(wcstoimax, (const wchar_t *, wchar_t **, int));
-uintmax_t _EXFUN(wcstoumax, (const wchar_t *, wchar_t **, int));
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _INTTYPES_H */
diff --git a/winsup/cygwin/include/io.h b/winsup/cygwin/include/io.h
deleted file mode 100644
index 517f871fe..000000000
--- a/winsup/cygwin/include/io.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/* io.h
-
- Copyright 1999, 2000, 2001 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _IO_H_
-#define _IO_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-/*
- * Function to return a Win32 HANDLE from a fd.
- */
-extern long _get_osfhandle(int);
-#define get_osfhandle(i) _get_osfhandle(i)
-extern int _setmode (int __fd, int __mode);
-#define setmode(f,m) _setmode((f),(m))
-
-#ifdef __cplusplus
-};
-#endif /* __cplusplus */
-
-#endif /* _IO_H_ */
diff --git a/winsup/cygwin/include/lastlog.h b/winsup/cygwin/include/lastlog.h
deleted file mode 100644
index fefff78a4..000000000
--- a/winsup/cygwin/include/lastlog.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/* lastlog.h
-
- Copyright 2000, 2001 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _LASTLOG_H
-#define _LASTLOG_H
-
-#include <utmp.h>
-
-struct lastlog {
- long ll_time;
- char ll_line[UT_LINESIZE];
- char ll_host[UT_HOSTSIZE];
-};
-
-#endif
diff --git a/winsup/cygwin/include/libgen.h b/winsup/cygwin/include/libgen.h
deleted file mode 100644
index f5c24a8cc..000000000
--- a/winsup/cygwin/include/libgen.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/* libgen.h
-
- Copyright 2005 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _LIBGEN_H
-#define _LIBGEN_H
-
-#include <sys/cdefs.h>
-
-__BEGIN_DECLS
-
-extern char *basename (char *path);
-extern char *dirname (char *path);
-
-__END_DECLS
-
-#endif /* _LIBGEN_H */
diff --git a/winsup/cygwin/include/limits.h b/winsup/cygwin/include/limits.h
deleted file mode 100644
index e093d283d..000000000
--- a/winsup/cygwin/include/limits.h
+++ /dev/null
@@ -1,504 +0,0 @@
-/* limits.h
-
- Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
- 2011, 2012, 2013 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _LIMITS_H___
-
-#include <features.h>
-#include <bits/wordsize.h>
-
-#ifndef _MACH_MACHLIMITS_H_
-
-/* _MACH_MACHLIMITS_H_ is used on OSF/1. */
-#define _LIMITS_H___
-#define _MACH_MACHLIMITS_H_
-
-
-/* Numerical limits */
-
-/* Number of bits in a `char'. */
-#undef CHAR_BIT
-#define CHAR_BIT __CHAR_BIT__
-
-/* Number of bits in a `long'. */
-#undef LONG_BIT
-#define LONG_BIT (__SIZEOF_LONG__ * __CHAR_BIT__)
-
-/* Number of bits in a `int'. */
-#undef WORD_BIT
-#define WORD_BIT (__SIZEOF_INT__ * __CHAR_BIT__)
-
-/* Maximum length of a multibyte character. */
-#ifndef MB_LEN_MAX
-/* Use value from newlib. */
-#define MB_LEN_MAX 8
-#endif
-
-/* Minimum and maximum values a `signed char' can hold. */
-#undef SCHAR_MIN
-#define SCHAR_MIN (-128)
-#undef SCHAR_MAX
-#define SCHAR_MAX 127
-
-/* Maximum value an `unsigned char' can hold. (Minimum is 0). */
-#undef UCHAR_MAX
-#define UCHAR_MAX 255
-
-/* Minimum and maximum values a `char' can hold. */
-#ifdef __CHAR_UNSIGNED__
-#undef CHAR_MIN
-#define CHAR_MIN 0
-#undef CHAR_MAX
-#define CHAR_MAX 255
-#else
-#undef CHAR_MIN
-#define CHAR_MIN (-128)
-#undef CHAR_MAX
-#define CHAR_MAX 127
-#endif
-
-/* Minimum and maximum values a `signed short int' can hold. */
-#undef SHRT_MIN
-#define SHRT_MIN (-32768)
-#undef SHRT_MAX
-#define SHRT_MAX 32767
-
-/* Maximum value an `unsigned short int' can hold. (Minimum is 0). */
-#undef USHRT_MAX
-#define USHRT_MAX 65535
-
-/* Minimum and maximum values a `signed int' can hold. */
-#ifndef __INT_MAX__
-#define __INT_MAX__ 2147483647
-#endif
-#undef INT_MIN
-#define INT_MIN (-INT_MAX-1)
-#undef INT_MAX
-#define INT_MAX __INT_MAX__
-
-/* Maximum value an `unsigned int' can hold. (Minimum is 0). */
-#undef UINT_MAX
-#define UINT_MAX (INT_MAX * 2U + 1)
-
-/* Minimum and maximum values a `signed long int' can hold.
- (Same as `int'). */
-#ifndef __LONG_MAX__
-#if __WORDSIZE == 64
-#define __LONG_MAX__ 9223372036854775807L
-#else
-#define __LONG_MAX__ 2147483647L
-# endif /* __alpha__ */
-#endif
-#undef LONG_MIN
-#define LONG_MIN (-LONG_MAX-1L)
-#undef LONG_MAX
-#define LONG_MAX __LONG_MAX__
-
-/* Maximum value an `unsigned long int' can hold. (Minimum is 0). */
-#undef ULONG_MAX
-#define ULONG_MAX (LONG_MAX * 2UL + 1)
-
-/* Minimum and maximum values a `signed long long int' can hold. */
-#ifndef __LONG_LONG_MAX__
-#define __LONG_LONG_MAX__ 9223372036854775807LL
-#endif
-
-#if defined (__GNU_LIBRARY__) ? defined (__USE_GNU) : !defined (__STRICT_ANSI__)
-#undef LONG_LONG_MIN
-#define LONG_LONG_MIN (-LONG_LONG_MAX-1)
-#undef LONG_LONG_MAX
-#define LONG_LONG_MAX __LONG_LONG_MAX__
-
-/* Maximum value an `unsigned long long int' can hold. (Minimum is 0). */
-#undef ULONG_LONG_MAX
-#define ULONG_LONG_MAX (LONG_LONG_MAX * 2ULL + 1)
-#endif
-
-/* Minimum and maximum values a `signed long long int' can hold. */
-#undef LLONG_MIN
-#define LLONG_MIN (-LLONG_MAX-1)
-#undef LLONG_MAX
-#define LLONG_MAX __LONG_LONG_MAX__
-
-/* Maximum value an `unsigned long long int' can hold. (Minimum is 0). */
-#undef ULLONG_MAX
-#define ULLONG_MAX (LLONG_MAX * 2ULL + 1)
-
-/* Maximum size of ssize_t */
-#undef SSIZE_MAX
-#define SSIZE_MAX (__LONG_MAX__)
-
-
-/* Runtime Invariant Values */
-
-/* Please note that symbolic names shall be ommited, on specific
- implementations where the corresponding value is equal to or greater
- than the stated minimum, but is unspecified. This indetermination
- might depend on the amount of available memory space on a specific
- instance of a specific implementation. The actual value supported by
- a specific instance shall be provided by the sysconf() function. */
-
-/* Maximum number of I/O operations in a single list I/O call supported by
- the implementation. Not yet implemented. */
-#undef AIO_LISTIO_MAX
-/* #define AIO_LISTIO_MAX >= _POSIX_AIO_LISTIO_MAX */
-
-/* Maximum number of outstanding asynchronous I/O operations supported by
- the implementation. Not yet implemented. */
-#undef AIO_MAX
-/* #define AIO_MAX >= _POSIX_AIO_MAX */
-
-/* The maximum amount by which a process can decrease its asynchronous I/O
- priority level from its own scheduling priority. */
-#undef AIO_PRIO_DELTA_MAX
-/* #define AIO_PRIO_DELTA_MAX >= 0 */
-
-/* Maximum number of bytes in arguments and environment passed in an exec
- call. 32000 is the safe value used for Windows processes when called
- from Cygwin processes. */
-#undef ARG_MAX
-#define ARG_MAX 32000
-
-/* Maximum number of functions that may be registered with atexit(). */
-#undef ATEXIT_MAX
-#define ATEXIT_MAX 32
-
-/* Maximum number of simultaneous processes per real user ID. */
-#undef CHILD_MAX
-#define CHILD_MAX 256
-
-/* Maximum number of timer expiration overruns. Not yet implemented. */
-#undef DELAYTIMER_MAX
-/* #define DELAYTIMER_MAX >= _POSIX_DELAYTIMER_MAX */
-
-/* Maximum length of a host name. */
-#undef HOST_NAME_MAX
-#define HOST_NAME_MAX 255
-
-/* Maximum number of iovcnt in a writev (an arbitrary number) */
-#undef IOV_MAX
-#define IOV_MAX 1024
-
-/* Maximum number of characters in a login name. */
-#undef LOGIN_NAME_MAX
-#define LOGIN_NAME_MAX 256 /* equal to UNLEN defined in w32api/lmcons.h */
-
-/* The maximum number of open message queue descriptors a process may hold. */
-#undef MQ_OPEN_MAX
-#define MQ_OPEN_MAX OPEN_MAX
-
-/* The maximum number of message priorities supported by the implementation. */
-#undef MQ_PRIO_MAX
-#define MQ_PRIO_MAX INT_MAX
-
-/* # of open files per process. Actually it can be more since Cygwin
- grows the dtable as necessary. We define a reasonable limit here
- which is returned by getdtablesize(), sysconf(_SC_OPEN_MAX) and
- getrlimit(RLIMIT_NOFILE). */
-#undef OPEN_MAX
-#define OPEN_MAX 256
-
-/* Size in bytes of a page. */
-#undef PAGESIZE
-#undef PAGE_SIZE
-#define PAGESIZE 65536
-#define PAGE_SIZE PAGESIZE
-
-/* Maximum number of attempts made to destroy a thread's thread-specific
- data values on thread exit. */
-/* FIXME: I really don't understand this value. Why should multiple
- attempts be necessary to destroy thread-specific data?!? Anyway, the
- current value here is 1, taken originally from our pthread.h file,
- where it was mistakenly defined first. Unfortunately this value is
- lower than the POSIX defined minimum value, which is 4. */
-#undef PTHREAD_DESTRUCTOR_ITERATIONS
-#define PTHREAD_DESTRUCTOR_ITERATIONS 1
-
-/* Maximum number of data keys that can be created by a process. */
-/* Tls has 1088 items - and we don't want to use them all :] */
-#undef PTHREAD_KEYS_MAX
-#define PTHREAD_KEYS_MAX 1024
-
-/* Minimum size in bytes of thread stack storage. */
-/* Actually the minimum stack size is somewhat of a split personality.
- The size parameter in a CreateThread call is the size of the initially
- commited stack size, which can be specified as low as 4K. However, the
- default *reserved* stack size is 1 Meg, unless the .def file specifies
- another STACKSIZE value. And even if you specify a stack size below 64K,
- the allocation granularity is in the way. You can never squeeze multiple
- threads in the same allocation granularity slot. Oh well. */
-#undef PTHREAD_STACK_MIN
-#define PTHREAD_STACK_MIN 65536
-
-/* Maximum number of threads that can be created per process. */
-/* Windows allows any arbitrary number of threads per process. */
-#undef PTHREAD_THREADS_MAX
-/* #define PTHREAD_THREADS_MAX unspecified */
-
-/* Maximum number of realtime signals reserved for application use. */
-/* FIXME: We only support one realtime signal in 32 bit mode, but
- _POSIX_RTSIG_MAX is 8. */
-#undef RTSIG_MAX
-#if __WORDSIZE == 64
-#define RTSIG_MAX 33
-#else
-#define RTSIG_MAX 1
-#endif
-
-/* Maximum number of semaphores that a process may have. */
-/* Windows allows any arbitrary number of semaphores per process. */
-#undef SEM_NSEMS_MAX
-/* #define SEM_NSEMS_MAX unspecified */
-
-/* The maximum value a semaphore may have. */
-#undef SEM_VALUE_MAX
-#define SEM_VALUE_MAX 1147483648
-
-/* Maximum number of queued signals that a process may send and have pending
- at the receiver(s) at any time. */
-#undef SIGQUEUE_MAX
-#define SIGQUEUE_MAX 32
-
-/* The maximum number of replenishment operations that may be simultaneously
- pending for a particular sporadic server scheduler. Not implemented. */
-#undef SS_REPL_MAX
-/* #define SS_REPL_MAX >= _POSIX_SS_REPL_MAX */
-
-/* Number of streams that one process can have open at one time. */
-#undef STREAM_MAX
-#define STREAM_MAX 20
-
-/* Maximum number of nested symbolic links. */
-#undef SYMLOOP_MAX
-#define SYMLOOP_MAX 10
-
-/* Maximum number of timer expiration overruns. */
-#undef TIMER_MAX
-#define TIMER_MAX 32
-
-/* Maximum length of the trace event name. Not implemented. */
-#undef TRACE_EVENT_NAME_MAX
-/* #define TRACE_EVENT_NAME_MAX >= _POSIX_TRACE_EVENT_NAME_MAX */
-
-/* Maximum length of the trace generation version string or of the trace
- stream name. Not implemented. */
-#undef TRACE_NAME_MAX
-/* #define TRACE_NAME_MAX >= _POSIX_TRACE_NAME_MAX */
-
-/* Maximum number of trace streams that may simultaneously exist in the
- system. Not implemented. */
-#undef TRACE_SYS_MAX
-/* #define TRACE_SYS_MAX >= _POSIX_TRACE_SYS_MAX */
-
-/* Maximum number of user trace event type identifiers that may simultaneously
- exist in a traced process, including the predefined user trace event
- POSIX_TRACE_UNNAMED_USER_EVENT. Not implemented. */
-#undef TRACE_USER_EVENT_MAX
-/* #define TRACE_USER_EVENT_MAX >= _POSIX_TRACE_USER_EVENT_MAX */
-
-/* Maximum number of characters in a tty name. */
-#undef TTY_NAME_MAX
-#define TTY_NAME_MAX 32
-
-/* Maximum number of bytes supported for the name of a timezone (not of the TZ variable). Not implemented. */
-#undef TZNAME_MAX
-/* #define TZNAME_MAX >= _POSIX_TZNAME_MAX */
-
-
-/* Pathname Variable Values */
-
-/* Minimum bits needed to represent the maximum size of a regular file. */
-#undef FILESIZEBITS
-#define FILESIZEBITS 64
-
-/* Maximum number of hardlinks to a file. */
-#undef LINK_MAX
-#define LINK_MAX 1024
-
-/* Maximum number of bytes in a terminal canonical input line. */
-#undef MAX_CANON
-#define MAX_CANON 255
-
-/* Minimum number of bytes available in a terminal input queue. */
-#undef MAX_INPUT
-#define MAX_INPUT 255
-
-/* Maximum length of a path component. */
-#undef NAME_MAX
-#define NAME_MAX 255
-
-/* Maximum length of a path given to API functions including trailing NUL.
- Deliberately set to the same default value as on Linux. Internal paths
- may be longer. */
-/* Keep in sync with __PATHNAME_MAX__ in cygwin/config.h */
-#undef PATH_MAX
-#define PATH_MAX 4096
-
-/* # of bytes in a pipe buf. This is the max # of bytes which can be
- written to a pipe in one atomic operation. */
-#undef PIPE_BUF
-#define PIPE_BUF 4096
-
-/* Minimum number of bytes of storage actually allocated for any portion
- of a file. Not implemented. */
-#undef POSIX_ALLOC_SIZE_MIN
-/* #define POSIX_ALLOC_SIZE_MIN unspecifed */
-
-/* Recommended increment for file transfer sizes between the
- {POSIX_REC_MIN_XFER_SIZE} and {POSIX_REC_MAX_XFER_SIZE} values.
- Not implemented. */
-#undef POSIX_REC_INCR_XFER_SIZE
-/* #define POSIX_REC_INCR_XFER_SIZE unspecifed */
-
-/* Maximum recommended file transfer size. Not implemented. */
-#undef POSIX_REC_MAX_XFER_SIZE
-/* #define POSIX_REC_MAX_XFER_SIZE unspecifed */
-
-/* Minimum recommended file transfer size. Not implemented. */
-#undef POSIX_REC_MIN_XFER_SIZE
-/* #define POSIX_REC_MIN_XFER_SIZE unspecifed */
-
-/* Recommended file transfer buffer alignment. Not implemented. */
-#undef POSIX_REC_XFER_ALIGN
-/* #define POSIX_REC_XFER_ALIGN unspecifed */
-
-/* Maximum number of bytes in a symbolic link. */
-#undef SYMLINK_MAX
-#define SYMLINK_MAX (PATH_MAX - 1)
-
-
-/* Runtime Increasable Values */
-
-/* Maximum obase values allowed by the bc utility. */
-#undef BC_BASE_MAX
-#define BC_BASE_MAX 99
-
-/* Maximum number of elements permitted in an array by the bc utility. */
-#undef BC_DIM_MAX
-#define BC_DIM_MAX 2048
-
-/* Maximum scale value allowed by the bc utility. */
-#undef BC_SCALE_MAX
-#define BC_SCALE_MAX 99
-
-/* Maximum length of a string constant accepted by the bc utility. */
-#undef BC_STRING_MAX
-#define BC_STRING_MAX 1000
-
-/* Maximum number of bytes in a character class name. Not implemented. */
-#undef CHARCLASS_NAME_MAX
-/* #define CHARCLASS_NAME_MAX >= _POSIX2_CHARCLASS_NAME_MAX */
-
-/* Maximum number of weights that can be assigned to an entry of the
- LC_COLLATE order keyword in the locale definition file. */
-/* FIXME: We don't support this at all right now, so this value is
- misleading at best. It's also lower than _POSIX2_COLL_WEIGHTS_MAX
- which is not good. So, for now we deliberately not define it even
- though it was defined in the former syslimits.h file. */
-#undef COLL_WEIGHTS_MAX
-/* #define COLL_WEIGHTS_MAX >= _POSIX2_COLL_WEIGHTS_MAX */
-
-/* Maximum number of expressions that can be nested within parentheses
- by the expr utility. */
-#undef EXPR_NEST_MAX
-#define EXPR_NEST_MAX 32
-
-/* Maximum bytes of a text utility's input line */
-#undef LINE_MAX
-#define LINE_MAX 2048
-
-/* Max num groups for a user, value taken from NT documentation */
-/* Must match <sys/param.h> NGROUPS */
-#undef NGROUPS_MAX
-#define NGROUPS_MAX 1024
-
-/* Maximum number of repeated occurrences of a regular expression when
- using the interval notation \{m,n\} */
-#undef RE_DUP_MAX
-#define RE_DUP_MAX 255
-
-
-/* POSIX values */
-/* These should never vary from one system type to another */
-/* They represent the minimum values that POSIX systems must support.
- POSIX-conforming apps must not require larger values. */
-
-/* Maximum Values */
-
-#define _POSIX_CLOCKRES_MIN 20000000
-
-/* Minimum Values */
-
-#define _POSIX_AIO_LISTIO_MAX 2
-#define _POSIX_AIO_MAX 1
-#define _POSIX_ARG_MAX 4096
-#define _POSIX_CHILD_MAX 25
-#define _POSIX_DELAYTIMER_MAX 32
-#define _POSIX_HOST_NAME_MAX 255
-#define _POSIX_LINK_MAX 8
-#define _POSIX_LOGIN_NAME_MAX 9
-#define _POSIX_MAX_CANON 255
-#define _POSIX_MAX_INPUT 255
-#define _POSIX_MQ_OPEN_MAX 8
-#define _POSIX_MQ_PRIO_MAX 32
-#define _POSIX_NAME_MAX 14
-#define _POSIX_NGROUPS_MAX 8
-#define _POSIX_OPEN_MAX 20
-#define _POSIX_PATH_MAX 256
-#define _POSIX_PIPE_BUF 512
-#define _POSIX_RE_DUP_MAX 255
-#define _POSIX_RTSIG_MAX 8
-#define _POSIX_SEM_NSEMS_MAX 256
-#define _POSIX_SEM_VALUE_MAX 32767
-#define _POSIX_SIGQUEUE_MAX 32
-#define _POSIX_SSIZE_MAX 32767
-#define _POSIX_STREAM_MAX 8
-#define _POSIX_SS_REPL_MAX 4
-#define _POSIX_SYMLINK_MAX 255
-#define _POSIX_SYMLOOP_MAX 8
-#define _POSIX_THREAD_DESTRUCTOR_ITERATIONS 4
-#define _POSIX_THREAD_KEYS_MAX 128
-#define _POSIX_THREAD_THREADS_MAX 64
-#define _POSIX_TIMER_MAX 32
-#define _POSIX_TRACE_EVENT_NAME_MAX 30
-#define _POSIX_TRACE_NAME_MAX 8
-#define _POSIX_TRACE_SYS_MAX 8
-#define _POSIX_TRACE_USER_EVENT_MAX 32
-#define _POSIX_TTY_NAME_MAX 9
-#define _POSIX_TZNAME_MAX 6
-
-#define _POSIX2_BC_BASE_MAX 99
-#define _POSIX2_BC_DIM_MAX 2048
-#define _POSIX2_BC_SCALE_MAX 99
-#define _POSIX2_BC_STRING_MAX 1000
-#define _POSIX2_COLL_WEIGHTS_MAX 2
-#define _POSIX2_EXPR_NEST_MAX 32
-#define _POSIX2_LINE_MAX 2048
-#define _POSIX2_RE_DUP_MAX 255
-
-#define _XOPEN_IOV_MAX 16
-#define _XOPEN_NAME_MAX 255
-#define _XOPEN_PATH_MAX 1024
-
-/* Other Invariant Values */
-
-#define NL_ARGMAX 9
-#define NL_LANGMAX 14
-#define NL_MSGMAX 32767
-#define NL_NMAX INT_MAX
-#define NL_SETMAX 255
-#define NL_TEXTMAX _POSIX2_LINE_MAX
-
-/* Default process priority. */
-#undef NZERO
-#define NZERO 20
-
-#endif /* _MACH_MACHLIMITS_H_ */
-#endif /* _LIMITS_H___ */
diff --git a/winsup/cygwin/include/machine/elf.h b/winsup/cygwin/include/machine/elf.h
deleted file mode 100644
index 94278118f..000000000
--- a/winsup/cygwin/include/machine/elf.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/*-
- * Copyright (c) 1996-1997 John D. Polstra.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD$
- */
-
-#ifndef _MACHINE_ELF_H_
-#define _MACHINE_ELF_H_ 1
-
-/*
- * ELF definitions for the i386 architecture.
- */
-
-#include <sys/elf32.h> /* Definitions common to all 32 bit architectures. */
-#if defined(__ELF_WORD_SIZE) && __ELF_WORD_SIZE == 64
-#include <sys/elf64.h> /* Definitions common to all 64 bit architectures. */
-#endif
-
-#ifndef __ELF_WORD_SIZE
-#define __ELF_WORD_SIZE 32 /* Used by <sys/elf_generic.h> */
-#endif
-
-#include <sys/elf_generic.h>
-
-#define ELF_ARCH EM_386
-
-#define ELF_MACHINE_OK(x) ((x) == EM_386 || (x) == EM_486)
-
-/*
- * Auxiliary vector entries for passing information to the interpreter.
- *
- * The i386 supplement to the SVR4 ABI specification names this "auxv_t",
- * but POSIX lays claim to all symbols ending with "_t".
- */
-
-typedef struct { /* Auxiliary vector entry on initial stack */
- int a_type; /* Entry type. */
- union {
- long a_val; /* Integer value. */
- void *a_ptr; /* Address. */
- void (*a_fcn)(void); /* Function pointer (not used). */
- } a_un;
-} Elf32_Auxinfo;
-
-#if __ELF_WORD_SIZE == 64
-/* Fake for amd64 loader support */
-typedef struct {
- int fake;
-} Elf64_Auxinfo;
-#endif
-
-__ElfType(Auxinfo);
-
-/* Values for a_type. */
-#define AT_NULL 0 /* Terminates the vector. */
-#define AT_IGNORE 1 /* Ignored entry. */
-#define AT_EXECFD 2 /* File descriptor of program to load. */
-#define AT_PHDR 3 /* Program header of program already loaded. */
-#define AT_PHENT 4 /* Size of each program header entry. */
-#define AT_PHNUM 5 /* Number of program header entries. */
-#define AT_PAGESZ 6 /* Page size in bytes. */
-#define AT_BASE 7 /* Interpreter's base address. */
-#define AT_FLAGS 8 /* Flags (unused for i386). */
-#define AT_ENTRY 9 /* Where interpreter should transfer control. */
-#define AT_NOTELF 10 /* Program is not ELF ?? */
-#define AT_UID 11 /* Real uid. */
-#define AT_EUID 12 /* Effective uid. */
-#define AT_GID 13 /* Real gid. */
-#define AT_EGID 14 /* Effective gid. */
-#define AT_EXECPATH 15 /* Path to the executable. */
-#define AT_CANARY 16 /* Canary for SSP. */
-#define AT_CANARYLEN 17 /* Length of the canary. */
-#define AT_OSRELDATE 18 /* OSRELDATE. */
-#define AT_NCPUS 19 /* Number of CPUs. */
-#define AT_PAGESIZES 20 /* Pagesizes. */
-#define AT_PAGESIZESLEN 21 /* Number of pagesizes. */
-#define AT_STACKPROT 23 /* Initial stack protection. */
-
-#define AT_COUNT 24 /* Count of defined aux entry types. */
-
-/*
- * Relocation types.
- */
-
-#define R_386_COUNT 38 /* Count of defined relocation types. */
-
-/* Define "machine" characteristics */
-#define ELF_TARG_CLASS ELFCLASS32
-#define ELF_TARG_DATA ELFDATA2LSB
-#define ELF_TARG_MACH EM_386
-#define ELF_TARG_VER 1
-
-#define ET_DYN_LOAD_ADDR 0x01001000
-
-#endif /* !_MACHINE_ELF_H_ */
diff --git a/winsup/cygwin/include/machine/stdlib.h b/winsup/cygwin/include/machine/stdlib.h
deleted file mode 100644
index 2d1539e2c..000000000
--- a/winsup/cygwin/include/machine/stdlib.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/* machine/stdlib.h
-
- Copyright 2005 Red Hat, Inc.
-
- This file is part of Cygwin.
-
- This software is a copyrighted work licensed under the terms of the
- Cygwin license. Please consult the file "CYGWIN_LICENSE" for
- details. */
-
-#ifndef _MACHSTDLIB_H_
-#define _MACHSTDLIB_H_
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-char *mkdtemp (char *);
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* _MACHSTDLIB_H_ */
diff --git a/winsup/cygwin/include/mapi.h b/winsup/cygwin/include/mapi.h
deleted file mode 100644
index e2d47e264..000000000
--- a/winsup/cygwin/include/mapi.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/* mapi.h
-
- Copyright 1997, 1998, 1999, 2000, 2001 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _MAPI_H
-#define _MAPI_H
-
-/* Currently this doesn't include all the definitions. It does cover
- the parts of Simple MAPI required to send mail. */
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
- /* FIXME: should this be elsewhere? */
-typedef unsigned long FLAGS;
-
- /* FIXME: should this be elsewhere? */
-#define SUCCESS_SUCCESS 0
-
- /* FIXME: should this be elsewhere? */
-typedef unsigned long LHANDLE, FAR *LPLHANDLE;
-
-
-#define MAPI_E_AMBIGUOUS_RECIPIENT 0x15
-#define MAPI_E_ATTACHMENT_NOT_FOUND 0xb
-#define MAPI_E_ATTACHMENT_OPEN_FAILURE 0xc
-#define MAPI_E_BAD_RECIPTYPE 0xf
-#define MAPI_E_FAILURE 0x2
-#define MAPI_E_INSUFFICIENT_MEMORY 0x5
-#define MAPI_E_INVALID_RECIPS 0x19
-#define MAPI_E_LOGIN_FAILURE 0x3
-#define MAPI_E_TEXT_TOO_LARGE 0x12
-#define MAPI_E_TOO_MANY_FILES 0x9
-#define MAPI_E_TOO_MANY_RECIPIENTS 0xa
-#define MAPI_E_UNKNOWN_RECIPIENT 0xe
-#define MAPI_E_USER_ABORT 0x1
-#define MAPI_E_TEXT_TOO_LARGE 0x12
-#define MAPI_DIALOG 0x8
-#define MAPI_NEW_SESSION 0x2
-#define MAPI_LOGON_UI 0x1
-#define MAPI_RECEIPT_REQUESTED 0x2
-#define MAPI_SENT 0x4
-#define MAPI_UNREAD 0x1
-#define MAPI_OLE 0x1
-#define MAPI_OLE_STATIC 0x2
-
-#define MAPI_ORIG 0
-#define MAPI_TO 1
-#define MAPI_CC 2
-#define MAPI_BCC 3
-
-typedef struct
-{
- ULONG ulReserved;
- ULONG flFlags;
- ULONG nPosition;
- LPTSTR lpszPathName;
- LPTSTR lpszFileName;
- LPVOID lpFileType;
-} MapiFileDesc, FAR *lpMapiFileDesc;
-
-typedef struct
-{
- ULONG ulReserved;
- ULONG ulRecipClass;
- LPTSTR lpszName;
- LPTSTR lpszAddress;
- ULONG ulEIDSize;
- LPVOID lpEntryID;
-} MapiRecipDesc, FAR *lpMapiRecipDesc;
-
-typedef struct
-{
- ULONG ulReserved;
- LPTSTR lpszSubject;
- LPTSTR lpszNoteText;
- LPTSTR lpszMessageType;
- LPTSTR lpszDateReceived;
- LPTSTR lpszConversationID;
- FLAGS flFlags;
- lpMapiRecipDesc lpOriginator;
- ULONG nRecipCount;
- lpMapiRecipDesc lpRecips;
- ULONG nFileCount;
- lpMapiFileDesc lpFiles;
-} MapiMessage, FAR *lpMapiMessage;
-
-ULONG FAR PASCAL MAPISendMail (LHANDLE, ULONG, lpMapiMessage, FLAGS, ULONG);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _MAPI_H */
diff --git a/winsup/cygwin/include/memory.h b/winsup/cygwin/include/memory.h
deleted file mode 100644
index 491f4855e..000000000
--- a/winsup/cygwin/include/memory.h
+++ /dev/null
@@ -1,17 +0,0 @@
-/* memory.h
-
- Copyright 1998, 2000, 2001 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _MEMORY_H
-#define _MEMORY_H
-
-/* This allows more things to compile. */
-#include <string.h>
-
-#endif /* _MEMORY_H */
diff --git a/winsup/cygwin/include/mntent.h b/winsup/cygwin/include/mntent.h
deleted file mode 100644
index 5a0c13054..000000000
--- a/winsup/cygwin/include/mntent.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/* mntent.h
-
- Copyright 1996, 1998, 1999, 2000, 2001, 2006, 2009, 2010, 2012 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _MNTENT_H
-#define _MNTENT_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct mntent
-{
- char *mnt_fsname;
- char *mnt_dir;
- char *mnt_type;
- char *mnt_opts;
- int mnt_freq;
- int mnt_passno;
-};
-
-#ifndef _NOMNTENT_FUNCS
-#include <stdio.h>
-FILE *setmntent (const char *__filep, const char *__type);
-struct mntent *getmntent (FILE *__filep);
-struct mntent *getmntent_r (FILE *, struct mntent *, char *, int);
-int endmntent (FILE *__filep);
-#endif
-
-#ifndef _NOMNTENT_MACROS
-
-#include <paths.h>
-
-/* The following two defines are deprecated. Use the equivalent
- names from paths.h instead. */
-#ifndef MNTTAB
-#define MNTTAB _PATH_MNTTAB
-#endif
-/* This next file does exist, but the implementation of these
- functions does not actually use it.
- However, applications need the define to pass to setmntent().
-*/
-#ifndef MOUNTED
-#define MOUNTED _PATH_MOUNTED
-#endif
-
-#endif /* !_NOMNTENT_MACROS */
-
-#ifdef __cplusplus
-};
-#endif
-
-#endif /* _MNTENT_H */
diff --git a/winsup/cygwin/include/monetary.h b/winsup/cygwin/include/monetary.h
deleted file mode 100644
index 8b525e961..000000000
--- a/winsup/cygwin/include/monetary.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*-
- * Copyright (c) 2001 Alexey Zelkin <phantom@FreeBSD.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD$
- */
-
-#ifndef _MONETARY_H_
-#define _MONETARY_H_
-
-#include <sys/cdefs.h>
-#include <sys/types.h>
-
-__BEGIN_DECLS
-ssize_t strfmon(char * __restrict, size_t, const char * __restrict, ...);
-__END_DECLS
-
-#endif /* !_MONETARY_H_ */
diff --git a/winsup/cygwin/include/mqueue.h b/winsup/cygwin/include/mqueue.h
deleted file mode 100644
index 59c32dbe4..000000000
--- a/winsup/cygwin/include/mqueue.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/* mqueue.h: POSIX message queue interface
-
- Copyright 2007 Red Hat, Inc.
-
- This file is part of Cygwin.
-
- This software is a copyrighted work licensed under the terms of the
- Cygwin license. Please consult the file "CYGWIN_LICENSE" for
- details. */
-
-#include <time.h>
-#include <sys/types.h>
-#include <sys/signal.h>
-#include <sys/cdefs.h>
-
-#ifndef _MQUEUE_H
-#define _MQUEUE_H
-
-__BEGIN_DECLS
-
-typedef intptr_t mqd_t;
-
-struct mq_attr {
- long mq_flags; /* Message queue flags */
- long mq_maxmsg; /* Max number of messages in queue */
- long mq_msgsize; /* Max message size */
- long mq_curmsgs; /* Current number of messages in queue */
-};
-
-int mq_close (mqd_t);
-int mq_getattr (mqd_t, struct mq_attr *);
-int mq_notify (mqd_t, const struct sigevent *);
-mqd_t mq_open (const char *, int, ...);
-ssize_t mq_receive (mqd_t, char *, size_t, unsigned int *);
-int mq_send (mqd_t, const char *, size_t, unsigned int);
-int mq_setattr (mqd_t, const struct mq_attr *, struct mq_attr *);
-ssize_t mq_timedreceive (mqd_t, char *, size_t, unsigned int *,
- const struct timespec *);
-int mq_timedsend (mqd_t, const char *, size_t, unsigned int,
- const struct timespec *);
-int mq_unlink (const char *name);
-
-__END_DECLS
-
-#endif /* _MQUEUE_H */
diff --git a/winsup/cygwin/include/net/if.h b/winsup/cygwin/include/net/if.h
deleted file mode 100644
index cba90d3f8..000000000
--- a/winsup/cygwin/include/net/if.h
+++ /dev/null
@@ -1,16 +0,0 @@
-/* net/if.h
-
- Copyright 1998, 2000, 2001 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _NET_IF_H
-#define _NET_IF_H
-
-#include <cygwin/if.h>
-
-#endif /* _NET_IF_H */
diff --git a/winsup/cygwin/include/netdb.h b/winsup/cygwin/include/netdb.h
deleted file mode 100644
index 863c19348..000000000
--- a/winsup/cygwin/include/netdb.h
+++ /dev/null
@@ -1,265 +0,0 @@
-/* Original linux netdb.h merged with winsock.h types */
-
-/*-
- * Copyright (c) 1980, 1983, 1988, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)netdb.h 8.1 (Berkeley) 6/2/93
- * netdb.h,v 1.1.1.1 1995/02/18 05:34:07 hjl Exp
- * -
- * Portions Copyright (c) 1993 by Digital Equipment Corporation.
- *
- * Permission to use, copy, modify and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies, and that
- * the name of Digital Equipment Corporation not be used in advertising or
- * publicity pertaining to distribution of the document or software without
- * specific, written prior permission.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT
- * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
- * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- * -
- * --Copyright--
- */
-
-#ifndef _NETDB_H_
-#define _NETDB_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <inttypes.h>
-#include <sys/socket.h>
-#ifndef __INSIDE_CYGWIN_NET__
-#include <netinet/in.h>
-#endif
-
-/*
- * Structures returned by network data base library. All addresses are
- * supplied in host order, and returned in network order (suitable for
- * use in system calls).
- */
-
- /* Different from the linux versions - note the shorts.. */
-struct hostent {
- const char *h_name; /* official name of host */
- char **h_aliases; /* alias list */
- short h_addrtype; /* host address type */
- short h_length; /* length of address */
- char **h_addr_list; /* list of addresses from name server */
-#define h_addr h_addr_list[0] /* address, for backward compatiblity */
-};
-
-/*
- * Assumption here is that a network number
- * fits in an unsigned long -- probably a poor one.
- */
-
-struct netent {
- char *n_name; /* official name of net */
- char **n_aliases; /* alias list */
- short n_addrtype; /* net address type */
- uint32_t n_net; /* network # */
-};
-
-struct servent {
- char *s_name; /* official service name */
- char **s_aliases; /* alias list */
- short s_port; /* port # */
- char *s_proto; /* protocol to use */
-};
-
-struct protoent
-{
- char *p_name; /* official protocol name */
- char **p_aliases; /* alias list */
- short p_proto; /* protocol # */
-};
-
-struct rpcent {
- char *r_name; /* name of server for this rpc program */
- char **r_aliases; /* alias list */
- int r_number; /* rpc program number */
-};
-
-#ifndef __INSIDE_CYGWIN_NET__
-struct addrinfo {
- int ai_flags; /* input flags */
- int ai_family; /* address family of socket */
- int ai_socktype; /* socket type */
- int ai_protocol; /* ai_protocol */
- socklen_t ai_addrlen; /* length of socket address */
- char *ai_canonname; /* canonical name of service location */
- struct sockaddr *ai_addr; /* socket address of socket */
- struct addrinfo *ai_next; /* pointer to next in list */
-};
-#endif
-
-/*
- * Error return codes from gethostbyname() and gethostbyaddr()
- * (left in extern int h_errno).
- */
-
-#ifdef __INSIDE_CYGWIN_NET__
-extern int h_errno;
-#else
-extern __declspec(dllimport) int h_errno;
-/* Some packages expect h_errno to be a macro, otherwise they redeclare
- h_errno, which leads to spurious warnings. */
-#define h_errno h_errno
-#endif
-
-#define NETDB_INTERNAL -1 /* see errno */
-#define NETDB_SUCCESS 0 /* no problem */
-#define HOST_NOT_FOUND 1 /* Authoritative Answer Host not found */
-#define TRY_AGAIN 2 /* Non-Authoritive Host not found, or SERVERFAIL */
-#define NO_RECOVERY 3 /* Non recoverable errors, FORMERR, REFUSED, NOTIMP */
-#define NO_DATA 4 /* Valid name, no data record of requested type */
-#define NO_ADDRESS NO_DATA /* no address, look for MX record */
-
-/* Flag values for getaddrinfo function. */
-#define AI_PASSIVE 0x1 /* Intend socket address for bind. */
-#define AI_CANONNAME 0x2 /* Return canonical node name. */
-#define AI_NUMERICHOST 0x4 /* Input is address, don't resolve. */
-#define AI_NUMERICSERV 0x8 /* Input is port number, don't resolve. */
-#define AI_ALL 0x100 /* Return v4-mapped and v6 addresses. */
-#define AI_ADDRCONFIG 0x400 /* Only available on Vista. Unchangable default
- on older systems. */
-#define AI_V4MAPPED 0x800
-/* Glibc extensions. We use numerical values taken by winsock-specific
- extensions. */
-#define AI_IDN 0x4000 /* Encode IDN input from current local to
- punycode per RFC 3490. */
-#define AI_CANONIDN 0x8000 /* Convert ai_canonname from punycode to IDN
- in current locale. */
-#define AI_IDN_ALLOW_UNASSIGNED 0x10000 /* Allow unassigned code points in
- input string. */
-#define AI_IDN_USE_STD3_ASCII_RULES 0x20000 /* Filter ASCII chars according to
- STD3 rules. */
-
-/* Flag values for getnameinfo function. */
-#define NI_NOFQDN 0x1 /* Don't lookup hostname. */
-#define NI_NUMERICHOST 0x2 /* Return host address, rather than name. */
-#define NI_NAMEREQD 0x4 /* Not being able to resolve is an error. */
-#define NI_NUMERICSERV 0x8 /* Return port number, rather than name. */
-#define NI_DGRAM 0x10 /* Lookup datagram (UDP) service. */
-/* Glibc extensions. We use numerical values taken by winsock-specific
- extensions. */
-#define NI_IDN 0x4000 /* Decode name from punycode to IDN in
- current locale. */
-#define NI_IDN_ALLOW_UNASSIGNED 0x10000 /* Allow unassigned code points in
- output string. */
-#define NI_IDN_USE_STD3_ASCII_RULES 0x20000 /* Filter ASCII chars according to
- STD3 rules. */
-
-#define NI_MAXHOST 1025 /* Best effort maximum hostname length. */
-#define NI_MAXSERV 32 /* Best effort maximum service name length. */
-
-/* Error codes returned by getaddrinfo and getnameinfo. */
-#define EAI_ADDRFAMILY 1 /* Address family for hostname not supported */
-#define EAI_AGAIN 2 /* Temporary failure in name resolution */
-#define EAI_BADFLAGS 3 /* Bad value for ai_flags */
-#define EAI_FAIL 4 /* Non-recoverable failure in name resolution */
-#define EAI_FAMILY 5 /* ai_family not supported */
-#define EAI_MEMORY 6 /* Memory allocation failure */
-#define EAI_NODATA 7 /* No address associated with hostname */
-#define EAI_NONAME 8 /* Name or service not known */
-#define EAI_SERVICE 9 /* Servname not supported for ai_socktype */
-#define EAI_SOCKTYPE 10 /* ai_socktype not supported */
-#define EAI_SYSTEM 11 /* System error */
-#define EAI_BADHINTS 12 /* Invalid value for hints */
-#define EAI_PROTOCOL 13 /* Resolved protocol is unknown */
-#define EAI_OVERFLOW 14 /* An argument buffer overflowed */
-/* Glibc extensions. */
-#define EAI_IDN_ENCODE 15 /* Parameter string not correctly encoded */
-
-#ifndef __INSIDE_CYGWIN_NET__
-void endhostent (void);
-void endnetent (void);
-void endprotoent (void);
-void endservent (void);
-void endrpcent (void);
-struct hostent *gethostbyaddr (const char *, int, int);
-struct hostent *gethostbyname (const char *);
-struct hostent *gethostbyname2 (const char *, int);
-struct hostent *gethostent (void);
-struct netent *getnetbyaddr (long, int); /* u_long? */
-struct netent *getnetbyname (const char *);
-struct netent *getnetent (void);
-struct protoent *getprotobyname (const char *);
-struct protoent *getprotobynumber (int);
-struct protoent *getprotoent (void);
-struct servent *getservbyname (const char *, const char *);
-struct servent *getservbyport (int, const char *);
-struct servent *getservent (void);
-struct rpcent *getrpcent (void);
-struct rpcent *getrpcbyname (const char *);
-struct rpcent *getrpcbynumber (int);
-const char *hstrerror (int);
-void herror (const char *);
-void sethostent (int);
-void setnetent (int);
-void setprotoent (int);
-void setservent (int);
-void setrpcent (int);
-void freeaddrinfo (struct addrinfo *);
-const char *gai_strerror (int);
-int getaddrinfo (const char *, const char *,
- const struct addrinfo *, struct addrinfo **);
-int getnameinfo (const struct sockaddr *, socklen_t, char *,
- socklen_t, char *, socklen_t, int);
-
-int rcmd (char **, uint16_t, const char *, const char *,
- const char *, int *);
-int rcmd_af (char **, uint16_t, const char *, const char *,
- const char *, int *, int);
-int rexec (char **, uint16_t rport, char *, char *, char *, int *);
-int rresvport (int *);
-int rresvport_af (int *, int);
-int iruserok (unsigned long, int, const char *, const char *);
-int iruserok_sa (const void *, int, int, const char *,
- const char *);
-int ruserok (const char *, int, const char *, const char *);
-#endif
-
-#ifdef __cplusplus
-};
-#endif
-
-#endif /* !_NETDB_H_ */
-
diff --git a/winsup/cygwin/include/netinet/in.h b/winsup/cygwin/include/netinet/in.h
deleted file mode 100644
index 6d666312a..000000000
--- a/winsup/cygwin/include/netinet/in.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/* netinet/in.h
-
- Copyright 1998, 2000, 2001, 2006 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _NETINET_IN_H
-#define _NETINET_IN_H
-
-#include <cygwin/in.h>
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-extern int bindresvport (int, struct sockaddr_in *);
-extern int bindresvport_sa (int, struct sockaddr *);
-
-#ifdef __cplusplus
-};
-#endif
-
-#endif /* _NETINET_IN_H */
diff --git a/winsup/cygwin/include/netinet/in_systm.h b/winsup/cygwin/include/netinet/in_systm.h
deleted file mode 100644
index 17b5feb8d..000000000
--- a/winsup/cygwin/include/netinet/in_systm.h
+++ /dev/null
@@ -1,16 +0,0 @@
-/* netinet/in_systm.h
-
- Copyright 2000, 2001 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _NETINET_IN_SYSTM_H
-#define _NETINET_IN_SYSTM_H
-
-#include <cygwin/in_systm.h>
-
-#endif /* _NETINET_IN_SYSTM_H */
diff --git a/winsup/cygwin/include/netinet/ip.h b/winsup/cygwin/include/netinet/ip.h
deleted file mode 100644
index dd701512e..000000000
--- a/winsup/cygwin/include/netinet/ip.h
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
- * Copyright (c) 1982, 1986, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)ip.h 8.2 (Berkeley) 6/1/94
- * $FreeBSD: src/sys/netinet/ip.h,v 1.17 1999/12/22 19:13:20 shin Exp $
- */
-
-#ifndef _NETINET_IP_H
-#define _NETINET_IP_H
-
-#include <netinet/in_systm.h>
-#include <netinet/in.h>
-#include <bits/endian.h>
-
-/*
- * Definitions for internet protocol version 4.
- * Per RFC 791, September 1981.
- */
-#define IPVERSION 4
-
-/*
- * Structure of an internet header, naked of options.
- */
-struct ip {
-#ifdef _IP_VHL
- u_char ip_vhl; /* version << 4 | header length >> 2 */
-#else
-#if __BYTE_ORDER == __LITTLE_ENDIAN
- u_int ip_hl:4, /* header length */
- ip_v:4; /* version */
-#endif
-#if __BYTE_ORDER == __BIG_ENDIAN
- u_int ip_v:4, /* version */
- ip_hl:4; /* header length */
-#endif
-#endif /* not _IP_VHL */
- u_char ip_tos; /* type of service */
- u_short ip_len; /* total length */
- u_short ip_id; /* identification */
- u_short ip_off; /* fragment offset field */
-#define IP_RF 0x8000 /* reserved fragment flag */
-#define IP_DF 0x4000 /* dont fragment flag */
-#define IP_MF 0x2000 /* more fragments flag */
-#define IP_OFFMASK 0x1fff /* mask for fragmenting bits */
- u_char ip_ttl; /* time to live */
- u_char ip_p; /* protocol */
- u_short ip_sum; /* checksum */
- struct in_addr ip_src,ip_dst; /* source and dest address */
-};
-
-#ifdef _IP_VHL
-#define IP_MAKE_VHL(v, hl) ((v) << 4 | (hl))
-#define IP_VHL_HL(vhl) ((vhl) & 0x0f)
-#define IP_VHL_V(vhl) ((vhl) >> 4)
-#define IP_VHL_BORING 0x45
-#endif
-
-#define IP_MAXPACKET 65535 /* maximum packet size */
-
-/*
- * Definitions for DiffServ Codepoints as per RFC2474
- */
-#define IPTOS_DSCP_CS0 0x00
-#define IPTOS_DSCP_CS1 0x20
-#define IPTOS_DSCP_AF11 0x28
-#define IPTOS_DSCP_AF12 0x30
-#define IPTOS_DSCP_AF13 0x38
-#define IPTOS_DSCP_CS2 0x40
-#define IPTOS_DSCP_AF21 0x48
-#define IPTOS_DSCP_AF22 0x50
-#define IPTOS_DSCP_AF23 0x58
-#define IPTOS_DSCP_CS3 0x60
-#define IPTOS_DSCP_AF31 0x68
-#define IPTOS_DSCP_AF32 0x70
-#define IPTOS_DSCP_AF33 0x78
-#define IPTOS_DSCP_CS4 0x80
-#define IPTOS_DSCP_AF41 0x88
-#define IPTOS_DSCP_AF42 0x90
-#define IPTOS_DSCP_AF43 0x98
-#define IPTOS_DSCP_CS5 0xa0
-#define IPTOS_DSCP_EF 0xb8
-#define IPTOS_DSCP_CS6 0xc0
-#define IPTOS_DSCP_CS7 0xe0
-
-/*
- * Definitions for DiffServ Class Selector Codepoints as defined by Linux.
- * Linux uses different names than OpenBSD, unfortunately.
- */
-#define IPTOS_CLASS_CS0 0x00
-#define IPTOS_CLASS_CS1 0x20
-#define IPTOS_CLASS_CS2 0x40
-#define IPTOS_CLASS_CS3 0x60
-#define IPTOS_CLASS_CS4 0x80
-#define IPTOS_CLASS_CS5 0xa0
-#define IPTOS_CLASS_CS6 0xc0
-#define IPTOS_CLASS_CS7 0xe0
-#define IPTOS_CLASS_DEFAULT IPTOS_CLASS_CS0
-/* Linux also defined masks and access macros. */
-#define IPTOS_CLASS_MASK 0xe0
-#define IPTOS_CLASS(cs) ((cs) & IPTOS_CLASS_MASK)
-#define IPTOS_DSCP_MASK 0xfc
-#define IPTOS_DSCP(cp) ((cp) & IPTOS_DSCP_MASK)
-
-/*
- * ECN (Explicit Congestion Notification) codepoints in RFC3168
- * mapped to the lower 2 bits of the TOS field.
- */
-#define IPTOS_ECN_NOTECT 0x00 /* not-ECT */
-#define IPTOS_ECN_ECT1 0x01 /* ECN-capable transport (1) */
-#define IPTOS_ECN_ECT0 0x02 /* ECN-capable transport (0) */
-#define IPTOS_ECN_CE 0x03 /* congestion experienced */
-#define IPTOS_ECN_MASK 0x03 /* ECN field mask */
-/* Linux also defined an access macro.
- * The name of IPTOS_ECN_NOTECT differs, too, unfortunately. */
-#define IPTOS_ECN(cn) ((cn) & IPTOS_ECN_MASK)
-#define IPTOS_ECN_NOT_ECT 0x00
-
-/*
- * Definitions for IP type of service per RFC1349 (ip_tos)
- * DEPRECATED
- */
-#ifndef IPTOS_LOWDELAY
-#define IPTOS_LOWDELAY 0x10
-#define IPTOS_THROUGHPUT 0x08
-#define IPTOS_RELIABILITY 0x04
-#endif
-#define IPTOS_MINCOST 0x02
-/* ECN RFC3168 obsoletes RFC2481, and these will be deprecated soon. */
-#define IPTOS_CE 0x01 /* congestion experienced */
-#define IPTOS_ECT 0x02 /* ECN-capable transport */
-
-/*
- * Definitions for IP precedence per RFC1195 (also in ip_tos) (hopefully unused)
- */
-#define IPTOS_PREC_NETCONTROL 0xe0
-#define IPTOS_PREC_INTERNETCONTROL 0xc0
-#define IPTOS_PREC_CRITIC_ECP 0xa0
-#define IPTOS_PREC_FLASHOVERRIDE 0x80
-#define IPTOS_PREC_FLASH 0x60
-#define IPTOS_PREC_IMMEDIATE 0x40
-#define IPTOS_PREC_PRIORITY 0x20
-#define IPTOS_PREC_ROUTINE 0x00
-
-
-/*
- * Definitions for options.
- */
-#define IPOPT_COPIED(o) ((o)&0x80)
-#define IPOPT_CLASS(o) ((o)&0x60)
-#define IPOPT_NUMBER(o) ((o)&0x1f)
-
-#define IPOPT_CONTROL 0x00
-#define IPOPT_RESERVED1 0x20
-#define IPOPT_DEBMEAS 0x40
-#define IPOPT_RESERVED2 0x60
-
-#define IPOPT_EOL 0 /* end of option list */
-#define IPOPT_NOP 1 /* no operation */
-
-#define IPOPT_RR 7 /* record packet route */
-#define IPOPT_TS 68 /* timestamp */
-#define IPOPT_SECURITY 130 /* provide s,c,h,tcc */
-#define IPOPT_LSRR 131 /* loose source route */
-#define IPOPT_SATID 136 /* satnet id */
-#define IPOPT_SSRR 137 /* strict source route */
-#define IPOPT_RA 148 /* router alert */
-
-/*
- * Offsets to fields in options other than EOL and NOP.
- */
-#define IPOPT_OPTVAL 0 /* option ID */
-#define IPOPT_OLEN 1 /* option length */
-#define IPOPT_OFFSET 2 /* offset within option */
-#define IPOPT_MINOFF 4 /* min value of above */
-
-/*
- * Time stamp option structure.
- */
-struct ip_timestamp {
- u_char ipt_code; /* IPOPT_TS */
- u_char ipt_len; /* size of structure (variable) */
- u_char ipt_ptr; /* index of current entry */
-#if __BYTE_ORDER == __LITTLE_ENDIAN
- u_int ipt_flg:4, /* flags, see below */
- ipt_oflw:4; /* overflow counter */
-#endif
-#if __BYTE_ORDER == __BIG_ENDIAN
- u_int ipt_oflw:4, /* overflow counter */
- ipt_flg:4; /* flags, see below */
-#endif
- union ipt_timestamp {
- n_long ipt_time[1];
- struct ipt_ta {
- struct in_addr ipt_addr;
- n_long ipt_time;
- } ipt_ta[1];
- } ipt_timestamp;
-};
-
-/* flag bits for ipt_flg */
-#define IPOPT_TS_TSONLY 0 /* timestamps only */
-#define IPOPT_TS_TSANDADDR 1 /* timestamps and addresses */
-#define IPOPT_TS_PRESPEC 3 /* specified modules only */
-
-/* bits for security (not byte swapped) */
-#define IPOPT_SECUR_UNCLASS 0x0000
-#define IPOPT_SECUR_CONFID 0xf135
-#define IPOPT_SECUR_EFTO 0x789a
-#define IPOPT_SECUR_MMMM 0xbc4d
-#define IPOPT_SECUR_RESTR 0xaf13
-#define IPOPT_SECUR_SECRET 0xd788
-#define IPOPT_SECUR_TOPSECRET 0x6bc5
-
-/*
- * Internet implementation parameters.
- */
-#define MAXTTL 255 /* maximum time to live (seconds) */
-#define IPDEFTTL 64 /* default ttl, from RFC 1340 */
-#define IPFRAGTTL 60 /* time to live for frags, slowhz */
-#define IPTTLDEC 1 /* subtracted when forwarding */
-
-#define IP_MSS 576 /* default maximum segment size */
-
-#endif
diff --git a/winsup/cygwin/include/netinet/ip6.h b/winsup/cygwin/include/netinet/ip6.h
deleted file mode 100644
index 3f4cad092..000000000
--- a/winsup/cygwin/include/netinet/ip6.h
+++ /dev/null
@@ -1,352 +0,0 @@
-/* $FreeBSD: src/sys/netinet/ip6.h,v 1.22 2013/04/10 00:26:22 svnexp Exp $ */
-/* $KAME: ip6.h,v 1.18 2001/03/29 05:34:30 itojun Exp $ */
-
-/*-
- * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the project nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*-
- * Copyright (c) 1982, 1986, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)ip.h 8.1 (Berkeley) 6/10/93
- */
-
-#ifndef _NETINET_IP6_H_
-#define _NETINET_IP6_H_
-
-/*
- * Definition for internet protocol version 6.
- * RFC 2460
- */
-
-struct ip6_hdr {
- union {
- struct ip6_hdrctl {
- u_int32_t ip6_un1_flow; /* 20 bits of flow-ID */
- u_int16_t ip6_un1_plen; /* payload length */
- u_int8_t ip6_un1_nxt; /* next header */
- u_int8_t ip6_un1_hlim; /* hop limit */
- } ip6_un1;
- u_int8_t ip6_un2_vfc; /* 4 bits version, top 4 bits class */
- } ip6_ctlun;
- struct in6_addr ip6_src; /* source address */
- struct in6_addr ip6_dst; /* destination address */
-} __packed;
-
-#define ip6_vfc ip6_ctlun.ip6_un2_vfc
-#define ip6_flow ip6_ctlun.ip6_un1.ip6_un1_flow
-#define ip6_plen ip6_ctlun.ip6_un1.ip6_un1_plen
-#define ip6_nxt ip6_ctlun.ip6_un1.ip6_un1_nxt
-#define ip6_hlim ip6_ctlun.ip6_un1.ip6_un1_hlim
-#define ip6_hops ip6_ctlun.ip6_un1.ip6_un1_hlim
-
-#define IPV6_VERSION 0x60
-#define IPV6_VERSION_MASK 0xf0
-
-#if BYTE_ORDER == BIG_ENDIAN
-#define IPV6_FLOWINFO_MASK 0x0fffffff /* flow info (28 bits) */
-#define IPV6_FLOWLABEL_MASK 0x000fffff /* flow label (20 bits) */
-#else
-#if BYTE_ORDER == LITTLE_ENDIAN
-#define IPV6_FLOWINFO_MASK 0xffffff0f /* flow info (28 bits) */
-#define IPV6_FLOWLABEL_MASK 0xffff0f00 /* flow label (20 bits) */
-#endif /* LITTLE_ENDIAN */
-#endif
-#if 1
-/* ECN bits proposed by Sally Floyd */
-#define IP6TOS_CE 0x01 /* congestion experienced */
-#define IP6TOS_ECT 0x02 /* ECN-capable transport */
-#endif
-
-/*
- * Extension Headers
- */
-
-struct ip6_ext {
- u_int8_t ip6e_nxt;
- u_int8_t ip6e_len;
-} __packed;
-
-/* Hop-by-Hop options header */
-/* XXX should we pad it to force alignment on an 8-byte boundary? */
-struct ip6_hbh {
- u_int8_t ip6h_nxt; /* next header */
- u_int8_t ip6h_len; /* length in units of 8 octets */
- /* followed by options */
-} __packed;
-
-/* Destination options header */
-/* XXX should we pad it to force alignment on an 8-byte boundary? */
-struct ip6_dest {
- u_int8_t ip6d_nxt; /* next header */
- u_int8_t ip6d_len; /* length in units of 8 octets */
- /* followed by options */
-} __packed;
-
-/* Option types and related macros */
-#define IP6OPT_PAD1 0x00 /* 00 0 00000 */
-#define IP6OPT_PADN 0x01 /* 00 0 00001 */
-#define IP6OPT_JUMBO 0xC2 /* 11 0 00010 = 194 */
-#define IP6OPT_NSAP_ADDR 0xC3 /* 11 0 00011 */
-#define IP6OPT_TUNNEL_LIMIT 0x04 /* 00 0 00100 */
-#ifndef _KERNEL
-#define IP6OPT_RTALERT 0x05 /* 00 0 00101 (KAME definition) */
-#endif
-#define IP6OPT_ROUTER_ALERT 0x05 /* 00 0 00101 (RFC3542, recommended) */
-
-#define IP6OPT_RTALERT_LEN 4
-#define IP6OPT_RTALERT_MLD 0 /* Datagram contains an MLD message */
-#define IP6OPT_RTALERT_RSVP 1 /* Datagram contains an RSVP message */
-#define IP6OPT_RTALERT_ACTNET 2 /* contains an Active Networks msg */
-#define IP6OPT_MINLEN 2
-
-#define IP6OPT_EID 0x8a /* 10 0 01010 */
-
-#define IP6OPT_TYPE(o) ((o) & 0xC0)
-#define IP6OPT_TYPE_SKIP 0x00
-#define IP6OPT_TYPE_DISCARD 0x40
-#define IP6OPT_TYPE_FORCEICMP 0x80
-#define IP6OPT_TYPE_ICMP 0xC0
-
-#define IP6OPT_MUTABLE 0x20
-
-/* IPv6 options: common part */
-struct ip6_opt {
- u_int8_t ip6o_type;
- u_int8_t ip6o_len;
-} __packed;
-
-/* Jumbo Payload Option */
-struct ip6_opt_jumbo {
- u_int8_t ip6oj_type;
- u_int8_t ip6oj_len;
- u_int8_t ip6oj_jumbo_len[4];
-} __packed;
-#define IP6OPT_JUMBO_LEN 6
-
-/* NSAP Address Option */
-struct ip6_opt_nsap {
- u_int8_t ip6on_type;
- u_int8_t ip6on_len;
- u_int8_t ip6on_src_nsap_len;
- u_int8_t ip6on_dst_nsap_len;
- /* followed by source NSAP */
- /* followed by destination NSAP */
-} __packed;
-
-/* Tunnel Limit Option */
-struct ip6_opt_tunnel {
- u_int8_t ip6ot_type;
- u_int8_t ip6ot_len;
- u_int8_t ip6ot_encap_limit;
-} __packed;
-
-/* Router Alert Option */
-struct ip6_opt_router {
- u_int8_t ip6or_type;
- u_int8_t ip6or_len;
- u_int8_t ip6or_value[2];
-} __packed;
-/* Router alert values (in network byte order) */
-#if BYTE_ORDER == BIG_ENDIAN
-#define IP6_ALERT_MLD 0x0000
-#define IP6_ALERT_RSVP 0x0001
-#define IP6_ALERT_AN 0x0002
-#else
-#if BYTE_ORDER == LITTLE_ENDIAN
-#define IP6_ALERT_MLD 0x0000
-#define IP6_ALERT_RSVP 0x0100
-#define IP6_ALERT_AN 0x0200
-#endif /* LITTLE_ENDIAN */
-#endif
-
-/* Routing header */
-struct ip6_rthdr {
- u_int8_t ip6r_nxt; /* next header */
- u_int8_t ip6r_len; /* length in units of 8 octets */
- u_int8_t ip6r_type; /* routing type */
- u_int8_t ip6r_segleft; /* segments left */
- /* followed by routing type specific data */
-} __packed;
-
-/* Type 0 Routing header, deprecated by RFC 5095. */
-struct ip6_rthdr0 {
- u_int8_t ip6r0_nxt; /* next header */
- u_int8_t ip6r0_len; /* length in units of 8 octets */
- u_int8_t ip6r0_type; /* always zero */
- u_int8_t ip6r0_segleft; /* segments left */
- u_int32_t ip6r0_reserved; /* reserved field */
- /* followed by up to 127 struct in6_addr */
-} __packed;
-
-/* Fragment header */
-struct ip6_frag {
- u_int8_t ip6f_nxt; /* next header */
- u_int8_t ip6f_reserved; /* reserved field */
- u_int16_t ip6f_offlg; /* offset, reserved, and flag */
- u_int32_t ip6f_ident; /* identification */
-} __packed;
-
-#if BYTE_ORDER == BIG_ENDIAN
-#define IP6F_OFF_MASK 0xfff8 /* mask out offset from _offlg */
-#define IP6F_RESERVED_MASK 0x0006 /* reserved bits in ip6f_offlg */
-#define IP6F_MORE_FRAG 0x0001 /* more-fragments flag */
-#else /* BYTE_ORDER == LITTLE_ENDIAN */
-#define IP6F_OFF_MASK 0xf8ff /* mask out offset from _offlg */
-#define IP6F_RESERVED_MASK 0x0600 /* reserved bits in ip6f_offlg */
-#define IP6F_MORE_FRAG 0x0100 /* more-fragments flag */
-#endif /* BYTE_ORDER == LITTLE_ENDIAN */
-
-/*
- * Internet implementation parameters.
- */
-#define IPV6_MAXHLIM 255 /* maximum hoplimit */
-#define IPV6_DEFHLIM 64 /* default hlim */
-#define IPV6_FRAGTTL 120 /* ttl for fragment packets, in slowtimo tick */
-#define IPV6_HLIMDEC 1 /* subtracted when forwarding */
-
-#define IPV6_MMTU 1280 /* minimal MTU and reassembly. 1024 + 256 */
-#define IPV6_MAXPACKET 65535 /* ip6 max packet size without Jumbo payload*/
-#define IPV6_MAXOPTHDR 2048 /* max option header size, 256 64-bit words */
-
-#ifdef _KERNEL
-/*
- * IP6_EXTHDR_CHECK ensures that region between the IP6 header and the
- * target header (including IPv6 itself, extension headers and
- * TCP/UDP/ICMP6 headers) are contiguous. KAME requires drivers
- * to store incoming data into one internal mbuf or one or more external
- * mbufs(never into two or more internal mbufs). Thus, the third case is
- * supposed to never be matched but is prepared just in case.
- */
-
-#define IP6_EXTHDR_CHECK(m, off, hlen, ret) \
-do { \
- if ((m)->m_next != NULL) { \
- if (((m)->m_flags & M_LOOP) && \
- ((m)->m_len < (off) + (hlen)) && \
- (((m) = m_pullup((m), (off) + (hlen))) == NULL)) { \
- IP6STAT_INC(ip6s_exthdrtoolong); \
- return ret; \
- } else if ((m)->m_flags & M_EXT) { \
- if ((m)->m_len < (off) + (hlen)) { \
- IP6STAT_INC(ip6s_exthdrtoolong); \
- m_freem(m); \
- return ret; \
- } \
- } else { \
- if ((m)->m_len < (off) + (hlen)) { \
- IP6STAT_INC(ip6s_exthdrtoolong); \
- m_freem(m); \
- return ret; \
- } \
- } \
- } else { \
- if ((m)->m_len < (off) + (hlen)) { \
- IP6STAT_INC(ip6s_tooshort); \
- in6_ifstat_inc(m->m_pkthdr.rcvif, ifs6_in_truncated); \
- m_freem(m); \
- return ret; \
- } \
- } \
-} while (/*CONSTCOND*/ 0)
-
-/*
- * IP6_EXTHDR_GET ensures that intermediate protocol header (from "off" to
- * "len") is located in single mbuf, on contiguous memory region.
- * The pointer to the region will be returned to pointer variable "val",
- * with type "typ".
- * IP6_EXTHDR_GET0 does the same, except that it aligns the structure at the
- * very top of mbuf. GET0 is likely to make memory copy than GET.
- *
- * XXX we're now testing this, needs m_pulldown()
- */
-#define IP6_EXTHDR_GET(val, typ, m, off, len) \
-do { \
- struct mbuf *t; \
- int tmp; \
- if ((m)->m_len >= (off) + (len)) \
- (val) = (typ)(mtod((m), caddr_t) + (off)); \
- else { \
- t = m_pulldown((m), (off), (len), &tmp); \
- if (t) { \
- if (t->m_len < tmp + (len)) \
- panic("m_pulldown malfunction"); \
- (val) = (typ)(mtod(t, caddr_t) + tmp); \
- } else { \
- (val) = (typ)NULL; \
- (m) = NULL; \
- } \
- } \
-} while (/*CONSTCOND*/ 0)
-
-#define IP6_EXTHDR_GET0(val, typ, m, off, len) \
-do { \
- struct mbuf *t; \
- if ((off) == 0) \
- (val) = (typ)mtod(m, caddr_t); \
- else { \
- t = m_pulldown((m), (off), (len), NULL); \
- if (t) { \
- if (t->m_len < (len)) \
- panic("m_pulldown malfunction"); \
- (val) = (typ)mtod(t, caddr_t); \
- } else { \
- (val) = (typ)NULL; \
- (m) = NULL; \
- } \
- } \
-} while (/*CONSTCOND*/ 0)
-
-#endif /*_KERNEL*/
-
-#endif /* not _NETINET_IP6_H_ */
diff --git a/winsup/cygwin/include/netinet/ip_icmp.h b/winsup/cygwin/include/netinet/ip_icmp.h
deleted file mode 100644
index 43bae5324..000000000
--- a/winsup/cygwin/include/netinet/ip_icmp.h
+++ /dev/null
@@ -1,16 +0,0 @@
-/* netinet/ip_icmp.h
-
- Copyright 1998, 2000, 2001 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _NETINET_IP_ICMP_H
-#define _NETINET_IP_ICMP_H
-
-#include <cygwin/icmp.h>
-
-#endif /* _NETINET_IP_ICMP_H */
diff --git a/winsup/cygwin/include/netinet/tcp.h b/winsup/cygwin/include/netinet/tcp.h
deleted file mode 100644
index 8a6994326..000000000
--- a/winsup/cygwin/include/netinet/tcp.h
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Copyright (c) 1982, 1986, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)tcp.h 8.1 (Berkeley) 6/10/93
- * $FreeBSD: src/sys/netinet/tcp.h,v 1.13 2000/01/09 19:17:25 shin Exp $
- */
-
-#ifndef _NETINET_TCP_H
-#define _NETINET_TCP_H
-
-#include <bits/endian.h>
-
-typedef u_int32_t tcp_seq;
-typedef u_int32_t tcp_cc; /* connection count per rfc1644 */
-
-#define tcp6_seq tcp_seq /* for KAME src sync over BSD*'s */
-#define tcp6hdr tcphdr /* for KAME src sync over BSD*'s */
-
-/*
- * TCP header.
- * Per RFC 793, September, 1981.
- */
-struct tcphdr {
- u_short th_sport; /* source port */
- u_short th_dport; /* destination port */
- tcp_seq th_seq; /* sequence number */
- tcp_seq th_ack; /* acknowledgement number */
-#if __BYTE_ORDER == __LITTLE_ENDIAN
- u_int th_x2:4, /* (unused) */
- th_off:4; /* data offset */
-#endif
-#if __BYTE_ORDER == __BIG_ENDIAN
- u_int th_off:4, /* data offset */
- th_x2:4; /* (unused) */
-#endif
- u_char th_flags;
-#define TH_FIN 0x01
-#define TH_SYN 0x02
-#define TH_RST 0x04
-#define TH_PUSH 0x08
-#define TH_ACK 0x10
-#define TH_URG 0x20
-#define TH_FLAGS (TH_FIN|TH_SYN|TH_RST|TH_ACK|TH_URG)
-
- u_short th_win; /* window */
- u_short th_sum; /* checksum */
- u_short th_urp; /* urgent pointer */
-};
-
-#define TCPOPT_EOL 0
-#define TCPOPT_NOP 1
-#define TCPOPT_MAXSEG 2
-#define TCPOLEN_MAXSEG 4
-#define TCPOPT_WINDOW 3
-#define TCPOLEN_WINDOW 3
-#define TCPOPT_SACK_PERMITTED 4 /* Experimental */
-#define TCPOLEN_SACK_PERMITTED 2
-#define TCPOPT_SACK 5 /* Experimental */
-#define TCPOPT_TIMESTAMP 8
-#define TCPOLEN_TIMESTAMP 10
-#define TCPOLEN_TSTAMP_APPA (TCPOLEN_TIMESTAMP+2) /* appendix A */
-#define TCPOPT_TSTAMP_HDR \
- (TCPOPT_NOP<<24|TCPOPT_NOP<<16|TCPOPT_TIMESTAMP<<8|TCPOLEN_TIMESTAMP)
-
-#define TCPOPT_CC 11 /* CC options: RFC-1644 */
-#define TCPOPT_CCNEW 12
-#define TCPOPT_CCECHO 13
-#define TCPOLEN_CC 6
-#define TCPOLEN_CC_APPA (TCPOLEN_CC+2)
-#define TCPOPT_CC_HDR(ccopt) \
- (TCPOPT_NOP<<24|TCPOPT_NOP<<16|(ccopt)<<8|TCPOLEN_CC)
-
-/*
- * Default maximum segment size for TCP.
- * With an IP MSS of 576, this is 536,
- * but 512 is probably more convenient.
- * This should be defined as MIN(512, IP_MSS - sizeof (struct tcpiphdr)).
- */
-#define TCP_MSS 512
-
-/*
- * Default maximum segment size for TCP6.
- * With an IP6 MSS of 1280, this is 1220,
- * but 1024 is probably more convenient. (xxx kazu in doubt)
- * This should be defined as MIN(1024, IP6_MSS - sizeof (struct tcpip6hdr))
- */
-#define TCP6_MSS 1024
-
-#define TCP_MAXWIN 65535 /* largest value for (unscaled) window */
-#define TTCP_CLIENT_SND_WND 4096 /* dflt send window for T/TCP client */
-
-#define TCP_MAX_WINSHIFT 14 /* maximum window shift */
-
-#define TCP_MAXHLEN (0xf<<2) /* max length of header in bytes */
-#define TCP_MAXOLEN (TCP_MAXHLEN - sizeof(struct tcphdr))
- /* max space left for options */
-
-/*
- * User-settable options (used with setsockopt).
- */
-#ifndef TCP_NODELAY
-#define TCP_NODELAY 0x01 /* don't delay send to coalesce packets */
-#define TCP_MAXSEG 0x02 /* set maximum segment size */
-#endif
-#define TCP_NOPUSH 0x04 /* don't push last block of write */
-#define TCP_NOOPT 0x08 /* don't use TCP options */
-
-#endif
diff --git a/winsup/cygwin/include/netinet/udp.h b/winsup/cygwin/include/netinet/udp.h
deleted file mode 100644
index 61932720b..000000000
--- a/winsup/cygwin/include/netinet/udp.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1982, 1986, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)udp.h 8.1 (Berkeley) 6/10/93
- * $FreeBSD: src/sys/netinet/udp.h,v 1.7 1999/08/28 00:49:34 peter Exp $
- */
-
-#ifndef _NETINET_UDP_H
-#define _NETINET_UDP_H
-
-/*
- * Udp protocol header.
- * Per RFC 768, September, 1981.
- */
-struct udphdr {
- u_short uh_sport; /* source port */
- u_short uh_dport; /* destination port */
- u_short uh_ulen; /* udp length */
- u_short uh_sum; /* udp checksum */
-};
-
-#endif
diff --git a/winsup/cygwin/include/paths.h b/winsup/cygwin/include/paths.h
deleted file mode 100644
index 8934563d8..000000000
--- a/winsup/cygwin/include/paths.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/* paths.h
-
- Copyright 2000, 2001, 2002, 2003, 2010, 2011 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _PATHS_H_
-#define _PATHS_H_
-
-#define _PATH_BSHELL "/bin/sh"
-#define _PATH_CSHELL "/bin/csh"
-#define _PATH_DEFPATH "/bin"
-#define _PATH_DEV "/dev/"
-#define _PATH_DEVNULL "/dev/null"
-#define _PATH_LASTLOG "/var/log/lastlog"
-#define _PATH_MAILDIR "/var/spool/mail/"
-#define _PATH_MAN "/usr/share/man"
-#define _PATH_MEM "/dev/mem"
-#define _PATH_MNTTAB "/etc/fstab"
-#define _PATH_MOUNTED "/etc/mtab"
-#define _PATH_SHELLS "/etc/shells"
-#define _PATH_STDPATH "/bin:/usr/sbin:/sbin"
-#define _PATH_TMP "/tmp/"
-#define _PATH_TTY "/dev/tty"
-#define _PATH_UTMP "/var/run/utmp"
-#define _PATH_VARRUN "/var/run/"
-#define _PATH_VARTMP "/var/tmp/"
-#define _PATH_VI "/bin/vi"
-#define _PATH_WTMP "/var/log/wtmp"
-
-#endif /* _PATHS_H_ */
diff --git a/winsup/cygwin/include/poll.h b/winsup/cygwin/include/poll.h
deleted file mode 100644
index a836b2af4..000000000
--- a/winsup/cygwin/include/poll.h
+++ /dev/null
@@ -1,11 +0,0 @@
-/* poll.h
-
- Copyright 2000, 2001 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include <sys/poll.h>
diff --git a/winsup/cygwin/include/process.h b/winsup/cygwin/include/process.h
deleted file mode 100644
index 0436102b5..000000000
--- a/winsup/cygwin/include/process.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/* cygwin/process.h. Define spawn family of functions as provided by Cygwin.
- The original file of this name is a MS/DOS invention.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef __PROCESS_H_
-#define __PROCESS_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* For the exec functions, include unistd.h. */
-
-int spawnl(int mode, const char *path, const char *argv0, ...);
-int spawnle(int mode, const char *path, const char *argv0, ... /*, char * const *envp */);
-int spawnlp(int mode, const char *path, const char *argv0, ...);
-int spawnlpe(int mode, const char *path, const char *argv0, ... /*, char * const *envp */);
-
-int spawnv(int mode, const char *path, const char * const *argv);
-int spawnve(int mode, const char *path, const char * const *argv, const char * const *envp);
-int spawnvp(int mode, const char *path, const char * const *argv);
-int spawnvpe(int mode, const char *path, const char * const *argv, const char * const *envp);
-
-int cwait(int *, int, int);
-
-#define _P_WAIT 1
-#define _P_NOWAIT 2
-#define _P_OVERLAY 3
-#define _P_NOWAITO 4
-#define _P_DETACH 5
-
-#define WAIT_CHILD 1
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/winsup/cygwin/include/pthread.h b/winsup/cygwin/include/pthread.h
deleted file mode 100644
index 9ad8b6662..000000000
--- a/winsup/cygwin/include/pthread.h
+++ /dev/null
@@ -1,215 +0,0 @@
-/* pthread.h: POSIX pthread interface
-
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2011, 2012, 2013, 2014 Red Hat, Inc.
-
- Written by Marco Fuykschot <marco@ddi.nl>
-
- This file is part of Cygwin.
-
- This software is a copyrighted work licensed under the terms of the
- Cygwin license. Please consult the file "CYGWIN_LICENSE" for
- details. */
-
-#include <sys/types.h>
-#include <signal.h>
-#include <sched.h>
-#include <time.h>
-
-#ifndef _PTHREAD_H
-#define _PTHREAD_H
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-/* Defines. (These are correctly defined here as per
- http://www.opengroup.org/onlinepubs/7908799/xsh/pthread.h.html */
-
-#define PTHREAD_CANCEL_ASYNCHRONOUS 1
-/* defaults are enable, deferred */
-#define PTHREAD_CANCEL_ENABLE 0
-#define PTHREAD_CANCEL_DEFERRED 0
-#define PTHREAD_CANCEL_DISABLE 1
-#define PTHREAD_CANCELED ((void *)-1)
-/* this should be a value that can never be a valid address */
-#define PTHREAD_COND_INITIALIZER (pthread_cond_t)21
-#define PTHREAD_CREATE_DETACHED 1
-/* the default : joinable */
-#define PTHREAD_CREATE_JOINABLE 0
-#define PTHREAD_EXPLICIT_SCHED 1
-#define PTHREAD_INHERIT_SCHED 0
-#define PTHREAD_MUTEX_RECURSIVE 0
-#define PTHREAD_MUTEX_ERRORCHECK 1
-#define PTHREAD_MUTEX_NORMAL 2
-#define PTHREAD_MUTEX_DEFAULT PTHREAD_MUTEX_NORMAL
-/* this should be too low to ever be a valid address */
-#define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP (pthread_mutex_t)18
-#define PTHREAD_NORMAL_MUTEX_INITIALIZER_NP (pthread_mutex_t)19
-#define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP (pthread_mutex_t)20
-#define PTHREAD_MUTEX_INITIALIZER PTHREAD_NORMAL_MUTEX_INITIALIZER_NP
-#define PTHREAD_ONCE_INIT { PTHREAD_MUTEX_INITIALIZER, 0 }
-#if defined(_POSIX_THREAD_PRIO_INHERIT) && _POSIX_THREAD_PRIO_INHERIT >= 0
-#define PTHREAD_PRIO_NONE 0
-#define PTHREAD_PRIO_INHERIT 1
-#define PTHREAD_PRIO_PROTECT 2
-#endif
-#define PTHREAD_PROCESS_SHARED 1
-#define PTHREAD_PROCESS_PRIVATE 0
-#define PTHREAD_RWLOCK_INITIALIZER (pthread_rwlock_t)22
-/* process is the default */
-#define PTHREAD_SCOPE_PROCESS 0
-#define PTHREAD_SCOPE_SYSTEM 1
-
-/* Register Fork Handlers */
-int pthread_atfork (void (*)(void), void (*)(void), void (*)(void));
-
-/* Attributes */
-int pthread_attr_destroy (pthread_attr_t *);
-int pthread_attr_getdetachstate (const pthread_attr_t *, int *);
-int pthread_attr_getguardsize (const pthread_attr_t *, size_t *);
-int pthread_attr_getinheritsched (const pthread_attr_t *, int *);
-int pthread_attr_getschedparam (const pthread_attr_t *, struct sched_param *);
-int pthread_attr_getschedpolicy (const pthread_attr_t *, int *);
-int pthread_attr_getscope (const pthread_attr_t *, int *);
-int pthread_attr_getstack (const pthread_attr_t *, void **, size_t *);
-int pthread_attr_getstackaddr (const pthread_attr_t *, void **)
- __attribute__ ((__deprecated__));
-int pthread_attr_init (pthread_attr_t *);
-int pthread_attr_setdetachstate (pthread_attr_t *, int);
-int pthread_attr_setguardsize (pthread_attr_t *, size_t);
-int pthread_attr_setinheritsched (pthread_attr_t *, int);
-int pthread_attr_setschedparam (pthread_attr_t *, const struct sched_param *);
-int pthread_attr_setschedpolicy (pthread_attr_t *, int);
-int pthread_attr_setscope (pthread_attr_t *, int);
-
-#ifdef _POSIX_THREAD_ATTR_STACKADDR
-int pthread_attr_setstack (pthread_attr_t *, void *, size_t);
-int pthread_attr_setstackaddr (pthread_attr_t *, void *)
- __attribute__ ((__deprecated__));
-#endif
-
-#ifdef _POSIX_THREAD_ATTR_STACKSIZE
-int pthread_attr_getstacksize (const pthread_attr_t *, size_t *);
-int pthread_attr_setstacksize (pthread_attr_t *, size_t);
-#endif
-
-int pthread_cancel (pthread_t);
-/* Macros for cleanup_push and pop;
- * The function definitions are
-void pthread_cleanup_push (void (*routine)(void*), void *arg);
-void pthread_cleanup_pop (int execute);
-*/
-typedef void (*__cleanup_routine_type) (void *);
-typedef struct _pthread_cleanup_handler
-{
- __cleanup_routine_type function;
- void *arg;
- struct _pthread_cleanup_handler *next;
-} __pthread_cleanup_handler;
-
-void _pthread_cleanup_push (__pthread_cleanup_handler *handler);
-void _pthread_cleanup_pop (int execute);
-
-#define pthread_cleanup_push(_fn, _arg) { __pthread_cleanup_handler __cleanup_handler = \
- { _fn, _arg, NULL }; \
- _pthread_cleanup_push( &__cleanup_handler );
-#define pthread_cleanup_pop(_execute) _pthread_cleanup_pop( _execute ); }
-
-/* Condition variables */
-int pthread_cond_broadcast (pthread_cond_t *);
-int pthread_cond_destroy (pthread_cond_t *);
-int pthread_cond_init (pthread_cond_t *, const pthread_condattr_t *);
-int pthread_cond_signal (pthread_cond_t *);
-int pthread_cond_timedwait (pthread_cond_t *,
- pthread_mutex_t *, const struct timespec *);
-int pthread_cond_wait (pthread_cond_t *, pthread_mutex_t *);
-int pthread_condattr_destroy (pthread_condattr_t *);
-int pthread_condattr_getclock (const pthread_condattr_t *, clockid_t *);
-int pthread_condattr_getpshared (const pthread_condattr_t *, int *);
-int pthread_condattr_init (pthread_condattr_t *);
-int pthread_condattr_setclock (pthread_condattr_t *, clockid_t);
-int pthread_condattr_setpshared (pthread_condattr_t *, int);
-
-int pthread_create (pthread_t *, const pthread_attr_t *,
- void *(*)(void *), void *);
-int pthread_detach (pthread_t);
-int pthread_equal (pthread_t, pthread_t);
-void pthread_exit (void *) __attribute__ ((__noreturn__));
-int pthread_getcpuclockid (pthread_t, clockid_t *);
-int pthread_getschedparam (pthread_t, int *, struct sched_param *);
-void *pthread_getspecific (pthread_key_t);
-int pthread_join (pthread_t, void **);
-int pthread_key_create (pthread_key_t *, void (*)(void *));
-int pthread_key_delete (pthread_key_t);
-
-/* Mutex's */
-int pthread_mutex_destroy (pthread_mutex_t *);
-int pthread_mutex_getprioceiling (const pthread_mutex_t *, int *);
-int pthread_mutex_init (pthread_mutex_t *, const pthread_mutexattr_t *);
-int pthread_mutex_lock (pthread_mutex_t *);
-int pthread_mutex_setprioceiling (pthread_mutex_t *, int, int *);
-int pthread_mutex_trylock (pthread_mutex_t *);
-int pthread_mutex_unlock (pthread_mutex_t *);
-int pthread_mutexattr_destroy (pthread_mutexattr_t *);
-int pthread_mutexattr_getprioceiling (const pthread_mutexattr_t *, int *);
-int pthread_mutexattr_getprotocol (const pthread_mutexattr_t *, int *);
-int pthread_mutexattr_getpshared (const pthread_mutexattr_t *, int *);
-int pthread_mutexattr_gettype (const pthread_mutexattr_t *, int *);
-int pthread_mutexattr_init (pthread_mutexattr_t *);
-int pthread_mutexattr_setprioceiling (pthread_mutexattr_t *, int);
-int pthread_mutexattr_setprotocol (pthread_mutexattr_t *, int);
-int pthread_mutexattr_setpshared (pthread_mutexattr_t *, int);
-int pthread_mutexattr_settype (pthread_mutexattr_t *, int);
-
-/* Spinlocks */
-int pthread_spin_destroy (pthread_spinlock_t *);
-int pthread_spin_init (pthread_spinlock_t *, int);
-int pthread_spin_lock (pthread_spinlock_t *);
-int pthread_spin_trylock (pthread_spinlock_t *);
-int pthread_spin_unlock (pthread_spinlock_t *);
-
-/* RW Locks */
-int pthread_rwlock_destroy (pthread_rwlock_t *rwlock);
-int pthread_rwlock_init (pthread_rwlock_t *rwlock, const pthread_rwlockattr_t *attr);
-int pthread_rwlock_rdlock (pthread_rwlock_t *rwlock);
-int pthread_rwlock_tryrdlock (pthread_rwlock_t *rwlock);
-int pthread_rwlock_wrlock (pthread_rwlock_t *rwlock);
-int pthread_rwlock_trywrlock (pthread_rwlock_t *rwlock);
-int pthread_rwlock_unlock (pthread_rwlock_t *rwlock);
-int pthread_rwlockattr_init (pthread_rwlockattr_t *rwlockattr);
-int pthread_rwlockattr_getpshared (const pthread_rwlockattr_t *attr,
- int *pshared);
-int pthread_rwlockattr_setpshared (pthread_rwlockattr_t *attr, int pshared);
-int pthread_rwlockattr_destroy (pthread_rwlockattr_t *rwlockattr);
-
-int pthread_once (pthread_once_t *, void (*)(void));
-
-/* Concurrency levels - X/Open interface */
-int pthread_getconcurrency (void);
-int pthread_setconcurrency (int);
-
-
-pthread_t pthread_self (void);
-int pthread_setcancelstate (int, int *);
-int pthread_setcanceltype (int, int *);
-int pthread_setschedparam (pthread_t, int, const struct sched_param *);
-int pthread_setschedprio (pthread_t, int);
-int pthread_setspecific (pthread_key_t, const void *);
-void pthread_testcancel (void);
-
-/* Non posix calls */
-
-int pthread_getattr_np (pthread_t, pthread_attr_t *);
-int pthread_sigqueue (pthread_t *, int, const union sigval);
-int pthread_suspend (pthread_t);
-int pthread_continue (pthread_t);
-int pthread_yield (void);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _PTHREAD_H */
diff --git a/winsup/cygwin/include/pty.h b/winsup/cygwin/include/pty.h
deleted file mode 100644
index 7b92a2b4d..000000000
--- a/winsup/cygwin/include/pty.h
+++ /dev/null
@@ -1,20 +0,0 @@
-#ifndef __PTY_H__
-#define __PTY_H__
-
-#include <_ansi.h>
-#include <sys/termios.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-int _EXFUN(openpty ,(int *, int *, char *, const struct termios *,
- const struct winsize *));
-int _EXFUN(forkpty ,(int *, char *, const struct termios *,
- const struct winsize *));
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __PTY_H__ */
diff --git a/winsup/cygwin/include/regex.h b/winsup/cygwin/include/regex.h
deleted file mode 100644
index 02c617e50..000000000
--- a/winsup/cygwin/include/regex.h
+++ /dev/null
@@ -1,131 +0,0 @@
-/*-
- * Copyright (c) 1992 Henry Spencer.
- * Copyright (c) 1992, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Henry Spencer of the University of Toronto.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)regex.h 8.2 (Berkeley) 1/3/94
- * $FreeBSD$
- */
-
-#ifndef _REGEX_H_
-#define _REGEX_H_
-
-#include <sys/cdefs.h>
-#include <_ansi.h>
-#include <sys/_types.h>
-
-/* types */
-#ifdef __CYGWIN__
-typedef _off_t regoff_t;
-
-#define __need_size_t
-#include <stddef.h>
-#else /* !__CYGWIN__ */
-typedef __off_t regoff_t;
-
-#ifndef _SIZE_T_DECLARED
-typedef __size_t size_t;
-#define _SIZE_T_DECLARED
-#endif
-#endif /* !__CYGWIN__ */
-
-typedef struct {
- int re_magic;
- size_t re_nsub; /* number of parenthesized subexpressions */
-#ifdef __CYGWIN__
- const char *re_endp; /* end pointer for REG_PEND */
-#else
- __const char *re_endp; /* end pointer for REG_PEND */
-#endif
- struct re_guts *re_g; /* none of your business :-) */
-} regex_t;
-
-typedef struct {
- regoff_t rm_so; /* start of match */
- regoff_t rm_eo; /* end of match */
-} regmatch_t;
-
-/* regcomp() flags */
-#define REG_BASIC 0000
-#define REG_EXTENDED 0001
-#define REG_ICASE 0002
-#define REG_NOSUB 0004
-#define REG_NEWLINE 0010
-#define REG_NOSPEC 0020
-#define REG_PEND 0040
-#define REG_DUMP 0200
-
-/* regerror() flags */
-#define REG_ENOSYS (-1)
-#ifdef __CYGWIN__
-#define REG_NOERROR 0 /* GNU extension */
-#endif
-#define REG_NOMATCH 1
-#define REG_BADPAT 2
-#define REG_ECOLLATE 3
-#define REG_ECTYPE 4
-#define REG_EESCAPE 5
-#define REG_ESUBREG 6
-#define REG_EBRACK 7
-#define REG_EPAREN 8
-#define REG_EBRACE 9
-#define REG_BADBR 10
-#define REG_ERANGE 11
-#define REG_ESPACE 12
-#define REG_BADRPT 13
-#define REG_EMPTY 14
-#define REG_ASSERT 15
-#define REG_INVARG 16
-#define REG_ILLSEQ 17
-#define REG_ATOI 255 /* convert name to number (!) */
-#define REG_ITOA 0400 /* convert number to name (!) */
-
-/* regexec() flags */
-#define REG_NOTBOL 00001
-#define REG_NOTEOL 00002
-#define REG_STARTEND 00004
-#define REG_TRACE 00400 /* tracing of execution */
-#define REG_LARGE 01000 /* force large representation */
-#define REG_BACKR 02000 /* force use of backref code */
-
-__BEGIN_DECLS
-int regcomp(regex_t * __restrict, const char * __restrict, int);
-size_t regerror(int, const regex_t * __restrict, char * __restrict, size_t);
-/*
- * XXX forth parameter should be `regmatch_t [__restrict]', but isn't because
- * of a bug in GCC 3.2 (when -std=c99 is specified) which perceives this as a
- * syntax error.
- */
-int regexec(const regex_t * __restrict, const char * __restrict, size_t,
- regmatch_t * __restrict, int);
-void regfree(regex_t *);
-__END_DECLS
-
-#endif /* !_REGEX_H_ */
diff --git a/winsup/cygwin/include/resolv.h b/winsup/cygwin/include/resolv.h
deleted file mode 100755
index 6cafcaaca..000000000
--- a/winsup/cygwin/include/resolv.h
+++ /dev/null
@@ -1,461 +0,0 @@
-/*
- * Copyright (c) 1983, 1987, 1989
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * Portions Copyright (c) 1996-1999 by Internet Software Consortium.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
- * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
- * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
- * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-
-/*
- * @(#)resolv.h 8.1 (Berkeley) 6/2/93
- * $Id$
- */
-
-#ifndef _RESOLV_H_
-#define _RESOLV_H_
-
-#include <sys/param.h>
-#if !defined(__CYGWIN__) && ((!defined(BSD)) || (BSD < 199306))
-# include <sys/bitypes.h>
-#else
-# include <sys/types.h>
-#endif
-#include <sys/cdefs.h>
-#include <sys/socket.h>
-#include <stdio.h>
-#include <arpa/nameser.h>
-#include <netinet/in.h>
-
-/*
- * Revision information. This is the release date in YYYYMMDD format.
- * It can change every day so the right thing to do with it is use it
- * in preprocessor commands such as "#if (__RES > 19931104)". Do not
- * compare for equality; rather, use it to determine whether your resolver
- * is new enough to contain a certain feature.
- */
-
-#define __RES 19991006
-
-/*
- * This used to be defined in res_query.c, now it's in herror.c.
- * [XXX no it's not. It's in irs/irs_data.c]
- * It was
- * never extern'd by any *.h file before it was placed here. For thread
- * aware programs, the last h_errno value set is stored in res->h_errno.
- *
- * XXX: There doesn't seem to be a good reason for exposing RES_SET_H_ERRNO
- * (and __h_errno_set) to the public via <resolv.h>.
- * XXX: __h_errno_set is really part of IRS, not part of the resolver.
- * If somebody wants to build and use a resolver that doesn't use IRS,
- * what do they do? Perhaps something like
- * #ifdef WANT_IRS
- * # define RES_SET_H_ERRNO(r,x) __h_errno_set(r,x)
- * #else
- * # define RES_SET_H_ERRNO(r,x) (h_errno = (r)->res_h_errno = (x))
- * #endif
- */
-
-#define RES_SET_H_ERRNO(r,x) __h_errno_set(r,x)
-struct __res_state; /* forward */
-__BEGIN_DECLS
-void __h_errno_set(struct __res_state *res, int err);
-__END_DECLS
-
-/*
- * Resolver configuration file.
- * Normally not present, but may contain the address of the
- * inital name server(s) to query and the domain search list.
- */
-
-#ifndef _PATH_RESCONF
-#define _PATH_RESCONF "/etc/resolv.conf"
-#endif
-
-typedef enum { res_goahead, res_nextns, res_modified, res_done, res_error }
- res_sendhookact;
-
-typedef res_sendhookact (*res_send_qhook)__P((struct sockaddr * const *ns,
- const u_char **query,
- int *querylen,
- u_char *ans,
- int anssiz,
- int *resplen));
-
-typedef res_sendhookact (*res_send_rhook)__P((const struct sockaddr *ns,
- const u_char *query,
- int querylen,
- u_char *ans,
- int anssiz,
- int *resplen));
-
-struct res_sym {
- int number; /* Identifying number, like T_MX */
- const char * name; /* Its symbolic name, like "MX" */
- const char * humanname; /* Its fun name, like "mail exchanger" */
-};
-
-/*
- * Global defines and variables for resolver stub.
- */
-#define MAXNS 3 /* max # name servers we'll track */
-#define MAXDFLSRCH 3 /* # default domain levels to try */
-#define MAXDNSRCH 6 /* max # domains in search path */
-#define LOCALDOMAINPARTS 2 /* min levels in name that is "local" */
-
-#define RES_TIMEOUT 5 /* min. seconds between retries */
-#define MAXRESOLVSORT 10 /* number of net to sort on */
-#define RES_MAXNDOTS 15 /* should reflect bit field size */
-#define RES_MAXRETRANS 30 /* only for resolv.conf/RES_OPTIONS */
-#define RES_MAXRETRY 5 /* only for resolv.conf/RES_OPTIONS */
-#define RES_DFLRETRY 2 /* Default #/tries. */
-#define RES_MAXTIME 65535 /* Infinity, in milliseconds. */
-
-struct __res_state_ext;
-
-struct __res_state {
- int retrans; /* retransmition time interval */
- int retry; /* number of times to retransmit */
- u_long options; /* option flags - see below. */
- int nscount; /* number of name servers */
- struct sockaddr_in
- nsaddr_list[MAXNS]; /* address of name server */
-#define nsaddr nsaddr_list[0] /* for backward compatibility */
- u_short id; /* current message id */
- char *dnsrch[MAXDNSRCH+1]; /* components of domain to search */
- char defdname[256]; /* default domain (deprecated) */
- u_long pfcode; /* RES_PRF_ flags - see below. */
- unsigned ndots:4; /* threshold for initial abs. query */
- unsigned nsort:4; /* number of elements in sort_list[] */
- char unused[3];
- struct {
- struct in_addr addr;
- u_int32_t mask;
- } sort_list[MAXRESOLVSORT];
- res_send_qhook qhook; /* query hook */
- res_send_rhook rhook; /* response hook */
- int res_h_errno; /* last one set for this context */
- int _vcsock; /* PRIVATE: for res_send VC i/o */
- u_int _flags; /* PRIVATE: see below */
- union {
- /* On an 32-bit arch this means 512b total. */
- char pad[72 - 3*sizeof (int) - 2*sizeof (void *)];
- struct {
- u_int16_t nscount;
- u_int16_t nstimes[MAXNS]; /* ms. */
- int nssocks[MAXNS];
- struct __res_state_ext *ext; /* extention for IPv6 */
- } _ext;
- } _u;
-};
-
-typedef struct __res_state *res_state;
-
-union res_sockaddr_union {
- struct sockaddr_in sin;
-#ifdef IN6ADDR_ANY_INIT
- struct sockaddr_in6 sin6;
-#endif
-#ifdef ISC_ALIGN64
- int64_t __align; /* 64bit alignment */
-#else
- int32_t __align; /* 32bit alignment */
-#endif
- char __space[128]; /* max size */
-};
-
-/*
- * Resolver flags (used to be discrete per-module statics ints).
- */
-#define RES_F_VC 0x00000001 /* socket is TCP */
-#define RES_F_CONN 0x00000002 /* socket is connected */
-#define RES_F_EDNS0ERR 0x00000004 /* EDNS0 caused errors */
-
-/* res_findzonecut() options */
-#define RES_EXHAUSTIVE 0x00000001 /* always do all queries */
-
-/*
- * Resolver options (keep these in synch with res_debug.c, please)
- */
-#define RES_INIT 0x00000001 /* address initialized */
-#define RES_DEBUG 0x00000002 /* print debug messages */
-#define RES_AAONLY 0x00000004 /* authoritative answers only (!IMPL)*/
-#define RES_USEVC 0x00000008 /* use virtual circuit */
-#define RES_PRIMARY 0x00000010 /* query primary server only (!IMPL) */
-#define RES_IGNTC 0x00000020 /* ignore trucation errors */
-#define RES_RECURSE 0x00000040 /* recursion desired */
-#define RES_DEFNAMES 0x00000080 /* use default domain name */
-#define RES_STAYOPEN 0x00000100 /* Keep TCP socket open */
-#define RES_DNSRCH 0x00000200 /* search up local domain tree */
-#define RES_INSECURE1 0x00000400 /* type 1 security disabled */
-#define RES_INSECURE2 0x00000800 /* type 2 security disabled */
-#define RES_NOALIASES 0x00001000 /* shuts off HOSTALIASES feature */
-#define RES_USE_INET6 0x00002000 /* use/map IPv6 in gethostbyname() */
-#define RES_ROTATE 0x00004000 /* rotate ns list after each query */
-#define RES_NOCHECKNAME 0x00008000 /* do not check names for sanity. */
-#define RES_KEEPTSIG 0x00010000 /* do not strip TSIG records */
-#define RES_BLAST 0x00020000 /* blast all recursive servers */
-#define RES_NO_NIBBLE 0x00040000 /* disable IPv6 nibble mode reverse */
-#define RES_NO_BITSTRING 0x00080000 /* disable IPv6 bit string mode reverse */
-/* KAME extensions: use higher bit to avoid conflict with ISC use */
-#define RES_USE_DNAME 0x10000000 /* use DNAME */
-#define RES_USE_A6 0x20000000 /* use A6 */
-#define RES_USE_EDNS0 0x40000000 /* use EDNS0 if configured */
-
-#define RES_DEFAULT (RES_RECURSE | RES_DEFNAMES | RES_DNSRCH)
-
-/*
- * Resolver "pfcode" values. Used by dig.
- */
-#define RES_PRF_STATS 0x00000001
-#define RES_PRF_UPDATE 0x00000002
-#define RES_PRF_CLASS 0x00000004
-#define RES_PRF_CMD 0x00000008
-#define RES_PRF_QUES 0x00000010
-#define RES_PRF_ANS 0x00000020
-#define RES_PRF_AUTH 0x00000040
-#define RES_PRF_ADD 0x00000080
-#define RES_PRF_HEAD1 0x00000100
-#define RES_PRF_HEAD2 0x00000200
-#define RES_PRF_TTLID 0x00000400
-#define RES_PRF_HEADX 0x00000800
-#define RES_PRF_QUERY 0x00001000
-#define RES_PRF_REPLY 0x00002000
-#define RES_PRF_INIT 0x00004000
-/* 0x00008000 */
-
-/* Things involving an internal (static) resolver context. */
-#if defined(_REENTRANT) || defined(__CYGWIN__)
-__BEGIN_DECLS
-extern struct __res_state *__res_state(void);
-__END_DECLS
-#define _res (*__res_state())
-#else
-#ifndef __BIND_NOSTATIC
-extern struct __res_state _res;
-#endif
-#endif
-
-#ifndef __BIND_NOSTATIC
-#define fp_nquery __fp_nquery
-#define fp_query __fp_query
-#define hostalias __hostalias
-#define p_query __p_query
-#define res_close __res_close
-#define res_init __res_init
-#define res_isourserver __res_isourserver
-#define res_mkquery __res_mkquery
-#define res_query __res_query
-#define res_querydomain __res_querydomain
-#define res_search __res_search
-#define res_send __res_send
-#define res_sendsigned __res_sendsigned
-
-__BEGIN_DECLS
-void fp_nquery __P((const u_char *, int, FILE *));
-void fp_query __P((const u_char *, FILE *));
-const char * hostalias __P((const char *));
-void p_query __P((const u_char *));
-void res_close __P((void));
-int res_init __P((void));
-int res_isourserver __P((const struct sockaddr_in *));
-int res_mkquery __P((int, const char *, int, int, const u_char *,
- int, const u_char *, u_char *, int));
-int res_query __P((const char *, int, int, u_char *, int));
-int res_querydomain __P((const char *, const char *, int, int,
- u_char *, int));
-int res_search __P((const char *, int, int, u_char *, int));
-int res_send __P((const u_char *, int, u_char *, int));
-int res_sendsigned __P((const u_char *, int, ns_tsig_key *,
- u_char *, int));
-__END_DECLS
-#endif
-
-#if !defined(SHARED_LIBBIND) || defined(LIB)
-/*
- * If libbind is a shared object (well, DLL anyway)
- * these externs break the linker when resolv.h is
- * included by a lib client (like named)
- * Make them go away if a client is including this
- *
- */
-extern const struct res_sym __p_key_syms[];
-extern const struct res_sym __p_cert_syms[];
-extern const struct res_sym __p_class_syms[];
-extern const struct res_sym __p_type_syms[];
-extern const struct res_sym __p_rcode_syms[];
-#endif /* SHARED_LIBBIND */
-
-#define b64_ntop __b64_ntop
-#define b64_pton __b64_pton
-#define dn_comp __dn_comp
-#define dn_count_labels __dn_count_labels
-#define dn_expand __dn_expand
-#define dn_skipname __dn_skipname
-#define fp_resstat __fp_resstat
-#define loc_aton __loc_aton
-#define loc_ntoa __loc_ntoa
-#define p_cdname __p_cdname
-#define p_cdnname __p_cdnname
-#define p_class __p_class
-#define p_fqname __p_fqname
-#define p_fqnname __p_fqnname
-#define p_option __p_option
-#define p_secstodate __p_secstodate
-#define p_section __p_section
-#define p_time __p_time
-#define p_type __p_type
-#define p_rcode __p_rcode
-#define putlong __putlong
-#define putshort __putshort
-#define res_dnok __res_dnok
-#define res_findzonecut __res_findzonecut
-#define res_hnok __res_hnok
-#define res_hostalias __res_hostalias
-#define res_mailok __res_mailok
-#define res_nameinquery __res_nameinquery
-#define res_nclose __res_nclose
-#define res_ninit __res_ninit
-#define res_nmkquery __res_nmkquery
-#define res_pquery __res_pquery
-#define res_nquery __res_nquery
-#define res_nquerydomain __res_nquerydomain
-#define res_nsearch __res_nsearch
-#define res_nsend __res_nsend
-#define res_nsendsigned __res_nsendsigned
-#define res_nisourserver __res_nisourserver
-#define res_ownok __res_ownok
-#define res_queriesmatch __res_queriesmatch
-#define res_randomid __res_randomid
-#define sym_ntop __sym_ntop
-#define sym_ntos __sym_ntos
-#define sym_ston __sym_ston
-#define res_nopt __res_nopt
-#define res_ndestroy __res_ndestroy
-#define res_nametoclass __res_nametoclass
-#define res_nametotype __res_nametotype
-#define res_setservers __res_setservers
-#define res_getservers __res_getservers
-__BEGIN_DECLS
-int res_hnok __P((const char *));
-int res_ownok __P((const char *));
-int res_mailok __P((const char *));
-int res_dnok __P((const char *));
-int sym_ston __P((const struct res_sym *, const char *, int *));
-const char * sym_ntos __P((const struct res_sym *, int, int *));
-const char * sym_ntop __P((const struct res_sym *, int, int *));
-int b64_ntop __P((u_char const *, size_t, char *, size_t));
-int b64_pton __P((char const *, u_char *, size_t));
-int loc_aton __P((const char *ascii, u_char *binary));
-const char * loc_ntoa __P((const u_char *binary, char *ascii));
-int dn_skipname __P((const u_char *, const u_char *));
-void putlong __P((u_int32_t, u_char *));
-void putshort __P((u_int16_t, u_char *));
-const char * p_class __P((int));
-const char * p_time __P((u_int32_t));
-const char * p_type __P((int));
-const char * p_rcode __P((int));
-const u_char * p_cdnname __P((const u_char *, const u_char *, int, FILE *));
-const u_char * p_cdname __P((const u_char *, const u_char *, FILE *));
-const u_char * p_fqnname __P((const u_char *cp, const u_char *msg,
- int, char *, int));
-const u_char * p_fqname __P((const u_char *, const u_char *, FILE *));
-const char * p_option __P((u_long option));
-char * p_secstodate __P((u_long));
-int dn_count_labels __P((const char *));
-int dn_comp __P((const char *, u_char *, int,
- u_char **, u_char **));
-int dn_expand __P((const u_char *, const u_char *, const u_char *,
- char *, int));
-u_int res_randomid __P((void));
-int res_nameinquery __P((const char *, int, int,
- const u_char *, const u_char *));
-int res_queriesmatch __P((const u_char *, const u_char *,
- const u_char *, const u_char *));
-const char * p_section __P((int section, int opcode));
-/* Things involving a resolver context. */
-int res_ninit __P((res_state));
-int res_nisourserver __P((const res_state,
- const struct sockaddr_in *));
-void fp_resstat __P((const res_state, FILE *));
-void res_pquery __P((const res_state, const u_char *, int, FILE *));
-const char * res_hostalias __P((const res_state, const char *,
- char *, size_t));
-int res_nquery __P((res_state,
- const char *, int, int, u_char *, int));
-int res_nsearch __P((res_state, const char *, int,
- int, u_char *, int));
-int res_nquerydomain __P((res_state,
- const char *, const char *, int, int,
- u_char *, int));
-int res_nmkquery __P((res_state,
- int, const char *, int, int, const u_char *,
- int, const u_char *, u_char *, int));
-int res_nsend __P((res_state, const u_char *, int, u_char *, int));
-int res_nsendsigned __P((res_state, const u_char *, int,
- ns_tsig_key *, u_char *, int));
-int res_findzonecut __P((res_state, const char *, ns_class, int,
- char *, size_t, struct in_addr *, int));
-void res_nclose __P((res_state));
-int res_nopt __P((res_state, int, u_char *, int, int));
-void res_send_setqhook __P((res_send_qhook hook));
-void res_send_setrhook __P((res_send_rhook hook));
-int __res_vinit __P((res_state, int));
-void res_destroyservicelist __P((void));
-const char * res_servicename __P((u_int16_t port, const char *proto));
-const char * res_protocolname __P((int num));
-void res_destroyprotolist __P((void));
-void res_buildprotolist __P((void));
-const char * res_get_nibblesuffix __P((res_state));
-const char * res_get_bitstringsuffix __P((res_state));
-void res_ndestroy __P((res_state));
-u_int16_t res_nametoclass __P((const char *buf, int *success));
-u_int16_t res_nametotype __P((const char *buf, int *success));
-void res_setservers __P((res_state,
- const union res_sockaddr_union *, int));
-int res_getservers __P((res_state,
- union res_sockaddr_union *, int));
-__END_DECLS
-
-#endif /* !_RESOLV_H_ */
diff --git a/winsup/cygwin/include/search.h b/winsup/cygwin/include/search.h
deleted file mode 100644
index f532eae55..000000000
--- a/winsup/cygwin/include/search.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/*-
- * Written by J.T. Conklin <jtc@netbsd.org>
- * Public domain.
- *
- * $NetBSD: search.h,v 1.12 1999/02/22 10:34:28 christos Exp $
- * $FreeBSD: src/include/search.h,v 1.10 2002/10/16 14:29:23 robert Exp $
- */
-
-#ifndef _SEARCH_H_
-#define _SEARCH_H_
-
-#include <sys/cdefs.h>
-#include <sys/types.h>
-
-typedef struct entry
-{
- char *key;
- void *data;
-} ENTRY;
-
-typedef enum
-{
- FIND, ENTER
-} ACTION;
-
-typedef enum
-{
- preorder,
- postorder,
- endorder,
- leaf
-} VISIT;
-
-#ifdef _SEARCH_PRIVATE
-typedef struct node
-{
- char *key;
- struct node *llink, *rlink;
-} node_t;
-#endif
-
-struct hsearch_data
-{
- struct internal_head *htable;
- size_t htablesize;
-};
-
-struct qelem
-{
- struct qelem *q_forw;
- struct qelem *q_back;
-};
-
-__BEGIN_DECLS
-int hcreate (size_t);
-void hdestroy (void);
-ENTRY *hsearch (ENTRY, ACTION);
-int hcreate_r (size_t, struct hsearch_data *);
-void hdestroy_r (struct hsearch_data *);
-int hsearch_r (ENTRY, ACTION, ENTRY **, struct hsearch_data *);
-void *tdelete (const void * __restrict, void ** __restrict,
- int (*) (const void *, const void *));
-void tdestroy (void *, void (*)(void *));
-void *tfind (const void *, void **,
- int (*) (const void *, const void *));
-void *tsearch (const void *, void **, int (*) (const void *, const void *));
-void twalk (const void *, void (*) (const void *, VISIT, int));
-void *lfind (const void *, const void *, size_t *, size_t,
- int (*) (const void *, const void *));
-void *lsearch (const void *, void *, size_t *, size_t,
- int (*) (const void *, const void *));
-void insque (void *, void *);
-void remque (void *);
-__END_DECLS
-
-#endif /* !_SEARCH_H_ */
diff --git a/winsup/cygwin/include/semaphore.h b/winsup/cygwin/include/semaphore.h
deleted file mode 100644
index b16d13751..000000000
--- a/winsup/cygwin/include/semaphore.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/* semaphore.h: POSIX semaphore interface
-
- Copyright 2001, 2003, 2007 Red Hat, Inc.
-
- Written by Robert Collins <rbtcollins@hotmail.com>
-
- This file is part of Cygwin.
-
- This software is a copyrighted work licensed under the terms of the
- Cygwin license. Please consult the file "CYGWIN_LICENSE" for
- details. */
-
-#include <sys/types.h>
-
-#ifndef _SEMAPHORE_H
-#define _SEMAPHORE_H
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-#ifndef __INSIDE_CYGWIN__
- typedef struct __sem_t {char __dummy;} *sem_t;
-#endif
-
-#define SEM_FAILED ((sem_t *) 0)
-
-/* Semaphores */
- int sem_init (sem_t *sem, int pshared, unsigned int value);
- int sem_destroy (sem_t *sem);
- sem_t *sem_open (const char *name, int oflag, ...);
- int sem_close (sem_t *sem);
- int sem_unlink (const char *name);
- int sem_wait (sem_t *sem);
- int sem_trywait (sem_t *sem);
- int sem_timedwait (sem_t *sem, const struct timespec *abstime);
- int sem_post (sem_t *sem);
- int sem_getvalue (sem_t *sem, int *sval);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SEMAPHORE_H */
diff --git a/winsup/cygwin/include/stdint.h b/winsup/cygwin/include/stdint.h
deleted file mode 100644
index b670884a7..000000000
--- a/winsup/cygwin/include/stdint.h
+++ /dev/null
@@ -1,290 +0,0 @@
-/* stdint.h - integer types
-
- Copyright 2003, 2005, 2006, 2007, 2008, 2009, 2010, 2012 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _STDINT_H
-#define _STDINT_H
-
-#include <bits/wordsize.h>
-
-/* Exact-width integer types */
-
-#ifndef __int8_t_defined
-#define __int8_t_defined
-typedef signed char int8_t;
-typedef short int16_t;
-typedef int int32_t;
-#if __WORDSIZE == 64
-typedef long int64_t;
-#else
-typedef long long int64_t;
-#endif
-#endif
-
-typedef unsigned char uint8_t;
-typedef unsigned short uint16_t;
-#ifndef __uint32_t_defined
-#define __uint32_t_defined
-typedef unsigned int uint32_t;
-#endif
-#if __WORDSIZE == 64
-typedef unsigned long uint64_t;
-#else
-typedef unsigned long long uint64_t;
-#endif
-
-/* Minimum-width integer types */
-
-typedef signed char int_least8_t;
-typedef short int_least16_t;
-typedef int int_least32_t;
-#if __WORDSIZE == 64
-typedef long int_least64_t;
-#else
-typedef long long int_least64_t;
-#endif
-
-typedef unsigned char uint_least8_t;
-typedef unsigned short uint_least16_t;
-typedef unsigned int uint_least32_t;
-#if __WORDSIZE == 64
-typedef unsigned long uint_least64_t;
-#else
-typedef unsigned long long uint_least64_t;
-#endif
-
-/* Fastest minimum-width integer types */
-
-typedef signed char int_fast8_t;
-#if __WORDSIZE == 64
-typedef long int_fast16_t;
-typedef long int_fast32_t;
-typedef long int_fast64_t;
-#else
-typedef int int_fast16_t;
-typedef int int_fast32_t;
-typedef long long int_fast64_t;
-#endif
-
-typedef unsigned char uint_fast8_t;
-#if __WORDSIZE == 64
-typedef unsigned long uint_fast16_t;
-typedef unsigned long uint_fast32_t;
-typedef unsigned long uint_fast64_t;
-#else
-typedef unsigned int uint_fast16_t;
-typedef unsigned int uint_fast32_t;
-typedef unsigned long long uint_fast64_t;
-#endif
-
-/* Integer types capable of holding object pointers */
-
-#ifndef __intptr_t_defined
-#define __intptr_t_defined
-#if __WORDSIZE == 64
-typedef long intptr_t;
-#else
-typedef int intptr_t;
-#endif
-#endif
-#if __WORDSIZE == 64
-typedef unsigned long uintptr_t;
-#else
-typedef unsigned int uintptr_t;
-#endif
-
-/* Greatest-width integer types */
-
-#if __WORDSIZE == 64
-typedef long intmax_t;
-typedef unsigned long uintmax_t;
-#else
-typedef long long intmax_t;
-typedef unsigned long long uintmax_t;
-#endif
-
-/* C99 requires that in C++ the following macros should be defined only
- if requested. */
-#if !defined (__cplusplus) || defined (__STDC_LIMIT_MACROS) \
- || defined (__INSIDE_CYGWIN__)
-
-#if __x86_64__
-# define __I64(n) n ## L
-# define __U64(n) n ## UL
-#else
-# define __I64(n) n ## LL
-# define __U64(n) n ## ULL
-#endif
-
-/* Limits of exact-width integer types */
-
-#define INT8_MIN (-128)
-#define INT16_MIN (-32768)
-#define INT32_MIN (-2147483647 - 1)
-#define INT64_MIN (-__I64(9223372036854775807) - 1)
-
-#define INT8_MAX (127)
-#define INT16_MAX (32767)
-#define INT32_MAX (2147483647)
-#define INT64_MAX (__I64(9223372036854775807))
-
-#define UINT8_MAX (255)
-#define UINT16_MAX (65535)
-#define UINT32_MAX (4294967295U)
-#define UINT64_MAX (__U64(18446744073709551615))
-
-/* Limits of minimum-width integer types */
-
-#define INT_LEAST8_MIN (-128)
-#define INT_LEAST16_MIN (-32768)
-#define INT_LEAST32_MIN (-2147483647 - 1)
-#define INT_LEAST64_MIN (-__I64(9223372036854775807) - 1)
-
-#define INT_LEAST8_MAX (127)
-#define INT_LEAST16_MAX (32767)
-#define INT_LEAST32_MAX (2147483647)
-#define INT_LEAST64_MAX (__I64(9223372036854775807))
-
-#define UINT_LEAST8_MAX (255)
-#define UINT_LEAST16_MAX (65535)
-#define UINT_LEAST32_MAX (4294967295U)
-#define UINT_LEAST64_MAX (__U64(18446744073709551615))
-
-/* Limits of fastest minimum-width integer types */
-
-#define INT_FAST8_MIN (-128)
-#if __WORDSIZE == 64
-#define INT_FAST16_MIN (-__I64(9223372036854775807) - 1)
-#define INT_FAST32_MIN (-__I64(9223372036854775807) - 1)
-#else
-#define INT_FAST16_MIN (-2147483647 - 1)
-#define INT_FAST32_MIN (-2147483647 - 1)
-#endif
-#define INT_FAST64_MIN (-__I64(9223372036854775807) - 1)
-
-#define INT_FAST8_MAX (127)
-#if __WORDSIZE == 64
-#define INT_FAST16_MAX (__I64(9223372036854775807))
-#define INT_FAST32_MAX (__I64(9223372036854775807))
-#else
-#define INT_FAST16_MAX (2147483647)
-#define INT_FAST32_MAX (2147483647)
-#endif
-#define INT_FAST64_MAX (__I64(9223372036854775807))
-
-#define UINT_FAST8_MAX (255)
-#if __WORDSIZE == 64
-#define UINT_FAST16_MAX (__U64(18446744073709551615))
-#define UINT_FAST32_MAX (__U64(18446744073709551615))
-#else
-#define UINT_FAST16_MAX (4294967295U)
-#define UINT_FAST32_MAX (4294967295U)
-#endif
-#define UINT_FAST64_MAX (__U64(18446744073709551615))
-
-/* Limits of integer types capable of holding object pointers */
-
-#if __WORDSIZE == 64
-#define INTPTR_MIN (-__I64(9223372036854775807) - 1)
-#define INTPTR_MAX (__I64(9223372036854775807))
-#define UINTPTR_MAX (__U64(18446744073709551615))
-#else
-#define INTPTR_MIN (-2147483647 - 1)
-#define INTPTR_MAX (2147483647)
-#define UINTPTR_MAX (4294967295U)
-#endif
-
-/* Limits of greatest-width integer types */
-
-#define INTMAX_MIN (-__I64(9223372036854775807) - 1)
-#define INTMAX_MAX (__I64(9223372036854775807))
-#define UINTMAX_MAX (__U64(18446744073709551615))
-
-/* Limits of other integer types */
-
-#ifndef PTRDIFF_MIN
-#if __WORDSIZE == 64
-#define PTRDIFF_MIN (-9223372036854775807L - 1)
-#define PTRDIFF_MAX (9223372036854775807L)
-#else
-#define PTRDIFF_MIN (-2147483647 - 1)
-#define PTRDIFF_MAX (2147483647)
-#endif
-#endif
-
-#ifndef SIG_ATOMIC_MIN
-#define SIG_ATOMIC_MIN (-2147483647 - 1)
-#endif
-#ifndef SIG_ATOMIC_MAX
-#define SIG_ATOMIC_MAX (2147483647)
-#endif
-
-#ifndef SIZE_MAX
-#if __WORDSIZE == 64
-#define SIZE_MAX (18446744073709551615UL)
-#else
-#define SIZE_MAX (4294967295U)
-#endif
-#endif
-
-#ifndef WCHAR_MIN
-#ifdef __WCHAR_MIN__
-#define WCHAR_MIN __WCHAR_MIN__
-#define WCHAR_MAX __WCHAR_MAX__
-#else
-#define WCHAR_MIN (0)
-#define WCHAR_MAX (65535)
-#endif
-#endif
-
-#ifndef WINT_MIN
-#define WINT_MIN 0U
-#define WINT_MAX (4294967295U)
-#endif
-
-#endif /* !__cplusplus || __STDC_LIMIT_MACROS || __INSIDE_CYGWIN__ */
-
-/* C99 requires that in C++ the following macros should be defined only
- if requested. */
-#if !defined (__cplusplus) || defined (__STDC_CONSTANT_MACROS) \
- || defined (__INSIDE_CYGWIN__)
-
-/* Macros for minimum-width integer constant expressions */
-
-#define INT8_C(x) x
-#define INT16_C(x) x
-#define INT32_C(x) x
-#if __WORDSIZE == 64
-#define INT64_C(x) x ## L
-#else
-#define INT64_C(x) x ## LL
-#endif
-
-#define UINT8_C(x) x
-#define UINT16_C(x) x
-#define UINT32_C(x) x ## U
-#if __WORDSIZE == 64
-#define UINT64_C(x) x ## UL
-#else
-#define UINT64_C(x) x ## ULL
-#endif
-
-/* Macros for greatest-width integer constant expressions */
-
-#if __WORDSIZE == 64
-#define INTMAX_C(x) x ## L
-#define UINTMAX_C(x) x ## UL
-#else
-#define INTMAX_C(x) x ## LL
-#define UINTMAX_C(x) x ## ULL
-#endif
-
-#endif /* !__cplusplus || __STDC_CONSTANT_MACROS || __INSIDE_CYGWIN__ */
-
-#endif /* _STDINT_H */
diff --git a/winsup/cygwin/include/sys/acl.h b/winsup/cygwin/include/sys/acl.h
deleted file mode 100644
index 89c38bc0f..000000000
--- a/winsup/cygwin/include/sys/acl.h
+++ /dev/null
@@ -1,17 +0,0 @@
-/* sys/acl.h header file for Cygwin.
-
- Copyright 1999, 2000, 2001 Red Hat, Inc.
- Written by C. Vinschen.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _SYS_ACL_H
-#define _SYS_ACL_H
-
-#include <cygwin/acl.h>
-
-#endif /* _SYS_ACL_H */
diff --git a/winsup/cygwin/include/sys/copying.dj b/winsup/cygwin/include/sys/copying.dj
deleted file mode 100644
index a05f4bc81..000000000
--- a/winsup/cygwin/include/sys/copying.dj
+++ /dev/null
@@ -1,41 +0,0 @@
-This is the file "copying.dj". It does not apply to any sources
-copyrighted by UCB Berkeley or the Free Software Foundation.
-
- Copyright Information for sources and executables that are marked
- Copyright (C) DJ Delorie
- 24 Kirsten Ave
- Rochester NH 03867-2954
-
-This document is Copyright (C) DJ Delorie and may be distributed
-verbatim, but changing it is not allowed.
-
-Source code copyright DJ Delorie is distributed under the terms of the
-GNU General Public Licence, with the following exceptions:
-
-* Any existing copyright or authorship information in any given source
-file must remain intact. If you modify a source file, a notice to that
-effect must be added to the authorship information in the source file.
-
-* binaries provided in djgpp may be distributed without sources ONLY if
-the recipient is given sufficient information to obtain a copy of djgpp
-themselves. This primarily applies to go32.exe, emu387, stub.exe, and
-the graphics drivers.
-
-* modified versions of the binaries provided in djgpp must be
-distributed under the terms of the GPL.
-
-* objects and libraries linked into an application may be distributed
-without sources.
-
------
-
-Changes to source code copyright BSD or FSF are copyright DJ Delorie, but
-fall under the terms of the original copyright.
-
-A copy of the file "COPYING" is included with this document. If you did not
-receive a copy of "COPYING", you may obtain one from whence this document
-was obtained, or by writing:
- Free Software Foundation
- 675 Mass Ave
- Cambridge, MA 02139
- USA
diff --git a/winsup/cygwin/include/sys/cygwin.h b/winsup/cygwin/include/sys/cygwin.h
deleted file mode 100644
index edfcc565a..000000000
--- a/winsup/cygwin/include/sys/cygwin.h
+++ /dev/null
@@ -1,435 +0,0 @@
-/* sys/cygwin.h
-
- Copyright 1997, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
- 2009, 2010, 2011, 2012, 2013, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _SYS_CYGWIN_H
-#define _SYS_CYGWIN_H
-
-#include <sys/types.h>
-#include <limits.h>
-#include <stdint.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define _CYGWIN_SIGNAL_STRING "cYgSiGw00f"
-
-#ifndef __x86_64__
-/* DEPRECATED INTERFACES. These are restricted to MAX_PATH length.
- Don't use in modern applications. They don't exist on x86_64. */
-extern int cygwin_win32_to_posix_path_list (const char *, char *)
- __attribute__ ((__deprecated__));
-extern int cygwin_win32_to_posix_path_list_buf_size (const char *)
- __attribute__ ((__deprecated__));
-extern int cygwin_posix_to_win32_path_list (const char *, char *)
- __attribute__ ((__deprecated__));
-extern int cygwin_posix_to_win32_path_list_buf_size (const char *)
- __attribute__ ((__deprecated__));
-extern int cygwin_conv_to_win32_path (const char *, char *)
- __attribute__ ((__deprecated__));
-extern int cygwin_conv_to_full_win32_path (const char *, char *)
- __attribute__ ((__deprecated__));
-extern int cygwin_conv_to_posix_path (const char *, char *)
- __attribute__ ((__deprecated__));
-extern int cygwin_conv_to_full_posix_path (const char *, char *)
- __attribute__ ((__deprecated__));
-#endif /* !__x86_64__ */
-
-/* Use these interfaces in favor of the above. */
-
-/* Possible 'what' values in calls to cygwin_conv_path/cygwin_create_path. */
-enum
-{
- CCP_POSIX_TO_WIN_A = 0, /* from is char*, to is char* */
- CCP_POSIX_TO_WIN_W, /* from is char*, to is wchar_t* */
- CCP_WIN_A_TO_POSIX, /* from is char*, to is char* */
- CCP_WIN_W_TO_POSIX, /* from is wchar_t*, to is char* */
-
- CCP_CONVTYPE_MASK = 3,
-
- /* Or these values to the above as needed. */
- CCP_ABSOLUTE = 0, /* Request absolute path (default). */
- CCP_RELATIVE = 0x100 /* Request to keep path relative. */
-};
-typedef unsigned int cygwin_conv_path_t;
-
-/* If size is 0, cygwin_conv_path returns the required buffer size in bytes.
- Otherwise, it returns 0 on success, or -1 on error and errno is set to
- one of the below values:
-
- EINVAL what has an invalid value.
- EFAULT from or to point into nirvana.
- ENAMETOOLONG the resulting path is longer than 32K, or, in case
- of what == CCP_POSIX_TO_WIN_A, longer than MAX_PATH.
- ENOSPC size is less than required for the conversion.
-*/
-extern ssize_t cygwin_conv_path (cygwin_conv_path_t what, const void *from,
- void *to, size_t size);
-/* Same, but handles path lists separated by colon or semicolon. */
-extern ssize_t cygwin_conv_path_list (cygwin_conv_path_t what, const void *from,
- void *to, size_t size);
-/* Allocate a buffer for the conversion result using malloc(3), and return
- a pointer to it. Returns NULL if something goes wrong with errno set
- to one of the above values, or to ENOMEM if malloc fails. */
-extern void *cygwin_create_path (cygwin_conv_path_t what, const void *from);
-
-extern pid_t cygwin_winpid_to_pid (int);
-extern int cygwin_posix_path_list_p (const char *);
-extern void cygwin_split_path (const char *, char *, char *);
-
-struct __cygwin_perfile
-{
- const char *name;
- unsigned flags;
-};
-
-/* External interface stuff */
-
-/* Always add at the bottom. Do not add new values in the middle. */
-typedef enum
- {
- CW_LOCK_PINFO,
- CW_UNLOCK_PINFO,
- CW_GETTHREADNAME,
- CW_GETPINFO,
- CW_SETPINFO,
- CW_SETTHREADNAME,
- CW_GETVERSIONINFO,
- CW_READ_V1_MOUNT_TABLES,
- CW_USER_DATA,
- CW_PERFILE,
- CW_GET_CYGDRIVE_PREFIXES,
- CW_GETPINFO_FULL,
- CW_INIT_EXCEPTIONS,
- CW_GET_CYGDRIVE_INFO,
- CW_SET_CYGWIN_REGISTRY_NAME,
- CW_GET_CYGWIN_REGISTRY_NAME,
- CW_STRACE_TOGGLE,
- CW_STRACE_ACTIVE,
- CW_CYGWIN_PID_TO_WINPID,
- CW_EXTRACT_DOMAIN_AND_USER,
- CW_CMDLINE,
- CW_CHECK_NTSEC,
- CW_GET_ERRNO_FROM_WINERROR,
- CW_GET_POSIX_SECURITY_ATTRIBUTE,
- CW_GET_SHMLBA,
- CW_GET_UID_FROM_SID,
- CW_GET_GID_FROM_SID,
- CW_GET_BINMODE,
- CW_HOOK,
- CW_ARGV,
- CW_ENVP,
- CW_DEBUG_SELF,
- CW_SYNC_WINENV,
- CW_CYGTLS_PADSIZE,
- CW_SET_DOS_FILE_WARNING,
- CW_SET_PRIV_KEY,
- CW_SETERRNO,
- CW_EXIT_PROCESS,
- CW_SET_EXTERNAL_TOKEN,
- CW_GET_INSTKEY,
- CW_INT_SETLOCALE,
- CW_CVT_MNT_OPTS,
- CW_LST_MNT_OPTS,
- CW_STRERROR,
- CW_CVT_ENV_TO_WINENV,
- CW_ALLOC_DRIVE_MAP,
- CW_MAP_DRIVE_MAP,
- CW_FREE_DRIVE_MAP,
- CW_SETENT,
- CW_GETENT,
- CW_ENDENT,
- CW_GETNSSSEP,
- CW_GETPWSID,
- CW_GETGRSID,
- CW_CYGNAME_FROM_WINNAME,
- CW_FIXED_ATEXIT,
- CW_GETNSS_PWD_SRC,
- CW_GETNSS_GRP_SRC
- } cygwin_getinfo_types;
-
-#define CW_LOCK_PINFO CW_LOCK_PINFO
-#define CW_UNLOCK_PINFO CW_UNLOCK_PINFO
-#define CW_GETTHREADNAME CW_GETTHREADNAME
-#define CW_GETPINFO CW_GETPINFO
-#define CW_SETPINFO CW_SETPINFO
-#define CW_SETTHREADNAME CW_SETTHREADNAME
-#define CW_GETVERSIONINFO CW_GETVERSIONINFO
-#define CW_READ_V1_MOUNT_TABLES CW_READ_V1_MOUNT_TABLES
-#define CW_USER_DATA CW_USER_DATA
-#define CW_PERFILE CW_PERFILE
-#define CW_GET_CYGDRIVE_PREFIXES CW_GET_CYGDRIVE_PREFIXES
-#define CW_GETPINFO_FULL CW_GETPINFO_FULL
-#define CW_INIT_EXCEPTIONS CW_INIT_EXCEPTIONS
-#define CW_GET_CYGDRIVE_INFO CW_GET_CYGDRIVE_INFO
-#define CW_SET_CYGWIN_REGISTRY_NAME CW_SET_CYGWIN_REGISTRY_NAME
-#define CW_GET_CYGWIN_REGISTRY_NAME CW_GET_CYGWIN_REGISTRY_NAME
-#define CW_STRACE_TOGGLE CW_STRACE_TOGGLE
-#define CW_STRACE_ACTIVE CW_STRACE_ACTIVE
-#define CW_CYGWIN_PID_TO_WINPID CW_CYGWIN_PID_TO_WINPID
-#define CW_EXTRACT_DOMAIN_AND_USER CW_EXTRACT_DOMAIN_AND_USER
-#define CW_CMDLINE CW_CMDLINE
-#define CW_CHECK_NTSEC CW_CHECK_NTSEC
-#define CW_GET_ERRNO_FROM_WINERROR CW_GET_ERRNO_FROM_WINERROR
-#define CW_GET_POSIX_SECURITY_ATTRIBUTE CW_GET_POSIX_SECURITY_ATTRIBUTE
-#define CW_GET_SHMLBA CW_GET_SHMLBA
-#define CW_GET_UID_FROM_SID CW_GET_UID_FROM_SID
-#define CW_GET_GID_FROM_SID CW_GET_GID_FROM_SID
-#define CW_GET_BINMODE CW_GET_BINMODE
-#define CW_HOOK CW_HOOK
-#define CW_ARGV CW_ARGV
-#define CW_ENVP CW_ENVP
-#define CW_DEBUG_SELF CW_DEBUG_SELF
-#define CW_SYNC_WINENV CW_SYNC_WINENV
-#define CW_CYGTLS_PADSIZE CW_CYGTLS_PADSIZE
-#define CW_SET_DOS_FILE_WARNING CW_SET_DOS_FILE_WARNING
-#define CW_SET_PRIV_KEY CW_SET_PRIV_KEY
-#define CW_SETERRNO CW_SETERRNO
-#define CW_EXIT_PROCESS CW_EXIT_PROCESS
-#define CW_SET_EXTERNAL_TOKEN CW_SET_EXTERNAL_TOKEN
-#define CW_GET_INSTKEY CW_GET_INSTKEY
-#define CW_INT_SETLOCALE CW_INT_SETLOCALE
-#define CW_CVT_MNT_OPTS CW_CVT_MNT_OPTS
-#define CW_LST_MNT_OPTS CW_LST_MNT_OPTS
-#define CW_STRERROR CW_STRERROR
-#define CW_CVT_ENV_TO_WINENV CW_CVT_ENV_TO_WINENV
-#define CW_ALLOC_DRIVE_MAP CW_ALLOC_DRIVE_MAP
-#define CW_MAP_DRIVE_MAP CW_MAP_DRIVE_MAP
-#define CW_FREE_DRIVE_MAP CW_FREE_DRIVE_MAP
-#define CW_SETENT CW_SETENT
-#define CW_GETENT CW_GETENT
-#define CW_ENDENT CW_ENDENT
-#define CW_GETNSSSEP CW_GETNSSSEP
-#define CW_GETPWSID CW_GETPWSID
-#define CW_GETGRSID CW_GETGRSID
-#define CW_CYGNAME_FROM_WINNAME CW_CYGNAME_FROM_WINNAME
-#define CW_FIXED_ATEXIT CW_FIXED_ATEXIT
-#define CW_GETNSS_PWD_SRC CW_GETNSS_PWD_SRC
-#define CW_GETNSS_GRP_SRC CW_GETNSS_GRP_SRC
-
-/* Token type for CW_SET_EXTERNAL_TOKEN */
-enum
-{
- CW_TOKEN_IMPERSONATION = 0,
- CW_TOKEN_RESTRICTED = 1
-};
-
-/* Source type for CW_GETNSS_PWD_SRC and CW_GETNSS_GRP_SRC. */
-enum
-{
- NSS_SRC_FILES = 1,
- NSS_SRC_DB = 2
-};
-
-/* Enumeration source constants for CW_SETENT called from mkpasswd/mkgroup. */
-enum nss_enum_t
-{
- ENUM_NONE = 0x00,
- ENUM_CACHE = 0x01,
- ENUM_FILES = 0x02,
- ENUM_BUILTIN = 0x04,
- ENUM_LOCAL = 0x08,
- ENUM_PRIMARY = 0x10,
- ENUM_TDOMS = 0x20,
- ENUM_TDOMS_ALL = 0x40,
- ENUM_ALL = 0x7f
-};
-
-#define CW_NEXTPID 0x80000000 /* or with pid to get next one */
-uintptr_t cygwin_internal (cygwin_getinfo_types, ...);
-
-/* Flags associated with process_state */
-enum
-{
- PID_IN_USE = 0x00001, /* Entry in use. */
- PID_UNUSED = 0x00002, /* Available. */
- PID_STOPPED = 0x00004, /* Waiting for SIGCONT. */
- PID_TTYIN = 0x00008, /* Waiting for terminal input. */
- PID_TTYOU = 0x00010, /* Waiting for terminal output. */
- PID_NOTCYGWIN = 0x00020, /* Set if process is not a cygwin app. */
- PID_ACTIVE = 0x00040, /* Pid accepts signals. */
- PID_CYGPARENT = 0x00080, /* Set if parent was a cygwin app. */
- PID_MAP_RW = 0x00100, /* Flag to open map rw. */
- PID_MYSELF = 0x00200, /* Flag that pid is me. */
- PID_NOCLDSTOP = 0x00400, /* Set if no SIGCHLD signal on stop. */
- PID_INITIALIZING = 0x00800, /* Set until ready to receive signals. */
- PID_NEW = 0x01000, /* Available. */
- PID_ALLPIDS = 0x02000, /* used by pinfo scanner */
- PID_EXECED = 0x04000, /* redirect to original pid info block */
- PID_NOREDIR = 0x08000, /* don't redirect if execed */
- PID_EXITED = 0x40000000, /* Free entry. */
- PID_REAPED = 0x80000000 /* Reaped */
-};
-
-#ifdef WINVER
-
-/* This lives in the app and is initialized before jumping into the DLL.
- It should only contain stuff which the user's process needs to see, or
- which is needed before the user pointer is initialized, or is needed to
- carry inheritance information from parent to child. Note that it cannot
- be used to carry inheritance information across exec!
-
- Remember, this structure is linked into the application's executable.
- Changes to this can invalidate existing executables, so we go to extra
- lengths to avoid having to do it.
-
- When adding/deleting members, remember to adjust {public,internal}_reserved.
- The size of the class shouldn't change [unless you really are prepared to
- invalidate all existing executables]. The program does a check (using
- SIZEOF_PER_PROCESS) to make sure you remember to make the adjustment.
-*/
-
-#ifdef __cplusplus
-class MTinterface;
-#endif
-
-struct per_process_cxx_malloc;
-
-struct per_process
-{
- char *initial_sp;
-
- /* The offset of these 3 values can never change. */
- /* magic_biscuit is the size of this class and should never change. */
- uint32_t magic_biscuit;
- uint32_t dll_major;
- uint32_t dll_minor;
-
- struct _reent **impure_ptr_ptr;
-#ifndef __x86_64__
- char ***envptr;
-#endif
-
- /* Used to point to the memory machine we should use. Usually these
- point back into the dll, but they can be overridden by the user. */
- void *(*malloc)(size_t);
- void (*free)(void *);
- void *(*realloc)(void *, size_t);
-
- int *fmode_ptr;
-
- int (*main)(int, char **, char **);
- void (**ctors)(void);
- void (**dtors)(void);
-
- /* For fork */
- void *data_start;
- void *data_end;
- void *bss_start;
- void *bss_end;
-
- void *(*calloc)(size_t, size_t);
- /* For future expansion of values set by the app. */
- void (*premain[4]) (int, char **, struct per_process *);
-
- /* non-zero if ctors have been run. Inherited from parent. */
- int32_t run_ctors_p;
-
- DWORD_PTR unused[7];
-
- /* Pointers to real operator new/delete functions for forwarding. */
- struct per_process_cxx_malloc *cxx_malloc;
-
- HMODULE hmodule;
-
- DWORD api_major; /* API version that this program was */
- DWORD api_minor; /* linked with */
- /* For future expansion, so apps won't have to be relinked if we
- add an item. */
-#ifdef __x86_64__
- DWORD_PTR unused2[4];
-#else
- DWORD_PTR unused2[2];
-#endif
-
- int (*posix_memalign)(void **, size_t, size_t);
-
- void *pseudo_reloc_start;
- void *pseudo_reloc_end;
- void *image_base;
-
-#if defined (__INSIDE_CYGWIN__) && defined (__cplusplus)
- MTinterface *threadinterface;
-#else
- void *threadinterface;
-#endif
- struct _reent *impure_ptr;
-};
-#define per_process_overwrite offsetof (struct per_process, threadinterface)
-
-#ifdef _PATH_PASSWD
-extern HANDLE cygwin_logon_user (const struct passwd *, const char *);
-#endif
-extern void cygwin_set_impersonation_token (const HANDLE);
-
-/* included if <windows.h> is included */
-extern int cygwin_attach_handle_to_fd (char *, int, HANDLE, mode_t, DWORD);
-
-extern void cygwin_premain0 (int, char **, struct per_process *);
-extern void cygwin_premain1 (int, char **, struct per_process *);
-extern void cygwin_premain2 (int, char **, struct per_process *);
-extern void cygwin_premain3 (int, char **, struct per_process *);
-
-#ifdef __CYGWIN__
-#include <sys/resource.h>
-
-#define TTY_CONSOLE 0x40000000
-
-#define EXTERNAL_PINFO_VERSION_16_BIT 0
-#define EXTERNAL_PINFO_VERSION_32_BIT 1
-#define EXTERNAL_PINFO_VERSION_32_LP 2
-#define EXTERNAL_PINFO_VERSION EXTERNAL_PINFO_VERSION_32_LP
-
-#ifndef __uid_t_defined
-typedef __uint16_t __uid16_t;
-typedef __uint16_t __gid16_t;
-typedef __uint32_t uid_t;
-typedef __uint32_t gid_t;
-#endif
-
-struct external_pinfo
- {
- pid_t pid;
- pid_t ppid;
- DWORD exitcode;
- DWORD dwProcessId, dwSpawnedProcessId;
- __uid16_t uid;
- __gid16_t gid;
- pid_t pgid;
- pid_t sid;
- int ctty;
- mode_t umask;
-
- long start_time;
- struct rusage rusage_self;
- struct rusage rusage_children;
-
- char progname[MAX_PATH];
-
- DWORD strace_mask;
- DWORD version;
-
- DWORD process_state;
-
- /* Only available if version >= EXTERNAL_PINFO_VERSION_32_BIT */
- uid_t uid32;
- gid_t gid32;
-
- /* Only available if version >= EXTERNAL_PINFO_VERSION_32_LP */
- char *progname_long;
-};
-#endif /*__CYGWIN__*/
-#endif /*WINVER*/
-
-#ifdef __cplusplus
-};
-#endif
-#endif /* _SYS_CYGWIN_H */
diff --git a/winsup/cygwin/include/sys/dirent.h b/winsup/cygwin/include/sys/dirent.h
deleted file mode 100644
index 46c34ab5e..000000000
--- a/winsup/cygwin/include/sys/dirent.h
+++ /dev/null
@@ -1,120 +0,0 @@
-/* Posix dirent.h for WIN32.
-
- Copyright 2001, 2002, 2003, 2005, 2006, 2007, 2008, 2010, 2012,
- 2013 Red Hat, Inc.
-
- This software is a copyrighted work licensed under the terms of the
- Cygwin license. Please consult the file "CYGWIN_LICENSE" for
- details. */
-
-/* Including this file should not require any Windows headers. */
-
-#ifndef _SYS_DIRENT_H
-#define _SYS_DIRENT_H
-
-#include <sys/types.h>
-#include <limits.h>
-
-#define __DIRENT_VERSION 2
-
-#ifndef __x86_64__
-#pragma pack(push,4)
-#endif
-#define _DIRENT_HAVE_D_TYPE
-struct dirent
-{
- uint32_t __d_version; /* Used internally */
- ino_t d_ino;
- unsigned char d_type;
- unsigned char __d_unused1[3];
- __uint32_t __d_internal1;
- char d_name[NAME_MAX + 1];
-};
-#ifndef __x86_64__
-#pragma pack(pop)
-#endif
-
-#define d_fileno d_ino /* BSD compatible definition */
-
-#ifdef __x86_64__
-#define __DIRENT_COOKIE 0xcdcd8484
-#else
-#define __DIRENT_COOKIE 0xdede4242
-#endif
-
-#ifndef __x86_64__
-#pragma pack(push,4)
-#endif
-typedef struct __DIR
-{
- /* This is first to set alignment in non _COMPILING_NEWLIB case. */
- unsigned long __d_cookie;
- struct dirent *__d_dirent;
- char *__d_dirname; /* directory name with trailing '*' */
- __int32_t __d_position; /* used by telldir/seekdir */
- int __d_fd;
- uintptr_t __d_internal;
- void *__handle;
- void *__fh;
- unsigned __flags;
-} DIR;
-#ifndef __x86_64__
-#pragma pack(pop)
-#endif
-
-DIR *opendir (const char *);
-DIR *fdopendir (int);
-struct dirent *readdir (DIR *);
-int readdir_r (DIR * __restrict, struct dirent * __restrict,
- struct dirent ** __restrict);
-void rewinddir (DIR *);
-int closedir (DIR *);
-
-int dirfd (DIR *);
-
-#ifndef _POSIX_SOURCE
-#ifndef __INSIDE_CYGWIN__
-long telldir (DIR *);
-void seekdir (DIR *, long loc);
-#endif
-
-int scandir (const char *__dir,
- struct dirent ***__namelist,
- int (*select) (const struct dirent *),
- int (*compar) (const struct dirent **, const struct dirent **));
-
-int scandirat (int __dirfd, const char *__dir, struct dirent ***__namelist,
- int (*select) (const struct dirent *),
- int (*compar) (const struct dirent **, const struct dirent **));
-
-int alphasort (const struct dirent **__a, const struct dirent **__b);
-#ifdef _DIRENT_HAVE_D_TYPE
-/* File types for `d_type'. */
-enum
-{
- DT_UNKNOWN = 0,
-# define DT_UNKNOWN DT_UNKNOWN
- DT_FIFO = 1,
-# define DT_FIFO DT_FIFO
- DT_CHR = 2,
-# define DT_CHR DT_CHR
- DT_DIR = 4,
-# define DT_DIR DT_DIR
- DT_BLK = 6,
-# define DT_BLK DT_BLK
- DT_REG = 8,
-# define DT_REG DT_REG
- DT_LNK = 10,
-# define DT_LNK DT_LNK
- DT_SOCK = 12,
-# define DT_SOCK DT_SOCK
- DT_WHT = 14
-# define DT_WHT DT_WHT
-};
-
-/* Convert between stat structure types and directory types. */
-# define IFTODT(mode) (((mode) & 0170000) >> 12)
-# define DTTOIF(dirtype) ((dirtype) << 12)
-#endif /* _DIRENT_HAVE_D_TYPE */
-#endif /* _POSIX_SOURCE */
-#endif /*_SYS_DIRENT_H*/
diff --git a/winsup/cygwin/include/sys/elf.h b/winsup/cygwin/include/sys/elf.h
deleted file mode 100644
index b2d6b77c9..000000000
--- a/winsup/cygwin/include/sys/elf.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*-
- * Copyright (c) 2001 David E. O'Brien.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD$
- */
-
-/*
- * This is a Solaris compatibility header
- */
-
-#ifndef _SYS_ELF_H_
-#define _SYS_ELF_H_
-
-#include <sys/types.h>
-#include <machine/elf.h>
-#include <sys/elf32.h>
-#include <sys/elf64.h>
-
-#endif /* !_SYS_ELF_H_ */
diff --git a/winsup/cygwin/include/sys/elf32.h b/winsup/cygwin/include/sys/elf32.h
deleted file mode 100644
index 62bf7be68..000000000
--- a/winsup/cygwin/include/sys/elf32.h
+++ /dev/null
@@ -1,245 +0,0 @@
-/*-
- * Copyright (c) 1996-1998 John D. Polstra.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD$
- */
-
-#ifndef _SYS_ELF32_H_
-#define _SYS_ELF32_H_ 1
-
-#include <sys/elf_common.h>
-
-/*
- * ELF definitions common to all 32-bit architectures.
- */
-
-typedef uint32_t Elf32_Addr;
-typedef uint16_t Elf32_Half;
-typedef uint32_t Elf32_Off;
-typedef int32_t Elf32_Sword;
-typedef uint32_t Elf32_Word;
-typedef uint64_t Elf32_Lword;
-
-typedef Elf32_Word Elf32_Hashelt;
-
-/* Non-standard class-dependent datatype used for abstraction. */
-typedef Elf32_Word Elf32_Size;
-typedef Elf32_Sword Elf32_Ssize;
-
-/*
- * ELF header.
- */
-
-typedef struct {
- unsigned char e_ident[EI_NIDENT]; /* File identification. */
- Elf32_Half e_type; /* File type. */
- Elf32_Half e_machine; /* Machine architecture. */
- Elf32_Word e_version; /* ELF format version. */
- Elf32_Addr e_entry; /* Entry point. */
- Elf32_Off e_phoff; /* Program header file offset. */
- Elf32_Off e_shoff; /* Section header file offset. */
- Elf32_Word e_flags; /* Architecture-specific flags. */
- Elf32_Half e_ehsize; /* Size of ELF header in bytes. */
- Elf32_Half e_phentsize; /* Size of program header entry. */
- Elf32_Half e_phnum; /* Number of program header entries. */
- Elf32_Half e_shentsize; /* Size of section header entry. */
- Elf32_Half e_shnum; /* Number of section header entries. */
- Elf32_Half e_shstrndx; /* Section name strings section. */
-} Elf32_Ehdr;
-
-/*
- * Section header.
- */
-
-typedef struct {
- Elf32_Word sh_name; /* Section name (index into the
- section header string table). */
- Elf32_Word sh_type; /* Section type. */
- Elf32_Word sh_flags; /* Section flags. */
- Elf32_Addr sh_addr; /* Address in memory image. */
- Elf32_Off sh_offset; /* Offset in file. */
- Elf32_Word sh_size; /* Size in bytes. */
- Elf32_Word sh_link; /* Index of a related section. */
- Elf32_Word sh_info; /* Depends on section type. */
- Elf32_Word sh_addralign; /* Alignment in bytes. */
- Elf32_Word sh_entsize; /* Size of each entry in section. */
-} Elf32_Shdr;
-
-/*
- * Program header.
- */
-
-typedef struct {
- Elf32_Word p_type; /* Entry type. */
- Elf32_Off p_offset; /* File offset of contents. */
- Elf32_Addr p_vaddr; /* Virtual address in memory image. */
- Elf32_Addr p_paddr; /* Physical address (not used). */
- Elf32_Word p_filesz; /* Size of contents in file. */
- Elf32_Word p_memsz; /* Size of contents in memory. */
- Elf32_Word p_flags; /* Access permission flags. */
- Elf32_Word p_align; /* Alignment in memory and file. */
-} Elf32_Phdr;
-
-/*
- * Dynamic structure. The ".dynamic" section contains an array of them.
- */
-
-typedef struct {
- Elf32_Sword d_tag; /* Entry type. */
- union {
- Elf32_Word d_val; /* Integer value. */
- Elf32_Addr d_ptr; /* Address value. */
- } d_un;
-} Elf32_Dyn;
-
-/*
- * Relocation entries.
- */
-
-/* Relocations that don't need an addend field. */
-typedef struct {
- Elf32_Addr r_offset; /* Location to be relocated. */
- Elf32_Word r_info; /* Relocation type and symbol index. */
-} Elf32_Rel;
-
-/* Relocations that need an addend field. */
-typedef struct {
- Elf32_Addr r_offset; /* Location to be relocated. */
- Elf32_Word r_info; /* Relocation type and symbol index. */
- Elf32_Sword r_addend; /* Addend. */
-} Elf32_Rela;
-
-/* Macros for accessing the fields of r_info. */
-#define ELF32_R_SYM(info) ((info) >> 8)
-#define ELF32_R_TYPE(info) ((unsigned char)(info))
-
-/* Macro for constructing r_info from field values. */
-#define ELF32_R_INFO(sym, type) (((sym) << 8) + (unsigned char)(type))
-
-/*
- * Note entry header
- */
-typedef Elf_Note Elf32_Nhdr;
-
-/*
- * Move entry
- */
-typedef struct {
- Elf32_Lword m_value; /* symbol value */
- Elf32_Word m_info; /* size + index */
- Elf32_Word m_poffset; /* symbol offset */
- Elf32_Half m_repeat; /* repeat count */
- Elf32_Half m_stride; /* stride info */
-} Elf32_Move;
-
-/*
- * The macros compose and decompose values for Move.r_info
- *
- * sym = ELF32_M_SYM(M.m_info)
- * size = ELF32_M_SIZE(M.m_info)
- * M.m_info = ELF32_M_INFO(sym, size)
- */
-#define ELF32_M_SYM(info) ((info)>>8)
-#define ELF32_M_SIZE(info) ((unsigned char)(info))
-#define ELF32_M_INFO(sym, size) (((sym)<<8)+(unsigned char)(size))
-
-/*
- * Hardware/Software capabilities entry
- */
-typedef struct {
- Elf32_Word c_tag; /* how to interpret value */
- union {
- Elf32_Word c_val;
- Elf32_Addr c_ptr;
- } c_un;
-} Elf32_Cap;
-
-/*
- * Symbol table entries.
- */
-
-typedef struct {
- Elf32_Word st_name; /* String table index of name. */
- Elf32_Addr st_value; /* Symbol value. */
- Elf32_Word st_size; /* Size of associated object. */
- unsigned char st_info; /* Type and binding information. */
- unsigned char st_other; /* Reserved (not used). */
- Elf32_Half st_shndx; /* Section index of symbol. */
-} Elf32_Sym;
-
-/* Macros for accessing the fields of st_info. */
-#define ELF32_ST_BIND(info) ((info) >> 4)
-#define ELF32_ST_TYPE(info) ((info) & 0xf)
-
-/* Macro for constructing st_info from field values. */
-#define ELF32_ST_INFO(bind, type) (((bind) << 4) + ((type) & 0xf))
-
-/* Macro for accessing the fields of st_other. */
-#define ELF32_ST_VISIBILITY(oth) ((oth) & 0x3)
-
-/* Structures used by Sun & GNU symbol versioning. */
-typedef struct
-{
- Elf32_Half vd_version;
- Elf32_Half vd_flags;
- Elf32_Half vd_ndx;
- Elf32_Half vd_cnt;
- Elf32_Word vd_hash;
- Elf32_Word vd_aux;
- Elf32_Word vd_next;
-} Elf32_Verdef;
-
-typedef struct
-{
- Elf32_Word vda_name;
- Elf32_Word vda_next;
-} Elf32_Verdaux;
-
-typedef struct
-{
- Elf32_Half vn_version;
- Elf32_Half vn_cnt;
- Elf32_Word vn_file;
- Elf32_Word vn_aux;
- Elf32_Word vn_next;
-} Elf32_Verneed;
-
-typedef struct
-{
- Elf32_Word vna_hash;
- Elf32_Half vna_flags;
- Elf32_Half vna_other;
- Elf32_Word vna_name;
- Elf32_Word vna_next;
-} Elf32_Vernaux;
-
-typedef Elf32_Half Elf32_Versym;
-
-typedef struct {
- Elf32_Half si_boundto; /* direct bindings - symbol bound to */
- Elf32_Half si_flags; /* per symbol flags */
-} Elf32_Syminfo;
-
-#endif /* !_SYS_ELF32_H_ */
diff --git a/winsup/cygwin/include/sys/elf64.h b/winsup/cygwin/include/sys/elf64.h
deleted file mode 100644
index 4ec7d341e..000000000
--- a/winsup/cygwin/include/sys/elf64.h
+++ /dev/null
@@ -1,248 +0,0 @@
-/*-
- * Copyright (c) 1996-1998 John D. Polstra.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD$
- */
-
-#ifndef _SYS_ELF64_H_
-#define _SYS_ELF64_H_ 1
-
-#include <sys/elf_common.h>
-
-/*
- * ELF definitions common to all 64-bit architectures.
- */
-
-typedef uint64_t Elf64_Addr;
-typedef uint16_t Elf64_Half;
-typedef uint64_t Elf64_Off;
-typedef int32_t Elf64_Sword;
-typedef int64_t Elf64_Sxword;
-typedef uint32_t Elf64_Word;
-typedef uint64_t Elf64_Lword;
-typedef uint64_t Elf64_Xword;
-
-/*
- * Types of dynamic symbol hash table bucket and chain elements.
- *
- * This is inconsistent among 64 bit architectures, so a machine dependent
- * typedef is required.
- */
-
-typedef Elf64_Word Elf64_Hashelt;
-
-/* Non-standard class-dependent datatype used for abstraction. */
-typedef Elf64_Xword Elf64_Size;
-typedef Elf64_Sxword Elf64_Ssize;
-
-/*
- * ELF header.
- */
-
-typedef struct {
- unsigned char e_ident[EI_NIDENT]; /* File identification. */
- Elf64_Half e_type; /* File type. */
- Elf64_Half e_machine; /* Machine architecture. */
- Elf64_Word e_version; /* ELF format version. */
- Elf64_Addr e_entry; /* Entry point. */
- Elf64_Off e_phoff; /* Program header file offset. */
- Elf64_Off e_shoff; /* Section header file offset. */
- Elf64_Word e_flags; /* Architecture-specific flags. */
- Elf64_Half e_ehsize; /* Size of ELF header in bytes. */
- Elf64_Half e_phentsize; /* Size of program header entry. */
- Elf64_Half e_phnum; /* Number of program header entries. */
- Elf64_Half e_shentsize; /* Size of section header entry. */
- Elf64_Half e_shnum; /* Number of section header entries. */
- Elf64_Half e_shstrndx; /* Section name strings section. */
-} Elf64_Ehdr;
-
-/*
- * Section header.
- */
-
-typedef struct {
- Elf64_Word sh_name; /* Section name (index into the
- section header string table). */
- Elf64_Word sh_type; /* Section type. */
- Elf64_Xword sh_flags; /* Section flags. */
- Elf64_Addr sh_addr; /* Address in memory image. */
- Elf64_Off sh_offset; /* Offset in file. */
- Elf64_Xword sh_size; /* Size in bytes. */
- Elf64_Word sh_link; /* Index of a related section. */
- Elf64_Word sh_info; /* Depends on section type. */
- Elf64_Xword sh_addralign; /* Alignment in bytes. */
- Elf64_Xword sh_entsize; /* Size of each entry in section. */
-} Elf64_Shdr;
-
-/*
- * Program header.
- */
-
-typedef struct {
- Elf64_Word p_type; /* Entry type. */
- Elf64_Word p_flags; /* Access permission flags. */
- Elf64_Off p_offset; /* File offset of contents. */
- Elf64_Addr p_vaddr; /* Virtual address in memory image. */
- Elf64_Addr p_paddr; /* Physical address (not used). */
- Elf64_Xword p_filesz; /* Size of contents in file. */
- Elf64_Xword p_memsz; /* Size of contents in memory. */
- Elf64_Xword p_align; /* Alignment in memory and file. */
-} Elf64_Phdr;
-
-/*
- * Dynamic structure. The ".dynamic" section contains an array of them.
- */
-
-typedef struct {
- Elf64_Sxword d_tag; /* Entry type. */
- union {
- Elf64_Xword d_val; /* Integer value. */
- Elf64_Addr d_ptr; /* Address value. */
- } d_un;
-} Elf64_Dyn;
-
-/*
- * Relocation entries.
- */
-
-/* Relocations that don't need an addend field. */
-typedef struct {
- Elf64_Addr r_offset; /* Location to be relocated. */
- Elf64_Xword r_info; /* Relocation type and symbol index. */
-} Elf64_Rel;
-
-/* Relocations that need an addend field. */
-typedef struct {
- Elf64_Addr r_offset; /* Location to be relocated. */
- Elf64_Xword r_info; /* Relocation type and symbol index. */
- Elf64_Sxword r_addend; /* Addend. */
-} Elf64_Rela;
-
-/* Macros for accessing the fields of r_info. */
-#define ELF64_R_SYM(info) ((info) >> 32)
-#define ELF64_R_TYPE(info) ((info) & 0xffffffffL)
-
-/* Macro for constructing r_info from field values. */
-#define ELF64_R_INFO(sym, type) (((sym) << 32) + ((type) & 0xffffffffL))
-
-#define ELF64_R_TYPE_DATA(info) (((Elf64_Xword)(info)<<32)>>40)
-#define ELF64_R_TYPE_ID(info) (((Elf64_Xword)(info)<<56)>>56)
-#define ELF64_R_TYPE_INFO(data, type) \
- (((Elf64_Xword)(data)<<8)+(Elf64_Xword)(type))
-
-/*
- * Note entry header
- */
-typedef Elf_Note Elf64_Nhdr;
-
-/*
- * Move entry
- */
-typedef struct {
- Elf64_Lword m_value; /* symbol value */
- Elf64_Xword m_info; /* size + index */
- Elf64_Xword m_poffset; /* symbol offset */
- Elf64_Half m_repeat; /* repeat count */
- Elf64_Half m_stride; /* stride info */
-} Elf64_Move;
-
-#define ELF64_M_SYM(info) ((info)>>8)
-#define ELF64_M_SIZE(info) ((unsigned char)(info))
-#define ELF64_M_INFO(sym, size) (((sym)<<8)+(unsigned char)(size))
-
-/*
- * Hardware/Software capabilities entry
- */
-typedef struct {
- Elf64_Xword c_tag; /* how to interpret value */
- union {
- Elf64_Xword c_val;
- Elf64_Addr c_ptr;
- } c_un;
-} Elf64_Cap;
-
-/*
- * Symbol table entries.
- */
-
-typedef struct {
- Elf64_Word st_name; /* String table index of name. */
- unsigned char st_info; /* Type and binding information. */
- unsigned char st_other; /* Reserved (not used). */
- Elf64_Half st_shndx; /* Section index of symbol. */
- Elf64_Addr st_value; /* Symbol value. */
- Elf64_Xword st_size; /* Size of associated object. */
-} Elf64_Sym;
-
-/* Macros for accessing the fields of st_info. */
-#define ELF64_ST_BIND(info) ((info) >> 4)
-#define ELF64_ST_TYPE(info) ((info) & 0xf)
-
-/* Macro for constructing st_info from field values. */
-#define ELF64_ST_INFO(bind, type) (((bind) << 4) + ((type) & 0xf))
-
-/* Macro for accessing the fields of st_other. */
-#define ELF64_ST_VISIBILITY(oth) ((oth) & 0x3)
-
-/* Structures used by Sun & GNU-style symbol versioning. */
-typedef struct {
- Elf64_Half vd_version;
- Elf64_Half vd_flags;
- Elf64_Half vd_ndx;
- Elf64_Half vd_cnt;
- Elf64_Word vd_hash;
- Elf64_Word vd_aux;
- Elf64_Word vd_next;
-} Elf64_Verdef;
-
-typedef struct {
- Elf64_Word vda_name;
- Elf64_Word vda_next;
-} Elf64_Verdaux;
-
-typedef struct {
- Elf64_Half vn_version;
- Elf64_Half vn_cnt;
- Elf64_Word vn_file;
- Elf64_Word vn_aux;
- Elf64_Word vn_next;
-} Elf64_Verneed;
-
-typedef struct {
- Elf64_Word vna_hash;
- Elf64_Half vna_flags;
- Elf64_Half vna_other;
- Elf64_Word vna_name;
- Elf64_Word vna_next;
-} Elf64_Vernaux;
-
-typedef Elf64_Half Elf64_Versym;
-
-typedef struct {
- Elf64_Half si_boundto; /* direct bindings - symbol bound to */
- Elf64_Half si_flags; /* per symbol flags */
-} Elf64_Syminfo;
-
-#endif /* !_SYS_ELF64_H_ */
diff --git a/winsup/cygwin/include/sys/elf_common.h b/winsup/cygwin/include/sys/elf_common.h
deleted file mode 100644
index 4b1025613..000000000
--- a/winsup/cygwin/include/sys/elf_common.h
+++ /dev/null
@@ -1,1110 +0,0 @@
-/*-
- * Copyright (c) 2000, 2001, 2008, 2011, David E. O'Brien
- * Copyright (c) 1998 John D. Polstra.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD$
- */
-
-#ifndef _SYS_ELF_COMMON_H_
-#define _SYS_ELF_COMMON_H_ 1
-
-/*
- * ELF definitions that are independent of architecture or word size.
- */
-
-/*
- * Note header. The ".note" section contains an array of notes. Each
- * begins with this header, aligned to a word boundary. Immediately
- * following the note header is n_namesz bytes of name, padded to the
- * next word boundary. Then comes n_descsz bytes of descriptor, again
- * padded to a word boundary. The values of n_namesz and n_descsz do
- * not include the padding.
- */
-
-typedef struct {
- u_int32_t n_namesz; /* Length of name. */
- u_int32_t n_descsz; /* Length of descriptor. */
- u_int32_t n_type; /* Type of this note. */
-} Elf_Note;
-
-/*
- * The header for GNU-style hash sections.
- */
-
-typedef struct {
- u_int32_t gh_nbuckets; /* Number of hash buckets. */
- u_int32_t gh_symndx; /* First visible symbol in .dynsym. */
- u_int32_t gh_maskwords; /* #maskwords used in bloom filter. */
- u_int32_t gh_shift2; /* Bloom filter shift count. */
-} Elf_GNU_Hash_Header;
-
-/* Indexes into the e_ident array. Keep synced with
- http://www.sco.com/developers/gabi/latest/ch4.eheader.html */
-#define EI_MAG0 0 /* Magic number, byte 0. */
-#define EI_MAG1 1 /* Magic number, byte 1. */
-#define EI_MAG2 2 /* Magic number, byte 2. */
-#define EI_MAG3 3 /* Magic number, byte 3. */
-#define EI_CLASS 4 /* Class of machine. */
-#define EI_DATA 5 /* Data format. */
-#define EI_VERSION 6 /* ELF format version. */
-#define EI_OSABI 7 /* Operating system / ABI identification */
-#define EI_ABIVERSION 8 /* ABI version */
-#define OLD_EI_BRAND 8 /* Start of architecture identification. */
-#define EI_PAD 9 /* Start of padding (per SVR4 ABI). */
-#define EI_NIDENT 16 /* Size of e_ident array. */
-
-/* Values for the magic number bytes. */
-#define ELFMAG0 0x7f
-#define ELFMAG1 'E'
-#define ELFMAG2 'L'
-#define ELFMAG3 'F'
-#define ELFMAG "\177ELF" /* magic string */
-#define SELFMAG 4 /* magic string size */
-
-/* Values for e_ident[EI_VERSION] and e_version. */
-#define EV_NONE 0
-#define EV_CURRENT 1
-
-/* Values for e_ident[EI_CLASS]. */
-#define ELFCLASSNONE 0 /* Unknown class. */
-#define ELFCLASS32 1 /* 32-bit architecture. */
-#define ELFCLASS64 2 /* 64-bit architecture. */
-
-/* Values for e_ident[EI_DATA]. */
-#define ELFDATANONE 0 /* Unknown data format. */
-#define ELFDATA2LSB 1 /* 2's complement little-endian. */
-#define ELFDATA2MSB 2 /* 2's complement big-endian. */
-
-/* Values for e_ident[EI_OSABI]. */
-#define ELFOSABI_NONE 0 /* UNIX System V ABI */
-#define ELFOSABI_HPUX 1 /* HP-UX operating system */
-#define ELFOSABI_NETBSD 2 /* NetBSD */
-#define ELFOSABI_LINUX 3 /* GNU/Linux */
-#define ELFOSABI_HURD 4 /* GNU/Hurd */
-#define ELFOSABI_86OPEN 5 /* 86Open common IA32 ABI */
-#define ELFOSABI_SOLARIS 6 /* Solaris */
-#define ELFOSABI_AIX 7 /* AIX */
-#define ELFOSABI_IRIX 8 /* IRIX */
-#define ELFOSABI_FREEBSD 9 /* FreeBSD */
-#define ELFOSABI_TRU64 10 /* TRU64 UNIX */
-#define ELFOSABI_MODESTO 11 /* Novell Modesto */
-#define ELFOSABI_OPENBSD 12 /* OpenBSD */
-#define ELFOSABI_OPENVMS 13 /* Open VMS */
-#define ELFOSABI_NSK 14 /* HP Non-Stop Kernel */
-#define ELFOSABI_AROS 15 /* Amiga Research OS */
-#define ELFOSABI_ARM 97 /* ARM */
-#define ELFOSABI_STANDALONE 255 /* Standalone (embedded) application */
-
-#define ELFOSABI_SYSV ELFOSABI_NONE /* symbol used in old spec */
-#define ELFOSABI_MONTEREY ELFOSABI_AIX /* Monterey */
-
-/* e_ident */
-#define IS_ELF(ehdr) ((ehdr).e_ident[EI_MAG0] == ELFMAG0 && \
- (ehdr).e_ident[EI_MAG1] == ELFMAG1 && \
- (ehdr).e_ident[EI_MAG2] == ELFMAG2 && \
- (ehdr).e_ident[EI_MAG3] == ELFMAG3)
-
-/* Values for e_type. */
-#define ET_NONE 0 /* Unknown type. */
-#define ET_REL 1 /* Relocatable. */
-#define ET_EXEC 2 /* Executable. */
-#define ET_DYN 3 /* Shared object. */
-#define ET_CORE 4 /* Core file. */
-#define ET_LOOS 0xfe00 /* First operating system specific. */
-#define ET_HIOS 0xfeff /* Last operating system-specific. */
-#define ET_LOPROC 0xff00 /* First processor-specific. */
-#define ET_HIPROC 0xffff /* Last processor-specific. */
-
-/* Values for e_machine. */
-#define EM_NONE 0 /* Unknown machine. */
-#define EM_M32 1 /* AT&T WE32100. */
-#define EM_SPARC 2 /* Sun SPARC. */
-#define EM_386 3 /* Intel i386. */
-#define EM_68K 4 /* Motorola 68000. */
-#define EM_88K 5 /* Motorola 88000. */
-#define EM_860 7 /* Intel i860. */
-#define EM_MIPS 8 /* MIPS R3000 Big-Endian only. */
-#define EM_S370 9 /* IBM System/370. */
-#define EM_MIPS_RS3_LE 10 /* MIPS R3000 Little-Endian. */
-#define EM_PARISC 15 /* HP PA-RISC. */
-#define EM_VPP500 17 /* Fujitsu VPP500. */
-#define EM_SPARC32PLUS 18 /* SPARC v8plus. */
-#define EM_960 19 /* Intel 80960. */
-#define EM_PPC 20 /* PowerPC 32-bit. */
-#define EM_PPC64 21 /* PowerPC 64-bit. */
-#define EM_S390 22 /* IBM System/390. */
-#define EM_V800 36 /* NEC V800. */
-#define EM_FR20 37 /* Fujitsu FR20. */
-#define EM_RH32 38 /* TRW RH-32. */
-#define EM_RCE 39 /* Motorola RCE. */
-#define EM_ARM 40 /* ARM. */
-#define EM_SH 42 /* Hitachi SH. */
-#define EM_SPARCV9 43 /* SPARC v9 64-bit. */
-#define EM_TRICORE 44 /* Siemens TriCore embedded processor. */
-#define EM_ARC 45 /* Argonaut RISC Core. */
-#define EM_H8_300 46 /* Hitachi H8/300. */
-#define EM_H8_300H 47 /* Hitachi H8/300H. */
-#define EM_H8S 48 /* Hitachi H8S. */
-#define EM_H8_500 49 /* Hitachi H8/500. */
-#define EM_IA_64 50 /* Intel IA-64 Processor. */
-#define EM_MIPS_X 51 /* Stanford MIPS-X. */
-#define EM_COLDFIRE 52 /* Motorola ColdFire. */
-#define EM_68HC12 53 /* Motorola M68HC12. */
-#define EM_MMA 54 /* Fujitsu MMA. */
-#define EM_PCP 55 /* Siemens PCP. */
-#define EM_NCPU 56 /* Sony nCPU. */
-#define EM_NDR1 57 /* Denso NDR1 microprocessor. */
-#define EM_STARCORE 58 /* Motorola Star*Core processor. */
-#define EM_ME16 59 /* Toyota ME16 processor. */
-#define EM_ST100 60 /* STMicroelectronics ST100 processor. */
-#define EM_TINYJ 61 /* Advanced Logic Corp. TinyJ processor. */
-#define EM_X86_64 62 /* Advanced Micro Devices x86-64 */
-#define EM_AMD64 EM_X86_64 /* Advanced Micro Devices x86-64 (compat) */
-#define EM_PDSP 63 /* Sony DSP Processor. */
-#define EM_FX66 66 /* Siemens FX66 microcontroller. */
-#define EM_ST9PLUS 67 /* STMicroelectronics ST9+ 8/16
- microcontroller. */
-#define EM_ST7 68 /* STmicroelectronics ST7 8-bit
- microcontroller. */
-#define EM_68HC16 69 /* Motorola MC68HC16 microcontroller. */
-#define EM_68HC11 70 /* Motorola MC68HC11 microcontroller. */
-#define EM_68HC08 71 /* Motorola MC68HC08 microcontroller. */
-#define EM_68HC05 72 /* Motorola MC68HC05 microcontroller. */
-#define EM_SVX 73 /* Silicon Graphics SVx. */
-#define EM_ST19 74 /* STMicroelectronics ST19 8-bit mc. */
-#define EM_VAX 75 /* Digital VAX. */
-#define EM_CRIS 76 /* Axis Communications 32-bit embedded
- processor. */
-#define EM_JAVELIN 77 /* Infineon Technologies 32-bit embedded
- processor. */
-#define EM_FIREPATH 78 /* Element 14 64-bit DSP Processor. */
-#define EM_ZSP 79 /* LSI Logic 16-bit DSP Processor. */
-#define EM_MMIX 80 /* Donald Knuth's educational 64-bit proc. */
-#define EM_HUANY 81 /* Harvard University machine-independent
- object files. */
-#define EM_PRISM 82 /* SiTera Prism. */
-#define EM_AVR 83 /* Atmel AVR 8-bit microcontroller. */
-#define EM_FR30 84 /* Fujitsu FR30. */
-#define EM_D10V 85 /* Mitsubishi D10V. */
-#define EM_D30V 86 /* Mitsubishi D30V. */
-#define EM_V850 87 /* NEC v850. */
-#define EM_M32R 88 /* Mitsubishi M32R. */
-#define EM_MN10300 89 /* Matsushita MN10300. */
-#define EM_MN10200 90 /* Matsushita MN10200. */
-#define EM_PJ 91 /* picoJava. */
-#define EM_OPENRISC 92 /* OpenRISC 32-bit embedded processor. */
-#define EM_ARC_A5 93 /* ARC Cores Tangent-A5. */
-#define EM_XTENSA 94 /* Tensilica Xtensa Architecture. */
-#define EM_VIDEOCORE 95 /* Alphamosaic VideoCore processor. */
-#define EM_TMM_GPP 96 /* Thompson Multimedia General Purpose
- Processor. */
-#define EM_NS32K 97 /* National Semiconductor 32000 series. */
-#define EM_TPC 98 /* Tenor Network TPC processor. */
-#define EM_SNP1K 99 /* Trebia SNP 1000 processor. */
-#define EM_ST200 100 /* STMicroelectronics ST200 microcontroller. */
-#define EM_IP2K 101 /* Ubicom IP2xxx microcontroller family. */
-#define EM_MAX 102 /* MAX Processor. */
-#define EM_CR 103 /* National Semiconductor CompactRISC
- microprocessor. */
-#define EM_F2MC16 104 /* Fujitsu F2MC16. */
-#define EM_MSP430 105 /* Texas Instruments embedded microcontroller
- msp430. */
-#define EM_BLACKFIN 106 /* Analog Devices Blackfin (DSP) processor. */
-#define EM_SE_C33 107 /* S1C33 Family of Seiko Epson processors. */
-#define EM_SEP 108 /* Sharp embedded microprocessor. */
-#define EM_ARCA 109 /* Arca RISC Microprocessor. */
-#define EM_UNICORE 110 /* Microprocessor series from PKU-Unity Ltd.
- and MPRC of Peking University */
-
-/* Non-standard or deprecated. */
-#define EM_486 6 /* Intel i486. */
-#define EM_MIPS_RS4_BE 10 /* MIPS R4000 Big-Endian */
-#define EM_ALPHA_STD 41 /* Digital Alpha (standard value). */
-#define EM_ALPHA 0x9026 /* Alpha (written in the absence of an ABI) */
-
-/* Special section indexes. */
-#define SHN_UNDEF 0 /* Undefined, missing, irrelevant. */
-#define SHN_LORESERVE 0xff00 /* First of reserved range. */
-#define SHN_LOPROC 0xff00 /* First processor-specific. */
-#define SHN_HIPROC 0xff1f /* Last processor-specific. */
-#define SHN_LOOS 0xff20 /* First operating system-specific. */
-#define SHN_HIOS 0xff3f /* Last operating system-specific. */
-#define SHN_ABS 0xfff1 /* Absolute values. */
-#define SHN_COMMON 0xfff2 /* Common data. */
-#define SHN_XINDEX 0xffff /* Escape -- index stored elsewhere. */
-#define SHN_HIRESERVE 0xffff /* Last of reserved range. */
-
-/* sh_type */
-#define SHT_NULL 0 /* inactive */
-#define SHT_PROGBITS 1 /* program defined information */
-#define SHT_SYMTAB 2 /* symbol table section */
-#define SHT_STRTAB 3 /* string table section */
-#define SHT_RELA 4 /* relocation section with addends */
-#define SHT_HASH 5 /* symbol hash table section */
-#define SHT_DYNAMIC 6 /* dynamic section */
-#define SHT_NOTE 7 /* note section */
-#define SHT_NOBITS 8 /* no space section */
-#define SHT_REL 9 /* relocation section - no addends */
-#define SHT_SHLIB 10 /* reserved - purpose unknown */
-#define SHT_DYNSYM 11 /* dynamic symbol table section */
-#define SHT_INIT_ARRAY 14 /* Initialization function pointers. */
-#define SHT_FINI_ARRAY 15 /* Termination function pointers. */
-#define SHT_PREINIT_ARRAY 16 /* Pre-initialization function ptrs. */
-#define SHT_GROUP 17 /* Section group. */
-#define SHT_SYMTAB_SHNDX 18 /* Section indexes (see SHN_XINDEX). */
-#define SHT_LOOS 0x60000000 /* First of OS specific semantics */
-#define SHT_LOSUNW 0x6ffffff4
-#define SHT_SUNW_dof 0x6ffffff4
-#define SHT_SUNW_cap 0x6ffffff5
-#define SHT_SUNW_SIGNATURE 0x6ffffff6
-#define SHT_GNU_HASH 0x6ffffff6
-#define SHT_SUNW_ANNOTATE 0x6ffffff7
-#define SHT_SUNW_DEBUGSTR 0x6ffffff8
-#define SHT_SUNW_DEBUG 0x6ffffff9
-#define SHT_SUNW_move 0x6ffffffa
-#define SHT_SUNW_COMDAT 0x6ffffffb
-#define SHT_SUNW_syminfo 0x6ffffffc
-#define SHT_SUNW_verdef 0x6ffffffd
-#define SHT_GNU_verdef 0x6ffffffd /* Symbol versions provided */
-#define SHT_SUNW_verneed 0x6ffffffe
-#define SHT_GNU_verneed 0x6ffffffe /* Symbol versions required */
-#define SHT_SUNW_versym 0x6fffffff
-#define SHT_GNU_versym 0x6fffffff /* Symbol version table */
-#define SHT_HISUNW 0x6fffffff
-#define SHT_HIOS 0x6fffffff /* Last of OS specific semantics */
-#define SHT_LOPROC 0x70000000 /* reserved range for processor */
-#define SHT_AMD64_UNWIND 0x70000001 /* unwind information */
-#define SHT_MIPS_REGINFO 0x70000006
-#define SHT_MIPS_OPTIONS 0x7000000d
-#define SHT_MIPS_DWARF 0x7000001e /* MIPS gcc uses MIPS_DWARF */
-#define SHT_HIPROC 0x7fffffff /* specific section header types */
-#define SHT_LOUSER 0x80000000 /* reserved range for application */
-#define SHT_HIUSER 0xffffffff /* specific indexes */
-
-/* Flags for sh_flags. */
-#define SHF_WRITE 0x1 /* Section contains writable data. */
-#define SHF_ALLOC 0x2 /* Section occupies memory. */
-#define SHF_EXECINSTR 0x4 /* Section contains instructions. */
-#define SHF_MERGE 0x10 /* Section may be merged. */
-#define SHF_STRINGS 0x20 /* Section contains strings. */
-#define SHF_INFO_LINK 0x40 /* sh_info holds section index. */
-#define SHF_LINK_ORDER 0x80 /* Special ordering requirements. */
-#define SHF_OS_NONCONFORMING 0x100 /* OS-specific processing required. */
-#define SHF_GROUP 0x200 /* Member of section group. */
-#define SHF_TLS 0x400 /* Section contains TLS data. */
-#define SHF_MASKOS 0x0ff00000 /* OS-specific semantics. */
-#define SHF_MASKPROC 0xf0000000 /* Processor-specific semantics. */
-
-/* Values for p_type. */
-#define PT_NULL 0 /* Unused entry. */
-#define PT_LOAD 1 /* Loadable segment. */
-#define PT_DYNAMIC 2 /* Dynamic linking information segment. */
-#define PT_INTERP 3 /* Pathname of interpreter. */
-#define PT_NOTE 4 /* Auxiliary information. */
-#define PT_SHLIB 5 /* Reserved (not used). */
-#define PT_PHDR 6 /* Location of program header itself. */
-#define PT_TLS 7 /* Thread local storage segment */
-#define PT_LOOS 0x60000000 /* First OS-specific. */
-#define PT_SUNW_UNWIND 0x6464e550 /* amd64 UNWIND program header */
-#define PT_GNU_EH_FRAME 0x6474e550
-#define PT_GNU_STACK 0x6474e551
-#define PT_GNU_RELRO 0x6474e552
-#define PT_LOSUNW 0x6ffffffa
-#define PT_SUNWBSS 0x6ffffffa /* Sun Specific segment */
-#define PT_SUNWSTACK 0x6ffffffb /* describes the stack segment */
-#define PT_SUNWDTRACE 0x6ffffffc /* private */
-#define PT_SUNWCAP 0x6ffffffd /* hard/soft capabilities segment */
-#define PT_HISUNW 0x6fffffff
-#define PT_HIOS 0x6fffffff /* Last OS-specific. */
-#define PT_LOPROC 0x70000000 /* First processor-specific type. */
-#define PT_HIPROC 0x7fffffff /* Last processor-specific type. */
-
-/* Values for p_flags. */
-#define PF_X 0x1 /* Executable. */
-#define PF_W 0x2 /* Writable. */
-#define PF_R 0x4 /* Readable. */
-#define PF_MASKOS 0x0ff00000 /* Operating system-specific. */
-#define PF_MASKPROC 0xf0000000 /* Processor-specific. */
-
-/* Extended program header index. */
-#define PN_XNUM 0xffff
-
-/* Values for d_tag. */
-#define DT_NULL 0 /* Terminating entry. */
-#define DT_NEEDED 1 /* String table offset of a needed shared
- library. */
-#define DT_PLTRELSZ 2 /* Total size in bytes of PLT relocations. */
-#define DT_PLTGOT 3 /* Processor-dependent address. */
-#define DT_HASH 4 /* Address of symbol hash table. */
-#define DT_STRTAB 5 /* Address of string table. */
-#define DT_SYMTAB 6 /* Address of symbol table. */
-#define DT_RELA 7 /* Address of ElfNN_Rela relocations. */
-#define DT_RELASZ 8 /* Total size of ElfNN_Rela relocations. */
-#define DT_RELAENT 9 /* Size of each ElfNN_Rela relocation entry. */
-#define DT_STRSZ 10 /* Size of string table. */
-#define DT_SYMENT 11 /* Size of each symbol table entry. */
-#define DT_INIT 12 /* Address of initialization function. */
-#define DT_FINI 13 /* Address of finalization function. */
-#define DT_SONAME 14 /* String table offset of shared object
- name. */
-#define DT_RPATH 15 /* String table offset of library path. [sup] */
-#define DT_SYMBOLIC 16 /* Indicates "symbolic" linking. [sup] */
-#define DT_REL 17 /* Address of ElfNN_Rel relocations. */
-#define DT_RELSZ 18 /* Total size of ElfNN_Rel relocations. */
-#define DT_RELENT 19 /* Size of each ElfNN_Rel relocation. */
-#define DT_PLTREL 20 /* Type of relocation used for PLT. */
-#define DT_DEBUG 21 /* Reserved (not used). */
-#define DT_TEXTREL 22 /* Indicates there may be relocations in
- non-writable segments. [sup] */
-#define DT_JMPREL 23 /* Address of PLT relocations. */
-#define DT_BIND_NOW 24 /* [sup] */
-#define DT_INIT_ARRAY 25 /* Address of the array of pointers to
- initialization functions */
-#define DT_FINI_ARRAY 26 /* Address of the array of pointers to
- termination functions */
-#define DT_INIT_ARRAYSZ 27 /* Size in bytes of the array of
- initialization functions. */
-#define DT_FINI_ARRAYSZ 28 /* Size in bytes of the array of
- termination functions. */
-#define DT_RUNPATH 29 /* String table offset of a null-terminated
- library search path string. */
-#define DT_FLAGS 30 /* Object specific flag values. */
-#define DT_ENCODING 32 /* Values greater than or equal to DT_ENCODING
- and less than DT_LOOS follow the rules for
- the interpretation of the d_un union
- as follows: even == 'd_ptr', odd == 'd_val'
- or none */
-#define DT_PREINIT_ARRAY 32 /* Address of the array of pointers to
- pre-initialization functions. */
-#define DT_PREINIT_ARRAYSZ 33 /* Size in bytes of the array of
- pre-initialization functions. */
-#define DT_MAXPOSTAGS 34 /* number of positive tags */
-#define DT_LOOS 0x6000000d /* First OS-specific */
-#define DT_SUNW_AUXILIARY 0x6000000d /* symbol auxiliary name */
-#define DT_SUNW_RTLDINF 0x6000000e /* ld.so.1 info (private) */
-#define DT_SUNW_FILTER 0x6000000f /* symbol filter name */
-#define DT_SUNW_CAP 0x60000010 /* hardware/software */
-#define DT_HIOS 0x6ffff000 /* Last OS-specific */
-
-/*
- * DT_* entries which fall between DT_VALRNGHI & DT_VALRNGLO use the
- * Dyn.d_un.d_val field of the Elf*_Dyn structure.
- */
-#define DT_VALRNGLO 0x6ffffd00
-#define DT_CHECKSUM 0x6ffffdf8 /* elf checksum */
-#define DT_PLTPADSZ 0x6ffffdf9 /* pltpadding size */
-#define DT_MOVEENT 0x6ffffdfa /* move table entry size */
-#define DT_MOVESZ 0x6ffffdfb /* move table size */
-#define DT_FEATURE_1 0x6ffffdfc /* feature holder */
-#define DT_POSFLAG_1 0x6ffffdfd /* flags for DT_* entries, effecting */
- /* the following DT_* entry. */
- /* See DF_P1_* definitions */
-#define DT_SYMINSZ 0x6ffffdfe /* syminfo table size (in bytes) */
-#define DT_SYMINENT 0x6ffffdff /* syminfo entry size (in bytes) */
-#define DT_VALRNGHI 0x6ffffdff
-
-/*
- * DT_* entries which fall between DT_ADDRRNGHI & DT_ADDRRNGLO use the
- * Dyn.d_un.d_ptr field of the Elf*_Dyn structure.
- *
- * If any adjustment is made to the ELF object after it has been
- * built, these entries will need to be adjusted.
- */
-#define DT_ADDRRNGLO 0x6ffffe00
-#define DT_GNU_HASH 0x6ffffef5 /* GNU-style hash table */
-#define DT_CONFIG 0x6ffffefa /* configuration information */
-#define DT_DEPAUDIT 0x6ffffefb /* dependency auditing */
-#define DT_AUDIT 0x6ffffefc /* object auditing */
-#define DT_PLTPAD 0x6ffffefd /* pltpadding (sparcv9) */
-#define DT_MOVETAB 0x6ffffefe /* move table */
-#define DT_SYMINFO 0x6ffffeff /* syminfo table */
-#define DT_ADDRRNGHI 0x6ffffeff
-
-#define DT_VERSYM 0x6ffffff0 /* Address of versym section. */
-#define DT_RELACOUNT 0x6ffffff9 /* number of RELATIVE relocations */
-#define DT_RELCOUNT 0x6ffffffa /* number of RELATIVE relocations */
-#define DT_FLAGS_1 0x6ffffffb /* state flags - see DF_1_* defs */
-#define DT_VERDEF 0x6ffffffc /* Address of verdef section. */
-#define DT_VERDEFNUM 0x6ffffffd /* Number of elems in verdef section */
-#define DT_VERNEED 0x6ffffffe /* Address of verneed section. */
-#define DT_VERNEEDNUM 0x6fffffff /* Number of elems in verneed section */
-
-#define DT_LOPROC 0x70000000 /* First processor-specific type. */
-#define DT_DEPRECATED_SPARC_REGISTER 0x7000001
-#define DT_AUXILIARY 0x7ffffffd /* shared library auxiliary name */
-#define DT_USED 0x7ffffffe /* ignored - same as needed */
-#define DT_FILTER 0x7fffffff /* shared library filter name */
-#define DT_HIPROC 0x7fffffff /* Last processor-specific type. */
-
-/* Values for DT_FLAGS */
-#define DF_ORIGIN 0x0001 /* Indicates that the object being loaded may
- make reference to the $ORIGIN substitution
- string */
-#define DF_SYMBOLIC 0x0002 /* Indicates "symbolic" linking. */
-#define DF_TEXTREL 0x0004 /* Indicates there may be relocations in
- non-writable segments. */
-#define DF_BIND_NOW 0x0008 /* Indicates that the dynamic linker should
- process all relocations for the object
- containing this entry before transferring
- control to the program. */
-#define DF_STATIC_TLS 0x0010 /* Indicates that the shared object or
- executable contains code using a static
- thread-local storage scheme. */
-
-/* Values for DT_FLAGS_1 */
-#define DF_1_BIND_NOW 0x00000001 /* Same as DF_BIND_NOW */
-#define DF_1_GLOBAL 0x00000002 /* Set the RTLD_GLOBAL for object */
-#define DF_1_NODELETE 0x00000008 /* Set the RTLD_NODELETE for object */
-#define DF_1_LOADFLTR 0x00000010 /* Immediate loading of filtees */
-#define DF_1_NOOPEN 0x00000040 /* Do not allow loading on dlopen() */
-#define DF_1_ORIGIN 0x00000080 /* Process $ORIGIN */
-#define DF_1_NODEFLIB 0x00000800 /* Do not search default paths */
-
-/* Values for n_type. Used in core files. */
-#define NT_PRSTATUS 1 /* Process status. */
-#define NT_FPREGSET 2 /* Floating point registers. */
-#define NT_PRPSINFO 3 /* Process state info. */
-#define NT_THRMISC 7 /* Thread miscellaneous info. */
-
-/* Symbol Binding - ELFNN_ST_BIND - st_info */
-#define STB_LOCAL 0 /* Local symbol */
-#define STB_GLOBAL 1 /* Global symbol */
-#define STB_WEAK 2 /* like global - lower precedence */
-#define STB_LOOS 10 /* Reserved range for operating system */
-#define STB_HIOS 12 /* specific semantics. */
-#define STB_LOPROC 13 /* reserved range for processor */
-#define STB_HIPROC 15 /* specific semantics. */
-
-/* Symbol type - ELFNN_ST_TYPE - st_info */
-#define STT_NOTYPE 0 /* Unspecified type. */
-#define STT_OBJECT 1 /* Data object. */
-#define STT_FUNC 2 /* Function. */
-#define STT_SECTION 3 /* Section. */
-#define STT_FILE 4 /* Source file. */
-#define STT_COMMON 5 /* Uninitialized common block. */
-#define STT_TLS 6 /* TLS object. */
-#define STT_NUM 7
-#define STT_LOOS 10 /* Reserved range for operating system */
-#define STT_GNU_IFUNC 10
-#define STT_HIOS 12 /* specific semantics. */
-#define STT_LOPROC 13 /* reserved range for processor */
-#define STT_HIPROC 15 /* specific semantics. */
-
-/* Symbol visibility - ELFNN_ST_VISIBILITY - st_other */
-#define STV_DEFAULT 0x0 /* Default visibility (see binding). */
-#define STV_INTERNAL 0x1 /* Special meaning in relocatable objects. */
-#define STV_HIDDEN 0x2 /* Not visible. */
-#define STV_PROTECTED 0x3 /* Visible but not preemptible. */
-#define STV_EXPORTED 0x4
-#define STV_SINGLETON 0x5
-#define STV_ELIMINATE 0x6
-
-/* Special symbol table indexes. */
-#define STN_UNDEF 0 /* Undefined symbol index. */
-
-/* Symbol versioning flags. */
-#define VER_DEF_CURRENT 1
-#define VER_DEF_IDX(x) VER_NDX(x)
-
-#define VER_FLG_BASE 0x01
-#define VER_FLG_WEAK 0x02
-
-#define VER_NEED_CURRENT 1
-#define VER_NEED_WEAK (1u << 15)
-#define VER_NEED_HIDDEN VER_NDX_HIDDEN
-#define VER_NEED_IDX(x) VER_NDX(x)
-
-#define VER_NDX_LOCAL 0
-#define VER_NDX_GLOBAL 1
-#define VER_NDX_GIVEN 2
-
-#define VER_NDX_HIDDEN (1u << 15)
-#define VER_NDX(x) ((x) & ~(1u << 15))
-
-#define CA_SUNW_NULL 0
-#define CA_SUNW_HW_1 1 /* first hardware capabilities entry */
-#define CA_SUNW_SF_1 2 /* first software capabilities entry */
-
-/*
- * Syminfo flag values
- */
-#define SYMINFO_FLG_DIRECT 0x0001 /* symbol ref has direct association */
- /* to object containing defn. */
-#define SYMINFO_FLG_PASSTHRU 0x0002 /* ignored - see SYMINFO_FLG_FILTER */
-#define SYMINFO_FLG_COPY 0x0004 /* symbol is a copy-reloc */
-#define SYMINFO_FLG_LAZYLOAD 0x0008 /* object containing defn should be */
- /* lazily-loaded */
-#define SYMINFO_FLG_DIRECTBIND 0x0010 /* ref should be bound directly to */
- /* object containing defn. */
-#define SYMINFO_FLG_NOEXTDIRECT 0x0020 /* don't let an external reference */
- /* directly bind to this symbol */
-#define SYMINFO_FLG_FILTER 0x0002 /* symbol ref is associated to a */
-#define SYMINFO_FLG_AUXILIARY 0x0040 /* standard or auxiliary filter */
-
-/*
- * Syminfo.si_boundto values.
- */
-#define SYMINFO_BT_SELF 0xffff /* symbol bound to self */
-#define SYMINFO_BT_PARENT 0xfffe /* symbol bound to parent */
-#define SYMINFO_BT_NONE 0xfffd /* no special symbol binding */
-#define SYMINFO_BT_EXTERN 0xfffc /* symbol defined as external */
-#define SYMINFO_BT_LOWRESERVE 0xff00 /* beginning of reserved entries */
-
-/*
- * Syminfo version values.
- */
-#define SYMINFO_NONE 0 /* Syminfo version */
-#define SYMINFO_CURRENT 1
-#define SYMINFO_NUM 2
-
-/*
- * Relocation types.
- *
- * All machine architectures are defined here to allow tools on one to
- * handle others.
- */
-
-#define R_386_NONE 0 /* No relocation. */
-#define R_386_32 1 /* Add symbol value. */
-#define R_386_PC32 2 /* Add PC-relative symbol value. */
-#define R_386_GOT32 3 /* Add PC-relative GOT offset. */
-#define R_386_PLT32 4 /* Add PC-relative PLT offset. */
-#define R_386_COPY 5 /* Copy data from shared object. */
-#define R_386_GLOB_DAT 6 /* Set GOT entry to data address. */
-#define R_386_JMP_SLOT 7 /* Set GOT entry to code address. */
-#define R_386_RELATIVE 8 /* Add load address of shared object. */
-#define R_386_GOTOFF 9 /* Add GOT-relative symbol address. */
-#define R_386_GOTPC 10 /* Add PC-relative GOT table address. */
-#define R_386_TLS_TPOFF 14 /* Negative offset in static TLS block */
-#define R_386_TLS_IE 15 /* Absolute address of GOT for -ve static TLS */
-#define R_386_TLS_GOTIE 16 /* GOT entry for negative static TLS block */
-#define R_386_TLS_LE 17 /* Negative offset relative to static TLS */
-#define R_386_TLS_GD 18 /* 32 bit offset to GOT (index,off) pair */
-#define R_386_TLS_LDM 19 /* 32 bit offset to GOT (index,zero) pair */
-#define R_386_16 20
-#define R_386_PC16 21
-#define R_386_8 22
-#define R_386_PC8 23
-#define R_386_TLS_GD_32 24 /* 32 bit offset to GOT (index,off) pair */
-#define R_386_TLS_GD_PUSH 25 /* pushl instruction for Sun ABI GD sequence */
-#define R_386_TLS_GD_CALL 26 /* call instruction for Sun ABI GD sequence */
-#define R_386_TLS_GD_POP 27 /* popl instruction for Sun ABI GD sequence */
-#define R_386_TLS_LDM_32 28 /* 32 bit offset to GOT (index,zero) pair */
-#define R_386_TLS_LDM_PUSH 29 /* pushl instruction for Sun ABI LD sequence */
-#define R_386_TLS_LDM_CALL 30 /* call instruction for Sun ABI LD sequence */
-#define R_386_TLS_LDM_POP 31 /* popl instruction for Sun ABI LD sequence */
-#define R_386_TLS_LDO_32 32 /* 32 bit offset from start of TLS block */
-#define R_386_TLS_IE_32 33 /* 32 bit offset to GOT static TLS offset entry */
-#define R_386_TLS_LE_32 34 /* 32 bit offset within static TLS block */
-#define R_386_TLS_DTPMOD32 35 /* GOT entry containing TLS index */
-#define R_386_TLS_DTPOFF32 36 /* GOT entry containing TLS offset */
-#define R_386_TLS_TPOFF32 37 /* GOT entry of -ve static TLS offset */
-#define R_386_IRELATIVE 42 /* PLT entry resolved indirectly at runtime */
-
-#define R_ARM_NONE 0 /* No relocation. */
-#define R_ARM_PC24 1
-#define R_ARM_ABS32 2
-#define R_ARM_REL32 3
-#define R_ARM_PC13 4
-#define R_ARM_ABS16 5
-#define R_ARM_ABS12 6
-#define R_ARM_THM_ABS5 7
-#define R_ARM_ABS8 8
-#define R_ARM_SBREL32 9
-#define R_ARM_THM_PC22 10
-#define R_ARM_THM_PC8 11
-#define R_ARM_AMP_VCALL9 12
-#define R_ARM_SWI24 13
-#define R_ARM_THM_SWI8 14
-#define R_ARM_XPC25 15
-#define R_ARM_THM_XPC22 16
-/* TLS relocations */
-#define R_ARM_TLS_DTPMOD32 17 /* ID of module containing symbol */
-#define R_ARM_TLS_DTPOFF32 18 /* Offset in TLS block */
-#define R_ARM_TLS_TPOFF32 19 /* Offset in static TLS block */
-#define R_ARM_COPY 20 /* Copy data from shared object. */
-#define R_ARM_GLOB_DAT 21 /* Set GOT entry to data address. */
-#define R_ARM_JUMP_SLOT 22 /* Set GOT entry to code address. */
-#define R_ARM_RELATIVE 23 /* Add load address of shared object. */
-#define R_ARM_GOTOFF 24 /* Add GOT-relative symbol address. */
-#define R_ARM_GOTPC 25 /* Add PC-relative GOT table address. */
-#define R_ARM_GOT32 26 /* Add PC-relative GOT offset. */
-#define R_ARM_PLT32 27 /* Add PC-relative PLT offset. */
-#define R_ARM_GNU_VTENTRY 100
-#define R_ARM_GNU_VTINHERIT 101
-#define R_ARM_RSBREL32 250
-#define R_ARM_THM_RPC22 251
-#define R_ARM_RREL32 252
-#define R_ARM_RABS32 253
-#define R_ARM_RPC24 254
-#define R_ARM_RBASE 255
-
-/* Name Value Field Calculation */
-#define R_IA_64_NONE 0 /* None */
-#define R_IA_64_IMM14 0x21 /* immediate14 S + A */
-#define R_IA_64_IMM22 0x22 /* immediate22 S + A */
-#define R_IA_64_IMM64 0x23 /* immediate64 S + A */
-#define R_IA_64_DIR32MSB 0x24 /* word32 MSB S + A */
-#define R_IA_64_DIR32LSB 0x25 /* word32 LSB S + A */
-#define R_IA_64_DIR64MSB 0x26 /* word64 MSB S + A */
-#define R_IA_64_DIR64LSB 0x27 /* word64 LSB S + A */
-#define R_IA_64_GPREL22 0x2a /* immediate22 @gprel(S + A) */
-#define R_IA_64_GPREL64I 0x2b /* immediate64 @gprel(S + A) */
-#define R_IA_64_GPREL32MSB 0x2c /* word32 MSB @gprel(S + A) */
-#define R_IA_64_GPREL32LSB 0x2d /* word32 LSB @gprel(S + A) */
-#define R_IA_64_GPREL64MSB 0x2e /* word64 MSB @gprel(S + A) */
-#define R_IA_64_GPREL64LSB 0x2f /* word64 LSB @gprel(S + A) */
-#define R_IA_64_LTOFF22 0x32 /* immediate22 @ltoff(S + A) */
-#define R_IA_64_LTOFF64I 0x33 /* immediate64 @ltoff(S + A) */
-#define R_IA_64_PLTOFF22 0x3a /* immediate22 @pltoff(S + A) */
-#define R_IA_64_PLTOFF64I 0x3b /* immediate64 @pltoff(S + A) */
-#define R_IA_64_PLTOFF64MSB 0x3e /* word64 MSB @pltoff(S + A) */
-#define R_IA_64_PLTOFF64LSB 0x3f /* word64 LSB @pltoff(S + A) */
-#define R_IA_64_FPTR64I 0x43 /* immediate64 @fptr(S + A) */
-#define R_IA_64_FPTR32MSB 0x44 /* word32 MSB @fptr(S + A) */
-#define R_IA_64_FPTR32LSB 0x45 /* word32 LSB @fptr(S + A) */
-#define R_IA_64_FPTR64MSB 0x46 /* word64 MSB @fptr(S + A) */
-#define R_IA_64_FPTR64LSB 0x47 /* word64 LSB @fptr(S + A) */
-#define R_IA_64_PCREL60B 0x48 /* immediate60 form1 S + A - P */
-#define R_IA_64_PCREL21B 0x49 /* immediate21 form1 S + A - P */
-#define R_IA_64_PCREL21M 0x4a /* immediate21 form2 S + A - P */
-#define R_IA_64_PCREL21F 0x4b /* immediate21 form3 S + A - P */
-#define R_IA_64_PCREL32MSB 0x4c /* word32 MSB S + A - P */
-#define R_IA_64_PCREL32LSB 0x4d /* word32 LSB S + A - P */
-#define R_IA_64_PCREL64MSB 0x4e /* word64 MSB S + A - P */
-#define R_IA_64_PCREL64LSB 0x4f /* word64 LSB S + A - P */
-#define R_IA_64_LTOFF_FPTR22 0x52 /* immediate22 @ltoff(@fptr(S + A)) */
-#define R_IA_64_LTOFF_FPTR64I 0x53 /* immediate64 @ltoff(@fptr(S + A)) */
-#define R_IA_64_LTOFF_FPTR32MSB 0x54 /* word32 MSB @ltoff(@fptr(S + A)) */
-#define R_IA_64_LTOFF_FPTR32LSB 0x55 /* word32 LSB @ltoff(@fptr(S + A)) */
-#define R_IA_64_LTOFF_FPTR64MSB 0x56 /* word64 MSB @ltoff(@fptr(S + A)) */
-#define R_IA_64_LTOFF_FPTR64LSB 0x57 /* word64 LSB @ltoff(@fptr(S + A)) */
-#define R_IA_64_SEGREL32MSB 0x5c /* word32 MSB @segrel(S + A) */
-#define R_IA_64_SEGREL32LSB 0x5d /* word32 LSB @segrel(S + A) */
-#define R_IA_64_SEGREL64MSB 0x5e /* word64 MSB @segrel(S + A) */
-#define R_IA_64_SEGREL64LSB 0x5f /* word64 LSB @segrel(S + A) */
-#define R_IA_64_SECREL32MSB 0x64 /* word32 MSB @secrel(S + A) */
-#define R_IA_64_SECREL32LSB 0x65 /* word32 LSB @secrel(S + A) */
-#define R_IA_64_SECREL64MSB 0x66 /* word64 MSB @secrel(S + A) */
-#define R_IA_64_SECREL64LSB 0x67 /* word64 LSB @secrel(S + A) */
-#define R_IA_64_REL32MSB 0x6c /* word32 MSB BD + A */
-#define R_IA_64_REL32LSB 0x6d /* word32 LSB BD + A */
-#define R_IA_64_REL64MSB 0x6e /* word64 MSB BD + A */
-#define R_IA_64_REL64LSB 0x6f /* word64 LSB BD + A */
-#define R_IA_64_LTV32MSB 0x74 /* word32 MSB S + A */
-#define R_IA_64_LTV32LSB 0x75 /* word32 LSB S + A */
-#define R_IA_64_LTV64MSB 0x76 /* word64 MSB S + A */
-#define R_IA_64_LTV64LSB 0x77 /* word64 LSB S + A */
-#define R_IA_64_PCREL21BI 0x79 /* immediate21 form1 S + A - P */
-#define R_IA_64_PCREL22 0x7a /* immediate22 S + A - P */
-#define R_IA_64_PCREL64I 0x7b /* immediate64 S + A - P */
-#define R_IA_64_IPLTMSB 0x80 /* function descriptor MSB special */
-#define R_IA_64_IPLTLSB 0x81 /* function descriptor LSB speciaal */
-#define R_IA_64_SUB 0x85 /* immediate64 A - S */
-#define R_IA_64_LTOFF22X 0x86 /* immediate22 special */
-#define R_IA_64_LDXMOV 0x87 /* immediate22 special */
-#define R_IA_64_TPREL14 0x91 /* imm14 @tprel(S + A) */
-#define R_IA_64_TPREL22 0x92 /* imm22 @tprel(S + A) */
-#define R_IA_64_TPREL64I 0x93 /* imm64 @tprel(S + A) */
-#define R_IA_64_TPREL64MSB 0x96 /* word64 MSB @tprel(S + A) */
-#define R_IA_64_TPREL64LSB 0x97 /* word64 LSB @tprel(S + A) */
-#define R_IA_64_LTOFF_TPREL22 0x9a /* imm22 @ltoff(@tprel(S+A)) */
-#define R_IA_64_DTPMOD64MSB 0xa6 /* word64 MSB @dtpmod(S + A) */
-#define R_IA_64_DTPMOD64LSB 0xa7 /* word64 LSB @dtpmod(S + A) */
-#define R_IA_64_LTOFF_DTPMOD22 0xaa /* imm22 @ltoff(@dtpmod(S+A)) */
-#define R_IA_64_DTPREL14 0xb1 /* imm14 @dtprel(S + A) */
-#define R_IA_64_DTPREL22 0xb2 /* imm22 @dtprel(S + A) */
-#define R_IA_64_DTPREL64I 0xb3 /* imm64 @dtprel(S + A) */
-#define R_IA_64_DTPREL32MSB 0xb4 /* word32 MSB @dtprel(S + A) */
-#define R_IA_64_DTPREL32LSB 0xb5 /* word32 LSB @dtprel(S + A) */
-#define R_IA_64_DTPREL64MSB 0xb6 /* word64 MSB @dtprel(S + A) */
-#define R_IA_64_DTPREL64LSB 0xb7 /* word64 LSB @dtprel(S + A) */
-#define R_IA_64_LTOFF_DTPREL22 0xba /* imm22 @ltoff(@dtprel(S+A)) */
-
-/* Linux style aliases */
-#define R_IA64_NONE R_IA_64_NONE
-#define R_IA64_IMM14 R_IA_64_IMM14
-#define R_IA64_IMM22 R_IA_64_IMM22
-#define R_IA64_IMM64 R_IA_64_IMM64
-#define R_IA64_DIR32MSB R_IA_64_DIR32MSB
-#define R_IA64_DIR32LSB R_IA_64_DIR32LSB
-#define R_IA64_DIR64MSB R_IA_64_DIR64MSB
-#define R_IA64_DIR64LSB R_IA_64_DIR64LSB
-#define R_IA64_GPREL22 R_IA_64_GPREL22
-#define R_IA64_GPREL64I R_IA_64_GPREL64I
-#define R_IA64_GPREL32MSB R_IA_64_GPREL32MSB
-#define R_IA64_GPREL32LSB R_IA_64_GPREL32LSB
-#define R_IA64_GPREL64MSB R_IA_64_GPREL64MSB
-#define R_IA64_GPREL64LSB R_IA_64_GPREL64LSB
-#define R_IA64_LTOFF22 R_IA_64_LTOFF22
-#define R_IA64_LTOFF64I R_IA_64_LTOFF64I
-#define R_IA64_PLTOFF22 R_IA_64_PLTOFF22
-#define R_IA64_PLTOFF64I R_IA_64_PLTOFF64I
-#define R_IA64_PLTOFF64MSB R_IA_64_PLTOFF64MSB
-#define R_IA64_PLTOFF64LSB R_IA_64_PLTOFF64LSB
-#define R_IA64_FPTR64I R_IA_64_FPTR64I
-#define R_IA64_FPTR32MSB R_IA_64_FPTR32MSB
-#define R_IA64_FPTR32LSB R_IA_64_FPTR32LSB
-#define R_IA64_FPTR64MSB R_IA_64_FPTR64MSB
-#define R_IA64_FPTR64LSB R_IA_64_FPTR64LSB
-#define R_IA64_PCREL60B R_IA_64_PCREL60B
-#define R_IA64_PCREL21B R_IA_64_PCREL21B
-#define R_IA64_PCREL21M R_IA_64_PCREL21M
-#define R_IA64_PCREL21F R_IA_64_PCREL21F
-#define R_IA64_PCREL32MSB R_IA_64_PCREL32MSB
-#define R_IA64_PCREL32LSB R_IA_64_PCREL32LSB
-#define R_IA64_PCREL64MSB R_IA_64_PCREL64MSB
-#define R_IA64_PCREL64LSB R_IA_64_PCREL64LSB
-#define R_IA64_LTOFF_FPTR22 R_IA_64_LTOFF_FPTR22
-#define R_IA64_LTOFF_FPTR64I R_IA_64_LTOFF_FPTR64I
-#define R_IA64_LTOFF_FPTR32MSB R_IA_64_LTOFF_FPTR32MSB
-#define R_IA64_LTOFF_FPTR32LSB R_IA_64_LTOFF_FPTR32LSB
-#define R_IA64_LTOFF_FPTR64MSB R_IA_64_LTOFF_FPTR64MSB
-#define R_IA64_LTOFF_FPTR64LSB R_IA_64_LTOFF_FPTR64LSB
-#define R_IA64_SEGREL32MSB R_IA_64_SEGREL32MSB
-#define R_IA64_SEGREL32LSB R_IA_64_SEGREL32LSB
-#define R_IA64_SEGREL64MSB R_IA_64_SEGREL64MSB
-#define R_IA64_SEGREL64LSB R_IA_64_SEGREL64LSB
-#define R_IA64_SECREL32MSB R_IA_64_SECREL32MSB
-#define R_IA64_SECREL32LSB R_IA_64_SECREL32LSB
-#define R_IA64_SECREL64MSB R_IA_64_SECREL64MSB
-#define R_IA64_SECREL64LSB R_IA_64_SECREL64LSB
-#define R_IA64_REL32MSB R_IA_64_REL32MSB
-#define R_IA64_REL32LSB R_IA_64_REL32LSB
-#define R_IA64_REL64MSB R_IA_64_REL64MSB
-#define R_IA64_REL64LSB R_IA_64_REL64LSB
-#define R_IA64_LTV32MSB R_IA_64_LTV32MSB
-#define R_IA64_LTV32LSB R_IA_64_LTV32LSB
-#define R_IA64_LTV64MSB R_IA_64_LTV64MSB
-#define R_IA64_LTV64LSB R_IA_64_LTV64LSB
-#define R_IA64_PCREL21BI R_IA_64_PCREL21BI
-#define R_IA64_PCREL22 R_IA_64_PCREL22
-#define R_IA64_PCREL64I R_IA_64_PCREL64I
-#define R_IA64_IPLTMSB R_IA_64_IPLTMSB
-#define R_IA64_IPLTLSB R_IA_64_IPLTLSB
-#define R_IA64_SUB R_IA_64_SUB
-#define R_IA64_LTOFF22X R_IA_64_LTOFF22X
-#define R_IA64_LDXMOV R_IA_64_LDXMOV
-#define R_IA64_TPREL14 R_IA_64_TPREL14
-#define R_IA64_TPREL22 R_IA_64_TPREL22
-#define R_IA64_TPREL64I R_IA_64_TPREL64I
-#define R_IA64_TPREL64MSB R_IA_64_TPREL64MSB
-#define R_IA64_TPREL64LSB R_IA_64_TPREL64LSB
-#define R_IA64_LTOFF_TPREL22 R_IA_64_LTOFF_TPREL22
-#define R_IA64_DTPMOD64MSB R_IA_64_DTPMOD64MSB
-#define R_IA64_DTPMOD64LSB R_IA_64_DTPMOD64LSB
-#define R_IA64_LTOFF_DTPMOD22 R_IA_64_LTOFF_DTPMOD22
-#define R_IA64_DTPREL14 R_IA_64_DTPREL14
-#define R_IA64_DTPREL22 R_IA_64_DTPREL22
-#define R_IA64_DTPREL64I R_IA_64_DTPREL64I
-#define R_IA64_DTPREL32MSB R_IA_64_DTPREL32MSB
-#define R_IA64_DTPREL32LSB R_IA_64_DTPREL32LSB
-#define R_IA64_DTPREL64MSB R_IA_64_DTPREL64MSB
-#define R_IA64_DTPREL64LSB R_IA_64_DTPREL64LSB
-#define R_IA64_LTOFF_DTPREL22 R_IA_64_LTOFF_DTPREL22
-
-#define R_MIPS_NONE 0 /* No reloc */
-#define R_MIPS_16 1 /* Direct 16 bit */
-#define R_MIPS_32 2 /* Direct 32 bit */
-#define R_MIPS_REL32 3 /* PC relative 32 bit */
-#define R_MIPS_26 4 /* Direct 26 bit shifted */
-#define R_MIPS_HI16 5 /* High 16 bit */
-#define R_MIPS_LO16 6 /* Low 16 bit */
-#define R_MIPS_GPREL16 7 /* GP relative 16 bit */
-#define R_MIPS_LITERAL 8 /* 16 bit literal entry */
-#define R_MIPS_GOT16 9 /* 16 bit GOT entry */
-#define R_MIPS_PC16 10 /* PC relative 16 bit */
-#define R_MIPS_CALL16 11 /* 16 bit GOT entry for function */
-#define R_MIPS_GPREL32 12 /* GP relative 32 bit */
-#define R_MIPS_64 18 /* Direct 64 bit */
-#define R_MIPS_GOTHI16 21 /* GOT HI 16 bit */
-#define R_MIPS_GOTLO16 22 /* GOT LO 16 bit */
-#define R_MIPS_CALLHI16 30 /* upper 16 bit GOT entry for function */
-#define R_MIPS_CALLLO16 31 /* lower 16 bit GOT entry for function */
-
-#define R_PPC_NONE 0 /* No relocation. */
-#define R_PPC_ADDR32 1
-#define R_PPC_ADDR24 2
-#define R_PPC_ADDR16 3
-#define R_PPC_ADDR16_LO 4
-#define R_PPC_ADDR16_HI 5
-#define R_PPC_ADDR16_HA 6
-#define R_PPC_ADDR14 7
-#define R_PPC_ADDR14_BRTAKEN 8
-#define R_PPC_ADDR14_BRNTAKEN 9
-#define R_PPC_REL24 10
-#define R_PPC_REL14 11
-#define R_PPC_REL14_BRTAKEN 12
-#define R_PPC_REL14_BRNTAKEN 13
-#define R_PPC_GOT16 14
-#define R_PPC_GOT16_LO 15
-#define R_PPC_GOT16_HI 16
-#define R_PPC_GOT16_HA 17
-#define R_PPC_PLTREL24 18
-#define R_PPC_COPY 19
-#define R_PPC_GLOB_DAT 20
-#define R_PPC_JMP_SLOT 21
-#define R_PPC_RELATIVE 22
-#define R_PPC_LOCAL24PC 23
-#define R_PPC_UADDR32 24
-#define R_PPC_UADDR16 25
-#define R_PPC_REL32 26
-#define R_PPC_PLT32 27
-#define R_PPC_PLTREL32 28
-#define R_PPC_PLT16_LO 29
-#define R_PPC_PLT16_HI 30
-#define R_PPC_PLT16_HA 31
-#define R_PPC_SDAREL16 32
-#define R_PPC_SECTOFF 33
-#define R_PPC_SECTOFF_LO 34
-#define R_PPC_SECTOFF_HI 35
-#define R_PPC_SECTOFF_HA 36
-
-/*
- * 64-bit relocations
- */
-#define R_PPC64_ADDR64 38
-#define R_PPC64_ADDR16_HIGHER 39
-#define R_PPC64_ADDR16_HIGHERA 40
-#define R_PPC64_ADDR16_HIGHEST 41
-#define R_PPC64_ADDR16_HIGHESTA 42
-#define R_PPC64_UADDR64 43
-#define R_PPC64_REL64 44
-#define R_PPC64_PLT64 45
-#define R_PPC64_PLTREL64 46
-#define R_PPC64_TOC16 47
-#define R_PPC64_TOC16_LO 48
-#define R_PPC64_TOC16_HI 49
-#define R_PPC64_TOC16_HA 50
-#define R_PPC64_TOC 51
-#define R_PPC64_DTPMOD64 68
-#define R_PPC64_TPREL64 73
-#define R_PPC64_DTPREL64 78
-
-/*
- * TLS relocations
- */
-#define R_PPC_TLS 67
-#define R_PPC_DTPMOD32 68
-#define R_PPC_TPREL16 69
-#define R_PPC_TPREL16_LO 70
-#define R_PPC_TPREL16_HI 71
-#define R_PPC_TPREL16_HA 72
-#define R_PPC_TPREL32 73
-#define R_PPC_DTPREL16 74
-#define R_PPC_DTPREL16_LO 75
-#define R_PPC_DTPREL16_HI 76
-#define R_PPC_DTPREL16_HA 77
-#define R_PPC_DTPREL32 78
-#define R_PPC_GOT_TLSGD16 79
-#define R_PPC_GOT_TLSGD16_LO 80
-#define R_PPC_GOT_TLSGD16_HI 81
-#define R_PPC_GOT_TLSGD16_HA 82
-#define R_PPC_GOT_TLSLD16 83
-#define R_PPC_GOT_TLSLD16_LO 84
-#define R_PPC_GOT_TLSLD16_HI 85
-#define R_PPC_GOT_TLSLD16_HA 86
-#define R_PPC_GOT_TPREL16 87
-#define R_PPC_GOT_TPREL16_LO 88
-#define R_PPC_GOT_TPREL16_HI 89
-#define R_PPC_GOT_TPREL16_HA 90
-
-/*
- * The remaining relocs are from the Embedded ELF ABI, and are not in the
- * SVR4 ELF ABI.
- */
-
-#define R_PPC_EMB_NADDR32 101
-#define R_PPC_EMB_NADDR16 102
-#define R_PPC_EMB_NADDR16_LO 103
-#define R_PPC_EMB_NADDR16_HI 104
-#define R_PPC_EMB_NADDR16_HA 105
-#define R_PPC_EMB_SDAI16 106
-#define R_PPC_EMB_SDA2I16 107
-#define R_PPC_EMB_SDA2REL 108
-#define R_PPC_EMB_SDA21 109
-#define R_PPC_EMB_MRKREF 110
-#define R_PPC_EMB_RELSEC16 111
-#define R_PPC_EMB_RELST_LO 112
-#define R_PPC_EMB_RELST_HI 113
-#define R_PPC_EMB_RELST_HA 114
-#define R_PPC_EMB_BIT_FLD 115
-#define R_PPC_EMB_RELSDA 116
-
-#define R_SH_NONE 0
-#define R_SH_DIR32 1
-#define R_SH_REL32 2
-#define R_SH_DIR8WPN 3
-#define R_SH_IND12W 4
-#define R_SH_DIR8WPL 5
-#define R_SH_DIR8WPZ 6
-#define R_SH_DIR8BP 7
-#define R_SH_DIR8W 8
-#define R_SH_DIR8L 9
-#define R_SH_GOT32 0xa0
-#define R_SH_PLT32 0xa1
-#define R_SH_COPY 0xa2
-#define R_SH_GLOB_DAT 0xa3
-#define R_SH_JMP_SLOT 0xa4
-#define R_SH_RELATIVE 0xa5
-#define R_SH_GOTOFF 0xa6
-#define R_SH_GOTPC 0xa7
-
-#define R_SPARC_NONE 0
-#define R_SPARC_8 1
-#define R_SPARC_16 2
-#define R_SPARC_32 3
-#define R_SPARC_DISP8 4
-#define R_SPARC_DISP16 5
-#define R_SPARC_DISP32 6
-#define R_SPARC_WDISP30 7
-#define R_SPARC_WDISP22 8
-#define R_SPARC_HI22 9
-#define R_SPARC_22 10
-#define R_SPARC_13 11
-#define R_SPARC_LO10 12
-#define R_SPARC_GOT10 13
-#define R_SPARC_GOT13 14
-#define R_SPARC_GOT22 15
-#define R_SPARC_PC10 16
-#define R_SPARC_PC22 17
-#define R_SPARC_WPLT30 18
-#define R_SPARC_COPY 19
-#define R_SPARC_GLOB_DAT 20
-#define R_SPARC_JMP_SLOT 21
-#define R_SPARC_RELATIVE 22
-#define R_SPARC_UA32 23
-#define R_SPARC_PLT32 24
-#define R_SPARC_HIPLT22 25
-#define R_SPARC_LOPLT10 26
-#define R_SPARC_PCPLT32 27
-#define R_SPARC_PCPLT22 28
-#define R_SPARC_PCPLT10 29
-#define R_SPARC_10 30
-#define R_SPARC_11 31
-#define R_SPARC_64 32
-#define R_SPARC_OLO10 33
-#define R_SPARC_HH22 34
-#define R_SPARC_HM10 35
-#define R_SPARC_LM22 36
-#define R_SPARC_PC_HH22 37
-#define R_SPARC_PC_HM10 38
-#define R_SPARC_PC_LM22 39
-#define R_SPARC_WDISP16 40
-#define R_SPARC_WDISP19 41
-#define R_SPARC_GLOB_JMP 42
-#define R_SPARC_7 43
-#define R_SPARC_5 44
-#define R_SPARC_6 45
-#define R_SPARC_DISP64 46
-#define R_SPARC_PLT64 47
-#define R_SPARC_HIX22 48
-#define R_SPARC_LOX10 49
-#define R_SPARC_H44 50
-#define R_SPARC_M44 51
-#define R_SPARC_L44 52
-#define R_SPARC_REGISTER 53
-#define R_SPARC_UA64 54
-#define R_SPARC_UA16 55
-#define R_SPARC_TLS_GD_HI22 56
-#define R_SPARC_TLS_GD_LO10 57
-#define R_SPARC_TLS_GD_ADD 58
-#define R_SPARC_TLS_GD_CALL 59
-#define R_SPARC_TLS_LDM_HI22 60
-#define R_SPARC_TLS_LDM_LO10 61
-#define R_SPARC_TLS_LDM_ADD 62
-#define R_SPARC_TLS_LDM_CALL 63
-#define R_SPARC_TLS_LDO_HIX22 64
-#define R_SPARC_TLS_LDO_LOX10 65
-#define R_SPARC_TLS_LDO_ADD 66
-#define R_SPARC_TLS_IE_HI22 67
-#define R_SPARC_TLS_IE_LO10 68
-#define R_SPARC_TLS_IE_LD 69
-#define R_SPARC_TLS_IE_LDX 70
-#define R_SPARC_TLS_IE_ADD 71
-#define R_SPARC_TLS_LE_HIX22 72
-#define R_SPARC_TLS_LE_LOX10 73
-#define R_SPARC_TLS_DTPMOD32 74
-#define R_SPARC_TLS_DTPMOD64 75
-#define R_SPARC_TLS_DTPOFF32 76
-#define R_SPARC_TLS_DTPOFF64 77
-#define R_SPARC_TLS_TPOFF32 78
-#define R_SPARC_TLS_TPOFF64 79
-
-#define R_X86_64_NONE 0 /* No relocation. */
-#define R_X86_64_64 1 /* Add 64 bit symbol value. */
-#define R_X86_64_PC32 2 /* PC-relative 32 bit signed sym value. */
-#define R_X86_64_GOT32 3 /* PC-relative 32 bit GOT offset. */
-#define R_X86_64_PLT32 4 /* PC-relative 32 bit PLT offset. */
-#define R_X86_64_COPY 5 /* Copy data from shared object. */
-#define R_X86_64_GLOB_DAT 6 /* Set GOT entry to data address. */
-#define R_X86_64_JMP_SLOT 7 /* Set GOT entry to code address. */
-#define R_X86_64_RELATIVE 8 /* Add load address of shared object. */
-#define R_X86_64_GOTPCREL 9 /* Add 32 bit signed pcrel offset to GOT. */
-#define R_X86_64_32 10 /* Add 32 bit zero extended symbol value */
-#define R_X86_64_32S 11 /* Add 32 bit sign extended symbol value */
-#define R_X86_64_16 12 /* Add 16 bit zero extended symbol value */
-#define R_X86_64_PC16 13 /* Add 16 bit signed extended pc relative symbol value */
-#define R_X86_64_8 14 /* Add 8 bit zero extended symbol value */
-#define R_X86_64_PC8 15 /* Add 8 bit signed extended pc relative symbol value */
-#define R_X86_64_DTPMOD64 16 /* ID of module containing symbol */
-#define R_X86_64_DTPOFF64 17 /* Offset in TLS block */
-#define R_X86_64_TPOFF64 18 /* Offset in static TLS block */
-#define R_X86_64_TLSGD 19 /* PC relative offset to GD GOT entry */
-#define R_X86_64_TLSLD 20 /* PC relative offset to LD GOT entry */
-#define R_X86_64_DTPOFF32 21 /* Offset in TLS block */
-#define R_X86_64_GOTTPOFF 22 /* PC relative offset to IE GOT entry */
-#define R_X86_64_TPOFF32 23 /* Offset in static TLS block */
-#define R_X86_64_IRELATIVE 37
-
-#define R_390_NONE 0
-#define R_390_8 1
-#define R_390_12 2
-#define R_390_16 3
-#define R_390_32 4
-#define R_390_PC32 5
-#define R_390_GOT12 6
-#define R_390_GOT32 7
-#define R_390_PLT32 8
-#define R_390_COPY 9
-#define R_390_GLOB_DAT 10
-#define R_390_JMP_SLOT 11
-#define R_390_RELATIVE 12
-#define R_390_GOTOFF 13
-#define R_390_GOTPC 14
-#define R_390_GOT16 15
-#define R_390_PC16 16
-#define R_390_PC16DBL 17
-#define R_390_PLT16DBL 18
-#define R_390_PC32DBL 19
-#define R_390_PLT32DBL 20
-#define R_390_GOTPCDBL 21
-#define R_390_64 22
-#define R_390_PC64 23
-#define R_390_GOT64 24
-#define R_390_PLT64 25
-#define R_390_GOTENT 26
-
-#endif /* !_SYS_ELF_COMMON_H_ */
diff --git a/winsup/cygwin/include/sys/elf_generic.h b/winsup/cygwin/include/sys/elf_generic.h
deleted file mode 100644
index 95a682f25..000000000
--- a/winsup/cygwin/include/sys/elf_generic.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/*-
- * Copyright (c) 1998 John D. Polstra.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD$
- */
-
-#ifndef _SYS_ELF_GENERIC_H_
-#define _SYS_ELF_GENERIC_H_ 1
-
-#include <sys/cdefs.h>
-
-/*
- * Definitions of generic ELF names which relieve applications from
- * needing to know the word size.
- */
-
-#if __ELF_WORD_SIZE != 32 && __ELF_WORD_SIZE != 64
-#error "__ELF_WORD_SIZE must be defined as 32 or 64"
-#endif
-
-#define ELF_CLASS __CONCAT(ELFCLASS,__ELF_WORD_SIZE)
-
-#if BYTE_ORDER == LITTLE_ENDIAN
-#define ELF_DATA ELFDATA2LSB
-#elif BYTE_ORDER == BIG_ENDIAN
-#define ELF_DATA ELFDATA2MSB
-#else
-#error "Unknown byte order"
-#endif
-
-#define __elfN(x) __CONCAT(__CONCAT(__CONCAT(elf,__ELF_WORD_SIZE),_),x)
-#define __ElfN(x) __CONCAT(__CONCAT(__CONCAT(Elf,__ELF_WORD_SIZE),_),x)
-#define __ELFN(x) __CONCAT(__CONCAT(__CONCAT(ELF,__ELF_WORD_SIZE),_),x)
-#define __ElfType(x) typedef __ElfN(x) __CONCAT(Elf_,x)
-
-__ElfType(Addr);
-__ElfType(Half);
-__ElfType(Off);
-__ElfType(Sword);
-__ElfType(Word);
-__ElfType(Ehdr);
-__ElfType(Shdr);
-__ElfType(Phdr);
-__ElfType(Dyn);
-__ElfType(Rel);
-__ElfType(Rela);
-__ElfType(Sym);
-__ElfType(Verdef);
-__ElfType(Verdaux);
-__ElfType(Verneed);
-__ElfType(Vernaux);
-__ElfType(Versym);
-
-/* Non-standard ELF types. */
-__ElfType(Hashelt);
-__ElfType(Size);
-__ElfType(Ssize);
-
-#define ELF_R_SYM __ELFN(R_SYM)
-#define ELF_R_TYPE __ELFN(R_TYPE)
-#define ELF_R_INFO __ELFN(R_INFO)
-#define ELF_ST_BIND __ELFN(ST_BIND)
-#define ELF_ST_TYPE __ELFN(ST_TYPE)
-#define ELF_ST_INFO __ELFN(ST_INFO)
-
-#endif /* !_SYS_ELF_GENERIC_H_ */
diff --git a/winsup/cygwin/include/sys/file.h b/winsup/cygwin/include/sys/file.h
deleted file mode 100644
index 6dabeb70c..000000000
--- a/winsup/cygwin/include/sys/file.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/* This is file FILE.H */
-/*
-** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
-**
-** This file is distributed under the terms listed in the document
-** "copying.dj", available from DJ Delorie at the address above.
-** A copy of "copying.dj" should accompany this file; if not, a copy
-** should be available from where this file was obtained. This file
-** may not be distributed without a verbatim copy of "copying.dj".
-**
-** This file is distributed WITHOUT ANY WARRANTY; without even the implied
-** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-*/
-/*
- * 2003-11-27 Nicholas Wourms <nwourms@netscape.net>:
- *
- * Include sys/cdefs.h. Add function prototype for flock().
- * Add some comments from BSD's header for further clarity.
- * (L_SET, L_CURR, L_INCR, L_XTND): Redefine as the macros
- * SEEK_SET, SEEK_CUR, SEEK_CUR, & SEEK_END respectively.
- * (LOCK_SH,LOCK_EX,LOCK_NB,LOCK_UN): New macros for flock().
-*/
-#ifndef _FILE_H_
-#define _FILE_H_
-
-#include <fcntl.h>
-
-/* Whence values for lseek(); renamed by POSIX 1003.1 */
-#define L_SET SEEK_SET
-#define L_CURR SEEK_CUR
-#define L_INCR SEEK_CUR
-#define L_XTND SEEK_END
-
-/* Including <sys/file.h> always defines flock & macros. */
-#if __BSD_VISIBLE - 0 == 0
-
-#define LOCK_SH 0x01 /* shared file lock */
-#define LOCK_EX 0x02 /* exclusive file lock */
-#define LOCK_NB 0x04 /* don't block when locking */
-#define LOCK_UN 0x08 /* unlock file */
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-extern int flock _PARAMS ((int, int));
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-#endif
diff --git a/winsup/cygwin/include/sys/ioctl.h b/winsup/cygwin/include/sys/ioctl.h
deleted file mode 100644
index 9c0c08157..000000000
--- a/winsup/cygwin/include/sys/ioctl.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/* sys/ioctl.h
-
- Copyright 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-/* sys/ioctl.h */
-
-#ifndef _SYS_IOCTL_H
-#define _SYS_IOCTL_H
-
-#include <sys/cdefs.h>
-#include <sys/termios.h>
-
-__BEGIN_DECLS
-
-/* /dev/windows ioctls */
-
-#define WINDOWS_POST 0 /* Set write() behavior to PostMessage() */
-#define WINDOWS_SEND 1 /* Set write() behavior to SendMessage() */
-#define WINDOWS_HWND 2 /* Set hWnd for read() calls */
-
-/* Some standard linux defines */
-
-#define _IOC_NRBITS 8
-#define _IOC_TYPEBITS 8
-#define _IOC_SIZEBITS 14
-#define _IOC_DIRBITS 2
-
-#define _IOC_NRMASK ((1 << _IOC_NRBITS)-1)
-#define _IOC_TYPEMASK ((1 << _IOC_TYPEBITS)-1)
-#define _IOC_SIZEMASK ((1 << _IOC_SIZEBITS)-1)
-#define _IOC_DIRMASK ((1 << _IOC_DIRBITS)-1)
-
-#define _IOC_NRSHIFT 0
-#define _IOC_TYPESHIFT (_IOC_NRSHIFT+_IOC_NRBITS)
-#define _IOC_SIZESHIFT (_IOC_TYPESHIFT+_IOC_TYPEBITS)
-#define _IOC_DIRSHIFT (_IOC_SIZESHIFT+_IOC_SIZEBITS)
-
-#define _IOC_NONE 0U
-#define _IOC_WRITE 1U
-#define _IOC_READ 2U
-
-#define _IOC(dir,type,nr,size) \
- (((dir) << _IOC_DIRSHIFT) | \
- + ((type) << _IOC_TYPESHIFT) | \
- + ((nr) << _IOC_NRSHIFT) | \
- + ((size) << _IOC_SIZESHIFT))
-
-#define _LINUX_IO(type,nr) _IOC(_IOC_NONE,(type),(nr),0)
-#define _LINUX_IOR(type,nr,size) _IOC(_IOC_READ,(type),(nr),sizeof(size))
-#define _LINUX_IOW(type,nr,size) _IOC(_IOC_WRITE,(type),(nr),sizeof(size))
-#define _LINUX_IOWR(type,nr,size) _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),sizeof(size))
-
-#ifdef __USE_LINUX_IOCTL_DEFS
-# define _IO _LINUX_IO
-# define _IOR _LINUX_IOR
-# define _IOW _LINUX_IOW
-# define _IOWR _LINUX_IOWR
-#endif /*__USE_LINUX_IOCTL_DEFS */
-
-int __cdecl ioctl (int __fd, int __cmd, ...);
-
-__END_DECLS
-#endif
diff --git a/winsup/cygwin/include/sys/ipc.h b/winsup/cygwin/include/sys/ipc.h
deleted file mode 100644
index 9a4095733..000000000
--- a/winsup/cygwin/include/sys/ipc.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/* sys/ipc.h
-
- Copyright 2001, 2002, 2003 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-/* sys/ipc.h header file for Cygwin. */
-
-#ifndef _SYS_IPC_H
-#define _SYS_IPC_H
-
-#include <cygwin/ipc.h>
-
-#endif /* _SYS_IPC_H */
diff --git a/winsup/cygwin/include/sys/kd.h b/winsup/cygwin/include/sys/kd.h
deleted file mode 100644
index 5900efdd7..000000000
--- a/winsup/cygwin/include/sys/kd.h
+++ /dev/null
@@ -1,20 +0,0 @@
-/* sys/kd.h
-
- Copyright 2006 Red Hat, Inc.
-
- Written by Kazuhiro Fujieda <fujieda@jaist.ac.jp>
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-/* sys/kd.h header file for Cygwin. */
-
-#ifndef _SYS_KD_H
-#define _SYS_KD_H
-
-#include <cygwin/kd.h>
-
-#endif /* _SYS_KD_H */
diff --git a/winsup/cygwin/include/sys/lock.h b/winsup/cygwin/include/sys/lock.h
deleted file mode 100644
index cf4d17846..000000000
--- a/winsup/cygwin/include/sys/lock.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/* sys/lock.h
-
- Copyright 2004, 2005 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _SYS_LOCK_H_
-#define _SYS_LOCK_H_
-
-typedef void *_LOCK_T;
-#define _LOCK_RECURSIVE_T _LOCK_T
-
-/*
- * This must match cygwins PTHREAD_XXX_MUTEX_INITIALIZER_NP which are
- * defined in <pthread.h>
- */
-#define _LOCK_T_RECURSIVE_INITIALIZER ((_LOCK_T)18)
-#define _LOCK_T_INITIALIZER ((_LOCK_T)19)
-
-#define __LOCK_INIT(CLASS,NAME) \
- CLASS _LOCK_T NAME = _LOCK_T_INITIALIZER;
-#define __LOCK_INIT_RECURSIVE(CLASS,NAME) \
- CLASS _LOCK_T NAME = _LOCK_T_RECURSIVE_INITIALIZER;
-
-#define __lock_init(__lock) __cygwin_lock_init(&__lock)
-#define __lock_init_recursive(__lock) __cygwin_lock_init_recursive(&__lock)
-#define __lock_close(__lock) __cygwin_lock_fini(&__lock)
-#define __lock_close_recursive(__lock) __cygwin_lock_fini(&__lock)
-#define __lock_acquire(__lock) __cygwin_lock_lock(&__lock)
-#define __lock_acquire_recursive(__lock) __cygwin_lock_lock(&__lock)
-#define __lock_try_acquire(lock) __cygwin_lock_trylock(&__lock)
-#define __lock_try_acquire_recursive(lock) __cygwin_lock_trylock(&__lock)
-#define __lock_release(__lock) __cygwin_lock_unlock(&__lock)
-#define __lock_release_recursive(__lock) __cygwin_lock_unlock(&__lock)
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-void __cygwin_lock_init(_LOCK_T *);
-void __cygwin_lock_init_recursive(_LOCK_T *);
-void __cygwin_lock_fini(_LOCK_T *);
-void __cygwin_lock_lock(_LOCK_T *);
-int __cygwin_lock_trylock(_LOCK_T *);
-void __cygwin_lock_unlock(_LOCK_T *);
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/winsup/cygwin/include/sys/mman.h b/winsup/cygwin/include/sys/mman.h
deleted file mode 100644
index 6942c2ad8..000000000
--- a/winsup/cygwin/include/sys/mman.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/* sys/mman.h
-
- Copyright 1996, 1997, 1998, 2000, 2001, 2003, 2005, 2007, 2011 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _SYS_MMAN_H_
-#define _SYS_MMAN_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-#include <stddef.h>
-#include <sys/types.h>
-
-#define PROT_NONE 0
-#define PROT_READ 1
-#define PROT_WRITE 2
-#define PROT_EXEC 4
-
-#define MAP_FILE 0
-#define MAP_SHARED 1
-#define MAP_PRIVATE 2
-#define MAP_TYPE 0xF
-#define MAP_FIXED 0x10
-#define MAP_ANONYMOUS 0x20
-#define MAP_ANON MAP_ANONYMOUS
-/* Non-standard flag */
-#define MAP_NORESERVE 0x4000 /* Don't reserve swap space for this mapping.
- Page protection must be set explicitely
- to access page. Only supported for anonymous
- private mappings. */
-#define MAP_AUTOGROW 0x8000 /* Grow underlying object to mapping size.
- File must be opened for writing. */
-
-#define MAP_FAILED ((void *)-1)
-
-/*
- * Flags for msync.
- */
-#define MS_ASYNC 1
-#define MS_SYNC 2
-#define MS_INVALIDATE 4
-
-/*
- * Flags for posix_madvise.
- */
-#define POSIX_MADV_NORMAL 0
-#define POSIX_MADV_SEQUENTIAL 1
-#define POSIX_MADV_RANDOM 2
-#define POSIX_MADV_WILLNEED 3
-#define POSIX_MADV_DONTNEED 4
-
-/*
- * Flags for madvise. BSD/Linux-specific.
- */
-#define MADV_NORMAL 0
-#define MADV_SEQUENTIAL 1
-#define MADV_RANDOM 2
-#define MADV_WILLNEED 3
-#define MADV_DONTNEED 4
-/* Deliberately don't define these Linux-specific flags. An application
- expecting them to behave as defined would be in for a surprise. */
-#if 0
-#define MADV_REMOVE 5
-#define MADV_DONTFORK 6
-#define MADV_DOFORK 7
-#define MADV_HWPOISON 8
-#define MADV_SOFT_OFFLINE 9
-#define MADV_MERGEABLE 10
-#define MADV_UNMERGEABLE 11
-#endif
-
-#ifndef __INSIDE_CYGWIN__
-extern void *mmap (void *__addr, size_t __len, int __prot, int __flags, int __fd, off_t __off);
-#endif
-extern int munmap (void *__addr, size_t __len);
-extern int mprotect (void *__addr, size_t __len, int __prot);
-extern int msync (void *__addr, size_t __len, int __flags);
-extern int mlock (const void *__addr, size_t __len);
-extern int munlock (const void *__addr, size_t __len);
-
-extern int posix_madvise (void *__addr, size_t __len, int __advice);
-extern int madvise (void *__addr, size_t __len, int __advice);
-
-extern int shm_open (const char *__name, int __oflag, mode_t __mode);
-extern int shm_unlink (const char *__name);
-
-#ifdef __cplusplus
-};
-#endif /* __cplusplus */
-
-#endif /* _SYS_MMAN_H_ */
diff --git a/winsup/cygwin/include/sys/mount.h b/winsup/cygwin/include/sys/mount.h
deleted file mode 100644
index 458cf801f..000000000
--- a/winsup/cygwin/include/sys/mount.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* sys/mount.h
-
- Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2008, 2009, 2010, 2012,
- 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _SYS_MOUNT_H
-#define _SYS_MOUNT_H
-
-#define BLOCK_SIZE 1024
-#define BLOCK_SIZE_BITS 10
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-enum
-{
- MOUNT_SYMLINK = 0x00001, /* "mount point" is a symlink */
- MOUNT_BINARY = 0x00002, /* "binary" format read/writes */
- MOUNT_SYSTEM = 0x00008, /* mount point came from system table */
- MOUNT_EXEC = 0x00010, /* Any file in the mounted directory
- gets 'x' bit */
- MOUNT_CYGDRIVE = 0x00020, /* mount point refers to cygdrive
- device mount */
- MOUNT_CYGWIN_EXEC = 0x00040, /* file or directory is or contains a
- cygwin executable */
- MOUNT_SPARSE = 0x00080, /* Support automatic sparsifying of
- files. */
- MOUNT_NOTEXEC = 0x00100, /* don't check files for executable magic */
- MOUNT_DEVFS = 0x00200, /* /device "filesystem" */
- MOUNT_PROC = 0x00400, /* /proc "filesystem" */
- MOUNT_RO = 0x01000, /* read-only "filesystem" */
- MOUNT_NOACL = 0x02000, /* support reading/writing ACLs */
- MOUNT_NOPOSIX = 0x04000, /* Case insensitve path handling */
- MOUNT_OVERRIDE = 0x08000, /* Allow overriding of root */
- MOUNT_IMMUTABLE = 0x10000, /* Mount point can't be changed */
- MOUNT_AUTOMATIC = 0x20000, /* Mount point was added automatically */
- MOUNT_DOS = 0x40000, /* convert leading spaces and trailing
- dots and spaces to private use area */
- MOUNT_IHASH = 0x80000, /* Enforce hash values for inode numbers */
- MOUNT_BIND = 0x100000 /* Allows bind syntax in fstab file. */
-};
-
-int mount (const char *, const char *, unsigned __flags);
-int umount (const char *);
-int cygwin_umount (const char *__path, unsigned __flags);
-
-#ifdef __cplusplus
-};
-#endif
-
-#endif /* _SYS_MOUNT_H */
diff --git a/winsup/cygwin/include/sys/msg.h b/winsup/cygwin/include/sys/msg.h
deleted file mode 100644
index bbcc56ec5..000000000
--- a/winsup/cygwin/include/sys/msg.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/* sys/msg.h
-
- Copyright 2002, 2003 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-/* sys/msg.h header file for Cygwin. */
-
-#ifndef _SYS_MSG_H
-#define _SYS_MSG_H
-
-#include <cygwin/msg.h>
-
-#endif /* _SYS_MSG_H */
diff --git a/winsup/cygwin/include/sys/mtio.h b/winsup/cygwin/include/sys/mtio.h
deleted file mode 100644
index 2bd4632e9..000000000
--- a/winsup/cygwin/include/sys/mtio.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/* sys/mtio.h
-
- Copyright 1999, 2000, 2001 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-/* sys/mtio.h header file for Cygwin. */
-
-#ifndef _SYS_MTIO_H
-#define _SYS_MTIO_H
-
-#include <cygwin/mtio.h>
-
-#endif /* _SYS_MTIO_H */
diff --git a/winsup/cygwin/include/sys/param.h b/winsup/cygwin/include/sys/param.h
deleted file mode 100644
index ff0517627..000000000
--- a/winsup/cygwin/include/sys/param.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/* sys/param.h
-
- Copyright 1996, 1997, 1998, 2002, 2003, 2005, 2007, 2009, 2011, 2012 Red
- Hat, Inc.
-
- This software is a copyrighted work licensed under the terms of the
- Cygwin license. Please consult the file "CYGWIN_LICENSE" for
- details. */
-
-#ifndef _SYS_PARAM_H
-#define _SYS_PARAM_H
-
-#include <sys/types.h>
-/* Linux includes limits.h, but this is not universally done. */
-#include <limits.h>
-
-#define __need_NULL
-#include <stddef.h>
-
-/* Max number of open files. The Posix version is OPEN_MAX. */
-/* Number of fds is virtually unlimited in cygwin, but we must provide
- some reasonable value for Posix conformance */
-#define NOFILE 8192
-
-/* Max number of groups; must keep in sync with NGROUPS_MAX in limits.h */
-#define NGROUPS NGROUPS_MAX
-
-/* Ticks/second for system calls such as times() */
-/* FIXME: is this the appropriate value? */
-#define HZ 1000
-
-/* Max hostname size that can be dealt with (== Win32 MAX_HOSTNAME_LEN) */
-#define MAXHOSTNAMELEN 128
-
-/* Maximum path length including trailing NUL; the Posix version is PATH_MAX.
- MAXPATHLEN is the BSD variant. */
-#define MAXPATHLEN PATH_MAX
-
-/* Maximum number of nested symlinks; the Posix version is SYMLOOP_MAX.
- MAXSYMLINKS is the BSD variant. */
-#define MAXSYMLINKS SYMLOOP_MAX
-
-/* This is the number of bytes per block given in the st_blocks stat member.
- It should be in sync with S_BLKSIZE in sys/stat.h. S_BLKSIZE is the
- BSD variant of this constant. */
-#define DEV_BSIZE 1024
-
-#ifndef NBBY
-#define NBBY 8
-#endif
-
-/* Bit map related macros. */
-#define setbit(a,i) ((a)[(i)/NBBY] |= 1<<((i)%NBBY))
-#define clrbit(a,i) ((a)[(i)/NBBY] &= ~(1<<((i)%NBBY)))
-#define isset(a,i) ((a)[(i)/NBBY] & (1<<((i)%NBBY)))
-#define isclr(a,i) (((a)[(i)/NBBY] & (1<<((i)%NBBY))) == 0)
-
-/* Macros for counting and rounding. */
-#ifndef howmany
-#define howmany(x, y) (((x)+((y)-1))/(y))
-#endif
-#define rounddown(x, y) (((x)/(y))*(y))
-#define roundup(x, y) ((((x)+((y)-1))/(y))*(y)) /* to any y */
-#define roundup2(x, y) (((x)+((y)-1))&(~((y)-1))) /* if y is powers of two */
-#define powerof2(x) ((((x)-1)&(x))==0)
-
-/* Macros for min/max. */
-#define MIN(a,b) (((a)<(b))?(a):(b))
-#define MAX(a,b) (((a)>(b))?(a):(b))
-
-#endif
diff --git a/winsup/cygwin/include/sys/poll.h b/winsup/cygwin/include/sys/poll.h
deleted file mode 100644
index 1a3a95b75..000000000
--- a/winsup/cygwin/include/sys/poll.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/* sys/poll.h
-
- Copyright 2000, 2001, 2006, 2011 Red Hat, Inc.
-
- This file is part of Cygwin.
-
- This software is a copyrighted work licensed under the terms of the
- Cygwin license. Please consult the file "CYGWIN_LICENSE" for
- details. */
-
-#ifndef _SYS_POLL_H
-#define _SYS_POLL_H
-
-#include <sys/cdefs.h>
-#include <sys/types.h>
-#include <signal.h>
-
-__BEGIN_DECLS
-
-#define POLLIN 1 /* Set if data to read. */
-#define POLLPRI 2 /* Set if urgent data to read. */
-#define POLLOUT 4 /* Set if writing data wouldn't block. */
-#define POLLERR 8 /* An error occured. */
-#define POLLHUP 16 /* Shutdown or close happened. */
-#define POLLNVAL 32 /* Invalid file descriptor. */
-
-#define NPOLLFILE 64 /* Number of canonical fd's in one call to poll(). */
-
-/* The following values are defined by XPG4. */
-#define POLLRDNORM POLLIN
-#define POLLRDBAND POLLPRI
-#define POLLWRNORM POLLOUT
-#define POLLWRBAND POLLOUT
-
-struct pollfd {
- int fd;
- short events;
- short revents;
-};
-
-typedef unsigned int nfds_t;
-
-extern int poll __P ((struct pollfd *fds, nfds_t nfds, int timeout));
-extern int ppoll __P ((struct pollfd *fds, nfds_t nfds,
- const struct timespec *timeout_ts,
- const sigset_t *sigmask));
-
-__END_DECLS
-
-#endif /* _SYS_POLL_H */
diff --git a/winsup/cygwin/include/sys/procfs.h b/winsup/cygwin/include/sys/procfs.h
deleted file mode 100644
index 78485f678..000000000
--- a/winsup/cygwin/include/sys/procfs.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/* sys/procfs.h
-
- Copyright 2000, 2001 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-/* sys/procfs.h header file for Cygwin. */
-
-#ifndef _SYS_PROCFS_H
-#define _SYS_PROCFS_H
-
-#include <cygwin/core_dump.h>
-
-#endif /* _SYS_PROCFS_H */
diff --git a/winsup/cygwin/include/sys/quota.h b/winsup/cygwin/include/sys/quota.h
deleted file mode 100644
index 7edb53e8a..000000000
--- a/winsup/cygwin/include/sys/quota.h
+++ /dev/null
@@ -1,239 +0,0 @@
-/* Copyright (c) 1982, 1986 Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Robert Elz at The University of Melbourne.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#ifndef _SYS_QUOTA_H
-#define _SYS_QUOTA_H 1
-
-#include <features.h>
-#include <sys/types.h>
-
-/* This file is copied from Linux and kept verbatim, except for the below
- Cygwin-specific blocks. */
-
-#ifdef __CYGWIN__
-/* On Linux these defines live in <linux/quota.h>. Move them here for easier
- access. */
-/* Quota format type IDs */
-#define QFMT_VFS_OLD 1
-#define QFMT_VFS_V0 2
-#define QFMT_OCFS2 3
-#define QFMT_VFS_V1 4
-#endif
-
-/*
- * Select between different incompatible quota versions.
- * Default to the version used by Linux kernel version 2.4.22
- * or later. */
-#ifndef _LINUX_QUOTA_VERSION
-# define _LINUX_QUOTA_VERSION 2
-#endif
-
-#if defined (__CYGWIN__) && _LINUX_QUOTA_VERSION != 2
-#error Cygwin only supports quota version 2.
-#endif
-
-/*
- * Convert diskblocks to blocks and the other way around.
- * currently only to fool the BSD source. :-)
- */
-#define dbtob(num) ((num) << 10)
-#define btodb(num) ((num) >> 10)
-
-/*
- * Convert count of filesystem blocks to diskquota blocks, meant
- * for filesystems where i_blksize != BLOCK_SIZE
- */
-#define fs_to_dq_blocks(num, blksize) (((num) * (blksize)) / BLOCK_SIZE)
-
-/*
- * Definitions for disk quotas imposed on the average user
- * (big brother finally hits Linux).
- *
- * The following constants define the amount of time given a user
- * before the soft limits are treated as hard limits (usually resulting
- * in an allocation failure). The timer is started when the user crosses
- * their soft limit, it is reset when they go below their soft limit.
- */
-#define MAX_IQ_TIME 604800 /* (7*24*60*60) 1 week */
-#define MAX_DQ_TIME 604800 /* (7*24*60*60) 1 week */
-
-#define MAXQUOTAS 2
-#define USRQUOTA 0 /* element used for user quotas */
-#define GRPQUOTA 1 /* element used for group quotas */
-
-/*
- * Definitions for the default names of the quotas files.
- */
-#define INITQFNAMES { \
- "user", /* USRQUOTA */ \
- "group", /* GRPQUOTA */ \
- "undefined", \
-};
-
-#define QUOTAFILENAME "quota"
-#define QUOTAGROUP "staff"
-
-#define NR_DQHASH 43 /* Just an arbitrary number any suggestions ? */
-#define NR_DQUOTS 256 /* Number of quotas active at one time */
-
-/*
- * Command definitions for the 'quotactl' system call.
- * The commands are broken into a main command defined below
- * and a subcommand that is used to convey the type of
- * quota that is being manipulated (see above).
- */
-#define SUBCMDMASK 0x00ff
-#define SUBCMDSHIFT 8
-#define QCMD(cmd, type) (((cmd) << SUBCMDSHIFT) | ((type) & SUBCMDMASK))
-
-#if _LINUX_QUOTA_VERSION < 2
-# define Q_QUOTAON 0x0100 /* enable quotas */
-# define Q_QUOTAOFF 0x0200 /* disable quotas */
-# define Q_GETQUOTA 0x0300 /* get limits and usage */
-# define Q_SETQUOTA 0x0400 /* set limits and usage */
-# define Q_SETUSE 0x0500 /* set usage */
-# define Q_SYNC 0x0600 /* sync disk copy of a filesystems quotas */
-# define Q_SETQLIM 0x0700 /* set limits */
-# define Q_GETSTATS 0x0800 /* get collected stats */
-# define Q_RSQUASH 0x1000 /* set root_squash option */
-#else
-# define Q_SYNC 0x800001 /* sync disk copy of a filesystems quotas */
-# define Q_QUOTAON 0x800002 /* turn quotas on */
-# define Q_QUOTAOFF 0x800003 /* turn quotas off */
-# define Q_GETFMT 0x800004 /* get quota format used on given filesystem */
-# define Q_GETINFO 0x800005 /* get information about quota files */
-# define Q_SETINFO 0x800006 /* set information about quota files */
-# define Q_GETQUOTA 0x800007 /* get user quota structure */
-# define Q_SETQUOTA 0x800008 /* set user quota structure */
-#endif
-
-/*
- * The following structure defines the format of the disk quota file
- * (as it appears on disk) - the file is an array of these structures
- * indexed by user or group number.
- */
-#if _LINUX_QUOTA_VERSION < 2
-struct dqblk
- {
- u_int32_t dqb_bhardlimit; /* absolute limit on disk blks alloc */
- u_int32_t dqb_bsoftlimit; /* preferred limit on disk blks */
- u_int32_t dqb_curblocks; /* current block count */
- u_int32_t dqb_ihardlimit; /* maximum # allocated inodes */
- u_int32_t dqb_isoftlimit; /* preferred inode limit */
- u_int32_t dqb_curinodes; /* current # allocated inodes */
- time_t dqb_btime; /* time limit for excessive disk use */
- time_t dqb_itime; /* time limit for excessive files */
- };
-#else
-
-/* Flags that indicate which fields in dqblk structure are valid. */
-#define QIF_BLIMITS 1
-#define QIF_SPACE 2
-#define QIF_ILIMITS 4
-#define QIF_INODES 8
-#define QIF_BTIME 16
-#define QIF_ITIME 32
-#define QIF_LIMITS (QIF_BLIMITS | QIF_ILIMITS)
-#define QIF_USAGE (QIF_SPACE | QIF_INODES)
-#define QIF_TIMES (QIF_BTIME | QIF_ITIME)
-#define QIF_ALL (QIF_LIMITS | QIF_USAGE | QIF_TIMES)
-
-struct dqblk
- {
- u_int64_t dqb_bhardlimit; /* absolute limit on disk quota blocks alloc */
- u_int64_t dqb_bsoftlimit; /* preferred limit on disk quota blocks */
- u_int64_t dqb_curspace; /* current quota block count */
- u_int64_t dqb_ihardlimit; /* maximum # allocated inodes */
- u_int64_t dqb_isoftlimit; /* preferred inode limit */
- u_int64_t dqb_curinodes; /* current # allocated inodes */
- u_int64_t dqb_btime; /* time limit for excessive disk use */
- u_int64_t dqb_itime; /* time limit for excessive files */
- u_int32_t dqb_valid; /* bitmask of QIF_* constants */
- };
-#endif
-
-/*
- * Shorthand notation.
- */
-#define dq_bhardlimit dq_dqb.dqb_bhardlimit
-#define dq_bsoftlimit dq_dqb.dqb_bsoftlimit
-#if _LINUX_QUOTA_VERSION < 2
-# define dq_curblocks dq_dqb.dqb_curblocks
-#else
-# define dq_curspace dq_dqb.dqb_curspace
-# define dq_valid dq_dqb.dqb_valid
-#endif
-#define dq_ihardlimit dq_dqb.dqb_ihardlimit
-#define dq_isoftlimit dq_dqb.dqb_isoftlimit
-#define dq_curinodes dq_dqb.dqb_curinodes
-#define dq_btime dq_dqb.dqb_btime
-#define dq_itime dq_dqb.dqb_itime
-
-#define dqoff(UID) ((loff_t)((UID) * sizeof (struct dqblk)))
-
-#if _LINUX_QUOTA_VERSION < 2
-struct dqstats
- {
- u_int32_t lookups;
- u_int32_t drops;
- u_int32_t reads;
- u_int32_t writes;
- u_int32_t cache_hits;
- u_int32_t pages_allocated;
- u_int32_t allocated_dquots;
- u_int32_t free_dquots;
- u_int32_t syncs;
- };
-#else
-
-/* Flags that indicate which fields in dqinfo structure are valid. */
-# define IIF_BGRACE 1
-# define IIF_IGRACE 2
-# define IIF_FLAGS 4
-# define IIF_ALL (IIF_BGRACE | IIF_IGRACE | IIF_FLAGS)
-
-struct dqinfo
- {
- u_int64_t dqi_bgrace;
- u_int64_t dqi_igrace;
- u_int32_t dqi_flags;
- u_int32_t dqi_valid;
- };
-#endif
-
-__BEGIN_DECLS
-
-extern int quotactl (int __cmd, const char *__special, int __id,
- caddr_t __addr) __THROW;
-
-__END_DECLS
-
-#endif /* sys/quota.h */
diff --git a/winsup/cygwin/include/sys/resource.h b/winsup/cygwin/include/sys/resource.h
deleted file mode 100644
index d9419d150..000000000
--- a/winsup/cygwin/include/sys/resource.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/* sys/resource.h
-
- Copyright 1997, 1998, 2000, 2001, 2005 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _SYS_RESOURCE_H_
-#define _SYS_RESOURCE_H_
-
-#include <sys/time.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Used for get/setpriority */
-#define PRIO_PROCESS 0
-#define PRIO_PGRP 1
-#define PRIO_USER 2
-
-#define RLIMIT_CPU 0 /* CPU time in seconds */
-#define RLIMIT_FSIZE 1 /* Maximum filesize */
-#define RLIMIT_DATA 2 /* max data size */
-#define RLIMIT_STACK 3 /* max stack size */
-#define RLIMIT_CORE 4 /* max core file size */
-#define RLIMIT_NOFILE 5 /* max number of open files */
-#define RLIMIT_OFILE RLIMIT_NOFILE /* BSD name */
-#define RLIMIT_AS 6 /* address space (virt. memory) limit */
-
-#define RLIMIT_NLIMITS 7 /* upper bound of RLIMIT_* defines */
-#define RLIM_NLIMITS RLIMIT_NLIMITS
-
-#define RLIM_INFINITY (~0UL)
-#define RLIM_SAVED_MAX RLIM_INFINITY
-#define RLIM_SAVED_CUR RLIM_INFINITY
-
-typedef unsigned long rlim_t;
-
-struct rlimit {
- rlim_t rlim_cur;
- rlim_t rlim_max;
-};
-
-#define RUSAGE_SELF 0 /* calling process */
-#define RUSAGE_CHILDREN -1 /* terminated child processes */
-
-struct rusage {
- struct timeval ru_utime; /* user time used */
- struct timeval ru_stime; /* system time used */
- long ru_maxrss;
- long ru_ixrss; /* XXX: 0 */
- long ru_idrss; /* XXX: sum of rm_asrss */
- long ru_isrss; /* XXX: 0 */
- long ru_minflt; /* any page faults not requiring I/O */
- long ru_majflt; /* any page faults requiring I/O */
- long ru_nswap; /* swaps */
- long ru_inblock; /* block input operations */
- long ru_oublock; /* block output operations */
- long ru_msgsnd; /* messages sent */
- long ru_msgrcv; /* messages received */
- long ru_nsignals; /* signals received */
- long ru_nvcsw; /* voluntary context switches */
- long ru_nivcsw; /* involuntary " */
-#define ru_last ru_nivcsw
-};
-
-int getrlimit (int __resource, struct rlimit *__rlp);
-int setrlimit (int __resource, const struct rlimit *__rlp);
-
-int getrusage (int __who, struct rusage *__rusage);
-
-int getpriority (int which, id_t who);
-int setpriority (int which, id_t who, int value);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
diff --git a/winsup/cygwin/include/sys/select.h b/winsup/cygwin/include/sys/select.h
deleted file mode 100644
index 9cc6c1eca..000000000
--- a/winsup/cygwin/include/sys/select.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* select.h
- Copyright 1998, 1999, 2000, 2001, 2005, 2009 Red Hat, Inc.
-
- Written by Geoffrey Noer <noer@cygnus.com>
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _SYS_SELECT_H
-#define _SYS_SELECT_H
-
-#if !defined (_POSIX_SOURCE) && !defined (__INSIDE_CYGWIN_NET__) && !defined (__USE_W32_SOCKETS)
-
-#include <sys/cdefs.h>
-
-/* Get fd_set, and macros like FD_SET */
-#include <sys/types.h>
-
-/* Get definition of timeval. */
-#include <sys/time.h>
-#include <time.h>
-
-/* Get definition of sigset_t. */
-#include <signal.h>
-
-__BEGIN_DECLS
-
-int select __P ((int __n, fd_set *__readfds, fd_set *__writefds,
- fd_set *__exceptfds, struct timeval *__timeout));
-int pselect __P ((int __n, fd_set *__readfds, fd_set *__writefds,
- fd_set *__exceptfds, const struct timespec *__timeout,
- const sigset_t *__set));
-
-__END_DECLS
-
-#endif /* !_POSIX_SOURCE, !__INSIDE_CYGWIN_NET__ */
-
-#endif /* sys/select.h */
diff --git a/winsup/cygwin/include/sys/sem.h b/winsup/cygwin/include/sys/sem.h
deleted file mode 100644
index 15f46c806..000000000
--- a/winsup/cygwin/include/sys/sem.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/* sys/sem.h
-
- Copyright 2002, 2003 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-/* sys/sem.h header file for Cygwin. */
-
-#ifndef _SYS_SEM_H
-#define _SYS_SEM_H
-
-#include <cygwin/sem.h>
-
-#endif /* _SYS_SEM_H */
diff --git a/winsup/cygwin/include/sys/shm.h b/winsup/cygwin/include/sys/shm.h
deleted file mode 100644
index 40cfdcee7..000000000
--- a/winsup/cygwin/include/sys/shm.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/* sys/shm.h
-
- Copyright 2001, 2002, 2003 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-/* sys/shm.h header file for Cygwin. */
-
-#ifndef _SYS_SHM_H
-#define _SYS_SHM_H
-
-#include <cygwin/shm.h>
-
-#endif /* _SYS_SHM_H */
diff --git a/winsup/cygwin/include/sys/smallprint.h b/winsup/cygwin/include/sys/smallprint.h
deleted file mode 100644
index 776e3ca22..000000000
--- a/winsup/cygwin/include/sys/smallprint.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/* sys/smallprint.h
-
- Copyright 1998, 2000, 2001 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _SYS_SMALLPRINT_H
-#define _SYS_SMALLPRINT_H
-
-#include <stdarg.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-int __small_sprintf (char *__dst, const char *__fmt, ...);
-int __small_vsprintf (char *__dst, const char *__fmt, va_list __ap);
-
-#ifdef __cplusplus
-};
-#endif
-
-#endif /* _SYS_SMALLPRINT_H */
diff --git a/winsup/cygwin/include/sys/socket.h b/winsup/cygwin/include/sys/socket.h
deleted file mode 100644
index 2d66abb26..000000000
--- a/winsup/cygwin/include/sys/socket.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/* sys/socket.h
-
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2005, 2006, 2009, 2010,
- 2013 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _SYS_SOCKET_H
-#define _SYS_SOCKET_H
-
-#include <features.h>
-#include <cygwin/socket.h>
-#include <sys/time.h>
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-#ifndef __INSIDE_CYGWIN_NET__
- int accept (int, struct sockaddr *__peer, socklen_t *);
- int accept4 (int, struct sockaddr *__peer, socklen_t *, int flags);
- int bind (int, const struct sockaddr *__my_addr, socklen_t __addrlen);
- int connect (int, const struct sockaddr *, socklen_t);
- int getpeername (int, struct sockaddr *__peer, socklen_t *);
- int getsockname (int, struct sockaddr *__addr, socklen_t *);
- int listen (int, int __n);
- ssize_t recv (int, void *__buff, size_t __len, int __flags);
- ssize_t recvfrom (int, void *__buff, size_t __len, int __flags,
- struct sockaddr *__from, socklen_t *__fromlen);
- ssize_t recvmsg(int s, struct msghdr *msg, int flags);
- ssize_t send (int, const void *__buff, size_t __len, int __flags);
- ssize_t sendmsg(int s, const struct msghdr *msg, int flags);
- ssize_t sendto (int, const void *, size_t __len, int __flags,
- const struct sockaddr *__to, socklen_t __tolen);
- int setsockopt (int __s, int __level, int __optname, const void *optval,
- socklen_t __optlen);
- int getsockopt (int __s, int __level, int __optname, void *__optval,
- socklen_t *__optlen);
- int shutdown (int, int);
- int socket (int __family, int __type, int __protocol);
- int socketpair (int __domain, int __type, int __protocol, int *__socket_vec);
-
- struct servent *getservbyname (const char *__name, const char *__proto);
-#endif
-
-#ifdef __cplusplus
-};
-#endif
-
-#endif /* _SYS_SOCKET_H */
diff --git a/winsup/cygwin/include/sys/soundcard.h b/winsup/cygwin/include/sys/soundcard.h
deleted file mode 100644
index 79341c547..000000000
--- a/winsup/cygwin/include/sys/soundcard.h
+++ /dev/null
@@ -1,1287 +0,0 @@
-#ifndef SOUNDCARD_H
-#define SOUNDCARD_H
-/*
- * Copyright by Hannu Savolainen 1993-1997
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met: 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer. 2.
- * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
- * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-
-/*
- * OSS interface version. With versions earlier than 3.6 this value is
- * an integer with value less than 361. In versions 3.6 and later
- * it's a six digit hexadecimal value. For example value
- * of 0x030600 represents OSS version 3.6.0.
- * Use ioctl(fd, OSS_GETVERSION, &int) to get the version number of
- * the currently active driver.
- */
-#define SOUND_VERSION 0x030802
-#define OPEN_SOUND_SYSTEM
-
-/* In Linux we need to be prepared for cross compiling */
-//#include <linux/ioctl.h>
-
-/*
- * Supported card ID numbers (Should be somewhere else?)
- */
-
-#define SNDCARD_ADLIB 1
-#define SNDCARD_SB 2
-#define SNDCARD_PAS 3
-#define SNDCARD_GUS 4
-#define SNDCARD_MPU401 5
-#define SNDCARD_SB16 6
-#define SNDCARD_SB16MIDI 7
-#define SNDCARD_UART6850 8
-#define SNDCARD_GUS16 9
-#define SNDCARD_MSS 10
-#define SNDCARD_PSS 11
-#define SNDCARD_SSCAPE 12
-#define SNDCARD_PSS_MPU 13
-#define SNDCARD_PSS_MSS 14
-#define SNDCARD_SSCAPE_MSS 15
-#define SNDCARD_TRXPRO 16
-#define SNDCARD_TRXPRO_SB 17
-#define SNDCARD_TRXPRO_MPU 18
-#define SNDCARD_MAD16 19
-#define SNDCARD_MAD16_MPU 20
-#define SNDCARD_CS4232 21
-#define SNDCARD_CS4232_MPU 22
-#define SNDCARD_MAUI 23
-#define SNDCARD_PSEUDO_MSS 24
-#define SNDCARD_GUSPNP 25
-#define SNDCARD_UART401 26
-/* Sound card numbers 27 to N are reserved. Don't add more numbers here. */
-
-/***********************************
- * IOCTL Commands for /dev/sequencer
- */
-
-#ifndef _SIOWR
-#if defined(_IOWR) && (defined(_AIX) || (!defined(sun) && !defined(sparc) && !defined(__sparc__) && !defined(__INCioctlh) && !defined(__Lynx__)))
-/* Use already defined ioctl defines if they exist (except with Sun or Sparc) */
-#define SIOCPARM_MASK IOCPARM_MASK
-#define SIOC_VOID IOC_VOID
-#define SIOC_OUT IOC_OUT
-#define SIOC_IN IOC_IN
-#define SIOC_INOUT IOC_INOUT
-#define _SIOC_SIZE _IOC_SIZE
-#define _SIOC_DIR _IOC_DIR
-#define _SIOC_NONE _IOC_NONE
-#define _SIOC_READ _IOC_READ
-#define _SIOC_WRITE _IOC_WRITE
-#define _SIO _IO
-#define _SIOR _IOR
-#define _SIOW _IOW
-#define _SIOWR _IOWR
-#else
-
-/* Ioctl's have the command encoded in the lower word,
- * and the size of any in or out parameters in the upper
- * word. The high 2 bits of the upper word are used
- * to encode the in/out status of the parameter; for now
- * we restrict parameters to at most 8191 bytes.
- */
-/* #define SIOCTYPE (0xff<<8) */
-#define SIOCPARM_MASK 0x1fff /* parameters must be < 8192 bytes */
-#define SIOC_VOID 0x00000000 /* no parameters */
-#define SIOC_OUT 0x20000000 /* copy out parameters */
-#define SIOC_IN 0x40000000 /* copy in parameters */
-#define SIOC_INOUT (SIOC_IN|SIOC_OUT)
-/* the 0x20000000 is so we can distinguish new ioctl's from old */
-#define _SIO(x,y) ((int)(SIOC_VOID|(x<<8)|y))
-#define _SIOR(x,y,t) ((int)(SIOC_OUT|((sizeof(t)&SIOCPARM_MASK)<<16)|(x<<8)|y))
-#define _SIOW(x,y,t) ((int)(SIOC_IN|((sizeof(t)&SIOCPARM_MASK)<<16)|(x<<8)|y))
-/* this should be _SIORW, but stdio got there first */
-#define _SIOWR(x,y,t) ((int)(SIOC_INOUT|((sizeof(t)&SIOCPARM_MASK)<<16)|(x<<8)|y))
-#define _SIOC_SIZE(x) ((x>>16)&SIOCPARM_MASK)
-#define _SIOC_DIR(x) (x & 0xf0000000)
-#define _SIOC_NONE SIOC_VOID
-#define _SIOC_READ SIOC_OUT
-#define _SIOC_WRITE SIOC_IN
-# endif /* _IOWR */
-#endif /* !_SIOWR */
-
-#define SNDCTL_SEQ_RESET _SIO ('Q', 0)
-#define SNDCTL_SEQ_SYNC _SIO ('Q', 1)
-#define SNDCTL_SYNTH_INFO _SIOWR('Q', 2, struct synth_info)
-#define SNDCTL_SEQ_CTRLRATE _SIOWR('Q', 3, int) /* Set/get timer resolution (HZ) */
-#define SNDCTL_SEQ_GETOUTCOUNT _SIOR ('Q', 4, int)
-#define SNDCTL_SEQ_GETINCOUNT _SIOR ('Q', 5, int)
-#define SNDCTL_SEQ_PERCMODE _SIOW ('Q', 6, int)
-#define SNDCTL_FM_LOAD_INSTR _SIOW ('Q', 7, struct sbi_instrument) /* Obsolete. Don't use!!!!!! */
-#define SNDCTL_SEQ_TESTMIDI _SIOW ('Q', 8, int)
-#define SNDCTL_SEQ_RESETSAMPLES _SIOW ('Q', 9, int)
-#define SNDCTL_SEQ_NRSYNTHS _SIOR ('Q',10, int)
-#define SNDCTL_SEQ_NRMIDIS _SIOR ('Q',11, int)
-#define SNDCTL_MIDI_INFO _SIOWR('Q',12, struct midi_info)
-#define SNDCTL_SEQ_THRESHOLD _SIOW ('Q',13, int)
-#define SNDCTL_SYNTH_MEMAVL _SIOWR('Q',14, int) /* in=dev#, out=memsize */
-#define SNDCTL_FM_4OP_ENABLE _SIOW ('Q',15, int) /* in=dev# */
-#define SNDCTL_SEQ_PANIC _SIO ('Q',17)
-#define SNDCTL_SEQ_OUTOFBAND _SIOW ('Q',18, struct seq_event_rec)
-#define SNDCTL_SEQ_GETTIME _SIOR ('Q',19, int)
-#define SNDCTL_SYNTH_ID _SIOWR('Q',20, struct synth_info)
-#define SNDCTL_SYNTH_CONTROL _SIOWR('Q',21, struct synth_control)
-#define SNDCTL_SYNTH_REMOVESAMPLE _SIOWR('Q',22, struct remove_sample)
-
-typedef struct synth_control
-{
- int devno; /* Synthesizer # */
- char data[4000]; /* Device spesific command/data record */
-}synth_control;
-
-typedef struct remove_sample
-{
- int devno; /* Synthesizer # */
- int bankno; /* MIDI bank # (0=General MIDI) */
- int instrno; /* MIDI instrument number */
-} remove_sample;
-
-typedef struct seq_event_rec {
- unsigned char arr[8];
-} seq_event_rec;
-
-#define SNDCTL_TMR_TIMEBASE _SIOWR('T', 1, int)
-#define SNDCTL_TMR_START _SIO ('T', 2)
-#define SNDCTL_TMR_STOP _SIO ('T', 3)
-#define SNDCTL_TMR_CONTINUE _SIO ('T', 4)
-#define SNDCTL_TMR_TEMPO _SIOWR('T', 5, int)
-#define SNDCTL_TMR_SOURCE _SIOWR('T', 6, int)
-# define TMR_INTERNAL 0x00000001
-# define TMR_EXTERNAL 0x00000002
-# define TMR_MODE_MIDI 0x00000010
-# define TMR_MODE_FSK 0x00000020
-# define TMR_MODE_CLS 0x00000040
-# define TMR_MODE_SMPTE 0x00000080
-#define SNDCTL_TMR_METRONOME _SIOW ('T', 7, int)
-#define SNDCTL_TMR_SELECT _SIOW ('T', 8, int)
-
-/*
- * Some big endian/little endian handling macros
- */
-
-#if defined(_AIX) || defined(AIX) || defined(sparc) || defined(__sparc__) || defined(HPPA) || defined(PPC)
-/* Big endian machines */
-# define _PATCHKEY(id) (0xfd00|id)
-# define AFMT_S16_NE AFMT_S16_BE
-#else
-# define _PATCHKEY(id) ((id<<8)|0xfd)
-# define AFMT_S16_NE AFMT_S16_LE
-#endif
-
-/*
- * Sample loading mechanism for internal synthesizers (/dev/sequencer)
- * The following patch_info structure has been designed to support
- * Gravis UltraSound. It tries to be universal format for uploading
- * sample based patches but is probably too limited.
- *
- * (PBD) As Hannu guessed, the GUS structure is too limited for
- * the WaveFront, but this is the right place for a constant definition.
- */
-
-struct patch_info {
- unsigned short key; /* Use WAVE_PATCH here */
-#define WAVE_PATCH _PATCHKEY(0x04)
-#define GUS_PATCH WAVE_PATCH
-#define WAVEFRONT_PATCH _PATCHKEY(0x06)
-
- short device_no; /* Synthesizer number */
- short instr_no; /* Midi pgm# */
-
- unsigned int mode;
-/*
- * The least significant byte has the same format than the GUS .PAT
- * files
- */
-#define WAVE_16_BITS 0x01 /* bit 0 = 8 or 16 bit wave data. */
-#define WAVE_UNSIGNED 0x02 /* bit 1 = Signed - Unsigned data. */
-#define WAVE_LOOPING 0x04 /* bit 2 = looping enabled-1. */
-#define WAVE_BIDIR_LOOP 0x08 /* bit 3 = Set is bidirectional looping. */
-#define WAVE_LOOP_BACK 0x10 /* bit 4 = Set is looping backward. */
-#define WAVE_SUSTAIN_ON 0x20 /* bit 5 = Turn sustaining on. (Env. pts. 3)*/
-#define WAVE_ENVELOPES 0x40 /* bit 6 = Enable envelopes - 1 */
-#define WAVE_FAST_RELEASE 0x80 /* bit 7 = Shut off immediately after note off */
- /* (use the env_rate/env_offs fields). */
-/* Linux specific bits */
-#define WAVE_VIBRATO 0x00010000 /* The vibrato info is valid */
-#define WAVE_TREMOLO 0x00020000 /* The tremolo info is valid */
-#define WAVE_SCALE 0x00040000 /* The scaling info is valid */
-#define WAVE_FRACTIONS 0x00080000 /* Fraction information is valid */
-/* Reserved bits */
-#define WAVE_ROM 0x40000000 /* For future use */
-#define WAVE_MULAW 0x20000000 /* For future use */
-/* Other bits must be zeroed */
-
- int len; /* Size of the wave data in bytes */
- int loop_start, loop_end; /* Byte offsets from the beginning */
-
-/*
- * The base_freq and base_note fields are used when computing the
- * playback speed for a note. The base_note defines the tone frequency
- * which is heard if the sample is played using the base_freq as the
- * playback speed.
- *
- * The low_note and high_note fields define the minimum and maximum note
- * frequencies for which this sample is valid. It is possible to define
- * more than one samples for an instrument number at the same time. The
- * low_note and high_note fields are used to select the most suitable one.
- *
- * The fields base_note, high_note and low_note should contain
- * the note frequency multiplied by 1000. For example value for the
- * middle A is 440*1000.
- */
-
- unsigned int base_freq;
- unsigned int base_note;
- unsigned int high_note;
- unsigned int low_note;
- int panning; /* -128=left, 127=right */
- int detuning;
-
-/* New fields introduced in version 1.99.5 */
-
- /* Envelope. Enabled by mode bit WAVE_ENVELOPES */
- unsigned char env_rate[ 6 ]; /* GUS HW ramping rate */
- unsigned char env_offset[ 6 ]; /* 255 == 100% */
-
- /*
- * The tremolo, vibrato and scale info are not supported yet.
- * Enable by setting the mode bits WAVE_TREMOLO, WAVE_VIBRATO or
- * WAVE_SCALE
- */
-
- unsigned char tremolo_sweep;
- unsigned char tremolo_rate;
- unsigned char tremolo_depth;
-
- unsigned char vibrato_sweep;
- unsigned char vibrato_rate;
- unsigned char vibrato_depth;
-
- int scale_frequency;
- unsigned int scale_factor; /* from 0 to 2048 or 0 to 2 */
-
- int volume;
- int fractions;
- int reserved1;
- int spare[2];
- char data[1]; /* The waveform data starts here */
- };
-
-struct sysex_info {
- short key; /* Use SYSEX_PATCH or MAUI_PATCH here */
-#define SYSEX_PATCH _PATCHKEY(0x05)
-#define MAUI_PATCH _PATCHKEY(0x06)
- short device_no; /* Synthesizer number */
- int len; /* Size of the sysex data in bytes */
- unsigned char data[1]; /* Sysex data starts here */
- };
-
-/*
- * /dev/sequencer input events.
- *
- * The data written to the /dev/sequencer is a stream of events. Events
- * are records of 4 or 8 bytes. The first byte defines the size.
- * Any number of events can be written with a write call. There
- * is a set of macros for sending these events. Use these macros if you
- * want to maximize portability of your program.
- *
- * Events SEQ_WAIT, SEQ_MIDIPUTC and SEQ_ECHO. Are also input events.
- * (All input events are currently 4 bytes long. Be prepared to support
- * 8 byte events also. If you receive any event having first byte >= 128,
- * it's a 8 byte event.
- *
- * The events are documented at the end of this file.
- *
- * Normal events (4 bytes)
- * There is also a 8 byte version of most of the 4 byte events. The
- * 8 byte one is recommended.
- */
-#define SEQ_NOTEOFF 0
-#define SEQ_FMNOTEOFF SEQ_NOTEOFF /* Just old name */
-#define SEQ_NOTEON 1
-#define SEQ_FMNOTEON SEQ_NOTEON
-#define SEQ_WAIT TMR_WAIT_ABS
-#define SEQ_PGMCHANGE 3
-#define SEQ_FMPGMCHANGE SEQ_PGMCHANGE
-#define SEQ_SYNCTIMER TMR_START
-#define SEQ_MIDIPUTC 5
-#define SEQ_DRUMON 6 /*** OBSOLETE ***/
-#define SEQ_DRUMOFF 7 /*** OBSOLETE ***/
-#define SEQ_ECHO TMR_ECHO /* For synching programs with output */
-#define SEQ_AFTERTOUCH 9
-#define SEQ_CONTROLLER 10
-
-/*******************************************
- * Midi controller numbers
- *******************************************
- * Controllers 0 to 31 (0x00 to 0x1f) and
- * 32 to 63 (0x20 to 0x3f) are continuous
- * controllers.
- * In the MIDI 1.0 these controllers are sent using
- * two messages. Controller numbers 0 to 31 are used
- * to send the MSB and the controller numbers 32 to 63
- * are for the LSB. Note that just 7 bits are used in MIDI bytes.
- */
-
-#define CTL_BANK_SELECT 0x00
-#define CTL_MODWHEEL 0x01
-#define CTL_BREATH 0x02
-/* undefined 0x03 */
-#define CTL_FOOT 0x04
-#define CTL_PORTAMENTO_TIME 0x05
-#define CTL_DATA_ENTRY 0x06
-#define CTL_MAIN_VOLUME 0x07
-#define CTL_BALANCE 0x08
-/* undefined 0x09 */
-#define CTL_PAN 0x0a
-#define CTL_EXPRESSION 0x0b
-/* undefined 0x0c */
-/* undefined 0x0d */
-/* undefined 0x0e */
-/* undefined 0x0f */
-#define CTL_GENERAL_PURPOSE1 0x10
-#define CTL_GENERAL_PURPOSE2 0x11
-#define CTL_GENERAL_PURPOSE3 0x12
-#define CTL_GENERAL_PURPOSE4 0x13
-/* undefined 0x14 - 0x1f */
-
-/* undefined 0x20 */
-/* The controller numbers 0x21 to 0x3f are reserved for the */
-/* least significant bytes of the controllers 0x00 to 0x1f. */
-/* These controllers are not recognised by the driver. */
-
-/* Controllers 64 to 69 (0x40 to 0x45) are on/off switches. */
-/* 0=OFF and 127=ON (intermediate values are possible) */
-#define CTL_DAMPER_PEDAL 0x40
-#define CTL_SUSTAIN 0x40 /* Alias */
-#define CTL_HOLD 0x40 /* Alias */
-#define CTL_PORTAMENTO 0x41
-#define CTL_SOSTENUTO 0x42
-#define CTL_SOFT_PEDAL 0x43
-/* undefined 0x44 */
-#define CTL_HOLD2 0x45
-/* undefined 0x46 - 0x4f */
-
-#define CTL_GENERAL_PURPOSE5 0x50
-#define CTL_GENERAL_PURPOSE6 0x51
-#define CTL_GENERAL_PURPOSE7 0x52
-#define CTL_GENERAL_PURPOSE8 0x53
-/* undefined 0x54 - 0x5a */
-#define CTL_EXT_EFF_DEPTH 0x5b
-#define CTL_TREMOLO_DEPTH 0x5c
-#define CTL_CHORUS_DEPTH 0x5d
-#define CTL_DETUNE_DEPTH 0x5e
-#define CTL_CELESTE_DEPTH 0x5e /* Alias for the above one */
-#define CTL_PHASER_DEPTH 0x5f
-#define CTL_DATA_INCREMENT 0x60
-#define CTL_DATA_DECREMENT 0x61
-#define CTL_NONREG_PARM_NUM_LSB 0x62
-#define CTL_NONREG_PARM_NUM_MSB 0x63
-#define CTL_REGIST_PARM_NUM_LSB 0x64
-#define CTL_REGIST_PARM_NUM_MSB 0x65
-/* undefined 0x66 - 0x78 */
-/* reserved 0x79 - 0x7f */
-
-/* Pseudo controllers (not midi compatible) */
-#define CTRL_PITCH_BENDER 255
-#define CTRL_PITCH_BENDER_RANGE 254
-#define CTRL_EXPRESSION 253 /* Obsolete */
-#define CTRL_MAIN_VOLUME 252 /* Obsolete */
-#define SEQ_BALANCE 11
-#define SEQ_VOLMODE 12
-
-/*
- * Volume mode decides how volumes are used
- */
-
-#define VOL_METHOD_ADAGIO 1
-#define VOL_METHOD_LINEAR 2
-
-/*
- * Note! SEQ_WAIT, SEQ_MIDIPUTC and SEQ_ECHO are used also as
- * input events.
- */
-
-/*
- * Event codes 0xf0 to 0xfc are reserved for future extensions.
- */
-
-#define SEQ_FULLSIZE 0xfd /* Long events */
-/*
- * SEQ_FULLSIZE events are used for loading patches/samples to the
- * synthesizer devices. These events are passed directly to the driver
- * of the associated synthesizer device. There is no limit to the size
- * of the extended events. These events are not queued but executed
- * immediately when the write() is called (execution can take several
- * seconds of time).
- *
- * When a SEQ_FULLSIZE message is written to the device, it must
- * be written using exactly one write() call. Other events cannot
- * be mixed to the same write.
- *
- * For FM synths (YM3812/OPL3) use struct sbi_instrument and write it to the
- * /dev/sequencer. Don't write other data together with the instrument structure
- * Set the key field of the structure to FM_PATCH. The device field is used to
- * route the patch to the corresponding device.
- *
- * For wave table use struct patch_info. Initialize the key field
- * to WAVE_PATCH.
- */
-#define SEQ_PRIVATE 0xfe /* Low level HW dependent events (8 bytes) */
-#define SEQ_EXTENDED 0xff /* Extended events (8 bytes) OBSOLETE */
-
-/*
- * Record for FM patches
- */
-
-typedef unsigned char sbi_instr_data[32];
-
-struct sbi_instrument {
- unsigned short key; /* FM_PATCH or OPL3_PATCH */
-#define FM_PATCH _PATCHKEY(0x01)
-#define OPL3_PATCH _PATCHKEY(0x03)
- short device; /* Synth# (0-4) */
- int channel; /* Program# to be initialized */
- sbi_instr_data operators; /* Register settings for operator cells (.SBI format) */
- };
-
-struct synth_info { /* Read only */
- char name[30];
- int device; /* 0-N. INITIALIZE BEFORE CALLING */
- int synth_type;
-#define SYNTH_TYPE_FM 0
-#define SYNTH_TYPE_SAMPLE 1
-#define SYNTH_TYPE_MIDI 2 /* Midi interface */
-
- int synth_subtype;
-#define FM_TYPE_ADLIB 0x00
-#define FM_TYPE_OPL3 0x01
-#define MIDI_TYPE_MPU401 0x401
-
-#define SAMPLE_TYPE_BASIC 0x10
-#define SAMPLE_TYPE_GUS SAMPLE_TYPE_BASIC
-#define SAMPLE_TYPE_WAVEFRONT 0x11
-
- int perc_mode; /* No longer supported */
- int nr_voices;
- int nr_drums; /* Obsolete field */
- int instr_bank_size;
- unsigned int capabilities;
-#define SYNTH_CAP_PERCMODE 0x00000001 /* No longer used */
-#define SYNTH_CAP_OPL3 0x00000002 /* Set if OPL3 supported */
-#define SYNTH_CAP_INPUT 0x00000004 /* Input (MIDI) device */
- int dummies[19]; /* Reserve space */
- };
-
-struct sound_timer_info {
- char name[32];
- int caps;
- };
-
-#define MIDI_CAP_MPU401 1 /* MPU-401 intelligent mode */
-
-struct midi_info {
- char name[30];
- int device; /* 0-N. INITIALIZE BEFORE CALLING */
- unsigned int capabilities; /* To be defined later */
- int dev_type;
- int dummies[18]; /* Reserve space */
- };
-
-/********************************************
- * ioctl commands for the /dev/midi##
- */
-typedef struct {
- unsigned char cmd;
- char nr_args, nr_returns;
- unsigned char data[30];
- } mpu_command_rec;
-
-#define SNDCTL_MIDI_PRETIME _SIOWR('m', 0, int)
-#define SNDCTL_MIDI_MPUMODE _SIOWR('m', 1, int)
-#define SNDCTL_MIDI_MPUCMD _SIOWR('m', 2, mpu_command_rec)
-
-/********************************************
- * IOCTL commands for /dev/dsp and /dev/audio
- */
-
-#define SNDCTL_DSP_RESET _SIO ('P', 0)
-#define SNDCTL_DSP_SYNC _SIO ('P', 1)
-#define SNDCTL_DSP_SPEED _SIOWR('P', 2, int)
-#define SNDCTL_DSP_STEREO _SIOWR('P', 3, int)
-#define SNDCTL_DSP_GETBLKSIZE _SIOWR('P', 4, int)
-#define SNDCTL_DSP_SAMPLESIZE SNDCTL_DSP_SETFMT
-#define SNDCTL_DSP_CHANNELS _SIOWR('P', 6, int)
-#define SOUND_PCM_WRITE_CHANNELS SNDCTL_DSP_CHANNELS
-#define SOUND_PCM_WRITE_FILTER _SIOWR('P', 7, int)
-#define SNDCTL_DSP_POST _SIO ('P', 8)
-#define SNDCTL_DSP_SUBDIVIDE _SIOWR('P', 9, int)
-#define SNDCTL_DSP_SETFRAGMENT _SIOWR('P',10, int)
-
-/* Audio data formats (Note! U8=8 and S16_LE=16 for compatibility) */
-#define SNDCTL_DSP_GETFMTS _SIOR ('P',11, int) /* Returns a mask */
-#define SNDCTL_DSP_SETFMT _SIOWR('P',5, int) /* Selects ONE fmt*/
-# define AFMT_QUERY 0x00000000 /* Return current fmt */
-# define AFMT_MU_LAW 0x00000001
-# define AFMT_A_LAW 0x00000002
-# define AFMT_IMA_ADPCM 0x00000004
-# define AFMT_U8 0x00000008
-# define AFMT_S16_LE 0x00000010 /* Little endian signed 16*/
-# define AFMT_S16_BE 0x00000020 /* Big endian signed 16 */
-# define AFMT_S8 0x00000040
-# define AFMT_U16_LE 0x00000080 /* Little endian U16 */
-# define AFMT_U16_BE 0x00000100 /* Big endian U16 */
-# define AFMT_MPEG 0x00000200 /* MPEG (2) audio */
-# define AFMT_AC3 0x00000400 /* Dolby Digital AC3 */
-
-/*
- * Buffer status queries.
- */
-typedef struct audio_buf_info {
- int fragments; /* # of available fragments (partially usend ones not counted) */
- int fragstotal; /* Total # of fragments allocated */
- int fragsize; /* Size of a fragment in bytes */
-
- int bytes; /* Available space in bytes (includes partially used fragments) */
- /* Note! 'bytes' could be more than fragments*fragsize */
- } audio_buf_info;
-
-#define SNDCTL_DSP_GETOSPACE _SIOR ('P',12, audio_buf_info)
-#define SNDCTL_DSP_GETISPACE _SIOR ('P',13, audio_buf_info)
-#define SNDCTL_DSP_NONBLOCK _SIO ('P',14)
-#define SNDCTL_DSP_GETCAPS _SIOR ('P',15, int)
-# define DSP_CAP_REVISION 0x000000ff /* Bits for revision level (0 to 255) */
-# define DSP_CAP_DUPLEX 0x00000100 /* Full duplex record/playback */
-# define DSP_CAP_REALTIME 0x00000200 /* Real time capability */
-# define DSP_CAP_BATCH 0x00000400 /* Device has some kind of */
- /* internal buffers which may */
- /* cause some delays and */
- /* decrease precision of timing */
-# define DSP_CAP_COPROC 0x00000800 /* Has a coprocessor */
- /* Sometimes it's a DSP */
- /* but usually not */
-# define DSP_CAP_TRIGGER 0x00001000 /* Supports SETTRIGGER */
-# define DSP_CAP_MMAP 0x00002000 /* Supports mmap() */
-# define DSP_CAP_MULTI 0x00004000 /* support multiple open */
-# define DSP_CAP_BIND 0x00008000 /* channel binding to front/rear/cneter/lfe */
-
-
-#define SNDCTL_DSP_GETTRIGGER _SIOR ('P',16, int)
-#define SNDCTL_DSP_SETTRIGGER _SIOW ('P',16, int)
-# define PCM_ENABLE_INPUT 0x00000001
-# define PCM_ENABLE_OUTPUT 0x00000002
-
-typedef struct count_info {
- int bytes; /* Total # of bytes processed */
- int blocks; /* # of fragment transitions since last time */
- int ptr; /* Current DMA pointer value */
- } count_info;
-
-#define SNDCTL_DSP_GETIPTR _SIOR ('P',17, count_info)
-#define SNDCTL_DSP_GETOPTR _SIOR ('P',18, count_info)
-
-typedef struct buffmem_desc {
- unsigned *buffer;
- int size;
- } buffmem_desc;
-#define SNDCTL_DSP_MAPINBUF _SIOR ('P', 19, buffmem_desc)
-#define SNDCTL_DSP_MAPOUTBUF _SIOR ('P', 20, buffmem_desc)
-#define SNDCTL_DSP_SETSYNCRO _SIO ('P', 21)
-#define SNDCTL_DSP_SETDUPLEX _SIO ('P', 22)
-#define SNDCTL_DSP_GETODELAY _SIOR ('P', 23, int)
-
-#define SNDCTL_DSP_GETCHANNELMASK _SIOWR('P', 64, int)
-#define SNDCTL_DSP_BIND_CHANNEL _SIOWR('P', 65, int)
-# define DSP_BIND_QUERY 0x00000000
-# define DSP_BIND_FRONT 0x00000001
-# define DSP_BIND_SURR 0x00000002
-# define DSP_BIND_CENTER_LFE 0x00000004
-# define DSP_BIND_HANDSET 0x00000008
-# define DSP_BIND_MIC 0x00000010
-# define DSP_BIND_MODEM1 0x00000020
-# define DSP_BIND_MODEM2 0x00000040
-# define DSP_BIND_I2S 0x00000080
-# define DSP_BIND_SPDIF 0x00000100
-
-/*
- * Application's profile defines the way how playback underrun situations should be handled.
- *
- * APF_NORMAL (the default) and APF_NETWORK make the driver to cleanup the
- * playback buffer whenever an underrun occurs. This consumes some time
- * prevents looping the existing buffer.
- * APF_CPUINTENS is intended to be set by CPU intensive applications which
- * are likely to run out of time occasionally. In this mode the buffer cleanup is
- * disabled which saves CPU time but also let's the previous buffer content to
- * be played during the "pause" after the underrun.
- */
-#define SNDCTL_DSP_PROFILE _SIOW ('P', 23, int)
-#define APF_NORMAL 0 /* Normal applications */
-#define APF_NETWORK 1 /* Underruns probably caused by an "external" delay */
-#define APF_CPUINTENS 2 /* Underruns probably caused by "overheating" the CPU */
-
-#define SOUND_PCM_READ_RATE _SIOR ('P', 2, int)
-#define SOUND_PCM_READ_CHANNELS _SIOR ('P', 6, int)
-#define SOUND_PCM_READ_BITS _SIOR ('P', 5, int)
-#define SOUND_PCM_READ_FILTER _SIOR ('P', 7, int)
-
-/* Some alias names */
-#define SOUND_PCM_WRITE_BITS SNDCTL_DSP_SETFMT
-#define SOUND_PCM_WRITE_RATE SNDCTL_DSP_SPEED
-#define SOUND_PCM_POST SNDCTL_DSP_POST
-#define SOUND_PCM_RESET SNDCTL_DSP_RESET
-#define SOUND_PCM_SYNC SNDCTL_DSP_SYNC
-#define SOUND_PCM_SUBDIVIDE SNDCTL_DSP_SUBDIVIDE
-#define SOUND_PCM_SETFRAGMENT SNDCTL_DSP_SETFRAGMENT
-#define SOUND_PCM_GETFMTS SNDCTL_DSP_GETFMTS
-#define SOUND_PCM_SETFMT SNDCTL_DSP_SETFMT
-#define SOUND_PCM_GETOSPACE SNDCTL_DSP_GETOSPACE
-#define SOUND_PCM_GETISPACE SNDCTL_DSP_GETISPACE
-#define SOUND_PCM_NONBLOCK SNDCTL_DSP_NONBLOCK
-#define SOUND_PCM_GETCAPS SNDCTL_DSP_GETCAPS
-#define SOUND_PCM_GETTRIGGER SNDCTL_DSP_GETTRIGGER
-#define SOUND_PCM_SETTRIGGER SNDCTL_DSP_SETTRIGGER
-#define SOUND_PCM_SETSYNCRO SNDCTL_DSP_SETSYNCRO
-#define SOUND_PCM_GETIPTR SNDCTL_DSP_GETIPTR
-#define SOUND_PCM_GETOPTR SNDCTL_DSP_GETOPTR
-#define SOUND_PCM_MAPINBUF SNDCTL_DSP_MAPINBUF
-#define SOUND_PCM_MAPOUTBUF SNDCTL_DSP_MAPOUTBUF
-
-/*
- * ioctl calls to be used in communication with coprocessors and
- * DSP chips.
- */
-
-typedef struct copr_buffer {
- int command; /* Set to 0 if not used */
- int flags;
-#define CPF_NONE 0x0000
-#define CPF_FIRST 0x0001 /* First block */
-#define CPF_LAST 0x0002 /* Last block */
- int len;
- int offs; /* If required by the device (0 if not used) */
-
- unsigned char data[4000]; /* NOTE! 4000 is not 4k */
- } copr_buffer;
-
-typedef struct copr_debug_buf {
- int command; /* Used internally. Set to 0 */
- int parm1;
- int parm2;
- int flags;
- int len; /* Length of data in bytes */
- } copr_debug_buf;
-
-typedef struct copr_msg {
- int len;
- unsigned char data[4000];
- } copr_msg;
-
-#define SNDCTL_COPR_RESET _SIO ('C', 0)
-#define SNDCTL_COPR_LOAD _SIOWR('C', 1, copr_buffer)
-#define SNDCTL_COPR_RDATA _SIOWR('C', 2, copr_debug_buf)
-#define SNDCTL_COPR_RCODE _SIOWR('C', 3, copr_debug_buf)
-#define SNDCTL_COPR_WDATA _SIOW ('C', 4, copr_debug_buf)
-#define SNDCTL_COPR_WCODE _SIOW ('C', 5, copr_debug_buf)
-#define SNDCTL_COPR_RUN _SIOWR('C', 6, copr_debug_buf)
-#define SNDCTL_COPR_HALT _SIOWR('C', 7, copr_debug_buf)
-#define SNDCTL_COPR_SENDMSG _SIOWR('C', 8, copr_msg)
-#define SNDCTL_COPR_RCVMSG _SIOR ('C', 9, copr_msg)
-
-/*********************************************
- * IOCTL commands for /dev/mixer
- */
-
-/*
- * Mixer devices
- *
- * There can be up to 20 different analog mixer channels. The
- * SOUND_MIXER_NRDEVICES gives the currently supported maximum.
- * The SOUND_MIXER_READ_DEVMASK returns a bitmask which tells
- * the devices supported by the particular mixer.
- */
-
-#define SOUND_MIXER_NRDEVICES 25
-#define SOUND_MIXER_VOLUME 0
-#define SOUND_MIXER_BASS 1
-#define SOUND_MIXER_TREBLE 2
-#define SOUND_MIXER_SYNTH 3
-#define SOUND_MIXER_PCM 4
-#define SOUND_MIXER_SPEAKER 5
-#define SOUND_MIXER_LINE 6
-#define SOUND_MIXER_MIC 7
-#define SOUND_MIXER_CD 8
-#define SOUND_MIXER_IMIX 9 /* Recording monitor */
-#define SOUND_MIXER_ALTPCM 10
-#define SOUND_MIXER_RECLEV 11 /* Recording level */
-#define SOUND_MIXER_IGAIN 12 /* Input gain */
-#define SOUND_MIXER_OGAIN 13 /* Output gain */
-/*
- * The AD1848 codec and compatibles have three line level inputs
- * (line, aux1 and aux2). Since each card manufacturer have assigned
- * different meanings to these inputs, it's inpractical to assign
- * specific meanings (line, cd, synth etc.) to them.
- */
-#define SOUND_MIXER_LINE1 14 /* Input source 1 (aux1) */
-#define SOUND_MIXER_LINE2 15 /* Input source 2 (aux2) */
-#define SOUND_MIXER_LINE3 16 /* Input source 3 (line) */
-#define SOUND_MIXER_DIGITAL1 17 /* Digital (input) 1 */
-#define SOUND_MIXER_DIGITAL2 18 /* Digital (input) 2 */
-#define SOUND_MIXER_DIGITAL3 19 /* Digital (input) 3 */
-#define SOUND_MIXER_PHONEIN 20 /* Phone input */
-#define SOUND_MIXER_PHONEOUT 21 /* Phone output */
-#define SOUND_MIXER_VIDEO 22 /* Video/TV (audio) in */
-#define SOUND_MIXER_RADIO 23 /* Radio in */
-#define SOUND_MIXER_MONITOR 24 /* Monitor (usually mic) volume */
-
-/* Some on/off settings (SOUND_SPECIAL_MIN - SOUND_SPECIAL_MAX) */
-/* Not counted to SOUND_MIXER_NRDEVICES, but use the same number space */
-#define SOUND_ONOFF_MIN 28
-#define SOUND_ONOFF_MAX 30
-
-/* Note! Number 31 cannot be used since the sign bit is reserved */
-#define SOUND_MIXER_NONE 31
-
-/*
- * The following unsupported macros are no longer functional.
- * Use SOUND_MIXER_PRIVATE# macros in future.
- */
-#define SOUND_MIXER_ENHANCE SOUND_MIXER_NONE
-#define SOUND_MIXER_MUTE SOUND_MIXER_NONE
-#define SOUND_MIXER_LOUD SOUND_MIXER_NONE
-
-
-#define SOUND_DEVICE_LABELS {"Vol ", "Bass ", "Trebl", "Synth", "Pcm ", "Spkr ", "Line ", \
- "Mic ", "CD ", "Mix ", "Pcm2 ", "Rec ", "IGain", "OGain", \
- "Line1", "Line2", "Line3", "Digital1", "Digital2", "Digital3", \
- "PhoneIn", "PhoneOut", "Video", "Radio", "Monitor"}
-
-#define SOUND_DEVICE_NAMES {"vol", "bass", "treble", "synth", "pcm", "speaker", "line", \
- "mic", "cd", "mix", "pcm2", "rec", "igain", "ogain", \
- "line1", "line2", "line3", "dig1", "dig2", "dig3", \
- "phin", "phout", "video", "radio", "monitor"}
-
-/* Device bitmask identifiers */
-
-#define SOUND_MIXER_RECSRC 0xff /* Arg contains a bit for each recording source */
-#define SOUND_MIXER_DEVMASK 0xfe /* Arg contains a bit for each supported device */
-#define SOUND_MIXER_RECMASK 0xfd /* Arg contains a bit for each supported recording source */
-#define SOUND_MIXER_CAPS 0xfc
-# define SOUND_CAP_EXCL_INPUT 0x00000001 /* Only one recording source at a time */
-#define SOUND_MIXER_STEREODEVS 0xfb /* Mixer channels supporting stereo */
-#define SOUND_MIXER_OUTSRC 0xfa /* Arg contains a bit for each input source to output */
-#define SOUND_MIXER_OUTMASK 0xf9 /* Arg contains a bit for each supported input source to output */
-
-/* Device mask bits */
-
-#define SOUND_MASK_VOLUME (1 << SOUND_MIXER_VOLUME)
-#define SOUND_MASK_BASS (1 << SOUND_MIXER_BASS)
-#define SOUND_MASK_TREBLE (1 << SOUND_MIXER_TREBLE)
-#define SOUND_MASK_SYNTH (1 << SOUND_MIXER_SYNTH)
-#define SOUND_MASK_PCM (1 << SOUND_MIXER_PCM)
-#define SOUND_MASK_SPEAKER (1 << SOUND_MIXER_SPEAKER)
-#define SOUND_MASK_LINE (1 << SOUND_MIXER_LINE)
-#define SOUND_MASK_MIC (1 << SOUND_MIXER_MIC)
-#define SOUND_MASK_CD (1 << SOUND_MIXER_CD)
-#define SOUND_MASK_IMIX (1 << SOUND_MIXER_IMIX)
-#define SOUND_MASK_ALTPCM (1 << SOUND_MIXER_ALTPCM)
-#define SOUND_MASK_RECLEV (1 << SOUND_MIXER_RECLEV)
-#define SOUND_MASK_IGAIN (1 << SOUND_MIXER_IGAIN)
-#define SOUND_MASK_OGAIN (1 << SOUND_MIXER_OGAIN)
-#define SOUND_MASK_LINE1 (1 << SOUND_MIXER_LINE1)
-#define SOUND_MASK_LINE2 (1 << SOUND_MIXER_LINE2)
-#define SOUND_MASK_LINE3 (1 << SOUND_MIXER_LINE3)
-#define SOUND_MASK_DIGITAL1 (1 << SOUND_MIXER_DIGITAL1)
-#define SOUND_MASK_DIGITAL2 (1 << SOUND_MIXER_DIGITAL2)
-#define SOUND_MASK_DIGITAL3 (1 << SOUND_MIXER_DIGITAL3)
-#define SOUND_MASK_PHONEIN (1 << SOUND_MIXER_PHONEIN)
-#define SOUND_MASK_PHONEOUT (1 << SOUND_MIXER_PHONEOUT)
-#define SOUND_MASK_RADIO (1 << SOUND_MIXER_RADIO)
-#define SOUND_MASK_VIDEO (1 << SOUND_MIXER_VIDEO)
-#define SOUND_MASK_MONITOR (1 << SOUND_MIXER_MONITOR)
-
-/* Obsolete macros */
-#define SOUND_MASK_MUTE (1 << SOUND_MIXER_MUTE)
-#define SOUND_MASK_ENHANCE (1 << SOUND_MIXER_ENHANCE)
-#define SOUND_MASK_LOUD (1 << SOUND_MIXER_LOUD)
-
-#define MIXER_READ(dev) _SIOR('M', dev, int)
-#define SOUND_MIXER_READ_VOLUME MIXER_READ(SOUND_MIXER_VOLUME)
-#define SOUND_MIXER_READ_BASS MIXER_READ(SOUND_MIXER_BASS)
-#define SOUND_MIXER_READ_TREBLE MIXER_READ(SOUND_MIXER_TREBLE)
-#define SOUND_MIXER_READ_SYNTH MIXER_READ(SOUND_MIXER_SYNTH)
-#define SOUND_MIXER_READ_PCM MIXER_READ(SOUND_MIXER_PCM)
-#define SOUND_MIXER_READ_SPEAKER MIXER_READ(SOUND_MIXER_SPEAKER)
-#define SOUND_MIXER_READ_LINE MIXER_READ(SOUND_MIXER_LINE)
-#define SOUND_MIXER_READ_MIC MIXER_READ(SOUND_MIXER_MIC)
-#define SOUND_MIXER_READ_CD MIXER_READ(SOUND_MIXER_CD)
-#define SOUND_MIXER_READ_IMIX MIXER_READ(SOUND_MIXER_IMIX)
-#define SOUND_MIXER_READ_ALTPCM MIXER_READ(SOUND_MIXER_ALTPCM)
-#define SOUND_MIXER_READ_RECLEV MIXER_READ(SOUND_MIXER_RECLEV)
-#define SOUND_MIXER_READ_IGAIN MIXER_READ(SOUND_MIXER_IGAIN)
-#define SOUND_MIXER_READ_OGAIN MIXER_READ(SOUND_MIXER_OGAIN)
-#define SOUND_MIXER_READ_LINE1 MIXER_READ(SOUND_MIXER_LINE1)
-#define SOUND_MIXER_READ_LINE2 MIXER_READ(SOUND_MIXER_LINE2)
-#define SOUND_MIXER_READ_LINE3 MIXER_READ(SOUND_MIXER_LINE3)
-
-/* Obsolete macros */
-#define SOUND_MIXER_READ_MUTE MIXER_READ(SOUND_MIXER_MUTE)
-#define SOUND_MIXER_READ_ENHANCE MIXER_READ(SOUND_MIXER_ENHANCE)
-#define SOUND_MIXER_READ_LOUD MIXER_READ(SOUND_MIXER_LOUD)
-
-#define SOUND_MIXER_READ_RECSRC MIXER_READ(SOUND_MIXER_RECSRC)
-#define SOUND_MIXER_READ_DEVMASK MIXER_READ(SOUND_MIXER_DEVMASK)
-#define SOUND_MIXER_READ_RECMASK MIXER_READ(SOUND_MIXER_RECMASK)
-#define SOUND_MIXER_READ_STEREODEVS MIXER_READ(SOUND_MIXER_STEREODEVS)
-#define SOUND_MIXER_READ_CAPS MIXER_READ(SOUND_MIXER_CAPS)
-
-#define MIXER_WRITE(dev) _SIOWR('M', dev, int)
-#define SOUND_MIXER_WRITE_VOLUME MIXER_WRITE(SOUND_MIXER_VOLUME)
-#define SOUND_MIXER_WRITE_BASS MIXER_WRITE(SOUND_MIXER_BASS)
-#define SOUND_MIXER_WRITE_TREBLE MIXER_WRITE(SOUND_MIXER_TREBLE)
-#define SOUND_MIXER_WRITE_SYNTH MIXER_WRITE(SOUND_MIXER_SYNTH)
-#define SOUND_MIXER_WRITE_PCM MIXER_WRITE(SOUND_MIXER_PCM)
-#define SOUND_MIXER_WRITE_SPEAKER MIXER_WRITE(SOUND_MIXER_SPEAKER)
-#define SOUND_MIXER_WRITE_LINE MIXER_WRITE(SOUND_MIXER_LINE)
-#define SOUND_MIXER_WRITE_MIC MIXER_WRITE(SOUND_MIXER_MIC)
-#define SOUND_MIXER_WRITE_CD MIXER_WRITE(SOUND_MIXER_CD)
-#define SOUND_MIXER_WRITE_IMIX MIXER_WRITE(SOUND_MIXER_IMIX)
-#define SOUND_MIXER_WRITE_ALTPCM MIXER_WRITE(SOUND_MIXER_ALTPCM)
-#define SOUND_MIXER_WRITE_RECLEV MIXER_WRITE(SOUND_MIXER_RECLEV)
-#define SOUND_MIXER_WRITE_IGAIN MIXER_WRITE(SOUND_MIXER_IGAIN)
-#define SOUND_MIXER_WRITE_OGAIN MIXER_WRITE(SOUND_MIXER_OGAIN)
-#define SOUND_MIXER_WRITE_LINE1 MIXER_WRITE(SOUND_MIXER_LINE1)
-#define SOUND_MIXER_WRITE_LINE2 MIXER_WRITE(SOUND_MIXER_LINE2)
-#define SOUND_MIXER_WRITE_LINE3 MIXER_WRITE(SOUND_MIXER_LINE3)
-
-/* Obsolete macros */
-#define SOUND_MIXER_WRITE_MUTE MIXER_WRITE(SOUND_MIXER_MUTE)
-#define SOUND_MIXER_WRITE_ENHANCE MIXER_WRITE(SOUND_MIXER_ENHANCE)
-#define SOUND_MIXER_WRITE_LOUD MIXER_WRITE(SOUND_MIXER_LOUD)
-
-#define SOUND_MIXER_WRITE_RECSRC MIXER_WRITE(SOUND_MIXER_RECSRC)
-
-typedef struct mixer_info
-{
- char id[16];
- char name[32];
- int modify_counter;
- int fillers[10];
-} mixer_info;
-
-typedef struct _old_mixer_info /* Obsolete */
-{
- char id[16];
- char name[32];
-} _old_mixer_info;
-
-#define SOUND_MIXER_INFO _SIOR ('M', 101, mixer_info)
-#define SOUND_OLD_MIXER_INFO _SIOR ('M', 101, _old_mixer_info)
-
-/*
- * A mechanism for accessing "proprietary" mixer features. This method
- * permits passing 128 bytes of arbitrary data between a mixer application
- * and the mixer driver. Interpretation of the record is defined by
- * the particular mixer driver.
- */
-typedef unsigned char mixer_record[128];
-
-#define SOUND_MIXER_ACCESS _SIOWR('M', 102, mixer_record)
-
-/*
- * Two ioctls for special souncard function
- */
-#define SOUND_MIXER_AGC _SIOWR('M', 103, int)
-#define SOUND_MIXER_3DSE _SIOWR('M', 104, int)
-
-/*
- * The SOUND_MIXER_PRIVATE# commands can be redefined by low level drivers.
- * These features can be used when accessing device specific features.
- */
-#define SOUND_MIXER_PRIVATE1 _SIOWR('M', 111, int)
-#define SOUND_MIXER_PRIVATE2 _SIOWR('M', 112, int)
-#define SOUND_MIXER_PRIVATE3 _SIOWR('M', 113, int)
-#define SOUND_MIXER_PRIVATE4 _SIOWR('M', 114, int)
-#define SOUND_MIXER_PRIVATE5 _SIOWR('M', 115, int)
-
-/*
- * SOUND_MIXER_GETLEVELS and SOUND_MIXER_SETLEVELS calls can be used
- * for querying current mixer settings from the driver and for loading
- * default volume settings _prior_ activating the mixer (loading
- * doesn't affect current state of the mixer hardware). These calls
- * are for internal use only.
- */
-
-typedef struct mixer_vol_table {
- int num; /* Index to volume table */
- char name[32];
- int levels[32];
-} mixer_vol_table;
-
-#define SOUND_MIXER_GETLEVELS _SIOWR('M', 116, mixer_vol_table)
-#define SOUND_MIXER_SETLEVELS _SIOWR('M', 117, mixer_vol_table)
-
-/*
- * An ioctl for identifying the driver version. It will return value
- * of the SOUND_VERSION macro used when compiling the driver.
- * This call was introduced in OSS version 3.6 and it will not work
- * with earlier versions (returns EINVAL).
- */
-#define OSS_GETVERSION _SIOR ('M', 118, int)
-
-/*
- * Level 2 event types for /dev/sequencer
- */
-
-/*
- * The 4 most significant bits of byte 0 specify the class of
- * the event:
- *
- * 0x8X = system level events,
- * 0x9X = device/port specific events, event[1] = device/port,
- * The last 4 bits give the subtype:
- * 0x02 = Channel event (event[3] = chn).
- * 0x01 = note event (event[4] = note).
- * (0x01 is not used alone but always with bit 0x02).
- * event[2] = MIDI message code (0x80=note off etc.)
- *
- */
-
-#define EV_SEQ_LOCAL 0x80
-#define EV_TIMING 0x81
-#define EV_CHN_COMMON 0x92
-#define EV_CHN_VOICE 0x93
-#define EV_SYSEX 0x94
-/*
- * Event types 200 to 220 are reserved for application use.
- * These numbers will not be used by the driver.
- */
-
-/*
- * Events for event type EV_CHN_VOICE
- */
-
-#define MIDI_NOTEOFF 0x80
-#define MIDI_NOTEON 0x90
-#define MIDI_KEY_PRESSURE 0xA0
-
-/*
- * Events for event type EV_CHN_COMMON
- */
-
-#define MIDI_CTL_CHANGE 0xB0
-#define MIDI_PGM_CHANGE 0xC0
-#define MIDI_CHN_PRESSURE 0xD0
-#define MIDI_PITCH_BEND 0xE0
-
-#define MIDI_SYSTEM_PREFIX 0xF0
-
-/*
- * Timer event types
- */
-#define TMR_WAIT_REL 1 /* Time relative to the prev time */
-#define TMR_WAIT_ABS 2 /* Absolute time since TMR_START */
-#define TMR_STOP 3
-#define TMR_START 4
-#define TMR_CONTINUE 5
-#define TMR_TEMPO 6
-#define TMR_ECHO 8
-#define TMR_CLOCK 9 /* MIDI clock */
-#define TMR_SPP 10 /* Song position pointer */
-#define TMR_TIMESIG 11 /* Time signature */
-
-/*
- * Local event types
- */
-#define LOCL_STARTAUDIO 1
-
-#if (!defined(__KERNEL__) && !defined(KERNEL) && !defined(INKERNEL) && !defined(_KERNEL)) || defined(USE_SEQ_MACROS)
-/*
- * Some convenience macros to simplify programming of the
- * /dev/sequencer interface
- *
- * These macros define the API which should be used when possible.
- */
-#define SEQ_DECLAREBUF() SEQ_USE_EXTBUF()
-
-void seqbuf_dump(void); /* This function must be provided by programs */
-
-extern int OSS_init(int seqfd, int buflen);
-extern void OSS_seqbuf_dump(int fd, unsigned char *buf, int buflen);
-extern void OSS_seq_advbuf(int len, int fd, unsigned char *buf, int buflen);
-extern void OSS_seq_needbuf(int len, int fd, unsigned char *buf, int buflen);
-extern void OSS_patch_caching(int dev, int chn, int patch,
- int fd, unsigned char *buf, int buflen);
-extern void OSS_drum_caching(int dev, int chn, int patch,
- int fd, unsigned char *buf, int buflen);
-extern void OSS_write_patch(int fd, unsigned char *buf, int len);
-extern int OSS_write_patch2(int fd, unsigned char *buf, int len);
-
-#define SEQ_PM_DEFINES int __foo_bar___
-#ifdef OSSLIB
-# define SEQ_USE_EXTBUF() \
- extern unsigned char *_seqbuf; \
- extern int _seqbuflen;extern int _seqbufptr
-# define SEQ_DEFINEBUF(len) SEQ_USE_EXTBUF();static int _requested_seqbuflen=len
-# define _SEQ_ADVBUF(len) OSS_seq_advbuf(len, seqfd, _seqbuf, _seqbuflen)
-# define _SEQ_NEEDBUF(len) OSS_seq_needbuf(len, seqfd, _seqbuf, _seqbuflen)
-# define SEQ_DUMPBUF() OSS_seqbuf_dump(seqfd, _seqbuf, _seqbuflen)
-
-# define SEQ_LOAD_GMINSTR(dev, instr) \
- OSS_patch_caching(dev, -1, instr, seqfd, _seqbuf, _seqbuflen)
-# define SEQ_LOAD_GMDRUM(dev, drum) \
- OSS_drum_caching(dev, -1, drum, seqfd, _seqbuf, _seqbuflen)
-#else /* !OSSLIB */
-
-# define SEQ_LOAD_GMINSTR(dev, instr)
-# define SEQ_LOAD_GMDRUM(dev, drum)
-
-# define SEQ_USE_EXTBUF() \
- extern unsigned char _seqbuf[]; \
- extern int _seqbuflen;extern int _seqbufptr
-
-#ifndef USE_SIMPLE_MACROS
-/* Sample seqbuf_dump() implementation:
- *
- * SEQ_DEFINEBUF (2048); -- Defines a buffer for 2048 bytes
- *
- * int seqfd; -- The file descriptor for /dev/sequencer.
- *
- * void
- * seqbuf_dump ()
- * {
- * if (_seqbufptr)
- * if (write (seqfd, _seqbuf, _seqbufptr) == -1)
- * {
- * perror ("write /dev/sequencer");
- * exit (-1);
- * }
- * _seqbufptr = 0;
- * }
- */
-
-#define SEQ_DEFINEBUF(len) unsigned char _seqbuf[len]; int _seqbuflen = len;int _seqbufptr = 0
-#define _SEQ_NEEDBUF(len) if ((_seqbufptr+(len)) > _seqbuflen) seqbuf_dump()
-#define _SEQ_ADVBUF(len) _seqbufptr += len
-#define SEQ_DUMPBUF seqbuf_dump
-#else
-/*
- * This variation of the sequencer macros is used just to format one event
- * using fixed buffer.
- *
- * The program using the macro library must define the following macros before
- * using this library.
- *
- * #define _seqbuf name of the buffer (unsigned char[])
- * #define _SEQ_ADVBUF(len) If the applic needs to know the exact
- * size of the event, this macro can be used.
- * Otherwise this must be defined as empty.
- * #define _seqbufptr Define the name of index variable or 0 if
- * not required.
- */
-#define _SEQ_NEEDBUF(len) /* empty */
-#endif
-#endif /* !OSSLIB */
-
-#define SEQ_VOLUME_MODE(dev, mode) {_SEQ_NEEDBUF(8);\
- _seqbuf[_seqbufptr] = SEQ_EXTENDED;\
- _seqbuf[_seqbufptr+1] = SEQ_VOLMODE;\
- _seqbuf[_seqbufptr+2] = (dev);\
- _seqbuf[_seqbufptr+3] = (mode);\
- _seqbuf[_seqbufptr+4] = 0;\
- _seqbuf[_seqbufptr+5] = 0;\
- _seqbuf[_seqbufptr+6] = 0;\
- _seqbuf[_seqbufptr+7] = 0;\
- _SEQ_ADVBUF(8);}
-
-/*
- * Midi voice messages
- */
-
-#define _CHN_VOICE(dev, event, chn, note, parm) \
- {_SEQ_NEEDBUF(8);\
- _seqbuf[_seqbufptr] = EV_CHN_VOICE;\
- _seqbuf[_seqbufptr+1] = (dev);\
- _seqbuf[_seqbufptr+2] = (event);\
- _seqbuf[_seqbufptr+3] = (chn);\
- _seqbuf[_seqbufptr+4] = (note);\
- _seqbuf[_seqbufptr+5] = (parm);\
- _seqbuf[_seqbufptr+6] = (0);\
- _seqbuf[_seqbufptr+7] = 0;\
- _SEQ_ADVBUF(8);}
-
-#define SEQ_START_NOTE(dev, chn, note, vol) \
- _CHN_VOICE(dev, MIDI_NOTEON, chn, note, vol)
-
-#define SEQ_STOP_NOTE(dev, chn, note, vol) \
- _CHN_VOICE(dev, MIDI_NOTEOFF, chn, note, vol)
-
-#define SEQ_KEY_PRESSURE(dev, chn, note, pressure) \
- _CHN_VOICE(dev, MIDI_KEY_PRESSURE, chn, note, pressure)
-
-/*
- * Midi channel messages
- */
-
-#define _CHN_COMMON(dev, event, chn, p1, p2, w14) \
- {_SEQ_NEEDBUF(8);\
- _seqbuf[_seqbufptr] = EV_CHN_COMMON;\
- _seqbuf[_seqbufptr+1] = (dev);\
- _seqbuf[_seqbufptr+2] = (event);\
- _seqbuf[_seqbufptr+3] = (chn);\
- _seqbuf[_seqbufptr+4] = (p1);\
- _seqbuf[_seqbufptr+5] = (p2);\
- *(short *)&_seqbuf[_seqbufptr+6] = (w14);\
- _SEQ_ADVBUF(8);}
-/*
- * SEQ_SYSEX permits sending of sysex messages. (It may look that it permits
- * sending any MIDI bytes but it's absolutely not possible. Trying to do
- * so _will_ cause problems with MPU401 intelligent mode).
- *
- * Sysex messages are sent in blocks of 1 to 6 bytes. Longer messages must be
- * sent by calling SEQ_SYSEX() several times (there must be no other events
- * between them). First sysex fragment must have 0xf0 in the first byte
- * and the last byte (buf[len-1] of the last fragment must be 0xf7. No byte
- * between these sysex start and end markers cannot be larger than 0x7f. Also
- * lengths of each fragments (except the last one) must be 6.
- *
- * Breaking the above rules may work with some MIDI ports but is likely to
- * cause fatal problems with some other devices (such as MPU401).
- */
-#define SEQ_SYSEX(dev, buf, len) \
- {int ii, ll=(len); \
- unsigned char *bufp=buf;\
- if (ll>6)ll=6;\
- _SEQ_NEEDBUF(8);\
- _seqbuf[_seqbufptr] = EV_SYSEX;\
- _seqbuf[_seqbufptr+1] = (dev);\
- for(ii=0;ii<ll;ii++)\
- _seqbuf[_seqbufptr+ii+2] = bufp[ii];\
- for(ii=ll;ii<6;ii++)\
- _seqbuf[_seqbufptr+ii+2] = 0xff;\
- _SEQ_ADVBUF(8);}
-
-#define SEQ_CHN_PRESSURE(dev, chn, pressure) \
- _CHN_COMMON(dev, MIDI_CHN_PRESSURE, chn, pressure, 0, 0)
-
-#define SEQ_SET_PATCH SEQ_PGM_CHANGE
-#ifdef OSSLIB
-# define SEQ_PGM_CHANGE(dev, chn, patch) \
- {OSS_patch_caching(dev, chn, patch, seqfd, _seqbuf, _seqbuflen); \
- _CHN_COMMON(dev, MIDI_PGM_CHANGE, chn, patch, 0, 0);}
-#else
-# define SEQ_PGM_CHANGE(dev, chn, patch) \
- _CHN_COMMON(dev, MIDI_PGM_CHANGE, chn, patch, 0, 0)
-#endif
-
-#define SEQ_CONTROL(dev, chn, controller, value) \
- _CHN_COMMON(dev, MIDI_CTL_CHANGE, chn, controller, 0, value)
-
-#define SEQ_BENDER(dev, chn, value) \
- _CHN_COMMON(dev, MIDI_PITCH_BEND, chn, 0, 0, value)
-
-
-#define SEQ_V2_X_CONTROL(dev, voice, controller, value) {_SEQ_NEEDBUF(8);\
- _seqbuf[_seqbufptr] = SEQ_EXTENDED;\
- _seqbuf[_seqbufptr+1] = SEQ_CONTROLLER;\
- _seqbuf[_seqbufptr+2] = (dev);\
- _seqbuf[_seqbufptr+3] = (voice);\
- _seqbuf[_seqbufptr+4] = (controller);\
- _seqbuf[_seqbufptr+5] = ((value)&0xff);\
- _seqbuf[_seqbufptr+6] = ((value>>8)&0xff);\
- _seqbuf[_seqbufptr+7] = 0;\
- _SEQ_ADVBUF(8);}
-/*
- * The following 5 macros are incorrectly implemented and obsolete.
- * Use SEQ_BENDER and SEQ_CONTROL (with proper controller) instead.
- */
-#define SEQ_PITCHBEND(dev, voice, value) SEQ_V2_X_CONTROL(dev, voice, CTRL_PITCH_BENDER, value)
-#define SEQ_BENDER_RANGE(dev, voice, value) SEQ_V2_X_CONTROL(dev, voice, CTRL_PITCH_BENDER_RANGE, value)
-#define SEQ_EXPRESSION(dev, voice, value) SEQ_CONTROL(dev, voice, CTL_EXPRESSION, value*128)
-#define SEQ_MAIN_VOLUME(dev, voice, value) SEQ_CONTROL(dev, voice, CTL_MAIN_VOLUME, (value*16383)/100)
-#define SEQ_PANNING(dev, voice, pos) SEQ_CONTROL(dev, voice, CTL_PAN, (pos+128) / 2)
-
-/*
- * Timing and syncronization macros
- */
-
-#define _TIMER_EVENT(ev, parm) {_SEQ_NEEDBUF(8);\
- _seqbuf[_seqbufptr+0] = EV_TIMING; \
- _seqbuf[_seqbufptr+1] = (ev); \
- _seqbuf[_seqbufptr+2] = 0;\
- _seqbuf[_seqbufptr+3] = 0;\
- *(unsigned int *)&_seqbuf[_seqbufptr+4] = (parm); \
- _SEQ_ADVBUF(8);}
-
-#define SEQ_START_TIMER() _TIMER_EVENT(TMR_START, 0)
-#define SEQ_STOP_TIMER() _TIMER_EVENT(TMR_STOP, 0)
-#define SEQ_CONTINUE_TIMER() _TIMER_EVENT(TMR_CONTINUE, 0)
-#define SEQ_WAIT_TIME(ticks) _TIMER_EVENT(TMR_WAIT_ABS, ticks)
-#define SEQ_DELTA_TIME(ticks) _TIMER_EVENT(TMR_WAIT_REL, ticks)
-#define SEQ_ECHO_BACK(key) _TIMER_EVENT(TMR_ECHO, key)
-#define SEQ_SET_TEMPO(value) _TIMER_EVENT(TMR_TEMPO, value)
-#define SEQ_SONGPOS(pos) _TIMER_EVENT(TMR_SPP, pos)
-#define SEQ_TIME_SIGNATURE(sig) _TIMER_EVENT(TMR_TIMESIG, sig)
-
-/*
- * Local control events
- */
-
-#define _LOCAL_EVENT(ev, parm) {_SEQ_NEEDBUF(8);\
- _seqbuf[_seqbufptr+0] = EV_SEQ_LOCAL; \
- _seqbuf[_seqbufptr+1] = (ev); \
- _seqbuf[_seqbufptr+2] = 0;\
- _seqbuf[_seqbufptr+3] = 0;\
- *(unsigned int *)&_seqbuf[_seqbufptr+4] = (parm); \
- _SEQ_ADVBUF(8);}
-
-#define SEQ_PLAYAUDIO(devmask) _LOCAL_EVENT(LOCL_STARTAUDIO, devmask)
-/*
- * Events for the level 1 interface only
- */
-
-#define SEQ_MIDIOUT(device, byte) {_SEQ_NEEDBUF(4);\
- _seqbuf[_seqbufptr] = SEQ_MIDIPUTC;\
- _seqbuf[_seqbufptr+1] = (byte);\
- _seqbuf[_seqbufptr+2] = (device);\
- _seqbuf[_seqbufptr+3] = 0;\
- _SEQ_ADVBUF(4);}
-
-/*
- * Patch loading.
- */
-#ifdef OSSLIB
-# define SEQ_WRPATCH(patchx, len) \
- OSS_write_patch(seqfd, (char*)(patchx), len)
-# define SEQ_WRPATCH2(patchx, len) \
- OSS_write_patch2(seqfd, (char*)(patchx), len)
-#else
-# define SEQ_WRPATCH(patchx, len) \
- {if (_seqbufptr) SEQ_DUMPBUF();\
- if (write(seqfd, (char*)(patchx), len)==-1) \
- perror("Write patch: /dev/sequencer");}
-# define SEQ_WRPATCH2(patchx, len) \
- (SEQ_DUMPBUF(), write(seqfd, (char*)(patchx), len))
-#endif
-
-#endif
-#endif
diff --git a/winsup/cygwin/include/sys/statfs.h b/winsup/cygwin/include/sys/statfs.h
deleted file mode 100644
index 51ad3c6b1..000000000
--- a/winsup/cygwin/include/sys/statfs.h
+++ /dev/null
@@ -1,11 +0,0 @@
-/* sys/statfs.h
-
- Copyright 2002 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include <sys/vfs.h>
diff --git a/winsup/cygwin/include/sys/statvfs.h b/winsup/cygwin/include/sys/statvfs.h
deleted file mode 100644
index aa86674af..000000000
--- a/winsup/cygwin/include/sys/statvfs.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/* sys/statvfs.h
-
- Copyright 2005 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _SYS_STATVFS_H_
-#define _SYS_STATVFS_H_
-
-#include <sys/types.h>
-
-#define ST_RDONLY 0x80000 /* equals FILE_READ_ONLY_VOLUME */
-#define ST_NOSUID 0 /* Looking for that bit should always fail. */
-
-struct statvfs {
- unsigned long f_bsize; /* file system block size */
- unsigned long f_frsize; /* fragment size */
- fsblkcnt_t f_blocks; /* size of fs in f_frsize units */
- fsblkcnt_t f_bfree; /* free blocks in fs */
- fsblkcnt_t f_bavail; /* free blocks avail to non-superuser */
- fsfilcnt_t f_files; /* total file nodes in file system */
- fsfilcnt_t f_ffree; /* free file nodes in fs */
- fsfilcnt_t f_favail; /* avail file nodes in fs */
- unsigned long f_fsid; /* file system id */
- unsigned long f_flag; /* mount flags */
- unsigned long f_namemax; /* maximum length of filenames */
-};
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-int statvfs (const char *__path, struct statvfs *__buf);
-int fstatvfs (int __fd, struct statvfs *__buf);
-
-#ifdef __cplusplus
-};
-#endif /* __cplusplus */
-
-#endif /*_SYS_STATVFS_H_*/
diff --git a/winsup/cygwin/include/sys/stdio.h b/winsup/cygwin/include/sys/stdio.h
deleted file mode 100644
index 6664a0b33..000000000
--- a/winsup/cygwin/include/sys/stdio.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/* sys/stdio.h
-
- Copyright 2004, 2005, 2006, 2007, 2008, 2010 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _SYS_STDIO_H_
-#define _SYS_STDIO_H_
-
-#include <sys/cdefs.h>
-#include <sys/lock.h>
-
-/* These definitions should be kept in sync with those in the newlib
- header of the same name (newlib/libc/include/sys/stdio.h). */
-
-#if !defined(__SINGLE_THREAD__)
-# if !defined(_flockfile)
-# define _flockfile(fp) ({ if (!((fp)->_flags & __SSTR)) \
- __cygwin_lock_lock ((_LOCK_T *)&(fp)->_lock); })
-# endif
-# if !defined(_ftrylockfile)
-# define _ftrylockfile(fp) (((fp)->_flags & __SSTR) ? 0 : \
- __cygwin_lock_trylock ((_LOCK_T *)&(fp)->_lock))
-# endif
-# if !defined(_funlockfile)
-# define _funlockfile(fp) ({ if (!((fp)->_flags & __SSTR)) \
- __cygwin_lock_unlock ((_LOCK_T *)&(fp)->_lock); })
-# endif
-#endif
-
-__BEGIN_DECLS
-
-ssize_t _EXFUN(getline, (char **, size_t *, FILE *));
-ssize_t _EXFUN(getdelim, (char **, size_t *, int, FILE *));
-
-__END_DECLS
-
-#endif
diff --git a/winsup/cygwin/include/sys/strace.h b/winsup/cygwin/include/sys/strace.h
deleted file mode 100644
index eacd3f113..000000000
--- a/winsup/cygwin/include/sys/strace.h
+++ /dev/null
@@ -1,147 +0,0 @@
-/* sys/strace.h
-
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008,
- 2010, 2011, 2012, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-/* This file contains routines for tracing system calls and other internal
- phenomenon.
-
- When tracing system calls, try to use the same style throughout:
-
- result = syscall (arg1, arg2, arg3) [optional extra stuff]
-
- If a system call can block (eg: read, write, wait), print another message
- before hanging so the user will know why the program has stopped.
-
- Note: __seterrno will also print a trace message. Have that printed
- *first*. This will make it easy to always know what __seterrno is
- refering to. For the same reason, try not to have __seterrno messages
- printed alone.
-*/
-
-#ifndef _SYS_STRACE_H
-#define _SYS_STRACE_H
-
-#include <stdarg.h>
-#include <sys/types.h>
-
-#ifdef __cplusplus
-
-class child_info;
-class strace
-{
- int vsprntf (char *buf, const char *func, const char *infmt, va_list ap);
- void write (unsigned category, const char *buf, int count);
- unsigned char _active;
-public:
- void activate (bool) __attribute__ ((__regparm__ (2)));;
- strace () {}
- int microseconds ();
- int version;
- int lmicrosec;
- bool execing;
- void dll_info () __attribute__ ((__regparm__ (1)));
- void prntf (unsigned, const char *func, const char *, ...) /*__attribute__ ((__regparm__(3)))*/;
- void vprntf (unsigned, const char *func, const char *, va_list ap) /*__attribute__ ((__regparm__(3)))*/;
- void wm (int message, int word, int lon) __attribute__ ((__regparm__(3)));
- void write_childpid (pid_t) __attribute__ ((__regparm__ (3)));
- bool attached () const {return _active == 3;}
- bool active () const {return _active & 1;}
- unsigned char& active_val () {return _active;}
-};
-
-extern strace strace;
-
-#endif /* __cplusplus */
-
-#define _STRACE_INTERFACE_ACTIVATE_ADDR -1
-#define _STRACE_INTERFACE_ACTIVATE_ADDR1 -2
-#define _STRACE_CHILD_PID -3
-
-/* Bitmasks of tracing messages to print. */
-
-#define _STRACE_ALL 0x000001 // so behaviour of strace=1 is unchanged
-#define _STRACE_FLUSH 0x000002 // flush output buffer after every message
-#define _STRACE_INHERIT 0x000004 // children inherit mask from parent
-#define _STRACE_UHOH 0x000008 // unusual or weird phenomenon
-#define _STRACE_SYSCALL 0x000010 // system calls
-#define _STRACE_STARTUP 0x000020 // argc/envp printout at startup
-#define _STRACE_DEBUG 0x000040 // info to help debugging
-#define _STRACE_PARANOID 0x000080 // paranoid info
-#define _STRACE_TERMIOS 0x000100 // info for debugging termios stuff
-#define _STRACE_SELECT 0x000200 // info on ugly select internals
-#define _STRACE_WM 0x000400 // trace windows messages (enable _strace_wm)
-#define _STRACE_SIGP 0x000800 // trace signal and process handling
-#define _STRACE_MINIMAL 0x001000 // very minimal strace output
-#define _STRACE_PTHREAD 0x002000 // pthread calls
-#define _STRACE_EXITDUMP 0x004000 // dump strace cache on exit
-#define _STRACE_SYSTEM 0x008000 // cache strace messages
-#define _STRACE_NOMUTEX 0x010000 // don't use mutex for synchronization
-#define _STRACE_MALLOC 0x020000 // trace malloc calls
-#define _STRACE_THREAD 0x040000 // cygthread calls
-#define _STRACE_NOTALL 0x080000 // don't include if _STRACE_ALL
-#define _STRACE_SPECIAL 0x100000 // special case, only for debugging - do not check in
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-void small_printf (const char *, ...);
-void strace_printf (unsigned, const char *func, const char *, ...);
-
-#ifdef __cplusplus
-}
-#endif
-
-#ifdef __cplusplus
-
-#ifdef NOSTRACE
-#define strace_printf_wrap(what, fmt, args...)
-#define strace_printf_wrap1(what, fmt, args...)
-#else
-#define strace_printf_wrap(what, fmt, args...) \
- ((void) ({\
- if ((_STRACE_ ## what & _STRACE_SYSTEM) || strace.active ()) \
- strace.prntf(_STRACE_ ## what, __PRETTY_FUNCTION__, fmt, ## args); \
- 0; \
- }))
-#define strace_printf_wrap1(what, fmt, args...) \
- ((void) ({\
- if ((_STRACE_ ## what & _STRACE_SYSTEM) || strace.active ()) \
- strace.prntf((_STRACE_ ## what) | _STRACE_NOTALL, __PRETTY_FUNCTION__, fmt, ## args); \
- 0; \
- }))
-#define strace_vprintf(what, fmt, arg) \
- ((void) ({\
- if ((_STRACE_ ## what & _STRACE_SYSTEM) || strace.active ()) \
- strace.vprntf((_STRACE_ ## what), __PRETTY_FUNCTION__, fmt, arg); \
- 0; \
- }))
-#endif /*NOSTRACE*/
-
-#ifdef DEBUGGING
-#define debug_only_printf(fmt, args...) debug_printf (fmt , ## args)
-#else
-#define debug_only_printf(fmt, args...) do {} while (0)
-#endif
-#define debug_printf(fmt, args...) strace_printf_wrap(DEBUG, fmt , ## args)
-#define malloc_printf(fmt, args...) strace_printf_wrap1(MALLOC, fmt , ## args)
-#define minimal_printf(fmt, args...) strace_printf_wrap1(MINIMAL, fmt , ## args)
-#define paranoid_printf(fmt, args...) strace_printf_wrap1(PARANOID, fmt , ## args)
-#define pthread_printf(fmt, args...) strace_printf_wrap1(PTHREAD, fmt , ## args)
-#define select_printf(fmt, args...) strace_printf_wrap(SELECT, fmt , ## args)
-#define sigproc_printf(fmt, args...) strace_printf_wrap(SIGP, fmt , ## args)
-#define syscall_printf(fmt, args...) strace_printf_wrap(SYSCALL, fmt , ## args)
-#define system_printf(fmt, args...) strace_printf_wrap(SYSTEM, fmt , ## args)
-#define termios_printf(fmt, args...) strace_printf_wrap(TERMIOS, fmt , ## args)
-#define thread_printf(fmt, args...) strace_printf_wrap1(THREAD, fmt , ## args)
-#define special_printf(fmt, args...) strace_printf_wrap1(SPECIAL, fmt , ## args)
-#define wm_printf(fmt, args...) strace_printf_wrap(WM, fmt , ## args)
-#endif /* __cplusplus */
-#endif /* _SYS_STRACE_H */
diff --git a/winsup/cygwin/include/sys/sysinfo.h b/winsup/cygwin/include/sys/sysinfo.h
deleted file mode 100644
index 32fa05bd1..000000000
--- a/winsup/cygwin/include/sys/sysinfo.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/* sys/sysinfo.h
-
- Copyright 2009, 2011, 2013 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-/* sys/sysinfo.h header file for Cygwin. */
-
-#ifndef _SYS_SYSINFO_H
-#define _SYS_SYSINFO_H
-
-#include <sys/cdefs.h>
-
-__BEGIN_DECLS
-
-struct sysinfo {
- long uptime; /* Seconds since boot */
- unsigned long loads[3]; /* 1, 5, and 15 minute load averages */
- unsigned long totalram; /* Total usable main memory size */
- unsigned long freeram; /* Available memory size */
- unsigned long sharedram; /* Amount of shared memory */
- unsigned long bufferram; /* Memory used by buffers */
- unsigned long totalswap; /* Total swap space size */
- unsigned long freeswap; /* swap space still available */
- unsigned short procs; /* Number of current processes */
- unsigned long totalhigh; /* Total high memory size */
- unsigned long freehigh; /* Available high memory size */
- unsigned int mem_unit; /* Memory unit size in bytes */
- char __f[10]; /* Pads structure to 64 bytes */
-};
-
-extern int sysinfo (struct sysinfo *);
-extern int get_nprocs_conf (void);
-extern int get_nprocs (void);
-extern long get_phys_pages (void);
-extern long get_avphys_pages (void);
-
-__END_DECLS
-
-#endif /* _SYS_SYSINFO_H */
diff --git a/winsup/cygwin/include/sys/syslimits.h b/winsup/cygwin/include/sys/syslimits.h
deleted file mode 100644
index b501de81e..000000000
--- a/winsup/cygwin/include/sys/syslimits.h
+++ /dev/null
@@ -1,20 +0,0 @@
-/* sys/syslimits.h
-
- Copyright 2006 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _SYS_SYSLIMITS_H
-#define _SYS_SYSLIMITS_H
-
-#ifdef _COMPILING_NEWLIB
-# include <limits.h>
-#else
-# error "Do not include sys/syslimits.h from applications directly."
-#endif
-
-#endif /*_SYS_SYSLIMITS_H */
diff --git a/winsup/cygwin/include/sys/syslog.h b/winsup/cygwin/include/sys/syslog.h
deleted file mode 100644
index b88bb8dd8..000000000
--- a/winsup/cygwin/include/sys/syslog.h
+++ /dev/null
@@ -1,143 +0,0 @@
-/* sys/syslog.h
-
- Copyright 1996, 1998, 2000, 2001, 2003, 2005 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _SYS_LOG_H
-#define _SYS_LOG_H
-
-#include <sys/cdefs.h>
-#include <stdarg.h>
-
-#define _PATH_LOG "/dev/log"
-#define _PATH_KLOG "/dev/kmsg"
-
-#define LOG_EMERG 0
-#define LOG_ALERT 1
-#define LOG_CRIT 2
-#define LOG_ERR 3
-#define LOG_WARNING 4
-#define LOG_NOTICE 5
-#define LOG_INFO 6
-#define LOG_DEBUG 7
-
-#define LOG_PRIMASK 0x07
-
-#define LOG_PRI(p) ((p) & LOG_PRIMASK)
-#define LOG_MAKEPRI(fac, pri) (((fac) << 3) | (pri))
-
-#define LOG_KERN (0<<3)
-#define LOG_USER (1<<3)
-#define LOG_MAIL (2<<3)
-#define LOG_DAEMON (3<<3)
-#define LOG_AUTH (4<<3)
-#define LOG_SYSLOG (5<<3)
-#define LOG_LPR (6<<3)
-#define LOG_NEWS (7<<3)
-#define LOG_UUCP (8<<3)
-#define LOG_CRON (9<<3)
-#define LOG_AUTHPRIV (10<<3)
-#define LOG_FTP (11<<3)
-
-/* Codes through 15 are reserved for system use */
-#define LOG_LOCAL0 (16<<3)
-#define LOG_LOCAL1 (17<<3)
-#define LOG_LOCAL2 (18<<3)
-#define LOG_LOCAL3 (19<<3)
-#define LOG_LOCAL4 (20<<3)
-#define LOG_LOCAL5 (21<<3)
-#define LOG_LOCAL6 (22<<3)
-#define LOG_LOCAL7 (23<<3)
-
-#define LOG_NFACILITIES 24
-#define LOG_FACMASK 0x03f8
-#define LOG_FAC(p) (((p) & LOG_FACMASK) >> 3)
-
-#ifdef SYSLOG_NAMES
-
-#define INTERNAL_NOPRI 0x10 /* Maps to "none" */
-#define INTERNAL_MARK LOG_MAKEPRI(LOG_NFACILITIES, 0) /* Maps to "mark" */
-
-typedef struct _code {
- char *c_name;
- int c_val;
-} CODE;
-
-CODE prioritynames[] = {
- { "alert", LOG_ALERT },
- { "crit", LOG_CRIT },
- { "debug", LOG_DEBUG },
- { "emerg", LOG_EMERG },
- { "err", LOG_ERR },
- { "error", LOG_ERR }, /* Deprecated */
- { "info", LOG_INFO },
- { "none", INTERNAL_NOPRI },
- { "notice", LOG_NOTICE },
- { "panic", LOG_EMERG }, /* Deprecated */
- { "warn", LOG_WARNING }, /* Deprecated */
- { "warning", LOG_WARNING },
- { NULL, -1 }
-};
-
-CODE facilitynames[] = {
- { "auth", LOG_AUTH },
- { "authpriv", LOG_AUTHPRIV },
- { "cron", LOG_CRON },
- { "daemon", LOG_DAEMON },
- { "ftp", LOG_FTP },
- { "kern", LOG_KERN },
- { "lpr", LOG_LPR },
- { "mail", LOG_MAIL },
- { "mark", INTERNAL_MARK },
- { "news", LOG_NEWS },
- { "security", LOG_AUTH }, /* Deprecated */
- { "syslog", LOG_SYSLOG },
- { "user", LOG_USER },
- { "uucp", LOG_UUCP },
- { "local0", LOG_LOCAL0 },
- { "local1", LOG_LOCAL1 },
- { "local2", LOG_LOCAL2 },
- { "local3", LOG_LOCAL3 },
- { "local4", LOG_LOCAL4 },
- { "local5", LOG_LOCAL5 },
- { "local6", LOG_LOCAL6 },
- { "local7", LOG_LOCAL7 },
- { NULL, -1 }
-};
-
-#endif /* SYSLOG_NAMES */
-
-#define LOG_MASK(pri) (1 << (pri))
-#define LOG_UPTO(pri) ((1 << ((pri)+1)) - 1)
-
-/*
- * Option flags for openlog.
- *
- * LOG_ODELAY no longer does anything.
- * LOG_NDELAY is the inverse of what it used to be.
- */
-#define LOG_PID 0x01 /* log the pid with each message */
-#define LOG_CONS 0x02 /* log on the console if errors in sending */
-#define LOG_ODELAY 0x04 /* delay open until first syslog() (default) */
-#define LOG_NDELAY 0x08 /* don't delay open */
-#define LOG_NOWAIT 0x10 /* don't wait for console forks: DEPRECATED */
-#define LOG_PERROR 0x20 /* log to stderr as well */
-
-__BEGIN_DECLS
-
-
-void closelog (void);
-void openlog (const char *, int, int);
-int setlogmask (int);
-void syslog (int, const char *, ...);
-void vsyslog (int, const char *, va_list ap);
-
-__END_DECLS
-
-
-#endif /* _SYS_LOG_H */
diff --git a/winsup/cygwin/include/sys/sysmacros.h b/winsup/cygwin/include/sys/sysmacros.h
deleted file mode 100644
index 25a738a7d..000000000
--- a/winsup/cygwin/include/sys/sysmacros.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/* sys/sysmacros.h
-
- Copyright 1998, 2000, 2001, 2002, 2010, 2011, 2012 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _SYS_SYSMACROS_H
-#define _SYS_SYSMACROS_H
-
-#include <sys/types.h>
-
-_ELIDABLE_INLINE int gnu_dev_major(dev_t);
-_ELIDABLE_INLINE int gnu_dev_minor(dev_t);
-_ELIDABLE_INLINE dev_t gnu_dev_makedev(int, int);
-
-_ELIDABLE_INLINE int
-gnu_dev_major(dev_t dev)
-{
- return (int)(((dev) >> 16) & 0xffff);
-}
-
-_ELIDABLE_INLINE int
-gnu_dev_minor(dev_t dev)
-{
- return (int)((dev) & 0xffff);
-}
-
-_ELIDABLE_INLINE dev_t
-gnu_dev_makedev(int maj, int min)
-{
- return (((maj) << 16) | ((min) & 0xffff));
-}
-
-#define major(dev) gnu_dev_major(dev)
-#define minor(dev) gnu_dev_minor(dev)
-#define makedev(maj, min) gnu_dev_makedev(maj, min)
-
-#endif /* _SYS_SYSMACROS_H */
diff --git a/winsup/cygwin/include/sys/sysproto.h b/winsup/cygwin/include/sys/sysproto.h
deleted file mode 100644
index 488782b89..000000000
--- a/winsup/cygwin/include/sys/sysproto.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/* sys/sysproto.h
-
- Copyright 2003 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-/* sys/sysproto.h header file for Cygwin. */
-
-#ifndef _SYS_SYSPROTO_H
-#define _SYS_SYSPROTO_H
-
-#include <cygwin/sysproto.h>
-
-#endif /* _SYS_SYSPROTO_H */
diff --git a/winsup/cygwin/include/sys/termio.h b/winsup/cygwin/include/sys/termio.h
deleted file mode 100644
index 60dcf7e08..000000000
--- a/winsup/cygwin/include/sys/termio.h
+++ /dev/null
@@ -1,12 +0,0 @@
-/* sys/termio.h
-
- Copyright 2000, 2001 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include <sys/termios.h>
-
diff --git a/winsup/cygwin/include/sys/termios.h b/winsup/cygwin/include/sys/termios.h
deleted file mode 100644
index 687c0085e..000000000
--- a/winsup/cygwin/include/sys/termios.h
+++ /dev/null
@@ -1,372 +0,0 @@
-/* sys/termios.h
-
- Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
- 2008, 2009, 2010, 2011, 2012 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-/* sys/termios.h */
-
-#ifndef _SYS_TERMIOS_H
-#define _SYS_TERMIOS_H
-
-#include <sys/types.h>
-
-#define TIOCMGET 0x5415
-#define TIOCMBIS 0x5416
-#define TIOCMBIC 0x5417
-#define TIOCMSET 0x5418
-#define TIOCINQ 0x541B
-#define TIOCSCTTY 0x540E
-
-/* TIOCINQ is utilized instead of FIONREAD which has been
-accupied for other purposes under CYGWIN.
-Other UNIX ioctl requests has been omited because
-effects of their work one can achive by standard
-POSIX commands */
-
-#define TIOCSBRK 0x5427
-#define TIOCCBRK 0x5428
-
-#define TIOCM_DTR 0x002
-#define TIOCM_RTS 0x004
-#define TIOCM_CTS 0x020
-#define TIOCM_CAR 0x040
-#define TIOCM_RNG 0x080
-#define TIOCM_DSR 0x100
-#define TIOCM_CD TIOCM_CAR
-#define TIOCM_RI TIOCM_RNG
-
-#define TCOOFF 0
-#define TCOON 1
-#define TCIOFF 2
-#define TCION 3
-
-#define TCGETA 5
-#define TCSETA 6
-#define TCSETAW 7
-#define TCSETAF 8
-
-#define TCIFLUSH 0
-#define TCOFLUSH 1
-#define TCIOFLUSH 2
-#define TCFLSH 3
-
-#define TCSAFLUSH 1
-#define TCSANOW 2
-#define TCSADRAIN 3
-#define TCSADFLUSH 4
-
-#define TIOCPKT 6
-
-#define TIOCPKT_DATA 0
-#define TIOCPKT_FLUSHREAD 1
-#define TIOCPKT_FLUSHWRITE 2
-#define TIOCPKT_STOP 4
-#define TIOCPKT_START 8
-#define TIOCPKT_NOSTOP 16
-#define TIOCPKT_DOSTOP 32
-
-#define FIONBIO 0x8004667e /* To be compatible with socket version */
-
-#define CTRL(ch) ((ch)&0x1F)
-
-#define CNUL 0
-#define CDEL 0x0007f
-#define CESC '\\'
-#define CINTR CTRL('C')
-#define CQUIT 0x0001c
-#define CERASE CDEL
-#define CKILL CTRL('U')
-#define CEOT CTRL('D')
-#define CEOL 0
-#define CEOL2 0
-#define CBRK CEOL
-#define CEOF CTRL('D')
-#define CSTART CTRL('Q')
-#define CSTOP CTRL('S')
-#define CSWTCH 0x0001a
-#define NSWTCH 0
-#define CSUSP CTRL('Z')
-#define CDSUSP CTRL('Y')
-#define CRPRNT CTRL('R')
-#define CREPRINT CRPRNT
-#define CFLUSH CTRL('O')
-#define CDISCARD CFLUSH
-#define CWERASE CTRL('W')
-#define CLNEXT CTRL('V')
-
-/* iflag bits */
-#define IGNBRK 0x00001
-#define BRKINT 0x00002
-#define IGNPAR 0x00004
-#define IMAXBEL 0x00008
-#define INPCK 0x00010
-#define ISTRIP 0x00020
-#define INLCR 0x00040
-#define IGNCR 0x00080
-#define ICRNL 0x00100
-#define IXON 0x00400
-#define IXOFF 0x01000
-#define IUCLC 0x04000
-#define IXANY 0x08000
-#define PARMRK 0x10000
-
-/* oflag bits */
-
-#define OPOST 0x00001
-#define OLCUC 0x00002
-#define OCRNL 0x00004
-#define ONLCR 0x00008
-#define ONOCR 0x00010
-#define ONLRET 0x00020
-#define OFILL 0x00040
-#define CRDLY 0x00180
-#define CR0 0x00000
-#define CR1 0x00080
-#define CR2 0x00100
-#define CR3 0x00180
-#define NLDLY 0x00200
-#define NL0 0x00000
-#define NL1 0x00200
-#define BSDLY 0x00400
-#define BS0 0x00000
-#define BS1 0x00400
-#define TABDLY 0x01800
-#define TAB0 0x00000
-#define TAB1 0x00800
-#define TAB2 0x01000
-#define TAB3 0x01800
-#define XTABS 0x01800
-#define VTDLY 0x02000
-#define VT0 0x00000
-#define VT1 0x02000
-#define FFDLY 0x04000
-#define FF0 0x00000
-#define FF1 0x04000
-#define OFDEL 0x08000
-
-/* cflag bits */
-
-/* Baud rate values. These must fit in speed_t, which is unsigned
- char. See also the extended baud rates below. These baud rates
- set an additional bit. */
-#define CBAUD 0x0100f
-#define B0 0x00000
-#define B50 0x00001
-#define B75 0x00002
-#define B110 0x00003
-#define B134 0x00004
-#define B150 0x00005
-#define B200 0x00006
-#define B300 0x00007
-#define B600 0x00008
-#define B1200 0x00009
-#define B1800 0x0000a
-#define B2400 0x0000b
-#define B4800 0x0000c
-#define B9600 0x0000d
-#define B19200 0x0000e
-#define B38400 0x0000f
-
-#define CSIZE 0x00030
-#define CS5 0x00000
-#define CS6 0x00010
-#define CS7 0x00020
-#define CS8 0x00030
-#define CSTOPB 0x00040
-#define CREAD 0x00080
-#define PARENB 0x00100
-#define PARODD 0x00200
-#define HUPCL 0x00400
-#define CLOCAL 0x00800
-
-/* Extended baud rates above 37K. */
-#define CBAUDEX 0x0100f
-#define B57600 0x01001
-#define B115200 0x01002
-#define B128000 0x01003
-#define B230400 0x01004
-#define B256000 0x01005
-#define B460800 0x01006
-#define B500000 0x01007
-#define B576000 0x01008
-#define B921600 0x01009
-#define B1000000 0x0100a
-#define B1152000 0x0100b
-#define B1500000 0x0100c
-#define B2000000 0x0100d
-#define B2500000 0x0100e
-#define B3000000 0x0100f
-
-#define CRTSXOFF 0x04000
-#define CRTSCTS 0x08000
-
-/* lflag bits */
-#define ISIG 0x0001
-#define ICANON 0x0002
-#define ECHO 0x0004
-#define ECHOE 0x0008
-#define ECHOK 0x0010
-#define ECHONL 0x0020
-#define NOFLSH 0x0040
-#define TOSTOP 0x0080
-#define IEXTEN 0x0100
-#define FLUSHO 0x0200
-#define ECHOKE 0x0400
-#define ECHOCTL 0x0800
-
-#define VDISCARD 1
-#define VEOL 2
-#define VEOL2 3
-#define VEOF 4
-#define VERASE 5
-#define VINTR 6
-#define VKILL 7
-#define VLNEXT 8
-#define VMIN 9
-#define VQUIT 10
-#define VREPRINT 11
-#define VSTART 12
-#define VSTOP 13
-#define VSUSP 14
-#define VSWTC 15
-#define VTIME 16
-#define VWERASE 17
-
-#define NCCS 18
-
-/* Compare a character C to a value VAL from the `c_cc' array in a
- `struct termios'. If VAL is _POSIX_VDISABLE, no character can match it. */
-#define CCEQ(val, c) ((c) == (val) && (val) != _POSIX_VDISABLE)
-
-#define TTYDEF_IFLAG (BRKINT | ICRNL | IMAXBEL | IXON | IXANY)
-#define TTYDEF_OFLAG (OPOST | ONLCR)
-#define TTYDEF_LFLAG (ICANON | ISIG | IEXTEN | ECHO | ECHOE | ECHOKE | ECHOCTL)
-#define TTYDEF_CFLAG (CREAD | CS8 | HUPCL)
-#define TTYDEF_SPEED (B9600)
-
-typedef unsigned char cc_t;
-typedef unsigned int tcflag_t;
-typedef unsigned int speed_t;
-typedef unsigned short otcflag_t;
-typedef unsigned char ospeed_t;
-
-struct __oldtermios
-{
- otcflag_t c_iflag;
- otcflag_t c_oflag;
- otcflag_t c_cflag;
- otcflag_t c_lflag;
- char c_line;
- cc_t c_cc[NCCS];
- ospeed_t c_ispeed;
- ospeed_t c_ospeed;
-};
-
-struct termios
-{
- tcflag_t c_iflag;
- tcflag_t c_oflag;
- tcflag_t c_cflag;
- tcflag_t c_lflag;
- char c_line;
- cc_t c_cc[NCCS];
- speed_t c_ispeed;
- speed_t c_ospeed;
-};
-
-#ifdef CYGWIN_VERSION_DLL_IS_OLD_TERMIOS
-#ifdef __GNUC__
-# define __tonew_termios(ti) \
- ({ \
- struct termios *__newti; \
- \
- if (!CYGWIN_VERSION_DLL_IS_OLD_TERMIOS) \
- __newti = (struct termios *) ti; \
- else \
- { \
- __newti = (struct termios *) alloca(sizeof(struct termios)); \
- __newti->c_iflag = ((struct __oldtermios *)ti)->c_iflag; \
- __newti->c_oflag = ((struct __oldtermios *)ti)->c_oflag; \
- __newti->c_cflag = ((struct __oldtermios *)ti)->c_cflag; \
- __newti->c_lflag = ((struct __oldtermios *)ti)->c_lflag; \
- __newti->c_line = ((struct __oldtermios *)ti)->c_line; \
- __newti->c_ispeed = ((struct __oldtermios *)ti)->c_ispeed; \
- __newti->c_ospeed = ((struct __oldtermios *)ti)->c_ospeed; \
- memcpy (__newti->c_cc, ((struct __oldtermios *)ti)->c_cc, sizeof(__newti->c_cc)); \
- } \
- __newti; \
- })
-
-# define __makenew_termios(ti) \
- (CYGWIN_VERSION_DLL_IS_OLD_TERMIOS ? \
- (struct termios *) alloca (sizeof (struct termios)) : (ti))
-
-# define __toapp_termios(toti, fromti) \
- ({ \
- if (!CYGWIN_VERSION_DLL_IS_OLD_TERMIOS) \
- toti = fromti; \
- else \
- { \
- ((struct __oldtermios *)toti)->c_iflag = fromti->c_iflag; \
- ((struct __oldtermios *)toti)->c_oflag = fromti->c_oflag; \
- ((struct __oldtermios *)toti)->c_cflag = fromti->c_cflag; \
- ((struct __oldtermios *)toti)->c_lflag = fromti->c_lflag; \
- ((struct __oldtermios *)toti)->c_line = fromti->c_line; \
- ((struct __oldtermios *)toti)->c_ispeed = fromti->c_ispeed; \
- ((struct __oldtermios *)toti)->c_ospeed = fromti->c_ospeed; \
- memcpy (((struct __oldtermios*)toti)->c_cc, fromti->c_cc, sizeof(fromti->c_cc)); \
- } \
- toti; \
- })
-#endif /*__GNUC__*/
-#endif
-
-#define termio termios
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-int tcgetattr (int, struct termios *);
-int tcsetattr (int, int, const struct termios *);
-int tcsendbreak (int, int);
-int tcdrain (int);
-int tcflush (int, int);
-int tcflow (int, int);
-pid_t tcgetsid (int);
-void cfmakeraw (struct termios *);
-speed_t cfgetispeed(const struct termios *);
-speed_t cfgetospeed(const struct termios *);
-int cfsetispeed (struct termios *, speed_t);
-int cfsetospeed (struct termios *, speed_t);
-int cfsetspeed (struct termios *, speed_t);
-
-#ifdef __cplusplus
-}
-#endif
-
-#ifndef __cplusplus
-#define cfgetispeed(tp) ((tp)->c_ispeed)
-#define cfgetospeed(tp) ((tp)->c_ospeed)
-#endif
-
-/* Extra stuff to make porting stuff easier. */
-struct winsize
-{
- unsigned short ws_row, ws_col;
- unsigned short ws_xpixel, ws_ypixel;
-};
-
-#define TIOCGWINSZ (('T' << 8) | 1)
-#define TIOCSWINSZ (('T' << 8) | 2)
-#define TIOCLINUX (('T' << 8) | 3)
-#define TIOCGPGRP (('T' << 8) | 0xf)
-#define TIOCSPGRP (('T' << 8) | 0x10)
-
-#endif /* _SYS_TERMIOS_H */
diff --git a/winsup/cygwin/include/sys/ttychars.h b/winsup/cygwin/include/sys/ttychars.h
deleted file mode 100644
index 2d313646f..000000000
--- a/winsup/cygwin/include/sys/ttychars.h
+++ /dev/null
@@ -1 +0,0 @@
-/* ttychars.h */
diff --git a/winsup/cygwin/include/sys/uio.h b/winsup/cygwin/include/sys/uio.h
deleted file mode 100644
index e28f14e7e..000000000
--- a/winsup/cygwin/include/sys/uio.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/* sys/uio.h
-
- Copyright 1996, 2000, 2001, 2002 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _UIO_H_
-#define _UIO_H_
-
-/* For size_t */
-#include <stddef.h>
-/* For ssize_t */
-#include <sys/types.h>
-
-#include <sys/cdefs.h>
-
-__BEGIN_DECLS
-
-/*
- * Define the uio buffers used for writev, readv.
- */
-
-struct iovec
-{
- void *iov_base;
- size_t iov_len;
-};
-
-extern ssize_t readv __P ((int filedes, const struct iovec *vector, int count));
-extern ssize_t writev __P ((int filedes, const struct iovec *vector, int count));
-
-__END_DECLS
-
-#endif /* _UIO_H_ */
diff --git a/winsup/cygwin/include/sys/un.h b/winsup/cygwin/include/sys/un.h
deleted file mode 100644
index a2f3dacb1..000000000
--- a/winsup/cygwin/include/sys/un.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/* sys/un.h
-
- Copyright 1999, 2000, 2001, 2005, 2009, 2013 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _SYS_UN_H
-#define _SYS_UN_H
-
-#include <string.h> /* for strlen */
-#include <cygwin/socket.h>
-
-/* POSIX requires only at least 100 bytes */
-#define UNIX_PATH_MAX 108
-
-struct sockaddr_un {
- sa_family_t sun_family; /* address family AF_LOCAL/AF_UNIX */
- char sun_path[UNIX_PATH_MAX]; /* 108 bytes of socket address */
-};
-
-/* Evaluates the actual length of `sockaddr_un' structure. */
-#define SUN_LEN(p) ((size_t)(((struct sockaddr_un *) NULL)->sun_path) \
- + strlen ((p)->sun_path))
-
-#endif
diff --git a/winsup/cygwin/include/sys/utime.h b/winsup/cygwin/include/sys/utime.h
deleted file mode 100644
index 9ec57ab08..000000000
--- a/winsup/cygwin/include/sys/utime.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/* sys/utime.h
-
- Copyright 2001, 2003, 2005 Red Hat, Inc.
-
- This software is a copyrighted work licensed under the terms of the
- Cygwin license. Please consult the file "CYGWIN_LICENSE" for
- details. */
-
-#ifndef _SYS_UTIME_H
-#define _SYS_UTIME_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#include <_ansi.h>
-#include <sys/types.h>
-
-struct utimbuf
-{
- time_t actime;
- time_t modtime;
-};
-
-int _EXFUN(utime, (const char *__path, const struct utimbuf *__buf));
-
-#ifdef __cplusplus
-};
-#endif
-
-#endif /* _SYS_UTIME_H */
diff --git a/winsup/cygwin/include/sys/utmp.h b/winsup/cygwin/include/sys/utmp.h
deleted file mode 100644
index 8a63b348b..000000000
--- a/winsup/cygwin/include/sys/utmp.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/* sys/utmp.h
-
- Copyright 2001, 2003, 2004, 2005, 2008 Red Hat, Inc.
-
- This software is a copyrighted work licensed under the terms of the
- Cygwin license. Please consult the file "CYGWIN_LICENSE" for
- details. */
-
-#ifndef UTMP_H
-#define UTMP_H
-
-#include <cygwin/utmp.h>
-
-#define UTMP_FILE _PATH_UTMP
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifndef ut_name
-#define ut_name ut_user
-#endif
-
-
-struct utmp
-{
- short ut_type;
- pid_t ut_pid;
- char ut_line[UT_LINESIZE];
- char ut_id[UT_IDLEN];
- time_t ut_time;
- char ut_user[UT_NAMESIZE];
- char ut_host[UT_HOSTSIZE];
- long ut_addr;
-};
-
-extern struct utmp *getutent (void);
-extern struct utmp *getutid (const struct utmp *);
-extern struct utmp *getutline (const struct utmp *);
-extern struct utmp *pututline (const struct utmp *);
-extern void endutent (void);
-extern void setutent (void);
-extern void utmpname (const char *);
-
-void login (const struct utmp *);
-int logout (const char *);
-int login_tty (int);
-void updwtmp (const char *, const struct utmp *);
-void logwtmp (const char *, const char *, const char *);
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* UTMP_H */
diff --git a/winsup/cygwin/include/sys/utsname.h b/winsup/cygwin/include/sys/utsname.h
deleted file mode 100644
index 23ca5ab65..000000000
--- a/winsup/cygwin/include/sys/utsname.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/* sys/utsname.h
-
- Copyright 2000, 2001 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _SYS_UTSNAME_H
-#define _SYS_UTSNAME_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct utsname
-{
- char sysname[20];
- char nodename[20];
- char release[20];
- char version[20];
- char machine[20];
-};
-
-int uname (struct utsname *);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/winsup/cygwin/include/sys/vfs.h b/winsup/cygwin/include/sys/vfs.h
deleted file mode 100644
index 1310c4693..000000000
--- a/winsup/cygwin/include/sys/vfs.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/* sys/vfs.h
-
- Copyright 1997, 1998, 2000, 2001, 2002 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _SYS_VFS_H_
-#define _SYS_VFS_H_
-
-struct statfs {
- long f_type; /* type of filesystem */
- long f_bsize; /* optimal transfer block size */
- long f_blocks; /* total data blocks in file system */
- long f_bfree; /* free blocks in fs */
- long f_bavail; /* free blocks avail to non-superuser */
- long f_files; /* total file nodes in file system */
- long f_ffree; /* free file nodes in fs */
- long f_fsid; /* file system id */
- long f_namelen; /* maximum length of filenames */
- long f_spare[6]; /* spare for later */
-};
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-int statfs (const char *__path, struct statfs *__buf);
-int fstatfs (int __fd, struct statfs *__buf);
-
-#ifdef __cplusplus
-};
-#endif /* __cplusplus */
-
-#endif /*_SYS_VFS_H_*/
diff --git a/winsup/cygwin/include/sys/wait.h b/winsup/cygwin/include/sys/wait.h
deleted file mode 100644
index 19f599c1b..000000000
--- a/winsup/cygwin/include/sys/wait.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/* sys/wait.h
-
- Copyright 1997, 1998, 2000, 2001, 2002, 2003, 2004, 2006, 2011, 2012 Red
- Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _SYS_WAIT_H
-#define _SYS_WAIT_H
-
-#include <sys/types.h>
-#include <sys/resource.h>
-#include <cygwin/wait.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifdef __INSIDE_CYGWIN__
-
-typedef int *__wait_status_ptr_t;
-
-#elif defined(__cplusplus)
-
-/* Attribute __transparent_union__ is only supported for C. */
-typedef void *__wait_status_ptr_t;
-
-#else /* !__INSIDE_CYGWIN__ && !__cplusplus */
-
-/* Allow `int' and `union wait' for the status. */
-typedef union
- {
- int *__int_ptr;
- union wait *__union_wait_ptr;
- } __wait_status_ptr_t __attribute__ ((__transparent_union__));
-
-#endif /* __INSIDE_CYGWIN__ */
-
-pid_t wait (__wait_status_ptr_t __status);
-pid_t waitpid (pid_t __pid, __wait_status_ptr_t __status, int __options);
-pid_t wait3 (__wait_status_ptr_t __status, int __options, struct rusage *__rusage);
-pid_t wait4 (pid_t __pid, __wait_status_ptr_t __status, int __options, struct rusage *__rusage);
-
-#ifdef _COMPILING_NEWLIB
-pid_t _wait (__wait_status_ptr_t __status);
-#endif
-
-union wait
- {
- int w_status;
- struct
- {
- unsigned int __w_termsig:7; /* Terminating signal. */
- unsigned int __w_coredump:1; /* Set if dumped core. */
- unsigned int __w_retcode:8; /* Return code if exited normally. */
- unsigned int:16;
- } __wait_terminated;
- struct
- {
- unsigned int __w_stopval:8; /* W_STOPPED if stopped. */
- unsigned int __w_stopsig:8; /* Stopping signal. */
- unsigned int:16;
- } __wait_stopped;
- };
-#define w_termsig __wait_terminated.__w_termsig
-#define w_coredump __wait_terminated.__w_coredump
-#define w_retcode __wait_terminated.__w_retcode
-#define w_stopsig __wait_stopped.__w_stopsig
-#define w_stopval __wait_stopped.__w_stopval
-
-#ifdef __cplusplus
-}
-#endif
-
-/* Used in cygwin/wait.h, redefine to accept `int' and `union wait'. */
-#undef __wait_status_to_int
-
-#ifdef __cplusplus
-
-extern "C++" {
-inline int __wait_status_to_int (int __status)
- { return __status; }
-inline int __wait_status_to_int (const union wait & __status)
- { return __status.w_status; }
-}
-
-#else /* !__cplusplus */
-
-#define __wait_status_to_int(__status) (__extension__ \
- (((union { __typeof(__status) __in; int __out; }) { .__in = (__status) }).__out))
-
-#endif /* __cplusplus */
-
-#endif /* _SYS_WAIT_H */
diff --git a/winsup/cygwin/include/sys/xattr.h b/winsup/cygwin/include/sys/xattr.h
deleted file mode 100644
index 1f3239238..000000000
--- a/winsup/cygwin/include/sys/xattr.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/* sys/xattr.h
-
- Copyright 2011 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-/* sys/xattr.h header file for Cygwin. */
-
-#ifndef _SYS_XATTR_H
-#define _SYS_XATTR_H
-
-#include <attr/xattr.h>
-
-#endif /* _SYS_XATTR_H */
diff --git a/winsup/cygwin/include/sysexits.h b/winsup/cygwin/include/sysexits.h
deleted file mode 100644
index eba0b92dd..000000000
--- a/winsup/cygwin/include/sysexits.h
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Copyright (c) 1987, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)sysexits.h 8.1 (Berkeley) 6/2/93
- */
-
-#ifndef _SYSEXITS_H_
-#define _SYSEXITS_H_
-
-/*
- * SYSEXITS.H -- Exit status codes for system programs.
- *
- * This include file attempts to categorize possible error
- * exit statuses for system programs, notably delivermail
- * and the Berkeley network.
- *
- * Error numbers begin at EX__BASE to reduce the possibility of
- * clashing with other exit statuses that random programs may
- * already return. The meaning of the codes is approximately
- * as follows:
- *
- * EX_USAGE -- The command was used incorrectly, e.g., with
- * the wrong number of arguments, a bad flag, a bad
- * syntax in a parameter, or whatever.
- * EX_DATAERR -- The input data was incorrect in some way.
- * This should only be used for user's data & not
- * system files.
- * EX_NOINPUT -- An input file (not a system file) did not
- * exist or was not readable. This could also include
- * errors like "No message" to a mailer (if it cared
- * to catch it).
- * EX_NOUSER -- The user specified did not exist. This might
- * be used for mail addresses or remote logins.
- * EX_NOHOST -- The host specified did not exist. This is used
- * in mail addresses or network requests.
- * EX_UNAVAILABLE -- A service is unavailable. This can occur
- * if a support program or file does not exist. This
- * can also be used as a catchall message when something
- * you wanted to do doesn't work, but you don't know
- * why.
- * EX_SOFTWARE -- An internal software error has been detected.
- * This should be limited to non-operating system related
- * errors as possible.
- * EX_OSERR -- An operating system error has been detected.
- * This is intended to be used for such things as "cannot
- * fork", "cannot create pipe", or the like. It includes
- * things like getuid returning a user that does not
- * exist in the passwd file.
- * EX_OSFILE -- Some system file (e.g., /etc/passwd, /etc/utmp,
- * etc.) does not exist, cannot be opened, or has some
- * sort of error (e.g., syntax error).
- * EX_CANTCREAT -- A (user specified) output file cannot be
- * created.
- * EX_IOERR -- An error occurred while doing I/O on some file.
- * EX_TEMPFAIL -- temporary failure, indicating something that
- * is not really an error. In sendmail, this means
- * that a mailer (e.g.) could not create a connection,
- * and the request should be reattempted later.
- * EX_PROTOCOL -- the remote system returned something that
- * was "not possible" during a protocol exchange.
- * EX_NOPERM -- You did not have sufficient permission to
- * perform the operation. This is not intended for
- * file system problems, which should use NOINPUT or
- * CANTCREAT, but rather for higher level permissions.
- */
-
-#define EX_OK 0 /* successful termination */
-
-#define EX__BASE 64 /* base value for error messages */
-
-#define EX_USAGE 64 /* command line usage error */
-#define EX_DATAERR 65 /* data format error */
-#define EX_NOINPUT 66 /* cannot open input */
-#define EX_NOUSER 67 /* addressee unknown */
-#define EX_NOHOST 68 /* host name unknown */
-#define EX_UNAVAILABLE 69 /* service unavailable */
-#define EX_SOFTWARE 70 /* internal software error */
-#define EX_OSERR 71 /* system error (e.g., can't fork) */
-#define EX_OSFILE 72 /* critical OS file missing */
-#define EX_CANTCREAT 73 /* can't create (user) output file */
-#define EX_IOERR 74 /* input/output error */
-#define EX_TEMPFAIL 75 /* temp failure; user is invited to retry */
-#define EX_PROTOCOL 76 /* remote error in protocol */
-#define EX_NOPERM 77 /* permission denied */
-#define EX_CONFIG 78 /* configuration error */
-
-#define EX__MAX 78 /* maximum listed value */
-
-#endif /* !_SYSEXITS_H_ */
diff --git a/winsup/cygwin/include/syslog.h b/winsup/cygwin/include/syslog.h
deleted file mode 100644
index 28fb68aee..000000000
--- a/winsup/cygwin/include/syslog.h
+++ /dev/null
@@ -1,16 +0,0 @@
-/* syslog.h
-
- Copyright 1996, 1998, 2000, 2001 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _SYSLOG_H
-#define _SYSLOG_H
-
-#include <sys/syslog.h>
-
-#endif /* _SYSLOG_H */
diff --git a/winsup/cygwin/include/termio.h b/winsup/cygwin/include/termio.h
deleted file mode 100644
index 4b8d86595..000000000
--- a/winsup/cygwin/include/termio.h
+++ /dev/null
@@ -1,16 +0,0 @@
-/* termio.h
-
- Copyright 2000, 2001 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _TERMIO_H
-#define _TERMIO_H
-
-#include <sys/termio.h>
-
-#endif
diff --git a/winsup/cygwin/include/tzfile.h b/winsup/cygwin/include/tzfile.h
deleted file mode 100644
index d39ae6fd6..000000000
--- a/winsup/cygwin/include/tzfile.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/* tzfile.h
-
- Copyright 2000, 2001, 2002, 2003 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _TZFILE_H
-#define _TZFILE_H
-
-#define SECSPERMIN 60
-#define MINSPERHOUR 60
-#define HOURSPERDAY 24
-#define DAYSPERWEEK 7
-#define DAYSPERNYEAR 365
-#define DAYSPERLYEAR 366
-#define SECSPERHOUR (SECSPERMIN * MINSPERHOUR)
-#define SECSPERDAY ((long) SECSPERHOUR * HOURSPERDAY)
-#define MONSPERYEAR 12
-
-#define TM_SUNDAY 0
-#define TM_MONDAY 1
-#define TM_TUESDAY 2
-#define TM_WEDNESDAY 3
-#define TM_THURSDAY 4
-#define TM_FRIDAY 5
-#define TM_SATURDAY 6
-
-#define TM_JANUARY 0
-#define TM_FEBRUARY 1
-#define TM_MARCH 2
-#define TM_APRIL 3
-#define TM_MAY 4
-#define TM_JUNE 5
-#define TM_JULY 6
-#define TM_AUGUST 7
-#define TM_SEPTEMBER 8
-#define TM_OCTOBER 9
-#define TM_NOVEMBER 10
-#define TM_DECEMBER 11
-
-#define TM_YEAR_BASE 1900
-
-#define EPOCH_YEAR 1970
-#define EPOCH_WDAY TM_THURSDAY
-
-#define isleap(y) (((y) % 4) == 0 && ((y) % 100) != 0 || ((y) % 400) == 0)
-#endif
diff --git a/winsup/cygwin/include/utmpx.h b/winsup/cygwin/include/utmpx.h
deleted file mode 100644
index 548ad80a3..000000000
--- a/winsup/cygwin/include/utmpx.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/* utmpx.h
-
- Copyright 2004, 2005, 2006 Red Hat, Inc.
-
- This software is a copyrighted work licensed under the terms of the
- Cygwin license. Please consult the file "CYGWIN_LICENSE" for
- details. */
-
-#ifndef UTMPX_H
-#define UTMPX_H
-
-#include <cygwin/utmp.h>
-#include <sys/time.h>
-
-#define UTMPX_FILE _PATH_UTMP
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Must be kept in sync with struct utmp as defined in sys/utmp.h! */
-struct utmpx
-{
- short ut_type;
- pid_t ut_pid;
- char ut_line[UT_LINESIZE];
- char ut_id[UT_IDLEN];
- time_t ut_time;
- char ut_user[UT_NAMESIZE];
- char ut_host[UT_HOSTSIZE];
- long ut_addr;
- struct timeval ut_tv;
-};
-
-#ifndef ut_name
-#define ut_name ut_user
-#endif
-
-#ifndef ut_xtime
-#define ut_xtime ut_tv.tv_sec
-#endif
-
-extern void endutxent (void);
-extern struct utmpx *getutxent (void);
-extern struct utmpx *getutxid (const struct utmpx *id);
-extern struct utmpx *getutxline (const struct utmpx *line);
-extern struct utmpx *pututxline (const struct utmpx *utmpx);
-extern void setutxent (void);
-extern void utmpxname (const char *file);
-extern void updwtmpx (const char *file, const struct utmpx *utmpx);
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* UTMPX_H */
diff --git a/winsup/cygwin/include/wait.h b/winsup/cygwin/include/wait.h
deleted file mode 100644
index f0f1281e2..000000000
--- a/winsup/cygwin/include/wait.h
+++ /dev/null
@@ -1,16 +0,0 @@
-/* wait.h
-
- Copyright 2008 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _WAIT_H
-#define _WAIT_H
-
-#include <sys/wait.h>
-
-#endif /* _WAIT_H */
diff --git a/winsup/cygwin/init.cc b/winsup/cygwin/init.cc
deleted file mode 100644
index 78e88b94b..000000000
--- a/winsup/cygwin/init.cc
+++ /dev/null
@@ -1,103 +0,0 @@
-/* init.cc
-
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include "cygtls.h"
-#include "ntdll.h"
-#include "shared_info.h"
-
-static DWORD _my_oldfunc;
-
-static char *search_for = (char *) cygthread::stub;
-unsigned threadfunc_ix[8];
-
-static bool dll_finished_loading;
-#define OLDFUNC_OFFSET -1
-
-static void WINAPI
-threadfunc_fe (VOID *arg)
-{
- (void)__builtin_return_address(1);
- asm volatile ("andl $-16,%%esp" ::: "%esp");
- _cygtls::call ((DWORD (*) (void *, void *)) TlsGetValue (_my_oldfunc), arg);
-}
-
-/* If possible, redirect the thread entry point to a cygwin routine which
- adds tls stuff to the stack. */
-static void
-munge_threadfunc ()
-{
- int i;
- char **ebp = (char **) __builtin_frame_address (0);
- if (!threadfunc_ix[0])
- {
- char **peb;
- char **top = (char **) _tlsbase;
- for (peb = ebp, i = 0; peb < top && i < 7; peb++)
- if (*peb == search_for)
- threadfunc_ix[i++] = peb - ebp;
- if (0 && !threadfunc_ix[0])
- {
- try_to_debug ();
- return;
- }
- }
-
- if (threadfunc_ix[0])
- {
- char *threadfunc = ebp[threadfunc_ix[0]];
- if (!search_for || threadfunc == search_for)
- {
- search_for = NULL;
- for (i = 0; threadfunc_ix[i]; i++)
- ebp[threadfunc_ix[i]] = (char *) threadfunc_fe;
- TlsSetValue (_my_oldfunc, threadfunc);
- }
- }
-}
-
-void dll_crt0_0 ();
-
-extern "C" BOOL WINAPI
-dll_entry (HANDLE h, DWORD reason, void *static_load)
-{
- BOOL test_stack_marker;
-
- switch (reason)
- {
- case DLL_PROCESS_ATTACH:
- init_console_handler (false);
-
- cygwin_hmodule = (HMODULE) h;
- dynamically_loaded = (static_load == NULL);
-
- dll_crt0_0 ();
- _my_oldfunc = TlsAlloc ();
- dll_finished_loading = true;
- break;
- case DLL_PROCESS_DETACH:
- if (dynamically_loaded)
- shared_destroy ();
- break;
- case DLL_THREAD_ATTACH:
- if (dll_finished_loading)
- munge_threadfunc ();
- break;
- case DLL_THREAD_DETACH:
- if (dll_finished_loading
- && (PVOID) &_my_tls > (PVOID) &test_stack_marker
- && _my_tls.isinitialized ())
- _my_tls.remove (0);
- break;
- }
-
- return TRUE;
-}
diff --git a/winsup/cygwin/ioctl.cc b/winsup/cygwin/ioctl.cc
deleted file mode 100644
index 326c6e28b..000000000
--- a/winsup/cygwin/ioctl.cc
+++ /dev/null
@@ -1,63 +0,0 @@
-/* ioctl.cc: ioctl routines.
-
- Copyright 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2006, 2008, 2009, 2011,
- 2012 Red Hat, Inc.
-
- Written by Doug Evans of Cygnus Support
- dje@cygnus.com
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include "cygerrno.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-
-extern "C" int
-ioctl (int fd, int cmd, ...)
-{
-
- cygheap_fdget cfd (fd);
- if (cfd < 0)
- return -1;
-
- /* check for optional mode argument */
- va_list ap;
- va_start (ap, cmd);
- char *argp = va_arg (ap, char *);
- va_end (ap);
-
- debug_printf ("ioctl(fd %d, cmd %y)", fd, cmd);
- int res;
- /* FIXME: This stinks. There are collisions between cmd types
- depending on whether fd is associated with a pty master or not.
- Something to fix for Cygwin2. CGF 2006-06-04 */
- if (cfd->is_tty () && cfd->get_major () != DEV_PTYM_MAJOR)
- switch (cmd)
- {
- case TCGETA:
- res = tcgetattr (fd, (struct termios *) argp);
- goto out;
- case TCSETA:
- res = tcsetattr (fd, TCSANOW, (struct termios *) argp);
- goto out;
- case TCSETAW:
- res = tcsetattr (fd, TCSADRAIN, (struct termios *) argp);
- goto out;
- case TCSETAF:
- res = tcsetattr (fd, TCSAFLUSH, (struct termios *) argp);
- goto out;
- }
-
- res = cfd->ioctl (cmd, argp);
-
-out:
- syscall_printf ("%R = ioctl(%d, %y, ...)", res, fd, cmd);
- return res;
-}
diff --git a/winsup/cygwin/ipc.cc b/winsup/cygwin/ipc.cc
deleted file mode 100644
index 3be8666fb..000000000
--- a/winsup/cygwin/ipc.cc
+++ /dev/null
@@ -1,91 +0,0 @@
-/* ipc.cc: Single unix specification IPC interface for Cygwin
-
- Copyright 2001, 2002, 2003, 2008, 2010 Red Hat, Inc.
-
- Originally written by Robert Collins <robert.collins@hotmail.com>
- Updated to 64 bit key_t by Charles Wilson <cygwin@cwilson.fastmail.fm>
-
- This file is part of Cygwin.
-
- This software is a copyrighted work licensed under the terms of the
- Cygwin license. Please consult the file "CYGWIN_LICENSE" for
- details. */
-
-#include "winsup.h"
-#include <sys/stat.h>
-
-/* Notes: we return a valid key even if id's low order 8 bits are 0. */
-extern "C" key_t
-ftok (const char *path, int id)
-{
- struct stat statbuf;
- key_t tmp;
- if (stat64 (path, &statbuf))
- {
- /* stat set the appropriate errno for us */
- return (key_t) -1;
- }
-
- /* Since Cygwin 1.5
- dev_t is 32bits for cygwin
- ino_t is 64bits for cygwin
- and we need 8 bits for the id.
- thus key_t needs 104 bits total -- but we only have 64 (long long)
- We will have to alias; leaving open the possibility that the same
- key will be returned for multiple files. This possibility exists
- also on Linux; the question is, how to minimize this possibility.
-
- How to solve? Well, based on C. Vinschen's research, the nFileIndex*
- words vary as follows, on a partition with > 110,000 files
- nFileIndexHigh: 564 values between 0x00010000 -- 0xffff0000
- nFileIndexLow : 103812 values between 0x00000000 -- 0x0003ffff
- R. Collins suggests that these may represent a tree path,
- and that it would require ~2.9M files to force the tree depth
- to increase and reveal more bit usage.
-
- Implementation details: dev_t is 32bits, but is formed by
- device(32bits) << 16 | unit(32bits)
- But device is ACTUALLY == status & FH_DEVMASK, where FH_DEVMASK
- is 0x00000fff --> 12 bits
-
- As it happens, the maximum number of devices is actually
- FH_NDEV, not FH_DEVMASK, where FH_NDEV is currently 0x0000001d.
- However, FH_NDEV grows as new device types are added. So
- currently the device number needs 5 bits, but later? Let's
- take a cue from Linux, and use the lower 8 bits (instead of the
- lower 12 or 16) for the device (major?) number.
-
- Similarly, while 'units' is an int (32bits), it is unclear
- how many of these are significant. For most devices, it seems that
- 'units' is equivalent to 'minor'. For FH_TAPE, it's obvious that
- only 8 bits are important. However, for FH_SOCKET...it might be
- as high as 16 significant bits.
-
- Let's assume that we only need 8 bits from device (major) and
- only 8 bits from unit (minor). (On linux, only 8 bits of minor
- are used, and none from major).
- ---> so, we only need 0x00ff00ff (16 bits) of dev_t
-
- ---> we MUST have all 8 bits of id.
-
- ---> So, we only have 64 - 8 - 16 = 40 bits for ino_t. But, we
- need 0xffff0000 for nFileIndexHigh and 0x0003ffff for nFileIndexLow
- minimum, or 16 + 18 = 34 bits. Lucky us - we have 6 more bits
- to distribute.
-
- For lack of a better idea, we'll allocate 2 of the extra bits to
- nFileIndexHigh and 4 to nFileIndexLow. */
-
- /* get 8 bits from dev_t (major), put into 0xff00000000000000L */
- tmp = (((key_t) statbuf.st_dev) & 0x0000000000ff0000LL) << 40;
- /* get 8 bits from dev_t (minor), put into 0x00ff000000000000L */
- tmp |= (((key_t) statbuf.st_dev) & 0x00000000000000ffLL) << 48;
- /* get upper 16+2 bits from nFileInfoHigh, put into 0x0000ffffc0000000L
- shift down first, then mask, to avoid sign extension on rightshift */
- tmp |= (((key_t) statbuf.st_ino) & 0xffffc00000000000LL) >> 16;
- /* get lower 18+4 bits from nFileInfoLow, put into 0x000000003fffff00L */
- tmp |= (((key_t) statbuf.st_ino) & 0x00000000003fffffLL) << 8;
- /* use all 8 bits of id, and put into 0x00000000000000ffL */
- tmp |= (id & 0x00ff);
- return tmp;
-}
diff --git a/winsup/cygwin/kernel32.cc b/winsup/cygwin/kernel32.cc
deleted file mode 100644
index 22558f74b..000000000
--- a/winsup/cygwin/kernel32.cc
+++ /dev/null
@@ -1,454 +0,0 @@
-/* kernel32.cc: Win32 replacement functions.
-
- Copyright 2008, 2009, 2010, 2011, 2012, 2013, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include "shared_info.h"
-#include "ntdll.h"
-#include "cygerrno.h"
-#include "security.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "tls_pbuf.h"
-#include "winf.h"
-#include "sys/cygwin.h"
-
-/* Implement CreateEvent/OpenEvent so that named objects are always created in
- Cygwin shared object namespace. */
-
-HANDLE WINAPI
-CreateEventW (LPSECURITY_ATTRIBUTES lpEventAttributes, BOOL bManualReset,
- BOOL bInitialState, LPCWSTR lpName)
-{
- HANDLE evt;
- UNICODE_STRING uname;
- OBJECT_ATTRIBUTES attr;
- NTSTATUS status;
- ULONG flags = 0;
-
- if (lpEventAttributes && lpEventAttributes->bInheritHandle)
- flags |= OBJ_INHERIT;
- if (lpName)
- {
- RtlInitUnicodeString (&uname, lpName);
- flags |= OBJ_OPENIF | OBJ_CASE_INSENSITIVE;
- }
- InitializeObjectAttributes (&attr, lpName ? &uname : NULL, flags,
- lpName ? get_shared_parent_dir () : NULL,
- lpEventAttributes
- ? lpEventAttributes->lpSecurityDescriptor : NULL);
- status = NtCreateEvent (&evt, EVENT_ALL_ACCESS, &attr,
- bManualReset ? NotificationEvent
- : SynchronizationEvent,
- bInitialState);
- if (!NT_SUCCESS (status))
- {
- SetLastError (RtlNtStatusToDosError (status));
- return NULL;
- }
- SetLastError (status == STATUS_OBJECT_NAME_EXISTS
- ? ERROR_ALREADY_EXISTS : ERROR_SUCCESS);
- return evt;
-}
-
-HANDLE WINAPI
-CreateEventA (LPSECURITY_ATTRIBUTES lpEventAttributes, BOOL bManualReset,
- BOOL bInitialState, LPCSTR lpName)
-{
- WCHAR name[MAX_PATH];
-
- if (lpName && !sys_mbstowcs (name, MAX_PATH, lpName))
- {
- SetLastError (ERROR_FILENAME_EXCED_RANGE);
- return NULL;
- }
- return CreateEventW (lpEventAttributes, bManualReset, bInitialState,
- lpName ? name : NULL);
-}
-
-HANDLE WINAPI
-OpenEventW (DWORD dwDesiredAccess, BOOL bInheritHandle, LPCWSTR lpName)
-{
- HANDLE evt;
- UNICODE_STRING uname;
- OBJECT_ATTRIBUTES attr;
- NTSTATUS status;
- ULONG flags = 0;
-
- if (bInheritHandle)
- flags |= OBJ_INHERIT;
- if (lpName)
- {
- RtlInitUnicodeString (&uname, lpName);
- flags |= OBJ_CASE_INSENSITIVE;
- }
- InitializeObjectAttributes (&attr, lpName ? &uname : NULL, flags,
- lpName ? get_shared_parent_dir () : NULL,
- NULL);
- status = NtOpenEvent (&evt, dwDesiredAccess, &attr);
- if (!NT_SUCCESS (status))
- {
- SetLastError (RtlNtStatusToDosError (status));
- return NULL;
- }
- return evt;
-}
-
-HANDLE WINAPI
-OpenEventA (DWORD dwDesiredAccess, BOOL bInheritHandle, LPCSTR lpName)
-{
- WCHAR name[MAX_PATH];
-
- if (lpName && !sys_mbstowcs (name, MAX_PATH, lpName))
- {
- SetLastError (ERROR_FILENAME_EXCED_RANGE);
- return NULL;
- }
- return OpenEventW (dwDesiredAccess, bInheritHandle, lpName ? name : NULL);
-}
-
-/* Implement CreateMutex/OpenMutex so that named objects are always created in
- Cygwin shared object namespace. */
-
-HANDLE WINAPI
-CreateMutexW (LPSECURITY_ATTRIBUTES lpMutexAttributes, BOOL bInitialOwner,
- LPCWSTR lpName)
-{
- HANDLE mtx;
- UNICODE_STRING uname;
- OBJECT_ATTRIBUTES attr;
- NTSTATUS status;
- ULONG flags = 0;
-
- if (lpMutexAttributes && lpMutexAttributes->bInheritHandle)
- flags |= OBJ_INHERIT;
- if (lpName)
- {
- RtlInitUnicodeString (&uname, lpName);
- flags |= OBJ_OPENIF | OBJ_CASE_INSENSITIVE;
- }
- InitializeObjectAttributes (&attr, lpName ? &uname : NULL, flags,
- lpName ? get_shared_parent_dir () : NULL,
- lpMutexAttributes
- ? lpMutexAttributes->lpSecurityDescriptor : NULL);
- status = NtCreateMutant (&mtx, MUTEX_ALL_ACCESS, &attr, bInitialOwner);
- if (!NT_SUCCESS (status))
- {
- SetLastError (RtlNtStatusToDosError (status));
- return NULL;
- }
- SetLastError (status == STATUS_OBJECT_NAME_EXISTS
- ? ERROR_ALREADY_EXISTS : ERROR_SUCCESS);
- return mtx;
-}
-
-HANDLE WINAPI
-CreateMutexA (LPSECURITY_ATTRIBUTES lpMutexAttributes, BOOL bInitialOwner,
- LPCSTR lpName)
-{
- WCHAR name[MAX_PATH];
-
- if (lpName && !sys_mbstowcs (name, MAX_PATH, lpName))
- {
- SetLastError (ERROR_FILENAME_EXCED_RANGE);
- return NULL;
- }
- return CreateMutexW (lpMutexAttributes, bInitialOwner, lpName ? name : NULL);
-}
-
-HANDLE WINAPI
-OpenMutexW (DWORD dwDesiredAccess, BOOL bInheritHandle, LPCWSTR lpName)
-{
- HANDLE mtx;
- UNICODE_STRING uname;
- OBJECT_ATTRIBUTES attr;
- NTSTATUS status;
- ULONG flags = 0;
-
- if (bInheritHandle)
- flags |= OBJ_INHERIT;
- if (lpName)
- {
- RtlInitUnicodeString (&uname, lpName);
- flags |= OBJ_CASE_INSENSITIVE;
- }
- InitializeObjectAttributes (&attr, lpName ? &uname : NULL, flags,
- lpName ? get_shared_parent_dir () : NULL,
- NULL);
- status = NtOpenMutant (&mtx, dwDesiredAccess, &attr);
- if (!NT_SUCCESS (status))
- {
- SetLastError (RtlNtStatusToDosError (status));
- return NULL;
- }
- return mtx;
-}
-
-HANDLE WINAPI
-OpenMutexA (DWORD dwDesiredAccess, BOOL bInheritHandle, LPCSTR lpName)
-{
- WCHAR name[MAX_PATH];
-
- if (lpName && !sys_mbstowcs (name, MAX_PATH, lpName))
- {
- SetLastError (ERROR_FILENAME_EXCED_RANGE);
- return NULL;
- }
- return OpenMutexW (dwDesiredAccess, bInheritHandle, lpName ? name : NULL);
-}
-
-/* Implement CreateSemaphore/OpenSemaphore so that named objects are always
- created in Cygwin shared object namespace. */
-
-HANDLE WINAPI
-CreateSemaphoreW (LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,
- LONG lInitialCount, LONG lMaximumCount, LPCWSTR lpName)
-{
- HANDLE sem;
- UNICODE_STRING uname;
- OBJECT_ATTRIBUTES attr;
- NTSTATUS status;
- ULONG flags = 0;
-
- if (lpSemaphoreAttributes && lpSemaphoreAttributes->bInheritHandle)
- flags |= OBJ_INHERIT;
- if (lpName)
- {
- RtlInitUnicodeString (&uname, lpName);
- flags |= OBJ_OPENIF | OBJ_CASE_INSENSITIVE;
- }
- InitializeObjectAttributes (&attr, lpName ? &uname : NULL, flags,
- lpName ? get_shared_parent_dir () : NULL,
- lpSemaphoreAttributes
- ? lpSemaphoreAttributes->lpSecurityDescriptor
- : NULL);
- status = NtCreateSemaphore (&sem, SEMAPHORE_ALL_ACCESS, &attr,
- lInitialCount, lMaximumCount);
- if (!NT_SUCCESS (status))
- {
- SetLastError (RtlNtStatusToDosError (status));
- return NULL;
- }
- SetLastError (status == STATUS_OBJECT_NAME_EXISTS
- ? ERROR_ALREADY_EXISTS : ERROR_SUCCESS);
- return sem;
-}
-
-HANDLE WINAPI
-CreateSemaphoreA (LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,
- LONG lInitialCount, LONG lMaximumCount, LPCSTR lpName)
-{
- WCHAR name[MAX_PATH];
-
- if (lpName && !sys_mbstowcs (name, MAX_PATH, lpName))
- {
- SetLastError (ERROR_FILENAME_EXCED_RANGE);
- return NULL;
- }
- return CreateSemaphoreW (lpSemaphoreAttributes, lInitialCount, lMaximumCount,
- lpName ? name : NULL);
-}
-
-HANDLE WINAPI
-OpenSemaphoreW (DWORD dwDesiredAccess, BOOL bInheritHandle, LPCWSTR lpName)
-{
- HANDLE sem;
- UNICODE_STRING uname;
- OBJECT_ATTRIBUTES attr;
- NTSTATUS status;
- ULONG flags = 0;
-
- if (bInheritHandle)
- flags |= OBJ_INHERIT;
- if (lpName)
- {
- RtlInitUnicodeString (&uname, lpName);
- flags |= OBJ_CASE_INSENSITIVE;
- }
- InitializeObjectAttributes (&attr, lpName ? &uname : NULL, flags,
- lpName ? get_shared_parent_dir () : NULL,
- NULL);
- status = NtOpenSemaphore (&sem, dwDesiredAccess, &attr);
- if (!NT_SUCCESS (status))
- {
- SetLastError (RtlNtStatusToDosError (status));
- return NULL;
- }
- return sem;
-}
-
-HANDLE WINAPI
-OpenSemaphoreA (DWORD dwDesiredAccess, BOOL bInheritHandle, LPCSTR lpName)
-{
- WCHAR name[MAX_PATH];
-
- if (lpName && !sys_mbstowcs (name, MAX_PATH, lpName))
- {
- SetLastError (ERROR_FILENAME_EXCED_RANGE);
- return NULL;
- }
- return OpenSemaphoreW (dwDesiredAccess, bInheritHandle, lpName ? name : NULL);
-}
-
-/* Implement CreateFileMapping/OpenFileMapping so that named objects are always
- created in Cygwin shared object namespace. */
-
-HANDLE WINAPI
-CreateFileMappingW (HANDLE hFile, LPSECURITY_ATTRIBUTES lpAttributes,
- DWORD flProtect, DWORD dwMaximumSizeHigh,
- DWORD dwMaximumSizeLow, LPCWSTR lpName)
-{
- HANDLE sect;
- UNICODE_STRING uname;
- OBJECT_ATTRIBUTES attr;
- NTSTATUS status;
- ULONG flags = 0;
- ACCESS_MASK access = STANDARD_RIGHTS_REQUIRED
- | SECTION_QUERY | SECTION_MAP_READ;
- ULONG prot = flProtect & (PAGE_NOACCESS | PAGE_READONLY | PAGE_READWRITE
- | PAGE_WRITECOPY | PAGE_EXECUTE
- | PAGE_EXECUTE_READ | PAGE_EXECUTE_READWRITE
- | PAGE_EXECUTE_WRITECOPY);
- ULONG attribs = flProtect & (SEC_COMMIT | SEC_IMAGE | SEC_NOCACHE
- | SEC_RESERVE);
- LARGE_INTEGER size = {{ LowPart : dwMaximumSizeLow,
- HighPart : (LONG) dwMaximumSizeHigh }};
- PLARGE_INTEGER psize = size.QuadPart ? &size : NULL;
-
- if (prot & (PAGE_READWRITE | PAGE_WRITECOPY
- | PAGE_EXECUTE_READWRITE | PAGE_EXECUTE_WRITECOPY))
- access |= SECTION_MAP_WRITE;
- if (prot & (PAGE_EXECUTE | PAGE_EXECUTE_READ
- | PAGE_EXECUTE_READWRITE | PAGE_EXECUTE_WRITECOPY))
- access |= SECTION_MAP_EXECUTE;
- if (lpAttributes && lpAttributes->bInheritHandle)
- flags |= OBJ_INHERIT;
- if (lpName)
- {
- RtlInitUnicodeString (&uname, lpName);
- flags |= OBJ_OPENIF | OBJ_CASE_INSENSITIVE;
- }
- InitializeObjectAttributes (&attr, lpName ? &uname : NULL, flags,
- lpName ? get_shared_parent_dir () : NULL,
- lpAttributes
- ? lpAttributes->lpSecurityDescriptor
- : NULL);
- if (!(attribs & (SEC_RESERVE | SEC_COMMIT)))
- attribs |= SEC_COMMIT;
- if (hFile == INVALID_HANDLE_VALUE)
- hFile = NULL;
- status = NtCreateSection (&sect, access, &attr, psize, prot, attribs, hFile);
- if (!NT_SUCCESS (status))
- {
- SetLastError (RtlNtStatusToDosError (status));
- return NULL;
- }
- SetLastError (status == STATUS_OBJECT_NAME_EXISTS
- ? ERROR_ALREADY_EXISTS : ERROR_SUCCESS);
- return sect;
-}
-
-HANDLE WINAPI
-CreateFileMappingA (HANDLE hFile, LPSECURITY_ATTRIBUTES lpAttributes,
- DWORD flProtect, DWORD dwMaximumSizeHigh,
- DWORD dwMaximumSizeLow, LPCSTR lpName)
-{
- WCHAR name[MAX_PATH];
-
- if (lpName && !sys_mbstowcs (name, MAX_PATH, lpName))
- {
- SetLastError (ERROR_FILENAME_EXCED_RANGE);
- return NULL;
- }
- return CreateFileMappingW (hFile, lpAttributes, flProtect, dwMaximumSizeHigh,
- dwMaximumSizeLow, lpName ? name : NULL);
-}
-
-HANDLE WINAPI
-OpenFileMappingW (DWORD dwDesiredAccess, BOOL bInheritHandle, LPCWSTR lpName)
-{
- HANDLE sect;
- UNICODE_STRING uname;
- OBJECT_ATTRIBUTES attr;
- NTSTATUS status;
- ULONG flags = 0;
-
- if (bInheritHandle)
- flags |= OBJ_INHERIT;
- if (lpName)
- {
- RtlInitUnicodeString (&uname, lpName);
- flags |= OBJ_CASE_INSENSITIVE;
- }
- InitializeObjectAttributes (&attr, lpName ? &uname : NULL, flags,
- lpName ? get_shared_parent_dir () : NULL,
- NULL);
- status = NtOpenSection (&sect, dwDesiredAccess, &attr);
- if (!NT_SUCCESS (status))
- {
- SetLastError (RtlNtStatusToDosError (status));
- return NULL;
- }
- return sect;
-}
-
-HANDLE WINAPI
-OpenFileMappingA (DWORD dwDesiredAccess, BOOL bInheritHandle, LPCSTR lpName)
-{
- WCHAR name[MAX_PATH];
-
- if (lpName && !sys_mbstowcs (name, MAX_PATH, lpName))
- {
- SetLastError (ERROR_FILENAME_EXCED_RANGE);
- return NULL;
- }
- return OpenFileMappingW (dwDesiredAccess, bInheritHandle, lpName ? name : NULL);
-}
-
-/* The external functions below wrap Windows functions of the same name
- and provide a Windows interface to Cygwin functionality. */
-
-/* Construct a unicode version of the Cygwin command line from __argv) */
-static UNICODE_STRING *
-ucmd ()
-{
- static UNICODE_STRING wcmd;
- if (!wcmd.Buffer)
- {
- linebuf cmd;
- path_conv real_path (__argv[0]);
- av newargv (__argc, __argv);
- cmd.fromargv (newargv, real_path.get_win32 (), true);
- RtlInitUnicodeString (&wcmd, cmd);
- }
- return &wcmd;
-}
-
-/* Cygwin replacement for GetCommandLineW. Returns a concatenated wide string
- representing the argv list, constructed using roughly the same mechanism as
- child_info_spawn::worker */
-extern "C" LPWSTR WINAPI
-cygwin_GetCommandLineW (void)
-{
- return ucmd ()->Buffer;
-}
-
-/* Cygwin replacement for GetCommandLineA. Returns a concatenated string
- representing the argv list, constructed using roughly the same mechanism
- as child_info_spawn::worker */
-extern "C" LPSTR WINAPI
-cygwin_GetCommandLineA (void)
-{
- static ANSI_STRING cmd;
- if (!cmd.Buffer)
- RtlUnicodeStringToAnsiString (&cmd, ucmd (), TRUE);
- return cmd.Buffer;
-}
diff --git a/winsup/cygwin/lc_era.h b/winsup/cygwin/lc_era.h
deleted file mode 100644
index ef0fda694..000000000
--- a/winsup/cygwin/lc_era.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/* This struct of LC_TIME ERA data has been generated by fetching locale
- data from a Linux system using glibc-2.11-2.i686 on 2010-02-22. */
-
-struct lc_era_t
-{
- const char *locale;
- const wchar_t *date_fmt;
- const wchar_t *d_fmt;
- const wchar_t *d_t_fmt;
- const wchar_t *t_fmt;
- const wchar_t *t_fmt_ampm;
- const wchar_t *era;
- const wchar_t *era_d_fmt;
- const wchar_t *era_d_t_fmt;
- const wchar_t *era_t_fmt;
- const wchar_t *alt_digits;
-};
-
-static struct lc_era_t lc_era[] =
-{
- { "fa_IR", L"\x202b%A %Oe %B %Oy\x060c \x0633\x0627\x0639\x062a %OH:%OM:%OS (%Z)\x202c", L"%Oy/%Om/%Od", L"\x202b%A %Oe %B %Oy\x060c %OH:%OM:%OS\x202c", L"%OH:%OM:%OS", L"", L"", L"", L"", L"", L"\x06f0\x06f0;\x06f0\x06f1;\x06f0\x06f2;\x06f0\x06f3;\x06f0\x06f4;\x06f0\x06f5;\x06f0\x06f6;\x06f0\x06f7;\x06f0\x06f8;\x06f0\x06f9;\x06f1\x06f0;\x06f1\x06f1;\x06f1\x06f2;\x06f1\x06f3;\x06f1\x06f4;\x06f1\x06f5;\x06f1\x06f6;\x06f1\x06f7;\x06f1\x06f8;\x06f1\x06f9;\x06f2\x06f0;\x06f2\x06f1;\x06f2\x06f2;\x06f2\x06f3;\x06f2\x06f4;\x06f2\x06f5;\x06f2\x06f6;\x06f2\x06f7;\x06f2\x06f8;\x06f2\x06f9;\x06f3\x06f0;\x06f3\x06f1;\x06f3\x06f2;\x06f3\x06f3;\x06f3\x06f4;\x06f3\x06f5;\x06f3\x06f6;\x06f3\x06f7;\x06f3\x06f8;\x06f3\x06f9;\x06f4\x06f0;\x06f4\x06f1;\x06f4\x06f2;\x06f4\x06f3;\x06f4\x06f4;\x06f4\x06f5;\x06f4\x06f6;\x06f4\x06f7;\x06f4\x06f8;\x06f4\x06f9;\x06f5\x06f0;\x06f5\x06f1;\x06f5\x06f2;\x06f5\x06f3;\x06f5\x06f4;\x06f5\x06f5;\x06f5\x06f6;\x06f5\x06f7;\x06f5\x06f8;\x06f5\x06f9;\x06f6\x06f0;\x06f6\x06f1;\x06f6\x06f2;\x06f6\x06f3;\x06f6\x06f4;\x06f6\x06f5;\x06f6\x06f6;\x06f6\x06f7;\x06f6\x06f8;\x06f6\x06f9;\x06f7\x06f0;\x06f7\x06f1;\x06f7\x06f2;\x06f7\x06f3;\x06f7\x06f4;\x06f7\x06f5;\x06f7\x06f6;\x06f7\x06f7;\x06f7\x06f8;\x06f7\x06f9;\x06f8\x06f0;\x06f8\x06f1;\x06f8\x06f2;\x06f8\x06f3;\x06f8\x06f4;\x06f8\x06f5;\x06f8\x06f6;\x06f8\x06f7;\x06f8\x06f8;\x06f8\x06f9;\x06f9\x06f0;\x06f9\x06f1;\x06f9\x06f2;\x06f9\x06f3;\x06f9\x06f4;\x06f9\x06f5;\x06f9\x06f6;\x06f9\x06f7;\x06f9\x06f8;\x06f9\x06f9" },
- { "ja_JP", L"%Y\x5e74 %b %e\x65e5 %A %H:%M:%S %Z", L"%Y\x5e74%m\x6708%d\x65e5", L"%Y\x5e74%m\x6708%d\x65e5 %H\x6642%M\x5206%S\x79d2", L"%H\x6642%M\x5206%S\x79d2", L"%p%I\x6642%M\x5206%S\x79d2", L"+:2:1990/01/01:+*:\x5e73\x6210:%EC%Ey\x5e74;+:1:1989/01/08:1989/12/31:\x5e73\x6210:%EC\x5143\x5e74;+:2:1927/01/01:1989/01/07:\x662d\x548c:%EC%Ey\x5e74;+:1:1926/12/25:1926/12/31:\x662d\x548c:%EC\x5143\x5e74;+:2:1913/01/01:1926/12/24:\x5927\x6b63:%EC%Ey\x5e74;+:1:1912/07/30:1912/12/31:\x5927\x6b63:%EC\x5143\x5e74;+:6:1873/01/01:1912/07/29:\x660e\x6cbb:%EC%Ey\x5e74;+:1:0001/01/01:1872/12/31:\x897f\x66a6:%EC%Ey\x5e74;+:1:-0001/12/31:-*:\x7d00\x5143\x524d:%EC%Ey\x5e74", L"%EY%m\x6708%d\x65e5", L"%EY%m\x6708%d\x65e5 %H\x6642%M\x5206%S\x79d2", L"", L"\x3007;\x4e00;\x4e8c;\x4e09;\x56db;\x4e94;\x516d;\x4e03;\x516b;\x4e5d;\x5341;\x5341\x4e00;\x5341\x4e8c;\x5341\x4e09;\x5341\x56db;\x5341\x4e94;\x5341\x516d;\x5341\x4e03;\x5341\x516b;\x5341\x4e5d;\x4e8c\x5341;\x4e8c\x5341\x4e00;\x4e8c\x5341\x4e8c;\x4e8c\x5341\x4e09;\x4e8c\x5341\x56db;\x4e8c\x5341\x4e94;\x4e8c\x5341\x516d;\x4e8c\x5341\x4e03;\x4e8c\x5341\x516b;\x4e8c\x5341\x4e5d;\x4e09\x5341;\x4e09\x5341\x4e00;\x4e09\x5341\x4e8c;\x4e09\x5341\x4e09;\x4e09\x5341\x56db;\x4e09\x5341\x4e94;\x4e09\x5341\x516d;\x4e09\x5341\x4e03;\x4e09\x5341\x516b;\x4e09\x5341\x4e5d;\x56db\x5341;\x56db\x5341\x4e00;\x56db\x5341\x4e8c;\x56db\x5341\x4e09;\x56db\x5341\x56db;\x56db\x5341\x4e94;\x56db\x5341\x516d;\x56db\x5341\x4e03;\x56db\x5341\x516b;\x56db\x5341\x4e5d;\x4e94\x5341;\x4e94\x5341\x4e00;\x4e94\x5341\x4e8c;\x4e94\x5341\x4e09;\x4e94\x5341\x56db;\x4e94\x5341\x4e94;\x4e94\x5341\x516d;\x4e94\x5341\x4e03;\x4e94\x5341\x516b;\x4e94\x5341\x4e5d;\x516d\x5341;\x516d\x5341\x4e00;\x516d\x5341\x4e8c;\x516d\x5341\x4e09;\x516d\x5341\x56db;\x516d\x5341\x4e94;\x516d\x5341\x516d;\x516d\x5341\x4e03;\x516d\x5341\x516b;\x516d\x5341\x4e5d;\x4e03\x5341;\x4e03\x5341\x4e00;\x4e03\x5341\x4e8c;\x4e03\x5341\x4e09;\x4e03\x5341\x56db;\x4e03\x5341\x4e94;\x4e03\x5341\x516d;\x4e03\x5341\x4e03;\x4e03\x5341\x516b;\x4e03\x5341\x4e5d;\x516b\x5341;\x516b\x5341\x4e00;\x516b\x5341\x4e8c;\x516b\x5341\x4e09;\x516b\x5341\x56db;\x516b\x5341\x4e94;\x516b\x5341\x516d;\x516b\x5341\x4e03;\x516b\x5341\x516b;\x516b\x5341\x4e5d;\x4e5d\x5341;\x4e5d\x5341\x4e00;\x4e5d\x5341\x4e8c;\x4e5d\x5341\x4e09;\x4e5d\x5341\x56db;\x4e5d\x5341\x4e94;\x4e5d\x5341\x516d;\x4e5d\x5341\x4e03;\x4e5d\x5341\x516b;\x4e5d\x5341\x4e5d" },
- { "lo_LA", L"%a %e %b %Ey %H:%M:%S %Z", L"%d/%m/%Ey", L"%a %e %b %Ey, %H:%M:%S", L"%H:%M:%S", L"%I:%M:%S %p", L"+:1:-543/01/01:+*:\x0e9e.\x0eaa.:%EC %Ey", L"%e %b %Ey", L"\x0ea7\x0eb1\x0e99%A\x0e97\x0eb5\x0ec8 %e %B %EC %Ey, %H.%M.%S \x0e99.", L"%H.%M.%S \x0e99.", L"" },
- { "my_MM", L"%a %b %e %H:%M:%S %Z %Y", L"%OC%Oy %b %Od %A", L"%OC%Oy %b %Od %A %OI:%OM:%OS %Op %Z", L"%OI:%OM:%OS %p", L"%OI:%OM:%OS %p", L"", L"", L"", L"", L"\x1040\x1040;\x1040\x1041;\x1040\x1042;\x1040\x1043;\x1040\x1044;\x1040\x1045;\x1040\x1046;\x1040\x1047;\x1040\x1048;\x1040\x1049;\x1041\x1040;\x1041\x1041;\x1041\x1042;\x1041\x1043;\x1041\x1044;\x1041\x1045;\x1041\x1046;\x1041\x1047;\x1041\x1048;\x1041\x1049;\x1042\x1040;\x1042\x1041;\x1042\x1042;\x1042\x1043;\x1042\x1044;\x1042\x1045;\x1042\x1046;\x1042\x1047;\x1042\x1048;\x1042\x1049;\x1043\x1040;\x1043\x1041;\x1043\x1042;\x1043\x1043;\x1043\x1044;\x1043\x1045;\x1043\x1046;\x1043\x1047;\x1043\x1048;\x1043\x1049;\x1044\x1040;\x1044\x1041;\x1044\x1042;\x1044\x1043;\x1044\x1044;\x1044\x1045;\x1044\x1046;\x1044\x1047;\x1044\x1048;\x1044\x1049;\x1045\x1040;\x1045\x1041;\x1045\x1042;\x1045\x1043;\x1045\x1044;\x1045\x1045;\x1045\x1046;\x1045\x1047;\x1045\x1048;\x1045\x1049;\x1046\x1040;\x1046\x1041;\x1046\x1042;\x1046\x1043;\x1046\x1044;\x1046\x1045;\x1046\x1046;\x1046\x1047;\x1046\x1048;\x1046\x1049;\x1047\x1040;\x1047\x1041;\x1047\x1042;\x1047\x1043;\x1047\x1044;\x1047\x1045;\x1047\x1046;\x1047\x1047;\x1047\x1048;\x1047\x1049;\x1048\x1040;\x1048\x1041;\x1048\x1042;\x1048\x1043;\x1048\x1044;\x1048\x1045;\x1048\x1046;\x1048\x1047;\x1048\x1048;\x1048\x1049;\x1049\x1040;\x1049\x1041;\x1049\x1042;\x1049\x1043;\x1049\x1044;\x1049\x1045;\x1049\x1046;\x1049\x1047;\x1049\x1048;\x1049\x1049" },
- { "or_IN", L"%a %b %e %H:%M:%S %Z %Y", L"%Od-%Om-%Oy", L"%Oe %B %Oy %OI:%OM:%OS %p %Z", L"%OI:%OM:%OS %p", L"%OI:%OM:%OS %p", L"", L"", L"", L"", L"\x0b66;\x0b67;\x0b68;\x0b69;\x0b6a;\x0b6b;\x0b6c;\x0b6d;\x0b6e;\x0b6f;\x0b67\x0b66;\x0b67\x0b67;\x0b67\x0b68;\x0b67\x0b69;\x0b67\x0b6a;\x0b67\x0b6b;\x0b67\x0b6c;\x0b67\x0b6d;\x0b67\x0b6e;\x0b67\x0b6f;\x0b68\x0b66;\x0b68\x0b67;\x0b68\x0b68;\x0b68\x0b69;\x0b68\x0b6a;\x0b68\x0b6b;\x0b68\x0b6c;\x0b68\x0b6d;\x0b68\x0b6e;\x0b68\x0b6f;\x0b69\x0b66;\x0b69\x0b67;\x0b69\x0b68;\x0b69\x0b69;\x0b69\x0b6a;\x0b69\x0b6b;\x0b69\x0b6c;\x0b69\x0b6d;\x0b69\x0b6e;\x0b69\x0b6f;\x0b6a\x0b66;\x0b6a\x0b67;\x0b6a\x0b68;\x0b6a\x0b69;\x0b6a\x0b6a;\x0b6a\x0b6b;\x0b6a\x0b6c;\x0b6a\x0b6d;\x0b6a\x0b6e;\x0b6a\x0b6f;\x0b6b\x0b66;\x0b6b\x0b67;\x0b6b\x0b68;\x0b6b\x0b69;\x0b6b\x0b6a;\x0b6b\x0b6b;\x0b6b\x0b6c;\x0b6b\x0b6d;\x0b6b\x0b6e;\x0b6b\x0b6f;\x0b6c\x0b66;\x0b6c\x0b67;\x0b6c\x0b68;\x0b6c\x0b69;\x0b6c\x0b6a;\x0b6c\x0b6b;\x0b6c\x0b6c;\x0b6c\x0b6d;\x0b6c\x0b6e;\x0b6c\x0b6f;\x0b6d\x0b66;\x0b6d\x0b67;\x0b6d\x0b68;\x0b6d\x0b69;\x0b6d\x0b6a;\x0b6d\x0b6b;\x0b6d\x0b6c;\x0b6d\x0b6d;\x0b6d\x0b6e;\x0b6d\x0b6f;\x0b6e\x0b66;\x0b6e\x0b67;\x0b6e\x0b68;\x0b6e\x0b69;\x0b6e\x0b6a;\x0b6e\x0b6b;\x0b6e\x0b6c;\x0b6e\x0b6d;\x0b6e\x0b6e;\x0b6e\x0b6f;\x0b6f\x0b66;\x0b6f\x0b67;\x0b6f\x0b68;\x0b6f\x0b69;\x0b6f\x0b6a;\x0b6f\x0b6b;\x0b6f\x0b6c;\x0b6f\x0b6d;\x0b6f\x0b6e;\x0b6f\x0b6f" },
- { "th_TH", L"%a %e %b %Ey %H:%M:%S %Z", L"%d/%m/%Ey", L"%a %e %b %Ey, %H:%M:%S", L"%H:%M:%S", L"%I:%M:%S %p", L"+:1:-543/01/01:+*:\x0e1e.\x0e28.:%EC %Ey", L"%e %b %Ey", L"\x0e27\x0e31\x0e19%A\x0e17\x0e35\x0e48 %e %B %EC %Ey, %H.%M.%S \x0e19.", L"%H.%M.%S \x0e19.", L"" },
- { "uk_UA", L"%A, %-d %Om %Y %X %z", L"%d.%m.%y", L"%a, %d-%b-%Y %X %z", L"%T", L"", L"", L"", L"", L"", L"0;\x0441\x0456\x0447\x043d\x044f;\x043b\x044e\x0442\x043e\x0433\x043e;\x0431\x0435\x0440\x0435\x0437\x043d\x044f;\x043a\x0432\x0456\x0442\x043d\x044f;\x0442\x0440\x0430\x0432\x043d\x044f;\x0447\x0435\x0440\x0432\x043d\x044f;\x043b\x0438\x043f\x043d\x044f;\x0441\x0435\x0440\x043f\x043d\x044f;\x0432\x0435\x0440\x0435\x0441\x043d\x044f;\x0436\x043e\x0432\x0442\x043d\x044f;\x043b\x0438\x0441\x0442\x043e\x043f\x0430\x0434\x0430;\x0433\x0440\x0443\x0434\x043d\x044f" },
-};
diff --git a/winsup/cygwin/lc_msg.h b/winsup/cygwin/lc_msg.h
deleted file mode 100644
index 6d9fb6bf9..000000000
--- a/winsup/cygwin/lc_msg.h
+++ /dev/null
@@ -1,315 +0,0 @@
-/* This struct of LC_MESSAGES data has been generated by fetching locale
- data from a Linux system using glibc-2.17-11.fc19.x86_64 on 2013-08-19. */
-
-struct lc_msg_t
-{
- const char *locale;
- const wchar_t *yesexpr;
- const wchar_t *noexpr;
- const wchar_t *yesstr;
- const wchar_t *nostr;
-};
-
-static struct lc_msg_t lc_msg[] =
-{
- { "aa_DJ", L"^[oOyY].*", L"^[mnMN].*", L"", L"" },
- { "aa_ER", L"^[yY].*", L"^[mnMN].*", L"", L"" },
- { "aa_ER@saaho", L"^[yY].*", L"^[mnMN].*", L"", L"" },
- { "aa_ET", L"^[yY].*", L"^[mnMN].*", L"", L"" },
- { "af_ZA", L"^[jJyY]", L"^[nN]", L"", L"" },
- { "am_ET", L"^[yY].*", L"^[nN].*", L"", L"" },
- { "an_ES", L"^[sSyY].*", L"^[nN].*", L"", L"" },
- { "ar_AE", L"^[\x0646yY].*", L"^[\x0644nN].*", L"\x0646\x0639\x0645", L"\x0644\x0627" },
- { "ar_BH", L"^[\x0646yY].*", L"^[\x0644nN].*", L"\x0646\x0639\x0645", L"\x0644\x0627" },
- { "ar_DZ", L"^[\x0646yY].*", L"^[\x0644nN].*", L"\x0646\x0639\x0645", L"\x0644\x0627" },
- { "ar_EG", L"^[\x0646yY].*", L"^[\x0644nN].*", L"\x0646\x0639\x0645", L"\x0644\x0627" },
- { "ar_IN", L"^[\x0646yY].*", L"^[\x0644nN].*", L"\x0646\x0639\x0645", L"\x0644\x0627" },
- { "ar_IQ", L"^[\x0646yY].*", L"^[\x0644nN].*", L"\x0646\x0639\x0645", L"\x0644\x0627" },
- { "ar_JO", L"^[\x0646yY].*", L"^[\x0644nN].*", L"\x0646\x0639\x0645", L"\x0644\x0627" },
- { "ar_KW", L"^[\x0646yY].*", L"^[\x0644nN].*", L"\x0646\x0639\x0645", L"\x0644\x0627" },
- { "ar_LB", L"^[\x0646yY].*", L"^[\x0644nN].*", L"\x0646\x0639\x0645", L"\x0644\x0627" },
- { "ar_LY", L"^[\x0646yY].*", L"^[\x0644nN].*", L"\x0646\x0639\x0645", L"\x0644\x0627" },
- { "ar_MA", L"^[\x0646yY].*", L"^[\x0644nN].*", L"\x0646\x0639\x0645", L"\x0644\x0627" },
- { "ar_OM", L"^[\x0646yY].*", L"^[\x0644nN].*", L"\x0646\x0639\x0645", L"\x0644\x0627" },
- { "ar_QA", L"^[\x0646yY].*", L"^[\x0644nN].*", L"\x0646\x0639\x0645", L"\x0644\x0627" },
- { "ar_SA", L"^[\x0646yY].*", L"^[\x0644nN].*", L"\x0646\x0639\x0645", L"\x0644\x0627" },
- { "ar_SD", L"^[\x0646yY].*", L"^[\x0644nN].*", L"\x0646\x0639\x0645", L"\x0644\x0627" },
- { "ar_SY", L"^[\x0646yY].*", L"^[\x0644nN].*", L"\x0646\x0639\x0645", L"\x0644\x0627" },
- { "ar_TN", L"^[\x0646yY].*", L"^[\x0644nN].*", L"\x0646\x0639\x0645", L"\x0644\x0627" },
- { "ar_YE", L"^[\x0646yY].*", L"^[\x0644nN].*", L"\x0646\x0639\x0645", L"\x0644\x0627" },
- { "as_IN", L"^[yY\x09b9].*", L"^[nN\x09a8].*", L"\x09b9\x09df", L"\x09a8\x09b9\x09df" },
- { "ast_ES", L"^[sSyY].*", L"^[nN].*", L"", L"" },
- { "ayc_PE", L"^[uUsSyY].*", L"^[jJnN].*", L"Ukhamawa", L"Janiwa" },
- { "az_AZ", L"^[Bb].*", L"^[YyNn].*", L"b\x0259li", L"yox" },
- { "be_BY", L"^[\x0422\x0442Yy].*", L"^[\x041d\x043dNn].*", L"", L"" },
- { "be_BY@latin", L"^[TtYy].*", L"^[Nn].*", L"", L"" },
- { "bem_ZM", L"^[yYeE].*", L"^[nNaA].*", L"", L"" },
- { "ber_DZ", L"^[Bb].*", L"^[YyNn].*", L"b\x0259li", L"yox" },
- { "ber_MA", L"^[Bb].*", L"^[YyNn].*", L"b\x0259li", L"yox" },
- { "bg_BG", L"^[+1\x0414\x0434\x0044\x0064YyOo].*", L"^[-0\x041d\x043dNnKk].*", L"", L"" },
- { "bho_IN", L"^[yY].*", L"^[nN].*", L"", L"" },
- { "bn_BD", L"^[\x09b9\x09cd\x09af\x09be\x0981yY]", L"^[\x09a8\x09benN]", L"\x09b9\x09cd\x09af\x09be\x0981", L"\x09a8\x09be" },
- { "bn_IN", L"^[\x09b9\x09cd\x09af\x09be\x0981yY]", L"^[\x09a8\x09benN]", L"\x09b9\x09cd\x09af\x09be\x0981", L"\x09a8\x09be" },
- { "bo_CN", L"^[\x0f68Yy].*", L"^[\x0f58Nn].*", L"\x0f68\x0f72\x0f53", L"\x0f58\x0f7a\x0f53" },
- { "bo_IN", L"^[\x0f68Yy].*", L"^[\x0f58Nn].*", L"\x0f68\x0f72\x0f53", L"\x0f58\x0f7a\x0f53" },
- { "br_FR", L"^[oOyY].*", L"^[nN].*", L"", L"" },
- { "br_FR@euro", L"^[oOyY].*", L"^[nN].*", L"", L"" },
- { "brx_IN", L"^(\x0928\x0902\x0917\x094c|[yY])", L"^(\x0928\x0919\x093e|[nN])", L"", L"" },
- { "bs_BA", L"^[dDyY]*.", L"^[nN]*.", L"", L"" },
- { "byn_ER", L"^[yY].*", L"^[nN].*", L"", L"" },
- { "ca_AD", L"^[sSyY].*", L"^[nN].*", L"", L"" },
- { "ca_ES", L"^[sSyY].*", L"^[nN].*", L"", L"" },
- { "ca_ES@euro", L"^[sSyY].*", L"^[nN].*", L"", L"" },
- { "ca_FR", L"^[sSyY].*", L"^[nN].*", L"", L"" },
- { "ca_IT", L"^[sSyY].*", L"^[nN].*", L"", L"" },
- { "crh_UA", L"^[yYeE]", L"^[nNhH]", L"ebet", L"hay\x0131r" },
- { "cs_CZ", L"^[aAyY].*", L"^[nN].*", L"ano", L"ne" },
- { "csb_PL", L"^[JjTtYy].*", L"^[nN].*", L"", L"" },
- { "cv_RU", L"^[yY].*", L"^[nN].*", L"", L"" },
- { "cy_GB", L"^[iItTyY].*", L"^[nN].*", L"ie", L"na" },
- { "da_DK", L"^[1JjYy].*", L"^[0Nn].*", L"", L"" },
- { "de_AT", L"^[jJyY].*", L"^[nN].*", L"", L"" },
- { "de_AT@euro", L"^[jJyY].*", L"^[nN].*", L"", L"" },
- { "de_BE", L"^[jJyY].*", L"^[nN].*", L"", L"" },
- { "de_BE@euro", L"^[jJyY].*", L"^[nN].*", L"", L"" },
- { "de_CH", L"^[jJyY].*", L"^[nN].*", L"", L"" },
- { "de_DE", L"^[jJyY].*", L"^[nN].*", L"", L"" },
- { "de_DE@euro", L"^[jJyY].*", L"^[nN].*", L"", L"" },
- { "de_LU", L"^[jJyY].*", L"^[nN].*", L"", L"" },
- { "de_LU@euro", L"^[jJyY].*", L"^[nN].*", L"", L"" },
- { "doi_IN", L"^(\x0911\x0939|[yY])", L"^(\x0928\x093e|[nN])", L"", L"" },
- { "dv_MV", L"^[yY].*", L"^[nN].*", L"", L"" },
- { "dz_BT", L"^[\x0f68Yy].*", L"^[\x0f58Nn].*", L"\x0f68\x0f72\x0f53", L"\x0f58\x0f7a\x0f53" },
- { "el_CY", L"^[\x03bd\x039dyY].*", L"^[\x03bf\x039fnN].*", L"", L"" },
- { "el_GR", L"^[\x03bd\x039dyY].*", L"^[\x03bf\x039fnN].*", L"", L"" },
- { "en_AG", L"^[yY].*", L"^[nN].*", L"", L"" },
- { "en_AU", L"^[yY].*", L"^[nN].*", L"", L"" },
- { "en_BW", L"^[yY]", L"^[nN]", L"", L"" },
- { "en_CA", L"^[yYoO].*", L"^[nN].*", L"", L"" },
- { "en_DK", L"^[1JjsSyYoO].*", L"^[0nN].*", L"", L"" },
- { "en_GB", L"^[yY].*", L"^[nN].*", L"", L"" },
- { "en_HK", L"^[yY]", L"^[nN]", L"Yes", L"No" },
- { "en_IE", L"^[yY].*", L"^[nN].*", L"", L"" },
- { "en_IE@euro", L"^[yY].*", L"^[nN].*", L"", L"" },
- { "en_IN", L"^[yY]", L"^[nN]", L"Yes", L"No" },
- { "en_NG", L"^[yY]", L"^[nN]", L"", L"" },
- { "en_NZ", L"^[yY].*", L"^[nN].*", L"", L"" },
- { "en_PH", L"^[yY]", L"^[nN]", L"Yes", L"No" },
- { "en_SG", L"^[yY]", L"^[nN]", L"Yes", L"No" },
- { "en_US", L"^[yY].*", L"^[nN].*", L"Yes", L"No" },
- { "en_ZA", L"^[yY]", L"^[nN]", L"", L"" },
- { "en_ZM", L"^[yYeE].*", L"^[nNaA].*", L"", L"" },
- { "en_ZW", L"^[yY]", L"^[nN]", L"", L"" },
- { "es_AR", L"^[sSyY].*", L"^[nN].*", L"", L"" },
- { "es_BO", L"^[sSyY].*", L"^[nN].*", L"", L"" },
- { "es_CL", L"^[sSyY].*", L"^[nN].*", L"", L"" },
- { "es_CO", L"^[sSyY].*", L"^[nN].*", L"", L"" },
- { "es_CR", L"^[sSyY].*", L"^[nN].*", L"", L"" },
- { "es_CU", L"^[sSyY].*", L"^[nN].*", L"", L"" },
- { "es_DO", L"^[sSyY].*", L"^[nN].*", L"", L"" },
- { "es_EC", L"^[sSyY].*", L"^[nN].*", L"", L"" },
- { "es_ES", L"^[sSyY].*", L"^[nN].*", L"", L"" },
- { "es_ES@euro", L"^[sSyY].*", L"^[nN].*", L"", L"" },
- { "es_GT", L"^[sSyY].*", L"^[nN].*", L"", L"" },
- { "es_HN", L"^[sSyY].*", L"^[nN].*", L"", L"" },
- { "es_MX", L"^[sSyY].*", L"^[nN].*", L"", L"" },
- { "es_NI", L"^[sSyY].*", L"^[nN].*", L"", L"" },
- { "es_PA", L"^[sSyY].*", L"^[nN].*", L"", L"" },
- { "es_PE", L"^[sSyY].*", L"^[nN].*", L"", L"" },
- { "es_PR", L"^[sSyY].*", L"^[nN].*", L"", L"" },
- { "es_PY", L"^[sSyY].*", L"^[nN].*", L"", L"" },
- { "es_SV", L"^[sSyY].*", L"^[nN].*", L"", L"" },
- { "es_US", L"^[sSyY].*", L"^[nN].*", L"", L"" },
- { "es_UY", L"^[sSyY].*", L"^[nN].*", L"", L"" },
- { "es_VE", L"^[sSyY].*", L"^[nN].*", L"", L"" },
- { "et_EE", L"^[JjYy].*", L"^[EeNn].*", L"", L"" },
- { "eu_ES", L"^[bBsSyY].*", L"^[eEnN].*", L"", L"" },
- { "eu_ES@euro", L"^[bBsSyY].*", L"^[eEnN].*", L"", L"" },
- { "fa_IR", L"^[yY\x0622\x0628Hf].*", L"^[nN\x062e\x0646ok].*", L"", L"" },
- { "ff_SN", L"^[yYeE].*", L"^[nNaA].*", L"", L"" },
- { "fi_FI", L"^[KkYy].*", L"^[EeNn].*", L"", L"" },
- { "fi_FI@euro", L"^[KkYy].*", L"^[EeNn].*", L"", L"" },
- { "fil_PH", L"[oOyY].*", L"[hHnN].*", L"oo", L"hindi" },
- { "fo_FO", L"^[JjYy].*", L"^[Nn].*", L"", L"" },
- { "fr_BE", L"^[oOjJyY1].*", L"^[nN0].*", L"", L"" },
- { "fr_BE@euro", L"^[oOjJyY1].*", L"^[nN0].*", L"", L"" },
- { "fr_CA", L"^[oOyY].*", L"^[nN].*", L"", L"" },
- { "fr_CH", L"^[OojJsSyY].*", L"^[nN].*", L"", L"" },
- { "fr_FR", L"^[oOyY].*", L"^[nN].*", L"", L"" },
- { "fr_FR@euro", L"^[oOyY].*", L"^[nN].*", L"", L"" },
- { "fr_LU", L"^[oOyY].*", L"^[nN].*", L"", L"" },
- { "fr_LU@euro", L"^[oOyY].*", L"^[nN].*", L"", L"" },
- { "fur_IT", L"^[sSjJoOyY].*", L"^[nN].*", L"", L"" },
- { "fy_DE", L"^[jJyY].*", L"^[nN].*", L"", L"" },
- { "fy_NL", L"^[jJyY].*", L"^[nN].*", L"", L"" },
- { "ga_IE", L"^[tTyY].*", L"^[nN].*", L"", L"" },
- { "ga_IE@euro", L"^[tTyY].*", L"^[nN].*", L"", L"" },
- { "gd_GB", L"^[yY].*", L"^[nN].*", L"", L"" },
- { "gez_ER", L"^[yY].*", L"^[nN].*", L"", L"" },
- { "gez_ER@abegede", L"^[yY].*", L"^[nN].*", L"", L"" },
- { "gez_ET", L"^[yY].*", L"^[nN].*", L"", L"" },
- { "gez_ET@abegede", L"^[yY].*", L"^[nN].*", L"", L"" },
- { "gl_ES", L"^[sSyY].*", L"^[nN].*", L"", L"" },
- { "gl_ES@euro", L"^[sSyY].*", L"^[nN].*", L"", L"" },
- { "gu_IN", L"^[yY\x0ab9]", L"^[nN\x0aa8]", L"", L"" },
- { "gv_GB", L"^[yY].*", L"^[nN].*", L"", L"" },
- { "ha_NG", L"^[TtiIYy].*", L"^[bBaAnN].*", L"Toh", L"Babu" },
- { "he_IL", L"^[Yy\x05db].*", L"^[Nn\x05dc].*", L"", L"" },
- { "hi_IN", L"^[yY].*", L"^[nN].*", L"", L"" },
- { "hne_IN", L"^[\x0939\x0935yY]", L"^[\x0928\x0907nN]", L"\x0939\x0935", L"\x0928\x0907" },
- { "hr_HR", L"^[dDyY].*", L"^[nN].*", L"", L"" },
- { "hsb_DE", L"^[hHyY].*", L"^[nN].*", L"haj", L"n\x011b" },
- { "ht_HT", L"^[ooyy].*", L"^[nn].*", L"", L"" },
- { "hu_HU", L"^[IiYy].*", L"^[nN].*", L"", L"" },
- { "hy_AM", L"^[yYsS\x0561\x0531]", L"^[nN\x0578\x0548]", L"\x0561\x0575\x0578", L"\x0578\x0579" },
- { "ia_FR", L"^[sSyY].*", L"^[nN].*", L"Si", L"No" },
- { "id_ID", L"^[yY].*", L"^[tTnN].*", L"", L"" },
- { "ig_NG", L"^[EeIiYy].*", L"^[0MmNn].*", L"Ee", L"Mba" },
- { "ik_CA", L"[yYiIaA].*", L"[nNqQ].*", L"aa", L"qa\x00f1\x0061\x0061" },
- { "is_IS", L"^[jJyY].*", L"^[nN].*", L"", L"" },
- { "it_CH", L"^[sSjJoOyY].*", L"^[nN].*", L"", L"" },
- { "it_IT", L"^[sSyY].*", L"^[nN].*", L"", L"" },
- { "it_IT@euro", L"^[sSyY].*", L"^[nN].*", L"", L"" },
- { "iu_CA", L"[yYsS].*", L"[nN].*", L"", L"" },
- { "iw_IL", L"^[Yy\x05db].*", L"^[Nn\x05dc].*", L"", L"" },
- { "ja_JP", L"^([yY\xff59\xff39]|\x306f\x3044|\x30cf\x30a4)", L"^([nN\xff4e\xff2e]|\x3044\x3044\x3048|\x30a4\x30a4\x30a8)", L"\x306f\x3044", L"\x3044\x3044\x3048" },
- { "ka_GE", L"^[1yYkKxX\x10ee].*", L"^[0nNaA\x10d0].*", L"", L"" },
- { "kk_KZ", L"^[\x0418\x0438Yy].*", L"^[\x0416\x0436Nn].*", L"", L"" },
- { "kl_GL", L"^[JjYyAa].*", L"^[Nn].*", L"", L"" },
- { "km_KH", L"^[yY]([eE][sS])?", L"^[nN][oO]?", L"yes:YES:y:Y", L"no:NO:n:N" },
- { "kn_IN", L"^[yY].*", L"^[nN].*", L"", L"" },
- { "ko_KR", L"^[yY\xc608]", L"^[nN\xc544]", L"", L"\xc544\xb2c8\xc624" },
- { "kok_IN", L"^(\x0939\x092f|[yY])", L"^(\x0928\x094d\x0939\x0940|[nN])", L"", L"" },
- { "ks_IN", L"^[\x0622yY].*", L"^[\x0646nN].*", L"\x0622", L"\x0646\x0639" },
- { "ks_IN@devanagari", L"^[yY].*", L"^[nN].*", L"", L"" },
- { "ku_TR", L"^[eEdDyY].*", L"^[nN].*", L"er\x00ea", L"n\x00e2" },
- { "kw_GB", L"^[eEyY].*", L"^[nN].*", L"", L"" },
- { "ky_KG", L"^[\x041e\x043eYy].*", L"^[\x0416\x0436Nn].*", L"\x041e\x043e\x0431\x0430", L"\x0416\x043e\x043a" },
- { "lb_LU", L"^[jJyY].*", L"^[nN].*", L"", L"" },
- { "lg_UG", L"^[yY]", L"^[nN]", L"", L"" },
- { "li_BE", L"^[jJyY].*", L"^[nN].*", L"", L"" },
- { "li_NL", L"^[jJyY].*", L"^[nN].*", L"", L"" },
- { "lij_IT", L"^[sSyY].*", L"^[nN].*", L"", L"" },
- { "lo_LA", L"^[yY\x0ea1]", L"^[nN\x0e9a]", L"\x0ec1\x0ea1\x0ec8\x0e99", L"\x0e9a\x0ecd\x0ec8\x0ec1\x0ea1\x0ec8\x0e99" },
- { "lt_LT", L"^[TtYy].*", L"^[Nn].*", L"", L"" },
- { "lv_LV", L"^[JjYy].*", L"^[Nn].*", L"", L"" },
- { "mag_IN", L"^[yY].*", L"^[nN].*", L"", L"" },
- { "mai_IN", L"^[yY].*", L"^[nN].*", L"", L"" },
- { "mg_MG", L"^[eEyY].*", L"^[tTnN].*", L"", L"" },
- { "mhr_RU", L"^[\x0422\x0442Yy].*", L"^[\x0423\x0443Nn].*", L"", L"" },
- { "mi_NZ", L"^[1yY\x0101\x0100\x00e4\x00c4\x0061\x0041].*", L"^[0nNkK].*", L"\x0101\x0065", L"k\x0101ore" },
- { "mk_MK", L"^[\x0414\x0434\x0044\x0064Yy1].*", L"^[\x041d\x043dNn0].*", L"\x0434\x0430", L"\x043d\x0435" },
- { "ml_IN", L"^[\x0d05\x0d24\x0d46yY]", L"^[\x0d05\x0d32\x0d4d\x0d32nN]", L"\x0d05\x0d24\x0d46", L"\x0d05\x0d32\x0d4d\x0d32" },
- { "mn_MN", L"^[\x0442\x0422yY].*", L"^[\x04af\x04aenN].*", L"", L"" },
- { "mni_IN", L"^[yY]", L"^[nN]", L"Yes", L"No" },
- { "mr_IN", L"^(Yes|[yY])", L"^(No|[nN])", L"", L"" },
- { "ms_MY", L"^[yY]", L"^[tT]", L"Ya", L"Tidak" },
- { "mt_MT", L"^(Yes|[yY])", L"^(No|[nN])", L"", L"" },
- { "my_MM", L"^[yY\x101f].*", L"^[nN\x1019].*", L"\x101f\x102f\x1010\x103a\x1010\x101a\x103a", L"\x1019\x101f\x102f\x1010\x103a\x1018\x1030\x1038" },
- { "nan_TW@latin", L"^[sS].*", L"^[mM].*", L"S\x012b", L"M\x0304-S\x012b" },
- { "nb_NO", L"^[JjYy].*", L"^[Nn].*", L"", L"" },
- { "nds_DE", L"^[jJyY].*", L"^[nN].*", L"", L"" },
- { "nds_NL", L"^[jJyY].*", L"^[nN].*", L"", L"" },
- { "ne_NP", L"^[yY].*", L"^[nN].*", L"", L"" },
- { "nhn_MX", L"^[sSqQyY].*", L"^[nNaA].*", L"quema", L"ahmo" },
- { "niu_NU", L"^[\x0113\x0112yY].*", L"^[nN].*", L"Talia", L"Nakai" },
- { "niu_NZ", L"^[\x0113\x0112yY].*", L"^[nN].*", L"Talia", L"Nakai" },
- { "nl_AW", L"^[jJyY].*", L"^[nN].*", L"", L"" },
- { "nl_BE", L"^[jJyY].*", L"^[nN].*", L"", L"" },
- { "nl_BE@euro", L"^[jJyY].*", L"^[nN].*", L"", L"" },
- { "nl_NL", L"^[jJyY].*", L"^[nN].*", L"", L"" },
- { "nl_NL@euro", L"^[jJyY].*", L"^[nN].*", L"", L"" },
- { "nn_NO", L"^[JjYy].*", L"^[Nn].*", L"", L"" },
- { "no_NO", L"^[JjYy].*", L"^[Nn].*", L"", L"" },
- { "nr_ZA", L"^[yY]", L"^[nN]", L"", L"" },
- { "nso_ZA", L"^[yYeE]", L"^[nNaA]", L"", L"" },
- { "oc_FR", L"^[oOsSyY].*", L"^[nN].*", L"", L"" },
- { "om_ET", L"^[yY].*", L"^[nN].*", L"", L"" },
- { "om_KE", L"^[yY].*", L"^[nN].*", L"", L"" },
- { "or_IN", L"^[yY].*", L"^[nN].*", L"", L"" },
- { "os_RU", L"^[\x0423\x0434Yy].*", L"^[\x0443\x043dNn].*", L"", L"" },
- { "pa_IN", L"^[yY].*", L"^[nN].*", L"", L"" },
- { "pa_PK", L"^[yY\x0647\x0628\x0066].*", L"^[nN\x0646o].*", L"\x0628\x0644\x0643\x0644", L"\x0646\x0647\x064a\x06ba" },
- { "pap_AN", L"^[jJyY].*", L"^[nN].*", L"", L"" },
- { "pl_PL", L"^[TtYy].*", L"^[nN].*", L"", L"" },
- { "ps_AF", L"^[yY\x0628\x0066].*", L"^[nN\x062e\x0646o].*", L"", L"" },
- { "pt_BR", L"^[SsyY].*", L"^[nN].*", L"", L"" },
- { "pt_PT", L"^[SsyY].*", L"^[nN].*", L"", L"" },
- { "pt_PT@euro", L"^[SsyY].*", L"^[nN].*", L"", L"" },
- { "ro_RO", L"^[DdYy].*", L"^[nN].*", L"", L"" },
- { "ru_RU", L"^[\x0414\x0434Yy].*", L"^[\x041d\x043dNn].*", L"", L"" },
- { "ru_UA", L"^[\x0414\x0434Yy].*", L"^[\x041d\x043dNn].*", L"", L"" },
- { "rw_RW", L"^[yY]", L"^[nNoO]", L"", L"" },
- { "sa_IN", L"^[aAyY].*", L"^[nN].*", L"", L"" },
- { "sat_IN", L"^(\x0939\x094b\x092f|[yY])", L"^(\x092c\x093e\x0919|[nN])", L"", L"" },
- { "sc_IT", L"^[sSjJoOyY].*", L"^[nN].*", L"", L"" },
- { "sd_IN", L"^[\x0646yY].*", L"^[\x0644nN].*", L"\x0646\x0639\x0645", L"\x0644\x0627" },
- { "sd_IN@devanagari", L"^[yY].*", L"^[nN].*", L"", L"" },
- { "se_NO", L"^[JjYy].*", L"^[Ii].*", L"", L"" },
- { "shs_CA", L"^[yYoO].*", L"^[nN].*", L"", L"" },
- { "si_LK", L"^[\x0d94Yy]", L"^[\x0db1Nn]", L"\x0d94\x0dc0\x0dca", L"\x0db1\x0dd0\x0dad" },
- { "sid_ET", L"^[yY].*", L"^[nN].*", L"", L"" },
- { "sk_SK", L"^[aA\x00e1\x00c1yY].*", L"^[nN].*", L"\x00e1no", L"nie" },
- { "sl_SI", L"^[YyJj].*", L"^[Nn].*", L"", L"" },
- { "so_DJ", L"^[oOyY].*", L"^[nN].*", L"", L"" },
- { "so_ET", L"^[yY].*", L"^[nN].*", L"", L"" },
- { "so_KE", L"^[yY].*", L"^[nN].*", L"", L"" },
- { "so_SO", L"^[yY].*", L"^[nN].*", L"", L"" },
- { "sq_AL", L"^[yYpP].*", L"^[nNjJ].*", L"", L"" },
- { "sq_MK", L"^[yYpP].*", L"^[nNjJ].*", L"", L"" },
- { "sr_CS", L"^[\x0414\x0434\x0044\x0064Yy]", L"^[\x041d\x043dNn]", L"", L"" },
- { "sr_CS@latin", L"^[dDyY]", L"^[nN]", L"", L"" },
- { "sr_ME", L"^[\x0414\x0434\x0044\x0064Yy]", L"^[\x041d\x043dNn]", L"", L"" },
- { "sr_ME@latin", L"^[dDyY]", L"^[nN]", L"", L"" },
- { "sr_RS", L"^[\x0414\x0434\x0044\x0064Yy]", L"^[\x041d\x043dNn]", L"", L"" },
- { "sr_RS@latin", L"^[dDyY]", L"^[nN]", L"", L"" },
- { "sr_SP", L"^[\x0414\x0434\x0044\x0064Yy]", L"^[\x041d\x043dNn]", L"", L"" },
- { "sr_SP@latin", L"^[dDyY]", L"^[nN]", L"", L"" },
- { "ss_ZA", L"^[yY]", L"^[nNaA]", L"", L"" },
- { "st_ZA", L"^[yY]", L"^[nN]", L"", L"" },
- { "sv_FI", L"^[jJyY].*", L"^[nN].*", L"", L"" },
- { "sv_FI@euro", L"^[jJyY].*", L"^[nN].*", L"", L"" },
- { "sv_SE", L"^[jJyY].*", L"^[nN].*", L"", L"" },
- { "sw_KE", L"^[nNyY].*", L"^[hHlL].*", L"", L"" },
- { "sw_TZ", L"^[nNyY].*", L"^[hHlL].*", L"", L"" },
- { "szl_PL", L"^[JjTtYy].*", L"^[nN].*", L"", L"" },
- { "ta_IN", L"^[\x0b86\x0bae\x0bcdyY]", L"^[\x0b87\x0bb2\x0bcd\x0bb2\x0bc8nN]", L"\x0b86\x0bae\x0bcd", L"\x0b87\x0bb2\x0bcd\x0bb2\x0bc8" },
- { "ta_LK", L"^[\x0b86\x0bae\x0bcdyY]", L"^[\x0b87\x0bb2\x0bcd\x0bb2\x0bc8nN]", L"\x0b86\x0bae\x0bcd", L"\x0b87\x0bb2\x0bcd\x0bb2\x0bc8" },
- { "te_IN", L"^[yY\x0c05].*", L"^[nN\x0c15].*", L"\x0c05\x0c35\x0c28\x0c41", L"\x0c15\x0c3e\x0c26\x0c41" },
- { "tg_TJ", L"^[\x04b2\x04b3\x0425\x0445\x0414\x0434Yy].*", L"^[\x041d\x043dNn].*", L"\x0434\x0430", L"\x043d\x0435\x0442" },
- { "th_TH", L"^[yY\x0e0a]", L"^[nN\x0e21]", L"\x0e43\x0e0a\x0e48", L"\x0e44\x0e21\x0e48\x0e43\x0e0a\x0e48" },
- { "ti_ER", L"^[yY].*", L"^[nN].*", L"", L"" },
- { "ti_ET", L"^[yY].*", L"^[nN].*", L"", L"" },
- { "tig_ER", L"^[yY].*", L"^[nN].*", L"", L"" },
- { "tk_TM", L"^[hH].*", L"^[\x00fd\x00ddnN].*", L"hawa", L"\x00fdok" },
- { "tl_PH", L"^[yY].*", L"^[nN].*", L"Yes", L"No" },
- { "tn_ZA", L"^[yYeE]", L"^[nN]", L"", L"" },
- { "tr_CY", L"^[yYeE]", L"^[nNhH]", L"evet", L"hay\x0131r" },
- { "tr_TR", L"^[yYeE]", L"^[nNhH]", L"evet", L"hay\x0131r" },
- { "ts_ZA", L"^[yY]", L"^[nN]", L"", L"" },
- { "tt_RU", L"^[\x0414\x0434Yy].*", L"^[\x041d\x043dNn].*", L"\x04d8\x0439\x0435", L"\x042e\x043a" },
- { "tt_RU@iqtelif", L"^[Ee].*", L"^[YyNn].*", L"ey\x00ed", L"yuq" },
- { "ug_CN", L"^[yY].*", L"^[nN].*", L"Yes", L"No" },
- { "uk_UA", L"^([Yy+]|[\x0422\x0442][\x0410\x0430][\x041a\x043a]?)$", L"^([Nn-]|[\x041d\x043d][\x0406\x0456])$", L"\x0442\x0430\x043a", L"\x043d\x0456" },
- { "unm_US", L"^[yY].*", L"^[kKmM].*", L"", L"" },
- { "ur_IN", L"^[\x06c1yY].*", L"^[\x0646nN].*", L"\x06c1\x0627\x06ba", L"\x0646\x06c1\x06cc\x06ba" },
- { "ur_PK", L"^[yY\x0647\x0628\x0066].*", L"^[nN\x0646o].*", L"\x0628\x0644\x0643\x0644", L"\x0646\x0647\x064a\x06ba" },
- { "uz_UZ", L"^[yY\x0647\x0628\x0066].*", L"^[nN\x0646o].*", L"\x0628\x0644\x0643\x0644", L"\x0646\x0647\x064a\x06ba" },
- { "uz_UZ@cyrillic", L"^[\x04b2\x04b3Yy].*", L"^[\x0419\x0439Nn].*", L"\x04b2\x0430", L"\x0419\x045e\x049b" },
- { "ve_ZA", L"^[yYeE]", L"^[nNhH]", L"", L"" },
- { "vi_VN", L"^[1yYcC].*", L"^[0nNkK].*", L"C\x00f3", L"Kh\x00f4ng" },
- { "wa_BE", L"^[oOyYaAwW].*", L"^[nN].*", L"Oyi", L"Neni" },
- { "wa_BE@euro", L"^[oOyYaAwW].*", L"^[nN].*", L"Oyi", L"Neni" },
- { "wae_CH", L"^[jJyY].*", L"^[nN].*", L"Ja", L"Nei" },
- { "wal_ET", L"^[yY].*", L"^[nN].*", L"", L"" },
- { "wo_SN", L"^[wWyY].*", L"^[dDnN].*", L"", L"" },
- { "xh_ZA", L"^[yYeE]", L"^[nNhH]", L"", L"" },
- { "yi_US", L"^[Yy\x05d9].*", L"^[Nn\x05e0\x05e7].*", L"\x05d9\x05d0\x05b8", L"\x05e7\x05f2\x05df" },
- { "yo_NG", L"^[EeyY].*", L"^[rROoKkNn].*", L"B\x1eb9\x0301\x1eb9\x0300 ni", L"B\x1eb9\x0301\x1eb9\x0300 k\x1ecd\x0301" },
- { "yue_HK", L"^[yY]", L"^[nN]", L"", L"" },
- { "zh_CN", L"^[yY\x662f]", L"^[nN\x4e0d\x5426]", L"", L"" },
- { "zh_HK", L"^[yY\x662f]", L"^[nN\x4e0d\x5426]", L"", L"" },
- { "zh_SG", L"^[yY]", L"^[nN]", L"Yes", L"No" },
- { "zh_TW", L"^[yY\x662f]", L"^[nN\x4e0d\x5426]", L"", L"" },
- { "zu_ZA", L"^[yY]", L"^[nNcC]", L"", L"" },
-};
diff --git a/winsup/cygwin/ldap.cc b/winsup/cygwin/ldap.cc
deleted file mode 100644
index 9daf89b6d..000000000
--- a/winsup/cygwin/ldap.cc
+++ /dev/null
@@ -1,675 +0,0 @@
-/* ldap.cc: Helper functions for ldap access to Active Directory.
-
- Copyright 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include "ldap.h"
-#include "cygerrno.h"
-#include "security.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "registry.h"
-#include "pinfo.h"
-#include "lm.h"
-#include "dsgetdc.h"
-#include "tls_pbuf.h"
-
-#define CYG_LDAP_ENUM_PAGESIZE 100 /* entries per page */
-
-static PWCHAR rootdse_attr[] =
-{
- (PWCHAR) L"defaultNamingContext",
- (PWCHAR) L"supportedCapabilities",
- NULL
-};
-
-static const PCWSTR std_user_attr[] =
-{
- L"primaryGroupID",
- L"uidNumber",
- L"cygwinUnixUid", /* TODO */
- /* windows scheme */
- L"displayName",
- L"homeDrive",
- L"homeDirectory",
- /* cygwin scheme */
- L"cygwinGecos",
- L"cygwinHome",
- L"cygwinShell",
- /* unix scheme */
- L"gecos",
- L"unixHomeDirectory",
- L"loginShell",
- /* desc scheme */
- L"description"
-};
-
-static PWCHAR group_attr[] =
-{
- (PWCHAR) L"cn",
- (PWCHAR) L"gidNumber",
- (PWCHAR) L"cygwinUnixGid", /* TODO */
- NULL
-};
-
-PWCHAR tdom_attr[] =
-{
- (PWCHAR) L"trustPosixOffset",
- NULL
-};
-
-PWCHAR sid_attr[] =
-{
- (PWCHAR) L"objectSid",
- NULL
-};
-
-PWCHAR rfc2307_uid_attr[] =
-{
- (PWCHAR) L"uid",
- NULL
-};
-
-PWCHAR rfc2307_gid_attr[] =
-{
- (PWCHAR) L"cn",
- NULL
-};
-
-/* ================================================================= */
-/* Helper method of cygheap_pwdgrp class. It sets the user attribs */
-/* from the settings in nsswitch.conf. */
-/* ================================================================= */
-
-#define user_attr (cygheap->pg.ldap_user_attr)
-
-void
-cygheap_pwdgrp::init_ldap_user_attr ()
-{
- ldap_user_attr = (PWCHAR *)
- ccalloc_abort (HEAP_BUF, sizeof (std_user_attr) / sizeof (*std_user_attr)
- + 3 * NSS_SCHEME_MAX + 1, sizeof (PWCHAR));
- memcpy (ldap_user_attr, std_user_attr, sizeof (std_user_attr));
- uint16_t freeattr_idx = sizeof (std_user_attr) / sizeof (*std_user_attr);
- for (uint16_t idx = 0; idx < NSS_SCHEME_MAX; ++idx)
- {
- if (home_scheme[idx].method == NSS_SCHEME_FREEATTR)
- ldap_user_attr[freeattr_idx++] = home_scheme[idx].attrib;
- if (shell_scheme[idx].method == NSS_SCHEME_FREEATTR)
- ldap_user_attr[freeattr_idx++] = shell_scheme[idx].attrib;
- if (gecos_scheme[idx].method == NSS_SCHEME_FREEATTR)
- ldap_user_attr[freeattr_idx++] = gecos_scheme[idx].attrib;
- }
-}
-
-/* ================================================================= */
-/* Helper methods. */
-/* ================================================================= */
-
-inline int
-cyg_ldap::map_ldaperr_to_errno (ULONG lerr)
-{
- switch (lerr)
- {
- case LDAP_SUCCESS:
- return NO_ERROR;
- case LDAP_NO_RESULTS_RETURNED:
- /* LdapMapErrorToWin32 maps LDAP_NO_RESULTS_RETURNED to ERROR_MORE_DATA,
- which in turn is mapped to EMSGSIZE by geterrno_from_win_error. This
- is SO wrong, especially considering that LDAP_MORE_RESULTS_TO_RETURN
- is mapped to ERROR_MORE_DATA as well :-P */
- return ENMFILE;
- default:
- break;
- }
- return geterrno_from_win_error (LdapMapErrorToWin32 (lerr));
-}
-
-inline int
-cyg_ldap::wait (cygthread *thr)
-{
- if (!thr)
- return EIO;
- if (cygwait (*thr, INFINITE, cw_sig | cw_sig_eintr) != WAIT_OBJECT_0)
- {
- thr->terminate_thread ();
- _my_tls.call_signal_handler ();
- return EINTR;
- }
- thr->detach ();
- return 0;
-}
-
-/* ================================================================= */
-/* Helper struct and functions for interruptible LDAP initalization. */
-/* ================================================================= */
-
-struct cyg_ldap_init {
- cyg_ldap *that;
- PCWSTR domain;
- bool ssl;
- ULONG ret;
-};
-
-ULONG
-cyg_ldap::connect_ssl (PCWSTR domain)
-{
- ULONG ret;
-
- if (!(lh = ldap_sslinitW ((PWCHAR) domain, LDAP_SSL_PORT, 1)))
- {
- debug_printf ("ldap_init(%W) error 0x%02x", domain, LdapGetLastError ());
- return LdapGetLastError ();
- }
- if ((ret = ldap_bind_s (lh, NULL, NULL, LDAP_AUTH_NEGOTIATE)) != LDAP_SUCCESS)
- debug_printf ("ldap_bind(%W) 0x%02x", domain, ret);
- else if ((ret = ldap_search_sW (lh, NULL, LDAP_SCOPE_BASE,
- (PWCHAR) L"(objectclass=*)", rootdse_attr,
- 0, &msg))
- != LDAP_SUCCESS)
- debug_printf ("ldap_search(%W, ROOTDSE) error 0x%02x", domain, ret);
- return ret;
-}
-
-ULONG
-cyg_ldap::connect_non_ssl (PCWSTR domain)
-{
- ULONG ret;
-
- if (!(lh = ldap_initW ((PWCHAR) domain, LDAP_PORT)))
- {
- debug_printf ("ldap_init(%W) error 0x%02x", domain, LdapGetLastError ());
- return LdapGetLastError ();
- }
- if ((ret = ldap_set_option (lh, LDAP_OPT_SIGN, LDAP_OPT_ON))
- != LDAP_SUCCESS)
- debug_printf ("ldap_set_option(LDAP_OPT_SIGN) error 0x%02x", ret);
- if ((ret = ldap_set_option (lh, LDAP_OPT_ENCRYPT, LDAP_OPT_ON))
- != LDAP_SUCCESS)
- debug_printf ("ldap_set_option(LDAP_OPT_ENCRYPT) error 0x%02x", ret);
- if ((ret = ldap_bind_s (lh, NULL, NULL, LDAP_AUTH_NEGOTIATE)) != LDAP_SUCCESS)
- debug_printf ("ldap_bind(%W) 0x%02x", domain, ret);
- else if ((ret = ldap_search_sW (lh, NULL, LDAP_SCOPE_BASE,
- (PWCHAR) L"(objectclass=*)", rootdse_attr,
- 0, &msg))
- != LDAP_SUCCESS)
- debug_printf ("ldap_search(%W, ROOTDSE) error 0x%02x", domain, ret);
- return ret;
-}
-
-static DWORD WINAPI
-ldap_init_thr (LPVOID param)
-{
- cyg_ldap_init *cl = (cyg_ldap_init *) param;
- cl->ret = cl->ssl ? cl->that->connect_ssl (cl->domain)
- : cl->that->connect_non_ssl (cl->domain);
- return 0;
-}
-
-inline int
-cyg_ldap::connect (PCWSTR domain)
-{
- /* FIXME? connect_ssl can take ages even when failing, so we're trying to
- do everything the non-SSL (but still encrypted) way. */
- cyg_ldap_init cl = { this, domain, false, NO_ERROR };
- cygthread *thr = new cygthread (ldap_init_thr, &cl, "ldap_init");
- return wait (thr) ?: map_ldaperr_to_errno (cl.ret);
-}
-
-/* ================================================================= */
-/* Helper struct and functions for interruptible LDAP search. */
-/* ================================================================= */
-
-struct cyg_ldap_search {
- cyg_ldap *that;
- PWCHAR base;
- PWCHAR filter;
- PWCHAR *attrs;
- ULONG ret;
-};
-
-ULONG
-cyg_ldap::search_s (PWCHAR base, PWCHAR filter, PWCHAR *attrs)
-{
- ULONG ret;
-
- if ((ret = ldap_search_sW (lh, base, LDAP_SCOPE_SUBTREE, filter,
- attrs, 0, &msg)) != LDAP_SUCCESS)
- debug_printf ("ldap_search_sW(%W,%W) error 0x%02x", base, filter, ret);
- return ret;
-}
-
-static DWORD WINAPI
-ldap_search_thr (LPVOID param)
-{
- cyg_ldap_search *cl = (cyg_ldap_search *) param;
- cl->ret = cl->that->search_s (cl->base, cl->filter, cl->attrs);
- return 0;
-}
-
-inline int
-cyg_ldap::search (PWCHAR base, PWCHAR filter, PWCHAR *attrs)
-{
- cyg_ldap_search cl = { this, base, filter, attrs, NO_ERROR };
- cygthread *thr = new cygthread (ldap_search_thr, &cl, "ldap_search");
- return wait (thr) ?: map_ldaperr_to_errno (cl.ret);
-}
-
-/* ================================================================= */
-/* Helper struct and functions for interruptible LDAP page search. */
-/* ================================================================= */
-
-struct cyg_ldap_next_page {
- cyg_ldap *that;
- ULONG ret;
-};
-
-ULONG
-cyg_ldap::next_page_s ()
-{
- ULONG total;
- ULONG ret;
-
- do
- {
- ret = ldap_get_next_page_s (lh, srch_id, NULL, CYG_LDAP_ENUM_PAGESIZE,
- &total, &srch_msg);
- }
- while (ret == LDAP_SUCCESS && ldap_count_entries (lh, srch_msg) == 0);
- if (ret && ret != LDAP_NO_RESULTS_RETURNED)
- debug_printf ("ldap_result() error 0x%02x", ret);
- return ret;
-}
-
-static DWORD WINAPI
-ldap_next_page_thr (LPVOID param)
-{
- cyg_ldap_next_page *cl = (cyg_ldap_next_page *) param;
- cl->ret = cl->that->next_page_s ();
- return 0;
-}
-
-inline int
-cyg_ldap::next_page ()
-{
- cyg_ldap_next_page cl = { this, NO_ERROR };
- cygthread *thr = new cygthread (ldap_next_page_thr, &cl, "ldap_next_page");
- return wait (thr) ?: map_ldaperr_to_errno (cl.ret);
-}
-
-/* ================================================================= */
-/* Public methods. */
-/* ================================================================= */
-
-int
-cyg_ldap::open (PCWSTR domain)
-{
- int ret = 0;
-
- /* Already open? */
- if (lh)
- return 0;
-
- if ((ret = connect (domain)) != NO_ERROR)
- goto err;
- /* Prime `ret' and fetch ROOTDSE search result. */
- ret = EIO;
- if (!(entry = ldap_first_entry (lh, msg)))
- {
- debug_printf ("No ROOTDSE entry for %W", domain);
- goto err;
- }
- if (!(val = ldap_get_valuesW (lh, entry, rootdse_attr[0])))
- {
- debug_printf ("No ROOTDSE value for %W", domain);
- goto err;
- }
- if (!(rootdse = wcsdup (val[0])))
- {
- debug_printf ("wcsdup(%W, ROOTDSE) %d", domain, get_errno ());
- goto err;
- }
- ldap_value_freeW (val);
- if ((val = ldap_get_valuesW (lh, entry, rootdse_attr[1])))
- {
- for (ULONG idx = 0; idx < ldap_count_valuesW (val); ++idx)
- if (!wcscmp (val[idx], LDAP_CAP_ACTIVE_DIRECTORY_OID_W))
- {
- isAD = true;
- break;
- }
- }
- ldap_value_freeW (val);
- val = NULL;
- ldap_msgfree (msg);
- msg = entry = NULL;
- return 0;
-err:
- close ();
- return ret;
-}
-
-void
-cyg_ldap::close ()
-{
- if (srch_id != NULL)
- ldap_search_abandon_page (lh, srch_id);
- if (lh)
- ldap_unbind (lh);
- if (srch_msg)
- ldap_msgfree (srch_msg);
- if (msg)
- ldap_msgfree (msg);
- if (val)
- ldap_value_freeW (val);
- if (rootdse)
- free (rootdse);
- lh = NULL;
- msg = entry = NULL;
- val = NULL;
- rootdse = NULL;
- srch_id = NULL;
- srch_msg = srch_entry = NULL;
-}
-
-bool
-cyg_ldap::fetch_ad_account (PSID sid, bool group, PCWSTR domain)
-{
- WCHAR filter[140], *f, *rdse = rootdse;
- LONG len = (LONG) RtlLengthSid (sid);
- PBYTE s = (PBYTE) sid;
- static WCHAR hex_wchars[] = L"0123456789abcdef";
- tmp_pathbuf tp;
-
- if (msg)
- {
- ldap_msgfree (msg);
- msg = entry = NULL;
- }
- if (val)
- {
- ldap_value_freeW (val);
- val = NULL;
- }
- f = wcpcpy (filter, L"(objectSid=");
- while (len-- > 0)
- {
- *f++ = L'\\';
- *f++ = hex_wchars[*s >> 4];
- *f++ = hex_wchars[*s++ & 0xf];
- }
- wcpcpy (f, L")");
- if (domain)
- {
- /* FIXME: This is a hack. The most correct solution is probably to
- open a connection to the DC of the trusted domain. But this always
- takes extra time, so we're trying to avoid it. If this results in
- problems, we know what to do. */
- rdse = tp.w_get ();
- PWCHAR r = rdse;
- for (PWCHAR dotp = (PWCHAR) domain; dotp && *dotp; domain = dotp)
- {
- dotp = wcschr (domain, L'.');
- if (dotp)
- *dotp++ = L'\0';
- if (r > rdse)
- *r++ = L',';
- r = wcpcpy (r, L"DC=");
- r = wcpcpy (r, domain);
- }
- }
- if (!user_attr)
- cygheap->pg.init_ldap_user_attr ();
- attr = group ? group_attr : user_attr;
- if (search (rdse, filter, attr) != 0)
- return false;
- if (!(entry = ldap_first_entry (lh, msg)))
- {
- debug_printf ("No entry for %W in rootdse %W", filter, rdse);
- return false;
- }
- return true;
-}
-
-int
-cyg_ldap::enumerate_ad_accounts (PCWSTR domain, bool group)
-{
- int ret;
- tmp_pathbuf tp;
- PCWSTR filter;
-
- close ();
- if ((ret = open (domain)) != NO_ERROR)
- return ret;
-
- if (!group)
- filter = L"(&(objectClass=User)"
- "(objectCategory=Person)"
- /* 512 == ADS_UF_NORMAL_ACCOUNT */
- "(userAccountControl:" LDAP_MATCHING_RULE_BIT_AND ":=512)"
- "(objectSid=*))";
- else if (!domain)
- filter = L"(&(objectClass=Group)"
- "(objectSid=*))";
- else
- filter = L"(&(objectClass=Group)"
- /* 1 == BUILTIN_LOCAL_GROUP */
- "(!(groupType:" LDAP_MATCHING_RULE_BIT_AND ":=1))"
- "(objectSid=*))";
- srch_id = ldap_search_init_pageW (lh, rootdse, LDAP_SCOPE_SUBTREE,
- (PWCHAR) filter, sid_attr, 0, NULL, NULL,
- INFINITE, CYG_LDAP_ENUM_PAGESIZE, NULL);
- if (srch_id == NULL)
- {
- debug_printf ("ldap_search_init_pageW(%W,%W) error 0x%02x",
- rootdse, filter, LdapGetLastError ());
- return map_ldaperr_to_errno (LdapGetLastError ());
- }
- return NO_ERROR;
-}
-
-int
-cyg_ldap::next_account (cygsid &sid)
-{
- ULONG ret;
- PLDAP_BERVAL *bval;
-
- if (srch_entry)
- {
- if ((srch_entry = ldap_next_entry (lh, srch_entry))
- && (bval = ldap_get_values_lenW (lh, srch_entry, sid_attr[0])))
- {
- sid = (PSID) bval[0]->bv_val;
- ldap_value_free_len (bval);
- return NO_ERROR;
- }
- ldap_msgfree (srch_msg);
- srch_msg = srch_entry = NULL;
- }
- ret = next_page ();
- if (ret == NO_ERROR)
- {
- if ((srch_entry = ldap_first_entry (lh, srch_msg))
- && (bval = ldap_get_values_lenW (lh, srch_entry, sid_attr[0])))
- {
- sid = (PSID) bval[0]->bv_val;
- ldap_value_free_len (bval);
- return NO_ERROR;
- }
- ret = EIO;
- }
- ldap_search_abandon_page (lh, srch_id);
- srch_id = NULL;
- return ret;
-}
-
-/* Return UINT32_MAX on error to allow differing between not being able
- to fetch a value and a real 0 offset. */
-uint32_t
-cyg_ldap::fetch_posix_offset_for_domain (PCWSTR domain)
-{
- WCHAR filter[300];
-
- if (msg)
- {
- ldap_msgfree (msg);
- msg = entry = NULL;
- }
- if (val)
- {
- ldap_value_freeW (val);
- val = NULL;
- }
- /* If domain name has no dot, it's a Netbios name. In that case, filter
- by flatName rather than by name. */
- __small_swprintf (filter, L"(&(objectClass=trustedDomain)(%W=%W))",
- wcschr (domain, L'.') ? L"name" : L"flatName", domain);
- if (search (rootdse, filter, attr = tdom_attr) != 0)
- return UINT32_MAX;
- if (!(entry = ldap_first_entry (lh, msg)))
- {
- debug_printf ("No entry for %W in rootdse %W", filter, rootdse);
- return UINT32_MAX;
- }
- return get_num_attribute (0);
-}
-
-PWCHAR
-cyg_ldap::get_string_attribute (PCWSTR name)
-{
- if (val)
- ldap_value_freeW (val);
- val = ldap_get_valuesW (lh, entry, (PWCHAR) name);
- if (val)
- return val[0];
- return NULL;
-}
-
-PWCHAR
-cyg_ldap::get_string_attribute (int idx)
-{
- return get_string_attribute (attr[idx]);
-}
-
-uint32_t
-cyg_ldap::get_num_attribute (int idx)
-{
- PWCHAR ret = get_string_attribute (attr[idx]);
- if (ret)
- return (uint32_t) wcstoul (ret, NULL, 10);
- return (uint32_t) -1;
-}
-
-bool
-cyg_ldap::fetch_unix_sid_from_ad (uint32_t id, cygsid &sid, bool group)
-{
- WCHAR filter[48];
- PLDAP_BERVAL *bval;
-
- if (msg)
- {
- ldap_msgfree (msg);
- msg = entry = NULL;
- }
- if (group)
- __small_swprintf (filter, L"(&(objectClass=Group)(gidNumber=%u))", id);
- else
- __small_swprintf (filter, L"(&(objectClass=User)(uidNumber=%u))", id);
- if (search (rootdse, filter, sid_attr) != 0)
- return false;
- if ((entry = ldap_first_entry (lh, msg))
- && (bval = ldap_get_values_lenW (lh, entry, sid_attr[0])))
- {
- sid = (PSID) bval[0]->bv_val;
- ldap_value_free_len (bval);
- return true;
- }
- return false;
-}
-
-PWCHAR
-cyg_ldap::fetch_unix_name_from_rfc2307 (uint32_t id, bool group)
-{
- WCHAR filter[52];
-
- if (msg)
- {
- ldap_msgfree (msg);
- msg = entry = NULL;
- }
- if (val)
- {
- ldap_value_freeW (val);
- val = NULL;
- }
- attr = group ? rfc2307_gid_attr : rfc2307_uid_attr;
- if (group)
- __small_swprintf (filter, L"(&(objectClass=posixGroup)(gidNumber=%u))", id);
- else
- __small_swprintf (filter, L"(&(objectClass=posixAccount)(uidNumber=%u))",
- id);
- if (search (rootdse, filter, attr) != 0)
- return NULL;
- if (!(entry = ldap_first_entry (lh, msg)))
- {
- debug_printf ("No entry for %W in rootdse %W", filter, rootdse);
- return NULL;
- }
- return get_string_attribute (0);
-}
-
-uid_t
-cyg_ldap::remap_uid (uid_t uid)
-{
- cygsid user (NO_SID);
- PWCHAR name;
- struct passwd *pw;
-
- if (isAD)
- {
- if (fetch_unix_sid_from_ad (uid, user, false)
- && user != NO_SID
- && (pw = internal_getpwsid (user, this)))
- return pw->pw_uid;
- }
- else if ((name = fetch_unix_name_from_rfc2307 (uid, false)))
- {
- char *mbname = NULL;
- sys_wcstombs_alloc (&mbname, HEAP_NOTHEAP, name);
- if ((pw = internal_getpwnam (mbname)))
- return pw->pw_uid;
- }
- return ILLEGAL_UID;
-}
-
-gid_t
-cyg_ldap::remap_gid (gid_t gid)
-{
- cygsid group (NO_SID);
- PWCHAR name;
- struct group *gr;
-
- if (isAD)
- {
- if (fetch_unix_sid_from_ad (gid, group, true)
- && group != NO_SID
- && (gr = internal_getgrsid (group, this)))
- return gr->gr_gid;
- }
- else if ((name = fetch_unix_name_from_rfc2307 (gid, true)))
- {
- char *mbname = NULL;
- sys_wcstombs_alloc (&mbname, HEAP_NOTHEAP, name);
- if ((gr = internal_getgrnam (mbname)))
- return gr->gr_gid;
- }
- return ILLEGAL_GID;
-}
diff --git a/winsup/cygwin/ldap.h b/winsup/cygwin/ldap.h
deleted file mode 100644
index d3c28fcbd..000000000
--- a/winsup/cygwin/ldap.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/* ldap.h.
-
- Copyright 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#pragma once
-
-#pragma push_macro ("DECLSPEC_IMPORT")
-#undef DECLSPEC_IMPORT
-#define DECLSPEC_IMPORT
-#include <winldap.h>
-#include <ntldap.h>
-#pragma pop_macro ("DECLSPEC_IMPORT")
-
-#define LDAP_USER_PGRP_ATTR 0
-#define LDAP_USER_UID_ATTR 1
-
-#define LDAP_GROUP_NAME_ATTR 0
-#define LDAP_GROUP_GID_ATTR 1
-
-class cyg_ldap {
- PLDAP lh;
- PWCHAR rootdse;
- PLDAPMessage msg, entry;
- PWCHAR *val;
- PWCHAR *attr;
- bool isAD;
- PLDAPSearch srch_id;
- PLDAPMessage srch_msg, srch_entry;
-
- inline int map_ldaperr_to_errno (ULONG lerr);
- inline int wait (cygthread *thr);
- inline int connect (PCWSTR domain);
- inline int search (PWCHAR base, PWCHAR filter, PWCHAR *attrs);
- inline int next_page ();
- bool fetch_unix_sid_from_ad (uint32_t id, cygsid &sid, bool group);
- PWCHAR fetch_unix_name_from_rfc2307 (uint32_t id, bool group);
- PWCHAR get_string_attribute (int idx);
- uint32_t get_num_attribute (int idx);
-
-public:
- cyg_ldap () : lh (NULL), rootdse (NULL), msg (NULL), entry (NULL), val (NULL),
- isAD (false), srch_id (NULL), srch_msg (NULL), srch_entry (NULL)
- {}
- ~cyg_ldap () { close (); }
-
- ULONG connect_ssl (PCWSTR domain);
- ULONG connect_non_ssl (PCWSTR domain);
- ULONG search_s (PWCHAR base, PWCHAR filter, PWCHAR *attrs);
- ULONG next_page_s ();
-
- operator PLDAP () const { return lh; }
- int open (PCWSTR in_domain);
- void close ();
- bool fetch_ad_account (PSID sid, bool group, PCWSTR domain = NULL);
- int enumerate_ad_accounts (PCWSTR domain, bool group);
- int next_account (cygsid &sid);
- uint32_t fetch_posix_offset_for_domain (PCWSTR domain);
- uid_t remap_uid (uid_t uid);
- gid_t remap_gid (gid_t gid);
- /* User only */
- gid_t get_primary_gid () { return get_num_attribute (LDAP_USER_PGRP_ATTR); }
- gid_t get_unix_uid () { return get_num_attribute (LDAP_USER_UID_ATTR); }
- /* group only */
- PWCHAR get_group_name ()
- { return get_string_attribute (LDAP_GROUP_NAME_ATTR); }
- gid_t get_unix_gid () { return get_num_attribute (LDAP_GROUP_GID_ATTR); }
- PWCHAR get_string_attribute (PCWSTR name);
-};
diff --git a/winsup/cygwin/lib/_cygwin_crt0_common.cc b/winsup/cygwin/lib/_cygwin_crt0_common.cc
deleted file mode 100644
index 718ce941e..000000000
--- a/winsup/cygwin/lib/_cygwin_crt0_common.cc
+++ /dev/null
@@ -1,194 +0,0 @@
-/* _cygwin_crt0_common.cc: common crt0 function for cygwin crt0's.
-
- Copyright 2000, 2001, 2002, 2003, 2004, 2009, 2010, 2011, 2012, 2013
- Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include "crt0.h"
-#include "cygwin-cxx.h"
-
-/* Weaken these declarations so the references don't pull in C++ dependencies
- unnecessarily. */
-#define WEAK __attribute__ ((weak))
-
-#ifdef __x86_64__
-#define REAL_ZNWX "__real__Znwm"
-#define REAL_ZNAX "__real__Znam"
-#define REAL_ZNWX_NOTHROW_T "__real__ZnwmRKSt9nothrow_t"
-#define REAL_ZNAX_NOTHROW_T "__real__ZnamRKSt9nothrow_t"
-#else
-#define REAL_ZNWX "___real__Znwj"
-#define REAL_ZNAX "___real__Znaj"
-#define REAL_ZNWX_NOTHROW_T "___real__ZnwjRKSt9nothrow_t"
-#define REAL_ZNAX_NOTHROW_T "___real__ZnajRKSt9nothrow_t"
-#endif
-#define REAL_ZDLPV _SYMSTR (__real__ZdlPv)
-#define REAL_ZDAPV _SYMSTR (__real__ZdaPv)
-#define REAL_ZDLPV_NOTHROW_T _SYMSTR (__real__ZdlPvRKSt9nothrow_t)
-#define REAL_ZDAPV_NOTHROW_T _SYMSTR (__real__ZdaPvRKSt9nothrow_t)
-
-/* Use asm names to bypass the --wrap that is being applied to redirect all other
- references to these operators toward the redirectors in the Cygwin DLL; this
- way we can record what definitions were visible at final link time but still
- send all calls to the redirectors. */
-extern WEAK void *operator new(std::size_t sz) throw (std::bad_alloc)
- __asm__ (REAL_ZNWX);
-extern WEAK void *operator new[](std::size_t sz) throw (std::bad_alloc)
- __asm__ (REAL_ZNAX);
-extern WEAK void operator delete(void *p) throw()
- __asm__ (REAL_ZDLPV);
-extern WEAK void operator delete[](void *p) throw()
- __asm__ (REAL_ZDAPV);
-extern WEAK void *operator new(std::size_t sz, const std::nothrow_t &nt) throw()
- __asm__ (REAL_ZNWX_NOTHROW_T);
-extern WEAK void *operator new[](std::size_t sz, const std::nothrow_t &nt) throw()
- __asm__ (REAL_ZNAX_NOTHROW_T);
-extern WEAK void operator delete(void *p, const std::nothrow_t &nt) throw()
- __asm__ (REAL_ZDLPV_NOTHROW_T);
-extern WEAK void operator delete[](void *p, const std::nothrow_t &nt) throw()
- __asm__ (REAL_ZDAPV_NOTHROW_T);
-
-/* Avoid an info message from linker when linking applications. */
-extern __declspec(dllimport) struct _reent *_impure_ptr;
-
-/* Initialised in _cygwin_dll_entry. */
-extern int __dynamically_loaded;
-
-#undef environ
-
-extern "C"
-{
-#ifndef __x86_64__
-char **environ;
-#endif
-int _fmode;
-
-extern char __RUNTIME_PSEUDO_RELOC_LIST__;
-extern char __RUNTIME_PSEUDO_RELOC_LIST_END__;
-#ifdef __x86_64__
-extern char __image_base__;
-#define _image_base__ __image_base__
-#else
-extern char _image_base__;
-#endif
-
-struct per_process_cxx_malloc __cygwin_cxx_malloc =
-{
- &(operator new), &(operator new[]),
- &(operator delete), &(operator delete[]),
- &(operator new), &(operator new[]),
- &(operator delete), &(operator delete[])
-};
-
-/* Set up pointers to various pieces so the dll can then use them,
- and then jump to the dll. */
-
-int __stdcall
-_cygwin_crt0_common (MainFunc f, per_process *u)
-{
- per_process *newu = (per_process *) cygwin_internal (CW_USER_DATA);
- bool uwasnull;
-
- /* u is non-NULL if we are in a DLL, and NULL in the main exe.
- newu is the Cygwin DLL's internal per_process and never NULL. */
- if (u != NULL)
- uwasnull = false; /* Caller allocated space for per_process structure. */
- else
- {
- u = newu; /* Using DLL built-in per_process. */
- uwasnull = true; /* Remember for later. */
- }
-
- /* The version numbers are the main source of compatibility checking.
- As a backup to them, we use the size of the per_process struct. */
- u->magic_biscuit = sizeof (per_process);
-
- /* cygwin.dll version number in effect at the time the app was created. */
- u->dll_major = CYGWIN_VERSION_DLL_MAJOR;
- u->dll_minor = CYGWIN_VERSION_DLL_MINOR;
- u->api_major = CYGWIN_VERSION_API_MAJOR;
- u->api_minor = CYGWIN_VERSION_API_MINOR;
-
- u->ctors = &__CTOR_LIST__;
- u->dtors = &__DTOR_LIST__;
-#ifndef __x86_64__
- u->envptr = &environ;
-#endif
- if (uwasnull)
- _impure_ptr = u->impure_ptr; /* Use field initialized in newer DLLs. */
- else
- u->impure_ptr_ptr = &_impure_ptr; /* Older DLLs need this. */
-
- u->main = f;
-
- /* These functions are executed prior to main. They are just stubs unless the
- user overrides them. */
- u->premain[0] = cygwin_premain0;
- u->premain[1] = cygwin_premain1;
- u->premain[2] = cygwin_premain2;
- u->premain[3] = cygwin_premain3;
- u->fmode_ptr = &_fmode;
-
- /* This is used to record what the initial sp was. The value is needed
- when copying the parent's stack to the child during a fork. */
- u->initial_sp = (char *) __builtin_frame_address (1);
-
- /* Remember whatever the user linked his application with - or
- point to entries in the dll. */
- u->malloc = &malloc;
- u->free = &free;
- u->realloc = &realloc;
- u->calloc = &calloc;
- u->posix_memalign = &posix_memalign;
-
- /* Likewise for the C++ memory operators, if any, but not if we
- were dlopen()'d, as we might get dlclose()'d and that would
- leave stale function pointers behind. */
- if (newu && newu->cxx_malloc && !__dynamically_loaded)
- {
- /* Inherit what we don't override. */
-#define CONDITIONALLY_OVERRIDE(MEMBER) \
- if (!__cygwin_cxx_malloc.MEMBER) \
- __cygwin_cxx_malloc.MEMBER = newu->cxx_malloc->MEMBER;
- CONDITIONALLY_OVERRIDE(oper_new);
- CONDITIONALLY_OVERRIDE(oper_new__);
- CONDITIONALLY_OVERRIDE(oper_delete);
- CONDITIONALLY_OVERRIDE(oper_delete__);
- CONDITIONALLY_OVERRIDE(oper_new_nt);
- CONDITIONALLY_OVERRIDE(oper_new___nt);
- CONDITIONALLY_OVERRIDE(oper_delete_nt);
- CONDITIONALLY_OVERRIDE(oper_delete___nt);
- /* Now update the resulting set into the global redirectors. */
- *newu->cxx_malloc = __cygwin_cxx_malloc;
- }
-
- /* Setup the module handle so fork can get the path name. */
- u->hmodule = GetModuleHandle (0);
-
- /* variables for fork */
-#ifdef __x86_64__
- u->data_start = &__data_start__;
- u->data_end = &__data_end__;
- u->bss_start = &__bss_start__;
- u->bss_end = &__bss_end__;
-#else
- u->data_start = &_data_start__;
- u->data_end = &_data_end__;
- u->bss_start = &_bss_start__;
- u->bss_end = &_bss_end__;
-#endif
- u->pseudo_reloc_start = &__RUNTIME_PSEUDO_RELOC_LIST__;
- u->pseudo_reloc_end = &__RUNTIME_PSEUDO_RELOC_LIST_END__;
- u->image_base = &_image_base__;
- /* This is actually a dummy call to force the linker to load this
- symbol for older apps which need it. */
- _pei386_runtime_relocator (NULL);
- return 1;
-}
-} /* "C" */
diff --git a/winsup/cygwin/lib/atexit.c b/winsup/cygwin/lib/atexit.c
deleted file mode 100644
index a2dec6267..000000000
--- a/winsup/cygwin/lib/atexit.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/* atexit.c: atexit entry point
-
- Copyright 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include <stddef.h>
-#include <sys/cygwin.h>
-#include <windows.h>
-
-/* Statically linked replacement for the former cygwin_atexit. We need
- the function here to be able to access the correct __dso_handle of the
- caller's DSO. */
-
-int
-atexit (void (*fn) (void))
-{
- extern int __cxa_atexit(void (*)(void*), void*, void*);
- extern void *__dso_handle;
- extern void *__ImageBase;
-
- void *fixed_dso_handle = &__dso_handle;
- /* Check for being called from inside the executable. If so, use NULL
- as __dso_handle. This allows to link executables with GCC versions
- not providing __dso_handle in crtbegin{S}.o. In this case our own
- __dso_handle defined in lib/dso_handle.c is used. However, our
- __dso_handle always points to &__ImageBase, while the __dso_handle
- for executables provided by crtbegin.o usually points to NULL.
- That's what we remodel here. */
- if (&__ImageBase == (void **) GetModuleHandleW (NULL))
- fixed_dso_handle = NULL;
- /* With recent Cygwin versions starting with API version 0.280 we call
- __cxa_atexit (which is actually the cygwin__cxa_atexit wrapper in
- dcrt0.cc) with the address of __dso_handle since that's how g++ generates
- calls to __cxa_atexit as well. However, when running an application
- built with this atexit under an older Cygwin version, the __cxa_atexit
- entry point is the one from newlib, which expects the *value* of
- __dso_handle. So, check for the Cygwin version we're running under.
- Older version prior to 0.280 don't know CW_FIXED_ATEXIT and return -1.
- 0.280 and later return 0. */
- else if (cygwin_internal (CW_FIXED_ATEXIT) != 0)
- fixed_dso_handle = __dso_handle;
-
- return __cxa_atexit ((void (*)(void*))fn, NULL, fixed_dso_handle);
-}
diff --git a/winsup/cygwin/lib/crt0.h b/winsup/cygwin/lib/crt0.h
deleted file mode 100644
index d289e7824..000000000
--- a/winsup/cygwin/lib/crt0.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/* crt0.h: header file for crt0.
-
- Copyright 2000, 2001, 2008, 2012 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "winlean.h"
-struct per_process;
-typedef int (*MainFunc) (int argc, char *argv[], char **env);
-int __stdcall _cygwin_crt0_common (MainFunc, struct per_process *);
-PVOID dll_dllcrt0 (HMODULE, struct per_process *);
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/winsup/cygwin/lib/cygwin_attach_dll.c b/winsup/cygwin/lib/cygwin_attach_dll.c
deleted file mode 100644
index 543073c89..000000000
--- a/winsup/cygwin/lib/cygwin_attach_dll.c
+++ /dev/null
@@ -1,27 +0,0 @@
-/* attach_dll.cc: crt0 for attaching cygwin DLL from a non-cygwin app.
-
- Copyright 2000, 2001, 2007, 2010 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#undef __INSIDE_CYGWIN__
-#include "winlean.h"
-#include <time.h> /* Needed since call to sys/time.h via sys/cygwin.h
- complains otherwise */
-#include <sys/cygwin.h>
-#include "crt0.h"
-
-/* for a loaded dll */
-PVOID
-cygwin_attach_dll (HMODULE h, MainFunc f)
-{
- static struct per_process u;
- (void) _cygwin_crt0_common (f, &u);
-
- /* jump into the dll. */
- return dll_dllcrt0 (h, &u);
-}
diff --git a/winsup/cygwin/lib/cygwin_crt0.c b/winsup/cygwin/lib/cygwin_crt0.c
deleted file mode 100644
index 952ae28b7..000000000
--- a/winsup/cygwin/lib/cygwin_crt0.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/* cygwin_crt0.c: crt0 for cygwin
-
- Copyright 2000, 2001, 2007, 2008, 2009, 2011 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#undef __INSIDE_CYGWIN__
-#include "crt0.h"
-
-extern void __stdcall _dll_crt0 ()
- __declspec (dllimport) __attribute__ ((noreturn));
-
-/* for main module */
-void
-cygwin_crt0 (MainFunc f)
-{
- _cygwin_crt0_common (f, NULL);
- _dll_crt0 (); /* Jump into the dll, never to return */
-}
diff --git a/winsup/cygwin/lib/dll_entry.c b/winsup/cygwin/lib/dll_entry.c
deleted file mode 100644
index 781f6a3ea..000000000
--- a/winsup/cygwin/lib/dll_entry.c
+++ /dev/null
@@ -1,17 +0,0 @@
-/* dll_entry.cc: Provide the default user DLL linker entry point.
-
- Copyright 1998, 2000, 2001 Red Hat, Inc.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-/* Here we simply instantiate the DECLARE_CYGWIN_DLL to define the
- linker entry point, __cygwin_dll_entry@12, which in turn calls
- _DllMain@12 to do user-specific initialization, if any. There is a
- default DllMain stub in the library if there is no user supplied
- one. */
-
-#include "cygwin/cygwin_dll.h"
-
-DECLARE_CYGWIN_DLL (DllMain);
diff --git a/winsup/cygwin/lib/dll_main.cc b/winsup/cygwin/lib/dll_main.cc
deleted file mode 100644
index 558c3485b..000000000
--- a/winsup/cygwin/lib/dll_main.cc
+++ /dev/null
@@ -1,37 +0,0 @@
-/* dll_main.cc: Provide the DllMain stub that the user can override.
-
- Copyright 1998, 2000, 2001, 2009, 2010 Red Hat, Inc.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-
-#include "winlean.h"
-
-extern "C"
-BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason,
- LPVOID reserved /* Not used. */);
-
-BOOL APIENTRY
-DllMain (
- HINSTANCE hInst /* Library instance handle. */ ,
- DWORD reason /* Reason this function is being called. */ ,
- LPVOID reserved /* Not used. */)
-{
- switch (reason)
- {
- case DLL_PROCESS_ATTACH:
- break;
-
- case DLL_PROCESS_DETACH:
- break;
-
- case DLL_THREAD_ATTACH:
- break;
-
- case DLL_THREAD_DETACH:
- break;
- }
- return TRUE;
-}
diff --git a/winsup/cygwin/lib/dso_handle.c b/winsup/cygwin/lib/dso_handle.c
deleted file mode 100644
index c3069b732..000000000
--- a/winsup/cygwin/lib/dso_handle.c
+++ /dev/null
@@ -1,12 +0,0 @@
-/* dso_handle.c: Provide default __dso_handle.
-
- Copyright 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-extern void *__ImageBase;
-void *__dso_handle = &__ImageBase;
diff --git a/winsup/cygwin/lib/libcmain.c b/winsup/cygwin/lib/libcmain.c
deleted file mode 100644
index 73c698d31..000000000
--- a/winsup/cygwin/lib/libcmain.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/* libcmain.c
-
- Copyright 1996, 1997, 1998, 2000, 2001, 2004, 2006, 2009 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include <windows.h>
-
-#define SP " \t\n"
-
-/* Allow apps which don't have a main to work, as long as they define WinMain */
-int
-main ()
-{
- HMODULE x = GetModuleHandle (0);
- char *s = GetCommandLine ();
- STARTUPINFO si;
- char *nexts;
-
- s += strspn (s, SP);
-
- if (*s != '"')
- nexts = strpbrk (s, SP);
- else
- while ((nexts = strchr (s + 1, '"')) != NULL && nexts[-1] == '\\')
- s = nexts;
-
- if (!nexts)
- nexts = strchr (s, '\0');
- else if (*++nexts)
- nexts += strspn (nexts, SP);
-
- GetStartupInfo (&si);
-
- return WinMain (x, 0, nexts,
- ((si.dwFlags & STARTF_USESHOWWINDOW) != 0
- ? si.wShowWindow
- : SW_SHOWNORMAL));
-}
diff --git a/winsup/cygwin/lib/premain0.c b/winsup/cygwin/lib/premain0.c
deleted file mode 100644
index 20e4e7712..000000000
--- a/winsup/cygwin/lib/premain0.c
+++ /dev/null
@@ -1,15 +0,0 @@
-/* premain0.c
-
- Copyright 2000, 2013 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-void
-cygwin_premain0(int argc __attribute__ ((unused)),
- char **argv __attribute__ ((unused)))
-{
-}
diff --git a/winsup/cygwin/lib/premain1.c b/winsup/cygwin/lib/premain1.c
deleted file mode 100644
index e30d11265..000000000
--- a/winsup/cygwin/lib/premain1.c
+++ /dev/null
@@ -1,15 +0,0 @@
-/* premain1.c
-
- Copyright 2000, 2013 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-void
-cygwin_premain1(int argc __attribute__ ((unused)),
- char **argv __attribute__ ((unused)))
-{
-}
diff --git a/winsup/cygwin/lib/premain2.c b/winsup/cygwin/lib/premain2.c
deleted file mode 100644
index 437562dc5..000000000
--- a/winsup/cygwin/lib/premain2.c
+++ /dev/null
@@ -1,15 +0,0 @@
-/* premain2.c
-
- Copyright 2000, 2013 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-void
-cygwin_premain2(int argc __attribute__ ((unused)),
- char **argv __attribute__ ((unused)))
-{
-}
diff --git a/winsup/cygwin/lib/premain3.c b/winsup/cygwin/lib/premain3.c
deleted file mode 100644
index b37758600..000000000
--- a/winsup/cygwin/lib/premain3.c
+++ /dev/null
@@ -1,15 +0,0 @@
-/* premain3.c
-
- Copyright 2000, 2013 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-void
-cygwin_premain3(int argc __attribute__ ((unused)),
- char **argv __attribute__ ((unused)))
-{
-}
diff --git a/winsup/cygwin/lib/pseudo-reloc-dummy.c b/winsup/cygwin/lib/pseudo-reloc-dummy.c
deleted file mode 100644
index 0cd8c4eb4..000000000
--- a/winsup/cygwin/lib/pseudo-reloc-dummy.c
+++ /dev/null
@@ -1,10 +0,0 @@
-/* pseudo-reloc.c
-
- Stub for older binaries.
-*/
-
-void
-_pei386_runtime_relocator ()
-{
- return;
-}
diff --git a/winsup/cygwin/libc/arc4random.cc b/winsup/cygwin/libc/arc4random.cc
deleted file mode 100644
index 2a38b1355..000000000
--- a/winsup/cygwin/libc/arc4random.cc
+++ /dev/null
@@ -1,363 +0,0 @@
-/* $OpenBSD: arc4random.c,v 1.22 2010/12/22 08:23:42 otto Exp $ */
-
-/*
- * Copyright (c) 1996, David Mazieres <dm@uun.org>
- * Copyright (c) 2008, Damien Miller <djm@openbsd.org>
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * Arc4 random number generator for OpenBSD.
- *
- * This code is derived from section 17.1 of Applied Cryptography,
- * second edition, which describes a stream cipher allegedly
- * compatible with RSA Labs "RC4" cipher (the actual description of
- * which is a trade secret). The same algorithm is used as a stream
- * cipher called "arcfour" in Tatu Ylonen's ssh package.
- *
- * RC4 is a registered trademark of RSA Laboratories.
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/lib/libc/gen/arc4random.c,v 1.30 2012/11/17 01:49:23 svnexp Exp $");
-
-#ifdef __CYGWIN__
-#include "winsup.h"
-#include "sync.h"
-#else
-#include "namespace.h"
-#endif
-#include <fcntl.h>
-#include <limits.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/param.h>
-#ifndef __CYGWIN__
-#include <sys/sysctl.h>
-#endif
-#include <sys/time.h>
-#include <pthread.h>
-
-#ifndef __CYGWIN__
-#include "libc_private.h"
-#include "un-namespace.h"
-#endif
-
-#ifdef __CYGWIN__
-#define _open open
-#define _read read
-#define _close close
-#endif
-
-#ifdef __GNUC__
-#define inline __inline
-#else /* !__GNUC__ */
-#define inline
-#endif /* !__GNUC__ */
-
-struct arc4_stream {
- u_int8_t i;
- u_int8_t j;
- u_int8_t s[256];
-};
-
-#ifdef __CYGWIN__
-static NO_COPY muto arc4random_mtx;
-#else
-static pthread_mutex_t arc4random_mtx = PTHREAD_MUTEX_INITIALIZER;
-#endif
-
-#define RANDOMDEV "/dev/random"
-#define KEYSIZE 128
-#ifdef __CYGWIN__
-#define _ARC4_LOCK() \
- do { \
- if (__isthreaded) \
- arc4random_mtx.init ("arc4random_mtx")->acquire (); \
- } while (0)
-#define _ARC4_UNLOCK() \
- do { \
- if (__isthreaded) \
- arc4random_mtx.release (); \
- } while (0)
-#else
-#define _ARC4_LOCK() \
- do { \
- if (__isthreaded) \
- _pthread_mutex_lock(&arc4random_mtx); \
- } while (0)
-
-#define _ARC4_UNLOCK() \
- do { \
- if (__isthreaded) \
- _pthread_mutex_unlock(&arc4random_mtx); \
- } while (0)
-#endif
-
-static int rs_initialized;
-static struct arc4_stream rs;
-static pid_t arc4_stir_pid;
-static int arc4_count;
-
-#ifndef __CYGWIN__
-extern int __sysctl(int *name, u_int namelen, void *oldp, size_t *oldlenp,
- void *newp, size_t newlen);
-#endif
-
-static inline u_int8_t arc4_getbyte(void);
-static void arc4_stir(void);
-
-static inline void
-arc4_init(void)
-{
- int n;
-
- for (n = 0; n < 256; n++)
- rs.s[n] = n;
- rs.i = 0;
- rs.j = 0;
-}
-
-static inline void
-arc4_addrandom(u_char *dat, int datlen)
-{
- int n;
- u_int8_t si;
-
- rs.i--;
- for (n = 0; n < 256; n++) {
- rs.i = (rs.i + 1);
- si = rs.s[rs.i];
- rs.j = (rs.j + si + dat[n % datlen]);
- rs.s[rs.i] = rs.s[rs.j];
- rs.s[rs.j] = si;
- }
- rs.j = rs.i;
-}
-
-#ifndef __CYGWIN__
-static size_t
-arc4_sysctl(u_char *buf, size_t size)
-{
- int mib[2];
- size_t len, done;
-
- mib[0] = CTL_KERN;
- mib[1] = KERN_ARND;
- done = 0;
-
- do {
- len = size;
- if (__sysctl(mib, 2, buf, &len, NULL, 0) == -1)
- return (done);
- done += len;
- buf += len;
- size -= len;
- } while (size > 0);
-
- return (done);
-}
-#endif
-
-static void
-arc4_stir(void)
-{
- int done, fd, i;
- struct {
- struct timeval tv;
- pid_t pid;
- u_char rnd[KEYSIZE];
- } rdat;
-
- if (!rs_initialized) {
- arc4_init();
- rs_initialized = 1;
- }
- done = 0;
-#ifndef __CYGWIN__
- if (arc4_sysctl((u_char *)&rdat, KEYSIZE) == KEYSIZE)
- done = 1;
-#endif
- if (!done) {
- fd = _open(RANDOMDEV, O_RDONLY | O_CLOEXEC, 0);
- if (fd >= 0) {
- if (_read(fd, &rdat, KEYSIZE) == KEYSIZE)
- done = 1;
- (void)_close(fd);
- }
- }
- if (!done) {
- (void)gettimeofday(&rdat.tv, NULL);
- rdat.pid = getpid();
- /* We'll just take whatever was on the stack too... */
- }
-
- arc4_addrandom((u_char *)&rdat, KEYSIZE);
-
- /*
- * Discard early keystream, as per recommendations in:
- * "(Not So) Random Shuffles of RC4" by Ilya Mironov.
- */
- for (i = 0; i < 1024; i++)
- (void)arc4_getbyte();
- arc4_count = 1600000;
-}
-
-static void
-arc4_stir_if_needed(void)
-{
- pid_t pid = getpid();
-
- if (arc4_count <= 0 || !rs_initialized || arc4_stir_pid != pid)
- {
- arc4_stir_pid = pid;
- arc4_stir();
- }
-}
-
-static inline u_int8_t
-arc4_getbyte(void)
-{
- u_int8_t si, sj;
-
- rs.i = (rs.i + 1);
- si = rs.s[rs.i];
- rs.j = (rs.j + si);
- sj = rs.s[rs.j];
- rs.s[rs.i] = sj;
- rs.s[rs.j] = si;
- return (rs.s[(si + sj) & 0xff]);
-}
-
-static inline u_int32_t
-arc4_getword(void)
-{
- u_int32_t val;
- val = arc4_getbyte() << 24;
- val |= arc4_getbyte() << 16;
- val |= arc4_getbyte() << 8;
- val |= arc4_getbyte();
- return val;
-}
-
-void
-arc4random_stir(void)
-{
- _ARC4_LOCK();
- arc4_stir();
- _ARC4_UNLOCK();
-}
-
-void
-arc4random_addrandom(u_char *dat, int datlen)
-{
- _ARC4_LOCK();
- if (!rs_initialized)
- arc4_stir();
- arc4_addrandom(dat, datlen);
- _ARC4_UNLOCK();
-}
-
-u_int32_t
-arc4random(void)
-{
- u_int32_t val;
- _ARC4_LOCK();
- arc4_count -= 4;
- arc4_stir_if_needed();
- val = arc4_getword();
- _ARC4_UNLOCK();
- return val;
-}
-
-void
-arc4random_buf(void *_buf, size_t n)
-{
- u_char *buf = (u_char *)_buf;
- _ARC4_LOCK();
- arc4_stir_if_needed();
- while (n--) {
- if (--arc4_count <= 0)
- arc4_stir();
- buf[n] = arc4_getbyte();
- }
- _ARC4_UNLOCK();
-}
-
-/*
- * Calculate a uniformly distributed random number less than upper_bound
- * avoiding "modulo bias".
- *
- * Uniformity is achieved by generating new random numbers until the one
- * returned is outside the range [0, 2**32 % upper_bound). This
- * guarantees the selected random number will be inside
- * [2**32 % upper_bound, 2**32) which maps back to [0, upper_bound)
- * after reduction modulo upper_bound.
- */
-u_int32_t
-arc4random_uniform(u_int32_t upper_bound)
-{
- u_int32_t r, min;
-
- if (upper_bound < 2)
- return 0;
-
-#if (ULONG_MAX > 0xffffffffUL)
- min = 0x100000000UL % upper_bound;
-#else
- /* Calculate (2**32 % upper_bound) avoiding 64-bit math */
- if (upper_bound > 0x80000000)
- min = 1 + ~upper_bound; /* 2**32 - upper_bound */
- else {
- /* (2**32 - (x * 2)) % x == 2**32 % x when x <= 2**31 */
- min = ((0xffffffff - (upper_bound * 2)) + 1) % upper_bound;
- }
-#endif
-
- /*
- * This could theoretically loop forever but each retry has
- * p > 0.5 (worst case, usually far better) of selecting a
- * number inside the range we need, so it should rarely need
- * to re-roll.
- */
- for (;;) {
- r = arc4random();
- if (r >= min)
- break;
- }
-
- return r % upper_bound;
-}
-
-#if 0
-/*-------- Test code for i386 --------*/
-#include <stdio.h>
-#include <machine/pctr.h>
-int
-main(int argc, char **argv)
-{
- const int iter = 1000000;
- int i;
- pctrval v;
-
- v = rdtsc();
- for (i = 0; i < iter; i++)
- arc4random();
- v = rdtsc() - v;
- v /= iter;
-
- printf("%qd cycles\n", v);
-}
-#endif
diff --git a/winsup/cygwin/libc/base64.c b/winsup/cygwin/libc/base64.c
deleted file mode 100644
index 933c92721..000000000
--- a/winsup/cygwin/libc/base64.c
+++ /dev/null
@@ -1,316 +0,0 @@
-/*
- * Copyright (c) 1996, 1998 by Internet Software Consortium.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
- * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
- * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
- * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-
-/*
- * Portions Copyright (c) 1995 by International Business Machines, Inc.
- *
- * International Business Machines, Inc. (hereinafter called IBM) grants
- * permission under its copyrights to use, copy, modify, and distribute this
- * Software with or without fee, provided that the above copyright notice and
- * all paragraphs of this notice appear in all copies, and that the name of IBM
- * not be used in connection with the marketing of any product incorporating
- * the Software or modifications thereof, without specific, written prior
- * permission.
- *
- * To the extent it has a right to do so, IBM grants an immunity from suit
- * under its patents, if any, for the use, sale or manufacture of products to
- * the extent that such products are used for performing Domain Name System
- * dynamic updates in TCP/IP networks by means of the Software. No immunity is
- * granted for any product per se or for any other function of any product.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", AND IBM DISCLAIMS ALL WARRANTIES,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE. IN NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL,
- * DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER ARISING
- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE, EVEN
- * IF IBM IS APPRISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#include <winsup.h>
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/lib/libc/net/base64.c,v 1.6 2012/11/17 01:49:32 svnexp Exp $");
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/socket.h>
-
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <arpa/nameser.h>
-
-#include <ctype.h>
-#include <resolv.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#define Assert(Cond) if (!(Cond)) abort()
-
-static const char Base64[] =
- "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-static const char Pad64 = '=';
-
-/* (From RFC1521 and draft-ietf-dnssec-secext-03.txt)
- The following encoding technique is taken from RFC 1521 by Borenstein
- and Freed. It is reproduced here in a slightly edited form for
- convenience.
-
- A 65-character subset of US-ASCII is used, enabling 6 bits to be
- represented per printable character. (The extra 65th character, "=",
- is used to signify a special processing function.)
-
- The encoding process represents 24-bit groups of input bits as output
- strings of 4 encoded characters. Proceeding from left to right, a
- 24-bit input group is formed by concatenating 3 8-bit input groups.
- These 24 bits are then treated as 4 concatenated 6-bit groups, each
- of which is translated into a single digit in the base64 alphabet.
-
- Each 6-bit group is used as an index into an array of 64 printable
- characters. The character referenced by the index is placed in the
- output string.
-
- Table 1: The Base64 Alphabet
-
- Value Encoding Value Encoding Value Encoding Value Encoding
- 0 A 17 R 34 i 51 z
- 1 B 18 S 35 j 52 0
- 2 C 19 T 36 k 53 1
- 3 D 20 U 37 l 54 2
- 4 E 21 V 38 m 55 3
- 5 F 22 W 39 n 56 4
- 6 G 23 X 40 o 57 5
- 7 H 24 Y 41 p 58 6
- 8 I 25 Z 42 q 59 7
- 9 J 26 a 43 r 60 8
- 10 K 27 b 44 s 61 9
- 11 L 28 c 45 t 62 +
- 12 M 29 d 46 u 63 /
- 13 N 30 e 47 v
- 14 O 31 f 48 w (pad) =
- 15 P 32 g 49 x
- 16 Q 33 h 50 y
-
- Special processing is performed if fewer than 24 bits are available
- at the end of the data being encoded. A full encoding quantum is
- always completed at the end of a quantity. When fewer than 24 input
- bits are available in an input group, zero bits are added (on the
- right) to form an integral number of 6-bit groups. Padding at the
- end of the data is performed using the '=' character.
-
- Since all base64 input is an integral number of octets, only the
- -------------------------------------------------
- following cases can arise:
-
- (1) the final quantum of encoding input is an integral
- multiple of 24 bits; here, the final unit of encoded
- output will be an integral multiple of 4 characters
- with no "=" padding,
- (2) the final quantum of encoding input is exactly 8 bits;
- here, the final unit of encoded output will be two
- characters followed by two "=" padding characters, or
- (3) the final quantum of encoding input is exactly 16 bits;
- here, the final unit of encoded output will be three
- characters followed by one "=" padding character.
- */
-
-int
-b64_ntop(u_char const *src, size_t srclength, char *target, size_t targsize) {
- size_t datalength = 0;
- u_char input[3];
- u_char output[4];
- size_t i;
-
- while (2 < srclength) {
- input[0] = *src++;
- input[1] = *src++;
- input[2] = *src++;
- srclength -= 3;
-
- output[0] = input[0] >> 2;
- output[1] = ((input[0] & 0x03) << 4) + (input[1] >> 4);
- output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6);
- output[3] = input[2] & 0x3f;
- Assert(output[0] < 64);
- Assert(output[1] < 64);
- Assert(output[2] < 64);
- Assert(output[3] < 64);
-
- if (datalength + 4 > targsize)
- return (-1);
- target[datalength++] = Base64[output[0]];
- target[datalength++] = Base64[output[1]];
- target[datalength++] = Base64[output[2]];
- target[datalength++] = Base64[output[3]];
- }
-
- /* Now we worry about padding. */
- if (0 != srclength) {
- /* Get what's left. */
- input[0] = input[1] = input[2] = '\0';
- for (i = 0; i < srclength; i++)
- input[i] = *src++;
-
- output[0] = input[0] >> 2;
- output[1] = ((input[0] & 0x03) << 4) + (input[1] >> 4);
- output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6);
- Assert(output[0] < 64);
- Assert(output[1] < 64);
- Assert(output[2] < 64);
-
- if (datalength + 4 > targsize)
- return (-1);
- target[datalength++] = Base64[output[0]];
- target[datalength++] = Base64[output[1]];
- if (srclength == 1)
- target[datalength++] = Pad64;
- else
- target[datalength++] = Base64[output[2]];
- target[datalength++] = Pad64;
- }
- if (datalength >= targsize)
- return (-1);
- target[datalength] = '\0'; /* Returned value doesn't count \0. */
- return (datalength);
-}
-
-/* skips all whitespace anywhere.
- converts characters, four at a time, starting at (or after)
- src from base - 64 numbers into three 8 bit bytes in the target area.
- it returns the number of data bytes stored at the target, or -1 on error.
- */
-
-int
-b64_pton(src, target, targsize)
- char const *src;
- u_char *target;
- size_t targsize;
-{
- int tarindex, state, ch;
- char *pos;
-
- state = 0;
- tarindex = 0;
-
- while ((ch = *src++) != '\0') {
- if (isspace((unsigned char)ch)) /* Skip whitespace anywhere. */
- continue;
-
- if (ch == Pad64)
- break;
-
- pos = strchr(Base64, ch);
- if (pos == 0) /* A non-base64 character. */
- return (-1);
-
- switch (state) {
- case 0:
- if (target) {
- if ((size_t)tarindex >= targsize)
- return (-1);
- target[tarindex] = (pos - Base64) << 2;
- }
- state = 1;
- break;
- case 1:
- if (target) {
- if ((size_t)tarindex + 1 >= targsize)
- return (-1);
- target[tarindex] |= (pos - Base64) >> 4;
- target[tarindex+1] = ((pos - Base64) & 0x0f)
- << 4 ;
- }
- tarindex++;
- state = 2;
- break;
- case 2:
- if (target) {
- if ((size_t)tarindex + 1 >= targsize)
- return (-1);
- target[tarindex] |= (pos - Base64) >> 2;
- target[tarindex+1] = ((pos - Base64) & 0x03)
- << 6;
- }
- tarindex++;
- state = 3;
- break;
- case 3:
- if (target) {
- if ((size_t)tarindex >= targsize)
- return (-1);
- target[tarindex] |= (pos - Base64);
- }
- tarindex++;
- state = 0;
- break;
- default:
- abort();
- }
- }
-
- /*
- * We are done decoding Base-64 chars. Let's see if we ended
- * on a byte boundary, and/or with erroneous trailing characters.
- */
-
- if (ch == Pad64) { /* We got a pad char. */
- ch = *src++; /* Skip it, get next. */
- switch (state) {
- case 0: /* Invalid = in first position */
- case 1: /* Invalid = in second position */
- return (-1);
-
- case 2: /* Valid, means one byte of info */
- /* Skip any number of spaces. */
- for ((void)NULL; ch != '\0'; ch = *src++)
- if (!isspace((unsigned char)ch))
- break;
- /* Make sure there is another trailing = sign. */
- if (ch != Pad64)
- return (-1);
- ch = *src++; /* Skip the = */
- /* Fall through to "single trailing =" case. */
- /* FALLTHROUGH */
-
- case 3: /* Valid, means two bytes of info */
- /*
- * We know this char is an =. Is there anything but
- * whitespace after it?
- */
- for ((void)NULL; ch != '\0'; ch = *src++)
- if (!isspace((unsigned char)ch))
- return (-1);
-
- /*
- * Now make sure for cases 2 and 3 that the "extra"
- * bits that slopped past the last full byte were
- * zeros. If we don't check them, they become a
- * subliminal channel.
- */
- if (target && target[tarindex] != 0)
- return (-1);
- }
- } else {
- /*
- * We ended by seeing the end of the string. Make sure we
- * have no partial bytes lying around.
- */
- if (state != 0)
- return (-1);
- }
-
- return (tarindex);
-}
diff --git a/winsup/cygwin/libc/bsdlib.cc b/winsup/cygwin/libc/bsdlib.cc
deleted file mode 100644
index 89bc9431c..000000000
--- a/winsup/cygwin/libc/bsdlib.cc
+++ /dev/null
@@ -1,314 +0,0 @@
-/*-
- * Copyright (c) 1990, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * CV 2003-09-10: Cygwin specific changes applied. Code simplified just
- * for Cygwin alone.
- */
-
-#include "winsup.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <utmp.h>
-#include <unistd.h>
-#include <sys/ioctl.h>
-#include <fcntl.h>
-#include <err.h>
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "cygtls.h"
-
-extern "C" int
-daemon (int nochdir, int noclose)
-{
- int fd;
-
- switch (fork ())
- {
- case -1:
- return -1;
- case 0:
- break;
- default:
- /* This sleep avoids a race condition which kills the
- child process if parent is started by a service process.
- FIXME: Is that still true? */
- Sleep (1000L);
- _exit (0);
- }
- if (setsid () == -1)
- return -1;
- if (!nochdir)
- chdir ("/");
- if (!noclose && (fd = open (_PATH_DEVNULL, O_RDWR, 0)) >= 0)
- {
- dup2 (fd, STDIN_FILENO);
- dup2 (fd, STDOUT_FILENO);
- dup2 (fd, STDERR_FILENO);
- if (fd > 2)
- close (fd);
- }
- return 0;
-}
-
-extern "C" int
-login_tty (int fd)
-{
- char *fdname;
- int newfd;
-
- if (setsid () == -1)
- return -1;
- if ((fdname = ttyname (fd)))
- {
- if (fd != STDIN_FILENO)
- close (STDIN_FILENO);
- if (fd != STDOUT_FILENO)
- close (STDOUT_FILENO);
- if (fd != STDERR_FILENO)
- close (STDERR_FILENO);
- newfd = open (fdname, O_RDWR);
- close (newfd);
- }
- dup2 (fd, STDIN_FILENO);
- dup2 (fd, STDOUT_FILENO);
- dup2 (fd, STDERR_FILENO);
- if (fd > 2)
- close (fd);
- return 0;
-}
-
-extern "C" int
-openpty (int *amaster, int *aslave, char *name, const struct termios *termp,
- const struct winsize *winp)
-{
- int master, slave;
- char pts[TTY_NAME_MAX];
-
- if ((master = open ("/dev/ptmx", O_RDWR | O_NOCTTY)) >= 0)
- {
- grantpt (master);
- unlockpt (master);
- __ptsname (pts, cygheap->fdtab[master]->get_minor ());
- revoke (pts);
- if ((slave = open (pts, O_RDWR | O_NOCTTY)) >= 0)
- {
- if (amaster)
- *amaster = master;
- if (name)
- strcpy (name, pts);
- if (termp)
- tcsetattr (slave, TCSAFLUSH, termp);
- if (winp)
- ioctl (slave, TIOCSWINSZ, (char *) winp);
- /* The man page doesn't say that aslave can be NULL but we have
- allowed it for years. As of 2011-11-08 we now avoid a handle
- leak in this case. */
- if (aslave)
- *aslave = slave;
- else
- close (slave);
- return 0;
- }
- close (master);
- }
- set_errno (ENOENT);
- return -1;
-}
-
-extern "C" int
-forkpty (int *amaster, char *name, const struct termios *termp,
- const struct winsize *winp)
-{
- int master, slave, pid;
-
- if (openpty (&master, &slave, name, termp, winp) == -1)
- return -1;
- switch (pid = fork ())
- {
- case -1:
- close (master);
- close (slave);
- return -1;
- case 0:
- close (master);
- login_tty (slave);
- return 0;
- }
- if (amaster)
- *amaster = master;
- close (slave);
- return pid;
-}
-
-extern "C" char *__progname;
-
-static void
-_vwarnx (const char *fmt, va_list ap)
-{
- fprintf (stderr, "%s: ", __progname);
- vfprintf (stderr, fmt, ap);
-}
-
-extern "C" void
-vwarn (const char *fmt, va_list ap)
-{
- _vwarnx (fmt, ap);
- fprintf (stderr, ": %s", strerror (get_errno ()));
- fputc ('\n', stderr);
-}
-
-extern "C" void
-vwarnx (const char *fmt, va_list ap)
-{
- _vwarnx (fmt, ap);
- fputc ('\n', stderr);
-}
-
-extern "C" void
-warn (const char *fmt, ...)
-{
- va_list ap;
- va_start (ap, fmt);
- vwarn (fmt, ap);
- va_end (ap);
-}
-
-extern "C" void
-warnx (const char *fmt, ...)
-{
- va_list ap;
- va_start (ap, fmt);
- vwarnx (fmt, ap);
- va_end (ap);
-}
-
-extern "C" void
-verr (int eval, const char *fmt, va_list ap)
-{
- vwarn (fmt, ap);
- exit (eval);
-}
-
-extern "C" void
-verrx (int eval, const char *fmt, va_list ap)
-{
- vwarnx (fmt, ap);
- exit (eval);
-}
-
-extern "C" void
-err (int eval, const char *fmt, ...)
-{
- va_list ap;
- va_start (ap, fmt);
- vwarn (fmt, ap);
- va_end (ap);
- exit (eval);
-}
-
-extern "C" void
-errx (int eval, const char *fmt, ...)
-{
- va_list ap;
- va_start (ap, fmt);
- vwarnx (fmt, ap);
- va_end (ap);
- exit (eval);
-}
-
-extern "C" const char *
-getprogname (void)
-{
- return __progname;
-}
-
-extern "C" void
-setprogname (const char *newprogname)
-{
- __try
- {
- /* Per BSD man page, setprogname keeps a pointer to the last
- path component of the argument. It does *not* copy the
- argument before. */
- __progname = strrchr (newprogname, '/');
- if (__progname)
- ++__progname;
- else
- __progname = (char *)newprogname;
- }
- __except (EFAULT) {}
- __endtry
-}
-
-extern "C" void
-logwtmp (const char *line, const char *user, const char *host)
-{
- struct utmp ut;
- memset (&ut, 0, sizeof ut);
- ut.ut_type = USER_PROCESS;
- ut.ut_pid = getpid ();
- if (line)
- strncpy (ut.ut_line, line, sizeof ut.ut_line);
- time (&ut.ut_time);
- if (user)
- strncpy (ut.ut_user, user, sizeof ut.ut_user);
- if (host)
- strncpy (ut.ut_host, host, sizeof ut.ut_host);
- updwtmp (_PATH_WTMP, &ut);
-}
-
-extern "C" void
-login (const struct utmp *ut)
-{
- pututline (ut);
- endutent ();
- updwtmp (_PATH_WTMP, ut);
-}
-
-extern "C" int
-logout (const char *line)
-{
- struct utmp ut_buf, *ut;
-
- memset (&ut_buf, 0, sizeof ut_buf);
- strncpy (ut_buf.ut_line, line, sizeof ut_buf.ut_line);
- setutent ();
- ut = getutline (&ut_buf);
-
- if (ut)
- {
- ut->ut_type = DEAD_PROCESS;
- memset (ut->ut_user, 0, sizeof ut->ut_user);
- memset (ut->ut_host, 0, sizeof ut->ut_host);
- time (&ut->ut_time);
- debug_printf ("set logout time for %s", line);
- pututline (ut);
- endutent ();
- return 1;
- }
- return 0;
-}
diff --git a/winsup/cygwin/libc/fnmatch.c b/winsup/cygwin/libc/fnmatch.c
deleted file mode 100644
index 295f4c413..000000000
--- a/winsup/cygwin/libc/fnmatch.c
+++ /dev/null
@@ -1,293 +0,0 @@
-/*
- * Copyright (c) 1989, 1993, 1994
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Guido van Rossum.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)fnmatch.c 8.2 (Berkeley) 4/16/94";
-#endif /* LIBC_SCCS and not lint */
-#include <sys/cdefs.h>
-#if 0
-__FBSDID("$FreeBSD: src/lib/libc/gen/fnmatch.c,v 1.18 2007/01/09 00:27:53 imp Exp $");
-#endif
-
-/*
- * Function fnmatch() as specified in POSIX 1003.2-1992, section B.6.
- * Compares a filename or pathname to a pattern.
- */
-
-/*
- * Some notes on multibyte character support:
- * 1. Patterns with illegal byte sequences match nothing.
- * 2. Illegal byte sequences in the "string" argument are handled by treating
- * them as single-byte characters with a value of the first byte of the
- * sequence cast to wchar_t.
- * 3. Multibyte conversion state objects (mbstate_t) are passed around and
- * used for most, but not all, conversions. Further work will be required
- * to support state-dependent encodings.
- */
-
-#include <fnmatch.h>
-#include <limits.h>
-#include <string.h>
-#include <wchar.h>
-#include <wctype.h>
-
-#include "../posix/collate.h"
-
-#define EOS '\0'
-
-#define RANGE_MATCH 1
-#define RANGE_NOMATCH 0
-#define RANGE_ERROR (-1)
-
-static int rangematch(const char *, wchar_t, int, char **, mbstate_t *);
-static int fnmatch1(const char *, const char *, int, mbstate_t, mbstate_t);
-
-int
-fnmatch(pattern, string, flags)
- const char *pattern, *string;
- int flags;
-{
- static const mbstate_t initial;
-
- return (fnmatch1(pattern, string, flags, initial, initial));
-}
-
-static int
-fnmatch1(pattern, string, flags, patmbs, strmbs)
- const char *pattern, *string;
- int flags;
- mbstate_t patmbs, strmbs;
-{
- const char *stringstart;
- char *newp;
- char c;
- wchar_t pc, sc;
- size_t pclen, sclen;
-
- for (stringstart = string;;) {
- pclen = mbrtowc(&pc, pattern, MB_LEN_MAX, &patmbs);
- if (pclen == (size_t)-1 || pclen == (size_t)-2)
- return (FNM_NOMATCH);
- pattern += pclen;
- sclen = mbrtowc(&sc, string, MB_LEN_MAX, &strmbs);
- if (sclen == (size_t)-1 || sclen == (size_t)-2) {
- sc = (unsigned char)*string;
- sclen = 1;
- memset(&strmbs, 0, sizeof(strmbs));
- }
- switch (pc) {
- case EOS:
- if ((flags & FNM_LEADING_DIR) && sc == '/')
- return (0);
- return (sc == EOS ? 0 : FNM_NOMATCH);
- case '?':
- if (sc == EOS)
- return (FNM_NOMATCH);
- if (sc == '/' && (flags & FNM_PATHNAME))
- return (FNM_NOMATCH);
- if (sc == '.' && (flags & FNM_PERIOD) &&
- (string == stringstart ||
- ((flags & FNM_PATHNAME) && *(string - 1) == '/')))
- return (FNM_NOMATCH);
- string += sclen;
- break;
- case '*':
- c = *pattern;
- /* Collapse multiple stars. */
- while (c == '*')
- c = *++pattern;
-
- if (sc == '.' && (flags & FNM_PERIOD) &&
- (string == stringstart ||
- ((flags & FNM_PATHNAME) && *(string - 1) == '/')))
- return (FNM_NOMATCH);
-
- /* Optimize for pattern with * at end or before /. */
- if (c == EOS)
- if (flags & FNM_PATHNAME)
- return ((flags & FNM_LEADING_DIR) ||
- strchr(string, '/') == NULL ?
- 0 : FNM_NOMATCH);
- else
- return (0);
- else if (c == '/' && flags & FNM_PATHNAME) {
- if ((string = strchr(string, '/')) == NULL)
- return (FNM_NOMATCH);
- break;
- }
-
- /* General case, use recursion. */
- while (sc != EOS) {
- if (!fnmatch1(pattern, string,
- flags & ~FNM_PERIOD, patmbs, strmbs))
- return (0);
- sclen = mbrtowc(&sc, string, MB_LEN_MAX,
- &strmbs);
- if (sclen == (size_t)-1 ||
- sclen == (size_t)-2) {
- sc = (unsigned char)*string;
- sclen = 1;
- memset(&strmbs, 0, sizeof(strmbs));
- }
- if (sc == '/' && flags & FNM_PATHNAME)
- break;
- string += sclen;
- }
- return (FNM_NOMATCH);
- case '[':
- if (sc == EOS)
- return (FNM_NOMATCH);
- if (sc == '/' && (flags & FNM_PATHNAME))
- return (FNM_NOMATCH);
- if (sc == '.' && (flags & FNM_PERIOD) &&
- (string == stringstart ||
- ((flags & FNM_PATHNAME) && *(string - 1) == '/')))
- return (FNM_NOMATCH);
-
- switch (rangematch(pattern, sc, flags, &newp,
- &patmbs)) {
- case RANGE_ERROR:
- goto norm;
- case RANGE_MATCH:
- pattern = newp;
- break;
- case RANGE_NOMATCH:
- return (FNM_NOMATCH);
- }
- string += sclen;
- break;
- case '\\':
- if (!(flags & FNM_NOESCAPE)) {
- pclen = mbrtowc(&pc, pattern, MB_LEN_MAX,
- &patmbs);
- if (pclen == (size_t)-1 || pclen == (size_t)-2)
- return (FNM_NOMATCH);
- if (pclen == 0)
- pc = '\\';
- pattern += pclen;
- }
- /* FALLTHROUGH */
- default:
- norm:
- if (pc == sc)
- ;
- else if ((flags & FNM_CASEFOLD) &&
- (towlower(pc) == towlower(sc)))
- ;
- else
- return (FNM_NOMATCH);
- string += sclen;
- break;
- }
- }
- /* NOTREACHED */
-}
-
-static int
-rangematch(pattern, test, flags, newp, patmbs)
- const char *pattern;
- wchar_t test;
- int flags;
- char **newp;
- mbstate_t *patmbs;
-{
- int negate, ok;
- wchar_t c, c2;
- size_t pclen;
- const char *origpat;
-
- /*
- * A bracket expression starting with an unquoted circumflex
- * character produces unspecified results (IEEE 1003.2-1992,
- * 3.13.2). This implementation treats it like '!', for
- * consistency with the regular expression syntax.
- * J.T. Conklin (conklin@ngai.kaleida.com)
- */
- if ( (negate = (*pattern == '!' || *pattern == '^')) )
- ++pattern;
-
- if (flags & FNM_CASEFOLD)
- test = towlower(test);
-
- /*
- * A right bracket shall lose its special meaning and represent
- * itself in a bracket expression if it occurs first in the list.
- * -- POSIX.2 2.8.3.2
- */
- ok = 0;
- origpat = pattern;
- for (;;) {
- if (*pattern == ']' && pattern > origpat) {
- pattern++;
- break;
- } else if (*pattern == '\0') {
- return (RANGE_ERROR);
- } else if (*pattern == '/' && (flags & FNM_PATHNAME)) {
- return (RANGE_NOMATCH);
- } else if (*pattern == '\\' && !(flags & FNM_NOESCAPE))
- pattern++;
- pclen = mbrtowc(&c, pattern, MB_LEN_MAX, patmbs);
- if (pclen == (size_t)-1 || pclen == (size_t)-2)
- return (RANGE_NOMATCH);
- pattern += pclen;
-
- if (flags & FNM_CASEFOLD)
- c = towlower(c);
-
- if (*pattern == '-' && *(pattern + 1) != EOS &&
- *(pattern + 1) != ']') {
- if (*++pattern == '\\' && !(flags & FNM_NOESCAPE))
- if (*pattern != EOS)
- pattern++;
- pclen = mbrtowc(&c2, pattern, MB_LEN_MAX, patmbs);
- if (pclen == (size_t)-1 || pclen == (size_t)-2)
- return (RANGE_NOMATCH);
- pattern += pclen;
- if (c2 == EOS)
- return (RANGE_ERROR);
-
- if (flags & FNM_CASEFOLD)
- c2 = towlower(c2);
-
- if (__collate_load_error ?
- c <= test && test <= c2 :
- __collate_range_cmp(c, test) <= 0
- && __collate_range_cmp(test, c2) <= 0
- )
- ok = 1;
- } else if (c == test)
- ok = 1;
- }
-
- *newp = (char *)pattern;
- return (ok == negate ? RANGE_NOMATCH : RANGE_MATCH);
-}
diff --git a/winsup/cygwin/libc/fts.c b/winsup/cygwin/libc/fts.c
deleted file mode 100644
index 003f85146..000000000
--- a/winsup/cygwin/libc/fts.c
+++ /dev/null
@@ -1,1212 +0,0 @@
-/*-
- * Copyright (c) 1990, 1993, 1994
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $OpenBSD: fts.c,v 1.22 1999/10/03 19:22:22 millert Exp $
- */
-
-#if 0
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)fts.c 8.6 (Berkeley) 8/14/94";
-#endif /* LIBC_SCCS and not lint */
-#endif
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/lib/libc/gen/fts.c,v 1.39 2013/02/11 02:00:16 svnexp Exp $");
-
-#ifndef __CYGWIN__
-#include "namespace.h"
-#endif
-#include <sys/param.h>
-#include <sys/mount.h>
-#include <sys/stat.h>
-
-#include <dirent.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <fts.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#ifdef __CYGWIN__
-#include "winsup.h"
-#include <sys/statfs.h>
-#define _open open
-#define _close close
-#define _dirfd dirfd
-#ifdef __x86_64__
-#define _fstat fstat
-#else
-extern int stat64 (const char *path, struct stat *buf);
-extern int fstat64 (int fd, struct stat *buf);
-extern int lstat64 (const char *path, struct stat *buf);
-#define stat(a,b) stat64((a),(b))
-#define _fstat(a,b) fstat64((a),(b))
-#define lstat(a,b) lstat64((a),(b))
-#endif
-#else
-#include "un-namespace.h"
-
-#include "gen-private.h"
-#endif
-
-static FTSENT *fts_alloc(FTS *, const char *, size_t);
-static FTSENT *fts_build(FTS *, int);
-static void fts_lfree(FTSENT *);
-static void fts_load(FTS *, FTSENT *);
-static size_t fts_maxarglen(char * const *);
-static void fts_padjust(FTS *, FTSENT *);
-static int fts_palloc(FTS *, size_t);
-static FTSENT *fts_sort(FTS *, FTSENT *, size_t);
-static int fts_stat(FTS *, FTSENT *, int);
-static int fts_safe_changedir(FTS *, FTSENT *, int, const char *);
-static int fts_ufslinks(FTS *, const FTSENT *);
-
-#define ISDOT(a) (a[0] == '.' && (!a[1] || (a[1] == '.' && !a[2])))
-
-#define CLR(opt) (sp->fts_options &= ~(opt))
-#define ISSET(opt) (sp->fts_options & (opt))
-#define SET(opt) (sp->fts_options |= (opt))
-
-#define FCHDIR(sp, fd) (!ISSET(FTS_NOCHDIR) && fchdir(fd))
-
-/* fts_build flags */
-#define BCHILD 1 /* fts_children */
-#define BNAMES 2 /* fts_children, names only */
-#define BREAD 3 /* fts_read */
-
-/*
- * Internal representation of an FTS, including extra implementation
- * details. The FTS returned from fts_open points to this structure's
- * ftsp_fts member (and can be cast to an _fts_private as required)
- */
-struct _fts_private {
- FTS ftsp_fts;
- struct statfs ftsp_statfs;
- dev_t ftsp_dev;
- int ftsp_linksreliable;
-};
-
-/*
- * The "FTS_NOSTAT" option can avoid a lot of calls to stat(2) if it
- * knows that a directory could not possibly have subdirectories. This
- * is decided by looking at the link count: a subdirectory would
- * increment its parent's link count by virtue of its own ".." entry.
- * This assumption only holds for UFS-like filesystems that implement
- * links and directories this way, so we must punt for others.
- */
-
-#ifndef __CYGWIN__
-static const char *ufslike_filesystems[] = {
- "ufs",
- "zfs",
- "nfs",
- "nfs4",
- "ext2fs",
- 0
-};
-#endif
-
-FTS *
-fts_open(argv, options, compar)
- char * const *argv;
- int options;
- int (*compar)(const FTSENT * const *, const FTSENT * const *);
-{
- struct _fts_private *priv;
- FTS *sp;
- FTSENT *p, *root;
- FTSENT *parent, *tmp;
- size_t len, nitems;
-
- /* Options check. */
- if (options & ~FTS_OPTIONMASK) {
- errno = EINVAL;
- return (NULL);
- }
-
- /* fts_open() requires at least one path */
- if (*argv == NULL) {
- errno = EINVAL;
- return (NULL);
- }
-
- /* Allocate/initialize the stream. */
- if ((priv = calloc(1, sizeof(*priv))) == NULL)
- return (NULL);
- sp = &priv->ftsp_fts;
- sp->fts_compar = compar;
- sp->fts_options = options;
-
- /* Shush, GCC. */
- tmp = NULL;
-
- /* Logical walks turn on NOCHDIR; symbolic links are too hard. */
- if (ISSET(FTS_LOGICAL))
- SET(FTS_NOCHDIR);
-
- /*
- * Start out with 1K of path space, and enough, in any case,
- * to hold the user's paths.
- */
- if (fts_palloc(sp, MAX(fts_maxarglen(argv), MAXPATHLEN)))
- goto mem1;
-
- /* Allocate/initialize root's parent. */
- if ((parent = fts_alloc(sp, "", 0)) == NULL)
- goto mem2;
- parent->fts_level = FTS_ROOTPARENTLEVEL;
-
- /* Allocate/initialize root(s). */
- for (root = NULL, nitems = 0; *argv != NULL; ++argv, ++nitems) {
- /* Don't allow zero-length paths. */
- if ((len = strlen(*argv)) == 0) {
- errno = ENOENT;
- goto mem3;
- }
-
- p = fts_alloc(sp, *argv, len);
- p->fts_level = FTS_ROOTLEVEL;
- p->fts_parent = parent;
- p->fts_accpath = p->fts_name;
- p->fts_info = fts_stat(sp, p, ISSET(FTS_COMFOLLOW));
-
- /* Command-line "." and ".." are real directories. */
- if (p->fts_info == FTS_DOT)
- p->fts_info = FTS_D;
-
- /*
- * If comparison routine supplied, traverse in sorted
- * order; otherwise traverse in the order specified.
- */
- if (compar) {
- p->fts_link = root;
- root = p;
- } else {
- p->fts_link = NULL;
- if (root == NULL)
- tmp = root = p;
- else {
- tmp->fts_link = p;
- tmp = p;
- }
- }
- }
- if (compar && nitems > 1)
- root = fts_sort(sp, root, nitems);
-
- /*
- * Allocate a dummy pointer and make fts_read think that we've just
- * finished the node before the root(s); set p->fts_info to FTS_INIT
- * so that everything about the "current" node is ignored.
- */
- if ((sp->fts_cur = fts_alloc(sp, "", 0)) == NULL)
- goto mem3;
- sp->fts_cur->fts_link = root;
- sp->fts_cur->fts_info = FTS_INIT;
-
- /*
- * If using chdir(2), grab a file descriptor pointing to dot to ensure
- * that we can get back here; this could be avoided for some paths,
- * but almost certainly not worth the effort. Slashes, symbolic links,
- * and ".." are all fairly nasty problems. Note, if we can't get the
- * descriptor we run anyway, just more slowly.
- */
- if (!ISSET(FTS_NOCHDIR) &&
- (sp->fts_rfd = _open(".", O_RDONLY | O_CLOEXEC, 0)) < 0)
- SET(FTS_NOCHDIR);
-
- return (sp);
-
-mem3: fts_lfree(root);
- free(parent);
-mem2: free(sp->fts_path);
-mem1: free(sp);
- return (NULL);
-}
-
-static void
-fts_load(FTS *sp, FTSENT *p)
-{
- size_t len;
- char *cp;
-
- /*
- * Load the stream structure for the next traversal. Since we don't
- * actually enter the directory until after the preorder visit, set
- * the fts_accpath field specially so the chdir gets done to the right
- * place and the user can access the first node. From fts_open it's
- * known that the path will fit.
- */
- len = p->fts_pathlen = p->fts_namelen;
- memmove(sp->fts_path, p->fts_name, len + 1);
- if ((cp = strrchr(p->fts_name, '/')) && (cp != p->fts_name || cp[1])) {
- len = strlen(++cp);
- memmove(p->fts_name, cp, len + 1);
- p->fts_namelen = len;
- }
- p->fts_accpath = p->fts_path = sp->fts_path;
- sp->fts_dev = p->fts_dev;
-}
-
-int
-fts_close(FTS *sp)
-{
- FTSENT *freep, *p;
- int saved_errno;
-
- /*
- * This still works if we haven't read anything -- the dummy structure
- * points to the root list, so we step through to the end of the root
- * list which has a valid parent pointer.
- */
- if (sp->fts_cur) {
- for (p = sp->fts_cur; p->fts_level >= FTS_ROOTLEVEL;) {
- freep = p;
- p = p->fts_link != NULL ? p->fts_link : p->fts_parent;
- free(freep);
- }
- free(p);
- }
-
- /* Free up child linked list, sort array, path buffer. */
- if (sp->fts_child)
- fts_lfree(sp->fts_child);
- if (sp->fts_array)
- free(sp->fts_array);
- free(sp->fts_path);
-
- /* Return to original directory, save errno if necessary. */
- if (!ISSET(FTS_NOCHDIR)) {
- saved_errno = fchdir(sp->fts_rfd) ? errno : 0;
- (void)_close(sp->fts_rfd);
-
- /* Set errno and return. */
- if (saved_errno != 0) {
- /* Free up the stream pointer. */
- free(sp);
- errno = saved_errno;
- return (-1);
- }
- }
-
- /* Free up the stream pointer. */
- free(sp);
- return (0);
-}
-
-/*
- * Special case of "/" at the end of the path so that slashes aren't
- * appended which would cause paths to be written as "....//foo".
- */
-#define NAPPEND(p) \
- (p->fts_path[p->fts_pathlen - 1] == '/' \
- ? p->fts_pathlen - 1 : p->fts_pathlen)
-
-FTSENT *
-fts_read(FTS *sp)
-{
- FTSENT *p, *tmp;
- int instr;
- char *t;
- int saved_errno;
-
- /* If finished or unrecoverable error, return NULL. */
- if (sp->fts_cur == NULL || ISSET(FTS_STOP))
- return (NULL);
-
- /* Set current node pointer. */
- p = sp->fts_cur;
-
- /* Save and zero out user instructions. */
- instr = p->fts_instr;
- p->fts_instr = FTS_NOINSTR;
-
- /* Any type of file may be re-visited; re-stat and re-turn. */
- if (instr == FTS_AGAIN) {
- p->fts_info = fts_stat(sp, p, 0);
- return (p);
- }
-
- /*
- * Following a symlink -- SLNONE test allows application to see
- * SLNONE and recover. If indirecting through a symlink, have
- * keep a pointer to current location. If unable to get that
- * pointer, follow fails.
- */
- if (instr == FTS_FOLLOW &&
- (p->fts_info == FTS_SL || p->fts_info == FTS_SLNONE)) {
- p->fts_info = fts_stat(sp, p, 1);
- if (p->fts_info == FTS_D && !ISSET(FTS_NOCHDIR)) {
- if ((p->fts_symfd = _open(".", O_RDONLY | O_CLOEXEC,
- 0)) < 0) {
- p->fts_errno = errno;
- p->fts_info = FTS_ERR;
- } else
- p->fts_flags |= FTS_SYMFOLLOW;
- }
- return (p);
- }
-
- /* Directory in pre-order. */
- if (p->fts_info == FTS_D) {
- /* If skipped or crossed mount point, do post-order visit. */
- if (instr == FTS_SKIP ||
- (ISSET(FTS_XDEV) && p->fts_dev != sp->fts_dev)) {
- if (p->fts_flags & FTS_SYMFOLLOW)
- (void)_close(p->fts_symfd);
- if (sp->fts_child) {
- fts_lfree(sp->fts_child);
- sp->fts_child = NULL;
- }
- p->fts_info = FTS_DP;
- return (p);
- }
-
- /* Rebuild if only read the names and now traversing. */
- if (sp->fts_child != NULL && ISSET(FTS_NAMEONLY)) {
- CLR(FTS_NAMEONLY);
- fts_lfree(sp->fts_child);
- sp->fts_child = NULL;
- }
-
- /*
- * Cd to the subdirectory.
- *
- * If have already read and now fail to chdir, whack the list
- * to make the names come out right, and set the parent errno
- * so the application will eventually get an error condition.
- * Set the FTS_DONTCHDIR flag so that when we logically change
- * directories back to the parent we don't do a chdir.
- *
- * If haven't read do so. If the read fails, fts_build sets
- * FTS_STOP or the fts_info field of the node.
- */
- if (sp->fts_child != NULL) {
- if (fts_safe_changedir(sp, p, -1, p->fts_accpath)) {
- p->fts_errno = errno;
- p->fts_flags |= FTS_DONTCHDIR;
- for (p = sp->fts_child; p != NULL;
- p = p->fts_link)
- p->fts_accpath =
- p->fts_parent->fts_accpath;
- }
- } else if ((sp->fts_child = fts_build(sp, BREAD)) == NULL) {
- if (ISSET(FTS_STOP))
- return (NULL);
- return (p);
- }
- p = sp->fts_child;
- sp->fts_child = NULL;
- goto name;
- }
-
- /* Move to the next node on this level. */
-next: tmp = p;
- if ((p = p->fts_link) != NULL) {
- free(tmp);
-
- /*
- * If reached the top, return to the original directory (or
- * the root of the tree), and load the paths for the next root.
- */
- if (p->fts_level == FTS_ROOTLEVEL) {
- if (FCHDIR(sp, sp->fts_rfd)) {
- SET(FTS_STOP);
- return (NULL);
- }
- fts_load(sp, p);
- return (sp->fts_cur = p);
- }
-
- /*
- * User may have called fts_set on the node. If skipped,
- * ignore. If followed, get a file descriptor so we can
- * get back if necessary.
- */
- if (p->fts_instr == FTS_SKIP)
- goto next;
- if (p->fts_instr == FTS_FOLLOW) {
- p->fts_info = fts_stat(sp, p, 1);
- if (p->fts_info == FTS_D && !ISSET(FTS_NOCHDIR)) {
- if ((p->fts_symfd =
- _open(".", O_RDONLY | O_CLOEXEC, 0)) < 0) {
- p->fts_errno = errno;
- p->fts_info = FTS_ERR;
- } else
- p->fts_flags |= FTS_SYMFOLLOW;
- }
- p->fts_instr = FTS_NOINSTR;
- }
-
-name: t = sp->fts_path + NAPPEND(p->fts_parent);
- *t++ = '/';
- memmove(t, p->fts_name, p->fts_namelen + 1);
- return (sp->fts_cur = p);
- }
-
- /* Move up to the parent node. */
- p = tmp->fts_parent;
- free(tmp);
-
- if (p->fts_level == FTS_ROOTPARENTLEVEL) {
- /*
- * Done; free everything up and set errno to 0 so the user
- * can distinguish between error and EOF.
- */
- free(p);
- errno = 0;
- return (sp->fts_cur = NULL);
- }
-
- /* NUL terminate the pathname. */
- sp->fts_path[p->fts_pathlen] = '\0';
-
- /*
- * Return to the parent directory. If at a root node or came through
- * a symlink, go back through the file descriptor. Otherwise, cd up
- * one directory.
- */
- if (p->fts_level == FTS_ROOTLEVEL) {
- if (FCHDIR(sp, sp->fts_rfd)) {
- SET(FTS_STOP);
- return (NULL);
- }
- } else if (p->fts_flags & FTS_SYMFOLLOW) {
- if (FCHDIR(sp, p->fts_symfd)) {
- saved_errno = errno;
- (void)_close(p->fts_symfd);
- errno = saved_errno;
- SET(FTS_STOP);
- return (NULL);
- }
- (void)_close(p->fts_symfd);
- } else if (!(p->fts_flags & FTS_DONTCHDIR) &&
- fts_safe_changedir(sp, p->fts_parent, -1, "..")) {
- SET(FTS_STOP);
- return (NULL);
- }
- p->fts_info = p->fts_errno ? FTS_ERR : FTS_DP;
- return (sp->fts_cur = p);
-}
-
-/*
- * Fts_set takes the stream as an argument although it's not used in this
- * implementation; it would be necessary if anyone wanted to add global
- * semantics to fts using fts_set. An error return is allowed for similar
- * reasons.
- */
-/* ARGSUSED */
-int
-fts_set(FTS *sp, FTSENT *p, int instr)
-{
- if (instr != 0 && instr != FTS_AGAIN && instr != FTS_FOLLOW &&
- instr != FTS_NOINSTR && instr != FTS_SKIP) {
- errno = EINVAL;
- return (1);
- }
- p->fts_instr = instr;
- return (0);
-}
-
-FTSENT *
-fts_children(FTS *sp, int instr)
-{
- FTSENT *p;
- int fd;
-
- if (instr != 0 && instr != FTS_NAMEONLY) {
- errno = EINVAL;
- return (NULL);
- }
-
- /* Set current node pointer. */
- p = sp->fts_cur;
-
- /*
- * Errno set to 0 so user can distinguish empty directory from
- * an error.
- */
- errno = 0;
-
- /* Fatal errors stop here. */
- if (ISSET(FTS_STOP))
- return (NULL);
-
- /* Return logical hierarchy of user's arguments. */
- if (p->fts_info == FTS_INIT)
- return (p->fts_link);
-
- /*
- * If not a directory being visited in pre-order, stop here. Could
- * allow FTS_DNR, assuming the user has fixed the problem, but the
- * same effect is available with FTS_AGAIN.
- */
- if (p->fts_info != FTS_D /* && p->fts_info != FTS_DNR */)
- return (NULL);
-
- /* Free up any previous child list. */
- if (sp->fts_child != NULL)
- fts_lfree(sp->fts_child);
-
- if (instr == FTS_NAMEONLY) {
- SET(FTS_NAMEONLY);
- instr = BNAMES;
- } else
- instr = BCHILD;
-
- /*
- * If using chdir on a relative path and called BEFORE fts_read does
- * its chdir to the root of a traversal, we can lose -- we need to
- * chdir into the subdirectory, and we don't know where the current
- * directory is, so we can't get back so that the upcoming chdir by
- * fts_read will work.
- */
- if (p->fts_level != FTS_ROOTLEVEL || p->fts_accpath[0] == '/' ||
- ISSET(FTS_NOCHDIR))
- return (sp->fts_child = fts_build(sp, instr));
-
- if ((fd = _open(".", O_RDONLY | O_CLOEXEC, 0)) < 0)
- return (NULL);
- sp->fts_child = fts_build(sp, instr);
- if (fchdir(fd)) {
- (void)_close(fd);
- return (NULL);
- }
- (void)_close(fd);
- return (sp->fts_child);
-}
-
-#ifndef fts_get_clientptr
-#error "fts_get_clientptr not defined"
-#endif
-
-void *
-(fts_get_clientptr)(FTS *sp)
-{
-
- return (fts_get_clientptr(sp));
-}
-
-#ifndef fts_get_stream
-#error "fts_get_stream not defined"
-#endif
-
-FTS *
-(fts_get_stream)(FTSENT *p)
-{
- return (fts_get_stream(p));
-}
-
-void
-fts_set_clientptr(FTS *sp, void *clientptr)
-{
-
- sp->fts_clientptr = clientptr;
-}
-
-/*
- * This is the tricky part -- do not casually change *anything* in here. The
- * idea is to build the linked list of entries that are used by fts_children
- * and fts_read. There are lots of special cases.
- *
- * The real slowdown in walking the tree is the stat calls. If FTS_NOSTAT is
- * set and it's a physical walk (so that symbolic links can't be directories),
- * we can do things quickly. First, if it's a 4.4BSD file system, the type
- * of the file is in the directory entry. Otherwise, we assume that the number
- * of subdirectories in a node is equal to the number of links to the parent.
- * The former skips all stat calls. The latter skips stat calls in any leaf
- * directories and for any files after the subdirectories in the directory have
- * been found, cutting the stat calls by about 2/3.
- */
-static FTSENT *
-fts_build(FTS *sp, int type)
-{
- struct dirent *dp;
- FTSENT *p, *head;
- FTSENT *cur, *tail;
- DIR *dirp;
- void *oldaddr;
- char *cp;
- int cderrno, descend, /* oflag, */ saved_errno, nostat, doadjust;
- long level;
- long nlinks; /* has to be signed because -1 is a magic value */
- size_t dnamlen, len, maxlen, nitems;
-
- /* Set current node pointer. */
- cur = sp->fts_cur;
-
- /*
- * Open the directory for reading. If this fails, we're done.
- * If being called from fts_read, set the fts_info field.
- */
-#ifdef FTS_WHITEOUT
- if (ISSET(FTS_WHITEOUT))
- oflag = DTF_NODUP | DTF_REWIND;
- else
- oflag = DTF_HIDEW | DTF_NODUP | DTF_REWIND;
-#else
-#define __opendir2(path, flag) opendir(path)
-#endif
- if ((dirp = __opendir2(cur->fts_accpath, oflag)) == NULL) {
- if (type == BREAD) {
- cur->fts_info = FTS_DNR;
- cur->fts_errno = errno;
- }
- return (NULL);
- }
-
- /*
- * Nlinks is the number of possible entries of type directory in the
- * directory if we're cheating on stat calls, 0 if we're not doing
- * any stat calls at all, -1 if we're doing stats on everything.
- */
- if (type == BNAMES) {
- nlinks = 0;
- /* Be quiet about nostat, GCC. */
- nostat = 0;
- } else if (ISSET(FTS_NOSTAT) && ISSET(FTS_PHYSICAL)) {
- if (fts_ufslinks(sp, cur))
- nlinks = cur->fts_nlink - (ISSET(FTS_SEEDOT) ? 0 : 2);
- else
- nlinks = -1;
- nostat = 1;
- } else {
- nlinks = -1;
- nostat = 0;
- }
-
-#ifdef notdef
- (void)printf("nlinks == %d (cur: %d)\n", nlinks, cur->fts_nlink);
- (void)printf("NOSTAT %d PHYSICAL %d SEEDOT %d\n",
- ISSET(FTS_NOSTAT), ISSET(FTS_PHYSICAL), ISSET(FTS_SEEDOT));
-#endif
- /*
- * If we're going to need to stat anything or we want to descend
- * and stay in the directory, chdir. If this fails we keep going,
- * but set a flag so we don't chdir after the post-order visit.
- * We won't be able to stat anything, but we can still return the
- * names themselves. Note, that since fts_read won't be able to
- * chdir into the directory, it will have to return different path
- * names than before, i.e. "a/b" instead of "b". Since the node
- * has already been visited in pre-order, have to wait until the
- * post-order visit to return the error. There is a special case
- * here, if there was nothing to stat then it's not an error to
- * not be able to stat. This is all fairly nasty. If a program
- * needed sorted entries or stat information, they had better be
- * checking FTS_NS on the returned nodes.
- */
- cderrno = 0;
- if (nlinks || type == BREAD) {
- if (fts_safe_changedir(sp, cur, _dirfd(dirp), NULL)) {
- if (nlinks && type == BREAD)
- cur->fts_errno = errno;
- cur->fts_flags |= FTS_DONTCHDIR;
- descend = 0;
- cderrno = errno;
- } else
- descend = 1;
- } else
- descend = 0;
-
- /*
- * Figure out the max file name length that can be stored in the
- * current path -- the inner loop allocates more path as necessary.
- * We really wouldn't have to do the maxlen calculations here, we
- * could do them in fts_read before returning the path, but it's a
- * lot easier here since the length is part of the dirent structure.
- *
- * If not changing directories set a pointer so that can just append
- * each new name into the path.
- */
- len = NAPPEND(cur);
- if (ISSET(FTS_NOCHDIR)) {
- cp = sp->fts_path + len;
- *cp++ = '/';
- } else {
- /* GCC, you're too verbose. */
- cp = NULL;
- }
- len++;
- maxlen = sp->fts_pathlen - len;
-
- level = cur->fts_level + 1;
-
- /* Read the directory, attaching each entry to the `link' pointer. */
- doadjust = 0;
- for (head = tail = NULL, nitems = 0; dirp && (dp = readdir(dirp));) {
-#ifdef __CYGWIN__
- dnamlen = strlen (dp->d_name);
-#else
- dnamlen = dp->d_namlen;
-#endif
- if (!ISSET(FTS_SEEDOT) && ISDOT(dp->d_name))
- continue;
-
- if ((p = fts_alloc(sp, dp->d_name, dnamlen)) == NULL)
- goto mem1;
- if (dnamlen >= maxlen) { /* include space for NUL */
- oldaddr = sp->fts_path;
- if (fts_palloc(sp, dnamlen + len + 1)) {
- /*
- * No more memory for path or structures. Save
- * errno, free up the current structure and the
- * structures already allocated.
- */
-mem1: saved_errno = errno;
- if (p)
- free(p);
- fts_lfree(head);
- (void)closedir(dirp);
- cur->fts_info = FTS_ERR;
- SET(FTS_STOP);
- errno = saved_errno;
- return (NULL);
- }
- /* Did realloc() change the pointer? */
- if (oldaddr != sp->fts_path) {
- doadjust = 1;
- if (ISSET(FTS_NOCHDIR))
- cp = sp->fts_path + len;
- }
- maxlen = sp->fts_pathlen - len;
- }
-
- p->fts_level = level;
- p->fts_parent = sp->fts_cur;
- p->fts_pathlen = len + dnamlen;
-
-#ifdef FTS_WHITEOUT
- if (dp->d_type == DT_WHT)
- p->fts_flags |= FTS_ISW;
-#endif
-
- if (cderrno) {
- if (nlinks) {
- p->fts_info = FTS_NS;
- p->fts_errno = cderrno;
- } else
- p->fts_info = FTS_NSOK;
- p->fts_accpath = cur->fts_accpath;
- } else if (nlinks == 0
-#ifdef DT_DIR
- || (nostat &&
- dp->d_type != DT_DIR && dp->d_type != DT_UNKNOWN)
-#endif
- ) {
- p->fts_accpath =
- ISSET(FTS_NOCHDIR) ? p->fts_path : p->fts_name;
- p->fts_info = FTS_NSOK;
- } else {
- /* Build a file name for fts_stat to stat. */
- if (ISSET(FTS_NOCHDIR)) {
- p->fts_accpath = p->fts_path;
- memmove(cp, p->fts_name, p->fts_namelen + 1);
- } else
- p->fts_accpath = p->fts_name;
- /* Stat it. */
- p->fts_info = fts_stat(sp, p, 0);
-
- /* Decrement link count if applicable. */
- if (nlinks > 0 && (p->fts_info == FTS_D ||
- p->fts_info == FTS_DC || p->fts_info == FTS_DOT))
- --nlinks;
- }
-
- /* We walk in directory order so "ls -f" doesn't get upset. */
- p->fts_link = NULL;
- if (head == NULL)
- head = tail = p;
- else {
- tail->fts_link = p;
- tail = p;
- }
- ++nitems;
- }
- if (dirp)
- (void)closedir(dirp);
-
- /*
- * If realloc() changed the address of the path, adjust the
- * addresses for the rest of the tree and the dir list.
- */
- if (doadjust)
- fts_padjust(sp, head);
-
- /*
- * If not changing directories, reset the path back to original
- * state.
- */
- if (ISSET(FTS_NOCHDIR))
- sp->fts_path[cur->fts_pathlen] = '\0';
-
- /*
- * If descended after called from fts_children or after called from
- * fts_read and nothing found, get back. At the root level we use
- * the saved fd; if one of fts_open()'s arguments is a relative path
- * to an empty directory, we wind up here with no other way back. If
- * can't get back, we're done.
- */
- if (descend && (type == BCHILD || !nitems) &&
- (cur->fts_level == FTS_ROOTLEVEL ?
- FCHDIR(sp, sp->fts_rfd) :
- fts_safe_changedir(sp, cur->fts_parent, -1, ".."))) {
- cur->fts_info = FTS_ERR;
- SET(FTS_STOP);
- return (NULL);
- }
-
- /* If didn't find anything, return NULL. */
- if (!nitems) {
- if (type == BREAD)
- cur->fts_info = FTS_DP;
- return (NULL);
- }
-
- /* Sort the entries. */
- if (sp->fts_compar && nitems > 1)
- head = fts_sort(sp, head, nitems);
- return (head);
-}
-
-static int
-fts_stat(FTS *sp, FTSENT *p, int follow)
-{
- FTSENT *t;
- dev_t dev;
- ino_t ino;
- struct stat *sbp, sb;
- int saved_errno;
-
- /* If user needs stat info, stat buffer already allocated. */
- sbp = ISSET(FTS_NOSTAT) ? &sb : p->fts_statp;
-
-#ifdef FTS_WHITEOUT
- /* Check for whiteout. */
- if (p->fts_flags & FTS_ISW) {
- if (sbp != &sb) {
- memset(sbp, '\0', sizeof(*sbp));
- sbp->st_mode = S_IFWHT;
- }
- return (FTS_W);
- }
-#endif
-
- /*
- * If doing a logical walk, or application requested FTS_FOLLOW, do
- * a stat(2). If that fails, check for a non-existent symlink. If
- * fail, set the errno from the stat call.
- */
- if (ISSET(FTS_LOGICAL) || follow) {
- if (stat(p->fts_accpath, sbp)) {
- saved_errno = errno;
- if (!lstat(p->fts_accpath, sbp)) {
- errno = 0;
- return (FTS_SLNONE);
- }
- p->fts_errno = saved_errno;
- goto err;
- }
- } else if (lstat(p->fts_accpath, sbp)) {
- p->fts_errno = errno;
-err: memset(sbp, 0, sizeof(struct stat));
- return (FTS_NS);
- }
-
- if (S_ISDIR(sbp->st_mode)) {
- /*
- * Set the device/inode. Used to find cycles and check for
- * crossing mount points. Also remember the link count, used
- * in fts_build to limit the number of stat calls. It is
- * understood that these fields are only referenced if fts_info
- * is set to FTS_D.
- */
- dev = p->fts_dev = sbp->st_dev;
- ino = p->fts_ino = sbp->st_ino;
- p->fts_nlink = sbp->st_nlink;
-
- if (ISDOT(p->fts_name))
- return (FTS_DOT);
-
- /*
- * Cycle detection is done by brute force when the directory
- * is first encountered. If the tree gets deep enough or the
- * number of symbolic links to directories is high enough,
- * something faster might be worthwhile.
- */
- for (t = p->fts_parent;
- t->fts_level >= FTS_ROOTLEVEL; t = t->fts_parent)
- if (ino == t->fts_ino && dev == t->fts_dev) {
- p->fts_cycle = t;
- return (FTS_DC);
- }
- return (FTS_D);
- }
- if (S_ISLNK(sbp->st_mode))
- return (FTS_SL);
- if (S_ISREG(sbp->st_mode))
- return (FTS_F);
- return (FTS_DEFAULT);
-}
-
-/*
- * The comparison function takes pointers to pointers to FTSENT structures.
- * Qsort wants a comparison function that takes pointers to void.
- * (Both with appropriate levels of const-poisoning, of course!)
- * Use a trampoline function to deal with the difference.
- */
-static int
-fts_compar(const void *a, const void *b)
-{
- FTS *parent;
-
- parent = (*(const FTSENT * const *)a)->fts_fts;
- return (*parent->fts_compar)(a, b);
-}
-
-static FTSENT *
-fts_sort(FTS *sp, FTSENT *head, size_t nitems)
-{
- FTSENT **ap, *p;
-
- /*
- * Construct an array of pointers to the structures and call qsort(3).
- * Reassemble the array in the order returned by qsort. If unable to
- * sort for memory reasons, return the directory entries in their
- * current order. Allocate enough space for the current needs plus
- * 40 so don't realloc one entry at a time.
- */
- if (nitems > sp->fts_nitems) {
- sp->fts_nitems = nitems + 40;
- if ((sp->fts_array = reallocf(sp->fts_array,
- sp->fts_nitems * sizeof(FTSENT *))) == NULL) {
- sp->fts_nitems = 0;
- return (head);
- }
- }
- for (ap = sp->fts_array, p = head; p; p = p->fts_link)
- *ap++ = p;
- qsort(sp->fts_array, nitems, sizeof(FTSENT *), fts_compar);
- for (head = *(ap = sp->fts_array); --nitems; ++ap)
- ap[0]->fts_link = ap[1];
- ap[0]->fts_link = NULL;
- return (head);
-}
-
-static FTSENT *
-fts_alloc(FTS *sp, const char *name, size_t namelen)
-{
- FTSENT *p;
- size_t len;
-
- struct ftsent_withstat {
- FTSENT ent;
- struct stat statbuf;
- };
-
- /*
- * The file name is a variable length array and no stat structure is
- * necessary if the user has set the nostat bit. Allocate the FTSENT
- * structure, the file name and the stat structure in one chunk, but
- * be careful that the stat structure is reasonably aligned.
- */
- if (ISSET(FTS_NOSTAT))
- len = sizeof(FTSENT) + namelen + 1;
- else
- len = sizeof(struct ftsent_withstat) + namelen + 1;
-
- if ((p = malloc(len)) == NULL)
- return (NULL);
-
- if (ISSET(FTS_NOSTAT)) {
- p->fts_name = (char *)(p + 1);
- p->fts_statp = NULL;
- } else {
- p->fts_name = (char *)((struct ftsent_withstat *)p + 1);
- p->fts_statp = &((struct ftsent_withstat *)p)->statbuf;
- }
-
- /* Copy the name and guarantee NUL termination. */
- memcpy(p->fts_name, name, namelen);
- p->fts_name[namelen] = '\0';
- p->fts_namelen = namelen;
- p->fts_path = sp->fts_path;
- p->fts_errno = 0;
- p->fts_flags = 0;
- p->fts_instr = FTS_NOINSTR;
- p->fts_number = 0;
- p->fts_pointer = NULL;
- p->fts_fts = sp;
- return (p);
-}
-
-static void
-fts_lfree(FTSENT *head)
-{
- FTSENT *p;
-
- /* Free a linked list of structures. */
- while ((p = head)) {
- head = head->fts_link;
- free(p);
- }
-}
-
-/*
- * Allow essentially unlimited paths; find, rm, ls should all work on any tree.
- * Most systems will allow creation of paths much longer than MAXPATHLEN, even
- * though the kernel won't resolve them. Add the size (not just what's needed)
- * plus 256 bytes so don't realloc the path 2 bytes at a time.
- */
-static int
-fts_palloc(FTS *sp, size_t more)
-{
-
- sp->fts_pathlen += more + 256;
- sp->fts_path = reallocf(sp->fts_path, sp->fts_pathlen);
- return (sp->fts_path == NULL);
-}
-
-/*
- * When the path is realloc'd, have to fix all of the pointers in structures
- * already returned.
- */
-static void
-fts_padjust(FTS *sp, FTSENT *head)
-{
- FTSENT *p;
- char *addr = sp->fts_path;
-
-#define ADJUST(p) do { \
- if ((p)->fts_accpath != (p)->fts_name) { \
- (p)->fts_accpath = \
- (char *)addr + ((p)->fts_accpath - (p)->fts_path); \
- } \
- (p)->fts_path = addr; \
-} while (0)
- /* Adjust the current set of children. */
- for (p = sp->fts_child; p; p = p->fts_link)
- ADJUST(p);
-
- /* Adjust the rest of the tree, including the current level. */
- for (p = head; p->fts_level >= FTS_ROOTLEVEL;) {
- ADJUST(p);
- p = p->fts_link ? p->fts_link : p->fts_parent;
- }
-}
-
-static size_t
-fts_maxarglen(argv)
- char * const *argv;
-{
- size_t len, max;
-
- for (max = 0; *argv; ++argv)
- if ((len = strlen(*argv)) > max)
- max = len;
- return (max + 1);
-}
-
-/*
- * Change to dir specified by fd or p->fts_accpath without getting
- * tricked by someone changing the world out from underneath us.
- * Assumes p->fts_dev and p->fts_ino are filled in.
- */
-static int
-fts_safe_changedir(FTS *sp, FTSENT *p, int fd, const char *path)
-{
- int ret, oerrno, newfd;
- struct stat sb;
-
- newfd = fd;
- if (ISSET(FTS_NOCHDIR))
- return (0);
- if (fd < 0 && (newfd = _open(path, O_RDONLY | O_DIRECTORY |
- O_CLOEXEC, 0)) < 0)
- return (-1);
- if (_fstat(newfd, &sb)) {
- ret = -1;
- goto bail;
- }
- if (p->fts_dev != sb.st_dev || p->fts_ino != sb.st_ino) {
- errno = ENOENT; /* disinformation */
- ret = -1;
- goto bail;
- }
- ret = fchdir(newfd);
-bail:
- oerrno = errno;
- if (fd < 0)
- (void)_close(newfd);
- errno = oerrno;
- return (ret);
-}
-
-/*
- * Check if the filesystem for "ent" has UFS-style links.
- */
-static int
-fts_ufslinks(FTS *sp, const FTSENT *ent)
-{
- struct _fts_private *priv;
-#ifndef __CYGWIN__
- const char **cpp;
-#endif
-
- priv = (struct _fts_private *)sp;
- /*
- * If this node's device is different from the previous, grab
- * the filesystem information, and decide on the reliability
- * of the link information from this filesystem for stat(2)
- * avoidance.
- */
- if (priv->ftsp_dev != ent->fts_dev) {
- if (statfs(ent->fts_path, &priv->ftsp_statfs) != -1) {
- priv->ftsp_dev = ent->fts_dev;
-#ifdef __CYGWIN__
- /* The link count is reliable in Cygwin's directory
- stat structures, unless the link count is 1.
- This indicates a filesystem on which Cygwin
- refuses to count the directory links for speed. */
- priv->ftsp_linksreliable = (ent->fts_nlink == 1)
- ? 0 : 1;
-#else
- priv->ftsp_linksreliable = 0;
- for (cpp = ufslike_filesystems; *cpp; cpp++) {
- if (strcmp(priv->ftsp_statfs.f_fstypename,
- *cpp) == 0) {
- priv->ftsp_linksreliable = 1;
- break;
- }
- }
-#endif
- } else {
- priv->ftsp_linksreliable = 0;
- }
- }
- return (priv->ftsp_linksreliable);
-}
diff --git a/winsup/cygwin/libc/ftw.c b/winsup/cygwin/libc/ftw.c
deleted file mode 100644
index 61d1e7c21..000000000
--- a/winsup/cygwin/libc/ftw.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/* $OpenBSD: ftw.c,v 1.4 2004/07/07 16:05:23 millert Exp $ */
-
-/*
- * Copyright (c) 2003, 2004 Todd C. Miller <Todd.Miller@courtesan.com>
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Sponsored in part by the Defense Advanced Research Projects
- * Agency (DARPA) and Air Force Research Laboratory, Air Force
- * Materiel Command, USAF, under agreement number F39502-99-1-0512.
- */
-
-#if 0
-#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$OpenBSD: ftw.c,v 1.4 2004/07/07 16:05:23 millert Exp $";
-#endif /* LIBC_SCCS and not lint */
-#endif
-
-#ifdef __CYGWIN__
-#include "winsup.h"
-#endif
-#include <sys/cdefs.h>
-#if 0
-__FBSDID("$FreeBSD: /repoman/r/ncvs/src/lib/libc/gen/ftw.c,v 1.4 2004/08/24 13:00:55 tjr Exp $");
-#endif
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <errno.h>
-#include <fts.h>
-#include <ftw.h>
-#include <limits.h>
-
-int
-ftw(const char *path, int (*fn)(const char *, const struct stat *, int),
- int nfds __attribute__ ((unused)))
-{
- char * const paths[2] = { (char *)path, NULL };
- FTSENT *cur;
- FTS *ftsp;
- int error = 0, fnflag, sverrno;
-
-#if 0
- /* GLibc allows nfds < 1 and treats it as nfds == 1. Since nfds is
- not used in this OpenBSD version anyway, just ignore it for
- Linux compatibility. */
- /* XXX - nfds is currently unused */
- if (nfds < 1 || nfds > OPEN_MAX) {
- errno = EINVAL;
- return (-1);
- }
-#endif
-
- ftsp = fts_open(paths, FTS_LOGICAL | FTS_COMFOLLOW | FTS_NOCHDIR, NULL);
- if (ftsp == NULL)
- return (-1);
- while ((cur = fts_read(ftsp)) != NULL) {
- switch (cur->fts_info) {
- case FTS_D:
- fnflag = FTW_D;
- break;
- case FTS_DNR:
- fnflag = FTW_DNR;
- break;
- case FTS_DP:
- /* we only visit in preorder */
- continue;
- case FTS_F:
- case FTS_DEFAULT:
- fnflag = FTW_F;
- break;
- case FTS_NS:
- case FTS_NSOK:
- case FTS_SLNONE:
- fnflag = FTW_NS;
- break;
- case FTS_SL:
- fnflag = FTW_SL;
- break;
- case FTS_DC:
- errno = ELOOP;
- /* FALLTHROUGH */
- default:
- error = -1;
- goto done;
- }
- error = fn(cur->fts_path, cur->fts_statp, fnflag);
- if (error != 0)
- break;
- }
-done:
- sverrno = errno;
- if (fts_close(ftsp) != 0 && error == 0)
- error = -1;
- else
- errno = sverrno;
- return (error);
-}
diff --git a/winsup/cygwin/libc/getopt.c b/winsup/cygwin/libc/getopt.c
deleted file mode 100644
index bc35f96d4..000000000
--- a/winsup/cygwin/libc/getopt.c
+++ /dev/null
@@ -1,535 +0,0 @@
-/* $OpenBSD: getopt_long.c,v 1.23 2007/10/31 12:34:57 chl Exp $ */
-/* $NetBSD: getopt_long.c,v 1.15 2002/01/31 22:43:40 tv Exp $ */
-
-/*
- * Copyright (c) 2002 Todd C. Miller <Todd.Miller@courtesan.com>
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Sponsored in part by the Defense Advanced Research Projects
- * Agency (DARPA) and Air Force Research Laboratory, Air Force
- * Materiel Command, USAF, under agreement number F39502-99-1-0512.
- */
-/*-
- * Copyright (c) 2000 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Dieter Baron and Thomas Klausner.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <err.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <string.h>
-#define __INSIDE_CYGWIN__
-#include <getopt.h>
-
-#define REPLACE_GETOPT /* use this getopt as the system getopt(3) */
-
-#ifdef REPLACE_GETOPT
-int opterr = 1; /* if error message should be printed */
-int optind = 1; /* index into parent argv vector */
-int optopt = '?'; /* character checked for validity */
-int optreset; /* reset getopt */
-char *optarg; /* argument associated with option */
-#endif
-
-#define PRINT_ERROR ((opterr) && (*options != ':'))
-
-#define FLAG_PERMUTE 0x01 /* permute non-options to the end of argv */
-#define FLAG_ALLARGS 0x02 /* treat non-options as args to option "-1" */
-#define FLAG_LONGONLY 0x04 /* operate as getopt_long_only */
-
-/* return values */
-#define BADCH (int)'?'
-#define BADARG ((*options == ':') ? (int)':' : (int)'?')
-#define INORDER (int)1
-
-#ifdef __CYGWIN__
-static char EMSG[] = "";
-#else
-#define EMSG ""
-#endif
-
-static int getopt_internal(int, char * const *, const char *,
- const struct option *, int *, int);
-static int parse_long_options(char * const *, const char *,
- const struct option *, int *, int);
-static int gcd(int, int);
-static void permute_args(int, int, int, char * const *);
-
-static char *place = EMSG; /* option letter processing */
-
-/* XXX: set optreset to 1 rather than these two */
-static int nonopt_start = -1; /* first non option argument (for permute) */
-static int nonopt_end = -1; /* first option after non options (for permute) */
-
-/* Error messages */
-static const char recargchar[] = "option requires an argument -- %c";
-static const char recargstring[] = "option requires an argument -- %s";
-static const char ambig[] = "ambiguous option -- %.*s";
-static const char noarg[] = "option doesn't take an argument -- %.*s";
-static const char illoptchar[] = "unknown option -- %c";
-static const char illoptstring[] = "unknown option -- %s";
-
-/*
- * Compute the greatest common divisor of a and b.
- */
-static int
-gcd(int a, int b)
-{
- int c;
-
- c = a % b;
- while (c != 0) {
- a = b;
- b = c;
- c = a % b;
- }
-
- return (b);
-}
-
-/*
- * Exchange the block from nonopt_start to nonopt_end with the block
- * from nonopt_end to opt_end (keeping the same order of arguments
- * in each block).
- */
-static void
-permute_args(int panonopt_start, int panonopt_end, int opt_end,
- char * const *nargv)
-{
- int cstart, cyclelen, i, j, ncycle, nnonopts, nopts, pos;
- char *swap;
-
- /*
- * compute lengths of blocks and number and size of cycles
- */
- nnonopts = panonopt_end - panonopt_start;
- nopts = opt_end - panonopt_end;
- ncycle = gcd(nnonopts, nopts);
- cyclelen = (opt_end - panonopt_start) / ncycle;
-
- for (i = 0; i < ncycle; i++) {
- cstart = panonopt_end+i;
- pos = cstart;
- for (j = 0; j < cyclelen; j++) {
- if (pos >= panonopt_end)
- pos -= nnonopts;
- else
- pos += nopts;
- swap = nargv[pos];
- /* LINTED const cast */
- ((char **) nargv)[pos] = nargv[cstart];
- /* LINTED const cast */
- ((char **)nargv)[cstart] = swap;
- }
- }
-}
-
-/*
- * parse_long_options --
- * Parse long options in argc/argv argument vector.
- * Returns -1 if short_too is set and the option does not match long_options.
- */
-static int
-parse_long_options(char * const *nargv, const char *options,
- const struct option *long_options, int *idx, int short_too)
-{
- char *current_argv, *has_equal;
- size_t current_argv_len;
- int i, ambiguous, match;
-
-#define IDENTICAL_INTERPRETATION(_x, _y) \
- (long_options[(_x)].has_arg == long_options[(_y)].has_arg && \
- long_options[(_x)].flag == long_options[(_y)].flag && \
- long_options[(_x)].val == long_options[(_y)].val)
-
- current_argv = place;
- match = -1;
- ambiguous = 0;
-
- optind++;
-
- if ((has_equal = strchr(current_argv, '=')) != NULL) {
- /* argument found (--option=arg) */
- current_argv_len = has_equal - current_argv;
- has_equal++;
- } else
- current_argv_len = strlen(current_argv);
-
- for (i = 0; long_options[i].name; i++) {
- /* find matching long option */
- if (strncmp(current_argv, long_options[i].name,
- current_argv_len))
- continue;
-
- if (strlen(long_options[i].name) == current_argv_len) {
- /* exact match */
- match = i;
- ambiguous = 0;
- break;
- }
- /*
- * If this is a known short option, don't allow
- * a partial match of a single character.
- */
- if (short_too && current_argv_len == 1)
- continue;
-
- if (match == -1) /* partial match */
- match = i;
- else if (!IDENTICAL_INTERPRETATION(i, match))
- ambiguous = 1;
- }
- if (ambiguous) {
- /* ambiguous abbreviation */
- if (PRINT_ERROR)
- warnx(ambig, (int)current_argv_len,
- current_argv);
- optopt = 0;
- return (BADCH);
- }
- if (match != -1) { /* option found */
- if (long_options[match].has_arg == no_argument
- && has_equal) {
- if (PRINT_ERROR)
- warnx(noarg, (int)current_argv_len,
- current_argv);
- /*
- * XXX: GNU sets optopt to val regardless of flag
- */
- if (long_options[match].flag == NULL)
- optopt = long_options[match].val;
- else
- optopt = 0;
- return (BADARG);
- }
- if (long_options[match].has_arg == required_argument ||
- long_options[match].has_arg == optional_argument) {
- if (has_equal)
- optarg = has_equal;
- else if (long_options[match].has_arg ==
- required_argument) {
- /*
- * optional argument doesn't use next nargv
- */
- optarg = nargv[optind++];
- }
- }
- if ((long_options[match].has_arg == required_argument)
- && (optarg == NULL)) {
- /*
- * Missing argument; leading ':' indicates no error
- * should be generated.
- */
- if (PRINT_ERROR)
- warnx(recargstring,
- current_argv);
- /*
- * XXX: GNU sets optopt to val regardless of flag
- */
- if (long_options[match].flag == NULL)
- optopt = long_options[match].val;
- else
- optopt = 0;
- --optind;
- return (BADARG);
- }
- } else { /* unknown option */
- if (short_too) {
- --optind;
- return (-1);
- }
- if (PRINT_ERROR)
- warnx(illoptstring, current_argv);
- optopt = 0;
- return (BADCH);
- }
- if (idx)
- *idx = match;
- if (long_options[match].flag) {
- *long_options[match].flag = long_options[match].val;
- return (0);
- } else
- return (long_options[match].val);
-#undef IDENTICAL_INTERPRETATION
-}
-
-/*
- * getopt_internal --
- * Parse argc/argv argument vector. Called by user level routines.
- */
-static int
-getopt_internal(int nargc, char * const *nargv, const char *options,
- const struct option *long_options, int *idx, int flags)
-{
- char *oli; /* option letter list index */
- int optchar, short_too;
- static int posixly_correct = -1;
-
- if (options == NULL)
- return (-1);
-
- /*
- * XXX Some GNU programs (like cvs) set optind to 0 instead of
- * XXX using optreset. Work around this braindamage.
- */
- if (optind == 0)
- optind = optreset = 1;
-
- /*
- * Disable GNU extensions if POSIXLY_CORRECT is set or options
- * string begins with a '+'.
- *
- * CV, 2009-12-14: Check POSIXLY_CORRECT anew if optind == 0 or
- * optreset != 0 for GNU compatibility.
- */
- if (posixly_correct == -1 || optreset != 0)
- posixly_correct = (getenv("POSIXLY_CORRECT") != NULL);
- if (*options == '-')
- flags |= FLAG_ALLARGS;
- else if (posixly_correct || *options == '+')
- flags &= ~FLAG_PERMUTE;
- if (*options == '+' || *options == '-')
- options++;
-
- optarg = NULL;
- if (optreset)
- nonopt_start = nonopt_end = -1;
-start:
- if (optreset || !*place) { /* update scanning pointer */
- optreset = 0;
- if (optind >= nargc) { /* end of argument vector */
- place = EMSG;
- if (nonopt_end != -1) {
- /* do permutation, if we have to */
- permute_args(nonopt_start, nonopt_end,
- optind, nargv);
- optind -= nonopt_end - nonopt_start;
- }
- else if (nonopt_start != -1) {
- /*
- * If we skipped non-options, set optind
- * to the first of them.
- */
- optind = nonopt_start;
- }
- nonopt_start = nonopt_end = -1;
- return (-1);
- }
- if (*(place = nargv[optind]) != '-' ||
- (place[1] == '\0' && strchr(options, '-') == NULL)) {
- place = EMSG; /* found non-option */
- if (flags & FLAG_ALLARGS) {
- /*
- * GNU extension:
- * return non-option as argument to option 1
- */
- optarg = nargv[optind++];
- return (INORDER);
- }
- if (!(flags & FLAG_PERMUTE)) {
- /*
- * If no permutation wanted, stop parsing
- * at first non-option.
- */
- return (-1);
- }
- /* do permutation */
- if (nonopt_start == -1)
- nonopt_start = optind;
- else if (nonopt_end != -1) {
- permute_args(nonopt_start, nonopt_end,
- optind, nargv);
- nonopt_start = optind -
- (nonopt_end - nonopt_start);
- nonopt_end = -1;
- }
- optind++;
- /* process next argument */
- goto start;
- }
- if (nonopt_start != -1 && nonopt_end == -1)
- nonopt_end = optind;
-
- /*
- * If we have "-" do nothing, if "--" we are done.
- */
- if (place[1] != '\0' && *++place == '-' && place[1] == '\0') {
- optind++;
- place = EMSG;
- /*
- * We found an option (--), so if we skipped
- * non-options, we have to permute.
- */
- if (nonopt_end != -1) {
- permute_args(nonopt_start, nonopt_end,
- optind, nargv);
- optind -= nonopt_end - nonopt_start;
- }
- nonopt_start = nonopt_end = -1;
- return (-1);
- }
- }
-
- /*
- * Check long options if:
- * 1) we were passed some
- * 2) the arg is not just "-"
- * 3) either the arg starts with -- we are getopt_long_only()
- */
- if (long_options != NULL && place != nargv[optind] &&
- (*place == '-' || (flags & FLAG_LONGONLY))) {
- short_too = 0;
- if (*place == '-')
- place++; /* --foo long option */
- else if (*place != ':' && strchr(options, *place) != NULL)
- short_too = 1; /* could be short option too */
-
- optchar = parse_long_options(nargv, options, long_options,
- idx, short_too);
- if (optchar != -1) {
- place = EMSG;
- return (optchar);
- }
- }
-
- if ((optchar = (int)*place++) == (int)':' ||
- (optchar == (int)'-' && *place != '\0') ||
- (oli = strchr(options, optchar)) == NULL) {
- /*
- * If the user specified "-" and '-' isn't listed in
- * options, return -1 (non-option) as per POSIX.
- * Otherwise, it is an unknown option character (or ':').
- */
- if (optchar == (int)'-' && *place == '\0')
- return (-1);
- if (!*place)
- ++optind;
- if (PRINT_ERROR)
- warnx(illoptchar, optchar);
- optopt = optchar;
- return (BADCH);
- }
- if (long_options != NULL && optchar == 'W' && oli[1] == ';') {
- /* -W long-option */
- if (*place) /* no space */
- /* NOTHING */;
- else if (++optind >= nargc) { /* no arg */
- place = EMSG;
- if (PRINT_ERROR)
- warnx(recargchar, optchar);
- optopt = optchar;
- return (BADARG);
- } else /* white space */
- place = nargv[optind];
- optchar = parse_long_options(nargv, options, long_options,
- idx, 0);
- place = EMSG;
- return (optchar);
- }
- if (*++oli != ':') { /* doesn't take argument */
- if (!*place)
- ++optind;
- } else { /* takes (optional) argument */
- optarg = NULL;
- if (*place) /* no white space */
- optarg = place;
- else if (oli[1] != ':') { /* arg not optional */
- if (++optind >= nargc) { /* no arg */
- place = EMSG;
- if (PRINT_ERROR)
- warnx(recargchar, optchar);
- optopt = optchar;
- return (BADARG);
- } else
- optarg = nargv[optind];
- }
- place = EMSG;
- ++optind;
- }
- /* dump back option letter */
- return (optchar);
-}
-
-#ifdef REPLACE_GETOPT
-/*
- * getopt --
- * Parse argc/argv argument vector.
- *
- * [eventually this will replace the BSD getopt]
- */
-int
-getopt(int nargc, char * const *nargv, const char *options)
-{
-
- /*
- * We don't pass FLAG_PERMUTE to getopt_internal() since
- * the BSD getopt(3) (unlike GNU) has never done this.
- *
- * Furthermore, since many privileged programs call getopt()
- * before dropping privileges it makes sense to keep things
- * as simple (and bug-free) as possible.
- */
- return (getopt_internal(nargc, nargv, options, NULL, NULL, 0));
-}
-#endif /* REPLACE_GETOPT */
-
-/*
- * getopt_long --
- * Parse argc/argv argument vector.
- */
-int
-getopt_long(int nargc, char * const *nargv, const char *options,
- const struct option *long_options, int *idx)
-{
-
- return (getopt_internal(nargc, nargv, options, long_options, idx,
- FLAG_PERMUTE));
-}
-
-/*
- * getopt_long_only --
- * Parse argc/argv argument vector.
- */
-int
-getopt_long_only(int nargc, char * const *nargv, const char *options,
- const struct option *long_options, int *idx)
-{
-
- return (getopt_internal(nargc, nargv, options, long_options, idx,
- FLAG_PERMUTE|FLAG_LONGONLY));
-}
diff --git a/winsup/cygwin/libc/inet_addr.c b/winsup/cygwin/libc/inet_addr.c
deleted file mode 100644
index 465e86ed3..000000000
--- a/winsup/cygwin/libc/inet_addr.c
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * Copyright (c) 1983, 1990, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * Portions Copyright (c) 1993 by Digital Equipment Corporation.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies, and that
- * the name of Digital Equipment Corporation not be used in advertising or
- * publicity pertaining to distribution of the document or software without
- * specific, written prior permission.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT
- * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
- * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-
-/*
- * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
- * Portions Copyright (c) 1996-1999 by Internet Software Consortium.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
- * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static const char sccsid[] = "@(#)inet_addr.c 8.1 (Berkeley) 6/17/93";
-static const char rcsid[] = "$Id$";
-#endif /* LIBC_SCCS and not lint */
-#include <sys/cdefs.h>
-#ifndef __CYGWIN__
-__FBSDID("$FreeBSD$");
-#else
-#include "winsup.h"
-#endif
-
-#ifndef __CYGWIN__
-#include "port_before.h"
-#endif
-
-#include <sys/types.h>
-#include <sys/param.h>
-
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
-#include <ctype.h>
-
-#ifndef __CYGWIN__
-#include "port_after.h"
-#endif
-
-/*
- * Check whether "cp" is a valid ascii representation
- * of an Internet address and convert to a binary address.
- * Returns 1 if the address is valid, 0 if not.
- * This replaces inet_addr, the return value from which
- * cannot distinguish between failure and a local broadcast address.
- */
-extern int
-cygwin_inet_aton(const char *cp, struct in_addr *addr) {
- u_long val;
- int base, n;
- char c;
- u_int8_t parts[4];
- u_int8_t *pp = parts;
- int digit;
-
- c = *cp;
- for (;;) {
- /*
- * Collect number up to ``.''.
- * Values are specified as for C:
- * 0x=hex, 0=octal, isdigit=decimal.
- */
- if (!isdigit((unsigned char)c))
- return (0);
- val = 0; base = 10; digit = 0;
- if (c == '0') {
- c = *++cp;
- if (c == 'x' || c == 'X')
- base = 16, c = *++cp;
- else {
- base = 8;
- digit = 1 ;
- }
- }
- for (;;) {
- if (isascii(c) && isdigit((unsigned char)c)) {
- if (base == 8 && (c == '8' || c == '9'))
- return (0);
- val = (val * base) + (c - '0');
- c = *++cp;
- digit = 1;
- } else if (base == 16 && isascii(c) &&
- isxdigit((unsigned char)c)) {
- val = (val << 4) |
- (c + 10 - (islower((unsigned char)c) ? 'a' : 'A'));
- c = *++cp;
- digit = 1;
- } else
- break;
- }
- if (c == '.') {
- /*
- * Internet format:
- * a.b.c.d
- * a.b.c (with c treated as 16 bits)
- * a.b (with b treated as 24 bits)
- */
- if (pp >= parts + 3 || val > 0xffU)
- return (0);
- *pp++ = val;
- c = *++cp;
- } else
- break;
- }
- /*
- * Check for trailing characters.
- */
- if (c != '\0' && (!isascii(c) || !isspace((unsigned char)c)))
- return (0);
- /*
- * Did we get a valid digit?
- */
- if (!digit)
- return (0);
- /*
- * Concoct the address according to
- * the number of parts specified.
- */
- n = pp - parts + 1;
- switch (n) {
- case 1: /* a -- 32 bits */
- break;
-
- case 2: /* a.b -- 8.24 bits */
- if (val > 0xffffffU)
- return (0);
- val |= parts[0] << 24;
- break;
-
- case 3: /* a.b.c -- 8.8.16 bits */
- if (val > 0xffffU)
- return (0);
- val |= (parts[0] << 24) | (parts[1] << 16);
- break;
-
- case 4: /* a.b.c.d -- 8.8.8.8 bits */
- if (val > 0xffU)
- return (0);
- val |= (parts[0] << 24) | (parts[1] << 16) | (parts[2] << 8);
- break;
- }
- if (addr != NULL)
- addr->s_addr = htonl(val);
- return (1);
-}
-
-/*
- * Ascii internet address interpretation routine.
- * The value returned is in network order.
- */
-in_addr_t /* XXX should be struct in_addr :( */
-cygwin_inet_addr(const char *cp) {
- struct in_addr val;
-
- if (cygwin_inet_aton(cp, &val))
- return (val.s_addr);
- return (INADDR_NONE);
-}
-
-#ifndef __CYGWIN__
-/*
- * Weak aliases for applications that use certain private entry points,
- * and fail to include <arpa/inet.h>.
- */
-#undef inet_addr
-__weak_reference(__inet_addr, inet_addr);
-#undef inet_aton
-__weak_reference(__inet_aton, inet_aton);
-#endif
diff --git a/winsup/cygwin/libc/inet_network.c b/winsup/cygwin/libc/inet_network.c
deleted file mode 100644
index 43a394cf4..000000000
--- a/winsup/cygwin/libc/inet_network.c
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Copyright (c) 1983, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static const char sccsid[] = "@(#)inet_network.c 8.1 (Berkeley) 6/4/93";
-#endif /* LIBC_SCCS and not lint */
-#include <sys/cdefs.h>
-#ifndef __CYGWIN__
-__FBSDID("$FreeBSD$");
-#else
-#include "winsup.h"
-#endif
-
-#ifndef __CYGWIN__
-#include "port_before.h"
-#endif
-
-#include <sys/types.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <ctype.h>
-
-#ifndef __CYGWIN__
-#include "port_after.h"
-#endif
-
-/*
- * Internet network address interpretation routine.
- * The library routines call this routine to interpret
- * network numbers.
- */
-in_addr_t
-cygwin_inet_network(cp)
- const char *cp;
-{
- in_addr_t val, base, n;
- char c;
- in_addr_t parts[4], *pp = parts;
- unsigned int i, digit;
-
-again:
- val = 0; base = 10; digit = 0;
- if (*cp == '0')
- digit = 1, base = 8, cp++;
- if (*cp == 'x' || *cp == 'X')
- base = 16, cp++;
- while ((c = *cp) != 0) {
- if (isdigit((unsigned char)c)) {
- if (base == 8U && (c == '8' || c == '9'))
- return (INADDR_NONE);
- val = (val * base) + (c - '0');
- cp++;
- digit = 1;
- continue;
- }
- if (base == 16U && isxdigit((unsigned char)c)) {
- val = (val << 4) +
- (c + 10 - (islower((unsigned char)c) ? 'a' : 'A'));
- cp++;
- digit = 1;
- continue;
- }
- break;
- }
- if (!digit)
- return (INADDR_NONE);
- if (*cp == '.') {
- if (pp >= parts + 4 || val > 0xffU)
- return (INADDR_NONE);
- *pp++ = val, cp++;
- goto again;
- }
- if (*cp && !isspace(*cp&0xff))
- return (INADDR_NONE);
- *pp++ = val;
- n = pp - parts;
- if (n > 4U)
- return (INADDR_NONE);
- for (val = 0, i = 0; i < n; i++) {
- val <<= 8;
- val |= parts[i] & 0xff;
- }
- return (val);
-}
-
-#ifndef __CYGWIN__
-/*
- * Weak aliases for applications that use certain private entry points,
- * and fail to include <arpa/inet.h>.
- */
-#undef inet_network
-__weak_reference(__inet_network, inet_network);
-#endif
diff --git a/winsup/cygwin/libc/minires-os-if.c b/winsup/cygwin/libc/minires-os-if.c
deleted file mode 100644
index 94460ffb2..000000000
--- a/winsup/cygwin/libc/minires-os-if.c
+++ /dev/null
@@ -1,587 +0,0 @@
-/* minires-os-if.c. Stub synchronous resolver for Cygwin.
-
- Copyright 2006, 2007, 2008, 2009, 2011, 2012 Red Hat, Inc.
-
- Written by Pierre A. Humblet <Pierre.Humblet@ieee.org>
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#define __INSIDE_CYGWIN_NET__
-#define USE_SYS_TYPES_FD_SET
-#include <winsup.h>
-#include <ws2tcpip.h>
-#include <iphlpapi.h>
-#include <windns.h>
-#include "ntdll.h"
-#undef h_errno
-#include "minires.h"
-
-#ifdef __CYGWIN__
-/***********************************************************************
- *
- Windows interface code
-
-***********************************************************************/
-
-/* Conflict between Windows definitions and others */
-#undef ERROR
-#undef NOERROR
-#undef DELETE
-
-/***********************************************************************
- * write_record: Translates a Windows DNS record into a compressed record
- ***********************************************************************/
-
-#define PUTDOMAIN(d,p)\
- {int res = dn_comp(d, p, EndPtr - p, dnptrs, lastdnptr); p += res < 0 ? (int) strlen(d) : res; }
-
-static u_char * write_record(unsigned char * ptr, PDNS_RECORD rr, unsigned char * EndPtr,
- unsigned char ** dnptrs, unsigned char ** lastdnptr, int debug)
-{
- u_char * rd_length_ptr;
-
- PUTDOMAIN(rr->pName, ptr);
-
- if (ptr + 4 > EndPtr)
- ptr += 4;
- else {
- PUTSHORT(rr->wType, ptr);
- PUTSHORT(ns_c_in, ptr);
- }
- if ((rr->Flags.DW & 0x3) == DnsSectionQuestion)
- return ptr;
-
- if (ptr + 4 > EndPtr)
- ptr += 4;
- else {
- PUTLONG(rr->dwTtl, ptr);
- }
- rd_length_ptr = ptr;
- ptr += 2; /* Placeholder for RDLENGTH */
-
- /* The default case uses an undocumented feature of the Windows
- resolver for types greater than 16.
- The DNS_RECORD Data contains the record in wire format. */
-
- switch(rr->wType) {
- case DNS_TYPE_A:
- {
- u_char * aptr = (u_char *) & rr->Data.A.IpAddress;
- if (ptr + 4 <= EndPtr) {
- ptr[0] = aptr[0];
- ptr[1] = aptr[1];
- ptr[2] = aptr[2];
- ptr[3] = aptr[3];
- }
- ptr += 4;
- break;
- }
- case DNS_TYPE_NS:
- case DNS_TYPE_MD:
- case DNS_TYPE_MF:
- case DNS_TYPE_CNAME:
- case DNS_TYPE_MB:
- case DNS_TYPE_MG:
- case DNS_TYPE_MR:
- case DNS_TYPE_PTR:
- PUTDOMAIN(rr->Data.PTR.pNameHost, ptr);
- break;
- case DNS_TYPE_SOA:
- PUTDOMAIN(rr->Data.SOA.pNamePrimaryServer, ptr);
- PUTDOMAIN(rr->Data.SOA.pNameAdministrator, ptr);
- if (ptr + 20 > EndPtr)
- ptr += 20;
- else {
- PUTLONG(rr->Data.SOA.dwSerialNo, ptr);
- PUTLONG(rr->Data.SOA.dwRefresh, ptr);
- PUTLONG(rr->Data.SOA.dwRetry, ptr);
- PUTLONG(rr->Data.SOA.dwExpire, ptr);
- PUTLONG(rr->Data.SOA.dwDefaultTtl, ptr);
- }
- break;
- case DNS_TYPE_NULL:
- if (ptr + rr->Data.Null.dwByteCount <= EndPtr)
- memcpy(ptr, rr->Data.Null.Data, rr->Data.Null.dwByteCount);
- ptr += rr->Data.Null.dwByteCount;
- if (rr->Data.Null.dwByteCount == rr->wDataLength - sizeof(DNS_NULL_DATA) + 1)
- DPRINTF(debug, "Null byte count has an unexpected value\n");
- break;
- case DNS_TYPE_WKS:
- if (ptr + rr->wDataLength - sizeof(DNS_WKS_DATA) + 1 + 5 > EndPtr)
- ptr += rr->wDataLength - sizeof(DNS_WKS_DATA) + 1 + 5;
- else {
- PUTLONG(rr->Data.WKS.IpAddress, ptr);
- *ptr++ = rr->Data.WKS.chProtocol;
- memcpy(ptr, rr->Data.WKS.BitMask, rr->wDataLength - sizeof(DNS_WKS_DATA) + 1);
- ptr += rr->wDataLength - sizeof(DNS_WKS_DATA) + 1;
- }
- break;
- case DNS_TYPE_MINFO:
- case DNS_TYPE_RP:
- PUTDOMAIN(rr->Data.MINFO.pNameMailbox, ptr);
- PUTDOMAIN(rr->Data.MINFO.pNameErrorsMailbox, ptr);
- break;
- case DNS_TYPE_MX:
- case DNS_TYPE_AFSDB:
- case DNS_TYPE_RT:
- if (ptr + 2 > EndPtr)
- ptr += 2;
- else
- PUTSHORT(rr->Data.MX.wPreference, ptr);
- PUTDOMAIN(rr->Data.MX.pNameExchange, ptr);
- break;
- case DNS_TYPE_HINFO:
- case DNS_TYPE_ISDN:
- case DNS_TYPE_TEXT:
- case DNS_TYPE_X25:
- {
- unsigned int i, len;
- for (i = 0; i < rr->Data.TXT.dwStringCount; i++) {
- len = strlen(rr->Data.TXT.pStringArray[i]) & 0xFF;
- if (ptr + len + 1 > EndPtr)
- ptr += len + 1;
- else {
- *ptr++ = len;
- memcpy(ptr, rr->Data.TXT.pStringArray[i], len);
- ptr += len;
- }
- }
- break;
- }
- case DNS_TYPE_SRV:
- if (ptr + 6 > EndPtr)
- ptr += 6;
- else {
- PUTSHORT(rr->Data.SRV.wPriority, ptr);
- PUTSHORT(rr->Data.SRV.wWeight, ptr);
- PUTSHORT(rr->Data.SRV.wPort, ptr);
- }
- PUTDOMAIN(rr->Data.SRV.pNameTarget, ptr);
- break;
- default:
- {
- unsigned int len = rr->wDataLength;
- DPRINTF(debug, "No structure for wType %d\n", rr->wType);
- if (ptr + len <= EndPtr)
- memcpy(ptr, (char *) &rr->Data, len);
- ptr += len;
- break;
- }
- }
- if (rd_length_ptr + 2 <= EndPtr)
- PUTSHORT(ptr - rd_length_ptr - 2, rd_length_ptr);
- return ptr;
-}
-
-/***********************************************************************
- *
- cygwin_query: implements res_nquery by calling DnsQuery
-
- ***********************************************************************/
-static int cygwin_query(res_state statp, const char * DomName, int Class, int Type,
- unsigned char * AnsPtr, int AnsLength)
-{
- DNS_STATUS res;
- PDNS_RECORD pQueryResultsSet, rr;
- DWORD section;
- int len, counts[4] = {0, 0, 0, 0}, debug = statp->options & RES_DEBUG;
- unsigned char * dnptrs[256], * ptr;
-
- dnptrs[0] = AnsPtr;
- dnptrs[1] = NULL;
-
- if (Class != ns_c_in) {
- errno = ENOSYS;
- statp->res_h_errno = NETDB_INTERNAL;
- return -1;
- }
-
- res = DnsQuery_A(DomName, Type, DNS_QUERY_TREAT_AS_FQDN,
- NULL, &pQueryResultsSet, NULL);
-#if 0
-#define NETDB_INTERNAL -1 /* see errno */
-#define HOST_NOT_FOUND 1 /* Authoritative Answer Host not found */
-#define TRY_AGAIN 2 /* Non-Authoritive Host not found, or SERVERFAIL */
-#define NO_RECOVERY 3 /* Non recoverable errors, FORMERR, REFUSED, NOTIMP */
-#define NO_DATA 4 /* Valid name, no data record of requested type */
-#endif
-
- DPRINTF(debug, "DnsQuery: %lu (Windows)\n", res);
- if (res) {
- switch (res) {
- case ERROR_INVALID_NAME:
- errno = EINVAL;
- statp->res_h_errno = NETDB_INTERNAL;;
- break;
- case ERROR_TIMEOUT:
- statp->res_h_errno = TRY_AGAIN;
- break;
- case DNS_ERROR_RCODE_NAME_ERROR:
- statp->res_h_errno = HOST_NOT_FOUND;
- break;
- case DNS_ERROR_RCODE_SERVER_FAILURE:
- statp->res_h_errno = TRY_AGAIN;
- break;
- case DNS_ERROR_NO_DNS_SERVERS:
- case DNS_ERROR_RCODE_FORMAT_ERROR:
- case DNS_ERROR_RCODE_NOT_IMPLEMENTED:
- case DNS_ERROR_RCODE_REFUSED:
- statp->res_h_errno = NO_RECOVERY;
- break;
- case DNS_INFO_NO_RECORDS: /* May be returned even if the host doesn't exist */
- statp->res_h_errno = NO_DATA;
- break;
- default:
- DPRINTF(debug, "Unknown code %lu for %s %d\n", res, DomName, Type);
- statp->res_h_errno = NO_RECOVERY;
- break;
- }
- len = -1;
- goto done;
- }
-
- ptr = AnsPtr + HFIXEDSZ; /* Skip header */
-
- rr = pQueryResultsSet;
- section = 0;
- while (rr) {
- if (!counts[0] && (rr->Flags.DW & 0x3)) {
- /* No question. Adopt the first name as the name in the question */
- if ((len = dn_comp(rr->pName, ptr, AnsLength - 4,
- dnptrs, &dnptrs[DIM(dnptrs) - 1])) < 0) {
- ptr = NULL;
- break;
- }
- ptr += len;
- PUTSHORT(Type, ptr);
- PUTSHORT(ns_c_in, ptr);
- counts[0] = 1;
- }
-
- DPRINTF(debug, "%s Section %d Type %u Windows Record Length %u\n",
- rr->pName, rr->Flags.DW & 0x3, rr->wType, rr->wDataLength);
-
- /* Check the records are in correct section order */
- if ((rr->Flags.DW & 0x3) < section) {
- DPRINTF(debug, "Unexpected section order %s %d\n", DomName, Type);
- continue;
- }
- section = rr->Flags.DW & 0x3;
-
- ptr = write_record(ptr, rr, AnsPtr + AnsLength, dnptrs,
- &dnptrs[DIM(dnptrs) - 1], debug);
-
- counts[section]++;
- rr = rr->pNext;
- }
-
- DnsRecordListFree(pQueryResultsSet, DnsFreeRecordList);
-
- len = ptr - AnsPtr;
-done:
- ptr = AnsPtr;
- PUTSHORT(0, ptr); /* Id */
- PUTSHORT((QR << 8) + RA + RD, ptr);
- for (section = 0; section < DIM(counts); section++) {
- PUTSHORT(counts[section], ptr);
- }
- return len;
-}
-
-/***********************************************************************
- *
- get_registry_items: returns dns items from the registry
-
- in: Unicode representation of registry value "value".
- what: 0 addresses ; 1 search list
-
-***********************************************************************/
-static void get_registry_dns_items(PUNICODE_STRING in, res_state statp,
- int what)
-{
- int debug = statp->options & RES_DEBUG;
-
- if (in->Length) {
- char list[in->Length];
- size_t size = wcstombs (list, in->Buffer, in->Length);
- if (what == 0) { /* Get the addresses */
- char *ap, *srch;
- size_t numAddresses = 0;
- for (ap = list; ap < list + size && *ap; ap = srch) {
- /* The separation character can be 0, ' ', or ','. */
- for (srch = ap; *srch && (isdigit((unsigned) *srch) || *srch == '.' );
- srch++);
- *srch++ = 0;
- if (numAddresses < DIM(statp->nsaddr_list)) {
- DPRINTF(debug, "server \"%s\"\n", ap);
- statp->nsaddr_list[numAddresses].sin_addr.s_addr = cygwin_inet_addr((char *) ap);
- if ( statp->nsaddr_list[numAddresses].sin_addr.s_addr != 0 )
- numAddresses++;
- }
- else
- DPRINTF(debug, "no space for server \"%s\"\n", ap);
- }
- statp->nscount = numAddresses;
- }
- else /* Parse the search line */
- minires_get_search(list, statp);
- }
- return;
-}
-
-/***********************************************************************
- *
- get_registry_dns:
-
- Read the registry to get dns server addresses in Network Byte Order,
- and set statp->nscount (for NT <= 4.0)
- Read the registry SearchList
-
-***********************************************************************/
-
-static void get_registry_dns(res_state statp)
-{
- NTSTATUS status;
- const PCWSTR keyName = L"Tcpip\\Parameters";
-
- DPRINTF(statp->options & RES_DEBUG, "key %s\n", keyName);
- status = RtlCheckRegistryKey (RTL_REGISTRY_SERVICES, keyName);
- if (!NT_SUCCESS (status))
- {
- DPRINTF (statp->options & RES_DEBUG, "RtlCheckRegistryKey: status %p\n",
- status);
- return;
- }
-
- UNICODE_STRING uns = { 0, 0, NULL };
- UNICODE_STRING udns = { 0, 0, NULL };
- UNICODE_STRING usl = { 0, 0, NULL };
- RTL_QUERY_REGISTRY_TABLE tab[4] = {
- { NULL, RTL_QUERY_REGISTRY_DIRECT | RTL_QUERY_REGISTRY_NOEXPAND,
- L"NameServer", &uns, REG_NONE, NULL, 0 },
- { NULL, RTL_QUERY_REGISTRY_DIRECT | RTL_QUERY_REGISTRY_NOEXPAND,
- L"DhcpNameServer", &udns, REG_NONE, NULL, 0 },
- { NULL, RTL_QUERY_REGISTRY_DIRECT | RTL_QUERY_REGISTRY_NOEXPAND,
- L"SearchList", &usl, REG_NONE, NULL, 0 },
- };
-
- status = RtlQueryRegistryValues (RTL_REGISTRY_SERVICES, keyName, tab,
- NULL, NULL);
- if (!NT_SUCCESS (status))
- {
- DPRINTF (statp->options & RES_DEBUG,
- "RtlQueryRegistryValues: status %p\n", status);
- return;
- }
-
- if (statp->nscount == 0)
- get_registry_dns_items(&uns, statp, 0);
- if (statp->nscount == 0)
- get_registry_dns_items(&udns, statp, 0);
- if (statp->dnsrch[0] == NULL)
- get_registry_dns_items(&usl, statp, 1);
-
- if (uns.Buffer)
- RtlFreeUnicodeString (&uns);
- if (udns.Buffer)
- RtlFreeUnicodeString (&udns);
- if (usl.Buffer)
- RtlFreeUnicodeString (&usl);
-
- return;
-}
-
-/***********************************************************************
- *
- get_dns_info: Get the search list or the domain name
- and the dns server addresses in Network Byte Order
- Set statp->os_query if DnsQuery is available.
-
-***********************************************************************/
-void get_dns_info(res_state statp)
-{
-#if MAX_HOSTNAME_LEN > MAXHOSTNAMELEN
-#define MAX_HOSTNAME_SIZE (MAX_HOSTNAME_LEN + 1)
-#else
-#define MAX_HOSTNAME_SIZE (MAXHOSTNAMELEN + 1)
-#endif
-#if MAX_HOSTNAME_SIZE > 256 /* sizeof(defdname) */
-#error stap->defdname too short
-#endif
-
- int res, debug = statp->options & RES_DEBUG;
-
- ULONG ulOutBufLen = 0;
- DWORD dwRetVal;
- IP_ADDR_STRING * pIPAddr;
- FIXED_INFO * pFixedInfo;
- size_t numAddresses = 0;
-
- if (statp->use_os)
- {
- DPRINTF(debug, "using dnsapi.dll\n");
- statp->os_query = (typeof(statp->os_query)) cygwin_query;
- /* We just need the search list. Avoid loading iphlpapi. */
- statp->nscount = -1;
- }
-
- if (statp->nscount != 0)
- goto use_registry;
-
- /* First call to get the buffer length we need */
- dwRetVal = GetNetworkParams((FIXED_INFO *) 0, &ulOutBufLen);
- if (dwRetVal != ERROR_BUFFER_OVERFLOW) {
- DPRINTF(debug, "GetNetworkParams: error %lu (Windows)\n", dwRetVal);
- goto use_registry;
- }
- if ((pFixedInfo = (FIXED_INFO *) alloca(ulOutBufLen)) == 0) {
- DPRINTF(debug, "alloca: %s\n", strerror(errno));
- goto use_registry;
- }
- if ((dwRetVal = GetNetworkParams(pFixedInfo, & ulOutBufLen))) {
- DPRINTF(debug, "GetNetworkParams: error %lu (Windows)\n", dwRetVal);
- goto use_registry;
- }
-
- DPRINTF(debug, "GetNetworkParams: OK\n");
- /* Record server addresses, up to array size */
- for (pIPAddr = &(pFixedInfo->DnsServerList), numAddresses = 0;
- pIPAddr;
- pIPAddr = pIPAddr->Next) {
- if (numAddresses < DIM(statp->nsaddr_list)) {
- DPRINTF(debug, "server \"%s\"\n", pIPAddr->IpAddress.String);
- statp->nsaddr_list[numAddresses].sin_addr.s_addr = cygwin_inet_addr(pIPAddr->IpAddress.String);
- if (statp->nsaddr_list[numAddresses].sin_addr.s_addr != 0) {
- numAddresses++;
- statp->nscount++;
- }
- }
- else
- DPRINTF(debug, "no space for server \"%s\"\n", pIPAddr->IpAddress.String);
- }
-
- use_registry:
- get_registry_dns(statp);
-
- if (!statp->dnsrch[0]) {
- statp->defdname[sizeof(statp->defdname) - 1] = 0;
- if (!(res = getdomainname(statp->defdname, sizeof(statp->defdname)))) {
- if (statp->defdname[0] && !statp->defdname[sizeof(statp->defdname) - 1])
- statp->dnsrch[0] = statp->defdname;
- }
- DPRINTF(debug, "getdomainname \"%s\"\n",
- (res)? strerror(errno) : statp->defdname);
- }
-}
-
-#else
-/***********************************************************************
- *
- Default interface code
-
-***********************************************************************/
-
-void get_dns_info(res_state statp)
-{
- return;
-}
-
-#endif
-
-
-
-#if 0
-#define DNS_ERROR_RCODE_FORMAT_ERROR 9001L
-#define DNS_ERROR_RCODE_SERVER_FAILURE 9002L
-#define DNS_ERROR_RCODE_NAME_ERROR 9003L
-#define DNS_ERROR_RCODE_NOT_IMPLEMENTED 9004L
-#define DNS_ERROR_RCODE_REFUSED 9005L
-#define DNS_ERROR_RCODE_YXDOMAIN 9006L
-#define DNS_ERROR_RCODE_YXRRSET 9007L
-#define DNS_ERROR_RCODE_NXRRSET 9008L
-#define DNS_ERROR_RCODE_NOTAUTH 9009L
-#define DNS_ERROR_RCODE_NOTZONE 9010L
-#define DNS_ERROR_RCODE_BADSIG 9016L
-#define DNS_ERROR_RCODE_BADKEY 9017L
-#define DNS_ERROR_RCODE_BADTIME 9018L
-#define DNS_INFO_NO_RECORDS 9501L
-#define DNS_ERROR_BAD_PACKET 9502L
-#define DNS_ERROR_NO_PACKET 9503L
-#define DNS_ERROR_RCODE 9504L
-#define DNS_ERROR_UNSECURE_PACKET 9505L
-#define DNS_ERROR_INVALID_TYPE 9551L
-#define DNS_ERROR_INVALID_IP_ADDRESS 9552L
-#define DNS_ERROR_INVALID_PROPERTY 9553L
-#define DNS_ERROR_TRY_AGAIN_LATER 9554L
-#define DNS_ERROR_NOT_UNIQUE 9555L
-#define DNS_ERROR_NON_RFC_NAME 9556L
-#define DNS_STATUS_FQDN 9557L
-#define DNS_STATUS_DOTTED_NAME 9558L
-#define DNS_STATUS_SINGLE_PART_NAME 9559L
-#define DNS_ERROR_INVALID_NAME_CHAR 9560L
-#define DNS_ERROR_NUMERIC_NAME 9561L
-#define DNS_ERROR_NOT_LALOWED_ON_ROOT_SERVER 9562L
-#define DNS_ERROR_NOT_ALLOWED_UNDER_DELEGATION 9563L
-#define DNS_ERROR_CANNOT_FIND_ROOT_HINTS 9564L
-#define DNS_ERROR_INCONSISTENT_ROOT_HINTS 9565L
-#define DNS_ERROR_ZONE_DOES_NOT_EXIST 9601L
-#define DNS_ERROR_NO_ZONE_INFO 9602L
-#define DNS_ERROR_INVALID_ZONE_OPERATION 9603L
-#define DNS_ERROR_ZONE_CONFIGURATION_ERROR 9604L
-#define DNS_ERROR_ZONE_HAS_NO_SOA_RECORD 9605L
-#define DNS_ERROR_ZONE_HAS_NO_NS_RECORDS 9606L
-#define DNS_ERROR_ZONE_LOCKED 9607L
-#define DNS_ERROR_ZONE_CREATION_FAILED 9608L
-#define DNS_ERROR_ZONE_ALREADY_EXISTS 9609L
-#define DNS_ERROR_AUTOZONE_ALREADY_EXISTS 9610L
-#define DNS_ERROR_INVALID_ZONE_TYPE 9611L
-#define DNS_ERROR_SECONDARY_REQUIRES_MASTER_IP 9612L
-#define DNS_ERROR_ZONE_NOT_SECONDARY 9613L
-#define DNS_ERROR_NEED_SECONDARY_ADDRESSES 9614L
-#define DNS_ERROR_WINS_INIT_FAILED 9615L
-#define DNS_ERROR_NEED_WINS_SERVERS 9616L
-#define DNS_ERROR_NBSTAT_INIT_FAILED 9617L
-#define DNS_ERROR_SOA_DELETE_INVALID 9618L
-#define DNS_ERROR_FORWARDER_ALREADY_EXISTS 9619L
-#define DNS_ERROR_ZONE_REQUIRES_MASTER_IP 9620L
-#define DNS_ERROR_ZONE_IS_SHUTDOWN 9621L
-#define DNS_ERROR_PRIMARY_REQUIRES_DATAFILE 9651L
-#define DNS_ERROR_INVALID_DATAFILE_NAME 9652L
-#define DNS_ERROR_DATAFILE_OPEN_FAILURE 9653L
-#define DNS_ERROR_FILE_WRITEBACK_FAILED 9654L
-#define DNS_ERROR_DATAFILE_PARSING 9655L
-#define DNS_ERROR_RECORD_DOES_NOT_EXIST 9701L
-#define DNS_ERROR_RECORD_FORMAT 9702L
-#define DNS_ERROR_NODE_CREATION_FAILED 9703L
-#define DNS_ERROR_UNKNOWN_RECORD_TYPE 9704L
-#define DNS_ERROR_RECORD_TIMED_OUT 9705L
-#define DNS_ERROR_NAME_NOT_IN_ZONE 9706L
-#define DNS_ERROR_CNAME_LOOP 9707L
-#define DNS_ERROR_NODE_IS_CNAME 9708L
-#define DNS_ERROR_CNAME_COLLISION 9709L
-#define DNS_ERROR_RECORD_ONLY_AT_ZONE_ROOT 9710L
-#define DNS_ERROR_RECORD_ALREADY_EXISTS 9711L
-#define DNS_ERROR_SECONDARY_DATA 9712L
-#define DNS_ERROR_NO_CREATE_CACHE_DATA 9713L
-#define DNS_ERROR_NAME_DOES_NOT_EXIST 9714L
-#define DNS_WARNING_PTR_CREATE_FAILED 9715L
-#define DNS_WARNING_DOMAIN_UNDELETED 9716L
-#define DNS_ERROR_DS_UNAVAILABLE 9717L
-#define DNS_ERROR_DS_ZONE_ALREADY_EXISTS 9718L
-#define DNS_ERROR_NO_BOOTFILE_IF_DS_ZONE 9719L
-#define DNS_INFO_AXFR_COMPLETE 9751L
-#define DNS_ERROR_AXFR 9752L
-#define DNS_INFO_ADDED_LOCAL_WINS 9753L
-#define DNS_STATUS_CONTINUE_NEEDED 9801L
-#define DNS_ERROR_NO_TCPIP 9851L
-#define DNS_ERROR_NO_DNS_SERVERS 9852L
-#define DNS_ERROR_DP_DOES_NOT_EXIST 9901L
-#define DNS_ERROR_DP_ALREADY_EXISTS 9902L
-#define DNS_ERROR_DP_NOT_ENLISTED 9903L
-#define DNS_ERROR_DP_ALREADY_ENLISTED 9904L
-#define DNS_ERROR_DP_NOT_AVAILABLE 9905L
-#endif
diff --git a/winsup/cygwin/libc/minires.c b/winsup/cygwin/libc/minires.c
deleted file mode 100644
index acd493e38..000000000
--- a/winsup/cygwin/libc/minires.c
+++ /dev/null
@@ -1,1018 +0,0 @@
-/* minires.c. Stub synchronous resolver for Cygwin.
-
- Copyright 2006, 2008, 2009, 2010, 2011 Red Hat, Inc.
-
- Written by Pierre A. Humblet <Pierre.Humblet@ieee.org>
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "minires.h"
-
-/***********************************************************************
-
-Utilities
-
-***********************************************************************/
-/***********************************************************************
-
-dprintf
-***********************************************************************/
-void minires_dprintf(const char * format, ...)
-{
- va_list args;
-
- va_start(args, format);
- fprintf(stderr, "Resolv: ");
- vfprintf(stderr, format, args);
- va_end(args);
-}
-
-/***********************************************************************
-
-scanline
-Put pointers in list[] to the beginning of each space or comma delimited
-word in "in", and put the lengths in sizes[] (counting the final 0).
-Return the number of words found
-***********************************************************************/
-static int scanline(char * in, char **list, int * sizes, int maxnum)
-{
- int i;
- char * startp;
- for (i = 0; i < maxnum; i++) {
- while((*in) && (isspace((unsigned char)*in) || *in == ',')) in++;
- if (*in == 0)
- break;
- startp = in++;
- while((*in) && !isspace((unsigned char)*in) && *in != ',') in++;
- list[i] = startp;
- sizes[i] = in - startp + 1;
- if (*in)
- *in++ = 0;
- }
- return i;
-}
-
-/***********************************************************************
-
-Read the search string.
-
-***********************************************************************/
-void minires_get_search(char * string, res_state statp)
-{
- char * words[MAXDNSRCH+1], * ptr;
- int sizes[MAXDNSRCH+1];
- int i, j, debug = statp->options & RES_DEBUG;
-
- i = scanline(string, words, sizes, MAXDNSRCH+1);
- ptr = statp->defdname;
- for (j = 0; j < i; j++) {
- if (j < MAXDNSRCH
- && ptr + sizes[j] < &statp->defdname[DIM(statp->defdname)]) {
- statp->dnsrch[j] = strcpy(ptr, words[j]);
- statp->dnsrch[j+1] = NULL;
- ptr += sizes[j];
- DPRINTF(debug, "search \"%s\"\n", words[j]);
- }
- else if (j < MAXDNSRCH + 1)
- DPRINTF(debug, "no space for \"%s\"\n", words[j]);
- }
-}
-
-/***********************************************************************
-
-Read options
-
-
-***********************************************************************/
-static void get_options(res_state statp, int i, char **words)
-{
- char *ptr;
- int value;
-
- while (i-- > 0) {
- if (!strcasecmp("debug", words[i])) {
- statp->options |= RES_DEBUG;
- DPRINTF(statp->options & RES_DEBUG, "%s: 1\n", words[i]);
- continue;
- }
- if (!strcasecmp("inet6", words[i])) {
- statp->options |= RES_USE_INET6;
- DPRINTF(statp->options & RES_DEBUG, "%s: 1\n", words[i]);
- continue;
- }
- if (!strcasecmp("osquery", words[i])) {
- statp->use_os = 1;
- DPRINTF(statp->options & RES_DEBUG, "%s: 1\n", words[i]);
- continue;
- }
-
- if ((ptr = strchr(words[i], ':'))) {
- *ptr++ = 0;
- value = atoi(ptr);
- /* Not supported
- if (!strcasecmp("ndots", words[i])) {
- statp->ndots = value;
- continue;
- }
- */
- if (!strcasecmp("retry", words[i])
- || !strcasecmp("attempts", words[i])) {
- if (value < 1)
- value = 1;
- else if (value > RES_MAXRETRY)
- value = RES_MAXRETRY;
- statp->retry = value;
- DPRINTF(statp->options & RES_DEBUG, "%s: %d\n", words[i], value);
- continue;
- }
- if (!strcasecmp("retrans", words[i])
- || !strcasecmp("timeout", words[i])) {
- if (value < 1)
- value = 1;
- else if (value > RES_MAXRETRANS)
- value = RES_MAXRETRANS;
- statp->retrans = value;
- DPRINTF(statp->options & RES_DEBUG, "%s: %d\n", words[i], value);
- continue;
- }
- }
- DPRINTF(statp->options & RES_DEBUG, "unknown option: \"%s\"\n", words[i]);
- }
-}
-
-/***********************************************************************
-
-Read the resolv.conf file.
-We only look for nameserver, domain, search and options
-
-***********************************************************************/
-#if MAXNS > MAXDNSRCH + 1
-#define MAXSIZE MAXNS
-#else
-#define MAXSIZE MAXDNSRCH + 1 /* Make unused one visible */
-#endif
-static void get_resolv(res_state statp)
-{
- FILE * fd;
- char *words[MAXSIZE + 1], line[4096], *ptr;
- int sizes[DIM(words)];
- int i, j, ns = 0, have_search, have_address, debug = statp->options & RES_DEBUG;
-
- fd = fopen(_PATH_RESCONF, "r");
- DPRINTF(debug, _PATH_RESCONF ": %s\n", fd?"OK":strerror(errno));
- if (fd == NULL)
- return;
-
- statp->use_os = 0; /* Do not use os_query, except if allowed by "options" */
- have_search = (statp->dnsrch[0] != NULL);
- have_address = (statp->nscount != 0);
-
- while ( fgets(line, sizeof(line), fd) != 0) {
- DPRINTF(debug, "resolv.conf %s", line);
- if ((i = scanline(line, words, sizes, DIM(words))) > 0) {
- if (!have_address
- && !strncasecmp("nameserver", words[0], sizes[0])) {
- for ( j = 1; j < i ; j++) {
- in_addr_t address;
- address = cygwin_inet_addr(words[j]);
- if (address == INADDR_NONE) {
- DPRINTF(debug, "invalid server \"%s\"\n", words[j]);
- }
- else if (ns >= MAXNS) {
- DPRINTF(debug, "no space for server \"%s\"\n", words[j]);
- }
- else {
- statp->nsaddr_list[ns++].sin_addr.s_addr = address;
- statp->nscount++;
- DPRINTF(debug, "server \"%s\"\n", words[j]);
- }
- }
- }
- else if (!have_search
- && (!strncasecmp("search", words[0], sizes[0])
- || !strncasecmp("domain", words[0], sizes[0]))) {
- ptr = statp->defdname;
- for (j = 0; j + 1 < i; j++) {
- if (j < MAXDNSRCH
- && ptr + sizes[j + 1] < &statp->defdname[DIM(statp->defdname)]) {
- statp->dnsrch[j] = strcpy(ptr, words[j+1]);
- statp->dnsrch[j+1] = 0;
- ptr += sizes[j+1];
- DPRINTF(debug, "domain|search \"%s\"\n", statp->dnsrch[j]);
- }
- else {
- DPRINTF(debug, "no space for \"%s\"\n", words[j+1]);
- }
- }
- }
- /* Options line */
- else if (!strncasecmp("options", words[0], sizes[0]))
- get_options(statp, i - 1, &words[1]);
- }
- }
- fclose(fd);
- return;
-}
-
-/****************************************************************************/
-/*
- open_sock()
- Create a datagram socket and call bind.
-
-****************************************************************************/
-
-static int open_sock(struct sockaddr_in *CliAddr, int debug)
-{
- int fd;
-
- DPRINTF(debug, "opening UDP socket\n");
-
- /* Create a datagram socket */
- if ((fd = cygwin_socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0) {
- DPRINTF(debug, "socket(UDP): %s\n", strerror(errno));
- return -1;
- }
- /* Set non-blocking */
- if (fcntl64(fd, F_SETFL, O_NONBLOCK) < 0) {
- DPRINTF(debug, "fcntl: %s\n", strerror(errno));
- return -1;
- }
- /* Set close on exec flag */
- if (fcntl64(fd, F_SETFD, 1) == -1) {
- DPRINTF(debug, "fcntl: %s\n", strerror(errno));
- return -1;
- }
-
- CliAddr->sin_family = AF_INET;
- CliAddr->sin_addr.s_addr = htonl(INADDR_ANY);
- CliAddr->sin_port = htons(0);
- bzero(CliAddr->sin_zero, sizeof(CliAddr->sin_zero));
- /* Get a port */
- if (cygwin_bind(fd, (struct sockaddr *) CliAddr, sizeof(*CliAddr)) < 0) {
- DPRINTF(debug, "bind: %s\n", strerror(errno));
- return -1;
- }
- return fd;
-}
-
-/*****************************************************************
- *
- __res_state()
- Undocumented but public. Accessed through _res
-
- *****************************************************************/
-static struct __res_state res;
-struct __res_state *__res_state(void)
-{
- return & res;
-}
-
-/*****************************************************************
- *
- res_init()
-
- *****************************************************************/
-int res_ninit(res_state statp)
-{
- int i;
-
- statp->res_h_errno = NETDB_SUCCESS;
- /* Only debug may be set before calling init */
- statp->options &= RES_DEBUG;
- statp->options |= RES_INIT | RES_DEFAULT;
- statp->nscount = 0;
- statp->os_query = NULL;
- statp->retrans = RES_TIMEOUT; /* timeout in seconds */
- statp->retry = RES_MAXRETRY; /* max number of retries */
- statp->use_os = 1; /* use os_query if available and allowed by get_resolv */
- statp->mypid = -1;
- statp->sockfd = -1;
- /* Use the pid and the ppid for random seed, from the point of view of an outsider.
- Mix the upper and lower bits as they are not used equally */
- i = getpid();
- statp->id = (ushort) (getppid() ^ (i << 8) ^ (i >> 8));
- for (i = 0; i < (int) DIM(statp->dnsrch); i++) statp->dnsrch[i] = 0;
-
- /* resolv.conf (dns servers & search list)*/
- get_resolv(statp);
- /* Get dns servers and search list from an os-specific routine, set os_query */
- get_dns_info(statp);
-
- if (statp->nscount == 0 && !statp->os_query) {
- errno = ENONET;
- statp->res_h_errno = NETDB_INTERNAL;
- DPRINTF(statp->options & RES_DEBUG, "no dns server found\n");
- return -1;
- }
- for (i = 0; i < statp->nscount; i++) {
- statp->nsaddr_list[i].sin_family = AF_INET;
- statp->nsaddr_list[i].sin_port = htons(NAMESERVER_PORT);
- bzero(statp->nsaddr_list[i].sin_zero, sizeof(statp->nsaddr_list[i].sin_zero));
- }
- return 0;
-}
-
-int res_init()
-{
- int r = res_ninit(& res);
- h_errno = res.res_h_errno;
- return r;
-}
-
-/*****************************************************************
- *
- res_close()
-
- *****************************************************************/
-void res_nclose(res_state statp)
-{
- int res;
- if (statp->sockfd != -1) {
- res = close(statp->sockfd);
- DPRINTF(statp->options & RES_DEBUG, "close sockfd %d: %s\n",
- statp->sockfd, (res == 0)?"OK":strerror(errno));
- statp->sockfd = -1;
- }
-}
-
-void res_close()
-{
- res_nclose(& res);
-}
-
-/*****************************************************************
- *
- get_tcp_buf()
-
- *****************************************************************/
-static int get_tcp_buf(int fd, unsigned char *buf, int size, int debug)
-{
- int res;
- while (size > 0) {
- if ((res = read(fd, buf, size)) < 0) {
- DPRINTF(debug, "read: %s\n", strerror(errno));
- return -1;
- }
- DPRINTF(debug, "read %d out of %d\n", res, size);
- size -= res;
- buf += res;
- }
- return 0;
-}
-
-/*****************************************************************
- *
- get_tcp()
-
- *****************************************************************/
-static int get_tcp(struct sockaddr_in *CliAddr,
- const unsigned char * MsgPtr, int MsgLength,
- unsigned char * AnsPtr, int AnsLength, int debug)
-{
- int fd, res = -1;
- unsigned short ans_length;
- union {short len; u_char buf[sizeof(short)];} len_buf;
-
- DPRINTF(debug, "retrying with TCP\n");
-
- /* Create a tcp socket */
- if ((fd = cygwin_socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) {
- DPRINTF(debug, "socket(TCP): %s\n", strerror(errno));
- return -1;
- }
-
- if (cygwin_connect(fd, (struct sockaddr *) CliAddr, sizeof(* CliAddr)) < 0) {
- DPRINTF(debug, "connect: %s\n", strerror(errno));
- goto done;
- }
-
- /* Send the length then the message */
- len_buf.len = htons(MsgLength);
- if (write(fd, len_buf.buf, sizeof(len_buf)) != sizeof(len_buf)
- || write(fd, MsgPtr, MsgLength) != MsgLength) {
- DPRINTF(debug, "write: %s\n", strerror(errno));
- goto done;
- }
-
- /* Read the answer length */
- if (get_tcp_buf(fd, len_buf.buf, sizeof(len_buf), debug))
- goto done;
- ans_length = ntohs(len_buf.len);
-
- /* Read the answer */
- if (get_tcp_buf(fd, AnsPtr, MIN(ans_length, AnsLength), debug))
- goto done;
- res = ans_length;
-
- done:
- close (fd);
- return res;
-}
-
-/*****************************************************************
- **
- res_send
- Assumes that the message is a query starting with a short id.
- Handles retransmissions until that id is received.
-
-*****************************************************************/
-int res_nsend( res_state statp, const unsigned char * MsgPtr,
- int MsgLength, unsigned char * AnsPtr, int AnsLength)
-{
- /* Current server, shared by all tasks */
- static volatile unsigned int SServ = 0XFFFFFFFF;
- int tcp;
- const int debug = statp->options & RES_DEBUG;
-
- fd_set fdset_read;
- int rslt, addrLen, transNum, wServ;
- struct sockaddr_in mySockAddr, dnsSockAddr;
- struct timeval timeOut;
-
- statp->res_h_errno = NETDB_SUCCESS;
- if (((statp->options & RES_INIT) == 0) && (res_ninit(statp) != 0))
- return -1;
-
- /* If a hook exists to a native implementation, use it */
- if (statp->os_query) {
- int len;
- short int Class, Type;
- char DomName[MAXDNAME];
- unsigned char * ptr = (unsigned char *) MsgPtr + HFIXEDSZ;
- len = dn_expand(MsgPtr, MsgPtr + MsgLength, ptr, DomName, sizeof(DomName));
- if (len > 0) {
- ptr += len;
- GETSHORT(Type, ptr);
- GETSHORT(Class, ptr);
- return ((os_query_t *) statp->os_query)(statp, DomName, Class, Type, AnsPtr, AnsLength);
- }
- else {
- /* dn_expand sets errno */
- statp->res_h_errno = NETDB_INTERNAL;
- return -1;
- }
- }
-
- /* Close the socket if it had been opened before a fork.
- Reuse of pid's cannot hurt */
- if ((statp->sockfd != -1) && ((pid_t) statp->mypid != getpid())) {
- res_nclose(statp);
- }
-
- /* Open a socket for this process */
- if (statp->sockfd == -1) {
- /* Create a non-blocking, close on exec socket and bind it (to any port) */
- statp->sockfd = open_sock(& mySockAddr, debug);
- if (statp->sockfd < 0 ) {
- statp->res_h_errno = NETDB_INTERNAL;
- return -1;
- }
- statp->mypid = getpid();
- if (SServ == 0XFFFFFFFF) /* Pseudo random */
- SServ = statp->id % statp->nscount;
- }
-
- transNum = 0;
- while ( transNum++ < statp->retry) {
- if ((wServ = SServ + 1) >= statp->nscount)
- wServ = 0;
- SServ = wServ;
-
- /* There exists attacks on DNS where many wrong answers with guessed id's and
- spoofed source address and port are generated at about the time when the
- program is tricked into resolving a name.
- This routine runs through the retry loop for each incorrect answer.
- It is thus extremely likely that such attacks will cause a TRY_AGAIN return,
- probably causing the calling program to retry after a delay.
-
- Note that valid late or duplicate answers to a previous questions also cause
- a retry, although this is minimized by flushing the socket before sending the
- new question.
- */
-
- /* Flush duplicate or late answers */
- while ((rslt = cygwin_recvfrom( statp->sockfd, AnsPtr, AnsLength, 0, NULL, NULL)) >= 0) {
- DPRINTF(debug, "Flushed %d bytes\n", rslt);
- }
- DPRINTF(debug && (errno != EWOULDBLOCK),
- "Unexpected errno for flushing recvfrom: %s", strerror(errno));
-
- /* Send the message */
- rslt = cygwin_sendto(statp->sockfd, MsgPtr, MsgLength, 0,
- (struct sockaddr *) &statp->nsaddr_list[wServ],
- sizeof(struct sockaddr_in));
- DPRINTF(debug, "sendto: server %08x sockfd %d %s\n",
- statp->nsaddr_list[wServ].sin_addr.s_addr,
- statp->sockfd, (rslt == MsgLength)?"OK":strerror(errno));
- if (rslt != MsgLength) {
- statp->res_h_errno = NETDB_INTERNAL;
- return -1;
- };
- /*
- Wait for a reply with select()
- */
- FD_ZERO(&fdset_read);
- FD_SET (statp->sockfd, &fdset_read );
- timeOut.tv_sec = statp->retrans;
- timeOut.tv_usec = 0;
- rslt = cygwin_select(statp->sockfd + 1, &fdset_read, NULL, NULL, &timeOut);
- if ( rslt == 0 ) { /* Timeout */
- DPRINTF(statp->options & RES_DEBUG, "timeout for server %08x\n",
- statp->nsaddr_list[wServ].sin_addr.s_addr);
- continue;
- }
- else if ((rslt != 1) || (FD_ISSET(statp->sockfd, &fdset_read) == 0)) {
- DPRINTF(debug, "select: %s\n", strerror(errno));
- statp->res_h_errno = NETDB_INTERNAL;
- return -1;
- }
-
- addrLen = sizeof(dnsSockAddr);
- rslt = cygwin_recvfrom(statp->sockfd, AnsPtr, AnsLength, 0,
- (struct sockaddr *) & dnsSockAddr, & addrLen);
- if (rslt <= 0) {
- DPRINTF(debug, "recvfrom: %s\n", strerror(errno));
- statp->res_h_errno = NETDB_INTERNAL;
- return -1;
- }
- DPRINTF(debug, "recvfrom: %d bytes from %08x\n", rslt, dnsSockAddr.sin_addr.s_addr);
- /*
- Prepare to retry with tcp
- */
- for (tcp = 0; tcp < 2; tcp++) {
- /* Check if this is the expected message from the expected server */
- if ((memcmp(& dnsSockAddr, & statp->nsaddr_list[wServ],
- (char *) & dnsSockAddr.sin_zero[0] - (char *) & dnsSockAddr) == 0)
- && (rslt >= HFIXEDSZ)
- && (*MsgPtr == *AnsPtr) /* Ids match */
- && (*(MsgPtr + 1) == *(AnsPtr + 1))
- && ((AnsPtr[2] & QR) != 0)
- && (AnsPtr[4] == 0)
- /* We check the question if present.
- Some servers don't return it on error, in particular
- when the name in the question is not valid. */
- && (((AnsPtr[5] == 0)
- && ((AnsPtr[3] & ERR_MASK) != NOERROR))
- || ((AnsPtr[5] == 1)
- && (rslt >= MsgLength)
- && (memcmp(MsgPtr + HFIXEDSZ, AnsPtr + HFIXEDSZ, MsgLength - HFIXEDSZ) == 0)))) {
- if ((AnsPtr[3] & ERR_MASK) == NOERROR) {
- if ((AnsPtr[2] & TC) && (tcp == 0) && !(statp->options & RES_IGNTC)) {
- /* Truncated. Try TCP */
- rslt = get_tcp(&statp->nsaddr_list[wServ], MsgPtr, MsgLength,
- AnsPtr, AnsLength, statp->options & RES_DEBUG);
- continue /* Tcp loop */;
- }
- else if ((AnsPtr[6] | AnsPtr[7])!= 0)
- return rslt;
- else
- statp->res_h_errno = NO_DATA;
- }
-#if 0
- NETDB_INTERNAL -1 /* see errno */
- NETDB_SUCCESS 0 /* no problem */
- HOST_NOT_FOUND 1 /* Authoritative Answer Host not found */
- TRY_AGAIN 2 /* Non-Authoritive Host not found, or SERVERFAIL */
- Also seen returned by some servers when the name is too long
- NO_RECOVERY 3 /* Non recoverable errors, FORMERR, REFUSED, NOTIMP */
- NO_DATA 4 /* Valid name, no data record of requested type */
-#endif
- else {
- switch (AnsPtr[3] & ERR_MASK) {
- /* return HOST_NOT_FOUND even for non-authoritative answers */
- case NXDOMAIN:
- case FORMERR:
- statp->res_h_errno = HOST_NOT_FOUND;
- break;
- case SERVFAIL:
- statp->res_h_errno = TRY_AGAIN;
- break;
- default:
- statp->res_h_errno = NO_RECOVERY;
- }
- }
- return -1;
- }
- else {
- DPRINTF(debug, "unexpected answer\n");
- break;
- }
- } /* TCP */
- }
- DPRINTF(debug, "too many retries\n");
- statp->res_h_errno = TRY_AGAIN;
- return -1;
-}
-
-int res_send( const unsigned char * MsgPtr, int MsgLength,
- unsigned char * AnsPtr, int AnsLength)
-{
- int r = res_nsend(& res, MsgPtr, MsgLength, AnsPtr, AnsLength);
- h_errno = res.res_h_errno;
- return r;
-}
-
-/*****************************************************************
- *
- res_mkquery
-
- Return: packet size
- -1 name format is incorrect
-*****************************************************************/
-int res_nmkquery (res_state statp,
- int op, const char * dnameptr, int qclass, int qtype,
- const unsigned char * dataptr __attribute__ ((unused)),
- int datalen __attribute__ ((unused)),
- const unsigned char * newrr __attribute__ ((unused)),
- unsigned char * buf, int buflen)
-{
- int i, len;
- const char * ptr;
- unsigned int id4;
-
- if (op == QUERY) {
- /* Write the name and verify buffer length */
- len = dn_comp(dnameptr, buf + HFIXEDSZ, buflen - HFIXEDSZ - QFIXEDSZ, NULL, NULL);
- if (len < 0) {
- DPRINTF(statp->options & RES_DEBUG,
- "\"%s\" invalid or buffer too short\n", dnameptr);
- statp->res_h_errno = NETDB_INTERNAL;
- return -1;
- }
-
- /* Fill the header */
- PUTSHORT(statp->id, buf);
- PUTSHORT(RD, buf);
- PUTSHORT(1, buf); /* Number of questions */
- for (i = 0; i < 3; i++)
- PUTSHORT(0, buf); /* Number of answers */
-
- /* Write qtype and qclass */
- buf += len;
- PUTSHORT(qtype, buf);
- PUTSHORT(qclass, buf);
-
- /* Update id. The current query adds entropy to the next query id */
- for (id4 = qtype, i = 0, ptr = dnameptr; *ptr; ptr++, i += 3)
- id4 ^= *ptr << (i & 0xF);
- i = 1 + statp->id % 15; /* Between 1 and 16 */
- /* id dependent rotation, also brings MSW to LSW */
- id4 = (id4 << i) ^ (id4 >> (16 - i)) ^ (id4 >> (32 - i));
- if ((short) id4)
- statp->id ^= (short) id4;
- else
- statp->id++; /* Force change */
-
- return len + (HFIXEDSZ + QFIXEDSZ); /* packet size */
- }
- else { /* Not implemented */
- errno = ENOSYS;
- statp->res_h_errno = NETDB_INTERNAL;
- return -1;
- }
-}
-
-int res_mkquery (int op, const char * dnameptr, int qclass, int qtype,
- const unsigned char * dataptr, int datalen,
- const unsigned char * newrr, unsigned char * buf, int buflen)
-{
- int r = res_nmkquery (& res, op, dnameptr, qclass, qtype,
- dataptr, datalen, newrr, buf, buflen);
- h_errno = res.res_h_errno;
- return r;
-
-}
-
-/*****************************************************************
- * res_query()
- *****************************************************************/
-
-int res_nquery( res_state statp, const char * DomName, int Class, int Type,
- unsigned char * AnsPtr, int AnsLength)
-{
- u_char packet[PACKETSZ];
- int len;
-
- DPRINTF(statp->options & RES_DEBUG, "query \"%s\" type %d\n", DomName, Type);
- statp->res_h_errno = NETDB_SUCCESS;
-
- /* If a hook exists to a native implementation, use it */
- if (statp->os_query)
- return ((os_query_t *) statp->os_query)(statp, DomName, Class, Type, AnsPtr, AnsLength);
-
- if ((len = res_nmkquery (statp, QUERY, DomName, Class, Type,
- 0, 0, 0, packet, PACKETSZ)) < 0)
- return -1;
- return res_nsend( statp, packet, len, AnsPtr, AnsLength);
-}
-
-int res_query( const char * DomName, int Class, int Type, unsigned char * AnsPtr, int AnsLength)
-{
- int r = res_nquery(& res, DomName, Class, Type, AnsPtr, AnsLength);
- h_errno = res.res_h_errno;
- return r;
-}
-
-/*****************************************************************
- * res_querydomain()
- *****************************************************************/
-int res_nquerydomain( res_state statp, const char * Name, const char * DomName,
- int Class, int Type, unsigned char * AnsPtr, int AnsLength)
-{
- char fqdn[MAXDNAME], *ptr;
- size_t nlen;
-
- DPRINTF(statp->options & RES_DEBUG, "querydomain \"%s\" \"%s\" type %d\n",
- Name, DomName, Type);
-
- if (!DomName)
- ptr = (char *) Name;
- else if ((nlen = strlen(Name)) >= sizeof(fqdn) - 1)
- goto error;
- else {
- strcpy(fqdn, Name);
- ptr = &fqdn[nlen];
- if (nlen && *(ptr - 1) != '.')
- *ptr++ = '.';
- fqdn[sizeof(fqdn) - 1] = 0;
- strncpy(ptr, DomName, sizeof(fqdn) - (ptr - fqdn));
- if (fqdn[sizeof(fqdn) - 1])
- goto error;
- ptr = fqdn;
- }
- return res_nquery(statp, ptr, Class, Type, AnsPtr, AnsLength);
-
- error:
- DPRINTF(statp->options & RES_DEBUG, "querydomain: name too long\n");
- errno = EINVAL;
- statp->res_h_errno = NETDB_INTERNAL;;
- return -1;
-}
-
-int res_querydomain( const char * Name, const char * DomName, int Class,
- int Type, unsigned char * AnsPtr, int AnsLength)
-{
- int r = res_nquerydomain(& res, Name, DomName, Class, Type, AnsPtr,
- AnsLength);
- h_errno = res.res_h_errno;
- return r;
-}
-
-/*****************************************************************
- *
- res_search()
-
- *****************************************************************/
-
-int res_nsearch( res_state statp, const char * DomName, int Class, int Type,
- unsigned char * AnsPtr, int AnsLength)
-{
- int len, stat, i;
- char fullDomName[MAXDNAME], *ptr, *sptr;
-
- DPRINTF(statp->options & RES_DEBUG, "search \"%s\" type %d\n", DomName, Type);
-
- if (((statp->options & RES_INIT) == 0) && (res_ninit(statp) != 0))
- return -1;
-
- stat = res_nquery( statp, DomName, Class, Type, AnsPtr, AnsLength);
-
- /* Check if will skip search */
- if (statp->res_h_errno != HOST_NOT_FOUND /* Success or hard failure */
- || ((ptr = strrchr(DomName, '.')) && (!*(ptr+1))) /* Final dot */
- || (((statp->options & RES_DNSRCH) == 0) /* Or no search */
- && ((ptr != NULL) /* And some dot */
- || ((statp->options & RES_DEFNAMES) == 0)))/* or no def domain */
- || (!(sptr = statp->dnsrch[0])))
- return stat;
-
- len = strlen(DomName);
- if (len >= MAXDNAME - 1) /* Space for next dot */
- goto error;
- strcpy(fullDomName, DomName);
- fullDomName[len++] = '.';
- fullDomName[MAXDNAME - 1] = 0; /* Overflow indicator */
- i = 0;
- do {
- strncpy(fullDomName + len, sptr, MAXDNAME - len);
- if (fullDomName[MAXDNAME - 1])
- goto error;
- stat = res_nquery(statp, fullDomName, Class, Type, AnsPtr, AnsLength);
- } while ((sptr = statp->dnsrch[++i]) != NULL
- && statp->res_h_errno == HOST_NOT_FOUND
- && (statp->options & RES_DNSRCH) != 0);
-
- /* Return last stat */
- return stat;
-
- error:
- DPRINTF(statp->options & RES_DEBUG, "name too long during search\n");
- errno = EINVAL;
- statp->res_h_errno = NETDB_INTERNAL;
- return -1;
-}
-
-int res_search( const char * DomName, int Class, int Type,
- unsigned char * AnsPtr, int AnsLength)
-{
- int r = res_nsearch(& res, DomName, Class, Type, AnsPtr, AnsLength);
- h_errno = res.res_h_errno;
- return r;
-}
-
-/*****************************************************************
- * dn_expand
- *****************************************************************/
-
-int dn_expand(const unsigned char *msg, const unsigned char *eomorig,
- const unsigned char *comp_dn, char *exp_dn, int length)
-{
- unsigned int len, complen = 0;
- const unsigned char *comp_dn_orig = comp_dn;
-
- if (comp_dn >= eomorig)
- goto expand_fail;
- if ((len = *comp_dn++) == 0) /* Weird case */
- exp_dn++;
- else do {
- if (len <= MAXLABEL) {
- if ((length -= (len + 1)) >= 0 /* Need space for final . */
- && comp_dn + len <= eomorig) {
- do { *exp_dn++ = *comp_dn++; } while (--len != 0);
- *exp_dn++ = '.';
- }
- else
- goto expand_fail;
- }
- else if (len >= (128+64)) {
- if (!complen) /* Still in the original field? */
- complen = (comp_dn - comp_dn_orig) + 1;
- comp_dn = msg + (((len & ~(128+64)) << 8) + *comp_dn);
- if (comp_dn >= eomorig)
- goto expand_fail;
- }
- else
- goto expand_fail;
- } while ((len = *comp_dn++) != 0);
- /* Replace last . with a 0 */
- *(--exp_dn) = 0;
- if (!complen)
- complen = comp_dn - comp_dn_orig;
-/* fprintf(stderr, "dn_expand %s\n", exp_start); */
- return complen;
-
-expand_fail:
- errno = EINVAL;
- return -1;
-}
-
-/*****************************************************************
- *
- dn_comp
-
- Return -1 in case of overflow, but still fill buffer correctly.
- We do not check the alphabet of the host names
- nor the length of the compressed name and we
- preserve the letter cases.
-
- *****************************************************************/
-int dn_comp(const char * exp_dn, u_char * comp_dn, int length,
- u_char ** dnptrs, u_char ** lastdnptr)
-{
- u_char *cptr = comp_dn, *dptr, *lptr, *rptr;
- unsigned int i, len;
- u_char * const eptr = comp_dn + length - 1; /* Last valid */
-
- errno = EINVAL;
-
- if (*exp_dn == '.' && !*(exp_dn + 1))
- exp_dn++;
- while (1) {
- if (*exp_dn == '.' || cptr > eptr)
- return -1;
- if (*exp_dn == 0) {
- *cptr++ = 0;
- break;
- }
- /* Try to compress */
- if (dnptrs) {
- for (i = 1; dnptrs[i]; i++) {
- dptr = dnptrs[i];
- if (dptr >= comp_dn) /* Handle name.name */
- continue;
- rptr = (u_char *) exp_dn;
- len = *dptr++;
- while (1) {
- do {
- if (*dptr++ != *rptr++)
- goto next_dn;
- } while (--len);
- len = *dptr++;
- if (len == 0) { /* last label */
- if (!*rptr || (*rptr == '.' && !*(rptr + 1))) { /* Full match */
- len = (dnptrs[i] - dnptrs[0]) | 0xC000;
- /* Write pointer */
- *cptr++ = len >> 8;
- if (cptr > eptr)
- return -1;
- *cptr++ = len;
- goto done;
- }
- goto next_dn;
- }
- if (*rptr++ != '.')
- goto next_dn;
- if (len >= 128 + 64) {
- dptr = dnptrs[0] + ((len - 128 - 64) << 8) + *dptr;
- len = *dptr++;
- }
- }
- next_dn: ;
- }
- /* Record label if asked and if space is available and if not too far off */
- if (lastdnptr && (lastdnptr != &dnptrs[i]) && (cptr - dnptrs[0]) < 0xC000) {
- dnptrs[i] = cptr;
- dnptrs[i+1] = NULL;
- }
- }
- /* Write label */
- lptr = cptr++; /* Length byte */
- rptr = (u_char *) exp_dn;
- do {
- if (cptr <= eptr)
- *cptr++ = *rptr;
- } while ((*++rptr != '.') && (*rptr != 0));
- len = rptr - (u_char *) exp_dn;
- if (len > MAXLABEL)
- return -1;
- *lptr = len;
- exp_dn = (char *) rptr;
- if (*exp_dn != 0)
- exp_dn++; /* Skip over . */
- }
- done:
- return cptr - comp_dn;
-}
-
-/*****************************************************************
- * dn_skipname
-
- Measures the compressed domain name length and returns it.
- *****************************************************************/
-int dn_skipname(const unsigned char *comp_dn, const unsigned char *eom)
-{
- int len;
- const unsigned char *comp_dn_orig = comp_dn;
-
- do {
- len = *comp_dn++;
- if (len >= (128 + 64)) {
- comp_dn++;
- break;
- }
- if (len > MAXLABEL ||
- (comp_dn += len) > eom)
- return -1;
- } while (len != 0);
-
- return comp_dn - comp_dn_orig;
-}
-
-/*****************************************************************
- * dn_length1 For internal use
-
- Return length of uncompressed name incl final 0.
- *****************************************************************/
-
-int dn_length1(const unsigned char *msg, const unsigned char *eomorig,
- const unsigned char *comp_dn)
-{
- unsigned int len, length = 0;
-
- errno = EINVAL;
- if (comp_dn >= eomorig)
- goto expand_fail;
- else while ((len = *comp_dn++) != 0) {
- if (len <= MAXLABEL) {
- if ((comp_dn += len) <= eomorig)
- length += len + 1;
- else
- goto expand_fail;
- }
- else if (len >= (128+64)) {
- comp_dn = msg + (((len & ~(128+64)) << 8) + *comp_dn);
- if (comp_dn >= eomorig)
- goto expand_fail;
- }
- else
- goto expand_fail;
- }
- return length;
-
-expand_fail:
- return -1;
-}
diff --git a/winsup/cygwin/libc/minires.h b/winsup/cygwin/libc/minires.h
deleted file mode 100644
index ecbbcc180..000000000
--- a/winsup/cygwin/libc/minires.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/* minires.h. Stub synchronous resolver for Cygwin.
-
- Copyright 2006, 2008, 2012 Red Hat, Inc.
-
- Written by Pierre A. Humblet <Pierre.Humblet@ieee.org>
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include <string.h>
-#include <malloc.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <sys/time.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <sys/unistd.h>
-#define __INSIDE_CYGWIN_NET__
-#include <netdb.h>
-#include <arpa/nameser.h>
-#include <resolv.h>
-
-extern in_addr_t cygwin_inet_addr (const char *);
-extern int cygwin_socket (int, int, int);
-extern int cygwin_bind (int, const struct sockaddr *, socklen_t);
-extern int cygwin_connect (int, const struct sockaddr *, socklen_t);
-extern int cygwin_select (int, fd_set *, fd_set *, fd_set *, struct timeval *);
-extern int cygwin_sendto (int, const void *, size_t, int,
- const struct sockaddr *, socklen_t);
-extern int cygwin_recvfrom (int, void *, size_t, int, struct sockaddr *,
- socklen_t *);
-
-/* Number of elements is an array */
-#define DIM(x) (sizeof(x) / sizeof(*(x)))
-
-/* Definitions to parse the messages */
-#define RD (1<<8) /* Offset in a short */
-#define RA (1<<7)
-#define QR (1<<7) /* Offsets in a char */
-#define TC (1<<1)
-#define ERR_MASK 0xF
-
-/* Type for os specific res_lookup */
-typedef int (os_query_t) (res_state, const char *, int, int, u_char *, int);
-
-/* Special use of state elements */
-#define sockfd _vcsock
-#define mypid _flags
-#define os_query qhook
-#define use_os pfcode
-
-#define DPRINTF(cond, format...) if (cond) minires_dprintf(format)
-
-/* Utility functions */
-void minires_dprintf(const char * format, ...);
-void minires_get_search(char * string, res_state statp);
-void get_dns_info(res_state statp);
diff --git a/winsup/cygwin/libc/nftw.c b/winsup/cygwin/libc/nftw.c
deleted file mode 100644
index 1def24160..000000000
--- a/winsup/cygwin/libc/nftw.c
+++ /dev/null
@@ -1,126 +0,0 @@
-/* $OpenBSD: nftw.c,v 1.4 2004/07/07 16:05:23 millert Exp $ */
-
-/*
- * Copyright (c) 2003, 2004 Todd C. Miller <Todd.Miller@courtesan.com>
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Sponsored in part by the Defense Advanced Research Projects
- * Agency (DARPA) and Air Force Research Laboratory, Air Force
- * Materiel Command, USAF, under agreement number F39502-99-1-0512.
- */
-
-#if 0
-#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$OpenBSD: nftw.c,v 1.4 2004/07/07 16:05:23 millert Exp $";
-#endif /* LIBC_SCCS and not lint */
-#endif
-
-#ifdef __CYGWIN__
-#include "winsup.h"
-#endif
-#include <sys/cdefs.h>
-#if 0
-__FBSDID("$FreeBSD: /repoman/r/ncvs/src/lib/libc/gen/nftw.c,v 1.1.2.1 2004/08/29 06:10:53 tjr Exp $");
-#endif
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <errno.h>
-#include <fts.h>
-#include <ftw.h>
-#include <limits.h>
-
-int
-nftw(const char *path, int (*fn)(const char *, const struct stat *, int,
- struct FTW *), int nfds __attribute__ ((unused)), int ftwflags)
-{
- char * const paths[2] = { (char *)path, NULL };
- struct FTW ftw;
- FTSENT *cur;
- FTS *ftsp;
- int error = 0, ftsflags, fnflag, postorder, sverrno;
-
-#if 0
- /* GLibc allows nfds < 1 and treats it as nfds == 1. Since nfds is
- not used in this OpenBSD version anyway, just ignore it for
- Linux compatibility. */
- /* XXX - nfds is currently unused */
- if (nfds < 1 || nfds > OPEN_MAX) {
- errno = EINVAL;
- return (-1);
- }
-#endif
-
- ftsflags = FTS_COMFOLLOW;
- if (!(ftwflags & FTW_CHDIR))
- ftsflags |= FTS_NOCHDIR;
- if (ftwflags & FTW_MOUNT)
- ftsflags |= FTS_XDEV;
- if (ftwflags & FTW_PHYS)
- ftsflags |= FTS_PHYSICAL;
- else
- ftsflags |= FTS_LOGICAL;
- postorder = (ftwflags & FTW_DEPTH) != 0;
- ftsp = fts_open(paths, ftsflags, NULL);
- if (ftsp == NULL)
- return (-1);
- while ((cur = fts_read(ftsp)) != NULL) {
- switch (cur->fts_info) {
- case FTS_D:
- if (postorder)
- continue;
- fnflag = FTW_D;
- break;
- case FTS_DNR:
- fnflag = FTW_DNR;
- break;
- case FTS_DP:
- if (!postorder)
- continue;
- fnflag = FTW_DP;
- break;
- case FTS_F:
- case FTS_DEFAULT:
- fnflag = FTW_F;
- break;
- case FTS_NS:
- case FTS_NSOK:
- fnflag = FTW_NS;
- break;
- case FTS_SL:
- fnflag = FTW_SL;
- break;
- case FTS_SLNONE:
- fnflag = FTW_SLN;
- break;
- case FTS_DC:
- errno = ELOOP;
- /* FALLTHROUGH */
- default:
- error = -1;
- goto done;
- }
- ftw.base = cur->fts_pathlen - cur->fts_namelen;
- ftw.level = cur->fts_level;
- error = fn(cur->fts_path, cur->fts_statp, fnflag, &ftw);
- if (error != 0)
- break;
- }
-done:
- sverrno = errno;
- if (fts_close(ftsp) != 0 && error == 0)
- error = -1;
- else
- errno = sverrno;
- return (error);
-}
diff --git a/winsup/cygwin/libc/rcmd.cc b/winsup/cygwin/libc/rcmd.cc
deleted file mode 100644
index 4ebdd062a..000000000
--- a/winsup/cygwin/libc/rcmd.cc
+++ /dev/null
@@ -1,773 +0,0 @@
-/*
- * Copyright (c) 1983, 1993, 1994
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)rcmd.c 8.3 (Berkeley) 3/26/94";
-#endif /* LIBC_SCCS and not lint */
-#include <sys/cdefs.h>
-#ifndef __CYGWIN__
-__FBSDID("$FreeBSD$");
-#else
-#define __INSIDE_CYGWIN_NET__
-#include "winsup.h"
-#undef __INSIDE_CYGWIN_NET__
-#endif
-
-#ifndef __CYGWIN__
-#include "namespace.h"
-#endif
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <sys/stat.h>
-
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
-#include <signal.h>
-#include <fcntl.h>
-#include <netdb.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <pwd.h>
-#include <errno.h>
-#include <stdio.h>
-#include <ctype.h>
-#include <string.h>
-#ifndef __CYGWIN__
-#include <rpc/rpc.h>
-#endif
-#ifdef YP
-#include <rpcsvc/yp_prot.h>
-#include <rpcsvc/ypclnt.h>
-#endif
-#ifndef __CYGWIN__
-#include <arpa/nameser.h>
-#include "un-namespace.h"
-#endif
-
-#ifndef __CYGWIN__
-extern int innetgr( const char *, const char *, const char *, const char * );
-
-#define max(a, b) ((a > b) ? a : b)
-#else
-#include "wininet.h"
-#include "cygwin/in6.h"
-
-#ifndef _PATH_HEQUIV
-# define _PATH_HEQUIV "/etc/hosts.equiv"
-#endif
-
-#define innetgr(a,b,c,d) (0)
-
-extern int rcmdsh(char **, int, const char *, const char *, const char *,
- const char *);
-
-extern "C" {
- int cygwin_accept (int, struct sockaddr *, socklen_t *);
- int cygwin_bindresvport_sa (int, struct sockaddr *);
- int cygwin_connect (int, const struct sockaddr *, socklen_t);
- void cygwin_freeaddrinfo (struct addrinfo *);
- const char * cygwin_gai_strerror (int);
- int cygwin_getaddrinfo (const char *, const char *, const struct addrinfo *,
- struct addrinfo **);
- int cygwin_getnameinfo (const struct sockaddr *, socklen_t, char *, size_t,
- char *, size_t, int);
- struct servent *cygwin_getservbyname (const char *, const char *);
- int cygwin_listen (int, int);
- int cygwin_rresvport_af(int *alport, int family);
- int cygwin_select (int, fd_set *, fd_set *, fd_set *, struct timeval *);
- int cygwin_socket (int, int, int);
- int seteuid32 (uid_t);
-}
-#endif
-
-#ifndef __CYGWIN__
-static int __ivaliduser(FILE *, u_int32_t, const char *, const char *);
-static int __ivaliduser_af(FILE *,const void *, const char *, const char *,
- int, int);
-#endif
-static int __ivaliduser_sa(FILE *, const struct sockaddr *, socklen_t,
- const char *, const char *);
-static int __icheckhost(const struct sockaddr *, socklen_t, const char *);
-
-char paddr[NI_MAXHOST];
-
-extern "C" int
-cygwin_rcmd_af(char **ahost, in_port_t rport, const char *locuser,
- const char *remuser, const char *cmd, int *fd2p, int af)
-{
- struct addrinfo hints, *res, *ai;
- struct sockaddr_storage from;
- fd_set reads;
- sigset_t oldmask, newmask;
- pid_t pid;
- int s, aport, lport, timo, error;
- char c;//, *p;
- int refused, nres;
- char num[8];
- static char canonnamebuf[INTERNET_MAX_HOST_NAME_LENGTH + 1]; /* is it proper here? */
-#ifndef __CYGWIN__
- /* call rcmdsh() with specified remote shell if appropriate. */
- if (!issetugid() && (p = getenv("RSH"))) {
- struct servent *sp = cygwin_getservbyname("shell", "tcp");
-
- if (sp && sp->s_port == rport)
- return (rcmdsh(ahost, rport, locuser, remuser,
- cmd, p));
- }
-
- /* use rsh(1) if non-root and remote port is shell. */
- if (geteuid()) {
- struct servent *sp = cygwin_getservbyname("shell", "tcp");
-
- if (sp && sp->s_port == rport)
- return (rcmdsh(ahost, rport, locuser, remuser,
- cmd, NULL));
- }
-#endif
- pid = getpid();
-
- memset(&hints, 0, sizeof(hints));
- hints.ai_flags = AI_CANONNAME;
- hints.ai_family = af;
- hints.ai_socktype = SOCK_STREAM;
- hints.ai_protocol = 0;
- (void)snprintf(num, sizeof(num), "%d", ntohs(rport));
- error = cygwin_getaddrinfo(*ahost, num, &hints, &res);
- if (error) {
- fprintf(stderr, "rcmd: getaddrinfo: %s\n",
- cygwin_gai_strerror(error));
- if (error == EAI_SYSTEM)
- fprintf(stderr, "rcmd: getaddrinfo: %s\n",
- strerror(errno));
- return (-1);
- }
-
- if (res->ai_canonname
- && strlen(res->ai_canonname) + 1 < sizeof(canonnamebuf)) {
- strncpy(canonnamebuf, res->ai_canonname, sizeof(canonnamebuf));
- *ahost = canonnamebuf;
- }
- nres = 0;
- for (ai = res; ai; ai = ai->ai_next)
- nres++;
- ai = res;
- refused = 0;
- sigemptyset(&newmask);
- sigaddset(&newmask, SIGURG);
- sigprocmask(SIG_BLOCK, (const sigset_t *)&newmask, &oldmask);
- for (timo = 1, lport = IPPORT_RESERVED - 1;;) {
- s = cygwin_rresvport_af(&lport, ai->ai_family);
- if (s < 0) {
- if (errno != EAGAIN && ai->ai_next) {
- ai = ai->ai_next;
- continue;
- }
- if (errno == EAGAIN)
- (void)fprintf(stderr,
- "rcmd: socket: All ports in use\n");
- else
- (void)fprintf(stderr, "rcmd: socket: %s\n",
- strerror(errno));
- cygwin_freeaddrinfo(res);
- sigprocmask(SIG_SETMASK, (const sigset_t *)&oldmask,
- NULL);
- return (-1);
- }
- fcntl64(s, F_SETOWN, pid);
- if (cygwin_connect(s, ai->ai_addr, ai->ai_addrlen) >= 0)
- break;
- (void)close(s);
- if (errno == EADDRINUSE) {
- lport--;
- continue;
- }
- if (errno == ECONNREFUSED)
- refused = 1;
- if (ai->ai_next == NULL && (!refused || timo > 16)) {
- (void)fprintf(stderr, "%s: %s\n",
- *ahost, strerror(errno));
- cygwin_freeaddrinfo(res);
- sigprocmask(SIG_SETMASK, (const sigset_t *)&oldmask,
- NULL);
- return (-1);
- }
- if (nres > 1) {
- int oerrno = errno;
-
- cygwin_getnameinfo(ai->ai_addr, ai->ai_addrlen, paddr,
- sizeof(paddr), NULL, 0, NI_NUMERICHOST);
- (void)fprintf(stderr, "connect to address %s: ",
- paddr);
- errno = oerrno;
- perror(0);
- }
- if ((ai = ai->ai_next) == NULL) {
- /* refused && timo <= 16 */
- struct timespec time_to_sleep, time_remaining;
-
- time_to_sleep.tv_sec = timo;
- time_to_sleep.tv_nsec = 0;
- (void)nanosleep(&time_to_sleep, &time_remaining);
- timo *= 2;
- ai = res;
- refused = 0;
- }
- if (nres > 1) {
- cygwin_getnameinfo(ai->ai_addr, ai->ai_addrlen, paddr,
- sizeof(paddr), NULL, 0, NI_NUMERICHOST);
- fprintf(stderr, "Trying %s...\n", paddr);
- }
- }
- lport--;
- if (fd2p == 0) {
- write(s, "", 1);
- lport = 0;
- } else {
- int s2 = cygwin_rresvport_af(&lport, ai->ai_family), s3;
- socklen_t len = ai->ai_addrlen;
- int nfds;
-
- if (s2 < 0)
- goto bad;
- cygwin_listen(s2, 1);
- (void)snprintf(num, sizeof(num), "%d", lport);
- if (write(s, num, strlen(num)+1) != (int)strlen(num)+1) {
- (void)fprintf(stderr,
- "rcmd: write (setting up stderr): %s\n",
- strerror(errno));
- (void)close(s2);
- goto bad;
- }
- nfds = max(s, s2)+1;
- if(nfds > FD_SETSIZE) {
- fprintf(stderr, "rcmd: too many files\n");
- (void)close(s2);
- goto bad;
- }
-again:
- FD_ZERO(&reads);
- FD_SET(s, &reads);
- FD_SET(s2, &reads);
- errno = 0;
- if (cygwin_select(nfds, &reads, 0, 0, 0) < 1 || !FD_ISSET(s2, &reads)){
- if (errno != 0)
- (void)fprintf(stderr,
- "rcmd: select (setting up stderr): %s\n",
- strerror(errno));
- else
- (void)fprintf(stderr,
- "select: protocol failure in circuit setup\n");
- (void)close(s2);
- goto bad;
- }
- s3 = cygwin_accept(s2, (struct sockaddr *)&from, &len);
- switch (from.ss_family) {
- case AF_INET:
- aport = ntohs(((struct sockaddr_in *)&from)->sin_port);
- break;
- case AF_INET6:
- aport = ntohs(((struct sockaddr_in6 *)&from)->sin6_port);
- break;
- default:
- aport = 0; /* error */
- break;
- }
- /*
- * XXX careful for ftp bounce attacks. If discovered, shut them
- * down and check for the real auxiliary channel to connect.
- */
- if (aport == 20) {
- close(s3);
- goto again;
- }
- (void)close(s2);
- if (s3 < 0) {
- (void)fprintf(stderr,
- "rcmd: accept: %s\n", strerror(errno));
- lport = 0;
- goto bad;
- }
- *fd2p = s3;
- if (aport >= IPPORT_RESERVED || aport < IPPORT_RESERVED / 2) {
- (void)fprintf(stderr,
- "socket: protocol failure in circuit setup.\n");
- goto bad2;
- }
- }
- (void)write(s, locuser, strlen(locuser)+1);
- (void)write(s, remuser, strlen(remuser)+1);
- (void)write(s, cmd, strlen(cmd)+1);
- if (read(s, &c, 1) != 1) {
- (void)fprintf(stderr,
- "rcmd: %s: %s\n", *ahost, strerror(errno));
- goto bad2;
- }
- if (c != 0) {
- while (read(s, &c, 1) == 1) {
- (void)write(STDERR_FILENO, &c, 1);
- if (c == '\n')
- break;
- }
- goto bad2;
- }
- sigprocmask(SIG_SETMASK, (const sigset_t *)&oldmask, NULL);
- cygwin_freeaddrinfo(res);
- return (s);
-bad2:
- if (lport)
- (void)close(*fd2p);
-bad:
- (void)close(s);
- sigprocmask(SIG_SETMASK, (const sigset_t *)&oldmask, NULL);
- cygwin_freeaddrinfo(res);
- return (-1);
-}
-
-extern "C" int
-cygwin_rcmd(char **ahost, in_port_t rport, const char *locuser,
- const char *remuser, const char *cmd, int *fd2p)
-{
- return cygwin_rcmd_af(ahost, rport, locuser, remuser, cmd, fd2p,
- AF_INET);
-}
-
-extern "C" int
-cygwin_rresvport_af(int *alport, int family)
-{
- int s;
- struct sockaddr_storage ss;
- u_short *sport;
-
- memset(&ss, 0, sizeof(ss));
- ss.ss_family = family;
- switch (family) {
- case AF_INET:
- sport = &((struct sockaddr_in *)&ss)->sin_port;
- ((struct sockaddr_in *)&ss)->sin_addr.s_addr = INADDR_ANY;
- break;
- case AF_INET6:
- sport = &((struct sockaddr_in6 *)&ss)->sin6_port;
- ((struct sockaddr_in6 *)&ss)->sin6_addr = in6addr_any;
- break;
- default:
- errno = EAFNOSUPPORT;
- return -1;
- }
-
- s = cygwin_socket(ss.ss_family, SOCK_STREAM, 0);
- if (s < 0)
- return (-1);
-#if 0 /* compat_exact_traditional_rresvport_semantics */
- sin.sin_port = htons((u_short)*alport);
- if (_bind(s, (struct sockaddr *)&sin, sizeof(sin)) >= 0)
- return (s);
- if (errno != EADDRINUSE) {
- (void)_close(s);
- return (-1);
- }
-#endif
- *sport = 0;
- if (cygwin_bindresvport_sa(s, (struct sockaddr *)&ss) == -1) {
- (void)close(s);
- return (-1);
- }
- *alport = (int)ntohs(*sport);
- return (s);
-}
-
-extern "C" int
-cygwin_rresvport(int *port)
-{
- return cygwin_rresvport_af(port, AF_INET);
-}
-
-int __check_rhosts_file = 1;
-char *__rcmd_errstr;
-
-/*
- * AF independent extension of iruserok.
- *
- * Returns 0 if ok, -1 if not ok.
- */
-extern "C" int
-iruserok_sa(const void *ra, int rlen, int superuser, const char *ruser,
- const char *luser)
-{
- const char *cp;
- struct stat sbuf;
- struct passwd *pwd;
- FILE *hostf;
- uid_t uid;
- int first;
- char pbuf[MAXPATHLEN];
- const struct sockaddr *raddr;
- struct sockaddr_storage ss;
-
- /* avoid alignment issue */
- if (rlen > (int) sizeof(ss))
- return(-1);
- memcpy(&ss, ra, rlen);
- raddr = (struct sockaddr *)&ss;
-
- first = 1;
- hostf = superuser ? NULL : fopen(_PATH_HEQUIV, "rt");
-again:
- if (hostf) {
- if (__ivaliduser_sa(hostf, raddr, rlen, luser, ruser) == 0) {
- (void)fclose(hostf);
- return (0);
- }
- (void)fclose(hostf);
- }
- if (first == 1 && (__check_rhosts_file || superuser)) {
- first = 0;
- if ((pwd = getpwnam(luser)) == NULL)
- return (-1);
- (void)strcpy(pbuf, pwd->pw_dir);
- (void)strcat(pbuf, "/.rhosts");
-
- /*
- * Change effective uid while opening .rhosts. If root and
- * reading an NFS mounted file system, can't read files that
- * are protected read/write owner only.
- */
- uid = geteuid32();
- (void)seteuid32(pwd->pw_uid);
- hostf = fopen(pbuf, "rt");
- (void)seteuid32(uid);
-
- if (hostf == NULL)
- return (-1);
- /*
- * If not a regular file, or is owned by someone other than
- * user or root or if writeable by anyone but the owner, quit.
- */
- cp = NULL;
- if (lstat64(pbuf, &sbuf) < 0)
- cp = ".rhosts lstat failed";
- else if (!S_ISREG(sbuf.st_mode))
- cp = ".rhosts not regular file";
- else if (fstat64(fileno(hostf), &sbuf) < 0)
- cp = ".rhosts fstat failed";
- else if (sbuf.st_uid && sbuf.st_uid != pwd->pw_uid)
- cp = "bad .rhosts owner";
- else if (sbuf.st_mode & (S_IWGRP|S_IWOTH))
- cp = ".rhosts writeable by other than owner";
- /* If there were any problems, quit. */
- if (cp) {
- __rcmd_errstr = (char *) cp;
- (void)fclose(hostf);
- return (-1);
- }
- goto again;
- }
- return (-1);
-}
-
-/*
- * New .rhosts strategy: We are passed an ip address. We spin through
- * hosts.equiv and .rhosts looking for a match. When the .rhosts only
- * has ip addresses, we don't have to trust a nameserver. When it
- * contains hostnames, we spin through the list of addresses the nameserver
- * gives us and look for a match.
- *
- * Returns 0 if ok, -1 if not ok.
- */
-extern "C" int
-iruserok(unsigned long raddr, int superuser, const char *ruser,
- const char *luser)
-{
- struct sockaddr_in sin;
-
- memset(&sin, 0, sizeof(sin));
- sin.sin_family = AF_INET;
- memcpy(&sin.sin_addr, &raddr, sizeof(sin.sin_addr));
- return iruserok_sa((struct sockaddr *)&sin, sizeof(struct sockaddr_in),
- superuser, ruser, luser);
-}
-
-extern "C" int
-ruserok(const char *rhost, int superuser, const char *ruser, const char *luser)
-{
- struct addrinfo hints, *res, *r;
- int error;
-
- memset(&hints, 0, sizeof(hints));
- hints.ai_family = PF_UNSPEC;
- hints.ai_socktype = SOCK_DGRAM; /*dummy*/
- error = cygwin_getaddrinfo(rhost, "0", &hints, &res);
- if (error)
- return (-1);
-
- for (r = res; r; r = r->ai_next) {
- if (iruserok_sa(r->ai_addr, r->ai_addrlen, superuser, ruser,
- luser) == 0) {
- cygwin_freeaddrinfo(res);
- return (0);
- }
- }
- cygwin_freeaddrinfo(res);
- return (-1);
-}
-
-#ifndef __CYGWIN__
-/*
- * XXX
- * Don't make static, used by lpd(8).
- *
- * Returns 0 if ok, -1 if not ok.
- */
-static int
-__ivaliduser(FILE *hostf, u_int32_t raddr, const char *luser, const char *ruser)
-{
- struct sockaddr_in sin;
-
- memset(&sin, 0, sizeof(sin));
- sin.sin_family = AF_INET;
- memcpy(&sin.sin_addr, &raddr, sizeof(sin.sin_addr));
- return __ivaliduser_sa(hostf, (struct sockaddr *)&sin,
- sizeof(struct sockaddr_in), luser, ruser);
-}
-
-/*
- * Returns 0 if ok, -1 if not ok.
- *
- * XXX obsolete API.
- */
-static int
-__ivaliduser_af(FILE *hostf, const void *raddr, const char *luser,
- const char *ruser, int af, int len)
-{
- struct sockaddr *sa = NULL;
- struct sockaddr_in *sin = NULL;
-#ifdef INET6
- struct sockaddr_in6 *sin6 = NULL;
-#endif
- struct sockaddr_storage ss;
- int salen = 0;
-
- memset(&ss, 0, sizeof(ss));
- switch (af) {
- case AF_INET:
- if (len != sizeof(sin->sin_addr))
- return -1;
- sin = (struct sockaddr_in *)&ss;
- sin->sin_family = AF_INET;
- salen = sizeof(struct sockaddr_in);
- memcpy(&sin->sin_addr, raddr, sizeof(sin->sin_addr));
- break;
- case AF_INET6:
- if (len != sizeof(sin6->sin6_addr))
- return -1;
- /* you will lose scope info */
- sin6 = (struct sockaddr_in6 *)&ss;
- sin6->sin6_family = AF_INET6;
- salen = sizeof(struct sockaddr_in6);
- memcpy(&sin6->sin6_addr, raddr, sizeof(sin6->sin6_addr));
- break;
- default:
- return -1;
- }
-
- sa = (struct sockaddr *)&ss;
- return __ivaliduser_sa(hostf, sa, salen, luser, ruser);
-}
-#endif
-
-static int
-__ivaliduser_sa(FILE *hostf, const struct sockaddr *raddr, socklen_t salen,
- const char *luser, const char *ruser)
-{
- char *user, *p;
- int ch;
- char buf[MAXHOSTNAMELEN + 128]; /* host + login */
- char hname[MAXHOSTNAMELEN];
- /* Presumed guilty until proven innocent. */
- int userok = 0, hostok = 0;
-#ifdef YP
- char *ypdomain;
-
- if (yp_get_default_domain(&ypdomain))
- ypdomain = NULL;
-#else
-#define ypdomain NULL
-#endif
- /* We need to get the damn hostname back for netgroup matching. */
- if (cygwin_getnameinfo(raddr, salen, hname, sizeof(hname), NULL, 0,
- NI_NAMEREQD) != 0)
- hname[0] = '\0';
-
- while (fgets(buf, sizeof(buf), hostf)) {
- p = buf;
- /* Skip lines that are too long. */
- if (strchr(p, '\n') == NULL) {
- while ((ch = getc(hostf)) != '\n' && ch != EOF);
- continue;
- }
- if (*p == '\n' || *p == '#') {
- /* comment... */
- continue;
- }
- while (*p != '\n' && *p != ' ' && *p != '\t' && *p != '\0') {
- *p = isupper((unsigned char)*p) ? tolower((unsigned char)*p) : *p;
- p++;
- }
- if (*p == ' ' || *p == '\t') {
- *p++ = '\0';
- while (*p == ' ' || *p == '\t')
- p++;
- user = p;
- while (*p != '\n' && *p != ' ' &&
- *p != '\t' && *p != '\0')
- p++;
- } else
- user = p;
- *p = '\0';
- /*
- * Do +/- and +@/-@ checking. This looks really nasty,
- * but it matches SunOS's behavior so far as I can tell.
- */
- switch(buf[0]) {
- case '+':
- if (!buf[1]) { /* '+' matches all hosts */
- hostok = 1;
- break;
- }
- if (buf[1] == '@') /* match a host by netgroup */
- hostok = hname[0] != '\0' &&
- innetgr(&buf[2], hname, NULL, ypdomain);
- else /* match a host by addr */
- hostok = __icheckhost(raddr, salen,
- (char *)&buf[1]);
- break;
- case '-': /* reject '-' hosts and all their users */
- if (buf[1] == '@') {
- if (hname[0] == '\0' ||
- innetgr(&buf[2], hname, NULL, ypdomain))
- return(-1);
- } else {
- if (__icheckhost(raddr, salen,
- (char *)&buf[1]))
- return(-1);
- }
- break;
- default: /* if no '+' or '-', do a simple match */
- hostok = __icheckhost(raddr, salen, buf);
- break;
- }
- switch(*user) {
- case '+':
- if (!*(user+1)) { /* '+' matches all users */
- userok = 1;
- break;
- }
- if (*(user+1) == '@') /* match a user by netgroup */
- userok = innetgr(user+2, NULL, ruser, ypdomain);
- else /* match a user by direct specification */
- userok = !(strcmp(ruser, user+1));
- break;
- case '-': /* if we matched a hostname, */
- if (hostok) { /* check for user field rejections */
- if (!*(user+1))
- return(-1);
- if (*(user+1) == '@') {
- if (innetgr(user+2, NULL,
- ruser, ypdomain))
- return(-1);
- } else {
- if (!strcmp(ruser, user+1))
- return(-1);
- }
- }
- break;
- default: /* no rejections: try to match the user */
- if (hostok)
- userok = !(strcmp(ruser,*user ? user : luser));
- break;
- }
- if (hostok && userok)
- return(0);
- }
- return (-1);
-}
-
-/*
- * Returns "true" if match, 0 if no match.
- */
-static int
-__icheckhost(const struct sockaddr *raddr, socklen_t salen, const char *lhost)
-{
- struct sockaddr_in sin;
- struct sockaddr_in6 *sin6;
- struct addrinfo hints, *res, *r;
- int error;
- char h1[NI_MAXHOST], h2[NI_MAXHOST];
-
- if (raddr->sa_family == AF_INET6) {
- sin6 = (struct sockaddr_in6 *)raddr;
- if (IN6_IS_ADDR_V4MAPPED(&sin6->sin6_addr)) {
- memset(&sin, 0, sizeof(sin));
- sin.sin_family = AF_INET;
- memcpy(&sin.sin_addr, &sin6->sin6_addr.s6_addr[12],
- sizeof(sin.sin_addr));
- raddr = (struct sockaddr *)&sin;
- salen = sizeof(struct sockaddr_in);
- }
- }
-
- h1[0] = '\0';
- if (cygwin_getnameinfo(raddr, salen, h1, sizeof(h1), NULL, 0,
- NI_NUMERICHOST) != 0)
- return (0);
-
- /* Resolve laddr into sockaddr */
- memset(&hints, 0, sizeof(hints));
- hints.ai_family = raddr->sa_family;
- hints.ai_socktype = SOCK_DGRAM; /*XXX dummy*/
- res = NULL;
- error = cygwin_getaddrinfo(lhost, "0", &hints, &res);
- if (error)
- return (0);
-
- for (r = res; r ; r = r->ai_next) {
- h2[0] = '\0';
- if (cygwin_getnameinfo(r->ai_addr, r->ai_addrlen, h2, sizeof(h2),
- NULL, 0, NI_NUMERICHOST) != 0)
- continue;
- if (strcmp(h1, h2) == 0) {
- cygwin_freeaddrinfo(res);
- return (1);
- }
- }
-
- /* No match. */
- cygwin_freeaddrinfo(res);
- return (0);
-}
diff --git a/winsup/cygwin/libc/rexec.cc b/winsup/cygwin/libc/rexec.cc
deleted file mode 100644
index f9be2231a..000000000
--- a/winsup/cygwin/libc/rexec.cc
+++ /dev/null
@@ -1,412 +0,0 @@
-/*
- * Copyright (c) 1980, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD$
- */
-
-/* CV 2006-07-04: Tweaked for inclusion into Cygwin. */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)rexec.c 8.1 (Berkeley) 6/4/93";
-#endif /* LIBC_SCCS and not lint */
-
-#ifdef __CYGWIN__
-#include "winsup.h"
-#include "sigproc.h"
-#include "cygtls.h"
-#include <wininet.h>
-#endif
-
-#include <sys/types.h>
-#include <sys/uio.h>
-#include <sys/socket.h>
-#include <sys/param.h>
-#include <sys/stat.h>
-
-#include <netinet/in.h>
-
-#include <stdio.h>
-#include <unistd.h>
-#include <string.h>
-#include <netdb.h>
-#include <errno.h>
-#include <ctype.h>
-#include <err.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-extern "C" {
- int cygwin_accept (int, struct sockaddr *, socklen_t *);
- int cygwin_connect (int, const struct sockaddr *, socklen_t);
- int cygwin_getsockname (int, struct sockaddr *, socklen_t *);
- void cygwin_herror (const char *);
- int cygwin_listen (int, int);
- int cygwin_socket (int, int, int);
-}
-
-/*
- * Options and other state info.
- */
-struct macel {
- char mac_name[9]; /* macro name */
- char *mac_start; /* start of macro in macbuf */
- char *mac_end; /* end of macro in macbuf */
-};
-
-int macnum; /* number of defined macros */
-struct macel macros[16];
-char macbuf[4096];
-
-static FILE *cfile;
-
-#define DEFAULT 1
-#define LOGIN 2
-#define PASSWD 3
-#define ACCOUNT 4
-#define MACDEF 5
-#define ID 10
-#define MACH 11
-
-static char tokval[100];
-
-static struct toktab {
- const char *tokstr;
- int tval;
-} toktab[]= {
- { "default", DEFAULT },
- { "login", LOGIN },
- { "password", PASSWD },
- { "passwd", PASSWD },
- { "account", ACCOUNT },
- { "machine", MACH },
- { "macdef", MACDEF },
- { NULL, 0 }
-};
-
-static int
-token()
-{
- char *cp;
- int c;
- struct toktab *t;
-
- if (feof(cfile) || ferror(cfile))
- return (0);
- while ((c = getc(cfile)) != EOF &&
- (c == '\n' || c == '\t' || c == ' ' || c == ','))
- continue;
- if (c == EOF)
- return (0);
- cp = tokval;
- if (c == '"') {
- while ((c = getc(cfile)) != EOF && c != '"') {
- if (c == '\\')
- c = getc(cfile);
- *cp++ = c;
- }
- } else {
- *cp++ = c;
- while ((c = getc(cfile)) != EOF
- && c != '\n' && c != '\t' && c != ' ' && c != ',') {
- if (c == '\\')
- c = getc(cfile);
- *cp++ = c;
- }
- }
- *cp = 0;
- if (tokval[0] == 0)
- return (0);
- for (t = toktab; t->tokstr; t++)
- if (!strcmp(t->tokstr, tokval))
- return (t->tval);
- return (ID);
-}
-
-static int
-ruserpass(const char *host, char **aname, char **apass, char **aacct)
-{
- const char *hdir;
- char buf[BUFSIZ], *tmp;
- char myname[INTERNET_MAX_HOST_NAME_LENGTH + 1];
- const char *mydomain;
- int t, i, c, usedefault = 0;
- struct stat stb;
-
- hdir = getenv("HOME");
- if (hdir == NULL)
- hdir = ".";
- if (strlen(hdir) + 8 > sizeof(buf))
- return (0);
- (void) sprintf(buf, "%s/.netrc", hdir);
- cfile = fopen(buf, "r");
- if (cfile == NULL) {
- if (errno != ENOENT)
- warn("%s", buf);
- return (0);
- }
- if (cygwin_gethostname(myname, sizeof(myname)) < 0)
- myname[0] = '\0';
- if ((mydomain = strchr(myname, '.')) == NULL)
- mydomain = "";
-next:
- while ((t = token())) switch(t) {
-
- case DEFAULT:
- usedefault = 1;
- /* FALL THROUGH */
-
- case MACH:
- if (!usedefault) {
- if (token() != ID)
- continue;
- /*
- * Allow match either for user's input host name
- * or official hostname. Also allow match of
- * incompletely-specified host in local domain.
- */
- if (strcasecmp(host, tokval) == 0)
- goto match;
- if ((tmp = strchr(host, '.')) != NULL &&
- strcasecmp(tmp, mydomain) == 0 &&
- strncasecmp(host, tokval, tmp - host) == 0 &&
- tokval[tmp - host] == '\0')
- goto match;
- continue;
- }
- match:
- while ((t = token()) && t != MACH && t != DEFAULT) switch(t) {
-
- case LOGIN:
- if (token()) {
- if (*aname == 0) {
- *aname = (char *) malloc((unsigned) strlen(tokval) + 1);
- (void) strcpy(*aname, tokval);
- } else {
- if (strcmp(*aname, tokval))
- goto next;
- }
- }
- break;
- case PASSWD:
- if ((*aname == 0 || strcmp(*aname, "anonymous")) &&
- fstat64(fileno(cfile), &stb) >= 0 &&
- (stb.st_mode & 077) != 0) {
- warnx("Error: .netrc file is readable by others.");
- warnx("Remove password or make file unreadable by others.");
- goto bad;
- }
- if (token() && *apass == 0) {
- *apass = (char *) malloc((unsigned) strlen(tokval) + 1);
- (void) strcpy(*apass, tokval);
- }
- break;
- case ACCOUNT:
- if (fstat64(fileno(cfile), &stb) >= 0
- && (stb.st_mode & 077) != 0) {
- warnx("Error: .netrc file is readable by others.");
- warnx("Remove account or make file unreadable by others.");
- goto bad;
- }
- if (token() && aacct && *aacct == 0) {
- *aacct = (char *) malloc((unsigned) strlen(tokval) + 1);
- (void) strcpy(*aacct, tokval);
- }
- break;
- case MACDEF:
- while ((c=getc(cfile)) != EOF &&
- (c == ' ' || c == '\t'))
- ;
- if (c == EOF || c == '\n') {
- printf("Missing macdef name argument.\n");
- goto bad;
- }
- if (macnum == 16) {
- printf("Limit of 16 macros have already been defined\n");
- goto bad;
- }
- tmp = macros[macnum].mac_name;
- *tmp++ = c;
- for (i=0; i < 8 && (c=getc(cfile)) != EOF &&
- !isspace(c); ++i) {
- *tmp++ = c;
- }
- if (c == EOF) {
- printf("Macro definition missing null line terminator.\n");
- goto bad;
- }
- *tmp = '\0';
- if (c != '\n') {
- while ((c=getc(cfile)) != EOF && c != '\n');
- }
- if (c == EOF) {
- printf("Macro definition missing null line terminator.\n");
- goto bad;
- }
- if (macnum == 0) {
- macros[macnum].mac_start = macbuf;
- }
- else {
- macros[macnum].mac_start = macros[macnum-1].mac_end + 1;
- }
- tmp = macros[macnum].mac_start;
- while (tmp != macbuf + 4096) {
- if ((c=getc(cfile)) == EOF) {
- printf("Macro definition missing null line terminator.\n");
- goto bad;
- }
- *tmp = c;
- if (*tmp == '\n') {
- if (*(tmp-1) == '\0') {
- macros[macnum++].mac_end = tmp - 1;
- break;
- }
- *tmp = '\0';
- }
- tmp++;
- }
- if (tmp == macbuf + 4096) {
- printf("4K macro buffer exceeded\n");
- goto bad;
- }
- break;
- default:
- warnx("Unknown .netrc keyword %s", tokval);
- break;
- }
- goto done;
- }
-done:
- (void) fclose(cfile);
- return (0);
-bad:
- (void) fclose(cfile);
- return (-1);
-}
-
-extern "C" int
-cygwin_rexec (char **ahost, unsigned short rport, char *name, char *pass,
- char *cmd, int *fd2p)
-{
- struct sockaddr_in sin, sin2, from;
- struct hostent *hp;
- u_short port = 0;
- int s, timo = 1, s3;
- char c;
- static char ahostbuf[INTERNET_MAX_HOST_NAME_LENGTH + 1];
-
- __try
- {
- hp = cygwin_gethostbyname(*ahost);
- if (hp == 0) {
- cygwin_herror(*ahost);
- return (-1);
- }
- *ahost = strcpy (ahostbuf, hp->h_name);
- ruserpass(hp->h_name, &name, &pass, NULL);
- if (!name)
- name = getlogin ();
- if (!pass)
- pass = almost_null;
-retry:
- s = cygwin_socket(AF_INET, SOCK_STREAM, 0);
- if (s < 0) {
- perror("rexec: socket");
- return (-1);
- }
- sin.sin_family = hp->h_addrtype;
- sin.sin_port = rport;
- bcopy(hp->h_addr, (caddr_t)&sin.sin_addr, hp->h_length);
- if (cygwin_connect(s, (struct sockaddr *)&sin, sizeof(sin)) < 0) {
- if (errno == ECONNREFUSED && timo <= 16) {
- (void) close(s);
- sleep(timo);
- timo *= 2;
- goto retry;
- }
- perror(hp->h_name);
- return (-1);
- }
- if (fd2p == 0) {
- (void) write(s, "", 1);
- } else {
- char num[8];
- int s2, sin2len;
-
- s2 = cygwin_socket(AF_INET, SOCK_STREAM, 0);
- if (s2 < 0) {
- (void) close(s);
- return (-1);
- }
- cygwin_listen(s2, 1);
- sin2len = sizeof (sin2);
- if (cygwin_getsockname(s2, (struct sockaddr *)&sin2, &sin2len) < 0 ||
- sin2len != sizeof (sin2)) {
- perror("getsockname");
- (void) close(s2);
- goto bad;
- }
- port = ntohs((u_short)sin2.sin_port);
- (void) sprintf(num, "%u", port);
- (void) write(s, num, strlen(num)+1);
- { int len = sizeof (from);
- s3 = cygwin_accept(s2, (struct sockaddr *)&from, &len);
- close(s2);
- if (s3 < 0) {
- perror("accept");
- port = 0;
- goto bad;
- }
- }
- *fd2p = s3;
- }
- (void) write(s, name, strlen(name) + 1);
- /* should public key encypt the password here */
- (void) write(s, pass, strlen(pass) + 1);
- (void) write(s, cmd, strlen(cmd) + 1);
- if (read(s, &c, 1) != 1) {
- perror(*ahost);
- goto bad;
- }
- if (c != 0) {
- while (read(s, &c, 1) == 1) {
- (void) write(2, &c, 1);
- if (c == '\n')
- break;
- }
- goto bad;
- }
- return (s);
-bad:
- if (port)
- (void) close(*fd2p);
- (void) close(s);
- }
- __except (EFAULT) {}
- __endtry
- return (-1);
-}
diff --git a/winsup/cygwin/libc/strfmon.c b/winsup/cygwin/libc/strfmon.c
deleted file mode 100644
index d06bbabf6..000000000
--- a/winsup/cygwin/libc/strfmon.c
+++ /dev/null
@@ -1,622 +0,0 @@
-/*-
- * Copyright (c) 2001 Alexey Zelkin <phantom@FreeBSD.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- */
-
-#include <sys/cdefs.h>
-#if 0
-__FBSDID("$FreeBSD: src/lib/libc/stdlib/strfmon.c,v 1.19 2008/04/24 07:49:00 ru Exp $");
-#endif
-
-#include "winsup.h"
-#include <sys/types.h>
-#include <ctype.h>
-#include <errno.h>
-#include <limits.h>
-#include <locale.h>
-#include <monetary.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-/* internal flags */
-#define NEED_GROUPING 0x01 /* print digits grouped (default) */
-#define SIGN_POSN_USED 0x02 /* '+' or '(' usage flag */
-#define LOCALE_POSN 0x04 /* use locale defined +/- (default) */
-#define PARENTH_POSN 0x08 /* enclose negative amount in () */
-#define SUPRESS_CURR_SYMBOL 0x10 /* supress the currency from output */
-#define LEFT_JUSTIFY 0x20 /* left justify */
-#define USE_INTL_CURRENCY 0x40 /* use international currency symbol */
-#define IS_NEGATIVE 0x80 /* is argument value negative ? */
-
-/* internal macros */
-#define PRINT(CH) do { \
- if (dst >= s + maxsize) \
- goto e2big_error; \
- *dst++ = CH; \
-} while (0)
-
-#define PRINTS(STR) do { \
- char *tmps = STR; \
- while (*tmps != '\0') \
- PRINT(*tmps++); \
-} while (0)
-
-#define GET_NUMBER(VAR) do { \
- VAR = 0; \
- while (isdigit((unsigned char)*fmt)) { \
- if (VAR > INT_MAX / 10) \
- goto e2big_error; \
- VAR *= 10; \
- VAR += *fmt - '0'; \
- if (VAR < 0) \
- goto e2big_error; \
- fmt++; \
- } \
-} while (0)
-
-#define GRPCPY(howmany) do { \
- int i = howmany; \
- while (i-- > 0) { \
- avalue_size--; \
- *--bufend = *(avalue+avalue_size+padded); \
- } \
-} while (0)
-
-#define GRPSEP do { \
- *--bufend = thousands_sep; \
- groups++; \
-} while (0)
-
-static void __setup_vars(int, char *, char *, char *, char **);
-static int __calc_left_pad(int, char *);
-static char *__format_grouped_double(double, int *, int, int, int);
-
-ssize_t
-strfmon(char * __restrict s, size_t maxsize, const char * __restrict format,
- ...)
-{
- va_list ap;
- char *dst; /* output destination pointer */
- const char *fmt; /* current format poistion pointer */
- struct lconv *lc; /* pointer to lconv structure */
- char *asciivalue; /* formatted double pointer */
-
- int flags; /* formatting options */
- int pad_char; /* padding character */
- int pad_size; /* pad size */
- int width; /* field width */
- int left_prec; /* left precision */
- int right_prec; /* right precision */
- double value; /* just value */
- char space_char = ' '; /* space after currency */
-
- char cs_precedes, /* values gathered from struct lconv */
- sep_by_space,
- sign_posn,
- *signstr,
- *currency_symbol;
-
- char *tmpptr; /* temporary vars */
- int sverrno;
-
- va_start(ap, format);
-
- lc = localeconv();
- dst = s;
- fmt = format;
- asciivalue = NULL;
- currency_symbol = NULL;
- pad_size = 0;
-
- while (*fmt) {
- /* pass nonformating characters AS IS */
- if (*fmt != '%')
- goto literal;
-
- /* '%' found ! */
-
- /* "%%" mean just '%' */
- if (*(fmt+1) == '%') {
- fmt++;
- literal:
- PRINT(*fmt++);
- continue;
- }
-
- /* set up initial values */
- flags = (NEED_GROUPING|LOCALE_POSN);
- pad_char = ' '; /* padding character is "space" */
- left_prec = -1; /* no left precision specified */
- right_prec = -1; /* no right precision specified */
- width = -1; /* no width specified */
- value = 0; /* we have no value to print now */
-
- /* Flags */
- while (1) {
- switch (*++fmt) {
- case '=': /* fill character */
- pad_char = *++fmt;
- if (pad_char == '\0')
- goto format_error;
- continue;
- case '^': /* not group currency */
- flags &= ~(NEED_GROUPING);
- continue;
- case '+': /* use locale defined signs */
- if (flags & SIGN_POSN_USED)
- goto format_error;
- flags |= (SIGN_POSN_USED|LOCALE_POSN);
- continue;
- case '(': /* enclose negatives with () */
- if (flags & SIGN_POSN_USED)
- goto format_error;
- flags |= (SIGN_POSN_USED|PARENTH_POSN);
- continue;
- case '!': /* suppress currency symbol */
- flags |= SUPRESS_CURR_SYMBOL;
- continue;
- case '-': /* alignment (left) */
- flags |= LEFT_JUSTIFY;
- continue;
- default:
- break;
- }
- break;
- }
-
- /* field Width */
- if (isdigit((unsigned char)*fmt)) {
- GET_NUMBER(width);
- /* Do we have enough space to put number with
- * required width ?
- */
- if ((unsigned int)width >= maxsize - (dst - s))
- goto e2big_error;
- }
-
- /* Left precision */
- if (*fmt == '#') {
- if (!isdigit((unsigned char)*++fmt))
- goto format_error;
- GET_NUMBER(left_prec);
- if ((unsigned int)left_prec >= maxsize - (dst - s))
- goto e2big_error;
- }
-
- /* Right precision */
- if (*fmt == '.') {
- if (!isdigit((unsigned char)*++fmt))
- goto format_error;
- GET_NUMBER(right_prec);
- if ((unsigned int)right_prec >= maxsize - (dst - s) -
- left_prec)
- goto e2big_error;
- }
-
- /* Conversion Characters */
- switch (*fmt++) {
- case 'i': /* use internaltion currency format */
- flags |= USE_INTL_CURRENCY;
- break;
- case 'n': /* use national currency format */
- flags &= ~(USE_INTL_CURRENCY);
- break;
- default: /* required character is missing or
- premature EOS */
- goto format_error;
- }
-
- if (currency_symbol != NULL)
- free(currency_symbol);
- if (flags & USE_INTL_CURRENCY) {
- currency_symbol = strdup(lc->int_curr_symbol);
- if (currency_symbol != NULL) {
- space_char = *(currency_symbol+3);
- *(currency_symbol+3) = '\0';
- }
- } else
- currency_symbol = strdup(lc->currency_symbol);
-
- if (currency_symbol == NULL)
- goto end_error; /* ENOMEM. */
-
- /* value itself */
- value = va_arg(ap, double);
-
- /* detect sign */
- if (value < 0) {
- flags |= IS_NEGATIVE;
- value = -value;
- }
-
- /* fill left_prec with amount of padding chars */
- if (left_prec >= 0) {
- pad_size = __calc_left_pad((flags ^ IS_NEGATIVE),
- currency_symbol) -
- __calc_left_pad(flags, currency_symbol);
- if (pad_size < 0)
- pad_size = 0;
- }
-
- if (asciivalue != NULL)
- free(asciivalue);
- asciivalue = __format_grouped_double(value, &flags,
- left_prec, right_prec, pad_char);
- if (asciivalue == NULL)
- goto end_error; /* errno already set */
- /* to ENOMEM by malloc() */
-
- /* set some variables for later use */
- __setup_vars(flags, &cs_precedes, &sep_by_space,
- &sign_posn, &signstr);
-
- /*
- * Description of some LC_MONETARY's values:
- *
- * p_cs_precedes & n_cs_precedes
- *
- * = 1 - $currency_symbol precedes the value
- * for a monetary quantity with a non-negative value
- * = 0 - symbol succeeds the value
- *
- * p_sep_by_space & n_sep_by_space
- *
- * = 0 - no space separates $currency_symbol
- * from the value for a monetary quantity with a
- * non-negative value
- * = 1 - space separates the symbol from the value
- * = 2 - space separates the symbol and the sign string,
- * if adjacent.
- *
- * p_sign_posn & n_sign_posn
- *
- * = 0 - parentheses enclose the quantity and the
- * $currency_symbol
- * = 1 - the sign string precedes the quantity and the
- * $currency_symbol
- * = 2 - the sign string succeeds the quantity and the
- * $currency_symbol
- * = 3 - the sign string precedes the $currency_symbol
- * = 4 - the sign string succeeds the $currency_symbol
- *
- */
-
- tmpptr = dst;
-
- while (pad_size-- > 0)
- PRINT(' ');
-
- if (sign_posn == 0 && (flags & IS_NEGATIVE))
- PRINT('(');
-
- if (cs_precedes == 1) {
- if (sign_posn == 1 || sign_posn == 3) {
- PRINTS(signstr);
- if (sep_by_space == 2) /* XXX: ? */
- PRINT(' ');
- }
-
- if (!(flags & SUPRESS_CURR_SYMBOL)) {
- PRINTS(currency_symbol);
-
- if (sign_posn == 4) {
- if (sep_by_space == 2)
- PRINT(space_char);
- PRINTS(signstr);
- if (sep_by_space == 1)
- PRINT(' ');
- } else if (sep_by_space == 1)
- PRINT(space_char);
- }
- } else if (sign_posn == 1)
- PRINTS(signstr);
-
- PRINTS(asciivalue);
-
- if (cs_precedes == 0) {
- if (sign_posn == 3) {
- if (sep_by_space == 1)
- PRINT(' ');
- PRINTS(signstr);
- }
-
- if (!(flags & SUPRESS_CURR_SYMBOL)) {
- if ((sign_posn == 3 && sep_by_space == 2)
- || (sep_by_space == 1
- && (sign_posn == 0
- || sign_posn == 1
- || sign_posn == 2
- || sign_posn == 4)))
- PRINT(space_char);
- PRINTS(currency_symbol); /* XXX: len */
- if (sign_posn == 4) {
- if (sep_by_space == 2)
- PRINT(' ');
- PRINTS(signstr);
- }
- }
- }
-
- if (sign_posn == 2) {
- if (sep_by_space == 2)
- PRINT(' ');
- PRINTS(signstr);
- }
-
- if (sign_posn == 0 && (flags & IS_NEGATIVE))
- PRINT(')');
-
- if (dst - tmpptr < width) {
- if (flags & LEFT_JUSTIFY) {
- while (dst - tmpptr < width)
- PRINT(' ');
- } else {
- pad_size = dst-tmpptr;
- memmove(tmpptr + width-pad_size, tmpptr,
- pad_size);
- memset(tmpptr, ' ', width-pad_size);
- dst += width-pad_size;
- }
- }
- }
-
- PRINT('\0');
- va_end(ap);
- free(asciivalue);
- free(currency_symbol);
- return (dst - s - 1); /* return size of put data except trailing '\0' */
-
-e2big_error:
- errno = E2BIG;
- goto end_error;
-
-format_error:
- errno = EINVAL;
-
-end_error:
- sverrno = errno;
- if (asciivalue != NULL)
- free(asciivalue);
- if (currency_symbol != NULL)
- free(currency_symbol);
- errno = sverrno;
- va_end(ap);
- return (-1);
-}
-
-static void
-__setup_vars(int flags, char *cs_precedes, char *sep_by_space,
- char *sign_posn, char **signstr) {
-
- struct lconv *lc = localeconv();
- static char negative[] = "-";
-
- if ((flags & IS_NEGATIVE) && (flags & USE_INTL_CURRENCY)) {
- *cs_precedes = lc->int_n_cs_precedes;
- *sep_by_space = lc->int_n_sep_by_space;
- *sign_posn = (flags & PARENTH_POSN) ? 0 : lc->int_n_sign_posn;
- *signstr = (*lc->negative_sign == '\0') ? negative
- : lc->negative_sign;
- } else if (flags & USE_INTL_CURRENCY) {
- *cs_precedes = lc->int_p_cs_precedes;
- *sep_by_space = lc->int_p_sep_by_space;
- *sign_posn = (flags & PARENTH_POSN) ? 0 : lc->int_p_sign_posn;
- *signstr = lc->positive_sign;
- } else if (flags & IS_NEGATIVE) {
- *cs_precedes = lc->n_cs_precedes;
- *sep_by_space = lc->n_sep_by_space;
- *sign_posn = (flags & PARENTH_POSN) ? 0 : lc->n_sign_posn;
- *signstr = (*lc->negative_sign == '\0') ? negative
- : lc->negative_sign;
- } else {
- *cs_precedes = lc->p_cs_precedes;
- *sep_by_space = lc->p_sep_by_space;
- *sign_posn = (flags & PARENTH_POSN) ? 0 : lc->p_sign_posn;
- *signstr = lc->positive_sign;
- }
-
- /* Set defult values for unspecified information. */
- if (*cs_precedes != 0)
- *cs_precedes = 1;
- if (*sep_by_space == CHAR_MAX)
- *sep_by_space = 0;
- if (*sign_posn == CHAR_MAX)
- *sign_posn = 0;
-}
-
-static int
-__calc_left_pad(int flags, char *cur_symb) {
-
- char cs_precedes, sep_by_space, sign_posn, *signstr;
- int left_chars = 0;
-
- __setup_vars(flags, &cs_precedes, &sep_by_space, &sign_posn, &signstr);
-
- if (cs_precedes != 0) {
- left_chars += strlen(cur_symb);
- if (sep_by_space != 0)
- left_chars++;
- }
-
- switch (sign_posn) {
- case 1:
- left_chars += strlen(signstr);
- break;
- case 3:
- case 4:
- if (cs_precedes != 0)
- left_chars += strlen(signstr);
- }
- return (left_chars);
-}
-
-static int
-get_groups(int size, char *grouping) {
-
- int chars = 0;
-
- if (*grouping == CHAR_MAX || *grouping <= 0) /* no grouping ? */
- return (0);
-
- while (size > (int)*grouping) {
- chars++;
- size -= (int)*grouping++;
- /* no more grouping ? */
- if (*grouping == CHAR_MAX)
- break;
- /* rest grouping with same value ? */
- if (*grouping == 0) {
- chars += (size - 1) / *(grouping - 1);
- break;
- }
- }
- return (chars);
-}
-
-/* convert double to ASCII */
-static char *
-__format_grouped_double(double value, int *flags,
- int left_prec, int right_prec, int pad_char) {
-
- char *rslt;
- char *avalue;
- int avalue_size;
- char fmt[32];
-
- size_t bufsize;
- char *bufend;
-
- int padded;
-
- struct lconv *lc = localeconv();
- char *grouping;
- char decimal_point;
- char thousands_sep;
-
- int groups = 0;
-
- grouping = lc->mon_grouping;
- decimal_point = *lc->mon_decimal_point;
- if (decimal_point == '\0')
- decimal_point = *lc->decimal_point;
- thousands_sep = *lc->mon_thousands_sep;
- if (thousands_sep == '\0')
- thousands_sep = *lc->thousands_sep;
-
- /* fill left_prec with default value */
- if (left_prec == -1)
- left_prec = 0;
-
- /* fill right_prec with default value */
- if (right_prec == -1) {
- if (*flags & USE_INTL_CURRENCY)
- right_prec = lc->int_frac_digits;
- else
- right_prec = lc->frac_digits;
-
- if (right_prec == CHAR_MAX) /* POSIX locale ? */
- right_prec = 2;
- }
-
- if (*flags & NEED_GROUPING)
- left_prec += get_groups(left_prec, grouping);
-
- /* convert to string */
- snprintf(fmt, sizeof(fmt), "%%%d.%df", left_prec + right_prec + 1,
- right_prec);
- avalue_size = asprintf(&avalue, fmt, value);
- if (avalue_size < 0)
- return (NULL);
-
- /* make sure that we've enough space for result string */
- bufsize = strlen(avalue)*2+1;
- rslt = calloc(1, bufsize);
- if (rslt == NULL) {
- free(avalue);
- return (NULL);
- }
- bufend = rslt + bufsize - 1; /* reserve space for trailing '\0' */
-
- /* skip spaces at beggining */
- padded = 0;
- while (avalue[padded] == ' ') {
- padded++;
- avalue_size--;
- }
-
- if (right_prec > 0) {
- bufend -= right_prec;
- memcpy(bufend, avalue + avalue_size+padded-right_prec,
- right_prec);
- *--bufend = decimal_point;
- avalue_size -= (right_prec + 1);
- }
-
- if ((*flags & NEED_GROUPING) &&
- thousands_sep != '\0' && /* XXX: need investigation */
- *grouping != CHAR_MAX &&
- *grouping > 0) {
- while (avalue_size > (int)*grouping) {
- GRPCPY(*grouping);
- GRPSEP;
- grouping++;
-
- /* no more grouping ? */
- if (*grouping == CHAR_MAX)
- break;
-
- /* rest grouping with same value ? */
- if (*grouping == 0) {
- grouping--;
- while (avalue_size > *grouping) {
- GRPCPY(*grouping);
- GRPSEP;
- }
- }
- }
- if (avalue_size != 0)
- GRPCPY(avalue_size);
- padded -= groups;
-
- } else {
- bufend -= avalue_size;
- memcpy(bufend, avalue+padded, avalue_size);
- if (right_prec == 0)
- padded--; /* decrease assumed $decimal_point */
- }
-
- /* do padding with pad_char */
- if (padded > 0) {
- bufend -= padded;
- memset(bufend, pad_char, padded);
- }
-
- bufsize = bufsize - (bufend - rslt) + 1;
- memmove(rslt, bufend, bufsize);
- free(avalue);
- return (rslt);
-}
diff --git a/winsup/cygwin/libc/strptime.cc b/winsup/cygwin/libc/strptime.cc
deleted file mode 100644
index 1f14818a2..000000000
--- a/winsup/cygwin/libc/strptime.cc
+++ /dev/null
@@ -1,843 +0,0 @@
-/* $NetBSD: strptime.c,v 1.28 2008/04/28 20:23:01 martin Exp $ */
-
-/*-
- * Copyright (c) 1997, 1998, 2005, 2008 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code was contributed to The NetBSD Foundation by Klaus Klein.
- * Heavily optimised by David Laight
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: strptime.c,v 1.28 2008/04/28 20:23:01 martin Exp $");
-#endif
-
-#ifdef __CYGWIN__
-#include "winsup.h"
-#else
-#include "namespace.h"
-#include <sys/localedef.h>
-#endif
-#include <ctype.h>
-#include <stdlib.h>
-#include <locale.h>
-#include <string.h>
-#include <time.h>
-#include <tzfile.h>
-#include "../locale/timelocal.h"
-
-#ifdef __TM_GMTOFF
-# define TM_GMTOFF __TM_GMTOFF
-#endif
-#ifdef __TM_ZONE
-# define TM_ZONE __TM_ZONE
-#endif
-
-#ifdef __weak_alias
-__weak_alias(strptime,_strptime)
-#endif
-
-#define _ctloc(x) (_CurrentTimeLocale->x)
-
-#define ALT_E 0x01
-#define ALT_O 0x02
-#define LEGAL_ALT(x) { if (alt_format & ~(x)) return NULL; }
-
-static _CONST int _DAYS_BEFORE_MONTH[12] =
-{0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
-
-#define SET_MDAY 1
-#define SET_MON 2
-#define SET_YEAR 4
-#define SET_WDAY 8
-#define SET_YDAY 16
-#define SET_YMD (SET_YEAR | SET_MON | SET_MDAY)
-
-static const char gmt[4] = { "GMT" };
-
-typedef struct _era_info_t {
- size_t num; /* Only in first entry: Number of entries,
- 1 otherwise. */
- int dir; /* Direction */
- long offset; /* Number of year closest to start_date in the era. */
- struct tm start; /* Start date of era */
- struct tm end; /* End date of era */
- CHAR *era_C; /* Era string */
- CHAR *era_Y; /* Replacement for %EY */
-} era_info_t;
-
-static void
-free_era_info (era_info_t *era_info)
-{
- size_t num = era_info->num;
-
- for (size_t i = 0; i < num; ++i)
- {
- free (era_info[i].era_C);
- free (era_info[i].era_Y);
- }
- free (era_info);
-}
-
-static era_info_t *
-get_era_info (const char *era)
-{
- char *c;
- era_info_t *ei = NULL;
- size_t num = 0, cur = 0, len;
-
- while (*era)
- {
- ++num;
- era_info_t *tmp = (era_info_t *) realloc (ei, num * sizeof (era_info_t));
- if (!tmp)
- {
- ei->num = cur;
- free_era_info (ei);
- return NULL;
- }
- ei = tmp;
- ei[cur].num = 1;
- ei[cur].dir = (*era == '+') ? 1 : -1;
- era += 2;
- ei[cur].offset = strtol (era, &c, 10);
- era = c + 1;
- ei[cur].start.tm_year = strtol (era, &c, 10);
- /* Adjust offset for negative gregorian dates. */
- if (ei[cur].start.tm_year < 0)
- ++ei[cur].start.tm_year;
- ei[cur].start.tm_mon = strtol (c + 1, &c, 10);
- ei[cur].start.tm_mday = strtol (c + 1, &c, 10);
- ei[cur].start.tm_hour = ei[cur].start.tm_min = ei[cur].start.tm_sec = 0;
- era = c + 1;
- if (era[0] == '-' && era[1] == '*')
- {
- ei[cur].end = ei[cur].start;
- ei[cur].start.tm_year = INT_MIN;
- ei[cur].start.tm_mon = ei[cur].start.tm_mday = ei[cur].start.tm_hour
- = ei[cur].start.tm_min = ei[cur].start.tm_sec = 0;
- era += 3;
- }
- else if (era[0] == '+' && era[1] == '*')
- {
- ei[cur].end.tm_year = INT_MAX;
- ei[cur].end.tm_mon = 12;
- ei[cur].end.tm_mday = 31;
- ei[cur].end.tm_hour = 23;
- ei[cur].end.tm_min = ei[cur].end.tm_sec = 59;
- era += 3;
- }
- else
- {
- ei[cur].end.tm_year = strtol (era, &c, 10);
- /* Adjust offset for negative gregorian dates. */
- if (ei[cur].end.tm_year < 0)
- ++ei[cur].end.tm_year;
- ei[cur].end.tm_mon = strtol (c + 1, &c, 10);
- ei[cur].end.tm_mday = strtol (c + 1, &c, 10);
- ei[cur].end.tm_mday = 31;
- ei[cur].end.tm_hour = 23;
- ei[cur].end.tm_min = ei[cur].end.tm_sec = 59;
- era = c + 1;
- }
- /* era_C */
- c = strchr (era, ':');
- len = c - era;
- ei[cur].era_C = (CHAR *) malloc ((len + 1) * sizeof (CHAR));
- if (!ei[cur].era_C)
- {
- ei->num = cur;
- free_era_info (ei);
- return NULL;
- }
- strncpy (ei[cur].era_C, era, len);
- era += len;
- ei[cur].era_C[len] = '\0';
- /* era_Y */
- ++era;
- c = strchr (era, ';');
- if (!c)
- c = strchr (era, '\0');
- len = c - era;
- ei[cur].era_Y = (CHAR *) malloc ((len + 1) * sizeof (CHAR));
- if (!ei[cur].era_Y)
- {
- free (ei[cur].era_C);
- ei->num = cur;
- free_era_info (ei);
- return NULL;
- }
- strncpy (ei[cur].era_Y, era, len);
- era += len;
- ei[cur].era_Y[len] = '\0';
- ++cur;
- if (*c)
- era = c + 1;
- }
- ei->num = num;
- return ei;
-}
-
-typedef struct _alt_digits_t {
- size_t num;
- char **digit;
- char *buffer;
-} alt_digits_t;
-
-static alt_digits_t *
-get_alt_digits (const char *alt_digits)
-{
- alt_digits_t *adi;
- const char *a, *e;
- char *aa, *ae;
- size_t len;
-
- adi = (alt_digits_t *) calloc (1, sizeof (alt_digits_t));
- if (!adi)
- return NULL;
-
- /* Compute number of alt_digits. */
- adi->num = 1;
- for (a = alt_digits; (e = strchr (a, ';')) != NULL; a = e + 1)
- ++adi->num;
- /* Allocate the `digit' array, which is an array of `num' pointers into
- `buffer'. */
- adi->digit = (CHAR **) calloc (adi->num, sizeof (CHAR **));
- if (!adi->digit)
- {
- free (adi);
- return NULL;
- }
- /* Compute memory required for `buffer'. */
- len = strlen (alt_digits);
- /* Allocate it. */
- adi->buffer = (CHAR *) malloc ((len + 1) * sizeof (CHAR));
- if (!adi->buffer)
- {
- free (adi->digit);
- free (adi);
- return NULL;
- }
- /* Store digits in it. */
- strcpy (adi->buffer, alt_digits);
- /* Store the pointers into `buffer' into the appropriate `digit' slot. */
- for (len = 0, aa = adi->buffer; (ae = strchr (aa, ';')) != NULL;
- ++len, aa = ae + 1)
- {
- *ae = '\0';
- adi->digit[len] = aa;
- }
- adi->digit[len] = aa;
- return adi;
-}
-
-static void
-free_alt_digits (alt_digits_t *adi)
-{
- free (adi->digit);
- free (adi->buffer);
- free (adi);
-}
-
-static const unsigned char *
-find_alt_digits (const unsigned char *bp, alt_digits_t *adi, uint *pval)
-{
- /* This is rather error-prone, but the entire idea of alt_digits
- isn't thought out well. If you start to look for matches at the
- start, there's a high probability that you find short matches but
- the entire translation is wrong. So we scan the alt_digits array
- from the highest to the lowest digits instead, hoping that it's
- more likely to catch digits consisting of multiple characters. */
- for (int i = (int) adi->num - 1; i >= 0; --i)
- {
- size_t len = strlen (adi->digit[i]);
- if (!strncmp ((const char *) bp, adi->digit[i], len))
- {
- *pval = i;
- return bp + len;
- }
- }
- return NULL;
-}
-
-static int
-is_leap_year (int year)
-{
- return (year % 4) == 0 && ((year % 100) != 0 || (year % 400) == 0);
-}
-
-static int
-first_day (int year)
-{
- int ret = 4;
-
- while (--year >= 1970)
- ret = (ret + 365 + is_leap_year (year)) % 7;
- return ret;
-}
-
-/* This simplifies the calls to conv_num enormously. */
-#define ALT_DIGITS ((alt_format & ALT_O) ? *alt_digits : NULL)
-
-static const u_char *conv_num(const unsigned char *, int *, uint, uint,
- alt_digits_t *);
-static const u_char *find_string(const u_char *, int *, const char * const *,
- const char * const *, int);
-
-static char *
-__strptime(const char *buf, const char *fmt, struct tm *tm,
- era_info_t **era_info, alt_digits_t **alt_digits)
-{
- unsigned char c;
- const unsigned char *bp;
- int alt_format, i, split_year = 0;
- era_info_t *era = NULL;
- int era_offset, got_eoff = 0;
- int saw_padding;
- unsigned long width;
- const char *new_fmt;
- uint ulim;
- int ymd = 0;
-
- bp = (const u_char *)buf;
- struct lc_time_T *_CurrentTimeLocale = __get_current_time_locale ();
-
- while (bp != NULL && (c = *fmt++) != '\0') {
- /* Clear `alternate' modifier prior to new conversion. */
- saw_padding = 0;
- width = 0;
- alt_format = 0;
- i = 0;
-
- /* Eat up white-space. */
- if (isspace(c)) {
- while (isspace(*bp))
- bp++;
- continue;
- }
-
- if (c != '%')
- goto literal;
-
-
-again: switch (c = *fmt++) {
- case '%': /* "%%" is converted to "%". */
-literal:
- if (c != *bp++)
- return NULL;
- LEGAL_ALT(0);
- continue;
-
- /*
- * "Alternative" modifiers. Just set the appropriate flag
- * and start over again.
- */
- case 'E': /* "%E?" alternative conversion modifier. */
- LEGAL_ALT(0);
- alt_format |= ALT_E;
- if (!*era_info && *_CurrentTimeLocale->era)
- *era_info = get_era_info (_CurrentTimeLocale->era);
- goto again;
-
- case 'O': /* "%O?" alternative conversion modifier. */
- LEGAL_ALT(0);
- alt_format |= ALT_O;
- if (!*alt_digits && *_CurrentTimeLocale->alt_digits)
- *alt_digits =
- get_alt_digits (_CurrentTimeLocale->alt_digits);
- goto again;
- case '0':
- case '+':
- LEGAL_ALT(0);
- if (saw_padding)
- return NULL;
- saw_padding = 1;
- goto again;
- case '1': case '2': case '3': case '4': case '5':
- case '6': case '7': case '8': case '9':
- /* POSIX-1.2008 maximum field width. Per POSIX,
- the width is only defined for the 'C', 'F', and 'Y'
- conversion specifiers. */
- LEGAL_ALT(0);
- {
- char *end;
- width = strtoul (fmt - 1, &end, 10);
- fmt = (const char *) end;
- goto again;
- }
- /*
- * "Complex" conversion rules, implemented through recursion.
- */
- case 'c': /* Date and time, using the locale's format. */
- new_fmt = (alt_format & ALT_E)
- ? _ctloc (era_d_t_fmt) : _ctloc(c_fmt);
- LEGAL_ALT(ALT_E);
- ymd |= SET_WDAY | SET_YMD;
- goto recurse;
-
- case 'D': /* The date as "%m/%d/%y". */
- new_fmt = "%m/%d/%y";
- LEGAL_ALT(0);
- ymd |= SET_YMD;
- goto recurse;
-
- case 'F': /* The date as "%Y-%m-%d". */
- {
- LEGAL_ALT(0);
- ymd |= SET_YMD;
- char *tmp = __strptime ((const char *) bp, "%Y-%m-%d",
- tm, era_info, alt_digits);
- if (tmp && (uint) (tmp - (char *) bp) > width)
- return NULL;
- bp = (const unsigned char *) tmp;
- continue;
- }
-
- case 'R': /* The time as "%H:%M". */
- new_fmt = "%H:%M";
- LEGAL_ALT(0);
- goto recurse;
-
- case 'r': /* The time in 12-hour clock representation. */
- new_fmt =_ctloc(ampm_fmt);
- LEGAL_ALT(0);
- goto recurse;
-
- case 'T': /* The time as "%H:%M:%S". */
- new_fmt = "%H:%M:%S";
- LEGAL_ALT(0);
- goto recurse;
-
- case 'X': /* The time, using the locale's format. */
- new_fmt = (alt_format & ALT_E)
- ? _ctloc (era_t_fmt) : _ctloc(X_fmt);
- LEGAL_ALT(ALT_E);
- goto recurse;
-
- case 'x': /* The date, using the locale's format. */
- new_fmt = (alt_format & ALT_E)
- ? _ctloc (era_d_fmt) : _ctloc(x_fmt);
- LEGAL_ALT(ALT_E);
- ymd |= SET_YMD;
- recurse:
- bp = (const u_char *)__strptime((const char *)bp,
- new_fmt, tm,
- era_info, alt_digits);
- continue;
-
- /*
- * "Elementary" conversion rules.
- */
- case 'A': /* The day of week, using the locale's form. */
- case 'a':
- bp = find_string(bp, &tm->tm_wday, _ctloc(weekday),
- _ctloc(wday), 7);
- LEGAL_ALT(0);
- ymd |= SET_WDAY;
- continue;
-
- case 'B': /* The month, using the locale's form. */
- case 'b':
- case 'h':
- bp = find_string(bp, &tm->tm_mon, _ctloc(month),
- _ctloc(mon), 12);
- LEGAL_ALT(0);
- ymd |= SET_WDAY;
- continue;
-
- case 'C': /* The century number. */
- LEGAL_ALT(ALT_E);
- ymd |= SET_YEAR;
- if ((alt_format & ALT_E) && *era_info)
- {
- /* With E modifier, an era. We potentially
- don't know the era offset yet, so we have to
- store the value in a local variable.
- The final computation of tm_year is only done
- right before this function returns. */
- size_t num = (*era_info)->num;
- for (size_t i = 0; i < num; ++i)
- if (!strncmp ((const char *) bp,
- (*era_info)[i].era_C,
- strlen ((*era_info)[i].era_C)))
- {
- era = (*era_info) + i;
- bp += strlen (era->era_C);
- break;
- }
- if (!era)
- return NULL;
- continue;
- }
- i = 20;
- for (ulim = 99; width && width < 2; ++width)
- ulim /= 10;
- bp = conv_num(bp, &i, 0, ulim, NULL);
-
- i = i * 100 - TM_YEAR_BASE;
- if (split_year)
- i += tm->tm_year % 100;
- split_year = 1;
- tm->tm_year = i;
- era = NULL;
- got_eoff = 0;
- continue;
-
- case 'd': /* The day of month. */
- case 'e':
- LEGAL_ALT(ALT_O);
- ymd |= SET_MDAY;
- bp = conv_num(bp, &tm->tm_mday, 1, 31, ALT_DIGITS);
- continue;
-
- case 'k': /* The hour (24-hour clock representation). */
- LEGAL_ALT(0);
- /* FALLTHROUGH */
- case 'H':
- LEGAL_ALT(ALT_O);
- bp = conv_num(bp, &tm->tm_hour, 0, 23, ALT_DIGITS);
- continue;
-
- case 'l': /* The hour (12-hour clock representation). */
- LEGAL_ALT(0);
- /* FALLTHROUGH */
- case 'I':
- LEGAL_ALT(ALT_O);
- bp = conv_num(bp, &tm->tm_hour, 1, 12, ALT_DIGITS);
- if (tm->tm_hour == 12)
- tm->tm_hour = 0;
- continue;
-
- case 'j': /* The day of year. */
- i = 1;
- bp = conv_num(bp, &i, 1, 366, NULL);
- tm->tm_yday = i - 1;
- LEGAL_ALT(0);
- ymd |= SET_YDAY;
- continue;
-
- case 'M': /* The minute. */
- LEGAL_ALT(ALT_O);
- bp = conv_num(bp, &tm->tm_min, 0, 59, ALT_DIGITS);
- continue;
-
- case 'm': /* The month. */
- LEGAL_ALT(ALT_O);
- ymd |= SET_MON;
- i = 1;
- bp = conv_num(bp, &i, 1, 12, ALT_DIGITS);
- tm->tm_mon = i - 1;
- continue;
-
- case 'p': /* The locale's equivalent of AM/PM. */
- bp = find_string(bp, &i, _ctloc(am_pm), NULL, 2);
- if (tm->tm_hour > 11)
- return NULL;
- tm->tm_hour += i * 12;
- LEGAL_ALT(0);
- continue;
-
- case 'S': /* The seconds. */
- LEGAL_ALT(ALT_O);
- bp = conv_num(bp, &tm->tm_sec, 0, 61, ALT_DIGITS);
- continue;
-
- case 'U': /* The week of year, beginning on sunday. */
- case 'W': /* The week of year, beginning on monday. */
- /*
- * XXX This is bogus, as we can not assume any valid
- * information present in the tm structure at this
- * point to calculate a real value, so just check the
- * range for now.
- */
- LEGAL_ALT(ALT_O);
- bp = conv_num(bp, &i, 0, 53, ALT_DIGITS);
- continue;
-
- case 'u': /* The day of week, beginning on monday. */
- LEGAL_ALT(ALT_O);
- ymd |= SET_WDAY;
- bp = conv_num(bp, &i, 1, 7, ALT_DIGITS);
- tm->tm_wday = i % 7;
- continue;
- case 'w': /* The day of week, beginning on sunday. */
- LEGAL_ALT(ALT_O);
- ymd |= SET_WDAY;
- bp = conv_num(bp, &tm->tm_wday, 0, 6, ALT_DIGITS);
- continue;
-
- case 'Y': /* The year. */
- LEGAL_ALT(ALT_E);
- ymd |= SET_YEAR;
- if ((alt_format & ALT_E) && *era_info)
- {
- bool gotit = false;
- size_t num = (*era_info)->num;
- (*era_info)->num = 1;
- for (size_t i = 0; i < num; ++i)
- {
- era_info_t *tmp_ei = (*era_info) + i;
- char *tmp = __strptime ((const char *) bp,
- tmp_ei->era_Y,
- tm, &tmp_ei,
- alt_digits);
- if (tmp)
- {
- bp = (const unsigned char *) tmp;
- gotit = true;
- break;
- }
- }
- (*era_info)->num = num;
- if (gotit)
- continue;
- return NULL;
- }
- i = TM_YEAR_BASE; /* just for data sanity... */
- for (ulim = 9999; width && width < 4; ++width)
- ulim /= 10;
- bp = conv_num(bp, &i, 0, ulim, NULL);
- tm->tm_year = i - TM_YEAR_BASE;
- era = NULL;
- got_eoff = 0;
- continue;
-
- case 'y': /* The year within 100 years of the epoch. */
- /* LEGAL_ALT(ALT_E | ALT_O); */
- ymd |= SET_YEAR;
- if ((alt_format & ALT_E) && *era_info)
- {
- /* With E modifier, the offset to the start date
- of the era specified with %EC. We potentially
- don't know the era yet, so we have to store the
- value in a local variable, just like era itself.
- The final computation of tm_year is only done
- right before this function returns. */
- bp = conv_num(bp, &era_offset, 0, UINT_MAX, NULL);
- got_eoff = 1;
- continue;
- }
- bp = conv_num(bp, &i, 0, 99, ALT_DIGITS);
-
- if (split_year) /* preserve century */
- i += (tm->tm_year / 100) * 100;
- else {
- split_year = 1;
- if (i <= 68)
- i = i + 2000 - TM_YEAR_BASE;
- else
- i = i + 1900 - TM_YEAR_BASE;
- }
- tm->tm_year = i;
- era = NULL;
- got_eoff = 0;
- continue;
-
- case 'Z':
- tzset();
- if (strncmp((const char *)bp, gmt, 3) == 0) {
- tm->tm_isdst = 0;
-#ifdef TM_GMTOFF
- if (CYGWIN_VERSION_CHECK_FOR_EXTRA_TM_MEMBERS)
- tm->TM_GMTOFF = 0;
-#endif
-#ifdef TM_ZONE
- if (CYGWIN_VERSION_CHECK_FOR_EXTRA_TM_MEMBERS)
- tm->TM_ZONE = gmt;
-#endif
- bp += 3;
- } else {
- const unsigned char *ep;
-
- ep = find_string(bp, &i,
- (const char * const *)tzname,
- NULL, 2);
- if (ep != NULL) {
- tm->tm_isdst = i;
-#ifdef TM_GMTOFF
- if (CYGWIN_VERSION_CHECK_FOR_EXTRA_TM_MEMBERS)
- tm->TM_GMTOFF = -(timezone);
-#endif
-#ifdef TM_ZONE
- if (CYGWIN_VERSION_CHECK_FOR_EXTRA_TM_MEMBERS)
- tm->TM_ZONE = tzname[i];
-#endif
- }
- bp = ep;
- }
- continue;
-
- /*
- * Miscellaneous conversions.
- */
- case 'n': /* Any kind of white-space. */
- case 't':
- while (isspace(*bp))
- bp++;
- LEGAL_ALT(0);
- continue;
-
-
- default: /* Unknown/unsupported conversion. */
- return NULL;
- }
- }
-
- if (bp && (era || got_eoff))
- {
- /* Default to current era. */
- if (!era)
- era = *era_info;
- /* Default to first year of era if offset is missing */
- if (!got_eoff)
- era_offset = era->offset;
- tm->tm_year = (era->start.tm_year != INT_MIN
- ? era->start.tm_year : era->end.tm_year)
- + (era_offset - era->offset) * era->dir;
- /* Check if year falls into the era. If not, it's an
- invalid combination of era and offset. */
- if (era->start.tm_year > tm->tm_year
- || era->end.tm_year < tm->tm_year)
- return NULL;
- tm->tm_year -= TM_YEAR_BASE;
- }
-
- if ((ymd & SET_YMD) == SET_YMD)
- {
- /* all of tm_year, tm_mon and tm_mday, but... */
- if (!(ymd & SET_YDAY))
- {
- /* ...not tm_yday, so fill it in */
- tm->tm_yday = _DAYS_BEFORE_MONTH[tm->tm_mon] + tm->tm_mday;
- if (!is_leap_year (tm->tm_year + TM_YEAR_BASE)
- || tm->tm_mon < 2)
- tm->tm_yday--;
- ymd |= SET_YDAY;
- }
- }
- else if ((ymd & (SET_YEAR | SET_YDAY)) == (SET_YEAR | SET_YDAY))
- {
- /* both of tm_year and tm_yday, but... */
- if (!(ymd & SET_MON))
- {
- /* ...not tm_mon, so fill it in, and/or... */
- if (tm->tm_yday < _DAYS_BEFORE_MONTH[1])
- tm->tm_mon = 0;
- else
- {
- int leap = is_leap_year (tm->tm_year + TM_YEAR_BASE);
- for (i = 2; i < 12; ++i)
- if (tm->tm_yday < _DAYS_BEFORE_MONTH[i] + leap)
- break;
- tm->tm_mon = i - 1;
- }
- }
- if (!(ymd & SET_MDAY))
- {
- /* ...not tm_mday, so fill it in */
- tm->tm_mday = tm->tm_yday - _DAYS_BEFORE_MONTH[tm->tm_mon];
- if (!is_leap_year (tm->tm_year + TM_YEAR_BASE)
- || tm->tm_mon < 2)
- tm->tm_mday++;
- }
- }
-
- if ((ymd & (SET_YEAR | SET_YDAY | SET_WDAY)) == (SET_YEAR | SET_YDAY))
- {
- /* fill in tm_wday */
- int fday = first_day (tm->tm_year + TM_YEAR_BASE);
- tm->tm_wday = (fday + tm->tm_yday) % 7;
- }
- return (char *) bp;
-}
-
-char *
-strptime (const char *__restrict buf, const char *__restrict fmt,
- struct tm *__restrict tm)
-{
- era_info_t *era_info = NULL;
- alt_digits_t *alt_digits = NULL;
- char *ret = __strptime (buf, fmt, tm, &era_info, &alt_digits);
- if (era_info)
- free_era_info (era_info);
- if (alt_digits)
- free_alt_digits (alt_digits);
- return ret;
-}
-
-static const u_char *
-conv_num(const unsigned char *buf, int *dest, uint llim, uint ulim,
- alt_digits_t *alt_digits)
-{
- uint result = 0;
- unsigned char ch;
-
- if (alt_digits)
- buf = find_alt_digits (buf, alt_digits, &result);
- else
- {
- /* The limit also determines the number of valid digits. */
- uint rulim = ulim;
-
- ch = *buf;
- if (ch < '0' || ch > '9')
- return NULL;
-
- do {
- result *= 10;
- result += ch - '0';
- rulim /= 10;
- ch = *++buf;
- } while ((result * 10 <= ulim) && rulim && ch >= '0' && ch <= '9');
- }
-
- if (result < llim || result > ulim)
- return NULL;
-
- *dest = result;
- return buf;
-}
-
-static const u_char *
-find_string(const u_char *bp, int *tgt, const char * const *n1,
- const char * const *n2, int c)
-{
- int i;
- unsigned int len;
-
- /* check full name - then abbreviated ones */
- for (; n1 != NULL; n1 = n2, n2 = NULL) {
- for (i = 0; i < c; i++, n1++) {
- len = strlen(*n1);
- if (strncasecmp(*n1, (const char *)bp, len) == 0) {
- *tgt = i;
- return bp + len;
- }
- }
- }
-
- /* Nothing matched */
- return NULL;
-}
diff --git a/winsup/cygwin/libc/xsique.cc b/winsup/cygwin/libc/xsique.cc
deleted file mode 100644
index 05bff661e..000000000
--- a/winsup/cygwin/libc/xsique.cc
+++ /dev/null
@@ -1,48 +0,0 @@
-/* xsique.cc. XSI insque and remque functions.
-
- Copyright 2007, 2008 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include <search.h>
-
-extern "C" void
-insque (void *velement, void *vpred)
-{
- if (!velement)
- return;
-
- struct qelem *element = (struct qelem *) velement;
- struct qelem *pred = (struct qelem *) vpred;
- struct qelem *succ;
-
- if (pred)
- {
- if ((succ = element->q_forw = pred->q_forw))
- succ->q_back = element;
- pred->q_forw = element;
- }
- else
- element->q_forw = NULL;
- element->q_back = pred;
-}
-
-extern "C" void
-remque (void *velement)
-{
- if (!velement)
- return;
-
- struct qelem *pred = ((struct qelem *) velement)->q_back;
- struct qelem *succ = ((struct qelem *) velement)->q_forw;
-
- if (succ)
- succ->q_back = pred;
- if (pred)
- pred->q_forw = succ;
-}
-
diff --git a/winsup/cygwin/libstdcxx_wrapper.cc b/winsup/cygwin/libstdcxx_wrapper.cc
deleted file mode 100755
index 80861b738..000000000
--- a/winsup/cygwin/libstdcxx_wrapper.cc
+++ /dev/null
@@ -1,101 +0,0 @@
-/* libstdcxx_wrapper.cc
-
- Copyright 2009 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-
-/* We provide these stubs to call into a user's
- provided ONDEE replacement if there is one - otherwise
- it must fall back to the standard libstdc++ version. */
-
-#include "winsup.h"
-#include "cygwin-cxx.h"
-#include "perprocess.h"
-
-/* We are declaring asm names for the functions we define here, as we want
- to define the wrappers in this file. GCC links everything with wrappers
- around the standard C++ memory management operators; these are the wrappers,
- but we want the compiler to know they are the malloc operators and not have
- it think they're just any old function matching 'extern "C" _wrap_*'. */
-#ifdef __x86_64__
-#define MANGLED_ZNWX "__wrap__Znwm"
-#define MANGLED_ZNAX "__wrap__Znam"
-#define MANGLED_ZNWX_NOTHROW_T "__wrap__ZnwmRKSt9nothrow_t"
-#define MANGLED_ZNAX_NOTHROW_T "__wrap__ZnamRKSt9nothrow_t"
-#else
-#define MANGLED_ZNWX "___wrap__Znwj"
-#define MANGLED_ZNAX "___wrap__Znaj"
-#define MANGLED_ZNWX_NOTHROW_T "___wrap__ZnwjRKSt9nothrow_t"
-#define MANGLED_ZNAX_NOTHROW_T "___wrap__ZnajRKSt9nothrow_t"
-#endif
-
-extern void *operator new(std::size_t sz) throw (std::bad_alloc)
- __asm__ (MANGLED_ZNWX);
-extern void *operator new[](std::size_t sz) throw (std::bad_alloc)
- __asm__ (MANGLED_ZNAX);
-extern void operator delete(void *p) throw()
- __asm__ (_SYMSTR (__wrap__ZdlPv));
-extern void operator delete[](void *p) throw()
- __asm__ (_SYMSTR (__wrap__ZdaPv));
-extern void *operator new(std::size_t sz, const std::nothrow_t &nt) throw()
- __asm__ (MANGLED_ZNWX_NOTHROW_T);
-extern void *operator new[](std::size_t sz, const std::nothrow_t &nt) throw()
- __asm__ (MANGLED_ZNAX_NOTHROW_T);
-extern void operator delete(void *p, const std::nothrow_t &nt) throw()
- __asm__ (_SYMSTR (__wrap__ZdlPvRKSt9nothrow_t));
-extern void operator delete[](void *p, const std::nothrow_t &nt) throw()
- __asm__ (_SYMSTR (__wrap__ZdaPvRKSt9nothrow_t));
-
-extern void *
-operator new(std::size_t sz) throw (std::bad_alloc)
-{
- return (*user_data->cxx_malloc->oper_new) (sz);
-}
-
-extern void *
-operator new[](std::size_t sz) throw (std::bad_alloc)
-{
- return (*user_data->cxx_malloc->oper_new__) (sz);
-}
-
-extern void
-operator delete(void *p) throw()
-{
- (*user_data->cxx_malloc->oper_delete) (p);
-}
-
-extern void
-operator delete[](void *p) throw()
-{
- (*user_data->cxx_malloc->oper_delete__) (p);
-}
-
-extern void *
-operator new(std::size_t sz, const std::nothrow_t &nt) throw()
-{
- return (*user_data->cxx_malloc->oper_new_nt) (sz, nt);
-}
-
-extern void *
-operator new[](std::size_t sz, const std::nothrow_t &nt) throw()
-{
- return (*user_data->cxx_malloc->oper_new___nt) (sz, nt);
-}
-
-extern void
-operator delete(void *p, const std::nothrow_t &nt) throw()
-{
- (*user_data->cxx_malloc->oper_delete_nt) (p, nt);
-}
-
-extern void
-operator delete[](void *p, const std::nothrow_t &nt) throw()
-{
- (*user_data->cxx_malloc->oper_delete___nt) (p, nt);
-}
-
diff --git a/winsup/cygwin/localtime.cc b/winsup/cygwin/localtime.cc
deleted file mode 100644
index 139faced8..000000000
--- a/winsup/cygwin/localtime.cc
+++ /dev/null
@@ -1,2545 +0,0 @@
-/* $NetBSD: localtime.c,v 1.72 2012/10/28 19:02:29 christos Exp $ */
-
-/* Don't reformat the code arbitrarily.
-
- It uses in wide parts the exact formatting as the upstream NetBSD
- versions. The purpose is to simplify subsequent diffs to the NetBSD
- version, should the need arise again at one point. */
-
-/*
-** This file is in the public domain, so clarified as of
-** 1996-06-05 by Arthur David Olson.
-*/
-/* Temporarily merged private.h and tzfile.h for ease of management - DJ */
-
-#include "winsup.h"
-#include "cygerrno.h"
-#include "sync.h"
-#include <ctype.h>
-#define STD_INSPIRED
-#define lint
-
-#define USG_COMPAT
-
-#ifndef lint
-#ifndef NOID
-static char elsieid[] = "@(#)localtime.c 8.17";
-#endif /* !defined NOID */
-#endif /* !defined lint */
-
-/*
-** Leap second handling from Bradley White.
-** POSIX-style TZ environment variable handling from Guy Harris.
-*/
-
-#define NO_ERROR_IN_DST_GAP
-
-/*LINTLIBRARY*/
-
-#ifndef PRIVATE_H
-
-#define PRIVATE_H
-
-/*
-** This file is in the public domain, so clarified as of
-** 1996-06-05 by Arthur David Olson
-*/
-
-/*
-** This header is for use ONLY with the time conversion code.
-** There is no guarantee that it will remain unchanged,
-** or that it will remain at all.
-** Do NOT copy it to any system include directory.
-** Thank you!
-*/
-
-/*
-** ID
-*/
-
-#ifndef lint
-#ifndef NOID
-static char privatehid[] = "@(#)private.h 7.48";
-#endif /* !defined NOID */
-#endif /* !defined lint */
-
-/*
-** Nested includes
-*/
-
-#include "stdio.h"
-#include "limits.h" /* for CHAR_BIT */
-#include "stdlib.h"
-#include "unistd.h" /* for F_OK and R_OK */
-
-/* Unlike <ctype.h>'s isdigit, this also works if c < 0 | c > UCHAR_MAX. */
-#define is_digit(c) ((unsigned)(c) - '0' <= 9)
-
-#ifndef __pure
-#if 2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__)
-# define __pure __attribute__ ((__pure__))
-#else
-# define __pure /* empty */
-#endif
-#endif
-
-/*
-** Finally, some convenience items.
-*/
-
-#ifndef TYPE_INTEGRAL
-#define TYPE_INTEGRAL(type) (/*CONSTCOND*/((type) 0.5) != 0.5)
-#endif /* !defined TYPE_INTEGRAL */
-
-#ifndef TYPE_BIT
-#define TYPE_BIT(type) (sizeof (type) * CHAR_BIT)
-#endif /* !defined TYPE_BIT */
-
-#ifndef TYPE_SIGNED
-#define TYPE_SIGNED(type) (((type) -1) < 0)
-#endif /* !defined TYPE_SIGNED */
-
-#ifndef INT_STRLEN_MAXIMUM
-/*
-** 302 / 1000 is log10(2.0) rounded up.
-** Subtract one for the sign bit if the type is signed;
-** add one for integer division truncation;
-** add one more for a minus sign if the type is signed.
-*/
-#define INT_STRLEN_MAXIMUM(type) \
- ((TYPE_BIT(type) - TYPE_SIGNED(type)) * 302 / 1000 + 1 + TYPE_SIGNED(type))
-#endif /* !defined INT_STRLEN_MAXIMUM */
-
-/*
-** INITIALIZE(x)
-*/
-
-#ifndef GNUC_or_lint
-#ifdef lint
-#define GNUC_or_lint
-#endif /* defined lint */
-#ifndef lint
-#ifdef __GNUC__
-#define GNUC_or_lint
-#endif /* defined __GNUC__ */
-#endif /* !defined lint */
-#endif /* !defined GNUC_or_lint */
-
-#ifndef INITIALIZE
-#ifdef GNUC_or_lint
-#define INITIALIZE(x) ((x) = 0)
-#endif /* defined GNUC_or_lint */
-#ifndef GNUC_or_lint
-#define INITIALIZE(x)
-#endif /* !defined GNUC_or_lint */
-#endif /* !defined INITIALIZE */
-
-#ifndef TZ_DOMAIN
-#define TZ_DOMAIN "tz"
-#endif /* !defined TZ_DOMAIN */
-
-#ifndef YEARSPERREPEAT
-#define YEARSPERREPEAT 400 /* years before a Gregorian repeat */
-#endif /* !defined YEARSPERREPEAT */
-
-/*
-** The Gregorian year averages 365.2425 days, which is 31556952 seconds.
-*/
-
-#ifndef AVGSECSPERYEAR
-#define AVGSECSPERYEAR 31556952L
-#endif /* !defined AVGSECSPERYEAR */
-
-#ifndef SECSPERREPEAT
-#define SECSPERREPEAT ((int_fast64_t) YEARSPERREPEAT * (int_fast64_t) AVGSECSPERYEAR)
-#endif /* !defined SECSPERREPEAT */
-
-#ifndef SECSPERREPEAT_BITS
-#define SECSPERREPEAT_BITS 34 /* ceil(log2(SECSPERREPEAT)) */
-#endif /* !defined SECSPERREPEAT_BITS */
-
-/*
-** UNIX was a registered trademark of UNIX System Laboratories in 1993.
-*/
-
-#endif /* !defined PRIVATE_H */
-
-#ifndef TZFILE_H
-
-#define TZFILE_H
-
-/*
-** This file is in the public domain, so clarified as of
-** 1996-06-05 by Arthur David Olson.
-*/
-
-/*
-** This header is for use ONLY with the time conversion code.
-** There is no guarantee that it will remain unchanged,
-** or that it will remain at all.
-** Do NOT copy it to any system include directory.
-** Thank you!
-*/
-
-/*
-** ID
-*/
-
-#ifndef lint
-#ifndef NOID
-static char tzfilehid[] = "@(#)tzfile.h 7.14";
-#endif /* !defined NOID */
-#endif /* !defined lint */
-
-/*
-** Information about time zone files.
-*/
-
-#ifndef TZDIR
-#define TZDIR "/usr/share/zoneinfo" /* Time zone object file directory */
-#endif /* !defined TZDIR */
-
-#ifndef TZDEFAULT
-#define TZDEFAULT "localtime"
-#endif /* !defined TZDEFAULT */
-
-#ifndef TZDEFRULES
-#define TZDEFRULES "posixrules"
-#endif /* !defined TZDEFRULES */
-
-/*
-** Each file begins with. . .
-*/
-
-#define TZ_MAGIC "TZif"
-
-struct tzhead {
- char tzh_magic[4]; /* TZ_MAGIC */
- char tzh_version[1]; /* '\0' or '2' as of 2005 */
- char tzh_reserved[15]; /* reserved for future use */
- char tzh_ttisgmtcnt[4]; /* coded number of trans. time flags */
- char tzh_ttisstdcnt[4]; /* coded number of trans. time flags */
- char tzh_leapcnt[4]; /* coded number of leap seconds */
- char tzh_timecnt[4]; /* coded number of transition times */
- char tzh_typecnt[4]; /* coded number of local time types */
- char tzh_charcnt[4]; /* coded number of abbr. chars */
-};
-
-/*
-** . . .followed by. . .
-**
-** tzh_timecnt (char [4])s coded transition times a la time(2)
-** tzh_timecnt (unsigned char)s types of local time starting at above
-** tzh_typecnt repetitions of
-** one (char [4]) coded UTC offset in seconds
-** one (unsigned char) used to set tm_isdst
-** one (unsigned char) that's an abbreviation list index
-** tzh_charcnt (char)s '\0'-terminated zone abbreviations
-** tzh_leapcnt repetitions of
-** one (char [4]) coded leap second transition times
-** one (char [4]) total correction after above
-** tzh_ttisstdcnt (char)s indexed by type; if TRUE, transition
-** time is standard time, if FALSE,
-** transition time is wall clock time
-** if absent, transition times are
-** assumed to be wall clock time
-** tzh_ttisgmtcnt (char)s indexed by type; if TRUE, transition
-** time is UTC, if FALSE,
-** transition time is local time
-** if absent, transition times are
-** assumed to be local time
-*/
-
-/*
-** If tzh_version is '2' or greater, the above is followed by a second instance
-** of tzhead and a second instance of the data in which each coded transition
-** time uses 8 rather than 4 chars,
-** then a POSIX-TZ-environment-variable-style string for use in handling
-** instants after the last transition time stored in the file
-** (with nothing between the newlines if there is no POSIX representation for
-** such instants).
-*/
-
-/*
-** In the current implementation, "tzset()" refuses to deal with files that
-** exceed any of the limits below.
-*/
-
-#ifndef TZ_MAX_TIMES
-/*
-** The TZ_MAX_TIMES value below is enough to handle a bit more than a
-** year's worth of solar time (corrected daily to the nearest second) or
-** 138 years of Pacific Presidential Election time
-** (where there are three time zone transitions every fourth year).
-*/
-#define TZ_MAX_TIMES 1200
-#endif /* !defined TZ_MAX_TIMES */
-
-#ifndef TZ_MAX_TYPES
-#ifndef NOSOLAR
-#define TZ_MAX_TYPES 256 /* Limited by what (unsigned char)'s can hold */
-#endif /* !defined NOSOLAR */
-#ifdef NOSOLAR
-/*
-** Must be at least 14 for Europe/Riga as of Jan 12 1995,
-** as noted by Earl Chew.
-*/
-#define TZ_MAX_TYPES 20 /* Maximum number of local time types */
-#endif /* !defined NOSOLAR */
-#endif /* !defined TZ_MAX_TYPES */
-
-#ifndef TZ_MAX_CHARS
-#define TZ_MAX_CHARS 50 /* Maximum number of abbreviation characters */
- /* (limited by what unsigned chars can hold) */
-#endif /* !defined TZ_MAX_CHARS */
-
-#ifndef TZ_MAX_LEAPS
-#define TZ_MAX_LEAPS 50 /* Maximum number of leap second corrections */
-#endif /* !defined TZ_MAX_LEAPS */
-
-#define SECSPERMIN 60
-#define MINSPERHOUR 60
-#define HOURSPERDAY 24
-#define DAYSPERWEEK 7
-#define DAYSPERNYEAR 365
-#define DAYSPERLYEAR 366
-#define SECSPERHOUR (SECSPERMIN * MINSPERHOUR)
-#define SECSPERDAY ((long) SECSPERHOUR * HOURSPERDAY)
-#define MONSPERYEAR 12
-
-#define TM_SUNDAY 0
-#define TM_MONDAY 1
-#define TM_TUESDAY 2
-#define TM_WEDNESDAY 3
-#define TM_THURSDAY 4
-#define TM_FRIDAY 5
-#define TM_SATURDAY 6
-
-#define TM_JANUARY 0
-#define TM_FEBRUARY 1
-#define TM_MARCH 2
-#define TM_APRIL 3
-#define TM_MAY 4
-#define TM_JUNE 5
-#define TM_JULY 6
-#define TM_AUGUST 7
-#define TM_SEPTEMBER 8
-#define TM_OCTOBER 9
-#define TM_NOVEMBER 10
-#define TM_DECEMBER 11
-
-#define TM_YEAR_BASE 1900
-
-#define EPOCH_YEAR 1970
-#define EPOCH_WDAY TM_THURSDAY
-
-/*
-** Accurate only for the past couple of centuries;
-** that will probably do.
-*/
-
-#define isleap(y) (((y) % 4) == 0 && (((y) % 100) != 0 || ((y) % 400) == 0))
-
-#endif /* !defined TZFILE_H */
-
-#include "fcntl.h"
-
-#ifdef __TM_GMTOFF
-# define TM_GMTOFF __TM_GMTOFF
-#endif
-#ifdef __TM_ZONE
-# define TM_ZONE __TM_ZONE
-#endif
-
-/*
-** SunOS 4.1.1 headers lack O_BINARY.
-*/
-
-#ifdef O_BINARY
-#define OPEN_MODE (O_RDONLY | O_BINARY)
-#endif /* defined O_BINARY */
-#ifndef O_BINARY
-#define OPEN_MODE O_RDONLY
-#endif /* !defined O_BINARY */
-
-#ifndef WILDABBR
-/*
-** Someone might make incorrect use of a time zone abbreviation:
-** 1. They might reference tzname[0] before calling tzset (explicitly
-** or implicitly).
-** 2. They might reference tzname[1] before calling tzset (explicitly
-** or implicitly).
-** 3. They might reference tzname[1] after setting to a time zone
-** in which Daylight Saving Time is never observed.
-** 4. They might reference tzname[0] after setting to a time zone
-** in which Standard Time is never observed.
-** 5. They might reference tm.TM_ZONE after calling offtime.
-** What's best to do in the above cases is open to debate;
-** for now, we just set things up so that in any of the five cases
-** WILDABBR is used. Another possibility: initialize tzname[0] to the
-** string "tzname[0] used before set", and similarly for the other cases.
-** And another: initialize tzname[0] to "ERA", with an explanation in the
-** manual page of what this "time zone abbreviation" means (doing this so
-** that tzname[0] has the "normal" length of three characters).
-*/
-#define WILDABBR " "
-#endif /* !defined WILDABBR */
-
-static const char wildabbr[] = WILDABBR;
-
-static const char gmt[] = "GMT";
-
-/*
-** The DST rules to use if TZ has no rules and we can't load TZDEFRULES.
-** We default to US rules as of 1999-08-17.
-** POSIX 1003.1 section 8.1.1 says that the default DST rules are
-** implementation dependent; for historical reasons, US rules are a
-** common default.
-*/
-#ifndef TZDEFRULESTRING
-#define TZDEFRULESTRING ",M4.1.0,M10.5.0"
-#endif /* !defined TZDEFDST */
-
-struct ttinfo { /* time type information */
- long tt_gmtoff; /* UTC offset in seconds */
- int tt_isdst; /* used to set tm_isdst */
- int tt_abbrind; /* abbreviation list index */
- int tt_ttisstd; /* TRUE if transition is std time */
- int tt_ttisgmt; /* TRUE if transition is UTC */
-};
-
-struct lsinfo { /* leap second information */
- time_t ls_trans; /* transition time */
- long ls_corr; /* correction to apply */
-};
-
-#define BIGGEST(a, b) (((a) > (b)) ? (a) : (b))
-
-#ifdef TZNAME_MAX
-#define MY_TZNAME_MAX TZNAME_MAX
-#endif /* defined TZNAME_MAX */
-#ifndef TZNAME_MAX
-#define MY_TZNAME_MAX 255
-#endif /* !defined TZNAME_MAX */
-
-struct __state {
- int leapcnt;
- int timecnt;
- int typecnt;
- int charcnt;
- int goback;
- int goahead;
- time_t ats[TZ_MAX_TIMES];
- unsigned char types[TZ_MAX_TIMES];
- struct ttinfo ttis[TZ_MAX_TYPES];
- char chars[/*CONSTCOND*/BIGGEST(BIGGEST(TZ_MAX_CHARS + 1,
- sizeof gmt), (2 * (MY_TZNAME_MAX + 1)))];
- struct lsinfo lsis[TZ_MAX_LEAPS];
-};
-
-typedef struct __state *timezone_t;
-
-struct rule {
- int r_type; /* type of rule--see below */
- int r_day; /* day number of rule */
- int r_week; /* week number of rule */
- int r_mon; /* month number of rule */
- long r_time; /* transition time of rule */
-};
-
-#define JULIAN_DAY 0 /* Jn - Julian day */
-#define DAY_OF_YEAR 1 /* n - day of year */
-#define MONTH_NTH_DAY_OF_WEEK 2 /* Mm.n.d - month, week, day of week */
-
-typedef struct tm *(*subfun_t)(const timezone_t sp, const time_t *timep,
- long offset, struct tm *tmp);
-
-/*
-** Prototypes for static functions.
-*/
-
-static long detzcode(const char * codep);
-static time_t detzcode64(const char * codep);
-static int differ_by_repeat(time_t t1, time_t t0);
-static const char * getzname(const char * strp) __pure;
-static const char * getqzname(const char * strp, const int delim) __pure;
-static const char * getnum(const char * strp, int * nump, int min,
- int max);
-static const char * getsecs(const char * strp, long * secsp);
-static const char * getoffset(const char * strp, long * offsetp);
-static const char * getrule(const char * strp, struct rule * rulep);
-static void gmtload(timezone_t sp);
-static struct tm * gmtsub(const timezone_t sp, const time_t *timep,
- long offset, struct tm * tmp);
-static struct tm * localsub(const timezone_t sp, const time_t *timep,
- long offset, struct tm *tmp);
-static int increment_overflow(int * number, int delta);
-static int leaps_thru_end_of(int y) __pure;
-static int long_increment_overflow(long * number, int delta);
-static int long_normalize_overflow(long * tensptr,
- int * unitsptr, int base);
-static int normalize_overflow(int * tensptr, int * unitsptr,
- int base);
-static void settzname(void);
-static time_t time1(const timezone_t sp, struct tm * const tmp,
- subfun_t funcp, const long offset);
-static time_t time2(const timezone_t sp, struct tm * const tmp,
- subfun_t funcp,
- const long offset, int *const okayp);
-static time_t time2sub(const timezone_t sp, struct tm * const tmp,
- subfun_t funcp, const long offset,
- int *const okayp, const int do_norm_secs);
-static struct tm * timesub(const timezone_t sp, const time_t * timep,
- long offset, struct tm * tmp);
-static int tmcomp(const struct tm * atmp,
- const struct tm * btmp);
-static time_t transtime(time_t janfirst, int year,
- const struct rule * rulep, long offset) __pure;
-static int typesequiv(const timezone_t sp, int a, int b);
-static int tzload(timezone_t sp, const char * name,
- int doextend);
-static int tzparse(timezone_t sp, const char * name,
- int lastditch);
-static void tzset_unlocked(void);
-static long leapcorr(const timezone_t sp, time_t * timep);
-
-static timezone_t lclptr;
-static timezone_t gmtptr;
-
-#ifndef TZ_STRLEN_MAX
-#define TZ_STRLEN_MAX 255
-#endif /* !defined TZ_STRLEN_MAX */
-
-static char lcl_TZname[TZ_STRLEN_MAX + 1];
-static enum lcl_states
-{
- lcl_setting = -1,
- lcl_unset = 0,
- lcl_from_environment = 1,
- lcl_from_default = 2
-} lcl_is_set;
-static int gmt_is_set;
-
-#define tzname _tzname
-#undef _tzname
-
-char * tzname[2] = {
- (char *) wildabbr,
- (char *) wildabbr
-};
-
-/*
-** Section 4.12.3 of X3.159-1989 requires that
-** Except for the strftime function, these functions [asctime,
-** ctime, gmtime, localtime] return values in one of two static
-** objects: a broken-down time structure and an array of char.
-** Thanks to Paul Eggert for noting this.
-*/
-
-static struct tm tm;
-
-/* These variables are initialized by tzset. The macro versions are
- defined in time.h, and indirect through the __imp_ pointers. */
-
-#define timezone _timezone
-#define daylight _daylight
-#undef _timezone
-#undef _daylight
-
-#ifdef USG_COMPAT
-long timezone = 0;
-int daylight;
-#endif /* defined USG_COMPAT */
-
-#ifdef ALTZONE
-time_t altzone = 0;
-#endif /* defined ALTZONE */
-
-static long
-detzcode(const char *const codep)
-{
- long result;
- int i;
-
- result = (codep[0] & 0x80) ? ~0L : 0;
- for (i = 0; i < 4; ++i)
- result = (result << 8) | (codep[i] & 0xff);
- return result;
-}
-
-static time_t
-detzcode64(const char *const codep)
-{
- time_t result;
- int i;
-
- result = (time_t)((codep[0] & 0x80) ? (~(int_fast64_t) 0) : 0);
- for (i = 0; i < 8; ++i)
- result = result * 256 + (codep[i] & 0xff);
- return result;
-}
-
-static void
-settzname (void)
-{
- timezone_t const sp = lclptr;
- int i;
-
- tzname[0] = (char *) wildabbr;
- tzname[1] = (char *) wildabbr;
-#ifdef USG_COMPAT
- daylight = 0;
- timezone = 0;
-#endif /* defined USG_COMPAT */
-#ifdef ALTZONE
- altzone = 0;
-#endif /* defined ALTZONE */
- if (sp == NULL) {
- tzname[0] = tzname[1] = (char *) gmt;
- return;
- }
- for (i = 0; i < sp->typecnt; ++i) {
- const struct ttinfo * const ttisp = &sp->ttis[i];
-
- tzname[ttisp->tt_isdst] =
- &sp->chars[ttisp->tt_abbrind];
-#ifdef USG_COMPAT
- if (ttisp->tt_isdst)
- daylight = 1;
- if (!ttisp->tt_isdst)
- timezone = -(ttisp->tt_gmtoff);
-#endif /* defined USG_COMPAT */
-#ifdef ALTZONE
- if (ttisp->tt_isdst)
- altzone = -(ttisp->tt_gmtoff);
-#endif /* defined ALTZONE */
- }
- /*
- ** And to get the latest zone names into tzname. . .
- */
- for (i = 0; i < sp->timecnt; ++i) {
- const struct ttinfo *const ttisp = &sp->ttis[sp->types[i]];
-
- tzname[ttisp->tt_isdst] =
- &sp->chars[ttisp->tt_abbrind];
- }
-}
-
-#include "tz_posixrules.h"
-
-static int
-differ_by_repeat(const time_t t1, const time_t t0)
-{
- if (TYPE_INTEGRAL(time_t) &&
- TYPE_BIT(time_t) - TYPE_SIGNED(time_t) < SECSPERREPEAT_BITS)
- return 0;
- return (int_fast64_t)t1 - (int_fast64_t)t0 == SECSPERREPEAT;
-}
-
-static int
-tzload(timezone_t sp, const char *name, const int doextend)
-{
- const char * p;
- int i;
- int fid;
- int stored;
- ssize_t nread;
- typedef union {
- struct tzhead tzhead;
- char buf[2 * sizeof(struct tzhead) +
- 2 * sizeof *sp +
- 4 * TZ_MAX_TIMES];
- } u_t;
- u_t * up;
- save_errno save;
-
- up = (u_t *) calloc(1, sizeof *up);
- if (up == NULL)
- return -1;
-
- sp->goback = sp->goahead = FALSE;
- if (name == NULL && (name = TZDEFAULT) == NULL)
- goto oops;
- {
- int doaccess;
- /*
- ** Section 4.9.1 of the C standard says that
- ** "FILENAME_MAX expands to an integral constant expression
- ** that is the size needed for an array of char large enough
- ** to hold the longest file name string that the implementation
- ** guarantees can be opened."
- */
- char fullname[FILENAME_MAX + 1];
-
- if (name[0] == ':')
- ++name;
- doaccess = name[0] == '/';
- if (!doaccess) {
- if ((p = TZDIR) == NULL)
- goto oops;
- if ((strlen(p) + strlen(name) + 1) >= sizeof fullname)
- goto oops;
- (void) strcpy(fullname, p); /* XXX strcpy is safe */
- (void) strcat(fullname, "/"); /* XXX strcat is safe */
- (void) strcat(fullname, name); /* XXX strcat is safe */
- /*
- ** Set doaccess if '.' (as in "../") shows up in name.
- */
- if (strchr(name, '.') != NULL)
- doaccess = TRUE;
- name = fullname;
- }
- if ((doaccess && access(name, R_OK) != 0)
- || (fid = open(name, OPEN_MODE)) == -1)
- {
- const char *base = strrchr(name, '/');
- if (base)
- base++;
- else
- base = name;
- if (strcmp(base, "posixrules"))
- goto oops;
-
- /* We've got a built-in copy of posixrules just in case */
- fid = -2;
- }
- }
- if (fid == -2)
- {
- memcpy(up->buf, _posixrules_data, sizeof (_posixrules_data));
- nread = sizeof (_posixrules_data);
- }
- else
- {
- nread = read(fid, up->buf, sizeof up->buf);
- if (close(fid) < 0 || nread <= 0)
- goto oops;
- }
- for (stored = 4; stored <= 8; stored *= 2) {
- int ttisstdcnt;
- int ttisgmtcnt;
-
- ttisstdcnt = (int) detzcode(up->tzhead.tzh_ttisstdcnt);
- ttisgmtcnt = (int) detzcode(up->tzhead.tzh_ttisgmtcnt);
- sp->leapcnt = (int) detzcode(up->tzhead.tzh_leapcnt);
- sp->timecnt = (int) detzcode(up->tzhead.tzh_timecnt);
- sp->typecnt = (int) detzcode(up->tzhead.tzh_typecnt);
- sp->charcnt = (int) detzcode(up->tzhead.tzh_charcnt);
- p = up->tzhead.tzh_charcnt + sizeof up->tzhead.tzh_charcnt;
- if (sp->leapcnt < 0 || sp->leapcnt > TZ_MAX_LEAPS ||
- sp->typecnt <= 0 || sp->typecnt > TZ_MAX_TYPES ||
- sp->timecnt < 0 || sp->timecnt > TZ_MAX_TIMES ||
- sp->charcnt < 0 || sp->charcnt > TZ_MAX_CHARS ||
- (ttisstdcnt != sp->typecnt && ttisstdcnt != 0) ||
- (ttisgmtcnt != sp->typecnt && ttisgmtcnt != 0))
- goto oops;
- if (nread - (p - up->buf) <
- sp->timecnt * stored + /* ats */
- sp->timecnt + /* types */
- sp->typecnt * 6 + /* ttinfos */
- sp->charcnt + /* chars */
- sp->leapcnt * (stored + 4) + /* lsinfos */
- ttisstdcnt + /* ttisstds */
- ttisgmtcnt) /* ttisgmts */
- goto oops;
- for (i = 0; i < sp->timecnt; ++i) {
- sp->ats[i] = (time_t)((stored == 4) ?
- detzcode(p) : detzcode64(p));
- p += stored;
- }
- for (i = 0; i < sp->timecnt; ++i) {
- sp->types[i] = (unsigned char) *p++;
- if (sp->types[i] >= sp->typecnt)
- goto oops;
- }
- for (i = 0; i < sp->typecnt; ++i) {
- struct ttinfo * ttisp;
-
- ttisp = &sp->ttis[i];
- ttisp->tt_gmtoff = detzcode(p);
- p += 4;
- ttisp->tt_isdst = (unsigned char) *p++;
- if (ttisp->tt_isdst != 0 && ttisp->tt_isdst != 1)
- goto oops;
- ttisp->tt_abbrind = (unsigned char) *p++;
- if (ttisp->tt_abbrind < 0 ||
- ttisp->tt_abbrind > sp->charcnt)
- goto oops;
- }
- for (i = 0; i < sp->charcnt; ++i)
- sp->chars[i] = *p++;
- sp->chars[i] = '\0'; /* ensure '\0' at end */
- for (i = 0; i < sp->leapcnt; ++i) {
- struct lsinfo * lsisp;
-
- lsisp = &sp->lsis[i];
- lsisp->ls_trans = (time_t)((stored == 4) ?
- detzcode(p) : detzcode64(p));
- p += stored;
- lsisp->ls_corr = detzcode(p);
- p += 4;
- }
- for (i = 0; i < sp->typecnt; ++i) {
- struct ttinfo * ttisp;
-
- ttisp = &sp->ttis[i];
- if (ttisstdcnt == 0)
- ttisp->tt_ttisstd = FALSE;
- else {
- ttisp->tt_ttisstd = *p++;
- if (ttisp->tt_ttisstd != TRUE &&
- ttisp->tt_ttisstd != FALSE)
- goto oops;
- }
- }
- for (i = 0; i < sp->typecnt; ++i) {
- struct ttinfo * ttisp;
-
- ttisp = &sp->ttis[i];
- if (ttisgmtcnt == 0)
- ttisp->tt_ttisgmt = FALSE;
- else {
- ttisp->tt_ttisgmt = *p++;
- if (ttisp->tt_ttisgmt != TRUE &&
- ttisp->tt_ttisgmt != FALSE)
- goto oops;
- }
- }
- /*
- ** Out-of-sort ats should mean we're running on a
- ** signed time_t system but using a data file with
- ** unsigned values (or vice versa).
- */
- for (i = 0; i < sp->timecnt - 2; ++i)
- if (sp->ats[i] > sp->ats[i + 1]) {
- ++i;
- if (TYPE_SIGNED(time_t)) {
- /*
- ** Ignore the end (easy).
- */
- sp->timecnt = i;
- } else {
- /*
- ** Ignore the beginning (harder).
- */
- int j;
-
- for (j = 0; j + i < sp->timecnt; ++j) {
- sp->ats[j] = sp->ats[j + i];
- sp->types[j] = sp->types[j + i];
- }
- sp->timecnt = j;
- }
- break;
- }
- /*
- ** If this is an old file, we're done.
- */
- if (up->tzhead.tzh_version[0] == '\0')
- break;
- nread -= p - up->buf;
- for (i = 0; i < nread; ++i)
- up->buf[i] = p[i];
- /*
- ** If this is a narrow integer time_t system, we're done.
- */
- if (stored >= (int) sizeof(time_t)
-/* CONSTCOND */
- && TYPE_INTEGRAL(time_t))
- break;
- }
- if (doextend && nread > 2 &&
- up->buf[0] == '\n' && up->buf[nread - 1] == '\n' &&
- sp->typecnt + 2 <= TZ_MAX_TYPES) {
- struct __state ts;
- int result;
-
- up->buf[nread - 1] = '\0';
- result = tzparse(&ts, &up->buf[1], FALSE);
- if (result == 0 && ts.typecnt == 2 &&
- sp->charcnt + ts.charcnt <= TZ_MAX_CHARS) {
- for (i = 0; i < 2; ++i)
- ts.ttis[i].tt_abbrind +=
- sp->charcnt;
- for (i = 0; i < ts.charcnt; ++i)
- sp->chars[sp->charcnt++] =
- ts.chars[i];
- i = 0;
- while (i < ts.timecnt &&
- ts.ats[i] <=
- sp->ats[sp->timecnt - 1])
- ++i;
- while (i < ts.timecnt &&
- sp->timecnt < TZ_MAX_TIMES) {
- sp->ats[sp->timecnt] =
- ts.ats[i];
- sp->types[sp->timecnt] =
- sp->typecnt +
- ts.types[i];
- ++sp->timecnt;
- ++i;
- }
- sp->ttis[sp->typecnt++] = ts.ttis[0];
- sp->ttis[sp->typecnt++] = ts.ttis[1];
- }
- }
- if (sp->timecnt > 1) {
- for (i = 1; i < sp->timecnt; ++i)
- if (typesequiv(sp, sp->types[i], sp->types[0]) &&
- differ_by_repeat(sp->ats[i], sp->ats[0])) {
- sp->goback = TRUE;
- break;
- }
- for (i = sp->timecnt - 2; i >= 0; --i)
- if (typesequiv(sp, sp->types[sp->timecnt - 1],
- sp->types[i]) &&
- differ_by_repeat(sp->ats[sp->timecnt - 1],
- sp->ats[i])) {
- sp->goahead = TRUE;
- break;
- }
- }
- free(up);
- if (sp == lclptr)
- {
- __gettzinfo ()->__tzrule[0].offset
- = -sp->ttis[1].tt_gmtoff;
- __gettzinfo ()->__tzrule[1].offset
- = -sp->ttis[0].tt_gmtoff;
- }
- return 0;
-oops:
- free(up);
- return -1;
-}
-
-static int
-typesequiv(const timezone_t sp, const int a, const int b)
-{
- int result;
-
- if (sp == NULL ||
- a < 0 || a >= sp->typecnt ||
- b < 0 || b >= sp->typecnt)
- result = FALSE;
- else {
- const struct ttinfo * ap = &sp->ttis[a];
- const struct ttinfo * bp = &sp->ttis[b];
- result = ap->tt_gmtoff == bp->tt_gmtoff &&
- ap->tt_isdst == bp->tt_isdst &&
- ap->tt_ttisstd == bp->tt_ttisstd &&
- ap->tt_ttisgmt == bp->tt_ttisgmt &&
- strcmp(&sp->chars[ap->tt_abbrind],
- &sp->chars[bp->tt_abbrind]) == 0;
- }
- return result;
-}
-
-static const int mon_lengths[2][MONSPERYEAR] = {
- { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
- { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
-};
-
-static const int year_lengths[2] = {
- DAYSPERNYEAR, DAYSPERLYEAR
-};
-
-/*
-** Given a pointer into a time zone string, scan until a character that is not
-** a valid character in a zone name is found. Return a pointer to that
-** character.
-*/
-
-static const char *
-getzname(const char *strp)
-{
- char c;
-
- while ((c = *strp) != '\0' && !is_digit(c) && c != ',' && c != '-' &&
- c != '+')
- ++strp;
- return strp;
-}
-
-/*
-** Given a pointer into an extended time zone string, scan until the ending
-** delimiter of the zone name is located. Return a pointer to the delimiter.
-**
-** As with getzname above, the legal character set is actually quite
-** restricted, with other characters producing undefined results.
-** We don't do any checking here; checking is done later in common-case code.
-*/
-
-static const char *
-getqzname(const char *strp, const int delim)
-{
- int c;
-
- while ((c = *strp) != '\0' && c != delim)
- ++strp;
- return strp;
-}
-
-/*
-** Given a pointer into a time zone string, extract a number from that string.
-** Check that the number is within a specified range; if it is not, return
-** NULL.
-** Otherwise, return a pointer to the first character not part of the number.
-*/
-
-static const char *
-getnum(const char *strp, int *const nump, const int min, const int max)
-{
- char c;
- int num;
-
- if (strp == NULL || !is_digit(c = *strp)) {
- errno = EINVAL;
- return NULL;
- }
- num = 0;
- do {
- num = num * 10 + (c - '0');
- if (num > max) {
- errno = EOVERFLOW;
- return NULL; /* illegal value */
- }
- c = *++strp;
- } while (is_digit(c));
- if (num < min) {
- errno = EINVAL;
- return NULL; /* illegal value */
- }
- *nump = num;
- return strp;
-}
-
-/*
-** Given a pointer into a time zone string, extract a number of seconds,
-** in hh[:mm[:ss]] form, from the string.
-** If any error occurs, return NULL.
-** Otherwise, return a pointer to the first character not part of the number
-** of seconds.
-*/
-
-static const char *
-getsecs(const char *strp, long *const secsp)
-{
- int num;
-
- /*
- ** `HOURSPERDAY * DAYSPERWEEK - 1' allows quasi-Posix rules like
- ** "M10.4.6/26", which does not conform to Posix,
- ** but which specifies the equivalent of
- ** ``02:00 on the first Sunday on or after 23 Oct''.
- */
- strp = getnum(strp, &num, 0, HOURSPERDAY * DAYSPERWEEK - 1);
- if (strp == NULL)
- return NULL;
- *secsp = num * (long) SECSPERHOUR;
- if (*strp == ':') {
- ++strp;
- strp = getnum(strp, &num, 0, MINSPERHOUR - 1);
- if (strp == NULL)
- return NULL;
- *secsp += num * SECSPERMIN;
- if (*strp == ':') {
- ++strp;
- /* `SECSPERMIN' allows for leap seconds. */
- strp = getnum(strp, &num, 0, SECSPERMIN);
- if (strp == NULL)
- return NULL;
- *secsp += num;
- }
- }
- return strp;
-}
-
-/*
-** Given a pointer into a time zone string, extract an offset, in
-** [+-]hh[:mm[:ss]] form, from the string.
-** If any error occurs, return NULL.
-** Otherwise, return a pointer to the first character not part of the time.
-*/
-
-static const char *
-getoffset(const char *strp, long *const offsetp)
-{
- int neg = 0;
-
- if (*strp == '-') {
- neg = 1;
- ++strp;
- } else if (*strp == '+')
- ++strp;
- strp = getsecs(strp, offsetp);
- if (strp == NULL)
- return NULL; /* illegal time */
- if (neg)
- *offsetp = -*offsetp;
- return strp;
-}
-
-/*
-** Given a pointer into a time zone string, extract a rule in the form
-** date[/time]. See POSIX section 8 for the format of "date" and "time".
-** If a valid rule is not found, return NULL.
-** Otherwise, return a pointer to the first character not part of the rule.
-*/
-
-static const char *
-getrule(const char *strp, struct rule *const rulep)
-{
- if (*strp == 'J') {
- /*
- ** Julian day.
- */
- rulep->r_type = JULIAN_DAY;
- ++strp;
- strp = getnum(strp, &rulep->r_day, 1, DAYSPERNYEAR);
- } else if (*strp == 'M') {
- /*
- ** Month, week, day.
- */
- rulep->r_type = MONTH_NTH_DAY_OF_WEEK;
- ++strp;
- strp = getnum(strp, &rulep->r_mon, 1, MONSPERYEAR);
- if (strp == NULL)
- return NULL;
- if (*strp++ != '.')
- return NULL;
- strp = getnum(strp, &rulep->r_week, 1, 5);
- if (strp == NULL)
- return NULL;
- if (*strp++ != '.')
- return NULL;
- strp = getnum(strp, &rulep->r_day, 0, DAYSPERWEEK - 1);
- } else if (is_digit(*strp)) {
- /*
- ** Day of year.
- */
- rulep->r_type = DAY_OF_YEAR;
- strp = getnum(strp, &rulep->r_day, 0, DAYSPERLYEAR - 1);
- } else return NULL; /* invalid format */
- if (strp == NULL)
- return NULL;
- if (*strp == '/') {
- /*
- ** Time specified.
- */
- ++strp;
- strp = getsecs(strp, &rulep->r_time);
- } else rulep->r_time = 2 * SECSPERHOUR; /* default = 2:00:00 */
- return strp;
-}
-
-/*
-** Given the Epoch-relative time of January 1, 00:00:00 UTC, in a year, the
-** year, a rule, and the offset from UTC at the time that rule takes effect,
-** calculate the Epoch-relative time that rule takes effect.
-*/
-
-static time_t
-transtime(const time_t janfirst, const int year, const struct rule *const rulep,
- const long offset)
-{
- int leapyear;
- time_t value;
- int i;
- int d, m1, yy0, yy1, yy2, dow;
-
- INITIALIZE(value);
- leapyear = isleap(year);
- switch (rulep->r_type) {
-
- case JULIAN_DAY:
- /*
- ** Jn - Julian day, 1 == January 1, 60 == March 1 even in leap
- ** years.
- ** In non-leap years, or if the day number is 59 or less, just
- ** add SECSPERDAY times the day number-1 to the time of
- ** January 1, midnight, to get the day.
- */
- value = (time_t)(janfirst + (rulep->r_day - 1) * SECSPERDAY);
- if (leapyear && rulep->r_day >= 60)
- value += SECSPERDAY;
- break;
-
- case DAY_OF_YEAR:
- /*
- ** n - day of year.
- ** Just add SECSPERDAY times the day number to the time of
- ** January 1, midnight, to get the day.
- */
- value = (time_t)(janfirst + rulep->r_day * SECSPERDAY);
- break;
-
- case MONTH_NTH_DAY_OF_WEEK:
- /*
- ** Mm.n.d - nth "dth day" of month m.
- */
- value = janfirst;
- for (i = 0; i < rulep->r_mon - 1; ++i)
- value += (time_t)(mon_lengths[leapyear][i] * SECSPERDAY);
-
- /*
- ** Use Zeller's Congruence to get day-of-week of first day of
- ** month.
- */
- m1 = (rulep->r_mon + 9) % 12 + 1;
- yy0 = (rulep->r_mon <= 2) ? (year - 1) : year;
- yy1 = yy0 / 100;
- yy2 = yy0 % 100;
- dow = ((26 * m1 - 2) / 10 +
- 1 + yy2 + yy2 / 4 + yy1 / 4 - 2 * yy1) % 7;
- if (dow < 0)
- dow += DAYSPERWEEK;
-
- /*
- ** "dow" is the day-of-week of the first day of the month. Get
- ** the day-of-month (zero-origin) of the first "dow" day of the
- ** month.
- */
- d = rulep->r_day - dow;
- if (d < 0)
- d += DAYSPERWEEK;
- for (i = 1; i < rulep->r_week; ++i) {
- if (d + DAYSPERWEEK >=
- mon_lengths[leapyear][rulep->r_mon - 1])
- break;
- d += DAYSPERWEEK;
- }
-
- /*
- ** "d" is the day-of-month (zero-origin) of the day we want.
- */
- value += (time_t)(d * SECSPERDAY);
- break;
- }
-
- /*
- ** "value" is the Epoch-relative time of 00:00:00 UTC on the day in
- ** question. To get the Epoch-relative time of the specified local
- ** time on that day, add the transition time and the current offset
- ** from UTC.
- */
- return (time_t)(value + rulep->r_time + offset);
-}
-
-/*
-** Given a POSIX section 8-style TZ string, fill in the rule tables as
-** appropriate.
-*/
-
-static int
-tzparse(timezone_t sp, const char *name, const int lastditch)
-{
- const char * stdname;
- const char * dstname;
- size_t stdlen;
- size_t dstlen;
- long stdoffset;
- long dstoffset;
- time_t * atp;
- unsigned char * typep;
- char * cp;
- int load_result;
-
- INITIALIZE(dstname);
- stdname = name;
- if (lastditch) {
- stdlen = strlen(name); /* length of standard zone name */
- name += stdlen;
- if (stdlen >= sizeof sp->chars)
- stdlen = (sizeof sp->chars) - 1;
- stdoffset = 0;
- } else {
- if (*name == '<') {
- name++;
- stdname = name;
- name = getqzname(name, '>');
- if (*name != '>')
- return (-1);
- stdlen = name - stdname;
- name++;
- } else {
- name = getzname(name);
- stdlen = name - stdname;
- }
- if (*name == '\0')
- return -1;
- name = getoffset(name, &stdoffset);
- if (name == NULL)
- return -1;
- }
- load_result = tzload(sp, TZDEFRULES, FALSE);
- if (load_result != 0)
- sp->leapcnt = 0; /* so, we're off a little */
- if (*name != '\0') {
- if (*name == '<') {
- dstname = ++name;
- name = getqzname(name, '>');
- if (*name != '>')
- return -1;
- dstlen = name - dstname;
- name++;
- } else {
- dstname = name;
- name = getzname(name);
- dstlen = name - dstname; /* length of DST zone name */
- }
- if (*name != '\0' && *name != ',' && *name != ';') {
- name = getoffset(name, &dstoffset);
- if (name == NULL)
- return -1;
- } else dstoffset = stdoffset - SECSPERHOUR;
- if (*name == '\0' && load_result != 0)
- name = TZDEFRULESTRING;
- if (*name == ',' || *name == ';') {
- struct rule start;
- struct rule end;
- int year;
- time_t janfirst;
- time_t starttime;
- time_t endtime;
-
- ++name;
- if ((name = getrule(name, &start)) == NULL)
- return -1;
- if (*name++ != ',')
- return -1;
- if ((name = getrule(name, &end)) == NULL)
- return -1;
- if (*name != '\0')
- return -1;
- sp->typecnt = 2; /* standard time and DST */
- /*
- ** Two transitions per year, from EPOCH_YEAR forward.
- */
- memset(sp->ttis, 0, sizeof(sp->ttis));
- sp->ttis[0].tt_gmtoff = -dstoffset;
- sp->ttis[0].tt_isdst = 1;
- sp->ttis[0].tt_abbrind = (int)(stdlen + 1);
- sp->ttis[1].tt_gmtoff = -stdoffset;
- sp->ttis[1].tt_isdst = 0;
- sp->ttis[1].tt_abbrind = 0;
- atp = sp->ats;
- typep = sp->types;
- janfirst = 0;
- sp->timecnt = 0;
- for (year = EPOCH_YEAR;
- sp->timecnt + 2 <= TZ_MAX_TIMES;
- ++year) {
- time_t newfirst;
-
- starttime = transtime(janfirst, year, &start,
- stdoffset);
- endtime = transtime(janfirst, year, &end,
- dstoffset);
- if (starttime > endtime) {
- *atp++ = endtime;
- *typep++ = 1; /* DST ends */
- *atp++ = starttime;
- *typep++ = 0; /* DST begins */
- } else {
- *atp++ = starttime;
- *typep++ = 0; /* DST begins */
- *atp++ = endtime;
- *typep++ = 1; /* DST ends */
- }
- sp->timecnt += 2;
- newfirst = janfirst;
- newfirst += (time_t)
- (year_lengths[isleap(year)] * SECSPERDAY);
- if (newfirst <= janfirst)
- break;
- janfirst = newfirst;
- }
- if (sp == lclptr)
- {
- __gettzinfo ()->__tzrule[0].offset
- = -sp->ttis[1].tt_gmtoff;
- __gettzinfo ()->__tzrule[1].offset
- = -sp->ttis[0].tt_gmtoff;
- }
- } else {
- long theirstdoffset;
- long theirdstoffset;
- long theiroffset;
- int isdst;
- int i;
- int j;
-
- if (*name != '\0')
- return -1;
- /*
- ** Initial values of theirstdoffset and theirdstoffset.
- */
- theirstdoffset = 0;
- for (i = 0; i < sp->timecnt; ++i) {
- j = sp->types[i];
- if (!sp->ttis[j].tt_isdst) {
- theirstdoffset =
- -sp->ttis[j].tt_gmtoff;
- break;
- }
- }
- theirdstoffset = 0;
- for (i = 0; i < sp->timecnt; ++i) {
- j = sp->types[i];
- if (sp->ttis[j].tt_isdst) {
- theirdstoffset =
- -sp->ttis[j].tt_gmtoff;
- break;
- }
- }
- /*
- ** Initially we're assumed to be in standard time.
- */
- isdst = FALSE;
- theiroffset = theirstdoffset;
- /*
- ** Now juggle transition times and types
- ** tracking offsets as you do.
- */
- for (i = 0; i < sp->timecnt; ++i) {
- j = sp->types[i];
- sp->types[i] = sp->ttis[j].tt_isdst;
- if (sp->ttis[j].tt_ttisgmt) {
- /* No adjustment to transition time */
- } else {
- /*
- ** If summer time is in effect, and the
- ** transition time was not specified as
- ** standard time, add the summer time
- ** offset to the transition time;
- ** otherwise, add the standard time
- ** offset to the transition time.
- */
- /*
- ** Transitions from DST to DDST
- ** will effectively disappear since
- ** POSIX provides for only one DST
- ** offset.
- */
- if (isdst && !sp->ttis[j].tt_ttisstd) {
- sp->ats[i] += (time_t)
- (dstoffset - theirdstoffset);
- } else {
- sp->ats[i] += (time_t)
- (stdoffset - theirstdoffset);
- }
- }
- theiroffset = -sp->ttis[j].tt_gmtoff;
- if (!sp->ttis[j].tt_isdst)
- theirstdoffset = theiroffset;
- else theirdstoffset = theiroffset;
- }
- /*
- ** Finally, fill in ttis.
- ** ttisstd and ttisgmt need not be handled
- */
- memset(sp->ttis, 0, sizeof(sp->ttis));
- sp->ttis[0].tt_gmtoff = -stdoffset;
- sp->ttis[0].tt_isdst = FALSE;
- sp->ttis[0].tt_abbrind = 0;
- sp->ttis[1].tt_gmtoff = -dstoffset;
- sp->ttis[1].tt_isdst = TRUE;
- sp->ttis[1].tt_abbrind = (int)(stdlen + 1);
- sp->typecnt = 2;
- if (sp == lclptr)
- {
- __gettzinfo ()->__tzrule[0].offset
- = -sp->ttis[0].tt_gmtoff;
- __gettzinfo ()->__tzrule[1].offset
- = -sp->ttis[1].tt_gmtoff;
- }
- }
- } else {
- dstlen = 0;
- sp->typecnt = 1; /* only standard time */
- sp->timecnt = 0;
- memset(sp->ttis, 0, sizeof(sp->ttis));
- sp->ttis[0].tt_gmtoff = -stdoffset;
- sp->ttis[0].tt_isdst = 0;
- sp->ttis[0].tt_abbrind = 0;
- if (sp == lclptr)
- {
- __gettzinfo ()->__tzrule[0].offset = -sp->ttis[0].tt_gmtoff;
- __gettzinfo ()->__tzrule[1].offset = -sp->ttis[0].tt_gmtoff;
- }
- }
- sp->charcnt = (int)(stdlen + 1);
- if (dstlen != 0)
- sp->charcnt += (int)(dstlen + 1);
- if ((size_t) sp->charcnt > sizeof sp->chars)
- return -1;
- cp = sp->chars;
- (void) strncpy(cp, stdname, stdlen);
- cp += stdlen;
- *cp++ = '\0';
- if (dstlen != 0) {
- (void) strncpy(cp, dstname, dstlen);
- *(cp + dstlen) = '\0';
- }
- return 0;
-}
-
-static void
-gmtload(timezone_t sp)
-{
- if (tzload(sp, gmt, TRUE) != 0)
- (void) tzparse(sp, gmt, TRUE);
-}
-
-#ifndef STD_INSPIRED
-/*
-** A non-static declaration of tzsetwall in a system header file
-** may cause a warning about this upcoming static declaration...
-*/
-static
-#endif /* !defined STD_INSPIRED */
-void
-tzsetwall (void)
-{
- if (lcl_is_set == lcl_setting)
- return;
- lcl_is_set = lcl_setting;
-
- if (lclptr == NULL) {
- save_errno save;
- lclptr = (timezone_t) calloc(1, sizeof *lclptr);
- if (lclptr == NULL) {
- settzname(); /* all we can do */
- return;
- }
- }
-#if defined (__CYGWIN__)
- {
- TIME_ZONE_INFORMATION tz;
- char buf[BUFSIZ];
- char *cp, *dst;
- wchar_t *src;
- div_t d;
- GetTimeZoneInformation(&tz);
- dst = cp = buf;
- for (src = tz.StandardName; *src; src++)
- if (isupper(*src)) *dst++ = *src;
- if ((dst - cp) < 3)
- {
- /* In non-english Windows, converted tz.StandardName
- may not contain a valid standard timezone name. */
- strcpy(cp, wildabbr);
- cp += strlen(wildabbr);
- }
- else
- cp = dst;
- d = div(tz.Bias+tz.StandardBias, 60);
- sprintf(cp, "%d", d.quot);
- if (d.rem)
- sprintf(cp=strchr(cp, 0), ":%d", abs(d.rem));
- if(tz.StandardDate.wMonth) {
- cp = strchr(cp, 0);
- dst = cp;
- for (src = tz.DaylightName; *src; src++)
- if (isupper(*src)) *dst++ = *src;
- if ((dst - cp) < 3)
- {
- /* In non-english Windows, converted tz.DaylightName
- may not contain a valid daylight timezone name. */
- strcpy(cp, wildabbr);
- cp += strlen(wildabbr);
- }
- else
- cp = dst;
- d = div(tz.Bias+tz.DaylightBias, 60);
- sprintf(cp, "%d", d.quot);
- if (d.rem)
- sprintf(cp=strchr(cp, 0), ":%d", abs(d.rem));
- cp = strchr(cp, 0);
- sprintf(cp=strchr(cp, 0), ",M%d.%d.%d/%d",
- tz.DaylightDate.wMonth,
- tz.DaylightDate.wDay,
- tz.DaylightDate.wDayOfWeek,
- tz.DaylightDate.wHour);
- if (tz.DaylightDate.wMinute || tz.DaylightDate.wSecond)
- sprintf(cp=strchr(cp, 0), ":%d", tz.DaylightDate.wMinute);
- if (tz.DaylightDate.wSecond)
- sprintf(cp=strchr(cp, 0), ":%d", tz.DaylightDate.wSecond);
- cp = strchr(cp, 0);
- sprintf(cp=strchr(cp, 0), ",M%d.%d.%d/%d",
- tz.StandardDate.wMonth,
- tz.StandardDate.wDay,
- tz.StandardDate.wDayOfWeek,
- tz.StandardDate.wHour);
- if (tz.StandardDate.wMinute || tz.StandardDate.wSecond)
- sprintf(cp=strchr(cp, 0), ":%d", tz.StandardDate.wMinute);
- if (tz.StandardDate.wSecond)
- sprintf(cp=strchr(cp, 0), ":%d", tz.StandardDate.wSecond);
- }
- /* printf("TZ deduced as `%s'\n", buf); */
- if (tzparse(lclptr, buf, FALSE) == 0) {
- settzname();
- lcl_is_set = lcl_from_default;
- strlcpy(lcl_TZname, buf, sizeof (lcl_TZname));
-#if 0
- /* Huh? POSIX doesn't mention anywhere that tzset should
- set $TZ. That's not right. */
- setenv("TZ", lcl_TZname, 1);
-#endif
- return;
- }
- }
-#endif
- if (tzload(lclptr, NULL, TRUE) != 0)
- gmtload(lclptr);
- settzname();
-}
-
-static NO_COPY muto tzset_guard;
-
-#ifndef STD_INSPIRED
-/*
-** A non-static declaration of tzsetwall in a system header file
-** may cause a warning about this upcoming static declaration...
-*/
-static
-#endif /* !defined STD_INSPIRED */
-void
-tzset_unlocked(void)
-{
- const char * name;
-
- name = getenv("TZ");
- if (name == NULL) {
- if (lcl_is_set != lcl_from_default)
- tzsetwall();
- return;
- }
-
- if (lcl_is_set > 0 && strcmp(lcl_TZname, name) == 0)
- return;
- lcl_is_set = (strlen(name) < sizeof (lcl_TZname)) ? lcl_from_environment : lcl_unset;
- if (lcl_is_set != lcl_unset)
- (void)strlcpy(lcl_TZname, name, sizeof (lcl_TZname));
-
- if (lclptr == NULL) {
- save_errno save;
- lclptr = (timezone_t) calloc(1, sizeof *lclptr);
- if (lclptr == NULL) {
- settzname(); /* all we can do */
- return;
- }
- }
- if (*name == '\0') {
- /*
- ** User wants it fast rather than right.
- */
- lclptr->leapcnt = 0; /* so, we're off a little */
- lclptr->timecnt = 0;
- lclptr->typecnt = 0;
- lclptr->ttis[0].tt_isdst = 0;
- lclptr->ttis[0].tt_gmtoff = 0;
- lclptr->ttis[0].tt_abbrind = 0;
- (void) strlcpy(lclptr->chars, gmt, sizeof(lclptr->chars));
- } else if (tzload(lclptr, name, TRUE) != 0)
- if (name[0] == ':' || tzparse(lclptr, name, FALSE) != 0)
- (void) gmtload(lclptr);
- settzname();
-}
-
-extern "C" void
-tzset(void)
-{
- tzset_guard.init ("tzset_guard")->acquire ();
- tzset_unlocked();
- tzset_guard.release ();
-}
-
-/*
-** The easy way to behave "as if no library function calls" localtime
-** is to not call it--so we drop its guts into "localsub", which can be
-** freely called. (And no, the PANS doesn't require the above behavior--
-** but it *is* desirable.)
-**
-** The unused offset argument is for the benefit of mktime variants.
-*/
-
-/*ARGSUSED*/
-static struct tm *
-localsub(const timezone_t sp, const time_t * const timep, const long offset,
- struct tm *const tmp)
-{
- const struct ttinfo * ttisp;
- int i;
- struct tm * result;
- const time_t t = *timep;
-
- if ((sp->goback && t < sp->ats[0]) ||
- (sp->goahead && t > sp->ats[sp->timecnt - 1])) {
- time_t newt = t;
- time_t seconds;
- time_t tcycles;
- int_fast64_t icycles;
-
- if (t < sp->ats[0])
- seconds = sp->ats[0] - t;
- else seconds = t - sp->ats[sp->timecnt - 1];
- --seconds;
- tcycles = (time_t)
- (seconds / YEARSPERREPEAT / AVGSECSPERYEAR);
- ++tcycles;
- icycles = tcycles;
- if (tcycles - icycles >= 1 || icycles - tcycles >= 1)
- return NULL;
- seconds = (time_t) icycles;
- seconds *= YEARSPERREPEAT;
- seconds *= AVGSECSPERYEAR;
- if (t < sp->ats[0])
- newt += seconds;
- else newt -= seconds;
- if (newt < sp->ats[0] ||
- newt > sp->ats[sp->timecnt - 1])
- return NULL; /* "cannot happen" */
- result = localsub(sp, &newt, offset, tmp);
- if (result == tmp) {
- time_t newy;
-
- newy = tmp->tm_year;
- if (t < sp->ats[0])
- newy -= (time_t)icycles * YEARSPERREPEAT;
- else newy += (time_t)icycles * YEARSPERREPEAT;
- tmp->tm_year = (int)newy;
- if (tmp->tm_year != newy)
- return NULL;
- }
- return result;
- }
- if (sp->timecnt == 0 || t < sp->ats[0]) {
- i = 0;
- while (sp->ttis[i].tt_isdst)
- if (++i >= sp->typecnt) {
- i = 0;
- break;
- }
- } else {
- int lo = 1;
- int hi = sp->timecnt;
-
- while (lo < hi) {
- int mid = (lo + hi) / 2;
-
- if (t < sp->ats[mid])
- hi = mid;
- else lo = mid + 1;
- }
- i = (int) sp->types[lo - 1];
- }
- ttisp = &sp->ttis[i];
- /*
- ** To get (wrong) behavior that's compatible with System V Release 2.0
- ** you'd replace the statement below with
- ** t += ttisp->tt_gmtoff;
- ** timesub(&t, 0L, sp, tmp);
- */
- result = timesub(sp, &t, ttisp->tt_gmtoff, tmp);
- tmp->tm_isdst = ttisp->tt_isdst;
- if (sp == lclptr)
- tzname[tmp->tm_isdst] = &sp->chars[ttisp->tt_abbrind];
-#ifdef TM_ZONE
- if (CYGWIN_VERSION_CHECK_FOR_EXTRA_TM_MEMBERS)
- tmp->TM_ZONE = &sp->chars[ttisp->tt_abbrind];
-#endif /* defined TM_ZONE */
- return result;
-}
-
-/*
-** Re-entrant version of localtime.
-*/
-extern "C" struct tm *
-localtime_r(const time_t *__restrict timep, struct tm *__restrict tmp)
-{
- tzset_guard.init ("tzset_guard")->acquire ();
- tzset_unlocked();
- tmp = localsub(lclptr, timep, 0L, tmp);
- tzset_guard.release ();
- if (tmp == NULL)
- errno = EOVERFLOW;
- return tmp;
-}
-
-extern "C" struct tm *
-localtime(const time_t *const timep)
-{
- return localtime_r(timep, &tm);
-}
-
-/*
-** gmtsub is to gmtime as localsub is to localtime.
-*/
-static NO_COPY muto gmt_guard;
-
-static struct tm *
-gmtsub(const timezone_t sp, const time_t *const timep, const long offset,
- struct tm *tmp)
-{
- struct tm * result;
-
- gmt_guard.init ("gmt_guard")->acquire ();
- if (!gmt_is_set) {
- save_errno save;
- gmt_is_set = TRUE;
- gmtptr = (timezone_t) calloc(1, sizeof *gmtptr);
- if (gmtptr != NULL)
- gmtload(gmtptr);
- }
- gmt_guard.release ();
- result = timesub(gmtptr, timep, offset, tmp);
-#ifdef TM_ZONE
- /*
- ** Could get fancy here and deliver something such as
- ** "UTC+xxxx" or "UTC-xxxx" if offset is non-zero,
- ** but this is no time for a treasure hunt.
- */
- if (CYGWIN_VERSION_CHECK_FOR_EXTRA_TM_MEMBERS)
- {
- if (offset != 0)
- tmp->TM_ZONE = wildabbr;
- else {
- if (gmtptr == NULL)
- tmp->TM_ZONE = gmt;
- else tmp->TM_ZONE = gmtptr->chars;
- }
- }
-#endif /* defined TM_ZONE */
- return result;
-}
-
-extern "C" struct tm *
-gmtime(const time_t *const timep)
-{
- struct tm *tmp = gmtsub(NULL, timep, 0L, &tm);
-
- if (tmp == NULL)
- errno = EOVERFLOW;
-
- return tmp;
-}
-
-/*
-** Re-entrant version of gmtime.
-*/
-
-extern "C" struct tm *
-gmtime_r(const time_t *__restrict const timep, struct tm *__restrict tmp)
-{
- tmp = gmtsub(NULL, timep, 0L, tmp);
-
- if (tmp == NULL)
- errno = EOVERFLOW;
-
- return tmp;
-}
-
-#ifdef STD_INSPIRED
-
-extern "C" struct tm *
-offtime(const time_t *const timep, long offset)
-{
- struct tm *tmp = gmtsub(NULL, timep, offset, &tm);
-
- if (tmp == NULL)
- errno = EOVERFLOW;
-
- return tmp;
-}
-
-#endif /* defined STD_INSPIRED */
-
-/*
-** Return the number of leap years through the end of the given year
-** where, to make the math easy, the answer for year zero is defined as zero.
-*/
-
-static int
-leaps_thru_end_of(const int y)
-{
- return (y >= 0) ? (y / 4 - y / 100 + y / 400) :
- -(leaps_thru_end_of(-(y + 1)) + 1);
-}
-
-static struct tm *
-timesub(const timezone_t sp, const time_t *const timep, const long offset,
- struct tm *const tmp)
-{
- const struct lsinfo * lp;
- time_t tdays;
- int idays; /* unsigned would be so 2003 */
- long rem;
- int y;
- const int * ip;
- long corr;
- int hit;
- int i;
-
- corr = 0;
- hit = 0;
- i = (sp == NULL) ? 0 : sp->leapcnt;
- while (--i >= 0) {
- lp = &sp->lsis[i];
- if (*timep >= lp->ls_trans) {
- if (*timep == lp->ls_trans) {
- hit = ((i == 0 && lp->ls_corr > 0) ||
- lp->ls_corr > sp->lsis[i - 1].ls_corr);
- if (hit)
- while (i > 0 &&
- sp->lsis[i].ls_trans ==
- sp->lsis[i - 1].ls_trans + 1 &&
- sp->lsis[i].ls_corr ==
- sp->lsis[i - 1].ls_corr + 1) {
- ++hit;
- --i;
- }
- }
- corr = lp->ls_corr;
- break;
- }
- }
- y = EPOCH_YEAR;
- tdays = (time_t)(*timep / SECSPERDAY);
- rem = (long) (*timep - tdays * SECSPERDAY);
- while (tdays < 0 || tdays >= year_lengths[isleap(y)]) {
- int newy;
- time_t tdelta;
- int idelta;
- int leapdays;
-
- tdelta = tdays / DAYSPERLYEAR;
- idelta = (int) tdelta;
- if (tdelta - idelta >= 1 || idelta - tdelta >= 1)
- return NULL;
- if (idelta == 0)
- idelta = (tdays < 0) ? -1 : 1;
- newy = y;
- if (increment_overflow(&newy, idelta))
- return NULL;
- leapdays = leaps_thru_end_of(newy - 1) -
- leaps_thru_end_of(y - 1);
- tdays -= ((time_t) newy - y) * DAYSPERNYEAR;
- tdays -= leapdays;
- y = newy;
- }
- {
- long seconds;
-
- seconds = tdays * SECSPERDAY + 0.5;
- tdays = (time_t)(seconds / SECSPERDAY);
- rem += (long) (seconds - tdays * SECSPERDAY);
- }
- /*
- ** Given the range, we can now fearlessly cast...
- */
- idays = (int) tdays;
- rem += offset - corr;
- while (rem < 0) {
- rem += SECSPERDAY;
- --idays;
- }
- while (rem >= SECSPERDAY) {
- rem -= SECSPERDAY;
- ++idays;
- }
- while (idays < 0) {
- if (increment_overflow(&y, -1))
- return NULL;
- idays += year_lengths[isleap(y)];
- }
- while (idays >= year_lengths[isleap(y)]) {
- idays -= year_lengths[isleap(y)];
- if (increment_overflow(&y, 1))
- return NULL;
- }
- tmp->tm_year = y;
- if (increment_overflow(&tmp->tm_year, -TM_YEAR_BASE))
- return NULL;
- tmp->tm_yday = idays;
- /*
- ** The "extra" mods below avoid overflow problems.
- */
- tmp->tm_wday = EPOCH_WDAY +
- ((y - EPOCH_YEAR) % DAYSPERWEEK) *
- (DAYSPERNYEAR % DAYSPERWEEK) +
- leaps_thru_end_of(y - 1) -
- leaps_thru_end_of(EPOCH_YEAR - 1) +
- idays;
- tmp->tm_wday %= DAYSPERWEEK;
- if (tmp->tm_wday < 0)
- tmp->tm_wday += DAYSPERWEEK;
- tmp->tm_hour = (int) (rem / SECSPERHOUR);
- rem %= SECSPERHOUR;
- tmp->tm_min = (int) (rem / SECSPERMIN);
- /*
- ** A positive leap second requires a special
- ** representation. This uses "... ??:59:60" et seq.
- */
- tmp->tm_sec = (int) (rem % SECSPERMIN) + hit;
- ip = mon_lengths[isleap(y)];
- for (tmp->tm_mon = 0; idays >= ip[tmp->tm_mon]; ++(tmp->tm_mon))
- idays -= ip[tmp->tm_mon];
- tmp->tm_mday = (int) (idays + 1);
- tmp->tm_isdst = 0;
-#ifdef TM_GMTOFF
- if (CYGWIN_VERSION_CHECK_FOR_EXTRA_TM_MEMBERS)
- tmp->TM_GMTOFF = offset;
-#endif /* defined TM_GMTOFF */
- return tmp;
-}
-
-extern "C" char *
-ctime(const time_t *const timep)
-{
-/*
-** Section 4.12.3.2 of X3.159-1989 requires that
-** The ctime function converts the calendar time pointed to by timer
-** to local time in the form of a string. It is equivalent to
-** asctime(localtime(timer))
-*/
- struct tm *rtm = localtime(timep);
- if (rtm == NULL)
- return NULL;
- return asctime(rtm);
-}
-
-extern "C" char *
-ctime_r(const time_t *const timep, char *buf)
-{
- struct tm mytm, *rtm;
-
- rtm = localtime_r(timep, &mytm);
- if (rtm == NULL)
- return NULL;
- return asctime_r(rtm, buf);
-}
-
-/*
-** Adapted from code provided by Robert Elz, who writes:
-** The "best" way to do mktime I think is based on an idea of Bob
-** Kridle's (so its said...) from a long time ago.
-** It does a binary search of the time_t space. Since time_t's are
-** just 32 bits, its a max of 32 iterations (even at 64 bits it
-** would still be very reasonable).
-*/
-
-#ifndef WRONG
-#define WRONG ((time_t)-1)
-#endif /* !defined WRONG */
-
-/*
-** Simplified normalize logic courtesy Paul Eggert.
-*/
-
-static int
-increment_overflow(int *const ip, int j)
-{
- int i = *ip;
-
- /*
- ** If i >= 0 there can only be overflow if i + j > INT_MAX
- ** or if j > INT_MAX - i; given i >= 0, INT_MAX - i cannot overflow.
- ** If i < 0 there can only be overflow if i + j < INT_MIN
- ** or if j < INT_MIN - i; given i < 0, INT_MIN - i cannot overflow.
- */
- if ((i >= 0) ? (j > INT_MAX - i) : (j < INT_MIN - i))
- return TRUE;
- *ip += j;
- return FALSE;
-}
-
-static int
-long_increment_overflow(long *const lp, int m)
-{
- long l = *lp;
-
- if ((l >= 0) ? (m > LONG_MAX - l) : (m < LONG_MIN - l))
- return TRUE;
- *lp += m;
- return FALSE;
-}
-
-static int
-normalize_overflow(int *const tensptr, int *const unitsptr, const int base)
-{
- int tensdelta;
-
- tensdelta = (*unitsptr >= 0) ?
- (*unitsptr / base) :
- (-1 - (-1 - *unitsptr) / base);
- *unitsptr -= tensdelta * base;
- return increment_overflow(tensptr, tensdelta);
-}
-
-static int
-long_normalize_overflow(long *const tensptr, int *const unitsptr,
- const int base)
-{
- int tensdelta;
-
- tensdelta = (*unitsptr >= 0) ?
- (*unitsptr / base) :
- (-1 - (-1 - *unitsptr) / base);
- *unitsptr -= tensdelta * base;
- return long_increment_overflow(tensptr, tensdelta);
-}
-
-static int
-tmcomp(const struct tm *const atmp, const struct tm *const btmp)
-{
- int result;
-
- if ((result = (atmp->tm_year - btmp->tm_year)) == 0 &&
- (result = (atmp->tm_mon - btmp->tm_mon)) == 0 &&
- (result = (atmp->tm_mday - btmp->tm_mday)) == 0 &&
- (result = (atmp->tm_hour - btmp->tm_hour)) == 0 &&
- (result = (atmp->tm_min - btmp->tm_min)) == 0)
- result = atmp->tm_sec - btmp->tm_sec;
- return result;
-}
-
-static time_t
-time2sub(const timezone_t sp, struct tm *const tmp, subfun_t funcp,
- const long offset, int *const okayp, const int do_norm_secs)
-{
- int dir;
- int i, j;
- int saved_seconds;
- long li;
- time_t lo;
- time_t hi;
-#ifdef NO_ERROR_IN_DST_GAP
- time_t ilo;
-#endif
- long y;
- time_t newt;
- time_t t;
- struct tm yourtm, mytm;
-
- *okayp = FALSE;
- yourtm = *tmp;
-#ifdef NO_ERROR_IN_DST_GAP
-again:
-#endif
- if (do_norm_secs) {
- if (normalize_overflow(&yourtm.tm_min, &yourtm.tm_sec,
- SECSPERMIN))
- goto overflow;
- }
- if (normalize_overflow(&yourtm.tm_hour, &yourtm.tm_min, MINSPERHOUR))
- goto overflow;
- if (normalize_overflow(&yourtm.tm_mday, &yourtm.tm_hour, HOURSPERDAY))
- goto overflow;
- y = yourtm.tm_year;
- if (long_normalize_overflow(&y, &yourtm.tm_mon, MONSPERYEAR))
- goto overflow;
- /*
- ** Turn y into an actual year number for now.
- ** It is converted back to an offset from TM_YEAR_BASE later.
- */
- if (long_increment_overflow(&y, TM_YEAR_BASE))
- goto overflow;
- while (yourtm.tm_mday <= 0) {
- if (long_increment_overflow(&y, -1))
- goto overflow;
- li = y + (1 < yourtm.tm_mon);
- yourtm.tm_mday += year_lengths[isleap(li)];
- }
- while (yourtm.tm_mday > DAYSPERLYEAR) {
- li = y + (1 < yourtm.tm_mon);
- yourtm.tm_mday -= year_lengths[isleap(li)];
- if (long_increment_overflow(&y, 1))
- goto overflow;
- }
- for ( ; ; ) {
- i = mon_lengths[isleap(y)][yourtm.tm_mon];
- if (yourtm.tm_mday <= i)
- break;
- yourtm.tm_mday -= i;
- if (++yourtm.tm_mon >= MONSPERYEAR) {
- yourtm.tm_mon = 0;
- if (long_increment_overflow(&y, 1))
- goto overflow;
- }
- }
- if (long_increment_overflow(&y, -TM_YEAR_BASE))
- goto overflow;
- yourtm.tm_year = (int)y;
- if (yourtm.tm_year != y)
- goto overflow;
- if (yourtm.tm_sec >= 0 && yourtm.tm_sec < SECSPERMIN)
- saved_seconds = 0;
- else if (y + TM_YEAR_BASE < EPOCH_YEAR) {
- /*
- ** We can't set tm_sec to 0, because that might push the
- ** time below the minimum representable time.
- ** Set tm_sec to 59 instead.
- ** This assumes that the minimum representable time is
- ** not in the same minute that a leap second was deleted from,
- ** which is a safer assumption than using 58 would be.
- */
- if (increment_overflow(&yourtm.tm_sec, 1 - SECSPERMIN))
- goto overflow;
- saved_seconds = yourtm.tm_sec;
- yourtm.tm_sec = SECSPERMIN - 1;
- } else {
- saved_seconds = yourtm.tm_sec;
- yourtm.tm_sec = 0;
- }
- /*
- ** Do a binary search (this works whatever time_t's type is).
- */
- /* LINTED const not */
- if (!TYPE_SIGNED(time_t)) {
- lo = 0;
- hi = lo - 1;
- /* LINTED const not */
- } else {
- lo = 1;
- for (i = 0; i < (int) TYPE_BIT(time_t) - 1; ++i)
- lo *= 2;
- hi = -(lo + 1);
- }
-#ifdef NO_ERROR_IN_DST_GAP
- ilo = lo;
-#endif
- for ( ; ; ) {
- t = lo / 2 + hi / 2;
- if (t < lo)
- t = lo;
- else if (t > hi)
- t = hi;
- if ((*funcp)(sp, &t, offset, &mytm) == NULL) {
- /*
- ** Assume that t is too extreme to be represented in
- ** a struct tm; arrange things so that it is less
- ** extreme on the next pass.
- */
- dir = (t > 0) ? 1 : -1;
- } else dir = tmcomp(&mytm, &yourtm);
- if (dir != 0) {
- if (t == lo) {
- ++t;
- if (t <= lo)
- goto overflow;
- ++lo;
- } else if (t == hi) {
- --t;
- if (t >= hi)
- goto overflow;
- --hi;
- }
-#ifdef NO_ERROR_IN_DST_GAP
- if (ilo != lo && lo - 1 == hi && yourtm.tm_isdst < 0 &&
- do_norm_secs) {
- for (i = sp->typecnt - 1; i >= 0; --i) {
- for (j = sp->typecnt - 1; j >= 0; --j) {
- time_t off;
- if (sp->ttis[j].tt_isdst ==
- sp->ttis[i].tt_isdst)
- continue;
- off = sp->ttis[j].tt_gmtoff -
- sp->ttis[i].tt_gmtoff;
- yourtm.tm_sec += off < 0 ?
- -off : off;
- goto again;
- }
- }
- }
-#endif
- if (lo > hi)
- goto invalid;
- if (dir > 0)
- hi = t;
- else lo = t;
- continue;
- }
- if (yourtm.tm_isdst < 0 || mytm.tm_isdst == yourtm.tm_isdst)
- break;
- /*
- ** Right time, wrong type.
- ** Hunt for right time, right type.
- ** It's okay to guess wrong since the guess
- ** gets checked.
- */
- if (sp == NULL)
- goto invalid;
- for (i = sp->typecnt - 1; i >= 0; --i) {
- if (sp->ttis[i].tt_isdst != yourtm.tm_isdst)
- continue;
- for (j = sp->typecnt - 1; j >= 0; --j) {
- if (sp->ttis[j].tt_isdst == yourtm.tm_isdst)
- continue;
- newt = (time_t)(t + sp->ttis[j].tt_gmtoff -
- sp->ttis[i].tt_gmtoff);
- if ((*funcp)(sp, &newt, offset, &mytm) == NULL)
- continue;
- if (tmcomp(&mytm, &yourtm) != 0)
- continue;
- if (mytm.tm_isdst != yourtm.tm_isdst)
- continue;
- /*
- ** We have a match.
- */
- t = newt;
- goto label;
- }
- }
- goto invalid;
- }
-label:
- newt = t + saved_seconds;
- if ((newt < t) != (saved_seconds < 0))
- goto overflow;
- t = newt;
- if ((*funcp)(sp, &t, offset, tmp)) {
- *okayp = TRUE;
- return t;
- }
-overflow:
- errno = EOVERFLOW;
- return WRONG;
-invalid:
- errno = EINVAL;
- return WRONG;
-}
-
-static time_t
-time2(const timezone_t sp, struct tm *const tmp, subfun_t funcp,
- const long offset, int *const okayp)
-{
- time_t t;
-
- /*
- ** First try without normalization of seconds
- ** (in case tm_sec contains a value associated with a leap second).
- ** If that fails, try with normalization of seconds.
- */
- t = time2sub(sp, tmp, funcp, offset, okayp, FALSE);
- return *okayp ? t : time2sub(sp, tmp, funcp, offset, okayp, TRUE);
-}
-
-static time_t
-time1(const timezone_t sp, struct tm *const tmp, subfun_t funcp,
- const long offset)
-{
- time_t t;
- int samei, otheri;
- int sameind, otherind;
- int i;
- int nseen;
- int seen[TZ_MAX_TYPES];
- int types[TZ_MAX_TYPES];
- int okay;
-
- if (tmp == NULL) {
- errno = EINVAL;
- return WRONG;
- }
- if (tmp->tm_isdst > 1)
- tmp->tm_isdst = 1;
- t = time2(sp, tmp, funcp, offset, &okay);
-#ifdef PCTS
- /*
- ** PCTS code courtesy Grant Sullivan.
- */
- if (okay)
- return t;
- if (tmp->tm_isdst < 0)
- tmp->tm_isdst = 0; /* reset to std and try again */
-#endif /* defined PCTS */
-#ifndef PCTS
- if (okay || tmp->tm_isdst < 0)
- return t;
-#endif /* !defined PCTS */
- /*
- ** We're supposed to assume that somebody took a time of one type
- ** and did some math on it that yielded a "struct tm" that's bad.
- ** We try to divine the type they started from and adjust to the
- ** type they need.
- */
- if (sp == NULL) {
- errno = EINVAL;
- return WRONG;
- }
- for (i = 0; i < sp->typecnt; ++i)
- seen[i] = FALSE;
- nseen = 0;
- for (i = sp->timecnt - 1; i >= 0; --i)
- if (!seen[sp->types[i]]) {
- seen[sp->types[i]] = TRUE;
- types[nseen++] = sp->types[i];
- }
- for (sameind = 0; sameind < nseen; ++sameind) {
- samei = types[sameind];
- if (sp->ttis[samei].tt_isdst != tmp->tm_isdst)
- continue;
- for (otherind = 0; otherind < nseen; ++otherind) {
- otheri = types[otherind];
- if (sp->ttis[otheri].tt_isdst == tmp->tm_isdst)
- continue;
- tmp->tm_sec += (int)(sp->ttis[otheri].tt_gmtoff -
- sp->ttis[samei].tt_gmtoff);
- tmp->tm_isdst = !tmp->tm_isdst;
- t = time2(sp, tmp, funcp, offset, &okay);
- if (okay)
- return t;
- tmp->tm_sec -= (int)(sp->ttis[otheri].tt_gmtoff -
- sp->ttis[samei].tt_gmtoff);
- tmp->tm_isdst = !tmp->tm_isdst;
- }
- }
- errno = EOVERFLOW;
- return WRONG;
-}
-
-extern "C" time_t
-mktime(struct tm *const tmp)
-{
- time_t result;
-
- tzset_guard.init ("tzset_guard")->acquire ();
- tzset_unlocked();
- result = time1(lclptr, tmp, localsub, 0L);
- tzset_guard.release ();
- return result;
-}
-
-#ifdef STD_INSPIRED
-
-extern "C" time_t
-timelocal(struct tm *const tmp)
-{
- if (tmp != NULL)
- tmp->tm_isdst = -1; /* in case it wasn't initialized */
- return mktime(tmp);
-}
-
-extern "C" time_t
-timegm(struct tm *const tmp)
-{
- time_t t;
-
- if (tmp != NULL)
- tmp->tm_isdst = 0;
- t = time1(gmtptr, tmp, gmtsub, 0L);
- return t;
-}
-
-extern "C" time_t
-timeoff(struct tm *const tmp, const long offset)
-{
- time_t t;
-
- if (tmp != NULL)
- tmp->tm_isdst = 0;
- t = time1(gmtptr, tmp, gmtsub, offset);
- return t;
-}
-
-#endif /* defined STD_INSPIRED */
-
-#ifdef CMUCS
-
-/*
-** The following is supplied for compatibility with
-** previous versions of the CMUCS runtime library.
-*/
-
-extern "C" long
-gtime(struct tm *const tmp)
-{
- const time_t t = mktime(tmp);
-
- if (t == WRONG)
- return -1;
- return t;
-}
-
-#endif /* defined CMUCS */
-
-/*
-** XXX--is the below the right way to conditionalize??
-*/
-
-#ifdef STD_INSPIRED
-
-/*
-** IEEE Std 1003.1-1988 (POSIX) legislates that 536457599
-** shall correspond to "Wed Dec 31 23:59:59 UTC 1986", which
-** is not the case if we are accounting for leap seconds.
-** So, we provide the following conversion routines for use
-** when exchanging timestamps with POSIX conforming systems.
-*/
-
-static long
-leapcorr(const timezone_t sp, time_t *timep)
-{
- struct lsinfo * lp;
- int i;
-
- i = sp->leapcnt;
- while (--i >= 0) {
- lp = &sp->lsis[i];
- if (*timep >= lp->ls_trans)
- return lp->ls_corr;
- }
- return 0;
-}
-
-extern "C" time_t
-time2posix(time_t t)
-{
- time_t result;
- tzset_guard.init ("tzset_guard")->acquire ();
- tzset_unlocked();
- result = t - leapcorr(lclptr, &t);
- tzset_guard.release ();
- return (result);
-}
-
-extern "C" time_t
-posix2time(time_t t)
-{
- time_t x;
- time_t y;
-
- tzset_guard.init ("tzset_guard")->acquire ();
- tzset_unlocked();
- /*
- ** For a positive leap second hit, the result
- ** is not unique. For a negative leap second
- ** hit, the corresponding time doesn't exist,
- ** so we return an adjacent second.
- */
- x = (time_t)(t + leapcorr(lclptr, &t));
- y = (time_t)(x - leapcorr(lclptr, &x));
- if (y < t) {
- do {
- x++;
- y = (time_t)(x - leapcorr(lclptr, &x));
- } while (y < t);
- if (t != y) {
- return x - 1;
- }
- } else if (y > t) {
- do {
- --x;
- y = (time_t)(x - leapcorr(lclptr, &x));
- } while (y > t);
- if (t != y) {
- return x + 1;
- }
- }
- tzset_guard.release ();
- return x;
-}
-
-#endif /* defined STD_INSPIRED */
diff --git a/winsup/cygwin/lsearch.cc b/winsup/cygwin/lsearch.cc
deleted file mode 100644
index 9e2d93b77..000000000
--- a/winsup/cygwin/lsearch.cc
+++ /dev/null
@@ -1,51 +0,0 @@
-/* Initial implementation:
- Copyright (c) 2002 Robert Drehmel
- All rights reserved.
-
- As long as the above copyright statement and this notice remain
- unchanged, you can do what ever you want with this file. */
-
-#include <stdint.h> /* for uint8_t */
-#include <string.h> /* for memcpy () prototype */
-
-static void *lwork (const void *, const void *, size_t *, size_t,
- int (*) (const void *, const void *), int);
-
-extern "C" void *
-lsearch (const void *key, void *base, size_t *nelp, size_t width,
- int (*compar) (const void *, const void *))
-{
- return lwork (key, base, nelp, width, compar, 1);
-}
-
-extern "C" void *
-lfind (const void *key, const void *base, size_t *nelp, size_t width,
- int (*compar) (const void *, const void *))
-{
- return lwork (key, base, nelp, width, compar, 0);
-}
-
-static void *
-lwork (const void *key, const void *base, size_t *nelp, size_t width,
- int (*compar) (const void *, const void *), int addelem)
-{
- uint8_t *ep, *endp;
-
- /* Cast to an integer value first to avoid the warning for removing
- 'const' via a cast. */
- ep = (uint8_t *) (uintptr_t)base;
- for (endp = (uint8_t *) (ep + width * *nelp); ep < endp; ep += width)
- if (compar (key, ep) == 0)
- return ep;
-
- /* lfind () shall return when the key was not found. */
- if (!addelem)
- return NULL;
-
- /* lsearch () adds the key to the end of the table and increments
- the number of elements. */
- memcpy (endp, key, width);
- ++*nelp;
-
- return endp;
-}
diff --git a/winsup/cygwin/malloc.cc b/winsup/cygwin/malloc.cc
deleted file mode 100644
index b1d5f6c04..000000000
--- a/winsup/cygwin/malloc.cc
+++ /dev/null
@@ -1,6283 +0,0 @@
-/*
- This is a version (aka dlmalloc) of malloc/free/realloc written by
- Doug Lea and released to the public domain, as explained at
- http://creativecommons.org/publicdomain/zero/1.0/ Send questions,
- comments, complaints, performance data, etc to dl@cs.oswego.edu
-
-* Version 2.8.6 Wed Aug 29 06:57:58 2012 Doug Lea
- Note: There may be an updated version of this malloc obtainable at
- ftp://gee.cs.oswego.edu/pub/misc/malloc.c
- Check before installing!
-
-* Quickstart
-
- This library is all in one file to simplify the most common usage:
- ftp it, compile it (-O3), and link it into another program. All of
- the compile-time options default to reasonable values for use on
- most platforms. You might later want to step through various
- compile-time and dynamic tuning options.
-
- For convenience, an include file for code using this malloc is at:
- ftp://gee.cs.oswego.edu/pub/misc/malloc-2.8.6.h
- You don't really need this .h file unless you call functions not
- defined in your system include files. The .h file contains only the
- excerpts from this file needed for using this malloc on ANSI C/C++
- systems, so long as you haven't changed compile-time options about
- naming and tuning parameters. If you do, then you can create your
- own malloc.h that does include all settings by cutting at the point
- indicated below. Note that you may already by default be using a C
- library containing a malloc that is based on some version of this
- malloc (for example in linux). You might still want to use the one
- in this file to customize settings or to avoid overheads associated
- with library versions.
-
-* Vital statistics:
-
- Supported pointer/size_t representation: 4 or 8 bytes
- size_t MUST be an unsigned type of the same width as
- pointers. (If you are using an ancient system that declares
- size_t as a signed type, or need it to be a different width
- than pointers, you can use a previous release of this malloc
- (e.g. 2.7.2) supporting these.)
-
- Alignment: 8 bytes (minimum)
- This suffices for nearly all current machines and C compilers.
- However, you can define MALLOC_ALIGNMENT to be wider than this
- if necessary (up to 128bytes), at the expense of using more space.
-
- Minimum overhead per allocated chunk: 4 or 8 bytes (if 4byte sizes)
- 8 or 16 bytes (if 8byte sizes)
- Each malloced chunk has a hidden word of overhead holding size
- and status information, and additional cross-check word
- if FOOTERS is defined.
-
- Minimum allocated size: 4-byte ptrs: 16 bytes (including overhead)
- 8-byte ptrs: 32 bytes (including overhead)
-
- Even a request for zero bytes (i.e., malloc(0)) returns a
- pointer to something of the minimum allocatable size.
- The maximum overhead wastage (i.e., number of extra bytes
- allocated than were requested in malloc) is less than or equal
- to the minimum size, except for requests >= mmap_threshold that
- are serviced via mmap(), where the worst case wastage is about
- 32 bytes plus the remainder from a system page (the minimal
- mmap unit); typically 4096 or 8192 bytes.
-
- Security: static-safe; optionally more or less
- The "security" of malloc refers to the ability of malicious
- code to accentuate the effects of errors (for example, freeing
- space that is not currently malloc'ed or overwriting past the
- ends of chunks) in code that calls malloc. This malloc
- guarantees not to modify any memory locations below the base of
- heap, i.e., static variables, even in the presence of usage
- errors. The routines additionally detect most improper frees
- and reallocs. All this holds as long as the static bookkeeping
- for malloc itself is not corrupted by some other means. This
- is only one aspect of security -- these checks do not, and
- cannot, detect all possible programming errors.
-
- If FOOTERS is defined nonzero, then each allocated chunk
- carries an additional check word to verify that it was malloced
- from its space. These check words are the same within each
- execution of a program using malloc, but differ across
- executions, so externally crafted fake chunks cannot be
- freed. This improves security by rejecting frees/reallocs that
- could corrupt heap memory, in addition to the checks preventing
- writes to statics that are always on. This may further improve
- security at the expense of time and space overhead. (Note that
- FOOTERS may also be worth using with MSPACES.)
-
- By default detected errors cause the program to abort (calling
- "abort()"). You can override this to instead proceed past
- errors by defining PROCEED_ON_ERROR. In this case, a bad free
- has no effect, and a malloc that encounters a bad address
- caused by user overwrites will ignore the bad address by
- dropping pointers and indices to all known memory. This may
- be appropriate for programs that should continue if at all
- possible in the face of programming errors, although they may
- run out of memory because dropped memory is never reclaimed.
-
- If you don't like either of these options, you can define
- CORRUPTION_ERROR_ACTION and USAGE_ERROR_ACTION to do anything
- else. And if if you are sure that your program using malloc has
- no errors or vulnerabilities, you can define INSECURE to 1,
- which might (or might not) provide a small performance improvement.
-
- It is also possible to limit the maximum total allocatable
- space, using malloc_set_footprint_limit. This is not
- designed as a security feature in itself (calls to set limits
- are not screened or privileged), but may be useful as one
- aspect of a secure implementation.
-
- Thread-safety: NOT thread-safe unless USE_LOCKS defined non-zero
- When USE_LOCKS is defined, each public call to malloc, free,
- etc is surrounded with a lock. By default, this uses a plain
- pthread mutex, win32 critical section, or a spin-lock if if
- available for the platform and not disabled by setting
- USE_SPIN_LOCKS=0. However, if USE_RECURSIVE_LOCKS is defined,
- recursive versions are used instead (which are not required for
- base functionality but may be needed in layered extensions).
- Using a global lock is not especially fast, and can be a major
- bottleneck. It is designed only to provide minimal protection
- in concurrent environments, and to provide a basis for
- extensions. If you are using malloc in a concurrent program,
- consider instead using nedmalloc
- (http://www.nedprod.com/programs/portable/nedmalloc/) or
- ptmalloc (See http://www.malloc.de), which are derived from
- versions of this malloc.
-
- System requirements: Any combination of MORECORE and/or MMAP/MUNMAP
- This malloc can use unix sbrk or any emulation (invoked using
- the CALL_MORECORE macro) and/or mmap/munmap or any emulation
- (invoked using CALL_MMAP/CALL_MUNMAP) to get and release system
- memory. On most unix systems, it tends to work best if both
- MORECORE and MMAP are enabled. On Win32, it uses emulations
- based on VirtualAlloc. It also uses common C library functions
- like memset.
-
- Compliance: I believe it is compliant with the Single Unix Specification
- (See http://www.unix.org). Also SVID/XPG, ANSI C, and probably
- others as well.
-
-* Overview of algorithms
-
- This is not the fastest, most space-conserving, most portable, or
- most tunable malloc ever written. However it is among the fastest
- while also being among the most space-conserving, portable and
- tunable. Consistent balance across these factors results in a good
- general-purpose allocator for malloc-intensive programs.
-
- In most ways, this malloc is a best-fit allocator. Generally, it
- chooses the best-fitting existing chunk for a request, with ties
- broken in approximately least-recently-used order. (This strategy
- normally maintains low fragmentation.) However, for requests less
- than 256bytes, it deviates from best-fit when there is not an
- exactly fitting available chunk by preferring to use space adjacent
- to that used for the previous small request, as well as by breaking
- ties in approximately most-recently-used order. (These enhance
- locality of series of small allocations.) And for very large requests
- (>= 256Kb by default), it relies on system memory mapping
- facilities, if supported. (This helps avoid carrying around and
- possibly fragmenting memory used only for large chunks.)
-
- All operations (except malloc_stats and mallinfo) have execution
- times that are bounded by a constant factor of the number of bits in
- a size_t, not counting any clearing in calloc or copying in realloc,
- or actions surrounding MORECORE and MMAP that have times
- proportional to the number of non-contiguous regions returned by
- system allocation routines, which is often just 1. In real-time
- applications, you can optionally suppress segment traversals using
- NO_SEGMENT_TRAVERSAL, which assures bounded execution even when
- system allocators return non-contiguous spaces, at the typical
- expense of carrying around more memory and increased fragmentation.
-
- The implementation is not very modular and seriously overuses
- macros. Perhaps someday all C compilers will do as good a job
- inlining modular code as can now be done by brute-force expansion,
- but now, enough of them seem not to.
-
- Some compilers issue a lot of warnings about code that is
- dead/unreachable only on some platforms, and also about intentional
- uses of negation on unsigned types. All known cases of each can be
- ignored.
-
- For a longer but out of date high-level description, see
- http://gee.cs.oswego.edu/dl/html/malloc.html
-
-* MSPACES
- If MSPACES is defined, then in addition to malloc, free, etc.,
- this file also defines mspace_malloc, mspace_free, etc. These
- are versions of malloc routines that take an "mspace" argument
- obtained using create_mspace, to control all internal bookkeeping.
- If ONLY_MSPACES is defined, only these versions are compiled.
- So if you would like to use this allocator for only some allocations,
- and your system malloc for others, you can compile with
- ONLY_MSPACES and then do something like...
- static mspace mymspace = create_mspace(0,0); // for example
- #define mymalloc(bytes) mspace_malloc(mymspace, bytes)
-
- (Note: If you only need one instance of an mspace, you can instead
- use "USE_DL_PREFIX" to relabel the global malloc.)
-
- You can similarly create thread-local allocators by storing
- mspaces as thread-locals. For example:
- static __thread mspace tlms = 0;
- void* tlmalloc(size_t bytes) {
- if (tlms == 0) tlms = create_mspace(0, 0);
- return mspace_malloc(tlms, bytes);
- }
- void tlfree(void* mem) { mspace_free(tlms, mem); }
-
- Unless FOOTERS is defined, each mspace is completely independent.
- You cannot allocate from one and free to another (although
- conformance is only weakly checked, so usage errors are not always
- caught). If FOOTERS is defined, then each chunk carries around a tag
- indicating its originating mspace, and frees are directed to their
- originating spaces. Normally, this requires use of locks.
-
- ------------------------- Compile-time options ---------------------------
-
-Be careful in setting #define values for numerical constants of type
-size_t. On some systems, literal values are not automatically extended
-to size_t precision unless they are explicitly casted. You can also
-use the symbolic values MAX_SIZE_T, SIZE_T_ONE, etc below.
-
-WIN32 default: defined if _WIN32 defined
- Defining WIN32 sets up defaults for MS environment and compilers.
- Otherwise defaults are for unix. Beware that there seem to be some
- cases where this malloc might not be a pure drop-in replacement for
- Win32 malloc: Random-looking failures from Win32 GDI API's (eg;
- SetDIBits()) may be due to bugs in some video driver implementations
- when pixel buffers are malloc()ed, and the region spans more than
- one VirtualAlloc()ed region. Because dlmalloc uses a small (64Kb)
- default granularity, pixel buffers may straddle virtual allocation
- regions more often than when using the Microsoft allocator. You can
- avoid this by using VirtualAlloc() and VirtualFree() for all pixel
- buffers rather than using malloc(). If this is not possible,
- recompile this malloc with a larger DEFAULT_GRANULARITY. Note:
- in cases where MSC and gcc (cygwin) are known to differ on WIN32,
- conditions use _MSC_VER to distinguish them.
-
-DLMALLOC_EXPORT default: extern
- Defines how public APIs are declared. If you want to export via a
- Windows DLL, you might define this as
- #define DLMALLOC_EXPORT extern __declspec(dllexport)
- If you want a POSIX ELF shared object, you might use
- #define DLMALLOC_EXPORT extern __attribute__((visibility("default")))
-
-MALLOC_ALIGNMENT default: (size_t)(2 * sizeof(void *))
- Controls the minimum alignment for malloc'ed chunks. It must be a
- power of two and at least 8, even on machines for which smaller
- alignments would suffice. It may be defined as larger than this
- though. Note however that code and data structures are optimized for
- the case of 8-byte alignment.
-
-MSPACES default: 0 (false)
- If true, compile in support for independent allocation spaces.
- This is only supported if HAVE_MMAP is true.
-
-ONLY_MSPACES default: 0 (false)
- If true, only compile in mspace versions, not regular versions.
-
-USE_LOCKS default: 0 (false)
- Causes each call to each public routine to be surrounded with
- pthread or WIN32 mutex lock/unlock. (If set true, this can be
- overridden on a per-mspace basis for mspace versions.) If set to a
- non-zero value other than 1, locks are used, but their
- implementation is left out, so lock functions must be supplied manually,
- as described below.
-
-USE_SPIN_LOCKS default: 1 iff USE_LOCKS and spin locks available
- If true, uses custom spin locks for locking. This is currently
- supported only gcc >= 4.1, older gccs on x86 platforms, and recent
- MS compilers. Otherwise, posix locks or win32 critical sections are
- used.
-
-USE_RECURSIVE_LOCKS default: not defined
- If defined nonzero, uses recursive (aka reentrant) locks, otherwise
- uses plain mutexes. This is not required for malloc proper, but may
- be needed for layered allocators such as nedmalloc.
-
-LOCK_AT_FORK default: not defined
- If defined nonzero, performs pthread_atfork upon initialization
- to initialize child lock while holding parent lock. The implementation
- assumes that pthread locks (not custom locks) are being used. In other
- cases, you may need to customize the implementation.
-
-FOOTERS default: 0
- If true, provide extra checking and dispatching by placing
- information in the footers of allocated chunks. This adds
- space and time overhead.
-
-INSECURE default: 0
- If true, omit checks for usage errors and heap space overwrites.
-
-USE_DL_PREFIX default: NOT defined
- Causes compiler to prefix all public routines with the string 'dl'.
- This can be useful when you only want to use this malloc in one part
- of a program, using your regular system malloc elsewhere.
-
-MALLOC_INSPECT_ALL default: NOT defined
- If defined, compiles malloc_inspect_all and mspace_inspect_all, that
- perform traversal of all heap space. Unless access to these
- functions is otherwise restricted, you probably do not want to
- include them in secure implementations.
-
-ABORT default: defined as abort()
- Defines how to abort on failed checks. On most systems, a failed
- check cannot die with an "assert" or even print an informative
- message, because the underlying print routines in turn call malloc,
- which will fail again. Generally, the best policy is to simply call
- abort(). It's not very useful to do more than this because many
- errors due to overwriting will show up as address faults (null, odd
- addresses etc) rather than malloc-triggered checks, so will also
- abort. Also, most compilers know that abort() does not return, so
- can better optimize code conditionally calling it.
-
-PROCEED_ON_ERROR default: defined as 0 (false)
- Controls whether detected bad addresses cause them to bypassed
- rather than aborting. If set, detected bad arguments to free and
- realloc are ignored. And all bookkeeping information is zeroed out
- upon a detected overwrite of freed heap space, thus losing the
- ability to ever return it from malloc again, but enabling the
- application to proceed. If PROCEED_ON_ERROR is defined, the
- static variable malloc_corruption_error_count is compiled in
- and can be examined to see if errors have occurred. This option
- generates slower code than the default abort policy.
-
-DEBUG default: NOT defined
- The DEBUG setting is mainly intended for people trying to modify
- this code or diagnose problems when porting to new platforms.
- However, it may also be able to better isolate user errors than just
- using runtime checks. The assertions in the check routines spell
- out in more detail the assumptions and invariants underlying the
- algorithms. The checking is fairly extensive, and will slow down
- execution noticeably. Calling malloc_stats or mallinfo with DEBUG
- set will attempt to check every non-mmapped allocated and free chunk
- in the course of computing the summaries.
-
-ABORT_ON_ASSERT_FAILURE default: defined as 1 (true)
- Debugging assertion failures can be nearly impossible if your
- version of the assert macro causes malloc to be called, which will
- lead to a cascade of further failures, blowing the runtime stack.
- ABORT_ON_ASSERT_FAILURE cause assertions failures to call abort(),
- which will usually make debugging easier.
-
-MALLOC_FAILURE_ACTION default: sets errno to ENOMEM, or no-op on win32
- The action to take before "return 0" when malloc fails to be able to
- return memory because there is none available.
-
-HAVE_MORECORE default: 1 (true) unless win32 or ONLY_MSPACES
- True if this system supports sbrk or an emulation of it.
-
-MORECORE default: sbrk
- The name of the sbrk-style system routine to call to obtain more
- memory. See below for guidance on writing custom MORECORE
- functions. The type of the argument to sbrk/MORECORE varies across
- systems. It cannot be size_t, because it supports negative
- arguments, so it is normally the signed type of the same width as
- size_t (sometimes declared as "intptr_t"). It doesn't much matter
- though. Internally, we only call it with arguments less than half
- the max value of a size_t, which should work across all reasonable
- possibilities, although sometimes generating compiler warnings.
-
-MORECORE_CONTIGUOUS default: 1 (true) if HAVE_MORECORE
- If true, take advantage of fact that consecutive calls to MORECORE
- with positive arguments always return contiguous increasing
- addresses. This is true of unix sbrk. It does not hurt too much to
- set it true anyway, since malloc copes with non-contiguities.
- Setting it false when definitely non-contiguous saves time
- and possibly wasted space it would take to discover this though.
-
-MORECORE_CANNOT_TRIM default: NOT defined
- True if MORECORE cannot release space back to the system when given
- negative arguments. This is generally necessary only if you are
- using a hand-crafted MORECORE function that cannot handle negative
- arguments.
-
-NO_SEGMENT_TRAVERSAL default: 0
- If non-zero, suppresses traversals of memory segments
- returned by either MORECORE or CALL_MMAP. This disables
- merging of segments that are contiguous, and selectively
- releasing them to the OS if unused, but bounds execution times.
-
-HAVE_MMAP default: 1 (true)
- True if this system supports mmap or an emulation of it. If so, and
- HAVE_MORECORE is not true, MMAP is used for all system
- allocation. If set and HAVE_MORECORE is true as well, MMAP is
- primarily used to directly allocate very large blocks. It is also
- used as a backup strategy in cases where MORECORE fails to provide
- space from system. Note: A single call to MUNMAP is assumed to be
- able to unmap memory that may have be allocated using multiple calls
- to MMAP, so long as they are adjacent.
-
-HAVE_MREMAP default: 1 on linux, else 0
- If true realloc() uses mremap() to re-allocate large blocks and
- extend or shrink allocation spaces.
-
-MMAP_CLEARS default: 1 except on WINCE.
- True if mmap clears memory so calloc doesn't need to. This is true
- for standard unix mmap using /dev/zero and on WIN32 except for WINCE.
-
-USE_BUILTIN_FFS default: 0 (i.e., not used)
- Causes malloc to use the builtin ffs() function to compute indices.
- Some compilers may recognize and intrinsify ffs to be faster than the
- supplied C version. Also, the case of x86 using gcc is special-cased
- to an asm instruction, so is already as fast as it can be, and so
- this setting has no effect. Similarly for Win32 under recent MS compilers.
- (On most x86s, the asm version is only slightly faster than the C version.)
-
-malloc_getpagesize default: derive from system includes, or 4096.
- The system page size. To the extent possible, this malloc manages
- memory from the system in page-size units. This may be (and
- usually is) a function rather than a constant. This is ignored
- if WIN32, where page size is determined using getSystemInfo during
- initialization.
-
-USE_DEV_RANDOM default: 0 (i.e., not used)
- Causes malloc to use /dev/random to initialize secure magic seed for
- stamping footers. Otherwise, the current time is used.
-
-NO_MALLINFO default: 0
- If defined, don't compile "mallinfo". This can be a simple way
- of dealing with mismatches between system declarations and
- those in this file.
-
-MALLINFO_FIELD_TYPE default: size_t
- The type of the fields in the mallinfo struct. This was originally
- defined as "int" in SVID etc, but is more usefully defined as
- size_t. The value is used only if HAVE_USR_INCLUDE_MALLOC_H is not set
-
-NO_MALLOC_STATS default: 0
- If defined, don't compile "malloc_stats". This avoids calls to
- fprintf and bringing in stdio dependencies you might not want.
-
-REALLOC_ZERO_BYTES_FREES default: not defined
- This should be set if a call to realloc with zero bytes should
- be the same as a call to free. Some people think it should. Otherwise,
- since this malloc returns a unique pointer for malloc(0), so does
- realloc(p, 0).
-
-LACKS_UNISTD_H, LACKS_FCNTL_H, LACKS_SYS_PARAM_H, LACKS_SYS_MMAN_H
-LACKS_STRINGS_H, LACKS_STRING_H, LACKS_SYS_TYPES_H, LACKS_ERRNO_H
-LACKS_STDLIB_H LACKS_SCHED_H LACKS_TIME_H default: NOT defined unless on WIN32
- Define these if your system does not have these header files.
- You might need to manually insert some of the declarations they provide.
-
-DEFAULT_GRANULARITY default: page size if MORECORE_CONTIGUOUS,
- system_info.dwAllocationGranularity in WIN32,
- otherwise 64K.
- Also settable using mallopt(M_GRANULARITY, x)
- The unit for allocating and deallocating memory from the system. On
- most systems with contiguous MORECORE, there is no reason to
- make this more than a page. However, systems with MMAP tend to
- either require or encourage larger granularities. You can increase
- this value to prevent system allocation functions to be called so
- often, especially if they are slow. The value must be at least one
- page and must be a power of two. Setting to 0 causes initialization
- to either page size or win32 region size. (Note: In previous
- versions of malloc, the equivalent of this option was called
- "TOP_PAD")
-
-DEFAULT_TRIM_THRESHOLD default: 2MB
- Also settable using mallopt(M_TRIM_THRESHOLD, x)
- The maximum amount of unused top-most memory to keep before
- releasing via malloc_trim in free(). Automatic trimming is mainly
- useful in long-lived programs using contiguous MORECORE. Because
- trimming via sbrk can be slow on some systems, and can sometimes be
- wasteful (in cases where programs immediately afterward allocate
- more large chunks) the value should be high enough so that your
- overall system performance would improve by releasing this much
- memory. As a rough guide, you might set to a value close to the
- average size of a process (program) running on your system.
- Releasing this much memory would allow such a process to run in
- memory. Generally, it is worth tuning trim thresholds when a
- program undergoes phases where several large chunks are allocated
- and released in ways that can reuse each other's storage, perhaps
- mixed with phases where there are no such chunks at all. The trim
- value must be greater than page size to have any useful effect. To
- disable trimming completely, you can set to MAX_SIZE_T. Note that the trick
- some people use of mallocing a huge space and then freeing it at
- program startup, in an attempt to reserve system memory, doesn't
- have the intended effect under automatic trimming, since that memory
- will immediately be returned to the system.
-
-DEFAULT_MMAP_THRESHOLD default: 256K
- Also settable using mallopt(M_MMAP_THRESHOLD, x)
- The request size threshold for using MMAP to directly service a
- request. Requests of at least this size that cannot be allocated
- using already-existing space will be serviced via mmap. (If enough
- normal freed space already exists it is used instead.) Using mmap
- segregates relatively large chunks of memory so that they can be
- individually obtained and released from the host system. A request
- serviced through mmap is never reused by any other request (at least
- not directly; the system may just so happen to remap successive
- requests to the same locations). Segregating space in this way has
- the benefits that: Mmapped space can always be individually released
- back to the system, which helps keep the system level memory demands
- of a long-lived program low. Also, mapped memory doesn't become
- `locked' between other chunks, as can happen with normally allocated
- chunks, which means that even trimming via malloc_trim would not
- release them. However, it has the disadvantage that the space
- cannot be reclaimed, consolidated, and then used to service later
- requests, as happens with normal chunks. The advantages of mmap
- nearly always outweigh disadvantages for "large" chunks, but the
- value of "large" may vary across systems. The default is an
- empirically derived value that works well in most systems. You can
- disable mmap by setting to MAX_SIZE_T.
-
-MAX_RELEASE_CHECK_RATE default: 4095 unless not HAVE_MMAP
- The number of consolidated frees between checks to release
- unused segments when freeing. When using non-contiguous segments,
- especially with multiple mspaces, checking only for topmost space
- doesn't always suffice to trigger trimming. To compensate for this,
- free() will, with a period of MAX_RELEASE_CHECK_RATE (or the
- current number of segments, if greater) try to release unused
- segments to the OS when freeing chunks that result in
- consolidation. The best value for this parameter is a compromise
- between slowing down frees with relatively costly checks that
- rarely trigger versus holding on to unused memory. To effectively
- disable, set to MAX_SIZE_T. This may lead to a very slight speed
- improvement at the expense of carrying around more memory.
-*/
-
-/* Version identifier to allow people to support multiple versions */
-#ifndef DLMALLOC_VERSION
-#define DLMALLOC_VERSION 20806
-#endif /* DLMALLOC_VERSION */
-
-#ifndef DLMALLOC_EXPORT
-#define DLMALLOC_EXPORT extern
-#endif
-
-#ifndef WIN32
-#ifdef _WIN32
-#define WIN32 1
-#endif /* _WIN32 */
-#ifdef _WIN32_WCE
-#define LACKS_FCNTL_H
-#define WIN32 1
-#endif /* _WIN32_WCE */
-#endif /* WIN32 */
-#ifdef WIN32
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-#include <tchar.h>
-#define HAVE_MMAP 1
-#define HAVE_MORECORE 0
-#define LACKS_UNISTD_H
-#define LACKS_SYS_PARAM_H
-#define LACKS_SYS_MMAN_H
-#define LACKS_STRING_H
-#define LACKS_STRINGS_H
-#define LACKS_SYS_TYPES_H
-#define LACKS_ERRNO_H
-#define LACKS_SCHED_H
-#ifndef MALLOC_FAILURE_ACTION
-#define MALLOC_FAILURE_ACTION
-#endif /* MALLOC_FAILURE_ACTION */
-#ifndef MMAP_CLEARS
-#ifdef _WIN32_WCE /* WINCE reportedly does not clear */
-#define MMAP_CLEARS 0
-#else
-#define MMAP_CLEARS 1
-#endif /* _WIN32_WCE */
-#endif /*MMAP_CLEARS */
-#endif /* WIN32 */
-
-#if defined(DARWIN) || defined(_DARWIN)
-/* Mac OSX docs advise not to use sbrk; it seems better to use mmap */
-#ifndef HAVE_MORECORE
-#define HAVE_MORECORE 0
-#define HAVE_MMAP 1
-/* OSX allocators provide 16 byte alignment */
-#ifndef MALLOC_ALIGNMENT
-#define MALLOC_ALIGNMENT ((size_t)16U)
-#endif
-#endif /* HAVE_MORECORE */
-#endif /* DARWIN */
-
-#ifndef LACKS_SYS_TYPES_H
-#include <sys/types.h> /* For size_t */
-#endif /* LACKS_SYS_TYPES_H */
-#ifdef __CYGWIN__
-#include "cygmalloc.h"
-#endif /* __CYGWIN__ */
-
-/* The maximum possible size_t value has all bits set */
-#define MAX_SIZE_T (~(size_t)0)
-
-#ifndef USE_LOCKS /* ensure true if spin or recursive locks set */
-#define USE_LOCKS ((defined(USE_SPIN_LOCKS) && USE_SPIN_LOCKS != 0) || \
- (defined(USE_RECURSIVE_LOCKS) && USE_RECURSIVE_LOCKS != 0))
-#endif /* USE_LOCKS */
-
-#if USE_LOCKS /* Spin locks for gcc >= 4.1, older gcc on x86, MSC >= 1310 */
-#if ((defined(__GNUC__) && \
- ((__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1)) || \
- defined(__i386__) || defined(__x86_64__))) || \
- (defined(_MSC_VER) && _MSC_VER>=1310))
-#ifndef USE_SPIN_LOCKS
-#define USE_SPIN_LOCKS 1
-#endif /* USE_SPIN_LOCKS */
-#elif USE_SPIN_LOCKS
-#error "USE_SPIN_LOCKS defined without implementation"
-#endif /* ... locks available... */
-#elif !defined(USE_SPIN_LOCKS)
-#define USE_SPIN_LOCKS 0
-#endif /* USE_LOCKS */
-
-#ifndef ONLY_MSPACES
-#define ONLY_MSPACES 0
-#endif /* ONLY_MSPACES */
-#ifndef MSPACES
-#if ONLY_MSPACES
-#define MSPACES 1
-#else /* ONLY_MSPACES */
-#define MSPACES 0
-#endif /* ONLY_MSPACES */
-#endif /* MSPACES */
-#ifndef MALLOC_ALIGNMENT
-#define MALLOC_ALIGNMENT ((size_t)(2 * sizeof(void *)))
-#endif /* MALLOC_ALIGNMENT */
-#ifndef FOOTERS
-#define FOOTERS 0
-#endif /* FOOTERS */
-#ifndef ABORT
-#define ABORT abort()
-#endif /* ABORT */
-#ifndef ABORT_ON_ASSERT_FAILURE
-#define ABORT_ON_ASSERT_FAILURE 1
-#endif /* ABORT_ON_ASSERT_FAILURE */
-#ifndef PROCEED_ON_ERROR
-#define PROCEED_ON_ERROR 0
-#endif /* PROCEED_ON_ERROR */
-
-#ifndef INSECURE
-#define INSECURE 0
-#endif /* INSECURE */
-#ifndef MALLOC_INSPECT_ALL
-#define MALLOC_INSPECT_ALL 0
-#endif /* MALLOC_INSPECT_ALL */
-#ifndef HAVE_MMAP
-#define HAVE_MMAP 1
-#endif /* HAVE_MMAP */
-#ifndef MMAP_CLEARS
-#define MMAP_CLEARS 1
-#endif /* MMAP_CLEARS */
-#ifndef HAVE_MREMAP
-#ifdef linux
-#define HAVE_MREMAP 1
-#define _GNU_SOURCE /* Turns on mremap() definition */
-#else /* linux */
-#define HAVE_MREMAP 0
-#endif /* linux */
-#endif /* HAVE_MREMAP */
-#ifndef MALLOC_FAILURE_ACTION
-#define MALLOC_FAILURE_ACTION errno = ENOMEM;
-#endif /* MALLOC_FAILURE_ACTION */
-#ifndef HAVE_MORECORE
-#if ONLY_MSPACES
-#define HAVE_MORECORE 0
-#else /* ONLY_MSPACES */
-#define HAVE_MORECORE 1
-#endif /* ONLY_MSPACES */
-#endif /* HAVE_MORECORE */
-#if !HAVE_MORECORE
-#define MORECORE_CONTIGUOUS 0
-#else /* !HAVE_MORECORE */
-#define MORECORE_DEFAULT sbrk
-#ifndef MORECORE_CONTIGUOUS
-#define MORECORE_CONTIGUOUS 1
-#endif /* MORECORE_CONTIGUOUS */
-#endif /* HAVE_MORECORE */
-#ifndef DEFAULT_GRANULARITY
-#if (MORECORE_CONTIGUOUS || defined(WIN32))
-#define DEFAULT_GRANULARITY (0) /* 0 means to compute in init_mparams */
-#else /* MORECORE_CONTIGUOUS */
-#define DEFAULT_GRANULARITY ((size_t)64U * (size_t)1024U)
-#endif /* MORECORE_CONTIGUOUS */
-#endif /* DEFAULT_GRANULARITY */
-#ifndef DEFAULT_TRIM_THRESHOLD
-#ifndef MORECORE_CANNOT_TRIM
-#define DEFAULT_TRIM_THRESHOLD ((size_t)2U * (size_t)1024U * (size_t)1024U)
-#else /* MORECORE_CANNOT_TRIM */
-#define DEFAULT_TRIM_THRESHOLD MAX_SIZE_T
-#endif /* MORECORE_CANNOT_TRIM */
-#endif /* DEFAULT_TRIM_THRESHOLD */
-#ifndef DEFAULT_MMAP_THRESHOLD
-#if HAVE_MMAP
-#define DEFAULT_MMAP_THRESHOLD ((size_t)256U * (size_t)1024U)
-#else /* HAVE_MMAP */
-#define DEFAULT_MMAP_THRESHOLD MAX_SIZE_T
-#endif /* HAVE_MMAP */
-#endif /* DEFAULT_MMAP_THRESHOLD */
-#ifndef MAX_RELEASE_CHECK_RATE
-#if HAVE_MMAP
-#define MAX_RELEASE_CHECK_RATE 4095
-#else
-#define MAX_RELEASE_CHECK_RATE MAX_SIZE_T
-#endif /* HAVE_MMAP */
-#endif /* MAX_RELEASE_CHECK_RATE */
-#ifndef USE_BUILTIN_FFS
-#define USE_BUILTIN_FFS 0
-#endif /* USE_BUILTIN_FFS */
-#ifndef USE_DEV_RANDOM
-#define USE_DEV_RANDOM 0
-#endif /* USE_DEV_RANDOM */
-#ifndef NO_MALLINFO
-#define NO_MALLINFO 0
-#endif /* NO_MALLINFO */
-#ifndef MALLINFO_FIELD_TYPE
-#define MALLINFO_FIELD_TYPE size_t
-#endif /* MALLINFO_FIELD_TYPE */
-#ifndef NO_MALLOC_STATS
-#define NO_MALLOC_STATS 0
-#endif /* NO_MALLOC_STATS */
-#ifndef NO_SEGMENT_TRAVERSAL
-#define NO_SEGMENT_TRAVERSAL 0
-#endif /* NO_SEGMENT_TRAVERSAL */
-
-/*
- mallopt tuning options. SVID/XPG defines four standard parameter
- numbers for mallopt, normally defined in malloc.h. None of these
- are used in this malloc, so setting them has no effect. But this
- malloc does support the following options.
-*/
-
-#define M_TRIM_THRESHOLD (-1)
-#define M_GRANULARITY (-2)
-#define M_MMAP_THRESHOLD (-3)
-
-/* ------------------------ Mallinfo declarations ------------------------ */
-
-#if !NO_MALLINFO
-/*
- This version of malloc supports the standard SVID/XPG mallinfo
- routine that returns a struct containing usage properties and
- statistics. It should work on any system that has a
- /usr/include/malloc.h defining struct mallinfo. The main
- declaration needed is the mallinfo struct that is returned (by-copy)
- by mallinfo(). The malloinfo struct contains a bunch of fields that
- are not even meaningful in this version of malloc. These fields are
- are instead filled by mallinfo() with other numbers that might be of
- interest.
-
- HAVE_USR_INCLUDE_MALLOC_H should be set if you have a
- /usr/include/malloc.h file that includes a declaration of struct
- mallinfo. If so, it is included; else a compliant version is
- declared below. These must be precisely the same for mallinfo() to
- work. The original SVID version of this struct, defined on most
- systems with mallinfo, declares all fields as ints. But some others
- define as unsigned long. If your system defines the fields using a
- type of different width than listed here, you MUST #include your
- system version and #define HAVE_USR_INCLUDE_MALLOC_H.
-*/
-
-/* #define HAVE_USR_INCLUDE_MALLOC_H */
-
-#ifdef HAVE_USR_INCLUDE_MALLOC_H
-#include "/usr/include/malloc.h"
-#else /* HAVE_USR_INCLUDE_MALLOC_H */
-#ifndef STRUCT_MALLINFO_DECLARED
-/* HP-UX (and others?) redefines mallinfo unless _STRUCT_MALLINFO is defined */
-#define _STRUCT_MALLINFO
-#define STRUCT_MALLINFO_DECLARED 1
-struct mallinfo {
- MALLINFO_FIELD_TYPE arena; /* non-mmapped space allocated from system */
- MALLINFO_FIELD_TYPE ordblks; /* number of free chunks */
- MALLINFO_FIELD_TYPE smblks; /* always 0 */
- MALLINFO_FIELD_TYPE hblks; /* always 0 */
- MALLINFO_FIELD_TYPE hblkhd; /* space in mmapped regions */
- MALLINFO_FIELD_TYPE usmblks; /* maximum total allocated space */
- MALLINFO_FIELD_TYPE fsmblks; /* always 0 */
- MALLINFO_FIELD_TYPE uordblks; /* total allocated space */
- MALLINFO_FIELD_TYPE fordblks; /* total free space */
- MALLINFO_FIELD_TYPE keepcost; /* releasable (via malloc_trim) space */
-};
-#endif /* STRUCT_MALLINFO_DECLARED */
-#endif /* HAVE_USR_INCLUDE_MALLOC_H */
-#endif /* NO_MALLINFO */
-
-/*
- Try to persuade compilers to inline. The most critical functions for
- inlining are defined as macros, so these aren't used for them.
-*/
-
-#ifndef FORCEINLINE
- #if defined(__GNUC__)
-#define FORCEINLINE __inline __attribute__ ((always_inline))
- #elif defined(_MSC_VER)
- #define FORCEINLINE __forceinline
- #endif
-#endif
-#ifndef NOINLINE
- #if defined(__GNUC__)
- #define NOINLINE __attribute__ ((noinline))
- #elif defined(_MSC_VER)
- #define NOINLINE __declspec(noinline)
- #else
- #define NOINLINE
- #endif
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#ifndef FORCEINLINE
- #define FORCEINLINE inline
-#endif
-#endif /* __cplusplus */
-#ifndef FORCEINLINE
- #define FORCEINLINE
-#endif
-
-#if !ONLY_MSPACES
-
-/* ------------------- Declarations of public routines ------------------- */
-
-#ifndef USE_DL_PREFIX
-#define dlcalloc calloc
-#define dlfree free
-#define dlmalloc malloc
-#define dlmemalign memalign
-#define dlposix_memalign posix_memalign
-#define dlrealloc realloc
-#define dlrealloc_in_place realloc_in_place
-#define dlvalloc valloc
-#define dlpvalloc pvalloc
-#define dlmallinfo mallinfo
-#define dlmallopt mallopt
-#define dlmalloc_trim malloc_trim
-#define dlmalloc_stats malloc_stats
-#define dlmalloc_usable_size malloc_usable_size
-#define dlmalloc_footprint malloc_footprint
-#define dlmalloc_max_footprint malloc_max_footprint
-#define dlmalloc_footprint_limit malloc_footprint_limit
-#define dlmalloc_set_footprint_limit malloc_set_footprint_limit
-#define dlmalloc_inspect_all malloc_inspect_all
-#define dlindependent_calloc independent_calloc
-#define dlindependent_comalloc independent_comalloc
-#define dlbulk_free bulk_free
-#endif /* USE_DL_PREFIX */
-
-/*
- malloc(size_t n)
- Returns a pointer to a newly allocated chunk of at least n bytes, or
- null if no space is available, in which case errno is set to ENOMEM
- on ANSI C systems.
-
- If n is zero, malloc returns a minimum-sized chunk. (The minimum
- size is 16 bytes on most 32bit systems, and 32 bytes on 64bit
- systems.) Note that size_t is an unsigned type, so calls with
- arguments that would be negative if signed are interpreted as
- requests for huge amounts of space, which will often fail. The
- maximum supported value of n differs across systems, but is in all
- cases less than the maximum representable value of a size_t.
-*/
-DLMALLOC_EXPORT void* dlmalloc(size_t);
-
-/*
- free(void* p)
- Releases the chunk of memory pointed to by p, that had been previously
- allocated using malloc or a related routine such as realloc.
- It has no effect if p is null. If p was not malloced or already
- freed, free(p) will by default cause the current program to abort.
-*/
-DLMALLOC_EXPORT void dlfree(void*);
-
-/*
- calloc(size_t n_elements, size_t element_size);
- Returns a pointer to n_elements * element_size bytes, with all locations
- set to zero.
-*/
-DLMALLOC_EXPORT void* dlcalloc(size_t, size_t);
-
-/*
- realloc(void* p, size_t n)
- Returns a pointer to a chunk of size n that contains the same data
- as does chunk p up to the minimum of (n, p's size) bytes, or null
- if no space is available.
-
- The returned pointer may or may not be the same as p. The algorithm
- prefers extending p in most cases when possible, otherwise it
- employs the equivalent of a malloc-copy-free sequence.
-
- If p is null, realloc is equivalent to malloc.
-
- If space is not available, realloc returns null, errno is set (if on
- ANSI) and p is NOT freed.
-
- if n is for fewer bytes than already held by p, the newly unused
- space is lopped off and freed if possible. realloc with a size
- argument of zero (re)allocates a minimum-sized chunk.
-
- The old unix realloc convention of allowing the last-free'd chunk
- to be used as an argument to realloc is not supported.
-*/
-DLMALLOC_EXPORT void* dlrealloc(void*, size_t);
-
-/*
- realloc_in_place(void* p, size_t n)
- Resizes the space allocated for p to size n, only if this can be
- done without moving p (i.e., only if there is adjacent space
- available if n is greater than p's current allocated size, or n is
- less than or equal to p's size). This may be used instead of plain
- realloc if an alternative allocation strategy is needed upon failure
- to expand space; for example, reallocation of a buffer that must be
- memory-aligned or cleared. You can use realloc_in_place to trigger
- these alternatives only when needed.
-
- Returns p if successful; otherwise null.
-*/
-DLMALLOC_EXPORT void* dlrealloc_in_place(void*, size_t);
-
-/*
- memalign(size_t alignment, size_t n);
- Returns a pointer to a newly allocated chunk of n bytes, aligned
- in accord with the alignment argument.
-
- The alignment argument should be a power of two. If the argument is
- not a power of two, the nearest greater power is used.
- 8-byte alignment is guaranteed by normal malloc calls, so don't
- bother calling memalign with an argument of 8 or less.
-
- Overreliance on memalign is a sure way to fragment space.
-*/
-DLMALLOC_EXPORT void* dlmemalign(size_t, size_t);
-
-/*
- int posix_memalign(void** pp, size_t alignment, size_t n);
- Allocates a chunk of n bytes, aligned in accord with the alignment
- argument. Differs from memalign only in that it (1) assigns the
- allocated memory to *pp rather than returning it, (2) fails and
- returns EINVAL if the alignment is not a power of two (3) fails and
- returns ENOMEM if memory cannot be allocated.
-*/
-DLMALLOC_EXPORT int dlposix_memalign(void**, size_t, size_t);
-
-/*
- valloc(size_t n);
- Equivalent to memalign(pagesize, n), where pagesize is the page
- size of the system. If the pagesize is unknown, 4096 is used.
-*/
-DLMALLOC_EXPORT void* dlvalloc(size_t);
-
-/*
- mallopt(int parameter_number, int parameter_value)
- Sets tunable parameters The format is to provide a
- (parameter-number, parameter-value) pair. mallopt then sets the
- corresponding parameter to the argument value if it can (i.e., so
- long as the value is meaningful), and returns 1 if successful else
- 0. To workaround the fact that mallopt is specified to use int,
- not size_t parameters, the value -1 is specially treated as the
- maximum unsigned size_t value.
-
- SVID/XPG/ANSI defines four standard param numbers for mallopt,
- normally defined in malloc.h. None of these are use in this malloc,
- so setting them has no effect. But this malloc also supports other
- options in mallopt. See below for details. Briefly, supported
- parameters are as follows (listed defaults are for "typical"
- configurations).
-
- Symbol param # default allowed param values
- M_TRIM_THRESHOLD -1 2*1024*1024 any (-1 disables)
- M_GRANULARITY -2 page size any power of 2 >= page size
- M_MMAP_THRESHOLD -3 256*1024 any (or 0 if no MMAP support)
-*/
-DLMALLOC_EXPORT int dlmallopt(int, int);
-
-/*
- malloc_footprint();
- Returns the number of bytes obtained from the system. The total
- number of bytes allocated by malloc, realloc etc., is less than this
- value. Unlike mallinfo, this function returns only a precomputed
- result, so can be called frequently to monitor memory consumption.
- Even if locks are otherwise defined, this function does not use them,
- so results might not be up to date.
-*/
-DLMALLOC_EXPORT size_t dlmalloc_footprint(void);
-
-/*
- malloc_max_footprint();
- Returns the maximum number of bytes obtained from the system. This
- value will be greater than current footprint if deallocated space
- has been reclaimed by the system. The peak number of bytes allocated
- by malloc, realloc etc., is less than this value. Unlike mallinfo,
- this function returns only a precomputed result, so can be called
- frequently to monitor memory consumption. Even if locks are
- otherwise defined, this function does not use them, so results might
- not be up to date.
-*/
-DLMALLOC_EXPORT size_t dlmalloc_max_footprint(void);
-
-/*
- malloc_footprint_limit();
- Returns the number of bytes that the heap is allowed to obtain from
- the system, returning the last value returned by
- malloc_set_footprint_limit, or the maximum size_t value if
- never set. The returned value reflects a permission. There is no
- guarantee that this number of bytes can actually be obtained from
- the system.
-*/
-DLMALLOC_EXPORT size_t dlmalloc_footprint_limit();
-
-/*
- malloc_set_footprint_limit();
- Sets the maximum number of bytes to obtain from the system, causing
- failure returns from malloc and related functions upon attempts to
- exceed this value. The argument value may be subject to page
- rounding to an enforceable limit; this actual value is returned.
- Using an argument of the maximum possible size_t effectively
- disables checks. If the argument is less than or equal to the
- current malloc_footprint, then all future allocations that require
- additional system memory will fail. However, invocation cannot
- retroactively deallocate existing used memory.
-*/
-DLMALLOC_EXPORT size_t dlmalloc_set_footprint_limit(size_t bytes);
-
-#if MALLOC_INSPECT_ALL
-/*
- malloc_inspect_all(void(*handler)(void *start,
- void *end,
- size_t used_bytes,
- void* callback_arg),
- void* arg);
- Traverses the heap and calls the given handler for each managed
- region, skipping all bytes that are (or may be) used for bookkeeping
- purposes. Traversal does not include include chunks that have been
- directly memory mapped. Each reported region begins at the start
- address, and continues up to but not including the end address. The
- first used_bytes of the region contain allocated data. If
- used_bytes is zero, the region is unallocated. The handler is
- invoked with the given callback argument. If locks are defined, they
- are held during the entire traversal. It is a bad idea to invoke
- other malloc functions from within the handler.
-
- For example, to count the number of in-use chunks with size greater
- than 1000, you could write:
- static int count = 0;
- void count_chunks(void* start, void* end, size_t used, void* arg) {
- if (used >= 1000) ++count;
- }
- then:
- malloc_inspect_all(count_chunks, NULL);
-
- malloc_inspect_all is compiled only if MALLOC_INSPECT_ALL is defined.
-*/
-DLMALLOC_EXPORT void dlmalloc_inspect_all(void(*handler)(void*, void *, size_t, void*),
- void* arg);
-
-#endif /* MALLOC_INSPECT_ALL */
-
-#if !NO_MALLINFO
-/*
- mallinfo()
- Returns (by copy) a struct containing various summary statistics:
-
- arena: current total non-mmapped bytes allocated from system
- ordblks: the number of free chunks
- smblks: always zero.
- hblks: current number of mmapped regions
- hblkhd: total bytes held in mmapped regions
- usmblks: the maximum total allocated space. This will be greater
- than current total if trimming has occurred.
- fsmblks: always zero
- uordblks: current total allocated space (normal or mmapped)
- fordblks: total free space
- keepcost: the maximum number of bytes that could ideally be released
- back to system via malloc_trim. ("ideally" means that
- it ignores page restrictions etc.)
-
- Because these fields are ints, but internal bookkeeping may
- be kept as longs, the reported values may wrap around zero and
- thus be inaccurate.
-*/
-DLMALLOC_EXPORT struct mallinfo dlmallinfo(void);
-#endif /* NO_MALLINFO */
-
-/*
- independent_calloc(size_t n_elements, size_t element_size, void* chunks[]);
-
- independent_calloc is similar to calloc, but instead of returning a
- single cleared space, it returns an array of pointers to n_elements
- independent elements that can hold contents of size elem_size, each
- of which starts out cleared, and can be independently freed,
- realloc'ed etc. The elements are guaranteed to be adjacently
- allocated (this is not guaranteed to occur with multiple callocs or
- mallocs), which may also improve cache locality in some
- applications.
-
- The "chunks" argument is optional (i.e., may be null, which is
- probably the most typical usage). If it is null, the returned array
- is itself dynamically allocated and should also be freed when it is
- no longer needed. Otherwise, the chunks array must be of at least
- n_elements in length. It is filled in with the pointers to the
- chunks.
-
- In either case, independent_calloc returns this pointer array, or
- null if the allocation failed. If n_elements is zero and "chunks"
- is null, it returns a chunk representing an array with zero elements
- (which should be freed if not wanted).
-
- Each element must be freed when it is no longer needed. This can be
- done all at once using bulk_free.
-
- independent_calloc simplifies and speeds up implementations of many
- kinds of pools. It may also be useful when constructing large data
- structures that initially have a fixed number of fixed-sized nodes,
- but the number is not known at compile time, and some of the nodes
- may later need to be freed. For example:
-
- struct Node { int item; struct Node* next; };
-
- struct Node* build_list() {
- struct Node** pool;
- int n = read_number_of_nodes_needed();
- if (n <= 0) return 0;
- pool = (struct Node**)(independent_calloc(n, sizeof(struct Node), 0);
- if (pool == 0) die();
- // organize into a linked list...
- struct Node* first = pool[0];
- for (i = 0; i < n-1; ++i)
- pool[i]->next = pool[i+1];
- free(pool); // Can now free the array (or not, if it is needed later)
- return first;
- }
-*/
-DLMALLOC_EXPORT void** dlindependent_calloc(size_t, size_t, void**);
-
-/*
- independent_comalloc(size_t n_elements, size_t sizes[], void* chunks[]);
-
- independent_comalloc allocates, all at once, a set of n_elements
- chunks with sizes indicated in the "sizes" array. It returns
- an array of pointers to these elements, each of which can be
- independently freed, realloc'ed etc. The elements are guaranteed to
- be adjacently allocated (this is not guaranteed to occur with
- multiple callocs or mallocs), which may also improve cache locality
- in some applications.
-
- The "chunks" argument is optional (i.e., may be null). If it is null
- the returned array is itself dynamically allocated and should also
- be freed when it is no longer needed. Otherwise, the chunks array
- must be of at least n_elements in length. It is filled in with the
- pointers to the chunks.
-
- In either case, independent_comalloc returns this pointer array, or
- null if the allocation failed. If n_elements is zero and chunks is
- null, it returns a chunk representing an array with zero elements
- (which should be freed if not wanted).
-
- Each element must be freed when it is no longer needed. This can be
- done all at once using bulk_free.
-
- independent_comallac differs from independent_calloc in that each
- element may have a different size, and also that it does not
- automatically clear elements.
-
- independent_comalloc can be used to speed up allocation in cases
- where several structs or objects must always be allocated at the
- same time. For example:
-
- struct Head { ... }
- struct Foot { ... }
-
- void send_message(char* msg) {
- int msglen = strlen(msg);
- size_t sizes[3] = { sizeof(struct Head), msglen, sizeof(struct Foot) };
- void* chunks[3];
- if (independent_comalloc(3, sizes, chunks) == 0)
- die();
- struct Head* head = (struct Head*)(chunks[0]);
- char* body = (char*)(chunks[1]);
- struct Foot* foot = (struct Foot*)(chunks[2]);
- // ...
- }
-
- In general though, independent_comalloc is worth using only for
- larger values of n_elements. For small values, you probably won't
- detect enough difference from series of malloc calls to bother.
-
- Overuse of independent_comalloc can increase overall memory usage,
- since it cannot reuse existing noncontiguous small chunks that
- might be available for some of the elements.
-*/
-DLMALLOC_EXPORT void** dlindependent_comalloc(size_t, size_t*, void**);
-
-/*
- bulk_free(void* array[], size_t n_elements)
- Frees and clears (sets to null) each non-null pointer in the given
- array. This is likely to be faster than freeing them one-by-one.
- If footers are used, pointers that have been allocated in different
- mspaces are not freed or cleared, and the count of all such pointers
- is returned. For large arrays of pointers with poor locality, it
- may be worthwhile to sort this array before calling bulk_free.
-*/
-DLMALLOC_EXPORT size_t dlbulk_free(void**, size_t n_elements);
-
-/*
- pvalloc(size_t n);
- Equivalent to valloc(minimum-page-that-holds(n)), that is,
- round up n to nearest pagesize.
- */
-DLMALLOC_EXPORT void* dlpvalloc(size_t);
-
-/*
- malloc_trim(size_t pad);
-
- If possible, gives memory back to the system (via negative arguments
- to sbrk) if there is unused memory at the `high' end of the malloc
- pool or in unused MMAP segments. You can call this after freeing
- large blocks of memory to potentially reduce the system-level memory
- requirements of a program. However, it cannot guarantee to reduce
- memory. Under some allocation patterns, some large free blocks of
- memory will be locked between two used chunks, so they cannot be
- given back to the system.
-
- The `pad' argument to malloc_trim represents the amount of free
- trailing space to leave untrimmed. If this argument is zero, only
- the minimum amount of memory to maintain internal data structures
- will be left. Non-zero arguments can be supplied to maintain enough
- trailing space to service future expected allocations without having
- to re-obtain memory from the system.
-
- Malloc_trim returns 1 if it actually released any memory, else 0.
-*/
-DLMALLOC_EXPORT int dlmalloc_trim(size_t);
-
-/*
- malloc_stats();
- Prints on stderr the amount of space obtained from the system (both
- via sbrk and mmap), the maximum amount (which may be more than
- current if malloc_trim and/or munmap got called), and the current
- number of bytes allocated via malloc (or realloc, etc) but not yet
- freed. Note that this is the number of bytes allocated, not the
- number requested. It will be larger than the number requested
- because of alignment and bookkeeping overhead. Because it includes
- alignment wastage as being in use, this figure may be greater than
- zero even when no user-level chunks are allocated.
-
- The reported current and maximum system memory can be inaccurate if
- a program makes other calls to system memory allocation functions
- (normally sbrk) outside of malloc.
-
- malloc_stats prints only the most commonly interesting statistics.
- More information can be obtained by calling mallinfo.
-*/
-DLMALLOC_EXPORT void dlmalloc_stats(void);
-
-/*
- malloc_usable_size(void* p);
-
- Returns the number of bytes you can actually use in
- an allocated chunk, which may be more than you requested (although
- often not) due to alignment and minimum size constraints.
- You can use this many bytes without worrying about
- overwriting other allocated objects. This is not a particularly great
- programming practice. malloc_usable_size can be more useful in
- debugging and assertions, for example:
-
- p = malloc(n);
- assert(malloc_usable_size(p) >= 256);
-*/
-size_t dlmalloc_usable_size(void*);
-
-#endif /* ONLY_MSPACES */
-
-#if MSPACES
-
-/*
- mspace is an opaque type representing an independent
- region of space that supports mspace_malloc, etc.
-*/
-typedef void* mspace;
-
-/*
- create_mspace creates and returns a new independent space with the
- given initial capacity, or, if 0, the default granularity size. It
- returns null if there is no system memory available to create the
- space. If argument locked is non-zero, the space uses a separate
- lock to control access. The capacity of the space will grow
- dynamically as needed to service mspace_malloc requests. You can
- control the sizes of incremental increases of this space by
- compiling with a different DEFAULT_GRANULARITY or dynamically
- setting with mallopt(M_GRANULARITY, value).
-*/
-DLMALLOC_EXPORT mspace create_mspace(size_t capacity, int locked);
-
-/*
- destroy_mspace destroys the given space, and attempts to return all
- of its memory back to the system, returning the total number of
- bytes freed. After destruction, the results of access to all memory
- used by the space become undefined.
-*/
-DLMALLOC_EXPORT size_t destroy_mspace(mspace msp);
-
-/*
- create_mspace_with_base uses the memory supplied as the initial base
- of a new mspace. Part (less than 128*sizeof(size_t) bytes) of this
- space is used for bookkeeping, so the capacity must be at least this
- large. (Otherwise 0 is returned.) When this initial space is
- exhausted, additional memory will be obtained from the system.
- Destroying this space will deallocate all additionally allocated
- space (if possible) but not the initial base.
-*/
-DLMALLOC_EXPORT mspace create_mspace_with_base(void* base, size_t capacity, int locked);
-
-/*
- mspace_track_large_chunks controls whether requests for large chunks
- are allocated in their own untracked mmapped regions, separate from
- others in this mspace. By default large chunks are not tracked,
- which reduces fragmentation. However, such chunks are not
- necessarily released to the system upon destroy_mspace. Enabling
- tracking by setting to true may increase fragmentation, but avoids
- leakage when relying on destroy_mspace to release all memory
- allocated using this space. The function returns the previous
- setting.
-*/
-DLMALLOC_EXPORT int mspace_track_large_chunks(mspace msp, int enable);
-
-
-/*
- mspace_malloc behaves as malloc, but operates within
- the given space.
-*/
-DLMALLOC_EXPORT void* mspace_malloc(mspace msp, size_t bytes);
-
-/*
- mspace_free behaves as free, but operates within
- the given space.
-
- If compiled with FOOTERS==1, mspace_free is not actually needed.
- free may be called instead of mspace_free because freed chunks from
- any space are handled by their originating spaces.
-*/
-DLMALLOC_EXPORT void mspace_free(mspace msp, void* mem);
-
-/*
- mspace_realloc behaves as realloc, but operates within
- the given space.
-
- If compiled with FOOTERS==1, mspace_realloc is not actually
- needed. realloc may be called instead of mspace_realloc because
- realloced chunks from any space are handled by their originating
- spaces.
-*/
-DLMALLOC_EXPORT void* mspace_realloc(mspace msp, void* mem, size_t newsize);
-
-/*
- mspace_calloc behaves as calloc, but operates within
- the given space.
-*/
-DLMALLOC_EXPORT void* mspace_calloc(mspace msp, size_t n_elements, size_t elem_size);
-
-/*
- mspace_memalign behaves as memalign, but operates within
- the given space.
-*/
-DLMALLOC_EXPORT void* mspace_memalign(mspace msp, size_t alignment, size_t bytes);
-
-/*
- mspace_independent_calloc behaves as independent_calloc, but
- operates within the given space.
-*/
-DLMALLOC_EXPORT void** mspace_independent_calloc(mspace msp, size_t n_elements,
- size_t elem_size, void* chunks[]);
-
-/*
- mspace_independent_comalloc behaves as independent_comalloc, but
- operates within the given space.
-*/
-DLMALLOC_EXPORT void** mspace_independent_comalloc(mspace msp, size_t n_elements,
- size_t sizes[], void* chunks[]);
-
-/*
- mspace_footprint() returns the number of bytes obtained from the
- system for this space.
-*/
-DLMALLOC_EXPORT size_t mspace_footprint(mspace msp);
-
-/*
- mspace_max_footprint() returns the peak number of bytes obtained from the
- system for this space.
-*/
-DLMALLOC_EXPORT size_t mspace_max_footprint(mspace msp);
-
-
-#if !NO_MALLINFO
-/*
- mspace_mallinfo behaves as mallinfo, but reports properties of
- the given space.
-*/
-DLMALLOC_EXPORT struct mallinfo mspace_mallinfo(mspace msp);
-#endif /* NO_MALLINFO */
-
-/*
- malloc_usable_size(void* p) behaves the same as malloc_usable_size;
-*/
-DLMALLOC_EXPORT size_t mspace_usable_size(const void* mem);
-
-/*
- mspace_malloc_stats behaves as malloc_stats, but reports
- properties of the given space.
-*/
-DLMALLOC_EXPORT void mspace_malloc_stats(mspace msp);
-
-/*
- mspace_trim behaves as malloc_trim, but
- operates within the given space.
-*/
-DLMALLOC_EXPORT int mspace_trim(mspace msp, size_t pad);
-
-/*
- An alias for mallopt.
-*/
-DLMALLOC_EXPORT int mspace_mallopt(int, int);
-
-#endif /* MSPACES */
-
-#ifdef __cplusplus
-} /* end of extern "C" */
-#endif /* __cplusplus */
-
-/*
- ========================================================================
- To make a fully customizable malloc.h header file, cut everything
- above this line, put into file malloc.h, edit to suit, and #include it
- on the next line, as well as in programs that use this malloc.
- ========================================================================
-*/
-
-/* #include "malloc.h" */
-
-/*------------------------------ internal #includes ---------------------- */
-
-#ifdef _MSC_VER
-#pragma warning( disable : 4146 ) /* no "unsigned" warnings */
-#endif /* _MSC_VER */
-#if !NO_MALLOC_STATS
-#include <stdio.h> /* for printing in malloc_stats */
-#endif /* NO_MALLOC_STATS */
-#ifndef LACKS_ERRNO_H
-#include <errno.h> /* for MALLOC_FAILURE_ACTION */
-#endif /* LACKS_ERRNO_H */
-#ifdef DEBUG
-#if ABORT_ON_ASSERT_FAILURE
-#undef assert
-#define assert(x) if(!(x)) ABORT
-#else /* ABORT_ON_ASSERT_FAILURE */
-#include <assert.h>
-#endif /* ABORT_ON_ASSERT_FAILURE */
-#else /* DEBUG */
-#ifndef assert
-#define assert(x)
-#endif
-#define DEBUG 0
-#endif /* DEBUG */
-#if !defined(WIN32) && !defined(LACKS_TIME_H)
-#include <time.h> /* for magic initialization */
-#endif /* WIN32 */
-#ifndef LACKS_STDLIB_H
-#include <stdlib.h> /* for abort() */
-#endif /* LACKS_STDLIB_H */
-#ifndef LACKS_STRING_H
-#include <string.h> /* for memset etc */
-#endif /* LACKS_STRING_H */
-#if USE_BUILTIN_FFS
-#ifndef LACKS_STRINGS_H
-#include <strings.h> /* for ffs */
-#endif /* LACKS_STRINGS_H */
-#endif /* USE_BUILTIN_FFS */
-#if HAVE_MMAP
-#ifndef LACKS_SYS_MMAN_H
-/* On some versions of linux, mremap decl in mman.h needs __USE_GNU set */
-#if (defined(linux) && !defined(__USE_GNU))
-#define __USE_GNU 1
-#include <sys/mman.h> /* for mmap */
-#undef __USE_GNU
-#else
-#include <sys/mman.h> /* for mmap */
-#endif /* linux */
-#endif /* LACKS_SYS_MMAN_H */
-#ifndef LACKS_FCNTL_H
-#include <fcntl.h>
-#endif /* LACKS_FCNTL_H */
-#endif /* HAVE_MMAP */
-#ifndef LACKS_UNISTD_H
-#include <unistd.h> /* for sbrk, sysconf */
-#else /* LACKS_UNISTD_H */
-#if !defined(__FreeBSD__) && !defined(__OpenBSD__) && !defined(__NetBSD__)
-extern void* sbrk(ptrdiff_t);
-#endif /* FreeBSD etc */
-#endif /* LACKS_UNISTD_H */
-
-/* Declarations for locking */
-#if USE_LOCKS
-#ifndef WIN32
-#if defined (__SVR4) && defined (__sun) /* solaris */
-#include <thread.h>
-#elif !defined(LACKS_SCHED_H)
-#include <sched.h>
-#endif /* solaris or LACKS_SCHED_H */
-#if (defined(USE_RECURSIVE_LOCKS) && USE_RECURSIVE_LOCKS != 0) || !USE_SPIN_LOCKS
-#include <pthread.h>
-#endif /* USE_RECURSIVE_LOCKS ... */
-#elif defined(_MSC_VER)
-#ifndef _M_AMD64
-/* These are already defined on AMD64 builds */
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-LONG __cdecl _InterlockedCompareExchange(LONG volatile *Dest, LONG Exchange, LONG Comp);
-LONG __cdecl _InterlockedExchange(LONG volatile *Target, LONG Value);
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-#endif /* _M_AMD64 */
-#pragma intrinsic (_InterlockedCompareExchange)
-#pragma intrinsic (_InterlockedExchange)
-#define interlockedcompareexchange _InterlockedCompareExchange
-#define interlockedexchange _InterlockedExchange
-#elif defined(WIN32) && defined(__GNUC__)
-#define interlockedcompareexchange(a, b, c) __sync_val_compare_and_swap(a, c, b)
-#define interlockedexchange __sync_lock_test_and_set
-#endif /* Win32 */
-#else /* USE_LOCKS */
-#endif /* USE_LOCKS */
-
-#ifndef LOCK_AT_FORK
-#define LOCK_AT_FORK 0
-#endif
-
-/* Declarations for bit scanning on win32 */
-#if defined(_MSC_VER) && _MSC_VER>=1300
-#ifndef BitScanForward /* Try to avoid pulling in WinNT.h */
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-unsigned char _BitScanForward(unsigned long *index, unsigned long mask);
-unsigned char _BitScanReverse(unsigned long *index, unsigned long mask);
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#define BitScanForward _BitScanForward
-#define BitScanReverse _BitScanReverse
-#pragma intrinsic(_BitScanForward)
-#pragma intrinsic(_BitScanReverse)
-#endif /* BitScanForward */
-#endif /* defined(_MSC_VER) && _MSC_VER>=1300 */
-
-#ifndef WIN32
-#ifndef malloc_getpagesize
-# ifdef _SC_PAGESIZE /* some SVR4 systems omit an underscore */
-# ifndef _SC_PAGE_SIZE
-# define _SC_PAGE_SIZE _SC_PAGESIZE
-# endif
-# endif
-# ifdef _SC_PAGE_SIZE
-# define malloc_getpagesize sysconf(_SC_PAGE_SIZE)
-# else
-# if defined(BSD) || defined(DGUX) || defined(HAVE_GETPAGESIZE)
- extern size_t getpagesize();
-# define malloc_getpagesize getpagesize()
-# else
-# ifdef WIN32 /* use supplied emulation of getpagesize */
-# define malloc_getpagesize getpagesize()
-# else
-# ifndef LACKS_SYS_PARAM_H
-# include <sys/param.h>
-# endif
-# ifdef EXEC_PAGESIZE
-# define malloc_getpagesize EXEC_PAGESIZE
-# else
-# ifdef NBPG
-# ifndef CLSIZE
-# define malloc_getpagesize NBPG
-# else
-# define malloc_getpagesize (NBPG * CLSIZE)
-# endif
-# else
-# ifdef NBPC
-# define malloc_getpagesize NBPC
-# else
-# ifdef PAGESIZE
-# define malloc_getpagesize PAGESIZE
-# else /* just guess */
-# define malloc_getpagesize ((size_t)4096U)
-# endif
-# endif
-# endif
-# endif
-# endif
-# endif
-# endif
-#endif
-#endif
-
-/* ------------------- size_t and alignment properties -------------------- */
-
-/* The byte and bit size of a size_t */
-#define SIZE_T_SIZE (sizeof(size_t))
-#define SIZE_T_BITSIZE (sizeof(size_t) << 3)
-
-/* Some constants coerced to size_t */
-/* Annoying but necessary to avoid errors on some platforms */
-#define SIZE_T_ZERO ((size_t)0)
-#define SIZE_T_ONE ((size_t)1)
-#define SIZE_T_TWO ((size_t)2)
-#define SIZE_T_FOUR ((size_t)4)
-#define TWO_SIZE_T_SIZES (SIZE_T_SIZE<<1)
-#define FOUR_SIZE_T_SIZES (SIZE_T_SIZE<<2)
-#define SIX_SIZE_T_SIZES (FOUR_SIZE_T_SIZES+TWO_SIZE_T_SIZES)
-#define HALF_MAX_SIZE_T (MAX_SIZE_T / 2U)
-
-/* The bit mask value corresponding to MALLOC_ALIGNMENT */
-#define CHUNK_ALIGN_MASK (MALLOC_ALIGNMENT - SIZE_T_ONE)
-
-/* True if address a has acceptable alignment */
-#define is_aligned(A) (((size_t)((A)) & (CHUNK_ALIGN_MASK)) == 0)
-
-/* the number of bytes to offset an address to align it */
-#define align_offset(A)\
- ((((size_t)(A) & CHUNK_ALIGN_MASK) == 0)? 0 :\
- ((MALLOC_ALIGNMENT - ((size_t)(A) & CHUNK_ALIGN_MASK)) & CHUNK_ALIGN_MASK))
-
-/* -------------------------- MMAP preliminaries ------------------------- */
-
-/*
- If HAVE_MORECORE or HAVE_MMAP are false, we just define calls and
- checks to fail so compiler optimizer can delete code rather than
- using so many "#if"s.
-*/
-
-
-/* MORECORE and MMAP must return MFAIL on failure */
-#define MFAIL ((void*)(MAX_SIZE_T))
-#define CMFAIL ((char*)(MFAIL)) /* defined for convenience */
-
-#if HAVE_MMAP
-
-#ifndef WIN32
-#define MUNMAP_DEFAULT(a, s) munmap((a), (s))
-#define MMAP_PROT (PROT_READ|PROT_WRITE)
-#if !defined(MAP_ANONYMOUS) && defined(MAP_ANON)
-#define MAP_ANONYMOUS MAP_ANON
-#endif /* MAP_ANON */
-#ifdef MAP_ANONYMOUS
-#define MMAP_FLAGS (MAP_PRIVATE|MAP_ANONYMOUS)
-#define MMAP_DEFAULT(s) mmap(0, (s), MMAP_PROT, MMAP_FLAGS, -1, 0)
-#else /* MAP_ANONYMOUS */
-/*
- Nearly all versions of mmap support MAP_ANONYMOUS, so the following
- is unlikely to be needed, but is supplied just in case.
-*/
-#define MMAP_FLAGS (MAP_PRIVATE)
-static int dev_zero_fd = -1; /* Cached file descriptor for /dev/zero. */
-#define MMAP_DEFAULT(s) ((dev_zero_fd < 0) ? \
- (dev_zero_fd = open("/dev/zero", O_RDWR), \
- mmap(0, (s), MMAP_PROT, MMAP_FLAGS, dev_zero_fd, 0)) : \
- mmap(0, (s), MMAP_PROT, MMAP_FLAGS, dev_zero_fd, 0))
-#endif /* MAP_ANONYMOUS */
-
-#define DIRECT_MMAP_DEFAULT(s) MMAP_DEFAULT(s)
-
-#else /* WIN32 */
-
-/* Win32 MMAP via VirtualAlloc */
-static FORCEINLINE void* win32mmap(size_t size) {
- void* ptr = VirtualAlloc(0, size, MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE);
- return (ptr != 0)? ptr: MFAIL;
-}
-
-/* For direct MMAP, use MEM_TOP_DOWN to minimize interference */
-static FORCEINLINE void* win32direct_mmap(size_t size) {
- void* ptr = VirtualAlloc(0, size, MEM_RESERVE|MEM_COMMIT|MEM_TOP_DOWN,
- PAGE_READWRITE);
- return (ptr != 0)? ptr: MFAIL;
-}
-
-/* This function supports releasing coalesed segments */
-static FORCEINLINE int win32munmap(void* ptr, size_t size) {
- MEMORY_BASIC_INFORMATION minfo;
- char* cptr = (char*)ptr;
- while (size) {
- if (VirtualQuery(cptr, &minfo, sizeof(minfo)) == 0)
- return -1;
- if (minfo.BaseAddress != cptr || minfo.AllocationBase != cptr ||
- minfo.State != MEM_COMMIT || minfo.RegionSize > size)
- return -1;
- if (VirtualFree(cptr, 0, MEM_RELEASE) == 0)
- return -1;
- cptr += minfo.RegionSize;
- size -= minfo.RegionSize;
- }
- return 0;
-}
-
-#define MMAP_DEFAULT(s) win32mmap(s)
-#define MUNMAP_DEFAULT(a, s) win32munmap((a), (s))
-#define DIRECT_MMAP_DEFAULT(s) win32direct_mmap(s)
-#endif /* WIN32 */
-#endif /* HAVE_MMAP */
-
-#if HAVE_MREMAP
-#ifndef WIN32
-#define MREMAP_DEFAULT(addr, osz, nsz, mv) mremap((addr), (osz), (nsz), (mv))
-#endif /* WIN32 */
-#endif /* HAVE_MREMAP */
-
-/**
- * Define CALL_MORECORE
- */
-#if HAVE_MORECORE
- #ifdef MORECORE
- #define CALL_MORECORE(S) MORECORE(S)
- #else /* MORECORE */
- #define CALL_MORECORE(S) MORECORE_DEFAULT(S)
- #endif /* MORECORE */
-#else /* HAVE_MORECORE */
- #define CALL_MORECORE(S) MFAIL
-#endif /* HAVE_MORECORE */
-
-/**
- * Define CALL_MMAP/CALL_MUNMAP/CALL_DIRECT_MMAP
- */
-#if HAVE_MMAP
- #define USE_MMAP_BIT (SIZE_T_ONE)
-
- #ifdef MMAP
- #define CALL_MMAP(s) MMAP(s)
- #else /* MMAP */
- #define CALL_MMAP(s) MMAP_DEFAULT(s)
- #endif /* MMAP */
- #ifdef MUNMAP
- #define CALL_MUNMAP(a, s) MUNMAP((a), (s))
- #else /* MUNMAP */
- #define CALL_MUNMAP(a, s) MUNMAP_DEFAULT((a), (s))
- #endif /* MUNMAP */
- #ifdef DIRECT_MMAP
- #define CALL_DIRECT_MMAP(s) DIRECT_MMAP(s)
- #else /* DIRECT_MMAP */
- #define CALL_DIRECT_MMAP(s) DIRECT_MMAP_DEFAULT(s)
- #endif /* DIRECT_MMAP */
-#else /* HAVE_MMAP */
- #define USE_MMAP_BIT (SIZE_T_ZERO)
-
- #define MMAP(s) MFAIL
- #define MUNMAP(a, s) (-1)
- #define DIRECT_MMAP(s) MFAIL
- #define CALL_DIRECT_MMAP(s) DIRECT_MMAP(s)
- #define CALL_MMAP(s) MMAP(s)
- #define CALL_MUNMAP(a, s) MUNMAP((a), (s))
-#endif /* HAVE_MMAP */
-
-/**
- * Define CALL_MREMAP
- */
-#if HAVE_MMAP && HAVE_MREMAP
- #ifdef MREMAP
- #define CALL_MREMAP(addr, osz, nsz, mv) MREMAP((addr), (osz), (nsz), (mv))
- #else /* MREMAP */
- #define CALL_MREMAP(addr, osz, nsz, mv) MREMAP_DEFAULT((addr), (osz), (nsz), (mv))
- #endif /* MREMAP */
-#else /* HAVE_MMAP && HAVE_MREMAP */
- #define CALL_MREMAP(addr, osz, nsz, mv) MFAIL
-#endif /* HAVE_MMAP && HAVE_MREMAP */
-
-/* mstate bit set if continguous morecore disabled or failed */
-#define USE_NONCONTIGUOUS_BIT (4U)
-
-/* segment bit set in create_mspace_with_base */
-#define EXTERN_BIT (8U)
-
-
-/* --------------------------- Lock preliminaries ------------------------ */
-
-/*
- When locks are defined, there is one global lock, plus
- one per-mspace lock.
-
- The global lock_ensures that mparams.magic and other unique
- mparams values are initialized only once. It also protects
- sequences of calls to MORECORE. In many cases sys_alloc requires
- two calls, that should not be interleaved with calls by other
- threads. This does not protect against direct calls to MORECORE
- by other threads not using this lock, so there is still code to
- cope the best we can on interference.
-
- Per-mspace locks surround calls to malloc, free, etc.
- By default, locks are simple non-reentrant mutexes.
-
- Because lock-protected regions generally have bounded times, it is
- OK to use the supplied simple spinlocks. Spinlocks are likely to
- improve performance for lightly contended applications, but worsen
- performance under heavy contention.
-
- If USE_LOCKS is > 1, the definitions of lock routines here are
- bypassed, in which case you will need to define the type MLOCK_T,
- and at least INITIAL_LOCK, DESTROY_LOCK, ACQUIRE_LOCK, RELEASE_LOCK
- and TRY_LOCK. You must also declare a
- static MLOCK_T malloc_global_mutex = { initialization values };.
-
-*/
-
-#if !USE_LOCKS
-#define USE_LOCK_BIT (0U)
-#define INITIAL_LOCK(l) (0)
-#define DESTROY_LOCK(l) (0)
-#define ACQUIRE_MALLOC_GLOBAL_LOCK()
-#define RELEASE_MALLOC_GLOBAL_LOCK()
-
-#else
-#if USE_LOCKS > 1
-/* ----------------------- User-defined locks ------------------------ */
-/* Define your own lock implementation here */
-/* #define INITIAL_LOCK(lk) ... */
-/* #define DESTROY_LOCK(lk) ... */
-/* #define ACQUIRE_LOCK(lk) ... */
-/* #define RELEASE_LOCK(lk) ... */
-/* #define TRY_LOCK(lk) ... */
-/* static MLOCK_T malloc_global_mutex = ... */
-
-#elif USE_SPIN_LOCKS
-
-/* First, define CAS_LOCK and CLEAR_LOCK on ints */
-/* Note CAS_LOCK defined to return 0 on success */
-
-#if defined(__GNUC__)&& (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1))
-#define CAS_LOCK(sl) __sync_lock_test_and_set(sl, 1)
-#define CLEAR_LOCK(sl) __sync_lock_release(sl)
-
-#elif (defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)))
-/* Custom spin locks for older gcc on x86 */
-static FORCEINLINE int x86_cas_lock(int *sl) {
- int ret;
- int val = 1;
- int cmp = 0;
- __asm__ __volatile__ ("lock; cmpxchgl %1, %2"
- : "=a" (ret)
- : "r" (val), "m" (*(sl)), "0"(cmp)
- : "memory", "cc");
- return ret;
-}
-
-static FORCEINLINE void x86_clear_lock(int* sl) {
- assert(*sl != 0);
- int prev = 0;
- int ret;
- __asm__ __volatile__ ("lock; xchgl %0, %1"
- : "=r" (ret)
- : "m" (*(sl)), "0"(prev)
- : "memory");
-}
-
-#define CAS_LOCK(sl) x86_cas_lock(sl)
-#define CLEAR_LOCK(sl) x86_clear_lock(sl)
-
-#else /* Win32 MSC */
-#define CAS_LOCK(sl) interlockedexchange(sl, (LONG)1)
-#define CLEAR_LOCK(sl) interlockedexchange (sl, (LONG)0)
-
-#endif /* ... gcc spins locks ... */
-
-/* How to yield for a spin lock */
-#define SPINS_PER_YIELD 63
-#if defined(_MSC_VER)
-#define SLEEP_EX_DURATION 50 /* delay for yield/sleep */
-#define SPIN_LOCK_YIELD SleepEx(SLEEP_EX_DURATION, FALSE)
-#elif defined (__SVR4) && defined (__sun) /* solaris */
-#define SPIN_LOCK_YIELD thr_yield();
-#elif !defined(LACKS_SCHED_H)
-#define SPIN_LOCK_YIELD sched_yield();
-#else
-#define SPIN_LOCK_YIELD
-#endif /* ... yield ... */
-
-#if !defined(USE_RECURSIVE_LOCKS) || USE_RECURSIVE_LOCKS == 0
-/* Plain spin locks use single word (embedded in malloc_states) */
-static int spin_acquire_lock(int *sl) {
- int spins = 0;
- while (*(volatile int *)sl != 0 || CAS_LOCK(sl)) {
- if ((++spins & SPINS_PER_YIELD) == 0) {
- SPIN_LOCK_YIELD;
- }
- }
- return 0;
-}
-
-#define MLOCK_T int
-#define TRY_LOCK(sl) !CAS_LOCK(sl)
-#define RELEASE_LOCK(sl) CLEAR_LOCK(sl)
-#define ACQUIRE_LOCK(sl) (CAS_LOCK(sl)? spin_acquire_lock(sl) : 0)
-#define INITIAL_LOCK(sl) (*sl = 0)
-#define DESTROY_LOCK(sl) (0)
-static MLOCK_T malloc_global_mutex = 0;
-
-#else /* USE_RECURSIVE_LOCKS */
-/* types for lock owners */
-#ifdef WIN32
-#define THREAD_ID_T DWORD
-#define CURRENT_THREAD GetCurrentThreadId()
-#define EQ_OWNER(X,Y) ((X) == (Y))
-#else
-/*
- Note: the following assume that pthread_t is a type that can be
- initialized to (casted) zero. If this is not the case, you will need to
- somehow redefine these or not use spin locks.
-*/
-#define THREAD_ID_T pthread_t
-#define CURRENT_THREAD pthread_self()
-#define EQ_OWNER(X,Y) pthread_equal(X, Y)
-#endif
-
-struct malloc_recursive_lock {
- int sl;
- unsigned int c;
- THREAD_ID_T threadid;
-};
-
-#define MLOCK_T struct malloc_recursive_lock
-static MLOCK_T malloc_global_mutex = { 0, 0, (THREAD_ID_T)0};
-
-static FORCEINLINE void recursive_release_lock(MLOCK_T *lk) {
- assert(lk->sl != 0);
- if (--lk->c == 0) {
- CLEAR_LOCK(&lk->sl);
- }
-}
-
-static FORCEINLINE int recursive_acquire_lock(MLOCK_T *lk) {
- THREAD_ID_T mythreadid = CURRENT_THREAD;
- int spins = 0;
- for (;;) {
- if (*((volatile int *)(&lk->sl)) == 0) {
- if (!CAS_LOCK(&lk->sl)) {
- lk->threadid = mythreadid;
- lk->c = 1;
- return 0;
- }
- }
- else if (EQ_OWNER(lk->threadid, mythreadid)) {
- ++lk->c;
- return 0;
- }
- if ((++spins & SPINS_PER_YIELD) == 0) {
- SPIN_LOCK_YIELD;
- }
- }
-}
-
-static FORCEINLINE int recursive_try_lock(MLOCK_T *lk) {
- THREAD_ID_T mythreadid = CURRENT_THREAD;
- if (*((volatile int *)(&lk->sl)) == 0) {
- if (!CAS_LOCK(&lk->sl)) {
- lk->threadid = mythreadid;
- lk->c = 1;
- return 1;
- }
- }
- else if (EQ_OWNER(lk->threadid, mythreadid)) {
- ++lk->c;
- return 1;
- }
- return 0;
-}
-
-#define RELEASE_LOCK(lk) recursive_release_lock(lk)
-#define TRY_LOCK(lk) recursive_try_lock(lk)
-#define ACQUIRE_LOCK(lk) recursive_acquire_lock(lk)
-#define INITIAL_LOCK(lk) ((lk)->threadid = (THREAD_ID_T)0, (lk)->sl = 0, (lk)->c = 0)
-#define DESTROY_LOCK(lk) (0)
-#endif /* USE_RECURSIVE_LOCKS */
-
-#elif defined(WIN32) /* Win32 critical sections */
-#define MLOCK_T CRITICAL_SECTION
-#define ACQUIRE_LOCK(lk) (EnterCriticalSection(lk), 0)
-#define RELEASE_LOCK(lk) LeaveCriticalSection(lk)
-#define TRY_LOCK(lk) TryEnterCriticalSection(lk)
-#define INITIAL_LOCK(lk) (!InitializeCriticalSectionAndSpinCount((lk), 0x80000000|4000))
-#define DESTROY_LOCK(lk) (DeleteCriticalSection(lk), 0)
-#define NEED_GLOBAL_LOCK_INIT
-
-static MLOCK_T malloc_global_mutex;
-static volatile LONG malloc_global_mutex_status;
-
-/* Use spin loop to initialize global lock */
-static void init_malloc_global_mutex() {
- for (;;) {
- long stat = malloc_global_mutex_status;
- if (stat > 0)
- return;
- /* transition to < 0 while initializing, then to > 0) */
- if (stat == 0 &&
- interlockedcompareexchange(&malloc_global_mutex_status, (LONG)-1, (LONG)0) == 0) {
- InitializeCriticalSection(&malloc_global_mutex);
- interlockedexchange(&malloc_global_mutex_status, (LONG)1);
- return;
- }
- SleepEx(0, FALSE);
- }
-}
-
-#else /* pthreads-based locks */
-#define MLOCK_T pthread_mutex_t
-#define ACQUIRE_LOCK(lk) pthread_mutex_lock(lk)
-#define RELEASE_LOCK(lk) pthread_mutex_unlock(lk)
-#define TRY_LOCK(lk) (!pthread_mutex_trylock(lk))
-#define INITIAL_LOCK(lk) pthread_init_lock(lk)
-#define DESTROY_LOCK(lk) pthread_mutex_destroy(lk)
-
-#if defined(USE_RECURSIVE_LOCKS) && USE_RECURSIVE_LOCKS != 0 && defined(linux) && !defined(PTHREAD_MUTEX_RECURSIVE)
-/* Cope with old-style linux recursive lock initialization by adding */
-/* skipped internal declaration from pthread.h */
-extern int pthread_mutexattr_setkind_np __P ((pthread_mutexattr_t *__attr,
- int __kind));
-#define PTHREAD_MUTEX_RECURSIVE PTHREAD_MUTEX_RECURSIVE_NP
-#define pthread_mutexattr_settype(x,y) pthread_mutexattr_setkind_np(x,y)
-#endif /* USE_RECURSIVE_LOCKS ... */
-
-static MLOCK_T malloc_global_mutex = PTHREAD_MUTEX_INITIALIZER;
-
-static int pthread_init_lock (MLOCK_T *lk) {
- pthread_mutexattr_t attr;
- if (pthread_mutexattr_init(&attr)) return 1;
-#if defined(USE_RECURSIVE_LOCKS) && USE_RECURSIVE_LOCKS != 0
- if (pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE)) return 1;
-#endif
- if (pthread_mutex_init(lk, &attr)) return 1;
- if (pthread_mutexattr_destroy(&attr)) return 1;
- return 0;
-}
-
-#endif /* ... lock types ... */
-
-/* Common code for all lock types */
-#define USE_LOCK_BIT (2U)
-
-#ifndef ACQUIRE_MALLOC_GLOBAL_LOCK
-#define ACQUIRE_MALLOC_GLOBAL_LOCK() ACQUIRE_LOCK(&malloc_global_mutex);
-#endif
-
-#ifndef RELEASE_MALLOC_GLOBAL_LOCK
-#define RELEASE_MALLOC_GLOBAL_LOCK() RELEASE_LOCK(&malloc_global_mutex);
-#endif
-
-#endif /* USE_LOCKS */
-
-/* ----------------------- Chunk representations ------------------------ */
-
-/*
- (The following includes lightly edited explanations by Colin Plumb.)
-
- The malloc_chunk declaration below is misleading (but accurate and
- necessary). It declares a "view" into memory allowing access to
- necessary fields at known offsets from a given base.
-
- Chunks of memory are maintained using a `boundary tag' method as
- originally described by Knuth. (See the paper by Paul Wilson
- ftp://ftp.cs.utexas.edu/pub/garbage/allocsrv.ps for a survey of such
- techniques.) Sizes of free chunks are stored both in the front of
- each chunk and at the end. This makes consolidating fragmented
- chunks into bigger chunks fast. The head fields also hold bits
- representing whether chunks are free or in use.
-
- Here are some pictures to make it clearer. They are "exploded" to
- show that the state of a chunk can be thought of as extending from
- the high 31 bits of the head field of its header through the
- prev_foot and PINUSE_BIT bit of the following chunk header.
-
- A chunk that's in use looks like:
-
- chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | Size of previous chunk (if P = 0) |
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |P|
- | Size of this chunk 1| +-+
- mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | |
- +- -+
- | |
- +- -+
- | :
- +- size - sizeof(size_t) available payload bytes -+
- : |
- chunk-> +- -+
- | |
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |1|
- | Size of next chunk (may or may not be in use) | +-+
- mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
- And if it's free, it looks like this:
-
- chunk-> +- -+
- | User payload (must be in use, or we would have merged!) |
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |P|
- | Size of this chunk 0| +-+
- mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | Next pointer |
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | Prev pointer |
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | :
- +- size - sizeof(struct chunk) unused bytes -+
- : |
- chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | Size of this chunk |
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |0|
- | Size of next chunk (must be in use, or we would have merged)| +-+
- mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | :
- +- User payload -+
- : |
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- |0|
- +-+
- Note that since we always merge adjacent free chunks, the chunks
- adjacent to a free chunk must be in use.
-
- Given a pointer to a chunk (which can be derived trivially from the
- payload pointer) we can, in O(1) time, find out whether the adjacent
- chunks are free, and if so, unlink them from the lists that they
- are on and merge them with the current chunk.
-
- Chunks always begin on even word boundaries, so the mem portion
- (which is returned to the user) is also on an even word boundary, and
- thus at least double-word aligned.
-
- The P (PINUSE_BIT) bit, stored in the unused low-order bit of the
- chunk size (which is always a multiple of two words), is an in-use
- bit for the *previous* chunk. If that bit is *clear*, then the
- word before the current chunk size contains the previous chunk
- size, and can be used to find the front of the previous chunk.
- The very first chunk allocated always has this bit set, preventing
- access to non-existent (or non-owned) memory. If pinuse is set for
- any given chunk, then you CANNOT determine the size of the
- previous chunk, and might even get a memory addressing fault when
- trying to do so.
-
- The C (CINUSE_BIT) bit, stored in the unused second-lowest bit of
- the chunk size redundantly records whether the current chunk is
- inuse (unless the chunk is mmapped). This redundancy enables usage
- checks within free and realloc, and reduces indirection when freeing
- and consolidating chunks.
-
- Each freshly allocated chunk must have both cinuse and pinuse set.
- That is, each allocated chunk borders either a previously allocated
- and still in-use chunk, or the base of its memory arena. This is
- ensured by making all allocations from the `lowest' part of any
- found chunk. Further, no free chunk physically borders another one,
- so each free chunk is known to be preceded and followed by either
- inuse chunks or the ends of memory.
-
- Note that the `foot' of the current chunk is actually represented
- as the prev_foot of the NEXT chunk. This makes it easier to
- deal with alignments etc but can be very confusing when trying
- to extend or adapt this code.
-
- The exceptions to all this are
-
- 1. The special chunk `top' is the top-most available chunk (i.e.,
- the one bordering the end of available memory). It is treated
- specially. Top is never included in any bin, is used only if
- no other chunk is available, and is released back to the
- system if it is very large (see M_TRIM_THRESHOLD). In effect,
- the top chunk is treated as larger (and thus less well
- fitting) than any other available chunk. The top chunk
- doesn't update its trailing size field since there is no next
- contiguous chunk that would have to index off it. However,
- space is still allocated for it (TOP_FOOT_SIZE) to enable
- separation or merging when space is extended.
-
- 3. Chunks allocated via mmap, have both cinuse and pinuse bits
- cleared in their head fields. Because they are allocated
- one-by-one, each must carry its own prev_foot field, which is
- also used to hold the offset this chunk has within its mmapped
- region, which is needed to preserve alignment. Each mmapped
- chunk is trailed by the first two fields of a fake next-chunk
- for sake of usage checks.
-
-*/
-
-struct malloc_chunk {
- size_t prev_foot; /* Size of previous chunk (if free). */
- size_t head; /* Size and inuse bits. */
- struct malloc_chunk* fd; /* double links -- used only if free. */
- struct malloc_chunk* bk;
-};
-
-typedef struct malloc_chunk mchunk;
-typedef struct malloc_chunk* mchunkptr;
-typedef struct malloc_chunk* sbinptr; /* The type of bins of chunks */
-typedef unsigned int bindex_t; /* Described below */
-typedef unsigned int binmap_t; /* Described below */
-typedef unsigned int flag_t; /* The type of various bit flag sets */
-
-/* ------------------- Chunks sizes and alignments ----------------------- */
-
-#define MCHUNK_SIZE (sizeof(mchunk))
-
-#if FOOTERS
-#define CHUNK_OVERHEAD (TWO_SIZE_T_SIZES)
-#else /* FOOTERS */
-#define CHUNK_OVERHEAD (SIZE_T_SIZE)
-#endif /* FOOTERS */
-
-/* MMapped chunks need a second word of overhead ... */
-#define MMAP_CHUNK_OVERHEAD (TWO_SIZE_T_SIZES)
-/* ... and additional padding for fake next-chunk at foot */
-#define MMAP_FOOT_PAD (FOUR_SIZE_T_SIZES)
-
-/* The smallest size we can malloc is an aligned minimal chunk */
-#define MIN_CHUNK_SIZE\
- ((MCHUNK_SIZE + CHUNK_ALIGN_MASK) & ~CHUNK_ALIGN_MASK)
-
-/* conversion from malloc headers to user pointers, and back */
-#define chunk2mem(p) ((void*)((char*)(p) + TWO_SIZE_T_SIZES))
-#define mem2chunk(mem) ((mchunkptr)((char*)(mem) - TWO_SIZE_T_SIZES))
-/* chunk associated with aligned address A */
-#define align_as_chunk(A) (mchunkptr)((A) + align_offset(chunk2mem(A)))
-
-/* Bounds on request (not chunk) sizes. */
-#define MAX_REQUEST ((-MIN_CHUNK_SIZE) << 2)
-#define MIN_REQUEST (MIN_CHUNK_SIZE - CHUNK_OVERHEAD - SIZE_T_ONE)
-
-/* pad request bytes into a usable size */
-#define pad_request(req) \
- (((req) + CHUNK_OVERHEAD + CHUNK_ALIGN_MASK) & ~CHUNK_ALIGN_MASK)
-
-/* pad request, checking for minimum (but not maximum) */
-#define request2size(req) \
- (((req) < MIN_REQUEST)? MIN_CHUNK_SIZE : pad_request(req))
-
-
-/* ------------------ Operations on head and foot fields ----------------- */
-
-/*
- The head field of a chunk is or'ed with PINUSE_BIT when previous
- adjacent chunk in use, and or'ed with CINUSE_BIT if this chunk is in
- use, unless mmapped, in which case both bits are cleared.
-
- FLAG4_BIT is not used by this malloc, but might be useful in extensions.
-*/
-
-#define PINUSE_BIT (SIZE_T_ONE)
-#define CINUSE_BIT (SIZE_T_TWO)
-#define FLAG4_BIT (SIZE_T_FOUR)
-#define INUSE_BITS (PINUSE_BIT|CINUSE_BIT)
-#define FLAG_BITS (PINUSE_BIT|CINUSE_BIT|FLAG4_BIT)
-
-/* Head value for fenceposts */
-#define FENCEPOST_HEAD (INUSE_BITS|SIZE_T_SIZE)
-
-/* extraction of fields from head words */
-#define cinuse(p) ((p)->head & CINUSE_BIT)
-#define pinuse(p) ((p)->head & PINUSE_BIT)
-#define flag4inuse(p) ((p)->head & FLAG4_BIT)
-#define is_inuse(p) (((p)->head & INUSE_BITS) != PINUSE_BIT)
-#define is_mmapped(p) (((p)->head & INUSE_BITS) == 0)
-
-#define chunksize(p) ((p)->head & ~(FLAG_BITS))
-
-#define clear_pinuse(p) ((p)->head &= ~PINUSE_BIT)
-#define set_flag4(p) ((p)->head |= FLAG4_BIT)
-#define clear_flag4(p) ((p)->head &= ~FLAG4_BIT)
-
-/* Treat space at ptr +/- offset as a chunk */
-#define chunk_plus_offset(p, s) ((mchunkptr)(((char*)(p)) + (s)))
-#define chunk_minus_offset(p, s) ((mchunkptr)(((char*)(p)) - (s)))
-
-/* Ptr to next or previous physical malloc_chunk. */
-#define next_chunk(p) ((mchunkptr)( ((char*)(p)) + ((p)->head & ~FLAG_BITS)))
-#define prev_chunk(p) ((mchunkptr)( ((char*)(p)) - ((p)->prev_foot) ))
-
-/* extract next chunk's pinuse bit */
-#define next_pinuse(p) ((next_chunk(p)->head) & PINUSE_BIT)
-
-/* Get/set size at footer */
-#define get_foot(p, s) (((mchunkptr)((char*)(p) + (s)))->prev_foot)
-#define set_foot(p, s) (((mchunkptr)((char*)(p) + (s)))->prev_foot = (s))
-
-/* Set size, pinuse bit, and foot */
-#define set_size_and_pinuse_of_free_chunk(p, s)\
- ((p)->head = (s|PINUSE_BIT), set_foot(p, s))
-
-/* Set size, pinuse bit, foot, and clear next pinuse */
-#define set_free_with_pinuse(p, s, n)\
- (clear_pinuse(n), set_size_and_pinuse_of_free_chunk(p, s))
-
-/* Get the internal overhead associated with chunk p */
-#define overhead_for(p)\
- (is_mmapped(p)? MMAP_CHUNK_OVERHEAD : CHUNK_OVERHEAD)
-
-/* Return true if malloced space is not necessarily cleared */
-#if MMAP_CLEARS
-#define calloc_must_clear(p) (!is_mmapped(p))
-#else /* MMAP_CLEARS */
-#define calloc_must_clear(p) (1)
-#endif /* MMAP_CLEARS */
-
-/* ---------------------- Overlaid data structures ----------------------- */
-
-/*
- When chunks are not in use, they are treated as nodes of either
- lists or trees.
-
- "Small" chunks are stored in circular doubly-linked lists, and look
- like this:
-
- chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | Size of previous chunk |
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- `head:' | Size of chunk, in bytes |P|
- mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | Forward pointer to next chunk in list |
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | Back pointer to previous chunk in list |
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | Unused space (may be 0 bytes long) .
- . .
- . |
-nextchunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- `foot:' | Size of chunk, in bytes |
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
- Larger chunks are kept in a form of bitwise digital trees (aka
- tries) keyed on chunksizes. Because malloc_tree_chunks are only for
- free chunks greater than 256 bytes, their size doesn't impose any
- constraints on user chunk sizes. Each node looks like:
-
- chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | Size of previous chunk |
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- `head:' | Size of chunk, in bytes |P|
- mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | Forward pointer to next chunk of same size |
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | Back pointer to previous chunk of same size |
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | Pointer to left child (child[0]) |
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | Pointer to right child (child[1]) |
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | Pointer to parent |
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | bin index of this chunk |
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | Unused space .
- . |
-nextchunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- `foot:' | Size of chunk, in bytes |
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
- Each tree holding treenodes is a tree of unique chunk sizes. Chunks
- of the same size are arranged in a circularly-linked list, with only
- the oldest chunk (the next to be used, in our FIFO ordering)
- actually in the tree. (Tree members are distinguished by a non-null
- parent pointer.) If a chunk with the same size an an existing node
- is inserted, it is linked off the existing node using pointers that
- work in the same way as fd/bk pointers of small chunks.
-
- Each tree contains a power of 2 sized range of chunk sizes (the
- smallest is 0x100 <= x < 0x180), which is is divided in half at each
- tree level, with the chunks in the smaller half of the range (0x100
- <= x < 0x140 for the top nose) in the left subtree and the larger
- half (0x140 <= x < 0x180) in the right subtree. This is, of course,
- done by inspecting individual bits.
-
- Using these rules, each node's left subtree contains all smaller
- sizes than its right subtree. However, the node at the root of each
- subtree has no particular ordering relationship to either. (The
- dividing line between the subtree sizes is based on trie relation.)
- If we remove the last chunk of a given size from the interior of the
- tree, we need to replace it with a leaf node. The tree ordering
- rules permit a node to be replaced by any leaf below it.
-
- The smallest chunk in a tree (a common operation in a best-fit
- allocator) can be found by walking a path to the leftmost leaf in
- the tree. Unlike a usual binary tree, where we follow left child
- pointers until we reach a null, here we follow the right child
- pointer any time the left one is null, until we reach a leaf with
- both child pointers null. The smallest chunk in the tree will be
- somewhere along that path.
-
- The worst case number of steps to add, find, or remove a node is
- bounded by the number of bits differentiating chunks within
- bins. Under current bin calculations, this ranges from 6 up to 21
- (for 32 bit sizes) or up to 53 (for 64 bit sizes). The typical case
- is of course much better.
-*/
-
-struct malloc_tree_chunk {
- /* The first four fields must be compatible with malloc_chunk */
- size_t prev_foot;
- size_t head;
- struct malloc_tree_chunk* fd;
- struct malloc_tree_chunk* bk;
-
- struct malloc_tree_chunk* child[2];
- struct malloc_tree_chunk* parent;
- bindex_t index;
-};
-
-typedef struct malloc_tree_chunk tchunk;
-typedef struct malloc_tree_chunk* tchunkptr;
-typedef struct malloc_tree_chunk* tbinptr; /* The type of bins of trees */
-
-/* A little helper macro for trees */
-#define leftmost_child(t) ((t)->child[0] != 0? (t)->child[0] : (t)->child[1])
-
-/* ----------------------------- Segments -------------------------------- */
-
-/*
- Each malloc space may include non-contiguous segments, held in a
- list headed by an embedded malloc_segment record representing the
- top-most space. Segments also include flags holding properties of
- the space. Large chunks that are directly allocated by mmap are not
- included in this list. They are instead independently created and
- destroyed without otherwise keeping track of them.
-
- Segment management mainly comes into play for spaces allocated by
- MMAP. Any call to MMAP might or might not return memory that is
- adjacent to an existing segment. MORECORE normally contiguously
- extends the current space, so this space is almost always adjacent,
- which is simpler and faster to deal with. (This is why MORECORE is
- used preferentially to MMAP when both are available -- see
- sys_alloc.) When allocating using MMAP, we don't use any of the
- hinting mechanisms (inconsistently) supported in various
- implementations of unix mmap, or distinguish reserving from
- committing memory. Instead, we just ask for space, and exploit
- contiguity when we get it. It is probably possible to do
- better than this on some systems, but no general scheme seems
- to be significantly better.
-
- Management entails a simpler variant of the consolidation scheme
- used for chunks to reduce fragmentation -- new adjacent memory is
- normally prepended or appended to an existing segment. However,
- there are limitations compared to chunk consolidation that mostly
- reflect the fact that segment processing is relatively infrequent
- (occurring only when getting memory from system) and that we
- don't expect to have huge numbers of segments:
-
- * Segments are not indexed, so traversal requires linear scans. (It
- would be possible to index these, but is not worth the extra
- overhead and complexity for most programs on most platforms.)
- * New segments are only appended to old ones when holding top-most
- memory; if they cannot be prepended to others, they are held in
- different segments.
-
- Except for the top-most segment of an mstate, each segment record
- is kept at the tail of its segment. Segments are added by pushing
- segment records onto the list headed by &mstate.seg for the
- containing mstate.
-
- Segment flags control allocation/merge/deallocation policies:
- * If EXTERN_BIT set, then we did not allocate this segment,
- and so should not try to deallocate or merge with others.
- (This currently holds only for the initial segment passed
- into create_mspace_with_base.)
- * If USE_MMAP_BIT set, the segment may be merged with
- other surrounding mmapped segments and trimmed/de-allocated
- using munmap.
- * If neither bit is set, then the segment was obtained using
- MORECORE so can be merged with surrounding MORECORE'd segments
- and deallocated/trimmed using MORECORE with negative arguments.
-*/
-
-struct malloc_segment {
- char* base; /* base address */
- size_t size; /* allocated size */
- struct malloc_segment* next; /* ptr to next segment */
- flag_t sflags; /* mmap and extern flag */
-};
-
-#define is_mmapped_segment(S) ((S)->sflags & USE_MMAP_BIT)
-#define is_extern_segment(S) ((S)->sflags & EXTERN_BIT)
-
-typedef struct malloc_segment msegment;
-typedef struct malloc_segment* msegmentptr;
-
-/* ---------------------------- malloc_state ----------------------------- */
-
-/*
- A malloc_state holds all of the bookkeeping for a space.
- The main fields are:
-
- Top
- The topmost chunk of the currently active segment. Its size is
- cached in topsize. The actual size of topmost space is
- topsize+TOP_FOOT_SIZE, which includes space reserved for adding
- fenceposts and segment records if necessary when getting more
- space from the system. The size at which to autotrim top is
- cached from mparams in trim_check, except that it is disabled if
- an autotrim fails.
-
- Designated victim (dv)
- This is the preferred chunk for servicing small requests that
- don't have exact fits. It is normally the chunk split off most
- recently to service another small request. Its size is cached in
- dvsize. The link fields of this chunk are not maintained since it
- is not kept in a bin.
-
- SmallBins
- An array of bin headers for free chunks. These bins hold chunks
- with sizes less than MIN_LARGE_SIZE bytes. Each bin contains
- chunks of all the same size, spaced 8 bytes apart. To simplify
- use in double-linked lists, each bin header acts as a malloc_chunk
- pointing to the real first node, if it exists (else pointing to
- itself). This avoids special-casing for headers. But to avoid
- waste, we allocate only the fd/bk pointers of bins, and then use
- repositioning tricks to treat these as the fields of a chunk.
-
- TreeBins
- Treebins are pointers to the roots of trees holding a range of
- sizes. There are 2 equally spaced treebins for each power of two
- from TREE_SHIFT to TREE_SHIFT+16. The last bin holds anything
- larger.
-
- Bin maps
- There is one bit map for small bins ("smallmap") and one for
- treebins ("treemap). Each bin sets its bit when non-empty, and
- clears the bit when empty. Bit operations are then used to avoid
- bin-by-bin searching -- nearly all "search" is done without ever
- looking at bins that won't be selected. The bit maps
- conservatively use 32 bits per map word, even if on 64bit system.
- For a good description of some of the bit-based techniques used
- here, see Henry S. Warren Jr's book "Hacker's Delight" (and
- supplement at http://hackersdelight.org/). Many of these are
- intended to reduce the branchiness of paths through malloc etc, as
- well as to reduce the number of memory locations read or written.
-
- Segments
- A list of segments headed by an embedded malloc_segment record
- representing the initial space.
-
- Address check support
- The least_addr field is the least address ever obtained from
- MORECORE or MMAP. Attempted frees and reallocs of any address less
- than this are trapped (unless INSECURE is defined).
-
- Magic tag
- A cross-check field that should always hold same value as mparams.magic.
-
- Max allowed footprint
- The maximum allowed bytes to allocate from system (zero means no limit)
-
- Flags
- Bits recording whether to use MMAP, locks, or contiguous MORECORE
-
- Statistics
- Each space keeps track of current and maximum system memory
- obtained via MORECORE or MMAP.
-
- Trim support
- Fields holding the amount of unused topmost memory that should trigger
- trimming, and a counter to force periodic scanning to release unused
- non-topmost segments.
-
- Locking
- If USE_LOCKS is defined, the "mutex" lock is acquired and released
- around every public call using this mspace.
-
- Extension support
- A void* pointer and a size_t field that can be used to help implement
- extensions to this malloc.
-*/
-
-/* Bin types, widths and sizes */
-#define NSMALLBINS (32U)
-#define NTREEBINS (32U)
-#define SMALLBIN_SHIFT (3U)
-#define SMALLBIN_WIDTH (SIZE_T_ONE << SMALLBIN_SHIFT)
-#define TREEBIN_SHIFT (8U)
-#define MIN_LARGE_SIZE (SIZE_T_ONE << TREEBIN_SHIFT)
-#define MAX_SMALL_SIZE (MIN_LARGE_SIZE - SIZE_T_ONE)
-#define MAX_SMALL_REQUEST (MAX_SMALL_SIZE - CHUNK_ALIGN_MASK - CHUNK_OVERHEAD)
-
-struct malloc_state {
- binmap_t smallmap;
- binmap_t treemap;
- size_t dvsize;
- size_t topsize;
- char* least_addr;
- mchunkptr dv;
- mchunkptr top;
- size_t trim_check;
- size_t release_checks;
- size_t magic;
- mchunkptr smallbins[(NSMALLBINS+1)*2];
- tbinptr treebins[NTREEBINS];
- size_t footprint;
- size_t max_footprint;
- size_t footprint_limit; /* zero means no limit */
- flag_t mflags;
-#if USE_LOCKS
- MLOCK_T mutex; /* locate lock among fields that rarely change */
-#endif /* USE_LOCKS */
- msegment seg;
- void* extp; /* Unused but available for extensions */
- size_t exts;
-};
-
-typedef struct malloc_state* mstate;
-
-/* ------------- Global malloc_state and malloc_params ------------------- */
-
-/*
- malloc_params holds global properties, including those that can be
- dynamically set using mallopt. There is a single instance, mparams,
- initialized in init_mparams. Note that the non-zeroness of "magic"
- also serves as an initialization flag.
-*/
-
-struct malloc_params {
- size_t magic;
- size_t page_size;
- size_t granularity;
- size_t mmap_threshold;
- size_t trim_threshold;
- flag_t default_mflags;
-};
-
-static struct malloc_params mparams;
-
-/* Ensure mparams initialized */
-#define ensure_initialization() (void)(mparams.magic != 0 || init_mparams())
-
-#if !ONLY_MSPACES
-
-/* The global malloc_state used for all non-"mspace" calls */
-static struct malloc_state _gm_;
-#define gm (&_gm_)
-#define is_global(M) ((M) == &_gm_)
-
-#endif /* !ONLY_MSPACES */
-
-#define is_initialized(M) ((M)->top != 0)
-
-/* -------------------------- system alloc setup ------------------------- */
-
-/* Operations on mflags */
-
-#define use_lock(M) ((M)->mflags & USE_LOCK_BIT)
-#define enable_lock(M) ((M)->mflags |= USE_LOCK_BIT)
-#if USE_LOCKS
-#define disable_lock(M) ((M)->mflags &= ~USE_LOCK_BIT)
-#else
-#define disable_lock(M)
-#endif
-
-#define use_mmap(M) ((M)->mflags & USE_MMAP_BIT)
-#define enable_mmap(M) ((M)->mflags |= USE_MMAP_BIT)
-#if HAVE_MMAP
-#define disable_mmap(M) ((M)->mflags &= ~USE_MMAP_BIT)
-#else
-#define disable_mmap(M)
-#endif
-
-#define use_noncontiguous(M) ((M)->mflags & USE_NONCONTIGUOUS_BIT)
-#define disable_contiguous(M) ((M)->mflags |= USE_NONCONTIGUOUS_BIT)
-
-#define set_lock(M,L)\
- ((M)->mflags = (L)?\
- ((M)->mflags | USE_LOCK_BIT) :\
- ((M)->mflags & ~USE_LOCK_BIT))
-
-/* page-align a size */
-#define page_align(S)\
- (((S) + (mparams.page_size - SIZE_T_ONE)) & ~(mparams.page_size - SIZE_T_ONE))
-
-/* granularity-align a size */
-#define granularity_align(S)\
- (((S) + (mparams.granularity - SIZE_T_ONE))\
- & ~(mparams.granularity - SIZE_T_ONE))
-
-
-/* For mmap, use granularity alignment on windows, else page-align */
-#ifdef WIN32
-#define mmap_align(S) granularity_align(S)
-#else
-#define mmap_align(S) page_align(S)
-#endif
-
-/* For sys_alloc, enough padding to ensure can malloc request on success */
-#define SYS_ALLOC_PADDING (TOP_FOOT_SIZE + MALLOC_ALIGNMENT)
-
-#define is_page_aligned(S)\
- (((size_t)(S) & (mparams.page_size - SIZE_T_ONE)) == 0)
-#define is_granularity_aligned(S)\
- (((size_t)(S) & (mparams.granularity - SIZE_T_ONE)) == 0)
-
-/* True if segment S holds address A */
-#define segment_holds(S, A)\
- ((char*)(A) >= S->base && (char*)(A) < S->base + S->size)
-
-/* Return segment holding given address */
-static msegmentptr segment_holding(mstate m, char* addr) {
- msegmentptr sp = &m->seg;
- for (;;) {
- if (addr >= sp->base && addr < sp->base + sp->size)
- return sp;
- if ((sp = sp->next) == 0)
- return 0;
- }
-}
-
-/* Return true if segment contains a segment link */
-static int has_segment_link(mstate m, msegmentptr ss) {
- msegmentptr sp = &m->seg;
- for (;;) {
- if ((char*)sp >= ss->base && (char*)sp < ss->base + ss->size)
- return 1;
- if ((sp = sp->next) == 0)
- return 0;
- }
-}
-
-#ifndef MORECORE_CANNOT_TRIM
-#define should_trim(M,s) ((s) > (M)->trim_check)
-#else /* MORECORE_CANNOT_TRIM */
-#define should_trim(M,s) (0)
-#endif /* MORECORE_CANNOT_TRIM */
-
-/*
- TOP_FOOT_SIZE is padding at the end of a segment, including space
- that may be needed to place segment records and fenceposts when new
- noncontiguous segments are added.
-*/
-#define TOP_FOOT_SIZE\
- (align_offset(chunk2mem(0))+pad_request(sizeof(struct malloc_segment))+MIN_CHUNK_SIZE)
-
-
-/* ------------------------------- Hooks -------------------------------- */
-
-/*
- PREACTION should be defined to return 0 on success, and nonzero on
- failure. If you are not using locking, you can redefine these to do
- anything you like.
-*/
-
-#if USE_LOCKS
-#define PREACTION(M) ((use_lock(M))? ACQUIRE_LOCK(&(M)->mutex) : 0)
-#define POSTACTION(M) { if (use_lock(M)) RELEASE_LOCK(&(M)->mutex); }
-#else /* USE_LOCKS */
-
-#ifndef PREACTION
-#define PREACTION(M) (0)
-#endif /* PREACTION */
-
-#ifndef POSTACTION
-#define POSTACTION(M)
-#endif /* POSTACTION */
-
-#endif /* USE_LOCKS */
-
-/*
- CORRUPTION_ERROR_ACTION is triggered upon detected bad addresses.
- USAGE_ERROR_ACTION is triggered on detected bad frees and
- reallocs. The argument p is an address that might have triggered the
- fault. It is ignored by the two predefined actions, but might be
- useful in custom actions that try to help diagnose errors.
-*/
-
-#if PROCEED_ON_ERROR
-
-/* A count of the number of corruption errors causing resets */
-int malloc_corruption_error_count;
-
-/* default corruption action */
-static void reset_on_error(mstate m);
-
-#define CORRUPTION_ERROR_ACTION(m) reset_on_error(m)
-#define USAGE_ERROR_ACTION(m, p)
-
-#else /* PROCEED_ON_ERROR */
-
-#ifndef CORRUPTION_ERROR_ACTION
-#define CORRUPTION_ERROR_ACTION(m) ABORT
-#endif /* CORRUPTION_ERROR_ACTION */
-
-#ifndef USAGE_ERROR_ACTION
-#define USAGE_ERROR_ACTION(m,p) ABORT
-#endif /* USAGE_ERROR_ACTION */
-
-#endif /* PROCEED_ON_ERROR */
-
-
-/* -------------------------- Debugging setup ---------------------------- */
-
-#if ! DEBUG
-
-#define check_free_chunk(M,P)
-#define check_inuse_chunk(M,P)
-#define check_malloced_chunk(M,P,N)
-#define check_mmapped_chunk(M,P)
-#define check_malloc_state(M)
-#define check_top_chunk(M,P)
-
-#else /* DEBUG */
-#define check_free_chunk(M,P) do_check_free_chunk(M,P)
-#define check_inuse_chunk(M,P) do_check_inuse_chunk(M,P)
-#define check_top_chunk(M,P) do_check_top_chunk(M,P)
-#define check_malloced_chunk(M,P,N) do_check_malloced_chunk(M,P,N)
-#define check_mmapped_chunk(M,P) do_check_mmapped_chunk(M,P)
-#define check_malloc_state(M) do_check_malloc_state(M)
-
-static void do_check_any_chunk(mstate m, mchunkptr p);
-static void do_check_top_chunk(mstate m, mchunkptr p);
-static void do_check_mmapped_chunk(mstate m, mchunkptr p);
-static void do_check_inuse_chunk(mstate m, mchunkptr p);
-static void do_check_free_chunk(mstate m, mchunkptr p);
-static void do_check_malloced_chunk(mstate m, void* mem, size_t s);
-static void do_check_tree(mstate m, tchunkptr t);
-static void do_check_treebin(mstate m, bindex_t i);
-static void do_check_smallbin(mstate m, bindex_t i);
-static void do_check_malloc_state(mstate m);
-static int bin_find(mstate m, mchunkptr x);
-static size_t traverse_and_check(mstate m);
-#endif /* DEBUG */
-
-/* ---------------------------- Indexing Bins ---------------------------- */
-
-#define is_small(s) (((s) >> SMALLBIN_SHIFT) < NSMALLBINS)
-#define small_index(s) (bindex_t)((s) >> SMALLBIN_SHIFT)
-#define small_index2size(i) ((i) << SMALLBIN_SHIFT)
-#define MIN_SMALL_INDEX (small_index(MIN_CHUNK_SIZE))
-
-/* addressing by index. See above about smallbin repositioning */
-#define smallbin_at(M, i) ((sbinptr)((char*)&((M)->smallbins[(i)<<1])))
-#define treebin_at(M,i) (&((M)->treebins[i]))
-
-/* assign tree index for size S to variable I. Use x86 asm if possible */
-#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
-#define compute_tree_index(S, I)\
-{\
- unsigned int X = S >> TREEBIN_SHIFT;\
- if (X == 0)\
- I = 0;\
- else if (X > 0xFFFF)\
- I = NTREEBINS-1;\
- else {\
- unsigned int K = (unsigned) sizeof(X)*__CHAR_BIT__ - 1 - (unsigned) __builtin_clz(X); \
- I = (bindex_t)((K << 1) + ((S >> (K + (TREEBIN_SHIFT-1)) & 1)));\
- }\
-}
-
-#elif defined (__INTEL_COMPILER)
-#define compute_tree_index(S, I)\
-{\
- size_t X = S >> TREEBIN_SHIFT;\
- if (X == 0)\
- I = 0;\
- else if (X > 0xFFFF)\
- I = NTREEBINS-1;\
- else {\
- unsigned int K = _bit_scan_reverse (X); \
- I = (bindex_t)((K << 1) + ((S >> (K + (TREEBIN_SHIFT-1)) & 1)));\
- }\
-}
-
-#elif defined(_MSC_VER) && _MSC_VER>=1300
-#define compute_tree_index(S, I)\
-{\
- size_t X = S >> TREEBIN_SHIFT;\
- if (X == 0)\
- I = 0;\
- else if (X > 0xFFFF)\
- I = NTREEBINS-1;\
- else {\
- unsigned int K;\
- _BitScanReverse((DWORD *) &K, (DWORD) X);\
- I = (bindex_t)((K << 1) + ((S >> (K + (TREEBIN_SHIFT-1)) & 1)));\
- }\
-}
-
-#else /* GNUC */
-#define compute_tree_index(S, I)\
-{\
- size_t X = S >> TREEBIN_SHIFT;\
- if (X == 0)\
- I = 0;\
- else if (X > 0xFFFF)\
- I = NTREEBINS-1;\
- else {\
- unsigned int Y = (unsigned int)X;\
- unsigned int N = ((Y - 0x100) >> 16) & 8;\
- unsigned int K = (((Y <<= N) - 0x1000) >> 16) & 4;\
- N += K;\
- N += K = (((Y <<= K) - 0x4000) >> 16) & 2;\
- K = 14 - N + ((Y <<= K) >> 15);\
- I = (K << 1) + ((S >> (K + (TREEBIN_SHIFT-1)) & 1));\
- }\
-}
-#endif /* GNUC */
-
-/* Bit representing maximum resolved size in a treebin at i */
-#define bit_for_tree_index(i) \
- (i == NTREEBINS-1)? (SIZE_T_BITSIZE-1) : (((i) >> 1) + TREEBIN_SHIFT - 2)
-
-/* Shift placing maximum resolved bit in a treebin at i as sign bit */
-#define leftshift_for_tree_index(i) \
- ((i == NTREEBINS-1)? 0 : \
- ((SIZE_T_BITSIZE-SIZE_T_ONE) - (((i) >> 1) + TREEBIN_SHIFT - 2)))
-
-/* The size of the smallest chunk held in bin with index i */
-#define minsize_for_tree_index(i) \
- ((SIZE_T_ONE << (((i) >> 1) + TREEBIN_SHIFT)) | \
- (((size_t)((i) & SIZE_T_ONE)) << (((i) >> 1) + TREEBIN_SHIFT - 1)))
-
-
-/* ------------------------ Operations on bin maps ----------------------- */
-
-/* bit corresponding to given index */
-#define idx2bit(i) ((binmap_t)(1) << (i))
-
-/* Mark/Clear bits with given index */
-#define mark_smallmap(M,i) ((M)->smallmap |= idx2bit(i))
-#define clear_smallmap(M,i) ((M)->smallmap &= ~idx2bit(i))
-#define smallmap_is_marked(M,i) ((M)->smallmap & idx2bit(i))
-
-#define mark_treemap(M,i) ((M)->treemap |= idx2bit(i))
-#define clear_treemap(M,i) ((M)->treemap &= ~idx2bit(i))
-#define treemap_is_marked(M,i) ((M)->treemap & idx2bit(i))
-
-/* isolate the least set bit of a bitmap */
-#define least_bit(x) ((x) & -(x))
-
-/* mask with all bits to left of least bit of x on */
-#define left_bits(x) ((x<<1) | -(x<<1))
-
-/* mask with all bits to left of or equal to least bit of x on */
-#define same_or_left_bits(x) ((x) | -(x))
-
-/* index corresponding to given bit. Use x86 asm if possible */
-
-#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
-#define compute_bit2idx(X, I)\
-{\
- unsigned int J;\
- J = __builtin_ctz(X); \
- I = (bindex_t)J;\
-}
-
-#elif defined (__INTEL_COMPILER)
-#define compute_bit2idx(X, I)\
-{\
- unsigned int J;\
- J = _bit_scan_forward (X); \
- I = (bindex_t)J;\
-}
-
-#elif defined(_MSC_VER) && _MSC_VER>=1300
-#define compute_bit2idx(X, I)\
-{\
- unsigned int J;\
- _BitScanForward((DWORD *) &J, X);\
- I = (bindex_t)J;\
-}
-
-#elif USE_BUILTIN_FFS
-#define compute_bit2idx(X, I) I = ffs(X)-1
-
-#else
-#define compute_bit2idx(X, I)\
-{\
- unsigned int Y = X - 1;\
- unsigned int K = Y >> (16-4) & 16;\
- unsigned int N = K; Y >>= K;\
- N += K = Y >> (8-3) & 8; Y >>= K;\
- N += K = Y >> (4-2) & 4; Y >>= K;\
- N += K = Y >> (2-1) & 2; Y >>= K;\
- N += K = Y >> (1-0) & 1; Y >>= K;\
- I = (bindex_t)(N + Y);\
-}
-#endif /* GNUC */
-
-
-/* ----------------------- Runtime Check Support ------------------------- */
-
-/*
- For security, the main invariant is that malloc/free/etc never
- writes to a static address other than malloc_state, unless static
- malloc_state itself has been corrupted, which cannot occur via
- malloc (because of these checks). In essence this means that we
- believe all pointers, sizes, maps etc held in malloc_state, but
- check all of those linked or offsetted from other embedded data
- structures. These checks are interspersed with main code in a way
- that tends to minimize their run-time cost.
-
- When FOOTERS is defined, in addition to range checking, we also
- verify footer fields of inuse chunks, which can be used guarantee
- that the mstate controlling malloc/free is intact. This is a
- streamlined version of the approach described by William Robertson
- et al in "Run-time Detection of Heap-based Overflows" LISA'03
- http://www.usenix.org/events/lisa03/tech/robertson.html The footer
- of an inuse chunk holds the xor of its mstate and a random seed,
- that is checked upon calls to free() and realloc(). This is
- (probabalistically) unguessable from outside the program, but can be
- computed by any code successfully malloc'ing any chunk, so does not
- itself provide protection against code that has already broken
- security through some other means. Unlike Robertson et al, we
- always dynamically check addresses of all offset chunks (previous,
- next, etc). This turns out to be cheaper than relying on hashes.
-*/
-
-#if !INSECURE
-/* Check if address a is at least as high as any from MORECORE or MMAP */
-#define ok_address(M, a) ((char*)(a) >= (M)->least_addr)
-/* Check if address of next chunk n is higher than base chunk p */
-#define ok_next(p, n) ((char*)(p) < (char*)(n))
-/* Check if p has inuse status */
-#define ok_inuse(p) is_inuse(p)
-/* Check if p has its pinuse bit on */
-#define ok_pinuse(p) pinuse(p)
-
-#else /* !INSECURE */
-#define ok_address(M, a) (1)
-#define ok_next(b, n) (1)
-#define ok_inuse(p) (1)
-#define ok_pinuse(p) (1)
-#endif /* !INSECURE */
-
-#if (FOOTERS && !INSECURE)
-/* Check if (alleged) mstate m has expected magic field */
-#define ok_magic(M) ((M)->magic == mparams.magic)
-#else /* (FOOTERS && !INSECURE) */
-#define ok_magic(M) (1)
-#endif /* (FOOTERS && !INSECURE) */
-
-/* In gcc, use __builtin_expect to minimize impact of checks */
-#if !INSECURE
-#if defined(__GNUC__) && __GNUC__ >= 3
-#define RTCHECK(e) __builtin_expect(e, 1)
-#else /* GNUC */
-#define RTCHECK(e) (e)
-#endif /* GNUC */
-#else /* !INSECURE */
-#define RTCHECK(e) (1)
-#endif /* !INSECURE */
-
-/* macros to set up inuse chunks with or without footers */
-
-#if !FOOTERS
-
-#define mark_inuse_foot(M,p,s)
-
-/* Macros for setting head/foot of non-mmapped chunks */
-
-/* Set cinuse bit and pinuse bit of next chunk */
-#define set_inuse(M,p,s)\
- ((p)->head = (((p)->head & PINUSE_BIT)|s|CINUSE_BIT),\
- ((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT)
-
-/* Set cinuse and pinuse of this chunk and pinuse of next chunk */
-#define set_inuse_and_pinuse(M,p,s)\
- ((p)->head = (s|PINUSE_BIT|CINUSE_BIT),\
- ((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT)
-
-/* Set size, cinuse and pinuse bit of this chunk */
-#define set_size_and_pinuse_of_inuse_chunk(M, p, s)\
- ((p)->head = (s|PINUSE_BIT|CINUSE_BIT))
-
-#else /* FOOTERS */
-
-/* Set foot of inuse chunk to be xor of mstate and seed */
-#define mark_inuse_foot(M,p,s)\
- (((mchunkptr)((char*)(p) + (s)))->prev_foot = ((size_t)(M) ^ mparams.magic))
-
-#define get_mstate_for(p)\
- ((mstate)(((mchunkptr)((char*)(p) +\
- (chunksize(p))))->prev_foot ^ mparams.magic))
-
-#define set_inuse(M,p,s)\
- ((p)->head = (((p)->head & PINUSE_BIT)|s|CINUSE_BIT),\
- (((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT), \
- mark_inuse_foot(M,p,s))
-
-#define set_inuse_and_pinuse(M,p,s)\
- ((p)->head = (s|PINUSE_BIT|CINUSE_BIT),\
- (((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT),\
- mark_inuse_foot(M,p,s))
-
-#define set_size_and_pinuse_of_inuse_chunk(M, p, s)\
- ((p)->head = (s|PINUSE_BIT|CINUSE_BIT),\
- mark_inuse_foot(M, p, s))
-
-#endif /* !FOOTERS */
-
-/* ---------------------------- setting mparams -------------------------- */
-
-#if LOCK_AT_FORK
-static void pre_fork(void) { ACQUIRE_LOCK(&(gm)->mutex); }
-static void post_fork_parent(void) { RELEASE_LOCK(&(gm)->mutex); }
-static void post_fork_child(void) { INITIAL_LOCK(&(gm)->mutex); }
-#endif /* LOCK_AT_FORK */
-
-/* Initialize mparams */
-static int init_mparams(void) {
-#ifdef NEED_GLOBAL_LOCK_INIT
- if (malloc_global_mutex_status <= 0)
- init_malloc_global_mutex();
-#endif
-
- ACQUIRE_MALLOC_GLOBAL_LOCK();
- if (mparams.magic == 0) {
- size_t magic;
- size_t psize;
- size_t gsize;
-
-#ifndef WIN32
- psize = malloc_getpagesize;
- gsize = ((DEFAULT_GRANULARITY != 0)? DEFAULT_GRANULARITY : psize);
-#else /* WIN32 */
- {
- SYSTEM_INFO system_info;
- GetSystemInfo(&system_info);
- psize = system_info.dwPageSize;
- gsize = ((DEFAULT_GRANULARITY != 0)?
- DEFAULT_GRANULARITY : system_info.dwAllocationGranularity);
- }
-#endif /* WIN32 */
-
- /* Sanity-check configuration:
- size_t must be unsigned and as wide as pointer type.
- ints must be at least 4 bytes.
- alignment must be at least 8.
- Alignment, min chunk size, and page size must all be powers of 2.
- */
- if ((sizeof(size_t) != sizeof(char*)) ||
- (MAX_SIZE_T < MIN_CHUNK_SIZE) ||
- (sizeof(int) < 4) ||
- (MALLOC_ALIGNMENT < (size_t)8U) ||
- ((MALLOC_ALIGNMENT & (MALLOC_ALIGNMENT-SIZE_T_ONE)) != 0) ||
- ((MCHUNK_SIZE & (MCHUNK_SIZE-SIZE_T_ONE)) != 0) ||
- ((gsize & (gsize-SIZE_T_ONE)) != 0) ||
- ((psize & (psize-SIZE_T_ONE)) != 0))
- ABORT;
- mparams.granularity = gsize;
- mparams.page_size = psize;
- mparams.mmap_threshold = DEFAULT_MMAP_THRESHOLD;
- mparams.trim_threshold = DEFAULT_TRIM_THRESHOLD;
-#if MORECORE_CONTIGUOUS
- mparams.default_mflags = USE_LOCK_BIT|USE_MMAP_BIT;
-#else /* MORECORE_CONTIGUOUS */
- mparams.default_mflags = USE_LOCK_BIT|USE_MMAP_BIT|USE_NONCONTIGUOUS_BIT;
-#endif /* MORECORE_CONTIGUOUS */
-
-#if !ONLY_MSPACES
- /* Set up lock for main malloc area */
- gm->mflags = mparams.default_mflags;
- (void)INITIAL_LOCK(&gm->mutex);
-#endif
-#if LOCK_AT_FORK
- pthread_atfork(&pre_fork, &post_fork_parent, &post_fork_child);
-#endif
-
- {
-#if USE_DEV_RANDOM
- int fd;
- unsigned char buf[sizeof(size_t)];
- /* Try to use /dev/urandom, else fall back on using time */
- if ((fd = open("/dev/urandom", O_RDONLY)) >= 0 &&
- read(fd, buf, sizeof(buf)) == sizeof(buf)) {
- magic = *((size_t *) buf);
- close(fd);
- }
- else
-#endif /* USE_DEV_RANDOM */
-#ifdef WIN32
- magic = (size_t)(GetTickCount() ^ (size_t)0x55555555U);
-#elif defined(LACKS_TIME_H)
- magic = (size_t)&magic ^ (size_t)0x55555555U;
-#else
- magic = (size_t)(time(0) ^ (size_t)0x55555555U);
-#endif
- magic |= (size_t)8U; /* ensure nonzero */
- magic &= ~(size_t)7U; /* improve chances of fault for bad values */
- /* Until memory modes commonly available, use volatile-write */
- (*(volatile size_t *)(&(mparams.magic))) = magic;
- }
- }
-
- RELEASE_MALLOC_GLOBAL_LOCK();
- return 1;
-}
-
-/* support for mallopt */
-static int change_mparam(int param_number, int value) {
- size_t val;
- ensure_initialization();
- val = (value == -1)? MAX_SIZE_T : (size_t)value;
- switch(param_number) {
- case M_TRIM_THRESHOLD:
- mparams.trim_threshold = val;
- return 1;
- case M_GRANULARITY:
- if (val >= mparams.page_size && ((val & (val-1)) == 0)) {
- mparams.granularity = val;
- return 1;
- }
- else
- return 0;
- case M_MMAP_THRESHOLD:
- mparams.mmap_threshold = val;
- return 1;
- default:
- return 0;
- }
-}
-
-#if DEBUG
-/* ------------------------- Debugging Support --------------------------- */
-
-/* Check properties of any chunk, whether free, inuse, mmapped etc */
-static void do_check_any_chunk(mstate m, mchunkptr p) {
- assert((is_aligned(chunk2mem(p))) || (p->head == FENCEPOST_HEAD));
- assert(ok_address(m, p));
-}
-
-/* Check properties of top chunk */
-static void do_check_top_chunk(mstate m, mchunkptr p) {
- msegmentptr sp = segment_holding(m, (char*)p);
- size_t sz = p->head & ~INUSE_BITS; /* third-lowest bit can be set! */
- assert(sp != 0);
- assert((is_aligned(chunk2mem(p))) || (p->head == FENCEPOST_HEAD));
- assert(ok_address(m, p));
- assert(sz == m->topsize);
- assert(sz > 0);
- assert(sz == ((sp->base + sp->size) - (char*)p) - TOP_FOOT_SIZE);
- assert(pinuse(p));
- assert(!pinuse(chunk_plus_offset(p, sz)));
-}
-
-/* Check properties of (inuse) mmapped chunks */
-static void do_check_mmapped_chunk(mstate m, mchunkptr p) {
- size_t sz = chunksize(p);
- size_t len = (sz + (p->prev_foot) + MMAP_FOOT_PAD);
- assert(is_mmapped(p));
- assert(use_mmap(m));
- assert((is_aligned(chunk2mem(p))) || (p->head == FENCEPOST_HEAD));
- assert(ok_address(m, p));
- assert(!is_small(sz));
- assert((len & (mparams.page_size-SIZE_T_ONE)) == 0);
- assert(chunk_plus_offset(p, sz)->head == FENCEPOST_HEAD);
- assert(chunk_plus_offset(p, sz+SIZE_T_SIZE)->head == 0);
-}
-
-/* Check properties of inuse chunks */
-static void do_check_inuse_chunk(mstate m, mchunkptr p) {
- do_check_any_chunk(m, p);
- assert(is_inuse(p));
- assert(next_pinuse(p));
- /* If not pinuse and not mmapped, previous chunk has OK offset */
- assert(is_mmapped(p) || pinuse(p) || next_chunk(prev_chunk(p)) == p);
- if (is_mmapped(p))
- do_check_mmapped_chunk(m, p);
-}
-
-/* Check properties of free chunks */
-static void do_check_free_chunk(mstate m, mchunkptr p) {
- size_t sz = chunksize(p);
- mchunkptr next = chunk_plus_offset(p, sz);
- do_check_any_chunk(m, p);
- assert(!is_inuse(p));
- assert(!next_pinuse(p));
- assert (!is_mmapped(p));
- if (p != m->dv && p != m->top) {
- if (sz >= MIN_CHUNK_SIZE) {
- assert((sz & CHUNK_ALIGN_MASK) == 0);
- assert(is_aligned(chunk2mem(p)));
- assert(next->prev_foot == sz);
- assert(pinuse(p));
- assert (next == m->top || is_inuse(next));
- assert(p->fd->bk == p);
- assert(p->bk->fd == p);
- }
- else /* markers are always of size SIZE_T_SIZE */
- assert(sz == SIZE_T_SIZE);
- }
-}
-
-/* Check properties of malloced chunks at the point they are malloced */
-static void do_check_malloced_chunk(mstate m, void* mem, size_t s) {
- if (mem != 0) {
- mchunkptr p = mem2chunk(mem);
- size_t sz = p->head & ~INUSE_BITS;
- do_check_inuse_chunk(m, p);
- assert((sz & CHUNK_ALIGN_MASK) == 0);
- assert(sz >= MIN_CHUNK_SIZE);
- assert(sz >= s);
- /* unless mmapped, size is less than MIN_CHUNK_SIZE more than request */
- assert(is_mmapped(p) || sz < (s + MIN_CHUNK_SIZE));
- }
-}
-
-/* Check a tree and its subtrees. */
-static void do_check_tree(mstate m, tchunkptr t) {
- tchunkptr head = 0;
- tchunkptr u = t;
- bindex_t tindex = t->index;
- size_t tsize = chunksize(t);
- bindex_t idx;
- compute_tree_index(tsize, idx);
- assert(tindex == idx);
- assert(tsize >= MIN_LARGE_SIZE);
- assert(tsize >= minsize_for_tree_index(idx));
- assert((idx == NTREEBINS-1) || (tsize < minsize_for_tree_index((idx+1))));
-
- do { /* traverse through chain of same-sized nodes */
- do_check_any_chunk(m, ((mchunkptr)u));
- assert(u->index == tindex);
- assert(chunksize(u) == tsize);
- assert(!is_inuse(u));
- assert(!next_pinuse(u));
- assert(u->fd->bk == u);
- assert(u->bk->fd == u);
- if (u->parent == 0) {
- assert(u->child[0] == 0);
- assert(u->child[1] == 0);
- }
- else {
- assert(head == 0); /* only one node on chain has parent */
- head = u;
- assert(u->parent != u);
- assert (u->parent->child[0] == u ||
- u->parent->child[1] == u ||
- *((tbinptr*)(u->parent)) == u);
- if (u->child[0] != 0) {
- assert(u->child[0]->parent == u);
- assert(u->child[0] != u);
- do_check_tree(m, u->child[0]);
- }
- if (u->child[1] != 0) {
- assert(u->child[1]->parent == u);
- assert(u->child[1] != u);
- do_check_tree(m, u->child[1]);
- }
- if (u->child[0] != 0 && u->child[1] != 0) {
- assert(chunksize(u->child[0]) < chunksize(u->child[1]));
- }
- }
- u = u->fd;
- } while (u != t);
- assert(head != 0);
-}
-
-/* Check all the chunks in a treebin. */
-static void do_check_treebin(mstate m, bindex_t i) {
- tbinptr* tb = treebin_at(m, i);
- tchunkptr t = *tb;
- int empty = (m->treemap & (1U << i)) == 0;
- if (t == 0)
- assert(empty);
- if (!empty)
- do_check_tree(m, t);
-}
-
-/* Check all the chunks in a smallbin. */
-static void do_check_smallbin(mstate m, bindex_t i) {
- sbinptr b = smallbin_at(m, i);
- mchunkptr p = b->bk;
- unsigned int empty = (m->smallmap & (1U << i)) == 0;
- if (p == b)
- assert(empty);
- if (!empty) {
- for (; p != b; p = p->bk) {
- size_t size = chunksize(p);
- mchunkptr q;
- /* each chunk claims to be free */
- do_check_free_chunk(m, p);
- /* chunk belongs in bin */
- assert(small_index(size) == i);
- assert(p->bk == b || chunksize(p->bk) == chunksize(p));
- /* chunk is followed by an inuse chunk */
- q = next_chunk(p);
- if (q->head != FENCEPOST_HEAD)
- do_check_inuse_chunk(m, q);
- }
- }
-}
-
-/* Find x in a bin. Used in other check functions. */
-static int bin_find(mstate m, mchunkptr x) {
- size_t size = chunksize(x);
- if (is_small(size)) {
- bindex_t sidx = small_index(size);
- sbinptr b = smallbin_at(m, sidx);
- if (smallmap_is_marked(m, sidx)) {
- mchunkptr p = b;
- do {
- if (p == x)
- return 1;
- } while ((p = p->fd) != b);
- }
- }
- else {
- bindex_t tidx;
- compute_tree_index(size, tidx);
- if (treemap_is_marked(m, tidx)) {
- tchunkptr t = *treebin_at(m, tidx);
- size_t sizebits = size << leftshift_for_tree_index(tidx);
- while (t != 0 && chunksize(t) != size) {
- t = t->child[(sizebits >> (SIZE_T_BITSIZE-SIZE_T_ONE)) & 1];
- sizebits <<= 1;
- }
- if (t != 0) {
- tchunkptr u = t;
- do {
- if (u == (tchunkptr)x)
- return 1;
- } while ((u = u->fd) != t);
- }
- }
- }
- return 0;
-}
-
-/* Traverse each chunk and check it; return total */
-static size_t traverse_and_check(mstate m) {
- size_t sum = 0;
- if (is_initialized(m)) {
- msegmentptr s = &m->seg;
- sum += m->topsize + TOP_FOOT_SIZE;
- while (s != 0) {
- mchunkptr q = align_as_chunk(s->base);
- mchunkptr lastq = 0;
- assert(pinuse(q));
- while (segment_holds(s, q) &&
- q != m->top && q->head != FENCEPOST_HEAD) {
- sum += chunksize(q);
- if (is_inuse(q)) {
- assert(!bin_find(m, q));
- do_check_inuse_chunk(m, q);
- }
- else {
- assert(q == m->dv || bin_find(m, q));
- assert(lastq == 0 || is_inuse(lastq)); /* Not 2 consecutive free */
- do_check_free_chunk(m, q);
- }
- lastq = q;
- q = next_chunk(q);
- }
- s = s->next;
- }
- }
- return sum;
-}
-
-
-/* Check all properties of malloc_state. */
-static void do_check_malloc_state(mstate m) {
- bindex_t i;
- size_t total;
- /* check bins */
- for (i = 0; i < NSMALLBINS; ++i)
- do_check_smallbin(m, i);
- for (i = 0; i < NTREEBINS; ++i)
- do_check_treebin(m, i);
-
- if (m->dvsize != 0) { /* check dv chunk */
- do_check_any_chunk(m, m->dv);
- assert(m->dvsize == chunksize(m->dv));
- assert(m->dvsize >= MIN_CHUNK_SIZE);
- assert(bin_find(m, m->dv) == 0);
- }
-
- if (m->top != 0) { /* check top chunk */
- do_check_top_chunk(m, m->top);
- /*assert(m->topsize == chunksize(m->top)); redundant */
- assert(m->topsize > 0);
- assert(bin_find(m, m->top) == 0);
- }
-
- total = traverse_and_check(m);
- assert(total <= m->footprint);
- assert(m->footprint <= m->max_footprint);
-}
-#endif /* DEBUG */
-
-/* ----------------------------- statistics ------------------------------ */
-
-#if !NO_MALLINFO
-static struct mallinfo internal_mallinfo(mstate m) {
- struct mallinfo nm = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
- ensure_initialization();
- if (!PREACTION(m)) {
- check_malloc_state(m);
- if (is_initialized(m)) {
- size_t nfree = SIZE_T_ONE; /* top always free */
- size_t mfree = m->topsize + TOP_FOOT_SIZE;
- size_t sum = mfree;
- msegmentptr s = &m->seg;
- while (s != 0) {
- mchunkptr q = align_as_chunk(s->base);
- while (segment_holds(s, q) &&
- q != m->top && q->head != FENCEPOST_HEAD) {
- size_t sz = chunksize(q);
- sum += sz;
- if (!is_inuse(q)) {
- mfree += sz;
- ++nfree;
- }
- q = next_chunk(q);
- }
- s = s->next;
- }
-
- nm.arena = sum;
- nm.ordblks = nfree;
- nm.hblkhd = m->footprint - sum;
- nm.usmblks = m->max_footprint;
- nm.uordblks = m->footprint - mfree;
- nm.fordblks = mfree;
- nm.keepcost = m->topsize;
- }
-
- POSTACTION(m);
- }
- return nm;
-}
-#endif /* !NO_MALLINFO */
-
-#if !NO_MALLOC_STATS
-static void internal_malloc_stats(mstate m) {
- ensure_initialization();
- if (!PREACTION(m)) {
- size_t maxfp = 0;
- size_t fp = 0;
- size_t used = 0;
- check_malloc_state(m);
- if (is_initialized(m)) {
- msegmentptr s = &m->seg;
- maxfp = m->max_footprint;
- fp = m->footprint;
- used = fp - (m->topsize + TOP_FOOT_SIZE);
-
- while (s != 0) {
- mchunkptr q = align_as_chunk(s->base);
- while (segment_holds(s, q) &&
- q != m->top && q->head != FENCEPOST_HEAD) {
- if (!is_inuse(q))
- used -= chunksize(q);
- q = next_chunk(q);
- }
- s = s->next;
- }
- }
- POSTACTION(m); /* drop lock */
- fprintf(stderr, "max system bytes = %10lu\n", (unsigned long)(maxfp));
- fprintf(stderr, "system bytes = %10lu\n", (unsigned long)(fp));
- fprintf(stderr, "in use bytes = %10lu\n", (unsigned long)(used));
- }
-}
-#endif /* NO_MALLOC_STATS */
-
-/* ----------------------- Operations on smallbins ----------------------- */
-
-/*
- Various forms of linking and unlinking are defined as macros. Even
- the ones for trees, which are very long but have very short typical
- paths. This is ugly but reduces reliance on inlining support of
- compilers.
-*/
-
-/* Link a free chunk into a smallbin */
-#define insert_small_chunk(M, P, S) {\
- bindex_t I = small_index(S);\
- mchunkptr B = smallbin_at(M, I);\
- mchunkptr F = B;\
- assert(S >= MIN_CHUNK_SIZE);\
- if (!smallmap_is_marked(M, I))\
- mark_smallmap(M, I);\
- else if (RTCHECK(ok_address(M, B->fd)))\
- F = B->fd;\
- else {\
- CORRUPTION_ERROR_ACTION(M);\
- }\
- B->fd = P;\
- F->bk = P;\
- P->fd = F;\
- P->bk = B;\
-}
-
-/* Unlink a chunk from a smallbin */
-#define unlink_small_chunk(M, P, S) {\
- mchunkptr F = P->fd;\
- mchunkptr B = P->bk;\
- bindex_t I = small_index(S);\
- assert(P != B);\
- assert(P != F);\
- assert(chunksize(P) == small_index2size(I));\
- if (RTCHECK(F == smallbin_at(M,I) || (ok_address(M, F) && F->bk == P))) { \
- if (B == F) {\
- clear_smallmap(M, I);\
- }\
- else if (RTCHECK(B == smallbin_at(M,I) ||\
- (ok_address(M, B) && B->fd == P))) {\
- F->bk = B;\
- B->fd = F;\
- }\
- else {\
- CORRUPTION_ERROR_ACTION(M);\
- }\
- }\
- else {\
- CORRUPTION_ERROR_ACTION(M);\
- }\
-}
-
-/* Unlink the first chunk from a smallbin */
-#define unlink_first_small_chunk(M, B, P, I) {\
- mchunkptr F = P->fd;\
- assert(P != B);\
- assert(P != F);\
- assert(chunksize(P) == small_index2size(I));\
- if (B == F) {\
- clear_smallmap(M, I);\
- }\
- else if (RTCHECK(ok_address(M, F) && F->bk == P)) {\
- F->bk = B;\
- B->fd = F;\
- }\
- else {\
- CORRUPTION_ERROR_ACTION(M);\
- }\
-}
-
-/* Replace dv node, binning the old one */
-/* Used only when dvsize known to be small */
-#define replace_dv(M, P, S) {\
- size_t DVS = M->dvsize;\
- assert(is_small(DVS));\
- if (DVS != 0) {\
- mchunkptr DV = M->dv;\
- insert_small_chunk(M, DV, DVS);\
- }\
- M->dvsize = S;\
- M->dv = P;\
-}
-
-/* ------------------------- Operations on trees ------------------------- */
-
-/* Insert chunk into tree */
-#define insert_large_chunk(M, X, S) {\
- tbinptr* H;\
- bindex_t I;\
- compute_tree_index(S, I);\
- H = treebin_at(M, I);\
- X->index = I;\
- X->child[0] = X->child[1] = 0;\
- if (!treemap_is_marked(M, I)) {\
- mark_treemap(M, I);\
- *H = X;\
- X->parent = (tchunkptr)H;\
- X->fd = X->bk = X;\
- }\
- else {\
- tchunkptr T = *H;\
- size_t K = S << leftshift_for_tree_index(I);\
- for (;;) {\
- if (chunksize(T) != S) {\
- tchunkptr* C = &(T->child[(K >> (SIZE_T_BITSIZE-SIZE_T_ONE)) & 1]);\
- K <<= 1;\
- if (*C != 0)\
- T = *C;\
- else if (RTCHECK(ok_address(M, C))) {\
- *C = X;\
- X->parent = T;\
- X->fd = X->bk = X;\
- break;\
- }\
- else {\
- CORRUPTION_ERROR_ACTION(M);\
- break;\
- }\
- }\
- else {\
- tchunkptr F = T->fd;\
- if (RTCHECK(ok_address(M, T) && ok_address(M, F))) {\
- T->fd = F->bk = X;\
- X->fd = F;\
- X->bk = T;\
- X->parent = 0;\
- break;\
- }\
- else {\
- CORRUPTION_ERROR_ACTION(M);\
- break;\
- }\
- }\
- }\
- }\
-}
-
-/*
- Unlink steps:
-
- 1. If x is a chained node, unlink it from its same-sized fd/bk links
- and choose its bk node as its replacement.
- 2. If x was the last node of its size, but not a leaf node, it must
- be replaced with a leaf node (not merely one with an open left or
- right), to make sure that lefts and rights of descendents
- correspond properly to bit masks. We use the rightmost descendent
- of x. We could use any other leaf, but this is easy to locate and
- tends to counteract removal of leftmosts elsewhere, and so keeps
- paths shorter than minimally guaranteed. This doesn't loop much
- because on average a node in a tree is near the bottom.
- 3. If x is the base of a chain (i.e., has parent links) relink
- x's parent and children to x's replacement (or null if none).
-*/
-
-#define unlink_large_chunk(M, X) {\
- tchunkptr XP = X->parent;\
- tchunkptr R;\
- if (X->bk != X) {\
- tchunkptr F = X->fd;\
- R = X->bk;\
- if (RTCHECK(ok_address(M, F) && F->bk == X && R->fd == X)) {\
- F->bk = R;\
- R->fd = F;\
- }\
- else {\
- CORRUPTION_ERROR_ACTION(M);\
- }\
- }\
- else {\
- tchunkptr* RP;\
- if (((R = *(RP = &(X->child[1]))) != 0) ||\
- ((R = *(RP = &(X->child[0]))) != 0)) {\
- tchunkptr* CP;\
- while ((*(CP = &(R->child[1])) != 0) ||\
- (*(CP = &(R->child[0])) != 0)) {\
- R = *(RP = CP);\
- }\
- if (RTCHECK(ok_address(M, RP)))\
- *RP = 0;\
- else {\
- CORRUPTION_ERROR_ACTION(M);\
- }\
- }\
- }\
- if (XP != 0) {\
- tbinptr* H = treebin_at(M, X->index);\
- if (X == *H) {\
- if ((*H = R) == 0) \
- clear_treemap(M, X->index);\
- }\
- else if (RTCHECK(ok_address(M, XP))) {\
- if (XP->child[0] == X) \
- XP->child[0] = R;\
- else \
- XP->child[1] = R;\
- }\
- else\
- CORRUPTION_ERROR_ACTION(M);\
- if (R != 0) {\
- if (RTCHECK(ok_address(M, R))) {\
- tchunkptr C0, C1;\
- R->parent = XP;\
- if ((C0 = X->child[0]) != 0) {\
- if (RTCHECK(ok_address(M, C0))) {\
- R->child[0] = C0;\
- C0->parent = R;\
- }\
- else\
- CORRUPTION_ERROR_ACTION(M);\
- }\
- if ((C1 = X->child[1]) != 0) {\
- if (RTCHECK(ok_address(M, C1))) {\
- R->child[1] = C1;\
- C1->parent = R;\
- }\
- else\
- CORRUPTION_ERROR_ACTION(M);\
- }\
- }\
- else\
- CORRUPTION_ERROR_ACTION(M);\
- }\
- }\
-}
-
-/* Relays to large vs small bin operations */
-
-#define insert_chunk(M, P, S)\
- if (is_small(S)) insert_small_chunk(M, P, S)\
- else { tchunkptr TP = (tchunkptr)(P); insert_large_chunk(M, TP, S); }
-
-#define unlink_chunk(M, P, S)\
- if (is_small(S)) unlink_small_chunk(M, P, S)\
- else { tchunkptr TP = (tchunkptr)(P); unlink_large_chunk(M, TP); }
-
-
-/* Relays to internal calls to malloc/free from realloc, memalign etc */
-
-#if ONLY_MSPACES
-#define internal_malloc(m, b) mspace_malloc(m, b)
-#define internal_free(m, mem) mspace_free(m,mem);
-#else /* ONLY_MSPACES */
-#if MSPACES
-#define internal_malloc(m, b)\
- ((m == gm)? dlmalloc(b) : mspace_malloc(m, b))
-#define internal_free(m, mem)\
- if (m == gm) dlfree(mem); else mspace_free(m,mem);
-#else /* MSPACES */
-#define internal_malloc(m, b) dlmalloc(b)
-#define internal_free(m, mem) dlfree(mem)
-#endif /* MSPACES */
-#endif /* ONLY_MSPACES */
-
-/* ----------------------- Direct-mmapping chunks ----------------------- */
-
-/*
- Directly mmapped chunks are set up with an offset to the start of
- the mmapped region stored in the prev_foot field of the chunk. This
- allows reconstruction of the required argument to MUNMAP when freed,
- and also allows adjustment of the returned chunk to meet alignment
- requirements (especially in memalign).
-*/
-
-/* Malloc using mmap */
-static void* mmap_alloc(mstate m, size_t nb) {
- size_t mmsize = mmap_align(nb + SIX_SIZE_T_SIZES + CHUNK_ALIGN_MASK);
- if (m->footprint_limit != 0) {
- size_t fp = m->footprint + mmsize;
- if (fp <= m->footprint || fp > m->footprint_limit)
- return 0;
- }
- if (mmsize > nb) { /* Check for wrap around 0 */
- char* mm = (char*)(CALL_DIRECT_MMAP(mmsize));
- if (mm != CMFAIL) {
- size_t offset = align_offset(chunk2mem(mm));
- size_t psize = mmsize - offset - MMAP_FOOT_PAD;
- mchunkptr p = (mchunkptr)(mm + offset);
- p->prev_foot = offset;
- p->head = psize;
- mark_inuse_foot(m, p, psize);
- chunk_plus_offset(p, psize)->head = FENCEPOST_HEAD;
- chunk_plus_offset(p, psize+SIZE_T_SIZE)->head = 0;
-
- if (m->least_addr == 0 || mm < m->least_addr)
- m->least_addr = mm;
- if ((m->footprint += mmsize) > m->max_footprint)
- m->max_footprint = m->footprint;
- assert(is_aligned(chunk2mem(p)));
- check_mmapped_chunk(m, p);
- return chunk2mem(p);
- }
- }
- return 0;
-}
-
-/* Realloc using mmap */
-static mchunkptr mmap_resize(mstate m, mchunkptr oldp, size_t nb, int flags) {
- size_t oldsize = chunksize(oldp);
- (void)flags; /* placate people compiling -Wunused */
- if (is_small(nb)) /* Can't shrink mmap regions below small size */
- return 0;
- /* Keep old chunk if big enough but not too big */
- if (oldsize >= nb + SIZE_T_SIZE &&
- (oldsize - nb) <= (mparams.granularity << 1))
- return oldp;
- else {
- size_t offset = oldp->prev_foot;
- size_t oldmmsize = oldsize + offset + MMAP_FOOT_PAD;
- size_t newmmsize = mmap_align(nb + SIX_SIZE_T_SIZES + CHUNK_ALIGN_MASK);
- char* cp = (char*)CALL_MREMAP((char*)oldp - offset,
- oldmmsize, newmmsize, flags);
- if (cp != CMFAIL) {
- mchunkptr newp = (mchunkptr)(cp + offset);
- size_t psize = newmmsize - offset - MMAP_FOOT_PAD;
- newp->head = psize;
- mark_inuse_foot(m, newp, psize);
- chunk_plus_offset(newp, psize)->head = FENCEPOST_HEAD;
- chunk_plus_offset(newp, psize+SIZE_T_SIZE)->head = 0;
-
- if (cp < m->least_addr)
- m->least_addr = cp;
- if ((m->footprint += newmmsize - oldmmsize) > m->max_footprint)
- m->max_footprint = m->footprint;
- check_mmapped_chunk(m, newp);
- return newp;
- }
- }
- return 0;
-}
-
-
-/* -------------------------- mspace management -------------------------- */
-
-/* Initialize top chunk and its size */
-static void init_top(mstate m, mchunkptr p, size_t psize) {
- /* Ensure alignment */
- size_t offset = align_offset(chunk2mem(p));
- p = (mchunkptr)((char*)p + offset);
- psize -= offset;
-
- m->top = p;
- m->topsize = psize;
- p->head = psize | PINUSE_BIT;
- /* set size of fake trailing chunk holding overhead space only once */
- chunk_plus_offset(p, psize)->head = TOP_FOOT_SIZE;
- m->trim_check = mparams.trim_threshold; /* reset on each update */
-}
-
-/* Initialize bins for a new mstate that is otherwise zeroed out */
-static void init_bins(mstate m) {
- /* Establish circular links for smallbins */
- bindex_t i;
- for (i = 0; i < NSMALLBINS; ++i) {
- sbinptr bin = smallbin_at(m,i);
- bin->fd = bin->bk = bin;
- }
-}
-
-#if PROCEED_ON_ERROR
-
-/* default corruption action */
-static void reset_on_error(mstate m) {
- int i;
- ++malloc_corruption_error_count;
- /* Reinitialize fields to forget about all memory */
- m->smallmap = m->treemap = 0;
- m->dvsize = m->topsize = 0;
- m->seg.base = 0;
- m->seg.size = 0;
- m->seg.next = 0;
- m->top = m->dv = 0;
- for (i = 0; i < NTREEBINS; ++i)
- *treebin_at(m, i) = 0;
- init_bins(m);
-}
-#endif /* PROCEED_ON_ERROR */
-
-/* Allocate chunk and prepend remainder with chunk in successor base. */
-static void* prepend_alloc(mstate m, char* newbase, char* oldbase,
- size_t nb) {
- mchunkptr p = align_as_chunk(newbase);
- mchunkptr oldfirst = align_as_chunk(oldbase);
- size_t psize = (char*)oldfirst - (char*)p;
- mchunkptr q = chunk_plus_offset(p, nb);
- size_t qsize = psize - nb;
- set_size_and_pinuse_of_inuse_chunk(m, p, nb);
-
- assert((char*)oldfirst > (char*)q);
- assert(pinuse(oldfirst));
- assert(qsize >= MIN_CHUNK_SIZE);
-
- /* consolidate remainder with first chunk of old base */
- if (oldfirst == m->top) {
- size_t tsize = m->topsize += qsize;
- m->top = q;
- q->head = tsize | PINUSE_BIT;
- check_top_chunk(m, q);
- }
- else if (oldfirst == m->dv) {
- size_t dsize = m->dvsize += qsize;
- m->dv = q;
- set_size_and_pinuse_of_free_chunk(q, dsize);
- }
- else {
- if (!is_inuse(oldfirst)) {
- size_t nsize = chunksize(oldfirst);
- unlink_chunk(m, oldfirst, nsize);
- oldfirst = chunk_plus_offset(oldfirst, nsize);
- qsize += nsize;
- }
- set_free_with_pinuse(q, qsize, oldfirst);
- insert_chunk(m, q, qsize);
- check_free_chunk(m, q);
- }
-
- check_malloced_chunk(m, chunk2mem(p), nb);
- return chunk2mem(p);
-}
-
-/* Add a segment to hold a new noncontiguous region */
-static void add_segment(mstate m, char* tbase, size_t tsize, flag_t mmapped) {
- /* Determine locations and sizes of segment, fenceposts, old top */
- char* old_top = (char*)m->top;
- msegmentptr oldsp = segment_holding(m, old_top);
- char* old_end = oldsp->base + oldsp->size;
- size_t ssize = pad_request(sizeof(struct malloc_segment));
- char* rawsp = old_end - (ssize + FOUR_SIZE_T_SIZES + CHUNK_ALIGN_MASK);
- size_t offset = align_offset(chunk2mem(rawsp));
- char* asp = rawsp + offset;
- char* csp = (asp < (old_top + MIN_CHUNK_SIZE))? old_top : asp;
- mchunkptr sp = (mchunkptr)csp;
- msegmentptr ss = (msegmentptr)(chunk2mem(sp));
- mchunkptr tnext = chunk_plus_offset(sp, ssize);
- mchunkptr p = tnext;
- int nfences = 0;
-
- /* reset top to new space */
- init_top(m, (mchunkptr)tbase, tsize - TOP_FOOT_SIZE);
-
- /* Set up segment record */
- assert(is_aligned(ss));
- set_size_and_pinuse_of_inuse_chunk(m, sp, ssize);
- *ss = m->seg; /* Push current record */
- m->seg.base = tbase;
- m->seg.size = tsize;
- m->seg.sflags = mmapped;
- m->seg.next = ss;
-
- /* Insert trailing fenceposts */
- for (;;) {
- mchunkptr nextp = chunk_plus_offset(p, SIZE_T_SIZE);
- p->head = FENCEPOST_HEAD;
- ++nfences;
- if ((char*)(&(nextp->head)) < old_end)
- p = nextp;
- else
- break;
- }
- assert(nfences >= 2);
-
- /* Insert the rest of old top into a bin as an ordinary free chunk */
- if (csp != old_top) {
- mchunkptr q = (mchunkptr)old_top;
- size_t psize = csp - old_top;
- mchunkptr tn = chunk_plus_offset(q, psize);
- set_free_with_pinuse(q, psize, tn);
- insert_chunk(m, q, psize);
- }
-
- check_top_chunk(m, m->top);
-}
-
-/* -------------------------- System allocation -------------------------- */
-
-/* Get memory from system using MORECORE or MMAP */
-static void* sys_alloc(mstate m, size_t nb) {
- char* tbase = CMFAIL;
- size_t tsize = 0;
- flag_t mmap_flag = 0;
- size_t asize; /* allocation size */
-
- ensure_initialization();
-
- /* Directly map large chunks, but only if already initialized */
- if (use_mmap(m) && nb >= mparams.mmap_threshold && m->topsize != 0) {
- void* mem = mmap_alloc(m, nb);
- if (mem != 0)
- return mem;
- }
-
- asize = granularity_align(nb + SYS_ALLOC_PADDING);
- if (asize <= nb)
- return 0; /* wraparound */
- if (m->footprint_limit != 0) {
- size_t fp = m->footprint + asize;
- if (fp <= m->footprint || fp > m->footprint_limit)
- return 0;
- }
-
- /*
- Try getting memory in any of three ways (in most-preferred to
- least-preferred order):
- 1. A call to MORECORE that can normally contiguously extend memory.
- (disabled if not MORECORE_CONTIGUOUS or not HAVE_MORECORE or
- or main space is mmapped or a previous contiguous call failed)
- 2. A call to MMAP new space (disabled if not HAVE_MMAP).
- Note that under the default settings, if MORECORE is unable to
- fulfill a request, and HAVE_MMAP is true, then mmap is
- used as a noncontiguous system allocator. This is a useful backup
- strategy for systems with holes in address spaces -- in this case
- sbrk cannot contiguously expand the heap, but mmap may be able to
- find space.
- 3. A call to MORECORE that cannot usually contiguously extend memory.
- (disabled if not HAVE_MORECORE)
-
- In all cases, we need to request enough bytes from system to ensure
- we can malloc nb bytes upon success, so pad with enough space for
- top_foot, plus alignment-pad to make sure we don't lose bytes if
- not on boundary, and round this up to a granularity unit.
- */
-
- if (MORECORE_CONTIGUOUS && !use_noncontiguous(m)) {
- char* br = CMFAIL;
- size_t ssize = asize; /* sbrk call size */
- msegmentptr ss = (m->top == 0)? 0 : segment_holding(m, (char*)m->top);
- ACQUIRE_MALLOC_GLOBAL_LOCK();
-
- if (ss == 0) { /* First time through or recovery */
- char* base = (char*)CALL_MORECORE(0);
- if (base != CMFAIL) {
- size_t fp;
- /* Adjust to end on a page boundary */
- if (!is_page_aligned(base))
- ssize += (page_align((size_t)base) - (size_t)base);
- fp = m->footprint + ssize; /* recheck limits */
- if (ssize > nb && ssize < HALF_MAX_SIZE_T &&
- (m->footprint_limit == 0 ||
- (fp > m->footprint && fp <= m->footprint_limit)) &&
- (br = (char*)(CALL_MORECORE(ssize))) == base) {
- tbase = base;
- tsize = ssize;
- }
- }
- }
- else {
- /* Subtract out existing available top space from MORECORE request. */
- ssize = granularity_align(nb - m->topsize + SYS_ALLOC_PADDING);
- /* Use mem here only if it did continuously extend old space */
- if (ssize < HALF_MAX_SIZE_T &&
- (br = (char*)(CALL_MORECORE(ssize))) == ss->base+ss->size) {
- tbase = br;
- tsize = ssize;
- }
- }
-
- if (tbase == CMFAIL) { /* Cope with partial failure */
- if (br != CMFAIL) { /* Try to use/extend the space we did get */
- if (ssize < HALF_MAX_SIZE_T &&
- ssize < nb + SYS_ALLOC_PADDING) {
- size_t esize = granularity_align(nb + SYS_ALLOC_PADDING - ssize);
- if (esize < HALF_MAX_SIZE_T) {
- char* end = (char*)CALL_MORECORE(esize);
- if (end != CMFAIL)
- ssize += esize;
- else { /* Can't use; try to release */
- (void) CALL_MORECORE(-ssize);
- br = CMFAIL;
- }
- }
- }
- }
- if (br != CMFAIL) { /* Use the space we did get */
- tbase = br;
- tsize = ssize;
- }
- else
- disable_contiguous(m); /* Don't try contiguous path in the future */
- }
-
- RELEASE_MALLOC_GLOBAL_LOCK();
- }
-
- if (HAVE_MMAP && tbase == CMFAIL) { /* Try MMAP */
- char* mp = (char*)(CALL_MMAP(asize));
- if (mp != CMFAIL) {
- tbase = mp;
- tsize = asize;
- mmap_flag = USE_MMAP_BIT;
- }
- }
-
- if (HAVE_MORECORE && tbase == CMFAIL) { /* Try noncontiguous MORECORE */
- if (asize < HALF_MAX_SIZE_T) {
- char* br = CMFAIL;
- char* end = CMFAIL;
- ACQUIRE_MALLOC_GLOBAL_LOCK();
- br = (char*)(CALL_MORECORE(asize));
- end = (char*)(CALL_MORECORE(0));
- RELEASE_MALLOC_GLOBAL_LOCK();
- if (br != CMFAIL && end != CMFAIL && br < end) {
- size_t ssize = end - br;
- if (ssize > nb + TOP_FOOT_SIZE) {
- tbase = br;
- tsize = ssize;
- }
- }
- }
- }
-
- if (tbase != CMFAIL) {
-
- if ((m->footprint += tsize) > m->max_footprint)
- m->max_footprint = m->footprint;
-
- if (!is_initialized(m)) { /* first-time initialization */
- if (m->least_addr == 0 || tbase < m->least_addr)
- m->least_addr = tbase;
- m->seg.base = tbase;
- m->seg.size = tsize;
- m->seg.sflags = mmap_flag;
- m->magic = mparams.magic;
- m->release_checks = MAX_RELEASE_CHECK_RATE;
- init_bins(m);
-#if !ONLY_MSPACES
- if (is_global(m))
- init_top(m, (mchunkptr)tbase, tsize - TOP_FOOT_SIZE);
- else
-#endif
- {
- /* Offset top by embedded malloc_state */
- mchunkptr mn = next_chunk(mem2chunk(m));
- init_top(m, mn, (size_t)((tbase + tsize) - (char*)mn) -TOP_FOOT_SIZE);
- }
- }
-
- else {
- /* Try to merge with an existing segment */
- msegmentptr sp = &m->seg;
- /* Only consider most recent segment if traversal suppressed */
- while (sp != 0 && tbase != sp->base + sp->size)
- sp = (NO_SEGMENT_TRAVERSAL) ? 0 : sp->next;
- if (sp != 0 &&
- !is_extern_segment(sp) &&
- (sp->sflags & USE_MMAP_BIT) == mmap_flag &&
- segment_holds(sp, m->top)) { /* append */
- sp->size += tsize;
- init_top(m, m->top, m->topsize + tsize);
- }
- else {
- if (tbase < m->least_addr)
- m->least_addr = tbase;
- sp = &m->seg;
- while (sp != 0 && sp->base != tbase + tsize)
- sp = (NO_SEGMENT_TRAVERSAL) ? 0 : sp->next;
- if (sp != 0 &&
- !is_extern_segment(sp) &&
- (sp->sflags & USE_MMAP_BIT) == mmap_flag) {
- char* oldbase = sp->base;
- sp->base = tbase;
- sp->size += tsize;
- return prepend_alloc(m, tbase, oldbase, nb);
- }
- else
- add_segment(m, tbase, tsize, mmap_flag);
- }
- }
-
- if (nb < m->topsize) { /* Allocate from new or extended top space */
- size_t rsize = m->topsize -= nb;
- mchunkptr p = m->top;
- mchunkptr r = m->top = chunk_plus_offset(p, nb);
- r->head = rsize | PINUSE_BIT;
- set_size_and_pinuse_of_inuse_chunk(m, p, nb);
- check_top_chunk(m, m->top);
- check_malloced_chunk(m, chunk2mem(p), nb);
- return chunk2mem(p);
- }
- }
-
- MALLOC_FAILURE_ACTION;
- return 0;
-}
-
-/* ----------------------- system deallocation -------------------------- */
-
-/* Unmap and unlink any mmapped segments that don't contain used chunks */
-static size_t release_unused_segments(mstate m) {
- size_t released = 0;
- int nsegs = 0;
- msegmentptr pred = &m->seg;
- msegmentptr sp = pred->next;
- while (sp != 0) {
- char* base = sp->base;
- size_t size = sp->size;
- msegmentptr next = sp->next;
- ++nsegs;
- if (is_mmapped_segment(sp) && !is_extern_segment(sp)) {
- mchunkptr p = align_as_chunk(base);
- size_t psize = chunksize(p);
- /* Can unmap if first chunk holds entire segment and not pinned */
- if (!is_inuse(p) && (char*)p + psize >= base + size - TOP_FOOT_SIZE) {
- tchunkptr tp = (tchunkptr)p;
- assert(segment_holds(sp, (char*)sp));
- if (p == m->dv) {
- m->dv = 0;
- m->dvsize = 0;
- }
- else {
- unlink_large_chunk(m, tp);
- }
- if (CALL_MUNMAP(base, size) == 0) {
- released += size;
- m->footprint -= size;
- /* unlink obsoleted record */
- sp = pred;
- sp->next = next;
- }
- else { /* back out if cannot unmap */
- insert_large_chunk(m, tp, psize);
- }
- }
- }
- if (NO_SEGMENT_TRAVERSAL) /* scan only first segment */
- break;
- pred = sp;
- sp = next;
- }
- /* Reset check counter */
- m->release_checks = (((size_t) nsegs > (size_t) MAX_RELEASE_CHECK_RATE)?
- (size_t) nsegs : (size_t) MAX_RELEASE_CHECK_RATE);
- return released;
-}
-
-static int sys_trim(mstate m, size_t pad) {
- size_t released = 0;
- ensure_initialization();
- if (pad < MAX_REQUEST && is_initialized(m)) {
- pad += TOP_FOOT_SIZE; /* ensure enough room for segment overhead */
-
- if (m->topsize > pad) {
- /* Shrink top space in granularity-size units, keeping at least one */
- size_t unit = mparams.granularity;
- size_t extra = ((m->topsize - pad + (unit - SIZE_T_ONE)) / unit -
- SIZE_T_ONE) * unit;
- msegmentptr sp = segment_holding(m, (char*)m->top);
-
- if (!is_extern_segment(sp)) {
- if (is_mmapped_segment(sp)) {
- if (HAVE_MMAP &&
- sp->size >= extra &&
- !has_segment_link(m, sp)) { /* can't shrink if pinned */
- size_t newsize = sp->size - extra;
- (void)newsize; /* placate people compiling -Wunused-variable */
- /* Prefer mremap, fall back to munmap */
- if ((CALL_MREMAP(sp->base, sp->size, newsize, 0) != MFAIL) ||
- (CALL_MUNMAP(sp->base + newsize, extra) == 0)) {
- released = extra;
- }
- }
- }
- else if (HAVE_MORECORE) {
- if (extra >= HALF_MAX_SIZE_T) /* Avoid wrapping negative */
- extra = (HALF_MAX_SIZE_T) + SIZE_T_ONE - unit;
- ACQUIRE_MALLOC_GLOBAL_LOCK();
- {
- /* Make sure end of memory is where we last set it. */
- char* old_br = (char*)(CALL_MORECORE(0));
- if (old_br == sp->base + sp->size) {
- char* rel_br = (char*)(CALL_MORECORE(-extra));
- char* new_br = (char*)(CALL_MORECORE(0));
- if (rel_br != CMFAIL && new_br < old_br)
- released = old_br - new_br;
- }
- }
- RELEASE_MALLOC_GLOBAL_LOCK();
- }
- }
-
- if (released != 0) {
- sp->size -= released;
- m->footprint -= released;
- init_top(m, m->top, m->topsize - released);
- check_top_chunk(m, m->top);
- }
- }
-
- /* Unmap any unused mmapped segments */
- if (HAVE_MMAP)
- released += release_unused_segments(m);
-
- /* On failure, disable autotrim to avoid repeated failed future calls */
- if (released == 0 && m->topsize > m->trim_check)
- m->trim_check = MAX_SIZE_T;
- }
-
- return (released != 0)? 1 : 0;
-}
-
-/* Consolidate and bin a chunk. Differs from exported versions
- of free mainly in that the chunk need not be marked as inuse.
-*/
-static void dispose_chunk(mstate m, mchunkptr p, size_t psize) {
- mchunkptr next = chunk_plus_offset(p, psize);
- if (!pinuse(p)) {
- mchunkptr prev;
- size_t prevsize = p->prev_foot;
- if (is_mmapped(p)) {
- psize += prevsize + MMAP_FOOT_PAD;
- if (CALL_MUNMAP((char*)p - prevsize, psize) == 0)
- m->footprint -= psize;
- return;
- }
- prev = chunk_minus_offset(p, prevsize);
- psize += prevsize;
- p = prev;
- if (RTCHECK(ok_address(m, prev))) { /* consolidate backward */
- if (p != m->dv) {
- unlink_chunk(m, p, prevsize);
- }
- else if ((next->head & INUSE_BITS) == INUSE_BITS) {
- m->dvsize = psize;
- set_free_with_pinuse(p, psize, next);
- return;
- }
- }
- else {
- CORRUPTION_ERROR_ACTION(m);
- return;
- }
- }
- if (RTCHECK(ok_address(m, next))) {
- if (!cinuse(next)) { /* consolidate forward */
- if (next == m->top) {
- size_t tsize = m->topsize += psize;
- m->top = p;
- p->head = tsize | PINUSE_BIT;
- if (p == m->dv) {
- m->dv = 0;
- m->dvsize = 0;
- }
- return;
- }
- else if (next == m->dv) {
- size_t dsize = m->dvsize += psize;
- m->dv = p;
- set_size_and_pinuse_of_free_chunk(p, dsize);
- return;
- }
- else {
- size_t nsize = chunksize(next);
- psize += nsize;
- unlink_chunk(m, next, nsize);
- set_size_and_pinuse_of_free_chunk(p, psize);
- if (p == m->dv) {
- m->dvsize = psize;
- return;
- }
- }
- }
- else {
- set_free_with_pinuse(p, psize, next);
- }
- insert_chunk(m, p, psize);
- }
- else {
- CORRUPTION_ERROR_ACTION(m);
- }
-}
-
-/* ---------------------------- malloc --------------------------- */
-
-/* allocate a large request from the best fitting chunk in a treebin */
-static void* tmalloc_large(mstate m, size_t nb) {
- tchunkptr v = 0;
- size_t rsize = -nb; /* Unsigned negation */
- tchunkptr t;
- bindex_t idx;
- compute_tree_index(nb, idx);
- if ((t = *treebin_at(m, idx)) != 0) {
- /* Traverse tree for this bin looking for node with size == nb */
- size_t sizebits = nb << leftshift_for_tree_index(idx);
- tchunkptr rst = 0; /* The deepest untaken right subtree */
- for (;;) {
- tchunkptr rt;
- size_t trem = chunksize(t) - nb;
- if (trem < rsize) {
- v = t;
- if ((rsize = trem) == 0)
- break;
- }
- rt = t->child[1];
- t = t->child[(sizebits >> (SIZE_T_BITSIZE-SIZE_T_ONE)) & 1];
- if (rt != 0 && rt != t)
- rst = rt;
- if (t == 0) {
- t = rst; /* set t to least subtree holding sizes > nb */
- break;
- }
- sizebits <<= 1;
- }
- }
- if (t == 0 && v == 0) { /* set t to root of next non-empty treebin */
- binmap_t leftbits = left_bits(idx2bit(idx)) & m->treemap;
- if (leftbits != 0) {
- bindex_t i;
- binmap_t leastbit = least_bit(leftbits);
- compute_bit2idx(leastbit, i);
- t = *treebin_at(m, i);
- }
- }
-
- while (t != 0) { /* find smallest of tree or subtree */
- size_t trem = chunksize(t) - nb;
- if (trem < rsize) {
- rsize = trem;
- v = t;
- }
- t = leftmost_child(t);
- }
-
- /* If dv is a better fit, return 0 so malloc will use it */
- if (v != 0 && rsize < (size_t)(m->dvsize - nb)) {
- if (RTCHECK(ok_address(m, v))) { /* split */
- mchunkptr r = chunk_plus_offset(v, nb);
- assert(chunksize(v) == rsize + nb);
- if (RTCHECK(ok_next(v, r))) {
- unlink_large_chunk(m, v);
- if (rsize < MIN_CHUNK_SIZE)
- set_inuse_and_pinuse(m, v, (rsize + nb));
- else {
- set_size_and_pinuse_of_inuse_chunk(m, v, nb);
- set_size_and_pinuse_of_free_chunk(r, rsize);
- insert_chunk(m, r, rsize);
- }
- return chunk2mem(v);
- }
- }
- CORRUPTION_ERROR_ACTION(m);
- }
- return 0;
-}
-
-/* allocate a small request from the best fitting chunk in a treebin */
-static void* tmalloc_small(mstate m, size_t nb) {
- tchunkptr t, v;
- size_t rsize;
- bindex_t i;
- binmap_t leastbit = least_bit(m->treemap);
- compute_bit2idx(leastbit, i);
- v = t = *treebin_at(m, i);
- rsize = chunksize(t) - nb;
-
- while ((t = leftmost_child(t)) != 0) {
- size_t trem = chunksize(t) - nb;
- if (trem < rsize) {
- rsize = trem;
- v = t;
- }
- }
-
- if (RTCHECK(ok_address(m, v))) {
- mchunkptr r = chunk_plus_offset(v, nb);
- assert(chunksize(v) == rsize + nb);
- if (RTCHECK(ok_next(v, r))) {
- unlink_large_chunk(m, v);
- if (rsize < MIN_CHUNK_SIZE)
- set_inuse_and_pinuse(m, v, (rsize + nb));
- else {
- set_size_and_pinuse_of_inuse_chunk(m, v, nb);
- set_size_and_pinuse_of_free_chunk(r, rsize);
- replace_dv(m, r, rsize);
- }
- return chunk2mem(v);
- }
- }
-
- CORRUPTION_ERROR_ACTION(m);
- return 0;
-}
-
-#if !ONLY_MSPACES
-
-void* dlmalloc(size_t bytes) {
- /*
- Basic algorithm:
- If a small request (< 256 bytes minus per-chunk overhead):
- 1. If one exists, use a remainderless chunk in associated smallbin.
- (Remainderless means that there are too few excess bytes to
- represent as a chunk.)
- 2. If it is big enough, use the dv chunk, which is normally the
- chunk adjacent to the one used for the most recent small request.
- 3. If one exists, split the smallest available chunk in a bin,
- saving remainder in dv.
- 4. If it is big enough, use the top chunk.
- 5. If available, get memory from system and use it
- Otherwise, for a large request:
- 1. Find the smallest available binned chunk that fits, and use it
- if it is better fitting than dv chunk, splitting if necessary.
- 2. If better fitting than any binned chunk, use the dv chunk.
- 3. If it is big enough, use the top chunk.
- 4. If request size >= mmap threshold, try to directly mmap this chunk.
- 5. If available, get memory from system and use it
-
- The ugly goto's here ensure that postaction occurs along all paths.
- */
-
-#if USE_LOCKS
- ensure_initialization(); /* initialize in sys_alloc if not using locks */
-#endif
-
- if (!PREACTION(gm)) {
- void* mem;
- size_t nb;
- if (bytes <= MAX_SMALL_REQUEST) {
- bindex_t idx;
- binmap_t smallbits;
- nb = (bytes < MIN_REQUEST)? MIN_CHUNK_SIZE : pad_request(bytes);
- idx = small_index(nb);
- smallbits = gm->smallmap >> idx;
-
- if ((smallbits & 0x3U) != 0) { /* Remainderless fit to a smallbin. */
- mchunkptr b, p;
- idx += ~smallbits & 1; /* Uses next bin if idx empty */
- b = smallbin_at(gm, idx);
- p = b->fd;
- assert(chunksize(p) == small_index2size(idx));
- unlink_first_small_chunk(gm, b, p, idx);
- set_inuse_and_pinuse(gm, p, small_index2size(idx));
- mem = chunk2mem(p);
- check_malloced_chunk(gm, mem, nb);
- goto postaction;
- }
-
- else if (nb > gm->dvsize) {
- if (smallbits != 0) { /* Use chunk in next nonempty smallbin */
- mchunkptr b, p, r;
- size_t rsize;
- bindex_t i;
- binmap_t leftbits = (smallbits << idx) & left_bits(idx2bit(idx));
- binmap_t leastbit = least_bit(leftbits);
- compute_bit2idx(leastbit, i);
- b = smallbin_at(gm, i);
- p = b->fd;
- assert(chunksize(p) == small_index2size(i));
- unlink_first_small_chunk(gm, b, p, i);
- rsize = small_index2size(i) - nb;
- /* Fit here cannot be remainderless if 4byte sizes */
- if (SIZE_T_SIZE != 4 && rsize < MIN_CHUNK_SIZE)
- set_inuse_and_pinuse(gm, p, small_index2size(i));
- else {
- set_size_and_pinuse_of_inuse_chunk(gm, p, nb);
- r = chunk_plus_offset(p, nb);
- set_size_and_pinuse_of_free_chunk(r, rsize);
- replace_dv(gm, r, rsize);
- }
- mem = chunk2mem(p);
- check_malloced_chunk(gm, mem, nb);
- goto postaction;
- }
-
- else if (gm->treemap != 0 && (mem = tmalloc_small(gm, nb)) != 0) {
- check_malloced_chunk(gm, mem, nb);
- goto postaction;
- }
- }
- }
- else if (bytes >= MAX_REQUEST)
- nb = MAX_SIZE_T; /* Too big to allocate. Force failure (in sys alloc) */
- else {
- nb = pad_request(bytes);
- if (gm->treemap != 0 && (mem = tmalloc_large(gm, nb)) != 0) {
- check_malloced_chunk(gm, mem, nb);
- goto postaction;
- }
- }
-
- if (nb <= gm->dvsize) {
- size_t rsize = gm->dvsize - nb;
- mchunkptr p = gm->dv;
- if (rsize >= MIN_CHUNK_SIZE) { /* split dv */
- mchunkptr r = gm->dv = chunk_plus_offset(p, nb);
- gm->dvsize = rsize;
- set_size_and_pinuse_of_free_chunk(r, rsize);
- set_size_and_pinuse_of_inuse_chunk(gm, p, nb);
- }
- else { /* exhaust dv */
- size_t dvs = gm->dvsize;
- gm->dvsize = 0;
- gm->dv = 0;
- set_inuse_and_pinuse(gm, p, dvs);
- }
- mem = chunk2mem(p);
- check_malloced_chunk(gm, mem, nb);
- goto postaction;
- }
-
- else if (nb < gm->topsize) { /* Split top */
- size_t rsize = gm->topsize -= nb;
- mchunkptr p = gm->top;
- mchunkptr r = gm->top = chunk_plus_offset(p, nb);
- r->head = rsize | PINUSE_BIT;
- set_size_and_pinuse_of_inuse_chunk(gm, p, nb);
- mem = chunk2mem(p);
- check_top_chunk(gm, gm->top);
- check_malloced_chunk(gm, mem, nb);
- goto postaction;
- }
-
- mem = sys_alloc(gm, nb);
-
- postaction:
- POSTACTION(gm);
- return mem;
- }
-
- return 0;
-}
-
-/* ---------------------------- free --------------------------- */
-
-void dlfree(void* mem) {
- /*
- Consolidate freed chunks with preceeding or succeeding bordering
- free chunks, if they exist, and then place in a bin. Intermixed
- with special cases for top, dv, mmapped chunks, and usage errors.
- */
-
- if (mem != 0) {
- mchunkptr p = mem2chunk(mem);
-#if FOOTERS
- mstate fm = get_mstate_for(p);
- if (!ok_magic(fm)) {
- USAGE_ERROR_ACTION(fm, p);
- return;
- }
-#else /* FOOTERS */
-#define fm gm
-#endif /* FOOTERS */
- if (!PREACTION(fm)) {
- check_inuse_chunk(fm, p);
- if (RTCHECK(ok_address(fm, p) && ok_inuse(p))) {
- size_t psize = chunksize(p);
- mchunkptr next = chunk_plus_offset(p, psize);
- if (!pinuse(p)) {
- size_t prevsize = p->prev_foot;
- if (is_mmapped(p)) {
- psize += prevsize + MMAP_FOOT_PAD;
- if (CALL_MUNMAP((char*)p - prevsize, psize) == 0)
- fm->footprint -= psize;
- goto postaction;
- }
- else {
- mchunkptr prev = chunk_minus_offset(p, prevsize);
- psize += prevsize;
- p = prev;
- if (RTCHECK(ok_address(fm, prev))) { /* consolidate backward */
- if (p != fm->dv) {
- unlink_chunk(fm, p, prevsize);
- }
- else if ((next->head & INUSE_BITS) == INUSE_BITS) {
- fm->dvsize = psize;
- set_free_with_pinuse(p, psize, next);
- goto postaction;
- }
- }
- else
- goto erroraction;
- }
- }
-
- if (RTCHECK(ok_next(p, next) && ok_pinuse(next))) {
- if (!cinuse(next)) { /* consolidate forward */
- if (next == fm->top) {
- size_t tsize = fm->topsize += psize;
- fm->top = p;
- p->head = tsize | PINUSE_BIT;
- if (p == fm->dv) {
- fm->dv = 0;
- fm->dvsize = 0;
- }
- if (should_trim(fm, tsize))
- sys_trim(fm, 0);
- goto postaction;
- }
- else if (next == fm->dv) {
- size_t dsize = fm->dvsize += psize;
- fm->dv = p;
- set_size_and_pinuse_of_free_chunk(p, dsize);
- goto postaction;
- }
- else {
- size_t nsize = chunksize(next);
- psize += nsize;
- unlink_chunk(fm, next, nsize);
- set_size_and_pinuse_of_free_chunk(p, psize);
- if (p == fm->dv) {
- fm->dvsize = psize;
- goto postaction;
- }
- }
- }
- else
- set_free_with_pinuse(p, psize, next);
-
- if (is_small(psize)) {
- insert_small_chunk(fm, p, psize);
- check_free_chunk(fm, p);
- }
- else {
- tchunkptr tp = (tchunkptr)p;
- insert_large_chunk(fm, tp, psize);
- check_free_chunk(fm, p);
- if (--fm->release_checks == 0)
- release_unused_segments(fm);
- }
- goto postaction;
- }
- }
- erroraction:
- USAGE_ERROR_ACTION(fm, p);
- postaction:
- POSTACTION(fm);
- }
- }
-#if !FOOTERS
-#undef fm
-#endif /* FOOTERS */
-}
-
-void* dlcalloc(size_t n_elements, size_t elem_size) {
- void* mem;
- size_t req = 0;
- if (n_elements != 0) {
- req = n_elements * elem_size;
- if (((n_elements | elem_size) & ~(size_t)0xffff) &&
- (req / n_elements != elem_size))
- req = MAX_SIZE_T; /* force downstream failure on overflow */
- }
- mem = dlmalloc(req);
- if (mem != 0 && calloc_must_clear(mem2chunk(mem)))
- memset(mem, 0, req);
- return mem;
-}
-
-#endif /* !ONLY_MSPACES */
-
-/* ------------ Internal support for realloc, memalign, etc -------------- */
-
-/* Try to realloc; only in-place unless can_move true */
-static mchunkptr try_realloc_chunk(mstate m, mchunkptr p, size_t nb,
- int can_move) {
- mchunkptr newp = 0;
- size_t oldsize = chunksize(p);
- mchunkptr next = chunk_plus_offset(p, oldsize);
- if (RTCHECK(ok_address(m, p) && ok_inuse(p) &&
- ok_next(p, next) && ok_pinuse(next))) {
- if (is_mmapped(p)) {
- newp = mmap_resize(m, p, nb, can_move);
- }
- else if (oldsize >= nb) { /* already big enough */
- size_t rsize = oldsize - nb;
- if (rsize >= MIN_CHUNK_SIZE) { /* split off remainder */
- mchunkptr r = chunk_plus_offset(p, nb);
- set_inuse(m, p, nb);
- set_inuse(m, r, rsize);
- dispose_chunk(m, r, rsize);
- }
- newp = p;
- }
- else if (next == m->top) { /* extend into top */
- if (oldsize + m->topsize > nb) {
- size_t newsize = oldsize + m->topsize;
- size_t newtopsize = newsize - nb;
- mchunkptr newtop = chunk_plus_offset(p, nb);
- set_inuse(m, p, nb);
- newtop->head = newtopsize |PINUSE_BIT;
- m->top = newtop;
- m->topsize = newtopsize;
- newp = p;
- }
- }
- else if (next == m->dv) { /* extend into dv */
- size_t dvs = m->dvsize;
- if (oldsize + dvs >= nb) {
- size_t dsize = oldsize + dvs - nb;
- if (dsize >= MIN_CHUNK_SIZE) {
- mchunkptr r = chunk_plus_offset(p, nb);
- mchunkptr n = chunk_plus_offset(r, dsize);
- set_inuse(m, p, nb);
- set_size_and_pinuse_of_free_chunk(r, dsize);
- clear_pinuse(n);
- m->dvsize = dsize;
- m->dv = r;
- }
- else { /* exhaust dv */
- size_t newsize = oldsize + dvs;
- set_inuse(m, p, newsize);
- m->dvsize = 0;
- m->dv = 0;
- }
- newp = p;
- }
- }
- else if (!cinuse(next)) { /* extend into next free chunk */
- size_t nextsize = chunksize(next);
- if (oldsize + nextsize >= nb) {
- size_t rsize = oldsize + nextsize - nb;
- unlink_chunk(m, next, nextsize);
- if (rsize < MIN_CHUNK_SIZE) {
- size_t newsize = oldsize + nextsize;
- set_inuse(m, p, newsize);
- }
- else {
- mchunkptr r = chunk_plus_offset(p, nb);
- set_inuse(m, p, nb);
- set_inuse(m, r, rsize);
- dispose_chunk(m, r, rsize);
- }
- newp = p;
- }
- }
- }
- else {
- USAGE_ERROR_ACTION(m, chunk2mem(p));
- }
- return newp;
-}
-
-static void* internal_memalign(mstate m, size_t alignment, size_t bytes) {
- void* mem = 0;
- if (alignment < MIN_CHUNK_SIZE) /* must be at least a minimum chunk size */
- alignment = MIN_CHUNK_SIZE;
- if ((alignment & (alignment-SIZE_T_ONE)) != 0) {/* Ensure a power of 2 */
- size_t a = MALLOC_ALIGNMENT << 1;
- while (a < alignment) a <<= 1;
- alignment = a;
- }
- if (bytes >= MAX_REQUEST - alignment) {
- if (m != 0) { /* Test isn't needed but avoids compiler warning */
- MALLOC_FAILURE_ACTION;
- }
- }
- else {
- size_t nb = request2size(bytes);
- size_t req = nb + alignment + MIN_CHUNK_SIZE - CHUNK_OVERHEAD;
- mem = internal_malloc(m, req);
- if (mem != 0) {
- mchunkptr p = mem2chunk(mem);
- if (PREACTION(m))
- return 0;
- if ((((size_t)(mem)) & (alignment - 1)) != 0) { /* misaligned */
- /*
- Find an aligned spot inside chunk. Since we need to give
- back leading space in a chunk of at least MIN_CHUNK_SIZE, if
- the first calculation places us at a spot with less than
- MIN_CHUNK_SIZE leader, we can move to the next aligned spot.
- We've allocated enough total room so that this is always
- possible.
- */
- char* br = (char*)mem2chunk((size_t)(((size_t)((char*)mem + alignment -
- SIZE_T_ONE)) &
- -alignment));
- char* pos = ((size_t)(br - (char*)(p)) >= MIN_CHUNK_SIZE)?
- br : br+alignment;
- mchunkptr newp = (mchunkptr)pos;
- size_t leadsize = pos - (char*)(p);
- size_t newsize = chunksize(p) - leadsize;
-
- if (is_mmapped(p)) { /* For mmapped chunks, just adjust offset */
- newp->prev_foot = p->prev_foot + leadsize;
- newp->head = newsize;
- }
- else { /* Otherwise, give back leader, use the rest */
- set_inuse(m, newp, newsize);
- set_inuse(m, p, leadsize);
- dispose_chunk(m, p, leadsize);
- }
- p = newp;
- }
-
- /* Give back spare room at the end */
- if (!is_mmapped(p)) {
- size_t size = chunksize(p);
- if (size > nb + MIN_CHUNK_SIZE) {
- size_t remainder_size = size - nb;
- mchunkptr remainder = chunk_plus_offset(p, nb);
- set_inuse(m, p, nb);
- set_inuse(m, remainder, remainder_size);
- dispose_chunk(m, remainder, remainder_size);
- }
- }
-
- mem = chunk2mem(p);
- assert (chunksize(p) >= nb);
- assert(((size_t)mem & (alignment - 1)) == 0);
- check_inuse_chunk(m, p);
- POSTACTION(m);
- }
- }
- return mem;
-}
-
-/*
- Common support for independent_X routines, handling
- all of the combinations that can result.
- The opts arg has:
- bit 0 set if all elements are same size (using sizes[0])
- bit 1 set if elements should be zeroed
-*/
-static void** ialloc(mstate m,
- size_t n_elements,
- size_t* sizes,
- int opts,
- void* chunks[]) {
-
- size_t element_size; /* chunksize of each element, if all same */
- size_t contents_size; /* total size of elements */
- size_t array_size; /* request size of pointer array */
- void* mem; /* malloced aggregate space */
- mchunkptr p; /* corresponding chunk */
- size_t remainder_size; /* remaining bytes while splitting */
- void** marray; /* either "chunks" or malloced ptr array */
- mchunkptr array_chunk; /* chunk for malloced ptr array */
- flag_t was_enabled; /* to disable mmap */
- size_t size;
- size_t i;
-
- ensure_initialization();
- /* compute array length, if needed */
- if (chunks != 0) {
- if (n_elements == 0)
- return chunks; /* nothing to do */
- marray = chunks;
- array_size = 0;
- }
- else {
- /* if empty req, must still return chunk representing empty array */
- if (n_elements == 0)
- return (void**)internal_malloc(m, 0);
- marray = 0;
- array_size = request2size(n_elements * (sizeof(void*)));
- }
-
- /* compute total element size */
- if (opts & 0x1) { /* all-same-size */
- element_size = request2size(*sizes);
- contents_size = n_elements * element_size;
- }
- else { /* add up all the sizes */
- element_size = 0;
- contents_size = 0;
- for (i = 0; i != n_elements; ++i)
- contents_size += request2size(sizes[i]);
- }
-
- size = contents_size + array_size;
-
- /*
- Allocate the aggregate chunk. First disable direct-mmapping so
- malloc won't use it, since we would not be able to later
- free/realloc space internal to a segregated mmap region.
- */
- was_enabled = use_mmap(m);
- disable_mmap(m);
- mem = internal_malloc(m, size - CHUNK_OVERHEAD);
- if (was_enabled)
- enable_mmap(m);
- if (mem == 0)
- return 0;
-
- if (PREACTION(m)) return 0;
- p = mem2chunk(mem);
- remainder_size = chunksize(p);
-
- assert(!is_mmapped(p));
-
- if (opts & 0x2) { /* optionally clear the elements */
- memset((size_t*)mem, 0, remainder_size - SIZE_T_SIZE - array_size);
- }
-
- /* If not provided, allocate the pointer array as final part of chunk */
- if (marray == 0) {
- size_t array_chunk_size;
- array_chunk = chunk_plus_offset(p, contents_size);
- array_chunk_size = remainder_size - contents_size;
- marray = (void**) (chunk2mem(array_chunk));
- set_size_and_pinuse_of_inuse_chunk(m, array_chunk, array_chunk_size);
- remainder_size = contents_size;
- }
-
- /* split out elements */
- for (i = 0; ; ++i) {
- marray[i] = chunk2mem(p);
- if (i != n_elements-1) {
- if (element_size != 0)
- size = element_size;
- else
- size = request2size(sizes[i]);
- remainder_size -= size;
- set_size_and_pinuse_of_inuse_chunk(m, p, size);
- p = chunk_plus_offset(p, size);
- }
- else { /* the final element absorbs any overallocation slop */
- set_size_and_pinuse_of_inuse_chunk(m, p, remainder_size);
- break;
- }
- }
-
-#if DEBUG
- if (marray != chunks) {
- /* final element must have exactly exhausted chunk */
- if (element_size != 0) {
- assert(remainder_size == element_size);
- }
- else {
- assert(remainder_size == request2size(sizes[i]));
- }
- check_inuse_chunk(m, mem2chunk(marray));
- }
- for (i = 0; i != n_elements; ++i)
- check_inuse_chunk(m, mem2chunk(marray[i]));
-
-#endif /* DEBUG */
-
- POSTACTION(m);
- return marray;
-}
-
-/* Try to free all pointers in the given array.
- Note: this could be made faster, by delaying consolidation,
- at the price of disabling some user integrity checks, We
- still optimize some consolidations by combining adjacent
- chunks before freeing, which will occur often if allocated
- with ialloc or the array is sorted.
-*/
-static size_t internal_bulk_free(mstate m, void* array[], size_t nelem) {
- size_t unfreed = 0;
- if (!PREACTION(m)) {
- void** a;
- void** fence = &(array[nelem]);
- for (a = array; a != fence; ++a) {
- void* mem = *a;
- if (mem != 0) {
- mchunkptr p = mem2chunk(mem);
- size_t psize = chunksize(p);
-#if FOOTERS
- if (get_mstate_for(p) != m) {
- ++unfreed;
- continue;
- }
-#endif
- check_inuse_chunk(m, p);
- *a = 0;
- if (RTCHECK(ok_address(m, p) && ok_inuse(p))) {
- void ** b = a + 1; /* try to merge with next chunk */
- mchunkptr next = next_chunk(p);
- if (b != fence && *b == chunk2mem(next)) {
- size_t newsize = chunksize(next) + psize;
- set_inuse(m, p, newsize);
- *b = chunk2mem(p);
- }
- else
- dispose_chunk(m, p, psize);
- }
- else {
- CORRUPTION_ERROR_ACTION(m);
- break;
- }
- }
- }
- if (should_trim(m, m->topsize))
- sys_trim(m, 0);
- POSTACTION(m);
- }
- return unfreed;
-}
-
-/* Traversal */
-#if MALLOC_INSPECT_ALL
-static void internal_inspect_all(mstate m,
- void(*handler)(void *start,
- void *end,
- size_t used_bytes,
- void* callback_arg),
- void* arg) {
- if (is_initialized(m)) {
- mchunkptr top = m->top;
- msegmentptr s;
- for (s = &m->seg; s != 0; s = s->next) {
- mchunkptr q = align_as_chunk(s->base);
- while (segment_holds(s, q) && q->head != FENCEPOST_HEAD) {
- mchunkptr next = next_chunk(q);
- size_t sz = chunksize(q);
- size_t used;
- void* start;
- if (is_inuse(q)) {
- used = sz - CHUNK_OVERHEAD; /* must not be mmapped */
- start = chunk2mem(q);
- }
- else {
- used = 0;
- if (is_small(sz)) { /* offset by possible bookkeeping */
- start = (void*)((char*)q + sizeof(struct malloc_chunk));
- }
- else {
- start = (void*)((char*)q + sizeof(struct malloc_tree_chunk));
- }
- }
- if (start < (void*)next) /* skip if all space is bookkeeping */
- handler(start, next, used, arg);
- if (q == top)
- break;
- q = next;
- }
- }
- }
-}
-#endif /* MALLOC_INSPECT_ALL */
-
-/* ------------------ Exported realloc, memalign, etc -------------------- */
-
-#if !ONLY_MSPACES
-
-void* dlrealloc(void* oldmem, size_t bytes) {
- void* mem = 0;
- if (oldmem == 0) {
- mem = dlmalloc(bytes);
- }
- else if (bytes >= MAX_REQUEST) {
- MALLOC_FAILURE_ACTION;
- }
-#ifdef REALLOC_ZERO_BYTES_FREES
- else if (bytes == 0) {
- dlfree(oldmem);
- }
-#endif /* REALLOC_ZERO_BYTES_FREES */
- else {
- size_t nb = request2size(bytes);
- mchunkptr oldp = mem2chunk(oldmem);
-#if ! FOOTERS
- mstate m = gm;
-#else /* FOOTERS */
- mstate m = get_mstate_for(oldp);
- if (!ok_magic(m)) {
- USAGE_ERROR_ACTION(m, oldmem);
- return 0;
- }
-#endif /* FOOTERS */
- if (!PREACTION(m)) {
- mchunkptr newp = try_realloc_chunk(m, oldp, nb, 1);
- POSTACTION(m);
- if (newp != 0) {
- check_inuse_chunk(m, newp);
- mem = chunk2mem(newp);
- }
- else {
- mem = internal_malloc(m, bytes);
- if (mem != 0) {
- size_t oc = chunksize(oldp) - overhead_for(oldp);
- memcpy(mem, oldmem, (oc < bytes)? oc : bytes);
- internal_free(m, oldmem);
- }
- }
- }
- }
- return mem;
-}
-
-void* dlrealloc_in_place(void* oldmem, size_t bytes) {
- void* mem = 0;
- if (oldmem != 0) {
- if (bytes >= MAX_REQUEST) {
- MALLOC_FAILURE_ACTION;
- }
- else {
- size_t nb = request2size(bytes);
- mchunkptr oldp = mem2chunk(oldmem);
-#if ! FOOTERS
- mstate m = gm;
-#else /* FOOTERS */
- mstate m = get_mstate_for(oldp);
- if (!ok_magic(m)) {
- USAGE_ERROR_ACTION(m, oldmem);
- return 0;
- }
-#endif /* FOOTERS */
- if (!PREACTION(m)) {
- mchunkptr newp = try_realloc_chunk(m, oldp, nb, 0);
- POSTACTION(m);
- if (newp == oldp) {
- check_inuse_chunk(m, newp);
- mem = oldmem;
- }
- }
- }
- }
- return mem;
-}
-
-void* dlmemalign(size_t alignment, size_t bytes) {
- if (alignment <= MALLOC_ALIGNMENT) {
- return dlmalloc(bytes);
- }
- return internal_memalign(gm, alignment, bytes);
-}
-
-int dlposix_memalign(void** pp, size_t alignment, size_t bytes) {
- void* mem = 0;
- if (alignment == MALLOC_ALIGNMENT)
- mem = dlmalloc(bytes);
- else {
- size_t d = alignment / sizeof(void*);
- size_t r = alignment % sizeof(void*);
- if (r != 0 || d == 0 || (d & (d-SIZE_T_ONE)) != 0)
- return EINVAL;
- else if (bytes <= MAX_REQUEST - alignment) {
- if (alignment < MIN_CHUNK_SIZE)
- alignment = MIN_CHUNK_SIZE;
- mem = internal_memalign(gm, alignment, bytes);
- }
- }
- if (mem == 0)
- return ENOMEM;
- else {
- *pp = mem;
- return 0;
- }
-}
-
-void* dlvalloc(size_t bytes) {
- size_t pagesz;
- ensure_initialization();
- pagesz = mparams.page_size;
- return dlmemalign(pagesz, bytes);
-}
-
-void* dlpvalloc(size_t bytes) {
- size_t pagesz;
- ensure_initialization();
- pagesz = mparams.page_size;
- return dlmemalign(pagesz, (bytes + pagesz - SIZE_T_ONE) & ~(pagesz - SIZE_T_ONE));
-}
-
-void** dlindependent_calloc(size_t n_elements, size_t elem_size,
- void* chunks[]) {
- size_t sz = elem_size; /* serves as 1-element array */
- return ialloc(gm, n_elements, &sz, 3, chunks);
-}
-
-void** dlindependent_comalloc(size_t n_elements, size_t sizes[],
- void* chunks[]) {
- return ialloc(gm, n_elements, sizes, 0, chunks);
-}
-
-size_t dlbulk_free(void* array[], size_t nelem) {
- return internal_bulk_free(gm, array, nelem);
-}
-
-#if MALLOC_INSPECT_ALL
-void dlmalloc_inspect_all(void(*handler)(void *start,
- void *end,
- size_t used_bytes,
- void* callback_arg),
- void* arg) {
- ensure_initialization();
- if (!PREACTION(gm)) {
- internal_inspect_all(gm, handler, arg);
- POSTACTION(gm);
- }
-}
-#endif /* MALLOC_INSPECT_ALL */
-
-int dlmalloc_trim(size_t pad) {
- int result = 0;
- ensure_initialization();
- if (!PREACTION(gm)) {
- result = sys_trim(gm, pad);
- POSTACTION(gm);
- }
- return result;
-}
-
-size_t dlmalloc_footprint(void) {
- return gm->footprint;
-}
-
-size_t dlmalloc_max_footprint(void) {
- return gm->max_footprint;
-}
-
-size_t dlmalloc_footprint_limit(void) {
- size_t maf = gm->footprint_limit;
- return maf == 0 ? MAX_SIZE_T : maf;
-}
-
-size_t dlmalloc_set_footprint_limit(size_t bytes) {
- size_t result; /* invert sense of 0 */
- if (bytes == 0)
- result = granularity_align(1); /* Use minimal size */
- if (bytes == MAX_SIZE_T)
- result = 0; /* disable */
- else
- result = granularity_align(bytes);
- return gm->footprint_limit = result;
-}
-
-#if !NO_MALLINFO
-struct mallinfo dlmallinfo(void) {
- return internal_mallinfo(gm);
-}
-#endif /* NO_MALLINFO */
-
-#if !NO_MALLOC_STATS
-void dlmalloc_stats() {
- internal_malloc_stats(gm);
-}
-#endif /* NO_MALLOC_STATS */
-
-int dlmallopt(int param_number, int value) {
- return change_mparam(param_number, value);
-}
-
-size_t dlmalloc_usable_size(void* mem) {
- if (mem != 0) {
- mchunkptr p = mem2chunk(mem);
- if (is_inuse(p))
- return chunksize(p) - overhead_for(p);
- }
- return 0;
-}
-
-#endif /* !ONLY_MSPACES */
-
-/* ----------------------------- user mspaces ---------------------------- */
-
-#if MSPACES
-
-static mstate init_user_mstate(char* tbase, size_t tsize) {
- size_t msize = pad_request(sizeof(struct malloc_state));
- mchunkptr mn;
- mchunkptr msp = align_as_chunk(tbase);
- mstate m = (mstate)(chunk2mem(msp));
- memset(m, 0, msize);
- (void)INITIAL_LOCK(&m->mutex);
- msp->head = (msize|INUSE_BITS);
- m->seg.base = m->least_addr = tbase;
- m->seg.size = m->footprint = m->max_footprint = tsize;
- m->magic = mparams.magic;
- m->release_checks = MAX_RELEASE_CHECK_RATE;
- m->mflags = mparams.default_mflags;
- m->extp = 0;
- m->exts = 0;
- disable_contiguous(m);
- init_bins(m);
- mn = next_chunk(mem2chunk(m));
- init_top(m, mn, (size_t)((tbase + tsize) - (char*)mn) - TOP_FOOT_SIZE);
- check_top_chunk(m, m->top);
- return m;
-}
-
-mspace create_mspace(size_t capacity, int locked) {
- mstate m = 0;
- size_t msize;
- ensure_initialization();
- msize = pad_request(sizeof(struct malloc_state));
- if (capacity < (size_t) -(msize + TOP_FOOT_SIZE + mparams.page_size)) {
- size_t rs = ((capacity == 0)? mparams.granularity :
- (capacity + TOP_FOOT_SIZE + msize));
- size_t tsize = granularity_align(rs);
- char* tbase = (char*)(CALL_MMAP(tsize));
- if (tbase != CMFAIL) {
- m = init_user_mstate(tbase, tsize);
- m->seg.sflags = USE_MMAP_BIT;
- set_lock(m, locked);
- }
- }
- return (mspace)m;
-}
-
-mspace create_mspace_with_base(void* base, size_t capacity, int locked) {
- mstate m = 0;
- size_t msize;
- ensure_initialization();
- msize = pad_request(sizeof(struct malloc_state));
- if (capacity > msize + TOP_FOOT_SIZE &&
- capacity < (size_t) -(msize + TOP_FOOT_SIZE + mparams.page_size)) {
- m = init_user_mstate((char*)base, capacity);
- m->seg.sflags = EXTERN_BIT;
- set_lock(m, locked);
- }
- return (mspace)m;
-}
-
-int mspace_track_large_chunks(mspace msp, int enable) {
- int ret = 0;
- mstate ms = (mstate)msp;
- if (!PREACTION(ms)) {
- if (!use_mmap(ms)) {
- ret = 1;
- }
- if (!enable) {
- enable_mmap(ms);
- } else {
- disable_mmap(ms);
- }
- POSTACTION(ms);
- }
- return ret;
-}
-
-size_t destroy_mspace(mspace msp) {
- size_t freed = 0;
- mstate ms = (mstate)msp;
- if (ok_magic(ms)) {
- msegmentptr sp = &ms->seg;
- (void)DESTROY_LOCK(&ms->mutex); /* destroy before unmapped */
- while (sp != 0) {
- char* base = sp->base;
- size_t size = sp->size;
- flag_t flag = sp->sflags;
- (void)base; /* placate people compiling -Wunused-variable */
- sp = sp->next;
- if ((flag & USE_MMAP_BIT) && !(flag & EXTERN_BIT) &&
- CALL_MUNMAP(base, size) == 0)
- freed += size;
- }
- }
- else {
- USAGE_ERROR_ACTION(ms,ms);
- }
- return freed;
-}
-
-/*
- mspace versions of routines are near-clones of the global
- versions. This is not so nice but better than the alternatives.
-*/
-
-void* mspace_malloc(mspace msp, size_t bytes) {
- mstate ms = (mstate)msp;
- if (!ok_magic(ms)) {
- USAGE_ERROR_ACTION(ms,ms);
- return 0;
- }
- if (!PREACTION(ms)) {
- void* mem;
- size_t nb;
- if (bytes <= MAX_SMALL_REQUEST) {
- bindex_t idx;
- binmap_t smallbits;
- nb = (bytes < MIN_REQUEST)? MIN_CHUNK_SIZE : pad_request(bytes);
- idx = small_index(nb);
- smallbits = ms->smallmap >> idx;
-
- if ((smallbits & 0x3U) != 0) { /* Remainderless fit to a smallbin. */
- mchunkptr b, p;
- idx += ~smallbits & 1; /* Uses next bin if idx empty */
- b = smallbin_at(ms, idx);
- p = b->fd;
- assert(chunksize(p) == small_index2size(idx));
- unlink_first_small_chunk(ms, b, p, idx);
- set_inuse_and_pinuse(ms, p, small_index2size(idx));
- mem = chunk2mem(p);
- check_malloced_chunk(ms, mem, nb);
- goto postaction;
- }
-
- else if (nb > ms->dvsize) {
- if (smallbits != 0) { /* Use chunk in next nonempty smallbin */
- mchunkptr b, p, r;
- size_t rsize;
- bindex_t i;
- binmap_t leftbits = (smallbits << idx) & left_bits(idx2bit(idx));
- binmap_t leastbit = least_bit(leftbits);
- compute_bit2idx(leastbit, i);
- b = smallbin_at(ms, i);
- p = b->fd;
- assert(chunksize(p) == small_index2size(i));
- unlink_first_small_chunk(ms, b, p, i);
- rsize = small_index2size(i) - nb;
- /* Fit here cannot be remainderless if 4byte sizes */
- if (SIZE_T_SIZE != 4 && rsize < MIN_CHUNK_SIZE)
- set_inuse_and_pinuse(ms, p, small_index2size(i));
- else {
- set_size_and_pinuse_of_inuse_chunk(ms, p, nb);
- r = chunk_plus_offset(p, nb);
- set_size_and_pinuse_of_free_chunk(r, rsize);
- replace_dv(ms, r, rsize);
- }
- mem = chunk2mem(p);
- check_malloced_chunk(ms, mem, nb);
- goto postaction;
- }
-
- else if (ms->treemap != 0 && (mem = tmalloc_small(ms, nb)) != 0) {
- check_malloced_chunk(ms, mem, nb);
- goto postaction;
- }
- }
- }
- else if (bytes >= MAX_REQUEST)
- nb = MAX_SIZE_T; /* Too big to allocate. Force failure (in sys alloc) */
- else {
- nb = pad_request(bytes);
- if (ms->treemap != 0 && (mem = tmalloc_large(ms, nb)) != 0) {
- check_malloced_chunk(ms, mem, nb);
- goto postaction;
- }
- }
-
- if (nb <= ms->dvsize) {
- size_t rsize = ms->dvsize - nb;
- mchunkptr p = ms->dv;
- if (rsize >= MIN_CHUNK_SIZE) { /* split dv */
- mchunkptr r = ms->dv = chunk_plus_offset(p, nb);
- ms->dvsize = rsize;
- set_size_and_pinuse_of_free_chunk(r, rsize);
- set_size_and_pinuse_of_inuse_chunk(ms, p, nb);
- }
- else { /* exhaust dv */
- size_t dvs = ms->dvsize;
- ms->dvsize = 0;
- ms->dv = 0;
- set_inuse_and_pinuse(ms, p, dvs);
- }
- mem = chunk2mem(p);
- check_malloced_chunk(ms, mem, nb);
- goto postaction;
- }
-
- else if (nb < ms->topsize) { /* Split top */
- size_t rsize = ms->topsize -= nb;
- mchunkptr p = ms->top;
- mchunkptr r = ms->top = chunk_plus_offset(p, nb);
- r->head = rsize | PINUSE_BIT;
- set_size_and_pinuse_of_inuse_chunk(ms, p, nb);
- mem = chunk2mem(p);
- check_top_chunk(ms, ms->top);
- check_malloced_chunk(ms, mem, nb);
- goto postaction;
- }
-
- mem = sys_alloc(ms, nb);
-
- postaction:
- POSTACTION(ms);
- return mem;
- }
-
- return 0;
-}
-
-void mspace_free(mspace msp, void* mem) {
- if (mem != 0) {
- mchunkptr p = mem2chunk(mem);
-#if FOOTERS
- mstate fm = get_mstate_for(p);
- (void)msp; /* placate people compiling -Wunused */
-#else /* FOOTERS */
- mstate fm = (mstate)msp;
-#endif /* FOOTERS */
- if (!ok_magic(fm)) {
- USAGE_ERROR_ACTION(fm, p);
- return;
- }
- if (!PREACTION(fm)) {
- check_inuse_chunk(fm, p);
- if (RTCHECK(ok_address(fm, p) && ok_inuse(p))) {
- size_t psize = chunksize(p);
- mchunkptr next = chunk_plus_offset(p, psize);
- if (!pinuse(p)) {
- size_t prevsize = p->prev_foot;
- if (is_mmapped(p)) {
- psize += prevsize + MMAP_FOOT_PAD;
- if (CALL_MUNMAP((char*)p - prevsize, psize) == 0)
- fm->footprint -= psize;
- goto postaction;
- }
- else {
- mchunkptr prev = chunk_minus_offset(p, prevsize);
- psize += prevsize;
- p = prev;
- if (RTCHECK(ok_address(fm, prev))) { /* consolidate backward */
- if (p != fm->dv) {
- unlink_chunk(fm, p, prevsize);
- }
- else if ((next->head & INUSE_BITS) == INUSE_BITS) {
- fm->dvsize = psize;
- set_free_with_pinuse(p, psize, next);
- goto postaction;
- }
- }
- else
- goto erroraction;
- }
- }
-
- if (RTCHECK(ok_next(p, next) && ok_pinuse(next))) {
- if (!cinuse(next)) { /* consolidate forward */
- if (next == fm->top) {
- size_t tsize = fm->topsize += psize;
- fm->top = p;
- p->head = tsize | PINUSE_BIT;
- if (p == fm->dv) {
- fm->dv = 0;
- fm->dvsize = 0;
- }
- if (should_trim(fm, tsize))
- sys_trim(fm, 0);
- goto postaction;
- }
- else if (next == fm->dv) {
- size_t dsize = fm->dvsize += psize;
- fm->dv = p;
- set_size_and_pinuse_of_free_chunk(p, dsize);
- goto postaction;
- }
- else {
- size_t nsize = chunksize(next);
- psize += nsize;
- unlink_chunk(fm, next, nsize);
- set_size_and_pinuse_of_free_chunk(p, psize);
- if (p == fm->dv) {
- fm->dvsize = psize;
- goto postaction;
- }
- }
- }
- else
- set_free_with_pinuse(p, psize, next);
-
- if (is_small(psize)) {
- insert_small_chunk(fm, p, psize);
- check_free_chunk(fm, p);
- }
- else {
- tchunkptr tp = (tchunkptr)p;
- insert_large_chunk(fm, tp, psize);
- check_free_chunk(fm, p);
- if (--fm->release_checks == 0)
- release_unused_segments(fm);
- }
- goto postaction;
- }
- }
- erroraction:
- USAGE_ERROR_ACTION(fm, p);
- postaction:
- POSTACTION(fm);
- }
- }
-}
-
-void* mspace_calloc(mspace msp, size_t n_elements, size_t elem_size) {
- void* mem;
- size_t req = 0;
- mstate ms = (mstate)msp;
- if (!ok_magic(ms)) {
- USAGE_ERROR_ACTION(ms,ms);
- return 0;
- }
- if (n_elements != 0) {
- req = n_elements * elem_size;
- if (((n_elements | elem_size) & ~(size_t)0xffff) &&
- (req / n_elements != elem_size))
- req = MAX_SIZE_T; /* force downstream failure on overflow */
- }
- mem = internal_malloc(ms, req);
- if (mem != 0 && calloc_must_clear(mem2chunk(mem)))
- memset(mem, 0, req);
- return mem;
-}
-
-void* mspace_realloc(mspace msp, void* oldmem, size_t bytes) {
- void* mem = 0;
- if (oldmem == 0) {
- mem = mspace_malloc(msp, bytes);
- }
- else if (bytes >= MAX_REQUEST) {
- MALLOC_FAILURE_ACTION;
- }
-#ifdef REALLOC_ZERO_BYTES_FREES
- else if (bytes == 0) {
- mspace_free(msp, oldmem);
- }
-#endif /* REALLOC_ZERO_BYTES_FREES */
- else {
- size_t nb = request2size(bytes);
- mchunkptr oldp = mem2chunk(oldmem);
-#if ! FOOTERS
- mstate m = (mstate)msp;
-#else /* FOOTERS */
- mstate m = get_mstate_for(oldp);
- if (!ok_magic(m)) {
- USAGE_ERROR_ACTION(m, oldmem);
- return 0;
- }
-#endif /* FOOTERS */
- if (!PREACTION(m)) {
- mchunkptr newp = try_realloc_chunk(m, oldp, nb, 1);
- POSTACTION(m);
- if (newp != 0) {
- check_inuse_chunk(m, newp);
- mem = chunk2mem(newp);
- }
- else {
- mem = mspace_malloc(m, bytes);
- if (mem != 0) {
- size_t oc = chunksize(oldp) - overhead_for(oldp);
- memcpy(mem, oldmem, (oc < bytes)? oc : bytes);
- mspace_free(m, oldmem);
- }
- }
- }
- }
- return mem;
-}
-
-void* mspace_realloc_in_place(mspace msp, void* oldmem, size_t bytes) {
- void* mem = 0;
- if (oldmem != 0) {
- if (bytes >= MAX_REQUEST) {
- MALLOC_FAILURE_ACTION;
- }
- else {
- size_t nb = request2size(bytes);
- mchunkptr oldp = mem2chunk(oldmem);
-#if ! FOOTERS
- mstate m = (mstate)msp;
-#else /* FOOTERS */
- mstate m = get_mstate_for(oldp);
- (void)msp; /* placate people compiling -Wunused */
- if (!ok_magic(m)) {
- USAGE_ERROR_ACTION(m, oldmem);
- return 0;
- }
-#endif /* FOOTERS */
- if (!PREACTION(m)) {
- mchunkptr newp = try_realloc_chunk(m, oldp, nb, 0);
- POSTACTION(m);
- if (newp == oldp) {
- check_inuse_chunk(m, newp);
- mem = oldmem;
- }
- }
- }
- }
- return mem;
-}
-
-void* mspace_memalign(mspace msp, size_t alignment, size_t bytes) {
- mstate ms = (mstate)msp;
- if (!ok_magic(ms)) {
- USAGE_ERROR_ACTION(ms,ms);
- return 0;
- }
- if (alignment <= MALLOC_ALIGNMENT)
- return mspace_malloc(msp, bytes);
- return internal_memalign(ms, alignment, bytes);
-}
-
-void** mspace_independent_calloc(mspace msp, size_t n_elements,
- size_t elem_size, void* chunks[]) {
- size_t sz = elem_size; /* serves as 1-element array */
- mstate ms = (mstate)msp;
- if (!ok_magic(ms)) {
- USAGE_ERROR_ACTION(ms,ms);
- return 0;
- }
- return ialloc(ms, n_elements, &sz, 3, chunks);
-}
-
-void** mspace_independent_comalloc(mspace msp, size_t n_elements,
- size_t sizes[], void* chunks[]) {
- mstate ms = (mstate)msp;
- if (!ok_magic(ms)) {
- USAGE_ERROR_ACTION(ms,ms);
- return 0;
- }
- return ialloc(ms, n_elements, sizes, 0, chunks);
-}
-
-size_t mspace_bulk_free(mspace msp, void* array[], size_t nelem) {
- return internal_bulk_free((mstate)msp, array, nelem);
-}
-
-#if MALLOC_INSPECT_ALL
-void mspace_inspect_all(mspace msp,
- void(*handler)(void *start,
- void *end,
- size_t used_bytes,
- void* callback_arg),
- void* arg) {
- mstate ms = (mstate)msp;
- if (ok_magic(ms)) {
- if (!PREACTION(ms)) {
- internal_inspect_all(ms, handler, arg);
- POSTACTION(ms);
- }
- }
- else {
- USAGE_ERROR_ACTION(ms,ms);
- }
-}
-#endif /* MALLOC_INSPECT_ALL */
-
-int mspace_trim(mspace msp, size_t pad) {
- int result = 0;
- mstate ms = (mstate)msp;
- if (ok_magic(ms)) {
- if (!PREACTION(ms)) {
- result = sys_trim(ms, pad);
- POSTACTION(ms);
- }
- }
- else {
- USAGE_ERROR_ACTION(ms,ms);
- }
- return result;
-}
-
-#if !NO_MALLOC_STATS
-void mspace_malloc_stats(mspace msp) {
- mstate ms = (mstate)msp;
- if (ok_magic(ms)) {
- internal_malloc_stats(ms);
- }
- else {
- USAGE_ERROR_ACTION(ms,ms);
- }
-}
-#endif /* NO_MALLOC_STATS */
-
-size_t mspace_footprint(mspace msp) {
- size_t result = 0;
- mstate ms = (mstate)msp;
- if (ok_magic(ms)) {
- result = ms->footprint;
- }
- else {
- USAGE_ERROR_ACTION(ms,ms);
- }
- return result;
-}
-
-size_t mspace_max_footprint(mspace msp) {
- size_t result = 0;
- mstate ms = (mstate)msp;
- if (ok_magic(ms)) {
- result = ms->max_footprint;
- }
- else {
- USAGE_ERROR_ACTION(ms,ms);
- }
- return result;
-}
-
-size_t mspace_footprint_limit(mspace msp) {
- size_t result = 0;
- mstate ms = (mstate)msp;
- if (ok_magic(ms)) {
- size_t maf = ms->footprint_limit;
- result = (maf == 0) ? MAX_SIZE_T : maf;
- }
- else {
- USAGE_ERROR_ACTION(ms,ms);
- }
- return result;
-}
-
-size_t mspace_set_footprint_limit(mspace msp, size_t bytes) {
- size_t result = 0;
- mstate ms = (mstate)msp;
- if (ok_magic(ms)) {
- if (bytes == 0)
- result = granularity_align(1); /* Use minimal size */
- if (bytes == MAX_SIZE_T)
- result = 0; /* disable */
- else
- result = granularity_align(bytes);
- ms->footprint_limit = result;
- }
- else {
- USAGE_ERROR_ACTION(ms,ms);
- }
- return result;
-}
-
-#if !NO_MALLINFO
-struct mallinfo mspace_mallinfo(mspace msp) {
- mstate ms = (mstate)msp;
- if (!ok_magic(ms)) {
- USAGE_ERROR_ACTION(ms,ms);
- }
- return internal_mallinfo(ms);
-}
-#endif /* NO_MALLINFO */
-
-size_t mspace_usable_size(const void* mem) {
- if (mem != 0) {
- mchunkptr p = mem2chunk(mem);
- if (is_inuse(p))
- return chunksize(p) - overhead_for(p);
- }
- return 0;
-}
-
-int mspace_mallopt(int param_number, int value) {
- return change_mparam(param_number, value);
-}
-
-#endif /* MSPACES */
-
-
-/* -------------------- Alternative MORECORE functions ------------------- */
-
-/*
- Guidelines for creating a custom version of MORECORE:
-
- * For best performance, MORECORE should allocate in multiples of pagesize.
- * MORECORE may allocate more memory than requested. (Or even less,
- but this will usually result in a malloc failure.)
- * MORECORE must not allocate memory when given argument zero, but
- instead return one past the end address of memory from previous
- nonzero call.
- * For best performance, consecutive calls to MORECORE with positive
- arguments should return increasing addresses, indicating that
- space has been contiguously extended.
- * Even though consecutive calls to MORECORE need not return contiguous
- addresses, it must be OK for malloc'ed chunks to span multiple
- regions in those cases where they do happen to be contiguous.
- * MORECORE need not handle negative arguments -- it may instead
- just return MFAIL when given negative arguments.
- Negative arguments are always multiples of pagesize. MORECORE
- must not misinterpret negative args as large positive unsigned
- args. You can suppress all such calls from even occurring by defining
- MORECORE_CANNOT_TRIM,
-
- As an example alternative MORECORE, here is a custom allocator
- kindly contributed for pre-OSX macOS. It uses virtually but not
- necessarily physically contiguous non-paged memory (locked in,
- present and won't get swapped out). You can use it by uncommenting
- this section, adding some #includes, and setting up the appropriate
- defines above:
-
- #define MORECORE osMoreCore
-
- There is also a shutdown routine that should somehow be called for
- cleanup upon program exit.
-
- #define MAX_POOL_ENTRIES 100
- #define MINIMUM_MORECORE_SIZE (64 * 1024U)
- static int next_os_pool;
- void *our_os_pools[MAX_POOL_ENTRIES];
-
- void *osMoreCore(int size)
- {
- void *ptr = 0;
- static void *sbrk_top = 0;
-
- if (size > 0)
- {
- if (size < MINIMUM_MORECORE_SIZE)
- size = MINIMUM_MORECORE_SIZE;
- if (CurrentExecutionLevel() == kTaskLevel)
- ptr = PoolAllocateResident(size + RM_PAGE_SIZE, 0);
- if (ptr == 0)
- {
- return (void *) MFAIL;
- }
- // save ptrs so they can be freed during cleanup
- our_os_pools[next_os_pool] = ptr;
- next_os_pool++;
- ptr = (void *) ((((size_t) ptr) + RM_PAGE_MASK) & ~RM_PAGE_MASK);
- sbrk_top = (char *) ptr + size;
- return ptr;
- }
- else if (size < 0)
- {
- // we don't currently support shrink behavior
- return (void *) MFAIL;
- }
- else
- {
- return sbrk_top;
- }
- }
-
- // cleanup any allocated memory pools
- // called as last thing before shutting down driver
-
- void osCleanupMem(void)
- {
- void **ptr;
-
- for (ptr = our_os_pools; ptr < &our_os_pools[MAX_POOL_ENTRIES]; ptr++)
- if (*ptr)
- {
- PoolDeallocate(*ptr);
- *ptr = 0;
- }
- }
-
-*/
-
-
-/* -----------------------------------------------------------------------
-History:
- v2.8.6 Wed Aug 29 06:57:58 2012 Doug Lea
- * fix bad comparison in dlposix_memalign
- * don't reuse adjusted asize in sys_alloc
- * add LOCK_AT_FORK -- thanks to Kirill Artamonov for the suggestion
- * reduce compiler warnings -- thanks to all who reported/suggested these
-
- v2.8.5 Sun May 22 10:26:02 2011 Doug Lea (dl at gee)
- * Always perform unlink checks unless INSECURE
- * Add posix_memalign.
- * Improve realloc to expand in more cases; expose realloc_in_place.
- Thanks to Peter Buhr for the suggestion.
- * Add footprint_limit, inspect_all, bulk_free. Thanks
- to Barry Hayes and others for the suggestions.
- * Internal refactorings to avoid calls while holding locks
- * Use non-reentrant locks by default. Thanks to Roland McGrath
- for the suggestion.
- * Small fixes to mspace_destroy, reset_on_error.
- * Various configuration extensions/changes. Thanks
- to all who contributed these.
-
- V2.8.4a Thu Apr 28 14:39:43 2011 (dl at gee.cs.oswego.edu)
- * Update Creative Commons URL
-
- V2.8.4 Wed May 27 09:56:23 2009 Doug Lea (dl at gee)
- * Use zeros instead of prev foot for is_mmapped
- * Add mspace_track_large_chunks; thanks to Jean Brouwers
- * Fix set_inuse in internal_realloc; thanks to Jean Brouwers
- * Fix insufficient sys_alloc padding when using 16byte alignment
- * Fix bad error check in mspace_footprint
- * Adaptations for ptmalloc; thanks to Wolfram Gloger.
- * Reentrant spin locks; thanks to Earl Chew and others
- * Win32 improvements; thanks to Niall Douglas and Earl Chew
- * Add NO_SEGMENT_TRAVERSAL and MAX_RELEASE_CHECK_RATE options
- * Extension hook in malloc_state
- * Various small adjustments to reduce warnings on some compilers
- * Various configuration extensions/changes for more platforms. Thanks
- to all who contributed these.
-
- V2.8.3 Thu Sep 22 11:16:32 2005 Doug Lea (dl at gee)
- * Add max_footprint functions
- * Ensure all appropriate literals are size_t
- * Fix conditional compilation problem for some #define settings
- * Avoid concatenating segments with the one provided
- in create_mspace_with_base
- * Rename some variables to avoid compiler shadowing warnings
- * Use explicit lock initialization.
- * Better handling of sbrk interference.
- * Simplify and fix segment insertion, trimming and mspace_destroy
- * Reinstate REALLOC_ZERO_BYTES_FREES option from 2.7.x
- * Thanks especially to Dennis Flanagan for help on these.
-
- V2.8.2 Sun Jun 12 16:01:10 2005 Doug Lea (dl at gee)
- * Fix memalign brace error.
-
- V2.8.1 Wed Jun 8 16:11:46 2005 Doug Lea (dl at gee)
- * Fix improper #endif nesting in C++
- * Add explicit casts needed for C++
-
- V2.8.0 Mon May 30 14:09:02 2005 Doug Lea (dl at gee)
- * Use trees for large bins
- * Support mspaces
- * Use segments to unify sbrk-based and mmap-based system allocation,
- removing need for emulation on most platforms without sbrk.
- * Default safety checks
- * Optional footer checks. Thanks to William Robertson for the idea.
- * Internal code refactoring
- * Incorporate suggestions and platform-specific changes.
- Thanks to Dennis Flanagan, Colin Plumb, Niall Douglas,
- Aaron Bachmann, Emery Berger, and others.
- * Speed up non-fastbin processing enough to remove fastbins.
- * Remove useless cfree() to avoid conflicts with other apps.
- * Remove internal memcpy, memset. Compilers handle builtins better.
- * Remove some options that no one ever used and rename others.
-
- V2.7.2 Sat Aug 17 09:07:30 2002 Doug Lea (dl at gee)
- * Fix malloc_state bitmap array misdeclaration
-
- V2.7.1 Thu Jul 25 10:58:03 2002 Doug Lea (dl at gee)
- * Allow tuning of FIRST_SORTED_BIN_SIZE
- * Use PTR_UINT as type for all ptr->int casts. Thanks to John Belmonte.
- * Better detection and support for non-contiguousness of MORECORE.
- Thanks to Andreas Mueller, Conal Walsh, and Wolfram Gloger
- * Bypass most of malloc if no frees. Thanks To Emery Berger.
- * Fix freeing of old top non-contiguous chunk im sysmalloc.
- * Raised default trim and map thresholds to 256K.
- * Fix mmap-related #defines. Thanks to Lubos Lunak.
- * Fix copy macros; added LACKS_FCNTL_H. Thanks to Neal Walfield.
- * Branch-free bin calculation
- * Default trim and mmap thresholds now 256K.
-
- V2.7.0 Sun Mar 11 14:14:06 2001 Doug Lea (dl at gee)
- * Introduce independent_comalloc and independent_calloc.
- Thanks to Michael Pachos for motivation and help.
- * Make optional .h file available
- * Allow > 2GB requests on 32bit systems.
- * new WIN32 sbrk, mmap, munmap, lock code from <Walter@GeNeSys-e.de>.
- Thanks also to Andreas Mueller <a.mueller at paradatec.de>,
- and Anonymous.
- * Allow override of MALLOC_ALIGNMENT (Thanks to Ruud Waij for
- helping test this.)
- * memalign: check alignment arg
- * realloc: don't try to shift chunks backwards, since this
- leads to more fragmentation in some programs and doesn't
- seem to help in any others.
- * Collect all cases in malloc requiring system memory into sysmalloc
- * Use mmap as backup to sbrk
- * Place all internal state in malloc_state
- * Introduce fastbins (although similar to 2.5.1)
- * Many minor tunings and cosmetic improvements
- * Introduce USE_PUBLIC_MALLOC_WRAPPERS, USE_MALLOC_LOCK
- * Introduce MALLOC_FAILURE_ACTION, MORECORE_CONTIGUOUS
- Thanks to Tony E. Bennett <tbennett@nvidia.com> and others.
- * Include errno.h to support default failure action.
-
- V2.6.6 Sun Dec 5 07:42:19 1999 Doug Lea (dl at gee)
- * return null for negative arguments
- * Added Several WIN32 cleanups from Martin C. Fong <mcfong at yahoo.com>
- * Add 'LACKS_SYS_PARAM_H' for those systems without 'sys/param.h'
- (e.g. WIN32 platforms)
- * Cleanup header file inclusion for WIN32 platforms
- * Cleanup code to avoid Microsoft Visual C++ compiler complaints
- * Add 'USE_DL_PREFIX' to quickly allow co-existence with existing
- memory allocation routines
- * Set 'malloc_getpagesize' for WIN32 platforms (needs more work)
- * Use 'assert' rather than 'ASSERT' in WIN32 code to conform to
- usage of 'assert' in non-WIN32 code
- * Improve WIN32 'sbrk()' emulation's 'findRegion()' routine to
- avoid infinite loop
- * Always call 'fREe()' rather than 'free()'
-
- V2.6.5 Wed Jun 17 15:57:31 1998 Doug Lea (dl at gee)
- * Fixed ordering problem with boundary-stamping
-
- V2.6.3 Sun May 19 08:17:58 1996 Doug Lea (dl at gee)
- * Added pvalloc, as recommended by H.J. Liu
- * Added 64bit pointer support mainly from Wolfram Gloger
- * Added anonymously donated WIN32 sbrk emulation
- * Malloc, calloc, getpagesize: add optimizations from Raymond Nijssen
- * malloc_extend_top: fix mask error that caused wastage after
- foreign sbrks
- * Add linux mremap support code from HJ Liu
-
- V2.6.2 Tue Dec 5 06:52:55 1995 Doug Lea (dl at gee)
- * Integrated most documentation with the code.
- * Add support for mmap, with help from
- Wolfram Gloger (Gloger@lrz.uni-muenchen.de).
- * Use last_remainder in more cases.
- * Pack bins using idea from colin@nyx10.cs.du.edu
- * Use ordered bins instead of best-fit threshhold
- * Eliminate block-local decls to simplify tracing and debugging.
- * Support another case of realloc via move into top
- * Fix error occuring when initial sbrk_base not word-aligned.
- * Rely on page size for units instead of SBRK_UNIT to
- avoid surprises about sbrk alignment conventions.
- * Add mallinfo, mallopt. Thanks to Raymond Nijssen
- (raymond@es.ele.tue.nl) for the suggestion.
- * Add `pad' argument to malloc_trim and top_pad mallopt parameter.
- * More precautions for cases where other routines call sbrk,
- courtesy of Wolfram Gloger (Gloger@lrz.uni-muenchen.de).
- * Added macros etc., allowing use in linux libc from
- H.J. Lu (hjl@gnu.ai.mit.edu)
- * Inverted this history list
-
- V2.6.1 Sat Dec 2 14:10:57 1995 Doug Lea (dl at gee)
- * Re-tuned and fixed to behave more nicely with V2.6.0 changes.
- * Removed all preallocation code since under current scheme
- the work required to undo bad preallocations exceeds
- the work saved in good cases for most test programs.
- * No longer use return list or unconsolidated bins since
- no scheme using them consistently outperforms those that don't
- given above changes.
- * Use best fit for very large chunks to prevent some worst-cases.
- * Added some support for debugging
-
- V2.6.0 Sat Nov 4 07:05:23 1995 Doug Lea (dl at gee)
- * Removed footers when chunks are in use. Thanks to
- Paul Wilson (wilson@cs.texas.edu) for the suggestion.
-
- V2.5.4 Wed Nov 1 07:54:51 1995 Doug Lea (dl at gee)
- * Added malloc_trim, with help from Wolfram Gloger
- (wmglo@Dent.MED.Uni-Muenchen.DE).
-
- V2.5.3 Tue Apr 26 10:16:01 1994 Doug Lea (dl at g)
-
- V2.5.2 Tue Apr 5 16:20:40 1994 Doug Lea (dl at g)
- * realloc: try to expand in both directions
- * malloc: swap order of clean-bin strategy;
- * realloc: only conditionally expand backwards
- * Try not to scavenge used bins
- * Use bin counts as a guide to preallocation
- * Occasionally bin return list chunks in first scan
- * Add a few optimizations from colin@nyx10.cs.du.edu
-
- V2.5.1 Sat Aug 14 15:40:43 1993 Doug Lea (dl at g)
- * faster bin computation & slightly different binning
- * merged all consolidations to one part of malloc proper
- (eliminating old malloc_find_space & malloc_clean_bin)
- * Scan 2 returns chunks (not just 1)
- * Propagate failure in realloc if malloc returns 0
- * Add stuff to allow compilation on non-ANSI compilers
- from kpv@research.att.com
-
- V2.5 Sat Aug 7 07:41:59 1993 Doug Lea (dl at g.oswego.edu)
- * removed potential for odd address access in prev_chunk
- * removed dependency on getpagesize.h
- * misc cosmetics and a bit more internal documentation
- * anticosmetics: mangled names in macros to evade debugger strangeness
- * tested on sparc, hp-700, dec-mips, rs6000
- with gcc & native cc (hp, dec only) allowing
- Detlefs & Zorn comparison study (in SIGPLAN Notices.)
-
- Trial version Fri Aug 28 13:14:29 1992 Doug Lea (dl at g.oswego.edu)
- * Based loosely on libg++-1.2X malloc. (It retains some of the overall
- structure of old version, but most details differ.)
-
-*/
diff --git a/winsup/cygwin/malloc_wrapper.cc b/winsup/cygwin/malloc_wrapper.cc
deleted file mode 100644
index 68c851440..000000000
--- a/winsup/cygwin/malloc_wrapper.cc
+++ /dev/null
@@ -1,304 +0,0 @@
-/* malloc_wrapper.cc
-
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2013 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include "cygerrno.h"
-#include "security.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "perprocess.h"
-#include "miscfuncs.h"
-#include "cygmalloc.h"
-#ifndef MALLOC_DEBUG
-#include <malloc.h>
-#endif
-extern "C" struct mallinfo dlmallinfo ();
-
-/* we provide these stubs to call into a user's
- provided malloc if there is one - otherwise
- functions we provide - like strdup will cause
- problems if malloced on our heap and free'd on theirs.
-*/
-
-static bool use_internal = true;
-static bool internal_malloc_determined;
-
-/* These routines are used by the application if it
- doesn't provide its own malloc. */
-
-extern "C" void
-free (void *p)
-{
- malloc_printf ("(%p), called by %p", p, __builtin_return_address (0));
- if (!use_internal)
- user_data->free (p);
- else
- {
- __malloc_lock ();
- dlfree (p);
- __malloc_unlock ();
- }
-}
-
-extern "C" void *
-malloc (size_t size)
-{
- void *res;
- if (!use_internal)
- res = user_data->malloc (size);
- else
- {
- __malloc_lock ();
- res = dlmalloc (size);
- __malloc_unlock ();
- }
- malloc_printf ("(%ld) = %p, called by %p", size, res, __builtin_return_address (0));
- return res;
-}
-
-extern "C" void *
-realloc (void *p, size_t size)
-{
- void *res;
- if (!use_internal)
- res = user_data->realloc (p, size);
- else
- {
- __malloc_lock ();
- res = dlrealloc (p, size);
- __malloc_unlock ();
- }
- malloc_printf ("(%p, %ld) = %p, called by %p", p, size, res, __builtin_return_address (0));
- return res;
-}
-
-/* BSD extension: Same as realloc, just if it fails to allocate new memory,
- it frees the incoming pointer. */
-extern "C" void *
-reallocf (void *p, size_t size)
-{
- void *res = realloc (p, size);
- if (!res && p)
- free (p);
- return res;
-}
-
-extern "C" void *
-calloc (size_t nmemb, size_t size)
-{
- void *res;
- if (!use_internal)
- res = user_data->calloc (nmemb, size);
- else
- {
- __malloc_lock ();
- res = dlcalloc (nmemb, size);
- __malloc_unlock ();
- }
- malloc_printf ("(%ld, %ld) = %p, called by %p", nmemb, size, res, __builtin_return_address (0));
- return res;
-}
-
-extern "C" int
-posix_memalign (void **memptr, size_t alignment, size_t bytes)
-{
- save_errno save;
-
- void *res;
- if (!use_internal)
- return user_data->posix_memalign (memptr, alignment, bytes);
- if ((alignment & (alignment - 1)) != 0)
- return EINVAL;
- __malloc_lock ();
- res = dlmemalign (alignment, bytes);
- __malloc_unlock ();
- if (!res)
- return ENOMEM;
- if (memptr)
- *memptr = res;
- return 0;
-}
-
-extern "C" void *
-memalign (size_t alignment, size_t bytes)
-{
- void *res;
- if (!use_internal)
- {
- set_errno (ENOSYS);
- res = NULL;
- }
- else
- {
- __malloc_lock ();
- res = dlmemalign (alignment, bytes);
- __malloc_unlock ();
- }
-
- return res;
-}
-
-extern "C" void *
-valloc (size_t bytes)
-{
- void *res;
- if (!use_internal)
- {
- set_errno (ENOSYS);
- res = NULL;
- }
- else
- {
- __malloc_lock ();
- res = dlvalloc (bytes);
- __malloc_unlock ();
- }
-
- return res;
-}
-
-extern "C" size_t
-malloc_usable_size (void *p)
-{
- size_t res;
- if (!use_internal)
- {
- set_errno (ENOSYS);
- res = 0;
- }
- else
- {
- __malloc_lock ();
- res = dlmalloc_usable_size (p);
- __malloc_unlock ();
- }
-
- return res;
-}
-
-extern "C" int
-malloc_trim (size_t pad)
-{
- size_t res;
- if (!use_internal)
- {
- set_errno (ENOSYS);
- res = 0;
- }
- else
- {
- __malloc_lock ();
- res = dlmalloc_trim (pad);
- __malloc_unlock ();
- }
-
- return res;
-}
-
-extern "C" int
-mallopt (int p, int v)
-{
- int res;
- if (!use_internal)
- {
- set_errno (ENOSYS);
- res = 0;
- }
- else
- {
- __malloc_lock ();
- res = dlmallopt (p, v);
- __malloc_unlock ();
- }
-
- return res;
-}
-
-extern "C" void
-malloc_stats ()
-{
- if (!use_internal)
- set_errno (ENOSYS);
- else
- {
- __malloc_lock ();
- dlmalloc_stats ();
- __malloc_unlock ();
- }
-}
-
-extern "C" struct mallinfo
-mallinfo ()
-{
- struct mallinfo m;
- if (!use_internal)
- {
- memset (&m, 0, sizeof m);
- set_errno (ENOSYS);
- }
- else
- {
- __malloc_lock ();
- m = dlmallinfo ();
- __malloc_unlock ();
- }
-
- return m;
-}
-
-extern "C" char *
-strdup (const char *s)
-{
- char *p;
- size_t len = strlen (s) + 1;
- if ((p = (char *) malloc (len)) != NULL)
- memcpy (p, s, len);
- return p;
-}
-
-/* We use a critical section to lock access to the malloc data
- structures. This permits malloc to be called from different
- threads. Note that it does not make malloc reentrant, and it does
- not permit a signal handler to call malloc. The malloc code in
- newlib will call __malloc_lock and __malloc_unlock at appropriate
- times. */
-
-muto NO_COPY mallock;
-
-void
-malloc_init ()
-{
- mallock.init ("mallock");
-
-#ifndef MALLOC_DEBUG
- /* Check if malloc is provided by application. If so, redirect all
- calls to malloc/free/realloc to application provided. This may
- happen if some other dll calls cygwin's malloc, but main code provides
- its own malloc */
- if (!internal_malloc_determined)
- {
- extern void *_sigfe_malloc;
- /* Decide if we are using our own version of malloc by testing the import
- address from user_data. */
- use_internal = user_data->malloc == malloc
- || import_address (user_data->malloc) == &_sigfe_malloc;
- malloc_printf ("using %s malloc", use_internal ? "internal" : "external");
- internal_malloc_determined = true;
- }
-#endif
-}
-
-extern "C" void
-__set_ENOMEM ()
-{
- set_errno (ENOMEM);
-}
diff --git a/winsup/cygwin/mcount.c b/winsup/cygwin/mcount.c
deleted file mode 100644
index fad672881..000000000
--- a/winsup/cygwin/mcount.c
+++ /dev/null
@@ -1,177 +0,0 @@
-/*-
- * Copyright (c) 1983, 1992, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#if !defined(lint) && !defined(_KERNEL) && defined(LIBC_SCCS)
-static char rcsid[] = "$OpenBSD: mcount.c,v 1.6 1997/07/23 21:11:27 kstailey Exp $";
-#endif
-
-/*
- * This file is taken from Cygwin distribution. Please keep it in sync.
- * The differences should be within __MINGW32__ guard.
- */
-
-#ifndef __MINGW32__
-#include <sys/param.h>
-#endif
-#include <sys/types.h>
-#include "gmon.h"
-
-/*
- * mcount is called on entry to each function compiled with the profiling
- * switch set. _mcount(), which is declared in a machine-dependent way
- * with _MCOUNT_DECL, does the actual work and is either inlined into a
- * C routine or called by an assembly stub. In any case, this magic is
- * taken care of by the MCOUNT definition in <machine/profile.h>.
- *
- * _mcount updates data structures that represent traversals of the
- * program's call graph edges. frompc and selfpc are the return
- * address and function address that represents the given call graph edge.
- *
- * Note: the original BSD code used the same variable (frompcindex) for
- * both frompcindex and frompc. Any reasonable, modern compiler will
- * perform this optimization.
- */
-/* _mcount; may be static, inline, etc */
-_MCOUNT_DECL (size_t, size_t);
-
-_MCOUNT_DECL (size_t frompc, size_t selfpc)
-{
- register u_short *frompcindex;
- register struct tostruct *top, *prevtop;
- register struct gmonparam *p;
- register long toindex;
-
- p = &_gmonparam;
- /*
- * check that we are profiling
- * and that we aren't recursively invoked.
- */
- if (p->state != GMON_PROF_ON)
- return;
- p->state = GMON_PROF_BUSY;
- /*
- * check that frompcindex is a reasonable pc value.
- * for example: signal catchers get called from the stack,
- * not from text space. too bad.
- */
- frompc -= p->lowpc;
- if (frompc > p->textsize)
- goto done;
-
-#if (HASHFRACTION & (HASHFRACTION - 1)) == 0
- if (p->hashfraction == HASHFRACTION)
- frompcindex =
- &p->froms[frompc / (HASHFRACTION * sizeof(*p->froms))];
- else
-#endif
- frompcindex =
- &p->froms[frompc / (p->hashfraction * sizeof(*p->froms))];
- toindex = *frompcindex;
- if (toindex == 0) {
- /*
- * first time traversing this arc
- */
- toindex = ++p->tos[0].link;
- if (toindex >= p->tolimit)
- /* halt further profiling */
- goto overflow;
-
- *frompcindex = toindex;
- top = &p->tos[toindex];
- top->selfpc = selfpc;
- top->count = 1;
- top->link = 0;
- goto done;
- }
- top = &p->tos[toindex];
- if (top->selfpc == selfpc) {
- /*
- * arc at front of chain; usual case.
- */
- top->count++;
- goto done;
- }
- /*
- * have to go looking down chain for it.
- * top points to what we are looking at,
- * prevtop points to previous top.
- * we know it is not at the head of the chain.
- */
- for (; /* goto done */; ) {
- if (top->link == 0) {
- /*
- * top is end of the chain and none of the chain
- * had top->selfpc == selfpc.
- * so we allocate a new tostruct
- * and link it to the head of the chain.
- */
- toindex = ++p->tos[0].link;
- if (toindex >= p->tolimit)
- goto overflow;
-
- top = &p->tos[toindex];
- top->selfpc = selfpc;
- top->count = 1;
- top->link = *frompcindex;
- *frompcindex = toindex;
- goto done;
- }
- /*
- * otherwise, check the next arc on the chain.
- */
- prevtop = top;
- top = &p->tos[top->link];
- if (top->selfpc == selfpc) {
- /*
- * there it is.
- * increment its count
- * move it to the head of the chain.
- */
- top->count++;
- toindex = prevtop->link;
- prevtop->link = top->link;
- top->link = *frompcindex;
- *frompcindex = toindex;
- goto done;
- }
- }
-done:
- p->state = GMON_PROF_ON;
- return;
-overflow:
- p->state = GMON_PROF_ERROR;
- return;
-}
-
-/*
- * Actual definition of mcount function. Defined in <machine/profile.h>,
- * which is included by <sys/gmon.h>
- */
-MCOUNT
-
diff --git a/winsup/cygwin/mcountFunc.S b/winsup/cygwin/mcountFunc.S
deleted file mode 100644
index e1b9136cf..000000000
--- a/winsup/cygwin/mcountFunc.S
+++ /dev/null
@@ -1,115 +0,0 @@
-/**
- * This file has no copyright assigned and is placed in the Public Domain.
- * This file is part of the mingw-w64 runtime package.
- * No warranty is given; refer to the file DISCLAIMER.PD within this package.
- */
-#include <_mingw_mac.h>
-
- .file "mcountFunc.S"
- .text
-#ifdef _WIN64
- .align 8
-#else
- .align 4
-#endif
-
-/* gcc always assumes the mcount public symbol has a single leading underscore
- for our target. See gcc/config/i386.h; it isn't overridden in
- config/i386/cygming.h or any other places for mingw */
-.globl _mcount
- .def _mcount; .scl 2; .type 32; .endef
-_mcount:
-#ifndef _WIN64
- push %ebp
- mov %esp, %ebp
- push %eax
- push %ecx
- push %edx
- movl 4(%ebp),%edx
- movl (%ebp),%eax
- movl 4(%eax),%eax
- push %edx
- push %eax
- call __MINGW_USYMBOL(_mcount_private)
- add $8, %esp
- pop %edx
- pop %ecx
- pop %eax
- leave
- ret
-#else
- push %rbp
- mov %rsp, %rbp
- push %rax
- push %rcx
- push %rdx
- push %r8
- push %r9
- push %r10
- push %r11
- movq 8(%rbp),%rdx
- movq (%rbp),%rax
- movq 8(%rax),%rcx
- sub $40, %rsp
- call __MINGW_USYMBOL(_mcount_private)
- add $40, %rsp
- pop %r11
- pop %r10
- pop %r9
- pop %r8
- pop %rdx
- pop %rcx
- pop %rax
- leave
- ret
-#endif
-
-/* gcc always assumes the mcount public symbol has a single leading underscore
- for our target. See gcc/config/i386.h; it isn't overridden in
- config/i386/cygming.h or any other places for mingw. This is the entry
- for new prologue mechanism required for x64 seh calling convention. */
-.globl __fentry__
- .def _mcount_top; .scl 2; .type 32; .endef
-__fentry__:
-#ifndef _WIN64
- push %ebp
- mov %esp, %ebp
- push %eax
- push %ecx
- push %edx
- movl 4(%ebp),%edx
- movl 8(%ebp),%eax
- push %edx
- push %eax
- call __MINGW_USYMBOL(_mcount_private)
- add $8, %esp
- pop %edx
- pop %ecx
- pop %eax
- leave
- ret
-#else
- push %rbp
- mov %rsp, %rbp
- push %rax
- push %rcx
- push %rdx
- push %r8
- push %r9
- push %r10
- push %r11
- movq 8(%rbp),%rdx
- movq 16(%rbp),%rcx
- sub $40, %rsp
- call __MINGW_USYMBOL(_mcount_private)
- add $40, %rsp
- pop %r11
- pop %r10
- pop %r9
- pop %r8
- pop %rdx
- pop %rcx
- pop %rax
- leave
- ret
-#endif
diff --git a/winsup/cygwin/miscfuncs.cc b/winsup/cygwin/miscfuncs.cc
deleted file mode 100644
index e6ea5cc2d..000000000
--- a/winsup/cygwin/miscfuncs.cc
+++ /dev/null
@@ -1,883 +0,0 @@
-/* miscfuncs.cc: misc funcs that don't belong anywhere else
-
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include "miscfuncs.h"
-#include <sys/uio.h>
-#include <assert.h>
-#include <alloca.h>
-#include <limits.h>
-#include <sys/param.h>
-#include <wchar.h>
-#include "cygtls.h"
-#include "ntdll.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "pinfo.h"
-#include "exception.h"
-#include "sigproc.h"
-
-long tls_ix = -1;
-
-const unsigned char case_folded_lower[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
- 32, '!', '"', '#', '$', '%', '&', 39, '(', ')', '*', '+', ',', '-', '.', '/',
- '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?',
- '@', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
- 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '[', 92, ']', '^', '_',
- '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
- 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~', 127,
- 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
- 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
- 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175,
- 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
- 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207,
- 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223,
- 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
- 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255
-};
-
-const unsigned char case_folded_upper[] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
- 32, '!', '"', '#', '$', '%', '&', 39, '(', ')', '*', '+', ',', '-', '.', '/',
- '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?',
- '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
- 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', 92, ']', '^', '_',
- '`', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
- 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '{', '|', '}', '~', 127,
- 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
- 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
- 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175,
- 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
- 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207,
- 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223,
- 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
- 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255
-};
-
-const char isalpha_array[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
-0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, 0, 0, 0, 0, 0,
- 0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
-0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-};
-
-extern "C" int __stdcall
-cygwin_wcscasecmp (const wchar_t *ws, const wchar_t *wt)
-{
- UNICODE_STRING us, ut;
-
- RtlInitUnicodeString (&us, ws);
- RtlInitUnicodeString (&ut, wt);
- return RtlCompareUnicodeString (&us, &ut, TRUE);
-}
-
-extern "C" int __stdcall
-cygwin_wcsncasecmp (const wchar_t *ws, const wchar_t *wt, size_t n)
-{
- UNICODE_STRING us, ut;
- size_t ls = 0, lt = 0;
-
- while (ws[ls] && ls < n)
- ++ls;
- RtlInitCountedUnicodeString (&us, ws, ls * sizeof (WCHAR));
- while (wt[lt] && lt < n)
- ++lt;
- RtlInitCountedUnicodeString (&ut, wt, lt * sizeof (WCHAR));
- return RtlCompareUnicodeString (&us, &ut, TRUE);
-}
-
-extern "C" int __stdcall
-cygwin_strcasecmp (const char *cs, const char *ct)
-{
- UNICODE_STRING us, ut;
- ULONG len;
-
- len = (strlen (cs) + 1) * sizeof (WCHAR);
- RtlInitEmptyUnicodeString (&us, (PWCHAR) alloca (len), len);
- us.Length = sys_mbstowcs (us.Buffer, us.MaximumLength, cs) * sizeof (WCHAR);
- len = (strlen (ct) + 1) * sizeof (WCHAR);
- RtlInitEmptyUnicodeString (&ut, (PWCHAR) alloca (len), len);
- ut.Length = sys_mbstowcs (ut.Buffer, ut.MaximumLength, ct) * sizeof (WCHAR);
- return RtlCompareUnicodeString (&us, &ut, TRUE);
-}
-
-extern "C" int __stdcall
-cygwin_strncasecmp (const char *cs, const char *ct, size_t n)
-{
- UNICODE_STRING us, ut;
- ULONG len;
- size_t ls = 0, lt = 0;
-
- while (cs[ls] && ls < n)
- ++ls;
- len = (ls + 1) * sizeof (WCHAR);
- RtlInitEmptyUnicodeString (&us, (PWCHAR) alloca (len), len);
- us.Length = sys_mbstowcs (us.Buffer, ls + 1, cs, ls) * sizeof (WCHAR);
- while (ct[lt] && lt < n)
- ++lt;
- len = (lt + 1) * sizeof (WCHAR);
- RtlInitEmptyUnicodeString (&ut, (PWCHAR) alloca (len), len);
- ut.Length = sys_mbstowcs (ut.Buffer, lt + 1, ct, lt) * sizeof (WCHAR);
- return RtlCompareUnicodeString (&us, &ut, TRUE);
-}
-
-extern "C" char *
-strlwr (char *string)
-{
- UNICODE_STRING us;
- size_t len = (strlen (string) + 1) * sizeof (WCHAR);
-
- us.MaximumLength = len; us.Buffer = (PWCHAR) alloca (len);
- us.Length = sys_mbstowcs (us.Buffer, len, string) * sizeof (WCHAR)
- - sizeof (WCHAR);
- RtlDowncaseUnicodeString (&us, &us, FALSE);
- sys_wcstombs (string, len / sizeof (WCHAR), us.Buffer);
- return string;
-}
-
-extern "C" char *
-strupr (char *string)
-{
- UNICODE_STRING us;
- size_t len = (strlen (string) + 1) * sizeof (WCHAR);
-
- us.MaximumLength = len; us.Buffer = (PWCHAR) alloca (len);
- us.Length = sys_mbstowcs (us.Buffer, len, string) * sizeof (WCHAR)
- - sizeof (WCHAR);
- RtlUpcaseUnicodeString (&us, &us, FALSE);
- sys_wcstombs (string, len / sizeof (WCHAR), us.Buffer);
- return string;
-}
-
-int __reg2
-check_invalid_virtual_addr (const void *s, unsigned sz)
-{
- MEMORY_BASIC_INFORMATION mbuf;
- const void *end;
-
- for (end = (char *) s + sz; s < end;
- s = (char *) mbuf.BaseAddress + mbuf.RegionSize)
- if (!VirtualQuery (s, &mbuf, sizeof mbuf))
- return EINVAL;
- return 0;
-}
-
-static char __attribute__ ((noinline))
-dummytest (volatile char *p)
-{
- return *p;
-}
-
-ssize_t
-check_iovec (const struct iovec *iov, int iovcnt, bool forwrite)
-{
- if (iovcnt < 0 || iovcnt > IOV_MAX)
- {
- set_errno (EINVAL);
- return -1;
- }
-
- __try
- {
-
- size_t tot = 0;
-
- while (iovcnt != 0)
- {
- if (iov->iov_len > SSIZE_MAX || (tot += iov->iov_len) > SSIZE_MAX)
- {
- set_errno (EINVAL);
- __leave;
- }
-
- volatile char *p = ((char *) iov->iov_base) + iov->iov_len - 1;
- if (!iov->iov_len)
- /* nothing to do */;
- else if (!forwrite)
- *p = dummytest (p);
- else
- dummytest (p);
-
- iov++;
- iovcnt--;
- }
-
- assert (tot <= SSIZE_MAX);
-
- return (ssize_t) tot;
- }
- __except (EFAULT)
- __endtry
- return -1;
-}
-
-/* Try hard to schedule another thread.
- Remember not to call this in a lock condition or you'll potentially
- suffer starvation. */
-void
-yield ()
-{
- int prio = GetThreadPriority (GetCurrentThread ());
- SetThreadPriority (GetCurrentThread (), THREAD_PRIORITY_IDLE);
- /* MSDN implies that SleepEx will force scheduling of other threads.
- Unlike SwitchToThread() the documentation does not mention other
- cpus so, presumably (hah!), this + using a lower priority will
- stall this thread temporarily and cause another to run.
- (stackoverflow and others seem to confirm that setting this thread
- to a lower priority and calling Sleep with a 0 paramenter will
- have this desired effect) */
- Sleep (0L);
- SetThreadPriority (GetCurrentThread (), prio);
-}
-
-/* Get a default value for the nice factor. When changing these values,
- have a look into the below function nice_to_winprio. The values must
- match the layout of the static "priority" array. */
-int
-winprio_to_nice (DWORD prio)
-{
- switch (prio)
- {
- case REALTIME_PRIORITY_CLASS:
- return -20;
- case HIGH_PRIORITY_CLASS:
- return -16;
- case ABOVE_NORMAL_PRIORITY_CLASS:
- return -8;
- case NORMAL_PRIORITY_CLASS:
- return 0;
- case BELOW_NORMAL_PRIORITY_CLASS:
- return 8;
- case IDLE_PRIORITY_CLASS:
- return 16;
- }
- return 0;
-}
-
-/* Get a Win32 priority matching the incoming nice factor. The incoming
- nice is limited to the interval [-NZERO,NZERO-1]. */
-DWORD
-nice_to_winprio (int &nice)
-{
- static const DWORD priority[] =
- {
- REALTIME_PRIORITY_CLASS, /* 0 */
- HIGH_PRIORITY_CLASS, /* 1 */
- HIGH_PRIORITY_CLASS,
- HIGH_PRIORITY_CLASS,
- HIGH_PRIORITY_CLASS,
- HIGH_PRIORITY_CLASS,
- HIGH_PRIORITY_CLASS,
- HIGH_PRIORITY_CLASS, /* 7 */
- ABOVE_NORMAL_PRIORITY_CLASS, /* 8 */
- ABOVE_NORMAL_PRIORITY_CLASS,
- ABOVE_NORMAL_PRIORITY_CLASS,
- ABOVE_NORMAL_PRIORITY_CLASS,
- ABOVE_NORMAL_PRIORITY_CLASS,
- ABOVE_NORMAL_PRIORITY_CLASS,
- ABOVE_NORMAL_PRIORITY_CLASS,
- ABOVE_NORMAL_PRIORITY_CLASS, /* 15 */
- NORMAL_PRIORITY_CLASS, /* 16 */
- NORMAL_PRIORITY_CLASS,
- NORMAL_PRIORITY_CLASS,
- NORMAL_PRIORITY_CLASS,
- NORMAL_PRIORITY_CLASS,
- NORMAL_PRIORITY_CLASS,
- NORMAL_PRIORITY_CLASS,
- NORMAL_PRIORITY_CLASS, /* 23 */
- BELOW_NORMAL_PRIORITY_CLASS, /* 24 */
- BELOW_NORMAL_PRIORITY_CLASS,
- BELOW_NORMAL_PRIORITY_CLASS,
- BELOW_NORMAL_PRIORITY_CLASS,
- BELOW_NORMAL_PRIORITY_CLASS,
- BELOW_NORMAL_PRIORITY_CLASS,
- BELOW_NORMAL_PRIORITY_CLASS,
- BELOW_NORMAL_PRIORITY_CLASS, /* 31 */
- IDLE_PRIORITY_CLASS, /* 32 */
- IDLE_PRIORITY_CLASS,
- IDLE_PRIORITY_CLASS,
- IDLE_PRIORITY_CLASS,
- IDLE_PRIORITY_CLASS,
- IDLE_PRIORITY_CLASS,
- IDLE_PRIORITY_CLASS,
- IDLE_PRIORITY_CLASS /* 39 */
- };
- if (nice < -NZERO)
- nice = -NZERO;
- else if (nice > NZERO - 1)
- nice = NZERO - 1;
- DWORD prio = priority[nice + NZERO];
- return prio;
-}
-
-/* Minimal overlapped pipe I/O implementation for signal and commune stuff. */
-
-BOOL WINAPI
-CreatePipeOverlapped (PHANDLE hr, PHANDLE hw, LPSECURITY_ATTRIBUTES sa)
-{
- int ret = fhandler_pipe::create (sa, hr, hw, 0, NULL,
- FILE_FLAG_OVERLAPPED);
- if (ret)
- SetLastError (ret);
- return ret == 0;
-}
-
-BOOL WINAPI
-ReadPipeOverlapped (HANDLE h, PVOID buf, DWORD len, LPDWORD ret_len,
- DWORD timeout)
-{
- OVERLAPPED ov;
- BOOL ret;
-
- memset (&ov, 0, sizeof ov);
- ov.hEvent = CreateEvent (NULL, TRUE, FALSE, NULL);
- ret = ReadFile (h, buf, len, NULL, &ov);
- if (ret || GetLastError () == ERROR_IO_PENDING)
- {
- if (!ret && WaitForSingleObject (ov.hEvent, timeout) != WAIT_OBJECT_0)
- CancelIo (h);
- ret = GetOverlappedResult (h, &ov, ret_len, FALSE);
- }
- CloseHandle (ov.hEvent);
- return ret;
-}
-
-BOOL WINAPI
-WritePipeOverlapped (HANDLE h, LPCVOID buf, DWORD len, LPDWORD ret_len,
- DWORD timeout)
-{
- OVERLAPPED ov;
- BOOL ret;
-
- memset (&ov, 0, sizeof ov);
- ov.hEvent = CreateEvent (NULL, TRUE, FALSE, NULL);
- ret = WriteFile (h, buf, len, NULL, &ov);
- if (ret || GetLastError () == ERROR_IO_PENDING)
- {
- if (!ret && WaitForSingleObject (ov.hEvent, timeout) != WAIT_OBJECT_0)
- CancelIo (h);
- ret = GetOverlappedResult (h, &ov, ret_len, FALSE);
- }
- CloseHandle (ov.hEvent);
- return ret;
-}
-
-bool
-NT_readline::init (POBJECT_ATTRIBUTES attr, PCHAR in_buf, ULONG in_buflen)
-{
- NTSTATUS status;
- IO_STATUS_BLOCK io;
-
- status = NtOpenFile (&fh, SYNCHRONIZE | FILE_READ_DATA, attr, &io,
- FILE_SHARE_VALID_FLAGS,
- FILE_SYNCHRONOUS_IO_NONALERT
- | FILE_OPEN_FOR_BACKUP_INTENT);
- if (!NT_SUCCESS (status))
- {
- paranoid_printf ("NtOpenFile(%S) failed, status %y",
- attr->ObjectName, status);
- return false;
- }
- buf = in_buf;
- buflen = in_buflen;
- got = end = buf;
- len = 0;
- line = 1;
- return true;
-}
-
-PCHAR
-NT_readline::gets ()
-{
- IO_STATUS_BLOCK io;
-
- while (true)
- {
- /* len == 0 indicates we have to read from the file. */
- if (!len)
- {
- if (!NT_SUCCESS (NtReadFile (fh, NULL, NULL, NULL, &io, got,
- (buflen - 2) - (got - buf), NULL, NULL)))
- return NULL;
- len = io.Information;
- /* Set end marker. */
- got[len] = got[len + 1] = '\0';
- /* Set len to the absolute len of bytes in buf. */
- len += got - buf;
- /* Reset got to start reading at the start of the buffer again. */
- got = end = buf;
- }
- else
- {
- got = end + 1;
- ++line;
- }
- /* Still some valid full line? */
- if (got < buf + len)
- {
- if ((end = strchr (got, '\n')))
- {
- end[end[-1] == '\r' ? -1 : 0] = '\0';
- return got;
- }
- /* Last line missing a \n at EOF? */
- if (len < buflen - 2)
- {
- len = 0;
- return got;
- }
- }
- /* We have to read once more. Move remaining bytes to the start of
- the buffer and reposition got so that it points to the end of
- the remaining bytes. */
- len = buf + len - got;
- memmove (buf, got, len);
- got = buf + len;
- buf[len] = buf[len + 1] = '\0';
- len = 0;
- }
-}
-
-/* backslashify: Convert all forward slashes in src path to back slashes
- in dst path. Add a trailing slash to dst when trailing_slash_p arg
- is set to 1. */
-
-void
-backslashify (const char *src, char *dst, bool trailing_slash_p)
-{
- const char *start = src;
-
- while (*src)
- {
- if (*src == '/')
- *dst++ = '\\';
- else
- *dst++ = *src;
- ++src;
- }
- if (trailing_slash_p
- && src > start
- && !isdirsep (src[-1]))
- *dst++ = '\\';
- *dst++ = 0;
-}
-
-/* slashify: Convert all back slashes in src path to forward slashes
- in dst path. Add a trailing slash to dst when trailing_slash_p arg
- is set to 1. */
-
-void
-slashify (const char *src, char *dst, bool trailing_slash_p)
-{
- const char *start = src;
-
- while (*src)
- {
- if (*src == '\\')
- *dst++ = '/';
- else
- *dst++ = *src;
- ++src;
- }
- if (trailing_slash_p
- && src > start
- && !isdirsep (src[-1]))
- *dst++ = '/';
- *dst++ = 0;
-}
-
-/* Return an address from the import jmp table of main program. */
-void * __reg1
-__import_address (void *imp)
-{
- __try
- {
- if (*((uint16_t *) imp) == 0x25ff)
- {
- const char *ptr = (const char *) imp;
-#ifdef __x86_64__
- const uintptr_t *jmpto = (uintptr_t *)
- (ptr + 6 + *(int32_t *)(ptr + 2));
-#else
- const uintptr_t *jmpto = (uintptr_t *) *((uintptr_t *) (ptr + 2));
-#endif
- return (void *) *jmpto;
- }
- }
- __except (NO_ERROR) {}
- __endtry
- return NULL;
-}
-
-/* CygwinCreateThread.
-
- Replacement function for CreateThread. What we do here is to remove
- parameters we don't use and instead to add parameters we need to make
- the function pthreads compatible. */
-
-struct pthread_wrapper_arg
-{
- LPTHREAD_START_ROUTINE func;
- PVOID arg;
- PBYTE stackaddr;
- PBYTE stackbase;
- PBYTE stacklimit;
-};
-
-DWORD WINAPI
-pthread_wrapper (PVOID arg)
-{
- /* Just plain paranoia. */
- if (!arg)
- return ERROR_INVALID_PARAMETER;
-
- /* The process is now threaded. Note for later usage by arc4random. */
- __isthreaded = 1;
-
- /* Fetch thread wrapper info and free from cygheap. */
- pthread_wrapper_arg wrapper_arg = *(pthread_wrapper_arg *) arg;
- cfree (arg);
-
- /* Set stack values in TEB */
- PTEB teb = NtCurrentTeb ();
- teb->Tib.StackBase = wrapper_arg.stackbase;
- teb->Tib.StackLimit = wrapper_arg.stacklimit ?: wrapper_arg.stackaddr;
- /* Set DeallocationStack value. If we have an application-provided stack,
- we set DeallocationStack to NULL, so NtTerminateThread does not deallocate
- any stack. If we created the stack in CygwinCreateThread, we set
- DeallocationStack to the stackaddr of our own stack, so it's automatically
- deallocated when the thread is terminated. */
- PBYTE dealloc_addr = (PBYTE) teb->DeallocationStack;
- teb->DeallocationStack = wrapper_arg.stacklimit ? wrapper_arg.stackaddr
- : NULL;
- /* Store the OS-provided DeallocationStack address in wrapper_arg.stackaddr.
- The below assembler code will release the OS stack after switching to our
- new stack. */
- wrapper_arg.stackaddr = dealloc_addr;
-
- /* Initialize new _cygtls. */
- _my_tls.init_thread (wrapper_arg.stackbase - CYGTLS_PADSIZE,
- (DWORD (*)(void*, void*)) wrapper_arg.func);
-#ifndef __x86_64__
- /* Copy exception list over to new stack. I'm not quite sure how the
- exception list is extended by Windows itself. What's clear is that it
- always grows downwards and that it starts right at the stackbase.
- Therefore we first count the number of exception records and place
- the copy at the stackbase, too, so there's still a lot of room to
- extend the list up to where our _cygtls region starts. */
- _exception_list *old_start = (_exception_list *) teb->Tib.ExceptionList;
- unsigned count = 0;
- teb->Tib.ExceptionList = NULL;
- for (_exception_list *e_ptr = old_start;
- e_ptr && e_ptr != (_exception_list *) -1;
- e_ptr = e_ptr->prev)
- ++count;
- if (count)
- {
- _exception_list *new_start = (_exception_list *) wrapper_arg.stackbase
- - count;
- teb->Tib.ExceptionList = (struct _EXCEPTION_REGISTRATION_RECORD *)
- new_start;
- while (true)
- {
- new_start->handler = old_start->handler;
- if (old_start->prev == (_exception_list *) -1)
- {
- new_start->prev = (_exception_list *) -1;
- break;
- }
- new_start->prev = new_start + 1;
- new_start = new_start->prev;
- old_start = old_start->prev;
- }
- }
-#endif
-#ifdef __x86_64__
- __asm__ ("\n\
- movq %[WRAPPER_ARG], %%rbx # Load &wrapper_arg into rbx \n\
- movq (%%rbx), %%r12 # Load thread func into r12 \n\
- movq 8(%%rbx), %%r13 # Load thread arg into r13 \n\
- movq 16(%%rbx), %%rcx # Load stackaddr into rcx \n\
- movq 24(%%rbx), %%rsp # Load stackbase into rsp \n\
- subq %[CYGTLS], %%rsp # Subtract CYGTLS_PADSIZE \n\
- # (here we are 16 bytes aligned)\n\
- subq $32, %%rsp # Subtract another 32 bytes \n\
- # (shadow space for arg regs) \n\
- xorq %%rbp, %%rbp # Set rbp to 0 \n\
- # We moved to the new stack. \n\
- # Now it's safe to release the OS stack. \n\
- movl $0x8000, %%r8d # dwFreeType: MEM_RELEASE \n\
- xorl %%edx, %%edx # dwSize: 0 \n\
- # dwAddress is already in the correct arg register rcx \n\
- call VirtualFree \n\
- # All set. We can copy the thread arg from the safe \n\
- # register r13 and then just call the function. \n\
- movq %%r13, %%rcx # Move thread arg to 1st arg reg\n\
- call *%%r12 # Call thread func \n"
- : : [WRAPPER_ARG] "r" (&wrapper_arg),
- [CYGTLS] "i" (CYGTLS_PADSIZE));
-#else
- __asm__ ("\n\
- movl %[WRAPPER_ARG], %%ebx # Load &wrapper_arg into ebx \n\
- movl (%%ebx), %%eax # Load thread func into eax \n\
- movl 4(%%ebx), %%ecx # Load thread arg into ecx \n\
- movl 8(%%ebx), %%edx # Load stackaddr into edx \n\
- movl 12(%%ebx), %%ebx # Load stackbase into ebx \n\
- subl %[CYGTLS], %%ebx # Subtract CYGTLS_PADSIZE \n\
- subl $4, %%ebx # Subtract another 4 bytes \n\
- movl %%ebx, %%esp # Set esp \n\
- xorl %%ebp, %%ebp # Set ebp to 0 \n\
- # Make gcc 3.x happy and align the stack so that it is \n\
- # 16 byte aligned right before the final call opcode. \n\
- andl $-16, %%esp # 16 byte align \n\
- addl $-12, %%esp # 12 bytes + 4 byte arg = 16 \n\
- # Now we moved to the new stack. Save thread func address \n\
- # and thread arg on new stack \n\
- pushl %%ecx # Push thread arg onto stack \n\
- pushl %%eax # Push thread func onto stack \n\
- # Now it's safe to release the OS stack. \n\
- pushl $0x8000 # dwFreeType: MEM_RELEASE \n\
- pushl $0x0 # dwSize: 0 \n\
- pushl %%edx # lpAddress: stackaddr \n\
- call _VirtualFree@12 # Shoot \n\
- # All set. We can pop the thread function address from \n\
- # the stack and call it. The thread arg is still on the \n\
- # stack in the expected spot. \n\
- popl %%eax # Pop thread_func address \n\
- call *%%eax # Call thread func \n"
- : : [WRAPPER_ARG] "r" (&wrapper_arg),
- [CYGTLS] "i" (CYGTLS_PADSIZE));
-#endif
- /* pthread::thread_init_wrapper calls pthread::exit, which
- in turn calls ExitThread, so we should never arrive here. */
- api_fatal ("Dumb thinko in pthread handling. Whip the developer.");
-}
-
-#ifdef __x86_64__
-/* The memory region used for thread stacks */
-#define THREAD_STORAGE_LOW 0x080000000L
-#define THREAD_STORAGE_HIGH 0x100000000L
-/* We provide the stacks always in 1 Megabyte slots */
-#define THREAD_STACK_SLOT 0x100000L /* 1 Meg */
-/* Maximum stack size returned from the pool. */
-#define THREAD_STACK_MAX 0x20000000L /* 512 Megs */
-
-class thread_allocator
-{
- UINT_PTR current;
-public:
- thread_allocator () : current (THREAD_STORAGE_HIGH) {}
- PVOID alloc (SIZE_T size)
- {
- SIZE_T real_size = roundup2 (size, THREAD_STACK_SLOT);
- BOOL overflow = FALSE;
- PVOID real_stackaddr = NULL;
-
- /* If an application requests a monster stack, we fulfill this request
- from outside of our pool, top down. */
- if (real_size > THREAD_STACK_MAX)
- return VirtualAlloc (NULL, real_size, MEM_RESERVE | MEM_TOP_DOWN,
- PAGE_READWRITE);
- /* Simple round-robin. Keep looping until VirtualAlloc succeeded, or
- until we overflowed and hit the current address. */
- for (UINT_PTR addr = current - real_size;
- !real_stackaddr && (!overflow || addr >= current);
- addr -= THREAD_STACK_SLOT)
- {
- if (addr < THREAD_STORAGE_LOW)
- {
- addr = THREAD_STORAGE_HIGH - real_size;
- overflow = TRUE;
- }
- real_stackaddr = VirtualAlloc ((PVOID) addr, real_size,
- MEM_RESERVE, PAGE_READWRITE);
- if (!real_stackaddr)
- {
- /* So we couldn't grab this space. Let's check the state.
- If this area is free, simply try the next lower 1 Meg slot.
- Otherwise, shift the next try down to the AllocationBase
- of the current address, minus the requested slot size.
- Add THREAD_STACK_SLOT since that's subtracted in the next
- run of the loop anyway. */
- MEMORY_BASIC_INFORMATION mbi;
- VirtualQuery ((PVOID) addr, &mbi, sizeof mbi);
- if (mbi.State != MEM_FREE)
- addr = (UINT_PTR) mbi.AllocationBase - real_size
- + THREAD_STACK_SLOT;
- }
- }
- /* If we got an address, remember it for the next allocation attempt. */
- if (real_stackaddr)
- current = (UINT_PTR) real_stackaddr;
- return real_stackaddr;
- }
-};
-
-thread_allocator thr_alloc NO_COPY;
-#endif
-
-HANDLE WINAPI
-CygwinCreateThread (LPTHREAD_START_ROUTINE thread_func, PVOID thread_arg,
- PVOID stackaddr, ULONG stacksize, ULONG guardsize,
- DWORD creation_flags, LPDWORD thread_id)
-{
- PVOID real_stackaddr = NULL;
- ULONG real_stacksize = 0;
- ULONG real_guardsize = 0;
- pthread_wrapper_arg *wrapper_arg;
- HANDLE thread = NULL;
-
- wrapper_arg = (pthread_wrapper_arg *) ccalloc (HEAP_STR, 1,
- sizeof *wrapper_arg);
- if (!wrapper_arg)
- {
- SetLastError (ERROR_OUTOFMEMORY);
- return NULL;
- }
- wrapper_arg->func = thread_func;
- wrapper_arg->arg = thread_arg;
-
- if (stackaddr)
- {
- /* If the application provided the stack, just use it. */
- wrapper_arg->stackaddr = (PBYTE) stackaddr;
- wrapper_arg->stackbase = (PBYTE) stackaddr + stacksize;
- }
- else
- {
- PBYTE real_stacklimit;
-
- /* If not, we have to create the stack here. */
- real_stacksize = roundup2 (stacksize, wincap.page_size ());
- real_guardsize = roundup2 (guardsize, wincap.page_size ());
- /* Add the guardsize to the stacksize */
- real_stacksize += real_guardsize;
- /* If we use the default Windows guardpage method, we have to take
- the 2 pages dead zone into account. */
- if (real_guardsize == wincap.page_size ())
- real_stacksize += 2 * wincap.page_size ();
- /* Now roundup the result to the next allocation boundary. */
- real_stacksize = roundup2 (real_stacksize,
- wincap.allocation_granularity ());
- /* Reserve stack. */
-#ifdef __x86_64__
- real_stackaddr = thr_alloc.alloc (real_stacksize);
-#else
- /* FIXME? If the TOP_DOWN method tends to collide too much with
- other stuff, we should provide our own mechanism to find a
- suitable place for the stack. Top down from the start of
- the Cygwin DLL comes to mind. */
- real_stackaddr = VirtualAlloc (NULL, real_stacksize,
- MEM_RESERVE | MEM_TOP_DOWN,
- PAGE_READWRITE);
-#endif
- if (!real_stackaddr)
- return NULL;
- /* Set up committed region. Two cases: */
- if (real_guardsize != wincap.page_size ())
- {
- /* If guardsize is set to something other than the page size, we
- commit the entire stack and, if guardsize is > 0, we set up a
- POSIX guardpage. We don't set up a Windows guardpage. */
- if (!VirtualAlloc (real_stackaddr, real_guardsize, MEM_COMMIT,
- PAGE_NOACCESS))
- goto err;
- real_stacklimit = (PBYTE) real_stackaddr + real_guardsize;
- if (!VirtualAlloc (real_stacklimit, real_stacksize - real_guardsize,
- MEM_COMMIT, PAGE_READWRITE))
- goto err;
- }
- else
- {
- /* If guardsize is exactly the page_size, we can assume that the
- application will behave Windows conformant in terms of stack usage.
- We can especially assume that it never allocates more than one
- page at a time (alloca/_chkstk). Therefore, this is the default
- case which allows a Windows compatible stack setup with a
- reserved region, a guard page, and a commited region. We don't
- need to set up a POSIX guardpage since Windows already handles
- stack overflow: Trying to extend the stack into the last three
- pages of the stack results in a SEGV.
- We always commit 64K here, starting with the guardpage. */
- real_stacklimit = (PBYTE) real_stackaddr + real_stacksize
- - wincap.allocation_granularity ();
- if (!VirtualAlloc (real_stacklimit, wincap.page_size (), MEM_COMMIT,
- PAGE_READWRITE | PAGE_GUARD))
- goto err;
- real_stacklimit += wincap.page_size ();
- if (!VirtualAlloc (real_stacklimit, wincap.allocation_granularity ()
- - wincap.page_size (), MEM_COMMIT,
- PAGE_READWRITE))
- goto err;
- }
- wrapper_arg->stackaddr = (PBYTE) real_stackaddr;
- wrapper_arg->stackbase = (PBYTE) real_stackaddr + real_stacksize;
- wrapper_arg->stacklimit = real_stacklimit;
- }
- /* Use the STACK_SIZE_PARAM_IS_A_RESERVATION parameter so only the
- minimum size for a thread stack is reserved by the OS. Note that we
- reserve a 256K stack, not 64K, otherwise the thread creation might
- crash the process due to a stack overflow. */
- thread = CreateThread (&sec_none_nih, 4 * PTHREAD_STACK_MIN,
- pthread_wrapper, wrapper_arg,
- creation_flags | STACK_SIZE_PARAM_IS_A_RESERVATION,
- thread_id);
-
-err:
- if (!thread && real_stackaddr)
- {
- /* Don't report the wrong error even though VirtualFree is very unlikely
- to fail. */
- DWORD err = GetLastError ();
- VirtualFree (real_stackaddr, 0, MEM_RELEASE);
- SetLastError (err);
- }
- return thread;
-}
-
-#ifdef __x86_64__
-// TODO: The equivalent newlib functions only work for SYSV ABI so far.
-#undef RtlFillMemory
-#undef RtlCopyMemory
-extern "C" void NTAPI RtlFillMemory (PVOID, SIZE_T, BYTE);
-extern "C" void NTAPI RtlCopyMemory (PVOID, const VOID *, SIZE_T);
-
-extern "C" void *
-memset (void *s, int c, size_t n)
-{
- RtlFillMemory (s, n, c);
- return s;
-}
-
-extern "C" void *
-memcpy(void *__restrict dest, const void *__restrict src, size_t n)
-{
- RtlCopyMemory (dest, src, n);
- return dest;
-}
-#endif
diff --git a/winsup/cygwin/miscfuncs.h b/winsup/cygwin/miscfuncs.h
deleted file mode 100644
index c53a520c7..000000000
--- a/winsup/cygwin/miscfuncs.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/* miscfuncs.h: main Cygwin header file.
-
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _MISCFUNCS_H
-#define _MISCFUNCS_H
-int __reg1 winprio_to_nice (DWORD);
-DWORD __reg1 nice_to_winprio (int &);
-
-bool __reg3 create_pipe (PHANDLE, PHANDLE, LPSECURITY_ATTRIBUTES, DWORD);
-
-BOOL WINAPI CreatePipeOverlapped (PHANDLE read_handle, PHANDLE write_handle,
- LPSECURITY_ATTRIBUTES sa);
-BOOL WINAPI ReadPipeOverlapped (HANDLE h, PVOID buf, DWORD len,
- LPDWORD ret_len, DWORD timeout);
-BOOL WINAPI WritePipeOverlapped (HANDLE h, LPCVOID buf, DWORD len,
- LPDWORD ret_len, DWORD timeout);
-
-/* class for per-line reading using native functions. The caller provides
- the file as an POBJECT_ATTRIBUTES, and the buffer space. */
-class NT_readline
-{
- HANDLE fh;
- PCHAR buf;
- PCHAR got;
- PCHAR end;
- ULONG buflen;
- ULONG len;
- ULONG line;
-public:
- NT_readline () : fh (NULL) {}
- bool init (POBJECT_ATTRIBUTES attr, char *buf, ULONG buflen);
- PCHAR gets ();
- void close () { if (fh) NtClose (fh); fh = NULL; }
- ~NT_readline () { close (); }
-};
-
-extern "C" void yield ();
-
-#define import_address(x) __import_address ((void *)(x))
-void * __reg1 __import_address (void *);
-
-void backslashify (const char *, char *, bool);
-void slashify (const char *, char *, bool);
-#define isslash(c) ((c) == '/')
-
-extern void transform_chars (PWCHAR, PWCHAR);
-extern inline void
-transform_chars (PUNICODE_STRING upath, USHORT start_idx)
-{
- transform_chars (upath->Buffer + start_idx,
- upath->Buffer + upath->Length / sizeof (WCHAR) - 1);
-}
-
-/* Memory checking */
-int __reg2 check_invalid_virtual_addr (const void *s, unsigned sz);
-
-ssize_t __reg3 check_iovec (const struct iovec *, int, bool);
-#define check_iovec_for_read(a, b) check_iovec ((a), (b), false)
-#define check_iovec_for_write(a, b) check_iovec ((a), (b), true)
-
-extern "C" DWORD WINAPI pthread_wrapper (PVOID arg);
-extern "C" HANDLE WINAPI CygwinCreateThread (LPTHREAD_START_ROUTINE thread_func,
- PVOID thread_arg, PVOID stackaddr,
- ULONG stacksize, ULONG guardsize,
- DWORD creation_flags,
- LPDWORD thread_id);
-
-#endif /*_MISCFUNCS_H*/
diff --git a/winsup/cygwin/mkglobals_h b/winsup/cygwin/mkglobals_h
deleted file mode 100755
index ea4a582f4..000000000
--- a/winsup/cygwin/mkglobals_h
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/usr/bin/perl
-my @argv = @ARGV;
-$_ = join('', <>);
-s/\n[^\n]*!globals.h[^\n]*\n/\n/sog;
-s%/\*.*?\*/%%sog;
-s/(enum\s.*?{.*?})/munge($1)/soge;
-s/^(\s*)([a-zA-Z_])/$1extern $2/mog;
-s/extern (extern|enum)/$1/sog;
-s/\n\s*extern static[^\n]*\n/\n/sog;
-s/\s+=.*?;/;/sog;
-s/^\n+//sog;
-s/#include "winsup\.h"\n//so;
-s/-NL-/\n/sog;
-s/-EQ-/=/sog;
-s/\s+\n/\n/sog;
-s/\n{2,}/\n/sog;
-print <<PRELUDE,$_;
-/* $target - Autogenerated from @argv. Look there for comments. */
-
-#pragma once
-PRELUDE
-close $target_fd;
-sub munge($) {
- my $val = shift;
- $val =~ s/\n/-NL-/sog;
- $val =~ s/=/-EQ-/sog;
- return $val;
-}
diff --git a/winsup/cygwin/mkimport b/winsup/cygwin/mkimport
deleted file mode 100755
index 2b08dfe3d..000000000
--- a/winsup/cygwin/mkimport
+++ /dev/null
@@ -1,101 +0,0 @@
-#!/usr/bin/perl
-use strict;
-use File::Temp qw'tempdir';
-use File::Spec;
-use Getopt::Long;
-my $dir = tempdir(CLEANUP => 1);
-
-my ($cpu, $ar, $as, $nm, $objcopy, %replace);
-GetOptions('cpu=s'=>\$cpu, 'ar=s'=>\$ar, 'as=s'=>\$as,'nm=s'=>\$nm, 'objcopy=s'=>\$objcopy, 'replace=s'=>\%replace);
-
-# Args::
-# 1) import lib to create
-# 2) input dll
-# 3...) extra objects to add
-
-$_ = File::Spec->rel2abs($_) for @ARGV;
-
-my $libdll = shift;
-my $inpdll = shift;
-
-open my $nm_fd, '-|', $nm, '-Apg', '--defined-only', $inpdll;
-my %text = ();
-my %import = ();
-my %symfile = ();
-
-my $is64bit = ($cpu eq 'x86_64' ? 1 : 0);
-my $sym_prefix = ($is64bit ? '' : '_');
-
-while (<$nm_fd>) {
- chomp;
- my ($fn, $type, $sym) = /^$inpdll:(.*?):\S+\s+(\S)\s+(\S+)$/o;
- next unless $fn;
- $text{$fn} = $sym if $type eq 'T';
- $import{$fn} = $sym if $type eq 'I';
- $symfile{$sym} = $fn;
-}
-close $nm_fd or exit 1;
-
-for my $sym (keys %replace) {
- my $fn;
- my $_sym = $sym_prefix . $sym;
- if (!defined($fn = $symfile{$_sym})) {
- $fn = "$sym.o";
- $text{$fn} = $_sym;
- }
- my $imp_sym = '__imp_' . $sym_prefix . $replace{$sym};
- $import{$fn} = $imp_sym;
-}
-
-for my $f (keys %text) {
- my $imp_sym = delete $import{$f};
- my $glob_sym = $text{$f};
- if (!defined $imp_sym) {
- delete $text{$f};
- } elsif ($imp_sym eq '__imp_' . $sym_prefix) {
- $text{$f} = 0;
- } else {
- $text{$f} = 1;
- open my $as_fd, '|-', $as, '-o', "$dir/t-$f", "-";
- if ($is64bit) {
- print $as_fd <<EOF;
- .text
- .extern $imp_sym
- .global $glob_sym
-$glob_sym:
- jmp *$imp_sym(%rip)
-EOF
- } else {
- print $as_fd <<EOF;
- .text
- .extern $imp_sym
- .global $glob_sym
-$glob_sym:
- jmp *$imp_sym
-EOF
- }
- close $as_fd or exit 1;
- }
-}
-
-chdir $dir or die "$0: couldn't cd to $dir - $!\n";
-system $ar, 'x', $inpdll;
-exit 1 if $?;
-
-for my $f (keys %text) {
- if (!$text{$f}) {
- unlink $f;
- } else {
- system $objcopy, '-R', '.text', $f and exit 1;
- system $objcopy, '-R', '.bss', '-R', '.data', "t-$f" and exit 1;
- }
-}
-
-unlink $libdll;
-system $ar, 'crus', $libdll, glob('*.o'), @ARGV;
-unlink glob('*.o');
-exit 1 if $?;
-
-END {
- chdir '/tmp'; # Allow $dir directory removal on Windows
-}
diff --git a/winsup/cygwin/mkstatic b/winsup/cygwin/mkstatic
deleted file mode 100755
index 1a488f80c..000000000
--- a/winsup/cygwin/mkstatic
+++ /dev/null
@@ -1,63 +0,0 @@
-#!/usr/bin/perl
-use strict;
-use Cwd;
-use Getopt::Long;
-use File::Temp qw/tempdir/;
-use File::Basename;
-
-sub xsystem(@);
-
-my @exclude = ();
-my @library = ();
-my $ar;
-our $x;
-GetOptions('exclude=s'=>\@exclude, 'library=s'=>\@library, 'ar=s'=>\$ar, 'x!'=>\$x);
-
-die "$0: must specify --ar\n" unless defined $ar;
-my $lib = shift or die "$0: missing lib argument\nusage: $0 lib [map-file]\n";
-$lib = Cwd::abs_path($lib);
-
-my %excludes = map {($_, 1)} @exclude;
-my $libraries = join('|', map {quotemeta} @library);
-
-my %sources = ();
-while (<>) {
- my ($source, $file, $absfile);
- if (m%^($libraries)\(([^)]*)\)%o) {
- $source = $1;
- $absfile = $file = $2;
- } elsif (/^LOAD\s+(.*\.o)$/o) {
- $source = '.';
- $file = $1;
- $absfile = Cwd::abs_path($file);
- } else {
- next;
- }
- push @{$sources{$source}}, $absfile unless $excludes{$file} || $excludes{$source};
-}
-
-my $here = getcwd();
-my $dir = tempdir(CLEANUP=>1);
-chdir $dir;
-my @files = ();
-for (sort keys %sources) {
- if ($_ eq '.') {
- xsystem '/bin/cp', '-a', @{$sources{$_}}, '.';
- } else {
- xsystem $ar, 'x', $_, @{$sources{$_}}, '.';
- }
- push @files, map {basename($_)} @{$sources{$_}};
-}
-
-unlink $lib;
-xsystem $ar, 'crs', $lib, sort @files;
-exit 0;
-
-sub xsystem(@) {
- print join(' ', 'x', @_), "\n" if $x;
- system(@_) == 0 or die "$0: $_[0] $_[1] $_[2]... exited with non-zero status\n";
-}
-
-END {
- chdir '/tmp'; # Allow $dir directory removal on Windows
-}
diff --git a/winsup/cygwin/mktemp.cc b/winsup/cygwin/mktemp.cc
deleted file mode 100644
index 4dc157da4..000000000
--- a/winsup/cygwin/mktemp.cc
+++ /dev/null
@@ -1,182 +0,0 @@
-/* mktemp.cc: mktemp functions
-
-This file is adapted for Cygwin from FreeBSD and newlib.
-
-See the copyright at the bottom of this file. */
-
-#include "winsup.h"
-#include "cygerrno.h"
-#include <fcntl.h>
-#include <sys/stat.h>
-#include <unistd.h>
-
-static int _gettemp(char *, int *, int, size_t, int);
-
-static const char padchar[] =
-"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
-
-extern "C" int
-mkstemp(char *path)
-{
- int fd;
- return _gettemp(path, &fd, 0, 0, O_BINARY) ? fd : -1;
-}
-
-extern "C" char *
-mkdtemp(char *path)
-{
- return _gettemp(path, NULL, 1, 0, 0) ? path : NULL;
-}
-
-extern "C" int
-mkstemps(char *path, int len)
-{
- int fd;
- return _gettemp(path, &fd, 0, len, O_BINARY) ? fd : -1;
-}
-
-extern "C" int
-mkostemp(char *path, int flags)
-{
- int fd;
- return _gettemp(path, &fd, 0, 0, flags & ~O_ACCMODE) ? fd : -1;
-}
-
-extern "C" int
-mkostemps(char *path, int len, int flags)
-{
- int fd;
- return _gettemp(path, &fd, 0, len, flags & ~O_ACCMODE) ? fd : -1;
-}
-
-extern "C" char *
-mktemp(char *path)
-{
- return _gettemp(path, NULL, 0, 0, 0) ? path : (char *) NULL;
-}
-
-static int
-_gettemp(char *path, int *doopen, int domkdir, size_t suffixlen, int flags)
-{
- char *start, *trv, *suffp;
- char *pad;
-
- if (doopen && domkdir)
- {
- set_errno (EINVAL);
- return 0;
- }
-
- trv = strchr (path, '\0');
- if ((size_t) (trv - path) < suffixlen)
- {
- set_errno (EINVAL);
- return 0;
- }
- trv -= suffixlen;
- suffp = trv--;
-
- /* Fill space with random characters */
- while (trv >= path && *trv == 'X')
- {
- uint32_t rand = arc4random () % (sizeof (padchar) - 1);
- *trv-- = padchar[rand];
- }
- if (suffp - trv < 6)
- {
- set_errno (EINVAL);
- return 0;
- }
- start = trv + 1;
-
- /*
- * check the target directory.
- */
- struct stat sbuf;
- if (doopen != NULL || domkdir)
- {
- for (; trv > path; trv--)
- {
- if (*trv == '/')
- {
- *trv = '\0';
- int rval = stat64 (path, &sbuf);
- *trv = '/';
- if (rval != 0)
- return 0;
- if (!S_ISDIR (sbuf.st_mode))
- {
- set_errno (ENOTDIR);
- return 0;
- }
- break;
- }
- }
- }
-
- for (;;)
- {
- if (doopen)
- {
- if ((*doopen = open (path, O_CREAT | O_EXCL | O_RDWR | flags,
- S_IRUSR | S_IWUSR)) >= 0)
- return 1;
- if (errno != EEXIST)
- return 0;
- }
- else if (domkdir)
- {
- if (mkdir (path, 0700) == 0)
- return 1;
- if (errno != EEXIST)
- return 0;
- }
- else if (lstat64 (path, &sbuf))
- return errno == ENOENT;
-
- /* If we have a collision, cycle through the space of filenames */
- for (trv = start;;)
- {
- if (*trv == '\0' || trv == suffp)
- return 0;
- pad = strchr (padchar, *trv);
- if (pad == NULL || *++pad == '\0')
- *trv++ = padchar[0];
- else
- {
- *trv++ = *pad;
- break;
- }
- }
- }
- /*NOTREACHED*/
-}
-
-/*
-* Copyright (c) 1987, 1993
-* The Regents of the University of California. All rights reserved.
-*
-* Redistribution and use in source and binary forms, with or without
-* modification, are permitted provided that the following conditions
-* are met:
-* 1. Redistributions of source code must retain the above copyright
-* notice, this list of conditions and the following disclaimer.
-* 2. Redistributions in binary form must reproduce the above copyright
-* notice, this list of conditions and the following disclaimer in the
-* documentation and/or other materials provided with the distribution.
-* 4. Neither the name of the University nor the names of its contributors
-* may be used to endorse or promote products derived from this software
-* without specific prior written permission.
-*
-* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-* SUCH DAMAGE.
-*/
diff --git a/winsup/cygwin/mkvers.sh b/winsup/cygwin/mkvers.sh
deleted file mode 100755
index 93912e720..000000000
--- a/winsup/cygwin/mkvers.sh
+++ /dev/null
@@ -1,169 +0,0 @@
-#!/bin/sh
-# mkvers.sh - Make version information for cygwin DLL
-#
-# Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2010, 2012 Red Hat,
-# Inc.
-#
-# This file is part of Cygwin.
-#
-# This software is a copyrighted work licensed under the terms of the
-# Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-# details.
-
-exec 9> version.cc
-
-#
-# Arg 1 is the name of the version include file
-#
-incfile="$1"; shift
-rcfile="$1"; shift
-windres="$1"; shift
-iflags=
-# Find header file locations
-while [ -n "$*" ]; do
- case "$1" in
- -I*)
- iflags="$iflags $1"
- ;;
- -idirafter)
- shift
- iflags="$iflags -I$1"
- ;;
- esac
- shift
-done
-
-[ -r $incfile ] || {
- echo "**** Couldn't open file '$incfile'. Aborting."
-}
-
-#
-# Load the current date so we can work on individual fields
-#
-set -$- $(date +"%m %d %Y %H:%M")
-m=$1 d=$2 y=$3 hhmm=$4
-#
-# Set date into YYYY-MM-DD HH:MM:SS format
-#
-builddate="$y-$m-$d $hhmm"
-echo "$builddate"
-
-set -$- ''
-
-#
-# Output the initial part of version.cc
-#
-cat <<EOF 1>&9
-#include "config.h"
-#include "cygwin_version.h"
-
-#define strval(x) #x
-#define str(x) strval(x)
-#define shared_data_version str(CYGWIN_VERSION_SHARED_DATA)
-
-const char *cygwin_version_strings =
- "BEGIN_CYGWIN_VERSION_INFO\n"
-EOF
-
-#
-# Split version file into dir and filename components
-#
-dir=`dirname $incfile`
-fn=`basename $incfile`
-
-#
-# Look in the include file CVS directory for a CVS Tag file. This file,
-# if it exists, will contain the name of the sticky tag associated with
-# the current build. Save that for output later.
-#
-cvs_tag="`sed -e '/dontuse/d' -e 's%^.\(.*\)%\1%' $dir/CVS/Tag 2>/dev/null`"
-
-wv_cvs_tag="$cvs_tag"
-[ -n "$cvs_tag" ] && cvs_tag=" CVS tag"'
-'"$cvs_tag"
-
-#
-# Look in the source directory containing the include/cygwin/version.h
-# and set dir accordingly.
-dir=`echo $dir | sed -e 's%/include/cygwin.*$%%' -e 's%include/cygwin.*$%.%'`
-
-# Look in $dir for a a ".snapshot-date" file. If one is found then this
-# information will be saved for output to the DLL.
-#
-if [ -r "$dir/.snapshot-date" ]; then
- read snapshotdate < "$dir/.snapshot-date"
- snapshot="snapshot date
-$snapshotdate"
-fi
-
-#
-# Scan the version.h file for strings that begin with CYGWIN_INFO or
-# CYGWIN_VERSION. Perform crude parsing on the lines to get the values
-# associated with these values and then pipe it into a while loop which
-# outputs these values in C palatable format for inclusion in the DLL
-# with a '%% ' identifier that will introduce "interesting" strings.
-# These strings are strictly for use by a user to scan the DLL for
-# interesting information.
-#
-(sed -n -e 's%#define CYGWIN_INFO_\([A-Z_]*\)[ ][ ]*\([a-zA-Z0-9"][^/]*\).*%_\1\
-\2%p' -e 's%#define CYGWIN_VERSION_\([A-Z_]*\)[ ][ ]*\([a-zA-Z0-9"][^/]*\).*%_\1\
-\2%p' $incfile | sed -e 's/["\\]//g' -e '/^_/y/ABCDEFGHIJKLMNOPQRSTUVWXYZ_/abcdefghijklmnopqrstuvwxyz /';
-echo ' build date'; echo $build_date; [ -n "$cvs_tag" ] && echo "$cvs_tag";\
-[ -n "$snapshot" ] && echo "$snapshot"
-) | while read var; do
- read val
-cat <<EOF
- "%%% Cygwin $var: $val\n"
-EOF
-done | tee /tmp/mkvers.$$ 1>&9
-
-trap "rm -f /tmp/mkvers.$$" 0 1 2 15
-
-if [ -n "$snapshotdate" ]; then
- usedate="`echo $snapshotdate | sed 's/-\\(..:..[^-]*\\).*$/ \1SNP/'`"
-else
- usedate="$builddate"
-fi
-
-#
-# Finally, output the shared ID and set up the cygwin_version structure
-# for use by Cygwin itself.
-#
-cat <<EOF 1>&9
-#ifdef DEBUGGING
- "%%% Cygwin shared id: " CYGWIN_VERSION_DLL_IDENTIFIER "S" shared_data_version "-$builddate\n"
-#else
- "%%% Cygwin shared id: " CYGWIN_VERSION_DLL_IDENTIFIER "S" shared_data_version "\n"
-#endif
- "END_CYGWIN_VERSION_INFO\n\0";
-cygwin_version_info cygwin_version =
-{
- CYGWIN_VERSION_API_MAJOR, CYGWIN_VERSION_API_MINOR,
- CYGWIN_VERSION_DLL_MAJOR, CYGWIN_VERSION_DLL_MINOR,
- CYGWIN_VERSION_SHARED_DATA,
- CYGWIN_VERSION_MOUNT_REGISTRY,
- "$usedate",
-#ifdef DEBUGGING
- CYGWIN_VERSION_DLL_IDENTIFIER "S" shared_data_version "-$builddate"
-#else
- CYGWIN_VERSION_DLL_IDENTIFIER "S" shared_data_version
-#endif
-};
-EOF
-
-#
-# Generate winver.o using cygwin/version.h information.
-# Turn the cygwin major number from some large number to something like 1.1.0.
-#
-eval `sed -n 's/^.*dll \(m[ai][jn]or\): \([0-9]*\)[^0-9]*$/\1=\2/p' /tmp/mkvers.$$`
-cygverhigh=`expr $major / 1000`
-cygverlow=`expr $major % 1000`
-cygwin_ver="$cygverhigh.$cygverlow.$minor"
-if [ -n "$cvs_tag" ]; then
- cvs_tag="`echo $wv_cvs_tag | sed -e 's/-branch.*//'`"
- cygwin_ver="$cygwin_ver-$cvs_tag"
-fi
-
-echo "Version $cygwin_ver"
-set -$- $builddate
-$windres $iflags --define CYGWIN_BUILD_DATE="$1" --define CYGWIN_BUILD_TIME="$2" --define CYGWIN_VERSION='"'"$cygwin_ver"'"' $rcfile winver.o
diff --git a/winsup/cygwin/mmap.cc b/winsup/cygwin/mmap.cc
deleted file mode 100644
index 8175d6ea3..000000000
--- a/winsup/cygwin/mmap.cc
+++ /dev/null
@@ -1,1940 +0,0 @@
-/* mmap.cc
-
- Copyright 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
- 2008, 2009, 2010, 2011, 2012, 2013 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include "miscfuncs.h"
-#include <unistd.h>
-#include <stdlib.h>
-#include <sys/mman.h>
-#include <sys/param.h>
-#include "cygerrno.h"
-#include "security.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "ntdll.h"
-#include <sys/queue.h>
-
-/* __PROT_ATTACH indicates an anonymous mapping which is supposed to be
- attached to a file mapping for pages beyond the file's EOF. The idea
- is to support mappings longer than the file, without the file growing
- to mapping length (POSIX semantics). */
-#define __PROT_ATTACH 0x8000000
-/* Filler pages are the pages from the last file backed page to the next
- 64K boundary. These pages are created as anonymous pages, but with
- the same page protection as the file's pages, since POSIX applications
- expect to be able to access this part the same way as the file pages. */
-#define __PROT_FILLER 0x4000000
-
-/* Stick with 4K pages for bookkeeping, otherwise we just get confused
- when trying to do file mappings with trailing filler pages correctly. */
-#define PAGE_CNT(bytes) howmany((bytes), wincap.page_size())
-
-#define PGBITS (sizeof (DWORD)*8)
-#define MAPSIZE(pages) howmany ((pages), PGBITS)
-
-#define MAP_SET(n) (page_map[(n)/PGBITS] |= (1L << ((n) % PGBITS)))
-#define MAP_CLR(n) (page_map[(n)/PGBITS] &= ~(1L << ((n) % PGBITS)))
-#define MAP_ISSET(n) (page_map[(n)/PGBITS] & (1L << ((n) % PGBITS)))
-
-/* Used for anonymous mappings. */
-static fhandler_dev_zero fh_anonymous;
-
-/* Used for thread synchronization while accessing mmap bookkeeping lists. */
-static NO_COPY muto mmap_guard;
-#define LIST_LOCK() (mmap_guard.init ("mmap_guard")->acquire ())
-#define LIST_UNLOCK() (mmap_guard.release ())
-
-/* Small helpers to avoid having lots of flag bit tests in the code. */
-static inline bool
-priv (int flags)
-{
- return (flags & MAP_PRIVATE) == MAP_PRIVATE;
-}
-
-static inline bool
-fixed (int flags)
-{
- return (flags & MAP_FIXED) == MAP_FIXED;
-}
-
-static inline bool
-anonymous (int flags)
-{
- return (flags & MAP_ANONYMOUS) == MAP_ANONYMOUS;
-}
-
-static inline bool
-noreserve (int flags)
-{
- return (flags & MAP_NORESERVE) == MAP_NORESERVE;
-}
-
-static inline bool
-autogrow (int flags)
-{
- return (flags & MAP_AUTOGROW) == MAP_AUTOGROW;
-}
-
-static inline bool
-attached (int prot)
-{
- return (prot & __PROT_ATTACH) == __PROT_ATTACH;
-}
-
-static inline bool
-filler (int prot)
-{
- return (prot & __PROT_FILLER) == __PROT_FILLER;
-}
-
-static inline DWORD
-gen_create_protect (DWORD openflags, int flags)
-{
- DWORD ret = PAGE_READONLY;
-
- if (priv (flags))
- ret = PAGE_WRITECOPY;
- else if (openflags & GENERIC_WRITE)
- ret = PAGE_READWRITE;
-
- if (openflags & GENERIC_EXECUTE)
- ret <<= 4;
-
- return ret;
-}
-
-/* Generate Windows protection flags from mmap prot and flag values. */
-static inline DWORD
-gen_protect (int prot, int flags)
-{
- DWORD ret = PAGE_NOACCESS;
-
- /* Attached pages are only reserved, but the protection must be a
- valid value, so we just return PAGE_READWRITE. */
- if (attached (prot))
- return PAGE_EXECUTE_READWRITE;
-
- if (prot & PROT_WRITE)
- ret = (priv (flags) && (!anonymous (flags) || filler (prot)))
- ? PAGE_WRITECOPY : PAGE_READWRITE;
- else if (prot & PROT_READ)
- ret = PAGE_READONLY;
-
- if (prot & PROT_EXEC)
- ret <<= 4;
-
- return ret;
-}
-
-static HANDLE
-CreateMapping (HANDLE fhdl, size_t len, off_t off, DWORD openflags,
- int prot, int flags)
-{
- HANDLE h;
- NTSTATUS status;
-
- LARGE_INTEGER sectionsize = { QuadPart: (LONGLONG) len };
- ULONG protect = gen_create_protect (openflags, flags);
- ULONG attributes = attached (prot) ? SEC_RESERVE : SEC_COMMIT;
-
- OBJECT_ATTRIBUTES oa;
- InitializeObjectAttributes (&oa, NULL, OBJ_INHERIT, NULL,
- sec_none.lpSecurityDescriptor);
-
- if (fhdl == INVALID_HANDLE_VALUE)
- {
- /* Standard anonymous mapping needs non-zero len. */
- status = NtCreateSection (&h, SECTION_ALL_ACCESS, &oa, &sectionsize,
- protect, attributes, NULL);
- }
- else if (autogrow (flags))
- {
- /* Auto-grow only works if the protection is PAGE_READWRITE. So,
- first we call NtCreateSection with PAGE_READWRITE, then, if the
- requested protection is different, we close the mapping and
- reopen it again with the correct protection, if auto-grow worked. */
- sectionsize.QuadPart += off;
- status = NtCreateSection (&h, SECTION_ALL_ACCESS, &oa, &sectionsize,
- PAGE_READWRITE, attributes, fhdl);
- if (NT_SUCCESS (status) && protect != PAGE_READWRITE)
- {
- NtClose (h);
- status = NtCreateSection (&h, SECTION_ALL_ACCESS, &oa, &sectionsize,
- protect, attributes, fhdl);
- }
- }
- else
- {
- /* Zero len creates mapping for whole file and allows
- AT_EXTENDABLE_FILE mapping, if we ever use it... */
- sectionsize.QuadPart = 0;
- status = NtCreateSection (&h, SECTION_ALL_ACCESS, &oa, &sectionsize,
- protect, attributes, fhdl);
- }
- if (!NT_SUCCESS (status))
- {
- h = NULL;
- SetLastError (RtlNtStatusToDosError (status));
- }
- return h;
-}
-
-static void *
-MapView (HANDLE h, void *addr, size_t len, DWORD openflags,
- int prot, int flags, off_t off)
-{
- NTSTATUS status;
- LARGE_INTEGER offset = { QuadPart:off };
- DWORD protect = gen_create_protect (openflags, flags);
- void *base = addr;
- SIZE_T commitsize = attached (prot) ? 0 : len;
- SIZE_T viewsize = len;
-#ifdef __x86_64__ /* AT_ROUND_TO_PAGE isn't supported on 64 bit systems. */
- ULONG alloc_type = MEM_TOP_DOWN;
-#else
- ULONG alloc_type = (base && !wincap.is_wow64 () ? AT_ROUND_TO_PAGE : 0)
- | MEM_TOP_DOWN;
-#endif
-
- /* Try mapping using the given address first, even if it's NULL.
- If it failed, and addr was not NULL and flags is not MAP_FIXED,
- try again with NULL address.
-
- Note: Retrying the mapping might be unnecessary, now that mmap64 checks
- for a valid memory area first. */
- status = NtMapViewOfSection (h, NtCurrentProcess (), &base, 0, commitsize,
- &offset, &viewsize, ViewShare, alloc_type,
- protect);
- if (!NT_SUCCESS (status) && addr && !fixed (flags))
- {
- base = NULL;
- status = NtMapViewOfSection (h, NtCurrentProcess (), &base, 0, commitsize,
- &offset, &viewsize, ViewShare, 0, protect);
- }
- if (!NT_SUCCESS (status))
- {
- base = NULL;
- SetLastError (RtlNtStatusToDosError (status));
- }
- debug_printf ("%p (status %p) = NtMapViewOfSection (h:%p, addr:%p, len:%lu,"
- " off:%Y, protect:%y, type:%y)",
- base, status, h, addr, len, off, protect, 0);
- return base;
-}
-
-/* Class structure used to keep a record of all current mmap areas
- in a process. Needed for bookkeeping all mmaps in a process and
- for duplicating all mmaps after fork() since mmaps are not propagated
- to child processes by Windows. All information must be duplicated
- by hand, see fixup_mmaps_after_fork().
-
- The class structure:
-
- One member of class map per process, global variable mmapped_areas.
- Contains a singly-linked list of type class mmap_list. Each mmap_list
- entry represents all mapping to a file, keyed by file descriptor and
- file name hash.
- Each list entry contains a singly-linked list of type class mmap_record.
- Each mmap_record represents exactly one mapping. For each mapping, there's
- an additional so called `page_map'. It's an array of bits, one bit
- per mapped memory page. The bit is set if the page is accessible,
- unset otherwise. */
-
-#pragma pack(push, 4)
-class mmap_record
-{
- public:
- LIST_ENTRY (mmap_record) mr_next;
-
- private:
- /* 4 byte on 32 bit, 8 byte on 64 bit */
- HANDLE mapping_hdl;
- SIZE_T len;
- caddr_t base_address;
- /* Always 8 bytes */
- off_t offset;
- /* Always 4 bytes */
- int fd;
- DWORD openflags;
- int prot;
- int flags;
- dev_t dev;
- DWORD page_map[0];
-
- public:
- mmap_record (int nfd, HANDLE h, DWORD of, int p, int f, off_t o, DWORD l,
- caddr_t b) :
- mapping_hdl (h),
- len (l),
- base_address (b),
- offset (o),
- fd (nfd),
- openflags (of),
- prot (p),
- flags (f)
- {
- dev = 0;
- if (fd >= 0 && !cygheap->fdtab.not_open (fd))
- dev = cygheap->fdtab[fd]->dev ();
- else if (fd == -1)
- dev = FH_ZERO;
- }
-
- int get_fd () const { return fd; }
- HANDLE get_handle () const { return mapping_hdl; }
- int get_device () { return dev; }
- int get_prot () const { return prot; }
- int get_openflags () const { return openflags; }
- int get_flags () const { return flags; }
- bool priv () const { return ::priv (flags); }
- bool fixed () const { return ::fixed (flags); }
- bool anonymous () const { return ::anonymous (flags); }
- bool noreserve () const { return ::noreserve (flags); }
- bool autogrow () const { return ::autogrow (flags); }
- bool attached () const { return ::attached (prot); }
- bool filler () const { return ::filler (prot); }
- off_t get_offset () const { return offset; }
- SIZE_T get_len () const { return len; }
- caddr_t get_address () const { return base_address; }
-
- void init_page_map (mmap_record &r);
-
- DWORD find_unused_pages (DWORD pages) const;
- bool match (caddr_t addr, SIZE_T len, caddr_t &m_addr, DWORD &m_len);
- off_t map_pages (off_t off, SIZE_T len);
- bool map_pages (caddr_t addr, SIZE_T len);
- bool unmap_pages (caddr_t addr, SIZE_T len);
- int access (caddr_t address);
-
- fhandler_base *alloc_fh ();
- void free_fh (fhandler_base *fh);
-
- DWORD gen_create_protect () const
- { return ::gen_create_protect (get_openflags (), get_flags ()); }
- DWORD gen_protect () const
- { return ::gen_protect (get_prot (), get_flags ()); }
- bool compatible_flags (int fl) const;
-};
-#pragma pack(pop)
-
-class mmap_list
-{
- public:
- LIST_ENTRY (mmap_list) ml_next;
- LIST_HEAD (, mmap_record) recs;
-
- private:
- int fd;
- ino_t hash;
-
- public:
- int get_fd () const { return fd; }
- ino_t get_hash () const { return hash; }
-
- bool anonymous () const { return fd == -1; }
- void set (int nfd, struct stat *st);
- mmap_record *add_record (mmap_record &r);
- bool del_record (mmap_record *rec);
- caddr_t try_map (void *addr, size_t len, int flags, off_t off);
-};
-
-class mmap_areas
-{
- public:
- LIST_HEAD (, mmap_list) lists;
-
- mmap_list *get_list_by_fd (int fd, struct stat *st);
- mmap_list *add_list (int fd, struct stat *st);
- void del_list (mmap_list *ml);
-};
-
-/* This is the global map structure pointer. */
-static mmap_areas mmapped_areas;
-
-bool
-mmap_record::compatible_flags (int fl) const
-{
-#define MAP_COMPATMASK (MAP_TYPE | MAP_NORESERVE)
- return (get_flags () & MAP_COMPATMASK) == (fl & MAP_COMPATMASK);
-}
-
-DWORD
-mmap_record::find_unused_pages (DWORD pages) const
-{
- DWORD mapped_pages = PAGE_CNT (get_len ());
- DWORD start;
-
- if (pages > mapped_pages)
- return (DWORD)-1;
- for (start = 0; start <= mapped_pages - pages; ++start)
- if (!MAP_ISSET (start))
- {
- DWORD cnt;
- for (cnt = 0; cnt < pages; ++cnt)
- if (MAP_ISSET (start + cnt))
- break;
- if (cnt >= pages)
- return start;
- }
- return (DWORD)-1;
-}
-
-bool
-mmap_record::match (caddr_t addr, SIZE_T len, caddr_t &m_addr, DWORD &m_len)
-{
- caddr_t low = (addr >= get_address ()) ? addr : get_address ();
- caddr_t high = get_address ();
- if (filler ())
- high += get_len ();
- else
- high += (PAGE_CNT (get_len ()) * wincap.page_size ());
- high = (addr + len < high) ? addr + len : high;
- if (low < high)
- {
- m_addr = low;
- m_len = high - low;
- return true;
- }
- return false;
-}
-
-void
-mmap_record::init_page_map (mmap_record &r)
-{
- *this = r;
- DWORD start_protect = gen_create_protect ();
- DWORD real_protect = gen_protect ();
- if (real_protect != start_protect && !noreserve ()
- && !VirtualProtect (get_address (), get_len (),
- real_protect, &start_protect))
- system_printf ("Warning: VirtualProtect (addr: %p, len: %ly, "
- "new_prot: %y, old_prot: %y), %E",
- get_address (), get_len (),
- real_protect, start_protect);
- SIZE_T len = PAGE_CNT (get_len ());
- while (len-- > 0)
- MAP_SET (len);
-}
-
-off_t
-mmap_record::map_pages (off_t off, SIZE_T len)
-{
- /* Used ONLY if this mapping matches into the chunk of another already
- performed mapping in a special case of MAP_ANON|MAP_PRIVATE.
-
- Otherwise it's job is now done by init_page_map(). */
- DWORD old_prot;
- debug_printf ("map_pages (fd=%d, off=%Y, len=%lu)", get_fd (), off, len);
- len = PAGE_CNT (len);
-
- if ((off = find_unused_pages (len)) == (DWORD)-1)
- return 0L;
- if (!noreserve ()
- && !VirtualProtect (get_address () + off * wincap.page_size (),
- len * wincap.page_size (), gen_protect (),
- &old_prot))
- {
- __seterrno ();
- return (off_t)-1;
- }
-
- while (len-- > 0)
- MAP_SET (off + len);
- return off * wincap.page_size ();
-}
-
-bool
-mmap_record::map_pages (caddr_t addr, SIZE_T len)
-{
- debug_printf ("map_pages (addr=%p, len=%lu)", addr, len);
- DWORD old_prot;
- DWORD off = addr - get_address ();
- off /= wincap.page_size ();
- len = PAGE_CNT (len);
- /* First check if the area is unused right now. */
- for (DWORD l = 0; l < len; ++l)
- if (MAP_ISSET (off + l))
- {
- set_errno (EINVAL);
- return false;
- }
- if (!noreserve ()
- && !VirtualProtect (get_address () + off * wincap.page_size (),
- len * wincap.page_size (), gen_protect (),
- &old_prot))
- {
- __seterrno ();
- return false;
- }
- for (; len-- > 0; ++off)
- MAP_SET (off);
- return true;
-}
-
-bool
-mmap_record::unmap_pages (caddr_t addr, SIZE_T len)
-{
- DWORD old_prot;
- DWORD off = addr - get_address ();
- if (noreserve ()
- && !VirtualFree (get_address () + off, len, MEM_DECOMMIT))
- debug_printf ("VirtualFree in unmap_pages () failed, %E");
- else if (!VirtualProtect (get_address () + off, len, PAGE_NOACCESS,
- &old_prot))
- debug_printf ("VirtualProtect in unmap_pages () failed, %E");
-
- off /= wincap.page_size ();
- len = PAGE_CNT (len);
- for (; len-- > 0; ++off)
- MAP_CLR (off);
- /* Return TRUE if all pages are free'd which may result in unmapping
- the whole chunk. */
- for (len = MAPSIZE (PAGE_CNT (get_len ())); len > 0; )
- if (page_map[--len])
- return false;
- return true;
-}
-
-int
-mmap_record::access (caddr_t address)
-{
- if (address < get_address () || address >= get_address () + get_len ())
- return 0;
- DWORD off = (address - get_address ()) / wincap.page_size ();
- return MAP_ISSET (off);
-}
-
-fhandler_base *
-mmap_record::alloc_fh ()
-{
- if (anonymous ())
- {
- fh_anonymous.set_io_handle (INVALID_HANDLE_VALUE);
- fh_anonymous.set_access (GENERIC_READ | GENERIC_WRITE | GENERIC_EXECUTE);
- return &fh_anonymous;
- }
-
- /* The file descriptor could have been closed or, even
- worse, could have been reused for another file before
- the call to fork(). This requires creating a fhandler
- of the correct type to be sure to call the method of the
- correct class. */
- device fdev;
- fdev.name = fdev.native = "";
- fdev.parse (get_device ());
- fhandler_base *fh = build_fh_dev (fdev);
- if (fh)
- fh->set_access (get_openflags ());
- return fh;
-}
-
-void
-mmap_record::free_fh (fhandler_base *fh)
-{
- if (!anonymous ())
- delete fh;
-}
-
-mmap_record *
-mmap_list::add_record (mmap_record &r)
-{
- mmap_record *rec = (mmap_record *) ccalloc (HEAP_MMAP,
- sizeof (mmap_record)
- + MAPSIZE (PAGE_CNT (r.get_len ())) * sizeof (DWORD), 1);
- if (!rec)
- return NULL;
- rec->init_page_map (r);
-
- LIST_INSERT_HEAD (&recs, rec, mr_next);
- return rec;
-}
-
-void
-mmap_list::set (int nfd, struct stat *st)
-{
- fd = nfd;
- if (!anonymous ())
- {
- /* The fd isn't sufficient since it could already be the fd of another
- file. So we use the inode number as evaluated by fstat to identify
- the file. */
- hash = st ? st->st_ino : (ino_t) 0;
- }
- LIST_INIT (&recs);
-}
-
-bool
-mmap_list::del_record (mmap_record *rec)
-{
- LIST_REMOVE (rec, mr_next);
- cfree (rec);
- /* Return true if the list is empty which allows the caller to remove
- this list from the list of lists. */
- return !LIST_FIRST(&recs);
-}
-
-caddr_t
-mmap_list::try_map (void *addr, size_t len, int flags, off_t off)
-{
- mmap_record *rec;
-
- if (off == 0 && !fixed (flags))
- {
- /* If MAP_FIXED isn't given, check if this mapping matches into the
- chunk of another already performed mapping. */
- SIZE_T plen = PAGE_CNT (len);
- LIST_FOREACH (rec, &recs, mr_next)
- if (rec->find_unused_pages (plen) != (DWORD) -1)
- break;
- if (rec && rec->compatible_flags (flags))
- {
- if ((off = rec->map_pages (off, len)) == (off_t) -1)
- return (caddr_t) MAP_FAILED;
- return (caddr_t) rec->get_address () + off;
- }
- }
- else if (fixed (flags))
- {
- /* If MAP_FIXED is given, test if the requested area is in an
- unmapped part of an still active mapping. This can happen
- if a memory region is unmapped and remapped with MAP_FIXED. */
- caddr_t u_addr;
- DWORD u_len;
-
- LIST_FOREACH (rec, &recs, mr_next)
- if (rec->match ((caddr_t) addr, len, u_addr, u_len))
- break;
- if (rec)
- {
- if (u_addr > (caddr_t) addr || u_addr + len < (caddr_t) addr + len
- || !rec->compatible_flags (flags))
- {
- /* Partial match only, or access mode doesn't match. */
- /* FIXME: Handle partial mappings gracefully if adjacent
- memory is available. */
- set_errno (EINVAL);
- return (caddr_t) MAP_FAILED;
- }
- if (!rec->map_pages ((caddr_t) addr, len))
- return (caddr_t) MAP_FAILED;
- return (caddr_t) addr;
- }
- }
- return NULL;
-}
-
-mmap_list *
-mmap_areas::get_list_by_fd (int fd, struct stat *st)
-{
- mmap_list *ml;
- LIST_FOREACH (ml, &lists, ml_next)
- {
- if (fd == -1 && ml->anonymous ())
- return ml;
- /* The fd isn't sufficient since it could already be the fd of another
- file. So we use the inode number as evaluated by fstat to identify
- the file. */
- if (fd != -1 && st && ml->get_hash () == st->st_ino)
- return ml;
- }
- return 0;
-}
-
-mmap_list *
-mmap_areas::add_list (int fd, struct stat *st)
-{
- mmap_list *ml = (mmap_list *) cmalloc (HEAP_MMAP, sizeof (mmap_list));
- if (!ml)
- return NULL;
- ml->set (fd, st);
- LIST_INSERT_HEAD (&lists, ml, ml_next);
- return ml;
-}
-
-void
-mmap_areas::del_list (mmap_list *ml)
-{
- LIST_REMOVE (ml, ml_next);
- cfree (ml);
-}
-
-/* This function allows an external function to test if a given memory
- region is part of an mmapped memory region. */
-bool
-is_mmapped_region (caddr_t start_addr, caddr_t end_address)
-{
- size_t len = end_address - start_addr;
-
- LIST_LOCK ();
- mmap_list *map_list = mmapped_areas.get_list_by_fd (-1, NULL);
-
- if (!map_list)
- {
- LIST_UNLOCK ();
- return false;
- }
-
- mmap_record *rec;
- caddr_t u_addr;
- DWORD u_len;
- bool ret = false;
-
- LIST_FOREACH (rec, &map_list->recs, mr_next)
- {
- if (rec->match (start_addr, len, u_addr, u_len))
- {
- ret = true;
- break;
- }
- }
- LIST_UNLOCK ();
- return ret;
-}
-
-/* This function is called from exception_handler when a segmentation
- violation has occurred. It should also be called from all Cygwin
- functions that want to support passing noreserve mmap page addresses
- to Windows system calls. In that case, it should be called only after
- a system call indicates that the application buffer passed had an
- invalid virtual address to avoid any performance impact in non-noreserve
- cases.
-
- Check if the address range is all within noreserve mmap regions. If so,
- call VirtualAlloc to commit the pages and return MMAP_NORESERVE_COMMITED
- on success. If the page has __PROT_ATTACH (SUSv3 memory protection
- extension), or if VirutalAlloc fails, return MMAP_RAISE_SIGBUS.
- Otherwise, return MMAP_NONE if the address range is not covered by an
- attached or noreserve map.
-
- On MAP_NORESERVE_COMMITED, the exeception handler should return 0 to
- allow the application to retry the memory access, or the calling Cygwin
- function should retry the Windows system call. */
-
-mmap_region_status
-mmap_is_attached_or_noreserve (void *addr, size_t len)
-{
- mmap_region_status ret = MMAP_NONE;
-
- LIST_LOCK ();
- mmap_list *map_list = mmapped_areas.get_list_by_fd (-1, NULL);
-
- size_t pagesize = wincap.allocation_granularity ();
- caddr_t start_addr = (caddr_t) rounddown ((uintptr_t) addr, pagesize);
- len += ((caddr_t) addr - start_addr);
- len = roundup2 (len, pagesize);
-
- if (map_list == NULL)
- goto out;
-
- mmap_record *rec;
- caddr_t u_addr;
- DWORD u_len;
-
- LIST_FOREACH (rec, &map_list->recs, mr_next)
- {
- if (!rec->match (start_addr, len, u_addr, u_len))
- continue;
- if (rec->attached ())
- {
- ret = MMAP_RAISE_SIGBUS;
- break;
- }
- if (!rec->noreserve ())
- break;
-
- size_t commit_len = u_len - (start_addr - u_addr);
- if (commit_len > len)
- commit_len = len;
-
- if (!VirtualAlloc (start_addr, commit_len, MEM_COMMIT,
- rec->gen_protect ()))
- {
- ret = MMAP_RAISE_SIGBUS;
- break;
- }
-
- start_addr += commit_len;
- len -= commit_len;
- if (!len)
- {
- ret = MMAP_NORESERVE_COMMITED;
- break;
- }
- }
-out:
- LIST_UNLOCK ();
- return ret;
-}
-
-static caddr_t
-mmap_worker (mmap_list *map_list, fhandler_base *fh, caddr_t base, size_t len,
- int prot, int flags, int fd, off_t off, struct stat *st)
-{
- HANDLE h = fh->mmap (&base, len, prot, flags, off);
- if (h == INVALID_HANDLE_VALUE)
- return NULL;
- if (!map_list
- && !(map_list = mmapped_areas.get_list_by_fd (fd, st))
- && !(map_list = mmapped_areas.add_list (fd, st)))
- {
- fh->munmap (h, base, len);
- return NULL;
- }
- mmap_record mmap_rec (fd, h, fh->get_access (), prot, flags, off, len, base);
- mmap_record *rec = map_list->add_record (mmap_rec);
- if (!rec)
- {
- fh->munmap (h, base, len);
- return NULL;
- }
- return base;
-}
-
-#ifdef __x86_64__
-
-/* The memory region used for memory maps */
-#define MMAP_STORAGE_LOW 0x00800000000L /* Leave 8 Gigs for heap. */
-#define MMAP_STORAGE_HIGH 0x70000000000L /* Leave enough room for OS. */
-
-/* FIXME? Unfortunately the OS doesn't support a top down allocation with
- a ceiling value. The ZeroBits mechanism only works for
- NtMapViewOfSection and it only evaluates the high bit of ZeroBits
- on 64 bit, so it's pretty much useless for our purposes.
-
- If the below simple mechanism to perform top-down allocations
- turns out to be too dumb, we need something else. One idea is to
- dived the space in (3835) 4 Gig chunks and simply store the
- available free space per slot. Then we can go top down from slot
- to slot and only try slots which are supposed to have enough space.
- Bookkeeping would be very simple and fast. */
-class mmap_allocator
-{
- caddr_t mmap_current_low;
-
-public:
- mmap_allocator () : mmap_current_low ((caddr_t) MMAP_STORAGE_HIGH) {}
-
- PVOID alloc (PVOID in_addr, SIZE_T in_size, bool fixed)
- {
- MEMORY_BASIC_INFORMATION mbi;
-
- SIZE_T size = roundup2 (in_size, wincap.allocation_granularity ());
- /* First check for the given address. */
- if (in_addr)
- {
- /* If it points to a free area, big enough to fulfill the request,
- return the address. */
- if (VirtualQuery (in_addr, &mbi, sizeof mbi)
- && mbi.State == MEM_FREE
- && mbi.RegionSize >= size)
- return in_addr;
- /* Otherwise, if MAP_FIXED was given, give up. */
- if (fixed)
- return NULL;
- /* Otherwise, fall through to the usual free space search mechanism. */
- }
- /* Start with the last allocation start address - requested size. */
- caddr_t addr = mmap_current_low - size;
- bool merry_go_round = false;
- do
- {
- /* Did we hit the lower ceiling? If so, restart from the upper
- ceiling, but note that we did it. */
- if (addr < (caddr_t) MMAP_STORAGE_LOW)
- {
- addr = (caddr_t) MMAP_STORAGE_HIGH - size;
- merry_go_round = true;
- }
- /* Shouldn't fail, but better test. */
- if (!VirtualQuery ((PVOID) addr, &mbi, sizeof mbi))
- return NULL;
- /* If the region is free... */
- if (mbi.State == MEM_FREE)
- {
- /* ...and the region is big enough to fulfill the request... */
- if (mbi.RegionSize >= size)
- {
- /* ...note the address as next start address for our simple
- merry-go-round and return the address. */
- mmap_current_low = addr;
- return (PVOID) addr;
- }
- /* Otherwise, subtract what's missing in size and try again. */
- addr -= size - mbi.RegionSize;
- }
- /* If the region isn't free, skip to address below AllocationBase
- and try again. */
- else
- addr = (caddr_t) mbi.AllocationBase - size;
- }
- /* Repeat until we had a full ride on the merry_go_round. */
- while (!merry_go_round || addr >= mmap_current_low);
- return NULL;
- }
-};
-
-static mmap_allocator mmap_alloc; /* Inherited by forked child. */
-#endif
-
-extern "C" void *
-mmap64 (void *addr, size_t len, int prot, int flags, int fd, off_t off)
-{
- syscall_printf ("addr %p, len %lu, prot %y, flags %y, fd %d, off %Y",
- addr, len, prot, flags, fd, off);
-
- caddr_t ret = (caddr_t) MAP_FAILED;
- fhandler_base *fh = NULL;
- fhandler_disk_file *fh_disk_file = NULL; /* Used for reopening a disk file
- when necessary. */
- mmap_list *map_list = NULL;
- size_t orig_len = 0;
- caddr_t base = NULL;
- struct stat st;
-
- size_t pagesize = wincap.allocation_granularity ();
-
- fh_anonymous.set_io_handle (INVALID_HANDLE_VALUE);
- fh_anonymous.set_access (GENERIC_READ | GENERIC_WRITE | GENERIC_EXECUTE);
-
- /* EINVAL error conditions. */
- if (off % pagesize
- || ((prot & ~(PROT_READ | PROT_WRITE | PROT_EXEC)))
- || ((flags & MAP_TYPE) != MAP_SHARED
- && (flags & MAP_TYPE) != MAP_PRIVATE)
- || (fixed (flags) && ((uintptr_t) addr % pagesize))
- || !len)
- {
- set_errno (EINVAL);
- goto out;
- }
-
- if (!anonymous (flags) && fd != -1)
- {
- /* Ensure that fd is open */
- cygheap_fdget cfd (fd);
- if (cfd < 0)
- goto out;
-
- fh = cfd;
-
- /* mmap /dev/zero is like MAP_ANONYMOUS. */
- if (fh->get_device () == FH_ZERO)
- flags |= MAP_ANONYMOUS;
-
- /* The autoconf mmap test maps a file of size 1 byte. It then tests
- every byte of the entire mapped page of 64K for 0-bytes since that's
- what POSIX requires. The problem is, we can't create that mapping on
- 64 bit systems. The file mapping will be only a single page, 4K, and
- since 64 bit systems don't support the AT_ROUND_TO_PAGE flag, the
- remainder of the 64K slot will result in a SEGV when accessed.
-
- So, what we do here is cheating for the sake of the autoconf test
- on 64 bit systems. The justification is that there's very likely
- no application actually utilizing the map beyond EOF, and we know that
- all bytes beyond EOF are set to 0 anyway. If this test doesn't work
- on 64 bit systems, it will result in not using mmap at all in a
- package. But we want that mmap is treated as usable by autoconf,
- regardless whether the autoconf test runs on a 32 bit or a 64 bit
- system.
-
- Ok, so we know exactly what autoconf is doing. The file is called
- "conftest.txt", it has a size of 1 byte, the mapping size is the
- pagesize, the requested protection is PROT_READ | PROT_WRITE, the
- mapping is MAP_SHARED, the offset is 0.
-
- If all these requirements are given, we just return an anonymous map.
- This will help to get over the autoconf test even on 64 bit systems.
- The tests are ordered for speed. */
-#ifdef __x86_64__
- if (1)
-#else
- if (wincap.is_wow64 ())
-#endif
- {
- UNICODE_STRING fname;
- IO_STATUS_BLOCK io;
- FILE_STANDARD_INFORMATION fsi;
-
- if (len == pagesize
- && prot == (PROT_READ | PROT_WRITE)
- && flags == MAP_SHARED
- && off == 0
- && (RtlSplitUnicodePath (fh->pc.get_nt_native_path (), NULL,
- &fname),
- wcscmp (fname.Buffer, L"conftest.txt") == 0)
- && NT_SUCCESS (NtQueryInformationFile (fh->get_handle (), &io,
- &fsi, sizeof fsi,
- FileStandardInformation))
- && fsi.EndOfFile.QuadPart == 1LL)
- flags |= MAP_ANONYMOUS;
- }
- }
-
- if (anonymous (flags) || fd == -1)
- {
- fh = &fh_anonymous;
- fd = -1;
- flags |= MAP_ANONYMOUS;
- /* Anonymous mappings are always forced to pagesize length with
- no offset. */
- len = roundup2 (len, pagesize);
- off = 0;
- }
- else if (fh->get_device () == FH_FS)
- {
- /* EACCES error conditions according to SUSv3. File must be opened
- for reading, regardless of the requested protection, and file must
- be opened for writing when PROT_WRITE together with MAP_SHARED
- is requested. */
- if (!(fh->get_access () & GENERIC_READ)
- || (!(fh->get_access () & GENERIC_WRITE)
- && (prot & PROT_WRITE) && !priv (flags)))
- {
- set_errno (EACCES);
- goto out;
- }
-
- /* You can't create mappings with PAGE_EXECUTE protection if
- the file isn't explicitely opened with EXECUTE access. */
- OBJECT_ATTRIBUTES attr;
- NTSTATUS status;
- HANDLE h;
- IO_STATUS_BLOCK io;
-
- InitializeObjectAttributes (&attr, &ro_u_empty, fh->pc.objcaseinsensitive (),
- fh->get_handle (), NULL);
- status = NtOpenFile (&h,
- fh->get_access () | GENERIC_EXECUTE | SYNCHRONIZE,
- &attr, &io, FILE_SHARE_VALID_FLAGS,
- FILE_SYNCHRONOUS_IO_NONALERT
- | FILE_OPEN_FOR_BACKUP_INTENT);
- if (NT_SUCCESS (status))
- {
- fh_disk_file = new (ccalloc (HEAP_FHANDLER, 1, sizeof *fh_disk_file))
- fhandler_disk_file;
- fh_disk_file->set_name (fh->pc);
- fh_disk_file->set_io_handle (h);
- fh_disk_file->set_access (fh->get_access () | GENERIC_EXECUTE);
- fh = fh_disk_file;
- }
- else if (prot & PROT_EXEC)
- {
- /* TODO: To be or not to be... I'm opting for refusing this
- mmap request rather than faking it, but that might break
- some non-portable code. */
- set_errno (EACCES);
- goto out;
- }
-
- if (fh->fstat_fs (&st))
- {
- __seterrno ();
- goto out;
- }
- off_t fsiz = st.st_size;
-
- /* Don't allow file mappings beginning beyond EOF since Windows can't
- handle that POSIX like, unless MAP_AUTOGROW flag is set, which
- mimics Windows behaviour. */
- if (off >= fsiz && !autogrow (flags))
- {
- /* Instead, it seems suitable to return an anonymous mapping of
- the given size instead. Mapped addresses beyond EOF aren't
- written back to the file anyway, so the handling is identical
- to other pages beyond EOF. */
- fh = &fh_anonymous;
- len = roundup2 (len, pagesize);
- prot = PROT_READ | PROT_WRITE | __PROT_ATTACH;
- flags &= MAP_FIXED;
- flags |= MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE;
- fd = -1;
- off = 0;
- goto go_ahead;
- }
- fsiz -= off;
- /* We're creating the pages beyond EOF as reserved, anonymous pages.
- Note that this isn't done in 64 bit environments since apparently
- 64 bit systems don't support the AT_ROUND_TO_PAGE flag, which is
- required to get this right. Too bad. */
-#ifndef __x86_64__
- if (!wincap.is_wow64 ()
- && (((off_t) len > fsiz && !autogrow (flags))
- || roundup2 (len, wincap.page_size ())
- < roundup2 (len, pagesize)))
- orig_len = len;
-#endif
- if ((off_t) len > fsiz)
- {
- if (autogrow (flags))
- {
- /* Allow mapping beyond EOF if MAP_AUTOGROW flag is set.
- Check if file has been opened for writing, otherwise
- MAP_AUTOGROW is invalid. */
- if (!(fh->get_access () & GENERIC_WRITE))
- {
- set_errno (EINVAL);
- goto out;
- }
- }
- else
- /* Otherwise, don't map beyond EOF, since Windows would change
- the file to the new length, in contrast to POSIX. */
- len = fsiz;
- }
-
- /* If the requested offset + len is <= file size, drop MAP_AUTOGROW.
- This simplifes fhandler::mmap's job. */
- if (autogrow (flags) && (off + (off_t) len) <= fsiz)
- flags &= ~MAP_AUTOGROW;
- }
-
-go_ahead:
-
- /* MAP_NORESERVE is only supported on private anonymous mappings.
- Remove that bit from flags so that later code doesn't have to
- test all bits. */
- if (noreserve (flags) && (!anonymous (flags) || !priv (flags)))
- flags &= ~MAP_NORESERVE;
-
- LIST_LOCK ();
- map_list = mmapped_areas.get_list_by_fd (fd, &st);
-
- /* Test if an existing anonymous mapping can be recycled. */
- if (map_list && anonymous (flags))
- {
- caddr_t tried = map_list->try_map (addr, len, flags, off);
- /* try_map returns NULL if no map matched, otherwise it returns
- a valid address, or MAP_FAILED in case of a fatal error. */
- if (tried)
- {
- ret = tried;
- goto out_with_unlock;
- }
- }
-
-#ifdef __x86_64__
- addr = mmap_alloc.alloc (addr, orig_len ?: len, fixed (flags));
-#else
- if (orig_len)
- {
- /* If the requested length is bigger than the file size, we try to
- allocate an area of the full size first. This area is immediately
- deallocated and the address we got is used as base address for the
- subsequent real mappings. This ensures that we have enough space
- for the whole thing. */
- orig_len = roundup2 (orig_len, pagesize);
- PVOID newaddr = VirtualAlloc (addr, orig_len, MEM_TOP_DOWN | MEM_RESERVE,
- PAGE_READWRITE);
- if (!newaddr)
- {
- /* If addr is not NULL, but MAP_FIXED isn't given, allow the OS
- to choose. */
- if (addr && !fixed (flags))
- newaddr = VirtualAlloc (NULL, orig_len, MEM_TOP_DOWN | MEM_RESERVE,
- PAGE_READWRITE);
- if (!newaddr)
- {
- __seterrno ();
- goto out_with_unlock;
- }
- }
- if (!VirtualFree (newaddr, 0, MEM_RELEASE))
- {
- __seterrno ();
- goto out_with_unlock;
- }
- addr = newaddr;
- }
-#endif
-
- base = mmap_worker (map_list, fh, (caddr_t) addr, len, prot, flags, fd, off,
- &st);
- if (!base)
- goto out_with_unlock;
-
- if (orig_len)
- {
- /* If the requested length is bigger than the file size, the
- remainder is created as anonymous mapping. Actually two
- mappings are created, first the remainder from the file end to
- the next 64K boundary as accessible pages with the same
- protection as the file's pages, then as much pages as necessary
- to accomodate the requested length, but as reserved pages which
- raise a SIGBUS when trying to access them. AT_ROUND_TO_PAGE
- and page protection on shared pages is only supported by 32 bit NT,
- so don't even try on WOW64. This is accomplished by not setting
- orig_len on WOW64 above. */
-#if 0
- orig_len = roundup2 (orig_len, pagesize);
-#endif
- len = roundup2 (len, wincap.page_size ());
- if (orig_len - len)
- {
- orig_len -= len;
- size_t valid_page_len = orig_len % pagesize;
- size_t sigbus_page_len = orig_len - valid_page_len;
-
- caddr_t at_base = base + len;
- if (valid_page_len)
- {
- prot |= __PROT_FILLER;
- flags &= MAP_SHARED | MAP_PRIVATE;
- flags |= MAP_ANONYMOUS | MAP_FIXED;
- at_base = mmap_worker (NULL, &fh_anonymous, at_base,
- valid_page_len, prot, flags, -1, 0, NULL);
- if (!at_base)
- {
- fh->munmap (fh->get_handle (), base, len);
- set_errno (ENOMEM);
- goto out_with_unlock;
- }
- at_base += valid_page_len;
- }
- if (sigbus_page_len)
- {
- prot = PROT_READ | PROT_WRITE | __PROT_ATTACH;
- flags = MAP_ANONYMOUS | MAP_NORESERVE | MAP_FIXED;
- at_base = mmap_worker (NULL, &fh_anonymous, at_base,
- sigbus_page_len, prot, flags, -1, 0, NULL);
- if (!at_base)
- debug_printf ("Warning: Mapping beyond EOF failed, %E");
- }
- }
- }
-
- ret = base;
-
-out_with_unlock:
- LIST_UNLOCK ();
-
-out:
-
- if (fh_disk_file)
- {
- NtClose (fh_disk_file->get_handle ());
- delete fh;
- }
-
- syscall_printf ("%p = mmap() ", ret);
- return ret;
-}
-
-#ifdef __x86_64__
-EXPORT_ALIAS (mmap64, mmap)
-#else
-extern "C" void *
-mmap (void *addr, size_t len, int prot, int flags, int fd, _off_t off)
-{
- return mmap64 (addr, len, prot, flags, fd, (off_t)off);
-}
-#endif
-
-/* munmap () removes all mmapped pages between addr and addr+len. */
-
-extern "C" int
-munmap (void *addr, size_t len)
-{
- syscall_printf ("munmap (addr %p, len %lu)", addr, len);
-
- /* Error conditions according to SUSv3 */
- if (!addr || !len || check_invalid_virtual_addr (addr, len))
- {
- set_errno (EINVAL);
- return -1;
- }
- size_t pagesize = wincap.allocation_granularity ();
- if (((uintptr_t) addr % pagesize) || !len)
- {
- set_errno (EINVAL);
- return -1;
- }
- len = roundup2 (len, pagesize);
-
- LIST_LOCK ();
-
- /* Iterate through the map, unmap pages between addr and addr+len
- in all maps. */
- mmap_list *map_list, *next_map_list;
- LIST_FOREACH_SAFE (map_list, &mmapped_areas.lists, ml_next, next_map_list)
- {
- mmap_record *rec, *next_rec;
- caddr_t u_addr;
- DWORD u_len;
-
- LIST_FOREACH_SAFE (rec, &map_list->recs, mr_next, next_rec)
- {
- if (!rec->match ((caddr_t) addr, len, u_addr, u_len))
- continue;
- if (rec->unmap_pages (u_addr, u_len))
- {
- /* The whole record has been unmapped, so we now actually
- unmap it from the system in full length... */
- fhandler_base *fh = rec->alloc_fh ();
- fh->munmap (rec->get_handle (),
- rec->get_address (),
- rec->get_len ());
- rec->free_fh (fh);
-
- /* ...and delete the record. */
- if (map_list->del_record (rec))
- {
- /* Yay, the last record has been removed from the list,
- we can remove the list now, too. */
- mmapped_areas.del_list (map_list);
- break;
- }
- }
- }
- }
-
- LIST_UNLOCK ();
- syscall_printf ("0 = munmap(): %p", addr);
- return 0;
-}
-
-/* Sync file with memory. Ignore flags for now. */
-
-extern "C" int
-msync (void *addr, size_t len, int flags)
-{
- int ret = -1;
- mmap_list *map_list;
-
- syscall_printf ("msync (addr: %p, len %lu, flags %y)", addr, len, flags);
-
- pthread_testcancel ();
-
- LIST_LOCK ();
-
- if (((uintptr_t) addr % wincap.allocation_granularity ())
- || (flags & ~(MS_ASYNC | MS_SYNC | MS_INVALIDATE))
- || ((flags & (MS_ASYNC | MS_SYNC)) == (MS_ASYNC | MS_SYNC)))
- {
- set_errno (EINVAL);
- goto out;
- }
-#if 0 /* If I only knew why I did that... */
- len = roundup2 (len, wincap.allocation_granularity ());
-#endif
-
- /* Iterate through the map, looking for the mmapped area.
- Error if not found. */
- LIST_FOREACH (map_list, &mmapped_areas.lists, ml_next)
- {
- mmap_record *rec;
- LIST_FOREACH (rec, &map_list->recs, mr_next)
- {
- if (rec->access ((caddr_t) addr))
- {
- /* Check whole area given by len. */
- for (DWORD i = wincap.allocation_granularity ();
- i < len;
- i += wincap.allocation_granularity ())
- if (!rec->access ((caddr_t) addr + i))
- {
- set_errno (ENOMEM);
- goto out;
- }
- fhandler_base *fh = rec->alloc_fh ();
- ret = fh->msync (rec->get_handle (), (caddr_t) addr, len, flags);
- rec->free_fh (fh);
- goto out;
- }
- }
- }
-
- /* No matching mapping exists. */
- set_errno (ENOMEM);
-
-out:
- LIST_UNLOCK ();
- syscall_printf ("%R = msync()", ret);
- return ret;
-}
-
-/* Set memory protection */
-
-extern "C" int
-mprotect (void *addr, size_t len, int prot)
-{
- bool in_mapped = false;
- bool ret = false;
- DWORD old_prot;
- DWORD new_prot = 0;
-
- syscall_printf ("mprotect (addr: %p, len %lu, prot %y)", addr, len, prot);
-
- /* See comment in mmap64 for a description. */
- size_t pagesize = wincap.allocation_granularity ();
- if ((uintptr_t) addr % pagesize)
- {
- set_errno (EINVAL);
- goto out;
- }
- len = roundup2 (len, pagesize);
-
- LIST_LOCK ();
-
- /* Iterate through the map, protect pages between addr and addr+len
- in all maps. */
- mmap_list *map_list;
- LIST_FOREACH (map_list, &mmapped_areas.lists, ml_next)
- {
- mmap_record *rec;
- caddr_t u_addr;
- DWORD u_len;
-
- LIST_FOREACH (rec, &map_list->recs, mr_next)
- {
- if (!rec->match ((caddr_t) addr, len, u_addr, u_len))
- continue;
- in_mapped = true;
- if (rec->attached ())
- continue;
- new_prot = gen_protect (prot, rec->get_flags ());
- if (rec->noreserve ())
- {
- if (new_prot == PAGE_NOACCESS)
- ret = VirtualFree (u_addr, u_len, MEM_DECOMMIT);
- else
- ret = !!VirtualAlloc (u_addr, u_len, MEM_COMMIT, new_prot);
- }
- else
- ret = VirtualProtect (u_addr, u_len, new_prot, &old_prot);
- if (!ret)
- {
- __seterrno ();
- break;
- }
- }
- }
-
- LIST_UNLOCK ();
-
- if (!in_mapped)
- {
- int flags = 0;
- MEMORY_BASIC_INFORMATION mbi;
-
- ret = VirtualQuery (addr, &mbi, sizeof mbi);
- if (ret)
- {
- /* If write protection is requested, check if the page was
- originally protected writecopy. In this case call VirtualProtect
- requesting PAGE_WRITECOPY, otherwise the VirtualProtect will fail
- on NT version >= 5.0 */
- if (prot & PROT_WRITE)
- {
- if (mbi.AllocationProtect == PAGE_WRITECOPY
- || mbi.AllocationProtect == PAGE_EXECUTE_WRITECOPY)
- flags = MAP_PRIVATE;
- }
- new_prot = gen_protect (prot, flags);
- if (new_prot != PAGE_NOACCESS && mbi.State == MEM_RESERVE)
- ret = VirtualAlloc (addr, len, MEM_COMMIT, new_prot);
- else
- ret = VirtualProtect (addr, len, new_prot, &old_prot);
- }
- if (!ret)
- __seterrno ();
- }
-
-out:
-
- syscall_printf ("%R = mprotect ()", ret ? 0 : -1);
- return ret ? 0 : -1;
-}
-
-extern "C" int
-mlock (const void *addr, size_t len)
-{
- int ret = -1;
-
- /* Align address and length values to page size. */
- size_t pagesize = wincap.allocation_granularity ();
- PVOID base = (PVOID) rounddown((uintptr_t) addr, pagesize);
- SIZE_T size = roundup2 (((uintptr_t) addr - (uintptr_t) base) + len,
- pagesize);
- NTSTATUS status = 0;
- do
- {
- status = NtLockVirtualMemory (NtCurrentProcess (), &base, &size,
- MAP_PROCESS);
- if (status == STATUS_WORKING_SET_QUOTA)
- {
- /* The working set is too small, try to increase it so that the
- requested locking region fits in. Unfortunately I don't know
- any function which would return the currently locked pages of
- a process (no go with NtQueryVirtualMemory).
-
- So, except for the border cases, what we do here is something
- really embarrassing. We raise the working set by 64K at a time
- and retry, until either we fail to raise the working set size
- further, or until NtLockVirtualMemory returns successfully (or
- with another error). */
- SIZE_T min, max;
- if (!GetProcessWorkingSetSize (GetCurrentProcess (), &min, &max))
- {
- set_errno (ENOMEM);
- break;
- }
- if (min < size)
- min = size + pagesize;
- else if (size < pagesize)
- min += size;
- else
- min += pagesize;
- if (max < min)
- max = min;
- if (!SetProcessWorkingSetSize (GetCurrentProcess (), min, max))
- {
- set_errno (ENOMEM);
- break;
- }
- }
- else if (!NT_SUCCESS (status))
- __seterrno_from_nt_status (status);
- else
- ret = 0;
- }
- while (status == STATUS_WORKING_SET_QUOTA);
-
- syscall_printf ("%R = mlock(%p, %lu)", ret, addr, len);
- return ret;
-}
-
-extern "C" int
-munlock (const void *addr, size_t len)
-{
- int ret = -1;
-
- /* Align address and length values to page size. */
- size_t pagesize = wincap.allocation_granularity ();
- PVOID base = (PVOID) rounddown((uintptr_t) addr, pagesize);
- SIZE_T size = roundup2 (((uintptr_t) addr - (uintptr_t) base) + len,
- pagesize);
- NTSTATUS status = NtUnlockVirtualMemory (NtCurrentProcess (), &base, &size,
- MAP_PROCESS);
- if (!NT_SUCCESS (status))
- __seterrno_from_nt_status (status);
- else
- ret = 0;
-
- syscall_printf ("%R = munlock(%p, %lu)", ret, addr, len);
- return ret;
-}
-
-extern "C" int
-posix_madvise (void *addr, size_t len, int advice)
-{
- int ret;
- /* Check parameters. */
- if (advice < POSIX_MADV_NORMAL || advice > POSIX_MADV_DONTNEED
- || !len)
- ret = EINVAL;
- else
- {
- /* Check requested memory area. */
- MEMORY_BASIC_INFORMATION m;
- char *p = (char *) addr;
- char *endp = p + len;
- while (p < endp)
- {
- if (!VirtualQuery (p, &m, sizeof m) || m.State == MEM_FREE)
- {
- ret = ENOMEM;
- break;
- }
- p = (char *) m.BaseAddress + m.RegionSize;
- }
- ret = 0;
- }
-
- syscall_printf ("%d = posix_madvise(%p, %lu, %d)", ret, addr, len, advice);
- /* Eventually do nothing. */
- return 0;
-}
-
-/*
- * Base implementation:
- *
- * `mmap' returns ENODEV as documented in SUSv2.
- * In contrast to the global function implementation, the member function
- * `mmap' has to return the mapped base address in `addr' and the handle to
- * the mapping object as return value. In case of failure, the fhandler
- * mmap has to close that handle by itself and return INVALID_HANDLE_VALUE.
- *
- * `munmap' and `msync' get the handle to the mapping object as first parameter
- * additionally.
-*/
-HANDLE
-fhandler_base::mmap (caddr_t *addr, size_t len, int prot,
- int flags, off_t off)
-{
- set_errno (ENODEV);
- return INVALID_HANDLE_VALUE;
-}
-
-int
-fhandler_base::munmap (HANDLE h, caddr_t addr, size_t len)
-{
- set_errno (ENODEV);
- return -1;
-}
-
-int
-fhandler_base::msync (HANDLE h, caddr_t addr, size_t len, int flags)
-{
- set_errno (ENODEV);
- return -1;
-}
-
-bool
-fhandler_base::fixup_mmap_after_fork (HANDLE h, int prot, int flags,
- off_t offset, DWORD size,
- void *address)
-{
- set_errno (ENODEV);
- return -1;
-}
-
-/* Implementation for anonymous maps. Using fhandler_dev_zero looks
- quite the natural way. */
-HANDLE
-fhandler_dev_zero::mmap (caddr_t *addr, size_t len, int prot,
- int flags, off_t off)
-{
- HANDLE h;
- void *base;
-
- if (priv (flags) && !filler (prot))
- {
- /* Private anonymous maps are now implemented using VirtualAlloc.
- This has two advantages:
-
- - VirtualAlloc has a smaller footprint than a copy-on-write
- anonymous map.
-
- - It supports decommitting using VirtualFree, in contrast to
- section maps. This allows minimum footprint private maps,
- when using the (non-POSIX, yay-Linux) MAP_NORESERVE flag.
- */
- DWORD protect = gen_protect (prot, flags);
- DWORD alloc_type = MEM_TOP_DOWN | MEM_RESERVE
- | (noreserve (flags) ? 0 : MEM_COMMIT);
- base = VirtualAlloc (*addr, len, alloc_type, protect);
- if (!base && addr && !fixed (flags))
- base = VirtualAlloc (NULL, len, alloc_type, protect);
- if (!base || (fixed (flags) && base != *addr))
- {
- if (!base)
- __seterrno ();
- else
- {
- VirtualFree (base, 0, MEM_RELEASE);
- set_errno (EINVAL);
- debug_printf ("VirtualAlloc: address shift with MAP_FIXED given");
- }
- return INVALID_HANDLE_VALUE;
- }
- h = (HANDLE) 1; /* Fake handle to indicate success. */
- }
- else
- {
- h = CreateMapping (get_handle (), len, off, get_access (), prot, flags);
- if (!h)
- {
- __seterrno ();
- debug_printf ("CreateMapping failed with %E");
- return INVALID_HANDLE_VALUE;
- }
-
- base = MapView (h, *addr, len, get_access(), prot, flags, off);
- if (!base || (fixed (flags) && base != *addr))
- {
- if (!base)
- __seterrno ();
- else
- {
- NtUnmapViewOfSection (NtCurrentProcess (), base);
- set_errno (EINVAL);
- debug_printf ("MapView: address shift with MAP_FIXED given");
- }
- NtClose (h);
- return INVALID_HANDLE_VALUE;
- }
- }
- *addr = (caddr_t) base;
- return h;
-}
-
-int
-fhandler_dev_zero::munmap (HANDLE h, caddr_t addr, size_t len)
-{
- if (h == (HANDLE) 1) /* See fhandler_dev_zero::mmap. */
- VirtualFree (addr, 0, MEM_RELEASE);
- else
- {
- NtUnmapViewOfSection (NtCurrentProcess (), addr);
- NtClose (h);
- }
- return 0;
-}
-
-int
-fhandler_dev_zero::msync (HANDLE h, caddr_t addr, size_t len, int flags)
-{
- return 0;
-}
-
-bool
-fhandler_dev_zero::fixup_mmap_after_fork (HANDLE h, int prot, int flags,
- off_t offset, DWORD size,
- void *address)
-{
- /* Re-create the map */
- void *base;
- if (priv (flags) && !filler (prot))
- {
- DWORD alloc_type = MEM_RESERVE | (noreserve (flags) ? 0 : MEM_COMMIT);
- /* Always allocate R/W so that ReadProcessMemory doesn't fail
- due to a non-writable target address. The protection is
- set to the correct one anyway in the fixup loop. */
- base = VirtualAlloc (address, size, alloc_type, PAGE_READWRITE);
- }
- else
- base = MapView (h, address, size, get_access (), prot, flags, offset);
- if (base != address)
- {
- MEMORY_BASIC_INFORMATION m;
- VirtualQuery (address, &m, sizeof (m));
- system_printf ("requested %p != %p mem alloc base %p, state %y, "
- "size %lu, %E", address, base, m.AllocationBase, m.State,
- m.RegionSize);
- }
- return base == address;
-}
-
-/* Implementation for disk files and anonymous mappings. */
-HANDLE
-fhandler_disk_file::mmap (caddr_t *addr, size_t len, int prot,
- int flags, off_t off)
-{
- HANDLE h = CreateMapping (get_handle (), len, off, get_access (),
- prot, flags);
- if (!h)
- {
- __seterrno ();
- debug_printf ("CreateMapping failed with %E");
- return INVALID_HANDLE_VALUE;
- }
-
- void *base = MapView (h, *addr, len, get_access (), prot, flags, off);
- if (!base || (fixed (flags) && base != *addr))
- {
- if (!base)
- __seterrno ();
- else
- {
- NtUnmapViewOfSection (NtCurrentProcess (), base);
- set_errno (EINVAL);
- debug_printf ("MapView: address shift with MAP_FIXED given");
- }
- NtClose (h);
- return INVALID_HANDLE_VALUE;
- }
-
- *addr = (caddr_t) base;
- return h;
-}
-
-int
-fhandler_disk_file::munmap (HANDLE h, caddr_t addr, size_t len)
-{
- NtUnmapViewOfSection (NtCurrentProcess (), addr);
- NtClose (h);
- return 0;
-}
-
-int
-fhandler_disk_file::msync (HANDLE h, caddr_t addr, size_t len, int flags)
-{
- const int retry = 100;
- /* The wisdom of google tells us that FlushViewOfFile may fail with
- ERROR_LOCK_VIOLATION if "if the memory system is writing dirty
- pages to disk". And, we've seen reports of this happening in the
- cygwin list. So retry 99 times and hope we get lucky. */
- for (int i = 0; i < retry; i++)
- if (FlushViewOfFile (addr, len))
- {
- /* FlushViewOfFile just triggers the action and returns immediately,
- so it's equivalent to MS_ASYNC. MS_SYNC requires another call to
- FlushFileBuffers. */
- if (flags & MS_SYNC)
- FlushFileBuffers (h);
- return 0;
- }
- else if (GetLastError () != ERROR_LOCK_VIOLATION)
- break;
- else if (i < (retry - 1))
- yield ();
-
- __seterrno ();
- return -1;
-}
-
-bool
-fhandler_disk_file::fixup_mmap_after_fork (HANDLE h, int prot, int flags,
- off_t offset, DWORD size,
- void *address)
-{
- /* Re-create the map */
- void *base = MapView (h, address, size, get_access (), prot, flags, offset);
- if (base != address)
- {
- MEMORY_BASIC_INFORMATION m;
- VirtualQuery (address, &m, sizeof (m));
- system_printf ("requested %p != %p mem alloc base %p, state %y, "
- "size %lu, %E", address, base, m.AllocationBase, m.State,
- m.RegionSize);
- }
- return base == address;
-}
-
-/* Call to re-create all the file mappings in a forked child. Called from
- the child in initialization. At this point we are passed a valid
- mmapped_areas map, and all the HANDLE's are valid for the child, but
- none of the mapped areas are in our address space. We need to iterate
- through the map, doing the MapViewOfFile calls. */
-
-int __stdcall
-fixup_mmaps_after_fork (HANDLE parent)
-{
- /* Iterate through the map */
- mmap_list *map_list;
- LIST_FOREACH (map_list, &mmapped_areas.lists, ml_next)
- {
- mmap_record *rec;
- LIST_FOREACH (rec, &map_list->recs, mr_next)
- {
- debug_printf ("fd %d, h %p, address %p, len %ly, prot: %y, "
- "flags: %y, offset %Y",
- rec->get_fd (), rec->get_handle (), rec->get_address (),
- rec->get_len (), rec->get_prot (), rec->get_flags (),
- rec->get_offset ());
-
- fhandler_base *fh = rec->alloc_fh ();
- bool ret = fh->fixup_mmap_after_fork (rec->get_handle (),
- rec->get_prot (),
- rec->get_flags () | MAP_FIXED,
- rec->get_offset (),
- rec->get_len (),
- rec->get_address ());
- rec->free_fh (fh);
-
- if (!ret)
- {
- if (rec->attached ())
- {
- system_printf ("Warning: Fixup mapping beyond EOF failed");
- continue;
- }
- return -1;
- }
-
- MEMORY_BASIC_INFORMATION mbi;
- DWORD old_prot;
-
- for (char *address = rec->get_address ();
- address < rec->get_address () + rec->get_len ();
- address += mbi.RegionSize)
- {
- if (!VirtualQueryEx (parent, address, &mbi, sizeof mbi))
- {
- system_printf ("VirtualQueryEx failed for MAP_PRIVATE "
- "address %p, %E", address);
- return -1;
- }
- /* Just skip reserved pages. */
- if (mbi.State == MEM_RESERVE)
- continue;
- /* Copy-on-write pages must be copied to the child to circumvent
- a strange notion how copy-on-write is supposed to work. */
- if (rec->priv ())
- {
- if (rec->noreserve ()
- && !VirtualAlloc (address, mbi.RegionSize,
- MEM_COMMIT, PAGE_READWRITE))
- {
- system_printf ("VirtualAlloc failed for MAP_PRIVATE "
- "address %p, %E", address);
- return -1;
- }
- if (mbi.Protect == PAGE_NOACCESS
- && !VirtualProtectEx (parent, address, mbi.RegionSize,
- PAGE_READONLY, &old_prot))
- {
- system_printf ("VirtualProtectEx failed for MAP_PRIVATE "
- "address %p, %E", address);
- return -1;
- }
- else if ((mbi.AllocationProtect == PAGE_WRITECOPY
- || mbi.AllocationProtect == PAGE_EXECUTE_WRITECOPY)
- && (mbi.Protect == PAGE_READWRITE
- || mbi.Protect == PAGE_EXECUTE_READWRITE))
- /* A WRITECOPY page which has been written to is set to
- READWRITE, but that's an incompatible protection to
- set the page to. Convert the protection to WRITECOPY
- so that the below VirtualProtect doesn't fail. */
- mbi.Protect <<= 1;
-
- if (!ReadProcessMemory (parent, address, address,
- mbi.RegionSize, NULL))
- {
- system_printf ("ReadProcessMemory failed for MAP_PRIVATE "
- "address %p, %E", address);
- return -1;
- }
- if (mbi.Protect == PAGE_NOACCESS
- && !VirtualProtectEx (parent, address, mbi.RegionSize,
- PAGE_NOACCESS, &old_prot))
- {
- system_printf ("WARNING: VirtualProtectEx to return to "
- "PAGE_NOACCESS state in parent failed for "
- "MAP_PRIVATE address %p, %E", address);
- return -1;
- }
- }
- /* Set child page protection to parent protection */
- if (!VirtualProtect (address, mbi.RegionSize,
- mbi.Protect, &old_prot))
- {
- MEMORY_BASIC_INFORMATION m;
- VirtualQuery (address, &m, sizeof m);
- system_printf ("VirtualProtect failed for "
- "address %p, "
- "parentstate: %y, "
- "state: %y, "
- "parentprot: %y, "
- "prot: %y, %E",
- address, mbi.State, m.State,
- mbi.Protect, m.Protect);
- return -1;
- }
- }
- }
- }
-
- debug_printf ("succeeded");
- return 0;
-}
diff --git a/winsup/cygwin/mmap_helper.h b/winsup/cygwin/mmap_helper.h
deleted file mode 100644
index cd65461bd..000000000
--- a/winsup/cygwin/mmap_helper.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/* mmap_helper.h
-
- Copyright 2006, 2011 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _MMAP_HELPER_H
-#define _MMAP_HELPER_H
-#define _MMIOWRAP(__ptr, __len, __func) \
-({ \
- BOOL __res; \
- for (int __i = 0; __i < 2; __i++) \
- { \
- __res = __func; \
- if (__res || __i > 0) \
- break; \
- DWORD __errcode = GetLastError (); \
- if (__errcode != ERROR_NOACCESS) \
- break; \
- switch (mmap_is_attached_or_noreserve (__ptr, __len)) \
- { \
- case MMAP_NORESERVE_COMMITED: \
- continue; \
- case MMAP_RAISE_SIGBUS: \
- raise(SIGBUS); \
- default: \
- break; \
- } \
- break; \
- } \
- __res; \
-})
-
-#define _MMSOCKWRAP(__ptr, __count, __func) \
-({ \
- int __res; \
- for (int __i = 0; __i < 2; __i++) \
- { \
- __res = __func; \
- if (!__res || __i > 0) \
- break; \
- DWORD __errcode = WSAGetLastError (); \
- if (__errcode != WSAEFAULT) \
- break; \
- for (unsigned __j = 0; __j < __count; __j++) \
- switch (mmap_is_attached_or_noreserve (__ptr[__j].buf, __ptr[__j].len)) \
- { \
- case MMAP_NORESERVE_COMMITED: \
- goto keeptrying; \
- case MMAP_RAISE_SIGBUS: \
- raise(SIGBUS); \
- default: \
- break; \
- } \
- break; \
- keeptrying: \
- continue; \
- } \
- __res; \
-})
-
-extern inline BOOL
-mmReadFile (HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead,
- LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped)
-{
- return _MMIOWRAP (lpBuffer, nNumberOfBytesToRead,
- (ReadFile (hFile, lpBuffer, nNumberOfBytesToRead,
- lpNumberOfBytesRead, lpOverlapped)));
-}
-
-#ifdef _WINSOCK_H
-extern inline int
-mmWSARecvFrom (SOCKET s, LPWSABUF lpBuffers, DWORD dwBufferCount,
- LPDWORD lpNumberOfBytesRecvd, LPDWORD lpFlags,
- struct sockaddr* lpFrom,
- LPINT lpFromlen, LPWSAOVERLAPPED lpOverlapped,
- LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine)
-{
- return _MMSOCKWRAP (lpBuffers, dwBufferCount,
- (mmWSARecvFrom(s, lpBuffers, dwBufferCount,
- lpNumberOfBytesRecvd, lpFlags, lpFrom,
- lpFromlen, lpOverlapped,
- lpCompletionRoutine)));
-}
-#endif /*_WINSOCK_H*/
-
-#endif /*_MMAP_HELPER_H*/
diff --git a/winsup/cygwin/mount.cc b/winsup/cygwin/mount.cc
deleted file mode 100644
index 6cf3ddf46..000000000
--- a/winsup/cygwin/mount.cc
+++ /dev/null
@@ -1,2000 +0,0 @@
-/* mount.cc: mount handling.
-
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include "miscfuncs.h"
-#include <mntent.h>
-#include <ctype.h>
-#include <winioctl.h>
-#include <cygwin/version.h>
-#include "cygerrno.h"
-#include "security.h"
-#include "path.h"
-#include "shared_info.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "cygtls.h"
-#include "tls_pbuf.h"
-#include <ntdll.h>
-#include <wchar.h>
-#include <stdio.h>
-#include <assert.h>
-
-/* Determine if path prefix matches current cygdrive */
-#define iscygdrive(path) \
- (path_prefix_p (mount_table->cygdrive, (path), mount_table->cygdrive_len, false))
-
-#define iscygdrive_device(path) \
- (isalpha (path[mount_table->cygdrive_len]) && \
- (path[mount_table->cygdrive_len + 1] == '/' || \
- !path[mount_table->cygdrive_len + 1]))
-
-#define isproc(path) \
- (path_prefix_p (proc, (path), proc_len, false))
-
-bool NO_COPY mount_info::got_usr_bin;
-bool NO_COPY mount_info::got_usr_lib;
-int NO_COPY mount_info::root_idx = -1;
-
-/* is_unc_share: Return non-zero if PATH begins with //server/share
- or with one of the native prefixes //./ or //?/
- This function is only used to test for valid input strings.
- The later normalization drops the native prefixes. */
-
-static inline bool __stdcall
-is_native_path (const char *path)
-{
- return isdirsep (path[0])
- && (isdirsep (path[1]) || path[1] == '?')
- && (path[2] == '?' || path[2] == '.')
- && isdirsep (path[3])
- && isalpha (path[4]);
-}
-
-static inline bool __stdcall
-is_unc_share (const char *path)
-{
- const char *p;
- return (isdirsep (path[0])
- && isdirsep (path[1])
- && isalnum (path[2])
- && ((p = strpbrk (path + 3, "\\/")) != NULL)
- && isalnum (p[1]));
-}
-
-/* Return true if src_path is a valid, internally supported device name.
- In that case, win32_path gets the corresponding NT device name and
- dev is appropriately filled with device information. */
-
-static bool
-win32_device_name (const char *src_path, char *win32_path, device& dev)
-{
- dev.parse (src_path);
- if (dev == FH_FS || dev == FH_DEV)
- return false;
- strcpy (win32_path, dev.native);
- return true;
-}
-
-/* Beginning with Samba 3.0.28a, Samba allows to get version information using
- the ExtendedInfo member returned by a FileFsObjectIdInformation request.
- We just store the samba_version information for now. Older versions than
- 3.2 are still guessed at by testing the file system flags. */
-#define SAMBA_EXTENDED_INFO_MAGIC 0x536d4261 /* "SmBa" */
-#define SAMBA_EXTENDED_INFO_VERSION_STRING_LENGTH 28
-#pragma pack(push,4)
-struct smb_extended_info {
- DWORD samba_magic; /* Always SAMBA_EXTENDED_INFO_MAGIC */
- DWORD samba_version; /* Major/Minor/Release/Revision */
- DWORD samba_subversion; /* Prerelease/RC/Vendor patch */
- LARGE_INTEGER samba_gitcommitdate;
- char samba_version_string[SAMBA_EXTENDED_INFO_VERSION_STRING_LENGTH];
-};
-#pragma pack(pop)
-
-#define MAX_FS_INFO_CNT 32
-class fs_info_cache
-{
- static muto fsi_lock;
- uint32_t count;
- struct {
- fs_info fsi;
- uint32_t hash;
- } entry[MAX_FS_INFO_CNT];
-
- uint32_t genhash (PFILE_FS_VOLUME_INFORMATION);
-
-public:
- fs_info_cache () : count (0) { fsi_lock.init ("fsi_lock"); }
- fs_info *search (PFILE_FS_VOLUME_INFORMATION, uint32_t &);
- void add (uint32_t, fs_info *);
-};
-
-static fs_info_cache fsi_cache;
-muto NO_COPY fs_info_cache::fsi_lock;
-
-uint32_t
-fs_info_cache::genhash (PFILE_FS_VOLUME_INFORMATION pffvi)
-{
- uint32_t hash = 0;
- const uint16_t *p = (const uint16_t *) pffvi;
- const uint16_t *end = (const uint16_t *)
- ((const uint8_t *) p + sizeof *pffvi
- + pffvi->VolumeLabelLength - sizeof (WCHAR));
- pffvi->__dummy = 0; /* This member can have random values! */
- while (p < end)
- hash = *p++ + (hash << 6) + (hash << 16) - hash;
- return hash;
-}
-
-fs_info *
-fs_info_cache::search (PFILE_FS_VOLUME_INFORMATION pffvi, uint32_t &hash)
-{
- hash = genhash (pffvi);
- for (uint32_t i = 0; i < count; ++i)
- if (entry[i].hash == hash)
- return &entry[i].fsi;
- return NULL;
-}
-
-void
-fs_info_cache::add (uint32_t hashval, fs_info *new_fsi)
-{
- fsi_lock.acquire ();
- if (count < MAX_FS_INFO_CNT)
- {
- entry[count].fsi = *new_fsi;
- entry[count].hash = hashval;
- ++count;
- }
- fsi_lock.release ();
-}
-
-bool
-fs_info::update (PUNICODE_STRING upath, HANDLE in_vol)
-{
- NTSTATUS status = STATUS_OBJECT_NAME_NOT_FOUND;
- HANDLE vol;
- OBJECT_ATTRIBUTES attr;
- IO_STATUS_BLOCK io;
- bool no_media = false;
- FILE_FS_DEVICE_INFORMATION ffdi;
- FILE_FS_OBJECTID_INFORMATION ffoi;
- struct {
- FILE_FS_ATTRIBUTE_INFORMATION ffai;
- WCHAR buf[NAME_MAX + 1];
- } ffai_buf;
- struct {
- FILE_FS_VOLUME_INFORMATION ffvi;
- WCHAR buf[NAME_MAX + 1];
- } ffvi_buf;
- UNICODE_STRING dir;
- UNICODE_STRING fsname;
-
- clear ();
- /* Always caseinsensitive. We really just need access to the drive. */
- InitializeObjectAttributes (&attr, upath, OBJ_CASE_INSENSITIVE, NULL,
- NULL);
- if (in_vol)
- vol = in_vol;
- else
- {
- ULONG access = READ_CONTROL;
- /* Note: Don't use the FILE_OPEN_REPARSE_POINT flag here. The reason
- is that symlink_info::check relies on being able to open a handle
- to the target of a volume mount point. */
- status = NtOpenFile (&vol, access, &attr, &io, FILE_SHARE_VALID_FLAGS,
- FILE_OPEN_FOR_BACKUP_INTENT);
- /* At least one filesystem (HGFS, VMware shared folders) doesn't like
- to be opened with access set to just READ_CONTROL. */
- if (status == STATUS_INVALID_PARAMETER)
- {
- access |= FILE_READ_DATA;
- status = NtOpenFile (&vol, access, &attr, &io, FILE_SHARE_VALID_FLAGS,
- FILE_OPEN_FOR_BACKUP_INTENT);
- }
- while (!NT_SUCCESS (status)
- && (attr.ObjectName->Length > 7 * sizeof (WCHAR)
- || status == STATUS_NO_MEDIA_IN_DEVICE))
- {
- RtlSplitUnicodePath (attr.ObjectName, &dir, NULL);
- attr.ObjectName = &dir;
- if (status == STATUS_NO_MEDIA_IN_DEVICE)
- {
- no_media = true;
- dir.Length = 6 * sizeof (WCHAR);
- }
- else if (dir.Length > 7 * sizeof (WCHAR))
- dir.Length -= sizeof (WCHAR);
- status = NtOpenFile (&vol, access, &attr, &io, FILE_SHARE_VALID_FLAGS,
- FILE_OPEN_FOR_BACKUP_INTENT);
- }
- if (!NT_SUCCESS (status))
- {
- debug_printf ("Cannot access path %S, status %y",
- attr.ObjectName, status);
- return false;
- }
- }
- sernum = 0;
- status = NtQueryVolumeInformationFile (vol, &io, &ffvi_buf.ffvi,
- sizeof ffvi_buf,
- FileFsVolumeInformation);
- uint32_t hash = 0;
- if (NT_SUCCESS (status))
- {
- fs_info *fsi = fsi_cache.search (&ffvi_buf.ffvi, hash);
- if (fsi)
- {
- *this = *fsi;
- if (!in_vol)
- NtClose (vol);
- return true;
- }
- sernum = ffvi_buf.ffvi.VolumeSerialNumber;
- }
- status = NtQueryVolumeInformationFile (vol, &io, &ffdi, sizeof ffdi,
- FileFsDeviceInformation);
- if (!NT_SUCCESS (status))
- ffdi.DeviceType = ffdi.Characteristics = 0;
-
- if ((ffdi.Characteristics & FILE_REMOTE_DEVICE)
- || (!ffdi.DeviceType
- && RtlEqualUnicodePathPrefix (attr.ObjectName, &ro_u_uncp, TRUE)))
- is_remote_drive (true);
-
- if (!no_media)
- status = NtQueryVolumeInformationFile (vol, &io, &ffai_buf.ffai,
- sizeof ffai_buf,
- FileFsAttributeInformation);
- if (no_media || !NT_SUCCESS (status))
- {
- debug_printf ("Cannot get volume attributes (%S), %y",
- attr.ObjectName, status);
- if (!in_vol)
- NtClose (vol);
- return false;
- }
- flags (ffai_buf.ffai.FileSystemAttributes);
- name_len (ffai_buf.ffai.MaximumComponentNameLength);
- RtlInitCountedUnicodeString (&fsname, ffai_buf.ffai.FileSystemName,
- ffai_buf.ffai.FileSystemNameLength);
- if (is_remote_drive ())
- {
-/* Should be reevaluated for each new OS. Right now this mask is valid up
- to Windows 8. The important point here is to test only flags indicating
- capabilities and to ignore flags indicating a specific state of this
- volume. At present these flags to ignore are FILE_VOLUME_IS_COMPRESSED,
- FILE_READ_ONLY_VOLUME, and FILE_SEQUENTIAL_WRITE_ONCE. The additional
- filesystem flags supported since Windows 7 are also ignored for now.
- They add information, but only on W7 and later, and only for filesystems
- also supporting these flags, right now only NTFS. */
-#define GETVOLINFO_VALID_MASK (0x002701ffUL)
-#define TEST_GVI(f,m) (((f) & GETVOLINFO_VALID_MASK) == (m))
-
-/* FIXME: This flag twist is getting awkward. There should really be some
- other method. Maybe we need mount flags to allow the user to fix file
- system problems without having to wait for a Cygwin fix. */
-
-/* Volume quotas are potentially supported since Samba 3.0, object ids and
- the unicode on disk flag since Samba 3.2. */
-#define SAMBA_IGNORE (FILE_VOLUME_QUOTAS \
- | FILE_SUPPORTS_OBJECT_IDS \
- | FILE_UNICODE_ON_DISK)
-#define FS_IS_SAMBA TEST_GVI(flags () & ~SAMBA_IGNORE, \
- FILE_CASE_SENSITIVE_SEARCH \
- | FILE_CASE_PRESERVED_NAMES \
- | FILE_PERSISTENT_ACLS)
-/* Netapp DataOnTap. */
-#define NETAPP_IGNORE (FILE_SUPPORTS_SPARSE_FILES \
- | FILE_PERSISTENT_ACLS)
-#define FS_IS_NETAPP_DATAONTAP TEST_GVI(flags () & ~NETAPP_IGNORE, \
- FILE_CASE_SENSITIVE_SEARCH \
- | FILE_CASE_PRESERVED_NAMES \
- | FILE_UNICODE_ON_DISK \
- | FILE_NAMED_STREAMS)
-/* These are the minimal flags supported by NTFS since Windows 2000. Every
- filesystem not supporting these flags is not a native NTFS. We subsume
- them under the filesystem type "cifs". */
-#define MINIMAL_WIN_NTFS_FLAGS (FILE_CASE_SENSITIVE_SEARCH \
- | FILE_CASE_PRESERVED_NAMES \
- | FILE_UNICODE_ON_DISK \
- | FILE_PERSISTENT_ACLS \
- | FILE_FILE_COMPRESSION \
- | FILE_VOLUME_QUOTAS \
- | FILE_SUPPORTS_SPARSE_FILES \
- | FILE_SUPPORTS_REPARSE_POINTS \
- | FILE_SUPPORTS_OBJECT_IDS \
- | FILE_SUPPORTS_ENCRYPTION \
- | FILE_NAMED_STREAMS)
-#define FS_IS_WINDOWS_NTFS TEST_GVI(flags () & MINIMAL_WIN_NTFS_FLAGS, \
- MINIMAL_WIN_NTFS_FLAGS)
-/* These are the exact flags of a real Windows FAT/FAT32 filesystem.
- Anything else is a filesystem faking to be FAT. */
-#define WIN_FAT_FLAGS (FILE_CASE_PRESERVED_NAMES | FILE_UNICODE_ON_DISK)
-#define FS_IS_WINDOWS_FAT TEST_GVI(flags (), WIN_FAT_FLAGS)
-
- if ((flags () & FILE_SUPPORTS_OBJECT_IDS)
- && NT_SUCCESS (NtQueryVolumeInformationFile (vol, &io, &ffoi,
- sizeof ffoi,
- FileFsObjectIdInformation)))
- {
- smb_extended_info *extended_info = (smb_extended_info *)
- &ffoi.ExtendedInfo;
- if (extended_info->samba_magic == SAMBA_EXTENDED_INFO_MAGIC)
- {
- is_samba (true);
- samba_version (extended_info->samba_version);
- }
- }
- /* First check the remote filesystems claiming to be NTFS. */
- if (!got_fs ()
- && is_ntfs (RtlEqualUnicodeString (&fsname, &ro_u_ntfs, FALSE))
- /* Test for older Samba releases not supporting extended info. */
- && !is_samba (FS_IS_SAMBA)
- /* Netapp inode info is unusable, can't handle trailing dots and
- spaces, has a bug in "move and delete" semantics. */
- && !is_netapp (FS_IS_NETAPP_DATAONTAP))
- /* Any other remote FS faking to be NTFS. */
- is_cifs (!FS_IS_WINDOWS_NTFS);
- /* Then check remote filesystems claiming to be FAT. Except for real
- FAT and Netapp, all of them are subsumed under the "CIFS" filesystem
- type for now. */
- if (!got_fs ()
- && is_fat (RtlEqualUnicodePathPrefix (&fsname, &ro_u_fat, TRUE))
- && !is_netapp (FS_IS_NETAPP_DATAONTAP))
- is_cifs (!FS_IS_WINDOWS_FAT);
- /* Then check remote filesystems honest about their name. */
- if (!got_fs ()
- /* Microsoft NFS needs distinct access methods for metadata. */
- && !is_nfs (RtlEqualUnicodeString (&fsname, &ro_u_nfs, FALSE))
- /* MVFS == Rational ClearCase remote filesystem. Has a couple of
- drawbacks, like not supporting DOS attributes other than R/O
- and stuff like that. */
- && !is_mvfs (RtlEqualUnicodePathPrefix (&fsname, &ro_u_mvfs, FALSE))
- /* NWFS == Novell Netware FS. Broken info class, see below. */
- /* NcFsd == Novell Netware FS via own driver since Windows Vista. */
- && !is_nwfs (RtlEqualUnicodeString (&fsname, &ro_u_nwfs, FALSE))
- && !is_ncfsd (RtlEqualUnicodeString (&fsname, &ro_u_ncfsd, FALSE))
- /* UNIXFS == TotalNet Advanced Server (TAS). Doesn't support
- FileIdBothDirectoryInformation. See below. */
- && !is_unixfs (RtlEqualUnicodeString (&fsname, &ro_u_unixfs, FALSE))
- /* AFSRDRFsd == Andrew File System. Doesn't support DOS attributes.
- Only native symlinks are supported. */
- && !is_afs (RtlEqualUnicodeString (&fsname, &ro_u_afs, FALSE)))
- {
- /* Known remote file system with buggy open calls. Further
- explanation in fhandler.cc (fhandler_disk_file::open_fs). */
- is_sunwnfs (RtlEqualUnicodeString (&fsname, &ro_u_sunwnfs, FALSE));
- has_buggy_open (is_sunwnfs ());
- }
- if (got_fs ())
- {
- /* UNIXFS is known to choke on FileIdBothDirectoryInformation.
- Some other CIFS servers have problems with this call as well.
- Know example: EMC NS-702. We just don't use that info class on
- any remote CIFS. */
- has_buggy_fileid_dirinfo (is_cifs () || is_unixfs ());
- /* NWFS is known to have a broken FileBasicInformation info
- class. It can't be used to fetch information, only to set
- information. Therefore, for NWFS we have to fallback to the
- FileNetworkOpenInformation info class. Unfortunately we can't
- use FileNetworkOpenInformation all the time since that fails on
- other filesystems like NFS.
- UNUSED, but keep in for information purposes. */
- has_buggy_basic_info (is_nwfs ());
- /* Netapp and NWFS/NcFsd are too dumb to allow non-DOS filenames
- containing trailing dots and spaces when accessed from Windows
- clients. We subsume CIFS into this class of filesystems right
- away since at least some of them are not capable either. */
- has_dos_filenames_only (is_netapp () || is_nwfs ()
- || is_ncfsd () || is_cifs ());
- /* Netapp and NWFS don't grok re-opening a file by handle. They
- only support this if the filename is non-null and the handle is
- the handle to a directory. NcFsd IR10 is supposed to be ok. */
- has_buggy_reopen (is_netapp () || is_nwfs ());
- }
- }
- if (!got_fs ()
- && !is_ntfs (RtlEqualUnicodeString (&fsname, &ro_u_ntfs, FALSE))
- && !is_fat (RtlEqualUnicodePathPrefix (&fsname, &ro_u_fat, TRUE))
- && !is_refs (RtlEqualUnicodeString (&fsname, &ro_u_refs, FALSE))
- && !is_csc_cache (RtlEqualUnicodeString (&fsname, &ro_u_csc, FALSE))
- && is_cdrom (ffdi.DeviceType == FILE_DEVICE_CD_ROM))
- is_udf (RtlEqualUnicodeString (&fsname, &ro_u_udf, FALSE));
- if (!got_fs ())
- {
- /* The filesystem name is only used in fillout_mntent and only if
- the filesystem isn't one of the well-known filesystems anyway. */
- sys_wcstombs (fsn, sizeof fsn, ffai_buf.ffai.FileSystemName,
- ffai_buf.ffai.FileSystemNameLength / sizeof (WCHAR));
- strlwr (fsn);
- }
- has_acls (flags () & FS_PERSISTENT_ACLS);
- /* Netapp inode numbers are fly-by-night. */
- hasgood_inode ((has_acls () && !is_netapp ()) || is_nfs ());
- /* Case sensitivity is supported if FILE_CASE_SENSITIVE_SEARCH is set,
- except on Samba which handles Windows clients case insensitive.
-
- NFS doesn't set the FILE_CASE_SENSITIVE_SEARCH flag but is case
- sensitive.
-
- UDF on NT 5.x is broken (at least) in terms of case sensitivity.
- The UDF driver reports the FILE_CASE_SENSITIVE_SEARCH capability
- but:
- - Opening the root directory for query seems to work at first,
- but the filenames in the directory listing are mutilated.
- - When trying to open a file or directory case sensitive, the file
- appears to be non-existant. */
- caseinsensitive (((!(flags () & FILE_CASE_SENSITIVE_SEARCH) || is_samba ())
- && !is_nfs ())
- || (is_udf () && wincap.has_broken_udf ()));
-
- if (!in_vol)
- NtClose (vol);
- fsi_cache.add (hash, this);
- return true;
-}
-
-inline void
-mount_info::create_root_entry (const PWCHAR root)
-{
- /* Create a default root dir derived from the location of the Cygwin DLL.
- The entry is immutable, unless the "override" option is given in /etc/fstab. */
- char native_root[PATH_MAX];
- sys_wcstombs (native_root, PATH_MAX, root);
- assert (*native_root != '\0');
- if (add_item (native_root, "/",
- MOUNT_SYSTEM | MOUNT_BINARY | MOUNT_IMMUTABLE | MOUNT_AUTOMATIC)
- < 0)
- api_fatal ("add_item (\"%s\", \"/\", ...) failed, errno %d", native_root, errno);
- /* Create a default cygdrive entry. Note that this is a user entry.
- This allows to override it with mount, unless the sysadmin created
- a cygdrive entry in /etc/fstab. */
- cygdrive_flags = MOUNT_BINARY | MOUNT_NOPOSIX | MOUNT_CYGDRIVE;
- strcpy (cygdrive, CYGWIN_INFO_CYGDRIVE_DEFAULT_PREFIX "/");
- cygdrive_len = strlen (cygdrive);
-}
-
-/* init: Initialize the mount table. */
-
-void
-mount_info::init (bool user_init)
-{
- PWCHAR pathend;
- WCHAR path[PATH_MAX];
-
- pathend = wcpcpy (path, cygheap->installation_root);
- if (!user_init)
- create_root_entry (path);
-
- pathend = wcpcpy (pathend, L"\\etc\\fstab");
- from_fstab (user_init, path, pathend);
-
- if (!user_init && (!got_usr_bin || !got_usr_lib))
- {
- char native[PATH_MAX];
- if (root_idx < 0)
- api_fatal ("root_idx %d, user_shared magic %y, nmounts %d", root_idx, user_shared->version, nmounts);
- char *p = stpcpy (native, mount[root_idx].native_path);
- if (!got_usr_bin)
- {
- stpcpy (p, "\\bin");
- add_item (native, "/usr/bin",
- MOUNT_SYSTEM | MOUNT_BINARY | MOUNT_AUTOMATIC);
- }
- if (!got_usr_lib)
- {
- stpcpy (p, "\\lib");
- add_item (native, "/usr/lib",
- MOUNT_SYSTEM | MOUNT_BINARY | MOUNT_AUTOMATIC);
- }
- }
-}
-
-static void
-set_flags (unsigned *flags, unsigned val)
-{
- *flags = val;
- if (!(*flags & PATH_BINARY))
- {
- *flags |= PATH_TEXT;
- debug_printf ("flags: text (%y)", *flags & (PATH_TEXT | PATH_BINARY));
- }
- else
- {
- *flags |= PATH_BINARY;
- debug_printf ("flags: binary (%y)", *flags & (PATH_TEXT | PATH_BINARY));
- }
-}
-
-int
-mount_item::build_win32 (char *dst, const char *src, unsigned *outflags, unsigned chroot_pathlen)
-{
- int n, err = 0;
- const char *real_native_path;
- int real_posix_pathlen;
- set_flags (outflags, (unsigned) flags);
- if (!cygheap->root.exists () || posix_pathlen != 1 || posix_path[0] != '/')
- {
- n = native_pathlen;
- real_native_path = native_path;
- real_posix_pathlen = chroot_pathlen ?: posix_pathlen;
- }
- else
- {
- n = cygheap->root.native_length ();
- real_native_path = cygheap->root.native_path ();
- real_posix_pathlen = posix_pathlen;
- }
- memcpy (dst, real_native_path, n + 1);
- const char *p = src + real_posix_pathlen;
- if (*p == '/')
- /* nothing */;
- else if ((isdrive (dst) && !dst[2]) || *p)
- dst[n++] = '\\';
- if ((n + strlen (p)) >= NT_MAX_PATH)
- err = ENAMETOOLONG;
- else
- backslashify (p, dst + n, 0);
- return err;
-}
-
-/* conv_to_win32_path: Ensure src_path is a pure Win32 path and store
- the result in win32_path.
-
- If win32_path != NULL, the relative path, if possible to keep, is
- stored in win32_path. If the relative path isn't possible to keep,
- the full path is stored.
-
- If full_win32_path != NULL, the full path is stored there.
-
- The result is zero for success, or an errno value.
-
- {,full_}win32_path must have sufficient space (i.e. NT_MAX_PATH bytes). */
-
-int
-mount_info::conv_to_win32_path (const char *src_path, char *dst, device& dev,
- unsigned *flags)
-{
- bool chroot_ok = !cygheap->root.exists ();
-
- MALLOC_CHECK;
-
- dev = FH_FS;
-
- *flags = 0;
- debug_printf ("conv_to_win32_path (%s)", src_path);
-
- int i, rc;
- mount_item *mi = NULL; /* initialized to avoid compiler warning */
-
- /* The path is already normalized, without ../../ stuff, we need to have this
- so that we can move from one mounted directory to another with relative
- stuff.
-
- eg mounting c:/foo /foo
- d:/bar /bar
-
- cd /bar
- ls ../foo
-
- should look in c:/foo, not d:/foo.
-
- converting normalizex UNIX path to a DOS-style path, looking up the
- appropriate drive in the mount table. */
-
- /* See if this is a cygwin "device" */
- if (win32_device_name (src_path, dst, dev))
- {
- *flags = MOUNT_BINARY; /* FIXME: Is this a sensible default for devices? */
- rc = 0;
- goto out_no_chroot_check;
- }
-
- MALLOC_CHECK;
- /* If the path is on a network drive or a //./ resp. //?/ path prefix,
- bypass the mount table. If it's // or //MACHINE, use the netdrive
- device. */
- if (src_path[1] == '/')
- {
- if (!strchr (src_path + 2, '/'))
- {
- dev = *netdrive_dev;
- set_flags (flags, PATH_BINARY);
- }
- else
- {
- /* For UNC paths, use the cygdrive prefix flags as default setting.
- This is more natural since UNC paths, just like cygdrive paths,
- are rather (warning, poetic description ahead) windows into the
- native Win32 world. This also gives the user an elegant way to
- change the settings for those paths in a central place. */
- set_flags (flags, (unsigned) cygdrive_flags);
- }
- backslashify (src_path, dst, 0);
- /* Go through chroot check */
- goto out;
- }
- if (isproc (src_path))
- {
- dev = *proc_dev;
- dev = fhandler_proc::get_proc_fhandler (src_path);
- if (dev == FH_NADA)
- return ENOENT;
- set_flags (flags, PATH_BINARY);
- if (isprocsys_dev (dev))
- {
- if (src_path[procsys_len])
- backslashify (src_path + procsys_len, dst, 0);
- else /* Avoid empty NT path. */
- stpcpy (dst, "\\");
- set_flags (flags, (unsigned) cygdrive_flags);
- }
- else
- strcpy (dst, src_path);
- goto out;
- }
- /* Check if the cygdrive prefix was specified. If so, just strip
- off the prefix and transform it into an MS-DOS path. */
- else if (iscygdrive (src_path))
- {
- int n = mount_table->cygdrive_len - 1;
- int unit;
-
- if (!src_path[n])
- {
- dst[0] = '\0';
- if (mount_table->cygdrive_len > 1)
- dev = *cygdrive_dev;
- }
- else if (cygdrive_win32_path (src_path, dst, unit))
- {
- set_flags (flags, (unsigned) cygdrive_flags);
- goto out;
- }
- else if (mount_table->cygdrive_len > 1)
- return ENOENT;
- }
-
- int chroot_pathlen;
- chroot_pathlen = 0;
- /* Check the mount table for prefix matches. */
- for (i = 0; i < nmounts; i++)
- {
- const char *path;
- int len;
-
- mi = mount + posix_sorted[i];
- if (!cygheap->root.exists ()
- || (mi->posix_pathlen == 1 && mi->posix_path[0] == '/'))
- {
- path = mi->posix_path;
- len = mi->posix_pathlen;
- }
- else if (cygheap->root.posix_ok (mi->posix_path))
- {
- path = cygheap->root.unchroot (mi->posix_path);
- chroot_pathlen = len = strlen (path);
- }
- else
- {
- chroot_pathlen = 0;
- continue;
- }
-
- if (path_prefix_p (path, src_path, len, mi->flags & MOUNT_NOPOSIX))
- break;
- }
-
- if (i < nmounts)
- {
- int err = mi->build_win32 (dst, src_path, flags, chroot_pathlen);
- if (err)
- return err;
- chroot_ok = true;
- }
- else
- {
- int offset = 0;
- if (src_path[1] != '/' && src_path[1] != ':')
- offset = cygheap->cwd.get_drive (dst);
- backslashify (src_path, dst + offset, 0);
- }
- out:
- MALLOC_CHECK;
- if (chroot_ok || cygheap->root.ischroot_native (dst))
- rc = 0;
- else
- {
- debug_printf ("attempt to access outside of chroot '%s - %s'",
- cygheap->root.posix_path (), cygheap->root.native_path ());
- rc = ENOENT;
- }
-
- out_no_chroot_check:
- debug_printf ("src_path %s, dst %s, flags %y, rc %d", src_path, dst, *flags, rc);
- return rc;
-}
-
-int
-mount_info::get_mounts_here (const char *parent_dir, int parent_dir_len,
- PUNICODE_STRING mount_points,
- PUNICODE_STRING cygd)
-{
- int n_mounts = 0;
-
- for (int i = 0; i < nmounts; i++)
- {
- mount_item *mi = mount + posix_sorted[i];
- char *last_slash = strrchr (mi->posix_path, '/');
- if (!last_slash)
- continue;
- if (last_slash == mi->posix_path)
- {
- if (parent_dir_len == 1 && mi->posix_pathlen > 1)
- RtlCreateUnicodeStringFromAsciiz (&mount_points[n_mounts++],
- last_slash + 1);
- }
- else if (parent_dir_len == last_slash - mi->posix_path
- && strncasematch (parent_dir, mi->posix_path, parent_dir_len))
- RtlCreateUnicodeStringFromAsciiz (&mount_points[n_mounts++],
- last_slash + 1);
- }
- RtlCreateUnicodeStringFromAsciiz (cygd, cygdrive + 1);
- if (cygd->Length)
- cygd->Length -= 2; // Strip trailing slash
- return n_mounts;
-}
-
-/* cygdrive_posix_path: Build POSIX path used as the
- mount point for cygdrives created when there is no other way to
- obtain a POSIX path from a Win32 one. */
-
-void
-mount_info::cygdrive_posix_path (const char *src, char *dst, int trailing_slash_p)
-{
- int len = cygdrive_len;
-
- memcpy (dst, cygdrive, len + 1);
-
- /* Now finish the path off with the drive letter to be used.
- The cygdrive prefix always ends with a trailing slash so
- the drive letter is added after the path. */
- dst[len++] = cyg_tolower (src[0]);
- if (!src[2] || (isdirsep (src[2]) && !src[3]))
- dst[len++] = '\000';
- else
- {
- int n;
- dst[len++] = '/';
- if (isdirsep (src[2]))
- n = 3;
- else
- n = 2;
- strcpy (dst + len, src + n);
- }
- slashify (dst, dst, trailing_slash_p);
-}
-
-int
-mount_info::cygdrive_win32_path (const char *src, char *dst, int& unit)
-{
- int res;
- const char *p = src + cygdrive_len;
- if (!isalpha (*p) || (!isdirsep (p[1]) && p[1]))
- {
- unit = -1; /* FIXME: should be zero, maybe? */
- dst[0] = '\0';
- res = 0;
- }
- else
- {
- /* drive letter must always be uppercase for casesensitive native NT. */
- dst[0] = cyg_toupper (*p);
- dst[1] = ':';
- strcpy (dst + 2, p + 1);
- backslashify (dst, dst, !dst[2]);
- unit = dst[0];
- res = 1;
- }
- debug_printf ("src '%s', dst '%s'", src, dst);
- return res;
-}
-
-/* conv_to_posix_path: Ensure src_path is a POSIX path.
-
- The result is zero for success, or an errno value.
- posix_path must have sufficient space (i.e. NT_MAX_PATH bytes).
- If keep_rel_p is non-zero, relative paths stay that way. */
-
-/* TODO: Change conv_to_posix_path to work with native paths. */
-
-/* src_path is a wide Win32 path. */
-int
-mount_info::conv_to_posix_path (PWCHAR src_path, char *posix_path,
- int keep_rel_p)
-{
- bool changed = false;
- if (!wcsncmp (src_path, L"\\\\?\\", 4))
- {
- src_path += 4;
- if (src_path[1] != L':') /* native UNC path */
- {
- *(src_path += 2) = L'\\';
- changed = true;
- }
- }
- tmp_pathbuf tp;
- char *buf = tp.c_get ();
- sys_wcstombs (buf, NT_MAX_PATH, src_path);
- int ret = conv_to_posix_path (buf, posix_path, keep_rel_p);
- if (changed)
- src_path[0] = L'C';
- return ret;
-}
-
-int
-mount_info::conv_to_posix_path (const char *src_path, char *posix_path,
- int keep_rel_p)
-{
- int src_path_len = strlen (src_path);
- int relative_path_p = !isabspath (src_path);
- int trailing_slash_p;
-
- if (src_path_len <= 1)
- trailing_slash_p = 0;
- else
- {
- const char *lastchar = src_path + src_path_len - 1;
- trailing_slash_p = isdirsep (*lastchar) && lastchar[-1] != ':';
- }
-
- debug_printf ("conv_to_posix_path (%s, %s, %s)", src_path,
- keep_rel_p ? "keep-rel" : "no-keep-rel",
- trailing_slash_p ? "add-slash" : "no-add-slash");
- MALLOC_CHECK;
-
- if (src_path_len >= NT_MAX_PATH)
- {
- debug_printf ("ENAMETOOLONG");
- return ENAMETOOLONG;
- }
-
- /* FIXME: For now, if the path is relative and it's supposed to stay
- that way, skip mount table processing. */
-
- if (keep_rel_p && relative_path_p)
- {
- slashify (src_path, posix_path, 0);
- debug_printf ("%s = conv_to_posix_path (%s)", posix_path, src_path);
- return 0;
- }
-
- tmp_pathbuf tp;
- char *pathbuf = tp.c_get ();
- char *tail;
- int rc = normalize_win32_path (src_path, pathbuf, tail);
- if (rc != 0)
- {
- debug_printf ("%d = conv_to_posix_path(%s)", rc, src_path);
- return rc;
- }
-
- int pathbuflen = tail - pathbuf;
- for (int i = 0; i < nmounts; ++i)
- {
- mount_item &mi = mount[native_sorted[i]];
- if (!path_prefix_p (mi.native_path, pathbuf, mi.native_pathlen,
- mi.flags & MOUNT_NOPOSIX))
- continue;
-
- if (cygheap->root.exists () && !cygheap->root.posix_ok (mi.posix_path))
- continue;
-
- /* SRC_PATH is in the mount table. */
- int nextchar;
- const char *p = pathbuf + mi.native_pathlen;
-
- if (!*p || !p[1])
- nextchar = 0;
- else if (isdirsep (*p))
- nextchar = -1;
- else
- nextchar = 1;
-
- int addslash = nextchar > 0 ? 1 : 0;
- if ((mi.posix_pathlen + (pathbuflen - mi.native_pathlen) + addslash) >= NT_MAX_PATH)
- return ENAMETOOLONG;
- strcpy (posix_path, mi.posix_path);
- if (addslash)
- strcat (posix_path, "/");
- if (nextchar)
- slashify (p,
- posix_path + addslash + (mi.posix_pathlen == 1 ? 0 : mi.posix_pathlen),
- trailing_slash_p);
-
- if (cygheap->root.exists ())
- {
- const char *p = cygheap->root.unchroot (posix_path);
- memmove (posix_path, p, strlen (p) + 1);
- }
- goto out;
- }
-
- if (!cygheap->root.exists ())
- /* nothing */;
- else if (!cygheap->root.ischroot_native (pathbuf))
- return ENOENT;
- else
- {
- const char *p = pathbuf + cygheap->root.native_length ();
- if (*p)
- slashify (p, posix_path, trailing_slash_p);
- else
- {
- posix_path[0] = '/';
- posix_path[1] = '\0';
- }
- goto out;
- }
-
- /* Not in the database. This should [theoretically] only happen if either
- the path begins with //, or / isn't mounted, or the path has a drive
- letter not covered by the mount table. If it's a relative path then the
- caller must want an absolute path (otherwise we would have returned
- above). So we always return an absolute path at this point. */
- if (isdrive (pathbuf))
- cygdrive_posix_path (pathbuf, posix_path, trailing_slash_p);
- else
- {
- /* The use of src_path and not pathbuf here is intentional.
- We couldn't translate the path, so just ensure no \'s are present. */
- slashify (src_path, posix_path, trailing_slash_p);
- }
-
-out:
- debug_printf ("%s = conv_to_posix_path (%s)", posix_path, src_path);
- MALLOC_CHECK;
- return 0;
-}
-
-/* Return flags associated with a mount point given the win32 path. */
-
-unsigned
-mount_info::set_flags_from_win32_path (const char *p)
-{
- for (int i = 0; i < nmounts; i++)
- {
- mount_item &mi = mount[native_sorted[i]];
- if (path_prefix_p (mi.native_path, p, mi.native_pathlen,
- mi.flags & MOUNT_NOPOSIX))
- return mi.flags;
- }
- return PATH_BINARY;
-}
-
-inline char *
-skip_ws (char *in)
-{
- while (*in == ' ' || *in == '\t')
- ++in;
- return in;
-}
-
-inline char *
-find_ws (char *in)
-{
- while (*in && *in != ' ' && *in != '\t')
- ++in;
- return in;
-}
-
-inline char *
-conv_fstab_spaces (char *field)
-{
- register char *sp = field;
- while ((sp = strstr (sp, "\\040")) != NULL)
- {
- *sp++ = ' ';
- memmove (sp, sp + 3, strlen (sp + 3) + 1);
- }
- return field;
-}
-
-struct opt
-{
- const char *name;
- unsigned val;
- bool clear;
-} oopts[] =
-{
- {"acl", MOUNT_NOACL, 1},
- {"auto", 0, 0},
- {"binary", MOUNT_BINARY, 0},
- {"bind", MOUNT_BIND, 0},
- {"cygexec", MOUNT_CYGWIN_EXEC, 0},
- {"dos", MOUNT_DOS, 0},
- {"exec", MOUNT_EXEC, 0},
- {"ihash", MOUNT_IHASH, 0},
- {"noacl", MOUNT_NOACL, 0},
- {"nosuid", 0, 0},
- {"notexec", MOUNT_NOTEXEC, 0},
- {"nouser", MOUNT_SYSTEM, 0},
- {"override", MOUNT_OVERRIDE, 0},
- {"posix=0", MOUNT_NOPOSIX, 0},
- {"posix=1", MOUNT_NOPOSIX, 1},
- {"sparse", MOUNT_SPARSE, 0},
- {"text", MOUNT_BINARY, 1},
- {"user", MOUNT_SYSTEM, 1}
-};
-
-static int
-compare_flags (const void *a, const void *b)
-{
- const opt *oa = (const opt *) a;
- const opt *ob = (const opt *) b;
-
- return strcmp (oa->name, ob->name);
-}
-
-extern "C" bool
-fstab_read_flags (char **options, unsigned &flags, bool external)
-{
- opt key;
-
- while (**options)
- {
- char *p = strchr (*options, ',');
- if (p)
- *p++ = '\0';
- else
- p = strchr (*options, '\0');
-
- key.name = *options;
- opt *o = (opt *) bsearch (&key, oopts,
- sizeof oopts / sizeof (opt),
- sizeof (opt), compare_flags);
- if (!o)
- {
- if (!external)
- system_printf ("invalid fstab option - '%s'", *options);
- return false;
- }
- if (o->clear)
- flags &= ~o->val;
- else
- flags |= o->val;
- *options = p;
- }
- return true;
-}
-
-extern "C" char *
-fstab_list_flags ()
-{
- size_t len = 0;
- opt *o;
-
- for (o = oopts; o < (oopts + (sizeof (oopts) / sizeof (oopts[0]))); o++)
- len += strlen (o->name) + 1;
- char *buf = (char *) malloc (len);
- if (buf)
- {
- char *bp = buf;
- for (o = oopts; o < (oopts + (sizeof (oopts) / sizeof (oopts[0]))); o++)
- {
- bp = stpcpy (bp, o->name);
- *bp++ = ',';
- }
- *--bp = '\0';
- }
- return buf;
-}
-
-bool
-mount_info::from_fstab_line (char *line, bool user)
-{
- char *native_path, *posix_path, *fs_type;
-
- /* First field: Native path. */
- char *c = skip_ws (line);
- if (!*c || *c == '#')
- return true;
- char *cend = find_ws (c);
- *cend = '\0';
- native_path = conv_fstab_spaces (c);
- /* Always convert drive letter to uppercase for case sensitivity. */
- if (isdrive (native_path))
- native_path[0] = cyg_toupper (native_path[0]);
- /* Second field: POSIX path. */
- c = skip_ws (cend + 1);
- if (!*c)
- return true;
- cend = find_ws (c);
- *cend = '\0';
- posix_path = conv_fstab_spaces (c);
- /* Third field: FS type. */
- c = skip_ws (cend + 1);
- if (!*c)
- return true;
- cend = find_ws (c);
- *cend = '\0';
- fs_type = c;
- /* Forth field: Flags. */
- c = skip_ws (cend + 1);
- if (!*c)
- return true;
- cend = find_ws (c);
- *cend = '\0';
- unsigned mount_flags = MOUNT_SYSTEM | MOUNT_BINARY;
- if (!strcmp (fs_type, "cygdrive"))
- mount_flags |= MOUNT_NOPOSIX;
- if (!fstab_read_flags (&c, mount_flags, false))
- return true;
- if (mount_flags & MOUNT_BIND)
- {
- /* Prepend root path to bound path. */
- char *bound_path = native_path;
- device dev;
- unsigned flags = 0;
- native_path = (char *) alloca (PATH_MAX);
- int error = conv_to_win32_path (bound_path, native_path, dev, &flags);
- if (error || strlen (native_path) >= MAX_PATH)
- return true;
- if ((mount_flags & ~MOUNT_SYSTEM) == (MOUNT_BIND | MOUNT_BINARY))
- mount_flags = (MOUNT_BIND | flags)
- & ~(MOUNT_IMMUTABLE | MOUNT_AUTOMATIC);
- }
- if (user)
- mount_flags &= ~MOUNT_SYSTEM;
- if (!strcmp (fs_type, "cygdrive"))
- {
- cygdrive_flags = mount_flags | MOUNT_CYGDRIVE;
- slashify (posix_path, cygdrive, 1);
- cygdrive_len = strlen (cygdrive);
- }
- else
- {
- int res = mount_table->add_item (native_path, posix_path, mount_flags);
- if (res && get_errno () == EMFILE)
- return false;
- }
- return true;
-}
-
-bool
-mount_info::from_fstab (bool user, WCHAR fstab[], PWCHAR fstab_end)
-{
- UNICODE_STRING upath;
- OBJECT_ATTRIBUTES attr;
- NT_readline rl;
- tmp_pathbuf tp;
- char *buf = tp.c_get ();
-
- if (user)
- {
- PWCHAR username;
- sys_mbstowcs (username = wcpcpy (fstab_end, L".d\\"),
- NT_MAX_PATH - (fstab_end - fstab),
- cygheap->user.name ());
- /* Make sure special chars in the username are converted according to
- the rules. */
- transform_chars (username, username + wcslen (username) - 1);
- }
- RtlInitUnicodeString (&upath, fstab);
- InitializeObjectAttributes (&attr, &upath, OBJ_CASE_INSENSITIVE, NULL, NULL);
- debug_printf ("Try to read mounts from %W", fstab);
- if (rl.init (&attr, buf, NT_MAX_PATH))
- while ((buf = rl.gets ()))
- if (!from_fstab_line (buf, user))
- break;
- return true;
-}
-
-/* write_cygdrive_info: Store default prefix and flags
- to use when creating cygdrives to the special user shared mem
- location used to store cygdrive information. */
-
-int
-mount_info::write_cygdrive_info (const char *cygdrive_prefix, unsigned flags)
-{
- /* Verify cygdrive prefix starts with a forward slash and if there's
- another character, it's not a slash. */
- if ((cygdrive_prefix == NULL) || (*cygdrive_prefix == 0) ||
- (!isslash (cygdrive_prefix[0])) ||
- ((cygdrive_prefix[1] != '\0') && (isslash (cygdrive_prefix[1]))))
- {
- set_errno (EINVAL);
- return -1;
- }
- /* Don't allow overriding of a system cygdrive prefix. */
- if (cygdrive_flags & MOUNT_SYSTEM)
- {
- set_errno (EPERM);
- return -1;
- }
-
- slashify (cygdrive_prefix, cygdrive, 1);
- cygdrive_flags = flags & ~MOUNT_SYSTEM;
- cygdrive_len = strlen (cygdrive);
-
- return 0;
-}
-
-int
-mount_info::get_cygdrive_info (char *user, char *system, char *user_flags,
- char *system_flags)
-{
- if (user)
- *user = '\0';
- if (system)
- *system = '\0';
- if (user_flags)
- *user_flags = '\0';
- if (system_flags)
- *system_flags = '\0';
-
- char *path = (cygdrive_flags & MOUNT_SYSTEM) ? system : user;
- char *flags = (cygdrive_flags & MOUNT_SYSTEM) ? system_flags : user_flags;
-
- if (path)
- {
- strcpy (path, cygdrive);
- /* Strip trailing slash for backward compatibility. */
- if (cygdrive_len > 2)
- path[cygdrive_len - 1] = '\0';
- }
- if (flags)
- strcpy (flags, (cygdrive_flags & MOUNT_BINARY) ? "binmode" : "textmode");
- return 0;
-}
-
-static mount_item *mounts_for_sort;
-
-/* sort_by_posix_name: qsort callback to sort the mount entries. Sort
- user mounts ahead of system mounts to the same POSIX path. */
-/* FIXME: should the user should be able to choose whether to
- prefer user or system mounts??? */
-static int
-sort_by_posix_name (const void *a, const void *b)
-{
- mount_item *ap = mounts_for_sort + (*((int*) a));
- mount_item *bp = mounts_for_sort + (*((int*) b));
-
- /* Base weighting on longest posix path first so that the most
- obvious path will be chosen. */
- size_t alen = strlen (ap->posix_path);
- size_t blen = strlen (bp->posix_path);
-
- int res = blen - alen;
-
- if (res)
- return res; /* Path lengths differed */
-
- /* The two paths were the same length, so just determine normal
- lexical sorted order. */
- res = strcmp (ap->posix_path, bp->posix_path);
-
- if (res == 0)
- {
- /* need to select between user and system mount to same POSIX path */
- if (!(bp->flags & MOUNT_SYSTEM)) /* user mount */
- return 1;
- else
- return -1;
- }
-
- return res;
-}
-
-/* sort_by_native_name: qsort callback to sort the mount entries. Sort
- user mounts ahead of system mounts to the same POSIX path. */
-/* FIXME: should the user should be able to choose whether to
- prefer user or system mounts??? */
-static int
-sort_by_native_name (const void *a, const void *b)
-{
- mount_item *ap = mounts_for_sort + (*((int*) a));
- mount_item *bp = mounts_for_sort + (*((int*) b));
-
- /* Base weighting on longest win32 path first so that the most
- obvious path will be chosen. */
- size_t alen = strlen (ap->native_path);
- size_t blen = strlen (bp->native_path);
-
- int res = blen - alen;
-
- if (res)
- return res; /* Path lengths differed */
-
- /* The two paths were the same length, so just determine normal
- lexical sorted order. */
- res = strcmp (ap->native_path, bp->native_path);
-
- if (res == 0)
- {
- /* need to select between user and system mount to same POSIX path */
- if (!(bp->flags & MOUNT_SYSTEM)) /* user mount */
- return 1;
- else
- return -1;
- }
-
- return res;
-}
-
-void
-mount_info::sort ()
-{
- for (int i = 0; i < nmounts; i++)
- native_sorted[i] = posix_sorted[i] = i;
- /* Sort them into reverse length order, otherwise we won't
- be able to look for /foo in /. */
- mounts_for_sort = mount; /* ouch. */
- qsort (posix_sorted, nmounts, sizeof (posix_sorted[0]), sort_by_posix_name);
- qsort (native_sorted, nmounts, sizeof (native_sorted[0]), sort_by_native_name);
-}
-
-/* Add an entry to the mount table.
- Returns 0 on success, -1 on failure and errno is set.
-
- This is where all argument validation is done. It may not make sense to
- do this when called internally, but it's cleaner to keep it all here. */
-
-int
-mount_info::add_item (const char *native, const char *posix,
- unsigned mountflags)
-{
- tmp_pathbuf tp;
- char *nativetmp = tp.c_get ();
- /* FIXME: The POSIX path is stored as value name right now, which is
- restricted to 256 bytes. */
- char posixtmp[CYG_MAX_PATH];
- char *nativetail, *posixtail, error[] = "error";
- int nativeerr, posixerr;
-
- /* Something's wrong if either path is NULL or empty, or if it's
- not a UNC or absolute path. */
-
- if (native == NULL || !isabspath (native) ||
- !(is_native_path (native) || is_unc_share (native) || isdrive (native)))
- nativeerr = EINVAL;
- else
- nativeerr = normalize_win32_path (native, nativetmp, nativetail);
-
- if (posix == NULL || !isabspath (posix) ||
- is_unc_share (posix) || isdrive (posix))
- posixerr = EINVAL;
- else
- posixerr = normalize_posix_path (posix, posixtmp, posixtail);
-
- debug_printf ("%s[%s], %s[%s], %y",
- native, nativeerr ? error : nativetmp,
- posix, posixerr ? error : posixtmp, mountflags);
-
- if (nativeerr || posixerr)
- {
- set_errno (nativeerr ?: posixerr);
- return -1;
- }
-
- /* Make sure both paths do not end in /. */
- if (nativetail > nativetmp + 1 && nativetail[-1] == '\\')
- nativetail[-1] = '\0';
- if (posixtail > posixtmp + 1 && posixtail[-1] == '/')
- posixtail[-1] = '\0';
-
- /* Write over an existing mount item with the same POSIX path if
- it exists and is from the same registry area. */
- int i;
- for (i = 0; i < nmounts; i++)
- {
- if (!strcmp (mount[i].posix_path, posixtmp))
- {
- /* Don't allow overriding of a system mount with a user mount. */
- if ((mount[i].flags & MOUNT_SYSTEM) && !(mountflags & MOUNT_SYSTEM))
- {
- set_errno (EPERM);
- return -1;
- }
- if ((mount[i].flags & MOUNT_SYSTEM) != (mountflags & MOUNT_SYSTEM))
- continue;
- else if (!(mount[i].flags & MOUNT_IMMUTABLE))
- break;
- else if (mountflags & MOUNT_OVERRIDE)
- {
- mountflags |= MOUNT_IMMUTABLE;
- break;
- }
- else
- {
- set_errno (EPERM);
- return -1;
- }
- }
- }
-
- if (i == nmounts && nmounts == MAX_MOUNTS)
- {
- set_errno (EMFILE);
- return -1;
- }
-
- if (i == nmounts)
- nmounts++;
-
- if (strcmp (posixtmp, "/usr/bin") == 0)
- got_usr_bin = true;
-
- if (strcmp (posixtmp, "/usr/lib") == 0)
- got_usr_lib = true;
-
- if (posixtmp[0] == '/' && posixtmp[1] == '\0' && !(mountflags & MOUNT_CYGDRIVE))
- root_idx = i;
-
- mount[i].init (nativetmp, posixtmp, mountflags);
- sort ();
-
- return 0;
-}
-
-/* Delete a mount table entry where path is either a Win32 or POSIX
- path. Since the mount table is really just a table of aliases,
- deleting / is ok (although running without a slash mount is
- strongly discouraged because some programs may run erratically
- without one). If MOUNT_SYSTEM is set in flags, remove from system
- registry, otherwise remove the user registry mount.
-*/
-
-int
-mount_info::del_item (const char *path, unsigned flags)
-{
- tmp_pathbuf tp;
- char *pathtmp = tp.c_get ();
- int posix_path_p = false;
-
- /* Something's wrong if path is NULL or empty. */
- if (path == NULL || *path == 0 || !isabspath (path))
- {
- set_errno (EINVAL);
- return -1;
- }
-
- if (is_unc_share (path) || strpbrk (path, ":\\"))
- backslashify (path, pathtmp, 0);
- else
- {
- slashify (path, pathtmp, 0);
- posix_path_p = true;
- }
- nofinalslash (pathtmp, pathtmp);
-
- for (int i = 0; i < nmounts; i++)
- {
- int ent = native_sorted[i]; /* in the same order as getmntent() */
- if (((posix_path_p)
- ? !strcmp (mount[ent].posix_path, pathtmp)
- : strcasematch (mount[ent].native_path, pathtmp)))
- {
- /* Don't allow removal of a system mount. */
- if (mount[ent].flags & MOUNT_SYSTEM)
- {
- set_errno (EPERM);
- return -1;
- }
- nmounts--; /* One less mount table entry */
- /* Fill in the hole if not at the end of the table */
- if (ent < nmounts)
- memmove (mount + ent, mount + ent + 1,
- sizeof (mount[ent]) * (nmounts - ent));
- sort (); /* Resort the table */
- return 0;
- }
- }
- set_errno (EINVAL);
- return -1;
-}
-
-/************************* mount_item class ****************************/
-
-/* Don't add new fs types without adding them to fs_info_type in mount.h!
- Don't reorder without reordering fs_info_type in mount.h!*/
-fs_names_t fs_names[] = {
- { "none", false },
- { "vfat", true },
- { "ntfs", true },
- { "refs", true },
- { "smbfs", false },
- { "nfs", false },
- { "netapp", false },
- { "iso9660", true },
- { "udf", true },
- { "csc-cache", false },
- { "sunwnfs", false },
- { "unixfs", false },
- { "mvfs", false },
- { "cifs", false },
- { "nwfs", false },
- { "ncfsd", false },
- { "afs", false },
- { NULL, false }
-};
-
-static mntent *
-fillout_mntent (const char *native_path, const char *posix_path, unsigned flags)
-{
- struct mntent& ret=_my_tls.locals.mntbuf;
- bool append_bs = false;
-
- /* Remove drivenum from list if we see a x: style path */
- if (strlen (native_path) == 2 && native_path[1] == ':')
- {
- int drivenum = cyg_tolower (native_path[0]) - 'a';
- if (drivenum >= 0 && drivenum <= 31)
- _my_tls.locals.available_drives &= ~(1 << drivenum);
- append_bs = true;
- }
-
- /* Pass back pointers to mount_table strings reserved for use by
- getmntent rather than pointers to strings in the internal mount
- table because the mount table might change, causing weird effects
- from the getmntent user's point of view. */
-
- ret.mnt_fsname = _my_tls.locals.mnt_fsname;
- strcpy (_my_tls.locals.mnt_dir, posix_path);
- ret.mnt_dir = _my_tls.locals.mnt_dir;
-
- /* Try to give a filesystem type that matches what a Linux application might
- expect. Naturally, this is a moving target, but we can make some
- reasonable guesses for popular types. */
-
- fs_info mntinfo;
- tmp_pathbuf tp;
- UNICODE_STRING unat;
- tp.u_get (&unat);
- get_nt_native_path (native_path, unat, false);
- if (append_bs)
- RtlAppendUnicodeToString (&unat, L"\\");
- mntinfo.update (&unat, NULL);
-
- if (mntinfo.what_fs () > none && mntinfo.what_fs () < max_fs_type)
- strcpy (_my_tls.locals.mnt_type, fs_names[mntinfo.what_fs ()].name);
- else
- strcpy (_my_tls.locals.mnt_type, mntinfo.fsname ());
-
- ret.mnt_type = _my_tls.locals.mnt_type;
-
- slashify (native_path, _my_tls.locals.mnt_fsname, false);
-
- /* mnt_opts is a string that details mount params such as
- binary or textmode, or exec. We don't print
- `silent' here; it's a magic internal thing. */
-
- if (!(flags & MOUNT_BINARY))
- strcpy (_my_tls.locals.mnt_opts, (char *) "text");
- else
- strcpy (_my_tls.locals.mnt_opts, (char *) "binary");
-
- if (flags & MOUNT_CYGWIN_EXEC)
- strcat (_my_tls.locals.mnt_opts, (char *) ",cygexec");
- else if (flags & MOUNT_EXEC)
- strcat (_my_tls.locals.mnt_opts, (char *) ",exec");
- else if (flags & MOUNT_NOTEXEC)
- strcat (_my_tls.locals.mnt_opts, (char *) ",notexec");
-
- if (flags & MOUNT_NOACL)
- strcat (_my_tls.locals.mnt_opts, (char *) ",noacl");
-
- if (flags & MOUNT_DOS)
- strcat (_my_tls.locals.mnt_opts, (char *) ",dos");
-
- if (flags & MOUNT_IHASH)
- strcat (_my_tls.locals.mnt_opts, (char *) ",ihash");
-
- if (flags & MOUNT_NOPOSIX)
- strcat (_my_tls.locals.mnt_opts, (char *) ",posix=0");
-
- if (flags & MOUNT_SPARSE)
- strcat (_my_tls.locals.mnt_opts, (char *) ",sparse");
-
- if (!(flags & MOUNT_SYSTEM)) /* user mount */
- strcat (_my_tls.locals.mnt_opts, (char *) ",user");
-
- if (flags & MOUNT_CYGDRIVE) /* cygdrive */
- strcat (_my_tls.locals.mnt_opts, (char *) ",noumount");
-
- if (flags & (MOUNT_AUTOMATIC | MOUNT_CYGDRIVE))
- strcat (_my_tls.locals.mnt_opts, (char *) ",auto");
-
- if (flags & (MOUNT_BIND))
- strcat (_my_tls.locals.mnt_opts, (char *) ",bind");
-
- ret.mnt_opts = _my_tls.locals.mnt_opts;
-
- ret.mnt_freq = 1;
- ret.mnt_passno = 1;
- return &ret;
-}
-
-struct mntent *
-mount_item::getmntent ()
-{
- return fillout_mntent (native_path, posix_path, flags);
-}
-
-static struct mntent *
-cygdrive_getmntent ()
-{
- char native_path[4];
- char posix_path[CYG_MAX_PATH];
- DWORD mask = 1, drive = 'a';
- struct mntent *ret = NULL;
-
- while (_my_tls.locals.available_drives)
- {
- for (/* nothing */; drive <= 'z'; mask <<= 1, drive++)
- if (_my_tls.locals.available_drives & mask)
- break;
-
- __small_sprintf (native_path, "%c:\\", cyg_toupper (drive));
- if (GetFileAttributes (native_path) == INVALID_FILE_ATTRIBUTES)
- {
- _my_tls.locals.available_drives &= ~mask;
- continue;
- }
- native_path[2] = '\0';
- __small_sprintf (posix_path, "%s%c", mount_table->cygdrive, drive);
- ret = fillout_mntent (native_path, posix_path, mount_table->cygdrive_flags);
- break;
- }
-
- return ret;
-}
-
-struct mntent *
-mount_info::getmntent (int x)
-{
- if (x < 0 || x >= nmounts)
- return cygdrive_getmntent ();
-
- return mount[native_sorted[x]].getmntent ();
-}
-
-/* Fill in the fields of a mount table entry. */
-
-void
-mount_item::init (const char *native, const char *posix, unsigned mountflags)
-{
- strcpy ((char *) native_path, native);
- strcpy ((char *) posix_path, posix);
-
- native_pathlen = strlen (native_path);
- posix_pathlen = strlen (posix_path);
-
- flags = mountflags;
-}
-
-/********************** Mount System Calls **************************/
-
-/* Mount table system calls.
- Note that these are exported to the application. */
-
-/* mount: Add a mount to the mount table in memory and to the registry
- that will cause paths under win32_path to be translated to paths
- under posix_path. */
-
-extern "C" int
-mount (const char *win32_path, const char *posix_path, unsigned flags)
-{
- /* FIXME: Should we disallow setting MOUNT_SYSTEM in flags since it
- isn't really supported except from fstab? */
- int res = -1;
-
- __try
- {
- if (!*posix_path)
- set_errno (EINVAL);
- else if (strpbrk (posix_path, "\\:"))
- set_errno (EINVAL);
- else if (flags & MOUNT_CYGDRIVE) /* normal mount */
- {
- /* When flags include MOUNT_CYGDRIVE, take this to mean that
- we actually want to change the cygdrive prefix and flags
- without actually mounting anything. */
- res = mount_table->write_cygdrive_info (posix_path, flags);
- win32_path = NULL;
- }
- else if (!*win32_path)
- set_errno (EINVAL);
- else
- {
- char *w32_path = (char *) win32_path;
- if (flags & MOUNT_BIND)
- {
- /* Prepend root path to bound path. */
- tmp_pathbuf tp;
- device dev;
-
- unsigned conv_flags = 0;
- const char *bound_path = w32_path;
-
- w32_path = tp.c_get ();
- int error = mount_table->conv_to_win32_path (bound_path, w32_path,
- dev, &conv_flags);
- if (error || strlen (w32_path) >= MAX_PATH)
- return true;
- if ((flags & ~MOUNT_SYSTEM) == (MOUNT_BIND | MOUNT_BINARY))
- flags = (MOUNT_BIND | conv_flags)
- & ~(MOUNT_IMMUTABLE | MOUNT_AUTOMATIC);
- }
- /* Make sure all mounts are user mounts, even those added via
- mount -a. */
- flags &= ~MOUNT_SYSTEM;
- res = mount_table->add_item (w32_path, posix_path, flags);
- }
-
- syscall_printf ("%R = mount(%s, %s, %y)",
- res, win32_path, posix_path, flags);
- }
- __except (EFAULT) {}
- __endtry
- return res;
-}
-
-/* umount: The standard umount call only has a path parameter. Since
- it is not possible for this call to specify whether to remove the
- mount from the user or global mount registry table, assume the user
- table. */
-
-extern "C" int
-umount (const char *path)
-{
- __try
- {
- if (!*path)
- {
- set_errno (EINVAL);
- __leave;
- }
- return cygwin_umount (path, 0);
- }
- __except (EFAULT) {}
- __endtry
- return -1;
-}
-
-/* cygwin_umount: This is like umount but takes an additional flags
- parameter that specifies whether to umount from the user or system-wide
- registry area. */
-
-extern "C" int
-cygwin_umount (const char *path, unsigned flags)
-{
- int res = -1;
-
- if (!(flags & MOUNT_CYGDRIVE))
- res = mount_table->del_item (path, flags & ~MOUNT_SYSTEM);
-
- syscall_printf ("%R = cygwin_umount(%s, %d)", res, path, flags);
- return res;
-}
-
-#define is_dev(d,s) wcsncmp((d),(s),sizeof(s) - 1)
-
-disk_type
-get_disk_type (LPCWSTR dos)
-{
- WCHAR dev[MAX_PATH], *d = dev;
- if (!QueryDosDeviceW (dos, dev, MAX_PATH))
- return DT_NODISK;
- if (is_dev (dev, L"\\Device\\"))
- {
- d += 8;
- switch (*d)
- {
- case L'C':
- if (is_dev (d, L"CdRom"))
- return DT_CDROM;
- break;
- case L'F':
- if (is_dev (d, L"Floppy"))
- return DT_FLOPPY;
- break;
- case L'H':
- if (is_dev (d, L"Harddisk"))
- return DT_HARDDISK;
- break;
- case L'L':
- if (is_dev (d, L"LanmanRedirector\\"))
- return DT_SHARE_SMB;
- break;
- case L'M':
- if (is_dev (d, L"MRxNfs\\"))
- return DT_SHARE_NFS;
- break;
- }
- }
- return DT_NODISK;
-}
-
-extern "C" FILE *
-setmntent (const char *filep, const char *)
-{
- _my_tls.locals.iteration = 0;
- _my_tls.locals.available_drives = GetLogicalDrives ();
- /* Filter floppy drives on A: and B: */
- if ((_my_tls.locals.available_drives & 1)
- && get_disk_type (L"A:") == DT_FLOPPY)
- _my_tls.locals.available_drives &= ~1;
- if ((_my_tls.locals.available_drives & 2)
- && get_disk_type (L"B:") == DT_FLOPPY)
- _my_tls.locals.available_drives &= ~2;
- return (FILE *) filep;
-}
-
-extern "C" struct mntent *
-getmntent (FILE *)
-{
- return mount_table->getmntent (_my_tls.locals.iteration++);
-}
-
-extern "C" struct mntent *
-getmntent_r (FILE *, struct mntent *mntbuf, char *buf, int buflen)
-{
- struct mntent *mnt = mount_table->getmntent (_my_tls.locals.iteration++);
- int fsname_len, dir_len, type_len, tmplen = buflen;
-
- if (!mnt)
- return NULL;
-
- fsname_len = strlen (mnt->mnt_fsname) + 1;
- dir_len = strlen (mnt->mnt_dir) + 1;
- type_len = strlen (mnt->mnt_type) + 1;
-
- snprintf (buf, buflen, "%s%c%s%c%s%c%s", mnt->mnt_fsname, '\0',
- mnt->mnt_dir, '\0', mnt->mnt_type, '\0', mnt->mnt_opts);
-
- mntbuf->mnt_fsname = buf;
- tmplen -= fsname_len;
- mntbuf->mnt_dir = tmplen > 0 ? buf + fsname_len : (char *)"";
- tmplen -= dir_len;
- mntbuf->mnt_type = tmplen > 0 ? buf + fsname_len + dir_len : (char *)"";
- tmplen -= type_len;
- mntbuf->mnt_opts = tmplen > 0 ? buf + fsname_len + dir_len + type_len : (char *)"";
- mntbuf->mnt_freq = mnt->mnt_freq;
- mntbuf->mnt_passno = mnt->mnt_passno;
- return mntbuf;
-}
-
-extern "C" int
-endmntent (FILE *)
-{
- return 1;
-}
-
-dos_drive_mappings::dos_drive_mappings ()
-: mappings(0)
-{
- tmp_pathbuf tp;
- wchar_t vol[64]; /* Long enough for Volume GUID string */
- wchar_t *devpath = tp.w_get ();
- wchar_t *mounts = tp.w_get ();
-
- /* Iterate over all volumes, fetch the first path from the list of
- DOS paths the volume is mounted to, or use the GUID volume path
- otherwise. */
- HANDLE sh = FindFirstVolumeW (vol, 64);
- if (sh == INVALID_HANDLE_VALUE)
- debug_printf ("FindFirstVolumeW, %E");
- else
- do
- {
- /* Skip drives which are not mounted. */
- DWORD len;
- if (!GetVolumePathNamesForVolumeNameW (vol, mounts, NT_MAX_PATH, &len)
- || mounts[0] == L'\0')
- continue;
- *wcsrchr (vol, L'\\') = L'\0';
- if (QueryDosDeviceW (vol + 4, devpath, NT_MAX_PATH))
- {
- /* The DOS drive mapping can be another symbolic link. If so,
- the mapping won't work since the section name is the name
- after resolving all symlinks. Resolve symlinks here, too. */
- for (int syml_cnt = 0; syml_cnt < SYMLOOP_MAX; ++syml_cnt)
- {
- UNICODE_STRING upath;
- OBJECT_ATTRIBUTES attr;
- NTSTATUS status;
- HANDLE h;
-
- RtlInitUnicodeString (&upath, devpath);
- InitializeObjectAttributes (&attr, &upath,
- OBJ_CASE_INSENSITIVE, NULL, NULL);
- status = NtOpenSymbolicLinkObject (&h, SYMBOLIC_LINK_QUERY,
- &attr);
- if (!NT_SUCCESS (status))
- break;
- RtlInitEmptyUnicodeString (&upath, devpath, (NT_MAX_PATH - 1)
- * sizeof (WCHAR));
- status = NtQuerySymbolicLinkObject (h, &upath, NULL);
- NtClose (h);
- if (!NT_SUCCESS (status))
- break;
- devpath[upath.Length / sizeof (WCHAR)] = L'\0';
- }
- mapping *m = new mapping ();
- if (m)
- {
- m->dospath = wcsdup (mounts);
- m->ntdevpath = wcsdup (devpath);
- if (!m->dospath || !m->ntdevpath)
- {
- free (m->dospath);
- free (m->ntdevpath);
- delete m;
- continue;
- }
- m->doslen = wcslen (m->dospath);
- m->dospath[--m->doslen] = L'\0'; /* Drop trailing backslash */
- m->ntlen = wcslen (m->ntdevpath);
- m->next = mappings;
- mappings = m;
- }
- }
- else
- debug_printf ("Unable to determine the native mapping for %ls "
- "(error %u)", vol, GetLastError ());
- }
- while (FindNextVolumeW (sh, vol, 64));
- FindVolumeClose (sh);
-}
-
-wchar_t *
-dos_drive_mappings::fixup_if_match (wchar_t *path)
-{
- /* Check for network drive first. */
- if (!wcsncmp (path, L"\\Device\\Mup\\", 12))
- {
- path += 10;
- path[0] = L'\\';
- return path;
- }
- /* Then test local drives. */
- for (mapping *m = mappings; m; m = m->next)
- if (!wcsncmp (m->ntdevpath, path, m->ntlen))
- {
- wchar_t *tmppath;
-
- if (m->ntlen > m->doslen)
- wcsncpy (path += m->ntlen - m->doslen, m->dospath, m->doslen);
- else if ((tmppath = wcsdup (path + m->ntlen)) != NULL)
- {
- wcpcpy (wcpcpy (path, m->dospath), tmppath);
- free (tmppath);
- }
- break;
- }
- return path;
-}
-
-dos_drive_mappings::~dos_drive_mappings ()
-{
- mapping *n = 0;
- for (mapping *m = mappings; m; m = n)
- {
- n = m->next;
- free (m->dospath);
- free (m->ntdevpath);
- delete m;
- }
-}
diff --git a/winsup/cygwin/mount.h b/winsup/cygwin/mount.h
deleted file mode 100644
index e7d542683..000000000
--- a/winsup/cygwin/mount.h
+++ /dev/null
@@ -1,236 +0,0 @@
-/* mount.h: mount definitions.
-
- Copyright 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
- 2008, 2009, 2010, 2011, 2012, 2013, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _MOUNT_H
-#define _MOUNT_H
-
-enum disk_type
-{
- DT_NODISK,
- DT_CDROM,
- DT_FLOPPY,
- DT_HARDDISK,
- DT_SHARE_SMB,
- DT_SHARE_NFS
-};
-
-disk_type get_disk_type (LPCWSTR);
-
-/* Don't add new fs types without adding them to fs_names in mount.cc!
- Don't reorder without reordering fs_names in mount.cc! */
-enum fs_info_type
-{
- none = 0,
- fat,
- ntfs,
- refs,
- samba,
- nfs,
- netapp,
- cdrom,
- udf,
- csc_cache,
- sunwnfs,
- unixfs,
- mvfs,
- cifs,
- nwfs,
- ncfsd,
- afs,
- /* Always last. */
- max_fs_type
-};
-
-extern struct fs_names_t {
- const char *name;
- bool block_device;
-} fs_names[];
-
-#define IMPLEMENT_FS_FLAG(type) \
- bool is_##type (bool val) { if (val) status.fs_type = type; return val; } \
- bool is_##type () const { return status.fs_type == type; }
-
-class fs_info
-{
- struct status_flags
- {
- ULONG flags; /* Volume flags */
- ULONG samba_version; /* Samba version if available */
- ULONG name_len; /* MaximumComponentNameLength */
- fs_info_type fs_type; /* Filesystem type */
- unsigned is_remote_drive : 1;
- unsigned has_acls : 1;
- unsigned hasgood_inode : 1;
- unsigned caseinsensitive : 1;
- unsigned has_buggy_open : 1;
- unsigned has_buggy_reopen : 1;
- unsigned has_buggy_fileid_dirinfo : 1;
- unsigned has_buggy_basic_info : 1;
- unsigned has_dos_filenames_only : 1;
- } status;
- ULONG sernum; /* Volume Serial Number */
- char fsn[80]; /* Windows filesystem name */
-
- public:
- void clear ()
- {
- memset (&status, 0 , sizeof status);
- sernum = 0UL;
- fsn[0] = '\0';
- }
- fs_info () { clear (); }
-
- IMPLEMENT_STATUS_FLAG (ULONG, flags)
- IMPLEMENT_STATUS_FLAG (ULONG, samba_version)
- IMPLEMENT_STATUS_FLAG (ULONG, name_len)
- IMPLEMENT_STATUS_FLAG (bool, is_remote_drive)
- IMPLEMENT_STATUS_FLAG (bool, has_acls)
- IMPLEMENT_STATUS_FLAG (bool, hasgood_inode)
- IMPLEMENT_STATUS_FLAG (bool, caseinsensitive)
- IMPLEMENT_STATUS_FLAG (bool, has_buggy_open)
- IMPLEMENT_STATUS_FLAG (bool, has_buggy_reopen)
- IMPLEMENT_STATUS_FLAG (bool, has_buggy_fileid_dirinfo)
- IMPLEMENT_STATUS_FLAG (bool, has_buggy_basic_info)
- IMPLEMENT_STATUS_FLAG (bool, has_dos_filenames_only)
- IMPLEMENT_FS_FLAG (fat)
- IMPLEMENT_FS_FLAG (ntfs)
- IMPLEMENT_FS_FLAG (refs)
- IMPLEMENT_FS_FLAG (samba)
- IMPLEMENT_FS_FLAG (nfs)
- IMPLEMENT_FS_FLAG (netapp)
- IMPLEMENT_FS_FLAG (cdrom)
- IMPLEMENT_FS_FLAG (udf)
- IMPLEMENT_FS_FLAG (csc_cache)
- IMPLEMENT_FS_FLAG (sunwnfs)
- IMPLEMENT_FS_FLAG (unixfs)
- IMPLEMENT_FS_FLAG (mvfs)
- IMPLEMENT_FS_FLAG (cifs)
- IMPLEMENT_FS_FLAG (nwfs)
- IMPLEMENT_FS_FLAG (ncfsd)
- IMPLEMENT_FS_FLAG (afs)
- fs_info_type what_fs () const { return status.fs_type; }
- bool got_fs () const { return status.fs_type != none; }
-
- ULONG serial_number () const { return sernum; }
-
- const char *fsname () const { return fsn[0] ? fsn : "unknown"; }
-
- bool __reg3 update (PUNICODE_STRING, HANDLE);
- bool inited () const { return !!status.flags; }
-};
-
-/* Mount table entry */
-
-class mount_item
-{
- public:
- /* FIXME: Nasty static allocation. Need to have a heap in the shared
- area [with the user being able to configure at runtime the max size]. */
- /* Win32-style mounted partition source ("C:\foo\bar").
- native_path[0] == 0 for unused entries. */
- char native_path[CYG_MAX_PATH];
- int native_pathlen;
-
- /* POSIX-style mount point ("/foo/bar") */
- char posix_path[CYG_MAX_PATH];
- int posix_pathlen;
-
- unsigned flags;
-
- void init (const char *dev, const char *path, unsigned flags);
-
- struct mntent *getmntent ();
- int build_win32 (char *, const char *, unsigned *, unsigned);
-};
-
-/* Warning: Decreasing this value will cause cygwin.dll to ignore existing
- higher numbered registry entries. Don't change this number willy-nilly.
- What we need is to have a more dynamic allocation scheme, but the current
- scheme should be satisfactory for a long while yet. */
-#define MAX_MOUNTS 64
-
-class reg_key;
-struct device;
-
-/* NOTE: Do not make gratuitous changes to the names or organization of the
- below class. The layout is checksummed to determine compatibility between
- different cygwin versions. */
-class mount_info
-{
- public:
- int nmounts;
- mount_item mount[MAX_MOUNTS];
-
- static bool got_usr_bin;
- static bool got_usr_lib;
- static int root_idx;
-
- /* cygdrive_prefix is used as the root of the path automatically
- prepended to a path when the path has no associated mount.
- cygdrive_flags are the default flags for the cygdrives. */
- char cygdrive[CYG_MAX_PATH];
- size_t cygdrive_len;
- unsigned cygdrive_flags;
- private:
- int posix_sorted[MAX_MOUNTS];
- int native_sorted[MAX_MOUNTS];
-
- public:
- void init (bool);
- int add_item (const char *dev, const char *path, unsigned flags);
- int del_item (const char *path, unsigned flags);
-
- unsigned set_flags_from_win32_path (const char *path);
- int conv_to_win32_path (const char *src_path, char *dst, device&,
- unsigned *flags = NULL);
- int conv_to_posix_path (PWCHAR src_path, char *posix_path,
- int keep_rel_p);
- int conv_to_posix_path (const char *src_path, char *posix_path,
- int keep_rel_p);
- struct mntent *getmntent (int x);
-
- int write_cygdrive_info (const char *cygdrive_prefix, unsigned flags);
- int get_cygdrive_info (char *user, char *system, char* user_flags,
- char* system_flags);
- void cygdrive_posix_path (const char *src, char *dst, int trailing_slash_p);
- int get_mounts_here (const char *parent_dir, int,
- PUNICODE_STRING mount_points,
- PUNICODE_STRING cygd);
-
- private:
- void sort ();
- void mount_slash ();
- void create_root_entry (const PWCHAR root);
-
- bool from_fstab_line (char *line, bool user);
- bool from_fstab (bool user, WCHAR [], PWCHAR);
-
- int cygdrive_win32_path (const char *src, char *dst, int& unit);
-};
-
-class dos_drive_mappings
-{
- struct mapping
- {
- mapping *next;
- size_t doslen;
- size_t ntlen;
- wchar_t *dospath;
- wchar_t *ntdevpath;
- };
- mapping *mappings;
-
-public:
- dos_drive_mappings ();
- ~dos_drive_mappings ();
- wchar_t *fixup_if_match (wchar_t *path);
-};
-#endif
diff --git a/winsup/cygwin/msg.cc b/winsup/cygwin/msg.cc
deleted file mode 100644
index 5505dc453..000000000
--- a/winsup/cygwin/msg.cc
+++ /dev/null
@@ -1,191 +0,0 @@
-/* msg.cc: XSI IPC interface for Cygwin.
-
- Copyright 2002, 2003, 2004, 2005, 2008, 2009, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include <unistd.h>
-
-#include "sigproc.h"
-#include "cygtls.h"
-
-#include "cygserver_msg.h"
-
-/*
- * client_request_msg Constructors
- */
-
-client_request_msg::client_request_msg (int msqid,
- int cmd,
- struct msqid_ds *buf)
- : client_request (CYGSERVER_REQUEST_MSG, &_parameters, sizeof (_parameters))
-{
- _parameters.in.msgop = MSGOP_msgctl;
- ipc_set_proc_info (_parameters.in.ipcblk);
-
- _parameters.in.ctlargs.msqid = msqid;
- _parameters.in.ctlargs.cmd = cmd;
- _parameters.in.ctlargs.buf = buf;
-
- msglen (sizeof (_parameters.in));
-}
-
-client_request_msg::client_request_msg (key_t key,
- int msgflg)
- : client_request (CYGSERVER_REQUEST_MSG, &_parameters, sizeof (_parameters))
-{
- _parameters.in.msgop = MSGOP_msgget;
- ipc_set_proc_info (_parameters.in.ipcblk);
-
- _parameters.in.getargs.key = key;
- _parameters.in.getargs.msgflg = msgflg;
-
- msglen (sizeof (_parameters.in));
-}
-
-client_request_msg::client_request_msg (int msqid,
- void *msgp,
- size_t msgsz,
- long msgtyp,
- int msgflg)
- : client_request (CYGSERVER_REQUEST_MSG, &_parameters, sizeof (_parameters))
-{
- _parameters.in.msgop = MSGOP_msgrcv;
- ipc_set_proc_info (_parameters.in.ipcblk);
-
- _parameters.in.rcvargs.msqid = msqid;
- _parameters.in.rcvargs.msgp = msgp;
- _parameters.in.rcvargs.msgsz = msgsz;
- _parameters.in.rcvargs.msgtyp = msgtyp;
- _parameters.in.rcvargs.msgflg = msgflg;
-
- msglen (sizeof (_parameters.in));
-}
-
-client_request_msg::client_request_msg (int msqid,
- const void *msgp,
- size_t msgsz,
- int msgflg)
- : client_request (CYGSERVER_REQUEST_MSG, &_parameters, sizeof (_parameters))
-{
- _parameters.in.msgop = MSGOP_msgsnd;
- ipc_set_proc_info (_parameters.in.ipcblk);
-
- _parameters.in.sndargs.msqid = msqid;
- _parameters.in.sndargs.msgp = msgp;
- _parameters.in.sndargs.msgsz = msgsz;
- _parameters.in.sndargs.msgflg = msgflg;
-
- msglen (sizeof (_parameters.in));
-}
-
-/*
- * XSI message queue API. These are exported by the DLL.
- */
-
-extern "C" int
-msgctl (int msqid, int cmd, struct msqid_ds *buf)
-{
- syscall_printf ("msgctl (msqid = %d, cmd = %y, buf = %p)", msqid, cmd, buf);
- __try
- {
- switch (cmd)
- {
- case IPC_STAT:
- break;
- case IPC_SET:
- break;
- case IPC_RMID:
- break;
- case IPC_INFO:
- break;
- case MSG_INFO:
- break;
- default:
- syscall_printf ("-1 [%d] = msgctl ()", EINVAL);
- set_errno (EINVAL);
- __leave;
- }
- client_request_msg request (msqid, cmd, buf);
- if (request.make_request () == -1 || request.retval () == -1)
- {
- syscall_printf ("-1 [%d] = msgctl ()", request.error_code ());
- set_errno (request.error_code ());
- if (request.error_code () == ENOSYS)
- raise (SIGSYS);
- __leave;
- }
- return request.retval ();
- }
- __except (EFAULT) {}
- __endtry
- return -1;
-}
-
-extern "C" int
-msgget (key_t key, int msgflg)
-{
- syscall_printf ("msgget (key = %U, msgflg = %y)", key, msgflg);
- client_request_msg request (key, msgflg);
- if (request.make_request () == -1 || request.retval () == -1)
- {
- syscall_printf ("-1 [%d] = msgget ()", request.error_code ());
- set_errno (request.error_code ());
- if (request.error_code () == ENOSYS)
- raise (SIGSYS);
- return -1;
- }
- return request.retval ();
-}
-
-extern "C" ssize_t
-msgrcv (int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg)
-{
- syscall_printf ("msgrcv (msqid = %d, msgp = %p, msgsz = %ld, "
- "msgtyp = %d, msgflg = %y)",
- msqid, msgp, msgsz, msgtyp, msgflg);
- __try
- {
- client_request_msg request (msqid, msgp, msgsz, msgtyp, msgflg);
- if (request.make_request () == -1 || request.rcvval () == -1)
- {
- syscall_printf ("-1 [%d] = msgrcv ()", request.error_code ());
- set_errno (request.error_code ());
- if (request.error_code () == ENOSYS)
- raise (SIGSYS);
- __leave;
- }
- return request.rcvval ();
- }
- __except (EFAULT) {}
- __endtry
- return -1;
-}
-
-extern "C" int
-msgsnd (int msqid, const void *msgp, size_t msgsz, int msgflg)
-{
- syscall_printf ("msgsnd (msqid = %d, msgp = %p, msgsz = %ld, msgflg = %y)",
- msqid, msgp, msgsz, msgflg);
- __try
- {
- client_request_msg request (msqid, msgp, msgsz, msgflg);
- if (request.make_request () == -1 || request.retval () == -1)
- {
- syscall_printf ("-1 [%d] = msgsnd ()", request.error_code ());
- set_errno (request.error_code ());
- if (request.error_code () == ENOSYS)
- raise (SIGSYS);
- __leave;
- }
- return request.retval ();
- }
- __except (EFAULT) {}
- __endtry
- return -1;
-}
diff --git a/winsup/cygwin/mtinfo.h b/winsup/cygwin/mtinfo.h
deleted file mode 100644
index e7624b704..000000000
--- a/winsup/cygwin/mtinfo.h
+++ /dev/null
@@ -1,141 +0,0 @@
-/* mtinfo.h: Defininitions for the Cygwin tape driver class.
-
- Copyright 2004, 2005, 2006, 2008, 2012, 2013 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-/* Maximum number of supported partitions per drive. */
-#define MAX_PARTITION_NUM 64
-/* Maximum number of supported drives. */
-#define MAX_DRIVE_NUM 8
-
-/* Values for bookkeeping of the tape position relative to filemarks
- and eod/eom. */
-enum eom_val
-{
- no_eof,
- eof_hit,
- eof,
- eod_hit,
- eod,
- eom_hit,
- eom
-};
-
-enum dirty_state
-{
- clean,
- has_read,
- has_written,
- async_write_pending
-};
-
-enum lock_state
-{
- unlocked,
- lock_error,
- auto_locked,
- locked
-};
-
-/* Partition specific information */
-class mtinfo_part
-{
-public:
- int64_t block; /* logical block no */
- int64_t fblock; /* relative block no */
- int32_t file; /* current file no */
- bool smark; /* At setmark? */
- eom_val emark; /* "end-of"-mark */
-
- void initialize (int64_t nblock = -1);
-};
-
-class mtinfo_drive
-{
- int drive;
- int lasterr;
- int32_t partition;
- int64_t block;
- dirty_state dirty;
- lock_state lock;
- TAPE_GET_DRIVE_PARAMETERS _dp;
- TAPE_GET_MEDIA_PARAMETERS _mp;
- /* sizeof(OVERLAPPED) == 20 on 32 bit, 32 on 64 bit. A drive is always
- opened exclusively by a single process, though, so instead of the
- OVERLAPPED structure, we just keep track of the pointer to the
- OVERLAPPED structure in the application's fhandler. */
- LPOVERLAPPED ov;
- struct status_flags
- {
- unsigned buffer_writes : 1;
- unsigned async_writes : 1;
- unsigned two_fm : 1;
- unsigned fast_eom : 1;
- unsigned auto_lock : 1;
- unsigned sysv : 1;
- unsigned nowait : 1;
- } status;
- mtinfo_part _part[MAX_PARTITION_NUM];
-
- inline int error (const char *str)
- {
- if (lasterr)
- debug_printf ("%s: Win32 error %d", str, lasterr);
- return lasterr;
- }
- inline bool get_feature (DWORD parm)
- {
- return ((parm & TAPE_DRIVE_HIGH_FEATURES)
- ? ((_dp.FeaturesHigh & parm) != 0)
- : ((_dp.FeaturesLow & parm) != 0));
- }
- int get_pos (HANDLE mt, int32_t *ppartition = NULL, int64_t *pblock = NULL);
- int _set_pos (HANDLE mt, int mode, int64_t count, int partition, BOOL dont_wait);
- int create_partitions (HANDLE mt, int32_t count);
- int set_partition (HANDLE mt, int32_t count);
- int write_marks (HANDLE mt, int marktype, DWORD count);
- int erase (HANDLE mt, int mode);
- int prepare (HANDLE mt, int action, bool is_auto = false);
- int set_compression (HANDLE mt, int32_t count);
- int set_blocksize (HANDLE mt, DWORD count);
- int get_status (HANDLE mt, struct mtget *get);
- int set_options (HANDLE mt, int32_t options);
- int async_wait (HANDLE mt, DWORD *bytes_written);
-
-public:
- void initialize (int num, bool first_time);
- int get_dp (HANDLE mt);
- int get_mp (HANDLE mt);
- int open (HANDLE mt);
- int close (HANDLE mt, bool rewind);
- int read (HANDLE mt, LPOVERLAPPED pov, void *ptr, size_t &ulen);
- int write (HANDLE mt, LPOVERLAPPED pov, const void *ptr, size_t &len);
- int ioctl (HANDLE mt, unsigned int cmd, void *buf);
- int set_pos (HANDLE mt, int mode, int64_t count, bool sfm_func);
-
- IMPLEMENT_STATUS_FLAG (bool, buffer_writes)
- IMPLEMENT_STATUS_FLAG (bool, async_writes)
- IMPLEMENT_STATUS_FLAG (bool, two_fm)
- IMPLEMENT_STATUS_FLAG (bool, fast_eom)
- IMPLEMENT_STATUS_FLAG (bool, auto_lock)
- IMPLEMENT_STATUS_FLAG (bool, sysv)
- IMPLEMENT_STATUS_FLAG (bool, nowait)
-
- PTAPE_GET_DRIVE_PARAMETERS dp () { return &_dp; }
- PTAPE_GET_MEDIA_PARAMETERS mp () { return &_mp; }
- mtinfo_part *part (int num) { return &_part[num]; }
-};
-
-class mtinfo
-{
- mtinfo_drive _drive[MAX_DRIVE_NUM];
-
-public:
- void initialize ();
- mtinfo_drive *drive (int num) { return &_drive[num]; }
-};
diff --git a/winsup/cygwin/net.cc b/winsup/cygwin/net.cc
deleted file mode 100644
index 5c4959bdf..000000000
--- a/winsup/cygwin/net.cc
+++ /dev/null
@@ -1,3740 +0,0 @@
-/* net.cc: network-related routines.
-
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-/* #define DEBUG_NEST_ON 1 */
-
-#define __INSIDE_CYGWIN_NET__
-#define USE_SYS_TYPES_FD_SET
-#define __WSA_ERR_MACROS_DEFINED
-/* FIXME: Collision with different declarations of if_nametoindex and
- if_indextoname functions in iphlpapi.h since Vista.
- TODO: Convert if_nametoindex to cygwin_if_nametoindex and call
- system functions on Vista and later. */
-#define _INC_NETIOAPI
-#include "winsup.h"
-#ifdef __x86_64__
-/* 2014-04-24: Current Mingw headers define sockaddr_in6 using u_long (8 byte)
- because a redefinition for LP64 systems is missing. This leads to a wrong
- definition and size of sockaddr_in6 when building with winsock headers.
- This definition is also required to use the right u_long type in subsequent
- function calls. */
-#undef u_long
-#define u_long __ms_u_long
-#endif
-#include <ws2tcpip.h>
-#include <mswsock.h>
-#include <iphlpapi.h>
-#include "miscfuncs.h"
-#include <ctype.h>
-#include <wchar.h>
-#include <stdlib.h>
-#define gethostname cygwin_gethostname
-#include <unistd.h>
-#undef gethostname
-#include <netdb.h>
-#include <cygwin/in.h>
-#include <asm/byteorder.h>
-#include <assert.h>
-#include "cygerrno.h"
-#include "security.h"
-#include "cygwin/version.h"
-#include "shared_info.h"
-#include "perprocess.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "sigproc.h"
-#include "registry.h"
-#include "cygtls.h"
-#include "ifaddrs.h"
-#include "tls_pbuf.h"
-#include "ntdll.h"
-
-/* Unfortunately defined in Windows header files and arpa/nameser_compat.h. */
-#undef NOERROR
-#undef DELETE
-#define _CYGWIN_IN_H
-#include <resolv.h>
-
-extern "C"
-{
- int h_errno;
-
- int __stdcall rcmd (char **ahost, unsigned short inport, char *locuser,
- char *remuser, char *cmd, SOCKET * fd2p);
- int sscanf (const char *, const char *, ...);
- int cygwin_inet_aton(const char *, struct in_addr *);
- const char *cygwin_inet_ntop (int, const void *, char *, socklen_t);
- int dn_length1(const unsigned char *, const unsigned char *,
- const unsigned char *);
-} /* End of "C" section */
-
-const struct in6_addr in6addr_any = {{IN6ADDR_ANY_INIT}};
-const struct in6_addr in6addr_loopback = {{IN6ADDR_LOOPBACK_INIT}};
-
-static fhandler_socket *
-get (const int fd)
-{
- cygheap_fdget cfd (fd);
-
- if (cfd < 0)
- return 0;
-
- fhandler_socket *const fh = cfd->is_socket ();
-
- if (!fh)
- set_errno (ENOTSOCK);
-
- return fh;
-}
-
-/* exported as inet_ntoa: BSD 4.3 */
-extern "C" char *
-cygwin_inet_ntoa (struct in_addr in)
-{
- char buf[20];
- const char *res = cygwin_inet_ntop (AF_INET, &in, buf, sizeof buf);
-
- if (_my_tls.locals.ntoa_buf)
- {
- free (_my_tls.locals.ntoa_buf);
- _my_tls.locals.ntoa_buf = NULL;
- }
- if (res)
- _my_tls.locals.ntoa_buf = strdup (res);
- return _my_tls.locals.ntoa_buf;
-}
-
-/* inet_netof is in the standard BSD sockets library. It is useless
- for modern networks, since it assumes network values which are no
- longer meaningful, but some existing code calls it. */
-
-extern "C" unsigned long
-inet_netof (struct in_addr in)
-{
- unsigned long i, res;
-
- i = ntohl (in.s_addr);
- if (IN_CLASSA (i))
- res = (i & IN_CLASSA_NET) >> IN_CLASSA_NSHIFT;
- else if (IN_CLASSB (i))
- res = (i & IN_CLASSB_NET) >> IN_CLASSB_NSHIFT;
- else
- res = (i & IN_CLASSC_NET) >> IN_CLASSC_NSHIFT;
-
- return res;
-}
-
-/* inet_makeaddr is in the standard BSD sockets library. It is
- useless for modern networks, since it assumes network values which
- are no longer meaningful, but some existing code calls it. */
-
-extern "C" struct in_addr
-inet_makeaddr (int net, int lna)
-{
- unsigned long i;
- struct in_addr in;
-
- if (net < IN_CLASSA_MAX)
- i = (net << IN_CLASSA_NSHIFT) | (lna & IN_CLASSA_HOST);
- else if (net < IN_CLASSB_MAX)
- i = (net << IN_CLASSB_NSHIFT) | (lna & IN_CLASSB_HOST);
- else if (net < 0x1000000)
- i = (net << IN_CLASSC_NSHIFT) | (lna & IN_CLASSC_HOST);
- else
- i = net | lna;
-
- in.s_addr = htonl (i);
-
-
- return in;
-}
-
-struct tl
-{
- int w;
- const char *s;
- int e;
-};
-
-static const struct tl errmap[] = {
- {WSAEINTR, "WSAEINTR", EINTR},
- {WSAEWOULDBLOCK, "WSAEWOULDBLOCK", EWOULDBLOCK},
- {WSAEINPROGRESS, "WSAEINPROGRESS", EINPROGRESS},
- {WSAEALREADY, "WSAEALREADY", EALREADY},
- {WSAENOTSOCK, "WSAENOTSOCK", ENOTSOCK},
- {WSAEDESTADDRREQ, "WSAEDESTADDRREQ", EDESTADDRREQ},
- {WSAEMSGSIZE, "WSAEMSGSIZE", EMSGSIZE},
- {WSAEPROTOTYPE, "WSAEPROTOTYPE", EPROTOTYPE},
- {WSAENOPROTOOPT, "WSAENOPROTOOPT", ENOPROTOOPT},
- {WSAEPROTONOSUPPORT, "WSAEPROTONOSUPPORT", EPROTONOSUPPORT},
- {WSAESOCKTNOSUPPORT, "WSAESOCKTNOSUPPORT", ESOCKTNOSUPPORT},
- {WSAEOPNOTSUPP, "WSAEOPNOTSUPP", EOPNOTSUPP},
- {WSAEPFNOSUPPORT, "WSAEPFNOSUPPORT", EPFNOSUPPORT},
- {WSAEAFNOSUPPORT, "WSAEAFNOSUPPORT", EAFNOSUPPORT},
- {WSAEADDRINUSE, "WSAEADDRINUSE", EADDRINUSE},
- {WSAEADDRNOTAVAIL, "WSAEADDRNOTAVAIL", EADDRNOTAVAIL},
- {WSAENETDOWN, "WSAENETDOWN", ENETDOWN},
- {WSAENETUNREACH, "WSAENETUNREACH", ENETUNREACH},
- {WSAENETRESET, "WSAENETRESET", ENETRESET},
- {WSAECONNABORTED, "WSAECONNABORTED", ECONNABORTED},
- {WSAECONNRESET, "WSAECONNRESET", ECONNRESET},
- {WSAENOBUFS, "WSAENOBUFS", ENOBUFS},
- {WSAEISCONN, "WSAEISCONN", EISCONN},
- {WSAENOTCONN, "WSAENOTCONN", ENOTCONN},
- {WSAESHUTDOWN, "WSAESHUTDOWN", ESHUTDOWN},
- {WSAETOOMANYREFS, "WSAETOOMANYREFS", ETOOMANYREFS},
- {WSAETIMEDOUT, "WSAETIMEDOUT", ETIMEDOUT},
- {WSAECONNREFUSED, "WSAECONNREFUSED", ECONNREFUSED},
- {WSAELOOP, "WSAELOOP", ELOOP},
- {WSAENAMETOOLONG, "WSAENAMETOOLONG", ENAMETOOLONG},
- {WSAEHOSTDOWN, "WSAEHOSTDOWN", EHOSTDOWN},
- {WSAEHOSTUNREACH, "WSAEHOSTUNREACH", EHOSTUNREACH},
- {WSAENOTEMPTY, "WSAENOTEMPTY", ENOTEMPTY},
- {WSAEPROCLIM, "WSAEPROCLIM", EPROCLIM},
- {WSAEUSERS, "WSAEUSERS", EUSERS},
- {WSAEDQUOT, "WSAEDQUOT", EDQUOT},
- {WSAESTALE, "WSAESTALE", ESTALE},
- {WSAEREMOTE, "WSAEREMOTE", EREMOTE},
- {WSAEINVAL, "WSAEINVAL", EINVAL},
- {WSAEFAULT, "WSAEFAULT", EFAULT},
- {0, "NOERROR", 0},
- {0, NULL, 0}
-};
-
-static int
-find_winsock_errno (int why)
-{
- for (int i = 0; errmap[i].s != NULL; ++i)
- if (why == errmap[i].w)
- return errmap[i].e;
-
- return EPERM;
-}
-
-void
-__set_winsock_errno (const char *fn, int ln)
-{
- DWORD werr = WSAGetLastError ();
- int err = find_winsock_errno (werr);
-
- set_errno (err);
- syscall_printf ("%s:%d - winsock error %u -> errno %d", fn, ln, werr, err);
-}
-
-/*
- * Since the member `s' isn't used for debug output we can use it
- * for the error text returned by herror and hstrerror.
- */
-static const struct tl host_errmap[] = {
- {WSAHOST_NOT_FOUND, "Unknown host", HOST_NOT_FOUND},
- {WSATRY_AGAIN, "Host name lookup failure", TRY_AGAIN},
- {WSANO_RECOVERY, "Unknown server error", NO_RECOVERY},
- {WSANO_DATA, "No address associated with name", NO_DATA},
- {0, NULL, 0}
-};
-
-static void
-set_host_errno ()
-{
- int i;
-
- int why = WSAGetLastError ();
-
- for (i = 0; host_errmap[i].w != 0; ++i)
- if (why == host_errmap[i].w)
- break;
-
- if (host_errmap[i].w != 0)
- h_errno = host_errmap[i].e;
- else
- h_errno = NETDB_INTERNAL;
-}
-
-inline int
-DWORD_round (int n)
-{
- return sizeof (DWORD) * (((n + sizeof (DWORD) - 1)) / sizeof (DWORD));
-}
-
-inline int
-strlen_round (const char *s)
-{
- if (!s)
- return 0;
- return DWORD_round (strlen (s) + 1);
-}
-
-#pragma pack(push,2)
-struct pservent
-{
- char *s_name;
- char **s_aliases;
- short s_port;
- char *s_proto;
-};
-#pragma pack(pop)
-
-static const char *entnames[] = {"host", "proto", "serv"};
-
-static unionent *
-realloc_ent (unionent *&dst, int sz)
-{
- /* Allocate the storage needed. Allocate a rounded size to attempt to force
- reuse of this buffer so that a poorly-written caller will not be using
- a freed buffer. */
- unsigned rsz = 256 * ((sz + 255) / 256);
- unionent * ptr;
- if ((ptr = (unionent *) realloc (dst, rsz)))
- dst = ptr;
- return ptr;
-}
-
-static inline hostent *
-realloc_ent (int sz, hostent *)
-{
- return (hostent *) realloc_ent (_my_tls.locals.hostent_buf, sz);
-}
-
-/* Generic "dup a {host,proto,serv}ent structure" function.
- This is complicated because we need to be able to free the
- structure at any point and we can't rely on the pointer contents
- being untouched by callers. So, we allocate a chunk of memory
- large enough to hold the structure and all of the stuff it points
- to then we copy the source into this new block of memory.
- The 'unionent' struct is a union of all of the currently used
- *ent structure. */
-
-#ifdef __x86_64__
-/* For some baffling reason, somebody at Microsoft decided that it would be
- a good idea to exchange the s_port and s_proto members in the servent
- structure. */
-struct win64_servent
-{
- char *s_name;
- char **s_aliases;
- char *s_proto;
- short s_port;
-};
-#define WIN_SERVENT(x) ((win64_servent *)(x))
-#else
-#define WIN_SERVENT(x) ((servent *)(x))
-#endif
-
-#ifdef DEBUGGING
-static void *
-#else
-static inline void *
-#endif
-dup_ent (unionent *&dst, unionent *src, unionent::struct_type type)
-{
- if (dst)
- debug_printf ("old %sent structure \"%s\" %p\n", entnames[type],
- dst->name, dst);
-
- if (!src)
- {
- set_winsock_errno ();
- return NULL;
- }
-
- debug_printf ("duping %sent \"%s\", %p", entnames[type], src->name, src);
-
- /* Find the size of the raw structure minus any character strings, etc. */
- int sz, struct_sz;
- switch (type)
- {
- case unionent::t_protoent:
- struct_sz = sizeof (protoent);
- break;
- case unionent::t_servent:
- struct_sz = sizeof (servent);
- break;
- case unionent::t_hostent:
- struct_sz = sizeof (hostent);
- break;
- default:
- api_fatal ("called with invalid value %d", type);
- break;
- }
-
- /* Every *ent begins with a name. Calculate its length. */
- int namelen = strlen_round (src->name);
- sz = struct_sz + namelen;
-
- char **av;
- /* The next field in every *ent is an argv list of "something".
- Calculate the number of components and how much space the
- character strings will take. */
- int list_len = 0;
- for (av = src->list; av && *av; av++)
- {
- list_len++;
- sz += sizeof (char **) + strlen_round (*av);
- }
-
- /* NULL terminate if there actually was a list */
- if (av)
- {
- sz += sizeof (char **);
- list_len++;
- }
-
- /* Do servent/hostent specific processing */
- int protolen = 0;
- int addr_list_len = 0;
- if (type == unionent::t_servent)
- {
- if (WIN_SERVENT (src)->s_proto)
- sz += (protolen = strlen_round (WIN_SERVENT (src)->s_proto));
- }
- else if (type == unionent::t_hostent)
- {
- /* Calculate the length and storage used for h_addr_list */
- for (av = src->h_addr_list; av && *av; av++)
- {
- addr_list_len++;
- sz += sizeof (char **) + DWORD_round (src->h_len);
- }
- if (av)
- {
- sz += sizeof (char **);
- addr_list_len++;
- }
- }
-
- /* Allocate the storage needed. */
- if (realloc_ent (dst, sz))
- {
- memset (dst, 0, sz);
- /* This field is common to all *ent structures but named differently
- in each, of course. Also, take 64 bit Windows servent weirdness
- into account. */
- if (type == unionent::t_servent)
- dst->port_proto_addrtype = WIN_SERVENT (src)->s_port;
- else
- dst->port_proto_addrtype = src->port_proto_addrtype;
-
- char *dp = ((char *) dst) + struct_sz;
- if (namelen)
- {
- /* Copy the name field to dst, using space just beyond the end of
- the dst structure. */
- strcpy (dst->name = dp, src->name);
- dp += namelen;
- }
-
- /* Copy the 'list' type to dst, using space beyond end of structure
- + storage for name. */
- if (src->list)
- {
- char **dav = dst->list = (char **) dp;
- dp += sizeof (char **) * list_len;
- for (av = src->list; av && *av; av++)
- {
- int len = strlen (*av) + 1;
- memcpy (*dav++ = dp, *av, len);
- dp += DWORD_round (len);
- }
- }
-
- /* Do servent/protoent/hostent specific processing. */
- if (type == unionent::t_protoent)
- debug_printf ("protoent %s %p %y", dst->name, dst->list, dst->port_proto_addrtype);
- else if (type == unionent::t_servent)
- {
- if (WIN_SERVENT (src)->s_proto)
- {
- strcpy (dst->s_proto = dp, WIN_SERVENT (src)->s_proto);
- dp += protolen;
- }
- }
- else if (type == unionent::t_hostent)
- {
- /* Transfer h_len and duplicate contents of h_addr_list, using
- memory after 'list' allocation. */
- dst->h_len = src->h_len;
- char **dav = dst->h_addr_list = (char **) dp;
- dp += sizeof (char **) * addr_list_len;
- for (av = src->h_addr_list; av && *av; av++)
- {
- memcpy (*dav++ = dp, *av, src->h_len);
- dp += DWORD_round (src->h_len);
- }
- }
- /* Sanity check that we did our bookkeeping correctly. */
- assert ((dp - (char *) dst) == sz);
- }
- debug_printf ("duped %sent \"%s\", %p", entnames[type], dst ? dst->name : "<null!>", dst);
- return dst;
-}
-
-static inline hostent *
-dup_ent (hostent *src)
-{
- return (hostent *) dup_ent (_my_tls.locals.hostent_buf, (unionent *) src, unionent::t_hostent);
-}
-
-static inline protoent *
-dup_ent (protoent *src)
-{
- return (protoent *) dup_ent (_my_tls.locals.protoent_buf, (unionent *) src, unionent::t_protoent);
-}
-
-static inline servent *
-dup_ent (servent *src)
-{
- return (servent *) dup_ent (_my_tls.locals.servent_buf, (unionent *) src, unionent::t_servent);
-}
-
-/* exported as getprotobyname: standards? */
-extern "C" struct protoent *
-cygwin_getprotobyname (const char *p)
-{
- __try
- {
- return dup_ent (getprotobyname (p));
- }
- __except (EFAULT) {}
- __endtry
- return NULL;
-}
-
-/* exported as getprotobynumber: standards? */
-extern "C" struct protoent *
-cygwin_getprotobynumber (int number)
-{
- return dup_ent (getprotobynumber (number));
-}
-
-#ifndef SIO_BASE_HANDLE
-#define SIO_BASE_HANDLE _WSAIOR(IOC_WS2,34)
-#endif
-
-bool
-fdsock (cygheap_fdmanip& fd, const device *dev, SOCKET soc)
-{
- int size;
-
- fd = build_fh_dev (*dev);
- if (!fd.isopen ())
- return false;
-
- /* Usually sockets are inheritable IFS objects. Unfortunately some virus
- scanners or other network-oriented software replace normal sockets
- with their own kind, which is running through a filter driver called
- "layered service provider" (LSP).
-
- LSP sockets are not kernel objects. They are typically not marked as
- inheritable, nor are they IFS handles. They are in fact not inheritable
- to child processes, and it does not help to mark them inheritable via
- SetHandleInformation. Subsequent socket calls in the child process fail
- with error 10038, WSAENOTSOCK.
-
- The only way up to Windows Server 2003 to make these sockets usable in
- child processes is to duplicate them via WSADuplicateSocket/WSASocket
- calls. This requires to start the child process in SUSPENDED state so
- we only do this on affected systems. If we recognize a non-inheritable
- socket we switch to inheritance/dup via WSADuplicateSocket/WSASocket for
- that socket.
-
- Starting with Vista there's another neat way to workaround these annoying
- LSP sockets. WSAIoctl allows to fetch the underlying base socket, which
- is a normal, inheritable IFS handle. So we fetch the base socket,
- duplicate it, and close the original socket. Now we have a standard IFS
- socket which (hopefully) works as expected. */
- DWORD flags;
- bool fixup = false;
- if (!GetHandleInformation ((HANDLE) soc, &flags)
- || !(flags & HANDLE_FLAG_INHERIT))
- {
- int ret;
- SOCKET base_soc;
- DWORD bret;
-
- fixup = true;
- debug_printf ("LSP handle: %p", soc);
- ret = WSAIoctl (soc, SIO_BASE_HANDLE, NULL, 0, (void *) &base_soc,
- sizeof (base_soc), &bret, NULL, NULL);
- if (ret)
- debug_printf ("WSAIoctl: %u", WSAGetLastError ());
- else if (base_soc != soc)
- {
- /* LSPs are often BLODAs as well. So we print an info about
- detecting an LSP if BLODA detection is desired. */
- if (detect_bloda)
- {
- WSAPROTOCOL_INFO prot;
-
- memset (&prot, 0, sizeof prot);
- ::getsockopt (soc, SOL_SOCKET, SO_PROTOCOL_INFO, (char *) &prot,
- (size = sizeof prot, &size));
- small_printf ("\n\nPotential BLODA detected! Layered Socket "
- "Service Provider:\n %s\n\n", prot.szProtocol);
- }
- if (GetHandleInformation ((HANDLE) base_soc, &flags)
- && (flags & HANDLE_FLAG_INHERIT))
- {
- if (!DuplicateHandle (GetCurrentProcess (), (HANDLE) base_soc,
- GetCurrentProcess (), (PHANDLE) &base_soc,
- 0, TRUE, DUPLICATE_SAME_ACCESS))
- debug_printf ("DuplicateHandle failed, %E");
- else
- {
- closesocket (soc);
- soc = base_soc;
- fixup = false;
- }
- }
- }
- }
- fd->set_io_handle ((HANDLE) soc);
- if (!((fhandler_socket *) fd)->init_events ())
- return false;
- if (fixup)
- ((fhandler_socket *) fd)->init_fixup_before ();
- fd->set_flags (O_RDWR | O_BINARY);
- debug_printf ("fd %d, name '%s', soc %p", (int) fd, dev->name, soc);
-
- /* Raise default buffer sizes (instead of WinSock default 8K).
-
- 64K appear to have the best size/performance ratio for a default
- value. Tested with ssh/scp on Vista over Gigabit LAN.
-
- NOTE. If the SO_RCVBUF size exceeds 65535(*), and if the socket is
- connected to a remote machine, then calling WSADuplicateSocket on
- fork/exec fails with WinSock error 10022, WSAEINVAL. Fortunately
- we don't use WSADuplicateSocket anymore, rather we just utilize
- handle inheritance. An explanation for this weird behaviour would
- be nice, though.
-
- NOTE 2. Testing on x86_64 (XP, Vista, 2008 R2, W8) indicates that
- this is no problem on 64 bit. So we set the default buffer size to
- the default values in current 3.x Linux versions.
-
- NOTE 3. Setting the window size to 65535 results in extremely bad
- performance for apps that send data in multiples of Kb, as they
- eventually end up sending 1 byte on the network and naggle + delay
- ack kicks in. For example, iperf on a 10Gb network gives only 10
- Mbits/sec with a 65535 send buffer. We want this to be a multiple
- of 1k, but since 64k breaks WSADuplicateSocket we use 63Kb.
-
- (*) Maximum normal TCP window size. Coincidence? */
-#ifdef __x86_64__
- ((fhandler_socket *) fd)->rmem () = 212992;
- ((fhandler_socket *) fd)->wmem () = 212992;
-#else
- ((fhandler_socket *) fd)->rmem () = 64512;
- ((fhandler_socket *) fd)->wmem () = 64512;
-#endif
- if (::setsockopt (soc, SOL_SOCKET, SO_RCVBUF,
- (char *) &((fhandler_socket *) fd)->rmem (), sizeof (int)))
- {
- debug_printf ("setsockopt(SO_RCVBUF) failed, %u", WSAGetLastError ());
- if (::getsockopt (soc, SOL_SOCKET, SO_RCVBUF,
- (char *) &((fhandler_socket *) fd)->rmem (),
- (size = sizeof (int), &size)))
- system_printf ("getsockopt(SO_RCVBUF) failed, %u", WSAGetLastError ());
- }
- if (::setsockopt (soc, SOL_SOCKET, SO_SNDBUF,
- (char *) &((fhandler_socket *) fd)->wmem (), sizeof (int)))
- {
- debug_printf ("setsockopt(SO_SNDBUF) failed, %u", WSAGetLastError ());
- if (::getsockopt (soc, SOL_SOCKET, SO_SNDBUF,
- (char *) &((fhandler_socket *) fd)->wmem (),
- (size = sizeof (int), &size)))
- system_printf ("getsockopt(SO_SNDBUF) failed, %u", WSAGetLastError ());
- }
-
- /* A unique ID is necessary to recognize fhandler entries which are
- duplicated by dup(2) or fork(2). This is used in BSD flock calls
- to identify the descriptor. */
- ((fhandler_socket *) fd)->set_unique_id ();
-
- return true;
-}
-
-/* exported as socket: standards? */
-extern "C" int
-cygwin_socket (int af, int type, int protocol)
-{
- int res = -1;
- SOCKET soc = 0;
-
- int flags = type & _SOCK_FLAG_MASK;
- type &= ~_SOCK_FLAG_MASK;
-
- debug_printf ("socket (%d, %d (flags %y), %d)", af, type, flags, protocol);
-
- if ((flags & ~(SOCK_NONBLOCK | SOCK_CLOEXEC)) != 0)
- {
- set_errno (EINVAL);
- goto done;
- }
-
- soc = socket (af == AF_LOCAL ? AF_INET : af, type,
- af == AF_LOCAL ? 0 : protocol);
-
- if (soc == INVALID_SOCKET)
- {
- set_winsock_errno ();
- goto done;
- }
-
- const device *dev;
-
- if (af == AF_LOCAL)
- dev = type == SOCK_STREAM ? stream_dev : dgram_dev;
- else
- dev = type == SOCK_STREAM ? tcp_dev : udp_dev;
-
- {
- cygheap_fdnew fd;
- if (fd < 0 || !fdsock (fd, dev, soc))
- closesocket (soc);
- else
- {
- ((fhandler_socket *) fd)->set_addr_family (af);
- ((fhandler_socket *) fd)->set_socket_type (type);
- if (flags & SOCK_NONBLOCK)
- ((fhandler_socket *) fd)->set_nonblocking (true);
- if (flags & SOCK_CLOEXEC)
- ((fhandler_socket *) fd)->set_close_on_exec (true);
- if (type == SOCK_DGRAM)
- {
- /* Workaround the problem that a missing listener on a UDP socket
- in a call to sendto will result in select/WSAEnumNetworkEvents
- reporting that the socket has pending data and a subsequent call
- to recvfrom will return -1 with error set to WSAECONNRESET.
-
- This problem is a regression introduced in Windows 2000.
- Instead of fixing the problem, a new socket IOCTL code has
- been added, see http://support.microsoft.com/kb/263823 */
- BOOL cr = FALSE;
- DWORD blen;
- if (WSAIoctl (soc, SIO_UDP_CONNRESET, &cr, sizeof cr, NULL, 0,
- &blen, NULL, NULL) == SOCKET_ERROR)
- debug_printf ("Reset SIO_UDP_CONNRESET: WinSock error %u",
- WSAGetLastError ());
- }
- res = fd;
- }
- }
-
-done:
- syscall_printf ("%R = socket(%d, %d (flags %y), %d)",
- res, af, type, flags, protocol);
- return res;
-}
-
-/* exported as sendto: standards? */
-extern "C" ssize_t
-cygwin_sendto (int fd, const void *buf, size_t len, int flags,
- const struct sockaddr *to, socklen_t tolen)
-{
- ssize_t res = -1;
-
- pthread_testcancel ();
-
- __try
- {
- fhandler_socket *fh = get (fd);
- if (fh)
- res = fh->sendto (buf, len, flags, to, tolen);
- }
- __except (EFAULT) {}
- __endtry
- syscall_printf ("%lR = sendto(%d, %p, %ld, %y, %p, %d)",
- res, fd, buf, len, flags, to, tolen);
- return res;
-}
-
-/* exported as recvfrom: standards? */
-extern "C" ssize_t
-cygwin_recvfrom (int fd, void *buf, size_t len, int flags,
- struct sockaddr *from, socklen_t *fromlen)
-{
- ssize_t res = -1;
-
- pthread_testcancel ();
-
- __try
- {
- fhandler_socket *fh = get (fd);
- if (fh)
- /* Originally we shortcircuited here if res == 0.
- Allow 0 bytes buffer. This is valid in POSIX and handled in
- fhandler_socket::recv_internal. If we shortcircuit, we fail
- to deliver valid error conditions and peer address. */
- res = fh->recvfrom (buf, len, flags, from, fromlen);
- }
- __except (EFAULT) {}
- __endtry
- syscall_printf ("%lR = recvfrom(%d, %p, %ld, %y, %p, %p)",
- res, fd, buf, len, flags, from, fromlen);
- return res;
-}
-
-static int
-convert_ws1_ip_optname (int optname)
-{
- static int ws2_optname[] =
- {
- 0,
- IP_OPTIONS,
- IP_MULTICAST_IF,
- IP_MULTICAST_TTL,
- IP_MULTICAST_LOOP,
- IP_ADD_MEMBERSHIP,
- IP_DROP_MEMBERSHIP,
- IP_TTL,
- IP_TOS,
- IP_DONTFRAGMENT
- };
- return (optname < 1 || optname > _WS1_IP_DONTFRAGMENT)
- ? optname
- : ws2_optname[optname];
-}
-
-/* exported as setsockopt: standards? */
-extern "C" int
-cygwin_setsockopt (int fd, int level, int optname, const void *optval,
- socklen_t optlen)
-{
- int res = -1;
-
- __try
- {
- fhandler_socket *fh = get (fd);
- if (!fh)
- __leave;
-
- /* Switch off the AF_LOCAL handshake and thus SO_PEERCRED handling
- for AF_LOCAL/SOCK_STREAM sockets. This allows to handle special
- situations in which connect is called before a listening socket
- accepts connections.
- FIXME: In the long run we should find a more generic solution which
- doesn't require a blocking handshake in accept/connect to exchange
- SO_PEERCRED credentials. */
- if (level == SOL_SOCKET && optname == SO_PEERCRED)
- {
- if (optval || optlen)
- set_errno (EINVAL);
- else
- res = fh->af_local_set_no_getpeereid ();
- __leave;
- }
-
- /* Old applications still use the old WinSock1 IPPROTO_IP values. */
- if (level == IPPROTO_IP && CYGWIN_VERSION_CHECK_FOR_USING_WINSOCK1_VALUES)
- optname = convert_ws1_ip_optname (optname);
-
- /* Per POSIX we must not be able to reuse a complete duplicate of a
- local TCP address (same IP, same port), even if SO_REUSEADDR has been
- set. That's unfortunately possible in WinSock, and this has never
- been changed to maintain backward compatibility. Instead, the
- SO_EXCLUSIVEADDRUSE option has been added to allow an application to
- request POSIX standard behaviour in the non-SO_REUSEADDR case.
-
- However, the WinSock standard behaviour of stream socket binding
- is equivalent to the POSIX behaviour as if SO_REUSEADDR has been set.
- So what we do here is to note that SO_REUSEADDR has been set, but not
- actually hand over the request to WinSock. This is tested in
- fhandler_socket::bind(), so that SO_EXCLUSIVEADDRUSE can be set if
- the application did not set SO_REUSEADDR. This should reflect the
- POSIX socket binding behaviour as close as possible with WinSock. */
- if (level == SOL_SOCKET && optname == SO_REUSEADDR
- && fh->get_socket_type () == SOCK_STREAM)
- res = 0;
- else
- res = setsockopt (fh->get_socket (), level, optname,
- (const char *) optval, optlen);
-
- if (optlen == sizeof (int))
- syscall_printf ("setsockopt optval=%x", *(int *) optval);
-
- if (res)
- {
- /* KB 248611:
-
- Windows 2000 and above don't support setting the IP_TOS field
- with setsockopt. Additionally, TOS was always (also under 9x
- and NT) only implemented for UDP and ICMP, never for TCP.
-
- The difference is that beginning with Windows 2000 the
- setsockopt call returns WinSock error 10022, WSAEINVAL when
- trying to set the IP_TOS field, instead of just ignoring the
- call. This is *not* explained in KB 248611, but only in KB
- 258978.
-
- Either case, the official workaround is to add a new registry
- DWORD value HKLM/System/CurrentControlSet/Services/Tcpip/...
- ... Parameters/DisableUserTOSSetting, set to 0, and reboot.
-
- Sidenote: The reasoning for dropping ToS in Win2K is that ToS
- per RFC 1349 is incompatible with DiffServ per RFC 2474/2475.
-
- We just ignore the return value of setting IP_TOS entirely.
-
- CV 2014-04-16: Same for IPV6_TCLASS
- FIXME: Same for IPV6_RECVTCLASS? */
- if (level == IPPROTO_IP && optname == IP_TOS
- && WSAGetLastError () == WSAEINVAL)
- {
- debug_printf ("Faked IP_TOS success");
- res = 0;
- }
- else if (level == IPPROTO_IPV6 && optname == IPV6_TCLASS
- && WSAGetLastError () == WSAENOPROTOOPT)
- {
- debug_printf ("Faked IPV6_TCLASS success");
- res = 0;
- }
- else
- set_winsock_errno ();
- }
- else if (level == SOL_SOCKET)
- switch (optname)
- {
- case SO_REUSEADDR:
- fh->saw_reuseaddr (*(int *) optval);
- break;
- case SO_RCVBUF:
- fh->rmem (*(int *) optval);
- break;
- case SO_SNDBUF:
- fh->wmem (*(int *) optval);
- break;
- default:
- break;
- }
- }
- __except (EFAULT)
- {
- res = -1;
- }
- __endtry
- syscall_printf ("%R = setsockopt(%d, %d, %y, %p, %d)",
- res, fd, level, optname, optval, optlen);
- return res;
-}
-
-/* exported as getsockopt: standards? */
-extern "C" int
-cygwin_getsockopt (int fd, int level, int optname, void *optval,
- socklen_t *optlen)
-{
- int res = -1;
-
- __try
- {
- fhandler_socket *fh = get (fd);
- if (!fh)
- __leave;
- if (optname == SO_PEERCRED && level == SOL_SOCKET)
- {
- struct ucred *cred = (struct ucred *) optval;
- res = fh->getpeereid (&cred->pid, &cred->uid, &cred->gid);
- __leave;
- }
- /* Old applications still use the old WinSock1 IPPROTO_IP values. */
- if (level == IPPROTO_IP && CYGWIN_VERSION_CHECK_FOR_USING_WINSOCK1_VALUES)
- optname = convert_ws1_ip_optname (optname);
- res = getsockopt (fh->get_socket (), level, optname, (char *) optval,
- (int *) optlen);
- if (res == SOCKET_ERROR)
- set_winsock_errno ();
- else if (level == SOL_SOCKET && optname == SO_ERROR)
- {
- int *e = (int *) optval;
- debug_printf ("WinSock SO_ERROR = %d", *e);
- *e = find_winsock_errno (*e);
- }
- else if (*optlen == 1)
- {
- /* Regression in Vista and later: instead of a 4 byte BOOL value,
- a 1 byte BOOLEAN value is returned, in contrast to older systems
- and the documentation. Since an int type is expected by the
- calling application, we convert the result here. For some reason
- only three BSD-compatible socket options seem to be affected. */
- if ((level == SOL_SOCKET
- && (optname == SO_KEEPALIVE || optname == SO_DONTROUTE))
- || (level == IPPROTO_TCP && optname == TCP_NODELAY))
- {
- BOOLEAN *in = (BOOLEAN *) optval;
- int *out = (int *) optval;
- *out = *in;
- *optlen = 4;
- }
- }
- }
- __except (EFAULT)
- {
- res = -1;
- }
- __endtry
- syscall_printf ("%R = getsockopt(%d, %d, %y, %p, %p)",
- res, fd, level, optname, optval, optlen);
- return res;
-}
-
-extern "C" int
-getpeereid (int fd, uid_t *euid, gid_t *egid)
-{
- fhandler_socket *fh = get (fd);
- if (fh)
- return fh->getpeereid (NULL, euid, egid);
- return -1;
-}
-
-/* exported as connect: standards? */
-extern "C" int
-cygwin_connect (int fd, const struct sockaddr *name, socklen_t namelen)
-{
- int res = -1;
-
- pthread_testcancel ();
-
- __try
- {
- fhandler_socket *fh = get (fd);
- if (fh)
- res = fh->connect (name, namelen);
- }
- __except (EFAULT) {}
- __endtry
- syscall_printf ("%R = connect(%d, %p, %d)", res, fd, name, namelen);
- return res;
-}
-
-/* exported as getservbyname: standards? */
-extern "C" struct servent *
-cygwin_getservbyname (const char *name, const char *proto)
-{
- servent *res = NULL;
-
- __try
- {
- res = dup_ent (getservbyname (name, proto));
- }
- __except (EFAULT) {}
- __endtry
- syscall_printf ("%p = getservbyname (%s, %s)", res, name, proto);
- return res;
-}
-
-/* exported as getservbyport: standards? */
-extern "C" struct servent *
-cygwin_getservbyport (int port, const char *proto)
-{
- servent *res = NULL;
-
- __try
- {
- res = dup_ent (getservbyport (port, proto));
- }
- __except (EFAULT) {}
- __endtry
- syscall_printf ("%p = getservbyport (%d, %s)", res, port, proto);
- return res;
-}
-
-extern "C" int
-cygwin_gethostname (char *name, size_t len)
-{
- int res = -1;
-
- __try
- {
- if (gethostname (name, len))
- {
- DWORD local_len = len;
-
- if (!GetComputerNameExA (ComputerNameDnsFullyQualified, name,
- &local_len))
- {
- set_winsock_errno ();
- __leave;
- }
- }
- debug_printf ("name %s", name);
- res = 0;
- }
- __except (EFAULT) {}
- __endtry
- return res;
-}
-
-/* exported as gethostbyname: standards? */
-extern "C" struct hostent *
-cygwin_gethostbyname (const char *name)
-{
- unsigned char tmp_addr[4];
- struct hostent tmp, *h;
- char *tmp_aliases[1] = {0};
- char *tmp_addr_list[2] = {0,0};
- unsigned int a, b, c, d;
- char dummy;
- hostent *res = NULL;
-
- __try
- {
- if (sscanf (name, "%u.%u.%u.%u%c", &a, &b, &c, &d, &dummy) != 4
- || a >= 256 || b >= 256 || c >= 256 || d >= 256)
- h = gethostbyname (name);
- else
- {
- /* In case you don't have DNS, at least x.x.x.x still works */
- memset (&tmp, 0, sizeof (tmp));
- tmp_addr[0] = a;
- tmp_addr[1] = b;
- tmp_addr[2] = c;
- tmp_addr[3] = d;
- tmp_addr_list[0] = (char *) tmp_addr;
- tmp.h_name = name;
- tmp.h_aliases = tmp_aliases;
- tmp.h_addrtype = 2;
- tmp.h_length = 4;
- tmp.h_addr_list = tmp_addr_list;
- h = &tmp;
- }
-
- res = dup_ent (h);
- if (res)
- debug_printf ("h_name %s", res->h_name);
- else
- {
- debug_printf ("dup_ent returned NULL for name %s, h %p", name, h);
- set_host_errno ();
- }
- }
- __except (EFAULT)
- {
- res = NULL;
- }
- __endtry
- return res;
-}
-
-/* exported as gethostbyaddr: standards? */
-extern "C" struct hostent *
-cygwin_gethostbyaddr (const char *addr, int len, int type)
-{
- hostent *res = NULL;
-
- __try
- {
- res = dup_ent (gethostbyaddr (addr, len, type));
- if (res)
- debug_printf ("h_name %s", res->h_name);
- else
- set_host_errno ();
- }
- __except (EFAULT)
- {
- res = NULL;
- }
- __endtry
- return res;
-}
-
-static void
-memcpy4to6 (char *dst, const u_char *src)
-{
- const unsigned int h[] = {0, 0, htonl (0xFFFF)};
- memcpy (dst, h, 12);
- memcpy (dst + 12, src, NS_INADDRSZ);
-}
-
-static hostent *
-gethostby_helper (const char *name, const int af, const int type,
- const int addrsize_in, const int addrsize_out)
-{
- /* Get the data from the name server */
- const int maxcount = 3;
- int old_errno, ancount = 0, anlen = 1024, msgsize = 0;
- u_char *ptr, *msg = NULL;
- int sz;
- hostent *ret;
- char *string_ptr;
-
- while ((anlen > msgsize) && (ancount++ < maxcount))
- {
- msgsize = anlen;
- ptr = (u_char *) realloc (msg, msgsize);
- if (ptr == NULL )
- {
- old_errno = errno;
- free (msg);
- set_errno (old_errno);
- h_errno = NETDB_INTERNAL;
- return NULL;
- }
- msg = ptr;
- anlen = res_search (name, ns_c_in, type, msg, msgsize);
- }
-
- if (ancount >= maxcount)
- {
- free (msg);
- h_errno = NO_RECOVERY;
- return NULL;
- }
- if (anlen < 0) /* errno and h_errno are set */
- {
- old_errno = errno;
- free (msg);
- set_errno (old_errno);
- return NULL;
- }
- u_char *eomsg = msg + anlen - 1;
-
-
- /* We scan the answer records to determine the required memory size.
- They can be corrupted and we don't fully trust that the message
- follows the standard exactly. glibc applies some checks that
- we emulate.
- The answers are copied in the hostent structure in a second scan.
- To simplify the second scan we store information as follows:
- - "class" is replaced by the compressed name size
- - the first 16 bits of the "ttl" store the expanded name size + 1
- - the last 16 bits of the "ttl" store the offset to the next valid record.
- Note that "type" is rewritten in host byte order. */
-
- class record {
- public:
- unsigned type: 16; // type
- unsigned complen: 16; // class or compressed length
- unsigned namelen1: 16; // expanded length (with final 0)
- unsigned next_o: 16; // offset to next valid
- unsigned size: 16; // data size
- u_char data[]; // data
- record * next () { return (record *) (((char *) this) + next_o); }
- void set_next ( record * nxt) { next_o = ((char *) nxt) - ((char *) this); }
- u_char * name () { return (u_char *) (((char *) this) - complen); }
- };
-
- record * anptr = NULL, * prevptr = NULL, * curptr;
- int i, alias_count = 0, string_size = 0, address_count = 0;
- int namelen1 = 0, address_len = 0, antype, anclass, ansize;
- unsigned complen;
-
- /* Get the count of answers */
- ancount = ntohs (((HEADER *) msg)->ancount);
-
- /* Skip the question, it was verified by res_send */
- ptr = msg + sizeof (HEADER);
- if ((complen = dn_skipname (ptr, eomsg)) < 0)
- goto corrupted;
- /* Point to the beginning of the answer section */
- ptr += complen + NS_QFIXEDSZ;
-
- /* Scan the answer records to determine the sizes */
- for (i = 0; i < ancount; i++, ptr = curptr->data + ansize)
- {
- if ((complen = dn_skipname (ptr, eomsg)) < 0)
- goto corrupted;
-
- curptr = (record *) (ptr + complen);
- antype = ntohs (curptr->type);
- anclass = ntohs (curptr->complen);
- ansize = ntohs (curptr->size);
- /* Class must be internet */
- if (anclass != ns_c_in)
- continue;
-
- curptr->complen = complen;
- if ((namelen1 = dn_length1 (msg, eomsg, curptr-> name())) <= 0)
- goto corrupted;
-
- if (antype == ns_t_cname)
- {
- alias_count++;
- string_size += namelen1;
- }
- else if (antype == type)
- {
- ansize = ntohs (curptr->size);
- if (ansize != addrsize_in)
- continue;
- if (address_count == 0)
- {
- address_len = namelen1;
- string_size += namelen1;
- }
- else if (address_len != namelen1)
- continue;
- address_count++;
- }
- /* Update the records */
- curptr->type = antype; /* Host byte order */
- curptr->namelen1 = namelen1;
- if (! anptr)
- anptr = prevptr = curptr;
- else
- {
- prevptr->set_next (curptr);
- prevptr = curptr;
- }
- }
-
- /* If there is no address, quit */
- if (address_count == 0)
- {
- free (msg);
- h_errno = NO_DATA;
- return NULL;
- }
-
- /* Determine the total size */
- sz = DWORD_round (sizeof(hostent))
- + sizeof (char *) * (alias_count + address_count + 2)
- + string_size
- + address_count * addrsize_out;
-
- ret = realloc_ent (sz, (hostent *) NULL);
- if (! ret)
- {
- old_errno = errno;
- free (msg);
- set_errno (old_errno);
- h_errno = NETDB_INTERNAL;
- return NULL;
- }
-
- ret->h_addrtype = af;
- ret->h_length = addrsize_out;
- ret->h_aliases = (char **) (((char *) ret) + DWORD_round (sizeof(hostent)));
- ret->h_addr_list = ret->h_aliases + alias_count + 1;
- string_ptr = (char *) (ret->h_addr_list + address_count + 1);
-
- /* Rescan the answers */
- alias_count = address_count = 0;
- prevptr->set_next (prevptr + 1);
-
- for (curptr = anptr; curptr <= prevptr; curptr = curptr->next ())
- {
- antype = curptr->type;
- if (antype == ns_t_cname)
- {
- dn_expand (msg, eomsg, curptr->name (), string_ptr, curptr->namelen1);
- ret->h_aliases[alias_count++] = string_ptr;
- string_ptr += curptr->namelen1;
- }
- else
- {
- if (address_count == 0)
- {
- dn_expand (msg, eomsg, curptr->name (), string_ptr, curptr->namelen1);
- ret->h_name = string_ptr;
- string_ptr += curptr->namelen1;
- }
- ret->h_addr_list[address_count++] = string_ptr;
- if (addrsize_in != addrsize_out)
- memcpy4to6 (string_ptr, curptr->data);
- else
- memcpy (string_ptr, curptr->data, addrsize_in);
- string_ptr += addrsize_out;
- }
- }
-
- free (msg);
-
- ret->h_aliases[alias_count] = NULL;
- ret->h_addr_list[address_count] = NULL;
-
- return ret;
-
- corrupted:
- free (msg);
- /* Hopefully message corruption errors are temporary.
- Should it be NO_RECOVERY ? */
- h_errno = TRY_AGAIN;
- return NULL;
-}
-
-/* gethostbyname2: standards? */
-extern "C" struct hostent *
-gethostbyname2 (const char *name, int af)
-{
- hostent *res = NULL;
-
- __try
- {
- if (!(_res.options & RES_INIT))
- res_init();
- bool v4to6 = _res.options & RES_USE_INET6;
-
- int type, addrsize_in, addrsize_out;
- switch (af)
- {
- case AF_INET:
- addrsize_in = NS_INADDRSZ;
- addrsize_out = (v4to6) ? NS_IN6ADDRSZ : NS_INADDRSZ;
- type = ns_t_a;
- break;
- case AF_INET6:
- addrsize_in = addrsize_out = NS_IN6ADDRSZ;
- type = ns_t_aaaa;
- break;
- default:
- set_errno (EAFNOSUPPORT);
- h_errno = NETDB_INTERNAL;
- __leave;
- }
-
- res = gethostby_helper (name, af, type, addrsize_in, addrsize_out);
- }
- __except (EFAULT) {}
- __endtry
- return res;
-}
-
-/* exported as accept: standards? */
-extern "C" int
-cygwin_accept (int fd, struct sockaddr *peer, socklen_t *len)
-{
- int res = -1;
-
- pthread_testcancel ();
-
- __try
- {
- fhandler_socket *fh = get (fd);
- if (fh)
- res = fh->accept4 (peer, len,
- fh->is_nonblocking () ? SOCK_NONBLOCK : 0);
- }
- __except (EFAULT) {}
- __endtry
- syscall_printf ("%R = accept(%d, %p, %p)", res, fd, peer, len);
- return res;
-}
-
-extern "C" int
-accept4 (int fd, struct sockaddr *peer, socklen_t *len, int flags)
-{
- int res = -1;
-
- pthread_testcancel ();
-
- __try
- {
- fhandler_socket *fh = get (fd);
- if (!fh)
- __leave;
- if ((flags & ~(SOCK_NONBLOCK | SOCK_CLOEXEC)) != 0)
- set_errno (EINVAL);
- else
- res = fh->accept4 (peer, len, flags);
- }
- __except (EFAULT) {}
- __endtry
- syscall_printf ("%R = accept4(%d, %p, %p, %y)", res, fd, peer, len, flags);
- return res;
-}
-
-/* exported as bind: standards? */
-extern "C" int
-cygwin_bind (int fd, const struct sockaddr *my_addr, socklen_t addrlen)
-{
- int res = -1;
-
- __try
- {
- fhandler_socket *fh = get (fd);
- if (fh)
- res = fh->bind (my_addr, addrlen);
- }
- __except (EFAULT) {}
- __endtry
- syscall_printf ("%R = bind(%d, %p, %d)", res, fd, my_addr, addrlen);
- return res;
-}
-
-/* exported as getsockname: standards? */
-extern "C" int
-cygwin_getsockname (int fd, struct sockaddr *addr, socklen_t *namelen)
-{
- int res = -1;
-
- __try
- {
- fhandler_socket *fh = get (fd);
- if (fh)
- res = fh->getsockname (addr, namelen);
- }
- __except (EFAULT) {}
- __endtry
- syscall_printf ("%R =getsockname (%d, %p, %p)", res, fd, addr, namelen);
- return res;
-}
-
-/* exported as listen: standards? */
-extern "C" int
-cygwin_listen (int fd, int backlog)
-{
- int res = -1;
-
- __try
- {
- fhandler_socket *fh = get (fd);
- if (fh)
- res = fh->listen (backlog);
- }
- __except (EFAULT) {}
- __endtry
- syscall_printf ("%R = listen(%d, %d)", res, fd, backlog);
- return res;
-}
-
-/* exported as shutdown: standards? */
-extern "C" int
-cygwin_shutdown (int fd, int how)
-{
- int res = -1;
-
- fhandler_socket *fh = get (fd);
- if (fh)
- res = fh->shutdown (how);
- syscall_printf ("%R = shutdown(%d, %d)", res, fd, how);
- return res;
-}
-
-/* exported as hstrerror: BSD 4.3 */
-extern "C" const char *
-cygwin_hstrerror (int err)
-{
- int i;
-
- for (i = 0; host_errmap[i].e != 0; ++i)
- if (err == host_errmap[i].e)
- break;
-
- return host_errmap[i].s;
-}
-
-/* exported as herror: BSD 4.3 */
-extern "C" void
-cygwin_herror (const char *s)
-{
- __try
- {
- if (cygheap->fdtab.not_open (2))
- return;
-
- if (s)
- {
- write (2, s, strlen (s));
- write (2, ": ", 2);
- }
-
- const char *h_errstr = cygwin_hstrerror (h_errno);
-
- if (!h_errstr)
- switch (h_errno)
- {
- case NETDB_INTERNAL:
- h_errstr = "Resolver internal error";
- break;
- case NETDB_SUCCESS:
- h_errstr = "Resolver error 0 (no error)";
- break;
- default:
- h_errstr = "Unknown resolver error";
- break;
- }
- write (2, h_errstr, strlen (h_errstr));
- write (2, "\n", 1);
- }
- __except (NO_ERROR) {}
- __endtry
-}
-
-/* exported as getpeername: standards? */
-extern "C" int
-cygwin_getpeername (int fd, struct sockaddr *name, socklen_t *len)
-{
- int res = -1;
- fhandler_socket *fh = NULL;
-
- __try
- {
- fh = get (fd);
- if (fh)
- res = fh->getpeername (name, len);
- }
- __except (EFAULT) {}
- __endtry
- syscall_printf ("%R = getpeername(%d) %p", res, fd,
- (fh ? fh->get_socket () : (SOCKET) -1));
- return res;
-}
-
-/* exported as recv: standards? */
-extern "C" ssize_t
-cygwin_recv (int fd, void *buf, size_t len, int flags)
-{
- ssize_t res = -1;
-
- pthread_testcancel ();
-
- __try
- {
- fhandler_socket *fh = get (fd);
- if (fh)
- /* Originally we shortcircuited here if res == 0.
- Allow 0 bytes buffer. This is valid in POSIX and handled in
- fhandler_socket::recv_internal. If we shortcircuit, we fail
- to deliver valid error conditions. */
- res = fh->recvfrom (buf, len, flags, NULL, NULL);
- }
- __except (EFAULT) {}
- __endtry
- syscall_printf ("%lR = recv(%d, %p, %ld, %y)", res, fd, buf, len, flags);
- return res;
-}
-
-/* exported as send: standards? */
-extern "C" ssize_t
-cygwin_send (int fd, const void *buf, size_t len, int flags)
-{
- ssize_t res = -1;
-
- pthread_testcancel ();
-
- __try
- {
- fhandler_socket *fh = get (fd);
- if (fh)
- res = fh->sendto (buf, len, flags, NULL, 0);
- }
- __except (EFAULT)
- __endtry
- syscall_printf ("%lR = send(%d, %p, %ld, %y)", res, fd, buf, len, flags);
- return res;
-}
-
-/* getdomainname: standards? */
-extern "C" int
-getdomainname (char *domain, size_t len)
-{
- __try
- {
- PFIXED_INFO info = NULL;
- ULONG size = 0;
-
- if (GetNetworkParams(info, &size) == ERROR_BUFFER_OVERFLOW
- && (info = (PFIXED_INFO) alloca(size))
- && GetNetworkParams(info, &size) == ERROR_SUCCESS)
- {
- strncpy(domain, info->DomainName, len);
- return 0;
- }
- __seterrno ();
- }
- __except (EFAULT)
- __endtry
- return -1;
-}
-
-/* Fill out an ifconf struct. */
-
-#ifndef IN_LOOPBACK
-#define IN_LOOPBACK(a) ((((long int) (a)) & 0xff000000) == 0x7f000000)
-#endif
-
-static int in6_are_prefix_equal (struct in6_addr *, struct in6_addr *, int);
-
-static int in_are_prefix_equal (struct in_addr *p1, struct in_addr *p2, int len)
-{
- if (0 > len || len > 32)
- return 0;
- uint32_t pfxmask = 0xffffffff << (32 - len);
- return (ntohl (p1->s_addr) & pfxmask) == (ntohl (p2->s_addr) & pfxmask);
-}
-
-extern "C" int
-ip_addr_prefix (PIP_ADAPTER_UNICAST_ADDRESS pua, PIP_ADAPTER_PREFIX pap)
-{
- if (wincap.has_gaa_on_link_prefix ())
- return (int) ((PIP_ADAPTER_UNICAST_ADDRESS_LH) pua)->OnLinkPrefixLength;
- switch (pua->Address.lpSockaddr->sa_family)
- {
- case AF_INET:
- /* Prior to Vista, the loopback prefix is not available. */
- if (IN_LOOPBACK (ntohl (((struct sockaddr_in *)
- pua->Address.lpSockaddr)->sin_addr.s_addr)))
- return 8;
- for ( ; pap; pap = pap->Next)
- if (in_are_prefix_equal (
- &((struct sockaddr_in *) pua->Address.lpSockaddr)->sin_addr,
- &((struct sockaddr_in *) pap->Address.lpSockaddr)->sin_addr,
- pap->PrefixLength))
- return pap->PrefixLength;
- break;
- case AF_INET6:
- /* Prior to Vista, the loopback prefix is not available. */
- if (IN6_IS_ADDR_LOOPBACK (&((struct sockaddr_in6 *)
- pua->Address.lpSockaddr)->sin6_addr))
- return 128;
- for ( ; pap; pap = pap->Next)
- if (in6_are_prefix_equal (
- &((struct sockaddr_in6 *) pua->Address.lpSockaddr)->sin6_addr,
- &((struct sockaddr_in6 *) pap->Address.lpSockaddr)->sin6_addr,
- pap->PrefixLength))
- return pap->PrefixLength;
- break;
- default:
- break;
- }
- return 0;
-}
-
-#ifndef GAA_FLAG_INCLUDE_ALL_INTERFACES
-#define GAA_FLAG_INCLUDE_ALL_INTERFACES 0x0100
-#endif
-
-struct gaa_wa {
- ULONG family;
- PIP_ADAPTER_ADDRESSES *pa_ret;
-};
-
-DWORD WINAPI
-call_gaa (LPVOID param)
-{
- DWORD ret, size = 0;
- gaa_wa *p = (gaa_wa *) param;
- PIP_ADAPTER_ADDRESSES pa0 = NULL;
-
- if (!p->pa_ret)
- return GetAdaptersAddresses (p->family, GAA_FLAG_INCLUDE_PREFIX
- | GAA_FLAG_INCLUDE_ALL_INTERFACES,
- NULL, NULL, &size);
- do
- {
- ret = GetAdaptersAddresses (p->family, GAA_FLAG_INCLUDE_PREFIX
- | GAA_FLAG_INCLUDE_ALL_INTERFACES,
- NULL, pa0, &size);
- if (ret == ERROR_BUFFER_OVERFLOW
- && !(pa0 = (PIP_ADAPTER_ADDRESSES) realloc (pa0, size)))
- break;
- }
- while (ret == ERROR_BUFFER_OVERFLOW);
- if (pa0)
- {
- if (ret != ERROR_SUCCESS)
- {
- free (pa0);
- *p->pa_ret = NULL;
- }
- else
- *p->pa_ret = pa0;
- }
- return ret;
-}
-
-bool
-get_adapters_addresses (PIP_ADAPTER_ADDRESSES *pa_ret, ULONG family)
-{
- DWORD ret;
- gaa_wa param = { family, pa_ret };
-
- if ((uintptr_t) &param >= (uintptr_t) 0x80000000L
- && wincap.has_gaa_largeaddress_bug ())
- {
- /* In Windows Vista and Windows 7 under WOW64, GetAdaptersAddresses fails
- if it's running in a thread with a stack located in the large address
- area. So, if we're running in a pthread with such a stack, we call
- GetAdaptersAddresses in a child thread with an OS-allocated stack.
- The OS allocates stacks bottom up, so chances are good that the new
- stack will be located in the lower address area. */
- HANDLE thr = CreateThread (NULL, 0, call_gaa, &param, 0, NULL);
- if (!thr)
- {
- debug_printf ("CreateThread: %E");
- return false;
- }
- WaitForSingleObject (thr, INFINITE);
- GetExitCodeThread (thr, &ret);
- CloseHandle (thr);
- }
- else
- ret = call_gaa (&param);
- return ret == ERROR_SUCCESS || (!pa_ret && ret == ERROR_BUFFER_OVERFLOW);
-}
-
-#define WS_IFF_UP 1
-#define WS_IFF_BROADCAST 2
-#define WS_IFF_LOOPBACK 4
-#define WS_IFF_POINTTOPOINT 8
-#define WS_IFF_MULTICAST 16
-
-static inline short
-convert_ifr_flags (u_long ws_flags)
-{
- return (ws_flags & (WS_IFF_UP | WS_IFF_BROADCAST))
- | ((ws_flags & (WS_IFF_LOOPBACK | WS_IFF_POINTTOPOINT)) << 1)
- | ((ws_flags & WS_IFF_MULTICAST) << 8);
-}
-
-static u_long
-get_routedst (DWORD if_index)
-{
- PMIB_IPFORWARDTABLE pift;
- ULONG size = 0;
- if (GetIpForwardTable (NULL, &size, FALSE) == ERROR_INSUFFICIENT_BUFFER
- && (pift = (PMIB_IPFORWARDTABLE) alloca (size))
- && GetIpForwardTable (pift, &size, FALSE) == NO_ERROR)
- for (DWORD i = 0; i < pift->dwNumEntries; ++i)
- {
- if (pift->table[i].dwForwardIfIndex == if_index
- && pift->table[i].dwForwardMask == INADDR_BROADCAST)
- return pift->table[i].dwForwardDest;
- }
- return INADDR_ANY;
-}
-
-struct ifall {
- struct ifaddrs ifa_ifa;
- char ifa_name[IFNAMSIZ];
- struct sockaddr_storage ifa_addr;
- struct sockaddr_storage ifa_brddstaddr;
- struct sockaddr_storage ifa_netmask;
- struct sockaddr ifa_hwaddr;
- int ifa_metric;
- int ifa_mtu;
- int ifa_ifindex;
- struct ifreq_frndlyname ifa_frndlyname;
-};
-
-static unsigned int
-get_flags (PIP_ADAPTER_ADDRESSES pap)
-{
- unsigned int flags = IFF_UP;
- if (pap->IfType == IF_TYPE_SOFTWARE_LOOPBACK)
- flags |= IFF_LOOPBACK;
- else if (pap->IfType == IF_TYPE_PPP
- || pap->IfType == IF_TYPE_SLIP)
- flags |= IFF_POINTOPOINT | IFF_NOARP;
- if (!(pap->Flags & IP_ADAPTER_NO_MULTICAST))
- flags |= IFF_MULTICAST;
- if (pap->OperStatus == IfOperStatusUp
- || pap->OperStatus == IfOperStatusUnknown)
- flags |= IFF_RUNNING;
- if (pap->OperStatus != IfOperStatusLowerLayerDown)
- flags |= IFF_LOWER_UP;
- if (pap->OperStatus == IfOperStatusDormant)
- flags |= IFF_DORMANT;
- return flags;
-}
-
-static ULONG
-get_ipv4fromreg_ipcnt (const char *name)
-{
- WCHAR regkey[256], *c;
-
- c = wcpcpy (regkey, L"Tcpip\\Parameters\\Interfaces\\");
- sys_mbstowcs (c, 220, name);
- if (!NT_SUCCESS (RtlCheckRegistryKey (RTL_REGISTRY_SERVICES, regkey)))
- return 0;
-
- ULONG ifs = 1;
- DWORD dhcp = 0;
- UNICODE_STRING uipa = { 0, 0, NULL };
- RTL_QUERY_REGISTRY_TABLE tab[3] = {
- { NULL, RTL_QUERY_REGISTRY_DIRECT | RTL_QUERY_REGISTRY_NOSTRING,
- L"EnableDHCP", &dhcp, REG_NONE, NULL, 0 },
- { NULL, RTL_QUERY_REGISTRY_DIRECT | RTL_QUERY_REGISTRY_NOEXPAND,
- L"IPAddress", &uipa, REG_NONE, NULL, 0 },
- { NULL, 0, NULL, NULL, 0, NULL, 0 }
- };
-
- /* If DHCP is used, we have only one address. */
- if (NT_SUCCESS (RtlQueryRegistryValues (RTL_REGISTRY_SERVICES, regkey, tab,
- NULL, NULL))
- && uipa.Buffer)
- {
- if (dhcp == 0)
- for (ifs = 0, c = uipa.Buffer; *c; c += wcslen (c) + 1)
- ifs++;
- RtlFreeUnicodeString (&uipa);
- }
- return ifs;
-}
-
-static void
-get_ipv4fromreg (struct ifall *ifp, const char *name, DWORD idx)
-{
- WCHAR regkey[256], *c;
-
- c = wcpcpy (regkey, L"Tcpip\\Parameters\\Interfaces\\");
- sys_mbstowcs (c, 220, name);
- if (!NT_SUCCESS (RtlCheckRegistryKey (RTL_REGISTRY_SERVICES, regkey)))
- return;
-
- ULONG ifs;
- DWORD dhcp = 0;
- UNICODE_STRING udipa = { 0, 0, NULL };
- UNICODE_STRING udsub = { 0, 0, NULL };
- UNICODE_STRING uipa = { 0, 0, NULL };
- UNICODE_STRING usub = { 0, 0, NULL };
- RTL_QUERY_REGISTRY_TABLE tab[6] = {
- { NULL, RTL_QUERY_REGISTRY_DIRECT | RTL_QUERY_REGISTRY_NOSTRING,
- L"EnableDHCP", &dhcp, REG_NONE, NULL, 0 },
- { NULL, RTL_QUERY_REGISTRY_DIRECT | RTL_QUERY_REGISTRY_NOEXPAND,
- L"DhcpIPAddress", &udipa, REG_NONE, NULL, 0 },
- { NULL, RTL_QUERY_REGISTRY_DIRECT | RTL_QUERY_REGISTRY_NOEXPAND,
- L"DhcpSubnetMask", &udsub, REG_NONE, NULL, 0 },
- { NULL, RTL_QUERY_REGISTRY_DIRECT | RTL_QUERY_REGISTRY_NOEXPAND,
- L"IPAddress", &uipa, REG_NONE, NULL, 0 },
- { NULL, RTL_QUERY_REGISTRY_DIRECT | RTL_QUERY_REGISTRY_NOEXPAND,
- L"SubnetMask", &usub, REG_NONE, NULL, 0 },
- { NULL, 0, NULL, NULL, 0, NULL, 0 }
- };
-
- if (NT_SUCCESS (RtlQueryRegistryValues (RTL_REGISTRY_SERVICES, regkey, tab,
- NULL, NULL)))
- {
-# define addr ((struct sockaddr_in *) &ifp->ifa_addr)
-# define mask ((struct sockaddr_in *) &ifp->ifa_netmask)
-# define brdc ((struct sockaddr_in *) &ifp->ifa_brddstaddr)
-# define inet_uton(u, a) \
- { \
- char t[64]; \
- sys_wcstombs (t, 64, (u)); \
- cygwin_inet_aton (t, (a)); \
- }
- /* If DHCP is used, we have only one address. */
- if (dhcp)
- {
- if (udipa.Buffer)
- inet_uton (udipa.Buffer, &addr->sin_addr);
- if (udsub.Buffer)
- inet_uton (udsub.Buffer, &mask->sin_addr);
- }
- else
- {
- if (uipa.Buffer)
- {
- for (ifs = 0, c = uipa.Buffer; *c && ifs < idx;
- c += wcslen (c) + 1)
- ifs++;
- if (*c)
- inet_uton (c, &addr->sin_addr);
- }
- if (usub.Buffer)
- {
- for (ifs = 0, c = usub.Buffer; *c && ifs < idx;
- c += wcslen (c) + 1)
- ifs++;
- if (*c)
- inet_uton (c, &mask->sin_addr);
- }
- }
- if (ifp->ifa_ifa.ifa_flags & IFF_BROADCAST)
- brdc->sin_addr.s_addr = (addr->sin_addr.s_addr
- & mask->sin_addr.s_addr)
- | ~mask->sin_addr.s_addr;
-#undef addr
-#undef mask
-#undef brdc
-#undef inet_uton
- if (udipa.Buffer)
- RtlFreeUnicodeString (&udipa);
- if (udsub.Buffer)
- RtlFreeUnicodeString (&udsub);
- if (uipa.Buffer)
- RtlFreeUnicodeString (&uipa);
- if (usub.Buffer)
- RtlFreeUnicodeString (&usub);
- }
-}
-
-static void
-get_friendlyname (struct ifall *ifp, PIP_ADAPTER_ADDRESSES pap)
-{
- struct ifreq_frndlyname *iff = (struct ifreq_frndlyname *)
- &ifp->ifa_frndlyname;
- iff->ifrf_len = sys_wcstombs (iff->ifrf_friendlyname,
- IFRF_FRIENDLYNAMESIZ,
- pap->FriendlyName);
-}
-
-static void
-get_hwaddr (struct ifall *ifp, PIP_ADAPTER_ADDRESSES pap)
-{
- for (UINT i = 0; i < IFHWADDRLEN; ++i)
- if (i >= pap->PhysicalAddressLength)
- ifp->ifa_hwaddr.sa_data[i] = '\0';
- else
- ifp->ifa_hwaddr.sa_data[i] = pap->PhysicalAddress[i];
-}
-
-/*
- * Generate short, unique interface name for usage with aged
- * applications still using the old pre-1.7 ifreq structure.
- */
-static void
-gen_old_if_name (char *name, PIP_ADAPTER_ADDRESSES pap, DWORD idx)
-{
- /* Note: The returned name must be < 16 chars. */
- const char *prefix;
-
- switch (pap->IfType)
- {
- case IF_TYPE_ISO88025_TOKENRING:
- prefix = "tok";
- break;
- case IF_TYPE_PPP:
- prefix = "ppp";
- break;
- case IF_TYPE_SOFTWARE_LOOPBACK:
- prefix = "lo";
- break;
- case IF_TYPE_ATM:
- prefix = "atm";
- break;
- case IF_TYPE_IEEE80211:
- prefix = "wlan";
- break;
- case IF_TYPE_SLIP:
- case IF_TYPE_RS232:
- case IF_TYPE_MODEM:
- prefix = "slp";
- break;
- case IF_TYPE_TUNNEL:
- prefix = "tun";
- break;
- default:
- prefix = "eth";
- break;
- }
- if (idx)
- __small_sprintf (name, "%s%u:%u", prefix, pap->IfIndex, idx);
- else
- __small_sprintf (name, "%s%u", prefix, pap->IfIndex, idx);
-}
-
-/*
- * Get network interfaces. Use IP Helper function GetAdaptersAddresses.
- */
-static struct ifall *
-get_ifs (ULONG family)
-{
- PIP_ADAPTER_ADDRESSES pa0 = NULL, pap;
- PIP_ADAPTER_UNICAST_ADDRESS pua;
- int cnt = 0;
- struct ifall *ifret = NULL, *ifp;
- struct sockaddr_in *if_sin;
- struct sockaddr_in6 *if_sin6;
-
- if (!get_adapters_addresses (&pa0, family))
- goto done;
-
- for (pap = pa0; pap; pap = pap->Next)
- if (!pap->FirstUnicastAddress)
- {
- /* FirstUnicastAddress is NULL for interfaces which are disconnected.
- Fetch number of configured IPv4 addresses from registry and
- store in an unused member of the adapter addresses structure. */
- pap->Ipv6IfIndex = get_ipv4fromreg_ipcnt (pap->AdapterName);
- cnt += pap->Ipv6IfIndex;
- }
- else for (pua = pap->FirstUnicastAddress; pua; pua = pua->Next)
- ++cnt;
-
- if (!(ifret = (struct ifall *) calloc (cnt, sizeof (struct ifall))))
- goto done;
- ifp = ifret;
-
- for (pap = pa0; pap; pap = pap->Next)
- {
- DWORD idx = 0;
- if (!pap->FirstUnicastAddress)
- for (idx = 0; idx < pap->Ipv6IfIndex; ++idx)
- {
- /* Next in chain */
- ifp->ifa_ifa.ifa_next = (struct ifaddrs *) &ifp[1].ifa_ifa;
- /* Interface name */
-
- if (CYGWIN_VERSION_CHECK_FOR_OLD_IFREQ)
- gen_old_if_name (ifp->ifa_name, pap, idx);
- else if (idx)
- __small_sprintf (ifp->ifa_name, "%s:%u", pap->AdapterName, idx);
- else
- strcpy (ifp->ifa_name, pap->AdapterName);
- ifp->ifa_ifa.ifa_name = ifp->ifa_name;
- /* Flags */
- ifp->ifa_ifa.ifa_flags = get_flags (pap);
- if (pap->IfType != IF_TYPE_PPP
- && pap->IfType != IF_TYPE_SOFTWARE_LOOPBACK)
- ifp->ifa_ifa.ifa_flags |= IFF_BROADCAST;
- /* Address */
- ifp->ifa_addr.ss_family = AF_INET;
- ifp->ifa_ifa.ifa_addr = (struct sockaddr *) &ifp->ifa_addr;
- /* Broadcast/Destination address */
- ifp->ifa_brddstaddr.ss_family = AF_INET;
- ifp->ifa_ifa.ifa_dstaddr = NULL;
- /* Netmask */
- ifp->ifa_netmask.ss_family = AF_INET;
- ifp->ifa_ifa.ifa_netmask = (struct sockaddr *) &ifp->ifa_netmask;
- /* Try to fetch real IPv4 address information from registry. */
- get_ipv4fromreg (ifp, pap->AdapterName, idx);
- /* Hardware address */
- get_hwaddr (ifp, pap);
- /* Metric */
- ifp->ifa_metric = 1;
- /* MTU */
- ifp->ifa_mtu = pap->Mtu;
- /* Interface index */
- ifp->ifa_ifindex = pap->IfIndex;
- /* Friendly name */
- get_friendlyname (ifp, pap);
- ++ifp;
- }
- else
- for (idx = 0, pua = pap->FirstUnicastAddress; pua; pua = pua->Next)
- {
- struct sockaddr *sa = (struct sockaddr *) pua->Address.lpSockaddr;
-# define sin ((struct sockaddr_in *) sa)
-# define sin6 ((struct sockaddr_in6 *) sa)
- size_t sa_size = (sa->sa_family == AF_INET6
- ? sizeof *sin6 : sizeof *sin);
- /* Next in chain */
- ifp->ifa_ifa.ifa_next = (struct ifaddrs *) &ifp[1].ifa_ifa;
- /* Interface name */
- if (CYGWIN_VERSION_CHECK_FOR_OLD_IFREQ)
- gen_old_if_name (ifp->ifa_name, pap, idx);
- else if (sa->sa_family == AF_INET && idx)
- __small_sprintf (ifp->ifa_name, "%s:%u", pap->AdapterName, idx);
- else
- strcpy (ifp->ifa_name, pap->AdapterName);
- if (sa->sa_family == AF_INET)
- ++idx;
- ifp->ifa_ifa.ifa_name = ifp->ifa_name;
- /* Flags */
- ifp->ifa_ifa.ifa_flags = get_flags (pap);
- if (sa->sa_family == AF_INET
- && pap->IfType != IF_TYPE_SOFTWARE_LOOPBACK
- && pap->IfType != IF_TYPE_PPP)
- ifp->ifa_ifa.ifa_flags |= IFF_BROADCAST;
- /* Address */
- memcpy (&ifp->ifa_addr, sa, sa_size);
- ifp->ifa_ifa.ifa_addr = (struct sockaddr *) &ifp->ifa_addr;
- /* Netmask */
- int prefix = ip_addr_prefix (pua, pap->FirstPrefix);
- switch (sa->sa_family)
- {
- case AF_INET:
- if_sin = (struct sockaddr_in *) &ifp->ifa_netmask;
- if_sin->sin_addr.s_addr = htonl (UINT32_MAX << (32 - prefix));
- if_sin->sin_family = AF_INET;
- break;
- case AF_INET6:
- if_sin6 = (struct sockaddr_in6 *) &ifp->ifa_netmask;
- for (cnt = 0; cnt < 4 && prefix > 0; ++cnt, prefix -= 32)
- {
- if_sin6->sin6_addr.s6_addr32[cnt] = UINT32_MAX;
- if (prefix < 32)
- if_sin6->sin6_addr.s6_addr32[cnt] <<= 32 - prefix;
- }
- break;
- }
- ifp->ifa_ifa.ifa_netmask = (struct sockaddr *) &ifp->ifa_netmask;
- if (pap->IfType == IF_TYPE_PPP)
- {
- /* Destination address */
- if (sa->sa_family == AF_INET)
- {
- if_sin = (struct sockaddr_in *) &ifp->ifa_brddstaddr;
- if_sin->sin_addr.s_addr = get_routedst (pap->IfIndex);
- if_sin->sin_family = AF_INET;
- }
- else
- /* FIXME: No official way to get the dstaddr for ipv6? */
- memcpy (&ifp->ifa_addr, sa, sa_size);
- ifp->ifa_ifa.ifa_dstaddr = (struct sockaddr *)
- &ifp->ifa_brddstaddr;
- }
- else
- {
- /* Broadcast address */
- if (sa->sa_family == AF_INET)
- {
- if_sin = (struct sockaddr_in *) &ifp->ifa_brddstaddr;
- uint32_t mask =
- ((struct sockaddr_in *) &ifp->ifa_netmask)->sin_addr.s_addr;
- if_sin->sin_addr.s_addr = (sin->sin_addr.s_addr & mask)
- | ~mask;
- if_sin->sin_family = AF_INET;
- ifp->ifa_ifa.ifa_broadaddr = (struct sockaddr *)
- &ifp->ifa_brddstaddr;
- }
- else /* No IPv6 broadcast */
- ifp->ifa_ifa.ifa_broadaddr = NULL;
- }
- /* Hardware address */
- get_hwaddr (ifp, pap);
- /* Metric */
- if (wincap.has_gaa_on_link_prefix ())
- ifp->ifa_metric = (sa->sa_family == AF_INET
- ? ((PIP_ADAPTER_ADDRESSES_LH) pap)->Ipv4Metric
- : ((PIP_ADAPTER_ADDRESSES_LH) pap)->Ipv6Metric);
- else
- ifp->ifa_metric = 1;
- /* MTU */
- ifp->ifa_mtu = pap->Mtu;
- /* Interface index */
- ifp->ifa_ifindex = pap->IfIndex;
- /* Friendly name */
- get_friendlyname (ifp, pap);
- ++ifp;
-# undef sin
-# undef sin6
- }
- }
- /* Since every entry is set to the next entry, the last entry points to an
- invalid next entry now. Fix it retroactively. */
- if (ifp > ifret)
- ifp[-1].ifa_ifa.ifa_next = NULL;
-
-done:
- if (pa0)
- free (pa0);
- return ifret;
-}
-
-extern "C" int
-getifaddrs (struct ifaddrs **ifap)
-{
- if (!ifap)
- {
- set_errno (EINVAL);
- return -1;
- }
- struct ifall *ifp;
- ifp = get_ifs (AF_UNSPEC);
- *ifap = &ifp->ifa_ifa;
- return ifp ? 0 : -1;
-}
-
-extern "C" void
-freeifaddrs (struct ifaddrs *ifp)
-{
- if (ifp)
- free (ifp);
-}
-
-int
-get_ifconf (struct ifconf *ifc, int what)
-{
- __try
- {
- /* Ensure we have space for at least one struct ifreqs, fail if not. */
- if (ifc->ifc_len < (int) sizeof (struct ifreq))
- {
- set_errno (EINVAL);
- __leave;
- }
-
- struct ifall *ifret, *ifp;
- ifret = get_ifs (AF_INET);
- if (!ifret)
- __leave;
-
- struct sockaddr_in *sin;
- struct ifreq *ifr = ifc->ifc_req;
- int cnt = 0;
- for (ifp = ifret; ifp; ifp = (struct ifall *) ifp->ifa_ifa.ifa_next)
- {
- ++cnt;
- strcpy (ifr->ifr_name, ifp->ifa_name);
- switch (what)
- {
- case SIOCGIFFLAGS:
- ifr->ifr_flags = ifp->ifa_ifa.ifa_flags;
- break;
- case SIOCGIFCONF:
- case SIOCGIFADDR:
- sin = (struct sockaddr_in *) &ifr->ifr_addr;
- memcpy (sin, &ifp->ifa_addr, sizeof *sin);
- break;
- case SIOCGIFNETMASK:
- sin = (struct sockaddr_in *) &ifr->ifr_netmask;
- memcpy (sin, &ifp->ifa_netmask, sizeof *sin);
- break;
- case SIOCGIFDSTADDR:
- sin = (struct sockaddr_in *) &ifr->ifr_dstaddr;
- if (ifp->ifa_ifa.ifa_flags & IFF_POINTOPOINT)
- memcpy (sin, &ifp->ifa_brddstaddr, sizeof *sin);
- else /* Return addr as on Linux. */
- memcpy (sin, &ifp->ifa_addr, sizeof *sin);
- break;
- case SIOCGIFBRDADDR:
- sin = (struct sockaddr_in *) &ifr->ifr_broadaddr;
- if (!(ifp->ifa_ifa.ifa_flags & IFF_POINTOPOINT))
- memcpy (sin, &ifp->ifa_brddstaddr, sizeof *sin);
- else
- {
- sin->sin_addr.s_addr = INADDR_ANY;
- sin->sin_family = AF_INET;
- sin->sin_port = 0;
- }
- break;
- case SIOCGIFHWADDR:
- memcpy (&ifr->ifr_hwaddr, &ifp->ifa_hwaddr,
- sizeof ifr->ifr_hwaddr);
- break;
- case SIOCGIFMETRIC:
- ifr->ifr_metric = ifp->ifa_metric;
- break;
- case SIOCGIFMTU:
- ifr->ifr_mtu = ifp->ifa_mtu;
- break;
- case SIOCGIFINDEX:
- ifr->ifr_ifindex = ifp->ifa_ifindex;
- break;
- case SIOCGIFFRNDLYNAM:
- memcpy (ifr->ifr_frndlyname, &ifp->ifa_frndlyname,
- sizeof (struct ifreq_frndlyname));
- }
- if ((caddr_t) ++ifr >
- ifc->ifc_buf + ifc->ifc_len - sizeof (struct ifreq))
- break;
- }
- /* Set the correct length */
- ifc->ifc_len = cnt * sizeof (struct ifreq);
- free (ifret);
- return 0;
- }
- __except (EFAULT) {}
- __endtry
- return -1;
-}
-
-extern "C" unsigned
-if_nametoindex (const char *name)
-{
- PIP_ADAPTER_ADDRESSES pa0 = NULL, pap;
- unsigned index = 0;
-
- __try
- {
- if (get_adapters_addresses (&pa0, AF_UNSPEC))
- {
- char lname[IF_NAMESIZE], *c;
-
- lname[0] = '\0';
- strncat (lname, name, IF_NAMESIZE - 1);
- if (lname[0] == '{' && (c = strchr (lname, ':')))
- *c = '\0';
- for (pap = pa0; pap; pap = pap->Next)
- if (strcasematch (lname, pap->AdapterName))
- {
- index = pap->Ipv6IfIndex ?: pap->IfIndex;
- break;
- }
- free (pa0);
- }
- }
- __except (EFAULT)
- {
- index = 0;
- }
- __endtry
- return index;
-}
-
-extern "C" char *
-if_indextoname (unsigned ifindex, char *ifname)
-{
- PIP_ADAPTER_ADDRESSES pa0 = NULL, pap;
- char *name = NULL;
-
- __try
- {
- if (get_adapters_addresses (&pa0, AF_UNSPEC))
- {
- for (pap = pa0; pap; pap = pap->Next)
- if (ifindex == (pap->Ipv6IfIndex ?: pap->IfIndex))
- {
- /* Unfortunately the pre-Vista IPv6 stack has a distinct
- loopback device with the same Ipv6IfIndex as the IfIndex
- of the IPv4 loopback device, but with a different adapter
- name. For consistency with /proc/net/if_inet6, try to find
- the IPv6 loopback device and use that adapter name instead.
- We identify the loopback device by its IfIndex of 1. */
- if (pap->IfIndex == 1 && pap->Ipv6IfIndex == 0)
- for (PIP_ADAPTER_ADDRESSES pap2 = pa0;
- pap2;
- pap2 = pap2->Next)
- if (pap2->Ipv6IfIndex == 1)
- {
- pap = pap2;
- break;
- }
- name = strcpy (ifname, pap->AdapterName);
- break;
- }
- free (pa0);
- }
- else
- set_errno (ENXIO);
- }
- __except (EFAULT) {}
- __endtry
- return name;
-}
-
-extern "C" struct if_nameindex *
-if_nameindex (void)
-{
- PIP_ADAPTER_ADDRESSES pa0 = NULL, pap;
- struct if_nameindex *iflist = NULL;
- char (*ifnamelist)[IF_NAMESIZE];
-
- __try
- {
- if (get_adapters_addresses (&pa0, AF_UNSPEC))
- {
- int cnt = 0;
- for (pap = pa0; pap; pap = pap->Next)
- ++cnt;
- iflist = (struct if_nameindex *)
- malloc ((cnt + 1) * sizeof (struct if_nameindex)
- + cnt * IF_NAMESIZE);
- if (!iflist)
- set_errno (ENOBUFS);
- else
- {
- ifnamelist = (char (*)[IF_NAMESIZE]) (iflist + cnt + 1);
- for (pap = pa0, cnt = 0; pap; pap = pap->Next)
- {
- for (int i = 0; i < cnt; ++i)
- if (iflist[i].if_index
- == (pap->Ipv6IfIndex ?: pap->IfIndex))
- goto outer_loop;
- iflist[cnt].if_index = pap->Ipv6IfIndex ?: pap->IfIndex;
- strcpy (iflist[cnt].if_name = ifnamelist[cnt],
- pap->AdapterName);
- /* See comment in if_indextoname. */
- if (pap->IfIndex == 1 && pap->Ipv6IfIndex == 0)
- for (PIP_ADAPTER_ADDRESSES pap2 = pa0;
- pap2;
- pap2 = pap2->Next)
- if (pap2->Ipv6IfIndex == 1)
- {
- strcpy (ifnamelist[cnt], pap2->AdapterName);
- break;
- }
- ++cnt;
- outer_loop:
- ;
- }
- iflist[cnt].if_index = 0;
- iflist[cnt].if_name = NULL;
- }
- free (pa0);
- }
- else
- set_errno (ENXIO);
- }
- __except (EFAULT) {}
- __endtry
- return iflist;
-}
-
-extern "C" void
-if_freenameindex (struct if_nameindex *ptr)
-{
- free (ptr);
-}
-
-#define PORT_LOW (IPPORT_EFSSERVER + 1)
-#define PORT_HIGH (IPPORT_RESERVED - 1)
-#define NUM_PORTS (PORT_HIGH - PORT_LOW + 1)
-
-extern "C" int
-cygwin_bindresvport_sa (int fd, struct sockaddr *sa)
-{
- struct sockaddr_storage sst;
- struct sockaddr_in *sin = NULL;
- struct sockaddr_in6 *sin6 = NULL;
- in_port_t port;
- socklen_t salen;
- int ret = -1;
-
- __try
- {
- fhandler_socket *fh = get (fd);
- if (!fh)
- __leave;
-
- if (!sa)
- {
- sa = (struct sockaddr *) &sst;
- memset (&sst, 0, sizeof sst);
- sa->sa_family = fh->get_addr_family ();
- }
-
- switch (sa->sa_family)
- {
- case AF_INET:
- salen = sizeof (struct sockaddr_in);
- sin = (struct sockaddr_in *) sa;
- port = sin->sin_port;
- break;
- case AF_INET6:
- salen = sizeof (struct sockaddr_in6);
- sin6 = (struct sockaddr_in6 *) sa;
- port = sin6->sin6_port;
- break;
- default:
- set_errno (EPFNOSUPPORT);
- __leave;
- }
-
- /* If a non-zero port number is given, try this first. If that succeeds,
- or if the error message is serious, return. */
- if (port)
- {
- ret = fh->bind (sa, salen);
- if (!ret || (get_errno () != EADDRINUSE && get_errno () != EINVAL))
- __leave;
- }
-
- LONG myport;
-
- for (int i = 0; i < NUM_PORTS; i++)
- {
- while ((myport = InterlockedExchange (
- &cygwin_shared->last_used_bindresvport, -1)) == -1)
- yield ();
- if (myport == 0 || --myport < PORT_LOW)
- myport = PORT_HIGH;
- InterlockedExchange (&cygwin_shared->last_used_bindresvport, myport);
-
- if (sa->sa_family == AF_INET6)
- sin6->sin6_port = htons (myport);
- else
- sin->sin_port = htons (myport);
- if (!(ret = fh->bind (sa, salen)))
- break;
- if (get_errno () != EADDRINUSE && get_errno () != EINVAL)
- break;
- }
-
- }
- __except (EFAULT) {}
- __endtry
- return ret;
-}
-
-
-extern "C" int
-cygwin_bindresvport (int fd, struct sockaddr_in *sin)
-{
- return cygwin_bindresvport_sa (fd, (struct sockaddr *) sin);
-}
-
-/* socketpair: standards? */
-/* Win32 supports AF_INET only, so ignore domain and protocol arguments */
-extern "C" int
-socketpair (int family, int type, int protocol, int *sb)
-{
- int res = -1;
- SOCKET insock = INVALID_SOCKET;
- SOCKET outsock = INVALID_SOCKET;
- SOCKET newsock = INVALID_SOCKET;
- struct sockaddr_in sock_in, sock_out;
- int len;
-
- __try
- {
- int flags = type & _SOCK_FLAG_MASK;
- type &= ~_SOCK_FLAG_MASK;
-
- if (family != AF_LOCAL && family != AF_INET)
- {
- set_errno (EAFNOSUPPORT);
- __leave;
- }
- if (type != SOCK_STREAM && type != SOCK_DGRAM)
- {
- set_errno (EPROTOTYPE);
- __leave;
- }
- if ((flags & ~(SOCK_NONBLOCK | SOCK_CLOEXEC)) != 0)
- {
- set_errno (EINVAL);
- __leave;
- }
- if ((family == AF_LOCAL && protocol != PF_UNSPEC && protocol != PF_LOCAL)
- || (family == AF_INET && protocol != PF_UNSPEC && protocol != PF_INET))
- {
- set_errno (EPROTONOSUPPORT);
- __leave;
- }
-
- /* create the first socket */
- newsock = socket (AF_INET, type, 0);
- if (newsock == INVALID_SOCKET)
- {
- debug_printf ("first socket call failed");
- set_winsock_errno ();
- __leave;
- }
-
- /* bind the socket to any unused port */
- sock_in.sin_family = AF_INET;
- sock_in.sin_port = 0;
- sock_in.sin_addr.s_addr = htonl (INADDR_LOOPBACK);
- if (bind (newsock, (struct sockaddr *) &sock_in, sizeof (sock_in)) < 0)
- {
- debug_printf ("bind failed");
- set_winsock_errno ();
- __leave;
- }
- len = sizeof (sock_in);
- if (getsockname (newsock, (struct sockaddr *) &sock_in, &len) < 0)
- {
- debug_printf ("getsockname error");
- set_winsock_errno ();
- __leave;
- }
-
- /* For stream sockets, create a listener */
- if (type == SOCK_STREAM)
- listen (newsock, 2);
-
- /* create a connecting socket */
- outsock = socket (AF_INET, type, 0);
- if (outsock == INVALID_SOCKET)
- {
- debug_printf ("second socket call failed");
- set_winsock_errno ();
- __leave;
- }
-
- /* For datagram sockets, bind the 2nd socket to an unused address, too */
- if (type == SOCK_DGRAM)
- {
- sock_out.sin_family = AF_INET;
- sock_out.sin_port = 0;
- sock_out.sin_addr.s_addr = htonl (INADDR_LOOPBACK);
- if (bind (outsock, (struct sockaddr *) &sock_out, sizeof (sock_out)) < 0)
- {
- debug_printf ("bind failed");
- set_winsock_errno ();
- __leave;
- }
- len = sizeof (sock_out);
- if (getsockname (outsock, (struct sockaddr *) &sock_out, &len) < 0)
- {
- debug_printf ("getsockname error");
- set_winsock_errno ();
- __leave;
- }
- }
-
- /* Force IP address to loopback */
- sock_in.sin_addr.s_addr = htonl (INADDR_LOOPBACK);
- if (type == SOCK_DGRAM)
- sock_out.sin_addr.s_addr = htonl (INADDR_LOOPBACK);
-
- /* Do a connect */
- if (connect (outsock, (struct sockaddr *) &sock_in, sizeof (sock_in)) < 0)
- {
- debug_printf ("connect error");
- set_winsock_errno ();
- __leave;
- }
-
- if (type == SOCK_STREAM)
- {
- /* For stream sockets, accept the connection and close the listener */
- len = sizeof (sock_in);
- insock = accept (newsock, (struct sockaddr *) &sock_in, &len);
- if (insock == INVALID_SOCKET)
- {
- debug_printf ("accept error");
- set_winsock_errno ();
- __leave;
- }
- closesocket (newsock);
- newsock = INVALID_SOCKET;
- }
- else
- {
- /* For datagram sockets, connect the 2nd socket */
- if (connect (newsock, (struct sockaddr *) &sock_out,
- sizeof (sock_out)) < 0)
- {
- debug_printf ("connect error");
- set_winsock_errno ();
- __leave;
- }
- insock = newsock;
- newsock = INVALID_SOCKET;
- }
-
- cygheap_fdnew sb0;
- const device *dev;
-
- if (family == AF_INET)
- dev = (type == SOCK_STREAM ? tcp_dev : udp_dev);
- else
- dev = (type == SOCK_STREAM ? stream_dev : dgram_dev);
-
- if (sb0 >= 0 && fdsock (sb0, dev, insock))
- {
- ((fhandler_socket *) sb0)->set_addr_family (family);
- ((fhandler_socket *) sb0)->set_socket_type (type);
- ((fhandler_socket *) sb0)->connect_state (connected);
- if (flags & SOCK_NONBLOCK)
- ((fhandler_socket *) sb0)->set_nonblocking (true);
- if (flags & SOCK_CLOEXEC)
- ((fhandler_socket *) sb0)->set_close_on_exec (true);
- if (family == AF_LOCAL && type == SOCK_STREAM)
- ((fhandler_socket *) sb0)->af_local_set_sockpair_cred ();
-
- cygheap_fdnew sb1 (sb0, false);
-
- if (sb1 >= 0 && fdsock (sb1, dev, outsock))
- {
- ((fhandler_socket *) sb1)->set_addr_family (family);
- ((fhandler_socket *) sb1)->set_socket_type (type);
- ((fhandler_socket *) sb1)->connect_state (connected);
- if (flags & SOCK_NONBLOCK)
- ((fhandler_socket *) sb1)->set_nonblocking (true);
- if (flags & SOCK_CLOEXEC)
- ((fhandler_socket *) sb1)->set_close_on_exec (true);
- if (family == AF_LOCAL && type == SOCK_STREAM)
- ((fhandler_socket *) sb1)->af_local_set_sockpair_cred ();
-
- sb[0] = sb0;
- sb[1] = sb1;
- res = 0;
- }
- else
- sb0.release ();
- }
- }
- __except (EFAULT) {}
- __endtry
- syscall_printf ("%R = socketpair(...)", res);
- if (res == -1)
- {
- if (insock != INVALID_SOCKET)
- closesocket (insock);
- if (outsock != INVALID_SOCKET)
- closesocket (outsock);
- if (newsock != INVALID_SOCKET)
- closesocket (newsock);
- }
- return res;
-}
-
-/* sethostent: standards? */
-extern "C" void
-sethostent (int)
-{
-}
-
-/* endhostent: standards? */
-extern "C" void
-endhostent (void)
-{
-}
-
-/* exported as recvmsg: standards? */
-extern "C" ssize_t
-cygwin_recvmsg (int fd, struct msghdr *msg, int flags)
-{
- ssize_t res = -1;
-
- pthread_testcancel ();
-
- __try
- {
- fhandler_socket *fh = get (fd);
- if (fh)
- {
- res = check_iovec_for_read (msg->msg_iov, msg->msg_iovlen);
- /* Originally we shortcircuited here if res == 0.
- Allow 0 bytes buffer. This is valid in POSIX and handled in
- fhandler_socket::recv_internal. If we shortcircuit, we fail
- to deliver valid error conditions and peer address. */
- if (res >= 0)
- res = fh->recvmsg (msg, flags);
- }
- }
- __except (EFAULT)
- {
- res = -1;
- }
- __endtry
- syscall_printf ("%lR = recvmsg(%d, %p, %y)", res, fd, msg, flags);
- return res;
-}
-
-/* exported as sendmsg: standards? */
-extern "C" ssize_t
-cygwin_sendmsg (int fd, const struct msghdr *msg, int flags)
-{
- ssize_t res = -1;
-
- pthread_testcancel ();
-
- __try
- {
- fhandler_socket *fh = get (fd);
- if (fh)
- {
- res = check_iovec_for_write (msg->msg_iov, msg->msg_iovlen);
- if (res >= 0)
- res = fh->sendmsg (msg, flags);
- }
- }
- __except (EFAULT)
- {
- res = -1;
- }
- __endtry
- syscall_printf ("%lR = sendmsg(%d, %p, %y)", res, fd, msg, flags);
- return res;
-}
-
-/* This is from the BIND 4.9.4 release, modified to compile by itself */
-
-/* Copyright (c) 1996 by Internet Software Consortium.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
- * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
- * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
- * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-
-/* int
- * inet_pton4(src, dst)
- * like inet_aton() but without all the hexadecimal and shorthand.
- * return:
- * 1 if `src' is a valid dotted quad, else 0.
- * notice:
- * does not touch `dst' unless it's returning 1.
- * author:
- * Paul Vixie, 1996.
- */
-static int
-inet_pton4 (const char *src, u_char *dst)
-{
- static const char digits[] = "0123456789";
- int saw_digit, octets, ch;
- u_char tmp[INADDRSZ], *tp;
-
- saw_digit = 0;
- octets = 0;
- *(tp = tmp) = 0;
- while ((ch = *src++) != '\0')
- {
- const char *pch;
-
- if ((pch = strchr(digits, ch)) != NULL)
- {
- u_int ret = *tp * 10 + (pch - digits);
-
- if (ret > 255)
- return (0);
- *tp = ret;
- if (! saw_digit)
- {
- if (++octets > 4)
- return (0);
- saw_digit = 1;
- }
- }
- else if (ch == '.' && saw_digit)
- {
- if (octets == 4)
- return (0);
- *++tp = 0;
- saw_digit = 0;
- }
- else
- return (0);
- }
- if (octets < 4)
- return (0);
-
- memcpy(dst, tmp, INADDRSZ);
- return (1);
-}
-
-/* int
- * inet_pton6(src, dst)
- * convert presentation level address to network order binary form.
- * return:
- * 1 if `src' is a valid [RFC1884 2.2] address, else 0.
- * notice:
- * (1) does not touch `dst' unless it's returning 1.
- * (2) :: in a full address is silently ignored.
- * credit:
- * inspired by Mark Andrews.
- * author:
- * Paul Vixie, 1996.
- */
-static int
-inet_pton6 (const char *src, u_char *dst)
-{
- static const char xdigits_l[] = "0123456789abcdef",
- xdigits_u[] = "0123456789ABCDEF";
- u_char tmp[IN6ADDRSZ], *tp, *endp, *colonp;
- const char *xdigits, *curtok;
- int ch, saw_xdigit;
- u_int val;
-
- memset((tp = tmp), 0, IN6ADDRSZ);
- endp = tp + IN6ADDRSZ;
- colonp = NULL;
- /* Leading :: requires some special handling. */
- if (*src == ':')
- if (*++src != ':')
- return (0);
- curtok = src;
- saw_xdigit = 0;
- val = 0;
- while ((ch = *src++) != '\0')
- {
- const char *pch;
-
- if ((pch = strchr((xdigits = xdigits_l), ch)) == NULL)
- pch = strchr((xdigits = xdigits_u), ch);
- if (pch != NULL)
- {
- val <<= 4;
- val |= (pch - xdigits);
- if (val > 0xffff)
- return (0);
- saw_xdigit = 1;
- continue;
- }
- if (ch == ':')
- {
- curtok = src;
- if (!saw_xdigit)
- {
- if (colonp)
- return (0);
- colonp = tp;
- continue;
- }
- if (tp + INT16SZ > endp)
- return (0);
- *tp++ = (u_char) (val >> 8) & 0xff;
- *tp++ = (u_char) val & 0xff;
- saw_xdigit = 0;
- val = 0;
- continue;
- }
- if (ch == '.' && ((tp + INADDRSZ) <= endp) && inet_pton4(curtok, tp) > 0)
- {
- tp += INADDRSZ;
- saw_xdigit = 0;
- break; /* '\0' was seen by inet_pton4(). */
- }
- return (0);
- }
- if (saw_xdigit)
- {
- if (tp + INT16SZ > endp)
- return (0);
- *tp++ = (u_char) (val >> 8) & 0xff;
- *tp++ = (u_char) val & 0xff;
- }
- if (colonp != NULL)
- {
- /*
- * Since some memmove()'s erroneously fail to handle
- * overlapping regions, we'll do the shift by hand.
- */
- const int n = tp - colonp;
- int i;
-
- for (i = 1; i <= n; i++)
- {
- endp[- i] = colonp[n - i];
- colonp[n - i] = 0;
- }
- tp = endp;
- }
- if (tp != endp)
- return (0);
-
- memcpy(dst, tmp, IN6ADDRSZ);
- return (1);
-}
-
-/* int
- * inet_pton(af, src, dst)
- * convert from presentation format (which usually means ASCII printable)
- * to network format (which is usually some kind of binary format).
- * return:
- * 1 if the address was valid for the specified address family
- * 0 if the address wasn't valid (`dst' is untouched in this case)
- * -1 if some other error occurred (`dst' is untouched in this case, too)
- * author:
- * Paul Vixie, 1996.
- */
-extern "C" int
-cygwin_inet_pton (int af, const char *src, void *dst)
-{
- switch (af)
- {
- case AF_INET:
- return (inet_pton4(src, (u_char *) dst));
- case AF_INET6:
- return (inet_pton6(src, (u_char *) dst));
- default:
- errno = EAFNOSUPPORT;
- return (-1);
- }
- /* NOTREACHED */
-}
-
-/* const char *
- * inet_ntop4(src, dst, size)
- * format an IPv4 address, more or less like inet_ntoa()
- * return:
- * `dst' (as a const)
- * notes:
- * (1) uses no statics
- * (2) takes a u_char* not an in_addr as input
- * author:
- * Paul Vixie, 1996.
- */
-static const char *
-inet_ntop4 (const u_char *src, char *dst, size_t size)
-{
- static const char fmt[] = "%u.%u.%u.%u";
- char tmp[sizeof "255.255.255.255"];
-
- __small_sprintf(tmp, fmt, src[0], src[1], src[2], src[3]);
- if (strlen(tmp) > size)
- {
- errno = ENOSPC;
- return (NULL);
- }
- strcpy(dst, tmp);
- return (dst);
-}
-
-/* const char *
- * inet_ntop6(src, dst, size)
- * convert IPv6 binary address into presentation (printable) format
- * author:
- * Paul Vixie, 1996.
- */
-static const char *
-inet_ntop6 (const u_char *src, char *dst, size_t size)
-{
- /*
- * Note that int32_t and int16_t need only be "at least" large enough
- * to contain a value of the specified size. On some systems, like
- * Crays, there is no such thing as an integer variable with 16 bits.
- * Keep this in mind if you think this function should have been coded
- * to use pointer overlays. All the world's not a VAX.
- */
- char tmp[sizeof "ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255"], *tp;
- struct { int base, len; } best, cur;
- u_int words[IN6ADDRSZ / INT16SZ];
- int i;
-
- /*
- * Preprocess:
- * Copy the input (bytewise) array into a wordwise array.
- * Find the longest run of 0x00's in src[] for :: shorthanding.
- */
- memset(words, 0, sizeof words);
- for (i = 0; i < IN6ADDRSZ; i++)
- words[i / 2] |= (src[i] << ((1 - (i % 2)) << 3));
- best.base = -1;
- cur.base = -1;
- best.len = 0;
- cur.len = 0;
- for (i = 0; i < (IN6ADDRSZ / INT16SZ); i++)
- {
- if (words[i] == 0)
- {
- if (cur.base == -1)
- cur.base = i, cur.len = 1;
- else
- cur.len++;
- }
- else
- {
- if (cur.base != -1)
- {
- if (best.base == -1 || cur.len > best.len)
- best = cur;
- cur.base = -1;
- }
- }
- }
- if (cur.base != -1)
- {
- if (best.base == -1 || cur.len > best.len)
- best = cur;
- }
- if (best.base != -1 && best.len < 2)
- best.base = -1;
-
- /*
- * Format the result.
- */
- tp = tmp;
- for (i = 0; i < (IN6ADDRSZ / INT16SZ); i++)
- {
- /* Are we inside the best run of 0x00's? */
- if (best.base != -1 && i >= best.base && i < (best.base + best.len))
- {
- if (i == best.base)
- *tp++ = ':';
- continue;
- }
- /* Are we following an initial run of 0x00s or any real hex? */
- if (i != 0)
- *tp++ = ':';
- /* Is this address an encapsulated IPv4? */
- if (i == 6 && best.base == 0 &&
- (best.len == 6 || (best.len == 5 && words[5] == 0xffff)))
- {
- if (!inet_ntop4(src+12, tp, sizeof tmp - (tp - tmp)))
- return (NULL);
- tp += strlen(tp);
- break;
- }
- __small_sprintf(tp, "%x", words[i]);
- while (*tp)
- {
- if (isupper (*tp))
- *tp = _tolower (*tp);
- ++tp;
- }
- }
- /* Was it a trailing run of 0x00's? */
- if (best.base != -1 && (best.base + best.len) == (IN6ADDRSZ / INT16SZ))
- *tp++ = ':';
- *tp++ = '\0';
-
- /*
- * Check for overflow, copy, and we're done.
- */
- if ((size_t) (tp - tmp) > size)
- {
- errno = ENOSPC;
- return (NULL);
- }
- strcpy(dst, tmp);
- return (dst);
-}
-
-/* char *
- * inet_ntop(af, src, dst, size)
- * convert a network format address to presentation format.
- * return:
- * pointer to presentation format address (`dst'), or NULL (see errno).
- * author:
- * Paul Vixie, 1996.
- */
-extern "C" const char *
-cygwin_inet_ntop (int af, const void *src, char *dst, socklen_t size)
-{
- switch (af)
- {
- case AF_INET:
- return (inet_ntop4((const u_char *) src, dst, size));
- case AF_INET6:
- return (inet_ntop6((const u_char *) src, dst, size));
- default:
- errno = EAFNOSUPPORT;
- return (NULL);
- }
- /* NOTREACHED */
-}
-
-extern "C" void
-cygwin_freeaddrinfo (struct addrinfo *addr)
-{
- struct addrinfo *ai, *ainext;
-
- for (ai = addr; ai != NULL; ai = ainext)
- {
- if (ai->ai_addr != NULL)
- free (ai->ai_addr); /* socket address structure */
-
- if (ai->ai_canonname != NULL)
- free (ai->ai_canonname);
-
- ainext = ai->ai_next; /* can't fetch ai_next after free() */
- free (ai); /* the addrinfo{} itself */
- }
-}
-
-static struct addrinfo *
-ga_dup (struct addrinfoW *ai, bool v4mapped, int idn_flags, int &err)
-{
- struct addrinfo *nai;
-
- if ((nai = (struct addrinfo *) calloc (1, sizeof (struct addrinfo))) == NULL)
- {
- err = EAI_MEMORY;
- return NULL;
- }
-
- nai->ai_family = v4mapped ? AF_INET6 : ai->ai_family;
- nai->ai_socktype = ai->ai_socktype;
- nai->ai_protocol = ai->ai_protocol;
- if (ai->ai_canonname)
- {
- tmp_pathbuf tp;
- wchar_t *canonname = ai->ai_canonname;
-
- if (idn_flags & AI_CANONIDN)
- {
- /* Map flags to equivalent IDN_* flags. */
- wchar_t *canonbuf = tp.w_get ();
- if (IdnToUnicode (idn_flags >> 16, canonname, -1,
- canonbuf, NT_MAX_PATH))
- canonname = canonbuf;
- else if (GetLastError () != ERROR_PROC_NOT_FOUND)
- {
- free (nai);
- err = EAI_IDN_ENCODE;
- return NULL;
- }
- }
- size_t len = wcstombs (NULL, canonname, 0);
- if (len == (size_t) -1)
- {
- free (nai);
- err = EAI_IDN_ENCODE;
- return NULL;
- }
- nai->ai_canonname = (char *) malloc (len + 1);
- if (!nai->ai_canonname)
- {
- free (nai);
- err = EAI_MEMORY;
- return NULL;
- }
- wcstombs (nai->ai_canonname, canonname, len + 1);
- }
-
- nai->ai_addrlen = v4mapped ? sizeof (struct sockaddr_in6) : ai->ai_addrlen;
- if ((nai->ai_addr = (struct sockaddr *) malloc (v4mapped
- ? sizeof (struct sockaddr_in6)
- : ai->ai_addrlen)) == NULL)
- {
- if (nai->ai_canonname)
- free (nai->ai_canonname);
- free (nai);
- err = EAI_MEMORY;
- return NULL;
- }
- if (v4mapped)
- {
- struct sockaddr_in6 *in = (struct sockaddr_in6 *) nai->ai_addr;
- in->sin6_family = AF_INET6;
- in->sin6_port = ((struct sockaddr_in *) ai->ai_addr)->sin_port;
- in->sin6_flowinfo = 0;
- in->sin6_addr.s6_addr32[0] = 0;
- in->sin6_addr.s6_addr32[1] = 0;
- in->sin6_addr.s6_addr32[2] = htonl (0xffff);
- in->sin6_addr.s6_addr32[3] = ((struct sockaddr_in *) ai->ai_addr)->sin_addr.s_addr;
- in->sin6_scope_id = 0;
- }
- else
- memcpy (nai->ai_addr, ai->ai_addr, ai->ai_addrlen);
-
- return nai;
-}
-
-static struct addrinfo *
-ga_duplist (struct addrinfoW *ai, bool v4mapped, int idn_flags, int &err)
-{
- struct addrinfo *tmp, *nai = NULL, *nai0 = NULL;
-
- for (; ai; ai = ai->ai_next, nai = tmp)
- {
- if (!(tmp = ga_dup (ai, v4mapped, idn_flags, err)))
- goto bad;
- if (!nai0)
- nai0 = tmp;
- if (nai)
- nai->ai_next = tmp;
- }
- return nai0;
-
-bad:
- cygwin_freeaddrinfo (nai0);
- return NULL;
-}
-
-/* Cygwin specific wrappers around the gai functions. */
-static struct gai_errmap_t
-{
- int w32_errval;
- const char *errtxt;
-} gai_errmap[] =
-{
- {0, "Success"},
- /* EAI_ADDRFAMILY */
- {0, "Address family for hostname not supported"},
- /* EAI_AGAIN */
- {WSATRY_AGAIN, "Temporary failure in name resolution"},
- /* EAI_BADFLAGS */
- {WSAEINVAL, "Bad value for ai_flags"},
- /* EAI_FAIL */
- {WSANO_RECOVERY, "Non-recoverable failure in name resolution"},
- /* EAI_FAMILY */
- {WSAEAFNOSUPPORT, "ai_family not supported"},
- /* EAI_MEMORY */
- {WSA_NOT_ENOUGH_MEMORY, "Memory allocation failure"},
- /* EAI_NODATA */
- {WSANO_DATA, "No address associated with hostname"},
- /* EAI_NONAME */
- {WSAHOST_NOT_FOUND, "Name or service not known"},
- /* EAI_SERVICE */
- {WSATYPE_NOT_FOUND, "Servname not supported for ai_socktype"},
- /* EAI_SOCKTYPE */
- {WSAESOCKTNOSUPPORT, "ai_socktype not supported"},
- /* EAI_SYSTEM */
- {0, "System error"},
- /* EAI_BADHINTS */
- {0, "Invalid value for hints"},
- /* EAI_PROTOCOL */
- {0, "Resolved protocol is unknown"},
- /* EAI_OVERFLOW */
- {WSAEFAULT, "An argument buffer overflowed"},
- /* EAI_IDN_ENCODE */
- {0, "Parameter string not correctly encoded"}
-};
-
-extern "C" const char *
-cygwin_gai_strerror (int err)
-{
- if (err >= 0 && err < (int) (sizeof gai_errmap / sizeof *gai_errmap))
- return gai_errmap[err].errtxt;
- return "Unknown error";
-}
-
-static int
-w32_to_gai_err (int w32_err)
-{
- if (w32_err >= WSABASEERR)
- for (unsigned i = 0; i < sizeof gai_errmap / sizeof *gai_errmap; ++i)
- if (gai_errmap[i].w32_errval == w32_err)
- return i;
- return w32_err;
-}
-
-extern "C" int
-cygwin_getaddrinfo (const char *hostname, const char *servname,
- const struct addrinfo *hints, struct addrinfo **res)
-{
- int ret = 0;
-
- /* Windows' getaddrinfo implementations lets all possible values
- in ai_flags slip through and just ignores unknown values. So we
- check manually here. */
-#define AI_IDN_MASK (AI_IDN | \
- AI_CANONIDN | \
- AI_IDN_ALLOW_UNASSIGNED | \
- AI_IDN_USE_STD3_ASCII_RULES)
-#ifndef AI_DISABLE_IDN_ENCODING
-#define AI_DISABLE_IDN_ENCODING 0x80000
-#endif
- __try
- {
- if (hints && (hints->ai_flags
- & ~(AI_PASSIVE | AI_CANONNAME | AI_NUMERICHOST | AI_ALL
- | AI_NUMERICSERV | AI_ADDRCONFIG | AI_V4MAPPED
- | AI_IDN_MASK)))
- return EAI_BADFLAGS;
- /* AI_NUMERICSERV is not supported prior to Windows Vista. We just check
- the servname parameter by ourselves here. */
- if (hints && (hints->ai_flags & AI_NUMERICSERV))
- {
- char *p;
- if (servname && *servname && (strtoul (servname, &p, 10), *p))
- return EAI_NONAME;
- }
-
- int idn_flags = hints ? (hints->ai_flags & AI_IDN_MASK) : 0;
- const char *src;
- mbstate_t ps;
- tmp_pathbuf tp;
- wchar_t *whost = NULL, *wserv = NULL;
- struct addrinfoW whints, *wres;
-
- if (hostname)
- {
- memset (&ps, 0, sizeof ps);
- src = hostname;
- whost = tp.w_get ();
- if (mbsrtowcs (whost, &src, NT_MAX_PATH, &ps) == (size_t) -1)
- return EAI_IDN_ENCODE;
- if (src)
- return EAI_MEMORY;
- if (idn_flags & AI_IDN)
- {
- /* Map flags to equivalent IDN_* flags. */
- wchar_t *ascbuf = tp.w_get ();
- if (IdnToAscii (idn_flags >> 16, whost, -1, ascbuf, NT_MAX_PATH))
- whost = ascbuf;
- else if (GetLastError () != ERROR_PROC_NOT_FOUND)
- return EAI_IDN_ENCODE;
- }
- }
- if (servname)
- {
- memset (&ps, 0, sizeof ps);
- src = servname;
- wserv = tp.w_get ();
- if (mbsrtowcs (wserv, &src, NT_MAX_PATH, &ps) == (size_t) -1)
- return EAI_IDN_ENCODE;
- if (src)
- return EAI_MEMORY;
- }
-
- if (!hints)
- {
- /* Default settings per glibc man page. */
- memset (&whints, 0, sizeof whints);
- whints.ai_family = PF_UNSPEC;
- whints.ai_flags = AI_V4MAPPED | AI_ADDRCONFIG;
- }
- else
- {
- /* sizeof addrinfo == sizeof addrinfoW */
- memcpy (&whints, hints, sizeof whints);
- whints.ai_flags &= ~AI_IDN_MASK;
-#ifdef __x86_64__
- /* ai_addrlen is socklen_t (4 bytes) in POSIX but size_t (8 bytes) in
- Winsock. Sert upper 4 bytes explicitely to 0 to avoid EAI_FAIL. */
- whints.ai_addrlen &= UINT32_MAX;
-#endif
- /* AI_ADDRCONFIG is not supported prior to Vista. Rather it's
- the default and only possible setting.
- On Vista, the default behaviour is as if AI_ADDRCONFIG is set,
- apparently for performance reasons. To get the POSIX default
- behaviour, the AI_ALL flag has to be set. */
- if (wincap.supports_all_posix_ai_flags ()
- && whints.ai_family == PF_UNSPEC
- && !(whints.ai_flags & AI_ADDRCONFIG))
- whints.ai_flags |= AI_ALL;
- }
- /* Disable automatic IDN conversion on W8 and later. */
- whints.ai_flags |= AI_DISABLE_IDN_ENCODING;
- ret = w32_to_gai_err (GetAddrInfoW (whost, wserv, &whints, &wres));
- /* Always copy over to self-allocated memory. */
- if (!ret)
- {
- *res = ga_duplist (wres, false, idn_flags, ret);
- FreeAddrInfoW (wres);
- if (!*res)
- __leave;
- }
- /* AI_V4MAPPED and AI_ALL are not supported prior to Vista. So, what
- we do here is to emulate AI_V4MAPPED. If no IPv6 addresses are
- returned, or the AI_ALL flag is set, we try with AF_INET again, and
- convert the returned IPv4 addresses into v4-in-v6 entries. This
- is done in ga_dup if the v4mapped flag is set. */
- if (!wincap.supports_all_posix_ai_flags ()
- && hints
- && hints->ai_family == AF_INET6
- && (hints->ai_flags & AI_V4MAPPED)
- && (ret == EAI_NODATA || ret == EAI_NONAME
- || (hints->ai_flags & AI_ALL)))
- {
- /* sizeof addrinfo == sizeof addrinfoW */
- memcpy (&whints, hints, sizeof whints);
- whints.ai_family = AF_INET;
-#ifdef __x86_64__
- /* ai_addrlen is socklen_t (4 bytes) in POSIX but size_t (8 bytes) in
- Winsock. Sert upper 4 bytes explicitely to 0 to avoid EAI_FAIL. */
- whints.ai_addrlen &= UINT32_MAX;
-#endif
- int ret2 = w32_to_gai_err (GetAddrInfoW (whost, wserv, &whints, &wres));
- if (!ret2)
- {
- struct addrinfo *v4res = ga_duplist (wres, true, idn_flags, ret);
- FreeAddrInfoW (wres);
- if (!v4res)
- {
- if (!ret)
- cygwin_freeaddrinfo (*res);
- __leave;
- }
- /* If a list of v6 addresses exists, append the v4-in-v6 address
- list. Otherwise just return the v4-in-v6 address list. */
- if (!ret)
- {
- struct addrinfo *ptr;
- for (ptr = *res; ptr->ai_next; ptr = ptr->ai_next)
- ;
- ptr->ai_next = v4res;
- }
- else
- *res = v4res;
- ret = 0;
- }
- }
- }
- __except (EFAULT)
- {
- ret = EAI_SYSTEM;
- }
- __endtry
- return ret;
-}
-
-extern "C" int
-cygwin_getnameinfo (const struct sockaddr *sa, socklen_t salen,
- char *host, size_t hostlen, char *serv,
- size_t servlen, int flags)
-{
- int ret = 0;
-
- __try
- {
- /* When the incoming port number does not resolve to a well-known service,
- WinSock's getnameinfo up to Windows 2003 returns with error WSANO_DATA
- instead of setting `serv' to the numeric port number string, as
- required by RFC 3493. This is fixed on Vista and later. To avoid the
- error on systems up to Windows 2003, we check if the port number
- resolves to a well-known service. If not, we set the NI_NUMERICSERV
- flag. */
- if (!wincap.supports_all_posix_ai_flags ())
- {
- int port = 0;
-
- switch (sa->sa_family)
- {
- case AF_INET:
- port = ((struct sockaddr_in *) sa)->sin_port;
- break;
- case AF_INET6:
- port = ((struct sockaddr_in6 *) sa)->sin6_port;
- break;
- default:
- return EAI_FAMILY;
- }
- if (!port || !getservbyport (port, flags & NI_DGRAM ? "udp" : "tcp"))
- flags |= NI_NUMERICSERV;
- }
- /* We call GetNameInfoW with local buffers and convert to locale
- charset to allow RFC 3490 IDNs like glibc 2.3.4 and later. */
-#define NI_IDN_MASK (NI_IDN | \
- NI_IDN_ALLOW_UNASSIGNED | \
- NI_IDN_USE_STD3_ASCII_RULES)
- int idn_flags = flags & NI_IDN_MASK;
- flags &= ~NI_IDN_MASK;
- tmp_pathbuf tp;
- wchar_t *whost = NULL, *wserv = NULL;
- DWORD whlen = 0, wslen = 0;
-
- if (host && hostlen)
- {
- whost = tp.w_get ();
- whlen = NT_MAX_PATH;
- }
- if (serv && servlen)
- {
- wserv = tp.w_get ();
- wslen = NT_MAX_PATH;
- }
-
- ret = w32_to_gai_err (GetNameInfoW (sa, salen, whost, whlen,
- wserv, wslen, flags));
- if (!ret)
- {
- const wchar_t *src;
-
- if (whost)
- {
- if (idn_flags & NI_IDN)
- {
- /* Map flags to equivalent IDN_* flags. */
- wchar_t *idnbuf = tp.w_get ();
- if (IdnToUnicode (idn_flags >> 16, whost, -1,
- idnbuf, NT_MAX_PATH))
- whost = idnbuf;
- else if (GetLastError () != ERROR_PROC_NOT_FOUND)
- return EAI_IDN_ENCODE;
- }
- src = whost;
- if (wcsrtombs (host, &src, hostlen, NULL) == (size_t) -1)
- return EAI_IDN_ENCODE;
- if (src)
- return EAI_OVERFLOW;
- }
- if (wserv)
- {
- src = wserv;
- if (wcsrtombs (serv, &src, servlen, NULL) == (size_t) -1)
- return EAI_IDN_ENCODE;
- if (src)
- return EAI_OVERFLOW;
- }
- }
- else if (ret == EAI_SYSTEM)
- set_winsock_errno ();
- }
- __except (EFAULT)
- {
- ret = EAI_SYSTEM;
- }
- __endtry
- return ret;
-}
-
-/* The below function in6_are_prefix_equal has been taken from OpenBSD's
- src/sys/netinet6/in6.c. */
-
-/*
- * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the project nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * Copyright (c) 1982, 1986, 1991, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)in.c 8.2 (Berkeley) 11/15/93
- */
-
-static int
-in6_are_prefix_equal (struct in6_addr *p1, struct in6_addr *p2, int len)
-{
- int bytelen, bitlen;
-
- /* sanity check */
- if (0 > len || len > 128)
- return 0;
-
- bytelen = len / 8;
- bitlen = len % 8;
-
- if (memcmp (&p1->s6_addr, &p2->s6_addr, bytelen))
- return 0;
- /* len == 128 is ok because bitlen == 0 then */
- if (bitlen != 0 &&
- p1->s6_addr[bytelen] >> (8 - bitlen) !=
- p2->s6_addr[bytelen] >> (8 - bitlen))
- return 0;
-
- return 1;
-}
-
-/* These functions are stick to the end of this file so that the
- optimization in asm/byteorder.h can be used even here in net.cc. */
-
-#undef htonl
-#undef ntohl
-#undef htons
-#undef ntohs
-
-/* htonl: standards? */
-extern "C" uint32_t
-htonl (uint32_t x)
-{
- return __htonl (x);
-}
-
-/* ntohl: standards? */
-extern "C" uint32_t
-ntohl (uint32_t x)
-{
- return __ntohl (x);
-}
-
-/* htons: standards? */
-extern "C" uint16_t
-htons (uint16_t x)
-{
- return __htons (x);
-}
-
-/* ntohs: standards? */
-extern "C" uint16_t
-ntohs (uint16_t x)
-{
- return __ntohs (x);
-}
diff --git a/winsup/cygwin/netdb.cc b/winsup/cygwin/netdb.cc
deleted file mode 100644
index 3e3b35498..000000000
--- a/winsup/cygwin/netdb.cc
+++ /dev/null
@@ -1,408 +0,0 @@
-/* netdb.cc: network database related routines.
-
- Copyright 2002, 2003, 2007, 2008, 2010, 2011, 2013 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <netdb.h>
-#include <shared_info.h>
-
-/* Locate and open a system network database file. relative_path
- should be one of the following values:
- "protocol"
- "services"
- "networks"
- "hosts"
-
- It is the callers responsibility to close the file. */
-static FILE *
-open_system_file (const char *relative_path)
-{
- /* system dir path is never longer. */
- char win32_name[MAX_PATH];
-
- user_shared->warned_msdos = true;
- sys_wcstombs (win32_name, MAX_PATH, windows_system_directory);
- strcat (win32_name, "drivers\\etc\\");
- strcat (win32_name, relative_path);
- FILE *result = fopen (win32_name, "rt");
- debug_printf ("handle to netdb file %s: %p", win32_name, result);
- return result;
-}
-
-inline static FILE *
-open_protocol_file ()
-{
- return open_system_file ("protocol");
-}
-
-/* Wrapper for open_system_file(), fixing the constant name
-"services". Returns the open file. */
-inline static FILE *
-open_services_file ()
-{
- return open_system_file ("services");
-}
-
-/* Read an entire line up till the next \n character. Memory for the
-line is dynamically allocated, and the caller must call free() to
-deallocate it. When the end of file is reached, NULL is returned. */
-static char *
-get_entire_line (FILE *fd)
-{
- static const int BUFF_SIZE = 1024;
- struct line_fragment
- {
- char buffer[BUFF_SIZE];
- line_fragment *next;
- };
-
- line_fragment *fragment_list_head = NULL;
- line_fragment *fragment = NULL;
- int fragment_count = 0;
- char *result;
-
- do
- {
- line_fragment *new_fragment = (line_fragment *) malloc (sizeof (line_fragment));
- paranoid_printf ("line fragment allocated %p", new_fragment);
- if (!fragment_list_head)
- fragment_list_head = new_fragment;
- if (fragment)
- fragment->next = new_fragment;
- fragment = new_fragment;
- fragment->next = NULL;
- *fragment->buffer = '\0';
- result = fgets (fragment->buffer, BUFF_SIZE, fd);
- ++fragment_count;
- }
- while (result && !strchr (fragment->buffer, '\n'));
-
- if (*fragment_list_head->buffer != '\0')
- {
- char *concatenated_line = (char *) calloc (fragment_count * BUFF_SIZE , sizeof (char));
- paranoid_printf ("concatenated line allocated %p", concatenated_line);
- *concatenated_line = '\0';
- fragment = fragment_list_head;
- while (fragment != NULL)
- {
- line_fragment *previous = fragment;
- strcat (concatenated_line, fragment->buffer);
- fragment = fragment->next;
- free (previous);
- }
- return concatenated_line;
- }
- else
- {
- fragment = fragment_list_head;
- while (fragment != NULL)
- {
- line_fragment *previous = fragment;
- fragment = fragment->next;
- free (previous);
- }
- return NULL;
- }
-}
-
-/* Characters representing whitespace. Used by parse_* routines to
-delimit tokens. */
-static const char *SPACE = " \t\n\r\f";
-
-/* Parse a list aliases from a network database file. Returns a
-char** structure terminated by a NULL. */
-static void
-parse_alias_list (char ***aliases, char **lasts)
-{
- struct alias_t
- {
- char *alias_name;
- alias_t *next;
- };
- alias_t *alias_list_head = NULL, *alias_list_tail = NULL;
- char *alias;
- int alias_count = 0;
- alias = strtok_r (NULL, SPACE, lasts);
-
- while (alias)
- {
- ++alias_count;
- alias_t *new_alias = (alias_t *) malloc (sizeof (alias_t));
- paranoid_printf ("new alias alloc %p", new_alias);
- if (!alias_list_head)
- alias_list_head = new_alias;
- if (alias_list_tail)
- alias_list_tail->next = new_alias;
- new_alias->next = NULL;
- new_alias->alias_name = alias;
- alias_list_tail = new_alias;
- alias = strtok_r (NULL, SPACE, lasts);
- }
-
- *aliases = (char**) calloc (alias_count + 1, sizeof (char *));
- paranoid_printf ("aliases alloc %p", *aliases);
-
- char **current_entry = *aliases;
- while (alias_list_head)
- {
- alias_t *previous = alias_list_head;
- *current_entry = strdup (alias_list_head->alias_name);
- paranoid_printf ("*current entry strdup %p", *current_entry);
- alias_list_head = alias_list_head->next;
- free (previous);
- ++current_entry;
- }
-
- *current_entry = NULL;
-}
-
-/* Read the next line from svc_file, and parse it into the structure
-pointed to by sep. sep can point to stack or static data, but it's
-members will be overwritten with pointers to dynamically allocated
-heap data accommodating parsed data. It is the responsibility of the
-caller to free up the allocated structures. The function returns true
-to indicate that a line was successfully read and parsed. False is
-used to indicate that no more lines can be read and parsed. This
-should also interpreted as end of file. */
-static bool
-parse_services_line (FILE *svc_file, struct servent *sep)
-{
- char *line;
- while ((line = get_entire_line (svc_file)))
- {
- char *name, *port, *protocol, *lasts;
-
- line[strcspn (line, "#")] = '\0'; // truncate at comment marker.
- name = strtok_r (line, SPACE, &lasts);
- if (!name)
- {
- free (line);
- continue;
- }
- port = strtok_r (NULL, SPACE, &lasts);
- protocol = strchr (port, '/');
- *protocol++ = '\0';
- sep->s_name = strdup (name);
- paranoid_printf ("sep->s_name strdup %p", sep->s_name);
- sep->s_port = atoi (port);
- sep->s_proto = strdup (protocol);
- paranoid_printf ("sep->s_proto strdup %p", sep->s_proto);
- /* parse_alias_list relies on side effects. Read the comments
- for that function.*/
- parse_alias_list (& sep->s_aliases, &lasts);
- free (line);
- return true;
- }
- return false;
-}
-
-static FILE *svc_file = NULL;
-static long int svc_read_pos = 0;
-static struct servent current_servent;
-
-/* Steps through a struct servent, and frees all of the internal
-structures.*/
-static void
-free_servent (struct servent *sep)
-{
- free (sep->s_name);
- free (sep->s_proto);
- char ** current = sep->s_aliases;
- while (current && *current)
- {
- free (*current);
- ++current;
- }
- free (sep->s_aliases);
- sep->s_name = NULL;
- sep->s_port = 0;
- sep->s_proto = NULL;
- sep->s_aliases = NULL;
-}
-
-extern "C" void
-cygwin_setservent (int stay_open)
-{
- if (svc_file)
- fclose (svc_file);
- if (stay_open)
- svc_file = open_services_file ();
- free_servent (&current_servent);
- svc_read_pos = 0;
- syscall_printf ("setservent (%d)", stay_open);
-}
-
-extern "C" struct servent *
-cygwin_getservent (void)
-{
- FILE *fd;
- if (svc_file)
- fd = svc_file;
- else
- {
- fd = open_services_file ();
- if (!fd)
- {
- syscall_printf ("%p = getservent()", NULL);
- return NULL;
- }
- fseek (fd, svc_read_pos, SEEK_SET);
- }
- free_servent (&current_servent);
- bool found = parse_services_line (fd, &current_servent);
- if (!svc_file)
- {
- svc_read_pos = ftell (fd);
- fclose (fd);
- }
- struct servent *result;
- if (found)
- result = &current_servent;
- else
- result = NULL;
- syscall_printf ("%p = getservent()", result);
- return result;
-}
-
-extern "C" void
-cygwin_endservent (void)
-{
- if (svc_file)
- {
- fclose (svc_file);
- svc_file = NULL;
- }
- free_servent (&current_servent);
- svc_read_pos = 0;
- syscall_printf ("endservent ()");
-}
-
-/* Read the next line from proto_file, and parse it into the structure
-pointed to by pep. pep can point to stack or static data, but it's
-members will be overwritten with pointers to dynamically allocated
-heap data accommodating parsed data. It is the responsibility of the
-caller to free up the allocated structures. The function returns true
-to indicate that a line was successfully read and parsed. False is
-used to indicate that no more lines can be read and parsed. This
-should also interpreted as end of file. */
-static bool
-parse_protocol_line (FILE *proto_file, struct protoent *pep)
-{
- char *line;
- while ((line = get_entire_line (proto_file)))
- {
- char *name, *protocol, *lasts;
-
- line[strcspn (line, "#")] = '\0'; // truncate at comment marker.
- name = strtok_r (line, SPACE, &lasts);
- if (!name)
- {
- free (line);
- continue;
- }
- protocol = strtok_r (NULL, SPACE, &lasts);
- pep->p_name = strdup (name);
- paranoid_printf ("pep->p_name strdup %p", pep->p_name);
- pep->p_proto = atoi (protocol);
- /* parse_alias_list relies on side effects. Read the comments
- for that function.*/
- parse_alias_list (& pep->p_aliases, &lasts);
- free (line);
- return true;
- }
- return false;
-}
-
-static FILE *proto_file = NULL;
-static long int proto_read_pos = 0;
-static struct protoent current_protoent;
-
-/* Steps through a struct protoent, and frees all the internal
-structures. */
-static void
-free_protoent (struct protoent *pep)
-{
- free (pep->p_name);
- char ** current = pep->p_aliases;
- while (current && *current)
- {
- free (*current);
- ++current;
- }
- free (pep->p_aliases);
- pep->p_name = NULL;
- pep->p_proto = 0;
- pep->p_aliases = NULL;
-}
-
-extern "C" void
-cygwin_setprotoent (int stay_open)
-{
- if (proto_file)
- fclose (proto_file);
-
- if (stay_open)
- proto_file = open_protocol_file ();
-
- free_protoent (&current_protoent);
- proto_read_pos = 0;
- syscall_printf ("setprotoent (%d)", stay_open);
-}
-
-extern "C" struct protoent *
-cygwin_getprotoent (void)
-{
- FILE *fd;
-
- if (proto_file)
- fd = proto_file;
- else
- {
- fd = open_protocol_file ();
- if (!fd)
- {
- syscall_printf ("%p = getprotoent()", NULL);
- return NULL;
- }
- fseek (fd, proto_read_pos, SEEK_SET);
- }
- free_protoent (&current_protoent);
-
- bool found = parse_protocol_line (fd, &current_protoent);
- if (!proto_file)
- {
- proto_read_pos = ftell (fd);
- fclose (fd);
- }
-
- struct protoent *result;
- if (found)
- result = &current_protoent;
- else
- result = NULL;
-
- syscall_printf ("%p = getprotoent()", result);
- return result;
-}
-
-extern "C" void
-cygwin_endprotoent (void)
-{
- if (proto_file)
- {
- fclose (proto_file);
- proto_file = NULL;
- }
-
- free_protoent (&current_protoent);
- proto_read_pos = 0;
- syscall_printf ("endprotoent ()");
-}
diff --git a/winsup/cygwin/nfs.cc b/winsup/cygwin/nfs.cc
deleted file mode 100644
index 32d9ad2bf..000000000
--- a/winsup/cygwin/nfs.cc
+++ /dev/null
@@ -1,47 +0,0 @@
-/* nfs.cc
-
- Copyright 2008, 2010 Red Hat, Inc.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include "sys/fcntl.h"
-#include "nfs.h"
-#include "ntdll.h"
-
-struct nfs_aol_ffei_t nfs_aol_ffei = { 0, 0, sizeof (NFS_ACT_ON_LINK) - 1, 0,
- NFS_ACT_ON_LINK };
-
-uint32_t nfs_type_mapping[] = { 0, S_IFREG, S_IFDIR, S_IFBLK,
- S_IFCHR, S_IFLNK, S_IFSOCK, S_IFIFO };
-
-NTSTATUS
-nfs_fetch_fattr3 (HANDLE h, fattr3 *fattr_buf)
-{
- struct {
- FILE_FULL_EA_INFORMATION ffei;
- char buf[sizeof (NFS_V3_ATTR) + sizeof (fattr3)];
- } ffei_buf;
- struct {
- FILE_GET_EA_INFORMATION fgei;
- char buf[sizeof (NFS_V3_ATTR)];
- } fgei_buf;
- NTSTATUS status;
- IO_STATUS_BLOCK io;
-
- fgei_buf.fgei.NextEntryOffset = 0;
- fgei_buf.fgei.EaNameLength = sizeof (NFS_V3_ATTR) - 1;
- stpcpy (fgei_buf.fgei.EaName, NFS_V3_ATTR);
- status = NtQueryEaFile (h, &io, &ffei_buf.ffei, sizeof ffei_buf, TRUE,
- &fgei_buf.fgei, sizeof fgei_buf, NULL, TRUE);
- if (NT_SUCCESS (status))
- {
- fattr3 *nfs_attr = (fattr3 *) (ffei_buf.ffei.EaName
- + ffei_buf.ffei.EaNameLength + 1);
- if (fattr_buf)
- memcpy (fattr_buf, nfs_attr, sizeof (fattr3));
- }
- return status;
-}
diff --git a/winsup/cygwin/nfs.h b/winsup/cygwin/nfs.h
deleted file mode 100644
index 72a0179c7..000000000
--- a/winsup/cygwin/nfs.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/* nfs.h
-
- Copyright 2008, 2010 Red Hat, Inc.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#define NFS_ACT_ON_LINK "NfsActOnLink"
-#define NFS_SYML_TARGET "NfsSymlinkTargetName"
-#define NFS_V3_ATTR "NfsV3Attributes"
-
-/* NFS datastructures per RFC 1813, as returned by SFU NFS. */
-
-enum ftype3 {
- NF3REG = 1,
- NF3DIR = 2,
- NF3BLK = 3,
- NF3CHR = 4,
- NF3LNK = 5,
- NF3SOCK = 6,
- NF3FIFO = 7
-};
-
-#pragma pack (push, 4)
-struct nfs_timestruc_t
-{
- int32_t tv_sec;
- uint32_t tv_nsec;
-};
-
-struct fattr3 {
- uint32_t type;
- uint32_t mode;
- uint32_t nlink;
- uint32_t uid;
- uint32_t gid;
- uint32_t filler1;
- uint64_t size;
- uint64_t used;
- struct
- {
- uint32_t specdata1;
- uint32_t specdata2;
- } rdev;
- uint64_t fsid;
- uint64_t fileid;
- struct nfs_timestruc_t atime;
- struct nfs_timestruc_t mtime;
- struct nfs_timestruc_t ctime;
-};
-#pragma pack (pop)
-
-struct nfs_aol_ffei_t {
- ULONG NextEntryOffset;
- UCHAR Flags;
- UCHAR EaNameLength;
- USHORT EaValueLength;
- CHAR EaName[sizeof (NFS_ACT_ON_LINK)];
-};
-extern struct nfs_aol_ffei_t nfs_aol_ffei;
-
-extern uint32_t nfs_type_mapping[];
-
-extern NTSTATUS nfs_fetch_fattr3 (HANDLE h, fattr3 *fattr_buf);
diff --git a/winsup/cygwin/nlsfuncs.cc b/winsup/cygwin/nlsfuncs.cc
deleted file mode 100644
index f7031f92e..000000000
--- a/winsup/cygwin/nlsfuncs.cc
+++ /dev/null
@@ -1,1608 +0,0 @@
-/* nlsfuncs.cc: NLS helper functions
-
- Copyright 2010, 2011, 2012, 2013 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <locale.h>
-#include <wchar.h>
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "tls_pbuf.h"
-/* Internal headers from newlib */
-#include "../locale/timelocal.h"
-#include "../locale/lctype.h"
-#include "../locale/lnumeric.h"
-#include "../locale/lmonetary.h"
-#include "../locale/lmessages.h"
-#include "lc_msg.h"
-#include "lc_era.h"
-
-#define _LC(x) &lc_##x##_ptr,lc_##x##_end-lc_##x##_ptr
-
-#define getlocaleinfo(category,type) \
- __getlocaleinfo(lcid,(type),_LC(category))
-#define eval_datetimefmt(type,flags) \
- __eval_datetimefmt(lcid,(type),(flags),&lc_time_ptr,\
- lc_time_end-lc_time_ptr)
-#define charfromwchar(category,in) \
- __charfromwchar (_##category##_locale->in,_LC(category),\
- f_wctomb,charset)
-
-#define has_modifier(x) ((x)[0] && !strcmp (modifier, (x)))
-
-static char last_locale[ENCODING_LEN + 1];
-static LCID last_lcid;
-
-/* Fetch LCID from POSIX locale specifier.
- Return values:
-
- -1: Invalid locale
- 0: C or POSIX
- >0: LCID
-*/
-static LCID
-__get_lcid_from_locale (const char *name)
-{
- char locale[ENCODING_LEN + 1];
- char *c;
- LCID lcid;
-
- /* Speed up reusing the same locale as before, for instance in LC_ALL case. */
- if (!strcmp (name, last_locale))
- {
- debug_printf ("LCID=%04y", last_lcid);
- return last_lcid;
- }
- stpcpy (last_locale, name);
- stpcpy (locale, name);
- /* Store modifier for later use. */
- const char *modifier = strchr (last_locale, '@') ? : "";
- /* Drop charset and modifier */
- c = strchr (locale, '.');
- if (!c)
- c = strchr (locale, '@');
- if (c)
- *c = '\0';
- /* "POSIX" already converted to "C" in loadlocale. */
- if (!strcmp (locale, "C"))
- return last_lcid = 0;
- c = strchr (locale, '_');
- if (!c)
- return last_lcid = (LCID) -1;
- if (wincap.has_localenames ())
- {
- wchar_t wlocale[ENCODING_LEN + 1];
-
- /* Convert to RFC 4646 syntax which is the standard for the locale names
- replacing LCIDs starting with Vista. */
- *c = '-';
- mbstowcs (wlocale, locale, ENCODING_LEN + 1);
- lcid = LocaleNameToLCID (wlocale, 0);
- if (lcid == 0)
- {
- /* Unfortunately there are a couple of locales for which no form
- without a Script part per RFC 4646 exists.
- Linux also supports no_NO which is equivalent to nb_NO. */
- struct {
- const char *loc;
- const wchar_t *wloc;
- } sc_only_locale[] = {
- { "az-AZ" , L"az-Latn-AZ" },
- { "bs-BA" , L"bs-Latn-BA" },
- { "chr-US", L"chr-Cher-US"},
- { "ff-SN" , L"ff-Latn-SN" },
- { "ha-NG" , L"ha-Latn-NG" },
- { "iu-CA" , L"iu-Latn-CA" },
- { "ku-IQ" , L"ku-Arab-IQ" },
- { "mn-CN" , L"mn-Mong-CN" },
- { "no-NO" , L"nb-NO" },
- { "pa-PK" , L"pa-Arab-PK" },
- { "sd-PK" , L"sd-Arab-PK" },
- { "sr-BA" , L"sr-Cyrl-BA" },
- { "sr-CS" , L"sr-Cyrl-CS" },
- { "sr-ME" , L"sr-Cyrl-ME" },
- { "sr-RS" , L"sr-Cyrl-RS" },
- { "tg-TJ" , L"tg-Cyrl-TJ" },
- { "tzm-DZ", L"tzm-Latn-DZ" },
- { "tzm-MA", L"tzm-Tfng-MA" },
- { "uz-UZ" , L"uz-Latn-UZ" },
- { NULL , NULL }
- };
- for (int i = 0; sc_only_locale[i].loc
- && sc_only_locale[i].loc[0] <= locale[0]; ++i)
- if (!strcmp (locale, sc_only_locale[i].loc))
- {
- lcid = LocaleNameToLCID (sc_only_locale[i].wloc, 0);
- if (!strncmp (locale, "sr-", 3))
- {
- /* Vista/2K8 is missing sr-ME and sr-RS. It has only the
- deprecated sr-CS. So we map ME and RS to CS here. */
- if (lcid == 0)
- lcid = LocaleNameToLCID (L"sr-Cyrl-CS", 0);
- /* "@latin" modifier for the sr_XY locales changes
- collation behaviour so lcid should accommodate that
- by being set to the Latin sublang. */
- if (lcid != 0 && has_modifier ("@latin"))
- lcid = MAKELANGID (lcid & 0x3ff, (lcid >> 10) - 1);
- }
- else if (!strncmp (locale, "uz-", 3))
- {
- /* Equivalent for "@cyrillic" modifier in uz_UZ locale */
- if (lcid != 0 && has_modifier ("@cyrillic"))
- lcid = MAKELANGID (lcid & 0x3ff, (lcid >> 10) + 1);
- }
- break;
- }
- }
- last_lcid = lcid ?: (LCID) -1;
- debug_printf ("LCID=%04y", last_lcid);
- return last_lcid;
- }
- /* Pre-Vista we have to loop through the LCID values and see if they
- match language and TERRITORY. */
- *c++ = '\0';
- /* locale now points to the language, c points to the TERRITORY */
- const char *language = locale;
- const char *territory = c;
- LCID lang, sublang;
- char iso[10];
-
- /* In theory the lang part takes 10 bits (0x3ff), but up to Windows 2003 R2
- the highest lang value is 0x81. */
- for (lang = 1; lang <= 0x81; ++lang)
- if (GetLocaleInfo (lang, LOCALE_SISO639LANGNAME, iso, 10)
- && !strcmp (language, iso))
- break;
- if (lang > 0x81)
- lcid = 0;
- else if (!territory)
- lcid = lang;
- else
- {
- /* In theory the sublang part takes 7 bits (0x3f), but up to
- Windows 2003 R2 the highest sublang value is 0x14. */
- for (sublang = 1; sublang <= 0x14; ++sublang)
- {
- lcid = (sublang << 10) | lang;
- if (GetLocaleInfo (lcid, LOCALE_SISO3166CTRYNAME, iso, 10)
- && !strcmp (territory, iso))
- break;
- }
- if (sublang > 0x14)
- lcid = 0;
- }
- if (lcid == 0 && territory)
- {
- /* Unfortunately there are four language LCID number areas representing
- multiple languages. Fortunately only two of them already existed
- pre-Vista. The concealed languages have to be tested explicitly,
- since they are not catched by the above loops.
- This also enables the serbian ISO 3166 territory codes which have
- been changed post 2003, and maps them to the old wrong (SP was never
- a valid ISO 3166 code) territory code sr_SP which fortunately has the
- same LCID as the newer sr_CS.
- Linux also supports no_NO which is equivalent to nb_NO. */
- struct {
- const char *loc;
- LCID lcid;
- } ambiguous_locale[] = {
- { "bs_BA", MAKELANGID (LANG_BOSNIAN, 0x05) },
- { "nn_NO", MAKELANGID (LANG_NORWEGIAN, SUBLANG_NORWEGIAN_NYNORSK) },
- { "no_NO", MAKELANGID (LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL) },
- { "sr_BA", MAKELANGID (LANG_BOSNIAN,
- SUBLANG_SERBIAN_BOSNIA_HERZEGOVINA_CYRILLIC) },
- { "sr_CS", MAKELANGID (LANG_SERBIAN, SUBLANG_SERBIAN_CYRILLIC) },
- { "sr_ME", MAKELANGID (LANG_SERBIAN, SUBLANG_SERBIAN_CYRILLIC) },
- { "sr_RS", MAKELANGID (LANG_SERBIAN, SUBLANG_SERBIAN_CYRILLIC) },
- { "sr_SP", MAKELANGID (LANG_SERBIAN, SUBLANG_SERBIAN_CYRILLIC) },
- { NULL, 0 },
- };
- *--c = '_';
- for (int i = 0; ambiguous_locale[i].loc
- && ambiguous_locale[i].loc[0] <= locale[0]; ++i)
- if (!strcmp (locale, ambiguous_locale[i].loc)
- && GetLocaleInfo (ambiguous_locale[i].lcid, LOCALE_SISO639LANGNAME,
- iso, 10))
- {
- lcid = ambiguous_locale[i].lcid;
- /* "@latin" modifier for the sr_XY locales changes collation
- behaviour so lcid should accommodate that by being set to
- the Latin sublang. */
- if (!strncmp (locale, "sr_", 3) && has_modifier ("@latin"))
- lcid = MAKELANGID (lcid & 0x3ff, (lcid >> 10) - 1);
- break;
- }
- }
- else if (lcid == 0x0443) /* uz_UZ (Uzbek/Uzbekistan) */
- {
- /* Equivalent for "@cyrillic" modifier in uz_UZ locale */
- if (lcid != 0 && has_modifier ("@cyrillic"))
- lcid = MAKELANGID (lcid & 0x3ff, (lcid >> 10) + 1);
- }
- last_lcid = lcid ?: (LCID) -1;
- debug_printf ("LCID=%04y", last_lcid);
- return last_lcid;
-}
-
-/* Never returns -1. Just skips invalid chars instead. Only if return_invalid
- is set, s==NULL returns -1 since then it's used to recognize invalid strings
- in the used charset. */
-static size_t
-lc_wcstombs (wctomb_p f_wctomb, const char *charset,
- char *s, const wchar_t *pwcs, size_t n,
- bool return_invalid = false)
-{
- char *ptr = s;
- size_t max = n;
- char buf[8];
- size_t i, bytes, num_to_copy;
- mbstate_t state;
-
- memset (&state, 0, sizeof state);
- if (s == NULL)
- {
- size_t num_bytes = 0;
- while (*pwcs != 0)
- {
- bytes = f_wctomb (_REENT, buf, *pwcs++, charset, &state);
- if (bytes != (size_t) -1)
- num_bytes += bytes;
- else if (return_invalid)
- return (size_t) -1;
- }
- return num_bytes;
- }
- while (n > 0)
- {
- bytes = f_wctomb (_REENT, buf, *pwcs, charset, &state);
- if (bytes == (size_t) -1)
- {
- memset (&state, 0, sizeof state);
- ++pwcs;
- continue;
- }
- num_to_copy = (n > bytes ? bytes : n);
- for (i = 0; i < num_to_copy; ++i)
- *ptr++ = buf[i];
-
- if (*pwcs == 0x00)
- return ptr - s - (n >= bytes);
- ++pwcs;
- n -= num_to_copy;
- }
- return max;
-}
-
-/* Never returns -1. Invalid sequences are translated to replacement
- wide-chars. */
-static size_t
-lc_mbstowcs (mbtowc_p f_mbtowc, const char *charset,
- wchar_t *pwcs, const char *s, size_t n)
-{
- size_t ret = 0;
- char *t = (char *) s;
- size_t bytes;
- mbstate_t state;
-
- memset (&state, 0, sizeof state);
- if (!pwcs)
- n = 1;
- while (n > 0)
- {
- bytes = f_mbtowc (_REENT, pwcs, t, 6 /* fake, always enough */,
- charset, &state);
- if (bytes == (size_t) -1)
- {
- state.__count = 0;
- bytes = 1;
- if (pwcs)
- *pwcs = L' ';
- }
- else if (bytes == 0)
- break;
- t += bytes;
- ++ret;
- if (pwcs)
- {
- ++pwcs;
- --n;
- }
- }
- return ret;
-}
-
-static int
-locale_cmp (const void *a, const void *b)
-{
- char **la = (char **) a;
- char **lb = (char **) b;
- return strcmp (*la, *lb);
-}
-
-/* Helper function to workaround reallocs which move blocks even if they shrink.
- Cygwin's realloc is not doing this, but tcsh's, for instance. All lc_foo
- structures consist entirely of pointers so they are practically pointer
- arrays. What we do here is just treat the lc_foo pointers as char ** and
- rebase all char * pointers within, up to the given size of the structure. */
-static void
-rebase_locale_buf (const void *ptrv, const void *ptrvend, const char *newbase,
- const char *oldbase, const char *oldend)
-{
- const char **ptrsend = (const char **) ptrvend;
- for (const char **ptrs = (const char **) ptrv; ptrs < ptrsend; ++ptrs)
- if (*ptrs >= oldbase && *ptrs < oldend)
- *ptrs += newbase - oldbase;
-}
-
-static wchar_t *
-__getlocaleinfo (LCID lcid, LCTYPE type, char **ptr, size_t size)
-{
- size_t num;
- wchar_t *ret;
-
- if ((uintptr_t) *ptr % 1)
- ++*ptr;
- ret = (wchar_t *) *ptr;
- num = GetLocaleInfoW (lcid, type, ret, size / sizeof (wchar_t));
- *ptr = (char *) (ret + num);
- return ret;
-}
-
-static char *
-__charfromwchar (const wchar_t *in, char **ptr, size_t size,
- wctomb_p f_wctomb, const char *charset)
-{
- size_t num;
- char *ret;
-
- num = lc_wcstombs (f_wctomb, charset, ret = *ptr, in, size);
- *ptr += num + 1;
- return ret;
-}
-
-static UINT
-getlocaleint (LCID lcid, LCTYPE type)
-{
- UINT val;
- return GetLocaleInfoW (lcid, type | LOCALE_RETURN_NUMBER, (PWCHAR) &val,
- sizeof val) ? val : 0;
-}
-
-enum dt_flags {
- DT_DEFAULT = 0x00,
- DT_AMPM = 0x01, /* Enforce 12 hour time format. */
- DT_ABBREV = 0x02, /* Enforce abbreviated month and day names. */
-};
-
-static wchar_t *
-__eval_datetimefmt (LCID lcid, LCTYPE type, dt_flags flags, char **ptr,
- size_t size)
-{
- wchar_t buf[80];
- wchar_t fc;
- size_t idx;
- const wchar_t *day_str = L"edaA";
- const wchar_t *mon_str = L"mmbB";
- const wchar_t *year_str = L"yyyY";
- const wchar_t *hour12_str = L"lI";
- const wchar_t *hour24_str = L"kH";
- const wchar_t *t_str;
-
- if ((uintptr_t) *ptr % 1)
- ++*ptr;
- wchar_t *ret = (wchar_t *) *ptr;
- wchar_t *p = (wchar_t *) *ptr;
- GetLocaleInfoW (lcid, type, buf, 80);
- for (wchar_t *fmt = buf; *fmt; ++fmt)
- switch (fc = *fmt)
- {
- case L'\'':
- if (fmt[1] == L'\'')
- *p++ = L'\'';
- else
- while (fmt[1] && *++fmt != L'\'')
- *p++ = *fmt;
- break;
- case L'd':
- case L'M':
- case L'y':
- t_str = (fc == L'd' ? day_str : fc == L'M' ? mon_str : year_str);
- for (idx = 0; fmt[1] == fc; ++idx, ++fmt);
- if (idx > 3)
- idx = 3;
- if ((flags & DT_ABBREV) && fc != L'y' && idx == 3)
- idx = 2;
- *p++ = L'%';
- *p++ = t_str[idx];
- break;
- case L'g':
- /* TODO */
- break;
- case L'h':
- case L'H':
- t_str = (fc == L'h' || (flags & DT_AMPM) ? hour12_str : hour24_str);
- idx = 0;
- if (fmt[1] == fc)
- {
- ++fmt;
- idx = 1;
- }
- *p++ = L'%';
- *p++ = t_str[idx];
- break;
- case L'm':
- case L's':
- case L't':
- if (fmt[1] == fc)
- ++fmt;
- *p++ = L'%';
- *p++ = (fc == L'm' ? L'M' : fc == L's' ? L'S' : L'p');
- break;
- case L'\t':
- case L'\n':
- case L'%':
- *p++ = L'%';
- *p++ = fc;
- break;
- default:
- *p++ = *fmt;
- break;
- }
- *p++ = L'\0';
- *ptr = (char *) p;
- return ret;
-}
-
-/* Convert Windows grouping format into POSIX grouping format. */
-static char *
-conv_grouping (LCID lcid, LCTYPE type, char **lc_ptr)
-{
- char buf[10]; /* Per MSDN max size of LOCALE_SGROUPING element incl. NUL */
- bool repeat = false;
- char *ptr = *lc_ptr;
- char *ret = ptr;
-
- GetLocaleInfoA (lcid, type, buf, 10);
- /* Convert Windows grouping format into POSIX grouping format. */
- for (char *c = buf; *c; ++c)
- {
- if (*c < '0' || *c > '9')
- continue;
- char val = *c - '0';
- if (!val)
- {
- repeat = true;
- break;
- }
- *ptr++ = val;
- }
- if (!repeat)
- *ptr++ = CHAR_MAX;
- *ptr++ = '\0';
- *lc_ptr = ptr;
- return ret;
-}
-
-/* Called from newlib's setlocale() via __time_load_locale() if category
- is LC_TIME. Returns LC_TIME values fetched from Windows locale data
- in the structure pointed to by _time_locale. This is subsequently
- accessed by functions like nl_langinfo, strftime, strptime. */
-extern "C" int
-__set_lc_time_from_win (const char *name,
- const struct lc_time_T *_C_time_locale,
- struct lc_time_T *_time_locale,
- char **lc_time_buf, wctomb_p f_wctomb,
- const char *charset)
-{
- LCID lcid = __get_lcid_from_locale (name);
- if (lcid == (LCID) -1)
- return lcid;
- if (!lcid && !strcmp (charset, "ASCII"))
- return 0;
-
-# define MAX_TIME_BUFFER_SIZE 4096
-
- char *new_lc_time_buf = (char *) malloc (MAX_TIME_BUFFER_SIZE);
- const char *lc_time_end = new_lc_time_buf + MAX_TIME_BUFFER_SIZE;
-
- if (!new_lc_time_buf)
- return -1;
- char *lc_time_ptr = new_lc_time_buf;
-
- /* C.foo is just a copy of "C" with fixed charset. */
- if (!lcid)
- memcpy (_time_locale, _C_time_locale, sizeof (struct lc_time_T));
- /* codeset */
- _time_locale->codeset = lc_time_ptr;
- lc_time_ptr = stpcpy (lc_time_ptr, charset) + 1;
-
- if (lcid)
- {
- char locale[ENCODING_LEN + 1];
- strcpy (locale, name);
- /* Removes the charset from the locale and attach the modifer to the
- language_TERRITORY part. */
- char *c = strchr (locale, '.');
- if (c)
- {
- *c = '\0';
- char *c2 = strchr (c + 1, '@');
- /* Ignore @cjknarrow modifier since it's a very personal thing between
- Cygwin and newlib... */
- if (c2 && strcmp (c2, "@cjknarrow"))
- memmove (c, c2, strlen (c2) + 1);
- }
- /* Now search in the alphabetically order lc_era array for the
- locale. */
- lc_era_t locale_key = { locale, NULL, NULL, NULL, NULL, NULL ,
- NULL, NULL, NULL, NULL, NULL };
- lc_era_t *era = (lc_era_t *) bsearch ((void *) &locale_key, (void *) lc_era,
- sizeof lc_era / sizeof *lc_era,
- sizeof *lc_era, locale_cmp);
-
- /* mon */
- /* Windows has a bug in Japanese and Korean locales. In these
- locales, strings returned for LOCALE_SABBREVMONTHNAME* are missing
- the suffix representing a month. Unfortunately this is not
- documented in English. A Japanese article describing the problem
- is http://msdn.microsoft.com/ja-jp/library/cc422084.aspx
- The workaround is to use LOCALE_SMONTHNAME* in these locales,
- even for the abbreviated month name. */
- const LCTYPE mon_base =
- lcid == MAKELANGID (LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN)
- || lcid == MAKELANGID (LANG_KOREAN, SUBLANG_KOREAN)
- ? LOCALE_SMONTHNAME1 : LOCALE_SABBREVMONTHNAME1;
- for (int i = 0; i < 12; ++i)
- {
- _time_locale->wmon[i] = getlocaleinfo (time, mon_base + i);
- _time_locale->mon[i] = charfromwchar (time, wmon[i]);
- }
- /* month and alt_month */
- for (int i = 0; i < 12; ++i)
- {
- _time_locale->wmonth[i] = getlocaleinfo (time, LOCALE_SMONTHNAME1 + i);
- _time_locale->month[i] = _time_locale->alt_month[i]
- = charfromwchar (time, wmonth[i]);
- }
- /* wday */
- _time_locale->wwday[0] = getlocaleinfo (time, LOCALE_SABBREVDAYNAME7);
- _time_locale->wday[0] = charfromwchar (time, wwday[0]);
- for (int i = 0; i < 6; ++i)
- {
- _time_locale->wwday[i + 1] = getlocaleinfo (time,
- LOCALE_SABBREVDAYNAME1 + i);
- _time_locale->wday[i + 1] = charfromwchar (time, wwday[i + 1]);
- }
- /* weekday */
- _time_locale->wweekday[0] = getlocaleinfo (time, LOCALE_SDAYNAME7);
- _time_locale->weekday[0] = charfromwchar (time, wweekday[0]);
- for (int i = 0; i < 6; ++i)
- {
- _time_locale->wweekday[i + 1] = getlocaleinfo (time,
- LOCALE_SDAYNAME1 + i);
- _time_locale->weekday[i + 1] = charfromwchar (time, wweekday[i + 1]);
- }
- size_t len;
- /* X_fmt */
- if (era && *era->t_fmt)
- {
- _time_locale->wX_fmt = (const wchar_t *) lc_time_ptr;
- lc_time_ptr = (char *) (wcpcpy ((wchar_t *) _time_locale->wX_fmt,
- era->t_fmt) + 1);
- }
- else
- _time_locale->wX_fmt = eval_datetimefmt (LOCALE_STIMEFORMAT, DT_DEFAULT);
- _time_locale->X_fmt = charfromwchar (time, wX_fmt);
- /* x_fmt */
- if (era && *era->d_fmt)
- {
- _time_locale->wx_fmt = (const wchar_t *) lc_time_ptr;
- lc_time_ptr = (char *) (wcpcpy ((wchar_t *) _time_locale->wx_fmt,
- era->d_fmt) + 1);
- }
- else
- _time_locale->wx_fmt = eval_datetimefmt (LOCALE_SSHORTDATE, DT_DEFAULT);
- _time_locale->x_fmt = charfromwchar (time, wx_fmt);
- /* c_fmt */
- if (era && *era->d_t_fmt)
- {
- _time_locale->wc_fmt = (const wchar_t *) lc_time_ptr;
- lc_time_ptr = (char *) (wcpcpy ((wchar_t *) _time_locale->wc_fmt,
- era->d_t_fmt) + 1);
- }
- else
- {
- _time_locale->wc_fmt = eval_datetimefmt (LOCALE_SLONGDATE, DT_ABBREV);
- ((wchar_t *) lc_time_ptr)[-1] = L' ';
- eval_datetimefmt (LOCALE_STIMEFORMAT, DT_DEFAULT);
- }
- _time_locale->c_fmt = charfromwchar (time, wc_fmt);
- /* AM/PM */
- _time_locale->wam_pm[0] = getlocaleinfo (time, LOCALE_S1159);
- _time_locale->wam_pm[1] = getlocaleinfo (time, LOCALE_S2359);
- _time_locale->am_pm[0] = charfromwchar (time, wam_pm[0]);
- _time_locale->am_pm[1] = charfromwchar (time, wam_pm[1]);
- /* date_fmt */
- if (era && *era->date_fmt)
- {
- _time_locale->wdate_fmt = (const wchar_t *) lc_time_ptr;
- lc_time_ptr = (char *) (wcpcpy ((wchar_t *) _time_locale->wdate_fmt,
- era->date_fmt) + 1);
- }
- else
- _time_locale->wdate_fmt = _time_locale->wc_fmt;
- _time_locale->date_fmt = charfromwchar (time, wdate_fmt);
- /* md */
- {
- wchar_t buf[80];
- GetLocaleInfoW (lcid, LOCALE_IDATE, buf, 80);
- _time_locale->md_order = (const char *) lc_time_ptr;
- lc_time_ptr = stpcpy (lc_time_ptr, *buf == L'1' ? "dm" : "md") + 1;
- }
- /* ampm_fmt */
- if (era)
- {
- _time_locale->wampm_fmt = (const wchar_t *) lc_time_ptr;
- lc_time_ptr = (char *) (wcpcpy ((wchar_t *) _time_locale->wampm_fmt,
- era->t_fmt_ampm) + 1);
- }
- else
- _time_locale->wampm_fmt = eval_datetimefmt (LOCALE_STIMEFORMAT, DT_AMPM);
- _time_locale->ampm_fmt = charfromwchar (time, wampm_fmt);
-
- if (era)
- {
- /* Evaluate string length in target charset. Characters invalid in the
- target charset are simply ignored, as on Linux. */
- len = 0;
- len += lc_wcstombs (f_wctomb, charset, NULL, era->era, 0) + 1;
- len += lc_wcstombs (f_wctomb, charset, NULL, era->era_d_fmt, 0) + 1;
- len += lc_wcstombs (f_wctomb, charset, NULL, era->era_d_t_fmt, 0) + 1;
- len += lc_wcstombs (f_wctomb, charset, NULL, era->era_t_fmt, 0) + 1;
- len += lc_wcstombs (f_wctomb, charset, NULL, era->alt_digits, 0) + 1;
- len += (wcslen (era->era) + 1) * sizeof (wchar_t);
- len += (wcslen (era->era_d_fmt) + 1) * sizeof (wchar_t);
- len += (wcslen (era->era_d_t_fmt) + 1) * sizeof (wchar_t);
- len += (wcslen (era->era_t_fmt) + 1) * sizeof (wchar_t);
- len += (wcslen (era->alt_digits) + 1) * sizeof (wchar_t);
-
- /* Make sure data fits into the buffer */
- if (lc_time_ptr + len > lc_time_end)
- {
- len = lc_time_ptr + len - new_lc_time_buf;
- char *tmp = (char *) realloc (new_lc_time_buf, len);
- if (!tmp)
- era = NULL;
- else
- {
- if (tmp != new_lc_time_buf)
- rebase_locale_buf (_time_locale, _time_locale + 1, tmp,
- new_lc_time_buf, lc_time_ptr);
- lc_time_ptr = tmp + (lc_time_ptr - new_lc_time_buf);
- new_lc_time_buf = tmp;
- lc_time_end = new_lc_time_buf + len;
- }
- }
- /* Copy over */
- if (era)
- {
- /* era */
- _time_locale->wera = (const wchar_t *) lc_time_ptr;
- lc_time_ptr = (char *) (wcpcpy ((wchar_t *) _time_locale->wera,
- era->era) + 1);
- _time_locale->era = charfromwchar (time, wera);
- /* era_d_fmt */
- _time_locale->wera_d_fmt = (const wchar_t *) lc_time_ptr;
- lc_time_ptr = (char *) (wcpcpy ((wchar_t *) _time_locale->wera_d_fmt,
- era->era_d_fmt) + 1);
- _time_locale->era_d_fmt = charfromwchar (time, wera_d_fmt);
- /* era_d_t_fmt */
- _time_locale->wera_d_t_fmt = (const wchar_t *) lc_time_ptr;
- lc_time_ptr = (char *) (wcpcpy ((wchar_t *) _time_locale->wera_d_t_fmt,
- era->era_d_t_fmt) + 1);
- _time_locale->era_d_t_fmt = charfromwchar (time, wera_d_t_fmt);
- /* era_t_fmt */
- _time_locale->wera_t_fmt = (const wchar_t *) lc_time_ptr;
- lc_time_ptr = (char *) (wcpcpy ((wchar_t *) _time_locale->wera_t_fmt,
- era->era_t_fmt) + 1);
- _time_locale->era_t_fmt = charfromwchar (time, wera_t_fmt);
- /* alt_digits */
- _time_locale->walt_digits = (const wchar_t *) lc_time_ptr;
- lc_time_ptr = (char *) (wcpcpy ((wchar_t *) _time_locale->walt_digits,
- era->alt_digits) + 1);
- _time_locale->alt_digits = charfromwchar (time, walt_digits);
- }
- }
- if (!era)
- {
- _time_locale->wera =
- _time_locale->wera_d_fmt =
- _time_locale->wera_d_t_fmt =
- _time_locale->wera_t_fmt =
- _time_locale->walt_digits = (const wchar_t *) lc_time_ptr;
- _time_locale->era =
- _time_locale->era_d_fmt =
- _time_locale->era_d_t_fmt =
- _time_locale->era_t_fmt =
- _time_locale->alt_digits = (const char *) lc_time_ptr;
- /* Twice, to make sure wide char strings are correctly terminated. */
- *lc_time_ptr++ = '\0';
- *lc_time_ptr++ = '\0';
- }
- }
-
- char *tmp = (char *) realloc (new_lc_time_buf, lc_time_ptr - new_lc_time_buf);
- if (!tmp)
- {
- free (new_lc_time_buf);
- return -1;
- }
- if (tmp != new_lc_time_buf)
- rebase_locale_buf (_time_locale, _time_locale + 1, tmp,
- new_lc_time_buf, lc_time_ptr);
- if (*lc_time_buf)
- free (*lc_time_buf);
- *lc_time_buf = tmp;
- return 1;
-}
-
-/* Called from newlib's setlocale() via __ctype_load_locale() if category
- is LC_CTYPE. Returns LC_CTYPE values fetched from Windows locale data
- in the structure pointed to by _ctype_locale. This is subsequently
- accessed by functions like nl_langinfo, localeconv, printf, etc. */
-extern "C" int
-__set_lc_ctype_from_win (const char *name,
- const struct lc_ctype_T *_C_ctype_locale,
- struct lc_ctype_T *_ctype_locale,
- char **lc_ctype_buf, wctomb_p f_wctomb,
- const char *charset, int mb_cur_max)
-{
- LCID lcid = __get_lcid_from_locale (name);
- if (lcid == (LCID) -1)
- return lcid;
- if (!lcid && !strcmp (charset, "ASCII"))
- return 0;
-
-# define MAX_CTYPE_BUFFER_SIZE 256
-
- char *new_lc_ctype_buf = (char *) malloc (MAX_CTYPE_BUFFER_SIZE);
-
- if (!new_lc_ctype_buf)
- return -1;
- char *lc_ctype_ptr = new_lc_ctype_buf;
- /* C.foo is just a copy of "C" with fixed charset. */
- if (!lcid)
- memcpy (_ctype_locale, _C_ctype_locale, sizeof (struct lc_ctype_T));
- /* codeset */
- _ctype_locale->codeset = lc_ctype_ptr;
- lc_ctype_ptr = stpcpy (lc_ctype_ptr, charset) + 1;
- /* mb_cur_max */
- _ctype_locale->mb_cur_max = lc_ctype_ptr;
- *lc_ctype_ptr++ = mb_cur_max;
- *lc_ctype_ptr++ = '\0';
- if (lcid)
- {
- /* outdigits and woutdigits */
- wchar_t digits[11];
- GetLocaleInfoW (lcid, LOCALE_SNATIVEDIGITS, digits, 11);
- for (int i = 0; i <= 9; ++i)
- {
- mbstate_t state;
-
- /* Make sure the wchar_t's are always 2 byte aligned. */
- if ((uintptr_t) lc_ctype_ptr % 2)
- ++lc_ctype_ptr;
- wchar_t *woutdig = (wchar_t *) lc_ctype_ptr;
- _ctype_locale->woutdigits[i] = (const wchar_t *) woutdig;
- *woutdig++ = digits[i];
- *woutdig++ = L'\0';
- lc_ctype_ptr = (char *) woutdig;
- _ctype_locale->outdigits[i] = lc_ctype_ptr;
- memset (&state, 0, sizeof state);
- lc_ctype_ptr += f_wctomb (_REENT, lc_ctype_ptr, digits[i], charset,
- &state);
- *lc_ctype_ptr++ = '\0';
- }
- }
-
- char *tmp = (char *) realloc (new_lc_ctype_buf,
- lc_ctype_ptr - new_lc_ctype_buf);
- if (!tmp)
- {
- free (new_lc_ctype_buf);
- return -1;
- }
- if (tmp != new_lc_ctype_buf)
- rebase_locale_buf (_ctype_locale, _ctype_locale + 1, tmp,
- new_lc_ctype_buf, lc_ctype_ptr);
- if (*lc_ctype_buf)
- free (*lc_ctype_buf);
- *lc_ctype_buf = tmp;
- return 1;
-}
-
-/* Called from newlib's setlocale() via __numeric_load_locale() if category
- is LC_NUMERIC. Returns LC_NUMERIC values fetched from Windows locale data
- in the structure pointed to by _numeric_locale. This is subsequently
- accessed by functions like nl_langinfo, localeconv, printf, etc. */
-extern "C" int
-__set_lc_numeric_from_win (const char *name,
- const struct lc_numeric_T *_C_numeric_locale,
- struct lc_numeric_T *_numeric_locale,
- char **lc_numeric_buf, wctomb_p f_wctomb,
- const char *charset)
-{
- LCID lcid = __get_lcid_from_locale (name);
- if (lcid == (LCID) -1)
- return lcid;
- if (!lcid && !strcmp (charset, "ASCII"))
- return 0;
-
-# define MAX_NUMERIC_BUFFER_SIZE 256
-
- char *new_lc_numeric_buf = (char *) malloc (MAX_NUMERIC_BUFFER_SIZE);
- const char *lc_numeric_end = new_lc_numeric_buf + MAX_NUMERIC_BUFFER_SIZE;
-
- if (!new_lc_numeric_buf)
- return -1;
- char *lc_numeric_ptr = new_lc_numeric_buf;
- /* C.foo is just a copy of "C" with fixed charset. */
- if (!lcid)
- memcpy (_numeric_locale, _C_numeric_locale, sizeof (struct lc_numeric_T));
- else
- {
- /* decimal_point */
- _numeric_locale->wdecimal_point = getlocaleinfo (numeric, LOCALE_SDECIMAL);
- _numeric_locale->decimal_point = charfromwchar (numeric, wdecimal_point);
- /* thousands_sep */
- _numeric_locale->wthousands_sep = getlocaleinfo (numeric, LOCALE_STHOUSAND);
- _numeric_locale->thousands_sep = charfromwchar (numeric, wthousands_sep);
- /* grouping */
- _numeric_locale->grouping = conv_grouping (lcid, LOCALE_SGROUPING,
- &lc_numeric_ptr);
- }
- /* codeset */
- _numeric_locale->codeset = lc_numeric_ptr;
- lc_numeric_ptr = stpcpy (lc_numeric_ptr, charset) + 1;
-
- char *tmp = (char *) realloc (new_lc_numeric_buf,
- lc_numeric_ptr - new_lc_numeric_buf);
- if (!tmp)
- {
- free (new_lc_numeric_buf);
- return -1;
- }
- if (tmp != new_lc_numeric_buf)
- rebase_locale_buf (_numeric_locale, _numeric_locale + 1, tmp,
- new_lc_numeric_buf, lc_numeric_ptr);
- if (*lc_numeric_buf)
- free (*lc_numeric_buf);
- *lc_numeric_buf = tmp;
- return 1;
-}
-
-/* Called from newlib's setlocale() via __monetary_load_locale() if category
- is LC_MONETARY. Returns LC_MONETARY values fetched from Windows locale data
- in the structure pointed to by _monetary_locale. This is subsequently
- accessed by functions like nl_langinfo, localeconv, printf, etc. */
-extern "C" int
-__set_lc_monetary_from_win (const char *name,
- const struct lc_monetary_T *_C_monetary_locale,
- struct lc_monetary_T *_monetary_locale,
- char **lc_monetary_buf, wctomb_p f_wctomb,
- const char *charset)
-{
- LCID lcid = __get_lcid_from_locale (name);
- if (lcid == (LCID) -1)
- return lcid;
- if (!lcid && !strcmp (charset, "ASCII"))
- return 0;
-
-# define MAX_MONETARY_BUFFER_SIZE 512
-
- char *new_lc_monetary_buf = (char *) malloc (MAX_MONETARY_BUFFER_SIZE);
- const char *lc_monetary_end = new_lc_monetary_buf + MAX_MONETARY_BUFFER_SIZE;
-
- if (!new_lc_monetary_buf)
- return -1;
- char *lc_monetary_ptr = new_lc_monetary_buf;
- /* C.foo is just a copy of "C" with fixed charset. */
- if (!lcid)
- memcpy (_monetary_locale, _C_monetary_locale, sizeof (struct lc_monetary_T));
- else
- {
- /* int_curr_symbol */
- _monetary_locale->wint_curr_symbol = getlocaleinfo (monetary,
- LOCALE_SINTLSYMBOL);
- /* No spacing char means space. */
- if (!_monetary_locale->wint_curr_symbol[3])
- {
- wchar_t *wc = (wchar_t *) _monetary_locale->wint_curr_symbol + 3;
- *wc++ = L' ';
- *wc++ = L'\0';
- lc_monetary_ptr = (char *) wc;
- }
- _monetary_locale->int_curr_symbol = charfromwchar (monetary,
- wint_curr_symbol);
- /* currency_symbol */
- _monetary_locale->wcurrency_symbol = getlocaleinfo (monetary,
- LOCALE_SCURRENCY);
- /* As on Linux: If the currency_symbol can't be represented in the
- given charset, use int_curr_symbol. */
- if (lc_wcstombs (f_wctomb, charset, NULL,
- _monetary_locale->wcurrency_symbol,
- 0, true) == (size_t) -1)
- _monetary_locale->currency_symbol = _monetary_locale->int_curr_symbol;
- else
- _monetary_locale->currency_symbol = charfromwchar (monetary,
- wcurrency_symbol);
- /* mon_decimal_point */
- _monetary_locale->wmon_decimal_point = getlocaleinfo (monetary,
- LOCALE_SMONDECIMALSEP);
- _monetary_locale->mon_decimal_point = charfromwchar (monetary,
- wmon_decimal_point);
- /* mon_thousands_sep */
- _monetary_locale->wmon_thousands_sep = getlocaleinfo (monetary,
- LOCALE_SMONTHOUSANDSEP);
- _monetary_locale->mon_thousands_sep = charfromwchar (monetary,
- wmon_thousands_sep);
- /* mon_grouping */
- _monetary_locale->mon_grouping = conv_grouping (lcid, LOCALE_SMONGROUPING,
- &lc_monetary_ptr);
- /* positive_sign */
- _monetary_locale->wpositive_sign = getlocaleinfo (monetary,
- LOCALE_SPOSITIVESIGN);
- _monetary_locale->positive_sign = charfromwchar (monetary, wpositive_sign);
- /* negative_sign */
- _monetary_locale->wnegative_sign = getlocaleinfo (monetary,
- LOCALE_SNEGATIVESIGN);
- _monetary_locale->negative_sign = charfromwchar (monetary, wnegative_sign);
- /* int_frac_digits */
- *lc_monetary_ptr = (char) getlocaleint (lcid, LOCALE_IINTLCURRDIGITS);
- _monetary_locale->int_frac_digits = lc_monetary_ptr++;
- /* frac_digits */
- *lc_monetary_ptr = (char) getlocaleint (lcid, LOCALE_ICURRDIGITS);
- _monetary_locale->frac_digits = lc_monetary_ptr++;
- /* p_cs_precedes and int_p_cs_precedes */
- *lc_monetary_ptr = (char) getlocaleint (lcid, LOCALE_IPOSSYMPRECEDES);
- _monetary_locale->p_cs_precedes
- = _monetary_locale->int_p_cs_precedes = lc_monetary_ptr++;
- /* p_sep_by_space and int_p_sep_by_space */
- *lc_monetary_ptr = (char) getlocaleint (lcid, LOCALE_IPOSSEPBYSPACE);
- _monetary_locale->p_sep_by_space
- = _monetary_locale->int_p_sep_by_space = lc_monetary_ptr++;
- /* n_cs_precedes and int_n_cs_precedes */
- *lc_monetary_ptr = (char) getlocaleint (lcid, LOCALE_INEGSYMPRECEDES);
- _monetary_locale->n_cs_precedes
- = _monetary_locale->int_n_cs_precedes = lc_monetary_ptr++;
- /* n_sep_by_space and int_n_sep_by_space */
- *lc_monetary_ptr = (char) getlocaleint (lcid, LOCALE_INEGSEPBYSPACE);
- _monetary_locale->n_sep_by_space
- = _monetary_locale->int_n_sep_by_space = lc_monetary_ptr++;
- /* p_sign_posn and int_p_sign_posn */
- *lc_monetary_ptr = (char) getlocaleint (lcid, LOCALE_IPOSSIGNPOSN);
- _monetary_locale->p_sign_posn
- = _monetary_locale->int_p_sign_posn = lc_monetary_ptr++;
- /* n_sign_posn and int_n_sign_posn */
- *lc_monetary_ptr = (char) getlocaleint (lcid, LOCALE_INEGSIGNPOSN);
- _monetary_locale->n_sign_posn
- = _monetary_locale->int_n_sign_posn = lc_monetary_ptr++;
- }
- /* codeset */
- _monetary_locale->codeset = lc_monetary_ptr;
- lc_monetary_ptr = stpcpy (lc_monetary_ptr, charset) + 1;
-
- char *tmp = (char *) realloc (new_lc_monetary_buf,
- lc_monetary_ptr - new_lc_monetary_buf);
- if (!tmp)
- {
- free (new_lc_monetary_buf);
- return -1;
- }
- if (tmp != new_lc_monetary_buf)
- rebase_locale_buf (_monetary_locale, _monetary_locale + 1, tmp,
- new_lc_monetary_buf, lc_monetary_ptr);
- if (*lc_monetary_buf)
- free (*lc_monetary_buf);
- *lc_monetary_buf = tmp;
- return 1;
-}
-
-extern "C" int
-__set_lc_messages_from_win (const char *name,
- const struct lc_messages_T *_C_messages_locale,
- struct lc_messages_T *_messages_locale,
- char **lc_messages_buf,
- wctomb_p f_wctomb, const char *charset)
-{
- LCID lcid = __get_lcid_from_locale (name);
- if (lcid == (LCID) -1)
- return lcid;
- if (!lcid && !strcmp (charset, "ASCII"))
- return 0;
-
- char locale[ENCODING_LEN + 1];
- char *c, *c2;
- lc_msg_t *msg = NULL;
-
- /* C.foo is just a copy of "C" with fixed charset. */
- if (!lcid)
- memcpy (_messages_locale, _C_messages_locale, sizeof (struct lc_messages_T));
- else
- {
- strcpy (locale, name);
- /* Removes the charset from the locale and attach the modifer to the
- language_TERRITORY part. */
- c = strchr (locale, '.');
- if (c)
- {
- *c = '\0';
- c2 = strchr (c + 1, '@');
- /* Ignore @cjknarrow modifier since it's a very personal thing between
- Cygwin and newlib... */
- if (c2 && strcmp (c2, "@cjknarrow"))
- memmove (c, c2, strlen (c2) + 1);
- }
- /* Now search in the alphabetically order lc_msg array for the
- locale. */
- lc_msg_t locale_key = { locale, NULL, NULL, NULL, NULL };
- msg = (lc_msg_t *) bsearch ((void *) &locale_key, (void *) lc_msg,
- sizeof lc_msg / sizeof *lc_msg,
- sizeof *lc_msg, locale_cmp);
- if (!msg)
- return 0;
- }
-
- /* Evaluate string length in target charset. Characters invalid in the
- target charset are simply ignored, as on Linux. */
- size_t len = 0;
- len += (strlen (charset) + 1);
- if (lcid)
- {
- len += lc_wcstombs (f_wctomb, charset, NULL, msg->yesexpr, 0) + 1;
- len += lc_wcstombs (f_wctomb, charset, NULL, msg->noexpr, 0) + 1;
- len += lc_wcstombs (f_wctomb, charset, NULL, msg->yesstr, 0) + 1;
- len += lc_wcstombs (f_wctomb, charset, NULL, msg->nostr, 0) + 1;
- len += (wcslen (msg->yesexpr) + 1) * sizeof (wchar_t);
- len += (wcslen (msg->noexpr) + 1) * sizeof (wchar_t);
- len += (wcslen (msg->yesstr) + 1) * sizeof (wchar_t);
- len += (wcslen (msg->nostr) + 1) * sizeof (wchar_t);
- if (len % 1)
- ++len;
- }
- /* Allocate. */
- char *new_lc_messages_buf = (char *) malloc (len);
- const char *lc_messages_end = new_lc_messages_buf + len;
-
- if (!new_lc_messages_buf)
- return -1;
- /* Copy over. */
- c = new_lc_messages_buf;
- /* codeset */
- _messages_locale->codeset = c;
- c = stpcpy (c, charset) + 1;
- if (lcid)
- {
- _messages_locale->yesexpr = (const char *) c;
- len = lc_wcstombs (f_wctomb, charset, c, msg->yesexpr, lc_messages_end - c);
- _messages_locale->noexpr = (const char *) (c += len + 1);
- len = lc_wcstombs (f_wctomb, charset, c, msg->noexpr, lc_messages_end - c);
- _messages_locale->yesstr = (const char *) (c += len + 1);
- len = lc_wcstombs (f_wctomb, charset, c, msg->yesstr, lc_messages_end - c);
- _messages_locale->nostr = (const char *) (c += len + 1);
- len = lc_wcstombs (f_wctomb, charset, c, msg->nostr, lc_messages_end - c);
- c += len + 1;
- if ((uintptr_t) c % 1)
- ++c;
- wchar_t *wc = (wchar_t *) c;
- _messages_locale->wyesexpr = (const wchar_t *) wc;
- wc = wcpcpy (wc, msg->yesexpr) + 1;
- _messages_locale->wnoexpr = (const wchar_t *) wc;
- wc = wcpcpy (wc, msg->noexpr) + 1;
- _messages_locale->wyesstr = (const wchar_t *) wc;
- wc = wcpcpy (wc, msg->yesstr) + 1;
- _messages_locale->wnostr = (const wchar_t *) wc;
- wcpcpy (wc, msg->nostr);
- }
- /* Aftermath. */
- if (*lc_messages_buf)
- free (*lc_messages_buf);
- *lc_messages_buf = new_lc_messages_buf;
- return 1;
-}
-
-LCID collate_lcid = 0;
-static mbtowc_p collate_mbtowc = __ascii_mbtowc;
-char collate_charset[ENCODING_LEN + 1] = "ASCII";
-
-/* Called from newlib's setlocale() if category is LC_COLLATE. Stores
- LC_COLLATE locale information. This is subsequently accessed by the
- below functions strcoll, strxfrm, wcscoll, wcsxfrm. */
-extern "C" int
-__collate_load_locale (const char *name, mbtowc_p f_mbtowc, const char *charset)
-{
- LCID lcid = __get_lcid_from_locale (name);
- if (lcid == (LCID) -1)
- return -1;
- collate_lcid = lcid;
- collate_mbtowc = f_mbtowc;
- stpcpy (collate_charset, charset);
- return 0;
-}
-
-extern "C" const char *
-__get_current_collate_codeset (void)
-{
- return collate_charset;
-}
-
-/* We use the Windows functions for locale-specific string comparison and
- transformation. The advantage is that we don't need any files with
- collation information. */
-extern "C" int
-wcscoll (const wchar_t *__restrict ws1, const wchar_t *__restrict ws2)
-{
- int ret;
-
- if (!collate_lcid)
- return wcscmp (ws1, ws2);
- ret = CompareStringW (collate_lcid, 0, ws1, -1, ws2, -1);
- if (!ret)
- set_errno (EINVAL);
- return ret - CSTR_EQUAL;
-}
-
-extern "C" int
-strcoll (const char *__restrict s1, const char *__restrict s2)
-{
- size_t n1, n2;
- wchar_t *ws1, *ws2;
- tmp_pathbuf tp;
- int ret;
-
- if (!collate_lcid)
- return strcmp (s1, s2);
- /* The ANSI version of CompareString uses the default charset of the lcid,
- so we must use the Unicode version. */
- n1 = lc_mbstowcs (collate_mbtowc, collate_charset, NULL, s1, 0) + 1;
- ws1 = (n1 > NT_MAX_PATH ? (wchar_t *) malloc (n1 * sizeof (wchar_t))
- : tp.w_get ());
- lc_mbstowcs (collate_mbtowc, collate_charset, ws1, s1, n1);
- n2 = lc_mbstowcs (collate_mbtowc, collate_charset, NULL, s2, 0) + 1;
- ws2 = (n2 > NT_MAX_PATH ? (wchar_t *) malloc (n2 * sizeof (wchar_t))
- : tp.w_get ());
- lc_mbstowcs (collate_mbtowc, collate_charset, ws2, s2, n2);
- ret = CompareStringW (collate_lcid, 0, ws1, -1, ws2, -1);
- if (n1 > NT_MAX_PATH)
- free (ws1);
- if (n2 > NT_MAX_PATH)
- free (ws2);
- if (!ret)
- set_errno (EINVAL);
- return ret - CSTR_EQUAL;
-}
-
-/* BSD. Used from glob.cc, fnmatch.c and regcomp.c. Make sure caller is
- using wide chars. Unfortunately the definition of this functions hides
- the required input type. */
-extern "C" int
-__collate_range_cmp (int c1, int c2)
-{
- wchar_t s1[2] = { (wchar_t) c1, L'\0' };
- wchar_t s2[2] = { (wchar_t) c2, L'\0' };
- return wcscoll (s1, s2);
-}
-
-extern "C" size_t
-wcsxfrm (wchar_t *__restrict ws1, const wchar_t *__restrict ws2, size_t wsn)
-{
- size_t ret;
-
- if (!collate_lcid)
- return wcslcpy (ws1, ws2, wsn);
- ret = LCMapStringW (collate_lcid, LCMAP_SORTKEY | LCMAP_BYTEREV,
- ws2, -1, ws1, wsn * sizeof (wchar_t));
- /* LCMapStringW returns byte count including the terminating NUL character,
- wcsxfrm is supposed to return length in wchar_t excluding the NUL.
- Since the array is only single byte NUL-terminated we must make sure
- the result is wchar_t-NUL terminated. */
- if (ret)
- {
- ret = (ret + 1) / sizeof (wchar_t);
- if (ret >= wsn)
- return wsn;
- ws1[ret] = L'\0';
- return ret;
- }
- if (GetLastError () != ERROR_INSUFFICIENT_BUFFER)
- set_errno (EINVAL);
- return wsn;
-}
-
-extern "C" size_t
-strxfrm (char *__restrict s1, const char *__restrict s2, size_t sn)
-{
- size_t ret;
- size_t n2;
- wchar_t *ws2;
- tmp_pathbuf tp;
-
- if (!collate_lcid)
- return strlcpy (s1, s2, sn);
- /* The ANSI version of LCMapString uses the default charset of the lcid,
- so we must use the Unicode version. */
- n2 = lc_mbstowcs (collate_mbtowc, collate_charset, NULL, s2, 0) + 1;
- ws2 = (n2 > NT_MAX_PATH ? (wchar_t *) malloc (n2 * sizeof (wchar_t))
- : tp.w_get ());
- lc_mbstowcs (collate_mbtowc, collate_charset, ws2, s2, n2);
- /* The sort key is a NUL-terminated byte string. */
- ret = LCMapStringW (collate_lcid, LCMAP_SORTKEY, ws2, -1, (PWCHAR) s1, sn);
- if (n2 > NT_MAX_PATH)
- free (ws2);
- if (ret == 0)
- {
- if (GetLastError () != ERROR_INSUFFICIENT_BUFFER)
- set_errno (EINVAL);
- return sn;
- }
- /* LCMapStringW returns byte count including the terminating NUL character.
- strxfrm is supposed to return length excluding the NUL. */
- return ret - 1;
-}
-
-/* Fetch default ANSI codepage from locale info and generate a setlocale
- compatible character set code. Called from newlib's setlocale(), if the
- charset isn't given explicitely in the POSIX compatible locale specifier. */
-extern "C" void
-__set_charset_from_locale (const char *locale, char *charset)
-{
- UINT cp;
- LCID lcid = __get_lcid_from_locale (locale);
- wchar_t wbuf[9];
-
- /* "C" locale, or invalid locale? */
- if (lcid == 0 || lcid == (LCID) -1)
- cp = 20127;
- else if (!GetLocaleInfoW (lcid,
- LOCALE_IDEFAULTANSICODEPAGE | LOCALE_RETURN_NUMBER,
- (PWCHAR) &cp, sizeof cp))
- cp = 0;
- /* Translate codepage and lcid to a charset closely aligned with the default
- charsets defined in Glibc. */
- const char *cs;
- const char *modifier = strchr (locale, '@') ?: "";
- switch (cp)
- {
- case 20127:
- cs = "ASCII";
- break;
- case 874:
- cs = "CP874";
- break;
- case 932:
- cs = "EUCJP";
- break;
- case 936:
- cs = "GB2312";
- break;
- case 949:
- cs = "EUCKR";
- break;
- case 950:
- cs = "BIG5";
- break;
- case 1250:
- if (lcid == 0x081a /* sr_CS (Serbian Language/Former
- Serbia and Montenegro) */
- || lcid == 0x181a /* sr_BA (Serbian Language/Bosnia
- and Herzegovina) */
- || lcid == 0x241a /* sr_RS (Serbian Language/Serbia) */
- || lcid == 0x2c1a /* sr_ME (Serbian Language/Montenegro)*/
- || lcid == 0x0442) /* tk_TM (Turkmen/Turkmenistan) */
- cs = "UTF-8";
- else if (lcid == 0x041c) /* sq_AL (Albanian/Albania) */
- cs = "ISO-8859-1";
- else
- cs = "ISO-8859-2";
- break;
- case 1251:
- if (lcid == 0x0c1a /* sr_CS (Serbian Language/Former
- Serbia and Montenegro) */
- || lcid == 0x1c1a /* sr_BA (Serbian Language/Bosnia
- and Herzegovina) */
- || lcid == 0x281a /* sr_RS (Serbian Language/Serbia) */
- || lcid == 0x301a /* sr_ME (Serbian Language/Montenegro)*/
- || lcid == 0x0440 /* ky_KG (Kyrgyz/Kyrgyzstan) */
- || lcid == 0x0843 /* uz_UZ (Uzbek/Uzbekistan) */
- /* tt_RU (Tatar/Russia),
- IQTElif alphabet */
- || (lcid == 0x0444 && has_modifier ("@iqtelif"))
- || lcid == 0x0450) /* mn_MN (Mongolian/Mongolia) */
- cs = "UTF-8";
- else if (lcid == 0x0423) /* be_BY (Belarusian/Belarus) */
- cs = has_modifier ("@latin") ? "UTF-8" : "CP1251";
- else if (lcid == 0x0402) /* bg_BG (Bulgarian/Bulgaria) */
- cs = "CP1251";
- else if (lcid == 0x0422) /* uk_UA (Ukrainian/Ukraine) */
- cs = "KOI8-U";
- else
- cs = "ISO-8859-5";
- break;
- case 1252:
- if (lcid == 0x0452) /* cy_GB (Welsh/Great Britain) */
- cs = "ISO-8859-14";
- else if (lcid == 0x4009 /* en_IN (English/India) */
- || lcid == 0x0867 /* ff_SN (Fulah/Senegal) */
- || lcid == 0x0464 /* fil_PH (Filipino/Philippines) */
- || lcid == 0x0462 /* fy_NL (Frisian/Netherlands) */
- || lcid == 0x0468 /* ha_NG (Hausa/Nigeria) */
- || lcid == 0x0475 /* haw_US (Hawaiian/United States) */
- || lcid == 0x0470 /* ig_NG (Igbo/Nigeria) */
- || lcid == 0x085d /* iu_CA (Inuktitut/Canada) */
- || lcid == 0x046c /* nso_ZA (Northern Sotho/South Africa) */
- || lcid == 0x0487 /* rw_RW (Kinyarwanda/Rwanda) */
- || lcid == 0x043b /* se_NO (Northern Saami/Norway) */
- || lcid == 0x0832 /* tn_BW (Tswana/Botswana) */
- || lcid == 0x0432 /* tn_ZA (Tswana/South Africa) */
- || lcid == 0x0488 /* wo_SN (Wolof/Senegal) */
- || lcid == 0x046a) /* yo_NG (Yoruba/Nigeria) */
- cs = "UTF-8";
- else if (lcid == 0x042e) /* hsb_DE (Upper Sorbian/Germany) */
- cs = "ISO-8859-2";
- else if (lcid == 0x0491 /* gd_GB (Scots Gaelic/Great Britain) */
- || (has_modifier ("@euro")
- && GetLocaleInfoW (lcid, LOCALE_SINTLSYMBOL, wbuf, 9)
- && !wcsncmp (wbuf, L"EUR", 3)))
- cs = "ISO-8859-15";
- else
- cs = "ISO-8859-1";
- break;
- case 1253:
- cs = "ISO-8859-7";
- break;
- case 1254:
- if (lcid == 0x042c) /* az_AZ (Azeri/Azerbaijan) */
- cs = "UTF-8";
- else if (lcid == 0x0443) /* uz_UZ (Uzbek/Uzbekistan) */
- cs = "ISO-8859-1";
- else
- cs = "ISO-8859-9";
- break;
- case 1255:
- cs = "ISO-8859-8";
- break;
- case 1256:
- if (lcid == 0x0429 /* fa_IR (Persian/Iran) */
- || lcid == 0x0846 /* pa_PK (Punjabi/Pakistan) */
- || lcid == 0x0859 /* sd_PK (Sindhi/Pakistan) */
- || lcid == 0x0480 /* ug_CN (Uyghur/China) */
- || lcid == 0x0420) /* ur_PK (Urdu/Pakistan) */
- cs = "UTF-8";
- else
- cs = "ISO-8859-6";
- break;
- case 1257:
- if (lcid == 0x0425) /* et_EE (Estonian/Estonia) */
- cs = "ISO-8859-15";
- else
- cs = "ISO-8859-13";
- break;
- case 1258:
- default:
- if (lcid == 0x3c09 /* en_HK (English/Hong Kong) */
- || lcid == 0x200c /* fr_RE (French/Réunion) */
- || lcid == 0x240c /* fr_CD (French/Congo) */
- || lcid == 0x280c /* fr_SN (French/Senegal) */
- || lcid == 0x2c0c /* fr_CM (French/Cameroon) */
- || lcid == 0x300c /* fr_CI (French/Ivory Coast) */
- || lcid == 0x340c /* fr_ML (French/Mali) */
- || lcid == 0x380c /* fr_MA (French/Morocco) */
- || lcid == 0x3c0c /* fr_HT (French/Haiti) */
- || lcid == 0x0477 /* so_SO (Somali/Somali) */
- || lcid == 0x0430) /* st_ZA (Sotho/South Africa) */
- cs = "ISO-8859-1";
- else if (lcid == 0x818) /* ro_MD (Romanian/Moldovia) */
- cs = "ISO-8859-2";
- else if (lcid == 0x043a) /* mt_MT (Maltese/Malta) */
- cs = "ISO-8859-3";
- else if (lcid == 0x0481) /* mi_NZ (Maori/New Zealand) */
- cs = "ISO-8859-13";
- else if (lcid == 0x0437) /* ka_GE (Georgian/Georgia) */
- cs = "GEORGIAN-PS";
- else if (lcid == 0x043f) /* kk_KZ (Kazakh/Kazakhstan) */
- cs = "PT154";
- else
- cs = "UTF-8";
- }
- stpcpy (charset, cs);
-}
-
-/* This function is called from newlib's loadlocale if the locale identifier
- was invalid, one way or the other. It looks for the file
-
- /usr/share/locale/locale.alias
-
- which is part of the gettext package, and if it finds the locale alias
- in that file, it replaces the locale with the correct locale string from
- that file.
-
- If successful, it returns a pointer to new_locale, NULL otherwise.*/
-extern "C" char *
-__set_locale_from_locale_alias (const char *locale, char *new_locale)
-{
- wchar_t wlocale[ENCODING_LEN + 1];
- wchar_t walias[ENCODING_LEN + 1];
-#define LOCALE_ALIAS_LINE_LEN 255
- char alias_buf[LOCALE_ALIAS_LINE_LEN + 1], *c;
- wchar_t *wc;
- const char *alias, *replace;
- char *ret = NULL;
-
- FILE *fp = fopen ("/usr/share/locale/locale.alias", "rt");
- if (!fp)
- return NULL;
- /* The incoming locale is given in the application charset, or in
- the Cygwin internal charset. We try both. */
- if (mbstowcs (wlocale, locale, ENCODING_LEN + 1) == (size_t) -1)
- sys_mbstowcs (wlocale, ENCODING_LEN + 1, locale);
- wlocale[ENCODING_LEN] = L'\0';
- /* Ignore @cjknarrow modifier since it's a very personal thing between
- Cygwin and newlib... */
- if ((wc = wcschr (wlocale, L'@')) && !wcscmp (wc + 1, L"cjknarrow"))
- *wc = L'\0';
- while (fgets (alias_buf, LOCALE_ALIAS_LINE_LEN + 1, fp))
- {
- alias_buf[LOCALE_ALIAS_LINE_LEN] = '\0';
- c = strrchr (alias_buf, '\n');
- if (c)
- *c = '\0';
- c = alias_buf;
- c += strspn (c, " \t");
- if (!*c || *c == '#')
- continue;
- alias = c;
- c += strcspn (c, " \t");
- *c++ = '\0';
- c += strspn (c, " \t");
- if (*c == '#')
- continue;
- replace = c;
- c += strcspn (c, " \t");
- *c++ = '\0';
- if (strlen (replace) > ENCODING_LEN)
- continue;
- /* The file is latin1 encoded */
- lc_mbstowcs (__iso_mbtowc, "ISO-8859-1", walias, alias, ENCODING_LEN + 1);
- walias[ENCODING_LEN] = L'\0';
- if (!wcscmp (wlocale, walias))
- {
- ret = strcpy (new_locale, replace);
- break;
- }
- }
- fclose (fp);
- return ret;
-}
-
-static char *
-check_codepage (char *ret)
-{
- if (!wincap.has_always_all_codepages ())
- {
- /* Prior to Windows Vista, many codepages are not installed by
- default, or can be deinstalled. The following codepages require
- that the respective conversion tables are installed into the OS.
- So we check if they are installed and if not, setlocale should
- fail. */
- CPINFO cpi;
- UINT cp = 0;
- if (__mbtowc == __sjis_mbtowc)
- cp = 932;
- else if (__mbtowc == __eucjp_mbtowc)
- cp = 20932;
- else if (__mbtowc == __gbk_mbtowc)
- cp = 936;
- else if (__mbtowc == __kr_mbtowc)
- cp = 949;
- else if (__mbtowc == __big5_mbtowc)
- cp = 950;
- if (cp && !GetCPInfo (cp, &cpi)
- && GetLastError () == ERROR_INVALID_PARAMETER)
- return NULL;
- }
- return ret;
-}
-
-/* Can be called via cygwin_internal (CW_INTERNAL_SETLOCALE) for application
- which really (think they) know what they are doing. */
-extern "C" void
-internal_setlocale ()
-{
- /* Each setlocale from the environment potentially changes the
- multibyte representation of the CWD. Therefore we have to
- reevaluate the CWD's posix path and store in the new charset.
- Same for the PATH environment variable. */
- /* FIXME: Other buffered paths might be affected as well. */
- /* FIXME: It could be necessary to convert the entire environment,
- not just PATH. */
- tmp_pathbuf tp;
- char *path;
- wchar_t *w_path = NULL, *w_cwd;
-
- /* Don't do anything if the charset hasn't actually changed. */
- if (strcmp (cygheap->locale.charset, __locale_charset ()) == 0)
- return;
-
- debug_printf ("Cygwin charset changed from %s to %s",
- cygheap->locale.charset, __locale_charset ());
- /* Fetch PATH and CWD and convert to wchar_t in previous charset. */
- path = getenv ("PATH");
- if (path && *path) /* $PATH can be potentially unset. */
- {
- w_path = tp.w_get ();
- sys_mbstowcs (w_path, 32768, path);
- }
- w_cwd = tp.w_get ();
- cwdstuff::cwd_lock.acquire ();
- sys_mbstowcs (w_cwd, 32768, cygheap->cwd.get_posix ());
- /* Set charset for internal conversion functions. */
- if (*__locale_charset () == 'A'/*SCII*/)
- {
- cygheap->locale.mbtowc = __utf8_mbtowc;
- cygheap->locale.wctomb = __utf8_wctomb;
- }
- else
- {
- cygheap->locale.mbtowc = __mbtowc;
- cygheap->locale.wctomb = __wctomb;
- }
- strcpy (cygheap->locale.charset, __locale_charset ());
- /* Restore CWD and PATH in new charset. */
- cygheap->cwd.reset_posix (w_cwd);
- cwdstuff::cwd_lock.release ();
- if (w_path)
- {
- char *c_path = tp.c_get ();
- sys_wcstombs (c_path, 32768, w_path);
- setenv ("PATH", c_path, 1);
- }
-}
-
-/* Called from dll_crt0_1, before fetching the command line from Windows.
- Set the internal charset according to the environment locale settings.
- Check if a required codepage is available, and only switch internal
- charset if so.
- Make sure to reset the application locale to "C" per POSIX. */
-void
-initial_setlocale ()
-{
- char *ret = _setlocale_r (_REENT, LC_CTYPE, "");
- if (ret && check_codepage (ret))
- internal_setlocale ();
-}
-
-/* Like newlib's setlocale, but additionally check if the charset needs
- OS support and the required codepage is actually installed. If codepage
- is not available, revert to previous locale and return NULL. For details
- about codepage availability, see the comment in check_codepage() above. */
-extern "C" char *
-setlocale (int category, const char *locale)
-{
- char old[(LC_MESSAGES + 1) * (ENCODING_LEN + 1/*"/"*/ + 1)];
- if (locale && !wincap.has_always_all_codepages ())
- stpcpy (old, _setlocale_r (_REENT, category, NULL));
- char *ret = _setlocale_r (_REENT, category, locale);
- if (ret && locale && !(ret = check_codepage (ret)))
- _setlocale_r (_REENT, category, old);
- return ret;
-}
diff --git a/winsup/cygwin/ntdll.h b/winsup/cygwin/ntdll.h
deleted file mode 100644
index 7d8ccbec3..000000000
--- a/winsup/cygwin/ntdll.h
+++ /dev/null
@@ -1,1610 +0,0 @@
-/* ntdll.h. Contains ntdll specific stuff not defined elsewhere.
-
- Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
- 2011, 2012, 2013, 2014 Red Hat, Inc.
-
- This file is part of Cygwin.
-
- This software is a copyrighted work licensed under the terms of the
- Cygwin license. Please consult the file "CYGWIN_LICENSE" for
- details. */
-
-#pragma once
-
-#include <ntstatus.h>
-
-/* custom status code: */
-#define STATUS_ILLEGAL_DLL_PSEUDO_RELOCATION ((NTSTATUS) 0xe0000269)
-
-/* As of March 2013, Mingw doesn't define these status codes yet. */
-#ifndef STATUS_NETWORK_OPEN_RESTRICTION
-#define STATUS_NETWORK_OPEN_RESTRICTION ((NTSTATUS)0xC0000201)
-#endif
-#ifndef STATUS_SYMLINK_CLASS_DISABLED
-#define STATUS_SYMLINK_CLASS_DISABLED ((NTSTATUS)0xC0000715)
-#endif
-
-#define NtCurrentProcess() ((HANDLE) (LONG_PTR) -1)
-#define NtCurrentThread() ((HANDLE) (LONG_PTR) -2)
-
-/* Creation information returned in IO_STATUS_BLOCK. */
-#define FILE_SUPERSEDED 0
-#define FILE_OPENED 1
-#define FILE_CREATED 2
-#define FILE_OVERWRITTEN 3
-#define FILE_EXISTS 4
-#define FILE_DOES_NOT_EXIST 5
-
-/* Relative file position values in NtWriteFile call. */
-#define FILE_WRITE_TO_END_OF_FILE (-1LL)
-#define FILE_USE_FILE_POINTER_POSITION (-2LL)
-
-/* Device Characteristics. */
-#define FILE_REMOVABLE_MEDIA 0x00000001
-#define FILE_READ_ONLY_DEVICE 0x00000002
-#define FILE_FLOPPY_DISKETTE 0x00000004
-#define FILE_WRITE_ONCE_MEDIA 0x00000008
-#define FILE_REMOTE_DEVICE 0x00000010
-#define FILE_DEVICE_IS_MOUNTED 0x00000020
-#define FILE_VIRTUAL_VOLUME 0x00000040
-#define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080
-#define FILE_DEVICE_SECURE_OPEN 0x00000100
-
-/* Allocation type values in NtMapViewOfSection call. */
-#define AT_EXTENDABLE_FILE 0x00002000
-#define AT_ROUND_TO_PAGE 0x40000000
-
-/* Lock type in NtLockVirtualMemory/NtUnlockVirtualMemory call. */
-#define MAP_PROCESS 1
-#define MAP_SYSTEM 2
-
-/* Directory access rights (only in NT namespace). */
-#define DIRECTORY_QUERY 1
-#define DIRECTORY_TRAVERSE 2
-#define DIRECTORY_CREATE_OBJECT 4
-#define DIRECTORY_CREATE_SUBDIRECTORY 8
-#define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|0x0f)
-
-/* Symbolic link access rights (only in NT namespace). */
-#define SYMBOLIC_LINK_QUERY 1
-
-/* Transaction access rights. */
-#ifndef TRANSACTION_ALL_ACCESS
-#define TRANSACTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x3F)
-#endif
-
-/* Event object access rights. */
-#define EVENT_QUERY_STATE 1
-
-/* Semaphore access rights. */
-#define SEMAPHORE_QUERY_STATE 1
-
-/* Specific ACCESS_MASKSs for objects created in Cygwin. */
-#define CYG_SHARED_DIR_ACCESS (DIRECTORY_QUERY \
- | DIRECTORY_TRAVERSE \
- | DIRECTORY_CREATE_SUBDIRECTORY \
- | DIRECTORY_CREATE_OBJECT \
- | READ_CONTROL)
-#define CYG_MUTANT_ACCESS (MUTANT_QUERY_STATE \
- | SYNCHRONIZE \
- | READ_CONTROL)
-#define CYG_EVENT_ACCESS (EVENT_QUERY_STATE \
- | EVENT_MODIFY_STATE \
- | SYNCHRONIZE \
- | READ_CONTROL)
-#define CYG_SEMAPHORE_ACCESS (SEMAPHORE_QUERY_STATE \
- | SEMAPHORE_MODIFY_STATE \
- | SYNCHRONIZE \
- | READ_CONTROL)
-
-/* Definitions for first parameter of RtlQueryRegistryValues. */
-#define RTL_REGISTRY_ABSOLUTE 0
-#define RTL_REGISTRY_SERVICES 1
-#define RTL_REGISTRY_CONTROL 2
-#define RTL_REGISTRY_WINDOWS_NT 3
-#define RTL_REGISTRY_DEVICEMAP 4
-#define RTL_REGISTRY_USER 5
-#define RTL_REGISTRY_HANDLE 0x40000000
-#define RTL_REGISTRY_OPTIONAL 0x80000000
-
-/* Flags values for QueryTable parameter of RtlQueryRegistryValues. */
-#define RTL_QUERY_REGISTRY_SUBKEY 0x01
-#define RTL_QUERY_REGISTRY_TOPKEY 0x02
-#define RTL_QUERY_REGISTRY_REQUIRED 0x04
-#define RTL_QUERY_REGISTRY_NOVALUE 0x08
-#define RTL_QUERY_REGISTRY_NOEXPAND 0x10
-#define RTL_QUERY_REGISTRY_DIRECT 0x20
-#define RTL_QUERY_REGISTRY_DELETE 0x40
-#define RTL_QUERY_REGISTRY_NOSTRING 0x80
-
-/* What RtlQueryProcessDebugInformation shall return. */
-#define PDI_MODULES 0x01
-#define PDI_HEAPS 0x04
-#define PDI_HEAP_BLOCKS 0x10
-#define PDI_WOW64_MODULES 0x40
-
-/* VM working set list protection values. Returned by NtQueryVirtualMemory. */
-#define WSLE_PAGE_READONLY 0x001
-#define WSLE_PAGE_EXECUTE 0x002
-#define WSLE_PAGE_EXECUTE_READ 0x003
-#define WSLE_PAGE_READWRITE 0x004
-#define WSLE_PAGE_WRITECOPY 0x005
-#define WSLE_PAGE_EXECUTE_READWRITE 0x006
-#define WSLE_PAGE_EXECUTE_WRITECOPY 0x007
-#define WSLE_PAGE_SHARE_COUNT_MASK 0x0E0
-#define WSLE_PAGE_SHAREABLE 0x100
-
-/* Known debug heap flags */
-#define HEAP_FLAG_NOSERIALIZE 0x1
-#define HEAP_FLAG_GROWABLE 0x2
-#define HEAP_FLAG_EXCEPTIONS 0x4
-#define HEAP_FLAG_NONDEFAULT 0x1000
-#define HEAP_FLAG_SHAREABLE 0x8000
-#define HEAP_FLAG_EXECUTABLE 0x40000
-#define HEAP_FLAG_DEBUGGED 0x40000000
-
-#define FILE_VC_QUOTA_NONE 0x00000000
-#define FILE_VC_QUOTA_TRACK 0x00000001
-#define FILE_VC_QUOTA_ENFORCE 0x00000002
-#define FILE_VC_QUOTA_MASK 0x00000003
-#define FILE_VC_CONTENT_INDEX_DISABLED 0x00000008
-#define FILE_VC_LOG_QUOTA_THRESHOLD 0x00000010
-#define FILE_VC_LOG_QUOTA_LIMIT 0x00000020
-#define FILE_VC_LOG_VOLUME_THRESHOLD 0x00000040
-#define FILE_VC_LOG_VOLUME_LIMIT 0x00000080
-#define FILE_VC_QUOTAS_INCOMPLETE 0x00000100
-#define FILE_VC_QUOTAS_REBUILDING 0x00000200
-#define FILE_VC_VALID_MASK 0x000003ff
-
-/* IOCTL code to impersonate client of named pipe. */
-#define FSCTL_PIPE_IMPERSONATE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, \
- METHOD_BUFFERED, FILE_ANY_ACCESS)
-
-typedef enum _FILE_INFORMATION_CLASS
-{
- FileDirectoryInformation = 1,
- FileFullDirectoryInformation, // 2
- FileBothDirectoryInformation, // 3
- FileBasicInformation, // 4 wdm
- FileStandardInformation, // 5 wdm
- FileInternalInformation, // 6
- FileEaInformation, // 7
- FileAccessInformation, // 8
- FileNameInformation, // 9
- FileRenameInformation, // 10
- FileLinkInformation, // 11
- FileNamesInformation, // 12
- FileDispositionInformation, // 13
- FilePositionInformation, // 14 wdm
- FileFullEaInformation, // 15
- FileModeInformation, // 16
- FileAlignmentInformation, // 17
- FileAllInformation, // 18
- FileAllocationInformation, // 19
- FileEndOfFileInformation, // 20 wdm
- FileAlternateNameInformation, // 21
- FileStreamInformation, // 22
- FilePipeInformation, // 23
- FilePipeLocalInformation, // 24
- FilePipeRemoteInformation, // 25
- FileMailslotQueryInformation, // 26
- FileMailslotSetInformation, // 27
- FileCompressionInformation, // 28
- FileObjectIdInformation, // 29
- FileCompletionInformation, // 30
- FileMoveClusterInformation, // 31
- FileQuotaInformation, // 32
- FileReparsePointInformation, // 33
- FileNetworkOpenInformation, // 34
- FileAttributeTagInformation, // 35
- FileTrackingInformation, // 36
- FileIdBothDirectoryInformation, // 37
- FileIdFullDirectoryInformation, // 38
- FileValidDataLengthInformation, // 39
- FileShortNameInformation, // 40
- FileMaximumInformation
-} FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
-
-/* Checked on 64 bit. */
-typedef struct _FILE_NAMES_INFORMATION
-{
- ULONG NextEntryOffset;
- ULONG FileIndex;
- ULONG FileNameLength;
- WCHAR FileName[1];
-} FILE_NAMES_INFORMATION, *PFILE_NAMES_INFORMATION;
-
-/* Checked on 64 bit. */
-typedef struct _FILE_DIRECTORY_INFORMATION
-{
- ULONG NextEntryOffset;
- ULONG FileIndex;
- LARGE_INTEGER CreationTime;
- LARGE_INTEGER LastAccessTime;
- LARGE_INTEGER LastWriteTime;
- LARGE_INTEGER ChangeTime;
- LARGE_INTEGER EndOfFile;
- LARGE_INTEGER AllocationSize;
- ULONG FileAttributes;
- ULONG FileNameLength;
- WCHAR FileName[1];
-} FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION;
-
-/* Checked on 64 bit. */
-typedef struct _FILE_BOTH_DIR_INFORMATION
-{
- ULONG NextEntryOffset;
- ULONG FileIndex;
- LARGE_INTEGER CreationTime;
- LARGE_INTEGER LastAccessTime;
- LARGE_INTEGER LastWriteTime;
- LARGE_INTEGER ChangeTime;
- LARGE_INTEGER EndOfFile;
- LARGE_INTEGER AllocationSize;
- ULONG FileAttributes;
- ULONG FileNameLength;
- ULONG EaSize;
- CCHAR ShortNameLength;
- WCHAR ShortName[12];
- WCHAR FileName[1];
-} FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION;
-
-/* Checked on 64 bit. */
-typedef struct _FILE_ID_BOTH_DIR_INFORMATION
-{
- ULONG NextEntryOffset;
- ULONG FileIndex;
- LARGE_INTEGER CreationTime;
- LARGE_INTEGER LastAccessTime;
- LARGE_INTEGER LastWriteTime;
- LARGE_INTEGER ChangeTime;
- LARGE_INTEGER EndOfFile;
- LARGE_INTEGER AllocationSize;
- ULONG FileAttributes;
- ULONG FileNameLength;
- ULONG EaSize;
- CCHAR ShortNameLength;
- WCHAR ShortName[12];
- LARGE_INTEGER FileId;
- WCHAR FileName[1];
-} FILE_ID_BOTH_DIR_INFORMATION, *PFILE_ID_BOTH_DIR_INFORMATION;
-
-typedef enum _SYSTEM_INFORMATION_CLASS
-{
- SystemBasicInformation = 0,
- SystemPerformanceInformation = 2,
- SystemTimeOfDayInformation = 3,
- SystemProcessInformation = 5,
- SystemProcessorPerformanceInformation = 8,
- SystemHandleInformation = 16,
- SystemPagefileInformation = 18,
- /* There are a lot more of these... */
-} SYSTEM_INFORMATION_CLASS;
-
-/* Checked on 64 bit. */
-typedef struct _SYSTEM_BASIC_INFORMATION
-{
- ULONG Unknown;
- ULONG MaximumIncrement;
- ULONG PhysicalPageSize;
- ULONG NumberOfPhysicalPages;
- ULONG LowestPhysicalPage;
- ULONG HighestPhysicalPage;
- ULONG AllocationGranularity;
- ULONG_PTR LowestUserAddress;
- ULONG_PTR HighestUserAddress;
- ULONG_PTR ActiveProcessors;
- UCHAR NumberProcessors;
-} SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION;
-
-/* Checked on 64 bit. */
-typedef struct _SYSTEM_PAGEFILE_INFORMATION
-{
- ULONG NextEntryOffset;
- ULONG CurrentSize;
- ULONG TotalUsed;
- ULONG PeakUsed;
- UNICODE_STRING FileName;
-} SYSTEM_PAGEFILE_INFORMATION, *PSYSTEM_PAGEFILE_INFORMATION;
-
-/* Checked on 64 bit. */
-typedef struct _SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION
-{
- LARGE_INTEGER IdleTime;
- LARGE_INTEGER KernelTime;
- LARGE_INTEGER UserTime;
- LARGE_INTEGER DpcTime;
- LARGE_INTEGER InterruptTime;
- ULONG InterruptCount;
-} SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION, *PSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION;
-
-typedef LONG KPRIORITY;
-
-/* Checked on 64 bit. */
-typedef struct _VM_COUNTERS
-{
- SIZE_T PeakVirtualSize;
- SIZE_T VirtualSize;
- ULONG PageFaultCount;
- SIZE_T PeakWorkingSetSize;
- SIZE_T WorkingSetSize;
- SIZE_T QuotaPeakPagedPoolUsage;
- SIZE_T QuotaPagedPoolUsage;
- SIZE_T QuotaPeakNonPagedPoolUsage;
- SIZE_T QuotaNonPagedPoolUsage;
- SIZE_T PagefileUsage;
- SIZE_T PeakPagefileUsage;
-} VM_COUNTERS, *PVM_COUNTERS;
-
-/* Checked on 64 bit. */
-typedef struct _CLIENT_ID
-{
- HANDLE UniqueProcess;
- HANDLE UniqueThread;
-} CLIENT_ID, *PCLIENT_ID;
-
-typedef enum
-{
- StateInitialized,
- StateReady,
- StateRunning,
- StateStandby,
- StateTerminated,
- StateWait,
- StateTransition,
- StateUnknown,
-} THREAD_STATE;
-
-typedef enum
-{
- Executive,
- FreePage,
- PageIn,
- PoolAllocation,
- DelayExecution,
- Suspended,
- UserRequest,
- WrExecutive,
- WrFreePage,
- WrPageIn,
- WrPoolAllocation,
- WrDelayExecution,
- WrSuspended,
- WrUserRequest,
- WrEventPair,
- WrQueue,
- WrLpcReceive,
- WrLpcReply,
- WrVirtualMemory,
- WrPageOut,
- WrRendezvous,
- Spare2,
- Spare3,
- Spare4,
- Spare5,
- Spare6,
- WrKernel,
- MaximumWaitReason
-} KWAIT_REASON;
-
-/* Checked on 64 bit. */
-typedef struct _SYSTEM_THREADS
-{
- LARGE_INTEGER KernelTime;
- LARGE_INTEGER UserTime;
- LARGE_INTEGER CreateTime;
- ULONG WaitTime;
- PVOID StartAddress;
- CLIENT_ID ClientId;
- KPRIORITY Priority;
- KPRIORITY BasePriority;
- ULONG ContextSwitchCount;
- THREAD_STATE State;
- KWAIT_REASON WaitReason;
- DWORD Reserved;
-} SYSTEM_THREADS, *PSYSTEM_THREADS;
-
-/* Checked on 64 bit. */
-typedef struct _SYSTEM_PROCESS_INFORMATION
-{
- ULONG NextEntryOffset;
- ULONG NumberOfThreads;
- ULONG Reserved1[6];
- LARGE_INTEGER CreateTime;
- LARGE_INTEGER UserTime;
- LARGE_INTEGER KernelTime;
- UNICODE_STRING ImageName;
- KPRIORITY BasePriority;
- HANDLE UniqueProcessId;
- HANDLE InheritedFromUniqueProcessId;
- ULONG HandleCount;
- ULONG SessionId;
- ULONG PageDirectoryBase;
- VM_COUNTERS VirtualMemoryCounters;
- SIZE_T PrivatePageCount;
- IO_COUNTERS IoCounters;
- SYSTEM_THREADS Threads[1];
-} SYSTEM_PROCESS_INFORMATION, *PSYSTEM_PROCESS_INFORMATION;
-
-/* Checked on 64 bit. */
-typedef struct _IO_STATUS_BLOCK
-{
- union {
- NTSTATUS Status;
- PVOID Pointer;
- };
- ULONG_PTR Information;
-} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
-
-/* Checked on 64 bit. */
-typedef struct _SYSTEM_PERFORMANCE_INFORMATION
-{
- LARGE_INTEGER IdleTime;
- LARGE_INTEGER ReadTransferCount;
- LARGE_INTEGER WriteTransferCount;
- LARGE_INTEGER OtherTransferCount;
- ULONG ReadOperationCount;
- ULONG WriteOperationCount;
- ULONG OtherOperationCount;
- ULONG AvailablePages;
- ULONG TotalCommittedPages;
- ULONG TotalCommitLimit;
- ULONG PeakCommitment;
- ULONG PageFaults;
- ULONG WriteCopyFaults;
- ULONG TransitionFaults;
- ULONG Reserved1;
- ULONG DemandZeroFaults;
- ULONG PagesRead;
- ULONG PageReadIos;
- ULONG Reserved2[2];
- ULONG PagefilePagesWritten;
- ULONG PagefilePageWriteIos;
- ULONG MappedFilePagesWritten;
- ULONG MappedFilePageWriteIos;
- ULONG PagedPoolUsage;
- ULONG NonPagedPoolUsage;
- ULONG PagedPoolAllocs;
- ULONG PagedPoolFrees;
- ULONG NonPagedPoolAllocs;
- ULONG NonPagedPoolFrees;
- ULONG TotalFreeSystemPtes;
- ULONG SystemCodePage;
- ULONG TotalSystemDriverPages;
- ULONG TotalSystemCodePages;
- ULONG SmallNonPagedLookasideListAllocateHits;
- ULONG SmallPagedLookasideListAllocateHits;
- ULONG Reserved3;
- ULONG MmSystemCachePage;
- ULONG PagedPoolPage;
- ULONG SystemDriverPage;
- ULONG FastReadNoWait;
- ULONG FastReadWait;
- ULONG FastReadResourceMiss;
- ULONG FastReadNotPossible;
- ULONG FastMdlReadNoWait;
- ULONG FastMdlReadWait;
- ULONG FastMdlReadResourceMiss;
- ULONG FastMdlReadNotPossible;
- ULONG MapDataNoWait;
- ULONG MapDataWait;
- ULONG MapDataNoWaitMiss;
- ULONG MapDataWaitMiss;
- ULONG PinMappedDataCount;
- ULONG PinReadNoWait;
- ULONG PinReadWait;
- ULONG PinReadNoWaitMiss;
- ULONG PinReadWaitMiss;
- ULONG CopyReadNoWait;
- ULONG CopyReadWait;
- ULONG CopyReadNoWaitMiss;
- ULONG CopyReadWaitMiss;
- ULONG MdlReadNoWait;
- ULONG MdlReadWait;
- ULONG MdlReadNoWaitMiss;
- ULONG MdlReadWaitMiss;
- ULONG ReadAheadIos;
- ULONG LazyWriteIos;
- ULONG LazyWritePages;
- ULONG DataFlushes;
- ULONG DataPages;
- ULONG ContextSwitches;
- ULONG FirstLevelTbFills;
- ULONG SecondLevelTbFills;
- ULONG SystemCalls;
-} SYSTEM_PERFORMANCE_INFORMATION, *PSYSTEM_PERFORMANCE_INFORMATION;
-
-/* Checked on 64 bit. */
-typedef struct _SYSTEM_TIMEOFDAY_INFORMATION
-{
- LARGE_INTEGER BootTime;
- LARGE_INTEGER CurrentTime;
- LARGE_INTEGER TimeZoneBias;
- ULONG CurrentTimeZoneId;
- BYTE Reserved1[20]; /* Per MSDN. Always 0. */
-} SYSTEM_TIMEOFDAY_INFORMATION, *PSYSTEM_TIMEOFDAY_INFORMATION;
-
-typedef enum _PROCESSINFOCLASS
-{
- ProcessBasicInformation = 0,
- ProcessQuotaLimits = 1,
- ProcessVmCounters = 3,
- ProcessTimes = 4,
- ProcessSessionInformation = 24,
- ProcessWow64Information = 26,
- ProcessImageFileName = 27
-} PROCESSINFOCLASS;
-
-/* Checked on 64 bit. */
-typedef struct _DEBUG_BUFFER
-{
- HANDLE SectionHandle;
- PVOID SectionBase;
- PVOID RemoteSectionBase;
- ULONG_PTR SectionBaseDelta;
- HANDLE EventPairHandle;
- ULONG_PTR Unknown[2];
- HANDLE RemoteThreadHandle;
- ULONG InfoClassMask;
- ULONG_PTR SizeOfInfo;
- ULONG_PTR AllocatedSize;
- ULONG_PTR SectionSize;
- PVOID ModuleInformation;
- PVOID BackTraceInformation;
- PVOID HeapInformation;
- PVOID LockInformation;
- PVOID Reserved[8];
-} DEBUG_BUFFER, *PDEBUG_BUFFER;
-
-/* Checked on 64 bit. */
-typedef struct _DEBUG_HEAP_INFORMATION
-{
- ULONG_PTR Base;
- ULONG Flags;
- USHORT Granularity;
- USHORT Unknown;
- ULONG_PTR Allocated;
- ULONG_PTR Committed;
- ULONG TagCount;
- ULONG BlockCount;
- ULONG Reserved[7];
- PVOID Tags;
- PVOID Blocks;
-} DEBUG_HEAP_INFORMATION, *PDEBUG_HEAP_INFORMATION;
-
-/* Checked on 64 bit. */
-typedef struct _DEBUG_HEAP_ARRAY
-{
- ULONG Count;
- DEBUG_HEAP_INFORMATION Heaps[1];
-} DEBUG_HEAP_ARRAY, *PDEBUG_HEAP_ARRAY;
-
-/* Checked on 64 bit. */
-typedef struct _DEBUG_HEAP_BLOCK
-{
- ULONG_PTR Size;
- ULONG Flags;
- ULONG_PTR Committed;
- ULONG_PTR Address;
-} DEBUG_HEAP_BLOCK, *PDEBUG_HEAP_BLOCK;
-
-/* Checked on 64 bit. */
-typedef struct _DEBUG_MODULE_INFORMATION
-{
- ULONG_PTR Reserved[2];
- ULONG_PTR Base;
- ULONG Size;
- ULONG Flags;
- USHORT Index;
- USHORT Unknown;
- USHORT LoadCount;
- USHORT ModuleNameOffset;
- CHAR ImageName[256];
-} DEBUG_MODULE_INFORMATION, *PDEBUG_MODULE_INFORMATION;
-
-/* Checked on 64 bit. */
-typedef struct _DEBUG_MODULE_ARRAY
-{
- ULONG Count;
- DEBUG_MODULE_INFORMATION Modules[1];
-} DEBUG_MODULE_ARRAY, *PDEBUG_MODULE_ARRAY;
-
-/* Checked on 64 bit. */
-typedef struct _KERNEL_USER_TIMES
-{
- LARGE_INTEGER CreateTime;
- LARGE_INTEGER ExitTime;
- LARGE_INTEGER KernelTime;
- LARGE_INTEGER UserTime;
-} KERNEL_USER_TIMES, *PKERNEL_USER_TIMES;
-
-/* Checked on 64 bit. */
-typedef struct _LDR_DATA_TABLE_ENTRY
-{
- /* Heads up! The pointers within the LIST_ENTRYs don't point to the
- start of the next LDR_DATA_TABLE_ENTRY, but rather they point to the
- start of their respective LIST_ENTRY *within* LDR_DATA_TABLE_ENTRY. */
- LIST_ENTRY InLoadOrderLinks;
- LIST_ENTRY InMemoryOrderLinks;
- LIST_ENTRY InInitializationOrderLinks;
- PVOID DllBase;
- PVOID EntryPoint;
- ULONG SizeOfImage;
- UNICODE_STRING FullDllName;
- UNICODE_STRING BaseDllName;
- ULONG Flags;
- USHORT LoadCount;
- /* More follows. Left out since it's just not used. The aforementioned
- part of the structure is stable from at least NT4 up to Windows 8,
- including WOW64. */
-} LDR_DATA_TABLE_ENTRY, *PLDR_DATA_TABLE_ENTRY;
-
-/* Checked on 64 bit. */
-typedef struct _PEB_LDR_DATA
-{
- ULONG Length;
- BOOLEAN Initialized;
- PVOID SsHandle;
- /* Heads up! The pointers within the LIST_ENTRYs don't point to the
- start of the next LDR_DATA_TABLE_ENTRY, but rather they point to the
- start of their respective LIST_ENTRY *within* LDR_DATA_TABLE_ENTRY. */
- LIST_ENTRY InLoadOrderModuleList;
- LIST_ENTRY InMemoryOrderModuleList;
- LIST_ENTRY InInitializationOrderModuleList;
- PVOID EntryInProgress;
-} PEB_LDR_DATA, *PPEB_LDR_DATA;
-
-/* Checked on 64 bit. */
-typedef struct _RTL_USER_PROCESS_PARAMETERS
-{
- ULONG AllocationSize;
- ULONG Size;
- ULONG Flags;
- ULONG DebugFlags;
- HANDLE hConsole;
- ULONG ProcessGroup;
- HANDLE hStdInput;
- HANDLE hStdOutput;
- HANDLE hStdError;
- UNICODE_STRING CurrentDirectoryName;
- HANDLE CurrentDirectoryHandle;
- UNICODE_STRING DllPath;
- UNICODE_STRING ImagePathName;
- UNICODE_STRING CommandLine;
- PWSTR Environment;
- ULONG dwX;
- ULONG dwY;
- ULONG dwXSize;
- ULONG dwYSize;
- ULONG dwXCountChars;
- ULONG dwYCountChars;
- ULONG dwFillAttribute;
- ULONG dwFlags;
- ULONG wShowWindow;
- UNICODE_STRING WindowTitle;
- UNICODE_STRING DesktopInfo;
- UNICODE_STRING ShellInfo;
- UNICODE_STRING RuntimeInfo;
-} RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS;
-
-/* Checked on 64 bit. */
-typedef struct _PEB
-{
- BYTE Reserved1[2];
- BYTE BeingDebugged;
- BYTE Reserved2[1];
- PVOID Reserved3[2];
- PPEB_LDR_DATA Ldr;
- PRTL_USER_PROCESS_PARAMETERS ProcessParameters;
- PVOID Reserved4;
- PVOID ProcessHeap;
- PRTL_CRITICAL_SECTION FastPebLock;
- PVOID Reserved5[2];
- ULONG EnvironmentUpdateCount;
- BYTE Reserved6[228];
- PVOID Reserved7[49];
- ULONG SessionId;
- /* A lot more follows... */
-} PEB, *PPEB;
-
-/* Checked on 64 bit. */
-typedef struct _GDI_TEB_BATCH
-{
- ULONG Offset;
- HANDLE HDC;
- ULONG Buffer[0x136];
-} GDI_TEB_BATCH, *PGDI_TEB_BATCH;
-
-/* Checked on 64 bit. */
-typedef struct _TEB
-{
- NT_TIB Tib;
- PVOID EnvironmentPointer;
- CLIENT_ID ClientId;
- PVOID ActiveRpcHandle;
- PVOID ThreadLocalStoragePointer;
- PPEB Peb;
- ULONG LastErrorValue;
- ULONG CountOfOwnedCriticalSections;
- PVOID CsrClientThread;
- PVOID Win32ThreadInfo;
- ULONG User32Reserved[26];
- ULONG UserReserved[5];
- PVOID WOW32Reserved;
- LCID CurrentLocale;
- ULONG FpSoftwareStatusRegister;
- PVOID SystemReserved1[54];
- LONG ExceptionCode;
- PVOID ActivationContextStackPointer;
- UCHAR SpareBytes1[0x30 - 3 * sizeof(PVOID)];
- ULONG TxFsContext;
- GDI_TEB_BATCH GdiTebBatch;
- CLIENT_ID RealClientId;
- PVOID GdiCachedProcessHandle;
- ULONG GdiClientPID;
- ULONG GdiClientTID;
- PVOID GdiThreadLocalInfo;
- SIZE_T Win32ClientInfo[62];
- PVOID glDispatchTable[233];
- SIZE_T glReserved1[29];
- PVOID glReserved2;
- PVOID glSectionInfo;
- PVOID glSection;
- PVOID glTable;
- PVOID glCurrentRC;
- PVOID glContext;
- ULONG LastStatusValue;
- UNICODE_STRING StaticUnicodeString;
- WCHAR StaticUnicodeBuffer[261];
- PVOID DeallocationStack;
- PVOID TlsSlots[64];
- BYTE Reserved3[8];
- PVOID Reserved4[26];
- PVOID ReservedForOle;
- PVOID Reserved5[4];
- PVOID TlsExpansionSlots;
- /* A lot more follows... */
-} TEB, *PTEB;
-
-/* Checked on 64 bit. */
-typedef struct _KSYSTEM_TIME
-{
- ULONG LowPart;
- LONG High1Time;
- LONG High2Time;
-} KSYSTEM_TIME, *PKSYSTEM_TIME;
-
-/* Checked on 64 bit. */
-typedef struct _KUSER_SHARED_DATA
-{
- BYTE Reserved1[0x08];
- KSYSTEM_TIME InterruptTime;
- BYTE Reserved2[0x2c8];
- ULONG DismountCount;
- /* A lot more follows... */
-} KUSER_SHARED_DATA, *PKUSER_SHARED_DATA;
-
-/* Checked on 64 bit. */
-typedef struct _PROCESS_BASIC_INFORMATION
-{
- NTSTATUS ExitStatus;
- PPEB PebBaseAddress;
- KAFFINITY AffinityMask;
- KPRIORITY BasePriority; /* !!!Broken on WOW64!!! */
- ULONG_PTR UniqueProcessId;
- ULONG_PTR InheritedFromUniqueProcessId;
-} PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION;
-
-/* Checked on 64 bit. */
-typedef struct _PROCESS_SESSION_INFORMATION
-{
- ULONG SessionId;
-} PROCESS_SESSION_INFORMATION, *PPROCESS_SESSION_INFORMATION;
-
-typedef enum _MEMORY_INFORMATION_CLASS
-{
- MemoryBasicInformation,
- MemoryWorkingSetList,
- MemorySectionName,
- MemoryBasicVlmInformation
-} MEMORY_INFORMATION_CLASS;
-
-/* Checked on 64 bit. */
-typedef struct _MEMORY_WORKING_SET_LIST
-{
- ULONG NumberOfPages;
- ULONG_PTR WorkingSetList[1];
-} MEMORY_WORKING_SET_LIST, *PMEMORY_WORKING_SET_LIST;
-
-/* Checked on 64 bit. */
-typedef struct _MEMORY_SECTION_NAME
-{
- UNICODE_STRING SectionFileName;
-} MEMORY_SECTION_NAME, *PMEMORY_SECTION_NAME;
-
-/* Checked on 64 bit. */
-typedef struct _FILE_BASIC_INFORMATION
-{
- LARGE_INTEGER CreationTime;
- LARGE_INTEGER LastAccessTime;
- LARGE_INTEGER LastWriteTime;
- LARGE_INTEGER ChangeTime;
- ULONG FileAttributes;
-} FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;
-
-/* Checked on 64 bit. */
-typedef struct _FILE_STANDARD_INFORMATION
-{
- LARGE_INTEGER AllocationSize;
- LARGE_INTEGER EndOfFile;
- ULONG NumberOfLinks;
- BOOLEAN DeletePending;
- BOOLEAN Directory;
-} FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION;
-
-/* Checked on 64 bit. */
-typedef struct _FILE_NETWORK_OPEN_INFORMATION
-{
- LARGE_INTEGER CreationTime;
- LARGE_INTEGER LastAccessTime;
- LARGE_INTEGER LastWriteTime;
- LARGE_INTEGER ChangeTime;
- LARGE_INTEGER AllocationSize;
- LARGE_INTEGER EndOfFile;
- ULONG FileAttributes;
-} FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;
-
-/* Checked on 64 bit. */
-typedef struct _FILE_INTERNAL_INFORMATION
-{
- LARGE_INTEGER FileId;
-} FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION;
-
-/* Checked on 64 bit. */
-typedef struct _FILE_EA_INFORMATION
-{
- ULONG EaSize;
-} FILE_EA_INFORMATION, *PFILE_EA_INFORMATION;
-
-/* Checked on 64 bit. */
-typedef struct _FILE_ACCESS_INFORMATION
-{
- ACCESS_MASK AccessFlags;
-} FILE_ACCESS_INFORMATION, *PFILE_ACCESS_INFORMATION;
-
-/* Checked on 64 bit. */
-typedef struct _FILE_DISPOSITION_INFORMATION
-{
- BOOLEAN DeleteFile;
-} FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION;
-
-/* Checked on 64 bit. */
-typedef struct _FILE_POSITION_INFORMATION
-{
- LARGE_INTEGER CurrentByteOffset;
-} FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;
-
-/* Checked on 64 bit. */
-typedef struct _FILE_END_OF_FILE_INFORMATION
-{
- LARGE_INTEGER EndOfFile;
-} FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION;
-
-/* Checked on 64 bit. */
-typedef struct _FILE_MODE_INFORMATION
-{
- ULONG Mode;
-} FILE_MODE_INFORMATION, *PFILE_MODE_INFORMATION;
-
-/* Checked on 64 bit. */
-typedef struct _FILE_ALIGNMENT_INFORMATION
-{
- ULONG AlignmentRequirement;
-} FILE_ALIGNMENT_INFORMATION;
-
-/* Checked on 64 bit. */
-typedef struct _FILE_NAME_INFORMATION
-{
- ULONG FileNameLength;
- WCHAR FileName[1];
-} FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;
-
-/* Checked on 64 bit. */
-typedef struct _FILE_LINK_INFORMATION
-{
- BOOLEAN ReplaceIfExists;
- HANDLE RootDirectory;
- ULONG FileNameLength;
- WCHAR FileName[1];
-} FILE_LINK_INFORMATION, *PFILE_LINK_INFORMATION;
-
-/* Checked on 64 bit. */
-typedef struct _FILE_RENAME_INFORMATION
-{
- BOOLEAN ReplaceIfExists;
- HANDLE RootDirectory;
- ULONG FileNameLength;
- WCHAR FileName[1];
-} FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;
-
-/* Checked on 64 bit. */
-typedef struct _FILE_ALL_INFORMATION {
- FILE_BASIC_INFORMATION BasicInformation;
- FILE_STANDARD_INFORMATION StandardInformation;
- FILE_INTERNAL_INFORMATION InternalInformation;
- FILE_EA_INFORMATION EaInformation;
- FILE_ACCESS_INFORMATION AccessInformation;
- FILE_POSITION_INFORMATION PositionInformation;
- FILE_MODE_INFORMATION ModeInformation;
- FILE_ALIGNMENT_INFORMATION AlignmentInformation;
- FILE_NAME_INFORMATION NameInformation;
-} FILE_ALL_INFORMATION, *PFILE_ALL_INFORMATION;
-
-enum
-{
- FILE_PIPE_DISCONNECTED_STATE = 1,
- FILE_PIPE_LISTENING_STATE = 2,
- FILE_PIPE_CONNECTED_STATE = 3,
- FILE_PIPE_CLOSING_STATE = 4
-};
-
-/* Checked on 64 bit. */
-typedef struct _FILE_PIPE_LOCAL_INFORMATION
-{
- ULONG NamedPipeType;
- ULONG NamedPipeConfiguration;
- ULONG MaximumInstances;
- ULONG CurrentInstances;
- ULONG InboundQuota;
- ULONG ReadDataAvailable;
- ULONG OutboundQuota;
- ULONG WriteQuotaAvailable;
- ULONG NamedPipeState;
- ULONG NamedPipeEnd;
-} FILE_PIPE_LOCAL_INFORMATION, *PFILE_PIPE_LOCAL_INFORMATION;
-
-/* Checked on 64 bit. */
-typedef struct _FILE_COMPRESSION_INFORMATION
-{
- LARGE_INTEGER CompressedFileSize;
- USHORT CompressionFormat;
- UCHAR CompressionUnitShift;
- UCHAR ChunkShift;
- UCHAR ClusterShift;
- UCHAR Reserved[3];
-} FILE_COMPRESSION_INFORMATION, *PFILE_COMPRESSION_INFORMATION;
-
-/* Checked on 64 bit. */
-typedef struct _FILE_FS_DEVICE_INFORMATION
-{
- ULONG DeviceType;
- ULONG Characteristics;
-} FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION;
-
-/* Checked on 64 bit. */
-typedef struct _FILE_FS_ATTRIBUTE_INFORMATION
-{
- ULONG FileSystemAttributes;
- ULONG MaximumComponentNameLength;
- ULONG FileSystemNameLength;
- WCHAR FileSystemName[1];
-} FILE_FS_ATTRIBUTE_INFORMATION, *PFILE_FS_ATTRIBUTE_INFORMATION;
-
-/* Checked on 64 bit. */
-#pragma pack(push,4)
-typedef struct _FILE_FS_VOLUME_INFORMATION
-{
- LARGE_INTEGER VolumeCreationTime;
- ULONG VolumeSerialNumber;
- ULONG VolumeLabelLength;
- BOOLEAN SupportsObjects;
- BOOLEAN __dummy;
- WCHAR VolumeLabel[1];
-} FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION;
-#pragma pack(pop)
-
-/* Checked on 64 bit. */
-typedef struct _FILE_FS_SIZE_INFORMATION
-{
- LARGE_INTEGER TotalAllocationUnits;
- LARGE_INTEGER AvailableAllocationUnits;
- ULONG SectorsPerAllocationUnit;
- ULONG BytesPerSector;
-} FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION;
-
-/* Checked on 64 bit. */
-typedef struct _FILE_FS_CONTROL_INFORMATION {
- LARGE_INTEGER FreeSpaceStartFiltering;
- LARGE_INTEGER FreeSpaceThreshold;
- LARGE_INTEGER FreeSpaceStopFiltering;
- LARGE_INTEGER DefaultQuotaThreshold;
- LARGE_INTEGER DefaultQuotaLimit;
- ULONG FileSystemControlFlags;
-} FILE_FS_CONTROL_INFORMATION, *PFILE_FS_CONTROL_INFORMATION;
-
-/* Checked on 64 bit. */
-typedef struct _FILE_FS_FULL_SIZE_INFORMATION
-{
- LARGE_INTEGER TotalAllocationUnits;
- LARGE_INTEGER CallerAvailableAllocationUnits;
- LARGE_INTEGER ActualAvailableAllocationUnits;
- ULONG SectorsPerAllocationUnit;
- ULONG BytesPerSector;
-} FILE_FS_FULL_SIZE_INFORMATION, *PFILE_FS_FULL_SIZE_INFORMATION;
-
-/* Checked on 64 bit. */
-typedef struct _FILE_FS_OBJECTID_INFORMATION
-{
- UCHAR ObjectId[16];
- UCHAR ExtendedInfo[48];
-} FILE_FS_OBJECTID_INFORMATION, *PFILE_FS_OBJECTID_INFORMATION;
-
-typedef enum _FSINFOCLASS {
- FileFsVolumeInformation = 1,
- FileFsLabelInformation,
- FileFsSizeInformation,
- FileFsDeviceInformation,
- FileFsAttributeInformation,
- FileFsControlInformation,
- FileFsFullSizeInformation,
- FileFsObjectIdInformation,
- FileFsDriverPathInformation,
- FileFsMaximumInformation
-} FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;
-
-typedef enum _OBJECT_INFORMATION_CLASS
-{
- ObjectBasicInformation = 0,
- ObjectNameInformation = 1,
- ObjectHandleInformation = 4
- // and many more
-} OBJECT_INFORMATION_CLASS;
-
-/* Checked on 64 bit. */
-typedef struct _OBJECT_BASIC_INFORMATION
-{
- ULONG Attributes;
- ACCESS_MASK GrantedAccess;
- ULONG HandleCount;
- ULONG PointerCount;
- ULONG PagedPoolUsage;
- ULONG NonPagedPoolUsage;
- ULONG Reserved[3];
- ULONG NameInformationLength;
- ULONG TypeInformationLength;
- ULONG SecurityDescriptorLength;
- LARGE_INTEGER CreateTime;
-} OBJECT_BASIC_INFORMATION, *POBJECT_BASIC_INFORMATION;
-
-/* Checked on 64 bit. */
-typedef struct _OBJECT_NAME_INFORMATION
-{
- UNICODE_STRING Name;
-} OBJECT_NAME_INFORMATION;
-
-/* Checked on 64 bit. */
-typedef struct _DIRECTORY_BASIC_INFORMATION
-{
- UNICODE_STRING ObjectName;
- UNICODE_STRING ObjectTypeName;
-} DIRECTORY_BASIC_INFORMATION, *PDIRECTORY_BASIC_INFORMATION;
-
-/* Checked on 64 bit. */
-typedef struct _FILE_GET_QUOTA_INFORMATION {
- ULONG NextEntryOffset;
- ULONG SidLength;
- SID Sid;
-} FILE_GET_QUOTA_INFORMATION, *PFILE_GET_QUOTA_INFORMATION;
-
-/* Checked on 64 bit. */
-typedef struct _FILE_QUOTA_INFORMATION {
- ULONG NextEntryOffset;
- ULONG SidLength;
- LARGE_INTEGER ChangeTime;
- LARGE_INTEGER QuotaUsed;
- LARGE_INTEGER QuotaThreshold;
- LARGE_INTEGER QuotaLimit;
- SID Sid;
-} FILE_QUOTA_INFORMATION, *PFILE_QUOTA_INFORMATION;
-
-/* Checked on 64 bit. */
-typedef struct _FILE_GET_EA_INFORMATION
-{
- ULONG NextEntryOffset;
- UCHAR EaNameLength;
- CHAR EaName[1];
-} FILE_GET_EA_INFORMATION, *PFILE_GET_EA_INFORMATION;
-
-/* Checked on 64 bit. */
-typedef struct _FILE_FULL_EA_INFORMATION
-{
- ULONG NextEntryOffset;
- UCHAR Flags;
- UCHAR EaNameLength;
- USHORT EaValueLength;
- CHAR EaName[1];
-} FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION;
-
-/* Checked on 64 bit. */
-typedef struct _FILE_MAILSLOT_SET_INFORMATION
-{
- LARGE_INTEGER ReadTimeout;
-} FILE_MAILSLOT_SET_INFORMATION, *PFILE_MAILSLOT_SET_INFORMATION;
-
-typedef VOID NTAPI (*PIO_APC_ROUTINE)(PVOID, PIO_STATUS_BLOCK, ULONG);
-
-/* Checked on 64 bit. */
-typedef struct _EVENT_BASIC_INFORMATION
-{
- EVENT_TYPE EventType;
- LONG SignalState;
-} EVENT_BASIC_INFORMATION, *PEVENT_BASIC_INFORMATION;
-
-typedef enum _EVENT_INFORMATION_CLASS
-{
- EventBasicInformation = 0
-} EVENT_INFORMATION_CLASS, *PEVENT_INFORMATION_CLASS;
-
-/* Checked on 64 bit. */
-typedef struct _SEMAPHORE_BASIC_INFORMATION
-{
- LONG CurrentCount;
- LONG MaximumCount;
-} SEMAPHORE_BASIC_INFORMATION, *PSEMAPHORE_BASIC_INFORMATION;
-
-typedef enum _SEMAPHORE_INFORMATION_CLASS
-{
- SemaphoreBasicInformation = 0
-} SEMAPHORE_INFORMATION_CLASS, *PSEMAPHORE_INFORMATION_CLASS;
-
-typedef enum _THREADINFOCLASS
-{
- ThreadBasicInformation = 0,
- ThreadTimes = 1,
- ThreadImpersonationToken = 5
-} THREADINFOCLASS, *PTHREADINFOCLASS;
-
-/* Checked on 64 bit. */
-typedef struct _THREAD_BASIC_INFORMATION
-{
- NTSTATUS ExitStatus;
- PNT_TIB TebBaseAddress;
- CLIENT_ID ClientId;
- KAFFINITY AffinityMask;
- KPRIORITY Priority;
- KPRIORITY BasePriority;
-} THREAD_BASIC_INFORMATION, *PTHREAD_BASIC_INFORMATION;
-
-typedef enum _TIMER_INFORMATION_CLASS {
- TimerBasicInformation = 0
-} TIMER_INFORMATION_CLASS, *PTIMER_INFORMATION_CLASS;
-
-typedef struct _TIMER_BASIC_INFORMATION {
- LARGE_INTEGER TimeRemaining;
- BOOLEAN SignalState;
-} TIMER_BASIC_INFORMATION, *PTIMER_BASIC_INFORMATION;
-
-typedef NTSTATUS (*PRTL_QUERY_REGISTRY_ROUTINE)
- (PWSTR, ULONG, PVOID, ULONG, PVOID, PVOID);
-
-typedef struct _RTL_QUERY_REGISTRY_TABLE
-{
- PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine;
- ULONG Flags;
- PCWSTR Name;
- PVOID EntryContext;
- ULONG DefaultType;
- PVOID DefaultData;
- ULONG DefaultLength;
-} RTL_QUERY_REGISTRY_TABLE, *PRTL_QUERY_REGISTRY_TABLE;
-
-typedef enum _KEY_VALUE_INFORMATION_CLASS
-{
- KeyValueBasicInformation = 0,
- KeyValueFullInformation,
- KeyValuePartialInformation
-} KEY_VALUE_INFORMATION_CLASS, *PKEY_VALUE_INFORMATION_CLASS;
-
-typedef struct _KEY_VALUE_PARTIAL_INFORMATION
-{
- ULONG TitleIndex;
- ULONG Type;
- ULONG DataLength;
- UCHAR Data[1];
-} KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION;
-
-typedef enum _SECTION_INHERIT
-{
- ViewShare = 1,
- ViewUnmap = 2
-} SECTION_INHERIT;
-
-typedef VOID (APIENTRY *PTIMER_APC_ROUTINE)(PVOID, ULONG, ULONG);
-
-#ifdef __x86_64__
-typedef struct _SCOPE_TABLE
-{
- ULONG Count;
- struct
- {
- ULONG BeginAddress;
- ULONG EndAddress;
- ULONG HandlerAddress;
- ULONG JumpTarget;
- } ScopeRecord[1];
-} SCOPE_TABLE, *PSCOPE_TABLE;
-#endif
-
-#ifdef __cplusplus
-/* This is the mapping of the KUSER_SHARED_DATA structure into the user
- address space on BOTH architectures, 32 and 64 bit!
- We need it here to access the current DismountCount and InterruptTime. */
-static volatile KUSER_SHARED_DATA &SharedUserData
- = *(volatile KUSER_SHARED_DATA *) 0x7ffe0000;
-
-/* Function declarations for ntdll.dll. These don't appear in any
- standard Win32 header. */
-
-extern "C"
-{
-#endif
- NTSTATUS NTAPI NtAccessCheck (PSECURITY_DESCRIPTOR, HANDLE, ACCESS_MASK,
- PGENERIC_MAPPING, PPRIVILEGE_SET, PULONG,
- PACCESS_MASK, PNTSTATUS);
- NTSTATUS NTAPI NtAdjustPrivilegesToken (HANDLE, BOOLEAN, PTOKEN_PRIVILEGES,
- ULONG, PTOKEN_PRIVILEGES, PULONG);
- NTSTATUS NTAPI NtAllocateLocallyUniqueId (PLUID);
- NTSTATUS NTAPI NtAllocateUuids (PLARGE_INTEGER, PULONG, PULONG, PUCHAR);
- NTSTATUS NTAPI NtCancelTimer (HANDLE, PBOOLEAN);
- NTSTATUS NTAPI NtClose (HANDLE);
- NTSTATUS NTAPI NtCommitTransaction (HANDLE, BOOLEAN);
- NTSTATUS NTAPI NtCreateDirectoryObject (PHANDLE, ACCESS_MASK,
- POBJECT_ATTRIBUTES);
- NTSTATUS NTAPI NtCreateKey (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, ULONG,
- PUNICODE_STRING, ULONG, PULONG);
- NTSTATUS NTAPI NtCreateEvent (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
- EVENT_TYPE, BOOLEAN);
- NTSTATUS NTAPI NtCreateFile (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
- PIO_STATUS_BLOCK, PLARGE_INTEGER, ULONG, ULONG,
- ULONG, ULONG, PVOID, ULONG);
- NTSTATUS NTAPI NtCreateMailslotFile(PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
- PIO_STATUS_BLOCK, ULONG, ULONG, ULONG,
- PLARGE_INTEGER);
- NTSTATUS NTAPI NtCreateMutant (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
- BOOLEAN);
- NTSTATUS NTAPI NtCreateSection (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
- PLARGE_INTEGER, ULONG, ULONG, HANDLE);
- NTSTATUS NTAPI NtCreateSemaphore (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
- LONG, LONG);
- NTSTATUS NTAPI NtCreateTimer (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
- TIMER_TYPE);
- NTSTATUS NTAPI NtCreateToken (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
- TOKEN_TYPE, PLUID, PLARGE_INTEGER, PTOKEN_USER,
- PTOKEN_GROUPS, PTOKEN_PRIVILEGES, PTOKEN_OWNER,
- PTOKEN_PRIMARY_GROUP, PTOKEN_DEFAULT_DACL,
- PTOKEN_SOURCE);
- NTSTATUS NTAPI NtCreateTransaction (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
- LPGUID, HANDLE, ULONG, ULONG, ULONG,
- PLARGE_INTEGER, PUNICODE_STRING);
- NTSTATUS NTAPI NtDuplicateToken (HANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
- BOOLEAN, TOKEN_TYPE, PHANDLE);
- NTSTATUS NTAPI NtFsControlFile (HANDLE, HANDLE, PIO_APC_ROUTINE, PVOID,
- PIO_STATUS_BLOCK, ULONG, PVOID, ULONG,
- PVOID, ULONG);
- NTSTATUS NTAPI NtFlushBuffersFile (HANDLE, PIO_STATUS_BLOCK);
- NTSTATUS NTAPI NtLoadKey (POBJECT_ATTRIBUTES, POBJECT_ATTRIBUTES);
- NTSTATUS NTAPI NtLockFile (HANDLE, HANDLE, PIO_APC_ROUTINE, PVOID,
- PIO_STATUS_BLOCK, PLARGE_INTEGER, PLARGE_INTEGER,
- ULONG, BOOLEAN, BOOLEAN);
- NTSTATUS NTAPI NtLockVirtualMemory (HANDLE, PVOID *, PSIZE_T, ULONG);
- NTSTATUS NTAPI NtMapViewOfSection (HANDLE, HANDLE, PVOID *, ULONG_PTR, SIZE_T,
- PLARGE_INTEGER, PSIZE_T, SECTION_INHERIT,
- ULONG, ULONG);
- NTSTATUS NTAPI NtNotifyChangeDirectoryFile (HANDLE, HANDLE, PIO_APC_ROUTINE,
- PVOID, PIO_STATUS_BLOCK,
- PFILE_NOTIFY_INFORMATION, ULONG,
- ULONG, BOOLEAN);
- NTSTATUS NTAPI NtOpenDirectoryObject (PHANDLE, ACCESS_MASK,
- POBJECT_ATTRIBUTES);
- NTSTATUS NTAPI NtOpenEvent (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES);
- NTSTATUS NTAPI NtOpenFile (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
- PIO_STATUS_BLOCK, ULONG, ULONG);
- NTSTATUS NTAPI NtOpenKey (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES);
- NTSTATUS NTAPI NtOpenMutant (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES);
- NTSTATUS NTAPI NtOpenProcessToken (HANDLE, ACCESS_MASK, PHANDLE);
- NTSTATUS NTAPI NtOpenThreadToken (HANDLE, ACCESS_MASK, BOOLEAN, PHANDLE);
- NTSTATUS NTAPI NtOpenSection (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES);
- NTSTATUS NTAPI NtOpenSemaphore (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES);
- NTSTATUS NTAPI NtOpenSymbolicLinkObject (PHANDLE, ACCESS_MASK,
- POBJECT_ATTRIBUTES);
- /* WARNING! Don't rely on the timestamp information returned by
- NtQueryAttributesFile. Only the DOS file attribute info is reliable. */
- NTSTATUS NTAPI NtPrivilegeCheck (HANDLE, PPRIVILEGE_SET, PBOOLEAN);
- NTSTATUS NTAPI NtQueryAttributesFile (POBJECT_ATTRIBUTES,
- PFILE_BASIC_INFORMATION);
- NTSTATUS NTAPI NtQueryDirectoryFile(HANDLE, HANDLE, PVOID, PVOID,
- PIO_STATUS_BLOCK, PVOID, ULONG,
- FILE_INFORMATION_CLASS, BOOLEAN,
- PUNICODE_STRING, BOOLEAN);
- NTSTATUS NTAPI NtQueryDirectoryObject (HANDLE, PVOID, ULONG, BOOLEAN,
- BOOLEAN, PULONG, PULONG);
- NTSTATUS NTAPI NtQueryEaFile (HANDLE, PIO_STATUS_BLOCK, PVOID, ULONG,
- BOOLEAN, PVOID, ULONG, PULONG, BOOLEAN);
- NTSTATUS NTAPI NtQueryEvent (HANDLE, EVENT_INFORMATION_CLASS, PVOID, ULONG,
- PULONG);
- NTSTATUS NTAPI NtQueryFullAttributesFile (POBJECT_ATTRIBUTES,
- PFILE_NETWORK_OPEN_INFORMATION);
- NTSTATUS NTAPI NtQueryInformationFile (HANDLE, PIO_STATUS_BLOCK, PVOID,
- ULONG, FILE_INFORMATION_CLASS);
- NTSTATUS NTAPI NtQueryInformationProcess (HANDLE, PROCESSINFOCLASS,
- PVOID, ULONG, PULONG);
- NTSTATUS NTAPI NtQueryInformationThread (HANDLE, THREADINFOCLASS, PVOID,
- ULONG, PULONG);
- NTSTATUS NTAPI NtQueryInformationToken (HANDLE, TOKEN_INFORMATION_CLASS,
- PVOID, ULONG, PULONG);
- NTSTATUS NTAPI NtQueryObject (HANDLE, OBJECT_INFORMATION_CLASS, PVOID, ULONG,
- PULONG);
- NTSTATUS NTAPI NtQueryQuotaInformationFile (HANDLE, PIO_STATUS_BLOCK, PVOID,
- ULONG, BOOLEAN, PVOID, ULONG,
- PSID, BOOLEAN);
- NTSTATUS NTAPI NtQuerySemaphore (HANDLE, SEMAPHORE_INFORMATION_CLASS,
- PVOID, ULONG, PULONG);
- NTSTATUS NTAPI NtQuerySystemInformation (SYSTEM_INFORMATION_CLASS,
- PVOID, ULONG, PULONG);
- NTSTATUS WINAPI NtQuerySystemTime (PLARGE_INTEGER);
- NTSTATUS NTAPI NtQuerySecurityObject (HANDLE, SECURITY_INFORMATION,
- PSECURITY_DESCRIPTOR, ULONG, PULONG);
- NTSTATUS NTAPI NtQuerySymbolicLinkObject (HANDLE, PUNICODE_STRING, PULONG);
- NTSTATUS NTAPI NtQueryTimer (HANDLE, TIMER_INFORMATION_CLASS, PVOID,
- ULONG, PULONG);
- NTSTATUS NTAPI NtQueryTimerResolution (PULONG, PULONG, PULONG);
- NTSTATUS NTAPI NtQueryValueKey (HANDLE, PUNICODE_STRING,
- KEY_VALUE_INFORMATION_CLASS, PVOID, ULONG,
- PULONG);
- NTSTATUS NTAPI NtQueryVirtualMemory (HANDLE, PVOID, MEMORY_INFORMATION_CLASS,
- PVOID, SIZE_T, PSIZE_T);
- NTSTATUS NTAPI NtQueryVolumeInformationFile (HANDLE, PIO_STATUS_BLOCK, PVOID,
- ULONG, FS_INFORMATION_CLASS);
- NTSTATUS NTAPI NtReadFile (HANDLE, HANDLE, PIO_APC_ROUTINE, PVOID,
- PIO_STATUS_BLOCK, PVOID, ULONG, PLARGE_INTEGER,
- PULONG);
- NTSTATUS NTAPI NtRollbackTransaction (HANDLE, BOOLEAN);
- NTSTATUS NTAPI NtSetEaFile (HANDLE, PIO_STATUS_BLOCK, PVOID, ULONG);
- NTSTATUS NTAPI NtSetEvent (HANDLE, PULONG);
- NTSTATUS NTAPI NtSetInformationFile (HANDLE, PIO_STATUS_BLOCK, PVOID, ULONG,
- FILE_INFORMATION_CLASS);
- NTSTATUS NTAPI NtSetInformationThread (HANDLE, THREADINFOCLASS, PVOID, ULONG);
- NTSTATUS NTAPI NtSetInformationToken (HANDLE, TOKEN_INFORMATION_CLASS, PVOID,
- ULONG);
- NTSTATUS NTAPI NtSetQuotaInformationFile (HANDLE, PIO_STATUS_BLOCK, PVOID,
- ULONG);
- NTSTATUS NTAPI NtSetSecurityObject (HANDLE, SECURITY_INFORMATION,
- PSECURITY_DESCRIPTOR);
- NTSTATUS NTAPI NtSetTimer (HANDLE, PLARGE_INTEGER, PTIMER_APC_ROUTINE, PVOID,
- BOOLEAN, LONG, PBOOLEAN);
- NTSTATUS NTAPI NtSetTimerResolution (ULONG, BOOLEAN, PULONG);
- NTSTATUS NTAPI NtSetValueKey (HANDLE, PUNICODE_STRING, ULONG, ULONG, PVOID,
- ULONG);
- NTSTATUS NTAPI NtSetVolumeInformationFile (HANDLE, PIO_STATUS_BLOCK, PVOID,
- ULONG, FS_INFORMATION_CLASS);
- NTSTATUS NTAPI NtUnlockFile (HANDLE, PIO_STATUS_BLOCK, PLARGE_INTEGER,
- PLARGE_INTEGER, ULONG);
- NTSTATUS NTAPI NtUnlockVirtualMemory (HANDLE, PVOID *, PSIZE_T, ULONG);
- NTSTATUS NTAPI NtUnmapViewOfSection (HANDLE, PVOID);
- NTSTATUS NTAPI NtWriteFile (HANDLE, HANDLE, PIO_APC_ROUTINE, PVOID,
- PIO_STATUS_BLOCK, PVOID, ULONG, PLARGE_INTEGER,
- PULONG);
- NTSTATUS NTAPI RtlAbsoluteToSelfRelativeSD (PSECURITY_DESCRIPTOR,
- PSECURITY_DESCRIPTOR, PULONG);
- VOID NTAPI RtlAcquirePebLock ();
- NTSTATUS NTAPI RtlAddAccessAllowedAce (PACL, ULONG, ACCESS_MASK, PSID);
- NTSTATUS NTAPI RtlAddAccessAllowedAceEx (PACL, ULONG, ULONG, ACCESS_MASK,
- PSID);
- NTSTATUS NTAPI RtlAddAccessDeniedAce (PACL, ULONG, ACCESS_MASK, PSID);
- NTSTATUS NTAPI RtlAddAccessDeniedAceEx (PACL, ULONG, ULONG, ACCESS_MASK,
- PSID);
- NTSTATUS NTAPI RtlAddAce (PACL, ULONG, ULONG, PVOID, ULONG);
- PVOID NTAPI RtlAllocateHeap (PVOID, ULONG, SIZE_T);
- NTSTATUS NTAPI RtlAppendUnicodeToString (PUNICODE_STRING, PCWSTR);
- NTSTATUS NTAPI RtlAppendUnicodeStringToString (PUNICODE_STRING,
- PUNICODE_STRING);
- NTSTATUS NTAPI RtlAnsiStringToUnicodeString (PUNICODE_STRING, PANSI_STRING,
- BOOLEAN);
- NTSTATUS NTAPI RtlCheckRegistryKey (ULONG, PCWSTR);
- LONG NTAPI RtlCompareUnicodeString (PUNICODE_STRING, PUNICODE_STRING,
- BOOLEAN);
- NTSTATUS NTAPI RtlConvertSidToUnicodeString (PUNICODE_STRING, PSID, BOOLEAN);
- NTSTATUS NTAPI RtlConvertToAutoInheritSecurityObject (PSECURITY_DESCRIPTOR,
- PSECURITY_DESCRIPTOR,
- PSECURITY_DESCRIPTOR *,
- GUID *, BOOLEAN,
- PGENERIC_MAPPING);
- NTSTATUS NTAPI RtlCopySid (ULONG, PSID, PSID);
- VOID NTAPI RtlCopyUnicodeString (PUNICODE_STRING, PUNICODE_STRING);
- NTSTATUS NTAPI RtlCreateAcl (PACL, ULONG, ULONG);
- PDEBUG_BUFFER NTAPI RtlCreateQueryDebugBuffer (ULONG, BOOLEAN);
- NTSTATUS NTAPI RtlCreateRegistryKey (ULONG, PCWSTR);
- NTSTATUS NTAPI RtlCreateSecurityDescriptor (PSECURITY_DESCRIPTOR, ULONG);
- BOOLEAN NTAPI RtlCreateUnicodeStringFromAsciiz (PUNICODE_STRING, PCSTR);
- NTSTATUS NTAPI RtlDeleteSecurityObject (PSECURITY_DESCRIPTOR *);
- NTSTATUS NTAPI RtlDestroyQueryDebugBuffer (PDEBUG_BUFFER);
- NTSTATUS NTAPI RtlDowncaseUnicodeString (PUNICODE_STRING, PUNICODE_STRING,
- BOOLEAN);
- NTSTATUS NTAPI RtlEnterCriticalSection (PRTL_CRITICAL_SECTION);
- BOOLEAN NTAPI RtlEqualPrefixSid (PSID, PSID);
- BOOLEAN NTAPI RtlEqualSid (PSID, PSID);
- BOOLEAN NTAPI RtlEqualUnicodeString (PUNICODE_STRING, PUNICODE_STRING,
- BOOLEAN);
- VOID NTAPI RtlFreeAnsiString (PANSI_STRING);
- BOOLEAN NTAPI RtlFreeHeap (HANDLE, ULONG, PVOID);
- VOID NTAPI RtlFreeOemString (POEM_STRING);
- VOID NTAPI RtlFreeUnicodeString (PUNICODE_STRING);
- BOOLEAN NTAPI RtlFirstFreeAce (PACL, PVOID *);
- NTSTATUS NTAPI RtlGetAce (PACL, ULONG, PVOID);
- NTSTATUS NTAPI RtlGetControlSecurityDescriptor (PSECURITY_DESCRIPTOR,
- PSECURITY_DESCRIPTOR_CONTROL,
- PULONG);
- HANDLE NTAPI RtlGetCurrentTransaction ();
- NTSTATUS NTAPI RtlGetDaclSecurityDescriptor (PSECURITY_DESCRIPTOR, PBOOLEAN,
- PACL *, PBOOLEAN);
- NTSTATUS NTAPI RtlGetGroupSecurityDescriptor (PSECURITY_DESCRIPTOR, PSID *,
- PBOOLEAN);
- NTSTATUS NTAPI RtlGetOwnerSecurityDescriptor (PSECURITY_DESCRIPTOR, PSID *,
- PBOOLEAN);
- NTSTATUS NTAPI RtlGetVersion (PRTL_OSVERSIONINFOEXW);
- PSID_IDENTIFIER_AUTHORITY NTAPI RtlIdentifierAuthoritySid (PSID);
- VOID NTAPI RtlInitEmptyUnicodeString (PUNICODE_STRING, PCWSTR, USHORT);
- VOID NTAPI RtlInitAnsiString (PANSI_STRING, PCSTR);
- NTSTATUS NTAPI RtlInitializeSid (PSID, PSID_IDENTIFIER_AUTHORITY, UCHAR);
- VOID NTAPI RtlInitUnicodeString (PUNICODE_STRING, PCWSTR);
- NTSTATUS NTAPI RtlIntegerToUnicodeString (ULONG, ULONG, PUNICODE_STRING);
- ULONG NTAPI RtlIsDosDeviceName_U (PCWSTR);
- NTSTATUS NTAPI RtlLeaveCriticalSection (PRTL_CRITICAL_SECTION);
- ULONG NTAPI RtlLengthSecurityDescriptor (PSECURITY_DESCRIPTOR);
- ULONG NTAPI RtlLengthSid (PSID);
- ULONG NTAPI RtlNtStatusToDosError (NTSTATUS);
- NTSTATUS NTAPI RtlOemStringToUnicodeString (PUNICODE_STRING, POEM_STRING,
- BOOLEAN);
- BOOLEAN NTAPI RtlPrefixUnicodeString (PUNICODE_STRING, PUNICODE_STRING,
- BOOLEAN);
- NTSTATUS NTAPI RtlQueryProcessDebugInformation (ULONG, ULONG, PDEBUG_BUFFER);
- NTSTATUS NTAPI RtlQueryRegistryValues (ULONG, PCWSTR,
- PRTL_QUERY_REGISTRY_TABLE, PVOID,
- PVOID);
- VOID NTAPI RtlReleasePebLock ();
- VOID NTAPI RtlSecondsSince1970ToTime (ULONG, PLARGE_INTEGER);
- NTSTATUS NTAPI RtlSetCurrentDirectory_U (PUNICODE_STRING);
- BOOLEAN NTAPI RtlSetCurrentTransaction (HANDLE);
- NTSTATUS NTAPI RtlSetControlSecurityDescriptor (PSECURITY_DESCRIPTOR,
- SECURITY_DESCRIPTOR_CONTROL,
- SECURITY_DESCRIPTOR_CONTROL);
- NTSTATUS NTAPI RtlSetDaclSecurityDescriptor (PSECURITY_DESCRIPTOR, BOOLEAN,
- PACL, BOOLEAN);
- NTSTATUS NTAPI RtlSetGroupSecurityDescriptor (PSECURITY_DESCRIPTOR, PSID,
- BOOLEAN);
- NTSTATUS NTAPI RtlSetOwnerSecurityDescriptor (PSECURITY_DESCRIPTOR, PSID,
- BOOLEAN);
- PUCHAR NTAPI RtlSubAuthorityCountSid (PSID);
- PULONG NTAPI RtlSubAuthoritySid (PSID, ULONG);
- ULONG NTAPI RtlUnicodeStringToAnsiSize (PUNICODE_STRING);
- NTSTATUS NTAPI RtlUnicodeStringToAnsiString (PANSI_STRING, PUNICODE_STRING,
- BOOLEAN);
- NTSTATUS NTAPI RtlUnicodeStringToOemString (PANSI_STRING, PUNICODE_STRING,
- BOOLEAN);
- WCHAR NTAPI RtlUpcaseUnicodeChar (WCHAR);
- NTSTATUS NTAPI RtlUpcaseUnicodeString (PUNICODE_STRING, PUNICODE_STRING,
- BOOLEAN);
- NTSTATUS NTAPI RtlWriteRegistryValue (ULONG, PCWSTR, PCWSTR, ULONG, PVOID,
- ULONG);
-
-#ifdef __cplusplus
- /* A few Rtl functions are either actually macros, or they just don't
- exist even though they would be a big help. We implement them here,
- partly as inline functions. */
-
- /* RtlInitEmptyUnicodeString is defined as a macro in wdm.h, but that file
- is missing entirely in w32api. */
- inline
- VOID NTAPI RtlInitEmptyUnicodeString(PUNICODE_STRING dest, PCWSTR buf,
- USHORT len)
- {
- dest->Length = 0;
- dest->MaximumLength = len;
- dest->Buffer = (PWSTR) buf;
- }
- /* Like RtlInitEmptyUnicodeString, but initialize Length to len, too.
- This is for instance useful when creating a UNICODE_STRING from an
- NtQueryInformationFile info buffer, where the length of the filename
- is known, but you can't rely on the string being 0-terminated.
- If you know it's 0-terminated, just use RtlInitUnicodeString(). */
- inline
- VOID NTAPI RtlInitCountedUnicodeString (PUNICODE_STRING dest, PCWSTR buf,
- USHORT len)
- {
- dest->Length = dest->MaximumLength = len;
- dest->Buffer = (PWSTR) buf;
- }
- /* Split path into dirname and basename part. This function does not
- copy anything! It just initializes the dirname and basename
- UNICODE_STRINGs so that their Buffer members point to the right spot
- into path's Buffer, and the Length (and MaximumLength) members are set
- to match the dirname part and the basename part.
- Note that dirname's Length is set so that it also includes the trailing
- backslash. If you don't need it, just subtract sizeof(WCHAR) from
- dirname.Length. */
- inline
- VOID NTAPI RtlSplitUnicodePath (PUNICODE_STRING path, PUNICODE_STRING dirname,
- PUNICODE_STRING basename)
- {
- USHORT len = path->Length / sizeof (WCHAR);
- while (len > 0 && path->Buffer[--len] != L'\\')
- ;
- ++len;
- if (dirname)
- RtlInitCountedUnicodeString (dirname, path->Buffer, len * sizeof (WCHAR));
- if (basename)
- RtlInitCountedUnicodeString (basename, &path->Buffer[len],
- path->Length - len * sizeof (WCHAR));
- }
- /* Check if prefix is a prefix of path. */
- inline
- BOOLEAN NTAPI RtlEqualUnicodePathPrefix (PUNICODE_STRING path,
- PUNICODE_STRING prefix,
- BOOLEAN caseinsensitive)
- {
- UNICODE_STRING p;
-
- RtlInitCountedUnicodeString (&p, path->Buffer,
- prefix->Length < path->Length
- ? prefix->Length : path->Length);
- return RtlEqualUnicodeString (&p, prefix, caseinsensitive);
- }
- /* Check if suffix is a suffix of path. */
- inline
- BOOL NTAPI RtlEqualUnicodePathSuffix (PUNICODE_STRING path,
- PUNICODE_STRING suffix,
- BOOLEAN caseinsensitive)
- {
- UNICODE_STRING p;
-
- if (suffix->Length < path->Length)
- RtlInitCountedUnicodeString (&p, (PWCHAR) ((PBYTE) path->Buffer
- + path->Length - suffix->Length),
- suffix->Length);
- else
- RtlInitCountedUnicodeString (&p, path->Buffer, path->Length);
- return RtlEqualUnicodeString (&p, suffix, caseinsensitive);
- }
- /* Implemented in strfuncs.cc. Create a Hex UNICODE_STRING from a given
- 64 bit integer value. If append is TRUE, append the hex string,
- otherwise overwrite dest. Returns either STATUS_SUCCESS, or
- STATUS_BUFFER_OVERFLOW, if the unicode buffer is too small (hasn't
- room for 16 WCHARs). */
- NTSTATUS NTAPI RtlInt64ToHexUnicodeString (ULONGLONG value,
- PUNICODE_STRING dest,
- BOOLEAN append);
- /* Set file attributes. Don't change file times. */
- inline
- NTSTATUS NTAPI NtSetAttributesFile (HANDLE h, ULONG attr)
- {
- IO_STATUS_BLOCK io;
- FILE_BASIC_INFORMATION fbi;
- fbi.CreationTime.QuadPart = fbi.LastAccessTime.QuadPart =
- fbi.LastWriteTime.QuadPart = fbi.ChangeTime.QuadPart = 0LL;
- fbi.FileAttributes = attr ?: FILE_ATTRIBUTE_NORMAL;
- return NtSetInformationFile(h, &io, &fbi, sizeof fbi, FileBasicInformation);
- }
-
- /* This test for a signalled event is twice as fast as calling
- WaitForSingleObject (event, 0). */
- inline
- BOOL NTAPI IsEventSignalled (HANDLE event)
- {
- EVENT_BASIC_INFORMATION ebi;
- return NT_SUCCESS (NtQueryEvent (event, EventBasicInformation,
- &ebi, sizeof ebi, NULL))
- && ebi.SignalState != 0;
-
- }
-}
-#endif
diff --git a/winsup/cygwin/ntea.cc b/winsup/cygwin/ntea.cc
deleted file mode 100644
index 9e18fa77d..000000000
--- a/winsup/cygwin/ntea.cc
+++ /dev/null
@@ -1,559 +0,0 @@
-/* ntea.cc: code for manipulating Extended Attributes
-
- Copyright 1997, 1998, 2000, 2001, 2002, 2003, 2005, 2006, 2007, 2008, 2009,
- 2010, 2011, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include "cygtls.h"
-#include "security.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "ntdll.h"
-#include "tls_pbuf.h"
-#include <stdlib.h>
-#include <attr/xattr.h>
-
-#define MAX_EA_NAME_LEN 256
-#define MAX_EA_VALUE_LEN 65536
-
-/* At least one maximum sized entry fits.
- CV 2014-04-04: NtQueryEaFile function chokes on buffers bigger than 64K
- with STATUS_INVALID_PARAMETER if the handle points to a file
- on a remote share, at least on Windows 7 and later.
- In theory the buffer should have a size of
-
- sizeof (FILE_FULL_EA_INFORMATION) + MAX_EA_NAME_LEN
- + MAX_EA_VALUE_LEN
-
- (65804 bytes), but we're opting for simplicity here, and
- a 64K buffer has the advantage that we can use a tmp_pathbuf
- buffer, rather than having to alloca 64K from stack. */
-#define EA_BUFSIZ MAX_EA_VALUE_LEN
-
-#define NEXT_FEA(p) ((PFILE_FULL_EA_INFORMATION) (p->NextEntryOffset \
- ? (char *) p + p->NextEntryOffset : NULL))
-
-ssize_t __reg3
-read_ea (HANDLE hdl, path_conv &pc, const char *name, char *value, size_t size)
-{
- OBJECT_ATTRIBUTES attr;
- NTSTATUS status;
- IO_STATUS_BLOCK io;
- ssize_t ret = -1;
- HANDLE h = hdl;
- ULONG glen = 0;
- PFILE_GET_EA_INFORMATION gea = NULL;
- PFILE_FULL_EA_INFORMATION fea;
- tmp_pathbuf tp;
- /* We have to store the latest EaName to compare with the next one, since
- NtQueryEaFile has a bug when accessing files on a remote share. It
- returns the last EA entry of the file infinitely. Even utilizing the
- optional EaIndex only helps marginally. If you use that, the last
- EA in the file is returned twice. */
- char lastname[MAX_EA_NAME_LEN];
-
- __try
- {
- pc.get_object_attr (attr, sec_none_nih);
-
- debug_printf ("read_ea (%S, %s, %p, %lu)",
- attr.ObjectName, name, value, size);
-
- /* Early open if handle is NULL. This allows to return error codes like
- ENOENT before we actually check for the correctness of the EA name and
- stuff like that. */
- if (!hdl)
- {
- status = NtOpenFile (&h, READ_CONTROL | FILE_READ_EA, &attr, &io,
- FILE_SHARE_VALID_FLAGS,
- FILE_OPEN_FOR_BACKUP_INTENT);
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- __leave;
- }
- }
-
- fea = (PFILE_FULL_EA_INFORMATION) tp.w_get ();
-
- if (name)
- {
- size_t nlen;
-
- /* For compatibility with Linux, we only allow user xattrs and
- return ENOTSUP otherwise. */
- if (ascii_strncasematch (name, "user.", 5))
- name += 5;
- else
- {
- set_errno (ENOTSUP);
- __leave;
- }
-
- if ((nlen = strlen (name)) >= MAX_EA_NAME_LEN)
- {
- set_errno (EINVAL);
- __leave;
- }
- glen = sizeof (FILE_GET_EA_INFORMATION) + nlen;
- gea = (PFILE_GET_EA_INFORMATION) alloca (glen);
-
- gea->NextEntryOffset = 0;
- gea->EaNameLength = nlen;
- strcpy (gea->EaName, name);
- }
-
- while (true)
- {
- if (h)
- {
- status = NtQueryEaFile (h, &io, fea, EA_BUFSIZ, TRUE, gea, glen,
- NULL, TRUE);
- if (status != STATUS_ACCESS_DENIED || !hdl)
- break;
- pc.init_reopen_attr (attr, h);
- }
- status = NtOpenFile (&h, READ_CONTROL | FILE_READ_EA, &attr, &io,
- FILE_SHARE_VALID_FLAGS,
- FILE_OPEN_FOR_BACKUP_INTENT);
- if (!NT_SUCCESS (status))
- break;
- hdl = NULL;
- }
- if (!NT_SUCCESS (status))
- {
- switch (status)
- {
- case STATUS_NO_EAS_ON_FILE:
- ret = 0;
- break;
- case STATUS_INVALID_DEVICE_REQUEST:
- set_errno (ENOTSUP);
- break;
- case STATUS_NOT_FOUND:
- /* STATUS_NOT_FOUND is returned when calling NtQueryEaFile on NFS.
- In theory this should mean that the file just has no EAs, but
- in fact NFS doesn't support EAs, other than the EAs which are
- used for NFS requests. We're playing safe and convert
- STATUS_NOT_FOUND to ENOATTR, unless we're on NFS, where we
- convert it to ENOTSUP. */
- set_errno (pc.fs_is_nfs () ? ENOTSUP : ENOATTR);
- break;
- case STATUS_NONEXISTENT_EA_ENTRY:
- /* Actually STATUS_NONEXISTENT_EA_ENTRY is either never generated,
- or it was only generated in some old and long forgotton NT
- version. See below. For safty reasons, we handle it here,
- nevertheless. */
- set_errno (ENOATTR);
- break;
- default:
- __seterrno_from_nt_status (status);
- break;
- }
- __leave;
- }
- if (name)
- {
- /* Another weird behaviour of NtQueryEaFile. If you ask for a
- specific EA which is not present in the file's EA list, you don't
- get a useful error code like STATUS_NONEXISTENT_EA_ENTRY. Rather
- NtQueryEaFile returns success with the entry's EaValueLength
- set to 0. */
- if (!fea->EaValueLength)
- {
- set_errno (ENOATTR);
- __leave;
- }
- if (size > 0)
- {
- if (size < fea->EaValueLength)
- {
- set_errno (ERANGE);
- __leave;
- }
- memcpy (value, fea->EaName + fea->EaNameLength + 1,
- fea->EaValueLength);
- }
- ret = fea->EaValueLength;
- }
- else
- {
- ret = 0;
- do
- {
- fea->EaNameLength += 5; /* "user." */
- if (size > 0)
- {
- if ((size_t) ret + fea->EaNameLength + 1 > size)
- {
- set_errno (ERANGE);
- __leave;
- }
- /* For compatibility with Linux, we always prepend "user." to
- the attribute name, so effectively we only support user
- attributes from a application point of view. */
- char tmpbuf[MAX_EA_NAME_LEN * 2];
- char *tp = stpcpy (tmpbuf, "user.");
- stpcpy (tp, fea->EaName);
- /* NTFS stores all EA names in uppercase unfortunately. To
- keep compatibility with ext/xfs EA namespaces and
- accompanying tools, which expect the namespaces to be
- lower case, we return EA names in lowercase if the file
- is on a native NTFS. */
- if (pc.fs_is_ntfs ())
- strlwr (tp);
- tp = stpcpy (value, tmpbuf) + 1;
- ret += tp - value;
- value = tp;
- }
- else
- ret += fea->EaNameLength + 1;
- strcpy (lastname, fea->EaName);
- status = NtQueryEaFile (h, &io, fea, EA_BUFSIZ, TRUE, NULL, 0,
- NULL, FALSE);
- }
- while (NT_SUCCESS (status) && strcmp (lastname, fea->EaName) != 0);
- }
- }
- __except (EFAULT) {}
- __endtry
- if (!hdl && h)
- NtClose (h);
- debug_printf ("%d = read_ea(%S, %s, %p, %lu)",
- ret, attr.ObjectName, name, value, size);
- return ret;
-}
-
-int __reg3
-write_ea (HANDLE hdl, path_conv &pc, const char *name, const char *value,
- size_t size, int flags)
-{
- OBJECT_ATTRIBUTES attr;
- NTSTATUS status;
- IO_STATUS_BLOCK io;
- int ret = -1;
- HANDLE h = hdl;
- PFILE_FULL_EA_INFORMATION fea;
- ULONG flen;
- size_t nlen;
-
- __try
- {
- pc.get_object_attr (attr, sec_none_nih);
-
- debug_printf ("write_ea (%S, %s, %p, %lu, %d)",
- attr.ObjectName, name, value, size, flags);
-
- /* Early open if handle is NULL. This allows to return error codes like
- ENOENT before we actually check for the correctness of the EA name and
- stuff like that. */
- if (!hdl)
- {
- status = NtOpenFile (&h, READ_CONTROL | FILE_WRITE_EA, &attr, &io,
- FILE_SHARE_VALID_FLAGS,
- FILE_OPEN_FOR_BACKUP_INTENT);
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- __leave;
- }
- }
-
- /* For compatibility with Linux, we only allow user xattrs and
- return ENOTSUP otherwise. */
- if (!ascii_strncasematch (name, "user.", 5))
- {
- set_errno (ENOTSUP);
- __leave;
- }
-
- /* removexattr is supposed to fail with ENOATTR if the requested EA is
- not available. This is equivalent to XATTR_REPLACE for setxattr. */
- if (!value)
- flags = XATTR_REPLACE;
-
- if (flags)
- {
- if (flags != XATTR_CREATE && flags != XATTR_REPLACE)
- {
- set_errno (EINVAL);
- __leave;
- }
- ssize_t rret = read_ea (hdl, pc, name, NULL, 0);
- if (flags == XATTR_CREATE && rret > 0)
- {
- set_errno (EEXIST);
- __leave;
- }
- if (flags == XATTR_REPLACE && rret < 0)
- __leave;
- }
-
- /* Skip "user." prefix. */
- name += 5;
-
- if ((nlen = strlen (name)) >= MAX_EA_NAME_LEN)
- {
- set_errno (EINVAL);
- __leave;
- }
- flen = sizeof (FILE_FULL_EA_INFORMATION) + nlen + 1 + size;
- fea = (PFILE_FULL_EA_INFORMATION) alloca (flen);
- fea->NextEntryOffset = 0;
- fea->Flags = 0;
- fea->EaNameLength = nlen;
- fea->EaValueLength = size;
- strcpy (fea->EaName, name);
- if (value)
- memcpy (fea->EaName + fea->EaNameLength + 1, value, size);
-
- while (true)
- {
- if (h)
- {
- status = NtSetEaFile (h, &io, fea, flen);
- if (status != STATUS_ACCESS_DENIED || !hdl)
- break;
- pc.init_reopen_attr (attr, h);
- }
- status = NtOpenFile (&h, READ_CONTROL | FILE_WRITE_EA, &attr, &io,
- FILE_SHARE_VALID_FLAGS,
- FILE_OPEN_FOR_BACKUP_INTENT);
- if (!NT_SUCCESS (status))
- break;
- hdl = NULL;
- }
- if (!NT_SUCCESS (status))
- {
- switch (status)
- {
- case STATUS_EA_TOO_LARGE:
- /* STATUS_EA_TOO_LARGE has a matching Win32 error code
- ERROR_EA_TABLE_FULL. For some reason RtlNtStatusToDosError
- does not translate STATUS_EA_TOO_LARGE to ERROR_EA_TABLE_FULL,
- but instead to ERROR_EA_LIST_INCONSISTENT. This error code is
- also returned for STATUS_EA_LIST_INCONSISTENT, which means the
- incoming EA list is... inconsistent. For obvious reasons we
- translate ERROR_EA_LIST_INCONSISTENT to EINVAL, so we have to
- handle STATUS_EA_TOO_LARGE explicitely here, to get the correct
- mapping to ENOSPC. */
- set_errno (ENOSPC);
- break;
- case STATUS_INVALID_DEVICE_REQUEST:
- set_errno (ENOTSUP);
- break;
- default:
- __seterrno_from_nt_status (status);
- break;
- }
- }
- else
- ret = 0;
- }
- __except (EFAULT) {}
- __endtry
- if (!hdl && h)
- NtClose (h);
- debug_printf ("%d = write_ea(%S, %s, %p, %lu, %d)",
- ret, attr.ObjectName, name, value, size, flags);
- return ret;
-}
-
-static ssize_t __stdcall
-getxattr_worker (path_conv &pc, const char *name, void *value, size_t size)
-{
- int res = -1;
-
- if (pc.error)
- {
- debug_printf ("got %d error from path_conv", pc.error);
- set_errno (pc.error);
- }
- else if (pc.exists ())
- {
- fhandler_base *fh;
-
- if (!(fh = build_fh_pc (pc)))
- return -1;
-
- res = fh->fgetxattr (name, value, size);
- delete fh;
- }
- else
- set_errno (ENOENT);
- return res;
-}
-
-extern "C" ssize_t
-getxattr (const char *path, const char *name, void *value, size_t size)
-{
- if (!name)
- {
- set_errno (EINVAL);
- return -1;
- }
- path_conv pc (path, PC_SYM_FOLLOW | PC_POSIX, stat_suffixes);
- return getxattr_worker (pc, name, value, size);
-}
-
-extern "C" ssize_t
-lgetxattr (const char *path, const char *name, void *value, size_t size)
-{
- if (!name)
- {
- set_errno (EINVAL);
- return -1;
- }
- path_conv pc (path, PC_SYM_NOFOLLOW | PC_POSIX, stat_suffixes);
- return getxattr_worker (pc, name, value, size);
-}
-
-extern "C" ssize_t
-fgetxattr (int fd, const char *name, void *value, size_t size)
-{
- int res;
-
- if (!name)
- {
- set_errno (EINVAL);
- return -1;
- }
- cygheap_fdget cfd (fd);
- if (cfd < 0)
- res = -1;
- else
- res = cfd->fgetxattr (name, value, size);
- return res;
-}
-
-extern "C" ssize_t
-listxattr (const char *path, char *list, size_t size)
-{
- path_conv pc (path, PC_SYM_FOLLOW | PC_POSIX, stat_suffixes);
- return getxattr_worker (pc, NULL, list, size);
-}
-
-extern "C" ssize_t
-llistxattr (const char *path, char *list, size_t size)
-{
- path_conv pc (path, PC_SYM_NOFOLLOW | PC_POSIX, stat_suffixes);
- return getxattr_worker (pc, NULL, list, size);
-}
-
-extern "C" ssize_t
-flistxattr (int fd, char *list, size_t size)
-{
- int res;
-
- cygheap_fdget cfd (fd);
- if (cfd < 0)
- res = -1;
- else
- res = cfd->fgetxattr (NULL, list, size);
- return res;
-}
-
-static int __stdcall
-setxattr_worker (path_conv &pc, const char *name, const void *value,
- size_t size, int flags)
-{
- int res = -1;
-
- if (pc.error)
- {
- debug_printf ("got %d error from path_conv", pc.error);
- set_errno (pc.error);
- }
- else if (pc.exists ())
- {
- fhandler_base *fh;
-
- if (!(fh = build_fh_pc (pc)))
- return -1;
-
- res = fh->fsetxattr (name, value, size, flags);
- delete fh;
- }
- else
- set_errno (ENOENT);
- return res;
-}
-
-extern "C" int
-setxattr (const char *path, const char *name, const void *value, size_t size,
- int flags)
-{
- if (!size)
- {
- set_errno (EINVAL);
- return -1;
- }
- path_conv pc (path, PC_SYM_NOFOLLOW | PC_POSIX, stat_suffixes);
- return setxattr_worker (pc, name, value, size, flags);
-}
-
-extern "C" int
-lsetxattr (const char *path, const char *name, const void *value, size_t size,
- int flags)
-{
- if (!size)
- {
- set_errno (EINVAL);
- return -1;
- }
- path_conv pc (path, PC_SYM_NOFOLLOW | PC_POSIX, stat_suffixes);
- return setxattr_worker (pc, name, value, size, flags);
-}
-
-extern "C" int
-fsetxattr (int fd, const char *name, const void *value, size_t size, int flags)
-{
- int res;
-
- if (!size)
- {
- set_errno (EINVAL);
- return -1;
- }
- cygheap_fdget cfd (fd);
- if (cfd < 0)
- res = -1;
- else
- res = cfd->fsetxattr (name, value, size, flags);
- return res;
-}
-
-extern "C" int
-removexattr (const char *path, const char *name)
-{
- path_conv pc (path, PC_SYM_FOLLOW | PC_POSIX, stat_suffixes);
- return setxattr_worker (pc, name, NULL, 0, 0);
-}
-
-extern "C" int
-lremovexattr (const char *path, const char *name)
-{
- path_conv pc (path, PC_SYM_NOFOLLOW | PC_POSIX, stat_suffixes);
- return setxattr_worker (pc, name, NULL, 0, 0);
-}
-
-extern "C" int
-fremovexattr (int fd, const char *name)
-{
- int res;
-
- cygheap_fdget cfd (fd);
- if (cfd < 0)
- res = -1;
- else
- res = cfd->fsetxattr (name, NULL, 0, 0);
- return res;
-}
diff --git a/winsup/cygwin/passwd.cc b/winsup/cygwin/passwd.cc
deleted file mode 100644
index b8ed09466..000000000
--- a/winsup/cygwin/passwd.cc
+++ /dev/null
@@ -1,809 +0,0 @@
-/* passwd.cc: getpwnam () and friends
-
- Copyright 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008,
- 2009, 2010, 2011, 2012, 2013, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include <lm.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include "cygerrno.h"
-#include "security.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "pinfo.h"
-#include "cygheap.h"
-#include "shared_info.h"
-#include "miscfuncs.h"
-#include "ldap.h"
-#include "tls_pbuf.h"
-
-/* Parse /etc/passwd line into passwd structure. */
-bool
-pwdgrp::parse_passwd ()
-{
- pg_pwd &res = passwd ()[curr_lines];
- res.p.pw_name = next_str (':');
- res.p.pw_passwd = next_str (':');
- if (!next_num (res.p.pw_uid))
- return false;
- if (!next_num (res.p.pw_gid))
- return false;
- res.p.pw_comment = NULL;
- res.p.pw_gecos = next_str (':');
- res.p.pw_dir = next_str (':');
- res.p.pw_shell = next_str (':');
- res.sid.getfrompw (&res.p);
- /* lptr points to the \0 after pw_shell. Increment by one to get the correct
- required buffer len in getpw_cp. */
- res.len = lptr - res.p.pw_name + 1;
- return true;
-}
-
-void
-pwdgrp::init_pwd ()
-{
- pwdgrp_buf_elem_size = sizeof (pg_pwd);
- parse = &pwdgrp::parse_passwd;
-}
-
-struct passwd *
-pwdgrp::find_user (cygpsid &sid)
-{
- for (ULONG i = 0; i < curr_lines; i++)
- if (sid == passwd ()[i].sid)
- return &passwd ()[i].p;
- return NULL;
-}
-
-struct passwd *
-pwdgrp::find_user (const char *name)
-{
- for (ULONG i = 0; i < curr_lines; i++)
- /* on Windows NT user names are case-insensitive */
- if (strcasematch (name, passwd ()[i].p.pw_name))
- return &passwd ()[i].p;
- return NULL;
-}
-
-struct passwd *
-pwdgrp::find_user (uid_t uid)
-{
- for (ULONG i = 0; i < curr_lines; i++)
- if (uid == passwd ()[i].p.pw_uid)
- return &passwd ()[i].p;
- return NULL;
-}
-
-struct passwd *
-internal_getpwsid (cygpsid &sid, cyg_ldap *pldap)
-{
- struct passwd *ret;
-
- cygheap->pg.nss_init ();
- /* Check caches first. */
- if (cygheap->pg.nss_cygserver_caching ()
- && (ret = cygheap->pg.pwd_cache.cygserver.find_user (sid)))
- return ret;
- if (cygheap->pg.nss_pwd_files ()
- && (ret = cygheap->pg.pwd_cache.file.find_user (sid)))
- return ret;
- if (cygheap->pg.nss_pwd_db ()
- && (ret = cygheap->pg.pwd_cache.win.find_user (sid)))
- return ret;
- /* Ask sources afterwards. */
- if (cygheap->pg.nss_cygserver_caching ()
- && (ret = cygheap->pg.pwd_cache.cygserver.add_user_from_cygserver (sid)))
- return ret;
- if (cygheap->pg.nss_pwd_files ())
- {
- cygheap->pg.pwd_cache.file.check_file ();
- if ((ret = cygheap->pg.pwd_cache.file.add_user_from_file (sid)))
- return ret;
- }
- if (cygheap->pg.nss_pwd_db ())
- return cygheap->pg.pwd_cache.win.add_user_from_windows (sid, pldap);
- return NULL;
-}
-
-/* This function gets only called from mkpasswd via cygwin_internal. */
-struct passwd *
-internal_getpwsid_from_db (cygpsid &sid)
-{
- cygheap->pg.nss_init ();
- return cygheap->pg.pwd_cache.win.add_user_from_windows (sid);
-}
-
-struct passwd *
-internal_getpwnam (const char *name, cyg_ldap *pldap)
-{
- struct passwd *ret;
-
- cygheap->pg.nss_init ();
- /* Check caches first. */
- if (cygheap->pg.nss_cygserver_caching ()
- && (ret = cygheap->pg.pwd_cache.cygserver.find_user (name)))
- return ret;
- if (cygheap->pg.nss_pwd_files ()
- && (ret = cygheap->pg.pwd_cache.file.find_user (name)))
- return ret;
- if (cygheap->pg.nss_pwd_db ()
- && (ret = cygheap->pg.pwd_cache.win.find_user (name)))
- return ret;
- /* Ask sources afterwards. */
- if (cygheap->pg.nss_cygserver_caching ()
- && (ret = cygheap->pg.pwd_cache.cygserver.add_user_from_cygserver (name)))
- return ret;
- if (cygheap->pg.nss_pwd_files ())
- {
- cygheap->pg.pwd_cache.file.check_file ();
- if ((ret = cygheap->pg.pwd_cache.file.add_user_from_file (name)))
- return ret;
- }
- if (cygheap->pg.nss_pwd_db ())
- return cygheap->pg.pwd_cache.win.add_user_from_windows (name, pldap);
- return NULL;
-}
-
-struct passwd *
-internal_getpwuid (uid_t uid, cyg_ldap *pldap)
-{
- struct passwd *ret;
-
- cygheap->pg.nss_init ();
- /* Check caches first. */
- if (cygheap->pg.nss_cygserver_caching ()
- && (ret = cygheap->pg.pwd_cache.cygserver.find_user (uid)))
- return ret;
- if (cygheap->pg.nss_pwd_files ()
- && (ret = cygheap->pg.pwd_cache.file.find_user (uid)))
- return ret;
- if (cygheap->pg.nss_pwd_db ()
- && (ret = cygheap->pg.pwd_cache.win.find_user (uid)))
- return ret;
- /* Ask sources afterwards. */
- if (cygheap->pg.nss_cygserver_caching ()
- && (ret = cygheap->pg.pwd_cache.cygserver.add_user_from_cygserver (uid)))
- return ret;
- if (cygheap->pg.nss_pwd_files ())
- {
- cygheap->pg.pwd_cache.file.check_file ();
- if ((ret = cygheap->pg.pwd_cache.file.add_user_from_file (uid)))
- return ret;
- }
- if (cygheap->pg.nss_pwd_db () || uid == ILLEGAL_UID)
- return cygheap->pg.pwd_cache.win.add_user_from_windows (uid, pldap);
- return NULL;
-}
-
-/* getpwuid/getpwnam are not reentrant. */
-static struct {
- struct passwd p;
- char *buf;
- size_t bufsiz;
-} app_pw;
-
-static struct passwd *
-getpw_cp (struct passwd *temppw)
-{
- if (!temppw)
- return NULL;
- pg_pwd *pw = (pg_pwd *) temppw;
- if (app_pw.bufsiz < pw->len)
- {
- char *newbuf = (char *) realloc (app_pw.buf, pw->len);
- if (!newbuf)
- {
- set_errno (ENOMEM);
- return NULL;
- }
- app_pw.buf = newbuf;
- app_pw.bufsiz = pw->len;
- }
- memcpy (app_pw.buf, pw->p.pw_name, pw->len);
- memcpy (&app_pw.p, &pw->p, sizeof pw->p);
- ptrdiff_t diff = app_pw.buf - pw->p.pw_name;
- app_pw.p.pw_name += diff;
- app_pw.p.pw_passwd += diff;
- app_pw.p.pw_gecos += diff;
- app_pw.p.pw_dir += diff;
- app_pw.p.pw_shell += diff;
- return &app_pw.p;
-}
-
-extern "C" struct passwd *
-getpwuid32 (uid_t uid)
-{
- struct passwd *temppw = internal_getpwuid (uid);
- pthread_testcancel ();
- return getpw_cp (temppw);
-}
-
-#ifdef __x86_64__
-EXPORT_ALIAS (getpwuid32, getpwuid)
-#else
-extern "C" struct passwd *
-getpwuid (__uid16_t uid)
-{
- return getpwuid32 (uid16touid32 (uid));
-}
-#endif
-
-extern "C" int
-getpwuid_r32 (uid_t uid, struct passwd *pwd, char *buffer, size_t bufsize, struct passwd **result)
-{
- *result = NULL;
-
- if (!pwd || !buffer)
- return ERANGE;
-
- struct passwd *temppw = internal_getpwuid (uid);
- pthread_testcancel ();
- if (!temppw)
- return 0;
-
- /* check needed buffer size. */
- size_t needsize = strlen (temppw->pw_name) + strlen (temppw->pw_passwd)
- + strlen (temppw->pw_gecos) + strlen (temppw->pw_dir)
- + strlen (temppw->pw_shell) + 5;
- if (needsize > bufsize)
- return ERANGE;
-
- /* make a copy of temppw */
- *result = pwd;
- pwd->pw_uid = temppw->pw_uid;
- pwd->pw_gid = temppw->pw_gid;
- buffer = stpcpy (pwd->pw_name = buffer, temppw->pw_name);
- buffer = stpcpy (pwd->pw_passwd = buffer + 1, temppw->pw_passwd);
- buffer = stpcpy (pwd->pw_gecos = buffer + 1, temppw->pw_gecos);
- buffer = stpcpy (pwd->pw_dir = buffer + 1, temppw->pw_dir);
- stpcpy (pwd->pw_shell = buffer + 1, temppw->pw_shell);
- pwd->pw_comment = NULL;
- return 0;
-}
-
-#ifdef __x86_64__
-EXPORT_ALIAS (getpwuid_r32, getpwuid_r)
-#else
-extern "C" int
-getpwuid_r (__uid16_t uid, struct passwd *pwd, char *buffer, size_t bufsize, struct passwd **result)
-{
- return getpwuid_r32 (uid16touid32 (uid), pwd, buffer, bufsize, result);
-}
-#endif
-
-extern "C" struct passwd *
-getpwnam (const char *name)
-{
- struct passwd *temppw = internal_getpwnam (name);
- pthread_testcancel ();
- return getpw_cp (temppw);
-}
-
-
-/* the max size buffer we can expect to
- * use is returned via sysconf with _SC_GETPW_R_SIZE_MAX.
- * This may need updating! - Rob Collins April 2001.
- */
-extern "C" int
-getpwnam_r (const char *nam, struct passwd *pwd, char *buffer, size_t bufsize, struct passwd **result)
-{
- *result = NULL;
-
- if (!pwd || !buffer || !nam)
- return ERANGE;
-
- struct passwd *temppw = internal_getpwnam (nam);
- pthread_testcancel ();
-
- if (!temppw)
- return 0;
-
- /* check needed buffer size. */
- size_t needsize = strlen (temppw->pw_name) + strlen (temppw->pw_passwd)
- + strlen (temppw->pw_gecos) + strlen (temppw->pw_dir)
- + strlen (temppw->pw_shell) + 5;
- if (needsize > bufsize)
- return ERANGE;
-
- /* make a copy of temppw */
- *result = pwd;
- pwd->pw_uid = temppw->pw_uid;
- pwd->pw_gid = temppw->pw_gid;
- buffer = stpcpy (pwd->pw_name = buffer, temppw->pw_name);
- buffer = stpcpy (pwd->pw_passwd = buffer + 1, temppw->pw_passwd);
- buffer = stpcpy (pwd->pw_gecos = buffer + 1, temppw->pw_gecos);
- buffer = stpcpy (pwd->pw_dir = buffer + 1, temppw->pw_dir);
- stpcpy (pwd->pw_shell = buffer + 1, temppw->pw_shell);
- pwd->pw_comment = NULL;
- return 0;
-}
-
-/* getpwent functions are not reentrant. */
-static pw_ent pwent;
-
-void
-pg_ent::clear_cache ()
-{
- if (pg.curr_lines)
- {
- if (state > from_file)
- cfree (group ? grp.g.gr_name : pwd.p.pw_name);
- pg.curr_lines = 0;
- }
-}
-
-void
-pg_ent::setent (bool _group, int _enums, PCWSTR _enum_tdoms)
-{
- cygheap->dom.init ();
- endent (_group);
- if (!_enums && !_enum_tdoms)
- {
- /* This is the default, when called from the usual setpwent/setgrent
- functions. */
- enums = cygheap->pg.nss_db_enums ();
- enum_tdoms = cygheap->pg.nss_db_enum_tdoms ();
- if (_group)
- {
- from_files = cygheap->pg.nss_grp_files ();
- from_db = cygheap->pg.nss_grp_db ();
- }
- else
- {
- from_files = cygheap->pg.nss_pwd_files ();
- from_db = cygheap->pg.nss_pwd_db ();
- }
- }
- else
- {
- /* This case is when called from mkpasswd/mkgroup via cygwin_internal. */
- enums = _enums;
- enum_tdoms = _enum_tdoms;
- from_files = false;
- from_db = true;
- }
- state = from_cache;
-}
-
-void *
-pg_ent::getent (void)
-{
- void *entry;
-
- switch (state)
- {
- case rewound:
- state = from_cache;
- /*FALLTHRU*/
- case from_cache:
- if (nss_db_enum_caches ()
- && (entry = enumerate_caches ()))
- return entry;
- state = from_file;
- /*FALLTHRU*/
- case from_file:
- if (from_files
- && nss_db_enum_files ()
- && (entry = enumerate_file ()))
- return entry;
- state = from_builtin;
- /*FALLTHRU*/
- case from_builtin:
- if (from_db
- && nss_db_enum_builtin ()
- && (entry = enumerate_builtin ()))
- return entry;
- state = from_local;
- /*FALLTHRU*/
- case from_local:
- if (from_db
- && nss_db_enum_local ()
- && (!cygheap->dom.member_machine ()
- || !nss_db_enum_primary ())
- && (entry = enumerate_local ()))
- return entry;
- state = from_sam;
- /*FALLTHRU*/
- case from_sam:
- if (from_db
- && nss_db_enum_local ()
- /* Domain controller? If so, sam and ad are one and the same
- and "local ad" would list all domain accounts twice without
- this test. */
- && (cygheap->dom.account_flat_name ()[0] != L'@'
- || !nss_db_enum_primary ())
- && (entry = enumerate_sam ()))
- return entry;
- state = from_ad;
- /*FALLTHRU*/
- case from_ad:
- if (cygheap->dom.member_machine ()
- && from_db
- && (entry = enumerate_ad ()))
- return entry;
- state = finished;
- /*FALLTHRU*/
- case finished:
- break;
- }
- return NULL;
-}
-
-void
-pg_ent::endent (bool _group)
-{
- if (buf)
- {
- if (state == from_file)
- free (buf);
- else if (state == from_local || state == from_sam)
- NetApiBufferFree (buf);
- buf = NULL;
- }
- if (!pg.curr_lines)
- {
- if ((group = _group))
- {
- pg.init_grp ();
- pg.pwdgrp_buf = (void *) &grp;
- }
- else
- {
- pg.init_pwd ();
- pg.pwdgrp_buf = (void *) &pwd;
- }
- pg.max_lines = 1;
- }
- else
- clear_cache ();
- cldap.close ();
- rl.close ();
- cnt = max = resume = 0;
- enums = 0;
- enum_tdoms = NULL;
- state = rewound;
-}
-
-void *
-pg_ent::enumerate_file ()
-{
- void *entry;
-
- if (!cnt)
- {
- pwdgrp &prf = group ? cygheap->pg.grp_cache.file
- : cygheap->pg.pwd_cache.file;
- if (prf.check_file ())
- {
- if (!buf)
- buf = (char *) malloc (NT_MAX_PATH);
- if (buf
- && !rl.init (prf.file_attr (), buf, NT_MAX_PATH))
- {
- free (buf);
- buf = NULL;
- }
- }
- }
- ++cnt;
- if ((entry = pg.add_account_post_fetch (rl.gets (), false)))
- return entry;
- rl.close ();
- free (buf);
- buf = NULL;
- cnt = max = resume = 0;
- return NULL;
-}
-
-void *
-pg_ent::enumerate_builtin ()
-{
- static cygpsid *pwd_builtins[] = {
- &well_known_system_sid,
- &well_known_local_service_sid,
- &well_known_network_service_sid,
- &well_known_admins_sid,
- &trusted_installer_sid,
- NULL
- };
- static cygpsid *grp_builtins[] = {
- &well_known_system_sid,
- &trusted_installer_sid,
- NULL
- };
-
- cygpsid **builtins = group ? grp_builtins : pwd_builtins;
- if (!builtins[cnt])
- {
- cnt = max = resume = 0;
- return NULL;
- }
- cygsid sid (*builtins[cnt++]);
- fetch_user_arg_t arg;
- arg.type = SID_arg;
- arg.sid = &sid;
- char *line = pg.fetch_account_from_windows (arg);
- return pg.add_account_post_fetch (line, false);
-}
-
-void *
-pg_ent::enumerate_sam ()
-{
- while (true)
- {
- if (!cnt)
- {
- DWORD total;
- NET_API_STATUS ret;
-
- if (buf)
- {
- NetApiBufferFree (buf);
- buf = NULL;
- }
- if (resume == ULONG_MAX)
- ret = ERROR_NO_MORE_ITEMS;
- else if (group)
- ret = NetGroupEnum (NULL, 2, (PBYTE *) &buf, MAX_PREFERRED_LENGTH,
- &max, &total, &resume);
- else
- ret = NetUserEnum (NULL, 20, FILTER_NORMAL_ACCOUNT, (PBYTE *) &buf,
- MAX_PREFERRED_LENGTH, &max, &total,
- (PDWORD) &resume);
- if (ret == NERR_Success)
- resume = ULONG_MAX;
- else if (ret != ERROR_MORE_DATA)
- {
- cnt = max = resume = 0;
- return NULL;
- }
- }
- while (cnt < max)
- {
- cygsid sid (cygheap->dom.account_sid ());
- sid_sub_auth (sid, sid_sub_auth_count (sid)) =
- group ? ((PGROUP_INFO_2) buf)[cnt].grpi2_group_id
- : ((PUSER_INFO_20) buf)[cnt].usri20_user_id;
- ++cnt;
- ++sid_sub_auth_count (sid);
- fetch_user_arg_t arg;
- arg.type = SID_arg;
- arg.sid = &sid;
- char *line = pg.fetch_account_from_windows (arg);
- if (line)
- return pg.add_account_post_fetch (line, false);
- }
- cnt = 0;
- }
-}
-
-void *
-pg_ent::enumerate_ad ()
-{
- while (true)
- {
- if (!cnt)
- {
- PDS_DOMAIN_TRUSTSW td;
-
- if (!resume)
- {
- ++resume;
- if (!nss_db_enum_primary ()
- || cldap.enumerate_ad_accounts (NULL, group) != NO_ERROR)
- continue;
- }
- else if ((td = cygheap->dom.trusted_domain (resume - 1)))
- {
- ++resume;
- /* Ignore primary domain in list of trusted domains only if all
- trusted domains are enumerated anyway. This handles an
- annoying backward compatibility problem in mkpasswd/mkgroup.
- Without this test, `mkpasswd -d PRIMARY_DOMAIN' wouldn't
- work as expected. */
- if (((enums & ENUM_TDOMS_ALL) && td->Flags & DS_DOMAIN_PRIMARY)
- || !td->DomainSid
- || (!nss_db_enum_tdom (td->NetbiosDomainName)
- && !nss_db_enum_tdom (td->DnsDomainName))
- || cldap.enumerate_ad_accounts (td->DnsDomainName, group)
- != NO_ERROR)
- continue;
- }
- else
- {
- cldap.close ();
- return NULL;
- }
- }
- ++cnt;
- cygsid sid;
- int ret = cldap.next_account (sid);
- if (ret == NO_ERROR)
- {
- fetch_user_arg_t arg;
- arg.type = SID_arg;
- arg.sid = &sid;
- char *line = pg.fetch_account_from_windows (arg, &cldap);
- if (line)
- return pg.add_account_post_fetch (line, false);
- ret = EIO;
- }
- if (ret != ENMFILE)
- {
- cldap.close ();
- set_errno (ret);
- return NULL;
- }
- cnt = 0;
- }
-}
-
-void *
-pw_ent::enumerate_caches ()
-{
- switch (max)
- {
- case 0:
- if (cygheap->pg.nss_cygserver_caching ())
- {
- pwdgrp &prc = cygheap->pg.pwd_cache.cygserver;
- if (cnt < prc.cached_users ())
- return &prc.passwd ()[cnt++].p;
- }
- cnt = 0;
- max = 1;
- /*FALLTHRU*/
- case 1:
- if (from_files)
- {
- pwdgrp &prf = cygheap->pg.pwd_cache.file;
- prf.check_file ();
- if (cnt < prf.cached_users ())
- return &prf.passwd ()[cnt++].p;
- }
- cnt = 0;
- max = 2;
- /*FALLTHRU*/
- default:
- if (from_db)
- {
- pwdgrp &prw = cygheap->pg.pwd_cache.win;
- if (cnt < prw.cached_users ())
- return &prw.passwd ()[cnt++].p;
- }
- break;
- }
- cnt = max = 0;
- return NULL;
-}
-
-void *
-pw_ent::enumerate_local ()
-{
- return NULL;
-}
-
-struct passwd *
-pw_ent::getpwent (void)
-{
- if (state == rewound)
- setent (false);
- else
- clear_cache ();
- return (struct passwd *) getent ();
-}
-
-extern "C" void
-setpwent ()
-{
- pwent.setpwent ();
-}
-
-extern "C" struct passwd *
-getpwent (void)
-{
- return pwent.getpwent ();
-}
-
-extern "C" void
-endpwent (void)
-{
- pwent.endpwent ();
-}
-
-/* *_filtered functions are called from mkpasswd */
-void *
-setpwent_filtered (int enums, PCWSTR enum_tdoms)
-{
- pw_ent *pw = new pw_ent;
- if (pw)
- pw->setpwent (enums, enum_tdoms);
- return (void *) pw;
-}
-
-void *
-getpwent_filtered (void *pw)
-{
- return (void *) ((pw_ent *) pw)->getpwent ();
-}
-
-void
-endpwent_filtered (void *pw)
-{
- ((pw_ent *) pw)->endpwent ();
-}
-
-#ifndef __x86_64__
-extern "C" struct passwd *
-getpwduid (__uid16_t)
-{
- return NULL;
-}
-#endif
-
-extern "C" int
-setpassent (int)
-{
- return 0;
-}
-
-static void
-_getpass_close_fd (void *arg)
-{
- if (arg)
- fclose ((FILE *) arg);
-}
-
-extern "C" char *
-getpass (const char * prompt)
-{
- char *pass = _my_tls.locals.pass;
- struct termios ti, newti;
- bool tc_set = false;
-
- /* Try to use controlling tty in the first place. Use stdin and stderr
- only as fallback. */
- FILE *in = stdin, *err = stderr;
- FILE *tty = fopen ("/dev/tty", "w+b");
- pthread_cleanup_push (_getpass_close_fd, tty);
- if (tty)
- {
- /* Set close-on-exec for obvious reasons. */
- fcntl (fileno (tty), F_SETFD, fcntl (fileno (tty), F_GETFD) | FD_CLOEXEC);
- in = err = tty;
- }
-
- /* Make sure to notice if stdin is closed. */
- if (fileno (in) >= 0)
- {
- flockfile (in);
- /* Change tty attributes if possible. */
- if (!tcgetattr (fileno (in), &ti))
- {
- newti = ti;
- newti.c_lflag &= ~(ECHO | ISIG); /* No echo, no signal handling. */
- if (!tcsetattr (fileno (in), TCSANOW, &newti))
- tc_set = true;
- }
- fputs (prompt, err);
- fflush (err);
- fgets (pass, _PASSWORD_LEN, in);
- fprintf (err, "\n");
- if (tc_set)
- tcsetattr (fileno (in), TCSANOW, &ti);
- funlockfile (in);
- char *crlf = strpbrk (pass, "\r\n");
- if (crlf)
- *crlf = '\0';
- }
- pthread_cleanup_pop (1);
- return pass;
-}
diff --git a/winsup/cygwin/path.cc b/winsup/cygwin/path.cc
deleted file mode 100644
index dc8b97fc3..000000000
--- a/winsup/cygwin/path.cc
+++ /dev/null
@@ -1,4792 +0,0 @@
-/* path.cc: path support.
-
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
- 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Red Hat, Inc.
-
- This file is part of Cygwin.
-
- This software is a copyrighted work licensed under the terms of the
- Cygwin license. Please consult the file "CYGWIN_LICENSE" for
- details. */
-
- /* This module's job is to
- - convert between POSIX and Win32 style filenames,
- - support the `mount' functionality,
- - support symlinks for files and directories
-
- Pathnames are handled as follows:
-
- - A \ or : in a path denotes a pure windows spec.
- - Paths beginning with // (or \\) are not translated (i.e. looked
- up in the mount table) and are assumed to be UNC path names.
-
- The goal in the above set of rules is to allow both POSIX and Win32
- flavors of pathnames without either interfering. The rules are
- intended to be as close to a superset of both as possible.
-
- Note that you can have more than one path to a file. The mount
- table is always prefered when translating Win32 paths to POSIX
- paths. Win32 paths in mount table entries may be UNC paths or
- standard Win32 paths starting with <drive-letter>:
-
- Text vs Binary issues are not considered here in path style
- decisions, although the appropriate flags are retrieved and
- stored in various structures.
-
- Removing mounted filesystem support would simplify things greatly,
- but having it gives us a mechanism of treating disk that lives on a
- UNIX machine as having UNIX semantics [it allows one to edit a text
- file on that disk and not have cr's magically appear and perhaps
- break apps running on UNIX boxes]. It also useful to be able to
- layout a hierarchy without changing the underlying directories.
-
- The semantics of mounting file systems is not intended to precisely
- follow normal UNIX systems.
-
- Each DOS drive is defined to have a current directory. Supporting
- this would complicate things so for now things are defined so that
- c: means c:\.
- */
-
-#include "winsup.h"
-#include "miscfuncs.h"
-#include <ctype.h>
-#include <winioctl.h>
-#include <shlobj.h>
-#include <sys/param.h>
-#include <sys/cygwin.h>
-#include "cygerrno.h"
-#include "security.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "shared_info.h"
-#include "cygtls.h"
-#include "tls_pbuf.h"
-#include "environ.h"
-#include <assert.h>
-#include <ntdll.h>
-#include <wchar.h>
-#include <wctype.h>
-
-suffix_info stat_suffixes[] =
-{
- suffix_info ("", 1),
- suffix_info (".exe", 1),
- suffix_info (NULL)
-};
-
-struct symlink_info
-{
- char contents[SYMLINK_MAX + 1];
- char *ext_here;
- int extn;
- unsigned pflags;
- DWORD fileattr;
- int issymlink;
- bool ext_tacked_on;
- int error;
- bool isdevice;
- _major_t major;
- _minor_t minor;
- _mode_t mode;
- int check (char *path, const suffix_info *suffixes, fs_info &fs,
- path_conv_handle &conv_hdl);
- int set (char *path);
- bool parse_device (const char *);
- int check_sysfile (HANDLE h);
- int check_shortcut (HANDLE h);
- int check_reparse_point (HANDLE h, bool remote);
- int check_nfs_symlink (HANDLE h);
- int posixify (char *srcbuf);
- bool set_error (int);
-};
-
-muto NO_COPY cwdstuff::cwd_lock;
-
-static const GUID GUID_shortcut
- = { 0x00021401L, 0, 0, {0xc0, 0, 0, 0, 0, 0, 0, 0x46}};
-
-enum
-{
- WSH_FLAG_IDLIST = 0x01, /* Contains an ITEMIDLIST. */
- WSH_FLAG_FILE = 0x02, /* Contains a file locator element. */
- WSH_FLAG_DESC = 0x04, /* Contains a description. */
- WSH_FLAG_RELPATH = 0x08, /* Contains a relative path. */
- WSH_FLAG_WD = 0x10, /* Contains a working dir. */
- WSH_FLAG_CMDLINE = 0x20, /* Contains command line args. */
- WSH_FLAG_ICON = 0x40 /* Contains a custom icon. */
-};
-
-struct win_shortcut_hdr
-{
- DWORD size; /* Header size in bytes. Must contain 0x4c. */
- GUID magic; /* GUID of shortcut files. */
- DWORD flags; /* Content flags. See above. */
-
- /* The next fields from attr to icon_no are always set to 0 in Cygwin
- and U/Win shortcuts. */
- DWORD attr; /* Target file attributes. */
- FILETIME ctime; /* These filetime items are never touched by the */
- FILETIME mtime; /* system, apparently. Values don't matter. */
- FILETIME atime;
- DWORD filesize; /* Target filesize. */
- DWORD icon_no; /* Icon number. */
-
- DWORD run; /* Values defined in winuser.h. Use SW_NORMAL. */
- DWORD hotkey; /* Hotkey value. Set to 0. */
- DWORD dummy[2]; /* Future extension probably. Always 0. */
-};
-
-/* Return non-zero if PATH1 is a prefix of PATH2.
- Both are assumed to be of the same path style and / vs \ usage.
- Neither may be "".
- LEN1 = strlen (PATH1). It's passed because often it's already known.
-
- Examples:
- /foo/ is a prefix of /foo <-- may seem odd, but desired
- /foo is a prefix of /foo/
- / is a prefix of /foo/bar
- / is not a prefix of foo/bar
- foo/ is a prefix foo/bar
- /foo is not a prefix of /foobar
-*/
-
-int
-path_prefix_p (const char *path1, const char *path2, int len1,
- bool caseinsensitive)
-{
- /* Handle case where PATH1 has trailing '/' and when it doesn't. */
- if (len1 > 0 && isdirsep (path1[len1 - 1]))
- len1--;
-
- if (len1 == 0)
- return isdirsep (path2[0]) && !isdirsep (path2[1]);
-
- if (isdirsep (path2[len1]) || path2[len1] == 0 || path1[len1 - 1] == ':')
- return caseinsensitive ? strncasematch (path1, path2, len1)
- : !strncmp (path1, path2, len1);
-
- return 0;
-}
-
-/* Return non-zero if paths match in first len chars.
- Check is dependent of the case sensitivity setting. */
-int
-pathnmatch (const char *path1, const char *path2, int len, bool caseinsensitive)
-{
- return caseinsensitive
- ? strncasematch (path1, path2, len) : !strncmp (path1, path2, len);
-}
-
-/* Return non-zero if paths match. Check is dependent of the case
- sensitivity setting. */
-int
-pathmatch (const char *path1, const char *path2, bool caseinsensitive)
-{
- return caseinsensitive
- ? strcasematch (path1, path2) : !strcmp (path1, path2);
-}
-
-/* TODO: This function is used in mkdir and rmdir to generate correct
- error messages in case of paths ending in /. or /.. components.
- Right now, normalize_posix_path will just normalize
- those components away, which changes the semantics. */
-bool
-has_dot_last_component (const char *dir, bool test_dot_dot)
-{
- /* SUSv3: . and .. are not allowed as last components in various system
- calls. Don't test for backslash path separator since that's a Win32
- path following Win32 rules. */
- const char *last_comp = strchr (dir, '\0');
-
- if (last_comp == dir)
- return false; /* Empty string. Probably shouldn't happen here? */
-
- /* Detect run of trailing slashes */
- while (last_comp > dir && *--last_comp == '/')
- continue;
-
- /* Detect just a run of slashes or a path that does not end with a slash. */
- if (*last_comp != '.')
- return false;
-
- /* We know we have a trailing dot here. Check that it really is a standalone "."
- path component by checking that it is at the beginning of the string or is
- preceded by a "/" */
- if (last_comp == dir || *--last_comp == '/')
- return true;
-
- /* If we're not checking for '..' we're done. Ditto if we're now pointing to
- a non-dot. */
- if (!test_dot_dot || *last_comp != '.')
- return false; /* either not testing for .. or this was not '..' */
-
- /* Repeat previous test for standalone or path component. */
- return last_comp == dir || last_comp[-1] == '/';
-}
-
-/* Normalize a POSIX path.
- All duplicate /'s, except for 2 leading /'s, are deleted.
- The result is 0 for success, or an errno error value. */
-
-int
-normalize_posix_path (const char *src, char *dst, char *&tail)
-{
- const char *in_src = src;
- char *dst_start = dst;
- bool check_parent = false;
- syscall_printf ("src %s", src);
-
- if ((isdrive (src) && isdirsep (src[2])) || *src == '\\')
- goto win32_path;
-
- tail = dst;
- if (!isslash (src[0]))
- {
- if (!cygheap->cwd.get (dst))
- return get_errno ();
- tail = strchr (tail, '\0');
- if (isslash (dst[0]) && isslash (dst[1]))
- ++dst_start;
- if (*src == '.')
- {
- if (tail == dst_start + 1 && *dst_start == '/')
- tail--;
- goto sawdot;
- }
- if (tail > dst && !isslash (tail[-1]))
- *tail++ = '/';
- }
- /* Two leading /'s? If so, preserve them. */
- else if (isslash (src[1]) && !isslash (src[2]))
- {
- *tail++ = *src++;
- ++dst_start;
- }
-
- while (*src)
- {
- if (*src == '\\')
- goto win32_path;
- /* Strip runs of /'s. */
- if (!isslash (*src))
- *tail++ = *src++;
- else
- {
- check_parent = true;
- while (*++src)
- {
- if (isslash (*src))
- continue;
-
- if (*src != '.')
- break;
-
- sawdot:
- if (src[1] != '.')
- {
- if (!src[1])
- {
- *tail++ = '/';
- goto done;
- }
- if (!isslash (src[1]))
- break;
- }
- else if (src[2] && !isslash (src[2]))
- break;
- else
- {
- /* According to POSIX semantics all elements of path must
- exist. To follow it, we must validate our path before
- removing the trailing component. Check_parent is needed
- for performance optimization, in order not to verify paths
- which are already verified. For example this prevents
- double check in case of foo/bar/../.. */
- if (check_parent)
- {
- if (tail > dst_start) /* Don't check for / or // dir. */
- {
- *tail = 0;
- debug_printf ("checking %s before '..'", dst);
- /* In conjunction with native and NFS symlinks,
- this call can result in a recursion which eats
- up our tmp_pathbuf buffers. This in turn results
- in a api_fatal call. To avoid that, we're
- checking our remaining buffers and return an
- error code instead. Note that this only happens
- if the path contains 15 or more relative native/NFS
- symlinks with a ".." in the target path. */
- tmp_pathbuf tp;
- if (!tp.check_usage (4, 3))
- return ELOOP;
- path_conv head (dst, PC_SYM_FOLLOW | PC_POSIX);
- if (!head.isdir())
- return ENOENT;
- /* At this point, dst is a normalized path. If the
- normalized path created by path_conv does not
- match the normalized path we're just testing, then
- the path in dst contains native symlinks. If we
- just plunge along, removing the previous path
- component, we may end up removing a symlink from
- the path and the resulting path will be invalid.
- So we replace dst with what we found in head
- instead. All the work replacing symlinks has been
- done in that path anyway, so why repeat it? */
- tail = stpcpy (dst, head.normalized_path);
- }
- check_parent = false;
- }
- while (tail > dst_start && !isslash (*--tail))
- continue;
- src++;
- }
- }
-
- *tail++ = '/';
- }
- if ((tail - dst) >= NT_MAX_PATH)
- {
- debug_printf ("ENAMETOOLONG = normalize_posix_path (%s)", src);
- return ENAMETOOLONG;
- }
- }
-
-done:
- *tail = '\0';
-
- debug_printf ("%s = normalize_posix_path (%s)", dst, in_src);
- return 0;
-
-win32_path:
- int err = normalize_win32_path (in_src, dst, tail);
- if (!err)
- for (char *p = dst; (p = strchr (p, '\\')); p++)
- *p = '/';
- return err ?: -1;
-}
-
-inline void
-path_conv::add_ext_from_sym (symlink_info &sym)
-{
- if (sym.ext_here && *sym.ext_here)
- {
- known_suffix = path + sym.extn;
- if (sym.ext_tacked_on)
- strcpy ((char *) known_suffix, sym.ext_here);
- }
-}
-
-static void __reg2 mkrelpath (char *dst, bool caseinsensitive);
-
-static void __reg2
-mkrelpath (char *path, bool caseinsensitive)
-{
- tmp_pathbuf tp;
- char *cwd_win32 = tp.c_get ();
- if (!cygheap->cwd.get (cwd_win32, 0))
- return;
-
- unsigned cwdlen = strlen (cwd_win32);
- if (!path_prefix_p (cwd_win32, path, cwdlen, caseinsensitive))
- return;
-
- size_t n = strlen (path);
- if (n < cwdlen)
- return;
-
- char *tail = path;
- if (n == cwdlen)
- tail += cwdlen;
- else
- tail += isdirsep (cwd_win32[cwdlen - 1]) ? cwdlen : cwdlen + 1;
-
- memmove (path, tail, strlen (tail) + 1);
- if (!*path)
- strcpy (path, ".");
-}
-
-void
-path_conv::set_normalized_path (const char *path_copy)
-{
- if (path_copy)
- {
- size_t n = strlen (path_copy) + 1;
- char *p = (char *) crealloc_abort ((void *) normalized_path, n);
- normalized_path = (const char *) memcpy (p, path_copy, n);
- }
-}
-
-static inline void
-str2uni_cat (UNICODE_STRING &tgt, const char *srcstr)
-{
- int len = sys_mbstowcs (tgt.Buffer + tgt.Length / sizeof (WCHAR),
- (tgt.MaximumLength - tgt.Length) / sizeof (WCHAR),
- srcstr);
- if (len)
- tgt.Length += (len - 1) * sizeof (WCHAR);
-}
-
-PUNICODE_STRING
-get_nt_native_path (const char *path, UNICODE_STRING& upath, bool dos)
-{
- upath.Length = 0;
- if (path[0] == '/') /* special path w/o NT path representation. */
- str2uni_cat (upath, path);
- else if (path[0] != '\\') /* X:\... or relative path. */
- {
- if (path[1] == ':') /* X:\... */
- {
- RtlAppendUnicodeStringToString (&upath, &ro_u_natp);
- str2uni_cat (upath, path);
- /* The drive letter must be upper case. */
- upath.Buffer[4] = towupper (upath.Buffer[4]);
- }
- else
- str2uni_cat (upath, path);
- transform_chars (&upath, 7);
- }
- else if (path[1] != '\\') /* \Device\... */
- str2uni_cat (upath, path);
- else if ((path[2] != '.' && path[2] != '?')
- || path[3] != '\\') /* \\server\share\... */
- {
- RtlAppendUnicodeStringToString (&upath, &ro_u_uncp);
- str2uni_cat (upath, path + 2);
- transform_chars (&upath, 8);
- }
- else /* \\.\device or \\?\foo */
- {
- RtlAppendUnicodeStringToString (&upath, &ro_u_natp);
- str2uni_cat (upath, path + 4);
- }
- if (dos)
- {
- /* Unfortunately we can't just use transform_chars with the tfx_rev_chars
- table since only leading and trailing spaces and dots are affected.
- So we step to every backslash and fix surrounding dots and spaces.
- That makes these broken filesystems a bit slower, but, hey. */
- PWCHAR cp = upath.Buffer + 7;
- PWCHAR cend = upath.Buffer + upath.Length / sizeof (WCHAR);
- while (++cp < cend)
- if (*cp == L'\\')
- {
- PWCHAR ccp = cp - 1;
- while (*ccp == L'.' || *ccp == L' ')
- *ccp-- |= 0xf000;
- while (cp[1] == L' ')
- *++cp |= 0xf000;
- }
- while (*--cp == L'.' || *cp == L' ')
- *cp |= 0xf000;
- }
- return &upath;
-}
-
-PUNICODE_STRING
-path_conv::get_nt_native_path ()
-{
- PUNICODE_STRING res;
- if (wide_path)
- res = &uni_path;
- else if (!path)
- res = NULL;
- else
- {
- uni_path.Length = 0;
- uni_path.MaximumLength = (strlen (path) + 10) * sizeof (WCHAR);
- wide_path = (PWCHAR) cmalloc_abort (HEAP_STR, uni_path.MaximumLength);
- uni_path.Buffer = wide_path;
- ::get_nt_native_path (path, uni_path, has_dos_filenames_only ());
- res = &uni_path;
- }
- return res;
-}
-
-PWCHAR
-path_conv::get_wide_win32_path (PWCHAR wc)
-{
- get_nt_native_path ();
- if (!wide_path)
- return NULL;
- wcpcpy (wc, wide_path);
- if (wc[1] == L'?')
- wc[1] = L'\\';
- return wc;
-}
-
-static void
-warn_msdos (const char *src)
-{
- if (user_shared->warned_msdos || !cygwin_finished_initializing)
- return;
- tmp_pathbuf tp;
- char *posix_path = tp.c_get ();
- small_printf ("Cygwin WARNING:\n");
- if (cygwin_conv_path (CCP_WIN_A_TO_POSIX | CCP_RELATIVE, src,
- posix_path, NT_MAX_PATH))
- small_printf (
-" MS-DOS style path detected: %ls\n POSIX equivalent preferred.\n",
- src);
- else
- small_printf (
-" MS-DOS style path detected: %ls\n"
-" Preferred POSIX equivalent is: %ls\n",
- src, posix_path);
- small_printf (
-" CYGWIN environment variable option \"nodosfilewarning\" turns off this\n"
-" warning. Consult the user's guide for more details about POSIX paths:\n"
-" http://cygwin.com/cygwin-ug-net/using.html#using-pathnames\n");
- user_shared->warned_msdos = true;
-}
-
-static DWORD
-getfileattr (const char *path, bool caseinsensitive) /* path has to be always absolute. */
-{
- tmp_pathbuf tp;
- UNICODE_STRING upath;
- OBJECT_ATTRIBUTES attr;
- FILE_BASIC_INFORMATION fbi;
- NTSTATUS status;
- IO_STATUS_BLOCK io;
-
- tp.u_get (&upath);
- InitializeObjectAttributes (&attr, &upath,
- caseinsensitive ? OBJ_CASE_INSENSITIVE : 0,
- NULL, NULL);
- get_nt_native_path (path, upath, false);
-
- status = NtQueryAttributesFile (&attr, &fbi);
- if (NT_SUCCESS (status))
- return fbi.FileAttributes;
-
- if (status != STATUS_OBJECT_NAME_NOT_FOUND
- && status != STATUS_NO_SUCH_FILE) /* File not found on 9x share */
- {
- /* File exists but access denied. Try to get attribute through
- directory query. */
- UNICODE_STRING dirname, basename;
- HANDLE dir;
- FILE_BOTH_DIR_INFORMATION fdi;
-
- RtlSplitUnicodePath (&upath, &dirname, &basename);
- InitializeObjectAttributes (&attr, &dirname,
- caseinsensitive ? OBJ_CASE_INSENSITIVE : 0,
- NULL, NULL);
- status = NtOpenFile (&dir, SYNCHRONIZE | FILE_LIST_DIRECTORY,
- &attr, &io, FILE_SHARE_VALID_FLAGS,
- FILE_SYNCHRONOUS_IO_NONALERT
- | FILE_OPEN_FOR_BACKUP_INTENT
- | FILE_DIRECTORY_FILE);
- if (NT_SUCCESS (status))
- {
- status = NtQueryDirectoryFile (dir, NULL, NULL, 0, &io,
- &fdi, sizeof fdi,
- FileBothDirectoryInformation,
- TRUE, &basename, TRUE);
- NtClose (dir);
- if (NT_SUCCESS (status) || status == STATUS_BUFFER_OVERFLOW)
- return fdi.FileAttributes;
- }
- }
- SetLastError (RtlNtStatusToDosError (status));
- return INVALID_FILE_ATTRIBUTES;
-}
-
-/* Convert an arbitrary path SRC to a pure Win32 path, suitable for
- passing to Win32 API routines.
-
- If an error occurs, `error' is set to the errno value.
- Otherwise it is set to 0.
-
- follow_mode values:
- SYMLINK_FOLLOW - convert to PATH symlink points to
- SYMLINK_NOFOLLOW - convert to PATH of symlink itself
- SYMLINK_IGNORE - do not check PATH for symlinks
- SYMLINK_CONTENTS - just return symlink contents
-*/
-
-/* TODO: This implementation is only preliminary. For internal
- purposes it's necessary to have a path_conv::check function which
- takes a UNICODE_STRING src path, otherwise we waste a lot of time
- for converting back and forth. The below implementation does
- realy nothing but converting to char *, until path_conv handles
- wide-char paths directly. */
-void
-path_conv::check (const UNICODE_STRING *src, unsigned opt,
- const suffix_info *suffixes)
-{
- tmp_pathbuf tp;
- char *path = tp.c_get ();
-
- user_shared->warned_msdos = true;
- sys_wcstombs (path, NT_MAX_PATH, src->Buffer, src->Length / sizeof (WCHAR));
- path_conv::check (path, opt, suffixes);
-}
-
-void
-path_conv::check (const char *src, unsigned opt,
- const suffix_info *suffixes)
-{
- /* The tmp_buf array is used when expanding symlinks. It is NT_MAX_PATH * 2
- in length so that we can hold the expanded symlink plus a trailer. */
- tmp_pathbuf tp;
- char *path_copy = tp.c_get ();
- char *pathbuf = tp.c_get ();
- char *tmp_buf = tp.t_get ();
- char *THIS_path = tp.c_get ();
- symlink_info sym;
- bool need_directory = 0;
- bool saw_symlinks = 0;
- bool add_ext = false;
- bool is_relpath;
- char *tail, *path_end;
-
-#if 0
- static path_conv last_path_conv;
- static char last_src[CYG_MAX_PATH];
-
- if (*last_src && strcmp (last_src, src) == 0)
- {
- *this = last_path_conv;
- return;
- }
-#endif
-
- __try
- {
- int loop = 0;
- path_flags = 0;
- known_suffix = NULL;
- fileattr = INVALID_FILE_ATTRIBUTES;
- caseinsensitive = OBJ_CASE_INSENSITIVE;
- if (wide_path)
- cfree (wide_path);
- wide_path = NULL;
- if (path)
- {
- cfree (modifiable_path ());
- path = NULL;
- }
- close_conv_handle ();
- memset (&dev, 0, sizeof (dev));
- fs.clear ();
- if (normalized_path)
- {
- cfree ((void *) normalized_path);
- normalized_path = NULL;
- }
- int component = 0; // Number of translated components
-
- if (!(opt & PC_NULLEMPTY))
- error = 0;
- else if (!*src)
- {
- error = ENOENT;
- return;
- }
-
- bool is_msdos = false;
- /* This loop handles symlink expansion. */
- for (;;)
- {
- MALLOC_CHECK;
- assert (src);
-
- is_relpath = !isabspath (src);
- error = normalize_posix_path (src, path_copy, tail);
- if (error > 0)
- return;
- if (error < 0)
- {
- if (component == 0)
- is_msdos = true;
- error = 0;
- }
-
- /* Detect if the user was looking for a directory. We have to strip
- the trailing slash initially while trying to add extensions but
- take it into account during processing */
- if (tail > path_copy + 2 && isslash (tail[-1]))
- {
- need_directory = 1;
- *--tail = '\0';
- }
- path_end = tail;
-
- /* Scan path_copy from right to left looking either for a symlink
- or an actual existing file. If an existing file is found, just
- return. If a symlink is found, exit the for loop.
- Also: be careful to preserve the errno returned from
- symlink.check as the caller may need it. */
- /* FIXME: Do we have to worry about multiple \'s here? */
- component = 0; // Number of translated components
- sym.contents[0] = '\0';
-
- int symlen = 0;
-
- for (unsigned pflags_or = opt & (PC_NO_ACCESS_CHECK | PC_KEEP_HANDLE);
- ;
- pflags_or = 0)
- {
- const suffix_info *suff;
- char *full_path;
-
- /* Don't allow symlink.check to set anything in the path_conv
- class if we're working on an inner component of the path */
- if (component)
- {
- suff = NULL;
- full_path = pathbuf;
- }
- else
- {
- suff = suffixes;
- full_path = THIS_path;
- }
-
- /* Convert to native path spec sans symbolic link info. */
- error = mount_table->conv_to_win32_path (path_copy, full_path,
- dev, &sym.pflags);
-
- if (error)
- return;
-
- sym.pflags |= pflags_or;
-
- if (!dev.exists ())
- {
- error = ENXIO;
- return;
- }
-
- if (iscygdrive_dev (dev))
- {
- if (!component)
- fileattr = FILE_ATTRIBUTE_DIRECTORY
- | FILE_ATTRIBUTE_READONLY;
- else
- {
- fileattr = getfileattr (THIS_path,
- sym.pflags & MOUNT_NOPOSIX);
- dev = FH_FS;
- }
- goto out;
- }
- else if (isdev_dev (dev))
- {
- /* Make sure that the path handling goes on as with FH_FS. */
- }
- else if (isvirtual_dev (dev))
- {
- /* FIXME: Calling build_fhandler here is not the right way to
- handle this. */
- fhandler_virtual *fh = (fhandler_virtual *)
- build_fh_dev (dev, path_copy);
- virtual_ftype_t file_type;
- if (!fh)
- file_type = virt_none;
- else
- {
- file_type = fh->exists ();
- if (file_type == virt_symlink)
- {
- fh->fill_filebuf ();
- symlen = sym.set (fh->get_filebuf ());
- }
- delete fh;
- }
- switch (file_type)
- {
- case virt_directory:
- case virt_rootdir:
- if (component == 0)
- fileattr = FILE_ATTRIBUTE_DIRECTORY;
- break;
- case virt_file:
- if (component == 0)
- fileattr = 0;
- break;
- case virt_symlink:
- goto is_virtual_symlink;
- case virt_pipe:
- if (component == 0)
- {
- fileattr = 0;
- dev.parse (FH_PIPE);
- }
- break;
- case virt_socket:
- if (component == 0)
- {
- fileattr = 0;
- dev.parse (FH_TCP);
- }
- break;
- case virt_fsdir:
- case virt_fsfile:
- /* Access to real file or directory via block device
- entry in /proc/sys. Convert to real file and go with
- the flow. */
- dev.parse (FH_FS);
- goto is_fs_via_procsys;
- case virt_blk:
- /* Block special device. If the trailing slash has been
- requested, the target is the root directory of the
- filesystem on this block device. So we convert this
- to a real file and attach the backslash. */
- if (component == 0 && need_directory)
- {
- dev.parse (FH_FS);
- strcat (full_path, "\\");
- fileattr = FILE_ATTRIBUTE_DIRECTORY
- | FILE_ATTRIBUTE_DEVICE;
- goto out;
- }
- /*FALLTHRU*/
- case virt_chr:
- if (component == 0)
- fileattr = FILE_ATTRIBUTE_DEVICE;
- break;
- default:
- if (component == 0)
- fileattr = INVALID_FILE_ATTRIBUTES;
- goto virtual_component_retry;
- }
- if (component == 0 || dev != FH_NETDRIVE)
- path_flags |= PATH_RO;
- goto out;
- }
- /* devn should not be a device. If it is, then stop parsing. */
- else if (dev != FH_FS)
- {
- fileattr = 0;
- path_flags = sym.pflags;
- if (component)
- {
- error = ENOTDIR;
- return;
- }
- goto out; /* Found a device. Stop parsing. */
- }
-
- /* If path is only a drivename, Windows interprets it as the
- current working directory on this drive instead of the root
- dir which is what we want. So we need the trailing backslash
- in this case. */
- if (full_path[0] && full_path[1] == ':' && full_path[2] == '\0')
- {
- full_path[2] = '\\';
- full_path[3] = '\0';
- }
-
- /* If the incoming path was given in DOS notation, always treat
- it as caseinsensitive,noacl path. This must be set before
- calling sym.check, otherwise the path is potentially treated
- casesensitive. */
- if (is_msdos)
- sym.pflags |= PATH_NOPOSIX | PATH_NOACL;
-
- is_fs_via_procsys:
-
- symlen = sym.check (full_path, suff, fs, conv_handle);
-
- is_virtual_symlink:
-
- if (sym.isdevice)
- {
- if (component)
- {
- error = ENOTDIR;
- return;
- }
- dev.parse (sym.major, sym.minor);
- dev.setfs (1);
- dev.mode = sym.mode;
- fileattr = sym.fileattr;
- goto out;
- }
-
- if (sym.pflags & PATH_SOCKET)
- {
- if (component)
- {
- error = ENOTDIR;
- return;
- }
- fileattr = sym.fileattr;
- dev.parse (FH_UNIX);
- dev.setfs (1);
- goto out;
- }
-
- if (!component)
- {
- /* Make sure that /dev always exists. */
- fileattr = isdev_dev (dev) ? FILE_ATTRIBUTE_DIRECTORY
- : sym.fileattr;
- path_flags = sym.pflags;
- }
- else if (isdev_dev (dev))
- {
- /* If we're looking for a non-existing file below /dev,
- make sure that the device type is converted to FH_FS, so
- that subsequent code handles the file correctly. Unless
- /dev itself doesn't exist on disk. In that case /dev
- is handled as virtual filesystem, and virtual filesystems
- are read-only. The PC_KEEP_HANDLE check allows to check
- for a call from an informational system call. In that
- case we just stick to ENOENT, and the device type doesn't
- matter anyway. */
- if (sym.error == ENOENT && !(opt & PC_KEEP_HANDLE))
- sym.error = EROFS;
- else
- dev = FH_FS;
- }
-
- /* If symlink.check found an existing non-symlink file, then
- it sets the appropriate flag. It also sets any suffix found
- into `ext_here'. */
- if (!sym.issymlink && sym.fileattr != INVALID_FILE_ATTRIBUTES)
- {
- error = sym.error;
- if (component == 0)
- add_ext = true;
- else if (!(sym.fileattr & FILE_ATTRIBUTE_DIRECTORY))
- {
- error = ENOTDIR;
- goto out;
- }
- goto out; // file found
- }
- /* Found a symlink if symlen > 0. If component == 0, then the
- src path itself was a symlink. If !follow_mode then
- we're done. Otherwise we have to insert the path found
- into the full path that we are building and perform all of
- these operations again on the newly derived path. */
- else if (symlen > 0)
- {
- saw_symlinks = 1;
- if (component == 0 && !need_directory
- && (!(opt & PC_SYM_FOLLOW)
- || (is_rep_symlink ()
- && (opt & PC_SYM_NOFOLLOW_REP))))
- {
- /* last component of path is a symlink. */
- set_symlink (symlen);
- if (opt & PC_SYM_CONTENTS)
- {
- strcpy (THIS_path, sym.contents);
- goto out;
- }
- add_ext = true;
- goto out;
- }
- /* Following a symlink we can't trust the collected
- filesystem information any longer. */
- fs.clear ();
- /* Close handle, if we have any. Otherwise we're collecting
- handles while following symlinks. */
- conv_handle.close ();
- break;
- }
- else if (sym.error && sym.error != ENOENT)
- {
- error = sym.error;
- goto out;
- }
- /* No existing file found. */
-
- virtual_component_retry:
- /* Find the new "tail" of the path, e.g. in '/for/bar/baz',
- /baz is the tail. */
- if (tail != path_end)
- *tail = '/';
- while (--tail > path_copy + 1 && *tail != '/') {}
- /* Exit loop if there is no tail or we are at the
- beginning of a UNC path */
- if (tail <= path_copy + 1)
- goto out; // all done
-
- /* Haven't found an existing pathname component yet.
- Pinch off the tail and try again. */
- *tail = '\0';
- component++;
- }
-
- /* Arrive here if above loop detected a symlink. */
- if (++loop > SYMLOOP_MAX)
- {
- error = ELOOP; // Eep.
- return;
- }
-
- MALLOC_CHECK;
-
-
- /* Place the link content, possibly with head and/or tail,
- in tmp_buf */
-
- char *headptr;
- if (isabspath (sym.contents))
- headptr = tmp_buf; /* absolute path */
- else
- {
- /* Copy the first part of the path (with ending /) and point to
- the end. */
- char *prevtail = tail;
- while (--prevtail > path_copy && *prevtail != '/') {}
- int headlen = prevtail - path_copy + 1;;
- memcpy (tmp_buf, path_copy, headlen);
- headptr = &tmp_buf[headlen];
- }
-
- /* Make sure there is enough space */
- if (headptr + symlen >= tmp_buf + (2 * NT_MAX_PATH))
- {
- too_long:
- error = ENAMETOOLONG;
- set_path ("::ENAMETOOLONG::");
- return;
- }
-
- /* Copy the symlink contents to the end of tmp_buf.
- Convert slashes. */
- for (char *p = sym.contents; *p; p++)
- *headptr++ = *p == '\\' ? '/' : *p;
- *headptr = '\0';
-
- /* Copy any tail component (with the 0) */
- if (tail++ < path_end)
- {
- /* Add a slash if needed. There is space. */
- if (*(headptr - 1) != '/')
- *headptr++ = '/';
- int taillen = path_end - tail + 1;
- if (headptr + taillen > tmp_buf + (2 * NT_MAX_PATH))
- goto too_long;
- memcpy (headptr, tail, taillen);
- }
-
- /* Evaluate everything all over again. */
- src = tmp_buf;
- }
-
- if (!(opt & PC_SYM_CONTENTS))
- add_ext = true;
-
- out:
- set_path (THIS_path);
- if (add_ext)
- add_ext_from_sym (sym);
- if (dev == FH_NETDRIVE && component)
- {
- /* This case indicates a non-existant resp. a non-retrievable
- share. This happens for instance if the share is a printer.
- In this case the path must not be treated like a FH_NETDRIVE,
- but like a FH_FS instead, so the usual open call for files
- is used on it. */
- dev.parse (FH_FS);
- }
- else if (isproc_dev (dev) && fileattr == INVALID_FILE_ATTRIBUTES)
- {
- /* FIXME: Usually we don't set error to ENOENT if a file doesn't
- exist. This is typically indicated by the fileattr content.
- So, why here? The downside is that cygwin_conv_path just gets
- an error for these paths so it reports the error back to the
- application. Unlike in all other cases of non-existant files,
- for which check doesn't set error, so cygwin_conv_path just
- returns the path, as intended. */
- error = ENOENT;
- return;
- }
- else if (!need_directory || error)
- /* nothing to do */;
- else if (fileattr == INVALID_FILE_ATTRIBUTES)
- /* Reattach trailing dirsep in native path. */
- strcat (modifiable_path (), "\\");
- else if (fileattr & FILE_ATTRIBUTE_DIRECTORY)
- path_flags &= ~PATH_SYMLINK;
- else
- {
- debug_printf ("%s is a non-directory", path);
- error = ENOTDIR;
- return;
- }
-
- if (dev.isfs ())
- {
- if (strncmp (path, "\\\\.\\", 4))
- {
- if (!tail || tail == path)
- /* nothing */;
- else if (tail[-1] != '\\')
- *tail = '\0';
- else
- {
- error = ENOENT;
- return;
- }
- }
-
- /* If FS hasn't been checked already in symlink_info::check,
- do so now. */
- if (fs.inited ()|| fs.update (get_nt_native_path (), NULL))
- {
- /* Incoming DOS paths are treated like DOS paths in native
- Windows applications. No ACLs, just default settings. */
- if (is_msdos)
- fs.has_acls (false);
- debug_printf ("this->path(%s), has_acls(%d)",
- path, fs.has_acls ());
- /* CV: We could use this->has_acls() but I want to make sure that
- we don't forget that the PATH_NOACL flag must be taken into
- account here. */
- if (!(path_flags & PATH_NOACL) && fs.has_acls ())
- set_exec (0); /* We really don't know if this is executable or
- not here but set it to not executable since
- it will be figured out later by anything
- which cares about this. */
- }
- /* If the FS has been found to have unrelibale inodes, note
- that in path_flags. */
- if (!fs.hasgood_inode ())
- path_flags |= PATH_IHASH;
- /* If the OS is caseinsensitive or the FS is caseinsensitive,
- don't handle path casesensitive. */
- if (cygwin_shared->obcaseinsensitive || fs.caseinsensitive ())
- path_flags |= PATH_NOPOSIX;
- caseinsensitive = (path_flags & PATH_NOPOSIX)
- ? OBJ_CASE_INSENSITIVE : 0;
- if (exec_state () != dont_know_if_executable)
- /* ok */;
- else if (isdir ())
- set_exec (1);
- else if (issymlink () || issocket ())
- set_exec (0);
- }
-
- if (opt & PC_NOFULL)
- {
- if (is_relpath)
- {
- mkrelpath (this->modifiable_path (), !!caseinsensitive);
- /* Invalidate wide_path so that wide relpath can be created
- in later calls to get_nt_native_path or get_wide_win32_path. */
- if (wide_path)
- cfree (wide_path);
- wide_path = NULL;
- }
- if (need_directory)
- {
- size_t n = strlen (this->path);
- /* Do not add trailing \ to UNC device names like \\.\a: */
- if (this->path[n - 1] != '\\' &&
- (strncmp (this->path, "\\\\.\\", 4) != 0))
- {
- this->modifiable_path ()[n] = '\\';
- this->modifiable_path ()[n + 1] = '\0';
- }
- }
- }
-
- if (saw_symlinks)
- set_has_symlinks ();
-
- if (opt & PC_OPEN)
- path_flags |= PATH_OPEN;
-
- if (opt & PC_CTTY)
- path_flags |= PATH_CTTY;
-
- if (opt & PC_POSIX)
- {
- if (tail < path_end && tail > path_copy + 1)
- *tail = '/';
- set_normalized_path (path_copy);
- if (is_msdos && dos_file_warning && !(opt & PC_NOWARN))
- warn_msdos (src);
- }
-
-#if 0
- if (!error)
- {
- last_path_conv = *this;
- strcpy (last_src, src);
- }
-#endif
- }
- __except (NO_ERROR)
- {
- error = EFAULT;
- }
- __endtry
-}
-
-path_conv::~path_conv ()
-{
- if (normalized_path)
- {
- cfree ((void *) normalized_path);
- normalized_path = NULL;
- }
- if (path)
- {
- cfree (modifiable_path ());
- path = NULL;
- }
- if (wide_path)
- {
- cfree (wide_path);
- wide_path = NULL;
- }
- close_conv_handle ();
-}
-
-bool
-path_conv::is_binary ()
-{
- tmp_pathbuf tp;
- PWCHAR bintest = tp.w_get ();
- DWORD bin;
-
- return GetBinaryTypeW (get_wide_win32_path (bintest), &bin)
- && (bin == SCS_32BIT_BINARY || bin == SCS_64BIT_BINARY);
-}
-
-/* Helper function to fill the fnoi datastructure for a file. */
-NTSTATUS
-file_get_fnoi (HANDLE h, bool skip_network_open_inf,
- PFILE_NETWORK_OPEN_INFORMATION pfnoi)
-{
- NTSTATUS status;
- IO_STATUS_BLOCK io;
-
- /* Some FSes (Netapps) don't implement FileNetworkOpenInformation. */
- status = skip_network_open_inf ? STATUS_INVALID_PARAMETER
- : NtQueryInformationFile (h, &io, pfnoi, sizeof *pfnoi,
- FileNetworkOpenInformation);
- if (status == STATUS_INVALID_PARAMETER)
- {
- /* Apart from accessing Netapps, this also occurs when accessing SMB
- share root dirs hosted on NT4. */
- FILE_BASIC_INFORMATION fbi;
- FILE_STANDARD_INFORMATION fsi;
-
- status = NtQueryInformationFile (h, &io, &fbi, sizeof fbi,
- FileBasicInformation);
- if (NT_SUCCESS (status))
- {
- memcpy (pfnoi, &fbi, 4 * sizeof (LARGE_INTEGER));
- if (NT_SUCCESS (NtQueryInformationFile (h, &io, &fsi,
- sizeof fsi,
- FileStandardInformation)))
- {
- pfnoi->EndOfFile.QuadPart = fsi.EndOfFile.QuadPart;
- pfnoi->AllocationSize.QuadPart
- = fsi.AllocationSize.QuadPart;
- }
- else
- pfnoi->EndOfFile.QuadPart
- = pfnoi->AllocationSize.QuadPart = 0;
- pfnoi->FileAttributes = fbi.FileAttributes;
- }
- }
- return status;
-}
-
-/* Normalize a Win32 path.
- /'s are converted to \'s in the process.
- All duplicate \'s, except for 2 leading \'s, are deleted.
-
- The result is 0 for success, or an errno error value.
- FIXME: A lot of this should be mergeable with the POSIX critter. */
-int
-normalize_win32_path (const char *src, char *dst, char *&tail)
-{
- const char *src_start = src;
- bool beg_src_slash = isdirsep (src[0]);
-
- tail = dst;
- /* Skip long path name prefixes in Win32 or NT syntax. */
- if (beg_src_slash && (src[1] == '?' || isdirsep (src[1]))
- && src[2] == '?' && isdirsep (src[3]))
- {
- src += 4;
- if (src[1] != ':') /* native UNC path */
- src += 2; /* Fortunately the first char is not copied... */
- else
- beg_src_slash = false;
- }
- if (beg_src_slash && isdirsep (src[1]))
- {
- if (isdirsep (src[2]))
- {
- /* More than two slashes are just folded into one. */
- src += 2;
- while (isdirsep (src[1]))
- ++src;
- }
- else
- {
- /* Two slashes start a network or device path. */
- *tail++ = '\\';
- src++;
- if (src[1] == '.' && isdirsep (src[2]))
- {
- *tail++ = '\\';
- *tail++ = '.';
- src += 2;
- }
- }
- }
- if (tail == dst)
- {
- if (isdrive (src))
- /* Always convert drive letter to uppercase for case sensitivity. */
- *tail++ = cyg_toupper (*src++);
- else if (*src != '/')
- {
- if (beg_src_slash)
- tail += cygheap->cwd.get_drive (dst);
- else if (!cygheap->cwd.get (dst, 0))
- return get_errno ();
- else
- {
- tail = strchr (tail, '\0');
- if (tail[-1] != '\\')
- *tail++ = '\\';
- }
- }
- }
-
- while (*src)
- {
- /* Strip duplicate /'s. */
- if (isdirsep (src[0]) && isdirsep (src[1]))
- src++;
- /* Ignore "./". */
- else if (src[0] == '.' && isdirsep (src[1])
- && (src == src_start || isdirsep (src[-1])))
- src += 2;
-
- /* Backup if "..". */
- else if (src[0] == '.' && src[1] == '.'
- /* dst must be greater than dst_start */
- && tail[-1] == '\\')
- {
- if (!isdirsep (src[2]) && src[2] != '\0')
- *tail++ = *src++;
- else
- {
- /* Back up over /, but not if it's the first one. */
- if (tail > dst + 1)
- tail--;
- /* Now back up to the next /. */
- while (tail > dst + 1 && tail[-1] != '\\' && tail[-2] != ':')
- tail--;
- src += 2;
- /* Skip /'s to the next path component. */
- while (isdirsep (*src))
- src++;
- }
- }
- /* Otherwise, add char to result. */
- else
- {
- if (*src == '/')
- *tail++ = '\\';
- else
- *tail++ = *src;
- src++;
- }
- if ((tail - dst) >= NT_MAX_PATH)
- return ENAMETOOLONG;
- }
- if (tail > dst + 1 && tail[-1] == '.' && tail[-2] == '\\')
- tail--;
- *tail = '\0';
- debug_printf ("%s = normalize_win32_path (%s)", dst, src_start);
- return 0;
-}
-
-/* Various utilities. */
-
-/* nofinalslash: Remove trailing / and \ from SRC (except for the
- first one). It is ok for src == dst. */
-
-void __reg2
-nofinalslash (const char *src, char *dst)
-{
- int len = strlen (src);
- if (src != dst)
- memcpy (dst, src, len + 1);
- while (len > 1 && isdirsep (dst[--len]))
- dst[len] = '\0';
-}
-
-/* conv_path_list: Convert a list of path names to/from Win32/POSIX. */
-
-static int
-conv_path_list (const char *src, char *dst, size_t size,
- cygwin_conv_path_t what)
-{
- tmp_pathbuf tp;
- char src_delim, dst_delim;
- size_t len;
- bool env_cvt = false;
-
- if (what == (cygwin_conv_path_t) ENV_CVT)
- {
- what = CCP_WIN_A_TO_POSIX | CCP_RELATIVE;
- env_cvt = true;
- }
- if ((what & CCP_CONVTYPE_MASK) == CCP_WIN_A_TO_POSIX)
- {
- src_delim = ';';
- dst_delim = ':';
- }
- else
- {
- src_delim = ':';
- dst_delim = ';';
- }
-
- char *srcbuf;
- len = strlen (src) + 1;
- if (len <= NT_MAX_PATH * sizeof (WCHAR))
- srcbuf = (char *) tp.w_get ();
- else
- srcbuf = (char *) alloca (len);
-
- int err = 0;
- char *d = dst - 1;
- bool saw_empty = false;
- do
- {
- char *srcpath = srcbuf;
- char *s = strccpy (srcpath, &src, src_delim);
- size_t len = s - srcpath;
- if (len >= NT_MAX_PATH)
- {
- err = ENAMETOOLONG;
- break;
- }
- /* Paths in Win32 path lists in the environment (%Path%), are often
- enclosed in quotes (usually paths with spaces). Trailing backslashes
- are common, too. Remove them. */
- if (env_cvt && len)
- {
- if (*srcpath == '"')
- {
- ++srcpath;
- *--s = '\0';
- len -= 2;
- }
- while (len && s[-1] == '\\')
- {
- *--s = '\0';
- --len;
- }
- }
- if (len)
- {
- ++d;
- err = cygwin_conv_path (what, srcpath, d, size - (d - dst));
- }
- else if ((what & CCP_CONVTYPE_MASK) == CCP_POSIX_TO_WIN_A)
- {
- ++d;
- err = cygwin_conv_path (what, ".", d, size - (d - dst));
- }
- else
- {
- if (env_cvt)
- saw_empty = true;
- continue;
- }
- if (err)
- break;
- d = strchr (d, '\0');
- *d = dst_delim;
- }
- while (*src++);
-
- if (saw_empty)
- err = EIDRM;
-
- if (d < dst)
- d++;
- *d = '\0';
- return err;
-}
-
-/********************** Symbolic Link Support **************************/
-
-/* Create a symlink from FROMPATH to TOPATH. */
-
-extern "C" int
-symlink (const char *oldpath, const char *newpath)
-{
- return symlink_worker (oldpath, newpath, false);
-}
-
-static int
-symlink_nfs (const char *oldpath, path_conv &win32_newpath)
-{
- /* On NFS, create symlinks by calling NtCreateFile with an EA of type
- NfsSymlinkTargetName containing ... the symlink target name. */
- tmp_pathbuf tp;
- PFILE_FULL_EA_INFORMATION pffei;
- NTSTATUS status;
- HANDLE fh;
- OBJECT_ATTRIBUTES attr;
- IO_STATUS_BLOCK io;
-
- pffei = (PFILE_FULL_EA_INFORMATION) tp.w_get ();
- pffei->NextEntryOffset = 0;
- pffei->Flags = 0;
- pffei->EaNameLength = sizeof (NFS_SYML_TARGET) - 1;
- char *EaValue = stpcpy (pffei->EaName, NFS_SYML_TARGET) + 1;
- pffei->EaValueLength = sizeof (WCHAR) *
- (sys_mbstowcs ((PWCHAR) EaValue, NT_MAX_PATH, oldpath) - 1);
- status = NtCreateFile (&fh, FILE_WRITE_DATA | FILE_WRITE_EA | SYNCHRONIZE,
- win32_newpath.get_object_attr (attr, sec_none_nih),
- &io, NULL, FILE_ATTRIBUTE_SYSTEM,
- FILE_SHARE_VALID_FLAGS, FILE_CREATE,
- FILE_SYNCHRONOUS_IO_NONALERT
- | FILE_OPEN_FOR_BACKUP_INTENT,
- pffei, NT_MAX_PATH * sizeof (WCHAR));
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- return -1;
- }
- NtClose (fh);
- return 0;
-}
-
-/* Count backslashes between s and e. */
-static inline int
-cnt_bs (PWCHAR s, PWCHAR e)
-{
- int num = 0;
-
- while (s < e)
- if (*s++ == L'\\')
- ++num;
- return num;
-}
-
-static int
-symlink_native (const char *oldpath, path_conv &win32_newpath)
-{
- tmp_pathbuf tp;
- path_conv win32_oldpath;
- PUNICODE_STRING final_oldpath, final_newpath;
- UNICODE_STRING final_oldpath_buf;
-
- if (isabspath (oldpath))
- {
- win32_oldpath.check (oldpath, PC_SYM_NOFOLLOW, stat_suffixes);
- final_oldpath = win32_oldpath.get_nt_native_path ();
- }
- else
- {
- /* The symlink target is relative to the directory in which
- the symlink gets created, not relative to the cwd. Therefore
- we have to mangle the path quite a bit before calling path_conv. */
- ssize_t len = strrchr (win32_newpath.normalized_path, '/')
- - win32_newpath.normalized_path + 1;
- char *absoldpath = tp.t_get ();
- stpcpy (stpncpy (absoldpath, win32_newpath.normalized_path, len),
- oldpath);
- win32_oldpath.check (absoldpath, PC_SYM_NOFOLLOW, stat_suffixes);
-
- /* Try hard to keep Windows symlink path relative. */
-
- /* 1. Find common path prefix. Skip leading \\?\, but take pre-increment
- of the following loop into account. */
- PWCHAR c_old = win32_oldpath.get_nt_native_path ()->Buffer + 3;
- PWCHAR c_new = win32_newpath.get_nt_native_path ()->Buffer + 3;
- /* Windows compatible == always check case insensitive. */
- while (towupper (*++c_old) == towupper (*++c_new))
- ;
- /* The last component could share a common prefix, so make sure we end
- up on the first char after the last common backslash. */
- while (c_old[-1] != L'\\')
- --c_old, --c_new;
-
- /* 2. Check if prefix is long enough. The prefix must at least points to
- a complete device: \\?\X:\ or \\?\UNC\server\share\ are the minimum
- prefix strings. We start counting behind the \\?\ for speed. */
- int num = cnt_bs (win32_oldpath.get_nt_native_path ()->Buffer + 4, c_old);
- if (num < 1 /* locale drive. */
- || (win32_oldpath.get_nt_native_path ()->Buffer[6] != L':'
- && num < 3)) /* UNC path. */
- {
- /* 3a. No valid common path prefix: Create absolute symlink. */
- final_oldpath = win32_oldpath.get_nt_native_path ();
- }
- else
- {
- /* 3b. Common path prefx. Count number of additional directories
- in symlink's path, and prepend as much ".." path components
- to the target path. */
- PWCHAR e_new = win32_newpath.get_nt_native_path ()->Buffer
- + win32_newpath.get_nt_native_path ()->Length
- / sizeof (WCHAR);
- num = cnt_bs (c_new, e_new);
- final_oldpath = &final_oldpath_buf;
- final_oldpath->Buffer = tp.w_get ();
- PWCHAR e_old = final_oldpath->Buffer;
- while (num-- > 0)
- e_old = wcpcpy (e_old, L"..\\");
- wcpcpy (e_old, c_old);
- }
- }
- /* If the symlink target doesn't exist, don't create native symlink.
- Otherwise the directory flag in the symlink is potentially wrong
- when the target comes into existence, and native tools will fail.
- This is so screwball. This is no problem on AFS, fortunately. */
- if (!win32_oldpath.exists () && !win32_oldpath.fs_is_afs ())
- {
- SetLastError (ERROR_FILE_NOT_FOUND);
- return -1;
- }
- /* Convert native paths to Win32 UNC paths. */
- final_newpath = win32_newpath.get_nt_native_path ();
- final_newpath->Buffer[1] = L'\\';
- /* oldpath may be relative. Make sure to convert only absolute paths
- to Win32 paths. */
- if (final_oldpath->Buffer[0] == L'\\')
- {
- /* Workaround Windows 8.1 bug. On Windows 8.1, the ShellExecuteW
- function does not handle the long path prefix correctly for symlink
- targets. Thus, we create simple short paths < MAX_PATH without
- long path prefix. */
- if (RtlEqualUnicodePathPrefix (final_oldpath, &ro_u_uncp, TRUE)
- && final_oldpath->Length < (MAX_PATH + 6) * sizeof (WCHAR))
- {
- final_oldpath->Buffer += 6;
- final_oldpath->Buffer[0] = L'\\';
- }
- else if (final_oldpath->Length < (MAX_PATH + 4) * sizeof (WCHAR))
- final_oldpath->Buffer += 4;
- else /* Stick to long path, fix native prefix for Win32 API calls. */
- final_oldpath->Buffer[1] = L'\\';
- }
- /* Try to create native symlink. */
- if (!CreateSymbolicLinkW (final_newpath->Buffer, final_oldpath->Buffer,
- win32_oldpath.isdir ()
- ? SYMBOLIC_LINK_FLAG_DIRECTORY : 0))
- {
- /* Repair native newpath, we still need it. */
- final_newpath->Buffer[1] = L'?';
- return -1;
- }
- return 0;
-}
-
-int
-symlink_worker (const char *oldpath, const char *newpath, bool isdevice)
-{
- int res = -1;
- size_t len;
- path_conv win32_newpath;
- char *buf, *cp;
- tmp_pathbuf tp;
- unsigned check_opt;
- bool has_trailing_dirsep = false;
- winsym_t wsym_type;
-
- /* POSIX says that empty 'newpath' is invalid input while empty
- 'oldpath' is valid -- it's symlink resolver job to verify if
- symlink contents point to existing filesystem object */
- __try
- {
- if (!*oldpath || !*newpath)
- {
- set_errno (ENOENT);
- __leave;
- }
-
- if (strlen (oldpath) > SYMLINK_MAX)
- {
- set_errno (ENAMETOOLONG);
- __leave;
- }
-
- /* Trailing dirsep is a no-no. */
- len = strlen (newpath);
- has_trailing_dirsep = isdirsep (newpath[len - 1]);
- if (has_trailing_dirsep)
- {
- newpath = strdup (newpath);
- ((char *) newpath)[len - 1] = '\0';
- }
-
- check_opt = PC_SYM_NOFOLLOW | PC_POSIX | (isdevice ? PC_NOWARN : 0);
- /* We need the normalized full path below. */
- win32_newpath.check (newpath, check_opt, stat_suffixes);
-
- /* Default symlink type is determined by global allow_winsymlinks
- variable. Device files are always shortcuts. */
- wsym_type = isdevice ? WSYM_lnk : allow_winsymlinks;
- /* NFS has its own, dedicated way to create symlinks. */
- if (win32_newpath.fs_is_nfs ())
- wsym_type = WSYM_nfs;
- /* MVFS doesn't handle the SYSTEM DOS attribute, but it handles the R/O
- attribute. Therefore we create symlinks on MVFS always as shortcuts. */
- else if (win32_newpath.fs_is_mvfs ())
- wsym_type = WSYM_lnk;
- /* AFS only supports native symlinks. */
- else if (win32_newpath.fs_is_afs ())
- {
- /* Bail out if OS doesn't support native symlinks. */
- if (wincap.max_sys_priv () < SE_CREATE_SYMBOLIC_LINK_PRIVILEGE)
- {
- set_errno (EPERM);
- __leave;
- }
- wsym_type = WSYM_nativestrict;
- }
- /* Don't try native symlinks on FSes not supporting reparse points. */
- else if ((wsym_type == WSYM_native || wsym_type == WSYM_nativestrict)
- && !(win32_newpath.fs_flags () & FILE_SUPPORTS_REPARSE_POINTS))
- wsym_type = WSYM_sysfile;
-
- /* Attach .lnk suffix when shortcut is requested. */
- if (wsym_type == WSYM_lnk && !win32_newpath.exists ()
- && (isdevice || !win32_newpath.fs_is_nfs ()))
- {
- char *newplnk = tp.c_get ();
- stpcpy (stpcpy (newplnk, newpath), ".lnk");
- win32_newpath.check (newplnk, check_opt);
- }
-
- if (win32_newpath.error)
- {
- set_errno (win32_newpath.error);
- __leave;
- }
-
- syscall_printf ("symlink (%s, %S) wsym_type %d", oldpath,
- win32_newpath.get_nt_native_path (), wsym_type);
-
- if ((!isdevice && win32_newpath.exists ())
- || win32_newpath.is_auto_device ())
- {
- set_errno (EEXIST);
- __leave;
- }
- if (has_trailing_dirsep && !win32_newpath.exists ())
- {
- set_errno (ENOENT);
- __leave;
- }
-
- /* Handle NFS and native symlinks in their own functions. */
- switch (wsym_type)
- {
- case WSYM_nfs:
- res = symlink_nfs (oldpath, win32_newpath);
- __leave;
- case WSYM_native:
- case WSYM_nativestrict:
- res = symlink_native (oldpath, win32_newpath);
- if (!res)
- __leave;
- /* Strictly native? Too bad. */
- if (wsym_type == WSYM_nativestrict)
- {
- __seterrno ();
- __leave;
- }
- /* Otherwise, fall back to default symlink type. */
- wsym_type = WSYM_sysfile;
- break;
- default:
- break;
- }
-
- if (wsym_type == WSYM_lnk)
- {
- path_conv win32_oldpath;
- ITEMIDLIST *pidl = NULL;
- size_t full_len = 0;
- unsigned short oldpath_len, desc_len, relpath_len, pidl_len = 0;
- char desc[MAX_PATH + 1], *relpath;
-
- if (!isdevice)
- {
- /* First create an IDLIST to learn how big our shortcut is
- going to be. */
- IShellFolder *psl;
-
- /* The symlink target is relative to the directory in which the
- symlink gets created, not relative to the cwd. Therefore we
- have to mangle the path quite a bit before calling path_conv.*/
- if (isabspath (oldpath))
- win32_oldpath.check (oldpath,
- PC_SYM_NOFOLLOW,
- stat_suffixes);
- else
- {
- len = strrchr (win32_newpath.normalized_path, '/')
- - win32_newpath.normalized_path + 1;
- char *absoldpath = tp.t_get ();
- stpcpy (stpncpy (absoldpath, win32_newpath.normalized_path,
- len),
- oldpath);
- win32_oldpath.check (absoldpath, PC_SYM_NOFOLLOW,
- stat_suffixes);
- }
- if (SUCCEEDED (SHGetDesktopFolder (&psl)))
- {
- WCHAR wc_path[win32_oldpath.get_wide_win32_path_len () + 1];
- win32_oldpath.get_wide_win32_path (wc_path);
- /* Amazing but true: Even though the ParseDisplayName method
- takes a wide char path name, it does not understand the
- Win32 prefix for long pathnames! So we have to tack off
- the prefix and convert the path to the "normal" syntax
- for ParseDisplayName. */
- WCHAR *wc = wc_path + 4;
- if (wc[1] != L':') /* native UNC path */
- *(wc += 2) = L'\\';
- HRESULT res;
- if (SUCCEEDED (res = psl->ParseDisplayName (NULL, NULL, wc,
- NULL, &pidl,
- NULL)))
- {
- ITEMIDLIST *p;
-
- for (p = pidl; p->mkid.cb > 0;
- p = (ITEMIDLIST *)((char *) p + p->mkid.cb))
- ;
- pidl_len = (char *) p - (char *) pidl + 2;
- }
- psl->Release ();
- }
- }
- /* Compute size of shortcut file. */
- full_len = sizeof (win_shortcut_hdr);
- if (pidl_len)
- full_len += sizeof (unsigned short) + pidl_len;
- oldpath_len = strlen (oldpath);
- /* Unfortunately the length of the description is restricted to a
- length of 2000 bytes. We don't want to add considerations for
- the different lengths and even 2000 bytes is not enough for long
- path names. So what we do here is to set the description to the
- POSIX path only if the path is not longer than MAX_PATH characters.
- We append the full path name after the regular shortcut data
- (see below), which works fine with Windows Explorer as well
- as older Cygwin versions (as long as the whole file isn't bigger
- than 8K). The description field is only used for backward
- compatibility to older Cygwin versions and those versions are
- not capable of handling long path names anyway. */
- desc_len = stpcpy (desc, oldpath_len > MAX_PATH
- ? "[path too long]" : oldpath) - desc;
- full_len += sizeof (unsigned short) + desc_len;
- /* Devices get the oldpath string unchanged as relative path. */
- if (isdevice)
- {
- relpath_len = oldpath_len;
- stpcpy (relpath = tp.c_get (), oldpath);
- }
- else
- {
- relpath_len = strlen (win32_oldpath.get_win32 ());
- stpcpy (relpath = tp.c_get (), win32_oldpath.get_win32 ());
- }
- full_len += sizeof (unsigned short) + relpath_len;
- full_len += sizeof (unsigned short) + oldpath_len;
- /* 1 byte more for trailing 0 written by stpcpy. */
- if (full_len < NT_MAX_PATH * sizeof (WCHAR))
- buf = tp.t_get ();
- else
- buf = (char *) alloca (full_len + 1);
-
- /* Create shortcut header */
- win_shortcut_hdr *shortcut_header = (win_shortcut_hdr *) buf;
- memset (shortcut_header, 0, sizeof *shortcut_header);
- shortcut_header->size = sizeof *shortcut_header;
- shortcut_header->magic = GUID_shortcut;
- shortcut_header->flags = (WSH_FLAG_DESC | WSH_FLAG_RELPATH);
- if (pidl)
- shortcut_header->flags |= WSH_FLAG_IDLIST;
- shortcut_header->run = SW_NORMAL;
- cp = buf + sizeof (win_shortcut_hdr);
-
- /* Create IDLIST */
- if (pidl)
- {
- *(unsigned short *)cp = pidl_len;
- memcpy (cp += 2, pidl, pidl_len);
- cp += pidl_len;
- CoTaskMemFree (pidl);
- }
-
- /* Create description */
- *(unsigned short *)cp = desc_len;
- cp = stpcpy (cp += 2, desc);
-
- /* Create relpath */
- *(unsigned short *)cp = relpath_len;
- cp = stpcpy (cp += 2, relpath);
-
- /* Append the POSIX path after the regular shortcut data for
- the long path support. */
- unsigned short *plen = (unsigned short *) cp;
- cp += 2;
- *(PWCHAR) cp = 0xfeff; /* BOM */
- cp += 2;
- *plen = sys_mbstowcs ((PWCHAR) cp, NT_MAX_PATH, oldpath)
- * sizeof (WCHAR);
- cp += *plen;
- }
- else
- {
- /* Default technique creating a symlink. */
- buf = tp.t_get ();
- cp = stpcpy (buf, SYMLINK_COOKIE);
- *(PWCHAR) cp = 0xfeff; /* BOM */
- cp += 2;
- /* Note that the terminating nul is written. */
- cp += sys_mbstowcs ((PWCHAR) cp, NT_MAX_PATH, oldpath)
- * sizeof (WCHAR);
- }
-
- OBJECT_ATTRIBUTES attr;
- IO_STATUS_BLOCK io;
- NTSTATUS status;
- ULONG access;
- HANDLE fh;
-
- access = DELETE | FILE_GENERIC_WRITE;
- if (isdevice && win32_newpath.exists ())
- {
- status = NtOpenFile (&fh, FILE_WRITE_ATTRIBUTES,
- win32_newpath.get_object_attr (attr,
- sec_none_nih),
- &io, 0, FILE_OPEN_FOR_BACKUP_INTENT);
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- __leave;
- }
- status = NtSetAttributesFile (fh, FILE_ATTRIBUTE_NORMAL);
- NtClose (fh);
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- __leave;
- }
- }
- else if (!isdevice && win32_newpath.has_acls ()
- && !win32_newpath.isremote ())
- /* If the filesystem supports ACLs, we will overwrite the DACL after the
- call to NtCreateFile. This requires a handle with READ_CONTROL and
- WRITE_DAC access, otherwise get_file_sd and set_file_sd both have to
- open the file again.
- FIXME: On remote NTFS shares open sometimes fails because even the
- creator of the file doesn't have the right to change the DACL.
- I don't know what setting that is or how to recognize such a share,
- so for now we don't request WRITE_DAC on remote drives. */
- access |= READ_CONTROL | WRITE_DAC;
-
- status = NtCreateFile (&fh, access,
- win32_newpath.get_object_attr (attr, sec_none_nih),
- &io, NULL, FILE_ATTRIBUTE_NORMAL,
- FILE_SHARE_VALID_FLAGS,
- isdevice ? FILE_OVERWRITE_IF : FILE_CREATE,
- FILE_SYNCHRONOUS_IO_NONALERT
- | FILE_NON_DIRECTORY_FILE
- | FILE_OPEN_FOR_BACKUP_INTENT,
- NULL, 0);
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- __leave;
- }
- if (win32_newpath.has_acls ())
- set_file_attribute (fh, win32_newpath, ILLEGAL_UID, ILLEGAL_GID,
- (io.Information == FILE_CREATED ? S_JUSTCREATED : 0)
- | S_IFLNK | STD_RBITS | STD_WBITS);
- status = NtWriteFile (fh, NULL, NULL, NULL, &io, buf, cp - buf,
- NULL, NULL);
- if (NT_SUCCESS (status) && io.Information == (ULONG) (cp - buf))
- {
- status = NtSetAttributesFile (fh, wsym_type == WSYM_lnk
- ? FILE_ATTRIBUTE_READONLY
- : FILE_ATTRIBUTE_SYSTEM);
- if (!NT_SUCCESS (status))
- debug_printf ("Setting attributes failed, status = %y", status);
- res = 0;
- }
- else
- {
- __seterrno_from_nt_status (status);
- FILE_DISPOSITION_INFORMATION fdi = { TRUE };
- status = NtSetInformationFile (fh, &io, &fdi, sizeof fdi,
- FileDispositionInformation);
- if (!NT_SUCCESS (status))
- debug_printf ("Setting delete dispostion failed, status = %y",
- status);
- }
- NtClose (fh);
-
- }
- __except (EFAULT) {}
- __endtry
- syscall_printf ("%d = symlink_worker(%s, %s, %d)",
- res, oldpath, newpath, isdevice);
- if (has_trailing_dirsep)
- free ((void *) newpath);
- return res;
-}
-
-static bool
-cmp_shortcut_header (win_shortcut_hdr *file_header)
-{
- /* A Cygwin or U/Win shortcut only contains a description and a relpath.
- Cygwin shortcuts also might contain an ITEMIDLIST. The run type is
- always set to SW_NORMAL. */
- return file_header->size == sizeof (win_shortcut_hdr)
- && !memcmp (&file_header->magic, &GUID_shortcut, sizeof GUID_shortcut)
- && (file_header->flags & ~WSH_FLAG_IDLIST)
- == (WSH_FLAG_DESC | WSH_FLAG_RELPATH)
- && file_header->run == SW_NORMAL;
-}
-
-int
-symlink_info::check_shortcut (HANDLE h)
-{
- tmp_pathbuf tp;
- win_shortcut_hdr *file_header;
- char *buf, *cp;
- unsigned short len;
- int res = 0;
- NTSTATUS status;
- IO_STATUS_BLOCK io;
- FILE_STANDARD_INFORMATION fsi;
- LARGE_INTEGER off = { QuadPart:0LL };
-
- status = NtQueryInformationFile (h, &io, &fsi, sizeof fsi,
- FileStandardInformation);
- if (!NT_SUCCESS (status))
- {
- set_error (EIO);
- return 0;
- }
- if (fsi.EndOfFile.QuadPart <= (LONGLONG) sizeof (win_shortcut_hdr)
- || fsi.EndOfFile.QuadPart > 4 * 65536)
- return 0;
- if (fsi.EndOfFile.LowPart < NT_MAX_PATH * sizeof (WCHAR))
- buf = (char *) tp.w_get ();
- else
- buf = (char *) alloca (fsi.EndOfFile.LowPart + 1);
- status = NtReadFile (h, NULL, NULL, NULL, &io, buf, fsi.EndOfFile.LowPart,
- &off, NULL);
- if (!NT_SUCCESS (status))
- {
- if (status != STATUS_END_OF_FILE)
- set_error (EIO);
- return 0;
- }
- file_header = (win_shortcut_hdr *) buf;
- if (io.Information != fsi.EndOfFile.LowPart
- || !cmp_shortcut_header (file_header))
- return 0;
- cp = buf + sizeof (win_shortcut_hdr);
- if (file_header->flags & WSH_FLAG_IDLIST) /* Skip ITEMIDLIST */
- cp += *(unsigned short *) cp + 2;
- if (!(len = *(unsigned short *) cp))
- return 0;
- cp += 2;
- /* Check if this is a device file - these start with the sequence :\\ */
- if (strncmp (cp, ":\\", 2) == 0)
- res = strlen (strcpy (contents, cp)); /* Don't mess with device files */
- else
- {
- /* Has appended full path? If so, use it instead of description. */
- unsigned short relpath_len = *(unsigned short *) (cp + len);
- if (cp + len + 2 + relpath_len < buf + fsi.EndOfFile.LowPart)
- {
- cp += len + 2 + relpath_len;
- len = *(unsigned short *) cp;
- cp += 2;
- }
- if (*(PWCHAR) cp == 0xfeff) /* BOM */
- {
- char *tmpbuf = tp.c_get ();
- if (sys_wcstombs (tmpbuf, NT_MAX_PATH, (PWCHAR) (cp + 2))
- > SYMLINK_MAX + 1)
- return 0;
- res = posixify (tmpbuf);
- }
- else if (len > SYMLINK_MAX)
- return 0;
- else
- {
- cp[len] = '\0';
- res = posixify (cp);
- }
- }
- if (res) /* It's a symlink. */
- pflags |= PATH_SYMLINK | PATH_LNK;
- return res;
-}
-
-int
-symlink_info::check_sysfile (HANDLE h)
-{
- tmp_pathbuf tp;
- char cookie_buf[sizeof (SYMLINK_COOKIE) - 1];
- char *srcbuf = tp.c_get ();
- int res = 0;
- NTSTATUS status;
- IO_STATUS_BLOCK io;
- bool interix_symlink = false;
- LARGE_INTEGER off = { QuadPart:0LL };
-
- status = NtReadFile (h, NULL, NULL, NULL, &io, cookie_buf,
- sizeof (cookie_buf), &off, NULL);
- if (!NT_SUCCESS (status))
- {
- debug_printf ("ReadFile1 failed %y", status);
- if (status != STATUS_END_OF_FILE)
- set_error (EIO);
- return 0;
- }
- off.QuadPart = io.Information;
- if (io.Information == sizeof (cookie_buf)
- && memcmp (cookie_buf, SYMLINK_COOKIE, sizeof (cookie_buf)) == 0)
- {
- /* It's a symlink. */
- pflags |= PATH_SYMLINK;
- }
- else if (io.Information == sizeof (cookie_buf)
- && memcmp (cookie_buf, SOCKET_COOKIE, sizeof (cookie_buf)) == 0)
- pflags |= PATH_SOCKET;
- else if (io.Information >= sizeof (INTERIX_SYMLINK_COOKIE)
- && memcmp (cookie_buf, INTERIX_SYMLINK_COOKIE,
- sizeof (INTERIX_SYMLINK_COOKIE) - 1) == 0)
- {
- /* It's an Interix symlink. */
- pflags |= PATH_SYMLINK;
- interix_symlink = true;
- /* Interix symlink cookies are shorter than Cygwin symlink cookies, so
- in case of an Interix symlink cooky we have read too far into the
- file. Set file pointer back to the position right after the cookie. */
- off.QuadPart = sizeof (INTERIX_SYMLINK_COOKIE) - 1;
- }
- if (pflags & PATH_SYMLINK)
- {
- status = NtReadFile (h, NULL, NULL, NULL, &io, srcbuf,
- NT_MAX_PATH, &off, NULL);
- if (!NT_SUCCESS (status))
- {
- debug_printf ("ReadFile2 failed");
- if (status != STATUS_END_OF_FILE)
- set_error (EIO);
- }
- else if (*(PWCHAR) srcbuf == 0xfeff /* BOM */
- || interix_symlink)
- {
- /* Add trailing 0 to Interix symlink target. Skip BOM in Cygwin
- symlinks. */
- if (interix_symlink)
- ((PWCHAR) srcbuf)[io.Information / sizeof (WCHAR)] = L'\0';
- else
- srcbuf += 2;
- char *tmpbuf = tp.c_get ();
- if (sys_wcstombs (tmpbuf, NT_MAX_PATH, (PWCHAR) srcbuf)
- > SYMLINK_MAX + 1)
- debug_printf ("symlink string too long");
- else
- res = posixify (tmpbuf);
- }
- else if (io.Information > SYMLINK_MAX + 1)
- debug_printf ("symlink string too long");
- else
- res = posixify (srcbuf);
- }
- return res;
-}
-
-int
-symlink_info::check_reparse_point (HANDLE h, bool remote)
-{
- tmp_pathbuf tp;
- NTSTATUS status;
- IO_STATUS_BLOCK io;
- PREPARSE_DATA_BUFFER rp = (PREPARSE_DATA_BUFFER) tp.c_get ();
- UNICODE_STRING subst;
- char srcbuf[SYMLINK_MAX + 7];
-
- /* On remote drives or under heavy load, NtFsControlFile can return with
- STATUS_PENDING. If so, instead of creating an event object, just set
- io.Status to an invalid value and perform a minimal wait until io.Status
- changed. */
- memset (&io, 0xff, sizeof io);
- status = NtFsControlFile (h, NULL, NULL, NULL, &io,
- FSCTL_GET_REPARSE_POINT, NULL, 0, (LPVOID) rp,
- MAXIMUM_REPARSE_DATA_BUFFER_SIZE);
- if (status == STATUS_PENDING)
- {
- while (io.Status == (NTSTATUS) 0xffffffff)
- Sleep (1L);
- status = io.Status;
- }
- if (!NT_SUCCESS (status))
- {
- debug_printf ("NtFsControlFile(FSCTL_GET_REPARSE_POINT) failed, %y",
- status);
- set_error (EIO);
- return 0;
- }
- if (rp->ReparseTag == IO_REPARSE_TAG_SYMLINK)
- /* Windows evaluates native symlink literally. If a remote symlink points
- to, say, C:\foo, it will be handled as if the target is the local file
- C:\foo. That comes in handy since that's how symlinks are treated under
- POSIX as well. */
- RtlInitCountedUnicodeString (&subst,
- (WCHAR *)((char *)rp->SymbolicLinkReparseBuffer.PathBuffer
- + rp->SymbolicLinkReparseBuffer.SubstituteNameOffset),
- rp->SymbolicLinkReparseBuffer.SubstituteNameLength);
- else if (!remote && rp->ReparseTag == IO_REPARSE_TAG_MOUNT_POINT)
- {
- /* Don't handle junctions on remote filesystems as symlinks. This type
- of reparse point is handled transparently by the OS so that the
- target of the junction is the remote directory it is supposed to
- point to. If we handle it as symlink, it will be mistreated as
- pointing to a dir on the local system. */
- RtlInitCountedUnicodeString (&subst,
- (WCHAR *)((char *)rp->MountPointReparseBuffer.PathBuffer
- + rp->MountPointReparseBuffer.SubstituteNameOffset),
- rp->MountPointReparseBuffer.SubstituteNameLength);
- if (RtlEqualUnicodePathPrefix (&subst, &ro_u_volume, TRUE))
- {
- /* Volume mount point. Not treated as symlink. The return
- value of -1 is a hint for the caller to treat this as a
- volume mount point. */
- return -1;
- }
- }
- else
- {
- /* Maybe it's a reparse point, but it's certainly not one we recognize.
- Drop REPARSE attribute so we don't try to use the flag accidentally.
- It's just some arbitrary file or directory for us. */
- fileattr &= ~FILE_ATTRIBUTE_REPARSE_POINT;
- return 0;
- }
- sys_wcstombs (srcbuf, SYMLINK_MAX + 7, subst.Buffer,
- subst.Length / sizeof (WCHAR));
- pflags |= PATH_SYMLINK | PATH_REP;
- /* A symlink is never a directory. */
- fileattr &= ~FILE_ATTRIBUTE_DIRECTORY;
- return posixify (srcbuf);
-}
-
-int
-symlink_info::check_nfs_symlink (HANDLE h)
-{
- tmp_pathbuf tp;
- NTSTATUS status;
- IO_STATUS_BLOCK io;
- struct {
- FILE_GET_EA_INFORMATION fgei;
- char buf[sizeof (NFS_SYML_TARGET)];
- } fgei_buf;
- PFILE_FULL_EA_INFORMATION pffei;
- int res = 0;
-
- /* To find out if the file is a symlink and to get the symlink target,
- try to fetch the NfsSymlinkTargetName EA. */
- fgei_buf.fgei.NextEntryOffset = 0;
- fgei_buf.fgei.EaNameLength = sizeof (NFS_SYML_TARGET) - 1;
- stpcpy (fgei_buf.fgei.EaName, NFS_SYML_TARGET);
- pffei = (PFILE_FULL_EA_INFORMATION) tp.w_get ();
- status = NtQueryEaFile (h, &io, pffei, NT_MAX_PATH * sizeof (WCHAR), TRUE,
- &fgei_buf.fgei, sizeof fgei_buf, NULL, TRUE);
- if (NT_SUCCESS (status) && pffei->EaValueLength > 0)
- {
- PWCHAR spath = (PWCHAR)
- (pffei->EaName + pffei->EaNameLength + 1);
- res = sys_wcstombs (contents, SYMLINK_MAX + 1,
- spath, pffei->EaValueLength) - 1;
- pflags |= PATH_SYMLINK;
- }
- return res;
-}
-
-int
-symlink_info::posixify (char *srcbuf)
-{
- /* The definition for a path in a native symlink is a bit weird. The Flags
- value seem to contain 0 for absolute paths (stored as NT native path)
- and 1 for relative paths. Relative paths are paths not starting with a
- drive letter. These are not converted to NT native, but stored as
- given. A path starting with a single backslash is relative to the
- current drive thus a "relative" value (Flags == 1).
- Funny enough it's possible to store paths with slashes instead of
- backslashes, but they are evaluated incorrectly by subsequent Windows
- calls like CreateFile (ERROR_INVALID_NAME). So, what we do here is to
- take paths starting with slashes at face value, evaluating them as
- Cygwin specific POSIX paths.
- A path starting with two slashes(!) or backslashes is converted into an
- NT UNC path. Unfortunately, in contrast to POSIX rules, paths starting
- with three or more (back)slashes are also converted into UNC paths,
- just incorrectly sticking to one redundant leading backslash. We go
- along with this behaviour to avoid scenarios in which native tools access
- other files than Cygwin.
- The above rules are used exactly the same way on Cygwin specific symlinks
- (sysfiles and shortcuts) to eliminate non-POSIX paths in the output. */
-
- /* Eliminate native NT prefixes. */
- if (srcbuf[0] == '\\' && !strncmp (srcbuf + 1, "??\\", 3))
- {
- srcbuf += 4;
- if (srcbuf[1] != ':') /* native UNC path */
- *(srcbuf += 2) = '\\';
- }
- if (isdrive (srcbuf))
- mount_table->conv_to_posix_path (srcbuf, contents, 0);
- else if (srcbuf[0] == '\\')
- {
- if (srcbuf[1] == '\\') /* UNC path */
- slashify (srcbuf, contents, 0);
- else /* Paths starting with \ are current drive relative. */
- {
- char cvtbuf[SYMLINK_MAX + 1];
-
- stpcpy (cvtbuf + cygheap->cwd.get_drive (cvtbuf), srcbuf);
- mount_table->conv_to_posix_path (cvtbuf, contents, 0);
- }
- }
- else /* Everything else is taken as is. */
- slashify (srcbuf, contents, 0);
- return strlen (contents);
-}
-
-enum
-{
- SCAN_BEG,
- SCAN_LNK,
- SCAN_HASLNK,
- SCAN_JUSTCHECK,
- SCAN_JUSTCHECKTHIS, /* Never try to append a suffix. */
- SCAN_APPENDLNK,
- SCAN_EXTRALNK,
- SCAN_DONE,
-};
-
-class suffix_scan
-{
- const suffix_info *suffixes, *suffixes_start;
- int nextstate;
- char *eopath;
- size_t namelen;
-public:
- const char *path;
- char *has (const char *, const suffix_info *);
- int next ();
- int lnk_match () {return nextstate >= SCAN_APPENDLNK;}
- size_t name_len () {return namelen;}
-};
-
-char *
-suffix_scan::has (const char *in_path, const suffix_info *in_suffixes)
-{
- nextstate = SCAN_BEG;
- suffixes = suffixes_start = in_suffixes;
-
- const char *fname = strrchr (in_path, '\\');
- fname = fname ? fname + 1 : in_path;
- char *ext_here = strrchr (fname, '.');
- path = in_path;
- eopath = strchr (path, '\0');
-
- if (!ext_here)
- goto noext;
-
- if (suffixes)
- {
- /* Check if the extension matches a known extension */
- for (const suffix_info *ex = in_suffixes; ex->name != NULL; ex++)
- if (ascii_strcasematch (ext_here, ex->name))
- {
- nextstate = SCAN_JUSTCHECK;
- suffixes = NULL; /* Has an extension so don't scan for one. */
- goto done;
- }
- }
-
- /* Didn't match. Use last resort -- .lnk. */
- if (ascii_strcasematch (ext_here, ".lnk"))
- {
- nextstate = SCAN_HASLNK;
- suffixes = NULL;
- }
-
- noext:
- ext_here = eopath;
-
- done:
- namelen = eopath - fname;
- /* Avoid attaching suffixes if the resulting filename would be invalid.
- For performance reasons we don't check the length of a suffix, since
- we know that all suffixes are 4 chars in length.
-
- FIXME: This is not really correct. A fully functional test should
- work on wide character paths. This would probably also speed
- up symlink_info::check. */
- if (namelen > NAME_MAX - 4)
- {
- nextstate = SCAN_JUSTCHECKTHIS;
- suffixes = NULL;
- }
- return ext_here;
-}
-
-int
-suffix_scan::next ()
-{
- for (;;)
- {
- if (!suffixes)
- switch (nextstate)
- {
- case SCAN_BEG:
- suffixes = suffixes_start;
- if (!suffixes)
- {
- nextstate = SCAN_LNK;
- return 1;
- }
- nextstate = SCAN_EXTRALNK;
- /* fall through to suffix checking below */
- break;
- case SCAN_HASLNK:
- nextstate = SCAN_APPENDLNK; /* Skip SCAN_BEG */
- return 1;
- case SCAN_EXTRALNK:
- nextstate = SCAN_DONE;
- *eopath = '\0';
- return 0;
- case SCAN_JUSTCHECK:
- nextstate = SCAN_LNK;
- return 1;
- case SCAN_JUSTCHECKTHIS:
- nextstate = SCAN_DONE;
- return 1;
- case SCAN_LNK:
- case SCAN_APPENDLNK:
- nextstate = SCAN_DONE;
- if (namelen + (*eopath ? 8 : 4) > NAME_MAX)
- {
- *eopath = '\0';
- return 0;
- }
- strcat (eopath, ".lnk");
- return 1;
- default:
- *eopath = '\0';
- return 0;
- }
-
- while (suffixes && suffixes->name)
- if (nextstate == SCAN_EXTRALNK
- && (!suffixes->addon || namelen > NAME_MAX - 8))
- suffixes++;
- else
- {
- strcpy (eopath, suffixes->name);
- if (nextstate == SCAN_EXTRALNK)
- strcat (eopath, ".lnk");
- suffixes++;
- return 1;
- }
- suffixes = NULL;
- }
-}
-
-bool
-symlink_info::set_error (int in_errno)
-{
- bool res;
- if (!(pflags & PATH_NO_ACCESS_CHECK) || in_errno == ENAMETOOLONG || in_errno == EIO)
- {
- error = in_errno;
- res = true;
- }
- else if (in_errno == ENOENT)
- res = true;
- else
- {
- fileattr = FILE_ATTRIBUTE_NORMAL;
- res = false;
- }
- return res;
-}
-
-bool
-symlink_info::parse_device (const char *contents)
-{
- char *endptr;
- _major_t mymajor;
- _major_t myminor;
- _mode_t mymode;
-
- mymajor = strtol (contents += 2, &endptr, 16);
- if (endptr == contents)
- return isdevice = false;
-
- contents = endptr;
- myminor = strtol (++contents, &endptr, 16);
- if (endptr == contents)
- return isdevice = false;
-
- contents = endptr;
- mymode = strtol (++contents, &endptr, 16);
- if (endptr == contents)
- return isdevice = false;
-
- if ((mymode & S_IFMT) == S_IFIFO)
- {
- mymajor = _major (FH_FIFO);
- myminor = _minor (FH_FIFO);
- }
-
- major = mymajor;
- minor = myminor;
- mode = mymode;
- return isdevice = true;
-}
-
-/* Check if PATH is a symlink. PATH must be a valid Win32 path name.
-
- If PATH is a symlink, put the value of the symlink--the file to
- which it points--into BUF. The value stored in BUF is not
- necessarily null terminated. BUFLEN is the length of BUF; only up
- to BUFLEN characters will be stored in BUF. BUF may be NULL, in
- which case nothing will be stored.
-
- Set *SYML if PATH is a symlink.
-
- Set *EXEC if PATH appears to be executable. This is an efficiency
- hack because we sometimes have to open the file anyhow. *EXEC will
- not be set for every executable file.
-
- Return -1 on error, 0 if PATH is not a symlink, or the length
- stored into BUF if PATH is a symlink. */
-
-int
-symlink_info::check (char *path, const suffix_info *suffixes, fs_info &fs,
- path_conv_handle &conv_hdl)
-{
- int res;
- HANDLE h;
- NTSTATUS status;
- UNICODE_STRING upath;
- OBJECT_ATTRIBUTES attr;
- IO_STATUS_BLOCK io;
- suffix_scan suffix;
-
- const ULONG ci_flag = cygwin_shared->obcaseinsensitive
- || (pflags & PATH_NOPOSIX) ? OBJ_CASE_INSENSITIVE : 0;
- /* TODO: Temporarily do all char->UNICODE conversion here. This should
- already be slightly faster than using Ascii functions. */
- tmp_pathbuf tp;
- tp.u_get (&upath);
- InitializeObjectAttributes (&attr, &upath, ci_flag, NULL, NULL);
-
- /* This label is used in case we encounter a FS which only handles
- DOS paths. See below. */
- bool restarted = false;
-restart:
-
- h = NULL;
- res = 0;
- contents[0] = '\0';
- issymlink = true;
- isdevice = false;
- major = 0;
- minor = 0;
- mode = 0;
- pflags &= ~(PATH_SYMLINK | PATH_LNK | PATH_REP);
-
- PVOID eabuf = &nfs_aol_ffei;
- ULONG easize = sizeof nfs_aol_ffei;
-
- ext_here = suffix.has (path, suffixes);
- extn = ext_here - path;
- bool had_ext = !!*ext_here;
-
- /* If the filename is too long, don't even try. */
- if (suffix.name_len () > NAME_MAX)
- {
- set_error (ENAMETOOLONG);
- goto file_not_symlink;
- }
-
- while (suffix.next ())
- {
- error = 0;
- get_nt_native_path (suffix.path, upath, pflags & PATH_DOS);
- if (h)
- {
- NtClose (h);
- h = NULL;
- }
- /* The EA given to NtCreateFile allows to get a handle to a symlink on
- an NFS share, rather than getting a handle to the target of the
- symlink (which would spoil the task of this method quite a bit).
- Fortunately it's ignored on most other file systems so we don't have
- to special case NFS too much. */
- status = NtCreateFile (&h,
- READ_CONTROL | FILE_READ_ATTRIBUTES | FILE_READ_EA,
- &attr, &io, NULL, 0, FILE_SHARE_VALID_FLAGS,
- FILE_OPEN,
- FILE_OPEN_REPARSE_POINT
- | FILE_OPEN_FOR_BACKUP_INTENT,
- eabuf, easize);
- debug_printf ("%y = NtCreateFile (%S)", status, &upath);
- /* No right to access EAs or EAs not supported? */
- if (!NT_SUCCESS (status)
- && (status == STATUS_ACCESS_DENIED
- || status == STATUS_EAS_NOT_SUPPORTED
- || status == STATUS_NOT_SUPPORTED
- || status == STATUS_INVALID_NETWORK_RESPONSE
- /* Or a bug in Samba 3.2.x (x <= 7) when accessing a share's
- root dir which has EAs enabled? */
- || status == STATUS_INVALID_PARAMETER))
- {
- /* If EAs are not supported, there's no sense to check them again
- with suffixes attached. So we set eabuf/easize to 0 here once. */
- if (status == STATUS_EAS_NOT_SUPPORTED
- || status == STATUS_NOT_SUPPORTED)
- {
- eabuf = NULL;
- easize = 0;
- }
- status = NtOpenFile (&h, READ_CONTROL | FILE_READ_ATTRIBUTES,
- &attr, &io, FILE_SHARE_VALID_FLAGS,
- FILE_OPEN_REPARSE_POINT
- | FILE_OPEN_FOR_BACKUP_INTENT);
- debug_printf ("%y = NtOpenFile (no-EAs %S)", status, &upath);
- }
- if (status == STATUS_OBJECT_NAME_NOT_FOUND)
- {
- if (ci_flag == 0 && wincap.has_broken_udf ()
- && (!fs.inited () || fs.is_udf ()))
- {
- /* On NT 5.x UDF is broken (at least) in terms of case
- sensitivity. When trying to open a file case sensitive,
- the file appears to be non-existant. Another bug is
- described in fs_info::update. */
- attr.Attributes = OBJ_CASE_INSENSITIVE;
- status = NtOpenFile (&h, READ_CONTROL | FILE_READ_ATTRIBUTES,
- &attr, &io, FILE_SHARE_VALID_FLAGS,
- FILE_OPEN_REPARSE_POINT
- | FILE_OPEN_FOR_BACKUP_INTENT);
- debug_printf ("%y = NtOpenFile (broken-UDF, %S)", status, &upath);
- attr.Attributes = 0;
- if (NT_SUCCESS (status))
- {
- if (!fs.inited ())
- fs.update (&upath, h);
- if (!fs.is_udf ())
- {
- NtClose (h);
- h = NULL;
- status = STATUS_OBJECT_NAME_NOT_FOUND;
- }
- }
- }
- /* There are filesystems out in the wild (Netapp, NWFS, and others)
- which are uncapable of generating pathnames outside the Win32
- rules. That means, filenames on these FSes must not have a
- leading space or trailing dots and spaces. This code snippet
- manages them. I really hope it's streamlined enough not to
- slow down normal operation. This extra check only kicks in if
- we encountered a STATUS_OBJECT_NAME_NOT_FOUND *and* we didn't
- already attach a suffix *and* the above special case for UDF
- on XP didn't succeeed. */
- if (!restarted && !*ext_here && !(pflags & PATH_DOS) && !fs.inited ())
- {
- /* Check for trailing dot or space or leading space in
- last component. */
- char *p = ext_here - 1;
- if (*p != '.' && *p != ' ')
- {
- while (*--p != '\\')
- ;
- if (*++p != ' ')
- p = NULL;
- }
- if (p)
- {
- /* If so, check if file resides on one of the known broken
- FSes only supporting filenames following DOS rules. */
- if (!fs.inited ())
- fs.update (&upath, NULL);
- if (fs.has_dos_filenames_only ())
- {
- /* If so, try again. Since we now know the FS, the
- filenames will be tweaked to follow DOS rules via the
- third parameter in the call to get_nt_native_path. */
- pflags |= PATH_DOS;
- restarted = true;
- goto restart;
- }
- }
- }
- }
- else if (status == STATUS_NETWORK_OPEN_RESTRICTION
- || status == STATUS_SYMLINK_CLASS_DISABLED)
- {
- /* These status codes are returned if you try to open a native
- symlink and the usage of this kind of symlink is forbidden
- (see fsutil). Since we can't open them at all, not even for
- stat purposes, we have to return a POSIX error code which is
- at least a bit helpful.
-
- Additionally Windows 8 introduces a bug in NFS: If you have
- a symlink to a directory, with symlinks underneath, resolving
- the second level of symlinks fails if remote->remote symlinks
- are disabled in fsutil. Unfortunately that's the default. */
- set_error (ELOOP);
- break;
- }
-
- if (NT_SUCCESS (status)
- /* Check file system while we're having the file open anyway.
- This speeds up path_conv noticably (~10%). */
- && (fs.inited () || fs.update (&upath, h)))
- {
- if (fs.is_nfs ())
- {
- status = nfs_fetch_fattr3 (h, conv_hdl.nfsattr ());
- if (NT_SUCCESS (status))
- fileattr = ((conv_hdl.nfsattr ()->type & 7) == NF3DIR)
- ? FILE_ATTRIBUTE_DIRECTORY : 0;
- }
- else
- {
- status = file_get_fnoi (h, fs.is_netapp (), conv_hdl.fnoi ());
- if (NT_SUCCESS (status))
- fileattr = conv_hdl.fnoi ()->FileAttributes;
- }
- }
- if (!NT_SUCCESS (status))
- {
- debug_printf ("%y = NtQueryInformationFile (%S)", status, &upath);
- fileattr = INVALID_FILE_ATTRIBUTES;
-
- /* One of the inner path components is invalid, or the path contains
- invalid characters. Bail out with ENOENT.
-
- Note that additional STATUS_OBJECT_PATH_INVALID and
- STATUS_OBJECT_PATH_SYNTAX_BAD status codes exist. The first one
- is seemingly not generated by NtQueryInformationFile, the latter
- is only generated if the path is no absolute path within the
- NT name space, which should not happen and would point to an
- error in get_nt_native_path. Both status codes are deliberately
- not tested here unless proved necessary. */
- if (status == STATUS_OBJECT_PATH_NOT_FOUND
- || status == STATUS_OBJECT_NAME_INVALID
- || status == STATUS_BAD_NETWORK_PATH
- || status == STATUS_BAD_NETWORK_NAME
- || status == STATUS_NO_MEDIA_IN_DEVICE)
- {
- set_error (ENOENT);
- goto file_not_symlink;
- }
- if (status != STATUS_OBJECT_NAME_NOT_FOUND
- && status != STATUS_NO_SUCH_FILE) /* ENOENT on NFS or 9x share */
- {
- /* The file exists, but the user can't access it for one reason
- or the other. To get the file attributes we try to access the
- information by opening the parent directory and getting the
- file attributes using a matching NtQueryDirectoryFile call. */
- UNICODE_STRING dirname, basename;
- OBJECT_ATTRIBUTES dattr;
- HANDLE dir;
- struct {
- FILE_BOTH_DIR_INFORMATION fdi;
- WCHAR dummy_buf[NAME_MAX + 1];
- } fdi_buf;
-
- RtlSplitUnicodePath (&upath, &dirname, &basename);
- InitializeObjectAttributes (&dattr, &dirname, ci_flag,
- NULL, NULL);
- status = NtOpenFile (&dir, SYNCHRONIZE | FILE_LIST_DIRECTORY,
- &dattr, &io, FILE_SHARE_VALID_FLAGS,
- FILE_SYNCHRONOUS_IO_NONALERT
- | FILE_OPEN_FOR_BACKUP_INTENT
- | FILE_DIRECTORY_FILE);
- if (!NT_SUCCESS (status))
- {
- debug_printf ("%y = NtOpenFile(%S)", status, &dirname);
- /* There's a special case if the file is itself the root
- of a drive which is not accessible by the current user.
- This case is only recognized by the length of the
- basename part. If it's 0, the incoming file is the
- root of a drive. So we at least know it's a directory. */
- if (basename.Length)
- fileattr = FILE_ATTRIBUTE_DIRECTORY;
- else
- {
- fileattr = 0;
- set_error (geterrno_from_nt_status (status));
- }
- }
- else
- {
- status = NtQueryDirectoryFile (dir, NULL, NULL, NULL, &io,
- &fdi_buf, sizeof fdi_buf,
- FileBothDirectoryInformation,
- TRUE, &basename, TRUE);
- /* Take the opportunity to check file system while we're
- having the handle to the parent dir. */
- fs.update (&upath, dir);
- NtClose (dir);
- if (!NT_SUCCESS (status))
- {
- debug_printf ("%y = NtQueryDirectoryFile(%S)",
- status, &dirname);
- if (status == STATUS_NO_SUCH_FILE)
- {
- /* This can happen when trying to access files
- which match DOS device names on SMB shares.
- NtOpenFile failed with STATUS_ACCESS_DENIED,
- but the NtQueryDirectoryFile tells us the
- file doesn't exist. We're suspicious in this
- case and retry with the next suffix instead of
- just giving up. */
- set_error (ENOENT);
- continue;
- }
- fileattr = 0;
- }
- else
- {
- PFILE_NETWORK_OPEN_INFORMATION pfnoi = conv_hdl.fnoi ();
-
- fileattr = fdi_buf.fdi.FileAttributes;
- memcpy (pfnoi, &fdi_buf.fdi.CreationTime, sizeof *pfnoi);
- /* Amazing, but true: The FILE_NETWORK_OPEN_INFORMATION
- structure has the AllocationSize and EndOfFile members
- interchanged relative to the directory information
- classes. */
- pfnoi->AllocationSize.QuadPart
- = fdi_buf.fdi.AllocationSize.QuadPart;
- pfnoi->EndOfFile.QuadPart
- = fdi_buf.fdi.EndOfFile.QuadPart;
- }
- }
- ext_tacked_on = !!*ext_here;
- goto file_not_symlink;
- }
- set_error (ENOENT);
- continue;
- }
-
- ext_tacked_on = !!*ext_here;
- /* Don't allow to returns directories with appended suffix. If we found
- a directory with a suffix which has been appended here, then this
- directory doesn't match the request. So, just do as usual if file
- hasn't been found. */
- if (ext_tacked_on && !had_ext && (fileattr & FILE_ATTRIBUTE_DIRECTORY))
- {
- set_error (ENOENT);
- continue;
- }
-
- res = -1;
-
- /* Reparse points are potentially symlinks. This check must be
- performed before checking the SYSTEM attribute for sysfile
- symlinks, since reparse points can have this flag set, too.
- For instance, Vista starts to create a couple of reparse points
- with SYSTEM and HIDDEN flags set. */
- if ((fileattr & FILE_ATTRIBUTE_REPARSE_POINT))
- {
- res = check_reparse_point (h, fs.is_remote_drive ());
- if (res > 0)
- {
- /* A symlink is never a directory. */
- conv_hdl.fnoi ()->FileAttributes &= ~FILE_ATTRIBUTE_DIRECTORY;
- break;
- }
- else
- {
- /* Volume moint point or unrecognized reparse point type.
- Make sure the open handle is not used in later stat calls.
- The handle has been opened with the FILE_OPEN_REPARSE_POINT
- flag, so it's a handle to the reparse point, not a handle
- to the volumes root dir. */
- pflags &= ~PC_KEEP_HANDLE;
- /* Volume mount point: The filesystem information for the top
- level directory should be for the volume top level directory,
- rather than for the reparse point itself. So we fetch the
- filesystem information again, but with a NULL handle.
- This does what we want because fs_info::update opens the
- handle without FILE_OPEN_REPARSE_POINT. */
- if (res == -1)
- fs.update (&upath, NULL);
- }
- }
-
- /* Windows shortcuts are potentially treated as symlinks. Valid Cygwin
- & U/WIN shortcuts are R/O, but definitely not directories. */
- else if ((fileattr & (FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_DIRECTORY))
- == FILE_ATTRIBUTE_READONLY && suffix.lnk_match ())
- {
- HANDLE sym_h;
-
- status = NtOpenFile (&sym_h, SYNCHRONIZE | GENERIC_READ, &attr, &io,
- FILE_SHARE_VALID_FLAGS,
- FILE_OPEN_FOR_BACKUP_INTENT
- | FILE_SYNCHRONOUS_IO_NONALERT);
- if (!NT_SUCCESS (status))
- res = 0;
- else
- {
- res = check_shortcut (sym_h);
- NtClose (sym_h);
- }
- if (!res)
- {
- /* If searching for `foo' and then finding a `foo.lnk' which
- is no shortcut, return the same as if file not found. */
- if (ext_tacked_on)
- {
- fileattr = INVALID_FILE_ATTRIBUTES;
- set_error (ENOENT);
- continue;
- }
- }
- else if (contents[0] != ':' || contents[1] != '\\'
- || !parse_device (contents))
- break;
- }
-
- /* If searching for `foo' and then finding a `foo.lnk' which is
- no shortcut, return the same as if file not found. */
- else if (suffix.lnk_match () && ext_tacked_on)
- {
- fileattr = INVALID_FILE_ATTRIBUTES;
- set_error (ENOENT);
- continue;
- }
-
- /* This is the old Cygwin method creating symlinks. A symlink will
- have the `system' file attribute. Only files can be symlinks
- (which can be symlinks to directories). */
- else if ((fileattr & (FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_DIRECTORY))
- == FILE_ATTRIBUTE_SYSTEM)
- {
- HANDLE sym_h;
-
- status = NtOpenFile (&sym_h, SYNCHRONIZE | GENERIC_READ, &attr, &io,
- FILE_SHARE_VALID_FLAGS,
- FILE_OPEN_FOR_BACKUP_INTENT
- | FILE_SYNCHRONOUS_IO_NONALERT);
-
- if (!NT_SUCCESS (status))
- res = 0;
- else
- {
- res = check_sysfile (sym_h);
- NtClose (sym_h);
- }
- if (res)
- break;
- }
-
- /* If the file is on an NFS share and could be opened with extended
- attributes, check if it's a symlink. Only files can be symlinks
- (which can be symlinks to directories). */
- else if (fs.is_nfs () && (conv_hdl.nfsattr ()->type & 7) == NF3LNK)
- {
- res = check_nfs_symlink (h);
- if (res)
- break;
- }
-
- /* Normal file. */
- file_not_symlink:
- issymlink = false;
- syscall_printf ("%s", isdevice ? "is a device" : "not a symlink");
- res = 0;
- break;
- }
-
- if (h)
- {
- if (pflags & PC_KEEP_HANDLE)
- conv_hdl.set (h);
- else
- NtClose (h);
- }
-
- syscall_printf ("%d = symlink.check(%s, %p) (%y)",
- res, suffix.path, contents, pflags);
- return res;
-}
-
-/* "path" is the path in a virtual symlink. Set a symlink_info struct from
- that and proceed with further path checking afterwards. */
-int
-symlink_info::set (char *path)
-{
- strcpy (contents, path);
- pflags = PATH_SYMLINK;
- fileattr = FILE_ATTRIBUTE_NORMAL;
- error = 0;
- issymlink = true;
- isdevice = false;
- ext_tacked_on = false;
- ext_here = NULL;
- extn = major = minor = mode = 0;
- return strlen (path);
-}
-
-/* readlink system call */
-
-extern "C" ssize_t
-readlink (const char *__restrict path, char *__restrict buf, size_t buflen)
-{
- if (buflen < 0)
- {
- set_errno (ENAMETOOLONG);
- return -1;
- }
-
- path_conv pathbuf (path, PC_SYM_CONTENTS, stat_suffixes);
-
- if (pathbuf.error)
- {
- set_errno (pathbuf.error);
- syscall_printf ("-1 = readlink (%s, %p, %lu)", path, buf, buflen);
- return -1;
- }
-
- if (!pathbuf.exists ())
- {
- set_errno (ENOENT);
- return -1;
- }
-
- if (!pathbuf.issymlink ())
- {
- if (pathbuf.exists ())
- set_errno (EINVAL);
- return -1;
- }
-
- size_t pathbuf_len = strlen (pathbuf.get_win32 ());
- ssize_t len = MIN (buflen, pathbuf_len);
- memcpy (buf, pathbuf.get_win32 (), len);
-
- /* errno set by symlink.check if error */
- return len;
-}
-
-/* Some programs rely on st_dev/st_ino being unique for each file.
- Hash the path name and hope for the best. The hash arg is not
- always initialized to zero since readdir needs to compute the
- dirent ino_t based on a combination of the hash of the directory
- done during the opendir call and the hash or the filename within
- the directory. FIXME: Not bullet-proof. */
-/* Cygwin internal */
-ino_t __reg2
-hash_path_name (ino_t hash, PUNICODE_STRING name)
-{
- if (name->Length == 0)
- return hash;
-
- /* Build up hash. Name is already normalized */
- USHORT len = name->Length / sizeof (WCHAR);
- for (USHORT idx = 0; idx < len; ++idx)
- hash = RtlUpcaseUnicodeChar (name->Buffer[idx])
- + (hash << 6) + (hash << 16) - hash;
- return hash;
-}
-
-ino_t __reg2
-hash_path_name (ino_t hash, PCWSTR name)
-{
- UNICODE_STRING uname;
- RtlInitUnicodeString (&uname, name);
- return hash_path_name (hash, &uname);
-}
-
-ino_t __reg2
-hash_path_name (ino_t hash, const char *name)
-{
- UNICODE_STRING uname;
- RtlCreateUnicodeStringFromAsciiz (&uname, name);
- ino_t ret = hash_path_name (hash, &uname);
- RtlFreeUnicodeString (&uname);
- return ret;
-}
-
-extern "C" char *
-getcwd (char *buf, size_t ulen)
-{
- char* res = NULL;
-
- __try
- {
- if (ulen == 0 && buf)
- set_errno (EINVAL);
- else
- res = cygheap->cwd.get (buf, 1, 1, ulen);
- }
- __except (EFAULT) {}
- __endtry
- return res;
-}
-
-/* getwd: Legacy. */
-extern "C" char *
-getwd (char *buf)
-{
- return getcwd (buf, PATH_MAX + 1); /*Per SuSv3!*/
-}
-
-extern "C" char *
-get_current_dir_name (void)
-{
- const char *pwd = getenv ("PWD");
- char *cwd = getcwd (NULL, 0);
- struct stat pwdbuf, cwdbuf;
-
- if (pwd && strcmp (pwd, cwd) != 0
- && stat64 (pwd, &pwdbuf) == 0
- && stat64 (cwd, &cwdbuf) == 0
- && pwdbuf.st_dev == cwdbuf.st_dev
- && pwdbuf.st_ino == cwdbuf.st_ino)
- {
- cwd = (char *) realloc (cwd, strlen (pwd) + 1);
- strcpy (cwd, pwd);
- }
-
- return cwd;
-}
-
-/* chdir: POSIX 5.2.1.1 */
-extern "C" int
-chdir (const char *in_dir)
-{
- int res = -1;
-
- __try
- {
- if (!*in_dir)
- {
- set_errno (ENOENT);
- __leave;
- }
-
- syscall_printf ("dir '%s'", in_dir);
-
- /* Convert path. First argument ensures that we don't check for
- NULL/empty/invalid again. */
- path_conv path (PC_NONULLEMPTY, in_dir, PC_SYM_FOLLOW | PC_POSIX);
- if (path.error)
- {
- set_errno (path.error);
- syscall_printf ("-1 = chdir (%s)", in_dir);
- __leave;
- }
-
- const char *posix_cwd = NULL;
- dev_t devn = path.get_device ();
- if (!path.exists ())
- set_errno (ENOENT);
- else if (!path.isdir ())
- set_errno (ENOTDIR);
- else if (!isvirtual_dev (devn))
- {
- /* The sequence chdir("xx"); chdir(".."); must be a noop if xx
- is not a symlink. This is exploited by find.exe.
- The posix_cwd is just path.normalized_path.
- In other cases we let cwd.set obtain the Posix path through
- the mount table. */
- if (!isdrive(path.normalized_path))
- posix_cwd = path.normalized_path;
- res = 0;
- }
- else
- {
- posix_cwd = path.normalized_path;
- res = 0;
- }
-
- if (!res)
- res = cygheap->cwd.set (&path, posix_cwd);
-
- /* Note that we're accessing cwd.posix without a lock here.
- I didn't think it was worth locking just for strace. */
- syscall_printf ("%R = chdir() cygheap->cwd.posix '%s' native '%S'", res,
- cygheap->cwd.get_posix (), path.get_nt_native_path ());
- }
- __except (EFAULT)
- {
- res = -1;
- }
- __endtry
- MALLOC_CHECK;
- return res;
-}
-
-extern "C" int
-fchdir (int fd)
-{
- int res;
- cygheap_fdget cfd (fd);
- if (cfd >= 0)
- res = chdir (cfd->get_name ());
- else
- res = -1;
-
- syscall_printf ("%R = fchdir(%d)", res, fd);
- return res;
-}
-
-/******************** Exported Path Routines *********************/
-
-/* Cover functions to the path conversion routines.
- These are exported to the world as cygwin_foo by cygwin.din. */
-
-#define return_with_errno(x) \
- do {\
- int err = (x);\
- if (!err)\
- return 0;\
- set_errno (err);\
- return -1;\
- } while (0)
-
-extern "C" ssize_t
-cygwin_conv_path (cygwin_conv_path_t what, const void *from, void *to,
- size_t size)
-{
- tmp_pathbuf tp;
- path_conv p;
- size_t lsiz = 0;
- char *buf = NULL;
- PWCHAR path = NULL;
- int error = 0;
- bool relative = !!(what & CCP_RELATIVE);
- what &= CCP_CONVTYPE_MASK;
- int ret = -1;
-
- __try
- {
- if (!from)
- {
- set_errno (EINVAL);
- __leave;
- }
-
- switch (what)
- {
- case CCP_POSIX_TO_WIN_A:
- {
- p.check ((const char *) from,
- PC_POSIX | PC_SYM_FOLLOW | PC_SYM_NOFOLLOW_REP
- | PC_NO_ACCESS_CHECK | PC_NOWARN | (relative ? PC_NOFULL : 0));
- if (p.error)
- {
- set_errno (p.error);
- __leave;
- }
- PUNICODE_STRING up = p.get_nt_native_path ();
- buf = tp.c_get ();
- sys_wcstombs (buf, NT_MAX_PATH,
- up->Buffer, up->Length / sizeof (WCHAR));
- /* Convert native path to standard DOS path. */
- if (!strncmp (buf, "\\??\\", 4))
- {
- buf += 4;
- if (buf[1] != ':') /* native UNC path */
- *(buf += 2) = '\\';
- }
- else if (*buf == '\\')
- {
- /* Device name points to somewhere else in the NT namespace.
- Use GLOBALROOT prefix to convert to Win32 path. */
- char *p = buf + sys_wcstombs (buf, NT_MAX_PATH,
- ro_u_globalroot.Buffer,
- ro_u_globalroot.Length
- / sizeof (WCHAR));
- sys_wcstombs (p, NT_MAX_PATH - (p - buf),
- up->Buffer, up->Length / sizeof (WCHAR));
- }
- lsiz = strlen (buf) + 1;
- /* TODO: Incoming "." is a special case which leads to a trailing
- backslash ".\\" in the Win32 path. That's a result of the
- conversion in normalize_posix_path. This should not occur
- so the below code is just a band-aid. */
- if (relative && !strcmp ((const char *) from, ".")
- && !strcmp (buf, ".\\"))
- {
- lsiz = 2;
- buf[1] = '\0';
- }
- }
- break;
- case CCP_POSIX_TO_WIN_W:
- p.check ((const char *) from,
- PC_POSIX | PC_SYM_FOLLOW | PC_SYM_NOFOLLOW_REP
- | PC_NO_ACCESS_CHECK | PC_NOWARN | (relative ? PC_NOFULL : 0));
- if (p.error)
- {
- set_errno (p.error);
- __leave;
- }
- /* Relative Windows paths are always restricted to MAX_PATH chars. */
- if (relative && !isabspath (p.get_win32 ())
- && sys_mbstowcs (NULL, 0, p.get_win32 ()) > MAX_PATH)
- {
- /* Recreate as absolute path. */
- p.check ((const char *) from, PC_POSIX | PC_SYM_FOLLOW
- | PC_NO_ACCESS_CHECK | PC_NOWARN);
- if (p.error)
- {
- set_errno (p.error);
- __leave;
- }
- }
- lsiz = p.get_wide_win32_path_len () + 1;
- path = p.get_nt_native_path ()->Buffer;
-
- /* Convert native path to standard DOS path. */
- if (!wcsncmp (path, L"\\??\\", 4))
- {
- path[1] = L'\\';
-
- /* Drop long path prefix for short pathnames. Unfortunately there's
- quite a bunch of Win32 functions, especially in user32.dll,
- apparently, which don't grok long path names at all, not even
- in the UNICODE API. */
- if ((path[5] == L':' && lsiz <= MAX_PATH + 4)
- || (!wcsncmp (path + 4, L"UNC\\", 4) && lsiz <= MAX_PATH + 6))
- {
- path += 4;
- lsiz -= 4;
- if (path[1] != L':')
- {
- *(path += 2) = '\\';
- lsiz -= 2;
- }
- }
- }
- else if (*path == L'\\')
- {
- /* Device name points to somewhere else in the NT namespace.
- Use GLOBALROOT prefix to convert to Win32 path. */
- to = (void *) wcpcpy ((wchar_t *) to, ro_u_globalroot.Buffer);
- lsiz += ro_u_globalroot.Length / sizeof (WCHAR);
- }
- /* TODO: Same ".\\" band-aid as in CCP_POSIX_TO_WIN_A case. */
- if (relative && !strcmp ((const char *) from, ".")
- && !wcscmp (path, L".\\"))
- {
- lsiz = 2;
- path[1] = L'\0';
- }
- lsiz *= sizeof (WCHAR);
- break;
- case CCP_WIN_A_TO_POSIX:
- buf = tp.c_get ();
- error = mount_table->conv_to_posix_path ((const char *) from, buf,
- relative);
- if (error)
- {
- set_errno (p.error);
- __leave;
- }
- lsiz = strlen (buf) + 1;
- break;
- case CCP_WIN_W_TO_POSIX:
- buf = tp.c_get ();
- error = mount_table->conv_to_posix_path ((const PWCHAR) from, buf,
- relative);
- if (error)
- {
- set_errno (error);
- __leave;
- }
- lsiz = strlen (buf) + 1;
- break;
- default:
- set_errno (EINVAL);
- __leave;
- }
- if (!size)
- {
- ret = lsiz;
- __leave;
- }
- if (size < lsiz)
- {
- set_errno (ENOSPC);
- __leave;
- }
- switch (what)
- {
- case CCP_POSIX_TO_WIN_A:
- case CCP_WIN_A_TO_POSIX:
- case CCP_WIN_W_TO_POSIX:
- stpcpy ((char *) to, buf);
- break;
- case CCP_POSIX_TO_WIN_W:
- wcpcpy ((PWCHAR) to, path);
- break;
- }
- ret = 0;
- }
- __except (EFAULT) {}
- __endtry
- return ret;
-}
-
-extern "C" void *
-cygwin_create_path (cygwin_conv_path_t what, const void *from)
-{
- void *to;
- ssize_t size = cygwin_conv_path (what, from, NULL, 0);
- if (size <= 0)
- to = NULL;
- else if (!(to = malloc (size)))
- to = NULL;
- if (cygwin_conv_path (what, from, to, size) == -1)
- {
- free (to);
- to = NULL;
- }
- return to;
-}
-
-#ifndef __x86_64__ /* Disable deprecated functions on x86_64. */
-
-extern "C" int
-cygwin_conv_to_win32_path (const char *path, char *win32_path)
-{
- return cygwin_conv_path (CCP_POSIX_TO_WIN_A | CCP_RELATIVE, path, win32_path,
- MAX_PATH);
-}
-
-extern "C" int
-cygwin_conv_to_full_win32_path (const char *path, char *win32_path)
-{
- return cygwin_conv_path (CCP_POSIX_TO_WIN_A | CCP_ABSOLUTE, path, win32_path,
- MAX_PATH);
-}
-
-/* This is exported to the world as cygwin_foo by cygwin.din. */
-
-extern "C" int
-cygwin_conv_to_posix_path (const char *path, char *posix_path)
-{
- return cygwin_conv_path (CCP_WIN_A_TO_POSIX | CCP_RELATIVE, path, posix_path,
- MAX_PATH);
-}
-
-extern "C" int
-cygwin_conv_to_full_posix_path (const char *path, char *posix_path)
-{
- return cygwin_conv_path (CCP_WIN_A_TO_POSIX | CCP_ABSOLUTE, path, posix_path,
- MAX_PATH);
-}
-
-#endif /* !__x86_64__ */
-
-/* The realpath function is required by POSIX:2008. */
-
-extern "C" char *
-realpath (const char *__restrict path, char *__restrict resolved)
-{
- tmp_pathbuf tp;
- char *tpath;
-
- /* Make sure the right errno is returned if path is NULL. */
- if (!path)
- {
- set_errno (EINVAL);
- return NULL;
- }
-
- /* Guard reading from a potentially invalid path and writing to a
- potentially invalid resolved. */
- __try
- {
- /* Win32 drive letter paths have to be converted to a POSIX path first,
- because path_conv leaves the incoming path untouched except for
- converting backslashes to forward slashes. */
- if (isdrive (path))
- {
- tpath = tp.c_get ();
- mount_table->conv_to_posix_path (path, tpath, 0);
- }
- else
- tpath = (char *) path;
-
- path_conv real_path (tpath, PC_SYM_FOLLOW | PC_POSIX, stat_suffixes);
-
-
- /* POSIX 2008 requires malloc'ing if resolved is NULL, and states
- that using non-NULL resolved is asking for portability
- problems. */
-
- if (!real_path.error && real_path.exists ())
- {
- if (!resolved)
- {
- resolved = (char *)
- malloc (strlen (real_path.normalized_path) + 1);
- if (!resolved)
- return NULL;
- }
- strcpy (resolved, real_path.normalized_path);
- return resolved;
- }
-
- /* FIXME: on error, Linux puts the name of the path
- component which could not be resolved into RESOLVED, but POSIX
- does not require this. */
- if (resolved)
- resolved[0] = '\0';
- set_errno (real_path.error ?: ENOENT);
- }
- __except (EFAULT) {}
- __endtry
- return NULL;
-}
-
-/* Linux provides this extension. Since the only portable use of
- realpath requires a NULL second argument, we might as well have a
- one-argument wrapper. */
-extern "C" char *
-canonicalize_file_name (const char *path)
-{
- return realpath (path, NULL);
-}
-
-/* Return non-zero if path is a POSIX path list.
- This is exported to the world as cygwin_foo by cygwin.din.
-
-DOCTOOL-START
-<sect1 id="add-func-cygwin-posix-path-list-p">
- <para>Rather than use a mode to say what the "proper" path list
- format is, we allow any, and give apps the tools they need to
- convert between the two. If a ';' is present in the path list it's
- a Win32 path list. Otherwise, if the first path begins with
- [letter]: (in which case it can be the only element since if it
- wasn't a ';' would be present) it's a Win32 path list. Otherwise,
- it's a POSIX path list.</para>
-</sect1>
-DOCTOOL-END
- */
-
-extern "C" int
-cygwin_posix_path_list_p (const char *path)
-{
- int posix_p = !(strchr (path, ';') || isdrive (path));
- return posix_p;
-}
-
-/* These are used for apps that need to convert env vars like PATH back and
- forth. The conversion is a two step process. First, an upper bound on the
- size of the buffer needed is computed. Then the conversion is done. This
- allows the caller to use alloca if it wants. */
-
-static int
-conv_path_list_buf_size (const char *path_list, bool to_posix)
-{
- int i, num_elms, max_mount_path_len, size;
- const char *p;
-
- path_conv pc(".", PC_POSIX);
- /* The theory is that an upper bound is
- current_size + (num_elms * max_mount_path_len) */
- /* FIXME: This method is questionable in the long run. */
-
- unsigned nrel;
- char delim = to_posix ? ';' : ':';
- for (p = path_list, num_elms = nrel = 0; p; num_elms++)
- {
- if (!isabspath (p))
- nrel++;
- p = strchr (++p, delim);
- }
-
- /* 7: strlen ("//c") + slop, a conservative initial value */
- for (max_mount_path_len = sizeof ("/cygdrive/X"), i = 0;
- i < mount_table->nmounts; i++)
- {
- int mount_len = (to_posix
- ? mount_table->mount[i].posix_pathlen
- : mount_table->mount[i].native_pathlen);
- if (max_mount_path_len < mount_len)
- max_mount_path_len = mount_len;
- }
-
- /* 100: slop */
- size = strlen (path_list)
- + (num_elms * max_mount_path_len)
- + (nrel * strlen (to_posix ? pc.normalized_path : pc.get_win32 ()))
- + 100;
-
- return size;
-}
-
-extern "C" ssize_t
-env_PATH_to_posix (const void *win32, void *posix, size_t size)
-{
- return_with_errno (conv_path_list ((const char *) win32, (char *) posix,
- size, ENV_CVT));
-}
-
-#ifndef __x86_64__ /* Disable deprecated functions on x86_64. */
-
-extern "C" int
-cygwin_win32_to_posix_path_list_buf_size (const char *path_list)
-{
- return conv_path_list_buf_size (path_list, true);
-}
-
-extern "C" int
-cygwin_posix_to_win32_path_list_buf_size (const char *path_list)
-{
- return conv_path_list_buf_size (path_list, false);
-}
-
-extern "C" int
-cygwin_win32_to_posix_path_list (const char *win32, char *posix)
-{
- return_with_errno (conv_path_list (win32, posix, MAX_PATH,
- CCP_WIN_A_TO_POSIX | CCP_RELATIVE));
-}
-
-extern "C" int
-cygwin_posix_to_win32_path_list (const char *posix, char *win32)
-{
- return_with_errno (conv_path_list (posix, win32, MAX_PATH,
- CCP_POSIX_TO_WIN_A | CCP_RELATIVE));
-}
-
-#endif /* !__x86_64__ */
-
-extern "C" ssize_t
-cygwin_conv_path_list (cygwin_conv_path_t what, const void *from, void *to,
- size_t size)
-{
- int ret;
- char *winp = NULL;
- void *orig_to = NULL;
- tmp_pathbuf tp;
-
- switch (what & CCP_CONVTYPE_MASK)
- {
- case CCP_WIN_W_TO_POSIX:
- if (!sys_wcstombs_alloc (&winp, HEAP_NOTHEAP, (const wchar_t *) from,
- (size_t) -1))
- return -1;
- what = (what & ~CCP_CONVTYPE_MASK) | CCP_WIN_A_TO_POSIX;
- from = (const void *) winp;
- break;
- case CCP_POSIX_TO_WIN_W:
- if (size == 0)
- return conv_path_list_buf_size ((const char *) from, 0)
- * sizeof (WCHAR);
- what = (what & ~CCP_CONVTYPE_MASK) | CCP_POSIX_TO_WIN_A;
- orig_to = to;
- to = (void *) tp.w_get ();
- size = 65536;
- break;
- }
- switch (what & CCP_CONVTYPE_MASK)
- {
- case CCP_WIN_A_TO_POSIX:
- case CCP_POSIX_TO_WIN_A:
- if (size == 0)
- return conv_path_list_buf_size ((const char *) from,
- what == CCP_WIN_A_TO_POSIX);
- ret = conv_path_list ((const char *) from, (char *) to, size, what);
- /* Free winp buffer in case of CCP_WIN_W_TO_POSIX. */
- if (winp)
- free (winp);
- /* Convert to WCHAR in case of CCP_POSIX_TO_WIN_W. */
- if (orig_to)
- sys_mbstowcs ((wchar_t *) orig_to, size / sizeof (WCHAR),
- (const char *) to, (size_t) -1);
- return_with_errno (ret);
- break;
- default:
- break;
- }
- set_errno (EINVAL);
- return -1;
-}
-
-/* cygwin_split_path: Split a path into directory and file name parts.
- Buffers DIR and FILE are assumed to be big enough.
-
- Examples (path -> `dir' / `file'):
- / -> `/' / `'
- "" -> `.' / `'
- . -> `.' / `.' (FIXME: should this be `.' / `'?)
- .. -> `.' / `..' (FIXME: should this be `..' / `'?)
- foo -> `.' / `foo'
- foo/bar -> `foo' / `bar'
- foo/bar/ -> `foo' / `bar'
- /foo -> `/' / `foo'
- /foo/bar -> `/foo' / `bar'
- c: -> `c:/' / `'
- c:/ -> `c:/' / `'
- c:foo -> `c:/' / `foo'
- c:/foo -> `c:/' / `foo'
- */
-
-extern "C" void
-cygwin_split_path (const char *path, char *dir, char *file)
-{
- int dir_started_p = 0;
-
- /* Deal with drives.
- Remember that c:foo <==> c:/foo. */
- if (isdrive (path))
- {
- *dir++ = *path++;
- *dir++ = *path++;
- *dir++ = '/';
- if (!*path)
- {
- *dir = 0;
- *file = 0;
- return;
- }
- if (isdirsep (*path))
- ++path;
- dir_started_p = 1;
- }
-
- /* Determine if there are trailing slashes and "delete" them if present.
- We pretend as if they don't exist. */
- const char *end = path + strlen (path);
- /* path + 1: keep leading slash. */
- while (end > path + 1 && isdirsep (end[-1]))
- --end;
-
- /* At this point, END points to one beyond the last character
- (with trailing slashes "deleted"). */
-
- /* Point LAST_SLASH at the last slash (duh...). */
- const char *last_slash;
- for (last_slash = end - 1; last_slash >= path; --last_slash)
- if (isdirsep (*last_slash))
- break;
-
- if (last_slash == path)
- {
- *dir++ = '/';
- *dir = 0;
- }
- else if (last_slash > path)
- {
- memcpy (dir, path, last_slash - path);
- dir[last_slash - path] = 0;
- }
- else
- {
- if (dir_started_p)
- ; /* nothing to do */
- else
- *dir++ = '.';
- *dir = 0;
- }
-
- memcpy (file, last_slash + 1, end - last_slash - 1);
- file[end - last_slash - 1] = 0;
-}
-
-static inline void
-copy_cwd_str (PUNICODE_STRING tgt, PUNICODE_STRING src)
-{
- RtlCopyUnicodeString (tgt, src);
- if (tgt->Buffer[tgt->Length / sizeof (WCHAR) - 1] != L'\\')
- {
- tgt->Buffer[tgt->Length / sizeof (WCHAR)] = L'\\';
- tgt->Length += sizeof (WCHAR);
- }
-}
-
-/*****************************************************************************/
-
-/* The find_fast_cwd_pointer function and parts of the
- cwdstuff::override_win32_cwd method are based on code using the
- following license:
-
- Copyright 2010 John Carey. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- 1. Redistributions of source code must retain the above
- copyright notice, this list of conditions and the following
- disclaimer.
-
- 2. Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY JOHN CAREY ``AS IS'' AND ANY EXPRESS
- OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL JOHN CAREY OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
- OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
- USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
- DAMAGE. */
-
-void
-fcwd_access_t::SetFSCharacteristics (LONG val)
-{
- /* Special case FSCharacteristics. Didn't exist originally. */
- switch (fast_cwd_version ())
- {
- case FCWD_OLD:
- break;
- case FCWD_W7:
- f7.FSCharacteristics = val;
- break;
- case FCWD_W8:
- f8.FSCharacteristics = val;
- break;
- }
-}
-
-fcwd_version_t &
-fcwd_access_t::fast_cwd_version ()
-{
- return cygheap->cwd.fast_cwd_version;
-}
-
-void
-fcwd_access_t::CopyPath (UNICODE_STRING &target)
-{
- /* Copy the Path contents over into the UNICODE_STRING referenced by
- target. This is used to set the CurrentDirectoryName in the
- user parameter block. */
- target = Path ();
-}
-
-void
-fcwd_access_t::Free (PVOID heap)
-{
- /* Decrement the reference count. If it's down to 0, free
- structure from heap. */
- if (this && InterlockedDecrement (&ReferenceCount ()) == 0)
- {
- /* In contrast to pre-Vista, the handle on init is always a
- fresh one and not the handle inherited from the parent
- process. So we always have to close it here. However, the
- handle could be NULL, if we cd'ed into a virtual dir. */
- HANDLE h = DirectoryHandle ();
- if (h)
- NtClose (h);
- RtlFreeHeap (heap, 0, this);
- }
-}
-
-void
-fcwd_access_t::FillIn (HANDLE dir, PUNICODE_STRING name,
- ULONG old_dismount_count)
-{
- /* Fill in all values into this FAST_CWD structure. */
- DirectoryHandle () = dir;
- ReferenceCount () = 1;
- OldDismountCount () = old_dismount_count;
- /* The new structure stores the device characteristics of the
- volume holding the dir. RtlGetCurrentDirectory_U checks
- if the FILE_REMOVABLE_MEDIA flag is set and, if so, checks if
- the volume is still the same as the one used when opening
- the directory handle.
- We don't call NtQueryVolumeInformationFile for the \\?\PIPE,
- though. It just returns STATUS_INVALID_HANDLE anyway. */
- if (fast_cwd_version () != FCWD_OLD)
- {
- SetFSCharacteristics (0);
- if (name != &ro_u_pipedir)
- {
- IO_STATUS_BLOCK io;
- FILE_FS_DEVICE_INFORMATION ffdi;
- if (NT_SUCCESS (NtQueryVolumeInformationFile (dir, &io, &ffdi,
- sizeof ffdi, FileFsDeviceInformation)))
- SetFSCharacteristics (ffdi.Characteristics);
- }
- }
- RtlInitEmptyUnicodeString (&Path (), Buffer (),
- MAX_PATH * sizeof (WCHAR));
- copy_cwd_str (&Path (), name);
-}
-
-void
-fcwd_access_t::SetDirHandleFromBufferPointer (PWCHAR buf_p, HANDLE dir)
-{
- /* Input: The buffer pointer as it's stored in the user parameter block
- and a directory handle.
- This function computes the address to the FAST_CWD structure based
- on the version and overwrites the directory handle. It is only
- used if we couldn't figure out the address of fast_cwd_ptr. */
- fcwd_access_t *f_cwd;
- switch (fast_cwd_version ())
- {
- case FCWD_OLD:
- default:
- f_cwd = (fcwd_access_t *)
- ((PBYTE) buf_p - __builtin_offsetof (FAST_CWD_OLD, Buffer));
- case FCWD_W7:
- f_cwd = (fcwd_access_t *)
- ((PBYTE) buf_p - __builtin_offsetof (FAST_CWD_7, Buffer));
- case FCWD_W8:
- f_cwd = (fcwd_access_t *)
- ((PBYTE) buf_p - __builtin_offsetof (FAST_CWD_8, Buffer));
- }
- f_cwd->DirectoryHandle () = dir;
-}
-
-void
-fcwd_access_t::SetVersionFromPointer (PBYTE buf_p, bool is_buffer)
-{
- /* Given a pointer to the FAST_CWD structure (is_buffer == false) or a
- pointer to the Buffer within (is_buffer == true), this function
- computes the FAST_CWD version by checking that Path.MaximumLength
- equals MAX_PATH, and that Path.Buffer == Buffer. */
- if (is_buffer)
- buf_p -= __builtin_offsetof (FAST_CWD_8, Buffer);
- fcwd_access_t *f_cwd = (fcwd_access_t *) buf_p;
- if (f_cwd->f8.Path.MaximumLength == MAX_PATH * sizeof (WCHAR)
- && f_cwd->f8.Path.Buffer == f_cwd->f8.Buffer)
- fast_cwd_version () = FCWD_W8;
- else if (f_cwd->f7.Path.MaximumLength == MAX_PATH * sizeof (WCHAR)
- && f_cwd->f7.Path.Buffer == f_cwd->f7.Buffer)
- fast_cwd_version () = FCWD_W7;
- else
- fast_cwd_version () = FCWD_OLD;
-}
-
-/* This function scans the code in ntdll.dll to find the address of the
- global variable used to access the CWD starting with Vista. While the
- pointer is global, it's not exported from the DLL, unfortunately.
- Therefore we have to use some knowledge to figure out the address.
-
- This code has been tested on Vista 32/64 bit, Server 2008 32/64 bit,
- Windows 7 32/64 bit, Server 2008 R2 (which is only 64 bit anyway),
- Windows 8 32/64 bit, Windows 8.1 32/64 bit, and Server 2012 R2. */
-
-#ifdef __x86_64__
-
-#define peek32(x) (*(int32_t *)(x))
-
-static fcwd_access_t **
-find_fast_cwd_pointer ()
-{
- /* Fetch entry points of relevant functions in ntdll.dll. */
- HMODULE ntdll = GetModuleHandle ("ntdll.dll");
- if (!ntdll)
- return NULL;
- const uint8_t *get_dir = (const uint8_t *)
- GetProcAddress (ntdll, "RtlGetCurrentDirectory_U");
- const uint8_t *ent_crit = (const uint8_t *)
- GetProcAddress (ntdll, "RtlEnterCriticalSection");
- if (!get_dir || !ent_crit)
- return NULL;
- /* Search first relative call instruction in RtlGetCurrentDirectory_U. */
- const uint8_t *rcall = (const uint8_t *) memchr (get_dir, 0xe8, 40);
- if (!rcall)
- return NULL;
- /* Fetch offset from instruction and compute address of called function.
- This function actually fetches the current FAST_CWD instance and
- performs some other actions, not important to us. */
- const uint8_t *use_cwd = rcall + 5 + peek32 (rcall + 1);
- /* Next we search for the locking mechanism and perform a sanity check.
- On Pre-Windows 8 we basically look for the RtlEnterCriticalSection call.
- Windows 8 does not call RtlEnterCriticalSection. The code manipulates
- the FastPebLock manually, probably because RtlEnterCriticalSection has
- been converted to an inline function. Either way, we test if the code
- uses the FastPebLock. */
- const uint8_t *movrbx;
- const uint8_t *lock = (const uint8_t *)
- memmem ((const char *) use_cwd, 80,
- "\xf0\x0f\xba\x35", 4);
- if (lock)
- {
- /* The lock instruction tweaks the LockCount member, which is not at
- the start of the PRTL_CRITICAL_SECTION structure. So we have to
- subtract the offset of LockCount to get the real address. */
- PRTL_CRITICAL_SECTION lockaddr =
- (PRTL_CRITICAL_SECTION) (lock + 9 + peek32 (lock + 4)
- - offsetof (RTL_CRITICAL_SECTION, LockCount));
- /* Test if lock address is FastPebLock. */
- if (lockaddr != NtCurrentTeb ()->Peb->FastPebLock)
- return NULL;
- /* Search `mov rel(%rip),%rbx'. This is the instruction fetching the
- address of the current fcwd_access_t pointer, and it should be pretty
- near to the locking stuff. */
- movrbx = (const uint8_t *) memmem ((const char *) lock, 40,
- "\x48\x8b\x1d", 3);
- }
- else
- {
- /* Usually the callq RtlEnterCriticalSection follows right after
- fetching the lock address. */
- int call_rtl_offset = 7;
- /* Search `lea rel(%rip),%rcx'. This loads the address of the lock into
- %rcx for the subsequent RtlEnterCriticalSection call. */
- lock = (const uint8_t *) memmem ((const char *) use_cwd, 80,
- "\x48\x8d\x0d", 3);
- if (!lock)
- {
- /* Windows 8.1 Preview calls `lea rel(rip),%r12' then some unrelated
- or, then `mov %r12,%rcx', then `callq RtlEnterCriticalSection'. */
- lock = (const uint8_t *) memmem ((const char *) use_cwd, 80,
- "\x4c\x8d\x25", 3);
- if (!lock)
- return NULL;
- call_rtl_offset = 14;
- }
- PRTL_CRITICAL_SECTION lockaddr =
- (PRTL_CRITICAL_SECTION) (lock + 7 + peek32 (lock + 3));
- /* Test if lock address is FastPebLock. */
- if (lockaddr != NtCurrentTeb ()->Peb->FastPebLock)
- return NULL;
- /* Next is the `callq RtlEnterCriticalSection'. */
- lock += call_rtl_offset;
- if (lock[0] != 0xe8)
- return NULL;
- const uint8_t *call_addr = (const uint8_t *)
- (lock + 5 + peek32 (lock + 1));
- if (call_addr != ent_crit)
- return NULL;
- /* In contrast to the above Windows 8 code, we don't have to search
- for the `mov rel(%rip),%rbx' instruction. It follows right after
- the call to RtlEnterCriticalSection. */
- movrbx = lock + 5;
- }
- if (!movrbx)
- return NULL;
- /* Check that the next instruction tests if the fetched value is NULL. */
- const uint8_t *testrbx = (const uint8_t *)
- memmem (movrbx + 7, 3, "\x48\x85\xdb", 3);
- if (!testrbx)
- return NULL;
- /* Compute address of the fcwd_access_t ** pointer. */
- return (fcwd_access_t **) (testrbx + peek32 (movrbx + 3));
-}
-#else
-
-#define peek32(x) (*(uint32_t *)(x))
-
-static fcwd_access_t **
-find_fast_cwd_pointer ()
-{
- /* Fetch entry points of relevant functions in ntdll.dll. */
- HMODULE ntdll = GetModuleHandle ("ntdll.dll");
- if (!ntdll)
- return NULL;
- const uint8_t *get_dir = (const uint8_t *)
- GetProcAddress (ntdll, "RtlGetCurrentDirectory_U");
- const uint8_t *ent_crit = (const uint8_t *)
- GetProcAddress (ntdll, "RtlEnterCriticalSection");
- if (!get_dir || !ent_crit)
- return NULL;
- /* Search first relative call instruction in RtlGetCurrentDirectory_U. */
- const uint8_t *rcall = (const uint8_t *) memchr (get_dir, 0xe8, 32);
- if (!rcall)
- return NULL;
- /* Fetch offset from instruction and compute address of called function.
- This function actually fetches the current FAST_CWD instance and
- performs some other actions, not important to us. */
- ptrdiff_t offset = (ptrdiff_t) peek32 (rcall + 1);
- const uint8_t *use_cwd = rcall + 5 + offset;
- /* Find first `push %edi' instruction. */
- const uint8_t *pushedi = (const uint8_t *) memchr (use_cwd, 0x57, 32);
- /* ...which should be followed by `mov crit-sect-addr,%edi' then
- `push %edi', or by just a single `push crit-sect-addr'. */
- const uint8_t *movedi = pushedi + 1;
- const uint8_t *mov_pfast_cwd;
- if (movedi[0] == 0x8b && movedi[1] == 0xff) /* mov %edi,%edi -> W8 */
- {
- /* Windows 8 does not call RtlEnterCriticalSection. The code manipulates
- the FastPebLock manually, probably because RtlEnterCriticalSection has
- been converted to an inline function.
-
- Next we search for a `mov some address,%eax'. This address points
- to the LockCount member of the FastPebLock structure, so the address
- is equal to FastPebLock + 4. */
- const uint8_t *moveax = (const uint8_t *) memchr (movedi, 0xb8, 16);
- if (!moveax)
- return NULL;
- offset = (ptrdiff_t) peek32 (moveax + 1) - 4;
- /* Compare the address with the known PEB lock as stored in the PEB. */
- if ((PRTL_CRITICAL_SECTION) offset != NtCurrentTeb ()->Peb->FastPebLock)
- return NULL;
- /* Now search for the mov instruction fetching the address of the global
- PFAST_CWD *. */
- mov_pfast_cwd = moveax;
- do
- {
- mov_pfast_cwd = (const uint8_t *) memchr (++mov_pfast_cwd, 0x8b, 48);
- }
- while (mov_pfast_cwd && mov_pfast_cwd[1] != 0x1d
- && (mov_pfast_cwd - moveax) < 48);
- if (!mov_pfast_cwd || mov_pfast_cwd[1] != 0x1d)
- return NULL;
- }
- else
- {
- if (movedi[0] == 0xbf && movedi[5] == 0x57)
- rcall = movedi + 6;
- else if (movedi[0] == 0x68)
- rcall = movedi + 5;
- else if (movedi[0] == 0x88 && movedi[4] == 0x83 && movedi[7] == 0x68)
- {
- /* Windows 8.1 Preview: The `mov lock_addr,%edi' is actually a
- `mov %cl,15(%esp), followed by an `or #-1,%ebx, followed by a
- `push lock_addr'. */
- movedi += 7;
- rcall = movedi + 5;
- }
- else
- return NULL;
- /* Compare the address used for the critical section with the known
- PEB lock as stored in the PEB. */
- if ((PRTL_CRITICAL_SECTION) peek32 (movedi + 1)
- != NtCurrentTeb ()->Peb->FastPebLock)
- return NULL;
- /* To check we are seeing the right code, we check our expectation that
- the next instruction is a relative call into RtlEnterCriticalSection. */
- if (rcall[0] != 0xe8)
- return NULL;
- /* Check that this is a relative call to RtlEnterCriticalSection. */
- offset = (ptrdiff_t) peek32 (rcall + 1);
- if (rcall + 5 + offset != ent_crit)
- return NULL;
- mov_pfast_cwd = rcall + 5;
- }
- /* After locking the critical section, the code should read the global
- PFAST_CWD * pointer that is guarded by that critical section. */
- if (mov_pfast_cwd[0] != 0x8b)
- return NULL;
- return (fcwd_access_t **) peek32 (mov_pfast_cwd + 2);
-}
-#endif
-
-static fcwd_access_t **
-find_fast_cwd ()
-{
- /* Fetch the pointer but don't set the global fast_cwd_ptr yet. First
- we have to make sure we know the version of the FAST_CWD structure
- used on the system. */
- fcwd_access_t **f_cwd_ptr = find_fast_cwd_pointer ();
- if (!f_cwd_ptr)
- small_printf ("Cygwin WARNING:\n"
-" Couldn't compute FAST_CWD pointer. This typically occurs if you're using\n"
-" an older Cygwin version on a newer Windows. Please update to the latest\n"
-" available Cygwin version from https://cygwin.com/. If the problem persists,\n"
-" please see https://cygwin.com/problems.html\n\n");
- if (f_cwd_ptr && *f_cwd_ptr)
- {
- /* Just evaluate structure version. */
- fcwd_access_t::SetVersionFromPointer ((PBYTE) *f_cwd_ptr, false);
- }
- else
- {
- /* If we couldn't fetch fast_cwd_ptr, or if fast_cwd_ptr is NULL(*)
- we have to figure out the version from the Buffer pointer in the
- ProcessParameters.
-
- (*) This is very unlikely to happen when starting the first
- Cygwin process, since it only happens when starting the
- process in a directory which can't be used as CWD by Win32, or
- if the directory doesn't exist. But *if* it happens, we have
- no valid FAST_CWD structure, even though upp_cwd_str.Buffer is
- not NULL in that case. So we let the OS create a valid
- FAST_CWD structure temporarily to have something to work with.
- We know the pipe FS works. */
- PEB &peb = *NtCurrentTeb ()->Peb;
-
- if (f_cwd_ptr /* so *f_cwd_ptr == NULL */
- && !NT_SUCCESS (RtlSetCurrentDirectory_U (&ro_u_pipedir)))
- api_fatal ("Couldn't set directory to %S temporarily.\n"
- "Cannot continue.", &ro_u_pipedir);
- RtlEnterCriticalSection (peb.FastPebLock);
- fcwd_access_t::SetVersionFromPointer
- ((PBYTE) peb.ProcessParameters->CurrentDirectoryName.Buffer, true);
- RtlLeaveCriticalSection (peb.FastPebLock);
- }
- /* Eventually, after we set the version as well, set fast_cwd_ptr. */
- return f_cwd_ptr;
-}
-
-void
-cwdstuff::override_win32_cwd (bool init, ULONG old_dismount_count)
-{
- HANDLE h = NULL;
-
- PEB &peb = *NtCurrentTeb ()->Peb;
- UNICODE_STRING &upp_cwd_str = peb.ProcessParameters->CurrentDirectoryName;
- HANDLE &upp_cwd_hdl = peb.ProcessParameters->CurrentDirectoryHandle;
-
- if (wincap.has_fast_cwd ())
- {
- if (fast_cwd_ptr == (fcwd_access_t **) -1)
- fast_cwd_ptr = find_fast_cwd ();
- if (fast_cwd_ptr)
- {
- /* Default method starting with Vista. If we got a valid value for
- fast_cwd_ptr, we can simply replace the RtlSetCurrentDirectory_U
- function entirely, just as on pre-Vista. */
- PVOID heap = peb.ProcessHeap;
- /* First allocate a new fcwd_access_t structure on the heap.
- The new fcwd_access_t structure is 4 byte bigger than the old one,
- but we simply don't care, so we allocate always room for the
- new one. */
- fcwd_access_t *f_cwd = (fcwd_access_t *)
- RtlAllocateHeap (heap, 0, sizeof (fcwd_access_t));
- if (!f_cwd)
- {
- debug_printf ("RtlAllocateHeap failed");
- return;
- }
- /* Fill in the values. */
- f_cwd->FillIn (dir, error ? &ro_u_pipedir : &win32,
- old_dismount_count);
- /* Use PEB lock when switching fast_cwd_ptr to the new FAST_CWD
- structure and writing the CWD to the user process parameter
- block. This is equivalent to calling RtlAcquirePebLock/
- RtlReleasePebLock, but without having to go through the FS
- selector again. */
- RtlEnterCriticalSection (peb.FastPebLock);
- fcwd_access_t *old_cwd = *fast_cwd_ptr;
- *fast_cwd_ptr = f_cwd;
- f_cwd->CopyPath (upp_cwd_str);
- upp_cwd_hdl = dir;
- RtlLeaveCriticalSection (peb.FastPebLock);
- old_cwd->Free (heap);
- }
- else
- {
- /* This is more a hack, and it's only used on Vista and later if we
- failed to find the fast_cwd_ptr value. What we do here is to call
- RtlSetCurrentDirectory_U and let it set up a new FAST_CWD
- structure. Afterwards, compute the address of that structure
- utilizing the fact that the buffer address in the user process
- parameter block is actually pointing to the buffer in that
- FAST_CWD structure. Then replace the directory handle in that
- structure with our own handle and close the original one.
-
- Note that the call to RtlSetCurrentDirectory_U also closes our
- old dir handle, so there won't be any handle left open.
-
- This method is prone to two race conditions:
-
- - Due to the way RtlSetCurrentDirectory_U opens the directory
- handle, the directory is locked against deletion or renaming
- between the RtlSetCurrentDirectory_U and the subsequent NtClose
- call.
-
- - When another thread calls SetCurrentDirectory at exactly the
- same time, a crash might occur, or worse, unrelated data could
- be overwritten or NtClose could be called on an unrelated handle.
-
- Therefore, use this *only* as a fallback. */
- if (!init)
- {
- NTSTATUS status =
- RtlSetCurrentDirectory_U (error ? &ro_u_pipedir : &win32);
- if (!NT_SUCCESS (status))
- {
- debug_printf ("RtlSetCurrentDirectory_U(%S) failed, %y",
- error ? &ro_u_pipedir : &win32, status);
- return;
- }
- }
- else if (upp_cwd_hdl == NULL)
- return;
- RtlEnterCriticalSection (peb.FastPebLock);
- fcwd_access_t::SetDirHandleFromBufferPointer(upp_cwd_str.Buffer, dir);
- h = upp_cwd_hdl;
- upp_cwd_hdl = dir;
- RtlLeaveCriticalSection (peb.FastPebLock);
- /* In contrast to pre-Vista, the handle on init is always a fresh one
- and not the handle inherited from the parent process. So we always
- have to close it here. */
- NtClose (h);
- }
- }
- else
- {
- /* This method is used for all pre-Vista OSes. We simply set the values
- for the CWD in the user process parameter block entirely by ourselves
- under PEB lock condition. This is how RtlSetCurrentDirectory_U worked
- in these older OSes, so we're safe.
-
- Note that we can't just RtlEnterCriticalSection (peb.FastPebLock)
- on pre-Vista. RtlAcquirePebLock was way more complicated back then. */
- RtlAcquirePebLock ();
- if (!init)
- copy_cwd_str (&upp_cwd_str, error ? &ro_u_pipedir : &win32);
- h = upp_cwd_hdl;
- upp_cwd_hdl = dir;
- RtlReleasePebLock ();
- /* Only on init, the handle is potentially a native handle. However,
- if it's identical to dir, it's the inherited handle from a Cygwin
- parent process and must not be closed. */
- if (h && h != dir)
- NtClose (h);
- }
-}
-
-/* Initialize cygcwd 'muto' for serializing access to cwd info. */
-void
-cwdstuff::init ()
-{
- cwd_lock.init ("cwd_lock");
-
- /* Cygwin processes inherit the cwd from their parent. If the win32 path
- buffer is not NULL, the cwd struct is already set up, and we only
- have to override the Win32 CWD with ours. */
- if (win32.Buffer)
- override_win32_cwd (true, SharedUserData.DismountCount);
- else
- {
- /* Initialize fast_cwd stuff. */
- fast_cwd_ptr = (fcwd_access_t **) -1;
- fast_cwd_version = FCWD_W7;
- /* Initially re-open the cwd to allow POSIX semantics. */
- set (NULL, NULL);
- }
-}
-
-/* Chdir and fill out the elements of a cwdstuff struct. */
-int
-cwdstuff::set (path_conv *nat_cwd, const char *posix_cwd)
-{
- NTSTATUS status;
- UNICODE_STRING upath;
- PEB &peb = *NtCurrentTeb ()->Peb;
- bool virtual_path = false;
- bool unc_path = false;
- bool inaccessible_path = false;
-
- /* Here are the problems with using SetCurrentDirectory. Just skip this
- comment if you don't like whining.
-
- - SetCurrentDirectory only supports paths of up to MAX_PATH - 1 chars,
- including a trailing backslash. That's an absolute restriction, even
- in the UNICODE API.
-
- - SetCurrentDirectory fails for directories with strict permissions even
- for processes with the SE_BACKUP_NAME privilege enabled. The reason
- is apparently that SetCurrentDirectory calls NtOpenFile without the
- FILE_OPEN_FOR_BACKUP_INTENT flag set.
-
- - SetCurrentDirectory does not support case-sensitivity.
-
- - Unlinking a cwd fails because SetCurrentDirectory seems to open
- directories so that deleting the directory is disallowed.
-
- - SetCurrentDirectory can naturally not work on virtual Cygwin paths
- like /proc or /cygdrive.
-
- Unfortunately, even though we have access to the Win32 process parameter
- block, we can't just replace the directory handle. Starting with Vista,
- the handle is used elsewhere, and just replacing the handle in the process
- parameter block shows quite surprising results.
- FIXME: If we ever find a *safe* way to replace the directory handle in
- the process parameter block, we're back in business.
-
- Nevertheless, doing entirely without SetCurrentDirectory is not really
- feasible, because it breaks too many mixed applications using the Win32
- API.
-
- Therefore we handle the CWD all by ourselves and just keep the Win32
- CWD in sync. However, to avoid surprising behaviour in the Win32 API
- when we are in a CWD which is inaccessible as Win32 CWD, we set the
- Win32 CWD to a "weird" directory in which all relative filesystem-related
- calls fail. */
-
- cwd_lock.acquire ();
-
- if (nat_cwd)
- {
- upath = *nat_cwd->get_nt_native_path ();
- if (nat_cwd->isspecial ())
- virtual_path = true;
- }
-
- /* Memorize old DismountCount before opening the dir. This value is
- stored in the FAST_CWD structure on Vista and later. It would be
- simpler to fetch the old DismountCount in override_win32_cwd, but
- Windows also fetches it before opening the directory handle. It's
- not quite clear if that's really required, but since we don't know
- the side effects of this action, we better follow Windows' lead. */
- ULONG old_dismount_count = SharedUserData.DismountCount;
- /* Open a directory handle with FILE_OPEN_FOR_BACKUP_INTENT and with all
- sharing flags set. The handle is right now used in exceptions.cc only,
- but that might change in future. */
- HANDLE h = NULL;
- if (!virtual_path)
- {
- IO_STATUS_BLOCK io;
- OBJECT_ATTRIBUTES attr;
-
- if (!nat_cwd)
- {
- /* On init, just reopen Win32 CWD with desired access flags.
- We can access the PEB without lock, because no other thread
- can change the CWD. */
- RtlInitUnicodeString (&upath, L"");
- InitializeObjectAttributes (&attr, &upath,
- OBJ_CASE_INSENSITIVE | OBJ_INHERIT,
- peb.ProcessParameters->CurrentDirectoryHandle, NULL);
- }
- else
- InitializeObjectAttributes (&attr, &upath,
- nat_cwd->objcaseinsensitive () | OBJ_INHERIT,
- NULL, NULL);
- /* First try without FILE_OPEN_FOR_BACKUP_INTENT, to find out if the
- directory is valid for Win32 apps. And, no, we can't just call
- SetCurrentDirectory here, since that would potentially break
- case-sensitivity. */
- status = NtOpenFile (&h, SYNCHRONIZE | FILE_TRAVERSE, &attr, &io,
- FILE_SHARE_VALID_FLAGS,
- FILE_DIRECTORY_FILE
- | FILE_SYNCHRONOUS_IO_NONALERT);
- if (status == STATUS_ACCESS_DENIED)
- {
- status = NtOpenFile (&h, SYNCHRONIZE | FILE_TRAVERSE, &attr, &io,
- FILE_SHARE_VALID_FLAGS,
- FILE_DIRECTORY_FILE
- | FILE_SYNCHRONOUS_IO_NONALERT
- | FILE_OPEN_FOR_BACKUP_INTENT);
- inaccessible_path = true;
- }
- if (!NT_SUCCESS (status))
- {
- cwd_lock.release ();
- __seterrno_from_nt_status (status);
- return -1;
- }
- }
- /* Set new handle. Note that we simply overwrite the old handle here
- without closing it. The handle is also used as Win32 CWD handle in
- the user parameter block, and it will be closed in override_win32_cwd,
- if required. */
- dir = h;
-
- if (!nat_cwd)
- {
- /* On init, just fetch the Win32 dir from the PEB. We can access
- the PEB without lock, because no other thread can change the CWD
- at that time. */
- PUNICODE_STRING pdir = &peb.ProcessParameters->CurrentDirectoryName;
- RtlInitEmptyUnicodeString (&win32,
- (PWCHAR) crealloc_abort (win32.Buffer,
- pdir->Length
- + sizeof (WCHAR)),
- pdir->Length + sizeof (WCHAR));
- RtlCopyUnicodeString (&win32, pdir);
-
- PWSTR eoBuffer = win32.Buffer + (win32.Length / sizeof (WCHAR));
- /* Remove trailing slash if one exists. */
- if ((eoBuffer - win32.Buffer) > 3 && eoBuffer[-1] == L'\\')
- win32.Length -= sizeof (WCHAR);
- if (eoBuffer[0] == L'\\')
- unc_path = true;
-
- posix_cwd = NULL;
- }
- else
- {
- if (!virtual_path) /* don't mangle virtual path. */
- {
- /* Convert into Win32 path and compute length. */
- if (upath.Buffer[1] == L'?')
- {
- upath.Buffer += 4;
- upath.Length -= 4 * sizeof (WCHAR);
- if (upath.Buffer[1] != L':')
- {
- /* UNC path */
- upath.Buffer += 2;
- upath.Length -= 2 * sizeof (WCHAR);
- unc_path = true;
- }
- }
- else
- {
- /* Path via native NT namespace. Prepend GLOBALROOT prefix
- to create a valid Win32 path. */
- PWCHAR buf = (PWCHAR) alloca (upath.Length
- + ro_u_globalroot.Length
- + sizeof (WCHAR));
- wcpcpy (wcpcpy (buf, ro_u_globalroot.Buffer), upath.Buffer);
- upath.Buffer = buf;
- upath.Length += ro_u_globalroot.Length;
- }
- PWSTR eoBuffer = upath.Buffer + (upath.Length / sizeof (WCHAR));
- /* Remove trailing slash if one exists. */
- if ((eoBuffer - upath.Buffer) > 3 && eoBuffer[-1] == L'\\')
- upath.Length -= sizeof (WCHAR);
- }
- RtlInitEmptyUnicodeString (&win32,
- (PWCHAR) crealloc_abort (win32.Buffer,
- upath.Length
- + sizeof (WCHAR)),
- upath.Length + sizeof (WCHAR));
- RtlCopyUnicodeString (&win32, &upath);
- if (unc_path)
- win32.Buffer[0] = L'\\';
- }
- /* Make sure it's NUL-terminated. */
- win32.Buffer[win32.Length / sizeof (WCHAR)] = L'\0';
-
- /* Set drive_length, used in path conversion, and error code, used in
- spawn_guts to decide whether a native Win32 app can be started or not. */
- if (virtual_path)
- {
- drive_length = 0;
- error = ENOTDIR;
- }
- else
- {
- if (!unc_path)
- drive_length = 2;
- else
- {
- PWCHAR ptr = wcschr (win32.Buffer + 2, L'\\');
- if (ptr)
- ptr = wcschr (ptr + 1, L'\\');
- if (ptr)
- drive_length = ptr - win32.Buffer;
- else
- drive_length = win32.Length / sizeof (WCHAR);
- }
- if (inaccessible_path)
- error = EACCES;
- else if (win32.Length > (MAX_PATH - 2) * sizeof (WCHAR))
- error = ENAMETOOLONG;
- else
- error = 0;
- }
- /* Keep the Win32 CWD in sync. Don't check for error, other than for
- strace output. Try to keep overhead low. */
- override_win32_cwd (!nat_cwd, old_dismount_count);
-
- /* Eventually, create POSIX path if it's not set on entry. */
- tmp_pathbuf tp;
- if (!posix_cwd)
- {
- posix_cwd = (const char *) tp.c_get ();
- mount_table->conv_to_posix_path (win32.Buffer, (char *) posix_cwd, 0);
- }
- posix = (char *) crealloc_abort (posix, strlen (posix_cwd) + 1);
- stpcpy (posix, posix_cwd);
-
- cwd_lock.release ();
- return 0;
-}
-
-const char *
-cwdstuff::get_error_desc () const
-{
- switch (cygheap->cwd.get_error ())
- {
- case EACCES:
- return "has restricted permissions which render it\n"
- "inaccessible as Win32 working directory";
- case ENOTDIR:
- return "is a virtual Cygwin directory which does\n"
- "not exist for a native Windows application";
- case ENAMETOOLONG:
- return "has a path longer than allowed for a\n"
- "Win32 working directory";
- default:
- break;
- }
- /* That shouldn't occur, unless we defined a new error code
- in cwdstuff::set. */
- return "is not accessible for some unknown reason";
-}
-
-/* Store incoming wchar_t path as current posix cwd. This is called from
- setlocale so that the cwd is always stored in the right charset. */
-void
-cwdstuff::reset_posix (wchar_t *w_cwd)
-{
- size_t len = sys_wcstombs (NULL, (size_t) -1, w_cwd);
- posix = (char *) crealloc_abort (posix, len + 1);
- sys_wcstombs (posix, len + 1, w_cwd);
-}
-
-char *
-cwdstuff::get (char *buf, int need_posix, int with_chroot, unsigned ulen)
-{
- MALLOC_CHECK;
-
- tmp_pathbuf tp;
- if (ulen)
- /* nothing */;
- else if (buf == NULL)
- ulen = (unsigned) -1;
- else
- {
- set_errno (EINVAL);
- goto out;
- }
-
- cwd_lock.acquire ();
-
- char *tocopy;
- if (!need_posix)
- {
- tocopy = tp.c_get ();
- sys_wcstombs (tocopy, NT_MAX_PATH, win32.Buffer,
- win32.Length / sizeof (WCHAR));
- }
- else
- tocopy = posix;
-
- debug_printf ("posix %s", posix);
- if (strlen (tocopy) >= ulen)
- {
- set_errno (ERANGE);
- buf = NULL;
- }
- else
- {
- if (!buf)
- buf = (char *) malloc (strlen (tocopy) + 1);
- strcpy (buf, tocopy);
- if (!buf[0]) /* Should only happen when chroot */
- strcpy (buf, "/");
- }
-
- cwd_lock.release ();
-
-out:
- syscall_printf ("(%s) = cwdstuff::get (%p, %u, %d, %d), errno %d",
- buf, buf, ulen, need_posix, with_chroot, errno);
- MALLOC_CHECK;
- return buf;
-}
-
-/* No need to be reentrant or thread-safe according to SUSv3.
- / and \\ are treated equally. Leading drive specifiers are
- kept intact as far as it makes sense. Everything else is
- POSIX compatible. */
-extern "C" char *
-basename (char *path)
-{
- static char buf[4];
- char *c, *d, *bs = path;
-
- if (!path || !*path)
- return strcpy (buf, ".");
- if (isalpha (path[0]) && path[1] == ':')
- bs += 2;
- else if (strspn (path, "/\\") > 1)
- ++bs;
- c = strrchr (bs, '/');
- if ((d = strrchr (c ?: bs, '\\')) > c)
- c = d;
- if (c)
- {
- /* Trailing (back)slashes are eliminated. */
- while (c && c > bs && c[1] == '\0')
- {
- *c = '\0';
- c = strrchr (bs, '/');
- if ((d = strrchr (c ?: bs, '\\')) > c)
- c = d;
- }
- if (c && (c > bs || c[1]))
- return c + 1;
- }
- else if (!bs[0])
- {
- stpncpy (buf, path, bs - path);
- stpcpy (buf + (bs - path), ".");
- return buf;
- }
- return path;
-}
-
-/* No need to be reentrant or thread-safe according to SUSv3.
- / and \\ are treated equally. Leading drive specifiers and
- leading double (back)slashes are kept intact as far as it
- makes sense. Everything else is POSIX compatible. */
-extern "C" char *
-dirname (char *path)
-{
- static char buf[4];
- char *c, *d, *bs = path;
-
- if (!path || !*path)
- return strcpy (buf, ".");
- if (isalpha (path[0]) && path[1] == ':')
- bs += 2;
- else if (strspn (path, "/\\") > 1)
- ++bs;
- c = strrchr (bs, '/');
- if ((d = strrchr (c ?: bs, '\\')) > c)
- c = d;
- if (c)
- {
- /* Trailing (back)slashes are eliminated. */
- while (c && c > bs && c[1] == '\0')
- {
- *c = '\0';
- c = strrchr (bs, '/');
- if ((d = strrchr (c ?: bs, '\\')) > c)
- c = d;
- }
- if (!c)
- strcpy (bs, ".");
- else if (c > bs)
- {
- /* More trailing (back)slashes are eliminated. */
- while (c > bs && (*c == '/' || *c == '\\'))
- *c-- = '\0';
- }
- else
- c[1] = '\0';
- }
- else
- {
- stpncpy (buf, path, bs - path);
- stpcpy (buf + (bs - path), ".");
- return buf;
- }
- return path;
-}
diff --git a/winsup/cygwin/path.h b/winsup/cygwin/path.h
deleted file mode 100644
index 8d4525890..000000000
--- a/winsup/cygwin/path.h
+++ /dev/null
@@ -1,451 +0,0 @@
-/* path.h: path data structures
-
- Copyright 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
- 2008, 2009, 2010, 2011, 2012, 2013 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "devices.h"
-#include "mount.h"
-#include "cygheap_malloc.h"
-#include "nfs.h"
-
-#include <sys/ioctl.h>
-#include <fcntl.h>
-#include <alloca.h>
-
-extern inline bool
-has_attribute (DWORD attributes, DWORD attribs_to_test)
-{
- return attributes != INVALID_FILE_ATTRIBUTES
- && (attributes & attribs_to_test);
-}
-
-enum executable_states
-{
- is_executable,
- dont_care_if_executable,
- not_executable = dont_care_if_executable,
- dont_know_if_executable
-};
-
-struct suffix_info
-{
- const char *name;
- int addon;
- suffix_info (const char *s, int addit = 0): name (s), addon (addit) {}
-};
-
-extern suffix_info stat_suffixes[];
-
-enum pathconv_arg
-{
- PC_SYM_FOLLOW = 0x0001,
- PC_SYM_NOFOLLOW = 0x0002,
- PC_SYM_NOFOLLOW_REP = 0x0004,
- PC_SYM_CONTENTS = 0x0008,
- PC_NOFULL = 0x0010,
- PC_NULLEMPTY = 0x0020,
- PC_POSIX = 0x0080,
- PC_NOWARN = 0x0100,
- PC_OPEN = 0x0200, /* use open semantics */
- PC_CTTY = 0x0400, /* could later be used as ctty */
- PC_KEEP_HANDLE = 0x00400000,
- PC_NO_ACCESS_CHECK = 0x00800000
-};
-
-#define PC_NONULLEMPTY -1
-
-#include "sys/mount.h"
-
-enum path_types
-{
- PATH_NOTHING = 0,
- PATH_SYMLINK = MOUNT_SYMLINK,
- PATH_BINARY = MOUNT_BINARY,
- PATH_EXEC = MOUNT_EXEC,
- PATH_NOTEXEC = MOUNT_NOTEXEC,
- PATH_CYGWIN_EXEC = MOUNT_CYGWIN_EXEC,
- PATH_SPARSE = MOUNT_SPARSE,
- PATH_RO = MOUNT_RO,
- PATH_NOACL = MOUNT_NOACL,
- PATH_NOPOSIX = MOUNT_NOPOSIX,
- PATH_DOS = MOUNT_DOS,
- PATH_IHASH = MOUNT_IHASH,
- PATH_ALL_EXEC = (PATH_CYGWIN_EXEC | PATH_EXEC),
- PATH_NO_ACCESS_CHECK = PC_NO_ACCESS_CHECK,
- PATH_CTTY = 0x00400000, /* could later be used as ctty */
- PATH_OPEN = 0x00800000, /* use open semantics */
- /* FIXME? PATH_OPEN collides with
- PATH_NO_ACCESS_CHECK, but it looks
- like they are never used together. */
- PATH_LNK = 0x01000000,
- PATH_TEXT = 0x02000000,
- PATH_REP = 0x04000000,
- PATH_HAS_SYMLINKS = 0x10000000,
- PATH_SOCKET = 0x40000000
-};
-
-class symlink_info;
-struct _FILE_NETWORK_OPEN_INFORMATION;
-
-class path_conv_handle
-{
- HANDLE hdl;
- union {
- /* Identical to FILE_NETWORK_OPEN_INFORMATION. We don't want to pull in
- ntdll.h here, though. */
- struct {
- LARGE_INTEGER CreationTime;
- LARGE_INTEGER LastAccessTime;
- LARGE_INTEGER LastWriteTime;
- LARGE_INTEGER ChangeTime;
- LARGE_INTEGER AllocationSize;
- LARGE_INTEGER EndOfFile;
- ULONG FileAttributes;
- } _fnoi;
- /* For NFS. */
- fattr3 _fattr3;
- } attribs;
-public:
- path_conv_handle () : hdl (NULL) {}
- inline void set (HANDLE h) { hdl = h; }
- inline void close ()
- {
- if (hdl)
- CloseHandle (hdl);
- set (NULL);
- }
- inline void dup (const path_conv_handle &pch)
- {
- if (!DuplicateHandle (GetCurrentProcess (), pch.handle (),
- GetCurrentProcess (), &hdl,
- 0, TRUE, DUPLICATE_SAME_ACCESS))
- hdl = NULL;
- }
- inline HANDLE handle () const { return hdl; }
- inline struct _FILE_NETWORK_OPEN_INFORMATION *fnoi ()
- { return (struct _FILE_NETWORK_OPEN_INFORMATION *) &attribs._fnoi; }
- inline struct fattr3 *nfsattr ()
- { return (struct fattr3 *) &attribs._fattr3; }
-};
-
-class path_conv
-{
- DWORD fileattr;
- ULONG caseinsensitive;
- fs_info fs;
- PWCHAR wide_path;
- UNICODE_STRING uni_path;
- void add_ext_from_sym (symlink_info&);
- DWORD symlink_length;
- const char *path;
- path_conv_handle conv_handle;
- public:
- unsigned path_flags;
- const char *known_suffix;
- const char *normalized_path;
- int error;
- device dev;
-
- bool isremote () const {return fs.is_remote_drive ();}
- ULONG objcaseinsensitive () const {return caseinsensitive;}
- bool has_acls () const {return !(path_flags & PATH_NOACL) && fs.has_acls (); }
- bool hasgood_inode () const {return !(path_flags & PATH_IHASH); }
- bool isgood_inode (ino_t ino) const;
- bool support_sparse () const
- {
- return (path_flags & PATH_SPARSE)
- && (fs_flags () & FILE_SUPPORTS_SPARSE_FILES);
- }
- int has_symlinks () const {return path_flags & PATH_HAS_SYMLINKS;}
- int has_dos_filenames_only () const {return path_flags & PATH_DOS;}
- int has_buggy_open () const {return fs.has_buggy_open ();}
- int has_buggy_reopen () const {return fs.has_buggy_reopen ();}
- int has_buggy_fileid_dirinfo () const {return fs.has_buggy_fileid_dirinfo ();}
- int has_buggy_basic_info () const {return fs.has_buggy_basic_info ();}
- int binmode () const
- {
- if (path_flags & PATH_BINARY)
- return O_BINARY;
- if (path_flags & PATH_TEXT)
- return O_TEXT;
- return 0;
- }
- int issymlink () const {return path_flags & PATH_SYMLINK;}
- int is_lnk_symlink () const {return path_flags & PATH_LNK;}
- int is_rep_symlink () const {return path_flags & PATH_REP;}
- int isdevice () const {return dev.not_device (FH_FS) && dev.not_device (FH_FIFO);}
- int isfifo () const {return dev.is_device (FH_FIFO);}
- int isspecial () const {return dev.not_device (FH_FS);}
- int iscygdrive () const {return dev.is_device (FH_CYGDRIVE);}
- int is_auto_device () const {return isdevice () && !is_fs_special ();}
- int is_fs_device () const {return isdevice () && is_fs_special ();}
- int is_fs_special () const {return dev.is_fs_special ();}
- int is_lnk_special () const {return is_fs_device () || isfifo () || is_lnk_symlink ();}
- int issocket () const {return dev.is_device (FH_UNIX);}
- int iscygexec () const {return path_flags & PATH_CYGWIN_EXEC;}
- int isopen () const {return path_flags & PATH_OPEN;}
- int isctty_capable () const {return path_flags & PATH_CTTY;}
- void set_cygexec (bool isset)
- {
- if (isset)
- path_flags |= PATH_CYGWIN_EXEC;
- else
- path_flags &= ~PATH_CYGWIN_EXEC;
- }
- void set_cygexec (void *target)
- {
- if (target)
- path_flags |= PATH_CYGWIN_EXEC;
- else
- path_flags &= ~PATH_CYGWIN_EXEC;
- }
- bool isro () const {return !!(path_flags & PATH_RO);}
- bool exists () const {return fileattr != INVALID_FILE_ATTRIBUTES;}
- bool has_attribute (DWORD x) const {return exists () && (fileattr & x);}
- int isdir () const {return has_attribute (FILE_ATTRIBUTE_DIRECTORY);}
- executable_states exec_state ()
- {
- extern int _check_for_executable;
- if (path_flags & PATH_ALL_EXEC)
- return is_executable;
- if (path_flags & PATH_NOTEXEC)
- return not_executable;
- if (!_check_for_executable)
- return dont_care_if_executable;
- return dont_know_if_executable;
- }
-
- void set_symlink (DWORD n) {path_flags |= PATH_SYMLINK; symlink_length = n;}
- void set_has_symlinks () {path_flags |= PATH_HAS_SYMLINKS;}
- void set_exec (int x = 1) {path_flags |= x ? PATH_EXEC : PATH_NOTEXEC;}
-
- void __reg3 check (const UNICODE_STRING *upath, unsigned opt = PC_SYM_FOLLOW,
- const suffix_info *suffixes = NULL);
- void __reg3 check (const char *src, unsigned opt = PC_SYM_FOLLOW,
- const suffix_info *suffixes = NULL);
-
- path_conv (const device& in_dev)
- : fileattr (INVALID_FILE_ATTRIBUTES), wide_path (NULL), path (NULL),
- path_flags (0), known_suffix (NULL), normalized_path (NULL), error (0),
- dev (in_dev)
- {
- set_path (in_dev.native);
- }
-
- path_conv (int, const char *src, unsigned opt = PC_SYM_FOLLOW,
- const suffix_info *suffixes = NULL)
- : fileattr (INVALID_FILE_ATTRIBUTES), wide_path (NULL), path (NULL),
- path_flags (0), known_suffix (NULL), normalized_path (NULL), error (0)
- {
- check (src, opt, suffixes);
- }
-
- path_conv (const UNICODE_STRING *src, unsigned opt = PC_SYM_FOLLOW,
- const suffix_info *suffixes = NULL)
- : fileattr (INVALID_FILE_ATTRIBUTES), wide_path (NULL), path (NULL),
- path_flags (0), known_suffix (NULL), normalized_path (NULL), error (0)
- {
- check (src, opt | PC_NULLEMPTY, suffixes);
- }
-
- path_conv (const char *src, unsigned opt = PC_SYM_FOLLOW,
- const suffix_info *suffixes = NULL)
- : fileattr (INVALID_FILE_ATTRIBUTES), wide_path (NULL), path (NULL),
- path_flags (0), known_suffix (NULL), normalized_path (NULL), error (0)
- {
- check (src, opt | PC_NULLEMPTY, suffixes);
- }
-
- path_conv ()
- : fileattr (INVALID_FILE_ATTRIBUTES), wide_path (NULL), path (NULL),
- path_flags (0), known_suffix (NULL), normalized_path (NULL), error (0)
- {}
-
- ~path_conv ();
- inline const char *get_win32 () { return path; }
- PUNICODE_STRING get_nt_native_path ();
- inline POBJECT_ATTRIBUTES get_object_attr (OBJECT_ATTRIBUTES &attr,
- SECURITY_ATTRIBUTES &sa)
- {
- if (!get_nt_native_path ())
- return NULL;
- InitializeObjectAttributes (&attr, &uni_path,
- objcaseinsensitive ()
- | (sa.bInheritHandle ? OBJ_INHERIT : 0),
- NULL, sa.lpSecurityDescriptor);
- return &attr;
- }
- inline POBJECT_ATTRIBUTES init_reopen_attr (OBJECT_ATTRIBUTES &attr, HANDLE h)
- {
- if (has_buggy_reopen ())
- InitializeObjectAttributes (&attr, get_nt_native_path (),
- objcaseinsensitive (), NULL, NULL)
- else
- InitializeObjectAttributes (&attr, &ro_u_empty, objcaseinsensitive (),
- h, NULL);
- return &attr;
- }
- inline size_t get_wide_win32_path_len ()
- {
- get_nt_native_path ();
- return uni_path.Length / sizeof (WCHAR);
- }
-
- PWCHAR get_wide_win32_path (PWCHAR wc);
- operator DWORD &() {return fileattr;}
- operator int () {return fileattr; }
-# define cfree_and_null(x) \
- if (x) \
- { \
- cfree ((void *) (x)); \
- (x) = NULL; \
- }
- void free_strings ()
- {
- cfree_and_null (path);
- cfree_and_null (normalized_path);
- cfree_and_null (wide_path);
- }
- path_conv& eq_worker (const path_conv& pc, const char *in_path,
- const char *in_normalized_path)
- {
- free_strings ();
- memcpy (this, &pc, sizeof pc);
- path = cstrdup (in_path);
- conv_handle.dup (pc.conv_handle);
- normalized_path = cstrdup(pc.normalized_path);
- if (pc.wide_path)
- {
- wide_path = cwcsdup (uni_path.Buffer);
- if (!wide_path)
- api_fatal ("cwcsdup would have returned NULL");
- uni_path.Buffer = wide_path;
- }
- return *this;
- }
-
- path_conv &operator << (const path_conv& pc)
- {
- const char *save_path;
- const char *save_normalized_path;
- if (!path)
- save_path = pc.path;
- else
- {
- save_path = (char *) alloca (strlen (path) + 1);
- strcpy ((char *) save_path, path);
- }
- if (!normalized_path)
- save_normalized_path = pc.normalized_path;
- else
- {
- save_normalized_path = (char *) alloca (strlen (normalized_path) + 1);
- strcpy ((char *) save_normalized_path, path);
- }
- return eq_worker (pc, save_path, save_normalized_path);
- }
-
- path_conv &operator =(const path_conv& pc)
- {
- return eq_worker (pc, pc.path, pc.normalized_path);
- }
- dev_t get_device () {return dev.get_device ();}
- DWORD file_attributes () const {return fileattr;}
- void file_attributes (DWORD new_attr) {fileattr = new_attr;}
- DWORD fs_flags () const {return fs.flags ();}
- DWORD fs_name_len () const {return fs.name_len ();}
- bool fs_got_fs () const { return fs.got_fs (); }
- bool fs_is_fat () const {return fs.is_fat ();}
- bool fs_is_ntfs () const {return fs.is_ntfs ();}
- bool fs_is_refs () const {return fs.is_refs ();}
- bool fs_is_samba () const {return fs.is_samba ();}
- bool fs_is_nfs () const {return fs.is_nfs ();}
- bool fs_is_netapp () const {return fs.is_netapp ();}
- bool fs_is_cdrom () const {return fs.is_cdrom ();}
- bool fs_is_mvfs () const {return fs.is_mvfs ();}
- bool fs_is_cifs () const {return fs.is_cifs ();}
- bool fs_is_nwfs () const {return fs.is_nwfs ();}
- bool fs_is_ncfsd () const {return fs.is_ncfsd ();}
- bool fs_is_afs () const {return fs.is_afs ();}
- fs_info_type fs_type () const {return fs.what_fs ();}
- ULONG fs_serial_number () const {return fs.serial_number ();}
- inline const char *set_path (const char *p)
- {
- if (path)
- cfree (modifiable_path ());
- char *new_path = (char *) cmalloc_abort (HEAP_STR, strlen (p) + 7);
- strcpy (new_path, p);
- return path = new_path;
- }
- bool is_binary ();
-
- HANDLE handle () const { return conv_handle.handle (); }
- struct _FILE_NETWORK_OPEN_INFORMATION *fnoi () { return conv_handle.fnoi (); }
- struct fattr3 *nfsattr () { return conv_handle.nfsattr (); }
- void reset_conv_handle () { conv_handle.set (NULL); }
- void close_conv_handle () { conv_handle.close (); }
-
- ino_t get_ino_by_handle (HANDLE h);
-#if 0 /* obsolete, method still exists in fhandler_disk_file.cc */
- unsigned __stdcall ndisk_links (DWORD);
-#endif
- void __reg2 set_normalized_path (const char *);
- DWORD get_symlink_length () { return symlink_length; };
- private:
- char *modifiable_path () {return (char *) path;}
-};
-
-/* Symlink marker */
-#define SYMLINK_COOKIE "!<symlink>"
-
-/* Socket marker */
-#define SOCKET_COOKIE "!<socket >"
-
-/* Interix symlink marker */
-#define INTERIX_SYMLINK_COOKIE "IntxLNK\1"
-
-enum fe_types
-{
- FE_NADA = 0, /* Nothing special */
- FE_NNF = 1, /* Return NULL if not found */
- FE_NATIVE = 2, /* Return native path in path_conv struct */
- FE_CWD = 4, /* Search CWD for program */
- FE_DLL = 8 /* Search for DLLs, not executables. */
-};
-const char *__reg3 find_exec (const char *name, path_conv& buf,
- const char *winenv = "PATH=",
- unsigned opt = FE_NADA,
- const char **known_suffix = NULL);
-
-/* Common macros for checking for invalid path names */
-#define isdrive(s) (isalpha (*(s)) && (s)[1] == ':')
-#define iswdrive(s) (iswalpha (*(s)) && (s)[1] == L':')
-
-static inline bool
-has_exec_chars (const char *buf, int len)
-{
- return len >= 2 &&
- ((buf[0] == '#' && buf[1] == '!') ||
- (buf[0] == ':' && buf[1] == '\n') ||
- (buf[0] == 'M' && buf[1] == 'Z'));
-}
-
-int __reg3 pathmatch (const char *path1, const char *path2, bool caseinsensitive);
-int __reg3 pathnmatch (const char *path1, const char *path2, int len, bool caseinsensitive);
-bool __reg2 has_dot_last_component (const char *dir, bool test_dot_dot);
-
-int __reg3 path_prefix_p (const char *path1, const char *path2, int len1,
- bool caseinsensitive);
-
-NTSTATUS file_get_fnoi (HANDLE, bool, struct _FILE_NETWORK_OPEN_INFORMATION *);
-int normalize_win32_path (const char *, char *, char *&);
-int normalize_posix_path (const char *, char *, char *&);
-PUNICODE_STRING __reg3 get_nt_native_path (const char *, UNICODE_STRING&, bool);
-
-int __reg3 symlink_worker (const char *, const char *, bool);
diff --git a/winsup/cygwin/perprocess.h b/winsup/cygwin/perprocess.h
deleted file mode 100644
index 13cf17716..000000000
--- a/winsup/cygwin/perprocess.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/* per_process.h: main Cygwin header file.
-
- Copyright 2000, 2001, 2013 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include <sys/cygwin.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Pointer into application's static data */
-extern struct per_process __cygwin_user_data;
-#define user_data (&__cygwin_user_data)
-
-/* We use the following to test that sizeof hasn't changed. When adding
- or deleting members, insert fillers or use the reserved entries.
- Do not change this value. */
-#ifdef __x86_64__
-#define SIZEOF_PER_PROCESS (41 * 8)
-#else
-#define SIZEOF_PER_PROCESS (42 * 4)
-#endif
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/winsup/cygwin/pinfo.cc b/winsup/cygwin/pinfo.cc
deleted file mode 100644
index 4518d6d51..000000000
--- a/winsup/cygwin/pinfo.cc
+++ /dev/null
@@ -1,1362 +0,0 @@
-/* pinfo.cc: process table support
-
- Copyright 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
- 2008, 2009, 2010, 2011, 2012, 2013, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include "miscfuncs.h"
-#include <stdlib.h>
-#include "cygerrno.h"
-#include "security.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "sigproc.h"
-#include "pinfo.h"
-#include "perprocess.h"
-#include "environ.h"
-#include "ntdll.h"
-#include "shared_info.h"
-#include "cygheap.h"
-#include "cygmalloc.h"
-#include "cygtls.h"
-#include "tls_pbuf.h"
-#include "child_info.h"
-
-class pinfo_basic: public _pinfo
-{
-public:
- pinfo_basic();
-};
-
-pinfo_basic::pinfo_basic ()
-{
- pid = dwProcessId = GetCurrentProcessId ();
- GetModuleFileNameW (NULL, progname, sizeof (progname) / sizeof (WCHAR));
- /* Default uid/gid are needed very early to initialize shared user info. */
- uid = ILLEGAL_UID;
- gid = ILLEGAL_GID;
-}
-
-pinfo_basic myself_initial NO_COPY;
-
-pinfo NO_COPY myself (static_cast<_pinfo *> (&myself_initial)); // Avoid myself != NULL checks
-
-/* Setup the pinfo structure for this process. There may already be a
- _pinfo for this "pid" if h != NULL. */
-
-void
-pinfo::thisproc (HANDLE h)
-{
- procinfo = NULL;
-
- DWORD flags = PID_IN_USE | PID_ACTIVE;
- if (!h)
- {
- h = INVALID_HANDLE_VALUE;
- cygheap->pid = cygwin_pid (myself_initial.pid);
- flags |= PID_NEW;
- }
-
- init (cygheap->pid, flags, h);
- procinfo->process_state |= PID_IN_USE;
- procinfo->dwProcessId = myself_initial.pid;
- procinfo->sendsig = myself_initial.sendsig;
- wcscpy (procinfo->progname, myself_initial.progname);
- debug_printf ("myself dwProcessId %u", procinfo->dwProcessId);
- if (h != INVALID_HANDLE_VALUE)
- {
- /* here if execed */
- static pinfo NO_COPY myself_identity;
- myself_identity.init (cygwin_pid (procinfo->dwProcessId), PID_EXECED, NULL);
- procinfo->exec_sendsig = NULL;
- procinfo->exec_dwProcessId = 0;
- myself_identity->ppid = procinfo->pid;
- }
-}
-
-/* Initialize the process table entry for the current task.
- This is not called for forked tasks, only execed ones. */
-void __stdcall
-pinfo_init (char **envp, int envc)
-{
- if (envp)
- {
- environ_init (envp, envc);
- /* spawn has already set up a pid structure for us so we'll use that */
- myself->process_state |= PID_CYGPARENT;
- }
- else
- {
- /* Invent our own pid. */
-
- myself.thisproc (NULL);
- myself->pgid = myself->sid = myself->pid;
- myself->ctty = -1;
- myself->uid = ILLEGAL_UID;
- myself->gid = ILLEGAL_GID;
- environ_init (NULL, 0); /* call after myself has been set up */
- myself->nice = winprio_to_nice (GetPriorityClass (GetCurrentProcess ()));
- myself->ppid = 1; /* always set last */
- debug_printf ("Set nice to %d", myself->nice);
- }
-
- myself->process_state |= PID_ACTIVE;
- myself->process_state &= ~(PID_INITIALIZING | PID_EXITED | PID_REAPED);
- myself.preserve ();
- debug_printf ("pid %d, pgid %d, process_state %y", myself->pid, myself->pgid, myself->process_state);
-}
-
-DWORD
-pinfo::status_exit (DWORD x)
-{
- switch (x)
- {
- case STATUS_DLL_NOT_FOUND:
- {
- char posix_prog[NT_MAX_PATH];
- path_conv pc;
- if (!procinfo)
- pc.check ("/dev/null");
- else
- {
- UNICODE_STRING uc;
- RtlInitUnicodeString(&uc, procinfo->progname);
- pc.check (&uc, PC_NOWARN);
- }
- mount_table->conv_to_posix_path (pc.get_win32 (), posix_prog, 1);
- small_printf ("%s: error while loading shared libraries: %s: cannot "
- "open shared object file: No such file or directory\n",
- posix_prog, find_first_notloaded_dll (pc));
- x = 127 << 8;
- }
- break;
- case STATUS_ILLEGAL_DLL_PSEUDO_RELOCATION: /* custom error value */
- /* We've already printed the error message in pseudo-reloc.c */
- x = 127 << 8;
- break;
- case STATUS_ACCESS_VIOLATION:
- x = SIGSEGV;
- break;
- case STATUS_ILLEGAL_INSTRUCTION:
- x = SIGILL;
- break;
- case STATUS_NO_MEMORY:
- /* If the PATH environment variable is longer than about 30K and the full
- Windows environment is > 32K, startup of an exec'ed process fails with
- STATUS_NO_MEMORY. This happens with all Cygwin executables, as well
- as, for instance, notepad, but it does not happen with CMD for some
- reason (but note, the environment *in* CMD is broken and shortened).
- This occurs at a point where there's no return to the exec'ing parent
- process, so we have to find some way to inform the user what happened.
-
- FIXME: For now, just return with SIGBUS set. Maybe it's better to add
- a lengthy small_printf instead. */
- x = SIGBUS;
- break;
- default:
- debug_printf ("*** STATUS_%y\n", x);
- x = 127 << 8;
- }
- return EXITCODE_SET | x;
-}
-
-# define self (*this)
-void
-pinfo::set_exit_code (DWORD x)
-{
- if (x >= 0xc0000000UL)
- self->exitcode = status_exit (x);
- else
- self->exitcode = EXITCODE_SET | (sigExeced ?: (x & 0xff) << 8);
-}
-
-void
-pinfo::maybe_set_exit_code_from_windows ()
-{
- DWORD x = 0xdeadbeef;
- DWORD oexitcode = self->exitcode;
-
- if (hProcess && !(self->exitcode & EXITCODE_SET))
- {
- WaitForSingleObject (hProcess, INFINITE); /* just to be safe, in case
- process hasn't quite exited
- after closing pipe */
- GetExitCodeProcess (hProcess, &x);
- set_exit_code (x);
- }
- sigproc_printf ("pid %d, exit value - old %y, windows %y, cygwin %y",
- self->pid, oexitcode, x, self->exitcode);
-}
-
-void
-pinfo::exit (DWORD n)
-{
- debug_only_printf ("winpid %d, exit %d", GetCurrentProcessId (), n);
- proc_terminate ();
- lock_process until_exit (true);
- cygthread::terminate ();
-
- if (n != EXITCODE_NOSET)
- self->exitcode = EXITCODE_SET | n;/* We're really exiting. Record the UNIX exit code. */
- else
- maybe_set_exit_code_from_windows (); /* may block */
- exit_state = ES_FINAL;
-
- if (myself->ctty > 0 && !iscons_dev (myself->ctty))
- {
- lock_ttys here;
- tty *t = cygwin_shared->tty[device::minor(myself->ctty)];
- if (!t->slave_alive ())
- t->setpgid (0);
- }
-
- /* FIXME: There is a potential race between an execed process and its
- parent here. I hated to add a mutex just for that, though. */
- struct rusage r;
- fill_rusage (&r, GetCurrentProcess ());
- add_rusage (&self->rusage_self, &r);
- int exitcode = self->exitcode & 0xffff;
- if (!self->cygstarted)
- exitcode = ((exitcode & 0xff) << 8) | ((exitcode >> 8) & 0xff);
- sigproc_printf ("Calling ExitProcess n %y, exitcode %y", n, exitcode);
- if (!TerminateProcess (GetCurrentProcess (), exitcode))
- system_printf ("TerminateProcess failed, %E");
- ExitProcess (exitcode);
-}
-# undef self
-
-inline void
-pinfo::_pinfo_release ()
-{
- if (procinfo)
- {
- void *unmap_procinfo = procinfo;
- procinfo = NULL;
- UnmapViewOfFile (unmap_procinfo);
- }
- HANDLE close_h;
- if (h)
- {
- close_h = h;
- h = NULL;
- ForceCloseHandle1 (close_h, pinfo_shared_handle);
- }
-}
-
-void
-pinfo::init (pid_t n, DWORD flag, HANDLE h0)
-{
- shared_locations shloc;
- h = NULL;
- if (myself && !(flag & PID_EXECED)
- && (n == myself->pid || (DWORD) n == myself->dwProcessId))
- {
- procinfo = myself;
- destroy = 0;
- return;
- }
-
- int createit = flag & (PID_IN_USE | PID_EXECED);
- DWORD access = FILE_MAP_READ
- | (flag & (PID_IN_USE | PID_EXECED | PID_MAP_RW)
- ? FILE_MAP_WRITE : 0);
- if (!h0 || myself.h)
- shloc = (flag & (PID_IN_USE | PID_EXECED)) ? SH_JUSTCREATE : SH_JUSTOPEN;
- else
- {
- shloc = SH_MYSELF;
- if (h0 == INVALID_HANDLE_VALUE)
- h0 = NULL;
- }
-
- procinfo = NULL;
- PSECURITY_ATTRIBUTES sa_buf = (PSECURITY_ATTRIBUTES) alloca (1024);
- PSECURITY_ATTRIBUTES sec_attribs = sec_user_nih (sa_buf, cygheap->user.sid(),
- well_known_world_sid,
- FILE_MAP_READ);
-
- for (int i = 0; i < 20; i++)
- {
- DWORD mapsize;
- if (flag & PID_EXECED)
- mapsize = PINFO_REDIR_SIZE;
- else
- mapsize = sizeof (_pinfo);
-
- procinfo = (_pinfo *) open_shared (L"cygpid", n, h0, mapsize, &shloc,
- sec_attribs, access);
- if (!h0)
- {
- if (createit)
- __seterrno ();
- return;
- }
-
- if (!procinfo)
- {
- if (exit_state)
- return;
-
- if (GetLastError () == ERROR_INVALID_HANDLE)
- api_fatal ("MapViewOfFileEx h0 %p, i %d failed, %E", h0, i);
-
- debug_printf ("MapViewOfFileEx h0 %p, i %d failed, %E", h0, i);
- yield ();
- continue;
- }
-
- bool created = shloc != SH_JUSTOPEN;
-
- /* Detect situation where a transitional memory block is being retrieved.
- If the block has been allocated with PINFO_REDIR_SIZE but not yet
- updated with a PID_EXECED state then we'll retry. */
- if (!created && !(flag & PID_NEW))
- /* If not populated, wait 2 seconds for procinfo to become populated.
- Would like to wait with finer granularity but that is not easily
- doable. */
- for (int i = 0; i < 200 && !procinfo->ppid; i++)
- Sleep (10);
-
- if (!created && createit && (procinfo->process_state & PID_REAPED))
- {
- memset (procinfo, 0, sizeof (*procinfo));
- created = true; /* Lie that we created this - just reuse old
- shared memory */
- }
-
- if ((procinfo->process_state & PID_REAPED)
- || ((procinfo->process_state & PID_INITIALIZING) && (flag & PID_NOREDIR)
- && cygwin_pid (procinfo->dwProcessId) != procinfo->pid))
- {
- set_errno (ESRCH);
- break;
- }
-
- if (procinfo->process_state & PID_EXECED)
- {
- pid_t realpid = procinfo->pid;
- debug_printf ("execed process windows pid %u, cygwin pid %d", n, realpid);
- if (realpid == n)
- api_fatal ("retrieval of execed process info for pid %d failed due to recursion.", n);
-
- n = realpid;
- CloseHandle (h0);
- h0 = NULL;
- goto loop;
- }
-
- /* In certain pathological cases, it is possible for the shared memory
- region to exist for a while after a process has exited. This should
- only be a brief occurrence, so rather than introduce some kind of
- locking mechanism, just loop. */
- if (!created && createit && (procinfo->process_state & (PID_EXITED | PID_REAPED)))
- {
- debug_printf ("looping because pid %d, procinfo->pid %d, "
- "procinfo->dwProcessid %u has PID_EXITED|PID_REAPED set",
- n, procinfo->pid, procinfo->dwProcessId);
- goto loop;
- }
-
- if (flag & PID_NEW)
- procinfo->start_time = time (NULL);
- if (!created)
- /* nothing */;
- else if (!(flag & PID_EXECED))
- procinfo->pid = n;
- else
- {
- procinfo->process_state |= PID_IN_USE | PID_EXECED;
- procinfo->pid = myself->pid;
- }
-
- h = h0; /* Success! */
- break;
-
- loop:
- _pinfo_release ();
- if (h0)
- yield ();
- }
-
- if (h)
- {
- destroy = 1;
- ProtectHandle1 (h, pinfo_shared_handle);
- }
- else
- {
- h = h0;
- _pinfo_release ();
- }
-}
-
-void
-pinfo::set_acl()
-{
- PACL acl_buf = (PACL) alloca (1024);
- SECURITY_DESCRIPTOR sd;
- NTSTATUS status;
-
- sec_acl (acl_buf, true, true, cygheap->user.sid (),
- well_known_world_sid, FILE_MAP_READ);
- RtlCreateSecurityDescriptor (&sd, SECURITY_DESCRIPTOR_REVISION);
- status = RtlSetDaclSecurityDescriptor (&sd, TRUE, acl_buf, FALSE);
- if (!NT_SUCCESS (status))
- debug_printf ("RtlSetDaclSecurityDescriptor %y", status);
- else if ((status = NtSetSecurityObject (h, DACL_SECURITY_INFORMATION, &sd)))
- debug_printf ("NtSetSecurityObject %y", status);
-}
-
-pinfo::pinfo (HANDLE parent, pinfo_minimal& from, pid_t pid):
- pinfo_minimal (), destroy (false), procinfo (NULL), waiter_ready (false),
- wait_thread (NULL)
-{
- HANDLE herr;
- const char *duperr = NULL;
- if (!DuplicateHandle (parent, herr = from.rd_proc_pipe, GetCurrentProcess (),
- &rd_proc_pipe, 0, false, DUPLICATE_SAME_ACCESS))
- duperr = "couldn't duplicate parent rd_proc_pipe handle %p for forked child %d after exec, %E";
- else if (!DuplicateHandle (parent, herr = from.hProcess, GetCurrentProcess (),
- &hProcess, 0, false, DUPLICATE_SAME_ACCESS))
- duperr = "couldn't duplicate parent process handle %p for forked child %d after exec, %E";
- else
- {
- h = NULL;
- DuplicateHandle (parent, from.h, GetCurrentProcess (), &h, 0, false,
- DUPLICATE_SAME_ACCESS);
- init (pid, PID_MAP_RW, h);
- if (*this)
- return;
- }
-
- if (duperr)
- debug_printf (duperr, herr, pid);
-
- /* Returning with procinfo == NULL. Any open handles will be closed by the
- destructor. */
-}
-
-const char *
-_pinfo::_ctty (char *buf)
-{
- if (ctty <= 0)
- strcpy (buf, "no ctty");
- else
- {
- device d;
- d.parse (ctty);
- __small_sprintf (buf, "ctty %s", d.name);
- }
- return buf;
-}
-
-bool
-_pinfo::set_ctty (fhandler_termios *fh, int flags)
-{
- tty_min& tc = *fh->tc ();
- debug_printf ("old %s, ctty device number %y, tc.ntty device number %y flags & O_NOCTTY %y", __ctty (), ctty, tc.ntty, flags & O_NOCTTY);
- if (fh && &tc && (ctty <= 0 || ctty == tc.ntty) && !(flags & O_NOCTTY))
- {
- ctty = tc.ntty;
- if (cygheap->ctty != fh->archetype)
- {
- debug_printf ("cygheap->ctty %p, archetype %p", cygheap->ctty, fh->archetype);
- if (!cygheap->ctty)
- syscall_printf ("ctty was NULL");
- else
- {
- syscall_printf ("ctty %p, usecount %d", cygheap->ctty,
- cygheap->ctty->archetype_usecount (0));
- cygheap->ctty->close ();
- }
- cygheap->ctty = (fhandler_termios *) fh->archetype;
- if (cygheap->ctty)
- {
- fh->archetype_usecount (1);
- /* guard ctty fh */
- report_tty_counts (cygheap->ctty, "ctty", "");
- }
- }
-
- lock_ttys here;
- syscall_printf ("attaching %s sid %d, pid %d, pgid %d, tty->pgid %d, tty->sid %d",
- __ctty (), sid, pid, pgid, tc.getpgid (), tc.getsid ());
- if (!cygwin_finished_initializing && !myself->cygstarted
- && pgid == pid && tc.getpgid () && tc.getsid ())
- pgid = tc.getpgid ();
-
- /* May actually need to do this:
-
- if (sid == pid && !tc.getsid () || !procinfo (tc.getsid ())->exists)
-
- but testing for process existence is expensive so we avoid it until
- an obvious bug surfaces. */
- if (sid == pid && !tc.getsid ())
- tc.setsid (sid);
- sid = tc.getsid ();
- /* See above */
- if (!tc.getpgid () && pgid == pid)
- tc.setpgid (pgid);
- }
- debug_printf ("cygheap->ctty now %p, archetype %p", cygheap->ctty, fh->archetype);
- return ctty > 0;
-}
-
-/* Test to determine if a process really exists and is processing signals.
- */
-bool __reg1
-_pinfo::exists ()
-{
- return this && process_state && !(process_state & (PID_EXITED | PID_REAPED | PID_EXECED));
-}
-
-bool
-_pinfo::alive ()
-{
- HANDLE h = OpenProcess (PROCESS_QUERY_INFORMATION, false, dwProcessId);
- if (h)
- CloseHandle (h);
- return !!h;
-}
-
-DWORD WINAPI
-commune_process (void *arg)
-{
- siginfo_t& si = *((siginfo_t *) arg);
- tmp_pathbuf tp;
- char *path = tp.c_get ();
- DWORD nr;
- HANDLE& tothem = si._si_commune._si_write_handle;
- HANDLE process_sync =
- OpenSemaphore (SYNCHRONIZE, false, shared_name (path, "commune", si.si_pid));
- if (process_sync) // FIXME: this test shouldn't be necessary
- ProtectHandle (process_sync);
-
- lock_process now;
- if (si._si_commune._si_code & PICOM_EXTRASTR)
- si._si_commune._si_str = (char *) (&si + 1);
-
- switch (si._si_commune._si_code)
- {
- case PICOM_CMDLINE:
- {
- sigproc_printf ("processing PICOM_CMDLINE");
- unsigned n = 0;
- const char *argv[__argc_safe + 1];
-
- for (int i = 0; i < __argc_safe; i++)
- {
- if (IsBadStringPtr (__argv[i], INT32_MAX))
- argv[i] = "";
- else
- argv[i] = __argv[i];
- n += strlen (argv[i]) + 1;
- }
- argv[__argc_safe] = NULL;
- if (!WritePipeOverlapped (tothem, &n, sizeof n, &nr, 1000L))
- {
- /*__seterrno ();*/ // this is run from the signal thread, so don't set errno
- sigproc_printf ("WritePipeOverlapped sizeof argv failed, %E");
- }
- else
- for (const char **a = argv; *a; a++)
- if (!WritePipeOverlapped (tothem, *a, strlen (*a) + 1, &nr, 1000L))
- {
- sigproc_printf ("WritePipeOverlapped arg %d failed, %E",
- a - argv);
- break;
- }
- break;
- }
- case PICOM_CWD:
- {
- sigproc_printf ("processing PICOM_CWD");
- unsigned int n = strlen (cygheap->cwd.get (path, 1, 1, NT_MAX_PATH)) + 1;
- if (!WritePipeOverlapped (tothem, &n, sizeof n, &nr, 1000L))
- sigproc_printf ("WritePipeOverlapped sizeof cwd failed, %E");
- else if (!WritePipeOverlapped (tothem, path, n, &nr, 1000L))
- sigproc_printf ("WritePipeOverlapped cwd failed, %E");
- break;
- }
- case PICOM_ROOT:
- {
- sigproc_printf ("processing PICOM_ROOT");
- unsigned n;
- if (cygheap->root.exists ())
- n = strlen (strcpy (path, cygheap->root.posix_path ())) + 1;
- else
- n = strlen (strcpy (path, "/")) + 1;
- if (!WritePipeOverlapped (tothem, &n, sizeof n, &nr, 1000L))
- sigproc_printf ("WritePipeOverlapped sizeof root failed, %E");
- else if (!WritePipeOverlapped (tothem, path, n, &nr, 1000L))
- sigproc_printf ("WritePipeOverlapped root failed, %E");
- break;
- }
- case PICOM_FDS:
- {
- sigproc_printf ("processing PICOM_FDS");
- unsigned int n = 0;
- int fd;
- cygheap_fdenum cfd;
- while ((fd = cfd.next ()) >= 0)
- n += sizeof (int);
- cfd.rewind ();
- if (!WritePipeOverlapped (tothem, &n, sizeof n, &nr, 1000L))
- sigproc_printf ("WritePipeOverlapped sizeof fds failed, %E");
- else
- while ((fd = cfd.next ()) >= 0)
- if (!WritePipeOverlapped (tothem, &fd, sizeof fd, &nr, 1000L))
- {
- sigproc_printf ("WritePipeOverlapped fd %d failed, %E", fd);
- break;
- }
- break;
- }
- case PICOM_PIPE_FHANDLER:
- {
- sigproc_printf ("processing PICOM_FDS");
- HANDLE hdl = si._si_commune._si_pipe_fhandler;
- unsigned int n = 0;
- cygheap_fdenum cfd;
- while (cfd.next () >= 0)
- if (cfd->get_handle () == hdl)
- {
- fhandler_pipe *fh = cfd;
- n = sizeof *fh;
- if (!WritePipeOverlapped (tothem, &n, sizeof n, &nr, 1000L))
- sigproc_printf ("WritePipeOverlapped sizeof hdl failed, %E");
- else if (!WritePipeOverlapped (tothem, fh, n, &nr, 1000L))
- sigproc_printf ("WritePipeOverlapped hdl failed, %E");
- break;
- }
- if (!n && !WritePipeOverlapped (tothem, &n, sizeof n, &nr, 1000L))
- sigproc_printf ("WritePipeOverlapped sizeof hdl failed, %E");
- break;
- }
- case PICOM_FD:
- {
- sigproc_printf ("processing PICOM_FD");
- int fd = si._si_commune._si_fd;
- unsigned int n = 0;
- cygheap_fdget cfd (fd);
- if (cfd < 0)
- n = strlen (strcpy (path, "")) + 1;
- else
- n = strlen (cfd->get_proc_fd_name (path)) + 1;
- if (!WritePipeOverlapped (tothem, &n, sizeof n, &nr, 1000L))
- sigproc_printf ("WritePipeOverlapped sizeof fd failed, %E");
- else if (!WritePipeOverlapped (tothem, path, n, &nr, 1000L))
- sigproc_printf ("WritePipeOverlapped fd failed, %E");
- break;
- }
- }
- if (process_sync)
- {
- DWORD res = WaitForSingleObject (process_sync, 5000);
- if (res != WAIT_OBJECT_0)
- sigproc_printf ("WFSO failed - %u, %E", res);
- else
- sigproc_printf ("synchronized with pid %d", si.si_pid);
- ForceCloseHandle (process_sync);
- }
- CloseHandle (tothem);
- _my_tls._ctinfo->auto_release ();
- return 0;
-}
-
-commune_result
-_pinfo::commune_request (__uint32_t code, ...)
-{
- DWORD nr;
- commune_result res;
- va_list args;
- siginfo_t si = {0};
- HANDLE& hp = si._si_commune._si_process_handle;
- HANDLE& fromthem = si._si_commune._si_read_handle;
- HANDLE request_sync = NULL;
-
- res.s = NULL;
- res.n = 0;
-
- if (!this || !pid)
- {
- set_errno (ESRCH);
- goto err;
- }
-
- va_start (args, code);
- si._si_commune._si_code = code;
- switch (code)
- {
- case PICOM_PIPE_FHANDLER:
- si._si_commune._si_pipe_fhandler = va_arg (args, HANDLE);
- break;
-
- case PICOM_FD:
- si._si_commune._si_fd = va_arg (args, int);
- break;
-
- break;
- }
- va_end (args);
-
- char name_buf[MAX_PATH];
- request_sync = CreateSemaphore (&sec_none_nih, 0, INT32_MAX,
- shared_name (name_buf, "commune", myself->pid));
- if (!request_sync)
- goto err;
- ProtectHandle (request_sync);
-
- si.si_signo = __SIGCOMMUNE;
- if (sig_send (this, si))
- {
- ForceCloseHandle (request_sync); /* don't signal semaphore since there was apparently no receiving process */
- request_sync = NULL;
- goto err;
- }
-
- DWORD n;
- switch (code)
- {
- case PICOM_CMDLINE:
- case PICOM_CWD:
- case PICOM_ROOT:
- case PICOM_FDS:
- case PICOM_FD:
- case PICOM_PIPE_FHANDLER:
- if (!ReadPipeOverlapped (fromthem, &n, sizeof n, &nr, 1000L)
- || nr != sizeof n)
- {
- __seterrno ();
- goto err;
- }
- if (!n)
- res.s = NULL;
- else
- {
- res.s = (char *) cmalloc_abort (HEAP_COMMUNE, n);
- char *p;
- for (p = res.s;
- n && ReadPipeOverlapped (fromthem, p, n, &nr, 1000L);
- p += nr, n -= nr)
- continue;
- if (n)
- {
- __seterrno ();
- goto err;
- }
- res.n = p - res.s;
- }
- break;
- }
- goto out;
-
-err:
- memset (&res, 0, sizeof (res));
-
-out:
- if (request_sync)
- {
- LONG res;
- ReleaseSemaphore (request_sync, 1, &res);
- ForceCloseHandle (request_sync);
- }
- if (hp)
- CloseHandle (hp);
- if (fromthem)
- CloseHandle (fromthem);
- return res;
-}
-
-fhandler_pipe *
-_pinfo::pipe_fhandler (HANDLE hdl, size_t &n)
-{
- if (!this || !pid)
- return NULL;
- if (pid == myself->pid)
- return NULL;
- commune_result cr = commune_request (PICOM_PIPE_FHANDLER, hdl);
- n = cr.n;
- return (fhandler_pipe *) cr.s;
-}
-
-char *
-_pinfo::fd (int fd, size_t &n)
-{
- char *s;
- if (!this || !pid)
- return NULL;
- if (pid != myself->pid)
- {
- commune_result cr = commune_request (PICOM_FD, fd);
- s = cr.s;
- n = cr.n;
- }
- else
- {
- cygheap_fdget cfd (fd);
- if (cfd < 0)
- s = cstrdup ("");
- else
- s = cfd->get_proc_fd_name ((char *) cmalloc_abort (HEAP_COMMUNE, NT_MAX_PATH));
- n = strlen (s) + 1;
- }
- return s;
-}
-
-char *
-_pinfo::fds (size_t &n)
-{
- char *s;
- if (!this || !pid)
- return NULL;
- if (pid != myself->pid)
- {
- commune_result cr = commune_request (PICOM_FDS);
- s = cr.s;
- n = cr.n;
- }
- else
- {
- n = 0;
- int fd;
- cygheap_fdenum cfd (true);
- while ((fd = cfd.next ()) >= 0)
- n += sizeof (int);
- cfd.rewind ();
- s = (char *) cmalloc_abort (HEAP_COMMUNE, n);
- int *p = (int *) s;
- while ((fd = cfd.next ()) >= 0 && (char *) p - s < (int) n)
- *p++ = fd;
- }
- return s;
-}
-
-char *
-_pinfo::root (size_t& n)
-{
- char *s;
- if (!this || !pid)
- return NULL;
- if (pid != myself->pid)
- {
- commune_result cr = commune_request (PICOM_ROOT);
- s = cr.s;
- n = cr.n;
- }
- else
- {
- if (cygheap->root.exists ())
- s = cstrdup (cygheap->root.posix_path ());
- else
- s = cstrdup ("/");
- n = strlen (s) + 1;
- }
- return s;
-}
-
-char *
-_pinfo::cwd (size_t& n)
-{
- char *s;
- if (!this || !pid)
- return NULL;
- if (pid != myself->pid)
- {
- commune_result cr = commune_request (PICOM_CWD);
- s = cr.s;
- n = cr.n;
- }
- else
- {
- s = (char *) cmalloc_abort (HEAP_COMMUNE, NT_MAX_PATH);
- cygheap->cwd.get (s, 1, 1, NT_MAX_PATH);
- n = strlen (s) + 1;
- }
- return s;
-}
-
-char *
-_pinfo::cmdline (size_t& n)
-{
- char *s;
- if (!this || !pid)
- return NULL;
- if (pid != myself->pid)
- {
- commune_result cr = commune_request (PICOM_CMDLINE);
- s = cr.s;
- n = cr.n;
- }
- else
- {
- n = 0;
- for (char **a = __argv; *a; a++)
- n += strlen (*a) + 1;
- char *p;
- p = s = (char *) cmalloc_abort (HEAP_COMMUNE, n);
- for (char **a = __argv; *a; a++)
- {
- strcpy (p, *a);
- p = strchr (p, '\0') + 1;
- }
- }
- return s;
-}
-
-/* This is the workhorse which waits for the write end of the pipe
- created during new process creation. If the pipe is closed or a zero
- is received on the pipe, it is assumed that the cygwin pid has exited.
- Otherwise, various "signals" can be sent to the parent to inform the
- parent to perform a certain action. */
-static DWORD WINAPI
-proc_waiter (void *arg)
-{
- pinfo vchild = *(pinfo *) arg;
- ((pinfo *) arg)->waiter_ready = true;
-
- siginfo_t si = {0};
- si.si_signo = SIGCHLD;
- si.si_code = CLD_EXITED;
- si.si_pid = vchild->pid;
-#if 0 // FIXME: This is tricky to get right
- si.si_utime = pchildren[rc]->rusage_self.ru_utime;
- si.si_stime = pchildren[rc].rusage_self.ru_stime;
-#endif
- pid_t pid = vchild->pid;
- bool its_me = vchild == myself;
-
- for (;;)
- {
- DWORD nb;
- char buf = '\0';
-
- if (!ReadFile (vchild.rd_proc_pipe, &buf, 1, &nb, NULL)
- && GetLastError () != ERROR_BROKEN_PIPE)
- {
- system_printf ("error on read of child wait pipe %p, %E", vchild.rd_proc_pipe);
- break;
- }
-
- if (!its_me && have_execed_cygwin)
- break;
-
- si.si_uid = vchild->uid;
-
- switch (buf)
- {
- case __ALERT_ALIVE:
- continue;
- case 0:
- /* Child exited. Do some cleanup and signal myself. */
- vchild.maybe_set_exit_code_from_windows ();
- if (WIFEXITED (vchild->exitcode))
- si.si_code = CLD_EXITED;
- else if (WCOREDUMP (vchild->exitcode))
- si.si_code = CLD_DUMPED;
- else
- si.si_code = CLD_KILLED;
- si.si_status = vchild->exitcode;
- vchild->process_state = PID_EXITED;
- /* This should always be last. Do not use vchild-> beyond this point */
- break;
- case SIGTTIN:
- case SIGTTOU:
- case SIGTSTP:
- case SIGSTOP:
- if (ISSTATE (myself, PID_NOCLDSTOP)) // FIXME: No need for this flag to be in _pinfo any longer
- continue;
- /* Child stopped. Signal myself. */
- si.si_code = CLD_STOPPED;
- break;
- case SIGCONT:
- continue;
- default:
- system_printf ("unknown value %d on proc pipe", buf);
- continue;
- }
-
- if (its_me && ch_spawn.signal_myself_exited ())
- break;
-
- /* Send a SIGCHLD to myself. We do this here, rather than in proc_subproc
- to avoid the proc_subproc lock since the signal thread will eventually
- be calling proc_subproc and could unnecessarily block. */
- sig_send (myself_nowait, si);
-
- /* If we're just stopped or got a continue signal, keep looping.
- Otherwise, return this thread to the pool. */
- if (buf != '\0')
- sigproc_printf ("looping");
- else
- break;
- }
-
- sigproc_printf ("exiting wait thread for pid %d", pid);
- vchild.wait_thread = NULL;
- _my_tls._ctinfo->auto_release (); /* automatically return the cygthread to the cygthread pool */
- return 0;
-}
-
-/* function to set up the process pipe and kick off proc_waiter */
-bool
-pinfo::wait ()
-{
- preserve (); /* Preserve the shared memory associated with the pinfo */
-
- waiter_ready = false;
- /* Fire up a new thread to track the subprocess */
- cygthread *h = new cygthread (proc_waiter, this, "waitproc");
- if (!h)
- sigproc_printf ("tracking thread creation failed for pid %d", (*this)->pid);
- else
- {
- wait_thread = h;
- sigproc_printf ("created tracking thread for pid %d, winpid %y, rd_proc_pipe %p",
- (*this)->pid, (*this)->dwProcessId, rd_proc_pipe);
- }
-
- return true;
-}
-
-/* function to send a "signal" to the parent when something interesting happens
- in the child. */
-bool
-_pinfo::alert_parent (char sig)
-{
- DWORD nb = 0;
-
- /* Send something to our parent. If the parent has gone away, close the pipe.
- Don't send if this is an exec stub.
-
- FIXME: Is there a race here if we run this while another thread is attempting
- to exec()? */
- if (my_wr_proc_pipe)
- {
- if (WriteFile (my_wr_proc_pipe, &sig, 1, &nb, NULL))
- /* all is well */;
- else if (GetLastError () != ERROR_BROKEN_PIPE)
- debug_printf ("sending %d notification to parent failed, %E", sig);
- else
- {
- ppid = 1;
- HANDLE closeit = my_wr_proc_pipe;
- my_wr_proc_pipe = NULL;
- ForceCloseHandle1 (closeit, wr_proc_pipe);
- }
- }
- return (bool) nb;
-}
-
-void
-pinfo::release ()
-{
- _pinfo_release ();
- HANDLE close_h;
- if (rd_proc_pipe)
- {
- close_h = rd_proc_pipe;
- rd_proc_pipe = NULL;
- ForceCloseHandle1 (close_h, rd_proc_pipe);
- }
- if (hProcess)
- {
- close_h = hProcess;
- hProcess = NULL;
- ForceCloseHandle1 (close_h, childhProc);
- }
-}
-
-/* DOCTOOL-START
-
-<sect1 id="func-cygwin-winpid-to-pid">
- <title>cygwin_winpid_to_pid</title>
-
- <funcsynopsis><funcprototype>
- <funcdef>extern "C" pid_t
- <function>cygwin_winpid_to_pid</function>
- </funcdef>
- <paramdef>int <parameter>winpid</parameter></paramdef>
- </funcprototype></funcsynopsis>
-
- <para>Given a windows pid, converts to the corresponding Cygwin
-pid, if any. Returns -1 if windows pid does not correspond to
-a cygwin pid.</para>
- <example>
- <title>Example use of cygwin_winpid_to_pid</title>
- <programlisting>
- extern "C" cygwin_winpid_to_pid (int winpid);
- pid_t mypid;
- mypid = cygwin_winpid_to_pid (windows_pid);
- </programlisting>
- </example>
-</sect1>
-
- DOCTOOL-END */
-
-extern "C" pid_t
-cygwin_winpid_to_pid (int winpid)
-{
- pinfo p (cygwin_pid (winpid));
- if (p)
- return p->pid;
-
- set_errno (ESRCH);
- return (pid_t) -1;
-}
-
-
-#define slop_pidlist 200
-#define size_pidlist(i) (sizeof (pidlist[0]) * ((i) + 1))
-#define size_pinfolist(i) (sizeof (pinfolist[0]) * ((i) + 1))
-class _onreturn
-{
- HANDLE h;
-public:
- ~_onreturn ()
- {
- if (h)
- {
- CloseHandle (h);
- }
- }
- void no_close_handle (pinfo& p)
- {
- p.hProcess = h;
- h = NULL;
- }
- _onreturn (): h (NULL) {}
- void operator = (HANDLE h0) {h = h0;}
- operator HANDLE () const {return h;}
-};
-
-inline void
-winpids::add (DWORD& nelem, bool winpid, DWORD pid)
-{
- pid_t cygpid = cygwin_pid (pid);
-
- if (nelem >= npidlist)
- {
- npidlist += slop_pidlist;
- pidlist = (DWORD *) realloc (pidlist, size_pidlist (npidlist + 1));
- pinfolist = (pinfo *) realloc (pinfolist, size_pinfolist (npidlist + 1));
- }
-
- _onreturn onreturn;
- pinfo& p = pinfolist[nelem];
- memset (&p, 0, sizeof (p));
-
- bool perform_copy;
- if (cygpid == myself->pid)
- {
- p = myself;
- perform_copy = false;
- }
- else
- {
- /* Open a process to prevent a subsequent exit from invalidating the
- shared memory region. */
- onreturn = OpenProcess (PROCESS_QUERY_INFORMATION, false, pid);
-
- /* If we couldn't open the process then we don't have rights to it and should
- make a copy of the shared memory area when it exists (it may not). */
- perform_copy = onreturn ? make_copy : true;
-
- p.init (cygpid, PID_NOREDIR | pinfo_access, NULL);
- }
-
- /* If we're just looking for winpids then don't do any special cygwin "stuff* */
- if (winpid)
- {
- perform_copy = true;
- goto out;
- }
-
- /* !p means that we couldn't find shared memory for this pid. Probably means
- that it isn't a cygwin process. */
- if (!p)
- {
- if (!pinfo_access)
- return;
- p.init (cygpid, PID_NOREDIR, NULL);
- if (!p)
- return;
- }
-
- /* Scan list of previously recorded pids to make sure that this pid hasn't
- shown up before. This can happen when a process execs. */
- for (unsigned i = 0; i < nelem; i++)
- if (pinfolist[i]->pid == p->pid)
- {
- if ((_pinfo *) p != (_pinfo *) myself)
- p.release ();
- return;
- }
-
-out:
- /* Exit here.
-
- If p is "false" then, eventually any opened process handle will be closed and
- the function will exit without adding anything to the pid list.
-
- If p is "true" then we've discovered a cygwin process.
-
- Handle "myself" differently. Don't copy it and close/zero the handle we
- just opened to it.
- If not performing a copy, then keep the process handle open for the duration
- of the life of the procinfo region to potential races when a new process uses
- this pid.
- Otherwise, malloc some memory for a copy of the shared memory.
-
- If the malloc failed, then "oh well". Just keep the shared memory around
- and eventually close the handle when the winpids goes out of scope.
-
- If malloc succeeds, copy the procinfo we just grabbed into the new region,
- release the shared memory and allow the handle to be closed when this
- function returns.
-
- Oh, and add the pid to the list and bump the number of elements. */
-
- if (p)
- {
- if (p == (_pinfo *) myself)
- /* handle specially. Close the handle but (eventually) don't
- deallocate procinfo in release call */;
- else if (!perform_copy)
- onreturn.no_close_handle (p); /* Don't close the handle until release */
- else
- {
- _pinfo *pnew = (_pinfo *) malloc (sizeof (*p.procinfo));
- if (!pnew)
- onreturn.no_close_handle (p);
- else
- {
- *pnew = *p.procinfo;
- p.release ();
- p.procinfo = pnew;
- p.destroy = false;
- if (winpid)
- p->dwProcessId = pid;
- }
- }
- }
- if (p || winpid)
- pidlist[nelem++] = !p ? pid : p->dwProcessId;
-}
-
-DWORD
-winpids::enum_processes (bool winpid)
-{
- DWORD nelem = 0;
-
- if (!winpid)
- {
- HANDLE dir = get_shared_parent_dir ();
- BOOLEAN restart = TRUE;
- ULONG context;
- struct fdbi
- {
- DIRECTORY_BASIC_INFORMATION dbi;
- WCHAR buf[2][NAME_MAX + 1];
- } f;
- while (NT_SUCCESS (NtQueryDirectoryObject (dir, &f, sizeof f, TRUE,
- restart, &context, NULL)))
- {
- restart = FALSE;
- f.dbi.ObjectName.Buffer[f.dbi.ObjectName.Length / sizeof (WCHAR)] = L'\0';
- if (wcsncmp (f.dbi.ObjectName.Buffer, L"cygpid.", 7) == 0)
- {
- DWORD pid = wcstoul (f.dbi.ObjectName.Buffer + 7, NULL, 10);
- add (nelem, false, pid);
- }
- }
- }
- else
- {
- static DWORD szprocs;
- static PSYSTEM_PROCESS_INFORMATION procs;
-
- while (1)
- {
- PSYSTEM_PROCESS_INFORMATION new_p = (PSYSTEM_PROCESS_INFORMATION)
- realloc (procs, szprocs += 200 * sizeof (*procs));
- if (!new_p)
- {
- system_printf ("out of memory reading system process "
- "information");
- return 0;
- }
- procs = new_p;
- NTSTATUS status = NtQuerySystemInformation (SystemProcessInformation,
- procs, szprocs, NULL);
- if (NT_SUCCESS (status))
- break;
-
- if (status != STATUS_INFO_LENGTH_MISMATCH)
- {
- system_printf ("error %y reading system process information",
- status);
- return 0;
- }
- }
-
- PSYSTEM_PROCESS_INFORMATION px = procs;
- char *&pxc = (char *&)px;
- while (1)
- {
- if (px->UniqueProcessId)
- add (nelem, true, (DWORD) (uintptr_t) px->UniqueProcessId);
- if (!px->NextEntryOffset)
- break;
- pxc += px->NextEntryOffset;
- }
- }
- return nelem;
-}
-
-void
-winpids::set (bool winpid)
-{
- npids = enum_processes (winpid);
- if (pidlist)
- pidlist[npids] = 0;
-}
-
-DWORD
-winpids::enum_init (bool winpid)
-{
- return enum_processes (winpid);
-}
-
-void
-winpids::release ()
-{
- _pinfo *p;
- for (unsigned i = 0; i < npids; i++)
- if (pinfolist[i] == (_pinfo *) myself)
- continue;
- else if (pinfolist[i].hProcess)
- pinfolist[i].release ();
- else if ((p = pinfolist[i]))
- {
- pinfolist[i].procinfo = NULL;
- free (p);
- }
-}
-
-winpids::~winpids ()
-{
- if (npidlist)
- {
- release ();
- free (pidlist);
- free (pinfolist);
- }
-}
diff --git a/winsup/cygwin/pinfo.h b/winsup/cygwin/pinfo.h
deleted file mode 100644
index 1d6a72cfa..000000000
--- a/winsup/cygwin/pinfo.h
+++ /dev/null
@@ -1,291 +0,0 @@
-/* pinfo.h: process table info
-
- Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
- 2011, 2012, 2013 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#pragma once
-
-#include <sys/resource.h>
-#include "thread.h"
-
-struct commune_result
-{
- char *s;
- DWORD n;
- HANDLE handles[2];
-};
-
-enum picom
-{
- PICOM_EXTRASTR = 0x80000000,
- PICOM_CMDLINE = 1,
- PICOM_CWD = 2,
- PICOM_ROOT = 3,
- PICOM_FDS = 4,
- PICOM_FD = 5,
- PICOM_PIPE_FHANDLER = 6
-};
-
-#define EXITCODE_SET 0x8000000
-#define EXITCODE_NOSET 0x4000000
-#define EXITCODE_RETRY 0x2000000
-#define EXITCODE_OK 0x1000000
-#define EXITCODE_FORK_FAILED 0x0800000
-
-class fhandler_pipe;
-
-class _pinfo
-{
-public:
- /* Cygwin pid */
- pid_t pid;
-
- /* Various flags indicating the state of the process. See PID_
- constants in <sys/cygwin.h>. */
- DWORD process_state;
-
- pid_t ppid; /* Parent process id. */
-
- DWORD exitcode; /* set when process exits */
-
-#define PINFO_REDIR_SIZE ((char *) &myself.procinfo->exitcode - (char *) myself.procinfo)
-
- /* > 0 if started by a cygwin process */
- DWORD cygstarted;
-
- /* dwProcessId contains the processid used for sending signals. It
- will be reset in a child process when it is capable of receiving
- signals. */
- DWORD dwProcessId;
-
- /* Used to spawn a child for fork(), among other things. The other
- members of _pinfo take only a bit over 200 bytes. So cut off a
- couple of bytes from progname to allow the _pinfo structure not
- to exceed 64K. Otherwise it blocks another 64K block of VM for
- the process. */
- WCHAR progname[NT_MAX_PATH - 512];
-
- /* User information.
- The information is derived from the GetUserName system call,
- with the name looked up in /etc/passwd and assigned a default value
- if not found. This data resides in the shared data area (allowing
- tasks to store whatever they want here) so it's for informational
- purposes only. */
- uid_t uid; /* User ID */
- gid_t gid; /* Group ID */
- pid_t pgid; /* Process group ID */
- pid_t sid; /* Session ID */
- int ctty; /* Control tty */
- bool has_pgid_children;/* True if we've forked or spawned children with our GID. */
-
- /* Resources used by process. */
- long start_time;
- struct rusage rusage_self;
- struct rusage rusage_children;
- int nice;
-
- /* Non-zero if process was stopped by a signal. */
- char stopsig;
-
- inline void set_has_pgid_children ()
- {
- if (pgid == pid)
- has_pgid_children = 1;
- }
-
- inline void set_has_pgid_children (bool val) {has_pgid_children = val;}
-
- commune_result commune_request (__uint32_t, ...);
- bool alive ();
- fhandler_pipe *pipe_fhandler (HANDLE, size_t &);
- char *fd (int fd, size_t &);
- char *fds (size_t &);
- char *root (size_t &);
- char *cwd (size_t &);
- char *cmdline (size_t &);
- char *win_heap_info (size_t &);
- bool set_ctty (class fhandler_termios *, int);
- bool alert_parent (char);
- int __reg2 kill (siginfo_t&);
- bool __reg1 exists ();
- const char *_ctty (char *);
-
- /* signals */
- HANDLE sendsig;
- HANDLE exec_sendsig;
- DWORD exec_dwProcessId;
-public:
- friend class pinfo_minimal;
-};
-
-DWORD WINAPI commune_process (void *);
-
-enum parent_alerter
-{
- __ALERT_REPARENT = 111, // arbitrary non-signal value
- __ALERT_ALIVE = 112
-};
-
-class pinfo_minimal
-{
- HANDLE h;
-public:
- HANDLE hProcess;
- HANDLE rd_proc_pipe;
- pinfo_minimal (): h (NULL), hProcess (NULL), rd_proc_pipe (NULL) {}
- void set_rd_proc_pipe (HANDLE& h) {rd_proc_pipe = h;}
- friend class pinfo;
-};
-
-class pinfo: public pinfo_minimal
-{
- bool destroy;
- _pinfo *procinfo;
-public:
- bool waiter_ready;
- class cygthread *wait_thread;
-
- void __reg3 init (pid_t, DWORD, HANDLE);
- pinfo (_pinfo *x = NULL): pinfo_minimal (), destroy (false), procinfo (x),
- waiter_ready (false), wait_thread (NULL) {}
- pinfo (pid_t n, DWORD flag = 0): pinfo_minimal (), destroy (false),
- procinfo (NULL), waiter_ready (false),
- wait_thread (NULL)
- {
- init (n, flag, NULL);
- }
- pinfo (HANDLE, pinfo_minimal&, pid_t);
- void __reg2 thisproc (HANDLE);
- inline void _pinfo_release ();
- void release ();
- bool __reg1 wait ();
- ~pinfo ()
- {
- if (destroy && procinfo)
- release ();
- }
- void __reg2 exit (DWORD n) __attribute__ ((noreturn, ));
- void __reg1 maybe_set_exit_code_from_windows ();
- void __reg2 set_exit_code (DWORD n);
- _pinfo *operator -> () const {return procinfo;}
- int operator == (pinfo *x) const {return x->procinfo == procinfo;}
- int operator == (pinfo &x) const {return x.procinfo == procinfo;}
- int operator == (_pinfo *x) const {return x == procinfo;}
- int operator == (void *x) const {return procinfo == x;}
- _pinfo *operator * () const {return procinfo;}
- operator _pinfo * () const {return procinfo;}
- int operator !() const {return !procinfo;}
- void preserve () { destroy = false; }
- void allow_remove () { destroy = true; }
-#ifndef SIG_BAD_MASK // kludge to ensure that sigproc.h included
- // int reattach () {system_printf ("reattach is not here"); return 0;}
- // int remember (bool) {system_printf ("remember is not here"); return 0;}
-#else
- int reattach ()
- {
- int res = proc_subproc (PROC_REATTACH_CHILD, (uintptr_t) this);
- destroy = res ? false : true;
- return res;
- }
- int remember (bool detach)
- {
- int res = proc_subproc (detach ? PROC_DETACHED_CHILD : PROC_ADDCHILD,
- (uintptr_t) this);
- destroy = res ? false : true;
- return res;
- }
-#endif
- HANDLE shared_handle () {return h;}
- void set_acl ();
- friend class _pinfo;
- friend class winpids;
-private:
- DWORD status_exit (DWORD);
-};
-
-#define ISSTATE(p, f) (!!((p)->process_state & f))
-#define NOTSTATE(p, f) (!((p)->process_state & f))
-
-class winpids
-{
- bool make_copy;
- DWORD npidlist;
- DWORD *pidlist;
- pinfo *pinfolist;
- DWORD pinfo_access; // access type for pinfo open
- DWORD enum_processes (bool winpid);
- DWORD enum_init (bool winpid);
- void add (DWORD& nelem, bool, DWORD pid);
-public:
- DWORD npids;
- inline void reset () { release (); npids = 0;}
- void set (bool winpid);
- winpids (): make_copy (true) {}
- winpids (int): make_copy (false), npidlist (0), pidlist (NULL),
- pinfolist (NULL), pinfo_access (0), npids (0) {}
- winpids (DWORD acc): make_copy (false), npidlist (0), pidlist (NULL),
- pinfolist (NULL), pinfo_access (acc), npids (0)
- {
- set (0);
- }
- inline DWORD& winpid (int i) const {return pidlist[i];}
- inline _pinfo *operator [] (int i) const {return (_pinfo *) pinfolist[i];}
- ~winpids ();
- void release ();
-};
-
-extern __inline pid_t
-cygwin_pid (pid_t pid)
-{
- return pid;
-}
-
-void __stdcall pinfo_init (char **, int);
-extern pinfo myself;
-
-/* Helper class to allow convenient setting and unsetting a process_state
- flag in myself. This is used in certain fhandler read/write methods
- to set the PID_TTYIN/PID_TTYOU flags in myself->process_state. */
-class push_process_state
-{
-private:
- int flag;
-public:
- push_process_state (int add_flag)
- {
- flag = add_flag;
- myself->process_state |= flag;
- }
- void pop () { myself->process_state &= ~(flag); }
- ~push_process_state () { pop (); }
-};
-
-#define _P_VFORK 0
-#define _P_SYSTEM 512
-/* Add this flag in calls to child_info_spawn::worker if the calling function
- is one of 'p' type functions: execlp, execvp, spawnlp, spawnvp. Per POSIX,
- only these p-type functions fall back to call /bin/sh if the file is not a
- binary. The setting of _P_PATH_TYPE_EXEC is used as a bool value in
- av::fixup to decide if the file should be evaluated as a script, or if
- ENOEXEC should be returned. */
-#define _P_PATH_TYPE_EXEC 0x1000
-
-/* Helper macro to mask actual mode and drop additional flags defined above. */
-#define _P_MODE(x) ((x) & 0xfff)
-
-#define __ctty() _ctty ((char *) alloca (sizeof ("ctty /dev/tty") + 20))
-#define myctty() myself->__ctty ()
-
-/* For mmaps across fork(). */
-int __stdcall fixup_mmaps_after_fork (HANDLE parent);
-/* for shm areas across fork (). */
-int __stdcall fixup_shms_after_fork ();
-
-void __stdcall fill_rusage (struct rusage *, HANDLE);
-void __stdcall add_rusage (struct rusage *, struct rusage *);
diff --git a/winsup/cygwin/pipe.cc b/winsup/cygwin/pipe.cc
deleted file mode 100644
index 9159dddb0..000000000
--- a/winsup/cygwin/pipe.cc
+++ /dev/null
@@ -1,472 +0,0 @@
-/* pipe.cc: pipe for Cygwin.
-
- Copyright 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
- 2008, 2009, 2010, 2011, 2012, 2013 Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-/* FIXME: Should this really be fhandler_pipe.cc? */
-
-#include "winsup.h"
-#include <stdlib.h>
-#include <sys/socket.h>
-#include "cygerrno.h"
-#include "security.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "pinfo.h"
-#include "shared_info.h"
-
-fhandler_pipe::fhandler_pipe ()
- : fhandler_base_overlapped (), popen_pid (0)
-{
- max_atomic_write = DEFAULT_PIPEBUFSIZE;
- need_fork_fixup (true);
-}
-
-int
-fhandler_pipe::init (HANDLE f, DWORD a, mode_t mode)
-{
- /* FIXME: Have to clean this up someday
- FIXME: Do we have to check for both !get_win32_name() and
- !*get_win32_name()? */
- if ((!get_win32_name () || !*get_win32_name ()) && get_name ())
- {
- char *d;
- const char *s;
- char *hold_normalized_name = (char *) alloca (strlen (get_name ()) + 1);
- for (s = get_name (), d = hold_normalized_name; *s; s++, d++)
- if (*s == '/')
- *d = '\\';
- else
- *d = *s;
- *d = '\0';
- set_name (hold_normalized_name);
- }
-
- bool opened_properly = a & FILE_CREATE_PIPE_INSTANCE;
- a &= ~FILE_CREATE_PIPE_INSTANCE;
- fhandler_base::init (f, a, mode);
- close_on_exec (mode & O_CLOEXEC);
- if (opened_properly)
- setup_overlapped ();
- else
- destroy_overlapped ();
- return 1;
-}
-
-extern "C" int sscanf (const char *, const char *, ...);
-
-int
-fhandler_pipe::open (int flags, mode_t mode)
-{
- HANDLE proc, pipe_hdl, nio_hdl = NULL;
- fhandler_pipe *fh = NULL;
- size_t size;
- int pid, rwflags = (flags & O_ACCMODE);
- bool inh;
-
- sscanf (get_name (), "/proc/%d/fd/pipe:[%lu]",
- &pid, (unsigned long *) &pipe_hdl);
- if (pid == myself->pid)
- {
- cygheap_fdenum cfd (true);
- while (cfd.next () >= 0)
- {
- if (cfd->get_handle () != pipe_hdl)
- continue;
- if ((rwflags == O_RDONLY && !(cfd->get_access () & GENERIC_READ))
- || (rwflags == O_WRONLY && !(cfd->get_access () & GENERIC_WRITE)))
- {
- set_errno (EACCES);
- return 0;
- }
- cfd->copyto (this);
- set_io_handle (NULL);
- pc.reset_conv_handle ();
- if (!cfd->dup (this, flags))
- return 1;
- return 0;
- }
- set_errno (ENOENT);
- return 0;
- }
-
- pinfo p (pid);
- if (!p)
- {
- set_errno (ESRCH);
- return 0;
- }
- if (!(proc = OpenProcess (PROCESS_DUP_HANDLE, false, p->dwProcessId)))
- {
- __seterrno ();
- return 0;
- }
- if (!(fh = p->pipe_fhandler (pipe_hdl, size)) || !size)
- {
- set_errno (ENOENT);
- goto out;
- }
- /* Too bad, but Windows only allows the same access mode when dup'ing
- the pipe. */
- if ((rwflags == O_RDONLY && !(fh->get_access () & GENERIC_READ))
- || (rwflags == O_WRONLY && !(fh->get_access () & GENERIC_WRITE)))
- {
- set_errno (EACCES);
- goto out;
- }
- inh = !(flags & O_CLOEXEC);
- if (!DuplicateHandle (proc, pipe_hdl, GetCurrentProcess (), &nio_hdl,
- 0, inh, DUPLICATE_SAME_ACCESS))
- {
- __seterrno ();
- goto out;
- }
- init (nio_hdl, fh->get_access (), mode & O_TEXT ?: O_BINARY);
- cfree (fh);
- CloseHandle (proc);
- return 1;
-out:
- if (nio_hdl)
- CloseHandle (nio_hdl);
- if (fh)
- free (fh);
- if (proc)
- CloseHandle (proc);
- return 0;
-}
-
-off_t
-fhandler_pipe::lseek (off_t offset, int whence)
-{
- debug_printf ("(%D, %d)", offset, whence);
- set_errno (ESPIPE);
- return -1;
-}
-
-int
-fhandler_pipe::fadvise (off_t offset, off_t length, int advice)
-{
- set_errno (ESPIPE);
- return -1;
-}
-
-int
-fhandler_pipe::ftruncate (off_t length, bool allow_truncate)
-{
- set_errno (allow_truncate ? EINVAL : ESPIPE);
- return -1;
-}
-
-char *
-fhandler_pipe::get_proc_fd_name (char *buf)
-{
- __small_sprintf (buf, "pipe:[%lu]", get_handle ());
- return buf;
-}
-
-int
-fhandler_pipe::dup (fhandler_base *child, int flags)
-{
- fhandler_pipe *ftp = (fhandler_pipe *) child;
- ftp->set_popen_pid (0);
-
- int res;
- if (get_handle () && fhandler_base_overlapped::dup (child, flags))
- res = -1;
- else
- res = 0;
-
- debug_printf ("res %d", res);
- return res;
-}
-
-#define PIPE_INTRO "\\\\.\\pipe\\cygwin-"
-
-/* Create a pipe, and return handles to the read and write ends,
- just like CreatePipe, but ensure that the write end permits
- FILE_READ_ATTRIBUTES access, on later versions of win32 where
- this is supported. This access is needed by NtQueryInformationFile,
- which is used to implement select and nonblocking writes.
- Note that the return value is either 0 or GetLastError,
- unlike CreatePipe, which returns a bool for success or failure. */
-DWORD
-fhandler_pipe::create (LPSECURITY_ATTRIBUTES sa_ptr, PHANDLE r, PHANDLE w,
- DWORD psize, const char *name, DWORD open_mode)
-{
- /* Default to error. */
- if (r)
- *r = NULL;
- if (w)
- *w = NULL;
-
- /* Ensure that there is enough pipe buffer space for atomic writes. */
- if (!psize)
- psize = DEFAULT_PIPEBUFSIZE;
-
- char pipename[MAX_PATH];
- size_t len = __small_sprintf (pipename, PIPE_INTRO "%S-",
- &cygheap->installation_key);
- DWORD pipe_mode = PIPE_READMODE_BYTE
- | (wincap.has_pipe_reject_remote_clients ()
- ? PIPE_REJECT_REMOTE_CLIENTS : 0);
- if (!name)
- pipe_mode |= pipe_byte ? PIPE_TYPE_BYTE : PIPE_TYPE_MESSAGE;
- else
- pipe_mode |= PIPE_TYPE_MESSAGE;
-
- if (!name || (open_mode & PIPE_ADD_PID))
- {
- len += __small_sprintf (pipename + len, "%u-", GetCurrentProcessId ());
- open_mode &= ~PIPE_ADD_PID;
- }
-
- if (name)
- len += __small_sprintf (pipename + len, "%s", name);
-
- open_mode |= PIPE_ACCESS_INBOUND | FILE_FLAG_FIRST_PIPE_INSTANCE;
-
- /* Retry CreateNamedPipe as long as the pipe name is in use.
- Retrying will probably never be necessary, but we want
- to be as robust as possible. */
- DWORD err = 0;
- while (r && !*r)
- {
- static volatile ULONG pipe_unique_id;
- if (!name)
- __small_sprintf (pipename + len, "pipe-%p",
- InterlockedIncrement ((LONG *) &pipe_unique_id));
-
- debug_printf ("name %s, size %u, mode %s", pipename, psize,
- (pipe_mode & PIPE_TYPE_MESSAGE)
- ? "PIPE_TYPE_MESSAGE" : "PIPE_TYPE_BYTE");
-
- /* Use CreateNamedPipe instead of CreatePipe, because the latter
- returns a write handle that does not permit FILE_READ_ATTRIBUTES
- access, on versions of win32 earlier than WinXP SP2.
- CreatePipe also stupidly creates a full duplex pipe, which is
- a waste, since only a single direction is actually used.
- It's important to only allow a single instance, to ensure that
- the pipe was not created earlier by some other process, even if
- the pid has been reused.
-
- Note that the write side of the pipe is opened as PIPE_TYPE_MESSAGE.
- This *seems* to more closely mimic Linux pipe behavior and is
- definitely required for pty handling since fhandler_pty_master
- writes to the pipe in chunks, terminated by newline when CANON mode
- is specified. */
- *r = CreateNamedPipe (pipename, open_mode, pipe_mode, 1, psize,
- psize, NMPWAIT_USE_DEFAULT_WAIT, sa_ptr);
-
- if (*r != INVALID_HANDLE_VALUE)
- {
- debug_printf ("pipe read handle %p", *r);
- err = 0;
- break;
- }
-
- err = GetLastError ();
- switch (err)
- {
- case ERROR_PIPE_BUSY:
- /* The pipe is already open with compatible parameters.
- Pick a new name and retry. */
- debug_printf ("pipe busy", !name ? ", retrying" : "");
- if (!name)
- *r = NULL;
- break;
- case ERROR_ACCESS_DENIED:
- /* The pipe is already open with incompatible parameters.
- Pick a new name and retry. */
- debug_printf ("pipe access denied%s", !name ? ", retrying" : "");
- if (!name)
- *r = NULL;
- break;
- default:
- {
- err = GetLastError ();
- debug_printf ("failed, %E");
- }
- }
- }
-
- if (err)
- {
- *r = NULL;
- return err;
- }
-
- if (!w)
- debug_printf ("pipe write handle NULL");
- else
- {
- debug_printf ("CreateFile: name %s", pipename);
-
- /* Open the named pipe for writing.
- Be sure to permit FILE_READ_ATTRIBUTES access. */
- DWORD access = GENERIC_WRITE | FILE_READ_ATTRIBUTES;
- if ((open_mode & PIPE_ACCESS_DUPLEX) == PIPE_ACCESS_DUPLEX)
- access |= GENERIC_READ | FILE_WRITE_ATTRIBUTES;
- *w = CreateFile (pipename, access, 0, sa_ptr, OPEN_EXISTING,
- open_mode & FILE_FLAG_OVERLAPPED, 0);
-
- if (!*w || *w == INVALID_HANDLE_VALUE)
- {
- /* Failure. */
- DWORD err = GetLastError ();
- debug_printf ("CreateFile failed, r %p, %E", r);
- if (r)
- CloseHandle (*r);
- *w = NULL;
- return err;
- }
-
- debug_printf ("pipe write handle %p", *w);
- }
-
- /* Success. */
- return 0;
-}
-
-int
-fhandler_pipe::create (fhandler_pipe *fhs[2], unsigned psize, int mode)
-{
- HANDLE r, w;
- SECURITY_ATTRIBUTES *sa = sec_none_cloexec (mode);
- int res = -1;
-
- int ret = create (sa, &r, &w, psize, NULL, FILE_FLAG_OVERLAPPED);
- if (ret)
- __seterrno_from_win_error (ret);
- else if ((fhs[0] = (fhandler_pipe *) build_fh_dev (*piper_dev)) == NULL)
- {
- CloseHandle (r);
- CloseHandle (w);
- }
- else if ((fhs[1] = (fhandler_pipe *) build_fh_dev (*pipew_dev)) == NULL)
- {
- delete fhs[0];
- CloseHandle (w);
- }
- else
- {
- mode |= mode & O_TEXT ?: O_BINARY;
- fhs[0]->init (r, FILE_CREATE_PIPE_INSTANCE | GENERIC_READ, mode);
- fhs[1]->init (w, FILE_CREATE_PIPE_INSTANCE | GENERIC_WRITE, mode);
- res = 0;
- }
-
- debug_printf ("%R = pipe([%p, %p], %d, %y)", res, fhs[0], fhs[1], psize, mode);
- return res;
-}
-
-int
-fhandler_pipe::ioctl (unsigned int cmd, void *p)
-{
- int n;
-
- switch (cmd)
- {
- case FIONREAD:
- if (get_device () == FH_PIPEW)
- {
- set_errno (EINVAL);
- return -1;
- }
- if (!PeekNamedPipe (get_handle (), NULL, 0, NULL, (DWORD *) &n, NULL))
- {
- __seterrno ();
- return -1;
- }
- break;
- default:
- return fhandler_base::ioctl (cmd, p);
- break;
- }
- *(int *) p = n;
- return 0;
-}
-
-int __reg2
-fhandler_pipe::fstatvfs (struct statvfs *sfs)
-{
- set_errno (EBADF);
- return -1;
-}
-
-static int __reg3
-pipe_worker (int filedes[2], unsigned int psize, int mode)
-{
- fhandler_pipe *fhs[2];
- int res = fhandler_pipe::create (fhs, psize, mode);
- if (!res)
- {
- cygheap_fdnew fdin;
- cygheap_fdnew fdout (fdin, false);
- char buf[sizeof ("/dev/fd/pipe:[2147483647]")];
- __small_sprintf (buf, "/dev/fd/pipe:[%d]", (int) fdin);
- fhs[0]->pc.set_normalized_path (buf);
- __small_sprintf (buf, "pipe:[%d]", (int) fdout);
- fhs[1]->pc.set_normalized_path (buf);
- fdin = fhs[0];
- fdout = fhs[1];
- filedes[0] = fdin;
- filedes[1] = fdout;
- }
- return res;
-}
-
-extern "C" int
-_pipe (int filedes[2], unsigned int psize, int mode)
-{
- int res = pipe_worker (filedes, psize, mode);
- int read, write;
- if (res != 0)
- read = write = -1;
- else
- {
- read = filedes[0];
- write = filedes[1];
- }
- syscall_printf ("%R = _pipe([%d, %d], %u, %y)", res, read, write, psize, mode);
- return res;
-}
-
-extern "C" int
-pipe (int filedes[2])
-{
- int res = pipe_worker (filedes, DEFAULT_PIPEBUFSIZE, O_BINARY);
- int read, write;
- if (res != 0)
- read = write = -1;
- else
- {
- read = filedes[0];
- write = filedes[1];
- }
- syscall_printf ("%R = pipe([%d, %d])", res, read, write);
- return res;
-}
-
-extern "C" int
-pipe2 (int filedes[2], int mode)
-{
- int res = pipe_worker (filedes, DEFAULT_PIPEBUFSIZE, mode);
- int read, write;
- if (res != 0)
- read = write = -1;
- else
- {
- read = filedes[0];
- write = filedes[1];
- }
- syscall_printf ("%R = pipe2([%d, %d], %y)", res, read, write, mode);
- return res;
-}
diff --git a/winsup/cygwin/poll.cc b/winsup/cygwin/poll.cc
deleted file mode 100644
index 2b6f8a90a..000000000
--- a/winsup/cygwin/poll.cc
+++ /dev/null
@@ -1,162 +0,0 @@
-/* poll.cc. Implements poll(2) via usage of select(2) call.
-
- Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2011,
- 2012, 2014 Red Hat, Inc.
-
- This file is part of Cygwin.
-
- This software is a copyrighted work licensed under the terms of the
- Cygwin license. Please consult the file "CYGWIN_LICENSE" for
- details. */
-
-#define FD_SETSIZE 16384 // lots of fds
-#include "winsup.h"
-#include <sys/poll.h>
-#include <stdlib.h>
-#define USE_SYS_TYPES_FD_SET
-#include "cygerrno.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "pinfo.h"
-#include "sigproc.h"
-
-extern "C" int
-poll (struct pollfd *fds, nfds_t nfds, int timeout)
-{
- int max_fd = 0;
- int invalid_fds = 0;
- fd_set *read_fds, *write_fds, *except_fds;
- struct timeval tv = { timeout / 1000, (timeout % 1000) * 1000 };
-
- for (unsigned int i = 0; i < nfds; ++i)
- if (fds[i].fd > max_fd)
- max_fd = fds[i].fd;
-
- size_t fds_size = howmany (max_fd + 1, NFDBITS) * sizeof (fd_mask);
-
- read_fds = (fd_set *) alloca (fds_size);
- write_fds = (fd_set *) alloca (fds_size);
- except_fds = (fd_set *) alloca (fds_size);
-
- if (!read_fds || !write_fds || !except_fds)
- {
- set_errno (EINVAL); /* According to SUSv3. */
- return -1;
- }
-
- memset (read_fds, 0, fds_size);
- memset (write_fds, 0, fds_size);
- memset (except_fds, 0, fds_size);
-
- for (unsigned int i = 0; i < nfds; ++i)
- {
- fds[i].revents = 0;
- if (!cygheap->fdtab.not_open (fds[i].fd))
- {
- if (fds[i].events & POLLIN)
- FD_SET(fds[i].fd, read_fds);
- if (fds[i].events & POLLOUT)
- FD_SET(fds[i].fd, write_fds);
- if (fds[i].events & POLLPRI)
- FD_SET(fds[i].fd, except_fds);
- }
- else if (fds[i].fd >= 0)
- {
- ++invalid_fds;
- fds[i].revents = POLLNVAL;
- }
- }
-
- /* Invalid fds? */
- if (invalid_fds > 0)
- {
- /* Only invalid fds? Return. */
- if ((nfds_t) invalid_fds == nfds)
- return invalid_fds;
- /* POSIX doesn't explicitely define this behaviour, but on Linux,
- the timeout is set to 0 if an error occurs, and POLLNVAL is one
- of these errors. So, for Linux-compatibility's sake... */
- tv.tv_sec = tv.tv_usec = 0;
- }
-
- int ret = cygwin_select (max_fd + 1, read_fds, write_fds, except_fds,
- timeout < 0 ? NULL : &tv);
- /* timeout, signal, whatever? Return. If invalid fds exist, return with
- their number. */
- if (ret <= 0)
- return invalid_fds ?: ret;
-
- /* Set revents fields and count fds with non-zero revents fields for
- return value. */
- ret = 0;
- for (unsigned int i = 0; i < nfds; ++i)
- {
- if (fds[i].fd >= 0 && fds[i].revents != POLLNVAL)
- {
- fhandler_socket *sock;
-
- /* Check if the descriptor has been closed, or if shutdown for the
- read side has been called on a socket. */
- if (cygheap->fdtab.not_open (fds[i].fd)
- || ((sock = cygheap->fdtab[fds[i].fd]->is_socket ())
- && sock->saw_shutdown_read ()))
- fds[i].revents = POLLHUP;
- else
- {
- if (FD_ISSET(fds[i].fd, read_fds))
- /* This should be sufficient for sockets, too. Using
- MSG_PEEK, as before, can be considered dangerous at
- best. Quote from W. Richard Stevens: "The presence
- of an error can be considered either normal data or
- an error (POLLERR). In either case, a subsequent read
- will return -1 with errno set to the appropriate value."
- So it looks like there's actually no good reason to
- return POLLERR. */
- fds[i].revents |= POLLIN;
- /* Handle failed connect. A failed connect implicitly sets
- POLLOUT, if requested, but it doesn't set POLLIN. */
- if ((fds[i].events & POLLIN)
- && (sock = cygheap->fdtab[fds[i].fd]->is_socket ())
- && sock->connect_state () == connect_failed)
- fds[i].revents |= (POLLIN | POLLERR);
- else
- {
- if (FD_ISSET(fds[i].fd, write_fds))
- fds[i].revents |= POLLOUT;
- if (FD_ISSET(fds[i].fd, except_fds))
- fds[i].revents |= POLLPRI;
- }
- }
- if (fds[i].revents)
- ++ret;
- }
- }
- /* Number of fds with event includes the invalid fds. */
- return ret + invalid_fds;
-}
-
-extern "C" int
-ppoll (struct pollfd *fds, nfds_t nfds, const struct timespec *timeout_ts,
- const sigset_t *sigmask)
-{
- int timeout;
- sigset_t oldset = _my_tls.sigmask;
-
- __try
- {
- timeout = (timeout_ts == NULL)
- ? -1
- : (timeout_ts->tv_sec * 1000 + timeout_ts->tv_nsec / 1000000);
- if (sigmask)
- set_signal_mask (_my_tls.sigmask, *sigmask);
- int ret = poll (fds, nfds, timeout);
- if (sigmask)
- set_signal_mask (_my_tls.sigmask, oldset);
- return ret;
- }
- __except (EFAULT) {}
- __endtry
- return -1;
-}
diff --git a/winsup/cygwin/posix_ipc.cc b/winsup/cygwin/posix_ipc.cc
deleted file mode 100644
index 067fa5bb0..000000000
--- a/winsup/cygwin/posix_ipc.cc
+++ /dev/null
@@ -1,1240 +0,0 @@
-/* posix_ipc.cc: POSIX IPC API for Cygwin.
-
- Copyright 2007, 2008, 2009, 2010, 2011, 2012, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include "shared_info.h"
-#include "thread.h"
-#include "path.h"
-#include "cygtls.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "sigproc.h"
-#include "ntdll.h"
-#include <sys/mman.h>
-#include <sys/param.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <mqueue.h>
-#include <semaphore.h>
-
-/* The prefix_len is the length of the path prefix ncluding trailing "/"
- (or "/sem." for semaphores) as well as the trailing NUL. */
-static struct
-{
- const char *prefix;
- const size_t prefix_len;
- const char *description;
-} ipc_names[] = {
- { "/dev/shm", 10, "POSIX shared memory object" },
- { "/dev/mqueue", 13, "POSIX message queue" },
- { "/dev/shm", 14, "POSIX semaphore" }
-};
-
-enum ipc_type_t
-{
- shmem,
- mqueue,
- semaphore
-};
-
-static bool
-check_path (char *res_name, ipc_type_t type, const char *name, size_t len)
-{
- /* Note that we require the existance of the appropriate /dev subdirectories
- for POSIX IPC object support, similar to Linux (which supports the
- directories, but doesn't require to mount them). We don't create
- these directory here, that's the task of the installer. But we check
- for existance and give ample warning. */
- path_conv path (ipc_names[type].prefix, PC_SYM_NOFOLLOW);
- if (path.error || !path.exists () || !path.isdir ())
- {
- small_printf (
- "Warning: '%s' does not exists or is not a directory.\n\n"
- "%ss require the existance of this directory.\n"
- "Create the directory '%s' and set the permissions to 01777.\n"
- "For instance on the command line: mkdir -m 01777 %s\n",
- ipc_names[type].prefix, ipc_names[type].description,
- ipc_names[type].prefix, ipc_names[type].prefix);
- set_errno (EINVAL);
- return false;
- }
- /* Name must not be empty, or just be a single slash, or start with more
- than one slash. Same for backslash.
- Apart from handling backslash like slash, the naming rules are identical
- to Linux, including the names and requirements for subdirectories, if
- the name contains further slashes. */
- if (!name || (strchr ("/\\", name[0])
- && (!name[1] || strchr ("/\\", name[1]))))
- {
- debug_printf ("Invalid %s name '%s'", ipc_names[type].description, name);
- set_errno (EINVAL);
- return false;
- }
- /* Skip leading (back-)slash. */
- if (strchr ("/\\", name[0]))
- ++name;
- if (len > PATH_MAX - ipc_names[type].prefix_len)
- {
- debug_printf ("%s name '%s' too long", ipc_names[type].description, name);
- set_errno (ENAMETOOLONG);
- return false;
- }
- __small_sprintf (res_name, "%s/%s%s", ipc_names[type].prefix,
- type == semaphore ? "sem." : "",
- name);
- return true;
-}
-
-static int
-ipc_mutex_init (HANDLE *pmtx, const char *name)
-{
- WCHAR buf[MAX_PATH];
- UNICODE_STRING uname;
- OBJECT_ATTRIBUTES attr;
- NTSTATUS status;
-
- __small_swprintf (buf, L"mqueue/mtx_%s", name);
- RtlInitUnicodeString (&uname, buf);
- InitializeObjectAttributes (&attr, &uname,
- OBJ_INHERIT | OBJ_OPENIF | OBJ_CASE_INSENSITIVE,
- get_shared_parent_dir (),
- everyone_sd (CYG_MUTANT_ACCESS));
- status = NtCreateMutant (pmtx, CYG_MUTANT_ACCESS, &attr, FALSE);
- if (!NT_SUCCESS (status))
- {
- debug_printf ("NtCreateMutant: %y", status);
- return geterrno_from_win_error (RtlNtStatusToDosError (status));
- }
- return 0;
-}
-
-static int
-ipc_mutex_lock (HANDLE mtx)
-{
- switch (cygwait (mtx, cw_infinite, cw_sig_eintr | cw_cancel | cw_cancel_self))
- {
- case WAIT_OBJECT_0:
- case WAIT_ABANDONED_0:
- return 0;
- case WAIT_SIGNALED:
- set_errno (EINTR);
- return 1;
- default:
- break;
- }
- return geterrno_from_win_error ();
-}
-
-static inline int
-ipc_mutex_unlock (HANDLE mtx)
-{
- return ReleaseMutex (mtx) ? 0 : geterrno_from_win_error ();
-}
-
-static inline int
-ipc_mutex_close (HANDLE mtx)
-{
- return CloseHandle (mtx) ? 0 : geterrno_from_win_error ();
-}
-
-static int
-ipc_cond_init (HANDLE *pevt, const char *name, char sr)
-{
- WCHAR buf[MAX_PATH];
- UNICODE_STRING uname;
- OBJECT_ATTRIBUTES attr;
- NTSTATUS status;
-
- __small_swprintf (buf, L"mqueue/evt_%s%c", name, sr);
- RtlInitUnicodeString (&uname, buf);
- InitializeObjectAttributes (&attr, &uname,
- OBJ_INHERIT | OBJ_OPENIF | OBJ_CASE_INSENSITIVE,
- get_shared_parent_dir (),
- everyone_sd (CYG_EVENT_ACCESS));
- status = NtCreateEvent (pevt, CYG_EVENT_ACCESS, &attr,
- NotificationEvent, FALSE);
- if (!NT_SUCCESS (status))
- {
- debug_printf ("NtCreateEvent: %y", status);
- return geterrno_from_win_error (RtlNtStatusToDosError (status));
- }
- return 0;
-}
-
-static int
-ipc_cond_timedwait (HANDLE evt, HANDLE mtx, const struct timespec *abstime)
-{
- HANDLE w4[4] = { evt, };
- DWORD cnt = 2;
- DWORD timer_idx = 0;
- int ret = 0;
-
- set_signal_arrived here (w4[1]);
- if ((w4[cnt] = pthread::get_cancel_event ()) != NULL)
- ++cnt;
- if (abstime)
- {
- if (abstime->tv_sec < 0
- || abstime->tv_nsec < 0
- || abstime->tv_nsec > 999999999)
- return EINVAL;
-
- /* If a timeout is set, we create a waitable timer to wait for.
- This is the easiest way to handle the absolute timeout value, given
- that NtSetTimer also takes absolute times and given the double
- dependency on evt *and* mtx, which requires to call WFMO twice. */
- NTSTATUS status;
- LARGE_INTEGER duetime;
-
- timer_idx = cnt++;
- status = NtCreateTimer (&w4[timer_idx], TIMER_ALL_ACCESS, NULL,
- NotificationTimer);
- if (!NT_SUCCESS (status))
- return geterrno_from_nt_status (status);
- timespec_to_filetime (abstime, &duetime);
- status = NtSetTimer (w4[timer_idx], &duetime, NULL, NULL, FALSE, 0, NULL);
- if (!NT_SUCCESS (status))
- {
- NtClose (w4[timer_idx]);
- return geterrno_from_nt_status (status);
- }
- }
- ResetEvent (evt);
- if ((ret = ipc_mutex_unlock (mtx)) != 0)
- return ret;
- /* Everything's set up, so now wait for the event to be signalled. */
-restart1:
- switch (WaitForMultipleObjects (cnt, w4, FALSE, INFINITE))
- {
- case WAIT_OBJECT_0:
- break;
- case WAIT_OBJECT_0 + 1:
- if (_my_tls.call_signal_handler ())
- goto restart1;
- ret = EINTR;
- break;
- case WAIT_OBJECT_0 + 2:
- if (timer_idx != 2)
- pthread::static_cancel_self ();
- /*FALLTHRU*/
- case WAIT_OBJECT_0 + 3:
- ret = ETIMEDOUT;
- break;
- default:
- ret = geterrno_from_win_error ();
- break;
- }
- if (ret == 0)
- {
- /* At this point we need to lock the mutex. The wait is practically
- the same as before, just that we now wait on the mutex instead of the
- event. */
- restart2:
- w4[0] = mtx;
- switch (WaitForMultipleObjects (cnt, w4, FALSE, INFINITE))
- {
- case WAIT_OBJECT_0:
- case WAIT_ABANDONED_0:
- break;
- case WAIT_OBJECT_0 + 1:
- if (_my_tls.call_signal_handler ())
- goto restart2;
- ret = EINTR;
- break;
- case WAIT_OBJECT_0 + 2:
- if (timer_idx != 2)
- pthread_testcancel ();
- /*FALLTHRU*/
- case WAIT_OBJECT_0 + 3:
- ret = ETIMEDOUT;
- break;
- default:
- ret = geterrno_from_win_error ();
- break;
- }
- }
- if (timer_idx)
- {
- if (ret != ETIMEDOUT)
- NtCancelTimer (w4[timer_idx], NULL);
- NtClose (w4[timer_idx]);
- }
- return ret;
-}
-
-static inline void
-ipc_cond_signal (HANDLE evt)
-{
- SetEvent (evt);
-}
-
-static inline void
-ipc_cond_close (HANDLE evt)
-{
- CloseHandle (evt);
-}
-
-class ipc_flock
-{
- struct flock fl;
-
-public:
- ipc_flock () { memset (&fl, 0, sizeof fl); }
-
- int lock (int fd, size_t size)
- {
- fl.l_type = F_WRLCK;
- fl.l_whence = SEEK_SET;
- fl.l_start = 0;
- fl.l_len = size;
- return fcntl64 (fd, F_SETLKW, &fl);
- }
- int unlock (int fd)
- {
- if (!fl.l_len)
- return 0;
- fl.l_type = F_UNLCK;
- return fcntl64 (fd, F_SETLKW, &fl);
- }
-};
-
-/* POSIX shared memory object implementation. */
-
-extern "C" int
-shm_open (const char *name, int oflag, mode_t mode)
-{
- size_t len = strlen (name);
- char shmname[ipc_names[shmem].prefix_len + len];
-
- if (!check_path (shmname, shmem, name, len))
- return -1;
-
- /* Check for valid flags. */
- if (((oflag & O_ACCMODE) != O_RDONLY && (oflag & O_ACCMODE) != O_RDWR)
- || (oflag & ~(O_ACCMODE | O_CREAT | O_EXCL | O_TRUNC)))
- {
- debug_printf ("Invalid oflag 0%o", oflag);
- set_errno (EINVAL);
- return -1;
- }
-
- return open (shmname, oflag | O_CLOEXEC, mode & 0777);
-}
-
-extern "C" int
-shm_unlink (const char *name)
-{
- size_t len = strlen (name);
- char shmname[ipc_names[shmem].prefix_len + len];
-
- if (!check_path (shmname, shmem, name, len))
- return -1;
-
- return unlink (shmname);
-}
-
-/* The POSIX message queue implementation is based on W. Richard STEVENS
- implementation, just tweaked for Cygwin. The main change is
- the usage of Windows mutexes and events instead of using the pthread
- synchronization objects. The pathname is massaged so that the
- files are created under /dev/mqueue. mq_timedsend and mq_timedreceive
- are implemented additionally. */
-
-/* The mq_attr structure is defined using long datatypes per POSIX.
- For interoperability reasons between 32 and 64 bit processes, we have
- to make sure to use a unified structure layout in the message queue file.
- That's what the mq_fattr is, the in-file representation of the mq_attr
- struct. */
-#pragma pack (push, 4)
-struct mq_fattr
-{
- uint32_t mq_flags;
- uint32_t mq_maxmsg;
- uint32_t mq_msgsize;
- uint32_t mq_curmsgs;
-};
-
-struct mq_hdr
-{
- struct mq_fattr mqh_attr; /* the queue's attributes */
- int32_t mqh_head; /* index of first message */
- int32_t mqh_free; /* index of first free message */
- int32_t mqh_nwait; /* #threads blocked in mq_receive() */
- pid_t mqh_pid; /* nonzero PID if mqh_event set */
- char mqh_uname[36]; /* unique name used to identify synchronization
- objects connected to this queue */
- union {
- struct sigevent mqh_event; /* for mq_notify() */
- /* Make sure sigevent takes the same space on 32 and 64 bit systems.
- Other than that, it doesn't need to be compatible since only
- one process can be notified at a time. */
- uint64_t mqh_placeholder[8];
- };
- uint32_t mqh_magic; /* Expect MQI_MAGIC here, otherwise it's
- an old-style message queue. */
-};
-
-struct msg_hdr
-{
- int32_t msg_next; /* index of next on linked list */
- int32_t msg_len; /* actual length */
- unsigned int msg_prio; /* priority */
-};
-#pragma pack (pop)
-
-struct mq_info
-{
- struct mq_hdr *mqi_hdr; /* start of mmap'ed region */
- uint32_t mqi_magic; /* magic number if open */
- int mqi_flags; /* flags for this process */
- HANDLE mqi_lock; /* mutex lock */
- HANDLE mqi_waitsend; /* and condition variable for full queue */
- HANDLE mqi_waitrecv; /* and condition variable for empty queue */
-};
-
-#define MQI_MAGIC 0x98765432UL
-
-#define MSGSIZE(i) roundup((i), sizeof(long))
-
-#define MAX_TRIES 10 /* for waiting for initialization */
-
-struct mq_attr defattr = { 0, 10, 8192, 0 }; /* Linux defaults. */
-
-extern "C" off_t lseek64 (int, off_t, int);
-extern "C" void *mmap64 (void *, size_t, int, int, int, off_t);
-
-extern "C" mqd_t
-mq_open (const char *name, int oflag, ...)
-{
- int i, fd = -1, nonblock, created = 0;
- long msgsize, index;
- off_t filesize = 0;
- va_list ap;
- mode_t mode;
- int8_t *mptr = (int8_t *) MAP_FAILED;
- struct stat statbuff;
- struct mq_hdr *mqhdr;
- struct msg_hdr *msghdr;
- struct mq_attr *attr;
- struct mq_info *mqinfo = NULL;
- LUID luid;
-
- size_t len = strlen (name);
- char mqname[ipc_names[mqueue].prefix_len + len];
-
- if (!check_path (mqname, mqueue, name, len))
- return (mqd_t) -1;
-
- __try
- {
- oflag &= (O_CREAT | O_EXCL | O_NONBLOCK);
- nonblock = oflag & O_NONBLOCK;
- oflag &= ~O_NONBLOCK;
-
- again:
- if (oflag & O_CREAT)
- {
- va_start (ap, oflag); /* init ap to final named argument */
- mode = va_arg (ap, mode_t) & ~S_IXUSR;
- attr = va_arg (ap, struct mq_attr *);
- va_end (ap);
-
- /* Open and specify O_EXCL and user-execute */
- fd = open (mqname, oflag | O_EXCL | O_RDWR | O_CLOEXEC,
- mode | S_IXUSR);
- if (fd < 0)
- {
- if (errno == EEXIST && (oflag & O_EXCL) == 0)
- goto exists; /* already exists, OK */
- return (mqd_t) -1;
- }
- created = 1;
- /* First one to create the file initializes it */
- if (attr == NULL)
- attr = &defattr;
- /* Check minimum and maximum values. The max values are pretty much
- arbitrary, taken from the linux mq_overview man page. However,
- these max values make sure that the internal mq_fattr structure
- can use 32 bit types. */
- else if (attr->mq_maxmsg <= 0 || attr->mq_maxmsg > 32768
- || attr->mq_msgsize <= 0 || attr->mq_msgsize > 1048576)
- {
- set_errno (EINVAL);
- __leave;
- }
- /* Calculate and set the file size */
- msgsize = MSGSIZE (attr->mq_msgsize);
- filesize = sizeof (struct mq_hdr)
- + (attr->mq_maxmsg * (sizeof (struct msg_hdr) + msgsize));
- if (lseek64 (fd, filesize - 1, SEEK_SET) == -1)
- __leave;
- if (write (fd, "", 1) == -1)
- __leave;
-
- /* Memory map the file */
- mptr = (int8_t *) mmap64 (NULL, (size_t) filesize,
- PROT_READ | PROT_WRITE,
- MAP_SHARED, fd, 0);
- if (mptr == (int8_t *) MAP_FAILED)
- __leave;
-
- /* Allocate one mq_info{} for the queue */
- if (!(mqinfo = (struct mq_info *)
- calloc (1, sizeof (struct mq_info))))
- __leave;
- mqinfo->mqi_hdr = mqhdr = (struct mq_hdr *) mptr;
- mqinfo->mqi_magic = MQI_MAGIC;
- mqinfo->mqi_flags = nonblock;
-
- /* Initialize header at beginning of file */
- /* Create free list with all messages on it */
- mqhdr->mqh_attr.mq_flags = 0;
- mqhdr->mqh_attr.mq_maxmsg = attr->mq_maxmsg;
- mqhdr->mqh_attr.mq_msgsize = attr->mq_msgsize;
- mqhdr->mqh_attr.mq_curmsgs = 0;
- mqhdr->mqh_nwait = 0;
- mqhdr->mqh_pid = 0;
- NtAllocateLocallyUniqueId (&luid);
- __small_sprintf (mqhdr->mqh_uname, "%016X%08x%08x",
- hash_path_name (0,mqname),
- luid.HighPart, luid.LowPart);
- mqhdr->mqh_head = 0;
- mqhdr->mqh_magic = MQI_MAGIC;
- index = sizeof (struct mq_hdr);
- mqhdr->mqh_free = index;
- for (i = 0; i < attr->mq_maxmsg - 1; i++)
- {
- msghdr = (struct msg_hdr *) &mptr[index];
- index += sizeof (struct msg_hdr) + msgsize;
- msghdr->msg_next = index;
- }
- msghdr = (struct msg_hdr *) &mptr[index];
- msghdr->msg_next = 0; /* end of free list */
-
- /* Initialize mutex & condition variables */
- i = ipc_mutex_init (&mqinfo->mqi_lock, mqhdr->mqh_uname);
- if (i != 0)
- {
- set_errno (i);
- __leave;
- }
- i = ipc_cond_init (&mqinfo->mqi_waitsend, mqhdr->mqh_uname, 'S');
- if (i != 0)
- {
- set_errno (i);
- __leave;
- }
- i = ipc_cond_init (&mqinfo->mqi_waitrecv, mqhdr->mqh_uname, 'R');
- if (i != 0)
- {
- set_errno (i);
- __leave;
- }
- /* Initialization complete, turn off user-execute bit */
- if (fchmod (fd, mode) == -1)
- __leave;
- close (fd);
- return ((mqd_t) mqinfo);
- }
-
- exists:
- /* Open the file then memory map */
- if ((fd = open (mqname, O_RDWR | O_CLOEXEC)) < 0)
- {
- if (errno == ENOENT && (oflag & O_CREAT))
- goto again;
- __leave;
- }
- /* Make certain initialization is complete */
- for (i = 0; i < MAX_TRIES; i++)
- {
- if (stat64 (mqname, &statbuff) == -1)
- {
- if (errno == ENOENT && (oflag & O_CREAT))
- {
- close (fd);
- fd = -1;
- goto again;
- }
- __leave;
- }
- if ((statbuff.st_mode & S_IXUSR) == 0)
- break;
- sleep (1);
- }
- if (i == MAX_TRIES)
- {
- set_errno (ETIMEDOUT);
- __leave;
- }
-
- filesize = statbuff.st_size;
- mptr = (int8_t *) mmap64 (NULL, (size_t) filesize, PROT_READ | PROT_WRITE,
- MAP_SHARED, fd, 0);
- if (mptr == (int8_t *) MAP_FAILED)
- __leave;
- close (fd);
- fd = -1;
-
- /* Allocate one mq_info{} for each open */
- if (!(mqinfo = (struct mq_info *) calloc (1, sizeof (struct mq_info))))
- __leave;
- mqinfo->mqi_hdr = mqhdr = (struct mq_hdr *) mptr;
- if (mqhdr->mqh_magic != MQI_MAGIC)
- {
- system_printf (
- "Old message queue \"%s\" detected!\n"
- "This file is not usable as message queue anymore due to changes in the "
- "internal file layout. Please remove the file and try again.", mqname);
- set_errno (EACCES);
- __leave;
- }
- mqinfo->mqi_magic = MQI_MAGIC;
- mqinfo->mqi_flags = nonblock;
-
- /* Initialize mutex & condition variable */
- i = ipc_mutex_init (&mqinfo->mqi_lock, mqhdr->mqh_uname);
- if (i != 0)
- {
- set_errno (i);
- __leave;
- }
- i = ipc_cond_init (&mqinfo->mqi_waitsend, mqhdr->mqh_uname, 'S');
- if (i != 0)
- {
- set_errno (i);
- __leave;
- }
- i = ipc_cond_init (&mqinfo->mqi_waitrecv, mqhdr->mqh_uname, 'R');
- if (i != 0)
- {
- set_errno (i);
- __leave;
- }
- return (mqd_t) mqinfo;
- }
- __except (EFAULT) {}
- __endtry
- /* Don't let following function calls change errno */
- save_errno save;
- if (created)
- unlink (mqname);
- if (mptr != (int8_t *) MAP_FAILED)
- munmap((void *) mptr, (size_t) filesize);
- if (mqinfo)
- {
- if (mqinfo->mqi_lock)
- ipc_mutex_close (mqinfo->mqi_lock);
- if (mqinfo->mqi_waitsend)
- ipc_cond_close (mqinfo->mqi_waitsend);
- if (mqinfo->mqi_waitrecv)
- ipc_cond_close (mqinfo->mqi_waitrecv);
- free (mqinfo);
- }
- if (fd >= 0)
- close (fd);
- return (mqd_t) -1;
-}
-
-extern "C" int
-mq_getattr (mqd_t mqd, struct mq_attr *mqstat)
-{
- int n;
- struct mq_hdr *mqhdr;
- struct mq_fattr *attr;
- struct mq_info *mqinfo;
-
- __try
- {
- mqinfo = (struct mq_info *) mqd;
- if (mqinfo->mqi_magic != MQI_MAGIC)
- {
- set_errno (EBADF);
- __leave;
- }
- mqhdr = mqinfo->mqi_hdr;
- attr = &mqhdr->mqh_attr;
- if ((n = ipc_mutex_lock (mqinfo->mqi_lock)) != 0)
- {
- errno = n;
- __leave;
- }
- mqstat->mq_flags = mqinfo->mqi_flags; /* per-open */
- mqstat->mq_maxmsg = attr->mq_maxmsg; /* remaining three per-queue */
- mqstat->mq_msgsize = attr->mq_msgsize;
- mqstat->mq_curmsgs = attr->mq_curmsgs;
-
- ipc_mutex_unlock (mqinfo->mqi_lock);
- return 0;
- }
- __except (EBADF) {}
- __endtry
- return -1;
-}
-
-extern "C" int
-mq_setattr (mqd_t mqd, const struct mq_attr *mqstat, struct mq_attr *omqstat)
-{
- int n;
- struct mq_hdr *mqhdr;
- struct mq_fattr *attr;
- struct mq_info *mqinfo;
-
- __try
- {
- mqinfo = (struct mq_info *) mqd;
- if (mqinfo->mqi_magic != MQI_MAGIC)
- {
- set_errno (EBADF);
- __leave;
- }
- mqhdr = mqinfo->mqi_hdr;
- attr = &mqhdr->mqh_attr;
- if ((n = ipc_mutex_lock (mqinfo->mqi_lock)) != 0)
- {
- errno = n;
- __leave;
- }
-
- if (omqstat != NULL)
- {
- omqstat->mq_flags = mqinfo->mqi_flags; /* previous attributes */
- omqstat->mq_maxmsg = attr->mq_maxmsg;
- omqstat->mq_msgsize = attr->mq_msgsize;
- omqstat->mq_curmsgs = attr->mq_curmsgs; /* and current status */
- }
-
- if (mqstat->mq_flags & O_NONBLOCK)
- mqinfo->mqi_flags |= O_NONBLOCK;
- else
- mqinfo->mqi_flags &= ~O_NONBLOCK;
-
- ipc_mutex_unlock (mqinfo->mqi_lock);
- return 0;
- }
- __except (EBADF) {}
- __endtry
- return -1;
-}
-
-extern "C" int
-mq_notify (mqd_t mqd, const struct sigevent *notification)
-{
- int n;
- pid_t pid;
- struct mq_hdr *mqhdr;
- struct mq_info *mqinfo;
-
- __try
- {
- mqinfo = (struct mq_info *) mqd;
- if (mqinfo->mqi_magic != MQI_MAGIC)
- {
- set_errno (EBADF);
- __leave;
- }
- mqhdr = mqinfo->mqi_hdr;
- if ((n = ipc_mutex_lock (mqinfo->mqi_lock)) != 0)
- {
- errno = n;
- __leave;
- }
-
- pid = getpid ();
- if (!notification)
- {
- if (mqhdr->mqh_pid == pid)
- mqhdr->mqh_pid = 0; /* unregister calling process */
- }
- else
- {
- if (mqhdr->mqh_pid != 0)
- {
- if (kill (mqhdr->mqh_pid, 0) != -1 || errno != ESRCH)
- {
- set_errno (EBUSY);
- ipc_mutex_unlock (mqinfo->mqi_lock);
- __leave;
- }
- }
- mqhdr->mqh_pid = pid;
- mqhdr->mqh_event = *notification;
- }
- ipc_mutex_unlock (mqinfo->mqi_lock);
- return 0;
- }
- __except (EBADF) {}
- __endtry
- return -1;
-}
-
-static int
-_mq_send (mqd_t mqd, const char *ptr, size_t len, unsigned int prio,
- const struct timespec *abstime)
-{
- int n;
- long index, freeindex;
- int8_t *mptr;
- struct sigevent *sigev;
- struct mq_hdr *mqhdr;
- struct mq_fattr *attr;
- struct msg_hdr *msghdr, *nmsghdr, *pmsghdr;
- struct mq_info *mqinfo = NULL;
- bool ipc_mutex_locked = false;
- int ret = -1;
-
- pthread_testcancel ();
-
- __try
- {
- mqinfo = (struct mq_info *) mqd;
- if (mqinfo->mqi_magic != MQI_MAGIC)
- {
- set_errno (EBADF);
- __leave;
- }
- if (prio > MQ_PRIO_MAX)
- {
- set_errno (EINVAL);
- __leave;
- }
-
- mqhdr = mqinfo->mqi_hdr; /* struct pointer */
- mptr = (int8_t *) mqhdr; /* byte pointer */
- attr = &mqhdr->mqh_attr;
- if ((n = ipc_mutex_lock (mqinfo->mqi_lock)) != 0)
- {
- errno = n;
- __leave;
- }
- ipc_mutex_locked = true;
- if (len > (size_t) attr->mq_msgsize)
- {
- set_errno (EMSGSIZE);
- __leave;
- }
- if (attr->mq_curmsgs == 0)
- {
- if (mqhdr->mqh_pid != 0 && mqhdr->mqh_nwait == 0)
- {
- sigev = &mqhdr->mqh_event;
- if (sigev->sigev_notify == SIGEV_SIGNAL)
- sigqueue (mqhdr->mqh_pid, sigev->sigev_signo,
- sigev->sigev_value);
- mqhdr->mqh_pid = 0; /* unregister */
- }
- }
- else if (attr->mq_curmsgs >= attr->mq_maxmsg)
- {
- /* Queue is full */
- if (mqinfo->mqi_flags & O_NONBLOCK)
- {
- set_errno (EAGAIN);
- __leave;
- }
- /* Wait for room for one message on the queue */
- while (attr->mq_curmsgs >= attr->mq_maxmsg)
- {
- int ret = ipc_cond_timedwait (mqinfo->mqi_waitsend,
- mqinfo->mqi_lock, abstime);
- if (ret != 0)
- {
- set_errno (ret);
- __leave;
- }
- }
- }
-
- /* nmsghdr will point to new message */
- if ((freeindex = mqhdr->mqh_free) == 0)
- api_fatal ("mq_send: curmsgs = %ld; free = 0", attr->mq_curmsgs);
-
- nmsghdr = (struct msg_hdr *) &mptr[freeindex];
- nmsghdr->msg_prio = prio;
- nmsghdr->msg_len = len;
- memcpy (nmsghdr + 1, ptr, len); /* copy message from caller */
- mqhdr->mqh_free = nmsghdr->msg_next; /* new freelist head */
-
- /* Find right place for message in linked list */
- index = mqhdr->mqh_head;
- pmsghdr = (struct msg_hdr *) &(mqhdr->mqh_head);
- while (index)
- {
- msghdr = (struct msg_hdr *) &mptr[index];
- if (prio > msghdr->msg_prio)
- {
- nmsghdr->msg_next = index;
- pmsghdr->msg_next = freeindex;
- break;
- }
- index = msghdr->msg_next;
- pmsghdr = msghdr;
- }
- if (index == 0)
- {
- /* Queue was empty or new goes at end of list */
- pmsghdr->msg_next = freeindex;
- nmsghdr->msg_next = 0;
- }
- /* Wake up anyone blocked in mq_receive waiting for a message */
- if (attr->mq_curmsgs == 0)
- ipc_cond_signal (mqinfo->mqi_waitrecv);
- attr->mq_curmsgs++;
-
- ipc_mutex_unlock (mqinfo->mqi_lock);
- ret = 0;
- }
- __except (EBADF) {}
- __endtry
- if (ipc_mutex_locked)
- ipc_mutex_unlock (mqinfo->mqi_lock);
- return ret;
-}
-
-extern "C" int
-mq_send (mqd_t mqd, const char *ptr, size_t len, unsigned int prio)
-{
- return _mq_send (mqd, ptr, len, prio, NULL);
-}
-
-extern "C" int
-mq_timedsend (mqd_t mqd, const char *ptr, size_t len, unsigned int prio,
- const struct timespec *abstime)
-{
- return _mq_send (mqd, ptr, len, prio, abstime);
-}
-
-static ssize_t
-_mq_receive (mqd_t mqd, char *ptr, size_t maxlen, unsigned int *priop,
- const struct timespec *abstime)
-{
- int n;
- long index;
- int8_t *mptr;
- ssize_t len = -1;
- struct mq_hdr *mqhdr;
- struct mq_fattr *attr;
- struct msg_hdr *msghdr;
- struct mq_info *mqinfo = (struct mq_info *) mqd;
- bool ipc_mutex_locked = false;
-
- pthread_testcancel ();
-
- __try
- {
- if (mqinfo->mqi_magic != MQI_MAGIC)
- {
- set_errno (EBADF);
- __leave;
- }
- mqhdr = mqinfo->mqi_hdr; /* struct pointer */
- mptr = (int8_t *) mqhdr; /* byte pointer */
- attr = &mqhdr->mqh_attr;
- if ((n = ipc_mutex_lock (mqinfo->mqi_lock)) != 0)
- {
- errno = n;
- __leave;
- }
- ipc_mutex_locked = true;
- if (maxlen < (size_t) attr->mq_msgsize)
- {
- set_errno (EMSGSIZE);
- __leave;
- }
- if (attr->mq_curmsgs == 0) /* queue is empty */
- {
- if (mqinfo->mqi_flags & O_NONBLOCK)
- {
- set_errno (EAGAIN);
- __leave;
- }
- /* Wait for a message to be placed onto queue */
- mqhdr->mqh_nwait++;
- while (attr->mq_curmsgs == 0)
- {
- int ret = ipc_cond_timedwait (mqinfo->mqi_waitrecv,
- mqinfo->mqi_lock, abstime);
- if (ret != 0)
- {
- set_errno (ret);
- __leave;
- }
- }
- mqhdr->mqh_nwait--;
- }
-
- if ((index = mqhdr->mqh_head) == 0)
- api_fatal ("mq_receive: curmsgs = %ld; head = 0", attr->mq_curmsgs);
-
- msghdr = (struct msg_hdr *) &mptr[index];
- mqhdr->mqh_head = msghdr->msg_next; /* new head of list */
- len = msghdr->msg_len;
- memcpy(ptr, msghdr + 1, len); /* copy the message itself */
- if (priop != NULL)
- *priop = msghdr->msg_prio;
-
- /* Just-read message goes to front of free list */
- msghdr->msg_next = mqhdr->mqh_free;
- mqhdr->mqh_free = index;
-
- /* Wake up anyone blocked in mq_send waiting for room */
- if (attr->mq_curmsgs == attr->mq_maxmsg)
- ipc_cond_signal (mqinfo->mqi_waitsend);
- attr->mq_curmsgs--;
-
- ipc_mutex_unlock (mqinfo->mqi_lock);
- }
- __except (EBADF) {}
- __endtry
- if (ipc_mutex_locked)
- ipc_mutex_unlock (mqinfo->mqi_lock);
- return len;
-}
-
-extern "C" ssize_t
-mq_receive (mqd_t mqd, char *ptr, size_t maxlen, unsigned int *priop)
-{
- return _mq_receive (mqd, ptr, maxlen, priop, NULL);
-}
-
-extern "C" ssize_t
-mq_timedreceive (mqd_t mqd, char *ptr, size_t maxlen, unsigned int *priop,
- const struct timespec *abstime)
-{
- return _mq_receive (mqd, ptr, maxlen, priop, abstime);
-}
-
-extern "C" int
-mq_close (mqd_t mqd)
-{
- long msgsize, filesize;
- struct mq_hdr *mqhdr;
- struct mq_fattr *attr;
- struct mq_info *mqinfo;
-
- __try
- {
- mqinfo = (struct mq_info *) mqd;
- if (mqinfo->mqi_magic != MQI_MAGIC)
- {
- set_errno (EBADF);
- __leave;
- }
- mqhdr = mqinfo->mqi_hdr;
- attr = &mqhdr->mqh_attr;
-
- if (mq_notify (mqd, NULL)) /* unregister calling process */
- __leave;
-
- msgsize = MSGSIZE (attr->mq_msgsize);
- filesize = sizeof (struct mq_hdr)
- + (attr->mq_maxmsg * (sizeof (struct msg_hdr) + msgsize));
- if (munmap (mqinfo->mqi_hdr, filesize) == -1)
- __leave;
-
- mqinfo->mqi_magic = 0; /* just in case */
- ipc_cond_close (mqinfo->mqi_waitsend);
- ipc_cond_close (mqinfo->mqi_waitrecv);
- ipc_mutex_close (mqinfo->mqi_lock);
- free (mqinfo);
- return 0;
- }
- __except (EBADF) {}
- __endtry
- return -1;
-}
-
-extern "C" int
-mq_unlink (const char *name)
-{
- size_t len = strlen (name);
- char mqname[ipc_names[mqueue].prefix_len + len];
-
- if (!check_path (mqname, mqueue, name, len))
- return -1;
- if (unlink (mqname) == -1)
- return -1;
- return 0;
-}
-
-/* POSIX named semaphore implementation. Loosely based on Richard W. STEPHENS
- implementation as far as sem_open is concerned, but under the hood using
- the already existing semaphore class in thread.cc. Using a file backed
- solution allows to implement kernel persistent named semaphores. */
-
-struct sem_finfo
-{
- unsigned int value;
- unsigned long long hash;
- LUID luid;
-};
-
-extern "C" sem_t *
-sem_open (const char *name, int oflag, ...)
-{
- int i, fd = -1, created = 0;
- va_list ap;
- mode_t mode = 0;
- unsigned int value = 0;
- struct stat statbuff;
- sem_t *sem = SEM_FAILED;
- sem_finfo sf;
- bool wasopen = false;
- ipc_flock file;
-
- size_t len = strlen (name);
- char semname[ipc_names[semaphore].prefix_len + len];
-
- if (!check_path (semname, semaphore, name, len))
- return SEM_FAILED;
-
- __try
- {
- oflag &= (O_CREAT | O_EXCL);
-
- again:
- if (oflag & O_CREAT)
- {
- va_start (ap, oflag); /* init ap to final named argument */
- mode = va_arg (ap, mode_t) & ~S_IXUSR;
- value = va_arg (ap, unsigned int);
- va_end (ap);
-
- /* Open and specify O_EXCL and user-execute */
- fd = open (semname, oflag | O_EXCL | O_RDWR | O_CLOEXEC,
- mode | S_IXUSR);
- if (fd < 0)
- {
- if (errno == EEXIST && (oflag & O_EXCL) == 0)
- goto exists; /* already exists, OK */
- return SEM_FAILED;
- }
- created = 1;
- /* First one to create the file initializes it. */
- NtAllocateLocallyUniqueId (&sf.luid);
- sf.value = value;
- sf.hash = hash_path_name (0, semname);
- if (write (fd, &sf, sizeof sf) != sizeof sf)
- __leave;
- sem = semaphore::open (sf.hash, sf.luid, fd, oflag, mode, value,
- wasopen);
- if (sem == SEM_FAILED)
- __leave;
- /* Initialization complete, turn off user-execute bit */
- if (fchmod (fd, mode) == -1)
- __leave;
- /* Don't close (fd); */
- return sem;
- }
-
- exists:
- /* Open the file and fetch the semaphore name. */
- if ((fd = open (semname, O_RDWR | O_CLOEXEC)) < 0)
- {
- if (errno == ENOENT && (oflag & O_CREAT))
- goto again;
- __leave;
- }
- /* Make certain initialization is complete */
- for (i = 0; i < MAX_TRIES; i++)
- {
- if (stat64 (semname, &statbuff) == -1)
- {
- if (errno == ENOENT && (oflag & O_CREAT))
- {
- close (fd);
- fd = -1;
- goto again;
- }
- __leave;
- }
- if ((statbuff.st_mode & S_IXUSR) == 0)
- break;
- sleep (1);
- }
- if (i == MAX_TRIES)
- {
- set_errno (ETIMEDOUT);
- __leave;
- }
- if (file.lock (fd, sizeof sf))
- __leave;
- if (read (fd, &sf, sizeof sf) != sizeof sf)
- __leave;
- sem = semaphore::open (sf.hash, sf.luid, fd, oflag, mode, sf.value,
- wasopen);
- file.unlock (fd);
- if (sem == SEM_FAILED)
- __leave;
- /* If wasopen is set, the semaphore was already opened and we already have
- an open file descriptor pointing to the file. This means, we have to
- close the file descriptor created in this call. It won't be stored
- anywhere anyway. */
- if (wasopen)
- close (fd);
- return sem;
- }
- __except (EFAULT) {}
- __endtry
- /* Don't let following function calls change errno */
- save_errno save;
-
- if (fd >= 0)
- file.unlock (fd);
- if (created)
- unlink (semname);
- if (sem != SEM_FAILED)
- semaphore::close (sem);
- if (fd >= 0)
- close (fd);
- return SEM_FAILED;
-}
-
-int
-_sem_close (sem_t *sem, bool do_close)
-{
- sem_finfo sf;
- int fd, ret = -1;
- ipc_flock file;
-
- if (semaphore::getinternal (sem, &fd, &sf.hash, &sf.luid, &sf.value) == -1)
- return -1;
- if (!file.lock (fd, sizeof sf)
- && lseek64 (fd, 0LL, SEEK_SET) != (off_t) -1
- && write (fd, &sf, sizeof sf) == sizeof sf)
- ret = do_close ? semaphore::close (sem) : 0;
-
- /* Don't let following function calls change errno */
- save_errno save;
- file.unlock (fd);
- close (fd);
-
- return ret;
-}
-
-extern "C" int
-sem_close (sem_t *sem)
-{
- return _sem_close (sem, true);
-}
-
-extern "C" int
-sem_unlink (const char *name)
-{
- size_t len = strlen (name);
- char semname[ipc_names[semaphore].prefix_len + len];
-
- if (!check_path (semname, semaphore, name, len))
- return -1;
- if (unlink (semname) == -1)
- return -1;
- return 0;
-}
diff --git a/winsup/cygwin/profil.c b/winsup/cygwin/profil.c
deleted file mode 100644
index eb41c0844..000000000
--- a/winsup/cygwin/profil.c
+++ /dev/null
@@ -1,209 +0,0 @@
-/* profil.c -- win32 profil.c equivalent
-
- Copyright 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
-
- This file is part of Cygwin.
-
- This software is a copyrighted work licensed under the terms of the
- Cygwin license. Please consult the file "CYGWIN_LICENSE" for
- details. */
-
-/*
- * This file is taken from Cygwin distribution. Please keep it in sync.
- * The differences should be within __MINGW32__ guard.
- */
-
-#ifndef WIN32_LEAN_AND_MEAN
-#define WIN32_LEAN_AND_MEAN
-#endif
-#include <windows.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <errno.h>
-#include <math.h>
-#include "profil.h"
-
-#define SLEEPTIME (1000 / PROF_HZ)
-
-/* global profinfo for profil() call */
-static struct profinfo prof;
-
-/* Get the pc for thread THR */
-
-static size_t
-get_thrpc (HANDLE thr)
-{
- CONTEXT ctx;
- size_t pc;
- int res;
-
- res = SuspendThread (thr);
- if (res == -1)
- return (size_t) - 1;
- ctx.ContextFlags = CONTEXT_CONTROL | CONTEXT_INTEGER;
- pc = (size_t) - 1;
- if (GetThreadContext (thr, &ctx)) {
-#ifndef _WIN64
- pc = ctx.Eip;
-#else
- pc = ctx.Rip;
-#endif
- }
- ResumeThread (thr);
- return pc;
-}
-
-/* Display cell of profile buffer */
-#if 0
-static void
-print_prof (struct profinfo *p)
-{
- printf ("profthr %x\ttarget thr %x\n", p->profthr, p->targthr);
- printf ("pc: %x - %x\n", p->lowpc, p->highpc);
- printf ("scale: %x\n", p->scale);
- return;
-}
-#endif
-
-/* Everytime we wake up use the main thread pc to hash into the cell in the
- profile buffer ARG. */
-
-static void CALLBACK profthr_func (LPVOID);
-
-static void CALLBACK
-profthr_func (LPVOID arg)
-{
- struct profinfo *p = (struct profinfo *) arg;
- size_t pc, idx;
-
- for (;;)
- {
- pc = (size_t) get_thrpc (p->targthr);
- if (pc >= p->lowpc && pc < p->highpc)
- {
- idx = PROFIDX (pc, p->lowpc, p->scale);
- p->counter[idx]++;
- }
-#if 0
- print_prof (p);
-#endif
- /* Check quit condition, WAIT_OBJECT_0 or WAIT_TIMEOUT */
- if (WaitForSingleObject (p->quitevt, SLEEPTIME) == WAIT_OBJECT_0)
- return;
- }
-}
-
-/* Stop profiling to the profiling buffer pointed to by P. */
-
-static int
-profile_off (struct profinfo *p)
-{
- if (p->profthr)
- {
- SignalObjectAndWait (p->quitevt, p->profthr, INFINITE, FALSE);
- CloseHandle (p->quitevt);
- CloseHandle (p->profthr);
- }
- if (p->targthr)
- CloseHandle (p->targthr);
- return 0;
-}
-
-/* Create a timer thread and pass it a pointer P to the profiling buffer. */
-
-static int
-profile_on (struct profinfo *p)
-{
- DWORD thrid;
-
- /* get handle for this thread */
- if (!DuplicateHandle (GetCurrentProcess (), GetCurrentThread (),
- GetCurrentProcess (), &p->targthr, 0, FALSE,
- DUPLICATE_SAME_ACCESS))
- {
- errno = ESRCH;
- return -1;
- }
-
- p->quitevt = CreateEvent (NULL, TRUE, FALSE, NULL);
-
- if (!p->quitevt)
- {
- CloseHandle (p->quitevt);
- p->targthr = 0;
- errno = EAGAIN;
- return -1;
- }
-
- p->profthr = CreateThread (0, 0, (DWORD (WINAPI *)(LPVOID)) profthr_func,
- (void *) p, 0, &thrid);
-
- if (!p->profthr)
- {
- CloseHandle (p->targthr);
- CloseHandle (p->quitevt);
- p->targthr = 0;
- errno = EAGAIN;
- return -1;
- }
-
- /* Set profiler thread priority to highest to be sure that it gets the
- processor as soon it request it (i.e. when the Sleep terminate) to get
- the next data out of the profile. */
-
- SetThreadPriority (p->profthr, THREAD_PRIORITY_TIME_CRITICAL);
-
- return 0;
-}
-
-/*
- * start or stop profiling
- *
- * profiling goes into the SAMPLES buffer of size SIZE (which is treated
- * as an array of u_shorts of size size/2)
- *
- * each bin represents a range of pc addresses from OFFSET. The number
- * of pc addresses in a bin depends on SCALE. (A scale of 65536 maps
- * each bin to two addresses, A scale of 32768 maps each bin to 4 addresses,
- * a scale of 1 maps each bin to 128k addreses). Scale may be 1 - 65536,
- * or zero to turn off profiling
- */
-int
-profile_ctl (struct profinfo * p, char *samples, size_t size,
- size_t offset, u_int scale)
-{
- size_t maxbin;
-
- if (scale > 65536)
- {
- errno = EINVAL;
- return -1;
- }
-
- profile_off (p);
- if (scale)
- {
- memset (samples, 0, size);
- memset (p, 0, sizeof *p);
- maxbin = size >> 1;
- prof.counter = (u_short *) samples;
- prof.lowpc = offset;
- prof.highpc = PROFADDR (maxbin, offset, scale);
- prof.scale = scale;
-
- return profile_on (p);
- }
- return 0;
-}
-
-/* Equivalent to unix profil()
- Every SLEEPTIME interval, the user's program counter (PC) is examined:
- offset is subtracted and the result is multiplied by scale.
- The word pointed to by this address is incremented. Buf is unused. */
-
-int
-profil (char *samples, size_t size, size_t offset, u_int scale)
-{
- return profile_ctl (&prof, samples, size, offset, scale);
-}
-
diff --git a/winsup/cygwin/profil.h b/winsup/cygwin/profil.h
deleted file mode 100644
index f33591d09..000000000
--- a/winsup/cygwin/profil.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/* profil.h: gprof profiling header file
-
- Copyright 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-/*
- * This file is taken from Cygwin distribution. Please keep it in sync.
- * The differences should be within __MINGW32__ guard.
- */
-
-/* profiling frequency. (No larger than 1000) */
-#define PROF_HZ 100
-
-/* convert an addr to an index */
-#define PROFIDX(pc, base, scale) \
- ({ \
- size_t i = (pc - base) / 2; \
- if (sizeof (unsigned long long int) > sizeof (size_t)) \
- i = (unsigned long long int) i * scale / 65536; \
- else \
- i = i / 65536 * scale + i % 65536 * scale / 65536; \
- i; \
- })
-
-/* convert an index into an address */
-#define PROFADDR(idx, base, scale) \
- ((base) \
- + ((((unsigned long long)(idx) << 16) \
- / (unsigned long long)(scale)) << 1))
-
-/* convert a bin size into a scale */
-#define PROFSCALE(range, bins) (((bins) << 16) / ((range) >> 1))
-
-typedef void *_WINHANDLE;
-#ifdef __MINGW32__
-#include <_bsd_types.h>
-#endif /* __MINGW32__*/
-
-struct profinfo {
- _WINHANDLE targthr; /* thread to profile */
- _WINHANDLE profthr; /* profiling thread */
- _WINHANDLE quitevt; /* quit event */
- u_short *counter; /* profiling counters */
- size_t lowpc, highpc; /* range to be profiled */
- u_int scale; /* scale value of bins */
-};
-
-int profile_ctl(struct profinfo *, char *, size_t, size_t, u_int);
-int profil(char *, size_t, size_t, u_int);
-
diff --git a/winsup/cygwin/pseudo-reloc.cc b/winsup/cygwin/pseudo-reloc.cc
deleted file mode 100644
index bdcde2a4b..000000000
--- a/winsup/cygwin/pseudo-reloc.cc
+++ /dev/null
@@ -1,385 +0,0 @@
-/* pseudo-reloc.cc
-
- Contributed by Egor Duda <deo@logos-m.ru>
- Modified by addition of runtime_pseudo_reloc version 2
- by Kai Tietz <kai.tietz@onevision.com>
-
- THIS SOFTWARE IS NOT COPYRIGHTED
-
- This source code is offered for use in the public domain. You may
- use, modify or distribute it freely.
-
- This code is distributed in the hope that it will be useful but
- WITHOUT ANY WARRANTY. ALL WARRENTIES, EXPRESS OR IMPLIED ARE HEREBY
- DISCLAMED. This includes but is not limited to warrenties of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-*/
-
-#ifndef __CYGWIN__
-# include "windows.h"
-# define NO_COPY
-#else
-# include "winsup.h"
-# include <sys/cygwin.h>
-/* custom status code: */
-# define STATUS_ILLEGAL_DLL_PSEUDO_RELOCATION ((NTSTATUS) 0xe0000269)
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <memory.h>
-
-#ifdef __GNUC__
-#define ATTRIBUTE_NORETURN __attribute__ ((noreturn))
-#else
-#define ATTRIBUTE_NORETURN
-#endif
-
-#ifndef __MINGW_LSYMBOL
-#define __MINGW_LSYMBOL(sym) sym
-#endif
-
-extern char __RUNTIME_PSEUDO_RELOC_LIST__;
-extern char __RUNTIME_PSEUDO_RELOC_LIST_END__;
-extern char __MINGW_LSYMBOL(_image_base__);
-
-/* v1 relocation is basically:
- * *(base + .target) += .addend
- * where (base + .target) is always assumed to point
- * to a DWORD (4 bytes).
- */
-typedef struct {
- DWORD addend;
- DWORD target;
-} runtime_pseudo_reloc_item_v1;
-
-/* v2 relocation is more complex. In effect, it is
- * *(base + .target) += *(base + .sym) - (base + .sym)
- * with care taken in both reading, sign extension, and writing
- * because .flags may indicate that (base + .target) may point
- * to a BYTE, WORD, DWORD, or QWORD (w64).
- */
-typedef struct {
- DWORD sym;
- DWORD target;
- DWORD flags;
-} runtime_pseudo_reloc_item_v2;
-
-typedef struct {
- DWORD magic1;
- DWORD magic2;
- DWORD version;
-} runtime_pseudo_reloc_v2;
-
-static void ATTRIBUTE_NORETURN
-__report_error (const char *msg, ...)
-{
-#ifdef __CYGWIN__
- /* This function is used to print short error messages
- * to stderr, which may occur during DLL initialization
- * while fixing up 'pseudo' relocations. This early, we
- * may not be able to use cygwin stdio functions, so we
- * use the win32 WriteFile api. This should work with both
- * normal win32 console IO handles, redirected ones, and
- * cygwin ptys.
- */
- char buf[128];
- WCHAR module[PATH_MAX];
- char * posix_module = NULL;
- static const char UNKNOWN_MODULE[] = "<unknown module>: ";
- static const char CYGWIN_FAILURE_MSG[] = "Cygwin runtime failure: ";
- HANDLE errh = GetStdHandle (STD_ERROR_HANDLE);
- ssize_t modulelen = GetModuleFileNameW (NULL, module, PATH_MAX);
- va_list args;
-
- /* FIXME: cleanup further to avoid old use of cygwin_internal */
- if (errh == INVALID_HANDLE_VALUE)
- cygwin_internal (CW_EXIT_PROCESS, STATUS_ILLEGAL_DLL_PSEUDO_RELOCATION, 1);
-
- if (modulelen > 0)
- posix_module = (char *) cygwin_create_path (CCP_WIN_W_TO_POSIX, module);
-
- va_start (args, msg);
- vsnprintf (buf, sizeof (buf), msg, args);
- va_end (args);
- buf[sizeof (buf) - 1] = '\0'; /* paranoia */
-
- small_printf ("%s%s: %s\n", CYGWIN_FAILURE_MSG, posix_module ?: UNKNOWN_MODULE, buf);
- if (posix_module)
- free (posix_module);
-
- cygwin_internal (CW_EXIT_PROCESS, STATUS_ILLEGAL_DLL_PSEUDO_RELOCATION, 1);
- /* not reached, but silences noreturn warning */
- abort ();
-#else
- va_list argp;
- va_start (argp, msg);
-# ifdef __MINGW64_VERSION_MAJOR
- fprintf (stderr, "Mingw-w64 runtime failure:\n");
-# else
- fprintf (stderr, "Mingw runtime failure:\n");
-# endif
- vfprintf (stderr, msg, argp);
- va_end (argp);
- abort ();
-#endif
-}
-
-/*
- * This function automatically sets addr as PAGE_EXECUTE_READWRITE
- * by deciding whether VirtualQuery for the addr is actually needed.
- * And it assumes that it is called in LdrpCallInitRoutine.
- * Hence not thread safe.
- */
-static void
-auto_protect_for (void* addr)
-{
- static MEMORY_BASIC_INFORMATION mbi;
- static bool state = false;
- static DWORD oldprot;
-
- if (!addr)
- {
- /* Restore original protection. */
- if (!(mbi.Protect & (PAGE_EXECUTE_READWRITE | PAGE_READWRITE)))
- VirtualProtect (mbi.BaseAddress, mbi.RegionSize, oldprot, &oldprot);
- state = false;
- return;
- }
- if (state)
- {
- /* We have valid region information. Are we still within this region?
- If so, just leave. */
- void *ptr = ((void*) ((ptrdiff_t) mbi.BaseAddress + mbi.RegionSize));
- if (addr >= mbi.BaseAddress && addr < ptr)
- return;
- /* Otherwise, restore original protection and fall through to querying
- and potentially changing next region. */
- if (!(mbi.Protect & (PAGE_EXECUTE_READWRITE | PAGE_READWRITE)))
- VirtualProtect (mbi.BaseAddress, mbi.RegionSize, oldprot, &oldprot);
- }
- else
- state = true;
- /* Query region and temporarily allow write access to read-only protected
- memory. */
- VirtualQuery (addr, &mbi, sizeof mbi);
- if (!(mbi.Protect & (PAGE_EXECUTE_READWRITE | PAGE_READWRITE)))
- VirtualProtect (mbi.BaseAddress, mbi.RegionSize,
- PAGE_EXECUTE_READWRITE, &oldprot);
-}
-
-/* This function temporarily marks the page containing addr
- * writable, before copying len bytes from *src to *addr, and
- * then restores the original protection settings to the page.
- *
- * Using this function eliminates the requirement with older
- * pseudo-reloc implementations, that sections containing
- * pseudo-relocs (such as .text and .rdata) be permanently
- * marked writable. This older behavior sabotaged any memory
- * savings achieved by shared libraries on win32 -- and was
- * slower, too. However, on cygwin as of binutils 2.20 the
- * .text section is still marked writable, and the .rdata section
- * is folded into the (writable) .data when --enable-auto-import.
- */
-static void
-__write_memory (void *addr, const void *src, size_t len)
-{
- if (!len)
- return;
- /* Fix page protection for writing. */
- auto_protect_for (addr);
- /* write the data. */
- memcpy (addr, src, len);
-}
-
-#define RP_VERSION_V1 0
-#define RP_VERSION_V2 1
-
-static void
-do_pseudo_reloc (void * start, void * end, void * base)
-{
- ptrdiff_t addr_imp, reldata;
- ptrdiff_t reloc_target = (ptrdiff_t) ((char *)end - (char*)start);
- runtime_pseudo_reloc_v2 *v2_hdr = (runtime_pseudo_reloc_v2 *) start;
- runtime_pseudo_reloc_item_v2 *r;
-
- /* A valid relocation list will contain at least one entry, and
- * one v1 data structure (the smallest one) requires two DWORDs.
- * So, if the relocation list is smaller than 8 bytes, bail.
- */
- if (reloc_target < 8)
- return;
-
- /* Check if this is the old pseudo relocation version. */
- /* There are two kinds of v1 relocation lists:
- * 1) With a (v2-style) version header. In this case, the
- * first entry in the list is a 3-DWORD structure, with
- * value:
- * { 0, 0, RP_VERSION_V1 }
- * In this case, we skip to the next entry in the list,
- * knowing that all elements after the head item can
- * be cast to runtime_pseudo_reloc_item_v1.
- * 2) Without a (v2-style) version header. In this case, the
- * first element in the list IS an actual v1 relocation
- * record, which is two DWORDs. Because there will never
- * be a case where a v1 relocation record has both
- * addend == 0 and target == 0, this case will not be
- * confused with the prior one.
- * All current binutils, when generating a v1 relocation list,
- * use the second (e.g. original) form -- that is, without the
- * v2-style version header.
- */
- if (reloc_target >= 12
- && v2_hdr->magic1 == 0 && v2_hdr->magic2 == 0
- && v2_hdr->version == RP_VERSION_V1)
- {
- /* We have a list header item indicating that the rest
- * of the list contains v1 entries. Move the pointer to
- * the first true v1 relocation record. By definition,
- * that v1 element will not have both addend == 0 and
- * target == 0 (and thus, when interpreted as a
- * runtime_pseudo_reloc_v2, it will not have both
- * magic1 == 0 and magic2 == 0).
- */
- v2_hdr++;
- }
-
- if (v2_hdr->magic1 != 0 || v2_hdr->magic2 != 0)
- {
- /*************************
- * Handle v1 relocations *
- *************************/
- runtime_pseudo_reloc_item_v1 * o;
- for (o = (runtime_pseudo_reloc_item_v1 *) v2_hdr;
- o < (runtime_pseudo_reloc_item_v1 *)end;
- o++)
- {
- DWORD newval;
- reloc_target = (ptrdiff_t) base + o->target;
- newval = (*((DWORD*) reloc_target)) + o->addend;
- __write_memory ((void *) reloc_target, &newval, sizeof (DWORD));
- }
- /* Restore original protection. */
- auto_protect_for (NULL);
- return;
- }
-
- /* If we got this far, then we have relocations of version 2 or newer */
-
- /* Check if this is a known version. */
- if (v2_hdr->version != RP_VERSION_V2)
- {
- __report_error (" Unknown pseudo relocation protocol version %d.\n",
- (int) v2_hdr->version);
- return;
- }
-
- /*************************
- * Handle v2 relocations *
- *************************/
-
- /* Walk over header. */
- r = (runtime_pseudo_reloc_item_v2 *) &v2_hdr[1];
-
- for (; r < (runtime_pseudo_reloc_item_v2 *) end; r++)
- {
- /* location where new address will be written */
- reloc_target = (ptrdiff_t) base + r->target;
-
- /* get sym pointer. It points either to the iat entry
- * of the referenced element, or to the stub function.
- */
- addr_imp = (ptrdiff_t) base + r->sym;
- addr_imp = *((ptrdiff_t *) addr_imp);
-
- /* read existing relocation value from image, casting to the
- * bitsize indicated by the 8 LSBs of flags. If the value is
- * negative, manually sign-extend to ptrdiff_t width. Raise an
- * error if the bitsize indicated by the 8 LSBs of flags is not
- * supported.
- */
- switch ((r->flags & 0xff))
- {
- case 8:
- reldata = (ptrdiff_t) (*((unsigned char *)reloc_target));
- if ((reldata & 0x80) != 0)
- reldata |= ~((ptrdiff_t) 0xff);
- break;
- case 16:
- reldata = (ptrdiff_t) (*((unsigned short *)reloc_target));
- if ((reldata & 0x8000) != 0)
- reldata |= ~((ptrdiff_t) 0xffff);
- break;
- case 32:
- reldata = (ptrdiff_t) (*((unsigned int *)reloc_target));
-#if defined (__x86_64__) || defined (_WIN64)
- if ((reldata & 0x80000000) != 0)
- reldata |= ~((ptrdiff_t) 0xffffffff);
-#endif
- break;
-#if defined (__x86_64__) || defined (_WIN64)
- case 64:
- reldata = (ptrdiff_t) (*((unsigned long long *)reloc_target));
- break;
-#endif
- default:
- reldata=0;
- __report_error (" Unknown pseudo relocation bit size %d.\n",
- (int) (r->flags & 0xff));
- break;
- }
-
- /* Adjust the relocation value */
- reldata -= ((ptrdiff_t) base + r->sym);
- reldata += addr_imp;
-
- /* Write the new relocation value back to *reloc_target */
- switch ((r->flags & 0xff))
- {
- case 8:
- __write_memory ((void *) reloc_target, &reldata, 1);
- break;
- case 16:
- __write_memory ((void *) reloc_target, &reldata, 2);
- break;
- case 32:
-#if defined (__CYGWIN__) && defined (__x86_64__) && !defined (__OPTIMIZE__)
- if (reldata > (ptrdiff_t) __INT32_MAX__
- || reldata < -((ptrdiff_t) __INT32_MAX__) - 1)
- __report_error ("Invalid relocation. Offset %p at address %p "
- "doesn't fit into 32 bits", reldata, reloc_target);
-#endif
- __write_memory ((void *) reloc_target, &reldata, 4);
- break;
-#if defined (__x86_64__) || defined (_WIN64)
- case 64:
- __write_memory ((void *) reloc_target, &reldata, 8);
- break;
-#endif
- }
- }
- /* Restore original protection. */
- auto_protect_for (NULL);
-}
-
-#ifdef __CYGWIN__
-extern "C" void
-_pei386_runtime_relocator (per_process *u)
-{
- if (u && CYGWIN_VERSION_USE_PSEUDO_RELOC_IN_DLL (u))
- do_pseudo_reloc (u->pseudo_reloc_start, u->pseudo_reloc_end, u->image_base);
-}
-#else
-extern "C" void
-_pei386_runtime_relocator (void)
-{
- static NO_COPY int was_init = 0;
- if (was_init)
- return;
- ++was_init;
- do_pseudo_reloc (&__RUNTIME_PSEUDO_RELOC_LIST__,
- &__RUNTIME_PSEUDO_RELOC_LIST_END__,
- &__MINGW_LSYMBOL(_image_base__));
-}
-#endif
diff --git a/winsup/cygwin/pthread.cc b/winsup/cygwin/pthread.cc
deleted file mode 100644
index 7f12686e7..000000000
--- a/winsup/cygwin/pthread.cc
+++ /dev/null
@@ -1,199 +0,0 @@
-/* pthread.cc: posix pthread interface for Cygwin
-
- Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2007, 2008, 2010, 2011,
- 2013 Red Hat, Inc.
-
- Originally written by Marco Fuykschot <marco@ddi.nl>
-
- This file is part of Cygwin.
-
- This software is a copyrighted work licensed under the terms of the
- Cygwin license. Please consult the file "CYGWIN_LICENSE" for
- details. */
-
-#include "winsup.h"
-#include "thread.h"
-
-extern "C"
-{
-/* ThreadCreation */
-int
-pthread_create (pthread_t *thread, const pthread_attr_t *attr,
- void *(*start_routine) (void *), void *arg)
-{
- return pthread::create (thread, attr, start_routine, arg);
-}
-
-int
-pthread_once (pthread_once_t * once_control, void (*init_routine) (void))
-{
- return pthread::once (once_control, init_routine);
-}
-
-int
-pthread_atfork (void (*prepare)(void), void (*parent)(void), void (*child)(void))
-{
- return pthread::atfork (prepare, parent, child);
-}
-
-/* Thread Exit */
-void
-pthread_exit (void *value_ptr)
-{
- pthread::self ()->exit (value_ptr);
- __builtin_unreachable (); /* FIXME: don't know why this is necessary */
-}
-
-int
-pthread_join (pthread_t thread, void **return_val)
-{
- return pthread::join (&thread, (void **) return_val);
-}
-
-int
-pthread_detach (pthread_t thread)
-{
- return pthread::detach (&thread);
-}
-
-
-/* This isn't a posix call... should we keep it? */
-int
-pthread_suspend (pthread_t thread)
-{
- return pthread::suspend (&thread);
-}
-
-/* same */
-int
-pthread_continue (pthread_t thread)
-{
- return pthread::resume (&thread);
-}
-
-unsigned long
-pthread_getsequence_np (pthread_t * thread)
-{
- if (!pthread::is_good_object (thread))
- return EINVAL;
- return (*thread)->getsequence_np ();
-}
-
-/* ID */
-
-pthread_t pthread_self ()
-{
- return pthread::self ();
-}
-
-/* Mutexes */
-int
-pthread_mutex_init (pthread_mutex_t * mutex, const pthread_mutexattr_t * attr)
-{
- return pthread_mutex::init (mutex, attr, NULL);
-}
-
-/* Spinlocks */
-int
-pthread_spin_init (pthread_spinlock_t *spinlock, int pshared)
-{
- return pthread_spinlock::init (spinlock, pshared);
-}
-
-
-/* Synchronisation */
-int
-pthread_cond_init (pthread_cond_t * cond, const pthread_condattr_t * attr)
-{
- return pthread_cond::init (cond, attr);
-}
-
-/* RW Locks */
-int
-pthread_rwlock_init (pthread_rwlock_t *rwlock, const pthread_rwlockattr_t *attr)
-{
- return pthread_rwlock::init (rwlock, attr);
-}
-
-/* Cancelability */
-
-int
-pthread_cancel (pthread_t thread)
-{
- return pthread::cancel (thread);
-}
-
-int
-pthread_setcancelstate (int state, int *oldstate)
-{
- return pthread::self ()->setcancelstate (state, oldstate);
-}
-
-int
-pthread_setcanceltype (int type, int *oldtype)
-{
- return pthread::self ()->setcanceltype (type, oldtype);
-}
-
-void
-pthread_testcancel ()
-{
- pthread::self ()->testcancel ();
-}
-
-void
-_pthread_cleanup_push (__pthread_cleanup_handler *handler)
-{
- pthread::self ()->push_cleanup_handler (handler);
-}
-
-void
-_pthread_cleanup_pop (int execute)
-{
- pthread::self ()->pop_cleanup_handler (execute);
-}
-
-/* Semaphores */
-int
-sem_init (sem_t * sem, int pshared, unsigned int value)
-{
- return semaphore::init (sem, pshared, value);
-}
-
-int
-sem_destroy (sem_t * sem)
-{
- return semaphore::destroy (sem);
-}
-
-int
-sem_wait (sem_t * sem)
-{
- return semaphore::wait (sem);
-}
-
-int
-sem_trywait (sem_t * sem)
-{
- return semaphore::trywait (sem);
-}
-
-int
-sem_timedwait (sem_t * sem, const struct timespec *abstime)
-{
- return semaphore::timedwait (sem, abstime);
-}
-
-int
-sem_post (sem_t *sem)
-{
- return semaphore::post (sem);
-}
-
-int
-sem_getvalue (sem_t * sem, int *sval)
-{
- return semaphore::getvalue (sem, sval);
-}
-
-}
diff --git a/winsup/cygwin/pwdgrp.h b/winsup/cygwin/pwdgrp.h
deleted file mode 100644
index dfeef5680..000000000
--- a/winsup/cygwin/pwdgrp.h
+++ /dev/null
@@ -1,262 +0,0 @@
-/* pwdgrp.h
-
- Copyright 2001, 2002, 2003, 2014 Red Hat inc.
-
- Stuff common to pwd and grp handling.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#pragma once
-
-#include "sync.h"
-#include "ldap.h"
-#include "miscfuncs.h"
-
-/* These functions are needed to allow searching and walking through
- the passwd and group lists */
-extern struct passwd *internal_getpwsid (cygpsid &, cyg_ldap * = NULL);
-extern struct passwd *internal_getpwsid_from_db (cygpsid &sid);
-extern struct passwd *internal_getpwnam (const char *, cyg_ldap * = NULL);
-extern struct passwd *internal_getpwuid (uid_t, cyg_ldap * = NULL);
-extern struct group *internal_getgrsid (cygpsid &, cyg_ldap * = NULL);
-extern struct group *internal_getgrsid_from_db (cygpsid &sid);
-extern struct group *internal_getgrgid (gid_t, cyg_ldap * = NULL);
-extern struct group *internal_getgrnam (const char *, cyg_ldap * = NULL);
-
-extern int internal_getgroups (int, gid_t *, cyg_ldap *);
-
-/* These functions are called from mkpasswd/mkgroup via cygwin_internal. */
-void *setpwent_filtered (int enums, PCWSTR enum_tdoms);
-void *getpwent_filtered (void *gr);
-void endpwent_filtered (void *gr);
-void *setgrent_filtered (int enums, PCWSTR enum_tdoms);
-void *getgrent_filtered (void *gr);
-void endgrent_filtered (void *gr);
-
-enum fetch_user_arg_type_t {
- SID_arg,
- NAME_arg,
- ID_arg
-};
-
-struct fetch_user_arg_t
-{
- fetch_user_arg_type_t type;
- union {
- cygpsid *sid;
- const char *name;
- uint32_t id;
- };
- /* Only used in fetch_account_from_file/line. */
- size_t len;
-};
-
-struct pg_pwd
-{
- struct passwd p;
- cygsid sid;
- size_t len;
-};
-
-struct pg_grp
-{
- struct group g;
- cygsid sid;
- size_t len;
-};
-
-class pwdgrp
-{
- friend class pg_ent;
- friend class pw_ent;
- friend class gr_ent;
-
- unsigned pwdgrp_buf_elem_size;
- void *pwdgrp_buf;
- bool (pwdgrp::*parse) ();
- UNICODE_STRING path;
- OBJECT_ATTRIBUTES attr;
- LARGE_INTEGER last_modified;
- char *lptr;
- ULONG curr_lines;
- ULONG max_lines;
- static muto pglock;
-
- bool parse_passwd ();
- bool parse_group ();
- char *add_line (char *);
- char *raw_ptr () const {return lptr;}
- char *next_str (char);
- bool next_num (unsigned long&);
- bool next_num (unsigned int& i)
- {
- unsigned long x;
- bool res = next_num (x);
- i = (unsigned int) x;
- return res;
- }
- inline bool next_num (int& i)
- {
- unsigned long x;
- bool res = next_num (x);
- i = (int) x;
- return res;
- }
- void *add_account_post_fetch (char *line, bool lock);
- void *add_account_from_file (cygpsid &sid);
- void *add_account_from_file (const char *name);
- void *add_account_from_file (uint32_t id);
- void *add_account_from_windows (cygpsid &sid, cyg_ldap *pldap = NULL);
- void *add_account_from_windows (const char *name, cyg_ldap *pldap = NULL);
- void *add_account_from_windows (uint32_t id, cyg_ldap *pldap = NULL);
- void *add_account_from_cygserver (cygpsid &sid);
- void *add_account_from_cygserver (const char *name);
- void *add_account_from_cygserver (uint32_t id);
- char *fetch_account_from_line (fetch_user_arg_t &arg, const char *line);
- char *fetch_account_from_file (fetch_user_arg_t &arg);
- char *fetch_account_from_windows (fetch_user_arg_t &arg,
- cyg_ldap *pldap = NULL);
- char *fetch_account_from_cygserver (fetch_user_arg_t &arg);
-
-public:
- ULONG cached_users () const { return curr_lines; }
- ULONG cached_groups () const { return curr_lines; }
- POBJECT_ATTRIBUTES file_attr () { return &attr; }
- bool check_file ();
-
- void init_pwd ();
- bool is_passwd () const { return pwdgrp_buf_elem_size == sizeof (pg_pwd); }
- pg_pwd *passwd () const { return (pg_pwd *) pwdgrp_buf; };
- struct passwd *add_user_from_cygserver (cygpsid &sid)
- { return (struct passwd *) add_account_from_cygserver (sid); }
- struct passwd *add_user_from_cygserver (const char *name)
- { return (struct passwd *) add_account_from_cygserver (name); }
- struct passwd *add_user_from_cygserver (uint32_t id)
- { return (struct passwd *) add_account_from_cygserver (id); }
- struct passwd *add_user_from_file (cygpsid &sid)
- { return (struct passwd *) add_account_from_file (sid); }
- struct passwd *add_user_from_file (const char *name)
- { return (struct passwd *) add_account_from_file (name); }
- struct passwd *add_user_from_file (uint32_t id)
- { return (struct passwd *) add_account_from_file (id); }
- struct passwd *add_user_from_windows (cygpsid &sid, cyg_ldap *pldap = NULL)
- { return (struct passwd *) add_account_from_windows (sid, pldap); }
- struct passwd *add_user_from_windows (const char *name,
- cyg_ldap* pldap = NULL)
- { return (struct passwd *) add_account_from_windows (name, pldap); }
- struct passwd *add_user_from_windows (uint32_t id, cyg_ldap *pldap = NULL)
- { return (struct passwd *) add_account_from_windows (id, pldap); }
- struct passwd *find_user (cygpsid &sid);
- struct passwd *find_user (const char *name);
- struct passwd *find_user (uid_t uid);
-
- void init_grp ();
- bool is_group () const { return pwdgrp_buf_elem_size == sizeof (pg_grp); }
- pg_grp *group () const { return (pg_grp *) pwdgrp_buf; };
- struct group *add_group_from_cygserver (cygpsid &sid)
- { return (struct group *) add_account_from_cygserver (sid); }
- struct group *add_group_from_cygserver (const char *name)
- { return (struct group *) add_account_from_cygserver (name); }
- struct group *add_group_from_cygserver (uint32_t id)
- { return (struct group *) add_account_from_cygserver (id); }
- struct group *add_group_from_file (cygpsid &sid)
- { return (struct group *) add_account_from_file (sid); }
- struct group *add_group_from_file (const char *name)
- { return (struct group *) add_account_from_file (name); }
- struct group *add_group_from_file (uint32_t id)
- { return (struct group *) add_account_from_file (id); }
- struct group *add_group_from_windows (cygpsid &sid, cyg_ldap *pldap = NULL)
- { return (struct group *) add_account_from_windows (sid, pldap); }
- struct group *add_group_from_windows (const char *name,
- cyg_ldap *pldap = NULL)
- { return (struct group *) add_account_from_windows (name, pldap); }
- struct group *add_group_from_windows (uint32_t id, cyg_ldap *pldap = NULL)
- { return (struct group *) add_account_from_windows (id, pldap); }
- struct group *find_group (cygpsid &sid);
- struct group *find_group (const char *name);
- struct group *find_group (gid_t gid);
-};
-
-class pg_ent
-{
-protected:
- pwdgrp pg;
- bool group;
- pg_pwd pwd;
- pg_grp grp;
- NT_readline rl;
- cyg_ldap cldap;
- PCHAR buf;
- ULONG cnt;
- ULONG max;
- ULONG_PTR resume;
- int enums; /* ENUM_xxx values defined in sys/cygwin.h. */
- PCWSTR enum_tdoms;
- bool from_files;
- bool from_db;
- enum {
- rewound = 0,
- from_cache,
- from_file,
- from_builtin,
- from_local,
- from_sam,
- from_ad,
- finished
- } state;
-
- void clear_cache ();
- inline bool nss_db_enum_caches () const { return !!(enums & ENUM_CACHE); }
- inline bool nss_db_enum_files () const { return !!(enums & ENUM_FILES); }
- inline bool nss_db_enum_builtin () const { return !!(enums & ENUM_BUILTIN); }
- inline bool nss_db_enum_local () const { return !!(enums & ENUM_LOCAL); }
- inline bool nss_db_enum_primary () const { return !!(enums & ENUM_PRIMARY); }
- inline bool nss_db_enum_tdom (PWCHAR domain)
- {
- if (enums & ENUM_TDOMS_ALL)
- return true;
- if (!(enums & ENUM_TDOMS) || !enum_tdoms || !domain)
- return false;
- for (PCWSTR td = enum_tdoms; td && *td; td = wcschr (td, L'\0'))
- if (!wcscasecmp (td, domain))
- return true;
- return false;
- }
- virtual void *enumerate_caches () = 0;
- virtual void *enumerate_file ();
- virtual void *enumerate_builtin ();
- virtual void *enumerate_local () = 0;
- virtual void *enumerate_sam ();
- virtual void *enumerate_ad ();
-
-public:
- void setent (bool _group, int _enums = 0, PCWSTR _enum_tdoms = NULL);
- void *getent ();
- void endent (bool _group);
-};
-
-class pw_ent : public pg_ent
-{
- void *enumerate_caches ();
- void *enumerate_local ();
-public:
- inline void setpwent (int _enums = 0, PCWSTR _enum_tdoms = NULL)
- { setent (false, _enums, _enum_tdoms); }
- struct passwd *getpwent ();
- inline void endpwent () { endent (false); }
-};
-
-class gr_ent : public pg_ent
-{
- void *enumerate_caches ();
- void *enumerate_local ();
-public:
- inline void setgrent (int _enums = 0, PCWSTR _enum_tdoms = NULL)
- { setent (true, _enums, _enum_tdoms); }
- struct group *getgrent ();
- inline void endgrent () { endent (true); }
-};
diff --git a/winsup/cygwin/quotactl.cc b/winsup/cygwin/quotactl.cc
deleted file mode 100644
index 96c6134e8..000000000
--- a/winsup/cygwin/quotactl.cc
+++ /dev/null
@@ -1,340 +0,0 @@
-/* quotactl.cc: code for manipulating disk quotas
-
- Copyright 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include "cygtls.h"
-#include "security.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "ntdll.h"
-#include "tls_pbuf.h"
-#include <sys/mount.h>
-#include <sys/quota.h>
-
-#define PGQI_SIZE (sizeof (FILE_GET_QUOTA_INFORMATION) + SECURITY_MAX_SID_SIZE)
-#define PFQI_SIZE (sizeof (FILE_QUOTA_INFORMATION) + SECURITY_MAX_SID_SIZE)
-
-/* Modelled after the Linux quotactl function. */
-extern "C" int
-quotactl (int cmd, const char *special, int id, caddr_t addr)
-{
- ACCESS_MASK access = FILE_READ_DATA;
- cygsid sid;
- path_conv pc;
- tmp_pathbuf tp;
- UNICODE_STRING path;
- OBJECT_ATTRIBUTES attr;
- NTSTATUS status;
- HANDLE fh;
- IO_STATUS_BLOCK io;
- FILE_FS_CONTROL_INFORMATION ffci;
- int ret = 0;
-
- uint32_t subcmd = (uint32_t) cmd >> SUBCMDSHIFT;
- uint32_t type = (uint32_t) cmd & SUBCMDMASK;
-
- if (type != USRQUOTA && type != GRPQUOTA)
- {
- set_errno (EINVAL);
- return -1;
- }
- switch (subcmd)
- {
- case Q_SYNC:
- if (!special)
- return 0;
- access |= FILE_WRITE_DATA;
- break;
- case Q_QUOTAON:
- if (id < QFMT_VFS_OLD || id > QFMT_VFS_V1)
- {
- set_errno (EINVAL);
- return -1;
- }
- /*FALLTHRU*/
- case Q_QUOTAOFF:
- case Q_SETINFO:
- access |= FILE_WRITE_DATA;
- break;
- case Q_GETFMT:
- case Q_GETINFO:
- break;
- case Q_SETQUOTA:
- access |= FILE_WRITE_DATA;
- /*FALLTHRU*/
- case Q_GETQUOTA:
- /* Windows feature: Default limits. Get or set them with id == -1. */
- if (id != -1)
- {
- struct passwd *pw = NULL;
- struct group *gr = NULL;
-
- if (type == USRQUOTA)
- pw = internal_getpwuid (id);
- else
- gr = internal_getgrgid (id);
- if (pw)
- sid.getfrompw (pw);
- else if (gr)
- sid.getfromgr (gr);
- else
- {
- set_errno (EINVAL);
- return -1;
- }
- }
- break;
- default:
- set_errno (EINVAL);
- return -1;
- }
- /* Check path */
- pc.check (special, PC_SYM_FOLLOW | PC_NOWARN, stat_suffixes);
- if (pc.error)
- {
- set_errno (pc.error);
- return -1;
- }
- if (!pc.exists ())
- {
- set_errno (ENOENT);
- return -1;
- }
- if (!S_ISBLK (pc.dev.mode))
- {
- set_errno (ENOTBLK);
- return -1;
- }
- pc.get_object_attr (attr, sec_none_nih);
- /* For the following functions to work, we must attach the virtual path to
- the quota file to the device path.
-
- FIXME: Note that this is NTFS-specific. Adding ReFS in another step. */
- tp.u_get (&path);
- RtlCopyUnicodeString (&path, attr.ObjectName);
- RtlAppendUnicodeToString (&path, L"\\$Extend\\$Quota:$Q:$INDEX_ALLOCATION");
- attr.ObjectName = &path;
-
- /* Open filesystem */
- status = NtOpenFile (&fh, access, &attr, &io, FILE_SHARE_VALID_FLAGS, 0);
- if (NT_SUCCESS (status))
- switch (subcmd)
- {
- case Q_SYNC:
- /* No sync, just report success. */
- status = STATUS_SUCCESS;
- break;
- case Q_QUOTAON:
- case Q_QUOTAOFF:
- /* Ignore filename in addr. */
- status = NtQueryVolumeInformationFile (fh, &io, &ffci, sizeof ffci,
- FileFsControlInformation);
- if (!NT_SUCCESS (status))
- break;
- ffci.FileSystemControlFlags &= ~FILE_VC_QUOTA_ENFORCE
- & ~FILE_VC_QUOTA_TRACK
- & ~FILE_VC_QUOTAS_INCOMPLETE
- & ~FILE_VC_QUOTAS_REBUILDING;
- if (subcmd == Q_QUOTAON)
- ffci.FileSystemControlFlags |= FILE_VC_QUOTA_ENFORCE;
- status = NtSetVolumeInformationFile (fh, &io, &ffci, sizeof ffci,
- FileFsControlInformation);
- break;
- case Q_GETFMT:
- __try
- {
- uint32_t *retval = (uint32_t *) addr;
-
- /* Always fake the latest format. */
- *retval = QFMT_VFS_V1;
- }
- __except (EFAULT)
- {
- ret = -1;
- break;
- }
- __endtry
- status = STATUS_SUCCESS;
- break;
- case Q_GETINFO:
- __try
- {
- struct dqinfo *dqi = (struct dqinfo *) addr;
-
- dqi->dqi_bgrace = dqi->dqi_igrace = UINT64_MAX;
- dqi->dqi_flags = 0;
- dqi->dqi_valid = IIF_BGRACE | IIF_IGRACE;
- }
- __except (EFAULT)
- {
- ret = -1;
- break;
- }
- __endtry
- status = STATUS_SUCCESS;
- break;
- case Q_SETINFO:
- /* No settings possible, just report success. */
- status = STATUS_SUCCESS;
- break;
- case Q_GETQUOTA:
- /* Windows feature: Default limits. Get or set them with id == -1. */
- if (id == -1)
- {
- status = NtQueryVolumeInformationFile (fh, &io, &ffci, sizeof ffci,
- FileFsControlInformation);
- if (!NT_SUCCESS (status))
- break;
- __try
- {
- struct dqblk *dq = (struct dqblk *) addr;
-
- dq->dqb_bhardlimit = (uint64_t) ffci.DefaultQuotaLimit.QuadPart;
- if (dq->dqb_bhardlimit != UINT64_MAX)
- dq->dqb_bhardlimit /= BLOCK_SIZE;
- dq->dqb_bsoftlimit =
- (uint64_t) ffci.DefaultQuotaThreshold.QuadPart;
- if (dq->dqb_bsoftlimit != UINT64_MAX)
- dq->dqb_bsoftlimit /= BLOCK_SIZE;
- dq->dqb_curspace = 0;
- dq->dqb_ihardlimit = UINT64_MAX;
- dq->dqb_isoftlimit = UINT64_MAX;
- dq->dqb_curinodes = 0;
- dq->dqb_btime = UINT64_MAX;
- dq->dqb_itime = UINT64_MAX;
- dq->dqb_valid = QIF_BLIMITS;
- }
- __except (EFAULT)
- {
- ret = -1;
- break;
- }
- __endtry
- }
- else
- {
- PFILE_GET_QUOTA_INFORMATION pgqi = (PFILE_GET_QUOTA_INFORMATION)
- alloca (PGQI_SIZE);
- PFILE_QUOTA_INFORMATION pfqi = (PFILE_QUOTA_INFORMATION)
- alloca (PFQI_SIZE);
-
- pgqi->NextEntryOffset = 0;
- pgqi->SidLength = RtlLengthSid (sid);
- RtlCopySid (RtlLengthSid (sid), &pgqi->Sid, sid);
- status = NtQueryQuotaInformationFile (fh, &io, pfqi, PFQI_SIZE,
- TRUE, pgqi, PGQI_SIZE,
- NULL, TRUE);
- if (!NT_SUCCESS (status))
- break;
- __try
- {
- struct dqblk *dq = (struct dqblk *) addr;
-
- dq->dqb_bhardlimit = (uint64_t) pfqi->QuotaLimit.QuadPart;
- if (dq->dqb_bhardlimit != UINT64_MAX)
- dq->dqb_bhardlimit /= BLOCK_SIZE;
- dq->dqb_bsoftlimit = (uint64_t) pfqi->QuotaThreshold.QuadPart;
- if (dq->dqb_bsoftlimit != UINT64_MAX)
- dq->dqb_bsoftlimit /= BLOCK_SIZE;
- dq->dqb_curspace = (uint64_t) pfqi->QuotaUsed.QuadPart;
- if (dq->dqb_curspace != UINT64_MAX)
- dq->dqb_curspace /= BLOCK_SIZE;
- dq->dqb_ihardlimit = UINT64_MAX;
- dq->dqb_isoftlimit = UINT64_MAX;
- dq->dqb_curinodes = 0;
- dq->dqb_btime = UINT64_MAX;
- dq->dqb_itime = UINT64_MAX;
- dq->dqb_valid = QIF_BLIMITS | QIF_SPACE;
- }
- __except (EFAULT)
- {
- ret = -1;
- break;
- }
- __endtry
- }
- break;
- case Q_SETQUOTA:
- /* Windows feature: Default limits. Get or set them with id == -1. */
- if (id == -1)
- {
- status = NtQueryVolumeInformationFile (fh, &io, &ffci, sizeof ffci,
- FileFsControlInformation);
- if (!NT_SUCCESS (status))
- break;
- __try
- {
- struct dqblk *dq = (struct dqblk *) addr;
-
- if (!(dq->dqb_valid & QIF_BLIMITS))
- break;
- ffci.DefaultQuotaLimit.QuadPart = dq->dqb_bhardlimit;
- if (ffci.DefaultQuotaLimit.QuadPart != -1)
- ffci.DefaultQuotaLimit.QuadPart *= BLOCK_SIZE;
- ffci.DefaultQuotaThreshold.QuadPart = dq->dqb_bsoftlimit;
- if (ffci.DefaultQuotaThreshold.QuadPart != -1)
- ffci.DefaultQuotaThreshold.QuadPart *= BLOCK_SIZE;
- }
- __except (EFAULT)
- {
- ret = -1;
- break;
- }
- __endtry
- status = NtSetVolumeInformationFile (fh, &io, &ffci, sizeof ffci,
- FileFsControlInformation);
- }
- else
- {
- PFILE_GET_QUOTA_INFORMATION pgqi = (PFILE_GET_QUOTA_INFORMATION)
- alloca (PGQI_SIZE);
- PFILE_QUOTA_INFORMATION pfqi = (PFILE_QUOTA_INFORMATION)
- alloca (PFQI_SIZE);
-
- pgqi->NextEntryOffset = 0;
- pgqi->SidLength = RtlLengthSid (sid);
- RtlCopySid (RtlLengthSid (sid), &pgqi->Sid, sid);
- status = NtQueryQuotaInformationFile (fh, &io, pfqi, PFQI_SIZE,
- TRUE, pgqi, PGQI_SIZE,
- NULL, TRUE);
- if (!NT_SUCCESS (status))
- break;
- __try
- {
- struct dqblk *dq = (struct dqblk *) addr;
-
- if (!(dq->dqb_valid & QIF_BLIMITS))
- break;
- pfqi->QuotaLimit.QuadPart = dq->dqb_bhardlimit;
- if (pfqi->QuotaLimit.QuadPart != -1)
- pfqi->QuotaLimit.QuadPart *= BLOCK_SIZE;
- pfqi->QuotaThreshold.QuadPart = dq->dqb_bsoftlimit;
- if (pfqi->QuotaThreshold.QuadPart != -1)
- pfqi->QuotaThreshold.QuadPart *= BLOCK_SIZE;
- }
- __except (EFAULT)
- {
- ret = -1;
- break;
- }
- __endtry
- status = NtSetQuotaInformationFile (fh, &io, pfqi, PFQI_SIZE);
- }
- break;
- }
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- ret = -1;
- }
- return ret;
-}
diff --git a/winsup/cygwin/random.cc b/winsup/cygwin/random.cc
deleted file mode 100644
index fe1ac08fd..000000000
--- a/winsup/cygwin/random.cc
+++ /dev/null
@@ -1,504 +0,0 @@
-/*
- * Copyright (c) 1983, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-extern "C" {
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)random.c 8.2 (Berkeley) 5/19/95";
-#endif /* LIBC_SCCS and not lint */
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/lib/libc/stdlib/random.c,v 1.25 2007/01/09 00:28:10 imp Exp $");
-
-#include <sys/time.h> /* for srandomdev() */
-#include <fcntl.h> /* for srandomdev() */
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h> /* for srandomdev() */
-
-/*
- * random.c:
- *
- * An improved random number generation package. In addition to the standard
- * rand()/srand() like interface, this package also has a special state info
- * interface. The initstate() routine is called with a seed, an array of
- * bytes, and a count of how many bytes are being passed in; this array is
- * then initialized to contain information for random number generation with
- * that much state information. Good sizes for the amount of state
- * information are 32, 64, 128, and 256 bytes. The state can be switched by
- * calling the setstate() routine with the same array as was initiallized
- * with initstate(). By default, the package runs with 128 bytes of state
- * information and generates far better random numbers than a linear
- * congruential generator. If the amount of state information is less than
- * 32 bytes, a simple linear congruential R.N.G. is used.
- *
- * Internally, the state information is treated as an array of uint32_t's; the
- * zeroeth element of the array is the type of R.N.G. being used (small
- * integer); the remainder of the array is the state information for the
- * R.N.G. Thus, 32 bytes of state information will give 7 ints worth of
- * state information, which will allow a degree seven polynomial. (Note:
- * the zeroeth word of state information also has some other information
- * stored in it -- see setstate() for details).
- *
- * The random number generation technique is a linear feedback shift register
- * approach, employing trinomials (since there are fewer terms to sum up that
- * way). In this approach, the least significant bit of all the numbers in
- * the state table will act as a linear feedback shift register, and will
- * have period 2^deg - 1 (where deg is the degree of the polynomial being
- * used, assuming that the polynomial is irreducible and primitive). The
- * higher order bits will have longer periods, since their values are also
- * influenced by pseudo-random carries out of the lower bits. The total
- * period of the generator is approximately deg*(2**deg - 1); thus doubling
- * the amount of state information has a vast influence on the period of the
- * generator. Note: the deg*(2**deg - 1) is an approximation only good for
- * large deg, when the period of the shift is the dominant factor.
- * With deg equal to seven, the period is actually much longer than the
- * 7*(2**7 - 1) predicted by this formula.
- *
- * Modified 28 December 1994 by Jacob S. Rosenberg.
- * The following changes have been made:
- * All references to the type u_int have been changed to unsigned long.
- * All references to type int have been changed to type long. Other
- * cleanups have been made as well. A warning for both initstate and
- * setstate has been inserted to the effect that on Sparc platforms
- * the 'arg_state' variable must be forced to begin on word boundaries.
- * This can be easily done by casting a long integer array to char *.
- * The overall logic has been left STRICTLY alone. This software was
- * tested on both a VAX and Sun SpacsStation with exactly the same
- * results. The new version and the original give IDENTICAL results.
- * The new version is somewhat faster than the original. As the
- * documentation says: "By default, the package runs with 128 bytes of
- * state information and generates far better random numbers than a linear
- * congruential generator. If the amount of state information is less than
- * 32 bytes, a simple linear congruential R.N.G. is used." For a buffer of
- * 128 bytes, this new version runs about 19 percent faster and for a 16
- * byte buffer it is about 5 percent faster.
- */
-
-/*
- * For each of the currently supported random number generators, we have a
- * break value on the amount of state information (you need at least this
- * many bytes of state info to support this random number generator), a degree
- * for the polynomial (actually a trinomial) that the R.N.G. is based on, and
- * the separation between the two lower order coefficients of the trinomial.
- */
-#define TYPE_0 0 /* linear congruential */
-#define BREAK_0 8
-#define DEG_0 0
-#define SEP_0 0
-
-#define TYPE_1 1 /* x**7 + x**3 + 1 */
-#define BREAK_1 32
-#define DEG_1 7
-#define SEP_1 3
-
-#define TYPE_2 2 /* x**15 + x + 1 */
-#define BREAK_2 64
-#define DEG_2 15
-#define SEP_2 1
-
-#define TYPE_3 3 /* x**31 + x**3 + 1 */
-#define BREAK_3 128
-#define DEG_3 31
-#define SEP_3 3
-
-#define TYPE_4 4 /* x**63 + x + 1 */
-#define BREAK_4 256
-#define DEG_4 63
-#define SEP_4 1
-
-/*
- * Array versions of the above information to make code run faster --
- * relies on fact that TYPE_i == i.
- */
-#define MAX_TYPES 5 /* max number of types above */
-
-#ifdef USE_WEAK_SEEDING
-#define NSHUFF 0
-#else /* !USE_WEAK_SEEDING */
-#define NSHUFF 50 /* to drop some "seed -> 1st value" linearity */
-#endif /* !USE_WEAK_SEEDING */
-
-static const int degrees[MAX_TYPES] = { DEG_0, DEG_1, DEG_2, DEG_3, DEG_4 };
-static const int seps [MAX_TYPES] = { SEP_0, SEP_1, SEP_2, SEP_3, SEP_4 };
-
-/*
- * Initially, everything is set up as if from:
- *
- * initstate(1, randtbl, 128);
- *
- * Note that this initialization takes advantage of the fact that srandom()
- * advances the front and rear pointers 10*rand_deg times, and hence the
- * rear pointer which starts at 0 will also end up at zero; thus the zeroeth
- * element of the state information, which contains info about the current
- * position of the rear pointer is just
- *
- * MAX_TYPES * (rptr - state) + TYPE_3 == TYPE_3.
- */
-
-static uint32_t randtbl[DEG_3 + 1] = {
- TYPE_3,
-#ifdef USE_WEAK_SEEDING
-/* Historic implementation compatibility */
-/* The random sequences do not vary much with the seed */
- 0x9a319039, 0x32d9c024, 0x9b663182, 0x5da1f342, 0xde3b81e0, 0xdf0a6fb5,
- 0xf103bc02, 0x48f340fb, 0x7449e56b, 0xbeb1dbb0, 0xab5c5918, 0x946554fd,
- 0x8c2e680f, 0xeb3d799f, 0xb11ee0b7, 0x2d436b86, 0xda672e2a, 0x1588ca88,
- 0xe369735d, 0x904f35f7, 0xd7158fd6, 0x6fa6f051, 0x616e6b96, 0xac94efdc,
- 0x36413f93, 0xc622c298, 0xf5a42ab8, 0x8a88d77b, 0xf5ad9d0e, 0x8999220b,
- 0x27fb47b9,
-#else /* !USE_WEAK_SEEDING */
- 0x991539b1, 0x16a5bce3, 0x6774a4cd, 0x3e01511e, 0x4e508aaa, 0x61048c05,
- 0xf5500617, 0x846b7115, 0x6a19892c, 0x896a97af, 0xdb48f936, 0x14898454,
- 0x37ffd106, 0xb58bff9c, 0x59e17104, 0xcf918a49, 0x09378c83, 0x52c7a471,
- 0x8d293ea9, 0x1f4fc301, 0xc3db71be, 0x39b44e1c, 0xf8a44ef9, 0x4c8b80b1,
- 0x19edc328, 0x87bf4bdd, 0xc9b240e5, 0xe9ee4b1b, 0x4382aee7, 0x535b6b41,
- 0xf3bec5da
-#endif /* !USE_WEAK_SEEDING */
-};
-
-/*
- * fptr and rptr are two pointers into the state info, a front and a rear
- * pointer. These two pointers are always rand_sep places aparts, as they
- * cycle cyclically through the state information. (Yes, this does mean we
- * could get away with just one pointer, but the code for random() is more
- * efficient this way). The pointers are left positioned as they would be
- * from the call
- *
- * initstate(1, randtbl, 128);
- *
- * (The position of the rear pointer, rptr, is really 0 (as explained above
- * in the initialization of randtbl) because the state table pointer is set
- * to point to randtbl[1] (as explained below).
- */
-static uint32_t *fptr = &randtbl[SEP_3 + 1];
-static uint32_t *rptr = &randtbl[1];
-
-/*
- * The following things are the pointer to the state information table, the
- * type of the current generator, the degree of the current polynomial being
- * used, and the separation between the two pointers. Note that for efficiency
- * of random(), we remember the first location of the state information, not
- * the zeroeth. Hence it is valid to access state[-1], which is used to
- * store the type of the R.N.G. Also, we remember the last location, since
- * this is more efficient than indexing every time to find the address of
- * the last element to see if the front and rear pointers have wrapped.
- */
-static uint32_t *state = &randtbl[1];
-static int rand_type = TYPE_3;
-static int rand_deg = DEG_3;
-static int rand_sep = SEP_3;
-static uint32_t *end_ptr = &randtbl[DEG_3 + 1];
-
-static inline uint32_t good_rand (int32_t x)
-{
-#ifdef USE_WEAK_SEEDING
-/*
- * Historic implementation compatibility.
- * The random sequences do not vary much with the seed,
- * even with overflowing.
- */
- return (1103515245 * x + 12345);
-#else /* !USE_WEAK_SEEDING */
-/*
- * Compute x = (7^5 * x) mod (2^31 - 1)
- * wihout overflowing 31 bits:
- * (2^31 - 1) = 127773 * (7^5) + 2836
- * From "Random number generators: good ones are hard to find",
- * Park and Miller, Communications of the ACM, vol. 31, no. 10,
- * October 1988, p. 1195.
- */
- int32_t hi, lo;
-
- /* Can't be initialized with 0, so use another value. */
- if (x == 0)
- x = 123459876;
- hi = x / 127773;
- lo = x % 127773;
- x = 16807 * lo - 2836 * hi;
- if (x < 0)
- x += 0x7fffffff;
- return (x);
-#endif /* !USE_WEAK_SEEDING */
-}
-
-/*
- * srandom:
- *
- * Initialize the random number generator based on the given seed. If the
- * type is the trivial no-state-information type, just remember the seed.
- * Otherwise, initializes state[] based on the given "seed" via a linear
- * congruential generator. Then, the pointers are set to known locations
- * that are exactly rand_sep places apart. Lastly, it cycles the state
- * information a given number of times to get rid of any initial dependencies
- * introduced by the L.C.R.N.G. Note that the initialization of randtbl[]
- * for default usage relies on values produced by this routine.
- */
-void
-srandom(unsigned x)
-{
- int i, lim;
-
- state[0] = (uint32_t)x;
- if (rand_type == TYPE_0)
- lim = NSHUFF;
- else {
- for (i = 1; i < rand_deg; i++)
- state[i] = good_rand(state[i - 1]);
- fptr = &state[rand_sep];
- rptr = &state[0];
- lim = 10 * rand_deg;
- }
- for (i = 0; i < lim; i++)
- (void)random();
-}
-
-/* Avoid a compiler warning when we really want to get at the junk in
- an uninitialized variable. */
-static unsigned long
-dummy (unsigned volatile long *x)
-{
- return *x;
-}
-
-/*
- * srandomdev:
- *
- * Many programs choose the seed value in a totally predictable manner.
- * This often causes problems. We seed the generator using the much more
- * secure random(4) interface. Note that this particular seeding
- * procedure can generate states which are impossible to reproduce by
- * calling srandom() with any value, since the succeeding terms in the
- * state buffer are no longer derived from the LC algorithm applied to
- * a fixed seed.
- */
-void
-srandomdev()
-{
- int fd, done;
- size_t len;
-
- if (rand_type == TYPE_0)
- len = sizeof state[0];
- else
- len = rand_deg * sizeof state[0];
-
- done = 0;
- fd = open("/dev/random", O_RDONLY, 0);
- if (fd >= 0) {
- if (read(fd, (void *) state, len) == (ssize_t) len)
- done = 1;
- close(fd);
- }
-
- if (!done) {
- struct timeval tv;
- unsigned long junk;
-
- gettimeofday(&tv, NULL);
- srandom((getpid() << 16) ^ tv.tv_sec ^ tv.tv_usec ^ dummy(&junk));
- return;
- }
-
- if (rand_type != TYPE_0) {
- fptr = &state[rand_sep];
- rptr = &state[0];
- }
-}
-
-/*
- * initstate:
- *
- * Initialize the state information in the given array of n bytes for future
- * random number generation. Based on the number of bytes we are given, and
- * the break values for the different R.N.G.'s, we choose the best (largest)
- * one we can and set things up for it. srandom() is then called to
- * initialize the state information.
- *
- * Note that on return from srandom(), we set state[-1] to be the type
- * multiplexed with the current value of the rear pointer; this is so
- * successive calls to initstate() won't lose this information and will be
- * able to restart with setstate().
- *
- * Note: the first thing we do is save the current state, if any, just like
- * setstate() so that it doesn't matter when initstate is called.
- *
- * Returns a pointer to the old state.
- *
- * Note: The Sparc platform requires that arg_state begin on an int
- * word boundary; otherwise a bus error will occur. Even so, lint will
- * complain about mis-alignment, but you should disregard these messages.
- */
-char *
-initstate(unsigned seed, /* seed for R.N.G. */
- char *arg_state, /* pointer to state array */
- size_t n) /* # bytes of state info */
-{
- char *ostate = (char *)(&state[-1]);
- uint32_t *int_arg_state = (uint32_t *)arg_state;
-
- if (rand_type == TYPE_0)
- state[-1] = rand_type;
- else
- state[-1] = MAX_TYPES * (rptr - state) + rand_type;
- if (n < BREAK_0) {
- (void)fprintf(stderr,
- "random: not enough state (%lu bytes); ignored.\n",
- (unsigned long) n);
- return(0);
- }
- if (n < BREAK_1) {
- rand_type = TYPE_0;
- rand_deg = DEG_0;
- rand_sep = SEP_0;
- } else if (n < BREAK_2) {
- rand_type = TYPE_1;
- rand_deg = DEG_1;
- rand_sep = SEP_1;
- } else if (n < BREAK_3) {
- rand_type = TYPE_2;
- rand_deg = DEG_2;
- rand_sep = SEP_2;
- } else if (n < BREAK_4) {
- rand_type = TYPE_3;
- rand_deg = DEG_3;
- rand_sep = SEP_3;
- } else {
- rand_type = TYPE_4;
- rand_deg = DEG_4;
- rand_sep = SEP_4;
- }
- state = int_arg_state + 1; /* first location */
- end_ptr = &state[rand_deg]; /* must set end_ptr before srandom */
- srandom(seed);
- if (rand_type == TYPE_0)
- int_arg_state[0] = rand_type;
- else
- int_arg_state[0] = MAX_TYPES * (rptr - state) + rand_type;
- return(ostate);
-}
-
-/*
- * setstate:
- *
- * Restore the state from the given state array.
- *
- * Note: it is important that we also remember the locations of the pointers
- * in the current state information, and restore the locations of the pointers
- * from the old state information. This is done by multiplexing the pointer
- * location into the zeroeth word of the state information.
- *
- * Note that due to the order in which things are done, it is OK to call
- * setstate() with the same state as the current state.
- *
- * Returns a pointer to the old state information.
- *
- * Note: The Sparc platform requires that arg_state begin on an int
- * word boundary; otherwise a bus error will occur. Even so, lint will
- * complain about mis-alignment, but you should disregard these messages.
- */
-char *
-setstate(const char *arg_state /* pointer to state array */)
-{
- uint32_t *new_state = (uint32_t *)arg_state;
- uint32_t type = new_state[0] % MAX_TYPES;
- uint32_t rear = new_state[0] / MAX_TYPES;
- char *ostate = (char *)(&state[-1]);
-
- if (rand_type == TYPE_0)
- state[-1] = rand_type;
- else
- state[-1] = MAX_TYPES * (rptr - state) + rand_type;
- switch(type) {
- case TYPE_0:
- case TYPE_1:
- case TYPE_2:
- case TYPE_3:
- case TYPE_4:
- rand_type = type;
- rand_deg = degrees[type];
- rand_sep = seps[type];
- break;
- default:
- (void)fprintf(stderr,
- "random: state info corrupted; not changed.\n");
- }
- state = new_state + 1;
- if (rand_type != TYPE_0) {
- rptr = &state[rear];
- fptr = &state[(rear + rand_sep) % rand_deg];
- }
- end_ptr = &state[rand_deg]; /* set end_ptr too */
- return(ostate);
-}
-
-/*
- * random:
- *
- * If we are using the trivial TYPE_0 R.N.G., just do the old linear
- * congruential bit. Otherwise, we do our fancy trinomial stuff, which is
- * the same in all the other cases due to all the global variables that have
- * been set up. The basic operation is to add the number at the rear pointer
- * into the one at the front pointer. Then both pointers are advanced to
- * the next location cyclically in the table. The value returned is the sum
- * generated, reduced to 31 bits by throwing away the "least random" low bit.
- *
- * Note: the code takes advantage of the fact that both the front and
- * rear pointers can't wrap on the same call by not testing the rear
- * pointer if the front one has wrapped.
- *
- * Returns a 31-bit random number.
- */
-long
-random()
-{
- uint32_t i;
- uint32_t *f, *r;
-
- if (rand_type == TYPE_0) {
- i = state[0];
- state[0] = i = (good_rand(i)) & 0x7fffffff;
- } else {
- /*
- * Use local variables rather than static variables for speed.
- */
- f = fptr; r = rptr;
- *f += *r;
- i = (*f >> 1) & 0x7fffffff; /* chucking least random bit */
- if (++f >= end_ptr) {
- f = state;
- ++r;
- }
- else if (++r >= end_ptr) {
- r = state;
- }
-
- fptr = f; rptr = r;
- }
- return((long)i);
-}
-}
diff --git a/winsup/cygwin/regex/COPYRIGHT b/winsup/cygwin/regex/COPYRIGHT
deleted file mode 100644
index dc823b124..000000000
--- a/winsup/cygwin/regex/COPYRIGHT
+++ /dev/null
@@ -1,52 +0,0 @@
-Copyright 1992, 1993, 1994 Henry Spencer. All rights reserved.
-This software is not subject to any license of the American Telephone
-and Telegraph Company or of the Regents of the University of California.
-
-Permission is granted to anyone to use this software for any purpose on
-any computer system, and to alter it and redistribute it, subject
-to the following restrictions:
-
-1. The author is not responsible for the consequences of use of this
- software, no matter how awful, even if they arise from flaws in it.
-
-2. The origin of this software must not be misrepresented, either by
- explicit claim or by omission. Since few users ever read sources,
- credits must appear in the documentation.
-
-3. Altered versions must be plainly marked as such, and must not be
- misrepresented as being the original software. Since few users
- ever read sources, credits must appear in the documentation.
-
-4. This notice may not be removed or altered.
-
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-/*-
- * Copyright (c) 1994
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)COPYRIGHT 8.1 (Berkeley) 3/16/94
- */
diff --git a/winsup/cygwin/regex/cname.h b/winsup/cygwin/regex/cname.h
deleted file mode 100644
index 4ad1ea93b..000000000
--- a/winsup/cygwin/regex/cname.h
+++ /dev/null
@@ -1,138 +0,0 @@
-/*-
- * Copyright (c) 1992, 1993, 1994 Henry Spencer.
- * Copyright (c) 1992, 1993, 1994
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Henry Spencer.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)cname.h 8.3 (Berkeley) 3/20/94
- * $FreeBSD: src/lib/libc/regex/cname.h,v 1.4 2007/01/09 00:28:04 imp Exp $
- */
-
-/* character-name table */
-static struct cname {
- const char *name;
- char code;
-} cnames[] = {
- {"NUL", '\0'},
- {"SOH", '\001'},
- {"STX", '\002'},
- {"ETX", '\003'},
- {"EOT", '\004'},
- {"ENQ", '\005'},
- {"ACK", '\006'},
- {"BEL", '\007'},
- {"alert", '\007'},
- {"BS", '\010'},
- {"backspace", '\b'},
- {"HT", '\011'},
- {"tab", '\t'},
- {"LF", '\012'},
- {"newline", '\n'},
- {"VT", '\013'},
- {"vertical-tab", '\v'},
- {"FF", '\014'},
- {"form-feed", '\f'},
- {"CR", '\015'},
- {"carriage-return", '\r'},
- {"SO", '\016'},
- {"SI", '\017'},
- {"DLE", '\020'},
- {"DC1", '\021'},
- {"DC2", '\022'},
- {"DC3", '\023'},
- {"DC4", '\024'},
- {"NAK", '\025'},
- {"SYN", '\026'},
- {"ETB", '\027'},
- {"CAN", '\030'},
- {"EM", '\031'},
- {"SUB", '\032'},
- {"ESC", '\033'},
- {"IS4", '\034'},
- {"FS", '\034'},
- {"IS3", '\035'},
- {"GS", '\035'},
- {"IS2", '\036'},
- {"RS", '\036'},
- {"IS1", '\037'},
- {"US", '\037'},
- {"space", ' '},
- {"exclamation-mark", '!'},
- {"quotation-mark", '"'},
- {"number-sign", '#'},
- {"dollar-sign", '$'},
- {"percent-sign", '%'},
- {"ampersand", '&'},
- {"apostrophe", '\''},
- {"left-parenthesis", '('},
- {"right-parenthesis", ')'},
- {"asterisk", '*'},
- {"plus-sign", '+'},
- {"comma", ','},
- {"hyphen", '-'},
- {"hyphen-minus", '-'},
- {"period", '.'},
- {"full-stop", '.'},
- {"slash", '/'},
- {"solidus", '/'},
- {"zero", '0'},
- {"one", '1'},
- {"two", '2'},
- {"three", '3'},
- {"four", '4'},
- {"five", '5'},
- {"six", '6'},
- {"seven", '7'},
- {"eight", '8'},
- {"nine", '9'},
- {"colon", ':'},
- {"semicolon", ';'},
- {"less-than-sign", '<'},
- {"equals-sign", '='},
- {"greater-than-sign", '>'},
- {"question-mark", '?'},
- {"commercial-at", '@'},
- {"left-square-bracket", '['},
- {"backslash", '\\'},
- {"reverse-solidus", '\\'},
- {"right-square-bracket",']'},
- {"circumflex", '^'},
- {"circumflex-accent", '^'},
- {"underscore", '_'},
- {"low-line", '_'},
- {"grave-accent", '`'},
- {"left-brace", '{'},
- {"left-curly-bracket", '{'},
- {"vertical-line", '|'},
- {"right-brace", '}'},
- {"right-curly-bracket", '}'},
- {"tilde", '~'},
- {"DEL", '\177'},
- {NULL, 0}
-};
diff --git a/winsup/cygwin/regex/engine.c b/winsup/cygwin/regex/engine.c
deleted file mode 100644
index 94e418505..000000000
--- a/winsup/cygwin/regex/engine.c
+++ /dev/null
@@ -1,1197 +0,0 @@
-/*-
- * Copyright (c) 1992, 1993, 1994 Henry Spencer.
- * Copyright (c) 1992, 1993, 1994
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Henry Spencer.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)engine.c 8.5 (Berkeley) 3/20/94
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/lib/libc/regex/engine.c,v 1.23 2009/09/16 06:32:23 dds Exp $");
-
-/*
- * The matching engine and friends. This file is #included by regexec.c
- * after suitable #defines of a variety of macros used herein, so that
- * different state representations can be used without duplicating masses
- * of code.
- */
-
-#ifdef SNAMES
-#define matcher smatcher
-#define fast sfast
-#define slow sslow
-#define dissect sdissect
-#define backref sbackref
-#define step sstep
-#define print sprint
-#define at sat
-#define match smat
-#endif
-#ifdef LNAMES
-#define matcher lmatcher
-#define fast lfast
-#define slow lslow
-#define dissect ldissect
-#define backref lbackref
-#define step lstep
-#define print lprint
-#define at lat
-#define match lmat
-#endif
-#ifdef MNAMES
-#define matcher mmatcher
-#define fast mfast
-#define slow mslow
-#define dissect mdissect
-#define backref mbackref
-#define step mstep
-#define print mprint
-#define at mat
-#define match mmat
-#endif
-
-/* another structure passed up and down to avoid zillions of parameters */
-struct match {
- struct re_guts *g;
- int eflags;
- regmatch_t *pmatch; /* [nsub+1] (0 element unused) */
- const char *offp; /* offsets work from here */
- const char *beginp; /* start of string -- virtual NUL precedes */
- const char *endp; /* end of string -- virtual NUL here */
- const char *coldp; /* can be no match starting before here */
- const char **lastpos; /* [nplus+1] */
- STATEVARS;
- states st; /* current states */
- states fresh; /* states for a fresh start */
- states tmp; /* temporary */
- states empty; /* empty set of states */
- mbstate_t mbs; /* multibyte conversion state */
-};
-
-/* ========= begin header generated by ./mkh ========= */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* === engine.c === */
-static int matcher(struct re_guts *g, const char *string, size_t nmatch, regmatch_t pmatch[], int eflags);
-static const char *dissect(struct match *m, const char *start, const char *stop, sopno startst, sopno stopst);
-static const char *backref(struct match *m, const char *start, const char *stop, sopno startst, sopno stopst, sopno lev, int);
-static const char *fast(struct match *m, const char *start, const char *stop, sopno startst, sopno stopst);
-static const char *slow(struct match *m, const char *start, const char *stop, sopno startst, sopno stopst);
-static states step(struct re_guts *g, sopno start, sopno stop, states bef, wint_t ch, states aft);
-#define MAX_RECURSION 100
-#define BOL (OUT-1)
-#define EOL (BOL-1)
-#define BOLEOL (BOL-2)
-#define NOTHING (BOL-3)
-#define BOW (BOL-4)
-#define EOW (BOL-5)
-#define BADCHAR (BOL-6)
-/* When using wint_t, which is defined as unsigned int on BSD,
- as well as on Cygwin or Linux, the NONCHAR test is broken without
- the below cast. I'm wondering how this is supposed to work at all... */
-#define NONCHAR(c) ((int)(c) <= OUT)
-#ifdef REDEBUG
-static void print(struct match *m, const char *caption, states st, int ch, FILE *d);
-#endif
-#ifdef REDEBUG
-static void at(struct match *m, const char *title, const char *start, const char *stop, sopno startst, sopno stopst);
-#endif
-#ifdef REDEBUG
-static const char *pchar(int ch);
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-/* ========= end header generated by ./mkh ========= */
-
-#ifdef REDEBUG
-#define SP(t, s, c) print(m, t, s, c, stdout)
-#define AT(t, p1, p2, s1, s2) at(m, t, p1, p2, s1, s2)
-#define NOTE(str) { if (m->eflags&REG_TRACE) printf("=%s\n", (str)); }
-#else
-#define SP(t, s, c) /* nothing */
-#define AT(t, p1, p2, s1, s2) /* nothing */
-#define NOTE(s) /* nothing */
-#endif
-
-/*
- - matcher - the actual matching engine
- == static int matcher(struct re_guts *g, const char *string, \
- == size_t nmatch, regmatch_t pmatch[], int eflags);
- */
-static int /* 0 success, REG_NOMATCH failure */
-matcher(struct re_guts *g,
- const char *string,
- size_t nmatch,
- regmatch_t pmatch[],
- int eflags)
-{
- const char *endp;
- int i;
- struct match mv;
- struct match *m = &mv;
- const char *dp = NULL;
- const sopno gf = g->firststate+1; /* +1 for OEND */
- const sopno gl = g->laststate;
- const char *start;
- const char *stop;
- /* Boyer-Moore algorithms variables */
- const char *pp;
- int cj, mj;
- const char *mustfirst;
- const char *mustlast;
- int *matchjump;
- int *charjump;
-
- /* simplify the situation where possible */
- if (g->cflags&REG_NOSUB)
- nmatch = 0;
- if (eflags&REG_STARTEND) {
- start = string + pmatch[0].rm_so;
- stop = string + pmatch[0].rm_eo;
- } else {
- start = string;
- stop = start + strlen(start);
- }
- if (stop < start)
- return(REG_INVARG);
-
- /* prescreening; this does wonders for this rather slow code */
- if (g->must != NULL) {
- if (g->charjump != NULL && g->matchjump != NULL) {
- mustfirst = g->must;
- mustlast = g->must + g->mlen - 1;
- charjump = g->charjump;
- matchjump = g->matchjump;
- pp = mustlast;
- for (dp = start+g->mlen-1; dp < stop;) {
- /* Fast skip non-matches */
- while (dp < stop && charjump[(int)*dp])
- dp += charjump[(int)*dp];
-
- if (dp >= stop)
- break;
-
- /* Greedy matcher */
- /* We depend on not being used for
- * for strings of length 1
- */
- while (*--dp == *--pp && pp != mustfirst);
-
- if (*dp == *pp)
- break;
-
- /* Jump to next possible match */
- mj = matchjump[pp - mustfirst];
- cj = charjump[(int)*dp];
- dp += (cj < mj ? mj : cj);
- pp = mustlast;
- }
- if (pp != mustfirst)
- return(REG_NOMATCH);
- } else {
- for (dp = start; dp < stop; dp++)
- if (*dp == g->must[0] &&
- stop - dp >= g->mlen &&
- memcmp(dp, g->must, (size_t)g->mlen) == 0)
- break;
- if (dp == stop) /* we didn't find g->must */
- return(REG_NOMATCH);
- }
- }
-
- /* match struct setup */
- m->g = g;
- m->eflags = eflags;
- m->pmatch = NULL;
- m->lastpos = NULL;
- m->offp = string;
- m->beginp = start;
- m->endp = stop;
- STATESETUP(m, 4);
- SETUP(m->st);
- SETUP(m->fresh);
- SETUP(m->tmp);
- SETUP(m->empty);
- CLEAR(m->empty);
- ZAPSTATE(&m->mbs);
-
- /* Adjust start according to moffset, to speed things up */
-#ifndef MNAMES
- /* The code evaluating moffset doesn't seem to work right
- in the multibyte case. */
- if (g->moffset > -1)
- start = ((dp - g->moffset) < start) ? start : dp - g->moffset;
-#endif
- SP("mloop", m->st, *start);
-
- /* this loop does only one repetition except for backrefs */
- for (;;) {
- endp = fast(m, start, stop, gf, gl);
- if (endp == NULL) { /* a miss */
- if (m->pmatch != NULL)
- free((char *)m->pmatch);
- if (m->lastpos != NULL)
- free((char *)m->lastpos);
- STATETEARDOWN(m);
- return(REG_NOMATCH);
- }
- if (nmatch == 0 && !g->backrefs)
- break; /* no further info needed */
-
- /* where? */
- assert(m->coldp != NULL);
- for (;;) {
- NOTE("finding start");
- endp = slow(m, m->coldp, stop, gf, gl);
- if (endp != NULL)
- break;
- assert(m->coldp < m->endp);
- m->coldp += XMBRTOWC(NULL, m->coldp,
- m->endp - m->coldp, &m->mbs, 0);
- }
- if (nmatch == 1 && !g->backrefs)
- break; /* no further info needed */
-
- /* oh my, he wants the subexpressions... */
- if (m->pmatch == NULL)
- m->pmatch = (regmatch_t *)malloc((m->g->nsub + 1) *
- sizeof(regmatch_t));
- if (m->pmatch == NULL) {
- STATETEARDOWN(m);
- return(REG_ESPACE);
- }
- for (i = 1; i <= m->g->nsub; i++)
- m->pmatch[i].rm_so = m->pmatch[i].rm_eo = -1;
- if (!g->backrefs && !(m->eflags&REG_BACKR)) {
- NOTE("dissecting");
- dp = dissect(m, m->coldp, endp, gf, gl);
- } else {
- if (g->nplus > 0 && m->lastpos == NULL)
- m->lastpos = malloc((g->nplus+1) *
- sizeof(const char *));
- if (g->nplus > 0 && m->lastpos == NULL) {
- free(m->pmatch);
- STATETEARDOWN(m);
- return(REG_ESPACE);
- }
- NOTE("backref dissect");
- dp = backref(m, m->coldp, endp, gf, gl, (sopno)0, 0);
- }
- if (dp != NULL)
- break;
-
- /* uh-oh... we couldn't find a subexpression-level match */
- assert(g->backrefs); /* must be back references doing it */
- assert(g->nplus == 0 || m->lastpos != NULL);
- for (;;) {
- if (dp != NULL || endp <= m->coldp)
- break; /* defeat */
- NOTE("backoff");
- endp = slow(m, m->coldp, endp-1, gf, gl);
- if (endp == NULL)
- break; /* defeat */
- /* try it on a shorter possibility */
-#ifndef NDEBUG
- for (i = 1; i <= m->g->nsub; i++) {
- assert(m->pmatch[i].rm_so == -1);
- assert(m->pmatch[i].rm_eo == -1);
- }
-#endif
- NOTE("backoff dissect");
- dp = backref(m, m->coldp, endp, gf, gl, (sopno)0, 0);
- }
- assert(dp == NULL || dp == endp);
- if (dp != NULL) /* found a shorter one */
- break;
-
- /* despite initial appearances, there is no match here */
- NOTE("false alarm");
- /* recycle starting later */
- start = m->coldp + XMBRTOWC(NULL, m->coldp,
- stop - m->coldp, &m->mbs, 0);
- assert(start <= stop);
- }
-
- /* fill in the details if requested */
- if (nmatch > 0) {
- pmatch[0].rm_so = m->coldp - m->offp;
- pmatch[0].rm_eo = endp - m->offp;
- }
- if (nmatch > 1) {
- assert(m->pmatch != NULL);
- for (i = 1; i < nmatch; i++)
- if (i <= m->g->nsub)
- pmatch[i] = m->pmatch[i];
- else {
- pmatch[i].rm_so = -1;
- pmatch[i].rm_eo = -1;
- }
- }
-
- if (m->pmatch != NULL)
- free((char *)m->pmatch);
- if (m->lastpos != NULL)
- free((char *)m->lastpos);
- STATETEARDOWN(m);
- return(0);
-}
-
-/*
- - dissect - figure out what matched what, no back references
- == static const char *dissect(struct match *m, const char *start, \
- == const char *stop, sopno startst, sopno stopst);
- */
-static const char * /* == stop (success) always */
-dissect(struct match *m,
- const char *start,
- const char *stop,
- sopno startst,
- sopno stopst)
-{
- int i;
- sopno ss; /* start sop of current subRE */
- sopno es; /* end sop of current subRE */
- const char *sp; /* start of string matched by it */
- const char *stp; /* string matched by it cannot pass here */
- const char *rest; /* start of rest of string */
- const char *tail; /* string unmatched by rest of RE */
- sopno ssub; /* start sop of subsubRE */
- sopno esub; /* end sop of subsubRE */
- const char *ssp; /* start of string matched by subsubRE */
- const char *sep; /* end of string matched by subsubRE */
- const char *oldssp; /* previous ssp */
- const char *dp __attribute__ ((unused));
-
- AT("diss", start, stop, startst, stopst);
- sp = start;
- for (ss = startst; ss < stopst; ss = es) {
- /* identify end of subRE */
- es = ss;
- switch (OP(m->g->strip[es])) {
- case OPLUS_:
- case OQUEST_:
- es += OPND(m->g->strip[es]);
- break;
- case OCH_:
- while (OP(m->g->strip[es]) != O_CH)
- es += OPND(m->g->strip[es]);
- break;
- }
- es++;
-
- /* figure out what it matched */
- switch (OP(m->g->strip[ss])) {
- case OEND:
- assert(nope);
- break;
- case OCHAR:
- sp += XMBRTOWC(NULL, sp, stop - start, &m->mbs, 0);
- break;
- case OBOL:
- case OEOL:
- case OBOW:
- case OEOW:
- break;
- case OANY:
- case OANYOF:
- sp += XMBRTOWC(NULL, sp, stop - start, &m->mbs, 0);
- break;
- case OBACK_:
- case O_BACK:
- assert(nope);
- break;
- /* cases where length of match is hard to find */
- case OQUEST_:
- stp = stop;
- for (;;) {
- /* how long could this one be? */
- rest = slow(m, sp, stp, ss, es);
- assert(rest != NULL); /* it did match */
- /* could the rest match the rest? */
- tail = slow(m, rest, stop, es, stopst);
- if (tail == stop)
- break; /* yes! */
- /* no -- try a shorter match for this one */
- stp = rest - 1;
- assert(stp >= sp); /* it did work */
- }
- ssub = ss + 1;
- esub = es - 1;
- /* did innards match? */
- if (slow(m, sp, rest, ssub, esub) != NULL) {
- dp = dissect(m, sp, rest, ssub, esub);
- assert(dp == rest);
- } else /* no */
- assert(sp == rest);
- sp = rest;
- break;
- case OPLUS_:
- stp = stop;
- for (;;) {
- /* how long could this one be? */
- rest = slow(m, sp, stp, ss, es);
- assert(rest != NULL); /* it did match */
- /* could the rest match the rest? */
- tail = slow(m, rest, stop, es, stopst);
- if (tail == stop)
- break; /* yes! */
- /* no -- try a shorter match for this one */
- stp = rest - 1;
- assert(stp >= sp); /* it did work */
- }
- ssub = ss + 1;
- esub = es - 1;
- ssp = sp;
- oldssp = ssp;
- for (;;) { /* find last match of innards */
- sep = slow(m, ssp, rest, ssub, esub);
- if (sep == NULL || sep == ssp)
- break; /* failed or matched null */
- oldssp = ssp; /* on to next try */
- ssp = sep;
- }
- if (sep == NULL) {
- /* last successful match */
- sep = ssp;
- ssp = oldssp;
- }
- assert(sep == rest); /* must exhaust substring */
- assert(slow(m, ssp, sep, ssub, esub) == rest);
- dp = dissect(m, ssp, sep, ssub, esub);
- assert(dp == sep);
- sp = rest;
- break;
- case OCH_:
- stp = stop;
- for (;;) {
- /* how long could this one be? */
- rest = slow(m, sp, stp, ss, es);
- assert(rest != NULL); /* it did match */
- /* could the rest match the rest? */
- tail = slow(m, rest, stop, es, stopst);
- if (tail == stop)
- break; /* yes! */
- /* no -- try a shorter match for this one */
- stp = rest - 1;
- assert(stp >= sp); /* it did work */
- }
- ssub = ss + 1;
- esub = ss + OPND(m->g->strip[ss]) - 1;
- assert(OP(m->g->strip[esub]) == OOR1);
- for (;;) { /* find first matching branch */
- if (slow(m, sp, rest, ssub, esub) == rest)
- break; /* it matched all of it */
- /* that one missed, try next one */
- assert(OP(m->g->strip[esub]) == OOR1);
- esub++;
- assert(OP(m->g->strip[esub]) == OOR2);
- ssub = esub + 1;
- esub += OPND(m->g->strip[esub]);
- if (OP(m->g->strip[esub]) == OOR2)
- esub--;
- else
- assert(OP(m->g->strip[esub]) == O_CH);
- }
- dp = dissect(m, sp, rest, ssub, esub);
- assert(dp == rest);
- sp = rest;
- break;
- case O_PLUS:
- case O_QUEST:
- case OOR1:
- case OOR2:
- case O_CH:
- assert(nope);
- break;
- case OLPAREN:
- i = OPND(m->g->strip[ss]);
- assert(0 < i && i <= m->g->nsub);
- m->pmatch[i].rm_so = sp - m->offp;
- break;
- case ORPAREN:
- i = OPND(m->g->strip[ss]);
- assert(0 < i && i <= m->g->nsub);
- m->pmatch[i].rm_eo = sp - m->offp;
- break;
- default: /* uh oh */
- assert(nope);
- break;
- }
- }
-
- assert(sp == stop);
- return(sp);
-}
-
-/*
- - backref - figure out what matched what, figuring in back references
- == static const char *backref(struct match *m, const char *start, \
- == const char *stop, sopno startst, sopno stopst, sopno lev);
- */
-static const char * /* == stop (success) or NULL (failure) */
-backref(struct match *m,
- const char *start,
- const char *stop,
- sopno startst,
- sopno stopst,
- sopno lev, /* PLUS nesting level */
- int rec)
-{
- int i;
- sopno ss; /* start sop of current subRE */
- const char *sp; /* start of string matched by it */
- sopno ssub; /* start sop of subsubRE */
- sopno esub; /* end sop of subsubRE */
- const char *ssp; /* start of string matched by subsubRE */
- const char *dp;
- size_t len;
- int hard;
- sop s;
- regoff_t offsave;
- cset *cs;
- wint_t wc;
-
- AT("back", start, stop, startst, stopst);
- sp = start;
-
- /* get as far as we can with easy stuff */
- hard = 0;
- for (ss = startst; !hard && ss < stopst; ss++)
- switch (OP(s = m->g->strip[ss])) {
- case OCHAR:
- if (sp == stop)
- return(NULL);
- sp += XMBRTOWC(&wc, sp, stop - sp, &m->mbs, BADCHAR);
- if (wc != OPND(s))
- return(NULL);
- break;
- case OANY:
- if (sp == stop)
- return(NULL);
- sp += XMBRTOWC(&wc, sp, stop - sp, &m->mbs, BADCHAR);
- if (wc == BADCHAR)
- return (NULL);
- break;
- case OANYOF:
- if (sp == stop)
- return (NULL);
- cs = &m->g->sets[OPND(s)];
- sp += XMBRTOWC(&wc, sp, stop - sp, &m->mbs, BADCHAR);
- if (wc == BADCHAR || !CHIN(cs, wc))
- return(NULL);
- break;
- case OBOL:
- if ( (sp == m->beginp && !(m->eflags&REG_NOTBOL)) ||
- (sp < m->endp && *(sp-1) == '\n' &&
- (m->g->cflags&REG_NEWLINE)) )
- { /* yes */ }
- else
- return(NULL);
- break;
- case OEOL:
- if ( (sp == m->endp && !(m->eflags&REG_NOTEOL)) ||
- (sp < m->endp && *sp == '\n' &&
- (m->g->cflags&REG_NEWLINE)) )
- { /* yes */ }
- else
- return(NULL);
- break;
- case OBOW:
- if (( (sp == m->beginp && !(m->eflags&REG_NOTBOL)) ||
- (sp < m->endp && *(sp-1) == '\n' &&
- (m->g->cflags&REG_NEWLINE)) ||
- (sp > m->beginp &&
- !ISWORD(*(sp-1))) ) &&
- (sp < m->endp && ISWORD(*sp)) )
- { /* yes */ }
- else
- return(NULL);
- break;
- case OEOW:
- if (( (sp == m->endp && !(m->eflags&REG_NOTEOL)) ||
- (sp < m->endp && *sp == '\n' &&
- (m->g->cflags&REG_NEWLINE)) ||
- (sp < m->endp && !ISWORD(*sp)) ) &&
- (sp > m->beginp && ISWORD(*(sp-1))) )
- { /* yes */ }
- else
- return(NULL);
- break;
- case O_QUEST:
- break;
- case OOR1: /* matches null but needs to skip */
- ss++;
- s = m->g->strip[ss];
- do {
- assert(OP(s) == OOR2);
- ss += OPND(s);
- } while (OP(s = m->g->strip[ss]) != O_CH);
- /* note that the ss++ gets us past the O_CH */
- break;
- default: /* have to make a choice */
- hard = 1;
- break;
- }
- if (!hard) { /* that was it! */
- if (sp != stop)
- return(NULL);
- return(sp);
- }
- ss--; /* adjust for the for's final increment */
-
- /* the hard stuff */
- AT("hard", sp, stop, ss, stopst);
- s = m->g->strip[ss];
- switch (OP(s)) {
- case OBACK_: /* the vilest depths */
- i = OPND(s);
- assert(0 < i && i <= m->g->nsub);
- if (m->pmatch[i].rm_eo == -1)
- return(NULL);
- assert(m->pmatch[i].rm_so != -1);
- len = m->pmatch[i].rm_eo - m->pmatch[i].rm_so;
- if (len == 0 && rec++ > MAX_RECURSION)
- return(NULL);
- assert(stop - m->beginp >= len);
- if (sp > stop - len)
- return(NULL); /* not enough left to match */
- ssp = m->offp + m->pmatch[i].rm_so;
- if (memcmp(sp, ssp, len) != 0)
- return(NULL);
- while (m->g->strip[ss] != SOP(O_BACK, i))
- ss++;
- return(backref(m, sp+len, stop, ss+1, stopst, lev, rec));
- break;
- case OQUEST_: /* to null or not */
- dp = backref(m, sp, stop, ss+1, stopst, lev, rec);
- if (dp != NULL)
- return(dp); /* not */
- return(backref(m, sp, stop, ss+OPND(s)+1, stopst, lev, rec));
- break;
- case OPLUS_:
- assert(m->lastpos != NULL);
- assert(lev+1 <= m->g->nplus);
- m->lastpos[lev+1] = sp;
- return(backref(m, sp, stop, ss+1, stopst, lev+1, rec));
- break;
- case O_PLUS:
- if (sp == m->lastpos[lev]) /* last pass matched null */
- return(backref(m, sp, stop, ss+1, stopst, lev-1, rec));
- /* try another pass */
- m->lastpos[lev] = sp;
- dp = backref(m, sp, stop, ss-OPND(s)+1, stopst, lev, rec);
- if (dp == NULL)
- return(backref(m, sp, stop, ss+1, stopst, lev-1, rec));
- else
- return(dp);
- break;
- case OCH_: /* find the right one, if any */
- ssub = ss + 1;
- esub = ss + OPND(s) - 1;
- assert(OP(m->g->strip[esub]) == OOR1);
- for (;;) { /* find first matching branch */
- dp = backref(m, sp, stop, ssub, esub, lev, rec);
- if (dp != NULL)
- return(dp);
- /* that one missed, try next one */
- if (OP(m->g->strip[esub]) == O_CH)
- return(NULL); /* there is none */
- esub++;
- assert(OP(m->g->strip[esub]) == OOR2);
- ssub = esub + 1;
- esub += OPND(m->g->strip[esub]);
- if (OP(m->g->strip[esub]) == OOR2)
- esub--;
- else
- assert(OP(m->g->strip[esub]) == O_CH);
- }
- break;
- case OLPAREN: /* must undo assignment if rest fails */
- i = OPND(s);
- assert(0 < i && i <= m->g->nsub);
- offsave = m->pmatch[i].rm_so;
- m->pmatch[i].rm_so = sp - m->offp;
- dp = backref(m, sp, stop, ss+1, stopst, lev, rec);
- if (dp != NULL)
- return(dp);
- m->pmatch[i].rm_so = offsave;
- return(NULL);
- break;
- case ORPAREN: /* must undo assignment if rest fails */
- i = OPND(s);
- assert(0 < i && i <= m->g->nsub);
- offsave = m->pmatch[i].rm_eo;
- m->pmatch[i].rm_eo = sp - m->offp;
- dp = backref(m, sp, stop, ss+1, stopst, lev, rec);
- if (dp != NULL)
- return(dp);
- m->pmatch[i].rm_eo = offsave;
- return(NULL);
- break;
- default: /* uh oh */
- assert(nope);
- break;
- }
-
- /* "can't happen" */
- assert(nope);
- /* NOTREACHED */
- return "shut up gcc";
-}
-
-/*
- - fast - step through the string at top speed
- == static const char *fast(struct match *m, const char *start, \
- == const char *stop, sopno startst, sopno stopst);
- */
-static const char * /* where tentative match ended, or NULL */
-fast( struct match *m,
- const char *start,
- const char *stop,
- sopno startst,
- sopno stopst)
-{
- states st = m->st;
- states fresh = m->fresh;
- states tmp = m->tmp;
- const char *p = start;
- wint_t c;
- wint_t lastc; /* previous c */
- wint_t flagch;
- int i;
- const char *coldp; /* last p after which no match was underway */
- size_t clen;
-
- CLEAR(st);
- SET1(st, startst);
- SP("fast", st, *p);
- st = step(m->g, startst, stopst, st, NOTHING, st);
- ASSIGN(fresh, st);
- SP("start", st, *p);
- coldp = NULL;
- if (start == m->beginp)
- c = OUT;
- else {
- /*
- * XXX Wrong if the previous character was multi-byte.
- * Newline never is (in encodings supported by FreeBSD),
- * so this only breaks the ISWORD tests below.
- */
- c = (uch)*(start - 1);
- }
- for (;;) {
- /* next character */
- lastc = c;
- if (p == m->endp) {
- clen = 0;
- c = OUT;
- } else
- clen = XMBRTOWC(&c, p, m->endp - p, &m->mbs, BADCHAR);
- if (EQ(st, fresh))
- coldp = p;
-
- /* is there an EOL and/or BOL between lastc and c? */
- flagch = '\0';
- i = 0;
- if ( (lastc == '\n' && m->g->cflags&REG_NEWLINE) ||
- (lastc == OUT && !(m->eflags&REG_NOTBOL)) ) {
- flagch = BOL;
- i = m->g->nbol;
- }
- if ( (c == '\n' && m->g->cflags&REG_NEWLINE) ||
- (c == OUT && !(m->eflags&REG_NOTEOL)) ) {
- flagch = (flagch == BOL) ? BOLEOL : EOL;
- i += m->g->neol;
- }
- if (i != 0) {
- for (; i > 0; i--)
- st = step(m->g, startst, stopst, st, flagch, st);
- SP("boleol", st, c);
- }
-
- /* how about a word boundary? */
- if ( (flagch == BOL || (lastc != OUT && !ISWORD(lastc))) &&
- (c != OUT && ISWORD(c)) ) {
- flagch = BOW;
- }
- if ( (lastc != OUT && ISWORD(lastc)) &&
- (flagch == EOL || (c != OUT && !ISWORD(c))) ) {
- flagch = EOW;
- }
- if (flagch == BOW || flagch == EOW) {
- st = step(m->g, startst, stopst, st, flagch, st);
- SP("boweow", st, c);
- }
-
- /* are we done? */
- if (ISSET(st, stopst) || p == stop || clen > stop - p)
- break; /* NOTE BREAK OUT */
-
- /* no, we must deal with this character */
- ASSIGN(tmp, st);
- ASSIGN(st, fresh);
- assert(c != OUT);
- st = step(m->g, startst, stopst, tmp, c, st);
- SP("aft", st, c);
- assert(EQ(step(m->g, startst, stopst, st, NOTHING, st), st));
- p += clen;
- }
-
- assert(coldp != NULL);
- m->coldp = coldp;
- if (ISSET(st, stopst))
- return(p+XMBRTOWC(NULL, p, stop - p, &m->mbs, 0));
- else
- return(NULL);
-}
-
-/*
- - slow - step through the string more deliberately
- == static const char *slow(struct match *m, const char *start, \
- == const char *stop, sopno startst, sopno stopst);
- */
-static const char * /* where it ended */
-slow( struct match *m,
- const char *start,
- const char *stop,
- sopno startst,
- sopno stopst)
-{
- states st = m->st;
- states empty = m->empty;
- states tmp = m->tmp;
- const char *p = start;
- wint_t c;
- wint_t lastc; /* previous c */
- wint_t flagch;
- int i;
- const char *matchp; /* last p at which a match ended */
- size_t clen;
-
- AT("slow", start, stop, startst, stopst);
- CLEAR(st);
- SET1(st, startst);
- SP("sstart", st, *p);
- st = step(m->g, startst, stopst, st, NOTHING, st);
- matchp = NULL;
- if (start == m->beginp)
- c = OUT;
- else {
- /*
- * XXX Wrong if the previous character was multi-byte.
- * Newline never is (in encodings supported by FreeBSD),
- * so this only breaks the ISWORD tests below.
- */
- c = (uch)*(start - 1);
- }
- for (;;) {
- /* next character */
- lastc = c;
- if (p == m->endp) {
- c = OUT;
- clen = 0;
- } else
- clen = XMBRTOWC(&c, p, m->endp - p, &m->mbs, BADCHAR);
-
- /* is there an EOL and/or BOL between lastc and c? */
- flagch = '\0';
- i = 0;
- if ( (lastc == '\n' && m->g->cflags&REG_NEWLINE) ||
- (lastc == OUT && !(m->eflags&REG_NOTBOL)) ) {
- flagch = BOL;
- i = m->g->nbol;
- }
- if ( (c == '\n' && m->g->cflags&REG_NEWLINE) ||
- (c == OUT && !(m->eflags&REG_NOTEOL)) ) {
- flagch = (flagch == BOL) ? BOLEOL : EOL;
- i += m->g->neol;
- }
- if (i != 0) {
- for (; i > 0; i--)
- st = step(m->g, startst, stopst, st, flagch, st);
- SP("sboleol", st, c);
- }
-
- /* how about a word boundary? */
- if ( (flagch == BOL || (lastc != OUT && !ISWORD(lastc))) &&
- (c != OUT && ISWORD(c)) ) {
- flagch = BOW;
- }
- if ( (lastc != OUT && ISWORD(lastc)) &&
- (flagch == EOL || (c != OUT && !ISWORD(c))) ) {
- flagch = EOW;
- }
- if (flagch == BOW || flagch == EOW) {
- st = step(m->g, startst, stopst, st, flagch, st);
- SP("sboweow", st, c);
- }
-
- /* are we done? */
- if (ISSET(st, stopst))
- matchp = p;
- if (EQ(st, empty) || p == stop || clen > stop - p)
- break; /* NOTE BREAK OUT */
-
- /* no, we must deal with this character */
- ASSIGN(tmp, st);
- ASSIGN(st, empty);
- assert(c != OUT);
- st = step(m->g, startst, stopst, tmp, c, st);
- SP("saft", st, c);
- assert(EQ(step(m->g, startst, stopst, st, NOTHING, st), st));
- p += clen;
- }
-
- return(matchp);
-}
-
-
-/*
- - step - map set of states reachable before char to set reachable after
- == static states step(struct re_guts *g, sopno start, sopno stop, \
- == states bef, int ch, states aft);
- == #define BOL (OUT-1)
- == #define EOL (BOL-1)
- == #define BOLEOL (BOL-2)
- == #define NOTHING (BOL-3)
- == #define BOW (BOL-4)
- == #define EOW (BOL-5)
- == #define BADCHAR (BOL-6)
- == #define NONCHAR(c) ((c) <= OUT)
- */
-static states
-step(struct re_guts *g,
- sopno start, /* start state within strip */
- sopno stop, /* state after stop state within strip */
- states bef, /* states reachable before */
- wint_t ch, /* character or NONCHAR code */
- states aft) /* states already known reachable after */
-{
- cset *cs;
- sop s;
- sopno pc;
- onestate here; /* note, macros know this name */
- sopno look;
- int i;
-
- for (pc = start, INIT(here, pc); pc != stop; pc++, INC(here)) {
- s = g->strip[pc];
- switch (OP(s)) {
- case OEND:
- assert(pc == stop-1);
- break;
- case OCHAR:
- /* only characters can match */
- assert(!NONCHAR(ch) || ch != OPND(s));
- if (ch == OPND(s))
- FWD(aft, bef, 1);
- break;
- case OBOL:
- if (ch == BOL || ch == BOLEOL)
- FWD(aft, bef, 1);
- break;
- case OEOL:
- if (ch == EOL || ch == BOLEOL)
- FWD(aft, bef, 1);
- break;
- case OBOW:
- if (ch == BOW)
- FWD(aft, bef, 1);
- break;
- case OEOW:
- if (ch == EOW)
- FWD(aft, bef, 1);
- break;
- case OANY:
- if (!NONCHAR(ch))
- FWD(aft, bef, 1);
- break;
- case OANYOF:
- cs = &g->sets[OPND(s)];
- if (!NONCHAR(ch) && CHIN(cs, ch))
- FWD(aft, bef, 1);
- break;
- case OBACK_: /* ignored here */
- case O_BACK:
- FWD(aft, aft, 1);
- break;
- case OPLUS_: /* forward, this is just an empty */
- FWD(aft, aft, 1);
- break;
- case O_PLUS: /* both forward and back */
- FWD(aft, aft, 1);
- i = ISSETBACK(aft, OPND(s));
- BACK(aft, aft, OPND(s));
- if (!i && ISSETBACK(aft, OPND(s))) {
- /* oho, must reconsider loop body */
- pc -= OPND(s) + 1;
- INIT(here, pc);
- }
- break;
- case OQUEST_: /* two branches, both forward */
- FWD(aft, aft, 1);
- FWD(aft, aft, OPND(s));
- break;
- case O_QUEST: /* just an empty */
- FWD(aft, aft, 1);
- break;
- case OLPAREN: /* not significant here */
- case ORPAREN:
- FWD(aft, aft, 1);
- break;
- case OCH_: /* mark the first two branches */
- FWD(aft, aft, 1);
- assert(OP(g->strip[pc+OPND(s)]) == OOR2);
- FWD(aft, aft, OPND(s));
- break;
- case OOR1: /* done a branch, find the O_CH */
- if (ISSTATEIN(aft, here)) {
- for (look = 1;
- OP(s = g->strip[pc+look]) != O_CH;
- look += OPND(s))
- assert(OP(s) == OOR2);
- FWD(aft, aft, look + 1);
- }
- break;
- case OOR2: /* propagate OCH_'s marking */
- FWD(aft, aft, 1);
- if (OP(g->strip[pc+OPND(s)]) != O_CH) {
- assert(OP(g->strip[pc+OPND(s)]) == OOR2);
- FWD(aft, aft, OPND(s));
- }
- break;
- case O_CH: /* just empty */
- FWD(aft, aft, 1);
- break;
- default: /* ooooops... */
- assert(nope);
- break;
- }
- }
-
- return(aft);
-}
-
-#ifdef REDEBUG
-/*
- - print - print a set of states
- == #ifdef REDEBUG
- == static void print(struct match *m, const char *caption, states st, \
- == int ch, FILE *d);
- == #endif
- */
-static void
-print(struct match *m,
- const char *caption,
- states st,
- int ch,
- FILE *d)
-{
- struct re_guts *g = m->g;
- int i;
- int first = 1;
-
- if (!(m->eflags&REG_TRACE))
- return;
-
- fprintf(d, "%s", caption);
- if (ch != '\0')
- fprintf(d, " %s", pchar(ch));
- for (i = 0; i < g->nstates; i++)
- if (ISSET(st, i)) {
- fprintf(d, "%s%d", (first) ? "\t" : ", ", i);
- first = 0;
- }
- fprintf(d, "\n");
-}
-
-/*
- - at - print current situation
- == #ifdef REDEBUG
- == static void at(struct match *m, const char *title, const char *start, \
- == const char *stop, sopno startst, sopno stopst);
- == #endif
- */
-static void
-at( struct match *m,
- const char *title,
- const char *start,
- const char *stop,
- sopno startst,
- sopno stopst)
-{
- if (!(m->eflags&REG_TRACE))
- return;
-
- printf("%s %s-", title, pchar(*start));
- printf("%s ", pchar(*stop));
- printf("%ld-%ld\n", (long)startst, (long)stopst);
-}
-
-#ifndef PCHARDONE
-#define PCHARDONE /* never again */
-/*
- - pchar - make a character printable
- == #ifdef REDEBUG
- == static const char *pchar(int ch);
- == #endif
- *
- * Is this identical to regchar() over in debug.c? Well, yes. But a
- * duplicate here avoids having a debugging-capable regexec.o tied to
- * a matching debug.o, and this is convenient. It all disappears in
- * the non-debug compilation anyway, so it doesn't matter much.
- */
-static const char * /* -> representation */
-pchar(int ch)
-{
- static char pbuf[10];
-
- if (isprint((uch)ch) || ch == ' ')
- sprintf(pbuf, "%c", ch);
- else
- sprintf(pbuf, "\\%o", ch);
- return(pbuf);
-}
-#endif
-#endif
-
-#undef matcher
-#undef fast
-#undef slow
-#undef dissect
-#undef backref
-#undef step
-#undef print
-#undef at
-#undef match
diff --git a/winsup/cygwin/regex/regcomp.c b/winsup/cygwin/regex/regcomp.c
deleted file mode 100644
index d68dcc32a..000000000
--- a/winsup/cygwin/regex/regcomp.c
+++ /dev/null
@@ -1,1888 +0,0 @@
-/*-
- * Copyright (c) 1992, 1993, 1994 Henry Spencer.
- * Copyright (c) 1992, 1993, 1994
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Henry Spencer.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)regcomp.c 8.5 (Berkeley) 3/20/94
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)regcomp.c 8.5 (Berkeley) 3/20/94";
-#endif /* LIBC_SCCS and not lint */
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/lib/libc/regex/regcomp.c,v 1.36 2007/06/11 03:05:54 delphij Exp $");
-
-#ifdef __CYGWIN__
-#include "winsup.h"
-#endif
-#include <sys/types.h>
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include <limits.h>
-#include <stdlib.h>
-#include <regex.h>
-#ifndef __CYGWIN__
-#include <runetype.h>
-#endif
-#include <wchar.h>
-#include <wctype.h>
-
-#include "collate.h"
-
-#include "utils.h"
-#include "regex2.h"
-
-#include "cname.h"
-
-#ifdef __CYGWIN__
-/* These are defined in nlsfuncs.cc. */
-extern LCID collate_lcid;
-extern char collate_charset[];
-#endif
-
-/*
- * parse structure, passed up and down to avoid global variables and
- * other clumsinesses
- */
-struct parse {
- char *next; /* next character in RE */
- char *end; /* end of string (-> NUL normally) */
- int error; /* has an error been seen? */
- sop *strip; /* malloced strip */
- sopno ssize; /* malloced strip size (allocated) */
- sopno slen; /* malloced strip length (used) */
- int ncsalloc; /* number of csets allocated */
- struct re_guts *g;
-# define NPAREN 10 /* we need to remember () 1-9 for back refs */
- sopno pbegin[NPAREN]; /* -> ( ([0] unused) */
- sopno pend[NPAREN]; /* -> ) ([0] unused) */
-};
-
-/* ========= begin header generated by ./mkh ========= */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* === regcomp.c === */
-#ifdef __CYGWIN__ /* Defined below `int stop'. Our gcc chokes on that. */
-static void p_ere(struct parse *p, int stop);
-#else
-static void p_ere(struct parse *p, wint_t stop);
-#endif
-static void p_ere_exp(struct parse *p);
-static void p_str(struct parse *p);
-#ifdef __CYGWIN__ /* Defined below `int end1/end2'. Our gcc chokes on that. */
-static void p_bre(struct parse *p, int end1, int end2);
-#else
-static void p_bre(struct parse *p, wint_t end1, wint_t end2);
-#endif
-static int p_simp_re(struct parse *p, int starordinary);
-static int p_count(struct parse *p);
-static void p_bracket(struct parse *p);
-static void p_b_term(struct parse *p, cset *cs);
-static void p_b_cclass(struct parse *p, cset *cs);
-static void p_b_eclass(struct parse *p, cset *cs);
-static wint_t p_b_symbol(struct parse *p);
-static wint_t p_b_coll_elem(struct parse *p, wint_t endc);
-static wint_t othercase(wint_t ch);
-static void bothcases(struct parse *p, wint_t ch);
-static void ordinary(struct parse *p, wint_t ch);
-static void nonnewline(struct parse *p);
-static void repeat(struct parse *p, sopno start, int from, int to);
-static int seterr(struct parse *p, int e);
-static cset *allocset(struct parse *p);
-static void freeset(struct parse *p, cset *cs);
-static void CHadd(struct parse *p, cset *cs, wint_t ch);
-static void CHaddrange(struct parse *p, cset *cs, wint_t min, wint_t max);
-static void CHaddtype(struct parse *p, cset *cs, wctype_t wct);
-static wint_t singleton(cset *cs);
-static sopno dupl(struct parse *p, sopno start, sopno finish);
-static void doemit(struct parse *p, sop op, size_t opnd);
-static void doinsert(struct parse *p, sop op, size_t opnd, sopno pos);
-static void dofwd(struct parse *p, sopno pos, sop value);
-static void enlarge(struct parse *p, sopno size);
-static void stripsnug(struct parse *p, struct re_guts *g);
-static void findmust(struct parse *p, struct re_guts *g);
-static int altoffset(sop *scan, int offset);
-static void computejumps(struct parse *p, struct re_guts *g);
-static void computematchjumps(struct parse *p, struct re_guts *g);
-static sopno pluscount(struct parse *p, struct re_guts *g);
-static wint_t wgetnext(struct parse *p);
-static size_t xwcrtomb (char *s, wint_t wc, mbstate_t *ps);
-
-#ifdef __cplusplus
-}
-#endif
-/* ========= end header generated by ./mkh ========= */
-
-static char nuls[10]; /* place to point scanner in event of error */
-
-/*
- * macros for use with parse structure
- * BEWARE: these know that the parse structure is named `p' !!!
- */
-#define PEEK() (*p->next)
-#define PEEK2() (*(p->next+1))
-#define MORE() (p->next < p->end)
-#define MORE2() (p->next+1 < p->end)
-#define SEE(c) (MORE() && PEEK() == (c))
-#define SEETWO(a, b) (MORE() && MORE2() && PEEK() == (a) && PEEK2() == (b))
-#define EAT(c) ((SEE(c)) ? (NEXT(), 1) : 0)
-#define EATTWO(a, b) ((SEETWO(a, b)) ? (NEXT2(), 1) : 0)
-#define NEXT() (p->next++)
-#define NEXT2() (p->next += 2)
-#define NEXTn(n) (p->next += (n))
-#define GETNEXT() (*p->next++)
-#define WGETNEXT() wgetnext(p)
-#define SETERROR(e) seterr(p, (e))
-#define REQUIRE(co, e) ((co) || SETERROR(e))
-#define MUSTSEE(c, e) (REQUIRE(MORE() && PEEK() == (c), e))
-#define MUSTEAT(c, e) (REQUIRE(MORE() && GETNEXT() == (c), e))
-#define MUSTNOTSEE(c, e) (REQUIRE(!MORE() || PEEK() != (c), e))
-#define EMIT(op, sopnd) doemit(p, (sop)(op), (size_t)(sopnd))
-#define INSERT(op, pos) doinsert(p, (sop)(op), HERE()-(pos)+1, pos)
-#define AHEAD(pos) dofwd(p, pos, HERE()-(pos))
-#define ASTERN(sop, pos) EMIT(sop, HERE()-pos)
-#define HERE() (p->slen)
-#define THERE() (p->slen - 1)
-#define THERETHERE() (p->slen - 2)
-#define DROP(n) (p->slen -= (n))
-
-#ifndef NDEBUG
-static int never = 0; /* for use in asserts; shuts lint up */
-#else
-#define never 0 /* some <assert.h>s have bugs too */
-#endif
-
-/* Macro used by computejump()/computematchjump() */
-#define MIN(a,b) ((a)<(b)?(a):(b))
-
-/*
- - regcomp - interface for parser and compilation
- = extern int regcomp(regex_t *, const char *, int);
- = #define REG_BASIC 0000
- = #define REG_EXTENDED 0001
- = #define REG_ICASE 0002
- = #define REG_NOSUB 0004
- = #define REG_NEWLINE 0010
- = #define REG_NOSPEC 0020
- = #define REG_PEND 0040
- = #define REG_DUMP 0200
- */
-int /* 0 success, otherwise REG_something */
-regcomp(regex_t * __restrict preg,
- const char * __restrict pattern,
- int cflags)
-{
- struct parse pa;
- struct re_guts *g;
- struct parse *p = &pa;
- int i;
- size_t len;
-#ifdef REDEBUG
-# define GOODFLAGS(f) (f)
-#else
-# define GOODFLAGS(f) ((f)&~REG_DUMP)
-#endif
-
- cflags = GOODFLAGS(cflags);
- if ((cflags&REG_EXTENDED) && (cflags&REG_NOSPEC))
- return(REG_INVARG);
-
- if (cflags&REG_PEND) {
- if (preg->re_endp < pattern)
- return(REG_INVARG);
- len = preg->re_endp - pattern;
- } else
- len = strlen((char *)pattern);
-
- /* do the mallocs early so failure handling is easy */
- g = (struct re_guts *)malloc(sizeof(struct re_guts));
- if (g == NULL)
- return(REG_ESPACE);
- p->ssize = len/(size_t)2*(size_t)3 + (size_t)1; /* ugh */
- p->strip = (sop *)malloc(p->ssize * sizeof(sop));
- p->slen = 0;
- if (p->strip == NULL) {
- free((char *)g);
- return(REG_ESPACE);
- }
-
- /* set things up */
- p->g = g;
- p->next = (char *)pattern; /* convenience; we do not modify it */
- p->end = p->next + len;
- p->error = 0;
- p->ncsalloc = 0;
- for (i = 0; i < NPAREN; i++) {
- p->pbegin[i] = 0;
- p->pend[i] = 0;
- }
- g->sets = NULL;
- g->ncsets = 0;
- g->cflags = cflags;
- g->iflags = 0;
- g->nbol = 0;
- g->neol = 0;
- g->must = NULL;
- g->moffset = -1;
- g->charjump = NULL;
- g->matchjump = NULL;
- g->mlen = 0;
- g->nsub = 0;
- g->backrefs = 0;
-
- /* do it */
- EMIT(OEND, 0);
- g->firststate = THERE();
- if (cflags&REG_EXTENDED)
- p_ere(p, OUT);
- else if (cflags&REG_NOSPEC)
- p_str(p);
- else
- p_bre(p, OUT, OUT);
- EMIT(OEND, 0);
- g->laststate = THERE();
-
- /* tidy up loose ends and fill things in */
- stripsnug(p, g);
- findmust(p, g);
- /* only use Boyer-Moore algorithm if the pattern is bigger
- * than three characters
- */
- if(g->mlen > 3) {
- computejumps(p, g);
- computematchjumps(p, g);
- if(g->matchjump == NULL && g->charjump != NULL) {
- free(g->charjump);
- g->charjump = NULL;
- }
- }
- g->nplus = pluscount(p, g);
- g->magic = MAGIC2;
- preg->re_nsub = g->nsub;
- preg->re_g = g;
- preg->re_magic = MAGIC1;
-#ifndef REDEBUG
- /* not debugging, so can't rely on the assert() in regexec() */
- if (g->iflags&BAD)
- SETERROR(REG_ASSERT);
-#endif
-
- /* win or lose, we're done */
- if (p->error != 0) /* lose */
- regfree(preg);
- return(p->error);
-}
-
-/*
- - p_ere - ERE parser top level, concatenation and alternation
- == static void p_ere(struct parse *p, int stop);
- */
-static void
-p_ere(struct parse *p,
- int stop) /* character this ERE should end at */
-{
- char c;
- sopno prevback = 0;
- sopno prevfwd = 0;
- sopno conc;
- int first = 1; /* is this the first alternative? */
-
- for (;;) {
- /* do a bunch of concatenated expressions */
- conc = HERE();
- while (MORE() && (c = PEEK()) != '|' && c != stop)
- p_ere_exp(p);
-#ifndef __CYGWIN__
- /* undefined behaviour according to POSIX; allowed by glibc */
- (void)REQUIRE(HERE() != conc, REG_EMPTY); /* require nonempty */
-#endif
-
- if (!EAT('|'))
- break; /* NOTE BREAK OUT */
-
- if (first) {
- INSERT(OCH_, conc); /* offset is wrong */
- prevfwd = conc;
- prevback = conc;
- first = 0;
- }
- ASTERN(OOR1, prevback);
- prevback = THERE();
- AHEAD(prevfwd); /* fix previous offset */
- prevfwd = HERE();
- EMIT(OOR2, 0); /* offset is very wrong */
- }
-
- if (!first) { /* tail-end fixups */
- AHEAD(prevfwd);
- ASTERN(O_CH, prevback);
- }
-
- assert(!MORE() || SEE(stop));
-}
-
-/*
- - p_ere_exp - parse one subERE, an atom possibly followed by a repetition op
- == static void p_ere_exp(struct parse *p);
- */
-static void
-p_ere_exp(struct parse *p)
-{
- char c;
- wint_t wc;
- sopno pos;
- int count;
- int count2;
- sopno subno;
- int wascaret = 0;
-
- assert(MORE()); /* caller should have ensured this */
- c = GETNEXT();
-
- pos = HERE();
- switch (c) {
- case '(':
- (void)REQUIRE(MORE(), REG_EPAREN);
- p->g->nsub++;
- subno = p->g->nsub;
- if (subno < NPAREN)
- p->pbegin[subno] = HERE();
- EMIT(OLPAREN, subno);
- if (!SEE(')'))
- p_ere(p, ')');
- if (subno < NPAREN) {
- p->pend[subno] = HERE();
- assert(p->pend[subno] != 0);
- }
- EMIT(ORPAREN, subno);
- (void)MUSTEAT(')', REG_EPAREN);
- break;
-#ifndef POSIX_MISTAKE
- case ')': /* happens only if no current unmatched ( */
- /*
- * You may ask, why the ifndef? Because I didn't notice
- * this until slightly too late for 1003.2, and none of the
- * other 1003.2 regular-expression reviewers noticed it at
- * all. So an unmatched ) is legal POSIX, at least until
- * we can get it fixed.
- */
- SETERROR(REG_EPAREN);
- break;
-#endif
- case '^':
- EMIT(OBOL, 0);
- p->g->iflags |= USEBOL;
- p->g->nbol++;
- wascaret = 1;
- break;
- case '$':
- EMIT(OEOL, 0);
- p->g->iflags |= USEEOL;
- p->g->neol++;
- break;
- case '|':
- SETERROR(REG_EMPTY);
- break;
- case '*':
- case '+':
- case '?':
- SETERROR(REG_BADRPT);
- break;
- case '.':
- if (p->g->cflags&REG_NEWLINE)
- nonnewline(p);
- else
- EMIT(OANY, 0);
- break;
- case '[':
- p_bracket(p);
- break;
- case '\\':
- (void)REQUIRE(MORE(), REG_EESCAPE);
- wc = WGETNEXT();
-#ifdef __CYGWIN__
- /* \< and \> are the GNU equivalents to [[:<:]] and [[:>:]] */
- switch (wc)
- {
- case L'<':
- EMIT(OBOW, 0);
- break;
- case L'>':
- EMIT(OEOW, 0);
- break;
- default:
- ordinary(p, wc);
- break;
- }
-#else
- ordinary(p, wc);
-#endif
- break;
- case '{': /* okay as ordinary except if digit follows */
- (void)REQUIRE(!MORE() || !isdigit((uch)PEEK()), REG_BADRPT);
- /* FALLTHROUGH */
- default:
- p->next--;
- wc = WGETNEXT();
- ordinary(p, wc);
- break;
- }
-
- if (!MORE())
- return;
- c = PEEK();
- /* we call { a repetition if followed by a digit */
- if (!( c == '*' || c == '+' || c == '?' ||
- (c == '{' && MORE2() && isdigit((uch)PEEK2())) ))
- return; /* no repetition, we're done */
- NEXT();
-
- (void)REQUIRE(!wascaret, REG_BADRPT);
- switch (c) {
- case '*': /* implemented as +? */
- /* this case does not require the (y|) trick, noKLUDGE */
- INSERT(OPLUS_, pos);
- ASTERN(O_PLUS, pos);
- INSERT(OQUEST_, pos);
- ASTERN(O_QUEST, pos);
- break;
- case '+':
- INSERT(OPLUS_, pos);
- ASTERN(O_PLUS, pos);
- break;
- case '?':
- /* KLUDGE: emit y? as (y|) until subtle bug gets fixed */
- INSERT(OCH_, pos); /* offset slightly wrong */
- ASTERN(OOR1, pos); /* this one's right */
- AHEAD(pos); /* fix the OCH_ */
- EMIT(OOR2, 0); /* offset very wrong... */
- AHEAD(THERE()); /* ...so fix it */
- ASTERN(O_CH, THERETHERE());
- break;
- case '{':
- count = p_count(p);
- if (EAT(',')) {
- if (isdigit((uch)PEEK())) {
- count2 = p_count(p);
- (void)REQUIRE(count <= count2, REG_BADBR);
- } else /* single number with comma */
- count2 = INFINITY;
- } else /* just a single number */
- count2 = count;
- repeat(p, pos, count, count2);
- if (!EAT('}')) { /* error heuristics */
- while (MORE() && PEEK() != '}')
- NEXT();
- (void)REQUIRE(MORE(), REG_EBRACE);
- SETERROR(REG_BADBR);
- }
- break;
- }
-
- if (!MORE())
- return;
- c = PEEK();
- if (!( c == '*' || c == '+' || c == '?' ||
- (c == '{' && MORE2() && isdigit((uch)PEEK2())) ) )
- return;
- SETERROR(REG_BADRPT);
-}
-
-/*
- - p_str - string (no metacharacters) "parser"
- == static void p_str(struct parse *p);
- */
-static void
-p_str(struct parse *p)
-{
- (void)REQUIRE(MORE(), REG_EMPTY);
- while (MORE())
- ordinary(p, WGETNEXT());
-}
-
-/*
- - p_bre - BRE parser top level, anchoring and concatenation
- == static void p_bre(struct parse *p, int end1, \
- == int end2);
- * Giving end1 as OUT essentially eliminates the end1/end2 check.
- *
- * This implementation is a bit of a kludge, in that a trailing $ is first
- * taken as an ordinary character and then revised to be an anchor.
- * The amount of lookahead needed to avoid this kludge is excessive.
- */
-static void
-p_bre(struct parse *p,
- int end1, /* first terminating character */
- int end2) /* second terminating character */
-{
- sopno start = HERE();
- int first = 1; /* first subexpression? */
- int wasdollar = 0;
-
- if (EAT('^')) {
- EMIT(OBOL, 0);
- p->g->iflags |= USEBOL;
- p->g->nbol++;
- }
- while (MORE() && !SEETWO(end1, end2)) {
- wasdollar = p_simp_re(p, first);
- first = 0;
- }
- if (wasdollar) { /* oops, that was a trailing anchor */
- DROP(1);
- EMIT(OEOL, 0);
- p->g->iflags |= USEEOL;
- p->g->neol++;
- }
-
- (void)REQUIRE(HERE() != start, REG_EMPTY); /* require nonempty */
-}
-
-/*
- - p_simp_re - parse a simple RE, an atom possibly followed by a repetition
- == static int p_simp_re(struct parse *p, int starordinary);
- */
-static int /* was the simple RE an unbackslashed $? */
-p_simp_re(struct parse *p,
- int starordinary) /* is a leading * an ordinary character? */
-{
- int c;
- int count;
- int count2;
- sopno pos;
- int i;
- wint_t wc;
- sopno subno;
-# define BACKSL (1<<CHAR_BIT)
-
- pos = HERE(); /* repetion op, if any, covers from here */
-
- assert(MORE()); /* caller should have ensured this */
- c = GETNEXT();
- if (c == '\\') {
- (void)REQUIRE(MORE(), REG_EESCAPE);
- c = BACKSL | GETNEXT();
- }
- switch (c) {
- case '.':
- if (p->g->cflags&REG_NEWLINE)
- nonnewline(p);
- else
- EMIT(OANY, 0);
- break;
- case '[':
- p_bracket(p);
- break;
-#ifdef __CYGWIN__
- case BACKSL|'<':
- /* \< is the GNU equivalents to [[:<:]] */
- EMIT(OBOW, 0);
- break;
- case BACKSL|'>':
- /* \> is the GNU equivalents to [[:>:]] */
- EMIT(OEOW, 0);
- break;
-#endif
- case BACKSL|'{':
- SETERROR(REG_BADRPT);
- break;
- case BACKSL|'(':
- p->g->nsub++;
- subno = p->g->nsub;
- if (subno < NPAREN)
- p->pbegin[subno] = HERE();
- EMIT(OLPAREN, subno);
- /* the MORE here is an error heuristic */
- if (MORE() && !SEETWO('\\', ')'))
- p_bre(p, '\\', ')');
- if (subno < NPAREN) {
- p->pend[subno] = HERE();
- assert(p->pend[subno] != 0);
- }
- EMIT(ORPAREN, subno);
- (void)REQUIRE(EATTWO('\\', ')'), REG_EPAREN);
- break;
- case BACKSL|')': /* should not get here -- must be user */
- case BACKSL|'}':
- SETERROR(REG_EPAREN);
- break;
- case BACKSL|'1':
- case BACKSL|'2':
- case BACKSL|'3':
- case BACKSL|'4':
- case BACKSL|'5':
- case BACKSL|'6':
- case BACKSL|'7':
- case BACKSL|'8':
- case BACKSL|'9':
- i = (c&~BACKSL) - '0';
- assert(i < NPAREN);
- if (p->pend[i] != 0) {
- assert(i <= p->g->nsub);
- EMIT(OBACK_, i);
- assert(p->pbegin[i] != 0);
- assert(OP(p->strip[p->pbegin[i]]) == OLPAREN);
- assert(OP(p->strip[p->pend[i]]) == ORPAREN);
- (void) dupl(p, p->pbegin[i]+1, p->pend[i]);
- EMIT(O_BACK, i);
- } else
- SETERROR(REG_ESUBREG);
- p->g->backrefs = 1;
- break;
- case '*':
- (void)REQUIRE(starordinary, REG_BADRPT);
- /* FALLTHROUGH */
- default:
- p->next--;
- wc = WGETNEXT();
- ordinary(p, wc);
- break;
- }
-
- if (EAT('*')) { /* implemented as +? */
- /* this case does not require the (y|) trick, noKLUDGE */
- INSERT(OPLUS_, pos);
- ASTERN(O_PLUS, pos);
- INSERT(OQUEST_, pos);
- ASTERN(O_QUEST, pos);
- } else if (EATTWO('\\', '{')) {
- count = p_count(p);
- if (EAT(',')) {
- if (MORE() && isdigit((uch)PEEK())) {
- count2 = p_count(p);
- (void)REQUIRE(count <= count2, REG_BADBR);
- } else /* single number with comma */
- count2 = INFINITY;
- } else /* just a single number */
- count2 = count;
- repeat(p, pos, count, count2);
- if (!EATTWO('\\', '}')) { /* error heuristics */
- while (MORE() && !SEETWO('\\', '}'))
- NEXT();
- (void)REQUIRE(MORE(), REG_EBRACE);
- SETERROR(REG_BADBR);
- }
- } else if (c == '$') /* $ (but not \$) ends it */
- return(1);
-
- return(0);
-}
-
-/*
- - p_count - parse a repetition count
- == static int p_count(struct parse *p);
- */
-static int /* the value */
-p_count(struct parse *p)
-{
- int count = 0;
- int ndigits = 0;
-
- while (MORE() && isdigit((uch)PEEK()) && count <= DUPMAX) {
- count = count*10 + (GETNEXT() - '0');
- ndigits++;
- }
-
- (void)REQUIRE(ndigits > 0 && count <= DUPMAX, REG_BADBR);
- return(count);
-}
-
-/*
- - p_bracket - parse a bracketed character list
- == static void p_bracket(struct parse *p);
- */
-static void
-p_bracket(struct parse *p)
-{
- cset *cs;
- wint_t ch;
-
- /* Dept of Truly Sickening Special-Case Kludges */
- if (p->next + 5 < p->end && strncmp(p->next, "[:<:]]", 6) == 0) {
- EMIT(OBOW, 0);
- NEXTn(6);
- return;
- }
- if (p->next + 5 < p->end && strncmp(p->next, "[:>:]]", 6) == 0) {
- EMIT(OEOW, 0);
- NEXTn(6);
- return;
- }
-
- if ((cs = allocset(p)) == NULL)
- return;
-
- if (p->g->cflags&REG_ICASE)
- cs->icase = 1;
- if (EAT('^'))
- cs->invert = 1;
- if (EAT(']'))
- CHadd(p, cs, ']');
- else if (EAT('-'))
- CHadd(p, cs, '-');
- while (MORE() && PEEK() != ']' && !SEETWO('-', ']'))
- p_b_term(p, cs);
- if (EAT('-'))
- CHadd(p, cs, '-');
- (void)MUSTEAT(']', REG_EBRACK);
-
- if (p->error != 0) /* don't mess things up further */
- return;
-
- if (cs->invert && p->g->cflags&REG_NEWLINE)
- cs->bmp['\n' >> 3] |= 1 << ('\n' & 7);
-
- if ((ch = singleton(cs)) != OUT /* optimize singleton sets */
- && cs->invert == 0) { /* But not in invert case. */
- ordinary(p, ch);
- freeset(p, cs);
- } else
- EMIT(OANYOF, (int)(cs - p->g->sets));
-}
-
-/*
- - p_b_term - parse one term of a bracketed character list
- == static void p_b_term(struct parse *p, cset *cs);
- */
-static void
-p_b_term(struct parse *p, cset *cs)
-{
- char c;
- wint_t start, finish;
- wint_t i;
-
- /* classify what we've got */
- switch ((MORE()) ? PEEK() : '\0') {
- case '[':
- c = (MORE2()) ? PEEK2() : '\0';
- break;
- case '-':
- SETERROR(REG_ERANGE);
- return; /* NOTE RETURN */
- break;
- default:
- c = '\0';
- break;
- }
-
- switch (c) {
- case ':': /* character class */
- NEXT2();
- (void)REQUIRE(MORE(), REG_EBRACK);
- c = PEEK();
- (void)REQUIRE(c != '-' && c != ']', REG_ECTYPE);
- p_b_cclass(p, cs);
- (void)REQUIRE(MORE(), REG_EBRACK);
- (void)REQUIRE(EATTWO(':', ']'), REG_ECTYPE);
- break;
- case '=': /* equivalence class */
- NEXT2();
- (void)REQUIRE(MORE(), REG_EBRACK);
- c = PEEK();
- (void)REQUIRE(c != '-' && c != ']', REG_ECOLLATE);
- p_b_eclass(p, cs);
- (void)REQUIRE(MORE(), REG_EBRACK);
- (void)REQUIRE(EATTWO('=', ']'), REG_ECOLLATE);
- break;
- default: /* symbol, ordinary character, or range */
- start = p_b_symbol(p);
- if (SEE('-') && MORE2() && PEEK2() != ']') {
- /* range */
- NEXT();
- if (EAT('-'))
- finish = '-';
- else
- finish = p_b_symbol(p);
- } else if (SEE('-') && !MORE2()) {
- SETERROR(REG_EBRACK);
- return;
- } else
- finish = start;
- if (start == finish)
- CHadd(p, cs, start);
- else {
-#ifdef __CYGWIN__
- if (!collate_lcid) {
-#else
- if (__collate_load_error) {
-#endif
- (void)REQUIRE((uch)start <= (uch)finish, REG_ERANGE);
- CHaddrange(p, cs, start, finish);
- } else {
- (void)REQUIRE(__collate_range_cmp(start, finish) <= 0, REG_ERANGE);
- for (i = 0; i <= UCHAR_MAX; i++) {
- if ( __collate_range_cmp(start, i) <= 0
- && __collate_range_cmp(i, finish) <= 0
- )
- CHadd(p, cs, i);
- }
- }
- }
- break;
- }
-}
-
-/*
- - p_b_cclass - parse a character-class name and deal with it
- == static void p_b_cclass(struct parse *p, cset *cs);
- */
-static void
-p_b_cclass(struct parse *p, cset *cs)
-{
- char *sp = p->next;
- size_t len;
- wctype_t wct;
- char clname[16];
-
- while (MORE() && isalpha((uch)PEEK()))
- NEXT();
- len = p->next - sp;
- if (len >= sizeof(clname) - 1) {
- SETERROR(REG_ECTYPE);
- return;
- }
- memcpy(clname, sp, len);
- clname[len] = '\0';
- if ((wct = wctype(clname)) == 0) {
- SETERROR(REG_ECTYPE);
- return;
- }
- CHaddtype(p, cs, wct);
-}
-
-/*
- - p_b_eclass - parse an equivalence-class name and deal with it
- == static void p_b_eclass(struct parse *p, cset *cs);
- *
- * This implementation is incomplete. xxx
- */
-static void
-p_b_eclass(struct parse *p, cset *cs)
-{
- wint_t c;
-
- c = p_b_coll_elem(p, '=');
- CHadd(p, cs, c);
-}
-
-/*
- - p_b_symbol - parse a character or [..]ed multicharacter collating symbol
- == static char p_b_symbol(struct parse *p);
- */
-static wint_t /* value of symbol */
-p_b_symbol(struct parse *p)
-{
- wint_t value;
-
- (void)REQUIRE(MORE(), REG_EBRACK);
- if (!EATTWO('[', '.'))
- return(WGETNEXT());
-
- /* collating symbol */
- value = p_b_coll_elem(p, '.');
- (void)REQUIRE(EATTWO('.', ']'), REG_ECOLLATE);
- return(value);
-}
-
-/*
- - p_b_coll_elem - parse a collating-element name and look it up
- == static char p_b_coll_elem(struct parse *p, int endc);
- */
-static wint_t /* value of collating element */
-p_b_coll_elem(struct parse *p,
- wint_t endc) /* name ended by endc,']' */
-{
- char *sp = p->next;
- struct cname *cp;
- int len;
- mbstate_t mbs;
- wchar_t wc;
- size_t clen;
-
- while (MORE() && !SEETWO(endc, ']'))
- NEXT();
- if (!MORE()) {
- SETERROR(REG_EBRACK);
- return(0);
- }
- len = p->next - sp;
- for (cp = cnames; cp->name != NULL; cp++)
- if (strncmp(cp->name, sp, len) == 0 && cp->name[len] == '\0')
- return(cp->code); /* known name */
- memset(&mbs, 0, sizeof(mbs));
- if ((clen = mbrtowc(&wc, sp, len, &mbs)) == len)
- return (wc); /* single character */
- else if (clen == (size_t)-1 || clen == (size_t)-2)
- SETERROR(REG_ILLSEQ);
- else
- SETERROR(REG_ECOLLATE); /* neither */
- return(0);
-}
-
-/*
- - othercase - return the case counterpart of an alphabetic
- == static char othercase(int ch);
- */
-static wint_t /* if no counterpart, return ch */
-othercase(wint_t ch)
-{
- assert(iswalpha(ch));
- if (iswupper(ch))
- return(towlower(ch));
- else if (iswlower(ch))
- return(towupper(ch));
- else /* peculiar, but could happen */
- return(ch);
-}
-
-/*
- - bothcases - emit a dualcase version of a two-case character
- == static void bothcases(struct parse *p, int ch);
- *
- * Boy, is this implementation ever a kludge...
- */
-static void
-bothcases(struct parse *p, wint_t ch)
-{
- char *oldnext = p->next;
- char *oldend = p->end;
- char bracket[3 + MB_LEN_MAX];
- size_t n;
- mbstate_t mbs;
-
- assert(othercase(ch) != ch); /* p_bracket() would recurse */
- p->next = bracket;
- memset(&mbs, 0, sizeof(mbs));
- n = xwcrtomb(bracket, ch, &mbs);
- assert(n != (size_t)-1);
- bracket[n] = ']';
- bracket[n + 1] = '\0';
- p->end = bracket+n+1;
- p_bracket(p);
- assert(p->next == p->end);
- p->next = oldnext;
- p->end = oldend;
-}
-
-/*
- - ordinary - emit an ordinary character
- == static void ordinary(struct parse *p, int ch);
- */
-static void
-ordinary(struct parse *p, wint_t ch)
-{
- cset *cs;
-
- if ((p->g->cflags&REG_ICASE) && iswalpha(ch) && othercase(ch) != ch)
- bothcases(p, ch);
- else if ((ch & OPDMASK) == ch)
- EMIT(OCHAR, ch);
- else {
- /*
- * Kludge: character is too big to fit into an OCHAR operand.
- * Emit a singleton set.
- */
- if ((cs = allocset(p)) == NULL)
- return;
- CHadd(p, cs, ch);
- EMIT(OANYOF, (int)(cs - p->g->sets));
- }
-}
-
-/*
- - nonnewline - emit REG_NEWLINE version of OANY
- == static void nonnewline(struct parse *p);
- *
- * Boy, is this implementation ever a kludge...
- */
-static void
-nonnewline(struct parse *p)
-{
- char *oldnext = p->next;
- char *oldend = p->end;
- char bracket[4];
-
- p->next = bracket;
- p->end = bracket+3;
- bracket[0] = '^';
- bracket[1] = '\n';
- bracket[2] = ']';
- bracket[3] = '\0';
- p_bracket(p);
- assert(p->next == bracket+3);
- p->next = oldnext;
- p->end = oldend;
-}
-
-/*
- - repeat - generate code for a bounded repetition, recursively if needed
- == static void repeat(struct parse *p, sopno start, int from, int to);
- */
-static void
-repeat(struct parse *p,
- sopno start, /* operand from here to end of strip */
- int from, /* repeated from this number */
- int to) /* to this number of times (maybe INFINITY) */
-{
- sopno finish = HERE();
-# define N 2
-# define INF 3
-# define REP(f, t) ((f)*8 + (t))
-# define MAP(n) (((n) <= 1) ? (n) : ((n) == INFINITY) ? INF : N)
- sopno copy;
-
- if (p->error != 0) /* head off possible runaway recursion */
- return;
-
- assert(from <= to);
-
- switch (REP(MAP(from), MAP(to))) {
- case REP(0, 0): /* must be user doing this */
- DROP(finish-start); /* drop the operand */
- break;
- case REP(0, 1): /* as x{1,1}? */
- case REP(0, N): /* as x{1,n}? */
- case REP(0, INF): /* as x{1,}? */
- /* KLUDGE: emit y? as (y|) until subtle bug gets fixed */
- INSERT(OCH_, start); /* offset is wrong... */
- repeat(p, start+1, 1, to);
- ASTERN(OOR1, start);
- AHEAD(start); /* ... fix it */
- EMIT(OOR2, 0);
- AHEAD(THERE());
- ASTERN(O_CH, THERETHERE());
- break;
- case REP(1, 1): /* trivial case */
- /* done */
- break;
- case REP(1, N): /* as x?x{1,n-1} */
- /* KLUDGE: emit y? as (y|) until subtle bug gets fixed */
- INSERT(OCH_, start);
- ASTERN(OOR1, start);
- AHEAD(start);
- EMIT(OOR2, 0); /* offset very wrong... */
- AHEAD(THERE()); /* ...so fix it */
- ASTERN(O_CH, THERETHERE());
- copy = dupl(p, start+1, finish+1);
- assert(copy == finish+4);
- repeat(p, copy, 1, to-1);
- break;
- case REP(1, INF): /* as x+ */
- INSERT(OPLUS_, start);
- ASTERN(O_PLUS, start);
- break;
- case REP(N, N): /* as xx{m-1,n-1} */
- copy = dupl(p, start, finish);
- repeat(p, copy, from-1, to-1);
- break;
- case REP(N, INF): /* as xx{n-1,INF} */
- copy = dupl(p, start, finish);
- repeat(p, copy, from-1, to);
- break;
- default: /* "can't happen" */
- SETERROR(REG_ASSERT); /* just in case */
- break;
- }
-}
-
-/*
- - wgetnext - helper function for WGETNEXT() macro. Gets the next wide
- - character from the parse struct, signals a REG_ILLSEQ error if the
- - character can't be converted. Returns the number of bytes consumed.
- */
-static wint_t
-wgetnext(struct parse *p)
-{
- mbstate_t mbs;
- wchar_t wc;
- wint_t ret;
- size_t n;
-
-#ifdef __CYGWIN__
- /* Kludge for more glibc compatibility. On Cygwin as well as on
- Linux, mbrtowc returns -1 if the current local's codeset is ASCII
- and the character is >= 0x80. Nevertheless, glibc's regcomp allows
- any char value, even stuff like [\xc0-\xff], if the locale's codeset
- is ASCII, so in regcomp it ignores the fact that chars >= 0x80 are
- invalid ASCII chars. To be more Linux-compatible, we align the
- behaviour to glibc here. Allow any character value if the current
- local's codeset is ASCII. */
- if (*__locale_charset () == 'A') /* SCII */
- return (wint_t) (unsigned char) *p->next++;
-#endif
- memset(&mbs, 0, sizeof(mbs));
- n = mbrtowc(&wc, p->next, p->end - p->next, &mbs);
- if (n == (size_t)-1 || n == (size_t)-2) {
- SETERROR(REG_ILLSEQ);
- return (0);
- }
- ret = wc;
- if (n == 0)
- n = 1;
- else if (sizeof (wchar_t) == 2 && wc >= 0xd800 && wc <= 0xdbff) {
- /* UTF-16 surrogate pair. Fetch second half and
- compute UTF-32 value */
- size_t n2 = mbrtowc(&wc, p->next + n,
- p->end - p->next - n, &mbs);
- if (n2 == 0 || n2 == (size_t)-1 || n2 == (size_t)-2) {
- SETERROR(REG_ILLSEQ);
- return (0);
- }
- ret = (((ret & 0x3ff) << 10) | (wc & 0x3ff))
- + 0x10000;
- n += n2;
- }
- p->next += n;
- return (ret);
-}
-
-static size_t
-xwcrtomb (char *s, wint_t wc, mbstate_t *ps)
-{
- if (sizeof (wchar_t) == 2 && wc >= 0x10000)
- {
- /* UTF-16 wcrtomb can't handle these values directly. The rest of the
- code isn't surrogate pair aware, so we handle this here. Convert
- value to UTF-16 surrogate and call wcsrtombs to convert the "string"
- to the correct multibyte representation, if any. */
- wchar_t ws[2];
- const wchar_t *wsp = ws;
-
- wc -= 0x10000;
- ws[0] = 0xd800 | (wc >> 10);
- ws[1] = 0xdc00 | (wc & 0x3ff);
- return wcsnrtombs (s, &wsp, 2, MB_CUR_MAX, ps);
- }
- return wcrtomb (s, wc, ps);
-}
-
-
-/*
- - seterr - set an error condition
- == static int seterr(struct parse *p, int e);
- */
-static int /* useless but makes type checking happy */
-seterr(struct parse *p, int e)
-{
- if (p->error == 0) /* keep earliest error condition */
- p->error = e;
- p->next = nuls; /* try to bring things to a halt */
- p->end = nuls;
- return(0); /* make the return value well-defined */
-}
-
-/*
- - allocset - allocate a set of characters for []
- == static cset *allocset(struct parse *p);
- */
-static cset *
-allocset(struct parse *p)
-{
- cset *cs, *ncs;
-
- ncs = realloc(p->g->sets, (p->g->ncsets + 1) * sizeof(*ncs));
- if (ncs == NULL) {
- SETERROR(REG_ESPACE);
- return (NULL);
- }
- p->g->sets = ncs;
- cs = &p->g->sets[p->g->ncsets++];
- memset(cs, 0, sizeof(*cs));
-
- return(cs);
-}
-
-/*
- - freeset - free a now-unused set
- == static void freeset(struct parse *p, cset *cs);
- */
-static void
-freeset(struct parse *p, cset *cs)
-{
- cset *top = &p->g->sets[p->g->ncsets];
-
- free(cs->wides);
- free(cs->ranges);
- free(cs->types);
- memset(cs, 0, sizeof(*cs));
- if (cs == top-1) /* recover only the easy case */
- p->g->ncsets--;
-}
-
-/*
- - singleton - Determine whether a set contains only one character,
- - returning it if so, otherwise returning OUT.
- */
-static wint_t
-singleton(cset *cs)
-{
- wint_t i, s, n;
-
- for (i = n = 0; i < NC; i++)
- if (CHIN(cs, i)) {
- n++;
- s = i;
- }
- if (n == 1 && cs->nwides == 0)
- return (s);
- if (n == 0 && cs->nwides == 1 && cs->nranges == 0 && cs->ntypes == 0 &&
- cs->icase == 0)
- return (cs->wides[0]);
- /* Don't bother handling the other cases. */
- return (OUT);
-}
-
-/*
- - CHadd - add character to character set.
- */
-static void
-CHadd(struct parse *p, cset *cs, wint_t ch)
-{
- wint_t nch, *newwides;
- assert(ch >= 0);
- if (ch < NC)
- cs->bmp[ch >> 3] |= 1 << (ch & 7);
- else {
- newwides = realloc(cs->wides, (cs->nwides + 1) *
- sizeof(*cs->wides));
- if (newwides == NULL) {
- SETERROR(REG_ESPACE);
- return;
- }
- cs->wides = newwides;
- cs->wides[cs->nwides++] = ch;
- }
- if (cs->icase) {
- if ((nch = towlower(ch)) < NC)
- cs->bmp[nch >> 3] |= 1 << (nch & 7);
- if ((nch = towupper(ch)) < NC)
- cs->bmp[nch >> 3] |= 1 << (nch & 7);
- }
-}
-
-/*
- - CHaddrange - add all characters in the range [min,max] to a character set.
- */
-static void
-CHaddrange(struct parse *p, cset *cs, wint_t min, wint_t max)
-{
- crange *newranges;
-
- for (; min < NC && min <= max; min++)
- CHadd(p, cs, min);
- if (min >= max)
- return;
- newranges = realloc(cs->ranges, (cs->nranges + 1) *
- sizeof(*cs->ranges));
- if (newranges == NULL) {
- SETERROR(REG_ESPACE);
- return;
- }
- cs->ranges = newranges;
- cs->ranges[cs->nranges].min = min;
- cs->ranges[cs->nranges].min = max;
- cs->nranges++;
-}
-
-/*
- - CHaddtype - add all characters of a certain type to a character set.
- */
-static void
-CHaddtype(struct parse *p, cset *cs, wctype_t wct)
-{
- wint_t i;
- wctype_t *newtypes;
-
- for (i = 0; i < NC; i++)
- if (iswctype(i, wct))
- CHadd(p, cs, i);
- newtypes = realloc(cs->types, (cs->ntypes + 1) *
- sizeof(*cs->types));
- if (newtypes == NULL) {
- SETERROR(REG_ESPACE);
- return;
- }
- cs->types = newtypes;
- cs->types[cs->ntypes++] = wct;
-}
-
-/*
- - dupl - emit a duplicate of a bunch of sops
- == static sopno dupl(struct parse *p, sopno start, sopno finish);
- */
-static sopno /* start of duplicate */
-dupl(struct parse *p,
- sopno start, /* from here */
- sopno finish) /* to this less one */
-{
- sopno ret = HERE();
- sopno len = finish - start;
-
- assert(finish >= start);
- if (len == 0)
- return(ret);
- enlarge(p, p->ssize + len); /* this many unexpected additions */
- assert(p->ssize >= p->slen + len);
- (void) memcpy((char *)(p->strip + p->slen),
- (char *)(p->strip + start), (size_t)len*sizeof(sop));
- p->slen += len;
- return(ret);
-}
-
-/*
- - doemit - emit a strip operator
- == static void doemit(struct parse *p, sop op, size_t opnd);
- *
- * It might seem better to implement this as a macro with a function as
- * hard-case backup, but it's just too big and messy unless there are
- * some changes to the data structures. Maybe later.
- */
-static void
-doemit(struct parse *p, sop op, size_t opnd)
-{
- /* avoid making error situations worse */
- if (p->error != 0)
- return;
-
- /* deal with oversize operands ("can't happen", more or less) */
- assert(opnd < 1<<OPSHIFT);
-
- /* deal with undersized strip */
- if (p->slen >= p->ssize)
- enlarge(p, (p->ssize+1) / 2 * 3); /* +50% */
- assert(p->slen < p->ssize);
-
- /* finally, it's all reduced to the easy case */
- p->strip[p->slen++] = SOP(op, opnd);
-}
-
-/*
- - doinsert - insert a sop into the strip
- == static void doinsert(struct parse *p, sop op, size_t opnd, sopno pos);
- */
-static void
-doinsert(struct parse *p, sop op, size_t opnd, sopno pos)
-{
- sopno sn;
- sop s;
- int i;
-
- /* avoid making error situations worse */
- if (p->error != 0)
- return;
-
- sn = HERE();
- EMIT(op, opnd); /* do checks, ensure space */
- assert(HERE() == sn+1);
- s = p->strip[sn];
-
- /* adjust paren pointers */
- assert(pos > 0);
- for (i = 1; i < NPAREN; i++) {
- if (p->pbegin[i] >= pos) {
- p->pbegin[i]++;
- }
- if (p->pend[i] >= pos) {
- p->pend[i]++;
- }
- }
-
- memmove((char *)&p->strip[pos+1], (char *)&p->strip[pos],
- (HERE()-pos-1)*sizeof(sop));
- p->strip[pos] = s;
-}
-
-/*
- - dofwd - complete a forward reference
- == static void dofwd(struct parse *p, sopno pos, sop value);
- */
-static void
-dofwd(struct parse *p, sopno pos, sop value)
-{
- /* avoid making error situations worse */
- if (p->error != 0)
- return;
-
- assert(value < 1<<OPSHIFT);
- p->strip[pos] = OP(p->strip[pos]) | value;
-}
-
-/*
- - enlarge - enlarge the strip
- == static void enlarge(struct parse *p, sopno size);
- */
-static void
-enlarge(struct parse *p, sopno size)
-{
- sop *sp;
-
- if (p->ssize >= size)
- return;
-
- sp = (sop *)realloc(p->strip, size*sizeof(sop));
- if (sp == NULL) {
- SETERROR(REG_ESPACE);
- return;
- }
- p->strip = sp;
- p->ssize = size;
-}
-
-/*
- - stripsnug - compact the strip
- == static void stripsnug(struct parse *p, struct re_guts *g);
- */
-static void
-stripsnug(struct parse *p, struct re_guts *g)
-{
- g->nstates = p->slen;
- g->strip = (sop *)realloc((char *)p->strip, p->slen * sizeof(sop));
- if (g->strip == NULL) {
- SETERROR(REG_ESPACE);
- g->strip = p->strip;
- }
-}
-
-/*
- - findmust - fill in must and mlen with longest mandatory literal string
- == static void findmust(struct parse *p, struct re_guts *g);
- *
- * This algorithm could do fancy things like analyzing the operands of |
- * for common subsequences. Someday. This code is simple and finds most
- * of the interesting cases.
- *
- * Note that must and mlen got initialized during setup.
- */
-static void
-findmust(struct parse *p, struct re_guts *g)
-{
- sop *scan;
- sop *start = NULL;
- sop *newstart = NULL;
- sopno newlen;
- sop s;
- char *cp;
- int offset;
- char buf[MB_LEN_MAX];
- size_t clen;
- mbstate_t mbs;
-
- /* avoid making error situations worse */
- if (p->error != 0)
- return;
-
- /*
- * It's not generally safe to do a ``char'' substring search on
- * multibyte character strings, but it's safe for at least
- * UTF-8 (see RFC 3629).
- */
- if (MB_CUR_MAX > 1 &&
-#ifdef __CYGWIN__
- strcmp(__locale_charset (), "UTF-8") != 0)
-#else
- strcmp(_CurrentRuneLocale->__encoding, "UTF-8") != 0)
-#endif
- return;
-
- /* find the longest OCHAR sequence in strip */
- newlen = 0;
- offset = 0;
- g->moffset = 0;
- scan = g->strip + 1;
- do {
- s = *scan++;
- switch (OP(s)) {
- case OCHAR: /* sequence member */
- if (newlen == 0) { /* new sequence */
- memset(&mbs, 0, sizeof(mbs));
- newstart = scan - 1;
- }
- clen = xwcrtomb(buf, OPND(s), &mbs);
- if (clen == (size_t)-1)
- goto toohard;
- newlen += clen;
- break;
- case OPLUS_: /* things that don't break one */
- case OLPAREN:
- case ORPAREN:
- break;
- case OQUEST_: /* things that must be skipped */
- case OCH_:
- offset = altoffset(scan, offset);
- scan--;
- do {
- scan += OPND(s);
- s = *scan;
- /* assert() interferes w debug printouts */
- if (OP(s) != O_QUEST && OP(s) != O_CH &&
- OP(s) != OOR2) {
- g->iflags |= BAD;
- return;
- }
- } while (OP(s) != O_QUEST && OP(s) != O_CH);
- /* FALLTHROUGH */
- case OBOW: /* things that break a sequence */
- case OEOW:
- case OBOL:
- case OEOL:
- case O_QUEST:
- case O_CH:
- case OEND:
- if (newlen > g->mlen) { /* ends one */
- start = newstart;
- g->mlen = newlen;
- if (offset > -1) {
- g->moffset += offset;
- offset = newlen;
- } else
- g->moffset = offset;
- } else {
- if (offset > -1)
- offset += newlen;
- }
- newlen = 0;
- break;
- case OANY:
- if (newlen > g->mlen) { /* ends one */
- start = newstart;
- g->mlen = newlen;
- if (offset > -1) {
- g->moffset += offset;
- offset = newlen;
- } else
- g->moffset = offset;
- } else {
- if (offset > -1)
- offset += newlen;
- }
- if (offset > -1)
- offset++;
- newlen = 0;
- break;
- case OANYOF: /* may or may not invalidate offset */
- /* First, everything as OANY */
- if (newlen > g->mlen) { /* ends one */
- start = newstart;
- g->mlen = newlen;
- if (offset > -1) {
- g->moffset += offset;
- offset = newlen;
- } else
- g->moffset = offset;
- } else {
- if (offset > -1)
- offset += newlen;
- }
- if (offset > -1)
- offset++;
- newlen = 0;
- break;
- toohard:
- default:
- /* Anything here makes it impossible or too hard
- * to calculate the offset -- so we give up;
- * save the last known good offset, in case the
- * must sequence doesn't occur later.
- */
- if (newlen > g->mlen) { /* ends one */
- start = newstart;
- g->mlen = newlen;
- if (offset > -1)
- g->moffset += offset;
- else
- g->moffset = offset;
- }
- offset = -1;
- newlen = 0;
- break;
- }
- } while (OP(s) != OEND);
-
- if (g->mlen == 0) { /* there isn't one */
- g->moffset = -1;
- return;
- }
-
- /* turn it into a character string */
- g->must = malloc((size_t)g->mlen + 1);
- if (g->must == NULL) { /* argh; just forget it */
- g->mlen = 0;
- g->moffset = -1;
- return;
- }
- cp = g->must;
- scan = start;
- memset(&mbs, 0, sizeof(mbs));
- while (cp < g->must + g->mlen) {
- while (OP(s = *scan++) != OCHAR)
- continue;
- clen = xwcrtomb(cp, OPND(s), &mbs);
- assert(clen != (size_t)-1);
- cp += clen;
- }
- assert(cp == g->must + g->mlen);
- *cp++ = '\0'; /* just on general principles */
-}
-
-/*
- - altoffset - choose biggest offset among multiple choices
- == static int altoffset(sop *scan, int offset);
- *
- * Compute, recursively if necessary, the largest offset among multiple
- * re paths.
- */
-static int
-altoffset(sop *scan, int offset)
-{
- int largest;
- int try;
- sop s;
-
- /* If we gave up already on offsets, return */
- if (offset == -1)
- return -1;
-
- largest = 0;
- try = 0;
- s = *scan++;
- while (OP(s) != O_QUEST && OP(s) != O_CH) {
- switch (OP(s)) {
- case OOR1:
- if (try > largest)
- largest = try;
- try = 0;
- break;
- case OQUEST_:
- case OCH_:
- try = altoffset(scan, try);
- if (try == -1)
- return -1;
- scan--;
- do {
- scan += OPND(s);
- s = *scan;
- if (OP(s) != O_QUEST && OP(s) != O_CH &&
- OP(s) != OOR2)
- return -1;
- } while (OP(s) != O_QUEST && OP(s) != O_CH);
- /* We must skip to the next position, or we'll
- * leave altoffset() too early.
- */
- scan++;
- break;
- case OANYOF:
- case OCHAR:
- case OANY:
- try++;
- case OBOW:
- case OEOW:
- case OLPAREN:
- case ORPAREN:
- case OOR2:
- break;
- default:
- try = -1;
- break;
- }
- if (try == -1)
- return -1;
- s = *scan++;
- }
-
- if (try > largest)
- largest = try;
-
- return largest+offset;
-}
-
-/*
- - computejumps - compute char jumps for BM scan
- == static void computejumps(struct parse *p, struct re_guts *g);
- *
- * This algorithm assumes g->must exists and is has size greater than
- * zero. It's based on the algorithm found on Computer Algorithms by
- * Sara Baase.
- *
- * A char jump is the number of characters one needs to jump based on
- * the value of the character from the text that was mismatched.
- */
-static void
-computejumps(struct parse *p, struct re_guts *g)
-{
- int ch;
- int mindex;
-
- /* Avoid making errors worse */
- if (p->error != 0)
- return;
-
- g->charjump = (int*) malloc((NC + 1) * sizeof(int));
- if (g->charjump == NULL) /* Not a fatal error */
- return;
- /* Adjust for signed chars, if necessary */
- g->charjump = &g->charjump[-(CHAR_MIN)];
-
- /* If the character does not exist in the pattern, the jump
- * is equal to the number of characters in the pattern.
- */
- for (ch = CHAR_MIN; ch < (CHAR_MAX + 1); ch++)
- g->charjump[ch] = g->mlen;
-
- /* If the character does exist, compute the jump that would
- * take us to the last character in the pattern equal to it
- * (notice that we match right to left, so that last character
- * is the first one that would be matched).
- */
- for (mindex = 0; mindex < g->mlen; mindex++)
- g->charjump[(int)g->must[mindex]] = g->mlen - mindex - 1;
-}
-
-/*
- - computematchjumps - compute match jumps for BM scan
- == static void computematchjumps(struct parse *p, struct re_guts *g);
- *
- * This algorithm assumes g->must exists and is has size greater than
- * zero. It's based on the algorithm found on Computer Algorithms by
- * Sara Baase.
- *
- * A match jump is the number of characters one needs to advance based
- * on the already-matched suffix.
- * Notice that all values here are minus (g->mlen-1), because of the way
- * the search algorithm works.
- */
-static void
-computematchjumps(struct parse *p, struct re_guts *g)
-{
- int mindex; /* General "must" iterator */
- int suffix; /* Keeps track of matching suffix */
- int ssuffix; /* Keeps track of suffixes' suffix */
- int* pmatches; /* pmatches[k] points to the next i
- * such that i+1...mlen is a substring
- * of k+1...k+mlen-i-1
- */
-
- /* Avoid making errors worse */
- if (p->error != 0)
- return;
-
- pmatches = (int*) malloc(g->mlen * sizeof(unsigned int));
- if (pmatches == NULL) {
- g->matchjump = NULL;
- return;
- }
-
- g->matchjump = (int*) malloc(g->mlen * sizeof(unsigned int));
- if (g->matchjump == NULL) /* Not a fatal error */
- {
- free (pmatches);
- return;
- }
-
- /* Set maximum possible jump for each character in the pattern */
- for (mindex = 0; mindex < g->mlen; mindex++)
- g->matchjump[mindex] = 2*g->mlen - mindex - 1;
-
- /* Compute pmatches[] */
- for (mindex = g->mlen - 1, suffix = g->mlen; mindex >= 0;
- mindex--, suffix--) {
- pmatches[mindex] = suffix;
-
- /* If a mismatch is found, interrupting the substring,
- * compute the matchjump for that position. If no
- * mismatch is found, then a text substring mismatched
- * against the suffix will also mismatch against the
- * substring.
- */
- while (suffix < g->mlen
- && g->must[mindex] != g->must[suffix]) {
- g->matchjump[suffix] = MIN(g->matchjump[suffix],
- g->mlen - mindex - 1);
- suffix = pmatches[suffix];
- }
- }
-
- /* Compute the matchjump up to the last substring found to jump
- * to the beginning of the largest must pattern prefix matching
- * it's own suffix.
- */
- for (mindex = 0; mindex <= suffix; mindex++)
- g->matchjump[mindex] = MIN(g->matchjump[mindex],
- g->mlen + suffix - mindex);
-
- ssuffix = pmatches[suffix];
- while (suffix < g->mlen) {
- while (suffix <= ssuffix && suffix < g->mlen) {
- g->matchjump[suffix] = MIN(g->matchjump[suffix],
- g->mlen + ssuffix - suffix);
- suffix++;
- }
- if (suffix < g->mlen)
- ssuffix = pmatches[ssuffix];
- }
-
- free(pmatches);
-}
-
-/*
- - pluscount - count + nesting
- == static sopno pluscount(struct parse *p, struct re_guts *g);
- */
-static sopno /* nesting depth */
-pluscount(struct parse *p, struct re_guts *g)
-{
- sop *scan;
- sop s;
- sopno plusnest = 0;
- sopno maxnest = 0;
-
- if (p->error != 0)
- return(0); /* there may not be an OEND */
-
- scan = g->strip + 1;
- do {
- s = *scan++;
- switch (OP(s)) {
- case OPLUS_:
- plusnest++;
- break;
- case O_PLUS:
- if (plusnest > maxnest)
- maxnest = plusnest;
- plusnest--;
- break;
- }
- } while (OP(s) != OEND);
- if (plusnest != 0)
- g->iflags |= BAD;
- return(maxnest);
-}
diff --git a/winsup/cygwin/regex/regerror.c b/winsup/cygwin/regex/regerror.c
deleted file mode 100644
index 1bba3e4a6..000000000
--- a/winsup/cygwin/regex/regerror.c
+++ /dev/null
@@ -1,190 +0,0 @@
-/*-
- * Copyright (c) 1992, 1993, 1994 Henry Spencer.
- * Copyright (c) 1992, 1993, 1994
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Henry Spencer.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)regerror.c 8.4 (Berkeley) 3/20/94
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)regerror.c 8.4 (Berkeley) 3/20/94";
-#endif /* LIBC_SCCS and not lint */
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/lib/libc/regex/regerror.c,v 1.11 2007/06/11 03:05:54 delphij Exp $");
-
-#include <sys/types.h>
-#include <stdio.h>
-#include <string.h>
-#include <limits.h>
-#include <stdlib.h>
-#include <regex.h>
-
-#include "utils.h"
-
-/* ========= begin header generated by ./mkh ========= */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* === regerror.c === */
-static char *regatoi(const regex_t *preg, char *localbuf);
-
-#ifdef __cplusplus
-}
-#endif
-/* ========= end header generated by ./mkh ========= */
-/*
- = #define REG_NOMATCH 1
- = #define REG_BADPAT 2
- = #define REG_ECOLLATE 3
- = #define REG_ECTYPE 4
- = #define REG_EESCAPE 5
- = #define REG_ESUBREG 6
- = #define REG_EBRACK 7
- = #define REG_EPAREN 8
- = #define REG_EBRACE 9
- = #define REG_BADBR 10
- = #define REG_ERANGE 11
- = #define REG_ESPACE 12
- = #define REG_BADRPT 13
- = #define REG_EMPTY 14
- = #define REG_ASSERT 15
- = #define REG_INVARG 16
- = #define REG_ILLSEQ 17
- = #define REG_ATOI 255 // convert name to number (!)
- = #define REG_ITOA 0400 // convert number to name (!)
- */
-static struct rerr {
- int code;
-#ifdef __CYGWIN__ /* Avoid whining compiler */
- const char *name;
- const char *explain;
-#else
- char *name;
- char *explain;
-#endif
-} rerrs[] = {
- {REG_NOMATCH, "REG_NOMATCH", "regexec() failed to match"},
- {REG_BADPAT, "REG_BADPAT", "invalid regular expression"},
- {REG_ECOLLATE, "REG_ECOLLATE", "invalid collating element"},
- {REG_ECTYPE, "REG_ECTYPE", "invalid character class"},
- {REG_EESCAPE, "REG_EESCAPE", "trailing backslash (\\)"},
- {REG_ESUBREG, "REG_ESUBREG", "invalid backreference number"},
- {REG_EBRACK, "REG_EBRACK", "brackets ([ ]) not balanced"},
- {REG_EPAREN, "REG_EPAREN", "parentheses not balanced"},
- {REG_EBRACE, "REG_EBRACE", "braces not balanced"},
- {REG_BADBR, "REG_BADBR", "invalid repetition count(s)"},
- {REG_ERANGE, "REG_ERANGE", "invalid character range"},
- {REG_ESPACE, "REG_ESPACE", "out of memory"},
- {REG_BADRPT, "REG_BADRPT", "repetition-operator operand invalid"},
- {REG_EMPTY, "REG_EMPTY", "empty (sub)expression"},
- {REG_ASSERT, "REG_ASSERT", "\"can't happen\" -- you found a bug"},
- {REG_INVARG, "REG_INVARG", "invalid argument to regex routine"},
- {REG_ILLSEQ, "REG_ILLSEQ", "illegal byte sequence"},
- {0, "", "*** unknown regexp error code ***"}
-};
-
-/*
- - regerror - the interface to error numbers
- = extern size_t regerror(int, const regex_t *, char *, size_t);
- */
-/* ARGSUSED */
-size_t
-regerror(int errcode,
- const regex_t * __restrict preg,
- char * __restrict errbuf,
- size_t errbuf_size)
-{
- struct rerr *r;
- size_t len;
- int target = errcode &~ REG_ITOA;
-#ifdef __CYGWIN__ /* Avoid whining compiler */
- const char *s;
-#else
- char *s;
-#endif
- char convbuf[50];
-
- if (errcode == REG_ATOI)
- s = regatoi(preg, convbuf);
- else {
- for (r = rerrs; r->code != 0; r++)
- if (r->code == target)
- break;
-
- if (errcode&REG_ITOA) {
- if (r->code != 0)
- (void) strcpy(convbuf, r->name);
- else
- sprintf(convbuf, "REG_0x%x", target);
- assert(strlen(convbuf) < sizeof(convbuf));
- s = convbuf;
- } else
- s = r->explain;
- }
-
- len = strlen(s) + 1;
- if (errbuf_size > 0) {
- if (errbuf_size > len)
- (void) strcpy(errbuf, s);
- else {
- (void) strncpy(errbuf, s, errbuf_size-1);
- errbuf[errbuf_size-1] = '\0';
- }
- }
-
- return(len);
-}
-
-/*
- - regatoi - internal routine to implement REG_ATOI
- == static char *regatoi(const regex_t *preg, char *localbuf);
- */
-static char *
-regatoi(const regex_t *preg, char *localbuf)
-{
- struct rerr *r;
-
- for (r = rerrs; r->code != 0; r++)
- if (strcmp(r->name, preg->re_endp) == 0)
- break;
- if (r->code == 0)
-#ifdef __CYGWIN__ /* Avoid whining compiler */
- {
- static char null[] = "0";
- return null;
- }
-#else
- return("0");
-#endif
-
- sprintf(localbuf, "%d", r->code);
- return(localbuf);
-}
diff --git a/winsup/cygwin/regex/regex.3 b/winsup/cygwin/regex/regex.3
deleted file mode 100644
index f848d66c3..000000000
--- a/winsup/cygwin/regex/regex.3
+++ /dev/null
@@ -1,727 +0,0 @@
-.\" Copyright (c) 1992, 1993, 1994 Henry Spencer.
-.\" Copyright (c) 1992, 1993, 1994
-.\" The Regents of the University of California. All rights reserved.
-.\"
-.\" This code is derived from software contributed to Berkeley by
-.\" Henry Spencer.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\" notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\" notice, this list of conditions and the following disclaimer in the
-.\" documentation and/or other materials provided with the distribution.
-.\" 4. Neither the name of the University nor the names of its contributors
-.\" may be used to endorse or promote products derived from this software
-.\" without specific prior written permission.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\" @(#)regex.3 8.4 (Berkeley) 3/20/94
-.\" $FreeBSD: src/lib/libc/regex/regex.3,v 1.21 2007/01/09 00:28:04 imp Exp $
-.\"
-.Dd August 17, 2005
-.Dt REGEX 3
-.Os
-.Sh NAME
-.Nm regcomp ,
-.Nm regexec ,
-.Nm regerror ,
-.Nm regfree
-.Nd regular-expression library
-.Sh LIBRARY
-.Lb libc
-.Sh SYNOPSIS
-.In regex.h
-.Ft int
-.Fo regcomp
-.Fa "regex_t * restrict preg" "const char * restrict pattern" "int cflags"
-.Fc
-.Ft int
-.Fo regexec
-.Fa "const regex_t * restrict preg" "const char * restrict string"
-.Fa "size_t nmatch" "regmatch_t pmatch[restrict]" "int eflags"
-.Fc
-.Ft size_t
-.Fo regerror
-.Fa "int errcode" "const regex_t * restrict preg"
-.Fa "char * restrict errbuf" "size_t errbuf_size"
-.Fc
-.Ft void
-.Fn regfree "regex_t *preg"
-.Sh DESCRIPTION
-These routines implement
-.St -p1003.2
-regular expressions
-.Pq Do RE Dc Ns s ;
-see
-.Xr re_format 7 .
-The
-.Fn regcomp
-function
-compiles an RE written as a string into an internal form,
-.Fn regexec
-matches that internal form against a string and reports results,
-.Fn regerror
-transforms error codes from either into human-readable messages,
-and
-.Fn regfree
-frees any dynamically-allocated storage used by the internal form
-of an RE.
-.Pp
-The header
-.In regex.h
-declares two structure types,
-.Ft regex_t
-and
-.Ft regmatch_t ,
-the former for compiled internal forms and the latter for match reporting.
-It also declares the four functions,
-a type
-.Ft regoff_t ,
-and a number of constants with names starting with
-.Dq Dv REG_ .
-.Pp
-The
-.Fn regcomp
-function
-compiles the regular expression contained in the
-.Fa pattern
-string,
-subject to the flags in
-.Fa cflags ,
-and places the results in the
-.Ft regex_t
-structure pointed to by
-.Fa preg .
-The
-.Fa cflags
-argument
-is the bitwise OR of zero or more of the following flags:
-.Bl -tag -width REG_EXTENDED
-.It Dv REG_EXTENDED
-Compile modern
-.Pq Dq extended
-REs,
-rather than the obsolete
-.Pq Dq basic
-REs that
-are the default.
-.It Dv REG_BASIC
-This is a synonym for 0,
-provided as a counterpart to
-.Dv REG_EXTENDED
-to improve readability.
-.It Dv REG_NOSPEC
-Compile with recognition of all special characters turned off.
-All characters are thus considered ordinary,
-so the
-.Dq RE
-is a literal string.
-This is an extension,
-compatible with but not specified by
-.St -p1003.2 ,
-and should be used with
-caution in software intended to be portable to other systems.
-.Dv REG_EXTENDED
-and
-.Dv REG_NOSPEC
-may not be used
-in the same call to
-.Fn regcomp .
-.It Dv REG_ICASE
-Compile for matching that ignores upper/lower case distinctions.
-See
-.Xr re_format 7 .
-.It Dv REG_NOSUB
-Compile for matching that need only report success or failure,
-not what was matched.
-.It Dv REG_NEWLINE
-Compile for newline-sensitive matching.
-By default, newline is a completely ordinary character with no special
-meaning in either REs or strings.
-With this flag,
-.Ql [^
-bracket expressions and
-.Ql .\&
-never match newline,
-a
-.Ql ^\&
-anchor matches the null string after any newline in the string
-in addition to its normal function,
-and the
-.Ql $\&
-anchor matches the null string before any newline in the
-string in addition to its normal function.
-.It Dv REG_PEND
-The regular expression ends,
-not at the first NUL,
-but just before the character pointed to by the
-.Va re_endp
-member of the structure pointed to by
-.Fa preg .
-The
-.Va re_endp
-member is of type
-.Ft "const char *" .
-This flag permits inclusion of NULs in the RE;
-they are considered ordinary characters.
-This is an extension,
-compatible with but not specified by
-.St -p1003.2 ,
-and should be used with
-caution in software intended to be portable to other systems.
-.El
-.Pp
-When successful,
-.Fn regcomp
-returns 0 and fills in the structure pointed to by
-.Fa preg .
-One member of that structure
-(other than
-.Va re_endp )
-is publicized:
-.Va re_nsub ,
-of type
-.Ft size_t ,
-contains the number of parenthesized subexpressions within the RE
-(except that the value of this member is undefined if the
-.Dv REG_NOSUB
-flag was used).
-If
-.Fn regcomp
-fails, it returns a non-zero error code;
-see
-.Sx DIAGNOSTICS .
-.Pp
-The
-.Fn regexec
-function
-matches the compiled RE pointed to by
-.Fa preg
-against the
-.Fa string ,
-subject to the flags in
-.Fa eflags ,
-and reports results using
-.Fa nmatch ,
-.Fa pmatch ,
-and the returned value.
-The RE must have been compiled by a previous invocation of
-.Fn regcomp .
-The compiled form is not altered during execution of
-.Fn regexec ,
-so a single compiled RE can be used simultaneously by multiple threads.
-.Pp
-By default,
-the NUL-terminated string pointed to by
-.Fa string
-is considered to be the text of an entire line, minus any terminating
-newline.
-The
-.Fa eflags
-argument is the bitwise OR of zero or more of the following flags:
-.Bl -tag -width REG_STARTEND
-.It Dv REG_NOTBOL
-The first character of
-the string
-is not the beginning of a line, so the
-.Ql ^\&
-anchor should not match before it.
-This does not affect the behavior of newlines under
-.Dv REG_NEWLINE .
-.It Dv REG_NOTEOL
-The NUL terminating
-the string
-does not end a line, so the
-.Ql $\&
-anchor should not match before it.
-This does not affect the behavior of newlines under
-.Dv REG_NEWLINE .
-.It Dv REG_STARTEND
-The string is considered to start at
-.Fa string
-+
-.Fa pmatch Ns [0]. Ns Va rm_so
-and to have a terminating NUL located at
-.Fa string
-+
-.Fa pmatch Ns [0]. Ns Va rm_eo
-(there need not actually be a NUL at that location),
-regardless of the value of
-.Fa nmatch .
-See below for the definition of
-.Fa pmatch
-and
-.Fa nmatch .
-This is an extension,
-compatible with but not specified by
-.St -p1003.2 ,
-and should be used with
-caution in software intended to be portable to other systems.
-Note that a non-zero
-.Va rm_so
-does not imply
-.Dv REG_NOTBOL ;
-.Dv REG_STARTEND
-affects only the location of the string,
-not how it is matched.
-.El
-.Pp
-See
-.Xr re_format 7
-for a discussion of what is matched in situations where an RE or a
-portion thereof could match any of several substrings of
-.Fa string .
-.Pp
-Normally,
-.Fn regexec
-returns 0 for success and the non-zero code
-.Dv REG_NOMATCH
-for failure.
-Other non-zero error codes may be returned in exceptional situations;
-see
-.Sx DIAGNOSTICS .
-.Pp
-If
-.Dv REG_NOSUB
-was specified in the compilation of the RE,
-or if
-.Fa nmatch
-is 0,
-.Fn regexec
-ignores the
-.Fa pmatch
-argument (but see below for the case where
-.Dv REG_STARTEND
-is specified).
-Otherwise,
-.Fa pmatch
-points to an array of
-.Fa nmatch
-structures of type
-.Ft regmatch_t .
-Such a structure has at least the members
-.Va rm_so
-and
-.Va rm_eo ,
-both of type
-.Ft regoff_t
-(a signed arithmetic type at least as large as an
-.Ft off_t
-and a
-.Ft ssize_t ) ,
-containing respectively the offset of the first character of a substring
-and the offset of the first character after the end of the substring.
-Offsets are measured from the beginning of the
-.Fa string
-argument given to
-.Fn regexec .
-An empty substring is denoted by equal offsets,
-both indicating the character following the empty substring.
-.Pp
-The 0th member of the
-.Fa pmatch
-array is filled in to indicate what substring of
-.Fa string
-was matched by the entire RE.
-Remaining members report what substring was matched by parenthesized
-subexpressions within the RE;
-member
-.Va i
-reports subexpression
-.Va i ,
-with subexpressions counted (starting at 1) by the order of their opening
-parentheses in the RE, left to right.
-Unused entries in the array (corresponding either to subexpressions that
-did not participate in the match at all, or to subexpressions that do not
-exist in the RE (that is,
-.Va i
->
-.Fa preg Ns -> Ns Va re_nsub ) )
-have both
-.Va rm_so
-and
-.Va rm_eo
-set to -1.
-If a subexpression participated in the match several times,
-the reported substring is the last one it matched.
-(Note, as an example in particular, that when the RE
-.Ql "(b*)+"
-matches
-.Ql bbb ,
-the parenthesized subexpression matches each of the three
-.So Li b Sc Ns s
-and then
-an infinite number of empty strings following the last
-.Ql b ,
-so the reported substring is one of the empties.)
-.Pp
-If
-.Dv REG_STARTEND
-is specified,
-.Fa pmatch
-must point to at least one
-.Ft regmatch_t
-(even if
-.Fa nmatch
-is 0 or
-.Dv REG_NOSUB
-was specified),
-to hold the input offsets for
-.Dv REG_STARTEND .
-Use for output is still entirely controlled by
-.Fa nmatch ;
-if
-.Fa nmatch
-is 0 or
-.Dv REG_NOSUB
-was specified,
-the value of
-.Fa pmatch Ns [0]
-will not be changed by a successful
-.Fn regexec .
-.Pp
-The
-.Fn regerror
-function
-maps a non-zero
-.Fa errcode
-from either
-.Fn regcomp
-or
-.Fn regexec
-to a human-readable, printable message.
-If
-.Fa preg
-is
-.No non\- Ns Dv NULL ,
-the error code should have arisen from use of
-the
-.Ft regex_t
-pointed to by
-.Fa preg ,
-and if the error code came from
-.Fn regcomp ,
-it should have been the result from the most recent
-.Fn regcomp
-using that
-.Ft regex_t .
-The
-.Fn ( regerror
-may be able to supply a more detailed message using information
-from the
-.Ft regex_t . )
-The
-.Fn regerror
-function
-places the NUL-terminated message into the buffer pointed to by
-.Fa errbuf ,
-limiting the length (including the NUL) to at most
-.Fa errbuf_size
-bytes.
-If the whole message will not fit,
-as much of it as will fit before the terminating NUL is supplied.
-In any case,
-the returned value is the size of buffer needed to hold the whole
-message (including terminating NUL).
-If
-.Fa errbuf_size
-is 0,
-.Fa errbuf
-is ignored but the return value is still correct.
-.Pp
-If the
-.Fa errcode
-given to
-.Fn regerror
-is first ORed with
-.Dv REG_ITOA ,
-the
-.Dq message
-that results is the printable name of the error code,
-e.g.\&
-.Dq Dv REG_NOMATCH ,
-rather than an explanation thereof.
-If
-.Fa errcode
-is
-.Dv REG_ATOI ,
-then
-.Fa preg
-shall be
-.No non\- Ns Dv NULL
-and the
-.Va re_endp
-member of the structure it points to
-must point to the printable name of an error code;
-in this case, the result in
-.Fa errbuf
-is the decimal digits of
-the numeric value of the error code
-(0 if the name is not recognized).
-.Dv REG_ITOA
-and
-.Dv REG_ATOI
-are intended primarily as debugging facilities;
-they are extensions,
-compatible with but not specified by
-.St -p1003.2 ,
-and should be used with
-caution in software intended to be portable to other systems.
-Be warned also that they are considered experimental and changes are possible.
-.Pp
-The
-.Fn regfree
-function
-frees any dynamically-allocated storage associated with the compiled RE
-pointed to by
-.Fa preg .
-The remaining
-.Ft regex_t
-is no longer a valid compiled RE
-and the effect of supplying it to
-.Fn regexec
-or
-.Fn regerror
-is undefined.
-.Pp
-None of these functions references global variables except for tables
-of constants;
-all are safe for use from multiple threads if the arguments are safe.
-.Sh IMPLEMENTATION CHOICES
-There are a number of decisions that
-.St -p1003.2
-leaves up to the implementor,
-either by explicitly saying
-.Dq undefined
-or by virtue of them being
-forbidden by the RE grammar.
-This implementation treats them as follows.
-.Pp
-See
-.Xr re_format 7
-for a discussion of the definition of case-independent matching.
-.Pp
-There is no particular limit on the length of REs,
-except insofar as memory is limited.
-Memory usage is approximately linear in RE size, and largely insensitive
-to RE complexity, except for bounded repetitions.
-See
-.Sx BUGS
-for one short RE using them
-that will run almost any system out of memory.
-.Pp
-A backslashed character other than one specifically given a magic meaning
-by
-.St -p1003.2
-(such magic meanings occur only in obsolete
-.Bq Dq basic
-REs)
-is taken as an ordinary character.
-.Pp
-Any unmatched
-.Ql [\&
-is a
-.Dv REG_EBRACK
-error.
-.Pp
-Equivalence classes cannot begin or end bracket-expression ranges.
-The endpoint of one range cannot begin another.
-.Pp
-.Dv RE_DUP_MAX ,
-the limit on repetition counts in bounded repetitions, is 255.
-.Pp
-A repetition operator
-.Ql ( ?\& ,
-.Ql *\& ,
-.Ql +\& ,
-or bounds)
-cannot follow another
-repetition operator.
-A repetition operator cannot begin an expression or subexpression
-or follow
-.Ql ^\&
-or
-.Ql |\& .
-.Pp
-.Ql |\&
-cannot appear first or last in a (sub)expression or after another
-.Ql |\& ,
-i.e., an operand of
-.Ql |\&
-cannot be an empty subexpression.
-An empty parenthesized subexpression,
-.Ql "()" ,
-is legal and matches an
-empty (sub)string.
-An empty string is not a legal RE.
-.Pp
-A
-.Ql {\&
-followed by a digit is considered the beginning of bounds for a
-bounded repetition, which must then follow the syntax for bounds.
-A
-.Ql {\&
-.Em not
-followed by a digit is considered an ordinary character.
-.Pp
-.Ql ^\&
-and
-.Ql $\&
-beginning and ending subexpressions in obsolete
-.Pq Dq basic
-REs are anchors, not ordinary characters.
-.Sh DIAGNOSTICS
-Non-zero error codes from
-.Fn regcomp
-and
-.Fn regexec
-include the following:
-.Pp
-.Bl -tag -width REG_ECOLLATE -compact
-.It Dv REG_NOMATCH
-The
-.Fn regexec
-function
-failed to match
-.It Dv REG_BADPAT
-invalid regular expression
-.It Dv REG_ECOLLATE
-invalid collating element
-.It Dv REG_ECTYPE
-invalid character class
-.It Dv REG_EESCAPE
-.Ql \e
-applied to unescapable character
-.It Dv REG_ESUBREG
-invalid backreference number
-.It Dv REG_EBRACK
-brackets
-.Ql "[ ]"
-not balanced
-.It Dv REG_EPAREN
-parentheses
-.Ql "( )"
-not balanced
-.It Dv REG_EBRACE
-braces
-.Ql "{ }"
-not balanced
-.It Dv REG_BADBR
-invalid repetition count(s) in
-.Ql "{ }"
-.It Dv REG_ERANGE
-invalid character range in
-.Ql "[ ]"
-.It Dv REG_ESPACE
-ran out of memory
-.It Dv REG_BADRPT
-.Ql ?\& ,
-.Ql *\& ,
-or
-.Ql +\&
-operand invalid
-.It Dv REG_EMPTY
-empty (sub)expression
-.It Dv REG_ASSERT
-cannot happen - you found a bug
-.It Dv REG_INVARG
-invalid argument, e.g.\& negative-length string
-.It Dv REG_ILLSEQ
-illegal byte sequence (bad multibyte character)
-.El
-.Sh SEE ALSO
-.Xr grep 1 ,
-.Xr re_format 7
-.Pp
-.St -p1003.2 ,
-sections 2.8 (Regular Expression Notation)
-and
-B.5 (C Binding for Regular Expression Matching).
-.Sh HISTORY
-Originally written by
-.An Henry Spencer .
-Altered for inclusion in the
-.Bx 4.4
-distribution.
-.Sh BUGS
-This is an alpha release with known defects.
-Please report problems.
-.Pp
-The back-reference code is subtle and doubts linger about its correctness
-in complex cases.
-.Pp
-The
-.Fn regexec
-function
-performance is poor.
-This will improve with later releases.
-The
-.Fa nmatch
-argument
-exceeding 0 is expensive;
-.Fa nmatch
-exceeding 1 is worse.
-The
-.Fn regexec
-function
-is largely insensitive to RE complexity
-.Em except
-that back
-references are massively expensive.
-RE length does matter; in particular, there is a strong speed bonus
-for keeping RE length under about 30 characters,
-with most special characters counting roughly double.
-.Pp
-The
-.Fn regcomp
-function
-implements bounded repetitions by macro expansion,
-which is costly in time and space if counts are large
-or bounded repetitions are nested.
-An RE like, say,
-.Ql "((((a{1,100}){1,100}){1,100}){1,100}){1,100}"
-will (eventually) run almost any existing machine out of swap space.
-.Pp
-There are suspected problems with response to obscure error conditions.
-Notably,
-certain kinds of internal overflow,
-produced only by truly enormous REs or by multiply nested bounded repetitions,
-are probably not handled well.
-.Pp
-Due to a mistake in
-.St -p1003.2 ,
-things like
-.Ql "a)b"
-are legal REs because
-.Ql )\&
-is
-a special character only in the presence of a previous unmatched
-.Ql (\& .
-This cannot be fixed until the spec is fixed.
-.Pp
-The standard's definition of back references is vague.
-For example, does
-.Ql "a\e(\e(b\e)*\e2\e)*d"
-match
-.Ql "abbbd" ?
-Until the standard is clarified,
-behavior in such cases should not be relied on.
-.Pp
-The implementation of word-boundary matching is a bit of a kludge,
-and bugs may lurk in combinations of word-boundary matching and anchoring.
-.Pp
-Word-boundary matching does not work properly in multibyte locales.
diff --git a/winsup/cygwin/regex/regex.7 b/winsup/cygwin/regex/regex.7
deleted file mode 100644
index 79fecc197..000000000
--- a/winsup/cygwin/regex/regex.7
+++ /dev/null
@@ -1,480 +0,0 @@
-.\" Copyright (c) 1992, 1993, 1994 Henry Spencer.
-.\" Copyright (c) 1992, 1993, 1994
-.\" The Regents of the University of California. All rights reserved.
-.\"
-.\" This code is derived from software contributed to Berkeley by
-.\" Henry Spencer.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\" notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\" notice, this list of conditions and the following disclaimer in the
-.\" documentation and/or other materials provided with the distribution.
-.\" 4. Neither the name of the University nor the names of its contributors
-.\" may be used to endorse or promote products derived from this software
-.\" without specific prior written permission.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\" @(#)re_format.7 8.3 (Berkeley) 3/20/94
-.\" $FreeBSD: src/lib/libc/regex/re_format.7,v 1.12 2008/09/05 17:41:20 keramida Exp $
-.\"
-.Dd March 20, 1994
-.Dt RE_FORMAT 7
-.Os
-.Sh NAME
-.Nm re_format
-.Nd POSIX 1003.2 regular expressions
-.Sh DESCRIPTION
-Regular expressions
-.Pq Dq RE Ns s ,
-as defined in
-.St -p1003.2 ,
-come in two forms:
-modern REs (roughly those of
-.Xr egrep 1 ;
-1003.2 calls these
-.Dq extended
-REs)
-and obsolete REs (roughly those of
-.Xr ed 1 ;
-1003.2
-.Dq basic
-REs).
-Obsolete REs mostly exist for backward compatibility in some old programs;
-they will be discussed at the end.
-.St -p1003.2
-leaves some aspects of RE syntax and semantics open;
-`\(dd' marks decisions on these aspects that
-may not be fully portable to other
-.St -p1003.2
-implementations.
-.Pp
-A (modern) RE is one\(dd or more non-empty\(dd
-.Em branches ,
-separated by
-.Ql \&| .
-It matches anything that matches one of the branches.
-.Pp
-A branch is one\(dd or more
-.Em pieces ,
-concatenated.
-It matches a match for the first, followed by a match for the second, etc.
-.Pp
-A piece is an
-.Em atom
-possibly followed
-by a single\(dd
-.Ql \&* ,
-.Ql \&+ ,
-.Ql \&? ,
-or
-.Em bound .
-An atom followed by
-.Ql \&*
-matches a sequence of 0 or more matches of the atom.
-An atom followed by
-.Ql \&+
-matches a sequence of 1 or more matches of the atom.
-An atom followed by
-.Ql ?\&
-matches a sequence of 0 or 1 matches of the atom.
-.Pp
-A
-.Em bound
-is
-.Ql \&{
-followed by an unsigned decimal integer,
-possibly followed by
-.Ql \&,
-possibly followed by another unsigned decimal integer,
-always followed by
-.Ql \&} .
-The integers must lie between 0 and
-.Dv RE_DUP_MAX
-(255\(dd) inclusive,
-and if there are two of them, the first may not exceed the second.
-An atom followed by a bound containing one integer
-.Em i
-and no comma matches
-a sequence of exactly
-.Em i
-matches of the atom.
-An atom followed by a bound
-containing one integer
-.Em i
-and a comma matches
-a sequence of
-.Em i
-or more matches of the atom.
-An atom followed by a bound
-containing two integers
-.Em i
-and
-.Em j
-matches
-a sequence of
-.Em i
-through
-.Em j
-(inclusive) matches of the atom.
-.Pp
-An atom is a regular expression enclosed in
-.Ql ()
-(matching a match for the
-regular expression),
-an empty set of
-.Ql ()
-(matching the null string)\(dd,
-a
-.Em bracket expression
-(see below),
-.Ql .\&
-(matching any single character),
-.Ql \&^
-(matching the null string at the beginning of a line),
-.Ql \&$
-(matching the null string at the end of a line), a
-.Ql \e
-followed by one of the characters
-.Ql ^.[$()|*+?{\e
-(matching that character taken as an ordinary character),
-a
-.Ql \e
-followed by any other character\(dd
-(matching that character taken as an ordinary character,
-as if the
-.Ql \e
-had not been present\(dd),
-or a single character with no other significance (matching that character).
-A
-.Ql \&{
-followed by a character other than a digit is an ordinary
-character, not the beginning of a bound\(dd.
-It is illegal to end an RE with
-.Ql \e .
-.Pp
-A
-.Em bracket expression
-is a list of characters enclosed in
-.Ql [] .
-It normally matches any single character from the list (but see below).
-If the list begins with
-.Ql \&^ ,
-it matches any single character
-(but see below)
-.Em not
-from the rest of the list.
-If two characters in the list are separated by
-.Ql \&- ,
-this is shorthand
-for the full
-.Em range
-of characters between those two (inclusive) in the
-collating sequence,
-.No e.g. Ql [0-9]
-in ASCII matches any decimal digit.
-It is illegal\(dd for two ranges to share an
-endpoint,
-.No e.g. Ql a-c-e .
-Ranges are very collating-sequence-dependent,
-and portable programs should avoid relying on them.
-.Pp
-To include a literal
-.Ql \&]
-in the list, make it the first character
-(following a possible
-.Ql \&^ ) .
-To include a literal
-.Ql \&- ,
-make it the first or last character,
-or the second endpoint of a range.
-To use a literal
-.Ql \&-
-as the first endpoint of a range,
-enclose it in
-.Ql [.\&
-and
-.Ql .]\&
-to make it a collating element (see below).
-With the exception of these and some combinations using
-.Ql \&[
-(see next paragraphs), all other special characters, including
-.Ql \e ,
-lose their special significance within a bracket expression.
-.Pp
-Within a bracket expression, a collating element (a character,
-a multi-character sequence that collates as if it were a single character,
-or a collating-sequence name for either)
-enclosed in
-.Ql [.\&
-and
-.Ql .]\&
-stands for the
-sequence of characters of that collating element.
-The sequence is a single element of the bracket expression's list.
-A bracket expression containing a multi-character collating element
-can thus match more than one character,
-e.g.\& if the collating sequence includes a
-.Ql ch
-collating element,
-then the RE
-.Ql [[.ch.]]*c
-matches the first five characters
-of
-.Ql chchcc .
-.Pp
-Within a bracket expression, a collating element enclosed in
-.Ql [=
-and
-.Ql =]
-is an equivalence class, standing for the sequences of characters
-of all collating elements equivalent to that one, including itself.
-(If there are no other equivalent collating elements,
-the treatment is as if the enclosing delimiters were
-.Ql [.\&
-and
-.Ql .] . )
-For example, if
-.Ql x
-and
-.Ql y
-are the members of an equivalence class,
-then
-.Ql [[=x=]] ,
-.Ql [[=y=]] ,
-and
-.Ql [xy]
-are all synonymous.
-An equivalence class may not\(dd be an endpoint
-of a range.
-.Pp
-Within a bracket expression, the name of a
-.Em character class
-enclosed in
-.Ql [:
-and
-.Ql :]
-stands for the list of all characters belonging to that
-class.
-Standard character class names are:
-.Pp
-.Bl -column "alnum" "digit" "xdigit" -offset indent
-.It Em "alnum digit punct"
-.It Em "alpha graph space"
-.It Em "blank lower upper"
-.It Em "cntrl print xdigit"
-.El
-.Pp
-These stand for the character classes defined in
-.Xr ctype 3 .
-A locale may provide others.
-A character class may not be used as an endpoint of a range.
-.Pp
-A bracketed expression like
-.Ql [[:class:]]
-can be used to match a single character that belongs to a character
-class.
-The reverse, matching any character that does not belong to a specific
-class, the negation operator of bracket expressions may be used:
-.Ql [^[:class:]] .
-.Pp
-There are two special cases\(dd of bracket expressions:
-the bracket expressions
-.Ql [[:<:]]
-and
-.Ql [[:>:]]
-match the null string at the beginning and end of a word respectively.
-A word is defined as a sequence of word characters
-which is neither preceded nor followed by
-word characters.
-A word character is an
-.Em alnum
-character (as defined by
-.Xr ctype 3 )
-or an underscore.
-This is an extension,
-compatible with but not specified by
-.St -p1003.2 ,
-and should be used with
-caution in software intended to be portable to other systems.
-.Pp
-In the event that an RE could match more than one substring of a given
-string,
-the RE matches the one starting earliest in the string.
-If the RE could match more than one substring starting at that point,
-it matches the longest.
-Subexpressions also match the longest possible substrings, subject to
-the constraint that the whole match be as long as possible,
-with subexpressions starting earlier in the RE taking priority over
-ones starting later.
-Note that higher-level subexpressions thus take priority over
-their lower-level component subexpressions.
-.Pp
-Match lengths are measured in characters, not collating elements.
-A null string is considered longer than no match at all.
-For example,
-.Ql bb*
-matches the three middle characters of
-.Ql abbbc ,
-.Ql (wee|week)(knights|nights)
-matches all ten characters of
-.Ql weeknights ,
-when
-.Ql (.*).*\&
-is matched against
-.Ql abc
-the parenthesized subexpression
-matches all three characters, and
-when
-.Ql (a*)*
-is matched against
-.Ql bc
-both the whole RE and the parenthesized
-subexpression match the null string.
-.Pp
-If case-independent matching is specified,
-the effect is much as if all case distinctions had vanished from the
-alphabet.
-When an alphabetic that exists in multiple cases appears as an
-ordinary character outside a bracket expression, it is effectively
-transformed into a bracket expression containing both cases,
-.No e.g. Ql x
-becomes
-.Ql [xX] .
-When it appears inside a bracket expression, all case counterparts
-of it are added to the bracket expression, so that (e.g.)
-.Ql [x]
-becomes
-.Ql [xX]
-and
-.Ql [^x]
-becomes
-.Ql [^xX] .
-.Pp
-No particular limit is imposed on the length of REs\(dd.
-Programs intended to be portable should not employ REs longer
-than 256 bytes,
-as an implementation can refuse to accept such REs and remain
-POSIX-compliant.
-.Pp
-Obsolete
-.Pq Dq basic
-regular expressions differ in several respects.
-.Ql \&|
-is an ordinary character and there is no equivalent
-for its functionality.
-.Ql \&+
-and
-.Ql ?\&
-are ordinary characters, and their functionality
-can be expressed using bounds
-.No ( Ql {1,}
-or
-.Ql {0,1}
-respectively).
-Also note that
-.Ql x+
-in modern REs is equivalent to
-.Ql xx* .
-The delimiters for bounds are
-.Ql \e{
-and
-.Ql \e} ,
-with
-.Ql \&{
-and
-.Ql \&}
-by themselves ordinary characters.
-The parentheses for nested subexpressions are
-.Ql \e(
-and
-.Ql \e) ,
-with
-.Ql \&(
-and
-.Ql \&)
-by themselves ordinary characters.
-.Ql \&^
-is an ordinary character except at the beginning of the
-RE or\(dd the beginning of a parenthesized subexpression,
-.Ql \&$
-is an ordinary character except at the end of the
-RE or\(dd the end of a parenthesized subexpression,
-and
-.Ql \&*
-is an ordinary character if it appears at the beginning of the
-RE or the beginning of a parenthesized subexpression
-(after a possible leading
-.Ql \&^ ) .
-Finally, there is one new type of atom, a
-.Em back reference :
-.Ql \e
-followed by a non-zero decimal digit
-.Em d
-matches the same sequence of characters
-matched by the
-.Em d Ns th
-parenthesized subexpression
-(numbering subexpressions by the positions of their opening parentheses,
-left to right),
-so that (e.g.)
-.Ql \e([bc]\e)\e1
-matches
-.Ql bb
-or
-.Ql cc
-but not
-.Ql bc .
-.Sh SEE ALSO
-.Xr regex 3
-.Rs
-.%T Regular Expression Notation
-.%R IEEE Std
-.%N 1003.2
-.%P section 2.8
-.Re
-.Sh BUGS
-Having two kinds of REs is a botch.
-.Pp
-The current
-.St -p1003.2
-spec says that
-.Ql \&)
-is an ordinary character in
-the absence of an unmatched
-.Ql \&( ;
-this was an unintentional result of a wording error,
-and change is likely.
-Avoid relying on it.
-.Pp
-Back references are a dreadful botch,
-posing major problems for efficient implementations.
-They are also somewhat vaguely defined
-(does
-.Ql a\e(\e(b\e)*\e2\e)*d
-match
-.Ql abbbd ? ) .
-Avoid using them.
-.Pp
-.St -p1003.2
-specification of case-independent matching is vague.
-The
-.Dq one case implies all cases
-definition given above
-is current consensus among implementors as to the right interpretation.
-.Pp
-The syntax for word boundaries is incredibly ugly.
diff --git a/winsup/cygwin/regex/regex2.h b/winsup/cygwin/regex/regex2.h
deleted file mode 100644
index 53f687bf6..000000000
--- a/winsup/cygwin/regex/regex2.h
+++ /dev/null
@@ -1,196 +0,0 @@
-/*-
- * Copyright (c) 1992, 1993, 1994 Henry Spencer.
- * Copyright (c) 1992, 1993, 1994
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Henry Spencer.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)regex2.h 8.4 (Berkeley) 3/20/94
- * $FreeBSD: src/lib/libc/regex/regex2.h,v 1.11 2007/01/09 00:28:04 imp Exp $
- */
-
-/*
- * First, the stuff that ends up in the outside-world include file
- = typedef off_t regoff_t;
- = typedef struct {
- = int re_magic;
- = size_t re_nsub; // number of parenthesized subexpressions
- = const char *re_endp; // end pointer for REG_PEND
- = struct re_guts *re_g; // none of your business :-)
- = } regex_t;
- = typedef struct {
- = regoff_t rm_so; // start of match
- = regoff_t rm_eo; // end of match
- = } regmatch_t;
- */
-/*
- * internals of regex_t
- */
-#define MAGIC1 ((('r'^0200)<<8) | 'e')
-
-/*
- * The internal representation is a *strip*, a sequence of
- * operators ending with an endmarker. (Some terminology etc. is a
- * historical relic of earlier versions which used multiple strips.)
- * Certain oddities in the representation are there to permit running
- * the machinery backwards; in particular, any deviation from sequential
- * flow must be marked at both its source and its destination. Some
- * fine points:
- *
- * - OPLUS_ and O_PLUS are *inside* the loop they create.
- * - OQUEST_ and O_QUEST are *outside* the bypass they create.
- * - OCH_ and O_CH are *outside* the multi-way branch they create, while
- * OOR1 and OOR2 are respectively the end and the beginning of one of
- * the branches. Note that there is an implicit OOR2 following OCH_
- * and an implicit OOR1 preceding O_CH.
- *
- * In state representations, an operator's bit is on to signify a state
- * immediately *preceding* "execution" of that operator.
- */
-typedef unsigned long sop; /* strip operator */
-typedef long sopno;
-#define OPRMASK 0xf8000000L
-#define OPDMASK 0x07ffffffL
-#define OPSHIFT ((unsigned)27)
-#define OP(n) ((n)&OPRMASK)
-#define OPND(n) ((n)&OPDMASK)
-#define SOP(op, opnd) ((op)|(opnd))
-/* operators meaning operand */
-/* (back, fwd are offsets) */
-#define OEND (1L<<OPSHIFT) /* endmarker - */
-#define OCHAR (2L<<OPSHIFT) /* character wide character */
-#define OBOL (3L<<OPSHIFT) /* left anchor - */
-#define OEOL (4L<<OPSHIFT) /* right anchor - */
-#define OANY (5L<<OPSHIFT) /* . - */
-#define OANYOF (6L<<OPSHIFT) /* [...] set number */
-#define OBACK_ (7L<<OPSHIFT) /* begin \d paren number */
-#define O_BACK (8L<<OPSHIFT) /* end \d paren number */
-#define OPLUS_ (9L<<OPSHIFT) /* + prefix fwd to suffix */
-#define O_PLUS (10L<<OPSHIFT) /* + suffix back to prefix */
-#define OQUEST_ (11L<<OPSHIFT) /* ? prefix fwd to suffix */
-#define O_QUEST (12L<<OPSHIFT) /* ? suffix back to prefix */
-#define OLPAREN (13L<<OPSHIFT) /* ( fwd to ) */
-#define ORPAREN (14L<<OPSHIFT) /* ) back to ( */
-#define OCH_ (15L<<OPSHIFT) /* begin choice fwd to OOR2 */
-#define OOR1 (16L<<OPSHIFT) /* | pt. 1 back to OOR1 or OCH_ */
-#define OOR2 (17L<<OPSHIFT) /* | pt. 2 fwd to OOR2 or O_CH */
-#define O_CH (18L<<OPSHIFT) /* end choice back to OOR1 */
-#define OBOW (19L<<OPSHIFT) /* begin word - */
-#define OEOW (20L<<OPSHIFT) /* end word - */
-
-/*
- * Structures for [] character-set representation.
- */
-typedef struct {
- wint_t min;
- wint_t max;
-} crange;
-typedef struct {
- unsigned char bmp[NC / 8];
- wctype_t *types;
- int ntypes;
- wint_t *wides;
- int nwides;
- crange *ranges;
- int nranges;
- int invert;
- int icase;
-} cset;
-
-static int
-CHIN1(cset *cs, wint_t ch)
-{
- int i;
-
- assert(ch >= 0);
- if (ch < NC)
- return (((cs->bmp[ch >> 3] & (1 << (ch & 7))) != 0) ^
- cs->invert);
- for (i = 0; i < cs->nwides; i++)
- if (ch == cs->wides[i])
- return (!cs->invert);
- for (i = 0; i < cs->nranges; i++)
- if (cs->ranges[i].min <= ch && ch <= cs->ranges[i].max)
- return (!cs->invert);
- for (i = 0; i < cs->ntypes; i++)
- if (iswctype(ch, cs->types[i]))
- return (!cs->invert);
- return (cs->invert);
-}
-
-static __inline int
-CHIN(cset *cs, wint_t ch)
-{
-
- assert(ch >= 0);
- if (ch < NC)
- return (((cs->bmp[ch >> 3] & (1 << (ch & 7))) != 0) ^
- cs->invert);
- else if (cs->icase) {
- if (cs->invert)
- return (CHIN1(cs, ch) && CHIN1(cs, towlower(ch)) &&
- CHIN1(cs, towupper(ch)));
- else
- return (CHIN1(cs, ch) || CHIN1(cs, towlower(ch)) ||
- CHIN1(cs, towupper(ch)));
- } else
- return (CHIN1(cs, ch));
-}
-
-/*
- * main compiled-expression structure
- */
-struct re_guts {
- int magic;
-# define MAGIC2 ((('R'^0200)<<8)|'E')
- sop *strip; /* malloced area for strip */
- int ncsets; /* number of csets in use */
- cset *sets; /* -> cset [ncsets] */
- int cflags; /* copy of regcomp() cflags argument */
- sopno nstates; /* = number of sops */
- sopno firststate; /* the initial OEND (normally 0) */
- sopno laststate; /* the final OEND */
- int iflags; /* internal flags */
-# define USEBOL 01 /* used ^ */
-# define USEEOL 02 /* used $ */
-# define BAD 04 /* something wrong */
- int nbol; /* number of ^ used */
- int neol; /* number of $ used */
- char *must; /* match must contain this string */
- int moffset; /* latest point at which must may be located */
- int *charjump; /* Boyer-Moore char jump table */
- int *matchjump; /* Boyer-Moore match jump table */
- int mlen; /* length of must */
- size_t nsub; /* copy of re_nsub */
- int backrefs; /* does it use back references? */
- sopno nplus; /* how deep does it nest +s? */
-};
-
-/* misc utilities */
-#define OUT (CHAR_MIN - 1) /* a non-character value */
-#define ISWORD(c) (iswalnum((wint_t)(c)) || (c) == '_')
diff --git a/winsup/cygwin/regex/regexec.c b/winsup/cygwin/regex/regexec.c
deleted file mode 100644
index c400578b8..000000000
--- a/winsup/cygwin/regex/regexec.c
+++ /dev/null
@@ -1,252 +0,0 @@
-/*-
- * Copyright (c) 1992, 1993, 1994 Henry Spencer.
- * Copyright (c) 1992, 1993, 1994
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Henry Spencer.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)regexec.c 8.3 (Berkeley) 3/20/94
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)regexec.c 8.3 (Berkeley) 3/20/94";
-#endif /* LIBC_SCCS and not lint */
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/lib/libc/regex/regexec.c,v 1.8 2007/06/11 03:05:54 delphij Exp $");
-
-/*
- * the outer shell of regexec()
- *
- * This file includes engine.c three times, after muchos fiddling with the
- * macros that code uses. This lets the same code operate on two different
- * representations for state sets and characters.
- */
-#ifdef __CYGWIN__
-#include "winsup.h"
-#endif
-#include <sys/types.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <limits.h>
-#include <ctype.h>
-#include <regex.h>
-#include <wchar.h>
-#include <wctype.h>
-
-#include "utils.h"
-#include "regex2.h"
-
-static int nope __unused = 0; /* for use in asserts; shuts lint up */
-
-static __inline size_t
-xmbrtowc(wint_t *wi, const char *s, size_t n, mbstate_t *mbs, wint_t dummy)
-{
- size_t nr;
- wchar_t wc;
-
- nr = mbrtowc(&wc, s, n, mbs);
- if (wi != NULL)
- *wi = wc;
- if (nr == 0)
- return (1);
- else if (nr == (size_t)-1 || nr == (size_t)-2) {
- memset(mbs, 0, sizeof(*mbs));
- if (wi != NULL)
- *wi = dummy;
- return (1);
- } else {
- if (sizeof (wchar_t) == 2 && wc >= 0xd800 && wc <= 0xdbff) {
- /* UTF-16 surrogate pair. Fetch second half and
- compute UTF-32 value */
- size_t n2 = mbrtowc(&wc, s + nr, n - nr, mbs);
- if (n2 == 0 || n2 == (size_t)-1 || n2 == (size_t)-2) {
- memset(mbs, 0, sizeof(*mbs));
- if (wi != NULL)
- *wi = dummy;
- return (1);
- }
- if (wi != NULL)
- *wi = (((*wi & 0x3ff) << 10) | (wc & 0x3ff))
- + 0x10000;
- nr += n2;
- }
- return (nr);
- }
-}
-
-static __inline size_t
-xmbrtowc_dummy(wint_t *wi,
- const char *s,
- size_t n __unused,
- mbstate_t *mbs __unused,
- wint_t dummy __unused)
-{
-
- if (wi != NULL)
- *wi = (unsigned char)*s;
- return (1);
-}
-
-/* macros for manipulating states, small version */
-#define states long
-#define states1 states /* for later use in regexec() decision */
-#define CLEAR(v) ((v) = 0)
-#define SET0(v, n) ((v) &= ~((unsigned long)1 << (n)))
-#define SET1(v, n) ((v) |= (unsigned long)1 << (n))
-#define ISSET(v, n) (((v) & ((unsigned long)1 << (n))) != 0)
-#define ASSIGN(d, s) ((d) = (s))
-#define EQ(a, b) ((a) == (b))
-#define STATEVARS long dummy /* dummy version */
-#define STATESETUP(m, n) /* nothing */
-#define STATETEARDOWN(m) /* nothing */
-#define SETUP(v) ((v) = 0)
-#define onestate long
-#define INIT(o, n) ((o) = (unsigned long)1 << (n))
-#define INC(o) ((o) <<= 1)
-#define ISSTATEIN(v, o) (((v) & (o)) != 0)
-/* some abbreviations; note that some of these know variable names! */
-/* do "if I'm here, I can also be there" etc without branches */
-#define FWD(dst, src, n) ((dst) |= ((unsigned long)(src)&(here)) << (n))
-#define BACK(dst, src, n) ((dst) |= ((unsigned long)(src)&(here)) >> (n))
-#define ISSETBACK(v, n) (((v) & ((unsigned long)here >> (n))) != 0)
-/* no multibyte support */
-#define XMBRTOWC xmbrtowc_dummy
-#define ZAPSTATE(mbs) ((void)(mbs))
-/* function names */
-#define SNAMES /* engine.c looks after details */
-
-#include "engine.c"
-
-/* now undo things */
-#undef states
-#undef CLEAR
-#undef SET0
-#undef SET1
-#undef ISSET
-#undef ASSIGN
-#undef EQ
-#undef STATEVARS
-#undef STATESETUP
-#undef STATETEARDOWN
-#undef SETUP
-#undef onestate
-#undef INIT
-#undef INC
-#undef ISSTATEIN
-#undef FWD
-#undef BACK
-#undef ISSETBACK
-#undef SNAMES
-#undef XMBRTOWC
-#undef ZAPSTATE
-
-/* macros for manipulating states, large version */
-#define states char *
-#define CLEAR(v) memset(v, 0, m->g->nstates)
-#define SET0(v, n) ((v)[n] = 0)
-#define SET1(v, n) ((v)[n] = 1)
-#define ISSET(v, n) ((v)[n])
-#define ASSIGN(d, s) memcpy(d, s, m->g->nstates)
-#define EQ(a, b) (memcmp(a, b, m->g->nstates) == 0)
-#define STATEVARS long vn; char *space
-#define STATESETUP(m, nv) { (m)->space = malloc((nv)*(m)->g->nstates); \
- if ((m)->space == NULL) return(REG_ESPACE); \
- (m)->vn = 0; }
-#define STATETEARDOWN(m) { free((m)->space); }
-#define SETUP(v) ((v) = &m->space[m->vn++ * m->g->nstates])
-#define onestate long
-#define INIT(o, n) ((o) = (n))
-#define INC(o) ((o)++)
-#define ISSTATEIN(v, o) ((v)[o])
-/* some abbreviations; note that some of these know variable names! */
-/* do "if I'm here, I can also be there" etc without branches */
-#define FWD(dst, src, n) ((dst)[here+(n)] |= (src)[here])
-#define BACK(dst, src, n) ((dst)[here-(n)] |= (src)[here])
-#define ISSETBACK(v, n) ((v)[here - (n)])
-/* no multibyte support */
-#define XMBRTOWC xmbrtowc_dummy
-#define ZAPSTATE(mbs) ((void)(mbs))
-/* function names */
-#define LNAMES /* flag */
-
-#include "engine.c"
-
-/* multibyte character & large states version */
-#undef LNAMES
-#undef XMBRTOWC
-#undef ZAPSTATE
-#define XMBRTOWC xmbrtowc
-#define ZAPSTATE(mbs) memset((mbs), 0, sizeof(*(mbs)))
-#define MNAMES
-
-#include "engine.c"
-
-/*
- - regexec - interface for matching
- = extern int regexec(const regex_t *, const char *, size_t, \
- = regmatch_t [], int);
- = #define REG_NOTBOL 00001
- = #define REG_NOTEOL 00002
- = #define REG_STARTEND 00004
- = #define REG_TRACE 00400 // tracing of execution
- = #define REG_LARGE 01000 // force large representation
- = #define REG_BACKR 02000 // force use of backref code
- *
- * We put this here so we can exploit knowledge of the state representation
- * when choosing which matcher to call. Also, by this point the matchers
- * have been prototyped.
- */
-int /* 0 success, REG_NOMATCH failure */
-regexec(const regex_t * __restrict preg,
- const char * __restrict string,
- size_t nmatch,
- regmatch_t pmatch[__restrict],
- int eflags)
-{
- struct re_guts *g = preg->re_g;
-#ifdef REDEBUG
-# define GOODFLAGS(f) (f)
-#else
-# define GOODFLAGS(f) ((f)&(REG_NOTBOL|REG_NOTEOL|REG_STARTEND))
-#endif
-
- if (preg->re_magic != MAGIC1 || g->magic != MAGIC2)
- return(REG_BADPAT);
- assert(!(g->iflags&BAD));
- if (g->iflags&BAD) /* backstop for no-debug case */
- return(REG_BADPAT);
- eflags = GOODFLAGS(eflags);
-
- if (MB_CUR_MAX > 1)
- return(mmatcher(g, (char *)string, nmatch, pmatch, eflags));
- else if (g->nstates <= CHAR_BIT*sizeof(states1) && !(eflags&REG_LARGE))
- return(smatcher(g, (char *)string, nmatch, pmatch, eflags));
- else
- return(lmatcher(g, (char *)string, nmatch, pmatch, eflags));
-}
diff --git a/winsup/cygwin/regex/regfree.c b/winsup/cygwin/regex/regfree.c
deleted file mode 100644
index aa795fa78..000000000
--- a/winsup/cygwin/regex/regfree.c
+++ /dev/null
@@ -1,89 +0,0 @@
-/*-
- * Copyright (c) 1992, 1993, 1994 Henry Spencer.
- * Copyright (c) 1992, 1993, 1994
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Henry Spencer.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)regfree.c 8.3 (Berkeley) 3/20/94
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)regfree.c 8.3 (Berkeley) 3/20/94";
-#endif /* LIBC_SCCS and not lint */
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/lib/libc/regex/regfree.c,v 1.8 2007/06/11 03:05:54 delphij Exp $");
-
-#include <sys/types.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <limits.h>
-#include <regex.h>
-#include <wchar.h>
-#include <wctype.h>
-
-#include "utils.h"
-#include "regex2.h"
-
-/*
- - regfree - free everything
- = extern void regfree(regex_t *);
- */
-void
-regfree(regex_t *preg)
-{
- struct re_guts *g;
- int i;
-
- if (preg->re_magic != MAGIC1) /* oops */
- return; /* nice to complain, but hard */
-
- g = preg->re_g;
- if (g == NULL || g->magic != MAGIC2) /* oops again */
- return;
- preg->re_magic = 0; /* mark it invalid */
- g->magic = 0; /* mark it invalid */
-
- if (g->strip != NULL)
- free((char *)g->strip);
- if (g->sets != NULL) {
- for (i = 0; i < g->ncsets; i++) {
- free(g->sets[i].ranges);
- free(g->sets[i].wides);
- free(g->sets[i].types);
- }
- free((char *)g->sets);
- }
- if (g->must != NULL)
- free(g->must);
- if (g->charjump != NULL)
- free(&g->charjump[CHAR_MIN]);
- if (g->matchjump != NULL)
- free(g->matchjump);
- free((char *)g);
-}
diff --git a/winsup/cygwin/regex/utils.h b/winsup/cygwin/regex/utils.h
deleted file mode 100644
index 2a2ed9694..000000000
--- a/winsup/cygwin/regex/utils.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/*-
- * Copyright (c) 1992, 1993, 1994 Henry Spencer.
- * Copyright (c) 1992, 1993, 1994
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Henry Spencer.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)utils.h 8.3 (Berkeley) 3/20/94
- * $FreeBSD: src/lib/libc/regex/utils.h,v 1.3 2007/01/09 00:28:04 imp Exp $
- */
-
-/* utility definitions */
-#define DUPMAX _POSIX2_RE_DUP_MAX /* xxx is this right? */
-#define INFINITY (DUPMAX + 1)
-#define NC (CHAR_MAX - CHAR_MIN + 1)
-typedef unsigned char uch;
-
-/* switch off assertions (if not already off) if no REDEBUG */
-#ifndef REDEBUG
-#ifndef NDEBUG
-#define NDEBUG /* no assertions please */
-#endif
-#endif
-#include <assert.h>
-
-/* for old systems with bcopy() but no memmove() */
-#ifdef USEBCOPY
-#define memmove(d, s, c) bcopy(s, d, c)
-#endif
diff --git a/winsup/cygwin/registry.cc b/winsup/cygwin/registry.cc
deleted file mode 100644
index 99b1d9b2d..000000000
--- a/winsup/cygwin/registry.cc
+++ /dev/null
@@ -1,214 +0,0 @@
-/* registry.cc: registry interface
-
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include "registry.h"
-#include "cygerrno.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "tls_pbuf.h"
-#include "ntdll.h"
-#include <wchar.h>
-
-/* Opens a key under the appropriate Cygwin key.
- Do not use HKCU per MS KB 199190 */
-static NTSTATUS
-top_key (bool isHKLM, REGSAM access, PHANDLE top)
-{
- WCHAR rbuf[PATH_MAX], *p;
- UNICODE_STRING rpath;
- OBJECT_ATTRIBUTES attr;
- NTSTATUS status;
-
- InitializeObjectAttributes (&attr, &rpath, OBJ_CASE_INSENSITIVE, NULL, NULL);
- if (isHKLM)
- {
- wcpcpy (rbuf, L"\\Registry\\Machine");
- RtlInitUnicodeString (&rpath, rbuf);
- status = NtOpenKey (top, access, &attr);
- }
- else
- {
- WCHAR name[128];
- PCWSTR names[2] = {cygheap->user.get_windows_id (name),
- L".DEFAULT"};
-
- p = wcpcpy (rbuf, L"\\Registry\\User\\");
- for (int i = 0; i < 2; i++)
- {
- wcpcpy (p, names[i]);
- RtlInitUnicodeString (&rpath, rbuf);
- status = NtOpenKey (top, access, &attr);
- if (NT_SUCCESS (status))
- break;
- }
- }
- return status;
-}
-
-reg_key::reg_key (HKEY top, REGSAM access, ...): _disposition (0)
-{
- va_list av;
- va_start (av, access);
- build_reg (top, access, av);
- va_end (av);
-}
-
-reg_key::reg_key (bool isHKLM, REGSAM access, ...): _disposition (0)
-{
- va_list av;
- HANDLE top;
-
- key_is_invalid = top_key (isHKLM, access, &top);
- if (NT_SUCCESS (key_is_invalid))
- {
- new (this) reg_key ((HKEY) top, access, L"SOFTWARE",
- _WIDE (CYGWIN_INFO_CYGWIN_REGISTRY_NAME), NULL);
- NtClose (top);
- if (key_is_invalid)
- return;
- top = key;
- va_start (av, access);
- build_reg ((HKEY) top, access, av);
- va_end (av);
- if (top != key)
- NtClose (top);
- }
-}
-
-void
-reg_key::build_reg (HKEY top, REGSAM access, va_list av)
-{
- PWCHAR name;
- HANDLE r;
- UNICODE_STRING uname;
- OBJECT_ATTRIBUTES attr;
- NTSTATUS status;
-
- if (top != HKEY_LOCAL_MACHINE && top != HKEY_CURRENT_USER)
- r = (HANDLE) top;
- else if (!NT_SUCCESS (top_key (top == HKEY_LOCAL_MACHINE, access, &r)))
- return;
- key_is_invalid = 0;
- while ((name = va_arg (av, PWCHAR)) != NULL)
- {
- RtlInitUnicodeString (&uname, name);
- InitializeObjectAttributes (&attr, &uname,
- OBJ_CASE_INSENSITIVE | OBJ_OPENIF, r, NULL);
-
- status = NtCreateKey (&key, access, &attr, 0, NULL,
- REG_OPTION_NON_VOLATILE, &_disposition);
- if (r != (HANDLE) top)
- NtClose (r);
- r = key;
- if (!NT_SUCCESS (status))
- {
- key_is_invalid = status;
- debug_printf ("failed to create key %S in the registry", &uname);
- break;
- }
- }
-}
-
-/* Given the current registry key, return the specific DWORD value
- requested. Return def on failure. */
-
-DWORD
-reg_key::get_dword (PCWSTR name, DWORD def)
-{
- if (key_is_invalid)
- return def;
-
- NTSTATUS status;
- UNICODE_STRING uname;
- ULONG size = sizeof (KEY_VALUE_PARTIAL_INFORMATION) + sizeof (DWORD);
- ULONG rsize;
- PKEY_VALUE_PARTIAL_INFORMATION vbuf = (PKEY_VALUE_PARTIAL_INFORMATION)
- alloca (size);
-
- RtlInitUnicodeString (&uname, name);
- status = NtQueryValueKey (key, &uname, KeyValuePartialInformation, vbuf,
- size, &rsize);
- if (status != STATUS_SUCCESS || vbuf->Type != REG_DWORD)
- return def;
- DWORD *dst = (DWORD *) vbuf->Data;
- return *dst;
-}
-
-/* Given the current registry key, set a specific DWORD value. */
-
-NTSTATUS
-reg_key::set_dword (PCWSTR name, DWORD val)
-{
- if (key_is_invalid)
- return key_is_invalid;
-
- DWORD value = (DWORD) val;
- UNICODE_STRING uname;
- RtlInitUnicodeString (&uname, name);
- return NtSetValueKey (key, &uname, 0, REG_DWORD, &value, sizeof (value));
-}
-
-/* Given the current registry key, return the specific string value
- requested. Return zero on success, non-zero on failure. */
-
-NTSTATUS
-reg_key::get_string (PCWSTR name, PWCHAR dst, size_t max, PCWSTR def)
-{
- NTSTATUS status;
-
- if (key_is_invalid)
- {
- status = key_is_invalid;
- if (def != NULL)
- wcpncpy (dst, def, max);
- }
- else
- {
- UNICODE_STRING uname;
- ULONG size = sizeof (KEY_VALUE_PARTIAL_INFORMATION) + max * sizeof (WCHAR);
- ULONG rsize;
- PKEY_VALUE_PARTIAL_INFORMATION vbuf = (PKEY_VALUE_PARTIAL_INFORMATION)
- alloca (size);
-
- RtlInitUnicodeString (&uname, name);
- status = NtQueryValueKey (key, &uname, KeyValuePartialInformation, vbuf,
- size, &rsize);
- if (status != STATUS_SUCCESS || vbuf->Type != REG_SZ)
- wcpncpy (dst, def, max);
- else
- wcpncpy (dst, (PWCHAR) vbuf->Data, max);
- }
- return status;
-}
-
-/* Given the current registry key, set a specific string value. */
-
-NTSTATUS
-reg_key::set_string (PCWSTR name, PCWSTR src)
-{
- if (key_is_invalid)
- return key_is_invalid;
-
- UNICODE_STRING uname;
- RtlInitUnicodeString (&uname, name);
- return NtSetValueKey (key, &uname, 0, REG_SZ, (PVOID) src,
- (wcslen (src) + 1) * sizeof (WCHAR));
-}
-
-reg_key::~reg_key ()
-{
- if (!key_is_invalid)
- NtClose (key);
- key_is_invalid = 1;
-}
diff --git a/winsup/cygwin/registry.h b/winsup/cygwin/registry.h
deleted file mode 100644
index 6a885db4d..000000000
--- a/winsup/cygwin/registry.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/* registry.h: shared info for cygwin
-
- Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
- 2011, 2012, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-class reg_key
-{
-private:
-
- HANDLE key;
- NTSTATUS key_is_invalid;
- DWORD _disposition;
-
-public:
-
- reg_key (HKEY toplev, REGSAM access, ...);
- reg_key (bool isHKLM, REGSAM access, ...);
-
- void *operator new (size_t, void *p) {return p;}
- void build_reg (HKEY key, REGSAM access, va_list av);
-
- bool error () {return key == NULL;}
-
- DWORD get_dword (PCWSTR, DWORD);
- NTSTATUS get_string (PCWSTR, PWCHAR, size_t, PCWSTR);
-
- NTSTATUS set_dword (PCWSTR, DWORD);
- NTSTATUS set_string (PCWSTR, PCWSTR);
-
- bool created () const {return _disposition & REG_CREATED_NEW_KEY;}
-
- ~reg_key ();
-};
diff --git a/winsup/cygwin/regparm.h b/winsup/cygwin/regparm.h
deleted file mode 100644
index 5b954261f..000000000
--- a/winsup/cygwin/regparm.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/* regparm.h: Define macros for regparm functions and methods.
-
- Copyright 2013 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#pragma once
-
-#if defined (__x86_64__) || defined (__CYGMAGIC__)
-# define __reg1
-# define __reg2
-# define __reg3
-#else
-# define __reg1 __stdcall __attribute__ ((regparm (1)))
-# define __reg2 __stdcall __attribute__ ((regparm (2)))
-# define __reg3 __stdcall __attribute__ ((regparm (3)))
-#endif
diff --git a/winsup/cygwin/release/1.7.10 b/winsup/cygwin/release/1.7.10
deleted file mode 100644
index 33a2f20dd..000000000
--- a/winsup/cygwin/release/1.7.10
+++ /dev/null
@@ -1,126 +0,0 @@
-What's new:
------------
-
-- New getconf tool for querying confstr(3), pathconf(3), sysconf(3), and
- limits.h configuration.
-
-- New tzset utility to generate a POSIX-compatible TZ environment
- variable from the Windows timezone settings.
-
-- The passwd tool now allows an administrator to use the -R command for
- other user accounts: passwd -R username.
-
-- Experimental: Change the way sockets are created so that Cygwin always
- circumvents so-called "layered service providers" (LSPs) starting with
- Windows Vista.
-
-- signal handler functions are now dispatched in threads other than the
- main thread.
-
-- Support NcFsd filesystem.
-
-- clock_gettime(3) and clock_getres(3) accept per-process and per-thread
- CPU-time clocks, including CLOCK_PROCESS_CPUTIME_ID and
- CLOCK_THREAD_CPUTIME_ID.
-
-- New pthread functions:
-
- - Spin Locks: pthread_spin_destroy, pthread_spin_init, pthread_spin_lock,
- pthread_spin_trylock, pthread_spin_unlock.
-
- - Stack management: pthread_attr_getstack, pthread_attr_getstackaddr,
- pthread_attr_getguardsize, pthread_attr_setstack, pthread_attr_setstackaddr,
- pthread_attr_setguardsize, pthread_getattr_np.
-
- - Clock Selection: pthread_getcpuclockid, pthread_condattr_getclock,
- pthread_condattr_setclock.
-
- - Scheduling: pthread_setschedprio.
-
- - Signalling: pthread_sigqueue.
-
-- Add /proc/devices, /proc/misc, /proc/sysvipc, /proc/swaps.
-
-- Make various system functions thread cancelation points per POSIX.
-
-- Add ioctl FIONREAD handling for non-sockets.
-
-- dlopen now supports the Glibc-specific RTLD_NODELETE and RTLD_NOOPEN flags.
-
-- The printf and wprintf families of functions now support the %m conversion
- flag.
-
-- Execed processes now inherit the children of their predecessor.
-
-- Fifos have been rewritten and should now be more reliable.
-
-- GNU/glibc error.h error reporting functions: error, error_at_line,
- error_message_count, error_one_per_line, error_print_progname.
-
-- C99 <tgmath.h> type-generic macros.
-
-- Other new API: clock_getcpuclockid, clock_nanosleep, clock_settime, __fpurge,
- get_current_dir_name, getgrouplist, getpt, ppoll, psiginfo, psignal,
- ptsname_r, sys_siglist, sysinfo.
-
-- cygwin_conv_path_list finally supports CCP_WIN_W_TO_POSIX and
- CCP_POSIX_TO_WIN_W conversions.
-
-
-What changed:
--------------
-
-- Drop support for Windows NT4.
-
-- The CYGWIN=tty mode using pipes to communicate with the console in a pseudo
- tty-like mode has been removed. Either just use the normal Windows console
- as is, or use a terminal application like mintty.
-
-- The CYGWIN environment variable options "envcache", "strip_title", "title",
- "tty", and "upcaseenv" have been removed.
-
-- New heap management. Drop registry setting "heap_chunk_in_mb" in favor of
- a new per-executable setting in the executable file header which can be set
- using the peflags tool. Drop registry setting "heap_slop_in_mb" entirely.
-
-- Revamp console and pseudo tty handling. Rename /dev/ttyX to /dev/consX,
- /dev/ttyX to /dev/ptyX.
-
-- Improve fork/exec performance on 64 bit systems.
-
-- Improve Ctrl-C handling in console.
-
-- Try harder to let fork not fail if DLLs are moved in memory which should,
- in some cases, minimize the need for rebaseall.
-
-- Try harder to send SIGHUP to children when process group leader fails.
-
-- Deal with Windows problem where non-blocking pipe I/O was not flushed
- properly on close.
-
-- Attempt to regularize most syscall-related strace output.
-
-- Improve behavior of Cygwin when started from a 64-bit process, especially
- under Windows 2003.
-
-- Improve multi-thread/reentrancy safety with syscalls that deal with fds.
-
-- dlopen can now find "cygFOO.dll", even if the caller specified "libFOO.so".
- This is supposed to support applications which are no aware of Windows DLLs.
-
-- Make accept(2), poll(2) and shutdown(2) behave more like on Linux.
-
-- Raise max number of mount points from 30 to 64.
-
-- Output of /proc/maps is closer to what Linux prints and much more useful to
- examine process VM layout.
-
-- /proc/loadavg now shows the number of currently running processes and the
- total number of processes.
-
-- /proc/version now shows the username of whomever compiled the Cygwin DLL
- as well as the version of GCC used when compiling.
-
-- Various assorted bugfixes and improvements.
-
-- Preliminary, no guarantee, may be broken in subtle ways, Windows 8 support.
diff --git a/winsup/cygwin/release/1.7.11 b/winsup/cygwin/release/1.7.11
deleted file mode 100644
index d4e0911d2..000000000
--- a/winsup/cygwin/release/1.7.11
+++ /dev/null
@@ -1,29 +0,0 @@
-What's new:
------------
-
-- New pldd command for listing DLLs loaded by a process.
-
-- New API: scandirat.
-
-
-What changed:
--------------
-
-- Fixed problem where background Cygwin processes kept the windows
- console window from exiting.
-
-- Change the way remote shares mapped to drive letters are recognized
- when creating the cygdrive directory. If Windows claims the drive
- is unavailable, don't show it in the cygdrive directory listing.
-
-- Lower the stack pressure in some Cygwin calls by reducing the buffer
- space allocated on the stack.
-
-- Raise default stacksize of pthreads from 512K to 1 Meg. It can still
- be changed using the pthread_attr_setstacksize call.
-
-- process.h header has been moved back from /usr/include/cygwin to
- /usr/include.
-
-- Make <sys/wait.h> header C++ clean.
-
diff --git a/winsup/cygwin/release/1.7.12 b/winsup/cygwin/release/1.7.12
deleted file mode 100644
index 641e73062..000000000
--- a/winsup/cygwin/release/1.7.12
+++ /dev/null
@@ -1,21 +0,0 @@
-What's new:
------------
-
-- Cygwin now automatically populates the /dev directory with all
- existing POSIX devices.
-
-- Add virtual /proc/PID/mountinfo file.
-
-- flock now additionally supports the following scenario, which requires
- to propagate locks to the parent process:
-
- (
- flock -n 9 || exit 1
- # ... commands executed under lock ...
- } 9>/var/lock/mylockfile
-
- Only propagation to the direct parent process is supported so far,
- not to grand parents or sibling processes.
-
-- Add a "detect_bloda" setting for the CYGWIN environment variable to help
- finding potential BLODAs.
diff --git a/winsup/cygwin/release/1.7.13 b/winsup/cygwin/release/1.7.13
deleted file mode 100644
index 23db7b553..000000000
--- a/winsup/cygwin/release/1.7.13
+++ /dev/null
@@ -1,8 +0,0 @@
-What's new:
------------
-
-- mkpasswd and mkgroup now try to print an entry for the TrustedInstaller
- account existing since Windows Vista/Server 2008.
-
-- Terminal typeahead when switching from canonical to non-canonical mode
- is now properly flushed.
diff --git a/winsup/cygwin/release/1.7.14 b/winsup/cygwin/release/1.7.14
deleted file mode 100644
index 02042c1d2..000000000
--- a/winsup/cygwin/release/1.7.14
+++ /dev/null
@@ -1,21 +0,0 @@
-What's new:
------------
-
-- Add mouse reporting mode 1005, 1006 and 1015 to console.
-
-Bug fixes:
-----------
-
-- Allow access of /dev/conin, /dev/conout, and /dev/console if a console
- device is detected.
-
-- Always allow nonexistent on-disk devices to be referenced even if they
- can't be open.
-
-- Allow inheritance of special types like /dev/clipboard or /dev/urandom
- which do not have actual handles associated with them.
-
-- Fix inode numbers of non-device files in virtual filesystems.
-
-- Fix reporting large mouse coordinates in console window mouse reporting mode.
-
diff --git a/winsup/cygwin/release/1.7.15 b/winsup/cygwin/release/1.7.15
deleted file mode 100644
index 4e9e64090..000000000
--- a/winsup/cygwin/release/1.7.15
+++ /dev/null
@@ -1,29 +0,0 @@
-What's new:
------------
-
-- Add CYGWIN=pipe_byte option to force opening of pipes in byte mode
- rather than message mode.
-
-Bug fixes:
-----------
-
-- Fix output of mkpasswd -c option in case $HOME is set at the time.
- Fixes: http://cygwin.com/ml/cygwin/2012-05/msg00094.html
-
-- Fix problem where too much input was attempted to be read from a
- pty slave. Fixes: http://cygwin.com/ml/cygwin/2012-05/msg00049.html
-
-- Fix problem setting parent pid to 1 when process with children execs
- itself. Fixes: http://cygwin.com/ml/cygwin/2012-05/msg00009.html
-
-- Fix fesetround and fesetprec to allow all valid input parameters.
- Fixes: http://cygwin.com/ml/cygwin/2012-05/msg00010.html
-
-- Avoid "WARNING: Couldn't compute FAST_CWD pointer." message on
- Windows 8 Customer Preview 32 bit.
- Fixes: http://cygwin.com/ml/cygwin/2012-04/msg00616.html
-
-- Don't make Cygwin wait for all children of a non-cygwin child program.
- Fixes: http://cygwin.com/ml/cygwin/2012-05/msg00063.html,
- http://cygwin.com/ml/cygwin/2012-05/msg00075.html
-
diff --git a/winsup/cygwin/release/1.7.16 b/winsup/cygwin/release/1.7.16
deleted file mode 100644
index c955cfe44..000000000
--- a/winsup/cygwin/release/1.7.16
+++ /dev/null
@@ -1,39 +0,0 @@
-What's new:
------------
-
-- New API: getmntent_r, memrchr.
-
-- Support ReFS.
-
-Bug fixes:
-----------
-
-- Fix pipe creation problem which manifested as a problem creating a
- fifo. Fixes: http://cygwin.com/ml/cygwin/2012-05/msg00253.html
-
-- Fix hang when calling pthread_testcancel in a canceled thread.
- Fixes some of: http://cygwin.com/ml/cygwin/2012-05/msg00186.html
-
-- Fix invocation of strace from a cygwin process. Fixes:
- http://cygwin.com/ml/cygwin/2012-05/msg00292.html
-
-- Fix hang when zero bytes are written to a pty using
- Windows WriteFile or equivalent. Fixes:
- http://cygwin.com/ml/cygwin/2012-05/msg00323.html
-
-- Fix recv, recvfrom, recvmsg behaviour if a 0 bytes buffer is given
- as argument. Fixes: http://cygwin.com/ml/cygwin/2012-05/msg00332.html
-
-- Handle inode numbers returned by Samba >= 3.5.4.
- Fixes: http://cygwin.com/ml/cygwin/2012-05/msg00236.html
-
-- Fix emacs problem which exposed an issue with Cygwin's select() function.
- If a signal arrives while select is blocking and the program longjmps
- out of the signal handler then threads and memory may be left hanging.
- Fixes: http://cygwin.com/ml/cygwin/2012-05/threads.html#00275
-
-- Fix fileno(3) to return -1/EBADF if stream is closed.
- Fixes: http://cygwin.com/ml/cygwin/2012-07/msg00083.html
-
-- Fix clipboard handling, at least partially:
- http://cygwin.com/ml/cygwin/2012-06/msg00521.html
diff --git a/winsup/cygwin/release/1.7.17 b/winsup/cygwin/release/1.7.17
deleted file mode 100644
index c8442ee5d..000000000
--- a/winsup/cygwin/release/1.7.17
+++ /dev/null
@@ -1,43 +0,0 @@
-What's new:
------------
-
-- Support the "e" flag to fopen(3). This is a Glibc extension which
- allows to fopen the file with the O_CLOEXEC flag set.
-
-- Support the "x" flag to fopen(3). This is a Glibc/C11 extension which
- allows to open the file with the O_EXCL flag set.
-
-
-Bug fixes:
-----------
-
-- Prevent CTRL-S hang.
- Fixes: http://cygwin.com/ml/cygwin/2012-10/threads.html#00089
-
-- Revamp signals so that signals-to-threads more closely mimic Linux
- operation.
- First step of fix for: http://cygwin.com/ml/cygwin/2012-05/msg00186.html
- as well as observed Linux behavior.
-
-- Revert to only creating a new session leader when we know that a
- console process is started in the background.
- Should fix: http://cygwin.com/ml/cygwin/2012-08/threads.html#00062
-
-- Fix mysterious crashes when accessing /etc.
- Fixes: http://cygwin.com/ml/cygwin/2012-07/threads.html#00613 and others.
-
-- Fix a potential race condition starting multiple "first" Cygwin processes
- concurrently.
- Should fix: http://cygwin.com/ml/cygwin/2012-07/msg00531.html
-
-- Fix a bug in unlink/rmdir which could result in removing non-empty
- directories on network drives. Also fix problems trying to rename files
- under newer Samba versions.
- Fixes: http://cygwin.com/ml/cygwin/2012-07/threads.html#00477
-
-- Prefer to call WSARecvMsg from recvmsg if possible.
- Fixes: http://cygwin.com/ml/cygwin/2012-07/msg00662.html
-
-- Correct hang typified by running "procps" after Cygwin has started a
- Windows process.
- Fixes: http://cygwin.com/ml/cygwin/2012-05/threads.html#00349
diff --git a/winsup/cygwin/release/1.7.18 b/winsup/cygwin/release/1.7.18
deleted file mode 100644
index 1a89522f2..000000000
--- a/winsup/cygwin/release/1.7.18
+++ /dev/null
@@ -1,70 +0,0 @@
-What's new:
------------
-
-- For performance reasons, Cygwin does not try to create sparse files
- automatically anymore, unless you use the new "sparse" mount option.
-
-- Added Windows console cursor appearance support:
-
- - Show/Hide Cursor mode (DECTCEM): "ESC[?25h" / "ESC[?25l"
-
- - Set cursor style (DECSCUSR): "ESC[n q" (note the space before the q);
- where n is 0, 1, 2 for block cursor, 3, 4 for underline cursor (all
- disregarding blinking mode), or > 4 to set the cursor height to a
- percentage of the cell height.
-
-- New API: cfsetspeed.
-
-- Changes in cygwin1.dll and gdb-7.5.50-2 now allow gdb to recognize
- Cygwin-specific signals like "SIGTERM" as well as Windows signals like
- "SIGSEGV". This feature is still experimental.
-
-Bug fixes:
-----------
-
-- Fix handle leak in rewinddir(3). This affected Windows 2000 only.
-
-- Allow quoted filenames in @ argument expression when called from native
- processes. Fixes http://cygwin.com/ml/cygwin/2012-12/msg00276.html
-
-- Fix a bug in initializing the stdio settings at process startup, which
- could result in missing output.
- Fixes http://cygwin.com/ml/cygwin/2013-01/msg00008.html
-
-- rename("dir1", "dir2") could result in deleting dir2, even if the rename
- didn't take place, for instance, if dir1 and dir2 were not on the same
- device.
-
-- rename("file1", "file2") would fail in almost all cases on NFS, due to a
- bug in the NFS driver's implementation of the FileRenameInformation info
- class.
-
-- Fix bug where dup2 segv'ed on negative fd.
- See: http://cygwin.com/ml/cygwin/2012-12/msg00377.html
-
-- Work around problem of erratic exit codes caused by a thread exiting
- while process is shutting down.
- See: http://cygwin.com/ml/cygwin/2012-12/msg00377.html
-
-- Always interrupt select() on a signal.
- See: http://cygwin.com/ml/cygwin/2013-01/threads.html#00139
-
-- Fix problem where sigwait() ignored non-thread-specific signals.
- See: http://cygwin.com/ml/cygwin/2012-12/threads.html#00076
-
-- Fix special processing of "cmd /c" so that "/C" is allowed as well.
- See: http://cygwin.com/ml/cygwin/2012-11/msg00286.html
-
-- Return 0 rather than -1 when select() times out.
- See: http://cygwin.com/ml/cygwin/2012-11/msg00132.html
-
-- Fix some bugs in CTRL-S/CTRL-Q handling in ptys.
- See: http://cygwin.com/ml/cygwin/2012-10/msg00089.html
-
-- Fix "error while loading shared libraries:" message to properly
- display the shared library name in more cases.
-
-- Fix unreported problem of exec'ed and spawn'ed processes not
- inheriting the signal mask of their "parents".
-
-- Fix race in signal mask detection with new thread creation.
diff --git a/winsup/cygwin/release/1.7.19 b/winsup/cygwin/release/1.7.19
deleted file mode 100644
index 182fce32d..000000000
--- a/winsup/cygwin/release/1.7.19
+++ /dev/null
@@ -1,45 +0,0 @@
-What's new:
------------
-
-- Drop support for Windows 2000 and Windows XP pre-SP3.
-
-- Add support for building a 64 bit version of Cygwin on x86_64 natively.
-
-- Add support for creating native symlinks (CYGWIN=winsymlinks:native or
- CYGWIN=winsymlinks:nativestrict).
-
-- Add support for the AFS filesystem.
-
-- Preliminary support for mandatory locking via fcntl/flock/lockf, using
- Windows locking semantics. New F_LCK_MANDATORY fcntl command.
-
-- New APIs: __b64_ntop, __b64_pton, arc4random, arc4random_addrandom,
- arc4random_buf, arc4random_stir, arc4random_uniform.
-
-Bug fixes:
-----------
-
-- getgrouplist now always creates a group list, even if it's empty.
- Fixes: http://cygwin.com/ml/cygwin/2013-05/msg00157.html
-
-- In fork, call CreateProcessW with the same command line as the parent
- process. This seems to make sure the stack is created in the same
- memory location as in the parent.
- Fixes: http://cygwin.com/ml/cygwin/2013-05/msg00340.html
-
-- Fix a build problem resulting in Cygwin functions picking up the wrong
- new/delete.
- Fixes: http://cygwin.com/ml/cygwin/2013-05/msg00331.html
-
-- Fix an incorrect condition which breaks fork after all dlopen'ed DLLs
- have already been dlclose'd.
- Fixes: http://cygwin.com/ml/cygwin/2013-05/msg00376.html
-
-- Fix buggy usage of NtReadFile when reading from device under /proc/sys.
- Fixes: http://cygwin.com/ml/cygwin/2013-05/msg00392.html
-
-- Fix an include in <cygwin/if.h> to avoid circular dependency.
- Fixes: http://cygwin.com/ml/cygwin/2013-05/msg00451.html
-
-- Fix a hang on exit when calling pthread_join in global desctructor.
- Fixes: http://cygwin.com/ml/cygwin/2013-06/msg00017.html
diff --git a/winsup/cygwin/release/1.7.20 b/winsup/cygwin/release/1.7.20
deleted file mode 100644
index 2f33b9583..000000000
--- a/winsup/cygwin/release/1.7.20
+++ /dev/null
@@ -1,9 +0,0 @@
-What's new:
------------
-
-
-Bug fixes:
-----------
-
-- Fix starvation problem when handling SIGCONT.
- Fixes: http://cygwin.com/ml/cygwin/2013-06/msg00084.html
diff --git a/winsup/cygwin/release/1.7.21 b/winsup/cygwin/release/1.7.21
deleted file mode 100644
index 79ff22204..000000000
--- a/winsup/cygwin/release/1.7.21
+++ /dev/null
@@ -1,31 +0,0 @@
-What's new:
------------
-
-- New API: rawmemchr.
-
-- Make cygcheck report when scanned DLLs are symlinks or are not meant
- for the current architecture (x86 vs. x86_64).
- See: http://cygwin.com/ml/cygwin/2013-07/msg00143.html
-
-Bug fixes:
-----------
-
-- Fix long-standing problem which allows to access files via ".." using an
- invalid POSIX path, for instance, `cd nonexistant/../existing_dir".
- Fixes: http://cygwin.com/ml/cygwin/2013-05/msg00222.html
-
-- Fix EFAULT when reading large clipboard.
- Fixes: http://cygwin.com/ml/cygwin/2013-06/msg00311.html
-
-- Fix creation of relative native symlinks.
- Fixes: http://cygwin.com/ml/cygwin/2013-06/msg00340.html
- http://cygwin.com/ml/cygwin/2013-07/msg00286.html
-
-- Update profiling code to latest from Mingw-w64. Allows profiling on x86_64
- now and fixes http://cygwin.com/ml/cygwin/2013-06/msg00376.html
-
-- Fix character comparisons in certain scenarios within the functions glob(3),
- fnmatch(3), and regcomp(3). All Unicode chars beyond U+0100 are affected.
-
-- Fix problem with pty closing which manifested as a screen issue:
- See: http://cygwin.com/ml/cygwin/2013-06/msg00196.html
diff --git a/winsup/cygwin/release/1.7.22 b/winsup/cygwin/release/1.7.22
deleted file mode 100644
index edb942548..000000000
--- a/winsup/cygwin/release/1.7.22
+++ /dev/null
@@ -1,42 +0,0 @@
-What's new:
------------
-
-
-What changed:
------------
-
-- Support for /dev/mem, /dev/kmem and /dev/port removed, since OS support
- was limited to 32 bit Windows XP only.
-
-- Added cygwin GetCommandLine wrappers which will allow Cygwin programs to
- (appear to) use the Windows command line functions.
-
-- regcomp(3) now allows character values >= 0x80 if the current codeset is
- ASCII (default codeset in the "C"/"POSIX" locale). This allows patterns
- containing arbitrary byte values as GLibc's regcomp.
- Fixes: http://cygwin.com/ml/cygwin/2013-07/msg00405.html
-
-
-Bug fixes:
-----------
-
-- Fix an off-by-one error in path handling which made the access check
- for the existing path before a ".." component (introduced with 1.7.21)
- fail for UNC paths (//server/share/path).
- Fixes: http://cygwin.com/ml/cygwin/2013-07/msg00375.html
-
-- Fix long-standing problem which allows to access files via ".." using an
- invalid POSIX path, for instance, `cd nonexistant/../existing_dir".
- Fixes: http://cygwin.com/ml/cygwin/2013-05/msg00222.html
-
-- Fix an initialization bug in XSI IPC on, which could result in
- XSI IPC functions misbehave on x86_64.
- Fixes: http://cygwin.com/ml/cygwin-apps/2013-07/msg00063.html
- http://cygwin.com/ml/cygwin-apps/2013-07/msg00229.html
-
-- Fix a timer handle leak in sleep family of functions.
- Fixes: http://cygwin.com/ml/cygwin/2013-07/msg00379.html
-
-- Fix issue with raise() not causing the process to exit with a signal
- status. Also only set "dumped core" flag when it's a "kernel" signal.
- See: http://cygwin.com/ml/cygwin-apps/2013-07/msg00251.html
diff --git a/winsup/cygwin/release/1.7.23 b/winsup/cygwin/release/1.7.23
deleted file mode 100644
index 5bef193ae..000000000
--- a/winsup/cygwin/release/1.7.23
+++ /dev/null
@@ -1,25 +0,0 @@
-What's new:
------------
-
-
-What changed:
------------
-
-- Added CYGWIN environment variable keyword which causes the full windows
- command line (<=32K) to always be sent to subprocesses.
- See: http://cygwin.com/ml/cygwin/2013-07/threads.html#00523
-
-Bug fixes:
-----------
-
-- Fix race condition in POSIX semaphores which potentially breaks fork() when
- using POSIX semaphores in a multithreaded process.
- Fixes: http://cygwin.com/ml/cygwin/2013-07/msg00404.html
- http://cygwin.com/ml/cygwin/2013-07/msg00198.html
-
-- Fix cyglsa build problem which made the cyglsa DLLs entirely non-functional
- when built with newer gcc versions.
- Fixes: http://cygwin.com/ml/cygwin/2013-07/msg00656.html
-
-- Fix incorrect handling of /.. or //.. in parent path existence check.
- Fixes: http://cygwin.com/ml/cygwin/2013-07/msg00689.html
diff --git a/winsup/cygwin/release/1.7.24 b/winsup/cygwin/release/1.7.24
deleted file mode 100644
index b24a7b079..000000000
--- a/winsup/cygwin/release/1.7.24
+++ /dev/null
@@ -1,13 +0,0 @@
-What's new:
------------
-
-- Allow application override of posix_memalign.
-
-
-What changed:
--------------
-
-
-Bug fixes:
-----------
-
diff --git a/winsup/cygwin/release/1.7.25 b/winsup/cygwin/release/1.7.25
deleted file mode 100644
index 6415923f3..000000000
--- a/winsup/cygwin/release/1.7.25
+++ /dev/null
@@ -1,27 +0,0 @@
-What's new:
------------
-
-
-What changed:
--------------
-
-- Change magic number associated with process information block so that 32-bit
- Cygwin processes don't try to interpret 64-bit information and vice-versa.
-
-- Redefine content of mtget tape info struct to allow fetching the number of
- partitions on a tape.
-
-
-Bug fixes:
-----------
-
-- Fix creating two partitions on tape drives supporting initiator partitions.
-
-- Update the internally used blocksize after setting a new blocksize for the
- current tape.
-
-- Fix problem with queued signals as manifested by:
- http://cygwin.com/ml/cygwin/2013-08/msg00534.html
-
-- Fix bug in sbrk breaking extending the heap beyond its default size.
- Fixes: http://cygwin.com/ml/cygwin/2013-08/msg00520.html
diff --git a/winsup/cygwin/release/1.7.26 b/winsup/cygwin/release/1.7.26
deleted file mode 100644
index ef838126c..000000000
--- a/winsup/cygwin/release/1.7.26
+++ /dev/null
@@ -1,71 +0,0 @@
-What's new:
------------
-
-- getaddrinfo now supports glibc-specific International Domain Name (IDN)
- extension flags: AI_IDN, AI_CANONIDN, AI_IDN_ALLOW_UNASSIGNED,
- AI_IDN_USE_STD3_ASCII_RULES.
-
-- getnameinfo now supports glibc-specific International Domain Name (IDN)
- extension flags: NI_IDN, NI_IDN_ALLOW_UNASSIGNED, NI_IDN_USE_STD3_ASCII_RULES.
-
-- Preliminary, experimental support of the posix_spawn family of functions.
- New associated header /usr/include/spawn.h.
-
-
-What changed:
--------------
-
-- Slightly improve randomness of /dev/random emulation.
-
-- Allow to use advisory locking on any device. POSIX fcntl and lockf locking
- works with any device, BSD flock locking only with devices backed by an OS
- handle. Right now this excludes console windows on pre Windows 8, as well as
- almost all virtual files under /proc from BSD flock locking.
-
-- The header /usr/include/exceptions.h, containing implementation details for
- 32 bit Windows' exception handling only, has been removed.
-
-
-Bug fixes:
-----------
-
-- pthread_atparent hook should not be called in the child.
- Fixes: http://cygwin.com/ml/cygwin/2013-09/msg00365.html
-
-- 64 bit only: Correctly mmap'ing regions > 4 Gigs.
- Fixes: http://cygwin.com/ml/cygwin/2013-09/msg00155.html
-
-- Fix random content of /proc/$PID/ctty if the process has no controlling
- tty. Set to just "\n" instead.
-
-- Properly set process sid rather than always using -1.
- Fixes: http://cygwin.com/ml/cygwin/2013-10/threads.html#00237
-
-- Fix a potential crash after calling lseek on /dev/clipboard.
-
-- Fix a handle inheritance bug in raw disk and tape device handling which
- led to EBADF errors in child processes.
-
-- open("/dev", O_CREAT) accidentally created a /dev file if no /dev
- exists at the time.
-
-- DIR *d = opendir ("foo"); flock (dirfd (d), ...); worked, but did the
- wrong thing.
-
-- Reading from /dev/windows was broken for some time.
-
-- select'ing on /dev/windows accidentally didn't take the setting of
- ioctl (WINDOWS_HWND) into account.
-
-- Fix typos in cygcheck which could crash Windows 8 and 8.1 machines.
- Fixes: http://cygwin.com/ml/cygwin/2013-11/msg00334.html
-
-- Show OS version correctly even on Windows 8.1 and Server 2012 R2.
- Fixes: http://cygwin.com/ml/cygwin/2013-11/msg00343.html
-
-- dup2() could crash in some cases for a destination >= 256
- Fixes: http://cygwin.com/ml/cygwin/2013-09/msg00397.html
-
-- Try to workaround the following problem: unlink(2) could fail, if the
- file was opened casesensitive and has to be moved to the recycler due
- to a sharing violation.
diff --git a/winsup/cygwin/release/1.7.27 b/winsup/cygwin/release/1.7.27
deleted file mode 100644
index d1352fc99..000000000
--- a/winsup/cygwin/release/1.7.27
+++ /dev/null
@@ -1,19 +0,0 @@
-What changed:
--------------
-
-- Don't create native symlinks with target paths having long path prefixes
- "\\?\" if the target path is shorter than MAX_PATH characters. This works
- around a Windows 8.1 bug: The ShellExecuteW fails if the lpFile parameter
- points to a native NTFS symlink with a target path prefixed with "\\?\".
- Fixes: http://cygwin.com/ml/cygwin/2013-12/msg00101.html
-
-
-Bug Fixes
----------
-
-- Some devices, like, /dev/dsp are no longer detected due to the new
- use of \Device\Null for devices which have no real handle.
- Fixes: http://cygwin.com/ml/cygwin/2013-12/threads.html#00000
-
-- Cygwin could easily run out of file handles.
- Fixes: http://cygwin.com/ml/cygwin/2013-12/threads.html#00000
diff --git a/winsup/cygwin/release/1.7.28 b/winsup/cygwin/release/1.7.28
deleted file mode 100644
index a7f8494c0..000000000
--- a/winsup/cygwin/release/1.7.28
+++ /dev/null
@@ -1,55 +0,0 @@
-What's new:
------------
-
-- popen now supports the Glibc 'e' flag to set the FD_CLOEXEC flag on the pipe
- in a thread-safe way.
-
-- netinet/ip6.h header.
-
-
-What changed:
--------------
-
-- Switch to BSD FILE stream fopen/exit semantics, as in all BSD variants and
- Linux/GLibc: Don't fflush/lseek a FILE stream on fclose and exit, if it
- only has been read from.
- See: http://cygwin.com/ml/cygwin/2014-01/msg00110.html
-
-
-Bug Fixes
----------
-
-- Store and restore FPU control word and XMM registers when a signal is
- handled.
- Fixes: http://cygwin.com/ml/cygwin/2014-01/msg00075.html
-
-- Signals should no longer hang when they occur within a low-level
- Windows DLL.
- Fixes: http://cygwin.com/ml/cygwin/2013-12/threads.html#00151
-
-- If it turns out that transactions don't work during unlink(2) or rename(2),
- despite the fact that the filesystem claims to handle them, stop transaction
- and try again without.
- Fixes: http://cygwin.com/ml/cygwin/2013-12/msg00119.html
-
-- Closing a dup'ed master tty handle should no longer invalidate the dup'ed fd.
- Fixes: http://cygwin.com/ml/cygwin/2013-12/threads.html#00279
-
-- Problems where ps hangs when used in a pipeline should now be solved.
- Fixes: http://cygwin.com/ml/cygwin/2013-12/threads.html#00262
-
-- Using gdb from a Windows console rather than a pty should no longer randomly
- hang.
-
-- Fix locale-specific radix char handling in scanf family of functions.
- Fixes: http://cygwin.com/ml/cygwin/2013-12/msg00294.html
-
-- The console buffer should no longer be cleared when the resolution of the
- console exceeds some magic threshold.
- Fixes: http://cygwin.com/ml/cygwin/2013-12/threads.html#00406
-
-- Fix inadvertent clearing of entire console buffer on clear screen.
- See: http://cygwin.com/ml/cygwin/2014-01/msg00011.html
-
-- Make sure that stackdump file is closed after use.
- See: http://cygwin.com/ml/cygwin/2014-01/threads.html#00029
diff --git a/winsup/cygwin/release/1.7.29 b/winsup/cygwin/release/1.7.29
deleted file mode 100644
index 4896934f6..000000000
--- a/winsup/cygwin/release/1.7.29
+++ /dev/null
@@ -1,44 +0,0 @@
-What's new:
------------
-
-- Allow quoting of arguments to the CYGWIN environment variable, i.e.,
- set CYGWIN=error_start="c:\bin\someprogram -T"
-
-
-What changed:
--------------
-
-
-Bug Fixes
----------
-
-- Try harder to do the right thing in the presence of console screen buffers,
- i.e., never clear the screen buffer unless the user asked for it. Also
- fix screen escape sequences which attempted to scroll the screen.
- Addresses: http://cygwin.com/ml/cygwin/2014-02/threads.html#00274
-
-- Make "ps -W" report different WINPIDs for processes that have been execed
- from, e.g., cmd.
- Addresses: http://cygwin.com/ml/cygwin/2014-02/threads.html#00382
-
-- Avoid error messages from the signal handler if we're exiting.
- Addresses: A random irc #cygwin complaint.
-
-- Fix return value from getgrouplist function to behave like glibc.
-
-- Fix initialization of open_memstream which could lead to dropping the
- entire string.
- Addresses: http://cygwin.com/ml/cygwin/2014-03/threads.html#00413
-
-- Fix problem where ending chunk of audio was missing when accessing /dev/dsp.
- Addresses: http://cygwin.com/ml/cygwin/2014-03/threads.html#00117
-
-- Fix exception handling on x86_64.
- Addresses: http://cygwin.com/ml/cygwin/2014-03/threads.html#00026
-
-- Fix reading extended attributes from files on remote shares.
- Addresses: A personally encountered spurious error message:
- mv: listing attributes of `//server/share/file': Invalid argument
-
-- Fix sending an invalid pointer to cygserver during fork.
- Addresses: http://cygwin.com/ml/cygwin/2014-04/msg00001.html
diff --git a/winsup/cygwin/release/1.7.30 b/winsup/cygwin/release/1.7.30
deleted file mode 100644
index 5d3e18d5b..000000000
--- a/winsup/cygwin/release/1.7.30
+++ /dev/null
@@ -1,43 +0,0 @@
-Bug Fixes
----------
-
-- Only handle the minimum amount of exceptions required in internal Cygwin
- SEGV handling.
- Addresses: https://cygwin.com/ml/cygwin/2014-04/msg00132.html
- https://cygwin.com/ml/cygwin/2014-04/msg00464.html
- https://cygwin.com/ml/cygwin/2014-05/msg00361.html
-
-- Ignore setsockopt(IPV6_TCLASS). It always returns an error code on Windows.
-
-- Workaround a problem following native NTFS symlinks.
- Addresses: https://cygwin.com/ml/cygwin/2014-04/msg00384.html
-
-- Fix `passwd -R' broken since 1.7.28.
- Addresses: https://cygwin.com/ml/cygwin/2014-04/msg00446.html
-
-- Allow 0 length in calls to readv/writev.
- Addresses: https://cygwin.com/ml/cygwin/2014-04/msg00509.html
-
-- Workaround Winsock not setting SO_ERROR on dup'ed socket after receiving
- event on sibling socket.
- Addresses: https://cygwin.com/ml/cygwin/2014-04/msg00510.html
-
-- Accept INADDR_ANY/in6addr_any to connect to local AF_INET/AF_INET6
- address, as on Linux.
- Addresses: https://cygwin.com/ml/cygwin/2014-04/msg00510.html
-
-- Workaround weird status codes returned when trying to run transactions
- under a Perforce SCCS managed directory.
- Addresses: https://cygwin.com/ml/cygwin/2014-04/msg00531.html
-
-- Return expected 4 bytes size from getsockopt(TCP_NODELAY), not 1 as
- Winsock.
- Addresses: https://cygwin.com/ml/cygwin/2014-04/msg00624.html
-
-- Ignore trailing whitespace on #! scripts.
- Addresses: https://cygwin.com/ml/cygwin/2014-05/msg00022.html
-
-- Fix raw floppy drive handling broken since 1.7.19.
- Addresses: https://cygwin.com/ml/cygwin/2014-05/msg00401.html
-
-- Fix handling of ioctl for /dev/dsp.
diff --git a/winsup/cygwin/release/1.7.31 b/winsup/cygwin/release/1.7.31
deleted file mode 100644
index c54d96814..000000000
--- a/winsup/cygwin/release/1.7.31
+++ /dev/null
@@ -1,42 +0,0 @@
-What changed:
--------------
-
-- Improve performance of send(2), sendto(2), sendmsg(2) when using small
- input buffers.
- Addresses: https://cygwin.com/ml/cygwin/2014-07/msg00069.html
-
-- The default pthread_mutex type is now PTHREAD_MUTEX_NORMAL, rather than
- PTHREAD_MUTEX_ERRORCHECK, just as on Linux.
-
-- Align pthread_attr stack functions more closely to Linux.
-
-- Mark pthread_attr_getstackaddr and pthread_attr_setstackaddr as deprecated,
- as on Linux.
-
-
-Bug Fixes
----------
-
-- Fix various assorted bugs (potential buffer overruns, resource leaks, you
- name it) caught by Coverity.
-
-- Fix return value of getgrouplist if the number of groups is bigger than the
- application-provided buffer can hold.
- See https://cygwin.com/ml/cygwin/2014-05/msg00469.html
-
-- Fix a spurious error condition in calls to getaddrinfo on x86_64.
- Addresses: https://cygwin.com/ml/cygwin/2014-06/msg00350.html
-
-- Workaround a problem following native NTFS symlinks. This patch has been
- not applied to 1.7.30, accidentally.
- Addresses: https://cygwin.com/ml/cygwin/2014-04/msg00384.html
-
-- Fix an off-by-one bug in res_querydomain.
- Addresses: https://cygwin.com/ml/cygwin/2014-07/msg00052.html
-
-- Don't catch STATUS_STACK_OVERFLOW preliminary on 64 bit.
- Fixes: https://cygwin.com/ml/cygwin/2014-07/msg00046.html
-
-- Make sure that signals are properly delivered when sending lots of signals
- in succession.
- Fixes: https://cygwin.com/ml/cygwin/2014-07/threads.html#00149
diff --git a/winsup/cygwin/release/1.7.32 b/winsup/cygwin/release/1.7.32
deleted file mode 100644
index e4386b798..000000000
--- a/winsup/cygwin/release/1.7.32
+++ /dev/null
@@ -1,23 +0,0 @@
-What's new:
------------
-
-- Export __cxa_atexit and __cxa_finalize to allow C++ standards-compliant
- destructor handling in libstdc++ and g++ compiled code.
-
- Please note that, in order to benefit from this new feature, C++ code
- must be recompiled with the upcoming gcc 4.8.3-3 release which will
- enable the -fuse-cxa-atexit flag by default, and that C++ applications
- using this feature will not run on older Cygwin releases.
-
-- Support more recent CPU flags in /proc/cpuinfo.
-
-
-Bug Fixes
----------
-
-- Decorate attribute names with __, for namespace safety in various header
- files.
- Addresses: https://cygwin.com/ml/cygwin/2014-07/msg00371.html
-
-- Fix sys/file.h for using in C++ code.
- Addresses: https://cygwin.com/ml/cygwin/2014-08/msg00122.html
diff --git a/winsup/cygwin/release/1.7.33 b/winsup/cygwin/release/1.7.33
deleted file mode 100644
index 0875e48a9..000000000
--- a/winsup/cygwin/release/1.7.33
+++ /dev/null
@@ -1,80 +0,0 @@
-What's new:
------------
-
-- /proc/cygdrive is a new symlink pointing to the current cygdrive prefix.
- This can be utilized in scripts to access paths via cygdrive prefix, even
- if the cygdrive prefix has been changed by the user.
-
-- /proc/partitions now prints the windows mount points the device is mounted
- on. This allows to recognize the underlying Windows devices of the Cygwin
- raw device names.
-
-- New API: quotactl, designed after the Linux/BSD function, but severely
- restricted: Windows only supports user block quotas on NTFS, no group
- quotas, no inode quotas, no time constraints.
-
-- New APIs: ffsl, ffsll (glibc extensions).
-
-- New API: stime (SVr4).
-
-
-What changed:
--------------
-
-- New internal exception handling based on SEH on 64 bit Cygwin.
-
-- When exec'ing applications, check if $PATH exists and is non-empty. If not,
- add PATH variable with Cygwin installation directory as content to Windows
- environment to allow loading of Cygwin system DLLs.
-
-- Disable CYGWIN "dosfilewarning" option by default.
-
-- Improve various header files for C++- and standards-compliance.
-
-- Doug Lea malloc implementation update from 2.8.3 to the latest 2.8.6.
-
-- atexit is now exported as statically linked function from libcygwin.a.
- This allows reliable access to the DSO handle of the caller for newly
- built executables. The former atexit entry point into the DLL remains
- for backward compatibility only.
-
-
-Bug Fixes
----------
-
-- Per POSIX, dirfd(3) now returns EINVAL rather than EBADF on invalid
- directory stream.
-
-- Fix a resource leak in rmdir(2).
-
-- Fix fchmod(2)/fchown(2)/fsetxattr(2) in case the file got renamed after
- open and before calling one of the affected functions.
- Addresses: https://cygwin.com/ml/cygwin/2014-08/msg00517.html
-
-- Handle Netapp-specific problem in statvfs(2)/fstatvfs(2).
- Addresses: https://cygwin.com/ml/cygwin/2014-06/msg00425.html
-
-- Fix chown(2) on ptys in a corner case.
-
-- Generate correct error when a path is inaccessible due to missing permissions.
- Addresses: https://cygwin.com/ml/cygwin-developers/2014-10/msg00010.html
-
-- Don't hang in accept calls if socket is no listener. Set errno to EINVAL
- instead.
-
-- Don't allow seeking on serial lines and sockets. Set errno to ESPIPE
- instead.
- Addresses: https://cygwin.com/ml/cygwin/2014-08/msg00319.html
-
-- Fix output of /proc/<PID>/statm.
-
-- Fix a SEGV in cygcheck if the environment variable COMSPEC is not, or
- incorrectly set.
- Addresses: https://cygwin.com/ml/cygwin/2014-10/msg00292.html
-
-- Fix a SEGV in some 64 bit applications explicitely dlclosing DLLs.
- Addresses: https://cygwin.com/ml/cygwin/2014-10/msg00402.html
-
-- Fix -fuse-cxa-atexit handling where dlclose fails to trigger calling
- global dtors in dynamically loaded modules in C++ applications (and
- thus another potential SEGV).
diff --git a/winsup/cygwin/release/1.7.34 b/winsup/cygwin/release/1.7.34
deleted file mode 100644
index 5c598d1ae..000000000
--- a/winsup/cygwin/release/1.7.34
+++ /dev/null
@@ -1,63 +0,0 @@
-What's new:
------------
-
-- Cygwin can now generate passwd/group entries directly from Windows
- user databases (local SAM or Active Directory), thus allowing to run
- Cygwin without having to create /etc/passwd and /etc/group files.
- Introduce /etc/nsswitch.conf file to configure passwd/group handling.
-
- For bordercase which require to use /etc/passwd and /etc/group files,
- change mkpasswd/mkgroup to generate passwd/group entries compatible
- with the entries read from SAM/AD.
-
-- Add -b/--remove-all option to setfacl to reduce the ACL to only the
- entries representing POSIX permission bits.
-
-- Add -k/--remove-default option to setfacl to remove all default ACL
- entries from an ACL.
-
-- Provide Cygwin documentation (PDFs and HTML) for offline usage in
- /usr/share/doc/cygwin-${version}.
-
-- New APIs: qsort_r, __bsd_qsort_r.
-
-- New APIs: __fbufsize, __flbf, __fpending, __freadable, __freading,
- __fsetlocking, __fwritable, __fwriting.
-
-- New APIs: clearerr_unlocked, feof_unlocked, ferror_unlocked, fflush_unlocked,
- fgetc_unlocked, fgets_unlocked, fgetwc_unlocked, fgetws_unlocked,
- fileno_unlocked, fputc_unlocked, fputs_unlocked, fputwc_unlocked,
- fputws_unlocked, fread_unlocked, fwrite_unlocked, getwc_unlocked,
- getwchar_unlocked, putwc_unlocked, putwchar_unlocked.
-
-What changed:
--------------
-
-- Revamp Solaris ACL implementation to more closely work like POSIX ACLs
- are supposed to work. Finally implement a CLASS_OBJ emulation. Update
- getfacl(1)/setfacl(1) accordingly.
-
-- The xdr functions are no longer exported for newly built executables.
- Use libtirpc-devel instead.
-
-- 32 bit only: Change default values for socket buffer size to raise
- performance on 10Gb networks.
-
-- When spawning a process under another user account, merge the user's
- default Windows environment into the new process' environment.
-
-
-Bug Fixes
----------
-
-- Fix the problem that ptys master side always writes single byte packages
- to the slave side, and pty slaves always read VMIN byte packages from
- the master side if VMIN is > 0.
- Fixes: https://cygwin.com/ml/cygwin-developers/2014-11/msg00000.html
-
-- Fix a synchronization problem in signal handling when using pthreads.
- Addresses: https://cygwin.com/ml/cygwin/2014-11/msg00472.html
-
-- Fix an "invalid handle" problem when using flock(2) with a parent process
- holding the lock.
- Addresses: https://cygwin.com/ml/cygwin/2014-12/msg00012.html
diff --git a/winsup/cygwin/resource.cc b/winsup/cygwin/resource.cc
deleted file mode 100644
index 27ba4d4be..000000000
--- a/winsup/cygwin/resource.cc
+++ /dev/null
@@ -1,202 +0,0 @@
-/* resource.cc: getrusage () and friends.
-
- Copyright 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2005, 2008, 2009, 2010,
- 2011, 2012, 2013, 2014 Red Hat, Inc.
-
- Written by Steve Chamberlain (sac@cygnus.com), Doug Evans (dje@cygnus.com),
- Geoffrey Noer (noer@cygnus.com) of Cygnus Support.
- Rewritten by Sergey S. Okhapkin (sos@prospect.com.ru)
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include <unistd.h>
-#include <sys/param.h>
-#include "pinfo.h"
-#include "psapi.h"
-#include "cygtls.h"
-#include "path.h"
-#include "fhandler.h"
-#include "pinfo.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "ntdll.h"
-
-/* add timeval values */
-static void
-add_timeval (struct timeval *tv1, struct timeval *tv2)
-{
- tv1->tv_sec += tv2->tv_sec;
- tv1->tv_usec += tv2->tv_usec;
- if (tv1->tv_usec >= 1000000)
- {
- tv1->tv_usec -= 1000000;
- tv1->tv_sec++;
- }
-}
-
-/* add rusage values of r2 to r1 */
-void __stdcall
-add_rusage (struct rusage *r1, struct rusage *r2)
-{
- add_timeval (&r1->ru_utime, &r2->ru_utime);
- add_timeval (&r1->ru_stime, &r2->ru_stime);
- r1->ru_maxrss += r2->ru_maxrss;
- r1->ru_ixrss += r2->ru_ixrss;
- r1->ru_idrss += r2->ru_idrss;
- r1->ru_isrss += r2->ru_isrss;
- r1->ru_minflt += r2->ru_minflt;
- r1->ru_majflt += r2->ru_majflt;
- r1->ru_nswap += r2->ru_nswap;
- r1->ru_inblock += r2->ru_inblock;
- r1->ru_oublock += r2->ru_oublock;
- r1->ru_msgsnd += r2->ru_msgsnd;
- r1->ru_msgrcv += r2->ru_msgrcv;
- r1->ru_nsignals += r2->ru_nsignals;
- r1->ru_nvcsw += r2->ru_nvcsw;
- r1->ru_nivcsw += r2->ru_nivcsw;
-}
-
-/* FIXME: what about other fields? */
-void __stdcall
-fill_rusage (struct rusage *r, HANDLE h)
-{
- KERNEL_USER_TIMES kut;
-
- struct timeval tv;
-
- memset (&kut, 0, sizeof kut);
- memset (r, 0, sizeof *r);
- NtQueryInformationProcess (h, ProcessTimes, &kut, sizeof kut, NULL);
- totimeval (&tv, &kut.KernelTime, 0, 0);
- add_timeval (&r->ru_stime, &tv);
- totimeval (&tv, &kut.UserTime, 0, 0);
- add_timeval (&r->ru_utime, &tv);
-
- VM_COUNTERS vmc;
- NTSTATUS status = NtQueryInformationProcess (h, ProcessVmCounters, &vmc,
- sizeof vmc, NULL);
- if (NT_SUCCESS (status))
- {
- r->ru_maxrss += (long) (vmc.WorkingSetSize / 1024);
- r->ru_majflt += vmc.PageFaultCount;
- }
-}
-
-extern "C" int
-getrusage (int intwho, struct rusage *rusage_in)
-{
- int res = 0;
- struct rusage r;
-
- if (intwho == RUSAGE_SELF)
- {
- memset (&r, 0, sizeof (r));
- fill_rusage (&r, GetCurrentProcess ());
- *rusage_in = r;
- }
- else if (intwho == RUSAGE_CHILDREN)
- *rusage_in = myself->rusage_children;
- else
- {
- set_errno (EINVAL);
- res = -1;
- }
-
- syscall_printf ("%R = getrusage(%d, %p)", res, intwho, rusage_in);
- return res;
-}
-
-extern "C" int
-getrlimit (int resource, struct rlimit *rlp)
-{
- MEMORY_BASIC_INFORMATION m;
-
- __try
- {
- rlp->rlim_cur = RLIM_INFINITY;
- rlp->rlim_max = RLIM_INFINITY;
-
- switch (resource)
- {
- case RLIMIT_CPU:
- case RLIMIT_FSIZE:
- case RLIMIT_DATA:
- case RLIMIT_AS:
- break;
- case RLIMIT_STACK:
- if (!VirtualQuery ((LPCVOID) &m, &m, sizeof m))
- debug_printf ("couldn't get stack info, returning def.values. %E");
- else
- {
- rlp->rlim_cur = (rlim_t) &m - (rlim_t) m.AllocationBase;
- rlp->rlim_max = (rlim_t) m.BaseAddress + m.RegionSize
- - (rlim_t) m.AllocationBase;
- }
- break;
- case RLIMIT_NOFILE:
- rlp->rlim_cur = getdtablesize ();
- if (rlp->rlim_cur < OPEN_MAX)
- rlp->rlim_cur = OPEN_MAX;
- rlp->rlim_max = OPEN_MAX_MAX;
- break;
- case RLIMIT_CORE:
- rlp->rlim_cur = cygheap->rlim_core;
- break;
- default:
- set_errno (EINVAL);
- __leave;
- }
- return 0;
- }
- __except (EFAULT) {}
- __endtry
- return -1;
-}
-
-extern "C" int
-setrlimit (int resource, const struct rlimit *rlp)
-{
- struct rlimit oldlimits;
-
- /* Check if the request is to actually change the resource settings.
- If it does not result in a change, take no action and do not fail. */
- if (getrlimit (resource, &oldlimits) < 0)
- return -1;
-
- __try
- {
- if (oldlimits.rlim_cur == rlp->rlim_cur &&
- oldlimits.rlim_max == rlp->rlim_max)
- /* No change in resource requirements, succeed immediately */
- return 0;
-
- if (rlp->rlim_cur > rlp->rlim_max)
- {
- set_errno (EINVAL);
- __leave;
- }
-
- switch (resource)
- {
- case RLIMIT_CORE:
- cygheap->rlim_core = rlp->rlim_cur;
- break;
- case RLIMIT_NOFILE:
- if (rlp->rlim_cur != RLIM_INFINITY)
- return setdtablesize (rlp->rlim_cur);
- break;
- default:
- set_errno (EINVAL);
- __leave;
- }
- return 0;
- }
- __except (EFAULT)
- __endtry
- return -1;
-}
diff --git a/winsup/cygwin/scandir.cc b/winsup/cygwin/scandir.cc
deleted file mode 100644
index 84a6b214b..000000000
--- a/winsup/cygwin/scandir.cc
+++ /dev/null
@@ -1,92 +0,0 @@
-/* scandir.cc
-
- Copyright 1998, 1999, 2000, 2001, 2003, 2005, 2014 Red Hat, Inc.
-
- Written by Corinna Vinschen <corinna.vinschen@cityweb.de>
-
- This file is part of Cygwin.
-
- This software is a copyrighted work licensed under the terms of the
- Cygwin license. Please consult the file "CYGWIN_LICENSE" for
- details. */
-
-#include "winsup.h"
-#include <dirent.h>
-#include <stdlib.h>
-#include "cygerrno.h"
-
-extern "C" int
-alphasort (const struct dirent **a, const struct dirent **b)
-{
- return strcoll ((*a)->d_name, (*b)->d_name);
-}
-
-extern "C" int
-scandir (const char *dir,
- struct dirent ***namelist,
- int (*select) (const struct dirent *),
- int (*compar) (const struct dirent **, const struct dirent **))
-{
- DIR *dirp;
- struct dirent *ent, *etmp, **nl = NULL, **ntmp;
- int count = 0;
- int allocated = 0;
- int err = 0;
-
- if (!(dirp = opendir (dir)))
- return -1;
-
- if (!compar)
- compar = alphasort;
-
- while ((ent = readdir (dirp)))
- {
- if (!select || select (ent))
- {
- if (count == allocated)
- {
-
- if (allocated == 0)
- allocated = 10;
- else
- allocated *= 2;
-
- ntmp = (struct dirent **) realloc (nl, allocated * sizeof *nl);
- if (!ntmp)
- {
- err = ENOMEM;
- break;
- }
- nl = ntmp;
- }
-
- if (!(etmp = (struct dirent *) malloc (sizeof *ent)))
- {
- err = ENOMEM;
- break;
- }
- *etmp = *ent;
- nl[count++] = etmp;
- }
- }
-
- if (err != 0)
- {
- closedir (dirp);
- if (nl)
- {
- while (count > 0)
- free (nl[--count]);
- free (nl);
- }
- /* Ignore errors from closedir() and what not else. */
- set_errno (err);
- return -1;
- }
-
- closedir (dirp);
-
- qsort (nl, count, sizeof *nl, (int (*)(const void *, const void *)) compar);
- *namelist = nl;
- return count;
-}
diff --git a/winsup/cygwin/sched.cc b/winsup/cygwin/sched.cc
deleted file mode 100644
index b39400d02..000000000
--- a/winsup/cygwin/sched.cc
+++ /dev/null
@@ -1,414 +0,0 @@
-/* sched.cc: scheduler interface for Cygwin
-
- Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2010, 2011, 2012,
- 2013 Red Hat, Inc.
-
- Written by Robert Collins <rbtcollins@hotmail.com>
-
- This file is part of Cygwin.
-
- This software is a copyrighted work licensed under the terms of the
- Cygwin license. Please consult the file "CYGWIN_LICENSE" for
- details. */
-
-#include "winsup.h"
-#include "miscfuncs.h"
-#include "cygerrno.h"
-#include "pinfo.h"
-/* for getpid */
-#include <unistd.h>
-#include "registry.h"
-
-/* Win32 priority to UNIX priority Mapping.
-
- For now, I'm just following the spec: any range of priorities is ok.
- There are probably many many issues with this...
-
- FIXME: We don't support pre-Windows 2000 so we should fix the priority
- computation. Here's the description for the current code:
-
- We don't want process's going realtime. Well, they probably could, but
- the issues with avoiding the priority values 17-22 and 27-30 (not
- supported before win2k) make that inefficient.
-
- However to complicate things most unixes use lower is better priorities.
-
- So we map -14 to 15, and 15 to 1 via (16- ((n+16) >> 1)). We then map 1
- to 15 to various process class and thread priority combinations. Then we
- need to look at the threads process priority. As win95, 98 and NT 4
- don't support opening threads cross-process (unless a thread HANDLE is
- passed around) for now, we'll just use the priority class.
-
- The code and logic are present to calculate the priority for thread, if a
- thread handle can be obtained. Alternatively, if the symbols wouldn't be
- resolved until they are used we could support this.
-
- Lastly, because we can't assume that the pid we're given are Windows pids,
- we can't alter non-cygwin started programs. */
-
-extern "C"
-{
-
-/* max priority for policy */
-int
-sched_get_priority_max (int policy)
-{
- if (policy < 1 || policy > 3)
- {
- set_errno (EINVAL);
- return -1;
- }
- return -14;
-}
-
-/* min priority for policy */
-int
-sched_get_priority_min (int policy)
-{
- if (policy < 1 || policy > 3)
- {
- set_errno (EINVAL);
- return -1;
- }
- return 15;
-}
-
-/* Check a scheduler parameter struct for valid settings */
-int
-valid_sched_parameters (const struct sched_param *param)
-{
- if (param->sched_priority < -14 || param->sched_priority > 15)
- {
- return 0;
- }
- return -1;
-
-}
-
-/* get sched params for process
-
- Note, I'm never returning EPERM,
- Always ESRCH. This is by design (If cygwin ever looks at paranoid security
- Walking the pid values is a known hole in some os's)
-*/
-int
-sched_getparam (pid_t pid, struct sched_param *param)
-{
- pid_t localpid;
- int winpri;
- if (!param || pid < 0)
- {
- set_errno (EINVAL);
- return -1;
- }
-
- localpid = pid ? pid : getpid ();
-
- DWORD Class;
- int ThreadPriority;
- HANDLE process;
- pinfo p (localpid);
-
- /* get the class */
-
- if (!p)
- {
- set_errno (ESRCH);
- return -1;
- }
- process = OpenProcess (PROCESS_QUERY_INFORMATION, FALSE, p->dwProcessId);
- if (!process)
- {
- set_errno (ESRCH);
- return -1;
- }
- Class = GetPriorityClass (process);
- CloseHandle (process);
- if (!Class)
- {
- set_errno (ESRCH);
- return -1;
- }
- ThreadPriority = THREAD_PRIORITY_NORMAL;
-
- /* calculate the unix priority. */
-
- switch (Class)
- {
- case IDLE_PRIORITY_CLASS:
- switch (ThreadPriority)
- {
- case THREAD_PRIORITY_IDLE:
- winpri = 1;
- break;
- case THREAD_PRIORITY_LOWEST:
- winpri = 2;
- break;
- case THREAD_PRIORITY_BELOW_NORMAL:
- winpri = 3;
- break;
- case THREAD_PRIORITY_NORMAL:
- winpri = 4;
- break;
- case THREAD_PRIORITY_ABOVE_NORMAL:
- winpri = 5;
- break;
- case THREAD_PRIORITY_HIGHEST:
- default:
- winpri = 6;
- break;
- }
- break;
- case HIGH_PRIORITY_CLASS:
- switch (ThreadPriority)
- {
- case THREAD_PRIORITY_IDLE:
- winpri = 1;
- break;
- case THREAD_PRIORITY_LOWEST:
- winpri = 11;
- break;
- case THREAD_PRIORITY_BELOW_NORMAL:
- winpri = 12;
- break;
- case THREAD_PRIORITY_NORMAL:
- winpri = 13;
- break;
- case THREAD_PRIORITY_ABOVE_NORMAL:
- winpri = 14;
- break;
- case THREAD_PRIORITY_HIGHEST:
- default:
- winpri = 15;
- break;
- }
- break;
- case NORMAL_PRIORITY_CLASS:
- default:
- switch (ThreadPriority)
- {
- case THREAD_PRIORITY_IDLE:
- winpri = 1;
- break;
- case THREAD_PRIORITY_LOWEST:
- winpri = 7;
- break;
- case THREAD_PRIORITY_BELOW_NORMAL:
- winpri = 8;
- break;
- case THREAD_PRIORITY_NORMAL:
- winpri = 9;
- break;
- case THREAD_PRIORITY_ABOVE_NORMAL:
- winpri = 10;
- break;
- case THREAD_PRIORITY_HIGHEST:
- default:
- winpri = 11;
- break;
- }
- break;
- }
-
- /* reverse out winpri = (16- ((unixpri+16) >> 1)) */
- /*
- winpri-16 = - (unixpri +16 ) >> 1
-
- -(winpri-16) = unixpri +16 >> 1
- (-(winpri-16)) << 1 = unixpri+16
- ((-(winpri - 16)) << 1) - 16 = unixpri
- */
-
- param->sched_priority = ((-(winpri - 16)) << 1) - 16;
-
- return 0;
-}
-
-/* get the scheduler for pid
-
- All process's on WIN32 run with SCHED_FIFO.
- So we just give an answer.
- (WIN32 uses a multi queue FIFO).
-*/
-int
-sched_getscheduler (pid_t pid)
-{
- if (pid < 0)
- return ESRCH;
- else
- return SCHED_FIFO;
-}
-
-/* get the time quantum for pid */
-int
-sched_rr_get_interval (pid_t pid, struct timespec *interval)
-{
- static const char quantable[2][2][3] =
- {{{12, 24, 36}, { 6, 12, 18}},
- {{36, 36, 36}, {18, 18, 18}}};
- /* FIXME: Clocktickinterval can be 15 ms for multi-processor system. */
- static const int clocktickinterval = 10;
- static const int quantapertick = 3;
-
- HWND forwin;
- DWORD forprocid;
- DWORD vfindex, slindex, qindex, prisep;
- long nsec;
-
- forwin = GetForegroundWindow ();
- if (!forwin)
- GetWindowThreadProcessId (forwin, &forprocid);
- else
- forprocid = 0;
-
- reg_key reg (HKEY_LOCAL_MACHINE, KEY_READ, L"SYSTEM", L"CurrentControlSet",
- L"Control", L"PriorityControl", NULL);
- if (reg.error ())
- {
- set_errno (ESRCH);
- return -1;
- }
- prisep = reg.get_dword (L"Win32PrioritySeparation", 2);
- pinfo pi (pid ? pid : myself->pid);
- if (!pi)
- {
- set_errno (ESRCH);
- return -1;
- }
-
- if (pi->dwProcessId == forprocid)
- {
- qindex = prisep & 3;
- qindex = qindex == 3 ? 2 : qindex;
- }
- else
- qindex = 0;
- vfindex = ((prisep >> 2) & 3) % 3;
- if (vfindex == 0)
- vfindex = wincap.is_server () || (prisep & 3) == 0 ? 1 : 0;
- else
- vfindex -= 1;
- slindex = ((prisep >> 4) & 3) % 3;
- if (slindex == 0)
- slindex = wincap.is_server () ? 1 : 0;
- else
- slindex -= 1;
-
- nsec = quantable[vfindex][slindex][qindex] / quantapertick
- * clocktickinterval * 1000000;
- interval->tv_sec = nsec / 1000000000;
- interval->tv_nsec = nsec % 1000000000;
-
- return 0;
-}
-
-/* set the scheduling parameters */
-int
-sched_setparam (pid_t pid, const struct sched_param *param)
-{
- pid_t localpid;
- int winpri;
- DWORD Class;
- HANDLE process;
-
- if (!param || pid < 0)
- {
- set_errno (EINVAL);
- return -1;
- }
-
- if (!valid_sched_parameters (param))
- {
- set_errno (EINVAL);
- return -1;
- }
-
- /* winpri = (16- ((unixpri+16) >> 1)) */
- winpri = 16 - ((param->sched_priority + 16) >> 1);
-
- /* calculate our desired priority class and thread priority */
-
- if (winpri < 7)
- Class = IDLE_PRIORITY_CLASS;
- else if (winpri > 10)
- Class = HIGH_PRIORITY_CLASS;
- else
- Class = NORMAL_PRIORITY_CLASS;
-
- localpid = pid ? pid : getpid ();
-
- pinfo p (localpid);
-
- /* set the class */
-
- if (!p)
- {
- set_errno (ESRCH);
- return -1;
- }
- process =
- OpenProcess (PROCESS_SET_INFORMATION, FALSE, (DWORD) p->dwProcessId);
- if (!process)
- {
- set_errno (2); //ESRCH);
- return -1;
- }
- if (!SetPriorityClass (process, Class))
- {
- CloseHandle (process);
- set_errno (EPERM);
- return -1;
- }
- CloseHandle (process);
-
- return 0;
-}
-
-/* we map -14 to 15, and 15 to 1 via (16- ((n+16) >> 1)). This lines up with
- the allowed values we return elsewhere in the sched* functions. We then
- map in groups of three to allowed thread priority's. The reason for dropping
- accuracy while still returning a wide range of values is to allow more
- flexible code in the future. */
-int
-sched_set_thread_priority (HANDLE thread, int priority)
-{
- int real_pri;
- real_pri = 16 - ((priority + 16) >> 1);
- if (real_pri <1 || real_pri > 15)
- return EINVAL;
-
- if (real_pri < 4)
- real_pri = THREAD_PRIORITY_LOWEST;
- else if (real_pri < 7)
- real_pri = THREAD_PRIORITY_BELOW_NORMAL;
- else if (real_pri < 10)
- real_pri = THREAD_PRIORITY_NORMAL;
- else if (real_pri < 13)
- real_pri = THREAD_PRIORITY_ABOVE_NORMAL;
- else
- real_pri = THREAD_PRIORITY_HIGHEST;
-
- if (!SetThreadPriority (thread, real_pri))
- /* invalid handle, no access are the only expected errors. */
- return EPERM;
- return 0;
-}
-
-/* set the scheduler */
-int
-sched_setscheduler (pid_t pid, int policy,
- const struct sched_param *param)
-{
- /* on win32, you can't change the scheduler. Doh! */
- set_errno (ENOSYS);
- return -1;
-}
-
-/* yield the cpu */
-int
-sched_yield ()
-{
- SwitchToThread ();
- return 0;
-}
-}
diff --git a/winsup/cygwin/sec_acl.cc b/winsup/cygwin/sec_acl.cc
deleted file mode 100644
index 51f1c9964..000000000
--- a/winsup/cygwin/sec_acl.cc
+++ /dev/null
@@ -1,1163 +0,0 @@
-/* sec_acl.cc: Sun compatible ACL functions.
-
- Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
- 2011, 2012, 2014 Red Hat, Inc.
-
- Written by Corinna Vinschen <corinna@vinschen.de>
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include <stdlib.h>
-#include <sys/acl.h>
-#include <ctype.h>
-#include "cygerrno.h"
-#include "security.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "ntdll.h"
-#include "tls_pbuf.h"
-
-static int
-searchace (aclent_t *aclp, int nentries, int type, uid_t id = ILLEGAL_UID)
-{
- int i;
-
- for (i = 0; i < nentries; ++i)
- if ((aclp[i].a_type == type && (id == ILLEGAL_UID || aclp[i].a_id == id))
- || !aclp[i].a_type)
- return i;
- return -1;
-}
-
-/* This function *requires* an acl list sorted with aclsort{32}. */
-int
-setacl (HANDLE handle, path_conv &pc, int nentries, aclent_t *aclbufp,
- bool &writable)
-{
- security_descriptor sd_ret;
- tmp_pathbuf tp;
-
- if (get_file_sd (handle, pc, sd_ret, false))
- return -1;
-
- NTSTATUS status;
- PACL acl;
- BOOLEAN acl_exists, dummy;
-
- /* Get owner SID. */
- PSID owner_sid;
- status = RtlGetOwnerSecurityDescriptor (sd_ret, &owner_sid, &dummy);
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- return -1;
- }
- cygsid owner (owner_sid);
-
- /* Get group SID. */
- PSID group_sid;
- status = RtlGetGroupSecurityDescriptor (sd_ret, &group_sid, &dummy);
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- return -1;
- }
- cygsid group (group_sid);
-
- /* Search for NULL ACE and store state of SUID, SGID and VTX bits. */
- DWORD null_mask = 0;
- if (NT_SUCCESS (RtlGetDaclSecurityDescriptor (sd_ret, &acl_exists, &acl,
- &dummy)))
- for (USHORT i = 0; i < acl->AceCount; ++i)
- {
- ACCESS_ALLOWED_ACE *ace;
- if (NT_SUCCESS (RtlGetAce (acl, i, (PVOID *) &ace)))
- {
- cygpsid ace_sid ((PSID) &ace->SidStart);
- if (ace_sid == well_known_null_sid)
- {
- null_mask = ace->Mask;
- break;
- }
- }
- }
-
- /* Initialize local security descriptor. */
- SECURITY_DESCRIPTOR sd;
- RtlCreateSecurityDescriptor (&sd, SECURITY_DESCRIPTOR_REVISION);
-
- /* As in alloc_sd, set SE_DACL_PROTECTED to prevent the DACL from being
- modified by inheritable ACEs. */
- RtlSetControlSecurityDescriptor (&sd, SE_DACL_PROTECTED, SE_DACL_PROTECTED);
-
- status = RtlSetOwnerSecurityDescriptor (&sd, owner, FALSE);
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- return -1;
- }
- status = RtlSetGroupSecurityDescriptor (&sd, group, FALSE);
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- return -1;
- }
-
- /* Fill access control list. */
- acl = (PACL) tp.w_get ();
- size_t acl_len = sizeof (ACL);
- int ace_off = 0;
-
- cygsid sid;
- struct passwd *pw;
- struct group *gr;
- int pos;
- cyg_ldap cldap;
-
- RtlCreateAcl (acl, ACL_MAXIMUM_SIZE, ACL_REVISION);
-
- writable = false;
-
- /* Pre-compute owner, group, and other permissions to allow creating
- matching deny ACEs as in alloc_sd. */
- DWORD owner_allow = 0, group_allow = 0, other_allow = 0;
- PDWORD allow;
- for (int i = 0; i < nentries; ++i)
- {
- switch (aclbufp[i].a_type)
- {
- case USER_OBJ:
- allow = &owner_allow;
- *allow = STANDARD_RIGHTS_ALL;
- break;
- case GROUP_OBJ:
- allow = &group_allow;
- break;
- case OTHER_OBJ:
- allow = &other_allow;
- break;
- default:
- continue;
- }
- *allow |= STANDARD_RIGHTS_READ | SYNCHRONIZE
- | (pc.fs_is_samba () ? 0 : FILE_READ_ATTRIBUTES);
- if (aclbufp[i].a_perm & S_IROTH)
- *allow |= FILE_GENERIC_READ;
- if (aclbufp[i].a_perm & S_IWOTH)
- {
- *allow |= FILE_GENERIC_WRITE;
- writable = true;
- }
- if (aclbufp[i].a_perm & S_IXOTH)
- *allow |= FILE_GENERIC_EXECUTE & ~FILE_READ_ATTRIBUTES;
- /* Keep S_ISVTX rule in sync with alloc_sd. */
- if (pc.isdir ()
- && (aclbufp[i].a_perm & (S_IWOTH | S_IXOTH)) == (S_IWOTH | S_IXOTH)
- && (aclbufp[i].a_type == USER_OBJ
- || !(null_mask & FILE_READ_DATA)))
- *allow |= FILE_DELETE_CHILD;
- aclbufp[i].a_type = 0;
- }
- bool isownergroup = (owner_sid == group_sid);
- DWORD owner_deny = ~owner_allow & (group_allow | other_allow);
- owner_deny &= ~(STANDARD_RIGHTS_READ
- | FILE_READ_ATTRIBUTES | FILE_WRITE_ATTRIBUTES);
- DWORD group_deny = ~group_allow & other_allow;
- group_deny &= ~(STANDARD_RIGHTS_READ | FILE_READ_ATTRIBUTES);
-
- /* Set deny ACE for owner. */
- if (owner_deny
- && !add_access_denied_ace (acl, ace_off++, owner_deny,
- owner_sid, acl_len, NO_INHERITANCE))
- return -1;
- /* Set deny ACE for group here to respect the canonical order,
- if this does not impact owner */
- if (group_deny && !(group_deny & owner_allow) && !isownergroup
- && !add_access_denied_ace (acl, ace_off++, group_deny,
- group_sid, acl_len, NO_INHERITANCE))
- return -1;
- /* Set allow ACE for owner. */
- if (!add_access_allowed_ace (acl, ace_off++, owner_allow,
- owner_sid, acl_len, NO_INHERITANCE))
- return -1;
- /* Set deny ACE for group, if still needed. */
- if (group_deny & owner_allow && !isownergroup
- && !add_access_denied_ace (acl, ace_off++, group_deny,
- group_sid, acl_len, NO_INHERITANCE))
- return -1;
- /* Set allow ACE for group. */
- if (!isownergroup
- && !add_access_allowed_ace (acl, ace_off++, group_allow,
- group_sid, acl_len, NO_INHERITANCE))
- return -1;
- /* Set allow ACE for everyone. */
- if (!add_access_allowed_ace (acl, ace_off++, other_allow,
- well_known_world_sid, acl_len, NO_INHERITANCE))
- return -1;
- /* If a NULL ACE exists, copy it verbatim. */
- if (null_mask)
- if (!add_access_allowed_ace (acl, ace_off++, null_mask, well_known_null_sid,
- acl_len, NO_INHERITANCE))
- return -1;
- for (int i = 0; i < nentries; ++i)
- {
- DWORD allow;
- /* Skip invalidated entries. */
- if (!aclbufp[i].a_type)
- continue;
-
- allow = STANDARD_RIGHTS_READ
- | (pc.fs_is_samba () ? 0 : FILE_READ_ATTRIBUTES);
- if (aclbufp[i].a_perm & S_IROTH)
- allow |= FILE_GENERIC_READ;
- if (aclbufp[i].a_perm & S_IWOTH)
- {
- allow |= FILE_GENERIC_WRITE;
- writable = true;
- }
- if (aclbufp[i].a_perm & S_IXOTH)
- allow |= FILE_GENERIC_EXECUTE & ~FILE_READ_ATTRIBUTES;
- /* Keep S_ISVTX rule in sync with alloc_sd. */
- if (pc.isdir ()
- && (aclbufp[i].a_perm & (S_IWOTH | S_IXOTH)) == (S_IWOTH | S_IXOTH)
- && !(null_mask & FILE_READ_DATA))
- allow |= FILE_DELETE_CHILD;
- /* Set inherit property. */
- DWORD inheritance = (aclbufp[i].a_type & ACL_DEFAULT)
- ? (CONTAINER_INHERIT_ACE | OBJECT_INHERIT_ACE
- | INHERIT_ONLY_ACE)
- : NO_INHERITANCE;
- /*
- * If a specific acl contains a corresponding default entry with
- * identical permissions, only one Windows ACE with proper
- * inheritance bits is created.
- */
- if (!(aclbufp[i].a_type & ACL_DEFAULT)
- && aclbufp[i].a_type & (USER|GROUP)
- && (pos = searchace (aclbufp + i + 1, nentries - i - 1,
- aclbufp[i].a_type | ACL_DEFAULT,
- (aclbufp[i].a_type & (USER|GROUP))
- ? aclbufp[i].a_id : ILLEGAL_UID)) >= 0
- && aclbufp[i].a_perm == aclbufp[i + 1 + pos].a_perm)
- {
- inheritance = CONTAINER_INHERIT_ACE | OBJECT_INHERIT_ACE;
- /* invalidate the corresponding default entry. */
- aclbufp[i + 1 + pos].a_type = 0;
- }
- switch (aclbufp[i].a_type)
- {
- case DEF_USER_OBJ:
- if (!add_access_allowed_ace (acl, ace_off++, allow,
- well_known_creator_owner_sid, acl_len, inheritance))
- return -1;
- break;
- case USER:
- case DEF_USER:
- if (!(pw = internal_getpwuid (aclbufp[i].a_id, &cldap))
- || !sid.getfrompw (pw))
- {
- set_errno (EINVAL);
- return -1;
- }
- if (!add_access_allowed_ace (acl, ace_off++, allow,
- sid, acl_len, inheritance))
- return -1;
- break;
- case DEF_GROUP_OBJ:
- if (!add_access_allowed_ace (acl, ace_off++, allow,
- well_known_creator_group_sid, acl_len, inheritance))
- return -1;
- break;
- case GROUP:
- case DEF_GROUP:
- if (!(gr = internal_getgrgid (aclbufp[i].a_id, &cldap))
- || !sid.getfromgr (gr))
- {
- set_errno (EINVAL);
- return -1;
- }
- if (!add_access_allowed_ace (acl, ace_off++, allow,
- sid, acl_len, inheritance))
- return -1;
- break;
- case DEF_OTHER_OBJ:
- if (!add_access_allowed_ace (acl, ace_off++, allow,
- well_known_world_sid,
- acl_len, inheritance))
- return -1;
- }
- }
- /* Set AclSize to computed value. */
- acl->AclSize = acl_len;
- debug_printf ("ACL-Size: %u", acl_len);
- /* Create DACL for local security descriptor. */
- status = RtlSetDaclSecurityDescriptor (&sd, TRUE, acl, FALSE);
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- return -1;
- }
- /* Make self relative security descriptor in sd_ret. */
- DWORD sd_size = 0;
- RtlAbsoluteToSelfRelativeSD (&sd, sd_ret, &sd_size);
- if (sd_size <= 0)
- {
- __seterrno ();
- return -1;
- }
- if (!sd_ret.realloc (sd_size))
- {
- set_errno (ENOMEM);
- return -1;
- }
- status = RtlAbsoluteToSelfRelativeSD (&sd, sd_ret, &sd_size);
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- return -1;
- }
- debug_printf ("Created SD-Size: %u", sd_ret.size ());
- return set_file_sd (handle, pc, sd_ret, false);
-}
-
-/* Temporary access denied bits */
-#define DENY_R 040000
-#define DENY_W 020000
-#define DENY_X 010000
-
-static void
-getace (aclent_t &acl, int type, int id, DWORD win_ace_mask,
- DWORD win_ace_type)
-{
- acl.a_type = type;
- acl.a_id = id;
-
- if ((win_ace_mask & FILE_READ_BITS) && !(acl.a_perm & (S_IROTH | DENY_R)))
- {
- if (win_ace_type == ACCESS_ALLOWED_ACE_TYPE)
- acl.a_perm |= S_IROTH;
- else if (win_ace_type == ACCESS_DENIED_ACE_TYPE)
- acl.a_perm |= DENY_R;
- }
-
- if ((win_ace_mask & FILE_WRITE_BITS) && !(acl.a_perm & (S_IWOTH | DENY_W)))
- {
- if (win_ace_type == ACCESS_ALLOWED_ACE_TYPE)
- acl.a_perm |= S_IWOTH;
- else if (win_ace_type == ACCESS_DENIED_ACE_TYPE)
- acl.a_perm |= DENY_W;
- }
-
- if ((win_ace_mask & FILE_EXEC_BITS) && !(acl.a_perm & (S_IXOTH | DENY_X)))
- {
- if (win_ace_type == ACCESS_ALLOWED_ACE_TYPE)
- acl.a_perm |= S_IXOTH;
- else if (win_ace_type == ACCESS_DENIED_ACE_TYPE)
- acl.a_perm |= DENY_X;
- }
-}
-
-int
-getacl (HANDLE handle, path_conv &pc, int nentries, aclent_t *aclbufp)
-{
- security_descriptor sd;
-
- if (get_file_sd (handle, pc, sd, false))
- return -1;
-
- cygpsid owner_sid;
- cygpsid group_sid;
- NTSTATUS status;
- BOOLEAN dummy;
- uid_t uid;
- gid_t gid;
- cyg_ldap cldap;
-
- status = RtlGetOwnerSecurityDescriptor (sd, (PSID *) &owner_sid, &dummy);
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- return -1;
- }
- uid = owner_sid.get_uid (&cldap);
-
- status = RtlGetGroupSecurityDescriptor (sd, (PSID *) &group_sid, &dummy);
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- return -1;
- }
- gid = group_sid.get_gid (&cldap);
-
- aclent_t lacl[MAX_ACL_ENTRIES];
- memset (&lacl, 0, MAX_ACL_ENTRIES * sizeof (aclent_t));
- lacl[0].a_type = USER_OBJ;
- lacl[0].a_id = uid;
- lacl[1].a_type = GROUP_OBJ;
- lacl[1].a_id = gid;
- lacl[2].a_type = OTHER_OBJ;
- lacl[2].a_id = ILLEGAL_GID;
-
- PACL acl;
- BOOLEAN acl_exists;
-
- status = RtlGetDaclSecurityDescriptor (sd, &acl_exists, &acl, &dummy);
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- return -1;
- }
-
- int pos, i, types_def = 0;
- int pgrp_pos = 1, def_pgrp_pos = -1;
- mode_t class_perm = 0, def_class_perm = 0;
-
- if (!acl_exists || !acl)
- for (pos = 0; pos < 3; ++pos)
- lacl[pos].a_perm = S_IROTH | S_IWOTH | S_IXOTH;
- else
- {
- for (i = 0; i < acl->AceCount; ++i)
- {
- ACCESS_ALLOWED_ACE *ace;
-
- if (!NT_SUCCESS (RtlGetAce (acl, i, (PVOID *) &ace)))
- continue;
-
- cygpsid ace_sid ((PSID) &ace->SidStart);
- int id;
- int type = 0;
-
- if (ace_sid == well_known_null_sid)
- {
- /* Simply ignore. */
- continue;
- }
- if (ace_sid == well_known_world_sid)
- {
- type = OTHER_OBJ;
- id = ILLEGAL_GID;
- }
- else if (ace_sid == group_sid)
- {
- type = GROUP_OBJ;
- id = gid;
- }
- else if (ace_sid == owner_sid)
- {
- type = USER_OBJ;
- id = uid;
- }
- else if (ace_sid == well_known_creator_group_sid)
- {
- type = DEF_GROUP_OBJ;
- types_def |= type;
- id = ILLEGAL_GID;
- }
- else if (ace_sid == well_known_creator_owner_sid)
- {
- type = DEF_USER_OBJ;
- types_def |= type;
- id = ILLEGAL_GID;
- }
- else
- id = ace_sid.get_id (TRUE, &type, &cldap);
-
- if (!type)
- continue;
- if (!(ace->Header.AceFlags & INHERIT_ONLY_ACE || type & ACL_DEFAULT))
- {
- if ((pos = searchace (lacl, MAX_ACL_ENTRIES, type, id)) >= 0)
- {
- getace (lacl[pos], type, id, ace->Mask, ace->Header.AceType);
- /* Fix up CLASS_OBJ value. */
- if (type == USER || type == GROUP)
- class_perm |= lacl[pos].a_perm;
- }
- }
- if ((ace->Header.AceFlags
- & (CONTAINER_INHERIT_ACE | OBJECT_INHERIT_ACE))
- && pc.isdir ())
- {
- if (type == USER_OBJ)
- type = USER;
- else if (type == GROUP_OBJ)
- type = GROUP;
- type |= ACL_DEFAULT;
- types_def |= type;
- if ((pos = searchace (lacl, MAX_ACL_ENTRIES, type, id)) >= 0)
- {
- getace (lacl[pos], type, id, ace->Mask, ace->Header.AceType);
- /* Fix up DEF_CLASS_OBJ value. */
- if (type == DEF_USER || type == DEF_GROUP)
- def_class_perm |= lacl[pos].a_perm;
- /* And note the position of the DEF_GROUP_OBJ entry. */
- else if (type == DEF_GROUP_OBJ)
- def_pgrp_pos = pos;
- }
- }
- }
- /* If secondary user and group entries exist in the ACL, fake a matching
- CLASS_OBJ entry. The CLASS_OBJ permissions are the or'ed permissions
- of the primary group permissions and all secondary user and group
- permissions. */
- if (class_perm && (pos = searchace (lacl, MAX_ACL_ENTRIES, 0)) >= 0)
- {
- lacl[pos].a_type = CLASS_OBJ;
- lacl[pos].a_id = ILLEGAL_GID;
- lacl[pos].a_perm = class_perm | lacl[pgrp_pos].a_perm;
- }
- /* Ensure that the default acl contains at least
- DEF_(USER|GROUP|OTHER)_OBJ entries. */
- if (types_def && (pos = searchace (lacl, MAX_ACL_ENTRIES, 0)) >= 0)
- {
- if (!(types_def & USER_OBJ))
- {
- lacl[pos].a_type = DEF_USER_OBJ;
- lacl[pos].a_id = uid;
- lacl[pos].a_perm = lacl[0].a_perm;
- pos++;
- }
- if (!(types_def & GROUP_OBJ) && pos < MAX_ACL_ENTRIES)
- {
- lacl[pos].a_type = DEF_GROUP_OBJ;
- lacl[pos].a_id = gid;
- lacl[pos].a_perm = lacl[1].a_perm;
- /* Note the position of the DEF_GROUP_OBJ entry. */
- def_pgrp_pos = pos;
- pos++;
- }
- if (!(types_def & OTHER_OBJ) && pos < MAX_ACL_ENTRIES)
- {
- lacl[pos].a_type = DEF_OTHER_OBJ;
- lacl[pos].a_id = ILLEGAL_GID;
- lacl[pos].a_perm = lacl[2].a_perm;
- pos++;
- }
- }
- /* If secondary user default and group default entries exist in the ACL,
- fake a matching DEF_CLASS_OBJ entry. The DEF_CLASS_OBJ permissions are
- the or'ed permissions of the primary group default permissions and all
- secondary user and group default permissions. */
- if (def_class_perm && (pos = searchace (lacl, MAX_ACL_ENTRIES, 0)) >= 0)
- {
- lacl[pos].a_type = DEF_CLASS_OBJ;
- lacl[pos].a_id = ILLEGAL_GID;
- lacl[pos].a_perm = def_class_perm;
- if (def_pgrp_pos >= 0)
- lacl[pos].a_perm |= lacl[def_pgrp_pos].a_perm;
- }
- }
- if ((pos = searchace (lacl, MAX_ACL_ENTRIES, 0)) < 0)
- pos = MAX_ACL_ENTRIES;
- if (aclbufp) {
- if (owner_sid == group_sid)
- lacl[0].a_perm = lacl[1].a_perm;
- if (pos > nentries)
- {
- set_errno (ENOSPC);
- return -1;
- }
- memcpy (aclbufp, lacl, pos * sizeof (aclent_t));
- for (i = 0; i < pos; ++i)
- aclbufp[i].a_perm &= ~(DENY_R | DENY_W | DENY_X);
- aclsort32 (pos, 0, aclbufp);
- }
- syscall_printf ("%R = getacl(%S)", pos, pc.get_nt_native_path ());
- return pos;
-}
-
-extern "C" int
-acl32 (const char *path, int cmd, int nentries, aclent_t *aclbufp)
-{
- int res = -1;
-
- fhandler_base *fh = build_fh_name (path, PC_SYM_FOLLOW | PC_KEEP_HANDLE,
- stat_suffixes);
- if (!fh || !fh->exists ())
- set_errno (ENOENT);
- else if (fh->error ())
- {
- debug_printf ("got %d error from build_fh_name", fh->error ());
- set_errno (fh->error ());
- }
- else
- res = fh->facl (cmd, nentries, aclbufp);
-
- delete fh;
- syscall_printf ("%R = acl(%s)", res, path);
- return res;
-}
-
-#ifndef __x86_64__
-extern "C" int
-lacl32 (const char *path, int cmd, int nentries, aclent_t *aclbufp)
-{
- /* This call was an accident. Make it absolutely clear. */
- set_errno (ENOSYS);
- return -1;
-}
-#endif
-
-extern "C" int
-facl32 (int fd, int cmd, int nentries, aclent_t *aclbufp)
-{
- cygheap_fdget cfd (fd);
- if (cfd < 0)
- {
- syscall_printf ("-1 = facl (%d)", fd);
- return -1;
- }
- int res = cfd->facl (cmd, nentries, aclbufp);
- syscall_printf ("%R = facl(%s) )", res, cfd->get_name ());
- return res;
-}
-
-extern "C" int
-aclcheck32 (aclent_t *aclbufp, int nentries, int *which)
-{
- bool has_user_obj = false;
- bool has_group_obj = false;
- bool has_other_obj = false;
- bool has_class_obj = false;
- bool has_ug_objs __attribute__ ((unused)) = false;
- bool has_def_objs __attribute__ ((unused)) = false;
- bool has_def_user_obj __attribute__ ((unused)) = false;
- bool has_def_group_obj = false;
- bool has_def_other_obj = false;
- bool has_def_class_obj = false;
- bool has_def_ug_objs __attribute__ ((unused)) = false;
- int pos2;
-
- for (int pos = 0; pos < nentries; ++pos)
- switch (aclbufp[pos].a_type)
- {
- case USER_OBJ:
- if (has_user_obj)
- {
- if (which)
- *which = pos;
- return USER_ERROR;
- }
- has_user_obj = true;
- break;
- case GROUP_OBJ:
- if (has_group_obj)
- {
- if (which)
- *which = pos;
- return GRP_ERROR;
- }
- has_group_obj = true;
- break;
- case OTHER_OBJ:
- if (has_other_obj)
- {
- if (which)
- *which = pos;
- return OTHER_ERROR;
- }
- has_other_obj = true;
- break;
- case CLASS_OBJ:
- if (has_class_obj)
- {
- if (which)
- *which = pos;
- return CLASS_ERROR;
- }
- has_class_obj = true;
- break;
- case USER:
- case GROUP:
- if ((pos2 = searchace (aclbufp + pos + 1, nentries - pos - 1,
- aclbufp[pos].a_type, aclbufp[pos].a_id)) >= 0)
- {
- if (which)
- *which = pos2;
- return DUPLICATE_ERROR;
- }
- has_ug_objs = true;
- break;
- case DEF_USER_OBJ:
- if (has_def_user_obj)
- {
- if (which)
- *which = pos;
- return USER_ERROR;
- }
- has_def_objs = has_def_user_obj = true;
- break;
- case DEF_GROUP_OBJ:
- if (has_def_group_obj)
- {
- if (which)
- *which = pos;
- return GRP_ERROR;
- }
- has_def_objs = has_def_group_obj = true;
- break;
- case DEF_OTHER_OBJ:
- if (has_def_other_obj)
- {
- if (which)
- *which = pos;
- return OTHER_ERROR;
- }
- has_def_objs = has_def_other_obj = true;
- break;
- case DEF_CLASS_OBJ:
- if (has_def_class_obj)
- {
- if (which)
- *which = pos;
- return CLASS_ERROR;
- }
- has_def_objs = has_def_class_obj = true;
- break;
- case DEF_USER:
- case DEF_GROUP:
- if ((pos2 = searchace (aclbufp + pos + 1, nentries - pos - 1,
- aclbufp[pos].a_type, aclbufp[pos].a_id)) >= 0)
- {
- if (which)
- *which = pos2;
- return DUPLICATE_ERROR;
- }
- has_def_objs = has_def_ug_objs = true;
- break;
- default:
- return ENTRY_ERROR;
- }
- if (!has_user_obj
- || !has_group_obj
- || !has_other_obj
- || (has_def_objs
- && (!has_def_user_obj || !has_def_group_obj || !has_def_other_obj))
- || (has_ug_objs && !has_class_obj)
- || (has_def_ug_objs && !has_def_class_obj)
- )
- {
- if (which)
- *which = -1;
- return MISS_ERROR;
- }
- return 0;
-}
-
-static int
-acecmp (const void *a1, const void *a2)
-{
-#define ace(i) ((const aclent_t *) a##i)
- int ret = ace (1)->a_type - ace (2)->a_type;
- if (!ret)
- ret = ace (1)->a_id - ace (2)->a_id;
- return ret;
-#undef ace
-}
-
-extern "C" int
-aclsort32 (int nentries, int, aclent_t *aclbufp)
-{
- if (aclcheck32 (aclbufp, nentries, NULL))
- {
- set_errno (EINVAL);
- return -1;
- }
- if (!aclbufp || nentries < 1)
- {
- set_errno (EINVAL);
- return -1;
- }
- qsort ((void *) aclbufp, nentries, sizeof (aclent_t), acecmp);
- return 0;
-}
-
-extern "C" int
-acltomode32 (aclent_t *aclbufp, int nentries, mode_t *modep)
-{
- int pos;
-
- if (!aclbufp || nentries < 1 || !modep)
- {
- set_errno (EINVAL);
- return -1;
- }
- *modep = 0;
- if ((pos = searchace (aclbufp, nentries, USER_OBJ)) < 0
- || !aclbufp[pos].a_type)
- {
- set_errno (EINVAL);
- return -1;
- }
- *modep |= (aclbufp[pos].a_perm & S_IRWXO) << 6;
- if ((pos = searchace (aclbufp, nentries, GROUP_OBJ)) < 0
- || !aclbufp[pos].a_type)
- {
- set_errno (EINVAL);
- return -1;
- }
- *modep |= (aclbufp[pos].a_perm & S_IRWXO) << 3;
- int cpos;
- if ((cpos = searchace (aclbufp, nentries, CLASS_OBJ)) >= 0
- && aclbufp[cpos].a_type == CLASS_OBJ)
- *modep |= ((aclbufp[pos].a_perm & S_IRWXO) & aclbufp[cpos].a_perm) << 3;
- if ((pos = searchace (aclbufp, nentries, OTHER_OBJ)) < 0
- || !aclbufp[pos].a_type)
- {
- set_errno (EINVAL);
- return -1;
- }
- *modep |= aclbufp[pos].a_perm & S_IRWXO;
- return 0;
-}
-
-extern "C" int
-aclfrommode32 (aclent_t *aclbufp, int nentries, mode_t *modep)
-{
- int pos;
-
- if (!aclbufp || nentries < 1 || !modep)
- {
- set_errno (EINVAL);
- return -1;
- }
- if ((pos = searchace (aclbufp, nentries, USER_OBJ)) < 0
- || !aclbufp[pos].a_type)
- {
- set_errno (EINVAL);
- return -1;
- }
- aclbufp[pos].a_perm = (*modep & S_IRWXU) >> 6;
- if ((pos = searchace (aclbufp, nentries, GROUP_OBJ)) < 0
- || !aclbufp[pos].a_type)
- {
- set_errno (EINVAL);
- return -1;
- }
- aclbufp[pos].a_perm = (*modep & S_IRWXG) >> 3;
- if ((pos = searchace (aclbufp, nentries, CLASS_OBJ)) >= 0
- && aclbufp[pos].a_type == CLASS_OBJ)
- aclbufp[pos].a_perm = (*modep & S_IRWXG) >> 3;
- if ((pos = searchace (aclbufp, nentries, OTHER_OBJ)) < 0
- || !aclbufp[pos].a_type)
- {
- set_errno (EINVAL);
- return -1;
- }
- aclbufp[pos].a_perm = (*modep & S_IRWXO);
- return 0;
-}
-
-extern "C" int
-acltopbits32 (aclent_t *aclbufp, int nentries, mode_t *pbitsp)
-{
- return acltomode32 (aclbufp, nentries, pbitsp);
-}
-
-extern "C" int
-aclfrompbits32 (aclent_t *aclbufp, int nentries, mode_t *pbitsp)
-{
- return aclfrommode32 (aclbufp, nentries, pbitsp);
-}
-
-static char *
-permtostr (mode_t perm)
-{
- static char pbuf[4];
-
- pbuf[0] = (perm & S_IROTH) ? 'r' : '-';
- pbuf[1] = (perm & S_IWOTH) ? 'w' : '-';
- pbuf[2] = (perm & S_IXOTH) ? 'x' : '-';
- pbuf[3] = '\0';
- return pbuf;
-}
-
-extern "C" char *
-acltotext32 (aclent_t *aclbufp, int aclcnt)
-{
- if (!aclbufp || aclcnt < 1 || aclcnt > MAX_ACL_ENTRIES
- || aclcheck32 (aclbufp, aclcnt, NULL))
- {
- set_errno (EINVAL);
- return NULL;
- }
- char buf[32000];
- buf[0] = '\0';
- bool first = true;
-
- for (int pos = 0; pos < aclcnt; ++pos)
- {
- if (!first)
- strcat (buf, ",");
- first = false;
- if (aclbufp[pos].a_type & ACL_DEFAULT)
- strcat (buf, "default");
- switch (aclbufp[pos].a_type & ~ACL_DEFAULT)
- {
- case USER_OBJ:
- __small_sprintf (buf + strlen (buf), "user::%s",
- permtostr (aclbufp[pos].a_perm));
- break;
- case USER:
- __small_sprintf (buf + strlen (buf), "user:%d:%s",
- aclbufp[pos].a_id, permtostr (aclbufp[pos].a_perm));
- break;
- case GROUP_OBJ:
- __small_sprintf (buf + strlen (buf), "group::%s",
- permtostr (aclbufp[pos].a_perm));
- break;
- case GROUP:
- __small_sprintf (buf + strlen (buf), "group:%d:%s",
- aclbufp[pos].a_id, permtostr (aclbufp[pos].a_perm));
- break;
- case CLASS_OBJ:
- __small_sprintf (buf + strlen (buf), "mask::%s",
- permtostr (aclbufp[pos].a_perm));
- break;
- case OTHER_OBJ:
- __small_sprintf (buf + strlen (buf), "other::%s",
- permtostr (aclbufp[pos].a_perm));
- break;
- default:
- set_errno (EINVAL);
- return NULL;
- }
- }
- return strdup (buf);
-}
-
-static mode_t
-permfromstr (char *perm)
-{
- mode_t mode = 0;
-
- if (strlen (perm) != 3)
- return 01000;
- if (perm[0] == 'r')
- mode |= S_IROTH;
- else if (perm[0] != '-')
- return 01000;
- if (perm[1] == 'w')
- mode |= S_IWOTH;
- else if (perm[1] != '-')
- return 01000;
- if (perm[2] == 'x')
- mode |= S_IXOTH;
- else if (perm[2] != '-')
- return 01000;
- return mode;
-}
-
-extern "C" aclent_t *
-aclfromtext32 (char *acltextp, int *)
-{
- if (!acltextp)
- {
- set_errno (EINVAL);
- return NULL;
- }
- char buf[strlen (acltextp) + 1];
- aclent_t lacl[MAX_ACL_ENTRIES];
- memset (lacl, 0, sizeof lacl);
- int pos = 0;
- strcpy (buf, acltextp);
- char *lasts;
- cyg_ldap cldap;
- for (char *c = strtok_r (buf, ",", &lasts);
- c;
- c = strtok_r (NULL, ",", &lasts))
- {
- if (!strncmp (c, "default", 7))
- {
- lacl[pos].a_type |= ACL_DEFAULT;
- c += 7;
- }
- if (!strncmp (c, "user:", 5))
- {
- if (c[5] == ':')
- lacl[pos].a_type |= USER_OBJ;
- else
- {
- lacl[pos].a_type |= USER;
- c += 5;
- if (isalpha (*c))
- {
- struct passwd *pw = internal_getpwnam (c, &cldap);
- if (!pw)
- {
- set_errno (EINVAL);
- return NULL;
- }
- lacl[pos].a_id = pw->pw_uid;
- c = strchrnul (c, ':');
- }
- else if (isdigit (*c))
- lacl[pos].a_id = strtol (c, &c, 10);
- if (*c != ':')
- {
- set_errno (EINVAL);
- return NULL;
- }
- }
- }
- else if (!strncmp (c, "group:", 6))
- {
- if (c[5] == ':')
- lacl[pos].a_type |= GROUP_OBJ;
- else
- {
- lacl[pos].a_type |= GROUP;
- c += 5;
- if (isalpha (*c))
- {
- struct group *gr = internal_getgrnam (c, &cldap);
- if (!gr)
- {
- set_errno (EINVAL);
- return NULL;
- }
- lacl[pos].a_id = gr->gr_gid;
- c = strchrnul (c, ':');
- }
- else if (isdigit (*c))
- lacl[pos].a_id = strtol (c, &c, 10);
- if (*c != ':')
- {
- set_errno (EINVAL);
- return NULL;
- }
- }
- }
- else if (!strncmp (c, "mask:", 5))
- {
- if (c[5] == ':')
- lacl[pos].a_type |= CLASS_OBJ;
- else
- {
- set_errno (EINVAL);
- return NULL;
- }
- }
- else if (!strncmp (c, "other:", 6))
- {
- if (c[5] == ':')
- lacl[pos].a_type |= OTHER_OBJ;
- else
- {
- set_errno (EINVAL);
- return NULL;
- }
- }
- if ((lacl[pos].a_perm = permfromstr (c)) == 01000)
- {
- set_errno (EINVAL);
- return NULL;
- }
- ++pos;
- }
- aclent_t *aclp = (aclent_t *) malloc (pos * sizeof (aclent_t));
- if (aclp)
- memcpy (aclp, lacl, pos * sizeof (aclent_t));
- return aclp;
-}
-
-#ifdef __x86_64__
-EXPORT_ALIAS (acl32, acl)
-EXPORT_ALIAS (facl32, facl)
-EXPORT_ALIAS (aclcheck32, aclcheck)
-EXPORT_ALIAS (aclsort32, aclsort)
-EXPORT_ALIAS (acltomode32, acltomode)
-EXPORT_ALIAS (aclfrommode32, aclfrommode)
-EXPORT_ALIAS (acltopbits32, acltopbits)
-EXPORT_ALIAS (aclfrompbits32, aclfrompbits)
-EXPORT_ALIAS (acltotext32, acltotext)
-EXPORT_ALIAS (aclfromtext32, aclfromtext)
-#else
-/* __aclent16_t and aclent_t have same size and same member offsets */
-static aclent_t *
-acl16to32 (__aclent16_t *aclbufp, int nentries)
-{
- aclent_t *aclbufp32 = (aclent_t *) aclbufp;
- if (aclbufp32)
- for (int i = 0; i < nentries; i++)
- aclbufp32[i].a_id &= USHRT_MAX;
- return aclbufp32;
-}
-
-extern "C" int
-acl (const char *path, int cmd, int nentries, __aclent16_t *aclbufp)
-{
- return acl32 (path, cmd, nentries, acl16to32 (aclbufp, nentries));
-}
-
-extern "C" int
-facl (int fd, int cmd, int nentries, __aclent16_t *aclbufp)
-{
- return facl32 (fd, cmd, nentries, acl16to32 (aclbufp, nentries));
-}
-
-extern "C" int
-lacl (const char *path, int cmd, int nentries, __aclent16_t *aclbufp)
-{
- /* This call was an accident. Make it absolutely clear. */
- set_errno (ENOSYS);
- return -1;
-}
-
-extern "C" int
-aclcheck (__aclent16_t *aclbufp, int nentries, int *which)
-{
- return aclcheck32 (acl16to32 (aclbufp, nentries), nentries, which);
-}
-
-extern "C" int
-aclsort (int nentries, int i, __aclent16_t *aclbufp)
-{
- return aclsort32 (nentries, i, acl16to32 (aclbufp, nentries));
-}
-
-
-extern "C" int
-acltomode (__aclent16_t *aclbufp, int nentries, mode_t *modep)
-{
- return acltomode32 (acl16to32 (aclbufp, nentries), nentries, modep);
-}
-
-extern "C" int
-aclfrommode (__aclent16_t *aclbufp, int nentries, mode_t *modep)
-{
- return aclfrommode32 ((aclent_t *)aclbufp, nentries, modep);
-}
-
-extern "C" int
-acltopbits (__aclent16_t *aclbufp, int nentries, mode_t *pbitsp)
-{
- return acltopbits32 (acl16to32 (aclbufp, nentries), nentries, pbitsp);
-}
-
-extern "C" int
-aclfrompbits (__aclent16_t *aclbufp, int nentries, mode_t *pbitsp)
-{
- return aclfrompbits32 ((aclent_t *)aclbufp, nentries, pbitsp);
-}
-
-extern "C" char *
-acltotext (__aclent16_t *aclbufp, int aclcnt)
-{
- return acltotext32 (acl16to32 (aclbufp, aclcnt), aclcnt);
-}
-
-extern "C" __aclent16_t *
-aclfromtext (char *acltextp, int * aclcnt)
-{
- return (__aclent16_t *) aclfromtext32 (acltextp, aclcnt);
-}
-#endif /* !__x86_64__ */
diff --git a/winsup/cygwin/sec_auth.cc b/winsup/cygwin/sec_auth.cc
deleted file mode 100644
index 2906b715d..000000000
--- a/winsup/cygwin/sec_auth.cc
+++ /dev/null
@@ -1,1348 +0,0 @@
-/* sec_auth.cc: NT authentication functions
-
- Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
- 2008, 2009, 2010, 2011, 2012, 2013, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include <stdlib.h>
-#include <wchar.h>
-#include <wininet.h>
-#include <ntsecapi.h>
-#include "cygerrno.h"
-#include "security.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "registry.h"
-#include "ntdll.h"
-#include "tls_pbuf.h"
-#include <lm.h>
-#include <iptypes.h>
-#include <wininet.h>
-#include <userenv.h>
-#include "cyglsa.h"
-#include "cygserver_setpwd.h"
-#include <cygwin/version.h>
-
-/* Starting with Windows Vista, the token returned by system functions
- is a restricted token. The full admin token is linked to it and can
- be fetched with NtQueryInformationToken. This function returns the original
- token on pre-Vista, and the elevated token on Vista++ if it's available,
- the original token otherwise. The token handle is also made inheritable
- since that's necessary anyway. */
-static HANDLE
-get_full_privileged_inheritable_token (HANDLE token)
-{
- if (wincap.has_mandatory_integrity_control ())
- {
- TOKEN_LINKED_TOKEN linked;
- ULONG size;
-
- /* When fetching the linked token without TCB privs, then the linked
- token is not a primary token, only an impersonation token, which is
- not suitable for CreateProcessAsUser. Converting it to a primary
- token using DuplicateTokenEx does NOT work for the linked token in
- this case. So we have to switch on TCB privs to get a primary token.
- This is generally performed in the calling functions. */
- if (NT_SUCCESS (NtQueryInformationToken (token, TokenLinkedToken,
- (PVOID) &linked, sizeof linked,
- &size)))
- {
- debug_printf ("Linked Token: %p", linked.LinkedToken);
- if (linked.LinkedToken)
- {
- TOKEN_TYPE type;
-
- /* At this point we don't know if the user actually had TCB
- privileges. Check if the linked token is a primary token.
- If not, just return the original token. */
- if (NT_SUCCESS (NtQueryInformationToken (linked.LinkedToken,
- TokenType, (PVOID) &type,
- sizeof type, &size))
- && type != TokenPrimary)
- debug_printf ("Linked Token is not a primary token!");
- else
- {
- CloseHandle (token);
- token = linked.LinkedToken;
- }
- }
- }
- }
- if (!SetHandleInformation (token, HANDLE_FLAG_INHERIT, HANDLE_FLAG_INHERIT))
- {
- __seterrno ();
- CloseHandle (token);
- token = NULL;
- }
- return token;
-}
-
-void
-set_imp_token (HANDLE token, int type)
-{
- debug_printf ("set_imp_token (%p, %d)", token, type);
- cygheap->user.external_token = (token == INVALID_HANDLE_VALUE
- ? NO_IMPERSONATION : token);
- cygheap->user.ext_token_is_restricted = (type == CW_TOKEN_RESTRICTED);
-}
-
-extern "C" void
-cygwin_set_impersonation_token (const HANDLE hToken)
-{
- set_imp_token (hToken, CW_TOKEN_IMPERSONATION);
-}
-
-void
-extract_nt_dom_user (const struct passwd *pw, PWCHAR domain, PWCHAR user)
-{
-
- cygsid psid;
- DWORD ulen = UNLEN + 1;
- DWORD dlen = MAX_DOMAIN_NAME_LEN + 1;
- SID_NAME_USE use;
-
- debug_printf ("pw_gecos %p (%s)", pw->pw_gecos, pw->pw_gecos);
-
- if (psid.getfrompw (pw)
- && LookupAccountSidW (NULL, psid, user, &ulen, domain, &dlen, &use))
- return;
-
- char *d, *u, *c;
- domain[0] = L'\0';
- sys_mbstowcs (user, UNLEN + 1, pw->pw_name);
- if ((d = strstr (pw->pw_gecos, "U-")) != NULL &&
- (d == pw->pw_gecos || d[-1] == ','))
- {
- c = strchrnul (d + 2, ',');
- if ((u = strchrnul (d + 2, '\\')) >= c)
- u = d + 1;
- else if (u - d <= MAX_DOMAIN_NAME_LEN + 2)
- sys_mbstowcs (domain, MAX_DOMAIN_NAME_LEN + 1, d + 2, u - d - 1);
- if (c - u <= UNLEN + 1)
- sys_mbstowcs (user, UNLEN + 1, u + 1, c - u);
- }
-}
-
-extern "C" HANDLE
-cygwin_logon_user (const struct passwd *pw, const char *password)
-{
- if (!pw || !password)
- {
- set_errno (EINVAL);
- return INVALID_HANDLE_VALUE;
- }
-
- WCHAR nt_domain[MAX_DOMAIN_NAME_LEN + 1];
- WCHAR nt_user[UNLEN + 1];
- PWCHAR passwd;
- HANDLE hToken;
- tmp_pathbuf tp;
-
- extract_nt_dom_user (pw, nt_domain, nt_user);
- debug_printf ("LogonUserW (%W, %W, ...)", nt_user, nt_domain);
- sys_mbstowcs (passwd = tp.w_get (), NT_MAX_PATH, password);
- /* CV 2005-06-08: LogonUser should run under the primary process token,
- otherwise it returns with ERROR_ACCESS_DENIED. */
- cygheap->user.deimpersonate ();
- if (!LogonUserW (nt_user, *nt_domain ? nt_domain : NULL, passwd,
- LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT,
- &hToken))
- {
- __seterrno ();
- hToken = INVALID_HANDLE_VALUE;
- }
- else
- {
- /* See the comment in get_full_privileged_inheritable_token for a
- description why we enable TCB privileges here. */
- push_self_privilege (SE_TCB_PRIVILEGE, true);
- hToken = get_full_privileged_inheritable_token (hToken);
- pop_self_privilege ();
- if (!hToken)
- hToken = INVALID_HANDLE_VALUE;
- }
- RtlSecureZeroMemory (passwd, NT_MAX_PATH);
- cygheap->user.reimpersonate ();
- debug_printf ("%R = logon_user(%s,...)", hToken, pw->pw_name);
- return hToken;
-}
-
-/* The buffer path points to should be at least MAX_PATH bytes. */
-PWCHAR
-get_user_profile_directory (PCWSTR sidstr, PWCHAR path, SIZE_T path_len)
-{
- if (!sidstr || !path)
- return NULL;
-
- UNICODE_STRING buf;
- tmp_pathbuf tp;
- tp.u_get (&buf);
- NTSTATUS status;
-
- RTL_QUERY_REGISTRY_TABLE tab[2] = {
- { NULL, RTL_QUERY_REGISTRY_NOEXPAND | RTL_QUERY_REGISTRY_DIRECT
- | RTL_QUERY_REGISTRY_REQUIRED,
- L"ProfileImagePath", &buf, REG_NONE, NULL, 0 },
- { NULL, 0, NULL, NULL, 0, NULL, 0 }
- };
-
- WCHAR key[wcslen (sidstr) + 16];
- wcpcpy (wcpcpy (key, L"ProfileList\\"), sidstr);
- status = RtlQueryRegistryValues (RTL_REGISTRY_WINDOWS_NT, key, tab,
- NULL, NULL);
- if (!NT_SUCCESS (status) || buf.Length == 0)
- {
- debug_printf ("ProfileImagePath for %W not found, status %y", sidstr,
- status);
- return NULL;
- }
- ExpandEnvironmentStringsW (buf.Buffer, path, path_len);
- debug_printf ("ProfileImagePath for %W: %W", sidstr, path);
- return path;
-}
-
-/* The CreateProfile prototype is for some reason missing in our w32api headers,
- even though it's defined upstream since Dec-2013. */
-extern "C" {
- HRESULT WINAPI CreateProfile (LPCWSTR pszUserSid, LPCWSTR pszUserName,
- LPWSTR pszProfilePath, DWORD cchProfilePath);
-}
-
-/* Load user profile if it's not already loaded. If the user profile doesn't
- exist on the machine, and if we're running Vista or later, try to create it.
-
- Return a handle to the loaded user registry hive only if it got actually
- loaded here, not if it already existed. There's no reliable way to know
- when to unload the hive yet, so we're leaking this registry handle for now.
- TODO: Try to find a way to reliably unload the user profile again. */
-HANDLE
-load_user_profile (HANDLE token, struct passwd *pw, cygpsid &usersid)
-{
- WCHAR domain[DNLEN + 1];
- WCHAR username[UNLEN + 1];
- WCHAR sid[128];
- HKEY hkey;
- WCHAR userpath[MAX_PATH];
- PROFILEINFOW pi;
- WCHAR server[INTERNET_MAX_HOST_NAME_LENGTH + 3];
- NET_API_STATUS nas = NERR_UserNotFound;
- PUSER_INFO_3 ui;
-
- extract_nt_dom_user (pw, domain, username);
- usersid.string (sid);
- debug_printf ("user: <%W> <%W>", username, sid);
- /* Check if user hive is already loaded. */
- if (!RegOpenKeyExW (HKEY_USERS, sid, 0, KEY_READ, &hkey))
- {
- debug_printf ("User registry hive for %W already exists", username);
- RegCloseKey (hkey);
- return NULL;
- }
- /* Check if the local profile dir has already been created. */
- if (!get_user_profile_directory (sid, userpath, MAX_PATH))
- {
- /* No, try to create it. This function exists only on Vista and later. */
- HRESULT res = CreateProfile (sid, username, userpath, MAX_PATH);
- if (res != S_OK)
- {
- /* If res is 1 (S_FALSE), autoloading failed (XP or 2K3). */
- if (res != S_FALSE)
- debug_printf ("CreateProfile, HRESULT %x", res);
- return NULL;
- }
- }
- /* Fill PROFILEINFO */
- memset (&pi, 0, sizeof pi);
- pi.dwSize = sizeof pi;
- pi.dwFlags = PI_NOUI;
- pi.lpUserName = username;
- /* Check if user has a roaming profile and fill in lpProfilePath, if so. */
- if (get_logon_server (domain, server, DS_IS_FLAT_NAME))
- {
- nas = NetUserGetInfo (server, username, 3, (PBYTE *) &ui);
- if (NetUserGetInfo (server, username, 3, (PBYTE *) &ui) != NERR_Success)
- debug_printf ("NetUserGetInfo, %u", nas);
- else if (ui->usri3_profile && *ui->usri3_profile)
- pi.lpProfilePath = ui->usri3_profile;
- }
-
- if (!LoadUserProfileW (token, &pi))
- debug_printf ("LoadUserProfileW, %E");
- /* Free buffer created by NetUserGetInfo */
- if (nas == NERR_Success)
- NetApiBufferFree (ui);
- return pi.hProfile;
-}
-
-HANDLE
-lsa_open_policy (PWCHAR server, ACCESS_MASK access)
-{
- LSA_UNICODE_STRING srvbuf;
- PLSA_UNICODE_STRING srv = NULL;
- static LSA_OBJECT_ATTRIBUTES oa = { 0, 0, 0, 0, 0, 0 };
- HANDLE lsa;
-
- if (server)
- {
- srv = &srvbuf;
- RtlInitUnicodeString (srv, server);
- }
- NTSTATUS status = LsaOpenPolicy (srv, &oa, access, &lsa);
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- lsa = NULL;
- }
- return lsa;
-}
-
-void
-lsa_close_policy (HANDLE lsa)
-{
- if (lsa)
- LsaClose (lsa);
-}
-
-bool
-get_logon_server (PWCHAR domain, WCHAR *server, ULONG flags)
-{
- DWORD ret;
- PDOMAIN_CONTROLLER_INFOW pci;
-
- /* Empty domain is interpreted as local system */
- if (cygheap->dom.init ()
- && (!domain[0]
- || !wcscasecmp (domain, cygheap->dom.account_flat_name ())))
- {
- wcpcpy (wcpcpy (server, L"\\\\"), cygheap->dom.account_flat_name ());
- return true;
- }
-
- /* Try to get any available domain controller for this domain */
- ret = DsGetDcNameW (NULL, domain, NULL, NULL, flags, &pci);
- if (ret == ERROR_SUCCESS)
- {
- wcscpy (server, pci->DomainControllerName);
- NetApiBufferFree (pci);
- debug_printf ("DC: server: %W", server);
- return true;
- }
- __seterrno_from_win_error (ret);
- return false;
-}
-
-static bool
-get_user_groups (WCHAR *logonserver, cygsidlist &grp_list,
- PWCHAR user, PWCHAR domain)
-{
- WCHAR dgroup[MAX_DOMAIN_NAME_LEN + GNLEN + 2];
- LPGROUP_USERS_INFO_0 buf;
- DWORD cnt, tot, len;
- NET_API_STATUS ret;
-
- /* Look only on logonserver */
- ret = NetUserGetGroups (logonserver, user, 0, (LPBYTE *) &buf,
- MAX_PREFERRED_LENGTH, &cnt, &tot);
- if (ret)
- {
- __seterrno_from_win_error (ret);
- /* It's no error when the user name can't be found.
- It's also no error if access has been denied. Yes, sounds weird, but
- keep in mind that ERROR_ACCESS_DENIED means the current user has no
- permission to access the AD user information. However, if we return
- an error, Cygwin will call DsGetDcName with DS_FORCE_REDISCOVERY set
- to ask for another server. This is not only time consuming, it's also
- useless; the next server will return access denied again. */
- return ret == NERR_UserNotFound || ret == ERROR_ACCESS_DENIED;
- }
-
- len = wcslen (domain);
- wcscpy (dgroup, domain);
- dgroup[len++] = L'\\';
-
- for (DWORD i = 0; i < cnt; ++i)
- {
- cygsid gsid;
- DWORD glen = SECURITY_MAX_SID_SIZE;
- WCHAR dom[MAX_DOMAIN_NAME_LEN + 1];
- DWORD dlen = sizeof (dom);
- SID_NAME_USE use = SidTypeInvalid;
-
- wcscpy (dgroup + len, buf[i].grui0_name);
- if (!LookupAccountNameW (NULL, dgroup, gsid, &glen, dom, &dlen, &use))
- debug_printf ("LookupAccountName(%W), %E", dgroup);
- else if (well_known_sid_type (use))
- grp_list *= gsid;
- else if (legal_sid_type (use))
- grp_list += gsid;
- else
- debug_printf ("Global group %W invalid. Use: %u", dgroup, use);
- }
-
- NetApiBufferFree (buf);
- return true;
-}
-
-static bool
-get_user_local_groups (PWCHAR logonserver, PWCHAR domain,
- cygsidlist &grp_list, PWCHAR user)
-{
- LPLOCALGROUP_INFO_0 buf;
- DWORD cnt, tot;
- NET_API_STATUS ret;
-
- ret = NetUserGetLocalGroups (logonserver, user, 0, LG_INCLUDE_INDIRECT,
- (LPBYTE *) &buf, MAX_PREFERRED_LENGTH,
- &cnt, &tot);
- if (ret)
- {
- __seterrno_from_win_error (ret);
- return false;
- }
-
- WCHAR domlocal_grp[MAX_DOMAIN_NAME_LEN + GNLEN + 2];
- WCHAR builtin_grp[2 * GNLEN + 2];
- PWCHAR dg_ptr, bg_ptr = NULL;
- SID_NAME_USE use;
-
- dg_ptr = wcpcpy (domlocal_grp, domain);
- *dg_ptr++ = L'\\';
-
- for (DWORD i = 0; i < cnt; ++i)
- {
- cygsid gsid;
- DWORD glen = SECURITY_MAX_SID_SIZE;
- WCHAR dom[MAX_DOMAIN_NAME_LEN + 1];
- DWORD domlen = MAX_DOMAIN_NAME_LEN + 1;
-
- use = SidTypeInvalid;
- wcscpy (dg_ptr, buf[i].lgrpi0_name);
- if (LookupAccountNameW (NULL, domlocal_grp, gsid, &glen,
- dom, &domlen, &use))
- {
- if (well_known_sid_type (use))
- grp_list *= gsid;
- else if (legal_sid_type (use))
- grp_list += gsid;
- else
- debug_printf ("Rejecting local %W. use: %u", dg_ptr, use);
- }
- else if (GetLastError () == ERROR_NONE_MAPPED)
- {
- /* Check if it's a builtin group. */
- if (!bg_ptr)
- {
- /* Retrieve name of builtin group from system since it's
- localized. */
- glen = 2 * GNLEN + 2;
- if (!LookupAccountSidW (NULL, well_known_builtin_sid,
- builtin_grp, &glen, domain, &domlen, &use))
- debug_printf ("LookupAccountSid(BUILTIN), %E");
- else
- {
- bg_ptr = builtin_grp + wcslen (builtin_grp);
- bg_ptr = wcpcpy (builtin_grp, L"\\");
- }
- }
- if (bg_ptr)
- {
- wcscpy (bg_ptr, dg_ptr);
- glen = SECURITY_MAX_SID_SIZE;
- domlen = MAX_DOMAIN_NAME_LEN + 1;
- if (LookupAccountNameW (NULL, builtin_grp, gsid, &glen,
- dom, &domlen, &use))
- {
- if (!legal_sid_type (use))
- debug_printf ("Rejecting local %W. use: %u", dg_ptr, use);
- else
- grp_list *= gsid;
- }
- else
- debug_printf ("LookupAccountName(%W), %E", builtin_grp);
- }
- }
- else
- debug_printf ("LookupAccountName(%W), %E", domlocal_grp);
- }
- NetApiBufferFree (buf);
- return true;
-}
-
-static bool
-sid_in_token_groups (PTOKEN_GROUPS grps, cygpsid sid)
-{
- if (!grps)
- return false;
- for (DWORD i = 0; i < grps->GroupCount; ++i)
- if (sid == grps->Groups[i].Sid)
- return true;
- return false;
-}
-
-static void
-get_token_group_sidlist (cygsidlist &grp_list, PTOKEN_GROUPS my_grps,
- LUID auth_luid, int &auth_pos)
-{
- auth_pos = -1;
- if (my_grps)
- {
- grp_list += well_known_local_sid;
- if (wincap.has_console_logon_sid ())
- grp_list += well_known_console_logon_sid;
- if (sid_in_token_groups (my_grps, well_known_dialup_sid))
- grp_list *= well_known_dialup_sid;
- if (sid_in_token_groups (my_grps, well_known_network_sid))
- grp_list *= well_known_network_sid;
- if (sid_in_token_groups (my_grps, well_known_batch_sid))
- grp_list *= well_known_batch_sid;
- grp_list *= well_known_interactive_sid;
-#if 0
- /* Don't add the SERVICE group when switching the user context.
- That's much too dangerous, since the service group adds the
- SE_IMPERSONATE_NAME privilege to the user. After all, the
- process started with this token is not the service process
- anymore anyway. */
- if (sid_in_token_groups (my_grps, well_known_service_sid))
- grp_list *= well_known_service_sid;
-#endif
- if (sid_in_token_groups (my_grps, well_known_this_org_sid))
- grp_list *= well_known_this_org_sid;
- grp_list *= well_known_users_sid;
- }
- else
- {
- grp_list += well_known_local_sid;
- grp_list *= well_known_interactive_sid;
- grp_list *= well_known_users_sid;
- }
- if (get_ll (auth_luid) != 999LL) /* != SYSTEM_LUID */
- {
- for (DWORD i = 0; i < my_grps->GroupCount; ++i)
- if (my_grps->Groups[i].Attributes & SE_GROUP_LOGON_ID)
- {
- grp_list += my_grps->Groups[i].Sid;
- auth_pos = grp_list.count () - 1;
- break;
- }
- }
-}
-
-bool
-get_server_groups (cygsidlist &grp_list, PSID usersid, struct passwd *pw)
-{
- WCHAR user[UNLEN + 1];
- WCHAR domain[MAX_DOMAIN_NAME_LEN + 1];
- WCHAR server[INTERNET_MAX_HOST_NAME_LENGTH + 3];
- DWORD ulen = UNLEN + 1;
- DWORD dlen = MAX_DOMAIN_NAME_LEN + 1;
- SID_NAME_USE use;
-
- if (well_known_system_sid == usersid)
- {
- grp_list *= well_known_admins_sid;
- return true;
- }
-
- grp_list *= well_known_world_sid;
- grp_list *= well_known_authenticated_users_sid;
-
- if (!LookupAccountSidW (NULL, usersid, user, &ulen, domain, &dlen, &use))
- {
- __seterrno ();
- return false;
- }
- /* If the SID does NOT start with S-1-5-21, the domain is some builtin
- domain. The search for a logon server and fetching group accounts
- is moot. */
- if (sid_id_auth (usersid) == 5 /* SECURITY_NT_AUTHORITY */
- && sid_sub_auth (usersid, 0) == SECURITY_NT_NON_UNIQUE
- && get_logon_server (domain, server, DS_IS_FLAT_NAME))
- {
- get_user_groups (server, grp_list, user, domain);
- get_user_local_groups (server, domain, grp_list, user);
- }
- return true;
-}
-
-static bool
-get_initgroups_sidlist (cygsidlist &grp_list,
- PSID usersid, PSID pgrpsid, struct passwd *pw,
- PTOKEN_GROUPS my_grps, LUID auth_luid, int &auth_pos)
-{
- grp_list *= well_known_world_sid;
- grp_list *= well_known_authenticated_users_sid;
- if (well_known_system_sid == usersid)
- auth_pos = -1;
- else
- get_token_group_sidlist (grp_list, my_grps, auth_luid, auth_pos);
- if (!get_server_groups (grp_list, usersid, pw))
- return false;
-
- /* special_pgrp true if pgrpsid is not in normal groups */
- grp_list += pgrpsid;
- return true;
-}
-
-static void
-get_setgroups_sidlist (cygsidlist &tmp_list, PSID usersid, struct passwd *pw,
- PTOKEN_GROUPS my_grps, user_groups &groups,
- LUID auth_luid, int &auth_pos)
-{
- tmp_list *= well_known_world_sid;
- tmp_list *= well_known_authenticated_users_sid;
- get_token_group_sidlist (tmp_list, my_grps, auth_luid, auth_pos);
- get_server_groups (tmp_list, usersid, pw);
- for (int gidx = 0; gidx < groups.sgsids.count (); gidx++)
- tmp_list += groups.sgsids.sids[gidx];
- tmp_list += groups.pgsid;
-}
-
-static ULONG sys_privs[] = {
- SE_CREATE_TOKEN_PRIVILEGE,
- SE_ASSIGNPRIMARYTOKEN_PRIVILEGE,
- SE_LOCK_MEMORY_PRIVILEGE,
- SE_INCREASE_QUOTA_PRIVILEGE,
- SE_TCB_PRIVILEGE,
- SE_SECURITY_PRIVILEGE,
- SE_TAKE_OWNERSHIP_PRIVILEGE,
- SE_LOAD_DRIVER_PRIVILEGE,
- SE_SYSTEM_PROFILE_PRIVILEGE, /* Vista ONLY */
- SE_SYSTEMTIME_PRIVILEGE,
- SE_PROF_SINGLE_PROCESS_PRIVILEGE,
- SE_INC_BASE_PRIORITY_PRIVILEGE,
- SE_CREATE_PAGEFILE_PRIVILEGE,
- SE_CREATE_PERMANENT_PRIVILEGE,
- SE_BACKUP_PRIVILEGE,
- SE_RESTORE_PRIVILEGE,
- SE_SHUTDOWN_PRIVILEGE,
- SE_DEBUG_PRIVILEGE,
- SE_AUDIT_PRIVILEGE,
- SE_SYSTEM_ENVIRONMENT_PRIVILEGE,
- SE_CHANGE_NOTIFY_PRIVILEGE,
- SE_UNDOCK_PRIVILEGE,
- SE_MANAGE_VOLUME_PRIVILEGE,
- SE_IMPERSONATE_PRIVILEGE,
- SE_CREATE_GLOBAL_PRIVILEGE,
- SE_INCREASE_WORKING_SET_PRIVILEGE,
- SE_TIME_ZONE_PRIVILEGE,
- SE_CREATE_SYMBOLIC_LINK_PRIVILEGE
-};
-
-#define SYSTEM_PRIVILEGES_COUNT (sizeof sys_privs / sizeof *sys_privs)
-
-static PTOKEN_PRIVILEGES
-get_system_priv_list (size_t &size)
-{
- ULONG max_idx = 0;
- while (max_idx < SYSTEM_PRIVILEGES_COUNT
- && sys_privs[max_idx] != wincap.max_sys_priv ())
- ++max_idx;
- if (max_idx >= SYSTEM_PRIVILEGES_COUNT)
- api_fatal ("Coding error: wincap privilege %u doesn't exist in sys_privs",
- wincap.max_sys_priv ());
- size = sizeof (ULONG) + (max_idx + 1) * sizeof (LUID_AND_ATTRIBUTES);
- PTOKEN_PRIVILEGES privs = (PTOKEN_PRIVILEGES) malloc (size);
- if (!privs)
- {
- debug_printf ("malloc (system_privs) failed.");
- return NULL;
- }
- privs->PrivilegeCount = 0;
- for (ULONG i = 0; i <= max_idx; ++i)
- {
- privs->Privileges[privs->PrivilegeCount].Luid.HighPart = 0L;
- privs->Privileges[privs->PrivilegeCount].Luid.LowPart = sys_privs[i];
- privs->Privileges[privs->PrivilegeCount].Attributes =
- SE_PRIVILEGE_ENABLED | SE_PRIVILEGE_ENABLED_BY_DEFAULT;
- ++privs->PrivilegeCount;
- }
- return privs;
-}
-
-static PTOKEN_PRIVILEGES
-get_priv_list (LSA_HANDLE lsa, cygsid &usersid, cygsidlist &grp_list,
- size_t &size, cygpsid *mandatory_integrity_sid)
-{
- PLSA_UNICODE_STRING privstrs;
- ULONG cnt;
- PTOKEN_PRIVILEGES privs = NULL;
-
- if (usersid == well_known_system_sid)
- {
- if (mandatory_integrity_sid)
- *mandatory_integrity_sid = mandatory_system_integrity_sid;
- return get_system_priv_list (size);
- }
-
- if (mandatory_integrity_sid)
- *mandatory_integrity_sid = mandatory_medium_integrity_sid;
-
- for (int grp = -1; grp < grp_list.count (); ++grp)
- {
- if (grp == -1)
- {
- if (LsaEnumerateAccountRights (lsa, usersid, &privstrs, &cnt)
- != STATUS_SUCCESS)
- continue;
- }
- else if (LsaEnumerateAccountRights (lsa, grp_list.sids[grp],
- &privstrs, &cnt) != STATUS_SUCCESS)
- continue;
- for (ULONG i = 0; i < cnt; ++i)
- {
- LUID priv;
- PTOKEN_PRIVILEGES tmp;
- DWORD tmp_count;
- bool high_integrity;
-
- if (!privilege_luid (privstrs[i].Buffer, priv, high_integrity))
- continue;
-
- if (privs)
- {
- DWORD pcnt = privs->PrivilegeCount;
- LUID_AND_ATTRIBUTES *p = privs->Privileges;
- for (; pcnt > 0; --pcnt, ++p)
- if (priv.HighPart == p->Luid.HighPart
- && priv.LowPart == p->Luid.LowPart)
- goto next_account_right;
- }
-
- tmp_count = privs ? privs->PrivilegeCount : 0;
- size = sizeof (DWORD)
- + (tmp_count + 1) * sizeof (LUID_AND_ATTRIBUTES);
- tmp = (PTOKEN_PRIVILEGES) realloc (privs, size);
- if (!tmp)
- {
- if (privs)
- free (privs);
- LsaFreeMemory (privstrs);
- debug_printf ("realloc (privs) failed.");
- return NULL;
- }
- tmp->PrivilegeCount = tmp_count;
- privs = tmp;
- privs->Privileges[privs->PrivilegeCount].Luid = priv;
- privs->Privileges[privs->PrivilegeCount].Attributes =
- SE_PRIVILEGE_ENABLED | SE_PRIVILEGE_ENABLED_BY_DEFAULT;
- ++privs->PrivilegeCount;
- if (mandatory_integrity_sid && high_integrity)
- *mandatory_integrity_sid = mandatory_high_integrity_sid;
-
- next_account_right:
- ;
- }
- LsaFreeMemory (privstrs);
- }
- return privs;
-}
-
-/* Accept a token if
- - the requested usersid matches the TokenUser and
- - if setgroups has been called:
- the token groups that are listed in /etc/group match the union of
- the requested primary and supplementary groups in gsids.
- - else the (unknown) implicitly requested supplementary groups and those
- in the token are the groups associated with the usersid. We assume
- they match and verify only the primary groups.
- The requested primary group must appear in the token.
- The primary group in the token is a group associated with the usersid,
- except if the token is internal and the group is in the token SD
- (see create_token). In that latter case that group must match the
- requested primary group. */
-bool
-verify_token (HANDLE token, cygsid &usersid, user_groups &groups, bool *pintern)
-{
- NTSTATUS status;
- ULONG size;
- bool intern = false;
-
- if (pintern)
- {
- TOKEN_SOURCE ts;
- status = NtQueryInformationToken (token, TokenSource, &ts, sizeof ts,
- &size);
- if (!NT_SUCCESS (status))
- debug_printf ("NtQueryInformationToken(), %y", status);
- else
- *pintern = intern = !memcmp (ts.SourceName, "Cygwin.1", 8);
- }
- /* Verify usersid */
- cygsid tok_usersid (NO_SID);
- status = NtQueryInformationToken (token, TokenUser, &tok_usersid,
- sizeof tok_usersid, &size);
- if (!NT_SUCCESS (status))
- debug_printf ("NtQueryInformationToken(), %y", status);
- if (usersid != tok_usersid)
- return false;
-
- /* For an internal token, if setgroups was not called and if the sd group
- is not well_known_null_sid, it must match pgrpsid */
- if (intern && !groups.issetgroups ())
- {
- const DWORD sd_buf_siz = SECURITY_MAX_SID_SIZE
- + sizeof (SECURITY_DESCRIPTOR);
- PSECURITY_DESCRIPTOR sd_buf = (PSECURITY_DESCRIPTOR) alloca (sd_buf_siz);
- cygpsid gsid (NO_SID);
- NTSTATUS status;
- status = NtQuerySecurityObject (token, GROUP_SECURITY_INFORMATION,
- sd_buf, sd_buf_siz, &size);
- if (!NT_SUCCESS (status))
- debug_printf ("NtQuerySecurityObject(), %y", status);
- else
- {
- BOOLEAN dummy;
- status = RtlGetGroupSecurityDescriptor (sd_buf, (PSID *) &gsid,
- &dummy);
- if (!NT_SUCCESS (status))
- debug_printf ("RtlGetGroupSecurityDescriptor(), %y", status);
- }
- if (well_known_null_sid != gsid)
- return gsid == groups.pgsid;
- }
-
- PTOKEN_GROUPS my_grps;
-
- status = NtQueryInformationToken (token, TokenGroups, NULL, 0, &size);
- if (!NT_SUCCESS (status) && status != STATUS_BUFFER_TOO_SMALL)
- {
- debug_printf ("NtQueryInformationToken(token, TokenGroups), %y", status);
- return false;
- }
- my_grps = (PTOKEN_GROUPS) alloca (size);
- status = NtQueryInformationToken (token, TokenGroups, my_grps, size, &size);
- if (!NT_SUCCESS (status))
- {
- debug_printf ("NtQueryInformationToken(my_token, TokenGroups), %y",
- status);
- return false;
- }
-
- bool sawpg = false;
-
- if (groups.issetgroups ()) /* setgroups was called */
- {
- cygpsid gsid;
- bool saw[groups.sgsids.count ()];
-
- /* Check that all groups in the setgroups () list are in the token.
- A token created through ADVAPI should be allowed to contain more
- groups than requested through setgroups(), especially since Vista
- and the addition of integrity groups. */
- memset (saw, 0, sizeof(saw));
- for (int gidx = 0; gidx < groups.sgsids.count (); gidx++)
- {
- gsid = groups.sgsids.sids[gidx];
- if (sid_in_token_groups (my_grps, gsid))
- {
- int pos = groups.sgsids.position (gsid);
- if (pos >= 0)
- saw[pos] = true;
- else if (groups.pgsid == gsid)
- sawpg = true;
- }
- }
- /* user.sgsids groups must be in the token, except for builtin groups.
- These can be different on domain member machines compared to
- domain controllers, so these builtin groups may be validly missing
- from a token created through password or lsaauth logon. */
- for (int gidx = 0; gidx < groups.sgsids.count (); gidx++)
- if (!saw[gidx]
- && !groups.sgsids.sids[gidx].is_well_known_sid ()
- && !sid_in_token_groups (my_grps, groups.sgsids.sids[gidx]))
- return false;
- }
- /* The primary group must be in the token */
- return sawpg
- || sid_in_token_groups (my_grps, groups.pgsid)
- || groups.pgsid == usersid;
-}
-
-HANDLE
-create_token (cygsid &usersid, user_groups &new_groups, struct passwd *pw)
-{
- NTSTATUS status;
- LSA_HANDLE lsa = NULL;
-
- cygsidlist tmp_gsids (cygsidlist_auto, 12);
-
- SECURITY_QUALITY_OF_SERVICE sqos =
- { sizeof sqos, SecurityImpersonation, SECURITY_STATIC_TRACKING, FALSE };
- OBJECT_ATTRIBUTES oa = { sizeof oa, 0, 0, 0, 0, &sqos };
- LUID auth_luid = SYSTEM_LUID;
- LARGE_INTEGER exp = { QuadPart:INT64_MAX };
-
- TOKEN_USER user;
- PTOKEN_GROUPS new_tok_gsids = NULL;
- PTOKEN_PRIVILEGES privs = NULL;
- TOKEN_OWNER owner;
- TOKEN_PRIMARY_GROUP pgrp;
- TOKEN_DEFAULT_DACL dacl = {};
- TOKEN_SOURCE source;
- TOKEN_STATISTICS stats;
- memcpy (source.SourceName, "Cygwin.1", 8);
- source.SourceIdentifier.HighPart = 0;
- source.SourceIdentifier.LowPart = 0x0101;
-
- HANDLE token = INVALID_HANDLE_VALUE;
- HANDLE primary_token = INVALID_HANDLE_VALUE;
-
- PTOKEN_GROUPS my_tok_gsids = NULL;
- cygpsid mandatory_integrity_sid;
- ULONG size;
- size_t psize = 0;
-
- /* SE_CREATE_TOKEN_NAME privilege needed to call NtCreateToken. */
- push_self_privilege (SE_CREATE_TOKEN_PRIVILEGE, true);
-
- /* Open policy object. */
- if (!(lsa = lsa_open_policy (NULL, POLICY_EXECUTE)))
- goto out;
-
- /* User, owner, primary group. */
- user.User.Sid = usersid;
- user.User.Attributes = 0;
- owner.Owner = usersid;
-
- /* Retrieve authentication id and group list from own process. */
- if (hProcToken)
- {
- /* Switching user context to SYSTEM doesn't inherit the authentication
- id of the user account running current process. */
- if (usersid == well_known_system_sid)
- /* nothing to do */;
- else
- {
- status = NtQueryInformationToken (hProcToken, TokenStatistics,
- &stats, sizeof stats, &size);
- if (!NT_SUCCESS (status))
- debug_printf ("NtQueryInformationToken(hProcToken, "
- "TokenStatistics), %y", status);
- else
- auth_luid = stats.AuthenticationId;
- }
-
- /* Retrieving current processes group list to be able to inherit
- some important well known group sids. */
- status = NtQueryInformationToken (hProcToken, TokenGroups, NULL, 0,
- &size);
- if (!NT_SUCCESS (status) && status != STATUS_BUFFER_TOO_SMALL)
- debug_printf ("NtQueryInformationToken(hProcToken, TokenGroups), %y",
- status);
- else if (!(my_tok_gsids = (PTOKEN_GROUPS) malloc (size)))
- debug_printf ("malloc (my_tok_gsids) failed.");
- else
- {
- status = NtQueryInformationToken (hProcToken, TokenGroups,
- my_tok_gsids, size, &size);
- if (!NT_SUCCESS (status))
- {
- debug_printf ("NtQueryInformationToken(hProcToken, TokenGroups), "
- "%y", status);
- free (my_tok_gsids);
- my_tok_gsids = NULL;
- }
- }
- }
-
- /* Create list of groups, the user is member in. */
- int auth_pos;
- if (new_groups.issetgroups ())
- get_setgroups_sidlist (tmp_gsids, usersid, pw, my_tok_gsids, new_groups,
- auth_luid, auth_pos);
- else if (!get_initgroups_sidlist (tmp_gsids, usersid, new_groups.pgsid, pw,
- my_tok_gsids, auth_luid, auth_pos))
- goto out;
-
- /* Primary group. */
- pgrp.PrimaryGroup = new_groups.pgsid;
-
- /* Create a TOKEN_GROUPS list from the above retrieved list of sids. */
- new_tok_gsids = (PTOKEN_GROUPS)
- alloca (sizeof (DWORD) + (tmp_gsids.count () + 1)
- * sizeof (SID_AND_ATTRIBUTES));
- new_tok_gsids->GroupCount = tmp_gsids.count ();
- for (DWORD i = 0; i < new_tok_gsids->GroupCount; ++i)
- {
- new_tok_gsids->Groups[i].Sid = tmp_gsids.sids[i];
- new_tok_gsids->Groups[i].Attributes = SE_GROUP_MANDATORY
- | SE_GROUP_ENABLED_BY_DEFAULT
- | SE_GROUP_ENABLED;
- }
- if (auth_pos >= 0)
- new_tok_gsids->Groups[auth_pos].Attributes |= SE_GROUP_LOGON_ID;
-
- /* Retrieve list of privileges of that user. Based on the usersid and
- the returned privileges, get_priv_list sets the mandatory_integrity_sid
- pointer to the correct MIC SID for UAC. */
- if (!(privs = get_priv_list (lsa, usersid, tmp_gsids, psize,
- &mandatory_integrity_sid)))
- goto out;
-
- /* On systems supporting Mandatory Integrity Control, add the MIC SID. */
- if (wincap.has_mandatory_integrity_control ())
- {
- new_tok_gsids->Groups[new_tok_gsids->GroupCount].Attributes =
- SE_GROUP_INTEGRITY | SE_GROUP_INTEGRITY_ENABLED;
- new_tok_gsids->Groups[new_tok_gsids->GroupCount++].Sid
- = mandatory_integrity_sid;
- }
-
- /* Let's be heroic... */
- status = NtCreateToken (&token, TOKEN_ALL_ACCESS, &oa, TokenImpersonation,
- &auth_luid, &exp, &user, new_tok_gsids, privs, &owner,
- &pgrp, &dacl, &source);
- if (status)
- __seterrno_from_nt_status (status);
- else
- {
- /* Convert to primary token. */
- if (!DuplicateTokenEx (token, MAXIMUM_ALLOWED, &sec_none,
- SecurityImpersonation, TokenPrimary,
- &primary_token))
- {
- __seterrno ();
- debug_printf ("DuplicateTokenEx %E");
- }
- }
-
-out:
- pop_self_privilege ();
- if (token != INVALID_HANDLE_VALUE)
- CloseHandle (token);
- if (privs)
- free (privs);
- if (my_tok_gsids)
- free (my_tok_gsids);
- lsa_close_policy (lsa);
-
- debug_printf ("%p = create_token ()", primary_token);
- return primary_token;
-}
-
-HANDLE
-lsaauth (cygsid &usersid, user_groups &new_groups, struct passwd *pw)
-{
- cygsidlist tmp_gsids (cygsidlist_auto, 12);
- cygpsid pgrpsid;
- LSA_STRING name;
- HANDLE lsa_hdl = NULL, lsa = NULL;
- LSA_OPERATIONAL_MODE sec_mode;
- NTSTATUS status, sub_status;
- ULONG package_id, size;
- LUID auth_luid = SYSTEM_LUID;
- struct {
- LSA_STRING str;
- CHAR buf[16];
- } origin;
- DWORD ulen = UNLEN + 1;
- DWORD dlen = MAX_DOMAIN_NAME_LEN + 1;
- SID_NAME_USE use;
- cyglsa_t *authinf = NULL;
- ULONG authinf_size;
- TOKEN_SOURCE ts;
- PCYG_TOKEN_GROUPS gsids = NULL;
- PTOKEN_PRIVILEGES privs = NULL;
- PACL dacl = NULL;
- PVOID profile = NULL;
- LUID luid;
- QUOTA_LIMITS quota;
- size_t psize = 0, gsize = 0, dsize = 0;
- OFFSET offset, sids_offset;
- int tmpidx, non_well_known_cnt;
-
- HANDLE user_token = NULL;
-
- push_self_privilege (SE_TCB_PRIVILEGE, true);
-
- /* Register as logon process. */
- RtlInitAnsiString (&name, "Cygwin");
- SetLastError (0);
- status = LsaRegisterLogonProcess (&name, &lsa_hdl, &sec_mode);
- if (status != STATUS_SUCCESS)
- {
- debug_printf ("LsaRegisterLogonProcess: %y", status);
- __seterrno_from_nt_status (status);
- goto out;
- }
- else if (GetLastError () == ERROR_PROC_NOT_FOUND)
- {
- debug_printf ("Couldn't load Secur32.dll");
- goto out;
- }
- /* Get handle to our own LSA package. */
- RtlInitAnsiString (&name, CYG_LSA_PKGNAME);
- status = LsaLookupAuthenticationPackage (lsa_hdl, &name, &package_id);
- if (status != STATUS_SUCCESS)
- {
- debug_printf ("LsaLookupAuthenticationPackage: %y", status);
- __seterrno_from_nt_status (status);
- goto out;
- }
-
- /* Open policy object. */
- if (!(lsa = lsa_open_policy (NULL, POLICY_EXECUTE)))
- goto out;
-
- /* Create origin. */
- stpcpy (origin.buf, "Cygwin");
- RtlInitAnsiString (&origin.str, origin.buf);
- /* Create token source. */
- memcpy (ts.SourceName, "Cygwin.1", 8);
- ts.SourceIdentifier.HighPart = 0;
- ts.SourceIdentifier.LowPart = 0x0103;
-
- /* Create list of groups, the user is member in. */
- int auth_pos;
- if (new_groups.issetgroups ())
- get_setgroups_sidlist (tmp_gsids, usersid, pw, NULL, new_groups, auth_luid,
- auth_pos);
- else if (!get_initgroups_sidlist (tmp_gsids, usersid, new_groups.pgsid, pw,
- NULL, auth_luid, auth_pos))
- goto out;
-
- tmp_gsids.debug_print ("tmp_gsids");
-
- /* Evaluate size of TOKEN_GROUPS list */
- non_well_known_cnt = tmp_gsids.non_well_known_count ();
- gsize = sizeof (DWORD) + non_well_known_cnt * sizeof (SID_AND_ATTRIBUTES);
- tmpidx = -1;
- for (int i = 0; i < non_well_known_cnt; ++i)
- if ((tmpidx = tmp_gsids.next_non_well_known_sid (tmpidx)) >= 0)
- gsize += RtlLengthSid (tmp_gsids.sids[tmpidx]);
-
- /* Retrieve list of privileges of that user. The MIC SID is created by
- the LSA here. */
- if (!(privs = get_priv_list (lsa, usersid, tmp_gsids, psize, NULL)))
- goto out;
-
- /* Create DefaultDacl. */
- dsize = sizeof (ACL) + 3 * sizeof (ACCESS_ALLOWED_ACE)
- + RtlLengthSid (usersid)
- + RtlLengthSid (well_known_admins_sid)
- + RtlLengthSid (well_known_system_sid);
- dacl = (PACL) alloca (dsize);
- if (!NT_SUCCESS (RtlCreateAcl (dacl, dsize, ACL_REVISION)))
- goto out;
- if (!NT_SUCCESS (RtlAddAccessAllowedAce (dacl, ACL_REVISION, GENERIC_ALL,
- usersid)))
- goto out;
- if (!NT_SUCCESS (RtlAddAccessAllowedAce (dacl, ACL_REVISION, GENERIC_ALL,
- well_known_admins_sid)))
- goto out;
- if (!NT_SUCCESS (RtlAddAccessAllowedAce (dacl, ACL_REVISION, GENERIC_ALL,
- well_known_system_sid)))
- goto out;
-
- /* Evaluate authinf size and allocate authinf. */
- authinf_size = (authinf->data - (PBYTE) authinf);
- authinf_size += RtlLengthSid (usersid); /* User SID */
- authinf_size += gsize; /* Groups + Group SIDs */
- /* When trying to define the admins group as primary group on Vista,
- LsaLogonUser fails with error STATUS_INVALID_OWNER. As workaround
- we define "Local" as primary group here. Seteuid32 sets the primary
- group to the group set in /etc/passwd anyway. */
- if (new_groups.pgsid == well_known_admins_sid)
- pgrpsid = well_known_local_sid;
- else
- pgrpsid = new_groups.pgsid;
-
- authinf_size += RtlLengthSid (pgrpsid); /* Primary Group SID */
-
- authinf_size += psize; /* Privileges */
- authinf_size += 0; /* Owner SID */
- authinf_size += dsize; /* Default DACL */
-
- authinf = (cyglsa_t *) alloca (authinf_size);
- authinf->inf_size = authinf_size - ((PBYTE) &authinf->inf - (PBYTE) authinf);
-
- authinf->magic = CYG_LSA_MAGIC;
-
- if (!LookupAccountSidW (NULL, usersid, authinf->username, &ulen,
- authinf->domain, &dlen, &use))
- {
- __seterrno ();
- goto out;
- }
-
- /* Store stuff in authinf with offset relative to start of "inf" member,
- instead of using pointers. */
- offset = authinf->data - (PBYTE) &authinf->inf;
-
- authinf->inf.ExpirationTime.LowPart = 0xffffffffL;
- authinf->inf.ExpirationTime.HighPart = 0x7fffffffL;
- /* User SID */
- authinf->inf.User.User.Sid = offset;
- authinf->inf.User.User.Attributes = 0;
- RtlCopySid (RtlLengthSid (usersid), (PSID) ((PBYTE) &authinf->inf + offset),
- usersid);
- offset += RtlLengthSid (usersid);
- /* Groups */
- authinf->inf.Groups = offset;
- gsids = (PCYG_TOKEN_GROUPS) ((PBYTE) &authinf->inf + offset);
- sids_offset = offset + sizeof (ULONG) + non_well_known_cnt
- * sizeof (SID_AND_ATTRIBUTES);
- gsids->GroupCount = non_well_known_cnt;
- /* Group SIDs */
- tmpidx = -1;
- for (int i = 0; i < non_well_known_cnt; ++i)
- {
- if ((tmpidx = tmp_gsids.next_non_well_known_sid (tmpidx)) < 0)
- break;
- gsids->Groups[i].Sid = sids_offset;
- gsids->Groups[i].Attributes = SE_GROUP_MANDATORY
- | SE_GROUP_ENABLED_BY_DEFAULT
- | SE_GROUP_ENABLED;
- RtlCopySid (RtlLengthSid (tmp_gsids.sids[tmpidx]),
- (PSID) ((PBYTE) &authinf->inf + sids_offset),
- tmp_gsids.sids[tmpidx]);
- sids_offset += RtlLengthSid (tmp_gsids.sids[tmpidx]);
- }
- offset += gsize;
- /* Primary Group SID */
- authinf->inf.PrimaryGroup.PrimaryGroup = offset;
- RtlCopySid (RtlLengthSid (pgrpsid), (PSID) ((PBYTE) &authinf->inf + offset),
- pgrpsid);
- offset += RtlLengthSid (pgrpsid);
- /* Privileges */
- authinf->inf.Privileges = offset;
- memcpy ((PBYTE) &authinf->inf + offset, privs, psize);
- offset += psize;
- /* Owner */
- authinf->inf.Owner.Owner = 0;
- /* Default DACL */
- authinf->inf.DefaultDacl.DefaultDacl = offset;
- memcpy ((PBYTE) &authinf->inf + offset, dacl, dsize);
-
- authinf->checksum = CYG_LSA_MAGIC;
- PDWORD csp;
- PDWORD csp_end;
- csp = (PDWORD) &authinf->username;
- csp_end = (PDWORD) ((PBYTE) authinf + authinf_size);
- while (csp < csp_end)
- authinf->checksum += *csp++;
-
- /* Try to logon... */
- status = LsaLogonUser (lsa_hdl, (PLSA_STRING) &origin, Interactive,
- package_id, authinf, authinf_size, NULL, &ts,
- &profile, &size, &luid, &user_token, &quota,
- &sub_status);
- if (status != STATUS_SUCCESS)
- {
- debug_printf ("LsaLogonUser: %y (sub-status %y)", status, sub_status);
- __seterrno_from_nt_status (status);
- goto out;
- }
- if (profile)
- {
-#ifdef JUST_ANOTHER_NONWORKING_SOLUTION
- /* See ../lsaauth/cyglsa.c. */
- cygprf_t *prf = (cygprf_t *) profile;
- if (prf->magic_pre == MAGIC_PRE && prf->magic_post == MAGIC_POST
- && prf->token)
- {
- CloseHandle (user_token);
- user_token = prf->token;
- system_printf ("Got token through profile: %p", user_token);
- }
-#endif /* JUST_ANOTHER_NONWORKING_SOLUTION */
- LsaFreeReturnBuffer (profile);
- }
- user_token = get_full_privileged_inheritable_token (user_token);
-
-out:
- if (privs)
- free (privs);
- lsa_close_policy (lsa);
- if (lsa_hdl)
- LsaDeregisterLogonProcess (lsa_hdl);
- pop_self_privilege ();
-
- debug_printf ("%p = lsaauth ()", user_token);
- return user_token;
-}
-
-#define SFU_LSA_KEY_SUFFIX L"_microsoft_sfu_utility"
-
-HANDLE
-lsaprivkeyauth (struct passwd *pw)
-{
- NTSTATUS status;
- HANDLE lsa = NULL;
- HANDLE token = NULL;
- WCHAR sid[256];
- WCHAR domain[MAX_DOMAIN_NAME_LEN + 1];
- WCHAR user[UNLEN + 1];
- WCHAR key_name[MAX_DOMAIN_NAME_LEN + UNLEN + wcslen (SFU_LSA_KEY_SUFFIX) + 2];
- UNICODE_STRING key;
- PUNICODE_STRING data = NULL;
- cygsid psid;
- BOOL ret;
-
- push_self_privilege (SE_TCB_PRIVILEGE, true);
-
- /* Open policy object. */
- if (!(lsa = lsa_open_policy (NULL, POLICY_GET_PRIVATE_INFORMATION)))
- goto out;
-
- /* Needed for Interix key and LogonUser. */
- extract_nt_dom_user (pw, domain, user);
-
- /* First test for a Cygwin entry. */
- if (psid.getfrompw (pw) && psid.string (sid))
- {
- wcpcpy (wcpcpy (key_name, CYGWIN_LSA_KEY_PREFIX), sid);
- RtlInitUnicodeString (&key, key_name);
- status = LsaRetrievePrivateData (lsa, &key, &data);
- if (!NT_SUCCESS (status))
- data = NULL;
- }
- /* No Cygwin key, try Interix key. */
- if (!data && *domain)
- {
- __small_swprintf (key_name, L"%W_%W%W",
- domain, user, SFU_LSA_KEY_SUFFIX);
- RtlInitUnicodeString (&key, key_name);
- status = LsaRetrievePrivateData (lsa, &key, &data);
- if (!NT_SUCCESS (status))
- data = NULL;
- }
- /* Found an entry? Try to logon. */
- if (data)
- {
- /* The key is not 0-terminated. */
- PWCHAR passwd;
- size_t pwdsize = data->Length + sizeof (WCHAR);
-
- passwd = (PWCHAR) alloca (pwdsize);
- *wcpncpy (passwd, data->Buffer, data->Length / sizeof (WCHAR)) = L'\0';
- /* Weird: LsaFreeMemory invalidates the content of the UNICODE_STRING
- structure, but it does not invalidate the Buffer content. */
- RtlSecureZeroMemory (data->Buffer, data->Length);
- LsaFreeMemory (data);
- debug_printf ("Try logon for %W\\%W", domain, user);
- ret = LogonUserW (user, domain, passwd, LOGON32_LOGON_INTERACTIVE,
- LOGON32_PROVIDER_DEFAULT, &token);
- RtlSecureZeroMemory (passwd, pwdsize);
- if (!ret)
- {
- __seterrno ();
- token = NULL;
- }
- else
- token = get_full_privileged_inheritable_token (token);
- }
- lsa_close_policy (lsa);
-
-out:
- pop_self_privilege ();
- return token;
-}
diff --git a/winsup/cygwin/sec_helper.cc b/winsup/cygwin/sec_helper.cc
deleted file mode 100644
index 946e78a8e..000000000
--- a/winsup/cygwin/sec_helper.cc
+++ /dev/null
@@ -1,704 +0,0 @@
-/* sec_helper.cc: NT security helper functions
-
- Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
- 2011, 2012, 2013, 2014 Red Hat, Inc.
-
- Written by Corinna Vinschen <corinna@vinschen.de>
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include <stdlib.h>
-#include <sys/acl.h>
-#include <wchar.h>
-#include "cygerrno.h"
-#include "security.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "pinfo.h"
-#include "cygheap.h"
-#include "ntdll.h"
-#include "ldap.h"
-
-/* General purpose security attribute objects for global use. */
-static NO_COPY_RO SECURITY_DESCRIPTOR null_sdp =
- { SECURITY_DESCRIPTOR_REVISION, 0, SE_DACL_PRESENT,
- NULL, NULL, NULL, NULL };
-SECURITY_ATTRIBUTES NO_COPY_RO sec_none =
- { sizeof (SECURITY_ATTRIBUTES), NULL, TRUE };
-SECURITY_ATTRIBUTES NO_COPY_RO sec_none_nih =
- { sizeof (SECURITY_ATTRIBUTES), NULL, FALSE };
-SECURITY_ATTRIBUTES NO_COPY_RO sec_all =
- { sizeof (SECURITY_ATTRIBUTES), &null_sdp, TRUE };
-SECURITY_ATTRIBUTES NO_COPY_RO sec_all_nih =
- { sizeof (SECURITY_ATTRIBUTES), &null_sdp, FALSE };
-
-MKSID (well_known_null_sid, "S-1-0-0",
- SECURITY_NULL_SID_AUTHORITY, 1, SECURITY_NULL_RID);
-MKSID (well_known_world_sid, "S-1-1-0",
- SECURITY_WORLD_SID_AUTHORITY, 1, SECURITY_WORLD_RID);
-MKSID (well_known_local_sid, "S-1-2-0",
- SECURITY_LOCAL_SID_AUTHORITY, 1, SECURITY_LOCAL_RID);
-MKSID (well_known_console_logon_sid, "S-1-2-1",
- SECURITY_LOCAL_SID_AUTHORITY, 1, 1);
-MKSID (well_known_creator_owner_sid, "S-1-3-0",
- SECURITY_CREATOR_SID_AUTHORITY, 1, SECURITY_CREATOR_OWNER_RID);
-MKSID (well_known_creator_group_sid, "S-1-3-1",
- SECURITY_CREATOR_SID_AUTHORITY, 1, SECURITY_CREATOR_GROUP_RID);
-MKSID (well_known_dialup_sid, "S-1-5-1",
- SECURITY_NT_AUTHORITY, 1, SECURITY_DIALUP_RID);
-MKSID (well_known_network_sid, "S-1-5-2",
- SECURITY_NT_AUTHORITY, 1, SECURITY_NETWORK_RID);
-MKSID (well_known_batch_sid, "S-1-5-3",
- SECURITY_NT_AUTHORITY, 1, SECURITY_BATCH_RID);
-MKSID (well_known_interactive_sid, "S-1-5-4",
- SECURITY_NT_AUTHORITY, 1, SECURITY_INTERACTIVE_RID);
-MKSID (well_known_service_sid, "S-1-5-6",
- SECURITY_NT_AUTHORITY, 1, SECURITY_SERVICE_RID);
-MKSID (well_known_authenticated_users_sid, "S-1-5-11",
- SECURITY_NT_AUTHORITY, 1, SECURITY_AUTHENTICATED_USER_RID);
-MKSID (well_known_this_org_sid, "S-1-5-15",
- SECURITY_NT_AUTHORITY, 1, 15);
-MKSID (well_known_system_sid, "S-1-5-18",
- SECURITY_NT_AUTHORITY, 1, SECURITY_LOCAL_SYSTEM_RID);
-MKSID (well_known_local_service_sid, "S-1-5-19",
- SECURITY_NT_AUTHORITY, 1, SECURITY_LOCAL_SERVICE_RID);
-MKSID (well_known_network_service_sid, "S-1-5-20",
- SECURITY_NT_AUTHORITY, 1, SECURITY_NETWORK_SERVICE_RID);
-MKSID (well_known_builtin_sid, "S-1-5-32",
- SECURITY_NT_AUTHORITY, 1, SECURITY_BUILTIN_DOMAIN_RID);
-MKSID (well_known_admins_sid, "S-1-5-32-544",
- SECURITY_NT_AUTHORITY, 2, SECURITY_BUILTIN_DOMAIN_RID,
- DOMAIN_ALIAS_RID_ADMINS);
-MKSID (well_known_users_sid, "S-1-5-32-545",
- SECURITY_NT_AUTHORITY, 2, SECURITY_BUILTIN_DOMAIN_RID,
- DOMAIN_ALIAS_RID_USERS);
-MKSID (trusted_installer_sid,
- "S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464",
- SECURITY_NT_AUTHORITY, SECURITY_SERVICE_ID_RID_COUNT,
- SECURITY_SERVICE_ID_BASE_RID, 956008885U, 3418522649U, 1831038044U,
- 1853292631U, 2271478464U);
-MKSID (mandatory_medium_integrity_sid, "S-1-16-8192",
- SECURITY_MANDATORY_LABEL_AUTHORITY, 1, SECURITY_MANDATORY_MEDIUM_RID);
-MKSID (mandatory_high_integrity_sid, "S-1-16-12288",
- SECURITY_MANDATORY_LABEL_AUTHORITY, 1, SECURITY_MANDATORY_HIGH_RID);
-MKSID (mandatory_system_integrity_sid, "S-1-16-16384",
- SECURITY_MANDATORY_LABEL_AUTHORITY, 1, SECURITY_MANDATORY_SYSTEM_RID);
-/* UNIX accounts on a Samba server have the SID prefix "S-1-22-1" */
-#define SECURITY_SAMBA_UNIX_AUTHORITY {0,0,0,0,0,22}
-MKSID (well_known_samba_unix_user_fake_sid, "S-1-22-1-0",
- SECURITY_SAMBA_UNIX_AUTHORITY, 2, 1, 0);
-
-bool
-cygpsid::operator== (const char *nsidstr) const
-{
- cygsid nsid (nsidstr);
- return psid == nsid;
-}
-
-uid_t
-cygpsid::get_id (BOOL search_grp, int *type, cyg_ldap *pldap)
-{
- /* First try to get SID from group, then passwd */
- uid_t id = ILLEGAL_UID;
-
- if (search_grp)
- {
- struct group *gr;
- if (cygheap->user.groups.pgsid == psid)
- id = myself->gid;
- else if (sid_id_auth (psid) == 22)
- {
- /* Samba UNIX group. Try to map to Cygwin gid. If there's no
- mapping in the cache, try to fetch it from the configured
- RFC 2307 domain (see last comment in cygheap_domain_info::init()
- for more information) and add it to the mapping cache. */
- gid_t gid = sid_sub_auth_rid (psid);
- gid_t map_gid = cygheap->ugid_cache.get_gid (gid);
- if (map_gid == ILLEGAL_GID)
- {
- if (pldap->open (cygheap->dom.get_rfc2307_domain ()) == NO_ERROR)
- map_gid = pldap->remap_gid (gid);
- if (map_gid == ILLEGAL_GID)
- map_gid = MAP_UNIX_TO_CYGWIN_ID (gid);
- cygheap->ugid_cache.add_gid (gid, map_gid);
- }
- id = (uid_t) map_gid;
- }
- else if ((gr = internal_getgrsid (*this, pldap)))
- id = gr->gr_gid;
- if ((gid_t) id != ILLEGAL_GID)
- {
- if (type)
- *type = GROUP;
- return id;
- }
- }
- if (!search_grp || type)
- {
- struct passwd *pw;
- if (*this == cygheap->user.sid ())
- id = myself->uid;
- else if (sid_id_auth (psid) == 22)
- {
- /* Samba UNIX user. See comment above. */
- uid_t uid = sid_sub_auth_rid (psid);
- uid_t map_uid = cygheap->ugid_cache.get_uid (uid);
- if (map_uid == ILLEGAL_UID)
- {
- if (pldap->open (cygheap->dom.get_rfc2307_domain ()) == NO_ERROR)
- map_uid = pldap->remap_uid (uid);
- if (map_uid == ILLEGAL_UID)
- map_uid = MAP_UNIX_TO_CYGWIN_ID (uid);
- cygheap->ugid_cache.add_uid (uid, map_uid);
- }
- id = map_uid;
- }
- else if ((pw = internal_getpwsid (*this, pldap)))
- id = pw->pw_uid;
- if (id != ILLEGAL_UID && type)
- *type = USER;
- }
- return id;
-}
-
-PWCHAR
-cygpsid::pstring (PWCHAR nsidstr) const
-{
- UNICODE_STRING sid;
-
- if (!psid || !nsidstr)
- return NULL;
- RtlInitEmptyUnicodeString (&sid, nsidstr, 256);
- RtlConvertSidToUnicodeString (&sid, psid, FALSE);
- return nsidstr + sid.Length / sizeof (WCHAR);
-}
-
-PWCHAR
-cygpsid::string (PWCHAR nsidstr) const
-{
- if (pstring (nsidstr))
- return nsidstr;
- return NULL;
-}
-
-char *
-cygpsid::pstring (char *nsidstr) const
-{
- char *t;
- DWORD i;
-
- if (!psid || !nsidstr)
- return NULL;
- strcpy (nsidstr, "S-1-");
- t = nsidstr + sizeof ("S-1-") - 1;
- t += __small_sprintf (t, "%u", sid_id_auth (psid));
- for (i = 0; i < sid_sub_auth_count (psid); ++i)
- t += __small_sprintf (t, "-%lu", sid_sub_auth (psid, i));
- return t;
-}
-
-char *
-cygpsid::string (char *nsidstr) const
-{
- if (pstring (nsidstr))
- return nsidstr;
- return NULL;
-}
-
-PSID
-cygsid::get_sid (DWORD s, DWORD cnt, DWORD *r, bool well_known)
-{
- DWORD i;
- SID_IDENTIFIER_AUTHORITY sid_auth = { SECURITY_NULL_SID_AUTHORITY };
-# define SECURITY_NT_AUTH 5
-
- if (s > 255 || cnt < 1 || cnt > SID_MAX_SUB_AUTHORITIES)
- {
- psid = NO_SID;
- return NULL;
- }
- sid_auth.Value[5] = s;
- set ();
- RtlInitializeSid (psid, &sid_auth, cnt);
- PISID dsid = (PISID) psid;
- for (i = 0; i < cnt; ++i)
- dsid->SubAuthority[i] = r[i];
- /* If the well_known flag isn't set explicitely, we check the SID
- for being a well-known SID ourselves. That's necessary because this
- cygsid is created from a SID string, usually from /etc/passwd or
- /etc/group. The calling code just doesn't know if the SID is well-known
- or not. All SIDs are well-known SIDs, except those in the non-unique NT
- authority range. */
- if (well_known)
- well_known_sid = well_known;
- else
- well_known_sid = (s != SECURITY_NT_AUTH
- || r[0] != SECURITY_NT_NON_UNIQUE);
- return psid;
-}
-
-const PSID
-cygsid::getfromstr (PCWSTR nsidstr, bool well_known)
-{
- PWCHAR lasts;
- DWORD s, cnt = 0;
- DWORD r[SID_MAX_SUB_AUTHORITIES];
-
- if (nsidstr && !wcsncmp (nsidstr, L"S-1-", 4))
- {
- s = wcstoul (nsidstr + 4, &lasts, 10);
- while (cnt < SID_MAX_SUB_AUTHORITIES && *lasts == '-')
- r[cnt++] = wcstoul (lasts + 1, &lasts, 10);
- if (!*lasts)
- return get_sid (s, cnt, r, well_known);
- }
- return psid = NO_SID;
-}
-
-const PSID
-cygsid::getfromstr (const char *nsidstr, bool well_known)
-{
- char *lasts;
- DWORD s, cnt = 0;
- DWORD r[SID_MAX_SUB_AUTHORITIES];
-
- if (nsidstr && !strncmp (nsidstr, "S-1-", 4))
- {
- s = strtoul (nsidstr + 4, &lasts, 10);
- while (cnt < SID_MAX_SUB_AUTHORITIES && *lasts == '-')
- r[cnt++] = strtoul (lasts + 1, &lasts, 10);
- if (!*lasts)
- return get_sid (s, cnt, r, well_known);
- }
- return psid = NO_SID;
-}
-
-BOOL
-cygsid::getfrompw (const struct passwd *pw)
-{
- char *sp = (pw && pw->pw_gecos) ? strrchr (pw->pw_gecos, ',') : NULL;
- return (*this = sp ? sp + 1 : sp) != NULL;
-}
-
-BOOL
-cygsid::getfromgr (const struct group *gr)
-{
- char *sp = (gr && gr->gr_passwd) ? gr->gr_passwd : NULL;
- return (*this = sp) != NULL;
-}
-
-cygsid *
-cygsidlist::alloc_sids (int n)
-{
- if (n > 0)
- return (cygsid *) cmalloc (HEAP_STR, n * sizeof (cygsid));
- else
- return NULL;
-}
-
-void
-cygsidlist::free_sids ()
-{
- if (sids)
- cfree (sids);
- sids = NULL;
- cnt = maxcnt = 0;
- type = cygsidlist_empty;
-}
-
-BOOL
-cygsidlist::add (const PSID nsi, bool well_known)
-{
- if (contains (nsi))
- return TRUE;
- if (cnt >= maxcnt)
- {
- cygsid *tmp = new cygsid [2 * maxcnt];
- if (!tmp)
- return FALSE;
- maxcnt *= 2;
- for (int i = 0; i < cnt; ++i)
- tmp[i] = sids[i];
- delete [] sids;
- sids = tmp;
- }
- if (well_known)
- sids[cnt++] *= nsi;
- else
- sids[cnt++] = nsi;
- return TRUE;
-}
-
-bool
-get_sids_info (cygpsid owner_sid, cygpsid group_sid, uid_t * uidret, gid_t * gidret)
-{
- BOOL ret = false;
- cyg_ldap cldap;
-
- owner_sid.debug_print ("get_sids_info: owner SID =");
- group_sid.debug_print ("get_sids_info: group SID =");
-
- *uidret = owner_sid.get_uid (&cldap);
- *gidret = group_sid.get_gid (&cldap);
- if (*uidret == myself->uid)
- {
- if (*gidret == myself->gid)
- ret = TRUE;
- else
- CheckTokenMembership (cygheap->user.issetuid ()
- ? cygheap->user.imp_token () : NULL,
- group_sid, &ret);
- }
- return (bool) ret;
-}
-
-PSECURITY_DESCRIPTOR
-security_descriptor::malloc (size_t nsize)
-{
- free ();
- if ((psd = (PSECURITY_DESCRIPTOR) ::malloc (nsize)))
- sd_size = nsize;
- return psd;
-}
-
-PSECURITY_DESCRIPTOR
-security_descriptor::realloc (size_t nsize)
-{
- PSECURITY_DESCRIPTOR tmp;
-
- /* Can't re-use buffer allocated by GetSecurityInfo. */
- if (psd && !sd_size)
- free ();
- if (!(tmp = (PSECURITY_DESCRIPTOR) ::realloc (psd, nsize)))
- return NULL;
- sd_size = nsize;
- return psd = tmp;
-}
-
-void
-security_descriptor::free ()
-{
- if (psd)
- {
- if (!sd_size)
- LocalFree (psd);
- else
- ::free (psd);
- }
- psd = NULL;
- sd_size = 0;
-}
-
-#undef TEXT
-#define TEXT(q) L##q
-
-/* Index must match the corresponding foo_PRIVILEGE value, see security.h. */
-static const struct {
- const wchar_t *name;
- bool high_integrity; /* UAC: High Mandatory Label required to
- be allowed to enable this privilege in
- the user token. */
-} cygpriv[] =
-{
- { L"", false },
- { L"", false },
- { SE_CREATE_TOKEN_NAME, true },
- { SE_ASSIGNPRIMARYTOKEN_NAME, true },
- { SE_LOCK_MEMORY_NAME, false },
- { SE_INCREASE_QUOTA_NAME, true },
- { SE_MACHINE_ACCOUNT_NAME, false },
- { SE_TCB_NAME, true },
- { SE_SECURITY_NAME, true },
- { SE_TAKE_OWNERSHIP_NAME, true },
- { SE_LOAD_DRIVER_NAME, true },
- { SE_SYSTEM_PROFILE_NAME, true },
- { SE_SYSTEMTIME_NAME, true },
- { SE_PROF_SINGLE_PROCESS_NAME, true },
- { SE_INC_BASE_PRIORITY_NAME, true },
- { SE_CREATE_PAGEFILE_NAME, true },
- { SE_CREATE_PERMANENT_NAME, false },
- { SE_BACKUP_NAME, true },
- { SE_RESTORE_NAME, true },
- { SE_SHUTDOWN_NAME, false },
- { SE_DEBUG_NAME, true },
- { SE_AUDIT_NAME, false },
- { SE_SYSTEM_ENVIRONMENT_NAME, true },
- { SE_CHANGE_NOTIFY_NAME, false },
- { SE_REMOTE_SHUTDOWN_NAME, true },
- { SE_UNDOCK_NAME, false },
- { SE_SYNC_AGENT_NAME, false },
- { SE_ENABLE_DELEGATION_NAME, false },
- { SE_MANAGE_VOLUME_NAME, true },
- { SE_IMPERSONATE_NAME, true },
- { SE_CREATE_GLOBAL_NAME, false },
- { SE_TRUSTED_CREDMAN_ACCESS_NAME, false },
- { SE_RELABEL_NAME, true },
- { SE_INC_WORKING_SET_NAME, false },
- { SE_TIME_ZONE_NAME, true },
- { SE_CREATE_SYMBOLIC_LINK_NAME, true }
-};
-
-bool
-privilege_luid (const PWCHAR pname, LUID &luid, bool &high_integrity)
-{
- ULONG idx;
- for (idx = SE_CREATE_TOKEN_PRIVILEGE;
- idx <= SE_MAX_WELL_KNOWN_PRIVILEGE;
- ++idx)
- if (!wcscmp (cygpriv[idx].name, pname))
- {
- luid.HighPart = 0;
- luid.LowPart = idx;
- high_integrity = cygpriv[idx].high_integrity;
- return true;
- }
- return false;
-}
-
-static const wchar_t *
-privilege_name (const LUID &priv_luid)
-{
- if (priv_luid.HighPart || priv_luid.LowPart < SE_CREATE_TOKEN_PRIVILEGE
- || priv_luid.LowPart > SE_MAX_WELL_KNOWN_PRIVILEGE)
- return L"<unknown privilege>";
- return cygpriv[priv_luid.LowPart].name;
-}
-
-int
-set_privilege (HANDLE token, DWORD privilege, bool enable)
-{
- int ret = -1;
- TOKEN_PRIVILEGES new_priv, orig_priv;
- ULONG size;
- NTSTATUS status;
-
- new_priv.PrivilegeCount = 1;
- new_priv.Privileges[0].Luid.HighPart = 0L;
- new_priv.Privileges[0].Luid.LowPart = privilege;
- new_priv.Privileges[0].Attributes = enable ? SE_PRIVILEGE_ENABLED : 0;
-
- status = NtAdjustPrivilegesToken (token, FALSE, &new_priv, sizeof orig_priv,
- &orig_priv, &size);
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- goto out;
- }
-
- /* If orig_priv.PrivilegeCount is 0, the privilege hasn't been changed. */
- if (!orig_priv.PrivilegeCount)
- ret = enable ? 1 : 0;
- else
- ret = (orig_priv.Privileges[0].Attributes & SE_PRIVILEGE_ENABLED) ? 1 : 0;
-
-out:
- if (ret < 0)
- debug_printf ("%d = set_privilege((token %p) %W, %d)", ret, token,
- privilege_name (new_priv.Privileges[0].Luid), enable);
- return ret;
-}
-
-/* This is called very early in process initialization. The code must
- not depend on anything. */
-void
-set_cygwin_privileges (HANDLE token)
-{
- /* Setting these rights at process startup allows processes running under
- user tokens which are in the administrstors group to have root-like
- permissions. */
- /* Allow to access all files, independent of their ACL settings. */
- set_privilege (token, SE_RESTORE_PRIVILEGE, true);
- set_privilege (token, SE_BACKUP_PRIVILEGE, true);
- /* Allow full access to other user's processes. */
- set_privilege (token, SE_DEBUG_PRIVILEGE, true);
-#if 0
- /* Allow to create global shared memory. This isn't required anymore since
- Cygwin 1.7. It uses its own subdirectories in the global NT namespace
- which isn't affected by the SE_CREATE_GLOBAL_PRIVILEGE restriction. */
- set_privilege (token, SE_CREATE_GLOBAL_PRIVILEGE, true);
-#endif
-}
-
-bool
-sec_acl (PACL acl, bool original, bool admins, PSID sid1, PSID sid2, DWORD access2)
-{
- NTSTATUS status;
- size_t acl_len = MAX_DACL_LEN (5);
- LPVOID pAce;
- cygpsid psid;
-
-#ifdef DEBUGGING
- if ((unsigned long) acl % 4)
- api_fatal ("Incorrectly aligned incoming ACL buffer!");
-#endif
- status = RtlCreateAcl (acl, acl_len, ACL_REVISION);
- if (!NT_SUCCESS (status))
- {
- debug_printf ("RtlCreateAcl: %y", status);
- return false;
- }
- if (sid1)
- {
- status = RtlAddAccessAllowedAce (acl, ACL_REVISION, GENERIC_ALL, sid1);
- if (!NT_SUCCESS (status))
- debug_printf ("RtlAddAccessAllowedAce(sid1) %y", status);
- }
- if (original && (psid = cygheap->user.saved_sid ())
- && psid != sid1 && psid != well_known_system_sid)
- {
- status = RtlAddAccessAllowedAce (acl, ACL_REVISION, GENERIC_ALL, psid);
- if (!NT_SUCCESS (status))
- debug_printf ("RtlAddAccessAllowedAce(original) %y", status);
- }
- if (sid2)
- {
- status = RtlAddAccessAllowedAce (acl, ACL_REVISION, access2, sid2);
- if (!NT_SUCCESS (status))
- debug_printf ("RtlAddAccessAllowedAce(sid2) %y", status);
- }
- if (admins)
- {
- status = RtlAddAccessAllowedAce (acl, ACL_REVISION, GENERIC_ALL,
- well_known_admins_sid);
- if (!NT_SUCCESS (status))
- debug_printf ("RtlAddAccessAllowedAce(admin) %y", status);
- }
- status = RtlAddAccessAllowedAce (acl, ACL_REVISION, GENERIC_ALL,
- well_known_system_sid);
- if (!NT_SUCCESS (status))
- debug_printf ("RtlAddAccessAllowedAce(system) %y", status);
- status = RtlFirstFreeAce (acl, &pAce);
- if (NT_SUCCESS (status) && pAce)
- acl->AclSize = (char *) pAce - (char *) acl;
- else
- debug_printf ("RtlFirstFreeAce: %y", status);
-
- return true;
-}
-
-PSECURITY_ATTRIBUTES __reg3
-__sec_user (PVOID sa_buf, PSID sid1, PSID sid2, DWORD access2, BOOL inherit)
-{
- PSECURITY_ATTRIBUTES psa = (PSECURITY_ATTRIBUTES) sa_buf;
- PISECURITY_DESCRIPTOR psd = (PISECURITY_DESCRIPTOR)
- ((char *) sa_buf + sizeof (*psa));
- PACL acl = (PACL) ((char *) sa_buf + sizeof (*psa) + sizeof (*psd));
- NTSTATUS status;
-
-#ifdef DEBUGGING
- if ((unsigned long) sa_buf % 4)
- api_fatal ("Incorrectly aligned incoming SA buffer!");
-#endif
- if (!sec_acl (acl, true, true, sid1, sid2, access2))
- return inherit ? &sec_none : &sec_none_nih;
-
- RtlCreateSecurityDescriptor (psd, SECURITY_DESCRIPTOR_REVISION);
- status = RtlSetDaclSecurityDescriptor (psd, TRUE, acl, FALSE);
- if (!NT_SUCCESS (status))
- debug_printf ("RtlSetDaclSecurityDescriptor %y", status);
-
- psa->nLength = sizeof (SECURITY_ATTRIBUTES);
- psa->lpSecurityDescriptor = psd;
- psa->bInheritHandle = inherit;
- return psa;
-}
-
-/* Helper function to create a file security descriptor which allows
- full access to admins, system, and the sid given as parameter. See
- try_to_bin for how it's used. */
-
-PSECURITY_DESCRIPTOR
-_recycler_sd (void *buf, bool users, bool dir)
-{
- NTSTATUS status;
- PISECURITY_DESCRIPTOR psd = (PISECURITY_DESCRIPTOR) buf;
-
- if (!psd)
- return NULL;
- RtlCreateSecurityDescriptor (psd, SECURITY_DESCRIPTOR_REVISION);
- PACL dacl = (PACL) (psd + 1);
- /* Pre-Vista, the per-user recycler dir has a rather too complicated
- ACL by default, which has distinct ACEs for inheritable and non-inheritable
- permissions. However, this ACL is practically equivalent to the ACL
- created since Vista. Therefore we simplify our job here and create the
- pre-Vista permissions the same way as on Vista and later. */
- RtlCreateAcl (dacl, MAX_DACL_LEN (3), ACL_REVISION);
- RtlAddAccessAllowedAceEx (dacl, ACL_REVISION,
- dir ? CONTAINER_INHERIT_ACE | OBJECT_INHERIT_ACE
- : NO_INHERITANCE,
- FILE_ALL_ACCESS, well_known_admins_sid);
- RtlAddAccessAllowedAceEx (dacl, ACL_REVISION,
- dir ? CONTAINER_INHERIT_ACE | OBJECT_INHERIT_ACE
- : NO_INHERITANCE,
- FILE_ALL_ACCESS, well_known_system_sid);
- if (users)
- RtlAddAccessAllowedAceEx (dacl, ACL_REVISION, NO_PROPAGATE_INHERIT_ACE,
- FILE_GENERIC_READ | FILE_GENERIC_EXECUTE
- | FILE_APPEND_DATA | FILE_WRITE_ATTRIBUTES,
- well_known_users_sid);
- else
- RtlAddAccessAllowedAceEx (dacl, ACL_REVISION,
- dir ? CONTAINER_INHERIT_ACE
- | OBJECT_INHERIT_ACE
- : NO_INHERITANCE,
- FILE_ALL_ACCESS, cygheap->user.sid ());
- LPVOID ace;
- status = RtlFirstFreeAce (dacl, &ace);
- if (!NT_SUCCESS (status))
- {
- debug_printf ("RtlFirstFreeAce: %y", status);
- return NULL;
- }
- dacl->AclSize = (char *) ace - (char *) dacl;
- RtlSetDaclSecurityDescriptor (psd, TRUE, dacl, FALSE);
- /* If the directory DACL is not marked as protected, shell32 thinks
- the recycle dir is corrupted. As soon as Explorer accesses the
- Recycler, the user will get a GUI dialog "The Recycle Bin on X:\
- is corrupted. Do you want to empty the Recycle Bin for this drive?"
- Of course we want to avoid that. */
- if (dir)
- psd->Control |= SE_DACL_PROTECTED;
- return psd;
-}
-
-/* Helper function to create an event security descriptor which only allows
- specific access to everyone. Only the creating process has all access
- rights. */
-
-PSECURITY_DESCRIPTOR
-_everyone_sd (void *buf, ACCESS_MASK access)
-{
- NTSTATUS status;
- PISECURITY_DESCRIPTOR psd = (PISECURITY_DESCRIPTOR) buf;
-
- if (psd)
- {
- RtlCreateSecurityDescriptor (psd, SECURITY_DESCRIPTOR_REVISION);
- PACL dacl = (PACL) (psd + 1);
- RtlCreateAcl (dacl, MAX_DACL_LEN (1), ACL_REVISION);
- status = RtlAddAccessAllowedAce (dacl, ACL_REVISION, access,
- well_known_world_sid);
- if (!NT_SUCCESS (status))
- {
- debug_printf ("RtlAddAccessAllowedAce: %y", status);
- return NULL;
- }
- LPVOID ace;
- status = RtlFirstFreeAce (dacl, &ace);
- if (!NT_SUCCESS (status))
- {
- debug_printf ("RtlFirstFreeAce: %y", status);
- return NULL;
- }
- dacl->AclSize = (char *) ace - (char *) dacl;
- RtlSetDaclSecurityDescriptor (psd, TRUE, dacl, FALSE);
- }
- return psd;
-}
-
diff --git a/winsup/cygwin/security.cc b/winsup/cygwin/security.cc
deleted file mode 100644
index 4c46e05d9..000000000
--- a/winsup/cygwin/security.cc
+++ /dev/null
@@ -1,1208 +0,0 @@
-/* security.cc: NT file access control functions
-
- Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
- 2008, 2009, 2010, 2011, 2012, 2013, 2014 Red Hat, Inc.
-
- Originaly written by Gunther Ebert, gunther.ebert@ixos-leipzig.de
- Completely rewritten by Corinna Vinschen <corinna@vinschen.de>
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include <unistd.h>
-#include <stdlib.h>
-#include "cygerrno.h"
-#include "security.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "pinfo.h"
-#include "cygheap.h"
-#include "ntdll.h"
-#include "tls_pbuf.h"
-#include <aclapi.h>
-
-#define ALL_SECURITY_INFORMATION (DACL_SECURITY_INFORMATION \
- | GROUP_SECURITY_INFORMATION \
- | OWNER_SECURITY_INFORMATION)
-
-static GENERIC_MAPPING NO_COPY_RO file_mapping = { FILE_GENERIC_READ,
- FILE_GENERIC_WRITE,
- FILE_GENERIC_EXECUTE,
- FILE_ALL_ACCESS };
-
-LONG
-get_file_sd (HANDLE fh, path_conv &pc, security_descriptor &sd,
- bool justcreated)
-{
- NTSTATUS status = STATUS_SUCCESS;
- OBJECT_ATTRIBUTES attr;
- IO_STATUS_BLOCK io;
- ULONG len = SD_MAXIMUM_SIZE, rlen;
-
- /* Allocate space for the security descriptor. */
- if (!sd.malloc (len))
- {
- set_errno (ENOMEM);
- return -1;
- }
- /* Try to fetch the security descriptor if the handle is valid. */
- if (fh)
- {
- status = NtQuerySecurityObject (fh, ALL_SECURITY_INFORMATION,
- sd, len, &rlen);
- if (!NT_SUCCESS (status))
- debug_printf ("NtQuerySecurityObject (%S), status %y",
- pc.get_nt_native_path (), status);
- }
- /* If the handle was NULL, or fetching with the original handle didn't work,
- try to reopen the file with READ_CONTROL and fetch the security descriptor
- using that handle. */
- if (!fh || !NT_SUCCESS (status))
- {
- status = NtOpenFile (&fh, READ_CONTROL,
- fh ? pc.init_reopen_attr (attr, fh)
- : pc.get_object_attr (attr, sec_none_nih),
- &io, FILE_SHARE_VALID_FLAGS,
- FILE_OPEN_FOR_BACKUP_INTENT);
- if (!NT_SUCCESS (status))
- {
- sd.free ();
- __seterrno_from_nt_status (status);
- return -1;
- }
- status = NtQuerySecurityObject (fh, ALL_SECURITY_INFORMATION,
- sd, len, &rlen);
- NtClose (fh);
- if (!NT_SUCCESS (status))
- {
- sd.free ();
- __seterrno_from_nt_status (status);
- return -1;
- }
- }
- /* Ok, so we have a security descriptor now. Unfortunately, if you want
- to know if an ACE is inherited from the parent object, you can't just
- call NtQuerySecurityObject once. The problem is this:
-
- In the simple case, the SDs control word contains one of the
- SE_DACL_AUTO_INHERITED or SE_DACL_PROTECTED flags, or at least one of
- the ACEs has the INHERITED_ACE flag set. In all of these cases the
- GetSecurityInfo function calls NtQuerySecurityObject only once, too,
- apparently because it figures that the DACL is self-sufficient, which
- it usually is. Windows Explorer, for instance, takes great care to
- set these flags in a security descriptor if you change the ACL in the
- GUI property dialog.
-
- The tricky case is if none of these flags is set in the SD. That means
- the information whether or not an ACE has been inherited is not available
- in the DACL of the object. In this case GetSecurityInfo also fetches the
- SD from the parent directory and tests if the object's SD contains
- inherited ACEs from the parent. The below code is closly emulating the
- behaviour of GetSecurityInfo so we can get rid of this advapi32 dependency.
-
- However, this functionality is slow, and the extra information is only
- required when the file has been created and the permissions are about
- to be set to POSIX permissions. Therefore we only use it in case the
- file just got created.
-
- Note that GetSecurityInfo has a problem on 5.1 and 5.2 kernels. Sometimes
- it returns ERROR_INVALID_ADDRESS if a former request for the parent
- directories' SD used NtQuerySecurityObject, rather than GetSecurityInfo
- as well. See http://cygwin.com/ml/cygwin-developers/2011-03/msg00027.html
- for the solution. This problem does not occur with the below code, so
- the workaround has been removed. */
- if (justcreated)
- {
- SECURITY_DESCRIPTOR_CONTROL ctrl;
- ULONG dummy;
- PACL dacl;
- BOOLEAN exists, def;
- ACCESS_ALLOWED_ACE *ace;
- UNICODE_STRING dirname;
- PSECURITY_DESCRIPTOR psd, nsd;
- tmp_pathbuf tp;
-
- /* Check SDs control flags. If SE_DACL_AUTO_INHERITED or
- SE_DACL_PROTECTED is set we're done. */
- RtlGetControlSecurityDescriptor (sd, &ctrl, &dummy);
- if (ctrl & (SE_DACL_AUTO_INHERITED | SE_DACL_PROTECTED))
- return 0;
- /* Otherwise iterate over the ACEs and see if any one of them has the
- INHERITED_ACE flag set. If so, we're done. */
- if (NT_SUCCESS (RtlGetDaclSecurityDescriptor (sd, &exists, &dacl, &def))
- && exists && dacl)
- for (ULONG idx = 0; idx < dacl->AceCount; ++idx)
- if (NT_SUCCESS (RtlGetAce (dacl, idx, (PVOID *) &ace))
- && (ace->Header.AceFlags & INHERITED_ACE))
- return 0;
- /* Otherwise, open the parent directory with READ_CONTROL... */
- RtlSplitUnicodePath (pc.get_nt_native_path (), &dirname, NULL);
- InitializeObjectAttributes (&attr, &dirname, pc.objcaseinsensitive (),
- NULL, NULL);
- status = NtOpenFile (&fh, READ_CONTROL, &attr, &io,
- FILE_SHARE_VALID_FLAGS,
- FILE_OPEN_FOR_BACKUP_INTENT
- | FILE_OPEN_REPARSE_POINT);
- if (!NT_SUCCESS (status))
- {
- debug_printf ("NtOpenFile (%S), status %y", &dirname, status);
- return 0;
- }
- /* ... fetch the parent's security descriptor ... */
- psd = (PSECURITY_DESCRIPTOR) tp.w_get ();
- status = NtQuerySecurityObject (fh, ALL_SECURITY_INFORMATION,
- psd, len, &rlen);
- NtClose (fh);
- if (!NT_SUCCESS (status))
- {
- debug_printf ("NtQuerySecurityObject (%S), status %y",
- &dirname, status);
- return 0;
- }
- /* ... and create a new security descriptor in which all inherited ACEs
- are marked with the INHERITED_ACE flag. For a description of the
- undocumented RtlConvertToAutoInheritSecurityObject function from
- ntdll.dll see the MSDN man page for the advapi32 function
- ConvertToAutoInheritPrivateObjectSecurity. Fortunately the latter
- is just a shim. */
- status = RtlConvertToAutoInheritSecurityObject (psd, sd, &nsd, NULL,
- pc.isdir (),
- &file_mapping);
- if (!NT_SUCCESS (status))
- {
- debug_printf ("RtlConvertToAutoInheritSecurityObject (%S), status %y",
- &dirname, status);
- return 0;
- }
- /* Eventually copy the new security descriptor into sd and delete the
- original one created by RtlConvertToAutoInheritSecurityObject from
- the heap. */
- len = RtlLengthSecurityDescriptor (nsd);
- memcpy ((PSECURITY_DESCRIPTOR) sd, nsd, len);
- RtlDeleteSecurityObject (&nsd);
- }
- return 0;
-}
-
-LONG
-set_file_sd (HANDLE fh, path_conv &pc, security_descriptor &sd, bool is_chown)
-{
- NTSTATUS status = STATUS_SUCCESS;
- int retry = 0;
- int res = -1;
-
- for (; retry < 2; ++retry)
- {
- if (fh)
- {
- status = NtSetSecurityObject (fh,
- is_chown ? ALL_SECURITY_INFORMATION
- : DACL_SECURITY_INFORMATION,
- sd);
- if (NT_SUCCESS (status))
- {
- res = 0;
- break;
- }
- }
- if (!retry)
- {
- OBJECT_ATTRIBUTES attr;
- IO_STATUS_BLOCK io;
- status = NtOpenFile (&fh, (is_chown ? WRITE_OWNER : 0) | WRITE_DAC,
- fh ? pc.init_reopen_attr (attr, fh)
- : pc.get_object_attr (attr, sec_none_nih),
- &io,
- FILE_SHARE_VALID_FLAGS,
- FILE_OPEN_FOR_BACKUP_INTENT);
- if (!NT_SUCCESS (status))
- {
- fh = NULL;
- break;
- }
- }
- }
- if (retry && fh)
- NtClose (fh);
- if (!NT_SUCCESS (status))
- __seterrno_from_nt_status (status);
- return res;
-}
-
-static void
-get_attribute_from_acl (mode_t *attribute, PACL acl, PSID owner_sid,
- PSID group_sid, bool grp_member)
-{
- ACCESS_ALLOWED_ACE *ace;
- int allow = 0;
- int deny = 0;
- int *flags, *anti;
-
- for (DWORD i = 0; i < acl->AceCount; ++i)
- {
- if (!NT_SUCCESS (RtlGetAce (acl, i, (PVOID *) &ace)))
- continue;
- if (ace->Header.AceFlags & INHERIT_ONLY_ACE)
- continue;
- switch (ace->Header.AceType)
- {
- case ACCESS_ALLOWED_ACE_TYPE:
- flags = &allow;
- anti = &deny;
- break;
- case ACCESS_DENIED_ACE_TYPE:
- flags = &deny;
- anti = &allow;
- break;
- default:
- continue;
- }
-
- cygpsid ace_sid ((PSID) &ace->SidStart);
- if (ace_sid == well_known_world_sid)
- {
- if (ace->Mask & FILE_READ_BITS)
- *flags |= ((!(*anti & S_IROTH)) ? S_IROTH : 0)
- | ((!(*anti & S_IRGRP)) ? S_IRGRP : 0)
- | ((!(*anti & S_IRUSR)) ? S_IRUSR : 0);
- if (ace->Mask & FILE_WRITE_BITS)
- *flags |= ((!(*anti & S_IWOTH)) ? S_IWOTH : 0)
- | ((!(*anti & S_IWGRP)) ? S_IWGRP : 0)
- | ((!(*anti & S_IWUSR)) ? S_IWUSR : 0);
- if (ace->Mask & FILE_EXEC_BITS)
- *flags |= ((!(*anti & S_IXOTH)) ? S_IXOTH : 0)
- | ((!(*anti & S_IXGRP)) ? S_IXGRP : 0)
- | ((!(*anti & S_IXUSR)) ? S_IXUSR : 0);
- if ((S_ISDIR (*attribute)) &&
- (ace->Mask & (FILE_WRITE_DATA | FILE_EXECUTE | FILE_DELETE_CHILD))
- == (FILE_WRITE_DATA | FILE_EXECUTE))
- *flags |= S_ISVTX;
- }
- else if (ace_sid == well_known_null_sid)
- {
- /* Read SUID, SGID and VTX bits from NULL ACE. */
- if (ace->Mask & FILE_READ_DATA)
- *flags |= S_ISVTX;
- if (ace->Mask & FILE_WRITE_DATA)
- *flags |= S_ISGID;
- if (ace->Mask & FILE_APPEND_DATA)
- *flags |= S_ISUID;
- }
- else if (ace_sid == owner_sid)
- {
- if (ace->Mask & FILE_READ_BITS)
- *flags |= ((!(*anti & S_IRUSR)) ? S_IRUSR : 0);
- if (ace->Mask & FILE_WRITE_BITS)
- *flags |= ((!(*anti & S_IWUSR)) ? S_IWUSR : 0);
- if (ace->Mask & FILE_EXEC_BITS)
- *flags |= ((!(*anti & S_IXUSR)) ? S_IXUSR : 0);
- }
- else if (ace_sid == group_sid)
- {
- if (ace->Mask & FILE_READ_BITS)
- *flags |= ((!(*anti & S_IRGRP)) ? S_IRGRP : 0)
- | ((grp_member && !(*anti & S_IRUSR)) ? S_IRUSR : 0);
- if (ace->Mask & FILE_WRITE_BITS)
- *flags |= ((!(*anti & S_IWGRP)) ? S_IWGRP : 0)
- | ((grp_member && !(*anti & S_IWUSR)) ? S_IWUSR : 0);
- if (ace->Mask & FILE_EXEC_BITS)
- *flags |= ((!(*anti & S_IXGRP)) ? S_IXGRP : 0)
- | ((grp_member && !(*anti & S_IXUSR)) ? S_IXUSR : 0);
- }
- else if (flags == &allow)
- {
- /* Simplified computation of additional group permissions based on
- the CLASS_OBJ value. CLASS_OBJ represents the or'ed value of
- the primary group permissions and all secondary user and group
- permissions. FIXME: This only takes ACCESS_ALLOWED_ACEs into
- account. The computation with additional ACCESS_DENIED_ACE
- handling is much more complicated. */
- if (ace->Mask & FILE_READ_BITS)
- *flags |= S_IRGRP;
- if (ace->Mask & FILE_WRITE_BITS)
- *flags |= S_IWGRP;
- if (ace->Mask & FILE_EXEC_BITS)
- *flags |= S_IXGRP;
- }
- }
- *attribute &= ~(S_IRWXU | S_IRWXG | S_IRWXO | S_ISVTX | S_ISGID | S_ISUID);
- if (owner_sid && group_sid && RtlEqualSid (owner_sid, group_sid)
- /* FIXME: temporary exception for /var/empty */
- && well_known_system_sid != group_sid)
- {
- allow &= ~(S_IRGRP | S_IWGRP | S_IXGRP);
- allow |= (((allow & S_IRUSR) ? S_IRGRP : 0)
- | ((allow & S_IWUSR) ? S_IWGRP : 0)
- | ((allow & S_IXUSR) ? S_IXGRP : 0));
- }
- *attribute |= allow;
-}
-
-static void
-get_info_from_sd (PSECURITY_DESCRIPTOR psd, mode_t *attribute,
- uid_t *uidret, gid_t *gidret)
-{
- if (!psd)
- {
- /* If reading the security descriptor failed, treat the object
- as unreadable. */
- if (attribute)
- *attribute &= ~(S_IRWXU | S_IRWXG | S_IRWXO);
- if (uidret)
- *uidret = ILLEGAL_UID;
- if (gidret)
- *gidret = ILLEGAL_GID;
- return;
- }
-
- cygpsid owner_sid;
- cygpsid group_sid;
- NTSTATUS status;
- BOOLEAN dummy;
-
- status = RtlGetOwnerSecurityDescriptor (psd, (PSID *) &owner_sid, &dummy);
- if (!NT_SUCCESS (status))
- debug_printf ("RtlGetOwnerSecurityDescriptor: %y", status);
- status = RtlGetGroupSecurityDescriptor (psd, (PSID *) &group_sid, &dummy);
- if (!NT_SUCCESS (status))
- debug_printf ("RtlGetGroupSecurityDescriptor: %y", status);
-
- uid_t uid;
- gid_t gid;
- bool grp_member = get_sids_info (owner_sid, group_sid, &uid, &gid);
- if (uidret)
- *uidret = uid;
- if (gidret)
- *gidret = gid;
-
- if (!attribute)
- {
- syscall_printf ("uid %u, gid %u", uid, gid);
- return;
- }
-
- PACL acl;
- BOOLEAN acl_exists;
-
- status = RtlGetDaclSecurityDescriptor (psd, &acl_exists, &acl, &dummy);
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- *attribute &= ~(S_IRWXU | S_IRWXG | S_IRWXO);
- }
- else if (!acl_exists || !acl)
- *attribute |= S_IRWXU | S_IRWXG | S_IRWXO;
- else
- get_attribute_from_acl (attribute, acl, owner_sid, group_sid, grp_member);
-
- syscall_printf ("%sACL %y, uid %u, gid %u",
- (!acl_exists || !acl)?"NO ":"", *attribute, uid, gid);
-}
-
-static int
-get_reg_sd (HANDLE handle, security_descriptor &sd_ret)
-{
- LONG ret;
- DWORD len = 0;
-
- ret = RegGetKeySecurity ((HKEY) handle, ALL_SECURITY_INFORMATION,
- sd_ret, &len);
- if (ret == ERROR_INSUFFICIENT_BUFFER)
- {
- if (!sd_ret.malloc (len))
- set_errno (ENOMEM);
- else
- ret = RegGetKeySecurity ((HKEY) handle, ALL_SECURITY_INFORMATION,
- sd_ret, &len);
- }
- if (ret != ERROR_SUCCESS)
- {
- __seterrno ();
- return -1;
- }
- return 0;
-}
-
-int
-get_reg_attribute (HKEY hkey, mode_t *attribute, uid_t *uidret,
- gid_t *gidret)
-{
- security_descriptor sd;
-
- if (!get_reg_sd (hkey, sd))
- {
- get_info_from_sd (sd, attribute, uidret, gidret);
- return 0;
- }
- /* The entries are already set to default values */
- return -1;
-}
-
-int
-get_file_attribute (HANDLE handle, path_conv &pc,
- mode_t *attribute, uid_t *uidret, gid_t *gidret)
-{
- if (pc.has_acls ())
- {
- security_descriptor sd;
-
- if (!get_file_sd (handle, pc, sd, false))
- {
- get_info_from_sd (sd, attribute, uidret, gidret);
- return 0;
- }
- /* ENOSYS is returned by get_file_sd if fetching the DACL from a remote
- share returns STATUS_INVALID_NETWORK_RESPONSE, which in turn is
- converted to ERROR_BAD_NET_RESP. This potentially occurs when trying
- to fetch DACLs from a NT4 machine which is not part of the domain of
- the requesting machine. */
- else if (get_errno () != ENOSYS)
- {
- if (uidret)
- *uidret = ILLEGAL_UID;
- if (gidret)
- *gidret = ILLEGAL_GID;
-
- return -1;
- }
- }
-
- if (uidret)
- *uidret = myself->uid;
- if (gidret)
- *gidret = myself->gid;
-
- return -1;
-}
-
-bool
-add_access_allowed_ace (PACL acl, int offset, DWORD attributes,
- PSID sid, size_t &len_add, DWORD inherit)
-{
- NTSTATUS status = RtlAddAccessAllowedAceEx (acl, ACL_REVISION, inherit,
- attributes, sid);
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- return false;
- }
- len_add += sizeof (ACCESS_ALLOWED_ACE) - sizeof (DWORD) + RtlLengthSid (sid);
- return true;
-}
-
-bool
-add_access_denied_ace (PACL acl, int offset, DWORD attributes,
- PSID sid, size_t &len_add, DWORD inherit)
-{
- NTSTATUS status = RtlAddAccessDeniedAceEx (acl, ACL_REVISION, inherit,
- attributes, sid);
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- return false;
- }
- len_add += sizeof (ACCESS_DENIED_ACE) - sizeof (DWORD) + RtlLengthSid (sid);
- return true;
-}
-
-static PSECURITY_DESCRIPTOR
-alloc_sd (path_conv &pc, uid_t uid, gid_t gid, int attribute,
- security_descriptor &sd_ret)
-{
- NTSTATUS status;
- BOOLEAN dummy;
- tmp_pathbuf tp;
-
- /* NOTE: If the high bit of attribute is set, we have just created
- a file or directory. See below for an explanation. */
-
- debug_printf("uid %u, gid %u, attribute 0%o", uid, gid, attribute);
-
- /* Get owner and group from current security descriptor. */
- PSID cur_owner_sid = NULL;
- PSID cur_group_sid = NULL;
- status = RtlGetOwnerSecurityDescriptor (sd_ret, &cur_owner_sid, &dummy);
- if (!NT_SUCCESS (status))
- debug_printf ("RtlGetOwnerSecurityDescriptor: %y", status);
- status = RtlGetGroupSecurityDescriptor (sd_ret, &cur_group_sid, &dummy);
- if (!NT_SUCCESS (status))
- debug_printf ("RtlGetGroupSecurityDescriptor: %y", status);
-
- /* Get SID of owner. */
- cygsid owner_sid;
- /* Check for current user first */
- if (uid == myself->uid)
- owner_sid = cygheap->user.sid ();
- else if (uid == ILLEGAL_UID)
- owner_sid = cur_owner_sid;
- else if (!owner_sid.getfrompw (internal_getpwuid (uid)))
- {
- set_errno (EINVAL);
- return NULL;
- }
- owner_sid.debug_print ("alloc_sd: owner SID =");
-
- /* Get SID of new group. */
- cygsid group_sid;
- /* Check for current user first */
- if (gid == myself->gid)
- group_sid = cygheap->user.groups.pgsid;
- else if (gid == ILLEGAL_GID)
- group_sid = cur_group_sid;
- else if (!group_sid.getfromgr (internal_getgrgid (gid)))
- {
- set_errno (EINVAL);
- return NULL;
- }
- group_sid.debug_print ("alloc_sd: group SID =");
-
- /* Initialize local security descriptor. */
- SECURITY_DESCRIPTOR sd;
- RtlCreateSecurityDescriptor (&sd, SECURITY_DESCRIPTOR_REVISION);
-
- /* We set the SE_DACL_PROTECTED flag here to prevent the DACL from being
- modified by inheritable ACEs. */
- RtlSetControlSecurityDescriptor (&sd, SE_DACL_PROTECTED, SE_DACL_PROTECTED);
-
- /* Create owner for local security descriptor. */
- status = RtlSetOwnerSecurityDescriptor (&sd, owner_sid, FALSE);
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- return NULL;
- }
-
- /* Create group for local security descriptor. */
- status = RtlSetGroupSecurityDescriptor (&sd, group_sid, FALSE);
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- return NULL;
- }
-
- /* Initialize local access control list. */
- PACL acl = (PACL) tp.w_get ();
- RtlCreateAcl (acl, ACL_MAXIMUM_SIZE, ACL_REVISION);
-
- /* From here fill ACL. */
- size_t acl_len = sizeof (ACL);
- int ace_off = 0;
- /* Only used for sync objects (for ttys). The admins group should
- always have the right to manipulate the ACL, so we have to make sure
- that the ACL gives the admins group STANDARD_RIGHTS_ALL access. */
- bool saw_admins = false;
-
- /* Construct allow attribute for owner.
- Don't set FILE_READ/WRITE_ATTRIBUTES unconditionally on Samba, otherwise
- it enforces read permissions. Same for other's below. */
- DWORD owner_allow = STANDARD_RIGHTS_ALL
- | (pc.fs_is_samba ()
- ? 0 : (FILE_READ_ATTRIBUTES | FILE_WRITE_ATTRIBUTES));
- if (attribute & S_IRUSR)
- owner_allow |= FILE_GENERIC_READ;
- if (attribute & S_IWUSR)
- owner_allow |= FILE_GENERIC_WRITE;
- if (attribute & S_IXUSR)
- owner_allow |= FILE_GENERIC_EXECUTE & ~FILE_READ_ATTRIBUTES;
- if (S_ISDIR (attribute)
- && (attribute & (S_IWUSR | S_IXUSR)) == (S_IWUSR | S_IXUSR))
- owner_allow |= FILE_DELETE_CHILD;
- /* For sync objects note that the owner is admin. */
- if (S_ISCHR (attribute) && owner_sid == well_known_admins_sid)
- saw_admins = true;
-
- /* Construct allow attribute for group. */
- DWORD group_allow = STANDARD_RIGHTS_READ | SYNCHRONIZE
- | (pc.fs_is_samba () ? 0 : FILE_READ_ATTRIBUTES);
- if (attribute & S_IRGRP)
- group_allow |= FILE_GENERIC_READ;
- if (attribute & S_IWGRP)
- group_allow |= FILE_GENERIC_WRITE;
- if (attribute & S_IXGRP)
- group_allow |= FILE_GENERIC_EXECUTE & ~FILE_READ_ATTRIBUTES;
- if (S_ISDIR (attribute)
- && (attribute & (S_IWGRP | S_IXGRP)) == (S_IWGRP | S_IXGRP)
- && !(attribute & S_ISVTX))
- group_allow |= FILE_DELETE_CHILD;
- /* For sync objects, add STANDARD_RIGHTS_ALL for admins group. */
- if (S_ISCHR (attribute) && group_sid == well_known_admins_sid)
- {
- group_allow |= STANDARD_RIGHTS_ALL;
- saw_admins = true;
- }
-
- /* Construct allow attribute for everyone. */
- DWORD other_allow = STANDARD_RIGHTS_READ | SYNCHRONIZE
- | (pc.fs_is_samba () ? 0 : FILE_READ_ATTRIBUTES);
- if (attribute & S_IROTH)
- other_allow |= FILE_GENERIC_READ;
- if (attribute & S_IWOTH)
- other_allow |= FILE_GENERIC_WRITE;
- if (attribute & S_IXOTH)
- other_allow |= FILE_GENERIC_EXECUTE & ~FILE_READ_ATTRIBUTES;
- if (S_ISDIR (attribute)
- && (attribute & (S_IWOTH | S_IXOTH)) == (S_IWOTH | S_IXOTH)
- && !(attribute & S_ISVTX))
- other_allow |= FILE_DELETE_CHILD;
-
- /* Construct SUID, SGID and VTX bits in NULL ACE. */
- DWORD null_allow = 0L;
- if (attribute & (S_ISUID | S_ISGID | S_ISVTX))
- {
- if (attribute & S_ISUID)
- null_allow |= FILE_APPEND_DATA;
- if (attribute & S_ISGID)
- null_allow |= FILE_WRITE_DATA;
- if (attribute & S_ISVTX)
- null_allow |= FILE_READ_DATA;
- }
-
- /* Add owner and group permissions if SIDs are equal
- and construct deny attributes for group and owner. */
- bool isownergroup;
- if ((isownergroup = (owner_sid == group_sid)))
- owner_allow |= group_allow;
-
- DWORD owner_deny = ~owner_allow & (group_allow | other_allow);
- owner_deny &= ~(STANDARD_RIGHTS_READ
- | FILE_READ_ATTRIBUTES | FILE_WRITE_ATTRIBUTES);
-
- DWORD group_deny = ~group_allow & other_allow;
- group_deny &= ~(STANDARD_RIGHTS_READ | FILE_READ_ATTRIBUTES);
-
- /* Set deny ACE for owner. */
- if (owner_deny
- && !add_access_denied_ace (acl, ace_off++, owner_deny,
- owner_sid, acl_len, NO_INHERITANCE))
- return NULL;
- /* Set deny ACE for group here to respect the canonical order,
- if this does not impact owner */
- if (group_deny && !(group_deny & owner_allow) && !isownergroup
- && !add_access_denied_ace (acl, ace_off++, group_deny,
- group_sid, acl_len, NO_INHERITANCE))
- return NULL;
- /* Set allow ACE for owner. */
- if (!add_access_allowed_ace (acl, ace_off++, owner_allow,
- owner_sid, acl_len, NO_INHERITANCE))
- return NULL;
- /* Set deny ACE for group, if still needed. */
- if (group_deny & owner_allow && !isownergroup
- && !add_access_denied_ace (acl, ace_off++, group_deny,
- group_sid, acl_len, NO_INHERITANCE))
- return NULL;
- /* Set allow ACE for group. */
- if (!isownergroup
- && !add_access_allowed_ace (acl, ace_off++, group_allow,
- group_sid, acl_len, NO_INHERITANCE))
- return NULL;
-
- /* For sync objects, if we didn't see the admins group so far, add entry
- with STANDARD_RIGHTS_ALL access. */
- if (S_ISCHR (attribute) && !saw_admins)
- {
- if (!add_access_allowed_ace (acl, ace_off++, STANDARD_RIGHTS_ALL,
- well_known_admins_sid, acl_len,
- NO_INHERITANCE))
- return NULL;
- saw_admins = true;
- }
-
- /* Set allow ACE for everyone. */
- if (!add_access_allowed_ace (acl, ace_off++, other_allow,
- well_known_world_sid, acl_len, NO_INHERITANCE))
- return NULL;
- /* Set null ACE for special bits. */
- if (null_allow
- && !add_access_allowed_ace (acl, ace_off++, null_allow,
- well_known_null_sid, acl_len, NO_INHERITANCE))
- return NULL;
-
- /* Fill ACL with unrelated ACEs from current security descriptor. */
- PACL oacl;
- BOOLEAN acl_exists = FALSE;
- ACCESS_ALLOWED_ACE *ace;
-
- status = RtlGetDaclSecurityDescriptor (sd_ret, &acl_exists, &oacl, &dummy);
- if (NT_SUCCESS (status) && acl_exists && oacl)
- for (DWORD i = 0; i < oacl->AceCount; ++i)
- if (NT_SUCCESS (RtlGetAce (oacl, i, (PVOID *) &ace)))
- {
- cygpsid ace_sid ((PSID) &ace->SidStart);
-
- /* Always skip NULL SID as well as admins SID on virtual device files
- in /proc/sys. */
- if (ace_sid == well_known_null_sid
- || (S_ISCHR (attribute) && ace_sid == well_known_admins_sid))
- continue;
- /* Check for ACEs which are always created in the preceding code
- and check for the default inheritence ACEs which will be created
- for just created directories. Skip them for just created
- directories or if they are not inherited. If they are inherited,
- make sure they are *only* inherited, so they don't collide with
- the permissions set in this function. */
- if ((ace_sid == cur_owner_sid)
- || (ace_sid == owner_sid)
- || (ace_sid == cur_group_sid)
- || (ace_sid == group_sid)
- || (ace_sid == well_known_creator_owner_sid)
- || (ace_sid == well_known_creator_group_sid)
- || (ace_sid == well_known_world_sid))
- {
- if ((S_ISDIR (attribute) && (attribute & S_JUSTCREATED))
- || (ace->Header.AceFlags
- & (CONTAINER_INHERIT_ACE | OBJECT_INHERIT_ACE)) == 0)
- continue;
- else
- ace->Header.AceFlags |= INHERIT_ONLY_ACE;
- }
- if (attribute & S_JUSTCREATED)
- {
- /* Since files and dirs are created with a NULL descriptor,
- inheritence rules kick in. If no inheritable entries exist
- in the parent object, Windows will create entries from the
- user token's default DACL in the file DACL. These entries
- are not desired and we drop them silently. */
- if (!(ace->Header.AceFlags & INHERITED_ACE))
- continue;
- /* Remove the INHERITED_ACE flag since on POSIX systems
- inheritance is settled when the file has been created.
- This also avoids error messages in Windows Explorer when
- opening a file's security tab. Explorer complains if
- inheritable ACEs are preceding non-inheritable ACEs. */
- ace->Header.AceFlags &= ~INHERITED_ACE;
- }
- /*
- * Add unrelated ACCESS_DENIED_ACE to the beginning but
- * behind the owner_deny, ACCESS_ALLOWED_ACE to the end.
- * FIXME: this would break the order of the inherit-only ACEs
- */
- status = RtlAddAce (acl, ACL_REVISION,
- ace->Header.AceType == ACCESS_DENIED_ACE_TYPE
- ? (owner_deny ? 1 : 0) : MAXDWORD,
- (LPVOID) ace, ace->Header.AceSize);
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- return NULL;
- }
- ace_off++;
- acl_len += ace->Header.AceSize;
- }
-
- /* Construct appropriate inherit attribute for new directories. Keep in
- mind that we do this only for the sake of non-Cygwin applications.
- Cygwin applications don't need this. */
- if (S_ISDIR (attribute) && (attribute & S_JUSTCREATED))
- {
- const DWORD inherit = CONTAINER_INHERIT_ACE | OBJECT_INHERIT_ACE
- | INHERIT_ONLY_ACE;
-#if 0 /* FIXME: Not done currently as this breaks the canonical order */
- /* Set deny ACE for owner. */
- if (owner_deny
- && !add_access_denied_ace (acl, ace_off++, owner_deny,
- well_known_creator_owner_sid, acl_len, inherit))
- return NULL;
- /* Set deny ACE for group here to respect the canonical order,
- if this does not impact owner */
- if (group_deny && !(group_deny & owner_allow)
- && !add_access_denied_ace (acl, ace_off++, group_deny,
- well_known_creator_group_sid, acl_len, inherit))
- return NULL;
-#endif
- /* Set allow ACE for owner. */
- if (!add_access_allowed_ace (acl, ace_off++, owner_allow,
- well_known_creator_owner_sid, acl_len,
- inherit))
- return NULL;
-#if 0 /* FIXME: Not done currently as this breaks the canonical order and
- won't be preserved on chown and chmod */
- /* Set deny ACE for group, conflicting with owner_allow. */
- if (group_deny & owner_allow
- && !add_access_denied_ace (acl, ace_off++, group_deny,
- well_known_creator_group_sid, acl_len, inherit))
- return NULL;
-#endif
- /* Set allow ACE for group. */
- if (!add_access_allowed_ace (acl, ace_off++, group_allow,
- well_known_creator_group_sid, acl_len,
- inherit))
- return NULL;
- /* Set allow ACE for everyone. */
- if (!add_access_allowed_ace (acl, ace_off++, other_allow,
- well_known_world_sid, acl_len, inherit))
- return NULL;
- }
-
- /* Set AclSize to computed value. */
- acl->AclSize = acl_len;
- debug_printf ("ACL-Size: %d", acl_len);
-
- /* Create DACL for local security descriptor. */
- status = RtlSetDaclSecurityDescriptor (&sd, TRUE, acl, FALSE);
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- return NULL;
- }
-
- /* Make self relative security descriptor. */
- DWORD sd_size = 0;
- RtlAbsoluteToSelfRelativeSD (&sd, sd_ret, &sd_size);
- if (sd_size <= 0)
- {
- __seterrno ();
- return NULL;
- }
- if (!sd_ret.malloc (sd_size))
- {
- set_errno (ENOMEM);
- return NULL;
- }
- status = RtlAbsoluteToSelfRelativeSD (&sd, sd_ret, &sd_size);
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- return NULL;
- }
- debug_printf ("Created SD-Size: %u", sd_ret.size ());
-
- return sd_ret;
-}
-
-void
-set_security_attribute (path_conv &pc, int attribute, PSECURITY_ATTRIBUTES psa,
- security_descriptor &sd)
-{
- psa->lpSecurityDescriptor = sd.malloc (SECURITY_DESCRIPTOR_MIN_LENGTH);
- RtlCreateSecurityDescriptor ((PSECURITY_DESCRIPTOR) psa->lpSecurityDescriptor,
- SECURITY_DESCRIPTOR_REVISION);
- psa->lpSecurityDescriptor = alloc_sd (pc, geteuid32 (), getegid32 (),
- attribute, sd);
-}
-
-int
-get_object_sd (HANDLE handle, security_descriptor &sd)
-{
- ULONG len = 0;
- NTSTATUS status;
-
- status = NtQuerySecurityObject (handle, ALL_SECURITY_INFORMATION,
- sd, len, &len);
- if (status != STATUS_BUFFER_TOO_SMALL)
- {
- __seterrno_from_nt_status (status);
- return -1;
- }
- if (!sd.malloc (len))
- {
- set_errno (ENOMEM);
- return -1;
- }
- status = NtQuerySecurityObject (handle, ALL_SECURITY_INFORMATION,
- sd, len, &len);
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- return -1;
- }
- return 0;
-}
-
-int
-get_object_attribute (HANDLE handle, uid_t *uidret, gid_t *gidret,
- mode_t *attribute)
-{
- security_descriptor sd;
-
- if (get_object_sd (handle, sd))
- return -1;
- get_info_from_sd (sd, attribute, uidret, gidret);
- return 0;
-}
-
-int
-create_object_sd_from_attribute (HANDLE handle, uid_t uid, gid_t gid,
- mode_t attribute, security_descriptor &sd)
-{
- path_conv pc;
- if ((handle && get_object_sd (handle, sd))
- || !alloc_sd (pc, uid, gid, attribute, sd))
- return -1;
- return 0;
-}
-
-int
-set_object_sd (HANDLE handle, security_descriptor &sd, bool chown)
-{
- NTSTATUS status;
- status = NtSetSecurityObject (handle, chown ? ALL_SECURITY_INFORMATION
- : DACL_SECURITY_INFORMATION, sd);
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- return -1;
- }
- return 0;
-}
-
-int
-set_object_attribute (HANDLE handle, uid_t uid, gid_t gid,
- mode_t attribute)
-{
- security_descriptor sd;
-
- if (create_object_sd_from_attribute (handle, uid, gid, attribute, sd)
- || set_object_sd (handle, sd, uid != ILLEGAL_UID || gid != ILLEGAL_GID))
- return -1;
- return 0;
-}
-
-int
-set_file_attribute (HANDLE handle, path_conv &pc,
- uid_t uid, gid_t gid, mode_t attribute)
-{
- int ret = -1;
-
- if (pc.has_acls ())
- {
- security_descriptor sd;
-
- if (!get_file_sd (handle, pc, sd, (bool)(attribute & S_JUSTCREATED))
- && alloc_sd (pc, uid, gid, attribute, sd))
- ret = set_file_sd (handle, pc, sd,
- uid != ILLEGAL_UID || gid != ILLEGAL_GID);
- }
- else
- ret = 0;
- syscall_printf ("%d = set_file_attribute(%S, %d, %d, 0%o)",
- ret, pc.get_nt_native_path (), uid, gid, attribute);
- return ret;
-}
-
-static int
-check_access (security_descriptor &sd, GENERIC_MAPPING &mapping,
- ACCESS_MASK desired, int flags, bool effective)
-{
- int ret = -1;
- NTSTATUS status, allow;
- ACCESS_MASK granted;
- DWORD plen = sizeof (PRIVILEGE_SET) + 3 * sizeof (LUID_AND_ATTRIBUTES);
- PPRIVILEGE_SET pset = (PPRIVILEGE_SET) alloca (plen);
- HANDLE tok = ((effective && cygheap->user.issetuid ())
- ? cygheap->user.imp_token ()
- : hProcImpToken);
-
- if (!tok)
- {
- if (!DuplicateTokenEx (hProcToken, MAXIMUM_ALLOWED, NULL,
- SecurityImpersonation, TokenImpersonation,
- &hProcImpToken))
- {
- __seterrno ();
- return ret;
- }
- tok = hProcImpToken;
- }
-
- status = NtAccessCheck (sd, tok, desired, &mapping, pset, &plen, &granted,
- &allow);
- if (!NT_SUCCESS (status))
- __seterrno ();
- else if (!NT_SUCCESS (allow))
- {
- /* CV, 2006-10-16: Now, that's really weird. Imagine a user who has no
- standard access to a file, but who has backup and restore privileges
- and these privileges are enabled in the access token. One would
- expect that the AccessCheck function takes this into consideration
- when returning the access status. Otherwise, why bother with the
- pset parameter, right?
- But not so. AccessCheck actually returns a status of "false" here,
- even though opening a file with backup resp. restore intent
- naturally succeeds for this user. This definitely spoils the results
- of access(2) for administrative users or the SYSTEM account. So, in
- case the access check fails, another check against the user's
- backup/restore privileges has to be made. Sigh. */
- int granted_flags = 0;
- BOOLEAN has_priv;
-
- if (flags & R_OK)
- {
- pset->PrivilegeCount = 1;
- pset->Control = 0;
- pset->Privilege[0].Luid.HighPart = 0L;
- pset->Privilege[0].Luid.LowPart = SE_BACKUP_PRIVILEGE;
- pset->Privilege[0].Attributes = 0;
- status = NtPrivilegeCheck (tok, pset, &has_priv);
- if (NT_SUCCESS (status) && has_priv)
- granted_flags |= R_OK;
- }
- if (flags & W_OK)
- {
- pset->PrivilegeCount = 1;
- pset->Control = 0;
- pset->Privilege[0].Luid.HighPart = 0L;
- pset->Privilege[0].Luid.LowPart = SE_RESTORE_PRIVILEGE;
- pset->Privilege[0].Attributes = 0;
- status = NtPrivilegeCheck (tok, pset, &has_priv);
- if (NT_SUCCESS (status) && has_priv)
- granted_flags |= W_OK;
- }
- if (granted_flags == flags)
- ret = 0;
- else
- set_errno (EACCES);
- }
- else
- ret = 0;
- return ret;
-}
-
-/* Samba override. Check security descriptor for Samba UNIX user and group
- accounts and check if we have an RFC 2307 mapping to a Windows account.
- Create a new security descriptor with all of the UNIX accounts with
- valid mapping replaced with their Windows counterpart. */
-static void
-convert_samba_sd (security_descriptor &sd_ret)
-{
- NTSTATUS status;
- BOOLEAN dummy;
- PSID sid;
- cygsid owner;
- cygsid group;
- SECURITY_DESCRIPTOR sd;
- cyg_ldap cldap;
- tmp_pathbuf tp;
- PACL acl, oacl;
- size_t acl_len;
- PACCESS_ALLOWED_ACE ace;
-
- if (!NT_SUCCESS (RtlGetOwnerSecurityDescriptor (sd_ret, &sid, &dummy)))
- return;
- owner = sid;
- if (!NT_SUCCESS (RtlGetGroupSecurityDescriptor (sd_ret, &sid, &dummy)))
- return;
- group = sid;
-
- if (sid_id_auth (owner) == 22)
- {
- struct passwd *pwd;
- uid_t uid = owner.get_uid (&cldap);
- if (uid < UNIX_POSIX_OFFSET && (pwd = internal_getpwuid (uid)))
- owner.getfrompw (pwd);
- }
- if (sid_id_auth (group) == 22)
- {
- struct group *grp;
- gid_t gid = group.get_gid (&cldap);
- if (gid < UNIX_POSIX_OFFSET && (grp = internal_getgrgid (gid)))
- group.getfromgr (grp);
- }
-
- if (!NT_SUCCESS (RtlGetDaclSecurityDescriptor (sd_ret, &dummy,
- &oacl, &dummy)))
- return;
- acl = (PACL) tp.w_get ();
- RtlCreateAcl (acl, ACL_MAXIMUM_SIZE, ACL_REVISION);
- acl_len = sizeof (ACL);
-
- for (DWORD i = 0; i < oacl->AceCount; ++i)
- if (NT_SUCCESS (RtlGetAce (oacl, i, (PVOID *) &ace)))
- {
- cygsid ace_sid ((PSID) &ace->SidStart);
- if (sid_id_auth (ace_sid) == 22)
- {
- if (sid_sub_auth (ace_sid, 0) == 1) /* user */
- {
- struct passwd *pwd;
- uid_t uid = ace_sid.get_uid (&cldap);
- if (uid < UNIX_POSIX_OFFSET && (pwd = internal_getpwuid (uid)))
- ace_sid.getfrompw (pwd);
- }
- else /* group */
- {
- struct group *grp;
- gid_t gid = ace_sid.get_gid (&cldap);
- if (gid < UNIX_POSIX_OFFSET && (grp = internal_getgrgid (gid)))
- ace_sid.getfromgr (grp);
- }
- if (!add_access_allowed_ace (acl, i, ace->Mask, ace_sid, acl_len,
- ace->Header.AceFlags))
- return;
- }
- }
- acl->AclSize = acl_len;
-
- RtlCreateSecurityDescriptor (&sd, SECURITY_DESCRIPTOR_REVISION);
- RtlSetControlSecurityDescriptor (&sd, SE_DACL_PROTECTED, SE_DACL_PROTECTED);
- RtlSetOwnerSecurityDescriptor (&sd, owner, FALSE);
- RtlSetGroupSecurityDescriptor (&sd, group, FALSE);
-
- status = RtlSetDaclSecurityDescriptor (&sd, TRUE, acl, FALSE);
- if (!NT_SUCCESS (status))
- return;
- DWORD sd_size = 0;
- status = RtlAbsoluteToSelfRelativeSD (&sd, sd_ret, &sd_size);
- if (sd_size > 0 && sd_ret.malloc (sd_size))
- RtlAbsoluteToSelfRelativeSD (&sd, sd_ret, &sd_size);
-}
-
-int
-check_file_access (path_conv &pc, int flags, bool effective)
-{
- security_descriptor sd;
- int ret = -1;
- ACCESS_MASK desired = 0;
- if (flags & R_OK)
- desired |= FILE_READ_DATA;
- if (flags & W_OK)
- desired |= FILE_WRITE_DATA;
- if (flags & X_OK)
- desired |= FILE_EXECUTE;
- if (!get_file_sd (pc.handle (), pc, sd, false))
- {
- /* Tweak Samba security descriptor as necessary. */
- if (pc.fs_is_samba ())
- convert_samba_sd (sd);
- ret = check_access (sd, file_mapping, desired, flags, effective);
- }
- debug_printf ("flags %y, ret %d", flags, ret);
- return ret;
-}
-
-int
-check_registry_access (HANDLE hdl, int flags, bool effective)
-{
- security_descriptor sd;
- int ret = -1;
- static GENERIC_MAPPING NO_COPY_RO reg_mapping = { KEY_READ,
- KEY_WRITE,
- KEY_EXECUTE,
- KEY_ALL_ACCESS };
- ACCESS_MASK desired = 0;
- if (flags & R_OK)
- desired |= KEY_ENUMERATE_SUB_KEYS;
- if (flags & W_OK)
- desired |= KEY_SET_VALUE;
- if (flags & X_OK)
- desired |= KEY_QUERY_VALUE;
-
- if ((HKEY) hdl == HKEY_PERFORMANCE_DATA)
- /* RegGetKeySecurity() always fails with ERROR_INVALID_HANDLE. */
- ret = 0;
- else if (!get_reg_sd (hdl, sd))
- ret = check_access (sd, reg_mapping, desired, flags, effective);
-
- /* As long as we can't write the registry... */
- if (flags & W_OK)
- {
- set_errno (EROFS);
- ret = -1;
- }
- debug_printf ("flags %y, ret %d", flags, ret);
- return ret;
-}
diff --git a/winsup/cygwin/security.h b/winsup/cygwin/security.h
deleted file mode 100644
index 50b5b3cc0..000000000
--- a/winsup/cygwin/security.h
+++ /dev/null
@@ -1,557 +0,0 @@
-/* security.h: security declarations
-
- Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
- 2011, 2012, 2013, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#pragma once
-
-#include <accctrl.h>
-#include <dsgetdc.h>
-
-/* Special file attribute set, for instance, in open() and mkdir() to
- flag that a file has just been created. Used in alloc_sd, see there. */
-#define S_JUSTCREATED 0x80000000
-
-/* UID/GID */
-void uinfo_init ();
-
-#define ILLEGAL_UID ((uid_t)-1)
-#define ILLEGAL_GID ((gid_t)-1)
-
-/* Offset for accounts in the primary domain of the machine. */
-#define PRIMARY_POSIX_OFFSET (0x00100000)
-
-/* Fake POSIX offsets used in scenarios in which the account has no permission
- to fetch the POSIX offset, or when the admins have set the offset to an
- unreasonable low value. The values are chosen in the hope that they won't
- collide with "real" offsets. */
-#define NOACCESS_POSIX_OFFSET (0xfe500000)
-#define UNUSABLE_POSIX_OFFSET (0xfea00000)
-
-/* For UNIX accounts not mapped to Windows accounts via winbind, Samba returns
- SIDs of the form S-1-22-x-y, with x == 1 for users and x == 2 for groups,
- and y == UNIX uid/gid. NFS returns no SIDs at all, but the plain UNIX
- uid/gid values.
-
- UNIX uid/gid values are mapped to Cygwin uid/gid values 0xff000000 +
- unix uid/gid. This *might* collide with a posix_offset of some trusted
- domain, but it's *very* unlikely. Define the mapping as macro. */
-#define UNIX_POSIX_OFFSET (0xff000000)
-#define UNIX_POSIX_MASK (0x00ffffff)
-#define MAP_UNIX_TO_CYGWIN_ID(id) (UNIX_POSIX_OFFSET \
- | ((id) & UNIX_POSIX_MASK))
-
-#ifndef __x86_64__
-#define ILLEGAL_UID16 ((__uid16_t)-1)
-#define ILLEGAL_GID16 ((__gid16_t)-1)
-#define uid16touid32(u16) ((u16)==ILLEGAL_UID16?ILLEGAL_UID:(uid_t)(u16))
-#define gid16togid32(g16) ((g16)==ILLEGAL_GID16?ILLEGAL_GID:(gid_t)(g16))
-#endif
-
-#define MAX_DACL_LEN(n) (sizeof (ACL) \
- + (n) * (sizeof (ACCESS_ALLOWED_ACE) - sizeof (DWORD) \
- + SECURITY_MAX_SID_SIZE))
-#define SD_MIN_SIZE (sizeof (SECURITY_DESCRIPTOR) + MAX_DACL_LEN (1))
-#define ACL_MAXIMUM_SIZE 65532 /* Yeah, right. 64K - sizeof (DWORD). */
-#define SD_MAXIMUM_SIZE 65536
-#define NO_SID ((PSID)NULL)
-
-#ifndef SE_CREATE_TOKEN_PRIVILEGE
-#define SE_CREATE_TOKEN_PRIVILEGE 2U
-#define SE_ASSIGNPRIMARYTOKEN_PRIVILEGE 3U
-#define SE_LOCK_MEMORY_PRIVILEGE 4U
-#define SE_INCREASE_QUOTA_PRIVILEGE 5U
-#define SE_MACHINE_ACCOUNT_PRIVILEGE 6U
-#define SE_TCB_PRIVILEGE 7U
-#define SE_SECURITY_PRIVILEGE 8U
-#define SE_TAKE_OWNERSHIP_PRIVILEGE 9U
-#define SE_LOAD_DRIVER_PRIVILEGE 10U
-#define SE_SYSTEM_PROFILE_PRIVILEGE 11U
-#define SE_SYSTEMTIME_PRIVILEGE 12U
-#define SE_PROF_SINGLE_PROCESS_PRIVILEGE 13U
-#define SE_INC_BASE_PRIORITY_PRIVILEGE 14U
-#define SE_CREATE_PAGEFILE_PRIVILEGE 15U
-#define SE_CREATE_PERMANENT_PRIVILEGE 16U
-#define SE_BACKUP_PRIVILEGE 17U
-#define SE_RESTORE_PRIVILEGE 18U
-#define SE_SHUTDOWN_PRIVILEGE 19U
-#define SE_DEBUG_PRIVILEGE 20U
-#define SE_AUDIT_PRIVILEGE 21U
-#define SE_SYSTEM_ENVIRONMENT_PRIVILEGE 22U
-#define SE_CHANGE_NOTIFY_PRIVILEGE 23U
-#define SE_REMOTE_SHUTDOWN_PRIVILEGE 24U
-#define SE_UNDOCK_PRIVILEGE 25U
-#define SE_SYNC_AGENT_PRIVILEGE 26U
-#define SE_ENABLE_DELEGATION_PRIVILEGE 27U
-#define SE_MANAGE_VOLUME_PRIVILEGE 28U
-#define SE_IMPERSONATE_PRIVILEGE 29U
-#define SE_CREATE_GLOBAL_PRIVILEGE 30U
-/* Starting with Vista */
-#define SE_TRUSTED_CREDMAN_ACCESS_PRIVILEGE 31U
-#define SE_RELABEL_PRIVILEGE 32U
-#define SE_INCREASE_WORKING_SET_PRIVILEGE 33U
-#define SE_TIME_ZONE_PRIVILEGE 34U
-#define SE_CREATE_SYMBOLIC_LINK_PRIVILEGE 35U
-
-#define SE_MAX_WELL_KNOWN_PRIVILEGE SE_CREATE_SYMBOLIC_LINK_PRIVILEGE
-
-#endif /* ! SE_CREATE_TOKEN_PRIVILEGE */
-
-/* Added for debugging purposes. */
-typedef struct {
- BYTE Revision;
- BYTE SubAuthorityCount;
- SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
- DWORD SubAuthority[SID_MAX_SUB_AUTHORITIES];
-} DBGSID, *PDBGSID;
-
-/* Macro to define variable length SID structures */
-#define MKSID(name, comment, authority, count, rid...) \
-static NO_COPY struct { \
- BYTE Revision; \
- BYTE SubAuthorityCount; \
- SID_IDENTIFIER_AUTHORITY IdentifierAuthority; \
- DWORD SubAuthority[count]; \
-} name##_struct = { SID_REVISION, count, {authority}, {rid}}; \
-cygpsid NO_COPY name = (PSID) &name##_struct;
-
-#define FILE_READ_BITS (FILE_READ_DATA | GENERIC_READ | GENERIC_ALL)
-#define FILE_WRITE_BITS (FILE_WRITE_DATA | GENERIC_WRITE | GENERIC_ALL)
-#define FILE_EXEC_BITS (FILE_EXECUTE | GENERIC_EXECUTE | GENERIC_ALL)
-
-/* Convenience macros. The Windows SID access functions are crude. */
-#define sid_id_auth(s) \
- (RtlIdentifierAuthoritySid (s)->Value[5])
-#define sid_sub_auth_count(s) \
- (*RtlSubAuthorityCountSid ((s)))
-#define sid_sub_auth(s,i) \
- (*RtlSubAuthoritySid ((s),(i)))
-#define sid_sub_auth_rid(s) \
- (*RtlSubAuthoritySid ((s), (*RtlSubAuthorityCountSid ((s)) - 1)))
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
- /* We need these declarations, otherwise g++ complains that the below
- inline methods use an undefined function, if ntdll.h isn't included. */
- BOOLEAN NTAPI RtlEqualSid (PSID, PSID);
- NTSTATUS NTAPI RtlCopySid (ULONG, PSID, PSID);
-#ifdef __cplusplus
-}
-#endif
-
-class cyg_ldap;
-
-class cygpsid {
-protected:
- PSID psid;
-public:
- cygpsid () {}
- cygpsid (PSID nsid) { psid = nsid; }
- operator PSID () const { return psid; }
- const PSID operator= (PSID nsid) { return psid = nsid;}
- uid_t get_id (BOOL search_grp, int *type, cyg_ldap *pldap);
- int get_uid (cyg_ldap *pldap) { return get_id (FALSE, NULL, pldap); }
- int get_gid (cyg_ldap *pldap) { return get_id (TRUE, NULL, pldap); }
-
- PWCHAR pstring (PWCHAR nsidstr) const;
- PWCHAR string (PWCHAR nsidstr) const;
- char *pstring (char *nsidstr) const;
- char *string (char *nsidstr) const;
-
- bool operator== (const PSID nsid) const
- {
- if (!psid || !nsid)
- return nsid == psid;
- return RtlEqualSid (psid, nsid);
- }
- bool operator!= (const PSID nsid) const
- { return !(*this == nsid); }
- bool operator== (const char *nsidstr) const;
- bool operator!= (const char *nsidstr) const
- { return !(*this == nsidstr); }
-
- void debug_print (const char *prefix = NULL) const
- {
- char buf[256] __attribute__ ((unused));
- debug_printf ("%s %s", prefix ?: "", string (buf) ?: "NULL");
- }
-};
-
-class cygsid : public cygpsid {
- char sbuf[SECURITY_MAX_SID_SIZE];
- bool well_known_sid;
-
- const PSID getfromstr (PCWSTR nsidstr, bool well_known);
- const PSID getfromstr (const char *nsidstr, bool well_known);
- PSID get_sid (DWORD s, DWORD cnt, DWORD *r, bool well_known);
-
- inline const PSID assign (const PSID nsid, bool well_known)
- {
- if (!nsid)
- psid = NO_SID;
- else
- {
- psid = (PSID) sbuf;
- RtlCopySid (SECURITY_MAX_SID_SIZE, psid, nsid);
- well_known_sid = well_known;
- }
- return psid;
- }
-
-public:
- inline operator const PSID () { return psid; }
- inline bool is_well_known_sid () { return well_known_sid; }
-
- /* Both, = and *= are assignment operators. = creates a "normal" SID,
- *= marks the SID as being a well-known SID. This difference is
- important when creating a SID list for LSA authentication. */
- inline const PSID operator= (cygsid &nsid)
- { return assign (nsid, nsid.well_known_sid); }
- inline const PSID operator= (const PSID nsid)
- { return assign (nsid, false); }
- inline const PSID operator= (PCWSTR nsidstr)
- { return getfromstr (nsidstr, false); }
- inline const PSID operator= (const char *nsidstr)
- { return getfromstr (nsidstr, false); }
- inline const PSID operator*= (cygsid &nsid)
- { return assign (nsid, true); }
- inline const PSID operator*= (const PSID nsid)
- { return assign (nsid, true); }
- inline const PSID operator*= (PCWSTR nsidstr)
- { return getfromstr (nsidstr, true); }
- inline const PSID operator*= (const char *nsidstr)
- { return getfromstr (nsidstr, true); }
-
- inline cygsid () : cygpsid ((PSID) sbuf), well_known_sid (false) {}
- inline cygsid (const PSID nsid) { *this = nsid; }
- inline cygsid (const char *nstrsid) { *this = nstrsid; }
- inline cygsid (cygsid &nsid) { *this = nsid; }
-
- inline PSID set () { return psid = (PSID) sbuf; }
-
- BOOL getfrompw (const struct passwd *pw);
- BOOL getfromgr (const struct group *gr);
-
- void debug_print (const char *prefix = NULL) const
- {
- char buf[256] __attribute__ ((unused));
- debug_printf ("%s %s%s", prefix ?: "", string (buf) ?: "NULL", well_known_sid ? " (*)" : " (+)");
- }
-};
-
-typedef enum { cygsidlist_empty, cygsidlist_alloc, cygsidlist_auto } cygsidlist_type;
-class cygsidlist {
- int maxcnt;
- int cnt;
-
- BOOL add (const PSID nsi, bool well_known); /* Only with auto for now */
-
-public:
- cygsid *sids;
- cygsidlist_type type;
-
- cygsidlist (cygsidlist_type t, int m)
- : maxcnt (m), cnt (0), type (t)
- {
- if (t == cygsidlist_alloc)
- sids = alloc_sids (m);
- else
- sids = new cygsid [m];
- }
- ~cygsidlist () { if (type == cygsidlist_auto) delete [] sids; }
-
- BOOL addfromgr (struct group *gr) /* Only with alloc */
- { return sids[cnt].getfromgr (gr) && ++cnt; }
-
- /* += adds a "normal" SID, *= adds a well-known SID. See comment in class
- cygsid above. */
- BOOL operator+= (cygsid &si) { return add ((PSID) si,
- si.is_well_known_sid ()); }
- BOOL operator+= (const char *sidstr) { cygsid nsi (sidstr);
- return add ((PSID) nsi,
- nsi.is_well_known_sid ());
- }
- BOOL operator+= (const PSID psid) { return add (psid, false); }
- BOOL operator*= (cygsid &si) { return add ((PSID) si, true); }
- BOOL operator*= (const char *sidstr) { cygsid nsi (sidstr);
- return add ((PSID) nsi, true); }
- BOOL operator*= (const PSID psid) { return add (psid, true); }
-
- void count (int ncnt)
- { cnt = ncnt; }
- int count () const { return cnt; }
- int non_well_known_count () const
- {
- int wcnt = 0;
- for (int i = 0; i < cnt; ++i)
- if (!sids[i].is_well_known_sid ())
- ++wcnt;
- return wcnt;
- }
-
- int position (const PSID sid) const
- {
- for (int i = 0; i < cnt; ++i)
- if (sids[i] == sid)
- return i;
- return -1;
- }
-
- int next_non_well_known_sid (int idx)
- {
- while (++idx < cnt)
- if (!sids[idx].is_well_known_sid ())
- return idx;
- return -1;
- }
- BOOL contains (const PSID sid) const { return position (sid) >= 0; }
- cygsid *alloc_sids (int n);
- void free_sids ();
- void debug_print (const char *prefix = NULL) const
- {
- debug_printf ("-- begin sidlist ---");
- if (!cnt)
- debug_printf ("No elements");
- for (int i = 0; i < cnt; ++i)
- sids[i].debug_print (prefix);
- debug_printf ("-- ende sidlist ---");
- }
-};
-
-/* Wrapper class to allow simple deleting of buffer space allocated
- by read_sd() */
-class security_descriptor {
-protected:
- PSECURITY_DESCRIPTOR psd;
- DWORD sd_size;
-public:
- security_descriptor () : psd (NULL), sd_size (0) {}
- ~security_descriptor () { free (); }
-
- PSECURITY_DESCRIPTOR malloc (size_t nsize);
- PSECURITY_DESCRIPTOR realloc (size_t nsize);
- void free ();
-
- inline DWORD size () const { return sd_size; }
- inline DWORD copy (void *buf, DWORD buf_size) const {
- if (buf_size < size ())
- return sd_size;
- memcpy (buf, psd, sd_size);
- return 0;
- }
- inline operator const PSECURITY_DESCRIPTOR () { return psd; }
- inline operator PSECURITY_DESCRIPTOR *() { return &psd; }
- inline void operator =(PSECURITY_DESCRIPTOR nsd) { psd = nsd; }
-};
-
-class user_groups {
-public:
- cygsid pgsid;
- cygsidlist sgsids;
- BOOL ischanged;
-
- BOOL issetgroups () const { return (sgsids.type == cygsidlist_alloc); }
- void update_supp (const cygsidlist &newsids)
- {
- sgsids.free_sids ();
- sgsids = newsids;
- ischanged = TRUE;
- }
- void clear_supp ()
- {
- if (issetgroups ())
- {
- sgsids.free_sids ();
- ischanged = TRUE;
- }
- }
- void update_pgrp (const PSID sid)
- {
- pgsid = sid;
- ischanged = TRUE;
- }
-};
-
-extern cygpsid well_known_null_sid;
-extern cygpsid well_known_world_sid;
-extern cygpsid well_known_local_sid;
-extern cygpsid well_known_console_logon_sid;
-extern cygpsid well_known_creator_owner_sid;
-extern cygpsid well_known_creator_group_sid;
-extern cygpsid well_known_dialup_sid;
-extern cygpsid well_known_network_sid;
-extern cygpsid well_known_batch_sid;
-extern cygpsid well_known_interactive_sid;
-extern cygpsid well_known_service_sid;
-extern cygpsid well_known_authenticated_users_sid;
-extern cygpsid well_known_this_org_sid;
-extern cygpsid well_known_system_sid;
-extern cygpsid well_known_local_service_sid;
-extern cygpsid well_known_network_service_sid;
-extern cygpsid well_known_builtin_sid;
-extern cygpsid well_known_admins_sid;
-extern cygpsid well_known_users_sid;
-extern cygpsid trusted_installer_sid;
-extern cygpsid mandatory_medium_integrity_sid;
-extern cygpsid mandatory_high_integrity_sid;
-extern cygpsid mandatory_system_integrity_sid;
-extern cygpsid well_known_samba_unix_user_fake_sid;
-
-bool privilege_luid (const PWCHAR pname, LUID &luid, bool &high_integrity);
-
-extern inline BOOL
-well_known_sid_type (SID_NAME_USE type)
-{
- return type == SidTypeAlias || type == SidTypeWellKnownGroup;
-}
-
-extern inline BOOL
-legal_sid_type (SID_NAME_USE type)
-{
- return type == SidTypeUser || type == SidTypeGroup
- || type == SidTypeAlias || type == SidTypeWellKnownGroup;
-}
-
-class path_conv;
-/* File manipulation */
-int __reg3 get_file_attribute (HANDLE, path_conv &, mode_t *,
- uid_t *, gid_t *);
-int __reg3 set_file_attribute (HANDLE, path_conv &,
- uid_t, gid_t, mode_t);
-int __reg2 get_object_sd (HANDLE, security_descriptor &);
-int __reg3 get_object_attribute (HANDLE, uid_t *, gid_t *, mode_t *);
-int __reg3 set_object_attribute (HANDLE, uid_t, gid_t, mode_t);
-int __reg3 create_object_sd_from_attribute (HANDLE, uid_t, gid_t,
- mode_t, security_descriptor &);
-int __reg3 set_object_sd (HANDLE, security_descriptor &, bool);
-
-int __reg3 get_reg_attribute (HKEY hkey, mode_t *, uid_t *, gid_t *);
-LONG __reg3 get_file_sd (HANDLE fh, path_conv &, security_descriptor &, bool);
-LONG __reg3 set_file_sd (HANDLE fh, path_conv &, security_descriptor &, bool);
-bool __reg3 add_access_allowed_ace (PACL, int, DWORD, PSID, size_t &, DWORD);
-bool __reg3 add_access_denied_ace (PACL, int, DWORD, PSID, size_t &, DWORD);
-int __reg3 check_file_access (path_conv &, int, bool);
-int __reg3 check_registry_access (HANDLE, int, bool);
-
-void set_security_attribute (path_conv &pc, int attribute,
- PSECURITY_ATTRIBUTES psa,
- security_descriptor &sd_buf);
-
-bool get_sids_info (cygpsid, cygpsid, uid_t * , gid_t *);
-
-/* sec_acl.cc */
-struct acl;
-extern "C" int aclsort32 (int, int, struct acl *);
-extern "C" int acl32 (const char *, int, int, struct acl *);
-int getacl (HANDLE, path_conv &, int, struct acl *);
-int setacl (HANDLE, path_conv &, int, struct acl *, bool &);
-
-/* Set impersonation or restricted token. */
-void set_imp_token (HANDLE token, int type);
-/* Function creating a token by calling NtCreateToken. */
-HANDLE create_token (cygsid &usersid, user_groups &groups, struct passwd * pw);
-/* LSA authentication function. */
-HANDLE lsaauth (cygsid &, user_groups &, struct passwd *);
-/* LSA private key storage authentication, same as when using service logons. */
-HANDLE lsaprivkeyauth (struct passwd *pw);
-/* Verify an existing token */
-bool verify_token (HANDLE token, cygsid &usersid, user_groups &groups, bool *pintern = NULL);
-/* Get groups of a user */
-bool get_server_groups (cygsidlist &grp_list, PSID usersid, struct passwd *pw);
-
-/* Extract U-domain\user field from passwd entry. */
-void extract_nt_dom_user (const struct passwd *pw, PWCHAR domain, PWCHAR user);
-/* Get default logonserver for a domain. */
-bool get_logon_server (PWCHAR domain, PWCHAR wserver, ULONG flags);
-
-/* Fetch user profile path from registry, if it already exists. */
-PWCHAR get_user_profile_directory (PCWSTR sidstr, PWCHAR path, SIZE_T path_len);
-
-/* Load user profile if it's not already loaded. */
-HANDLE load_user_profile (HANDLE token, struct passwd *pw, cygpsid &sid);
-
-HANDLE lsa_open_policy (PWCHAR server, ACCESS_MASK access);
-void lsa_close_policy (HANDLE lsa);
-
-/* sec_helper.cc: Security helper functions. */
-int set_privilege (HANDLE token, DWORD privilege, bool enable);
-void set_cygwin_privileges (HANDLE token);
-
-#define _push_thread_privilege(_priv, _val, _check) { \
- HANDLE _dup_token = NULL; \
- HANDLE _token = (cygheap->user.issetuid () && (_check)) \
- ? cygheap->user.primary_token () : hProcToken; \
- if (!DuplicateTokenEx (_token, MAXIMUM_ALLOWED, NULL, \
- SecurityImpersonation, TokenImpersonation, \
- &_dup_token)) \
- debug_printf ("DuplicateTokenEx: %E"); \
- else if (!ImpersonateLoggedOnUser (_dup_token)) \
- debug_printf ("ImpersonateLoggedOnUser: %E"); \
- else \
- set_privilege (_dup_token, (_priv), (_val));
-
-#define push_thread_privilege(_priv, _val) _push_thread_privilege(_priv,_val,1)
-#define push_self_privilege(_priv, _val) _push_thread_privilege(_priv,_val,0)
-
-#define pop_thread_privilege() \
- if (_dup_token) \
- { \
- if (!cygheap->user.issetuid ()) \
- RevertToSelf (); \
- else \
- cygheap->user.reimpersonate (); \
- CloseHandle (_dup_token); \
- } \
- }
-
-#define pop_self_privilege() pop_thread_privilege()
-
-/* shared.cc: */
-
-/* Various types of security attributes for use in Create* functions. */
-extern SECURITY_ATTRIBUTES sec_none, sec_none_nih, sec_all, sec_all_nih;
-extern SECURITY_ATTRIBUTES *__reg3 __sec_user (PVOID, PSID, PSID,
- DWORD, BOOL);
-
-extern PSECURITY_DESCRIPTOR _recycler_sd (void *buf, bool users, bool dir);
-#define recycler_sd(users,dir) \
- (_recycler_sd (alloca (sizeof (SECURITY_DESCRIPTOR) + MAX_DACL_LEN (3)), \
- (users), \
- (dir)))
-
-extern PSECURITY_DESCRIPTOR _everyone_sd (void *buf, ACCESS_MASK access);
-#define everyone_sd(access) (_everyone_sd (alloca (SD_MIN_SIZE), (access)))
-
-#define sec_none_cloexec(f) (((f) & O_CLOEXEC ? &sec_none_nih : &sec_none))
-
-extern bool sec_acl (PACL acl, bool original, bool admins, PSID sid1 = NO_SID,
- PSID sid2 = NO_SID, DWORD access2 = 0);
-
-ssize_t __reg3 read_ea (HANDLE, path_conv &, const char *,
- char *, size_t);
-int __reg3 write_ea (HANDLE, path_conv &, const char *, const char *,
- size_t, int);
-
-/* Note: sid1 is usually (read: currently always) the current user's
- effective sid (cygheap->user.sid ()). */
-extern inline SECURITY_ATTRIBUTES *
-sec_user_nih (SECURITY_ATTRIBUTES *sa_buf, PSID sid1, PSID sid2 = NULL,
- DWORD access2 = 0)
-{
- return __sec_user (sa_buf, sid1, sid2, access2, FALSE);
-}
-
-extern inline SECURITY_ATTRIBUTES *
-sec_user (SECURITY_ATTRIBUTES *sa_buf, PSID sid1, PSID sid2 = NULL,
- DWORD access2 = 0)
-{
- return __sec_user (sa_buf, sid1, sid2, access2, TRUE);
-}
diff --git a/winsup/cygwin/select.cc b/winsup/cygwin/select.cc
deleted file mode 100644
index c72cd0c76..000000000
--- a/winsup/cygwin/select.cc
+++ /dev/null
@@ -1,1739 +0,0 @@
-/* select.cc
-
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-/* The following line means that the BSD socket definitions for
- fd_set, FD_ISSET etc. are used in this file. */
-
-#define __INSIDE_CYGWIN_NET__
-
-#include "winsup.h"
-#include <stdlib.h>
-#include <sys/param.h>
-#include "ntdll.h"
-
-#define USE_SYS_TYPES_FD_SET
-#include <winsock2.h>
-#include <netdb.h>
-#include "cygerrno.h"
-#include "security.h"
-#include "path.h"
-#include "fhandler.h"
-#include "select.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "pinfo.h"
-#include "sigproc.h"
-#include "cygtls.h"
-#include "cygwait.h"
-
-/*
- * All these defines below should be in sys/types.h
- * but because of the includes above, they may not have
- * been included. We create special UNIX_xxxx versions here.
- */
-
-#ifndef NBBY
-#define NBBY 8 /* number of bits in a byte */
-#endif /* NBBY */
-
-/*
- * Select uses bit masks of file descriptors in longs.
- * These macros manipulate such bit fields (the filesystem macros use chars).
- * FD_SETSIZE may be defined by the user, but the default here
- * should be >= NOFILE (param.h).
- */
-
-#define UNIX_NFDBITS (sizeof (fd_mask) * NBBY) /* bits per mask */
-#ifndef unix_howmany
-#define unix_howmany(x,y) (((x)+((y)-1))/(y))
-#endif
-
-#define unix_fd_set fd_set
-
-#define NULL_fd_set ((fd_set *) NULL)
-#define sizeof_fd_set(n) \
- ((size_t) (NULL_fd_set->fds_bits + unix_howmany ((n), UNIX_NFDBITS)))
-#define UNIX_FD_SET(n, p) \
- ((p)->fds_bits[(n)/UNIX_NFDBITS] |= (1L << ((n) % UNIX_NFDBITS)))
-#define UNIX_FD_CLR(n, p) \
- ((p)->fds_bits[(n)/UNIX_NFDBITS] &= ~(1L << ((n) % UNIX_NFDBITS)))
-#define UNIX_FD_ISSET(n, p) \
- ((p)->fds_bits[(n)/UNIX_NFDBITS] & (1L << ((n) % UNIX_NFDBITS)))
-#define UNIX_FD_ZERO(p, n) \
- memset ((caddr_t) (p), 0, sizeof_fd_set ((n)))
-
-#define allocfd_set(n) ({\
- size_t __sfds = sizeof_fd_set (n) + 8; \
- void *__res = alloca (__sfds); \
- memset (__res, 0, __sfds); \
- (fd_set *) __res; \
-})
-
-#define copyfd_set(to, from, n) memcpy (to, from, sizeof_fd_set (n));
-
-#define set_handle_or_return_if_not_open(h, s) \
- h = (s)->fh->get_handle (); \
- if (cygheap->fdtab.not_open ((s)->fd)) \
- { \
- (s)->thread_errno = EBADF; \
- return -1; \
- }
-
-static int select (int, fd_set *, fd_set *, fd_set *, DWORD);
-
-/* The main select code. */
-extern "C" int
-cygwin_select (int maxfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
- struct timeval *to)
-{
- select_printf ("select(%d, %p, %p, %p, %p)", maxfds, readfds, writefds, exceptfds, to);
-
- pthread_testcancel ();
- int res;
- if (maxfds < 0)
- {
- set_errno (EINVAL);
- res = -1;
- }
- else
- {
- /* Convert to milliseconds or INFINITE if to == NULL */
- DWORD ms = to ? (to->tv_sec * 1000) + (to->tv_usec / 1000) : INFINITE;
- if (ms == 0 && to->tv_usec)
- ms = 1; /* At least 1 ms granularity */
-
- if (to)
- select_printf ("to->tv_sec %ld, to->tv_usec %ld, ms %d", to->tv_sec, to->tv_usec, ms);
- else
- select_printf ("to NULL, ms %x", ms);
-
- res = select (maxfds, readfds ?: allocfd_set (maxfds),
- writefds ?: allocfd_set (maxfds),
- exceptfds ?: allocfd_set (maxfds), ms);
- }
- syscall_printf ("%R = select(%d, %p, %p, %p, %p)", res, maxfds, readfds,
- writefds, exceptfds, to);
- return res;
-}
-
-/* This function is arbitrarily split out from cygwin_select to avoid odd
- gcc issues with the use of allocfd_set and improper constructor handling
- for the sel variable. */
-static int
-select (int maxfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
- DWORD ms)
-{
- int res = select_stuff::select_loop;
-
- LONGLONG start_time = gtod.msecs (); /* Record the current time for later use. */
-
- select_stuff sel;
- sel.return_on_signal = 0;
-
- /* Allocate some fd_set structures using the number of fds as a guide. */
- fd_set *r = allocfd_set (maxfds);
- fd_set *w = allocfd_set (maxfds);
- fd_set *e = allocfd_set (maxfds);
-
- while (res == select_stuff::select_loop)
- {
- /* Build the select record per fd linked list and set state as
- needed. */
- for (int i = 0; i < maxfds; i++)
- if (!sel.test_and_set (i, readfds, writefds, exceptfds))
- {
- select_printf ("aborting due to test_and_set error");
- return -1; /* Invalid fd, maybe? */
- }
- select_printf ("sel.always_ready %d", sel.always_ready);
-
- /* Degenerate case. No fds to wait for. Just wait for time to run out
- or signal to arrive. */
- if (sel.start.next == NULL)
- switch (cygwait (ms))
- {
- case WAIT_SIGNALED:
- select_printf ("signal received");
- /* select() is always interrupted by a signal so set EINTR,
- unconditionally, ignoring any SA_RESTART detection by
- call_signal_handler(). */
- _my_tls.call_signal_handler ();
- set_sig_errno (EINTR);
- res = select_stuff::select_signalled;
- break;
- case WAIT_CANCELED:
- sel.destroy ();
- pthread::static_cancel_self ();
- /*NOTREACHED*/
- default:
- res = select_stuff::select_set_zero; /* Set res to zero below. */
- break;
- }
- else if (sel.always_ready || ms == 0)
- res = 0; /* Catch any active fds via
- sel.poll() below */
- else
- res = sel.wait (r, w, e, ms); /* wait for an fd to become
- become active or time out */
- select_printf ("res %d", res);
- if (res >= 0)
- {
- copyfd_set (readfds, r, maxfds);
- copyfd_set (writefds, w, maxfds);
- copyfd_set (exceptfds, e, maxfds);
- if (res == select_stuff::select_set_zero)
- res = 0;
- else
- /* Set the bit mask from sel records */
- res = sel.poll (readfds, writefds, exceptfds) ?: select_stuff::select_loop;
- }
- /* Always clean up everything here. If we're looping then build it
- all up again. */
- sel.cleanup ();
- sel.destroy ();
- /* Recalculate the time remaining to wait if we are going to be looping. */
- if (res == select_stuff::select_loop && ms != INFINITE)
- {
- select_printf ("recalculating ms");
- LONGLONG now = gtod.msecs ();
- if (now > (start_time + ms))
- {
- select_printf ("timed out after verification");
- res = 0;
- }
- else
- {
- ms -= (now - start_time);
- start_time = now;
- select_printf ("ms now %u", ms);
- }
- }
- }
-
- if (res < -1)
- res = -1;
- return res;
-}
-
-extern "C" int
-pselect(int maxfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
- const struct timespec *ts, const sigset_t *set)
-{
- struct timeval tv;
- sigset_t oldset = _my_tls.sigmask;
-
- __try
- {
- if (ts)
- {
- tv.tv_sec = ts->tv_sec;
- tv.tv_usec = ts->tv_nsec / 1000;
- }
- if (set)
- set_signal_mask (_my_tls.sigmask, *set);
- int ret = cygwin_select (maxfds, readfds, writefds, exceptfds,
- ts ? &tv : NULL);
- if (set)
- set_signal_mask (_my_tls.sigmask, oldset);
- return ret;
- }
- __except (EFAULT) {}
- __endtry
- return -1;
-}
-
-/* Call cleanup functions for all inspected fds. Gets rid of any
- executing threads. */
-void
-select_stuff::cleanup ()
-{
- select_record *s = &start;
-
- select_printf ("calling cleanup routines");
- while ((s = s->next))
- if (s->cleanup)
- {
- s->cleanup (s, this);
- s->cleanup = NULL;
- }
-}
-
-/* Destroy all storage associated with select stuff. */
-inline void
-select_stuff::destroy ()
-{
- select_record *s;
- select_record *snext = start.next;
-
- select_printf ("deleting select records");
- while ((s = snext))
- {
- snext = s->next;
- delete s;
- }
- start.next = NULL;
-}
-
-select_stuff::~select_stuff ()
-{
- cleanup ();
- destroy ();
-}
-
-#ifdef DEBUGGING
-void
-select_record::dump_select_record ()
-{
- select_printf ("fd %d, h %p, fh %p, thread_errno %d, windows_handle %p",
- fd, h, fh, thread_errno, windows_handle);
- select_printf ("read_ready %d, write_ready %d, except_ready %d",
- read_ready, write_ready, except_ready);
- select_printf ("read_selected %d, write_selected %d, except_selected %d, except_on_write %d",
- read_selected, write_selected, except_selected, except_on_write);
-
- select_printf ("startup %p, peek %p, verify %p cleanup %p, next %p",
- startup, peek, verify, cleanup, next);
-}
-#endif /*DEBUGGING*/
-
-/* Add a record to the select chain */
-bool
-select_stuff::test_and_set (int i, fd_set *readfds, fd_set *writefds,
- fd_set *exceptfds)
-{
- if (!UNIX_FD_ISSET (i, readfds) && !UNIX_FD_ISSET (i, writefds)
- && ! UNIX_FD_ISSET (i, exceptfds))
- return true;
-
- select_record *s = new select_record;
- if (!s)
- return false;
-
- s->next = start.next;
- start.next = s;
-
- if (UNIX_FD_ISSET (i, readfds) && !cygheap->fdtab.select_read (i, this))
- goto err;
- if (UNIX_FD_ISSET (i, writefds) && !cygheap->fdtab.select_write (i, this))
- goto err;
- if (UNIX_FD_ISSET (i, exceptfds) && !cygheap->fdtab.select_except (i, this))
- goto err; /* error */
-
- if (s->read_ready || s->write_ready || s->except_ready)
- always_ready = true;
-
- if (s->windows_handle)
- windows_used = true;
-
-#ifdef DEBUGGING
- s->dump_select_record ();
-#endif
- return true;
-
-err:
- start.next = s->next;
- delete s;
- return false;
-}
-
-/* The heart of select. Waits for an fd to do something interesting. */
-select_stuff::wait_states
-select_stuff::wait (fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
- DWORD ms)
-{
- HANDLE w4[MAXIMUM_WAIT_OBJECTS];
- select_record *s = &start;
- DWORD m = 0;
-
- set_signal_arrived here (w4[m++]);
- if ((w4[m] = pthread::get_cancel_event ()) != NULL)
- m++;
-
- DWORD startfds = m;
- /* Loop through the select chain, starting up anything appropriate and
- counting the number of active fds. */
- while ((s = s->next))
- {
- if (m >= MAXIMUM_WAIT_OBJECTS)
- {
- set_sig_errno (EINVAL);
- return select_error;
- }
- if (!s->startup (s, this))
- {
- s->set_select_errno ();
- return select_error;
- }
- if (s->h != NULL)
- {
- for (DWORD i = startfds; i < m; i++)
- if (w4[i] == s->h)
- goto next_while;
- w4[m++] = s->h;
- }
-next_while:;
- }
-
- debug_printf ("m %d, ms %u", m, ms);
-
- DWORD wait_ret;
- if (!windows_used)
- wait_ret = WaitForMultipleObjects (m, w4, FALSE, ms);
- else
- /* Using MWMO_INPUTAVAILABLE is the officially supported solution for
- the problem that the call to PeekMessage disarms the queue state
- so that a subsequent MWFMO hangs, even if there are still messages
- in the queue. */
- wait_ret = MsgWaitForMultipleObjectsEx (m, w4, ms,
- QS_ALLINPUT | QS_ALLPOSTMESSAGE,
- MWMO_INPUTAVAILABLE);
- select_printf ("wait_ret %d, m = %d. verifying", wait_ret, m);
-
- wait_states res;
- switch (wait_ret)
- {
- case WAIT_OBJECT_0:
- select_printf ("signal received");
- /* Need to get rid of everything when a signal occurs since we can't
- be assured that a signal handler won't jump out of select entirely. */
- cleanup ();
- destroy ();
- /* select() is always interrupted by a signal so set EINTR,
- unconditionally, ignoring any SA_RESTART detection by
- call_signal_handler(). */
- _my_tls.call_signal_handler ();
- set_sig_errno (EINTR);
- res = select_signalled; /* Cause loop exit in cygwin_select */
- break;
- case WAIT_FAILED:
- system_printf ("WaitForMultipleObjects failed, %E");
- s = &start;
- s->set_select_errno ();
- res = select_error;
- break;
- case WAIT_TIMEOUT:
- select_printf ("timed out");
- res = select_set_zero;
- break;
- case WAIT_OBJECT_0 + 1:
- if (startfds > 1)
- {
- cleanup ();
- destroy ();
- pthread::static_cancel_self ();
- /*NOTREACHED*/
- }
- /* Fall through. This wasn't a cancel event. It was just a normal object
- to wait for. */
- default:
- s = &start;
- bool gotone = false;
- /* Some types of objects (e.g., consoles) wake up on "inappropriate" events
- like mouse movements. The verify function will detect these situations.
- If it returns false, then this wakeup was a false alarm and we should go
- back to waiting. */
- while ((s = s->next))
- if (s->saw_error ())
- {
- set_errno (s->saw_error ());
- res = select_error; /* Somebody detected an error */
- goto out;
- }
- else if ((((wait_ret >= m && s->windows_handle) || s->h == w4[wait_ret]))
- && s->verify (s, readfds, writefds, exceptfds))
- gotone = true;
-
- if (!gotone)
- res = select_loop;
- else
- res = select_ok;
- select_printf ("gotone %d", gotone);
- break;
- }
-out:
- select_printf ("returning %d", res);
- return res;
-}
-
-static int
-set_bits (select_record *me, fd_set *readfds, fd_set *writefds,
- fd_set *exceptfds)
-{
- int ready = 0;
- fhandler_socket *sock;
- select_printf ("me %p, testing fd %d (%s)", me, me->fd, me->fh->get_name ());
- if (me->read_selected && me->read_ready)
- {
- UNIX_FD_SET (me->fd, readfds);
- ready++;
- }
- if (me->write_selected && me->write_ready)
- {
- UNIX_FD_SET (me->fd, writefds);
- if (me->except_on_write && (sock = me->fh->is_socket ()))
- {
- /* Set readfds entry in case of a failed connect. */
- if (!me->read_ready && me->read_selected
- && sock->connect_state () == connect_failed)
- UNIX_FD_SET (me->fd, readfds);
- }
- ready++;
- }
- if (me->except_selected && me->except_ready)
- {
- UNIX_FD_SET (me->fd, exceptfds);
- ready++;
- }
- select_printf ("ready %d", ready);
- return ready;
-}
-
-/* Poll every fd in the select chain. Set appropriate fd in mask. */
-int
-select_stuff::poll (fd_set *readfds, fd_set *writefds, fd_set *exceptfds)
-{
- int n = 0;
- select_record *s = &start;
- while ((s = s->next))
- n += (!s->peek || s->peek (s, true)) ?
- set_bits (s, readfds, writefds, exceptfds) : 0;
- return n;
-}
-
-static int
-verify_true (select_record *, fd_set *, fd_set *, fd_set *)
-{
- return 1;
-}
-
-static int
-verify_ok (select_record *me, fd_set *readfds, fd_set *writefds,
- fd_set *exceptfds)
-{
- return set_bits (me, readfds, writefds, exceptfds);
-}
-
-static int
-no_startup (select_record *, select_stuff *)
-{
- return 1;
-}
-
-static int
-no_verify (select_record *, fd_set *, fd_set *, fd_set *)
-{
- return 0;
-}
-
-static int
-pipe_data_available (int fd, fhandler_base *fh, HANDLE h, bool writing)
-{
- IO_STATUS_BLOCK iosb = {{0}, 0};
- FILE_PIPE_LOCAL_INFORMATION fpli = {0};
-
- bool res;
- if (fh->has_ongoing_io ())
- res = false;
- else if (NtQueryInformationFile (h, &iosb, &fpli, sizeof (fpli),
- FilePipeLocalInformation))
- {
- /* If NtQueryInformationFile fails, optimistically assume the
- pipe is writable. This could happen if we somehow
- inherit a pipe that doesn't permit FILE_READ_ATTRIBUTES
- access on the write end. */
- select_printf ("fd %d, %s, NtQueryInformationFile failed",
- fd, fh->get_name ());
- res = writing ? true : -1;
- }
- else if (!writing)
- {
- paranoid_printf ("fd %d, %s, read avail %u", fd, fh->get_name (),
- fpli.ReadDataAvailable);
- res = !!fpli.ReadDataAvailable;
- }
- else if ((res = (fpli.WriteQuotaAvailable = (fpli.OutboundQuota -
- fpli.ReadDataAvailable))))
- /* If there is anything available in the pipe buffer then signal
- that. This means that a pipe could still block since you could
- be trying to write more to the pipe than is available in the
- buffer but that is the hazard of select(). */
- paranoid_printf ("fd %d, %s, write: size %u, avail %u", fd,
- fh->get_name (), fpli.OutboundQuota,
- fpli.WriteQuotaAvailable);
- else if ((res = (fpli.OutboundQuota < PIPE_BUF &&
- fpli.WriteQuotaAvailable == fpli.OutboundQuota)))
- /* If we somehow inherit a tiny pipe (size < PIPE_BUF), then consider
- the pipe writable only if it is completely empty, to minimize the
- probability that a subsequent write will block. */
- select_printf ("fd, %s, write tiny pipe: size %u, avail %u",
- fd, fh->get_name (), fpli.OutboundQuota,
- fpli.WriteQuotaAvailable);
- return res ?: -!!(fpli.NamedPipeState & FILE_PIPE_CLOSING_STATE);
-}
-
-static int
-peek_pipe (select_record *s, bool from_select)
-{
- HANDLE h;
- set_handle_or_return_if_not_open (h, s);
-
- int gotone = 0;
- fhandler_base *fh = (fhandler_base *) s->fh;
-
- DWORD dev = fh->get_device ();
- if (s->read_selected && dev != FH_PIPEW)
- {
- if (s->read_ready)
- {
- select_printf ("%s, already ready for read", fh->get_name ());
- gotone = 1;
- goto out;
- }
-
- switch (fh->get_major ())
- {
- case DEV_PTYM_MAJOR:
- {
- fhandler_pty_master *fhm = (fhandler_pty_master *) fh;
- fhm->flush_to_slave ();
- if (fhm->need_nl)
- {
- gotone = s->read_ready = true;
- goto out;
- }
- }
- break;
- default:
- if (fh->get_readahead_valid ())
- {
- select_printf ("readahead");
- gotone = s->read_ready = true;
- goto out;
- }
- }
-
- if (fh->bg_check (SIGTTIN) <= bg_eof)
- {
- gotone = s->read_ready = true;
- goto out;
- }
- int n = pipe_data_available (s->fd, fh, h, false);
-
- if (n < 0)
- {
- select_printf ("read: %s, n %d", fh->get_name (), n);
- if (s->except_selected)
- gotone += s->except_ready = true;
- if (s->read_selected)
- gotone += s->read_ready = true;
- }
- else if (n > 0)
- {
- select_printf ("read: %s, ready for read: avail %d", fh->get_name (), n);
- gotone += s->read_ready = true;
- }
- if (!gotone && s->fh->hit_eof ())
- {
- select_printf ("read: %s, saw EOF", fh->get_name ());
- if (s->except_selected)
- gotone += s->except_ready = true;
- if (s->read_selected)
- gotone += s->read_ready = true;
- }
- }
-
-out:
- if (s->write_selected && dev != FH_PIPER)
- {
- gotone += s->write_ready = pipe_data_available (s->fd, fh, h, true);
- select_printf ("write: %s, gotone %d", fh->get_name (), gotone);
- }
- return gotone;
-}
-
-static int start_thread_pipe (select_record *me, select_stuff *stuff);
-
-static DWORD WINAPI
-thread_pipe (void *arg)
-{
- select_pipe_info *pi = (select_pipe_info *) arg;
- DWORD sleep_time = 0;
- bool looping = true;
-
- while (looping)
- {
- for (select_record *s = pi->start; (s = s->next); )
- if (s->startup == start_thread_pipe)
- {
- if (peek_pipe (s, true))
- looping = false;
- if (pi->stop_thread)
- {
- select_printf ("stopping");
- looping = false;
- break;
- }
- }
- if (!looping)
- break;
- Sleep (sleep_time >> 3);
- if (sleep_time < 80)
- ++sleep_time;
- if (pi->stop_thread)
- break;
- }
- return 0;
-}
-
-static int
-start_thread_pipe (select_record *me, select_stuff *stuff)
-{
- select_pipe_info *pi = stuff->device_specific_pipe;
- if (pi->start)
- me->h = *((select_pipe_info *) stuff->device_specific_pipe)->thread;
- else
- {
- pi->start = &stuff->start;
- pi->stop_thread = false;
- pi->thread = new cygthread (thread_pipe, pi, "pipesel");
- me->h = *pi->thread;
- if (!me->h)
- return 0;
- }
- return 1;
-}
-
-static void
-pipe_cleanup (select_record *, select_stuff *stuff)
-{
- select_pipe_info *pi = (select_pipe_info *) stuff->device_specific_pipe;
- if (!pi)
- return;
- if (pi->thread)
- {
- pi->stop_thread = true;
- pi->thread->detach ();
- }
- delete pi;
- stuff->device_specific_pipe = NULL;
-}
-
-select_record *
-fhandler_pipe::select_read (select_stuff *ss)
-{
- if (!ss->device_specific_pipe
- && (ss->device_specific_pipe = new select_pipe_info) == NULL)
- return NULL;
-
- select_record *s = ss->start.next;
- s->startup = start_thread_pipe;
- s->peek = peek_pipe;
- s->verify = verify_ok;
- s->cleanup = pipe_cleanup;
- s->read_selected = true;
- s->read_ready = false;
- return s;
-}
-
-select_record *
-fhandler_pipe::select_write (select_stuff *ss)
-{
- if (!ss->device_specific_pipe
- && (ss->device_specific_pipe = new select_pipe_info) == NULL)
- return NULL;
- select_record *s = ss->start.next;
- s->startup = start_thread_pipe;
- s->peek = peek_pipe;
- s->verify = verify_ok;
- s->cleanup = pipe_cleanup;
- s->write_selected = true;
- s->write_ready = false;
- return s;
-}
-
-select_record *
-fhandler_pipe::select_except (select_stuff *ss)
-{
- if (!ss->device_specific_pipe
- && (ss->device_specific_pipe = new select_pipe_info) == NULL)
- return NULL;
- select_record *s = ss->start.next;
- s->startup = start_thread_pipe;
- s->peek = peek_pipe;
- s->verify = verify_ok;
- s->cleanup = pipe_cleanup;
- s->except_selected = true;
- s->except_ready = false;
- return s;
-}
-
-select_record *
-fhandler_fifo::select_read (select_stuff *ss)
-{
- if (!ss->device_specific_pipe
- && (ss->device_specific_pipe = new select_pipe_info) == NULL)
- return NULL;
- select_record *s = ss->start.next;
- s->startup = start_thread_pipe;
- s->peek = peek_pipe;
- s->verify = verify_ok;
- s->cleanup = pipe_cleanup;
- s->read_selected = true;
- s->read_ready = false;
- return s;
-}
-
-select_record *
-fhandler_fifo::select_write (select_stuff *ss)
-{
- if (!ss->device_specific_pipe
- && (ss->device_specific_pipe = new select_pipe_info) == NULL)
- return NULL;
- select_record *s = ss->start.next;
- s->startup = start_thread_pipe;
- s->peek = peek_pipe;
- s->verify = verify_ok;
- s->cleanup = pipe_cleanup;
- s->write_selected = true;
- s->write_ready = false;
- return s;
-}
-
-select_record *
-fhandler_fifo::select_except (select_stuff *ss)
-{
- if (!ss->device_specific_pipe
- && (ss->device_specific_pipe = new select_pipe_info) == NULL)
- return NULL;
- select_record *s = ss->start.next;
- s->startup = start_thread_pipe;
- s->peek = peek_pipe;
- s->verify = verify_ok;
- s->cleanup = pipe_cleanup;
- s->except_selected = true;
- s->except_ready = false;
- return s;
-}
-
-static int
-peek_console (select_record *me, bool)
-{
- extern const char * get_nonascii_key (INPUT_RECORD& input_rec, char *);
- fhandler_console *fh = (fhandler_console *) me->fh;
-
- if (!me->read_selected)
- return me->write_ready;
-
- if (fh->get_readahead_valid ())
- {
- select_printf ("readahead");
- return me->read_ready = true;
- }
-
- if (me->read_ready)
- {
- select_printf ("already ready");
- return 1;
- }
-
- INPUT_RECORD irec;
- DWORD events_read;
- HANDLE h;
- char tmpbuf[17];
- set_handle_or_return_if_not_open (h, me);
-
- for (;;)
- if (fh->bg_check (SIGTTIN) <= bg_eof)
- return me->read_ready = true;
- else if (!PeekConsoleInput (h, &irec, 1, &events_read) || !events_read)
- break;
- else
- {
- fh->send_winch_maybe ();
- if (irec.EventType == KEY_EVENT)
- {
- if (irec.Event.KeyEvent.bKeyDown
- && (irec.Event.KeyEvent.uChar.AsciiChar
- || get_nonascii_key (irec, tmpbuf)))
- return me->read_ready = true;
- }
- else
- {
- if (irec.EventType == MOUSE_EVENT
- && fh->mouse_aware (irec.Event.MouseEvent))
- return me->read_ready = true;
- if (irec.EventType == FOCUS_EVENT && fh->focus_aware ())
- return me->read_ready = true;
- }
-
- /* Read and discard the event */
- ReadConsoleInput (h, &irec, 1, &events_read);
- }
-
- return me->write_ready;
-}
-
-static int
-verify_console (select_record *me, fd_set *rfds, fd_set *wfds,
- fd_set *efds)
-{
- return peek_console (me, true);
-}
-
-
-select_record *
-fhandler_console::select_read (select_stuff *ss)
-{
- select_record *s = ss->start.next;
- if (!s->startup)
- {
- s->startup = no_startup;
- s->verify = verify_console;
- set_cursor_maybe ();
- }
-
- s->peek = peek_console;
- s->h = get_handle ();
- s->read_selected = true;
- s->read_ready = false;
- return s;
-}
-
-select_record *
-fhandler_console::select_write (select_stuff *ss)
-{
- select_record *s = ss->start.next;
- if (!s->startup)
- {
- s->startup = no_startup;
- s->verify = no_verify;
- set_cursor_maybe ();
- }
-
- s->peek = peek_console;
- s->write_selected = true;
- s->write_ready = true;
- return s;
-}
-
-select_record *
-fhandler_console::select_except (select_stuff *ss)
-{
- select_record *s = ss->start.next;
- if (!s->startup)
- {
- s->startup = no_startup;
- s->verify = no_verify;
- set_cursor_maybe ();
- }
-
- s->peek = peek_console;
- s->except_selected = true;
- s->except_ready = false;
- return s;
-}
-
-select_record *
-fhandler_pty_common::select_read (select_stuff *ss)
-{
- if (!ss->device_specific_pipe
- && (ss->device_specific_pipe = new select_pipe_info) == NULL)
- return NULL;
-
- select_record *s = ss->start.next;
- s->startup = start_thread_pipe;
- s->peek = peek_pipe;
- s->verify = verify_ok;
- s->cleanup = pipe_cleanup;
- s->read_selected = true;
- s->read_ready = false;
- return s;
-}
-
-select_record *
-fhandler_pty_common::select_write (select_stuff *ss)
-{
- if (!ss->device_specific_pipe
- && (ss->device_specific_pipe = new select_pipe_info) == NULL)
- return NULL;
- select_record *s = ss->start.next;
- s->startup = start_thread_pipe;
- s->peek = peek_pipe;
- s->verify = verify_ok;
- s->cleanup = pipe_cleanup;
- s->write_selected = true;
- s->write_ready = false;
- return s;
-}
-
-select_record *
-fhandler_pty_common::select_except (select_stuff *ss)
-{
- if (!ss->device_specific_pipe
- && (ss->device_specific_pipe = new select_pipe_info) == NULL)
- return NULL;
- select_record *s = ss->start.next;
- s->startup = start_thread_pipe;
- s->peek = peek_pipe;
- s->verify = verify_ok;
- s->cleanup = pipe_cleanup;
- s->except_selected = true;
- s->except_ready = false;
- return s;
-}
-
-static int
-verify_tty_slave (select_record *me, fd_set *readfds, fd_set *writefds,
- fd_set *exceptfds)
-{
- if (IsEventSignalled (me->h))
- me->read_ready = true;
- return set_bits (me, readfds, writefds, exceptfds);
-}
-
-select_record *
-fhandler_pty_slave::select_read (select_stuff *ss)
-{
- select_record *s = ss->start.next;
- s->h = input_available_event;
- s->startup = no_startup;
- s->peek = peek_pipe;
- s->verify = verify_tty_slave;
- s->read_selected = true;
- s->read_ready = false;
- s->cleanup = NULL;
- return s;
-}
-
-select_record *
-fhandler_dev_null::select_read (select_stuff *ss)
-{
- select_record *s = ss->start.next;
- if (!s->startup)
- {
- s->startup = no_startup;
- s->verify = no_verify;
- }
- s->h = get_handle ();
- s->read_selected = true;
- s->read_ready = true;
- return s;
-}
-
-select_record *
-fhandler_dev_null::select_write (select_stuff *ss)
-{
- select_record *s = ss->start.next;
- if (!s->startup)
- {
- s->startup = no_startup;
- s->verify = no_verify;
- }
- s->h = get_handle ();
- s->write_selected = true;
- s->write_ready = true;
- return s;
-}
-
-select_record *
-fhandler_dev_null::select_except (select_stuff *ss)
-{
- select_record *s = ss->start.next;
- if (!s->startup)
- {
- s->startup = no_startup;
- s->verify = no_verify;
- }
- s->h = get_handle ();
- s->except_selected = true;
- s->except_ready = false;
- return s;
-}
-
-static int start_thread_serial (select_record *me, select_stuff *stuff);
-
-static int
-peek_serial (select_record *s, bool)
-{
- COMSTAT st;
-
- fhandler_serial *fh = (fhandler_serial *) s->fh;
-
- if (fh->get_readahead_valid () || fh->overlapped_armed < 0)
- return s->read_ready = true;
-
- select_printf ("fh->overlapped_armed %d", fh->overlapped_armed);
-
- HANDLE h;
- set_handle_or_return_if_not_open (h, s);
- int ready = 0;
-
- if ((s->read_selected && s->read_ready) || (s->write_selected && s->write_ready))
- {
- select_printf ("already ready");
- ready = 1;
- goto out;
- }
-
- /* This is apparently necessary for the com0com driver.
- See: http://cygwin.com/ml/cygwin/2009-01/msg00667.html */
- SetCommMask (h, 0);
-
- SetCommMask (h, EV_RXCHAR);
-
- if (!fh->overlapped_armed)
- {
- COMSTAT st;
-
- ResetEvent (fh->io_status.hEvent);
-
- if (!ClearCommError (h, &fh->ev, &st))
- {
- debug_printf ("ClearCommError");
- goto err;
- }
- else if (st.cbInQue)
- return s->read_ready = true;
- else if (WaitCommEvent (h, &fh->ev, &fh->io_status))
- return s->read_ready = true;
- else if (GetLastError () == ERROR_IO_PENDING)
- fh->overlapped_armed = 1;
- else
- {
- debug_printf ("WaitCommEvent");
- goto err;
- }
- }
-
- switch (WaitForSingleObject (fh->io_status.hEvent, 10L))
- {
- case WAIT_OBJECT_0:
- if (!ClearCommError (h, &fh->ev, &st))
- {
- debug_printf ("ClearCommError");
- goto err;
- }
- else if (!st.cbInQue)
- Sleep (10L);
- else
- {
- return s->read_ready = true;
- select_printf ("got something");
- }
- break;
- case WAIT_TIMEOUT:
- break;
- default:
- debug_printf ("WaitForMultipleObjects");
- goto err;
- }
-
-out:
- return ready;
-
-err:
- if (GetLastError () == ERROR_OPERATION_ABORTED)
- {
- select_printf ("operation aborted");
- return ready;
- }
-
- s->set_select_errno ();
- select_printf ("error %E");
- return -1;
-}
-
-static DWORD WINAPI
-thread_serial (void *arg)
-{
- select_serial_info *si = (select_serial_info *) arg;
- bool looping = true;
-
- while (looping)
- for (select_record *s = si->start; (s = s->next); )
- if (s->startup != start_thread_serial)
- continue;
- else
- {
- if (peek_serial (s, true))
- looping = false;
- if (si->stop_thread)
- {
- select_printf ("stopping");
- looping = false;
- break;
- }
- }
-
- select_printf ("exiting");
- return 0;
-}
-
-static int
-start_thread_serial (select_record *me, select_stuff *stuff)
-{
- if (stuff->device_specific_serial)
- me->h = *((select_serial_info *) stuff->device_specific_serial)->thread;
- else
- {
- select_serial_info *si = new select_serial_info;
- si->start = &stuff->start;
- si->stop_thread = false;
- si->thread = new cygthread (thread_serial, si, "sersel");
- me->h = *si->thread;
- stuff->device_specific_serial = si;
- }
- return 1;
-}
-
-static void
-serial_cleanup (select_record *, select_stuff *stuff)
-{
- select_serial_info *si = (select_serial_info *) stuff->device_specific_serial;
- if (!si)
- return;
- if (si->thread)
- {
- si->stop_thread = true;
- si->thread->detach ();
- }
- delete si;
- stuff->device_specific_serial = NULL;
-}
-
-select_record *
-fhandler_serial::select_read (select_stuff *ss)
-{
- select_record *s = ss->start.next;
- if (!s->startup)
- {
- s->startup = start_thread_serial;
- s->verify = verify_ok;
- s->cleanup = serial_cleanup;
- }
- s->peek = peek_serial;
- s->read_selected = true;
- s->read_ready = false;
- return s;
-}
-
-select_record *
-fhandler_serial::select_write (select_stuff *ss)
-{
- select_record *s = ss->start.next;
- if (!s->startup)
- {
- s->startup = no_startup;
- s->verify = verify_ok;
- }
- s->peek = peek_serial;
- s->h = get_handle ();
- s->write_selected = true;
- s->write_ready = true;
- return s;
-}
-
-select_record *
-fhandler_serial::select_except (select_stuff *ss)
-{
- select_record *s = ss->start.next;
- if (!s->startup)
- {
- s->startup = no_startup;
- s->verify = verify_ok;
- }
- s->h = NULL;
- s->peek = peek_serial;
- s->except_selected = false; // Can't do this
- s->except_ready = false;
- return s;
-}
-
-select_record *
-fhandler_base::select_read (select_stuff *ss)
-{
- select_record *s = ss->start.next;
- if (!s->startup)
- {
- s->startup = no_startup;
- s->verify = verify_ok;
- }
- s->h = get_handle ();
- s->read_selected = true;
- s->read_ready = true;
- return s;
-}
-
-select_record *
-fhandler_base::select_write (select_stuff *ss)
-{
- select_record *s = ss->start.next;
- if (!s->startup)
- {
- s->startup = no_startup;
- s->verify = verify_ok;
- }
- s->h = get_handle ();
- s->write_selected = true;
- s->write_ready = true;
- return s;
-}
-
-select_record *
-fhandler_base::select_except (select_stuff *ss)
-{
- select_record *s = ss->start.next;
- if (!s->startup)
- {
- s->startup = no_startup;
- s->verify = verify_ok;
- }
- s->h = NULL;
- s->except_selected = true;
- s->except_ready = false;
- return s;
-}
-
-static int
-peek_socket (select_record *me, bool)
-{
- fhandler_socket *fh = (fhandler_socket *) me->fh;
- long events;
- /* Don't play with the settings again, unless having taken a deep look into
- Richard W. Stevens Network Programming book. Thank you. */
- long evt_mask = (me->read_selected ? (FD_READ | FD_ACCEPT | FD_CLOSE) : 0)
- | (me->write_selected ? (FD_WRITE | FD_CONNECT | FD_CLOSE) : 0)
- | (me->except_selected ? FD_OOB : 0);
- int ret = fh->evaluate_events (evt_mask, events, false);
- if (me->read_selected)
- me->read_ready |= ret || !!(events & (FD_READ | FD_ACCEPT | FD_CLOSE));
- if (me->write_selected)
- me->write_ready |= ret || !!(events & (FD_WRITE | FD_CONNECT | FD_CLOSE));
- if (me->except_selected)
- me->except_ready |= !!(events & FD_OOB);
-
- select_printf ("read_ready: %d, write_ready: %d, except_ready: %d",
- me->read_ready, me->write_ready, me->except_ready);
- return me->read_ready || me->write_ready || me->except_ready;
-}
-
-static int start_thread_socket (select_record *, select_stuff *);
-
-static DWORD WINAPI
-thread_socket (void *arg)
-{
- select_socket_info *si = (select_socket_info *) arg;
- DWORD timeout = (si->num_w4 <= MAXIMUM_WAIT_OBJECTS)
- ? INFINITE
- : (64 / (roundup2 (si->num_w4, MAXIMUM_WAIT_OBJECTS)
- / MAXIMUM_WAIT_OBJECTS));
- bool event = false;
-
- select_printf ("stuff_start %p, timeout %u", si->start, timeout);
- while (!event)
- {
- for (select_record *s = si->start; (s = s->next); )
- if (s->startup == start_thread_socket)
- if (peek_socket (s, false))
- event = true;
- if (!event)
- for (int i = 0; i < si->num_w4; i += MAXIMUM_WAIT_OBJECTS)
- switch (WaitForMultipleObjects (MIN (si->num_w4 - i,
- MAXIMUM_WAIT_OBJECTS),
- si->w4 + i, FALSE, timeout))
- {
- case WAIT_FAILED:
- goto out;
- case WAIT_TIMEOUT:
- continue;
- case WAIT_OBJECT_0:
- if (!i) /* Socket event set. */
- goto out;
- /*FALLTHRU*/
- default:
- break;
- }
- }
-out:
- select_printf ("leaving thread_socket");
- return 0;
-}
-
-static inline bool init_tls_select_info () __attribute__ ((always_inline));
-static inline bool
-init_tls_select_info ()
-{
- if (!_my_tls.locals.select.sockevt)
- {
- _my_tls.locals.select.sockevt = CreateEvent (&sec_none_nih, TRUE, FALSE,
- NULL);
- if (!_my_tls.locals.select.sockevt)
- return false;
- }
- if (!_my_tls.locals.select.ser_num)
- {
- _my_tls.locals.select.ser_num
- = (LONG *) malloc (MAXIMUM_WAIT_OBJECTS * sizeof (LONG));
- if (!_my_tls.locals.select.ser_num)
- return false;
- _my_tls.locals.select.w4
- = (HANDLE *) malloc (MAXIMUM_WAIT_OBJECTS * sizeof (HANDLE));
- if (!_my_tls.locals.select.w4)
- {
- free (_my_tls.locals.select.ser_num);
- _my_tls.locals.select.ser_num = NULL;
- return false;
- }
- _my_tls.locals.select.max_w4 = MAXIMUM_WAIT_OBJECTS;
- }
- return true;
-}
-
-static int
-start_thread_socket (select_record *me, select_stuff *stuff)
-{
- select_socket_info *si;
-
- if ((si = (select_socket_info *) stuff->device_specific_socket))
- {
- me->h = *si->thread;
- return 1;
- }
-
- si = new select_socket_info;
-
- if (!init_tls_select_info ())
- {
- delete si;
- return 0;
- }
-
- si->ser_num = _my_tls.locals.select.ser_num;
- si->w4 = _my_tls.locals.select.w4;
-
- si->w4[0] = _my_tls.locals.select.sockevt;
- si->num_w4 = 1;
-
- select_record *s = &stuff->start;
- while ((s = s->next))
- if (s->startup == start_thread_socket)
- {
- /* No event/socket should show up multiple times. Every socket
- is uniquely identified by its serial number in the global
- wsock_events record. */
- const LONG ser_num = ((fhandler_socket *) s->fh)->serial_number ();
- for (int i = 1; i < si->num_w4; ++i)
- if (si->ser_num[i] == ser_num)
- goto continue_outer_loop;
- if (si->num_w4 >= _my_tls.locals.select.max_w4)
- {
- LONG *nser = (LONG *) realloc (si->ser_num,
- (_my_tls.locals.select.max_w4
- + MAXIMUM_WAIT_OBJECTS)
- * sizeof (LONG));
- if (!nser)
- {
- delete si;
- return 0;
- }
- _my_tls.locals.select.ser_num = si->ser_num = nser;
- HANDLE *nw4 = (HANDLE *) realloc (si->w4,
- (_my_tls.locals.select.max_w4
- + MAXIMUM_WAIT_OBJECTS)
- * sizeof (HANDLE));
- if (!nw4)
- {
- delete si;
- return 0;
- }
- _my_tls.locals.select.w4 = si->w4 = nw4;
- _my_tls.locals.select.max_w4 += MAXIMUM_WAIT_OBJECTS;
- }
- si->ser_num[si->num_w4] = ser_num;
- si->w4[si->num_w4++] = ((fhandler_socket *) s->fh)->wsock_event ();
- continue_outer_loop:
- ;
- }
- stuff->device_specific_socket = si;
- si->start = &stuff->start;
- select_printf ("stuff_start %p", &stuff->start);
- si->thread = new cygthread (thread_socket, si, "socksel");
- me->h = *si->thread;
- return 1;
-}
-
-void
-socket_cleanup (select_record *, select_stuff *stuff)
-{
- select_socket_info *si = (select_socket_info *) stuff->device_specific_socket;
- select_printf ("si %p si->thread %p", si, si ? si->thread : NULL);
- if (!si)
- return;
- if (si->thread)
- {
- SetEvent (si->w4[0]);
- /* Wait for thread to go away */
- si->thread->detach ();
- ResetEvent (si->w4[0]);
- }
- delete si;
- stuff->device_specific_socket = NULL;
- select_printf ("returning");
-}
-
-select_record *
-fhandler_socket::select_read (select_stuff *ss)
-{
- select_record *s = ss->start.next;
- if (!s->startup)
- {
- s->startup = start_thread_socket;
- s->verify = verify_true;
- s->cleanup = socket_cleanup;
- }
- s->peek = peek_socket;
- s->read_ready = saw_shutdown_read ();
- s->read_selected = true;
- return s;
-}
-
-select_record *
-fhandler_socket::select_write (select_stuff *ss)
-{
- select_record *s = ss->start.next;
- if (!s->startup)
- {
- s->startup = start_thread_socket;
- s->verify = verify_true;
- s->cleanup = socket_cleanup;
- }
- s->peek = peek_socket;
- s->write_ready = saw_shutdown_write () || connect_state () == unconnected;
- s->write_selected = true;
- if (connect_state () != unconnected)
- {
- s->except_ready = saw_shutdown_write () || saw_shutdown_read ();
- s->except_on_write = true;
- }
- return s;
-}
-
-select_record *
-fhandler_socket::select_except (select_stuff *ss)
-{
- select_record *s = ss->start.next;
- if (!s->startup)
- {
- s->startup = start_thread_socket;
- s->verify = verify_true;
- s->cleanup = socket_cleanup;
- }
- s->peek = peek_socket;
- /* FIXME: Is this right? Should these be used as criteria for except? */
- s->except_ready = saw_shutdown_write () || saw_shutdown_read ();
- s->except_selected = true;
- return s;
-}
-
-static int
-peek_windows (select_record *me, bool)
-{
- MSG m;
- HANDLE h;
- set_handle_or_return_if_not_open (h, me);
- /* We need the hWnd value, not the io_handle. */
- h = ((fhandler_windows *) me->fh)->get_hwnd ();
-
- if (me->read_selected && me->read_ready)
- return 1;
-
- if (PeekMessageW (&m, (HWND) h, 0, 0, PM_NOREMOVE))
- {
- me->read_ready = true;
- select_printf ("window %d(%p) ready", me->fd, h);
- return 1;
- }
-
- select_printf ("window %d(%p) not ready", me->fd, h);
- return me->write_ready;
-}
-
-static int
-verify_windows (select_record *me, fd_set *rfds, fd_set *wfds,
- fd_set *efds)
-{
- return peek_windows (me, true);
-}
-
-select_record *
-fhandler_windows::select_read (select_stuff *ss)
-{
- select_record *s = ss->start.next;
- if (!s->startup)
- {
- s->startup = no_startup;
- }
- s->verify = verify_windows;
- s->peek = peek_windows;
- s->read_selected = true;
- s->read_ready = false;
- s->windows_handle = true;
- return s;
-}
-
-select_record *
-fhandler_windows::select_write (select_stuff *ss)
-{
- select_record *s = ss->start.next;
- if (!s->startup)
- {
- s->startup = no_startup;
- s->verify = verify_ok;
- }
- s->peek = peek_windows;
- s->write_selected = true;
- s->write_ready = true;
- s->windows_handle = true;
- return s;
-}
-
-select_record *
-fhandler_windows::select_except (select_stuff *ss)
-{
- select_record *s = ss->start.next;
- if (!s->startup)
- {
- s->startup = no_startup;
- s->verify = verify_ok;
- }
- s->peek = peek_windows;
- s->except_selected = true;
- s->except_ready = false;
- s->windows_handle = true;
- return s;
-}
-
-static int
-peek_mailslot (select_record *me, bool)
-{
- HANDLE h;
- set_handle_or_return_if_not_open (h, me);
-
- if (me->read_selected && me->read_ready)
- return 1;
- DWORD msgcnt = 0;
- if (!GetMailslotInfo (h, NULL, NULL, &msgcnt, NULL))
- {
- select_printf ("mailslot %d(%p) error %E", me->fd, h);
- return 1;
- }
- if (msgcnt > 0)
- {
- me->read_ready = true;
- select_printf ("mailslot %d(%p) ready", me->fd, h);
- return 1;
- }
- select_printf ("mailslot %d(%p) not ready", me->fd, h);
- return 0;
-}
-
-static int
-verify_mailslot (select_record *me, fd_set *rfds, fd_set *wfds,
- fd_set *efds)
-{
- return peek_mailslot (me, true);
-}
-
-static int start_thread_mailslot (select_record *me, select_stuff *stuff);
-
-static DWORD WINAPI
-thread_mailslot (void *arg)
-{
- select_mailslot_info *mi = (select_mailslot_info *) arg;
- bool gotone = false;
- DWORD sleep_time = 0;
-
- for (;;)
- {
- select_record *s = mi->start;
- while ((s = s->next))
- if (s->startup == start_thread_mailslot)
- {
- if (peek_mailslot (s, true))
- gotone = true;
- if (mi->stop_thread)
- {
- select_printf ("stopping");
- goto out;
- }
- }
- /* Paranoid check */
- if (mi->stop_thread)
- {
- select_printf ("stopping from outer loop");
- break;
- }
- if (gotone)
- break;
- Sleep (sleep_time >> 3);
- if (sleep_time < 80)
- ++sleep_time;
- }
-out:
- return 0;
-}
-
-static int
-start_thread_mailslot (select_record *me, select_stuff *stuff)
-{
- if (stuff->device_specific_mailslot)
- {
- me->h = *((select_mailslot_info *) stuff->device_specific_mailslot)->thread;
- return 1;
- }
- select_mailslot_info *mi = new select_mailslot_info;
- mi->start = &stuff->start;
- mi->stop_thread = false;
- mi->thread = new cygthread (thread_mailslot, mi, "mailsel");
- me->h = *mi->thread;
- if (!me->h)
- return 0;
- stuff->device_specific_mailslot = mi;
- return 1;
-}
-
-static void
-mailslot_cleanup (select_record *, select_stuff *stuff)
-{
- select_mailslot_info *mi = (select_mailslot_info *) stuff->device_specific_mailslot;
- if (!mi)
- return;
- if (mi->thread)
- {
- mi->stop_thread = true;
- mi->thread->detach ();
- }
- delete mi;
- stuff->device_specific_mailslot = NULL;
-}
-
-select_record *
-fhandler_mailslot::select_read (select_stuff *ss)
-{
- select_record *s = ss->start.next;
- s->startup = start_thread_mailslot;
- s->peek = peek_mailslot;
- s->verify = verify_mailslot;
- s->cleanup = mailslot_cleanup;
- s->read_selected = true;
- s->read_ready = false;
- return s;
-}
diff --git a/winsup/cygwin/select.h b/winsup/cygwin/select.h
deleted file mode 100644
index 5ce092486..000000000
--- a/winsup/cygwin/select.h
+++ /dev/null
@@ -1,110 +0,0 @@
-/* select.h
-
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _SELECT_H_
-#define _SELECT_H_
-
-struct select_record
-{
- int fd;
- HANDLE h;
- fhandler_base *fh;
- int thread_errno;
- bool windows_handle;
- bool read_ready, write_ready, except_ready;
- bool read_selected, write_selected, except_selected;
- bool except_on_write;
- int (*startup) (select_record *, class select_stuff *);
- int (*peek) (select_record *, bool);
- int (*verify) (select_record *, fd_set *, fd_set *, fd_set *);
- void (*cleanup) (select_record *, class select_stuff *);
- struct select_record *next;
- void set_select_errno () {__seterrno (); thread_errno = errno;}
- int saw_error () {return thread_errno;}
- select_record (int): next (NULL) {}
- select_record (): fd (0), h (NULL), fh (NULL), thread_errno (0),
- windows_handle (false), read_ready (false), write_ready (false),
- except_ready (false), read_selected (false), write_selected (false),
- except_selected (false), except_on_write (false),
- startup (NULL), peek (NULL), verify (NULL), cleanup (NULL),
- next (NULL) {}
-#ifdef DEBUGGING
- void dump_select_record ();
-#endif
-};
-
-struct select_info
-{
- cygthread *thread;
- bool stop_thread;
- select_record *start;
- select_info (): thread (NULL), stop_thread (0), start (NULL) {}
-};
-
-struct select_pipe_info: public select_info
-{
- select_pipe_info (): select_info () {}
-};
-
-struct select_socket_info: public select_info
-{
- int num_w4;
- LONG *ser_num;
- HANDLE *w4;
- select_socket_info (): select_info (), num_w4 (0), ser_num (0), w4 (NULL) {}
-};
-
-struct select_serial_info: public select_info
-{
- select_serial_info (): select_info () {}
-};
-
-struct select_mailslot_info: public select_info
-{
- select_mailslot_info (): select_info () {}
-};
-
-class select_stuff
-{
-public:
- enum wait_states
- {
- select_signalled = -3,
- select_loop = -2,
- select_error = -1,
- select_ok = 0,
- select_set_zero = 1
- };
-
- ~select_stuff ();
- bool return_on_signal;
- bool always_ready, windows_used;
- select_record start;
-
- select_pipe_info *device_specific_pipe;
- select_socket_info *device_specific_socket;
- select_serial_info *device_specific_serial;
- select_mailslot_info *device_specific_mailslot;
-
- bool test_and_set (int, fd_set *, fd_set *, fd_set *);
- int poll (fd_set *, fd_set *, fd_set *);
- wait_states wait (fd_set *, fd_set *, fd_set *, DWORD);
- void cleanup ();
- void destroy ();
-
- select_stuff (): return_on_signal (false), always_ready (false),
- windows_used (false), start (0),
- device_specific_pipe (NULL),
- device_specific_socket (NULL),
- device_specific_serial (NULL),
- device_specific_mailslot (NULL) {}
-};
-#endif /* _SELECT_H_ */
diff --git a/winsup/cygwin/sem.cc b/winsup/cygwin/sem.cc
deleted file mode 100644
index f7a5db674..000000000
--- a/winsup/cygwin/sem.cc
+++ /dev/null
@@ -1,144 +0,0 @@
-/* sem.cc: XSI IPC interface for Cygwin.
-
- Copyright 2002, 2003, 2004, 2005, 2008, 2009, 2012, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include <unistd.h>
-
-#include "sigproc.h"
-
-#include "cygserver_sem.h"
-#include "cygtls.h"
-
-/*
- * client_request_sem Constructors
- */
-
-client_request_sem::client_request_sem (int semid,
- int semnum,
- int cmd,
- union semun *arg)
- : client_request (CYGSERVER_REQUEST_SEM, &_parameters, sizeof (_parameters))
-{
- _parameters.in.semop = SEMOP_semctl;
- ipc_set_proc_info (_parameters.in.ipcblk);
-
- _parameters.in.ctlargs.semid = semid;
- _parameters.in.ctlargs.semnum = semnum;
- _parameters.in.ctlargs.cmd = cmd;
- _parameters.in.ctlargs.arg = arg;
-
- msglen (sizeof (_parameters.in));
-}
-
-client_request_sem::client_request_sem (key_t key,
- int nsems,
- int semflg)
- : client_request (CYGSERVER_REQUEST_SEM, &_parameters, sizeof (_parameters))
-{
- _parameters.in.semop = SEMOP_semget;
- ipc_set_proc_info (_parameters.in.ipcblk);
-
- _parameters.in.getargs.key = key;
- _parameters.in.getargs.nsems = nsems;
- _parameters.in.getargs.semflg = semflg;
-
- msglen (sizeof (_parameters.in));
-}
-
-client_request_sem::client_request_sem (int semid,
- struct sembuf *sops,
- size_t nsops)
- : client_request (CYGSERVER_REQUEST_SEM, &_parameters, sizeof (_parameters))
-{
- _parameters.in.semop = SEMOP_semop;
- ipc_set_proc_info (_parameters.in.ipcblk);
-
- _parameters.in.opargs.semid = semid;
- _parameters.in.opargs.sops = sops;
- _parameters.in.opargs.nsops = nsops;
-
- msglen (sizeof (_parameters.in));
-}
-
-/*
- * XSI semaphore API. These are exported by the DLL.
- */
-
-extern "C" int
-semctl (int semid, int semnum, int cmd, ...)
-{
- union semun arg = {0};
- if (cmd == IPC_STAT || cmd == IPC_SET || cmd == IPC_INFO || cmd == SEM_INFO
- || cmd == GETALL || cmd == SETALL || cmd == SETVAL)
- {
- va_list ap;
- va_start (ap, cmd);
- arg = va_arg (ap, union semun);
- va_end (ap);
- }
- syscall_printf ("semctl (semid = %d, semnum = %d, cmd = %d, arg = %p)",
- semid, semnum, cmd, arg.buf);
- __try
- {
- client_request_sem request (semid, semnum, cmd, &arg);
- if (request.make_request () == -1 || request.retval () == -1)
- {
- syscall_printf ("-1 [%d] = semctl ()", request.error_code ());
- set_errno (request.error_code ());
- if (request.error_code () == ENOSYS)
- raise (SIGSYS);
- __leave;
- }
- return request.retval ();
- }
- __except (EFAULT) {}
- __endtry
- return -1;
-}
-
-extern "C" int
-semget (key_t key, int nsems, int semflg)
-{
- syscall_printf ("semget (key = %U, nsems = %d, semflg = %y)",
- key, nsems, semflg);
- client_request_sem request (key, nsems, semflg);
- if (request.make_request () == -1 || request.retval () == -1)
- {
- syscall_printf ("-1 [%d] = semget ()", request.error_code ());
- set_errno (request.error_code ());
- if (request.error_code () == ENOSYS)
- raise (SIGSYS);
- return -1;
- }
- return request.retval ();
-}
-
-extern "C" int
-semop (int semid, struct sembuf *sops, size_t nsops)
-{
- syscall_printf ("semop (semid = %d, sops = %p, nsops = %ld)",
- semid, sops, nsops);
- __try
- {
- client_request_sem request (semid, sops, nsops);
- if (request.make_request () == -1 || request.retval () == -1)
- {
- syscall_printf ("-1 [%d] = semop ()", request.error_code ());
- set_errno (request.error_code ());
- if (request.error_code () == ENOSYS)
- raise (SIGSYS);
- __leave;
- }
- return request.retval ();
- }
- __except (EFAULT) {}
- __endtry
- return -1;
-}
diff --git a/winsup/cygwin/setlsapwd.cc b/winsup/cygwin/setlsapwd.cc
deleted file mode 100644
index eb3b9e6bf..000000000
--- a/winsup/cygwin/setlsapwd.cc
+++ /dev/null
@@ -1,101 +0,0 @@
-/* setlsapwd.cc: Set LSA private data password for current user.
-
- Copyright 2008, 2009, 2011, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include "shared_info.h"
-#include "cygerrno.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "security.h"
-#include "cygserver_setpwd.h"
-#include "ntdll.h"
-#include <ntsecapi.h>
-#include <stdlib.h>
-#include <wchar.h>
-
-/*
- * client_request_setpwd Constructor
- */
-
-client_request_setpwd::client_request_setpwd (PUNICODE_STRING passwd)
- : client_request (CYGSERVER_REQUEST_SETPWD, &_parameters, sizeof (_parameters))
-{
- memset (_parameters.in.passwd, 0, sizeof _parameters.in.passwd);
- if (passwd->Length > 0 && passwd->Length < 256 * sizeof (WCHAR))
- wcpncpy (_parameters.in.passwd, passwd->Buffer, 255);
-
- msglen (sizeof (_parameters.in));
-}
-
-unsigned long
-setlsapwd (const char *passwd, const char *username)
-{
- unsigned long ret = (unsigned long) -1;
- HANDLE lsa;
- WCHAR sid[128];
- WCHAR key_name[128 + wcslen (CYGWIN_LSA_KEY_PREFIX)];
- PWCHAR data_buf = NULL;
- UNICODE_STRING key;
- UNICODE_STRING data;
-
- if (username)
- {
- cygsid psid;
- struct passwd *pw = internal_getpwnam (username);
-
- if (!pw || !psid.getfrompw (pw))
- {
- set_errno (ENOENT);
- return ret;
- }
- wcpcpy (wcpcpy (key_name, CYGWIN_LSA_KEY_PREFIX), psid.string (sid));
- }
- else
- wcpcpy (wcpcpy (key_name, CYGWIN_LSA_KEY_PREFIX),
- cygheap->user.get_windows_id (sid));
- RtlInitUnicodeString (&key, key_name);
- if (!passwd || ! *passwd
- || sys_mbstowcs_alloc (&data_buf, HEAP_NOTHEAP, passwd))
- {
- memset (&data, 0, sizeof data);
- if (data_buf)
- RtlInitUnicodeString (&data, data_buf);
- /* First try it locally. Works for admin accounts. */
- if ((lsa = lsa_open_policy (NULL, POLICY_CREATE_SECRET)))
- {
- NTSTATUS status = LsaStorePrivateData (lsa, &key,
- data.Length ? &data : NULL);
- /* Success or we're trying to remove a password entry which doesn't
- exist. */
- if (NT_SUCCESS (status)
- || (data.Length == 0 && status == STATUS_OBJECT_NAME_NOT_FOUND))
- ret = 0;
- else
- __seterrno_from_nt_status (status);
- lsa_close_policy (lsa);
- }
- else if (ret && !username)
- {
- client_request_setpwd request (&data);
- if (request.make_request () == -1 || request.error_code ())
- set_errno (request.error_code ());
- else
- ret = 0;
- }
- if (data_buf)
- {
- RtlSecureZeroMemory (data.Buffer, data.Length);
- free (data_buf);
- }
- }
- return ret;
-}
diff --git a/winsup/cygwin/shared.cc b/winsup/cygwin/shared.cc
deleted file mode 100644
index 202d8ccfa..000000000
--- a/winsup/cygwin/shared.cc
+++ /dev/null
@@ -1,359 +0,0 @@
-/* shared.cc: shared data area support.
-
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include "miscfuncs.h"
-#include <unistd.h>
-#include "cygerrno.h"
-#include "pinfo.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "heap.h"
-#include "shared_info_magic.h"
-#include "registry.h"
-#include "cygwin_version.h"
-#include "spinlock.h"
-#include <alloca.h>
-#include <wchar.h>
-
-shared_info NO_COPY *cygwin_shared;
-user_info NO_COPY *user_shared;
-HANDLE NO_COPY cygwin_shared_h;
-HANDLE NO_COPY cygwin_user_h;
-
-/* This function returns a handle to the top-level directory in the global
- NT namespace used to implement global objects including shared memory. */
-
-static HANDLE NO_COPY shared_parent_dir;
-
-HANDLE
-get_shared_parent_dir ()
-{
- UNICODE_STRING uname;
- OBJECT_ATTRIBUTES attr;
- NTSTATUS status;
-
- if (!shared_parent_dir)
- {
- WCHAR bnoname[MAX_PATH];
- __small_swprintf (bnoname, L"\\BaseNamedObjects\\%s%s-%S",
- cygwin_version.shared_id,
- _cygwin_testing ? cygwin_version.dll_build_date : "",
- &cygheap->installation_key);
- RtlInitUnicodeString (&uname, bnoname);
- InitializeObjectAttributes (&attr, &uname, OBJ_OPENIF, NULL,
- everyone_sd (CYG_SHARED_DIR_ACCESS));
- status = NtCreateDirectoryObject (&shared_parent_dir,
- CYG_SHARED_DIR_ACCESS, &attr);
- if (!NT_SUCCESS (status))
- api_fatal ("NtCreateDirectoryObject(%S): %y", &uname, status);
- }
- return shared_parent_dir;
-}
-
-static HANDLE NO_COPY session_parent_dir;
-
-HANDLE
-get_session_parent_dir ()
-{
- UNICODE_STRING uname;
- OBJECT_ATTRIBUTES attr;
- NTSTATUS status;
-
- if (!session_parent_dir)
- {
- PROCESS_SESSION_INFORMATION psi;
- status = NtQueryInformationProcess (NtCurrentProcess (),
- ProcessSessionInformation,
- &psi, sizeof psi, NULL);
- if (!NT_SUCCESS (status) || psi.SessionId == 0)
- session_parent_dir = get_shared_parent_dir ();
- else
- {
- WCHAR bnoname[MAX_PATH];
- __small_swprintf (bnoname,
- L"\\Sessions\\BNOLINKS\\%d\\%s%s-%S",
- psi.SessionId, cygwin_version.shared_id,
- _cygwin_testing ? cygwin_version.dll_build_date : "",
- &cygheap->installation_key);
- RtlInitUnicodeString (&uname, bnoname);
- InitializeObjectAttributes (&attr, &uname, OBJ_OPENIF, NULL,
- everyone_sd(CYG_SHARED_DIR_ACCESS));
- status = NtCreateDirectoryObject (&session_parent_dir,
- CYG_SHARED_DIR_ACCESS, &attr);
- if (!NT_SUCCESS (status))
- api_fatal ("NtCreateDirectoryObject(%S): %y", &uname, status);
- }
- }
- return session_parent_dir;
-}
-
-char * __stdcall
-shared_name (char *ret_buf, const char *str, int num)
-{
- __small_sprintf (ret_buf, "%s.%d", str, num);
- return ret_buf;
-}
-
-WCHAR * __stdcall
-shared_name (WCHAR *ret_buf, const WCHAR *str, int num)
-{
- __small_swprintf (ret_buf, L"%W.%d", str, num);
- return ret_buf;
-}
-
-#define page_const ((ptrdiff_t) 65535)
-#define pround(n) ((ptrdiff_t)(((n) + page_const) & ~page_const))
-
-/* The order in offsets is so that the constant blocks shared_info
- and user_info are right below the cygwin DLL, then the pinfo block
- which changes with each process. Below that is the console_state,
- an optional block which only exists when running in a Windows console
- window. Therefore, if we are not running in a console, we have 64K
- more of contiguous memory below the Cygwin DLL. */
-static ptrdiff_t offsets[] =
-{
- - pround (sizeof (shared_info)), /* SH_CYGWIN_SHARED */
- - pround (sizeof (shared_info)) /* SH_USER_SHARED */
- - pround (sizeof (user_info)),
- - pround (sizeof (shared_info)) /* SH_MYSELF */
- - pround (sizeof (user_info))
- - pround (sizeof (_pinfo)),
- - pround (sizeof (shared_info)) /* SH_SHARED_CONSOLE */
- - pround (sizeof (user_info))
- - pround (sizeof (_pinfo))
- - pround (sizeof (fhandler_console::console_state)),
- 0
-};
-
-#define off_addr(x) ((void *)((caddr_t) cygwin_hmodule + offsets[x]))
-
-void * __stdcall
-open_shared (const WCHAR *name, int n, HANDLE& shared_h, DWORD size,
- shared_locations m, PSECURITY_ATTRIBUTES psa, DWORD access)
-{
- return open_shared (name, n, shared_h, size, &m, psa, access);
-}
-
-void * __stdcall
-open_shared (const WCHAR *name, int n, HANDLE& shared_h, DWORD size,
- shared_locations *m, PSECURITY_ATTRIBUTES psa, DWORD access)
-{
- void *shared;
-
- void *addr;
- if (*m == SH_JUSTCREATE || *m == SH_JUSTOPEN)
- addr = NULL;
- else
- {
- addr = off_addr (*m);
- VirtualFree (addr, 0, MEM_RELEASE);
- }
-
- WCHAR map_buf[MAX_PATH];
- WCHAR *mapname = NULL;
-
- if (shared_h)
- *m = SH_JUSTOPEN;
- else
- {
- if (name)
- mapname = shared_name (map_buf, name, n);
- if (*m == SH_JUSTOPEN)
- shared_h = OpenFileMappingW (access, FALSE, mapname);
- else
- {
- shared_h = CreateFileMappingW (INVALID_HANDLE_VALUE, psa,
- PAGE_READWRITE, 0, size, mapname);
- if (GetLastError () == ERROR_ALREADY_EXISTS)
- *m = SH_JUSTOPEN;
- }
- if (shared_h)
- /* ok! */;
- else if (*m != SH_JUSTOPEN)
- api_fatal ("CreateFileMapping %W, %E. Terminating.", mapname);
- else
- return NULL;
- }
-
- shared = (shared_info *) MapViewOfFileEx (shared_h, access, 0, 0, 0, addr);
-
- if (!shared && addr)
- {
- shared = (shared_info *) MapViewOfFileEx (shared_h,
- FILE_MAP_READ|FILE_MAP_WRITE,
- 0, 0, 0, NULL);
-#ifdef DEBUGGING
- system_printf ("relocating shared object %W(%d) from %p to %p", name, n, addr, shared);
-#endif
- offsets[0] = 0;
- }
-
- if (!shared)
- api_fatal ("MapViewOfFileEx '%W'(%p), %E. Terminating.", mapname, shared_h);
-
- if (*m == SH_CYGWIN_SHARED && offsets[0])
- {
- /* Reserve subsequent shared memory areas in non-relocated case only.
- There's no good reason to reserve the console shmem, because it's
- not yet known if we will allocate it at all. */
- for (int i = SH_USER_SHARED; i < SH_SHARED_CONSOLE; i++)
- {
- DWORD size = offsets[i - 1] - offsets[i];
- if (!VirtualAlloc (off_addr (i), size, MEM_RESERVE, PAGE_NOACCESS))
- continue; /* oh well */
- }
- }
-
- debug_printf ("name %W, n %d, shared %p (wanted %p), h %p, *m %d",
- mapname, n, shared, addr, shared_h, *m);
-
- return shared;
-}
-
-/* Second half of user shared initialization: Initialize content. */
-void
-user_info::initialize ()
-{
- /* Wait for initialization of the Cygwin per-user shared, if necessary */
- spinlock sversion (version, CURR_USER_MAGIC);
- if (!sversion)
- {
- cb = sizeof (*user_shared);
- /* Initialize mount table from system fstab prior to calling
- internal_getpwsid. This allows to convert pw_dir and pw_shell
- paths given in DOS notation to valid POSIX paths. */
- mountinfo.init (false);
- cygpsid sid (cygheap->user.sid ());
- struct passwd *pw = internal_getpwsid (sid);
- /* Correct the user name with what's defined in /etc/passwd before
- loading the user fstab file. */
- if (pw)
- cygheap->user.set_name (pw->pw_name);
- /* After fetching the user infos, add mount entries from user's fstab. */
- mountinfo.init (true);
- }
- else if (sversion != CURR_USER_MAGIC)
- sversion.multiple_cygwin_problem ("user shared memory version", version,
- sversion);
- else if (user_shared->cb != sizeof (*user_shared))
- sversion.multiple_cygwin_problem ("user shared memory size", cb,
- sizeof (*user_shared));
-}
-
-/* First half of user shared initialization: Create shared mem region. */
-void
-user_info::create (bool reinit)
-{
- WCHAR name[UNLEN + 1] = L""; /* Large enough for SID */
-
- if (reinit)
- {
- if (!UnmapViewOfFile (user_shared))
- debug_printf("UnmapViewOfFile %E");
- if (!ForceCloseHandle (cygwin_user_h))
- debug_printf("CloseHandle %E");
- cygwin_user_h = NULL;
- }
-
- if (!cygwin_user_h)
- cygheap->user.get_windows_id (name);
-
- user_shared = (user_info *) open_shared (name, USER_VERSION,
- cygwin_user_h, sizeof (user_info),
- SH_USER_SHARED, &sec_none);
- debug_printf ("opening user shared for '%W' at %p", name, user_shared);
- ProtectHandleINH (cygwin_user_h);
- debug_printf ("user shared version %x", user_shared->version);
- if (reinit)
- user_shared->initialize ();
-}
-
-void __stdcall
-shared_destroy ()
-{
- ForceCloseHandle (cygwin_shared_h);
- UnmapViewOfFile (cygwin_shared);
- ForceCloseHandle (cygwin_user_h);
- UnmapViewOfFile (user_shared);
-}
-
-/* Initialize obcaseinsensitive.*/
-void
-shared_info::init_obcaseinsensitive ()
-{
- /* Instead of reading the obcaseinsensitive registry value, test the
- actual state of case sensitivity handling in the kernel. */
- UNICODE_STRING sysroot;
- OBJECT_ATTRIBUTES attr;
- HANDLE h;
-
- RtlInitUnicodeString (&sysroot, L"\\SYSTEMROOT");
- InitializeObjectAttributes (&attr, &sysroot, 0, NULL, NULL);
- /* NtOpenSymbolicLinkObject returns STATUS_ACCESS_DENIED when called
- with a 0 access mask. However, if the kernel is case sensitive,
- it returns STATUS_OBJECT_NAME_NOT_FOUND because we used the incorrect
- case for the filename (It's actually "\\SystemRoot"). */
- obcaseinsensitive = NtOpenSymbolicLinkObject (&h, 0, &attr)
- != STATUS_OBJECT_NAME_NOT_FOUND;
-}
-
-void inline
-shared_info::create ()
-{
- cygwin_shared = (shared_info *) open_shared (L"shared",
- CYGWIN_VERSION_SHARED_DATA,
- cygwin_shared_h,
- sizeof (*cygwin_shared),
- SH_CYGWIN_SHARED,
- &sec_all_nih);
- cygwin_shared->initialize ();
-}
-
-void
-shared_info::initialize ()
-{
- spinlock sversion (version, CURR_SHARED_MAGIC);
- if (!sversion)
- {
- cb = sizeof (*this);
- get_session_parent_dir (); /* Create session dir if first process. */
- init_obcaseinsensitive (); /* Initialize obcaseinsensitive */
- tty.init (); /* Initialize tty table */
- mt.initialize (); /* Initialize shared tape information */
- /* Defer debug output printing the installation root and installation key
- up to this point. Debug output except for system_printf requires
- the global shared memory to exist. */
- debug_printf ("Installation root: <%W> key: <%S>",
- cygheap->installation_root, &cygheap->installation_key);
- }
- else if (sversion != CURR_SHARED_MAGIC)
- sversion.multiple_cygwin_problem ("system shared memory version",
- sversion, CURR_SHARED_MAGIC);
- else if (cb != sizeof (*this))
- system_printf ("size of shared memory region changed from %lu to %u",
- sizeof (*this), cb);
- /* FIXME? Shouldn't this be in memory_init? */
- cygheap->user_heap.init ();
-}
-
-void
-memory_init ()
-{
- shared_info::create (); /* Initialize global shared memory */
- user_info::create (false); /* Initialize per-user shared memory */
- /* Initialize tty list session stuff. Doesn't really belong here but
- this needs to be initialized before any tty or console manipulation
- happens and it is a common location. */
- tty_list::init_session ();
-}
diff --git a/winsup/cygwin/shared_info.h b/winsup/cygwin/shared_info.h
deleted file mode 100644
index 90b386fe6..000000000
--- a/winsup/cygwin/shared_info.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/* shared_info.h: shared info for cygwin
-
- Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
- 2011, 2012, 2013 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "tty.h"
-#include "security.h"
-#include "mtinfo.h"
-#include "limits.h"
-#include "mount.h"
-
-#define CURR_USER_MAGIC 0xab1fcce8U
-
-class user_info
-{
- void initialize ();
-public:
- LONG version;
- DWORD cb;
- bool warned_msdos;
- bool warned_notty;
- bool warned_nonativesyms;
- mount_info mountinfo;
- friend void dll_crt0_1 (void *);
- static void create (bool);
-};
-
-/******** Shared Info ********/
-/* Data accessible to all tasks */
-
-
-#define CURR_SHARED_MAGIC 0x8fe4d9eeU
-
-#define USER_VERSION 1
-
-/* NOTE: Do not make gratuitous changes to the names or organization of the
- below class. The layout is checksummed to determine compatibility between
- different cygwin versions. */
-class shared_info
-{
- LONG version;
- DWORD cb;
- public:
- tty_list tty;
- LONG last_used_bindresvport;
- DWORD obcaseinsensitive;
- mtinfo mt;
-
- void initialize ();
- void init_obcaseinsensitive ();
- unsigned heap_chunk_size ();
- static void create ();
-};
-
-extern shared_info *cygwin_shared;
-extern user_info *user_shared;
-#define mount_table (&(user_shared->mountinfo))
-extern HANDLE cygwin_user_h;
-
-enum shared_locations
-{
- SH_CYGWIN_SHARED,
- SH_USER_SHARED,
- SH_MYSELF,
- SH_SHARED_CONSOLE,
- SH_TOTAL_SIZE,
- SH_JUSTCREATE,
- SH_JUSTOPEN
-
-};
-
-void memory_init ();
-void __stdcall shared_destroy ();
-
-#define shared_align_past(p) \
- ((char *) (system_info.dwAllocationGranularity * \
- (((DWORD) ((p) + 1) + system_info.dwAllocationGranularity - 1) / \
- system_info.dwAllocationGranularity)))
-
-HANDLE get_shared_parent_dir ();
-HANDLE get_session_parent_dir ();
-char *__stdcall shared_name (char *, const char *, int);
-WCHAR *__stdcall shared_name (WCHAR *, const WCHAR *, int);
-void *__stdcall open_shared (const WCHAR *, int, HANDLE&, DWORD,
- shared_locations, PSECURITY_ATTRIBUTES = &sec_all,
- DWORD = FILE_MAP_READ | FILE_MAP_WRITE);
-void *__stdcall open_shared (const WCHAR *, int, HANDLE&, DWORD,
- shared_locations *, PSECURITY_ATTRIBUTES = &sec_all,
- DWORD = FILE_MAP_READ | FILE_MAP_WRITE);
-extern void user_shared_create (bool reinit);
diff --git a/winsup/cygwin/shm.cc b/winsup/cygwin/shm.cc
deleted file mode 100644
index 868545e3b..000000000
--- a/winsup/cygwin/shm.cc
+++ /dev/null
@@ -1,393 +0,0 @@
-/* shm.cc: XSI IPC interface for Cygwin.
-
- Copyright 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2012, 2013, 2014
- Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include <sys/queue.h>
-#include <unistd.h>
-
-#include "pinfo.h"
-#include "sigproc.h"
-
-#include "cygserver_shm.h"
-#include "cygtls.h"
-#include "sync.h"
-#include "ntdll.h"
-
-/*
- * client_request_shm Constructors
- */
-
-client_request_shm::client_request_shm (int shmid,
- const void *shmaddr,
- int shmflg)
- : client_request (CYGSERVER_REQUEST_SHM, &_parameters, sizeof (_parameters))
-{
- _parameters.in.shmop = SHMOP_shmat;
- ipc_set_proc_info (_parameters.in.ipcblk);
-
- _parameters.in.atargs.shmid = shmid;
- _parameters.in.atargs.shmaddr = shmaddr;
- _parameters.in.atargs.shmflg = shmflg;
-
- msglen (sizeof (_parameters.in));
-}
-
-client_request_shm::client_request_shm (int shmid,
- int cmd,
- struct shmid_ds *buf)
- : client_request (CYGSERVER_REQUEST_SHM, &_parameters, sizeof (_parameters))
-{
- _parameters.in.shmop = SHMOP_shmctl;
- ipc_set_proc_info (_parameters.in.ipcblk);
-
- _parameters.in.ctlargs.shmid = shmid;
- _parameters.in.ctlargs.cmd = cmd;
- _parameters.in.ctlargs.buf = buf;
-
- msglen (sizeof (_parameters.in));
-}
-
-client_request_shm::client_request_shm (const void *shmaddr)
- : client_request (CYGSERVER_REQUEST_SHM, &_parameters, sizeof (_parameters))
-{
- _parameters.in.shmop = SHMOP_shmdt;
- ipc_set_proc_info (_parameters.in.ipcblk);
-
- _parameters.in.dtargs.shmaddr = shmaddr;
-
- msglen (sizeof (_parameters.in));
-}
-
-client_request_shm::client_request_shm (key_t key,
- size_t size,
- int shmflg)
- : client_request (CYGSERVER_REQUEST_SHM, &_parameters, sizeof (_parameters))
-{
- _parameters.in.shmop = SHMOP_shmget;
- ipc_set_proc_info (_parameters.in.ipcblk);
-
- _parameters.in.getargs.key = key;
- _parameters.in.getargs.size = size;
- _parameters.in.getargs.shmflg = shmflg;
-
- msglen (sizeof (_parameters.in));
-}
-
-client_request_shm::client_request_shm (proc *p1)
- : client_request (CYGSERVER_REQUEST_SHM, &_parameters, sizeof (_parameters))
-{
- _parameters.in.shmop = SHMOP_shmfork;
- ipc_set_proc_info (_parameters.in.ipcblk, true);
-
- _parameters.in.forkargs = *p1;
-}
-
-/* List of shmid's with file mapping HANDLE and size, returned by shmget. */
-struct shm_shmid_list {
- SLIST_ENTRY (shm_shmid_list) ssh_next;
- int shmid;
- vm_object_t hdl;
- size_t size;
- int ref_count;
-};
-
-static SLIST_HEAD (, shm_shmid_list) ssh_list;
-
-/* List of attached mappings, as returned by shmat. */
-struct shm_attached_list {
- SLIST_ENTRY (shm_attached_list) sph_next;
- vm_object_t ptr;
- shm_shmid_list *parent;
- ULONG access;
-};
-
-static SLIST_HEAD (, shm_attached_list) sph_list;
-
-static NO_COPY muto shm_guard;
-#define SLIST_LOCK() (shm_guard.init ("shm_guard")->acquire ())
-#define SLIST_UNLOCK() (shm_guard.release ())
-
-int __stdcall
-fixup_shms_after_fork ()
-{
- if (!SLIST_FIRST (&sph_list))
- return 0;
- pinfo p (myself->ppid);
- proc parent = { myself->ppid, p->dwProcessId, p->uid, p->gid };
-
- client_request_shm request (&parent);
- if (request.make_request () == -1 || request.retval () == -1)
- {
- syscall_printf ("-1 [%d] = fixup_shms_after_fork ()", request.error_code ());
- set_errno (request.error_code ());
- return 0;
- }
- shm_attached_list *sph_entry;
- /* Reconstruct map from list... */
- SLIST_FOREACH (sph_entry, &sph_list, sph_next)
- {
- NTSTATUS status;
- vm_object_t ptr = sph_entry->ptr;
- SIZE_T viewsize = sph_entry->parent->size;
- status = NtMapViewOfSection (sph_entry->parent->hdl, NtCurrentProcess (),
- &ptr, 0, sph_entry->parent->size, NULL,
- &viewsize, ViewShare, 0, sph_entry->access);
- if (!NT_SUCCESS (status) || ptr != sph_entry->ptr)
- api_fatal ("fixup_shms_after_fork: NtMapViewOfSection (%p), status %y. Terminating.",
- sph_entry->ptr, status);
- }
- return 0;
-}
-
-/*
- * XSI shmaphore API. These are exported by the DLL.
- */
-
-extern "C" void *
-shmat (int shmid, const void *shmaddr, int shmflg)
-{
- syscall_printf ("shmat (shmid = %d, shmaddr = %p, shmflg = %y)",
- shmid, shmaddr, shmflg);
-
- SLIST_LOCK ();
- shm_shmid_list *ssh_entry;
- SLIST_FOREACH (ssh_entry, &ssh_list, ssh_next)
- {
- if (ssh_entry->shmid == shmid)
- break;
- }
- if (!ssh_entry)
- {
- /* The shmid is unknown to this process so far. Try to get it from
- the server if it exists. Use special internal call to shmget,
- which interprets the key as a shmid and only returns a valid
- shmid if one exists. Since shmctl inserts a new entry for this
- shmid into ssh_list automatically, we just have to go through
- that list again. If that still fails, well, bad luck. */
- if (shmid && shmget ((key_t) shmid, 0, IPC_KEY_IS_SHMID) != -1)
- {
- SLIST_FOREACH (ssh_entry, &ssh_list, ssh_next)
- {
- if (ssh_entry->shmid == shmid)
- break;
- }
- }
- if (!ssh_entry)
- {
- /* Invalid shmid */
- set_errno (EINVAL);
- SLIST_UNLOCK ();
- return (void *) -1;
- }
- }
- /* Early increment ref counter. This allows further actions to run with
- unlocked lists, because shmdt or shmctl(IPC_RMID) won't delete this
- ssh_entry. */
- ++ssh_entry->ref_count;
- SLIST_UNLOCK ();
-
- vm_object_t attach_va = NULL;
- if (shmaddr)
- {
- if (shmflg & SHM_RND)
- attach_va = (vm_object_t)((vm_offset_t)shmaddr & ~(SHMLBA-1));
- else
- attach_va = (vm_object_t)shmaddr;
- /* Don't even bother to call anything if shmaddr is NULL or
- not aligned. */
- if (!attach_va || (vm_offset_t)attach_va % SHMLBA)
- {
- set_errno (EINVAL);
- --ssh_entry->ref_count;
- return (void *) -1;
- }
- }
- /* Try allocating memory before calling cygserver. */
- shm_attached_list *sph_entry = new (shm_attached_list);
- if (!sph_entry)
- {
- set_errno (ENOMEM);
- --ssh_entry->ref_count;
- return (void *) -1;
- }
- NTSTATUS status;
- vm_object_t ptr = NULL;
- SIZE_T viewsize = ssh_entry->size;
- ULONG access = (shmflg & SHM_RDONLY) ? PAGE_READONLY : PAGE_READWRITE;
- status = NtMapViewOfSection (ssh_entry->hdl, NtCurrentProcess (), &ptr, 0,
- ssh_entry->size, NULL, &viewsize, ViewShare,
- MEM_TOP_DOWN, access);
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- delete sph_entry;
- --ssh_entry->ref_count;
- return (void *) -1;
- }
- /* Use returned ptr address as is, so it's stored using the exact value
- in cygserver. */
- client_request_shm request (shmid, ptr, shmflg & ~SHM_RND);
- if (request.make_request () == -1 || request.ptrval () == NULL)
- {
- syscall_printf ("-1 [%d] = shmat ()", request.error_code ());
- UnmapViewOfFile (ptr);
- delete sph_entry;
- set_errno (request.error_code ());
- --ssh_entry->ref_count;
- if (request.error_code () == ENOSYS)
- raise (SIGSYS);
- return (void *) -1;
- }
- sph_entry->ptr = ptr;
- sph_entry->parent = ssh_entry;
- sph_entry->access = access;
- SLIST_LOCK ();
- SLIST_INSERT_HEAD (&sph_list, sph_entry, sph_next);
- SLIST_UNLOCK ();
- return ptr;
-}
-
-extern "C" int
-shmctl (int shmid, int cmd, struct shmid_ds *buf)
-{
- syscall_printf ("shmctl (shmid = %d, cmd = %d, buf = %p)",
- shmid, cmd, buf);
- __try
- {
- client_request_shm request (shmid, cmd, buf);
- if (request.make_request () == -1 || request.retval () == -1)
- {
- syscall_printf ("-1 [%d] = shmctl ()", request.error_code ());
- set_errno (request.error_code ());
- if (request.error_code () == ENOSYS)
- raise (SIGSYS);
- __leave;
- }
- if (cmd == IPC_RMID)
- {
- /* Cleanup */
- shm_shmid_list *ssh_entry, *ssh_next_entry;
- SLIST_LOCK ();
- SLIST_FOREACH_SAFE (ssh_entry, &ssh_list, ssh_next, ssh_next_entry)
- {
- if (ssh_entry->shmid == shmid)
- {
- /* Remove this entry from the list and close the handle
- only if it's not in use anymore. */
- if (ssh_entry->ref_count <= 0)
- {
- SLIST_REMOVE (&ssh_list, ssh_entry, shm_shmid_list,
- ssh_next);
- CloseHandle (ssh_entry->hdl);
- delete ssh_entry;
- }
- break;
- }
- }
- SLIST_UNLOCK ();
- }
- return request.retval ();
- }
- __except (EFAULT) {}
- __endtry
- return -1;
-}
-
-extern "C" int
-shmdt (const void *shmaddr)
-{
- syscall_printf ("shmdt (shmaddr = %p)", shmaddr);
- client_request_shm request (shmaddr);
- if (request.make_request () == -1 || request.retval () == -1)
- {
- syscall_printf ("-1 [%d] = shmdt ()", request.error_code ());
- set_errno (request.error_code ());
- if (request.error_code () == ENOSYS)
- raise (SIGSYS);
- return -1;
- }
- shm_attached_list *sph_entry, *sph_next_entry;
- /* Remove map from list... */
- SLIST_LOCK ();
- SLIST_FOREACH_SAFE (sph_entry, &sph_list, sph_next, sph_next_entry)
- {
- if (sph_entry->ptr == shmaddr)
- {
- SLIST_REMOVE (&sph_list, sph_entry, shm_attached_list, sph_next);
- /* ...unmap view... */
- UnmapViewOfFile (sph_entry->ptr);
- /* ...and, if this was the last reference to this shared section... */
- shm_shmid_list *ssh_entry = sph_entry->parent;
- if (--ssh_entry->ref_count <= 0)
- {
- /* ...delete parent entry and close handle. */
- SLIST_REMOVE (&ssh_list, ssh_entry, shm_shmid_list, ssh_next);
- CloseHandle (ssh_entry->hdl);
- delete ssh_entry;
- }
- delete sph_entry;
- break;
- }
- }
- SLIST_UNLOCK ();
- return request.retval ();
-}
-
-extern "C" int
-shmget (key_t key, size_t size, int shmflg)
-{
- syscall_printf ("shmget (key = %U, size = %d, shmflg = %y)",
- key, size, shmflg);
- /* Try allocating memory before calling cygserver. */
- shm_shmid_list *ssh_new_entry = new (shm_shmid_list);
- if (!ssh_new_entry)
- {
- set_errno (ENOMEM);
- return -1;
- }
- client_request_shm request (key, size, shmflg);
- if (request.make_request () == -1 || request.retval () == -1)
- {
- syscall_printf ("-1 [%d] = shmget ()", request.error_code ());
- delete ssh_new_entry;
- set_errno (request.error_code ());
- if (request.error_code () == ENOSYS)
- raise (SIGSYS);
- return -1;
- }
- int shmid = request.retval (); /* Shared mem ID */
- vm_object_t hdl = request.objval (); /* HANDLE associated with it. */
- shm_shmid_list *ssh_entry;
- SLIST_LOCK ();
- SLIST_FOREACH (ssh_entry, &ssh_list, ssh_next)
- {
- if (ssh_entry->shmid == shmid)
- {
- /* We already maintain an entry for this shmid. That means,
- the hdl returned by cygserver is a superfluous duplicate
- of the original hdl maintained by cygserver. We can safely
- delete it. */
- CloseHandle (hdl);
- delete ssh_new_entry;
- SLIST_UNLOCK ();
- return shmid;
- }
- }
- /* We arrive here only if shmid is a new one for this process. Add the
- shmid and hdl value to the list. */
- ssh_new_entry->shmid = shmid;
- ssh_new_entry->hdl = hdl;
- ssh_new_entry->size = size;
- ssh_new_entry->ref_count = 0;
- SLIST_INSERT_HEAD (&ssh_list, ssh_new_entry, ssh_next);
- SLIST_UNLOCK ();
- return shmid;
-}
diff --git a/winsup/cygwin/signal.cc b/winsup/cygwin/signal.cc
deleted file mode 100644
index d2ca81e00..000000000
--- a/winsup/cygwin/signal.cc
+++ /dev/null
@@ -1,626 +0,0 @@
-/* signal.cc
-
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Red Hat, Inc.
-
- Written by Steve Chamberlain of Cygnus Support, sac@cygnus.com
- Significant changes by Sergey Okhapkin <sos@prospect.com.ru>
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include <stdlib.h>
-#include <sys/cygwin.h>
-#include "pinfo.h"
-#include "sigproc.h"
-#include "cygtls.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "cygwait.h"
-
-#define _SA_NORESTART 0x8000
-
-static int __reg3 sigaction_worker (int, const struct sigaction *, struct sigaction *, bool);
-
-#define sigtrapped(func) ((func) != SIG_IGN && (func) != SIG_DFL)
-
-extern "C" _sig_func_ptr
-signal (int sig, _sig_func_ptr func)
-{
- sig_dispatch_pending ();
- _sig_func_ptr prev;
-
- /* check that sig is in right range */
- if (sig < 0 || sig >= NSIG || sig == SIGKILL || sig == SIGSTOP)
- {
- set_errno (EINVAL);
- syscall_printf ("SIG_ERR = signal (%d, %p)", sig, func);
- return (_sig_func_ptr) SIG_ERR;
- }
-
- prev = global_sigs[sig].sa_handler;
- struct sigaction& gs = global_sigs[sig];
- if (gs.sa_flags & _SA_NORESTART)
- gs.sa_flags &= ~SA_RESTART;
- else
- gs.sa_flags |= SA_RESTART;
-
- gs.sa_mask = SIGTOMASK (sig);
- gs.sa_handler = func;
- gs.sa_flags &= ~SA_SIGINFO;
-
- syscall_printf ("%p = signal (%d, %p)", prev, sig, func);
- return prev;
-}
-
-extern "C" int
-clock_nanosleep (clockid_t clk_id, int flags, const struct timespec *rqtp,
- struct timespec *rmtp)
-{
- const bool abstime = (flags & TIMER_ABSTIME) ? true : false;
- int res = 0;
- sig_dispatch_pending ();
- pthread_testcancel ();
-
- if (rqtp->tv_sec < 0 || rqtp->tv_nsec < 0 || rqtp->tv_nsec > 999999999L)
- return EINVAL;
-
- /* Explicitly disallowed by POSIX. Needs to be checked first to avoid
- being caught by the following test. */
- if (clk_id == CLOCK_THREAD_CPUTIME_ID)
- return EINVAL;
-
- /* support for CPU-time clocks is optional */
- if (CLOCKID_IS_PROCESS (clk_id) || CLOCKID_IS_THREAD (clk_id))
- return ENOTSUP;
-
- switch (clk_id)
- {
- case CLOCK_REALTIME:
- case CLOCK_MONOTONIC:
- break;
- default:
- /* unknown or illegal clock ID */
- return EINVAL;
- }
-
- LARGE_INTEGER timeout;
-
- timeout.QuadPart = (LONGLONG) rqtp->tv_sec * NSPERSEC
- + ((LONGLONG) rqtp->tv_nsec + 99LL) / 100LL;
-
- if (abstime)
- {
- struct timespec tp;
-
- clock_gettime (clk_id, &tp);
- /* Check for immediate timeout */
- if (tp.tv_sec > rqtp->tv_sec
- || (tp.tv_sec == rqtp->tv_sec && tp.tv_nsec > rqtp->tv_nsec))
- return 0;
-
- if (clk_id == CLOCK_REALTIME)
- timeout.QuadPart += FACTOR;
- else
- {
- /* other clocks need to be handled with a relative timeout */
- timeout.QuadPart -= tp.tv_sec * NSPERSEC + tp.tv_nsec / 100LL;
- timeout.QuadPart *= -1LL;
- }
- }
- else /* !abstime */
- timeout.QuadPart *= -1LL;
-
- syscall_printf ("clock_nanosleep (%ld.%09ld)", rqtp->tv_sec, rqtp->tv_nsec);
-
- int rc = cygwait (NULL, &timeout, cw_sig_eintr | cw_cancel | cw_cancel_self);
- if (rc == WAIT_SIGNALED)
- res = EINTR;
-
- /* according to POSIX, rmtp is used only if !abstime */
- if (rmtp && !abstime)
- {
- rmtp->tv_sec = (time_t) (timeout.QuadPart / NSPERSEC);
- rmtp->tv_nsec = (long) ((timeout.QuadPart % NSPERSEC) * 100LL);
- }
-
- syscall_printf ("%d = clock_nanosleep(%lu, %d, %ld.%09ld, %ld.%09.ld)",
- res, clk_id, flags, rqtp->tv_sec, rqtp->tv_nsec,
- rmtp ? rmtp->tv_sec : 0, rmtp ? rmtp->tv_nsec : 0);
- return res;
-}
-
-extern "C" int
-nanosleep (const struct timespec *rqtp, struct timespec *rmtp)
-{
- int res = clock_nanosleep (CLOCK_REALTIME, 0, rqtp, rmtp);
- if (res != 0)
- {
- set_errno (res);
- return -1;
- }
- return 0;
-}
-
-extern "C" unsigned int
-sleep (unsigned int seconds)
-{
- struct timespec req, rem;
- req.tv_sec = seconds;
- req.tv_nsec = 0;
- if (clock_nanosleep (CLOCK_REALTIME, 0, &req, &rem))
- return rem.tv_sec + (rem.tv_nsec > 0);
- return 0;
-}
-
-extern "C" unsigned int
-usleep (useconds_t useconds)
-{
- struct timespec req;
- req.tv_sec = useconds / 1000000;
- req.tv_nsec = (useconds % 1000000) * 1000;
- int res = clock_nanosleep (CLOCK_REALTIME, 0, &req, NULL);
- if (res != 0)
- {
- set_errno (res);
- return -1;
- }
- return 0;
-}
-
-extern "C" int
-sigprocmask (int how, const sigset_t *set, sigset_t *oldset)
-{
- int res = handle_sigprocmask (how, set, oldset, _my_tls.sigmask);
- if (res)
- {
- set_errno (res);
- res = -1;
- }
- syscall_printf ("%R = sigprocmask (%d, %p, %p)", res, how, set, oldset);
- return res;
-}
-
-int __reg3
-handle_sigprocmask (int how, const sigset_t *set, sigset_t *oldset, sigset_t& opmask)
-{
- /* check that how is in right range */
- if (how != SIG_BLOCK && how != SIG_UNBLOCK && how != SIG_SETMASK)
- {
- syscall_printf ("Invalid how value %d", how);
- return EINVAL;
- }
-
- __try
- {
- if (oldset)
- *oldset = opmask;
-
- if (set)
- {
- sigset_t newmask = opmask;
- switch (how)
- {
- case SIG_BLOCK:
- /* add set to current mask */
- newmask |= *set;
- break;
- case SIG_UNBLOCK:
- /* remove set from current mask */
- newmask &= ~*set;
- break;
- case SIG_SETMASK:
- /* just set it */
- newmask = *set;
- break;
- }
- set_signal_mask (opmask, newmask);
- }
- }
- __except (EFAULT)
- {
- return EFAULT;
- }
- __endtry
- return 0;
-}
-
-int __reg2
-_pinfo::kill (siginfo_t& si)
-{
- int res;
- DWORD this_process_state;
- pid_t this_pid;
-
- sig_dispatch_pending ();
-
- if (exists ())
- {
- bool sendSIGCONT;
- this_process_state = process_state;
- if ((sendSIGCONT = (si.si_signo < 0)))
- si.si_signo = -si.si_signo;
-
- if (si.si_signo == 0)
- res = 0;
- else if ((res = sig_send (this, si)))
- {
- sigproc_printf ("%d = sig_send, %E ", res);
- res = -1;
- }
- else if (sendSIGCONT)
- {
- siginfo_t si2 = {0};
- si2.si_signo = SIGCONT;
- si2.si_code = SI_KERNEL;
- sig_send (this, si2);
- }
- this_pid = pid;
- }
- else if (si.si_signo == 0 && this && process_state == PID_EXITED)
- {
- this_process_state = process_state;
- this_pid = pid;
- res = 0;
- }
- else
- {
- set_errno (ESRCH);
- this_process_state = 0;
- this_pid = 0;
- res = -1;
- }
-
- syscall_printf ("%d = _pinfo::kill (%d), pid %d, process_state %y", res,
- si.si_signo, this_pid, this_process_state);
- return res;
-}
-
-int
-raise (int sig)
-{
- return kill (myself->pid, sig);
-}
-
-static int
-kill0 (pid_t pid, siginfo_t& si)
-{
- syscall_printf ("kill (%d, %d)", pid, si.si_signo);
- /* check that sig is in right range */
- if (si.si_signo < 0 || si.si_signo >= NSIG)
- {
- set_errno (EINVAL);
- syscall_printf ("signal %d out of range", si.si_signo);
- return -1;
- }
-
- return (pid > 0) ? pinfo (pid)->kill (si) : kill_pgrp (-pid, si);
-}
-
-int
-kill (pid_t pid, int sig)
-{
- siginfo_t si = {0};
- si.si_signo = sig;
- si.si_code = SI_USER;
- return kill0 (pid, si);
-}
-
-int
-kill_pgrp (pid_t pid, siginfo_t& si)
-{
- int res = 0;
- int found = 0;
- int killself = 0;
-
- sigproc_printf ("pid %d, signal %d", pid, si.si_signo);
-
- winpids pids ((DWORD) PID_MAP_RW);
- for (unsigned i = 0; i < pids.npids; i++)
- {
- _pinfo *p = pids[i];
-
- if (!p->exists ())
- continue;
-
- /* Is it a process we want to kill? */
- if ((pid == 0 && (p->pgid != myself->pgid || p->ctty != myself->ctty)) ||
- (pid > 1 && p->pgid != pid) ||
- (si.si_signo < 0 && NOTSTATE (p, PID_STOPPED)))
- continue;
- sigproc_printf ("killing pid %d, pgrp %d, p->%s, %s", p->pid, p->pgid,
- p->__ctty (), myctty ());
- if (p == myself)
- killself++;
- else if (p->kill (si))
- res = -1;
- found++;
- }
-
- if (killself && !exit_state && myself->kill (si))
- res = -1;
-
- if (!found)
- {
- set_errno (ESRCH);
- res = -1;
- }
- syscall_printf ("%R = kill(%d, %d)", res, pid, si.si_signo);
- return res;
-}
-
-extern "C" int
-killpg (pid_t pgrp, int sig)
-{
- return kill (-pgrp, sig);
-}
-
-extern "C" void
-abort (void)
-{
- _my_tls.incyg++;
- sig_dispatch_pending ();
- /* Ensure that SIGABRT can be caught regardless of blockage. */
- sigset_t sig_mask;
- sigfillset (&sig_mask);
- sigdelset (&sig_mask, SIGABRT);
- set_signal_mask (_my_tls.sigmask, sig_mask);
-
- raise (SIGABRT);
- _my_tls.call_signal_handler (); /* Call any signal handler */
-
- /* Flush all streams as per SUSv2. */
- if (_GLOBAL_REENT->__cleanup)
- _GLOBAL_REENT->__cleanup (_GLOBAL_REENT);
- do_exit (SIGABRT); /* signal handler didn't exit. Goodbye. */
-}
-
-static int __reg3
-sigaction_worker (int sig, const struct sigaction *newact,
- struct sigaction *oldact, bool isinternal)
-{
- int res = -1;
- __try
- {
- sig_dispatch_pending ();
- /* check that sig is in right range */
- if (sig < 0 || sig >= NSIG)
- set_errno (EINVAL);
- else
- {
- struct sigaction oa = global_sigs[sig];
-
- if (!newact)
- sigproc_printf ("signal %d, newact %p, oa %p",
- sig, newact, oa, oa.sa_handler);
- else
- {
- sigproc_printf ("signal %d, newact %p (handler %p), oa %p",
- sig, newact, newact->sa_handler, oa,
- oa.sa_handler);
- if (sig == SIGKILL || sig == SIGSTOP)
- {
- set_errno (EINVAL);
- __leave;
- }
- struct sigaction na = *newact;
- struct sigaction& gs = global_sigs[sig];
- if (!isinternal)
- na.sa_flags &= ~_SA_INTERNAL_MASK;
- gs = na;
- if (!(gs.sa_flags & SA_NODEFER))
- gs.sa_mask |= SIGTOMASK(sig);
- if (gs.sa_handler == SIG_IGN)
- sig_clear (sig);
- if (gs.sa_handler == SIG_DFL && sig == SIGCHLD)
- sig_clear (sig);
- if (sig == SIGCHLD)
- {
- myself->process_state &= ~PID_NOCLDSTOP;
- if (gs.sa_flags & SA_NOCLDSTOP)
- myself->process_state |= PID_NOCLDSTOP;
- }
- }
-
- if (oldact)
- {
- *oldact = oa;
- oa.sa_flags &= ~_SA_INTERNAL_MASK;
- }
- res = 0;
- }
- }
- __except (EFAULT) {}
- __endtry
- return res;
-}
-
-extern "C" int
-sigaction (int sig, const struct sigaction *newact, struct sigaction *oldact)
-{
- int res = sigaction_worker (sig, newact, oldact, false);
- syscall_printf ("%R = sigaction(%d, %p, %p)", res, sig, newact, oldact);
- return res;
-}
-
-extern "C" int
-sigaddset (sigset_t *set, const int sig)
-{
- /* check that sig is in right range */
- if (sig <= 0 || sig >= NSIG)
- {
- set_errno (EINVAL);
- syscall_printf ("SIG_ERR = sigaddset signal %d out of range", sig);
- return -1;
- }
-
- *set |= SIGTOMASK (sig);
- return 0;
-}
-
-extern "C" int
-sigdelset (sigset_t *set, const int sig)
-{
- /* check that sig is in right range */
- if (sig <= 0 || sig >= NSIG)
- {
- set_errno (EINVAL);
- syscall_printf ("SIG_ERR = sigdelset signal %d out of range", sig);
- return -1;
- }
-
- *set &= ~SIGTOMASK (sig);
- return 0;
-}
-
-extern "C" int
-sigismember (const sigset_t *set, int sig)
-{
- /* check that sig is in right range */
- if (sig <= 0 || sig >= NSIG)
- {
- set_errno (EINVAL);
- syscall_printf ("SIG_ERR = sigdelset signal %d out of range", sig);
- return -1;
- }
-
- if (*set & SIGTOMASK (sig))
- return 1;
- else
- return 0;
-}
-
-extern "C" int
-sigemptyset (sigset_t *set)
-{
- *set = (sigset_t) 0;
- return 0;
-}
-
-extern "C" int
-sigfillset (sigset_t *set)
-{
- *set = ~((sigset_t) 0);
- return 0;
-}
-
-extern "C" int
-sigsuspend (const sigset_t *set)
-{
- int res = handle_sigsuspend (*set);
- syscall_printf ("%R = sigsuspend(%p)", res, set);
- return res;
-}
-
-extern "C" int
-sigpause (int signal_mask)
-{
- int res = handle_sigsuspend ((sigset_t) signal_mask);
- syscall_printf ("%R = sigpause(%y)", res, signal_mask);
- return res;
-}
-
-extern "C" int
-pause (void)
-{
- int res = handle_sigsuspend (_my_tls.sigmask);
- syscall_printf ("%R = pause()", res);
- return res;
-}
-
-extern "C" int
-siginterrupt (int sig, int flag)
-{
- struct sigaction act;
- sigaction (sig, NULL, &act);
- if (flag)
- {
- act.sa_flags &= ~SA_RESTART;
- act.sa_flags |= _SA_NORESTART;
- }
- else
- {
- act.sa_flags &= ~_SA_NORESTART;
- act.sa_flags |= SA_RESTART;
- }
- int res = sigaction_worker (sig, &act, NULL, true);
- syscall_printf ("%R = siginterrupt(%d, %y)", sig, flag);
- return res;
-}
-
-extern "C" int
-sigwait (const sigset_t *set, int *sig_ptr)
-{
- int sig = sigwaitinfo (set, NULL);
- if (sig > 0)
- *sig_ptr = sig;
- return sig > 0 ? 0 : -1;
-}
-
-extern "C" int
-sigwaitinfo (const sigset_t *set, siginfo_t *info)
-{
- int res = -1;
-
- pthread_testcancel ();
-
- __try
- {
- set_signal_mask (_my_tls.sigwait_mask, *set);
- sig_dispatch_pending (true);
-
- switch (cygwait (NULL, cw_infinite, cw_sig_eintr | cw_cancel | cw_cancel_self))
- {
- case WAIT_SIGNALED:
- if (!sigismember (set, _my_tls.infodata.si_signo))
- set_errno (EINTR);
- else
- {
- _my_tls.lock ();
- if (info)
- *info = _my_tls.infodata;
- res = _my_tls.infodata.si_signo;
- _my_tls.sig = 0;
- if (_my_tls.retaddr () == (__stack_t) sigdelayed)
- _my_tls.pop ();
- _my_tls.unlock ();
- }
- break;
- default:
- __seterrno ();
- break;
- }
- }
- __except (EFAULT) {
- res = -1;
- }
- __endtry
- sigproc_printf ("returning signal %d", res);
- return res;
-}
-
-/* FIXME: SUSv3 says that this function should block until the signal has
- actually been delivered. Currently, this will only happen when sending
- signals to the current process. It will not happen when sending signals
- to other processes. */
-extern "C" int
-sigqueue (pid_t pid, int sig, const union sigval value)
-{
- siginfo_t si = {0};
- pinfo dest (pid);
- if (!dest)
- {
- set_errno (ESRCH);
- return -1;
- }
- si.si_signo = sig;
- si.si_code = SI_QUEUE;
- si.si_value = value;
- return sig_send (dest, si);
-}
diff --git a/winsup/cygwin/sigproc.cc b/winsup/cygwin/sigproc.cc
deleted file mode 100644
index 12f61d2fb..000000000
--- a/winsup/cygwin/sigproc.cc
+++ /dev/null
@@ -1,1362 +0,0 @@
-/* sigproc.cc: inter/intra signal and sub process handler
-
- Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
- 2008, 2009, 2010, 2011, 2012, 2013 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include "miscfuncs.h"
-#include <stdlib.h>
-#include <sys/cygwin.h>
-#include "cygerrno.h"
-#include "sigproc.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "child_info_magic.h"
-#include "shared_info.h"
-#include "cygtls.h"
-#include "ntdll.h"
-#include "exception.h"
-
-/*
- * Convenience defines
- */
-#define WSSC 60000 // Wait for signal completion
-#define WPSP 40000 // Wait for proc_subproc mutex
-
-/*
- * Global variables
- */
-struct sigaction *global_sigs;
-
-const char *__sp_fn ;
-int __sp_ln;
-
-bool no_thread_exit_protect::flag;
-
-char NO_COPY myself_nowait_dummy[1] = {'0'};// Flag to sig_send that signal goes to
- // current process but no wait is required
-
-#define Static static NO_COPY
-
-
-Static int nprocs; // Number of deceased children
-Static char cprocs[(NPROCS + 1) * sizeof (pinfo)];// All my children info
-#define procs ((pinfo *) cprocs) // All this just to avoid expensive
- // constructor operation at DLL startup
-Static waitq waitq_head; // Start of queue for wait'ing threads
-
-Static muto sync_proc_subproc; // Control access to subproc stuff
-
-_cygtls NO_COPY *_sig_tls;
-
-Static HANDLE my_sendsig;
-Static HANDLE my_readsig;
-
-/* Function declarations */
-static int __reg1 checkstate (waitq *);
-static __inline__ bool get_proc_lock (DWORD, DWORD);
-static bool __stdcall remove_proc (int);
-static bool __stdcall stopped_or_terminated (waitq *, _pinfo *);
-static void WINAPI wait_sig (VOID *arg);
-
-/* wait_sig bookkeeping */
-
-class pending_signals
-{
- sigpacket sigs[NSIG + 1];
- sigpacket start;
- bool retry;
-
-public:
- void add (sigpacket&);
- bool pending () {retry = true; return !!start.next;}
- void clear (int sig) {sigs[sig].si.si_signo = 0;}
- friend void __reg1 sig_dispatch_pending (bool);;
- friend void WINAPI wait_sig (VOID *arg);
- friend void sigproc_init ();
-};
-
-Static pending_signals sigq;
-
-/* Functions */
-void __stdcall
-sigalloc ()
-{
- cygheap->sigs = global_sigs =
- (struct sigaction *) ccalloc_abort (HEAP_SIGS, NSIG, sizeof (struct sigaction));
- global_sigs[SIGSTOP].sa_flags = SA_RESTART | SA_NODEFER;
-}
-
-void __stdcall
-signal_fixup_after_exec ()
-{
- global_sigs = cygheap->sigs;
- /* Set up child's signal handlers */
- for (int i = 0; i < NSIG; i++)
- {
- global_sigs[i].sa_mask = 0;
- if (global_sigs[i].sa_handler != SIG_IGN)
- {
- global_sigs[i].sa_handler = SIG_DFL;
- global_sigs[i].sa_flags &= ~ SA_SIGINFO;
- }
- }
-}
-
-/* Get the sync_proc_subproc muto to control access to
- * children, proc arrays.
- * Attempt to handle case where process is exiting as we try to grab
- * the mutex.
- */
-static bool
-get_proc_lock (DWORD what, DWORD val)
-{
- if (!cygwin_finished_initializing)
- return true;
- Static int lastwhat = -1;
- if (!sync_proc_subproc)
- {
- sigproc_printf ("sync_proc_subproc is NULL");
- return false;
- }
- if (sync_proc_subproc.acquire (WPSP))
- {
- lastwhat = what;
- return true;
- }
- system_printf ("Couldn't acquire %s for(%d,%d), last %d, %E",
- sync_proc_subproc.name, what, val, lastwhat);
- return false;
-}
-
-static bool __stdcall
-proc_can_be_signalled (_pinfo *p)
-{
- if (!(p->exitcode & EXITCODE_SET))
- {
- if (ISSTATE (p, PID_INITIALIZING) ||
- (((p)->process_state & (PID_ACTIVE | PID_IN_USE)) ==
- (PID_ACTIVE | PID_IN_USE)))
- return true;
- }
-
- set_errno (ESRCH);
- return false;
-}
-
-bool __reg1
-pid_exists (pid_t pid)
-{
- return pinfo (pid)->exists ();
-}
-
-/* Return true if this is one of our children, false otherwise. */
-static inline bool __stdcall
-mychild (int pid)
-{
- for (int i = 0; i < nprocs; i++)
- if (procs[i]->pid == pid)
- return true;
- return false;
-}
-
-/* Handle all subprocess requests
- */
-int __reg2
-proc_subproc (DWORD what, uintptr_t val)
-{
- int rc = 1;
- int potential_match;
- int clearing;
- waitq *w;
-
-#define wval ((waitq *) val)
-#define vchild (*((pinfo *) val))
-
- sigproc_printf ("args: %x, %d", what, val);
-
- if (!get_proc_lock (what, val)) // Serialize access to this function
- {
- system_printf ("couldn't get proc lock. what %d, val %d", what, val);
- goto out1;
- }
-
- switch (what)
- {
- /* Add a new subprocess to the children arrays.
- * (usually called from the main thread)
- */
- case PROC_ADDCHILD:
- /* Filled up process table? */
- if (nprocs >= NPROCS)
- {
- sigproc_printf ("proc table overflow: hit %d processes, pid %d\n",
- nprocs, vchild->pid);
- rc = 0;
- set_errno (EAGAIN);
- break;
- }
- /* fall through intentionally */
-
- case PROC_DETACHED_CHILD:
- if (vchild != myself)
- {
- vchild->uid = myself->uid;
- vchild->gid = myself->gid;
- vchild->pgid = myself->pgid;
- vchild->sid = myself->sid;
- vchild->ctty = myself->ctty;
- vchild->cygstarted = true;
- vchild->process_state |= PID_INITIALIZING;
- vchild->ppid = what == PROC_DETACHED_CHILD ? 1 : myself->pid; /* always set last */
- }
- if (what == PROC_DETACHED_CHILD)
- break;
- /* fall through intentionally */
-
- case PROC_REATTACH_CHILD:
- procs[nprocs] = vchild;
- rc = procs[nprocs].wait ();
- if (rc)
- {
- sigproc_printf ("added pid %d to proc table, slot %d", vchild->pid,
- nprocs);
- nprocs++;
- }
- break;
-
- /* Handle a wait4() operation. Allocates an event for the calling
- * thread which is signaled when the appropriate pid exits or stops.
- * (usually called from the main thread)
- */
- case PROC_WAIT:
- wval->ev = NULL; // Don't know event flag yet
-
- if (wval->pid != -1 && wval->pid && !mychild (wval->pid))
- goto out; // invalid pid. flag no such child
-
- wval->status = 0; // Don't know status yet
- sigproc_printf ("wval->pid %d, wval->options %d", wval->pid, wval->options);
-
- /* If the first time for this thread, create a new event, otherwise
- * reset the event.
- */
- if ((wval->ev = wval->thread_ev) == NULL)
- {
- wval->ev = wval->thread_ev = CreateEvent (&sec_none_nih, TRUE, FALSE,
- NULL);
- ProtectHandle1 (wval->ev, wq_ev);
- }
-
- ResetEvent (wval->ev);
- w = waitq_head.next;
- waitq_head.next = wval; /* Add at the beginning. */
- wval->next = w; /* Link in rest of the list. */
- clearing = false;
- goto scan_wait;
-
- case PROC_EXEC_CLEANUP:
- while (nprocs)
- remove_proc (0);
- for (w = &waitq_head; w->next != NULL; w = w->next)
- CloseHandle (w->next->ev);
- break;
-
- /* Clear all waiting threads. Called from exceptions.cc prior to
- the main thread's dispatch to a signal handler function.
- (called from wait_sig thread) */
- case PROC_CLEARWAIT:
- /* Clear all "wait"ing threads. */
- if (val)
- sigproc_printf ("clear waiting threads");
- else
- sigproc_printf ("looking for processes to reap, nprocs %d", nprocs);
- clearing = val;
-
- scan_wait:
- /* Scan the linked list of wait()ing threads. If a wait's parameters
- match this pid, then activate it. */
- for (w = &waitq_head; w->next != NULL; w = w->next)
- {
- if ((potential_match = checkstate (w)) > 0)
- sigproc_printf ("released waiting thread");
- else if (!clearing && !(w->next->options & WNOHANG) && potential_match < 0)
- sigproc_printf ("only found non-terminated children");
- else if (potential_match <= 0) // nothing matched
- {
- sigproc_printf ("waiting thread found no children");
- HANDLE oldw = w->next->ev;
- w->next->pid = 0;
- if (clearing)
- w->next->status = -1; /* flag that a signal was received */
- else if (!potential_match || !(w->next->options & WNOHANG))
- w->next->ev = NULL;
- if (!SetEvent (oldw))
- system_printf ("couldn't wake up wait event %p, %E", oldw);
- w->next = w->next->next;
- }
- if (w->next == NULL)
- break;
- }
-
- if (!clearing)
- sigproc_printf ("finished processing terminated/stopped child");
- else
- {
- waitq_head.next = NULL;
- sigproc_printf ("finished clearing");
- }
-
- if (global_sigs[SIGCHLD].sa_handler == (void *) SIG_IGN)
- for (int i = 0; i < nprocs; i += remove_proc (i))
- continue;
- }
-
-out:
- sync_proc_subproc.release (); // Release the lock
-out1:
- sigproc_printf ("returning %d", rc);
- return rc;
-#undef wval
-#undef vchild
-}
-
-// FIXME: This is inelegant
-void
-_cygtls::remove_wq (DWORD wait)
-{
- if (wq.thread_ev)
- {
- if (exit_state < ES_FINAL && waitq_head.next && sync_proc_subproc
- && sync_proc_subproc.acquire (wait))
- {
- ForceCloseHandle1 (wq.thread_ev, wq_ev);
- wq.thread_ev = NULL;
- for (waitq *w = &waitq_head; w->next != NULL; w = w->next)
- if (w->next == &wq)
- {
- w->next = wq.next;
- break;
- }
- sync_proc_subproc.release ();
- }
- }
-
-}
-
-/* Terminate the wait_subproc thread.
- Called on process exit.
- Also called by spawn_guts to disassociate any subprocesses from this
- process. Subprocesses will then know to clean up after themselves and
- will not become procs. */
-void __stdcall
-proc_terminate ()
-{
- sigproc_printf ("nprocs %d", nprocs);
- if (nprocs)
- {
- sync_proc_subproc.acquire (WPSP);
-
- proc_subproc (PROC_CLEARWAIT, 1);
-
- /* Clean out proc processes from the pid list. */
- for (int i = 0; i < nprocs; i++)
- {
- /* If we've execed then the execed process will handle setting ppid
- to 1 iff it is a Cygwin process. */
- if (!have_execed || !have_execed_cygwin)
- procs[i]->ppid = 1;
- if (procs[i].wait_thread)
- procs[i].wait_thread->terminate_thread ();
- /* Release memory associated with this process unless it is 'myself'.
- 'myself' is only in the procs table when we've execed. We reach
- here when the next process has finished initializing but we still
- can't free the memory used by 'myself' since it is used later on
- during cygwin tear down. */
- if (procs[i] != myself)
- procs[i].release ();
- }
- nprocs = 0;
- sync_proc_subproc.release ();
- }
- sigproc_printf ("leaving");
-}
-
-/* Clear pending signal */
-void __reg1
-sig_clear (int sig)
-{
- sigq.clear (sig);
-}
-
-extern "C" int
-sigpending (sigset_t *mask)
-{
- sigset_t outset = (sigset_t) sig_send (myself, __SIGPENDING, &_my_tls);
- if (outset == SIG_BAD_MASK)
- return -1;
- *mask = outset;
- return 0;
-}
-
-/* Force the wait_sig thread to wake up and scan for pending signals */
-void __reg1
-sig_dispatch_pending (bool fast)
-{
- /* Non-atomically test for any signals pending and wake up wait_sig if any are
- found. It's ok if there's a race here since the next call to this function
- should catch it. */
- if (sigq.pending () && &_my_tls != _sig_tls)
- sig_send (myself, fast ? __SIGFLUSHFAST : __SIGFLUSH);
-}
-
-/* Signal thread initialization. Called from dll_crt0_1.
- This routine starts the signal handling thread. */
-void __stdcall
-sigproc_init ()
-{
- char char_sa_buf[1024];
- PSECURITY_ATTRIBUTES sa = sec_user_nih ((PSECURITY_ATTRIBUTES) char_sa_buf, cygheap->user.sid());
- DWORD err = fhandler_pipe::create (sa, &my_readsig, &my_sendsig,
- NSIG * sizeof (sigpacket), "sigwait",
- PIPE_ADD_PID);
- if (err)
- {
- SetLastError (err);
- api_fatal ("couldn't create signal pipe, %E");
- }
- ProtectHandle (my_readsig);
- myself->sendsig = my_sendsig;
- /* sync_proc_subproc is used by proc_subproc. It serializes
- access to the children and proc arrays. */
- sync_proc_subproc.init ("sync_proc_subproc");
- new cygthread (wait_sig, cygself, "sig");
-}
-
-/* Exit the current thread very carefully.
- See cgf-000017 in DevNotes for more details on why this is
- necessary. */
-void
-exit_thread (DWORD res)
-{
-# undef ExitThread
- if (no_thread_exit_protect ())
- ExitThread (res);
- sigfillset (&_my_tls.sigmask); /* No signals wanted */
-
- /* CV 2014-11-21: Disable the code sending a signal. The problem with
- this code is that it allows deadlocks under signal-rich multithreading
- conditions.
- The original problem reported in 2012 couldn't be reproduced anymore,
- even disabling this code. Tested on XP 32, Vista 32, W7 32, WOW64, 64,
- W8.1 WOW64, 64. */
-#if 0
- lock_process for_now; /* May block indefinitely when exiting. */
- HANDLE h;
- if (!DuplicateHandle (GetCurrentProcess (), GetCurrentThread (),
- GetCurrentProcess (), &h,
- 0, FALSE, DUPLICATE_SAME_ACCESS))
- {
-#ifdef DEBUGGING
- system_printf ("couldn't duplicate the current thread, %E");
-#endif
- for_now.release ();
- ExitThread (res);
- }
- ProtectHandle1 (h, exit_thread);
- /* Tell wait_sig to wait for this thread to exit. It can then release
- the lock below and close the above-opened handle. */
- siginfo_t si = {__SIGTHREADEXIT, SI_KERNEL};
- si.si_cyg = h;
- sig_send (myself_nowait, si, &_my_tls);
-#endif
- ExitThread (res);
-}
-
-int __reg3
-sig_send (_pinfo *p, int sig, _cygtls *tls)
-{
- siginfo_t si = {};
- si.si_signo = sig;
- si.si_code = SI_KERNEL;
- return sig_send (p, si, tls);
-}
-
-/* Send a signal to another process by raising its signal semaphore.
- If pinfo *p == NULL, send to the current process.
- If sending to this process, wait for notification that a signal has
- completed before returning. */
-int __reg3
-sig_send (_pinfo *p, siginfo_t& si, _cygtls *tls)
-{
- int rc = 1;
- bool its_me;
- HANDLE sendsig;
- sigpacket pack;
- bool communing = si.si_signo == __SIGCOMMUNE;
-
- pack.wakeup = NULL;
- bool wait_for_completion;
- if (!(its_me = p == NULL || p == myself || p == myself_nowait))
- {
- /* It is possible that the process is not yet ready to receive messages
- * or that it has exited. Detect this.
- */
- if (!proc_can_be_signalled (p)) /* Is the process accepting messages? */
- {
- sigproc_printf ("invalid pid %d(%x), signal %d",
- p->pid, p->process_state, si.si_signo);
- goto out;
- }
- wait_for_completion = false;
- }
- else
- {
- wait_for_completion = p != myself_nowait;
- p = myself;
- }
-
-
- if (its_me)
- sendsig = my_sendsig;
- else
- {
- HANDLE dupsig;
- DWORD dwProcessId;
- for (int i = 0; !p->sendsig && i < 10000; i++)
- yield ();
- if (p->sendsig)
- {
- dupsig = p->sendsig;
- dwProcessId = p->dwProcessId;
- }
- else
- {
- dupsig = p->exec_sendsig;
- dwProcessId = p->exec_dwProcessId;
- }
- if (!dupsig)
- {
- set_errno (EAGAIN);
- sigproc_printf ("sendsig handle never materialized");
- goto out;
- }
- HANDLE hp = OpenProcess (PROCESS_DUP_HANDLE, false, dwProcessId);
- if (!hp)
- {
- __seterrno ();
- sigproc_printf ("OpenProcess failed, %E");
- goto out;
- }
- VerifyHandle (hp);
- if (!DuplicateHandle (hp, dupsig, GetCurrentProcess (), &sendsig, 0,
- false, DUPLICATE_SAME_ACCESS) || !sendsig)
- {
- __seterrno ();
- sigproc_printf ("DuplicateHandle failed, %E");
- CloseHandle (hp);
- goto out;
- }
- VerifyHandle (sendsig);
- if (!communing)
- {
- CloseHandle (hp);
- DWORD flag = PIPE_NOWAIT;
- /* Set PIPE_NOWAIT here to avoid blocking when sending a signal.
- (Yes, I know MSDN says not to use this)
- We can't ever block here because it causes a deadlock when
- debugging with gdb. */
- BOOL res = SetNamedPipeHandleState (sendsig, &flag, NULL, NULL);
- sigproc_printf ("%d = SetNamedPipeHandleState (%y, PIPE_NOWAIT, NULL, NULL)", res, sendsig);
- }
- else
- {
- si._si_commune._si_process_handle = hp;
-
- HANDLE& tome = si._si_commune._si_write_handle;
- HANDLE& fromthem = si._si_commune._si_read_handle;
- if (!CreatePipeOverlapped (&fromthem, &tome, &sec_all_nih))
- {
- sigproc_printf ("CreatePipe for __SIGCOMMUNE failed, %E");
- __seterrno ();
- goto out;
- }
- if (!DuplicateHandle (GetCurrentProcess (), tome, hp, &tome, 0, false,
- DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE))
- {
- sigproc_printf ("DuplicateHandle for __SIGCOMMUNE failed, %E");
- __seterrno ();
- goto out;
- }
- }
- }
-
- sigproc_printf ("sendsig %p, pid %d, signal %d, its_me %d", sendsig, p->pid,
- si.si_signo, its_me);
-
- sigset_t pending;
- if (!its_me)
- pack.mask = NULL;
- else if (si.si_signo == __SIGPENDING)
- pack.mask = &pending;
- else if (si.si_signo == __SIGFLUSH || si.si_signo > 0)
- {
- threadlist_t *tl_entry = cygheap->find_tls (tls ? tls : _main_tls);
- pack.mask = tls ? &tls->sigmask : &_main_tls->sigmask;
- cygheap->unlock_tls (tl_entry);
- }
- else
- pack.mask = NULL;
-
- pack.si = si;
- if (!pack.si.si_pid)
- pack.si.si_pid = myself->pid;
- if (!pack.si.si_uid)
- pack.si.si_uid = myself->uid;
- pack.pid = myself->pid;
- pack.sigtls = tls;
- if (wait_for_completion)
- {
- pack.wakeup = CreateEvent (&sec_none_nih, FALSE, FALSE, NULL);
- sigproc_printf ("wakeup %p", pack.wakeup);
- ProtectHandle (pack.wakeup);
- }
-
- char *leader;
- size_t packsize;
- if (!communing || !(si._si_commune._si_code & PICOM_EXTRASTR))
- {
- leader = (char *) &pack;
- packsize = sizeof (pack);
- }
- else
- {
- size_t n = strlen (si._si_commune._si_str);
- packsize = sizeof (pack) + sizeof (n) + n;
- char *p = leader = (char *) alloca (packsize);
- memcpy (p, &pack, sizeof (pack)); p += sizeof (pack);
- memcpy (p, &n, sizeof (n)); p += sizeof (n);
- memcpy (p, si._si_commune._si_str, n); p += n;
- }
-
- DWORD nb;
- BOOL res;
- /* Try multiple times to send if packsize != nb since that probably
- means that the pipe buffer is full. */
- for (int i = 0; i < 100; i++)
- {
- res = WriteFile (sendsig, leader, packsize, &nb, NULL);
- if (!res || packsize == nb)
- break;
- Sleep (10);
- res = 0;
- }
-
- if (!res)
- {
- /* Couldn't send to the pipe. This probably means that the
- process is exiting. */
- if (!its_me)
- {
- sigproc_printf ("WriteFile for pipe %p failed, %E", sendsig);
- ForceCloseHandle (sendsig);
- }
- else if (!p->exec_sendsig && !exit_state)
- system_printf ("error sending signal %d, pid %u, pipe handle %p, nb %u, packsize %u, %E",
- si.si_signo, p->pid, sendsig, nb, packsize);
- if (GetLastError () == ERROR_BROKEN_PIPE)
- set_errno (ESRCH);
- else
- __seterrno ();
- goto out;
- }
-
-
- /* No need to wait for signal completion unless this was a signal to
- this process.
-
- If it was a signal to this process, wait for a dispatched signal.
- Otherwise just wait for the wait_sig to signal that it has finished
- processing the signal. */
- if (wait_for_completion)
- {
- sigproc_printf ("Waiting for pack.wakeup %p", pack.wakeup);
- rc = WaitForSingleObject (pack.wakeup, WSSC);
- ForceCloseHandle (pack.wakeup);
- }
- else
- {
- rc = WAIT_OBJECT_0;
- sigproc_printf ("Not waiting for sigcomplete. its_me %d signal %d",
- its_me, si.si_signo);
- if (!its_me)
- ForceCloseHandle (sendsig);
- }
-
- pack.wakeup = NULL;
- if (rc == WAIT_OBJECT_0)
- rc = 0; // Successful exit
- else
- {
- set_errno (ENOSYS);
- rc = -1;
- }
-
- if (wait_for_completion && si.si_signo != __SIGFLUSHFAST)
- _my_tls.call_signal_handler ();
-
-out:
- if (communing && rc)
- {
- if (si._si_commune._si_process_handle)
- CloseHandle (si._si_commune._si_process_handle);
- if (si._si_commune._si_read_handle)
- CloseHandle (si._si_commune._si_read_handle);
- }
- if (pack.wakeup)
- ForceCloseHandle (pack.wakeup);
- if (si.si_signo != __SIGPENDING)
- /* nothing */;
- else if (!rc)
- rc = (int) pending;
- else
- rc = SIG_BAD_MASK;
- sigproc_printf ("returning %p from sending signal %d", rc, si.si_signo);
- return rc;
-}
-
-int child_info::retry_count = 0;
-
-/* Initialize some of the memory block passed to child processes
- by fork/spawn/exec. */
-child_info::child_info (unsigned in_cb, child_info_types chtype,
- bool need_subproc_ready):
- cb (in_cb), intro (PROC_MAGIC_GENERIC), magic (CHILD_INFO_MAGIC),
- type (chtype), cygheap (::cygheap), cygheap_max (::cygheap_max),
- flag (0), retry (child_info::retry_count), rd_proc_pipe (NULL),
- wr_proc_pipe (NULL)
-{
- /* It appears that when running under WOW64 on Vista 64, the first DWORD
- value in the datastructure lpReserved2 is pointing to (msv_count in
- Cygwin), has to reflect the size of that datastructure as used in the
- Microsoft C runtime (a count value, counting the number of elements in
- two subsequent arrays, BYTE[count and HANDLE[count]), even though the C
- runtime isn't used. Otherwise, if msv_count is 0 or too small, the
- datastructure gets overwritten.
-
- This seems to be a bug in Vista's WOW64, which apparently copies the
- lpReserved2 datastructure not using the cbReserved2 size information,
- but using the information given in the first DWORD within lpReserved2
- instead. 32 bit Windows and former WOW64 don't care if msv_count is 0
- or a sensible non-0 count value. However, it's not clear if a non-0
- count doesn't result in trying to evaluate the content, so we do this
- really only for Vista 64 for now.
-
- Note: It turns out that a non-zero value *does* harm operation on
- XP 64 and 2K3 64 (Crash in CreateProcess call).
-
- The value is sizeof (child_info_*) / 5 which results in a count which
- covers the full datastructure, plus not more than 4 extra bytes. This
- is ok as long as the child_info structure is cosily stored within a bigger
- datastructure. */
- msv_count = wincap.needs_count_in_si_lpres2 () ? in_cb / 5 : 0;
-
- fhandler_union_cb = sizeof (fhandler_union);
- user_h = cygwin_user_h;
- if (strace.active ())
- flag |= _CI_STRACED;
- if (need_subproc_ready)
- {
- subproc_ready = CreateEvent (&sec_all, FALSE, FALSE, NULL);
- flag |= _CI_ISCYGWIN;
- }
- sigproc_printf ("subproc_ready %p", subproc_ready);
- /* Create an inheritable handle to pass to the child process. This will
- allow the child to duplicate handles from the parent to itself. */
- parent = NULL;
- if (!DuplicateHandle (GetCurrentProcess (), GetCurrentProcess (),
- GetCurrentProcess (), &parent, 0, true,
- DUPLICATE_SAME_ACCESS))
- system_printf ("couldn't create handle to myself for child, %E");
-}
-
-child_info::~child_info ()
-{
- cleanup ();
-}
-
-child_info_fork::child_info_fork () :
- child_info (sizeof *this, _CH_FORK, true),
- forker_finished (NULL)
-{
-}
-
-child_info_spawn::child_info_spawn (child_info_types chtype, bool need_subproc_ready) :
- child_info (sizeof *this, chtype, need_subproc_ready)
-{
- if (type == _CH_EXEC)
- {
- hExeced = NULL;
- if (my_wr_proc_pipe)
- ev = NULL;
- else if (!(ev = CreateEvent (&sec_none_nih, false, false, NULL)))
- api_fatal ("couldn't create signalling event for exec, %E");
-
- get_proc_lock (PROC_EXECING, 0);
- /* exit with lock held */
- }
-}
-
-cygheap_exec_info *
-cygheap_exec_info::alloc ()
-{
- cygheap_exec_info *res =
- (cygheap_exec_info *) ccalloc_abort (HEAP_1_EXEC, 1,
- sizeof (cygheap_exec_info)
- + (nprocs * sizeof (children[0])));
- res->sigmask = _my_tls.sigmask;
- return res;
-}
-
-void
-child_info_spawn::wait_for_myself ()
-{
- postfork (myself);
- myself.remember (false);
- WaitForSingleObject (ev, INFINITE);
-}
-
-void
-child_info::cleanup ()
-{
- if (subproc_ready)
- {
- CloseHandle (subproc_ready);
- subproc_ready = NULL;
- }
- if (parent)
- {
- CloseHandle (parent);
- parent = NULL;
- }
- if (rd_proc_pipe)
- {
- ForceCloseHandle (rd_proc_pipe);
- rd_proc_pipe = NULL;
- }
- if (wr_proc_pipe)
- {
- ForceCloseHandle (wr_proc_pipe);
- wr_proc_pipe = NULL;
- }
-}
-
-void
-child_info_spawn::cleanup ()
-{
- if (moreinfo)
- {
- if (moreinfo->envp)
- {
- for (char **e = moreinfo->envp; *e; e++)
- cfree (*e);
- cfree (moreinfo->envp);
- }
- if (type != _CH_SPAWN && moreinfo->myself_pinfo)
- CloseHandle (moreinfo->myself_pinfo);
- cfree (moreinfo);
- }
- moreinfo = NULL;
- if (ev)
- {
- CloseHandle (ev);
- ev = NULL;
- }
- if (type == _CH_EXEC)
- {
- if (iscygwin () && hExeced)
- proc_subproc (PROC_EXEC_CLEANUP, 0);
- sync_proc_subproc.release ();
- }
- type = _CH_NADA;
- child_info::cleanup ();
-}
-
-/* Record any non-reaped subprocesses to be passed to about-to-be-execed
- process. FIXME: There is a race here if the process exits while we
- are recording it. */
-inline void
-cygheap_exec_info::record_children ()
-{
- for (nchildren = 0; nchildren < nprocs; nchildren++)
- {
- children[nchildren].pid = procs[nchildren]->pid;
- children[nchildren].p = procs[nchildren];
- }
-}
-
-void
-child_info_spawn::record_children ()
-{
- if (type == _CH_EXEC && iscygwin ())
- moreinfo->record_children ();
-}
-
-/* Reattach non-reaped subprocesses passed in from the cygwin process
- which previously operated under this pid. FIXME: Is there a race here
- if the process exits during cygwin's exec handoff? */
-inline void
-cygheap_exec_info::reattach_children (HANDLE parent)
-{
- for (int i = 0; i < nchildren; i++)
- {
- pinfo p (parent, children[i].p, children[i].pid);
- if (!p)
- debug_only_printf ("couldn't reattach child %d from previous process", children[i].pid);
- else if (!p.reattach ())
- debug_only_printf ("attach of child process %d failed", children[i].pid);
- else
- debug_only_printf ("reattached pid %d<%u>, process handle %p, rd_proc_pipe %p->%p",
- p->pid, p->dwProcessId, p.hProcess,
- children[i].p.rd_proc_pipe, p.rd_proc_pipe);
- }
-}
-
-void
-child_info_spawn::reattach_children ()
-{
- moreinfo->reattach_children (parent);
-}
-
-void
-child_info::ready (bool execed)
-{
- if (!subproc_ready)
- {
- sigproc_printf ("subproc_ready not set");
- return;
- }
-
- if (dynamically_loaded)
- sigproc_printf ("not really ready");
- else if (!SetEvent (subproc_ready))
- api_fatal ("SetEvent failed, %E");
- else
- sigproc_printf ("signalled %p that I was ready", subproc_ready);
-
- if (execed)
- {
- CloseHandle (subproc_ready);
- subproc_ready = NULL;
- }
-}
-
-bool
-child_info::sync (pid_t pid, HANDLE& hProcess, DWORD howlong)
-{
- bool res;
- HANDLE w4[2];
- unsigned n = 0;
- unsigned nsubproc_ready;
-
- if (!subproc_ready)
- nsubproc_ready = WAIT_OBJECT_0 + 3;
- else
- {
- w4[n++] = subproc_ready;
- nsubproc_ready = 0;
- }
- w4[n++] = hProcess;
-
- sigproc_printf ("n %d, waiting for subproc_ready(%p) and child process(%p)", n, w4[0], w4[1]);
- DWORD x = WaitForMultipleObjects (n, w4, FALSE, howlong);
- x -= WAIT_OBJECT_0;
- if (x >= n)
- {
- system_printf ("wait failed, pid %u, %E", pid);
- res = false;
- }
- else
- {
- if (x != nsubproc_ready)
- {
- res = false;
- GetExitCodeProcess (hProcess, &exit_code);
- }
- else
- {
- res = true;
- exit_code = STILL_ACTIVE;
- if (type == _CH_EXEC && my_wr_proc_pipe)
- {
- ForceCloseHandle1 (hProcess, childhProc);
- hProcess = NULL;
- }
- }
- sigproc_printf ("pid %u, WFMO returned %d, exit_code %y, res %d", pid, x,
- exit_code, res);
- }
- return res;
-}
-
-DWORD
-child_info::proc_retry (HANDLE h)
-{
- if (!exit_code)
- return EXITCODE_OK;
- sigproc_printf ("exit_code %y", exit_code);
- switch (exit_code)
- {
- case STILL_ACTIVE: /* shouldn't happen */
- sigproc_printf ("STILL_ACTIVE? How'd we get here?");
- break;
- case STATUS_DLL_NOT_FOUND:
- case STATUS_ACCESS_VIOLATION:
- case STATUS_ILLEGAL_INSTRUCTION:
- case STATUS_ILLEGAL_DLL_PSEUDO_RELOCATION: /* pseudo-reloc.c specific */
- return exit_code;
- case STATUS_CONTROL_C_EXIT:
- if (saw_ctrl_c ())
- return EXITCODE_OK;
- /* fall through intentionally */
- case STATUS_DLL_INIT_FAILED:
- case STATUS_DLL_INIT_FAILED_LOGOFF:
- case EXITCODE_RETRY:
- if (retry-- > 0)
- exit_code = 0;
- break;
- case EXITCODE_FORK_FAILED: /* windows prevented us from forking */
- break;
-
- /* Count down non-recognized exit codes more quickly since they aren't
- due to known conditions. */
- default:
- if (!iscygwin () && (exit_code & 0xffff0000) != 0xc0000000)
- break;
- if ((retry -= 2) < 0)
- retry = 0;
- else
- exit_code = 0;
- }
- if (!exit_code)
- ForceCloseHandle1 (h, childhProc);
- return exit_code;
-}
-
-bool
-child_info_fork::abort (const char *fmt, ...)
-{
- if (fmt)
- {
- va_list ap;
- va_start (ap, fmt);
- strace_vprintf (SYSTEM, fmt, ap);
- TerminateProcess (GetCurrentProcess (), EXITCODE_FORK_FAILED);
- }
- if (retry > 0)
- TerminateProcess (GetCurrentProcess (), EXITCODE_RETRY);
- return false;
-}
-
-/* Check the state of all of our children to see if any are stopped or
- * terminated.
- */
-static int __reg1
-checkstate (waitq *parent_w)
-{
- int potential_match = 0;
-
- sigproc_printf ("nprocs %d", nprocs);
-
- /* Check already dead processes first to see if they match the criteria
- * given in w->next. */
- int res;
- for (int i = 0; i < nprocs; i++)
- if ((res = stopped_or_terminated (parent_w, procs[i])))
- {
- remove_proc (i);
- potential_match = 1;
- goto out;
- }
-
- sigproc_printf ("no matching terminated children found");
- potential_match = -!!nprocs;
-
-out:
- sigproc_printf ("returning %d", potential_match);
- return potential_match;
-}
-
-/* Remove a proc from procs by swapping it with the last child in the list.
- Also releases shared memory of exited processes. */
-static bool __stdcall
-remove_proc (int ci)
-{
- if (have_execed)
- {
- if (_my_tls._ctinfo != procs[ci].wait_thread)
- procs[ci].wait_thread->terminate_thread ();
- }
- else if (procs[ci]->exists ())
- return true;
-
- sigproc_printf ("removing procs[%d], pid %d, nprocs %d", ci, procs[ci]->pid,
- nprocs);
- if (procs[ci] != myself)
- procs[ci].release ();
- if (ci < --nprocs)
- {
- /* Wait for proc_waiter thread to make a copy of this element before
- moving it or it may become confused. The chances are very high that
- the proc_waiter thread has already done this by the time we
- get here. */
- if (!have_execed && !exit_state)
- while (!procs[nprocs].waiter_ready)
- yield ();
- procs[ci] = procs[nprocs];
- }
- return 0;
-}
-
-/* Check status of child process vs. waitq member.
-
- parent_w is the pointer to the parent of the waitq member in question.
- child is the subprocess being considered.
-
- Returns non-zero if waiting thread released. */
-static bool __stdcall
-stopped_or_terminated (waitq *parent_w, _pinfo *child)
-{
- int might_match;
- waitq *w = parent_w->next;
-
- sigproc_printf ("considering pid %d, pgid %d, w->pid %d", child->pid, child->pgid, w->pid);
- if (w->pid == -1)
- might_match = 1;
- else if (w->pid == 0)
- might_match = child->pgid == myself->pgid;
- else if (w->pid < 0)
- might_match = child->pgid == -w->pid;
- else
- might_match = (w->pid == child->pid);
-
- if (!might_match)
- return false;
-
- int terminated;
-
- if (!((terminated = (child->process_state == PID_EXITED))
- || ((w->options & WCONTINUED) && child->stopsig == SIGCONT)
- || ((w->options & WUNTRACED) && child->stopsig && child->stopsig != SIGCONT)))
- return false;
-
- parent_w->next = w->next; /* successful wait. remove from wait queue */
- w->pid = child->pid;
-
- if (!terminated)
- {
- sigproc_printf ("stopped child, stop signal %d", child->stopsig);
- if (child->stopsig == SIGCONT)
- w->status = __W_CONTINUED;
- else
- w->status = (child->stopsig << 8) | 0x7f;
- child->stopsig = 0;
- }
- else
- {
- child->process_state = PID_REAPED;
- w->status = (__uint16_t) child->exitcode;
-
- add_rusage (&myself->rusage_children, &child->rusage_children);
- add_rusage (&myself->rusage_children, &child->rusage_self);
-
- if (w->rusage)
- {
- add_rusage ((struct rusage *) w->rusage, &child->rusage_children);
- add_rusage ((struct rusage *) w->rusage, &child->rusage_self);
- }
- }
-
- if (!SetEvent (w->ev)) /* wake up wait4 () immediately */
- system_printf ("couldn't wake up wait event %p, %E", w->ev);
- return true;
-}
-
-static void
-talktome (siginfo_t *si)
-{
- unsigned size = sizeof (*si);
- sigproc_printf ("pid %d wants some information", si->si_pid);
- if (si->_si_commune._si_code & PICOM_EXTRASTR)
- {
- size_t n;
- DWORD nb;
- if (!ReadFile (my_readsig, &n, sizeof (n), &nb, NULL) || nb != sizeof (n))
- return;
- siginfo_t *newsi = (siginfo_t *) alloca (size += n + 1);
- *newsi = *si;
- newsi->_si_commune._si_str = (char *) (newsi + 1);
- if (!ReadFile (my_readsig, newsi->_si_commune._si_str, n, &nb, NULL) || nb != n)
- return;
- newsi->_si_commune._si_str[n] = '\0';
- si = newsi;
- }
-
- pinfo pi (si->si_pid);
- if (pi)
- new cygthread (commune_process, size, si, "commune");
-}
-
-/* Add a packet to the beginning of the queue.
- Should only be called from signal thread. */
-void
-pending_signals::add (sigpacket& pack)
-{
- sigpacket *se;
-
- se = sigs + pack.si.si_signo;
- if (se->si.si_signo)
- return;
- *se = pack;
- se->next = start.next;
- start.next = se;
-}
-
-/* Process signals by waiting for signal data to arrive in a pipe.
- Set a completion event if one was specified. */
-static void WINAPI
-wait_sig (VOID *)
-{
- _sig_tls = &_my_tls;
- bool sig_held = false;
-
- sigproc_printf ("entering ReadFile loop, my_readsig %p, my_sendsig %p",
- my_readsig, my_sendsig);
-
- hntdll = GetModuleHandle ("ntdll.dll");
-
- for (;;)
- {
- DWORD nb;
- sigpacket pack = {};
- if (sigq.retry)
- pack.si.si_signo = __SIGFLUSH;
- else if (!ReadFile (my_readsig, &pack, sizeof (pack), &nb, NULL))
- Sleep (INFINITE); /* Assume were exiting. Never exit this thread */
- else if (nb != sizeof (pack) || !pack.si.si_signo)
- {
- system_printf ("garbled signal pipe data nb %u, sig %d", nb, pack.si.si_signo);
- continue;
- }
-
- sigq.retry = false;
- /* Don't process signals when we start exiting */
- if (exit_state > ES_EXIT_STARTING && pack.si.si_signo > 0)
- continue;
-
- sigset_t dummy_mask;
- threadlist_t *tl_entry;
- if (!pack.mask)
- {
- tl_entry = cygheap->find_tls (_main_tls);
- dummy_mask = _main_tls->sigmask;
- cygheap->unlock_tls (tl_entry);
- pack.mask = &dummy_mask;
- }
-
- sigpacket *q = &sigq.start;
- bool clearwait = false;
- switch (pack.si.si_signo)
- {
- case __SIGCOMMUNE:
- talktome (&pack.si);
- break;
- case __SIGSTRACE:
- strace.activate (false);
- break;
- case __SIGPENDING:
- {
- unsigned bit;
-
- *pack.mask = 0;
- tl_entry = cygheap->find_tls (pack.sigtls);
- while ((q = q->next))
- if (pack.sigtls->sigmask & (bit = SIGTOMASK (q->si.si_signo)))
- *pack.mask |= bit;
- cygheap->unlock_tls (tl_entry);
- }
- break;
- case __SIGHOLD:
- sig_held = true;
- break;
- case __SIGSETPGRP:
- init_console_handler (true);
- break;
- case __SIGTHREADEXIT:
- {
- /* Serialize thread exit as the thread exit code can be interpreted
- as the process exit code in some cases when racing with
- ExitProcess/TerminateProcess.
- So, wait for the thread which sent this signal to exit, then
- release the process lock which it held and close it's handle.
- See cgf-000017 in DevNotes for more details.
- */
- HANDLE h = (HANDLE) pack.si.si_cyg;
- DWORD res = WaitForSingleObject (h, 5000);
- lock_process::force_release (pack.sigtls);
- ForceCloseHandle1 (h, exit_thread);
- if (res != WAIT_OBJECT_0)
- {
-#ifdef DEBUGGING
- try_to_debug();
-#endif
- system_printf ("WaitForSingleObject(%p) for thread exit returned %u", h, res);
- }
- }
- break;
- default: /* Normal (positive) signal */
- if (pack.si.si_signo < 0)
- sig_clear (-pack.si.si_signo);
- else
- sigq.add (pack);
- case __SIGNOHOLD:
- sig_held = false;
- case __SIGFLUSH:
- case __SIGFLUSHFAST:
- if (!sig_held)
- {
- sigpacket *qnext;
- /* Check the queue for signals. There will always be at least one
- thing on the queue if this was a valid signal. */
- while ((qnext = q->next))
- {
- if (qnext->si.si_signo && qnext->process () <= 0)
- q = qnext;
- else
- {
- q->next = qnext->next;
- qnext->si.si_signo = 0;
- }
- }
- if (pack.si.si_signo == SIGCHLD)
- clearwait = true;
- }
- break;
- }
- if (clearwait && !have_execed)
- proc_subproc (PROC_CLEARWAIT, 0);
- if (pack.wakeup)
- {
- sigproc_printf ("signalling pack.wakeup %p", pack.wakeup);
- SetEvent (pack.wakeup);
- }
- }
-}
diff --git a/winsup/cygwin/sigproc.h b/winsup/cygwin/sigproc.h
deleted file mode 100644
index c6ef13e24..000000000
--- a/winsup/cygwin/sigproc.h
+++ /dev/null
@@ -1,184 +0,0 @@
-/* sigproc.h
-
- Copyright 1997, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009, 2010,
- 2011, 2012, 2013 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#pragma once
-#include <signal.h>
-#include "sync.h"
-
-#ifdef NSIG
-enum
-{
- __SIGFLUSH = -(NSIG + 1),
- __SIGSTRACE = -(NSIG + 2),
- __SIGCOMMUNE = -(NSIG + 3),
- __SIGPENDING = -(NSIG + 4),
- __SIGDELETE = -(NSIG + 5), /* Not currently used */
- __SIGFLUSHFAST = -(NSIG + 6),
- __SIGHOLD = -(NSIG + 7),
- __SIGNOHOLD = -(NSIG + 8),
- __SIGSETPGRP = -(NSIG + 9),
- __SIGTHREADEXIT = -(NSIG + 10)
-};
-#endif
-
-#define SIG_BAD_MASK (1 << (SIGKILL - 1))
-
-enum procstuff
-{
- PROC_ADDCHILD = 1, // add a new subprocess to list
- PROC_REATTACH_CHILD = 2, // reattach after exec
- PROC_EXEC_CLEANUP = 3, // cleanup waiting children after exec
- PROC_DETACHED_CHILD = 4, // set up a detached child
- PROC_CLEARWAIT = 5, // clear all waits - signal arrived
- PROC_WAIT = 6, // setup for wait() for subproc
- PROC_EXECING = 7, // used to get a lock when execing
- PROC_NOTHING = 8 // nothing, really
-};
-
-struct sigpacket
-{
- siginfo_t si;
- pid_t pid;
- class _cygtls *sigtls;
- sigset_t *mask;
- union
- {
- HANDLE wakeup;
- HANDLE thread_handle;
- struct sigpacket *next;
- };
- int __reg1 process ();
- int __reg3 setup_handler (void *, struct sigaction&, _cygtls *);
-};
-
-void __reg1 sig_dispatch_pending (bool fast = false);
-void __reg2 set_signal_mask (sigset_t&, sigset_t);
-int __reg3 handle_sigprocmask (int sig, const sigset_t *set,
- sigset_t *oldset, sigset_t& opmask);
-
-void __reg1 sig_clear (int);
-void __reg1 sig_set_pending (int);
-int __stdcall handle_sigsuspend (sigset_t);
-
-int __reg2 proc_subproc (DWORD, uintptr_t);
-
-class _pinfo;
-void __stdcall proc_terminate ();
-void __stdcall sigproc_init ();
-bool __reg1 pid_exists (pid_t);
-int __reg3 sig_send (_pinfo *, siginfo_t&, class _cygtls * = NULL);
-int __reg3 sig_send (_pinfo *, int, class _cygtls * = NULL);
-void __stdcall signal_fixup_after_exec ();
-void __stdcall sigalloc ();
-
-int kill_pgrp (pid_t, siginfo_t&);
-void __reg1 exit_thread (DWORD) __attribute__ ((noreturn));
-void __reg1 setup_signal_exit (int);
-
-class no_thread_exit_protect
-{
- static bool flag;
- bool modify;
-public:
- no_thread_exit_protect (int) {flag = true; modify = true;}
- ~no_thread_exit_protect ()
- {
- if (modify)
- flag = false;
- }
- no_thread_exit_protect () {modify = false;}
- operator int () {return flag;}
-};
-
-
-extern "C" void sigdelayed ();
-
-extern char myself_nowait_dummy[];
-
-extern struct sigaction *global_sigs;
-
-class lock_signals
-{
- bool worked;
-public:
- lock_signals ()
- {
- worked = sig_send (NULL, __SIGHOLD) == 0;
- }
- operator int () const
- {
- return worked;
- }
- void dont_bother ()
- {
- worked = false;
- }
- ~lock_signals ()
- {
- if (worked)
- sig_send (NULL, __SIGNOHOLD);
- }
-};
-
-class lock_pthread
-{
- bool bother;
-public:
- lock_pthread (): bother (1)
- {
- pthread::atforkprepare ();
- }
- void dont_bother ()
- {
- bother = false;
- }
- ~lock_pthread ()
- {
- if (bother)
- pthread::atforkparent ();
- }
-};
-
-class hold_everything
-{
- bool& ischild;
- /* Note the order of the locks below. It is important,
- to avoid races, that the lock order be preserved.
-
- pthread is first because it serves as a master lock
- against other forks being attempted while this one is active.
-
- signals is next to stop signal processing for the duration
- of the fork.
-
- process is last. If it is put before signals, then a deadlock
- could be introduced if the process attempts to exit due to a signal. */
- lock_pthread pthread;
- lock_signals signals;
- lock_process process;
-
-public:
- hold_everything (bool& x): ischild (x) {}
- operator int () const {return signals;}
-
- ~hold_everything()
- {
- if (ischild)
- {
- pthread.dont_bother ();
- process.dont_bother ();
- signals.dont_bother ();
- }
- }
-
-};
-
-#define myself_nowait ((_pinfo *) myself_nowait_dummy)
diff --git a/winsup/cygwin/smallprint.cc b/winsup/cygwin/smallprint.cc
deleted file mode 100644
index a1e0f70f1..000000000
--- a/winsup/cygwin/smallprint.cc
+++ /dev/null
@@ -1,676 +0,0 @@
-/* smallprint.cc: small print routines for WIN32
-
- Copyright 1996, 1998, 2000, 2001, 2002, 2003, 2005, 2006,
- 2007, 2008, 2009, 2012, 2013, 2014
- Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include "ntdll.h"
-#include "sync.h"
-#include <stdlib.h>
-#include <ctype.h>
-#include <wchar.h>
-
-#define LLMASK (0xffffffffffffffffULL)
-#define LMASK (0xffffffff)
-
-#define rnarg(dst, base, dosign, len, pad) __rn ((dst), (base), (dosign), va_arg (ap, int32_t), len, pad, LMASK)
-#define rnargLL(dst, base, dosign, len, pad) __rn ((dst), (base), (dosign), va_arg (ap, uint64_t), len, pad, LLMASK)
-
-static const char hex_str[] = "0123456789ABCDEF";
-
-class tmpbuf
-{
- static WCHAR buf[NT_MAX_PATH];
- static muto lock;
- bool locked;
-public:
- operator WCHAR * ()
- {
- if (!locked)
- {
- lock.init ("smallprint_buf")->acquire ();
- locked = true;
- }
- return buf;
- }
- operator char * () {return (char *) ((WCHAR *) *this);}
-
- tmpbuf (): locked (false) {};
- ~tmpbuf ()
- {
- if (locked)
- lock.release ();
- }
-};
-
-WCHAR tmpbuf::buf[NT_MAX_PATH];
-muto tmpbuf::lock;
-
-static char __fastcall *
-__rn (char *dst, int base, int dosign, long long val, int len, int pad, unsigned long long mask)
-{
- /* longest number is ULLONG_MAX, 18446744073709551615, 20 digits */
- unsigned long long uval = 0;
- char res[20];
- int l = 0;
-
- if (dosign && val < 0)
- {
- *dst++ = '-';
- uval = -val;
- }
- else if (dosign > 0 && val > 0)
- {
- *dst++ = '+';
- uval = val;
- }
- else
- uval = val;
-
- uval &= mask;
-
- do
- {
- res[l++] = hex_str[uval % base];
- uval /= base;
- }
- while (uval);
-
- while (len-- > l)
- *dst++ = pad;
-
- while (l > 0)
- *dst++ = res[--l];
-
- return dst;
-}
-
-/*
- Meaning of format conversion specifiers. If 'l' isn't explicitely mentioned,
- it's ignored!
-
- c char
- C WCHAR/wchar_t
- d signed int, 4 byte
- ld signed long, 4 byte on 32 bit, 8 byte on 64 bit
- D signed long long, 8 byte
- E GetLastError
- o octal unsigned int, 4 byte
- lo octal unsigned long, 4 byte on 32 bit, 8 byte on 64 bit
- O octal unsigned long long, 8 byte
- p address
- P process name
- R return value, 4 byte.
- lR return value, 4 byte on 32 bit, 8 byte on 64 bit.
- s char *
- ls char * w/ non-ASCII tweaking
- S PUNICODE_STRING
- lS PUNICODE_STRING w/ non-ASCII tweaking
- u unsigned int, 4 byte
- lu unsigned long, 4 byte on 32 bit, 8 byte on 64 bit
- U unsigned long long, 8 byte
- W PWCHAR/wchar_t *
- lW PWCHAR/wchar_t * w/ non-ASCII tweaking
- x hex unsigned int, 4 byte
- lx hex unsigned long, 4 byte on 32 bit, 8 byte on 64 bit
- X hex unsigned long long, 8 byte
- y 0x hex unsigned int, 4 byte
- ly 0x hex unsigned long, 4 byte on 32 bit, 8 byte on 64 bit
- Y 0x hex unsigned long long, 8 byte
-*/
-
-int
-__small_vsprintf (char *dst, const char *fmt, va_list ap)
-{
- tmpbuf tmp;
- char *orig = dst;
- const char *s;
- PWCHAR w;
- UNICODE_STRING uw, *us;
- int base = 0;
-
- DWORD err = GetLastError ();
-
- intptr_t Rval = 0;
- while (*fmt)
- {
- int i, n = 0x7fff;
- bool l_opt = false;
- if (*fmt != '%')
- *dst++ = *fmt++;
- else
- {
- int len = 0;
- char pad = ' ';
- int addsign = -1;
-
- switch (*++fmt)
- {
- case '+':
- addsign = 1;
- fmt++;
- break;
- case '%':
- *dst++ = *fmt++;
- continue;
- }
-
- for (;;)
- {
- char c = *fmt++;
- switch (c)
- {
- case '0':
- if (len == 0)
- {
- pad = '0';
- continue;
- }
- case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- len = len * 10 + (c - '0');
- continue;
- case 'l':
- l_opt = true;
- continue;
- case 'c':
- {
- unsigned char c = (va_arg (ap, int) & 0xff);
- if (isprint (c) || pad != '0')
- *dst++ = c;
- else
- {
- *dst++ = '0';
- *dst++ = 'x';
- dst = __rn (dst, 16, 0, c, len, pad, LMASK);
- }
- }
- break;
- case 'C':
- {
- WCHAR wc = (WCHAR) va_arg (ap, int);
- char buf[4], *c;
- sys_wcstombs (buf, 4, &wc, 1);
- for (c = buf; *c; ++c)
- *dst++ = *c;
- }
- break;
- case 'E':
- strcpy (dst, "Win32 error ");
- dst = __rn (dst + sizeof ("Win32 error"), 10, 0, err, len, pad, LMASK);
- break;
- case 'R':
- {
-#ifdef __x86_64__
- if (l_opt)
- Rval = va_arg (ap, int64_t);
- else
-#endif
- Rval = va_arg (ap, int32_t);
- dst = __rn (dst, 10, addsign, Rval, len, pad, LMASK);
- }
- break;
- case 'd':
- base = 10;
-#ifdef __x86_64__
- if (l_opt)
- goto gen_decimalLL;
-#endif
- goto gen_decimal;
- case 'u':
- base = 10;
- addsign = 0;
-#ifdef __x86_64__
- if (l_opt)
- goto gen_decimalLL;
-#endif
- goto gen_decimal;
- case 'o':
- base = 8;
- addsign = 0;
-#ifdef __x86_64__
- if (l_opt)
- goto gen_decimalLL;
-#endif
- goto gen_decimal;
- case 'y':
- *dst++ = '0';
- *dst++ = 'x';
- /*FALLTHRU*/
- case 'x':
- base = 16;
- addsign = 0;
-#ifdef __x86_64__
- if (l_opt)
- goto gen_decimalLL;
-#endif
-gen_decimal:
- dst = rnarg (dst, base, addsign, len, pad);
- break;
- case 'D':
- base = 10;
- goto gen_decimalLL;
- case 'U':
- base = 10;
- addsign = 0;
- goto gen_decimalLL;
- case 'O':
- base = 8;
- addsign = 0;
- goto gen_decimalLL;
- case 'Y':
- *dst++ = '0';
- *dst++ = 'x';
- /*FALLTHRU*/
- case 'X':
- base = 16;
- addsign = 0;
-gen_decimalLL:
- dst = rnargLL (dst, base, addsign, len, pad);
- break;
- case 'p':
- *dst++ = '0';
- *dst++ = 'x';
-#ifdef __x86_64__
- dst = rnargLL (dst, 16, 0, len, pad);
-#else
- dst = rnarg (dst, 16, 0, len, pad);
-#endif
- break;
- case 'P':
- if (!GetModuleFileName (NULL, tmp, NT_MAX_PATH))
- s = "cygwin program";
- else
- s = tmp;
- goto fillin;
- case '.':
- n = strtol (fmt, (char **) &fmt, 10);
- if (*fmt++ != 's')
- goto endfor;
- case 's':
- s = va_arg (ap, char *);
- if (s == NULL)
- s = "(null)";
- fillin:
- for (i = 0; *s && i < n; i++)
- if (l_opt && ((*(unsigned char *)s <= 0x1f && *s != '\n')
- || *(unsigned char *)s >= 0x7f))
- {
- *dst++ = '\\';
- *dst++ = 'x';
- *dst++ = hex_str[*(unsigned char *)s >> 4];
- *dst++ = hex_str[*(unsigned char *)s++ & 0xf];
- }
- else
- *dst++ = *s++;
- break;
- case 'W':
- w = va_arg (ap, PWCHAR);
- RtlInitUnicodeString (us = &uw, w ?: L"(null)");
- goto wfillin;
- case 'S':
- us = va_arg (ap, PUNICODE_STRING);
- if (!us)
- RtlInitUnicodeString (us = &uw, L"(null)");
- wfillin:
- if (l_opt)
- {
- for (USHORT i = 0; i < us->Length / sizeof (WCHAR); ++i)
- {
- WCHAR w = us->Buffer[i];
- if ((w <= 0x1f && w != '\n') || w >= 0x7f)
- {
- *dst++ = '\\';
- *dst++ = 'x';
- *dst++ = hex_str[(w >> 12) & 0xf];
- *dst++ = hex_str[(w >> 8) & 0xf];
- *dst++ = hex_str[(w >> 4) & 0xf];
- *dst++ = hex_str[w & 0xf];
- }
- else
- *dst++ = w;
- }
- }
- else if (sys_wcstombs (tmp, NT_MAX_PATH, us->Buffer,
- us->Length / sizeof (WCHAR)))
- {
- s = tmp;
- goto fillin;
- }
- break;
- default:
- *dst++ = '?';
- *dst++ = fmt[-1];
- }
- endfor:
- break;
- }
- }
- }
- if (Rval < 0)
- {
- dst = stpcpy (dst, ", errno ");
- dst = __rn (dst, 10, false, get_errno (), 0, 0, LMASK);
- }
- *dst = 0;
- SetLastError (err);
- return dst - orig;
-}
-
-int
-__small_sprintf (char *dst, const char *fmt, ...)
-{
- int r;
- va_list ap;
- va_start (ap, fmt);
- r = __small_vsprintf (dst, fmt, ap);
- va_end (ap);
- return r;
-}
-
-void
-small_printf (const char *fmt, ...)
-{
- char buf[16384];
- va_list ap;
- DWORD done;
- int count;
-
-#if 0 /* Turn on to force console errors */
- extern SECURITY_ATTRIBUTES sec_none;
- HANDLE h = CreateFileA ("CONOUT$", GENERIC_READ|GENERIC_WRITE,
- FILE_SHARE_WRITE | FILE_SHARE_WRITE, &sec_none,
- OPEN_EXISTING, 0, 0);
- if (h)
- SetStdHandle (STD_ERROR_HANDLE, h);
-#endif
-
- va_start (ap, fmt);
- count = __small_vsprintf (buf, fmt, ap);
- va_end (ap);
-
- WriteFile (GetStdHandle (STD_ERROR_HANDLE), buf, count, &done, NULL);
- FlushFileBuffers (GetStdHandle (STD_ERROR_HANDLE));
-}
-
-#ifdef DEBUGGING
-static HANDLE NO_COPY console_handle = NULL;
-void
-console_printf (const char *fmt, ...)
-{
- char buf[16384];
- va_list ap;
- DWORD done;
- int count;
-
- if (!console_handle)
- console_handle = CreateFileA ("CON", GENERIC_WRITE,
- FILE_SHARE_READ | FILE_SHARE_WRITE,
- NULL, OPEN_EXISTING, 0, 0);
-
- if (console_handle == INVALID_HANDLE_VALUE)
- console_handle = GetStdHandle (STD_ERROR_HANDLE);
-
- va_start (ap, fmt);
- count = __small_vsprintf (buf, fmt, ap);
- va_end (ap);
-
- WriteFile (console_handle, buf, count, &done, NULL);
- FlushFileBuffers (console_handle);
-}
-#endif
-
-#define wrnarg(dst, base, dosign, len, pad) __wrn ((dst), (base), (dosign), va_arg (ap, long), len, pad, LMASK)
-#define wrnargLL(dst, base, dosign, len, pad) __wrn ((dst), (base), (dosign), va_arg (ap, unsigned long long), len, pad, LLMASK)
-
-static PWCHAR __fastcall
-__wrn (PWCHAR dst, int base, int dosign, long long val, int len, int pad, unsigned long long mask)
-{
- /* longest number is ULLONG_MAX, 18446744073709551615, 20 digits */
- unsigned long long uval = 0;
- WCHAR res[20];
- int l = 0;
-
- if (dosign && val < 0)
- {
- *dst++ = L'-';
- uval = -val;
- }
- else if (dosign > 0 && val > 0)
- {
- *dst++ = L'+';
- uval = val;
- }
- else
- uval = val;
-
- uval &= mask;
-
- do
- {
- res[l++] = hex_str[uval % base];
- uval /= base;
- }
- while (uval);
-
- while (len-- > l)
- *dst++ = pad;
-
- while (l > 0)
- *dst++ = res[--l];
-
- return dst;
-}
-
-int
-__small_vswprintf (PWCHAR dst, const WCHAR *fmt, va_list ap)
-{
- tmpbuf tmp;
- PWCHAR orig = dst;
- const char *s;
- PWCHAR w;
- UNICODE_STRING uw, *us;
- int base = 0;
-
- DWORD err = GetLastError ();
-
- intptr_t Rval = 0;
- while (*fmt)
- {
- unsigned int n = 0x7fff;
-#ifdef __x86_64__
- bool l_opt = false;
-#endif
- if (*fmt != L'%')
- *dst++ = *fmt++;
- else
- {
- int len = 0;
- WCHAR pad = L' ';
- int addsign = -1;
-
- switch (*++fmt)
- {
- case L'+':
- addsign = 1;
- fmt++;
- break;
- case L'%':
- *dst++ = *fmt++;
- continue;
- }
-
- for (;;)
- {
- char c = *fmt++;
- switch (c)
- {
- case L'0':
- if (len == 0)
- {
- pad = L'0';
- continue;
- }
- case L'1' ... L'9':
- len = len * 10 + (c - L'0');
- continue;
- case L'l':
-#ifdef __x86_64__
- l_opt = true;
-#endif
- continue;
- case L'c':
- case L'C':
- *dst++ = va_arg (ap, unsigned);
- break;
- case L'E':
- wcscpy (dst, L"Win32 error ");
- dst = __wrn (dst + sizeof ("Win32 error"), 10, 0, err, len, pad, LMASK);
- break;
- case 'R':
- {
-#ifdef __x86_64__
- if (l_opt)
- Rval = va_arg (ap, int64_t);
- else
-#endif
- Rval = va_arg (ap, int32_t);
- dst = __wrn (dst, 10, addsign, Rval, len, pad, LMASK);
- }
- break;
- case L'd':
- base = 10;
-#ifdef __x86_64__
- if (l_opt)
- goto gen_decimalLL;
-#endif
- goto gen_decimal;
- case 'u':
- base = 10;
- addsign = 0;
-#ifdef __x86_64__
- if (l_opt)
- goto gen_decimalLL;
-#endif
- goto gen_decimal;
- case 'o':
- base = 8;
- addsign = 0;
-#ifdef __x86_64__
- if (l_opt)
- goto gen_decimalLL;
-#endif
- goto gen_decimal;
- case 'y':
- *dst++ = '0';
- *dst++ = 'x';
- /*FALLTHRU*/
- case 'x':
- base = 16;
- addsign = 0;
-#ifdef __x86_64__
- if (l_opt)
- goto gen_decimalLL;
-#endif
-gen_decimal:
- dst = wrnarg (dst, base, addsign, len, pad);
- break;
- case 'D':
- base = 10;
- goto gen_decimalLL;
- case 'U':
- base = 10;
- addsign = 0;
- goto gen_decimalLL;
- case 'O':
- base = 8;
- addsign = 0;
- goto gen_decimalLL;
- case 'Y':
- *dst++ = '0';
- *dst++ = 'x';
- /*FALLTHRU*/
- case 'X':
- base = 16;
- addsign = 0;
-gen_decimalLL:
- dst = wrnargLL (dst, base, addsign, len, pad);
- break;
- case L'p':
- *dst++ = L'0';
- *dst++ = L'x';
-#ifdef __x86_64__
- dst = wrnargLL (dst, 16, 0, len, pad);
-#else
- dst = wrnarg (dst, 16, 0, len, pad);
-#endif
- break;
- case L'P':
- if (!GetModuleFileNameW (NULL, tmp, NT_MAX_PATH))
- RtlInitUnicodeString (us = &uw, L"cygwin program");
- else
- RtlInitUnicodeString (us = &uw, tmp);
- goto fillin;
- case L'.':
- n = wcstoul (fmt, (wchar_t **) &fmt, 10);
- if (*fmt++ != L's')
- goto endfor;
- case L's':
- s = va_arg (ap, char *);
- if (s == NULL)
- s = "(null)";
- sys_mbstowcs (tmp, NT_MAX_PATH, s, n < 0x7fff ? (int) n : -1);
- RtlInitUnicodeString (us = &uw, tmp);
- goto fillin;
- break;
- case L'W':
- w = va_arg (ap, PWCHAR);
- RtlInitUnicodeString (us = &uw, w ?: L"(null)");
- goto fillin;
- case L'S':
- us = va_arg (ap, PUNICODE_STRING);
- if (!us)
- RtlInitUnicodeString (us = &uw, L"(null)");
- fillin:
- if (us->Length / sizeof (WCHAR) < n)
- n = us->Length / sizeof (WCHAR);
- w = us->Buffer;
- for (unsigned int i = 0; i < n; i++)
- *dst++ = *w++;
- break;
- default:
- *dst++ = L'?';
- *dst++ = fmt[-1];
- }
- endfor:
- break;
- }
- }
- }
- if (Rval < 0)
- {
- dst = wcpcpy (dst, L", errno ");
- dst = __wrn (dst, 10, false, get_errno (), 0, 0, LMASK);
- }
- *dst = L'\0';
- SetLastError (err);
- return dst - orig;
-}
-
-int
-__small_swprintf (PWCHAR dst, const WCHAR *fmt, ...)
-{
- int r;
- va_list ap;
- va_start (ap, fmt);
- r = __small_vswprintf (dst, fmt, ap);
- va_end (ap);
- return r;
-}
diff --git a/winsup/cygwin/sortdin b/winsup/cygwin/sortdin
deleted file mode 100755
index dafb329ff..000000000
--- a/winsup/cygwin/sortdin
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/usr/bin/perl
-
-my %data = ();
-my %code = ();
-
-my @out = ();
-
-my $fn = $ARGV[0];
-
-while (<>) {
- push(@out, $_);
- /^\s*exports/i and last;
-}
-
-while (<>) {
- my $key;
- $arr = /\sDATA\s*$/o ? \%data : \%code;
- $_ =~ s/^\s+//;
- my $key = (split(' ', $_))[0];
- substr($key, 0, 1) = '' while $key =~ /^_/o;
- chomp $key;
- $arr->{$key}->{$_} = 1;
-}
-
-for my $k (sort keys %data) {
- push(@out, sort {$b cmp $a} keys %{$data{$k}});
-}
-
-for my $k (sort keys %code) {
- push(@out, sort {$b cmp $a} keys %{$code{$k}});
-}
-
-open(R, '>', $fn);
-print R @out;
-close R;
diff --git a/winsup/cygwin/spawn.cc b/winsup/cygwin/spawn.cc
deleted file mode 100644
index a0686c5d8..000000000
--- a/winsup/cygwin/spawn.cc
+++ /dev/null
@@ -1,1253 +0,0 @@
-/* spawn.cc
-
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include <stdlib.h>
-#include <unistd.h>
-#include <process.h>
-#include <sys/wait.h>
-#include <wchar.h>
-#include <ctype.h>
-#include <sys/cygwin.h>
-#include "cygerrno.h"
-#include "security.h"
-#include "sigproc.h"
-#include "pinfo.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "child_info.h"
-#include "environ.h"
-#include "cygtls.h"
-#include "tls_pbuf.h"
-#include "winf.h"
-#include "ntdll.h"
-
-static const suffix_info exe_suffixes[] =
-{
- suffix_info ("", 1),
- suffix_info (".exe", 1),
- suffix_info (".com"),
- suffix_info (NULL)
-};
-
-/* Add .exe to PROG if not already present and see if that exists.
- If not, return PROG (converted from posix to win32 rules if necessary).
- The result is always BUF.
-
- Returns (possibly NULL) suffix */
-
-static const char *
-perhaps_suffix (const char *prog, path_conv& buf, int& err, unsigned opt)
-{
- const char *ext;
-
- err = 0;
- debug_printf ("prog '%s'", prog);
- buf.check (prog, PC_SYM_FOLLOW | PC_NULLEMPTY,
- (opt & FE_DLL) ? stat_suffixes : exe_suffixes);
-
- if (buf.isdir ())
- {
- err = EACCES;
- ext = NULL;
- }
- else if (!buf.exists ())
- {
- err = ENOENT;
- ext = NULL;
- }
- else if (buf.known_suffix)
- ext = buf.get_win32 () + (buf.known_suffix - buf.get_win32 ());
- else
- ext = strchr (buf.get_win32 (), '\0');
-
- debug_printf ("buf %s, suffix found '%s'", (char *) buf.get_win32 (), ext);
- return ext;
-}
-
-/* Find an executable name, possibly by appending known executable
- suffixes to it. The win32-translated name is placed in 'buf'.
- Any found suffix is returned in known_suffix.
-
- If the file is not found and !null_if_not_found then the win32 version
- of name is placed in buf and returned. Otherwise the contents of buf
- is undefined and NULL is returned. */
-
-const char * __reg3
-find_exec (const char *name, path_conv& buf, const char *mywinenv,
- unsigned opt, const char **known_suffix)
-{
- const char *suffix = "";
- debug_printf ("find_exec (%s)", name);
- const char *retval;
- tmp_pathbuf tp;
- char *tmp = tp.c_get ();
- const char *posix = (opt & FE_NATIVE) ? NULL : name;
- bool has_slash = !!strpbrk (name, "/\\");
- int err = 0;
-
- /* Check to see if file can be opened as is first.
- Win32 systems always check . first, but PATH may not be set up to
- do this. */
- if ((has_slash || opt & FE_CWD)
- && (suffix = perhaps_suffix (name, buf, err, opt)) != NULL)
- {
- if (posix && !has_slash)
- {
- tmp[0] = '.';
- tmp[1] = '/';
- strcpy (tmp + 2, name);
- posix = tmp;
- }
- retval = buf.get_win32 ();
- goto out;
- }
-
- win_env *winpath;
- const char *path;
- const char *posix_path;
-
- posix = (opt & FE_NATIVE) ? NULL : tmp;
-
- if (strchr (mywinenv, '/'))
- {
- /* it's not really an environment variable at all */
- int n = cygwin_conv_path_list (CCP_POSIX_TO_WIN_A, mywinenv, NULL, 0);
- char *s = (char *) alloca (n);
- if (cygwin_conv_path_list (CCP_POSIX_TO_WIN_A, mywinenv, s, n))
- goto errout;
- path = s;
- posix_path = mywinenv - 1;
- }
- else if (has_slash || strchr (name, '\\') || isdrive (name)
- || !(winpath = getwinenv (mywinenv))
- || !(path = winpath->get_native ()) || *path == '\0')
- /* Return the error condition if this is an absolute path or if there
- is no PATH to search. */
- goto errout;
- else
- posix_path = winpath->get_posix () - 1;
-
- debug_printf ("%s%s", mywinenv, path);
- /* Iterate over the specified path, looking for the file with and without
- executable extensions. */
- do
- {
- posix_path++;
- char *eotmp = strccpy (tmp, &path, ';');
- /* An empty path or '.' means the current directory, but we've
- already tried that. */
- if (opt & FE_CWD && (tmp[0] == '\0' || (tmp[0] == '.' && tmp[1] == '\0')))
- continue;
-
- *eotmp++ = '\\';
- strcpy (eotmp, name);
-
- debug_printf ("trying %s", tmp);
-
- int err1;
-
- if ((suffix = perhaps_suffix (tmp, buf, err1, opt)) != NULL)
- {
- if (buf.has_acls () && check_file_access (buf, X_OK, true))
- continue;
-
- if (posix == tmp)
- {
- eotmp = strccpy (tmp, &posix_path, ':');
- if (eotmp == tmp)
- *eotmp++ = '.';
- *eotmp++ = '/';
- strcpy (eotmp, name);
- }
- retval = buf.get_win32 ();
- goto out;
- }
- }
- while (*path && *++path && (posix_path = strchr (posix_path, ':')));
-
- errout:
- posix = NULL;
- /* Couldn't find anything in the given path.
- Take the appropriate action based on null_if_not_found. */
- if (opt & FE_NNF)
- retval = NULL;
- else if (!(opt & FE_NATIVE))
- retval = name;
- else
- {
- buf.check (name);
- retval = buf.get_win32 ();
- }
-
- out:
- if (posix)
- retval = buf.set_path (posix);
- debug_printf ("%s = find_exec (%s)", (char *) buf.get_win32 (), name);
- if (known_suffix)
- *known_suffix = suffix ?: strchr (buf.get_win32 (), '\0');
- if (!retval && err)
- set_errno (err);
- return retval;
-}
-
-/* Utility for child_info_spawn::worker. */
-
-static HANDLE
-handle (int fd, bool writing)
-{
- HANDLE h;
- cygheap_fdget cfd (fd);
-
- if (cfd < 0)
- h = INVALID_HANDLE_VALUE;
- else if (cfd->close_on_exec ())
- h = INVALID_HANDLE_VALUE;
- else if (!writing)
- h = cfd->get_handle ();
- else
- h = cfd->get_output_handle ();
-
- return h;
-}
-
-int
-iscmd (const char *argv0, const char *what)
-{
- int n;
- n = strlen (argv0) - strlen (what);
- if (n >= 2 && argv0[1] != ':')
- return 0;
- return n >= 0 && strcasematch (argv0 + n, what) &&
- (n == 0 || isdirsep (argv0[n - 1]));
-}
-
-#define ILLEGAL_SIG_FUNC_PTR ((_sig_func_ptr) (-2))
-struct system_call_handle
-{
- _sig_func_ptr oldint;
- _sig_func_ptr oldquit;
- sigset_t oldmask;
- bool is_system_call ()
- {
- return oldint != ILLEGAL_SIG_FUNC_PTR;
- }
- system_call_handle (bool issystem)
- {
- if (!issystem)
- oldint = ILLEGAL_SIG_FUNC_PTR;
- else
- {
- sig_send (NULL, __SIGHOLD);
- oldint = NULL;
- }
- }
- void arm()
- {
- if (is_system_call ())
- {
- sigset_t child_block;
- oldint = signal (SIGINT, SIG_IGN);
- oldquit = signal (SIGQUIT, SIG_IGN);
- sigemptyset (&child_block);
- sigaddset (&child_block, SIGCHLD);
- sigprocmask (SIG_BLOCK, &child_block, &oldmask);
- sig_send (NULL, __SIGNOHOLD);
- }
- }
- ~system_call_handle ()
- {
- if (is_system_call ())
- {
- signal (SIGINT, oldint);
- signal (SIGQUIT, oldquit);
- sigprocmask (SIG_SETMASK, &oldmask, NULL);
- }
- }
-# undef cleanup
-};
-
-child_info_spawn NO_COPY ch_spawn;
-
-int
-child_info_spawn::worker (const char *prog_arg, const char *const *argv,
- const char *const envp[], int mode,
- int in__stdin, int in__stdout)
-{
- bool rc;
- pid_t cygpid;
- int res = -1;
-
- /* Check if we have been called from exec{lv}p or spawn{lv}p and mask
- mode to keep only the spawn mode. */
- bool p_type_exec = !!(mode & _P_PATH_TYPE_EXEC);
- mode = _P_MODE (mode);
-
- if (prog_arg == NULL)
- {
- syscall_printf ("prog_arg is NULL");
- set_errno (EFAULT); /* As on Linux. */
- return -1;
- }
- if (!prog_arg[0])
- {
- syscall_printf ("prog_arg is empty");
- set_errno (ENOENT); /* Per POSIX */
- return -1;
- }
-
- syscall_printf ("mode = %d, prog_arg = %.9500s", mode, prog_arg);
-
- /* FIXME: This is no error condition on Linux. */
- if (argv == NULL)
- {
- syscall_printf ("argv is NULL");
- set_errno (EINVAL);
- return -1;
- }
-
- av newargv;
- linebuf cmd;
- PWCHAR envblock = NULL;
- path_conv real_path;
- bool reset_sendsig = false;
-
- tmp_pathbuf tp;
- PWCHAR runpath = tp.w_get ();
- int c_flags;
-
- bool null_app_name = false;
- STARTUPINFOW si = {};
- int looped = 0;
-
- system_call_handle system_call (mode == _P_SYSTEM);
-
- __try
- {
- child_info_types chtype;
- if (mode == _P_OVERLAY)
- chtype = _CH_EXEC;
- else
- chtype = _CH_SPAWN;
-
- moreinfo = cygheap_exec_info::alloc ();
-
- /* CreateProcess takes one long string that is the command line (sigh).
- We need to quote any argument that has whitespace or embedded "'s. */
-
- int ac;
- for (ac = 0; argv[ac]; ac++)
- /* nothing */;
-
- int err;
- const char *ext;
- if ((ext = perhaps_suffix (prog_arg, real_path, err, FE_NADA)) == NULL)
- {
- set_errno (err);
- res = -1;
- __leave;
- }
-
- res = newargv.setup (prog_arg, real_path, ext, ac, argv, p_type_exec);
-
- if (res)
- __leave;
-
- if (!real_path.iscygexec () && ::cygheap->cwd.get_error ())
- {
- small_printf ("Error: Current working directory %s.\n"
- "Can't start native Windows application from here.\n\n",
- ::cygheap->cwd.get_error_desc ());
- set_errno (::cygheap->cwd.get_error ());
- res = -1;
- __leave;
- }
-
- if (ac == 3 && argv[1][0] == '/' && tolower (argv[1][1]) == 'c' &&
- (iscmd (argv[0], "command.com") || iscmd (argv[0], "cmd.exe")))
- {
- real_path.check (prog_arg);
- cmd.add ("\"");
- if (!real_path.error)
- cmd.add (real_path.get_win32 ());
- else
- cmd.add (argv[0]);
- cmd.add ("\"");
- cmd.add (" ");
- cmd.add (argv[1]);
- cmd.add (" ");
- cmd.add (argv[2]);
- real_path.set_path (argv[0]);
- null_app_name = true;
- }
- else
- {
- if (real_path.iscygexec ())
- {
- moreinfo->argc = newargv.argc;
- moreinfo->argv = newargv;
- }
- if ((wincmdln || !real_path.iscygexec ())
- && !cmd.fromargv (newargv, real_path.get_win32 (),
- real_path.iscygexec ()))
- {
- res = -1;
- __leave;
- }
-
-
- if (mode != _P_OVERLAY || !real_path.iscygexec ()
- || !DuplicateHandle (GetCurrentProcess (), myself.shared_handle (),
- GetCurrentProcess (), &moreinfo->myself_pinfo,
- 0, TRUE, DUPLICATE_SAME_ACCESS))
- moreinfo->myself_pinfo = NULL;
- else
- VerifyHandle (moreinfo->myself_pinfo);
- }
-
- PROCESS_INFORMATION pi;
- pi.hProcess = pi.hThread = NULL;
- pi.dwProcessId = pi.dwThreadId = 0;
-
- /* Set up needed handles for stdio */
- si.dwFlags = STARTF_USESTDHANDLES;
- si.hStdInput = handle ((in__stdin < 0 ? 0 : in__stdin), false);
- si.hStdOutput = handle ((in__stdout < 0 ? 1 : in__stdout), true);
- si.hStdError = handle (2, true);
-
- si.cb = sizeof (si);
-
- c_flags = GetPriorityClass (GetCurrentProcess ());
- sigproc_printf ("priority class %d", c_flags);
-
- c_flags |= CREATE_SEPARATE_WOW_VDM | CREATE_UNICODE_ENVIRONMENT;
-
- if (wincap.has_program_compatibility_assistant ())
- {
- /* We're adding the CREATE_BREAKAWAY_FROM_JOB flag here to workaround
- issues with the "Program Compatibility Assistant (PCA) Service"
- starting with Windows Vista. For some reason, when starting long
- running sessions from mintty(*), the affected svchost.exe process
- takes more and more memory and at one point takes over the CPU. At
- this point the machine becomes unresponsive. The only way to get
- back to normal is to stop the entire mintty session, or to stop the
- PCA service. However, a process which is controlled by PCA is part
- of a compatibility job, which allows child processes to break away
- from the job. This helps to avoid this issue.
-
- First we call IsProcessInJob. It fetches the information whether or
- not we're part of a job 20 times faster than QueryInformationJobObject.
-
- (*) Note that this is not mintty's fault. It has just been observed
- with mintty in the first place. See the archives for more info:
- http://cygwin.com/ml/cygwin-developers/2012-02/msg00018.html */
-
- JOBOBJECT_BASIC_LIMIT_INFORMATION jobinfo;
- BOOL is_in_job;
-
- if (IsProcessInJob (GetCurrentProcess (), NULL, &is_in_job)
- && is_in_job
- && QueryInformationJobObject (NULL, JobObjectBasicLimitInformation,
- &jobinfo, sizeof jobinfo, NULL)
- && (jobinfo.LimitFlags & (JOB_OBJECT_LIMIT_BREAKAWAY_OK
- | JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK)))
- {
- debug_printf ("Add CREATE_BREAKAWAY_FROM_JOB");
- c_flags |= CREATE_BREAKAWAY_FROM_JOB;
- }
- }
-
- if (mode == _P_DETACH)
- c_flags |= DETACHED_PROCESS;
- else
- fhandler_console::need_invisible ();
-
- if (mode != _P_OVERLAY)
- myself->exec_sendsig = NULL;
- else
- {
- /* Reset sendsig so that any process which wants to send a signal
- to this pid will wait for the new process to become active.
- Save the old value in case the exec fails. */
- if (!myself->exec_sendsig)
- {
- myself->exec_sendsig = myself->sendsig;
- myself->exec_dwProcessId = myself->dwProcessId;
- myself->sendsig = NULL;
- reset_sendsig = true;
- }
- }
-
- if (null_app_name)
- runpath = NULL;
- else
- {
- USHORT len = real_path.get_nt_native_path ()->Length / sizeof (WCHAR);
- if (RtlEqualUnicodePathPrefix (real_path.get_nt_native_path (),
- &ro_u_natp, FALSE))
- {
- runpath = real_path.get_wide_win32_path (runpath);
- /* If the executable path length is < MAX_PATH, make sure the long
- path win32 prefix is removed from the path to make subsequent
- not long path aware native Win32 child processes happy. */
- if (len < MAX_PATH + 4)
- {
- if (runpath[5] == ':')
- runpath += 4;
- else if (len < MAX_PATH + 6)
- *(runpath += 6) = L'\\';
- }
- }
- else if (len < NT_MAX_PATH - ro_u_globalroot.Length / sizeof (WCHAR))
- {
- UNICODE_STRING rpath;
-
- RtlInitEmptyUnicodeString (&rpath, runpath,
- (NT_MAX_PATH - 1) * sizeof (WCHAR));
- RtlCopyUnicodeString (&rpath, &ro_u_globalroot);
- RtlAppendUnicodeStringToString (&rpath,
- real_path.get_nt_native_path ());
- }
- else
- {
- set_errno (ENAMETOOLONG);
- res = -1;
- __leave;
- }
- }
-
- cygbench ("spawn-worker");
-
- if (!real_path.iscygexec())
- ::cygheap->fdtab.set_file_pointers_for_exec ();
-
- /* If we switch the user, merge the user's Windows environment. */
- bool switch_user = ::cygheap->user.issetuid ()
- && (::cygheap->user.saved_uid
- != ::cygheap->user.real_uid);
- moreinfo->envp = build_env (envp, envblock, moreinfo->envc,
- real_path.iscygexec (),
- switch_user ? ::cygheap->user.primary_token ()
- : NULL);
- if (!moreinfo->envp || !envblock)
- {
- set_errno (E2BIG);
- res = -1;
- __leave;
- }
- set (chtype, real_path.iscygexec ());
- __stdin = in__stdin;
- __stdout = in__stdout;
- record_children ();
-
- si.lpReserved2 = (LPBYTE) this;
- si.cbReserved2 = sizeof (*this);
-
- /* Depends on set call above.
- Some file types might need extra effort in the parent after CreateProcess
- and before copying the datastructures to the child. So we have to start
- the child in suspend state, unfortunately, to avoid a race condition. */
- if (!newargv.win16_exe
- && (!iscygwin () || mode != _P_OVERLAY
- || ::cygheap->fdtab.need_fixup_before ()))
- c_flags |= CREATE_SUSPENDED;
- /* If a native application should be spawned, we test here if the spawning
- process is running in a console and, if so, if it's a foreground or
- background process. If it's a background process, we start the native
- process with the CREATE_NEW_PROCESS_GROUP flag set. This lets the native
- process ignore Ctrl-C by default. If we don't do that, pressing Ctrl-C
- in a console will break native processes running in the background,
- because the Ctrl-C event is sent to all processes in the console, unless
- they ignore it explicitely. CREATE_NEW_PROCESS_GROUP does that for us. */
- if (!iscygwin () && fhandler_console::exists ()
- && fhandler_console::tc_getpgid () != myself->pgid)
- c_flags |= CREATE_NEW_PROCESS_GROUP;
- refresh_cygheap ();
-
- if (mode == _P_DETACH)
- /* all set */;
- else if (mode != _P_OVERLAY || !my_wr_proc_pipe)
- prefork ();
- else
- wr_proc_pipe = my_wr_proc_pipe;
-
- /* Don't allow child to inherit these handles if it's not a Cygwin program.
- wr_proc_pipe will be injected later. parent won't be used by the child
- so there is no reason for the child to have it open as it can confuse
- ps into thinking that children of windows processes are all part of
- the same "execed" process.
- FIXME: Someday, make it so that parent is never created when starting
- non-Cygwin processes. */
- if (!iscygwin ())
- {
- SetHandleInformation (wr_proc_pipe, HANDLE_FLAG_INHERIT, 0);
- SetHandleInformation (parent, HANDLE_FLAG_INHERIT, 0);
- }
- /* FIXME: racy */
- if (mode != _P_OVERLAY)
- SetHandleInformation (my_wr_proc_pipe, HANDLE_FLAG_INHERIT, 0);
- parent_winpid = GetCurrentProcessId ();
-
- loop:
- /* When ruid != euid we create the new process under the current original
- account and impersonate in child, this way maintaining the different
- effective vs. real ids.
- FIXME: If ruid != euid and ruid != saved_uid we currently give
- up on ruid. The new process will have ruid == euid. */
- ::cygheap->user.deimpersonate ();
-
- if (!real_path.iscygexec () && mode == _P_OVERLAY)
- myself->process_state |= PID_NOTCYGWIN;
-
- wchar_t wcmd[(size_t) cmd];
- if (!::cygheap->user.issetuid ()
- || (::cygheap->user.saved_uid == ::cygheap->user.real_uid
- && ::cygheap->user.saved_gid == ::cygheap->user.real_gid
- && !::cygheap->user.groups.issetgroups ()
- && !::cygheap->user.setuid_to_restricted))
- {
- rc = CreateProcessW (runpath, /* image name - with full path */
- cmd.wcs (wcmd),/* what was passed to exec */
- &sec_none_nih, /* process security attrs */
- &sec_none_nih, /* thread security attrs */
- TRUE, /* inherit handles from parent */
- c_flags,
- envblock, /* environment */
- NULL,
- &si,
- &pi);
- }
- else
- {
- /* Give access to myself */
- if (mode == _P_OVERLAY)
- myself.set_acl();
-
- WCHAR wstname[1024] = { L'\0' };
- HWINSTA hwst_orig = NULL, hwst = NULL;
- HDESK hdsk_orig = NULL, hdsk = NULL;
- PSECURITY_ATTRIBUTES sa;
- DWORD n;
-
- hwst_orig = GetProcessWindowStation ();
- hdsk_orig = GetThreadDesktop (GetCurrentThreadId ());
- GetUserObjectInformationW (hwst_orig, UOI_NAME, wstname, 1024, &n);
- /* Prior to Vista it was possible to start a service with the
- "Interact with desktop" flag. This started the service in the
- interactive window station of the console. A big security
- risk, but we don't want to disable this behaviour for older
- OSes because it's still heavily used by some users. They have
- been warned. */
- if (!::cygheap->user.setuid_to_restricted
- && wcscasecmp (wstname, L"WinSta0") != 0)
- {
- WCHAR sid[128];
-
- sa = sec_user ((PSECURITY_ATTRIBUTES) alloca (1024),
- ::cygheap->user.sid ());
- /* We're creating a window station per user, not per logon session.
- First of all we might not have a valid logon session for
- the user (logon by create_token), and second, it doesn't
- make sense in terms of security to create a new window
- station for every logon of the same user. It just fills up
- the system with window stations for no good reason. */
- hwst = CreateWindowStationW (::cygheap->user.get_windows_id (sid),
- 0, GENERIC_READ | GENERIC_WRITE, sa);
- if (!hwst)
- system_printf ("CreateWindowStation failed, %E");
- else if (!SetProcessWindowStation (hwst))
- system_printf ("SetProcessWindowStation failed, %E");
- else if (!(hdsk = CreateDesktopW (L"Default", NULL, NULL, 0,
- GENERIC_ALL, sa)))
- system_printf ("CreateDesktop failed, %E");
- else
- {
- wcpcpy (wcpcpy (wstname, sid), L"\\Default");
- si.lpDesktop = wstname;
- debug_printf ("Desktop: %W", si.lpDesktop);
- }
- }
-
- rc = CreateProcessAsUserW (::cygheap->user.primary_token (),
- runpath, /* image name - with full path */
- cmd.wcs (wcmd),/* what was passed to exec */
- &sec_none_nih, /* process security attrs */
- &sec_none_nih, /* thread security attrs */
- TRUE, /* inherit handles from parent */
- c_flags,
- envblock, /* environment */
- NULL,
- &si,
- &pi);
- if (hwst)
- {
- SetProcessWindowStation (hwst_orig);
- CloseWindowStation (hwst);
- }
- if (hdsk)
- {
- SetThreadDesktop (hdsk_orig);
- CloseDesktop (hdsk);
- }
- }
-
- if (mode != _P_OVERLAY)
- SetHandleInformation (my_wr_proc_pipe, HANDLE_FLAG_INHERIT,
- HANDLE_FLAG_INHERIT);
-
- /* Set errno now so that debugging messages from it appear before our
- final debugging message [this is a general rule for debugging
- messages]. */
- if (!rc)
- {
- __seterrno ();
- syscall_printf ("CreateProcess failed, %E");
- /* If this was a failed exec, restore the saved sendsig. */
- if (reset_sendsig)
- {
- myself->sendsig = myself->exec_sendsig;
- myself->exec_sendsig = NULL;
- }
- myself->process_state &= ~PID_NOTCYGWIN;
- /* Reset handle inheritance to default when the execution of a non-Cygwin
- process fails. Only need to do this for _P_OVERLAY since the handle will
- be closed otherwise. Don't need to do this for 'parent' since it will
- be closed in every case. See FIXME above. */
- if (!iscygwin () && mode == _P_OVERLAY)
- SetHandleInformation (wr_proc_pipe, HANDLE_FLAG_INHERIT,
- HANDLE_FLAG_INHERIT);
- if (wr_proc_pipe == my_wr_proc_pipe)
- wr_proc_pipe = NULL; /* We still own it: don't nuke in destructor */
-
- /* Restore impersonation. In case of _P_OVERLAY this isn't
- allowed since it would overwrite child data. */
- if (mode != _P_OVERLAY)
- ::cygheap->user.reimpersonate ();
-
- res = -1;
- __leave;
- }
-
- /* The CREATE_SUSPENDED case is handled below */
- if (iscygwin () && !(c_flags & CREATE_SUSPENDED))
- strace.write_childpid (pi.dwProcessId);
-
- /* Fixup the parent data structures if needed and resume the child's
- main thread. */
- if (::cygheap->fdtab.need_fixup_before ())
- ::cygheap->fdtab.fixup_before_exec (pi.dwProcessId);
-
- if (mode != _P_OVERLAY)
- cygpid = cygwin_pid (pi.dwProcessId);
- else
- cygpid = myself->pid;
-
- /* We print the original program name here so the user can see that too. */
- syscall_printf ("pid %d, prog_arg %s, cmd line %.9500s)",
- rc ? cygpid : (unsigned int) -1, prog_arg, (const char *) cmd);
-
- /* Name the handle similarly to proc_subproc. */
- ProtectHandle1 (pi.hProcess, childhProc);
-
- if (mode == _P_OVERLAY)
- {
- myself->dwProcessId = pi.dwProcessId;
- strace.execing = 1;
- myself.hProcess = hExeced = pi.hProcess;
- real_path.get_wide_win32_path (myself->progname); // FIXME: race?
- sigproc_printf ("new process name %W", myself->progname);
- if (!iscygwin ())
- close_all_files ();
- }
- else
- {
- myself->set_has_pgid_children ();
- ProtectHandle (pi.hThread);
- pinfo child (cygpid,
- PID_IN_USE | (real_path.iscygexec () ? 0 : PID_NOTCYGWIN));
- if (!child)
- {
- syscall_printf ("pinfo failed");
- if (get_errno () != ENOMEM)
- set_errno (EAGAIN);
- res = -1;
- __leave;
- }
- child->dwProcessId = pi.dwProcessId;
- child.hProcess = pi.hProcess;
-
- real_path.get_wide_win32_path (child->progname);
- /* FIXME: This introduces an unreferenced, open handle into the child.
- The purpose is to keep the pid shared memory open so that all of
- the fields filled out by child.remember do not disappear and so there
- is not a brief period during which the pid is not available.
- However, we should try to find another way to do this eventually. */
- DuplicateHandle (GetCurrentProcess (), child.shared_handle (),
- pi.hProcess, NULL, 0, 0, DUPLICATE_SAME_ACCESS);
- child->start_time = time (NULL); /* Register child's starting time. */
- child->nice = myself->nice;
- postfork (child);
- if (!child.remember (mode == _P_DETACH))
- {
- /* FIXME: Child in strange state now */
- CloseHandle (pi.hProcess);
- ForceCloseHandle (pi.hThread);
- res = -1;
- __leave;
- }
- }
-
- /* Start the child running */
- if (c_flags & CREATE_SUSPENDED)
- {
- /* Inject a non-inheritable wr_proc_pipe handle into child so that we
- can accurately track when the child exits without keeping this
- process waiting around for it to exit. */
- if (!iscygwin ())
- DuplicateHandle (GetCurrentProcess (), wr_proc_pipe, pi.hProcess, NULL,
- 0, false, DUPLICATE_SAME_ACCESS);
- ResumeThread (pi.hThread);
- if (iscygwin ())
- strace.write_childpid (pi.dwProcessId);
- }
- ForceCloseHandle (pi.hThread);
-
- sigproc_printf ("spawned windows pid %d", pi.dwProcessId);
-
- bool synced;
- if ((mode == _P_DETACH || mode == _P_NOWAIT) && !iscygwin ())
- synced = false;
- else
- /* Just mark a non-cygwin process as 'synced'. We will still eventually
- wait for it to exit in maybe_set_exit_code_from_windows(). */
- synced = iscygwin () ? sync (pi.dwProcessId, pi.hProcess, INFINITE) : true;
-
- switch (mode)
- {
- case _P_OVERLAY:
- myself.hProcess = pi.hProcess;
- if (!synced)
- {
- if (!proc_retry (pi.hProcess))
- {
- looped++;
- goto loop;
- }
- close_all_files (true);
- }
- else
- {
- if (iscygwin ())
- close_all_files (true);
- if (!my_wr_proc_pipe
- && WaitForSingleObject (pi.hProcess, 0) == WAIT_TIMEOUT)
- wait_for_myself ();
- }
- myself.exit (EXITCODE_NOSET);
- break;
- case _P_WAIT:
- case _P_SYSTEM:
- system_call.arm ();
- if (waitpid (cygpid, &res, 0) != cygpid)
- res = -1;
- break;
- case _P_DETACH:
- res = 0; /* Lost all memory of this child. */
- break;
- case _P_NOWAIT:
- case _P_NOWAITO:
- case _P_VFORK:
- res = cygpid;
- break;
- default:
- break;
- }
- }
- __except (NO_ERROR)
- {
- if (get_errno () == ENOMEM)
- set_errno (E2BIG);
- else
- set_errno (EFAULT);
- res = -1;
- }
- __endtry
- this->cleanup ();
- if (envblock)
- free (envblock);
- return (int) res;
-}
-
-extern "C" int
-cwait (int *result, int pid, int)
-{
- return waitpid (pid, result, 0);
-}
-
-/*
-* Helper function for spawn runtime calls.
-* Doesn't search the path.
-*/
-
-extern "C" int
-spawnve (int mode, const char *path, const char *const *argv,
- const char *const *envp)
-{
- static char *const empty_env[] = { NULL };
-
- int ret;
-#ifdef NEWVFORK
- vfork_save *vf = vfork_storage.val ();
-
- if (vf != NULL && (vf->pid < 0) && mode == _P_OVERLAY)
- mode = _P_NOWAIT;
- else
- vf = NULL;
-#endif
-
- syscall_printf ("spawnve (%s, %s, %p)", path, argv[0], envp);
-
- if (!envp)
- envp = empty_env;
-
- switch (_P_MODE (mode))
- {
- case _P_OVERLAY:
- ch_spawn.worker (path, argv, envp, mode);
- /* Errno should be set by worker. */
- ret = -1;
- break;
- case _P_VFORK:
- case _P_NOWAIT:
- case _P_NOWAITO:
- case _P_WAIT:
- case _P_DETACH:
- case _P_SYSTEM:
- ret = ch_spawn.worker (path, argv, envp, mode);
-#ifdef NEWVFORK
- if (vf)
- {
- if (ret > 0)
- {
- debug_printf ("longjmping due to vfork");
- vf->restore_pid (ret);
- }
- }
-#endif
- break;
- default:
- set_errno (EINVAL);
- ret = -1;
- break;
- }
- return ret;
-}
-
-/*
-* spawn functions as implemented in the MS runtime library.
-* Most of these based on (and copied from) newlib/libc/posix/execXX.c
-*/
-
-extern "C" int
-spawnl (int mode, const char *path, const char *arg0, ...)
-{
- int i;
- va_list args;
- const char *argv[256];
-
- va_start (args, arg0);
- argv[0] = arg0;
- i = 1;
-
- do
- argv[i] = va_arg (args, const char *);
- while (argv[i++] != NULL);
-
- va_end (args);
-
- return spawnve (mode, path, (char * const *) argv, cur_environ ());
-}
-
-extern "C" int
-spawnle (int mode, const char *path, const char *arg0, ...)
-{
- int i;
- va_list args;
- const char * const *envp;
- const char *argv[256];
-
- va_start (args, arg0);
- argv[0] = arg0;
- i = 1;
-
- do
- argv[i] = va_arg (args, const char *);
- while (argv[i++] != NULL);
-
- envp = va_arg (args, const char * const *);
- va_end (args);
-
- return spawnve (mode, path, (char * const *) argv, (char * const *) envp);
-}
-
-extern "C" int
-spawnlp (int mode, const char *file, const char *arg0, ...)
-{
- int i;
- va_list args;
- const char *argv[256];
- path_conv buf;
-
- va_start (args, arg0);
- argv[0] = arg0;
- i = 1;
-
- do
- argv[i] = va_arg (args, const char *);
- while (argv[i++] != NULL);
-
- va_end (args);
-
- return spawnve (mode | _P_PATH_TYPE_EXEC, find_exec (file, buf),
- (char * const *) argv, cur_environ ());
-}
-
-extern "C" int
-spawnlpe (int mode, const char *file, const char *arg0, ...)
-{
- int i;
- va_list args;
- const char * const *envp;
- const char *argv[256];
- path_conv buf;
-
- va_start (args, arg0);
- argv[0] = arg0;
- i = 1;
-
- do
- argv[i] = va_arg (args, const char *);
- while (argv[i++] != NULL);
-
- envp = va_arg (args, const char * const *);
- va_end (args);
-
- return spawnve (mode | _P_PATH_TYPE_EXEC, find_exec (file, buf),
- (char * const *) argv, envp);
-}
-
-extern "C" int
-spawnv (int mode, const char *path, const char * const *argv)
-{
- return spawnve (mode, path, argv, cur_environ ());
-}
-
-extern "C" int
-spawnvp (int mode, const char *file, const char * const *argv)
-{
- path_conv buf;
- return spawnve (mode | _P_PATH_TYPE_EXEC, find_exec (file, buf), argv,
- cur_environ ());
-}
-
-extern "C" int
-spawnvpe (int mode, const char *file, const char * const *argv,
- const char * const *envp)
-{
- path_conv buf;
- return spawnve (mode | _P_PATH_TYPE_EXEC, find_exec (file, buf), argv, envp);
-}
-
-int
-av::setup (const char *prog_arg, path_conv& real_path, const char *ext,
- int argc, const char *const *argv, bool p_type_exec)
-{
- const char *p;
- bool exeext = ascii_strcasematch (ext, ".exe");
- new (this) av (argc, argv);
- if ((exeext && real_path.iscygexec ()) || ascii_strcasematch (ext, ".bat")
- || (!*ext && ((p = ext - 4) > real_path.get_win32 ())
- && (ascii_strcasematch (p, ".bat") || ascii_strcasematch (p, ".cmd")
- || ascii_strcasematch (p, ".btm"))))
- /* no extra checks needed */;
- else
- while (1)
- {
- char *pgm = NULL;
- char *arg1 = NULL;
- char *ptr, *buf;
- OBJECT_ATTRIBUTES attr;
- IO_STATUS_BLOCK io;
- HANDLE h;
- NTSTATUS status;
- LARGE_INTEGER size;
-
- status = NtOpenFile (&h, SYNCHRONIZE | GENERIC_READ,
- real_path.get_object_attr (attr, sec_none_nih),
- &io, FILE_SHARE_VALID_FLAGS,
- FILE_SYNCHRONOUS_IO_NONALERT
- | FILE_OPEN_FOR_BACKUP_INTENT
- | FILE_NON_DIRECTORY_FILE);
- if (!NT_SUCCESS (status))
- {
- /* File is not readable? Doesn't mean it's not executable.
- Test for executability and if so, just assume the file is
- a cygwin executable and go ahead. */
- if (status == STATUS_ACCESS_DENIED && real_path.has_acls ()
- && check_file_access (real_path, X_OK, true) == 0)
- {
- real_path.set_cygexec (true);
- break;
- }
- goto err;
- }
- if (!GetFileSizeEx (h, &size))
- {
- NtClose (h);
- goto err;
- }
- if (size.QuadPart > (LONGLONG) wincap.allocation_granularity ())
- size.LowPart = wincap.allocation_granularity ();
-
- HANDLE hm = CreateFileMapping (h, &sec_none_nih, PAGE_READONLY,
- 0, 0, NULL);
- NtClose (h);
- if (!hm)
- {
- /* ERROR_FILE_INVALID indicates very likely an empty file. */
- if (GetLastError () == ERROR_FILE_INVALID)
- {
- debug_printf ("zero length file, treat as script.");
- goto just_shell;
- }
- goto err;
- }
- /* Try to map the first 64K of the image. That's enough for the local
- tests, and it's enough for hook_or_detect_cygwin to compute the IAT
- address. */
- buf = (char *) MapViewOfFile (hm, FILE_MAP_READ, 0, 0, size.LowPart);
- if (!buf)
- {
- CloseHandle (hm);
- goto err;
- }
-
- {
- __try
- {
- if (buf[0] == 'M' && buf[1] == 'Z')
- {
- WORD subsys;
- unsigned off = (unsigned char) buf[0x18] | (((unsigned char) buf[0x19]) << 8);
- win16_exe = off < sizeof (IMAGE_DOS_HEADER);
- if (!win16_exe)
- real_path.set_cygexec (hook_or_detect_cygwin (buf, NULL,
- subsys, hm));
- else
- real_path.set_cygexec (false);
- UnmapViewOfFile (buf);
- CloseHandle (hm);
- break;
- }
- }
- __except (NO_ERROR)
- {
- UnmapViewOfFile (buf);
- CloseHandle (hm);
- real_path.set_cygexec (false);
- break;
- }
- __endtry
- }
- CloseHandle (hm);
-
- debug_printf ("%s is possibly a script", real_path.get_win32 ());
-
- ptr = buf;
- if (*ptr++ == '#' && *ptr++ == '!')
- {
- ptr += strspn (ptr, " \t");
- size_t len = strcspn (ptr, "\r\n");
- while (ptr[len - 1] == ' ' || ptr[len - 1] == '\t')
- len--;
- if (len)
- {
- char *namebuf = (char *) alloca (len + 1);
- memcpy (namebuf, ptr, len);
- namebuf[len] = '\0';
- for (ptr = pgm = namebuf; *ptr; ptr++)
- if (!arg1 && (*ptr == ' ' || *ptr == '\t'))
- {
- /* Null terminate the initial command and step over any
- additional white space. If we've hit the end of the
- line, exit the loop. Otherwise, we've found the first
- argument. Position the current pointer on the last known
- white space. */
- *ptr = '\0';
- char *newptr = ptr + 1;
- newptr += strspn (newptr, " \t");
- if (!*newptr)
- break;
- arg1 = newptr;
- ptr = newptr - 1;
- }
- }
- }
- UnmapViewOfFile (buf);
- just_shell:
- if (!pgm)
- {
- if (!p_type_exec)
- {
- /* Not called from exec[lv]p. Don't try to treat as script. */
- debug_printf ("%s is not a valid executable",
- real_path.get_win32 ());
- set_errno (ENOEXEC);
- return -1;
- }
- if (ascii_strcasematch (ext, ".com"))
- break;
- pgm = (char *) "/bin/sh";
- arg1 = NULL;
- }
-
- /* Check if script is executable. Otherwise we start non-executable
- scripts successfully, which is incorrect behaviour. */
- if (real_path.has_acls ()
- && check_file_access (real_path, X_OK, true) < 0)
- return -1; /* errno is already set. */
-
- /* Replace argv[0] with the full path to the script if this is the
- first time through the loop. */
- replace0_maybe (prog_arg);
-
- /* pointers:
- * pgm interpreter name
- * arg1 optional string
- */
- if (arg1)
- unshift (arg1);
-
- /* FIXME: This should not be using FE_NATIVE. It should be putting
- the posix path on the argv list. */
- find_exec (pgm, real_path, "PATH=", FE_NATIVE, &ext);
- unshift (real_path.get_win32 (), 1);
- }
- if (real_path.iscygexec ())
- dup_all ();
- return 0;
-
-err:
- __seterrno ();
- return -1;
-}
diff --git a/winsup/cygwin/speclib b/winsup/cygwin/speclib
deleted file mode 100755
index b90096040..000000000
--- a/winsup/cygwin/speclib
+++ /dev/null
@@ -1,83 +0,0 @@
-#!/usr/bin/perl
-use Getopt::Long;
-use File::Temp qw'tempdir';
-use File::Basename;
-use File::Spec;
-use strict;
-
-sub dllname($;$);
-
-my $static;
-my $inverse;
-my @exclude;
-
-my ($cpu, $ar, $as, $nm, $objcopy);
-GetOptions('exclude=s'=>\@exclude, 'static!'=>\$static, 'v!'=>\$inverse,
- 'cpu=s'=>\$cpu, 'ar=s'=>\$ar, 'as=s'=>\$as,'nm=s'=>\$nm, 'objcopy=s'=>\$objcopy);
-
-$_ = File::Spec->rel2abs($_) for @ARGV;
-
-my $libdll = shift;
-my $lib = pop;
-my $uscore = ($cpu eq 'x86_64' ? undef : '_');
-(my $iname = basename $lib) =~ s/\.a$//o;
-$iname = $uscore . $iname . '_dll_iname';
-
-open my $nm_fd, '-|', $nm, '-Apg', '--defined-only', @ARGV, $libdll or
- die "$0: execution of $nm for object files failed - $!\n";
-
-my %match_syms = ();
-my $symfiles = ();
-my $lastfn;
-my %extract = ();
-my $exclude_regex = @exclude ? join('|', @exclude) : '\\UnLiKeLy//';
-$exclude_regex = qr/$exclude_regex/;
-my $dllname;
-while (<$nm_fd>) {
- study;
- if (/ I _?(.*)_dll_iname/o) {
- $dllname = $1;
- } else {
- my ($file, $member, $symbol) = m%^([^:]*):([^:]*(?=:))?.* T (.*)%o;
- next if !defined($symbol) || $symbol =~ $exclude_regex;
- if ($file ne $libdll) {
- $match_syms{$symbol} = 1;
- } elsif ($match_syms{$symbol} ? !$inverse : $inverse) {
- $extract{$member} = 1;
- }
- }
-}
-close $nm_fd;
-
-
-%extract or die "$0: couldn't find symbols for $lib\n";
-
-my $dir = tempdir(CLEANUP => 1);
-
-chdir $dir;
-# print join(' ', '+', $ar, 'x', sort keys %extract), "\n";
-my $res = system $ar, 'x', $libdll, sort keys %extract;
-die "$0: $ar extraction exited with non-zero status\n" if $res;
-unlink $lib;
-
-# Add a dummy .idata object for libtool so that it will think
-# this library is an import library.
-my $iname_o = 'd000000.o';
-$extract{$iname_o} = 1;
-open my $as_fd, '|-', $as, '-R', '-o', $iname_o, "-";
-print $as_fd <<EOF;
- .section .idata\$7
-.global $iname
-$iname: .asciz "$dllname.dll"
-EOF
-close $as_fd or exit 1;
-system $objcopy, '-j', '.idata$7', $iname_o;
-
-$res = system $ar, 'crus', $lib, sort keys %extract;
-unlink keys %extract;
-die "$0: ar creation of $lib exited with non-zero status\n" if $res;
-exit 0;
-
-END {
- chdir '/tmp'; # Allow $dir directory removal on Windows
-}
diff --git a/winsup/cygwin/spinlock.h b/winsup/cygwin/spinlock.h
deleted file mode 100644
index e43d19c88..000000000
--- a/winsup/cygwin/spinlock.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/* spinlock.h: Header file for cygwin time-sensitive synchronization primitive.
-
- Copyright 2010 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _SPINLOCK_H
-#define _SPINLOCK_H
-
-#include "ntdll.h"
-
-#define SPINLOCK_WAIT (15000LL * 10000LL)
-
-class spinlock
-{
- LONG *locker;
- LONG val;
- LONG setto;
- void done (LONG what)
- {
- if (locker)
- {
- InterlockedExchange (locker, what);
- locker = NULL;
- }
- }
- long long time ()
- {
- LARGE_INTEGER t;
- if (NtQuerySystemTime (&t) == STATUS_SUCCESS)
- return get_ll (t);
- return 0LL;
- }
-public:
- spinlock (LONG& locktest, LONG wanted_val = 1, LONGLONG timeout = SPINLOCK_WAIT):
- locker (&locktest), setto (wanted_val)
- {
- /* Quick test to see if we're already initialized */
- if ((val = locktest) == wanted_val)
- locker = NULL;
- /* Slightly less quick test to see if we are the first cygwin process */
- else if ((val = InterlockedExchange (locker, -1)) == 0)
- /* We're armed and dangerous */;
- else if (val == wanted_val)
- done (val); /* This was initialized while we weren't looking */
- else
- {
- long long then = time ();
- /* Loop waiting for some other process to set locktest to something
- other than -1, indicating that initialization has finished. Or,
- wait a default of 15 seconds for that to happen and, if it doesn't
- just grab the lock ourselves. */
- while ((val = InterlockedExchange (locker, -1)) == -1
- && (time () - then) < timeout)
- yield ();
- /* Reset the lock back to wanted_value under the assumption that is
- what caused the above loop to kick out. */
- if (val == -1)
- val = 0; /* Timed out. We'll initialize things ourselves. */
- else
- done (val); /* Put back whatever was there before, assuming that
- it is actually wanted_val. */
- }
- }
- ~spinlock () {done (setto);}
- operator ULONG () const {return (ULONG) val;}
- /* FIXME: This should be handled in a more general fashion, probably by
- establishing a linked list of spinlocks which are freed on process exit. */
- void multiple_cygwin_problem (const char *w, unsigned m, unsigned v)
- {
- done (val);
- ::multiple_cygwin_problem (w, m, v);
- }
-};
-
-#endif /*_SPINLOCK_H*/
diff --git a/winsup/cygwin/strace.cc b/winsup/cygwin/strace.cc
deleted file mode 100644
index 9d1c3c27f..000000000
--- a/winsup/cygwin/strace.cc
+++ /dev/null
@@ -1,477 +0,0 @@
-/* strace.cc: system/windows tracing
-
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include <ctype.h>
-#include "cygerrno.h"
-#include "pinfo.h"
-#include "perprocess.h"
-#include "cygwin_version.h"
-#include "cygthread.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "child_info.h"
-
-#define PROTECT(x) x[sizeof (x)-1] = 0
-#define CHECK(x) if (x[sizeof (x)-1] != 0) { small_printf ("array bound exceeded %d\n", __LINE__); ExitProcess (1); }
-
-class strace NO_COPY strace;
-
-#ifndef NOSTRACE
-
-void
-strace::activate (bool isfork)
-{
- if (!_active && being_debugged ())
- {
- char buf[30];
- __small_sprintf (buf, "cYg%8x %lx %d", _STRACE_INTERFACE_ACTIVATE_ADDR, &_active, isfork);
- OutputDebugString (buf);
- if (_active)
- {
- char pidbuf[80];
- WCHAR progname_buf[NT_MAX_PATH - 512];
- WCHAR *progname;
- if (myself)
- {
- __small_sprintf (pidbuf, "(pid %d, ppid %d, windows pid %u)", myself->pid,
- myself->ppid ?: 1, GetCurrentProcessId ());
- progname = myself->progname;
- }
- else
- {
- GetModuleFileNameW (NULL, progname_buf,
- sizeof progname_buf / sizeof (WCHAR));
- __small_sprintf (pidbuf, "(windows pid %u)", GetCurrentProcessId ());
- progname = progname_buf;
- }
- prntf (1, NULL, "**********************************************");
- prntf (1, NULL, "Program name: %W %s", progname, pidbuf);
- prntf (1, NULL, "OS version: Windows %s", wincap.osname ());
- prntf (1, NULL, "**********************************************");
- }
- }
-}
-
-void
-strace::dll_info ()
-{
- if (active ())
- {
- prntf (1, NULL, "App version: %d.%d, api: %d.%d",
- user_data->dll_major, user_data->dll_minor,
- user_data->api_major, user_data->api_minor);
- prntf (1, NULL, "DLL version: %d.%d, api: %d.%d",
- cygwin_version.dll_major, cygwin_version.dll_minor,
- cygwin_version.api_major, cygwin_version.api_minor);
- prntf (1, NULL, "DLL build: %s", cygwin_version.dll_build_date);
- }
-}
-
-int
-strace::microseconds ()
-{
- static hires_ns now;
- return (int) now.usecs ();
-}
-
-static int __stdcall
-getfunc (char *in_dst, const char *func)
-{
- const char *p;
- const char *pe;
- char *dst = in_dst;
- for (p = func; (pe = strchr (p, '(')); p = pe + 1)
- if (isalnum ((int)pe[-1]) || pe[-1] == '_')
- break;
- else if (isspace ((int)pe[-1]))
- {
- pe--;
- break;
- }
- if (!pe)
- pe = strchr (func, '\0');
- for (p = pe; p > func; p--)
- if (p != pe && *p == ' ')
- {
- p++;
- break;
- }
- if (*p == '*')
- p++;
- while (p < pe)
- *dst++ = *p++;
-
- *dst++ = ':';
- *dst++ = ' ';
- *dst = '\0';
-
- return dst - in_dst;
-}
-
-static char *
-mypid (char *buf)
-{
- if (myself && myself->pid)
- __small_sprintf (buf, "%d", myself->pid);
- else
- __small_sprintf (buf, "(%d)", GetCurrentProcessId ());
- return buf;
-}
-
-/* sprintf analog for use by output routines. */
-int
-strace::vsprntf (char *buf, const char *func, const char *infmt, va_list ap)
-{
- int count;
- char fmt[80];
- static NO_COPY bool nonewline = false;
- DWORD err = GetLastError ();
- const char *tn = cygthread::name ();
-
- int microsec = microseconds ();
- lmicrosec = microsec;
-
- __small_sprintf (fmt, "%7d [%s] %s ", microsec, tn, "%W %s%s");
-
- SetLastError (err);
-
- if (nonewline)
- count = 0;
- else
- {
- PWCHAR pn = NULL;
- WCHAR progname[NT_MAX_PATH];
- if (!cygwin_finished_initializing)
- pn = (myself) ? myself->progname : NULL;
- else if (__progname)
- sys_mbstowcs(pn = progname, NT_MAX_PATH, __progname);
-
- WCHAR empty[1] = {};
- PWCHAR p;
- if (!pn)
- GetModuleFileNameW (NULL, pn = progname, sizeof (progname));
- if (!pn)
- p = empty;
- else if ((p = wcsrchr (pn, L'\\')) != NULL)
- p++;
- else if ((p = wcsrchr (pn, L'/')) != NULL)
- p++;
- else
- p = pn;
- if (p != progname)
- wcscpy (progname, p);
- if ((p = wcsrchr (progname, '.')) != NULL
- && !wcscasecmp (p, L".exe"))
- *p = '\000';
- p = progname;
- char tmpbuf[20];
- count = __small_sprintf (buf, fmt, *p ? p : L"?", mypid (tmpbuf),
- execing ? "!" : "");
- if (func)
- count += getfunc (buf + count, func);
- }
-
- count += __small_vsprintf (buf + count, infmt, ap);
- char *p;
- for (p = buf + count; p > buf; p--)
- switch (p[-1])
- {
- case '\n':
- p[-1] = '\0';
- break;
- case '\b':
- *--p = '\0';
- nonewline = true;
- goto done;
- default:
- goto addnl;
- }
-
-addnl:
- *p++ = '\n';
- *p = '\0';
- nonewline = false;
-
-done:
- return p - buf;
-}
-
-/* Write to strace file or strace queue. */
-void
-strace::write (unsigned category, const char *buf, int count)
-{
-# define PREFIX (3 + 8 + 1 + 8 + 1)
- char outbuf[PREFIX + 1 + count + 1];
-# define outstuff (outbuf + 12)
- __small_sprintf (outstuff, "%x %s", category, buf);
- __small_sprintf (outbuf, "cYg%08x", strlen (outstuff) + 1);
- outstuff[-1] = ' ';
- OutputDebugString (outbuf);
-#undef outstuff
-#undef PREFIX
-}
-
-void
-strace::write_childpid (pid_t pid)
-{
- char buf[30];
-
- if (!attached () || !being_debugged ())
- return;
- __small_sprintf (buf, "cYg%8x %x", _STRACE_CHILD_PID, pid);
- OutputDebugString (buf);
-}
-
-/* Printf function used when tracing system calls.
- Warning: DO NOT SET ERRNO HERE! */
-
-void
-strace::vprntf (unsigned category, const char *func, const char *fmt, va_list ap)
-{
- DWORD err = GetLastError ();
- int len;
- char buf[NT_MAX_PATH];
-
- PROTECT (buf);
- SetLastError (err);
-
- len = vsprntf (buf, func, fmt, ap);
- CHECK (buf);
- if (category & _STRACE_SYSTEM)
- {
- DWORD done;
- WriteFile (GetStdHandle (STD_ERROR_HANDLE), buf, len, &done, 0);
- FlushFileBuffers (GetStdHandle (STD_ERROR_HANDLE));
- /* Make sure that the message shows up on the screen, too, since this is
- a serious error. */
- if (GetFileType (GetStdHandle (STD_ERROR_HANDLE)) != FILE_TYPE_CHAR)
- {
- HANDLE h = CreateFile ("CONOUT$", GENERIC_READ | GENERIC_WRITE,
- FILE_SHARE_READ | FILE_SHARE_WRITE,
- &sec_none, OPEN_EXISTING, 0, 0);
- if (h != INVALID_HANDLE_VALUE)
- {
- WriteFile (h, buf, len, &done, 0);
- CloseHandle (h);
- }
- }
- }
-
-#ifndef NOSTRACE
- if (active ())
- write (category, buf, len);
-#endif
- SetLastError (err);
-}
-
-void
-strace::prntf (unsigned category, const char *func, const char *fmt, ...)
-{
- va_list ap;
-
- va_start (ap, fmt);
- vprntf (category, func, fmt, ap);
- va_end (ap);
-}
-
-extern "C" void
-strace_printf (unsigned category, const char *func, const char *fmt, ...)
-{
- va_list ap;
-
- if ((category & _STRACE_SYSTEM) || strace.active ())
- {
- va_start (ap, fmt);
- strace.vprntf (category, func, fmt, ap);
- va_end (ap);
- }
-}
-
-static NO_COPY struct tab
-{
- int v;
- const char *n;
-}
-ta[] =
-{
- { WM_NULL, "WM_NULL" },
- { WM_CREATE, "WM_CREATE" },
- { WM_DESTROY, "WM_DESTROY" },
- { WM_MOVE, "WM_MOVE" },
- { WM_SIZE, "WM_SIZE" },
- { WM_ACTIVATE, "WM_ACTIVATE" },
- { WM_SETFOCUS, "WM_SETFOCUS" },
- { WM_KILLFOCUS, "WM_KILLFOCUS" },
- { WM_ENABLE, "WM_ENABLE" },
- { WM_SETREDRAW, "WM_SETREDRAW" },
- { WM_SETTEXT, "WM_SETTEXT" },
- { WM_GETTEXT, "WM_GETTEXT" },
- { WM_GETTEXTLENGTH, "WM_GETTEXTLENGTH" },
- { WM_PAINT, "WM_PAINT" },
- { WM_CLOSE, "WM_CLOSE" },
- { WM_QUERYENDSESSION, "WM_QUERYENDSESSION" },
- { WM_QUIT, "WM_QUIT" },
- { WM_QUERYOPEN, "WM_QUERYOPEN" },
- { WM_ERASEBKGND, "WM_ERASEBKGND" },
- { WM_SYSCOLORCHANGE, "WM_SYSCOLORCHANGE" },
- { WM_ENDSESSION, "WM_ENDSESSION" },
- { WM_SHOWWINDOW, "WM_SHOWWINDOW" },
- { WM_WININICHANGE, "WM_WININICHANGE" },
- { WM_DEVMODECHANGE, "WM_DEVMODECHANGE" },
- { WM_ACTIVATEAPP, "WM_ACTIVATEAPP" },
- { WM_FONTCHANGE, "WM_FONTCHANGE" },
- { WM_TIMECHANGE, "WM_TIMECHANGE" },
- { WM_CANCELMODE, "WM_CANCELMODE" },
- { WM_SETCURSOR, "WM_SETCURSOR" },
- { WM_MOUSEACTIVATE, "WM_MOUSEACTIVATE" },
- { WM_CHILDACTIVATE, "WM_CHILDACTIVATE" },
- { WM_QUEUESYNC, "WM_QUEUESYNC" },
- { WM_GETMINMAXINFO, "WM_GETMINMAXINFO" },
- { WM_PAINTICON, "WM_PAINTICON" },
- { WM_ICONERASEBKGND, "WM_ICONERASEBKGND" },
- { WM_NEXTDLGCTL, "WM_NEXTDLGCTL" },
- { WM_SPOOLERSTATUS, "WM_SPOOLERSTATUS" },
- { WM_DRAWITEM, "WM_DRAWITEM" },
- { WM_MEASUREITEM, "WM_MEASUREITEM" },
- { WM_DELETEITEM, "WM_DELETEITEM" },
- { WM_VKEYTOITEM, "WM_VKEYTOITEM" },
- { WM_CHARTOITEM, "WM_CHARTOITEM" },
- { WM_SETFONT, "WM_SETFONT" },
- { WM_GETFONT, "WM_GETFONT" },
- { WM_SETHOTKEY, "WM_SETHOTKEY" },
- { WM_GETHOTKEY, "WM_GETHOTKEY" },
- { WM_QUERYDRAGICON, "WM_QUERYDRAGICON" },
- { WM_COMPAREITEM, "WM_COMPAREITEM" },
- { WM_COMPACTING, "WM_COMPACTING" },
- { WM_WINDOWPOSCHANGING, "WM_WINDOWPOSCHANGING" },
- { WM_WINDOWPOSCHANGED, "WM_WINDOWPOSCHANGED" },
- { WM_POWER, "WM_POWER" },
- { WM_COPYDATA, "WM_COPYDATA" },
- { WM_CANCELJOURNAL, "WM_CANCELJOURNAL" },
- { WM_NCCREATE, "WM_NCCREATE" },
- { WM_NCDESTROY, "WM_NCDESTROY" },
- { WM_NCCALCSIZE, "WM_NCCALCSIZE" },
- { WM_NCHITTEST, "WM_NCHITTEST" },
- { WM_NCPAINT, "WM_NCPAINT" },
- { WM_NCACTIVATE, "WM_NCACTIVATE" },
- { WM_GETDLGCODE, "WM_GETDLGCODE" },
- { WM_NCMOUSEMOVE, "WM_NCMOUSEMOVE" },
- { WM_NCLBUTTONDOWN, "WM_NCLBUTTONDOWN" },
- { WM_NCLBUTTONUP, "WM_NCLBUTTONUP" },
- { WM_NCLBUTTONDBLCLK, "WM_NCLBUTTONDBLCLK" },
- { WM_NCRBUTTONDOWN, "WM_NCRBUTTONDOWN" },
- { WM_NCRBUTTONUP, "WM_NCRBUTTONUP" },
- { WM_NCRBUTTONDBLCLK, "WM_NCRBUTTONDBLCLK" },
- { WM_NCMBUTTONDOWN, "WM_NCMBUTTONDOWN" },
- { WM_NCMBUTTONUP, "WM_NCMBUTTONUP" },
- { WM_NCMBUTTONDBLCLK, "WM_NCMBUTTONDBLCLK" },
- { WM_KEYFIRST, "WM_KEYFIRST" },
- { WM_KEYDOWN, "WM_KEYDOWN" },
- { WM_KEYUP, "WM_KEYUP" },
- { WM_CHAR, "WM_CHAR" },
- { WM_DEADCHAR, "WM_DEADCHAR" },
- { WM_SYSKEYDOWN, "WM_SYSKEYDOWN" },
- { WM_SYSKEYUP, "WM_SYSKEYUP" },
- { WM_SYSCHAR, "WM_SYSCHAR" },
- { WM_SYSDEADCHAR, "WM_SYSDEADCHAR" },
- { WM_KEYLAST, "WM_KEYLAST" },
- { WM_INITDIALOG, "WM_INITDIALOG" },
- { WM_COMMAND, "WM_COMMAND" },
- { WM_SYSCOMMAND, "WM_SYSCOMMAND" },
- { WM_TIMER, "WM_TIMER" },
- { WM_HSCROLL, "WM_HSCROLL" },
- { WM_VSCROLL, "WM_VSCROLL" },
- { WM_INITMENU, "WM_INITMENU" },
- { WM_INITMENUPOPUP, "WM_INITMENUPOPUP" },
- { WM_MENUSELECT, "WM_MENUSELECT" },
- { WM_MENUCHAR, "WM_MENUCHAR" },
- { WM_ENTERIDLE, "WM_ENTERIDLE" },
- { WM_CTLCOLORMSGBOX, "WM_CTLCOLORMSGBOX" },
- { WM_CTLCOLOREDIT, "WM_CTLCOLOREDIT" },
- { WM_CTLCOLORLISTBOX, "WM_CTLCOLORLISTBOX" },
- { WM_CTLCOLORBTN, "WM_CTLCOLORBTN" },
- { WM_CTLCOLORDLG, "WM_CTLCOLORDLG" },
- { WM_CTLCOLORSCROLLBAR, "WM_CTLCOLORSCROLLBAR" },
- { WM_CTLCOLORSTATIC, "WM_CTLCOLORSTATIC" },
- { WM_MOUSEFIRST, "WM_MOUSEFIRST" },
- { WM_MOUSEMOVE, "WM_MOUSEMOVE" },
- { WM_LBUTTONDOWN, "WM_LBUTTONDOWN" },
- { WM_LBUTTONUP, "WM_LBUTTONUP" },
- { WM_LBUTTONDBLCLK, "WM_LBUTTONDBLCLK" },
- { WM_RBUTTONDOWN, "WM_RBUTTONDOWN" },
- { WM_RBUTTONUP, "WM_RBUTTONUP" },
- { WM_RBUTTONDBLCLK, "WM_RBUTTONDBLCLK" },
- { WM_MBUTTONDOWN, "WM_MBUTTONDOWN" },
- { WM_MBUTTONUP, "WM_MBUTTONUP" },
- { WM_MBUTTONDBLCLK, "WM_MBUTTONDBLCLK" },
- { WM_MOUSELAST, "WM_MOUSELAST" },
- { WM_PARENTNOTIFY, "WM_PARENTNOTIFY" },
- { WM_ENTERMENULOOP, "WM_ENTERMENULOOP" },
- { WM_EXITMENULOOP, "WM_EXITMENULOOP" },
- { WM_MDICREATE, "WM_MDICREATE" },
- { WM_MDIDESTROY, "WM_MDIDESTROY" },
- { WM_MDIACTIVATE, "WM_MDIACTIVATE" },
- { WM_MDIRESTORE, "WM_MDIRESTORE" },
- { WM_MDINEXT, "WM_MDINEXT" },
- { WM_MDIMAXIMIZE, "WM_MDIMAXIMIZE" },
- { WM_MDITILE, "WM_MDITILE" },
- { WM_MDICASCADE, "WM_MDICASCADE" },
- { WM_MDIICONARRANGE, "WM_MDIICONARRANGE" },
- { WM_MDIGETACTIVE, "WM_MDIGETACTIVE" },
- { WM_MDISETMENU, "WM_MDISETMENU" },
- { WM_DROPFILES, "WM_DROPFILES" },
- { WM_MDIREFRESHMENU, "WM_MDIREFRESHMENU" },
- { WM_CUT, "WM_CUT" },
- { WM_COPY, "WM_COPY" },
- { WM_PASTE, "WM_PASTE" },
- { WM_CLEAR, "WM_CLEAR" },
- { WM_UNDO, "WM_UNDO" },
- { WM_RENDERFORMAT, "WM_RENDERFORMAT" },
- { WM_RENDERALLFORMATS, "WM_RENDERALLFORMATS" },
- { WM_DESTROYCLIPBOARD, "WM_DESTROYCLIPBOARD" },
- { WM_DRAWCLIPBOARD, "WM_DRAWCLIPBOARD" },
- { WM_PAINTCLIPBOARD, "WM_PAINTCLIPBOARD" },
- { WM_VSCROLLCLIPBOARD, "WM_VSCROLLCLIPBOARD" },
- { WM_SIZECLIPBOARD, "WM_SIZECLIPBOARD" },
- { WM_ASKCBFORMATNAME, "WM_ASKCBFORMATNAME" },
- { WM_CHANGECBCHAIN, "WM_CHANGECBCHAIN" },
- { WM_HSCROLLCLIPBOARD, "WM_HSCROLLCLIPBOARD" },
- { WM_QUERYNEWPALETTE, "WM_QUERYNEWPALETTE" },
- { WM_PALETTEISCHANGING, "WM_PALETTEISCHANGING" },
- { WM_PALETTECHANGED, "WM_PALETTECHANGED" },
- { WM_HOTKEY, "WM_HOTKEY" },
- { WM_PENWINFIRST, "WM_PENWINFIRST" },
- { WM_PENWINLAST, "WM_PENWINLAST" },
- { WM_ASYNCIO, "ASYNCIO" },
- { 0, 0 }};
-
-void
-strace::wm (int message, int word, int lon)
-{
- if (active ())
- {
- int i;
-
- for (i = 0; ta[i].n; i++)
- {
- if (ta[i].v == message)
- {
- prntf (_STRACE_WM, NULL, "wndproc %d %s %d %d", message, ta[i].n, word, lon);
- return;
- }
- }
- prntf (_STRACE_WM, NULL, "wndproc %d unknown %d %d", message, word, lon);
- }
-}
-#endif /*NOSTRACE*/
diff --git a/winsup/cygwin/strfuncs.cc b/winsup/cygwin/strfuncs.cc
deleted file mode 100644
index 94ce82ce5..000000000
--- a/winsup/cygwin/strfuncs.cc
+++ /dev/null
@@ -1,712 +0,0 @@
-/* strfuncs.cc: string functions
-
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include <stdlib.h>
-#include <sys/param.h>
-#include <wchar.h>
-#include <ntdll.h>
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-
-/* Transform characters invalid for Windows filenames to the Unicode private
- use area in the U+f0XX range. The affected characters are all control
- chars 1 <= c <= 31, as well as the characters " * : < > ? |. The backslash
- is affected as well, but we can't transform it as long as we accept Win32
- paths as input. */
-static const WCHAR tfx_chars[] = {
- 0, 0xf000 | 1, 0xf000 | 2, 0xf000 | 3,
- 0xf000 | 4, 0xf000 | 5, 0xf000 | 6, 0xf000 | 7,
- 0xf000 | 8, 0xf000 | 9, 0xf000 | 10, 0xf000 | 11,
- 0xf000 | 12, 0xf000 | 13, 0xf000 | 14, 0xf000 | 15,
- 0xf000 | 16, 0xf000 | 17, 0xf000 | 18, 0xf000 | 19,
- 0xf000 | 20, 0xf000 | 21, 0xf000 | 22, 0xf000 | 23,
- 0xf000 | 24, 0xf000 | 25, 0xf000 | 26, 0xf000 | 27,
- 0xf000 | 28, 0xf000 | 29, 0xf000 | 30, 0xf000 | 31,
- ' ', '!', 0xf000 | '"', '#',
- '$', '%', '&', 39,
- '(', ')', 0xf000 | '*', '+',
- ',', '-', '.', '\\',
- '0', '1', '2', '3',
- '4', '5', '6', '7',
- '8', '9', 0xf000 | ':', ';',
- 0xf000 | '<', '=', 0xf000 | '>', 0xf000 | '?',
- '@', 'A', 'B', 'C',
- 'D', 'E', 'F', 'G',
- 'H', 'I', 'J', 'K',
- 'L', 'M', 'N', 'O',
- 'P', 'Q', 'R', 'S',
- 'T', 'U', 'V', 'W',
- 'X', 'Y', 'Z', '[',
- '\\', ']', '^', '_',
- '`', 'a', 'b', 'c',
- 'd', 'e', 'f', 'g',
- 'h', 'i', 'j', 'k',
- 'l', 'm', 'n', 'o',
- 'p', 'q', 'r', 's',
- 't', 'u', 'v', 'w',
- 'x', 'y', 'z', '{',
- 0xf000 | '|', '}', '~', 127
-};
-
-/* This is the table for the reverse functionality in sys_cp_wcstombs.
- It differs deliberately in two code places (space and dot) to allow
- converting back space and dot on filesystems only supporting DOS
- filenames. */
-static const WCHAR tfx_rev_chars[] = {
- 0, 0xf000 | 1, 0xf000 | 2, 0xf000 | 3,
- 0xf000 | 4, 0xf000 | 5, 0xf000 | 6, 0xf000 | 7,
- 0xf000 | 8, 0xf000 | 9, 0xf000 | 10, 0xf000 | 11,
- 0xf000 | 12, 0xf000 | 13, 0xf000 | 14, 0xf000 | 15,
- 0xf000 | 16, 0xf000 | 17, 0xf000 | 18, 0xf000 | 19,
- 0xf000 | 20, 0xf000 | 21, 0xf000 | 22, 0xf000 | 23,
- 0xf000 | 24, 0xf000 | 25, 0xf000 | 26, 0xf000 | 27,
- 0xf000 | 28, 0xf000 | 29, 0xf000 | 30, 0xf000 | 31,
- 0xf000 | ' ', '!', 0xf000 | '"', '#',
- '$', '%', '&', 39,
- '(', ')', 0xf000 | '*', '+',
- ',', '-', 0xf000 | '.', '\\',
- '0', '1', '2', '3',
- '4', '5', '6', '7',
- '8', '9', 0xf000 | ':', ';',
- 0xf000 | '<', '=', 0xf000 | '>', 0xf000 | '?',
- '@', 'A', 'B', 'C',
- 'D', 'E', 'F', 'G',
- 'H', 'I', 'J', 'K',
- 'L', 'M', 'N', 'O',
- 'P', 'Q', 'R', 'S',
- 'T', 'U', 'V', 'W',
- 'X', 'Y', 'Z', '[',
- '\\', ']', '^', '_',
- '`', 'a', 'b', 'c',
- 'd', 'e', 'f', 'g',
- 'h', 'i', 'j', 'k',
- 'l', 'm', 'n', 'o',
- 'p', 'q', 'r', 's',
- 't', 'u', 'v', 'w',
- 'x', 'y', 'z', '{',
- 0xf000 | '|', '}', '~', 127
-};
-
-void
-transform_chars (PWCHAR path, PWCHAR path_end)
-{
- for (; path <= path_end; ++path)
- if (*path < 128)
- *path = tfx_chars[*path];
-}
-
-/* The SJIS, JIS and eucJP conversion in newlib does not use UTF as
- wchar_t character representation. That's unfortunate for us since
- we require UTF for the OS. What we do here is to have our own
- implementation of the base functions for the conversion using
- the MulitByteToWideChar/WideCharToMultiByte functions. */
-
-/* FIXME: We can't support JIS (ISO-2022-JP) at all right now. It's a
- stateful charset encoding. The translation from mbtowc to
- MulitByteToWideChar is quite complex. Given that we support SJIS and
- eucJP, the both most used Japanese charset encodings, this shouldn't
- be such a big problem. */
-
-/* GBK, eucKR, and Big5 conversions are not available so far in newlib. */
-
-static int
-__db_wctomb (struct _reent *r, char *s, wchar_t wchar, UINT cp)
-{
- if (s == NULL)
- return 0;
-
- if (wchar < 0x80)
- {
- *s = (char) wchar;
- return 1;
- }
-
- BOOL def_used = false;
- int ret = WideCharToMultiByte (cp, WC_NO_BEST_FIT_CHARS, &wchar, 1, s,
- 2, NULL, &def_used);
- if (ret > 0 && !def_used)
- return ret;
-
- r->_errno = EILSEQ;
- return -1;
-}
-
-extern "C" int
-__sjis_wctomb (struct _reent *r, char *s, wchar_t wchar, const char *charset,
- mbstate_t *state)
-{
- return __db_wctomb (r,s, wchar, 932);
-}
-
-extern "C" int
-__eucjp_wctomb (struct _reent *r, char *s, wchar_t wchar, const char *charset,
- mbstate_t *state)
-{
- /* Unfortunately, the Windows eucJP codepage 20932 is not really 100%
- compatible to eucJP. It's a cute approximation which makes it a
- doublebyte codepage.
- The JIS-X-0212 three byte codes (0x8f,0xa1-0xfe,0xa1-0xfe) are folded
- into two byte codes as follows: The 0x8f is stripped, the next byte is
- taken as is, the third byte is mapped into the lower 7-bit area by
- masking it with 0x7f. So, for instance, the eucJP code 0x8f,0xdd,0xf8
- becomes 0xdd,0x78 in CP 20932.
-
- To be really eucJP compatible, we have to map the JIS-X-0212 characters
- between CP 20932 and eucJP ourselves. */
- if (s == NULL)
- return 0;
-
- if (wchar < 0x80)
- {
- *s = (char) wchar;
- return 1;
- }
-
- BOOL def_used = false;
- int ret = WideCharToMultiByte (20932, WC_NO_BEST_FIT_CHARS, &wchar, 1, s,
- 3, NULL, &def_used);
- if (ret > 0 && !def_used)
- {
- /* CP20932 representation of JIS-X-0212 character? */
- if (ret == 2 && (unsigned char) s[1] <= 0x7f)
- {
- /* Yes, convert to eucJP three byte sequence */
- s[2] = s[1] | 0x80;
- s[1] = s[0];
- s[0] = 0x8f;
- ++ret;
- }
- return ret;
- }
-
- r->_errno = EILSEQ;
- return -1;
-}
-
-extern "C" int
-__gbk_wctomb (struct _reent *r, char *s, wchar_t wchar, const char *charset,
- mbstate_t *state)
-{
- return __db_wctomb (r,s, wchar, 936);
-}
-
-extern "C" int
-__kr_wctomb (struct _reent *r, char *s, wchar_t wchar, const char *charset,
- mbstate_t *state)
-{
- return __db_wctomb (r,s, wchar, 949);
-}
-
-extern "C" int
-__big5_wctomb (struct _reent *r, char *s, wchar_t wchar, const char *charset,
- mbstate_t *state)
-{
- return __db_wctomb (r,s, wchar, 950);
-}
-
-static int
-__db_mbtowc (struct _reent *r, wchar_t *pwc, const char *s, size_t n, UINT cp,
- mbstate_t *state)
-{
- wchar_t dummy;
- int ret;
-
- if (s == NULL)
- return 0; /* not state-dependent */
-
- if (n == 0)
- return -2;
-
- if (pwc == NULL)
- pwc = &dummy;
-
- if (state->__count == 0)
- {
- if (*(unsigned char *) s < 0x80)
- {
- *pwc = *(unsigned char *) s;
- return *s ? 1 : 0;
- }
- size_t cnt = MIN (n, 2);
- ret = MultiByteToWideChar (cp, MB_ERR_INVALID_CHARS, s, cnt, pwc, 1);
- if (ret)
- return cnt;
- if (n == 1)
- {
- state->__count = n;
- state->__value.__wchb[0] = *s;
- return -2;
- }
- /* These Win32 functions are really crappy. Assuming n is 2 but the
- first byte is a singlebyte charcode, the function does not convert
- that byte and return 1, rather it just returns 0. So, what we do
- here is to check if the first byte returns a valid value... */
- else if (MultiByteToWideChar (cp, MB_ERR_INVALID_CHARS, s, 1, pwc, 1))
- return 1;
- r->_errno = EILSEQ;
- return -1;
- }
- state->__value.__wchb[state->__count] = *s;
- ret = MultiByteToWideChar (cp, MB_ERR_INVALID_CHARS,
- (const char *) state->__value.__wchb, 2, pwc, 1);
- if (!ret)
- {
- r->_errno = EILSEQ;
- return -1;
- }
- state->__count = 0;
- return 1;
-}
-
-extern "C" int
-__sjis_mbtowc (struct _reent *r, wchar_t *pwc, const char *s, size_t n,
- const char *charset, mbstate_t *state)
-{
- return __db_mbtowc (r, pwc, s, n, 932, state);
-}
-
-extern "C" int
-__eucjp_mbtowc (struct _reent *r, wchar_t *pwc, const char *s, size_t n,
- const char *charset, mbstate_t *state)
-{
- /* See comment in __eucjp_wctomb above. */
- wchar_t dummy;
- int ret = 0;
-
- if (s == NULL)
- return 0; /* not state-dependent */
-
- if (n == 0)
- return -2;
-
- if (pwc == NULL)
- pwc = &dummy;
-
- if (state->__count == 0)
- {
- if (*(unsigned char *) s < 0x80)
- {
- *pwc = *(unsigned char *) s;
- return *s ? 1 : 0;
- }
- if (*(unsigned char *) s == 0x8f) /* JIS-X-0212 lead byte? */
- {
- /* Yes. Store sequence in mbstate and handle in the __count != 0
- case at the end of the function. */
- size_t i;
- for (i = 0; i < 3 && i < n; i++)
- state->__value.__wchb[i] = s[i];
- if ((state->__count = i) < 3) /* Incomplete sequence? */
- return -2;
- ret = 3;
- goto jis_x_0212;
- }
- size_t cnt = MIN (n, 2);
- if (MultiByteToWideChar (20932, MB_ERR_INVALID_CHARS, s, cnt, pwc, 1))
- return cnt;
- if (n == 1)
- {
- state->__count = 1;
- state->__value.__wchb[0] = *s;
- return -2;
- }
- else if (MultiByteToWideChar (20932, MB_ERR_INVALID_CHARS, s, 1, pwc, 1))
- return 1;
- r->_errno = EILSEQ;
- return -1;
- }
- state->__value.__wchb[state->__count++] = *s;
- ret = 1;
-jis_x_0212:
- if (state->__value.__wchb[0] == 0x8f)
- {
- if (state->__count == 2)
- {
- if (n == 1)
- return -2;
- state->__value.__wchb[state->__count] = s[1];
- ret = 2;
- }
- /* Ok, we have a full JIS-X-0212 sequence in mbstate. Convert it
- to the CP 20932 representation and feed it to MultiByteToWideChar. */
- state->__value.__wchb[0] = state->__value.__wchb[1];
- state->__value.__wchb[1] = state->__value.__wchb[2] & 0x7f;
- }
- if (!MultiByteToWideChar (20932, MB_ERR_INVALID_CHARS,
- (const char *) state->__value.__wchb, 2, pwc, 1))
- {
- r->_errno = EILSEQ;
- return -1;
- }
- state->__count = 0;
- return ret;
-}
-
-extern "C" int
-__gbk_mbtowc (struct _reent *r, wchar_t *pwc, const char *s, size_t n,
- const char *charset, mbstate_t *state)
-{
- return __db_mbtowc (r, pwc, s, n, 936, state);
-}
-
-extern "C" int
-__kr_mbtowc (struct _reent *r, wchar_t *pwc, const char *s, size_t n,
- const char *charset, mbstate_t *state)
-{
- return __db_mbtowc (r, pwc, s, n, 949, state);
-}
-
-extern "C" int
-__big5_mbtowc (struct _reent *r, wchar_t *pwc, const char *s, size_t n,
- const char *charset, mbstate_t *state)
-{
- return __db_mbtowc (r, pwc, s, n, 950, state);
-}
-
-/* Our own sys_wcstombs/sys_mbstowcs functions differ from the
- wcstombs/mbstowcs API in three ways:
-
- - The UNICODE private use area is used in filenames to specify
- characters not allowed in Windows filenames ('*', '?', etc).
- The sys_wcstombs converts characters in the private use area
- back to the corresponding ASCII chars.
-
- - If a wide character in a filename has no representation in the current
- multibyte charset, then usually you wouldn't be able to access the
- file. To fix this problem, sys_wcstombs creates a replacement multibyte
- sequences for the non-representable wide-char. The sequence starts with
- an ASCII CAN (0x18, Ctrl-X), followed by the UTF-8 representation of the
- character. The sys_(cp_)mbstowcs function detects ASCII CAN characters
- in the input multibyte string and converts the following multibyte
- sequence in by treating it as an UTF-8 char. If that fails, the ASCII
- CAN was probably standalone and it gets just copied over as ASCII CAN.
-
- - Three cases have to be distinguished for the return value:
-
- - dst == NULL; len is ignored, the return value is the number of bytes
- required for the string without the trailing NUL, just like the return
- value of the wcstombs function.
-
- - dst != NULL, len == (size_t) -1; the return value is the size in bytes
- of the destination string without the trailing NUL. If the incoming
- wide char string was not NUL-terminated, the target string won't be
- NUL-terminated either.
-
- - dst != NULL; len != (size_t) -1; the return value is the size in bytes
- of the destination string without the trailing NUL. The target string
- will be NUL-terminated, no matter what. If the result is truncated due
- to buffer size, it's a bug in Cygwin and the buffer in the calling
- function should be raised.
-*/
-size_t __reg3
-sys_cp_wcstombs (wctomb_p f_wctomb, const char *charset, char *dst, size_t len,
- const wchar_t *src, size_t nwc)
-{
- char buf[10];
- char *ptr = dst;
- wchar_t *pwcs = (wchar_t *) src;
- size_t n = 0;
- mbstate_t ps;
- save_errno save;
-
- memset (&ps, 0, sizeof ps);
- if (dst == NULL)
- len = (size_t) -1;
- while (n < len && nwc-- > 0)
- {
- wchar_t pw = *pwcs;
- int bytes;
- unsigned char cwc;
-
- /* Convert UNICODE private use area. Reverse functionality for the
- ASCII area <= 0x7f (only for path names) is transform_chars above.
- Reverse functionality for invalid bytes in a multibyte sequence is
- in sys_cp_mbstowcs below. */
- if ((pw & 0xff00) == 0xf000
- && (((cwc = (pw & 0xff)) <= 0x7f && tfx_rev_chars[cwc] >= 0xf000)
- || (cwc >= 0x80 && MB_CUR_MAX > 1)))
- {
- buf[0] = (char) cwc;
- bytes = 1;
- }
- else
- {
- bytes = f_wctomb (_REENT, buf, pw, charset, &ps);
- if (bytes == -1 && *charset != 'U'/*TF-8*/)
- {
- /* Convert chars invalid in the current codepage to a sequence
- ASCII CAN; UTF-8 representation of invalid char. */
- buf[0] = 0x18; /* ASCII CAN */
- bytes = __utf8_wctomb (_REENT, buf + 1, pw, charset, &ps);
- if (bytes == -1)
- {
- ++pwcs;
- ps.__count = 0;
- continue;
- }
- ++bytes; /* Add the ASCII CAN to the byte count. */
- if (ps.__count == -4 && nwc > 0)
- {
- /* First half of a surrogate pair. */
- ++pwcs;
- if ((*pwcs & 0xfc00) != 0xdc00) /* Invalid second half. */
- {
- ++pwcs;
- ps.__count = 0;
- continue;
- }
- bytes += __utf8_wctomb (_REENT, buf + bytes, *pwcs, charset,
- &ps);
- nwc--;
- }
- }
- }
- if (n + bytes <= len)
- {
- n += bytes;
- if (dst)
- {
- for (int i = 0; i < bytes; ++i)
- *ptr++ = buf[i];
- }
- if (*pwcs++ == 0x00)
- break;
- }
- else
- break;
- }
- if (n && dst && len != (size_t) -1)
- {
- n = (n < len) ? n : len - 1;
- dst[n] = '\0';
- }
-
- return n;
-}
-
-size_t __reg3
-sys_wcstombs (char *dst, size_t len, const wchar_t * src, size_t nwc)
-{
- return sys_cp_wcstombs (cygheap->locale.wctomb, cygheap->locale.charset,
- dst, len, src, nwc);
-}
-
-/* Allocate a buffer big enough for the string, always including the
- terminating '\0'. The buffer pointer is returned in *dst_p, the return
- value is the number of bytes written to the buffer, as usual.
- The "type" argument determines where the resulting buffer is stored.
- It's either one of the cygheap_types values, or it's "HEAP_NOTHEAP".
- In the latter case the allocation uses simple calloc.
-
- Note that this code is shared by cygserver (which requires it via
- __small_vsprintf) and so when built there plain calloc is the
- only choice. */
-size_t __reg3
-sys_wcstombs_alloc (char **dst_p, int type, const wchar_t *src, size_t nwc)
-{
- size_t ret;
-
- ret = sys_wcstombs (NULL, (size_t) -1, src, nwc);
- if (ret > 0)
- {
- size_t dlen = ret + 1;
-
- if (type == HEAP_NOTHEAP)
- *dst_p = (char *) calloc (dlen, sizeof (char));
- else
- *dst_p = (char *) ccalloc ((cygheap_types) type, dlen, sizeof (char));
- if (!*dst_p)
- return 0;
- ret = sys_wcstombs (*dst_p, dlen, src, nwc);
- }
- return ret;
-}
-
-/* sys_cp_mbstowcs is actually most of the time called as sys_mbstowcs with
- a 0 codepage. If cp is not 0, the codepage is evaluated and used for the
- conversion. This is so that fhandler_console can switch to an alternate
- charset, which is the charset returned by GetConsoleCP (). Most of the
- time this is used for box and line drawing characters. */
-size_t __reg3
-sys_cp_mbstowcs (mbtowc_p f_mbtowc, const char *charset, wchar_t *dst,
- size_t dlen, const char *src, size_t nms)
-{
- wchar_t *ptr = dst;
- unsigned const char *pmbs = (unsigned const char *) src;
- size_t count = 0;
- size_t len = dlen;
- int bytes;
- mbstate_t ps;
- save_errno save;
-
- memset (&ps, 0, sizeof ps);
- if (dst == NULL)
- len = (size_t)-1;
- while (len > 0 && nms > 0)
- {
- /* ASCII CAN handling. */
- if (*pmbs == 0x18)
- {
- /* Sanity check: If this is a lead CAN byte for a following UTF-8
- sequence, there must be at least two more bytes left, and the
- next byte must be a valid UTF-8 start byte. If the charset
- isn't UTF-8 anyway, try to convert the following bytes as UTF-8
- sequence. */
- if (nms > 2 && pmbs[1] >= 0xc2 && pmbs[1] <= 0xf4 && *charset != 'U'/*TF-8*/)
- {
- bytes = __utf8_mbtowc (_REENT, ptr, (const char *) pmbs + 1,
- nms - 1, charset, &ps);
- if (bytes < 0)
- {
- /* Invalid UTF-8 sequence? Treat the ASCII CAN character as
- stand-alone ASCII CAN char. */
- bytes = 1;
- if (dst)
- *ptr = 0x18;
- memset (&ps, 0, sizeof ps);
- }
- else
- {
- ++bytes; /* Count CAN byte */
- if (bytes > 1 && ps.__count == 4)
- {
- /* First half of a surrogate. */
- wchar_t *ptr2 = dst ? ptr + 1 : NULL;
- int bytes2 = __utf8_mbtowc (_REENT, ptr2,
- (const char *) pmbs + bytes,
- nms - bytes, charset, &ps);
- if (bytes2 < 0)
- memset (&ps, 0, sizeof ps);
- else
- {
- bytes += bytes2;
- ++count;
- ptr = dst ? ptr + 1 : NULL;
- --len;
- }
- }
- }
- }
- /* Otherwise it's just a simple ASCII CAN. */
- else
- {
- bytes = 1;
- if (dst)
- *ptr = 0x18;
- }
- }
- else if ((bytes = f_mbtowc (_REENT, ptr, (const char *) pmbs, nms,
- charset, &ps)) < 0)
- {
- /* The technique is based on a discussion here:
- http://www.mail-archive.com/linux-utf8@nl.linux.org/msg00080.html
-
- Invalid bytes in a multibyte secuence are converted to
- the private use area which is already used to store ASCII
- chars invalid in Windows filenames. This technque allows
- to store them in a symmetric way. */
- bytes = 1;
- if (dst)
- *ptr = L'\xf000' | *pmbs;
- memset (&ps, 0, sizeof ps);
- }
-
- if (bytes > 0)
- {
- pmbs += bytes;
- nms -= bytes;
- ++count;
- ptr = dst ? ptr + 1 : NULL;
- --len;
- }
- else
- {
- if (bytes == 0)
- ++count;
- break;
- }
- }
-
- if (count && dst)
- {
- count = (count < dlen) ? count : dlen - 1;
- dst[count] = L'\0';
- }
-
- return count;
-}
-
-size_t __reg3
-sys_mbstowcs (wchar_t * dst, size_t dlen, const char *src, size_t nms)
-{
- return sys_cp_mbstowcs (cygheap->locale.mbtowc, cygheap->locale.charset,
- dst, dlen, src, nms);
-}
-
-/* Same as sys_wcstombs_alloc, just backwards. */
-size_t __reg3
-sys_mbstowcs_alloc (wchar_t **dst_p, int type, const char *src, size_t nms)
-{
- size_t ret;
-
- ret = sys_mbstowcs (NULL, (size_t) -1, src, nms);
- if (ret > 0)
- {
- size_t dlen = ret + 1;
-
- if (type == HEAP_NOTHEAP)
- *dst_p = (wchar_t *) calloc (dlen, sizeof (wchar_t));
- else
- *dst_p = (wchar_t *) ccalloc ((cygheap_types) type, dlen,
- sizeof (wchar_t));
- if (!*dst_p)
- return 0;
- ret = sys_mbstowcs (*dst_p, dlen, src, nms);
- }
- return ret;
-}
-
-/* Copy string, until c or <nul> is encountered.
- NUL-terminate the destination string (s1).
- Return pointer to terminating byte in dst string. */
-char * __stdcall
-strccpy (char *__restrict s1, const char **__restrict s2, char c)
-{
- while (**s2 && **s2 != c)
- *s1++ = *((*s2)++);
- *s1 = 0;
-
- MALLOC_CHECK;
- return s1;
-}
-
-static WCHAR hex_wchars[] = L"0123456789abcdef";
-
-NTSTATUS NTAPI
-RtlInt64ToHexUnicodeString (ULONGLONG value, PUNICODE_STRING dest,
- BOOLEAN append)
-{
- USHORT len = append ? dest->Length : 0;
- if (dest->MaximumLength - len < 16 * (int) sizeof (WCHAR))
- return STATUS_BUFFER_OVERFLOW;
- wchar_t *end = (PWCHAR) ((PBYTE) dest->Buffer + len);
- register PWCHAR p = end + 16;
- while (p-- > end)
- {
- *p = hex_wchars[value & 0xf];
- value >>= 4;
- }
- dest->Length += 16 * sizeof (WCHAR);
- return STATUS_SUCCESS;
-}
diff --git a/winsup/cygwin/string.h b/winsup/cygwin/string.h
deleted file mode 100644
index 3b8d564c4..000000000
--- a/winsup/cygwin/string.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/* string.h: Extra string defs
-
- Copyright 2001, 2002, 2003, 2007, 2008, 2011, 2012, 2013 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _CYGWIN_STRING_H
-#define _CYGWIN_STRING_H
-
-#include_next <string.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#undef strchrnul
-#define strchrnul cygwin_strchrnul
-static inline __stdcall char *
-strchrnul (const char *s, int c)
-{
- while (*s != (char) c && *s != 0)
- ++s;
- return (char *) s;
-}
-
-#ifdef __INSIDE_CYGWIN__
-
-extern const char isalpha_array[];
-
-static inline int
-ascii_strcasematch (const char *cs, const char *ct)
-{
- register const unsigned char *us, *ut;
-
- us = (const unsigned char *) cs;
- ut = (const unsigned char *) ct;
-
- while (us[0] == ut[0] || (us[0] ^ isalpha_array[us[0]]) == ut[0])
- {
- if (us[0] == 0)
- return 1;
- ++us, ++ut;
- }
- return 0;
-}
-
-static inline int
-ascii_strncasematch (const char *cs, const char *ct, size_t n)
-{
- register const unsigned char *us, *ut;
-
- if (!n)
- return 1;
- us = (const unsigned char *) cs;
- ut = (const unsigned char *) ct;
-
- while (us[0] == ut[0] || (us[0] ^ isalpha_array[us[0]]) == ut[0])
- {
- --n;
- if (!n || us[0] == 0)
- return 1;
- ++us, ++ut;
- }
- return 0;
-}
-
-#undef strcasecmp
-#define strcasecmp cygwin_strcasecmp
-int __stdcall cygwin_strcasecmp (const char *, const char *);
-
-#undef strncasecmp
-#define strncasecmp cygwin_strncasecmp
-int __stdcall cygwin_strncasecmp (const char *, const char *, size_t);
-
-#define strcasematch(s1,s2) (!cygwin_strcasecmp ((s1),(s2)))
-#define strncasematch(s1,s2,n) (!cygwin_strncasecmp ((s1),(s2),(n)))
-
-char *strlwr (char *);
-char *strupr (char *);
-
-#endif /* __INSIDE_CYGWIN__ */
-
-char *__stdcall strccpy (char *__restrict s1, const char **__restrict s2,
- char c);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _CYGWIN_STRING_H */
diff --git a/winsup/cygwin/strsep.cc b/winsup/cygwin/strsep.cc
deleted file mode 100644
index f03df3d94..000000000
--- a/winsup/cygwin/strsep.cc
+++ /dev/null
@@ -1,64 +0,0 @@
-/* strsep.cc: strsep call */
-
-#include <stdio.h>
-
-/*-
- * Copyright (c) 1990, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-extern "C" char *
-strsep (char **stringp,
- const char *delim)
-{
- register char *s;
- register const char *spanp;
- register int c, sc;
- char *tok;
-
- if ((s = *stringp) == NULL)
- return (NULL);
- for (tok = s;;) {
- c = *s++;
- spanp = delim;
- do {
- if ((sc = *spanp++) == c) {
- if (c == 0)
- s = NULL;
- else
- s[-1] = 0;
- *stringp = s;
- return (tok);
- }
- } while (sc != 0);
- }
- /* NOTREACHED */
-}
diff --git a/winsup/cygwin/strsig.cc b/winsup/cygwin/strsig.cc
deleted file mode 100644
index 987e13549..000000000
--- a/winsup/cygwin/strsig.cc
+++ /dev/null
@@ -1,186 +0,0 @@
-/* strsig.cc
-
- Copyright 2004, 2007, 2008, 2010, 2011, 2013 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include <cygtls.h>
-#include <stdio.h>
-#include <string.h>
-
-struct sigdesc
-{
- int n;
- const char *name;
- const char *str;
-};
-
-#define __signals_common \
- _s(SIGHUP, "Hangup"), /* 1 */ \
- _s(SIGINT, "Interrupt"), /* 2 */ \
- _s(SIGQUIT, "Quit"), /* 3 */ \
- _s(SIGILL, "Illegal instruction"), /* 4 */ \
- _s(SIGTRAP, "Trace/breakpoint trap"), /* 5 */ \
- _s(SIGABRT, "Aborted"), /* 6 */ \
- _s(SIGEMT, "EMT instruction"), /* 7 */ \
- _s(SIGFPE, "Floating point exception"), /* 8 */ \
- _s(SIGKILL, "Killed"), /* 9 */ \
- _s(SIGBUS, "Bus error"), /* 10 */ \
- _s(SIGSEGV, "Segmentation fault"), /* 11 */ \
- _s(SIGSYS, "Bad system call"), /* 12 */ \
- _s(SIGPIPE, "Broken pipe"), /* 13 */ \
- _s(SIGALRM, "Alarm clock"), /* 14 */ \
- _s(SIGTERM, "Terminated"), /* 15 */ \
- _s(SIGURG, "Urgent I/O condition"), /* 16 */ \
- _s(SIGSTOP, "Stopped (signal)"), /* 17 */ \
- _s(SIGTSTP, "Stopped"), /* 18 */ \
- _s(SIGCONT, "Continued"), /* 19 */ \
- _s2(SIGCHLD, "Child exited", /* 20 */ \
- SIGCLD, "Child exited"), \
- _s(SIGTTIN, "Stopped (tty input)"), /* 21 */ \
- _s(SIGTTOU, "Stopped (tty output)"), /* 22 */ \
- _s2(SIGIO, "I/O possible", /* 23 */ \
- SIGPOLL, "I/O possible"), \
- _s(SIGXCPU, "CPU time limit exceeded"), /* 24 */ \
- _s(SIGXFSZ, "File size limit exceeded"), /* 25 */ \
- _s(SIGVTALRM, "Virtual timer expired"), /* 26 */ \
- _s(SIGPROF, "Profiling timer expired"), /* 27 */ \
- _s(SIGWINCH, "Window changed"), /* 28 */ \
- _s2(SIGPWR, "Power failure", /* 29 */ \
- SIGLOST, "Resource lost"), \
- _s(SIGUSR1, "User defined signal 1"), /* 30 */ \
- _s(SIGUSR2, "User defined signal 2"), /* 31 */
-
-#ifdef __x86_64__
-# define __signals \
- __signals_common \
- _s(SIGRTMIN, "Real-time signal 0"), /* 32 */ \
- _s(SIGRTMIN + 1, "Real-time signal 1"), /* 33 */ \
- _s(SIGRTMIN + 2, "Real-time signal 2"), /* 34 */ \
- _s(SIGRTMIN + 3, "Real-time signal 3"), /* 35 */ \
- _s(SIGRTMIN + 4, "Real-time signal 4"), /* 36 */ \
- _s(SIGRTMIN + 5, "Real-time signal 5"), /* 37 */ \
- _s(SIGRTMIN + 6, "Real-time signal 6"), /* 38 */ \
- _s(SIGRTMIN + 7, "Real-time signal 7"), /* 39 */ \
- _s(SIGRTMIN + 8, "Real-time signal 8"), /* 40 */ \
- _s(SIGRTMIN + 9, "Real-time signal 9"), /* 41 */ \
- _s(SIGRTMIN + 10, "Real-time signal 10"), /* 42 */ \
- _s(SIGRTMIN + 11, "Real-time signal 11"), /* 43 */ \
- _s(SIGRTMIN + 12, "Real-time signal 12"), /* 44 */ \
- _s(SIGRTMIN + 13, "Real-time signal 13"), /* 45 */ \
- _s(SIGRTMIN + 14, "Real-time signal 14"), /* 46 */ \
- _s(SIGRTMIN + 15, "Real-time signal 15"), /* 47 */ \
- _s(SIGRTMIN + 16, "Real-time signal 16"), /* 48 */ \
- _s(SIGRTMIN + 17, "Real-time signal 17"), /* 49 */ \
- _s(SIGRTMIN + 18, "Real-time signal 18"), /* 50 */ \
- _s(SIGRTMIN + 19, "Real-time signal 19"), /* 51 */ \
- _s(SIGRTMIN + 20, "Real-time signal 20"), /* 52 */ \
- _s(SIGRTMIN + 21, "Real-time signal 21"), /* 53 */ \
- _s(SIGRTMIN + 22, "Real-time signal 22"), /* 54 */ \
- _s(SIGRTMIN + 23, "Real-time signal 23"), /* 55 */ \
- _s(SIGRTMIN + 24, "Real-time signal 24"), /* 56 */ \
- _s(SIGRTMIN + 25, "Real-time signal 25"), /* 57 */ \
- _s(SIGRTMIN + 26, "Real-time signal 26"), /* 58 */ \
- _s(SIGRTMIN + 27, "Real-time signal 27"), /* 59 */ \
- _s(SIGRTMIN + 28, "Real-time signal 28"), /* 60 */ \
- _s(SIGRTMIN + 29, "Real-time signal 29"), /* 61 */ \
- _s(SIGRTMIN + 30, "Real-time signal 30"), /* 62 */ \
- _s(SIGRTMIN + 31, "Real-time signal 31"), /* 63 */ \
- _s(SIGRTMAX, "Real-time signal 32") /* 64 */
-#else
-# define __signals \
- __signals_common \
- _s2(SIGRTMIN, "Real-time signal 0", /* 32 */ \
- SIGRTMAX, "Real-time signal 0")
-#endif
-
-#define _s(n, s) #n
-#define _s2(n, s, n1, s1) #n
-const char *sys_sigabbrev[] =
-{
- NULL,
- __signals
-};
-
-#undef _s
-#undef _s2
-#define _s(n, s) s
-#define _s2(n, s, n1, s1) s
-const char *sys_siglist[] =
-{
- NULL,
- __signals
-};
-
-#undef _s
-#undef _s2
-#define _s(n, s) {n, #n, s}
-#define _s2(n, s, n1, s1) {n, #n, s}, {n, #n1, #s1}
-static const sigdesc siglist[] =
-{
- __signals,
- {0, NULL, NULL}
-};
-
-extern "C" char *
-strsignal (int signo)
-{
- const char *sigstring = "Unknown signal %d";
- for (int i = 0; siglist[i].n; i++)
- if (siglist[i].n == signo)
- {
- sigstring = siglist[i].str;
- break;
- }
- __small_sprintf (_my_tls.locals.signamebuf, sigstring, signo);
- return _my_tls.locals.signamebuf;
-}
-
-extern "C" int
-strtosigno (const char *name)
-{
- for (int i = 0; siglist[i].n; i++)
- if (strcmp (siglist[i].name, name) == 0)
- return siglist[i].n;
- return 0;
-}
-
-extern "C" void
-psiginfo (const siginfo_t *info, const char *s)
-{
- if (s != NULL && *s != '\0')
- fprintf (stderr, "%s: ", s);
-
- fprintf (stderr, "%s", strsignal (info->si_signo));
-
- if (info->si_signo > 0 && info->si_signo < NSIG)
- {
- switch (info->si_signo)
- {
- case SIGILL:
- case SIGBUS:
- case SIGFPE:
- case SIGSEGV:
- fprintf (stderr, " (%d [%p])", info->si_code, info->si_addr);
- break;
- case SIGCHLD:
- fprintf (stderr, " (%d %d %d %u)", info->si_code, info->si_pid,
- info->si_status, info->si_uid);
- break;
-/* FIXME: implement si_band
- case SIGPOLL:
- fprintf (stderr, " (%d %ld)", info->si_code, info->si_band);
- break;
-*/
- default:
- fprintf (stderr, " (%d %d %u)", info->si_code, info->si_pid, info->si_uid);
- }
- }
-
- fprintf (stderr, "\n");
-}
diff --git a/winsup/cygwin/sync.cc b/winsup/cygwin/sync.cc
deleted file mode 100644
index 821c214f7..000000000
--- a/winsup/cygwin/sync.cc
+++ /dev/null
@@ -1,145 +0,0 @@
-/* sync.cc: Synchronization functions for cygwin.
-
- This file implements the methods for controlling the "muto" class
- which is intended to operate similarly to a mutex but attempts to
- avoid making expensive calls to the kernel.
-
- Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2008, 2009, 2010, 2011, 2012
- Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include "miscfuncs.h"
-#include "sync.h"
-#include "thread.h"
-#include "cygtls.h"
-
-#undef WaitForSingleObject
-
-muto NO_COPY lock_process::locker;
-
-void
-muto::grab ()
-{
- tls = &_my_tls;
-}
-
-/* Constructor */
-muto *
-muto::init (const char *s)
-{
- char *already_exists = (char *) InterlockedExchangePointer ((PVOID *) &name,
- (PVOID) s);
- if (already_exists)
- while (!bruteforce)
- yield ();
- else
- {
- waiters = -1;
- /* Create event which is used in the fallback case when blocking is necessary */
- bruteforce = CreateEvent (&sec_none_nih, FALSE, FALSE, NULL);
- if (!bruteforce)
- api_fatal ("couldn't allocate muto '%s', %E", s);
- }
-
- return this;
-}
-
-#if 0 /* FIXME: Do we need this? mutos aren't destroyed until process exit */
-/* Destructor (racy?) */
-muto::~muto ()
-{
- while (visits)
- release ();
-
- HANDLE h = bruteforce;
- bruteforce = NULL;
- /* Just need to close the event handle */
- if (h)
- CloseHandle (h);
-}
-#endif
-
-/* Acquire the lock. Argument is the number of milliseconds to wait for
- the lock. Multiple visits from the same thread are allowed and should
- be handled correctly.
-
- Note: The goal here is to minimize, as much as possible, calls to the
- OS. Hence the use of InterlockedIncrement, etc., rather than (much) more
- expensive OS mutexes. */
-int
-muto::acquire (DWORD ms)
-{
- void *this_tls = &_my_tls;
-
- if (tls != this_tls)
- {
- /* Increment the waiters part of the class. Need to do this first to
- avoid potential races. */
- LONG was_waiting = ms ? InterlockedIncrement (&waiters) : 0;
-
- while (was_waiting || InterlockedExchange (&sync, 1) != 0)
- switch (WaitForSingleObject (bruteforce, ms))
- {
- case WAIT_OBJECT_0:
- was_waiting = 0;
- break;
- default:
- return 0; /* failed. */
- }
-
- /* Have to do it this way to avoid a race */
- if (!ms)
- InterlockedIncrement (&waiters);
-
- tls = this_tls; /* register this thread. */
- }
-
- return ++visits; /* Increment visit count. */
-}
-
-bool
-muto::acquired ()
-{
- return tls == &_my_tls;
-}
-
-/* Return the muto lock. Needs to be called once per every acquire. */
-int
-muto::release (_cygtls *this_tls)
-{
- if (tls != this_tls || !visits)
- {
- SetLastError (ERROR_NOT_OWNER); /* Didn't have the lock. */
- return 0; /* failed. */
- }
-
- /* FIXME: Need to check that other thread has not exited, too. */
- if (!--visits)
- {
- tls = 0; /* We were the last unlocker. */
- InterlockedExchange (&sync, 0); /* Reset trigger. */
- /* This thread had incremented waiters but had never decremented it.
- Decrement it now. If it is >= 0 then there are possibly other
- threads waiting for the lock, so trigger bruteforce. */
- if (InterlockedDecrement (&waiters) >= 0)
- SetEvent (bruteforce); /* Wake up one of the waiting threads */
- else if (*name == '!')
- {
- CloseHandle (bruteforce); /* If *name == '!' and there are no
- other waiters, then this is the
- last time this muto will ever be
- used, so close the handle. */
-#ifdef DEBUGGING
- bruteforce = NULL;
-#endif
- }
- }
-
- return 1; /* success. */
-}
diff --git a/winsup/cygwin/sync.h b/winsup/cygwin/sync.h
deleted file mode 100644
index ebfccab45..000000000
--- a/winsup/cygwin/sync.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/* sync.h: Header file for cygwin synchronization primitives.
-
- Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2010, 2011,
- 2012, 2013 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#pragma once
-
-/* FIXME: Note that currently this class cannot be allocated via `new' since
- there are issues with malloc and fork. */
-class muto
-{
-public:
- char *name;
-private:
- LONG sync; /* Used to serialize access to this class. */
- LONG waiters; /* Number of threads waiting for lock. */
- HANDLE bruteforce; /* event handle used to control waiting for lock. */
-public:
- LONG visits; /* Count of number of times a thread has called acquire. */
- void *tls; /* Tls of lock owner. */
- // class muto *next;
-
- /* The real constructor. */
- muto __reg2 *init (const char *);
-
-#if 0 /* FIXME: See comment in sync.cc */
- ~muto ()
-#endif
- int __reg2 acquire (DWORD ms = INFINITE); /* Acquire the lock. */
- int __reg2 release (_cygtls * = &_my_tls); /* Release the lock. */
-
- bool __reg1 acquired ();
- void upforgrabs () {tls = this;} // just set to an invalid address
- void __reg1 grab ();
- operator int () const {return !!name;}
-};
-
-class lock_process
-{
- bool skip_unlock;
- static muto locker;
-public:
- static void init () {locker.init ("lock_process");}
- void dont_bother () {skip_unlock = true;}
- lock_process (bool exiting = false)
- {
- locker.acquire ();
- skip_unlock = exiting;
- }
- void release ()
- {
- locker.release ();
- skip_unlock = true;
- }
- ~lock_process ()
- {
- if (!skip_unlock)
- release ();
- }
- operator LONG () const {return locker.visits; }
- static void force_release (_cygtls *tid) {locker.release (tid);}
- friend class dtable;
- friend class fhandler_fifo;
-};
diff --git a/winsup/cygwin/syscalls.cc b/winsup/cygwin/syscalls.cc
deleted file mode 100644
index 9890db4f2..000000000
--- a/winsup/cygwin/syscalls.cc
+++ /dev/null
@@ -1,4853 +0,0 @@
-/* syscalls.cc: syscalls
-
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#define fstat __FOOfstat__
-#define lstat __FOOlstat__
-//#define stat __FOOstat__
-#define _close __FOO_close__
-#define _lseek __FOO_lseek__
-#define _open __FOO_open__
-#define _read __FOO_read__
-#define _write __FOO_write__
-#define _open64 __FOO_open64__
-#define _lseek64 __FOO_lseek64__
-#define _fstat64 __FOO_fstat64__
-#define pread __FOO_pread
-#define pwrite __FOO_pwrite
-
-#include "winsup.h"
-#include "miscfuncs.h"
-#include <sys/stat.h>
-#include <sys/vfs.h> /* needed for statfs */
-#include <sys/statvfs.h> /* needed for statvfs */
-#include <stdlib.h>
-#include <stdio.h>
-#include <process.h>
-#include <utmp.h>
-#include <utmpx.h>
-#include <sys/uio.h>
-#include <ctype.h>
-#include <wctype.h>
-#include <unistd.h>
-#include <sys/wait.h>
-#include <dirent.h>
-#include "ntdll.h"
-
-#undef fstat
-#undef lstat
-//#undef stat
-#undef pread
-#undef pwrite
-
-#include <cygwin/version.h>
-#include "cygerrno.h"
-#include "perprocess.h"
-#include "security.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "sigproc.h"
-#include "pinfo.h"
-#include "shared_info.h"
-#include "cygheap.h"
-#include "registry.h"
-#include "environ.h"
-#include "tls_pbuf.h"
-#include "sync.h"
-#include "child_info.h"
-
-#undef _close
-#undef _lseek
-#undef _open
-#undef _read
-#undef _write
-#undef _open64
-#undef _lseek64
-#undef _fstat64
-
-static int __stdcall mknod_worker (const char *, mode_t, mode_t, _major_t,
- _minor_t);
-
-/* Close all files and process any queued deletions.
- Lots of unix style applications will open a tmp file, unlink it,
- but never call close. This function is called by _exit to
- ensure we don't leave any such files lying around. */
-
-void __stdcall
-close_all_files (bool norelease)
-{
- cygheap->fdtab.lock ();
-
- semaphore::terminate ();
-
- HANDLE h = NULL;
-
- for (int i = 0; i < (int) cygheap->fdtab.size; i++)
- {
- cygheap_fdget cfd (i, false, false);
- if (cfd >= 0)
- {
- debug_only_printf ("closing fd %d", i);
- if (i == 2)
- DuplicateHandle (GetCurrentProcess (), cfd->get_output_handle (),
- GetCurrentProcess (), &h,
- 0, false, DUPLICATE_SAME_ACCESS);
- cfd->close_with_arch ();
- if (!norelease)
- cfd.release ();
- }
- }
-
- if (!have_execed && cygheap->ctty)
- cygheap->close_ctty ();
-
- fhandler_base_overlapped::flush_all_async_io ();
- if (h)
- SetStdHandle (STD_ERROR_HANDLE, h);
- cygheap->fdtab.unlock ();
-}
-
-extern "C" int
-dup (int fd)
-{
- int res;
- cygheap_fdnew newfd;
- if (newfd < 0)
- res = -1;
- else
- res = cygheap->fdtab.dup3 (fd, newfd, 0);
- syscall_printf ("%R = dup(%d)", res, fd);
- return res;
-}
-
-inline int
-dup_finish (int oldfd, int newfd, int flags)
-{
- int res;
- if ((res = cygheap->fdtab.dup3 (oldfd, newfd, flags | O_EXCL)) == newfd)
- {
- cygheap_fdget (newfd)->inc_refcnt ();
- cygheap->fdtab.unlock (); /* dup3 exits with lock set on success */
- }
- return res;
-}
-
-extern "C" int
-dup2 (int oldfd, int newfd)
-{
- int res;
- if (newfd >= OPEN_MAX_MAX || newfd < 0)
- {
- set_errno (EBADF);
- res = -1;
- }
- else if (newfd == oldfd)
- {
- cygheap_fdget cfd (oldfd);
- res = (cfd >= 0) ? oldfd : -1;
- }
- else
- res = dup_finish (oldfd, newfd, 0);
-
- syscall_printf ("%R = dup2(%d, %d)", res, oldfd, newfd);
- return res;
-}
-
-extern "C" int
-dup3 (int oldfd, int newfd, int flags)
-{
- int res;
- if (newfd >= OPEN_MAX_MAX)
- {
- set_errno (EBADF);
- res = -1;
- }
- else if (newfd == oldfd)
- {
- cygheap_fdget cfd (oldfd, false, false);
- set_errno (cfd < 0 ? EBADF : EINVAL);
- res = -1;
- }
- else
- res = dup_finish (oldfd, newfd, flags);
-
- syscall_printf ("%R = dup3(%d, %d, %y)", res, oldfd, newfd, flags);
- return res;
-}
-
-/* Define macro to simplify checking for a transactional error code. */
-#define NT_TRANSACTIONAL_ERROR(s) \
- (((ULONG)(s) >= (ULONG)STATUS_TRANSACTIONAL_CONFLICT) \
- && ((ULONG)(s) <= (ULONG)STATUS_TRANSACTION_NOT_ENLISTED))
-
-static inline void
-start_transaction (HANDLE &old_trans, HANDLE &trans)
-{
- NTSTATUS status = NtCreateTransaction (&trans,
- SYNCHRONIZE | TRANSACTION_ALL_ACCESS,
- NULL, NULL, NULL, 0, 0, 0, NULL, NULL);
- if (NT_SUCCESS (status))
- {
- old_trans = RtlGetCurrentTransaction ();
- RtlSetCurrentTransaction (trans);
- }
- else
- {
- debug_printf ("NtCreateTransaction failed, %y", status);
- old_trans = trans = NULL;
- }
-}
-
-static inline NTSTATUS
-stop_transaction (NTSTATUS status, HANDLE old_trans, HANDLE &trans)
-{
- RtlSetCurrentTransaction (old_trans);
- if (NT_SUCCESS (status))
- status = NtCommitTransaction (trans, TRUE);
- else
- status = NtRollbackTransaction (trans, TRUE);
- NtClose (trans);
- trans = NULL;
- return status;
-}
-
-static char desktop_ini[] =
- "[.ShellClassInfo]\r\n"
- "CLSID={645FF040-5081-101B-9F08-00AA002F954E}\r\n";
-
-static char desktop_ini_ext[] =
- "LocalizedResourceName=@%SystemRoot%\\system32\\shell32.dll,-8964\r\n";
-
-static BYTE info2[] =
-{
- 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x20, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-};
-
-enum bin_status
-{
- dont_move,
- move_to_bin,
- has_been_moved,
- dir_not_empty
-};
-
-static bin_status
-try_to_bin (path_conv &pc, HANDLE &fh, ACCESS_MASK access, ULONG flags)
-{
- bin_status bin_stat = move_to_bin;
- NTSTATUS status;
- OBJECT_ATTRIBUTES attr;
- IO_STATUS_BLOCK io;
- HANDLE rootdir = NULL, recyclerdir = NULL, tmp_fh = NULL;
- USHORT recycler_base_len = 0, recycler_user_len = 0;
- UNICODE_STRING root, recycler, fname;
- WCHAR recyclerbuf[NAME_MAX + 1]; /* Enough for recycler + SID + filename */
- PFILE_NAME_INFORMATION pfni;
- PFILE_INTERNAL_INFORMATION pfii;
- PFILE_RENAME_INFORMATION pfri;
- ULONG frisiz;
- FILE_DISPOSITION_INFORMATION disp = { TRUE };
- bool fs_has_per_user_recycler = pc.fs_is_ntfs () || pc.fs_is_refs ();
-
- tmp_pathbuf tp;
- PBYTE infobuf = (PBYTE) tp.w_get ();
-
- pfni = (PFILE_NAME_INFORMATION) infobuf;
- status = NtQueryInformationFile (fh, &io, pfni, 65536, FileNameInformation);
- if (!NT_SUCCESS (status))
- {
- debug_printf ("NtQueryInformationFile (%S, FileNameInformation) "
- "failed, status = %y", pc.get_nt_native_path (), status);
- goto out;
- }
- /* The filename could change, the parent dir not. So we split both paths
- and take the prefix. However, there are two special cases:
- - The handle refers to the root dir of the volume.
- - The handle refers to the recycler or a subdir.
- Both cases are handled by just returning and not even trying to move
- them into the recycler. */
- if (pfni->FileNameLength == 2) /* root dir. */
- goto out;
- /* The recycler name on Vista and later is $Recycler.Bin by default. If the
- recycler dir disappeared for some reason, the shell32.dll recreates the
- directory in all upper case. So, we never know beforehand if the dir
- is written in mixed case or in all upper case. That's a problem when
- using casesensitivity. If the file handle given to FileRenameInformation
- has been opened casesensitive, the call also handles the path to the
- target dir casesensitive. Rather then trying to find the right name
- of the recycler, we just reopen the file to move with OBJ_CASE_INSENSITIVE,
- so the subsequent FileRenameInformation works caseinsensitive in terms of
- the recycler directory name, too. */
- if (!pc.objcaseinsensitive ())
- {
- InitializeObjectAttributes (&attr, &ro_u_empty, OBJ_CASE_INSENSITIVE,
- fh, NULL);
- status = NtOpenFile (&tmp_fh, access, &attr, &io, FILE_SHARE_VALID_FLAGS,
- flags);
- if (!NT_SUCCESS (status))
- debug_printf ("NtOpenFile (%S) for reopening caseinsensitive failed, "
- "status = %y", pc.get_nt_native_path (), status);
- else
- {
- NtClose (fh);
- fh = tmp_fh;
- }
- }
- /* Initialize recycler path. */
- RtlInitEmptyUnicodeString (&recycler, recyclerbuf, sizeof recyclerbuf);
- if (!pc.isremote ())
- {
- if (wincap.has_recycle_dot_bin ()) /* NTFS and FAT since Vista, ReFS */
- RtlAppendUnicodeToString (&recycler, L"\\$Recycle.Bin\\");
- else if (pc.fs_is_ntfs ()) /* NTFS up to 2K3 */
- RtlAppendUnicodeToString (&recycler, L"\\RECYCLER\\");
- else if (pc.fs_is_fat ()) /* FAT up to 2K3 */
- RtlAppendUnicodeToString (&recycler, L"\\Recycled\\");
- else
- goto out;
- /* Is the file a subdir of the recycler? */
- RtlInitCountedUnicodeString(&fname, pfni->FileName, pfni->FileNameLength);
- if (RtlEqualUnicodePathPrefix (&fname, &recycler, TRUE))
- goto out;
- /* Is fname the recycler? Temporarily hide trailing backslash. */
- recycler.Length -= sizeof (WCHAR);
- if (RtlEqualUnicodeString (&fname, &recycler, TRUE))
- goto out;
-
- /* Create root dir path from file name information. */
- RtlSplitUnicodePath (&fname, &fname, NULL);
- RtlSplitUnicodePath (pc.get_nt_native_path (), &root, NULL);
- root.Length -= fname.Length - sizeof (WCHAR);
-
- /* Open root directory. All recycler bin ops are caseinsensitive. */
- InitializeObjectAttributes (&attr, &root, OBJ_CASE_INSENSITIVE,
- NULL, NULL);
- status = NtOpenFile (&rootdir, FILE_TRAVERSE, &attr, &io,
- FILE_SHARE_VALID_FLAGS, FILE_OPEN_FOR_BACKUP_INTENT);
- if (!NT_SUCCESS (status))
- {
- debug_printf ("NtOpenFile (%S) failed, status = %y", &root, status);
- goto out;
- }
-
- /* Strip leading backslash */
- ++recycler.Buffer;
- recycler.Length -= sizeof (WCHAR);
- /* Store length of recycler base dir, if it's necessary to create it. */
- recycler_base_len = recycler.Length;
- /* On NTFS or ReFS the recycler dir contains user specific subdirs, which
- are the actual recycle bins per user. The name if this dir is the
- string representation of the user SID. */
- if (fs_has_per_user_recycler)
- {
- UNICODE_STRING sid;
- WCHAR sidbuf[128];
- /* Unhide trailing backslash. */
- recycler.Length += sizeof (WCHAR);
- RtlInitEmptyUnicodeString (&sid, sidbuf, sizeof sidbuf);
- RtlConvertSidToUnicodeString (&sid, cygheap->user.sid (), FALSE);
- RtlAppendUnicodeStringToString (&recycler, &sid);
- recycler_user_len = recycler.Length;
- }
- RtlAppendUnicodeToString (&recycler, L"\\");
- }
- /* Create hopefully unique filename.
- Since we have to stick to the current directory on remote shares, make
- the new filename at least very unlikely to match by accident. It starts
- with ".cyg", with "cyg" transposed into the Unicode low surrogate area
- starting at U+dc00. Use plain ASCII chars on filesystems not supporting
- Unicode. The rest of the filename is the inode number in hex encoding
- and a hash of the full NT path in hex. The combination allows to remove
- multiple hardlinks to the same file. */
- RtlAppendUnicodeToString (&recycler,
- pc.fs_flags () & FILE_UNICODE_ON_DISK
- ? L".\xdc63\xdc79\xdc67" : L".cyg");
- pfii = (PFILE_INTERNAL_INFORMATION) infobuf;
- /* Note: Modern Samba versions apparently don't like buffer sizes of more
- than 65535 in some NtQueryInformationFile/NtSetInformationFile calls.
- Therefore we better use exact buffer sizes from now on. */
- status = NtQueryInformationFile (fh, &io, pfii, sizeof *pfii,
- FileInternalInformation);
- if (!NT_SUCCESS (status))
- {
- debug_printf ("NtQueryInformationFile (%S, FileInternalInformation) "
- "failed, status = %y", pc.get_nt_native_path (), status);
- goto out;
- }
- RtlInt64ToHexUnicodeString (pfii->FileId.QuadPart, &recycler, TRUE);
- RtlInt64ToHexUnicodeString (hash_path_name (0, pc.get_nt_native_path ()),
- &recycler, TRUE);
- /* Shoot. */
- pfri = (PFILE_RENAME_INFORMATION) infobuf;
- pfri->ReplaceIfExists = TRUE;
- pfri->RootDirectory = pc.isremote () ? NULL : rootdir;
- pfri->FileNameLength = recycler.Length;
- memcpy (pfri->FileName, recycler.Buffer, recycler.Length);
- frisiz = sizeof *pfri + pfri->FileNameLength - sizeof (WCHAR);
-
- status = NtSetInformationFile (fh, &io, pfri, frisiz, FileRenameInformation);
- if (status == STATUS_OBJECT_PATH_NOT_FOUND && !pc.isremote ())
- {
- /* Ok, so the recycler and/or the recycler/SID directory don't exist.
- First reopen root dir with permission to create subdirs. */
- NtClose (rootdir);
- InitializeObjectAttributes (&attr, &root, OBJ_CASE_INSENSITIVE,
- NULL, NULL);
- status = NtOpenFile (&rootdir, FILE_ADD_SUBDIRECTORY, &attr, &io,
- FILE_SHARE_VALID_FLAGS, FILE_OPEN_FOR_BACKUP_INTENT);
- if (!NT_SUCCESS (status))
- {
- debug_printf ("NtOpenFile (%S) failed, status = %y",
- &recycler, status);
- goto out;
- }
- /* Then check if recycler exists by opening and potentially creating it.
- Yes, we can really do that. Typically the recycle bin is created
- by the first user actually using the bin. Pre-Vista, the permissions
- are the default permissions propagated from the root directory.
- Since Vista the top-level recycle dir has explicit permissions. */
- InitializeObjectAttributes (&attr, &recycler, OBJ_CASE_INSENSITIVE,
- rootdir,
- wincap.has_recycle_dot_bin ()
- ? recycler_sd (true, true) : NULL);
- recycler.Length = recycler_base_len;
- status = NtCreateFile (&recyclerdir,
- READ_CONTROL
- | (fs_has_per_user_recycler ? 0 : FILE_ADD_FILE),
- &attr, &io, NULL,
- FILE_ATTRIBUTE_DIRECTORY
- | FILE_ATTRIBUTE_SYSTEM
- | FILE_ATTRIBUTE_HIDDEN,
- FILE_SHARE_VALID_FLAGS, FILE_OPEN_IF,
- FILE_DIRECTORY_FILE, NULL, 0);
- if (!NT_SUCCESS (status))
- {
- debug_printf ("NtCreateFile (%S) failed, status = %y",
- &recycler, status);
- goto out;
- }
- /* Next, if necessary, check if the recycler/SID dir exists and
- create it if not. */
- if (fs_has_per_user_recycler)
- {
- NtClose (recyclerdir);
- recycler.Length = recycler_user_len;
- InitializeObjectAttributes (&attr, &recycler, OBJ_CASE_INSENSITIVE,
- rootdir, recycler_sd (false, true));
- status = NtCreateFile (&recyclerdir, READ_CONTROL | FILE_ADD_FILE,
- &attr, &io, NULL, FILE_ATTRIBUTE_DIRECTORY
- | FILE_ATTRIBUTE_SYSTEM
- | FILE_ATTRIBUTE_HIDDEN,
- FILE_SHARE_VALID_FLAGS, FILE_OPEN_IF,
- FILE_DIRECTORY_FILE, NULL, 0);
- if (!NT_SUCCESS (status))
- {
- debug_printf ("NtCreateFile (%S) failed, status = %y",
- &recycler, status);
- goto out;
- }
- }
- /* The desktop.ini and INFO2 (pre-Vista) files are expected by
- Windows Explorer. Otherwise, the created bin is treated as
- corrupted */
- if (io.Information == FILE_CREATED)
- {
- RtlInitUnicodeString (&fname, L"desktop.ini");
- InitializeObjectAttributes (&attr, &fname, OBJ_CASE_INSENSITIVE,
- recyclerdir, recycler_sd (false, false));
- status = NtCreateFile (&tmp_fh, FILE_GENERIC_WRITE, &attr, &io, NULL,
- FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN,
- FILE_SHARE_VALID_FLAGS, FILE_CREATE,
- FILE_SYNCHRONOUS_IO_NONALERT
- | FILE_NON_DIRECTORY_FILE, NULL, 0);
- if (!NT_SUCCESS (status))
- debug_printf ("NtCreateFile (%S) failed, status = %y",
- &recycler, status);
- else
- {
- status = NtWriteFile (tmp_fh, NULL, NULL, NULL, &io, desktop_ini,
- sizeof desktop_ini - 1, NULL, NULL);
- if (!NT_SUCCESS (status))
- debug_printf ("NtWriteFile (%S) failed, status = %y",
- &fname, status);
- else if (wincap.has_recycle_dot_bin ())
- {
- status = NtWriteFile (tmp_fh, NULL, NULL, NULL, &io,
- desktop_ini_ext,
- sizeof desktop_ini_ext - 1, NULL, NULL);
- if (!NT_SUCCESS (status))
- debug_printf ("NtWriteFile (%S) failed, status = %y",
- &fname, status);
- }
- NtClose (tmp_fh);
- }
- if (!wincap.has_recycle_dot_bin ()) /* No INFO2 file since Vista */
- {
- RtlInitUnicodeString (&fname, L"INFO2");
- status = NtCreateFile (&tmp_fh, FILE_GENERIC_WRITE, &attr, &io,
- NULL, FILE_ATTRIBUTE_ARCHIVE
- | FILE_ATTRIBUTE_HIDDEN,
- FILE_SHARE_VALID_FLAGS, FILE_CREATE,
- FILE_SYNCHRONOUS_IO_NONALERT
- | FILE_NON_DIRECTORY_FILE, NULL, 0);
- if (!NT_SUCCESS (status))
- debug_printf ("NtCreateFile (%S) failed, status = %y",
- &recycler, status);
- else
- {
- status = NtWriteFile (tmp_fh, NULL, NULL, NULL, &io, info2,
- sizeof info2, NULL, NULL);
- if (!NT_SUCCESS (status))
- debug_printf ("NtWriteFile (%S) failed, status = %y",
- &fname, status);
- NtClose (tmp_fh);
- }
- }
- }
- NtClose (recyclerdir);
- /* Shoot again. */
- status = NtSetInformationFile (fh, &io, pfri, frisiz,
- FileRenameInformation);
- }
- if (!NT_SUCCESS (status))
- {
- debug_printf ("Move %S to %S failed, status = %y",
- pc.get_nt_native_path (), &recycler, status);
- goto out;
- }
- /* Moving to the bin worked. */
- bin_stat = has_been_moved;
- /* Now we try to set the delete disposition. If that worked, we're done.
- We try this here first, as long as we still have the open handle.
- Otherwise the below code closes the handle to allow replacing the file. */
- status = NtSetInformationFile (fh, &io, &disp, sizeof disp,
- FileDispositionInformation);
- if (status == STATUS_DIRECTORY_NOT_EMPTY)
- {
- /* Uh oh! This was supposed to be avoided by the check_dir_not_empty
- test in unlink_nt, but given that the test isn't atomic, this *can*
- happen. Try to move the dir back ASAP. */
- pfri->RootDirectory = NULL;
- pfri->FileNameLength = pc.get_nt_native_path ()->Length;
- memcpy (pfri->FileName, pc.get_nt_native_path ()->Buffer,
- pc.get_nt_native_path ()->Length);
- frisiz = sizeof *pfri + pfri->FileNameLength - sizeof (WCHAR);
- if (NT_SUCCESS (NtSetInformationFile (fh, &io, pfri, frisiz,
- FileRenameInformation)))
- {
- /* Give notice to unlink_nt and leave immediately. This avoids
- closing the handle, which might still be used if called from
- the rm -r workaround code. */
- bin_stat = dir_not_empty;
- goto out;
- }
- }
- /* In case of success, restore R/O attribute to accommodate hardlinks.
- That leaves potentially hardlinks around with the R/O bit suddenly
- off if setting the delete disposition failed, but please, keep in
- mind this is really a border case only. */
- if ((access & FILE_WRITE_ATTRIBUTES) && NT_SUCCESS (status) && !pc.isdir ())
- NtSetAttributesFile (fh, pc.file_attributes ());
- NtClose (fh);
- fh = NULL; /* So unlink_nt doesn't close the handle twice. */
- /* On success or when trying to unlink a directory we just return here.
- The below code only works for files. */
- if (NT_SUCCESS (status) || pc.isdir ())
- goto out;
- /* The final trick. We create a temporary file with delete-on-close
- semantic and rename that file to the file just moved to the bin.
- This typically overwrites the original file and we get rid of it,
- even if neither setting the delete dispostion, nor setting
- delete-on-close on the original file succeeds. There are still
- cases in which this fails, for instance, when trying to delete a
- hardlink to a DLL used by the unlinking application itself. */
- RtlAppendUnicodeToString (&recycler, L"X");
- InitializeObjectAttributes (&attr, &recycler, 0, rootdir, NULL);
- status = NtCreateFile (&tmp_fh, DELETE, &attr, &io, NULL,
- FILE_ATTRIBUTE_NORMAL, 0, FILE_SUPERSEDE,
- FILE_NON_DIRECTORY_FILE | FILE_DELETE_ON_CLOSE,
- NULL, 0);
- if (!NT_SUCCESS (status))
- {
- debug_printf ("Creating file for overwriting failed, status = %y",
- status);
- goto out;
- }
- status = NtSetInformationFile (tmp_fh, &io, pfri, frisiz,
- FileRenameInformation);
- NtClose (tmp_fh);
- if (!NT_SUCCESS (status))
- debug_printf ("Overwriting with another file failed, status = %y", status);
-
-out:
- if (rootdir)
- NtClose (rootdir);
- debug_printf ("%S, return bin_status %d", pc.get_nt_native_path (), bin_stat);
- return bin_stat;
-}
-
-static NTSTATUS
-check_dir_not_empty (HANDLE dir, path_conv &pc)
-{
- IO_STATUS_BLOCK io;
- const ULONG bufsiz = 3 * sizeof (FILE_NAMES_INFORMATION)
- + 3 * NAME_MAX * sizeof (WCHAR);
- PFILE_NAMES_INFORMATION pfni = (PFILE_NAMES_INFORMATION)
- alloca (bufsiz);
- NTSTATUS status = NtQueryDirectoryFile (dir, NULL, NULL, 0, &io, pfni,
- bufsiz, FileNamesInformation,
- FALSE, NULL, TRUE);
- if (!NT_SUCCESS (status))
- {
- debug_printf ("Checking if directory %S is empty failed, status = %y",
- pc.get_nt_native_path (), status);
- return status;
- }
- int cnt = 1;
- do
- {
- while (pfni->NextEntryOffset)
- {
- if (++cnt > 2)
- {
- UNICODE_STRING fname;
- OBJECT_ATTRIBUTES attr;
- FILE_BASIC_INFORMATION fbi;
-
- pfni = (PFILE_NAMES_INFORMATION)
- ((caddr_t) pfni + pfni->NextEntryOffset);
- RtlInitCountedUnicodeString(&fname, pfni->FileName,
- pfni->FileNameLength);
- InitializeObjectAttributes (&attr, &fname, 0, dir, NULL);
- status = NtQueryAttributesFile (&attr, &fbi);
- /* Intensive testing shows that sometimes directories, for which
- the delete disposition has already been set, and the deleting
- handle is already closed, can linger in the parent dir for a
- couple of ms for no apparent reason (Windows Defender or other
- real-time scanners are suspect).
-
- A fast rm -r is capable to exploit this problem. Setting the
- delete disposition of the parent dir then fails with
- STATUS_DIRECTORY_NOT_EMPTY. Examining the content of the
- affected dir can then show either that the dir is empty, or it
- can contain a lingering subdir. Calling NtQueryAttributesFile
- on that subdir returns with STATUS_DELETE_PENDING, or it
- disappeared before that call.
-
- That's what we do here. If NtQueryAttributesFile succeeded,
- or if the error code does not indicate an already deleted
- entry, STATUS_DIRECTORY_NOT_EMPTY is returned.
-
- Otherwise STATUS_SUCCESS is returned. Read on in unlink_nt. */
- if (status != STATUS_DELETE_PENDING
- && status != STATUS_OBJECT_NAME_NOT_FOUND
- && status != STATUS_OBJECT_PATH_NOT_FOUND)
- {
- debug_printf ("Directory %S not empty, found file <%S>, "
- "query status = %y",
- pc.get_nt_native_path (), &fname, status);
- return STATUS_DIRECTORY_NOT_EMPTY;
- }
- }
- pfni = (PFILE_NAMES_INFORMATION) ((caddr_t) pfni + pfni->NextEntryOffset);
- }
- }
- while (NT_SUCCESS (NtQueryDirectoryFile (dir, NULL, NULL, 0, &io, pfni,
- bufsiz, FileNamesInformation,
- FALSE, NULL, FALSE)));
- return STATUS_SUCCESS;
-}
-
-NTSTATUS
-unlink_nt (path_conv &pc)
-{
- NTSTATUS status;
- HANDLE fh, fh_ro = NULL;
- OBJECT_ATTRIBUTES attr;
- IO_STATUS_BLOCK io;
- HANDLE old_trans = NULL, trans = NULL;
- ULONG num_links = 1;
- FILE_DISPOSITION_INFORMATION disp = { TRUE };
- int reopened = 0;
-
- bin_status bin_stat = dont_move;
-
- syscall_printf ("Trying to delete %S, isdir = %d",
- pc.get_nt_native_path (), pc.isdir ());
- ACCESS_MASK access = DELETE;
- ULONG flags = FILE_OPEN_FOR_BACKUP_INTENT;
- /* Add the reparse point flag to native symlinks, otherwise we remove the
- target, not the symlink. */
- if (pc.is_rep_symlink ())
- flags |= FILE_OPEN_REPARSE_POINT;
-
- pc.get_object_attr (attr, sec_none_nih);
- /* If the R/O attribute is set, we have to open the file with
- FILE_WRITE_ATTRIBUTES to be able to remove this flags before trying
- to delete it. We do this separately because there are filesystems
- out there (MVFS), which refuse a request to open a file for DELETE
- if the DOS R/O attribute is set for the file. After removing the R/O
- attribute, just re-open the file for DELETE and go ahead. */
- if (pc.file_attributes () & FILE_ATTRIBUTE_READONLY)
- {
- FILE_STANDARD_INFORMATION fsi;
-
- /* If possible, hide the non-atomicity of the "remove R/O flag, remove
- link to file" operation behind a transaction. */
- if (wincap.has_transactions ()
- && (pc.fs_flags () & FILE_SUPPORTS_TRANSACTIONS))
- start_transaction (old_trans, trans);
-retry_open:
- status = NtOpenFile (&fh_ro, FILE_WRITE_ATTRIBUTES, &attr, &io,
- FILE_SHARE_VALID_FLAGS, flags);
- if (NT_SUCCESS (status))
- {
- debug_printf ("Opening %S for removing R/O succeeded",
- pc.get_nt_native_path ());
- NTSTATUS status2 = NtSetAttributesFile (fh_ro,
- pc.file_attributes ()
- & ~FILE_ATTRIBUTE_READONLY);
- if (!NT_SUCCESS (status2))
- debug_printf ("Removing R/O on %S failed, status = %y",
- pc.get_nt_native_path (), status2);
- pc.init_reopen_attr (attr, fh_ro);
- }
- else
- {
- debug_printf ("Opening %S for removing R/O failed, status = %y",
- pc.get_nt_native_path (), status);
- if (NT_TRANSACTIONAL_ERROR (status) && trans)
- {
- /* If NtOpenFile fails due to transactional problems, stop
- transaction and go ahead without. */
- stop_transaction (status, old_trans, trans);
- debug_printf ("Transaction failure. Retry open.");
- goto retry_open;
- }
- }
- if (pc.is_lnk_symlink ())
- {
- status = NtQueryInformationFile (fh_ro, &io, &fsi, sizeof fsi,
- FileStandardInformation);
- if (NT_SUCCESS (status))
- num_links = fsi.NumberOfLinks;
- }
- access |= FILE_WRITE_ATTRIBUTES;
- }
- /* First try to open the file with only allowing sharing for delete. If
- the file has an open handle on it, other than just for deletion, this
- will fail. That indicates that the file has to be moved to the recycle
- bin so that it actually disappears from its directory even though its
- in use. Otherwise, if opening doesn't fail, the file is not in use and
- we can go straight to setting the delete disposition flag.
-
- NOTE: The missing sharing modes FILE_SHARE_READ and FILE_SHARE_WRITE do
- NOT result in a STATUS_SHARING_VIOLATION, if another handle is
- opened for reading/writing metadata only. In other words, if
- another handle is open, but does not have the file open with
- FILE_READ_DATA or FILE_WRITE_DATA, the following NtOpenFile call
- will succeed. So, apparently there is no reliable way to find out
- if a file is already open elsewhere for other purposes than
- reading and writing data. */
- status = NtOpenFile (&fh, access, &attr, &io, FILE_SHARE_DELETE, flags);
- /* STATUS_SHARING_VIOLATION is what we expect. STATUS_LOCK_NOT_GRANTED can
- be generated under not quite clear circumstances when trying to open a
- file on NFS with FILE_SHARE_DELETE only. This has been observed with
- SFU 3.5 if the NFS share has been mounted under a drive letter. It's
- not generated for all files, but only for some. If it's generated once
- for a file, it will be generated all the time. It looks as if wrong file
- state information is stored within the NFS client which never times out.
- Opening the file with FILE_SHARE_VALID_FLAGS will work, though, and it
- is then possible to delete the file quite normally. */
- if (status == STATUS_SHARING_VIOLATION || status == STATUS_LOCK_NOT_GRANTED)
- {
- debug_printf ("Sharing violation when opening %S",
- pc.get_nt_native_path ());
- /* We never call try_to_bin on NFS and NetApp for the follwing reasons:
-
- NFS implements its own mechanism to remove in-use files, which looks
- quite similar to what we do in try_to_bin for remote files.
-
- Netapp filesystems don't understand the "move and delete" method
- at all and have all kinds of weird effects. Just setting the delete
- dispositon usually works fine, though. */
- if (!pc.fs_is_nfs () && !pc.fs_is_netapp ())
- bin_stat = move_to_bin;
- /* If the file is not a directory, of if we didn't set the move_to_bin
- flag, just proceed with the FILE_SHARE_VALID_FLAGS set. */
- if (!pc.isdir () || bin_stat == dont_move)
- status = NtOpenFile (&fh, access, &attr, &io,
- FILE_SHARE_VALID_FLAGS, flags);
- else
- {
- /* Otherwise it's getting tricky. The directory is opened in some
- process, so we're supposed to move it to the recycler and mark it
- for deletion. But what if the directory is not empty? The move
- will work, but the subsequent delete will fail. So we would
- have to move it back. While we do that in try_to_bin, it's bad,
- because the move results in a temporary inconsistent state.
- So, we test first if the directory is empty. If not, we bail
- out with STATUS_DIRECTORY_NOT_EMPTY. This avoids most of the
- problems. */
- status = NtOpenFile (&fh, access | FILE_LIST_DIRECTORY | SYNCHRONIZE,
- &attr, &io, FILE_SHARE_VALID_FLAGS,
- flags | FILE_SYNCHRONOUS_IO_NONALERT);
- if (NT_SUCCESS (status))
- {
- status = check_dir_not_empty (fh, pc);
- if (!NT_SUCCESS (status))
- {
- NtClose (fh);
- if (fh_ro)
- NtClose (fh_ro);
- goto out;
- }
- }
- }
- }
- if (fh_ro)
- NtClose (fh_ro);
- if (!NT_SUCCESS (status))
- {
- if (status == STATUS_DELETE_PENDING)
- {
- debug_printf ("Delete %S already pending", pc.get_nt_native_path ());
- status = STATUS_SUCCESS;
- goto out;
- }
- debug_printf ("Opening %S for delete failed, status = %y",
- pc.get_nt_native_path (), status);
- goto out;
- }
- /* Try to move to bin if a sharing violation occured. If that worked,
- we're done. */
- if (bin_stat == move_to_bin
- && (bin_stat = try_to_bin (pc, fh, access, flags)) >= has_been_moved)
- {
- if (bin_stat == has_been_moved)
- status = STATUS_SUCCESS;
- else
- {
- status = STATUS_DIRECTORY_NOT_EMPTY;
- NtClose (fh);
- }
- goto out;
- }
-
-try_again:
- /* Try to set delete disposition. */
- status = NtSetInformationFile (fh, &io, &disp, sizeof disp,
- FileDispositionInformation);
- if (!NT_SUCCESS (status))
- {
- debug_printf ("Setting delete disposition on %S failed, status = %y",
- pc.get_nt_native_path (), status);
- if (status == STATUS_DIRECTORY_NOT_EMPTY)
- {
- NTSTATUS status2 = STATUS_SUCCESS;
-
- if (!reopened)
- {
- /* Have to close and reopen the file from scratch, otherwise
- we collide with the delete-only sharing mode. */
- pc.get_object_attr (attr, sec_none_nih);
- NtClose (fh);
- status2 = NtOpenFile (&fh, access | FILE_LIST_DIRECTORY
- | SYNCHRONIZE,
- &attr, &io, FILE_SHARE_VALID_FLAGS,
- flags | FILE_SYNCHRONOUS_IO_NONALERT);
- }
- if (NT_SUCCESS (status2) && reopened < 20)
- {
- /* Workaround rm -r problem:
-
- Sometimes a deleted directory lingers in its parent dir
- after the deleting handle has already been closed. This
- can break deleting the parent dir. See the comment in
- check_dir_not_empty for more information.
-
- What we do here is this: If check_dir_not_empty returns
- STATUS_SUCCESS, the dir is either empty, or only inhabited
- by already deleted entries. If so, we try to move the dir
- into the bin. This usually works.
-
- However, if we're on a filesystem which doesn't support
- the try_to_bin method, or if moving to the bin doesn't work
- for some reason, just try to delete the directory again,
- with a very short grace period to free the CPU for a while.
- This gives the OS time to clean up. 5ms is enough in my
- testing to make sure that we don't have to try more than
- once in practically all cases.
- While this is an extrem bordercase, we don't want to hang
- infinitely in case a file in the directory is in the "delete
- pending" state but an application holds an open handle to it
- for a longer time. So we don't try this more than 20 times,
- which means a process time of 100-120ms. */
- if (check_dir_not_empty (fh, pc) == STATUS_SUCCESS)
- {
- if (bin_stat == dont_move)
- {
- bin_stat = move_to_bin;
- if (!pc.fs_is_nfs () && !pc.fs_is_netapp ())
- {
- debug_printf ("Try-to-bin %S",
- pc.get_nt_native_path ());
- bin_stat = try_to_bin (pc, fh, access, flags);
- }
- }
- /* Do NOT handle bin_stat == dir_not_empty here! */
- if (bin_stat == has_been_moved)
- status = STATUS_SUCCESS;
- else
- {
- debug_printf ("Try %S again", pc.get_nt_native_path ());
- ++reopened;
- Sleep (5L);
- goto try_again;
- }
- }
- }
- else if (status2 != STATUS_OBJECT_PATH_NOT_FOUND
- && status2 != STATUS_OBJECT_NAME_NOT_FOUND)
- {
- fh = NULL;
- debug_printf ("Opening dir %S for check_dir_not_empty failed, "
- "status = %y", pc.get_nt_native_path (), status2);
- }
- else /* Directory disappeared between NtClose and NtOpenFile. */
- status = STATUS_SUCCESS;
- }
- /* Trying to delete a hardlink to a file in use by the system in some
- way (for instance, font files) by setting the delete disposition fails
- with STATUS_CANNOT_DELETE. Strange enough, deleting these hardlinks
- using delete-on-close semantic works... most of the time.
-
- Don't use delete-on-close on remote shares. If two processes
- have open handles on a file and one of them calls unlink, the
- file is removed from the remote share even though the other
- process still has an open handle. That process than gets Win32
- error 59, ERROR_UNEXP_NET_ERR when trying to access the file.
- Microsoft KB 837665 describes this problem as a bug in 2K3, but
- I have reproduced it on other systems. */
- else if (status == STATUS_CANNOT_DELETE
- && (!pc.isremote () || pc.fs_is_ncfsd ()))
- {
- HANDLE fh2;
-
- debug_printf ("Cannot delete %S, try delete-on-close",
- pc.get_nt_native_path ());
- /* Re-open from handle so we open the correct file no matter if it
- has been moved to the bin or not. */
- status = NtOpenFile (&fh2, DELETE,
- pc.init_reopen_attr (attr, fh), &io,
- bin_stat == move_to_bin ? FILE_SHARE_VALID_FLAGS
- : FILE_SHARE_DELETE,
- flags | FILE_DELETE_ON_CLOSE);
- if (!NT_SUCCESS (status))
- {
- debug_printf ("Setting delete-on-close on %S failed, status = %y",
- pc.get_nt_native_path (), status);
- /* This is really the last chance. If it hasn't been moved
- to the bin already, try it now. If moving to the bin
- succeeds, we got rid of the file in some way, even if
- unlinking didn't work. */
- if (bin_stat == dont_move)
- bin_stat = try_to_bin (pc, fh, access, flags);
- if (bin_stat >= has_been_moved)
- status = bin_stat == has_been_moved
- ? STATUS_SUCCESS
- : STATUS_DIRECTORY_NOT_EMPTY;
- }
- else
- NtClose (fh2);
- }
- }
- if (fh)
- {
- if (access & FILE_WRITE_ATTRIBUTES)
- {
- /* Restore R/O attribute if setting the delete disposition failed. */
- if (!NT_SUCCESS (status))
- NtSetAttributesFile (fh, pc.file_attributes ());
- /* If we succeeded, restore R/O attribute to accommodate hardlinks.
- Only ever try to do this for our own winsymlinks, because there's
- a problem with setting the delete disposition:
- http://msdn.microsoft.com/en-us/library/ff545765%28VS.85%29.aspx
- "Subsequently, the only legal operation by such a caller is
- to close the open file handle."
-
- FIXME? On Vista and later, we could use FILE_HARD_LINK_INFORMATION
- to find all hardlinks and use one of them to restore the R/O bit,
- after the NtClose, but before we stop the transaction. This
- avoids the aforementioned problem entirely . */
- else if (pc.is_lnk_symlink () && num_links > 1)
- NtSetAttributesFile (fh, pc.file_attributes ());
- }
-
- NtClose (fh);
-
- }
-out:
- /* Stop transaction if we started one. */
- if (trans)
- stop_transaction (status, old_trans, trans);
- syscall_printf ("%S, return status = %y", pc.get_nt_native_path (), status);
- return status;
-}
-
-extern "C" int
-unlink (const char *ourname)
-{
- int res = -1;
- dev_t devn;
- NTSTATUS status;
-
- path_conv win32_name (ourname, PC_SYM_NOFOLLOW, stat_suffixes);
-
- if (win32_name.error)
- {
- set_errno (win32_name.error);
- goto done;
- }
-
- devn = win32_name.get_device ();
- if (isproc_dev (devn))
- {
- set_errno (EROFS);
- goto done;
- }
-
- if (!win32_name.exists ())
- {
- debug_printf ("unlinking a nonexistent file");
- set_errno (ENOENT);
- goto done;
- }
- else if (win32_name.isdir ())
- {
- debug_printf ("unlinking a directory");
- set_errno (EPERM);
- goto done;
- }
-
- status = unlink_nt (win32_name);
- if (NT_SUCCESS (status))
- res = 0;
- else
- __seterrno_from_nt_status (status);
-
- done:
- syscall_printf ("%R = unlink(%s)", res, ourname);
- return res;
-}
-
-extern "C" int
-_remove_r (struct _reent *, const char *ourname)
-{
- path_conv win32_name (ourname, PC_SYM_NOFOLLOW);
-
- if (win32_name.error)
- {
- set_errno (win32_name.error);
- syscall_printf ("%R = remove(%s)",-1, ourname);
- return -1;
- }
-
- return win32_name.isdir () ? rmdir (ourname) : unlink (ourname);
-}
-
-extern "C" int
-remove (const char *ourname)
-{
- path_conv win32_name (ourname, PC_SYM_NOFOLLOW);
-
- if (win32_name.error)
- {
- set_errno (win32_name.error);
- syscall_printf ("-1 = remove (%s)", ourname);
- return -1;
- }
-
- int res = win32_name.isdir () ? rmdir (ourname) : unlink (ourname);
- syscall_printf ("%R = remove(%s)", res, ourname);
- return res;
-}
-
-extern "C" pid_t
-getpid ()
-{
- syscall_printf ("%d = getpid()", myself->pid);
- return myself->pid;
-}
-
-extern "C" pid_t
-_getpid_r (struct _reent *)
-{
- return getpid ();
-}
-
-/* getppid: POSIX 4.1.1.1 */
-extern "C" pid_t
-getppid ()
-{
- syscall_printf ("%d = getppid()", myself->ppid);
- return myself->ppid;
-}
-
-/* setsid: POSIX 4.3.2.1 */
-extern "C" pid_t
-setsid (void)
-{
-#ifdef NEWVFORK
- vfork_save *vf = vfork_storage.val ();
- /* This is a horrible, horrible kludge */
- if (vf && vf->pid < 0)
- {
- pid_t pid = fork ();
- if (pid > 0)
- {
- syscall_printf ("longjmping due to vfork");
- vf->restore_pid (pid);
- }
- /* assuming that fork was successful */
- }
-#endif
-
- if (myself->pgid == myself->pid)
- syscall_printf ("hmm. pgid %d pid %d", myself->pgid, myself->pid);
- else
- {
- myself->ctty = -2;
- myself->sid = myself->pid;
- myself->pgid = myself->pid;
- if (cygheap->ctty)
- cygheap->close_ctty ();
- syscall_printf ("sid %d, pgid %d, %s", myself->sid, myself->pgid, myctty ());
- return myself->sid;
- }
-
- set_errno (EPERM);
- return -1;
-}
-
-extern "C" pid_t
-getsid (pid_t pid)
-{
- pid_t res;
- if (!pid)
- res = myself->sid;
- else
- {
- pinfo p (pid);
- if (p)
- res = p->sid;
- else
- {
- set_errno (ESRCH);
- res = -1;
- }
- }
- syscall_printf ("%R = getsid(%d)", pid);
- return res;
-}
-
-extern "C" ssize_t
-read (int fd, void *ptr, size_t len)
-{
- size_t res = (size_t) -1;
-
- pthread_testcancel ();
-
- __try
- {
- cygheap_fdget cfd (fd);
- if (cfd < 0)
- __leave;
-
- if ((cfd->get_flags () & O_ACCMODE) == O_WRONLY)
- {
- set_errno (EBADF);
- __leave;
- }
-
- /* Could block, so let user know we at least got here. */
- syscall_printf ("read(%d, %p, %d) %sblocking",
- fd, ptr, len, cfd->is_nonblocking () ? "non" : "");
-
- cfd->read (ptr, len);
- res = len;
- }
- __except (EFAULT) {}
- __endtry
- syscall_printf ("%lR = read(%d, %p, %d)", res, fd, ptr, len);
- MALLOC_CHECK;
- return (ssize_t) res;
-}
-
-EXPORT_ALIAS (read, _read)
-
-extern "C" ssize_t
-readv (int fd, const struct iovec *const iov, const int iovcnt)
-{
- ssize_t res = -1;
-
- pthread_testcancel ();
-
- __try
- {
- const ssize_t tot = check_iovec_for_read (iov, iovcnt);
-
- cygheap_fdget cfd (fd);
- if (cfd < 0)
- __leave;
-
- if (tot <= 0)
- {
- res = tot;
- __leave;
- }
-
- if ((cfd->get_flags () & O_ACCMODE) == O_WRONLY)
- {
- set_errno (EBADF);
- __leave;
- }
-
- /* Could block, so let user know we at least got here. */
- syscall_printf ("readv(%d, %p, %d) %sblocking",
- fd, iov, iovcnt, cfd->is_nonblocking () ? "non" : "");
-
- res = cfd->readv (iov, iovcnt, tot);
- }
- __except (EFAULT) {}
- __endtry
- syscall_printf ("%lR = readv(%d, %p, %d)", res, fd, iov, iovcnt);
- MALLOC_CHECK;
- return res;
-}
-
-extern "C" ssize_t
-pread (int fd, void *ptr, size_t len, off_t off)
-{
- ssize_t res;
-
- pthread_testcancel ();
-
- cygheap_fdget cfd (fd);
- if (cfd < 0)
- res = -1;
- else
- res = cfd->pread (ptr, len, off);
-
- syscall_printf ("%lR = pread(%d, %p, %d, %d)", res, fd, ptr, len, off);
- return res;
-}
-
-extern "C" ssize_t
-write (int fd, const void *ptr, size_t len)
-{
- ssize_t res = -1;
-
- pthread_testcancel ();
-
- __try
- {
- cygheap_fdget cfd (fd);
- if (cfd < 0)
- __leave;
-
- if ((cfd->get_flags () & O_ACCMODE) == O_RDONLY)
- {
- set_errno (EBADF);
- __leave;
- }
-
- /* Could block, so let user know we at least got here. */
- if (fd == 1 || fd == 2)
- paranoid_printf ("write(%d, %p, %d)", fd, ptr, len);
- else
- syscall_printf ("write(%d, %p, %d)", fd, ptr, len);
-
- res = cfd->write (ptr, len);
- }
- __except (EFAULT) {}
- __endtry
- syscall_printf ("%lR = write(%d, %p, %d)", res, fd, ptr, len);
- MALLOC_CHECK;
- return res;
-}
-
-EXPORT_ALIAS (write, _write)
-
-extern "C" ssize_t
-writev (const int fd, const struct iovec *const iov, const int iovcnt)
-{
- ssize_t res = -1;
-
- pthread_testcancel ();
-
- __try
- {
- const ssize_t tot = check_iovec_for_write (iov, iovcnt);
-
- cygheap_fdget cfd (fd);
- if (cfd < 0)
- __leave;
-
- if (tot <= 0)
- {
- res = tot;
- __leave;
- }
-
- if ((cfd->get_flags () & O_ACCMODE) == O_RDONLY)
- {
- set_errno (EBADF);
- __leave;
- }
-
- /* Could block, so let user know we at least got here. */
- if (fd == 1 || fd == 2)
- paranoid_printf ("writev(%d, %p, %d)", fd, iov, iovcnt);
- else
- syscall_printf ("writev(%d, %p, %d)", fd, iov, iovcnt);
-
- res = cfd->writev (iov, iovcnt, tot);
- }
- __except (EFAULT) {}
- __endtry
- if (fd == 1 || fd == 2)
- paranoid_printf ("%lR = writev(%d, %p, %d)", res, fd, iov, iovcnt);
- else
- syscall_printf ("%lR = writev(%d, %p, %d)", res, fd, iov, iovcnt);
- MALLOC_CHECK;
- return res;
-}
-
-extern "C" ssize_t
-pwrite (int fd, void *ptr, size_t len, off_t off)
-{
- pthread_testcancel ();
-
- ssize_t res;
- cygheap_fdget cfd (fd);
- if (cfd < 0)
- res = -1;
- else
- res = cfd->pwrite (ptr, len, off);
-
- syscall_printf ("%lR = pwrite(%d, %p, %d, %d)", res, fd, ptr, len, off);
- return res;
-}
-
-/* _open */
-/* newlib's fcntl.h defines _open as taking variable args so we must
- correspond. The third arg if it exists is: mode_t mode. */
-extern "C" int
-open (const char *unix_path, int flags, ...)
-{
- int res = -1;
- va_list ap;
- mode_t mode = 0;
-
- pthread_testcancel ();
-
- __try
- {
- syscall_printf ("open(%s, %y)", unix_path, flags);
- if (!*unix_path)
- set_errno (ENOENT);
- else
- {
- /* check for optional mode argument */
- va_start (ap, flags);
- mode = va_arg (ap, mode_t);
- va_end (ap);
-
- fhandler_base *fh;
- cygheap_fdnew fd;
-
- if (fd >= 0)
- {
- /* This is a temporary kludge until all utilities can catch up
- with a change in behavior that implements linux functionality:
- opening a tty should not automatically cause it to become the
- controlling tty for the process. */
- int opt = PC_OPEN | ((flags & (O_NOFOLLOW | O_EXCL))
- ? PC_SYM_NOFOLLOW : PC_SYM_FOLLOW);
- if (!(flags & O_NOCTTY) && fd > 2 && myself->ctty != -2)
- {
- flags |= O_NOCTTY;
- /* flag that, if opened, this fhandler could later be capable
- of being a controlling terminal if /dev/tty is opened. */
- opt |= PC_CTTY;
- }
- if (!(fh = build_fh_name (unix_path, opt, stat_suffixes)))
- ; // errno already set
- else if ((flags & O_NOFOLLOW) && fh->issymlink ())
- {
- delete fh;
- set_errno (ELOOP);
- }
- else if ((flags & O_DIRECTORY) && fh->exists ()
- && !fh->pc.isdir ())
- {
- delete fh;
- set_errno (ENOTDIR);
- }
- else if (((flags & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL))
- && fh->exists ())
- {
- delete fh;
- set_errno (EEXIST);
- }
- else if ((fh->is_fs_special ()
- && fh->device_access_denied (flags))
- || !fh->open_with_arch (flags, (mode & 07777)
- & ~cygheap->umask))
- delete fh;
- else
- {
- fd = fh;
- if (fd <= 2)
- set_std_handle (fd);
- res = fd;
- }
- }
- }
-
- syscall_printf ("%R = open(%s, %y)", res, unix_path, flags);
- }
- __except (EFAULT) {}
- __endtry
- return res;
-}
-
-EXPORT_ALIAS (open, _open )
-EXPORT_ALIAS (open, _open64 )
-
-extern "C" off_t
-lseek64 (int fd, off_t pos, int dir)
-{
- off_t res;
-
- if (dir != SEEK_SET && dir != SEEK_CUR && dir != SEEK_END)
- {
- set_errno (EINVAL);
- res = -1;
- }
- else
- {
- cygheap_fdget cfd (fd);
- if (cfd >= 0)
- res = cfd->lseek (pos, dir);
- else
- res = -1;
- }
- /* Can't use %R/%lR here since res is always 8 bytes */
- syscall_printf (res == -1 ? "%D = lseek(%d, %D, %d), errno %d"
- : "%D = lseek(%d, %D, %d)",
- res, fd, pos, dir, get_errno ());
-
- return res;
-}
-
-EXPORT_ALIAS (lseek64, _lseek64)
-
-#ifdef __x86_64__
-EXPORT_ALIAS (lseek64, lseek)
-EXPORT_ALIAS (lseek64, _lseek)
-#else
-extern "C" _off_t
-lseek (int fd, _off_t pos, int dir)
-{
- return lseek64 (fd, (off_t) pos, dir);
-}
-EXPORT_ALIAS (lseek, _lseek)
-#endif
-
-
-extern "C" int
-close (int fd)
-{
- int res;
-
- syscall_printf ("close(%d)", fd);
-
- pthread_testcancel ();
-
- MALLOC_CHECK;
- cygheap_fdget cfd (fd, true);
- if (cfd < 0)
- res = -1;
- else
- {
- cfd->isclosed (true);
- res = cfd->close_with_arch ();
- cfd.release ();
- }
-
- syscall_printf ("%R = close(%d)", res, fd);
- MALLOC_CHECK;
- return res;
-}
-
-EXPORT_ALIAS (close, _close)
-
-extern "C" int
-isatty (int fd)
-{
- int res;
-
- cygheap_fdget cfd (fd);
- if (cfd < 0)
- res = 0;
- else
- res = cfd->is_tty ();
- syscall_printf ("%R = isatty(%d)", res, fd);
- return res;
-}
-EXPORT_ALIAS (isatty, _isatty)
-
-extern "C" int
-link (const char *oldpath, const char *newpath)
-{
- int res = -1;
- fhandler_base *fh;
-
- if (!(fh = build_fh_name (oldpath, PC_SYM_NOFOLLOW | PC_KEEP_HANDLE,
- stat_suffixes)))
- goto error;
-
- if (fh->error ())
- {
- debug_printf ("got %d error from build_fh_name", fh->error ());
- set_errno (fh->error ());
- }
- else if (fh->pc.isdir ())
- set_errno (EPERM); /* We do not permit linking directories. */
- else if (!fh->pc.exists ())
- set_errno (ENOENT);
- else
- res = fh->link (newpath);
-
- delete fh;
- error:
- syscall_printf ("%R = link(%s, %s)", res, oldpath, newpath);
- return res;
-}
-
-/* chown: POSIX 5.6.5.1 */
-/*
- * chown () is only implemented for Windows NT. Under other operating
- * systems, it is only a stub that always returns zero.
- */
-static int
-chown_worker (const char *name, unsigned fmode, uid_t uid, gid_t gid)
-{
- int res = -1;
- fhandler_base *fh;
-
- if (!(fh = build_fh_name (name, fmode, stat_suffixes)))
- goto error;
-
- if (fh->error ())
- {
- debug_printf ("got %d error from build_fh_name", fh->error ());
- set_errno (fh->error ());
- }
- else
- res = fh->fchown (uid, gid);
-
- delete fh;
- error:
- syscall_printf ("%R = %schown(%s,...)",
- res, (fmode & PC_SYM_NOFOLLOW) ? "l" : "", name);
- return res;
-}
-
-extern "C" int
-chown32 (const char * name, uid_t uid, gid_t gid)
-{
- return chown_worker (name, PC_SYM_FOLLOW, uid, gid);
-}
-
-#ifdef __x86_64__
-EXPORT_ALIAS (chown32, chown)
-#else
-extern "C" int
-chown (const char * name, __uid16_t uid, __gid16_t gid)
-{
- return chown_worker (name, PC_SYM_FOLLOW,
- uid16touid32 (uid), gid16togid32 (gid));
-}
-#endif
-
-extern "C" int
-lchown32 (const char * name, uid_t uid, gid_t gid)
-{
- return chown_worker (name, PC_SYM_NOFOLLOW, uid, gid);
-}
-
-#ifdef __x86_64__
-EXPORT_ALIAS (lchown32, lchown)
-#else
-extern "C" int
-lchown (const char * name, __uid16_t uid, __gid16_t gid)
-{
- return chown_worker (name, PC_SYM_NOFOLLOW,
- uid16touid32 (uid), gid16togid32 (gid));
-}
-#endif
-
-extern "C" int
-fchown32 (int fd, uid_t uid, gid_t gid)
-{
- cygheap_fdget cfd (fd);
- if (cfd < 0)
- {
- syscall_printf ("-1 = fchown (%d,...)", fd);
- return -1;
- }
-
- int res = cfd->fchown (uid, gid);
-
- syscall_printf ("%R = fchown(%s,...)", res, cfd->get_name ());
- return res;
-}
-
-#ifdef __x86_64__
-EXPORT_ALIAS (fchown32, fchown)
-#else
-extern "C" int
-fchown (int fd, __uid16_t uid, __gid16_t gid)
-{
- return fchown32 (fd, uid16touid32 (uid), gid16togid32 (gid));
-}
-#endif
-
-/* umask: POSIX 5.3.3.1 */
-extern "C" mode_t
-umask (mode_t mask)
-{
- mode_t oldmask;
-
- oldmask = cygheap->umask;
- cygheap->umask = mask & 0777;
- return oldmask;
-}
-
-int
-chmod_device (path_conv& pc, mode_t mode)
-{
- return mknod_worker (pc.get_win32 (), pc.dev.mode & S_IFMT, mode, pc.dev.get_major (), pc.dev.get_minor ());
-}
-
-#define FILTERED_MODE(m) ((m) & (S_ISUID | S_ISGID | S_ISVTX \
- | S_IRWXU | S_IRWXG | S_IRWXO))
-
-/* chmod: POSIX 5.6.4.1 */
-extern "C" int
-chmod (const char *path, mode_t mode)
-{
- int res = -1;
- fhandler_base *fh;
- if (!(fh = build_fh_name (path, PC_SYM_FOLLOW, stat_suffixes)))
- goto error;
-
- if (fh->error ())
- {
- debug_printf ("got %d error from build_fh_name", fh->error ());
- set_errno (fh->error ());
- }
- else
- res = fh->fchmod (FILTERED_MODE (mode));
-
- delete fh;
- error:
- syscall_printf ("%R = chmod(%s, 0%o)", res, path, mode);
- return res;
-}
-
-/* fchmod: P96 5.6.4.1 */
-
-extern "C" int
-fchmod (int fd, mode_t mode)
-{
- cygheap_fdget cfd (fd);
- if (cfd < 0)
- {
- syscall_printf ("-1 = fchmod (%d, 0%o)", fd, mode);
- return -1;
- }
-
- return cfd->fchmod (FILTERED_MODE (mode));
-}
-
-#ifndef __x86_64__
-static void
-stat64_to_stat32 (struct stat *src, struct __stat32 *dst)
-{
- dst->st_dev = ((src->st_dev >> 8) & 0xff00) | (src->st_dev & 0xff);
- dst->st_ino = ((unsigned) (src->st_ino >> 32)) | (unsigned) src->st_ino;
- dst->st_mode = src->st_mode;
- dst->st_nlink = src->st_nlink;
- dst->st_uid = src->st_uid;
- dst->st_gid = src->st_gid;
- dst->st_rdev = ((src->st_rdev >> 8) & 0xff00) | (src->st_rdev & 0xff);
- dst->st_size = src->st_size;
- dst->st_atim = src->st_atim;
- dst->st_mtim = src->st_mtim;
- dst->st_ctim = src->st_ctim;
- dst->st_blksize = src->st_blksize;
- dst->st_blocks = src->st_blocks;
-}
-#endif
-
-static struct stat dev_st;
-static bool dev_st_inited;
-
-void
-fhandler_base::stat_fixup (struct stat *buf)
-{
- /* For devices, set inode number to device number. This gives us a valid,
- unique inode number without having to call hash_path_name. */
- if (!buf->st_ino)
- buf->st_ino = (get_major () == DEV_VIRTFS_MAJOR) ? get_ino ()
- : get_device ();
- /* For /dev-based devices, st_dev must be set to the device number of /dev,
- not it's own device major/minor numbers. What we do here to speed up
- the process is to fetch the device number of /dev only once, liberally
- assuming that /dev doesn't change over the lifetime of a process. */
- if (!buf->st_dev)
- {
- if (dev ().is_dev_resident ())
- {
- if (!dev_st_inited)
- {
- stat64 ("/dev", &dev_st);
- dev_st_inited = true;
- }
- buf->st_dev = dev_st.st_dev;
- }
- else
- buf->st_dev = get_device ();
- }
- /* Only set st_rdev if it's a device. */
- if (!buf->st_rdev && get_major () != DEV_VIRTFS_MAJOR)
- {
- buf->st_rdev = get_device ();
- /* consX, console, conin, and conout point to the same device.
- Make sure the link count is correct. */
- if (buf->st_rdev == (dev_t) myself->ctty && iscons_dev (myself->ctty))
- buf->st_nlink = 4;
- /* CD-ROM drives have two links, /dev/srX and /dev/scdX. */
- else if (gnu_dev_major (buf->st_rdev) == DEV_CDROM_MAJOR)
- buf->st_nlink = 2;
- }
-}
-
-extern "C" int
-fstat64 (int fd, struct stat *buf)
-{
- int res;
-
- cygheap_fdget cfd (fd);
- if (cfd < 0)
- res = -1;
- else
- {
- memset (buf, 0, sizeof (struct stat));
- res = cfd->fstat (buf);
- if (!res)
- cfd->stat_fixup (buf);
- }
-
- syscall_printf ("%R = fstat(%d, %p)", res, fd, buf);
- return res;
-}
-
-extern "C" int
-_fstat64_r (struct _reent *ptr, int fd, struct stat *buf)
-{
- int ret;
-
- if ((ret = fstat64 (fd, buf)) == -1)
- ptr->_errno = get_errno ();
- return ret;
-}
-
-#ifdef __x86_64__
-EXPORT_ALIAS (fstat64, fstat)
-EXPORT_ALIAS (_fstat64_r, _fstat_r)
-#else
-extern "C" int
-fstat (int fd, struct stat *buf)
-{
- struct stat buf64;
- int ret = fstat64 (fd, &buf64);
- if (!ret)
- stat64_to_stat32 (&buf64, (struct __stat32 *) buf);
- return ret;
-}
-
-extern "C" int
-_fstat_r (struct _reent *ptr, int fd, struct stat *buf)
-{
- int ret;
-
- if ((ret = fstat (fd, buf)) == -1)
- ptr->_errno = get_errno ();
- return ret;
-}
-#endif
-
-/* fsync: P96 6.6.1.1 */
-extern "C" int
-fsync (int fd)
-{
- pthread_testcancel ();
- cygheap_fdget cfd (fd);
- if (cfd < 0)
- {
- syscall_printf ("-1 = fsync (%d)", fd);
- return -1;
- }
- return cfd->fsync ();
-}
-
-EXPORT_ALIAS (fsync, fdatasync)
-
-static void
-sync_worker (HANDLE dir, USHORT len, LPCWSTR vol)
-{
- NTSTATUS status;
- HANDLE fh;
- IO_STATUS_BLOCK io;
- OBJECT_ATTRIBUTES attr;
- UNICODE_STRING uvol = { len, len, (WCHAR *) vol };
-
- InitializeObjectAttributes (&attr, &uvol, OBJ_CASE_INSENSITIVE, dir, NULL);
- status = NtOpenFile (&fh, GENERIC_WRITE, &attr, &io,
- FILE_SHARE_VALID_FLAGS, 0);
- if (!NT_SUCCESS (status))
- debug_printf ("NtOpenFile (%S), status %y", &uvol, status);
- else
- {
- status = NtFlushBuffersFile (fh, &io);
- if (!NT_SUCCESS (status))
- debug_printf ("NtFlushBuffersFile (%S), status %y", &uvol, status);
- NtClose (fh);
- }
-}
-
-/* sync: SUSv3 */
-extern "C" void
-sync ()
-{
- OBJECT_ATTRIBUTES attr;
- NTSTATUS status;
- HANDLE devhdl;
- UNICODE_STRING device;
-
- /* Open \Device object directory. */
- RtlInitUnicodeString (&device, L"\\Device");
- InitializeObjectAttributes (&attr, &device, OBJ_CASE_INSENSITIVE, NULL, NULL);
- status = NtOpenDirectoryObject (&devhdl, DIRECTORY_QUERY, &attr);
- if (!NT_SUCCESS (status))
- {
- debug_printf ("NtOpenDirectoryObject, status %y", status);
- return;
- }
- /* Traverse \Device directory ... */
- PDIRECTORY_BASIC_INFORMATION dbi = (PDIRECTORY_BASIC_INFORMATION)
- alloca (640);
- BOOLEAN restart = TRUE;
- ULONG context = 0;
- while (NT_SUCCESS (NtQueryDirectoryObject (devhdl, dbi, 640, TRUE, restart,
- &context, NULL)))
- {
- restart = FALSE;
- /* ... and call sync_worker for each HarddiskVolumeX entry. */
- if (dbi->ObjectName.Length >= 15 * sizeof (WCHAR)
- && !wcsncasecmp (dbi->ObjectName.Buffer, L"HarddiskVolume", 14)
- && iswdigit (dbi->ObjectName.Buffer[14]))
- sync_worker (devhdl, dbi->ObjectName.Length, dbi->ObjectName.Buffer);
- }
- NtClose (devhdl);
-}
-
-/* Cygwin internal */
-int __reg2
-stat_worker (path_conv &pc, struct stat *buf)
-{
- int res = -1;
-
- __try
- {
- if (pc.error)
- {
- debug_printf ("got %d error from path_conv", pc.error);
- set_errno (pc.error);
- }
- else if (pc.exists ())
- {
- fhandler_base *fh;
-
- if (!(fh = build_fh_pc (pc)))
- __leave;
-
- debug_printf ("(%S, %p, %p), file_attributes %d",
- pc.get_nt_native_path (), buf, fh, (DWORD) *fh);
- memset (buf, 0, sizeof (*buf));
- res = fh->fstat (buf);
- if (!res)
- fh->stat_fixup (buf);
- delete fh;
- }
- else
- set_errno (ENOENT);
- }
- __except (EFAULT) {}
- __endtry
- MALLOC_CHECK;
- syscall_printf ("%d = (%S,%p)", res, pc.get_nt_native_path (), buf);
- return res;
-}
-
-extern "C" int
-stat64 (const char *__restrict name, struct stat *__restrict buf)
-{
- syscall_printf ("entering");
- path_conv pc (name, PC_SYM_FOLLOW | PC_POSIX | PC_KEEP_HANDLE,
- stat_suffixes);
- return stat_worker (pc, buf);
-}
-
-extern "C" int
-_stat64_r (struct _reent *__restrict ptr, const char *__restrict name,
- struct stat *buf)
-{
- int ret;
-
- if ((ret = stat64 (name, buf)) == -1)
- ptr->_errno = get_errno ();
- return ret;
-}
-
-#ifdef __x86_64__
-EXPORT_ALIAS (stat64, stat)
-EXPORT_ALIAS (_stat64_r, _stat_r)
-#else
-extern "C" int
-stat (const char *__restrict name, struct stat *__restrict buf)
-{
- struct stat buf64;
- int ret = stat64 (name, &buf64);
- if (!ret)
- stat64_to_stat32 (&buf64, (struct __stat32 *) buf);
- return ret;
-}
-
-extern "C" int
-_stat_r (struct _reent *__restrict ptr, const char *__restrict name,
- struct stat *__restrict buf)
-{
- int ret;
-
- if ((ret = stat (name, buf)) == -1)
- ptr->_errno = get_errno ();
- return ret;
-}
-#endif
-
-/* lstat: Provided by SVR4 and 4.3+BSD, POSIX? */
-extern "C" int
-lstat64 (const char *__restrict name, struct stat *__restrict buf)
-{
- syscall_printf ("entering");
- path_conv pc (name, PC_SYM_NOFOLLOW | PC_POSIX | PC_KEEP_HANDLE,
- stat_suffixes);
- return stat_worker (pc, buf);
-}
-
-#ifdef __x86_64__
-EXPORT_ALIAS (lstat64, lstat)
-#else
-/* lstat: Provided by SVR4 and 4.3+BSD, POSIX? */
-extern "C" int
-lstat (const char *__restrict name, struct stat *__restrict buf)
-{
- struct stat buf64;
- int ret = lstat64 (name, &buf64);
- if (!ret)
- stat64_to_stat32 (&buf64, (struct __stat32 *) buf);
- return ret;
-}
-#endif
-
-extern "C" int
-access (const char *fn, int flags)
-{
- // flags were incorrectly specified
- int res = -1;
- if (flags & ~(F_OK|R_OK|W_OK|X_OK))
- set_errno (EINVAL);
- else
- {
- fhandler_base *fh = build_fh_name (fn, PC_SYM_FOLLOW | PC_KEEP_HANDLE,
- stat_suffixes);
- if (fh)
- {
- res = fh->fhaccess (flags, false);
- delete fh;
- }
- }
- debug_printf ("returning %d", res);
- return res;
-}
-
-/* Linux provides this extension; it is basically a wrapper around the
- POSIX:2008 faccessat (AT_FDCWD, fn, flags, AT_EACCESS). We also
- provide eaccess as an alias for this, in cygwin.din. */
-extern "C" int
-euidaccess (const char *fn, int flags)
-{
- // flags were incorrectly specified
- int res = -1;
- if (flags & ~(F_OK|R_OK|W_OK|X_OK))
- set_errno (EINVAL);
- else
- {
- fhandler_base *fh = build_fh_name (fn, PC_SYM_FOLLOW | PC_KEEP_HANDLE,
- stat_suffixes);
- if (fh)
- {
- res = fh->fhaccess (flags, true);
- delete fh;
- }
- }
- debug_printf ("returning %d", res);
- return res;
-}
-
-static void
-rename_append_suffix (path_conv &pc, const char *path, size_t len,
- const char *suffix)
-{
- char buf[len + 5];
-
- if (ascii_strcasematch (path + len - 4, ".lnk")
- || ascii_strcasematch (path + len - 4, ".exe"))
- len -= 4;
- stpcpy (stpncpy (buf, path, len), suffix);
- pc.check (buf, PC_SYM_NOFOLLOW);
-}
-
-/* This function tests if a filename has one of the "approved" executable
- suffix. This list is probably not complete... */
-static inline bool
-nt_path_has_executable_suffix (PUNICODE_STRING upath)
-{
- static const PUNICODE_STRING blessed_executable_suffixes[] =
- {
- &ro_u_com,
- &ro_u_dll, /* Messy, messy. Per MSDN, the GetBinaryType function is
- supposed to return with ERROR_BAD_EXE_FORMAT. if the file
- is a DLL. On 64-bit Windows, this works as expected for
- 32-bit and 64-bit DLLs. On 32-bit Windows this only works
- for 32-bit DLLs. For 64-bit DLLs, 32-bit Windows returns
- true with the type set to SCS_64BIT_BINARY. */
- &ro_u_exe,
- &ro_u_scr,
- &ro_u_sys,
- NULL
- };
-
- USHORT pos = upath->Length / sizeof (WCHAR);
- PWCHAR path;
- UNICODE_STRING usuf;
- const PUNICODE_STRING *suf;
-
- /* Too short for a native path? */
- if (pos < 8)
- return false;
- /* Assumption: All executable suffixes have a length of three. */
- path = upath->Buffer + pos - 4;
- if (*path != L'.')
- return false;
- RtlInitCountedUnicodeString (&usuf, path, 4 * sizeof (WCHAR));
- for (suf = blessed_executable_suffixes; *suf; ++suf)
- if (RtlEqualUnicodeString (&usuf, *suf, TRUE))
- return true;
- return false;
-}
-
-extern "C" int
-rename (const char *oldpath, const char *newpath)
-{
- tmp_pathbuf tp;
- int res = -1;
- path_conv oldpc, newpc, new2pc, *dstpc, *removepc = NULL;
- bool old_dir_requested = false, new_dir_requested = false;
- bool old_explicit_suffix = false, new_explicit_suffix = false;
- size_t olen, nlen;
- bool equal_path;
- NTSTATUS status = STATUS_SUCCESS;
- HANDLE fh = NULL, nfh;
- HANDLE old_trans = NULL, trans = NULL;
- OBJECT_ATTRIBUTES attr;
- IO_STATUS_BLOCK io;
- FILE_STANDARD_INFORMATION ofsi;
- PFILE_RENAME_INFORMATION pfri;
-
- __try
- {
- if (!*oldpath || !*newpath)
- {
- /* Reject rename("","x"), rename("x",""). */
- set_errno (ENOENT);
- __leave;
- }
- if (has_dot_last_component (oldpath, true))
- {
- /* Reject rename("dir/.","x"). */
- oldpc.check (oldpath, PC_SYM_NOFOLLOW, stat_suffixes);
- set_errno (oldpc.isdir () ? EINVAL : ENOTDIR);
- __leave;
- }
- if (has_dot_last_component (newpath, true))
- {
- /* Reject rename("dir","x/."). */
- newpc.check (newpath, PC_SYM_NOFOLLOW, stat_suffixes);
- set_errno (!newpc.exists () ? ENOENT
- : newpc.isdir () ? EINVAL : ENOTDIR);
- __leave;
- }
-
- /* A trailing slash requires that the pathname points to an existing
- directory. If it's not, it's a ENOTDIR condition. The same goes
- for newpath a bit further down this function. */
- olen = strlen (oldpath);
- if (isdirsep (oldpath[olen - 1]))
- {
- char *buf;
- char *p = stpcpy (buf = tp.c_get (), oldpath) - 1;
- oldpath = buf;
- while (p >= oldpath && isdirsep (*p))
- *p-- = '\0';
- olen = p + 1 - oldpath;
- if (!olen)
- {
- /* The root directory cannot be renamed. This also rejects
- the corner case of rename("/","/"), even though it is the
- same file. */
- set_errno (EINVAL);
- __leave;
- }
- old_dir_requested = true;
- }
- oldpc.check (oldpath, PC_SYM_NOFOLLOW, stat_suffixes);
- if (oldpc.error)
- {
- set_errno (oldpc.error);
- __leave;
- }
- if (!oldpc.exists ())
- {
- set_errno (ENOENT);
- __leave;
- }
- if (oldpc.isspecial () && !oldpc.issocket () && !oldpc.is_fs_special ())
- {
- /* No renames from virtual FS */
- set_errno (EROFS);
- __leave;
- }
- if (oldpc.has_attribute (FILE_ATTRIBUTE_REPARSE_POINT)
- && !oldpc.issymlink ())
- {
- /* Volume mount point. If we try to rename a volume mount point, NT
- returns STATUS_NOT_SAME_DEVICE ==> Win32 ERROR_NOT_SAME_DEVICE ==>
- errno EXDEV. That's bad since mv(1) will now perform a
- cross-device move. So what we do here is to treat the volume
- mount point just like Linux treats a mount point. */
- set_errno (EBUSY);
- __leave;
- }
- if (old_dir_requested && !oldpc.isdir ())
- {
- /* Reject rename("file/","x"). */
- set_errno (ENOTDIR);
- __leave;
- }
- if (oldpc.known_suffix
- && (ascii_strcasematch (oldpath + olen - 4, ".lnk")
- || ascii_strcasematch (oldpath + olen - 4, ".exe")))
- old_explicit_suffix = true;
-
- nlen = strlen (newpath);
- if (isdirsep (newpath[nlen - 1]))
- {
- char *buf;
- char *p = stpcpy (buf = tp.c_get (), newpath) - 1;
- newpath = buf;
- while (p >= newpath && isdirsep (*p))
- *p-- = '\0';
- nlen = p + 1 - newpath;
- if (!nlen) /* The root directory is never empty. */
- {
- set_errno (ENOTEMPTY);
- __leave;
- }
- new_dir_requested = true;
- }
- newpc.check (newpath, PC_SYM_NOFOLLOW, stat_suffixes);
- if (newpc.error)
- {
- set_errno (newpc.error);
- __leave;
- }
- if (newpc.isspecial () && !newpc.issocket ())
- {
- /* No renames to virtual FSes */
- set_errno (EROFS);
- __leave;
- }
- if (new_dir_requested && !(newpc.exists ()
- ? newpc.isdir () : oldpc.isdir ()))
- {
- /* Reject rename("file1","file2/"), but allow rename("dir","d/"). */
- set_errno (newpc.exists () ? ENOTDIR : ENOENT);
- __leave;
- }
- if (newpc.exists ()
- && (oldpc.isdir () ? !newpc.isdir () : newpc.isdir ()))
- {
- /* Reject rename("file","dir") and rename("dir","file"). */
- set_errno (newpc.isdir () ? EISDIR : ENOTDIR);
- __leave;
- }
- if (newpc.known_suffix
- && (ascii_strcasematch (newpath + nlen - 4, ".lnk")
- || ascii_strcasematch (newpath + nlen - 4, ".exe")))
- new_explicit_suffix = true;
-
- /* This test is necessary in almost every case, so do it once here. */
- equal_path = RtlEqualUnicodeString (oldpc.get_nt_native_path (),
- newpc.get_nt_native_path (),
- oldpc.objcaseinsensitive ());
-
- /* First check if oldpath and newpath only differ by case. If so, it's
- just a request to change the case of the filename. By simply setting
- the file attributes to INVALID_FILE_ATTRIBUTES (which translates to
- "file doesn't exist"), all later tests are skipped. */
- if (oldpc.objcaseinsensitive () && newpc.exists () && equal_path
- && old_explicit_suffix == new_explicit_suffix)
- {
- if (RtlEqualUnicodeString (oldpc.get_nt_native_path (),
- newpc.get_nt_native_path (),
- FALSE))
- {
- res = 0;
- __leave;
- }
- newpc.file_attributes (INVALID_FILE_ATTRIBUTES);
- }
- else if (oldpc.isdir ())
- {
- /* Check for newpath being identical or a subdir of oldpath. */
- if (RtlPrefixUnicodeString (oldpc.get_nt_native_path (),
- newpc.get_nt_native_path (),
- TRUE))
- {
- if (newpc.get_nt_native_path ()->Length
- == oldpc.get_nt_native_path ()->Length)
- {
- res = 0;
- __leave;
- }
- if (*(PWCHAR) ((PBYTE) newpc.get_nt_native_path ()->Buffer
- + oldpc.get_nt_native_path ()->Length) == L'\\')
- {
- set_errno (EINVAL);
- __leave;
- }
- }
- }
- else if (!newpc.exists ())
- {
- if (equal_path && old_explicit_suffix != new_explicit_suffix)
- {
- newpc.check (newpath, PC_SYM_NOFOLLOW);
- if (RtlEqualUnicodeString (oldpc.get_nt_native_path (),
- newpc.get_nt_native_path (),
- oldpc.objcaseinsensitive ()))
- {
- res = 0;
- __leave;
- }
- }
- else if (oldpc.is_lnk_special ()
- && !RtlEqualUnicodePathSuffix (newpc.get_nt_native_path (),
- &ro_u_lnk, TRUE))
- rename_append_suffix (newpc, newpath, nlen, ".lnk");
- else if (oldpc.is_binary () && !old_explicit_suffix
- && oldpc.known_suffix
- && !nt_path_has_executable_suffix
- (newpc.get_nt_native_path ()))
- /* Never append .exe suffix if oldpath had .exe suffix given
- explicitely, or if oldpath wasn't already a .exe file, or
- if the destination filename has one of the blessed executable
- suffixes.
- Note: To rename an executable foo.exe to bar-without-suffix,
- the .exe suffix must be given explicitly in oldpath. */
- rename_append_suffix (newpc, newpath, nlen, ".exe");
- }
- else
- {
- if (equal_path && old_explicit_suffix != new_explicit_suffix)
- {
- newpc.check (newpath, PC_SYM_NOFOLLOW);
- if (RtlEqualUnicodeString (oldpc.get_nt_native_path (),
- newpc.get_nt_native_path (),
- oldpc.objcaseinsensitive ()))
- {
- res = 0;
- __leave;
- }
- }
- else if (oldpc.is_lnk_special ())
- {
- if (!newpc.is_lnk_special ()
- && !RtlEqualUnicodePathSuffix (newpc.get_nt_native_path (),
- &ro_u_lnk, TRUE))
- {
- rename_append_suffix (new2pc, newpath, nlen, ".lnk");
- removepc = &newpc;
- }
- }
- else if (oldpc.is_binary ())
- {
- /* Never append .exe suffix if oldpath had .exe suffix given
- explicitely, or if newfile is a binary (in which case the given
- name probably makes sense as it is), or if the destination
- filename has one of the blessed executable suffixes. */
- if (!old_explicit_suffix && oldpc.known_suffix
- && !newpc.is_binary ()
- && !nt_path_has_executable_suffix
- (newpc.get_nt_native_path ()))
- {
- rename_append_suffix (new2pc, newpath, nlen, ".exe");
- removepc = &newpc;
- }
- }
- else
- {
- /* If the new path is an existing .lnk symlink or a .exe file,
- but the new path has not been specified with explicit suffix,
- rename to the new name without suffix, as expected, but also
- remove the clashing symlink or executable. Did I ever mention
- how I hate the file suffix idea? */
- if ((newpc.is_lnk_special ()
- || RtlEqualUnicodePathSuffix (newpc.get_nt_native_path (),
- &ro_u_exe, TRUE))
- && !new_explicit_suffix)
- {
- new2pc.check (newpath, PC_SYM_NOFOLLOW, stat_suffixes);
- newpc.get_nt_native_path ()->Length -= 4 * sizeof (WCHAR);
- if (new2pc.is_binary () || new2pc.is_lnk_special ())
- removepc = &new2pc;
- }
- }
- }
- dstpc = (removepc == &newpc) ? &new2pc : &newpc;
-
- /* Check cross-device before touching anything. Otherwise we might end
- up with an unlinked target dir even if the actual rename didn't work.*/
- if (oldpc.fs_type () != dstpc->fs_type ()
- || oldpc.fs_serial_number () != dstpc->fs_serial_number ())
- {
- set_errno (EXDEV);
- __leave;
- }
-
- /* Opening the file must be part of the transaction. It's not sufficient
- to call only NtSetInformationFile under the transaction. Therefore we
- have to start the transaction here, if necessary. */
- if (wincap.has_transactions ()
- && (dstpc->fs_flags () & FILE_SUPPORTS_TRANSACTIONS)
- && (dstpc->isdir ()
- || (!removepc && dstpc->has_attribute (FILE_ATTRIBUTE_READONLY))))
- start_transaction (old_trans, trans);
-
- int retry_count;
- retry_count = 0;
- retry:
- /* Talking about inconsistent behaviour...
- - DELETE is required to rename a file. So far, so good.
- - At least one cifs FS (Tru64) needs FILE_READ_ATTRIBUTE, otherwise the
- FileRenameInformation call fails with STATUS_ACCESS_DENIED. However,
- on NFS we get a STATUS_ACCESS_DENIED if FILE_READ_ATTRIBUTE is used
- and the file we try to rename is a symlink. Urgh.
- - Samba (only some versions?) doesn't like the FILE_SHARE_DELETE
- mode if the file has the R/O attribute set and returns
- STATUS_ACCESS_DENIED in that case. */
- {
- ULONG access = DELETE
- | (oldpc.fs_is_cifs () ? FILE_READ_ATTRIBUTES : 0);
- ULONG sharing = FILE_SHARE_READ | FILE_SHARE_WRITE
- | (oldpc.fs_is_samba () ? 0 : FILE_SHARE_DELETE);
- ULONG flags = FILE_OPEN_FOR_BACKUP_INTENT
- | (oldpc.is_rep_symlink () ? FILE_OPEN_REPARSE_POINT : 0);
- status = NtOpenFile (&fh, access,
- oldpc.get_object_attr (attr, sec_none_nih),
- &io, sharing, flags);
- }
- if (!NT_SUCCESS (status))
- {
- debug_printf ("status %y", status);
- if (status == STATUS_SHARING_VIOLATION
- && cygwait (10L) != WAIT_SIGNALED)
- {
- /* Typical BLODA problem. Some virus scanners check newly
- generated files and while doing that disallow DELETE access.
- That's really bad because it breaks applications which copy
- files by creating a temporary filename and then rename the
- temp filename to the target filename. This renaming fails due
- to the jealous virus scanner and the application fails to
- create the target file.
-
- This kludge tries to work around that by yielding until the
- sharing violation goes away, or a signal arrived, or after
- about a second, give or take. */
- if (++retry_count < 40)
- {
- yield ();
- goto retry;
- }
- }
- else if (NT_TRANSACTIONAL_ERROR (status) && trans)
- {
- /* If NtOpenFile fails due to transactional problems, stop
- transaction and go ahead without. */
- stop_transaction (status, old_trans, trans);
- debug_printf ("Transaction failure. Retry open.");
- goto retry;
- }
- __seterrno_from_nt_status (status);
- __leave;
- }
-
- /* Renaming a dir to another, existing dir fails always, even if
- ReplaceIfExists is set to TRUE and the existing dir is empty. So
- we have to remove the destination dir first. This also covers the
- case that the destination directory is not empty. In that case,
- unlink_nt returns with STATUS_DIRECTORY_NOT_EMPTY. */
- if (dstpc->isdir ())
- {
- status = unlink_nt (*dstpc);
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- __leave;
- }
- }
- /* You can't copy a file if the destination exists and has the R/O
- attribute set. Remove the R/O attribute first. But first check
- if a removepc exists. If so, dstpc points to a non-existing file
- due to a mangled suffix. */
- else if (!removepc && dstpc->has_attribute (FILE_ATTRIBUTE_READONLY))
- {
- status = NtOpenFile (&nfh, FILE_WRITE_ATTRIBUTES,
- dstpc->get_object_attr (attr, sec_none_nih),
- &io, FILE_SHARE_VALID_FLAGS,
- FILE_OPEN_FOR_BACKUP_INTENT
- | (dstpc->is_rep_symlink ()
- ? FILE_OPEN_REPARSE_POINT : 0));
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- __leave;
- }
- status = NtSetAttributesFile (nfh, dstpc->file_attributes ()
- & ~FILE_ATTRIBUTE_READONLY);
- NtClose (nfh);
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- __leave;
- }
- }
-
- /* SUSv3: If the old argument and the new argument resolve to the same
- existing file, rename() shall return successfully and perform no
- other action.
- The test tries to be as quick as possible. Due to the above cross
- device check we already know both files are on the same device. So
- it just tests if oldpath has more than 1 hardlink, then it opens
- newpath and tests for identical file ids. If so, oldpath and newpath
- refer to the same file. */
- if ((removepc || dstpc->exists ())
- && !oldpc.isdir ()
- && NT_SUCCESS (NtQueryInformationFile (fh, &io, &ofsi, sizeof ofsi,
- FileStandardInformation))
- && ofsi.NumberOfLinks > 1
- && NT_SUCCESS (NtOpenFile (&nfh, READ_CONTROL,
- (removepc ?: dstpc)->get_object_attr (attr, sec_none_nih),
- &io, FILE_SHARE_VALID_FLAGS,
- FILE_OPEN_FOR_BACKUP_INTENT
- | ((removepc ?: dstpc)->is_rep_symlink ()
- ? FILE_OPEN_REPARSE_POINT : 0))))
- {
- FILE_INTERNAL_INFORMATION ofii, nfii;
-
- if (NT_SUCCESS (NtQueryInformationFile (fh, &io, &ofii, sizeof ofii,
- FileInternalInformation))
- && NT_SUCCESS (NtQueryInformationFile (nfh, &io, &nfii,
- sizeof nfii,
- FileInternalInformation))
- && ofii.FileId.QuadPart == nfii.FileId.QuadPart)
- {
- debug_printf ("%s and %s are the same file", oldpath, newpath);
- NtClose (nfh);
- res = 0;
- __leave;
- }
- NtClose (nfh);
- }
- /* Create FILE_RENAME_INFORMATION struct. Using a tmp_pathbuf area
- allows for paths of up to 32757 chars. This test is just for
- paranoia's sake. */
- if (dstpc->get_nt_native_path ()->Length
- > NT_MAX_PATH * sizeof (WCHAR) - sizeof (FILE_RENAME_INFORMATION))
- {
- debug_printf ("target filename too long");
- set_errno (EINVAL);
- __leave;
- }
- pfri = (PFILE_RENAME_INFORMATION) tp.w_get ();
- pfri->ReplaceIfExists = TRUE;
- pfri->RootDirectory = NULL;
- pfri->FileNameLength = dstpc->get_nt_native_path ()->Length;
- memcpy (&pfri->FileName, dstpc->get_nt_native_path ()->Buffer,
- pfri->FileNameLength);
- status = NtSetInformationFile (fh, &io, pfri,
- sizeof *pfri + pfri->FileNameLength,
- FileRenameInformation);
- /* This happens if the access rights don't allow deleting the destination.
- Even if the handle to the original file is opened with BACKUP
- and/or RECOVERY, these flags don't apply to the destination of the
- rename operation. So, a privileged user can't rename a file to an
- existing file, if the permissions of the existing file aren't right.
- Like directories, we have to handle this separately by removing the
- destination before renaming. */
- if (status == STATUS_ACCESS_DENIED && dstpc->exists ()
- && !dstpc->isdir ())
- {
- if (wincap.has_transactions ()
- && (dstpc->fs_flags () & FILE_SUPPORTS_TRANSACTIONS)
- && !trans)
- {
- start_transaction (old_trans, trans);
- /* As mentioned earlier, opening the file must be part of the
- transaction. Therefore we have to reopen the file here if the
- transaction hasn't been started already. Unfortunately we
- can't use the NT "reopen file from existing handle" feature.
- In that case NtOpenFile returns STATUS_TRANSACTIONAL_CONFLICT.
- We *have* to close the handle to the file first, *then* we can
- re-open it. Fortunately nothing has happened yet, so the
- atomicity of the rename functionality is not spoiled. */
- NtClose (fh);
- retry_reopen:
- status = NtOpenFile (&fh, DELETE,
- oldpc.get_object_attr (attr, sec_none_nih),
- &io, FILE_SHARE_VALID_FLAGS,
- FILE_OPEN_FOR_BACKUP_INTENT
- | (oldpc.is_rep_symlink ()
- ? FILE_OPEN_REPARSE_POINT : 0));
- if (!NT_SUCCESS (status))
- {
- if (NT_TRANSACTIONAL_ERROR (status) && trans)
- {
- /* If NtOpenFile fails due to transactional problems,
- stop transaction and go ahead without. */
- stop_transaction (status, old_trans, trans);
- debug_printf ("Transaction failure. Retry open.");
- goto retry_reopen;
- }
- __seterrno_from_nt_status (status);
- __leave;
- }
- }
- if (NT_SUCCESS (status = unlink_nt (*dstpc)))
- status = NtSetInformationFile (fh, &io, pfri,
- sizeof *pfri + pfri->FileNameLength,
- FileRenameInformation);
- }
- if (NT_SUCCESS (status))
- {
- if (removepc)
- unlink_nt (*removepc);
- res = 0;
- }
- else
- __seterrno_from_nt_status (status);
- }
- __except (EFAULT)
- {
- res = -1;
- }
- __endtry
- if (fh)
- NtClose (fh);
- /* Stop transaction if we started one. */
- if (trans)
- stop_transaction (status, old_trans, trans);
- if (get_errno () != EFAULT)
- syscall_printf ("%R = rename(%s, %s)", res, oldpath, newpath);
- return res;
-}
-
-extern "C" int
-system (const char *cmdstring)
-{
- pthread_testcancel ();
-
- if (cmdstring == NULL)
- return 1;
-
- int res = -1;
- const char* command[4];
-
- __try
- {
- command[0] = "sh";
- command[1] = "-c";
- command[2] = cmdstring;
- command[3] = (const char *) NULL;
-
- if ((res = spawnvp (_P_SYSTEM, "/bin/sh", command)) == -1)
- {
- // when exec fails, return value should be as if shell
- // executed exit (127)
- res = 127;
- }
- }
- __except (EFAULT) {}
- __endtry
- return res;
-}
-
-extern "C" int
-setdtablesize (int size)
-{
- if (size < 0)
- {
- set_errno (EINVAL);
- return -1;
- }
-
- if (size <= (int) cygheap->fdtab.size
- || cygheap->fdtab.extend (size - cygheap->fdtab.size, OPEN_MAX_MAX))
- return 0;
-
- return -1;
-}
-
-extern "C" int
-getdtablesize ()
-{
- return cygheap->fdtab.size;
-}
-
-extern "C" int
-getpagesize ()
-{
- return (size_t) wincap.allocation_granularity ();
-}
-
-/* FIXME: not all values are correct... */
-extern "C" long int
-fpathconf (int fd, int v)
-{
- cygheap_fdget cfd (fd);
- if (cfd < 0)
- return -1;
- return cfd->fpathconf (v);
-}
-
-extern "C" long int
-pathconf (const char *file, int v)
-{
- fhandler_base *fh = NULL;
- long ret = -1;
-
- __try
- {
- if (!*file)
- {
- set_errno (ENOENT);
- return -1;
- }
- if (!(fh = build_fh_name (file, PC_SYM_FOLLOW, stat_suffixes)))
- return -1;
- if (!fh->exists ())
- set_errno (ENOENT);
- else
- ret = fh->fpathconf (v);
- }
- __except (EFAULT) {}
- __endtry
- delete fh;
- return ret;
-}
-
-extern "C" int
-ttyname_r (int fd, char *buf, size_t buflen)
-{
- int ret = 0;
-
- __try
- {
- cygheap_fdget cfd (fd, true);
- if (cfd < 0)
- ret = EBADF;
- else if (!cfd->is_tty ())
- ret = ENOTTY;
- else if (buflen < strlen (cfd->ttyname ()) + 1)
- ret = ERANGE;
- else
- strcpy (buf, cfd->ttyname ());
- debug_printf ("returning %d tty: %s", ret, ret ? "NULL" : buf);
- }
- __except (NO_ERROR)
- {
- ret = EFAULT;
- }
- __endtry
- return ret;
-}
-
-extern "C" char *
-ttyname (int fd)
-{
- static char name[TTY_NAME_MAX];
- int ret = ttyname_r (fd, name, TTY_NAME_MAX);
- if (ret)
- {
- set_errno (ret);
- return NULL;
- }
- return name;
-}
-
-extern "C" char *
-ctermid (char *str)
-{
- if (str == NULL)
- str = _my_tls.locals.ttybuf;
- if (myself->ctty < 0)
- strcpy (str, "no tty");
- else
- {
- device d;
- d.parse (myself->ctty);
- strcpy (str, d.name);
- }
- return str;
-}
-
-/* Tells stdio if it should do the cr/lf conversion for this file */
-extern "C" int
-_cygwin_istext_for_stdio (int fd)
-{
- if (CYGWIN_VERSION_OLD_STDIO_CRLF_HANDLING)
- {
- syscall_printf ("fd %d: old API", fd);
- return 0; /* we do it for old apps, due to getc/putc macros */
- }
-
- cygheap_fdget cfd (fd, false, false);
- if (cfd < 0)
- {
- syscall_printf ("fd %d: not open", fd);
- return 0;
- }
-
-#if 0
- if (cfd->get_device () != FH_FS)
- {
- syscall_printf ("fd not disk file. Defaulting to binary.");
- return 0;
- }
-#endif
-
- if (cfd->wbinary () || cfd->rbinary ())
- {
- syscall_printf ("fd %d: opened as binary", fd);
- return 0;
- }
-
- syscall_printf ("fd %d: defaulting to text", fd);
- return 1;
-}
-
-/* internal newlib function */
-extern "C" int _fwalk (struct _reent *ptr, int (*function) (FILE *));
-
-static int
-setmode_helper (FILE *f)
-{
- if (fileno (f) != _my_tls.locals.setmode_file)
- {
- syscall_printf ("improbable, but %d != %d", fileno (f), _my_tls.locals.setmode_file);
- return 0;
- }
- syscall_printf ("file was %s now %s", f->_flags & __SCLE ? "text" : "binary",
- _my_tls.locals.setmode_mode & O_TEXT ? "text" : "binary");
- if (_my_tls.locals.setmode_mode & O_TEXT)
- f->_flags |= __SCLE;
- else
- f->_flags &= ~__SCLE;
- return 0;
-}
-
-extern "C" int
-getmode (int fd)
-{
- cygheap_fdget cfd (fd);
- if (cfd < 0)
- return -1;
-
- return cfd->get_flags () & (O_BINARY | O_TEXT);
-}
-
-/* Set a file descriptor into text or binary mode, returning the
- previous mode. */
-
-extern "C" int
-_setmode (int fd, int mode)
-{
- cygheap_fdget cfd (fd);
- if (cfd < 0)
- return -1;
- if (mode != O_BINARY && mode != O_TEXT && mode != 0)
- {
- set_errno (EINVAL);
- return -1;
- }
-
- /* Note that we have no way to indicate the case that writes are
- binary but not reads, or vice-versa. These cases can arise when
- using the tty or console interface. People using those
- interfaces should not use setmode. */
-
- int res;
- if (cfd->wbinary () && cfd->rbinary ())
- res = O_BINARY;
- else if (cfd->wbinset () && cfd->rbinset ())
- res = O_TEXT; /* Specifically set O_TEXT */
- else
- res = 0;
-
- if (!mode)
- cfd->reset_to_open_binmode ();
- else
- cfd->set_flags ((cfd->get_flags () & ~(O_TEXT | O_BINARY)) | mode);
-
- syscall_printf ("(%d<%S>, %p) returning %s", fd,
- cfd->pc.get_nt_native_path (), mode,
- res & O_TEXT ? "text" : "binary");
- return res;
-}
-
-extern "C" int
-cygwin_setmode (int fd, int mode)
-{
- int res = _setmode (fd, mode);
- if (res != -1)
- {
- _my_tls.locals.setmode_file = fd;
- if (_cygwin_istext_for_stdio (fd))
- _my_tls.locals.setmode_mode = O_TEXT;
- else
- _my_tls.locals.setmode_mode = O_BINARY;
- _fwalk (_GLOBAL_REENT, setmode_helper);
- }
- return res;
-}
-
-extern "C" int
-posix_fadvise (int fd, off_t offset, off_t len, int advice)
-{
- int res = -1;
- cygheap_fdget cfd (fd);
- if (cfd >= 0)
- res = cfd->fadvise (offset, len, advice);
- else
- set_errno (EBADF);
- syscall_printf ("%R = posix_fadvice(%d, %D, %D, %d)",
- res, fd, offset, len, advice);
- return res;
-}
-
-extern "C" int
-posix_fallocate (int fd, off_t offset, off_t len)
-{
- int res = -1;
- if (offset < 0 || len == 0)
- set_errno (EINVAL);
- else
- {
- cygheap_fdget cfd (fd);
- if (cfd >= 0)
- res = cfd->ftruncate (offset + len, false);
- else
- set_errno (EBADF);
- }
- syscall_printf ("%R = posix_fallocate(%d, %D, %D)", res, fd, offset, len);
- return res;
-}
-
-extern "C" int
-ftruncate64 (int fd, off_t length)
-{
- int res = -1;
- cygheap_fdget cfd (fd);
- if (cfd >= 0)
- res = cfd->ftruncate (length, true);
- else
- set_errno (EBADF);
- syscall_printf ("%R = ftruncate(%d, %D)", res, fd, length);
- return res;
-}
-
-#ifdef __x86_64__
-EXPORT_ALIAS (ftruncate64, ftruncate)
-#else
-/* ftruncate: P96 5.6.7.1 */
-extern "C" int
-ftruncate (int fd, _off_t length)
-{
- return ftruncate64 (fd, (off_t)length);
-}
-#endif
-
-/* truncate: Provided by SVR4 and 4.3+BSD. Not part of POSIX.1 or XPG3 */
-extern "C" int
-truncate64 (const char *pathname, off_t length)
-{
- int fd;
- int res = -1;
-
- fd = open (pathname, O_RDWR);
-
- if (fd != -1)
- {
- res = ftruncate64 (fd, length);
- close (fd);
- }
- syscall_printf ("%R = truncate(%s, %D)", res, pathname, length);
-
- return res;
-}
-
-#ifdef __x86_64__
-EXPORT_ALIAS (truncate64, truncate)
-#else
-/* truncate: Provided by SVR4 and 4.3+BSD. Not part of POSIX.1 or XPG3 */
-extern "C" int
-truncate (const char *pathname, _off_t length)
-{
- return truncate64 (pathname, (off_t)length);
-}
-#endif
-
-extern "C" long
-_get_osfhandle (int fd)
-{
- long res;
-
- cygheap_fdget cfd (fd);
- if (cfd >= 0)
- res = (long) cfd->get_handle ();
- else
- res = -1;
-
- syscall_printf ("%R = get_osfhandle(%d)", res, fd);
- return res;
-}
-
-extern "C" int
-fstatvfs (int fd, struct statvfs *sfs)
-{
- __try
- {
- cygheap_fdget cfd (fd);
- if (cfd < 0)
- __leave;
- return cfd->fstatvfs (sfs);
- }
- __except (EFAULT) {}
- __endtry
- return -1;
-}
-
-extern "C" int
-statvfs (const char *name, struct statvfs *sfs)
-{
- int res = -1;
- fhandler_base *fh = NULL;
-
- __try
- {
- if (!(fh = build_fh_name (name, PC_SYM_FOLLOW, stat_suffixes)))
- __leave;
-
- if (fh->error ())
- {
- debug_printf ("got %d error from build_fh_name", fh->error ());
- set_errno (fh->error ());
- }
- else if (fh->exists ())
- {
- debug_printf ("(%s, %p), file_attributes %d", name, sfs, (DWORD) *fh);
- res = fh->fstatvfs (sfs);
- }
- else
- set_errno (ENOENT);
-
- }
- __except (EFAULT) {}
- __endtry
- delete fh;
- MALLOC_CHECK;
- if (get_errno () != EFAULT)
- syscall_printf ("%R = statvfs(%s,%p)", res, name, sfs);
- return res;
-}
-
-extern "C" int
-fstatfs (int fd, struct statfs *sfs)
-{
- struct statvfs vfs;
- int ret = fstatvfs (fd, &vfs);
- if (!ret)
- {
- sfs->f_type = vfs.f_flag;
- sfs->f_bsize = vfs.f_bsize;
- sfs->f_blocks = vfs.f_blocks;
- sfs->f_bavail = vfs.f_bavail;
- sfs->f_bfree = vfs.f_bfree;
- sfs->f_files = -1;
- sfs->f_ffree = -1;
- sfs->f_fsid = vfs.f_fsid;
- sfs->f_namelen = vfs.f_namemax;
- }
- return ret;
-}
-
-extern "C" int
-statfs (const char *fname, struct statfs *sfs)
-{
- struct statvfs vfs;
- int ret = statvfs (fname, &vfs);
- if (!ret)
- {
- sfs->f_type = vfs.f_flag;
- sfs->f_bsize = vfs.f_bsize;
- sfs->f_blocks = vfs.f_blocks;
- sfs->f_bavail = vfs.f_bavail;
- sfs->f_bfree = vfs.f_bfree;
- sfs->f_files = -1;
- sfs->f_ffree = -1;
- sfs->f_fsid = vfs.f_fsid;
- sfs->f_namelen = vfs.f_namemax;
- }
- return ret;
-}
-
-/* setpgid: POSIX 4.3.3.1 */
-extern "C" int
-setpgid (pid_t pid, pid_t pgid)
-{
- int res = -1;
- if (pid == 0)
- pid = getpid ();
- if (pgid == 0)
- pgid = pid;
-
- if (pgid < 0)
- set_errno (EINVAL);
- else
- {
- pinfo p (pid, PID_MAP_RW);
- if (!p)
- set_errno (ESRCH);
- else if (p->pgid == pgid)
- res = 0;
- /* A process may only change the process group of itself and its children */
- else if (p != myself && p->ppid != myself->pid)
- set_errno (EPERM);
- else
- {
- p->pgid = pgid;
- if (p->pid != p->pgid)
- p->set_has_pgid_children (0);
- res = 0;
- }
- }
-
- syscall_printf ("pid %d, pgid %d, res %d", pid, pgid, res);
- return res;
-}
-
-extern "C" pid_t
-getpgid (pid_t pid)
-{
- if (pid == 0)
- pid = getpid ();
-
- pinfo p (pid);
- if (!p)
- {
- set_errno (ESRCH);
- return -1;
- }
- return p->pgid;
-}
-
-extern "C" int
-setpgrp (void)
-{
- return setpgid (0, 0);
-}
-
-extern "C" pid_t
-getpgrp (void)
-{
- return getpgid (0);
-}
-
-extern "C" char *
-ptsname (int fd)
-{
- static char buf[TTY_NAME_MAX];
- return ptsname_r (fd, buf, sizeof (buf)) == 0 ? buf : NULL;
-}
-
-extern "C" int
-ptsname_r (int fd, char *buf, size_t buflen)
-{
- if (!buf)
- {
- set_errno (EINVAL);
- return EINVAL;
- }
-
- cygheap_fdget cfd (fd);
- if (cfd < 0)
- return 0;
- return cfd->ptsname_r (buf, buflen);
-}
-
-static int __stdcall
-mknod_worker (const char *path, mode_t type, mode_t mode, _major_t major,
- _minor_t minor)
-{
- char buf[sizeof (":\\00000000:00000000:00000000") + PATH_MAX];
- sprintf (buf, ":\\%x:%x:%x", major, minor,
- type | (mode & (S_IRWXU | S_IRWXG | S_IRWXO)));
- return symlink_worker (buf, path, true);
-}
-
-extern "C" int
-mknod32 (const char *path, mode_t mode, dev_t dev)
-{
- __try
- {
- if (!*path)
- {
- set_errno (ENOENT);
- __leave;
- }
-
- if (strlen (path) >= PATH_MAX)
- __leave;
-
- path_conv w32path (path, PC_SYM_NOFOLLOW);
- if (w32path.exists ())
- {
- set_errno (EEXIST);
- __leave;
- }
-
- mode_t type = mode & S_IFMT;
- _major_t major = _major (dev);
- _minor_t minor = _minor (dev);
- switch (type)
- {
- case S_IFCHR:
- case S_IFBLK:
- break;
-
- case S_IFIFO:
- major = _major (FH_FIFO);
- minor = _minor (FH_FIFO);
- break;
-
- case 0:
- case S_IFREG:
- {
- int fd = open (path, O_CREAT, mode);
- if (fd < 0)
- __leave;
- close (fd);
- return 0;
- }
-
- default:
- set_errno (EINVAL);
- __leave;
- }
-
- return mknod_worker (w32path.get_win32 (), type, mode, major, minor);
- }
- __except (EFAULT)
- __endtry
- return -1;
-}
-
-extern "C" int
-mknod (const char *_path, mode_t mode, __dev16_t dev)
-{
- return mknod32 (_path, mode, (dev_t) dev);
-}
-
-extern "C" int
-mkfifo (const char *path, mode_t mode)
-{
- return mknod32 (path, (mode & ~S_IFMT) | S_IFIFO, 0);
-}
-
-/* seteuid: standards? */
-extern "C" int
-seteuid32 (uid_t uid)
-{
- debug_printf ("uid: %u myself->uid: %u myself->gid: %u",
- uid, myself->uid, myself->gid);
-
- /* Same uid as we're just running under is usually a no-op.
-
- Except we have an external token which is a restricted token. Or,
- the external token is NULL, but the current impersonation token is
- a restricted token. This allows to restrict user rights temporarily
- like this:
-
- cygwin_internal(CW_SET_EXTERNAL_TOKEN, restricted_token,
- CW_TOKEN_RESTRICTED);
- setuid (getuid ());
- [...do stuff with restricted rights...]
- cygwin_internal(CW_SET_EXTERNAL_TOKEN, INVALID_HANDLE_VALUE,
- CW_TOKEN_RESTRICTED);
- setuid (getuid ());
-
- Note that using the current uid is a requirement! Starting with Windows
- Vista, we have restricted tokens galore (UAC), so this is really just
- a special case to restict your own processes to lesser rights. */
- bool request_restricted_uid_switch = (uid == myself->uid
- && cygheap->user.ext_token_is_restricted);
- if (uid == myself->uid && !cygheap->user.groups.ischanged
- && !request_restricted_uid_switch)
- {
- debug_printf ("Nothing happens");
- return 0;
- }
-
- cygsid usersid;
- user_groups &groups = cygheap->user.groups;
- HANDLE new_token = INVALID_HANDLE_VALUE;
- struct passwd * pw_new;
- bool token_is_internal, issamesid = false;
-
- pw_new = internal_getpwuid (uid);
- if (!usersid.getfrompw (pw_new))
- {
- set_errno (EINVAL);
- return -1;
- }
-
- cygheap->user.deimpersonate ();
-
- /* Verify if the process token is suitable. */
- /* First of all, skip all checks if a switch to a restricted token has been
- requested, or if trying to switch back from it. */
- if (request_restricted_uid_switch)
- {
- if (cygheap->user.external_token != NO_IMPERSONATION)
- {
- debug_printf ("Switch to restricted token");
- new_token = cygheap->user.external_token;
- }
- else
- {
- debug_printf ("Switch back from restricted token");
- new_token = hProcToken;
- cygheap->user.ext_token_is_restricted = false;
- }
- }
- /* TODO, CV 2008-11-25: The check against saved_sid is a kludge and a
- shortcut. We must check if it's really feasible in the long run.
- The reason to add this shortcut is this: sshd switches back to the
- privileged user running sshd at least twice in the process of
- authentication. It calls seteuid first, then setegid. Due to this
- order, the setgroups group list is still active when calling seteuid
- and verify_token treats the original token of the privileged user as
- insufficient. This in turn results in creating a new user token for
- the privileged user instead of using the orignal token. This can have
- unfortunate side effects. The created token has different group
- memberships, different user rights, and misses possible network
- credentials.
- Therefore we try this shortcut now. When switching back to the
- privileged user, we probably always want a correct (aka original)
- user token for this privileged user, not only in sshd. */
- else if ((uid == cygheap->user.saved_uid
- && usersid == cygheap->user.saved_sid ())
- || verify_token (hProcToken, usersid, groups))
- new_token = hProcToken;
- /* Verify if the external token is suitable */
- else if (cygheap->user.external_token != NO_IMPERSONATION
- && verify_token (cygheap->user.external_token, usersid, groups))
- new_token = cygheap->user.external_token;
- /* Verify if the current token (internal or former external) is suitable */
- else if (cygheap->user.curr_primary_token != NO_IMPERSONATION
- && cygheap->user.curr_primary_token != cygheap->user.external_token
- && verify_token (cygheap->user.curr_primary_token, usersid, groups,
- &token_is_internal))
- new_token = cygheap->user.curr_primary_token;
- /* Verify if the internal token is suitable */
- else if (cygheap->user.internal_token != NO_IMPERSONATION
- && cygheap->user.internal_token != cygheap->user.curr_primary_token
- && verify_token (cygheap->user.internal_token, usersid, groups,
- &token_is_internal))
- new_token = cygheap->user.internal_token;
-
- debug_printf ("Found token %p", new_token);
-
- /* If no impersonation token is available, try to authenticate using
- LSA private data stored password, LSA authentication using our own
- LSA module, or, as last chance, NtCreateToken. */
- if (new_token == INVALID_HANDLE_VALUE)
- {
- new_token = lsaprivkeyauth (pw_new);
- if (new_token)
- {
- /* We have to verify this token since settings in /etc/group
- might render it unusable im terms of group membership. */
- if (!verify_token (new_token, usersid, groups))
- {
- CloseHandle (new_token);
- new_token = NULL;
- }
- }
- if (!new_token)
- {
- debug_printf ("lsaprivkeyauth failed, try lsaauth.");
- if (!(new_token = lsaauth (usersid, groups, pw_new)))
- {
- debug_printf ("lsaauth failed, try create_token.");
- new_token = create_token (usersid, groups, pw_new);
- if (new_token == INVALID_HANDLE_VALUE)
- {
- debug_printf ("create_token failed, bail out of here");
- cygheap->user.reimpersonate ();
- return -1;
- }
- }
- }
-
- /* Keep at most one internal token */
- if (cygheap->user.internal_token != NO_IMPERSONATION)
- CloseHandle (cygheap->user.internal_token);
- cygheap->user.internal_token = new_token;
- }
-
- if (new_token != hProcToken)
- {
- NTSTATUS status;
-
- if (!request_restricted_uid_switch)
- load_user_profile (new_token, pw_new, usersid);
-
- /* Try setting owner to same value as user. */
- status = NtSetInformationToken (new_token, TokenOwner,
- &usersid, sizeof usersid);
- if (!NT_SUCCESS (status))
- debug_printf ("NtSetInformationToken (user.token, TokenOwner), %y",
- status);
- /* Try setting primary group in token to current group */
- status = NtSetInformationToken (new_token, TokenPrimaryGroup,
- &groups.pgsid, sizeof (cygsid));
- if (!NT_SUCCESS (status))
- debug_printf ("NtSetInformationToken (user.token, TokenPrimaryGroup),"
- "%y", status);
- /* Try setting default DACL */
- PACL dacl_buf = (PACL) alloca (MAX_DACL_LEN (5));
- if (sec_acl (dacl_buf, true, true, usersid))
- {
- TOKEN_DEFAULT_DACL tdacl = { dacl_buf };
- status = NtSetInformationToken (new_token, TokenDefaultDacl,
- &tdacl, sizeof (tdacl));
- if (!NT_SUCCESS (status))
- debug_printf ("NtSetInformationToken (TokenDefaultDacl), %y",
- status);
- }
- }
-
- issamesid = (usersid == cygheap->user.sid ());
- cygheap->user.set_sid (usersid);
- cygheap->user.curr_primary_token = new_token == hProcToken ? NO_IMPERSONATION
- : new_token;
- cygheap->user.curr_token_is_restricted = false;
- cygheap->user.setuid_to_restricted = false;
- if (cygheap->user.curr_imp_token != NO_IMPERSONATION)
- {
- CloseHandle (cygheap->user.curr_imp_token);
- cygheap->user.curr_imp_token = NO_IMPERSONATION;
- }
- if (cygheap->user.curr_primary_token != NO_IMPERSONATION)
- {
- /* HANDLE_FLAG_INHERIT may be missing in external token. */
- if (!SetHandleInformation (cygheap->user.curr_primary_token,
- HANDLE_FLAG_INHERIT, HANDLE_FLAG_INHERIT)
- || !DuplicateTokenEx (cygheap->user.curr_primary_token,
- MAXIMUM_ALLOWED, &sec_none,
- SecurityImpersonation, TokenImpersonation,
- &cygheap->user.curr_imp_token))
- {
- __seterrno ();
- cygheap->user.curr_primary_token = NO_IMPERSONATION;
- return -1;
- }
- cygheap->user.curr_token_is_restricted = request_restricted_uid_switch;
- set_cygwin_privileges (cygheap->user.curr_primary_token);
- set_cygwin_privileges (cygheap->user.curr_imp_token);
- }
- if (!cygheap->user.reimpersonate ())
- {
- __seterrno ();
- return -1;
- }
-
- cygheap->user.set_name (pw_new->pw_name);
- myself->uid = uid;
- groups.ischanged = FALSE;
- if (!issamesid)
- /* Recreate and fill out the user shared region for a new user. */
- user_info::create (true);
- return 0;
-}
-
-#ifdef __x86_64__
-EXPORT_ALIAS (seteuid32, seteuid)
-#else
-extern "C" int
-seteuid (__uid16_t uid)
-{
- return seteuid32 (uid16touid32 (uid));
-}
-#endif
-
-/* setuid: POSIX 4.2.2.1 */
-extern "C" int
-setuid32 (uid_t uid)
-{
- int ret = seteuid32 (uid);
- if (!ret)
- {
- cygheap->user.real_uid = myself->uid;
- /* If restricted token, forget original privileges on exec (). */
- cygheap->user.setuid_to_restricted = cygheap->user.curr_token_is_restricted;
- }
- debug_printf ("real: %d, effective: %d", cygheap->user.real_uid, myself->uid);
- return ret;
-}
-
-#ifdef __x86_64__
-EXPORT_ALIAS (setuid32, setuid)
-#else
-extern "C" int
-setuid (__uid16_t uid)
-{
- return setuid32 (uid16touid32 (uid));
-}
-#endif
-
-extern "C" int
-setreuid32 (uid_t ruid, uid_t euid)
-{
- int ret = 0;
- bool tried = false;
- uid_t old_euid = myself->uid;
-
- if (ruid != ILLEGAL_UID && cygheap->user.real_uid != ruid && euid != ruid)
- tried = !(ret = seteuid32 (ruid));
- if (!ret && euid != ILLEGAL_UID)
- ret = seteuid32 (euid);
- if (tried && (ret || euid == ILLEGAL_UID) && seteuid32 (old_euid))
- system_printf ("Cannot restore original euid %u", old_euid);
- if (!ret && ruid != ILLEGAL_UID)
- cygheap->user.real_uid = ruid;
- debug_printf ("real: %u, effective: %u", cygheap->user.real_uid, myself->uid);
- return ret;
-}
-
-#ifdef __x86_64__
-EXPORT_ALIAS (setreuid32, setreuid)
-#else
-extern "C" int
-setreuid (__uid16_t ruid, __uid16_t euid)
-{
- return setreuid32 (uid16touid32 (ruid), uid16touid32 (euid));
-}
-#endif
-
-/* setegid: from System V. */
-extern "C" int
-setegid32 (gid_t gid)
-{
- debug_printf ("new egid: %u current: %u", gid, myself->gid);
-
- if (gid == myself->gid)
- {
- myself->gid = gid;
- return 0;
- }
-
- NTSTATUS status;
- user_groups * groups = &cygheap->user.groups;
- cygsid gsid;
- struct group * gr = internal_getgrgid (gid);
-
- if (!gsid.getfromgr (gr))
- {
- set_errno (EINVAL);
- return -1;
- }
- myself->gid = gid;
-
- groups->update_pgrp (gsid);
- if (cygheap->user.issetuid ())
- {
- /* If impersonated, update impersonation token... */
- status = NtSetInformationToken (cygheap->user.primary_token (),
- TokenPrimaryGroup, &gsid, sizeof gsid);
- if (!NT_SUCCESS (status))
- debug_printf ("NtSetInformationToken (primary_token, "
- "TokenPrimaryGroup), %y", status);
- status = NtSetInformationToken (cygheap->user.imp_token (),
- TokenPrimaryGroup, &gsid, sizeof gsid);
- if (!NT_SUCCESS (status))
- debug_printf ("NtSetInformationToken (token, TokenPrimaryGroup), %y",
- status);
- }
- cygheap->user.deimpersonate ();
- status = NtSetInformationToken (hProcToken, TokenPrimaryGroup,
- &gsid, sizeof gsid);
- if (!NT_SUCCESS (status))
- debug_printf ("NtSetInformationToken (hProcToken, TokenPrimaryGroup), %y",
- status);
- clear_procimptoken ();
- cygheap->user.reimpersonate ();
- return 0;
-}
-
-#ifdef __x86_64__
-EXPORT_ALIAS (setegid32, setegid)
-#else
-extern "C" int
-setegid (__gid16_t gid)
-{
- return setegid32 (gid16togid32 (gid));
-}
-#endif
-
-/* setgid: POSIX 4.2.2.1 */
-extern "C" int
-setgid32 (gid_t gid)
-{
- int ret = setegid32 (gid);
- if (!ret)
- cygheap->user.real_gid = myself->gid;
- return ret;
-}
-
-#ifdef __x86_64__
-EXPORT_ALIAS (setgid32, setgid)
-#else
-extern "C" int
-setgid (__gid16_t gid)
-{
- int ret = setegid32 (gid16togid32 (gid));
- if (!ret)
- cygheap->user.real_gid = myself->gid;
- return ret;
-}
-#endif
-
-extern "C" int
-setregid32 (gid_t rgid, gid_t egid)
-{
- int ret = 0;
- bool tried = false;
- gid_t old_egid = myself->gid;
-
- if (rgid != ILLEGAL_GID && cygheap->user.real_gid != rgid && egid != rgid)
- tried = !(ret = setegid32 (rgid));
- if (!ret && egid != ILLEGAL_GID)
- ret = setegid32 (egid);
- if (tried && (ret || egid == ILLEGAL_GID) && setegid32 (old_egid))
- system_printf ("Cannot restore original egid %u", old_egid);
- if (!ret && rgid != ILLEGAL_GID)
- cygheap->user.real_gid = rgid;
- debug_printf ("real: %u, effective: %u", cygheap->user.real_gid, myself->gid);
- return ret;
-}
-
-#ifdef __x86_64__
-EXPORT_ALIAS (setregid32, setregid)
-#else
-extern "C" int
-setregid (__gid16_t rgid, __gid16_t egid)
-{
- return setregid32 (gid16togid32 (rgid), gid16togid32 (egid));
-}
-#endif
-
-/* chroot: privileged Unix system call. */
-/* FIXME: Not privileged here. How should this be done? */
-extern "C" int
-chroot (const char *newroot)
-{
- path_conv path (newroot, PC_SYM_FOLLOW | PC_POSIX);
-
- int ret = -1;
- if (path.error)
- set_errno (path.error);
- else if (!path.exists ())
- set_errno (ENOENT);
- else if (!path.isdir ())
- set_errno (ENOTDIR);
- else if (path.isspecial ())
- set_errno (EPERM);
- else
- {
- getwinenv("PATH="); /* Save the native PATH */
- cygheap->root.set (path.normalized_path, path.get_win32 (),
- !!path.objcaseinsensitive ());
- ret = 0;
- }
-
- syscall_printf ("%R = chroot(%s)", ret, newroot ?: "NULL");
- return ret;
-}
-
-extern "C" int
-creat (const char *path, mode_t mode)
-{
- return open (path, O_WRONLY | O_CREAT | O_TRUNC, mode);
-}
-
-extern "C" void
-__assertfail ()
-{
- exit (99);
-}
-
-extern "C" int
-vhangup ()
-{
- set_errno (ENOSYS);
- return -1;
-}
-
-extern "C" int
-setpriority (int which, id_t who, int value)
-{
- DWORD prio = nice_to_winprio (value);
- int error = 0;
-
- switch (which)
- {
- case PRIO_PROCESS:
- if (!who)
- who = myself->pid;
- if ((pid_t) who == myself->pid)
- {
- if (!SetPriorityClass (GetCurrentProcess (), prio))
- {
- set_errno (EACCES);
- return -1;
- }
- myself->nice = value;
- debug_printf ("Set nice to %d", myself->nice);
- return 0;
- }
- break;
- case PRIO_PGRP:
- if (!who)
- who = myself->pgid;
- break;
- case PRIO_USER:
- if (!who)
- who = myself->uid;
- break;
- default:
- set_errno (EINVAL);
- return -1;
- }
- winpids pids ((DWORD) PID_MAP_RW);
- for (DWORD i = 0; i < pids.npids; ++i)
- {
- _pinfo *p = pids[i];
- if (p)
- {
- switch (which)
- {
- case PRIO_PROCESS:
- if ((pid_t) who != p->pid)
- continue;
- break;
- case PRIO_PGRP:
- if ((pid_t) who != p->pgid)
- continue;
- break;
- case PRIO_USER:
- if ((uid_t) who != p->uid)
- continue;
- break;
- }
- HANDLE proc_h = OpenProcess (PROCESS_SET_INFORMATION, FALSE,
- p->dwProcessId);
- if (!proc_h)
- error = EPERM;
- else
- {
- if (!SetPriorityClass (proc_h, prio))
- error = EACCES;
- else
- p->nice = value;
- CloseHandle (proc_h);
- }
- }
- }
- pids.reset ();
- if (error)
- {
- set_errno (error);
- return -1;
- }
- return 0;
-}
-
-extern "C" int
-getpriority (int which, id_t who)
-{
- int nice = NZERO * 2; /* Illegal value */
-
- switch (which)
- {
- case PRIO_PROCESS:
- if (!who)
- who = myself->pid;
- if ((pid_t) who == myself->pid)
- return myself->nice;
- break;
- case PRIO_PGRP:
- if (!who)
- who = myself->pgid;
- break;
- case PRIO_USER:
- if (!who)
- who = myself->uid;
- break;
- default:
- set_errno (EINVAL);
- return -1;
- }
- winpids pids ((DWORD) 0);
- for (DWORD i = 0; i < pids.npids; ++i)
- {
- _pinfo *p = pids[i];
- if (p)
- switch (which)
- {
- case PRIO_PROCESS:
- if ((pid_t) who == p->pid)
- {
- nice = p->nice;
- goto out;
- }
- break;
- case PRIO_PGRP:
- if ((pid_t) who == p->pgid && p->nice < nice)
- nice = p->nice;
- break;
- case PRIO_USER:
- if ((uid_t) who == p->uid && p->nice < nice)
- nice = p->nice;
- break;
- }
- }
-out:
- pids.reset ();
- if (nice == NZERO * 2)
- {
- set_errno (ESRCH);
- return -1;
- }
- return nice;
-}
-
-extern "C" int
-nice (int incr)
-{
- return setpriority (PRIO_PROCESS, myself->pid, myself->nice + incr);
-}
-
-/*
- * Find the first bit set in I.
- */
-
-extern "C" int
-ffs (int i)
-{
- return __builtin_ffs (i);
-}
-
-extern "C" int
-ffsl (long i)
-{
- return __builtin_ffsl (i);
-}
-
-extern "C" int
-ffsll (long long i)
-{
- return __builtin_ffsll (i);
-}
-
-static void
-locked_append (int fd, const void * buf, size_t size)
-{
- struct flock lock_buffer = {F_WRLCK, SEEK_SET, 0, 0, 0};
- int count = 0;
-
- do
- if ((lock_buffer.l_start = lseek64 (fd, 0, SEEK_END)) != (off_t) -1
- && fcntl64 (fd, F_SETLKW, &lock_buffer) != -1)
- {
- if (lseek64 (fd, 0, SEEK_END) != (off_t) -1)
- write (fd, buf, size);
- lock_buffer.l_type = F_UNLCK;
- fcntl64 (fd, F_SETLK, &lock_buffer);
- break;
- }
- while (count++ < 1000
- && (errno == EACCES || errno == EAGAIN)
- && !usleep (1000));
-}
-
-extern "C" void
-updwtmp (const char *wtmp_file, const struct utmp *ut)
-{
- int fd;
-
- if ((fd = open (wtmp_file, O_WRONLY | O_BINARY, 0)) >= 0)
- {
- locked_append (fd, ut, sizeof *ut);
- close (fd);
- }
-}
-
-static int utmp_fd = -1;
-static bool utmp_readonly = false;
-static char *utmp_file = (char *) _PATH_UTMP;
-
-static void
-internal_setutent (bool force_readwrite)
-{
- if (force_readwrite && utmp_readonly)
- endutent ();
- if (utmp_fd < 0)
- {
- utmp_fd = open (utmp_file, O_RDWR | O_BINARY);
- /* If open fails, we assume an unprivileged process (who?). In this
- case we try again for reading only unless the process calls
- pututline() (==force_readwrite) in which case opening just fails. */
- if (utmp_fd < 0 && !force_readwrite)
- {
- utmp_fd = open (utmp_file, O_RDONLY | O_BINARY);
- if (utmp_fd >= 0)
- utmp_readonly = true;
- }
- }
- else
- lseek (utmp_fd, 0, SEEK_SET);
-}
-
-extern "C" void
-setutent ()
-{
- internal_setutent (false);
-}
-
-extern "C" void
-endutent ()
-{
- if (utmp_fd >= 0)
- {
- close (utmp_fd);
- utmp_fd = -1;
- utmp_readonly = false;
- }
-}
-
-extern "C" void
-utmpname (const char *file)
-{
- __try
- {
- if (*file)
- {
- endutent ();
- utmp_file = strdup (file);
- debug_printf ("New UTMP file: %s", utmp_file);
- return;
- }
- }
- __except (NO_ERROR) {}
- __endtry
- debug_printf ("Invalid file");
-}
-
-EXPORT_ALIAS (utmpname, utmpxname)
-
-/* Note: do not make NO_COPY */
-static struct utmp utmp_data_buf[16];
-static unsigned utix = 0;
-#define nutdbuf (sizeof (utmp_data_buf) / sizeof (utmp_data_buf[0]))
-#define utmp_data ({ \
- if (utix >= nutdbuf) \
- utix = 0; \
- utmp_data_buf + utix++; \
-})
-
-static struct utmpx *
-copy_ut_to_utx (struct utmp *ut, struct utmpx *utx)
-{
- if (!ut)
- return NULL;
- memcpy (utx, ut, sizeof *ut);
- utx->ut_tv.tv_sec = ut->ut_time;
- utx->ut_tv.tv_usec = 0;
- return utx;
-}
-
-extern "C" struct utmp *
-getutent ()
-{
- if (utmp_fd < 0)
- {
- internal_setutent (false);
- if (utmp_fd < 0)
- return NULL;
- }
-
- utmp *ut = utmp_data;
- if (read (utmp_fd, ut, sizeof *ut) != sizeof *ut)
- return NULL;
- return ut;
-}
-
-extern "C" struct utmp *
-getutid (const struct utmp *id)
-{
- __try
- {
- if (utmp_fd < 0)
- {
- internal_setutent (false);
- if (utmp_fd < 0)
- __leave;
- }
- utmp *ut = utmp_data;
- while (read (utmp_fd, ut, sizeof *ut) == sizeof *ut)
- {
- switch (id->ut_type)
- {
- case RUN_LVL:
- case BOOT_TIME:
- case OLD_TIME:
- case NEW_TIME:
- if (id->ut_type == ut->ut_type)
- return ut;
- break;
- case INIT_PROCESS:
- case LOGIN_PROCESS:
- case USER_PROCESS:
- case DEAD_PROCESS:
- if (strncmp (id->ut_id, ut->ut_id, UT_IDLEN) == 0)
- return ut;
- break;
- default:
- break;
- }
- }
- }
- __except (EFAULT) {}
- __endtry
- return NULL;
-}
-
-extern "C" struct utmp *
-getutline (const struct utmp *line)
-{
- __try
- {
- if (utmp_fd < 0)
- {
- internal_setutent (false);
- if (utmp_fd < 0)
- __leave;
- }
-
- utmp *ut = utmp_data;
- while (read (utmp_fd, ut, sizeof *ut) == sizeof *ut)
- if ((ut->ut_type == LOGIN_PROCESS ||
- ut->ut_type == USER_PROCESS) &&
- !strncmp (ut->ut_line, line->ut_line, sizeof (ut->ut_line)))
- return ut;
- }
- __except (EFAULT) {}
- __endtry
- return NULL;
-}
-
-extern "C" struct utmp *
-pututline (const struct utmp *ut)
-{
- __try
- {
- internal_setutent (true);
- if (utmp_fd < 0)
- {
- debug_printf ("error: utmp_fd %d", utmp_fd);
- __leave;
- }
- debug_printf ("ut->ut_type %d, ut->ut_pid %d, ut->ut_line '%s', ut->ut_id '%s'\n",
- ut->ut_type, ut->ut_pid, ut->ut_line, ut->ut_id);
- debug_printf ("ut->ut_user '%s', ut->ut_host '%s'\n",
- ut->ut_user, ut->ut_host);
-
- struct utmp *u;
- if ((u = getutid (ut)))
- {
- lseek (utmp_fd, -sizeof *ut, SEEK_CUR);
- write (utmp_fd, ut, sizeof *ut);
- }
- else
- locked_append (utmp_fd, ut, sizeof *ut);
- /* The documentation says to return a pointer to this which implies that
- this has to be cast from a const. That doesn't seem right but the
- documentation seems pretty clear on this. */
- return (struct utmp *) ut;
- }
- __except (EFAULT) {}
- __endtry
- return NULL;
-}
-
-extern "C" void
-setutxent ()
-{
- internal_setutent (false);
-}
-
-extern "C" void
-endutxent ()
-{
- endutent ();
-}
-
-extern "C" struct utmpx *
-getutxent ()
-{
- /* POSIX: Not required to be thread safe. */
- static struct utmpx utx;
- return copy_ut_to_utx (getutent (), &utx);
-}
-
-extern "C" struct utmpx *
-getutxid (const struct utmpx *id)
-{
- /* POSIX: Not required to be thread safe. */
- static struct utmpx utx;
-
- __try
- {
- ((struct utmpx *)id)->ut_time = id->ut_tv.tv_sec;
- return copy_ut_to_utx (getutid ((struct utmp *) id), &utx);
- }
- __except (EFAULT) {}
- __endtry
- return NULL;
-}
-
-extern "C" struct utmpx *
-getutxline (const struct utmpx *line)
-{
- /* POSIX: Not required to be thread safe. */
- static struct utmpx utx;
-
- __try
- {
- ((struct utmpx *)line)->ut_time = line->ut_tv.tv_sec;
- return copy_ut_to_utx (getutline ((struct utmp *) line), &utx);
- }
- __except (EFAULT) {}
- __endtry
- return NULL;
-}
-
-extern "C" struct utmpx *
-pututxline (const struct utmpx *utmpx)
-{
- /* POSIX: Not required to be thread safe. */
- static struct utmpx utx;
-
- __try
- {
- ((struct utmpx *)utmpx)->ut_time = utmpx->ut_tv.tv_sec;
- return copy_ut_to_utx (pututline ((struct utmp *) utmpx), &utx);
- }
- __except (EFAULT) {}
- __endtry
- return NULL;
-}
-
-extern "C" void
-updwtmpx (const char *wtmpx_file, const struct utmpx *utmpx)
-{
- ((struct utmpx *)utmpx)->ut_time = utmpx->ut_tv.tv_sec;
- updwtmp (wtmpx_file, (const struct utmp *) utmpx);
-}
-
-extern "C" long
-gethostid (void)
-{
- /* Fetch the globally unique MachineGuid value from
- HKLM/Software/Microsoft/Cryptography and hash it. */
-
- /* Caution: sizeof long might become > 4 when we go 64 bit, but gethostid
- is supposed to return a 32 bit value, despite the return type long.
- That's why hostid is *not* long here. */
- int32_t hostid = 0x40291372; /* Choose a nice start value */
- WCHAR wguid[38];
-
- reg_key key (HKEY_LOCAL_MACHINE,
- KEY_READ | (wincap.is_wow64() ? KEY_WOW64_64KEY : 0),
- L"SOFTWARE", L"Microsoft", L"Cryptography", NULL);
- key.get_string (L"MachineGuid", wguid, 38,
- L"00000000-0000-0000-0000-000000000000");
- /* SDBM hash */
- for (PWCHAR wp = wguid; *wp; ++wp)
- hostid = *wp + (hostid << 6) + (hostid << 16) - hostid;
- debug_printf ("hostid %08y from MachineGuid %W", hostid, wguid);
- return (int32_t) hostid; /* Avoid sign extension. */
-}
-
-#define ETC_SHELLS "/etc/shells"
-static int shell_index;
-static struct __sFILE64 *shell_fp;
-
-extern "C" char *
-getusershell ()
-{
- /* List of default shells if no /etc/shells exists, defined as on Linux.
- FIXME: SunOS has a far longer list, containing all shells which
- might be shipped with the OS. Should we do the same for the Cygwin
- distro, adding bash, tcsh, ksh, pdksh and zsh? */
- static const char *def_shells[] = {
- "/bin/sh",
- "/bin/csh",
- "/usr/bin/sh",
- "/usr/bin/csh",
- NULL
- };
- static char buf[PATH_MAX];
- int ch, buf_idx;
-
- if (!shell_fp && !(shell_fp = fopen64 (ETC_SHELLS, "rt")))
- {
- if (def_shells[shell_index])
- return strcpy (buf, def_shells[shell_index++]);
- return NULL;
- }
- /* Skip white space characters. */
- while ((ch = getc (shell_fp)) != EOF && isspace (ch))
- ;
- /* Get each non-whitespace character as part of the shell path as long as
- it fits in buf. */
- for (buf_idx = 0;
- ch != EOF && !isspace (ch) && buf_idx < (PATH_MAX - 1);
- buf_idx++, ch = getc (shell_fp))
- buf[buf_idx] = ch;
- /* Skip any trailing non-whitespace character not fitting in buf. If the
- path is longer than PATH_MAX, it's invalid anyway. */
- while (ch != EOF && !isspace (ch))
- ch = getc (shell_fp);
- if (buf_idx)
- {
- buf[buf_idx] = '\0';
- return buf;
- }
- return NULL;
-}
-
-extern "C" void
-setusershell ()
-{
- if (shell_fp)
- fseek (shell_fp, 0L, SEEK_SET);
- shell_index = 0;
-}
-
-extern "C" void
-endusershell ()
-{
- if (shell_fp)
- {
- fclose (shell_fp);
- shell_fp = NULL;
- }
- shell_index = 0;
-}
-
-extern "C" void
-flockfile (FILE *file)
-{
- _flockfile (file);
-}
-
-extern "C" int
-ftrylockfile (FILE *file)
-{
- return _ftrylockfile (file);
-}
-
-extern "C" void
-funlockfile (FILE *file)
-{
- _funlockfile (file);
-}
-
-extern "C" FILE *
-popen (const char *command, const char *in_type)
-{
- const char *type = in_type;
- char fdopen_flags[3] = "\0\0";
- int pipe_flags = 0;
-
-#define rw fdopen_flags[0]
-#define bintext fdopen_flags[1]
-
- /* Sanity check. GLibc allows any order and any number of repetition,
- as long as the string doesn't contradict itself. We do the same here. */
- while (*type)
- {
- if (*type == 'r' || *type == 'w')
- {
- if (rw && rw != *type)
- break;
- rw = *type++;
- }
- else if (*type == 'b' || *type == 't')
- {
- if (bintext && bintext != *type)
- break;
- bintext = *type++;
- }
- else if (*type == 'e')
- {
- pipe_flags = O_CLOEXEC;
- ++type;
- }
- else
- break;
- }
- if ((rw != 'r' && rw != 'w') || (*type != '\0'))
- {
- set_errno (EINVAL);
- return NULL;
- }
-
- int fds[2];
- if (pipe2 (fds, pipe_flags) < 0)
- return NULL;
-
- int myix = rw == 'r' ? 0 : 1;
-
- lock_process now;
- FILE *fp = fdopen (fds[myix], fdopen_flags);
- if (fp)
- {
- /* If fds are in the range of stdin/stdout/stderr, move them
- out of the way (possibly temporarily). Otherwise, spawn_guts
- will be confused. We do this here rather than adding logic to
- spawn_guts because spawn_guts is likely to be a more frequently
- used routine and having stdin/stdout/stderr closed and reassigned
- to pipe handles is an unlikely event. */
- int orig_fds[2] = {fds[0], fds[1]};
- for (int i = 0; i < 2; i++)
- if (fds[i] <= 2)
- {
- cygheap_fdnew newfd(3);
- cygheap->fdtab.move_fd (fds[i], newfd);
- fds[i] = newfd;
- }
-
- int myfd = fds[myix]; /* myfd - convenience variable for manipulation
- of the "parent" end of the pipe. */
- int stdchild = myix ^ 1; /* stdchild denotes the index into fd for the
- handle which will be redirected to
- stdin/stdout */
- int __std[2];
- __std[myix] = -1; /* -1 means don't pass this fd to the child
- process */
- __std[stdchild] = fds[stdchild]; /* Do pass this as the std handle */
-
- const char *argv[4] =
- {
- "/bin/sh",
- "-c",
- command,
- NULL
- };
-
- /* With 'e' flag given, we have to revert the close-on-exec on the child
- end of the pipe. Otherwise don't pass our end of the pipe to the
- child process. */
- if (pipe_flags & O_CLOEXEC)
- fcntl64 (__std[stdchild], F_SETFD, 0);
- else
- fcntl64 (myfd, F_SETFD, FD_CLOEXEC);
-
- /* Also don't pass the file handle currently associated with stdin/stdout
- to the child. This function may actually fail if the stdchild fd
- is closed. But that's ok. */
- int stdchild_state = fcntl64 (stdchild, F_GETFD, 0);
- fcntl64 (stdchild, F_SETFD, stdchild_state | FD_CLOEXEC);
-
- /* Start a shell process to run the given command without forking. */
- pid_t pid = ch_spawn.worker ("/bin/sh", argv, cur_environ (), _P_NOWAIT,
- __std[0], __std[1]);
-
- /* Reinstate the close-on-exec state */
- fcntl64 (stdchild, F_SETFD, stdchild_state);
-
- /* If pid >= 0 then spawn_guts succeeded. */
- if (pid >= 0)
- {
- close (fds[stdchild]); /* Close the child end of the pipe. */
- /* Move the fd back to its original slot if it has been moved since
- we're always supposed to open the lowest numbered available fd
- and, if fds[mix] != orig_fds[myix] then orig_fds[myix] is
- presumably lower. */
- if (fds[myix] != orig_fds[myix])
- cygheap->fdtab.move_fd (fds[myix], myfd = orig_fds[myix]);
- fhandler_pipe *fh = (fhandler_pipe *) cygheap->fdtab[myfd];
- /* Flag that this handle is associated with popen. */
- fh->set_popen_pid (pid);
- return fp;
- }
- }
-
- /* If we reach here we've seen an error but the pipe handles are open.
- Close them and return NULL. */
- int save_errno = get_errno ();
- if (fp)
- {
- /* Must fclose fp to avoid memory leak. */
- fclose (fp);
- close (fds[myix ^ 1]);
- }
- else
- {
- close (fds[0]);
- close (fds[1]);
- }
- set_errno (save_errno);
-
-#undef rw
-#undef bintext
-
- return NULL;
-}
-
-int
-pclose (FILE *fp)
-{
- fhandler_pipe *fh = (fhandler_pipe *) cygheap->fdtab[fileno(fp)];
-
- if (fh->get_device () != FH_PIPEW && fh->get_device () != FH_PIPER)
- {
- set_errno (EBADF);
- return -1;
- }
-
- int pid = fh->get_popen_pid ();
- if (!pid)
- {
- set_errno (ECHILD);
- return -1;
- }
-
- if (fclose (fp))
- return -1;
-
- int status;
- while (1)
- if (waitpid (pid, &status, 0) == pid)
- break;
- else if (get_errno () == EINTR)
- continue;
- else
- return -1;
-
- return status;
-}
-
-/* Preliminary(?) implementation of the openat family of functions. */
-
-static int
-gen_full_path_at (char *path_ret, int dirfd, const char *pathname,
- bool null_pathname_allowed = false)
-{
- /* Set null_pathname_allowed to true to allow GLIBC compatible behaviour
- for NULL pathname. Only used by futimesat. */
- if (!pathname && !null_pathname_allowed)
- {
- set_errno (EFAULT);
- return -1;
- }
- if (pathname)
- {
- if (!*pathname)
- {
- set_errno (ENOENT);
- return -1;
- }
- if (strlen (pathname) >= PATH_MAX)
- {
- set_errno (ENAMETOOLONG);
- return -1;
- }
- }
- if (pathname && isabspath (pathname))
- stpcpy (path_ret, pathname);
- else
- {
- char *p;
-
- if (dirfd == AT_FDCWD)
- {
- cwdstuff::cwd_lock.acquire ();
- p = stpcpy (path_ret, cygheap->cwd.get_posix ());
- cwdstuff::cwd_lock.release ();
- }
- else
- {
- cygheap_fdget cfd (dirfd);
- if (cfd < 0)
- return -1;
- if (!cfd->pc.isdir ())
- {
- set_errno (ENOTDIR);
- return -1;
- }
- p = stpcpy (path_ret, cfd->get_name ());
- }
- if (!p)
- {
- set_errno (ENOTDIR);
- return -1;
- }
- if (pathname)
- {
- if (p[-1] != '/')
- *p++ = '/';
- stpcpy (p, pathname);
- }
- }
- return 0;
-}
-
-extern "C" int
-openat (int dirfd, const char *pathname, int flags, ...)
-{
- tmp_pathbuf tp;
- __try
- {
- char *path = tp.c_get ();
- if (gen_full_path_at (path, dirfd, pathname))
- __leave;
-
- va_list ap;
- mode_t mode;
-
- va_start (ap, flags);
- mode = va_arg (ap, mode_t);
- va_end (ap);
- return open (path, flags, mode);
- }
- __except (EFAULT) {}
- __endtry
- return -1;
-}
-
-extern "C" int
-faccessat (int dirfd, const char *pathname, int mode, int flags)
-{
- tmp_pathbuf tp;
- int res = -1;
-
- __try
- {
- char *path = tp.c_get ();
- if (!gen_full_path_at (path, dirfd, pathname))
- {
- if ((mode & ~(F_OK|R_OK|W_OK|X_OK))
- || (flags & ~(AT_SYMLINK_NOFOLLOW|AT_EACCESS)))
- set_errno (EINVAL);
- else
- {
- fhandler_base *fh = build_fh_name (path,
- (flags & AT_SYMLINK_NOFOLLOW
- ? PC_SYM_NOFOLLOW
- : PC_SYM_FOLLOW)
- | PC_KEEP_HANDLE,
- stat_suffixes);
- if (fh)
- {
- res = fh->fhaccess (mode, !!(flags & AT_EACCESS));
- delete fh;
- }
- }
- }
- }
- __except (EFAULT) {}
- __endtry
- debug_printf ("returning %d", res);
- return res;
-}
-
-extern "C" int
-fchmodat (int dirfd, const char *pathname, mode_t mode, int flags)
-{
- tmp_pathbuf tp;
- __try
- {
- if (flags)
- {
- /* BSD has lchmod, but Linux does not. POSIX says
- AT_SYMLINK_NOFOLLOW is allowed to fail on symlinks; but Linux
- blindly fails even for non-symlinks. */
- set_errno ((flags & ~AT_SYMLINK_NOFOLLOW) ? EINVAL : EOPNOTSUPP);
- __leave;
- }
- char *path = tp.c_get ();
- if (gen_full_path_at (path, dirfd, pathname))
- __leave;
- return chmod (path, mode);
- }
- __except (EFAULT) {}
- __endtry
- return -1;
-}
-
-extern "C" int
-fchownat (int dirfd, const char *pathname, uid_t uid, gid_t gid, int flags)
-{
- tmp_pathbuf tp;
- __try
- {
- if (flags & ~AT_SYMLINK_NOFOLLOW)
- {
- set_errno (EINVAL);
- __leave;
- }
- char *path = tp.c_get ();
- if (gen_full_path_at (path, dirfd, pathname))
- __leave;
- return chown_worker (path, (flags & AT_SYMLINK_NOFOLLOW)
- ? PC_SYM_NOFOLLOW : PC_SYM_FOLLOW, uid, gid);
- }
- __except (EFAULT) {}
- __endtry
- return -1;
-}
-
-extern "C" int
-fstatat (int dirfd, const char *__restrict pathname, struct stat *__restrict st,
- int flags)
-{
- tmp_pathbuf tp;
- __try
- {
- if (flags & ~AT_SYMLINK_NOFOLLOW)
- {
- set_errno (EINVAL);
- __leave;
- }
- char *path = tp.c_get ();
- if (gen_full_path_at (path, dirfd, pathname))
- __leave;
- path_conv pc (path, ((flags & AT_SYMLINK_NOFOLLOW)
- ? PC_SYM_NOFOLLOW : PC_SYM_FOLLOW)
- | PC_POSIX | PC_KEEP_HANDLE, stat_suffixes);
- return stat_worker (pc, st);
- }
- __except (EFAULT) {}
- __endtry
- return -1;
-}
-
-extern int utimens_worker (path_conv &, const struct timespec *);
-
-extern "C" int
-utimensat (int dirfd, const char *pathname, const struct timespec *times,
- int flags)
-{
- tmp_pathbuf tp;
- __try
- {
- char *path = tp.c_get ();
- if (flags & ~AT_SYMLINK_NOFOLLOW)
- {
- set_errno (EINVAL);
- __leave;
- }
- if (gen_full_path_at (path, dirfd, pathname))
- __leave;
- path_conv win32 (path, PC_POSIX | ((flags & AT_SYMLINK_NOFOLLOW)
- ? PC_SYM_NOFOLLOW : PC_SYM_FOLLOW),
- stat_suffixes);
- return utimens_worker (win32, times);
- }
- __except (EFAULT) {}
- __endtry
- return -1;
-}
-
-extern "C" int
-futimesat (int dirfd, const char *pathname, const struct timeval *times)
-{
- tmp_pathbuf tp;
- __try
- {
- char *path = tp.c_get ();
- if (gen_full_path_at (path, dirfd, pathname, true))
- __leave;
- return utimes (path, times);
- }
- __except (EFAULT) {}
- __endtry
- return -1;
-}
-
-extern "C" int
-linkat (int olddirfd, const char *oldpathname,
- int newdirfd, const char *newpathname,
- int flags)
-{
- tmp_pathbuf tp;
- __try
- {
- if (flags & ~AT_SYMLINK_FOLLOW)
- {
- set_errno (EINVAL);
- __leave;
- }
- char *oldpath = tp.c_get ();
- if (gen_full_path_at (oldpath, olddirfd, oldpathname))
- __leave;
- char *newpath = tp.c_get ();
- if (gen_full_path_at (newpath, newdirfd, newpathname))
- __leave;
- if (flags & AT_SYMLINK_FOLLOW)
- {
- path_conv old_name (oldpath, PC_SYM_FOLLOW | PC_POSIX, stat_suffixes);
- if (old_name.error)
- {
- set_errno (old_name.error);
- __leave;
- }
- strcpy (oldpath, old_name.normalized_path);
- }
- return link (oldpath, newpath);
- }
- __except (EFAULT) {}
- __endtry
- return -1;
-}
-
-extern "C" int
-mkdirat (int dirfd, const char *pathname, mode_t mode)
-{
- tmp_pathbuf tp;
- __try
- {
- char *path = tp.c_get ();
- if (gen_full_path_at (path, dirfd, pathname))
- __leave;
- return mkdir (path, mode);
- }
- __except (EFAULT) {}
- __endtry
- return -1;
-}
-
-extern "C" int
-mkfifoat (int dirfd, const char *pathname, mode_t mode)
-{
- tmp_pathbuf tp;
- __try
- {
- char *path = tp.c_get ();
- if (gen_full_path_at (path, dirfd, pathname))
- __leave;
- return mkfifo (path, mode);
- }
- __except (EFAULT) {}
- __endtry
- return -1;
-}
-
-extern "C" int
-mknodat (int dirfd, const char *pathname, mode_t mode, dev_t dev)
-{
- tmp_pathbuf tp;
- __try
- {
- char *path = tp.c_get ();
- if (gen_full_path_at (path, dirfd, pathname))
- __leave;
- return mknod32 (path, mode, dev);
- }
- __except (EFAULT) {}
- __endtry
- return -1;
-}
-
-extern "C" ssize_t
-readlinkat (int dirfd, const char *__restrict pathname, char *__restrict buf,
- size_t bufsize)
-{
- tmp_pathbuf tp;
- __try
- {
- char *path = tp.c_get ();
- if (gen_full_path_at (path, dirfd, pathname))
- __leave;
- return readlink (path, buf, bufsize);
- }
- __except (EFAULT) {}
- __endtry
- return -1;
-}
-
-extern "C" int
-renameat (int olddirfd, const char *oldpathname,
- int newdirfd, const char *newpathname)
-{
- tmp_pathbuf tp;
- __try
- {
- char *oldpath = tp.c_get ();
- if (gen_full_path_at (oldpath, olddirfd, oldpathname))
- __leave;
- char *newpath = tp.c_get ();
- if (gen_full_path_at (newpath, newdirfd, newpathname))
- __leave;
- return rename (oldpath, newpath);
- }
- __except (EFAULT) {}
- __endtry
- return -1;
-}
-
-extern "C" int
-scandirat (int dirfd, const char *pathname, struct dirent ***namelist,
- int (*select) (const struct dirent *),
- int (*compar) (const struct dirent **, const struct dirent **))
-{
- tmp_pathbuf tp;
- __try
- {
- char *path = tp.c_get ();
- if (gen_full_path_at (path, dirfd, pathname))
- __leave;
- return scandir (pathname, namelist, select, compar);
- }
- __except (EFAULT) {}
- __endtry
- return -1;
-}
-
-extern "C" int
-symlinkat (const char *oldpath, int newdirfd, const char *newpathname)
-{
- tmp_pathbuf tp;
- __try
- {
- char *newpath = tp.c_get ();
- if (gen_full_path_at (newpath, newdirfd, newpathname))
- __leave;
- return symlink (oldpath, newpath);
- }
- __except (EFAULT) {}
- __endtry
- return -1;
-}
-
-extern "C" int
-unlinkat (int dirfd, const char *pathname, int flags)
-{
- tmp_pathbuf tp;
- __try
- {
- if (flags & ~AT_REMOVEDIR)
- {
- set_errno (EINVAL);
- __leave;
- }
- char *path = tp.c_get ();
- if (gen_full_path_at (path, dirfd, pathname))
- __leave;
- return (flags & AT_REMOVEDIR) ? rmdir (path) : unlink (path);
- }
- __except (EFAULT) {}
- __endtry
- return -1;
-}
diff --git a/winsup/cygwin/sysconf.cc b/winsup/cygwin/sysconf.cc
deleted file mode 100644
index 7d09f53d0..000000000
--- a/winsup/cygwin/sysconf.cc
+++ /dev/null
@@ -1,441 +0,0 @@
-/* sysconf.cc
-
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include <unistd.h>
-#include <sys/param.h>
-#include <sys/sysinfo.h>
-#include "cygerrno.h"
-#include "security.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "pinfo.h"
-#include "ntdll.h"
-
-static long
-get_open_max (int in)
-{
- long max = getdtablesize ();
- if (max < OPEN_MAX)
- max = OPEN_MAX;
- return max;
-}
-
-static long
-get_page_size (int in)
-{
- return wincap.allocation_granularity ();
-}
-
-static long
-get_nproc_values (int in)
-{
- NTSTATUS status;
- SYSTEM_BASIC_INFORMATION sbi;
-
- status = NtQuerySystemInformation (SystemBasicInformation, (PVOID) &sbi,
- sizeof sbi, NULL);
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- debug_printf ("NtQuerySystemInformation: status %y, %E", status);
- return -1;
- }
- switch (in)
- {
- case _SC_NPROCESSORS_CONF:
- return sbi.NumberProcessors;
- case _SC_NPROCESSORS_ONLN:
- {
- int i = 0;
- do
- if (sbi.ActiveProcessors & 1)
- i++;
- while (sbi.ActiveProcessors >>= 1);
- return i;
- }
- case _SC_PHYS_PAGES:
- return sbi.NumberOfPhysicalPages
- / (wincap.allocation_granularity () / wincap.page_size ());
- }
- return -1;
-}
-
-static long
-get_avphys (int in)
-{
- NTSTATUS status;
- SYSTEM_PERFORMANCE_INFORMATION spi;
-
- status = NtQuerySystemInformation (SystemPerformanceInformation,
- (PVOID) &spi, sizeof spi, NULL);
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- debug_printf ("NtQuerySystemInformation: status %y, %E", status);
- return -1;
- }
- return spi.AvailablePages
- / (wincap.allocation_granularity () / wincap.page_size ());
-}
-
-enum sc_type { nsup, cons, func };
-
-static struct
-{
- sc_type type;
- union
- {
- long c;
- long (*f)(int);
- };
-} sca[] =
-{
- {cons, {c:ARG_MAX}}, /* 0, _SC_ARG_MAX */
- {cons, {c:CHILD_MAX}}, /* 1, _SC_CHILD_MAX */
- {cons, {c:CLOCKS_PER_SEC}}, /* 2, _SC_CLK_TCK */
- {cons, {c:NGROUPS_MAX}}, /* 3, _SC_NGROUPS_MAX */
- {func, {f:get_open_max}}, /* 4, _SC_OPEN_MAX */
- {cons, {c:_POSIX_JOB_CONTROL}}, /* 5, _SC_JOB_CONTROL */
- {cons, {c:_POSIX_SAVED_IDS}}, /* 6, _SC_SAVED_IDS */
- {cons, {c:_POSIX_VERSION}}, /* 7, _SC_VERSION */
- {func, {f:get_page_size}}, /* 8, _SC_PAGESIZE */
- {func, {f:get_nproc_values}}, /* 9, _SC_NPROCESSORS_CONF */
- {func, {f:get_nproc_values}}, /* 10, _SC_NPROCESSORS_ONLN */
- {func, {f:get_nproc_values}}, /* 11, _SC_PHYS_PAGES */
- {func, {f:get_avphys}}, /* 12, _SC_AVPHYS_PAGES */
- {cons, {c:MQ_OPEN_MAX}}, /* 13, _SC_MQ_OPEN_MAX */
- {cons, {c:MQ_PRIO_MAX}}, /* 14, _SC_MQ_PRIO_MAX */
- {cons, {c:RTSIG_MAX}}, /* 15, _SC_RTSIG_MAX */
- {cons, {c:-1L}}, /* 16, _SC_SEM_NSEMS_MAX */
- {cons, {c:SEM_VALUE_MAX}}, /* 17, _SC_SEM_VALUE_MAX */
- {cons, {c:SIGQUEUE_MAX}}, /* 18, _SC_SIGQUEUE_MAX */
- {cons, {c:TIMER_MAX}}, /* 19, _SC_TIMER_MAX */
- {nsup, {c:0}}, /* 20, _SC_TZNAME_MAX */
- {cons, {c:-1L}}, /* 21, _SC_ASYNCHRONOUS_IO */
- {cons, {c:_POSIX_FSYNC}}, /* 22, _SC_FSYNC */
- {cons, {c:_POSIX_MAPPED_FILES}}, /* 23, _SC_MAPPED_FILES */
- {cons, {c:-1L}}, /* 24, _SC_MEMLOCK */
- {cons, {c:_POSIX_MEMLOCK_RANGE}}, /* 25, _SC_MEMLOCK_RANGE */
- {cons, {c:_POSIX_MEMORY_PROTECTION}}, /* 26, _SC_MEMORY_PROTECTION */
- {cons, {c:_POSIX_MESSAGE_PASSING}}, /* 27, _SC_MESSAGE_PASSING */
- {cons, {c:-1L}}, /* 28, _SC_PRIORITIZED_IO */
- {cons, {c:_POSIX_REALTIME_SIGNALS}}, /* 29, _SC_REALTIME_SIGNALS */
- {cons, {c:_POSIX_SEMAPHORES}}, /* 30, _SC_SEMAPHORES */
- {cons, {c:_POSIX_SHARED_MEMORY_OBJECTS}}, /* 31, _SC_SHARED_MEMORY_OBJECTS */
- {cons, {c:_POSIX_SYNCHRONIZED_IO}}, /* 32, _SC_SYNCHRONIZED_IO */
- {cons, {c:_POSIX_TIMERS}}, /* 33, _SC_TIMERS */
- {nsup, {c:0}}, /* 34, _SC_AIO_LISTIO_MAX */
- {nsup, {c:0}}, /* 35, _SC_AIO_MAX */
- {nsup, {c:0}}, /* 36, _SC_AIO_PRIO_DELTA_MAX */
- {nsup, {c:0}}, /* 37, _SC_DELAYTIMER_MAX */
- {cons, {c:PTHREAD_KEYS_MAX}}, /* 38, _SC_THREAD_KEYS_MAX */
- {cons, {c:PTHREAD_STACK_MIN}}, /* 39, _SC_THREAD_STACK_MIN */
- {cons, {c:-1L}}, /* 40, _SC_THREAD_THREADS_MAX */
- {cons, {c:TTY_NAME_MAX}}, /* 41, _SC_TTY_NAME_MAX */
- {cons, {c:_POSIX_THREADS}}, /* 42, _SC_THREADS */
- {cons, {c:_POSIX_THREAD_ATTR_STACKADDR}},/* 43, _SC_THREAD_ATTR_STACKADDR */
- {cons, {c:_POSIX_THREAD_ATTR_STACKSIZE}},/* 44, _SC_THREAD_ATTR_STACKSIZE */
- {cons, {c:_POSIX_THREAD_PRIORITY_SCHEDULING}}, /* 45, _SC_THREAD_PRIORITY_SCHEDULING */
- {cons, {c:-1L}}, /* 46, _SC_THREAD_PRIO_INHERIT */
- {cons, {c:-1L}}, /* 47, _SC_THREAD_PRIO_PROTECT */
- {cons, {c:_POSIX_THREAD_PROCESS_SHARED}}, /* 48, _SC_THREAD_PROCESS_SHARED */
- {cons, {c:_POSIX_THREAD_SAFE_FUNCTIONS}}, /* 49, _SC_THREAD_SAFE_FUNCTIONS */
- {cons, {c:16384L}}, /* 50, _SC_GETGR_R_SIZE_MAX */
- {cons, {c:16384L}}, /* 51, _SC_GETPW_R_SIZE_MAX */
- {cons, {c:LOGIN_NAME_MAX}}, /* 52, _SC_LOGIN_NAME_MAX */
- {cons, {c:PTHREAD_DESTRUCTOR_ITERATIONS}}, /* 53, _SC_THREAD_DESTRUCTOR_ITERATIONS */
- {cons, {c:_POSIX_ADVISORY_INFO}}, /* 54, _SC_ADVISORY_INFO */
- {cons, {c:ATEXIT_MAX}}, /* 55, _SC_ATEXIT_MAX */
- {cons, {c:-1L}}, /* 56, _SC_BARRIERS */
- {cons, {c:BC_BASE_MAX}}, /* 57, _SC_BC_BASE_MAX */
- {cons, {c:BC_DIM_MAX}}, /* 58, _SC_BC_DIM_MAX */
- {cons, {c:BC_SCALE_MAX}}, /* 59, _SC_BC_SCALE_MAX */
- {cons, {c:BC_STRING_MAX}}, /* 60, _SC_BC_STRING_MAX */
- {cons, {c:_POSIX_CLOCK_SELECTION}}, /* 61, _SC_CLOCK_SELECTION */
- {nsup, {c:0}}, /* 62, _SC_COLL_WEIGHTS_MAX */
- {cons, {c:_POSIX_CPUTIME}}, /* 63, _SC_CPUTIME */
- {cons, {c:EXPR_NEST_MAX}}, /* 64, _SC_EXPR_NEST_MAX */
- {cons, {c:HOST_NAME_MAX}}, /* 65, _SC_HOST_NAME_MAX */
- {cons, {c:IOV_MAX}}, /* 66, _SC_IOV_MAX */
- {cons, {c:_POSIX_IPV6}}, /* 67, _SC_IPV6 */
- {cons, {c:LINE_MAX}}, /* 68, _SC_LINE_MAX */
- {cons, {c:_POSIX_MONOTONIC_CLOCK}}, /* 69, _SC_MONOTONIC_CLOCK */
- {cons, {c:_POSIX_RAW_SOCKETS}}, /* 70, _SC_RAW_SOCKETS */
- {cons, {c:_POSIX_READER_WRITER_LOCKS}}, /* 71, _SC_READER_WRITER_LOCKS */
- {cons, {c:_POSIX_REGEXP}}, /* 72, _SC_REGEXP */
- {cons, {c:RE_DUP_MAX}}, /* 73, _SC_RE_DUP_MAX */
- {cons, {c:_POSIX_SHELL}}, /* 74, _SC_SHELL */
- {cons, {c:-1L}}, /* 75, _SC_SPAWN */
- {cons, {c:_POSIX_SPIN_LOCKS}}, /* 76, _SC_SPIN_LOCKS */
- {cons, {c:-1L}}, /* 77, _SC_SPORADIC_SERVER */
- {nsup, {c:0}}, /* 78, _SC_SS_REPL_MAX */
- {cons, {c:SYMLOOP_MAX}}, /* 79, _SC_SYMLOOP_MAX */
- {cons, {c:_POSIX_THREAD_CPUTIME}}, /* 80, _SC_THREAD_CPUTIME */
- {cons, {c:-1L}}, /* 81, _SC_THREAD_SPORADIC_SERVER */
- {cons, {c:-1L}}, /* 82, _SC_TIMEOUTS */
- {cons, {c:-1L}}, /* 83, _SC_TRACE */
- {cons, {c:-1L}}, /* 84, _SC_TRACE_EVENT_FILTER */
- {nsup, {c:0}}, /* 85, _SC_TRACE_EVENT_NAME_MAX */
- {cons, {c:-1L}}, /* 86, _SC_TRACE_INHERIT */
- {cons, {c:-1L}}, /* 87, _SC_TRACE_LOG */
- {nsup, {c:0}}, /* 88, _SC_TRACE_NAME_MAX */
- {nsup, {c:0}}, /* 89, _SC_TRACE_SYS_MAX */
- {nsup, {c:0}}, /* 90, _SC_TRACE_USER_EVENT_MAX */
- {cons, {c:-1L}}, /* 91, _SC_TYPED_MEMORY_OBJECTS */
- {cons, {c:_POSIX_V6_ILP32_OFF32}}, /* 92, _SC_V6_ILP32_OFF32 */
- {cons, {c:_POSIX_V6_ILP32_OFFBIG}}, /* 93, _SC_V6_ILP32_OFFBIG */
- {cons, {c:_POSIX_V6_LP64_OFF64}}, /* 94, _SC_V6_LP64_OFF64 */
- {cons, {c:_POSIX_V6_LPBIG_OFFBIG}}, /* 95, _SC_V6_LPBIG_OFFBIG */
- {cons, {c:_XOPEN_CRYPT}}, /* 96, _SC_XOPEN_CRYPT */
- {cons, {c:_XOPEN_ENH_I18N}}, /* 97, _SC_XOPEN_ENH_I18N */
- {cons, {c:-1L}}, /* 98, _SC_XOPEN_LEGACY */
- {cons, {c:-1L}}, /* 99, _SC_XOPEN_REALTIME */
- {cons, {c:STREAM_MAX}}, /* 100, _SC_STREAM_MAX */
- {cons, {c:_POSIX_PRIORITY_SCHEDULING}}, /* 101, _SC_PRIORITY_SCHEDULING */
- {cons, {c:-1L}}, /* 102, _SC_XOPEN_REALTIME_THREADS */
- {cons, {c:_XOPEN_SHM}}, /* 103, _SC_XOPEN_SHM */
- {cons, {c:-1L}}, /* 104, _SC_XOPEN_STREAMS */
- {cons, {c:-1L}}, /* 105, _SC_XOPEN_UNIX */
- {cons, {c:_XOPEN_VERSION}}, /* 106, _SC_XOPEN_VERSION */
- {cons, {c:_POSIX2_CHAR_TERM}}, /* 107, _SC_2_CHAR_TERM */
- {cons, {c:_POSIX2_C_BIND}}, /* 108, _SC_2_C_BIND */
- {cons, {c:_POSIX2_C_BIND}}, /* 109, _SC_2_C_DEV */
- {cons, {c:-1L}}, /* 110, _SC_2_FORT_DEV */
- {cons, {c:-1L}}, /* 111, _SC_2_FORT_RUN */
- {cons, {c:-1L}}, /* 112, _SC_2_LOCALEDEF */
- {cons, {c:-1L}}, /* 113, _SC_2_PBS */
- {cons, {c:-1L}}, /* 114, _SC_2_PBS_ACCOUNTING */
- {cons, {c:-1L}}, /* 115, _SC_2_PBS_CHECKPOINT */
- {cons, {c:-1L}}, /* 116, _SC_2_PBS_LOCATE */
- {cons, {c:-1L}}, /* 117, _SC_2_PBS_MESSAGE */
- {cons, {c:-1L}}, /* 118, _SC_2_PBS_TRACK */
- {cons, {c:_POSIX2_SW_DEV}}, /* 119, _SC_2_SW_DEV */
- {cons, {c:_POSIX2_UPE}}, /* 120, _SC_2_UPE */
- {cons, {c:_POSIX2_VERSION}}, /* 121, _SC_2_VERSION */
- {cons, {c:-1L}}, /* 122, _SC_THREAD_ROBUST_PRIO_INHERIT */
- {cons, {c:-1L}}, /* 123, _SC_THREAD_ROBUST_PRIO_PROTECT */
- {cons, {c:-1L}}, /* 124, _SC_XOPEN_UUCP */
-};
-
-#define SC_MIN _SC_ARG_MAX
-#define SC_MAX _SC_XOPEN_UUCP
-
-/* sysconf: POSIX 4.8.1.1 */
-/* Allows a portable app to determine quantities of resources or
- presence of an option at execution time. */
-long int
-sysconf (int in)
-{
- if (in >= SC_MIN && in <= SC_MAX)
- {
- switch (sca[in].type)
- {
- case nsup:
- break;
- case cons:
- return sca[in].c;
- case func:
- return sca[in].f (in);
- }
- }
- /* Unimplemented sysconf name or invalid option value. */
- set_errno (EINVAL);
- return -1L;
-}
-
-#define ls(s) sizeof(s),s
-
-static struct
-{
- size_t l;
- const char *s;
-} csa[] =
-{
- {ls ("/bin:/usr/bin")}, /* _CS_PATH */
- {0, NULL}, /* _CS_POSIX_V6_ILP32_OFF32_CFLAGS */
- {0, NULL}, /* _CS_POSIX_V6_ILP32_OFF32_LDFLAGS */
- {0, NULL}, /* _CS_POSIX_V6_ILP32_OFF32_LIBS */
- {0, NULL}, /* _CS_XBS5_ILP32_OFF32_LINTFLAGS */
-#ifdef __x86_64__
- {0, NULL}, /* _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS */
- {0, NULL}, /* _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS */
- {0, NULL}, /* _CS_POSIX_V6_ILP32_OFFBIG_LIBS */
- {0, NULL}, /* _CS_XBS5_ILP32_OFFBIG_LINTFLAGS */
- {ls ("")}, /* _CS_POSIX_V6_LP64_OFF64_CFLAGS */
- {ls ("")}, /* _CS_POSIX_V6_LP64_OFF64_LDFLAGS */
- {ls ("")}, /* _CS_POSIX_V6_LP64_OFF64_LIBS */
- {ls ("")}, /* _CS_XBS5_LP64_OFF64_LINTFLAGS */
- {ls ("")}, /* _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS */
- {ls ("")}, /* _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS */
- {ls ("")}, /* _CS_POSIX_V6_LPBIG_OFFBIG_LIBS */
- {ls ("")}, /* _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS */
- {ls ("POSIX_V6_LP64_OFF64")}, /* _CS_POSIX_V6_WIDTH_RESTRICTED_ENVS */
-#else
- {ls ("")}, /* _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS */
- {ls ("")}, /* _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS */
- {ls ("")}, /* _CS_POSIX_V6_ILP32_OFFBIG_LIBS */
- {ls ("")}, /* _CS_XBS5_ILP32_OFFBIG_LINTFLAGS */
- {0, NULL}, /* _CS_POSIX_V6_LP64_OFF64_CFLAGS */
- {0, NULL}, /* _CS_POSIX_V6_LP64_OFF64_LDFLAGS */
- {0, NULL}, /* _CS_POSIX_V6_LP64_OFF64_LIBS */
- {0, NULL}, /* _CS_XBS5_LP64_OFF64_LINTFLAGS */
- {0, NULL}, /* _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS */
- {0, NULL}, /* _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS */
- {0, NULL}, /* _CS_POSIX_V6_LPBIG_OFFBIG_LIBS */
- {0, NULL}, /* _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS */
- {ls ("POSIX_V6_ILP32_OFFBIG")}, /* _CS_POSIX_V6_WIDTH_RESTRICTED_ENVS */
-#endif
- {ls ("")}, /* _CS_POSIX_V7_THREADS_CFLAGS */
- {ls ("")}, /* _CS_POSIX_V7_THREADS_LDFLAGS */
- {ls ("POSIXLY_CORRECT=1")}, /* _CS_V7_ENV */
-};
-
-#define CS_MIN _CS_PATH
-#define CS_MAX _CS_V7_ENV
-
-extern "C" size_t
-confstr (int in, char *buf, size_t len)
-{
- if (in >= CS_MIN && in <= CS_MAX)
- {
- if (csa[in].l && len)
- {
- buf[0] = 0;
- strncat (buf, csa[in].s, MIN (len, csa[in].l) - 1);
- }
- return csa[in].l;
- }
- /* Invalid option value. */
- set_errno (EINVAL);
- return 0;
-}
-
-extern "C" int
-get_nprocs_conf (void)
-{
- return get_nproc_values (_SC_NPROCESSORS_CONF);
-}
-
-extern "C" int
-get_nprocs (void)
-{
- return get_nproc_values (_SC_NPROCESSORS_ONLN);
-}
-
-extern "C" long
-get_phys_pages (void)
-{
- return get_nproc_values (_SC_PHYS_PAGES);
-}
-
-extern "C" long
-get_avphys_pages (void)
-{
- return get_avphys (_SC_AVPHYS_PAGES);
-}
-
-extern "C" int
-sysinfo (struct sysinfo *info)
-{
- unsigned long long uptime = 0ULL, totalram = 0ULL, freeram = 0ULL,
- totalswap = 0ULL, freeswap = 0ULL;
- MEMORYSTATUSEX memory_status;
- PSYSTEM_PAGEFILE_INFORMATION spi = NULL;
- ULONG sizeof_spi = 512;
- PSYSTEM_TIMEOFDAY_INFORMATION stodi = NULL;
- const ULONG sizeof_stodi = sizeof (SYSTEM_TIMEOFDAY_INFORMATION);
- NTSTATUS status = STATUS_SUCCESS;
- winpids pids ((DWORD) 0);
-
- if (!info)
- {
- set_errno (EFAULT);
- return -1;
- }
-
- stodi = (PSYSTEM_TIMEOFDAY_INFORMATION) malloc (sizeof_stodi);
- status = NtQuerySystemInformation (SystemTimeOfDayInformation, (PVOID) stodi,
- sizeof_stodi, NULL);
- if (NT_SUCCESS (status))
- uptime = (stodi->CurrentTime.QuadPart - stodi->BootTime.QuadPart)
- / 10000000ULL;
- else
- debug_printf ("NtQuerySystemInformation(SystemTimeOfDayInformation), "
- "status %y", status);
-
- if (stodi)
- free (stodi);
-
- memory_status.dwLength = sizeof (MEMORYSTATUSEX);
- GlobalMemoryStatusEx (&memory_status);
- totalram = memory_status.ullTotalPhys / wincap.page_size ();
- freeram = memory_status.ullAvailPhys / wincap.page_size ();
-
- spi = (PSYSTEM_PAGEFILE_INFORMATION) malloc (sizeof_spi);
- if (spi)
- {
- status = NtQuerySystemInformation (SystemPagefileInformation, (PVOID) spi,
- sizeof_spi, &sizeof_spi);
- if (status == STATUS_INFO_LENGTH_MISMATCH)
- {
- free (spi);
- spi = (PSYSTEM_PAGEFILE_INFORMATION) malloc (sizeof_spi);
- if (spi)
- status = NtQuerySystemInformation (SystemPagefileInformation,
- (PVOID) spi, sizeof_spi,
- &sizeof_spi);
- }
- }
- if (!spi || !NT_SUCCESS (status))
- {
- debug_printf ("NtQuerySystemInformation(SystemPagefileInformation), "
- "status %y", status);
- totalswap = (memory_status.ullTotalPageFile - memory_status.ullTotalPhys)
- / wincap.page_size ();
- freeswap = (memory_status.ullAvailPageFile - memory_status.ullTotalPhys)
- / wincap.page_size ();
- }
- else
- {
- PSYSTEM_PAGEFILE_INFORMATION spp = spi;
- do
- {
- totalswap += spp->CurrentSize;
- freeswap += spp->CurrentSize - spp->TotalUsed;
- }
- while (spp->NextEntryOffset
- && (spp = (PSYSTEM_PAGEFILE_INFORMATION)
- ((char *) spp + spp->NextEntryOffset)));
- }
- if (spi)
- free (spi);
-
- info->uptime = (long) uptime;
- info->totalram = (unsigned long) totalram;
- info->freeram = (unsigned long) freeram;
- info->totalswap = (unsigned long) totalswap;
- info->freeswap = (unsigned long) freeswap;
- info->procs = (unsigned short) pids.npids;
- info->mem_unit = (unsigned int) wincap.page_size ();
-
- /* FIXME: unsupported */
- info->loads[0] = 0UL;
- info->loads[1] = 0UL;
- info->loads[2] = 0UL;
- info->sharedram = 0UL;
- info->bufferram = 0UL;
- info->totalhigh = 0UL;
- info->freehigh = 0UL;
-
- return 0;
-}
diff --git a/winsup/cygwin/syslog.cc b/winsup/cygwin/syslog.cc
deleted file mode 100644
index 7949b7001..000000000
--- a/winsup/cygwin/syslog.cc
+++ /dev/null
@@ -1,491 +0,0 @@
-/* syslog.cc
-
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2011, 2012 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#define __INSIDE_CYGWIN_NET__
-#define USE_SYS_TYPES_FD_SET
-#include "winsup.h"
-#include <ws2tcpip.h>
-#include <iphlpapi.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <syslog.h>
-#include <unistd.h>
-#include <sys/un.h>
-#include "cygerrno.h"
-#include "security.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "cygtls.h"
-#include "tls_pbuf.h"
-
-#define CYGWIN_LOG_NAME L"Cygwin"
-
-static struct
-{
- wchar_t *process_ident;
- int process_logopt;
- int process_facility;
- int process_logmask;
-} syslog_globals = { NULL, 0, 0, LOG_UPTO (LOG_DEBUG) };
-
-/* openlog: save the passed args. Don't open the system log or /dev/log yet. */
-extern "C" void
-openlog (const char *ident, int logopt, int facility)
-{
- wchar_t *new_ident = NULL;
-
- debug_printf ("openlog called with (%s, %d, %d)",
- ident ? ident : "<NULL>", logopt, facility);
-
- if (ident)
- {
- sys_mbstowcs_alloc (&new_ident, HEAP_NOTHEAP, ident);
- if (!new_ident)
- debug_printf ("failed to allocate memory for "
- "syslog_globals.process_ident");
- else
- {
- wchar_t *old_ident = syslog_globals.process_ident;
- syslog_globals.process_ident = new_ident;
- if (old_ident)
- free (old_ident);
- }
- }
- syslog_globals.process_logopt = logopt;
- syslog_globals.process_facility = facility;
-}
-
-/* setlogmask: set the log priority mask and return previous mask.
- If maskpri is zero, just return previous. */
-int
-setlogmask (int maskpri)
-{
- if (maskpri == 0)
- return syslog_globals.process_logmask;
-
- int old_mask = syslog_globals.process_logmask;
- syslog_globals.process_logmask = maskpri;
-
- return old_mask;
-}
-
-/* Private class used to handle formatting of syslog message
- It is named pass_handler because it does a two-pass handling of log
- strings. The first pass counts the length of the string, and the second
- one builds the string. */
-
-class pass_handler
-{
- private:
- FILE *fp_;
- char *message_;
- int total_len_;
-
- void shutdown ();
-
- /* Explicitly disallow copies */
- pass_handler (const pass_handler &);
- pass_handler & operator = (const pass_handler &);
-
- public:
- pass_handler ();
- ~pass_handler ();
-
- int initialize (int);
-
- int print (const char *,...);
- int print_va (const char *, va_list);
- char *get_message () const { return message_; }
- void set_message (char *s) { message_ = s; *message_ = '\0'; }
-};
-
-pass_handler::pass_handler () : fp_ (0), message_ (0), total_len_ (0)
-{
- ;
-}
-
-pass_handler::~pass_handler ()
-{
- shutdown ();
-}
-
-void
-pass_handler::shutdown ()
-{
- if (fp_ != NULL)
- {
- fclose (fp_);
- fp_ = 0;
- }
-}
-
-int
-pass_handler::initialize (int pass_number)
-{
- shutdown ();
- if (pass_number)
- return total_len_ + 1;
-
- fp_ = fopen ("/dev/null", "wb");
- setbuf (fp_, NULL);
- if (fp_ == NULL)
- {
- debug_printf ("failed to open /dev/null");
- return -1;
- }
- total_len_ = 0;
- return 0;
-}
-
-int
-pass_handler::print (const char *fmt, ...)
-{
- va_list ap;
- va_start (ap, fmt);
- int ret = print_va (fmt, ap);
- va_end (ap);
- return ret;
-}
-
-int
-pass_handler::print_va (const char *fmt, va_list list)
-{
- if (fp_ != NULL)
- {
- int len = vfprintf (fp_, fmt, list);
- if (len < 0)
- return -1;
- total_len_ += len;
- return 0;
- }
- else if (message_ != NULL)
- {
- char *printpos = &message_[strlen (message_)];
- vsprintf (printpos, fmt, list);
- return 0;
- }
- debug_printf ("FAILURE ! fp_ and message_ both 0!! ");
- return -1;
-}
-
-static NO_COPY muto try_connect_guard;
-static enum {
- not_inited,
- inited_failed,
- inited_dgram,
- inited_stream
-} syslogd_inited;
-static int syslogd_sock = -1;
-extern "C" int cygwin_socket (int, int, int);
-extern "C" int cygwin_connect (int, const struct sockaddr *, int);
-extern int get_inet_addr (const struct sockaddr *, int,
- struct sockaddr_storage *, int *,
- int * = NULL, int * = NULL);
-
-static void
-connect_syslogd ()
-{
- int fd;
- struct sockaddr_un sun;
- struct sockaddr_storage sst;
- int len, type;
-
- if (syslogd_inited != not_inited && syslogd_sock >= 0)
- close (syslogd_sock);
- syslogd_inited = inited_failed;
- syslogd_sock = -1;
- sun.sun_family = AF_LOCAL;
- strncpy (sun.sun_path, _PATH_LOG, sizeof sun.sun_path);
- if (get_inet_addr ((struct sockaddr *) &sun, sizeof sun, &sst, &len, &type))
- return;
- if ((fd = cygwin_socket (AF_LOCAL, type, 0)) < 0)
- return;
- if (cygwin_connect (fd, (struct sockaddr *) &sun, sizeof sun) == 0)
- {
- /* connect on a dgram socket always succeeds. We still don't know
- if syslogd is actually listening. */
- if (type == SOCK_DGRAM)
- {
- tmp_pathbuf tp;
- PMIB_UDPTABLE tab = (PMIB_UDPTABLE) tp.w_get ();
- DWORD size = 65536;
- bool found = false;
- struct sockaddr_in *sa = (struct sockaddr_in *) &sst;
-
- if (GetUdpTable (tab, &size, FALSE) == NO_ERROR)
- {
- for (DWORD i = 0; i < tab->dwNumEntries; ++i)
- if (tab->table[i].dwLocalAddr == sa->sin_addr.s_addr
- && tab->table[i].dwLocalPort == sa->sin_port)
- {
- found = true;
- break;
- }
- if (!found)
- {
- /* No syslogd is listening. */
- close (fd);
- return;
- }
- }
- }
- syslogd_inited = type == SOCK_DGRAM ? inited_dgram : inited_stream;
- }
- syslogd_sock = fd;
- fcntl64 (syslogd_sock, F_SETFD, FD_CLOEXEC);
- debug_printf ("found /dev/log, fd = %d, type = %s",
- fd, syslogd_inited == inited_stream ? "STREAM" : "DGRAM");
- return;
-}
-
-static int
-try_connect_syslogd (int priority, const char *msg, size_t len)
-{
- ssize_t ret = -1;
-
- try_connect_guard.init ("try_connect_guard")->acquire ();
- if (syslogd_inited == not_inited)
- connect_syslogd ();
- if (syslogd_inited != inited_failed)
- {
- char pribuf[16];
- sprintf (pribuf, "<%d>", priority);
- struct iovec iv[2] =
- {
- { pribuf, strlen (pribuf) },
- { (char *) msg, len }
- };
-
- ret = writev (syslogd_sock, iv, 2);
- /* If the syslog daemon has been restarted and /dev/log was
- a stream socket, the connection is broken. In this case,
- try to reopen the socket and try again. */
- if (ret < 0 && syslogd_inited == inited_stream)
- {
- connect_syslogd ();
- if (syslogd_sock >= 0)
- ret = writev (syslogd_sock, iv, 2);
- }
- /* If write fails and LOG_CONS is set, return failure to vsyslog so
- it falls back to the usual logging method for this OS. */
- if (ret >= 0 || !(syslog_globals.process_logopt & LOG_CONS))
- ret = syslogd_sock;
- }
- try_connect_guard.release ();
- return ret;
-}
-
-/* syslog: creates the log message and writes to /dev/log, or to the
- NT system log if /dev/log isn't available.
-
- FIXME. WinNT system log messages don't look pretty, but in order to
- fix this we have to embed resources in the code and tell the NT
- registry where we are, blech (what happens if we move ?). We could,
- however, add the resources in Cygwin and always point to that. */
-
-extern "C" void
-vsyslog (int priority, const char *message, va_list ap)
-{
- debug_printf ("%y %s", priority, message);
- /* If the priority fails the current mask, reject */
- if ((LOG_MASK (LOG_PRI (priority)) & syslog_globals.process_logmask) == 0)
- {
- debug_printf ("failing message %y due to priority mask %y",
- priority, syslog_globals.process_logmask);
- return;
- }
-
- /* Set default facility to LOG_USER if not yet set via openlog. */
- if (!syslog_globals.process_facility)
- syslog_globals.process_facility = LOG_USER;
-
- /* Add default facility if not in the given priority. */
- if (!(priority & LOG_FACMASK))
- priority |= syslog_globals.process_facility;
-
- /* Translate %m in the message to error text */
- char *errtext = strerror (get_errno ());
- int errlen = strlen (errtext);
- int numfound = 0;
-
- for (const char *cp = message; *cp; cp++)
- if (*cp == '%' && cp[1] == 'm')
- numfound++;
-
- char *newmessage = (char *) alloca (strlen (message) +
- (errlen * numfound) + 1);
-
- if (newmessage == NULL)
- {
- debug_printf ("failed to allocate newmessage");
- return;
- }
-
- char *dst = newmessage;
- for (const char *cp2 = message; *cp2; cp2++)
- if (*cp2 == '%' && cp2[1] == 'm')
- {
- cp2++;
- strcpy (dst, errtext);
- while (*dst)
- dst++;
- }
- else
- *dst++ = *cp2;
-
- *dst = '\0';
- message = newmessage;
-
- /* Work out the priority type - we ignore the facility for now.. */
- WORD eventType;
- switch (LOG_PRI (priority))
- {
- case LOG_EMERG:
- case LOG_ALERT:
- case LOG_CRIT:
- case LOG_ERR:
- eventType = EVENTLOG_ERROR_TYPE;
- break;
- case LOG_WARNING:
- eventType = EVENTLOG_WARNING_TYPE;
- break;
- case LOG_NOTICE:
- case LOG_INFO:
- case LOG_DEBUG:
- eventType = EVENTLOG_INFORMATION_TYPE;
- break;
- default:
- eventType = EVENTLOG_ERROR_TYPE;
- break;
- }
-
- /* We need to know how long the buffer needs to be.
- The only legal way I can see of doing this is to
- do a vfprintf to /dev/null, and count the bytes
- output, then do it again to a malloc'ed string. This
- is ugly, slow, but prevents core dumps :-).
- */
- pass_handler pass;
- for (int pass_number = 0; pass_number < 2; ++pass_number)
- {
- int n = pass.initialize (pass_number);
- if (n == -1)
- return;
- else if (n > 0)
- pass.set_message ((char *) alloca (n));
-
- /* Deal with ident_string */
- if (syslog_globals.process_ident != NULL)
- {
- if (pass.print ("%ls: ", syslog_globals.process_ident) == -1)
- return;
- }
- if (syslog_globals.process_logopt & LOG_PID)
- {
- if (pass.print ("PID %u: ", getpid ()) == -1)
- return;
- }
-
- /* Print out the variable part */
- if (pass.print_va (message, ap) == -1)
- return;
-
- }
- char *total_msg = pass.get_message ();
- size_t len = strlen (total_msg);
- if (len != 0 && (total_msg[len - 1] == '\n'))
- total_msg[--len] = '\0';
-
- if (syslog_globals.process_logopt & LOG_PERROR)
- {
- write (STDERR_FILENO, total_msg, len);
- write (STDERR_FILENO, "\n", 1);
- }
-
- int fd;
- if ((fd = try_connect_syslogd (priority, total_msg, len + 1)) < 0)
- {
- /* If syslogd isn't present, open the event log and send the message */
- HANDLE hEventSrc;
-
- hEventSrc = RegisterEventSourceW (NULL, syslog_globals.process_ident
- ?: CYGWIN_LOG_NAME);
- if (!hEventSrc)
- debug_printf ("RegisterEventSourceW, %E");
- else
- {
- wchar_t *msg_strings[1];
- tmp_pathbuf tp;
- msg_strings[0] = tp.w_get ();
- sys_mbstowcs (msg_strings[0], NT_MAX_PATH, total_msg);
- if (!ReportEventW (hEventSrc, eventType, 0, 0, cygheap->user.sid (),
- 1, 0, (const wchar_t **) msg_strings, NULL))
- debug_printf ("ReportEventW, %E");
- DeregisterEventSource (hEventSrc);
- }
- }
-}
-
-extern "C" void
-syslog (int priority, const char *message, ...)
-{
- va_list ap;
- va_start (ap, message);
- vsyslog (priority, message, ap);
- va_end (ap);
-}
-
-static NO_COPY muto klog_guard;
-fhandler_mailslot *dev_kmsg;
-
-extern "C" void
-vklog (int priority, const char *message, va_list ap)
-{
- /* TODO: kernel messages are under our control entirely and they should
- be quick. No playing with /dev/null, but a fixed upper size for now. */
- char buf[2060]; /* 2048 + a prority */
- if (!(priority & ~LOG_PRIMASK))
- priority = LOG_KERN | LOG_PRI (priority);
- __small_sprintf (buf, "<%d>", priority);
- __small_vsprintf (buf + strlen (buf), message, ap);
- klog_guard.init ("klog_guard")->acquire ();
- if (!dev_kmsg)
- dev_kmsg = (fhandler_mailslot *) build_fh_name ("/dev/kmsg");
- if (dev_kmsg && !dev_kmsg->get_handle ())
- dev_kmsg->open (O_WRONLY, 0);
- if (dev_kmsg && dev_kmsg->get_handle ())
- dev_kmsg->write (buf, strlen (buf) + 1);
- klog_guard.release ();
-}
-
-extern "C" void
-klog (int priority, const char *message, ...)
-{
- va_list ap;
- va_start (ap, message);
- vklog (priority, message, ap);
- va_end (ap);
-}
-
-extern "C" void
-closelog (void)
-{
- try_connect_guard.init ("try_connect_guard")->acquire ();
- if (syslogd_inited != not_inited && syslogd_sock >= 0)
- {
- close (syslogd_sock);
- syslogd_sock = -1;
- syslogd_inited = not_inited;
- }
- try_connect_guard.release ();
-}
diff --git a/winsup/cygwin/termios.cc b/winsup/cygwin/termios.cc
deleted file mode 100644
index 2f6629842..000000000
--- a/winsup/cygwin/termios.cc
+++ /dev/null
@@ -1,354 +0,0 @@
-/* termios.cc: termios for WIN32.
-
- Copyright 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
- 2008, 2009, 2010, 2011, 2012 Red Hat, Inc.
-
- Written by Doug Evans and Steve Chamberlain of Cygnus Support
- dje@cygnus.com, sac@cygnus.com
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include "cygwin/version.h"
-#include <stdlib.h>
-#include "cygerrno.h"
-#include "security.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "perprocess.h"
-#include "cygtls.h"
-
-/* tcsendbreak: POSIX 7.2.2.1 */
-extern "C" int
-tcsendbreak (int fd, int duration)
-{
- int res = -1;
-
- cygheap_fdget cfd (fd);
- if (cfd < 0)
- goto out;
-
- if (!cfd->is_tty ())
- set_errno (ENOTTY);
- else if ((res = cfd->bg_check (-SIGTTOU)) > bg_eof)
- res = cfd->tcsendbreak (duration);
-
-out:
- syscall_printf ("%R = tcsendbreak(%d, %d)", res, fd, duration);
- return res;
-}
-
-/* tcdrain: POSIX 7.2.2.1 */
-extern "C" int
-tcdrain (int fd)
-{
- pthread_testcancel ();
-
- int res = -1;
-
- termios_printf ("tcdrain");
-
- cygheap_fdget cfd (fd);
- if (cfd < 0)
- goto out;
-
- if (!cfd->is_tty ())
- set_errno (ENOTTY);
- else if ((res = cfd->bg_check (-SIGTTOU)) > bg_eof)
- res = cfd->tcdrain ();
-
-out:
- syscall_printf ("%R = tcdrain(%d)", res, fd);
- return res;
-}
-
-/* tcflush: POSIX 7.2.2.1 */
-extern "C" int
-tcflush (int fd, int queue)
-{
- int res = -1;
-
- cygheap_fdget cfd (fd);
- if (cfd < 0)
- goto out;
-
- if (!cfd->is_tty ())
- set_errno (ENOTTY);
- else if (queue != TCIFLUSH && queue != TCOFLUSH && queue != TCIOFLUSH)
- set_errno (EINVAL);
- else if ((res = cfd->bg_check (-SIGTTOU)) > bg_eof)
- res = cfd->tcflush (queue);
-
-out:
- termios_printf ("%R = tcflush(%d, %d)", res, fd, queue);
- return res;
-}
-
-/* tcflow: POSIX 7.2.2.1 */
-extern "C" int
-tcflow (int fd, int action)
-{
- int res = -1;
-
- cygheap_fdget cfd (fd);
- if (cfd < 0)
- goto out;
-
- if (!cfd->is_tty ())
- set_errno (ENOTTY);
- else if ((res = cfd->bg_check (-SIGTTOU)) > bg_eof)
- res = cfd->tcflow (action);
-
-out:
- syscall_printf ("%R = tcflow(%d, %d)", res, fd, action);
- return res;
-}
-
-/* tcsetattr: POSIX96 7.2.1.1 */
-extern "C" int
-tcsetattr (int fd, int a, const struct termios *t)
-{
- int res;
- t = __tonew_termios (t);
- int e = get_errno ();
-
- while (1)
- {
- res = -1;
- cygheap_fdget cfd (fd);
- if (cfd < 0)
- {
- e = get_errno ();
- break;
- }
-
- if (!cfd->is_tty ())
- {
- e = ENOTTY;
- break;
- }
-
- res = cfd->bg_check (-SIGTTOU);
-
- switch (res)
- {
- case bg_eof:
- e = get_errno ();
- break;
- case bg_ok:
- if (cfd.isopen ())
- res = cfd->tcsetattr (a, t);
- e = get_errno ();
- break;
- case bg_signalled:
- if (_my_tls.call_signal_handler ())
- continue;
- res = -1;
- /* fall through intentionally */
- default:
- e = get_errno ();
- break;
- }
- break;
- }
-
- set_errno (e);
- termios_printf ("iflag %y, oflag %y, cflag %y, lflag %y, VMIN %d, VTIME %d",
- t->c_iflag, t->c_oflag, t->c_cflag, t->c_lflag, t->c_cc[VMIN],
- t->c_cc[VTIME]);
- termios_printf ("%R = tcsetattr(%d, %d, %p)", res, fd, a, t);
- return res;
-}
-
-/* tcgetattr: POSIX 7.2.1.1 */
-extern "C" int
-tcgetattr (int fd, struct termios *in_t)
-{
- int res = -1;
- struct termios *t = __makenew_termios (in_t);
-
- cygheap_fdget cfd (fd);
- if (cfd < 0)
- /* saw an error */;
- else if (!cfd->is_tty ())
- set_errno (ENOTTY);
- else if ((res = cfd->tcgetattr (t)) == 0)
- __toapp_termios (in_t, t);
-
- if (res)
- termios_printf ("%R = tcgetattr(%d, %p)", res, fd, in_t);
- else
- termios_printf ("iflag %y, oflag %y, cflag %y, lflag %y, VMIN %d, VTIME %d",
- t->c_iflag, t->c_oflag, t->c_cflag, t->c_lflag, t->c_cc[VMIN],
- t->c_cc[VTIME]);
-
- return res;
-}
-
-/* tcgetpgrp: POSIX 7.2.3.1 */
-extern "C" int
-tcgetpgrp (int fd)
-{
- int res;
-
- cygheap_fdget cfd (fd);
- if (cfd < 0)
- res = -1;
- else
- res = cfd->tcgetpgrp ();
-
- termios_printf ("%R = tcgetpgrp(%d)", res, fd);
- return res;
-}
-
-extern "C" pid_t
-tcgetsid (int fd)
-{
- int res;
-
- cygheap_fdget cfd (fd);
- if (cfd < 0)
- res = -1;
- else
- res = cfd->tcgetsid ();
-
- termios_printf ("%R = tcgetsid(%d)", res, fd);
- return res;
-}
-
-/* tcsetpgrp: POSIX 7.2.4.1 */
-extern "C" int
-tcsetpgrp (int fd, pid_t pgid)
-{
- int res = -1;
-
- cygheap_fdget cfd (fd);
- if (cfd < 0)
- /* saw an error */;
- else if (!cfd->is_tty ())
- set_errno (ENOTTY);
- else
- res = cfd->tcsetpgrp (pgid);
-
- termios_printf ("%R = tcsetpgrp(%d, %d)", res, fd, pgid);
- return res;
-}
-
-/* NIST PCTS requires not macro-only implementation */
-#undef cfgetospeed
-#undef cfgetispeed
-#undef cfsetospeed
-#undef cfsetispeed
-
-/* cfgetospeed: POSIX96 7.1.3.1 */
-extern "C" speed_t
-cfgetospeed (const struct termios *tp)
-{
- return __tonew_termios (tp)->c_ospeed;
-}
-
-/* cfgetispeed: POSIX96 7.1.3.1 */
-extern "C" speed_t
-cfgetispeed (const struct termios *tp)
-{
- return __tonew_termios (tp)->c_ispeed;
-}
-
-static inline int
-setspeed (speed_t &set_speed, speed_t from_speed)
-{
- int res;
- switch (from_speed)
- {
- case B0:
- case B50:
- case B75:
- case B110:
- case B134:
- case B150:
- case B200:
- case B300:
- case B600:
- case B1200:
- case B1800:
- case B2400:
- case B4800:
- case B9600:
- case B19200:
- case B38400:
- case B57600:
- case B115200:
- case B128000:
- case B230400:
- case B256000:
- case B460800:
- case B500000:
- case B576000:
- case B921600:
- case B1000000:
- case B1152000:
- case B1500000:
- case B2000000:
- case B2500000:
- case B3000000:
- set_speed = from_speed;
- res = 0;
- break;
- default:
- set_errno (EINVAL);
- res = -1;
- break;
- }
- return res;
-}
-
-/* cfsetospeed: POSIX96 7.1.3.1 */
-extern "C" int
-cfsetospeed (struct termios *in_tp, speed_t speed)
-{
- struct termios *tp = __tonew_termios (in_tp);
- int res = setspeed (tp->c_ospeed, speed);
- __toapp_termios (in_tp, tp);
- return res;
-}
-
-/* cfsetispeed: POSIX96 7.1.3.1 */
-extern "C" int
-cfsetispeed (struct termios *in_tp, speed_t speed)
-{
- struct termios *tp = __tonew_termios (in_tp);
- int res = setspeed (tp->c_ispeed, speed);
- __toapp_termios (in_tp, tp);
- return res;
-}
-
-/* cfsetspeed: 4.4BSD */
-extern "C" int
-cfsetspeed (struct termios *in_tp, speed_t speed)
-{
- struct termios *tp = __tonew_termios (in_tp);
- int res;
- /* errors come only from unsupported baud rates, so setspeed() would return
- identical results in both calls */
- if ((res = setspeed (tp->c_ospeed, speed)) == 0)
- setspeed (tp->c_ispeed, speed);
- __toapp_termios (in_tp, tp);
- return res;
-}
-
-extern "C" void
-cfmakeraw(struct termios *tp)
-{
- tp->c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP
- | INLCR | IGNCR | ICRNL | IXON);
- tp->c_oflag &= ~OPOST;
- tp->c_lflag &= ~(ECHO | ECHONL | ICANON | ISIG | IEXTEN);
- tp->c_cflag &= ~(CSIZE | PARENB);
- tp->c_cflag |= CS8;
-}
diff --git a/winsup/cygwin/textmode.c b/winsup/cygwin/textmode.c
deleted file mode 100644
index e8636bfe9..000000000
--- a/winsup/cygwin/textmode.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/* binmode.c
-
- Copyright 2000, 2001, 2010, 2013, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winlean.h"
-#include <sys/fcntl.h>
-#include <sys/cygwin.h>
-
-extern int _fmode;
-void
-cygwin_premain0 (int argc __attribute__ ((unused)),
- char **argv __attribute__ ((unused)),
- struct per_process *myself __attribute__ ((unused)))
-{
- _fmode &= ~O_BINARY;
- _fmode |= O_TEXT;
-}
diff --git a/winsup/cygwin/textreadmode.c b/winsup/cygwin/textreadmode.c
deleted file mode 100644
index 5425002f2..000000000
--- a/winsup/cygwin/textreadmode.c
+++ /dev/null
@@ -1,27 +0,0 @@
-/* textreadmode.c
-
- Copyright 2004, 2010, 2013 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winlean.h"
-#include <sys/fcntl.h>
-#include <sys/cygwin.h>
-
-extern int _fmode;
-void
-cygwin_premain0 (int argc __attribute__ ((unused)),
- char **argv __attribute__ ((unused)),
- struct per_process *myself __attribute__ ((unused)))
-{
- static struct __cygwin_perfile pf[] =
- {
- {"", O_RDONLY | O_TEXT},
- {NULL, 0}
- };
- cygwin_internal (CW_PERFILE, pf);
-}
diff --git a/winsup/cygwin/thread.cc b/winsup/cygwin/thread.cc
deleted file mode 100644
index 1ac338b4b..000000000
--- a/winsup/cygwin/thread.cc
+++ /dev/null
@@ -1,3883 +0,0 @@
-/* thread.cc: Locking and threading module functions
-
- Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
- 2009, 2010, 2011, 2012, 2013, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-/* Implementation overview and caveats:
-
- Win32 puts some contraints on what can and cannot be implemented. Where
- possible we work around those contrainsts. Where we cannot work around
- the constraints we either pretend to be conformant, or return an error
- code.
-
- Some caveats: PROCESS_SHARED objects, while they pretend to be process
- shared, may not actually work. Some test cases are needed to determine
- win32's behaviour. My suspicion is that the win32 handle needs to be
- opened with different flags for proper operation.
-
- R.Collins, April 2001. */
-
-#include "winsup.h"
-#include "miscfuncs.h"
-#include "path.h"
-#include <stdlib.h>
-#include "sigproc.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "ntdll.h"
-#include "cygwait.h"
-
-extern "C" void __fp_lock_all ();
-extern "C" void __fp_unlock_all ();
-extern "C" int valid_sched_parameters(const struct sched_param *);
-extern "C" int sched_set_thread_priority(HANDLE thread, int priority);
-static inline verifyable_object_state
- verifyable_object_isvalid (void const * objectptr, thread_magic_t magic,
- void *static_ptr1 = NULL,
- void *static_ptr2 = NULL,
- void *static_ptr3 = NULL);
-
-extern int threadsafe;
-
-const pthread_t pthread_mutex::_new_mutex = (pthread_t) 1;
-const pthread_t pthread_mutex::_unlocked_mutex = (pthread_t) 2;
-const pthread_t pthread_mutex::_destroyed_mutex = (pthread_t) 3;
-
-inline bool
-pthread_mutex::no_owner()
-{
- int res;
- if (!owner)
- {
- debug_printf ("NULL owner value");
- res = 1;
- }
- else if (owner == _destroyed_mutex)
- {
- paranoid_printf ("attempt to use destroyed mutex");
- res = 1;
- }
- else if (owner == _new_mutex || owner == _unlocked_mutex)
- res = 1;
- else
- res = 0;
- return res;
-}
-
-#undef __getreent
-extern "C" struct _reent *
-__getreent ()
-{
- return &_my_tls.local_clib;
-}
-
-extern "C" void
-__cygwin_lock_init (_LOCK_T *lock)
-{
- *lock = _LOCK_T_INITIALIZER;
-}
-
-extern "C" void
-__cygwin_lock_init_recursive (_LOCK_T *lock)
-{
- *lock = _LOCK_T_RECURSIVE_INITIALIZER;
-}
-
-extern "C" void
-__cygwin_lock_fini (_LOCK_T *lock)
-{
- pthread_mutex_destroy ((pthread_mutex_t*) lock);
-}
-
-extern "C" void
-__cygwin_lock_lock (_LOCK_T *lock)
-{
- paranoid_printf ("threadcount %d. locking", MT_INTERFACE->threadcount);
- pthread_mutex_lock ((pthread_mutex_t*) lock);
-}
-
-extern "C" int
-__cygwin_lock_trylock (_LOCK_T *lock)
-{
- return pthread_mutex_trylock ((pthread_mutex_t*) lock);
-}
-
-
-extern "C" void
-__cygwin_lock_unlock (_LOCK_T *lock)
-{
- pthread_mutex_unlock ((pthread_mutex_t*) lock);
- paranoid_printf ("threadcount %d. unlocked", MT_INTERFACE->threadcount);
-}
-
-static inline verifyable_object_state
-verifyable_object_isvalid (void const *objectptr, thread_magic_t magic, void *static_ptr1,
- void *static_ptr2, void *static_ptr3)
-{
- verifyable_object_state state = INVALID_OBJECT;
-
- __try
- {
- if (!objectptr || !(*(const char **) objectptr))
- __leave;
-
- verifyable_object **object = (verifyable_object **) objectptr;
-
- if ((static_ptr1 && *object == static_ptr1) ||
- (static_ptr2 && *object == static_ptr2) ||
- (static_ptr3 && *object == static_ptr3))
- state = VALID_STATIC_OBJECT;
- else if ((*object)->magic == magic)
- state = VALID_OBJECT;
- }
- __except (NO_ERROR) {}
- __endtry
- return state;
-}
-
-/* static members */
-inline bool
-pthread_attr::is_good_object (pthread_attr_t const *attr)
-{
- if (verifyable_object_isvalid (attr, PTHREAD_ATTR_MAGIC) != VALID_OBJECT)
- return false;
- return true;
-}
-
-inline bool
-pthread_condattr::is_good_object (pthread_condattr_t const *attr)
-{
- if (verifyable_object_isvalid (attr, PTHREAD_CONDATTR_MAGIC) != VALID_OBJECT)
- return false;
- return true;
-}
-
-inline bool
-pthread_rwlockattr::is_good_object (pthread_rwlockattr_t const *attr)
-{
- if (verifyable_object_isvalid (attr, PTHREAD_RWLOCKATTR_MAGIC) != VALID_OBJECT)
- return false;
- return true;
-}
-
-inline bool
-pthread_key::is_good_object (pthread_key_t const *key)
-{
- if (verifyable_object_isvalid (key, PTHREAD_KEY_MAGIC) != VALID_OBJECT)
- return false;
- return true;
-}
-
-inline bool
-pthread_spinlock::is_good_object (pthread_spinlock_t const *mutex)
-{
- if (verifyable_object_isvalid (mutex, PTHREAD_SPINLOCK_MAGIC) != VALID_OBJECT)
- return false;
- return true;
-}
-
-inline bool
-pthread_mutex::is_good_object (pthread_mutex_t const *mutex)
-{
- if (verifyable_object_isvalid (mutex, PTHREAD_MUTEX_MAGIC) != VALID_OBJECT)
- return false;
- return true;
-}
-
-inline bool
-pthread_mutex::is_initializer (pthread_mutex_t const *mutex)
-{
- if (verifyable_object_isvalid (mutex, PTHREAD_MUTEX_MAGIC,
- PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP,
- PTHREAD_NORMAL_MUTEX_INITIALIZER_NP,
- PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP) != VALID_STATIC_OBJECT)
- return false;
- return true;
-}
-
-inline bool
-pthread_mutex::is_initializer_or_object (pthread_mutex_t const *mutex)
-{
- if (verifyable_object_isvalid (mutex, PTHREAD_MUTEX_MAGIC,
- PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP,
- PTHREAD_NORMAL_MUTEX_INITIALIZER_NP,
- PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP) == INVALID_OBJECT)
- return false;
- return true;
-}
-
-/* FIXME: Accommodate PTHREAD_MUTEX_ERRORCHECK */
-inline bool
-pthread_mutex::can_be_unlocked ()
-{
- pthread_t self = pthread::self ();
- /* Check if the mutex is owned by the current thread and can be unlocked.
- * Also check for the ANONYMOUS owner to cover NORMAL mutexes as well. */
- bool res = type == PTHREAD_MUTEX_NORMAL || no_owner ()
- || (recursion_counter == 1 && pthread::equal (owner, self));
- pthread_printf ("recursion_counter %u res %d", recursion_counter, res);
- return res;
-}
-
-inline bool
-pthread_mutexattr::is_good_object (pthread_mutexattr_t const * attr)
-{
- if (verifyable_object_isvalid (attr, PTHREAD_MUTEXATTR_MAGIC) != VALID_OBJECT)
- return false;
- return true;
-}
-
-inline bool __attribute__ ((used))
-pthread::is_good_object (pthread_t const *thread)
-{
- if (verifyable_object_isvalid (thread, PTHREAD_MAGIC) != VALID_OBJECT)
- return false;
- return true;
-}
-
-/* Thread synchronisation */
-inline bool
-pthread_cond::is_good_object (pthread_cond_t const *cond)
-{
- if (verifyable_object_isvalid (cond, PTHREAD_COND_MAGIC) != VALID_OBJECT)
- return false;
- return true;
-}
-
-inline bool
-pthread_cond::is_initializer (pthread_cond_t const *cond)
-{
- if (verifyable_object_isvalid (cond, PTHREAD_COND_MAGIC, PTHREAD_COND_INITIALIZER) != VALID_STATIC_OBJECT)
- return false;
- return true;
-}
-
-inline bool
-pthread_cond::is_initializer_or_object (pthread_cond_t const *cond)
-{
- if (verifyable_object_isvalid (cond, PTHREAD_COND_MAGIC, PTHREAD_COND_INITIALIZER) == INVALID_OBJECT)
- return false;
- return true;
-}
-
-/* RW locks */
-inline bool
-pthread_rwlock::is_good_object (pthread_rwlock_t const *rwlock)
-{
- if (verifyable_object_isvalid (rwlock, PTHREAD_RWLOCK_MAGIC) != VALID_OBJECT)
- return false;
- return true;
-}
-
-inline bool
-pthread_rwlock::is_initializer (pthread_rwlock_t const *rwlock)
-{
- if (verifyable_object_isvalid (rwlock, PTHREAD_RWLOCK_MAGIC, PTHREAD_RWLOCK_INITIALIZER) != VALID_STATIC_OBJECT)
- return false;
- return true;
-}
-
-inline bool
-pthread_rwlock::is_initializer_or_object (pthread_rwlock_t const *rwlock)
-{
- if (verifyable_object_isvalid (rwlock, PTHREAD_RWLOCK_MAGIC, PTHREAD_RWLOCK_INITIALIZER) == INVALID_OBJECT)
- return false;
- return true;
-}
-
-inline bool
-semaphore::is_good_object (sem_t const * sem)
-{
- if (verifyable_object_isvalid (sem, SEM_MAGIC) != VALID_OBJECT)
- return false;
- return true;
-}
-
-void
-MTinterface::Init ()
-{
- pthread_mutex::init_mutex ();
- pthread_cond::init_mutex ();
- pthread_rwlock::init_mutex ();
-}
-
-void
-MTinterface::fixup_before_fork ()
-{
- pthread_key::fixup_before_fork ();
- semaphore::fixup_before_fork ();
-}
-
-/* This function is called from a single threaded process */
-void
-MTinterface::fixup_after_fork ()
-{
- pthread_key::fixup_after_fork ();
-
- threadcount = 0;
- pthread::init_mainthread ();
-
- pthread::fixup_after_fork ();
- pthread_mutex::fixup_after_fork ();
- pthread_cond::fixup_after_fork ();
- pthread_rwlock::fixup_after_fork ();
- semaphore::fixup_after_fork ();
-}
-
-/* pthread calls */
-
-/* static methods */
-void
-pthread::init_mainthread ()
-{
- pthread *thread = _my_tls.tid;
- if (!thread)
- {
- thread = new pthread ();
- if (!thread)
- api_fatal ("failed to create mainthread object");
- }
-
- thread->set_tls_self_pointer ();
- thread->thread_id = GetCurrentThreadId ();
- if (!DuplicateHandle (GetCurrentProcess (), GetCurrentThread (),
- GetCurrentProcess (), &thread->win32_obj_id,
- 0, FALSE, DUPLICATE_SAME_ACCESS))
- api_fatal ("failed to create mainthread handle");
- if (!thread->create_cancel_event ())
- api_fatal ("couldn't create cancel event for main thread");
- VerifyHandle (thread->win32_obj_id);
- /* Make sure the pthread mutex is recursive. See comment in
- pthread::precreate (called only for subsequent pthreads)
- for a description. */
- thread->mutex.set_type (PTHREAD_MUTEX_RECURSIVE);
- thread->postcreate ();
-}
-
-pthread *
-pthread::self ()
-{
- pthread *thread = _my_tls.tid;
- if (!thread)
- {
- thread = pthread_null::get_null_pthread ();
- thread->set_tls_self_pointer ();
- }
- return thread;
-}
-
-void
-pthread::set_tls_self_pointer ()
-{
- cygtls = &_my_tls;
- _my_tls.tid = this;
-}
-
-List<pthread> pthread::threads;
-
-/* member methods */
-pthread::pthread ():verifyable_object (PTHREAD_MAGIC), win32_obj_id (0),
- valid (false), suspended (false), canceled (false),
- cancelstate (0), canceltype (0), cancel_event (0),
- joiner (NULL), next (NULL), cleanup_stack (NULL)
-{
- if (this != pthread_null::get_null_pthread ())
- threads.insert (this);
- sigprocmask (SIG_SETMASK, NULL, &parent_sigmask);
-}
-
-pthread::~pthread ()
-{
- if (win32_obj_id)
- CloseHandle (win32_obj_id);
- if (cancel_event)
- CloseHandle (cancel_event);
-
- if (this != pthread_null::get_null_pthread ())
- threads.remove (this);
-}
-
-bool
-pthread::create_cancel_event ()
-{
- cancel_event = ::CreateEvent (&sec_none_nih, true, false, NULL);
- if (!cancel_event)
- {
- system_printf ("couldn't create cancel event, %E");
- /* we need the event for correct behaviour */
- return false;
- }
- return true;
-}
-
-void
-pthread::precreate (pthread_attr *newattr)
-{
- pthread_mutex *verifyable_mutex_obj = &mutex;
-
- /* already running ? */
- if (win32_obj_id)
- return;
-
- if (newattr)
- {
- attr.joinable = newattr->joinable;
- attr.contentionscope = newattr->contentionscope;
- attr.inheritsched = newattr->inheritsched;
- attr.stackaddr = newattr->stackaddr;
- attr.stacksize = newattr->stacksize;
- attr.guardsize = newattr->guardsize;
- }
-
- if (!pthread_mutex::is_good_object (&verifyable_mutex_obj))
- {
- thread_printf ("New thread object access mutex is not valid. this %p",
- this);
- magic = 0;
- return;
- }
- /* This mutex MUST be recursive. Consider the following scenario:
- - The thread installs a cleanup handler.
- - The cleanup handler calls a function which itself installs a
- cleanup handler.
- - pthread_cancel is called for this thread.
- - The thread's cleanup handler is called under mutex lock condition.
- - The cleanup handler calls the subsequent function with cleanup handler.
- - The function runs to completion, so it calls pthread_cleanup_pop.
- - pthread_cleanup_pop calls pthread::pop_cleanup_handler which will again
- try to lock the mutex.
- - Deadlock. */
- mutex.set_type (PTHREAD_MUTEX_RECURSIVE);
- if (!create_cancel_event ())
- magic = 0;
-}
-
-bool
-pthread::create (void *(*func) (void *), pthread_attr *newattr,
- void *threadarg)
-{
- bool retval;
-
- precreate (newattr);
- if (!magic)
- return false;
-
- function = func;
- arg = threadarg;
-
- mutex.lock ();
- /* stackaddr holds the uppermost stack address. See the comments in
- pthread_attr_setstack and pthread_attr_setstackaddr for a description. */
- ULONG stacksize = attr.stacksize ?: PTHREAD_DEFAULT_STACKSIZE;
- PVOID stackaddr = attr.stackaddr ? ((caddr_t) attr.stackaddr - stacksize)
- : NULL;
- win32_obj_id = CygwinCreateThread (thread_init_wrapper, this, stackaddr,
- stacksize, attr.guardsize, 0, &thread_id);
-
- if (!win32_obj_id)
- {
- thread_printf ("CreateThread failed: this %p, %E", this);
- magic = 0;
- }
- else
- {
- postcreate ();
- while (!cygtls)
- yield ();
- }
- retval = magic;
- mutex.unlock ();
- return retval;
-}
-
-void
-pthread::postcreate ()
-{
- valid = true;
-
- InterlockedIncrement (&MT_INTERFACE->threadcount);
- /* FIXME: set the priority appropriately for system contention scope */
- if (attr.inheritsched == PTHREAD_EXPLICIT_SCHED)
- {
- /* FIXME: set the scheduling settings for the new thread */
- /* sched_thread_setparam (win32_obj_id, attr.schedparam); */
- }
-}
-
-void
-pthread::exit (void *value_ptr)
-{
- class pthread *thread = this;
- _cygtls *tls = cygtls; /* Save cygtls before deleting this. */
-
- // run cleanup handlers
- pop_all_cleanup_handlers ();
-
- pthread_key::run_all_destructors ();
-
- mutex.lock ();
- // cleanup if thread is in detached state and not joined
- if (equal (joiner, thread))
- delete this;
- else
- {
- valid = false;
- return_ptr = value_ptr;
- mutex.unlock ();
- }
-
- if (_my_tls.local_clib.__sdidinit < 0)
- _my_tls.local_clib.__sdidinit = 0;
- (_reclaim_reent) (_REENT);
-
- if (InterlockedDecrement (&MT_INTERFACE->threadcount) == 0)
- ::exit (0);
- else
- {
- if (tls == _main_tls)
- {
- cygheap->find_tls (tls); /* Lock _main_tls mutex. */
- _cygtls *dummy = (_cygtls *) malloc (sizeof (_cygtls));
- *dummy = *_main_tls;
- _main_tls = dummy;
- _main_tls->initialized = 0;
- }
- /* This also unlocks and closes the _main_tls mutex. */
- tls->remove (INFINITE);
- ExitThread (0);
- }
-}
-
-int
-pthread::cancel ()
-{
- class pthread *thread = this;
- class pthread *self = pthread::self ();
-
- mutex.lock ();
-
- if (!valid)
- {
- mutex.unlock ();
- return 0;
- }
-
- if (canceltype == PTHREAD_CANCEL_DEFERRED ||
- cancelstate == PTHREAD_CANCEL_DISABLE)
- {
- // cancel deferred
- mutex.unlock ();
- canceled = true;
- SetEvent (cancel_event);
- return 0;
- }
- else if (equal (thread, self))
- {
- mutex.unlock ();
- cancel_self ();
- return 0; // Never reached
- }
-
- // cancel asynchronous
- SuspendThread (win32_obj_id);
- if (WaitForSingleObject (win32_obj_id, 0) == WAIT_TIMEOUT)
- {
- CONTEXT context;
- context.ContextFlags = CONTEXT_CONTROL;
- GetThreadContext (win32_obj_id, &context);
- /* The OS is not foolproof in terms of asynchronous thread cancellation
- and tends to hang infinitely if we change the instruction pointer.
- So just don't cancel asynchronously if the thread is currently
- executing Windows code. Rely on deferred cancellation in this case. */
- threadlist_t *tl_entry = cygheap->find_tls (cygtls);
- if (!cygtls->inside_kernel (&context))
- {
-#ifdef __x86_64__
- context.Rip = (ULONG_PTR) pthread::static_cancel_self;
-#else
- context.Eip = (DWORD) pthread::static_cancel_self;
-#endif
- SetThreadContext (win32_obj_id, &context);
- }
- cygheap->unlock_tls (tl_entry);
- }
- mutex.unlock ();
- /* See above. For instance, a thread which waits for a semaphore in sem_wait
- will call cygwait which in turn calls WFMO. While this WFMO call
- is cancelable by setting the thread's cancel_event object, the OS
- apparently refuses to set the thread's context and continues to wait for
- the WFMO conditions. This is *not* reflected in the return value of
- SetThreadContext or ResumeThread, btw.
- So, what we do here is to set the cancel_event as well to allow at least
- a deferred cancel. */
- canceled = true;
- SetEvent (cancel_event);
- ResumeThread (win32_obj_id);
-
- return 0;
-}
-
-/* TODO: Insert pthread_testcancel into the required functions.
-
- Here are the lists of required and optional functions per POSIX.1-2001
- and POSIX.1-2008. A star (*) indicates that the Cygwin function already
- is a cancellation point (aka "calls pthread_testcancel"), an o (o)
- indicates that the function is not implemented in Cygwin.
-
- Required cancellation points:
-
- * accept ()
- o aio_suspend ()
- * clock_nanosleep ()
- * close ()
- * connect ()
- * creat ()
- * fcntl () F_SETLKW
- * fdatasync ()
- * fsync ()
- o getmsg ()
- o getpmsg ()
- * lockf () F_LOCK
- * mq_receive ()
- * mq_send ()
- * mq_timedreceive ()
- * mq_timedsend ()
- msgrcv ()
- msgsnd ()
- * msync ()
- * nanosleep ()
- * open ()
- * openat ()
- * pause ()
- * poll ()
- * pread ()
- * pselect ()
- * pthread_cond_timedwait ()
- * pthread_cond_wait ()
- * pthread_join ()
- * pthread_testcancel ()
- o putmsg ()
- o putpmsg ()
- * pwrite ()
- * read ()
- * readv ()
- * recv ()
- * recvfrom ()
- * recvmsg ()
- * select ()
- * sem_timedwait ()
- * sem_wait ()
- * send ()
- * sendmsg ()
- * sendto ()
- * sigpause ()
- * sigsuspend ()
- o sigtimedwait ()
- * sigwait ()
- * sigwaitinfo ()
- * sleep ()
- * system ()
- * tcdrain ()
- * usleep ()
- * wait ()
- * wait3()
- o waitid ()
- * waitpid ()
- * write ()
- * writev ()
-
- Optional cancellation points:
-
- access ()
- asctime ()
- asctime_r ()
- catclose () Implemented externally: libcatgets
- catgets () Implemented externally: libcatgets
- catopen () Implemented externally: libcatgets
- chmod ()
- chown ()
- closedir ()
- closelog ()
- ctermid ()
- ctime ()
- ctime_r ()
- dbm_close () Implemented externally: libgdbm
- dbm_delete () Implemented externally: libgdbm
- dbm_fetch () Implemented externally: libgdbm
- dbm_nextkey () Implemented externally: libgdbm
- dbm_open () Implemented externally: libgdbm
- dbm_store () Implemented externally: libgdbm
- dlclose ()
- dlopen ()
- dprintf ()
- endgrent ()
- endhostent ()
- o endnetent ()
- endprotoent ()
- endpwent ()
- endservent ()
- endutxent ()
- faccessat ()
- fchmod ()
- fchmodat ()
- fchown ()
- fchownat ()
- * fclose ()
- * fcntl () (any value)
- fflush ()
- fgetc ()
- fgetpos ()
- fgets ()
- fgetwc ()
- fgetws ()
- o fmtmsg ()
- fopen ()
- fpathconf ()
- fprintf ()
- fputc ()
- fputs ()
- fputwc ()
- fputws ()
- fread ()
- freopen ()
- fscanf ()
- fseek ()
- fseeko ()
- fsetpos ()
- fstat ()
- fstatat ()
- ftell ()
- ftello ()
- ftw ()
- futimens ()
- fwprintf ()
- fwrite ()
- fwscanf ()
- getaddrinfo ()
- getc ()
- getc_unlocked ()
- getchar ()
- getchar_unlocked ()
- getcwd ()
- o getdate ()
- getdelim ()
- getgrent ()
- getgrgid ()
- getgrgid_r ()
- getgrnam ()
- getgrnam_r ()
- gethostbyaddr ()
- gethostbyname ()
- gethostent ()
- gethostid ()
- gethostname ()
- getline ()
- getlogin ()
- getlogin_r ()
- getnameinfo ()
- o getnetbyaddr ()
- o getnetbyname ()
- o getnetent ()
- getopt () (if opterr is nonzero)
- getprotobyname ()
- getprotobynumber ()
- getprotoent ()
- getpwent ()
- * getpwnam ()
- * getpwnam_r ()
- * getpwuid ()
- * getpwuid_r ()
- gets ()
- getservbyname ()
- getservbyport ()
- getservent ()
- getutxent ()
- getutxid ()
- getutxline ()
- getwc ()
- getwchar ()
- getwd ()
- glob ()
- iconv_close () Implemented externally: libiconv
- iconv_open () Implemented externally: libiconv
- ioctl ()
- link ()
- linkat ()
- o lio_listio ()
- localtime ()
- localtime_r ()
- * lockf ()
- lseek ()
- lstat ()
- mkdir ()
- mkdirat ()
- mkdtemp ()
- mkfifo ()
- mkfifoat ()
- mknod ()
- mknodat ()
- mkstemp ()
- mktime ()
- nftw ()
- opendir ()
- openlog ()
- pathconf ()
- pclose ()
- perror ()
- popen ()
- posix_fadvise ()
- posix_fallocate ()
- posix_madvise ()
- posix_openpt ()
- posix_spawn ()
- posix_spawnp ()
- o posix_trace_clear ()
- o posix_trace_close ()
- o posix_trace_create ()
- o posix_trace_create_withlog ()
- o posix_trace_eventtypelist_getnext_id ()
- o posix_trace_eventtypelist_rewind ()
- o posix_trace_flush ()
- o posix_trace_get_attr ()
- o posix_trace_get_filter ()
- o posix_trace_get_status ()
- o posix_trace_getnext_event ()
- o posix_trace_open ()
- o posix_trace_rewind ()
- o posix_trace_set_filter ()
- o posix_trace_shutdown ()
- o posix_trace_timedgetnext_event ()
- o posix_typed_mem_open ()
- printf ()
- psiginfo ()
- psignal ()
- pthread_rwlock_rdlock ()
- o pthread_rwlock_timedrdlock ()
- o pthread_rwlock_timedwrlock ()
- pthread_rwlock_wrlock ()
- putc ()
- putc_unlocked ()
- putchar ()
- putchar_unlocked ()
- puts ()
- pututxline ()
- putwc ()
- putwchar ()
- readdir ()
- readdir_r ()
- readlink ()
- readlinkat ()
- remove ()
- rename ()
- renameat ()
- rewind ()
- rewinddir ()
- scandir ()
- scanf ()
- seekdir ()
- semop ()
- setgrent ()
- sethostent ()
- o setnetent ()
- setprotoent ()
- setpwent ()
- setservent ()
- setutxent ()
- sigpause ()
- stat ()
- strerror ()
- strerror_r ()
- strftime ()
- symlink ()
- symlinkat ()
- sync ()
- syslog ()
- tmpfile ()
- tmpnam ()
- ttyname ()
- ttyname_r ()
- tzset ()
- ungetc ()
- ungetwc ()
- unlink ()
- unlinkat ()
- utime ()
- utimensat ()
- utimes ()
- vdprintf ()
- vfprintf ()
- vfwprintf ()
- vprintf ()
- vwprintf ()
- wcsftime ()
- wordexp ()
- wprintf ()
- wscanf ()
-
- An implementation may also mark other functions not specified in the
- standard as cancellation points. In particular, an implementation is
- likely to mark any nonstandard function that may block as a
- cancellation point. */
-
-void
-pthread::testcancel ()
-{
- if (cancelstate == PTHREAD_CANCEL_DISABLE)
- return;
-
- /* We check for the canceled flag first. This allows to use the
- pthread_testcancel function a lot without adding the overhead of
- an OS call. Only if the thread is marked as canceled, we wait for
- cancel_event being really set, on the off-chance that pthread_cancel
- gets interrupted before calling SetEvent. */
- if (canceled)
- {
- WaitForSingleObject (cancel_event, INFINITE);
- cancel_self ();
- }
-}
-
-/* Return cancel event handle if it exists *and* cancel is not disabled.
- This function is supposed to be used from other functions which are
- cancelable and need the cancel event in a WFMO call. */
-HANDLE
-pthread::get_cancel_event ()
-{
- pthread_t thread = pthread::self ();
-
- return (thread && thread->cancel_event
- && thread->cancelstate != PTHREAD_CANCEL_DISABLE)
- ? thread->cancel_event : NULL;
-}
-
-void
-pthread::static_cancel_self ()
-{
- pthread::self ()->cancel_self ();
-}
-
-int
-pthread::setcancelstate (int state, int *oldstate)
-{
- int result = 0;
-
- mutex.lock ();
-
- if (state != PTHREAD_CANCEL_ENABLE && state != PTHREAD_CANCEL_DISABLE)
- result = EINVAL;
- else
- {
- if (oldstate)
- *oldstate = cancelstate;
- cancelstate = state;
- }
-
- mutex.unlock ();
-
- return result;
-}
-
-int
-pthread::setcanceltype (int type, int *oldtype)
-{
- int result = 0;
-
- mutex.lock ();
-
- if (type != PTHREAD_CANCEL_DEFERRED && type != PTHREAD_CANCEL_ASYNCHRONOUS)
- result = EINVAL;
- else
- {
- if (oldtype)
- *oldtype = canceltype;
- canceltype = type;
- }
-
- mutex.unlock ();
-
- return result;
-}
-
-void
-pthread::push_cleanup_handler (__pthread_cleanup_handler *handler)
-{
- if (this != self ())
- // TODO: do it?
- api_fatal ("Attempt to push a cleanup handler across threads");
- handler->next = cleanup_stack;
- cleanup_stack = handler;
-}
-
-void
-pthread::pop_cleanup_handler (int const execute)
-{
- if (this != self ())
- // TODO: send a signal or something to the thread ?
- api_fatal ("Attempt to execute a cleanup handler across threads");
-
- mutex.lock ();
-
- if (cleanup_stack != NULL)
- {
- __pthread_cleanup_handler *handler = cleanup_stack;
-
- if (execute)
- (*handler->function) (handler->arg);
- cleanup_stack = handler->next;
- }
-
- mutex.unlock ();
-}
-
-void
-pthread::pop_all_cleanup_handlers ()
-{
- /* We will no honor cancels since the thread is exiting. */
- cancelstate = PTHREAD_CANCEL_DISABLE;
-
- while (cleanup_stack != NULL)
- pop_cleanup_handler (1);
-}
-
-void
-pthread::cancel_self ()
-{
- /* Can someone explain why the pthread:: is needed here? g++ complains
- without it. */
- pthread::exit (PTHREAD_CANCELED);
-}
-
-DWORD
-pthread::get_thread_id ()
-{
- return thread_id;
-}
-
-void
-pthread::_fixup_after_fork ()
-{
- /* set thread to not running if it is not the forking thread */
- if (this != pthread::self ())
- {
- magic = 0;
- valid = false;
- win32_obj_id = NULL;
- canceled = false;
- cancel_event = NULL;
- }
-}
-
-void
-pthread::suspend_except_self ()
-{
- if (valid && this != pthread::self ())
- SuspendThread (win32_obj_id);
-}
-
-void
-pthread::resume ()
-{
- if (valid)
- ResumeThread (win32_obj_id);
-}
-
-/* instance members */
-
-pthread_attr::pthread_attr ():verifyable_object (PTHREAD_ATTR_MAGIC),
-joinable (PTHREAD_CREATE_JOINABLE), contentionscope (PTHREAD_SCOPE_PROCESS),
-inheritsched (PTHREAD_INHERIT_SCHED), stackaddr (NULL), stacksize (0),
-guardsize (PTHREAD_DEFAULT_GUARDSIZE)
-{
- schedparam.sched_priority = 0;
-}
-
-pthread_attr::~pthread_attr ()
-{
-}
-
-pthread_condattr::pthread_condattr ():verifyable_object
- (PTHREAD_CONDATTR_MAGIC), shared (PTHREAD_PROCESS_PRIVATE),
- clock_id (CLOCK_REALTIME)
-{
-}
-
-pthread_condattr::~pthread_condattr ()
-{
-}
-
-List<pthread_cond> pthread_cond::conds;
-
-/* This is used for cond creation protection within a single process only */
-fast_mutex NO_COPY pthread_cond::cond_initialization_lock;
-
-/* We can only be called once.
- TODO: (no rush) use a non copied memory section to
- hold an initialization flag. */
-void
-pthread_cond::init_mutex ()
-{
- if (!cond_initialization_lock.init ())
- api_fatal ("Could not create win32 Mutex for pthread cond static initializer support.");
-}
-
-pthread_cond::pthread_cond (pthread_condattr *attr) :
- verifyable_object (PTHREAD_COND_MAGIC),
- shared (0), clock_id (CLOCK_REALTIME), waiting (0), pending (0),
- sem_wait (NULL), mtx_cond(NULL), next (NULL)
-{
- pthread_mutex *verifyable_mutex_obj;
-
- if (attr)
- {
- clock_id = attr->clock_id;
-
- if (attr->shared != PTHREAD_PROCESS_PRIVATE)
- {
- magic = 0;
- return;
- }
- }
-
- verifyable_mutex_obj = &mtx_in;
- if (!pthread_mutex::is_good_object (&verifyable_mutex_obj))
- {
- thread_printf ("Internal cond mutex is not valid. this %p", this);
- magic = 0;
- return;
- }
- /*
- * Change the mutex type to NORMAL.
- * This mutex MUST be of type normal
- */
- mtx_in.set_type (PTHREAD_MUTEX_NORMAL);
-
- verifyable_mutex_obj = &mtx_out;
- if (!pthread_mutex::is_good_object (&verifyable_mutex_obj))
- {
- thread_printf ("Internal cond mutex is not valid. this %p", this);
- magic = 0;
- return;
- }
- /* Change the mutex type to NORMAL to speed up mutex operations */
- mtx_out.set_type (PTHREAD_MUTEX_NORMAL);
-
- sem_wait = ::CreateSemaphore (&sec_none_nih, 0, INT32_MAX, NULL);
- if (!sem_wait)
- {
- pthread_printf ("CreateSemaphore failed. %E");
- magic = 0;
- return;
- }
-
- conds.insert (this);
-}
-
-pthread_cond::~pthread_cond ()
-{
- if (sem_wait)
- CloseHandle (sem_wait);
-
- conds.remove (this);
-}
-
-void
-pthread_cond::unblock (const bool all)
-{
- LONG releaseable;
-
- /*
- * Block outgoing threads (and avoid simultanous unblocks)
- */
- mtx_out.lock ();
-
- releaseable = waiting - pending;
- if (releaseable)
- {
- LONG released;
-
- if (!pending)
- {
- /*
- * Block incoming threads until all waiting threads are released.
- */
- mtx_in.lock ();
-
- /*
- * Calculate releaseable again because threads can enter until
- * the semaphore has been taken, but they can not leave, therefore pending
- * is unchanged and releaseable can only get higher
- */
- releaseable = waiting - pending;
- }
-
- released = all ? releaseable : 1;
- pending += released;
- /*
- * Signal threads
- */
- ::ReleaseSemaphore (sem_wait, released, NULL);
- }
-
- /*
- * And let the threads release.
- */
- mtx_out.unlock ();
-}
-
-int
-pthread_cond::wait (pthread_mutex_t mutex, PLARGE_INTEGER timeout)
-{
- DWORD rv;
-
- mtx_in.lock ();
- if (InterlockedIncrement (&waiting) == 1)
- mtx_cond = mutex;
- else if (mtx_cond != mutex)
- {
- InterlockedDecrement (&waiting);
- mtx_in.unlock ();
- return EINVAL;
- }
- mtx_in.unlock ();
-
- /*
- * Release the mutex and wait on semaphore
- */
- ++mutex->condwaits;
- mutex->unlock ();
-
- rv = cygwait (sem_wait, timeout, cw_cancel | cw_sig_eintr);
-
- mtx_out.lock ();
-
- if (rv != WAIT_OBJECT_0)
- {
- /*
- * It might happen that a signal is sent while the thread got canceled
- * or timed out. Try to take one.
- * If the thread gets one than a signal|broadcast is in progress.
- */
- if (WaitForSingleObject (sem_wait, 0) == WAIT_OBJECT_0)
- /*
- * thread got cancelled ot timed out while a signalling is in progress.
- * Set wait result back to signaled
- */
- rv = WAIT_OBJECT_0;
- }
-
- InterlockedDecrement (&waiting);
-
- if (rv == WAIT_OBJECT_0 && --pending == 0)
- /*
- * All signaled threads are released,
- * new threads can enter Wait
- */
- mtx_in.unlock ();
-
- mtx_out.unlock ();
-
- mutex->lock ();
- --mutex->condwaits;
-
- if (rv == WAIT_CANCELED)
- pthread::static_cancel_self ();
- else if (rv == WAIT_SIGNALED)
- /* SUSv3 states: If a signal is delivered to a thread waiting for a
- condition variable, upon return from the signal handler the thread
- resumes waiting for the condition variable as if it was not
- interrupted, or it shall return zero due to spurious wakeup.
- We opt for the latter choice here. */
- return 0;
- else if (rv == WAIT_TIMEOUT)
- return ETIMEDOUT;
-
- return 0;
-}
-
-void
-pthread_cond::_fixup_after_fork ()
-{
- waiting = pending = 0;
- mtx_cond = NULL;
-
- /* Unlock eventually locked mutexes */
- mtx_in.unlock ();
- mtx_out.unlock ();
-
- sem_wait = ::CreateSemaphore (&sec_none_nih, 0, INT32_MAX, NULL);
- if (!sem_wait)
- api_fatal ("pthread_cond::_fixup_after_fork () failed to recreate win32 semaphore");
-}
-
-pthread_rwlockattr::pthread_rwlockattr ():verifyable_object
- (PTHREAD_RWLOCKATTR_MAGIC), shared (PTHREAD_PROCESS_PRIVATE)
-{
-}
-
-pthread_rwlockattr::~pthread_rwlockattr ()
-{
-}
-
-List<pthread_rwlock> pthread_rwlock::rwlocks;
-
-/* This is used for rwlock creation protection within a single process only */
-fast_mutex NO_COPY pthread_rwlock::rwlock_initialization_lock;
-
-/* We can only be called once.
- TODO: (no rush) use a non copied memory section to
- hold an initialization flag. */
-void
-pthread_rwlock::init_mutex ()
-{
- if (!rwlock_initialization_lock.init ())
- api_fatal ("Could not create win32 Mutex for pthread rwlock static initializer support.");
-}
-
-pthread_rwlock::pthread_rwlock (pthread_rwlockattr *attr) :
- verifyable_object (PTHREAD_RWLOCK_MAGIC),
- shared (0), waiting_readers (0), waiting_writers (0), writer (NULL),
- readers (NULL), readers_mx (), mtx (NULL), cond_readers (NULL), cond_writers (NULL),
- next (NULL)
-{
- pthread_mutex *verifyable_mutex_obj = &mtx;
- pthread_cond *verifyable_cond_obj;
-
- if (!readers_mx.init ())
- {
- thread_printf ("Internal rwlock synchronisation mutex is not valid. this %p", this);
- magic = 0;
- return;
- }
-
- if (attr)
- if (attr->shared != PTHREAD_PROCESS_PRIVATE)
- {
- magic = 0;
- return;
- }
-
- if (!pthread_mutex::is_good_object (&verifyable_mutex_obj))
- {
- thread_printf ("Internal rwlock mutex is not valid. this %p", this);
- magic = 0;
- return;
- }
- /* Change the mutex type to NORMAL to speed up mutex operations */
- mtx.set_type (PTHREAD_MUTEX_NORMAL);
-
- verifyable_cond_obj = &cond_readers;
- if (!pthread_cond::is_good_object (&verifyable_cond_obj))
- {
- thread_printf ("Internal rwlock readers cond is not valid. this %p", this);
- magic = 0;
- return;
- }
-
- verifyable_cond_obj = &cond_writers;
- if (!pthread_cond::is_good_object (&verifyable_cond_obj))
- {
- thread_printf ("Internal rwlock writers cond is not valid. this %p", this);
- magic = 0;
- return;
- }
-
-
- rwlocks.insert (this);
-}
-
-pthread_rwlock::~pthread_rwlock ()
-{
- rwlocks.remove (this);
-}
-
-int
-pthread_rwlock::rdlock ()
-{
- int result = 0;
- struct RWLOCK_READER *reader;
-
- mtx.lock ();
-
- reader = lookup_reader ();
- if (reader)
- {
- if (reader->n < UINT32_MAX)
- ++reader->n;
- else
- errno = EAGAIN;
- goto DONE;
- }
-
- while (writer || waiting_writers)
- {
- pthread_cleanup_push (pthread_rwlock::rdlock_cleanup, this);
-
- ++waiting_readers;
- cond_readers.wait (&mtx);
- --waiting_readers;
-
- pthread_cleanup_pop (0);
- }
-
- if ((reader = add_reader ()))
- ++reader->n;
- else
- {
- result = EAGAIN;
- goto DONE;
- }
-
- DONE:
- mtx.unlock ();
-
- return result;
-}
-
-int
-pthread_rwlock::tryrdlock ()
-{
- int result = 0;
-
- mtx.lock ();
-
- if (writer || waiting_writers)
- result = EBUSY;
- else
- {
- RWLOCK_READER *reader = lookup_reader ();
- if (!reader)
- reader = add_reader ();
- if (reader && reader->n < UINT32_MAX)
- ++reader->n;
- else
- result = EAGAIN;
- }
-
- mtx.unlock ();
-
- return result;
-}
-
-int
-pthread_rwlock::wrlock ()
-{
- int result = 0;
- pthread_t self = pthread::self ();
-
- mtx.lock ();
-
- if (writer == self || lookup_reader ())
- {
- result = EDEADLK;
- goto DONE;
- }
-
- while (writer || readers)
- {
- pthread_cleanup_push (pthread_rwlock::wrlock_cleanup, this);
-
- ++waiting_writers;
- cond_writers.wait (&mtx);
- --waiting_writers;
-
- pthread_cleanup_pop (0);
- }
-
- writer = self;
-
- DONE:
- mtx.unlock ();
-
- return result;
-}
-
-int
-pthread_rwlock::trywrlock ()
-{
- int result = 0;
- pthread_t self = pthread::self ();
-
- mtx.lock ();
-
- if (writer || readers)
- result = EBUSY;
- else
- writer = self;
-
- mtx.unlock ();
-
- return result;
-}
-
-int
-pthread_rwlock::unlock ()
-{
- int result = 0;
-
- mtx.lock ();
-
- if (writer)
- {
- if (writer != pthread::self ())
- {
- result = EPERM;
- goto DONE;
- }
-
- writer = NULL;
- }
- else
- {
- struct RWLOCK_READER *reader = lookup_reader ();
-
- if (!reader)
- {
- result = EPERM;
- goto DONE;
- }
- if (--reader->n > 0)
- goto DONE;
-
- remove_reader (reader);
- delete reader;
- }
-
- release ();
-
- DONE:
- mtx.unlock ();
-
- return result;
-}
-
-pthread_rwlock::RWLOCK_READER *
-pthread_rwlock::add_reader ()
-{
- RWLOCK_READER *rd = new RWLOCK_READER;
- if (rd)
- List_insert (readers, rd);
- return rd;
-}
-
-void
-pthread_rwlock::remove_reader (struct RWLOCK_READER *rd)
-{
- List_remove (readers_mx, readers, rd);
-}
-
-struct pthread_rwlock::RWLOCK_READER *
-pthread_rwlock::lookup_reader ()
-{
- readers_mx.lock ();
- pthread_t thread = pthread::self ();
-
- struct RWLOCK_READER *cur = readers;
-
- while (cur && cur->thread != thread)
- cur = cur->next;
-
- readers_mx.unlock ();
-
- return cur;
-}
-
-void
-pthread_rwlock::rdlock_cleanup (void *arg)
-{
- pthread_rwlock *rwlock = (pthread_rwlock *) arg;
-
- --(rwlock->waiting_readers);
- rwlock->release ();
- rwlock->mtx.unlock ();
-}
-
-void
-pthread_rwlock::wrlock_cleanup (void *arg)
-{
- pthread_rwlock *rwlock = (pthread_rwlock *) arg;
-
- --(rwlock->waiting_writers);
- rwlock->release ();
- rwlock->mtx.unlock ();
-}
-
-void
-pthread_rwlock::_fixup_after_fork ()
-{
- pthread_t self = pthread::self ();
- struct RWLOCK_READER **temp = &readers;
-
- waiting_readers = 0;
- waiting_writers = 0;
-
- if (!readers_mx.init ())
- api_fatal ("pthread_rwlock::_fixup_after_fork () failed to recreate mutex");
-
- /* Unlock eventually locked mutex */
- mtx.unlock ();
- /*
- * Remove all readers except self
- */
- while (*temp)
- {
- if ((*temp)->thread == self)
- temp = &((*temp)->next);
- else
- {
- struct RWLOCK_READER *cur = *temp;
- *temp = (*temp)->next;
- delete cur;
- }
- }
-}
-
-/* pthread_key */
-/* static members */
-/* This stores pthread_key information across fork() boundaries */
-List<pthread_key> pthread_key::keys;
-
-/* non-static members */
-
-pthread_key::pthread_key (void (*aDestructor) (void *)):verifyable_object (PTHREAD_KEY_MAGIC), destructor (aDestructor)
-{
- tls_index = TlsAlloc ();
- if (tls_index == TLS_OUT_OF_INDEXES)
- magic = 0;
- else
- keys.insert (this);
-}
-
-pthread_key::~pthread_key ()
-{
- /* We may need to make the list code lock the list during operations
- */
- if (magic != 0)
- {
- keys.remove (this);
- TlsFree (tls_index);
- }
-}
-
-void
-pthread_key::_fixup_before_fork ()
-{
- fork_buf = get ();
-}
-
-void
-pthread_key::_fixup_after_fork ()
-{
- tls_index = TlsAlloc ();
- if (tls_index == TLS_OUT_OF_INDEXES)
- api_fatal ("pthread_key::recreate_key_from_buffer () failed to reallocate Tls storage");
- set (fork_buf);
-}
-
-void
-pthread_key::run_destructor ()
-{
- if (destructor)
- {
- void *oldValue = get ();
- if (oldValue)
- {
- set (NULL);
- destructor (oldValue);
- }
- }
-}
-
-/* pshared mutexs */
-
-/* static members */
-
-List<pthread_mutex> pthread_mutex::mutexes;
-
-/* This is used for mutex creation protection within a single process only */
-fast_mutex NO_COPY pthread_mutex::mutex_initialization_lock;
-
-void
-pthread_mutex::init_mutex ()
-{
- if (!mutex_initialization_lock.init ())
- api_fatal ("Could not create win32 Mutex for pthread mutex static initializer support.");
-}
-
-pthread_mutex::pthread_mutex (pthread_mutexattr *attr) :
- verifyable_object (0), /* set magic to zero initially */
- lock_counter (0),
- win32_obj_id (NULL), owner (_new_mutex),
-#ifdef DEBUGGING
- tid (0),
-#endif
- recursion_counter (0), condwaits (0),
- type (PTHREAD_MUTEX_NORMAL),
- pshared (PTHREAD_PROCESS_PRIVATE)
-{
- win32_obj_id = ::CreateEvent (&sec_none_nih, false, false, NULL);
- if (!win32_obj_id)
- return;
- /*attr checked in the C call */
- if (!attr)
- /* handled in the caller */;
- else if (attr->pshared != PTHREAD_PROCESS_SHARED)
- type = attr->mutextype;
- else
- return; /* Not implemented */
-
- magic = PTHREAD_MUTEX_MAGIC;
- mutexes.insert (this);
-}
-
-pthread_mutex::~pthread_mutex ()
-{
- if (win32_obj_id)
- {
- CloseHandle (win32_obj_id);
- win32_obj_id = NULL;
- }
-
- mutexes.remove (this);
- owner = _destroyed_mutex;
- magic = 0;
-}
-
-int
-pthread_mutex::lock ()
-{
- pthread_t self = ::pthread_self ();
- int result = 0;
-
- if (InterlockedIncrement (&lock_counter) == 1)
- set_owner (self);
- else if (type == PTHREAD_MUTEX_NORMAL /* potentially causes deadlock */
- || !pthread::equal (owner, self))
- {
- /* FIXME: no cancel? */
- cygwait (win32_obj_id, cw_infinite, cw_sig);
- set_owner (self);
- }
- else
- {
- InterlockedDecrement (&lock_counter);
- if (type == PTHREAD_MUTEX_RECURSIVE)
- result = lock_recursive ();
- else
- result = EDEADLK;
- }
-
- pthread_printf ("mutex %p, self %p, owner %p, lock_counter %d, recursion_counter %u",
- this, self, owner, lock_counter, recursion_counter);
- return result;
-}
-
-int
-pthread_mutex::unlock ()
-{
- int res = 0;
- pthread_t self = ::pthread_self ();
- if (type == PTHREAD_MUTEX_NORMAL)
- /* no error checking */;
- else if (no_owner ())
- res = type == PTHREAD_MUTEX_ERRORCHECK ? EPERM : 0;
- else if (!pthread::equal (owner, self))
- res = EPERM;
- if (!res && recursion_counter > 0 && --recursion_counter == 0)
- /* Don't try to unlock anything if recursion_counter == 0.
- This means the mutex was never locked or that we've forked. */
- {
- owner = (pthread_t) _unlocked_mutex;
-#ifdef DEBUGGING
- tid = 0; // thread-id
-#endif
- if (InterlockedDecrement (&lock_counter))
- ::SetEvent (win32_obj_id); // Another thread is waiting
- res = 0;
- }
-
- pthread_printf ("mutex %p, owner %p, self %p, lock_counter %d, recursion_counter %u, type %d, res %d",
- this, owner, self, lock_counter, recursion_counter, type, res);
- return res;
-}
-
-int
-pthread_mutex::trylock ()
-{
- pthread_t self = ::pthread_self ();
- int result = 0;
-
- if (InterlockedCompareExchange (&lock_counter, 1, 0) == 0)
- set_owner (self);
- else if (type == PTHREAD_MUTEX_RECURSIVE && pthread::equal (owner, self))
- result = lock_recursive ();
- else
- result = EBUSY;
-
- return result;
-}
-
-int
-pthread_mutex::destroy ()
-{
- if (condwaits || trylock ())
- // Do not destroy a condwaited or locked mutex
- return EBUSY;
- else if (recursion_counter > 1)
- {
- // Do not destroy a recursive locked mutex
- recursion_counter--;
- return EBUSY;
- }
-
- delete this;
- return 0;
-}
-
-void
-pthread_mutex::_fixup_after_fork ()
-{
- pthread_printf ("mutex %p", this);
- if (pshared != PTHREAD_PROCESS_PRIVATE)
- api_fatal ("pthread_mutex::_fixup_after_fork () doesn't understand PROCESS_SHARED mutex's");
-
- /* All waiting threads are gone after a fork */
- recursion_counter = 0;
- lock_counter = 0;
- condwaits = 0;
-#ifdef DEBUGGING
- tid = 0xffffffff; /* Don't know the tid after a fork */
-#endif
- win32_obj_id = ::CreateEvent (&sec_none_nih, false, false, NULL);
- if (!win32_obj_id)
- api_fatal ("pthread_mutex::_fixup_after_fork () failed to recreate win32 event for mutex");
-}
-
-pthread_mutexattr::pthread_mutexattr ():verifyable_object (PTHREAD_MUTEXATTR_MAGIC),
-pshared (PTHREAD_PROCESS_PRIVATE), mutextype (PTHREAD_MUTEX_NORMAL)
-{
-}
-
-pthread_mutexattr::~pthread_mutexattr ()
-{
-}
-
-/* pshared spinlocks
-
- The infrastructure is provided by the underlying pthread_mutex class.
- The rest is a simplification implementing spin locking. */
-
-pthread_spinlock::pthread_spinlock (int pshared) :
- pthread_mutex (NULL)
-{
- magic = PTHREAD_SPINLOCK_MAGIC;
- set_type (PTHREAD_MUTEX_NORMAL);
- set_shared (pshared);
-}
-
-int
-pthread_spinlock::lock ()
-{
- pthread_t self = ::pthread_self ();
- int result = -1;
-
- do
- {
- if (InterlockedExchange (&lock_counter, 1) == 0)
- {
- set_owner (self);
- result = 0;
- }
- else if (pthread::equal (owner, self))
- result = EDEADLK;
- else
- {
- /* Minimal timeout to minimize CPU usage while still spinning. */
- LARGE_INTEGER timeout;
- timeout.QuadPart = -10000LL;
- /* FIXME: no cancel? */
- cygwait (win32_obj_id, &timeout, cw_sig);
- }
- }
- while (result == -1);
- pthread_printf ("spinlock %p, self %p, owner %p", this, self, owner);
- return result;
-}
-
-int
-pthread_spinlock::unlock ()
-{
- pthread_t self = ::pthread_self ();
- int result = 0;
-
- if (!pthread::equal (owner, self))
- result = EPERM;
- else
- {
- owner = (pthread_t) _unlocked_mutex;
-#ifdef DEBUGGING
- tid = 0; // thread-id
-#endif
- InterlockedExchange (&lock_counter, 0);
- ::SetEvent (win32_obj_id);
- result = 0;
- }
- pthread_printf ("spinlock %p, owner %p, self %p, res %d",
- this, owner, self, result);
- return result;
-}
-
-DWORD WINAPI
-pthread::thread_init_wrapper (void *arg)
-{
- pthread *thread = (pthread *) arg;
- /* This *must* be set prior to calling set_tls_self_pointer or there is
- a race with the signal processing code which may miss the signal mask
- settings. */
- _my_tls.sigmask = thread->parent_sigmask;
- thread->set_tls_self_pointer ();
-
- thread->mutex.lock ();
-
- // if thread is detached force cleanup on exit
- if (thread->attr.joinable == PTHREAD_CREATE_DETACHED && thread->joiner == NULL)
- thread->joiner = thread;
- thread->mutex.unlock ();
-
- debug_printf ("tid %p", &_my_tls);
- thread_printf ("started thread %p %p %p %p %p %p", arg, &_my_tls.local_clib,
- _impure_ptr, thread, thread->function, thread->arg);
-
- // call the user's thread
- void *ret = thread->function (thread->arg);
-
- thread->exit (ret);
-
- return 0; // just for show. Never returns.
-}
-
-unsigned long
-pthread::getsequence_np ()
-{
- return get_thread_id ();
-}
-
-int
-pthread::create (pthread_t *thread, const pthread_attr_t *attr,
- void *(*start_routine) (void *), void *arg)
-{
- if (attr && !pthread_attr::is_good_object (attr))
- return EINVAL;
-
- *thread = new pthread ();
- if (!(*thread)->create (start_routine, attr ? *attr : NULL, arg))
- {
- delete (*thread);
- *thread = NULL;
- return EAGAIN;
- }
-
- return 0;
-}
-
-int
-pthread::once (pthread_once_t *once_control, void (*init_routine) (void))
-{
- // already done ?
- if (once_control->state)
- return 0;
-
- pthread_mutex_lock (&once_control->mutex);
- /* Here we must set a cancellation handler to unlock the mutex if needed */
- /* but a cancellation handler is not the right thing. We need this in the thread
- *cleanup routine. Assumption: a thread can only be in one pthread_once routine
- *at a time. Stote a mutex_t *in the pthread_structure. if that's non null unlock
- *on pthread_exit ();
- */
- if (!once_control->state)
- {
- init_routine ();
- once_control->state = 1;
- }
- /* Here we must remove our cancellation handler */
- pthread_mutex_unlock (&once_control->mutex);
- return 0;
-}
-
-int
-pthread::cancel (pthread_t thread)
-{
- if (!is_good_object (&thread))
- return ESRCH;
-
- return thread->cancel ();
-}
-
-void
-pthread::atforkprepare ()
-{
- callback *cb = MT_INTERFACE->pthread_prepare;
- while (cb)
- {
- cb->cb ();
- cb = cb->next;
- }
-
- __fp_lock_all ();
-
- MT_INTERFACE->fixup_before_fork ();
-}
-
-void
-pthread::atforkparent ()
-{
- __fp_unlock_all ();
-
- callback *cb = MT_INTERFACE->pthread_parent;
- while (cb)
- {
- cb->cb ();
- cb = cb->next;
- }
-}
-
-void
-pthread::atforkchild ()
-{
- MT_INTERFACE->fixup_after_fork ();
-
- __fp_unlock_all ();
-
- callback *cb = MT_INTERFACE->pthread_child;
- while (cb)
- {
- cb->cb ();
- cb = cb->next;
- }
-}
-
-/* Register a set of functions to run before and after fork.
- prepare calls are called in LI-FC order.
- parent and child calls are called in FI-FC order. */
-int
-pthread::atfork (void (*prepare)(void), void (*parent)(void), void (*child)(void))
-{
- callback *prepcb = NULL, *parentcb = NULL, *childcb = NULL;
- if (prepare)
- {
- prepcb = new callback;
- if (!prepcb)
- return ENOMEM;
- }
- if (parent)
- {
- parentcb = new callback;
- if (!parentcb)
- {
- if (prepcb)
- delete prepcb;
- return ENOMEM;
- }
- }
- if (child)
- {
- childcb = new callback;
- if (!childcb)
- {
- if (prepcb)
- delete prepcb;
- if (parentcb)
- delete parentcb;
- return ENOMEM;
- }
- }
-
- if (prepcb)
- {
- prepcb->cb = prepare;
- List_insert (MT_INTERFACE->pthread_prepare, prepcb);
- }
- if (parentcb)
- {
- parentcb->cb = parent;
- callback **t = &MT_INTERFACE->pthread_parent;
- while (*t)
- t = &(*t)->next;
- /* t = pointer to last next in the list */
- List_insert (*t, parentcb);
- }
- if (childcb)
- {
- childcb->cb = child;
- callback **t = &MT_INTERFACE->pthread_child;
- while (*t)
- t = &(*t)->next;
- /* t = pointer to last next in the list */
- List_insert (*t, childcb);
- }
- return 0;
-}
-
-extern "C" int
-pthread_attr_init (pthread_attr_t *attr)
-{
- if (pthread_attr::is_good_object (attr))
- return EBUSY;
-
- *attr = new pthread_attr;
- if (!pthread_attr::is_good_object (attr))
- {
- delete (*attr);
- *attr = NULL;
- return ENOMEM;
- }
- return 0;
-}
-
-extern "C" int
-pthread_attr_getinheritsched (const pthread_attr_t *attr,
- int *inheritsched)
-{
- if (!pthread_attr::is_good_object (attr))
- return EINVAL;
- *inheritsched = (*attr)->inheritsched;
- return 0;
-}
-
-extern "C" int
-pthread_attr_getschedparam (const pthread_attr_t *attr,
- struct sched_param *param)
-{
- if (!pthread_attr::is_good_object (attr))
- return EINVAL;
- *param = (*attr)->schedparam;
- return 0;
-}
-
-/* From a pure code point of view, this should call a helper in sched.cc,
- to allow for someone adding scheduler policy changes to win32 in the future.
- However that's extremely unlikely, so short and sweet will do us */
-extern "C" int
-pthread_attr_getschedpolicy (const pthread_attr_t *attr, int *policy)
-{
- if (!pthread_attr::is_good_object (attr))
- return EINVAL;
- *policy = SCHED_FIFO;
- return 0;
-}
-
-
-extern "C" int
-pthread_attr_getscope (const pthread_attr_t *attr, int *contentionscope)
-{
- if (!pthread_attr::is_good_object (attr))
- return EINVAL;
- *contentionscope = (*attr)->contentionscope;
- return 0;
-}
-
-extern "C" int
-pthread_attr_setdetachstate (pthread_attr_t *attr, int detachstate)
-{
- if (!pthread_attr::is_good_object (attr))
- return EINVAL;
- if (detachstate < 0 || detachstate > 1)
- return EINVAL;
- (*attr)->joinable = detachstate;
- return 0;
-}
-
-extern "C" int
-pthread_attr_getdetachstate (const pthread_attr_t *attr, int *detachstate)
-{
- if (!pthread_attr::is_good_object (attr))
- return EINVAL;
- *detachstate = (*attr)->joinable;
- return 0;
-}
-
-extern "C" int
-pthread_attr_setinheritsched (pthread_attr_t *attr, int inheritsched)
-{
- if (!pthread_attr::is_good_object (attr))
- return EINVAL;
- if (inheritsched != PTHREAD_INHERIT_SCHED
- && inheritsched != PTHREAD_EXPLICIT_SCHED)
- return ENOTSUP;
- (*attr)->inheritsched = inheritsched;
- return 0;
-}
-
-extern "C" int
-pthread_attr_setschedparam (pthread_attr_t *attr,
- const struct sched_param *param)
-{
- if (!pthread_attr::is_good_object (attr))
- return EINVAL;
- if (!valid_sched_parameters (param))
- return ENOTSUP;
- (*attr)->schedparam = *param;
- return 0;
-}
-
-/* See __pthread_attr_getschedpolicy for some notes */
-extern "C" int
-pthread_attr_setschedpolicy (pthread_attr_t *attr, int policy)
-{
- if (!pthread_attr::is_good_object (attr))
- return EINVAL;
- if (policy != SCHED_FIFO)
- return ENOTSUP;
- return 0;
-}
-
-extern "C" int
-pthread_attr_setscope (pthread_attr_t *attr, int contentionscope)
-{
- if (!pthread_attr::is_good_object (attr))
- return EINVAL;
- if (contentionscope != PTHREAD_SCOPE_SYSTEM
- && contentionscope != PTHREAD_SCOPE_PROCESS)
- return EINVAL;
- /* In future, we may be able to support system scope by escalating the thread
- priority to exceed the priority class. For now we only support PROCESS scope. */
- if (contentionscope != PTHREAD_SCOPE_PROCESS)
- return ENOTSUP;
- (*attr)->contentionscope = contentionscope;
- return 0;
-}
-
-extern "C" int
-pthread_attr_setstack (pthread_attr_t *attr, void *addr, size_t size)
-{
- if (!pthread_attr::is_good_object (attr))
- return EINVAL;
- if (addr == NULL)
- return EINVAL;
- if (size < PTHREAD_STACK_MIN)
- return EINVAL;
- /* The incoming address addr points to the lowest addressable byte of a
- buffer of size bytes. Due to the way pthread_attr_setstackaddr is defined
- on Linux, the lowest address ot the stack can't be reliably computed when
- using pthread_attr_setstackaddr/pthread_attr_setstacksize. Therefore we
- store the uppermost address of the stack in stackaddr. See also the
- comment in pthread_attr_setstackaddr. */
- (*attr)->stackaddr = (caddr_t) addr + size;
- (*attr)->stacksize = size;
- return 0;
-}
-
-extern "C" int
-pthread_attr_getstack (const pthread_attr_t *attr, void **addr, size_t *size)
-{
- if (!pthread_attr::is_good_object (attr))
- return EINVAL;
- /* stackaddr holds the uppermost stack address. See the comment in
- pthread_attr_setstack. */
- *addr = (caddr_t) (*attr)->stackaddr - (*attr)->stacksize;
- *size = (*attr)->stacksize;
- return 0;
-}
-
-extern "C" int
-pthread_attr_setstackaddr (pthread_attr_t *attr, void *addr)
-{
- if (!pthread_attr::is_good_object (attr))
- return EINVAL;
- if (addr == NULL)
- return EINVAL;
- /* This function is deprecated in SUSv4, but SUSv3 didn't define
- if the incoming stack address is the lowest address of the memory
- area defined as stack, or if it's the start address of the stack
- at which it begins its growth. On Linux it's the latter which
- means the uppermost stack address on x86 based systems. See comment
- in pthread_attr_setstack as well. */
- (*attr)->stackaddr = addr;
- return 0;
-}
-
-extern "C" int
-pthread_attr_getstackaddr (const pthread_attr_t *attr, void **addr)
-{
- if (!pthread_attr::is_good_object (attr))
- return EINVAL;
- /* See comment in pthread_attr_setstackaddr. */
- *addr = (*attr)->stackaddr;
- return 0;
-}
-
-extern "C" int
-pthread_attr_setstacksize (pthread_attr_t *attr, size_t size)
-{
- if (!pthread_attr::is_good_object (attr))
- return EINVAL;
- if (size < PTHREAD_STACK_MIN)
- return EINVAL;
- (*attr)->stacksize = size;
- return 0;
-}
-
-extern "C" int
-pthread_attr_getstacksize (const pthread_attr_t *attr, size_t *size)
-{
- if (!pthread_attr::is_good_object (attr))
- return EINVAL;
- /* If the stacksize has not been set by the application, return the
- default stacksize. Note that this is different from what
- pthread_attr_getstack returns. */
- *size = (*attr)->stacksize ?: PTHREAD_DEFAULT_STACKSIZE;
- return 0;
-}
-
-extern "C" int
-pthread_attr_setguardsize (pthread_attr_t *attr, size_t size)
-{
- if (!pthread_attr::is_good_object (attr))
- return EINVAL;
- /* We don't support a guardsize of more than 1 Meg. */
- if (size > 1024 * 1024)
- return EINVAL;
- (*attr)->guardsize = size;
- return 0;
-}
-
-extern "C" int
-pthread_attr_getguardsize (const pthread_attr_t *attr, size_t *size)
-{
- if (!pthread_attr::is_good_object (attr))
- return EINVAL;
- *size = (*attr)->guardsize;
- return 0;
-}
-
-extern "C" int
-pthread_attr_destroy (pthread_attr_t *attr)
-{
- if (!pthread_attr::is_good_object (attr))
- return EINVAL;
- delete (*attr);
- *attr = NULL;
- return 0;
-}
-
-int
-pthread::join (pthread_t *thread, void **return_val)
-{
- pthread_t joiner = self ();
-
- joiner->testcancel ();
-
- // Initialize return val with NULL
- if (return_val)
- *return_val = NULL;
-
- if (!is_good_object (&joiner))
- return EINVAL;
-
- if (!is_good_object (thread))
- return ESRCH;
-
- if (equal (*thread,joiner))
- return EDEADLK;
-
- (*thread)->mutex.lock ();
-
- if ((*thread)->attr.joinable == PTHREAD_CREATE_DETACHED)
- {
- (*thread)->mutex.unlock ();
- return EINVAL;
- }
- else
- {
- (*thread)->joiner = joiner;
- (*thread)->attr.joinable = PTHREAD_CREATE_DETACHED;
- (*thread)->mutex.unlock ();
-
- switch (cygwait ((*thread)->win32_obj_id, cw_infinite, cw_sig | cw_cancel))
- {
- case WAIT_OBJECT_0:
- if (return_val)
- *return_val = (*thread)->return_ptr;
- delete (*thread);
- break;
- case WAIT_CANCELED:
- // set joined thread back to joinable since we got canceled
- (*thread)->joiner = NULL;
- (*thread)->attr.joinable = PTHREAD_CREATE_JOINABLE;
- joiner->cancel_self ();
- // never reached
- break;
- default:
- // should never happen
- return EINVAL;
- }
- }
-
- return 0;
-}
-
-int
-pthread::detach (pthread_t *thread)
-{
- if (!is_good_object (thread))
- return ESRCH;
-
- (*thread)->mutex.lock ();
- if ((*thread)->attr.joinable == PTHREAD_CREATE_DETACHED)
- {
- (*thread)->mutex.unlock ();
- return EINVAL;
- }
-
- // check if thread is still alive
- if ((*thread)->valid && WaitForSingleObject ((*thread)->win32_obj_id, 0) == WAIT_TIMEOUT)
- {
- // force cleanup on exit
- (*thread)->joiner = *thread;
- (*thread)->attr.joinable = PTHREAD_CREATE_DETACHED;
- (*thread)->mutex.unlock ();
- }
- else
- {
- // thread has already terminated.
- (*thread)->mutex.unlock ();
- delete (*thread);
- }
-
- return 0;
-}
-
-int
-pthread::suspend (pthread_t *thread)
-{
- if (!is_good_object (thread))
- return ESRCH;
-
- if ((*thread)->suspended == false)
- {
- (*thread)->suspended = true;
- SuspendThread ((*thread)->win32_obj_id);
- }
-
- return 0;
-}
-
-
-int
-pthread::resume (pthread_t *thread)
-{
- if (!is_good_object (thread))
- return ESRCH;
-
- if ((*thread)->suspended == true)
- ResumeThread ((*thread)->win32_obj_id);
- (*thread)->suspended = false;
-
- return 0;
-}
-
-extern "C" int
-pthread_getattr_np (pthread_t thread, pthread_attr_t *attr)
-{
- const size_t sizeof_tbi = sizeof (THREAD_BASIC_INFORMATION);
- PTHREAD_BASIC_INFORMATION tbi;
- NTSTATUS status;
-
- if (!pthread::is_good_object (&thread))
- return ESRCH;
-
- /* attr may not be pre-initialized */
- if (!pthread_attr::is_good_object (attr))
- {
- int rv = pthread_attr_init (attr);
- if (rv != 0)
- return rv;
- }
-
- (*attr)->joinable = thread->attr.joinable;
- (*attr)->contentionscope = thread->attr.contentionscope;
- (*attr)->inheritsched = thread->attr.inheritsched;
- (*attr)->schedparam = thread->attr.schedparam;
- (*attr)->guardsize = thread->attr.guardsize;
-
- tbi = (PTHREAD_BASIC_INFORMATION) malloc (sizeof_tbi);
- status = NtQueryInformationThread (thread->win32_obj_id,
- ThreadBasicInformation,
- tbi, sizeof_tbi, NULL);
- if (NT_SUCCESS (status))
- {
- PTEB teb = (PTEB) tbi->TebBaseAddress;
- /* stackaddr holds the uppermost stack address. See the comments
- in pthread_attr_setstack and pthread_attr_setstackaddr for a
- description. */
- (*attr)->stackaddr = teb->Tib.StackBase;
- (*attr)->stacksize = (uintptr_t) teb->Tib.StackBase
- - (uintptr_t) (teb->DeallocationStack ?: teb->Tib.StackLimit);
- }
- else
- {
- debug_printf ("NtQueryInformationThread(ThreadBasicInformation), "
- "status %y", status);
- (*attr)->stackaddr = thread->attr.stackaddr;
- (*attr)->stacksize = thread->attr.stacksize;
- }
-
- return 0;
-}
-
-/* provided for source level compatability.
- See http://www.opengroup.org/onlinepubs/007908799/xsh/pthread_getconcurrency.html
-*/
-extern "C" int
-pthread_getconcurrency ()
-{
- return MT_INTERFACE->concurrency;
-}
-
-extern "C" int
-pthread_getcpuclockid (pthread_t thread, clockid_t *clk_id)
-{
- if (!pthread::is_good_object (&thread))
- return (ESRCH);
- *clk_id = (clockid_t) THREADID_TO_CLOCKID (thread->getsequence_np ());
- return 0;
-}
-
-/* keep this in sync with sched.cc */
-extern "C" int
-pthread_getschedparam (pthread_t thread, int *policy,
- struct sched_param *param)
-{
- if (!pthread::is_good_object (&thread))
- return ESRCH;
- *policy = SCHED_FIFO;
- /* we don't return the current effective priority, we return the current
- requested priority */
- *param = thread->attr.schedparam;
- return 0;
-}
-
-/* Thread Specific Data */
-extern "C" int
-pthread_key_create (pthread_key_t *key, void (*destructor) (void *))
-{
- *key = new pthread_key (destructor);
-
- if (!pthread_key::is_good_object (key))
- {
- delete (*key);
- *key = NULL;
- return EAGAIN;
- }
- return 0;
-}
-
-extern "C" int
-pthread_key_delete (pthread_key_t key)
-{
- if (!pthread_key::is_good_object (&key))
- return EINVAL;
-
- delete (key);
- return 0;
-}
-
-/* provided for source level compatability. See
-http://www.opengroup.org/onlinepubs/007908799/xsh/pthread_getconcurrency.html
-*/
-extern "C" int
-pthread_setconcurrency (int new_level)
-{
- if (new_level < 0)
- return EINVAL;
- MT_INTERFACE->concurrency = new_level;
- return 0;
-}
-
-/* keep syncronised with sched.cc */
-extern "C" int
-pthread_setschedparam (pthread_t thread, int policy,
- const struct sched_param *param)
-{
- if (!pthread::is_good_object (&thread))
- return ESRCH;
- if (policy != SCHED_FIFO)
- return ENOTSUP;
- if (!param)
- return EINVAL;
- int rv =
- sched_set_thread_priority (thread->win32_obj_id, param->sched_priority);
- if (!rv)
- thread->attr.schedparam.sched_priority = param->sched_priority;
- return rv;
-}
-
-extern "C" int
-pthread_setschedprio (pthread_t thread, int priority)
-{
- if (!pthread::is_good_object (&thread))
- return ESRCH;
- int rv =
- sched_set_thread_priority (thread->win32_obj_id, priority);
- if (!rv)
- thread->attr.schedparam.sched_priority = priority;
- return rv;
-}
-
-extern "C" int
-pthread_setspecific (pthread_key_t key, const void *value)
-{
- if (!pthread_key::is_good_object (&key))
- return EINVAL;
- (key)->set (value);
- return 0;
-}
-
-extern "C" void *
-pthread_getspecific (pthread_key_t key)
-{
- if (!pthread_key::is_good_object (&key))
- return NULL;
-
- return (key)->get ();
-
-}
-
-extern "C" int
-pthread_cond_destroy (pthread_cond_t *cond)
-{
- if (pthread_cond::is_initializer (cond))
- return 0;
- if (!pthread_cond::is_good_object (cond))
- return EINVAL;
-
- /* reads are atomic */
- if ((*cond)->waiting)
- return EBUSY;
-
- delete (*cond);
- *cond = NULL;
-
- return 0;
-}
-
-int
-pthread_cond::init (pthread_cond_t *cond, const pthread_condattr_t *attr)
-{
- pthread_cond_t new_cond;
-
- if (attr && !pthread_condattr::is_good_object (attr))
- return EINVAL;
-
- cond_initialization_lock.lock ();
-
- new_cond = new pthread_cond (attr ? (*attr) : NULL);
- if (!is_good_object (&new_cond))
- {
- delete new_cond;
- cond_initialization_lock.unlock ();
- return EAGAIN;
- }
-
- int ret = 0;
-
- __try
- {
- *cond = new_cond;
- }
- __except (NO_ERROR)
- {
- delete new_cond;
- ret = EINVAL;
- }
- __endtry
- cond_initialization_lock.unlock ();
- return ret;
-}
-
-extern "C" int
-pthread_cond_broadcast (pthread_cond_t *cond)
-{
- if (pthread_cond::is_initializer (cond))
- return 0;
- if (!pthread_cond::is_good_object (cond))
- return EINVAL;
-
- (*cond)->unblock (true);
-
- return 0;
-}
-
-extern "C" int
-pthread_cond_signal (pthread_cond_t *cond)
-{
- if (pthread_cond::is_initializer (cond))
- return 0;
- if (!pthread_cond::is_good_object (cond))
- return EINVAL;
-
- (*cond)->unblock (false);
-
- return 0;
-}
-
-static int
-__pthread_cond_wait_init (pthread_cond_t *cond, pthread_mutex_t *mutex)
-{
- if (!pthread_mutex::is_good_object (mutex))
- return EINVAL;
- if (!(*mutex)->can_be_unlocked ())
- return EPERM;
-
- if (pthread_cond::is_initializer (cond))
- pthread_cond::init (cond, NULL);
- if (!pthread_cond::is_good_object (cond))
- return EINVAL;
-
- return 0;
-}
-
-extern "C" int
-pthread_cond_timedwait (pthread_cond_t *cond, pthread_mutex_t *mutex,
- const struct timespec *abstime)
-{
- struct timespec tp;
- LARGE_INTEGER timeout;
-
- pthread_testcancel ();
-
- __try
- {
- int err = __pthread_cond_wait_init (cond, mutex);
- if (err)
- return err;
-
- /* According to SUSv3, the abstime value must be checked for validity. */
- if (abstime->tv_sec < 0
- || abstime->tv_nsec < 0
- || abstime->tv_nsec > 999999999)
- __leave;
-
- clock_gettime ((*cond)->clock_id, &tp);
-
- /* Check for immediate timeout before converting */
- if (tp.tv_sec > abstime->tv_sec
- || (tp.tv_sec == abstime->tv_sec
- && tp.tv_nsec > abstime->tv_nsec))
- return ETIMEDOUT;
-
- timeout.QuadPart = abstime->tv_sec * NSPERSEC
- + (abstime->tv_nsec + 99LL) / 100LL;
-
- switch ((*cond)->clock_id)
- {
- case CLOCK_REALTIME:
- timeout.QuadPart += FACTOR;
- break;
- default:
- /* other clocks must be handled as relative timeout */
- timeout.QuadPart -= tp.tv_sec * NSPERSEC + tp.tv_nsec / 100LL;
- timeout.QuadPart *= -1LL;
- break;
- }
- return (*cond)->wait (*mutex, &timeout);
- }
- __except (NO_ERROR) {}
- __endtry
- return EINVAL;
-}
-
-extern "C" int
-pthread_cond_wait (pthread_cond_t *cond, pthread_mutex_t *mutex)
-{
- pthread_testcancel ();
-
- int err = __pthread_cond_wait_init (cond, mutex);
- if (err)
- return err;
- return (*cond)->wait (*mutex, NULL);
-}
-
-extern "C" int
-pthread_condattr_init (pthread_condattr_t *condattr)
-{
- if (pthread_condattr::is_good_object (condattr))
- return EBUSY;
-
- *condattr = new pthread_condattr;
- if (!pthread_condattr::is_good_object (condattr))
- {
- delete (*condattr);
- *condattr = NULL;
- return ENOMEM;
- }
- return 0;
-}
-
-extern "C" int
-pthread_condattr_getpshared (const pthread_condattr_t *attr, int *pshared)
-{
- if (!pthread_condattr::is_good_object (attr))
- return EINVAL;
- *pshared = (*attr)->shared;
- return 0;
-}
-
-extern "C" int
-pthread_condattr_setpshared (pthread_condattr_t *attr, int pshared)
-{
- if (!pthread_condattr::is_good_object (attr))
- return EINVAL;
- if ((pshared < 0) || (pshared > 1))
- return EINVAL;
- /* shared cond vars not currently supported */
- if (pshared != PTHREAD_PROCESS_PRIVATE)
- return EINVAL;
- (*attr)->shared = pshared;
- return 0;
-}
-
-extern "C" int
-pthread_condattr_getclock (const pthread_condattr_t *attr, clockid_t *clock_id)
-{
- if (!pthread_condattr::is_good_object (attr))
- return EINVAL;
- *clock_id = (*attr)->clock_id;
- return 0;
-}
-
-extern "C" int
-pthread_condattr_setclock (pthread_condattr_t *attr, clockid_t clock_id)
-{
- if (!pthread_condattr::is_good_object (attr))
- return EINVAL;
- switch (clock_id)
- {
- case CLOCK_REALTIME:
- case CLOCK_MONOTONIC:
- break;
- default:
- return EINVAL;
- }
- (*attr)->clock_id = clock_id;
- return 0;
-}
-
-extern "C" int
-pthread_condattr_destroy (pthread_condattr_t *condattr)
-{
- if (!pthread_condattr::is_good_object (condattr))
- return EINVAL;
- delete (*condattr);
- *condattr = NULL;
- return 0;
-}
-
-extern "C" int
-pthread_rwlock_destroy (pthread_rwlock_t *rwlock)
-{
- if (pthread_rwlock::is_initializer (rwlock))
- return 0;
- if (!pthread_rwlock::is_good_object (rwlock))
- return EINVAL;
-
- if ((*rwlock)->writer || (*rwlock)->readers ||
- (*rwlock)->waiting_readers || (*rwlock)->waiting_writers)
- return EBUSY;
-
- delete (*rwlock);
- *rwlock = NULL;
-
- return 0;
-}
-
-int
-pthread_rwlock::init (pthread_rwlock_t *rwlock, const pthread_rwlockattr_t *attr)
-{
- pthread_rwlock_t new_rwlock;
-
- if (attr && !pthread_rwlockattr::is_good_object (attr))
- return EINVAL;
-
- rwlock_initialization_lock.lock ();
-
- new_rwlock = new pthread_rwlock (attr ? (*attr) : NULL);
- if (!is_good_object (&new_rwlock))
- {
- delete new_rwlock;
- rwlock_initialization_lock.unlock ();
- return EAGAIN;
- }
-
- int ret = 0;
-
- __try
- {
- *rwlock = new_rwlock;
- }
- __except (NO_ERROR)
- {
- delete new_rwlock;
- ret = EINVAL;
- }
- __endtry
- rwlock_initialization_lock.unlock ();
- return ret;
-}
-
-extern "C" int
-pthread_rwlock_rdlock (pthread_rwlock_t *rwlock)
-{
- pthread_testcancel ();
-
- if (pthread_rwlock::is_initializer (rwlock))
- pthread_rwlock::init (rwlock, NULL);
- if (!pthread_rwlock::is_good_object (rwlock))
- return EINVAL;
-
- return (*rwlock)->rdlock ();
-}
-
-extern "C" int
-pthread_rwlock_tryrdlock (pthread_rwlock_t *rwlock)
-{
- if (pthread_rwlock::is_initializer (rwlock))
- pthread_rwlock::init (rwlock, NULL);
- if (!pthread_rwlock::is_good_object (rwlock))
- return EINVAL;
-
- return (*rwlock)->tryrdlock ();
-}
-
-extern "C" int
-pthread_rwlock_wrlock (pthread_rwlock_t *rwlock)
-{
- pthread_testcancel ();
-
- if (pthread_rwlock::is_initializer (rwlock))
- pthread_rwlock::init (rwlock, NULL);
- if (!pthread_rwlock::is_good_object (rwlock))
- return EINVAL;
-
- return (*rwlock)->wrlock ();
-}
-
-extern "C" int
-pthread_rwlock_trywrlock (pthread_rwlock_t *rwlock)
-{
- if (pthread_rwlock::is_initializer (rwlock))
- pthread_rwlock::init (rwlock, NULL);
- if (!pthread_rwlock::is_good_object (rwlock))
- return EINVAL;
-
- return (*rwlock)->trywrlock ();
-}
-
-extern "C" int
-pthread_rwlock_unlock (pthread_rwlock_t *rwlock)
-{
- if (pthread_rwlock::is_initializer (rwlock))
- return 0;
- if (!pthread_rwlock::is_good_object (rwlock))
- return EINVAL;
-
- return (*rwlock)->unlock ();
-}
-
-extern "C" int
-pthread_rwlockattr_init (pthread_rwlockattr_t *rwlockattr)
-{
- if (pthread_rwlockattr::is_good_object (rwlockattr))
- return EBUSY;
-
- *rwlockattr = new pthread_rwlockattr;
- if (!pthread_rwlockattr::is_good_object (rwlockattr))
- {
- delete (*rwlockattr);
- *rwlockattr = NULL;
- return ENOMEM;
- }
- return 0;
-}
-
-extern "C" int
-pthread_rwlockattr_getpshared (const pthread_rwlockattr_t *attr, int *pshared)
-{
- if (!pthread_rwlockattr::is_good_object (attr))
- return EINVAL;
- *pshared = (*attr)->shared;
- return 0;
-}
-
-extern "C" int
-pthread_rwlockattr_setpshared (pthread_rwlockattr_t *attr, int pshared)
-{
- if (!pthread_rwlockattr::is_good_object (attr))
- return EINVAL;
- if ((pshared < 0) || (pshared > 1))
- return EINVAL;
- /* shared rwlock vars not currently supported */
- if (pshared != PTHREAD_PROCESS_PRIVATE)
- return EINVAL;
- (*attr)->shared = pshared;
- return 0;
-}
-
-extern "C" int
-pthread_rwlockattr_destroy (pthread_rwlockattr_t *rwlockattr)
-{
- if (!pthread_rwlockattr::is_good_object (rwlockattr))
- return EINVAL;
- delete (*rwlockattr);
- *rwlockattr = NULL;
- return 0;
-}
-
-/* Thread signal */
-extern "C" int
-pthread_kill (pthread_t thread, int sig)
-{
- // lock myself, for the use of thread2signal
- // two different kills might clash: FIXME
-
- if (!pthread::is_good_object (&thread))
- return EINVAL;
-
- siginfo_t si = {0};
- si.si_signo = sig;
- si.si_code = SI_USER;
- si.si_pid = myself->pid;
- si.si_uid = myself->uid;
- int rval;
- if (!thread->valid)
- rval = ESRCH;
- else if (sig)
- rval = sig_send (NULL, si, thread->cygtls);
- else
- switch (WaitForSingleObject (thread->win32_obj_id, 0))
- {
- case WAIT_TIMEOUT:
- rval = 0;
- break;
- default:
- rval = ESRCH;
- break;
- }
-
- // unlock myself
- return rval;
-}
-
-extern "C" int
-pthread_sigmask (int operation, const sigset_t *set, sigset_t *old_set)
-{
- int res = handle_sigprocmask (operation, set, old_set, _my_tls.sigmask);
- syscall_printf ("%d = pthread_sigmask(%d, %p, %p)",
- res, operation, set, old_set);
- return res;
-}
-
-extern "C" int
-pthread_sigqueue (pthread_t *thread, int sig, const union sigval value)
-{
- siginfo_t si = {0};
-
- if (!pthread::is_good_object (thread))
- return EINVAL;
- if (!(*thread)->valid)
- return ESRCH;
-
- si.si_signo = sig;
- si.si_code = SI_QUEUE;
- si.si_value = value;
- si.si_pid = myself->pid;
- si.si_uid = myself->uid;
- return sig_send (NULL, si, (*thread)->cygtls);
-}
-
-/* ID */
-
-extern "C" int
-pthread_equal (pthread_t t1, pthread_t t2)
-{
- return pthread::equal (t1, t2);
-}
-
-/* Mutexes */
-
-int
-pthread_mutex::init (pthread_mutex_t *mutex,
- const pthread_mutexattr_t *attr,
- const pthread_mutex_t initializer)
-{
- if (attr && !pthread_mutexattr::is_good_object (attr))
- return EINVAL;
-
- mutex_initialization_lock.lock ();
- if (initializer == NULL || pthread_mutex::is_initializer (mutex))
- {
- pthread_mutex_t new_mutex = new pthread_mutex (attr ? (*attr) : NULL);
- if (!is_good_object (&new_mutex))
- {
- delete new_mutex;
- mutex_initialization_lock.unlock ();
- return EAGAIN;
- }
-
- if (!attr && initializer)
- {
- if (initializer == PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP)
- new_mutex->type = PTHREAD_MUTEX_RECURSIVE;
- else if (initializer == PTHREAD_NORMAL_MUTEX_INITIALIZER_NP)
- new_mutex->type = PTHREAD_MUTEX_NORMAL;
- else if (initializer == PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP)
- new_mutex->type = PTHREAD_MUTEX_ERRORCHECK;
- }
-
- __try
- {
- *mutex = new_mutex;
- }
- __except (NO_ERROR)
- {
- delete new_mutex;
- mutex_initialization_lock.unlock ();
- return EINVAL;
- }
- __endtry
- }
- mutex_initialization_lock.unlock ();
- pthread_printf ("*mutex %p, attr %p, initializer %p", *mutex, attr, initializer);
-
- return 0;
-}
-
-extern "C" int
-pthread_mutex_getprioceiling (const pthread_mutex_t *mutex,
- int *prioceiling)
-{
- /* We don't define _POSIX_THREAD_PRIO_PROTECT because we do't currently support
- mutex priorities.
-
- We can support mutex priorities in the future though:
- Store a priority with each mutex.
- When the mutex is optained, set the thread priority as appropriate
- When the mutex is released, reset the thread priority. */
- return ENOSYS;
-}
-
-extern "C" int
-pthread_mutex_lock (pthread_mutex_t *mutex)
-{
- if (pthread_mutex::is_initializer (mutex))
- pthread_mutex::init (mutex, NULL, *mutex);
- if (!pthread_mutex::is_good_object (mutex))
- return EINVAL;
- return (*mutex)->lock ();
-}
-
-extern "C" int
-pthread_mutex_trylock (pthread_mutex_t *mutex)
-{
- if (pthread_mutex::is_initializer (mutex))
- pthread_mutex::init (mutex, NULL, *mutex);
- if (!pthread_mutex::is_good_object (mutex))
- return EINVAL;
- return (*mutex)->trylock ();
-}
-
-extern "C" int
-pthread_mutex_unlock (pthread_mutex_t *mutex)
-{
- if (pthread_mutex::is_initializer (mutex))
- pthread_mutex::init (mutex, NULL, *mutex);
- if (!pthread_mutex::is_good_object (mutex))
- return EINVAL;
- return (*mutex)->unlock ();
-}
-
-extern "C" int
-pthread_mutex_destroy (pthread_mutex_t *mutex)
-{
- int rv;
-
- if (pthread_mutex::is_initializer (mutex))
- return 0;
- if (!pthread_mutex::is_good_object (mutex))
- return EINVAL;
-
- rv = (*mutex)->destroy ();
- if (rv)
- return rv;
-
- *mutex = NULL;
- return 0;
-}
-
-extern "C" int
-pthread_mutex_setprioceiling (pthread_mutex_t *mutex, int prioceiling,
- int *old_ceiling)
-{
- return ENOSYS;
-}
-
-/* Spinlocks */
-
-int
-pthread_spinlock::init (pthread_spinlock_t *spinlock, int pshared)
-{
- pthread_spinlock_t new_spinlock = new pthread_spinlock (pshared);
- if (!is_good_object (&new_spinlock))
- {
- delete new_spinlock;
- return EAGAIN;
- }
-
- __try
- {
- *spinlock = new_spinlock;
- }
- __except (NO_ERROR)
- {
- delete new_spinlock;
- return EINVAL;
- }
- __endtry
- pthread_printf ("*spinlock %p, pshared %d", *spinlock, pshared);
- return 0;
-}
-
-extern "C" int
-pthread_spin_lock (pthread_spinlock_t *spinlock)
-{
- if (!pthread_spinlock::is_good_object (spinlock))
- return EINVAL;
- return (*spinlock)->lock ();
-}
-
-extern "C" int
-pthread_spin_trylock (pthread_spinlock_t *spinlock)
-{
- if (!pthread_spinlock::is_good_object (spinlock))
- return EINVAL;
- return (*spinlock)->trylock ();
-}
-
-extern "C" int
-pthread_spin_unlock (pthread_spinlock_t *spinlock)
-{
- if (!pthread_spinlock::is_good_object (spinlock))
- return EINVAL;
- return (*spinlock)->unlock ();
-}
-
-extern "C" int
-pthread_spin_destroy (pthread_spinlock_t *spinlock)
-{
- if (!pthread_spinlock::is_good_object (spinlock))
- return EINVAL;
- return (*spinlock)->destroy ();
-}
-
-/* Win32 doesn't support mutex priorities - see __pthread_mutex_getprioceiling
- for more detail */
-extern "C" int
-pthread_mutexattr_getprotocol (const pthread_mutexattr_t *attr,
- int *protocol)
-{
- if (!pthread_mutexattr::is_good_object (attr))
- return EINVAL;
- return ENOSYS;
-}
-
-extern "C" int
-pthread_mutexattr_getpshared (const pthread_mutexattr_t *attr,
- int *pshared)
-{
- if (!pthread_mutexattr::is_good_object (attr))
- return EINVAL;
- *pshared = (*attr)->pshared;
- return 0;
-}
-
-extern "C" int
-pthread_mutexattr_gettype (const pthread_mutexattr_t *attr, int *type)
-{
- if (!pthread_mutexattr::is_good_object (attr))
- return EINVAL;
- *type = (*attr)->mutextype;
- return 0;
-}
-
-/* FIXME: write and test process shared mutex's. */
-extern "C" int
-pthread_mutexattr_init (pthread_mutexattr_t *attr)
-{
- if (pthread_mutexattr::is_good_object (attr))
- return EBUSY;
-
- *attr = new pthread_mutexattr ();
- if (!pthread_mutexattr::is_good_object (attr))
- {
- delete (*attr);
- *attr = NULL;
- return ENOMEM;
- }
- return 0;
-}
-
-extern "C" int
-pthread_mutexattr_destroy (pthread_mutexattr_t *attr)
-{
- if (!pthread_mutexattr::is_good_object (attr))
- return EINVAL;
- delete (*attr);
- *attr = NULL;
- return 0;
-}
-
-
-/* Win32 doesn't support mutex priorities */
-extern "C" int
-pthread_mutexattr_setprotocol (pthread_mutexattr_t *attr, int protocol)
-{
- if (!pthread_mutexattr::is_good_object (attr))
- return EINVAL;
- return ENOSYS;
-}
-
-/* Win32 doesn't support mutex priorities */
-extern "C" int
-pthread_mutexattr_setprioceiling (pthread_mutexattr_t *attr,
- int prioceiling)
-{
- if (!pthread_mutexattr::is_good_object (attr))
- return EINVAL;
- return ENOSYS;
-}
-
-extern "C" int
-pthread_mutexattr_getprioceiling (const pthread_mutexattr_t *attr,
- int *prioceiling)
-{
- if (!pthread_mutexattr::is_good_object (attr))
- return EINVAL;
- return ENOSYS;
-}
-
-extern "C" int
-pthread_mutexattr_setpshared (pthread_mutexattr_t *attr, int pshared)
-{
- if (!pthread_mutexattr::is_good_object (attr))
- return EINVAL;
- /* we don't use pshared for anything as yet. We need to test PROCESS_SHARED
- *functionality
- */
- if (pshared != PTHREAD_PROCESS_PRIVATE)
- return EINVAL;
- (*attr)->pshared = pshared;
- return 0;
-}
-
-/* see pthread_mutex_gettype */
-extern "C" int
-pthread_mutexattr_settype (pthread_mutexattr_t *attr, int type)
-{
- if (!pthread_mutexattr::is_good_object (attr))
- return EINVAL;
-
- switch (type)
- {
- case PTHREAD_MUTEX_ERRORCHECK:
- case PTHREAD_MUTEX_RECURSIVE:
- case PTHREAD_MUTEX_NORMAL:
- (*attr)->mutextype = type;
- break;
- default:
- return EINVAL;
- }
-
- return 0;
-}
-
-/* Semaphores */
-
-List<semaphore> semaphore::semaphores;
-
-semaphore::semaphore (int pshared, unsigned int value)
-: verifyable_object (SEM_MAGIC),
- shared (pshared),
- currentvalue (-1),
- startvalue (value),
- fd (-1),
- hash (0ULL),
- sem (NULL)
-{
- SECURITY_ATTRIBUTES sa = (pshared != PTHREAD_PROCESS_PRIVATE)
- ? sec_all : sec_none_nih;
- this->win32_obj_id = ::CreateSemaphore (&sa, value, INT32_MAX, NULL);
- if (!this->win32_obj_id)
- magic = 0;
-
- semaphores.insert (this);
-}
-
-semaphore::semaphore (unsigned long long shash, LUID sluid, int sfd,
- sem_t *ssem, int oflag, mode_t mode, unsigned int value)
-: verifyable_object (SEM_MAGIC),
- shared (PTHREAD_PROCESS_SHARED),
- currentvalue (-1), /* Unused for named semaphores. */
- startvalue (value),
- fd (sfd),
- hash (shash),
- luid (sluid),
- sem (ssem)
-{
- char name[MAX_PATH];
-
- __small_sprintf (name, "semaphore/%016X%08x%08x",
- hash, luid.HighPart, luid.LowPart);
- this->win32_obj_id = ::CreateSemaphore (&sec_all, value, INT32_MAX, name);
- if (!this->win32_obj_id)
- magic = 0;
- if (GetLastError () == ERROR_ALREADY_EXISTS && (oflag & O_EXCL))
- {
- __seterrno ();
- CloseHandle (this->win32_obj_id);
- magic = 0;
- }
-
- semaphores.insert (this);
-}
-
-semaphore::~semaphore ()
-{
- if (win32_obj_id)
- CloseHandle (win32_obj_id);
-
- semaphores.remove (this);
-}
-
-void
-semaphore::_post ()
-{
- LONG dummy;
- ReleaseSemaphore (win32_obj_id, 1, &dummy);
-}
-
-int
-semaphore::_getvalue (int *sval)
-{
- NTSTATUS status;
- SEMAPHORE_BASIC_INFORMATION sbi;
-
- status = NtQuerySemaphore (win32_obj_id, SemaphoreBasicInformation, &sbi,
- sizeof sbi, NULL);
- int res;
- if (NT_SUCCESS (status))
- {
- *sval = sbi.CurrentCount;
- res = 0;
- }
- else
- {
- *sval = startvalue;
- __seterrno_from_nt_status (status);
- res = -1;
- }
- return res;
-}
-
-int
-semaphore::_trywait ()
-{
- /* FIXME: signals should be able to interrupt semaphores...
- We probably need WaitForMultipleObjects here. */
- if (WaitForSingleObject (win32_obj_id, 0) == WAIT_TIMEOUT)
- {
- set_errno (EAGAIN);
- return -1;
- }
- return 0;
-}
-
-int
-semaphore::_timedwait (const struct timespec *abstime)
-{
- LARGE_INTEGER timeout;
-
- __try
- {
- timeout.QuadPart = abstime->tv_sec * NSPERSEC
- + (abstime->tv_nsec + 99) / 100 + FACTOR;
-
- switch (cygwait (win32_obj_id, &timeout, cw_cancel | cw_cancel_self | cw_sig_eintr))
- {
- case WAIT_OBJECT_0:
- break;
- case WAIT_SIGNALED:
- set_errno (EINTR);
- return -1;
- case WAIT_TIMEOUT:
- set_errno (ETIMEDOUT);
- return -1;
- default:
- pthread_printf ("cygwait failed. %E");
- __seterrno ();
- return -1;
- }
- }
- __except (NO_ERROR)
- {
- /* According to SUSv3, abstime need not be checked for validity,
- if the semaphore can be locked immediately. */
- if (_trywait ())
- {
- set_errno (EINVAL);
- return -1;
- }
- }
- __endtry
- return 0;
-}
-
-int
-semaphore::_wait ()
-{
- switch (cygwait (win32_obj_id, cw_infinite, cw_cancel | cw_cancel_self | cw_sig_eintr))
- {
- case WAIT_OBJECT_0:
- break;
- case WAIT_SIGNALED:
- set_errno (EINTR);
- return -1;
- default:
- pthread_printf ("cygwait failed. %E");
- break;
- }
- return 0;
-}
-
-void
-semaphore::_fixup_before_fork ()
-{
- NTSTATUS status;
- SEMAPHORE_BASIC_INFORMATION sbi;
-
- status = NtQuerySemaphore (win32_obj_id, SemaphoreBasicInformation, &sbi,
- sizeof sbi, NULL);
- if (NT_SUCCESS (status))
- currentvalue = sbi.CurrentCount;
- else
- currentvalue = startvalue;
-}
-
-void
-semaphore::_fixup_after_fork ()
-{
- if (shared == PTHREAD_PROCESS_PRIVATE)
- {
- pthread_printf ("sem %p", this);
- win32_obj_id = ::CreateSemaphore (&sec_none_nih, currentvalue,
- INT32_MAX, NULL);
- if (!win32_obj_id)
- api_fatal ("failed to create new win32 semaphore, "
- "currentvalue %ld, %E", currentvalue);
- }
-}
-
-void
-semaphore::_terminate ()
-{
- int _sem_close (sem_t *, bool);
-
- if (sem)
- _sem_close (sem, false);
-}
-
-/* static members */
-
-int
-semaphore::init (sem_t *sem, int pshared, unsigned int value)
-{
- /*
- We can't tell the difference between reinitialising an
- existing semaphore and initialising a semaphore who's
- contents happen to be a valid pointer
- */
- if (is_good_object (sem))
- paranoid_printf ("potential attempt to reinitialise a semaphore");
-
- if (value > SEM_VALUE_MAX)
- {
- set_errno(EINVAL);
- return -1;
- }
-
- *sem = new semaphore (pshared, value);
-
- if (!is_good_object (sem))
- {
- delete (*sem);
- *sem = NULL;
- set_errno(EAGAIN);
- return -1;
- }
- return 0;
-}
-
-int
-semaphore::destroy (sem_t *sem)
-{
- if (!is_good_object (sem))
- {
- set_errno(EINVAL);
- return -1;
- }
-
- /* It's invalid to destroy a semaphore not opened with sem_init. */
- if ((*sem)->fd != -1)
- {
- set_errno(EINVAL);
- return -1;
- }
-
- /* FIXME - new feature - test for busy against threads... */
-
- delete (*sem);
- *sem = NULL;
- return 0;
-}
-
-int
-semaphore::close (sem_t *sem)
-{
- if (!is_good_object (sem))
- {
- set_errno(EINVAL);
- return -1;
- }
-
- /* It's invalid to close a semaphore not opened with sem_open. */
- if ((*sem)->fd == -1)
- {
- set_errno(EINVAL);
- return -1;
- }
-
- delete (*sem);
- delete sem;
- return 0;
-}
-
-sem_t *
-semaphore::open (unsigned long long hash, LUID luid, int fd, int oflag,
- mode_t mode, unsigned int value, bool &wasopen)
-{
- if (value > SEM_VALUE_MAX)
- {
- set_errno (EINVAL);
- return NULL;
- }
-
- /* sem_open is supposed to return the same pointer, if the same named
- semaphore is opened multiple times in the same process, as long as
- the semaphore hasn't been closed or unlinked in the meantime. */
- semaphores.mx.lock ();
- for (semaphore *sema = semaphores.head; sema; sema = sema->next)
- if (sema->fd >= 0 && sema->hash == hash
- && sema->luid.HighPart == luid.HighPart
- && sema->luid.LowPart == sema->luid.LowPart)
- {
- wasopen = true;
- semaphores.mx.unlock ();
- return sema->sem;
- }
- semaphores.mx.unlock ();
-
- wasopen = false;
- sem_t *sem = new sem_t;
- if (!sem)
- {
- set_errno (ENOMEM);
- return NULL;
- }
-
- *sem = new semaphore (hash, luid, fd, sem, oflag, mode, value);
-
- if (!is_good_object (sem))
- {
- delete *sem;
- delete sem;
- return NULL;
- }
- return sem;
-}
-
-int
-semaphore::wait (sem_t *sem)
-{
- pthread_testcancel ();
-
- if (!is_good_object (sem))
- {
- set_errno (EINVAL);
- return -1;
- }
-
- return (*sem)->_wait ();
-}
-
-int
-semaphore::trywait (sem_t *sem)
-{
- if (!is_good_object (sem))
- {
- set_errno (EINVAL);
- return -1;
- }
-
- return (*sem)->_trywait ();
-}
-
-int
-semaphore::timedwait (sem_t *sem, const struct timespec *abstime)
-{
- if (!is_good_object (sem))
- {
- set_errno (EINVAL);
- return -1;
- }
-
- return (*sem)->_timedwait (abstime);
-}
-
-int
-semaphore::post (sem_t *sem)
-{
- if (!is_good_object (sem))
- {
- set_errno (EINVAL);
- return -1;
- }
-
- (*sem)->_post ();
- return 0;
-}
-
-int
-semaphore::getvalue (sem_t *sem, int *sval)
-{
- __try
- {
- if (is_good_object (sem))
- return (*sem)->_getvalue (sval);
- }
- __except (NO_ERROR) {}
- __endtry
- set_errno (EINVAL);
- return -1;
-}
-
-int
-semaphore::getinternal (sem_t *sem, int *sfd, unsigned long long *shash,
- LUID *sluid, unsigned int *sval)
-{
- __try
- {
- if (!is_good_object (sem))
- __leave;
- if ((*sfd = (*sem)->fd) < 0)
- __leave;
- *shash = (*sem)->hash;
- *sluid = (*sem)->luid;
- /* POSIX defines the value in calls to sem_init/sem_open as unsigned,
- but the sem_getvalue gets a pointer to int to return the value.
- Go figure! */
- return (*sem)->_getvalue ((int *)sval);
- }
- __except (NO_ERROR) {}
- __endtry
- set_errno (EINVAL);
- return -1;
-}
-
-/* pthread_null */
-pthread *
-pthread_null::get_null_pthread ()
-{
- /* because of weird entry points */
- _instance.magic = 0;
- return &_instance;
-}
-
-pthread_null::pthread_null ()
-{
- attr.joinable = PTHREAD_CREATE_DETACHED;
- /* Mark ourselves as invalid */
- magic = 0;
-}
-
-pthread_null::~pthread_null ()
-{
-}
-
-bool
-pthread_null::create (void *(*)(void *), pthread_attr *, void *)
-{
- return true;
-}
-
-void
-pthread_null::exit (void *value_ptr)
-{
- _my_tls.remove (INFINITE);
- ExitThread (0);
-}
-
-int
-pthread_null::cancel ()
-{
- return 0;
-}
-
-void
-pthread_null::testcancel ()
-{
-}
-
-int
-pthread_null::setcancelstate (int state, int *oldstate)
-{
- return EINVAL;
-}
-
-int
-pthread_null::setcanceltype (int type, int *oldtype)
-{
- return EINVAL;
-}
-
-void
-pthread_null::push_cleanup_handler (__pthread_cleanup_handler *handler)
-{
-}
-
-void
-pthread_null::pop_cleanup_handler (int const execute)
-{
-}
-
-unsigned long
-pthread_null::getsequence_np ()
-{
- return 0;
-}
-
-pthread_null pthread_null::_instance;
diff --git a/winsup/cygwin/thread.h b/winsup/cygwin/thread.h
deleted file mode 100644
index badffcb79..000000000
--- a/winsup/cygwin/thread.h
+++ /dev/null
@@ -1,711 +0,0 @@
-/* thread.h: Locking and threading module definitions
-
- Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009,
- 2010, 2011, 2012, 2013 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#pragma once
-
-#define LOCK_MMAP_LIST 1
-
-#define WRITE_LOCK 1
-#define READ_LOCK 2
-
-/* Default is a 1 Megs stack with a 4K guardpage. The pthread stacksize
- does not include the guardpage size, so we subtract the default guardpage
- size. Additionally, the Windows stack handling disallows to use the last
- two pages as guard page (tested on XP and W7). That results in a zone of
- three pages which have to be subtract to get the actual stack size. */
-#define PTHREAD_DEFAULT_STACKSIZE (1024 * 1024 - 3 * wincap.page_size ())
-#define PTHREAD_DEFAULT_GUARDSIZE (wincap.page_size ())
-
-#include <pthread.h>
-#include <limits.h>
-#include "security.h"
-#include <errno.h>
-#include "cygerrno.h"
-#include "cygwait.h"
-
-class fast_mutex
-{
-public:
- fast_mutex () :
- lock_counter (0), win32_obj_id (0)
- {
- }
-
- ~fast_mutex ()
- {
- if(win32_obj_id)
- CloseHandle (win32_obj_id);
- }
-
- bool init ()
- {
- lock_counter = 0;
- win32_obj_id = ::CreateEvent (&sec_none_nih, false, false, NULL);
- if (!win32_obj_id)
- {
- debug_printf ("CreateEvent failed. %E");
- return false;
- }
- return true;
- }
-
- void lock ()
- {
- if (InterlockedIncrement (&lock_counter) != 1)
- cygwait (win32_obj_id, cw_infinite, cw_sig);
- }
-
- void unlock ()
- {
- if (InterlockedDecrement (&lock_counter))
- ::SetEvent (win32_obj_id);
- }
-
-private:
- LONG lock_counter;
- HANDLE win32_obj_id;
-};
-
-class per_process;
-class pinfo;
-
-#define PTHREAD_MAGIC 0xdf0df045
-#define PTHREAD_MUTEX_MAGIC PTHREAD_MAGIC+1
-#define PTHREAD_KEY_MAGIC PTHREAD_MAGIC+2
-#define PTHREAD_ATTR_MAGIC PTHREAD_MAGIC+3
-#define PTHREAD_MUTEXATTR_MAGIC PTHREAD_MAGIC+4
-#define PTHREAD_COND_MAGIC PTHREAD_MAGIC+5
-#define PTHREAD_CONDATTR_MAGIC PTHREAD_MAGIC+6
-#define SEM_MAGIC PTHREAD_MAGIC+7
-#define PTHREAD_ONCE_MAGIC PTHREAD_MAGIC+8
-#define PTHREAD_RWLOCK_MAGIC PTHREAD_MAGIC+9
-#define PTHREAD_RWLOCKATTR_MAGIC PTHREAD_MAGIC+10
-#define PTHREAD_SPINLOCK_MAGIC PTHREAD_MAGIC+11
-
-#define MUTEX_OWNER_ANONYMOUS ((pthread_t) -1)
-
-typedef uint32_t thread_magic_t;
-
-/* verifyable_object should not be defined here - it's a general purpose class */
-
-class verifyable_object
-{
-public:
- thread_magic_t magic;
-
- verifyable_object (thread_magic_t verifyer): magic (verifyer) {}
- virtual ~verifyable_object () { magic = 0; }
-};
-
-typedef enum
-{
- VALID_OBJECT,
- INVALID_OBJECT,
- VALID_STATIC_OBJECT
-} verifyable_object_state;
-
-template <class list_node> inline void
-List_insert (list_node *&head, list_node *node)
-{
- if (!node)
- return;
- do
- node->next = head;
- while (InterlockedCompareExchangePointer ((PVOID volatile *) &head,
- node, node->next) != node->next);
-}
-
-template <class list_node> inline void
-List_remove (fast_mutex &mx, list_node *&head, list_node *node)
-{
- if (!node)
- return;
- mx.lock ();
- if (head)
- {
- if (InterlockedCompareExchangePointer ((PVOID volatile *) &head,
- node->next, node) != node)
- {
- list_node *cur = head;
-
- while (cur->next && node != cur->next)
- cur = cur->next;
- if (node == cur->next)
- cur->next = cur->next->next;
- }
- }
- mx.unlock ();
-}
-
-
-template <class list_node> class List
-{
- public:
- List() : head(NULL)
- {
- mx_init ();
- }
-
- ~List()
- {
- }
-
- void fixup_after_fork ()
- {
- mx_init ();
- }
-
- void insert (list_node *node)
- {
- List_insert (head, node);
- }
-
- void remove (list_node *node)
- {
- List_remove (mx, head, node);
- }
-
- void for_each (void (list_node::*callback) ())
- {
- mx.lock ();
- list_node *cur = head;
- while (cur)
- {
- (cur->*callback) ();
- cur = cur->next;
- }
- mx.unlock ();
- }
-
- fast_mutex mx;
- list_node *head;
-
-protected:
- void mx_init ()
- {
- if (!mx.init ())
- api_fatal ("Could not create mutex for list synchronisation.");
- }
-};
-
-class pthread_key: public verifyable_object
-{
- DWORD tls_index;
-public:
- static bool is_good_object (pthread_key_t const *);
-
- int set (const void *value) {TlsSetValue (tls_index, (void *) value); return 0;}
- void *get () const {return TlsGetValue (tls_index);}
-
- pthread_key (void (*)(void *));
- ~pthread_key ();
- static void fixup_before_fork ()
- {
- keys.for_each (&pthread_key::_fixup_before_fork);
- }
-
- static void fixup_after_fork ()
- {
- keys.fixup_after_fork ();
- keys.for_each (&pthread_key::_fixup_after_fork);
- }
-
- static void run_all_destructors ()
- {
- keys.for_each (&pthread_key::run_destructor);
- }
-
- /* List support calls */
- class pthread_key *next;
-private:
- static List<pthread_key> keys;
- void _fixup_before_fork ();
- void _fixup_after_fork ();
- void (*destructor) (void *);
- void run_destructor ();
- void *fork_buf;
-};
-
-class pthread_attr: public verifyable_object
-{
-public:
- static bool is_good_object(pthread_attr_t const *);
- int joinable;
- int contentionscope;
- int inheritsched;
- struct sched_param schedparam;
- void *stackaddr;
- size_t stacksize;
- size_t guardsize;
-
- pthread_attr ();
- ~pthread_attr ();
-};
-
-class pthread_mutexattr: public verifyable_object
-{
-public:
- static bool is_good_object(pthread_mutexattr_t const *);
- int pshared;
- int mutextype;
- pthread_mutexattr ();
- ~pthread_mutexattr ();
-};
-
-class pthread_mutex: public verifyable_object
-{
-public:
- static void init_mutex ();
- static int init (pthread_mutex_t *, const pthread_mutexattr_t *attr,
- const pthread_mutex_t);
- static bool is_good_object (pthread_mutex_t const *);
- static bool is_initializer (pthread_mutex_t const *);
- static bool is_initializer_or_object (pthread_mutex_t const *);
- static bool is_initializer_or_bad_object (pthread_mutex_t const *);
-
- int lock ();
- int trylock ();
- int unlock ();
- int destroy ();
- void set_type (int in_type) {type = in_type;}
-
- int lock_recursive ()
- {
- if (recursion_counter == UINT_MAX)
- return EAGAIN;
- recursion_counter++;
- return 0;
- }
-
- bool can_be_unlocked ();
-
- pthread_mutex (pthread_mutexattr * = NULL);
- pthread_mutex (pthread_mutex_t *, pthread_mutexattr *);
- ~pthread_mutex ();
-
- class pthread_mutex *next;
- static void fixup_after_fork ()
- {
- mutexes.fixup_after_fork ();
- mutexes.for_each (&pthread_mutex::_fixup_after_fork);
- }
-
-protected:
- LONG lock_counter;
- HANDLE win32_obj_id;
- pthread_t owner;
-#ifdef DEBUGGING
- DWORD tid; /* the thread id of the owner */
-#endif
-
- void set_shared (int in_shared) { pshared = in_shared; }
- void set_owner (pthread_t self)
- {
- recursion_counter = 1;
- owner = self;
-#ifdef DEBUGGING
- tid = GetCurrentThreadId ();
-#endif
- }
-
- static const pthread_t _new_mutex;
- static const pthread_t _unlocked_mutex;
- static const pthread_t _destroyed_mutex;
-
-private:
- unsigned int recursion_counter;
- LONG condwaits;
- int type;
- int pshared;
-
- bool no_owner ();
- void _fixup_after_fork ();
-
- static List<pthread_mutex> mutexes;
- static fast_mutex mutex_initialization_lock;
- friend class pthread_cond;
-};
-
-class pthread_spinlock: public pthread_mutex
-{
-public:
- static bool is_good_object (pthread_spinlock_t const *);
- static int init (pthread_spinlock_t *, int);
-
- int lock ();
- int unlock ();
-
- pthread_spinlock (int);
-};
-
-class _cygtls;
-class pthread: public verifyable_object
-{
-public:
- HANDLE win32_obj_id;
- class pthread_attr attr;
- void *(*function) (void *);
- void *arg;
- void *return_ptr;
- bool valid;
- bool suspended;
- bool canceled;
- int cancelstate, canceltype;
- _cygtls *cygtls;
- HANDLE cancel_event;
- pthread_t joiner;
-
- virtual bool create (void *(*)(void *), pthread_attr *, void *);
-
- pthread ();
- virtual ~pthread ();
-
- static void init_mainthread ();
- static bool is_good_object(pthread_t const *);
- static void atforkprepare();
- static void atforkparent();
- static void atforkchild();
-
- /* API calls */
- static int cancel (pthread_t);
- static int join (pthread_t * thread, void **return_val);
- static int detach (pthread_t * thread);
- static int create (pthread_t * thread, const pthread_attr_t * attr,
- void *(*start_routine) (void *), void *arg);
- static int once (pthread_once_t *, void (*)(void));
- static int atfork(void (*)(void), void (*)(void), void (*)(void));
- static int suspend (pthread_t * thread);
- static int resume (pthread_t * thread);
-
- virtual void exit (void *value_ptr) __attribute__ ((noreturn));
-
- virtual int cancel ();
-
- virtual void testcancel ();
- static HANDLE get_cancel_event ();
- static void static_cancel_self () __attribute__ ((noreturn));
-
- virtual int setcancelstate (int state, int *oldstate);
- virtual int setcanceltype (int type, int *oldtype);
-
- virtual void push_cleanup_handler (__pthread_cleanup_handler *handler);
- virtual void pop_cleanup_handler (int const execute);
-
- static pthread* self ();
- static DWORD WINAPI thread_init_wrapper (void *);
-
- virtual unsigned long getsequence_np();
-
- static int equal (pthread_t t1, pthread_t t2)
- {
- return t1 == t2;
- }
-
- /* List support calls */
- class pthread *next;
- static void fixup_after_fork ()
- {
- threads.fixup_after_fork ();
- threads.for_each (&pthread::_fixup_after_fork);
- }
-
- static void suspend_all_except_self ()
- {
- threads.for_each (&pthread::suspend_except_self);
- }
-
- static void resume_all ()
- {
- threads.for_each (&pthread::resume);
- }
-
-private:
- static List<pthread> threads;
- DWORD thread_id;
- __pthread_cleanup_handler *cleanup_stack;
- pthread_mutex mutex;
- sigset_t parent_sigmask;
-
- void suspend_except_self ();
- void resume ();
-
- void _fixup_after_fork ();
-
- void pop_all_cleanup_handlers ();
- void precreate (pthread_attr *);
- void postcreate ();
- bool create_cancel_event ();
- void set_tls_self_pointer ();
- void cancel_self () __attribute__ ((noreturn));
- DWORD get_thread_id ();
-};
-
-class pthread_null : public pthread
-{
- public:
- static pthread *get_null_pthread();
- ~pthread_null();
-
- /* From pthread These should never get called
- * as the ojbect is not verifyable
- */
- bool create (void *(*)(void *), pthread_attr *, void *);
- void exit (void *value_ptr) __attribute__ ((noreturn));
- int cancel ();
- void testcancel ();
- int setcancelstate (int state, int *oldstate);
- int setcanceltype (int type, int *oldtype);
- void push_cleanup_handler (__pthread_cleanup_handler *handler);
- void pop_cleanup_handler (int const execute);
- unsigned long getsequence_np();
-
- private:
- pthread_null ();
- static pthread_null _instance;
-};
-
-class pthread_condattr: public verifyable_object
-{
-public:
- static bool is_good_object(pthread_condattr_t const *);
- int shared;
- clockid_t clock_id;
-
- pthread_condattr ();
- ~pthread_condattr ();
-};
-
-class pthread_cond: public verifyable_object
-{
-public:
- static bool is_good_object (pthread_cond_t const *);
- static bool is_initializer (pthread_cond_t const *);
- static bool is_initializer_or_object (pthread_cond_t const *);
- static bool is_initializer_or_bad_object (pthread_cond_t const *);
- static void init_mutex ();
- static int init (pthread_cond_t *, const pthread_condattr_t *);
-
- int shared;
- clockid_t clock_id;
-
- LONG waiting;
- LONG pending;
- HANDLE sem_wait;
-
- pthread_mutex mtx_in;
- pthread_mutex mtx_out;
-
- pthread_mutex_t mtx_cond;
-
- void unblock (const bool all);
- int wait (pthread_mutex_t mutex, PLARGE_INTEGER timeout = NULL);
-
- pthread_cond (pthread_condattr *);
- ~pthread_cond ();
-
- class pthread_cond * next;
- static void fixup_after_fork ()
- {
- conds.fixup_after_fork ();
- conds.for_each (&pthread_cond::_fixup_after_fork);
- }
-
-private:
- void _fixup_after_fork ();
-
- static List<pthread_cond> conds;
- static fast_mutex cond_initialization_lock;
-};
-
-class pthread_rwlockattr: public verifyable_object
-{
-public:
- static bool is_good_object(pthread_rwlockattr_t const *);
- int shared;
-
- pthread_rwlockattr ();
- ~pthread_rwlockattr ();
-};
-
-class pthread_rwlock: public verifyable_object
-{
-public:
- static bool is_good_object (pthread_rwlock_t const *);
- static bool is_initializer (pthread_rwlock_t const *);
- static bool is_initializer_or_object (pthread_rwlock_t const *);
- static bool is_initializer_or_bad_object (pthread_rwlock_t const *);
- static void init_mutex ();
- static int init (pthread_rwlock_t *, const pthread_rwlockattr_t *);
-
- int shared;
-
- uint32_t waiting_readers;
- uint32_t waiting_writers;
- pthread_t writer;
- struct RWLOCK_READER
- {
- struct RWLOCK_READER *next;
- pthread_t thread;
- uint32_t n;
- RWLOCK_READER (): next (NULL), thread (pthread::self ()), n (0) {}
- } *readers;
- fast_mutex readers_mx;
-
- int rdlock ();
- int tryrdlock ();
-
- int wrlock ();
- int trywrlock ();
-
- int unlock ();
-
- pthread_mutex mtx;
- pthread_cond cond_readers;
- pthread_cond cond_writers;
-
- pthread_rwlock (pthread_rwlockattr *);
- ~pthread_rwlock ();
-
- class pthread_rwlock * next;
- static void fixup_after_fork ()
- {
- rwlocks.fixup_after_fork ();
- rwlocks.for_each (&pthread_rwlock::_fixup_after_fork);
- }
-
-private:
- static List<pthread_rwlock> rwlocks;
-
- RWLOCK_READER *add_reader ();
- void remove_reader (struct RWLOCK_READER *rd);
- struct RWLOCK_READER *lookup_reader ();
-
- void release ()
- {
- if (waiting_writers)
- {
- if (!readers)
- cond_writers.unblock (false);
- }
- else if (waiting_readers)
- cond_readers.unblock (true);
- }
-
-
- static void rdlock_cleanup (void *arg);
- static void wrlock_cleanup (void *arg);
-
- void _fixup_after_fork ();
-
- static fast_mutex rwlock_initialization_lock;
-};
-
-class pthread_once
-{
-public:
- pthread_mutex_t mutex;
- int state;
-};
-
-/* shouldn't be here */
-class semaphore: public verifyable_object
-{
-public:
- static bool is_good_object(sem_t const *);
- /* API calls */
- static int init (sem_t *sem, int pshared, unsigned int value);
- static int destroy (sem_t *sem);
- static sem_t *open (unsigned long long hash, LUID luid, int fd, int oflag,
- mode_t mode, unsigned int value, bool &wasopen);
- static int close (sem_t *sem);
- static int wait (sem_t *sem);
- static int post (sem_t *sem);
- static int getvalue (sem_t *sem, int *sval);
- static int trywait (sem_t *sem);
- static int timedwait (sem_t *sem, const struct timespec *abstime);
-
- static int getinternal (sem_t *sem, int *sfd, unsigned long long *shash,
- LUID *sluid, unsigned int *sval);
-
- HANDLE win32_obj_id;
- int shared;
- LONG currentvalue;
- LONG startvalue;
- int fd;
- unsigned long long hash;
- LUID luid;
- sem_t *sem;
-
- semaphore (int, unsigned int);
- semaphore (unsigned long long, LUID, int, sem_t *, int, mode_t, unsigned int);
- ~semaphore ();
-
- class semaphore * next;
- static void fixup_before_fork ()
- {
- semaphores.for_each (&semaphore::_fixup_before_fork);
- }
- static void fixup_after_fork ()
- {
- semaphores.fixup_after_fork ();
- semaphores.for_each (&semaphore::_fixup_after_fork);
- }
- static void terminate ()
- {
- save_errno save;
- semaphores.for_each (&semaphore::_terminate);
- }
-
-private:
- int _wait ();
- void _post ();
- int _getvalue (int *sval);
- int _trywait ();
- int _timedwait (const struct timespec *abstime);
-
- void _fixup_before_fork ();
- void _fixup_after_fork ();
- void _terminate ();
-
- static List<semaphore> semaphores;
-};
-
-class callback
-{
-public:
- void (*cb)(void);
- class callback * next;
-};
-
-struct MTinterface
-{
- // General
- int concurrency;
- LONG threadcount;
-
- callback *pthread_prepare;
- callback *pthread_child;
- callback *pthread_parent;
-
- void Init ();
- void fixup_before_fork ();
- void fixup_after_fork ();
-
-#if 0 // avoid initialization since zero is implied and
- MTinterface () :
- concurrency (0), threadcount (0),
- pthread_prepare (NULL), pthread_child (NULL), pthread_parent (NULL)
- {
- }
-#endif
-};
-
-#define MT_INTERFACE user_data->threadinterface
diff --git a/winsup/cygwin/timer.cc b/winsup/cygwin/timer.cc
deleted file mode 100644
index bfa1495f6..000000000
--- a/winsup/cygwin/timer.cc
+++ /dev/null
@@ -1,498 +0,0 @@
-/* timer.cc
-
- Copyright 2004, 2005, 2006, 2008, 2010, 2011, 2012, 2013, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include "thread.h"
-#include "cygtls.h"
-#include "sigproc.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-
-#define TT_MAGIC 0x513e4a1c
-struct timer_tracker
-{
- unsigned magic;
- clockid_t clock_id;
- sigevent evp;
- timespec it_interval;
- HANDLE hcancel;
- HANDLE syncthread;
- long long interval_us;
- long long sleepto_us;
- bool cancel ();
- struct timer_tracker *next;
- int settime (int, const itimerspec *, itimerspec *);
- void gettime (itimerspec *);
- timer_tracker (clockid_t, const sigevent *);
- ~timer_tracker ();
- friend void fixup_timers_after_fork ();
-};
-
-timer_tracker NO_COPY ttstart (CLOCK_REALTIME, NULL);
-
-class lock_timer_tracker
-{
- static muto protect;
-public:
- lock_timer_tracker ();
- ~lock_timer_tracker ();
-};
-
-muto NO_COPY lock_timer_tracker::protect;
-
-lock_timer_tracker::lock_timer_tracker ()
-{
- protect.init ("timer_protect")->acquire ();
-}
-
-lock_timer_tracker::~lock_timer_tracker ()
-{
- protect.release ();
-}
-
-bool
-timer_tracker::cancel ()
-{
- if (!hcancel)
- return false;
-
- SetEvent (hcancel);
- DWORD res = WaitForSingleObject (syncthread, INFINITE);
- if (res != WAIT_OBJECT_0)
- system_printf ("WFSO returned unexpected value %u, %E", res);
- return true;
-}
-
-timer_tracker::~timer_tracker ()
-{
- if (cancel ())
- {
- CloseHandle (hcancel);
-#ifdef DEBUGGING
- hcancel = NULL;
-#endif
- }
- if (syncthread)
- CloseHandle (syncthread);
- magic = 0;
-}
-
-timer_tracker::timer_tracker (clockid_t c, const sigevent *e)
-{
- if (e != NULL)
- evp = *e;
- else
- {
- evp.sigev_notify = SIGEV_SIGNAL;
- evp.sigev_signo = SIGALRM;
- evp.sigev_value.sival_ptr = this;
- }
- clock_id = c;
- magic = TT_MAGIC;
- hcancel = NULL;
- if (this != &ttstart)
- {
- lock_timer_tracker here;
- next = ttstart.next;
- ttstart.next = this;
- }
-}
-
-static long long
-to_us (const timespec& ts)
-{
- long long res = ts.tv_sec;
- res *= 1000000;
- res += ts.tv_nsec / 1000 + ((ts.tv_nsec % 1000) ? 1 : 0);
- return res;
-}
-
-static DWORD WINAPI
-timer_thread (VOID *x)
-{
- timer_tracker *tt = ((timer_tracker *) x);
- long long now;
- long long sleepto_us = tt->sleepto_us;
- while (1)
- {
- long long sleep_us;
- LONG sleep_ms;
- /* Account for delays in starting thread
- and sending the signal */
- now = gtod.usecs ();
- sleep_us = sleepto_us - now;
- if (sleep_us > 0)
- {
- tt->sleepto_us = sleepto_us;
- sleep_ms = (sleep_us + 999) / 1000;
- }
- else
- {
- tt->sleepto_us = now;
- sleep_ms = 0;
- }
-
- debug_printf ("%p waiting for %u ms", x, sleep_ms);
- switch (WaitForSingleObject (tt->hcancel, sleep_ms))
- {
- case WAIT_TIMEOUT:
- debug_printf ("timed out");
- break;
- case WAIT_OBJECT_0:
- debug_printf ("%p cancelled", x);
- goto out;
- default:
- debug_printf ("%p wait failed, %E", x);
- goto out;
- }
-
- switch (tt->evp.sigev_notify)
- {
- case SIGEV_SIGNAL:
- {
- siginfo_t si = {0};
- si.si_signo = tt->evp.sigev_signo;
- si.si_sigval.sival_ptr = tt->evp.sigev_value.sival_ptr;
- si.si_code = SI_TIMER;
- debug_printf ("%p sending signal %d", x, tt->evp.sigev_signo);
- sig_send (myself_nowait, si);
- break;
- }
- case SIGEV_THREAD:
- {
- pthread_t notify_thread;
- debug_printf ("%p starting thread", x);
- pthread_attr_t *attr;
- pthread_attr_t default_attr;
- if (tt->evp.sigev_notify_attributes)
- attr = tt->evp.sigev_notify_attributes;
- else
- {
- pthread_attr_init(attr = &default_attr);
- pthread_attr_setdetachstate (attr, PTHREAD_CREATE_DETACHED);
- }
-
- int rc = pthread_create (&notify_thread, attr,
- (void * (*) (void *)) tt->evp.sigev_notify_function,
- tt->evp.sigev_value.sival_ptr);
- if (rc)
- {
- debug_printf ("thread creation failed, %E");
- return 0;
- }
- // FIXME: pthread_join?
- break;
- }
- }
- if (!tt->interval_us)
- break;
-
- sleepto_us = tt->sleepto_us + tt->interval_us;
- debug_printf ("looping");
- }
-
-out:
- _my_tls._ctinfo->auto_release (); /* automatically return the cygthread to the cygthread pool */
- return 0;
-}
-
-static bool
-it_bad (const timespec& t)
-{
- if (t.tv_nsec < 0 || t.tv_nsec >= 1000000000 || t.tv_sec < 0)
- {
- set_errno (EINVAL);
- return true;
- }
- return false;
-}
-
-int
-timer_tracker::settime (int in_flags, const itimerspec *value, itimerspec *ovalue)
-{
- int ret = -1;
-
- __try
- {
- if (!value)
- {
- set_errno (EINVAL);
- __leave;
- }
-
- if (it_bad (value->it_value) || it_bad (value->it_interval))
- __leave;
-
- long long now = in_flags & TIMER_ABSTIME ? 0 : gtod.usecs ();
-
- lock_timer_tracker here;
- cancel ();
-
- if (ovalue)
- gettime (ovalue);
-
- if (!value->it_value.tv_sec && !value->it_value.tv_nsec)
- interval_us = sleepto_us = 0;
- else
- {
- sleepto_us = now + to_us (value->it_value);
- interval_us = to_us (value->it_interval);
- it_interval = value->it_interval;
- if (!hcancel)
- hcancel = CreateEvent (&sec_none_nih, TRUE, FALSE, NULL);
- else
- ResetEvent (hcancel);
- if (!syncthread)
- syncthread = CreateEvent (&sec_none_nih, TRUE, FALSE, NULL);
- else
- ResetEvent (syncthread);
- new cygthread (timer_thread, this, "itimer", syncthread);
- }
- ret = 0;
- }
- __except (EFAULT) {}
- __endtry
- return ret;
-}
-
-void
-timer_tracker::gettime (itimerspec *ovalue)
-{
- if (!hcancel)
- memset (ovalue, 0, sizeof (*ovalue));
- else
- {
- ovalue->it_interval = it_interval;
- long long now = gtod.usecs ();
- long long left_us = sleepto_us - now;
- if (left_us < 0)
- left_us = 0;
- ovalue->it_value.tv_sec = left_us / 1000000;
- ovalue->it_value.tv_nsec = (left_us % 1000000) * 1000;
- }
-}
-
-extern "C" int
-timer_gettime (timer_t timerid, struct itimerspec *ovalue)
-{
- int ret = -1;
-
- __try
- {
- timer_tracker *tt = (timer_tracker *) timerid;
- if (tt->magic != TT_MAGIC)
- {
- set_errno (EINVAL);
- return -1;
- }
-
- tt->gettime (ovalue);
- ret = 0;
- }
- __except (EFAULT) {}
- __endtry
- return ret;
-}
-
-extern "C" int
-timer_create (clockid_t clock_id, struct sigevent *__restrict evp,
- timer_t *__restrict timerid)
-{
- int ret = -1;
-
- __try
- {
- if (CLOCKID_IS_PROCESS (clock_id) || CLOCKID_IS_THREAD (clock_id))
- {
- set_errno (ENOTSUP);
- return -1;
- }
-
- if (clock_id != CLOCK_REALTIME)
- {
- set_errno (EINVAL);
- return -1;
- }
-
- *timerid = (timer_t) new timer_tracker (clock_id, evp);
- ret = 0;
- }
- __except (EFAULT) {}
- __endtry
- return ret;
-}
-
-extern "C" int
-timer_settime (timer_t timerid, int flags,
- const struct itimerspec *__restrict value,
- struct itimerspec *__restrict ovalue)
-{
- int ret = -1;
-
- __try
- {
- timer_tracker *tt = (timer_tracker *) timerid;
- if (tt->magic != TT_MAGIC)
- {
- set_errno (EINVAL);
- __leave;
- }
- ret = tt->settime (flags, value, ovalue);
- }
- __except (EFAULT) {}
- __endtry
- return ret;
-}
-
-extern "C" int
-timer_delete (timer_t timerid)
-{
- int ret = -1;
-
- __try
- {
- timer_tracker *in_tt = (timer_tracker *) timerid;
- if (in_tt->magic != TT_MAGIC)
- {
- set_errno (EINVAL);
- __leave;
- }
-
- lock_timer_tracker here;
- for (timer_tracker *tt = &ttstart; tt->next != NULL; tt = tt->next)
- if (tt->next == in_tt)
- {
- tt->next = in_tt->next;
- delete in_tt;
- ret = 0;
- __leave;
- }
- set_errno (EINVAL);
- ret = 0;
- }
- __except (EFAULT) {}
- __endtry
- return ret;
-}
-
-void
-fixup_timers_after_fork ()
-{
- ttstart.hcancel = ttstart.syncthread = NULL;
- for (timer_tracker *tt = &ttstart; tt->next != NULL; /* nothing */)
- {
- timer_tracker *deleteme = tt->next;
- tt->next = deleteme->next;
- deleteme->hcancel = deleteme->syncthread = NULL;
- delete deleteme;
- }
-}
-
-
-extern "C" int
-setitimer (int which, const struct itimerval *__restrict value,
- struct itimerval *__restrict ovalue)
-{
- int ret;
- if (which != ITIMER_REAL)
- {
- set_errno (EINVAL);
- ret = -1;
- }
- else
- {
- struct itimerspec spec_value, spec_ovalue;
- spec_value.it_interval.tv_sec = value->it_interval.tv_sec;
- spec_value.it_interval.tv_nsec = value->it_interval.tv_usec * 1000;
- spec_value.it_value.tv_sec = value->it_value.tv_sec;
- spec_value.it_value.tv_nsec = value->it_value.tv_usec * 1000;
- ret = timer_settime ((timer_t) &ttstart, 0, &spec_value, &spec_ovalue);
- if (ret)
- ret = -1;
- else if (ovalue)
- {
- ovalue->it_interval.tv_sec = spec_ovalue.it_interval.tv_sec;
- ovalue->it_interval.tv_usec = spec_ovalue.it_interval.tv_nsec / 1000;
- ovalue->it_value.tv_sec = spec_ovalue.it_value.tv_sec;
- ovalue->it_value.tv_usec = spec_ovalue.it_value.tv_nsec / 1000;
- }
- }
- syscall_printf ("%R = setitimer()", ret);
- return ret;
-}
-
-
-extern "C" int
-getitimer (int which, struct itimerval *ovalue)
-{
- int ret = -1;
-
- if (which != ITIMER_REAL)
- set_errno (EINVAL);
- else
- {
- __try
- {
- struct itimerspec spec_ovalue;
- ret = timer_gettime ((timer_t) &ttstart, &spec_ovalue);
- if (!ret)
- {
- ovalue->it_interval.tv_sec = spec_ovalue.it_interval.tv_sec;
- ovalue->it_interval.tv_usec = spec_ovalue.it_interval.tv_nsec / 1000;
- ovalue->it_value.tv_sec = spec_ovalue.it_value.tv_sec;
- ovalue->it_value.tv_usec = spec_ovalue.it_value.tv_nsec / 1000;
- }
- }
- __except (EFAULT) {}
- __endtry
- }
- syscall_printf ("%R = getitimer()", ret);
- return ret;
-}
-
-/* FIXME: POSIX - alarm survives exec */
-extern "C" unsigned int
-alarm (unsigned int seconds)
-{
- struct itimerspec newt = {}, oldt;
- /* alarm cannot fail, but only needs not be
- correct for arguments < 64k. Truncate */
- if (seconds > (HIRES_DELAY_MAX / 1000 - 1))
- seconds = (HIRES_DELAY_MAX / 1000 - 1);
- newt.it_value.tv_sec = seconds;
- timer_settime ((timer_t) &ttstart, 0, &newt, &oldt);
- int ret = oldt.it_value.tv_sec + (oldt.it_value.tv_nsec > 0);
- syscall_printf ("%d = alarm(%u)", ret, seconds);
- return ret;
-}
-
-extern "C" useconds_t
-ualarm (useconds_t value, useconds_t interval)
-{
- struct itimerspec timer = {}, otimer;
- /* ualarm cannot fail.
- Interpret negative arguments as zero */
- if (value > 0)
- {
- timer.it_value.tv_sec = value / 1000000;
- timer.it_value.tv_nsec = (value % 1000000) * 1000;
- }
- if (interval > 0)
- {
- timer.it_interval.tv_sec = interval / 1000000;
- timer.it_interval.tv_nsec = (interval % 1000000) * 1000;
- }
- timer_settime ((timer_t) &ttstart, 0, &timer, &otimer);
- useconds_t ret = otimer.it_value.tv_sec * 1000000 + (otimer.it_value.tv_nsec + 999) / 1000;
- syscall_printf ("%d = ualarm(%ld , %ld)", ret, value, interval);
- return ret;
-}
diff --git a/winsup/cygwin/times.cc b/winsup/cygwin/times.cc
deleted file mode 100644
index bd8f1cf0e..000000000
--- a/winsup/cygwin/times.cc
+++ /dev/null
@@ -1,758 +0,0 @@
-/* times.cc
-
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#define __timezonefunc__
-#include "winsup.h"
-#include <sys/times.h>
-#include <sys/timeb.h>
-#include <utime.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include "cygerrno.h"
-#include "security.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "pinfo.h"
-#include "thread.h"
-#include "cygtls.h"
-#include "ntdll.h"
-
-hires_ms NO_COPY gtod;
-
-hires_ns NO_COPY ntod;
-
-/* Temporary declare here until 32 bit w32api follows suit. */
-extern "C" { void WINAPI GetSystemTimePreciseAsFileTime (LPFILETIME); }
-
-static inline void __attribute__ ((always_inline))
-get_system_time (PLARGE_INTEGER systime)
-{
- wincap.has_precise_system_time ()
- ? GetSystemTimePreciseAsFileTime ((LPFILETIME) systime)
- : GetSystemTimeAsFileTime ((LPFILETIME) systime);
-}
-
-/* Cygwin internal */
-static uint64_t __stdcall
-__to_clock_t (PLARGE_INTEGER src, int flag)
-{
- uint64_t total = src->QuadPart;
- /* Convert into clock ticks - the total is in 10ths of a usec. */
- if (flag)
- total -= FACTOR;
-
- total /= NSPERSEC / CLOCKS_PER_SEC;
- return total;
-}
-
-/* times: POSIX 4.5.2.1 */
-extern "C" clock_t
-times (struct tms *buf)
-{
- static SYSTEM_TIMEOFDAY_INFORMATION stodi;
- KERNEL_USER_TIMES kut;
- LARGE_INTEGER ticks;
- clock_t tc = (clock_t) -1;
-
- __try
- {
- /* Fetch boot time if we haven't already. */
- if (!stodi.BootTime.QuadPart)
- NtQuerySystemInformation (SystemTimeOfDayInformation,
- &stodi, sizeof stodi, NULL);
-
- NtQueryInformationProcess (NtCurrentProcess (), ProcessTimes,
- &kut, sizeof kut, NULL);
- get_system_time (&ticks);
-
- /* uptime */
- ticks.QuadPart -= stodi.BootTime.QuadPart;
- /* ticks is in in 100ns, convert to clock ticks. */
- tc = (clock_t) (ticks.QuadPart * CLOCKS_PER_SEC / NSPERSEC);
-
- buf->tms_stime = __to_clock_t (&kut.KernelTime, 0);
- buf->tms_utime = __to_clock_t (&kut.UserTime, 0);
- timeval_to_filetime (&myself->rusage_children.ru_stime, &kut.KernelTime);
- buf->tms_cstime = __to_clock_t (&kut.KernelTime, 1);
- timeval_to_filetime (&myself->rusage_children.ru_utime, &kut.UserTime);
- buf->tms_cutime = __to_clock_t (&kut.UserTime, 1);
- }
- __except (EFAULT)
- {
- tc = (clock_t) -1;
- }
- __endtry
- syscall_printf ("%D = times(%p)", tc, buf);
- return tc;
-}
-
-EXPORT_ALIAS (times, _times)
-
-/* settimeofday: BSD */
-extern "C" int
-settimeofday (const struct timeval *tv, const struct timezone *tz)
-{
- SYSTEMTIME st;
- struct tm *ptm;
- int res = -1;
-
- __try
- {
- if (tv->tv_usec < 0 || tv->tv_usec >= 1000000)
- {
- set_errno (EINVAL);
- return -1;
- }
-
- ptm = gmtime (&tv->tv_sec);
- st.wYear = ptm->tm_year + 1900;
- st.wMonth = ptm->tm_mon + 1;
- st.wDayOfWeek = ptm->tm_wday;
- st.wDay = ptm->tm_mday;
- st.wHour = ptm->tm_hour;
- st.wMinute = ptm->tm_min;
- st.wSecond = ptm->tm_sec;
- st.wMilliseconds = tv->tv_usec / 1000;
-
- res = -!SetSystemTime (&st);
- gtod.reset ();
-
- if (res)
- set_errno (EPERM);
- }
- __except (EFAULT)
- {
- res = -1;
- }
- __endtry
- syscall_printf ("%R = settimeofday(%p, %p)", res, tv, tz);
- return res;
-}
-
-/* stime: SVr4 */
-extern "C" int
-stime (const time_t *t)
-{
- struct timeval tv = { *t, 0 };
- return settimeofday(&tv, NULL);
-}
-
-/* timezone: standards? */
-extern "C" char *
-timezone (void)
-{
- char *b = _my_tls.locals.timezone_buf;
-
- tzset ();
- __small_sprintf (b,"GMT%+d:%02d", (int) (-_timezone / 3600), (int) (abs (_timezone / 60) % 60));
- return b;
-}
-
-/* Cygwin internal */
-void __stdcall
-totimeval (struct timeval *dst, PLARGE_INTEGER src, int sub, int flag)
-{
- int64_t x = __to_clock_t (src, flag);
-
- x *= (int64_t) 1000000 / CLOCKS_PER_SEC; /* Turn x into usecs */
- x -= (int64_t) sub * 1000000;
-
- dst->tv_usec = x % 1000000; /* And split */
- dst->tv_sec = x / 1000000;
-}
-
-/* FIXME: Make thread safe */
-extern "C" int
-gettimeofday (struct timeval *__restrict tv, void *__restrict tzvp)
-{
- struct timezone *tz = (struct timezone *) tzvp;
- static bool tzflag;
- LONGLONG now = gtod.usecs ();
-
- if (now == (LONGLONG) -1)
- return -1;
-
- tv->tv_sec = now / 1000000;
- tv->tv_usec = now % 1000000;
-
- if (tz != NULL)
- {
- if (!tzflag)
- {
- tzset ();
- tzflag = true;
- }
- tz->tz_minuteswest = _timezone / 60;
- tz->tz_dsttime = _daylight;
- }
-
- return 0;
-}
-
-EXPORT_ALIAS (gettimeofday, _gettimeofday)
-
-/* Cygwin internal */
-void __stdcall
-timespec_to_filetime (const struct timespec *time_in, PLARGE_INTEGER out)
-{
- if (time_in->tv_nsec == UTIME_OMIT)
- out->QuadPart = 0;
- else
- out->QuadPart = time_in->tv_sec * NSPERSEC
- + time_in->tv_nsec / (1000000000/NSPERSEC) + FACTOR;
-}
-
-/* Cygwin internal */
-void __stdcall
-timeval_to_filetime (const struct timeval *time_in, PLARGE_INTEGER out)
-{
- out->QuadPart = time_in->tv_sec * NSPERSEC
- + time_in->tv_usec * (NSPERSEC/1000000) + FACTOR;
-}
-
-/* Cygwin internal */
-static timeval __stdcall
-time_t_to_timeval (time_t in)
-{
- timeval res;
- res.tv_sec = in;
- res.tv_usec = 0;
- return res;
-}
-
-/* Cygwin internal */
-static const struct timespec *
-timeval_to_timespec (const struct timeval *tvp, struct timespec *tmp)
-{
- if (!tvp)
- return NULL;
-
- tmp[0].tv_sec = tvp[0].tv_sec;
- tmp[0].tv_nsec = tvp[0].tv_usec * 1000;
- if (tmp[0].tv_nsec < 0)
- tmp[0].tv_nsec = 0;
- else if (tmp[0].tv_nsec > 999999999)
- tmp[0].tv_nsec = 999999999;
-
- tmp[1].tv_sec = tvp[1].tv_sec;
- tmp[1].tv_nsec = tvp[1].tv_usec * 1000;
- if (tmp[1].tv_nsec < 0)
- tmp[1].tv_nsec = 0;
- else if (tmp[1].tv_nsec > 999999999)
- tmp[1].tv_nsec = 999999999;
-
- return tmp;
-}
-
-/* Cygwin internal */
-/* Convert a Win32 time to "UNIX" format. */
-time_t __stdcall
-to_time_t (PLARGE_INTEGER ptr)
-{
- /* A file time is the number of 100ns since jan 1 1601
- stuffed into two long words.
- A time_t is the number of seconds since jan 1 1970. */
-
- int64_t x = ptr->QuadPart;
-
- /* pass "no time" as epoch */
- if (x == 0)
- return 0;
-
- x -= FACTOR; /* number of 100ns between 1601 and 1970 */
- x /= NSPERSEC; /* number of 100ns in a second */
- return x;
-}
-
-/* Cygwin internal */
-/* Convert a Win32 time to "UNIX" timestruc_t format. */
-void __stdcall
-to_timestruc_t (PLARGE_INTEGER ptr, timestruc_t *out)
-{
- /* A file time is the number of 100ns since jan 1 1601
- stuffed into two long words.
- A timestruc_t is the number of seconds and microseconds since jan 1 1970
- stuffed into a time_t and a long. */
-
- int64_t rem;
- int64_t x = ptr->QuadPart;
-
- /* pass "no time" as epoch */
- if (x == 0)
- {
- out->tv_sec = 0;
- out->tv_nsec = 0;
- return;
- }
-
- x -= FACTOR; /* number of 100ns between 1601 and 1970 */
- rem = x % NSPERSEC;
- x /= NSPERSEC; /* number of 100ns in a second */
- out->tv_nsec = rem * 100; /* as tv_nsec is in nanoseconds */
- out->tv_sec = x;
-}
-
-/* Cygwin internal */
-/* Get the current time as a "UNIX" timestruc_t format. */
-void __stdcall
-time_as_timestruc_t (timestruc_t * out)
-{
- LARGE_INTEGER systime;
-
- get_system_time (&systime);
- to_timestruc_t (&systime, out);
-}
-
-/* time: POSIX 4.5.1.1, C 4.12.2.4 */
-/* Return number of seconds since 00:00 UTC on jan 1, 1970 */
-extern "C" time_t
-time (time_t * ptr)
-{
- time_t res;
- LARGE_INTEGER systime;
-
- get_system_time (&systime);
- res = to_time_t (&systime);
- if (ptr)
- *ptr = res;
-
- syscall_printf ("%d = time(%p)", res, ptr);
-
- return res;
-}
-
-int
-utimens_worker (path_conv &win32, const struct timespec *tvp)
-{
- int res = -1;
-
- if (win32.error)
- set_errno (win32.error);
- else
- {
- fhandler_base *fh = NULL;
- bool fromfd = false;
-
- cygheap_fdenum cfd (true);
- while (cfd.next () >= 0)
- if (cfd->get_access () & (FILE_WRITE_ATTRIBUTES | GENERIC_WRITE)
- && RtlEqualUnicodeString (cfd->pc.get_nt_native_path (),
- win32.get_nt_native_path (),
- cfd->pc.objcaseinsensitive ()))
- {
- fh = cfd;
- fromfd = true;
- break;
- }
-
- if (!fh)
- {
- if (!(fh = build_fh_pc (win32)))
- goto error;
-
- if (fh->error ())
- {
- debug_printf ("got %d error from build_fh_pc", fh->error ());
- set_errno (fh->error ());
- }
- }
-
- res = fh->utimens (tvp);
-
- if (!fromfd)
- delete fh;
- }
-
-error:
- syscall_printf ("%R = utimes(%S, %p)", res, win32.get_nt_native_path (), tvp);
- return res;
-}
-
-/* utimes: POSIX/SUSv3 */
-extern "C" int
-utimes (const char *path, const struct timeval *tvp)
-{
- path_conv win32 (path, PC_POSIX | PC_SYM_FOLLOW, stat_suffixes);
- struct timespec tmp[2];
- return utimens_worker (win32, timeval_to_timespec (tvp, tmp));
-}
-
-/* BSD */
-extern "C" int
-lutimes (const char *path, const struct timeval *tvp)
-{
- path_conv win32 (path, PC_POSIX | PC_SYM_NOFOLLOW, stat_suffixes);
- struct timespec tmp[2];
- return utimens_worker (win32, timeval_to_timespec (tvp, tmp));
-}
-
-/* futimens: POSIX/SUSv4 */
-extern "C" int
-futimens (int fd, const struct timespec *tvp)
-{
- int res;
-
- cygheap_fdget cfd (fd);
- if (cfd < 0)
- res = -1;
- else if (cfd->get_access () & (FILE_WRITE_ATTRIBUTES | GENERIC_WRITE))
- res = cfd->utimens (tvp);
- else
- res = utimens_worker (cfd->pc, tvp);
- syscall_printf ("%d = futimens(%d, %p)", res, fd, tvp);
- return res;
-}
-
-/* BSD */
-extern "C" int
-futimes (int fd, const struct timeval *tvp)
-{
- struct timespec tmp[2];
- return futimens (fd, timeval_to_timespec (tvp, tmp));
-}
-
-/* utime: POSIX 5.6.6.1 */
-extern "C" int
-utime (const char *path, const struct utimbuf *buf)
-{
- struct timeval tmp[2];
-
- if (buf == 0)
- return utimes (path, 0);
-
- debug_printf ("incoming utime act %lx", buf->actime);
- tmp[0] = time_t_to_timeval (buf->actime);
- tmp[1] = time_t_to_timeval (buf->modtime);
-
- return utimes (path, tmp);
-}
-
-/* ftime: standards? */
-extern "C" int
-ftime (struct timeb *tp)
-{
- struct timeval tv;
- struct timezone tz;
-
- if (gettimeofday (&tv, &tz) < 0)
- return -1;
-
- tp->time = tv.tv_sec;
- tp->millitm = tv.tv_usec / 1000;
- tp->timezone = tz.tz_minuteswest;
- tp->dstflag = tz.tz_dsttime;
-
- return 0;
-}
-
-#define stupid_printf if (cygwin_finished_initializing) debug_printf
-void
-hires_ns::prime ()
-{
- LARGE_INTEGER ifreq;
- if (!QueryPerformanceFrequency (&ifreq))
- {
- inited = -1;
- return;
- }
-
- int priority = GetThreadPriority (GetCurrentThread ());
-
- SetThreadPriority (GetCurrentThread (), THREAD_PRIORITY_TIME_CRITICAL);
- if (!QueryPerformanceCounter (&primed_pc))
- {
- SetThreadPriority (GetCurrentThread (), priority);
- inited = -1;
- return;
- }
-
- freq = (double) ((double) 1000000000. / (double) ifreq.QuadPart);
- inited = true;
- SetThreadPriority (GetCurrentThread (), priority);
-}
-
-LONGLONG
-hires_ns::nsecs (bool monotonic)
-{
- if (!inited)
- prime ();
- if (inited < 0)
- {
- set_errno (ENOSYS);
- return (LONGLONG) -1;
- }
-
- LARGE_INTEGER now;
- if (!QueryPerformanceCounter (&now))
- {
- set_errno (ENOSYS);
- return -1;
- }
-
- // FIXME: Use round() here?
- now.QuadPart = (LONGLONG) (freq * (double)
- (now.QuadPart - (monotonic ? 0LL : primed_pc.QuadPart)));
- return now.QuadPart;
-}
-
-LONGLONG
-hires_ms::nsecs ()
-{
- LARGE_INTEGER systime;
- get_system_time (&systime);
- /* Add conversion factor for UNIX vs. Windows base time */
- return systime.QuadPart - FACTOR;
-}
-
-extern "C" int
-clock_gettime (clockid_t clk_id, struct timespec *tp)
-{
- if (CLOCKID_IS_PROCESS (clk_id))
- {
- pid_t pid = CLOCKID_TO_PID (clk_id);
- HANDLE hProcess;
- KERNEL_USER_TIMES kut;
- int64_t x;
-
- if (pid == 0)
- pid = getpid ();
-
- pinfo p (pid);
- if (!p->exists ())
- {
- set_errno (EINVAL);
- return -1;
- }
-
- hProcess = OpenProcess (PROCESS_QUERY_INFORMATION, 0, p->dwProcessId);
- NtQueryInformationProcess (hProcess, ProcessTimes,
- &kut, sizeof kut, NULL);
-
- x = kut.KernelTime.QuadPart + kut.UserTime.QuadPart;
- tp->tv_sec = x / NSPERSEC;
- tp->tv_nsec = (x % NSPERSEC) * 100LL;
-
- CloseHandle (hProcess);
- return 0;
- }
-
- if (CLOCKID_IS_THREAD (clk_id))
- {
- long thr_id = CLOCKID_TO_THREADID (clk_id);
- HANDLE hThread;
- KERNEL_USER_TIMES kut;
- int64_t x;
-
- if (thr_id == 0)
- thr_id = pthread::self ()->getsequence_np ();
-
- hThread = OpenThread (THREAD_QUERY_INFORMATION, 0, thr_id);
- if (!hThread)
- {
- set_errno (EINVAL);
- return -1;
- }
-
- NtQueryInformationThread (hThread, ThreadTimes,
- &kut, sizeof kut, NULL);
-
- x = kut.KernelTime.QuadPart + kut.UserTime.QuadPart;
- tp->tv_sec = x / NSPERSEC;
- tp->tv_nsec = (x % NSPERSEC) * 100LL;
-
- CloseHandle (hThread);
- return 0;
- }
-
- switch (clk_id)
- {
- case CLOCK_REALTIME:
- {
- LONGLONG now = gtod.nsecs ();
- if (now == (LONGLONG) -1)
- return -1;
- tp->tv_sec = now / NSPERSEC;
- tp->tv_nsec = (now % NSPERSEC) * (1000000000 / NSPERSEC);
- break;
- }
-
- case CLOCK_MONOTONIC:
- {
- LONGLONG now = ntod.nsecs (true);
- if (now == (LONGLONG) -1)
- return -1;
-
- tp->tv_sec = now / 1000000000;
- tp->tv_nsec = (now % 1000000000);
- break;
- }
-
- default:
- set_errno (EINVAL);
- return -1;
- }
-
- return 0;
-}
-
-extern "C" int
-clock_settime (clockid_t clk_id, const struct timespec *tp)
-{
- struct timeval tv;
-
- if (CLOCKID_IS_PROCESS (clk_id) || CLOCKID_IS_THREAD (clk_id))
- /* According to POSIX, the privileges to set a particular clock
- * are implementation-defined. On Linux, CPU-time clocks are not
- * settable; do the same here.
- */
- {
- set_errno (EPERM);
- return -1;
- }
-
- if (clk_id != CLOCK_REALTIME)
- {
- set_errno (EINVAL);
- return -1;
- }
-
- tv.tv_sec = tp->tv_sec;
- tv.tv_usec = tp->tv_nsec / 1000;
-
- return settimeofday (&tv, NULL);
-}
-
-static ULONG minperiod; // FIXME: Maintain period after a fork.
-
-LONGLONG
-hires_ns::resolution ()
-{
- if (!inited)
- prime ();
- if (inited < 0)
- {
- set_errno (ENOSYS);
- return (LONGLONG) -1;
- }
-
- return (freq <= 1.0) ? 1LL : (LONGLONG) freq;
-}
-
-UINT
-hires_ms::resolution ()
-{
- if (!minperiod)
- {
- ULONG coarsest, finest, actual;
-
- NtQueryTimerResolution (&coarsest, &finest, &actual);
- /* The actual resolution of the OS timer is a system-wide setting which
- can be changed any time, by any process. The only fixed value we
- can rely on is the coarsest value. */
- minperiod = coarsest;
- }
- return minperiod;
-}
-
-extern "C" int
-clock_getres (clockid_t clk_id, struct timespec *tp)
-{
- if (CLOCKID_IS_PROCESS (clk_id) || CLOCKID_IS_THREAD (clk_id))
- {
- ULONG coarsest, finest, actual;
-
- NtQueryTimerResolution (&coarsest, &finest, &actual);
- tp->tv_sec = coarsest / NSPERSEC;
- tp->tv_nsec = (coarsest % NSPERSEC) * 100;
- return 0;
- }
-
- switch (clk_id)
- {
- case CLOCK_REALTIME:
- {
- DWORD period = gtod.resolution ();
- tp->tv_sec = period / NSPERSEC;
- tp->tv_nsec = (period % NSPERSEC) * 100;
- break;
- }
-
- case CLOCK_MONOTONIC:
- {
- LONGLONG period = ntod.resolution ();
- tp->tv_sec = period / 1000000000;
- tp->tv_nsec = period % 1000000000;
- break;
- }
-
- default:
- set_errno (EINVAL);
- return -1;
- }
-
- return 0;
-}
-
-extern "C" int
-clock_setres (clockid_t clk_id, struct timespec *tp)
-{
- static NO_COPY bool period_set;
- int status;
-
- if (clk_id != CLOCK_REALTIME)
- {
- set_errno (EINVAL);
- return -1;
- }
-
- /* Convert to 100ns to match OS resolution. The OS uses ULONG values
- to express resolution in 100ns units, so the coarsest timer resolution
- is < 430 secs. Actually the coarsest timer resolution is only slightly
- beyond 15ms, but this might change in future OS versions, so we play nice
- here. */
- ULONGLONG period = (tp->tv_sec * 10000000ULL) + ((tp->tv_nsec) / 100ULL);
-
- /* clock_setres is non-POSIX/non-Linux. On QNX, the function always
- rounds the incoming value to the nearest supported value. */
- ULONG coarsest, finest, actual;
- if (NT_SUCCESS (NtQueryTimerResolution (&coarsest, &finest, &actual)))
- {
- if (period > coarsest)
- period = coarsest;
- else if (finest > period)
- period = finest;
- }
-
- if (period_set
- && NT_SUCCESS (NtSetTimerResolution (minperiod, FALSE, &actual)))
- period_set = false;
-
- status = NtSetTimerResolution (period, TRUE, &actual);
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- return -1;
- }
- minperiod = period;
- period_set = true;
- return 0;
-}
-
-extern "C" int
-clock_getcpuclockid (pid_t pid, clockid_t *clk_id)
-{
- if (pid != 0 && !pinfo (pid)->exists ())
- return (ESRCH);
- *clk_id = (clockid_t) PID_TO_CLOCKID (pid);
- return 0;
-}
diff --git a/winsup/cygwin/tls_pbuf.cc b/winsup/cygwin/tls_pbuf.cc
deleted file mode 100644
index 9c12a2df8..000000000
--- a/winsup/cygwin/tls_pbuf.cc
+++ /dev/null
@@ -1,45 +0,0 @@
-/* tls_pbuf.cc
-
- Copyright 2008, 2010, 2014 Red Hat, Inc.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include <winsup.h>
-#include <malloc.h>
-#include "tls_pbuf.h"
-
-#define tls_pbuf _my_tls.locals.pathbufs
-
-void
-tls_pathbuf::destroy ()
-{
- for (uint32_t i = 0; i < TP_NUM_C_BUFS && c_buf[i]; ++i)
- free (c_buf[i]);
- for (uint32_t i = 0; i < TP_NUM_W_BUFS && w_buf[i]; ++i)
- free (w_buf[i]);
-}
-
-char *
-tmp_pathbuf::c_get ()
-{
- if (tls_pbuf.c_cnt >= TP_NUM_C_BUFS)
- api_fatal ("Internal error: TP_NUM_C_BUFS too small: %u", TP_NUM_C_BUFS);
- if (!tls_pbuf.c_buf[tls_pbuf.c_cnt]
- && !(tls_pbuf.c_buf[tls_pbuf.c_cnt] = (char *) malloc (NT_MAX_PATH)))
- api_fatal ("Internal error: Out of memory for new path buf.");
- return tls_pbuf.c_buf[tls_pbuf.c_cnt++];
-}
-
-PWCHAR
-tmp_pathbuf::w_get ()
-{
- if (tls_pbuf.w_cnt >= TP_NUM_W_BUFS)
- api_fatal ("Internal error: TP_NUM_W_BUFS too small: %u.", TP_NUM_W_BUFS);
- if (!tls_pbuf.w_buf[tls_pbuf.w_cnt]
- && !(tls_pbuf.w_buf[tls_pbuf.w_cnt]
- = (PWCHAR) malloc (NT_MAX_PATH * sizeof (WCHAR))))
- api_fatal ("Internal error: Out of memory for new wide path buf.");
- return tls_pbuf.w_buf[tls_pbuf.w_cnt++];
-}
diff --git a/winsup/cygwin/tls_pbuf.h b/winsup/cygwin/tls_pbuf.h
deleted file mode 100644
index e8526bab0..000000000
--- a/winsup/cygwin/tls_pbuf.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* tls_pbuf.h
-
- Copyright 2008, 2014 Red Hat, Inc.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#pragma once
-
-class tmp_pathbuf
-{
- uint32_t c_buf_old;
- uint32_t w_buf_old;
-public:
- tmp_pathbuf () __attribute__ ((always_inline))
- : c_buf_old (_my_tls.locals.pathbufs.c_cnt),
- w_buf_old (_my_tls.locals.pathbufs.w_cnt)
- {}
- ~tmp_pathbuf () __attribute__ ((always_inline))
- {
- _my_tls.locals.pathbufs.c_cnt = c_buf_old;
- _my_tls.locals.pathbufs.w_cnt = w_buf_old;
- }
-
- inline bool check_usage (uint32_t c_need, uint32_t w_need)
- {
- return c_need + c_buf_old < TP_NUM_C_BUFS
- && w_need + w_buf_old < TP_NUM_W_BUFS;
- }
- char *c_get (); /* Create temporary TLS path buf of size NT_MAX_PATH. */
- PWCHAR w_get (); /* Create temporary TLS path buf of size 2 * NT_MAX_PATH. */
- inline char *t_get () { return (char *) w_get (); }
- inline PUNICODE_STRING u_get (PUNICODE_STRING up)
- {
- up->Length = 0;
- up->MaximumLength = (NT_MAX_PATH - 1) * sizeof (WCHAR);
- up->Buffer = w_get ();
- return up;
- }
-};
diff --git a/winsup/cygwin/tlsoffsets.h b/winsup/cygwin/tlsoffsets.h
deleted file mode 100644
index 572dfb7b7..000000000
--- a/winsup/cygwin/tlsoffsets.h
+++ /dev/null
@@ -1,117 +0,0 @@
-//;# autogenerated: Do not edit.
-
-//; $tls::start_offset = -12700;
-//; $tls::locals = -12700;
-//; $tls::plocals = 0;
-//; $tls::local_clib = -10980;
-//; $tls::plocal_clib = 1720;
-//; $tls::__dontuse = -10980;
-//; $tls::p__dontuse = 1720;
-//; $tls::func = -9892;
-//; $tls::pfunc = 2808;
-//; $tls::saved_errno = -9888;
-//; $tls::psaved_errno = 2812;
-//; $tls::sa_flags = -9884;
-//; $tls::psa_flags = 2816;
-//; $tls::oldmask = -9880;
-//; $tls::poldmask = 2820;
-//; $tls::deltamask = -9876;
-//; $tls::pdeltamask = 2824;
-//; $tls::errno_addr = -9872;
-//; $tls::perrno_addr = 2828;
-//; $tls::sigmask = -9868;
-//; $tls::psigmask = 2832;
-//; $tls::sigwait_mask = -9864;
-//; $tls::psigwait_mask = 2836;
-//; $tls::sigwait_info = -9860;
-//; $tls::psigwait_info = 2840;
-//; $tls::signal_arrived = -9856;
-//; $tls::psignal_arrived = 2844;
-//; $tls::will_wait_for_signal = -9852;
-//; $tls::pwill_wait_for_signal = 2848;
-//; $tls::thread_context = -9848;
-//; $tls::pthread_context = 2852;
-//; $tls::thread_id = -9636;
-//; $tls::pthread_id = 3064;
-//; $tls::infodata = -9632;
-//; $tls::pinfodata = 3068;
-//; $tls::tid = -9484;
-//; $tls::ptid = 3216;
-//; $tls::_ctinfo = -9480;
-//; $tls::p_ctinfo = 3220;
-//; $tls::andreas = -9476;
-//; $tls::pandreas = 3224;
-//; $tls::wq = -9472;
-//; $tls::pwq = 3228;
-//; $tls::sig = -9444;
-//; $tls::psig = 3256;
-//; $tls::incyg = -9440;
-//; $tls::pincyg = 3260;
-//; $tls::spinning = -9436;
-//; $tls::pspinning = 3264;
-//; $tls::stacklock = -9432;
-//; $tls::pstacklock = 3268;
-//; $tls::stackptr = -9428;
-//; $tls::pstackptr = 3272;
-//; $tls::stack = -9424;
-//; $tls::pstack = 3276;
-//; $tls::initialized = -8400;
-//; $tls::pinitialized = 4300;
-//; __DATA__
-
-#define tls_locals (-12700)
-#define tls_plocals (0)
-#define tls_local_clib (-10980)
-#define tls_plocal_clib (1720)
-#define tls___dontuse (-10980)
-#define tls_p__dontuse (1720)
-#define tls_func (-9892)
-#define tls_pfunc (2808)
-#define tls_saved_errno (-9888)
-#define tls_psaved_errno (2812)
-#define tls_sa_flags (-9884)
-#define tls_psa_flags (2816)
-#define tls_oldmask (-9880)
-#define tls_poldmask (2820)
-#define tls_deltamask (-9876)
-#define tls_pdeltamask (2824)
-#define tls_errno_addr (-9872)
-#define tls_perrno_addr (2828)
-#define tls_sigmask (-9868)
-#define tls_psigmask (2832)
-#define tls_sigwait_mask (-9864)
-#define tls_psigwait_mask (2836)
-#define tls_sigwait_info (-9860)
-#define tls_psigwait_info (2840)
-#define tls_signal_arrived (-9856)
-#define tls_psignal_arrived (2844)
-#define tls_will_wait_for_signal (-9852)
-#define tls_pwill_wait_for_signal (2848)
-#define tls_thread_context (-9848)
-#define tls_pthread_context (2852)
-#define tls_thread_id (-9636)
-#define tls_pthread_id (3064)
-#define tls_infodata (-9632)
-#define tls_pinfodata (3068)
-#define tls_tid (-9484)
-#define tls_ptid (3216)
-#define tls__ctinfo (-9480)
-#define tls_p_ctinfo (3220)
-#define tls_andreas (-9476)
-#define tls_pandreas (3224)
-#define tls_wq (-9472)
-#define tls_pwq (3228)
-#define tls_sig (-9444)
-#define tls_psig (3256)
-#define tls_incyg (-9440)
-#define tls_pincyg (3260)
-#define tls_spinning (-9436)
-#define tls_pspinning (3264)
-#define tls_stacklock (-9432)
-#define tls_pstacklock (3268)
-#define tls_stackptr (-9428)
-#define tls_pstackptr (3272)
-#define tls_stack (-9424)
-#define tls_pstack (3276)
-#define tls_initialized (-8400)
-#define tls_pinitialized (4300)
diff --git a/winsup/cygwin/tlsoffsets64.h b/winsup/cygwin/tlsoffsets64.h
deleted file mode 100644
index 991280663..000000000
--- a/winsup/cygwin/tlsoffsets64.h
+++ /dev/null
@@ -1,117 +0,0 @@
-//;# autogenerated: Do not edit.
-
-//; $tls::start_offset = -12800;
-//; $tls::locals = -12800;
-//; $tls::plocals = 0;
-//; $tls::local_clib = -10624;
-//; $tls::plocal_clib = 2176;
-//; $tls::__dontuse = -10624;
-//; $tls::p__dontuse = 2176;
-//; $tls::func = -8736;
-//; $tls::pfunc = 4064;
-//; $tls::saved_errno = -8728;
-//; $tls::psaved_errno = 4072;
-//; $tls::sa_flags = -8724;
-//; $tls::psa_flags = 4076;
-//; $tls::oldmask = -8720;
-//; $tls::poldmask = 4080;
-//; $tls::deltamask = -8712;
-//; $tls::pdeltamask = 4088;
-//; $tls::errno_addr = -8704;
-//; $tls::perrno_addr = 4096;
-//; $tls::sigmask = -8696;
-//; $tls::psigmask = 4104;
-//; $tls::sigwait_mask = -8688;
-//; $tls::psigwait_mask = 4112;
-//; $tls::sigwait_info = -8680;
-//; $tls::psigwait_info = 4120;
-//; $tls::signal_arrived = -8672;
-//; $tls::psignal_arrived = 4128;
-//; $tls::will_wait_for_signal = -8664;
-//; $tls::pwill_wait_for_signal = 4136;
-//; $tls::thread_context = -8656;
-//; $tls::pthread_context = 4144;
-//; $tls::thread_id = -7824;
-//; $tls::pthread_id = 4976;
-//; $tls::infodata = -7820;
-//; $tls::pinfodata = 4980;
-//; $tls::tid = -7672;
-//; $tls::ptid = 5128;
-//; $tls::_ctinfo = -7664;
-//; $tls::p_ctinfo = 5136;
-//; $tls::andreas = -7656;
-//; $tls::pandreas = 5144;
-//; $tls::wq = -7648;
-//; $tls::pwq = 5152;
-//; $tls::sig = -7600;
-//; $tls::psig = 5200;
-//; $tls::incyg = -7596;
-//; $tls::pincyg = 5204;
-//; $tls::spinning = -7592;
-//; $tls::pspinning = 5208;
-//; $tls::stacklock = -7588;
-//; $tls::pstacklock = 5212;
-//; $tls::stackptr = -7584;
-//; $tls::pstackptr = 5216;
-//; $tls::stack = -7576;
-//; $tls::pstack = 5224;
-//; $tls::initialized = -5528;
-//; $tls::pinitialized = 7272;
-//; __DATA__
-
-#define tls_locals (-12800)
-#define tls_plocals (0)
-#define tls_local_clib (-10624)
-#define tls_plocal_clib (2176)
-#define tls___dontuse (-10624)
-#define tls_p__dontuse (2176)
-#define tls_func (-8736)
-#define tls_pfunc (4064)
-#define tls_saved_errno (-8728)
-#define tls_psaved_errno (4072)
-#define tls_sa_flags (-8724)
-#define tls_psa_flags (4076)
-#define tls_oldmask (-8720)
-#define tls_poldmask (4080)
-#define tls_deltamask (-8712)
-#define tls_pdeltamask (4088)
-#define tls_errno_addr (-8704)
-#define tls_perrno_addr (4096)
-#define tls_sigmask (-8696)
-#define tls_psigmask (4104)
-#define tls_sigwait_mask (-8688)
-#define tls_psigwait_mask (4112)
-#define tls_sigwait_info (-8680)
-#define tls_psigwait_info (4120)
-#define tls_signal_arrived (-8672)
-#define tls_psignal_arrived (4128)
-#define tls_will_wait_for_signal (-8664)
-#define tls_pwill_wait_for_signal (4136)
-#define tls_thread_context (-8656)
-#define tls_pthread_context (4144)
-#define tls_thread_id (-7824)
-#define tls_pthread_id (4976)
-#define tls_infodata (-7820)
-#define tls_pinfodata (4980)
-#define tls_tid (-7672)
-#define tls_ptid (5128)
-#define tls__ctinfo (-7664)
-#define tls_p_ctinfo (5136)
-#define tls_andreas (-7656)
-#define tls_pandreas (5144)
-#define tls_wq (-7648)
-#define tls_pwq (5152)
-#define tls_sig (-7600)
-#define tls_psig (5200)
-#define tls_incyg (-7596)
-#define tls_pincyg (5204)
-#define tls_spinning (-7592)
-#define tls_pspinning (5208)
-#define tls_stacklock (-7588)
-#define tls_pstacklock (5212)
-#define tls_stackptr (-7584)
-#define tls_pstackptr (5216)
-#define tls_stack (-7576)
-#define tls_pstack (5224)
-#define tls_initialized (-5528)
-#define tls_pinitialized (7272)
diff --git a/winsup/cygwin/tmpbuf.h b/winsup/cygwin/tmpbuf.h
deleted file mode 100644
index 937d50f6a..000000000
--- a/winsup/cygwin/tmpbuf.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/* tmpbuf.h
-
- Copyright 2010 Red Hat, Inc.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _TMPBUF_H
-#define _TMPBUF_H
-class tmpbuf
-{
- void *buf;
-public:
- tmpbuf (size_t size = NT_MAX_PATH)
- {
- buf = calloc (1, size);
- if (!buf)
- api_fatal ("allocation of temporary buffer failed");
- }
- operator void * () {return buf;}
- operator char * () {return (char *) buf;}
- operator PSECURITY_DESCRIPTOR () {return (PSECURITY_DESCRIPTOR) buf;}
- PSECURITY_DESCRIPTOR operator -> () {return (PSECURITY_DESCRIPTOR) buf;}
- ~tmpbuf () {free (buf);}
-};
-#endif /*_TMPBUF_H*/
diff --git a/winsup/cygwin/tty.cc b/winsup/cygwin/tty.cc
deleted file mode 100644
index 01c53f933..000000000
--- a/winsup/cygwin/tty.cc
+++ /dev/null
@@ -1,283 +0,0 @@
-/* tty.cc
-
- Copyright 1997, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2008, 2009,
- 2010, 2011, 2012 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include "miscfuncs.h"
-#include <unistd.h>
-#include <utmp.h>
-#include <sys/cygwin.h>
-#include "cygerrno.h"
-#include "security.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "pinfo.h"
-#include "shared_info.h"
-
-HANDLE NO_COPY tty_list::mutex = NULL;
-
-extern "C" int
-getpt (void)
-{
- return open ("/dev/ptmx", O_RDWR | O_NOCTTY);
-}
-
-extern "C" int
-posix_openpt (int oflags)
-{
- return open ("/dev/ptmx", oflags);
-}
-
-extern "C" int
-grantpt (int fd)
-{
- cygheap_fdget cfd (fd);
- return cfd < 0 ? -1 : 0;
-}
-
-extern "C" int
-unlockpt (int fd)
-{
- cygheap_fdget cfd (fd);
- return cfd < 0 ? -1 : 0;
-}
-
-extern "C" int
-revoke (char *ttyname)
-{
- set_errno (ENOSYS);
- return -1;
-}
-
-extern "C" int
-ttyslot (void)
-{
- if (myself->ctty <= 0 || iscons_dev (myself->ctty))
- return -1;
- return device::minor (myself->ctty);
-}
-
-void __stdcall
-tty_list::init_session ()
-{
- char mutex_name[MAX_PATH];
- char *name = shared_name (mutex_name, "tty_list::mutex", 0);
-
- /* tty_list::mutex is used while searching for a tty slot */
- if (!(mutex = CreateMutex (&sec_all_nih, FALSE, name)))
- api_fatal ("can't create tty_list::mutex '%s', %E", name);
- ProtectHandle (mutex);
-}
-
-void __stdcall
-tty::init_session ()
-{
- if (!myself->cygstarted && NOTSTATE (myself, PID_CYGPARENT))
- cygheap->fdtab.get_debugger_info ();
-}
-
-int __reg2
-tty_list::attach (int n)
-{
- int res;
- if (iscons_dev (n))
- res = -1;
- else if (n != -1)
- res = connect (device::minor (n));
- else
- res = -1;
- return res;
-}
-
-int
-tty_list::connect (int ttynum)
-{
- if (ttynum < 0 || ttynum >= NTTYS)
- {
- termios_printf ("ttynum (%d) out of range", ttynum);
- return -1;
- }
- if (!ttys[ttynum].exists ())
- {
- termios_printf ("pty %d was not allocated", ttynum);
- set_errno (ENXIO);
- return -1;
- }
-
- return ttynum;
-}
-
-void
-tty_list::init ()
-{
- for (int i = 0; i < NTTYS; i++)
- {
- ttys[i].init ();
- ttys[i].setntty (DEV_PTYS_MAJOR, i);
- }
-}
-
-/* Search for a free tty and allocate it.
- Return tty number or -1 if error.
- */
-int
-tty_list::allocate (HANDLE& r, HANDLE& w)
-{
- lock_ttys here;
- int freetty = -1;
-
- tty *t = NULL;
- for (int i = 0; i < NTTYS; i++)
- if (ttys[i].not_allocated (r, w))
- {
- t = ttys + i;
- t->init ();
- t->setsid (0);
- freetty = i;
- break;
- }
-
- if (freetty >= 0)
- termios_printf ("pty%d allocated", freetty);
- else
- {
- system_printf ("No pty allocated");
- r = w = NULL;
- }
-
- return freetty;
-}
-
-bool
-tty::not_allocated (HANDLE& r, HANDLE& w)
-{
- /* Attempt to open the from-master side of the tty. If it is accessible
- then it exists although we may not have privileges to actually use it. */
- char pipename[sizeof("ptyNNNN-from-master")];
- __small_sprintf (pipename, "pty%d-from-master", get_minor ());
- /* fhandler_pipe::create returns 0 when creation succeeds */
- return fhandler_pipe::create (&sec_none, &r, &w,
- fhandler_pty_common::pipesize, pipename,
- 0) == 0;
-}
-
-bool
-tty::exists ()
-{
- HANDLE r, w;
- bool res;
- if (!not_allocated (r, w))
- res = true;
-
- else
- {
- /* Handles are left open when not_allocated finds a non-open "tty" */
- CloseHandle (r);
- CloseHandle (w);
- res = false;
- }
- debug_printf ("exists %d", res);
- return res;
-}
-
-bool
-tty::slave_alive ()
-{
- HANDLE ev;
- if ((ev = open_inuse (READ_CONTROL)))
- CloseHandle (ev);
- return ev != NULL;
-}
-
-HANDLE
-tty::open_mutex (const char *mutex, ACCESS_MASK access)
-{
- char buf[MAX_PATH];
- shared_name (buf, mutex, get_minor ());
- return OpenMutex (access, TRUE, buf);
-}
-
-HANDLE
-tty::open_inuse (ACCESS_MASK access)
-{
- char buf[MAX_PATH];
- shared_name (buf, TTY_SLAVE_ALIVE, get_minor ());
- return OpenEvent (access, FALSE, buf);
-}
-
-HANDLE
-tty::create_inuse (PSECURITY_ATTRIBUTES sa)
-{
- HANDLE h;
- char buf[MAX_PATH];
-
- shared_name (buf, TTY_SLAVE_ALIVE, get_minor ());
- h = CreateEvent (sa, TRUE, FALSE, buf);
- termios_printf ("%s %p", buf, h);
- if (!h)
- termios_printf ("couldn't open inuse event %s, %E", buf);
- return h;
-}
-
-void
-tty::init ()
-{
- output_stopped = 0;
- setsid (0);
- pgid = 0;
- was_opened = false;
- master_pid = 0;
- is_console = false;
-}
-
-HANDLE
-tty::get_event (const char *fmt, PSECURITY_ATTRIBUTES sa, BOOL manual_reset)
-{
- HANDLE hev;
- char buf[MAX_PATH];
-
- shared_name (buf, fmt, get_minor ());
- if (!sa)
- sa = &sec_all;
- if (!(hev = CreateEvent (sa, manual_reset, FALSE, buf)))
- {
- termios_printf ("couldn't create %s", buf);
- set_errno (ENOENT); /* FIXME this can't be the right errno */
- return NULL;
- }
-
- termios_printf ("created event %s", buf);
- return hev;
-}
-
-lock_ttys::lock_ttys (DWORD howlong): release_me (true)
-{
- if (WaitForSingleObject (tty_list::mutex, howlong) == WAIT_FAILED)
- {
- termios_printf ("WFSO for mutex %p failed, %E", tty_list::mutex);
- release_me = false;
- }
-}
-
-void
-lock_ttys::release ()
-{
- ReleaseMutex (tty_list::mutex);
-}
-
-const char *
-tty_min::ttyname ()
-{
- device d;
- d.parse (ntty);
- return d.name;
-}
diff --git a/winsup/cygwin/tty.h b/winsup/cygwin/tty.h
deleted file mode 100644
index f7a80e10f..000000000
--- a/winsup/cygwin/tty.h
+++ /dev/null
@@ -1,170 +0,0 @@
-/* tty.h: shared tty info for cygwin
-
- Copyright 2000, 2001, 2002, 2003, 2004, 2006, 2009, 2010, 2011, 2012, 2013
- Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _TTY_H
-#define _TTY_H
-/* tty tables */
-
-#define INP_BUFFER_SIZE 256
-#define OUT_BUFFER_SIZE 256
-#define NTTYS 64
-#define real_tty_attached(p) ((p)->ctty > 0 && !iscons_dev ((p)->ctty))
-
-/* Input/Output/ioctl events */
-
-#define INPUT_AVAILABLE_EVENT "cygtty.input.avail"
-#define OUTPUT_MUTEX "cygtty.output.mutex"
-#define INPUT_MUTEX "cygtty.input.mutex"
-#define TTY_SLAVE_ALIVE "cygtty.slave_alive"
-
-#include <sys/termios.h>
-
-#ifndef MIN_CTRL_C_SLOP
-#define MIN_CTRL_C_SLOP 50
-#endif
-
-#include <devices.h>
-class tty_min
-{
- pid_t sid; /* Session ID of tty */
- struct status_flags
- {
- unsigned initialized : 1; /* Set if tty is initialized */
- unsigned rstcons : 1; /* Set if console needs to be set to "non-cooked" */
- } status;
-
-public:
- pid_t pgid;
- bool output_stopped; /* FIXME: Maybe do this with a mutex someday? */
- fh_devices ntty;
- DWORD last_ctrl_c; /* tick count of last ctrl-c */
- bool is_console;
-
- IMPLEMENT_STATUS_FLAG (bool, initialized)
- IMPLEMENT_STATUS_FLAG (bool, rstcons)
-
- struct termios ti;
- struct winsize winsize;
-
- /* ioctl requests buffer */
- int cmd;
- union
- {
- struct termios termios;
- struct winsize winsize;
- int value;
- pid_t pid;
- } arg;
- /* XXX_retval variables holds master's completion codes. Error are stored as
- * -ERRNO
- */
- int ioctl_retval;
- int write_error;
-
- void setntty (_major_t t, _minor_t n) {ntty = (fh_devices) FHDEV (t, n);}
- dev_t getntty () const {return ntty;}
- _minor_t get_minor () const {return device::minor (ntty);}
- pid_t getpgid () const {return pgid;}
- void setpgid (int pid) {pgid = pid;}
- int getsid () const {return sid;}
- void setsid (pid_t tsid) {sid = tsid;}
- void kill_pgrp (int);
- int is_orphaned_process_group (int);
- const __reg1 char *ttyname () __attribute (());
-};
-
-class fhandler_pty_master;
-
-class tty: public tty_min
-{
- HANDLE __reg3 get_event (const char *fmt, PSECURITY_ATTRIBUTES sa,
- BOOL manual_reset = FALSE);
-public:
- pid_t master_pid; /* PID of tty master process */
-
-private:
- /* Since tty is shared, the HANDLEs must be 32 and 64 bit clean. The below
- code makes sure of that by setting the upper 4 byte of the union to 0
- when writing the handle value from a 32 bit process. Fortunately the
- actual values are 32 bit on both platforms, so the HANDLES can be
- used on both platforms. */
- union {
- HANDLE _from_master;
- LARGE_INTEGER _fm_dummy;
- };
- union {
- HANDLE _to_master;
- LARGE_INTEGER _tm_dummy;
- };
-public:
- HANDLE from_master() const { return _from_master; }
- HANDLE to_master() const { return _to_master; }
-#ifdef __x86_64__
- void set_from_master (HANDLE h) { _from_master = h; }
- void set_to_master (HANDLE h) { _to_master = h; }
-#else
- void set_from_master (HANDLE h) { _fm_dummy.HighPart = 0; _from_master = h; }
- void set_to_master (HANDLE h) { _tm_dummy.HighPart = 0; _to_master = h; }
-#endif
-
- int read_retval;
- bool was_opened; /* True if opened at least once. */
-
- void init ();
- HANDLE open_inuse (ACCESS_MASK access);
- HANDLE create_inuse (PSECURITY_ATTRIBUTES);
- bool slave_alive ();
- HANDLE open_mutex (const char *mutex, ACCESS_MASK access);
- inline HANDLE open_output_mutex (ACCESS_MASK access)
- { return open_mutex (OUTPUT_MUTEX, access); }
- inline HANDLE open_input_mutex (ACCESS_MASK access)
- { return open_mutex (INPUT_MUTEX, access); }
- bool exists ();
- bool not_allocated (HANDLE&, HANDLE&);
- void set_master_closed () {master_pid = -1;}
- bool is_master_closed () const {return master_pid == -1;}
- static void __stdcall create_master (int);
- static void __stdcall init_session ();
- friend class fhandler_pty_master;
-};
-
-class tty_list
-{
- tty ttys[NTTYS];
- static HANDLE mutex;
-
-public:
- tty * operator [](int n) {return ttys + device::minor (n);}
- int allocate (HANDLE& r, HANDLE& w); /* allocate a pty */
- int connect (int);
- void init ();
- tty_min *get_cttyp ();
- int __reg2 attach (int n);
- static void __stdcall init_session ();
- friend class lock_ttys;
-};
-
-class lock_ttys
-{
- bool release_me;
-public:
- lock_ttys (DWORD = INFINITE);
- static void release ();
- void dont_release () {release_me = false;}
- ~lock_ttys ()
- {
- if (release_me)
- release ();
- }
-};
-
-extern "C" int ttyslot (void);
-#endif /*_TTY_H*/
diff --git a/winsup/cygwin/tz_posixrules.h b/winsup/cygwin/tz_posixrules.h
deleted file mode 100644
index dea668e2f..000000000
--- a/winsup/cygwin/tz_posixrules.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/* generated with bin2h from zoneinfo/posixrules */
-
-static NO_COPY unsigned char _posixrules_data[] = {
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,
-0,1,16,0,0,0,2,0,0,0,8,0,151,254,240,1,135,225,224,2,119,224,240,3,112,254,96,4,96,253,112,5,80,
-224,96,6,64,223,112,7,48,194,96,7,141,25,112,9,16,164,96,9,173,148,240,10,240,134,96,11,224,133,112,12,217,162,
-224,13,192,103,112,14,185,132,224,15,169,131,240,16,153,102,224,17,137,101,240,18,121,72,224,19,105,71,240,20,89,42,224,
-21,73,41,240,22,57,12,224,23,41,11,240,24,34,41,96,25,8,237,240,26,2,11,96,26,242,10,112,27,225,237,96,28,
-209,236,112,29,193,207,96,30,177,206,112,31,161,177,96,32,118,0,240,33,129,147,96,34,85,226,240,35,106,175,224,36,53,
-196,240,37,74,145,224,38,21,166,240,39,42,115,224,39,254,195,112,41,10,85,224,41,222,165,112,42,234,55,224,43,190,135,
-112,44,211,84,96,45,158,105,112,46,179,54,96,47,126,75,112,48,147,24,96,49,103,103,240,50,114,250,96,51,71,73,240,
-52,82,220,96,53,39,43,240,54,50,190,96,55,7,13,240,56,27,218,224,56,230,239,240,57,251,188,224,58,198,209,240,59,
-219,158,224,60,175,238,112,61,187,128,224,62,143,208,112,63,155,98,224,64,111,178,112,65,132,127,96,66,79,148,112,67,100,
-97,96,68,47,118,112,69,68,67,96,70,15,88,112,71,36,37,96,71,248,116,240,73,4,7,96,73,216,86,240,74,227,233,
-96,75,184,56,240,76,205,5,224,77,152,26,240,78,172,231,224,79,119,252,240,80,140,201,224,81,97,25,112,82,108,171,224,
-83,64,251,112,84,76,141,224,85,32,221,112,86,44,111,224,87,0,191,112,88,21,140,96,88,224,161,112,89,245,110,96,90,
-192,131,112,91,213,80,96,92,169,159,240,93,181,50,96,94,137,129,240,95,149,20,96,96,105,99,240,97,126,48,224,98,73,
-69,240,99,94,18,224,100,41,39,240,101,61,244,224,102,18,68,112,103,29,214,224,103,242,38,112,104,253,184,224,105,210,8,
-112,106,221,154,224,107,177,234,112,108,198,183,96,109,145,204,112,110,166,153,96,111,113,174,112,112,134,123,96,113,90,202,240,
-114,102,93,96,115,58,172,240,116,70,63,96,117,26,142,240,118,47,91,224,118,250,112,240,120,15,61,224,120,218,82,240,121,
-239,31,224,122,186,52,240,123,207,1,224,124,163,81,112,125,174,227,224,126,131,51,112,127,142,197,224,128,99,21,112,129,119,
-226,96,130,66,247,112,131,87,196,96,132,34,217,112,133,55,166,96,134,11,245,240,135,23,136,96,135,235,215,240,136,247,106,
-96,137,203,185,240,138,215,76,96,139,171,155,240,140,192,104,224,141,139,125,240,142,160,74,224,143,107,95,240,144,128,44,224,
-145,84,124,112,146,96,14,224,147,52,94,112,148,63,240,224,149,20,64,112,150,41,13,96,150,244,34,112,152,8,239,96,152,
-212,4,112,153,232,209,96,154,189,32,240,155,200,179,96,156,157,2,240,157,168,149,96,158,124,228,240,159,136,119,96,160,92,
-198,240,161,113,147,224,162,60,168,240,163,81,117,224,164,28,138,240,165,49,87,224,166,5,167,112,167,17,57,224,167,229,137,
-112,168,241,27,224,169,197,107,112,170,218,56,96,171,165,77,112,172,186,26,96,173,133,47,112,174,153,252,96,175,101,17,112,
-176,121,222,96,177,78,45,240,178,89,192,96,179,46,15,240,180,57,162,96,181,13,241,240,182,34,190,224,182,237,211,240,184,
-2,160,224,184,205,181,240,185,226,130,224,186,182,210,112,187,194,100,224,188,150,180,112,189,162,70,224,190,118,150,112,191,130,
-40,224,192,86,120,112,193,107,69,96,194,54,90,112,195,75,39,96,196,22,60,112,197,43,9,96,197,255,88,240,199,10,235,
-96,199,223,58,240,200,234,205,96,201,191,28,240,202,211,233,224,203,158,254,240,204,179,203,224,205,126,224,240,206,147,173,224,
-207,103,253,112,208,115,143,224,209,71,223,112,210,83,113,224,211,39,193,112,212,51,83,224,213,7,163,112,214,28,112,96,214,
-231,133,112,215,252,82,96,216,199,103,112,217,220,52,96,218,176,131,240,219,188,22,96,220,144,101,240,221,155,248,96,222,112,
-71,240,223,133,20,224,224,80,41,240,225,100,246,224,226,48,11,240,227,68,216,224,228,15,237,240,229,36,186,224,229,249,10,
-112,231,4,156,224,231,216,236,112,232,228,126,224,233,184,206,112,234,205,155,96,235,152,176,112,236,173,125,96,237,120,146,112,
-238,141,95,96,239,97,174,240,240,109,65,96,241,65,144,240,242,77,35,96,243,33,114,240,244,45,5,96,245,1,84,240,246,
-22,33,224,246,225,54,240,247,246,3,224,248,193,24,240,249,213,229,224,250,160,250,240,251,181,199,224,252,138,23,112,253,149,
-169,224,254,105,249,112,255,117,139,224,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,
-1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,
-1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,
-1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,
-1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,255,255,199,192,1,0,255,255,185,176,0,4,69,68,84,
-0,69,83,84,0,0,0
-};
diff --git a/winsup/cygwin/uinfo.cc b/winsup/cygwin/uinfo.cc
deleted file mode 100644
index 3a8c3954a..000000000
--- a/winsup/cygwin/uinfo.cc
+++ /dev/null
@@ -1,2442 +0,0 @@
-/* uinfo.cc: user info (uid, gid, etc...)
-
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include <iptypes.h>
-#include <lm.h>
-#include <ntsecapi.h>
-#include <wininet.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <wchar.h>
-#include <sys/cygwin.h>
-#include "cygerrno.h"
-#include "pinfo.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "shared_info.h"
-#include "registry.h"
-#include "child_info.h"
-#include "environ.h"
-#include "tls_pbuf.h"
-#include "miscfuncs.h"
-#include "ntdll.h"
-#include "ldap.h"
-#include "cygserver_pwdgrp.h"
-
-/* Initialize the part of cygheap_user that does not depend on files.
- The information is used in shared.cc for the user shared.
- Final initialization occurs in uinfo_init */
-void
-cygheap_user::init ()
-{
- WCHAR user_name[UNLEN + 1];
- DWORD user_name_len = UNLEN + 1;
-
- /* This code is only run if a Cygwin process gets started by a native
- Win32 process. We try to get the username from the environment,
- first USERNAME (Win32), then USER (POSIX). If that fails (which is
- very unlikely), it only has an impact if we don't have an entry in
- /etc/passwd for this user either. In that case the username sticks
- to "unknown". Since this is called early in initialization, and
- since we don't want pull in a dependency to any other DLL except
- ntdll and kernel32 at this early stage, don't call GetUserName,
- GetUserNameEx, NetWkstaUserGetInfo, etc. */
- if (GetEnvironmentVariableW (L"USERNAME", user_name, user_name_len)
- || GetEnvironmentVariableW (L"USER", user_name, user_name_len))
- {
- char mb_user_name[user_name_len = sys_wcstombs (NULL, 0, user_name)];
- sys_wcstombs (mb_user_name, user_name_len, user_name);
- set_name (mb_user_name);
- }
- else
- set_name ("unknown");
-
- NTSTATUS status;
- ULONG size;
- PSECURITY_DESCRIPTOR psd;
-
- status = NtQueryInformationToken (hProcToken, TokenPrimaryGroup,
- &groups.pgsid, sizeof (cygsid), &size);
- if (!NT_SUCCESS (status))
- system_printf ("NtQueryInformationToken (TokenPrimaryGroup), %y", status);
-
- /* Get the SID from current process and store it in effec_cygsid */
- status = NtQueryInformationToken (hProcToken, TokenUser, &effec_cygsid,
- sizeof (cygsid), &size);
- if (!NT_SUCCESS (status))
- {
- system_printf ("NtQueryInformationToken (TokenUser), %y", status);
- return;
- }
-
- /* Set token owner to the same value as token user */
- status = NtSetInformationToken (hProcToken, TokenOwner, &effec_cygsid,
- sizeof (cygsid));
- if (!NT_SUCCESS (status))
- debug_printf ("NtSetInformationToken (TokenOwner), %y", status);
-
- /* Standard way to build a security descriptor with the usual DACL */
- PSECURITY_ATTRIBUTES sa_buf = (PSECURITY_ATTRIBUTES) alloca (1024);
- psd = (PSECURITY_DESCRIPTOR)
- (sec_user_nih (sa_buf, sid()))->lpSecurityDescriptor;
-
- BOOLEAN acl_exists, dummy;
- TOKEN_DEFAULT_DACL dacl;
-
- status = RtlGetDaclSecurityDescriptor (psd, &acl_exists, &dacl.DefaultDacl,
- &dummy);
- if (NT_SUCCESS (status) && acl_exists && dacl.DefaultDacl)
- {
-
- /* Set the default DACL and the process DACL */
- status = NtSetInformationToken (hProcToken, TokenDefaultDacl, &dacl,
- sizeof (dacl));
- if (!NT_SUCCESS (status))
- system_printf ("NtSetInformationToken (TokenDefaultDacl), %y", status);
- if ((status = NtSetSecurityObject (NtCurrentProcess (),
- DACL_SECURITY_INFORMATION, psd)))
- system_printf ("NtSetSecurityObject, %y", status);
- }
- else
- system_printf("Cannot get dacl, %E");
-}
-
-void
-internal_getlogin (cygheap_user &user)
-{
- struct passwd *pwd;
- struct group *pgrp, *grp, *grp2;
- cyg_ldap cldap;
-
- /* Fetch (and potentially generate) passwd and group entries for the user
- and the primary group in the token. */
- pwd = internal_getpwsid (user.sid (), &cldap);
- pgrp = internal_getgrsid (user.groups.pgsid, &cldap);
- if (!cygheap->pg.nss_cygserver_caching ())
- internal_getgroups (0, NULL, &cldap);
- if (!pwd)
- debug_printf ("user not found in passwd DB");
- else
- {
- cygsid gsid;
-
- user.set_name (pwd->pw_name);
- myself->uid = pwd->pw_uid;
- myself->gid = pwd->pw_gid;
- /* If the primary group in the passwd DB is different from the primary
- group in the user token, we have to find the SID of that group and
- try to override the token primary group. */
- if (!pgrp || myself->gid != pgrp->gr_gid)
- {
- if (gsid.getfromgr (grp = internal_getgrgid (pwd->pw_gid, &cldap)))
- {
- /* We might have a group file with a group entry for the current
- user's primary group, but the current user has no entry in
- passwd. If so, pw_gid is taken from windows and might
- disagree with gr_gid from the group file. Overwrite it. */
- if ((grp2 = internal_getgrsid (gsid, &cldap)) && grp2 != grp)
- myself->gid = pwd->pw_gid = grp2->gr_gid;
- /* Set primary group to the group in /etc/passwd. */
- if (gsid != user.groups.pgsid)
- {
- NTSTATUS status = NtSetInformationToken (hProcToken,
- TokenPrimaryGroup,
- &gsid, sizeof gsid);
- if (!NT_SUCCESS (status))
- {
- debug_printf ("NtSetInformationToken (TokenPrimaryGroup),"
- " %y", status);
- /* Revert the primary group setting and override the
- setting in the passwd entry. */
- if (pgrp)
- myself->gid = pwd->pw_gid = pgrp->gr_gid;
- }
- else
- user.groups.pgsid = gsid;
- clear_procimptoken ();
- }
- }
- else
- debug_printf ("group not found in group DB");
- }
- }
- cygheap->user.ontherange (CH_HOME, pwd);
-}
-
-void
-uinfo_init ()
-{
- if (child_proc_info && !cygheap->user.has_impersonation_tokens ())
- return;
-
- if (!child_proc_info)
- internal_getlogin (cygheap->user); /* Set the cygheap->user. */
- /* Conditions must match those in spawn to allow starting child
- processes with ruid != euid and rgid != egid. */
- else if (cygheap->user.issetuid ()
- && cygheap->user.saved_uid == cygheap->user.real_uid
- && cygheap->user.saved_gid == cygheap->user.real_gid
- && !cygheap->user.groups.issetgroups ()
- && !cygheap->user.setuid_to_restricted)
- {
- cygheap->user.reimpersonate ();
- return;
- }
- else
- cygheap->user.close_impersonation_tokens ();
-
- cygheap->user.saved_uid = cygheap->user.real_uid = myself->uid;
- cygheap->user.saved_gid = cygheap->user.real_gid = myself->gid;
- cygheap->user.external_token = NO_IMPERSONATION;
- cygheap->user.internal_token = NO_IMPERSONATION;
- cygheap->user.curr_primary_token = NO_IMPERSONATION;
- cygheap->user.curr_imp_token = NO_IMPERSONATION;
- cygheap->user.ext_token_is_restricted = false;
- cygheap->user.curr_token_is_restricted = false;
- cygheap->user.setuid_to_restricted = false;
- cygheap->user.set_saved_sid (); /* Update the original sid */
- cygheap->user.deimpersonate ();
-}
-
-extern "C" int
-getlogin_r (char *name, size_t namesize)
-{
- const char *login = cygheap->user.name ();
- size_t len = strlen (login) + 1;
- if (len > namesize)
- return ERANGE;
- __try
- {
- strncpy (name, login, len);
- }
- __except (NO_ERROR)
- {
- return EFAULT;
- }
- __endtry
- return 0;
-}
-
-extern "C" char *
-getlogin (void)
-{
- static char username[UNLEN];
- int ret = getlogin_r (username, UNLEN);
- if (ret)
- {
- set_errno (ret);
- return NULL;
- }
- return username;
-}
-
-extern "C" uid_t
-getuid32 (void)
-{
- return cygheap->user.real_uid;
-}
-
-#ifdef __x86_64__
-EXPORT_ALIAS (getuid32, getuid)
-#else
-extern "C" __uid16_t
-getuid (void)
-{
- return cygheap->user.real_uid;
-}
-#endif
-
-extern "C" gid_t
-getgid32 (void)
-{
- return cygheap->user.real_gid;
-}
-
-#ifdef __x86_64__
-EXPORT_ALIAS (getgid32, getgid)
-#else
-extern "C" __gid16_t
-getgid (void)
-{
- return cygheap->user.real_gid;
-}
-#endif
-
-extern "C" uid_t
-geteuid32 (void)
-{
- return myself->uid;
-}
-
-#ifdef __x86_64__
-EXPORT_ALIAS (geteuid32, geteuid)
-#else
-extern "C" uid_t
-geteuid (void)
-{
- return myself->uid;
-}
-#endif
-
-extern "C" gid_t
-getegid32 (void)
-{
- return myself->gid;
-}
-
-#ifdef __x86_64__
-EXPORT_ALIAS (getegid32, getegid)
-#else
-extern "C" __gid16_t
-getegid (void)
-{
- return myself->gid;
-}
-#endif
-
-/* Not quite right - cuserid can change, getlogin can't */
-extern "C" char *
-cuserid (char *src)
-{
- if (!src)
- return getlogin ();
-
- strcpy (src, getlogin ());
- return src;
-}
-
-const char *
-cygheap_user::ontherange (homebodies what, struct passwd *pw)
-{
- char homedrive_env_buf[3];
- char *newhomedrive = NULL;
- char *newhomepath = NULL;
- tmp_pathbuf tp;
-
- debug_printf ("what %d, pw %p", what, pw);
- if (what == CH_HOME)
- {
- char *p;
-
- if ((p = getenv ("HOME")))
- debug_printf ("HOME is already in the environment %s", p);
- else
- {
- if (pw && pw->pw_dir && *pw->pw_dir)
- {
- debug_printf ("Set HOME (from account db) to %s", pw->pw_dir);
- setenv ("HOME", pw->pw_dir, 1);
- }
- else
- {
- char home[strlen (name ()) + 8];
-
- debug_printf ("Set HOME to default /home/USER");
- __small_sprintf (home, "/home/%s", name ());
- setenv ("HOME", home, 1);
- }
- }
- }
-
- if (what != CH_HOME && homepath == NULL)
- {
- WCHAR wuser[UNLEN + 1];
- WCHAR wlogsrv[INTERNET_MAX_HOST_NAME_LENGTH + 3];
- PUSER_INFO_3 ui = NULL;
- char *homepath_env_buf = tp.c_get ();
- WCHAR profile[MAX_PATH];
- WCHAR win_id[UNLEN + 1]; /* Large enough for SID */
-
- homepath_env_buf[0] = homepath_env_buf[1] = '\0';
- /* Use Cygwin home as HOMEDRIVE/HOMEPATH in the first place. This
- should cover it completely, in theory. Still, it might be the
- wrong choice in the long run, which might demand to set HOMEDRIVE/
- HOMEPATH to the correct values per Windows. Keep the entire rest
- of the code mainly for this reason, so switching is easy. */
- pw = internal_getpwsid (sid ());
- if (pw && pw->pw_dir && *pw->pw_dir)
- cygwin_conv_path (CCP_POSIX_TO_WIN_A, pw->pw_dir, homepath_env_buf,
- NT_MAX_PATH);
- /* First fallback: Windows path per Windows user DB. */
- else if (logsrv ())
- {
- sys_mbstowcs (wlogsrv, sizeof (wlogsrv) / sizeof (*wlogsrv),
- logsrv ());
- sys_mbstowcs (wuser, sizeof wuser / sizeof *wuser, winname ());
- if (NetUserGetInfo (wlogsrv, wuser, 3, (LPBYTE *) &ui)
- == NERR_Success)
- {
- if (ui->usri3_home_dir_drive && *ui->usri3_home_dir_drive)
- {
- sys_wcstombs (homepath_env_buf, NT_MAX_PATH,
- ui->usri3_home_dir_drive);
- strcat (homepath_env_buf, "\\");
- }
- else if (ui->usri3_home_dir && *ui->usri3_home_dir)
- sys_wcstombs (homepath_env_buf, NT_MAX_PATH,
- ui->usri3_home_dir);
- }
- if (ui)
- NetApiBufferFree (ui);
- }
- /* Second fallback: Windows profile dir. */
- if (!homepath_env_buf[0]
- && get_user_profile_directory (get_windows_id (win_id),
- profile, MAX_PATH))
- sys_wcstombs (homepath_env_buf, NT_MAX_PATH, profile);
- /* Last fallback: Cygwin root dir. */
- if (!homepath_env_buf[0])
- cygwin_conv_path (CCP_POSIX_TO_WIN_A | CCP_ABSOLUTE,
- "/", homepath_env_buf, NT_MAX_PATH);
-
- if (homepath_env_buf[1] != ':')
- {
- newhomedrive = almost_null;
- newhomepath = homepath_env_buf;
- }
- else
- {
- homedrive_env_buf[0] = homepath_env_buf[0];
- homedrive_env_buf[1] = homepath_env_buf[1];
- homedrive_env_buf[2] = '\0';
- newhomedrive = homedrive_env_buf;
- newhomepath = homepath_env_buf + 2;
- }
- }
-
- if (newhomedrive && newhomedrive != homedrive)
- cfree_and_set (homedrive, (newhomedrive == almost_null)
- ? almost_null : cstrdup (newhomedrive));
-
- if (newhomepath && newhomepath != homepath)
- cfree_and_set (homepath, cstrdup (newhomepath));
-
- switch (what)
- {
- case CH_HOMEDRIVE:
- return homedrive;
- case CH_HOMEPATH:
- return homepath;
- default:
- return homepath;
- }
-}
-
-const char *
-cygheap_user::test_uid (char *&what, const char *name, size_t namelen)
-{
- if (!what && !issetuid ())
- what = getwinenveq (name, namelen, HEAP_STR);
- return what;
-}
-
-const char *
-cygheap_user::env_logsrv (const char *name, size_t namelen)
-{
- if (test_uid (plogsrv, name, namelen))
- return plogsrv;
-
- const char *mydomain = domain ();
- const char *myname = winname ();
- if (!mydomain || ascii_strcasematch (myname, "SYSTEM"))
- return almost_null;
-
- WCHAR wdomain[MAX_DOMAIN_NAME_LEN + 1];
- WCHAR wlogsrv[INTERNET_MAX_HOST_NAME_LENGTH + 3];
- sys_mbstowcs (wdomain, MAX_DOMAIN_NAME_LEN + 1, mydomain);
- cfree_and_set (plogsrv, almost_null);
- if (get_logon_server (wdomain, wlogsrv, DS_IS_FLAT_NAME))
- sys_wcstombs_alloc (&plogsrv, HEAP_STR, wlogsrv);
- return plogsrv;
-}
-
-const char *
-cygheap_user::env_domain (const char *name, size_t namelen)
-{
- if (pwinname && test_uid (pdomain, name, namelen))
- return pdomain;
-
- DWORD ulen = UNLEN + 1;
- WCHAR username[ulen];
- DWORD dlen = MAX_DOMAIN_NAME_LEN + 1;
- WCHAR userdomain[dlen];
- SID_NAME_USE use;
-
- cfree_and_set (pwinname, almost_null);
- cfree_and_set (pdomain, almost_null);
- if (!LookupAccountSidW (NULL, sid (), username, &ulen,
- userdomain, &dlen, &use))
- __seterrno ();
- else
- {
- sys_wcstombs_alloc (&pwinname, HEAP_STR, username);
- sys_wcstombs_alloc (&pdomain, HEAP_STR, userdomain);
- }
- return pdomain;
-}
-
-const char *
-cygheap_user::env_userprofile (const char *name, size_t namelen)
-{
- if (test_uid (puserprof, name, namelen))
- return puserprof;
-
- /* User profile path is never longer than MAX_PATH. */
- WCHAR profile[MAX_PATH];
- WCHAR win_id[UNLEN + 1]; /* Large enough for SID */
-
- cfree_and_set (puserprof, almost_null);
- if (get_user_profile_directory (get_windows_id (win_id), profile, MAX_PATH))
- sys_wcstombs_alloc (&puserprof, HEAP_STR, profile);
-
- return puserprof;
-}
-
-const char *
-cygheap_user::env_homepath (const char *name, size_t namelen)
-{
- return ontherange (CH_HOMEPATH);
-}
-
-const char *
-cygheap_user::env_homedrive (const char *name, size_t namelen)
-{
- return ontherange (CH_HOMEDRIVE);
-}
-
-const char *
-cygheap_user::env_name (const char *name, size_t namelen)
-{
- if (!test_uid (pwinname, name, namelen))
- domain ();
- return pwinname;
-}
-
-const char *
-cygheap_user::env_systemroot (const char *name, size_t namelen)
-{
- if (!psystemroot)
- {
- int size = GetSystemWindowsDirectoryW (NULL, 0);
- if (size > 0)
- {
- WCHAR wsystemroot[size];
- size = GetSystemWindowsDirectoryW (wsystemroot, size);
- if (size > 0)
- sys_wcstombs_alloc (&psystemroot, HEAP_STR, wsystemroot);
- }
- if (size <= 0)
- debug_printf ("GetSystemWindowsDirectoryW(), %E");
- }
- return psystemroot;
-}
-
-char *
-pwdgrp::next_str (char c)
-{
- char *res = lptr;
- lptr = strchrnul (lptr, c);
- if (*lptr)
- *lptr++ = '\0';
- return res;
-}
-
-bool
-pwdgrp::next_num (unsigned long& n)
-{
- char *p = next_str (':');
- char *cp;
- n = strtoul (p, &cp, 10);
- return p != cp && !*cp;
-}
-
-char *
-pwdgrp::add_line (char *eptr)
-{
- if (eptr)
- {
- if (curr_lines >= max_lines)
- {
- max_lines += 10;
- pwdgrp_buf = crealloc_abort (pwdgrp_buf,
- max_lines * pwdgrp_buf_elem_size);
- }
- lptr = eptr;
- if ((this->*parse) ())
- curr_lines++;
- }
- return eptr;
-}
-
-void
-cygheap_pwdgrp::init ()
-{
- pwd_cache.cygserver.init_pwd ();
- pwd_cache.file.init_pwd ();
- pwd_cache.win.init_pwd ();
- grp_cache.cygserver.init_grp ();
- grp_cache.file.init_grp ();
- grp_cache.win.init_grp ();
- /* Default settings:
-
- passwd: files db
- group: files db
- db_prefix: auto DISABLED
- db_separator: + DISABLED
- db_home: cygwin desc
- db_shell: cygwin desc
- db_gecos: cygwin desc
- db_enum: cache builtin
- */
- pwd_src = (NSS_SRC_FILES | NSS_SRC_DB);
- grp_src = (NSS_SRC_FILES | NSS_SRC_DB);
- prefix = NSS_PFX_AUTO;
- separator[0] = L'+';
- home_scheme[0].method = NSS_SCHEME_CYGWIN;
- home_scheme[1].method = NSS_SCHEME_DESC;
- shell_scheme[0].method = NSS_SCHEME_CYGWIN;
- shell_scheme[1].method = NSS_SCHEME_DESC;
- gecos_scheme[0].method = NSS_SCHEME_CYGWIN;
- gecos_scheme[1].method = NSS_SCHEME_DESC;
- enums = (ENUM_CACHE | ENUM_BUILTIN);
- enum_tdoms = NULL;
- caching = true; /* INTERNAL ONLY */
-}
-
-#define NSS_NCMP(s) (!strncmp(c, (s), sizeof(s)-1))
-#define NSS_CMP(s) (!strncmp(c, (s), sizeof(s)-1) \
- && strchr (" \t", c[sizeof(s)-1]))
-
-/* The /etc/nsswitch.conf file is read exactly once by the root process of a
- process tree. We can't afford methodical changes during the lifetime of a
- process tree. */
-void
-cygheap_pwdgrp::nss_init_line (const char *line)
-{
- const char *c = line + strspn (line, " \t");
- char *comment = strchr (c, '#');
- if (comment)
- *comment = '\0';
- switch (*c)
- {
- case 'p':
- case 'g':
- {
- uint32_t *src = NULL;
- if (NSS_NCMP ("passwd:"))
- src = &pwd_src;
- else if (NSS_NCMP ("group:"))
- src = &grp_src;
- c = strchr (c, ':') + 1;
- if (src)
- {
- *src = 0;
- while (*(c += strspn (c, " \t")))
- {
- if (NSS_CMP ("files"))
- {
- *src |= NSS_SRC_FILES;
- c += 5;
- }
- else if (NSS_CMP ("db"))
- {
- *src |= NSS_SRC_DB;
- c += 2;
- }
- else
- {
- c += strcspn (c, " \t");
- debug_printf ("Invalid nsswitch.conf content: %s", line);
- }
- }
- if (*src == 0)
- *src = (NSS_SRC_FILES | NSS_SRC_DB);
- }
- }
- break;
- case 'd':
- if (!NSS_NCMP ("db_"))
- {
- debug_printf ("Invalid nsswitch.conf content: %s", line);
- break;
- }
- c += 3;
-#if 0 /* Disable setting prefix and separator from nsswitch.conf for now.
- Remove if nobody complains too loudly. */
- if (NSS_NCMP ("prefix:"))
- {
- c = strchr (c, ':') + 1;
- c += strspn (c, " \t");
- if (NSS_CMP ("auto"))
- prefix = NSS_AUTO;
- else if (NSS_CMP ("primary"))
- prefix = NSS_PRIMARY;
- else if (NSS_CMP ("always"))
- prefix = NSS_ALWAYS;
- else
- debug_printf ("Invalid nsswitch.conf content: %s", line);
- }
- else if (NSS_NCMP ("separator:"))
- {
- c = strchr (c, ':') + 1;
- c += strspn (c, " \t");
- if ((unsigned char) *c <= 0x7f && *c != ':' && strchr (" \t", c[1]))
- separator[0] = (unsigned char) *c;
- else
- debug_printf ("Invalid nsswitch.conf content: %s", line);
- }
- else
-#endif
- if (NSS_NCMP ("enum:"))
- {
- tmp_pathbuf tp;
- char *tdoms = tp.c_get ();
- char *td = tdoms;
- int new_enums = ENUM_NONE;
-
- td[0] = '\0';
- c = strchr (c, ':') + 1;
- c += strspn (c, " \t");
- while (!strchr (" \t", *c))
- {
- const char *e = c + strcspn (c, " \t");
- if (NSS_CMP ("none"))
- new_enums = ENUM_NONE;
- else if (NSS_CMP ("builtin"))
- new_enums |= ENUM_BUILTIN;
- else if (NSS_CMP ("cache"))
- new_enums |= ENUM_CACHE;
- else if (NSS_CMP ("files"))
- new_enums |= ENUM_FILES;
- else if (NSS_CMP ("local"))
- new_enums |= ENUM_LOCAL;
- else if (NSS_CMP ("primary"))
- new_enums |= ENUM_PRIMARY;
- else if (NSS_CMP ("alltrusted"))
- new_enums |= ENUM_TDOMS | ENUM_TDOMS_ALL;
- else if (NSS_CMP ("all"))
- new_enums |= ENUM_ALL;
- else
- {
- td = stpcpy (stpncpy (td, c, e - c), " ");
- new_enums |= ENUM_TDOMS;
- }
- c = e;
- c += strspn (c, " \t");
- }
- if ((new_enums & (ENUM_TDOMS | ENUM_TDOMS_ALL)) == ENUM_TDOMS)
- {
- if (td > tdoms)
- {
- PWCHAR spc;
- sys_mbstowcs_alloc (&enum_tdoms, HEAP_BUF, tdoms);
- /* Convert string to REG_MULTI_SZ-style. */
- while ((spc = wcsrchr (enum_tdoms, L' ')))
- *spc = L'\0';
- }
- else
- new_enums &= ~(ENUM_TDOMS | ENUM_TDOMS_ALL);
- }
- enums = new_enums;
- }
- else
- {
- nss_scheme_t *scheme = NULL;
- if (NSS_NCMP ("home:"))
- scheme = home_scheme;
- else if (NSS_NCMP ("shell:"))
- scheme = shell_scheme;
- else if (NSS_NCMP ("gecos:"))
- scheme = gecos_scheme;
- if (scheme)
- {
- uint16_t idx = 0;
-
- scheme[0].method = scheme[1].method = NSS_SCHEME_FALLBACK;
- c = strchr (c, ':') + 1;
- c += strspn (c, " \t");
- while (*c && idx < NSS_SCHEME_MAX)
- {
- if (NSS_CMP ("windows"))
- scheme[idx].method = NSS_SCHEME_WINDOWS;
- else if (NSS_CMP ("cygwin"))
- scheme[idx].method = NSS_SCHEME_CYGWIN;
- else if (NSS_CMP ("unix"))
- scheme[idx].method = NSS_SCHEME_UNIX;
- else if (NSS_CMP ("desc"))
- scheme[idx].method = NSS_SCHEME_DESC;
- else if (NSS_NCMP ("/"))
- {
- const char *e = c + strcspn (c, " \t");
- scheme[idx].method = NSS_SCHEME_PATH;
- sys_mbstowcs_alloc (&scheme[idx].attrib, HEAP_STR,
- c, e - c);
- }
- else if (NSS_NCMP ("@") && isalnum ((unsigned) *++c))
- {
- const char *e = c + strcspn (c, " \t");
- scheme[idx].method = NSS_SCHEME_FREEATTR;
- sys_mbstowcs_alloc (&scheme[idx].attrib, HEAP_STR,
- c, e - c);
- }
- else
- debug_printf ("Invalid nsswitch.conf content: %s", line);
- c += strcspn (c, " \t");
- c += strspn (c, " \t");
- ++idx;
- }
- /* If nothing has been set, revert to default. */
- if (scheme[0].method == NSS_SCHEME_FALLBACK)
- {
- scheme[0].method = NSS_SCHEME_CYGWIN;
- scheme[1].method = NSS_SCHEME_DESC;
- }
- }
- }
- break;
- case '\0':
- break;
- default:
- debug_printf ("Invalid nsswitch.conf content: %s", line);
- break;
- }
-}
-
-static char *
-fetch_windows_home (PCWSTR home_from_db, cygpsid &sid)
-{
- char *home = NULL;
-
- if (home_from_db && *home_from_db)
- home = (char *) cygwin_create_path (CCP_WIN_W_TO_POSIX, home_from_db);
- else
- {
- /* The db fields are empty, so we have to evaluate the local profile
- path, which is the same thing as the default home directory on
- Windows. So what we do here is to try to find out if the user
- already has a profile on this machine.
- Note that we don't try to generate the profile if it doesn't exist.
- Think what would happen if we actually have the permissions to do
- so and call getpwent... in a domain environment. The problem is,
- of course, that we can't know the profile path, unless the OS
- created it.
- The only reason this could occur is if a user account, which never
- logged on to the machine before, tries to logon via a Cygwin service
- like sshd. */
- WCHAR profile[MAX_PATH];
- WCHAR sidstr[128];
-
- if (get_user_profile_directory (sid.string (sidstr), profile, MAX_PATH))
- home = (char *) cygwin_create_path (CCP_WIN_W_TO_POSIX, profile);
- }
- return home;
-}
-
-/* Local SAM accounts have only a handful attributes available to home users.
- Therefore, allow to fetch additional passwd/group attributes from the
- "Comment" field in XML short style. For symmetry, this is also allowed
- from the equivalent "description" AD attribute. */
-static char *
-fetch_from_description (PCWSTR desc, PCWSTR search, size_t len)
-{
- PWCHAR s, e;
- char *ret = NULL;
-
- if ((s = wcsstr (desc, L"<cygwin ")) && (e = wcsstr (s + 8, L"/>")))
- {
- s += 8;
- while (s && s < e)
- {
- while (*s == L' ')
- ++s;
- if (!wcsncmp (s, search, len)) /* Found what we're searching? */
- {
- s += len;
- if ((e = wcschr (s, L'"')))
- {
- sys_wcstombs_alloc (&ret, HEAP_NOTHEAP, s, e - s);
- s = e + 1;
- }
- break;
- }
- else /* Skip the current foo="bar" string. */
- if ((s = wcschr (s, L'"')) && (s = wcschr (s + 1, L'"')))
- ++s;
- }
- }
- return ret;
-}
-
-static char *
-fetch_from_path (PCWSTR str, PCWSTR dom, PCWSTR name, bool full_qualified)
-{
- tmp_pathbuf tp;
- PWCHAR wpath = tp.w_get ();
- PWCHAR w = wpath;
- PWCHAR we = wpath + NT_MAX_PATH - 1;
- char *ret = NULL;
-
- while (*str && w < we)
- {
- if (*str != L'%')
- *w++ = *str++;
- else
- {
- switch (*++str)
- {
- case L'u':
- if (full_qualified)
- {
- w = wcpncpy (w, dom, we - w);
- if (w < we)
- *w++ = cygheap->pg.nss_separator ()[0];
- }
- w = wcpncpy (w, name, we - w);
- break;
- case L'U':
- w = wcpncpy (w, name, we - w);
- break;
- case L'D':
- w = wcpncpy (w, dom, we - w);
- break;
- case L'_':
- *w++ = L' ';
- break;
- default:
- *w++ = *str;
- break;
- }
- ++str;
- }
- }
- *w = L'\0';
- sys_wcstombs_alloc (&ret, HEAP_NOTHEAP, wpath);
- return ret;
-}
-
-char *
-cygheap_pwdgrp::get_home (cyg_ldap *pldap, cygpsid &sid, PCWSTR dom,
- PCWSTR name, bool full_qualified)
-{
- PWCHAR val;
- char *home = NULL;
-
- for (uint16_t idx = 0; !home && idx < NSS_SCHEME_MAX; ++idx)
- {
- switch (home_scheme[idx].method)
- {
- case NSS_SCHEME_FALLBACK:
- return NULL;
- case NSS_SCHEME_WINDOWS:
- val = pldap->get_string_attribute (L"homeDrive");
- if (!val || !*val)
- val = pldap->get_string_attribute (L"homeDirectory");
- home = fetch_windows_home (val, sid);
- break;
- case NSS_SCHEME_CYGWIN:
- val = pldap->get_string_attribute (L"cygwinHome");
- if (val && *val)
- sys_wcstombs_alloc (&home, HEAP_NOTHEAP, val);
- break;
- case NSS_SCHEME_UNIX:
- val = pldap->get_string_attribute (L"unixHomeDirectory");
- if (val && *val)
- sys_wcstombs_alloc (&home, HEAP_NOTHEAP, val);
- break;
- case NSS_SCHEME_DESC:
- val = pldap->get_string_attribute (L"description");
- if (val && *val)
- home = fetch_from_description (val, L"home=\"", 6);
- break;
- case NSS_SCHEME_PATH:
- home = fetch_from_path (home_scheme[idx].attrib, dom, name,
- full_qualified);
- break;
- case NSS_SCHEME_FREEATTR:
- val = pldap->get_string_attribute (home_scheme[idx].attrib);
- if (val && *val)
- {
- if (isdrive (val) || *val == '\\')
- home = (char *) cygwin_create_path (CCP_WIN_W_TO_POSIX, val);
- else
- sys_wcstombs_alloc (&home, HEAP_NOTHEAP, val);
- }
- break;
- }
- }
- return home;
-}
-
-char *
-cygheap_pwdgrp::get_home (PUSER_INFO_3 ui, cygpsid &sid, PCWSTR dom,
- PCWSTR name, bool full_qualified)
-{
- PWCHAR val = NULL;
- char *home = NULL;
-
- for (uint16_t idx = 0; !home && idx < NSS_SCHEME_MAX; ++idx)
- {
- switch (home_scheme[idx].method)
- {
- case NSS_SCHEME_FALLBACK:
- return NULL;
- case NSS_SCHEME_WINDOWS:
- if (ui->usri3_home_dir_drive && *ui->usri3_home_dir_drive)
- val = ui->usri3_home_dir_drive;
- else if (ui->usri3_home_dir && *ui->usri3_home_dir)
- val = ui->usri3_home_dir;
- home = fetch_windows_home (val, sid);
- break;
- case NSS_SCHEME_CYGWIN:
- case NSS_SCHEME_UNIX:
- case NSS_SCHEME_FREEATTR:
- break;
- case NSS_SCHEME_DESC:
- home = fetch_from_description (ui->usri3_comment, L"home=\"", 6);
- break;
- case NSS_SCHEME_PATH:
- home = fetch_from_path (home_scheme[idx].attrib, dom, name,
- full_qualified);
- break;
- }
- }
- return home;
-}
-
-char *
-cygheap_pwdgrp::get_shell (cyg_ldap *pldap, PCWSTR dom, PCWSTR name,
- bool full_qualified)
-{
- PWCHAR val;
- char *shell = NULL;
-
- for (uint16_t idx = 0; !shell && idx < NSS_SCHEME_MAX; ++idx)
- {
- switch (shell_scheme[idx].method)
- {
- case NSS_SCHEME_FALLBACK:
- return NULL;
- case NSS_SCHEME_WINDOWS:
- break;
- case NSS_SCHEME_CYGWIN:
- val = pldap->get_string_attribute (L"cygwinShell");
- if (val && *val)
- sys_wcstombs_alloc (&shell, HEAP_NOTHEAP, val);
- break;
- case NSS_SCHEME_UNIX:
- val = pldap->get_string_attribute (L"loginShell");
- if (val && *val)
- sys_wcstombs_alloc (&shell, HEAP_NOTHEAP, val);
- break;
- case NSS_SCHEME_DESC:
- val = pldap->get_string_attribute (L"description");
- if (val && *val)
- shell = fetch_from_description (val, L"shell=\"", 7);
- break;
- case NSS_SCHEME_PATH:
- shell = fetch_from_path (shell_scheme[idx].attrib, dom, name,
- full_qualified);
- break;
- case NSS_SCHEME_FREEATTR:
- val = pldap->get_string_attribute (shell_scheme[idx].attrib);
- if (val && *val)
- {
- if (isdrive (val) || *val == '\\')
- shell = (char *) cygwin_create_path (CCP_WIN_W_TO_POSIX, val);
- else
- sys_wcstombs_alloc (&shell, HEAP_NOTHEAP, val);
- }
- break;
- }
- }
- return shell;
-}
-
-char *
-cygheap_pwdgrp::get_shell (PUSER_INFO_3 ui, PCWSTR dom, PCWSTR name,
- bool full_qualified)
-{
- char *shell = NULL;
-
- for (uint16_t idx = 0; !shell && idx < NSS_SCHEME_MAX; ++idx)
- {
- switch (shell_scheme[idx].method)
- {
- case NSS_SCHEME_FALLBACK:
- return NULL;
- case NSS_SCHEME_WINDOWS:
- case NSS_SCHEME_CYGWIN:
- case NSS_SCHEME_UNIX:
- case NSS_SCHEME_FREEATTR:
- break;
- case NSS_SCHEME_DESC:
- shell = fetch_from_description (ui->usri3_comment, L"shell=\"", 7);
- break;
- case NSS_SCHEME_PATH:
- shell = fetch_from_path (shell_scheme[idx].attrib, dom, name,
- full_qualified);
- break;
- }
- }
- return shell;
-}
-
-/* Helper function to replace colons with semicolons in pw_gecos field. */
-static inline void
-colon_to_semicolon (char *str)
-{
- char *cp = str;
- while ((cp = strchr (cp, L':')) != NULL)
- *cp++ = L';';
-}
-
-char *
-cygheap_pwdgrp::get_gecos (cyg_ldap *pldap, PCWSTR dom, PCWSTR name,
- bool full_qualified)
-{
- PWCHAR val;
- char *gecos = NULL;
-
- for (uint16_t idx = 0; !gecos && idx < NSS_SCHEME_MAX; ++idx)
- {
- switch (gecos_scheme[idx].method)
- {
- case NSS_SCHEME_FALLBACK:
- return NULL;
- case NSS_SCHEME_WINDOWS:
- val = pldap->get_string_attribute (L"displayName");
- if (val && *val)
- sys_wcstombs_alloc (&gecos, HEAP_NOTHEAP, val);
- break;
- case NSS_SCHEME_CYGWIN:
- val = pldap->get_string_attribute (L"cygwinGecos");
- if (val && *val)
- sys_wcstombs_alloc (&gecos, HEAP_NOTHEAP, val);
- break;
- case NSS_SCHEME_UNIX:
- val = pldap->get_string_attribute (L"gecos");
- if (val && *val)
- sys_wcstombs_alloc (&gecos, HEAP_NOTHEAP, val);
- break;
- case NSS_SCHEME_DESC:
- val = pldap->get_string_attribute (L"description");
- if (val && *val)
- gecos = fetch_from_description (val, L"gecos=\"", 7);
- break;
- case NSS_SCHEME_PATH:
- gecos = fetch_from_path (gecos_scheme[idx].attrib + 1, dom, name,
- full_qualified);
- break;
- case NSS_SCHEME_FREEATTR:
- val = pldap->get_string_attribute (gecos_scheme[idx].attrib);
- if (val && *val)
- sys_wcstombs_alloc (&gecos, HEAP_NOTHEAP, val);
- break;
- }
- }
- if (gecos)
- colon_to_semicolon (gecos);
- return gecos;
-}
-
-char *
-cygheap_pwdgrp::get_gecos (PUSER_INFO_3 ui, PCWSTR dom, PCWSTR name,
- bool full_qualified)
-{
- char *gecos = NULL;
-
- for (uint16_t idx = 0; !gecos && idx < NSS_SCHEME_MAX; ++idx)
- {
- switch (gecos_scheme[idx].method)
- {
- case NSS_SCHEME_FALLBACK:
- return NULL;
- case NSS_SCHEME_WINDOWS:
- if (ui->usri3_full_name && *ui->usri3_full_name)
- sys_wcstombs_alloc (&gecos, HEAP_NOTHEAP, ui->usri3_full_name);
- break;
- case NSS_SCHEME_CYGWIN:
- case NSS_SCHEME_UNIX:
- case NSS_SCHEME_FREEATTR:
- break;
- case NSS_SCHEME_DESC:
- gecos = fetch_from_description (ui->usri3_comment, L"gecos=\"", 7);
- break;
- case NSS_SCHEME_PATH:
- gecos = fetch_from_path (gecos_scheme[idx].attrib + 1, dom, name,
- full_qualified);
- break;
- }
- }
- if (gecos)
- colon_to_semicolon (gecos);
- return gecos;
-}
-
-void
-cygheap_pwdgrp::_nss_init ()
-{
- UNICODE_STRING path;
- OBJECT_ATTRIBUTES attr;
- NT_readline rl;
- tmp_pathbuf tp;
- char *buf = tp.c_get ();
-
- PCWSTR rel_path = L"\\etc\\nsswitch.conf";
- path.Length = (wcslen (cygheap->installation_root) + wcslen (rel_path))
- * sizeof (WCHAR);
- path.MaximumLength = path.Length + sizeof (WCHAR);
- path.Buffer = (PWCHAR) alloca (path.MaximumLength);
- wcpcpy (wcpcpy (path.Buffer, cygheap->installation_root), rel_path);
- InitializeObjectAttributes (&attr, &path, OBJ_CASE_INSENSITIVE,
- NULL, NULL);
- if (rl.init (&attr, buf, NT_MAX_PATH))
- while ((buf = rl.gets ()))
- nss_init_line (buf);
- nss_inited = true;
-}
-
-/* Override the ParentIndex value of the PDS_DOMAIN_TRUSTSW entry with the
- PosixOffset. */
-#define PosixOffset ParentIndex
-
-bool
-cygheap_domain_info::init ()
-{
- HANDLE lsa;
- NTSTATUS status;
- ULONG ret;
- /* We *have* to copy the information. Apart from our wish to have the
- stuff in the cygheap, even when not calling LsaFreeMemory on the result,
- the data will be overwritten later. From what I gather, the information
- is, in fact, stored on the stack. */
- PPOLICY_DNS_DOMAIN_INFO pdom;
- PPOLICY_ACCOUNT_DOMAIN_INFO adom;
- PDS_DOMAIN_TRUSTSW td;
- ULONG tdom_cnt;
-
- if (adom_name)
- return true;
- lsa = lsa_open_policy (NULL, POLICY_VIEW_LOCAL_INFORMATION);
- if (!lsa)
- {
- system_printf ("lsa_open_policy(NULL) failed");
- return false;
- }
- /* Fetch primary domain information from local LSA. */
- status = LsaQueryInformationPolicy (lsa, PolicyDnsDomainInformation,
- (PVOID *) &pdom);
- if (status != STATUS_SUCCESS)
- {
- system_printf ("LsaQueryInformationPolicy(Primary) %y", status);
- return false;
- }
- /* Copy primary domain info to cygheap. */
- pdom_name = cwcsdup (pdom->Name.Buffer);
- pdom_dns_name = pdom->DnsDomainName.Length
- ? cwcsdup (pdom->DnsDomainName.Buffer) : NULL;
- pdom_sid = pdom->Sid;
- LsaFreeMemory (pdom);
- /* Fetch account domain information from local LSA. */
- status = LsaQueryInformationPolicy (lsa, PolicyAccountDomainInformation,
- (PVOID *) &adom);
- if (status != STATUS_SUCCESS)
- {
- system_printf ("LsaQueryInformationPolicy(Account) %y", status);
- return false;
- }
- /* Copy account domain info to cygheap. If we're running on a DC the account
- domain is identical to the primary domain. This leads to confusion when
- trying to compute the uid/gid values. Therefore we invalidate the account
- domain name if we're running on a DC. */
- adom_sid = adom->DomainSid;
- adom_name = cwcsdup (pdom_sid == adom_sid ? L"@" : adom->DomainName.Buffer);
- LsaFreeMemory (adom);
- lsa_close_policy (lsa);
- if (cygheap->dom.member_machine ())
- {
- ret = DsEnumerateDomainTrustsW (NULL, DS_DOMAIN_DIRECT_INBOUND
- | DS_DOMAIN_DIRECT_OUTBOUND
- | DS_DOMAIN_IN_FOREST,
- &td, &tdom_cnt);
- if (ret != ERROR_SUCCESS)
- {
- SetLastError (ret);
- debug_printf ("DsEnumerateDomainTrusts: %E");
- return true;
- }
- if (tdom_cnt == 0)
- {
- return true;
- }
- /* Copy trusted domain info to cygheap, setting PosixOffset on the fly. */
- tdom = (PDS_DOMAIN_TRUSTSW)
- cmalloc_abort (HEAP_BUF, tdom_cnt * sizeof (DS_DOMAIN_TRUSTSW));
- memcpy (tdom, td, tdom_cnt * sizeof (DS_DOMAIN_TRUSTSW));
- for (ULONG idx = 0; idx < tdom_cnt; ++idx)
- {
- /* Copy... */
- tdom[idx].NetbiosDomainName = cwcsdup (td[idx].NetbiosDomainName);
- /* DnsDomainName as well as DomainSid can be NULL. The reason is
- usually a domain of type TRUST_TYPE_DOWNLEVEL. This can be an
- old pre-AD domain, or a Netware domain, etc. If DnsDomainName
- is NULL, just set it to NetbiosDomainName. This simplifies
- subsequent code which doesn't have to check for a NULL pointer. */
- tdom[idx].DnsDomainName = td[idx].DnsDomainName
- ? cwcsdup (td[idx].DnsDomainName)
- : tdom[idx].NetbiosDomainName;
- if (td[idx].DomainSid)
- {
- ULONG len = RtlLengthSid (td[idx].DomainSid);
- tdom[idx].DomainSid = cmalloc_abort(HEAP_BUF, len);
- RtlCopySid (len, tdom[idx].DomainSid, td[idx].DomainSid);
- }
- /* ...and set PosixOffset to 0. This */
- tdom[idx].PosixOffset = 0;
- }
- NetApiBufferFree (td);
- tdom_count = tdom_cnt;
- }
- /* If we have Microsoft Client for NFS installed, we make use of a name
- mapping server. This can be either Active Directory to map uids/gids
- directly to Windows SIDs, or an AD LDS or other RFC 2307 compatible
- identity store. The name of the mapping domain can be fetched from the
- registry key created by the NFS client installation and entered by the
- user via nfsadmin or the "Services For NFS" MMC snap-in.
-
- Reference:
- http://blogs.technet.com/b/filecab/archive/2012/10/09/nfs-identity-mapping-in-windows-server-2012.aspx
- Note that we neither support UNMP nor local passwd/group file mapping,
- nor UUUA.
-
- This function returns the mapping server from the aforementioned registry
- key, or, if none is configured, NULL, which will be resolved to the
- primary domain of the machine by the ldap_init function.
-
- The latter is useful to get an RFC 2307 mapping for Samba UNIX accounts,
- even if no NFS name mapping is configured on the machine. Fortunately,
- the posixAccount and posixGroup schemas are already available in the
- Active Directory default setup since Windows Server 2003 R2. */
- reg_key reg (HKEY_LOCAL_MACHINE, KEY_READ | KEY_WOW64_64KEY,
- L"SOFTWARE", L"Microsoft", L"ServicesForNFS", NULL);
- if (!reg.error ())
- {
- DWORD rfc2307 = reg.get_dword (L"Rfc2307", 0);
- if (rfc2307)
- {
- rfc2307_domain_buf = (PWCHAR) ccalloc_abort (HEAP_STR, 257,
- sizeof (WCHAR));
- reg.get_string (L"Rfc2307Domain", rfc2307_domain_buf, 257, L"");
- if (!rfc2307_domain_buf[0])
- {
- cfree (rfc2307_domain_buf);
- rfc2307_domain_buf = NULL;
- }
- }
- }
- return true;
-}
-
-/* Per session, so it changes potentially when switching the user context. */
-static cygsid logon_sid ("");
-
-static void
-get_logon_sid ()
-{
- if (PSID (logon_sid) == NO_SID)
- {
- NTSTATUS status;
- ULONG size;
- tmp_pathbuf tp;
- PTOKEN_GROUPS groups = (PTOKEN_GROUPS) tp.c_get ();
-
- status = NtQueryInformationToken (hProcToken, TokenGroups, groups,
- NT_MAX_PATH, &size);
- if (!NT_SUCCESS (status))
- debug_printf ("NtQueryInformationToken() %y", status);
- else
- {
- for (DWORD pg = 0; pg < groups->GroupCount; ++pg)
- if (groups->Groups[pg].Attributes & SE_GROUP_LOGON_ID)
- {
- logon_sid = groups->Groups[pg].Sid;
- break;
- }
- }
- }
-}
-
-void *
-pwdgrp::add_account_post_fetch (char *line, bool lock)
-{
- if (line)
- {
- void *ret;
- if (lock)
- pglock.init ("pglock")->acquire ();
- add_line (line);
- ret = ((char *) pwdgrp_buf) + (curr_lines - 1) * pwdgrp_buf_elem_size;
- if (lock)
- pglock.release ();
- return ret;
- }
- return NULL;
-}
-
-void *
-pwdgrp::add_account_from_file (cygpsid &sid)
-{
- if (!path.MaximumLength)
- return NULL;
- fetch_user_arg_t arg;
- arg.type = SID_arg;
- arg.sid = &sid;
- char *line = fetch_account_from_file (arg);
- return (struct passwd *) add_account_post_fetch (line, true);
-}
-
-void *
-pwdgrp::add_account_from_file (const char *name)
-{
- if (!path.MaximumLength)
- return NULL;
- fetch_user_arg_t arg;
- arg.type = NAME_arg;
- arg.name = name;
- char *line = fetch_account_from_file (arg);
- return (struct passwd *) add_account_post_fetch (line, true);
-}
-
-void *
-pwdgrp::add_account_from_file (uint32_t id)
-{
- if (!path.MaximumLength)
- return NULL;
- fetch_user_arg_t arg;
- arg.type = ID_arg;
- arg.id = id;
- char *line = fetch_account_from_file (arg);
- return (struct passwd *) add_account_post_fetch (line, true);
-}
-
-void *
-pwdgrp::add_account_from_windows (cygpsid &sid, cyg_ldap *pldap)
-{
- fetch_user_arg_t arg;
- arg.type = SID_arg;
- arg.sid = &sid;
- char *line = fetch_account_from_windows (arg, pldap);
- if (!line)
- return NULL;
- return add_account_post_fetch (line, true);
-}
-
-void *
-pwdgrp::add_account_from_windows (const char *name, cyg_ldap *pldap)
-{
- fetch_user_arg_t arg;
- arg.type = NAME_arg;
- arg.name = name;
- char *line = fetch_account_from_windows (arg, pldap);
- if (!line)
- return NULL;
- return add_account_post_fetch (line, true);
-}
-
-void *
-pwdgrp::add_account_from_windows (uint32_t id, cyg_ldap *pldap)
-{
- fetch_user_arg_t arg;
- arg.type = ID_arg;
- arg.id = id;
- char *line = fetch_account_from_windows (arg, pldap);
- if (!line)
- return NULL;
- return add_account_post_fetch (line, true);
-}
-
-/* Check if file exists and if it has been written to since last checked.
- If file has been changed, invalidate the current cache.
-
- If the file doesn't exist when this function is called the first time,
- by the first Cygwin process in a process tree, the file will never be
- visited again by any process in this process tree. This is important,
- because we cannot allow a change of UID/GID values for the lifetime
- of a process tree.
-
- If the file gets deleted or unreadable, the file cache will stay in
- place, but we won't try to read new accounts from the file.
-
- The return code indicates to the calling function if the file exists. */
-bool
-pwdgrp::check_file ()
-{
- FILE_BASIC_INFORMATION fbi;
- NTSTATUS status;
-
- if (!path.Buffer)
- {
- PCWSTR rel_path = is_group () ? L"\\etc\\group" : L"\\etc\\passwd";
- path.Length = (wcslen (cygheap->installation_root) + wcslen (rel_path))
- * sizeof (WCHAR);
- path.MaximumLength = path.Length + sizeof (WCHAR);
- path.Buffer = (PWCHAR) cmalloc_abort (HEAP_BUF, path.MaximumLength);
- wcpcpy (wcpcpy (path.Buffer, cygheap->installation_root), rel_path);
- InitializeObjectAttributes (&attr, &path, OBJ_CASE_INSENSITIVE,
- NULL, NULL);
- }
- else if (path.MaximumLength == 0) /* Indicates that the file doesn't exist. */
- return false;
- status = NtQueryAttributesFile (&attr, &fbi);
- if (!NT_SUCCESS (status))
- {
- if (last_modified.QuadPart)
- last_modified.QuadPart = 0LL;
- else
- path.MaximumLength = 0;
- return false;
- }
- if (fbi.LastWriteTime.QuadPart > last_modified.QuadPart)
- {
- last_modified.QuadPart = fbi.LastWriteTime.QuadPart;
- if (curr_lines > 0)
- {
- pglock.init ("pglock")->acquire ();
- int curr = curr_lines;
- curr_lines = 0;
- for (int i = 0; i < curr; ++i)
- cfree (is_group () ? this->group ()[i].g.gr_name
- : this->passwd ()[i].p.pw_name);
- pglock.release ();
- }
- }
- return true;
-}
-
-char *
-pwdgrp::fetch_account_from_line (fetch_user_arg_t &arg, const char *line)
-{
- char *p, *e;
-
- switch (arg.type)
- {
- case SID_arg:
- /* Ignore fields, just scan for SID string. */
- if (!(p = strstr (line, arg.name)) || p[arg.len] != ':')
- return NULL;
- break;
- case NAME_arg:
- /* First field is always name. */
- if (!strncasematch (line, arg.name, arg.len) || line[arg.len] != ':')
- return NULL;
- break;
- case ID_arg:
- /* Skip to third field. */
- if (!(p = strchr (line, ':')) || !(p = strchr (p + 1, ':')))
- return NULL;
- if (strtoul (p + 1, &e, 10) != arg.id || !e || *e != ':')
- return NULL;
- break;
- }
- return cstrdup (line);
-}
-
-char *
-pwdgrp::fetch_account_from_file (fetch_user_arg_t &arg)
-{
- NT_readline rl;
- tmp_pathbuf tp;
- char *buf = tp.c_get ();
- char str[128];
- char *ret = NULL;
-
- /* Create search string. */
- switch (arg.type)
- {
- case SID_arg:
- /* Override SID with SID string. */
- arg.sid->string (str);
- arg.name = str;
- /*FALLTHRU*/
- case NAME_arg:
- arg.len = strlen (arg.name);
- break;
- case ID_arg:
- break;
- }
- if (rl.init (&attr, buf, NT_MAX_PATH))
- while ((buf = rl.gets ()))
- if ((ret = fetch_account_from_line (arg, buf)))
- return ret;
- return NULL;
-}
-
-static ULONG
-fetch_posix_offset (PDS_DOMAIN_TRUSTSW td, cyg_ldap *cldap)
-{
- uint32_t id_val = UINT32_MAX;
-
- if (!td->PosixOffset && !(td->Flags & DS_DOMAIN_PRIMARY) && td->DomainSid)
- {
- if (cldap->open (NULL) == NO_ERROR)
- id_val = cldap->fetch_posix_offset_for_domain (td->DnsDomainName);
- if (id_val < PRIMARY_POSIX_OFFSET)
- {
- /* If the offset is less than the primay domain offset, we're bound
- to suffer collisions with system and local accounts. Move offset
- to a fixed replacement fake offset. This may result in collisions
- between other domains all of which were moved to this replacement
- offset, but we can't fix all problems caused by careless admins. */
- id_val = UNUSABLE_POSIX_OFFSET;
- }
- else if (id_val == UINT32_MAX)
- {
- /* We're probably running under a local account, so we're not allowed
- to fetch any information from AD beyond the most obvious. Fake a
- reasonable posix offset as above and hope for the best. */
- id_val = NOACCESS_POSIX_OFFSET;
- }
- td->PosixOffset = id_val;
- }
- return td->PosixOffset;
-}
-
-/* CV 2014-05-08: USER_INFO_24 is not yet defined in Mingw64, but will be in
- the next release. For the time being, define the structure here with
- another name which won't collide with the upcoming correct definition
- in lmaccess.h. */
-struct cyg_USER_INFO_24
-{
- BOOL usri24_internet_identity;
- DWORD usri24_flags;
- LPWSTR usri24_internet_provider_name;
- LPWSTR usri24_internet_principal_name;
- PSID usri24_user_sid;
-};
-
-char *
-pwdgrp::fetch_account_from_windows (fetch_user_arg_t &arg, cyg_ldap *pldap)
-{
- /* Used in LookupAccount calls. */
- WCHAR namebuf[UNLEN + 1], *name = namebuf;
- WCHAR dom[DNLEN + 1] = L"";
- cygsid csid;
- DWORD nlen = UNLEN + 1;
- DWORD dlen = DNLEN + 1;
- DWORD slen = SECURITY_MAX_SID_SIZE;
- cygpsid sid (NO_SID);
- SID_NAME_USE acc_type;
- BOOL ret = false;
- /* Cygwin user name style. */
- bool fully_qualified_name = false;
- /* Computed stuff. */
- uid_t uid = ILLEGAL_UID;
- gid_t gid = ILLEGAL_GID;
- bool is_domain_account = true;
- PCWSTR domain = NULL;
- char *shell = NULL;
- char *home = NULL;
- char *gecos = NULL;
- /* Temporary stuff. */
- PWCHAR p;
- WCHAR sidstr[128];
- ULONG posix_offset = 0;
- uint32_t id_val;
- cyg_ldap loc_ldap;
- cyg_ldap *cldap = pldap ?: &loc_ldap;
-
- /* Initialize */
- if (!cygheap->dom.init ())
- return NULL;
-
- switch (arg.type)
- {
- case SID_arg:
- sid = *arg.sid;
- ret = LookupAccountSidW (NULL, sid, name, &nlen, dom, &dlen, &acc_type);
- if (!ret
- && cygheap->dom.member_machine ()
- && sid_id_auth (sid) == 5 /* SECURITY_NT_AUTHORITY */
- && sid_sub_auth (sid, 0) == SECURITY_BUILTIN_DOMAIN_RID)
- {
- /* LookupAccountSid called on a non-DC cannot resolve aliases which
- are not defined in the local SAM. If we encounter an alias which
- can't be resolved, and if we're a domain member machine, ask a DC.
- Do *not* use LookupAccountSidW. It can take ages when called on a
- DC for some weird reason. Use LDAP instead. */
- PWCHAR val;
-
- if (cldap->open (NULL) == NO_ERROR
- && cldap->fetch_ad_account (sid, is_group ())
- && (val = cldap->get_group_name ()))
- {
- wcpcpy (name, val);
- wcpcpy (dom, L"BUILTIN");
- acc_type = SidTypeAlias;
- ret = true;
- }
- }
- if (!ret)
- debug_printf ("LookupAccountSid(%W), %E", sid.string (sidstr));
- break;
- case NAME_arg:
- bool fq_name;
-
- fq_name = false;
- /* Copy over to wchar for search. */
- sys_mbstowcs (name, UNLEN + 1, arg.name);
- /* Replace domain separator char with backslash and make sure p is NULL
- or points to the backslash. */
- if ((p = wcschr (name, cygheap->pg.nss_separator ()[0])))
- {
- fq_name = true;
- *p = L'\\';
- }
- sid = csid;
- ret = LookupAccountNameW (NULL, name, sid, &slen, dom, &dlen, &acc_type);
- /* If this is a name-only S-1-5-21 account *and* it's a machine account
- on a domain member machine, then we found the wrong one. Another
- weird, but perfectly valid case is, if the group name is identical
- to the domain name. Try again with domain name prepended. */
- if (ret
- && !fq_name
- && sid_id_auth (sid) == 5 /* SECURITY_NT_AUTHORITY */
- && sid_sub_auth (sid, 0) == SECURITY_NT_NON_UNIQUE
- && cygheap->dom.member_machine ()
- && (wcscasecmp (dom, cygheap->dom.account_flat_name ()) == 0
- || acc_type == SidTypeDomain))
- {
- p = wcpcpy (name, cygheap->dom.primary_flat_name ());
- *p = L'\\';
- sys_mbstowcs (p + 1, UNLEN + 1, arg.name);
- slen = SECURITY_MAX_SID_SIZE;
- dlen = DNLEN + 1;
- sid = csid;
- ret = LookupAccountNameW (NULL, name, sid, &slen, dom, &dlen,
- &acc_type);
- }
- /* LookupAccountName doesn't find NT SERVICE accounts. Try just for
- kicks (and to make TrustedInstaller work here :-P */
- else if (!ret)
- {
- p = wcpcpy (name, L"NT SERVICE");
- *p = L'\\';
- sys_mbstowcs (p + 1, UNLEN + 1, arg.name);
- slen = SECURITY_MAX_SID_SIZE;
- dlen = DNLEN + 1;
- sid = csid;
- ret = LookupAccountNameW (NULL, name, sid, &slen, dom, &dlen,
- &acc_type);
- }
- if (!ret)
- {
- debug_printf ("LookupAccountNameW (%W), %E", name);
- return NULL;
- }
- /* We can skip the backslash in the rest of this function. */
- if (p)
- name = p + 1;
- /* Last but not least, some validity checks on the name style. */
- if (!fq_name)
- {
- /* name_only only if db_prefix is auto. */
- if (!cygheap->pg.nss_prefix_auto ())
- {
- debug_printf ("Invalid account name <%s> (name only/"
- "db_prefix not auto)", arg.name);
- return NULL;
- }
- /* name_only account is either builtin or primary domain, or
- account domain on non-domain machines. */
- if (sid_id_auth (sid) == 5 /* SECURITY_NT_AUTHORITY */
- && sid_sub_auth (sid, 0) == SECURITY_NT_NON_UNIQUE)
- {
- if (cygheap->dom.member_machine ())
- {
- if (wcscasecmp (dom, cygheap->dom.primary_flat_name ()) != 0)
- {
- debug_printf ("Invalid account name <%s> (name only/"
- "non primary on domain machine)", arg.name);
- return NULL;
- }
- }
- else if (wcscasecmp (dom, cygheap->dom.account_flat_name ()) != 0)
- {
- debug_printf ("Invalid account name <%s> (name only/"
- "non machine on non-domain machine)", arg.name);
- return NULL;
- }
- }
- }
- else
- {
- /* All is well if db_prefix is always. */
- if (cygheap->pg.nss_prefix_always ())
- break;
- /* Otherwise, no fully_qualified for builtin accounts. */
- if (sid_id_auth (sid) != 5 /* SECURITY_NT_AUTHORITY */
- || sid_sub_auth (sid, 0) != SECURITY_NT_NON_UNIQUE)
- {
- debug_printf ("Invalid account name <%s> (fully qualified/"
- "not NON_UNIQUE)", arg.name);
- return NULL;
- }
- /* All is well if db_prefix is primary. */
- if (cygheap->pg.nss_prefix_primary ())
- break;
- /* Domain member and domain == primary domain? */
- if (cygheap->dom.member_machine ())
- {
- if (!wcscasecmp (dom, cygheap->dom.primary_flat_name ()))
- {
- debug_printf ("Invalid account name <%s> (fully qualified/"
- "primary domain account)", arg.name);
- return NULL;
- }
- }
- /* Not domain member and domain == account domain? */
- else if (!wcscasecmp (dom, cygheap->dom.account_flat_name ()))
- {
- debug_printf ("Invalid account name <%s> (fully qualified/"
- "local account)", arg.name);
- return NULL;
- }
- }
- break;
- case ID_arg:
- /* Construct SID from ID using the SFU rules, just like the code below
- goes the opposite route. */
-#ifndef INTERIX_COMPATIBLE
- /* Except for Builtin and Alias groups in the SECURITY_NT_AUTHORITY.
- We create uid/gid values compatible with the old values generated
- by mkpasswd/mkgroup. */
- if (arg.id < 0x200)
- __small_swprintf (sidstr, L"S-1-5-%u", arg.id & 0x1ff);
- else if (arg.id == 0x3e8) /* Special case "Other Organization" */
- wcpcpy (sidstr, L"S-1-5-1000");
- else if (arg.id <= 0x7ff)
- __small_swprintf (sidstr, L"S-1-5-32-%u", arg.id & 0x7ff);
- else
-#endif
- if (arg.id == 0xffe)
- {
- /* OtherSession != Logon SID. */
- get_logon_sid ();
- /* LookupAccountSidW will fail. */
- sid = csid = logon_sid;
- sid_sub_auth_rid (sid) = 0;
- break;
- }
- else if (arg.id == 0xfff)
- {
- /* CurrentSession == Logon SID. */
- get_logon_sid ();
- /* LookupAccountSidW will fail. */
- sid = logon_sid;
- break;
- }
- else if (arg.id < 0x10000)
- {
- /* Nothing. */
- debug_printf ("Invalid POSIX id %u", arg.id);
- return NULL;
- }
- else if (arg.id < 0x20000)
- {
- /* Well-Known Group */
- arg.id -= 0x10000;
- /* SECURITY_APP_PACKAGE_AUTHORITY */
- if (arg.id >= 0xf20 && arg.id <= 0xf3f)
- __small_swprintf (sidstr, L"S-1-15-%u-%u", (arg.id >> 4) & 0xf,
- arg.id & 0xf);
- else
- __small_swprintf (sidstr, L"S-1-%u-%u", arg.id >> 8, arg.id & 0xff);
- }
- else if (arg.id >= 0x30000 && arg.id < 0x40000)
- {
- /* Account domain user or group. */
- PWCHAR s = cygheap->dom.account_sid ().pstring (sidstr);
- __small_swprintf (s, L"-%u", arg.id & 0xffff);
- }
- else if (arg.id < 0x60000)
- {
- /* Builtin Alias */
- __small_swprintf (sidstr, L"S-1-5-%u-%u",
- arg.id >> 12, arg.id & 0xffff);
- }
- else if (arg.id < 0x70000)
- {
- /* Mandatory Label. */
- __small_swprintf (sidstr, L"S-1-16-%u", arg.id & 0xffff);
- }
- else if (arg.id < 0x80000)
- {
- /* Identity assertion SIDs. */
- __small_swprintf (sidstr, L"S-1-18-%u", arg.id & 0xffff);
- }
- else if (arg.id < PRIMARY_POSIX_OFFSET)
- {
- /* Nothing. */
- debug_printf ("Invalid POSIX id %u", arg.id);
- return NULL;
- }
- else if (arg.id == ILLEGAL_UID)
- {
- /* Just some fake. */
- sid = csid = "S-1-99-0";
- break;
- }
- else if (arg.id >= UNIX_POSIX_OFFSET)
- {
- /* UNIX (unknown NFS or Samba) user account. */
- __small_swprintf (sidstr, L"S-1-22-%u-%u",
- is_group () ? 2 : 1, arg.id & UNIX_POSIX_MASK);
- /* LookupAccountSidW will fail. */
- sid = csid = sidstr;
- break;
- }
- else
- {
- /* Some trusted domain? */
- PDS_DOMAIN_TRUSTSW td = NULL, this_td = NULL;
-
- for (ULONG idx = 0; (td = cygheap->dom.trusted_domain (idx)); ++idx)
- {
- fetch_posix_offset (td, &loc_ldap);
- if (td->PosixOffset > posix_offset && td->PosixOffset <= arg.id)
- posix_offset = (this_td = td)->PosixOffset;
- }
- if (this_td)
- {
- cygpsid tsid (this_td->DomainSid);
- PWCHAR s = tsid.pstring (sidstr);
- __small_swprintf (s, L"-%u", arg.id - posix_offset);
- }
- else
- {
- /* Primary domain */
- PWCHAR s = cygheap->dom.primary_sid ().pstring (sidstr);
- __small_swprintf (s, L"-%u", arg.id - PRIMARY_POSIX_OFFSET);
- }
- posix_offset = 0;
- }
- sid = csid = sidstr;
- ret = LookupAccountSidW (NULL, sid, name, &nlen, dom, &dlen, &acc_type);
- if (!ret)
- {
- debug_printf ("LookupAccountSidW (%W), %E", sidstr);
- return NULL;
- }
- break;
- }
- if (ret)
- {
- /* Builtin account? SYSTEM, for instance, is returned as SidTypeUser,
- if a process is running as LocalSystem service.
- Microsoft Account? These show up in the user's group list, using the
- undocumented security authority 11. Even though this is officially a
- user account, it only matters as part of the group list, so we convert
- it to a well-known group here. */
- if (acc_type == SidTypeUser
- && (sid_sub_auth_count (sid) <= 3 || sid_id_auth (sid) == 11))
- acc_type = SidTypeWellKnownGroup;
- switch (acc_type)
- {
- case SidTypeUser:
- /* Don't allow users as group. While this is technically possible,
- it doesn't make sense in a POSIX scenario. It *is* used for
- Microsoft Accounts, but those are converted to well-known groups
- above. */
- if (is_group ())
- return NULL;
- /*FALLTHRU*/
- case SidTypeGroup:
- case SidTypeAlias:
- /* Predefined alias? */
- if (acc_type == SidTypeAlias
- && sid_sub_auth (sid, 0) != SECURITY_NT_NON_UNIQUE)
- {
-#ifdef INTERIX_COMPATIBLE
- posix_offset = 0x30000;
- uid = 0x1000 * sid_sub_auth (sid, 0)
- + (sid_sub_auth_rid (sid) & 0xffff);
-#else
- posix_offset = 0;
-#endif
- fully_qualified_name = cygheap->pg.nss_prefix_always ();
- is_domain_account = false;
- }
- /* Account domain account? */
- else if (!wcscasecmp (dom, cygheap->dom.account_flat_name ()))
- {
- posix_offset = 0x30000;
- if (cygheap->dom.member_machine ()
- || !cygheap->pg.nss_prefix_auto ())
- fully_qualified_name = true;
- is_domain_account = false;
- }
- /* Domain member machine? */
- else if (cygheap->dom.member_machine ())
- {
- /* Primary domain account? */
- if (!wcscasecmp (dom, cygheap->dom.primary_flat_name ()))
- {
- posix_offset = PRIMARY_POSIX_OFFSET;
- /* In theory domain should have been set to
- cygheap->dom.primary_dns_name (), but it turns out that
- not setting the domain here has advantages. We open the
- ldap connection to NULL (== some DC of our primary domain)
- anyway. So the domain is only used later on. So, don't
- set domain here to non-NULL, unless you're sure you have
- also changed subsequent assumptions that domain is NULL
- if it's a primary domain account. */
- if (!cygheap->pg.nss_prefix_auto ())
- fully_qualified_name = true;
- }
- else
- {
- /* No, fetch POSIX offset. */
- PDS_DOMAIN_TRUSTSW td = NULL;
-
- fully_qualified_name = true;
- for (ULONG idx = 0;
- (td = cygheap->dom.trusted_domain (idx));
- ++idx)
- if (!wcscasecmp (dom, td->NetbiosDomainName))
- {
- domain = td->DnsDomainName;
- posix_offset =
- fetch_posix_offset (td, &loc_ldap);
- break;
- }
-
- if (!domain)
- {
- debug_printf ("Unknown domain %W", dom);
- return NULL;
- }
- }
- }
- /* If the domain returned by LookupAccountSid is not our machine
- name, and if our machine is no domain member, we lose. We have
- nobody to ask for the POSIX offset. */
- else
- {
- debug_printf ("Unknown domain %W", dom);
- return NULL;
- }
- /* Generate uid/gid values. */
- if (uid == ILLEGAL_UID)
- uid = posix_offset + sid_sub_auth_rid (sid);
- if (!is_group () && acc_type == SidTypeUser)
- {
- /* Default primary group. If the sid is the current user, fetch
- the default group from the current user token, otherwise make
- the educated guess that the user is in group "Domain Users"
- or "None". */
- if (sid == cygheap->user.sid ())
- gid = posix_offset
- + sid_sub_auth_rid (cygheap->user.groups.pgsid);
- else
- gid = posix_offset + DOMAIN_GROUP_RID_USERS;
- }
-
- if (is_domain_account)
- {
- /* Use LDAP to fetch domain account infos. */
- if (cldap->open (NULL) != NO_ERROR)
- break;
- if (cldap->fetch_ad_account (sid, is_group (), domain))
- {
- if ((id_val = cldap->get_primary_gid ()) != ILLEGAL_GID)
- gid = posix_offset + id_val;
- if (!is_group ())
- {
- home = cygheap->pg.get_home (cldap, sid, dom, name,
- fully_qualified_name);
- shell = cygheap->pg.get_shell (cldap, dom, name,
- fully_qualified_name);
- gecos = cygheap->pg.get_gecos (cldap, dom, name,
- fully_qualified_name);
- }
- /* Check and, if necessary, add unix<->windows id mapping on
- the fly, unless we're called from getpwent. */
- if (!pldap)
- {
- id_val = cldap->get_unix_uid ();
- if (id_val != ILLEGAL_UID
- && cygheap->ugid_cache.get_uid (id_val)
- == ILLEGAL_UID)
- cygheap->ugid_cache.add_uid (id_val, uid);
- }
- }
- }
- /* Otherwise check account domain (local SAM).*/
- else
- {
- NET_API_STATUS nas;
- PUSER_INFO_3 ui;
- PLOCALGROUP_INFO_1 gi;
- char *pgrp = NULL;
- char *uxid = NULL;
-
- if (acc_type == SidTypeUser)
- {
- nas = NetUserGetInfo (NULL, name, 3, (PBYTE *) &ui);
- if (nas != NERR_Success)
- {
- debug_printf ("NetUserGetInfo(%W) %u", name, nas);
- break;
- }
- /* Logging in with a Microsoft Account, the user's primary
- group SID is the user's SID. Security sensitive tools
- expecting tight file permissions choke on that. We need
- an explicit primary group which is not identical to the
- user account. Unfortunately, while the default primary
- group of the account in SAM is still "None", "None" is not
- in the user token group list. So, what we do here is to
- use "Users" as a sane default primary group instead. */
- if (wincap.has_microsoft_accounts ())
- {
- struct cyg_USER_INFO_24 *ui24;
- nas = NetUserGetInfo (NULL, name, 24, (PBYTE *) &ui24);
- if (nas == NERR_Success)
- {
- if (ui24->usri24_internet_identity)
- gid = DOMAIN_ALIAS_RID_USERS;
- NetApiBufferFree (ui24);
- }
- }
- /* Fetch user attributes. */
- home = cygheap->pg.get_home (ui, sid, dom, name,
- fully_qualified_name);
- shell = cygheap->pg.get_shell (ui, dom, name,
- fully_qualified_name);
- gecos = cygheap->pg.get_gecos (ui, dom, name,
- fully_qualified_name);
- uxid = fetch_from_description (ui->usri3_comment,
- L"unix=\"", 6);
- pgrp = fetch_from_description (ui->usri3_comment,
- L"group=\"", 7);
- }
- else /* acc_type == SidTypeAlias */
- {
- nas = NetLocalGroupGetInfo (NULL, name, 1, (PBYTE *) &gi);
- if (nas != NERR_Success)
- {
- debug_printf ("NetLocalGroupGetInfo(%W) %u", name, nas);
- break;
- }
- /* Fetch unix gid from comment field. */
- uxid = fetch_from_description (gi->lgrpi1_comment,
- L"unix=\"", 6);
- }
-
- if (acc_type == SidTypeUser)
- NetApiBufferFree (ui);
- else
- NetApiBufferFree (gi);
- if (pgrp)
- {
- /* Set primary group from the "Description" field. Prepend
- account domain if this is a domain member machine or the
- db_prefix setting requires it. */
- char gname[2 * DNLEN + strlen (pgrp) + 1], *gp = gname;
- struct group *gr;
-
- if (cygheap->dom.member_machine ()
- || !cygheap->pg.nss_prefix_auto ())
- {
- gp = gname
- + sys_wcstombs (gname, sizeof gname,
- cygheap->dom.account_flat_name ());
- *gp++ = cygheap->pg.nss_separator ()[0];
- }
- stpcpy (gp, pgrp);
- if ((gr = internal_getgrnam (gname, cldap)))
- gid = gr->gr_gid;
- }
- char *e;
- if (!pldap && uxid && ((id_val = strtoul (uxid, &e, 10)), !*e))
- {
- if (acc_type == SidTypeUser)
- {
- if (cygheap->ugid_cache.get_uid (id_val) == ILLEGAL_UID)
- cygheap->ugid_cache.add_uid (id_val, uid);
- }
- else if (cygheap->ugid_cache.get_gid (id_val) == ILLEGAL_GID)
- cygheap->ugid_cache.add_gid (id_val, uid);
- }
- if (pgrp)
- free (pgrp);
- if (uxid)
- free (uxid);
- }
- break;
- case SidTypeWellKnownGroup:
- fully_qualified_name = (cygheap->pg.nss_prefix_always ()
- /* NT SERVICE Account */
- || (sid_id_auth (sid) == 5 /* SECURITY_NT_AUTHORITY */
- && sid_sub_auth (sid, 0) == SECURITY_SERVICE_ID_BASE_RID)
- /* Microsoft Account */
- || sid_id_auth (sid) == 11);
-#ifdef INTERIX_COMPATIBLE
- if (sid_id_auth (sid) == 5 /* SECURITY_NT_AUTHORITY */
- && sid_sub_auth_count (sid) > 1)
- {
- uid = 0x1000 * sid_sub_auth (sid, 0)
- + (sid_sub_auth_rid (sid) & 0xffff);
- fully_qualified_name = true;
- }
- else
- uid = 0x10000 + 0x100 * sid_id_auth (sid)
- + (sid_sub_auth_rid (sid) & 0xff);
-#else
- if (sid_id_auth (sid) == 15 /* SECURITY_APP_PACKAGE_AUTHORITY */)
- uid = 0x10000 + 0x100 * sid_id_auth (sid)
- + 0x10 * sid_sub_auth (sid, 0)
- + (sid_sub_auth_rid (sid) & 0xf);
- else if (sid_id_auth (sid) != 5 /* SECURITY_NT_AUTHORITY */)
- uid = 0x10000 + 0x100 * sid_id_auth (sid)
- + (sid_sub_auth_rid (sid) & 0xff);
- else if (sid_sub_auth (sid, 0) < SECURITY_PACKAGE_BASE_RID
- || sid_sub_auth (sid, 0) > SECURITY_MAX_BASE_RID)
- uid = sid_sub_auth_rid (sid) & 0x7ff;
- else
- {
- uid = 0x1000 * sid_sub_auth (sid, 0)
- + (sid_sub_auth_rid (sid) & 0xffff);
- }
-#endif
- /* Special case for "NULL SID", S-1-0-0 and "Everyone", S-1-1-0.
- Never return "NULL SID" or Everyone as user or group. */
- if (uid == 0x10000 || uid == 0x10100)
- return NULL;
- break;
- case SidTypeLabel:
- uid = 0x60000 + sid_sub_auth_rid (sid);
- fully_qualified_name = cygheap->pg.nss_prefix_always ();
- break;
- default:
- return NULL;
- }
- }
- else if (sid_id_auth (sid) == 5 /* SECURITY_NT_AUTHORITY */
- && sid_sub_auth (sid, 0) == SECURITY_LOGON_IDS_RID)
- {
- /* Logon ID. Mine or other? */
- get_logon_sid ();
- if (PSID (logon_sid) == NO_SID)
- return NULL;
- if (RtlEqualSid (sid, logon_sid))
- {
- uid = 0xfff;
- wcpcpy (name = namebuf, L"CurrentSession");
- }
- else
- {
- uid = 0xffe;
- wcpcpy (name = namebuf, L"OtherSession");
- }
- acc_type = SidTypeUnknown;
- }
- else if (sid_id_auth (sid) == 18)
- {
- /* Authentication assertion SIDs.
-
- Available when using a 2012R2 DC, but not supported by
- LookupAccountXXX on pre Windows 8/2012 machines */
- uid = 0x11200 + sid_sub_auth_rid (sid);
- wcpcpy (name = namebuf, sid_sub_auth_rid (sid) == 1
- ? (PWCHAR) L"Authentication authority asserted identity"
- : (PWCHAR) L"Service asserted identity");
- fully_qualified_name = false;
- acc_type = SidTypeUnknown;
- }
- else if (sid_id_auth (sid) == 22)
- {
- /* Samba UNIX Users/Groups
-
- This *might* collide with a posix_offset of some trusted domain.
- It's just very unlikely. */
- uid = MAP_UNIX_TO_CYGWIN_ID (sid_sub_auth_rid (sid));
- /* Unfortunately we have no access to the file server from here,
- so we can't generate correct user names. */
- p = wcpcpy (dom, L"Unix_");
- wcpcpy (p, sid_sub_auth (sid, 0) == 1 ? L"User" : L"Group");
- __small_swprintf (name = namebuf, L"%d", uid & UNIX_POSIX_MASK);
- fully_qualified_name = true;
- acc_type = SidTypeUnknown;
- }
- else
- {
- if (cygheap->dom.member_machine ()
- && sid_id_auth (sid) == 5 /* SECURITY_NT_AUTHORITY */
- && sid_sub_auth (sid, 0) == SECURITY_NT_NON_UNIQUE)
- {
- /* Check if we know the domain. If so, create a passwd/group
- entry with domain prefix and RID as username. */
- PDS_DOMAIN_TRUSTSW td = NULL;
-
- sid_sub_auth_count (sid) = sid_sub_auth_count (sid) - 1;
- if (RtlEqualSid (sid, cygheap->dom.primary_sid ()))
- {
- domain = cygheap->dom.primary_flat_name ();
- posix_offset = PRIMARY_POSIX_OFFSET;
- }
- else
- for (ULONG idx = 0; (td = cygheap->dom.trusted_domain (idx)); ++idx)
- if (td->DomainSid && RtlEqualSid (sid, td->DomainSid))
- {
- domain = td->NetbiosDomainName;
- posix_offset = fetch_posix_offset (td, &loc_ldap);
- break;
- }
- }
- if (domain)
- {
- sid_sub_auth_count (sid) = sid_sub_auth_count (sid) + 1;
- wcscpy (dom, domain);
- __small_swprintf (name = namebuf, L"%W(%u)",
- is_group () ? L"Group" : L"User",
- sid_sub_auth_rid (sid));
- uid = posix_offset + sid_sub_auth_rid (sid);
- }
- else
- {
- wcpcpy (dom, L"Unknown");
- wcpcpy (name = namebuf, is_group () ? L"Group" : L"User");
- }
- fully_qualified_name = true;
- acc_type = SidTypeUnknown;
- }
-
- tmp_pathbuf tp;
- char *linebuf = tp.c_get ();
- char *line = NULL;
-
- WCHAR posix_name[UNLEN + 1 + DNLEN + 1];
- p = posix_name;
- if (gid == ILLEGAL_GID)
- gid = uid;
- if (fully_qualified_name)
- p = wcpcpy (wcpcpy (p, dom), cygheap->pg.nss_separator ());
- wcpcpy (p, name);
-
- if (is_group ())
- __small_sprintf (linebuf, "%W:%s:%u:",
- posix_name, sid.string ((char *) sidstr), uid);
- /* For non-users, create a passwd entry which doesn't allow interactive
- logon. Unless it's the SYSTEM account. This conveniently allows to
- logon interactively as SYSTEM for debugging purposes. */
- else if (acc_type != SidTypeUser && sid != well_known_system_sid)
- __small_sprintf (linebuf, "%W:*:%u:%u:U-%W\\%W,%s:/:/sbin/nologin",
- posix_name, uid, gid,
- dom, name,
- sid.string ((char *) sidstr));
- else
- __small_sprintf (linebuf, "%W:*:%u:%u:%s%sU-%W\\%W,%s:%s%W:%s",
- posix_name, uid, gid,
- gecos ?: "", gecos ? "," : "",
- dom, name,
- sid.string ((char *) sidstr),
- home ?: "/home/", home ? L"" : name,
- shell ?: "/bin/bash");
- if (gecos)
- free (gecos);
- if (home)
- free (home);
- if (shell)
- free (shell);
- line = cstrdup (linebuf);
- debug_printf ("line: <%s>", line);
- return line;
-}
-
-client_request_pwdgrp::client_request_pwdgrp (fetch_user_arg_t &arg, bool group)
- : client_request (CYGSERVER_REQUEST_PWDGRP, &_parameters, sizeof (_parameters))
-{
- size_t len = 0;
- char *p;
-
- _parameters.in.group = group;
- _parameters.in.type = arg.type;
- switch (arg.type)
- {
- case SID_arg:
- RtlCopySid (sizeof (DBGSID), (PSID) &_parameters.in.arg.sid, *arg.sid);
- len = RtlLengthSid (*arg.sid);
- break;
- case NAME_arg:
- p = stpcpy (_parameters.in.arg.name, arg.name);
- len = p - _parameters.in.arg.name + 1;
- break;
- case ID_arg:
- _parameters.in.arg.id = arg.id;
- len = sizeof (uint32_t);
- }
- msglen (__builtin_offsetof (struct _pwdgrp_param_t::_pwdgrp_in_t, arg) + len);
-}
-
-char *
-pwdgrp::fetch_account_from_cygserver (fetch_user_arg_t &arg)
-{
- client_request_pwdgrp request (arg, is_group ());
- if (request.make_request () == -1 || request.error_code ())
- {
- /* Cygserver not running? Don't try again. This will automatically
- avoid an endless loop in cygserver itself. */
- if (request.error_code () == ENOSYS)
- cygheap->pg.nss_disable_cygserver_caching ();
- return NULL;
- }
- if (!request.line ())
- return NULL;
- return cstrdup (request.line ());
-}
-
-void *
-pwdgrp::add_account_from_cygserver (cygpsid &sid)
-{
- /* No, Everyone is no group in terms of POSIX. */
- if (sid_id_auth (sid) == 1 /* SECURITY_WORLD_SID_AUTHORITY */
- && sid_sub_auth (sid, 0) == SECURITY_WORLD_RID)
- return NULL;
- fetch_user_arg_t arg;
- arg.type = SID_arg;
- arg.sid = &sid;
- char *line = fetch_account_from_cygserver (arg);
- return add_account_post_fetch (line, true);
-}
-
-void *
-pwdgrp::add_account_from_cygserver (const char *name)
-{
- fetch_user_arg_t arg;
- arg.type = NAME_arg;
- arg.name = name;
- char *line = fetch_account_from_cygserver (arg);
- return add_account_post_fetch (line, true);
-}
-
-void *
-pwdgrp::add_account_from_cygserver (uint32_t id)
-{
- fetch_user_arg_t arg;
- arg.type = ID_arg;
- arg.id = id;
- char *line = fetch_account_from_cygserver (arg);
- return add_account_post_fetch (line, true);
-}
diff --git a/winsup/cygwin/uname.cc b/winsup/cygwin/uname.cc
deleted file mode 100644
index b586e6374..000000000
--- a/winsup/cygwin/uname.cc
+++ /dev/null
@@ -1,98 +0,0 @@
-/* uname.cc
-
- Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
- 2006, 2007, 2008, 2013, 2014 Red Hat, Inc.
- Written by Steve Chamberlain of Cygnus Support, sac@cygnus.com
- Rewritten by Geoffrey Noer of Cygnus Solutions, noer@cygnus.com
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include <sys/utsname.h>
-#include "cygwin_version.h"
-#include "cygtls.h"
-
-/* uname: POSIX 4.4.1.1 */
-extern "C" int
-uname (struct utsname *name)
-{
- SYSTEM_INFO sysinfo;
-
- __try
- {
- char *snp = strstr (cygwin_version.dll_build_date, "SNP");
-
- memset (name, 0, sizeof (*name));
- __small_sprintf (name->sysname, "CYGWIN_%s", wincap.osname ());
-
- /* Add a hint to the sysname, that we're running under WOW64. This might
- give an early clue if somebody encounters problems. */
- if (wincap.is_wow64 ())
- strncat (name->sysname, "-WOW64",
- sizeof name->sysname - strlen (name->sysname) - 1);
-
- GetSystemInfo (&sysinfo);
-
- /* Computer name */
- cygwin_gethostname (name->nodename, sizeof (name->nodename) - 1);
-
- /* Cygwin dll release */
- __small_sprintf (name->release, "%d.%d.%d%s(%d.%d/%d/%d)",
- cygwin_version.dll_major / 1000,
- cygwin_version.dll_major % 1000,
- cygwin_version.dll_minor,
- snp ? "s" : "",
- cygwin_version.api_major,
- cygwin_version.api_minor,
- cygwin_version.shared_data,
- cygwin_version.mount_registry);
-
- /* Cygwin "version" aka build date */
- strcpy (name->version, cygwin_version.dll_build_date);
- if (snp)
- name->version[snp - cygwin_version.dll_build_date] = '\0';
-
- /* CPU type */
- switch (sysinfo.wProcessorArchitecture)
- {
- case PROCESSOR_ARCHITECTURE_INTEL:
- unsigned int ptype;
- if (sysinfo.wProcessorLevel < 3) /* Shouldn't happen. */
- ptype = 3;
- else if (sysinfo.wProcessorLevel > 9) /* P4 */
- ptype = 6;
- else
- ptype = sysinfo.wProcessorLevel;
- __small_sprintf (name->machine, "i%d86", ptype);
- break;
- case PROCESSOR_ARCHITECTURE_IA64:
- strcpy (name->machine, "ia64");
- break;
- case PROCESSOR_ARCHITECTURE_AMD64:
- strcpy (name->machine, "x86_64");
- break;
- case PROCESSOR_ARCHITECTURE_IA32_ON_WIN64:
- strcpy (name->machine, "ia32-win64");
- break;
- case PROCESSOR_ARCHITECTURE_ALPHA:
- strcpy (name->machine, "alpha");
- break;
- case PROCESSOR_ARCHITECTURE_MIPS:
- strcpy (name->machine, "mips");
- break;
- default:
- strcpy (name->machine, "unknown");
- break;
- }
- }
- __except (EFAULT)
- {
- return -1;
- }
- __endtry
- return 0;
-}
diff --git a/winsup/cygwin/update-copyright b/winsup/cygwin/update-copyright
deleted file mode 100755
index ad5eb2310..000000000
--- a/winsup/cygwin/update-copyright
+++ /dev/null
@@ -1,89 +0,0 @@
-#!/usr/bin/perl
-use strict;
-use File::stat;
-sub update_maybe($%);
-
-my $year = (split ' ', ~~localtime)[4];
-my %dates = ();
-my %files = ();
-my $cvs;
-open $cvs, '-|', '/usr/bin/cvs', 'update', @ARGV or die "cvs update failed - $!\n";
-while (<$cvs>) {
- /^M (.*)$/o and $files{$1}{$year} = 1;
-}
-close $cvs;
-
-open $cvs, '-|', '/usr/bin/cvs', 'log', '-N', '-b', @ARGV or die "cvs log failed - $!\n";
-my $file;
-while (<$cvs>) {
- if (/^Working file: (.*)$/o) {
- $file = $1;
- } elsif (/^date: (\d+)/o) {
- $files{$file}{$1} = 1;
- } elsif (/^=+$/o) {
- my $rec = delete $files{$file};
- update_maybe($file, %{$rec}) if -e $file;
- }
-}
-close $cvs;
-
-exit 0;
-
-sub addwrap($$) {
- my $indent = shift;
- my $copyright = shift;
- $copyright =~ s/Red Hat\n/Red Hat, Inc.\n/so;
- return $copyright if length($copyright) <= 80;
- my @lines;
- while (length($copyright) > 80) {
- my $i = index($copyright, ' ', 80 - 6);
- push @lines, substr($copyright, 0, $i) . "\n";
- substr($copyright, 0, $i + 1) = $indent;
- }
- push @lines, $copyright unless $copyright =~ /^\s*$/o;
- return join('', @lines);
-}
-
-sub update_maybe($%) {
- my $f = shift;
- local @ARGV = $f;
- my %dates = @_;
- my @file = ();
- my $copyright = '';
- my $modified = 0;
- while (<>) {
- if ($copyright) {
- push @file, $_;
- } elsif (/^(?:dnl\s|[#\s]*)Copyright/o) {
- $copyright = $_;
- $copyright .= scalar <> while $copyright =~ /,\s*$/o;
- if ($copyright !~ /Red Hat, Inc\.\n/o) {
- push @file, $copyright;
- next;
- }
- for my $date ($copyright =~ /(\d+)/g) {
- $dates{$date} = 1;
- }
- my $indent = ($copyright =~ /\A(dnl\s+|[#\s]*)/o)[0];
- my $newcopyright = addwrap $indent,
- $indent . 'Copyright ' .
- (join ', ', sort {$a <=> $b} sort keys %dates) .
- " Red Hat, Inc.\n";
- push @file, $newcopyright;
- $modified = $newcopyright ne $copyright;
- } else {
- push @file, $_;
- }
- }
- if ($modified) {
- print "updating $f\n";
- my $fcopy = "$f.copyright";
- rename $f, $fcopy or die "$0: couldn't rename $f -> $fcopy - $!\n";
- my $st = stat($fcopy);
- open my $fd, '>', $f;
- chmod $st->mode & 07777, $f;
- print $fd @file;
- close $fd;
- }
-}
-
diff --git a/winsup/cygwin/wait.cc b/winsup/cygwin/wait.cc
deleted file mode 100644
index fca5a3c01..000000000
--- a/winsup/cygwin/wait.cc
+++ /dev/null
@@ -1,116 +0,0 @@
-/* wait.cc: Posix wait routines.
-
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008,
- 2009, 2011, 2012 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include <sys/wait.h>
-#include "sigproc.h"
-#include "thread.h"
-#include "cygtls.h"
-#include "cygwait.h"
-
-/* This is called _wait and not wait because the real wait is defined
- in libc/syscalls/syswait.c. It calls us. */
-
-extern "C" pid_t
-wait (int *status)
-{
- return wait4 (-1, status, 0, NULL);
-}
-
-extern "C" pid_t
-waitpid (pid_t intpid, int *status, int options)
-{
- return wait4 (intpid, status, options, NULL);
-}
-
-extern "C" pid_t
-wait3 (int *status, int options, struct rusage *r)
-{
- return wait4 (-1, status, options, r);
-}
-
-/* Wait for any child to complete.
- * Note: this is not thread safe. Use of wait in multiple threads will
- * not work correctly.
- */
-
-extern "C" pid_t
-wait4 (int intpid, int *status, int options, struct rusage *r)
-{
- int res;
- HANDLE waitfor;
- waitq *w = &_my_tls.wq;
-
- pthread_testcancel ();
-
- while (1)
- {
- sig_dispatch_pending ();
- if (options & ~(WNOHANG | WUNTRACED | WCONTINUED))
- {
- set_errno (EINVAL);
- res = -1;
- break;
- }
-
- if (r)
- memset (r, 0, sizeof (*r));
-
- w->pid = intpid;
- w->options = options;
- w->rusage = r;
- sigproc_printf ("calling proc_subproc, pid %d, options %d",
- w->pid, w->options);
- if (!proc_subproc (PROC_WAIT, (uintptr_t) w))
- {
- set_errno (ENOSYS);
- paranoid_printf ("proc_subproc returned 0");
- res = -1;
- break;
- }
-
- if ((waitfor = w->ev) == NULL)
- goto nochildren;
-
- res = cygwait (waitfor, cw_infinite, cw_cancel | cw_cancel_self);
-
- sigproc_printf ("%d = cygwait (...)", res);
-
- if (w->ev == NULL)
- {
- nochildren:
- /* found no children */
- set_errno (ECHILD);
- res = -1;
- break;
- }
-
- if (w->status == -1)
- {
- if (_my_tls.call_signal_handler ())
- continue;
- set_sig_errno (EINTR);
- res = -1;
- }
- else if (res != WAIT_OBJECT_0)
- {
- set_errno (EINVAL);
- res = -1;
- }
- else if ((res = w->pid) != 0 && status)
- *status = w->status;
- break;
- }
-
- syscall_printf ("%R = wait4(%d, %y, %d, %p)", res, intpid, w->status, options, r);
- w->status = -1;
- return res;
-}
diff --git a/winsup/cygwin/wchar.h b/winsup/cygwin/wchar.h
deleted file mode 100644
index 548ad0f86..000000000
--- a/winsup/cygwin/wchar.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/* wchar.h: Extra wchar defs
-
- Copyright 2007, 2009, 2010, 2013 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _CYGWIN_WCHAR_H
-#define _CYGWIN_WCHAR_H
-
-#include_next <wchar.h>
-
-#define ENCODING_LEN 31
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef int mbtowc_f (struct _reent *, wchar_t *, const char *, size_t,
- const char *, mbstate_t *);
-typedef mbtowc_f *mbtowc_p;
-
-extern mbtowc_p __mbtowc;
-extern mbtowc_f __ascii_mbtowc;
-extern mbtowc_f __utf8_mbtowc;
-extern mbtowc_f __iso_mbtowc;
-extern mbtowc_f __cp_mbtowc;
-extern mbtowc_f __sjis_mbtowc;
-extern mbtowc_f __eucjp_mbtowc;
-extern mbtowc_f __gbk_mbtowc;
-extern mbtowc_f __kr_mbtowc;
-extern mbtowc_f __big5_mbtowc;
-
-typedef int wctomb_f (struct _reent *, char *, wchar_t, const char *,
- mbstate_t *);
-typedef wctomb_f *wctomb_p;
-
-extern wctomb_p __wctomb;
-extern wctomb_f __ascii_wctomb;
-extern wctomb_f __utf8_wctomb;
-
-extern char *__locale_charset ();
-
-#ifdef __cplusplus
-}
-#endif
-
-#ifdef __INSIDE_CYGWIN__
-#ifdef __cplusplus
-size_t __reg3 sys_cp_wcstombs (wctomb_p, const char *, char *, size_t,
- const wchar_t *, size_t = (size_t) -1);
-size_t __reg3 sys_wcstombs (char *dst, size_t len, const wchar_t * src,
- size_t nwc = (size_t) -1);
-size_t __reg3 sys_wcstombs_alloc (char **, int, const wchar_t *,
- size_t = (size_t) -1);
-
-size_t __reg3 sys_cp_mbstowcs (mbtowc_p, const char *, wchar_t *, size_t,
- const char *, size_t = (size_t) -1);
-size_t __reg3 sys_mbstowcs (wchar_t * dst, size_t dlen, const char *src,
- size_t nms = (size_t) -1);
-size_t __reg3 sys_mbstowcs_alloc (wchar_t **, int, const char *,
- size_t = (size_t) -1);
-#endif /* __cplusplus */
-#endif /* __INSIDE_CYGWIN__ */
-
-#endif /* _CYGWIN_WCHAR_H */
diff --git a/winsup/cygwin/winbase.h b/winsup/cygwin/winbase.h
deleted file mode 100644
index 666f74a2d..000000000
--- a/winsup/cygwin/winbase.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/* winbase.h
-
- Copyright 2001, 2002, 2003, 2004, 2005, 2008, 2009, 2012 Red Hat, Inc.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include_next "winbase.h"
-
-#ifndef _WINBASE2_H
-#define _WINBASE2_H
-
-extern __inline__ LONG
-ilockcmpexch (volatile LONG *t, LONG v, LONG c)
-{
- return
- ({
- register LONG ret __asm ("%eax");
- __asm __volatile ("lock cmpxchgl %2, %1"
- : "=a" (ret), "=m" (*t)
- : "r" (v), "m" (*t), "0" (c)
- : "memory");
- ret;
- });
-}
-
-#undef InterlockedCompareExchange
-#define InterlockedCompareExchange ilockcmpexch
-#undef InterlockedCompareExchangePointer
-
-#ifdef __x86_64__
-extern __inline__ LONGLONG
-ilockcmpexch64 (volatile LONGLONG *t, LONGLONG v, LONGLONG c)
-{
- return
- ({
- register LONGLONG ret __asm ("%rax");
- __asm __volatile ("lock cmpxchgq %2, %1"
- : "=a" (ret), "=m" (*t)
- : "r" (v), "m" (*t), "0" (c)
- : "memory");
- ret;
- });
-}
-
-#define InterlockedCompareExchange64 ilockcmpexch64
-#define InterlockedCompareExchangePointer(d,e,c) \
- (PVOID)InterlockedCompareExchange64((LONGLONG volatile *)(d),(LONGLONG)(e),(LONGLONG)(c))
-
-#else
-
-#define InterlockedCompareExchangePointer(d,e,c) \
- (PVOID)InterlockedCompareExchange((LONG volatile *)(d),(LONG)(e),(LONG)(c))
-
-#endif /* !__x86_64 */
-#endif /*_WINBASE2_H*/
diff --git a/winsup/cygwin/wincap.cc b/winsup/cygwin/wincap.cc
deleted file mode 100644
index 279754a9c..000000000
--- a/winsup/cygwin/wincap.cc
+++ /dev/null
@@ -1,258 +0,0 @@
-/* wincap.cc -- figure out on which OS we're running. Set the
- capability class to the appropriate values.
-
- Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
- 2012, 2013, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include "security.h"
-#include "ntdll.h"
-
-/* CV, 2008-10-23: All wincapc's have to be in the .cygwin_dll_common section,
- same as wincap itself. Otherwise the capability changes made in
- wincapc::init() are not propagated to any subsequently started process
- in the same session. I'm only writing this longish comment because I'm
- puzzled that this has never been noticed before... */
-
-wincaps wincap_xpsp2 __attribute__((section (".cygwin_dll_common"), shared)) = {
- max_sys_priv:SE_CREATE_GLOBAL_PRIVILEGE,
- is_server:false,
- has_mandatory_integrity_control:false,
- needs_count_in_si_lpres2:false,
- has_recycle_dot_bin:false,
- has_gaa_on_link_prefix:false,
- has_gaa_largeaddress_bug:false,
- supports_all_posix_ai_flags:false,
- has_restricted_stack_args:false,
- has_transactions:false,
- has_sendmsg:false,
- has_broken_udf:true,
- has_broken_alloc_console:false,
- has_always_all_codepages:false,
- has_localenames:false,
- has_fast_cwd:false,
- has_restricted_raw_disk_access:false,
- use_dont_resolve_hack:true,
- has_console_logon_sid:false,
- wow64_has_secondary_stack:false,
- has_program_compatibility_assistant:false,
- has_pipe_reject_remote_clients:false,
- terminate_thread_frees_stack:false,
- has_precise_system_time:false,
- has_microsoft_accounts:false,
-};
-
-wincaps wincap_2003 __attribute__((section (".cygwin_dll_common"), shared)) = {
- max_sys_priv:SE_CREATE_GLOBAL_PRIVILEGE,
- is_server:false,
- has_mandatory_integrity_control:false,
- needs_count_in_si_lpres2:false,
- has_recycle_dot_bin:false,
- has_gaa_on_link_prefix:false,
- has_gaa_largeaddress_bug:false,
- supports_all_posix_ai_flags:false,
- has_restricted_stack_args:true,
- has_transactions:false,
- has_sendmsg:false,
- has_broken_udf:true,
- has_broken_alloc_console:false,
- has_always_all_codepages:false,
- has_localenames:false,
- has_fast_cwd:false,
- has_restricted_raw_disk_access:false,
- use_dont_resolve_hack:true,
- has_console_logon_sid:false,
- wow64_has_secondary_stack:true,
- has_program_compatibility_assistant:false,
- has_pipe_reject_remote_clients:false,
- terminate_thread_frees_stack:false,
- has_precise_system_time:false,
- has_microsoft_accounts:false,
-};
-
-wincaps wincap_vista __attribute__((section (".cygwin_dll_common"), shared)) = {
- max_sys_priv:SE_CREATE_SYMBOLIC_LINK_PRIVILEGE,
- is_server:false,
- has_mandatory_integrity_control:true,
- needs_count_in_si_lpres2:true,
- has_recycle_dot_bin:true,
- has_gaa_on_link_prefix:true,
- has_gaa_largeaddress_bug:true,
- supports_all_posix_ai_flags:true,
- has_restricted_stack_args:false,
- has_transactions:true,
- has_sendmsg:true,
- has_broken_udf:false,
- has_broken_alloc_console:false,
- has_always_all_codepages:true,
- has_localenames:true,
- has_fast_cwd:true,
- has_restricted_raw_disk_access:true,
- use_dont_resolve_hack:false,
- has_console_logon_sid:false,
- wow64_has_secondary_stack:false,
- has_program_compatibility_assistant:true,
- has_pipe_reject_remote_clients:true,
- terminate_thread_frees_stack:true,
- has_precise_system_time:false,
- has_microsoft_accounts:false,
-};
-
-wincaps wincap_7 __attribute__((section (".cygwin_dll_common"), shared)) = {
- max_sys_priv:SE_CREATE_SYMBOLIC_LINK_PRIVILEGE,
- is_server:false,
- has_mandatory_integrity_control:true,
- needs_count_in_si_lpres2:false,
- has_recycle_dot_bin:true,
- has_gaa_on_link_prefix:true,
- has_gaa_largeaddress_bug:true,
- supports_all_posix_ai_flags:true,
- has_restricted_stack_args:false,
- has_transactions:true,
- has_sendmsg:true,
- has_broken_udf:false,
- has_broken_alloc_console:true,
- has_always_all_codepages:true,
- has_localenames:true,
- has_fast_cwd:true,
- has_restricted_raw_disk_access:true,
- use_dont_resolve_hack:false,
- has_console_logon_sid:true,
- wow64_has_secondary_stack:false,
- has_program_compatibility_assistant:true,
- has_pipe_reject_remote_clients:true,
- terminate_thread_frees_stack:true,
- has_precise_system_time:false,
- has_microsoft_accounts:false,
-};
-
-wincaps wincap_8 __attribute__((section (".cygwin_dll_common"), shared)) = {
- max_sys_priv:SE_CREATE_SYMBOLIC_LINK_PRIVILEGE,
- is_server:false,
- has_mandatory_integrity_control:true,
- needs_count_in_si_lpres2:false,
- has_recycle_dot_bin:true,
- has_gaa_on_link_prefix:true,
- has_gaa_largeaddress_bug:false,
- supports_all_posix_ai_flags:true,
- has_restricted_stack_args:false,
- has_transactions:true,
- has_sendmsg:true,
- has_broken_udf:false,
- has_broken_alloc_console:true,
- has_always_all_codepages:true,
- has_localenames:true,
- has_fast_cwd:true,
- has_restricted_raw_disk_access:true,
- use_dont_resolve_hack:false,
- has_console_logon_sid:true,
- wow64_has_secondary_stack:false,
- has_program_compatibility_assistant:true,
- has_pipe_reject_remote_clients:true,
- terminate_thread_frees_stack:true,
- has_precise_system_time:true,
- has_microsoft_accounts:true,
-};
-
-wincaps wincap_10 __attribute__((section (".cygwin_dll_common"), shared)) = {
- max_sys_priv:SE_CREATE_SYMBOLIC_LINK_PRIVILEGE,
- is_server:false,
- has_mandatory_integrity_control:true,
- needs_count_in_si_lpres2:false,
- has_recycle_dot_bin:true,
- has_gaa_on_link_prefix:true,
- has_gaa_largeaddress_bug:false,
- supports_all_posix_ai_flags:true,
- has_restricted_stack_args:false,
- has_transactions:true,
- has_sendmsg:true,
- has_broken_udf:false,
- has_broken_alloc_console:true,
- has_always_all_codepages:true,
- has_localenames:true,
- has_fast_cwd:true,
- has_restricted_raw_disk_access:true,
- use_dont_resolve_hack:false,
- has_console_logon_sid:true,
- wow64_has_secondary_stack:false,
- has_program_compatibility_assistant:true,
- has_pipe_reject_remote_clients:true,
- terminate_thread_frees_stack:true,
- has_precise_system_time:true,
- has_microsoft_accounts:true,
-};
-
-wincapc wincap __attribute__((section (".cygwin_dll_common"), shared));
-
-void
-wincapc::init ()
-{
- if (caps)
- return; // already initialized
-
- GetSystemInfo (&system_info);
- version.dwOSVersionInfoSize = sizeof (RTL_OSVERSIONINFOEXW);
- RtlGetVersion (&version);
-
- switch (version.dwMajorVersion)
- {
- case 5:
- switch (version.dwMinorVersion)
- {
- case 1:
- caps = &wincap_xpsp2;
- break;
-
- default:
- caps = &wincap_2003;
- }
- break;
- case 6:
- switch (version.dwMinorVersion)
- {
- case 0:
- caps = &wincap_vista;
- break;
- case 1:
- caps = &wincap_7;
- break;
- case 2:
- case 3:
- caps = &wincap_8;
- break;
- default:
- caps = &wincap_10;
- break;
- }
- break;
- case 10:
- default:
- caps = &wincap_10;
- break;
- }
-
- ((wincaps *)caps)->is_server = (version.wProductType != VER_NT_WORKSTATION);
-#ifdef __x86_64__
- wow64 = 0;
-#else
- if (NT_SUCCESS (NtQueryInformationProcess (NtCurrentProcess (),
- ProcessWow64Information,
- &wow64, sizeof wow64, NULL))
- && !wow64)
-#endif
- {
- ((wincaps *)caps)->needs_count_in_si_lpres2 = false;
- ((wincaps *)caps)->has_restricted_stack_args = false;
- ((wincaps *)caps)->wow64_has_secondary_stack = false;
- ((wincaps *)caps)->has_gaa_largeaddress_bug = false;
- }
-
- __small_sprintf (osnam, "NT-%d.%d", version.dwMajorVersion,
- version.dwMinorVersion);
-}
diff --git a/winsup/cygwin/wincap.h b/winsup/cygwin/wincap.h
deleted file mode 100644
index b41a2c625..000000000
--- a/winsup/cygwin/wincap.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/* wincap.h: Header for OS capability class.
-
- Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
- 2012, 2013, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _WINCAP_H
-#define _WINCAP_H
-
-struct wincaps
-{
- DWORD max_sys_priv;
- unsigned is_server : 1;
- unsigned has_mandatory_integrity_control : 1;
- unsigned needs_count_in_si_lpres2 : 1;
- unsigned has_recycle_dot_bin : 1;
- unsigned has_gaa_on_link_prefix : 1;
- unsigned has_gaa_largeaddress_bug : 1;
- unsigned supports_all_posix_ai_flags : 1;
- unsigned has_restricted_stack_args : 1;
- unsigned has_transactions : 1;
- unsigned has_sendmsg : 1;
- unsigned has_broken_udf : 1;
- unsigned has_broken_alloc_console : 1;
- unsigned has_always_all_codepages : 1;
- unsigned has_localenames : 1;
- unsigned has_fast_cwd : 1;
- unsigned has_restricted_raw_disk_access : 1;
- unsigned use_dont_resolve_hack : 1;
- unsigned has_console_logon_sid : 1;
- unsigned wow64_has_secondary_stack : 1;
- unsigned has_program_compatibility_assistant : 1;
- unsigned has_pipe_reject_remote_clients : 1;
- unsigned terminate_thread_frees_stack : 1;
- unsigned has_precise_system_time : 1;
- unsigned has_microsoft_accounts : 1;
-};
-
-class wincapc
-{
- SYSTEM_INFO system_info;
- RTL_OSVERSIONINFOEXW version;
- char osnam[40];
- ULONG_PTR wow64;
- void *caps;
-
-public:
- void init ();
-
- const DWORD cpu_count () const { return system_info.dwNumberOfProcessors; }
- /* The casts to size_t make sure that the returned value has the size of
- a pointer on any system. This is important when using them for bit
- mask operations, like in roundup2. */
- const size_t page_size () const { return (size_t) system_info.dwPageSize; }
- const size_t allocation_granularity () const
- { return (size_t) system_info.dwAllocationGranularity; }
- const char *osname () const { return osnam; }
- const bool is_wow64 () const { return !!wow64; }
-
-#define IMPLEMENT(cap) cap() const { return ((wincaps *) this->caps)->cap; }
-
- DWORD IMPLEMENT (max_sys_priv)
- bool IMPLEMENT (is_server)
- bool IMPLEMENT (has_mandatory_integrity_control)
- bool IMPLEMENT (needs_count_in_si_lpres2)
- bool IMPLEMENT (has_recycle_dot_bin)
- bool IMPLEMENT (has_gaa_on_link_prefix)
- bool IMPLEMENT (has_gaa_largeaddress_bug)
- bool IMPLEMENT (supports_all_posix_ai_flags)
- bool IMPLEMENT (has_restricted_stack_args)
- bool IMPLEMENT (has_transactions)
- bool IMPLEMENT (has_sendmsg)
- bool IMPLEMENT (has_broken_udf)
- bool IMPLEMENT (has_broken_alloc_console)
- bool IMPLEMENT (has_always_all_codepages)
- bool IMPLEMENT (has_localenames)
- bool IMPLEMENT (has_fast_cwd)
- bool IMPLEMENT (has_restricted_raw_disk_access)
- bool IMPLEMENT (use_dont_resolve_hack)
- bool IMPLEMENT (has_console_logon_sid)
- bool IMPLEMENT (wow64_has_secondary_stack)
- bool IMPLEMENT (has_program_compatibility_assistant)
- bool IMPLEMENT (has_pipe_reject_remote_clients)
- bool IMPLEMENT (terminate_thread_frees_stack)
- bool IMPLEMENT (has_precise_system_time)
- bool IMPLEMENT (has_microsoft_accounts)
-
-#undef IMPLEMENT
-};
-
-extern wincapc wincap;
-
-#endif /* _WINCAP_H */
diff --git a/winsup/cygwin/window.cc b/winsup/cygwin/window.cc
deleted file mode 100644
index c6a6f9e28..000000000
--- a/winsup/cygwin/window.cc
+++ /dev/null
@@ -1,133 +0,0 @@
-/* window.cc: hidden windows for signals/itimer support
-
- Copyright 1997, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008, 2010, 2011
- Red Hat, Inc.
-
- Written by Sergey Okhapkin <sos@prospect.com.ru>
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include <sys/time.h>
-#define USE_SYS_TYPES_FD_SET
-#include <winsock2.h>
-#include "perprocess.h"
-#include "cygtls.h"
-#include "sync.h"
-#include "wininfo.h"
-
-wininfo NO_COPY winmsg;
-
-muto NO_COPY wininfo::_lock;
-
-int __reg3
-wininfo::process (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
-{
-#ifndef NOSTRACE
- strace.wm (uMsg, wParam, lParam);
-#endif
- switch (uMsg)
- {
- case WM_PAINT:
- return 0;
- case WM_DESTROY:
- PostQuitMessage (0);
- return 0;
- case WM_ASYNCIO:
- if (WSAGETSELECTEVENT (lParam) == FD_OOB)
- raise (SIGURG);
- else
- raise (SIGIO);
- return 0;
- default:
- return DefWindowProcW (hwnd, uMsg, wParam, lParam);
- }
-}
-
-static LRESULT CALLBACK
-process_window_events (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
-{
- return winmsg.process (hwnd, uMsg, wParam, lParam);
-}
-
-/* Handle windows events. Inherits ownership of the wininfo lock */
-DWORD __reg1 WINAPI
-wininfo::winthread ()
-{
- MSG msg;
- WNDCLASSW wc;
- static NO_COPY WCHAR classname[] = L"CygwinWndClass";
-
- _lock.grab ();
- /* Register the window class for the main window. */
-
- wc.style = 0;
- wc.lpfnWndProc = (WNDPROC) process_window_events;
- wc.cbClsExtra = 0;
- wc.cbWndExtra = 0;
- wc.hInstance = user_data->hmodule;
- wc.hIcon = NULL;
- wc.hCursor = NULL;
- wc.hbrBackground = NULL;
- wc.lpszMenuName = NULL;
- wc.lpszClassName = classname;
-
- if (!RegisterClassW (&wc))
- api_fatal ("cannot register window class, %E");
-
- /* Create hidden window. */
- hwnd = CreateWindowExW (0, classname, classname, WS_POPUP, CW_USEDEFAULT,
- CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
- (HWND) NULL, (HMENU) NULL, user_data->hmodule,
- (LPVOID) NULL);
- if (!hwnd)
- api_fatal ("couldn't create window, %E");
- release ();
-
- int ret;
- while ((ret = (int) GetMessageW (&msg, hwnd, 0, 0)) > 0)
- DispatchMessageW (&msg);
-
- return 0;
-}
-
-static DWORD WINAPI
-winthread (VOID *arg)
-{
- return ((wininfo *) arg)->winthread ();
-}
-
-wininfo::operator
-HWND ()
-{
- if (hwnd)
- return hwnd;
-
- lock ();
- if (!hwnd)
- {
- _lock.upforgrabs ();
- cygthread *h = new cygthread (::winthread, this, "win");
- h->SetThreadPriority (THREAD_PRIORITY_HIGHEST);
- h->zap_h ();
- lock ();
- }
- release ();
- return hwnd;
-}
-
-void
-wininfo::lock ()
-{
- _lock.init ("wininfo_lock")->acquire ();
-}
-
-void
-wininfo::release ()
-{
- _lock.release ();
-}
diff --git a/winsup/cygwin/winf.cc b/winsup/cygwin/winf.cc
deleted file mode 100644
index 7935103a0..000000000
--- a/winsup/cygwin/winf.cc
+++ /dev/null
@@ -1,153 +0,0 @@
-/* winf.cc
-
- Copyright 2003, 2004, 2005, 2006, 2008, 2009, 2013, 2014 Red Hat, Inc.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "winsup.h"
-#include <stdlib.h>
-#include "cygerrno.h"
-#include "security.h"
-#include "path.h"
-#include "fhandler.h"
-#include "dtable.h"
-#include "cygheap.h"
-#include "tls_pbuf.h"
-#include "winf.h"
-#include "sys/cygwin.h"
-
-void
-linebuf::finish (bool cmdlenoverflow_ok)
-{
- if (!ix)
- add ("", 1);
- else
- {
- if (ix-- > MAXCYGWINCMDLEN && cmdlenoverflow_ok)
- ix = MAXCYGWINCMDLEN - 1;
- buf[ix] = '\0';
- }
-}
-
-void
-linebuf::add (const char *what, int len)
-{
- size_t newix = ix + len;
- if (newix >= alloced || !buf)
- {
- alloced += LINE_BUF_CHUNK + newix;
- buf = (char *) realloc (buf, alloced + 1);
- }
- memcpy (buf + ix, what, len);
- ix = newix;
- buf[ix] = '\0';
-}
-
-void
-linebuf::prepend (const char *what, int len)
-{
- int buflen;
- size_t newix;
- if ((newix = ix + len) >= alloced)
- {
- alloced += LINE_BUF_CHUNK + newix;
- buf = (char *) realloc (buf, alloced + 1);
- buf[ix] = '\0';
- }
- if ((buflen = strlen (buf)))
- memmove (buf + len, buf, buflen + 1);
- else
- buf[newix] = '\0';
- memcpy (buf, what, len);
- ix = newix;
-}
-
-bool
-linebuf::fromargv (av& newargv, const char *real_path, bool cmdlenoverflow_ok)
-{
- bool success = true;
- for (int i = 0; i < newargv.argc; i++)
- {
- char *p = NULL;
- const char *a;
-
- a = i ? newargv[i] : (char *) real_path;
- int len = strlen (a);
- if (len != 0 && !strpbrk (a, " \t\n\r\""))
- add (a, len);
- else
- {
- add ("\"", 1);
- /* Handle embedded special characters " and \.
- A " is always preceded by a \.
- A \ is not special unless it precedes a ". If it does,
- then all preceding \'s must be doubled to avoid having
- the Windows command line parser interpret the \ as quoting
- the ". This rule applies to a string of \'s before the end
- of the string, since cygwin/windows uses a " to delimit the
- argument. */
- for (; (p = strpbrk (a, "\"\\")); a = ++p)
- {
- add (a, p - a);
- /* Find length of string of backslashes */
- int n = strspn (p, "\\");
- if (!n)
- add ("\\\"", 2); /* No backslashes, so it must be a ".
- The " has to be protected with a backslash. */
- else
- {
- add (p, n); /* Add the run of backslashes */
- /* Need to double up all of the preceding
- backslashes if they precede a quote or EOS. */
- if (!p[n] || p[n] == '"')
- add (p, n);
- p += n - 1; /* Point to last backslash */
- }
- }
- if (*a)
- add (a);
- add ("\"", 1);
- }
- add (" ", 1);
- }
-
- finish (cmdlenoverflow_ok);
-
- if (ix >= MAXWINCMDLEN)
- {
- debug_printf ("command line too long (>32K), return E2BIG");
- set_errno (E2BIG);
- success = false;
- }
-
- return success;
-}
-
-int
-av::unshift (const char *what, int conv)
-{
- char **av;
- av = (char **) crealloc (argv, (argc + 2) * sizeof (char *));
- if (!av)
- return 0;
-
- argv = av;
- memmove (argv + 1, argv, (argc + 1) * sizeof (char *));
- tmp_pathbuf tp;
- char *buf = tp.c_get ();
- if (conv)
- {
- cygwin_conv_path (CCP_WIN_A_TO_POSIX | CCP_RELATIVE, what, buf,
- NT_MAX_PATH);
- char *p = strchr (buf, '\0') - 4;
- if (p > buf && ascii_strcasematch (p, ".exe"))
- *p = '\0';
- what = buf;
- }
- *argv = cstrdup1 (what);
- calloced++;
- argc++;
- return 1;
-}
diff --git a/winsup/cygwin/winf.h b/winsup/cygwin/winf.h
deleted file mode 100644
index ca7d2bdd9..000000000
--- a/winsup/cygwin/winf.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/* winf.h
-
- Copyright 2006, 2007, 2009, 2011, 2013 Red Hat, Inc.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#pragma once
-/* Hack for Cygwin processes. If the Windows command line length gets slightly
- bigger than this value, the stack position is suddenly moved up by 64K for
- no apparent reason, which results in subsequent forks failing. Since Cygwin
- processes get the full command line as argv array anyway, this only affects
- the maximum command line length of Cygwin applications which nonsensically
- have a WinMain instead of a main entry point or which use GetCommandLine. */
-#define MAXCYGWINCMDLEN 30000
-
-#define MAXWINCMDLEN 32767
-#define LINE_BUF_CHUNK (MAX_PATH * 2)
-
-class av
-{
- char **argv;
- int calloced;
- public:
- int argc;
- bool win16_exe;
- av (): argv (NULL) {}
- av (int ac_in, const char * const *av_in) : calloced (0), argc (ac_in), win16_exe (false)
- {
- argv = (char **) cmalloc_abort (HEAP_1_ARGV, (argc + 5) * sizeof (char *));
- memcpy (argv, av_in, (argc + 1) * sizeof (char *));
- }
- void *operator new (size_t, void *p) __attribute__ ((nothrow)) {return p;}
- ~av ()
- {
- if (argv)
- {
- for (int i = 0; i < calloced; i++)
- cfree (argv[i]);
- cfree (argv);
- }
- }
- int unshift (const char *what, int conv = 0) __reg2;
- operator char **() {return argv;}
- void all_calloced () {calloced = argc;}
- void replace0_maybe (const char *arg0)
- {
- /* Note: Assumes that argv array has not yet been "unshifted" */
- if (!calloced)
- {
- argv[0] = cstrdup1 (arg0);
- calloced = 1;
- }
- }
- void dup_all ()
- {
- for (int i = calloced; i < argc; i++)
- argv[i] = cstrdup1 (argv[i]);
- calloced = argc;
- }
- int setup (const char *, path_conv&, const char *, int, const char *const *,
- bool) __reg3;
-};
-
-class linebuf
-{
- size_t ix;
- char *buf;
- size_t alloced;
- public:
- linebuf () : ix (0), buf (NULL), alloced (0) {}
- ~linebuf () {if (buf) free (buf);}
- void __reg3 add (const char *, int);
- void add (const char *what) {add (what, strlen (what));}
- void prepend (const char *, int);
- void __reg2 finish (bool);
- bool __reg3 fromargv(av&, const char *, bool);;
- operator size_t () const { return ix + 1; }
- operator const char * () const { return buf; }
- operator wchar_t * ()
- {
- size_t n = ix + 1;
- /* Note that this malloc'ed buffer is not freed by the destructor.
- It is up to the caller to do (or not do) that. */
- wchar_t *wbuf = (wchar_t *) malloc (sizeof (wchar_t) * n);
- return wcs (wbuf, n);
- }
- wchar_t *wcs (wchar_t *wbuf) { return wcs (wbuf, ix + 1); }
- wchar_t *wcs (wchar_t *wbuf, size_t n)
- {
- if (n == 1)
- wbuf[0] = L'\0';
- else
- sys_mbstowcs (wbuf, n, buf);
- return wbuf;
- }
-};
diff --git a/winsup/cygwin/wininfo.h b/winsup/cygwin/wininfo.h
deleted file mode 100644
index 0835f8d2f..000000000
--- a/winsup/cygwin/wininfo.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/* wininfo.h: main Cygwin header file.
-
- Copyright 2004, 2005, 2006, 2013 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-class muto;
-class wininfo
-{
- HWND hwnd;
- static muto _lock;
-public:
- operator HWND ();
- int __reg3 process (HWND, UINT, WPARAM, LPARAM);
- void lock ();
- void release ();
- DWORD __reg1 WINAPI winthread ();
-};
-
-extern wininfo winmsg;
diff --git a/winsup/cygwin/winlean.h b/winsup/cygwin/winlean.h
deleted file mode 100644
index 329199a28..000000000
--- a/winsup/cygwin/winlean.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/* winlean.h - Standard "lean" windows include
-
- Copyright 2010, 2011, 2012, 2013, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef _WINLEAN_H
-#define _WINLEAN_H 1
-#define WIN32_LEAN_AND_MEAN 1
-
-/* The following macros have to be defined, otherwise the autoload mechanism
- in autoload.cc leads to "multiple definition" errors. The macros control
- the declarations of symbols in the Mingw64 w32api headers. If they are
- not defined, a DECLSPEC_IMPORT will be added to the symbol declarations.
- This leads to a definition of the symbols in the sources using the
- autoloaded symbols, which in turn clashes with the definition in the
- w32api library exporting the symbols. */
-#define _ADVAPI32_
-#define _DSGETDCAPI_
-#define _GDI32_
-#define _KERNEL32_
-#define _NORMALIZE_
-#define _OLE32_
-#define _SHELL32_
-#define _SPOOL32_
-#define _USER32_
-#define _USERENV_
-#define _WINMM_
-#define WINIMPM
-#define WINSOCK_API_LINKAGE
-
-/* Windows headers define a couple of annoyingly intrusive macros for the
- sole purpose of inline documentation. Since they are defined without
- respect for the namespace and not undef'ed anymore, they tend to collide
- with otherwise innocent definitions in the application. We check if they
- exist and if not, we undef them again after including the Windows headers. */
-#ifndef IN
-#define __undef_IN
-#endif
-#ifndef OUT
-#define __undef_OUT
-#endif
-#ifndef OPTIONAL
-#define __undef_OPTIONAL
-#endif
-#ifndef NOTHING
-#define __undef_NOTHING
-#endif
-#ifndef CRITICAL
-#define __undef_CRITICAL
-#endif
-
-#include <windows.h>
-#include <wincrypt.h>
-#include <lmcons.h>
-#include <ntdef.h>
-
-#ifdef __undef_IN
-#undef IN
-#endif
-#ifdef __undef_OUT
-#undef OUT
-#endif
-#ifdef __undef_OPTIONAL
-#undef OPTIONAL
-#endif
-#ifdef __undef_NOTHING
-#undef NOTHING
-#endif
-#ifdef __undef_CRITICAL
-#undef CRITICAL
-#endif
-
-/* So-called "Microsoft Account" SIDs (S-1-11-...) have a netbios domain name
- "MicrosoftAccounts". The new "Application Container SIDs" (S-1-15-...)
- have a netbios domain name "APPLICATION PACKAGE AUTHORITY"
-
- The problem is, DNLEN is 15, but these domain names have a length of 16
- resp. 29 chars :-P So we override DNLEN here to be 31, so that calls
- to LookupAccountSid/Name don't fail if the buffer is based on DNLEN.
- Hope that's enough for a while... */
-#undef DNLEN
-#define DNLEN 31
-
-/* When Terminal Services are installed, the GetWindowsDirectory function
- does not return the system installation dir, but a user specific directory
- instead. That's not what we have in mind when calling GetWindowsDirectory
- from within Cygwin. So we redefine GetWindowsDirectory to something
- invalid here to avoid that it's called accidentally in Cygwin. Don't
- use this function. Use GetSystemWindowsDirectoryW. */
-#define GetWindowsDirectoryW dont_use_GetWindowsDirectory
-#define GetWindowsDirectoryA dont_use_GetWindowsDirectory
-#endif /*_WINLEAN_H*/
diff --git a/winsup/cygwin/winsup.h b/winsup/cygwin/winsup.h
deleted file mode 100644
index 2be96f8ef..000000000
--- a/winsup/cygwin/winsup.h
+++ /dev/null
@@ -1,318 +0,0 @@
-/* winsup.h: main Cygwin header file.
-
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include "config.h"
-
-#define __INSIDE_CYGWIN__
-
-#define NO_COPY_RO __attribute__((nocommon)) __attribute__((section(".rdata_cygwin_nocopy")))
-#define NO_COPY __attribute__((nocommon)) __attribute__((section(".data_cygwin_nocopy")))
-#define NO_COPY_INIT __attribute__((section(".data_cygwin_nocopy")))
-
-#define EXPORT_ALIAS(sym,symalias) extern "C" __typeof (sym) symalias __attribute__ ((alias(#sym)));
-
-/* Fun, fun, fun. On Mingw64, WINVER is set according to the value of
- _WIN32_WINNT, on Mingw32 it's exactly the opposite... */
-#define _WIN32_WINNT 0x0602
-#define WINVER 0x0602
-
-#define _NO_W32_PSEUDO_MODIFIERS
-
-/* Newlib's guarding functions more diligently based on their origin, starting
- since 2013. To be sure to get everything and the kitchen sink, we have to
- define _GNU_SOURCE. */
-#define _GNU_SOURCE 1
-
-#include <sys/types.h>
-#include <sys/strace.h>
-
-/* Declarations for functions used in C and C++ code. */
-#ifdef __cplusplus
-extern "C" {
-#endif
-uid_t getuid32 ();
-uid_t geteuid32 ();
-int seteuid32 (uid_t);
-gid_t getegid32 (void);
-struct passwd *getpwuid32 (uid_t);
-struct passwd *getpwnam (const char *);
-struct __sFILE64 *fopen64 (const char *, const char *);
-struct hostent *cygwin_gethostbyname (const char *name);
-/* Don't enforce definition of in_addr_t. */
-uint32_t cygwin_inet_addr (const char *cp);
-int fcntl64 (int fd, int cmd, ...);
-#ifdef __cplusplus
-}
-#endif
-
-/* Note that MAX_PATH is defined in the windows headers */
-/* There is also PATH_MAX and MAXPATHLEN.
- PATH_MAX is from Posix and does include the trailing NUL.
- MAXPATHLEN is from Unix.
-
- Thou shalt *not* use CYG_MAX_PATH anymore. Use NT_MAX_PATH or
- dynamic allocation instead when accessing real files. Use
- MAX_PATH in case you need a convenient small buffer when creating
- names for synchronization objects or named pipes. */
-#define CYG_MAX_PATH (MAX_PATH)
-
-/* There's no define for the maximum path length the NT kernel can handle.
- That's why we define our own to use in path length test and for path
- buffer sizes. As MAX_PATH and PATH_MAX, this is defined including the
- trailing 0. Internal buffers and internal path routines should use
- NT_MAX_PATH. PATH_MAX as defined in limits.h is the maximum length of
- application provided path strings we handle. */
-#define NT_MAX_PATH 32768
-
-/* This definition allows to define wide char strings using macros as
- parameters. See the definition of __CONCAT in newlib's sys/cdefs.h
- and accompanying comment. */
-#define __WIDE(a) L ## a
-#define _WIDE(a) __WIDE(a)
-
-#include "winlean.h"
-
-#ifdef __cplusplus
-
-#include "wincap.h"
-#include "regparm.h"
-
-extern const unsigned char case_folded_lower[];
-#define cyg_tolower(c) ((char) case_folded_lower[(unsigned char)(c)])
-extern const unsigned char case_folded_upper[];
-#define cyg_toupper(c) ((char) case_folded_upper[(unsigned char)(c)])
-
-#ifndef MALLOC_DEBUG
-#define cfree newlib_cfree_dont_use
-#endif
-
-/* Used as type by sys_wcstombs_alloc and sys_mbstowcs_alloc. For a
- description see there. */
-#define HEAP_NOTHEAP -1
-
-/* Used to check if Cygwin DLL is dynamically loaded. */
-
-extern int cygserver_running;
-
-#define _MT_SAFE // DELETEME someday
-
-#define TITLESIZE 1024
-
-#include "debug.h"
-
-#include <wchar.h>
-
-/**************************** Convenience ******************************/
-
-/* Used to define status flag accessor methods */
-#define IMPLEMENT_STATUS_FLAG(type,flag) \
- type flag (type val) { return (type) (status.flag = (val)); } \
- type flag () const { return (type) status.flag; }
-
-/* Used when treating / and \ as equivalent. */
-#define iswdirsep(ch) \
- ({ \
- WCHAR __c = (ch); \
- ((__c) == L'/' || (__c) == L'\\'); \
- })
-
-#define isdirsep(ch) \
- ({ \
- char __c = (ch); \
- ((__c) == '/' || (__c) == '\\'); \
- })
-
-/* Convert a signal to a signal mask */
-#define SIGTOMASK(sig) (1 << ((sig) - 1))
-
-#define set_api_fatal_return(n) do {extern int __api_fatal_exit_val; __api_fatal_exit_val = (n);} while (0)
-
-#undef issep
-#define issep(ch) (strchr (" \t\n\r", (ch)) != NULL)
-
-/* Every path beginning with / or \, as well as every path being X:
- or starting with X:/ or X:\ */
-#define isabspath_u(p) \
- ((p)->Length && \
- (iswdirsep ((p)->Buffer[0]) || \
- ((p)->Length > sizeof (WCHAR) && iswalpha ((p)->Buffer[0]) \
- && (p)->Buffer[1] == L':' && \
- ((p)->Length == 2 * sizeof (WCHAR) || iswdirsep ((p)->Buffer[2])))))
-
-#define iswabspath(p) \
- (iswdirsep (*(p)) || (iswalpha (*(p)) && (p)[1] == L':' && (!(p)[2] || iswdirsep ((p)[2]))))
-
-#define isabspath(p) \
- (isdirsep (*(p)) || (isalpha (*(p)) && (p)[1] == ':' && (!(p)[2] || isdirsep ((p)[2]))))
-
-/******************** Initialization/Termination **********************/
-
-class per_process;
-/* cygwin .dll initialization */
-void dll_crt0 (per_process *) __asm__ (_SYMSTR (dll_crt0__FP11per_process));
-extern "C" void __stdcall _dll_crt0 ();
-void dll_crt0_1 (void *);
-void dll_dllcrt0_1 (void *);
-
-/* dynamically loaded dll initialization */
-extern "C" PVOID dll_dllcrt0 (HMODULE, per_process *);
-
-extern "C" void _pei386_runtime_relocator (per_process *);
-
-#ifndef __x86_64__
-/* dynamically loaded dll initialization for non-cygwin apps */
-extern "C" int dll_noncygwin_dllcrt0 (HMODULE, per_process *);
-#endif /* !__x86_64__ */
-
-void __reg1 do_exit (int) __attribute__ ((noreturn));
-
-/* libstdc++ malloc operator wrapper support. */
-extern struct per_process_cxx_malloc default_cygwin_cxx_malloc;
-
-#define ILLEGAL_SEEK ((off_t)-1)
-
-/* Convert LARGE_INTEGER into long long */
-#define get_ll(pl) (((long long) (pl).HighPart << 32) | (pl).LowPart)
-
-/* various events */
-void events_init ();
-
-void __stdcall close_all_files (bool = false);
-
-/* debug_on_trap support. see exceptions.cc:try_to_debug() */
-extern "C" void error_start_init (const char*);
-extern "C" int try_to_debug (bool waitloop = 1);
-
-void ld_preload ();
-const char *find_first_notloaded_dll (class path_conv &);
-
-/**************************** Miscellaneous ******************************/
-
-void __stdcall set_std_handle (int);
-int __stdcall stat_dev (DWORD, int, unsigned long, struct stat *);
-
-ino_t __reg2 hash_path_name (ino_t hash, PUNICODE_STRING name);
-ino_t __reg2 hash_path_name (ino_t hash, PCWSTR name);
-ino_t __reg2 hash_path_name (ino_t hash, const char *name);
-void __reg2 nofinalslash (const char *src, char *dst);
-
-void __reg3 *hook_or_detect_cygwin (const char *, const void *, WORD&, HANDLE h = NULL);
-
-/* Time related */
-void __stdcall totimeval (struct timeval *, PLARGE_INTEGER, int, int);
-time_t __stdcall to_time_t (PLARGE_INTEGER);
-void __stdcall to_timestruc_t (PLARGE_INTEGER, timestruc_t *);
-void __stdcall time_as_timestruc_t (timestruc_t *);
-void __stdcall timeval_to_filetime (const struct timeval *, PLARGE_INTEGER);
-void __stdcall timespec_to_filetime (const struct timespec *, PLARGE_INTEGER);
-
-/* Console related */
-void __stdcall set_console_title (char *);
-void init_console_handler (bool);
-
-void __reg2 __set_winsock_errno (const char *fn, int ln);
-#define set_winsock_errno() __set_winsock_errno (__FUNCTION__, __LINE__)
-
-extern bool wsock_started;
-
-/* Printf type functions */
-extern "C" void vapi_fatal (const char *, va_list ap) __attribute__ ((noreturn));
-extern "C" void api_fatal (const char *, ...) __attribute__ ((noreturn));
-int __small_sprintf (char *dst, const char *fmt, ...);
-int __small_vsprintf (char *dst, const char *fmt, va_list ap);
-int __small_swprintf (PWCHAR dst, const WCHAR *fmt, ...);
-int __small_vswprintf (PWCHAR dst, const WCHAR *fmt, va_list ap);
-void multiple_cygwin_problem (const char *, uintptr_t, uintptr_t);
-
-extern "C" void vklog (int priority, const char *message, va_list ap);
-extern "C" void klog (int priority, const char *message, ...);
-bool child_copy (HANDLE, bool, ...);
-
-class path_conv;
-
-int __reg2 stat_worker (path_conv &pc, struct stat *buf);
-
-ino_t __reg2 readdir_get_ino (const char *path, bool dot_dot);
-
-/* mmap functions. */
-enum mmap_region_status
- {
- MMAP_NONE,
- MMAP_RAISE_SIGBUS,
- MMAP_NORESERVE_COMMITED
- };
-mmap_region_status mmap_is_attached_or_noreserve (void *addr, size_t len);
-bool is_mmapped_region (caddr_t start_addr, caddr_t end_address);
-
-extern inline bool flush_file_buffers (HANDLE h)
-{
- return (GetFileType (h) != FILE_TYPE_PIPE) ? FlushFileBuffers (h) : true;
-}
-#define FlushFileBuffers flush_file_buffers
-
-/* Make sure that regular ExitThread is never called */
-#define ExitThread exit_thread
-
-/**************************** Exports ******************************/
-
-extern "C" {
-int cygwin_select (int , fd_set *, fd_set *, fd_set *,
- struct timeval *to);
-int cygwin_gethostname (char *__name, size_t __len);
-};
-
-/*************************** Unsorted ******************************/
-
-#define WM_ASYNCIO 0x8000 // WM_APP
-
-
-#define STD_RBITS (S_IRUSR | S_IRGRP | S_IROTH)
-#define STD_WBITS (S_IWUSR)
-#define STD_XBITS (S_IXUSR | S_IXGRP | S_IXOTH)
-#define NO_W ~(S_IWUSR | S_IWGRP | S_IWOTH)
-#define NO_R ~(S_IRUSR | S_IRGRP | S_IROTH)
-#define NO_X ~(S_IXUSR | S_IXGRP | S_IXOTH)
-
-
-#ifdef __x86_64__
-extern "C" char __data_start__, __data_end__, __bss_start__, __bss_end__;
-#else
-extern "C" char _data_start__, _data_end__, _bss_start__, _bss_end__;
-#endif
-extern "C" void (*__CTOR_LIST__) (void);
-extern "C" void (*__DTOR_LIST__) (void);
-
-#ifdef NEEDED
-/* This was inexplicably needed after updating a toolchain.
- The need disappeared when updating further but I'm keeping
- it around temporarily in case the issue crops up again.
- This manifests as SEGVs in one of the Interlocked functions below
- in kernel32.dll. */
-#define InterlockedDecrement _InterlockedDecrement
-#define InterlockedExchange _InterlockedExchange
-#define InterlockedIncrement _InterlockedIncrement
-#endif /*NEEDED*/
-
-#ifndef NO_GLOBALS_H
-#define _RDATA /* See globals.h */
-#include "globals.h"
-
-extern inline void clear_procimptoken ()
-{
- if (hProcImpToken)
- {
- HANDLE old_procimp = hProcImpToken;
- hProcImpToken = NULL;
- CloseHandle (old_procimp);
- }
-}
-#endif /*NO_GLOBALS_H*/
-#endif /* defined __cplusplus */
diff --git a/winsup/cygwin/winver.rc b/winsup/cygwin/winver.rc
deleted file mode 100644
index be3a55cf6..000000000
--- a/winsup/cygwin/winver.rc
+++ /dev/null
@@ -1,50 +0,0 @@
-#include <winver.h>
-#include <cygwin/version.h>
-
-#define STRINGIFY1(x) #x
-#define STRINGIFY(x) STRINGIFY1(x)
-
-#define CYGWIN_DLL_NAME CYGWIN_VERSION_DLL_IDENTIFIER STRINGIFY(.dll)
-
-#define CYGWIN_API_VERSION STRINGIFY(CYGWIN_VERSION_API_MAJOR) "." \
- STRINGIFY(CYGWIN_VERSION_API_MINOR)
-
-#define CYGWIN_BUILD_DATE_TIME STRINGIFY(CYGWIN_BUILD_DATE) " " \
- STRINGIFY(CYGWIN_BUILD_TIME)
-
-VS_VERSION_INFO VERSIONINFO
- FILEVERSION CYGWIN_VERSION_DLL_MAJOR,CYGWIN_VERSION_DLL_MINOR,0,0
- PRODUCTVERSION CYGWIN_VERSION_DLL_MAJOR,CYGWIN_VERSION_DLL_MINOR,0,0
- FILEFLAGSMASK 0x3fL
-#ifdef DEBUGGING
- FILEFLAGS VS_FF_DEBUG
-#else
- FILEFLAGS 0x0L
-#endif
- FILEOS VOS__WINDOWS32
- FILETYPE VFT_DLL
- FILESUBTYPE 0x0L
-BEGIN
- BLOCK "StringFileInfo"
- BEGIN
- BLOCK "040904B0"
- BEGIN
- VALUE "CompanyName", "Red Hat"
- VALUE "FileDescription", "Cygwin POSIX Emulation DLL"
- VALUE "FileVersion", STRINGIFY(CYGWIN_VERSION)
- VALUE "InternalName", CYGWIN_DLL_NAME
- VALUE "LegalCopyright", "Copyright \251 Red Hat, Inc. 1996-2014"
- VALUE "OriginalFilename", CYGWIN_DLL_NAME
- VALUE "ProductName", "Cygwin"
- VALUE "ProductVersion", STRINGIFY(CYGWIN_VERSION)
- VALUE "APIVersion", CYGWIN_API_VERSION
- VALUE "SharedMemoryVersion", STRINGIFY(CYGWIN_VERSION_SHARED_DATA)
- VALUE "RegistryKey", CYGWIN_INFO_CYGWIN_REGISTRY_NAME
- VALUE "BuildDate", CYGWIN_BUILD_DATE_TIME
- END
- END
- BLOCK "VarFileInfo"
- BEGIN
- VALUE "Translation", 0x409, 1200
- END
-END
diff --git a/winsup/cygwin/wow64.cc b/winsup/cygwin/wow64.cc
deleted file mode 100644
index 070b9c2c4..000000000
--- a/winsup/cygwin/wow64.cc
+++ /dev/null
@@ -1,217 +0,0 @@
-/* wow64.cc
-
- Copyright 2011, 2012 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef __x86_64__
-/* WOW64 only plays a role in the 32 bit version. Don't use any of this
- in the 64 bit version. */
-
-#include "winsup.h"
-#include "cygtls.h"
-#include "ntdll.h"
-#include <sys/param.h>
-
-#define PTR_ADD(p,o) ((PVOID)((PBYTE)(p)+(o)))
-
-bool NO_COPY wow64_needs_stack_adjustment = false;
-
-static void
-wow64_eval_expected_main_stack (PVOID &allocbase, PVOID &stackbase)
-{
- PIMAGE_DOS_HEADER dosheader;
- PIMAGE_NT_HEADERS32 ntheader;
- DWORD size;
-
- dosheader = (PIMAGE_DOS_HEADER) GetModuleHandle (NULL);
- ntheader = (PIMAGE_NT_HEADERS32) ((PBYTE) dosheader + dosheader->e_lfanew);
- /* The main thread stack is expected to be located at 0x30000, which is the
- case for all observed NT systems up to Server 2003 R2, unless the
- stacksize requested by the StackReserve field in the PE/COFF header is
- so big that the stack doesn't fit in the area between 0x30000 and the
- start of the image. In case of a conflict, the OS allocates the stack
- right after the image.
- Sidenote: While post-2K3 32 bit systems continue to have the default
- main thread stack address located at 0x30000, the default main thread
- stack address on Vista/2008 64 bit is 0x80000 and on W7/2K8R2 64 bit
- it is 0x90000. However, this is no problem because the system sticks
- to that address for all WOW64 processes, not only for the first one
- started from a 64 bit parent. */
- allocbase = (PVOID) 0x30000;
- /* Stack size. The OS always rounds the size up to allocation granularity
- and it never allocates less than 256K. */
- size = roundup2 (ntheader->OptionalHeader.SizeOfStackReserve,
- wincap.allocation_granularity ());
- if (size < 256 * 1024)
- size = 256 * 1024;
- /* If the stack doesn't fit in the area before the image, it's allocated
- right after the image, rounded up to allocation granularity boundary. */
- if (PTR_ADD (allocbase, size) > (PVOID) ntheader->OptionalHeader.ImageBase)
- allocbase = PTR_ADD (ntheader->OptionalHeader.ImageBase,
- ntheader->OptionalHeader.SizeOfImage);
- allocbase = (PVOID) roundup2 ((uintptr_t) allocbase,
- wincap.allocation_granularity ());
- stackbase = PTR_ADD (allocbase, size);
- debug_printf ("expected allocbase: %p, stackbase: %p", allocbase, stackbase);
-}
-
-bool
-wow64_test_for_64bit_parent ()
-{
- /* On Windows XP 64 and 2003 64 there's a problem with processes running
- under WOW64. The first process started from a 64 bit process has its
- main thread stack not where it should be. Rather, it uses another
- stack while the original stack is used for other purposes.
- The problem is, the child has its stack in the usual spot again, thus
- we have to "alloc_stack_hard_way". However, this fails in almost all
- cases because the stack slot of the parent process is taken by something
- else in the child process.
- What we do here is to check if the current stack is the excpected main
- thread stack and if not, if we really have been started from a 64 bit
- process here. If so, we note this fact in wow64_needs_stack_adjustment
- so we can workaround the stack problem in _dll_crt0. See there for how
- we go along. */
- NTSTATUS ret;
- PROCESS_BASIC_INFORMATION pbi;
- HANDLE parent;
- PVOID allocbase, stackbase;
-
- ULONG_PTR wow64 = TRUE; /* Opt on the safe side. */
-
- /* First check if the current stack is where it belongs. If so, we don't
- have to do anything special. This is the case on Vista and later. */
- wow64_eval_expected_main_stack (allocbase, stackbase);
- if (&wow64 >= (PULONG) allocbase && &wow64 < (PULONG) stackbase)
- return false;
-
- /* Check if the parent is a native 64 bit process. Unfortunately there's
- no simpler way to retrieve the parent process in NT, as far as I know.
- Hints welcome. */
- ret = NtQueryInformationProcess (NtCurrentProcess (),
- ProcessBasicInformation,
- &pbi, sizeof pbi, NULL);
- if (NT_SUCCESS (ret)
- && (parent = OpenProcess (PROCESS_QUERY_INFORMATION,
- FALSE,
- (DWORD) pbi.InheritedFromUniqueProcessId)))
- {
- NtQueryInformationProcess (parent, ProcessWow64Information,
- &wow64, sizeof wow64, NULL);
- CloseHandle (parent);
- }
- return !wow64;
-}
-
-PVOID
-wow64_revert_to_original_stack (PVOID &allocationbase)
-{
- /* Test if the original stack exists and has been set up as usual. Even
- though the stack of the WOW64 process is at an unusual address, it appears
- that the "normal" stack has been created as usual. It's partially in use
- by the 32->64 bit transition layer of the OS to help along the WOW64
- process, but it's otherwise mostly unused. */
- MEMORY_BASIC_INFORMATION mbi;
- PVOID stackbase;
-
- wow64_eval_expected_main_stack (allocationbase, stackbase);
-
- /* The stack is allocated in a single call, so the entire stack has the
- same AllocationBase. At the start we expect a reserved region big
- enough still to host as the main stack. The OS apparently reserves
- always at least 256K for the main thread stack. We err on the side
- of caution so we test here for a reserved region of at least 256K.
- That should be enough (knock on wood). */
- VirtualQuery (allocationbase, &mbi, sizeof mbi);
- if (mbi.State != MEM_RESERVE || mbi.RegionSize < 256 * 1024)
- return NULL;
-
- /* Next we expect a guard page. We fetch the size of the guard area to
- see how big it is. Apparently the guard area on 64 bit systems spans
- 2 pages, only for the main thread for some reason. We better keep it
- that way. */
- PVOID addr = PTR_ADD (mbi.BaseAddress, mbi.RegionSize);
- VirtualQuery (addr, &mbi, sizeof mbi);
- if (mbi.AllocationBase != allocationbase
- || mbi.State != MEM_COMMIT
- || !(mbi.Protect & PAGE_GUARD))
- return NULL;
- PVOID guardaddr = mbi.BaseAddress;
- SIZE_T guardsize = mbi.RegionSize;
-
- /* Next we expect a committed R/W region, the in-use area of that stack.
- This is just a sanity check. */
- addr = PTR_ADD (mbi.BaseAddress, mbi.RegionSize);
- VirtualQuery (addr, &mbi, sizeof mbi);
- if (mbi.AllocationBase != allocationbase
- || PTR_ADD (mbi.BaseAddress, mbi.RegionSize) != stackbase
- || mbi.State != MEM_COMMIT
- || mbi.Protect != PAGE_READWRITE)
- return NULL;
-
- /* The original stack is used by the OS. Leave enough space for the OS
- to be happy (another 64K) and constitute a second stack within the so
- far reserved stack area. */
- PVOID newbase = PTR_ADD (guardaddr, -wincap.allocation_granularity ());
- PVOID newtop = PTR_ADD (newbase, -wincap.allocation_granularity ());
- guardaddr = PTR_ADD (newtop, -guardsize);
- if (!VirtualAlloc (newtop, wincap.allocation_granularity (),
- MEM_COMMIT, PAGE_READWRITE))
- return NULL;
- if (!VirtualAlloc (guardaddr, guardsize, MEM_COMMIT,
- PAGE_READWRITE | PAGE_GUARD))
- return NULL;
-
- /* We're going to reuse the original stack. Yay, no more respawn!
- Set the StackBase and StackLimit values in the TEB, set _main_tls
- accordingly, and return the new, 16 byte aligned address for the
- stack pointer. The second half of the stack move is done by the
- caller _dll_crt0. */
- _tlsbase = (char *) newbase;
- _tlstop = (char *) newtop;
- _main_tls = &_my_tls;
- return PTR_ADD (_tlsbase, -16);
-}
-
-/* Respawn WOW64 process. This is only called if we can't reuse the original
- stack. See comment in wow64_revert_to_original_stack for details. See
- _dll_crt0 for the call of this function.
-
- Historical note:
-
- Originally we just always respawned, right from dll_entry. This stopped
- working with Cygwin 1.7.10 on Windows 2003 R2 64. Starting with Cygwin
- 1.7.10 we don't link against advapi32.dll anymore. However, any process
- linked against advapi32, directly or indirectly, failed to respawn when
- trying respawning during DLL_PROCESS_ATTACH initialization. In that
- case CreateProcessW returns with ERROR_ACCESS_DENIED for some reason. */
-void
-wow64_respawn_process ()
-{
- WCHAR path[PATH_MAX];
- PROCESS_INFORMATION pi;
- STARTUPINFOW si;
- DWORD ret = 0;
-
- GetModuleFileNameW (NULL, path, PATH_MAX);
- GetStartupInfoW (&si);
- if (!CreateProcessW (path, GetCommandLineW (), NULL, NULL, TRUE,
- CREATE_DEFAULT_ERROR_MODE
- | GetPriorityClass (GetCurrentProcess ()),
- NULL, NULL, &si, &pi))
- api_fatal ("Failed to create process <%W> <%W>, %E",
- path, GetCommandLineW ());
- CloseHandle (pi.hThread);
- if (WaitForSingleObject (pi.hProcess, INFINITE) == WAIT_FAILED)
- api_fatal ("Waiting for process %u failed, %E", pi.dwProcessId);
- GetExitCodeProcess (pi.hProcess, &ret);
- CloseHandle (pi.hProcess);
- TerminateProcess (GetCurrentProcess (), ret);
- ExitProcess (ret);
-}
-
-#endif /* !__x86_64__ */
diff --git a/winsup/cygwin/wow64.h b/winsup/cygwin/wow64.h
deleted file mode 100644
index a0b5b318d..000000000
--- a/winsup/cygwin/wow64.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/* wow64.h
-
- Copyright 2011, 2012 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifndef __x86_64__
-/* WOW64 only plays a role in the 32 bit version. Don't use any of this
- in the 64 bit version. */
-
-extern bool NO_COPY wow64_needs_stack_adjustment;
-
-extern bool wow64_test_for_64bit_parent ();
-extern PVOID wow64_revert_to_original_stack (PVOID &allocationbase);
-extern void wow64_respawn_process () __attribute__ ((noreturn));
-
-#endif /* !__x86_64__ */
diff --git a/winsup/cygwin/x86_64.din b/winsup/cygwin/x86_64.din
deleted file mode 100644
index 24f2584c6..000000000
--- a/winsup/cygwin/x86_64.din
+++ /dev/null
@@ -1,20 +0,0 @@
-LIBRARY "cygwin1.dll" BASE=0x180040000
-
-EXPORTS
-#Exported variables
-environ = __cygwin_environ DATA
-
-#Exported functions
-__wrap__Znam NOSIGFE # void *operator new[](std::size_t sz) throw (std::bad_alloc)
-__wrap__ZnamRKSt9nothrow_t NOSIGFE # void *operator new[](std::size_t sz, const std::nothrow_t &nt) throw()
-__wrap__Znwm NOSIGFE # void *operator new(std::size_t sz) throw (std::bad_alloc)
-__wrap__ZnwmRKSt9nothrow_t NOSIGFE # void *operator new(std::size_t sz, const std::nothrow_t &nt) throw()
-_alloca = __alloca NOSIGFE
-_dll_crt0 NOSIGFE
-dll_entry NOSIGFE
-llrint NOSIGFE
-llrintf NOSIGFE
-lrint NOSIGFE
-lrintf NOSIGFE
-rint NOSIGFE
-rintf NOSIGFE
diff --git a/winsup/doc/.cvsignore b/winsup/doc/.cvsignore
deleted file mode 100644
index 288848833..000000000
--- a/winsup/doc/.cvsignore
+++ /dev/null
@@ -1,14 +0,0 @@
-Makefile
-Makefile.dep
-
-autom4te.cache
-config.log
-config.status
-
-cygwin-api
-cygwin-api.xml
-
-cygwin-ug-net
-cygwin-ug-net.html
-
-faq
diff --git a/winsup/doc/ChangeLog b/winsup/doc/ChangeLog
deleted file mode 100644
index eff6f6853..000000000
--- a/winsup/doc/ChangeLog
+++ /dev/null
@@ -1,2755 +0,0 @@
-2014-12-18 Yaakov Selkowitz <yselkowitz@cygwin.com>
-
- * ntsec.xml (ntsec-logonuser): Fix spelling of pw_passwd field.
-
-2014-12-18 Yaakov Selkowitz <yselkowitz@cygwin.com>
-
- * new-features.xml (ov-new1.7.34): Document Solaris stdio_ext.h
- functions and BSD/GNU unlocked stdio extensions.
- * posix.xml (std-bsd): Add BSD unlocked stdio extensions.
- (std-gnu): Add GNU unlocked stdio extensions.
- (std-solaris): Add stdio_ext.h functions.
-
-2014-12-15 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.xml (ov-new1.7.34): Add setfacl -k option.
- * utils.xml (setfacl): Ditto.
-
-2014-12-10 Michael DePaulo <mikedep333@gmail.com>
-
- * ntsec.xml (ntsec-mapping-samba): Clarify Samba file server setup.
-
-2014-12-10 Corinna Vinschen <corinna@vinschen.de>
-
- * faq-using.xml (faq.using.bloda): Add Lenovo RapidBoot Shield to
- BLODA list.
-
-2014-12-08 Corinna Vinschen <corinna@vinschen.de>
-
- * faq-setup.xml (faq.setup.upgrade-mountpoints): Remove.
- * pathnames.xml (pathnames-mount-ex): Remove note about 1.5->1.7
- registry mount point updates.
-
-2014-12-06 Corinna Vinschen <corinna@vinschen.de>
-
-2014-12-06 Corinna Vinschen <corinna@vinschen.de>
-
- * posix.xml (std-solaris): Point to libtirpc for xdr functions.
-
-2014-12-06 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.xsl (toc.section.depth): Set to 4.
- * ntsec.xml: Revamp account mapping documentation to account for the
- new db_home, db_shell, db_gecos settings.
-
-2014-12-05 Yaakov Selkowitz <yselkowitz@cygwin.com>
-
- * new-features.xml (ov-new1.7.34): Document qsort_r and __bsd_qsort_r.
- * posix.xml (std-bsd): Add qsort_r.
- (std-gnu): Ditto.
- (std-notes): Add section for qsort_r.
-
-2014-12-03 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.xml (ov-new1.7.34): Add latest changes.
-
-2014-11-28 Yaakov Selkowitz <yselkowi@redhat.com>
-
- * Makefile.in (XSLTPROC): Remove.
- (cygwin-ug-net/cygwin-ug-net.pdf): Build with xmlto pdf.
- (cygwin-api/cygwin-api.pdf): Ditto.
- (faq/faq.html): Fix extraneous anchor removal.
-
-2014-11-24 Corinna Vinschen <corinna@vinschen.de>
-
- * utils.xml (passwd): Align to latest changes.
-
-2014-11-13 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.xml (ov-new1.7.34): Add new section.
- (ov-new1.7.33): Reflect intermediate 1.7.33 release.
-
-2014-11-07 Corinna Vinschen <corinna@vinschen.de>
-
- * utils.xml (mkgroup): Align to changed usage.
- (mkpasswd): Ditto.
-
-2014-11-07 Corinna Vinschen <corinna@vinschen.de>
-
- * utils.xml (mkpasswd): Change /etc/group to /etc/passwd.
-
-2014-11-05 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.xml (ov-new1.7.33): Document xdr and atexit.
-
-2014-10-30 David Rothenberger <daveroth@acm.org>
-
- * ntsec.xml: Fix typo.
-
-2014-10-29 Dave Habermann <dahabermann@dow.com>
-
- * ntsec.xml (ntsec-mapping-caching): Describe service dependencies
- in terms of cygserver.
-
-2014-10-28 Corinna Vinschen <corinna@vinschen.de>
-
- * xidepend: Make PDF file dependent on the same input files as the
- HTML file of the same name to trigger automatic rebuild of PDFs on
- source file changes as well.
-
-2014-10-28 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwinenv.xml: Change default setting of dosfilewarning.
- * new-features.xml (ov-new1.7.33): Document aforementioned change.
-
-2014-10-28 Corinna Vinschen <corinna@vinschen.de>
-
- * ntsec.xml: Fix Solaris doc URLs.
-
-2014-10-28 Corinna Vinschen <corinna@vinschen.de>
-
- * ntsec.xml: Try to make an expression less ambiguous.
-
-2014-10-27 Luke Kendall <luke.kendall@cisra.canon.com.au>
- Corinna Vinschen <corinna@vinschen.de>
-
- * ntsec.xml: More language fixes.
-
-2014-10-27 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.xml (ov-new1.7.33): Document empty $PATH handling.
-
-2014-10-27 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.xml (ov-new1.7.33): Fix paragraph order.
-
-2014-10-27 Corinna Vinschen <corinna@vinschen.de>
-
- * highlights.xml: Rearrange itemizedlist markup slightly.
- * new-features.xml (ov-new1.7.33): Add setfacl -b option.
- * utils.xml (setfacl): Ditto.
-
-2014-10-24 Luke Kendall <luke.kendall@cisra.canon.com.au>
-
- * ntsec.xml: More language and typo fixes.
-
-2014-10-23 Corinna Vinschen <corinna@vinschen.de>
-
- * ntsec.xml: Fix language.
-
-2014-10-22 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in: Create install targets.
- (cygwin-ug-net/cygwin-ug-net.pdf): Create subdir to allow building PDF
- even if subdir is missing.
- (cygwin-api/cygwin-api.pdf): Ditto.
- * configure.ac: Add AC_PROG_INSTALL rule.
- * configure: Regenerate.
- * new-features.xml (ov-new1.7.33): Add installation of docs.
-
-2014-10-22 Corinna Vinschen <corinna@vinschen.de>
-
- * posix.xml (std-gnu): Add ffsl, ffsll, quotactl.
- (std-notes): Add restrictions of quotactl.
-
-2014-10-22 Yaakov Selkowitz <yselkowi@redhat.com>
-
- * new-features.xml (ov-new1.7.33): Document stime.
- * posix.xml (std-deprec): Add stime.
-
-2014-10-22 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.xml (ov-new1.7.33): s/Linux/glibc.
-
-2014-10-22 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.xml (ov-new1.7.33): Update to current state.
-
-2014-09-05 Corinna Vinschen <corinna@vinschen.de>
-
- * pathnames.xml (cygdrive): Add /proc/cygdrive description.
-
-2014-09-03 Corinna Vinschen <corinna@vinschen.de>
-
- * utils.xml (setfacl): Align documentation to help text in setfacl.
-
-2014-08-31 Corinna Vinschen <corinna@vinschen.de>
-
- * ntsec.xml (ntsec-common): Drop outdated comment about underdeveloped
- Solaris ACL API support.
-
-2014-08-31 Corinna Vinschen <corinna@vinschen.de>
-
- * utils.xml (setfacl): Drop outdated note that default ACEs are not
- taken into account.
-
-2014-08-31 Corinna Vinschen <corinna@vinschen.de>
-
- * ntsec.xml: Disable description of db_prefix and db_separator settings.
-
-2014-08-31 Corinna Vinschen <corinna@vinschen.de>
-
- * utils.xml (getfacl): Document additional suid/sgid/vtx flag printing.
-
-2014-08-15 Corinna Vinschen <corinna@vinschen.de>
-
- * configure.ac: Convert to new AC_INIT style.
- * configure: Regenerate.
-
-2014-08-14 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin-api.xml: Include misc-funcs.xml.
- * misc-funcs.xml: New file.
-
-2014-08-14 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin-api.xml: Move chapter tags from path.xml back here.
- Include logon-funcs.xml.
- * logon-funcs.xml: Moved from ../cygwin here and converted to XML.
- * path.xml: Drop chapter tags. Create subsections.
-
-2014-08-14 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in: Throughout use parenthesis instead of braces where
- appropriate.
- (DBXDIRS): Remove.
- (XSLTPROC): Define for symmetry. Use throughout.
- (clean): Drop removing cygwin-api.xml and doctool.*.
- (cygwin-api.xml): Drop rule.
- (doctool): Drop rule.
- (Makefile.dep): Add dependency to cygwin-api.xml.
- * cygwin-api.in.xml: Rename to cygwin-api.xml. Convert includes to
- XML XInclude style.
- * doctool.c: Remove.
- * doctool.txt: Remove.
- * faq-programming.xml: Drop reference to local utils.xml file.
- * path.xml: Moved from ../cygwin and converted to XML.
- * posix.xml: Ditto.
- * using.xml: Drop relative path from utils.xml include.
- * utils.xml: Moved from ../utils.
-
-2014-08-13 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.xml (ov-new1.7.33): Add new section.
- (ov-new1.7.32): Reflect intermediate 1.7.32 release.
-
-2014-08-06 Corinna Vinschen <corinna@vinschen.de>
-
- * ntsec.xml (ntsec-mapping): Drop plus-prepended builtin accounts as
- default setting. Add short explanation in db_prefix: always mode.
- Fix a type. Drop a paragraph with redundant information.
-
-2014-08-03 Yaakov Selkowitz <yselkowitz@cygwin.com>
-
- * faq-what.xml (faq.what.who): Remove mention of retired setup
- maintainers. Add link to cygwin-pkg-maint.
-
-2014-07-31 Yaakov Selkowitz <yselkowitz@cygwin.com>
-
- * faq-what.xml (faq.what.who): CGF has retired.
-
-2014-07-30 Corinna Vinschen <corinna@vinschen.de>
-
- * ntsec.xml: Small improvments.
-
-2014-07-30 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.xml: (ov-new1.7): Change section title.
-
-2014-07-30 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.xml: (ov-new1.7.1): Add new section. Move old 1.7
- sections into section level 3.
-
-2014-07-30 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin.xsl: Allow 3 section levels in TOC.
- * new-features.xml: (ov-new1.7.32): Add new section.
- * ntsec.xml: Rename top-level section to reflect extension of topics.
- Remove old /etc/passwd, /etc/group considerations. Add new sections
- explaining Windows to POSIX account mapping. Make setuid sections
- third level sections.
- * pathnames.xml: Note new method of account mapping for fstab.d/$USER.
- * faq-setup.xml: Rework references to /etc/passwd and /etc/group to
- reflect changes to account handling.
- * faq-using.xml: Ditto.
-
-2014-07-21 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.xml: (ov-new1.7.31): Add new section.
-
-2014-06-26 Corinna Vinschen <corinna@vinschen.de>
-
- * legal.xml: Fix copyright.
-
-2014-06-17 Christopher Faylor <me.cygwin2014@cgf.cx>
-
- * faq-programming.xml: Add gettext-devel to list of packages needed to
- build Cygwin.
-
-2014-04-04 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.xml: (ov-new1.7.29): Fix incomplete XML tagging.
-
-2014-03-31 Christopher Faylor <me.cygwin2014@cgf.cx>
-
- * new-features.xml: (ov-new1.7.29): Add new section.
-
-2014-01-29 Christopher Faylor <me.cygwin2014@cgf.cx>
-
- * faq-setup.xml: Minor snapshot instruction rewording. Update
- discussion about setup*.exe.
- * faq-using.xml: Update information about setup*.exe.
- * faq-what.xml: Ditto.
-
-2014-01-27 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.xml (ov-new1.7.28): Add new section.
-
-2014-01-07 Mark Geisert <mark@maxrnd.com>
-
- * faq-programming.xml: Update packages needed to build Cygwin.
-
-2013-12-07 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.xml (ov-new1.7.27): Add new section.
-
-2013-11-29 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.xml (ov-new1.7.26): Fix section ID and title. Add
- posix_spawn item.
-
-2013-11-23 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.xml (ov-new1.7.26): Add new section.
-
-2013-11-12 Tom Schutter <t.schutter@comcast.net>
-
- * faq-setup.xml (faq.setup.uninstall-service): Describe how to unhook
- cyglsa DLL from OS before uninstalling.
-
-2013-11-11 Corinna Vinschen <corinna@vinschen.de>
-
- * faq-setup.xml: Throughout remove setup.exe, use setup or setup-x86...
- instead.
- (faq.setup.cli): Reproduce latest --help output.
- (faq.setup.noroot): New section.
- (faq.setup.setup-fails-on-ts): Remove section.
- * setup-net.xml (internet-setup): Mention setup-x86{_64} in first
- paragraph. Add note to allow using setup.exe in subsequent paragraphs.
- Add paragraph to introduce --no-admin option.
-
-2013-11-06 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * Makefile.in: Fix problems accessing xidepend when configured with a
- (discouraged) relative path to source directory.
-
-2013-08-23 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * new-features.xml (ov-new1.7.25): Change wording.
-
-2013-08-23 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.xml (ov-new1.7.25): Add new section.
-
-2013-08-14 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.xml (ov-new1.7.24): Add new section. Mention
- posix_memalign override.
-
-2013-07-26 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * new-features.xml (ov-new1.7.23): Add new section. Mention wincmdln.
- * cygwinenv.xml: Mention wincmdln.
-
-2013-07-25 Corinna Vinschen <corinna@vinschen.de>
-
- * gcc.xml (gcc-64): Fix example.
-
-2013-07-25 Corinna Vinschen <corinna@vinschen.de>
-
- * gcc.xml (gcc-default: Rename from gcc-cons. Change title.
- (gcc-64): New section explaininig differences in programming for
- 64 bit Cygwin.
- (gcc-gui): Simplify description and aim at UNIX/Linux developers only.
- Note that X programming is preferred. Drop example.
-
-2013-07-21 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.22): Add GetCommandLine and regcomp
- changes.
-
-2013-07-21 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (cygwin-ug-net/cygwin-ug-net.html): Add dependency to
- cygwin.xsl.
- (cygwin-api/cygwin-api.html): Ditto.
- (cygwin-ug-net/cygwin-ug-net.pdf): Add dependency to fo.xsl.
- (cygwin-api/cygwin-api.pdf): Ditto.
- (cygwin-api.xml): Drop "." path component from doctool dependency.
- Change Makefile to Makefile.in dep.
- (doctool): Drop "." path component from target.
-
-2013-07-20 Warren Young <warren@etr-usa.com>
- Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (cygwin-ug-net/cygwin-ug-net.pdf): Process input via
- xsltproc and fop.
- (cygwin-api/cygwin-api.pdf): Ditto.
- * fo.xsl: New file.
-
-2013-07-15 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.22): New section. Document dropped
- support for /dev/mem, /dev/kmem, /dev/port.
- * specialnames.xml (pathnames-posixdevices): Drop description of
- /dev/mem, /dev/kmem, /dev/port.
-
-2013-06-24 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * new-features.sgml (ov-new1.7.21): New section. Document rawmemchr.
-
-2013-06-19 Corinna Vinschen <corinna@vinschen.de>
-
- * faq-using.xml (faq.using.private-cygwin): Drop.
-
-2013-06-19 Corinna Vinschen <corinna@vinschen.de>
-
- * faq-using.xml (faq.using.multiple-copies): Modernize to reflect
- installation separation since Cygwin 1.7.
- (faq.using.third-party.multiple-copies): Ditto.
-
-2013-06-17 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwinenv.xml: Fix link to FAQ.
-
-2013-06-05 Corinna Vinschen <corinna@vinschen.de>
-
- * faq-copyright.xml: Fix link to license.
- * faq-using.xml: Ditto.
- * faq-what.xml: Ditto.
-
-2013-06-05 Corinna Vinschen <corinna@vinschen.de>
-
- * faq-programming.xml: Convert url to refer to new flat faq.html file.
- * faq-setup.xml: Ditto.
- * faq-using.xml: Ditto.
- * highlights.xml: Ditto.
-
-2013-06-05 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.xml (ov-new1.7.19): Revert mandatory locking support to
- "preliminary".
-
-2013-06-04 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in: Add rule to rebuild Makefile if Makefile.in changes.
- Include Makefile.dep last.
- (Makefile.dep): Run xidepend within source dir. Temporarily drop
- faq.xml from dependencies.
- * xidepend: Fix creating base filename to accommodate VPATH.
-
-2013-06-04 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.xml (ov-new1.7.19): Align mandatory locking text to
- today's changes.
-
-2013-06-03 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.xml (ov-new1.7.19): Add mandatory locking.
-
-2013-05-23 Warren Young <warren@etr-usa.com>
-
- * xidepend: New script, generates Makefile.dep from top-level XML
- * .cvsignore: Ignoring Makefile.dep output
- * Makefile: Creating Makefile.dep if it doesn't exist, including it
- if it does, and removing it on 'make clean'
- * Wishlist: Knocked autodependency generation off the list
-
-2013-05-23 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwinenv.xml (cygwinenv-implemented-options): Explain new
- winsymliks:nativestrict option. Strip out description of symlink types
- and refer to new pathnames-symlinks section.
- * highlights.xml (ov-hi-files): Rip out most of symlink description and
- refer to new pathnames-symlinks section instead.
- * new-features.xml (ov-new1.7.19): Add CYGWIN=winsymlinks:nativestrict.
- * pathnames.xml (pathnames-symlinks): New section describing symbolic
- link handling.
-
-2013-05-21 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.xml (ov-new1.7.19): Add arc4random,
- arc4random_addrandom, arc4random_buf, arc4random_stir and
- arc4random_uniform.
-
-2013-05-21 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.xml (ov-new1.7.19): Add __b64_ntop and __b64_pton.
-
-2013-05-13 Warren Young <warren@etr-usa.com>
-
- * cygwin-ug.xml setup.xml: Removed; unused.
- * Wishlist: Created, with initial content based on a -patches
- mailing list post.
-
-2013-05-06 Warren Young <warren@etr-usa.com>
-
- * cygwin-api.in.xml (bookinfo): Reverted XInclude for legal.xml
- fragment to a DOCTOOL include.
-
-2013-05-03 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * Makefile (FAQ_SOURCES): Use wildcard function to find sources in
- srcdir.
-
-2013-05-01 Warren Young <warren@etr-usa.com>
-
- * bodysnatcher.pl: Created
- * Makefile.in (faq/faq.body): Added target to create this file from
- faq/faq.html using new bodysnatcher.pl script.
-
-2013-05-01 Warren Young <warren@etr-usa.com>
-
- * cygwin-ug.xml: Renamed from cygwin-ug.in.sgml
- (bookinfo) Extracted <bookinfo> section into new ug-info.xml file
- * ug-info.xml: Created
- * cygwin-ug-net.xml: Renamed from cygwin-ug-net.in.sgml
- (bookinfo) Replaced content with XInclude referencing ug-info.xml
- * configure.ac: Replaced a *.sgml file reference with *.xml
- * cygserver.xml cygwinenv.xml dll.xml effectively.xml filemodes.xml
- gcc.xml gdb.xml legal.xml new-features.xml ntsec.xml overview.xml
- pathnames.xml programming.xml setup.xml setup-net.xml textbinary.xml
- using.xml windres.xml: Renamed from *.sgml.
- Added <?xml> and <!DOCTYPE> tags to the top.
- * cygserver.sgml cygwinenv.sgml dll.sgml effectively.sgml filemodes.sgml
- gcc.sgml gdb.sgml legal.sgml new-features.sgml ntsec.sgml overview.sgml
- pathnames.sgml programming.sgml setup.sgml setup-net.sgml textbinary.sgml
- using.sgml windres.sgml: Renamed to *.xml
- * faq.xml: Renamed from faq-sections.sgml. (Not faq.sgml!)
- Replaced FAQ section ENTITY declarations with XIncludes.
- Removed all other ENTITY declarations as they just name entities
- already defined in the current DocBook stylesheets.
- * faq.sgml: Removed without translating to DocBook XML. Obsolete.
- * faq-*.xml: Added <?xml> and <!DOCTYPE> tags to the top.
- Moved <qandadiv> tags from faq.xml and faq-sections.xml into
- individual section files so they individually pass XML validation.
- * pathnames.xml: Contained two top-level <sect1> elements, which is
- malformed XML. Moved second to new specialnames.xml file.
- * specialnames.xml: Created; extracted from pathnames.sgml
- * overview2.xml: Broke it up into following three files, and
- removed the original.
- * ov-ex-win.xml (ov-ex-win): Created; contents extracted from
- overview2.sgml
- * ov-ex-unix.xml (ov-ex-unix): Ditto
- * highlights.xml (highlights): Ditto
- * setup2.xml: Broke it up into setup-*.xml.
- * setup-env.xml setup-files.xml setup-locale.xml setup-maxmem.xml:
- Created; contents extracted from setup2.sgml
-
-2013-04-24 Corinna Vinschen <corinna@vinschen.de>
-
- * faq-programming.xml (faq.programming.64bitporting): Fix typo.
-
-2013-04-24 Corinna Vinschen <corinna@vinschen.de>
-
- * faq-programming.xml (faq.programming.64bitporting): Extend entry.
- (faq.programming.64bitporting-fail): New entry.
- (faq.programming.64bitporting-cygwin64): New entry.
-
-2013-04-24 Corinna Vinschen <corinna@vinschen.de>
- Christian Franke <Christian.Franke@t-online.de>
-
- * faq-programming.xml (faq.programming.64bitporting): Mention the
- -Wformat and -Wall gcc options.
-
-2013-04-24 Corinna Vinschen <corinna@vinschen.de>
-
- * faq-programming.xml (faq.programming.64bitporting): New FAQ entry.
- (faq.programming.objective-c): Include gcc4.
- (faq.programming.make-execvp): Drop text discouraging usage of -j.
- (faq.programming.undeclared-functions): Drop entry.
- (faq.programming.x86-assembly): Ditto.
- (faq.programming.djgpp): Ditto.
-
-2013-04-24 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwinenv.sgml (cygwinenv-implemented-options): Change description
- for winsymlink option to explain new implementation.
- * new-features.sgml (ov-new1.7.19): Add support for native symlinks and
- AFS.
-
-2013-04-23 Corinna Vinschen <corinna@vinschen.de>
-
- * Throughout, eliminate Windows 2000 from the documentation.
- * overview.sgml (brief-history): Mention native AMD64 support.
-
-2013-04-23 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (SGMLDIRS): Accommodate dropping utils_source and
- cygwin_source from ../Makefile.common.
- * new-features.sgml (ov-new1.7.19): New section. Document dropped
- support for pre-XP SP3 and added support for 64 bit Cygwin.
-
-2013-04-23 Corinna Vinschen <corinna@vinschen.de>
-
- * faq-what.xml (faq.what.supported): Change to accommodate existence
- of 64 bit version.
-
-2013-03-27 Corinna Vinschen <corinna@vinschen.de>
-
- * faq-what.xml (faq.what.supported): Mention Windows 8 and Server 2012.
- Change sentence on native 64 bit version.
-
-2013-03-06 Anthony Geoghegan <anthony.geoghegan@gmail.com>
-
- * faq-using.xml: Fix expression and uppercase Samba.
-
-2013-02-13 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * pathnames.sgml: Remove stray '@'.
-
-2013-02-13 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * pathnames.sgml: Clarify '@' processing.
-
-2013-01-23 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * faq-programming.xml: Remove reference to "make check".
-
-2013-01-12 Thomas Wolff <towo@towo.net>
-
- * new-features.sgml (ov-new1.7.18): Add console enhancements.
-
-2012-12-20 Corinna Vinschen <corinna@vinschen.de>
-
- * pathnames.sgml (pathnames-at): Drop confusing description on
- "embedded double quotes".
-
-2012-12-14 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.18): Add sparse change.
- * pathnames.sgml (mount-table): Document sparse mount option.
-
-2012-12-06 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * new-features.sgml (ov-new1.7.18): New section. Document cfsetspeed.
-
-2012-11-26 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * configure.ac: Rename from configure.in.
- * configure.in: Delete.
- * configure: Regenerate.
-
-2012-10-24 Corinna Vinschen <corinna@vinschen.de>
-
- * configure.in: Add AC_NO_EXECUTABLES.
- * configure: Regenerate.
-
-2012-10-20 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.17): Add section.
-
-2012-09-03 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * faq-what.xml: Fix typos, clarify responsibility slightly.
-
-2012-08-03 Adam Dinwoodie <Adam.Dinwoodie@metaswitch.com>
-
- * faq-using.xml (faq.using.man): Make relevance to whatis explicit.
-
-2012-07-20 Corinna Vinschen <corinna@vinschen.de>
-
- * pathnames.sgml (pathnames-intro): Remove paragraph on UNC paths.
- Try to be clearer on POSIX vs. Win32 paths.
- (unc-paths): New section.
- (cygdrive): Fix a few SGML qualifiers.
- * setup-net.sgml: Move ntsec section from here...
- * using.sgml: ..to here.
-
-2012-07-18 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * new-features.sgml (ov-new1.7.16): Document getmntent_r.
-
-2012-07-17 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * faq-programming.xml (faq.programming.unix-gui): Update to
- reflect the availability of X11 toolkits on Cygwin.
-
-2012-06-03 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.16): Document ReFS support.
-
-2012-05-10 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * new-features.sgml (ov-new1.7.16): Document memrchr.
-
-2012-05-09 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * new-features.sgml (ov-new1.7.15): Fix XML syntax.
-
-2012-05-07 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * new-features.sgml (ov-new1.7.15): Fix tag.
-
-2012-05-06 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * cygwinenv.sgml: Add pipe_byte description.
- * new-features.sgml (ov-new1.7.15): Add new pipe_byte description for
- 1.7.15.
-
-2012-04-25 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.14): Add mouse reporting mode 1005.
-
-2012-04-24 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.14): New section. Add new console mouse
- reporting modes.
-
-2012-04-24 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * configure: Regenerate.
-
-2012-04-23 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * faq-using.xml (faq.using.emacs, faq.using.xemacs): Change links
- from http://cygwin.com/xfree to http://x.cygwin.com.
-
-2012-04-23 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * faq-programming.xml (faq.programming.objective-c): Update for gcc4.
- (faq.programming.win32-api): -mwindows does include -lcomdlg32.
- (faq.programming.win32-no-cygwin): Update for removal of -mno-cygwin.
- * overview2.sgml (ov-ex-win): Ditto.
-
-2012-04-05 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.13): Add typeahead description.
-
-2012-04-05 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.13): New section. Add entry for
- mkpasswd/mkgroup change to print TrustedInstaller account.
-
-2012-04-03 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.12): Fix layout of flock example.
-
-2012-03-30 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.12): Fix typo.
-
-2012-03-30 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwinenv.sgml (cygwinenv-implemented-options): Add detect_bloda.
- * new-features.sgml (ov-new1.7.12): Add list items for the change to
- flock and the detect_bloda CYGWIN option.
- * overview2.sgml (ov-hi-process-problems): Add a reference to the
- detect_bloda CYGWIN option.
-
-2012-03-27 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.12): Create. Move mountinfo here.
- Add /dev notice.
- * pathnames.sgml (pathnames-posixdevices): Rephrase to account for
- /dev change in 1.7.12.
-
-2012-03-27 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.11): Add mountinfo.
-
-2012-03-01 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * faq-programming.xml (faq.programming.make-execvp): Remove obsolete
- information about Tcl/Tk.
- (faq.programming.dll-relocatable): Ditto.
- * faq-using.xml (faq.using.tcl-tk): Rewrite to reflect switch to
- X11 Tcl/Tk.
-
-2012-02-27 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * faq-using.xml (faq.using.bloda): Fix missing closing parenthesis.
-
-2012-02-25 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.11): Add two more changes to the list.
-
-2012-02-24 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * new-features.sgml (ov-new1.7.11): Document pldd.
-
-2012-02-21 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * new-features.sgml (ov-new1.7.11): New section. Document scandirat.
-
-2012-02-21 Corinna Vinschen <corinna@vinschen.de>
-
- * faq-using.xml (faq.using.bloda): Add AVAST and Citrix Metaframe
- Presentation Server.
-
-2012-02-08 Corinna Vinschen <corinna@vinschen.de>
-
- * faq-using.xml (faq.using.sshd-in-domain): Document autoload error
- 1114 when loading user32.dll as potential problem when not using
- a domain service account.
-
-2012-02-05 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.10): Fix typo.
-
-2012-02-05 Corinna Vinschen <corinna@vinschen.de>
-
- * legal.sgml: Fix copyright.
-
-2012-02-04 Corinna Vinschen <corinna@vinschen.de>
-
- * setup2.sgml: Fix more typos.
- * setup-net.sgml: Ditto.
-
-2012-02-04 Corinna Vinschen <corinna@vinschen.de>
-
- * faq-using.xml: Fix typos.
- * ntsec.sgml: Ditto.
- * pathnames.sgml: Ditto.
- * setup2.sgml: Ditto.
- * setup-net.sgml: Ditto.
- (setup-dir): Drop paragraph on Unix/DOS file mode.
-
-2012-01-29 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.10): Add tzset.
-
-2012-01-24 Corinna Vinschen <corinna@vinschen.de>
-
- * pathnames.sgml (mount-table): Rephrase a few expressions for
- clearness.
-
-2012-01-13 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * new-features.sgml (ov-new1.7.10): Document support for the %m
- conversion flag in printf functions.
-
-2012-01-12 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * new-features.sgml (ov-new1.7.10): Document tgmath.h.
-
-2012-01-06 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * new-features.sgml (ov-new1.7.10): Document pthread_sigqueue.
-
-2012-01-01 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * new-features.sgml (ov-new1.7.10): Document get_current_dir_name.
-
-2011-12-30 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * new-features.sgml (ov-new1.7.10): Document getpt.
-
-2011-12-12 Ken Brown <kbrown@cornell.edu>
-
- * faq-using.xml: Remove obsolete entry about the standard console
- window.
- * new-features.sgml: Remove obsolete entry which references cygwin.bat.
- * setup-net.sgml: Clarify new shortcut behavior for the "Cygwin
- Terminal".
-
-2011-11-21 Andy Koppe <andy.koppe@gmail.com>
-
- * faq-using.xml (faq.using.weirdchars): Rewrite.
-
-2011-11-17 Corinna Vinschen <corinna@vinschen.de>
-
- * faq-using.xml (faq.using.converting-paths): Remove reference to
- cygwin.bat.
- (faq.using.emacs): Drop "CYGWIN=tty" setting.
- * pathnames.sgml (pathnames-posixdevices): Align list of device names
- with changes in 1.7.10.
- * setup2.sgml (setup-env-ov): Drop text which assumes that Cygwin
- processes are started in console window. Align wording to lessened
- relevance of $CYGWIN. Don't use dropped CYGWIN setting in example.
- (setup-locale-how): Put using console and Cygwin.bat file into
- perspective.
- (setup-locale-problems): Ditto.
-
-2011-11-08 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.10): Document ptsname_r.
-
-2011-11-05 Jon TURNEY <jon.turney@dronecode.org.uk>
-
- * faq-using.xml (faq.using.fixing-fork-failures): Add new FAQ.
- * overview2.sgml (ov-hi-process-problems): Describe some difficulties
- in implementing fork()
-
-2011-10-28 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.10): Document getgrouplist.
-
-2011-10-10 Corinna Vinschen <corinna@vinschen.de>
-
- * cygserver.sgml: Change -v to -V, same as in sources.
-
-2011-08-19 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * new-features.sgml (ov-new1.7.10): Document /proc/devices
- and /proc/misc.
-
-2011-08-16 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.10): Document new RTLD flags.
-
-2011-08-12 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.10): Document large address awareness
- of heap and new way to set the default heap size per executable.
- * setup2.sgml (setup-maxmem): Revamp to explain new method of
- allocating more heap on a per-executable basis. Drop outdated stuff.
- Keep shortened description of heap_chunk_in_mb as note.
-
-2011-08-04 Corinna Vinschen <corinna@vinschen.de>
-
- * faq-using.xml (faq.using.bloda): Add NVIDIA. Change wording slightly.
-
-2011-08-03 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * new-features.sgml (ov-new1.7.10): Document new POSIX Clock Selection
- option APIs.
-
-2011-07-20 Andy Koppe <andy.koppe@gmail.com>
-
- * setup-net.sgml (setup-packages): Reflect removal of Prev button.
- Also document Keep button and improve description of Exp button.
-
-2011-07-19 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * new-features.sgml (ov-new1.7.10): Document getconf(1).
-
-2011-07-15 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * cygwinenv.sgml (using-cygwinenv): Clarify how "glob" works.
-
-2011-06-15 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwinenv.sgml (using-cygwinenv): Move envcache, strip_title, title,
- tty, and upcaseenv options to list of obsolete options.
- * effectively.sgml (using-console): Remove section.
- * new-features.sgml (ov-new1.7.10): Document removed CYGWIN options.
- Document removed tty mode.
-
-2011-05-25 Eric Blake <eblake@redhat.com>
-
- * new-features.sgml (ov-new1.7.10): Document strerror changes.
-
-2011-05-25 Corinna Vinschen <corinna@vinschen.de>
-
- * legal.sgml: Drop an old paragraph. Reactivate copyright note for
- documentation.
-
-2011-05-19 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * new-features.sgml (ov-new1.7.10): Document __fpurge.
-
-2011-05-17 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * new-features.sgml (ov-new1.7.10): Document error.h functions.
-
-2011-05-17 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * new-features.sgml (ov-new1.7.10): Document CPU-time clock support.
- Move pthread stack management APIs to separate listitem.
-
-2011-05-15 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.10): Document pthread_attr_getguardsize,
- pthread_attr_setstack, pthread_attr_setstackaddr and
- pthread_attr_setguardsize.
-
-2011-05-10 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwinenv.sgml: Move "forkchunk:xxx" to the removed options section.
- Change text accordingly.
-
-2011-05-10 Corinna Vinschen <corinna@vinschen.de>
-
- * setup2.sgml (setup-env-ov): Make sure everybody knows that the
- CYGWIN settings are just an example.
-
-2011-05-08 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * new-features.sgml (ov-new1.7.10): Document clock_settime.
-
-2011-05-06 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * new-features.sgml (ov-new1.7.10): Document sysinfo.
-
-2011-05-04 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * new-features.sgml (ov-new1.7.10): Document psiginfo, psignal,
- and sys_siglist.
-
-2011-05-02 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * new-features.sgml (ov-new1.7.10): Document new pthread APIs.
-
-2011-05-02 Corinna Vinschen <corinna@vinschen.de>
-
- Throughout remove NT4 from documentation.
-
- * new-features.sgml (ov-new1.7.10): Document change in passwd command.
-
-2011-04-18 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.10): Document ppoll.
-
-2011-04-10 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * new-features.sgml (ov-new1.7.10): Document /proc/swaps.
-
-2011-04-04 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.10): Document dropped NT4 support.
-
-2011-04-04 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * new-features.sgml (ov-new1.7.10): Document additional information
- in /proc/version.
-
-2011-04-01 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * new-features.sgml (ov-new1.7.10): Document /proc/sysvipc/.
-
-2011-04-01 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * new-features.sgml (ov-new1.7.10): /proc/loadavg now shows
- current running/total processes count.
-
-2011-03-29 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.10): Document pthread spinlocks.
-
-2011-03-28 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.9): Add "new API" paragraph.
-
-2011-02-15 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.8): Fix typo.
-
-2011-02-15 Corinna Vinschen <corinna@vinschen.de>
-
- * legal.sgml: Bump date.
- * new-features.sgml (ov-new1.7.8): Move dropped NT4 pre-SP4 support
- up to be the first paragraph.
-
-2011-02-15 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.8): Document /proc/sys.
-
-2011-02-10 Eric Blake <eblake@redhat.com>
-
- * new-features.sgml (ov-new1.7.8): Document strerror_r fixes.
-
-2011-02-10 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * new-features.sgml (ov-new1.7.8): Document pthread_yield.
-
-2011-01-12 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.8): Add "new API" paragraph.
-
-2011-01-05 Jon TURNEY <jon.turney@dronecode.org.uk>
-
- * faq-setup.xml (faq.setup.cli): Correct description of -pubkey option
-
-2010-10-18 Andy Koppe <andy.koppe@gmail.com>
-
- * setup2.sgml (setup-locale-ov): Document CJK ambiguous width change
- for non-Unicode charsets.
- * new-features.sgml (ov-new1.7.8): Mention CJK ambiguous width change.
- Drop redundant NT4 pre-SP4 support entry.
-
-2010-10-09 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.8): Document reinstantiation of the
- original 1.7 CWD handling.
-
-2010-10-08 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.8): Document new C99 complex API.
-
-2010-09-27 Corinna Vinschen <corinna@vinschen.de>
-
- * pathnames.sgml (mount-table): Fix pathnames-mount-ex example. Change
- an expression.
-
-2010-09-27 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.8): Document dropped NT4 pre-SP4 support.
- * faq-what.xml (faq.what.supported): Change accordingly.
- * ntsec.sgml (ntsec-mapping): Add 2008 R2.
-
-2010-09-18 Christopher Faylor <me+cygwin@cgf.cx>
-
- * overview2.sgml: Remove cheerful paragraph which implied that it was
- ok to casually mix Windows and POSIX. Add more words about mixing
- POSIX/Windows.
-
-2010-09-18 Corinna Vinschen <corinna@vinschen.de>
-
- * setup2.sgml (setup-locale-how): Fix typo.
-
-2010-09-11 Dave Korn <dave.korn.cygwin@gmail.com>
-
- * new-features.sgml: Mention fenv support.
-
-2010-09-06 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.8): Document /proc/sys.
-
-2010-08-30 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.7): Document change to binmode/textmode
- link libs.
- * textbinary.sgml (textbin-devel): Ditto.
-
-2010-08-28 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.7): Document change to avoid DLL
- hijacking.
-
-2010-08-27 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.7): Change to describe partial
- reversion to pre-1.7.6 behaviour.
- (ov-new1.7.6): Deprecate description of CWD handling.
- * pathnames.sgml (pathnames-win32-api): Rewrite to reflect new CWD
- behaviour.
-
-2010-08-19 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.7): New section.
- * pathnames.sgml: Throughout, align style of screen elements.
- Throughout, make all emphasis elements bold.
- (pathnames-win32-api): Rewrite section.
-
-2010-08-18 Corinna Vinschen <corinna@vinschen.de>
-
- * pathnames.sgml (pathnames-win32-api): Try to use a more clear wording.
-
-2010-08-13 Corinna Vinschen <corinna@vinschen.de>
-
- * faq-programming.xml (faq.programming.win32-api): Remove simplicity.
- Add note and xrefs to User's Guide chapters explaining restrictions
- using the Win32 API.
- * new-features.sgml (ov-new1.7.6): Add note about Win CWD.
- * overview2.sgml (ov-hi-intro): Add note and xrefs about Win32 API
- restrictions. Tone down flexibility.
- * pathnames.sgml (pathnames-intro): Add xref to pathnames-win32-api
- section.
- (pathnames-win32-api): New section describing Win32 CWD restriction.
- * setup2.sgml (setup-env-ov): New sub-section.
- (setup-env-win32): Ditto, describing Win32 environment restriction.
-
-2010-08-11 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.6): Document "bind" option.
- * pathnames.sgml (mount-table): Add "bind" option with example.
-
-2010-08-09 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * new-features.sgml (ov-new1.7.6): Document POSIX monotonic clock.
-
-2010-08-09 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.6): Document /proc/filesystems.
-
-2010-07-26 Andy Koppe <andy.koppe@gmail.com>
-
- * setup-net.sgml, faq-setup.xml: Rename setup.exe's "Partial"
- view to "Pending"
-
-2010-07-19 Eric Blake <eblake@redhat.com>
-
- * textbinary.sgml (textbin-devel): Document temp file behavior.
- (textbin-issue): Use sed rather than cat as an example of a
- default-mode application.
- * new-features.sgml (ov-new1.7.6): Document mkostemp[s].
-
-2010-06-27 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * Makefile.in: Use "xmlto pdf" instead of docbook2pdf.
- Force the dblatex backend, as the default passivetex does not work.
- * README: Replace docbook-utils dependency with dblatex.
- Update required docbook-xml version.
- * faq-programming.xml (building-cygwin): Ditto.
-
-2010-06-26 Ken Brown <kbrown@cornell.edu>
-
- * setup-net.sgml: Add a paragraph describing now to avoid unintentional
- upgrades.
-
-2010-04-29 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.6): Add new "dos" and "inode" mount
- options.
- * pathnames.sgml (mount-table): Ditto.
- (pathnames-specialchars): Change description order. Add paragraph
- to explain new behaviour in terms of leading spaces and trailing dots
- and spaces in pathnames.
-
-2010-04-28 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.6): Add locale wide-char changes.
-
-2010-04-22 Corinna Vinschen <corinna@vinschen.de>
-
- * cygserver.sgml: Note the fact that slave tty/pty handle dispersal is
- unsed as of Cygwin 1.7.6.
- * new-features.sgml (ov-new1.7.6): New section. Add tty/pty and
- setrlimit changes.
-
-2010-04-11 Christopher Faylor <me+cygwin@cgf.cx>
-
- * cygwin.dsl: Remove comments.
-
-2010-04-11 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.5): New section.
-
-2010-04-11 Christopher Faylor <me+cygwin@cgf.cx>
-
- * cygwin-api.in.sgml: Update to DocBook SGML 4.5 DTD.
- * cygwin-ug-net.in.sgml: Ditto.
- * cygwin-ug.in.sgml: Ditto.
- * faq-sections.xml: Ditto.
- * faq.xml: Ditto.
-
-2010-04-01 Charles Wilson <cygwin@cwilson.fastmail.fm>
-
- * setup-net.sgml: Remove more mentions of rxvt.
-
-2010-03-31 Christopher Faylor <me+cygwin@cgf.cx>
-
- * cygwinenv.sgml: Remove/deprecate mention of rxvt.
- * effectively.sgml: Ditto.
- * faq-using.xml: Ditto.
- * setup-net.sgml: Ditto.
-
-2010-03-29 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.3): New section.
-
-2010-03-27 Corinna Vinschen <corinna@vinschen.de>
-
- * setup2.sgml (setup-locale-charsetlist): Add EUC-CN and GB2312.
-
-2010-03-27 Corinna Vinschen <corinna@vinschen.de>
-
- * textbinary.sgml: Add missing </para>.
-
-2010-03-27 Christopher Faylor <me+cygwin@cgf.cx>
-
- * textbinary.sgml: Remove tr example and just mention u2d and d2u
- instead.
-
-2010-03-25 Christopher Faylor <me+cygwin@cgf.cx>
-
- * pathnames.sgml: Clarify wording of user-specific fstab files. Fix
- typo.
-
-2010-03-24 Corinna Vinschen <corinna@vinschen.de>
-
- * legal.sgml: Bump copyright date.
-
-2010-03-17 Corinna Vinschen <corinna@vinschen.de>
-
- * faq-using.xml (faq.using.unicode): Remove old examples.
-
-2010-03-12 Corinna Vinschen <corinna@vinschen.de>
-
- * effectively.sgml (using-shortcuts): Match chapter with reality.
-
-2010-03-11 Corinna Vinschen <corinna@vinschen.de>
-
- * faq-using.xml (faq.using.bloda): Add "Credant Guardian Shield".
-
-2010-03-05 Corinna Vinschen <corinna@vinschen.de>
-
- * setup2.sgml (setup-env): Add cross reference to using-cygwinenv.
- Change description for locale environment variables to comply with
- changes in 1.7.2.
-
-2010-03-02 Charles Wilson <cygwin@cwilson.fastmail.fm>
-
- * new-features.sgml (ov-new1.7.2): Describe XDR support.
-
-2010-02-26 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.2): Add strptime changes.
-
-2010-02-26 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.2): Add strftime/wcsftime changes.
-
-2010-02-25 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * new-features.sgml (ov-new1.7.2): Add SIGPWR support.
-
-2010-02-25 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.2): Move stty erase support into
- correct category. Change "console window" to "Windows console".
-
-2010-02-17 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.2): Accommodate name change of getlocale
- to locale.
- * setup2.sgml (setup-locale-how): Ditto.
-
-2010-02-15 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.2): Add native DOS path and UNC path
- change.
- * pathnames.sgml (pathnames-intro): Make the Win32 path text a note
- and xref to new pathnames-win32 section.
- (cygdrive): Add description how the cygdrive mount flags apply to
- UNC paths starting with slashes.
- (pathnames-win32): New section describing native path handling.
-
-2010-02-11 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.2): Rephrase getlocale entry.
-
-2010-02-10 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.2): Add LC_MESSAGES support.
- * setup2.sgml (setup-locale-ov): Change "@euro" modifier description.
- (setup-locale-missing): Remove.
-
-2010-02-07 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * new-features.sgml (ov-new1.7-misc): Fix typo.
-
-2010-02-07 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.2): Add support for locales from
- /usr/share/locale/locale.alias.
- * setup2.sgml (setup-locale-ov): Ditto.
-
-2010-02-06 Corinna Vinschen <corinna@vinschen.de>
-
- * setup2.sgml (setup-locale-ov): Align description of working modifiers
- to latest changes.
-
-2010-02-06 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.2): Add support for new charsets.
- Change text for modifier support.
- (setup-locale-charsetlist): Add new GEORGIAN-PS and PT154 charsets
- to list of supported charsets. Reorder list for non-ISO, non-CP
- charsets alphabetically.
-
-2010-02-05 Corinna Vinschen <corinna@vinschen.de>
-
- * setup2.sgml (setup-locale-ov): Add description for "uz_UZ@cyrillic"
- and "tt_RU@iqtelif" modifiers. Slightly rephrase locale specifier
- description in terms of the modifier string.
-
-2010-02-05 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.2): Add grouping for printf/wprintf.
-
-2010-02-04 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.2): Add multibyte-awareness of regcomp
- and regexec.
-
-2010-02-01 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * README: Update for Cygwin docbook-utils package.
- * faq-programming.xml: Ditto.
-
-2010-01-26 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * faq-api.xml: d2u/u2d are from cygutils, not util-linux.
-
-2010-01-26 Christopher Faylor <me+cygwin@cgf.cx>
-
- * Makefile.in: Skip validation in xmlto step.
-
-2010-01-26 Christopher Faylor <me+cygwin@cgf.cx>
-
- * overview.sgml: Clarify language in "A brief history of Cygwin".
-
-2010-01-26 Thomas Wolff <towo@towo.net>
-
- * new-features.sgml (ov-new1.7.2): Add console enhancements.
-
-2010-01-25 Corinna Vinschen <corinna@vinschen.de>
-
- * faq-setup.xml: Drop references to non-NT systems.
- * faq-using.xml: Ditto.
- (faq.using.sshd-in-domain): New FAQ entry.
-
-2010-01-25 Andy Koppe <andy.koppe@gmail.com>
-
- * faq-using.xml: Fix typos and remove incorrect locale-specific
- documentation.
- * new-features.sgml: Ditto.
- * pathnames.sgml: Ditto.
-
-2010-01-24 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml: Rework layout to use itemizedlist. Fix typo.
- Add two missing entries.
-
-2010-01-23 Corinna Vinschen <corinna@vinschen.de>
-
- * setup2.sgml (setup-locale-charsetlist): Add CP932. Change description
- for SJIS.
-
-2010-01-23 Corinna Vinschen <corinna@vinschen.de>
-
- * setup2.sgml (setup-locale-charsetlist): Add ASCII and TIS-620. Add
- various aliases and case differences.
-
-2010-01-22 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7.2): Add chapter for news in 1.7.2.
- * setup2.sgml (setup-locale-ov): Describe how valid locales are
- determined by Windows locale support. Change description for modifiers
- in locale environment variables.
- (setup-locale-how): Describe new charset behaviour. Mention new
- getlocale tool to fetch valid locale information from Windows.
- (setup-locale-missing): Drop now implemented LC_foo options.
- Explain missing LC_MESSAGES in more detail.
-
-2010-01-17 Corinna Vinschen <corinna@vinschen.de>
-
- * setup2.sgml (setup-locale): Mention three character codes per
- ISO 639-3.
-
-2010-01-17 Corinna Vinschen <corinna@vinschen.de>
- Andy Koppe <andy.koppe@gmail.com>
-
- * setup2.sgml (setup-locale): Adapt description to the C using ASCII
- change in 1.7.2.
-
-2010-01-16 Christopher Faylor <me+cygwin@cgf.cx>
-
- * setup-net.sgml: Remove obsolete assertion.
-
-2010-01-15 Corinna Vinschen <corinna@vinschen.de>
-
- Suggested by Frank Fesevur <ffes@users.sourceforge.net>:
- * faq-using.xml (faq.using.bloda): Clarify wxvault.dll.
-
-2010-01-15 Christopher Faylor <me+cygwin@cgf.cx>
-
- * faq-setup.xml: Add missing setup options. Sort options.
-
-2010-01-12 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwinenv.sgml (cygwinenv-implemented-options): Try to make
- compatibility new symlinks vs. old Cygwin clearer.
-
-2010-01-10 Corinna Vinschen <corinna@vinschen.de>
-
- * pathnames.sgml (mount-table): Add info that posix=0 is default for
- the cygdrive prefix.
-
-2010-01-07 Corinna Vinschen <corinna@vinschen.de>
-
- * overview.sgml: Fix Red Hat brand name.
-
-2010-01-04 Christopher Faylor <me+cygwin@cgf.cx>
-
- * overview.sgml: Fix Red Hat URL.
-
-2009-12-23 Corinna Vinschen <corinna@vinschen.de>
-
- * pathnames.sgml (mount-table): Add missing slash in pathname.
-
-2009-12-14 Corinna Vinschen <corinna@vinschen.de>
-
- * faq-setup.xml (faq.setup.mirror): Fix URL to wget.
-
-2009-12-02 Ken Brown <kbrown@cornell.edu>
-
- * setup2.sgml (setup-env): Clarify that Windows environment gets
- copied over. Add paragraph about TMP, TEMP, and TMPDIR.
-
-2009-11-18 Corinna Vinschen <corinna@vinschen.de>
-
- * overview2.sgml (ov-hi-files): Remove reference to root directory when
- explaining fstab content. Add paragraph about Extended Attributes.
- Discourage chroot.
-
-2009-11-16 Corinna Vinschen <corinna@vinschen.de>
-
- * pathnames.sgml (pathnames-specialchars): Fix typos.
-
-2009-11-12 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7-os): Mention Windows 7 and 2008 R2.
- (ov-new1.7-device): Add API get_avphys_pages, get_nprocs,
- get_nprocs_conf, and get_phys_pages.
-
-2009-10-31 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7-misc): Add installation-specific
- unique object names description.
-
-2009-10-28 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * pathnames.sgml: Add limitation of case sensitivity with CreateProcess.
-
-2009-10-28 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7-posix): Mention UTF-8 as "C" default
- and the default locale "C.UTF-8".
- * setup2.sgml (setup-locale-ov): Ditto.
-
-2009-10-26 Christopher Faylor <me+cygwin@cgf.cx>
-
- * faq-setup.xml: Fix clean_setup.pl reference.
-
-2009-10-26 Christopher Faylor <me+cygwin@cgf.cx>
-
- * faq-setup.xml: Change clean_setup.pl reference.
-
-2009-10-15 Corinna Vinschen <corinna@vinschen.de>
-
- * faq-setup.xml (faq.setup.disk-space): Fix URL pointing to
- clean_setup.pl script.
-
-2009-10-09 Corinna Vinschen <corinna@vinschen.de>
-
- * pathnames.sgml (pathnames-specialchars): Add control chars to the
- list. Explain backslash exception.
-
-2009-10-03 Dave Korn <dave.korn.cygwin@gmail.com>
-
- * faq-using.xml (faq.using.bloda): Add Lenovo IPS Core Service.
-
-2009-10-02 Corinna Vinschen <corinna@vinschen.de>
-
- * setup2.sgml (setup-locale-ov): Fix typo in C+charset example.
- Rephrase how the locale environment variables are evaluated.
-
-2009-09-30 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7-file): Ctrl-X, not Ctrl-N.
- * pathnames.sgml (pathnames-unusual): Ditto.
- * setup2.sgml (setup-locale-ov): Change description according to
- latest changes.
- (setup-locale-how): Rewrite.
- (setup-locale-console): Enable section again. Change to reflect
- recent changes.
- (setup-locale-problems): Change to reflect recent changes.
-
-2009-09-26 Eric Blake <ebb9@byu.net>
-
- * new-features.sgml (ov-new1.7-file): Mention fexecve, execvpe.
-
-2009-09-25 Eric Blake <ebb9@byu.net>
-
- * new-features.sgml (ov-new1.7-file): Mention eaccess, euidaccess,
- canonicalize_file_name, and document change in access semantics.
-
-2009-09-24 Corinna Vinschen <corinna@vinschen.de>
-
- * setup2.sgml (setup-locale-problems): Fix charset names of codepages
- 936 and 949.
-
-2009-09-24 Eric Blake <ebb9@byu.net>
-
- * setup2.sgml (setup-locale-problems): Document how to install
- non-default charsets.
-
-2009-09-21 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7-file): Add new hardlink behaviour on
- filesystems not supporting hardlinks.
- * overview2.sgml (ov-hi-files): Change descripton accordingly.
-
-2009-08-26 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7-posix): Add "KOI8-R" and "KOI8-U"
- charsets.
-
-2009-08-22 Corinna Vinschen <corinna@vinschen.de>
-
- * setup2.sgml (setup-locale-charsetlist): Add KOI8-R and KOI8-U to list
- of supported charsets.
-
-2009-08-22 Corinna Vinschen <corinna@vinschen.de>
-
- * setup2.sgml (setup-locale-charsetlist): Add description of
- case-insensitivity of charsets. Fix a typo. Add "UTF8" to the list.
-
-2009-08-12 Dave Korn <dave.korn.cygwin@gmail.com>
-
- * faq-using.xml (faq.using.bloda): Typofix MacAfee -> McAfee.
-
-2009-07-23 Corinna Vinschen <corinna@vinschen.de>
-
- * faq-using.xml (faq.using.ipv6): Try to clarify OS specific support.
- * faq-what.xml (faq.what.supported): Add Windows 7 and 2008 R2.
- * new-features.sgml: Add "and later" to rcmd news.
-
-2009-07-20 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (all): Fix wrong target names.
- (cygwin-ug-net/cygwin-ug-net-nochunks.html.gz): Ditto.
- (cygwin-ug-net/cygwin-ug-net.pdf): Convert to use docbook2pdf.
- (cygwin-api/cygwin-api.pdf): Ditto.
-
-2009-07-20 Corinna Vinschen <corinna@vinschen.de>
-
- * faq: Throughout, revert references to User's Guide to default URL.
-
-2009-07-20 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7-misc): Add stdc++ new/delete wrappers.
-
-2009-07-20 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7-posix): Add WCONTINUED, WIFCONTINUED.
-
-2009-07-20 Corinna Vinschen <corinna@vinschen.de>
-
- * setup2.sgml (setup-locale-charsetlist): Fix ISO88-59-13 and -15
- codepage numbers.
-
-2009-07-08 Christopher Faylor <me+cygwin@cgf.cx>
-
- * pathnames.sgml: Fix typo.
-
-2009-07-03 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7-file): Add fpurge and mkstemps to new
- API functions.
-
-2009-07-01 Christopher Faylor <me+cygwin@cgf.cx>
-
- Clean up some sources.redhat.com references.
-
-2009-06-24 Corinna Vinschen <corinna@vinschen.de>
-
- * faq-setup.xml (faq.setup.setup-fails-on-ts): Fix another typo.
-
-2009-06-24 Corinna Vinschen <corinna@vinschen.de>
-
- * faq-setup.xml (faq.setup.setup-fails-on-ts): Fix typo.
-
-2009-06-23 Corinna Vinschen <corinna@vinschen.de>
-
- * faq-setup.xml (faq.setup.setup-failes-on-ts): Change rebaseall to
- rebase.
-
-2009-06-23 Corinna Vinschen <corinna@vinschen.de>
-
- * faq-setup.xml (faq.setup.setup-failes-on-ts): New FAQ entry.
-
-2009-06-19 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7-misc): Add new link libs.
- * setup2.sgml (setup-locale-ov): Explain locale-specific wcwidth
- feature.
-
-2009-06-12 Ken Brown <kbrown@cornell.edu>
-
- * faq-using.xml (faq.using.emacs): Update.
-
-2009-06-04 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml: Add changes to console BS and Space key.
-
-2009-05-26 Christopher Faylor <me+cygwin@cgf.cx>
-
- Change explicitely to explicitly throughout.
-
-2009-05-15 Corinna Vinschen <corinna@vinschen.de>
-
- * setup2.sgml (setup-locale-console): Disable section for now.
-
-2009-05-14 Corinna Vinschen <corinna@vinschen.de>
-
- * faq-setup.xml (faq.setup.upgrade-mountpoints): New entry.
- * faq-using.xml (faq.using.directory-structure): Align example to
- latest mount output.
- * pathnames.sgml (mount-table): Add note about upgrade helper scripts
- to create /etc/fstab and /etc/fstab.f/${USER}.
-
-2009-05-14 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml: Add automounting of /, /usr/bin, and /usr/lib.
- * pathnames.sgml (pathnames-intro): Be more verbose about POSIX and
- Win32 paths.
- (mount-table): Add "auto" flag. Add a paragraph about /usr/bin and
- /usr/lib.
- (pathnames-mount-ex): Enhance flags output.
-
-2009-05-13 Corinna Vinschen <corinna@vinschen.de>
- Christopher Faylor <me+cygwin@cgf.cx>
-
- * pathnames.sgml (mount-table): Sort mount options and add override
- option. Add description of root mount handling.
-
-2009-05-13 Corinna Vinschen <corinna@vinschen.de>
-
- * pathnames.sgml (pathnames-unusual): Talk about using UTF-8 in C
- locale.
- * setup2.sgml (setup-locale-problems): Ditto.
-
-2009-05-06 Corinna Vinschen <corinna@vinschen.de>
-
- * faq-setup.xml: Fix entry explaing how the homedir is evaluated
- according to recent change.
-
-2009-04-07 Corinna Vinschen <corinna@vinschen.de>
-
- * setup2.sgml (setup-locale-console): New section to explain
- console character set setting.
- * faq: Throughout, change references to User's Guide to references
- to 1.7 User's Guide temporarily.
- * faq-setup.html (faq.using.unicode): Rephrase slightly.
- (faq.using.weirdchars): New FAQ entry for console charset problems.
-
-2009-04-06 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml (ov-new1.7-posix): Remove JIS from supported
- charsets.
- * setup2.sgml (setup-locale-charsetlist): Ditto.
-
-2009-04-06 Corinna Vinschen <corinna@vinschen.de>
-
- * setup2.sgml (setup-locale-problems): Change title to be more clear
- when referencing this section.
-
-2009-04-03 Kevin Buettner <kevinb@redhat.com>
-
- * Various syntactical and semantical fixes throughout.
-
-2009-04-01 Corinna Vinschen <corinna@vinschen.de>
-
- * faq-using.xml (faq.using.symlinkstoppedworking): Rename.
- (faq.using.ipv6): New IPv6 FAQ.
- * gdb.sgml: Remove incorrect statement about Insight.
-
-2009-03-31 Corinna Vinschen <corinna@vinschen.de>
-
- * setup2.sgml (setup-locale-problems): Fix an incomplete sentence.
-
-2009-03-31 Corinna Vinschen <corinna@vinschen.de>
-
- * faq-using.xml (faq.using.unicode): Modernize.
- (faq.api.symlinkstoppedworking): Move here from faq-api.xml.
-
-2009-03-30 Dave Korn <dave.korn.cygwin@gmail.com>
-
- * faq-using.xml (faq.using.bloda): Update with new entries.
-
-2009-03-26 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwinenv.sgml: Add text to explain new UTF-16 symlinks.
- * faq-api.xml: Add FAQ entry "Why do some of my old symlinks don't
- work anymore?"
- * new-features.sgml: Fix symlink text. Add new UTF-16 symlinks.
- * overview2.sgml: Add text about new UTF-16 symlinks and potential
- problems with old symlinks.
- * pathnames.sgml: Fix typo.
- * setup2.sgml: Extend text about problems with symlinks.
-
-2009-03-26 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml: Replace GB2312 with GBK.
- * setup2.sgml: Ditto.
-
-2009-03-25 Corinna Vinschen <corinna@vinschen.de>
-
- * pathnames.sgml: Add a note that ASCII SO handling isn't foolproof
- under all circumstances.
-
-2009-03-25 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml: Add missing GB2312 and eucKR character sets.
- * pathnames.sgml: Change "DOS devices" title to "Invalid filenames"
- and rephrase that section.
- Add section "Filenames with unusual (foreign) characters".
- Fix an emphasis.
- * setup-net.sgml: Integrate setup-locale section.
- * setup2.sgml: Add locale variables to section "Environment Variables".
- Add section "Internationalization".
-
-2009-03-24 Corinna Vinschen <corinna@vinschen.de>
-
- * new-features.sgml: Add section about chaged (no)winsymlink default.
-
-2009-03-24 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwinenv.sgml: Move "codepage:xxx" to the removed options section.
- Change text accordingly.
- * new-features.sgml: Try to explain new way to define character sets.
-
-2009-03-18 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin-ug-net.in.sgml: Update date.
- * cygwinenv.sgml: Fix codepage:utf8 text in terms of setting
- environment variables.
- * new-features.sgml: New file describing new Cygwin 1.7 features.
- Layout is preliminiary only.
- * overview.sgml: Insert content of new-features.sgml.
-
-2009-03-18 Corinna Vinschen <corinna@vinschen.de>
-
- * overview2.sgml: Remove reference to CYGWIN=binmode.
- * textbinary.sgml: Ditto. Rephrase certain paragraphs to match
- Cygwin 1.7 behaviour. Add popen(3) and pipe(2) behaviour. Make
- quite clear that binmode is preferred. Add *mode.o files to
- description for developers.
-
-2009-03-09 Corinna Vinschen <corinna@vinschen.de>
-
- * pathnames.sgml: Try to be more clear explain raw devices.
-
-2009-03-03 Corinna Vinschen <corinna@vinschen.de>
-
- * faq-using.xml: Rework UTF FAQ to accommodate latest setlocale
- change in newlib.
-
-2009-03-03 Corinna Vinschen <corinna@vinschen.de>
-
- * pathnames.sgml: Remove reference to managed mountpoints in mount
- entry example.
-
-2009-02-23 Dr. Volker Zell <dr.volker.zell@oracle.com>
-
- * faq-using.xml: Rework XEmacs FAQ.
-
-2009-02-14 Corinna Vinschen <corinna@vinschen.de>
-
- * faq-using.xml: Fix usage of ampersand in NT emacs script.
-
-2009-02-14 Jari Aalto <jari.aalto@cante.net>
-
- * faq-using.xml: Expand Emacs entries.
-
-2009-02-13 Nahor <nahor.j+gmane@gmail.com>
-
- * overview.sgml: Fix 1.7 release date.
-
-2009-02-13 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin-api.in.sgml: Fix API section layout.
-
-2009-02-13 Corinna Vinschen <corinna@vinschen.de>
-
- * pathnames.sgml: Add a cygdrive section.
-
-2009-02-13 Corinna Vinschen <corinna@vinschen.de>
-
- * pathnames.sgml: Replace "binmode" with new "binary" output of mount.
-
-2009-02-12 Corinna Vinschen <corinna@vinschen.de>
-
- * faq-using.xml: First cut on Emacs.
-
-2009-02-12 Corinna Vinschen <corinna@vinschen.de>
-
- * faq-setup.xml: Revamp for Cygwin 1.7.
- * faq-using.xml: Ditto.
-
-2009-02-11 Corinna Vinschen <corinna@vinschen.de>
-
- * faq-programming.xml: Revamp (mostely) for Cygwin 1.7.
- * faq-what.xml: Ditto.
-
-2009-02-11 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (FAQ_SOURCES): Define FAQ sources.
- (faq/faq.html): Depend on FAQ sources.
- (faq/faq-nochunks.html): Ditto.
- * faq-api.xml: Revamp for Cygwin 1.7.
- * faq-problems.xml: Remove.
- * faq-sections.xml: Accommodate removal of faq-problems.xml.
- * faq.xml: Ditto.
-
-2009-02-03 Corinna Vinschen <corinna@vinschen.de>
-
- * pathnames.sgml: Rephrase the "Case sensitive filenames" chapter
- slightly.
-
-2009-01-24 Corinna Vinschen <corinna@vinschen.de>
-
- * pathnames.sgml: Add requirement for world-readability of special
- /etc files.
-
-2009-01-24 Corinna Vinschen <corinna@vinschen.de>
-
- * pathnames.sgml: Add section about accessing /etc files.
-
-2009-01-21 Corinna Vinschen <corinna@vinschen.de>
-
- * cygserver.sgml: Remove the "How to use the Cygserver services"
- section.
- * cygwinenv.sgml: Move "(no)server" to the removed options section.
- * faq-programming.xml: Remove CYGWIN=server requirement for running
- the Cygwin testsuite.
- * ntsec.sgml: Ditto for using `passwd -R'.
-
-2008-12-15 Corinna Vinschen <corinna@vinschen.de>
-
- * gcc.sgml: Use 'bash$' as Cygwin prompt throughout.
- * gdb.sgml: Ditto.
- * pathnames.sgml: Ditto. Fix the @ expansion example.
-
-2008-12-13 Christopher Faylor <me+cygwin@cgf.cx>
-
- * pathnames.sgml: Convert some backslashes to slashes.
-
-2008-12-11 Christian Franke <franke@computer.org>
-
- * pathnames.sgml: New section for /proc/registry. Document registry
- name encoding.
-
-2008-12-04 Corinna Vinschen <corinna@vinschen.de>
-
- * ntsec.sgml: Fix typo.
-
-2008-12-03 Corinna Vinschen <corinna@vinschen.de>
-
- * ntsec.sgml: Revamp parts of the doc for clearness.
-
-2008-12-02 Corinna Vinschen <corinna@vinschen.de>
-
- * ntsec.sgml: Fix a few typos.
-
-2008-12-02 Corinna Vinschen <corinna@vinschen.de>
-
- * cygserver.sgml: Fix cross reference to the ntsec documentation.
-
-2008-12-02 Corinna Vinschen <corinna@vinschen.de>
-
- * cygserver.sgml: Document new feature to store hidden passwords
- for seteuid.
-
-2008-12-02 Corinna Vinschen <corinna@vinschen.de>
-
- * ntsec.sgml: Finishing up changes for 1.7.
-
-2008-12-01 Corinna Vinschen <corinna@vinschen.de>
-
- * ntsec.sgml: Further changes for 1.7. Switch from "NT" to "Windows".
- Add preliminary text. Try to be more clear in description. Remove
- useless chapters. Finish the permission related chapters.
-
-2008-11-30 Christopher Faylor <me+cygwin@cgf.cx>
-
- * faq-using.xml: Remove assertion that lpr doesn't exist.
- * faq-what.xml: Remove ancient who's who data.
-
-2008-11-25 Christopher Faylor <me+cygwin@cgf.cx>
-
- * overview2.sgml: Reorganize and make minor wording changes.
-
-2008-11-25 Christopher Faylor <me+cygwin@cgf.cx>
-
- * overview2.sgml: Clarify unix-specific automatic updates section.
-
-2008-11-25 Corinna Vinschen <corinna@vinschen.de>
-
- Suggested by Valerio Bigiani <vbigiani@yahoo.it>:
- * overview2.sgml: Add text that no automatic updates are provided.
-
-2008-11-11 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwinenv.sgml: Add description for upcaseenv option.
-
-2008-09-22 Christopher Faylor <me+cygwin@cgf.cx>
-
- * setup2.sgml: Clarify heap allocation.
-
-2008-08-13 Corinna Vinschen <corinna@vinschen.de>
-
- * pathnames.sgml: Move description for (cyg,not)exec mount options
- from utils.sgml here. Clarify nouser mount points.
-
-2008-07-18 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwinenv.sgml: Move binmode option to list of removed options.
-
-2008-07-17 Corinna Vinschen <corinna@vinschen.de>
-
- * Revamp documentation for Cygwin 1.7, part 1.
-
-2008-07-01 Christopher Faylor <me+cygwin@cgf.cx>
-
- * Makefile.in: Temporarily add ability to generate pdfs.
-
-2008-06-26 Fred Korz <korz_fred@emc.com>
-
- * effectively.sgml: Correct subject-verb agreement, missing verb
- (typo), preposition and (definite vs indefinite) article use.
-
-2008-06-19 Christopher Faylor <me+cygwin@cgf.cx>
-
- * faq-using.xml: Add more words about multiple cygwins.
-
-2008-04-24 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin-api.in.sgml: Add std-susv4 section to Compatibility chapter.
-
-2008-04-13 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwinenv.sgml: Drop description of "transparent_exe" option.
-
-2007-29-12 Dave Korn <dave.korn@artimi.com>
-
- * faq-using.xml (faq.using.bloda): New entry.
- (faq.using.firewall, faq.using.anti-virus): Link to faq.using.bloda.
- * faq-setup.xml (faq.setup.hang): Likewise link to faq.using.bloda.
-
-2007-12-16 Christopher Faylor <me+cygwin@cgf.cx>
-
- * pathnames.xml: Fix a typo.
-
-2007-09-25 Corinna Vinschen <corinna@vinschen.de>
-
- * faq-what.xml: Remove paragraph about and link to stoneage old
- history.html file.
-
-2007-08-24 Christopher Faylor <me+cygwin@cgf.cx>
-
- * dll.sgml: myprog.ca -> myprog.c
-
-2007-08-12 Christopher Faylor <me+cygwin@cgf.cx>
-
- * faq-programming.xml: Clarify where to run "make check".
-
-2007-07-18 Brian Dessent <brian@dessent.net>
-
- * faq-using.xml (faq.using.console-window): Mention FHS location of
- docs and remove outdated reference to ash.
-
-2007-06-29 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin-api.in.sgml: Remove authorgroup and revhistory.
- * cygwin-ug.in.sgml: Add Joshua Daniel Franklin to authorgroup.
- Remove revhistory.
- * legal.sgml: Update dates.
-
-2007-06-05 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwin-api.in.sgml: Accommodate new "Compatibility" section layout.
-
-2006-12-12 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwinenv.sgml: Drop description of "traverse" option.
-
-2006-08-25 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * faq-setup.xml (faq.setup.uninstall): Mention Safe Mode
- requirement for accessing the Security tab in XP Home.
- * faq-using.xml (faq.using.chmod): Mention FAT32.
-
-2006-08-09 Christopher Faylor <cgf@timesys.com>
-
- * overview2.sgml: Remove inaccurate "full support for windows
- pathnames" clause.
-
-2006-08-01 Christopher Faylor <cgf@timesys.com>
-
- * cygwinenv.sgml: Document [no]dosfilewarning option.
-
-2006-07-18 Corinna Vinschen <corinna@vinschen.de>
-
- * pathnames.sgml: Change text for the order in which executables
- are evaluated.
-
-2006-06-01 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * faq-setup.xml (faq.setup.automated): New FAQ.
-
-2006-05-30 Dave Korn <dave.korn@artimi.com>
-
- * faq-api.xml (faq.api.winsock): Replace references to depracated
- Win32_Winsock macro with __USE_W32_WINSOCK, and enlarge on details.
-
-2006-05-24 Christopher Faylor <cgf@timesys.com>
-
- * configure.in: Update to newer autoconf.
- (thanks to Steve Ellcey)
- * configure: Regenerate.
- * aclocal.m4: New file.
-
-2006-04-04 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * faq-programming.xml (faq.programming.adjusting-heap):
- Clarify argument parameter sizes.
- * faq-using.xml (faq.using.chmod):
- Improve chmod FAQ.
-
-2006-03-18 Christopher Faylor <cgf@timesys.com>
-
- * cygwinenv.sgml: Rename fork_retry to proc_retry since it has turned
- out to be more general than just fork.
-
-2006-03-13 Christopher Faylor <cgf@timesys.com>
-
- * cygwinenv.sgml: Explain about new fork_retry CYGWIN environment
- variable setting.
-
-2006-03-07 Bas van Gompel <cygwin-patch.buzz<at>bavag.tmfweb.nl>
-
- * cygwinenv.sgml: Add missing </para> at transparent_exe.
-
-2006-02-05 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwinenv.sgml: Explain transparent_exe option.
-
-2006-02-01 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * faq-setup.xml (faq.setup.what-packages):
- Mention new cygcheck -p option.
-
-2006-01-27 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * faq-programming.xml (faq.programming.building-cygwin):
- Move cocom to the build requirements.
-
-2006-01-26 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * faq-programming.xml (faq.programming.building-cygwin):
- Simplify instructions, and remove tar usage basics.
-
-2006-01-26 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * faq-programming.xml (faq.programming.ipc): Add new FAQ about
- cygserver and its relation to the "Bad system call" error.
- * faq-setup.xml (faq.setup.uninstall-all): Mention postgresql.
- * overview2.sgml: Update security info on shared memory.
-
-2006-01-25 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * faq-programming.xml (faq.programming.building-cygwin): Add
- list of packages required for building and exact check instructions.
- * faq-setup.xml (faq.setup.uninstall-service): New instructions
- on uninstalling a cygwin service.
- (faq.setup.uninstall-all): Reference new service uninstall FAQ.
-
-2006-01-25 Igor Peshansky <pechtcha@cs.nyu.edu>
-
- * faq-setup.xml (faq.setup.snapshots): Rename DLL using Windows tools.
-
-2006-01-18 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * Makefile.in : Remove references to old texinfo FAQ.
- * calls.texinfo : Remove.
- * changes.texinfo : Remove.
- * copy.texinfo : Remove.
- * faq.texinfo : Remove.
- * history.texinfo : Remove.
- * how-api.texinfo : Remove.
- * how-programming.texinfo : Remove.
- * how-resources.texinfo : Remove.
- * how-using.texinfo : Remove.
- * how.texinfo : Remove.
- * install.texinfo : Remove.
- * readme.texinfo : Remove.
- * relnotes.texinfo : Remove.
- * what.texinfo : Remove.
- * who.texinfo : Remove.
-
-2006-01-12 Igor Peshansky <pechtcha@cs.nyu.edu>
-
- * doctool.c (scan_directory): Ignore "CVS" directories.
- * faq-setup.xml (faq.setup.setup): Correct URL typo.
- (faq.setup.snapshots): Clarify.
-
-2005-12-30 Christopher Faylor <cgf@timesys.com>
-
- * relnotes.texinfo: Remove entry about hyperthreaded processor.
-
-2005-12-30 Christopher Faylor <cgf@timesys.com>
-
- * faq-problems.html: Remove entry about hyperthreaded processor.
-
-2005-12-12 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * faq-programming.xml: Add note about struct stat64.
-
-2005-12-03 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * faq-setup.xml: Add note about clean_setup.pl.
- * faq-using.xml: Remove unnecessary line of elisp.
-
-2005-10-02 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * faq-what.xml: Add 2003 and WOW64 to "supported" FAQ.
- * faq-programming.xml: Fix cygexec FAQ, building link.
-
-2005-09-25 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * faq.xml: Remove copyright section, link to license.html
- * faq-sections.xml: Remove copyright section, link to license.html
- * faq-programming.xml: Remove confusing reference to Red Hat.
- * faq-what.xml: Reword "supported" FAQ.
-
-2005-09-15 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwinenv.sgml (ntea): Add some wording to scare people away
- from using this option.
-
-2005-08-26 Brian Dessent <brian@dessent.net>
-
- * faq-using.xml: Add 'net use' hint to network shares FAQ.
-
-2005-08-26 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * Makefile.in: Remove extra anchor to make NN4 happy.
- * faq.xml: Link to cygwin.com/license.html
- * faq-resources.xml: Link instead of duplicating info.
- * faq-using.xml: Split out services and network shares FAQ.
- * faq-what.xml: Link to cygwin.com/license.html
-
-2005-08-17 Christopher Faylor <cgf@timesys.com>
-
- * textbinary.sgml: Correct incorrect information about ability to
- specify text mode in fopen().
-
-2005-08-05 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * cygwin.dsl: Add default DOCTYPE and output filename.
- * Makefile: Update to switch FAQ from texinfo to DocBook.
- * faq.xml: New file.
- * faq-api.xml: New file.
- * faq-problems.xml: New file.
- * faq-programming.xml: New file.
- * faq-resources.xml: New file.
- * faq-sections.xml: New file.
- * faq-setup.xml: New file.
- * faq-using.xml: New file.
- * faq-what.xml: New file.
-
-2005-07-10 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * cygwinenv.sgml: Update tty section to mention rxvt and xterm.
- * how-programming.texinfo: Update GPL section of CVS FAQ.
- * how-using.texinfo: Expand FAQ about out of date packages.
- * setup-net.sgml: Add troubleshooting setup.exe section.
-
-2005-07-08 Corinna Vinschen <corinna@vinschen.de>
-
- * how-using.texinfo: Fix typos.
-
-2005-06-20 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * how-resources.texinfo: Update section on cygwin-developers.
- * how-using.texinfo: Add FAQ about firewall software. Update
- section on mounting and specifically note using managed mounts.
-
-2005-06-03 Max Kaehn <slothman@electric-cloud.com>
-
- * how-programming.texinfo: Add "How do I load cygwin1.dll dynamically
- from a Visual Studio or MinGW application?"
-
-2005-05-28 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * how-using.texinfo : Update the mkdir -p section to reflect
- changes in handling network drives.
-
-2005-05-18 Brian Dessent <brian@dessent.net>
-
- * install.texinfo ("How do I uninstall..."): Rewrite to cover
- removing services, dealing with permissions, and other common
- tasks for removing Cygwin completely.
-
-2005-05-08 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * how-programming.texinfo: Replace MAKE_MODE entry with FAQ about
- execvp errors and cygexec.
-
-2005-04-20 Brian Dessent <brian@dessent.net>
-
- * pathnames.sgml (mount-table): Indicate that user-specific
- mounts override system-wide.
-
-2005-04-20 Gerd Spalink <Gerd.Spalink@t-online.de>
-
- * fhandler-tut.txt: Update description to cygwin 1.5.13
-
-2005-04-19 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwinenv.sgml: Mention that check_case is deprecated.
-
-2005-04-16 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwinenv.sgml: Add new words for (no)traverse option.
-
-2005-03-30 Christopher Faylor <cgf@timesys.com>
-
- * how-using.texinfo: Add more words to the "multiple DLL" section.
-
-2005-03-25 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * how-programming.texinfo: Mention generic-build-script in
- packaging FAQ.
-
-2005-03-19 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * how-programming.texinfo: Remove incorrect libm.a note.
-
-2005-03-05 Christopher Faylor <cgf@timesys.com>
-
- * pathnames.sgml: Clarify binmode/textmode behavior slightly.
- * textbinary.sgml: Ditto.
-
-2005-03-03 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * how-api.texinfo: Add Pierre's security text.
-
-2005-02-23 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * README: New file.
-
-2005-01-31 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwinenv.sgml: Add words for (no)traverse option.
-
-2005-01-29 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * install.texinfo: Update setup.exe snapshot URL.
- * ntsec.sgml: Add Pierre's Windows 2003 text.
-
-2005-01-28 Corinna Vinschen <corinna@vinschen.de>
-
- * how-using.texinfo: Change text about using shortcuts.
-
-2005-01-22 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * how-api.texinfo: Make snapshot URL an HTML link.
- * how-programming.texinfo: Add details about building a
- debugging version of the DLL.
- * how-using.texinfo: Correct rxvt README location.
- * install.texinfo: Add mount -m note to uninstall instructions.
-
-2005-01-21 Christopher Faylor <cgf@timesys.com>
-
- * how-programming.texinfo: Remove obsolete w32api instructions and add
- some words about unpacking net release .tar.bz2.
-
-2004-12-30 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * path.sgml: Encode programming example with CDATA.
- * overview.sgml: Add notes about SUS, newlib, and ash.
- * overview2.sgml: Add notes about /usr/share/doc/Cygwin.
-
-2004-12-27 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * Makefile.in: Update to use xmlto.
- * cygwin.dsl: Change into DocBook XSL stylesheet for xmlto.
- * pathnames.sgml: Correct documentation of mount behavior.
-
-2004-12-24 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * cygserver.sgml: Cleanup markup for XML validity.
- * cygwin-api.in.sgml: Cleanup markup for XML validity.
- * cygwin-ug-net.in.sgml: Cleanup markup for XML validity.
- * cygwin-ug.in.sgml: Cleanup markup for XML validity.
- * cygwinenv.sgml: Cleanup markup for XML validity.
- * dll.sgml: Cleanup markup for XML validity.
- * effectively.sgml: Cleanup markup for XML validity.
- * filemodes.sgml: Cleanup markup for XML validity.
- * legal.sgml: Cleanup markup for XML validity.
- * ntsec.sgml: Cleanup markup for XML validity.
- * overview.sgml: Cleanup markup for XML validity.
- * overview2.sgml: Cleanup markup for XML validity.
- * pathnames.sgml: Cleanup markup for XML validity.
- * setup-net.sgml: Cleanup markup for XML validity.
- * setup2.sgml: Cleanup markup for XML validity.
- * textbinary.sgml: Cleanup markup for XML validity.
- * utils.sgml: Cleanup markup for XML validity.
-
-2004-12-02 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * cygserver.sgml: Cleanup minor markup problem.
- * how-resources.texinfo: Add man and info to documentation FAQ.
- * how-using.texinfo: Add more detail to Unicode FAQ.
- * install.texinfo: Finally apply Pierre's patch from 2003-03-03.
- * relnotes.texinfo: Add note about hyperthreading reports.
-
-2004-09-30 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * how-using.texinfo: Fix typo. Add note about "Install For All Users"
-
-2004-09-30 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * how-programming.texinfo: Add gcj note to WinMain@16 FAQ.
- * how-using.texinfo: Add FAQ about network shares and authentication.
- * install.texinfo: Add "Where is make" to FAQ subtitle.
-
-2004-09-24 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwinenv.sgml: smbntsec is not on by default.
-
-2004-09-14 Christopher Faylor <cgf@timesys.com>
-
- * what.texinfo: Fix two typos reported on cygwin list.
-
-2004-09-02 Corinna Vinschen <corinna@vinschen.de>
-
- * textbinary.sgml: Change default mode for non-mounted paths to binary.
-
-2004-07-16 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * how-resources.texinfo: Update documentation to /usr/share/doc.
- * how-using.texinfo: Add paragraph about find -noleaf.
-
-2004-06-14 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * how-programming.texinfo: Add section about Visual Studio linking.
-
-2004-06-13 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * faq.texinfo: Move outdated calls.texinfo to readme.texinfo.
- * how-api.texinfo: Fix typos.
- * how-programming.texinfo: Fix typos.
- * how-resources.texinfo: Fix typos.
- * how-using.texinfo: Fix typos.
- * install.texinfo: Fix typos.
- * readme.texinfo: Move outdated calls.texinfo to readme.texinfo.
-
-2004-05-21 Brian Ford <ford@vss.fsi.com>
-
- * pathnames.sgml: Remove /dev/kmem from the supported POSIX
- device list.
-
- * cygwinenv.sgml: Fix typo in check_case description.
-
-2004-03-30 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * ntsec.sgml: Replace chapter numbers with <link>s,
- replace release-numbers in <title>s with descriptions.
-
-2004-03-30 Ronald Landheer-Cieslak <ronald@landheer.com>
-
- * ntsec.sgml: Fix typos, correct chapter numbers.
-
-2004-03-29 Corinna Vinschen <corinna@vinschen.de>
-
- * pathnames.sgml: Fix /dev/srX description.
-
-2004-03-28 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * how-programming.texinfo: Make list in .lib FAQ enumerative.
-
-2004-03-28 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * how-programming.texinfo: Add note about gcc .lib linking.
- * pathnames.sgml: Mention create_devices.sh for /dev/ creation.
-
-2004-03-27 Corinna Vinschen <corinna@vinschen.de>
-
- * cygserver.sgml: New file.
- * using.sgml: Include Cygserver docs.
-
-2004-03-26 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * cygwinenv.sgml: Add example for CYGWIN=error_start.
- * pathnames.sgml: Update list of /dev/ devices.
-
-2004-02-22 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * Makefile.in: Fix problem links in faq0.html file.
- * what.texinfo: Remove outdated 'recent' history.
-
-2004-02-19 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * cygwinenv.sgml: Remove incorrect ^Z information. Add
- some tags to server option description.
- * textbinary.sgml: Remove incorrect ^Z information.
-
-2004-02-16 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwinenv.sgml: Add server option description.
-
-2004-02-04 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * Makefile.in: Generate monolithic faq0.html file.
-
-2004-01-24 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * cygwinenv.sgml: Cleanup minor markup problems.
- * dll.sgml: Cleanup minor markup problems.
- * effectively.sgml: Cleanup minor markup problems.
- * gcc.sgml: Cleanup minor markup problems.
- * ntsec.sgml: Cleanup minor markup problems.
- * pathnames.sgml: Cleanup minor markup problems.
- * setup-net.sgml: Cleanup minor markup problems.
- * textbinary.sgml: Cleanup minor markup problems.
- * windres.sgml: Cleanup minor markup problems.
-
-2004-01-20 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * Makefile.in: Remove unused cygwin-ug and cygwin-api-int
- targets from default build.
- * how-using.texinfo: Add information about 8-bit character
- display to FAQ.
- * setup2.sgml: Add information about 8-bit character display
- to "Setting up Cygwin".
-
-2004-01-15 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * setup-net.sgml: Add "internet-setup" id anchor.
- * overview.sgml: Update "What is it?" section. Add links to
- "Is it free software?" section. Update "Brief History" section.
- * overview2.sgml: Rewrite "Expectations for {Windows,Unix}"
- as "Quick Start for those more experienced with {Windows,Unix}".
-
-2004-01-11 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * Makefile.in: Add new target for single-file User's Guide, use new
- cygwin.dsl for output.
- * cygwin.dsl: New file, DSSSL stylesheet for custom Cygwin output.
- * cygwin-api.in.sgml: Update to DocBook SGML 4.2 DTD.
- * cygwin-ug-net.in.sgml: Update to DocBook SGML 4.2 DTD.
- * cygwin-ug.in.sgml: Update to DocBook SGML 4.2 DTD.
- * cygwinenv.sgml: Correct some tags. Add description of default values
- to ntsec, export, and error_start items.
- * dll.sgml: Add explanation of cyg prefix for DLLs.
- * effectively.sgml: Use systemitem tag for names of Cygwin packages.
- * how-programming.texinfo: Add example to FAQ entry.
- * pathnames.sgml: Add discussion of /proc filesystem.
- * setup-net.sgml: Correct some typos and grammar.
-
-2003-09-01 Corinna Vinschen <corinna@vinschen.de>
-
- * pathnames.sgml: Remove description how to mount raw devices and
- dicourage it. Desparately try to make usage of raw devices a bit
- clearer.
-
-2003-07-31 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * effectively.sgml: New file, "Using Cygwin Effectively with Windows".
- * legal.sgml: Update year in copyright notice.
- * using.sgml: Include "Using Cygwin Effectively with Windows" section.
-
-2003-07-15 Christopher Faylor <cgf@redhat.com>
-
- * pathnames.sgml: Use correct registry key. Clarify '@' operation.
-
-2003-07-03 Christopher Faylor <cgf@redhat.com>
-
- * ntsec.sgml: Reword references to "ntsec patch".
-
-2003-05-08 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * cygwin-ug-net.in.sgml: Remove outdated revision information and
- author's names.
-
-2003-04-26 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * gcc.sgml: Remove outdated "WinMainCRTStartup" references. Add a
- hellogui.c example.
-
-2003-03-26 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * setup-net.sgml: Make suggested additions to setup.exe documentation
-
-2003-03-23 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * setup-net.sgml: Improve setup.exe documentation
-
-2003-03-22 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * setup-net.sgml: Document setup.exe
-
-2003-02-07 Christopher Faylor <cgf@redhat.com>
-
- * how.texinfo: Add more w32api words.
-
-2003-02-07 Igor Pechtchanski <pechtcha@cs.nyu.edu>
-
- * ntsec.sgml: Add note on special names for missing user/group.
-
-2002-12-18 Christopher Faylor <cgf@redhat.com>
-
- * overview2.sgml: Remove CTRL-Z discussion.
- * cygwinenv.sgml: Expand on CYGWIN=binmode.
-
-2002-11-10 Christopher Faylor <cgf@redhat.com>
-
- * how-programming.texinfo: Document _WIN32 more fully.
-
-2002-10-22 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * ntsec.sgml: Correct some minor grammatical errors.
-
-2002-10-22 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * dll.sgml: Simplify dll build instructions.
-
-2002-09-11 Corinna Vinschen <corinna@vinschen.de>
-
- * ntsec.html: Add chapter for switching user context w/o password.
-
-2002-08-29 Christopher Faylor <cgf@redhat.com>
-
- * how-api.texinfo: Remove a line from the CRLF discussion about lseek
- not working. Answer thread safe question more simply.
-
-2002-08-27 Nicholas Wourms <nwourms@netscape.net>
-
- * calls.texinfo: Add getc_unlocked, getchar_unlocked, putc_unlocked
- and putchar_unlocked.
-
-2002-08-21 Christopher Faylor <cgf@redhat.com>
-
- * dll.sgml: Remove indirect reference to older gccs.
-
-2002-06-22 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * dll.sgml: Refine dll build instructions.
-
-2002-08-21 Christopher Faylor <cgf@redhat.com>
-
- * ntsec.html: Correct some typos.
-
-2002-07-23 Nicholas Wourms <nwourms@netscape.net>
-
- * calls.texinfo: Add fcloseall and fcloseall_r.
-
-2002-06-24 Corinna Vinschen <corinna@vinschen.de>
-
- * ntsec.sgml: Clean up text for examples of /etc/passwd and /etc/group.
- Add examples with SIDs. Warn about changing them crudely.
-
-2002-06-21 Christopher Faylor <cgf@redhat.com>
-
- * what.texinfo: Fix typo.
-
-2002-06-02 Christopher Faylor <cgf@redhat.com>
-
- * how-programming.texinfo: Add more words to the "how to build".
-
-2002-03-01 Christopher Faylor <cgf@redhat.com>
-
- * overview.sgml: Fix 'more more' typo.
-
-2002-01-12 Christopher Faylor <cgf@redhat.com>
-
- * overview.sgml: Fix Red Hat cygwin contract link.
- * what.texinfo: Ditto.
-
-2002-01-01 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Duh. Actually use bzip2 to create the tarball. Don't
- just change the name.
-
-2002-01-01 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Make .bz2 tarball.
-
-2001-12-11 Christopher Faylor <cgf@redhat.com>
-
- * what.texinfo: Clarify XP.
-
-2001-12-03 Christopher Faylor <cgf@redhat.com>
-
- Cleanup copyrights and Cygnus'isms throughout.
- * setup.sgml: Nuke ancient instructions.
-
-Tue Oct 16 18:02:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * pathnames.sgml: Cleanup raw device text to be more coherent.
-
-Tue Oct 16 17:14:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * pathnames.sgml: Add description for new fixed device paths.
-
-Fri Sep 7 12:47:47 2001 Michael Schaap <cygwin@mscha.com>
-
- * how-resources.texinfo: Add some additional words about where to find
- documentation.
-
-Wed Jun 13 13:54:35 2001 Christopher Faylor <cgf@cygnus.com>
-
- * who.texinfo: Oops. Add a couple of important folk.
-
-Wed Jun 13 13:45:44 2001 Christopher Faylor <cgf@cygnus.com>
-
- * who.texinfo: Remove email addresses. Modernize.
-
-Tue May 29 21:30:07 2001 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Tweak to attempt to accomodate older texi2html.
-
-Tue May 29 16:24:46 2001 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Accomodate newer versions of docbook and openjade.
-
-Thu Apr 12 23:52:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwinenv.sgml: Add text for `check_case' option.
-
-Fri Mar 2 12:42:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwinenv.sgml: Add text for `winsymlinks' option.
- * how-api.texinfo: Add text to explain new symlinks==shortcuts
- and the CYGWIN setting `(no)winsymlinks'.
- * how-using.texinfo: Add text that Cygwin now treats shortcuts
- as symlinks.
-
-2001-02-07 Eric M. Monsler <emonsler@beamreachnetworks.com>
-
- * setup2.sgml: Add docs about domain accounts.
-
-Thu Dec 21 15:03:29 2000 Edward M. Lee <tailbert@yahoo.com>
-
- * cygwinenv.sgml: Fix typo in <filename>. Add missing </para>.
-
-Tue Dec 19 21:06:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * cygwinenv.sgml: Add text for `smbntsec' option.
-
-Sat Nov 18 23:50:12 2000 Christopher Faylor <cgf@cygnus.com>
-
- * cygwinenv.sgml: Remove CYGWIN=strace option. Update CYGWIN options.
- * setup2.sgml: Remove CYGWIN=strace example.
- * how-programming.texinfo: Remove stuff about CYGWIN=strace.
-
-Thu Oct 26 10:00:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * ntsec.sgml: Slight changes. Fix some errors.
-
-Thu Oct 26 9:35:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * ntsec.sgml: Changed the (now incorrect) hint that ntsec only
- uses access allowed ACEs.
-
-Fri Sep 29 23:52:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * pathnames.sgml: Add documentation about raw block special
- devices and tape devices to the "POSIX devices" chapter.
-
-Fri Aug 18 15:51:06 2000 Christopher Faylor <cgf@cygnus.com>
-
- * fhandler-tut.txt: hinfo -> dtable.
-
-Thu Jul 20 13:01:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * ntsec.sgml: Add description for the new setuid ability
- of Cygwin since release 1.1.3.
- * overview2.sgml: Add description for new chroot functionality.
- * calls.texinfo: Add missing calls. Change comments for
- setuid, setgid, seteuid, setegid, chroot.
-
-Tue May 3 0:25:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * ntsec.sgml: Revisited description of `ntsec' according to
- the changes in release 1.1.
- * setup.sgml: Include ntsec.
- * setup-net.sgml: Ditto.
diff --git a/winsup/doc/Makefile.in b/winsup/doc/Makefile.in
deleted file mode 100644
index b7a8dbd8d..000000000
--- a/winsup/doc/Makefile.in
+++ /dev/null
@@ -1,108 +0,0 @@
-# -*- Makefile -*- for winsup/doc
-# Copyright (c) 1998-2000, 2001, 2002, 2004, 2005, 2006, 2008, 2009, 2010,
-# 2013, 2014 Red Hat, Inc.
-#
-# This file is part of Cygwin.
-#
-# This software is a copyrighted work licensed under the terms of the
-# Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-# details.
-
-SHELL = @SHELL@
-srcdir = @srcdir@
-VPATH = @srcdir@
-
-datarootdir:=@datarootdir@
-docdir = @docdir@
-htmldir = @htmldir@
-
-override INSTALL:=@INSTALL@
-override INSTALL_DATA:=@INSTALL_DATA@
-
-MKDIRP:=$(INSTALL) -m 755 -d
-
-CC:=@CC@
-CC_FOR_TARGET:=@CC@
-
-XMLTO:=xmlto --skip-validation --with-dblatex
-
-include $(srcdir)/../Makefile.common
-
-FAQ_SOURCES:= $(wildcard $(srcdir)/faq*.xml)
-
-.SUFFIXES: .html .body
-
-.html.body:
- $(srcdir)/bodysnatcher.pl $<
-
-.PHONY: all clean install install-all install-pdf install-html tarball
-
-all: Makefile Makefile.dep \
- cygwin-ug-net/cygwin-ug-net.html \
- cygwin-ug-net/cygwin-ug-net-nochunks.html.gz \
- cygwin-api/cygwin-api.html \
- faq/faq.body faq/faq.html \
- cygwin-ug-net/cygwin-ug-net.pdf \
- cygwin-api/cygwin-api.pdf
-
-Makefile: $(srcdir)/Makefile.in
- /bin/sh ./config.status
-
-clean:
- rm -f Makefile.dep
- rm -f *.html *.html.gz
- rm -Rf cygwin-api cygwin-ug cygwin-ug-net faq
-
-install: install-all
-
-install-all: install-pdf install-html
-
-install-pdf: cygwin-ug-net/cygwin-ug-net.pdf cygwin-api/cygwin-api.pdf
- @$(MKDIRP) $(DESTDIR)$(docdir)
- $(INSTALL_DATA) $^ $(DESTDIR)$(docdir)
-
-install-html: cygwin-ug-net/cygwin-ug-net.html cygwin-api/cygwin-api.html
- @$(MKDIRP) $(DESTDIR)$(htmldir)/cygwin-ug-net
- $(INSTALL_DATA) cygwin-ug-net/*.html $(DESTDIR)$(htmldir)/cygwin-ug-net
- $(INSTALL_DATA) cygwin-ug-net/cygwin-ug-net.html $(DESTDIR)$(htmldir)/cygwin-ug-net/index.html
- @$(MKDIRP) $(DESTDIR)$(htmldir)/cygwin-api
- $(INSTALL_DATA) cygwin-api/*.html $(DESTDIR)$(htmldir)/cygwin-api
- $(INSTALL_DATA) cygwin-api/cygwin-api.html $(DESTDIR)$(htmldir)/cygwin-api/index.html
-
-cygwin-ug-net/cygwin-ug-net-nochunks.html.gz : cygwin-ug-net.xml
- -$(XMLTO) html-nochunks -m $(srcdir)/cygwin.xsl $<
- -cp cygwin-ug-net.html cygwin-ug-net/cygwin-ug-net-nochunks.html
- -rm -f cygwin-ug-net/cygwin-ug-net-nochunks.html.gz
- -gzip cygwin-ug-net/cygwin-ug-net-nochunks.html
-
-cygwin-ug-net/cygwin-ug-net.html : cygwin-ug-net.xml cygwin.xsl
- -$(XMLTO) html -o cygwin-ug-net/ -m $(srcdir)/cygwin.xsl $<
-
-cygwin-ug-net/cygwin-ug-net.pdf : cygwin-ug-net.xml fo.xsl
- -$(XMLTO) pdf -o cygwin-ug-net/ $<
-
-cygwin-api/cygwin-api.html : cygwin-api.xml cygwin.xsl
- -$(XMLTO) html -o cygwin-api/ -m $(srcdir)/cygwin.xsl $<
-
-cygwin-api/cygwin-api.pdf : cygwin-api.xml fo.xsl
- -$(XMLTO) pdf -o cygwin-api/ $<
-
-faq/faq.html : $(FAQ_SOURCES)
- -$(XMLTO) html -o faq -m $(srcdir)/cygwin.xsl $(srcdir)/faq.xml
- -sed -i 's;<a name="id[mp][0-9]*"></a>;;g' faq/faq.html
-
-TBFILES = cygwin-ug-net.dvi cygwin-ug-net.rtf cygwin-ug-net.ps \
- cygwin-ug-net.pdf cygwin-ug-net.xml \
- cygwin-api.dvi cygwin-api.rtf cygwin-api.ps \
- cygwin-api.pdf cygwin-api.xml
-TBDIRS = cygwin-ug-net cygwin-api
-TBDEPS = cygwin-ug-net/cygwin-ug-net.html cygwin-api/cygwin-api.html
-
-tarball : cygwin-docs.tar.bz2
-cygwin-docs.tar.bz2 : $(TBFILES) $(TBDEPS)
- find $(TBFILES) $(TBDIRS) \! -type d | sort | tar -T - -cf - | bzip2 > cygwin-docs.tar.bz2
-
-Makefile.dep: cygwin-ug-net.xml cygwin-api.xml
- cd $(srcdir) && ./xidepend $^ > "${CURDIR}/$@"
-
--include Makefile.dep
diff --git a/winsup/doc/README b/winsup/doc/README
deleted file mode 100644
index 58fd88721..000000000
--- a/winsup/doc/README
+++ /dev/null
@@ -1,29 +0,0 @@
-The cygwin-doc source files are kept in CVS. Please see
-http://cygwin.com/cvs.html for more information.
-
-BUILD REQUIREMENTS:
-
-bash
-bzip2
-coreutils
-cygwin
-dblatex
-docbook-xml45
-docbook-xsl
-gzip
-make
-texinfo
-perl
-xmlto
-
-
-OTHER NOTES:
-
-You may use docbook2X to convert the DocBook files into info pages.
-I have not been able to get a working docbook2X installation on Cygwin,
-so currently I convert the files on a machine running GNU/Linux.
-
-A few handmade files (cygwin.texi, intro.3, etc.) are found in the
-cygwin-doc-x.y-z-src.tar.bz2 package. It also contains the utilities for
-building the cygwin-doc-x.y-z "binary" package--simply run each step in
-the cygwin-doc-x.y-z.sh script.
diff --git a/winsup/doc/Wishlist b/winsup/doc/Wishlist
deleted file mode 100644
index 9e7aa4ca1..000000000
--- a/winsup/doc/Wishlist
+++ /dev/null
@@ -1,111 +0,0 @@
-- Change the '-' prefixes on Makefile.in commands to '@'. We only want
- to avoid echoing the commands, not keep on trucking past build
- errors.
-
-- Cygwin API docs update:
-
- - Either:
-
- - Convert existing SGML code embedded in Cygwin source code
- to Doxygen format, then set up HTML and PDF reference manual
- generation in doc/Makefile.in. Then, remove vestiges of doctool.
-
- The Cygwin User Manual reportedly references pieces of the
- current SGML that makes up the API Manual, which if true means
- we have a challenge to make the Doxygen process continue to feed
- the user manual.
-
- - Or, move all SGML from winsup/cygwin into winsup/doc/api.
-
- - Current POSIX documentation is nonexistent. Either:
-
- - Fork the current POSIX/Linux manpages. Downside of this is that
- it's in nroff format and the license demands that nroff sources
- continue to be made available. This is a challenge for PDF
- manual integration.
-
- - Switch to Doxygen, which lets us have skeletal POSIX docs almost
- for free. Each can point to web docs for more complete info, such
- that the Cygwin man pages only need to provide parameter lists and
- document Cygwinisms in the implementation.
-
- - Write our own man pages in DocBook <refentry> form. Such files
- should be XInclude-able in regular API/user manuals, and only have
- to have the same mininal info as in the Doxygen case above. It
- just requires a more verbose markup format.
-
-- Remove autotools outputs from repo. (configure, Makefile, etc.)
- Create a bootstrap script to generate them. Make sure top-level
- "make" process knows how to call the bootstrap script at need.
-
-- There are absolute HTTP <ulinks> which should be transformed to
- relative links so that they do the right thing when you move the docs
- around. Maybe they'll never live somewhere else on cygwin.com, but if
- nothing else, they currently do the wrong thing when you open one of the
- generated .html files from the local filesystem: hyperlinks take you off
- to cygwin.com instead of to the relevant local file.
-
-- Convert remaining code snippets from HTML entity form (&amp;,
- &lt;...) to raw C/C++ code in CDATA sections. Easier to read and
- edit in XML form.
-
-- Pretty code snippets. Search for a DocBook aware automatic code
- formatter that will take raw example code in and mark it up, as exists
- for HTML. If one can't be found or created -- e.g. by lashing an HTML
- code formatter to a sed script then whipping them until they sing -- do
- the markup by hand.
-
-- Move to DocBook 5.
-
-- Files are often named with less detail than the ID of the top-level
- XML element it contains. For example, specialnames.xml contains
- <sect1 id="using-specialnames">. The ID scheme seems hierarchical, so
- maybe the files should go into subdirectories; e.g.
- using/specialnames.xml. This would help with the proliferation of files
- this "patch" created.
-
-- "Tidy" the XML files.
-
-- Remove --skip-validation from XMLTO flags variable in Makefile.in,
- then fix any errors and warnings that result.
-
-- Replace the hard-coded dates in <bookinfo><date> tags with DocBook
- time stamps. (http://www.sagehill.net/docbookxsl/Datetime.html)
-
-- cygwin-ug-net/cygwin-ug-net-nochunks.html.gz build rules can probably
- be reduced to a one-liner by moving from xmlto wrapper to a raw
- xsltproc call.
-
-- Is xmlto pulling its own weight for the HTML case? It *might* have
- some value for the PDF-via-dblatex case, but an xsltproc call for HTML
- is also a one-liner.
-
-- Switch from xmlto/dblatex to xsltproc/FOP for PDF? Might be a
- prerequisite to the font changes below if dblatex doesn't allow
- one to specify fonts through the xmlto layer.
-
-- Typography improvements: curl all the quotation marks, replace "--"
- with em dashes, check proper names for missing accents, etc.
-
-- Adapt top-level cygwin.com CSS to DocBook HTML output so the user
- guide blends with the rest of the site. (Something like this has
- been done to cygwin.com/faq.html already.)
-
-- Improve PDF styling:
-
- - Wider margins, section indenting, etc. (i.e. Fix the "wall of text"
- problem.)
-
- - Current fonts are Business Blah at best. Most severe to least:
-
- - Courier for code is just plain ugly, and is apparently a bitmap
- font in some people's PDF output besides. Switch to Deja Vu,
- Inconsolata, or Adobe Source Code Pro.
-
- - Times. Sigh. There must be something better in the free world,
- something more in the Palatino or Garamond mold. Bitstream Vera
- Serif? Linux Libertine?
-
- - Arial/Helvetica/whatever. Not a serious issue, but we can do
- better, even if it's just a minor shake-up, like switching to a
- condensed face.
diff --git a/winsup/doc/aclocal.m4 b/winsup/doc/aclocal.m4
deleted file mode 100644
index ecef4244c..000000000
--- a/winsup/doc/aclocal.m4
+++ /dev/null
@@ -1,875 +0,0 @@
-dnl aclocal.m4 generated automatically by aclocal 1.4-p6
-
-dnl Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl This program is distributed in the hope that it will be useful,
-dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-dnl PARTICULAR PURPOSE.
-
-# lib-prefix.m4 serial 4 (gettext-0.14.2)
-dnl Copyright (C) 2001-2005 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Bruno Haible.
-
-dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and
-dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't
-dnl require excessive bracketing.
-ifdef([AC_HELP_STRING],
-[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])],
-[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])])
-
-dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed
-dnl to access previously installed libraries. The basic assumption is that
-dnl a user will want packages to use other packages he previously installed
-dnl with the same --prefix option.
-dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate
-dnl libraries, but is otherwise very convenient.
-AC_DEFUN([AC_LIB_PREFIX],
-[
- AC_BEFORE([$0], [AC_LIB_LINKFLAGS])
- AC_REQUIRE([AC_PROG_CC])
- AC_REQUIRE([AC_CANONICAL_HOST])
- AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
- dnl By default, look in $includedir and $libdir.
- use_additional=yes
- AC_LIB_WITH_FINAL_PREFIX([
- eval additional_includedir=\"$includedir\"
- eval additional_libdir=\"$libdir\"
- ])
- AC_LIB_ARG_WITH([lib-prefix],
-[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib
- --without-lib-prefix don't search for libraries in includedir and libdir],
-[
- if test "X$withval" = "Xno"; then
- use_additional=no
- else
- if test "X$withval" = "X"; then
- AC_LIB_WITH_FINAL_PREFIX([
- eval additional_includedir=\"$includedir\"
- eval additional_libdir=\"$libdir\"
- ])
- else
- additional_includedir="$withval/include"
- additional_libdir="$withval/lib"
- fi
- fi
-])
- if test $use_additional = yes; then
- dnl Potentially add $additional_includedir to $CPPFLAGS.
- dnl But don't add it
- dnl 1. if it's the standard /usr/include,
- dnl 2. if it's already present in $CPPFLAGS,
- dnl 3. if it's /usr/local/include and we are using GCC on Linux,
- dnl 4. if it doesn't exist as a directory.
- if test "X$additional_includedir" != "X/usr/include"; then
- haveit=
- for x in $CPPFLAGS; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- if test "X$x" = "X-I$additional_includedir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- if test "X$additional_includedir" = "X/usr/local/include"; then
- if test -n "$GCC"; then
- case $host_os in
- linux* | gnu* | k*bsd*-gnu) haveit=yes;;
- esac
- fi
- fi
- if test -z "$haveit"; then
- if test -d "$additional_includedir"; then
- dnl Really add $additional_includedir to $CPPFLAGS.
- CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir"
- fi
- fi
- fi
- fi
- dnl Potentially add $additional_libdir to $LDFLAGS.
- dnl But don't add it
- dnl 1. if it's the standard /usr/lib,
- dnl 2. if it's already present in $LDFLAGS,
- dnl 3. if it's /usr/local/lib and we are using GCC on Linux,
- dnl 4. if it doesn't exist as a directory.
- if test "X$additional_libdir" != "X/usr/lib"; then
- haveit=
- for x in $LDFLAGS; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- if test "X$x" = "X-L$additional_libdir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- if test "X$additional_libdir" = "X/usr/local/lib"; then
- if test -n "$GCC"; then
- case $host_os in
- linux*) haveit=yes;;
- esac
- fi
- fi
- if test -z "$haveit"; then
- if test -d "$additional_libdir"; then
- dnl Really add $additional_libdir to $LDFLAGS.
- LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir"
- fi
- fi
- fi
- fi
- fi
-])
-
-dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix,
-dnl acl_final_exec_prefix, containing the values to which $prefix and
-dnl $exec_prefix will expand at the end of the configure script.
-AC_DEFUN([AC_LIB_PREPARE_PREFIX],
-[
- dnl Unfortunately, prefix and exec_prefix get only finally determined
- dnl at the end of configure.
- if test "X$prefix" = "XNONE"; then
- acl_final_prefix="$ac_default_prefix"
- else
- acl_final_prefix="$prefix"
- fi
- if test "X$exec_prefix" = "XNONE"; then
- acl_final_exec_prefix='${prefix}'
- else
- acl_final_exec_prefix="$exec_prefix"
- fi
- acl_save_prefix="$prefix"
- prefix="$acl_final_prefix"
- eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
- prefix="$acl_save_prefix"
-])
-
-dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the
-dnl variables prefix and exec_prefix bound to the values they will have
-dnl at the end of the configure script.
-AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX],
-[
- acl_save_prefix="$prefix"
- prefix="$acl_final_prefix"
- acl_save_exec_prefix="$exec_prefix"
- exec_prefix="$acl_final_exec_prefix"
- $1
- exec_prefix="$acl_save_exec_prefix"
- prefix="$acl_save_prefix"
-])
-
-# lib-link.m4 serial 6 (gettext-0.14.3)
-dnl Copyright (C) 2001-2005 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Bruno Haible.
-
-AC_PREREQ(2.50)
-
-dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and
-dnl the libraries corresponding to explicit and implicit dependencies.
-dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and
-dnl augments the CPPFLAGS variable.
-AC_DEFUN([AC_LIB_LINKFLAGS],
-[
- AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
- AC_REQUIRE([AC_LIB_RPATH])
- define([Name],[translit([$1],[./-], [___])])
- define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
- [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
- AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [
- AC_LIB_LINKFLAGS_BODY([$1], [$2])
- ac_cv_lib[]Name[]_libs="$LIB[]NAME"
- ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME"
- ac_cv_lib[]Name[]_cppflags="$INC[]NAME"
- ])
- LIB[]NAME="$ac_cv_lib[]Name[]_libs"
- LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs"
- INC[]NAME="$ac_cv_lib[]Name[]_cppflags"
- AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
- AC_SUBST([LIB]NAME)
- AC_SUBST([LTLIB]NAME)
- dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the
- dnl results of this search when this library appears as a dependency.
- HAVE_LIB[]NAME=yes
- undefine([Name])
- undefine([NAME])
-])
-
-dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode)
-dnl searches for libname and the libraries corresponding to explicit and
-dnl implicit dependencies, together with the specified include files and
-dnl the ability to compile and link the specified testcode. If found, it
-dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and
-dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and
-dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs
-dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty.
-AC_DEFUN([AC_LIB_HAVE_LINKFLAGS],
-[
- AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
- AC_REQUIRE([AC_LIB_RPATH])
- define([Name],[translit([$1],[./-], [___])])
- define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
- [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
-
- dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME
- dnl accordingly.
- AC_LIB_LINKFLAGS_BODY([$1], [$2])
-
- dnl Add $INC[]NAME to CPPFLAGS before performing the following checks,
- dnl because if the user has installed lib[]Name and not disabled its use
- dnl via --without-lib[]Name-prefix, he wants to use it.
- ac_save_CPPFLAGS="$CPPFLAGS"
- AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
-
- AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [
- ac_save_LIBS="$LIBS"
- LIBS="$LIBS $LIB[]NAME"
- AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no])
- LIBS="$ac_save_LIBS"
- ])
- if test "$ac_cv_lib[]Name" = yes; then
- HAVE_LIB[]NAME=yes
- AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.])
- AC_MSG_CHECKING([how to link with lib[]$1])
- AC_MSG_RESULT([$LIB[]NAME])
- else
- HAVE_LIB[]NAME=no
- dnl If $LIB[]NAME didn't lead to a usable library, we don't need
- dnl $INC[]NAME either.
- CPPFLAGS="$ac_save_CPPFLAGS"
- LIB[]NAME=
- LTLIB[]NAME=
- fi
- AC_SUBST([HAVE_LIB]NAME)
- AC_SUBST([LIB]NAME)
- AC_SUBST([LTLIB]NAME)
- undefine([Name])
- undefine([NAME])
-])
-
-dnl Determine the platform dependent parameters needed to use rpath:
-dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator,
-dnl hardcode_direct, hardcode_minus_L.
-AC_DEFUN([AC_LIB_RPATH],
-[
- dnl Tell automake >= 1.10 to complain if config.rpath is missing.
- m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])])
- AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS
- AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld
- AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host
- AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir
- AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [
- CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
- ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
- . ./conftest.sh
- rm -f ./conftest.sh
- acl_cv_rpath=done
- ])
- wl="$acl_cv_wl"
- libext="$acl_cv_libext"
- shlibext="$acl_cv_shlibext"
- hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
- hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
- hardcode_direct="$acl_cv_hardcode_direct"
- hardcode_minus_L="$acl_cv_hardcode_minus_L"
- dnl Determine whether the user wants rpath handling at all.
- AC_ARG_ENABLE(rpath,
- [ --disable-rpath do not hardcode runtime library paths],
- :, enable_rpath=yes)
-])
-
-dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and
-dnl the libraries corresponding to explicit and implicit dependencies.
-dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables.
-AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
-[
- define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
- [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
- dnl By default, look in $includedir and $libdir.
- use_additional=yes
- AC_LIB_WITH_FINAL_PREFIX([
- eval additional_includedir=\"$includedir\"
- eval additional_libdir=\"$libdir\"
- ])
- AC_LIB_ARG_WITH([lib$1-prefix],
-[ --with-lib$1-prefix[=DIR] search for lib$1 in DIR/include and DIR/lib
- --without-lib$1-prefix don't search for lib$1 in includedir and libdir],
-[
- if test "X$withval" = "Xno"; then
- use_additional=no
- else
- if test "X$withval" = "X"; then
- AC_LIB_WITH_FINAL_PREFIX([
- eval additional_includedir=\"$includedir\"
- eval additional_libdir=\"$libdir\"
- ])
- else
- additional_includedir="$withval/include"
- additional_libdir="$withval/lib"
- fi
- fi
-])
- dnl Search the library and its dependencies in $additional_libdir and
- dnl $LDFLAGS. Using breadth-first-seach.
- LIB[]NAME=
- LTLIB[]NAME=
- INC[]NAME=
- rpathdirs=
- ltrpathdirs=
- names_already_handled=
- names_next_round='$1 $2'
- while test -n "$names_next_round"; do
- names_this_round="$names_next_round"
- names_next_round=
- for name in $names_this_round; do
- already_handled=
- for n in $names_already_handled; do
- if test "$n" = "$name"; then
- already_handled=yes
- break
- fi
- done
- if test -z "$already_handled"; then
- names_already_handled="$names_already_handled $name"
- dnl See if it was already located by an earlier AC_LIB_LINKFLAGS
- dnl or AC_LIB_HAVE_LINKFLAGS call.
- uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
- eval value=\"\$HAVE_LIB$uppername\"
- if test -n "$value"; then
- if test "$value" = yes; then
- eval value=\"\$LIB$uppername\"
- test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value"
- eval value=\"\$LTLIB$uppername\"
- test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value"
- else
- dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined
- dnl that this library doesn't exist. So just drop it.
- :
- fi
- else
- dnl Search the library lib$name in $additional_libdir and $LDFLAGS
- dnl and the already constructed $LIBNAME/$LTLIBNAME.
- found_dir=
- found_la=
- found_so=
- found_a=
- if test $use_additional = yes; then
- if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then
- found_dir="$additional_libdir"
- found_so="$additional_libdir/lib$name.$shlibext"
- if test -f "$additional_libdir/lib$name.la"; then
- found_la="$additional_libdir/lib$name.la"
- fi
- else
- if test -f "$additional_libdir/lib$name.$libext"; then
- found_dir="$additional_libdir"
- found_a="$additional_libdir/lib$name.$libext"
- if test -f "$additional_libdir/lib$name.la"; then
- found_la="$additional_libdir/lib$name.la"
- fi
- fi
- fi
- fi
- if test "X$found_dir" = "X"; then
- for x in $LDFLAGS $LTLIB[]NAME; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- case "$x" in
- -L*)
- dir=`echo "X$x" | sed -e 's/^X-L//'`
- if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then
- found_dir="$dir"
- found_so="$dir/lib$name.$shlibext"
- if test -f "$dir/lib$name.la"; then
- found_la="$dir/lib$name.la"
- fi
- else
- if test -f "$dir/lib$name.$libext"; then
- found_dir="$dir"
- found_a="$dir/lib$name.$libext"
- if test -f "$dir/lib$name.la"; then
- found_la="$dir/lib$name.la"
- fi
- fi
- fi
- ;;
- esac
- if test "X$found_dir" != "X"; then
- break
- fi
- done
- fi
- if test "X$found_dir" != "X"; then
- dnl Found the library.
- LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name"
- if test "X$found_so" != "X"; then
- dnl Linking with a shared library. We attempt to hardcode its
- dnl directory into the executable's runpath, unless it's the
- dnl standard /usr/lib.
- if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then
- dnl No hardcoding is needed.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
- else
- dnl Use an explicit option to hardcode DIR into the resulting
- dnl binary.
- dnl Potentially add DIR to ltrpathdirs.
- dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
- haveit=
- for x in $ltrpathdirs; do
- if test "X$x" = "X$found_dir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- ltrpathdirs="$ltrpathdirs $found_dir"
- fi
- dnl The hardcoding into $LIBNAME is system dependent.
- if test "$hardcode_direct" = yes; then
- dnl Using DIR/libNAME.so during linking hardcodes DIR into the
- dnl resulting binary.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
- else
- if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
- dnl Use an explicit option to hardcode DIR into the resulting
- dnl binary.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
- dnl Potentially add DIR to rpathdirs.
- dnl The rpathdirs will be appended to $LIBNAME at the end.
- haveit=
- for x in $rpathdirs; do
- if test "X$x" = "X$found_dir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- rpathdirs="$rpathdirs $found_dir"
- fi
- else
- dnl Rely on "-L$found_dir".
- dnl But don't add it if it's already contained in the LDFLAGS
- dnl or the already constructed $LIBNAME
- haveit=
- for x in $LDFLAGS $LIB[]NAME; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- if test "X$x" = "X-L$found_dir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir"
- fi
- if test "$hardcode_minus_L" != no; then
- dnl FIXME: Not sure whether we should use
- dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
- dnl here.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
- else
- dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH
- dnl here, because this doesn't fit in flags passed to the
- dnl compiler. So give up. No hardcoding. This affects only
- dnl very old systems.
- dnl FIXME: Not sure whether we should use
- dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
- dnl here.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
- fi
- fi
- fi
- fi
- else
- if test "X$found_a" != "X"; then
- dnl Linking with a static library.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a"
- else
- dnl We shouldn't come here, but anyway it's good to have a
- dnl fallback.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name"
- fi
- fi
- dnl Assume the include files are nearby.
- additional_includedir=
- case "$found_dir" in
- */lib | */lib/)
- basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'`
- additional_includedir="$basedir/include"
- ;;
- esac
- if test "X$additional_includedir" != "X"; then
- dnl Potentially add $additional_includedir to $INCNAME.
- dnl But don't add it
- dnl 1. if it's the standard /usr/include,
- dnl 2. if it's /usr/local/include and we are using GCC on Linux,
- dnl 3. if it's already present in $CPPFLAGS or the already
- dnl constructed $INCNAME,
- dnl 4. if it doesn't exist as a directory.
- if test "X$additional_includedir" != "X/usr/include"; then
- haveit=
- if test "X$additional_includedir" = "X/usr/local/include"; then
- if test -n "$GCC"; then
- case $host_os in
- linux* | gnu* | k*bsd*-gnu) haveit=yes;;
- esac
- fi
- fi
- if test -z "$haveit"; then
- for x in $CPPFLAGS $INC[]NAME; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- if test "X$x" = "X-I$additional_includedir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- if test -d "$additional_includedir"; then
- dnl Really add $additional_includedir to $INCNAME.
- INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir"
- fi
- fi
- fi
- fi
- fi
- dnl Look for dependencies.
- if test -n "$found_la"; then
- dnl Read the .la file. It defines the variables
- dnl dlname, library_names, old_library, dependency_libs, current,
- dnl age, revision, installed, dlopen, dlpreopen, libdir.
- save_libdir="$libdir"
- case "$found_la" in
- */* | *\\*) . "$found_la" ;;
- *) . "./$found_la" ;;
- esac
- libdir="$save_libdir"
- dnl We use only dependency_libs.
- for dep in $dependency_libs; do
- case "$dep" in
- -L*)
- additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
- dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME.
- dnl But don't add it
- dnl 1. if it's the standard /usr/lib,
- dnl 2. if it's /usr/local/lib and we are using GCC on Linux,
- dnl 3. if it's already present in $LDFLAGS or the already
- dnl constructed $LIBNAME,
- dnl 4. if it doesn't exist as a directory.
- if test "X$additional_libdir" != "X/usr/lib"; then
- haveit=
- if test "X$additional_libdir" = "X/usr/local/lib"; then
- if test -n "$GCC"; then
- case $host_os in
- linux* | gnu* | k*bsd*-gnu) haveit=yes;;
- esac
- fi
- fi
- if test -z "$haveit"; then
- haveit=
- for x in $LDFLAGS $LIB[]NAME; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- if test "X$x" = "X-L$additional_libdir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- if test -d "$additional_libdir"; then
- dnl Really add $additional_libdir to $LIBNAME.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir"
- fi
- fi
- haveit=
- for x in $LDFLAGS $LTLIB[]NAME; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- if test "X$x" = "X-L$additional_libdir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- if test -d "$additional_libdir"; then
- dnl Really add $additional_libdir to $LTLIBNAME.
- LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir"
- fi
- fi
- fi
- fi
- ;;
- -R*)
- dir=`echo "X$dep" | sed -e 's/^X-R//'`
- if test "$enable_rpath" != no; then
- dnl Potentially add DIR to rpathdirs.
- dnl The rpathdirs will be appended to $LIBNAME at the end.
- haveit=
- for x in $rpathdirs; do
- if test "X$x" = "X$dir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- rpathdirs="$rpathdirs $dir"
- fi
- dnl Potentially add DIR to ltrpathdirs.
- dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
- haveit=
- for x in $ltrpathdirs; do
- if test "X$x" = "X$dir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- ltrpathdirs="$ltrpathdirs $dir"
- fi
- fi
- ;;
- -l*)
- dnl Handle this in the next round.
- names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
- ;;
- *.la)
- dnl Handle this in the next round. Throw away the .la's
- dnl directory; it is already contained in a preceding -L
- dnl option.
- names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
- ;;
- *)
- dnl Most likely an immediate library name.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep"
- LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep"
- ;;
- esac
- done
- fi
- else
- dnl Didn't find the library; assume it is in the system directories
- dnl known to the linker and runtime loader. (All the system
- dnl directories known to the linker should also be known to the
- dnl runtime loader, otherwise the system is severely misconfigured.)
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
- LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name"
- fi
- fi
- fi
- done
- done
- if test "X$rpathdirs" != "X"; then
- if test -n "$hardcode_libdir_separator"; then
- dnl Weird platform: only the last -rpath option counts, the user must
- dnl pass all path elements in one option. We can arrange that for a
- dnl single library, but not when more than one $LIBNAMEs are used.
- alldirs=
- for found_dir in $rpathdirs; do
- alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
- done
- dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl.
- acl_save_libdir="$libdir"
- libdir="$alldirs"
- eval flag=\"$hardcode_libdir_flag_spec\"
- libdir="$acl_save_libdir"
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
- else
- dnl The -rpath options are cumulative.
- for found_dir in $rpathdirs; do
- acl_save_libdir="$libdir"
- libdir="$found_dir"
- eval flag=\"$hardcode_libdir_flag_spec\"
- libdir="$acl_save_libdir"
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
- done
- fi
- fi
- if test "X$ltrpathdirs" != "X"; then
- dnl When using libtool, the option that works for both libraries and
- dnl executables is -R. The -R options are cumulative.
- for found_dir in $ltrpathdirs; do
- LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir"
- done
- fi
-])
-
-dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR,
-dnl unless already present in VAR.
-dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes
-dnl contains two or three consecutive elements that belong together.
-AC_DEFUN([AC_LIB_APPENDTOVAR],
-[
- for element in [$2]; do
- haveit=
- for x in $[$1]; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- if test "X$x" = "X$element"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- [$1]="${[$1]}${[$1]:+ }$element"
- fi
- done
-])
-
-# lib-ld.m4 serial 3 (gettext-0.13)
-dnl Copyright (C) 1996-2003 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl Subroutines of libtool.m4,
-dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision
-dnl with libtool.m4.
-
-dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no.
-AC_DEFUN([AC_LIB_PROG_LD_GNU],
-[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld,
-[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
-case `$LD -v 2>&1 </dev/null` in
-*GNU* | *'with BFD'*)
- acl_cv_prog_gnu_ld=yes ;;
-*)
- acl_cv_prog_gnu_ld=no ;;
-esac])
-with_gnu_ld=$acl_cv_prog_gnu_ld
-])
-
-dnl From libtool-1.4. Sets the variable LD.
-AC_DEFUN([AC_LIB_PROG_LD],
-[AC_ARG_WITH(gnu-ld,
-[ --with-gnu-ld assume the C compiler uses GNU ld [default=no]],
-test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
-AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([AC_CANONICAL_HOST])dnl
-# Prepare PATH_SEPARATOR.
-# 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
-ac_prog=ld
-if test "$GCC" = yes; then
- # Check if gcc -print-prog-name=ld gives a path.
- AC_MSG_CHECKING([for ld used by GCC])
- case $host in
- *-*-mingw*)
- # gcc leaves a trailing carriage return which upsets mingw
- ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
- *)
- ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
- esac
- case $ac_prog in
- # Accept absolute paths.
- [[\\/]* | [A-Za-z]:[\\/]*)]
- [re_direlt='/[^/][^/]*/\.\./']
- # Canonicalize the path of ld
- ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
- while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
- ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
- done
- test -z "$LD" && LD="$ac_prog"
- ;;
- "")
- # If it fails, then pretend we aren't using GCC.
- ac_prog=ld
- ;;
- *)
- # If it is relative, then search for the first ld in PATH.
- with_gnu_ld=unknown
- ;;
- esac
-elif test "$with_gnu_ld" = yes; then
- AC_MSG_CHECKING([for GNU ld])
-else
- AC_MSG_CHECKING([for non-GNU ld])
-fi
-AC_CACHE_VAL(acl_cv_path_LD,
-[if test -z "$LD"; then
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
- for ac_dir in $PATH; do
- test -z "$ac_dir" && ac_dir=.
- if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
- acl_cv_path_LD="$ac_dir/$ac_prog"
- # Check to see if the program is GNU ld. I'd rather use --version,
- # but apparently some GNU ld's only accept -v.
- # Break only if it was the GNU/non-GNU ld that we prefer.
- case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in
- *GNU* | *'with BFD'*)
- test "$with_gnu_ld" != no && break ;;
- *)
- test "$with_gnu_ld" != yes && break ;;
- esac
- fi
- done
- IFS="$ac_save_ifs"
-else
- acl_cv_path_LD="$LD" # Let the user override the test with a path.
-fi])
-LD="$acl_cv_path_LD"
-if test -n "$LD"; then
- AC_MSG_RESULT($LD)
-else
- AC_MSG_RESULT(no)
-fi
-test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
-AC_LIB_PROG_LD_GNU
-])
-
-dnl This provides configure definitions used by all the winsup
-dnl configure.in files.
-
-# FIXME: We temporarily define our own version of AC_PROG_CC. This is
-# copied from autoconf 2.12, but does not call AC_PROG_CC_WORKS. We
-# are probably using a cross compiler, which will not be able to fully
-# link an executable. This should really be fixed in autoconf
-# itself.
-
-AC_DEFUN([LIB_AC_PROG_CC_GNU],
-[AC_CACHE_CHECK(whether we are using GNU C, ac_cv_prog_gcc,
-[dnl The semicolon is to pacify NeXT's syntax-checking cpp.
-cat > conftest.c <<EOF
-#ifdef __GNUC__
- yes;
-#endif
-EOF
-if AC_TRY_COMMAND(${CC-cc} -E conftest.c) | egrep yes >/dev/null 2>&1; then
- ac_cv_prog_gcc=yes
-else
- ac_cv_prog_gcc=no
-fi])])
-
-AC_DEFUN([LIB_AC_PROG_CC],
-[AC_BEFORE([$0], [AC_PROG_CPP])dnl
-AC_CHECK_TOOL(CC, gcc, gcc)
-: ${CC:=gcc}
-AC_PROG_CC
-test -z "$CC" && AC_MSG_ERROR([no acceptable cc found in \$PATH])
-])
-
-AC_DEFUN([LIB_AC_PROG_CXX],
-[AC_BEFORE([$0], [AC_PROG_CPP])dnl
-AC_CHECK_TOOL(CXX, g++, g++)
-if test -z "$CXX"; then
- AC_CHECK_TOOL(CXX, g++, c++, , , )
- : ${CXX:=g++}
- AC_PROG_CXX
- test -z "$CC" && AC_MSG_ERROR([no acceptable cc found in \$PATH])
-fi
-
-CXXFLAGS='$(CFLAGS)'
-])
-
diff --git a/winsup/doc/bodysnatcher.pl b/winsup/doc/bodysnatcher.pl
deleted file mode 100755
index 1db30aad4..000000000
--- a/winsup/doc/bodysnatcher.pl
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/usr/bin/perl -w
-# Copyright © 2013 by Red Hat, Inc.
-#
-# This file is part of Cygwin.
-#
-# This software is a copyrighted work licensed under the terms of the
-# Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-# details.
-
-use strict;
-
-if (@ARGV) {
- my $infile = $ARGV[0];
- my $outfile = $infile;
- $outfile =~ s/\.html$/.body/;
- if ($infile ne $outfile) {
- open my $input, '<', $infile or die "Failed to open $infile: $!\n";
- my $html = do { local $/; <$input> }; # slurp!
- my ($body) = $html =~ m|<body[^>]*>(.*)</body>|is;
- if ($body) {
- open my $output, '>', $outfile
- or die "Failed to write $outfile: $!\n";
- print $output $body;
- }
- else {
- print STDERR "Could not find <body> element in $infile!\n\n";
- exit 3;
- }
- }
- else {
- print STDERR "Input file name must end in .html!\n\n";
- exit 2;
- }
-}
-else {
- print STDERR <<USAGE;
-usage: $0 <input.html>
-
- Transforms input.html to input.body by extracting whatever is
- between <body> and </body> in input.html.
-
-USAGE
- exit 1;
-}
diff --git a/winsup/doc/configure b/winsup/doc/configure
deleted file mode 100755
index a484c8de8..000000000
--- a/winsup/doc/configure
+++ /dev/null
@@ -1,4116 +0,0 @@
-#! /bin/sh
-# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for Cygwin Documentation 0.
-#
-# Report bugs to <cygwin@cygwin.com>.
-#
-#
-# Copyright (C) 1992-1996, 1998-2012 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 more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in #(
- *posix*) :
- set -o posix ;; #(
- *) :
- ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- PATH_SEPARATOR=:
- (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
- (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
- PATH_SEPARATOR=';'
- }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
-# Find who we are. Look in the path if we contain no directory separator.
-as_myself=
-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
-IFS=$as_save_IFS
-
- ;;
-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
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
- exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-# Use a proper internal environment variable to ensure we don't fall
- # into an infinite loop, continuously re-executing ourselves.
- if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
- _as_can_reexec=no; export _as_can_reexec;
- # We cannot yet assume a decent shell, so we have to provide a
-# neutralization value for shells without unset; and this also
-# works around shells that cannot unset nonexistent variables.
-# Preserve -v and -x to the replacement shell.
-BASH_ENV=/dev/null
-ENV=/dev/null
-(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-case $- in # ((((
- *v*x* | *x*v* ) as_opts=-vx ;;
- *v* ) as_opts=-v ;;
- *x* ) as_opts=-x ;;
- * ) as_opts= ;;
-esac
-exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
-# Admittedly, this is quite paranoid, since all the known shells bail
-# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-as_fn_exit 255
- fi
- # We don't want this to propagate to other subprocesses.
- { _as_can_reexec=; unset _as_can_reexec;}
-if test "x$CONFIG_SHELL" = x; then
- as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '\${1+\"\$@\"}'='\"\$@\"'
- setopt NO_GLOB_SUBST
-else
- case \`(set -o) 2>/dev/null\` in #(
- *posix*) :
- set -o posix ;; #(
- *) :
- ;;
-esac
-fi
-"
- as_required="as_fn_return () { (exit \$1); }
-as_fn_success () { as_fn_return 0; }
-as_fn_failure () { as_fn_return 1; }
-as_fn_ret_success () { return 0; }
-as_fn_ret_failure () { return 1; }
-
-exitcode=0
-as_fn_success || { exitcode=1; echo as_fn_success failed.; }
-as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
-as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
-as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
-if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
-
-else
- exitcode=1; echo positional parameters were not saved.
-fi
-test x\$exitcode = x0 || exit 1
-test -x / || exit 1"
- as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
- as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
- eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
- test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1"
- if (eval "$as_required") 2>/dev/null; then :
- as_have_required=yes
-else
- as_have_required=no
-fi
- if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
-
-else
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-as_found=false
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- as_found=:
- case $as_dir in #(
- /*)
- for as_base in sh bash ksh sh5; do
- # Try only shells that exist, to save several forks.
- as_shell=$as_dir/$as_base
- if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
- CONFIG_SHELL=$as_shell as_have_required=yes
- if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
- break 2
-fi
-fi
- done;;
- esac
- as_found=false
-done
-$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
- CONFIG_SHELL=$SHELL as_have_required=yes
-fi; }
-IFS=$as_save_IFS
-
-
- if test "x$CONFIG_SHELL" != x; then :
- export CONFIG_SHELL
- # We cannot yet assume a decent shell, so we have to provide a
-# neutralization value for shells without unset; and this also
-# works around shells that cannot unset nonexistent variables.
-# Preserve -v and -x to the replacement shell.
-BASH_ENV=/dev/null
-ENV=/dev/null
-(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-case $- in # ((((
- *v*x* | *x*v* ) as_opts=-vx ;;
- *v* ) as_opts=-v ;;
- *x* ) as_opts=-x ;;
- * ) as_opts= ;;
-esac
-exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
-# Admittedly, this is quite paranoid, since all the known shells bail
-# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-exit 255
-fi
-
- if test x$as_have_required = xno; then :
- $as_echo "$0: This script requires a shell more modern than all"
- $as_echo "$0: the shells that I found on your system."
- if test x${ZSH_VERSION+set} = xset ; then
- $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
- $as_echo "$0: be upgraded to zsh 4.3.4 or later."
- else
- $as_echo "$0: Please tell bug-autoconf@gnu.org and cygwin@cygwin.com
-$0: about your system, including any error possibly output
-$0: before this message. Then install a modern shell, or
-$0: manually run the script under such a shell if you do
-$0: have one."
- fi
- exit 1
-fi
-fi
-fi
-SHELL=${CONFIG_SHELL-/bin/sh}
-export SHELL
-# Unset more variables known to interfere with behavior of common tools.
-CLICOLOR_FORCE= GREP_OPTIONS=
-unset CLICOLOR_FORCE GREP_OPTIONS
-
-## --------------------- ##
-## M4sh Shell Functions. ##
-## --------------------- ##
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
- { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
- return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
- set +e
- as_fn_set_status $1
- exit $1
-} # as_fn_exit
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
- case $as_dir in #(
- -*) as_dir=./$as_dir;;
- esac
- test -d "$as_dir" || eval $as_mkdir_p || {
- as_dirs=
- while :; do
- case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
- *) as_qdir=$as_dir;;
- esac
- as_dirs="'$as_qdir' $as_dirs"
- as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- test -d "$as_dir" && break
- done
- test -z "$as_dirs" || eval "mkdir $as_dirs"
- } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-
-# as_fn_executable_p FILE
-# -----------------------
-# Test if FILE is an executable regular file.
-as_fn_executable_p ()
-{
- test -f "$1" && test -x "$1"
-} # as_fn_executable_p
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
- eval 'as_fn_append ()
- {
- eval $1+=\$2
- }'
-else
- as_fn_append ()
- {
- eval $1=\$$1\$2
- }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
- eval 'as_fn_arith ()
- {
- as_val=$(( $* ))
- }'
-else
- as_fn_arith ()
- {
- as_val=`expr "$@" || test $? -eq 1`
- }
-fi # as_fn_arith
-
-
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
-as_fn_error ()
-{
- as_status=$1; test $as_status -eq 0 && as_status=1
- if test "$4"; then
- as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
- fi
- $as_echo "$as_me: error: $2" >&2
- as_fn_exit $as_status
-} # as_fn_error
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; 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
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
- }
- /^X\/\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\/\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
-
-# 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
-
-
- as_lineno_1=$LINENO as_lineno_1a=$LINENO
- as_lineno_2=$LINENO as_lineno_2a=$LINENO
- eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
- test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
- # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
- sed -n '
- p
- /[$]LINENO/=
- ' <$as_myself |
- sed '
- s/[$]LINENO.*/&-/
- t lineno
- b
- :lineno
- N
- :loop
- s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
- t loop
- s/-\n.*//
- ' >$as_me.lineno &&
- chmod +x "$as_me.lineno" ||
- { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
-
- # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
- # already done that, so ensure we don't try to do so again and fall
- # in an infinite loop. This has already happened in practice.
- _as_can_reexec=no; export _as_can_reexec
- # 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 sensitive to this).
- . "./$as_me.lineno"
- # Exit status is that of the last command.
- exit
-}
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
- case `echo 'xy\c'` in
- *c*) ECHO_T=' ';; # ECHO_T is single tab character.
- xy) ECHO_C='\c';;
- *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
- ECHO_T=' ';;
- esac;;
-*)
- ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
- rm -f conf$$.dir/conf$$.file
-else
- rm -f conf$$.dir
- mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
- if ln -s conf$$.file conf$$ 2>/dev/null; then
- as_ln_s='ln -s'
- # ... but there are two gotchas:
- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -pR'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -pR'
- elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
- else
- as_ln_s='cp -pR'
- fi
-else
- as_ln_s='cp -pR'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p='mkdir -p "$as_dir"'
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-as_test_x='test -x'
-as_executable_p=as_fn_executable_p
-
-# 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'"
-
-
-test -n "$DJDIR" || exec 7<&0 </dev/null
-exec 6>&1
-
-# Name of the host.
-# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
-# so uname gets run too.
-ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
-
-#
-# Initializations.
-#
-ac_default_prefix=/usr/local
-ac_clean_files=
-ac_config_libobj_dir=.
-LIBOBJS=
-cross_compiling=no
-subdirs=
-MFLAGS=
-MAKEFLAGS=
-
-# Identity of this package.
-PACKAGE_NAME='Cygwin Documentation'
-PACKAGE_TARNAME='cygwin'
-PACKAGE_VERSION='0'
-PACKAGE_STRING='Cygwin Documentation 0'
-PACKAGE_BUGREPORT='cygwin@cygwin.com'
-PACKAGE_URL='https://cygwin.com'
-
-ac_unique_file="cygwin-api.xml"
-ac_no_link=no
-ac_subst_vars='LTLIBOBJS
-LIBOBJS
-build_exeext
-OBJEXT
-EXEEXT
-ac_ct_CC
-CPPFLAGS
-LDFLAGS
-CFLAGS
-CC
-target_os
-target_vendor
-target_cpu
-target
-host_os
-host_vendor
-host_cpu
-host
-build_os
-build_vendor
-build_cpu
-build
-INSTALL_DATA
-INSTALL_SCRIPT
-INSTALL_PROGRAM
-target_alias
-host_alias
-build_alias
-LIBS
-ECHO_T
-ECHO_N
-ECHO_C
-DEFS
-mandir
-localedir
-libdir
-psdir
-pdfdir
-dvidir
-htmldir
-infodir
-docdir
-oldincludedir
-includedir
-localstatedir
-sharedstatedir
-sysconfdir
-datadir
-datarootdir
-libexecdir
-sbindir
-bindir
-program_transform_name
-prefix
-exec_prefix
-PACKAGE_URL
-PACKAGE_BUGREPORT
-PACKAGE_STRING
-PACKAGE_VERSION
-PACKAGE_TARNAME
-PACKAGE_NAME
-PATH_SEPARATOR
-SHELL'
-ac_subst_files=''
-ac_user_opts='
-enable_option_checking
-'
- ac_precious_vars='build_alias
-host_alias
-target_alias
-CC
-CFLAGS
-LDFLAGS
-LIBS
-CPPFLAGS'
-
-
-# Initialize some variables set by options.
-ac_init_help=
-ac_init_version=false
-ac_unrecognized_opts=
-ac_unrecognized_sep=
-# 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.
-# (The list follows the same order as the GNU Coding Standards.)
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datarootdir='${prefix}/share'
-datadir='${datarootdir}'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
-infodir='${datarootdir}/info'
-htmldir='${docdir}'
-dvidir='${docdir}'
-pdfdir='${docdir}'
-psdir='${docdir}'
-libdir='${exec_prefix}/lib'
-localedir='${datarootdir}/locale'
-mandir='${datarootdir}/man'
-
-ac_prev=
-ac_dashdash=
-for ac_option
-do
- # If the previous option needs an argument, assign it.
- if test -n "$ac_prev"; then
- eval $ac_prev=\$ac_option
- ac_prev=
- continue
- fi
-
- case $ac_option in
- *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
- *=) ac_optarg= ;;
- *) ac_optarg=yes ;;
- esac
-
- # Accept the important Cygnus configure options, so we can diagnose typos.
-
- case $ac_dashdash$ac_option in
- --)
- ac_dashdash=yes ;;
-
- -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)
- ac_prev=datadir ;;
- -datadir=* | --datadir=* | --datadi=* | --datad=*)
- datadir=$ac_optarg ;;
-
- -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
- | --dataroo | --dataro | --datar)
- ac_prev=datarootdir ;;
- -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
- | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
- datarootdir=$ac_optarg ;;
-
- -disable-* | --disable-*)
- ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid feature name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"enable_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval enable_$ac_useropt=no ;;
-
- -docdir | --docdir | --docdi | --doc | --do)
- ac_prev=docdir ;;
- -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
- docdir=$ac_optarg ;;
-
- -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
- ac_prev=dvidir ;;
- -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
- dvidir=$ac_optarg ;;
-
- -enable-* | --enable-*)
- ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid feature name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"enable_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval enable_$ac_useropt=\$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 ;;
-
- -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
- ac_prev=htmldir ;;
- -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
- | --ht=*)
- htmldir=$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 ;;
-
- -localedir | --localedir | --localedi | --localed | --locale)
- ac_prev=localedir ;;
- -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
- localedir=$ac_optarg ;;
-
- -localstatedir | --localstatedir | --localstatedi | --localstated \
- | --localstate | --localstat | --localsta | --localst | --locals)
- ac_prev=localstatedir ;;
- -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
- | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
- 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 ;;
-
- -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
- ac_prev=pdfdir ;;
- -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
- pdfdir=$ac_optarg ;;
-
- -psdir | --psdir | --psdi | --psd | --ps)
- ac_prev=psdir ;;
- -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
- psdir=$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_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid package name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"with_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval with_$ac_useropt=\$ac_optarg ;;
-
- -without-* | --without-*)
- ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid package name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"with_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval with_$ac_useropt=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 ;;
-
- -*) as_fn_error $? "unrecognized option: \`$ac_option'
-Try \`$0 --help' for more information"
- ;;
-
- *=*)
- ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
- # Reject names that are not valid shell variable names.
- case $ac_envvar in #(
- '' | [0-9]* | *[!_$as_cr_alnum]* )
- as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
- esac
- eval $ac_envvar=\$ac_optarg
- export $ac_envvar ;;
-
- *)
- # FIXME: should be removed in autoconf 3.0.
- $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
- expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- $as_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'`
- as_fn_error $? "missing argument to $ac_option"
-fi
-
-if test -n "$ac_unrecognized_opts"; then
- case $enable_option_checking in
- no) ;;
- fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
- *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
- esac
-fi
-
-# Check all directory arguments for consistency.
-for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
- datadir sysconfdir sharedstatedir localstatedir includedir \
- oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
- libdir localedir mandir
-do
- eval ac_val=\$$ac_var
- # Remove trailing slashes.
- case $ac_val in
- */ )
- ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
- eval $ac_var=\$ac_val;;
- esac
- # Be sure to have absolute directory names.
- case $ac_val in
- [\\/$]* | ?:[\\/]* ) continue;;
- NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
- esac
- as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
-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
- 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
-
-
-ac_pwd=`pwd` && test -n "$ac_pwd" &&
-ac_ls_di=`ls -di .` &&
-ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
- as_fn_error $? "working directory cannot be determined"
-test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
- as_fn_error $? "pwd does not report name of working directory"
-
-
-# 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 the parent directory.
- ac_confdir=`$as_dirname -- "$as_myself" ||
-$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_myself" : 'X\(//\)[^/]' \| \
- X"$as_myself" : 'X\(//\)$' \| \
- X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_myself" |
- 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
- test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
- as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
-fi
-ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
-ac_abs_confdir=`(
- cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
- pwd)`
-# When building in place, set srcdir=.
-if test "$ac_abs_confdir" = "$ac_pwd"; then
- srcdir=.
-fi
-# Remove unnecessary trailing slashes from srcdir.
-# Double slashes in file names in object file debugging info
-# mess up M-x gdb in Emacs.
-case $srcdir in
-*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
-esac
-for ac_var in $ac_precious_vars; do
- eval ac_env_${ac_var}_set=\${${ac_var}+set}
- eval ac_env_${ac_var}_value=\$${ac_var}
- eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
- eval ac_cv_env_${ac_var}_value=\$${ac_var}
-done
-
-#
-# 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 Cygwin Documentation 0 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 \`..']
-
-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]
- --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]
- --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
- --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
- --infodir=DIR info documentation [DATAROOTDIR/info]
- --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
- --mandir=DIR man documentation [DATAROOTDIR/man]
- --docdir=DIR documentation root [DATAROOTDIR/doc/cygwin]
- --htmldir=DIR html documentation [DOCDIR]
- --dvidir=DIR dvi documentation [DOCDIR]
- --pdfdir=DIR pdf documentation [DOCDIR]
- --psdir=DIR ps documentation [DOCDIR]
-_ACEOF
-
- cat <<\_ACEOF
-
-System types:
- --build=BUILD configure for building on BUILD [guessed]
- --host=HOST cross-compile to build programs to run on HOST [BUILD]
- --target=TARGET configure for building compilers for TARGET [HOST]
-_ACEOF
-fi
-
-if test -n "$ac_init_help"; then
- case $ac_init_help in
- short | recursive ) echo "Configuration of Cygwin Documentation 0:";;
- esac
- cat <<\_ACEOF
-
-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>
- LIBS libraries to pass to the linker, e.g. -l<library>
- CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
- you have headers in a nonstandard directory <include dir>
-
-Use these variables to override the choices made by `configure' or to help
-it to find libraries and programs with nonstandard names/locations.
-
-Report bugs to <cygwin@cygwin.com>.
-Cygwin Documentation home page: <https://cygwin.com>.
-_ACEOF
-ac_status=$?
-fi
-
-if test "$ac_init_help" = "recursive"; then
- # If there are subdirs, report their specific --help.
- for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
- test -d "$ac_dir" ||
- { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
- continue
- ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
- # A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
- esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
- .) # We are building in place.
- ac_srcdir=.
- ac_top_srcdir=$ac_top_builddir_sub
- ac_abs_top_srcdir=$ac_pwd ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir
- ac_abs_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_build_prefix$srcdir
- ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
- cd "$ac_dir" || { ac_status=$?; continue; }
- # Check for guested 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
- else
- $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
- fi || ac_status=$?
- cd "$ac_pwd" || { ac_status=$?; break; }
- done
-fi
-
-test -n "$ac_init_help" && exit $ac_status
-if $ac_init_version; then
- cat <<\_ACEOF
-Cygwin Documentation configure 0
-generated by GNU Autoconf 2.69
-
-Copyright (C) 2012 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
-fi
-
-## ------------------------ ##
-## Autoconf initialization. ##
-## ------------------------ ##
-
-# ac_fn_c_try_compile LINENO
-# --------------------------
-# Try to compile conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_compile ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext
- if { { ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compile") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_compile
-cat >config.log <<_ACEOF
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-
-It was created by Cygwin Documentation $as_me 0, which was
-generated by GNU Autoconf 2.69. Invocation command line was
-
- $ $0 $@
-
-_ACEOF
-exec 5>>config.log
-{
-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`
-/usr/bin/hostinfo = `(/usr/bin/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=.
- $as_echo "PATH: $as_dir"
- done
-IFS=$as_save_IFS
-
-} >&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_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=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- case $ac_pass in
- 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
- 2)
- as_fn_append 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
- as_fn_append ac_configure_args " '$ac_arg'"
- ;;
- esac
- done
-done
-{ ac_configure_args0=; unset ac_configure_args0;}
-{ ac_configure_args1=; unset 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: Use '\'' to represent an apostrophe within the trap.
-# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
-trap 'exit_status=$?
- # Save into config.log some information that might help in debugging.
- {
- echo
-
- $as_echo "## ---------------- ##
-## Cache variables. ##
-## ---------------- ##"
- echo
- # The following way of writing the cache mishandles newlines in values,
-(
- for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
- eval ac_val=\$$ac_var
- case $ac_val in #(
- *${as_nl}*)
- case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
- esac
- case $ac_var in #(
- _ | IFS | as_nl) ;; #(
- BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
- *) { eval $ac_var=; unset $ac_var;} ;;
- esac ;;
- esac
- done
- (set) 2>&1 |
- case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
- *${as_nl}ac_space=\ *)
- sed -n \
- "s/'\''/'\''\\\\'\'''\''/g;
- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
- ;; #(
- *)
- sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
- ;;
- esac |
- sort
-)
- echo
-
- $as_echo "## ----------------- ##
-## Output variables. ##
-## ----------------- ##"
- echo
- for ac_var in $ac_subst_vars
- do
- eval ac_val=\$$ac_var
- case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
- esac
- $as_echo "$ac_var='\''$ac_val'\''"
- done | sort
- echo
-
- if test -n "$ac_subst_files"; then
- $as_echo "## ------------------- ##
-## File substitutions. ##
-## ------------------- ##"
- echo
- for ac_var in $ac_subst_files
- do
- eval ac_val=\$$ac_var
- case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
- esac
- $as_echo "$ac_var='\''$ac_val'\''"
- done | sort
- echo
- fi
-
- if test -s confdefs.h; then
- $as_echo "## ----------- ##
-## confdefs.h. ##
-## ----------- ##"
- echo
- cat confdefs.h
- echo
- fi
- test "$ac_signal" != 0 &&
- $as_echo "$as_me: caught signal $ac_signal"
- $as_echo "$as_me: exit $exit_status"
- } >&5
- rm -f core *.core core.conftest.* &&
- rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
- exit $exit_status
-' 0
-for ac_signal in 1 2 13 15; do
- trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
-done
-ac_signal=0
-
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -f -r conftest* confdefs.h
-
-$as_echo "/* confdefs.h */" > 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
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_URL "$PACKAGE_URL"
-_ACEOF
-
-
-# Let the site file select an alternate cache file if it wants to.
-# Prefer an explicitly selected file to automatically selected ones.
-ac_site_file1=NONE
-ac_site_file2=NONE
-if test -n "$CONFIG_SITE"; then
- # We do not want a PATH search for config.site.
- case $CONFIG_SITE in #((
- -*) ac_site_file1=./$CONFIG_SITE;;
- */*) ac_site_file1=$CONFIG_SITE;;
- *) ac_site_file1=./$CONFIG_SITE;;
- esac
-elif test "x$prefix" != xNONE; then
- ac_site_file1=$prefix/share/config.site
- ac_site_file2=$prefix/etc/config.site
-else
- ac_site_file1=$ac_default_prefix/share/config.site
- ac_site_file2=$ac_default_prefix/etc/config.site
-fi
-for ac_site_file in "$ac_site_file1" "$ac_site_file2"
-do
- test "x$ac_site_file" = xNONE && continue
- if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
-$as_echo "$as_me: loading site script $ac_site_file" >&6;}
- sed 's/^/| /' "$ac_site_file" >&5
- . "$ac_site_file" \
- || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "failed to load site script $ac_site_file
-See \`config.log' for more details" "$LINENO" 5; }
- 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. DJGPP emulates it as a regular file.
- if test /dev/null != "$cache_file" && test -f "$cache_file"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
-$as_echo "$as_me: loading cache $cache_file" >&6;}
- case $cache_file in
- [\\/]* | ?:[\\/]* ) . "$cache_file";;
- *) . "./$cache_file";;
- esac
- fi
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
-$as_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 $ac_precious_vars; 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,)
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
- ac_cache_corrupted=: ;;
- ,set)
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
-$as_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
- # differences in whitespace do not lead to failure.
- ac_old_val_w=`echo x $ac_old_val`
- ac_new_val_w=`echo x $ac_new_val`
- if test "$ac_old_val_w" != "$ac_new_val_w"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
-$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
- ac_cache_corrupted=:
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
-$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
- eval $ac_var=\$ac_old_val
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
-$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
-$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
- fi;;
- esac
- # Pass precious variables to config.status.
- if test "$ac_new_set" = set; then
- case $ac_new_val in
- *\'*) ac_arg=$ac_var=`$as_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.
- *) as_fn_append ac_configure_args " '$ac_arg'" ;;
- esac
- fi
-done
-if $ac_cache_corrupted; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
-$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
- as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
-fi
-## -------------------- ##
-## Main body of script. ##
-## -------------------- ##
-
-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_aux_dir=
-for ac_dir in ../.. "$srcdir"/../..; do
- if test -f "$ac_dir/install-sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install-sh -c"
- break
- elif test -f "$ac_dir/install.sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install.sh -c"
- break
- elif test -f "$ac_dir/shtool"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/shtool install -c"
- break
- fi
-done
-if test -z "$ac_aux_dir"; then
- as_fn_error $? "cannot find install-sh, install.sh, or shtool in ../.. \"$srcdir\"/../.." "$LINENO" 5
-fi
-
-# These three variables are undocumented and unsupported,
-# and are intended to be withdrawn in a future Autoconf release.
-# They can cause serious problems if a builder's source tree is in a directory
-# whose full name contains unusual characters.
-ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
-ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
-ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
-
-
-
-# Find a good install program. We prefer a C program (faster),
-# so one script is as good as another. But avoid the broken or
-# incompatible versions:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if ${ac_cv_path_install+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
- ./ | .// | /[cC]/* | \
- /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
- ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
- /usr/ucb/* ) ;;
- *)
- # OSF1 and SCO ODT 3.0 have their own names for install.
- # Don't use installbsd from OSF since it installs stuff as root
- # by default.
- for ac_prog in ginstall scoinst install; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
- if test $ac_prog = install &&
- grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
- # AIX install. It has an incompatible calling convention.
- :
- elif test $ac_prog = install &&
- grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
- # program-specific install script used by HP pwplus--don't use.
- :
- else
- rm -rf conftest.one conftest.two conftest.dir
- echo one > conftest.one
- echo two > conftest.two
- mkdir conftest.dir
- if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
- test -s conftest.one && test -s conftest.two &&
- test -s conftest.dir/conftest.one &&
- test -s conftest.dir/conftest.two
- then
- ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
- break 3
- fi
- fi
- fi
- done
- done
- ;;
-esac
-
- done
-IFS=$as_save_IFS
-
-rm -rf conftest.one conftest.two conftest.dir
-
-fi
- if test "${ac_cv_path_install+set}" = set; then
- INSTALL=$ac_cv_path_install
- else
- # As a last resort, use the slow shell script. Don't cache a
- # value for INSTALL within a source directory, because that will
- # break other packages using the cache if that directory is
- # removed, or if the value is a relative name.
- INSTALL=$ac_install_sh
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-
-# Make sure we can run config.sub.
-$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
- as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
-$as_echo_n "checking build system type... " >&6; }
-if ${ac_cv_build+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_build_alias=$build_alias
-test "x$ac_build_alias" = x &&
- ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
-test "x$ac_build_alias" = x &&
- as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
-ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
- as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
-$as_echo "$ac_cv_build" >&6; }
-case $ac_cv_build in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
-esac
-build=$ac_cv_build
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_build
-shift
-build_cpu=$1
-build_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-build_os=$*
-IFS=$ac_save_IFS
-case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
-$as_echo_n "checking host system type... " >&6; }
-if ${ac_cv_host+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test "x$host_alias" = x; then
- ac_cv_host=$ac_cv_build
-else
- ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
- as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
-$as_echo "$ac_cv_host" >&6; }
-case $ac_cv_host in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
-esac
-host=$ac_cv_host
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_host
-shift
-host_cpu=$1
-host_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-host_os=$*
-IFS=$ac_save_IFS
-case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5
-$as_echo_n "checking target system type... " >&6; }
-if ${ac_cv_target+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test "x$target_alias" = x; then
- ac_cv_target=$ac_cv_host
-else
- ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` ||
- as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5
-$as_echo "$ac_cv_target" >&6; }
-case $ac_cv_target in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;;
-esac
-target=$ac_cv_target
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_target
-shift
-target_cpu=$1
-target_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-target_os=$*
-IFS=$ac_save_IFS
-case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac
-
-
-# The aliases save the names the user supplied, while $host etc.
-# will get canonicalized.
-test -n "$target_alias" &&
- test "$program_prefix$program_suffix$program_transform_name" = \
- NONENONEs,x,x, &&
- program_prefix=${target_alias}-
-
-
-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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="${ac_tool_prefix}gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
- $as_echo_n "(cached) " >&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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_CC" = x; then
- CC="gcc"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-else
- CC="$ac_cv_prog_CC"
-fi
-
-: ${CC:=gcc}
-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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="${ac_tool_prefix}gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
- $as_echo_n "(cached) " >&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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="${ac_tool_prefix}cc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- 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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&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_fn_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"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-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
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- for ac_prog in cl.exe
- 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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$CC" && break
- done
-fi
-if test -z "$CC"; then
- ac_ct_CC=$CC
- for ac_prog in cl.exe
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
- $as_echo_n "(cached) " >&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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$ac_ct_CC" && break
-done
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-fi
-
-fi
-
-
-test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "no acceptable C compiler found in \$PATH
-See \`config.log' for more details" "$LINENO" 5; }
-
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
- { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compiler $ac_option >&5") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- sed '10a\
-... rest of stderr output deleted ...
- 10q' conftest.err >conftest.er1
- cat conftest.er1 >&5
- fi
- rm -f conftest.er1 conftest.err
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
-done
-
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- ac_no_link=no
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.out.dSYM 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.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
-$as_echo_n "checking whether the C compiler works... " >&6; }
-ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-
-# The possible output files:
-ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
-
-ac_rmfiles=
-for ac_file in $ac_files
-do
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
- * ) ac_rmfiles="$ac_rmfiles $ac_file";;
- esac
-done
-rm -f $ac_rmfiles
-
-if { { ac_try="$ac_link_default"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link_default") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
- # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
-# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
-# in a Makefile. We should not override ac_cv_exeext if it was cached,
-# so that the user can short-circuit this test for compilers unknown to
-# Autoconf.
-for ac_file in $ac_files ''
-do
- test -f "$ac_file" || continue
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
- ;;
- [ab].out )
- # We found the default executable, but exeext='' is most
- # certainly right.
- break;;
- *.* )
- if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
- then :; else
- ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- fi
- # We set ac_cv_exeext here because the later test for it is not
- # safe: cross compilers may not add the suffix if given an `-o'
- # argument, so we may need to know it at that point already.
- # Even if this section looks crufty: it has the advantage of
- # actually working.
- break;;
- * )
- break;;
- esac
-done
-test "$ac_cv_exeext" = no && ac_cv_exeext=
-
-else
- ac_file=''
-fi
-if test -z "$ac_file"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-$as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "C compiler cannot create executables
-See \`config.log' for more details" "$LINENO" 5; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
-$as_echo_n "checking for C compiler default output file name... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
-ac_exeext=$ac_cv_exeext
-
-rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
-ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
-$as_echo_n "checking for suffix of executables... " >&6; }
-if { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; 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 | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
- *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- break;;
- * ) break;;
- esac
-done
-else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-rm -f conftest conftest$ac_cv_exeext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
-$as_echo "$ac_cv_exeext" >&6; }
-
-rm -f conftest.$ac_ext
-EXEEXT=$ac_cv_exeext
-ac_exeext=$EXEEXT
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdio.h>
-int
-main ()
-{
-FILE *f = fopen ("conftest.out", "w");
- return ferror (f) || fclose (f) != 0;
-
- ;
- return 0;
-}
-_ACEOF
-ac_clean_files="$ac_clean_files conftest.out"
-# Check that the compiler produces executables we can run. If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
-if test "$cross_compiling" != yes; then
- { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
- if { ac_try='./conftest$ac_cv_exeext'
- { { case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then
- cross_compiling=no
- else
- if test "$cross_compiling" = maybe; then
- cross_compiling=yes
- else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details" "$LINENO" 5; }
- fi
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
-
-rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
-ac_clean_files=$ac_clean_files_save
-
-else
- rm -f -r a.out a.exe b.out conftest.$ac_ext conftest.o conftest.obj conftest.dSYM
- ac_no_link=yes
- # Setting cross_compile will disable run tests; it will
- # also disable AC_CHECK_FILE but that's generally
- # correct if we can't link.
- cross_compiling=yes
- EXEEXT=
- # Check that the compiler produces executables we can run. If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
-if test "$cross_compiling" != yes; then
- { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
- if { ac_try='./conftest$ac_cv_exeext'
- { { case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then
- cross_compiling=no
- else
- if test "$cross_compiling" = maybe; then
- cross_compiling=yes
- else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details" "$LINENO" 5; }
- fi
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
-$as_echo_n "checking for suffix of object files... " >&6; }
-if ${ac_cv_objext+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.o conftest.obj
-if { { ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compile") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
- for ac_file in conftest.o conftest.obj conftest.*; do
- test -f "$ac_file" || continue;
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
- *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
- break;;
- esac
-done
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of object files: cannot compile
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
-$as_echo "$ac_cv_objext" >&6; }
-OBJEXT=$ac_cv_objext
-ac_objext=$OBJEXT
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
-$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if ${ac_cv_c_compiler_gnu+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-#ifndef __GNUC__
- choke me
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_compiler_gnu=yes
-else
- ac_compiler_gnu=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
-$as_echo "$ac_cv_c_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
- GCC=yes
-else
- GCC=
-fi
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if ${ac_cv_prog_cc_g+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_save_c_werror_flag=$ac_c_werror_flag
- ac_c_werror_flag=yes
- ac_cv_prog_cc_g=no
- CFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_g=yes
-else
- CFLAGS=""
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-else
- ac_c_werror_flag=$ac_save_c_werror_flag
- CFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_g=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_c_werror_flag=$ac_save_c_werror_flag
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
-$as_echo "$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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if ${ac_cv_prog_cc_c89+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_cv_prog_cc_c89=no
-ac_save_CC=$CC
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdarg.h>
-#include <stdio.h>
-struct stat;
-/* 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 -std 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 -std. */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
- inside strings and character constants. */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 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
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
- -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
- CC="$ac_save_CC $ac_arg"
- if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_c89=$ac_arg
-fi
-rm -f core conftest.err conftest.$ac_objext
- test "x$ac_cv_prog_cc_c89" != "xno" && break
-done
-rm -f conftest.$ac_ext
-CC=$ac_save_CC
-
-fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
- x)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
- xno)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
- *)
- CC="$CC $ac_cv_prog_cc_c89"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-if test "x$ac_cv_prog_cc_c89" != xno; then :
-
-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
-
-test -z "$CC" && as_fn_error $? "no acceptable cc found in \$PATH" "$LINENO" 5
-
-
-
-
-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, we kill variables containing newlines.
-# 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.
-(
- for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
- eval ac_val=\$$ac_var
- case $ac_val in #(
- *${as_nl}*)
- case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
- esac
- case $ac_var in #(
- _ | IFS | as_nl) ;; #(
- BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
- *) { eval $ac_var=; unset $ac_var;} ;;
- esac ;;
- esac
- done
-
- (set) 2>&1 |
- case $as_nl`(ac_space=' '; set) 2>&1` in #(
- *${as_nl}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 "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
- ;;
- esac |
- sort
-) |
- sed '
- /^ac_cv_env_/b end
- t clear
- :clear
- s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
- t end
- s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
- :end' >>confcache
-if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
- if test -w "$cache_file"; then
- if test "x$cache_file" != "x/dev/null"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
-$as_echo "$as_me: updating cache $cache_file" >&6;}
- if test ! -f "$cache_file" || test -h "$cache_file"; then
- cat confcache >"$cache_file"
- else
- case $cache_file in #(
- */* | ?:*)
- mv -f confcache "$cache_file"$$ &&
- mv -f "$cache_file"$$ "$cache_file" ;; #(
- *)
- mv -f confcache "$cache_file" ;;
- esac
- fi
- fi
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
-$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
- 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}'
-
-# Transform confdefs.h into DEFS.
-# Protect against shell expansion while executing Makefile rules.
-# Protect against Makefile macro expansion.
-#
-# If the first sed substitution is executed (which looks for macros that
-# take arguments), then branch to the quote section. Otherwise,
-# look for a macro that doesn't take arguments.
-ac_script='
-:mline
-/\\$/{
- N
- s,\\\n,,
- b mline
-}
-t clear
-:clear
-s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g
-t quote
-s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g
-t quote
-b any
-:quote
-s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g
-s/\[/\\&/g
-s/\]/\\&/g
-s/\$/$$/g
-H
-:any
-${
- g
- s/^\n//
- s/\n/ /g
- p
-}
-'
-DEFS=`sed -n "$ac_script" confdefs.h`
-
-
-ac_libobjs=
-ac_ltlibobjs=
-U=
-for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
- # 1. Remove the extension, and $U if already installed.
- ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
- ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
- # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
- # will be set to the directory where LIBOBJS objects are built.
- as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
- as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
-done
-LIBOBJS=$ac_libobjs
-
-LTLIBOBJS=$ac_ltlibobjs
-
-
-
-: "${CONFIG_STATUS=./config.status}"
-ac_write_fail=0
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
-as_write_fail=0
-cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
-#! $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}
-export SHELL
-_ASEOF
-cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
-## -------------------- ##
-## M4sh Initialization. ##
-## -------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in #(
- *posix*) :
- set -o posix ;; #(
- *) :
- ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- PATH_SEPARATOR=:
- (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
- (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
- PATH_SEPARATOR=';'
- }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
-# Find who we are. Look in the path if we contain no directory separator.
-as_myself=
-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
-IFS=$as_save_IFS
-
- ;;
-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
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
- exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
-as_fn_error ()
-{
- as_status=$1; test $as_status -eq 0 && as_status=1
- if test "$4"; then
- as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
- fi
- $as_echo "$as_me: error: $2" >&2
- as_fn_exit $as_status
-} # as_fn_error
-
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
- return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
- set +e
- as_fn_set_status $1
- exit $1
-} # as_fn_exit
-
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
- { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
- eval 'as_fn_append ()
- {
- eval $1+=\$2
- }'
-else
- as_fn_append ()
- {
- eval $1=\$$1\$2
- }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
- eval 'as_fn_arith ()
- {
- as_val=$(( $* ))
- }'
-else
- as_fn_arith ()
- {
- as_val=`expr "$@" || test $? -eq 1`
- }
-fi # as_fn_arith
-
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; 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
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
- }
- /^X\/\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\/\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
-
-# 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
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
- case `echo 'xy\c'` in
- *c*) ECHO_T=' ';; # ECHO_T is single tab character.
- xy) ECHO_C='\c';;
- *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
- ECHO_T=' ';;
- esac;;
-*)
- ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
- rm -f conf$$.dir/conf$$.file
-else
- rm -f conf$$.dir
- mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
- if ln -s conf$$.file conf$$ 2>/dev/null; then
- as_ln_s='ln -s'
- # ... but there are two gotchas:
- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -pR'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -pR'
- elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
- else
- as_ln_s='cp -pR'
- fi
-else
- as_ln_s='cp -pR'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
- case $as_dir in #(
- -*) as_dir=./$as_dir;;
- esac
- test -d "$as_dir" || eval $as_mkdir_p || {
- as_dirs=
- while :; do
- case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
- *) as_qdir=$as_dir;;
- esac
- as_dirs="'$as_qdir' $as_dirs"
- as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- test -d "$as_dir" && break
- done
- test -z "$as_dirs" || eval "mkdir $as_dirs"
- } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p='mkdir -p "$as_dir"'
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-
-# as_fn_executable_p FILE
-# -----------------------
-# Test if FILE is an executable regular file.
-as_fn_executable_p ()
-{
- test -f "$1" && test -x "$1"
-} # as_fn_executable_p
-as_test_x='test -x'
-as_executable_p=as_fn_executable_p
-
-# 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'"
-
-
-exec 6>&1
-## ----------------------------------- ##
-## Main body of $CONFIG_STATUS script. ##
-## ----------------------------------- ##
-_ASEOF
-test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# Save the log message, to keep $0 and so on meaningful, and to
-# report actual input values of CONFIG_FILES etc. instead of their
-# values after options handling.
-ac_log="
-This file was extended by Cygwin Documentation $as_me 0, which was
-generated by GNU Autoconf 2.69. Invocation command line was
-
- CONFIG_FILES = $CONFIG_FILES
- CONFIG_HEADERS = $CONFIG_HEADERS
- CONFIG_LINKS = $CONFIG_LINKS
- CONFIG_COMMANDS = $CONFIG_COMMANDS
- $ $0 $@
-
-on `(hostname || uname -n) 2>/dev/null | sed 1q`
-"
-
-_ACEOF
-
-case $ac_config_files in *"
-"*) set x $ac_config_files; shift; ac_config_files=$*;;
-esac
-
-
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-# Files that config.status was made for.
-config_files="$ac_config_files"
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-ac_cs_usage="\
-\`$as_me' instantiates files and other configuration actions
-from templates according to the current configuration. Unless the files
-and actions are specified as TAGs, all are instantiated by default.
-
-Usage: $0 [OPTION]... [TAG]...
-
- -h, --help print this help, then exit
- -V, --version print version number and configuration settings, then exit
- --config print configuration, then exit
- -q, --quiet, --silent
- 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
-
-Configuration files:
-$config_files
-
-Report bugs to <cygwin@cygwin.com>.
-Cygwin Documentation home page: <https://cygwin.com>."
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
-ac_cs_version="\\
-Cygwin Documentation config.status 0
-configured by $0, generated by GNU Autoconf 2.69,
- with options \\"\$ac_cs_config\\"
-
-Copyright (C) 2012 Free Software Foundation, Inc.
-This config.status script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it."
-
-ac_pwd='$ac_pwd'
-srcdir='$srcdir'
-INSTALL='$INSTALL'
-test -n "\$AWK" || AWK=awk
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# The default lists apply if the user does not specify any file.
-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=`expr "X$1" : 'X\([^=]*\)='`
- ac_optarg=
- ac_shift=:
- ;;
- *)
- ac_option=$1
- ac_optarg=$2
- ac_shift=shift
- ;;
- esac
-
- case $ac_option in
- # Handling of the options.
- -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
- ac_cs_recheck=: ;;
- --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
- $as_echo "$ac_cs_version"; exit ;;
- --config | --confi | --conf | --con | --co | --c )
- $as_echo "$ac_cs_config"; exit ;;
- --debug | --debu | --deb | --de | --d | -d )
- debug=: ;;
- --file | --fil | --fi | --f )
- $ac_shift
- case $ac_optarg in
- *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
- '') as_fn_error $? "missing file argument" ;;
- esac
- as_fn_append CONFIG_FILES " '$ac_optarg'"
- ac_need_defaults=false;;
- --he | --h | --help | --hel | -h )
- $as_echo "$ac_cs_usage"; exit ;;
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil | --si | --s)
- ac_cs_silent=: ;;
-
- # This is an error.
- -*) as_fn_error $? "unrecognized option: \`$1'
-Try \`$0 --help' for more information." ;;
-
- *) as_fn_append ac_config_targets " $1"
- ac_need_defaults=false ;;
-
- 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 || ac_write_fail=1
-if \$ac_cs_recheck; then
- set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
- shift
- \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
- CONFIG_SHELL='$SHELL'
- export CONFIG_SHELL
- exec "\$@"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-exec 5>>config.log
-{
- echo
- sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
- $as_echo "$ac_log"
-} >&5
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-
-# Handling of arguments.
-for ac_config_target in $ac_config_targets
-do
- case $ac_config_target in
- "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
-
- *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
- 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
-fi
-
-# Have a temporary directory for convenience. Make it in the build tree
-# simply because there is no reason against having it here, and in addition,
-# creating and moving files from /tmp can sometimes cause problems.
-# Hook for its removal unless debugging.
-# Note that there is a small window in which the directory will not be cleaned:
-# after its creation but before its name has been assigned to `$tmp'.
-$debug ||
-{
- tmp= ac_tmp=
- trap 'exit_status=$?
- : "${ac_tmp:=$tmp}"
- { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
-' 0
- trap 'as_fn_exit 1' 1 2 13 15
-}
-# Create a (secure) tmp directory for tmp files.
-
-{
- tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
- test -d "$tmp"
-} ||
-{
- tmp=./conf$$-$RANDOM
- (umask 077 && mkdir "$tmp")
-} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
-ac_tmp=$tmp
-
-# Set up the scripts for CONFIG_FILES section.
-# No need to generate them if there are no CONFIG_FILES.
-# This happens for instance with `./config.status config.h'.
-if test -n "$CONFIG_FILES"; then
-
-
-ac_cr=`echo X | tr X '\015'`
-# On cygwin, bash can eat \r inside `` if the user requested igncr.
-# But we know of no other shell where ac_cr would be empty at this
-# point, so we can use a bashism as a fallback.
-if test "x$ac_cr" = x; then
- eval ac_cr=\$\'\\r\'
-fi
-ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
-if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
- ac_cs_awk_cr='\\r'
-else
- ac_cs_awk_cr=$ac_cr
-fi
-
-echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
-_ACEOF
-
-
-{
- echo "cat >conf$$subs.awk <<_ACEOF" &&
- echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
- echo "_ACEOF"
-} >conf$$subs.sh ||
- as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
-ac_delim='%!_!# '
-for ac_last_try in false false false false false :; do
- . ./conf$$subs.sh ||
- as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-
- ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
- if test $ac_delim_n = $ac_delim_num; then
- break
- elif $ac_last_try; then
- as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
- else
- ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
- fi
-done
-rm -f conf$$subs.sh
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
-_ACEOF
-sed -n '
-h
-s/^/S["/; s/!.*/"]=/
-p
-g
-s/^[^!]*!//
-:repl
-t repl
-s/'"$ac_delim"'$//
-t delim
-:nl
-h
-s/\(.\{148\}\)..*/\1/
-t more1
-s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
-p
-n
-b repl
-:more1
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t nl
-:delim
-h
-s/\(.\{148\}\)..*/\1/
-t more2
-s/["\\]/\\&/g; s/^/"/; s/$/"/
-p
-b
-:more2
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t delim
-' <conf$$subs.awk | sed '
-/^[^""]/{
- N
- s/\n//
-}
-' >>$CONFIG_STATUS || ac_write_fail=1
-rm -f conf$$subs.awk
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACAWK
-cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
- for (key in S) S_is_set[key] = 1
- FS = ""
-
-}
-{
- line = $ 0
- nfields = split(line, field, "@")
- substed = 0
- len = length(field[1])
- for (i = 2; i < nfields; i++) {
- key = field[i]
- keylen = length(key)
- if (S_is_set[key]) {
- value = S[key]
- line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
- len += length(value) + length(field[++i])
- substed = 1
- } else
- len += 1 + keylen
- }
-
- print line
-}
-
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
- sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
-else
- cat
-fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
- || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
-_ACEOF
-
-# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
-# ${srcdir} and @srcdir@ entries 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[ ]*=[ ]*/{
-h
-s///
-s/^/:/
-s/[ ]*$/:/
-s/:\$(srcdir):/:/g
-s/:\${srcdir}:/:/g
-s/:@srcdir@:/:/g
-s/^:*//
-s/:*$//
-x
-s/\(=[ ]*\).*/\1/
-G
-s/\n//
-s/^[^=]*=[ ]*$//
-}'
-fi
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-fi # test -n "$CONFIG_FILES"
-
-
-eval set X " :F $CONFIG_FILES "
-shift
-for ac_tag
-do
- case $ac_tag in
- :[FHLC]) ac_mode=$ac_tag; continue;;
- esac
- case $ac_mode$ac_tag in
- :[FHL]*:*);;
- :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
- :[FH]-) ac_tag=-:-;;
- :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
- esac
- ac_save_IFS=$IFS
- IFS=:
- set x $ac_tag
- IFS=$ac_save_IFS
- shift
- ac_file=$1
- shift
-
- case $ac_mode in
- :L) ac_source=$1;;
- :[FH])
- ac_file_inputs=
- for ac_f
- do
- case $ac_f in
- -) ac_f="$ac_tmp/stdin";;
- *) # Look for the file first in the build tree, then in the source tree
- # (if the path is not absolute). The absolute path cannot be DOS-style,
- # because $ac_f cannot contain `:'.
- test -f "$ac_f" ||
- case $ac_f in
- [\\/$]*) false;;
- *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
- esac ||
- as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
- esac
- case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
- as_fn_append ac_file_inputs " '$ac_f'"
- done
-
- # 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. */
- configure_input='Generated from '`
- $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
- `' by configure.'
- if test x"$ac_file" != x-; then
- configure_input="$ac_file. $configure_input"
- { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
-$as_echo "$as_me: creating $ac_file" >&6;}
- fi
- # Neutralize special characters interpreted by sed in replacement strings.
- case $configure_input in #(
- *\&* | *\|* | *\\* )
- ac_sed_conf_input=`$as_echo "$configure_input" |
- sed 's/[\\\\&|]/\\\\&/g'`;; #(
- *) ac_sed_conf_input=$configure_input;;
- esac
-
- case $ac_tag in
- *:-:* | *:-) cat >"$ac_tmp/stdin" \
- || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
- esac
- ;;
- esac
-
- ac_dir=`$as_dirname -- "$ac_file" ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$ac_file" : 'X\(//\)[^/]' \| \
- X"$ac_file" : 'X\(//\)$' \| \
- X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$ac_file" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- as_dir="$ac_dir"; as_fn_mkdir_p
- ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
- # A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
- esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
- .) # We are building in place.
- ac_srcdir=.
- ac_top_srcdir=$ac_top_builddir_sub
- ac_abs_top_srcdir=$ac_pwd ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir
- ac_abs_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_build_prefix$srcdir
- ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
-
- case $ac_mode in
- :F)
- #
- # CONFIG_FILE
- #
-
- case $INSTALL in
- [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
- *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
- esac
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# If the template does not know about datarootdir, expand it.
-# FIXME: This hack should be removed a few years after 2.60.
-ac_datarootdir_hack=; ac_datarootdir_seen=
-ac_sed_dataroot='
-/datarootdir/ {
- p
- q
-}
-/@datadir@/p
-/@docdir@/p
-/@infodir@/p
-/@localedir@/p
-/@mandir@/p'
-case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
-*datarootdir*) ac_datarootdir_seen=yes;;
-*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
- ac_datarootdir_hack='
- s&@datadir@&$datadir&g
- s&@docdir@&$docdir&g
- s&@infodir@&$infodir&g
- s&@localedir@&$localedir&g
- s&@mandir@&$mandir&g
- s&\\\${datarootdir}&$datarootdir&g' ;;
-esac
-_ACEOF
-
-# Neutralize VPATH when `$srcdir' = `.'.
-# Shell code in configure.ac might set extrasub.
-# FIXME: do we really want to maintain this feature?
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_sed_extra="$ac_vpsub
-$extrasub
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-:t
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s|@configure_input@|$ac_sed_conf_input|;t t
-s&@top_builddir@&$ac_top_builddir_sub&;t t
-s&@top_build_prefix@&$ac_top_build_prefix&;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&@abs_top_builddir@&$ac_abs_top_builddir&;t t
-s&@INSTALL@&$ac_INSTALL&;t t
-$ac_datarootdir_hack
-"
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
- >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
-
-test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
- { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
- { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
- "$ac_tmp/out"`; test -z "$ac_out"; } &&
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined. Please make sure it is defined" >&5
-$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined. Please make sure it is defined" >&2;}
-
- rm -f "$ac_tmp/stdin"
- case $ac_file in
- -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
- *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
- esac \
- || as_fn_error $? "could not create $ac_file" "$LINENO" 5
- ;;
-
-
-
- esac
-
-done # for ac_tag
-
-
-as_fn_exit 0
-_ACEOF
-ac_clean_files=$ac_clean_files_save
-
-test $ac_write_fail = 0 ||
- as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
-
-
-# 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 || as_fn_exit 1
-fi
-if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
-$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
-fi
-
diff --git a/winsup/doc/configure.ac b/winsup/doc/configure.ac
deleted file mode 100644
index 30439b8c6..000000000
--- a/winsup/doc/configure.ac
+++ /dev/null
@@ -1,26 +0,0 @@
-dnl Autoconf configure script for winsup/doc
-dnl Copyright 1997, 1998, 1999, 2000, 2001, 2006, 2012, 2013, 2014 Red Hat, Inc.
-dnl
-dnl This file is part of Cygwin.
-dnl
-dnl This software is a copyrighted work licensed under the terms of the
-dnl Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-dnl details.
-
-dnl Process this file with autoconf to produce a configure script.
-
-AC_PREREQ([2.59])
-AC_INIT([Cygwin Documentation], 0,
- cygwin@cygwin.com, cygwin, https://cygwin.com)
-AC_CONFIG_SRCDIR(cygwin-api.xml)
-AC_CONFIG_AUX_DIR(../..)
-
-AC_PROG_INSTALL
-AC_NO_EXECUTABLES
-AC_CANONICAL_SYSTEM
-
-LIB_AC_PROG_CC
-
-AC_SUBST(build_exeext)
-
-AC_OUTPUT(Makefile)
diff --git a/winsup/doc/cygserver.xml b/winsup/doc/cygserver.xml
deleted file mode 100644
index 6a4ec4ec5..000000000
--- a/winsup/doc/cygserver.xml
+++ /dev/null
@@ -1,239 +0,0 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-
-<sect1 id="using-cygserver"><title>Cygserver</title>
-
-<sect2 id="what-is-cygserver"><title>What is Cygserver?</title>
-
-<para>
- Cygserver is a program which is designed to run as a background service.
- It provides Cygwin applications with services which require security
- arbitration or which need to persist while no other cygwin application
- is running.
-</para>
-<para>
- The implemented services so far are:
-</para>
-<itemizedlist mark="bullet">
- <listitem><para>XSI IPC Message Queues.</para></listitem>
- <listitem><para>XSI IPC Semaphores.</para></listitem>
- <listitem><para>XSI IPC Shared Memory.</para></listitem>
- <listitem><para>Allows non-privileged users to store obfuscated
- passwords in the registry to be used by <command>setuid</command> and
- <command>seteuid</command> calls to create user tokens with network
- credentials. This service is used by <command><link
- linkend="passwd">passwd</link> -R</command>. Using the stored
- passwords in <command>set(e)uid</command> does not require running
- Cygserver. For details, see <xref linkend="ntsec-setuid-overview"></xref>.
- </para></listitem>
- <listitem><para>This functionality is no longer used since Cygwin 1.7.6,
- but the interface is still available: Control slave tty/pty handle dispersal
- from tty owner to other processes without compromising the owner processes'
- security. Starting with Cygwin 1.7.6 another safe mechanism to share tty/pty
- handles is used.</para></listitem>
-</itemizedlist>
-
-</sect2>
-
-<sect2 id="cygserver-command-line"><title>Cygserver command line options</title>
-
-<para>
- Options to Cygserver take the normal UNIX-style `-X' or `--longoption' form.
- Nearly all options have a counterpart in the configuration file (see below)
- so setting them on the command line isn't really necessary. Command line
- options override settings from the Cygserver configuration file.
-</para>
-<para>
- The one-character options are prepended by a single dash, the long variants
- are prepended with two dashes. Arguments to options are marked in angle
- brackets below. These are not part of the actual syntax but are used only to
- denote the arguments. Note that all arguments are required. Cygserver
- has no options with optional arguments.
-</para>
-<para>
- The recognized options are:
-</para>
-
-<itemizedlist spacing="compact">
-<listitem>
- <screen>-f, --config-file &lt;file&gt;</screen>
- <para>
- Use &lt;file&gt; as configuration file instead of the default configuration
- line. The default configuration file is /etc/cygserver.conf.
- The --help and --version options will print the default configuration
- pathname.
- </para>
- <para>
- This option has no counterpart in the configuration file, for obvious
- reasons.
- </para>
-</listitem>
-<listitem>
- <screen>-c, --cleanup-threads &lt;num&gt;</screen>
- <para>
- Number of threads started to perform cleanup tasks. Default is 2.
- Configuration file option: kern.srv.cleanup_threads
- </para>
-</listitem>
-<listitem>
- <screen>-r, --request-threads &lt;num&gt;</screen>
- <para>
- Number of threads started to serve application requests. Default is 10.
- The -c and -r options can be used to play with Cygserver's performance
- under heavy load conditions or on slow machines.
- Configuration file option: kern.srv.request_threads
- </para>
-</listitem>
-<listitem>
- <screen>-d, --debug</screen>
- <para>
- Log debug messages to stderr. These will clutter your stderr output with
- a lot of information, typically only useful to developers.
- </para>
-</listitem>
-<listitem>
- <screen>-e, --stderr</screen>
- <para>
- Force logging to stderr. This is the default if stderr is connected to
- a tty. Otherwise, the default is logging to the system log. By using
- the -e, -E, -y, -Y options (or the appropriate settings in the
- configuration file), you can explicitly set the logging output as you
- like, even to both, stderr and syslog.
- Configuration file option: kern.log.stderr
- </para>
-</listitem>
-<listitem>
- <screen>-E, --no-stderr</screen>
- <para>
- Don't log to stderr. Configuration file option: kern.log.stderr
- </para>
-</listitem>
-<listitem>
- <screen>-y, --syslog</screen>
- <para>
- Force logging to the system log. This is the default, if stderr is not
- connected to a tty, e. g. redirected to a file.
- Configuration file option: kern.log.syslog
- </para>
-</listitem>
-<listitem>
- <screen>-Y, --no-syslog</screen>
- <para>
- Don't log to syslog. Configuration file option: kern.log.syslog
- </para>
-</listitem>
-<listitem>
- <screen>-l, --log-level &lt;level&gt;</screen>
- <para>
- Set the verbosity level of the logging output. Valid values are between
- 1 and 7. The default level is 6, which is relatively chatty. If you set
- it to 1, you will get only messages which are printed under severe conditions,
- which will result in stopping Cygserver itself.
- Configuration file option: kern.log.level
- </para>
-</listitem>
-<listitem>
- <screen>-m, --no-sharedmem</screen>
- <para>
- Don't start XSI IPC Shared Memory support. If you don't need XSI IPC
- Shared Memory support, you can switch it off here.
- Configuration file option: kern.srv.sharedmem
- </para>
-</listitem>
-<listitem>
- <screen>-q, --no-msgqueues</screen>
- <para>
- Don't start XSI IPC Message Queues.
- Configuration file option: kern.srv.msgqueues
- </para>
-</listitem>
-<listitem>
- <screen>-s, --no-semaphores</screen>
- <para>
- Don't start XSI IPC Semaphores.
- Configuration file option: kern.srv.semaphores
- </para>
-</listitem>
-<listitem>
- <screen>-S, --shutdown</screen>
- <para>
- Shutdown a running daemon and exit. Other methods are sending a SIGHUP
- to the Cygserver PID or, if running as service, calling `net stop
- cygserver' or `cygrunsrv -E cygserver'.
- </para>
-</listitem>
-<listitem>
- <screen>-h, --help</screen>
- <para>
- Output usage information and exit.
- </para>
-</listitem>
-<listitem>
- <screen>-V, --version</screen>
- <para>
- Output version information and exit.
- </para>
-</listitem>
-</itemizedlist>
-
-</sect2>
-
-<sect2 id="start-cygserver"><title>How to start Cygserver</title>
-
-<para>
- Before you run Cygserver for the first time, you should run the
- /usr/bin/cygserver-config script once. It creates the default
- configuration file and, upon request, installs Cygserver as service.
- The script only performs a default install, with no further options
- given to Cygserver when running as service. Due to the wide
- configurability by changing the configuration file, that's typically
- not necessary.
-</para>
-<para>
- You should always run Cygserver as a service under LocalSystem account.
- This is the way it is installed for you by the /usr/bin/cygserver-config
- script.
-</para>
-
-</sect2>
-
-<sect2 id="cygserver-config"><title>The Cygserver configuration file</title>
-
-<para>
- Cygserver has many options, which allow you to customize the server
- to your needs. Customization is accomplished by editing the configuration
- file, which is by default /etc/cygserver.conf. This file is only read
- once, at startup of Cygserver. There's no option to re-read the file at
- runtime by, say, sending a signal to Cygserver.
-</para>
-<para>
- The configuration file determines how Cygserver operates. There are
- options which set the number of threads running in parallel, options
- for setting how and what to log and options to set various maximum
- values for the IPC services.
-</para>
-<para>
- The default configuration file delivered with Cygserver is installed
- to /etc/defaults/etc. The /usr/bin/cygserver-config script copies it to
- /etc, giving you the option to overwrite an already existing file or to
- leave it alone. Therefore, the /etc file is safe to be changed by you,
- since it will not be overwritten by a later update installation.
-</para>
-<para>
- The default configuration file contains many comments which describe
- everything needed to understand the settings. A comment at the start of the
- file describes the syntax rules for the file. The default options are shown
- in the file but are commented out.
-</para>
-<para>
- It is generally a good idea to uncomment only options which you intend to
- change from the default values. Since reading the options file on Cygserver
- startup doesn't take much time, it's also considered good practice to keep
- all other comments in the file. This keeps you from searching for clues
- in other sources.
-</para>
-
-</sect2>
-
-</sect1>
diff --git a/winsup/doc/cygwin-api.xml b/winsup/doc/cygwin-api.xml
deleted file mode 100644
index ac98c0033..000000000
--- a/winsup/doc/cygwin-api.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-
-<book id="cygwin-api" xmlns:xi="http://www.w3.org/2001/XInclude">
-
- <bookinfo>
- <date>1998-08-31</date>
- <title>Cygwin API Reference</title>
- <xi:include href="legal.xml"/>
- </bookinfo>
-
- <toc></toc>
-
- <xi:include href="posix.xml"/>
-
- <chapter id="cygwin-functions" xmlns:xi="http://www.w3.org/2001/XInclude">
- <title>Cygwin Functions</title>
-
- <xi:include href="path.xml"/>
- <xi:include href="logon-funcs.xml"/>
- <xi:include href="misc-funcs.xml"/>
-
- </chapter>
-
-</book>
diff --git a/winsup/doc/cygwin-ug-net.xml b/winsup/doc/cygwin-ug-net.xml
deleted file mode 100644
index 89526d721..000000000
--- a/winsup/doc/cygwin-ug-net.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-
-<book id="cygwin-ug-net" xmlns:xi="http://www.w3.org/2001/XInclude">
- <bookinfo>
- <date>2009-03-18</date>
- <title>Cygwin User's Guide</title>
- <xi:include href="legal.xml"/>
- </bookinfo>
-
- <xi:include href="overview.xml"/>
- <xi:include href="setup-net.xml"/>
- <xi:include href="using.xml"/>
- <xi:include href="programming.xml"/>
-</book>
diff --git a/winsup/doc/cygwin.xsl b/winsup/doc/cygwin.xsl
deleted file mode 100644
index 99ec5d09c..000000000
--- a/winsup/doc/cygwin.xsl
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version='1.0'?>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns:fo="http://www.w3.org/1999/XSL/Format"
- version='1.0'>
-
-<xsl:param name="chunker.output.doctype-public"
- select="'-//W3C//DTD HTML 4.01 Transitional//EN'" />
-<xsl:param name="html.stylesheet" select="'docbook.css'"/>
-<xsl:param name="use.id.as.filename" select="1" />
-<xsl:param name="root.filename" select="@id" />
-<xsl:param name="toc.section.depth" select="4" />
-
-</xsl:stylesheet>
diff --git a/winsup/doc/cygwinenv.xml b/winsup/doc/cygwinenv.xml
deleted file mode 100644
index 6c3442f2c..000000000
--- a/winsup/doc/cygwinenv.xml
+++ /dev/null
@@ -1,264 +0,0 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-
-<sect1 id="using-cygwinenv"><title>The <envar>CYGWIN</envar> environment
-variable</title>
-
-<sect2 id="cygwinenv-implemented-options">
-<title>Implemented options</title>
-
-<para>The <envar>CYGWIN</envar> environment variable is used to configure
-many global settings for the Cygwin runtime system. It contains the options
-listed below, separated by blank characters. Many options can be turned off
-by prefixing with <literal>no</literal>.</para>
-
-<itemizedlist mark="bullet">
-
-<listitem>
-<para><envar>(no)detect_bloda</envar> - If set, Cygwin will try to detect
-foreign applications which try to inject threads into a Cygwin process,
-or which redirect system sockets by providing an enforced so-called
-<literal>Layered Service Provider</literal>. This may or may not help to
-detect <ulink url="http://cygwin.com/faq/faq.html#faq.using.bloda">
-BLODAs</ulink>. Don't use this option for day-to-day usage, it will slow
-down every thread and socket creation!</para>
-</listitem>
-
-<listitem>
-<para><envar>(no)dosfilewarning</envar> - If set, Cygwin will warn the
-first time a user uses an "MS-DOS" style path name rather than a POSIX-style
-path name. Defaults to off.</para>
-</listitem>
-
-<listitem>
-<para><envar>(no)export</envar> - If set, the final values of these
-settings are re-exported to the environment as <envar>CYGWIN</envar> again.
-Defaults to off.</para>
-</listitem>
-
-<listitem>
-<para>
-<envar>error_start:Win32filepath</envar> - if set, runs
-<filename>Win32filepath</filename> when cygwin encounters a fatal error,
-which is useful for debugging. <filename>Win32filepath</filename> is
-usually set to the path to <command>gdb</command> or
-<command>dumper</command>, for example
-<filename>C:\cygwin\bin\gdb.exe</filename>.
-There is no default set.
-</para>
-</listitem>
-
-<listitem>
-<para><envar>(no)glob[:ignorecase]</envar> - if set, command line arguments
-containing UNIX-style file wildcard characters (brackets, braces, question mark,
-asterisk, escaped with \) are expanded into lists of files that match
-those wildcards.
-This is applicable only to programs run from non-Cygwin programs such as a CMD prompt.
-That means that this setting does not affect globbing operations for shells such as
-bash, sh, tcsh, zsh, etc.
-Default is set.</para>
-<para>This option also accepts an optional <literal>[no]ignorecase</literal> modifer.
-If supplied, wildcard matching is case insensitive. The default is <literal>noignorecase</literal></para>
-</listitem>
-
-<listitem>
-<para><envar>(no)pipe_byte</envar> - causes Cygwin to open pipes in byte mode rather than
-message mode.</para>
-</listitem>
-
-<listitem>
-<para><envar>proc_retry:n</envar> - causes <function>fork()</function> and
-<function>exec*()</function> to retry n times when a child process fails
-due to certain windows-specific errors. These errors usually occur when
-processes are being started while a user is logging off.
-</para>
-</listitem>
-
-<listitem>
-<para><envar>(no)reset_com</envar> - if set, serial ports are reset
-to 9600-8-N-1 with no flow control when used. This is done at open
-time and when handles are inherited. Defaults to set.</para>
-</listitem>
-
-<listitem>
-<para><envar>(no)wincmdln</envar> - if set, the windows complete command
-line (truncated to ~32K) will be passed on any processes that it creates
-in addition to the normal UNIX argv list. Defaults to not set.</para>
-</listitem>
-
-<listitem>
-<para><envar>winsymlinks:{lnk,native,nativestrict}</envar> - if set to just
-<literal>winsymlinks</literal> or <literal>winsymlinks:lnk</literal>,
-Cygwin creates symlinks as Windows shortcuts with a special header and
-the R/O attribute set.</para>
-
-<para>If set to <literal>winsymlinks:native</literal> or
-<literal>winsymlinks:nativestrict</literal>, Cygwin creates symlinks as
-native Windows symlinks on filesystems and OS versions supporting them.
-If the OS is known not to support native symlinks (Windows XP, Windows
-Server 2003), a warning message is produced once per session.</para>
-
-<para>The difference between <literal>winsymlinks:native</literal> and
-<literal>winsymlinks:nativestrict</literal> is this: If the filesystem
-supports native symlinks and Cygwin fails to create a native symlink for
-some reason, it will fall back to creating Cygwin default symlinks
-with <literal>winsymlinks:native</literal>, while with
-<literal>winsymlinks:nativestrict</literal> the <literal>symlink(2)</literal>
-system call will immediately fail.</para>
-
-<para>For more information on symbolic links, see
-<xref linkend="pathnames-symlinks"></xref>.</para>
-</listitem>
-
-</itemizedlist>
-
-</sect2>
-
-<sect2 id="cygwinenv-removed-options">
-<title>Obsolete options</title>
-
-<para>
-Certain CYGWIN options available in past releases have been removed in
-Cygwin 1.7 for one reason or another. These obsolete options are listed
-below.</para>
-
-<itemizedlist mark="bullet">
-
-<listitem>
-<para><envar>(no)binmode</envar> - This option has been removed because
-all file opens default to binary mode, unless the open mode has been specified
-explicitly in the open(2) call.
-</para>
-</listitem>
-
-<listitem>
-<para><envar>check_case</envar> - This option has been removed in favor of
-real case sensitivity and the per-mount option "posix=[0|1]". For more
-information, read the documentation in <xref linkend="mount-table"></xref> and
-<xref linkend="pathnames-casesensitive"></xref>.</para>
-</listitem>
-
-<listitem>
-<para><envar>codepage:[ansi|oem]</envar> - This option controlled
-which character set is used for file and console operations. Since Cygwin
-is now doing all character conversion by itself, depending on the
-application call to the <function>setlocale()</function> function, and in
-turn by the setting of the environment variables <envar>$LANG</envar>,
-<envar>$LC_ALL</envar>, or <envar>$LC_CTYPE</envar>, this setting
-became superfluous.</para>
-</listitem>
-
-<listitem>
-<para><envar>(no)envcache</envar> - Originally, <envar>envcache</envar>
-controlled caching of environment variable conversion between Win32 and
-POSIX. The default setting works fine, the option was just useless.</para>
-</listitem>
-
-<listitem>
-<para><envar>forkchunk:[intval]</envar> - This option allowed to influence
-the <function>fork()</function> function in the way the memory of the
-parent process gets copied to the child process. This functionality was
-only useful for Windows 95/98/Me.
-</para>
-</listitem>
-
-<listitem>
-<para><envar>(no)ntea</envar> - This option has been removed since it
-only fakes security which is considered dangerous and useless. It also
-created an uncontrollably large file on FAT and was entirely useless
-on FAT32.</para>
-</listitem>
-
-<listitem>
-<para><envar>(no)ntsec</envar> - This option has been removed in favor of
-the per-mount option "acl"/"noacl". For more information, read the
-documentation in <xref linkend="mount-table"></xref>.</para>
-</listitem>
-
-<listitem>
-<para><envar>(no)server</envar> - Originally this option had to be
-enabled on the client side to use features only available when running
-<command>cygserver</command>. This option has been removed because Cygwin now
-always tries to contact cygserver if a function is called which requires
-cygserver being available. For more information, read the documentation
-in <xref linkend="using-cygserver"></xref>.</para>
-</listitem>
-
-<listitem>
-<para><envar>(no)smbntsec</envar> - This option has been removed in favor of
-the per-mount option "acl"/"noacl". For more information, read the
-documentation in <xref linkend="mount-table"></xref>.</para>
-</listitem>
-
-<listitem>
-<para><envar>(no)strip_title</envar> - Removed because setting the Window title
-can be controlled by the application via Escape sequences.</para>
-</listitem>
-
-<listitem>
-<para><envar>(no)title</envar> - Removed because setting the Window title
-can be controlled by the application via Escape sequences.</para>
-</listitem>
-
-<listitem>
-<para><envar>(no)transparent_exe</envar> - This option has been removed
-because the behaviour it switched on is now the standard behaviour in
-Cygwin.</para>
-</listitem>
-
-<listitem>
-<para><envar>(no)traverse</envar> - This option has been removed because
-traverse checking is not quite correctly implemented by Microsoft and
-it's behaviour has been getting worse with each new OS version. This
-complicates its usage so the option has been removed for now.</para>
-</listitem>
-
-<listitem>
-<para><envar>(no)tty</envar> - If set, Cygwin enabled extra support
-(i.e., termios) for UNIX-like ttys in the Windows console. This option
-has been removed because it can be easily replaced by using a terminal
-like <command>mintty</command>, and it does not work well with some
-Windows programs.</para>
-</listitem>
-
-<listitem>
-<para><envar>(no)upcaseenv</envar> - This option could be used to convert
-all environment variables to uppercase. This was the default behavior in
-releases prior to Cygwin 1.7. Since keeping the case of environment
-variables intact is POSIXly correct, Cygwin now does not change the case
-of environment variables, except for a restricted set to maintain minimal
-backward compatibility. The current list of always uppercased variables is:
-</para>
-<screen>
- ALLUSERSPROFILE
- COMMONPROGRAMFILES
- COMPUTERNAME
- COMSPEC
- HOME
- HOMEDRIVE
- HOMEPATH
- NUMBER_OF_PROCESSORS
- OS
- PATH
- PATHEXT
- PROCESSOR_ARCHITECTURE
- PROCESSOR_IDENTIFIER
- PROCESSOR_LEVEL
- PROCESSOR_REVISION
- PROGRAMFILES
- SYSTEMDRIVE
- SYSTEMROOT
- TEMP
- TERM
- TMP
- TMPDIR
- WINDIR
-</screen>
-</listitem>
-
-</itemizedlist>
-
-</sect2>
-
-</sect1>
diff --git a/winsup/doc/dll.xml b/winsup/doc/dll.xml
deleted file mode 100644
index f0369760f..000000000
--- a/winsup/doc/dll.xml
+++ /dev/null
@@ -1,145 +0,0 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-
-<sect1 id="dll"><title>Building and Using DLLs</title>
-
-<para>DLLs are Dynamic Link Libraries, which means that they're linked
-into your program at run time instead of build time. There are three
-parts to a DLL:</para>
-
-<itemizedlist spacing="compact">
-<listitem><para> the exports </para></listitem>
-<listitem><para> the code and data </para></listitem>
-<listitem><para> the import library </para></listitem>
-</itemizedlist>
-
-<para>The code and data are the parts you write - functions,
-variables, etc. All these are merged together, like if you were
-building one big object files, and put into the dll. They are not
-put into your .exe at all.</para>
-
-<para>The exports contains a list of functions and variables that the
-dll makes available to other programs. Think of this as the list of
-"global" symbols, the rest being hidden. Normally, you'd create this
-list by hand with a text editor, but it's possible to do it
-automatically from the list of functions in your code. The
-<filename>dlltool</filename> program creates the exports section of
-the dll from your text file of exported symbols.</para>
-
-<para>The import library is a regular UNIX-like
-<filename>.a</filename> library, but it only contains the tiny bit of
-information needed to tell the OS how your program interacts with
-("imports") the dll. This information is linked into your
-<filename>.exe</filename>. This is also generated by
-<filename>dlltool</filename>.</para>
-
-<sect2 id="dll-build"><title>Building DLLs</title>
-
-<para>This page gives only a few simple examples of gcc's DLL-building
-capabilities. To begin an exploration of the many additional options,
-see the gcc documentation and website, currently at
-<ulink url="http://gcc.gnu.org/">http://gcc.gnu.org/</ulink>
-</para>
-
-<para>Let's go through a simple example of how to build a dll.
-For this example, we'll use a single file
-<filename>myprog.c</filename> for the program
-(<filename>myprog.exe</filename>) and a single file
-<filename>mydll.c</filename> for the contents of the dll
-(<filename>mydll.dll</filename>).</para>
-
-<para>Fortunately, with the latest gcc and binutils the process for building a dll
-is now pretty simple. Say you want to build this minimal function in mydll.c:</para>
-
-<screen>
-#include &lt;stdio.h&gt;
-
-int
-hello()
-{
- printf ("Hello World!\n");
-}
-</screen>
-
-<para>First compile mydll.c to object code:</para>
-
-<screen>gcc -c mydll.c</screen>
-
-<para>Then, tell gcc that it is building a shared library:</para>
-
-<screen>gcc -shared -o mydll.dll mydll.o</screen>
-
-<para>
-That's it! To finish up the example, you can now link to the
-dll with a simple program:
-</para>
-
-<screen>
-int
-main ()
-{
- hello ();
-}
-</screen>
-
-<para>
-Then link to your dll with a command like:
-</para>
-
-<screen>gcc -o myprog myprog.c -L./ -lmydll</screen>
-
-<para>However, if you are building a dll as an export library,
-you will probably want to use the complete syntax:</para>
-
-<screen>gcc -shared -o cyg${module}.dll \
- -Wl,--out-implib=lib${module}.dll.a \
- -Wl,--export-all-symbols \
- -Wl,--enable-auto-import \
- -Wl,--whole-archive ${old_libs} \
- -Wl,--no-whole-archive ${dependency_libs}</screen>
-
-<para>
-The name of your library is <literal>${module}</literal>, prefixed with
-<literal>cyg</literal> for the DLL and <literal>lib</literal> for the
-import library. Cygwin DLLs use the <literal>cyg</literal> prefix to
-differentiate them from native-Windows MinGW DLLs, see
-<ulink url="http://mingw.org">the MinGW website</ulink> for more details.
-<literal>${old_libs}</literal> are all
-your object files, bundled together in static libs or single object
-files and the <literal>${dependency_libs}</literal> are import libs you
-need to link against, e.g
-<userinput>'-lpng -lz -L/usr/local/special -lmyspeciallib'</userinput>.
-</para>
-</sect2>
-
-<sect2 id="dll-link"><title>Linking Against DLLs</title>
-
-<para>If you have an existing DLL already, you need to build a
-Cygwin-compatible import library. If you have the source to compile
-the DLL, see <xref linkend="dll-build"></xref> for details on having
-<filename>gcc</filename> build one for you. If you do not have the
-source or a supplied working import library, you can get most of
-the way by creating a .def file with these commands (you might need to
-do this in <filename>bash</filename> for the quoting to work
-correctly):</para>
-
-<screen>
-echo EXPORTS > foo.def
-nm foo.dll | grep ' T _' | sed 's/.* T _//' >> foo.def
-</screen>
-
-<para>Note that this will only work if the DLL is not stripped.
-Otherwise you will get an error message: "No symbols in
-foo.dll".</para>
-
-<para>Once you have the <filename>.def</filename> file, you can create
-an import library from it like this:</para>
-
-<screen>
-dlltool --def foo.def --dllname foo.dll --output-lib foo.a
-</screen>
-
-</sect2>
-
-</sect1>
diff --git a/winsup/doc/effectively.xml b/winsup/doc/effectively.xml
deleted file mode 100644
index cb25628fd..000000000
--- a/winsup/doc/effectively.xml
+++ /dev/null
@@ -1,184 +0,0 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-
-<sect1 id="using-effectively">
-<title>Using Cygwin effectively with Windows</title>
-
-<para>
-Cygwin is not a full operating system, and so must rely on Windows for
-accomplishing some tasks. For example, Cygwin provides a POSIX view
-of the Windows filesystem, but does not provide filesystem drivers of
-its own. Therefore part of using Cygwin effectively is learning to use
-Windows effectively.
-Many Windows utilities provide a good way to interact with Cygwin's
-predominately command-line environment. For example,
-<command>ipconfig.exe</command> provides information about network
-configuration, and <command>net.exe</command> views and configures
-network file and printer resources. Most of these tools
-support the <literal>/?</literal> switch to display usage information.
-</para>
-
-<para>
-Unfortunately, no standard set of tools included with all versions of
-Windows exists. Generally, the younger the Windows version, the more
-complete are the on-board tools. Microsoft also provides free downloads
-for Windows XP (the Windows Support Tools). Additionally, many independent
-sites such as
-<ulink url="http://download.com">download.com</ulink>,
-<ulink url="http://simtel.net">simtel.net</ulink>,
-and Microsoft's own
-<ulink url="http://technet.microsoft.com/en-us/sysinternals/default.aspx">Sysinternals</ulink>
-provide quite useful command-line utilities, as far as they are not
-already provided by Cygwin. A few Windows tools, such as
-<command>find.exe</command>, <command>link.exe</command> and
-<command>sort.exe</command>, may conflict with the Cygwin versions
-make sure that you use the full path (<command>/usr/bin/find</command>)
-or that your Cygwin <literal>bin</literal> directory comes first in your
-<envar>PATH</envar>.
-</para>
-
-<sect2 id="using-pathnames-effectively"> <title>Pathnames</title>
-
-<para>
-Windows programs do not understand POSIX pathnames, so any arguments
-that reference the filesystem must be in Windows (or DOS) format or
-translated. Cygwin provides the <command>cygpath</command> utility for
-converting between Windows and POSIX paths. A complete description of its
-options and examples of its usage are in <xref linkend="cygpath"></xref>,
-including a shell script for starting Windows Explorer in any directory.
-The same format works for most Windows programs, for example
-<screen>
-<literal>notepad.exe "$(cygpath -aw "Desktop/Phone Numbers.txt")"</literal>
-</screen>
-A few programs require a Windows-style, semicolon-delimited path list,
-which <command>cygpath</command> can translate from a POSIX path with the
-<literal>-p</literal> option. For example, a Java compilation from
-<command>bash</command> might look like this:
-<screen>
-<literal>javac -cp "$(cygpath -pw "$CLASSPATH")" hello.java</literal>
-</screen>
-Since using quoting and subshells is somewhat awkward, it is often
-preferable to use <command>cygpath</command> in shell scripts.
-</para>
-
-</sect2>
-
-<sect2 id="using-net"> <title>Cygwin and Windows Networking</title>
-<para>
-Many popular Cygwin packages, such as <systemitem>ncftp</systemitem>,
-<systemitem>lynx</systemitem>, and <systemitem>wget</systemitem>, require a
-network connection. Since Cygwin relies on Windows for connectivity,
-if one of these tools is not working as expected you may need to
-troubleshoot using Windows tools. The first test is to see if you
-can reach the URL's host with <command>ping.exe</command>, one of the
-few utilities included with every Windows version since Windows 95.
-If you chose to install the <systemitem>inetutils</systemitem> package,
-you may have both
-Windows and Cygwin versions of utilities such as <command>ftp</command>
-and <command>telnet</command>. If you are having problems using one
-of these programs, see if the alternate one works as expected.
-</para>
-
-<para>
-There are a variety of other programs available for specific situations.
-If your system does not have an always-on network connection, you
-may be interested in <command>rasdial.exe</command> for automating dialup
-connections.
-Users who frequently change their network
-configuration can script these changes with <command>netsh.exe</command>.
-For proxy users, the open source
-<ulink url="http://apserver.sourceforge.net">
-NTLM Authorization Proxy Server</ulink> or the no-charge
-<ulink url="http://www.hummingbird.com/products/nc/socks/index.html">
-Hummingbird SOCKS Proxy</ulink> may allow you to use Cygwin network
-programs in your environment.
-</para>
-
-</sect2>
-
-<sect2 id="using-cygutils"><title>The cygutils package</title>
-
-<para>
-The optional <systemitem>cygutils</systemitem> package contains
-miscellaneous tools that are small enough to not require their own package.
-It is not included in a default Cygwin install; select it from the Utils
-category in <command>setup.exe</command>. Several of the
-<systemitem>cygutils</systemitem> tools are useful for interacting with
-Windows.</para>
-
-<para>
-One of the hassles of Unix-Windows interoperability is the different line
-endings on text files. As mentioned in <xref linkend="using-textbinary"></xref>,
-Unix tools such as <command>tr</command> can convert between CRLF and LF
-endings, but <systemitem>cygutils</systemitem> provides several dedicated programs:
-<command>conv</command>, <command>d2u</command>, <command>dos2unix</command>,
-<command>u2d</command>, and <command>unix2dos</command>. Use the
-<literal>--help</literal> switch for usage information.
-</para>
-</sect2>
-
-<sect2 id="using-shortcuts"><title>Creating shortcuts with cygutils</title>
-<para>
-Another problem area is between Unix-style links, which link one file
-to another, and Microsoft .lnk files, which provide a shortcut to a
-file. They seem similar at first glance but, in reality, are fairly
-different. By default, Cygwin does not create symlinks as .lnk files,
-but there's an option to do that, see <xref linkend="using-cygwinenv"></xref>.
-These symlink .lnk files are compatible with Windows-created .lnk files,
-but they are still different. They do not include much of the information
-that is available in a standard Microsoft shortcut, such as the working
-directory, an icon, etc. The <systemitem>cygutils</systemitem>
-package includes a <command>mkshortcut</command> utility for creating
-standard native Microsoft .lnk files.
-</para>
-
-<para>
-But here's the problem. If Cygwin handled these native shortcuts like any
-other symlink, you could not archive Microsoft .lnk files into
-<command>tar</command> archives and keep all the information in them.
-After unpacking, these shortcuts would have lost all the extra information
-and would be no different than standard Cygwin symlinks. Therefore these two
-types of links are treated differently. Unfortunately, this means that the
-usual Unix way of creating and using symlinks does not work with native
-Windows shortcuts.
-</para>
-</sect2>
-
-<sect2 id="using-printing"><title>Printing with cygutils</title>
-<para>
-There are several options for printing from Cygwin, including the
-<command>lpr</command> found in <systemitem>cygutils</systemitem> (not to be confused with the
-native Windows <command>lpr.exe</command>). The easiest way to use <systemitem>cygutils</systemitem>'
-<command>lpr</command> is to specify a default device name in the
-<envar>PRINTER</envar> environment variable. You may also specify a device
-on the command line with the <literal>-d</literal> or <literal>-P</literal>
-options, which will override the environment variable setting.
-</para>
-
-<para>
-A device name
-may be a UNC path (<literal>\\server_name\printer_name</literal>), a reserved
-DOS device name (<literal>prn</literal>, <literal>lpt1</literal>), or a
-local port name that is mapped to a printer share. Note that forward slashes
-may be used in a UNC path (<literal>//server_name/printer_name</literal>),
-which is helpful when using <command>lpr</command> from a shell that uses
-the backslash as an escape character.
-</para>
-
-<para>
-<command>lpr</command> sends raw data to the printer; no formatting is done.
-Many, but not all, printers accept plain text as input. If your printer
-supports PostScript, packages such as
-<systemitem>a2ps</systemitem> and <systemitem>enscript</systemitem> can prepare
-text files for printing. The <systemitem>ghostscript</systemitem> package also
-provides some translation
-from PostScript to various native printer languages. Additionally, a native
-Windows application for printing PostScript, <command>gsprint</command>, is
-available from the <ulink url="http://www.cs.wisc.edu/~ghost/">Ghostscript
-website</ulink>.
-</para>
-
-</sect2>
-
-</sect1>
diff --git a/winsup/doc/faq-api.xml b/winsup/doc/faq-api.xml
deleted file mode 100644
index de2d31cc6..000000000
--- a/winsup/doc/faq-api.xml
+++ /dev/null
@@ -1,329 +0,0 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-
-<qandadiv id="faq.api">
-<title>Cygwin API Questions</title>
-
-<!-- faq-api.xml -->
-<qandaentry id="faq.api.everything">
-<question><para>How does everything work?</para></question>
-<answer>
-
-<para>There's a C library which provides a POSIX-style API. The
-applications are linked with it and voila - they run on Windows.
-</para>
-<para>The aim is to add all the goop necessary to make your apps run on
-Windows into the C library. Then your apps should (ideally) run on POSIX
-systems (Unix/Linux) and Windows with no changes at the source level.
-</para>
-<para>The C library is in a DLL, which makes basic applications quite small.
-And it allows relatively easy upgrades to the Win32/POSIX translation
-layer, providing that DLL changes stay backward-compatible.
-</para>
-<para>For a good overview of Cygwin, you may want to read the Cygwin
-User's Guide.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.api.snapshots">
-<question><para>Are development snapshots for the Cygwin library available?</para></question>
-<answer>
-
-<para>Yes. They're made whenever anything interesting happens inside the
-Cygwin library (usually roughly on a nightly basis, depending on how much
-is going on). They are only intended for those people who wish to
-contribute code to the project. If you aren't going to be happy
-debugging problems in a buggy snapshot, avoid these and wait for a real
-release. The snapshots are available from
-<ulink url="http://cygwin.com/snapshots/">http://cygwin.com/snapshots/</ulink>.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.api.cr-lf">
-<question><para>How is the DOS/Unix CR/LF thing handled?</para></question>
-<answer>
-
-<para>Let's start with some background.
-</para>
-<para>On POSIX systems, a file is a file and what the file contains is
-whatever the program/programmer/user told it to put into it. In Windows,
-a file is also a file and what the file contains depends not only on the
-program/programmer/user but also the file processing mode.
-</para>
-<para>When processing in text mode, certain values of data are treated
-specially. A \n (new line, NL) written to the file will prepend a \r
-(carriage return, CR) so that if you `printf("Hello\n") you in fact get
-"Hello\r\n". Upon reading this combination, the \r is removed and the
-number of bytes returned by the read is 1 less than was actually read.
-This tends to confuse programs dependent on ftell() and fseek(). A
-Ctrl-Z encountered while reading a file sets the End Of File flags even
-though it truly isn't the end of file.
-</para>
-<para>One of Cygwin's goals is to make it possible to mix Cygwin-ported
-POSIX programs with generic Windows programs. As a result, Cygwin allows
-to open files in text mode. In the accompanying tools, tools that deal
-with binaries (e.g. objdump) operate in POSIX binary mode and many (but
-not all) tools that deal with text files (e.g. bash) operate in text mode.
-There are also some text tools which operate in a mixed mode. They read
-files always in text mode, but write files in binary mode, or they write
-in the mode (text or binary) which is specified by the underlying mount
-point. For a description of mount points, see the Cygwin User's Guide.
-</para>
-<para>Actually there's no really good reason to do text mode processing
-since it only slows down reading and writing files. Additionally many
-Windows applications can deal with POSIX \n line endings just fine
-(unfortunate exception: Notepad). So we suggest to use binary mode
-as much as possible and only convert files from or to DOS text mode
-using tools specifically created to do that job, for instance, d2u and
-u2d from the cygutils package.
-</para>
-<para>It is rather easy for the porter of a Unix package to fix the source
-code by supplying the appropriate file processing mode switches to the
-open/fopen functions. Treat all text files as text and treat all binary
-files as binary. To be specific, you can select binary mode by adding
-<literal>O_BINARY</literal> to the second argument of an
-<literal>open</literal> call, or <literal>"b"</literal> to second argument
-of an <literal>fopen</literal> call. You can also call
-<literal>setmode (fd, O_BINARY)</literal>. To select text mode add
-<literal>O_TEXT</literal> to the second argument of an <literal>open</literal>
-call, or <literal>"t"</literal> to second argument of an
-<literal>fopen</literal> call, or just call
-<literal>setmode (fd, O_TEXT)</literal>.
-</para>
-<para>You can also avoid to change the source code at all by linking
-an additional object file to your executable. Cygwin provides various
-object files in the <filename>/usr/lib</filename> directory which,
-when linked to an executable, changes the default open modes of any
-file opened within the executed process itself. The files are
-<screen>
- binmode.o - Open all files in binary mode.
- textmode.o - Open all files in text mode.
- textreadmode.o - Open all files opened for reading in text mode.
- automode.o - Open all files opened for reading in text mode,
- all files opened for writing in binary mode.
-</screen>
-</para>
-<para>
-<note>
- Linking against these object files does <emphasis>not</emphasis> change
- the open mode of files propagated to a process by its parent process,
- for instance, if the process is part of a shell pipe expression.
-</note>
-</para>
-<para>Note that of the above flags only the "b" fopen flags are defined by
-ANSI. They exist under most flavors of Unix. However, using O_BINARY,
-O_TEXT, or the "t" flag is non-portable.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.api.threads">
-<question><para>Is the Cygwin library multi-thread-safe?</para></question>
-<answer>
-
-<para>Yes.
-</para>
-<para>There is also extensive support for 'POSIX threads', see the file
-<literal>cygwin.din</literal> for the list of POSIX thread functions provided.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.api.fork">
-<question><para>How is fork() implemented?</para></question>
-<answer>
-
-<para>Cygwin fork() essentially works like a non-copy on write version
-of fork() (like old Unix versions used to do). Because of this it
-can be a little slow. In most cases, you are better off using the
-spawn family of calls if possible.
-</para>
-<para>Here's how it works:
-</para>
-<para>Parent initializes a space in the Cygwin process table for child.
-Parent creates child suspended using Win32 CreateProcess call, giving
-the same path it was invoked with itself. Parent calls setjmp to save
-its own context and then sets a pointer to this in the Cygwin shared
-memory area (shared among all Cygwin tasks). Parent fills in the child's
-.data and .bss subsections by copying from its own address space into
-the suspended child's address space. Parent then starts the child.
-Parent waits on mutex for child to get to safe point. Child starts and
-discovers if has been forked and then longjumps using the saved jump
-buffer. Child sets mutex parent is waiting on and then blocks on
-another mutex waiting for parent to fill in its stack and heap. Parent
-notices child is in safe area, copies stack and heap from itself into
-child, releases the mutex the child is waiting on and returns from the
-fork call. Child wakes from blocking on mutex, recreates any mmapped
-areas passed to it via shared area and then returns from fork itself.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.api.globbing">
-<question><para>How does wildcarding (globbing) work?</para></question>
-<answer>
-
-<para>If the DLL thinks it was invoked from a DOS style prompt, it runs a
-`globber' over the arguments provided on the command line. This means
-that if you type <literal>LS *.EXE</literal> from DOS, it will do what you might
-expect.
-</para>
-<para>Beware: globbing uses <literal>malloc</literal>. If your application defines
-<literal>malloc</literal>, that will get used. This may do horrible things to you.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.api.symlinks">
-<question><para>How do symbolic links work?</para></question>
-<answer>
-
-<para>Cygwin knows of two ways to create symlinks.
-</para>
-<para>The default method generates link files with a magic header. When you
-open a file or directory that is a link to somewhere else, it opens the file
-or directory listed in the magic header. Because we don't want to have to
-open every referenced file to check symlink status, Cygwin marks symlinks
-with the system attribute. Files without the system attribute are not
-checked. Because remote samba filesystems do not enable the system
-attribute by default, symlinks do not work on network drives unless you
-explicitly enable this attribute or use the second method to create symlinks.
-</para>
-
-<para>The second method is enabled if `winsymlinks' is set in the environment
-variable CYGWIN.
-Using this method, Cygwin generates symlinks by creating Windows shortcuts.
-Cygwin created shortcuts have a special header (which is in that way never
-created by Explorer) and the R/O attribute set. A DOS path is stored in
-the shortcut as usual and the description entry is used to store the POSIX
-path. While the POSIX path is stored as is, the DOS path has perhaps to be
-rearranged to result in a valid path. This may result in a divergence
-between the DOS and the POSIX path when symlinks are moved crossing mount
-points. When a user changes the shortcut, this will be detected by Cygwin
-and it will only use the DOS path then. While Cygwin shortcuts are shown
-without the ".lnk" suffix in `ls' output, non-Cygwin shortcuts are shown
-with the suffix. However, both are treated as symlinks.
-</para>
-
-<para>Both, types of symlinks can live peacefully together since Cygwin
-treats both as symlinks regardless of the setting of `(no)winsymlinks' in
-the environment variable CYGWIN.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.api.executables">
-<question><para>Why do some files, which are not executables have the 'x' type.</para></question>
-<answer>
-
-<para>When working out the POSIX-style attribute bits on a file stored on
-certain filesystems (FAT, FAT32), the library has to fill out some information
-not provided by these filesystems.
-</para>
-<para>It guesses that files ending in .exe and .bat are executable, as are
-ones which have a "#!" as their first characters. This guessing doesn't
-take place on filesystems providing real permission information (NTFS, NFS),
-unless you switch the permission handling off using the mount flag "noacl"
-on these filesystems.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.api.secure">
-<question><para>How secure is Cygwin in a multi-user environment?</para></question>
-<answer>
-
-<para>As of version 1.5.13, the Cygwin developers are not aware of any feature
-in the cygwin dll that would allow users to gain privileges or to access
-objects to which they have no rights under Windows. However there is no
-guarantee that Cygwin is as secure as the Windows it runs on. Cygwin
-processes share some variables and are thus easier targets of denial of
-service type of attacks.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.api.net-functions">
-<question><para>How do the net-related functions work?</para></question>
-<answer>
-
-<para>The network support in Cygwin is supposed to provide the POSIX API, not
-the Winsock API.
-</para>
-<para>There are differences between the semantics of functions with the same
-name under the API.
-</para>
-<para>E.g., the POSIX select system call can wait on a standard file handles
-and handles to sockets. The select call in Winsock can only wait on
-sockets. Because of this, the Cygwin dll does a lot of nasty stuff behind
-the scenes, trying to persuade various Winsock/Win32 functions to do what
-a Unix select would do.
-</para>
-<para>If you are porting an application which already uses Winsock, then
-porting the application to Cygwin means to port the application to using
-the POSIX net functions. You should never mix Cygwin net functions with
-direct calls to Winsock functions. If you use Cygwin, use the POSIX API.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.api.winsock">
-<question><para>I don't want Unix sockets, how do I use normal Win32 winsock?</para></question>
-<answer>
-
-<para>You don't. Look for the MingW project to port applications using
-native Win32/Winsock functions.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.api.versions">
-<question><para>What version numbers are associated with Cygwin?</para></question>
-<answer>
-
-<para>Cygwin versioning is relatively complicated because of its status as a
-shared library. First of all, since October 1998 every Cygwin DLL has
-been named <literal>cygwin1.dll</literal> and has a 1 in the release name.
-Additionally, there are DLL major and minor numbers that correspond to
-the name of the release, and a release number. In other words,
-cygwin-1.7.1-2 is <literal>cygwin1.dll</literal>, major version 7, minor
-version 1, release 2.
-</para>
-<para>The <literal>cygwin1.dll</literal> major version number gets incremented
-only when a change is made that makes existing software incompatible. For
-example, the first major version 5 release, cygwin-1.5.0-1, added 64-bit
-file I/O operations, which required many libraries to be recompiled and
-relinked. The minor version changes every time we make a new backward
-compatible Cygwin release available. There is also a
-<literal>cygwin1.dll</literal> release version number. The release number
-is only incremented if we update an existing release in a way that does not
-effect the DLL (like a missing header file).
-</para>
-<para>There are also Cygwin API major and minor numbers. The major number
-tracks important non-backward-compatible interface changes to the API.
-An executable linked with an earlier major number will not be compatible
-with the latest DLL. The minor number tracks significant API additions
-or changes that will not break older executables but may be required by
-newly compiled ones.
-</para>
-<para>Then there is a shared memory region compatibility version number. It is
-incremented when incompatible changes are made to the shared memory
-region or to any named shared mutexes, semaphores, etc. For more exciting
-Cygwin version number details, check out the
-<literal>/usr/include/cygwin/version.h</literal> file.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.api.timezone">
-<question><para>Why isn't timezone set correctly?</para></question>
-<answer>
-
-<para><emphasis role='bold'>(Please note: This section has not yet been updated for the latest net release.)</emphasis>
-</para>
-<para>Did you explicitly call tzset() before checking the value of timezone?
-If not, you must do so.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.api.mouse">
-<question><para>Is there a mouse interface?</para></question>
-<answer>
-
-<para>If you're using X then use the X API to handle mouse events.
-In a Windows console window you can enable and capture mouse events
-using the xterm escape sequences for mouse events.
-</para>
-</answer></qandaentry>
-</qandadiv>
diff --git a/winsup/doc/faq-copyright.xml b/winsup/doc/faq-copyright.xml
deleted file mode 100644
index 95abaa2b4..000000000
--- a/winsup/doc/faq-copyright.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-<!-- faq-copyright.xml -->
-
-<qandadiv id="faq.copyright">
- <title>Copyright</title>
-
- <qandaentry id="faq.what.copyright">
- <question><para>What are the copyrights?</para></question>
-
- <answer>
- <para>Please see <ulink url="http://cygwin.com/licensing.html"/>
- for more information about Cygwin copyright and licensing.</para>
- </answer>
- </qandaentry>
-</qandadiv>
diff --git a/winsup/doc/faq-programming.xml b/winsup/doc/faq-programming.xml
deleted file mode 100644
index 4332d2b75..000000000
--- a/winsup/doc/faq-programming.xml
+++ /dev/null
@@ -1,1124 +0,0 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-<!-- faq-programming.xml -->
-
-<qandadiv id="faq.programming">
-<title>Programming Questions</title>
-
-<qandaentry id="faq.programming.packages">
-<question><para>How do I contribute a package?</para></question>
-<answer>
-
-<para>If you are willing to be a package maintainer, great! We urgently need
-volunteers to prepare and maintain packages, because the priority of the
-Cygwin Team is Cygwin itself.
-</para>
-<para>The Cygwin Package Contributor's Guide at
-<ulink url="http://cygwin.com/setup.html">http://cygwin.com/setup.html</ulink> details everything you need to know
-about being a package maintainer. The quickest way to get started is to
-read the <emphasis>Initial packaging procedure, script-based</emphasis> section on
-that page. The <literal>generic-build-script</literal> found there works well for
-most packages.
-</para>
-<para>For questions about package maintenance, use the cygwin-apps mailing
-list (start at <ulink url="http://cygwin.com/lists.html">http://cygwin.com/lists.html</ulink>) <emphasis>after</emphasis>
-searching and browsing the cygwin-apps list archives, of course. Be
-sure to look at the <emphasis>Submitting a package</emphasis> checklist at
-<ulink url="http://cygwin.com/setup.html">http://cygwin.com/setup.html</ulink> before sending an ITP (Intent To
-Package) email to cygwin-apps.
-</para>
-<para>You should also announce your intentions to the general cygwin list, in
-case others were thinking the same thing.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.programming.contribute">
-<question><para>How do I contribute to Cygwin?</para></question>
-<answer>
-
-<para>If you want to contribute to Cygwin itself, see
-<ulink url="http://cygwin.com/contrib.html">http://cygwin.com/contrib.html</ulink>.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.programming.huge-executables">
-<question><para>Why are compiled executables so huge?!?</para></question>
-<answer>
-
-<para>By default, gcc compiles in all symbols. You'll also find that gcc
-creates large executables on UNIX.
-</para>
-<para>If that bothers you, just use the 'strip' program, part of the binutils
-package. Or compile with the <literal>-s</literal> option to gcc.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.programming.64bitporting">
-<question><para>What do I have to look out for when porting applications to 64 bit Cygwin?</para></question>
-<answer>
-
-<para>The Cygwin x86_64 toolchain is using the
-<ulink url="http://en.wikipedia.org/wiki/LLP64#64-bit_data_models">LP64</ulink>
-data model. That means, in contrast to Windows, which uses an
-<ulink url="http://en.wikipedia.org/wiki/LLP64#64-bit_data_models">LLP64</ulink>
-data model, sizeof(long) != sizeof(int), just as on Linux.</para>
-
-<para>For comparison:</para>
-
-<screen>
- Cygwin Windows Cygwin
- Linux x86_64 Linux
- Windows x86_64
- i686
-
-sizeof(int) 4 4 4
-sizeof(long) 4 4 8
-sizeof(size_t) 4 8 8
-sizeof(void*) 4 8 8
-</screen>
-
-<para>This difference can result in interesting problems, especially when
-using Win32 functions, especially when using pointers to Windows
-datatypes like LONG, ULONG, DWORD. Given that Windows is LLP64, all of
-the aforementioned types are 4 byte in size, on 32 as well as on 64 bit
-Windows, while `long' on 64 bit Cygwin is 8 bytes.</para>
-
-<para>Take the example ReadFile:</para>
-
-<screen>
- ReadFile (HANDLE, LPVOID, DWORD, LPDWORD, LPOVERLAPPED);
-</screen>
-
-<para>In the 32 bit Cygwin and Mingw environments, as well as in the 64 bit
-Mingw environment, it is no problem to substitute DWORD with unsigned
-long:</para>
-
-<screen>
- unsigned long number_of_bytes_read;
- [...]
- ReadFile (fhdl, buf, buflen, &amp;number_of_bytes_read, NULL);
-</screen>
-
-<para>However, in 64 bit Cygwin, using LP64, number_of_bytes_read is 8 bytes
-in size. But since ReadFile expects a pointer to a 4 byte type, the function
-will only change the lower 4 bytes of number_of_bytes_read on return, while
-the content of the upper 4 bytes stays undefined.</para>
-
-<para>Here are a few <emphasis>donts</emphasis> which should help porting
-applications from the known ILP32 data model of 32 bit Cygwin, to the LP64
-data model of 64 bit Cygwin. Note that these are not Cygwin-only problems.
-Many Linux applications suffered the same somewhat liberal handling of
-datatypes when the AMD64 CPU was new.</para>
-
-<itemizedlist mark="bullet">
-
-<listitem><para>
-<emphasis>Don't</emphasis> mix up int and long in printf/scanf. This:
-
-<screen>
- int i; long l;
- printf ("%d %ld\n", l, i);
-</screen>
-
-may not print what you think it should. Enable the gcc options -Wformat or
--Wall, which warn about type mismatches in printf/scanf functions.
-
-<note>Using -Wall (optionally with -Werror to drive the point home) makes a
-lot of sense in general, not only when porting code to a new platform.</note>
-</para></listitem>
-
-<listitem><para>
-<emphasis>Don't</emphasis> mix int and long pointers.
-
-<screen>
- long *long_ptr = (long *) &amp;my_int; /* Uh oh! */
- *long_ptr = 42;
-</screen>
-
-The assignment will write 8 bytes to the address of my_int. Since my_int
-is only 4 bytes, <emphasis>something else</emphasis> gets randomly overwritten.
-Finding this kind of bug is very hard, because you will often see a problem
-which has no immediate connection to the actual bug.
-</para></listitem>
-
-<listitem><para>
-<emphasis>Don't</emphasis> mix int and pointers at all! This will
-<emphasis>not</emphasis> work as expected anymore:
-
-<screen>
- void *ptr;
- printf ("Pointer value is %x\n", ptr);
-</screen>
-
-%x denotes an int argument. The value printed by printf is a 4 byte value,
-so on x86_64 the printed pointer value is missing its upper 4 bytes; the output
-is very likely wrong. Use %p instead, which portable across architectures:
-
-<screen>
- void *ptr;
- printf ("Pointer value is %p\n", ptr);
-</screen>
-</para></listitem>
-
-<listitem><para>
-Along the same lines <emphasis>don't</emphasis> use the type int in
-pointer arithmetic. Don't cast pointers to int, don't cast pointer
-differences to int, and don't store pointer differences in an int type.
-Use the types <literal>intptr_t</literal>, <literal>uintptr_t</literal>
-and <literal>ptrdiff_t</literal> instead, they are designed for performing
-architecture-independent pointer arithmetic.
-</para></listitem>
-
-<listitem><para>
-<emphasis>Don't</emphasis> make blind assumptions about the size of a POSIX
-type. For instance, <literal>time_t</literal> is 8 bytes on 64 bit Cygwin,
-while it is (still, at the time of writing this) 4 bytes on 32 bit Cygwin,
-since time_t is based on the type long.
-</para></listitem>
-
-<listitem><para>
-<emphasis>Don't</emphasis> use functions returning pointers without declaration.
-For instance
-
-<screen>
- printf ("Error message is: %s\n", strerror (errno));
-</screen>
-
-This code will <emphasis>crash</emphasis>, unless you included
-<filename>string.h</filename>. The implicit rule in C is that an undeclared
-function is of type int. But int is 4 byte and pointers are 8 byte, so the
-string pointer given to printf is missing the upper 4 bytes.
-</para></listitem>
-
-<listitem><para>
-<emphasis>Don't</emphasis> use C base types together with Win32 functions.
-Keep in mind that DWORD, LONG, ULONG are <emphasis>not</emphasis> the same
-as long and unsigned long. Try to use only Win32 datatypes in conjunction
-with Win32 API function calls to avoid type problems. See the above
-ReadFile example. Windows functions in printf calls should be treated
-carefully as well. This code is common for 32 bit code, but probably prints
-the wrong value on 64 bit:
-
-<screen>
- printf ("Error message is: %lu\n", GetLastError ());
-</screen>
-
-Using gcc's -Wformat option would warn about this. Casting to the requested
-base type helps in this case:
-
-<screen>
- printf ("Error message is: %lu\n", (unsigned long) GetLastError ());
-</screen>
-</para></listitem>
-
-<listitem><para>
-<emphasis>Don't</emphasis> mix Windows datatypes with POSIX type-specific
-MIN/MAX values.
-
-<screen>
- unsigned long l_max = ULONG_MAX; /* That's right. */
- ULONG w32_biggest = ULONG_MAX; /* Hey, wait! What? */
- ULONG w32_biggest = UINT_MAX; /* Ok, but borderline. */
-</screen>
-
-Again, keep in mind that ULONG (or DWORD) is <emphasis>not</emphasis> unsigned
-long but rather unsigned int on 64 bit.
-</para></listitem>
-
-</itemizedlist>
-
-</answer></qandaentry>
-
-<qandaentry id="faq.programming.64bitporting-fail">
-<question><para>My project doesn't build at all on 64 bit Cygwin. What's up?</para></question>
-<answer>
-
-<para>Typically reasons for that are:</para>
-
-<itemizedlist mark="bullet">
-
-<listitem><para><literal>__CYGWIN32__</literal> is not defined in the
-64 bit toolchain. This may hit a few projects which are around since before
-Y2K. Check your project for occurences of <literal>__CYGWIN32__</literal>
-and change them to <literal>__CYGWIN__</literal>, which is defined in the
-Cygwin toolchain since 1998, to get the same Cygwin-specific code changes done.
-</para></listitem>
-
-<listitem><para>The project maintainers took it for granted that Cygwin is
-running only on i686 CPUs and the code is making this assumption blindly.
-You have to check the code for such assumptions and fix them.
-</para></listitem>
-
-<listitem><para>The project is using autotools, the
-<filename>config.sub</filename> and <filename>config.guess</filename> files
-are hopelessly outdated and don't recognize
-<literal>x86_64-{pc,unknown}-cygwin</literal> as valid target. Update the
-project configury (cygport will do this by default) and try again.
-</para></listitem>
-
-<listitem><para>The project uses Windows functions on Cygwin and it's suffering
-from the problems described in the preceeding FAQ entry.
-</para></listitem>
-
-</itemizedlist>
-
-<para>In all of this cases, please make sure to fix that upstream, or send
-your patches to the upstream maintainers, so the problems get fixed for the
-future.</para>
-
-</answer></qandaentry>
-
-<qandaentry id="faq.programming.64bitporting-cygwin64">
-<question><para>Why is __CYGWIN64__ not defined for 64 bit?</para></question>
-<answer>
-
-<para>There is no <literal>__CYGWIN64__</literal> because we would like to
-have a unified way to handle Cygwin code in portable projects. Using
-<literal>__CYGWIN32__</literal> and <literal>__CYGWIN64__</literal> only
-complicates the code for no good reason. Along the same lines you won't
-find predefined macros <literal>__linux32__</literal> and
-<literal>__linux64__</literal> on Linux.</para>
-
-<para>If you really have to differ between 32 and 64 bit in some way, you have
-three choices.</para>
-
-<itemizedlist mark="bullet">
-
-<listitem><para>If your code depends on the CPU architecture, use the
-predefined compiler definition for the architecture, like this:</para>
-
-<screen>
-#ifdef __CYGWIN__
-# ifdef __x86_64__ /* Alternatively __x86_64, __amd64__, __amd64 */
- /* Code specific for AMD64 CPU */
-# elif __X86__
- /* Code specific for ix86 CPUs */
-# else
-# error Unsupported Architecture
-# endif
-#endif
-</screen></listitem>
-
-<listitem><para>If your code depends on differences in the data model, you
-should consider to use the <literal>__LP64__</literal> definition
-instead:</para>
-
-<screen>
-#ifdef __CYGWIN__
-# ifdef __LP64__ /* Alternatively _LP64 */
- /* Code specific for 64 bit CPUs */
-# else
- /* Code specific for 32 bit CPUs */
-# endif
-#endif
-</screen></listitem>
-
-<listitem><para>If your code uses Windows functions, and some of the
-functionality is 64 bit Windows-specific, use <literal>_WIN64</literal>,
-which is defined on 64 bit Cygwin, as soon as you include
-<filename>windows.h</filename>. This should only be used in the most
-desperate of occasions, though, and <emphasis>only</emphasis> if it's
-really about a difference in Windows API functionality!</para>
-
-<screen>
-#ifdef __CYGWIN__
-# ifdef _WIN64
- /* Code specific for 64 bit Windows */
-# else
- /* Code specific for 32 bit Windows */
-# endif
-#endif
-</screen></listitem>
-
-</itemizedlist>
-
-</answer></qandaentry>
-
-<qandaentry id="faq.programming.glibc">
-<question><para>Where is glibc?</para></question>
-<answer>
-
-<para>Cygwin does not provide glibc. It uses newlib instead, which provides
-much (but not all) of the same functionality. Porting glibc to Cygwin
-would be difficult.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.programming.objective-c">
-<question><para>Where is Objective C?</para></question>
-<answer>
-
-<para>Support for compiling Objective C is available in the <literal>gcc{4}-objc</literal>
-package; resulting binaries will depend on the <literal>libobjc2</literal>
-package at runtime.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.programming.make-execvp">
-<question><para>Why does my make fail on Cygwin with an execvp error? </para></question>
-<answer>
-
-<para>Beware of using non-portable shell features in your Makefiles (see tips
-at <ulink url="http://cygwin.com/faq/faq.html#faq.using.shell-scripts" />).
-</para>
-<para>Errors of <literal>make: execvp: /bin/sh: Illegal Argument</literal> or
-<literal>make: execvp: /bin/sh: Argument list too long</literal> are often
-caused by the command-line being to long for the Windows execution model.
-To circumvent this, mount the path of the executable using the -X switch
-to enable cygexec for all executables in that folder; you will also need
-to exclude non-cygwin executables with the -x switch. Enabling cygexec
-causes cygwin executables to talk directly to one another, which increases
-the command-line limit. To enable cygexec for <literal>/bin</literal> and
-<literal>/usr/bin</literal>, you can add or change these entries in /etc/fstab:
-</para>
-<screen>
-C:/cygwin/bin /bin ntfs binary,cygexec 0 0
-C:/cygwin/bin /usr/bin ntfs binary,cygexec 0 0
-</screen>
-
-<para>If you have added other non-Cygwin programs to a path you want to mount
-cygexec, you can find them with a script like this:
-</para>
-<screen>
-#!/bin/sh
-cd /bin; for f in `find . -type f -name '*.exe'`; do
- cygcheck $f | (fgrep -qi cygwin1.dll || echo $f)
-done
-</screen>
-
-<para>
-See <ulink url="http://cygwin.com/cygwin-ug-net/using.html#mount-table" />
-for more information on using mount.
-</para>
-
-</answer></qandaentry>
-
-<qandaentry id="faq.programming.ipc">
-<question><para>How can I use IPC, or why do I get a <literal>Bad system call</literal>
-error?</para></question>
-<answer>
-
-<para>
-Try running cygserver. Read
-<ulink url="http://cygwin.com/cygwin-ug-net/using-cygserver.html" />. If you're
-trying to use PostgreSQL, also read
-<literal>/usr/share/doc/Cygwin/postgresql-*.README</literal>.
-</para>
-
-</answer></qandaentry>
-
-<qandaentry id="faq.programming.winmain">
-<question><para>Why the undefined reference to <literal>WinMain@16</literal>?</para></question>
-<answer>
-
-<para>If you're using <literal>gcc</literal>, try adding an empty main() function to one
-of your sources. Or, perhaps you have <literal>-lm</literal> too early in the
-link command line. It should be at the end:
-</para>
-<screen>
- bash$ gcc hello.c -lm
- bash$ ./a.exe
- Hello World!
-</screen>
-
-<para>works, but
-</para>
-<screen>
- bash$ gcc -lm hello.c
- /c/TEMP/ccjLEGlU.o(.text+0x10):hello.c: multiple definition of `main'
- /usr/lib/libm.a(libcmain.o)(.text+0x0):libcmain.c: first defined here
- /usr/lib/libm.a(libcmain.o)(.text+0x6a):libcmain.c: undefined reference to `WinMain@16'
- collect2: ld returned 1 exit status
-</screen>
-
-<para>If you're using GCJ, you need to pass a "--main" flag:
-</para>
-<screen>
-gcj --main=Hello Hello.java
-</screen>
-
-</answer></qandaentry>
-
-<qandaentry id="faq.programming.win32-api">
-<question><para>How do I use Win32 API calls?</para></question>
-<answer>
-
-<para>Cygwin tools require that you explicitly link the import libraries
-for whatever Win32 API functions that you are going to use, with the exception
-of kernel32, which is linked automatically (because the startup and/or
-built-in code uses it).
-</para>
-<para>For example, to use graphics functions (GDI) you must link
-with gdi32 like this:
-</para>
-<para>gcc -o foo.exe foo.o bar.o -lgdi32
-</para>
-<para>or (compiling and linking in one step):
-</para>
-<para>gcc -o foo.exe foo.c bar.c -lgdi32
-</para>
-<para>The regular setup allows you to use the option -mwindows on the
-command line to include a set of the basic libraries (and also
-make your program a GUI program instead of a console program),
-including user32, gdi32 and comdlg32.
-</para>
-<para>It is a good idea to put import libraries last on your link line,
-or at least after all the object files and static libraries that reference them.
-</para>
-
-<note><para>There are a few restrictions for calls to the Win32 API.
-For details, see the User's Guide section
-<ulink url="http://cygwin.com/cygwin-ug-net/setup-env.html#setup-env-win32">Restricted Win32 environment</ulink>,
-as well as the User's Guide section
-<ulink url="http://cygwin.com/cygwin-ug-net/using.html#pathnames-win32-api">Using the Win32 file API in Cygwin applications</ulink>.</para></note>
-</answer></qandaentry>
-
-<qandaentry id="faq.programming.win32-no-cygwin">
-<question><para>How do I compile a Win32 executable that doesn't use Cygwin?</para></question>
-<answer>
-
-<para>The compilers provided by the <literal>mingw-gcc</literal>,
-<literal>mingw64-i686-gcc</literal>, and <literal>mingw64-x86_64-gcc</literal>
-packages link against standard Microsoft DLLs instead of Cygwin. This is
-desirable for native Windows programs that don't need a UNIX emulation layer.
-</para>
-<para>This is not to be confused with 'MinGW' (Minimalist GNU for Windows),
-which is a completely separate effort. That project's home page is
-<ulink url="http://www.mingw.org/index.shtml">http://www.mingw.org/index.shtml</ulink>.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.programming.static-linking">
-<question><para>Can I build a Cygwin program that does not require cygwin1.dll at runtime?</para></question>
-<answer>
-
-<para>No. If your program uses the Cygwin API, then your executable cannot
-run without cygwin1.dll. In particular, it is not possible to
-statically link with a Cygwin library to obtain an independent,
-self-contained executable.
-</para>
-<para>If this is an issue because you intend to distribute your Cygwin
-application, then you had better read and understand
-<ulink url="http://cygwin.com/licensing.html">http://cygwin.com/licensing.html</ulink>, which explains the licensing
-options. Unless you purchase a special commercial license from Red
-Hat, then your Cygwin application must be Open Source.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.programming.msvcrt-and-cygwin">
-<question><para>Can I link with both MSVCRT*.DLL and cygwin1.dll?</para></question>
-<answer>
-
-<para>No, you must use one or the other, they are mutually exclusive.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.programming.no-console-window">
-<question><para>How do I make the console window go away?</para></question>
-<answer>
-
-<para>The default during compilation is to produce a console application.
-It you are writing a GUI program, you should either compile with
--mwindows as explained above, or add the string
-"-Wl,--subsystem,windows" to the GCC command line.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.programming.make-spaces">
-<question><para>Why does make complain about a "missing separator"?</para></question>
-<answer>
-
-<para>This problem usually occurs as a result of someone editing a Makefile
-with a text editor that replaces tab characters with spaces. Command
-lines must start with tabs. This is not specific to Cygwin.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.programming.win32-headers">
-<question><para>Why can't we redistribute Microsoft's Win32 headers?</para></question>
-<answer>
-
-<para>Subsection 2.d.f of the `Microsoft Open Tools License agreement' looks
-like it says that one may not "permit further redistribution of the
-Redistributables to their end users". We take this to mean that we can
-give them to you, but you can't give them to anyone else, which is
-something that we can't agree to. Fortunately, we
-have our own Win32 headers which are pretty complete.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.programming.msvs-mingw">
-<question><para>How do I use <literal>cygwin1.dll</literal> with Visual Studio or MinGW?</para></question>
-<answer>
-
-<para>Before you begin, note that Cygwin is licensed under the GNU GPL (as
-indeed are many other Cygwin-based libraries). That means that if your
-code links against the Cygwin dll (and if your program is calling
-functions from Cygwin, it must, as a matter of fact, be linked against
-it), you must apply the GPL to your source as well. Of course, this
-only matters if you plan to distribute your program in binary form. For
-more information, see <ulink url="http://gnu.org/licenses/gpl-faq.html">http://gnu.org/licenses/gpl-faq.html</ulink>. If
-that is not a problem, read on.
-</para>
-<para>If you want to load the DLL dynamically, read
-<literal>winsup/cygwin/how-cygtls-works.txt</literal> and the sample code in
-<literal>winsup/testsuite/cygload</literal> to understand how this works.
-The short version is:
-</para>
-<orderedlist><listitem><para>Make sure you have 4K of scratch space at the bottom of your stack.
-</para></listitem>
-<listitem><para>Invoke <literal>cygwin_dll_init()</literal>:
-<screen>
-HMODULE h = LoadLibrary("cygwin1.dll");
-void (*init)() = GetProcAddress(h, "cygwin_dll_init");
-init();
-</screen>
-</para></listitem>
-</orderedlist>
-
-<para>If you want to link statically from Visual Studio, to my knowledge
-none of the Cygwin developers have done this, but we have this report
-from the mailing list that it can be done this way:
-</para>
-<orderedlist><listitem><para>Use the impdef program to generate a .def file for the cygwin1.dll
-(if you build the cygwin dll from source, you will already have a def
-file)
-</para>
-<screen>
-impdef cygwin1.dll &gt; cygwin1.def
-</screen>
-
-</listitem>
-<listitem><para>Use the MS VS linker (lib) to generate an import library
-</para>
-<screen>
-lib /def=cygwin1.def /out=cygwin1.lib
-</screen>
-
-</listitem>
-<listitem><para>Create a file "my_crt0.c" with the following contents
-</para>
-<screen>
-#include &lt;sys/cygwin.h&gt;
-#include &lt;stdlib.h&gt;
-
-typedef int (*MainFunc) (int argc, char *argv[], char **env);
-
-void
- my_crt0 (MainFunc f)
- {
- cygwin_crt0(f);
- }
-</screen>
-
-</listitem>
-<listitem><para>Use gcc in a Cygwin prompt to build my_crt0.c into a DLL
- (e.g. my_crt0.dll). Follow steps 1 and 2 to generate .def and
- .lib files for the DLL.
-</para>
-</listitem>
-<listitem><para>Download crt0.c from the cygwin website and include it in
- your sources. Modify it to call my_crt0() instead of
- cygwin_crt0().
-</para>
-</listitem>
-<listitem><para>Build your object files using the MS VC compiler cl.
-</para>
-</listitem>
-<listitem><para>Link your object files, cygwin1.lib, and my_crt0.lib (or
- whatever you called it) into the executable.
-</para></listitem>
-</orderedlist>
-
-<para>Note that if you are using any other Cygwin based libraries
-that you will probably need to build them as DLLs using gcc and
-then generate import libraries for the MS VC linker.
-</para>
-<para>Thanks to Alastair Growcott (alastair dot growcott at bakbone dot co
-dot uk) for this tip.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.programming.linking-lib">
-<question><para>How do I link against a <literal>.lib</literal> file?</para></question>
-<answer>
-
-<para>If your <literal>.lib</literal> file is a normal static or import library with
-C-callable entry points, you can list <literal>foo.lib</literal> as an object file for
-gcc/g++, just like any <literal>*.o</literal> file. Otherwise, here are some steps:
-</para>
-<orderedlist><listitem><para>Build a C file with a function table. Put all functions you intend
-to use in that table. This forces the linker to include all the object
-files from the .lib. Maybe there is an option to force LINK.EXE to
-include an object file.
-</para></listitem>
-<listitem><para>Build a dummy 'LibMain'.
-</para></listitem>
-<listitem><para>Build a .def with all the exports you need.
-</para></listitem>
-<listitem><para>Link with your .lib using link.exe.
-</para></listitem>
-</orderedlist>
-
-<para>or
-</para>
-<orderedlist><listitem><para>Extract all the object files from the .lib using LIB.EXE.
-</para></listitem>
-<listitem><para>Build a dummy C file referencing all the functions you need, either
- with a direct call or through an initialized function pointer.
-</para></listitem>
-<listitem><para>Build a dummy LibMain.
-</para></listitem>
-<listitem><para>Link all the objects with this file+LibMain.
-</para></listitem>
-<listitem><para>Write a .def.
-</para></listitem>
-<listitem><para>Link.
-</para></listitem>
-</orderedlist>
-
-<para>You can use these methods to use MSVC (and many other runtime libs)
-with Cygwin development tools.
-</para>
-<para>Note that this is a lot of work (half a day or so), but much less than
-rewriting the runtime library in question from specs...
-</para>
-<para>Thanks to Jacob Navia (root at jacob dot remcomp dot fr) for this explanation.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.programming.building-cygwin">
-<question><para>How do I build Cygwin on my own?</para></question>
-<answer>
-
-<para>First, you need to make sure you have the necessary build tools
-installed; you at least need <literal>gcc-g++</literal>, <literal>make</literal>,
-<literal>perl</literal>, <literal>cocom</literal>, <literal>gettext</literal>, <literal>gettext-devel</literal>,
-and <literal>zlib-devel</literal>.
-Building for 32-bit Cygwin also requires <literal>libiconv</literal>,
-<literal>mingw64-i686-gcc-g++</literal>, <literal>mingw64-i686-zlib</literal>,
-and <literal>mingw64-x86_64-gcc-core</literal>.
-Building for 64-bit Cygwin also requires <literal>libiconv-devel</literal>,
-<literal>mingw64-x86_64-gcc-g++</literal>, and
-<literal>mingw64-x86_64-zlib</literal>.
-If you want to run the tests, <literal>dejagnu</literal> is also required.
-Normally, building ignores any errors in building the documentation,
-which requires the <literal>dblatex</literal>,
-<literal>docbook-xml45</literal>, <literal>docbook-xsl</literal>, and
-<literal>xmlto</literal> packages. For more information on building the
-documentation, see the README included in the <literal>cygwin-doc</literal> package.
-</para>
-
-<para>Next, get the Cygwin source. Ideally, you should check out
-what you need from CVS (<ulink url="http://cygwin.com/cvs.html" />). This is the
-<emphasis>preferred method</emphasis> for acquiring the sources. Otherwise, if
-you are trying to duplicate a cygwin release then you should
-download the corresponding source package
-(<literal>cygwin-x.y.z-n-src.tar.bz2</literal>). </para>
-
-<para>You <emphasis>must</emphasis> build cygwin in a separate directory from
-the source, so create something like a <literal>build/</literal> directory.
-Assuming you checked out the source in <literal>/oss/src/</literal>, and you
-also want to install to the temporary location <literal>install</literal>:
-</para>
-<screen>
-mkdir /oss/build
-mkdir /oss/install
-cd build
-(/oss/src/configure --prefix=/oss/install -v; make) &gt;&amp; make.out
-make install &gt; install.log 2&gt;&amp;1
-</screen>
-
-<para>
-If the build works, install everything <emphasis>except</emphasis> the dll (if
-you can). Then, close down all cygwin programs (including bash windows,
-inetd, etc.), save your old dll, and copy the new dll to the correct
-place. Then start up a bash window, or run a cygwin program from the
-Windows command prompt, and see what happens.
-</para>
-<para>If you get the error "shared region is corrupted" it means that two
-different versions of cygwin1.dll are running on your machine at the
-same time. Remove all but one.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.programming.debugging-cygwin">
-<question><para>I may have found a bug in Cygwin, how can I debug it (the symbols in gdb look funny)?</para></question>
-<answer>
-
-<para>Debugging symbols are stripped from distibuted Cygwin binaries, so any
-symbols that you see in gdb are basically meaningless. It is also a good
-idea to use the latest code in case the bug has been fixed, so we
-recommend trying the latest snapshot from
-<ulink url="http://cygwin.com/snapshots/" /> or building the DLL from CVS.
-</para>
-<para>To build a debugging version of the Cygwin DLL, you will need to follow
-the instructions at <ulink url="http://cygwin.com/faq/faq.html#faq.programming.building-cygwin" />.
-You can also contact the mailing list for pointers (a simple test case that
-demonstrates the bug is always welcome).
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.programming.compiling-unsupported">
-<question><para>How can I compile Cygwin for an unsupported platform (PowerPC, Alpha, ARM, Itanium)?</para></question>
-<answer>
-
-<para>Unfortunately, this will be difficult. Exception handling and signals
-support semantics and args have been designed for x86 so you would need
-to write specific support for your platform. We don't know of any other
-incompatibilities. Please send us patches if you do this work!
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.programming.adjusting-heap">
-<question><para>How can I adjust the heap/stack size of an application?</para></question>
-<answer>
-
-<para>If you need to change the maximum amount of memory available to Cygwin, see
-<ulink url="http://cygwin.com/cygwin-ug-net/setup-maxmem.html">http://cygwin.com/cygwin-ug-net/setup-maxmem.html</ulink>. Otherwise,
-just pass heap/stack linker arguments to gcc. To create foo.exe with
-a heap size of 200MB and a stack size of 8MB, you would invoke
-gcc as:
-</para>
-<para><literal>gcc -Wl,--heap,200000000,--stack,8000000 -o foo foo.c</literal>
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.programming.dll-cygcheck">
-<question><para>How can I find out which DLLs are needed by an executable?</para></question>
-<answer>
-
-<para><literal>objdump -p</literal> provides this information, but is rather verbose.
-</para>
-<para><literal>cygcheck</literal> will do this much more concisely, and operates
-recursively, provided the command is in your path.
-</para>
-
-</answer></qandaentry>
-
-<qandaentry id="faq.programming.dll-building">
-<question><para>How do I build a DLL?</para></question>
-<answer>
-
-<para>There's documentation that explains the process in the Cygwin User's
-Guide here: <ulink url="http://cygwin.com/cygwin-ug-net/dll.html">http://cygwin.com/cygwin-ug-net/dll.html</ulink>
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.programming.breakpoint">
-<question><para>How can I set a breakpoint at MainCRTStartup?</para></question>
-<answer>
-
-<para><emphasis role='bold'>(Please note: This section has not yet been updated for the latest net release.)</emphasis>
-</para>
-<para>Set a breakpoint at *0x401000 in gdb and then run the program in
-question.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.programming.dll-relocatable">
-<question><para>How can I build a relocatable dll?</para></question>
-<answer>
-
-<para><emphasis role='bold'>(Please note: This section has not yet been updated for the latest net release. However, there was a discussion on the cygwin mailing list once that addresses this issue. Read <ulink url="http://cygwin.com/ml/cygwin/2000-06/msg00688.html">http://cygwin.com/ml/cygwin/2000-06/msg00688.html</ulink> and related messages.)</emphasis>
-</para>
-<para>You must execute the following sequence of five commands, in this
-order:
-</para>
-<screen>
-$(LD) -s --base-file BASEFILE --dll -o DLLNAME OBJS LIBS -e ENTRY
-
-$(DLLTOOL) --as=$(AS) --dllname DLLNAME --def DEFFILE \
- --base-file BASEFILE --output-exp EXPFILE
-
-$(LD) -s --base-file BASEFILE EXPFILE -dll -o DLLNAME OBJS LIBS -e ENTRY
-
-$(DLLTOOL) --as=$(AS) --dllname DLLNAME --def DEFFILE \
- --base-file BASEFILE --output-exp EXPFILE
-
-$(LD) EXPFILE --dll -o DLLNAME OBJS LIBS -e ENTRY
-</screen>
-
-<para>In this example, $(LD) is the linker, ld.
-</para>
-<para>$(DLLTOOL) is dlltool.
-</para>
-<para>$(AS) is the assembler, as.
-</para>
-<para>DLLNAME is the name of the DLL you want to create, e.g., tcl80.dll.
-</para>
-<para>OBJS is the list of object files you want to put into the DLL.
-</para>
-<para>LIBS is the list of libraries you want to link the DLL against. For
-example, you may or may not want -lcygwin. You may want -lkernel32.
-</para>
-<para>DEFFILE is the name of your definitions file. A simple DEFFILE would
-consist of ``EXPORTS'' followed by a list of all symbols which should
-be exported from the DLL. Each symbol should be on a line by itself.
-Other programs will only be able to access the listed symbols.
-</para>
-<para>BASEFILE is a temporary file that is used during this five stage
-process, e.g., tcl.base.
-</para>
-<para>EXPFILE is another temporary file, e.g., tcl.exp.
-</para>
-<para>ENTRY is the name of the function which you want to use as the entry
-point. This function should be defined using the WINAPI attribute,
-and should take three arguments:
- int WINAPI startup (HINSTANCE, DWORD, LPVOID)
-</para>
-<para>This means that the actual symbol name will have an appended @12, so if
-your entry point really is named <literal>startup</literal>, the string you should
-use for ENTRY in the above examples would be <literal>startup@12</literal>.
-</para>
-<para>If your DLL calls any Cygwin API functions, the entry function will need
-to initialize the Cygwin impure pointer. You can do that by declaring
-a global variable <literal>_impure_ptr</literal>, and then initializing it in the
-entry function. Be careful not to export the global variable
-<literal>_impure_ptr</literal> from your DLL; that is, do not put it in DEFFILE.
-</para>
-<screen>
-/* This is a global variable. */
-struct _reent *_impure_ptr;
-extern struct _reent *__imp_reent_data;
-
-int entry (HINSTANT hinst, DWORD reason, LPVOID reserved)
-{
- _impure_ptr = __imp_reent_data;
- /* Whatever else you want to do. */
-}
-</screen>
-
-<para>You may put an optional `--subsystem windows' on the $(LD) lines.
-Note that if you specify a --subsytem &lt;x&gt; flag to ld,
-the -e entry must come after the subsystem flag, since the subsystem flag
-sets a different default entry point.
-</para>
-<para>You may put an optional `--image-base BASEADDR' on the $(LD) lines.
-This will set the default image base. Programs using this DLL will
-start up a bit faster if each DLL occupies a different portion of the
-address space. Each DLL starts at the image base, and continues for
-whatever size it occupies.
-</para>
-<para>Now that you've built your DLL, you may want to build a library so
-that other programs can link against it. This is not required: you
-could always use the DLL via LoadLibrary. However, if you want to be
-able to link directly against the DLL, you need to create a library.
-Do that like this:
-</para>
-<para>$(DLLTOOL) --as=$(AS) --dllname DLLNAME --def DEFFILE --output-lib LIBFILE
-</para>
-<para>$(DLLTOOL), $(AS), DLLNAME, and DEFFILE are the same as above. Make
-sure you use the same DLLNAME and DEFFILE, or things won't work right.
-</para>
-<para>LIBFILE is the name of the library you want to create, e.g.,
-libtcl80.a. You can then link against that library using something
-like -ltcl80 in your linker command.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.programming.debug">
-<question><para>How can I debug what's going on?</para></question>
-<answer>
-
-<para>You can debug your application using <literal>gdb</literal>. Make sure you
-compile it with the -g flag! If your application calls functions in
-MS DLLs, gdb will complain about not being able to load debug information
-for them when you run your program. This is normal since these DLLs
-don't contain debugging information (and even if they did, that debug
-info would not be compatible with gdb).
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.programming.system-trace">
-<question><para>Can I use a system trace mechanism instead?</para></question>
-<answer>
-
-<para>Yes. You can use the <literal>strace.exe</literal> utility to run other cygwin
-programs with various debug and trace messages enabled. For information
-on using <literal>strace</literal>, see the Cygwin User's Guide.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.programming.gdb-signals">
-<question><para>Why doesn't gdb handle signals?</para></question>
-<answer>
-
-<para>Unfortunately, there is only minimal signal handling support in gdb
-currently. Signal handling only works with Windows-type signals.
-SIGINT may work, SIGFPE may work, SIGSEGV definitely does. You cannot
-'stop', 'print' or 'nopass' signals like SIGUSR1 or SIGHUP to the
-process being debugged.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.programming.linker">
-<question><para>The linker complains that it can't find something.</para></question>
-<answer>
-
-<para>A common error is to put the library on the command line before
-the thing that needs things from it.
-</para>
-<para>This is wrong <literal>gcc -lstdc++ hello.cc</literal>.
-This is right <literal>gcc hello.cc -lstdc++</literal>.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.programming.stat64">
-<question><para>Why do I get an error using <literal>struct stat64</literal>?</para></question>
-<answer>
-
-<para><literal>struct stat64</literal> is not used in Cygwin, just
-use <literal>struct stat</literal>. It's 64 bit aware.</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.programming.libc">
-<question><para>Can you make DLLs that are linked against libc ?</para></question>
-<answer>
-
-<para>Yes.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.programming.malloc-h">
-<question><para>Where is malloc.h?</para></question>
-<answer>
-
-<para>It exists, but you should rather include stdlib.h instead of malloc.h.
-stdlib.h is POSIX standard for defining malloc and friends, malloc.h is
-definitely non-standard.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.programming.own-malloc">
-<question><para>Can I use my own malloc?</para></question>
-<answer>
-
-<para>If you define a function called <literal>malloc</literal> in your own code, and link
-with the DLL, the DLL <emphasis>will</emphasis> call your <literal>malloc</literal>. Needless to
-say, you will run into serious problems if your malloc is buggy.
-</para>
-<para>If you run any programs from the DOS command prompt, rather than from in
-bash, the DLL will try and expand the wildcards on the command line.
-This process uses <literal>malloc</literal> <emphasis>before</emphasis> your main line is started.
-If you have written your own <literal>malloc</literal> to need some initialization
-to occur after <literal>main</literal> is called, then this will surely break.
-</para>
-<para>Moreover, there is an outstanding issue with <literal>_malloc_r</literal> in
-<literal>newlib</literal>. This re-entrant version of <literal>malloc</literal> will be called
-directly from within <literal>newlib</literal>, by-passing your custom version, and
-is probably incompatible with it. But it may not be possible to replace
-<literal>_malloc_r</literal> too, because <literal>cygwin1.dll</literal> does not export it and
-Cygwin does not expect your program to replace it. This is really a
-newlib issue, but we are open to suggestions on how to deal with it.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.programming.msvc-gcc-objects">
-<question><para>Can I mix objects compiled with msvc++ and gcc?</para></question>
-<answer>
-
-<para>Yes, but only if you are combining C object files. MSVC C++ uses a
-different mangling scheme than GNU C++, so you will have difficulties
-combining C++ objects.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.programming.gdb-msvc">
-<question><para>Can I use the gdb debugger to debug programs built by VC++?</para></question>
-<answer>
-
-<para>No, not for full (high level source language) debugging.
-The Microsoft compilers generate a different type of debugging
-symbol information, which gdb does not understand.
-</para>
-<para>However, the low-level (assembly-type) symbols generated by
-Microsoft compilers are coff, which gdb DOES understand.
-Therefore you should at least be able to see all of your
-global symbols; you just won't have any information about
-data types, line numbers, local variables etc.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.programming.make-scripts">
-<question><para>Shell scripts aren't running properly from my makefiles?</para></question>
-<answer>
-
-<para>If your scripts are in the current directory, you must have <literal>.</literal>
-(dot) in your $PATH. (It is not normally there by default.) Better yet,
-add /bin/sh in front of each and every shell script invoked in your Makefiles.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.programming.preprocessor">
-<question><para>What preprocessor macros do I need to know about?</para></question>
-<answer>
-
-<para>gcc for Cygwin defines __CYGWIN__ when building for a Cygwin
-environment.
-</para>
-<para>Microsoft defines the preprocessor symbol _WIN32 in their Windows
-development environment.
-</para>
-<para>In gcc for Cygwin, _WIN32 is only defined when you use the -mwin32
-gcc command line options. This is because Cygwin is supposed to be a
-POSIX emulation environment in the first place and defining _WIN32 confuses
-some programs which think that they have to make special concessions for
-a Windows environment which Cygwin handles automatically.
-</para>
-<para>Check out the predefined symbols in detail by running, for example
-</para>
-<screen>
- $ gcc -dM -E -xc /dev/null &gt;gcc.txt
- $ gcc -mwin32 -dM -E -xc /dev/null &gt;gcc-mwin32.txt
-</screen>
-<para>Then use the diff and grep utilities to check what the difference is.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.programming.unix-gui">
-<question><para>How should I port my Unix GUI to Windows?</para></question>
-<answer>
-
-<para>Like other Unix-like platforms, the Cygwin distribtion includes many of
-the common GUI toolkits, including X11, X Athena widgets, Motif, Tk, GTK+,
-and Qt. Many programs which rely on these toolkits will work with little, if
-any, porting work if they are otherwise portable. However, there are a few
-things to look out for:</para>
-<orderedlist>
-<listitem><para>Some packages written for both Windows and X11 incorrectly
-treat Cygwin as a Windows platform rather than a Unix variant. Mixing Cygwin's
-Unix APIs with Windows' GDI is best avoided; rather, remove these assumptions
-so that Cygwin is treated like other X11 platforms.</para></listitem>
-<listitem><para>GTK+ programs which use <literal>gtk_builder_connect_signals()</literal>
-or <literal>glade_xml_signal_autoconnect()</literal> need to be able to
-<literal>dlopen()</literal> themselves. In order for this to work, the program
-must be linked with the <literal>-Wl,--export-all-symbols</literal> linker flag.
-This can be added to LDFLAGS manually, or handled automatically with the
-<literal>-export-dynamic</literal> libtool flag (requires libtool 2.2.8) or
-by adding <literal>gmodule-export-2.0</literal> to the pkg-config modules used
-to build the package.</para></listitem>
-<listitem><para>Programs which include their own loadable modules (plugins)
-often must have its modules linked against the symbols in the program. The
-most portable solution is for such programs to provide all its symbols (except
-for <literal>main()</literal>) in a shared library, against which the plugins
-can be linked. Otherwise, the symbols from the executable itself must be
-exported.</para>
-<para>If the package uses the CMake build system, this can be done by adding
-<literal>ENABLE_EXPORTS TRUE</literal> to the executable's <literal>set_target_properties</literal>
-command, then adding the executable's target name to the <literal>target_link_libraries</literal>
-command for the plugins.</para>
-<para>For other build systems, the following steps are required:</para>
-<orderedlist>
-<listitem><para>The executable must be built before its plugins.</para></listitem>
-<listitem><para>Symbols must be exported from the executable with a
-<literal>-Wl,--export-all-symbols,--out-implib,libfoo.exe.a</literal>
-linker flag, where <literal>foo</literal> represents the name of the
-executable.</para></listitem>
-<listitem><para>The plugins must be linked with a <literal>-Wl,/path/to/libfoo.exe.a</literal>
-linker flag.</para></listitem>
-</orderedlist></listitem></orderedlist>
-</answer></qandaentry>
-
-</qandadiv>
diff --git a/winsup/doc/faq-resources.xml b/winsup/doc/faq-resources.xml
deleted file mode 100644
index 128b713a3..000000000
--- a/winsup/doc/faq-resources.xml
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-
-<qandadiv id="faq.resources">
-<title>Further Resources</title>
-
-<!-- faq-resources.xml -->
-<qandaentry id="faq.resources.documentation">
-<question><para>Where's the documentation?</para></question>
-<answer>
-
-<para>If you have installed Cygwin, you can find lots of documentation in
-<literal>/usr/share/doc/</literal>. Some packages have Cygwin specific
-instructions in a file
-<literal>/usr/share/doc/Cygwin/<replaceable>package_name</replaceable>.README</literal>.
-In addition, many packages ship with standard documentation, which you can
-find in
-<literal>/usr/share/doc/<replaceable>package_name</replaceable></literal> or
-by using the <literal>man</literal> or <literal>info</literal> tools. (Hint:
-use <literal>cygcheck -l <replaceable>package_name</replaceable></literal> to
-list what man pages the package includes.) Some older packages still keep
-their documentation in <literal>/usr/doc/</literal>
-instead of <literal>/usr/share/doc/</literal>.
-</para>
-<para>There are links to quite a lot of documentation on the main Cygwin
-project web page, <ulink url="http://cygwin.com/">http://cygwin.com/</ulink>,
-including this FAQ. Be sure to at least read any 'Release Notes' or 'Readme'
-or 'read this' links on the main web page, if there are any.
-</para>
-<para>There is a comprehensive Cygwin User's Guide at <ulink
-url="http://cygwin.com/cygwin-ug-net/cygwin-ug-net.html">http://cygwin.com/cygwin-ug-net/cygwin-ug-net.html</ulink>
-and an API Reference at <ulink
-url="http://cygwin.com/cygwin-api/cygwin-api.html">http://cygwin.com/cygwin-api/cygwin-api.html</ulink>.
-</para>
-<para>You can find documentation for the individual GNU tools at <ulink
-url="http://www.fsf.org/manual/">http://www.fsf.org/manual/</ulink>. (You
-should read GNU manuals from a local mirror, check <ulink
-url="http://www.fsf.org/server/list-mirrors.html">http://www.fsf.org/server/list-mirrors.html</ulink>
-for a list of them.)
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.resources.mailing-lists">
-<question><para>What Cygwin mailing lists can I join?</para></question>
-<answer>
-<para>Comprehensive information about the Cygwin mailing lists can be found at
-<ulink url="http://cygwin.com/lists.html" />.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.resources.problems">
-<question><para>What if I have a problem? (Or: Why won't you/the mailing list answer my questions?)</para></question>
-<answer>
-<para>Comprehensive information about reporting problems with Cygwin can be found at <ulink url="http://cygwin.com/problems.html" />.
-</para>
-</answer></qandaentry>
-</qandadiv>
diff --git a/winsup/doc/faq-setup.xml b/winsup/doc/faq-setup.xml
deleted file mode 100644
index 4aa94edfb..000000000
--- a/winsup/doc/faq-setup.xml
+++ /dev/null
@@ -1,605 +0,0 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-
-<qandadiv id="faq.setup">
-<title>Setting up Cygwin</title>
-
-<!-- faq-setup.xml -->
-<qandaentry id="faq.setup.setup">
-<question><para>What is the recommended installation procedure?</para></question>
-<answer>
-
-<para>There is only one recommended way to install Cygwin, which is to use the GUI
-installer <command>setup-*.exe</command>. It is flexible and easy to use.
-You can pick and choose the packages you wish to install, and update
-them individually. Full source code is available for all packages and
-tools. More information on using Cygwin Setup may be found at
-<ulink url="http://cygwin.com/cygwin-ug-net/setup-net.html" />.
-</para>
-<para>If you do it any other way, you're on your own!
-If something doesn't work right for you, and
-it's not covered here or in the latest development snapshot at
-<ulink url="http://cygwin.com/snapshots/">http://cygwin.com/snapshots/</ulink>, then by all means report it to the
-mailing list.
-</para>
-<para>For a searchable list of packages that can be installed with Cygwin,
-see <ulink url="http://cygwin.com/packages/">http://cygwin.com/packages/</ulink>.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.setup.automated">
-<question><para>What about an automated Cygwin installation?</para></question>
-<answer>
-
-<para>The Cygwin Setup program is designed to be interactive, but there are
-a few different ways to automate it. If you are deploying to multiple systems,
-the best way is to run through a full installation once, saving the entire
-downloaded package tree. Then, on target systems, run Cygwin Setup as a
-"Local Install" pointed at your downloaded package tree. You could do this
-non-interactively with the command line options
-<literal>-q -L -l x:\cygwin-local\</literal>, where your downloaded
-package tree is in <literal>x:\cygwin-local\</literal> (see the next FAQ for
-an explanation of those options.)
-</para>
-<para>
-For other options, search the mailing lists with terms such as
-<ulink url="http://www.google.com/search?q=cygwin+automated+setup">cygwin automated setup</ulink> or
-<ulink url="http://www.google.com/search?q=automated+cygwin+install">automated cygwin install</ulink>.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.setup.cli">
-<question><para>Does Setup accept command-line arguments?</para></question>
-<answer>
-
-<para>Yes, the full listing is written to the <literal>setup.log</literal> file
-when you run <literal>setup-x86.exe --help</literal> or
-<literal>setup-x86_64.exe --help</literal>. The current options are:
-<screen>
-Command Line Options:
- -D --download Download from internet
- -L --local-install Install from local directory
- -s --site Download site
- -O --only-site Ignore all sites except for -s
- -R --root Root installation directory
- -x --remove-packages Specify packages to uninstall
- -c --remove-categories Specify categories to uninstall
- -P --packages Specify packages to install
- -C --categories Specify entire categories to install
- -p --proxy HTTP/FTP proxy (host:port)
- -a --arch architecture to install (x86_64 or x86)
- -q --quiet-mode Unattended setup mode
- -M --package-manager Semi-attended chooser-only mode
- -B --no-admin Do not check for and enforce running as
- Administrator
- -h --help print help
- -l --local-package-dir Local package directory
- -r --no-replaceonreboot Disable replacing in-use files on next
- reboot.
- -X --no-verify Don't verify setup.ini signatures
- -n --no-shortcuts Disable creation of desktop and start menu
- shortcuts
- -N --no-startmenu Disable creation of start menu shortcut
- -d --no-desktop Disable creation of desktop shortcut
- -K --pubkey URL of extra public key file (gpg format)
- -S --sexpr-pubkey Extra public key in s-expr format
- -u --untrusted-keys Use untrusted keys from last-extrakeys
- -U --keep-untrusted-keys Use untrusted keys and retain all
- -g --upgrade-also also upgrade installed packages
- -o --delete-orphans remove orphaned packages
- -A --disable-buggy-antivirus Disable known or suspected buggy anti virus
- software packages during execution.
-</screen>
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.setup.noroot">
-<question><para>Can I install Cygwin without administrator rights?</para></question>
-<answer>
-
-<para>Yes. The default installation requests administrator rights because
-this allows to set up the Cygwin environment so that all users can start
-a Cygwin shell out of the box. However, if you don't have administrator
-rights for your machine, and the admins don't want to install it for you,
-you can install Cygwin just for yourself by downloading
-<command>setup-x86.exe</command> (for a 32 bit install) or
-<command>setup-x86_64.exe</command> (for a 64 bit install) and then start
-it from the command line or via the "Run..." dialog from the start menu
-using the <literal>--no-admin</literal> option, for instance:</para>
-
-<para>
-<screen>
- setup-x86.exe --no-admin
-</screen>
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.setup.c">
-<question><para>Why not install in C:\?</para></question>
-<answer>
-
-<para>The Cygwin Setup program will prompt you for a "root" directory.
-The default is <literal>C:\cygwin</literal>, but you can change it. You are urged not to
-choose something like <literal>C:\</literal> (the root directory on the system drive) for
-your Cygwin root. If you do, then critical Cygwin system directories
-like <literal>etc</literal>, <literal>lib</literal> and <literal>bin</literal> could easily be corrupted by
-other (non-Cygwin) applications or packages that use <literal>\etc</literal>,
-<literal>\lib</literal> or <literal>\bin</literal>. Perhaps there is no conflict now, but who
-knows what you might install in the future? It's also just good common
-sense to segregate your Cygwin "filesystems" from the rest of your
-Windows system disk.
-</para>
-<para>(In the past, there had been genuine bugs that would cause problems
-for people who installed in <literal>C:\</literal>, but we believe those are gone
-now.)
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.setup.old-versions">
-<question><para>Can I use Cygwin Setup to get old versions of packages (like gcc-2.95)?</para></question>
-<answer>
-
-<para>Cygwin Setup can be used to install any packages that are on a
-Cygwin mirror, which usually includes one version previous to the
-current one. The complete list may be searched at
-<ulink url="http://cygwin.com/packages/">http://cygwin.com/packages/</ulink>. There is no complete archive of
-older packages. If you have a problem with the current version of
-a Cygwin package, please report it to the mailing list using the
-guidelines at <ulink url="http://cygwin.com/problems.html">http://cygwin.com/problems.html</ulink>.
-</para>
-<para>That said, if you really need an older package, you may be able to find
-an outdated or archival mirror by searching the web for an old package
-version (for example, <literal>gcc2-2.95.3-10-src.tar.bz2</literal>), but keep in
-mind that this older version will not be supported by the mailing list
-and that installing the older version will not help improve Cygwin.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.setup.virus">
-<question><para>Is Cygwin Setup, or one of the packages, infected with a virus?</para></question>
-<answer>
-
-<para>Unlikely. Unless you can confirm it, please don't report it to the
-mailing list. Anti-virus products have been known to detect false
-positives when extracting compressed tar archives. If this causes
-problems for you, consider disabling your anti-virus software when
-running <literal>setup</literal>. Read the next entry for a fairly safe way to do
-this.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.setup.hang">
-<question><para>My computer hangs when I run Cygwin Setup!</para></question>
-<answer>
-
-<para>Both Network Associates (formerly McAfee) and Norton anti-virus
-products have been reported to "hang" when extracting Cygwin tar
-archives. If this happens to you, consider disabling your anti-virus
-software when running Cygwin Setup. The following procedure should be
-a fairly safe way to do that:
-</para>
-<orderedlist><listitem><para>Download <literal>setup-x86.exe</literal> or
-<literal>setup-x86_64.exe</literal> and scan it explicitly.
-</para>
-</listitem>
-<listitem><para>Turn off the anti-virus software.
-</para>
-</listitem>
-<listitem><para>Run setup to download and extract all the tar files.
-</para>
-</listitem>
-<listitem><para>Re-activate your anti-virus software and scan everything
-in C:\cygwin (or wherever you chose to install), or your entire hard
-disk if you are paranoid.
-</para>
-</listitem>
-</orderedlist>
-
-<para>This should be safe, but only if Cygwin Setup is not substituted by
-something malicious, and no mirror has been compromised.
-</para>
-<para>See also <ulink url="http://cygwin.com/faq/faq.html#faq.using.bloda" />
-for a list of applications that have been known, at one time or another, to
-interfere with the normal functioning of Cygwin.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.setup.what-packages">
-<question><para>What packages should I download? Where are 'make', 'gcc', 'vi', etc? </para></question>
-<answer>
-<para>When using Cygwin Setup for the first time, the default is to install
-a minimal subset of all available packages. If you want anything beyond that,
-you will have to select it explicitly. See
-<ulink url="http://cygwin.com/packages/" /> for a searchable list of available
-packages, or use <literal>cygcheck -p </literal> as described in the Cygwin
-User's Guide at
-<ulink url="http://cygwin.com/cygwin-ug-net/using-utils.html#cygcheck" />.
-</para>
-<para>If you want to build programs, of course you'll need <literal>gcc</literal>,
-<literal>binutils</literal>, <literal>make</literal> and probably other packages from the
-``Devel'' category. Text editors can be found under ``Editors''.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.setup.everything">
-<question><para>How do I just get everything?</para></question>
-<answer>
-
-<para>Long ago, the default was to install everything, much to the
-irritation of most users. Now the default is to install only a basic
-core of packages. Cygwin Setup is designed to make it easy to browse
-categories and select what you want to install or omit from those
-categories. It's also easy to install everything:
-</para>
-<orderedlist>
-<listitem><para>At the ``Select Packages'' screen, in ``Categories'' view, at the line
-marked ``All'', click on the word ``default'' so that it changes to
-``install''. (Be patient, there is some computing to do at this step.
-It may take a second or two to register the change.) This tells Setup
-to install <emphasis>everything</emphasis>, not just what it thinks you should have
-by default.
-</para>
-</listitem>
-<listitem><para>Now click on the ``View'' button (twice) until you get to the
-``Pending'' view. This shows exactly which packages are about to be
-downloaded and installed.
-</para>
-</listitem>
-</orderedlist>
-
-<para>This procedure only works for packages that are currently available.
-There is no way to tell Cygwin Setup to install all packages by
-default from now on. As new packages become available that would not
-be installed by default, you have to repeat the above procedure to get
-them.
-</para>
-<para>In general, a better method (in my opinion), is to:
-</para>
-<orderedlist>
-<listitem><para>First download &amp; install all packages that would normally be
-installed by default. This includes fundamental packages and any
-updates to what you have already installed. Then...
-</para>
-</listitem>
-<listitem><para>Run Cygwin Setup again, and apply the above technique to get all
-new packages that would not be installed by default. You can check
-the list in the ``Pending'' view before proceeding, in case there's
-something you really <emphasis>don't</emphasis> want.
-</para>
-</listitem>
-<listitem><para>In the latest version of Cygwin Setup, if you click the ``View''
-button (twice) more, it shows packages not currently installed. You
-ought to check whether you <emphasis>really</emphasis> want to install everything!
-</para>
-</listitem>
-</orderedlist>
-
-</answer></qandaentry>
-
-<qandaentry id="faq.setup.disk-space">
-<question><para>How much disk space does Cygwin require?</para></question>
-<answer>
-
-<para>That depends, obviously, on what you've chosen to download and
-install. A full installation today is probably larger than 1 GB
-installed, not including the package archives themselves nor the source
-code.
-</para>
-<para>After installation, the package archives remain in your ``Local
-Package Directory''. By default the location of
-<literal>setup-x86{_64}.exe</literal>. You may conserve disk space by
-deleting the subdirectories there. These directories will have very weird
-looking names, being encoded with their URLs
-(named <literal>ftp%3a%2f...</literal>).
-</para>
-<para>Of course, you can keep them around in case you want to reinstall a
-package. If you want to clean out only the outdated packages, Michael Chase
-has written a script called <literal>clean_setup.pl</literal>, available
-at <ulink url="ftp://cygwin.com/pub/cygwin/unsupported/clean_setup.pl" />.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.setup.what-upgraded">
-<question><para>How do I know which version I upgraded from?</para></question>
-<answer>
-
-<para>Detailed logs of the most recent Cygwin Setup session can be found in
-<literal>/var/log/setup.log.full</literal> and less verbose information about
-prior actions is in <literal>/var/log/setup.log</literal>.
-</para>
-
-</answer></qandaentry>
-
-<qandaentry id="faq.setup.setup-fails">
-<question><para>What if setup fails?</para></question>
-<answer>
-
-<para>First, make sure that you are using the latest version of Cygwin Setup.
-The latest version is always available from the Cygwin Home Page at <ulink
-url="http://cygwin.com/">http://cygwin.com/</ulink>. </para>
-<para>If you are downloading from the Internet, setup will fail if it cannot
-download the list of mirrors at <ulink
-url="http://cygwin.com/mirrors.html">http://cygwin.com/mirrors.html</ulink>.
-It could be that the network is too busy. Something similar could be the
-cause of a download site not working. Try another mirror, or try again
-later.
-</para>
-<para>If setup refuses to download a package that you know needs to be
-upgraded, try deleting that package's entry from /etc/setup. If you are
-reacting quickly to an announcement on the mailing list, it could be
-that the mirror you are using doesn't have the latest copy yet. Try
-another mirror, or try again tomorrow.
-</para>
-<para>If setup has otherwise behaved strangely, check the files
-<literal>setup.log</literal> and <literal>setup.log.full</literal> in
-<literal>/var/log</literal> (<literal>C:\cygwin\var\log</literal> by
-default). It may provide some clues as to what went wrong and why.
-</para>
-<para>If you're still baffled, search the Cygwin mailing list for clues.
-Others may have the same problem, and a solution may be posted there.
-If that search proves fruitless, send a query to the Cygwin mailing
-list. You must provide complete details in your query: version of
-setup, options you selected, contents of setup.log and setup.log.full,
-what happened that wasn't supposed to happen, etc.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.setup.name-with-space">
-<question><para>My Windows logon name has a space in it, will this cause problems?</para></question>
-<answer>
-
-<para>Most definitely yes! UNIX shells (and thus Cygwin) use the space
-character as a word delimiter. Under certain circumstances, it is
-possible to get around this with various shell quoting mechanisms, but
-you are much better off if you can avoid the problem entirely.
-</para>
-<para>You have two choices:
-</para><orderedlist>
-<listitem><para>You can rename the user in the Windows User Manager GUI and then
-run mkpasswd.
-</para>
-</listitem>
-<listitem><para>If you already have an /etc/passwd file, you can simply edit
-your Cygwin user name (first field). It's also a good idea to avoid spaces in
-the home directory.
-</para>
-</listitem>
-</orderedlist>
-
-</answer></qandaentry>
-
-<qandaentry id="faq.setup.home">
-<question><para>My <literal>HOME</literal> environment variable is not what I want.</para></question>
-<answer>
-
-<para>When starting Cygwin from Windows, <literal>HOME</literal> is determined as follows
-in order of decreasing priority:
-</para>
-<orderedlist>
-<listitem><para><literal>HOME</literal> from the Windows environment, translated to POSIX form.
-</para>
-</listitem>
-<listitem><para>The pw_home field from the passwd entry as returned by <command>getent passwd</command>.
-</para>
-</listitem>
-<listitem><para>/home/USERNAME
-</para>
-</listitem>
-</orderedlist>
-
-<para>When using Cygwin from the network (telnet, ssh,...), <literal>HOME</literal> is taken from the passwd entry.
-</para>
-<para>If your <literal>HOME</literal> is set to a value such as /cygdrive/c, it is likely
-that it was set in Windows. Start a DOS Command Window and type
-"set HOME" to verify if this is the case.
-</para>
-<para>Access to shared drives is often restricted when starting from the network,
-thus Domain users may wish to have a different <literal>HOME</literal> in the
-Windows environment (on shared drive) than in Cygwin (on local drive).
-Note that ssh only considers the account information as retrieved by
-getpwnam(3), disregarding <literal>HOME</literal>.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.setup.uninstall-packages">
-<question><para>How do I uninstall individual packages?</para></question>
-<answer>
-
-<para>Run Cygwin Setup as you would to install packages. In the list of
-packages to install, browse the relevant category or click on the
-``View'' button to get a full listing. Click on the cycle glyph until
-the action reads ``Uninstall''. Proceed by clicking ``Next''.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.setup.uninstall-service">
-<question><para>How do I uninstall a Cygwin service?</para></question>
-<answer>
-<orderedlist>
-<listitem><para>List all services you have installed with
-<literal>cygrunsrv -L</literal>. If you do not have
-<literal>cygrunsrv</literal> installed, skip this FAQ.
-</para></listitem>
-<listitem><para>Before removing the service, you should stop it with
-<literal>cygrunsrv --stop <replaceable>service_name</replaceable></literal>.
-If you have <literal>inetd</literal> configured to run as a standalone
-service, it will not show up in the list, but
-<literal>cygrunsrv --stop inetd</literal> will work to stop it as
-well.
-</para></listitem>
-<listitem><para>Lastly, remove the service with
-<literal>cygrunsrv --remove <replaceable>service_name</replaceable></literal>.
-</para></listitem>
-</orderedlist>
-</answer></qandaentry>
-
-<qandaentry id="faq.setup.uninstall-all">
-<question><para>How do I uninstall <emphasis role='bold'>all</emphasis> of Cygwin?</para></question>
-<answer>
-<para>Setup has no automatic uninstall facility. The recommended method to remove all
-of Cygwin is as follows:
-</para>
-<orderedlist>
-<listitem><para>If you have any Cygwin services running, remove by repeating
-the instructions in <ulink
-url="http://cygwin.com/faq/faq.html#faq.setup.uninstall-service" /> for
-all services that you installed. Common services that might have been
-installed are <literal>sshd</literal>, <literal>cron</literal>,
-<literal>cygserver</literal>, <literal>inetd</literal>, <literal>apache</literal>,
-<literal>postgresql</literal>, and so on.
-</para>
-</listitem>
-<listitem><para>Stop the X11 server if it is running, and terminate any Cygwin programs
-that might be running in the background. Exit the command prompt and ensure
-that no Cygwin processes remain. Note: If you want to save your mount points for a later
-reinstall, first save the output of <literal>mount -m</literal> as described at
-<ulink url="http://cygwin.com/cygwin-ug-net/using-utils.html#mount" />.
-</para>
-</listitem>
-<listitem><para>If you installed <literal>cyglsa.dll</literal> by running the
-shell script <literal>/usr/bin/cyglsa-config</literal> as described in
-<ulink url="http://cygwin.com/cygwin-ug-net/ntsec.html" />, then you need to
-configure Windows to stop using the LSA authentication package. You do so by
-editing the registry and restoring
-<literal>/HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Lsa/Authentication Packages</literal>
-back to it's original value of <literal>msv1_0</literal>, and then rebooting.
-</para>
-</listitem>
-<listitem><para>Delete the Cygwin root folder and all subfolders. If you get an error
-that an object is in use, then ensure that you've stopped all services and
-closed all Cygwin programs. If you get a 'Permission Denied' error then you
-will need to modify the permissions and/or ownership of the files or folders
-that are causing the error. For example, sometimes files used by system
-services end up owned by the SYSTEM account and not writable by regular users.
-</para>
-<para>The quickest way to delete the entire tree if you run into this problem is to
-change the ownership of all files and folders to your account. To do this in
-Windows Explorer, right click on the root Cygwin folder, choose Properties, then
-the Security tab. If you are using Windows XP Home or Simple File Sharing,
-you will need to boot into Safe Mode to access the Security tab. Select
-Advanced, then go to the Owner tab and make sure your account is listed as
-the owner. Select the 'Replace owner on subcontainers and objects' checkbox
-and press Ok. After Explorer applies the changes you should be able to
-delete the entire tree in one operation. Note that you can also achieve
-this in Cygwin by typing <literal>chown -R user /</literal> or by using other
-tools such as <literal>CACLS.EXE</literal>.
-</para>
-</listitem>
-<listitem><para>Delete the Cygwin shortcuts on the Desktop and Start Menu, and
-anything left by setup-x86{_64}.exe in the download directory. However, if you
-plan to reinstall Cygwin it's a good idea to keep your setup-x86{_64}.exe
-download directory since you can reinstall the packages left in its cache
-without redownloading them.
-</para>
-</listitem>
-<listitem><para>If you added Cygwin to your system path, you should remove it unless you
-plan to reinstall Cygwin to the same location. Similarly, if you set your
-CYGWIN environment variable system-wide and don't plan to reinstall, you should
-remove it.
-</para>
-</listitem>
-<listitem><para>Finally, if you want to be thorough you can delete the registry tree
-<literal>Software\Cygwin</literal> under <literal>HKEY_LOCAL_MACHINE</literal> and/or
-<literal>HKEY_CURRENT_USER</literal>. However, if you followed the directions above you
-will have already removed everything important. Typically only the installation
-directory has been stored in the registry at all.
-</para>
-</listitem>
-</orderedlist>
-
-</answer></qandaentry>
-
-<qandaentry id="faq.setup.snapshots">
-<question><para>How do I install snapshots?</para></question>
-<answer>
-
-<para>First, are you sure you want to do this? Snapshots are risky. They
-have not been tested. Use them <emphasis role='bold'>only</emphasis> if there is a feature or
-bugfix that you need to try, and you are willing to deal with any
-problems, or at the request of a Cygwin developer.
-</para>
-<para>You cannot use Cygwin Setup to install a snapshot.
-</para>
-<para>First, you will need to download the snapshot from the snapshots
-page at <ulink url="http://cygwin.com/snapshots/">http://cygwin.com/snapshots/</ulink>. Note the directory where
-you saved the snapshot tarball.
-</para>
-<para>Before installing a snapshot, you must first Close <emphasis role='bold'>all</emphasis> Cygwin
-applications, including shells and services (e.g., <literal>inetd</literal>, <literal>sshd</literal>).
-You will not be able to replace <literal>cygwin1.dll</literal> if any Cygwin process is
-running. You may have to restart Windows to clear the DLL from memory
-(beware of automatic service startup).
-</para>
-<para>Most of the downloaded snapshot can be installed using <literal>tar</literal>. Cygwin
-<literal>tar</literal> won't be able to update <literal>/usr/bin/cygwin1.dll</literal> (because it's
-used by <literal>tar</literal> itself), but it should succeed with everything else. If
-you are only installing the DLL snapshot, skip the first tar command. Open
-a <literal>bash</literal> shell (it should be the only running Cygwin process) and issue
-the following commands:
-<screen>
- /bin/tar -C / -xvf /posix/path/to/cygwin-inst-YYYYMMDD.tar.* --exclude=usr/bin/cygwin1.dll
- /bin/tar -C /tmp -xvf /posix/path/to/cygwin-inst-YYYYMMDD.tar.* usr/bin/cygwin1.dll
-</screen>
-</para>
-<para>Exit the bash shell, and use Explorer or the Windows command shell to
-first rename <literal>C:\cygwin\bin\cygwin1.dll</literal> to
-<literal>C:\cygwin\bin\cygwin1-prev.dll</literal> and then move
-<literal>C:\cygwin\tmp\usr\bin\cygwin1.dll</literal>
-to <literal>C:\cygwin\bin\cygwin1.dll</literal> (assuming you installed Cygwin in
-<literal>C:\cygwin</literal>).
-</para>
-<para>The operative word in trying the snapshots is "<emphasis>trying</emphasis>". If you
-notice a problem with the snapshot that was not present in the release
-DLL (what we call a "regression"), please report it to the Cygwin
-mailing list (see <ulink url="http://cygwin.com/problems.html">http://cygwin.com/problems.html</ulink> for problem
-reporting guidelines). If you wish to go back to the older version of the
-DLL, again, close all Cygwin processes, delete
-<literal>C:\cygwin\bin\cygwin1.dll</literal>, and
-rename <literal>C:\cygwin\bin\cygwin1-prev.dll</literal> back to
-<literal>C:\cygwin\bin\cygwin1.dll</literal> (again assuming that your "<literal>/</literal>" is
-<literal>C:\cygwin</literal>). To restore the rest of the snapshot
-files, reinstall the "<literal>cygwin</literal>" package using Setup.
-</para>
-
-</answer></qandaentry>
-
-<qandaentry id="faq.setup.mirror">
-<question><para>Can Cygwin Setup maintain a ``mirror''?</para></question>
-<answer>
-
-<para>NO. Cygwin Setup cannot do this for you. Use a tool designed for
-this purpose. See <ulink url="http://rsync.samba.org/">http://rsync.samba.org/</ulink>,
-<ulink url="http://www.gnu.org/software/wget/">http://www.gnu.org/software/wget/</ulink> for utilities that can do this for you.
-For more information on setting up a custom Cygwin package server, see
-the Cygwin Setup homepage at
-<ulink url="http://sourceware.org/cygwin-apps/setup.html">http://sourceware.org/cygwin-apps/setup.html</ulink>.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.setup.cd">
-<question><para>How can I make my own portable Cygwin on CD?</para></question>
-<answer>
-
-<para>While some users have successfully done this, for example Indiana
-University's XLiveCD <ulink url="http://xlivecd.indiana.edu/">http://xlivecd.indiana.edu/</ulink>, there is no
-easy way to do it. Full instructions for constructing a portable Cygwin
-on CD by hand can be found on the mailing list at
-<ulink url="http://www.cygwin.com/ml/cygwin/2003-07/msg01117.html">http://www.cygwin.com/ml/cygwin/2003-07/msg01117.html</ulink>
-(Thanks to fergus at bonhard dot uklinux dot net for these instructions.)
-Please note that these instructions are rather old and are referring to the
-somewhat different setup of a Cygwin 1.5.x release. As soon as somebody set
-this up for Cygwin 1.7, we might add this information here.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.setup.registry">
-<question><para>How do I save, restore, delete, or modify the Cygwin information stored in the registry?</para></question>
-<answer>
-
-<para>Since Cygwin 1.7, there's nothing important in the registry anymore,
-except for the installation directory information stored there for the sake
-of setup-x86{_64}.exe. There's nothing left to manipulate anymore.
-</para></answer></qandaentry>
-</qandadiv>
-
diff --git a/winsup/doc/faq-using.xml b/winsup/doc/faq-using.xml
deleted file mode 100644
index 18c6c4ed7..000000000
--- a/winsup/doc/faq-using.xml
+++ /dev/null
@@ -1,1231 +0,0 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-
-<qandadiv id="faq.using">
-<title>Using Cygwin</title>
-
-<!-- faq-problems.xml -->
-<qandaentry id="faq.using.missing-dlls">
-<question><para>Why can't my application locate cygncurses-8.dll? or cygintl-3.dll? or cygreadline6.dll? or ...?</para></question>
-<answer>
-
-<para>Well, something has gone wrong somehow...
-</para>
-<para>To repair the damage, you must run Cygwin Setup again, and re-install the
-package which provides the missing DLL package.
-</para>
-<para>If you already installed the package at one point, Cygwin Setup won't
-show the option to install the package by default. In the
-``Select packages to install'' dialog, click on the <literal>Full/Part</literal>
-button. This lists all packages, even those that are already
-installed. Scroll down to locate the missing package, for instance
-<literal>libncurses8</literal>. Click on the ``cycle'' glyph until it says
-``Reinstall''. Continue with the installation.
-</para>
-<para>For a detailed explanation of the general problem, and how to extend
-it to other missing DLLs and identify their containing packages, see
-<ulink url="http://cygwin.com/ml/cygwin/2002-01/msg01619.html">http://cygwin.com/ml/cygwin/2002-01/msg01619.html</ulink>.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.using.slow">
-<question><para>Why is Cygwin suddenly <emphasis>so</emphasis> slow?</para></question>
-<answer>
-
-<para>If suddenly <emphasis>every</emphasis> command takes a
-<emphasis>very</emphasis> long time, then something is probably attempting to
-access a network share. You may have the obsolete <literal>//c</literal>
-notation in your PATH or startup files. Using <literal>//c</literal> means
-to contact the <emphasis>network server</emphasis> <literal>c</literal>, which
-will slow things down tremendously if it does not exist.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.using.shares">
-<question><para>Why can't my services access network shares?</para></question>
-<answer>
-
-<para>If your service is one of those which switch the user context
-(sshd, inetd, etc), then it depends on the method used to switch to
-another user. This problem as well as its solution is described in
-detail in the Cygwin User's Guide, see
-<ulink url="http://cygwin.com/cygwin-ug-net/ntsec.html" />.
-</para>
-<para>Workarounds include using public network share that does not require
-authentication (for non-critical files), providing your password to a
-<command>net use</command> command, or running the service as your own
-user with <literal>cygrunsrv -u</literal> (see
-<literal>/usr/share/doc/Cygwin/cygrunsrv.README</literal> for more
-information).
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.using.path">
-<question><para>How should I set my PATH?</para></question>
-<answer>
-
-<para>This is done for you in the file /etc/profile, which is sourced by bash
-when you start it from the Desktop or Start Menu shortcut, created by
-<literal>setup.exe</literal>. The line is
-</para>
-<screen>
- PATH="/usr/local/bin:/usr/bin:/bin:$PATH"
-</screen>
-
-<para>Effectively, this <emphasis role='bold'>prepends</emphasis> /usr/local/bin and /usr/bin to your
-Windows system path. If you choose to reset your PATH, say in
-$HOME/.bashrc, or by editing etc/profile directly, then you should
-follow this rule. You <emphasis role='bold'>must</emphasis> have <literal>/usr/bin</literal> in your PATH
-<emphasis role='bold'>before</emphasis> any Windows system directories. (And you must not omit
-the Windows system directories!) Otherwise you will likely encounter
-all sorts of problems running Cygwin applications.
-</para>
-<para>If you're using another shell than bash (say, tcsh), the mechanism
-is the same, just the names of the login scripts are different.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.using.not-found">
-<question><para>Bash (or another shell) says "command not found", but it's right there!</para></question>
-<answer>
-
-<para>If you compile a program, you might find that you can't run it:
-</para>
-<screen>
- bash$ gcc -o hello hello.c
- bash$ hello
- bash: hello: command not found
-</screen>
-
-<para>Unlike the Windows default behaviour, Unix shells like bash do not look for programs in <literal>.</literal> (the current
-directory) by default. You can add <literal>.</literal> to your PATH (see above),
-but this is not recommended (at least on UNIX) for security reasons.
-Just tell bash where to find it, when you type it on the command line:
-</para>
-<screen>
- bash$ gcc -o hello hello.c
- bash$ ./hello
- Hello World!
-</screen>
-
-</answer></qandaentry>
-
-<qandaentry id="faq.using.converting-paths">
-<question><para>How do I convert between Windows and UNIX paths?</para></question>
-<answer>
-
-<para>Use the 'cygpath' utility. Type '<literal>cygpath --help</literal>' for
-information. For example (on my installation):
-<screen>
- bash$ cygpath --windows ~/.bashrc
- D:\starksb\.bashrc
- bash$ cygpath --unix C:/cygwin/bin/ls.exe
- /usr/bin/ls.exe
- bash$ cygpath --unix C:\\cygwin\\bin\\ls.exe
- /usr/bin/ls.exe
-</screen>
-Note that bash interprets the backslash '\' as an escape character, so
-you must type it twice in the bash shell if you want it to be recognized
-as such.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.using.bashrc">
-<question><para>Why doesn't bash read my .bashrc file on startup?</para></question>
-<answer>
-
-<para>Your .bashrc is read from your home directory specified by the HOME
-environment variable. It uses /.bashrc if HOME is not set. So you need
-to set HOME (and the home dir in your passwd account information) correctly.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.using.bash-insensitive">
-<question><para>How can I get bash filename completion to be case insensitive?</para></question>
-<answer>
-
-<para>Add the following to your <literal>~/.bashrc</literal> file:
-</para>
-<screen>
- shopt -s nocaseglob
-</screen>
-
-<para>and add the following to your <literal>~/.inputrc</literal> file:
-</para>
-<screen>
- set completion-ignore-case on
-</screen>
-
-</answer></qandaentry>
-
-<qandaentry id="faq.using.filename-spaces">
-<question><para>Can I use paths/filenames containing spaces in them?</para></question>
-<answer>
-
-<para>Cygwin does support spaces in filenames and paths. That said, some
-utilities that use the library may not, since files don't typically
-contain spaces in Unix. If you stumble into problems with this, you
-will need to either fix the utilities or stop using spaces in filenames
-used by Cygwin tools.
-</para>
-<para>In particular, bash interprets space as a word separator. You would have
-to quote a filename containing spaces, or escape the space character.
-For example:
-<screen>
- bash-2.03$ cd '/cygdrive/c/Program Files'
-</screen>
-or
-<screen>
- bash-2.03$ cd /cygdrive/c/Program\ Files
-</screen>
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.using.shortcuts">
-<question><para>Why can't I cd into a shortcut to a directory?</para></question>
-<answer>
-
-<para>Cygwin does not follow MS Windows Explorer Shortcuts
-(*.lnk files). It sees a shortcut as a regular file and this you
-cannot "cd" into it.
-</para>
-<para>Cygwin is also capable to create POSIX symlinks as Windows shortcuts
-(see the CYGWIN environment variable option "winsymlinks"), but these
-shortcuts are different from shortcuts created by native Windows
-applications. Windows applications can usually make use of Cygwin
-shortcuts but not vice versa. This is by choice. The reason is that
-Windows shortcuts may contain a bunch of extra information which would
-get lost, if, for example, Cygwin tar archives and extracts them as
-symlinks.
-</para>
-<para>Changing a Cygwin shortcut in Windows Explorer usually changes a Cygwin
-shortcut into a Windows native shortcut. Afterwards, Cygwin will not
-recognize it as symlink anymore.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.using.find">
-<question><para>I'm having basic problems with find. Why?</para></question>
-<answer>
-
-<para>Make sure you are using the find that came with Cygwin and that you
-aren't picking up the Win32 find command instead. You can verify that
-you are getting the right one by doing a "type find" in bash.
-</para>
-<para>If the path argument to find, including current directory (default), is
-itself a symbolic link, then find will not traverse it unless you
-specify the <literal>-follow</literal> option. This behavior is different than most
-other UNIX implementations, but is not likely to change.
-</para>
-<para>If find does not seem to be producing enough results, or seems to be
-missing out some directories, you may be experiencing a problem with one
-of find's optimisations. The absence of <literal>.</literal> and <literal>..</literal>
-directories on some filesystems, such as DVD-R UDF, can confuse find.
-See the documentation for the option <literal>-noleaf</literal> in the man page.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.using.su">
-<question><para>Why doesn't <literal>su</literal> work?</para></question>
-<answer>
-
-<para>The <literal>su</literal> command has been in and out of Cygwin distributions, but
-it has not been ported to Cygwin and has never worked. It is
-currently installed as part of the sh-utils, but again, it does not work.
-</para>
-<para>You should rather install <literal>sshd</literal> and use
-<literal>ssh username@localhost</literal> as a <literal>su</literal>
-replacement.
-</para>
-<para>For some technical background into why <literal>su</literal> doesn't work, read
-<ulink url="http://www.cygwin.com/ml/cygwin/2003-06/msg00897.html">http://www.cygwin.com/ml/cygwin/2003-06/msg00897.html</ulink> and
-related messages.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.using.man">
-<question><para>Why doesn't <literal>man -k</literal>,
-<literal>apropos</literal> or <literal>whatis</literal> work?</para></question>
-<answer>
-
-<para>Before you can use <literal>man -k</literal>, <literal>apropos</literal>
-or <literal>whatis</literal>, you
-must create the whatis database. Just run the command
-</para>
-<screen>
- /usr/sbin/makewhatis
-</screen>
-
-<para>(it may take a minute to complete).
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.using.chmod">
-<question><para>Why doesn't <literal>chmod</literal> work?</para></question>
-<answer>
-
-<para>If you're using FAT32 instead of NTFS, <literal>chmod</literal>
-will fail since FAT32 does not provide any permission information.
-You should really consider converting the drive to NTFS with
-<literal>CONVERT.EXE</literal>. FAT and FAT32 are barely good enough
-for memory cards or USB sticks to exchange pictures...
-</para>
-<para>For other cases, understand that Cygwin attempts to show UNIX
-permissions based on the security features of Windows, so the Windows
-ACLs are likely the source of your problem. See the Cygwin User's
-Guide at <ulink url="http://cygwin.com/cygwin-ug-net/ntsec.html" />
-for more information on how Cygwin maps Windows permissions.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.using.shell-scripts">
-<question><para>Why doesn't my shell script work?</para></question>
-<answer>
-
-<para>There are two basic problems you might run into. One is the fact that
-<command>/bin/sh</command> is really <command>bash</command>.
-It could be missing some features you might expect in
-<command>/bin/sh</command>, if you are used to <command>/bin/sh</command>
-actually being <command>zsh</command> (MacOS X "Panther") or
-<command>ksh</command> (Tru64).
-</para>
-
-<para>Or, it could be a permission problem, and Cygwin doesn't understand
-that your script is executable. On NTFS or NFS just make the script
-executable using <literal>chmod +x</literal>. However,
-<literal>chmod</literal> may not work due to restrictions of the
-filesystem (see FAQ entry above). In this case Cygwin must read the
-contents of files to determine if they are executable. If your script
-does not start with
-</para>
-<screen>
- #! /bin/sh
-</screen>
-
-<para>(or any path to a script interpreter, it does not have to be /bin/sh)
-then Cygwin will not know it is an executable script. The Bourne shell
-idiom
-</para>
-<screen>
- :
- # This is the 2nd line, assume processing by /bin/sh
-</screen>
-
-<para>also works.
-</para>
-<para>Note that you can use the filesystem flag <literal>cygexec</literal> in
-<filename>/etc/fstab</filename> to force Cygwin to treat all files
-under the mount point as executable. This can be used for individual
-files as well as directories. Then Cygwin will not bother to read files
-to determine whether they are executable.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.using.printing">
-<question><para>How do I print under Cygwin?</para></question>
-<answer>
-
-<para>lpr is available in the cygutils package. Some <ulink url="http://cygwin.com/ml/cygwin/2008-05/msg00123.html">usage hints</ulink> are available courtesy of Rodrigo Medina.
-</para>
-<para>Jason Tishler has written a couple of messages that explain how to use
-a2ps (for nicely formatted text in PostScript) and ghostscript (to print
-PostScript files on non-PostScript Windows printers). Start at
-<ulink url="http://cygwin.com/ml/cygwin/2001-04/msg00657.html">http://cygwin.com/ml/cygwin/2001-04/msg00657.html</ulink>. Note that the
-<literal>file</literal> command is now available as part of Cygwin setup.
-</para>
-<para>Alternatively, you can use the Windows <literal>print</literal>
-command. (It does not seem to be available on Win9x.) Type
-</para>
-<screen>
- bash$ print /\?
-</screen>
-
-<para>for usage instructions (note the <literal>?</literal> must be escaped from the
-shell).
-</para>
-<para>Finally, you can simply <literal>cat</literal> the file to the printer's share name:
-</para>
-<screen>
- bash$ cat myfile &gt; //host/printer
-</screen>
-
-<para>You may need to press the formfeed button on your printer or append the
-formfeed character to your file.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.using.unicode">
-<question><para>Why don't international (Unicode) characters work?</para></question>
-<answer>
-
-<para>Internationalization is a complex issue. The short answer is that
-Cygwin relies on the setting of the setting of LANG/LC_xxx environment
-variables. The long answer can be found in the User's Guide in the
-section <ulink url="http://cygwin.com/cygwin-ug-net/setup-locale.html">Internationalization</ulink>
-</para>
-
-<para> Cygwin uses UTF-8 by default. To use a different character set, you
-need to set the LC_ALL, LC_CTYPE or LANG environment variables.</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.using.weirdchars">
-<question><para>My application prints international characters but I only
-see gray boxes</para></question>
-<answer>
-<para>In the case of Cygwin programs, this likely means that the
-character set as determined by the LC_ALL, LC_CTYPE or LANG environment
-variables does not match the one set on the Text page of the Cygwin Terminal's
-options. Setting the locale in the terminal's options will set the LANG
-variable accordingly.</para>
-<para>Non-Cygwin programs in the Cygwin Terminal do not usually take
-heed of the locale environment variables. Instead, they often use the
-so-called console codepage, which can be determined with the command
-<command>cmd /c chcp</command> followed by the appropriate Windows
-codepage number. The codepage number for Cygwin's default UTF-8 character
-set is 65001.</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.using.multiple-copies">
-<question><para>Is it OK to have multiple copies of the DLL?</para></question>
-<answer>
-<para>Yes, as long as they are used in strictly separated installations.</para>
-<para>The Cygwin DLL has to handle various sharing situations between
-multiple processes. It has to keep a process table. It has to maintain
-a mount table which is based on the installation path of the Cygwin DLL.</para>
-<para>For that reason, the Cygwin DLL maintains shared resources based on
-a hash value created from its own installation path. Each Cygwin DLL
-on the machine constitutes a Cygwin installation, with the directory
-the Cygwin DLL resides in treated as "/bin", the parent directory as "/".
-</para>
-<para>Therefore, you can install two or more separate Cygwin distros on
-a single machine. Each of these installations use their own Cygwin DLL,
-and they don't share the default POSIX paths, nor process tables, nor
-any other shared resource used to maintain the installation.</para>
-<para>However, a clean separation requires that you don't try to run
-executables of one Cygwin installation from processes running in another
-Cygwin installation. This may or may not work, but the chances that the
-result is not what you expect are pretty high.</para>
-<para>If you get the error "shared region is corrupted" or "shared region
-version mismatch" it means you have multiple versions of cygwin1.dll
-running at the same time which conflict with each other. Apart from
-mixing executables of different Cygwin installations, this could also happen
-if you have one a single Cygwin installation, for example, if you update the
-Cygwin package without exiting <emphasis>all</emphasis> Cygwin apps (including
-services like sshd) beforehand.</para>
-<para>The only DLL that is sanctioned by the Cygwin project is the one that
-you get by running <ulink url="http://cygwin.com/install.html">setup.exe</ulink>,
-installed in a directory controlled by this program. If you have other
-versions on your system and desire help from the cygwin project, you should
-delete or rename all DLLs that are not installed by
-<filename>setup.exe</filename>.
-</para>
-<para>If you're trying to find multiple versions of the DLL that are causing
-this problem, reboot first, in case DLLs still loaded in memory are the
-cause. Then use the Windows System find utility to search your whole
-machine, not just components in your PATH (as 'type' would do) or
-cygwin-mounted filesystems (as Cygwin 'find' would do).
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.using.third-party.multiple-copies">
-<question><para>
-I read the above but I want to bundle Cygwin with a product, and ship it
-to customer sites. How can I do this without conflicting with any Cygwin
-installed by the user?
-</para></question>
-<answer><para>
-Usually, if you keep your installation separate, nothing bad should happen.
-However, for the user's convenience, and to avoid potential problems which
-still can occur, consider to integrate your product with an already existing
-Cygwin installation on the user's machine, or, if there is none, consider
-to install the official Cygwin distro on behalf of the user and integrate
-your tools from there. (If you write a tool to make this easy, consider
-contributing it for others to use)
-</para></answer></qandaentry>
-
-<qandaentry id="faq.using.bundling-cygwin">
-<question><para>
-Can I bundle Cygwin with my product for free?
-</para></question>
-<answer><para>
-Only if you comply with Cygwin's <ulink
-url="http://cygwin.com/licensing.html">license</ulink> very carefully. If you
-choose to distribute cygwin1.dll, you must be willing to distribute the
-exact source code used to build that copy of cygwin1.dll as per the
-terms of the GPL. If you ship applications that link with cygwin1.dll,
-you must either provide those applications' source code under a
-GPL-compatible license, *or* purchase a cygwin license from Red Hat.
-</para></answer></qandaentry>
-
-<qandaentry id="faq.using.older-cygwin-conflict">
-<question><para>
-But doesn't that mean that if some application installs an older Cygwin
-DLL on top of a newer DLL, my application will break?
-</para></question>
-<answer><para>
-It depends on what you mean by "break". If the application installs a
-version of the Cygwin DLL in another location than Cygwin's /bin
-directory then the rules in
-<xref linkend="faq.using.third-party.multiple-copies"></xref> apply.
-If the application installs an older version of the DLL in /bin then you
-should complain loudly to the application provider.
-</para><para>
-Remember that the Cygwin DLL strives to be backwards compatible so a
-newer version of the DLL should always work with older executables. So,
-in general, it is always best to keep one version of the DLL on your
-system and it should always be the latest version which matches your
-installed distribution.
-</para></answer></qandaentry>
-
-<qandaentry id="faq.using.missing-packages">
-<question><para>Why isn't package XYZ available in Cygwin?</para></question>
-<answer>
-
-<para>Probably because there is nobody willing or able to maintain it. It
-takes time, and the priority for the Cygwin Team is the Cygwin package.
-The rest is a volunteer effort. Want to contribute? See
-<ulink url="http://cygwin.com/setup.html">http://cygwin.com/setup.html</ulink>.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.using.old-packages">
-<question><para>Why is the Cygwin package of XYZ so out of date?</para></question>
-<answer>
-
-<para>(Also: Why is the version of package XYZ older than the version that I
-can download from the XYZ web site? Why is the version of package XYZ
-older than the version that I installed on my linux system? Is there
-something special about Cygwin which requires that only an older version
-of package XYZ will work on it?)
-</para>
-<para>Every package in the Cygwin distribution has a maintainer who is
-responsible for sending out updates of the package. This person is a
-volunteer who is rarely the same person as the official developer of the
-package. If you notice that a version of a package seems to be out of
-date, the reason is usually pretty simple -- the person who is
-maintaining the package hasn't gotten around to updating it yet. Rarely,
-the newer package actually requires complex changes that the maintainer
-is working out.
-</para>
-<para>If you urgently need an update, sending a polite message to the cygwin
-mailing list pinging the maintainer is perfectly acceptable. There are
-no guarantees that the maintainer will have time to update the package
-or that you'll receive a response to your request, however.
-</para>
-<para>Remember that the operative term here is "volunteer".
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.using.accessing-drives">
-<question><para>How can I access other drives?</para></question>
-<answer>
-
-<para>You have some flexibility here.
-</para>
-<para>Cygwin has a builtin "cygdrive prefix" for drives that are not mounted.
-You can access any drive, say Z:, as '/cygdrive/z/'.
-</para>
-<para>In some applications (notably bash), you can use the familiar windows
-&lt;drive&gt;:/path/, using posix forward-slashes ('/') instead of Windows
-backward-slashes ('\'). (But see the warning below!) This maps in the
-obvious way to the Windows path, but will be converted internally to use
-the Cygwin path, following mounts (default or explicit). For example:
-<screen>
- bash$ cd C:/Windows
- bash$ pwd
- /cygdrive/c/Windows
-</screen>
-and
-<screen>
- bash$ cd C:/cygwin
- bash$ pwd
- /
-</screen>
-for a default setup. You could also use backward-slashes in the
-Windows path, but these would have to be escaped from the shell.
-</para>
-<para><emphasis role='bold'>Warning:</emphasis> There is some ambiguity in going from a Windows path
-to the posix path, because different posix paths, through different
-mount points, could map to the same Windows directory. This matters
-because different mount points may be binmode or textmode, so the
-behavior of Cygwin apps will vary depending on the posix path used to
-get there.
-</para>
-<para>You can avoid the ambiguity of Windows paths, and avoid typing
-"/cygdrive", by explicitly mounting drives to posix paths. For example:
-<screen>
- bash$ mkdir /c
- bash$ mount c:/ /c
- bash$ ls /c
-</screen>
-Then <literal>/cygdrive/c/Windows</literal> becomes <literal>/c/Windows</literal> which is a
-little less typing.
-</para>
-<para>Note that you have to enter the mount point into the
-<filename>/etc/fstab</filename> file to keep it indefinitely.
-The mount command will only add the mount point for the lifetime
-of your current Cygwin session.
-</para>
-<para>You can change the default <literal>cygdrive</literal> prefix and whether it is binmode or textmode using the <filename>/etc/fstab</filename> file
-as well. See the Cygwin User's Guide at
-<ulink url="http://cygwin.com/cygwin-ug-net/using.html#mount-table">http://cygwin.com/cygwin-ug-net/using.html#mount-table</ulink>
-for more details.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.using.copy-and-paste">
-<question><para>How can I copy and paste into Cygwin console windows?</para></question>
-<answer>
-
-<para>First, consider using mintty instead of the standard console
-window. In mintty, selecting with the left-mouse also copies,
-and middle-mouse pastes. It couldn't be easier!
-</para>
-<para>In Windows's console window, open the properties dialog.
-The options contain a toggle button, named "Quick edit mode". It must
-be ON. Save the properties.
-</para>
-<para>You can also bind the insert key to paste from the clipboard by adding
-the following line to your .inputrc file:
-<screen>
- "\e[2~": paste-from-clipboard
-</screen>
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.using.firewall">
-<question><para>What firewall should I use with Cygwin? </para></question>
-<answer>
-
-<para>We have had good reports about Kerio Personal Firewall, ZoneLabs
-Integrity Desktop, and the built-in firewall in Windows XP. Other
-well-known products including ZoneAlarm and Norton Internet Security have
-caused problems for some users but work fine for others. At last report,
-Agnitum Outpost did not work with Cygwin. If you are having strange
-connection-related problems, disabling the firewall is a good
-troubleshooting step (as is closing or disabling all other running
-applications, especially resource-intensive processes such as indexed
-search).
-</para>
-<para>On the whole, Cygwin doesn't care which firewall is used. The few rare
-exceptions have to do with socket code.
-Cygwin uses sockets to implement many of its functions, such as IPC.
-Some overzealous firewalls install themselves deeply into the winsock
-stack (with the 'layered service provider' API) and install hooks
-throughout. Sadly the mailing list archives are littered with examples
-of poorly written firewall-type software that causes things to break.
-Note that with many of these products, simply disabling the firewall
-does not remove these changes; it must be completely uninstalled.
-</para>
-<para>See also <ulink url="http://cygwin.com/faq/faq.html#faq.using.bloda" />
-for a list of applications that have been known, at one time or another, to
-interfere with the normal functioning of Cygwin.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.using.sharing-files">
-<question><para>How can I share files between Unix and Windows?</para></question>
-<answer>
-
-<para>During development, we have Linux boxes running Samba and NFS as well
-as Windows machines. We often build with cross-compilers under Linux and copy
-binaries and source to the Windows system or just toy with them
-directly off the Samba-mounted partition. Or, we use the Microsoft NFS
-client and just use NFS shares on Linux from Windows. And then there are
-tools like <literal>scp</literal>, <literal>ftp</literal>,
-<literal>rsync</literal>, ...
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.using.case-sensitive">
-<question><para>Is Cygwin case-sensitive??</para></question>
-<answer>
-
-<para>Several Unix programs expect to be able to use to filenames
-spelled the same way, but with different case. A prime example
-of this is perl's configuration script, which wants
-<literal>Makefile</literal> and <literal>makefile</literal>. Windows can't
-tell the difference between files with just different case, so the
-configuration fails.
-</para>
-<para>To help with this problem, Cygwin supports case sensitivity
-starting with Cygwin 1.7.0. For a detailed description how to use that
-feature see the Cygwin User's Guilde at
-<ulink url="http://cygwin.com/cygwin-ug-net/using-specialnames.html">http://cygwin.com/cygwin-ug-net/using-specialnames.html</ulink>.
-</para>
-
-</answer></qandaentry>
-
-<qandaentry id="faq.using.dos-filenames">
-<question><para>What about DOS special filenames?</para></question>
-<answer>
-
-<para>In Windows, files cannot be named com1, lpt1, or aux (to name a few);
-either as the root filename or as the extension part. If you do, you'll have
-trouble. Unix programs don't avoid these names which can make things
-interesting. E.g., the perl distribution has a file called
-<literal>aux.sh</literal>. The perl configuration tries to make sure that
-<literal>aux.sh</literal> is there, but an operation on a file with the magic
-letters 'aux' in it will hang.
-</para>
-<para>At least that's what happens when using native Windows tools. Cygwin
-1.7.0 and later can deal with these filenames just fine. Again, see the
-User's Guide at
-<ulink url="http://cygwin.com/cygwin-ug-net/using-specialnames.html">http://cygwin.com/cygwin-ug-net/using-specialnames.html</ulink>
-for a detailed description of what's possible with filenames and what is not.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.using.hangs">
-<question><para>When it hangs, how do I get it back?</para></question>
-<answer>
-
-<para>If something goes wrong and the tools hang on you for some reason (easy
-to do if you try and read a file called aux.sh), first try hitting ^C to
-return to bash or the cmd prompt.
-</para>
-<para>If you start up another shell, and applications don't run, it's a good
-bet that the hung process is still running somewhere. Use the Task
-Manager, pview, or a similar utility to kill the process.
-</para>
-<para>And, if all else fails, there's always the reset button/power switch.
-In theory this should never be necessary, though.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.using.directory-structure">
-<question><para>Why the weird directory structure?</para></question>
-<answer>
-
-<para>Why do /lib and /usr/lib (and /bin, /usr/bin) point to the same thing?
-</para>
-<para>Why use mounts instead of symbolic links?
-</para>
-<para>Can I use a disk root (e.g., C:\) as Cygwin root? Why is this discouraged?
-</para>
-<para>After a new installation in the default location, your mount points will
-look something like this:
-</para>
-<screen>
- bash$ mount
- C:\cygwin\bin on /usr/bin type ntfs (binary,auto)
- C:\cygwin\lib on /usr/lib type ntfs (binary,auto)
- C:\cygwin on / type ntfs (binary,auto)
- C: on /cygdrive/c type ntfs (binary,posix=0,user,noumount,auto)
-</screen>
-
-<para>Note that /bin and /usr/bin point to the same location, as do /lib and
-/usr/lib. This is intentional, and you should not undo these mounts
-unless you <emphasis>really</emphasis> know what you are doing.
-</para>
-<para>Various applications and packages may expect to be installed in /lib or
-/usr/lib (similarly /bin or /usr/bin). Rather than distinguish between
-them and try to keep track of them (possibly requiring the occasional
-duplication or symbolic link), it was decided to maintain only one
-actual directory, with equivalent ways to access it.
-</para>
-<para>Symbolic links had been considered for this purpose, but were dismissed
-because they do not always work on Samba drives. Also, mounts are
-faster to process because no disk access is required to resolve them.
-</para>
-<para>Note that non-cygwin applications will not observe Cygwin mounts (or
-symlinks for that matter). For example, if you use WinZip to unpack the
-tar distribution of a Cygwin package, it may not get installed to the
-correct Cygwin path. <emphasis>So don't do this!</emphasis>
-</para>
-<para>It is strongly recommended not to make the Cygwin root directory the
-same as your drive's root directory, unless you know what you are doing
-and are prepared to deal with the consequences. It is generally easier
-to maintain the Cygwin hierarchy if it is isolated from, say, C:\. For
-one thing, you avoid possible collisions with other (non-cygwin)
-applications that may create (for example) \bin and \lib directories.
-(Maybe you have nothing like that installed now, but who knows about
-things you might add in the future?)
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.using.anti-virus">
-<question><para>How do anti-virus programs like Cygwin?</para></question>
-<answer>
-
-<para>Users have reported that NAI (formerly McAfee) VirusScan for NT (and
-others?) is incompatible with Cygwin. This is because it tries to scan
-the newly loaded shared memory in cygwin1.dll, which can cause fork() to
-fail, wreaking havoc on many of the tools. (It is not confirmed that
-this is still a problem, however.)
-</para>
-<para>There have been several reports of NAI VirusScan causing the system to
-hang when unpacking tar.gz archives. This is surely a bug in VirusScan,
-and should be reported to NAI. The only workaround is to disable
-VirusScan when accessing these files. This can be an issue during
-setup, and is discussed in that FAQ entry.
-</para>
-<para>Some users report a significant performance hit using Cygwin when their
-anti-virus software is enabled. Rather than disable the anti-virus
-software completely, it may be possible to specify directories whose
-contents are exempt from scanning. In a default installation, this
-would be <literal>C:\cygwin\bin</literal>. Obviously, this could be
-exploited by a hostile non-Cygwin program, so do this at your own risk.
-</para>
-<para>See also <ulink url="http://cygwin.com/faq/faq.html#faq.using.bloda" />
-for a list of applications that have been known, at one time or another, to
-interfere with the normal functioning of Cygwin.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.using.emacs">
-<question><para>Is there a Cygwin port of GNU Emacs?</para></question>
-<answer>
-
-<para>Yes. Install the emacs package. This provides everything you
-need in order to run GNU emacs in a terminal window. If you also want
-to be able to use the X11
-(<ulink url="http://x.cygwin.com/">http://x.cygwin.com/</ulink>)
-GUI, install the emacs-X11 package. In either case, you run emacs by
-typing 'emacs' or '/usr/bin/emacs'.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.using.xemacs">
-<question><para>Is there a Cygwin port of XEmacs?</para></question>
-<answer>
-
-<para>Yes. It can be used in three different modes:</para>
-<para><itemizedlist>
-<listitem><para>X11 (<ulink url="http://x.cygwin.com/">http://x.cygwin.com/</ulink>) GUI</para></listitem>
-</itemizedlist></para>
-<para>You have to <emphasis>set</emphasis> the DISPLAY environment variable
-before starting xemacs.</para>
-<screen>
- bash$ DISPLAY=127.0.0.1:0 xemacs &amp;
-</screen>
-<para><itemizedlist>
-<listitem><para>Windows native GUI</para></listitem>
-</itemizedlist></para>
-<para>You have to <emphasis>unset</emphasis> the DISPLAY environment variable
-before starting xemacs.</para>
-<screen>
- bash$ DISPLAY= xemacs &amp;
-</screen>
-<para><itemizedlist>
-<listitem><para>Console mode</para></listitem>
-</itemizedlist></para>
-<para>Start xemacs with -nw in a terminal (native or X11) window</para>
-<screen>
- bash$ xemacs -nw
-</screen>
-<para>The current stable Cygwin version of XEmacs is 21.4.x. But there is also a
-Cygwin test release version (21.5.x) available for download via setup.exe.
-</para>
-<para>To use all the standard packages with XEmacs you should download the following
-two packages:</para>
-<para><itemizedlist>
-<listitem><para>xemacs-sumo - XEmacs standard packages</para></listitem>
-<listitem><para>xemacs-mule-sumo - XEmacs MULE (MUlti Lingual Emacs) packages</para></listitem>
-</itemizedlist></para>
-<para>An alternative <emphasis>native</emphasis> distribution of XEmacs for
-Windows based systems can be downloaded from
-<ulink url="http://xemacs.org/Download/win32/index.html">http://xemacs.org/Download/win32/index.html</ulink>.
-It uses an <emphasis>InnoSetup Kit</emphasis> based installer.</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.using.ntemacs">
-<question><para>What about NT Emacs?</para></question>
-<answer>
-
-<para>If you want GNU Emacs with a native Microsoft GUI interface,
-then you can either use XEmacs (see above), or native
-NT Emacs: see section
-<ulink url="http://www.gnu.org/software/emacs/windows/Getting-Emacs.html#Getting-Emacs">Where can I get pre-compiled versions?</ulink> in NT Emacs FAQ.
-
-</para>
-<para>NT Emacs uses the Windows command shell by default. Since it is not a
-Cygwin application, it has no knowledge of Cygwin mounts. With those
-points in mind, you need to add the following code to your ~/.emacs
-(or ~/_emacs) file in order to use Cygwin bash. This is particularly useful
-for the JDEE package (<ulink url="http://jdee.sunsite.dk/">http://jdee.sunsite.dk/</ulink>). The following
-settings are for Emacs 21.1:
-</para>
-<screen>
-
- ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; Initial setup
- ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
- ;; This assumes that Cygwin is installed in C:\cygwin (the
- ;; default) and that C:\cygwin\bin is not already in your
- ;; Windows Path (it generally should not be).
-
- (setq exec-path (cons "C:/cygwin/bin" exec-path))
- (setenv "PATH" (concat "C:\\cygwin\\bin;" (getenv "PATH")))
-
- ;; LOGNAME and USER are expected in many Emacs packages
- ;; Check these environment variables.
-
- (if (and (null (getenv "USER"))
- ;; Windows includes variable USERNAME, which is copied to
- ;; LOGNAME and USER respectively.
- (getenv "USERNAME"))
- (setenv "USER" (getenv "USERNAME")))
-
- (if (and (getenv "LOGNAME")
- ;; Bash shell defines only LOGNAME
- (null (getenv "USER")))
- (setenv "USER" (getenv "LOGNAME")))
-
- (if (and (getenv "USER")
- (null (getenv "LOGNAME")))
- (setenv "LOGNAME" (getenv "USER")))
-
- ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; (A) M-x shell: This change M-x shell permanently
- ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
- ;; Would call Windows command interpreter. Change it.
-
- (setq shell-file-name "bash")
- (setenv "SHELL" shell-file-name)
- (setq explicit-shell-file-name shell-file-name)
-
- ;; Remove C-m (^M) characters that appear in output
-
- (add-hook 'comint-output-filter-functions
- 'comint-strip-ctrl-m)
-
- ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; (B) *OR* call following function with M-x my-bash
- ;; The M-x shell would continue to run standard Windows shell
- ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
- (defun my-bash (&amp;optional buffer)
- "Run Cygwin Bash shell in optional BUFFER; default *shell-bash*."
- (autoload 'comint-check-proc "comint")
- (interactive
- (let ((name "*shell-bash*"))
- (if current-prefix-arg
- (setq name (read-string
- (format "Cygwin shell buffer (default %s): " name)
- (not 'initial-input)
- (not 'history)
- name)))
- (list name)))
- (or buffer
- (setq buffer "*shell-bash*"))
- (if (comint-check-proc buffer)
- (pop-to-buffer buffer)
- (let* ((shell-file-name "bash")
- (explicit-shell-file-name shell-file-name)
- (explicit-sh-args '("--login" "-i"))
- (explicit-bash-args explicit-sh-args)
- (w32-quote-process-args ?\"));; Use Cygwin quoting rules.
- (shell buffer)
- ;; By default Emacs sends "\r\n", but bash wants plain "\n"
- (set-buffer-process-coding-system 'undecided-dos 'undecided-unix)
- ;; With TAB completion, add slash path separator, none to filenames
- (make-local-variable 'comint-completion-addsuffix)
- (setq comint-completion-addsuffix '("/" . ""))
- ;; This variable is local to buffer
- (setq comint-prompt-regexp "^[ \n\t]*[$] ?"))))
-
-</screen>
-
-<para>If you want NT Emacs to understand Cygwin paths, get
-cygwin-mount.el from <ulink url="http://www.emacswiki.org/elisp/index.html">http://www.emacswiki.org/elisp/index.html</ulink>.
-</para>
-<para>Note that all of this ``just works'' if you use the Cygwin port of
-Emacs or XEmacs from Cygwin Setup.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.using.symlinkstoppedworking">
-<question><para>Why don't some of my old symlinks work anymore?</para></question>
-<answer>
-
-<para>Beginning with Cygwin 1.7, Cygwin supports multiple character sets.
-Symlinks created with Cygwin 1.7 are using the UTF-16 character set, which is
-portable across all character sets. Old symlinks were written using your
-current Windows codepage, which is not portable across all character sets.
-If the target of the symlink doesn't resolve anymore, it's very likely that
-the symlink points to a target filename using native, non-ASCII characters,
-and you're now using another character set than way back when you created
-the symlink.</para>
-
-<para>Solution: Delete the symlink and create it again under you new Cygwin.
-The new symlink will be correctly point to the target no matter what character
-set you're using in future.</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.using.symlinks-samba">
-<question><para>Why don't symlinks work on Samba-mounted filesystems?</para></question>
-<answer>
-
-<para>Symlinks are marked with "system" file attribute. Samba does not
-enable this attribute by default. To enable it, consult your Samba
-documentation and then add these lines to your samba configuration
-file:
-</para>
-<screen>
- map system = yes
- create mask = 0775
-</screen>
-
-<para>Note that the 0775 can be anything as long as the 0010 bit is set.
-</para>
-<para>Alternatively, use Windows shortcuts as symlinks. See the CYGWIN
-environment variable option "winsymlinks"
-<ulink url="http://cygwin.com/cygwin-ug-net/using-cygwinenv.html">http://cygwin.com/cygwin-ug-net/using-cygwinenv.html</ulink>
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.using.sshd-in-domain">
-<question><para>How do I setup sshd in a domain?</para></question>
-<answer>
-
-<para>
-If you want to be able to logon with domain accounts to a domain member
-machine, you should make sure that the "cyg_server" account under which
-the sshd service is usually running, is a domain account. Otherwise you
-might end up with weird problems. For instance, sshd might fail to load
-the child process when trying to login with a domain account. A potential,
-confirmed error message is
-</para>
-
-<screen>
- *** fatal error - unable to load user32.dll, Win32 error 1114
-</screen>.
-
-<para>
-Here's how you set up a sshd with a domain service account.
-</para>
-
-<para>
-First of all, create a new domain account called "cyg_server". This
-account must be an administrative account, so make sure it's in the
-"Administrators" group. Now create a domain policy which is propagated
-to all machines which are supposed to run an sshd service. This domain
-policy should give the following user rights to the "cyg_server" account:
-</para>
-
-<screen>
- Act as part of the operating system (SeTcbPrivilege)
- Create a token object (SeCreateTokenPrivilege)
- Replace a process level token (SeAssignPrimaryTokenPrivilege)
-</screen>
-
-<para>
-Now to install sshd on the member machine, logon to that machine as
-an admin. Make sure the aforementioend global policy has been propagated
-to this machine. Examine the Local Security Policy settings and, if
-necessary, call gpupdate.
-</para>
-
-<para>
-If everything looks ok, run bash. Starting with Windows Vista, make
-sure you're running bash elevated.
-</para>
-
-<para>
-Then run ssh-host-config. Answer all questions so that "cyg_server" is
-used to run the service. When done, check ownership of
-<literal>/var/empty</literal> and all <literal>/etc/ssh*</literal>
-files. All of them must be owned by "cyg_server". If that's ok, you're
-usually all set and you can start the sshd service via
-</para>
-
-<screen>
- $ cygrunsrv -S sshd
-</screen>
-
-<para>or</para>
-
-<screen>
- $ net start sshd
-</screen>
-
-</answer></qandaentry>
-
-<qandaentry id="faq.using.tcl-tk">
-<question><para>Why do my Tk programs not work anymore?</para></question>
-<answer>
-
-<para>Previous versions of Tcl/Tk distributed with Cygwin (e.g. tclsh84.exe,
-wish84.exe) were not actually "Cygwin versions" of those tools.
-They were built as native libraries, which means they did not understand
-Cygwin mounts or symbolic links. This lead to all sorts of problems interacting
-with true Cygwin programs.</para>
-
-<para>As of February 2012, this was replaced with a version of Tcl/Tk which
-uses Cygwin's POSIX APIs and X11 for GUI functionality. If you get a message
-such as this when trying to start a Tk app:</para>
-
-<screen>
- Application initialization failed: couldn't connect to display ""
-</screen>
-
-<para>Then you need to start an X server, or if one is already running, set the
-<literal>DISPLAY</literal> variable to the proper value. The Cygwin distribution
-includes an X server; please see the <ulink url="http://x.cygwin.com/docs/ug/cygwin-x-ug.html">Cygwin/X User Guide</ulink>
-for installation and startup instructions.
-</para></answer></qandaentry>
-
-<qandaentry id="faq.using.ipv6">
-<question><para>Why do I get "Address family not supported" errors when playing with IPv6?</para></question>
-<answer>
-
-<para>IPv6 is only fully supported and available right from the start
-beginning with Windows Vista and Windows Server 2008.</para>
-
-<para>The previous generation of Windows,
-Windows XP and Windows Server 2003, only support IPv6 on an "experimental"
-basis. On these Windows versions, the IPv6 TCP/IP stack is not installed
-automatically, rather the system administrator has to install it manually.
-Unless this has already been done on your machine, your machine is not
-IPv6-capable and that's why you see the "Address family not supported"
-error message. Note, however, that the IPv6 stack on these systems
-don't fully support all features of IPv6.</para>
-
-<para>For more information about IPv6 on Windows and how to install the
-IPv6 stack, see the <ulink url="http://www.microsoft.com/technet/network/ipv6/ipv6faq.mspx">Microsoft TechNet IPv6 FAQ article</ulink>
-</para></answer></qandaentry>
-
-<qandaentry id="faq.using.bloda" xreflabel="BLODA">
-<question><para>What applications have been found to interfere with Cygwin?</para></question>
-<answer>
-
-<para>From time to time, people have reported strange failures and problems in
-Cygwin and Cygwin packages that seem to have no rational explanation. Among
-the most common symptoms they report are fork failures, memory leaks, and file
-access denied problems. These problems, when they have been traced, often appear
-to be caused by interference from other software installed on the same PC. Security
-software, in particular, such as anti-virus, anti-spyware, and firewall applications,
-often implements its functions by installing hooks into various parts of the system,
-including both the Explorer shell and the underlying kernel. Sometimes these hooks
-are not implemented in an entirely transparent fashion, and cause changes in the
-behaviour which affect the operation of other programs, such as Cygwin.
-</para>
-<para>Among the software that has been found to cause difficulties are:</para>
-<para><itemizedlist>
-<listitem><para>Sonic Solutions burning software containing DLA component (when DLA disabled)</para></listitem>
-<listitem><para>Norton/McAfee/Symantec antivirus or antispyware</para></listitem>
-<listitem><para>Logitech webcam software with "Logitech process monitor" service</para></listitem>
-<listitem><para>Kerio, Agnitum or ZoneAlarm Personal Firewall</para></listitem>
-<listitem><para>Iolo System Mechanic/AntiVirus/Firewall</para></listitem>
-<listitem><para>LanDesk</para></listitem>
-<listitem><para>Windows Defender </para></listitem>
-<listitem><para>Various programs by Wave Systems Corp using wxvault.dll, including Embassy Trust Suite and Embassy Security Center</para></listitem>
-<listitem><para>NOD32 Antivirus</para></listitem>
-<listitem><para>ByteMobile laptop optimization client</para></listitem>
-<listitem><para>Earthlink Total-Access</para></listitem>
-<listitem><para>Spybot S&amp;D TeaTimer</para></listitem>
-<listitem><para>AR Soft RAM Disk</para></listitem>
-<listitem><para>ATI Catalyst (some versions)</para></listitem>
-<listitem><para>NVIDIA GeForce (some versions)</para></listitem>
-<listitem><para>Windows LiveOneCare</para></listitem>
-<listitem><para>Webroot Spy Sweeper with Antivirus</para></listitem>
-<listitem><para>COMODO Firewall Pro</para></listitem>
-<listitem><para>PC Tools Spyware Doctor</para></listitem>
-<listitem><para>Avira AntiVir</para></listitem>
-<listitem><para>Panda Internet Security</para></listitem>
-<listitem><para>BitDefender</para></listitem>
-<listitem><para>Google Desktop</para></listitem>
-<listitem><para>Sophos Anti-Virus 7</para></listitem>
-<listitem><para>Bufferzone from Trustware</para></listitem>
-<listitem><para>Lenovo IPS Core Service (ipssvc)</para></listitem>
-<listitem><para>Lenovo RapidBoot Shield</para></listitem>
-<listitem><para>Credant Guardian Shield</para></listitem>
-<listitem><para>AVAST (disable FILESYSTEM and BEHAVIOR realtime shields)</para></listitem>
-<listitem><para>Citrix Metaframe Presentation Server/XenApp (see <ulink url="http://support.citrix.com/article/CTX107825">Citrix Support page</ulink>)</para></listitem>
-</itemizedlist></para>
-<para>Sometimes these problems can be worked around, by temporarily or partially
-disabling the offending software. For instance, it may be possible to disable
-on-access scanning in your antivirus, or configure it to ignore files under the
-Cygwin installation root. Often, unfortunately, this is not possible; even disabling
-the software may not work, since many applications that hook the operating system
-leave their hooks installed when disabled, and simply set them into what is intended
-to be a completely transparent pass-through mode. Sometimes this pass-through is not
-as transparent as all that, and the hooks still interfere with Cygwin; in these cases,
-it may be necessary to uninstall the software altogether to restore normal operation.
-</para>
-<para>Some of the symptoms you may experience are:</para>
-<para><itemizedlist>
-<listitem>
-<para>Random fork() failures.</para>
-<para>Caused by hook DLLs that load themselves into every process in the
-system. POSIX fork() semantics require that the memory map of the child process
-must be an exact duplicate of the parent process' layout. If one of these DLLs
-loads itself at a different base address in the child's memory space as compared
-to the address it was loaded at in the parent, it can end up taking the space that
-belonged to a different DLL in the parent. When Cygwin can't load the original
-DLL at that same address in the child, the fork() call has to fail.
-</para>
-</listitem>
-<listitem>
-<para>File access problems.</para>
-<para>Some programs (e.g., virus scanners with on-access scanning) scan or
-otherwise operate on every file accessed by all the other software running on
-your computer. In some cases they may retain an open handle on the file even
-after the software that is really using the file has closed it. This has been
-known to cause operations such as deletes, renames and moves to fail with
-access denied errors. In extreme cases it has been known for scanners to leak
-file handles, leading to kernel memory starvation.
-</para>
-</listitem>
-<listitem>
-<para>Networking issues</para>
-<para>Firewall software sometimes gets a bit funny about Cygwin. It's not
-currently understood why; Cygwin only uses the standard Winsock2 API, but
-perhaps in some less-commonly used fashion that doesn't get as well tested
-by the publishers of firewalls. Symptoms include mysterious failures to
-connect, or corruption of network data being sent or received.</para>
-</listitem>
-<listitem>
-<para>Memory and/or handle leaks</para>
-<para>Some applications that hook into the Windows operating system exhibit
-bugs when interacting with Cygwin that cause them to leak allocated memory
-or other system resources. Symptoms include complaints about out-of-memory
-errors and even virtual memory exhaustion dialog boxes from the O/S; it is
-often possible to see the excess memory allocation using a tool such as
-Task Manager or Sysinternals' Process Explorer, although interpreting the
-statistics they present is not always straightforward owing to complications
-such as virtual memory paging and file caching.</para>
-</listitem>
-</itemizedlist></para>
-</answer></qandaentry>
-
-<qandaentry id='faq.using.fixing-fork-failures'>
- <question><para>How do I fix <literal>fork()</literal> failures?</para></question>
- <answer>
- <para>Unfortunately, Windows does not use the fork/exec model of process creation
- found in UNIX-like OSes, so it is difficult for Cygwin to implement a reliable and
- correct <literal>fork()</literal>, which can lead to error messages such as:</para>
- <para><itemizedlist>
- <listitem>unable to remap <emphasis>somedll</emphasis> to same address as parent</listitem>
- <listitem>couldn't allocate heap</listitem>
- <listitem>died waiting for dll loading</listitem>
- <listitem>child -1 - died waiting for longjmp before initialization</listitem>
- <listitem>STATUS_ACCESS_VIOLATION</listitem>
- <listitem>resource temporarily unavailable</listitem>
- </itemizedlist></para>
- <para>Potential solutions for the above errors:</para>
- <para><itemizedlist>
- <listitem>Restart whatever process is trying (and failing) to use
- <literal>fork()</literal>. Sometimes Windows sets up a process
- environment that is even more hostile to fork() than usual.</listitem>
- <listitem>Ensure that you have eliminated (not just disabled) all
- software on the <xref linkend="faq.using.bloda"/>.
- </listitem>
- <listitem>Read the 'rebase' package README in
- <literal>/usr/share/doc/rebase/</literal>, and follow the
- instructions there to run 'rebaseall'.</listitem>
- </itemizedlist></para>
- <para>Please note that installing new packages or updating existing
- ones undoes the effects of rebaseall and often causes fork() failures
- to reappear. If so, just run rebaseall again.
- </para>
- <para>See the <ulink url="http://cygwin.com/cygwin-ug-net/highlights.html#ov-hi-process">
- process creation</ulink> section of the User's Guide for the technical reasons it is so
- difficult to make <literal>fork()</literal> work reliably.</para>
-</answer>
-</qandaentry>
-</qandadiv>
diff --git a/winsup/doc/faq-what.xml b/winsup/doc/faq-what.xml
deleted file mode 100644
index beae035c3..000000000
--- a/winsup/doc/faq-what.xml
+++ /dev/null
@@ -1,156 +0,0 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-
-<qandadiv id="faq.about">
-<title>About Cygwin</title>
-
-<!-- faq-what.xml -->
-<qandaentry id="faq.what.what">
-<question><para>What is it?</para></question>
-<answer>
-
-<para>The Cygwin tools are ports of the popular GNU development tools for
-Microsoft Windows. They run thanks to the Cygwin library which
-provides the POSIX system calls and environment these programs expect.
-</para>
-<para>With these tools installed, it is possible to write Windows console
-or GUI applications that make use of significant parts of the POSIX API.
-As a result, it is possible to easily port many Unix programs without the need
-for extensive changes to the source code. This includes configuring
-and building most of the available GNU software (including the packages
-included with the Cygwin development tools themselves) as well as lots
-of BSD tools and packages (including OpenSSH). Even if
-the development tools are of little to no use to you, you may have
-interest in the many standard POSIX utilities provided with the package.
-They can be used from one of the provided Unix shells like bash, tcsh or zsh,
-as well as from the standard Windows command shell if you have to for some
-sad reason.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.what.supported">
-<question><para>What versions of Windows are supported?</para></question>
-<answer>
-
-<para>Cygwin can be expected to run on all modern versions of Windows.
-This includes, as of the time of writing this, Windows XP SP3, Windows
-Server 2003, Windows Vista, Windows Server 2008, Windows 7, Windows
-Server 2012, Windows 8. The 32 bit version also runs in the WOW64 32 bit
-environment on released 64 bit versions of Windows
-(XP/2003/Vista/2008/7/2008 R2/8/2012).
-Since Cygwin is a community-supported free software project, patches to
-provide support for other versions would be thoughtfully considered.
-Paid support contracts or enhancements are available through Red Hat. For
-information about getting a Red Hat support contract, see
-<ulink url="http://cygwin.com/licensing.html" />.
-</para>
-<para>Keep in mind that Cygwin can only do as much as the underlying OS
-supports. Because of this, Cygwin will behave differently, and
-exhibit different limitations, on the various versions of Windows.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.what.where">
-<question><para>Where can I get it?</para></question>
-<answer>
-
-<para>The home page for the Cygwin project is <ulink url="http://cygwin.com/">http://cygwin.com/</ulink>.
-There you should find everything you need for Cygwin, including links
-for download and setup, a current list of mirror sites, a User's
-Guide, an API Reference, mailing lists and archives, and additional
-ported software.
-</para>
-<para>You can find documentation for the individual GNU tools typically
-as man pages or info pages as part of the Cygwin net distribution.
-Additionally you can get the latest docs at
-<ulink url="http://www.gnu.org/manual/" />. (You should read GNU manuals from a
-local mirror. Check <ulink url="http://www.gnu.org/server/list-mirrors.html" />
-for a list of them.)
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.what.free">
-<question><para>Is it free software?</para></question>
-<answer>
-
-<para>Yes. Parts are GNU software (gcc, gas, ld, etc...), parts are covered
-by the standard X11 license, some of it is public domain, some of
-it was written by Red Hat (or the former Cygnus Solutions) and placed under
-the GPL. None of it is shareware. You don't have to pay anyone to use it
-but you should be sure to read the copyright section of the FAQ for more
-information on how the GNU General Public License may affect your use of
-these tools.
-</para>
-<para>In particular, if you intend to port a proprietary (non-GPL'd)
-application using Cygwin, you will need the proprietary-use license
-for the Cygwin library. This is available for purchase from Red Hat;
-please visit <ulink url="http://cygwin.com/licensing.html" /> for more
-information. All other questions should be sent to the public project
-mailing list cygwin@cygwin.com.
-</para>
-<para>Note that when we say "free" we mean freedom, not price. The goal of
-such freedom is that the people who use a given piece of software
-should be able to change it to fit their needs, learn from it, share
-it with their friends, etc. The Cygwin license allows you those
-freedoms, so it is free software.
-</para>
-</answer></qandaentry>
-
-<qandaentry id="faq.what.version">
-<question><para>What version of Cygwin <emphasis>is</emphasis> this, anyway?</para></question>
-<answer>
-
-<para>To find the version of the Cygwin DLL installed, you can use
-<filename>uname</filename> as on Linux or <filename>cygcheck</filename>. Refer to each command's
-<literal>--help</literal> output and the <ulink url='http://cygwin.com/cygwin-ug-net/'>Cygwin User's Guide</ulink> for more information.
-</para>
-<para>If you are looking for the version number for the whole Cygwin
-release, there is none. Each package in the Cygwin release has its own
-version. The packages in Cygwin are continually improving, thanks to
-the efforts of net volunteers who maintain the Cygwin binary ports.
-Each package has its own version numbers and its own release process.
-</para>
-<para>So, how do you get the most up-to-date version of Cygwin? Easy. Just
-download the Cygwin Setup program by following the instructions
-<ulink url='http://cygwin.com/install.html'>here</ulink>. The setup program will handle the task
-of updating the packages on your system to the latest version. For
-more information about using Cygwin's <filename>setup.exe</filename>, see
-<ulink url='http://cygwin.com/cygwin-ug-net/setup-net.html'>Setting Up Cygwin</ulink>
-in the Cygwin User's Guide.
-</para></answer></qandaentry>
-
-<qandaentry id="faq.what.who">
-<question><para>Who's behind the project?</para></question>
-<answer>
-
-<para><emphasis role='bold'>(Please note that if you have cygwin-specific
-questions, all of these people will appreciate it if you use the cygwin
-mailing lists rather than sending personal email.)</emphasis>
-</para>
-<para>
-Corinna Vinschen (corinna) is the current project lead. Corinna is a
-senior Red Hat engineer. Corinna is responsible for such important
-subsystems as security and networking and has recently added support to
-Cygwin for wide characters, increased path length, IPv6, advisory
-file locking and more.
-</para>
-<para>
-Yaakov Selkowitz is the Cygwin/X coordinator. Jon Turney serves on the
-Cygwin/X team as a developer.
-</para>
-<para>
-The packages in the Net release are maintained by a large group of people;
-a complete list can be found <ulink url='http://cygwin.com/cygwin-pkg-maint'>here</ulink>.
-</para>
-<para>Please note that all of us working on Cygwin try to
-be as responsive as possible and deal with patches and questions as we
-get them, but realistically we don't have time to answer all of the
-email that is sent to the main mailing list. Making Net releases of the
-Win32 tools and helping people on the Net out is not our primary job
-function, so some email will have to go unanswered.
-</para>
-<para>Many thanks to everyone using the tools for their many contributions in
-the form of advice, bug reports, and code fixes. Keep them coming!
-</para></answer></qandaentry>
-</qandadiv>
diff --git a/winsup/doc/faq.xml b/winsup/doc/faq.xml
deleted file mode 100644
index 498558907..000000000
--- a/winsup/doc/faq.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-
-<article id="faq" lang="en" xmlns:xi="http://www.w3.org/2001/XInclude">
- <articleinfo>
- <title>Cygwin FAQ</title>
- </articleinfo>
-
- <qandaset>
- <?dbhtml toc="1"?>
-
- <xi:include href="faq-what.xml"/>
- <xi:include href="faq-setup.xml"/>
- <xi:include href="faq-resources.xml"/>
- <xi:include href="faq-using.xml"/>
- <xi:include href="faq-api.xml"/>
- <xi:include href="faq-programming.xml"/>
- <xi:include href="faq-copyright.xml"/>
- </qandaset>
-</article>
diff --git a/winsup/doc/fhandler-tut.txt b/winsup/doc/fhandler-tut.txt
deleted file mode 100644
index 00a3b4b94..000000000
--- a/winsup/doc/fhandler-tut.txt
+++ /dev/null
@@ -1,94 +0,0 @@
-fhandler tutorial
-
-This document will show how to add a new "fhandler" to cygwin, by
-showing an example of /dev/zero.
-
-Files to note:
-
-fhandler.h - must define a new derived class here and FH_*
-devices.in - to notice "/dev/zero" and mark it
-fhandler_zero.cc - new
-dtable.cc - to create the fhandler instance
-
-OK, first we have to define what this new fhandler will do. In our
-example case, we're going to implement the unix "/dev/zero" device,
-which has the following characteristics:
-
-* writes to /dev/zero are silently discarded
-* reads from /dev/zero return all zero bytes
-* mmap()ing /dev/zero maps a chunk of zero'd out memory.
-
-Since windows doesn't have a device that acts like this, we'll be
-simulating everything. Thus:
-
-* writes simply return a success status
-* reads memset() the buffer and return success
-* we take advantage of the fact that CreateFileMapping can take a
- handle of -1, which (1) maps swap memory, and (2) zeros it out for
- us (at least, on NT).
-
-OK, let's start with devices.h.
-
-We have to create a new entry in the enum fh_devices. The new
-devices must get a major and a minor ID. As a rule of thumb, just
-copy the ones that are used on a linux system.
-
-Now, let's continue with fhandler.h.
-
-First, update the fhandler_union near the end of the file with a
-line for the new device. Use existing members, in this case __dev_null
-as a template. This union is sorted alphabetically.
-
-Earlier in that file, we'll copy fhandler_dev_null and edit it to be
-fhandler_dev_zero. I chose that one because it's small, but we'll add
-more members as we go (since we're simulating the whole thing). In
-fact, let's copy the I/O methods from fhandler_windows since we'll
-need all those anyway, even though we'll go through the full list
-later.
-
-OK, next we need to edit devices.in. There is a section where each device
-is listed with its cygwin path, its structure and its windows path.
-"/dev/zero", FH_ZERO, "\\dev\\zero"
-This is needed to recognize when the user is trying to open "/dev/zero".
-You have to build devices.cc from devices.in now.
-There is a script 'gendevices' in the winsup/cygwin directory which may
-be called at some time in the future if you use 'make' to build the DLL.
-This should rebuild the devices.cc file. You have to have shilka
-available to do that; this is part of the cygwin cocom package.
-
-To go along with that change, we'll need to change dtable.cc. Look for
-FH_NULL and add a case for FH_ZERO as well.
-
-Now we get to fhandler_zero.cc itself. Create the empty file and copy
-the "usual" header/copyright/includes from some other fhandler_*.cc
-source file. Also, edit Makefile.in to build this new file. Add one
-new entry to DLL_OFILES, and a new line for the winsup.h dependencies.
-
-Since we changed fhandler.h, when you type "make" it will rebuild
-everything. Go ahead and do that when you get a chance to let it run,
-since we're not changing the headers any more. Note that you won't be
-able to link the new dll, as we haven't added all the methods for the
-new fhandler class yet, but at least you'll get a lot of compilation
-out of the way.
-
-Next we start adding in the fhandler methods themselves.
-
-Constructor: This takes a name, and all we do is pass that name back
-to the base class, along with the FH_ZERO value. We call set_cb
-because all fhandlers call this (it's for exec to copy the fd).
-
-open: we override the one that takes a name because there are no real
-windows devices like /dev/zero, but we ignore the name. We call
-set_flags to save the flags.
-
-write: writes are discarded; we return success.
-
-read: reads read NUL bytes, so fill the buffer with NULs and return
-success.
-
-lseek/close: just return success.
-
-dump: this is just for debugging, so we just print something.
-
-select_*: we don't support this yet, see the myriad examples in
-select.cc for examples. The base fhandler's methods will do for now.
diff --git a/winsup/doc/filemodes.xml b/winsup/doc/filemodes.xml
deleted file mode 100644
index e4cbd448f..000000000
--- a/winsup/doc/filemodes.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-
-<sect1 id="using-filemodes"><title>File permissions</title>
-
-<para>On FAT or FAT32 filesystems, files are always readable, and Cygwin
-uses the DOS read-only attribute to determine if they are writable. Files are
-considered to be executable if the filename ends with .bat, .com or .exe, or
-if its content starts with #!. Consequently <command>chmod</command> can
-only affect the "w" mode, it silently ignores actions involving the other
-modes. This means that <command>ls -l</command>
-needs to open and read files. It can thus be relatively slow.</para>
-
-<para>On NTFS, file permissions are evaluated using the Access Control
-Lists (ACLs) attached to a file. This can be switched off by using the
-"noacl" option to the respective mount point in the
-<filename>/etc/fstab</filename> or <filename>/etc/fstab.d/$USER</filename>
-file. For more information on file permissions, see
-
-<!-- TODO: Put the file permission stuff from ntsec here??? -->
-
-<xref linkend="ntsec"></xref>.
-</para>
-
-<!-- TODO -->
-
-<para>On NFS shares, file permissions are exactly the POSIX permissions
-transmitted from the server using the NFSv3 protocol, if the NFS client
-is the one from Microsoft's "Services For Unix", or the one built into
-Windows Vista or later.
-</para>
-
-<para>Only the user and group ownership is not necessarily correct.</para>
-
-</sect1>
-
diff --git a/winsup/doc/fo.xsl b/winsup/doc/fo.xsl
deleted file mode 100644
index 4bc255ce8..000000000
--- a/winsup/doc/fo.xsl
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<xsl:stylesheet
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns:fo="http://www.w3.org/1999/XSL/Format"
- version="1.0">
-
- <!-- Import the standard DocBook stylesheet that this one is based on.
- We use a web URL, but the local XML catalog should resolve this to
- the local copy of the stylesheet, if it exists. -->
- <xsl:import href="http://docbook.sourceforge.net/release/xsl/current/fo/docbook.xsl"/>
-
- <!-- Add page breaks before each sect1 -->
- <xsl:attribute-set name="section.level1.properties">
- <xsl:attribute name="break-before">page</xsl:attribute>
- </xsl:attribute-set>
-
- <!-- Rag-right lines -->
- <xsl:attribute-set name="root.properties">
- <xsl:attribute name="text-align">left</xsl:attribute>
- </xsl:attribute-set>
-
- <!-- Use a smaller font for code listings to increase the chances
- that they can fit on a single sheet, to reduce FOP complaints
- about being forced to split a listing across pages. -->
- <xsl:attribute-set name="monospace.verbatim.properties">
- <xsl:attribute name="font-size">85%</xsl:attribute>
- </xsl:attribute-set>
-
- <!-- Inform the DocBook stylesheets that it's safe to use FOP
- specific extensions. -->
- <xsl:param name="fop1.extensions" select="1"/>
-</xsl:stylesheet>
diff --git a/winsup/doc/gcc.xml b/winsup/doc/gcc.xml
deleted file mode 100644
index 7edf89f79..000000000
--- a/winsup/doc/gcc.xml
+++ /dev/null
@@ -1,142 +0,0 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-
-<sect1 id="gcc"><title>Using GCC with Cygwin</title>
-
-<sect2 id="gcc-default"><title>Standard Usage</title>
-
-<para>Use gcc to compile, just like under UNIX. Refer to the GCC User's Guide
-for information on standard usage and options. Here's a simple example:</para>
-
-<example id="gcc-hello-world">
-<title>Building Hello World with GCC</title>
-<screen>
-<prompt>bash$</prompt> <userinput>gcc hello.c -o hello.exe</userinput>
-<prompt>bash$</prompt> <userinput>hello.exe</userinput>
-Hello, World
-
-<prompt>bash$</prompt>
-</screen>
-</example>
-
-</sect2>
-
-<sect2 id="gcc-64"><title>Building applications for 64 bit Cygwin</title>
-
-<para>The 64 bit Cygwin toolchain uses the
-<ulink url="http://en.wikipedia.org/wiki/X86_calling_convention#Microsoft_x64_calling_convention">Microsoft x64 calling convention</ulink>
-by default, so you can create applications using the Win32 API just as with
-the 32 bit Cygwin toolchain.</para>
-
-<para>There's just one important difference. The 64 bit Cygwin compilers use
-a different data model than the Mingw and Microsoft compilers. For reference,
-see the Wikipedia entry on
-<ulink url="http://en.wikipedia.org/wiki/64-bit_computing#64-bit_data_models">64-bit computing</ulink>.</para>
-
-<para>While the Mingw and Microsoft compilers use the <literal>LLP64</literal>
-data model, Cygwin compilers use the <literal>LP64</literal> data model, just
-like Linux. This affects the size of the type <literal>long</literal>. In the
-<literal>LLP64</literal> model preferred by Microsoft,
-<function>sizeof(long)</function> is 4. This applies for the related Win32
-types like <literal>LONG</literal>, <literal>ULONG</literal>,
-<literal>DWORD</literal>, etc., too.</para>
-
-<para>In the <literal>LP64</literal> model used by Cygwin, <function>sizeof(long)</function> is 8,
-just like the size of pointers or the types <literal>size_t/ssize_t</literal>.
-This simplifies porting Linux applications to 64 bit Cygwin, but it requires
-due diligence when calling Windows functions taking LONG, ULONG, DWORD, or any
-other equivalent type. This is especially important in conjunction with
-pointers.</para>
-
-<para>Here's an example. The Win32 function <function>ReadFile</function>
-returns the number of read bytes via a pointer to a DWORD variable:</para>
-
-<screen>
-BOOL WINAPI ReadFile (HANDLE, PVOID, DWORD, PDWORD, LPOVERLAPPED);
-</screen>
-
-<para>Note that the forth parameter is a pointer to a DWORD, thus it's a
-pointer to a 4 byte type, on 32 as well as on 64 bit Windows. Now we write
-our own <function>my_read</function> function using ReadFile:</para>
-
-<example id="gcc-64-ex1">
-<title>64bit-programming, Using ReadFile, 1st try</title>
-<screen>
-ssize_t
-my_read (int fd, void *buffer, size_t bytes_to_read)
-{
- HANDLE fh = _get_osfhandle (fd);
- ssize_t bytes_read;
-
- if (ReadFile (fh, buffer, bytes_to_read, (PDWORD) &amp;bytes_read, NULL))
- return bytes_read;
- set_errno_from_get_last_error ();
- return -1;
-}
-</screen>
-</example>
-
-<para>While this example code works fine on 32 bit Windows, it has in fact
-a bad bug. The assumption that the size of ssize_t is the same as the size
-of DWORD is wrong for 64 bit. In fact, since
-<function>sizeof(ssize_t)</function> is 8, <function>ReadFile</function>
-will write the number of read bytes into the lower 4 bytes of the variable
-<literal>bytes_read</literal>, while the upper 4 bytes will contain an
-undefined value. <function>my_read</function> will very likely return the
-wrong number of read bytes to the caller.</para>
-
-<para>Here's the fixed version of <function>my_read</function>:</para>
-
-<example id="gcc-64-ex2">
-<title>64bit-programming, Using ReadFile, 2nd try</title>
-<screen>
-ssize_t
-my_read (int fd, void *buffer, size_t bytes_to_read)
-{
- HANDLE fh = _get_osfhandle (fd);
- DWORD bytes_read;
-
- if (ReadFile (fh, buffer, bytes_to_read, &amp;bytes_read, NULL))
- return (ssize_t) bytes_read;
- set_errno_from_get_last_error ();
- return -1;
-}
-</screen>
-</example>
-
-</sect2>
-
-<sect2 id="gcc-gui"><title>GUI Mode Applications</title>
-
-<para>Cygwin comes with an X server, so usually you should compile your
-GUI applications as X applications to allow better interoperability with
-other Cygwin GUI applications.</para>
-
-<para>Other than that, Cygwin allows you to build programs with full access
-to the standard Windows API, including the GUI functions as defined in
-any Microsoft or off-the-shelf publication.</para>
-
-<para>The build process is similar to any other build process. The only
-difference is that you use <command>gcc -mwindows</command> to link your
-program into a GUI application instead of a command-line application.
-Here's an example Makefile:</para>
-
-<screen>
-<![CDATA[
-myapp.exe : myapp.o myapp.res
- gcc -mwindows myapp.o myapp.res -o $@
-
-myapp.res : myapp.rc resource.h
- windres $< -O coff -o $@
-]]>
-</screen>
-
-<para>Note the use of <filename>windres</filename> to compile the
-Windows resources into a COFF-format <filename>.res</filename> file.
-That will include all the bitmaps, icons, and other resources you
-need, into one handy object file. For more information on
-<filename>windres</filename>, consult the Binutils manual. </para>
-
-</sect2>
-</sect1>
diff --git a/winsup/doc/gdb.xml b/winsup/doc/gdb.xml
deleted file mode 100644
index af0c0dd8a..000000000
--- a/winsup/doc/gdb.xml
+++ /dev/null
@@ -1,88 +0,0 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-
-<sect1 id="gdb"><title>Debugging Cygwin Programs</title>
-
-<para>When your program doesn't work right, it usually has a "bug" in
-it, meaning there's something wrong with the program itself that is
-causing unexpected results or crashes. Diagnosing these bugs and
-fixing them is made easy by special tools called
-<emphasis>debuggers</emphasis>. In the case of Cygwin, the debugger
-is GDB, which stands for "GNU DeBugger". This tool lets you run your
-program in a controlled environment where you can investigate the
-state of your program while it is running or after it crashes.
-Crashing programs sometimes create "core" files. In Cygwin these are
-regular text files that cannot be used directly by GDB.
-</para>
-
-<para>Before you can debug your program, you need to prepare your
-program for debugging. What you need to do is add
-<literal>-g</literal> to all the other flags you use when compiling
-your sources to objects.</para>
-
-<example id="gdb-g"><title>Compiling with -g</title>
-<screen>
-<prompt>bash$</prompt> gcc -g -O2 -c myapp.c
-<prompt>bash$</prompt> gcc -g myapp.c -o myapp
-</screen>
-</example>
-
-<para>What this does is add extra information to the objects (they get
-much bigger too) that tell the debugger about line numbers, variable
-names, and other useful things. These extra symbols and debugging
-information give your program enough information about the original
-sources so that the debugger can make debugging much easier for
-you.</para>
-
-<para>To invoke GDB, simply type <command>gdb myapp.exe</command> at the
-command prompt. It will display some text telling you about itself,
-then <literal>(gdb)</literal> will appear to prompt you to enter
-commands. Whenever you see this prompt, it means that gdb is waiting
-for you to type in a command, like <command>run</command> or
-<command>help</command>. Oh <literal>:-)</literal> type
-<command>help</command> to get help on the commands you can type in, or
-read the <citation>GDB User's Manual</citation> for a complete
-description of GDB and how to use it.</para>
-
-<para>If your program crashes and you're trying to figure out why it
-crashed, the best thing to do is type <command>run</command> and let
-your program run. After it crashes, you can type
-<command>where</command> to find out where it crashed, or
-<command>info locals</command> to see the values of all the local
-variables. There's also a <command>print</command> that lets you look
-at individual variables or what pointers point to.</para>
-
-<para>If your program is doing something unexpected, you can use the
-<command>break</command> command to tell gdb to stop your program when it
-gets to a specific function or line number:</para>
-
-<example id="gdb-break"><title>"break" in gdb</title>
-<screen>
-<prompt>(gdb)</prompt> break my_function
-<prompt>(gdb)</prompt> break 47
-</screen>
-</example>
-
-<para>Now, when you type <command>run</command> your program will stop
-at that "breakpoint" and you can use the other gdb commands to look at
-the state of your program at that point, modify variables, and
-<command>step</command> through your program's statements one at a
-time.</para>
-
-<para>Note that you may specify additional arguments to the
-<command>run</command> command to provide command-line arguments to
-your program. These two cases are the same as far as your program is
-concerned:</para>
-
-<example id="gdb-cliargs"><title>Debugging with command line arguments</title>
-<screen>
-<prompt>bash$</prompt> myprog -t foo --queue 47
-
-<prompt>bash$</prompt> gdb myprog
-<prompt>(gdb)</prompt> run -t foo --queue 47
-</screen>
-</example>
-
-
-</sect1>
diff --git a/winsup/doc/highlights.xml b/winsup/doc/highlights.xml
deleted file mode 100644
index 76eb3fb1c..000000000
--- a/winsup/doc/highlights.xml
+++ /dev/null
@@ -1,387 +0,0 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-
-<sect1 id="highlights"><title>Highlights of Cygwin Functionality</title>
-
-<sect2 id="ov-hi-intro"><title>Introduction</title> <para>When a binary linked
-against the library is executed, the Cygwin DLL is loaded into the
-application's text segment. Because we are trying to emulate a UNIX kernel
-which needs access to all processes running under it, the first Cygwin DLL to
-run creates shared memory areas and global synchronization objects that other
-processes using separate instances of the DLL can access. This is used to keep track of open file descriptors and to assist fork and exec, among other
-purposes. Every process also has a per_process structure that contains
-information such as process id, user id, signal masks, and other similar
-process-specific information.</para>
-
-<para>The DLL is implemented as a standard DLL in the Win32 subsystem. Under
-the hood it's using the Win32 API, as well as the native NT API, where
-appropriate.</para>
-
-<note><para>Some restrictions apply for calls to the Win32 API.
-For details, see <xref linkend="setup-env-win32"></xref>,
-as well as <xref linkend="pathnames-win32-api"></xref>.</para></note>
-
-<para>The native NT API is used mainly for speed, as well as to access
-NT capabilities which are useful to implement certain POSIX features, but
-are hidden to the Win32 API.
-</para>
-
-<para>Due to some restrictions in Windows, it's not always possible
-to strictly adhere to existing UNIX standards like POSIX.1. Fortunately
-these are mostly corner cases.</para>
-
-<para>Note that many of the things that Cygwin does to provide POSIX
-compatibility do not mesh well with the native Windows API. If you mix
-POSIX calls with Windows calls in your program it is possible that you
-will see uneven results. In particular, Cygwin signals will not work
-with Windows functions which block and Windows functions which accept
-filenames may be confused by Cygwin's support for long filenames.</para>
-
-</sect2>
-
-<sect2 id="ov-hi-perm"><title>Permissions and Security</title>
-<para>Windows NT includes a sophisticated security model based on Access
-Control Lists (ACLs). Cygwin maps Win32 file ownership and permissions to
-ACLs by default, on file systems supporting them (usually NTFS). Solaris
-style ACLs and accompanying function calls are also supported.
-The chmod call maps UNIX-style permissions back to the Win32 equivalents.
-Because many programs expect to be able to find the
-<filename>/etc/passwd</filename> and
-<filename>/etc/group</filename> files, we provide <ulink
-url="http://cygwin.com/cygwin-ug-net/using-utils.html">utilities</ulink>
-that can be used to construct them from the user and group information
-provided by the operating system.</para>
-
-<para>Users with Administrator rights are permitted to chown files.
-With version 1.1.3 Cygwin introduced a mechanism for setting real and
-effective UIDs. This is described in <xref linkend="ntsec"></xref>. As
-of version 1.5.13, the Cygwin developers are not aware of any feature in
-the Cygwin DLL that would allow users to gain privileges or to access
-objects to which they have no rights under Windows. However there is no
-guarantee that Cygwin is as secure as the Windows it runs on. Cygwin
-processes share some variables and are thus easier targets of denial of
-service type of attacks.
-</para>
-
-</sect2>
-
-<sect2 id="ov-hi-files"><title>File Access</title> <para>Cygwin supports
-both POSIX- and Win32-style paths, using either forward or back slashes as the
-directory delimiter. Paths coming into the DLL are translated from POSIX to
-native NT as needed. From the application perspective, the file system is
-a POSIX-compliant one. The implementation details are safely hidden in the
-Cygwin DLL. UNC pathnames (starting with two slashes) are supported for
-network paths.</para>
-
-<para>Since version 1.7.0, the layout of this POSIX view of the Windows file
-system space is stored in the <filename>/etc/fstab</filename> file. Actually,
-there is a system-wide <filename>/etc/fstab</filename> file as well as a
-user-specific fstab file <filename>/etc/fstab.d/${USER}</filename>.</para>
-
-<para>At startup the DLL has to find out where it can find the
-<filename>/etc/fstab</filename> file. The mechanism used for this is simple.
-First it retrieves it's own path, for instance
-<filename>C:\Cygwin\bin\cygwin1.dll</filename>. From there it deduces
-that the root path is <filename>C:\Cygwin</filename>. So it looks for the
-<filename>fstab</filename> file in <filename>C:\Cygwin\etc\fstab</filename>.
-The layout of this file is very similar to the layout of the
-<filename>fstab</filename> file on Linux. Just instead of block devices,
-the mount points point to Win32 paths. An installation with
-<command>setup.exe</command> installs a <filename>fstab</filename> file by
-default, which can easily be changed using the editor of your choice.</para>
-
-<para>The <filename>fstab</filename> file allows mounting arbitrary Win32
-paths into the POSIX file system space. A special case is the so-called
-cygdrive prefix.
-It's the path under which every available drive in the system is mounted
-under its drive letter. The default value is <filename>/cygdrive</filename>,
-so you can access the drives as <filename>/cygdrive/c</filename>,
-<filename>/cygdrive/d</filename>, etc... The cygdrive prefix can be set to
-some other value (<filename>/mnt</filename> for instance) in the
-<filename>fstab</filename> file(s).</para>
-
-<para>The library exports several Cygwin-specific functions that can be used
-by external programs to convert a path or path list from Win32 to POSIX or vice
-versa. Shell scripts and Makefiles cannot call these functions directly.
-Instead, they can do the same path translations by executing the
-<command>cygpath</command> utility program that we provide with Cygwin.</para>
-
-<para>Win32 applications handle filenames in a case preserving, but case
-insensitive manner. Cygwin supports case sensitivity on file systems
-supporting that. Since Windows XP, the OS only supports case
-sensitivity when a specific registry value is changed. Therefore, case
-sensitivity is not usually the default.</para>
-
-<para>Cygwin supports creating and reading symbolic links, even on Windows
-filesystems and OS versions which don't support them.
-See <xref linkend="pathnames-symlinks"></xref> for details.</para>
-
-<para>Hard links are fully supported on NTFS and NFS file systems. On FAT
-and other file systems which don't support hardlinks, the call returns with
-an error, just like on other POSIX systems.</para>
-
-<para>On file systems which don't support unique persistent file IDs (FAT,
-older Samba shares) the inode number for a file is calculated by hashing its
-full Win32 path. The inode number generated by the stat call always matches
-the one returned in <literal>d_ino</literal> of the <literal>dirent</literal>
-structure. It is worth noting that the number produced by this method is not
-guaranteed to be unique. However, we have not found this to be a significant
-problem because of the low probability of generating a duplicate inode number.
-</para>
-
-<para>Cygwin 1.7 and later supports Extended Attributes (EAs) via the
-linux-specific function calls <function>getxattr</function>,
-<function>setxattr</function>, <function>listxattr</function>, and
-<function>removexattr</function>. All EAs on Samba or NTFS are treated as
-user EAs, so, if the name of an EA is "foo" from the Windows perspective,
-it's transformed into "user.foo" within Cygwin. This allows Linux-compatible
-EA operations and keeps tools like <command>attr</command>, or
-<command>setfattr</command> happy.
-</para>
-
-<para><function>chroot</function> is supported since Cygwin 1.1.3.
-However, chroot is not a concept known by Windows. This implies some serious
-restrictions. First of all, the <function>chroot</function> call isn't a
-privileged call. Any user may call it. Second, the chroot environment
-isn't safe against native windows processes. Given that, chroot in Cygwin
-is only a hack which pretends security where there is none. For that reason
-the usage of chroot is discouraged.
-</para>
-</sect2>
-
-<sect2 id="ov-hi-textvsbinary"><title>Text Mode vs. Binary Mode</title>
-<para>It is often important that files created by native Windows
-applications be interoperable with Cygwin applications. For example, a
-file created by a native Windows text editor should be readable by a
-Cygwin application, and vice versa.</para>
-
-<para>Unfortunately, UNIX and Win32 have different end-of-line
-conventions in text files. A UNIX text file will have a single newline
-character (LF) whereas a Win32 text file will instead use a two
-character sequence (CR+LF). Consequently, the two character sequence
-must be translated on the fly by Cygwin into a single character newline
-when reading in text mode.</para>
-
-<para>This solution addresses the newline interoperability concern at
-the expense of violating the POSIX requirement that text and binary mode
-be identical. Consequently, processes that attempt to lseek through
-text files can no longer rely on the number of bytes read to be an
-accurate indicator of position within the file. For this reason, Cygwin
-allows you to choose the mode in which a file is read in several ways.</para>
-</sect2>
-
-<sect2 id="ov-hi-ansiclib"><title>ANSI C Library</title>
-<para>We chose to include Red Hat's own existing ANSI C library
-"newlib" as part of the library, rather than write all of the lib C
-and math calls from scratch. Newlib is a BSD-derived ANSI C library,
-previously only used by cross-compilers for embedded systems
-development. Other functions, which are not supported by newlib have
-been added to the Cygwin sources using BSD implementations as much as
-possible.</para>
-
-<para>The reuse of existing free implementations of such things
-as the glob, regexp, and getopt libraries saved us considerable
-effort. In addition, Cygwin uses Doug Lea's free malloc
-implementation that successfully balances speed and compactness. The
-library accesses the malloc calls via an exported function pointer.
-This makes it possible for a Cygwin process to provide its own
-malloc if it so desires.</para>
-</sect2>
-
-<sect2 id="ov-hi-process"><title>Process Creation</title>
-<para>The <function>fork</function> call in Cygwin is particularly interesting
-because it does not map well on top of the Win32 API. This makes it very
-difficult to implement correctly. Currently, the Cygwin fork is a
-non-copy-on-write implementation similar to what was present in early
-flavors of UNIX.</para>
-
-<para>The first thing that happens when a parent process
-forks a child process is that the parent initializes a space in the
-Cygwin process table for the child. It then creates a suspended
-child process using the Win32 CreateProcess call. Next, the parent
-process calls setjmp to save its own context and sets a pointer to
-this in a Cygwin shared memory area (shared among all Cygwin
-tasks). It then fills in the child's .data and .bss sections by
-copying from its own address space into the suspended child's address
-space. After the child's address space is initialized, the child is
-run while the parent waits on a mutex. The child discovers it has
-been forked and longjumps using the saved jump buffer. The child then
-sets the mutex the parent is waiting on and blocks on another mutex.
-This is the signal for the parent to copy its stack and heap into the
-child, after which it releases the mutex the child is waiting on and
-returns from the fork call. Finally, the child wakes from blocking on
-the last mutex, recreates any memory-mapped areas passed to it via the
-shared area, and returns from fork itself.</para>
-
-<para>While we have some
-ideas as to how to speed up our fork implementation by reducing the
-number of context switches between the parent and child process, fork
-will almost certainly always be inefficient under Win32. Fortunately,
-in most circumstances the spawn family of calls provided by Cygwin
-can be substituted for a fork/exec pair with only a little effort.
-These calls map cleanly on top of the Win32 API. As a result, they
-are much more efficient. Changing the compiler's driver program to
-call spawn instead of fork was a trivial change and increased
-compilation speeds by twenty to thirty percent in our
-tests.</para>
-
-<para>However, spawn and exec present their own set of
-difficulties. Because there is no way to do an actual exec under
-Win32, Cygwin has to invent its own Process IDs (PIDs). As a
-result, when a process performs multiple exec calls, there will be
-multiple Windows PIDs associated with a single Cygwin PID. In some
-cases, stubs of each of these Win32 processes may linger, waiting for
-their exec'd Cygwin process to exit.</para>
-</sect2>
-
-<sect3 id='ov-hi-process-problems'>
-<title>Problems with process creation</title>
-
-<para>The semantics of <literal>fork</literal> require that a forked
-child process have <emphasis>exactly</emphasis> the same address
-space layout as its parent. However, Windows provides no native
-support for cloning address space between processes and several
-features actively undermine a reliable <literal>fork</literal>
-implementation. Three issues are especially prevalent:</para>
-
-<itemizedlist mark="bullet">
-
-<listitem><para>DLL base address collisions. Unlike *nix shared
-libraries, which use "position-independent code", Windows shared
-libraries assume a fixed base address. Whenever the hard-wired
-address ranges of two DLLs collide (which occurs quite often), the
-Windows loader must "rebase" one of them to a different
-address. However, it may not resolve collisions consistently, and
-may rebase a different dll and/or move it to a different address
-every time. Cygwin can usually compensate for this effect when it
-involves libraries opened dynamically, but collisions among
-statically-linked dlls (dependencies known at compile time) are
-resolved before <literal>cygwin1.dll</literal> initializes and
-cannot be fixed afterward. This problem can only be solved by
-removing the base address conflicts which cause the problem,
-usually using the <literal>rebaseall</literal> tool.</para></listitem>
-
-<listitem><para>Address space layout randomization (ASLR). Starting with
-Vista, Windows implements ASLR, which means that thread stacks,
-heap, memory-mapped files, and statically-linked dlls are placed
-at different (random) locations in each process. This behaviour
-interferes with a proper <literal>fork</literal>, and if an
-unmovable object (process heap or system dll) ends up at the wrong
-location, Cygwin can do nothing to compensate (though it will
-retry a few times automatically).</para></listitem>
-
-<listitem><para>DLL injection by
-<ulink url="http://cygwin.com/faq/faq.html#faq.using.bloda">
-BLODA</ulink>. Badly-behaved applications which
-inject dlls into other processes often manage to clobber important
-sections of the child's address space, leading to base address
-collisions which rebasing cannot fix. The only way to resolve this
-problem is to remove (usually uninstall) the offending app. See
-<xref linkend="cygwinenv-implemented-options"></xref> for the
-<literal>detect_bloda</literal> option, which may be able to identify the
-BLODA.</para></listitem>
-
-</itemizedlist>
-
-<para>In summary, current Windows implementations make it
-impossible to implement a perfectly reliable fork, and occasional
-fork failures are inevitable.
-</para>
-
-</sect3>
-
-<sect2 id="ov-hi-signals"><title>Signals</title>
-<para>When
-a Cygwin process starts, the library starts a secondary thread for
-use in signal handling. This thread waits for Windows events used to
-pass signals to the process. When a process notices it has a signal,
-it scans its signal bitmask and handles the signal in the appropriate
-fashion.</para>
-
-<para>Several complications in the implementation arise from the
-fact that the signal handler operates in the same address space as the
-executing program. The immediate consequence is that Cygwin system
-functions are interruptible unless special care is taken to avoid
-this. We go to some lengths to prevent the sig_send function that
-sends signals from being interrupted. In the case of a process
-sending a signal to another process, we place a mutex around sig_send
-such that sig_send will not be interrupted until it has completely
-finished sending the signal.</para>
-
-<para>In the case of a process sending
-itself a signal, we use a separate semaphore/event pair instead of the
-mutex. sig_send starts by resetting the event and incrementing the
-semaphore that flags the signal handler to process the signal. After
-the signal is processed, the signal handler signals the event that it
-is done. This process keeps intraprocess signals synchronous, as
-required by POSIX.</para>
-
-<para>Most standard UNIX signals are provided. Job
-control works as expected in shells that support
-it.</para>
-</sect2>
-
-<sect2 id="ov-hi-sockets"><title>Sockets</title>
-<para>Socket-related calls in Cygwin basically call the functions by the
-same name in Winsock, Microsoft's implementation of Berkeley sockets, but
-with lots of tweaks. All sockets are non-blocking under the hood to allow
-to interrupt blocking calls by POSIX signals. Additional bookkeeping is
-necessary to implement correct socket sharing POSIX semantics and especially
-for the select call. Some socket-related functions are not implemented at
-all in Winsock, as, for example, socketpair. Starting with Windows Vista,
-Microsoft removed the legacy calls <function>rcmd(3)</function>,
-<function>rexec(3)</function> and <function>rresvport(3)</function>.
-Recent versions of Cygwin now implement all these calls internally.</para>
-
-<para>An especially troublesome feature of Winsock is that it must be
-initialized before the first socket function is called. As a result, Cygwin
-has to perform this initialization on the fly, as soon as the first
-socket-related function is called by the application. In order to support
-sockets across fork calls, child processes initialize Winsock if any
-inherited file descriptor is a socket.</para>
-
-<para>AF_UNIX (AF_LOCAL) sockets are not available in Winsock. They are
-implemented in Cygwin by using local AF_INET sockets instead. This is
-completely transparent to the application. Cygwin's implementation also
-supports the getpeereid BSD extension. However, Cygwin does not yet support
-descriptor passing.</para>
-
-<para>IPv6 is supported beginning with Cygwin release 1.7.0. This
-support is dependent, however, on the availability of the Windows IPv6
-stack. The IPv6 stack was "experimental", i.e. not feature complete in
-Windows 2003 and earlier. Full IPv6 support became available starting
-with Windows Vista and Windows Server 2008. Cygwin does not depend on
-the underlying OS for the (newly implemented) <function>getaddrinfo</function>
-and <function>getnameinfo</function> functions. Cygwin 1.7.0 adds
-replacement functions which implement the full functionality for IPv4.</para>
-
-</sect2>
-
-<sect2 id="ov-hi-select"><title>Select</title>
-<para>The UNIX <function>select</function> function is another
-call that does not map cleanly on top of the Win32 API. Much to our
-dismay, we discovered that the Win32 select in Winsock only worked on
-socket handles. Our implementation allows select to function normally
-when given different types of file descriptors (sockets, pipes,
-handles, and a custom /dev/windows Windows messages
-pseudo-device).</para>
-
-<para>Upon entry into the select function, the first
-operation is to sort the file descriptors into the different types.
-There are then two cases to consider. The simple case is when at
-least one file descriptor is a type that is always known to be ready
-(such as a disk file). In that case, select returns immediately as
-soon as it has polled each of the other types to see if they are
-ready. The more complex case involves waiting for socket or pipe file
-descriptors to be ready. This is accomplished by the main thread
-suspending itself, after starting one thread for each type of file
-descriptor present. Each thread polls the file descriptors of its
-respective type with the appropriate Win32 API call. As soon as a
-thread identifies a ready descriptor, that thread signals the main
-thread to wake up. This case is now the same as the first one since
-we know at least one descriptor is ready. So select returns, after
-polling all of the file descriptors one last time.</para>
-</sect2>
-</sect1>
-
diff --git a/winsup/doc/legal.xml b/winsup/doc/legal.xml
deleted file mode 100644
index 6ba4f51ee..000000000
--- a/winsup/doc/legal.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE legalnotice PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-
-<legalnotice id="legal">
-
-<para>Copyright &copy; 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Red Hat, Inc.</para>
-
-<!--
-
-<para>Cygwin&trade;, GNUPro&trade;, the GNUPro&trade; logo, and the Red Hat
-logo are trademarks of Red Hat, Inc. All other brand and product
-names are trademarks of their respective owners.</para>
-
--->
-
-<para>Permission is granted to make and distribute verbatim copies of
-this documentation provided the copyright notice and this permission
-notice are preserved on all copies.</para>
-
-<para>Permission is granted to copy and distribute modified versions
-of this documentation under the conditions for verbatim copying,
-provided that the entire resulting derived work is distributed under
-the terms of a permission notice identical to this one.</para>
-
-<para>Permission is granted to copy and distribute translations of
-this documentation into another language, under the above conditions
-for modified versions, except that this permission notice may be
-stated in a translation approved by the Free Software
-Foundation.</para>
-
-</legalnotice>
diff --git a/winsup/doc/logon-funcs.xml b/winsup/doc/logon-funcs.xml
deleted file mode 100644
index 9e32ad626..000000000
--- a/winsup/doc/logon-funcs.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-
-<sect1 id="func-cygwin-login">
-<title>Helper functions to change user context</title>
-
-<sect2 id="func-cygwin-logon_user">
-<title>cygwin_logon_user</title>
-
-<funcsynopsis><funcprototype>
-<funcdef>extern "C" HANDLE
-<function>cygwin_logon_user</function></funcdef>
-<paramdef>const struct passwd *<parameter>passwd_entry</parameter></paramdef>
-<paramdef>const char *<parameter>password</parameter></paramdef>
-</funcprototype></funcsynopsis>
-
-<para>Given a pointer to a passwd entry of a user and a cleartext password,
-returns a HANDLE to an impersonation token for this user which can be used
-in a subsequent call to <function>cygwin_set_impersonation_token</function>
-to impersonate that user. This function can only be called from a process
-which has the required NT user rights to perform a logon.</para>
-
-<para>See also the chapter
-<ulink url="../cygwin-ug-net/ntsec.html#ntsec-setuid-overview">Switching the user context</ulink>
-in the Cygwin User's guide.</para>
-
-<para>See also <link linkend="func-cygwin-set-impersonation-token">cygwin_set_impersonation_token</link></para>
-
-</sect2>
-
-<sect2 id="func-cygwin-set-impersonation-token">
-<title>cygwin_set_impersonation_token</title>
-
-<funcsynopsis><funcprototype>
-<funcdef>extern "C" void
-<function>cygwin_set_impersonation_token</function></funcdef>
-<paramdef>const HANDLE <parameter>token</parameter></paramdef>
-</funcprototype></funcsynopsis>
-
-<para>Use this function to enable the token given as parameter as
-impersonation token for the next call to <function>setuid</function> or
-<function>seteuid</function>. Use
-<function>cygwin_set_impersonation_token</function> together with
-<function>cygwin_logon_user</function> to impersonate users using
-password authentication.</para>
-
-<para>See also the chapter
-<ulink url="../cygwin-ug-net/ntsec.html#ntsec-setuid-overview">Switching the user context</ulink>
-in the Cygwin User's guide.</para>
-
-<para>See also <link linkend="func-cygwin-logon_user">cygwin_logon_user</link></para>
-
-</sect2>
-
-</sect1>
diff --git a/winsup/doc/misc-funcs.xml b/winsup/doc/misc-funcs.xml
deleted file mode 100644
index 06776d9e7..000000000
--- a/winsup/doc/misc-funcs.xml
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-
-<sect1 id="func-cygwin-misc">
-<title>Miscellaneous functions</title>
-
-<sect2 id="func-cygwin-attach-handle-to-fd">
-<title>cygwin_attach_handle_to_fd</title>
-
-<funcsynopsis><funcprototype>
-<funcdef>extern "C" int
-<function>cygwin_attach_handle_to_fd</function></funcdef>
-<paramdef>char *<parameter>name</parameter></paramdef>
-<paramdef>int <parameter>fd</parameter></paramdef>
-<paramdef>HANDLE <parameter>handle</parameter></paramdef>
-<paramdef>int <parameter>bin</parameter></paramdef>
-<paramdef>int <parameter>access</parameter></paramdef>
-</funcprototype></funcsynopsis>
-
-<para>This function can be used to turn a Win32 "handle" into a
-posix-style file handle. <parameter>fd</parameter> may be -1 to
-make cygwin allocate a handle; the actual handle is returned
-in all cases.</para>
-
-<para>Even after using function, Cygwin doesn't know anything about the
-underlying file or device. It just tries to supply the typical file
-functions on a "best-effort" basis. Use with care. Don't expect too
-much.</para>
-
-</sect2>
-
-<sect2 id="func-cygwin-internal">
-<title>cygwin_internal</title>
-
-<funcsynopsis><funcprototype>
-<funcdef>extern "C" DWORD
-<function>cygwin_internal</function></funcdef>
-<paramdef>cygwin_getinfo_types <parameter>t</parameter></paramdef>
-<paramdef><parameter>...</parameter></paramdef>
-</funcprototype></funcsynopsis>
-
-<para>This function gives you access to various internal data and functions.
-It takes two arguments. The first argument is a type from the 'cygwin_getinfo_types'
-enum. The second is an optional pointer.</para>
-<para>Stay away unless you know what you're doing.</para>
-
-</sect2>
-
-<sect2 id="func-cygwin-stackdump">
-<title>cygwin_stackdump</title>
-
-<funcsynopsis><funcprototype>
-<funcdef>extern "C" void
-<function>cygwin_stackdump</function></funcdef>
-<void />
-</funcprototype></funcsynopsis>
-
-<para> Outputs a stackdump to stderr from the called location.
-</para>
-
-</sect2>
-
-</sect1>
diff --git a/winsup/doc/new-features.xml b/winsup/doc/new-features.xml
deleted file mode 100644
index 2a20d9aeb..000000000
--- a/winsup/doc/new-features.xml
+++ /dev/null
@@ -1,1574 +0,0 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-
-<sect1 id="ov-new1.7"><title>What's new and what changed in Cygwin</title>
-
-<sect2 id="ov-new1.7.34"><title>What's new and what changed in 1.7.34</title>
-
-<itemizedlist mark="bullet">
-
-<listitem><para>
-Cygwin can now generate passwd/group entries directly from Windows user
-databases (local SAM or Active Directory), thus allowing to run Cygwin
-without having to create /etc/passwd and /etc/group files. Introduce
-/etc/nsswitch.conf file to configure passwd/group handling.
-</para>
-
-<para>
-For bordercase which require to use /etc/passwd and /etc/group files,
-change mkpasswd/mkgroup to generate passwd/group entries compatible with
-the entries read from SAM/AD.
-</para>
-
-<para>For a description of this exciting new feature see
-<xref linkend="ntsec"></xref>.
-</para></listitem>
-
-<listitem><para>
-Add -b/--remove-all option to setfacl to reduce the ACL to only the entries
-representing POSIX permission bits.
-</para></listitem>
-
-<listitem><para>
-Add -k/--remove-default option to setfacl to remove all default ACL entries
-from an ACL.
-</para></listitem>
-
-<listitem><para>
-Revamp Solaris ACL implementation to more closely work like POSIX ACLs
-are supposed to work. Finally implement a CLASS_OBJ emulation. Update
-getfacl(1)/setfacl(1) accordingly.
-</para></listitem>
-
-<listitem><para>
-The xdr functions are no longer exported for newly built executables.
-Use libtirpc-devel instead.
-</para></listitem>
-
-<listitem><para>
-32 bit only: Change default values for socket buffer size to raise
-performance on 10Gb networks.
-</para></listitem>
-
-<listitem><para>
-When spawning a process under another user account, merge the user's
-default Windows environment into the new process' environment.
-</para></listitem>
-
-<listitem><para>
-New APIs: qsort_r, __bsd_qsort_r.
-</para></listitem>
-
-<listitem><para>
-New APIs: __fbufsize, __flbf, __fpending, __freadable, __freading,
-__fsetlocking, __fwritable, __fwriting.
-</para></listitem>
-
-<listitem><para>
-New APIs: clearerr_unlocked, feof_unlocked, ferror_unlocked, fflush_unlocked,
-fgetc_unlocked, fgets_unlocked, fgetwc_unlocked, fgetws_unlocked,
-fileno_unlocked, fputc_unlocked, fputs_unlocked, fputwc_unlocked,
-fputws_unlocked, fread_unlocked, fwrite_unlocked, getwc_unlocked,
-getwchar_unlocked, putwc_unlocked, putwchar_unlocked.
-</para></listitem>
-
-</itemizedlist>
-
-</sect2>
-
-<sect2 id="ov-new1.7.33"><title>What's new and what changed in 1.7.33</title>
-
-<itemizedlist mark="bullet">
-
-<listitem><para>
-/proc/cygdrive is a new symlink pointing to the current cygdrive prefix.
-This can be utilized in scripts to access paths via cygdrive prefix,
-even if the cygdrive prefix has been changed by the user.
-</para></listitem>
-
-<listitem><para>
-/proc/partitions now prints the windows mount points the device is
-mounted on. This allows to recognize the underlying Windows devices of
-the Cygwin raw device names.
-</para></listitem>
-
-<listitem><para>
-New API: quotactl, designed after the Linux/BSD function, but severely
-restricted: Windows only supports user block quotas on NTFS, no group
-quotas, no inode quotas, no time constraints.
-</para></listitem>
-
-<listitem><para>
-New APIs: ffsl, ffsll (glibc extensions).
-</para></listitem>
-
-<listitem><para>
-New API: stime (SVr4).
-</para></listitem>
-
-<listitem><para>
-Provide Cygwin documentation (PDFs and HTML) for offline usage in
-<filename>/usr/share/doc/cygwin-${version}</filename>.
-</para></listitem>
-
-<listitem><para>
-New internal exception handling based on SEH on 64 bit Cygwin.
-</para></listitem>
-
-<listitem><para>
-When exec'ing applications, check if $PATH exists and is non-empty. If
-not, add PATH variable with Cygwin installation directory as content to
-Windows environment to allow loading of Cygwin system DLLs.
-</para></listitem>
-
-<listitem><para>
-Disable CYGWIN "dosfilewarning" option by default.
-</para></listitem>
-
-<listitem><para>
-Improve various header files for C++- and standards-compliance.
-</para></listitem>
-
-<listitem><para>
-Doug Lea malloc implementation update from 2.8.3 to the latest 2.8.6.
-</para></listitem>
-
-<listitem><para>
-atexit(3) is now exported as statically linked function from libcygwin.a.
-This allows reliable access to the DSO handle of the caller for newly
-built executables. The former atexit entry point into the DLL remains
-for backward compatibility only.
-</para></listitem>
-
-</itemizedlist>
-
-</sect2>
-
-<sect2 id="ov-new1.7.32"><title>What's new and what changed in 1.7.32</title>
-
-<itemizedlist mark="bullet">
-
-<listitem><para>
-Export __cxa_atexit and __cxa_finalize to allow C++ standards-compliant
-destructor handling in libstdc++ and g++ compiled code.
-
-Please note that, in order to benefit from this new feature, C++ code
-must be recompiled with the upcoming gcc 4.8.3-3 release which will
-enable the -fuse-cxa-atexit flag by default, and that C++ applications
-using this feature will not run on older Cygwin releases.
-</para></listitem>
-
-<listitem><para>
-Support more recent CPU flags in /proc/cpuinfo.
-</para></listitem>
-
-</itemizedlist>
-
-</sect2>
-
-<sect2 id="ov-new1.7.31"><title>What's new and what changed in 1.7.31</title>
-
-<itemizedlist mark="bullet">
-
-<listitem><para>
-Improve performance of send(2), sendto(2), sendmsg(2) when using small
-input buffers.
-</para></listitem>
-
-<listitem><para>
-The default pthread_mutex type is now PTHREAD_MUTEX_NORMAL, rather than
-PTHREAD_MUTEX_ERRORCHECK, just as on Linux.
-</para></listitem>
-
-<listitem><para>
-Align pthread_attr stack functions more closely to Linux.
-</para></listitem>
-
-<listitem><para>
-Mark pthread_attr_getstackaddr and pthread_attr_setstackaddr as deprecated,
-as on Linux.
-</para></listitem>
-
-</itemizedlist>
-
-</sect2>
-
-<sect2 id="ov-new1.7.29"><title>What's new and what changed in 1.7.29</title>
-
-<itemizedlist mark="bullet">
-
-<listitem><para>
-Allow quoting of arguments to the CYGWIN environment variable, i.e.,
-set CYGWIN=error_start="c:\bin\someprogram -T"
-</para></listitem>
-
-<listitem><para>
-Console screen clearing works more like xterm or mintty.
-</para></listitem>
-
-</itemizedlist>
-
-</sect2>
-
-<sect2 id="ov-new1.7.28"><title>What's new and what changed in 1.7.28</title>
-
-<itemizedlist mark="bullet">
-
-<listitem><para>
-popen now supports the Glibc 'e' flag to set the FD_CLOEXEC flag on the pipe
-in a thread-safe way.
-</para></listitem>
-
-<listitem><para>
-New netinet/ip6.h header.
-</para></listitem>
-
-<listitem><para>
-Switch to BSD FILE stream fopen/exit semantics, as in all BSD variants
-and Linux/GLibc: Don't fflush/lseek a FILE stream on fclose and exit,
-if it only has been read from.
-</para></listitem>
-
-</itemizedlist>
-
-</sect2>
-
-<sect2 id="ov-new1.7.27"><title>What's new and what changed in 1.7.27</title>
-
-<itemizedlist mark="bullet">
-
-<listitem><para>
-Don't create native symlinks with target paths having long path prefixes
-"\\?\" if the target path is shorter than MAX_PATH characters. This works
-around a Windows 8.1 bug: The ShellExecuteW fails if the lpFile parameter
-points to a native NTFS symlink with a target path prefixed with "\\?\".
-</para></listitem>
-
-</itemizedlist>
-
-</sect2>
-
-<sect2 id="ov-new1.7.26"><title>What's new and what changed in 1.7.26</title>
-
-<itemizedlist mark="bullet">
-
-<listitem><para>
-getaddrinfo now supports glibc-specific International Domain Name (IDN)
-extension flags: AI_IDN, AI_CANONIDN, AI_IDN_ALLOW_UNASSIGNED,
-AI_IDN_USE_STD3_ASCII_RULES.
-</para></listitem>
-
-<listitem><para>
-getnameinfo now supports glibc-specific International Domain Name (IDN)
-extension flags: NI_IDN, NI_IDN_ALLOW_UNASSIGNED, NI_IDN_USE_STD3_ASCII_RULES.
-</para></listitem>
-
-<listitem><para>
-Slightly improve randomness of /dev/random emulation.
-</para></listitem>
-
-<listitem><para>
-Allow to use advisory locking on any device. POSIX fcntl and lockf locking
-works with any device, BSD flock locking only with devices backed by an OS
-handle. Right now this excludes console windows on pre Windows 8, as well as
-almost all virtual files under /proc from BSD flock locking.
-</para></listitem>
-
-<listitem><para>
-The header /usr/include/exceptions.h, containing implementation details for
-32 bit Windows' exception handling only, has been removed.
-</para></listitem>
-
-<listitem><para>
-Preliminary, experimental support of the posix_spawn family of functions.
-New associated header /usr/include/spawn.h.
-</para></listitem>
-
-</itemizedlist>
-
-</sect2>
-
-<sect2 id="ov-new1.7.25"><title>What's new and what changed in 1.7.25</title>
-
-<itemizedlist mark="bullet">
-
-<listitem><para>
-Change magic number associated with process information block so that 32-bit
-Cygwin processes don't try to interpret 64-bit information and vice-versa.
-</para></listitem>
-
-<listitem><para>
-Redefine content of mtget tape info struct to allow fetching the number of
-partitions on a tape.
-</para></listitem>
-
-</itemizedlist>
-
-</sect2>
-
-<sect2 id="ov-new1.7.24"><title>What's new and what changed in 1.7.24</title>
-
-<itemizedlist mark="bullet">
-
-<listitem><para>
-Allow application override of posix_memalign.
-</para></listitem>
-
-</itemizedlist>
-
-</sect2>
-
-<sect2 id="ov-new1.7.23"><title>What's new and what changed in 1.7.23</title>
-
-<itemizedlist mark="bullet">
-
-<listitem><para>
-Added CYGWIN environment variable keyword "wincmdln" which causes Cygwin to
-send the full windows command line to any subprocesses.
-</para></listitem>
-
-</itemizedlist>
-
-</sect2>
-
-<sect2 id="ov-new1.7.22"><title>What's new and what changed in 1.7.22</title>
-
-<itemizedlist mark="bullet">
-
-<listitem><para>
-Support for /dev/mem, /dev/kmem and /dev/port removed, since OS support
-was limited to 32 bit Windows XP only.
-</para></listitem>
-
-<listitem><para>
-Added cygwin GetCommandLine wrappers which will allow Cygwin programs to
-(appear to) use the Windows command line functions.
-</para></listitem>
-
-<listitem><para>
-regcomp(3) now allows character values >= 0x80 if the current codeset is
-ASCII (default codeset in the "C"/"POSIX" locale). This allows patterns
-containing arbitrary byte values as GLibc's regcomp.
-</para></listitem>
-
-</itemizedlist>
-
-</sect2>
-
-<sect2 id="ov-new1.7.21"><title>What's new and what changed in 1.7.21</title>
-
-<itemizedlist mark="bullet">
-
-<listitem><para>
-New API: rawmemchr.
-</para></listitem>
-
-</itemizedlist>
-
-</sect2>
-
-<sect2 id="ov-new1.7.19"><title>What's new and what changed in 1.7.19</title>
-
-<itemizedlist mark="bullet">
-
-<listitem><para>
-Drop support for Windows 2000 and Windows XP pre-SP3.
-</para></listitem>
-
-<listitem><para>
-Add support for building a 64 bit version of Cygwin on x86_64 natively.
-</para></listitem>
-
-<listitem><para>
-Add support for creating native NTFS symlinks starting with Windows Vista
-by setting the CYGWIN=winsymlinks:native or CYGWIN=winsymlinks:nativestrict
-option.
-</para></listitem>
-
-<listitem><para>
-Add support for AFS filesystem.
-</para></listitem>
-
-<listitem><para>
-Preliminary support for mandatory locking via fcntl/flock/lockf, using Windows
-locking semantics. New F_LCK_MANDATORY fcntl command.
-</para></listitem>
-
-<listitem><para>
-New APIs: __b64_ntop, __b64_pton, arc4random, arc4random_addrandom,
-arc4random_buf, arc4random_stir, arc4random_uniform.
-</para></listitem>
-
-</itemizedlist>
-
-</sect2>
-
-<sect2 id="ov-new1.7.18"><title>What's new and what changed in 1.7.18</title>
-
-<itemizedlist mark="bullet">
-
-<listitem><para>Added Windows console cursor appearance support.</para>
-
- <itemizedlist mark="bullet">
-
- <listitem><para>
- Show/Hide Cursor mode (DECTCEM): "ESC[?25h" / "ESC[?25l"
- </para></listitem>
-
- <listitem><para>
- Set cursor style (DECSCUSR): "ESC[n q" (note the space before the q);
- where n is 0, 1, 2 for block cursor, 3, 4 for underline cursor (all
- disregarding blinking mode), or > 4 to set the cursor height to a
- percentage of the cell height.
- </para></listitem>
-
- </itemizedlist>
-
-</listitem>
-
-<listitem><para>
-For performance reasons, Cygwin does not try to create sparse files
-automatically anymore, unless you use the new "sparse" mount option.
-</para></listitem>
-
-<listitem><para>
-New API: cfsetspeed.
-</para></listitem>
-
-</itemizedlist>
-
-</sect2>
-
-<sect2 id="ov-new1.7.17"><title>What's new and what changed in 1.7.17</title>
-
-<itemizedlist mark="bullet">
-
-<listitem><para>
-Support the "e" flag to fopen(3). This is a Glibc extension which
-allows to fopen the file with the O_CLOEXEC flag set.
-</para></listitem>
-
-<listitem><para>
-Support the "x" flag to fopen(3). This is a Glibc/C11 extension which
-allows to open the file with the O_EXCL flag set.
-</para></listitem>
-
-</itemizedlist>
-
-</sect2>
-
-<sect2 id="ov-new1.7.16"><title>What's new and what changed in 1.7.16</title>
-
-<itemizedlist mark="bullet">
-
-<listitem><para>
-New API: getmntent_r, memrchr.
-</para></listitem>
-
-<listitem><para>
-Recognize ReFS filesystem.
-</para></listitem>
-
-</itemizedlist>
-
-</sect2>
-
-<sect2 id="ov-new1.7.15"><title>What's new and what changed in 1.7.15</title>
-
-<itemizedlist mark="bullet">
-
-<listitem><para>
-CYGWIN=pipe_byte option now forces the opening of pipes in byte mode rather than message mode.
-</para></listitem>
-
-</itemizedlist>
-
-</sect2>
-
-<sect2 id="ov-new1.7.14"><title>What's new and what changed in 1.7.14</title>
-
-<itemizedlist mark="bullet">
-
-<listitem><para>
-Add mouse reporting modes 1005, 1006 and 1015 to console window.
-</para></listitem>
-
-</itemizedlist>
-
-</sect2>
-
-<sect2 id="ov-new1.7.13"><title>What's new and what changed in 1.7.13</title>
-
-<itemizedlist mark="bullet">
-
-<listitem><para>
-mkpasswd and mkgroup now try to print an entry for the TrustedInstaller
-account existing since Windows Vista/Server 2008.
-</para></listitem>
-
-<listitem><para>
-Terminal typeahead when switching from canonical to non-canonical mode
-is now properly flushed.
-</para></listitem>
-
-</itemizedlist>
-
-</sect2>
-
-<sect2 id="ov-new1.7.12"><title>What's new and what changed in 1.7.12</title>
-
-<itemizedlist mark="bullet">
-
-<listitem><para>
-Cygwin now automatically populates the /dev directory with all existing
-POSIX devices.
-</para></listitem>
-
-<listitem><para>
-Add virtual /proc/PID/mountinfo file.
-</para></listitem>
-
-<listitem><para>
-flock now additionally supports the following scenario, which requires
- to propagate locks to the parent process:
- <screen>
- (
- flock -n 9 || exit 1
- # ... commands executed under lock ...
- } 9>/var/lock/mylockfile
- </screen>
- Only propagation to the direct parent process is supported so far,
- not to grand parents or sibling processes.
-</para></listitem>
-
-<listitem><para>
-Add a "detect_bloda" setting for the CYGWIN environment variable to help
-finding potential BLODAs.
-</para></listitem>
-
-</itemizedlist>
-
-</sect2>
-
-<sect2 id="ov-new1.7.11"><title>What's new and what changed in 1.7.11</title>
-
-<itemizedlist mark="bullet">
-
-<listitem><para>
-New <command>pldd</command> command for listing DLLs loaded by a process.
-</para></listitem>
-
-<listitem><para>
-New API: scandirat.
-</para></listitem>
-
-<listitem><para>
-Change the way remote shares mapped to drive letters are recognized when
-creating the cygdrive directory. If Windows claims the drive is
-unavailable, don't show it in the cygdrive directory listing.
-</para></listitem>
-
-<listitem><para>
-Raise default stacksize of pthreads from 512K to 1 Meg. It can still be
-changed using the pthread_attr_setstacksize call.
-</para></listitem>
-
-</itemizedlist>
-
-</sect2>
-
-<sect2 id="ov-new1.7.10"><title>What's new and what changed in 1.7.10</title>
-
-<itemizedlist mark="bullet">
-
-<listitem><para>
-Drop support for Windows NT4.
-</para></listitem>
-
-<listitem><para>
-The CYGWIN environment variable options "envcache", "strip_title", "title",
-"tty", and "upcaseenv" have been removed.
-</para></listitem>
-
-<listitem><para>
-If the executable (and the system) is large address aware, the application heap
-will be placed in the large memory area. The <command>peflags</command> tool
-from the <literal>rebase</literal> package can be used to set the large
-address awareness flag in the executable file header.
-</para></listitem>
-
-<listitem><para>
-The registry setting "heap_chunk_in_mb" has been removed, in favor of a new
-per-executable setting in the executable file header which can be set using the
-<command>peflags</command> tool. See <xref linkend="setup-maxmem"></xref>
-for more information.
-</para></listitem>
-
-<listitem><para>
-The CYGWIN=tty mode using pipes to communicate with the console in a pseudo
-tty-like mode has been removed. Either just use the normal Windows console
-as is, or use a terminal application like <command>mintty</command>.
-</para></listitem>
-
-<listitem><para>
-New <command>getconf</command> command for querying confstr(3), pathconf(3),
-sysconf(3), and limits.h configuration.
-</para></listitem>
-
-<listitem><para>
-New <command>tzset</command> utility to generate a POSIX-compatible TZ
-environment variable from the Windows timezone settings.
-</para></listitem>
-
-<listitem><para>
-The passwd command now allows an administrator to use the -R command for
-other user accounts: passwd -R username.
-</para></listitem>
-
-<listitem><para>
-Pthread spinlocks. New APIs: pthread_spin_destroy, pthread_spin_init,
-pthread_spin_lock, pthread_spin_trylock, pthread_spin_unlock.
-</para></listitem>
-
-<listitem><para>
-Pthread stack address management. New APIs: pthread_attr_getstack,
-pthread_attr_getstackaddr, pthread_attr_getguardsize, pthread_attr_setstack,
-pthread_attr_setstackaddr, pthread_attr_setguardsize, pthread_getattr_np.
-</para></listitem>
-
-<listitem><para>
-POSIX Clock Selection option. New APIs: clock_nanosleep,
-pthread_condattr_getclock, pthread_condattr_setclock.
-</para></listitem>
-
-<listitem><para>
-clock_gettime(3) and clock_getres(3) accept per-process and per-thread CPU-time
-clocks, including CLOCK_PROCESS_CPUTIME_ID and CLOCK_THREAD_CPUTIME_ID.
-New APIs: clock_getcpuclockid, pthread_getcpuclockid.
-</para></listitem>
-
-<listitem><para>
-GNU/glibc error.h error reporting functions. New APIs: error, error_at_line.
-New exports: error_message_count, error_one_per_line, error_print_progname.
-Also, perror and strerror_r no longer clobber strerror storage.
-</para></listitem>
-
-<listitem><para>
-C99 &lt;tgmath.h&gt; type-generic macros.
-</para></listitem>
-
-<listitem><para>
-/proc/loadavg now shows the number of currently running processes and the
-total number of processes.
-</para></listitem>
-
-<listitem><para>
-Added /proc/devices and /proc/misc, which lists supported device types and
-their device numbers.
-</para></listitem>
-
-<listitem><para>
-Added /proc/swaps, which shows the location and size of Windows paging file(s).
-</para></listitem>
-
-<listitem><para>
-Added /proc/sysvipc/msg, /proc/sysvipc/sem, and /proc/sysvipc/shm which
-provide information about System V IPC message queues, semaphores, and
-shared memory.
-</para></listitem>
-
-<listitem><para>
-/proc/version now shows the username of whomever compiled the Cygwin DLL
-as well as the version of GCC used when compiling.
-</para></listitem>
-
-<listitem><para>
-dlopen now supports the Glibc-specific RTLD_NODELETE and RTLD_NOOPEN flags.
-</para></listitem>
-
-<listitem><para>
-The printf(3) and wprintf(3) families of functions now handle the %m
-conversion flag.
-</para></listitem>
-
-<listitem><para>
-Other new API: clock_settime, __fpurge, getgrouplist, get_current_dir_name,
-getpt, ppoll, psiginfo, psignal, ptsname_r, sys_siglist, pthread_setschedprio,
-pthread_sigqueue, sysinfo.
-</para></listitem>
-
-</itemizedlist>
-
-</sect2>
-
-<sect2 id="ov-new1.7.9"><title>What's new and what changed in 1.7.9</title>
-
-<itemizedlist mark="bullet">
-
-<listitem><para>
-New API: strchrnul.
-</para></listitem>
-
-</itemizedlist>
-
-</sect2>
-
-<sect2 id="ov-new1.7.8"><title>What's new and what changed in 1.7.8</title>
-
-<itemizedlist mark="bullet">
-
-<listitem><para>
-Drop support for Windows NT4 prior to Service Pack 4.
-</para></listitem>
-
-<listitem><para>
-Reinstantiate Cygwin's ability to delete an empty directory which is the
-current working directory of the same or another process. Same for any
-other empty directory which has been opened by the same or another process.
-</para></listitem>
-
-<listitem><para>
-Cygwin now ships the C standard library fenv.h header file, and implements the
-related APIs (including GNU/glibc extensions): feclearexcept, fedisableexcept,
-feenableexcept, fegetenv, fegetexcept, fegetexceptflag, fegetprec, fegetround,
-feholdexcept, feraiseexcept, fesetenv, fesetexceptflag, fesetprec, fesetround,
-fetestexcept, feupdateenv, and predefines both default and no-mask FP
-environments. See the
-<ulink url="http://www.gnu.org/software/libc/manual/html_node/Arithmetic.html">
-GNU C Library manual</ulink> for full details of this functionality.
-</para></listitem>
-
-<listitem><para>
-Support for the C99 complex functions, except for the "long double"
-implementations. New APIs: cacos, cacosf, cacosh, cacoshf, carg, cargf, casin,
-casinf, casinh, casinhf, catan, catanf, catanh, catanhf, ccos, ccosf, ccosh,
-ccoshf, cexp, cexpf, cimag, cimagf, clog, clogf, conj, conjf, cpow, cpowf,
-cproj, cprojf, creal, crealf, csin, csinf, csinh, csinhf, csqrt, csqrtf, ctan,
-ctanf, ctanh, ctanhf.
-</para></listitem>
-
-<listitem><para>
-Fix the width of "CJK Ambiguous Width" characters to 1 for singlebyte charsets
-and 2 for East Asian multibyte charsets. (For UTF-8, it remains dependent on
-the specified language, and the "@cjknarrow" locale modifier can still be used
-to force width 1.)
-</para></listitem>
-
-<listitem><para>
-The strerror_r interface now has two flavors; if _GNU_SOURCE is
-defined, it retains the previous behavior of returning char *
-(but the result is now guaranteed to be NUL-terminated); otherwise
-it now obeys POSIX semantics of returning int.
-</para></listitem>
-
-<listitem><para>
-/proc/sys now allows unfiltered access to the native NT namespace. Access
-restrictions still apply. Direct device access via /proc/sys is not yet
-supported. File system access via block devices works. For instance
-(note the trailing slash!)
-<screen>
-bash$ cd /proc/sys/Device/HarddiskVolumeShadowCopy1/
-</screen>
-</para></listitem>
-
-<listitem><para>
-Other new APIs: llround, llroundf, madvise, pthread_yield.
-Export program_invocation_name, program_invocation_short_name.
-Support TIOCGPGRP, TIOCSPGRP ioctls.
-</para></listitem>
-
-</itemizedlist>
-
-</sect2>
-
-<sect2 id="ov-new1.7.7"><title>What's new and what changed in 1.7.7</title>
-
-<itemizedlist mark="bullet">
-
-<listitem><para>
-Partially revert the 1.7.6 change to set the Win32 current working directory
-(CWD) always to an invalid directory, since it breaks backward compatibility
-too much. The Cygwin CWD and the Win32 CWD are now kept in sync again, unless
-the Cygwin CWD is not usable as Win32 CWD. See the reworked
-<xref linkend="pathnames-win32-api"></xref> for details.
-</para></listitem>
-
-<listitem><para>
-Make sure to follow the Microsoft security advisory concerning DLL hijacking.
-See the <ulink url="http://www.microsoft.com/technet/security/advisory/2269637.mspx">Microsoft Security Advisory (2269637) "Insecure Library Loading Could Allow Remote Code Execution"</ulink> for details.
-</para></listitem>
-
-<listitem><para>
-Allow to link against -lbinmode instead of /lib/binmode.o. Same for
--ltextmode, -ltextreadmode and -lautomode.
-See <xref linkend="textbin-devel"></xref> for details.
-</para></listitem>
-
-</itemizedlist>
-
-</sect2>
-
-<sect2 id="ov-new1.7.6"><title>What's new and what changed in 1.7.6</title>
-
-<itemizedlist mark="bullet">
-
-<listitem><para>
-Add new mount options "dos" and "ihash" to allow overriding Cygwin default
-behaviour on broken filesystems not recognized by Cygwin.
-</para></listitem>
-
-<listitem><para>
-Add new mount option "bind" to allow remounting parts of the POSIX file
-hirarchy somewhere else.
-</para></listitem>
-
-<listitem><para>
-Ttys and ptys are handled as securable objects using file-like permissions
-and owner/group information. <command>chmod</command> and
-<command>chown</command> now work on ttys/ptys. A new mechanism is used
-to propagate pty handles safely to other processes, which does not require
-to use Cygserver.
-</para></listitem>
-
-<listitem><para>
-Pass on coresize settings made with setrlimit(2). This allows shells to
-disable creating stackdump files in child processes via
-<screen>ulimit -c 0</screen> in bash or <screen>limit coredumpsize 0</screen>
-in tcsh.
-</para></listitem>
-
-<listitem><para>
-Locale categories contain all localization strings additionally as wide-char
-strings. locale(1) prints these values just as on Linux. nl_langinfo(3)
-allows to fetch them.
-</para></listitem>
-
-<listitem><para>
-New interfaces mkostemp(3) and mkostemps(3) are added.
-</para></listitem>
-
-<listitem><para>
-New virtual file /proc/filesystems.
-</para></listitem>
-
-<listitem><para>
-clock_gettime(3) and clock_getres(3) accept CLOCK_MONOTONIC.
-</para></listitem>
-
-<listitem><para>
-DEPRECATED with 1.7.7: Cygwin handles the current working directory entirely
-on its own. The Win32 current working directory is set to an invalid path to
-be out of the way. [...]
-</para></listitem>
-
-</itemizedlist>
-
-</sect2>
-
-<sect2 id="ov-new1.7.5"><title>What's new and what changed in 1.7.5</title>
-
-<itemizedlist mark="bullet">
-
-<listitem><para>
-Support for DEC Backarrow Key Mode escape sequences (ESC [ ? 67 h, ESC [ ? 67 l)
-in Windows console.
-</para></listitem>
-
-</itemizedlist>
-
-</sect2>
-
-<sect2 id="ov-new1.7.3"><title>What's new and what changed in 1.7.3</title>
-
-<itemizedlist mark="bullet">
-
-<listitem><para>
-Support for GB2312/EUC-CN. These charsets are implemented as aliases to GBK.
-GB2312 is now the default charset name for the locales zh_CN and zh_SG, just
-as on Linux.
-</para></listitem>
-
-<listitem><para>
-Modification and access timestamps of devices reflect the current time.
-</para></listitem>
-
-</itemizedlist>
-
-</sect2>
-
-<sect2 id="ov-new1.7.2"><title>What's new and what changed in 1.7.2</title>
-
-<itemizedlist mark="bullet">
-
-<listitem><para>Localization support has been much improved.</para>
-
- <itemizedlist mark="bullet">
-
- <listitem><para>
- Cygwin now handles locales using the underlying Windows locale
- support. The locale must exist in Windows to be recognized.
- Locale aliases from the file /usr/share/locale/locale.alias are also
- allowed, as long as their replacement is supported by the underlying Windows.
- </para></listitem>
-
- <listitem><para>
- New tool "locale" to fetch locale information and default locales based on
- the Windows default settings as well as lists of all supported locales
- and character sets.
- </para></listitem>
-
- <listitem><para>
- Default charset for locales without explicit charset is now chosen
- from a list of Linux-compatible charsets.
- </para>
-
- <para>
- For instance: en_US -> ISO-8859-1, ja_JP -> EUC-JP, zh_TW -> Big5.
- </para></listitem>
-
- <listitem><para>
- Added support for the charsets GEORGIAN-PS, PT154, and TIS-620.
- </para></listitem>
-
- <listitem><para>
- Support for the various locale modifiers to switch charsets as on Linux.
- </para></listitem>
-
- <listitem><para>
- Default charset in the "C" or "POSIX" locale has been changed back
- from UTF-8 to ASCII, to avoid problems with applications
- expecting a singlebyte charset in the "C"/"POSIX" locale. Still use
- UTF-8 internally for filename conversion in this case.
- </para></listitem>
-
- <listitem><para>
- LC_COLLATE, LC_MONETARY, LC_NUMERIC, and LC_TIME localization is
- enabled via Windows locale support. LC_MESSAGES is enabled via a big
- table with localized strings.
- </para></listitem>
-
- <listitem><para>
- fnmatch(3), regcomp(3), regexec(3) calls are now multibyte-aware.
- </para></listitem>
-
- <listitem><para>
- printf(3), wprintf(3) families of functions now handle the grouping
- flag, the apostrophe <literal>'</literal>, per POSIX-1.2008. The
- integer portion of the result of a decimal conversion (%i, %d, %u, %f,
- %F, %g, %G) will be formatted with thousands' grouping characters.
- </para></listitem>
-
- <listitem><para>
- strftime(3), wcsftime(3), and strptime(3) now handle the E and O format
- modifiers to print/scan alternative date and time representations or to
- use alternative digits in locales which support this. Additionally these
- functions now also support the padding modifiers '0' and '+', as well as
- a field width per POSIX-1.2008.
- </para></listitem>
-
- <listitem><para>
- New strfmon(3) call.
- </para></listitem>
-
- </itemizedlist>
-
-</listitem>
-
-<listitem><para>
-Support open(2) flags O_CLOEXEC and O_TTY_INIT flags. Support fcntl
-flag F_DUPFD_CLOEXEC. Support socket flags SOCK_CLOEXEC and SOCK_NONBLOCK.
-Add new Linux-compatible API calls accept4(2), dup3(2), and pipe2(2).
-Support the signal SIGPWR.
-</para></listitem>
-
-<listitem><para>Enhanced Windows console support.</para>
-
- <itemizedlist mark="bullet">
-
- <listitem><para>
- The console's backspace keycode can be changed using 'stty erase'.
- </para></listitem>
-
- <listitem><para>
- Function keys send distinguished escape sequences compatible with rxvt.
- Keypad keys send distinguished escape sequences, xterm-style.
- </para></listitem>
-
- <listitem><para>
- Support of combining Alt and AltGr modifiers in console window
- (compatible with xterm and mintty), so that e.g. Alt-@ sends ESC @
- also on keyboards where @ is mapped to an AltGr combination.
- </para></listitem>
-
- <listitem><para>
- Report mouse wheel scroll events in mouse reporting mode 1000 (note:
- this doesn't seem to work on all systems, assumedly due to driver
- interworking issues).
- Add mouse reporting mode 1002 to report mouse drag movement.
- Add mouse reporting mode 1003 to report any mouse movement.
- Add focus event reporting (mode 1004), compatible with xterm and mintty.
- </para></listitem>
-
- <listitem><para>
- Add escape sequences for not bold (22), not invisible (28), not
- blinking (25) (compatible with xterm and mintty).
- </para></listitem>
-
- <listitem><para>
- Support VT100 line drawing graphics mode in console window (compatible
- with xterm and mintty).
- </para></listitem>
-
- </itemizedlist>
-
-</listitem>
-
-<listitem><para>
-Handle native DOS paths always as if mounted with "posix=0,noacl".
-</para></listitem>
-
-<listitem><para>
-Handle UNC paths starting with slashes identical to /cygdrive paths.
-In other words, use the /cygdrive mount flags for these paths as well.
-</para></listitem>
-
-<listitem><para>
-Recognize NWFS filesystem and workaround broken OS call.
-</para></listitem>
-
-<listitem><para>
-New support for eXtensible Data Record (XDR) encoding and decoding,
-as defined by RFCs 1014, 1832, and 4506. The XDR protocol and
-functions are useful for cross-platfrom data exchange, and are
-commonly used as the core data interchange format for Remote
-Procedure Call (RPC) and NFS.
-</para></listitem>
-
-</itemizedlist>
-
-</sect2>
-
-<sect2 id="ov-new1.7.1"><title>What's new and what changed from 1.5 to 1.7</title>
-
-<sect3 id="ov-new1.7-os"><title>OS related changes</title>
-
-<itemizedlist mark="bullet">
-
-<listitem><para>
-Windows 95, 98 and Me are not supported anymore. The new Cygwin 1.7 DLL
-will not run on any of these systems.
-</para></listitem>
-
-<listitem><para>
-Add support for Windows 7 and Windows Server 2008 R2.
-</para></listitem>
-
-</itemizedlist>
-
-</sect3>
-
-<sect3 id="ov-new1.7-file"><title>File Access related changes</title>
-
-<itemizedlist mark="bullet">
-
-<listitem><para>
-Mount points are no longer stored in the registry. Use /etc/fstab and
-/etc/fstab.d/$USER instead. Mount points created with mount(1) are only
-local to the current session and disappear when the last Cygwin process
-in the session exits.
-</para></listitem>
-
-<listitem><para>
-Cygwin creates the mount points for /, /usr/bin, and /usr/lib
-automatically from it's own position on the disk. They don't have to be
-specified in /etc/fstab.
-</para></listitem>
-
-<listitem><para>
-If a filename cannot be represented in the current character set, the
-character will be converted to a sequence Ctrl-X + UTF-8 representation
-of the character. This allows to access all files, even those not
-having a valid representation of their filename in the current character
-set. To always have a valid string, use the UTF-8 charset by
-setting the environment variable $LANG, $LC_ALL, or $LC_CTYPE to a valid
-POSIX value, such as "en_US.UTF-8".
-</para></listitem>
-
-<listitem><para>
-PATH_MAX is now 4096. Internally, path names can be as long as the
-underlying OS can handle (32K).
-</para></listitem>
-
-<listitem><para>
-struct dirent now supports d_type, filled out with DT_REG or DT_DIR.
-All other file types return as DT_UNKNOWN for performance reasons.
-</para></listitem>
-
-<listitem><para>
-The CYGWIN environment variable options "ntsec" and "smbntsec" have been
-replaced by the per-mount option "acl"/"noacl".
-</para></listitem>
-
-<listitem><para>
-The CYGWIN environment variable option "ntea" has been removed without
-substitute.
-</para></listitem>
-
-<listitem><para>
-The CYGWIN environment variable option "check_case" has been removed in
-favor of real case-sensitivity on file systems supporting it.
-</para></listitem>
-
-<listitem><para>
-Creating filenames with special DOS characters '"', '*', ':', '&lt;',
-'&gt;', '|' is supported.
-</para></listitem>
-
-<listitem><para>
-Creating files with special DOS device filename components ("aux",
-"nul", "prn") is supported.
-</para></listitem>
-
-<listitem><para>
-File names are case sensitive if the OS and the underlying file system
-supports it. Works on NTFS and NFS. Does not work on FAT and Samba
-shares. Requires to change a registry key (see the User's Guide). Can
-be switched off on a per-mount basis.
-</para></listitem>
-
-<listitem><para>
-Due to the above changes, managed mounts have been removed.
-</para></listitem>
-
-<listitem><para>
-Incoming DOS paths are always handled case-insensitive and get no POSIX
-permission, as if they are mounted with noacl,posix=0 mount flags.
-</para></listitem>
-
-<listitem><para>
-unlink(2) and rmdir(2) try very hard to remove files/directories even if
-they are currently accessed or locked. This is done by utilizing the
-hidden recycle bin directories and marking the files for deletion.
-</para></listitem>
-
-<listitem><para>
-rename(2) rewritten to be more POSIX conformant.
-</para></listitem>
-
-<listitem><para>
-access(2) now performs checks using the real user ID, as required by
-POSIX; the old behavior of querying based on effective user ID is
-available through the new faccessat(2) and euidaccess(2) APIs.
-</para></listitem>
-
-<listitem><para>
-Add st_birthtim member to struct stat.
-</para></listitem>
-
-<listitem><para>
-File locking is now advisory, not mandatory anymore. The fcntl(2) and
-the new lockf(2) APIs create and maintain locks with POSIX semantics,
-the flock(2) API creates and maintains locks with BSD semantics. POSIX
-and BSD locks are independent of each other.
-</para></listitem>
-
-<listitem><para>
-Implement atomic O_APPEND mode.
-</para></listitem>
-
-<listitem><para>
-New open(2) flags O_DIRECTORY, O_EXEC and O_SEARCH.
-</para></listitem>
-
-<listitem><para>
-Make the "plain file with SYSTEM attribute set" style symlink default
-again when creating symlinks. Only create Windows shortcut style
-symlinks if CYGWIN=winsymlinks is set in the environment.
-</para></listitem>
-
-<listitem><para>
-Symlinks now use UTF-16 encoding for the target filename for better
-internationalization support. Cygwin 1.7 can read all old style
-symlinks, but the new style is not compatible with older Cygwin
-releases.
-</para></listitem>
-
-<listitem><para>
-Handle NTFS native symlinks available since Vista/2008 as symlinks (but
-don't create Vista/2008 symlinks due to unfortunate OS restrictions).
-</para></listitem>
-
-<listitem><para>
-Recognize NFS shares and handle them using native mechanisms. Recognize
-and create real symlinks on NFS shares. Get correct stat(2) information
-and set real mode bits on open(2), mkdir(2) and chmod(2).
-</para></listitem>
-
-<listitem><para>
-Recognize MVFS and workaround problems manipulating metadata and handling
-DOS attributes.
-</para></listitem>
-
-<listitem><para>
-Recognize Netapp DataOnTap drives and fix inode number handling.
-</para></listitem>
-
-<listitem><para>
-Recognize Samba version beginning with Samba 3.0.28a using the new
-extended version information negotiated with the Samba developers.
-</para></listitem>
-
-<listitem><para>
-Stop faking hardlinks by copying the file on filesystems which don't
-support hardlinks natively (FAT, FAT32, etc.). Just return an error
-instead, just like Linux.
-</para></listitem>
-
-<listitem><para>
-List servers of all accessible domains and workgroups in // instead of
-just the servers in the own domain/workgroup.
-</para></listitem>
-
-<listitem><para>
-Support Linux-like extended attributes ([fl]getxattr, [fl]listxattr,
-[fl]setxattr, [fl]removexattr).
-</para></listitem>
-
-<listitem><para>
-New file conversion API for conversion from Win32 to POSIX path and vice
-versa (cygwin_conv_path, cygwin_create_path, cygwin_conv_path_list).
-</para></listitem>
-
-<listitem><para>
-New openat family of functions: openat, faccessat, fchmodat, fchownat,
-fstatat, futimesat, linkat, mkdirat, mkfifoat, mknodat, readlinkat,
-renameat, symlinkat, unlinkat.
-</para></listitem>
-
-<listitem><para>
-Other new APIs: posix_fadvise, posix_fallocate, funopen, fopencookie,
-open_memstream, open_wmemstream, fmemopen, fdopendir, fpurge, mkstemps,
-eaccess, euidaccess, canonicalize_file_name, fexecve, execvpe.
-</para></listitem>
-
-</itemizedlist>
-
-</sect3>
-
-<sect3 id="ov-new1.7-net"><title>Network related changes</title>
-
-<itemizedlist mark="bullet">
-
-<listitem><para>
-New implementation for blocking sockets and select on sockets which is
-supposed to allow POSIX-compatible sharing of sockets between threads
-and processes.
-</para></listitem>
-
-<listitem><para>
-send/sendto/sendmsg now send data in 64K chunks to circumvent an
-internal buffer problem in WinSock (KB 201213).
-</para></listitem>
-
-<listitem><para>
-New send/recv option MSG_DONTWAIT.
-</para></listitem>
-
-<listitem><para>
-IPv6 support. New APIs getaddrinfo, getnameinfo, freeaddrinfo,
-gai_strerror, in6addr_any, in6addr_loopback. On IPv6-less systems,
-replacement functions are available for IPv4. On systems with IPv6
-enabled, the underlying WinSock functions are used. While I tried hard
-to get the functionality as POSIXy as possible, keep in mind that a
-*fully* conformant implementation of getaddrinfo and other stuff is only
-available starting with Windows Vista/2008.
-</para></listitem>
-
-<listitem><para>
-Resolver functions (res_init, res_query, res_search, res_querydomain,
-res_mkquery, res_send, dn_comp, dn_expand) are now part of Cygwin.
-Applications don't have to link against minires anymore. Actually, this
-*is* the former libminires.a.
-</para></listitem>
-
-<listitem><para>
-rcmd is now implemented inside of Cygwin, instead of calling the WinSock
-function. This allows rsh(1) usage on Vista/2008 and later, which
-dropped this function from WinSock.
-</para></listitem>
-
-<listitem><para>
-Define multicast structures in netinet/in.h. Note that fully conformant
-multicast support is only available beginning with Vista/2008.
-</para></listitem>
-
-<listitem><para>
-Improve get_ifconf. Redefine struct ifreq and subsequent datastructures
-to be able to keep more information. Support SIOCGIFINDEX,
-SIOCGIFDSTADDR and the Cygwin specific SIOCGIFFRNDLYNAM. Support real
-interface flags on systems supporting them.
-</para></listitem>
-
-<listitem><para>
-Other new APIs: bindresvport, bindresvport_sa, gethostbyname2,
-iruserok_sa, rcmd_af, rresvport_af. getifaddrs, freeifaddrs,
-if_nametoindex, if_indextoname, if_nameindex, if_freenameindex.
-</para></listitem>
-
-<listitem><para>
-Add /proc/net/if_inet6.
-</para></listitem>
-
-</itemizedlist>
-
-</sect3>
-
-<sect3 id="ov-new1.7-device"><title>Device related changes</title>
-
-<itemizedlist mark="bullet">
-
-<listitem><para>
-Reworked pipe implementation which uses overlapped IO to create more
-reliable interruptible pipes and fifos.
-</para></listitem>
-
-<listitem><para>
-The CYGWIN environment variable option "binmode" has been removed.
-</para></listitem>
-
-<listitem><para>
-Improved fifo handling by using native Windows named pipes.
-</para></listitem>
-
-<listitem><para>
-Detect when a stdin/stdout which looks like a pipe is really a tty.
-Among other things, this allows a debugged application to recognize that
-it is using the same tty as the debugger.
-</para></listitem>
-
-<listitem><para>
-Support UTF-8 in console window.
-</para></listitem>
-
-<listitem><para>
-In the console window the backspace key now emits DEL (0x7f) instead of
-BS (0x08), Alt-Backspace emits ESC-DEL (0x1b,0x7f) instead of DEL
-(0x7f), same as the Linux console and xterm. Control-Space now emits an
-ASCII NUL (0x0) character.
-</para></listitem>
-
-<listitem><para>
-Support up to 64 serial interfaces using /dev/ttyS0 - /dev/ttyS63.
-</para></listitem>
-
-<listitem><para>
-Support up to 128 raw disk drives /dev/sda - /dev/sddx.
-</para></listitem>
-
-<listitem><para>
-New API: cfmakeraw, get_avphys_pages, get_nprocs, get_nprocs_conf,
-get_phys_pages, posix_openpt.
-</para></listitem>
-
-</itemizedlist>
-
-</sect3>
-
-<sect3 id="ov-new1.7-posix"><title>Other POSIX related changes</title>
-
-<itemizedlist mark="bullet">
-
-<listitem><para>
-A lot of character sets are supported now via a call to setlocale().
-The setting of the environment variables $LANG, $LC_ALL or $LC_CTYPE
-will be used. For instance, setting $LANG to "de_DE.ISO-8859-15" before
-starting a Cygwin session will use the ISO-8859-15 character set in the
-entire session. The default locale in the absence of one of the
-aforementioned environment variables is "C.UTF-8".
-</para>
-
-<para>
-The full list of supported character sets: "ASCII", "ISO-8859-x" with x
-in 1-16, except 12, "UTF-8", Windows codepages "CPxxx", with xxx in
-(437, 720, 737, 775, 850, 852, 855, 857, 858, 862, 866, 874, 1125, 1250,
-1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258), "KOI8-R", "KOI8-U",
-"SJIS", "GBK", "eucJP", "eucKR", and "Big5".
-</para>
-
-</listitem>
-
-<listitem><para>
-Allow multiple concurrent read locks per thread for pthread_rwlock_t.
-</para></listitem>
-
-<listitem><para>
-Implement pthread_kill(thread, 0) as per POSIX.
-</para></listitem>
-
-<listitem><para>
-New API for POSIX IPC: Named semaphores: sem_open, sem_close,
-sem_unlink. Message queues: mq_open, mq_getattr, mq_setattr, mq_notify,
-mq_send, mq_timedsend, mq_receive, mq_timedreceive, mq_close, mq_unlink.
-Shared memory: shm_open, shm_unlink.
-</para></listitem>
-
-<listitem><para>
-Only declare expected functions in &lt;strings.h&gt;, don't include
-&lt;string.h&gt; from here.
-</para></listitem>
-
-<listitem><para>
-Support for WCONTINUED, WIFCONTINUED() added to waitpid and wait4.
-</para></listitem>
-
-<listitem><para>
-New APIs: _Exit, confstr, insque, remque, sys_sigabbrev, posix_madvise,
-posix_memalign, reallocf, exp10, exp10f, pow10, pow10f, lrint, lrintf,
-rint, rintf, llrint, llrintf, llrintl, lrintl, rintl, mbsnrtowcs,
-strcasestr, stpcpy, stpncpy, wcpcpy, wcpncpy, wcsnlen, wcsnrtombs,
-wcsftime, wcstod, wcstof, wcstoimax, wcstok, wcstol, wcstoll, wcstoul,
-wcstoull, wcstoumax, wcsxfrm, wcscasecmp, wcsncasecmp, fgetwc, fgetws,
-fputwc, fputws, fwide, getwc, getwchar, putwc, putwchar, ungetwc,
-asnprintf, dprintf, vasnprintf, vdprintf, wprintf, fwprintf, swprintf,
-vwprintf, vfwprintf, vswprintf, wscanf, fwscanf, swscanf, vwscanf,
-vfwscanf, vswscanf.
-</para></listitem>
-
-</itemizedlist>
-
-</sect3>
-
-<sect3 id="ov-new1.7-sec"><title>Security related changes</title>
-
-<itemizedlist mark="bullet">
-
-<listitem><para>
-Getting a domain user's groups is hopefully more bulletproof now.
-</para></listitem>
-
-<listitem><para>
-Cygwin now comes with a real LSA authentication package. This must be
-manually installed by a privileged user using the /bin/cyglsa-config
-script. The advantages and disadvantages are noted in
-http://cygwin.com/ml/cygwin-developers/2006-11/msg00000.html
-</para></listitem>
-
-<listitem><para>
-Cygwin now allows storage and use of user passwords in a hidden area of
-the registry. This is tried first when Cygwin is called by privileged
-processes to switch the user context. This allows, for instance, ssh
-public key sessions with full network credentials to access shares on
-other machines.
-</para></listitem>
-
-<listitem><para>
-New options have been added to the mkpasswd and mkgroup tools to ease
-use in multi-machine and multi-domain environments. The existing
-options have a slightly changed behaviour.
-</para></listitem>
-
-</itemizedlist>
-
-</sect3>
-
-<sect3 id="ov-new1.7-misc"><title>Miscellaneous</title>
-
-<itemizedlist mark="bullet">
-
-<listitem><para>
-New ldd utility, similar to Linux.
-</para></listitem>
-
-<listitem><para>
-New link libraries libdl.a, libresolv.a, librt.a.
-</para></listitem>
-
-<listitem><para>
-Fallout from the long path names: If the current working directory is
-longer than 260 bytes, or if the current working directory is a virtual
-path (like /proc, /cygdrive, //server), don't call native Win32 programs
-since they don't understand these paths.
-</para></listitem>
-
-<listitem><para>
-On the first usage of a DOS path (C:\foo, \\foo\bar), the Cygwin DLL
-emits a scary warning that DOS paths shouldn't be used. This warning
-may be disabled via the new CYGWIN=nodosfilewarning setting.
-</para></listitem>
-
-<listitem><para>
-The CYGWIN environment variable option "server" has been removed.
-Cygwin automatically uses cygserver if it's available.
-</para></listitem>
-
-<listitem><para>
-Allow environment of arbitrary size instead of a maximum of 32K.
-</para></listitem>
-
-<listitem><para>
-Don't force uppercase environment when started from a non-Cygwin
-process. Except for certain Windows and POSIX variables which are
-always uppercased, preserve environment case. Switch back to old
-behaviour with the new CYGWIN=upcaseenv setting.
-</para></listitem>
-
-<listitem><para>
-Detect and report a missing DLL on process startup.
-</para></listitem>
-
-<listitem><para>
-Add /proc/registry32 and /proc/registry64 paths to access 32 bit and 64
-bit registry on 64 bit systems.
-</para></listitem>
-
-<listitem><para>
-Add the ability to distinguish registry keys and registry values with
-the same name in the same registry subtree. The key is called "foo" and
-the value will be called "foo%val" in this case.
-</para></listitem>
-
-<listitem><para>
-Align /proc/cpuinfo more closly to Linux content.
-</para></listitem>
-
-<listitem><para>
-Add /proc/$PID/mounts entries and a symlink /proc/mounts pointing to
-/proc/self/mounts as on Linux.
-</para></listitem>
-
-<listitem><para>
-Optimized strstr and memmem implementation.
-</para></listitem>
-
-<listitem><para>
-Remove backwards compatibility with old signal masks. (Some *very* old
-programs which use signal masks may no longer work correctly).
-</para></listitem>
-
-<listitem><para>
-Cygwin now exports wrapper functions for libstdc++ operators new and
-delete, to support the toolchain in implementing full C++ standards
-conformance when working with shared libraries.
-</para></listitem>
-
-<listitem><para>
-Different Cygwin installations in different paths can be run in parallel
-without knowing of each other. The path of the Cygwin DLL used in a
-process is a key used when creating IPC objects. So different Cygwin
-DLLs are running in different namespaces.
-</para></listitem>
-
-<listitem><para>
-Each Cygwin DLL stores its path and installation key in the registry.
-This allows troubleshooting of problems which could be a result of
-having multiple concurrent Cygwin installations.
-</para></listitem>
-
-</itemizedlist>
-
-</sect3>
-
-</sect2>
-
-</sect1>
diff --git a/winsup/doc/ntsec.xml b/winsup/doc/ntsec.xml
deleted file mode 100644
index 389a7875c..000000000
--- a/winsup/doc/ntsec.xml
+++ /dev/null
@@ -1,2605 +0,0 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-
-<sect1 id="ntsec"><title>POSIX accounts, permission, and security</title>
-
-<para>This section discusses how the Windows security model is
-utilized in Cygwin to implement POSIX account information, POSIX-like
-permissions, and how the Windows authentication model is used to allow
-cygwin applications to switch users in a POSIX-like fashion.</para>
-
-<para>The setting of POSIX-like file and directory permissions is
-controlled by the <link linkend="mount-table">mount</link> option
-<literal>(no)acl</literal> which is set to <literal>acl</literal> by
-default.</para>
-
-<para>We start with a short overview. Note that this overview must
-be necessarily short. If you want to learn more about the Windows security
-model, see the <ulink url="http://msdn.microsoft.com/en-us/library/aa374860(VS.85).aspx">Access Control</ulink> article in MSDN documentation.</para>
-
-<para>POSIX concepts and in particular the POSIX security model are not
-discussed here, but assumed to be understood by the reader. If you
-don't know the POSIX security model, search the web for beginner
-documentation.</para>
-
-<sect2 id="ntsec-common"><title>Brief overview of Windows security</title>
-
-<para>In the Windows security model, almost any "object" is securable.
-"Objects" are files, processes, threads, semaphores, etc.</para>
-
-<para>Every object has a data structure attached, called a "security
-descriptor" (SD). The SD contains all information necessary to control
-who can access an object, and to determine what they are allowed to do
-to or with it. The SD of an object consists of five parts:</para>
-
-<itemizedlist spacing="compact">
-<listitem><para>Flags which control several aspects of this SD. This is
-not discussed here.</para></listitem>
-<listitem><para>The SID of the object owner.</para></listitem>
-<listitem><para>The SID of the object owner group.</para></listitem>
-<listitem><para>A list of "Access Control Entries" (ACE), called the
-"Discretionary Access Control List" (DACL).</para></listitem>
-<listitem><para>Another list of ACEs, called the "Security Access Control List"
-(SACL), which doesn't matter for our purpose. We ignore it here.</para></listitem>
-</itemizedlist>
-
-<para>Every ACE contains a so-called "Security IDentifier" (SID) and
-other stuff which is explained a bit later. Let's talk about the SID first.
-</para>
-
-<para>A SID is a unique identifier for users, groups, computers and
-Active Directory (AD) domains. SIDs are basically comparable to POSIX
-user ids (UIDs) and group ids (GIDs), but are more complicated because
-they are unique across multiple machines or domains. A SID is a
-structure of multiple numerical values. There's a convenient convention
-to type SIDs, as a string of numerical fields separated by hyphen
-characters. Here's an example:</para>
-
-<para>SID of a machine "foo":</para>
-
-<screen>
- S-1-5-21-165875785-1005667432-441284377
-</screen>
-
-<para>SID of a user "johndoe" of the system "foo":</para>
-
-<screen>
- S-1-5-21-165875785-1005667432-441284377-1023
-</screen>
-
-<para>The first field is always "S", which is just a notational convention
-to show that this is a SID. The second field is the version number of
-the SID structure, So far there exists only one version of SIDs, so this
-field is always 1. The third and fourth fields represent the "authority"
-which can be thought of as a type or category of SIDs. There are a
-couple of builtin accounts and accounts with very special meaning which
-have certain well known values in these third and fourth fields.
-However, computer and domain SIDs always start with "S-1-5-21". The
-next three fields, all 32 bit values, represent the unique 96 bit
-identifier of the computer system. This is a hopefully unique value all
-over the world, but in practice it's sufficient if the computer SIDs are
-unique within a single Windows network.</para>
-
-<para>As you can see in the above example, SIDs of users (and groups)
-are identical to the computer SID, except for an additional part, the
-so-called "relative identifier" (RID). So the SID of a user is always
-uniquely attached to the system on which the account has been generated.</para>
-
-<para>It's a bit different in domains. The domain has its own SID, and
-that SID is identical to the SID of the first domain controller, on
-which the domain is created. Domain user SIDs look exactly like the
-computer user SIDs, the leading part is just the domain SID and the RID
-is created when the user is created.</para>
-
-<para>Ok, consider you created a new domain "bar" on some new domain
-controller and you would like to create a domain account "johndoe":</para>
-
-<para>SID of a domain "bar.local":</para>
-
-<screen>
- S-1-5-21-186985262-1144665072-740312968
-</screen>
-
-<para>SID of a user "johndoe" in the domain "bar.local":</para>
-
-<screen>
- S-1-5-21-186985262-1144665072-740312968-1207
-</screen>
-
-<para>So you now have two accounts called johndoe, one account
-created on the machine "foo", one created in the domain "bar.local".
-Both have different SIDs and not even the RID is the same. How do
-the systems know it's the same account? After all, the name is
-the same, right? The answer is, these accounts are <emphasis
-role='bold'>not</emphasis> identical. All machines on the network will
-treat these SIDs as identifying two separate accounts. One is
-"FOO\johndoe", the other one is "BAR\johndoe" or "johndoe@bar.local".
-Different SID, different account. Full stop. </para>
-
-<para>Starting with Cygwin 1.7.33, Cygwin uses an automatic, internal
-translation from Windows SID to POSIX UID/GID. This mechanism, which is
-the preferred method for the SID&lt;=&gt;UID/GID mapping, is described in
-detail in <xref linkend="ntsec-mapping"></xref>.</para>
-
-<para>Prior to Cygwin 1.7.33, the last part of the SID, the so called
-"Relative IDentifier" (RID), was by default used as UID and/or GID
-when you created the <filename>/etc/passwd</filename> and
-<filename>/etc/group</filename> files using the
-<command><link linkend="mkpasswd">mkpasswd</link></command> and
-<command><link linkend="mkgroup">mkgroup</link></command> tools.
-These tools as well as reading accounts from <filename>/etc/passwd</filename>
-and <filename>/etc/group</filename> files is still present in recent
-versions of Cygwin, but you should switch to the aforementioned
-automatic translation, unless you have very specific needs. Again,
-see <xref linkend="ntsec-mapping"></xref> for the details.</para>
-
-<para>Do you still remember the SIDs with special meaning? In offical
-notation they are called "well-known SIDs". For example, POSIX has no GID
-for the group of "all users" or "world" or "others". The last three rwx
-bits in a unix-style permission value just represent the permissions for
-"everyone who is not the owner or is member of the owning group".
-Windows has a SID for these poor souls, the "Everyone" SID. Other
-well-known SIDs represent circumstances under which a process is
-running, rather than actual users or groups. Here are a few examples
-for well-known SIDs:</para>
-
-<screen>
-Everyone S-1-1-0 Simply everyone...
-Batch S-1-5-3 Processes started via the task
- scheduler are member of this group.
-Interactive S-1-5-4 Only processes of users which are
- logged in via an interactive
- session are members here.
-Authenticated Users S-1-5-11 Users which have gone through
- the authentication process and
- survived. Anonymously accessing
- users are not incuded here.
-SYSTEM S-1-5-18 A special account which has all
- kinds of dangerous rights, sort of
- an uber-root account.
-</screen>
-
-<para>For a full list please refer to the MSDN document <ulink
-url="http://msdn.microsoft.com/en-us/library/aa379649.aspx">Well-known
-SIDs</ulink>. The Cygwin package called "csih" provides a tool,
-/usr/lib/csih/getAccountName.exe, which can be used to print the
-(possibly localized) name for the various well-known SIDS.</para>
-
-<para>Naturally, well-known SIDs are the same on each machine, so they are
-not unique to a machine or domain. They have the same meaning across
-the Windows network.</para>
-
-<para>Additionally, there are a couple of well-known builtin groups,
-which have the same SID on every machine and which have certain user
-rights by default:</para>
-
-<screen>
-administrators S-1-5-32-544
-users S-1-5-32-545
-guests S-1-5-32-546
-...
-</screen>
-
-<para>For instance, every account is usually member in the "Users"
-group. All administrator accounts are member of the "Administrators"
-group. That's all about it as far as single machines are involved. In
-a domain environment it's a bit more tricky. Since these SIDs are not
-unique to a machine, every domain user and every domain group can be a
-member of these well known groups. Consider the domain group "Domain
-Admins". This group is by default in the "Administrators" group. Let's
-assume the above computer called "foo" is a member machine of the domain
-"bar.local". If you stick the user "BAR\johndoe" into the group "Domain
-Admins", this guy will automatically be a member of the administrators
-group on "foo" when logging on to "foo". Neat, isn't it?</para>
-
-<para>Back to ACE and ACL. POSIX is able to create three different
-permissions, the permissions for the owner, for the group and for the
-world. In contrast the Windows ACL has a potentially infinite number of
-members... as long as they fit into 64K. Every member is an ACE.
-ACE consist of three parts:</para>
-
-<itemizedlist spacing="compact">
-<listitem><para>The type of the ACE (allow ACE or deny ACE).</para></listitem>
-<listitem><para>Permission bits, 32 of them.</para></listitem>
-<listitem><para>The SID for which the permissions are allowed or denied.</para></listitem>
-</itemizedlist>
-
-<para>The two (for us) important types of ACEs are the "access allowed
-ACE" and the "access denied ACE". As the names imply, the allow ACE
-tells the system to allow the given permissions to the SID, the deny ACE
-results in denying the specific permission bits.</para>
-
-<para>The possible permissions on objects are more detailed than in
-POSIX. For example, the permission to delete an object is different
-from the permission to change object data, and even changing object data
-can be separated into different permission bits for different kind of
-data. But there's a problem with the definition of a "correct" ACL
-which disallows mapping of certain POSIX permissions cleanly. See
-<xref linkend="ntsec-files"></xref>.</para>
-
-<para>POSIX is able to create only three different permissions? Not quite.
-Newer operating systems and file systems on POSIX systems also provide
-access control lists. Two different APIs exist for accessing these
-ACLs, the Solaris API and the POSIX API. Cygwin implements the original
-Solaris API to access Windows ACLs in a Unixy way. Online man pages for the
-Solaris ACL API can be found on
-<ulink url="http://docs.oracle.com">http://docs.oracle.com</ulink>.
-For an overview see <ulink url="http://docs.oracle.com/cd/E23824_01/html/821-1474/acl-5.html#scrolltoc">acl(5)</ulink>.</para>
-
-</sect2>
-
-<sect2 id="ntsec-mapping"><title id="ntsec-mapping.title">Mapping Windows accounts to POSIX accounts</title>
-
-<para>
-For as long as Cygwin has existed, it has stored user and group information in
-<filename>/etc/passwd</filename> and <filename>/etc/group</filename> files.
-Under the assumption that these files would never be too large, the first
-process in a process tree, as well as every execing process within the tree
-would parse them into structures in memory. Thus every Cygwin process would
-contain an expanded copy of the full information from
-<filename>/etc/passwd</filename> and <filename>/etc/group</filename>.
-</para>
-
-<para>
-This approach has a few downsides. One of them is that the idea that these
-files will always be small, is flawed. Another one is that reading the entire
-file is most of the time entirely useless, since most processes only
-need information on their own user and the primary group. Last but not
-least, the passwd and group files have to be maintained separately from
-the already existing Windows user databases, the local SAM and Active
-Directory.
-</para>
-
-<para>
-On the other hand, we have to have this mapping between Windows SIDs and
-POSIX uid/gid values, so we need a mechanism to convert SIDs to uid/gid
-values and vice versa.
-</para>
-
-<para>
-Microsoft "Services for UNIX" (SFU) (deprecated since Windows 8/Server 2012)
-never used passwd/group files. Rather, SFU used a fixed, computational mapping
-between SIDs and POSIX uid/gid which even has Active Directory support. It
-allows us to generate uid/gid values from SIDs and vice versa. The mechanism is
-documented, albeit in a confusing way and spread over multiple MSDN articles.
-</para>
-
-<para>
-Starting with Cygwin 1.7.33, Cygwin utilizes an approach inspired by the
-mapping method as implemented by SFU, with a few differences for backward
-compatibility and to handle some border cases differently.
-</para>
-
-<sect3 id="ntsec-mapping-how"><title id="ntsec-mapping-how.title">Mapping Windows SIDs to POSIX uid/gid values</title>
-
-<para>
-The following description assumes you're comfortable with the concept of
-Windows SIDs and RIDs. For a brief introduction, see
-<xref linkend="ntsec-common"></xref>.
-</para>
-
-<para>
-Cygwin's mapping between SIDs and uid/gid values works in two ways.
-</para>
-
-<itemizedlist spacing="compact">
-<listitem><para>Read <filename>/etc/passwd<filename> and
-</filename>/etc/group</filename> files if they exist, just as in the olden
-days, mainly for backward compatibility.</para></listitem>
-<listitem><para>If no files are present, or if an entry is missing in the files,
-ask Windows.</para></listitem>
-</itemizedlist>
-
-<para>
-At least, that's the default behaviour now. It will be configurable
-using a file <filename>/etc/nsswitch.conf</filename>, which is discussed in
-<xref linkend="ntsec-mapping-nsswitch"></xref>. Let's explore the default
-for now.
-</para>
-
-<para>
-If the passwd or group files are present, they will be scanned on demand as
-soon as a mapping from SIDs to uid/gid or account names is required. The new
-mechanism will never read the entire file into memory, but only scan for
-the requested entry and cache this one in memory.
-</para>
-
-<para>
-If no entry is found, or no passwd or group file was present, Cygwin
-will ask the OS.
-</para>
-
-<note>
-<para>
-If the first process in a Cygwin process tree determines that no
-<filename>/etc/passwd</filename> or <filename>/etc/group</filename> file is
-present, no other process in the entire process tree will try to read the files
-later on. This is done for self-preservation. It's rather bad if the uid
-or gid of a user changes during the lifetime of a process tree.
-</para>
-
-<para>
-For the same reason, if you delete the <filename>/etc/passwd</filename>
-or <filename>/etc/group</filename> file, this will be ignored. The passwd
-and group records read from the files will persist in memory until either a
-new <filename>/etc/passwd</filename> or <filename>/etc/group</filename>
-is created, or you exit all processes in the current process tree.
-</para>
-
-<para>
-See the note in <xref linkend="ntsec-mapping-nsswitch"></xref> for some
-comprehensive examples.
-</para>
-</note>
-
-<para>
-So if we've drawn a blank reading the files, we're going to ask the OS.
-First thing, we ask the local machine for the SID or the username. The
-OS functions
-<ulink url="http://msdn.microsoft.com/en-us/library/windows/desktop/aa379166%28v=vs.85%29.aspx">LookupAccountSid</ulink>
-and
-<ulink url="http://msdn.microsoft.com/en-us/library/windows/desktop/aa379159%28v=vs.85%29.aspx">LookupAccountName</ulink>
-are pretty intelligent. They have all the stuff built in to ask for any
-account of the local machine, the Active Directory domain of the machine,
-the Global Catalog of the forest of the domain, as well as any trusted
-domain of our forest for the information. One OS call and we're
-practically done...
-</para>
-
-<para>
-Except, the calls only return the mapping between SID, account name and the
-account's domain. We don't have a mapping to POSIX uid/gid and we're missing
-information on the user's home dir and login shell.
-</para>
-
-<para>
-Let's discuss the SID&lt;=&gt;uid/gid mapping first. Here's how it works.
-</para>
-
-<itemizedlist spacing="compact">
-
-<listitem>
-<para>
-<ulink url="http://msdn.microsoft.com/en-us/library/aa379649.aspx">Well-known
-SIDs</ulink>
-in the NT_AUTHORITY domain of the S-1-5-RID type, or aliases of the
-S-1-5-32-RID type are mapped to the uid/gid value RID. Examples:
-</para>
-
-<screen>
- "SYSTEM" S-1-5-18 &lt;=&gt; uid/gid: 18
- "Users" S-1-5-32-545 &lt;=&gt; uid/gid: 545
-</screen>
-</listitem>
-
-<listitem>
-<para>
-Other well-known SIDs in the NT_AUTHORITY domain (S-1-5-X-RID):
-</para>
-
-<screen>
- S-1-5-X-RID &lt;=&gt; uid/gid: 0x1000 * X + RID
-</screen>
-
-<para>Example:</para>
-
-<screen>
- "NTLM Authentication" S-1-5-64-10 &lt;=&gt; uid/gid: 0x4000A == 262154
-</screen>
-</listitem>
-
-<listitem><para>
-Other well-known SIDs:
-</para>
-
-<screen>
- S-1-X-Y &lt;=&gt; uid/gid: 0x10000 + 0x100 * X + Y
-</screen>
-
-<para>Example:</para>
-
-<screen>
- "LOCAL" S-1-2-0 &lt;=&gt; uid/gid: 0x10200 == 66048
- "Creator Group" S-1-3-1 &lt;=&gt; uid/gid: 0x10301 == 66305
-</screen>
-</listitem>
-
-<listitem>
-<para>
-Logon SIDs: The LogonSid of the current user's session is converted to the
-fixed uid 0xfff == 4095 and named "CurrentSession". Any other LogonSid is
-converted to the fixed uid 0xffe == 4094 and named "OtherSession".
-</para>
-</listitem>
-
-<listitem>
-<para>
-Mandatory Labels:
-</para>
-
-<screen>
- S-1-16-RID &lt;=&gt; uid/gid: 0x60000 + RID
-</screen>
-
-<para>Example:</para>
-
-<screen>
- "Medium Mandatory Level" S-1-16-8192 &lt;=&gt; uid/gid: 0x62000 == 401408
-</screen>
-</listitem>
-
-<listitem>
-<para>
-Accounts from the local machine's user DB (SAM):
-</para>
-
-<screen>
- S-1-5-21-X-Y-Z-RID &lt;=&gt; uid/gid: 0x30000 + RID
-</screen>
-
-<para>Example:</para>
-
-<screen>
- "Administrator" S-1-5-21-X-Y-Z-500 &lt;=&gt; uid/gid: 0x301f4 == 197108
-</screen>
-</listitem>
-
-<listitem>
-<para>
-Accounts from the machine's primary domain:
-</para>
-
-<screen>
- S-1-5-21-X-Y-Z-RID &lt;=&gt; uid/gid: 0x100000 + RID
-</screen>
-
-<para>Example:</para>
-
-<screen>
- "Domain Users" S-1-5-21-X-Y-Z-513 &lt;=&gt; uid/gid: 0x100201 == 1049089
-</screen>
-</listitem>
-
-<listitem>
-<para>
-Accounts from a trusted domain of the machine's primary domain:
-</para>
-
-<screen>
- S-1-5-21-X-Y-Z-RID &lt;=&gt; uid/gid: trustPosixOffset(domain) + RID
-</screen>
-
-<para>
-<literal>trustPosixOffset</literal>? This needs a bit of explanation. This
-value exists in Windows domains already since before Active Directory days.
-What happens is this. If you create a domain trust between two domains, a
-trustedDomain entry will be added to both databases. It describes how
-<emphasis>this</emphasis> domain trusts the <emphasis>other</emphasis> domain.
-One attribute of a trust is a 32 bit value called
-<literal>trustPosixOffset</literal> For each new trust,
-<literal>trustPosixOffset</literal> will get some automatic value. In recent
-AD domain implementations, the first trusted domain will get
-<literal>trustPosixOffset</literal> set to 0x80000000. Following domains will
-get lower values. Unfortunately the domain admins are allowed to set the
-<literal>trustPosixOffset</literal> value for each trusted domain to some
-arbitrary 32 bit value, no matter what the other
-<literal>trustPosixOffset</literal> are set to, thus allowing any kind of
-collisions between the <literal>trustPosixOffset</literal> values of domains.
-That's not exactly helpful, but as the user of this value, we have to
-<emphasis>trust</emphasis> the domain admins to set
-<literal>trustPosixOffset</literal> to sensible values, or to keep it at the
-system chosen defaults.
-</para>
-
-<para>
-So, for the first (or only) trusted domain of your domain, the automatic offset
-is 0x80000000. An example for a user of that trusted domain is
-</para>
-
-<screen>
- S-1-5-21-X-Y-Z-1234 &lt;=&gt; uid/gid 0x800004d2 == 2147484882
-</screen>
-
-<para>
-There's one problem with this approach. Assuming you're running in the context
-of a local SAM user on a domain member machine. Local users don't have the
-right to fetch this kind of domain information from the DC, they'll get
-permission denied. In this case Cygwin will fake a sensible
-<literal>trustPosixOffset</literal> value.
-</para>
-
-<para>
-Another problem is if the AD administrators chose an unreasonably small
-<literal>trustPosixOffset</literal> value. Anything below the hexadecimal
-value 0x100000 (the POSIX offset of the primary domain) is bound to produce
-collisions with system accounts as well as local accounts. The right thing
-to do in this case is to notify your administrator of the problem and to ask
-for moving the offset to a more reasonable value. However, to reduce the
-probability for collisions, Cygwin overrides this offset with a sensible
-fixed replacement offset.
-</para>
-</listitem>
-
-<listitem>
-<para>
-Local accounts from another machine in the network:
-</para>
-
-<para>
-There's no SID&lt;=&gt;uid/gid mapping implemented for this case. The problem
-is, there's no way to generate a bijective mapping. There's no central place
-which keeps an analogue of the <literal>trustPosixOffset</literal>, and there's
-the additional problem that the
-<ulink url="http://msdn.microsoft.com/en-us/library/windows/desktop/aa379166%28v=vs.85%29.aspx">LookupAccountSid</ulink>
-and
-<ulink url="http://msdn.microsoft.com/en-us/library/windows/desktop/aa379159%28v=vs.85%29.aspx">LookupAccountName</ulink>
-functions cannnot resolve the SIDs, unless they know the name of the machine
-this SID comes from. And even then it will probably suffer a
-<literal>Permission denied</literal> error when trying to ask the machine
-for its local account.
-</para>
-</listitem>
-
-</itemizedlist>
-
-<para>
-Now we have a semi-bijective mapping between SIDs and POSIX uid/gid values,
-but given that we have potentially users and groups in different domains having
-the same name, how do we uniquely distinguish between them by name? Well, we
-can do that by making their names unique in a per-machine way. Dependent on
-the domain membership of the account, and dependent of the machine being a
-domain member or not, the user and group names will be generated using a domain
-prefix and a separator character between domain and account name.
-The <!-- default --> separator character is the plus sign, <literal>+</literal>.
-</para>
-
-<itemizedlist spacing="compact">
-
-<listitem>
-<para>
-Well-known and builtin accounts will be named as in Windows:
-</para>
-
-<screen>
- "SYSTEM", "LOCAL", "Medium Mandatory Level", ...
-</screen>
-</listitem>
-
-<listitem>
-<para>
-If the machine is not a domain member machine, only local accounts can be resolved
-into names, so for ease of use, just the account names are used as Cygwin
-user/group names:
-</para>
-
-<screen>
- "corinna", "bigfoot", "None", ...
-</screen>
-</listitem>
-
-<listitem>
-<para>
-If the machine is a domain member machine, all accounts from the primary domain
-of the machine are mapped to Cygwin names without domain prefix:
-</para>
-
-<screen>
- "corinna", "bigfoot", "Domain Users", ...
-</screen>
-
-<para>
-while accounts from other domains are prepended by their domain:
-</para>
-
-<screen>
- "DOMAIN1+corinna", "DOMAIN2+bigfoot", "DOMAIN3+Domain Users", ...
-</screen>
-</listitem>
-
-<listitem>
-<para>
-Local machine accounts of a domain member machine get a Cygwin user name the
-same way as accounts from another domain: The local machine name gets
-prepended:
-</para>
-
-<screen>
- "MYMACHINE+corinna", "MYMACHINE+bigfoot", "MYMACHINE+None", ...
-</screen>
-</listitem>
-
-<listitem>
-<para>
-If LookupAccountSid fails, Cygwin checks the accounts against the known trusted
-domains. If the account is from one of the trusted domains, an artificial
-account name is created. It consists of the domain name, and a special name
-created from the account RID:
-</para>
-
-<screen>
- "MY_DOM+User(1234)", "MY_DOM+Group(5678)"
-</screen>
-
-<para>
-Otherwise we know nothing about this SID, so it will be mapped to the
-fake accounts <literal>Unknown+User</literal>/<literal>Unknown+Group</literal>
-with uid/gid -1.
-</para>
-</listitem>
-
-</itemizedlist>
-
-</sect3>
-
-<sect3 id="ntsec-mapping-caching"><title id="ntsec-mapping-caching.title">Caching account information</title>
-
-<para>
-The information fetched from the Windows account database or the
-<filename>/etc/passwd</filename> and <filename>/etc/group</filename> files is
-cached by the process. The cached information is inherited by Cygwin child
-processes. A Cygwin process invoked from a Windows command, such as CMD.exe,
-will start a new Cygwin process tree and the caching starts from scratch
-(unless <command><link linkend="using-cygserver">cygserver</link></command> is
-running, but read on).
-</para>
-
-<para>
-While usually working fine, this has some drawbacks. Consider a shell calling
-<command>id</command>. <command>id</command> fetches all group information
-from the current token and caches them. Unfortunately <command>id</command>
-doesn't start any child processes, so the information is lost as soon as
-<command>id</command> exits.
-</para>
-
-<para>
-But there's another caching mechanism available. If
-<command><link linkend="using-cygserver">cygserver</link></command> is running
-it will provide passwd and group entry caching for all processes in every Cygwin
-process tree started after
-<command><link linkend="using-cygserver">cygserver</link></command>. So, if
-you start a Cygwin Terminal and
-<command><link linkend="using-cygserver">cygserver</link></command> is running
-at the time, <command>mintty</command>, the shell, and all child processes will
-use <command><link linkend="using-cygserver">cygserver</link></command> caching.
-If you start a Cygwin Terminal and
-<command><link linkend="using-cygserver">cygserver</link></command> is not
-running at the time, none of the processes started inside this terminal window
-will use <command><link linkend="using-cygserver">cygserver</link></command>
-caching.
-</para>
-
-<para>
-The advantage of
-<command><link linkend="using-cygserver">cygserver</link></command> caching is
-that it's system-wide and, as long as
-<command><link linkend="using-cygserver">cygserver</link></command> is running,
-unforgetful. Every Cygwin process on the system will have the
-<command><link linkend="using-cygserver">cygserver</link></command> cache at
-its service. Additionally, all information requested from
-<command><link linkend="using-cygserver">cygserver</link></command> once, will
-be cached inside the process itself and, again, propagated to child processes.
-</para>
-
-<para>
-If you automatically start Cygwin processes as Windows services at system
-startup, you may wish to consider starting
-<command><link linkend="using-cygserver">cygserver</link></command> first in
-order to take advantage of this system-wide caching. To assure that
-<command><link linkend="using-cygserver">cygserver</link></command> has started
-prior to starting <command>sshd</command> or other Cygwin processes, you may
-wish to create service startup dependencies.
-<command><link linkend="using-cygserver">Cygserver</link></command> should
-probably wait for Windows TCPIP and AFD services before it starts, and then
-other Cygwin process should start after
-<command><link linkend="using-cygserver">cygserver</link></command>. Example
-Windows commands to accomplish this (after the services already exist) are
-shown below. You will need an administrative prompt to run the
-<command>sc config</command> commands.
-</para>
-
-<screen>
- # Delay Cygserver until TCPIP and AFD have started
- # Note the (odd) required space character after "depend="
-
- sc config cygserver depend= tcpip/afd
-
- # Delay sshd until after Cygserver has started
- # Again note the (odd) required space character after "depend="
-
- sc config sshd depend= cygserver
-
- # View the Cygserver service details
-
- sc qc cygserver
-</screen>
-
-<para>
-Note that this <command>sc config</command> command
-<emphasis>replaces</emphasis> any existing dependencies. The above changes
-will not impact the running instance, only future instances.
-</para>
-
-<screen>
- # To remove all dependencies from the cygserver service
-
- sc config cygserver depend= /
-</screen>
-
-</sect3>
-
-<sect3 id="ntsec-mapping-passwdinfo"><title id="ntsec-mapping-passwdinfo.title">Cygwin user names, home dirs, login shells</title>
-
-<para>
-Obviously, if you don't maintain <filename>passwd</filename> and
-<filename>group</filename> files, you need to have a way to maintain the other
-fields of a passwd entry as well. A couple of things come to mind:
-</para>
-
-<itemizedlist spacing="compact">
-
-<listitem>
-<para>
-You want to use a Cygwin username different from your Windows username.
-</para>
-
-<note><para>
-Note: This is only supported via <filename>/etc/passwd</filename>. A
-Cygwin username maintained in the Windows user databases would require
-very costly (read: slow) search operations.
-</para></note>
-</listitem>
-
-<listitem>
-<para>
-You want to change the primary group of a user. For AD accounts this is
-not supported. The primary group of a user is always the Windows
-primary group set in Active Directory and can't be changed. For SAM
-accounts, you can add the primary group to the SAM
-<literal>description</literal> field of the user. See <xref
-linkend="ntsec-mapping-nsswitch-desc"></xref> for more info.
-</para>
-</listitem>
-
-<listitem>
-<para>
-You want a home dir different from the default
-<filename>/home/$USERNAME</filename>.
-</para>
-</listitem>
-
-<listitem>
-<para>
-You want to specify a different login shell than <filename>/bin/bash</filename>.
-</para>
-</listitem>
-
-<listitem>
-<para>
-You want to add specific content to the pw_gecos field.
-</para>
-</listitem>
-
-</itemizedlist>
-
-<para>
-For simple needs you can create <filename>/etc/passwd</filename> and/or
-<filename>/etc/group</filename> files with entries for your account
-and tweak that.
-</para>
-
-<para>
-For bigger installations, maintaining per-client files is rather troublesome.
-Also, no two environments are the same, so the needs are pretty different.
-Therefore Cygwin supports configuring how to fetch home directory,
-login shell, and gecos information in /etc/nsswitch.conf. See the next
-section for detailed information how to configure Cygwin's account handling.
-</para>
-
-</sect3>
-
-<sect3 id="ntsec-mapping-nsswitch"><title id="ntsec-mapping-nsswitch.title">The <filename>/etc/nsswitch.conf</filename> file</title>
-
-<para>
-On Linux and some other UNIXy OSes, we have a file called
-<ulink url="http://linux.die.net/man/5/nsswitch.conf">/etc/nsswitch.conf</ulink>.
-Among other things, it determines how passwd and group entries are generated.
-That's what Cygwin now provides as well.
-</para>
-
-<para>
-The <filename>/etc/nsswitch.conf</filename> file is optional. If you don't
-have one, Cygwin uses sensible defaults.
-</para>
-
-<note>
-<para>
-The <filename>/etc/nsswitch.conf</filename> file is read exactly once by
-the first process of a Cygwin process tree. If there was no
-<filename>/etc/nsswitch.conf</filename> file when this first process started,
-then no other process in the running Cygwin process tree will try to read the
-file.
-</para>
-
-<para>
-If you create or change <filename>/etc/nsswitch.conf</filename>, you have to
-restart all Cygwin processes that need to see the change. If the process
-you want to see the change is a child of another process, you need to restart
-all of that process's parents, too.
-</para>
-
-<para>
-For example, if you run <command>vim</command> inside the default Cygwin
-Terminal, <command>vim</command> is a child of your shell, which is a child
-of <command>mintty</command>. If you edit
-<filename>/etc/nsswitch.conf</filename> in that <command>vim</command>
-instance, your shell won't immediately see the change, nor will
-<command>vim</command> if you restart it from that same shell instance.
-This is because both are getting their nsswitch information from their
-ancestor, <command>mintty</command>. You have to start a fresh terminal
-window for the change to take effect.
-</para>
-
-<para>
-By contrast, if you leave that Cygwin Terminal window open after making the
-change to <filename>/etc/nsswitch.conf</filename>, then restart a Cygwin
-service like <command>cron</command>, <command>cron</command> will see the
-change, because it is not a child of <command>mintty</command> or any other
-Cygwin process. (Technically, it is a child of <command>cygrunsrv</command>,
-but that instance also restarts when you restart the service.)
-</para>
-
-<para>
-The reason we point all this out is that the requirements for restarting
-things are not quite as stringent as when you replace
-<filename>cygwin1.dll</filename>. If you have three process trees, you have
-three independent copies of the nsswitch information. If you start a fresh
-process tree, it will see the changes. As long as any process in an existing
-process tree remains running, all processes in that tree will continue to use
-the old information.
-</para>
-</note>
-
-<para>
-So, what settings can we perform with <filename>/etc/nsswitch.conf</filename>?
-Let's start with an example <filename>/etc/nsswitch.conf</filename> file
-file set up to all default values:
-</para>
-
-<screen>
- # /etc/nsswitch.conf
- passwd: files db
- group: files db
-<!--
- db_prefix: auto
- db_separator: + -->
- db_enum: cache builtin
- db_home: cygwin desc
- db_shell: cygwin desc
- db_gecos: cygwin desc
-</screen>
-
-<sect4 id="ntsec-mapping-nsswitch-syntax"><title id="ntsec-mapping-nsswitch-syntax.title">The <filename>/etc/nsswitch.conf</filename> syntax</title>
-
-<para>
-The first line, starting with a hash <literal>#</literal> is a comment.
-The hash character starts a comment, just as in shell scripts. Everything
-up to the end of the line is ignored. So this:
-</para>
-
-<screen>
- foo: bar # baz
-</screen>
-
-<para>
-means, set "foo" to value "bar", ignore everything after the hash.
-</para>
-
-<para>
-The other lines define the available settings. The first word up to a
-colon is a keyword. Note that the colon <emphasis>must</emphasis> follow
-immediately after the keyword. This is a valid line:
-</para>
-
-<screen>
- foo: bar
-</screen>
-
-<para>
-This is not valid:
-</para>
-
-<screen>
- foo : bar
-</screen>
-
-<para>
-Apart from this restriction, the reminder of the line can have as
-many spaces and TABs as you like.
-</para>
-
-</sect4>
-
-<sect4 id="ntsec-mapping-nsswitch-pwdgrp"><title id="ntsec-mapping-nsswitch-pwdgrp.title">The <literal>passwd:</literal> and <literal>group:</literal> settings</title>
-
-<para>
-The two lines starting with the keywords <literal>passwd:</literal> and
-<literal>group:</literal> define where Cygwin gets its passwd and group
-information from. <literal>files</literal> means, fetch the information
-from the corresponding file in the /etc directory. <literal>db</literal>
-means, fetch the information from the Windows account databases, the SAM
-for local accounts, Active Directory for domain account. Examples:
-</para>
-
-<screen>
- passwd: files
-</screen>
-
-<para>
-Read passwd entries only from /etc/passwd.
-</para>
-
-<screen>
- group: db
-</screen>
-
-<para>
-Read group entries only from SAM/AD.
-</para>
-
-<screen>
- group: files # db
-</screen>
-
-<para>
-Read group entries only from <filename>/etc/group</filename>
-(<literal>db</literal> is only a comment).
-</para>
-
-<screen>
- passwd: files db
-</screen>
-
-<para>
-Read passwd entries from <filename>/etc/passwd</filename>. If a user account
-isn't found, try to find it in SAM or AD. This is the default for both,
-passwd and group information.
-</para>
-
-<screen>
- group: db files
-</screen>
-
-<para>
-This is a valid entry, but the order will be ignored by Cygwin. If both
-settings, <literal>files</literal> and <literal>db</literal> are specified,
-Cygwin will always try the files first, then the db.
-</para>
-
-<para>
-<literal>passwd:</literal> and <literal>group:</literal> are the two basic
-settings defining where to get the account information from. The following
-settings starting with <literal>db_</literal> define certain aspects of the
-Windows account database search and how to generate <literal>passwd</literal>
-and <literal>group</literal> information from the database.
-</para>
-
-</sect4>
-
-<!--
-
- DESCRIPTION OF db_prefix AND db_separator
-
- Keep in for reference
-
-
-<itemizedlist spacing="compact">
-
-<listitem>
-<para>
-<literal>db_prefix:</literal> determines how the Cygwin user or group name
-is created. The recognized values are:
-</para>
-
-<variablelist>
- <varlistentry>
- <term><literal>auto</literal></term>
- <listitem>
- <para>
- This is the default. If your account is from the primary domain of your
- machine, or if your machine is a standalone machine (not a domain member),
- your Cygwin account name is just the Windows account name.
- </para>
-
- <para>
- If your account is from another domain, or if you're logged in as
- local user on a domain machine, the Cygwin username will be the
- combination of Windows domainname and username, with the separator
- char in between:
- </para>
-
- <segmentedlist><?dbhtml list-presentation="table"?>
- <seglistitem>
- <seg><literal>MY_DOM+username</literal></seg>
- <seg>(foreign domain)</seg>
- </seglistitem>
- <seglistitem>
- <seg><literal>MACHINE+username</literal></seg>
- <seg>(local account)</seg>
- </seglistitem>
- </segmentedlist>
-
- <para>
- Builtin accounts are simply used as is:
- </para>
-
- <segmentedlist><?dbhtml list-presentation="table"?>
- <seglistitem>
- <seg><literal>LOCAL</literal></seg>
- </seglistitem>
- <seglistitem>
- <seg><literal>Users</literal></seg>
- </seglistitem>
- </segmentedlist>
-
- <para>
- Unknown accounts on NFS or Samba shares (that is, accounts which cannot be
- mapped to Windows user accounts via
- <ulink url="https://tools.ietf.org/html/rfc2307">RFC 2307</ulink>) get a
- Cygwin account name consisting of the artificial domains
- <literal>Unix_User</literal> or <literal>Unix_Group</literal> and the
- uid/gid value, for instance:
- </para>
-
- <segmentedlist><?dbhtml list-presentation="table"?>
- <seglistitem>
- <seg><literal>Unix_User+0</literal></seg>
- <seg>(root)</seg>
- </seglistitem>
- <seglistitem>
- <seg><literal>Unix_Group+10</literal></seg>
- <seg>(wheel)</seg>
- </seglistitem>
- </segmentedlist>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><literal>primary</literal></term>
- <listitem>
- <para>
- Like <literal>auto</literal>, but primary domain accounts will be
- prepended by the domainname as well.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><literal>always</literal></term>
- <listitem>
- <para>
- All accounts, even the builtin accounts, will have the domain name
- prepended:
- </para>
-
- <segmentedlist><?dbhtml list-presentation="table"?>
- <seglistitem>
- <seg><literal>BUILTIN+Users</literal></seg>
- </seglistitem>
- </segmentedlist>
-
- <para>
- A special case are builtin accounts which have an emtpy domain name.
- These will be prependend by just the separator character in
- <literal>always</literal> mode:
- </para>
-
- <segmentedlist><?dbhtml list-presentation="table"?>
- <seglistitem>
- <seg><literal>+LOCAL</literal></seg>
- </seglistitem>
- </segmentedlist>
- </listitem>
- </varlistentry>
-</variablelist>
-
-</listitem>
-
-<listitem>
-<para>
-<literal>db_separator:</literal> defines the spearator char used to prepend the
-domain name to the user or group name. The default is the plus character
-<literal>+</literal>.
-</para>
-
-<screen>
- MY_DOM+username
-</screen>
-
-<para>
-With <literal>db_separator:</literal>, you can define any ASCII char except
-space, tab, carriage return, line feed, and the colon, as separator char.
-Example:
-</para>
-
-<screen>
- db_separator: \
-</screen>
-
-<para>
-This results in usernames with the backslash as separator:
-</para>
-
-<screen>
- MY_DOM\username
-</screen>
-
-</listitem>
-
-</itemizedlist>
--->
-
-<sect4 id="ntsec-mapping-nsswitch-enum"><title id="ntsec-mapping-nsswitch-enum.title">The <literal>db_enum:</literal> setting</title>
-
-<para>
-<literal>db_enum:</literal> defines the depth of a database search, if an
-application calls one of the enumeration functions
-<ulink url="http://linux.die.net/man/3/getpwent">getpwent</ulink>
-or <ulink url="http://linux.die.net/man/3/getgrent">getgrent</ulink>.
-The problem with these functions is, they neither allow to define how many
-entries will be enumerated when calling them in a loop, nor do they
-allow to add some filter criteria. They were designed back in the days,
-when only <filename>/etc/passwd</filename> and <filename>/etc/group</filename>
-files existed and the number of user accounts on a typical UNIX system was
-seldomly a three-digit number.
-</para>
-
-<para>
-These days, with user and group databases sometimes going in the
-six-digit range, they are a potential burden. For that reason, Cygwin
-does not enumerate all user or group accounts by default, but rather
-just a very small list, consisting only of the accounts cached in memory
-by the current process, as well as a handful of predefined builtin
-accounts.
-</para>
-
-<para>
-<literal>db_enum:</literal> allows to specify the accounts to enumerate in a
-fine-grained manner. It takes a list of sources as argument:
-</para>
-
-<screen>
- db_enum: source1 source2 ...
-</screen>
-
-<para>
-The recognized sources are the following:
-</para>
-
-<variablelist>
- <varlistentry>
- <term><literal>none</literal></term>
- <listitem>No output from
- <function>getpwent</function>/<function>getgrent</function>
- at all.</listitem>
- </varlistentry>
- <varlistentry>
- <term><literal>all</literal></term>
- <listitem>The opposite. Enumerates accounts from all known sources,
- including all trusted domains.</listitem>
- </varlistentry>
- <varlistentry>
- <term><literal>cache</literal></term>
- <listitem>Enumerate all accounts currently cached in memory.</listitem>
- </varlistentry>
- <varlistentry>
- <term><literal>builtin</literal></term>
- <listitem>Enumerate the predefined builtin accounts for backward
- compatibility. These are five passwd accounts (SYSTEM,
- LocalService, NetworkService, Administrators, TrustedInstaller)
- and two group accounts (SYSTEM and TrustedInstaller).</listitem>
- </varlistentry>
- <varlistentry>
- <term><literal>files</literal></term>
- <listitem>Enumerate the accounts from <filename>/etc/passwd</filename> or
- <filename>/etc/group</filename>.</listitem>
- </varlistentry>
- <varlistentry>
- <term><literal>local</literal></term>
- <listitem>Enumerate all accounts from the local SAM.</listitem>
- </varlistentry>
- <varlistentry>
- <term><literal>primary</literal></term>
- <listitem>Enumerate all accounts from the primary domain.</listitem>
- </varlistentry>
- <varlistentry>
- <term><literal>alltrusted</literal></term>
- <listitem>Enumerate all accounts from all trusted domains.</listitem>
- </varlistentry>
- <varlistentry>
- <term><literal>some.domain</literal></term>
- <listitem>Enumerate all accounts from the trusted domain some.domain. The
- trusted domain can be given as Netbios flat name (MY_DOMAIN) or
- as dns domain name (my_domain.corp). In contrast to the
- aforementioned fixed source keywords, distinct domain names are
- caseinsensitive. Only domains which are actually trusted domains
- are enumerated. Unknown domains are simply ignored.</listitem>
- </varlistentry>
-</variablelist>
-
-<para>
-Please note that <function>getpwent</function>/<function>getgrent</function>
-do <emphasis>not</emphasis> test if an account was already listed from another
-source, so an account can easily show up twice or three times. Such a test
-would be rather tricky, nor does the Linux implementation perform such test.
-Here are a few examples for <filename>/etc/nsswitch.conf</filename>:
-</para>
-
-<screen>
- db_enum: none
-</screen>
-
-<para>
-No output from <function>getpwent</function>/<function>getgrent</function>
-at all. The first call to the function immediately returns a NULL pointer.
-</para>
-
-<screen>
- db_enum: cache files
-</screen>
-
-<para>
-Enumerate all accounts cached by the current process, plus all entries
-from either the /etc/passwd or /etc/group file.
-</para>
-
-<screen>
- db_enum: cache local primary
-</screen>
-
-<para>
-Enumerate all accounts cached by the current process, all accounts from the SAM
-of the local machine, and all accounts from the primary domain of the machine.
-</para>
-
-<screen>
- db_enum: local primary alltrusted
-</screen>
-
-<para>
-Enumerate the accounts from the machine's SAM, from the primary domain of the
-machine, and from all trusted domains.
-</para>
-
-<screen>
- db_enum: primary domain1.corp sub.domain.corp domain2.net
-</screen>
-
-<para>
-Enumerate the accounts from the primary domain and from the domains
-domain1.corp, sub.domain.corp and domain2.net.
-</para>
-
-<screen>
- db_enum: all
-</screen>
-
-<para>
-Enumerate everything and the kitchen sink.
-</para>
-
-</sect4>
-
-<sect4 id="ntsec-mapping-nsswitch-passwd"><title id="ntsec-mapping-nsswitch-passwd.title">Settings defining how to create the <literal>passwd</literal> entry</title>
-
-<para>
-<filename>/etc/nsswitch.conf</filename> supports three settings to configure
-where to get the pw_dir, pw_shell, and pw_gecos content of a
-<literal>passwd</literal> entry from:
-</para>
-
-<screen>
- db_home: schema... # Define how to fetch the pw_dir entry.
- db_shell: schema... # Define how to fetch the pw_shell entry.
- db_gecos: schema... # Define how to fetch the pw_gecos entry.
-</screen>
-
-"schema..." is a list of up to four space-separated schemata:
-
-<screen>
- db_FOO: schema1 schema2 ...
-</screen>
-
-<para>
-When generating a passwd entry, Cygwin tries the schemata in order. If
-the first schema returns an empty string, it skips to the second, and so
-on. Schemata only supported on AD are silently skipped for SAM accounts
-and on non-AD machines.
-</para>
-
-<para>
-Four schemata are predefined, two schemata are variable. The predefined
-schemata are the following:
-</para>
-
-<variablelist>
- <varlistentry>
- <term><literal>windows</literal></term>
- <listitem>Utilizes typical Windows settings. Supported for AD and SAM
- accounts.</listitem>
- </varlistentry>
- <varlistentry>
- <term><literal>cygwin</literal></term>
- <listitem>Utilizes the cygwinUser AD schema extension. This schema
- extension is available via a schema extension file
- <filename>/usr/share/cygwin/cygwin.ldif</filename>.
- See <xref linkend="ntsec-mapping-nsswitch-cygwin"></xref> for
- more information.</listitem>
- </varlistentry>
- <varlistentry>
- <term><literal>unix</literal></term>
- <listitem>Utilizes the posixAccount schema attributes per
- <ulink url="https://tools.ietf.org/html/rfc2307">RFC 2307</ulink>.
- The posixAccount schema is available by default since Windows
- Server 2003 R2, but typically only utilized when installing the
- Active Directory "Server for NIS" feature (which is deprecated
- since Server 2012 R2).
- See also <xref linkend="ntsec-mapping-nsswitch-posix"></xref>.
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><literal>desc</literal></term>
- <listitem>Utilizes XML-style attributes in the description attribute.
- Supported for AD and SAM accounts.
- See <xref linkend="ntsec-mapping-nsswitch-desc"></xref>
- for a more detailed description.</listitem>
- </varlistentry>
-</variablelist>
-
-<para>
-The variable schemata are as follows. Note that the leading characters
-(<literal>@</literal> and <literal>/</literal>) are an integral part of the
-definition.
-</para>
-
-<variablelist>
- <varlistentry>
- <term><literal>@ad_attribute</literal></term>
- <listitem><literal>ad_attribute</literal> is any arbitrary AD attribute
- name which should (ideally) be available in the User class or
- in any attached auxiliary class. It's always treated as a
- single string argument. Only the first string of a multi-string
- attributes will be read.</listitem>
- </varlistentry>
- <varlistentry>
- <term><literal>/path</literal></term>
- <listitem>An arbitrary string, typically a path. The leading slash is
- required. Given that a single, fixed path for all users
- only makes marginal sense, the /path schema supports wildcards.
- A wildcard is a per-cent (<literal>%</literal>) character,
- followed by another character giving the meaning. The supported
- wildcard characters are:
-
- <variablelist>
- <varlistentry>
- <term><literal>%u</literal></term>
- <listitem>The Cygwin username (that's lowercase
- <literal>u</literal>).</listitem>
- </varlistentry>
- <varlistentry>
- <term><literal>%U</literal></term>
- <listitem>The Windows username (that's uppercase
- <literal>U</literal>).</listitem>
- </varlistentry>
- <varlistentry>
- <term><literal>%D</literal></term>
- <listitem>Windows domain in NetBIOS style.</listitem>
- </varlistentry>
- <varlistentry>
- <term><literal>%_</literal></term>
- <listitem>Since space and TAB characters are used to separate
- the schemata, a space in the filename has to be
- given as <literal>%_</literal> (that's an
- underscore).</listitem>
- </varlistentry>
- <varlistentry>
- <term><literal>%%</literal></term>
- <listitem>A per-cent character.</listitem>
- </varlistentry>
- </variablelist>
- <para>Any other <literal>%X</literal> expression is treated as if
- the character <literal>X</literal> has been given alone.</para>
- </listitem>
- </varlistentry>
-</variablelist>
-
-<para>
-The exact meaning of a schema depends on the setting it's used for. The
-following sections explain the settings in detail.
-</para>
-
-</sect4>
-
-<sect4 id="ntsec-mapping-nsswitch-home"><title id="ntsec-mapping-nsswitch-home.title">The <literal>db_home:</literal> setting</title>
-
-<para>
-The <literal>db_home:</literal> setting defines how Cygwin fetches the user's
-home directory, or, more precise, the content of the <literal>pw_dir</literal>
-member of the user's passwd entry. The following list describes the meaning
-of each schema when used with <literal>db_home:</literal>
-</para>
-
-<variablelist>
- <varlistentry>
- <term><literal>windows</literal></term>
- <listitem>The user's home directory is set to the same directory which is
- used as Windows home directory. This is the
- <literal>homeDrive</literal> AD attribute if set, or the
- <literal>homeDirectory</literal> AD attribute if
- <literal>homeDrive</literal> is not set. For SAM accounts,
- this is equivalent to the "Home folder" setting in SAM.
- If both attributes are unset, Cygwin falls back to the user's
- local profile directory, typically something along the lines
- of <filename>C:\Users\$USERNAME</filename>. Of course, the
- Windows directory is converted to POSIX-style by Cygwin.
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><literal>cygwin</literal></term>
- <listitem>AD only: The user's home directory is set to the POSIX path given
- in the <literal>cygwinHome</literal> attribute from the
- <literal>cygwinUser</literal> auxiliary class.
- See also <xref linkend="ntsec-mapping-nsswitch-cygwin"></xref>.
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><literal>unix</literal></term>
- <listitem>AD only: The user's home directory is set to the POSIX path given
- in the <literal>unixHomeDirectory</literal> attribute from the
- <literal>posixAccount</literal> auxiliary class.
- See also <xref linkend="ntsec-mapping-nsswitch-posix"></xref>.
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><literal>desc</literal></term>
- <listitem>The user's home directory is set to the POSIX path given in the
- home="..." XML-alike setting in the user's
- <literal>description</literal> attribute in SAM or AD.
- See <xref linkend="ntsec-mapping-nsswitch-desc"></xref>
- for a detailed description.</listitem>
- </varlistentry>
- <varlistentry>
- <term><literal>@ad_attribute</literal></term>
- <listitem>AD only: The user's home directory is set to the path given
- in the <literal>ad_attribute</literal> attribute. The path
- can be given as Windows or POSIX path.</listitem>
- </varlistentry>
- <varlistentry>
- <term><literal>/path</literal></term>
- <listitem>The user's home directory is set to the given POSIX path.
- Remember the wildcards described in
- <xref linkend="ntsec-mapping-nsswitch-passwd"></xref>.</listitem>
- </varlistentry>
- <varlistentry>
- <term>Fallback</term>
- <listitem>If none of the schemes given for <literal>db_home:</literal>
- define a non-empty directory, the user's home directory is set to
- <filename>/home/$USERNAME</filename>.</listitem>
- </varlistentry>
-</variablelist>
-
-<para>
-As has been briefly mentioned before, the default setting for
-<literal>db_home:</literal> is
-</para>
-
-<screen>
- db_home: cygwin desc
-</screen>
-
-<para>
-So, for AD accounts Cygwin tries to fetch the path from the user's
-<literal>cygwinHome</literal> attribute first. If that's not available,
-or if the account is a local SAM account, Cygwin tries to get the home
-directory from the <literal>home=</literal> attribute of the user's
-<literal>description</literal> field. If that's not available, Cygwin
-falls back to the path <filename>/home/$USERNAME</filename>.
-</para>
-
-</sect4>
-
-<sect4 id="ntsec-mapping-nsswitch-shell"><title id="ntsec-mapping-nsswitch-shell.title">The <literal>db_shell:</literal> setting</title>
-
-<para>
-The <literal>db_shell:</literal> setting defines how Cygwin fetches the user's
-login shell, the content of the <literal>pw_shell</literal> member of the
-user's passwd entry. The following list describes the meaning of each schema
-when used with <literal>db_shell:</literal>
-</para>
-
-<variablelist>
- <varlistentry>
- <term><literal>windows</literal></term>
- <listitem>The <literal>windows</literal> schema is ignored for now.
- The logical choice would be CMD, but that introduces some
- problems, for instance the fact that CMD has no concept of
- running as <literal>login shell</literal>. This may change
- in future.</listitem>
- </varlistentry>
- <varlistentry>
- <term><literal>cygwin</literal></term>
- <listitem>AD only: The user's home directory is set to the POSIX path given
- in the <literal>cygwinShell</literal> attribute from the
- <literal>cygwinUser</literal> auxiliary class.
- See also <xref linkend="ntsec-mapping-nsswitch-cygwin"></xref>.
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><literal>unix</literal></term>
- <listitem>AD only: The user's login shell is set to the POSIX path given
- in the <literal>loginShell</literal> attribute from the
- <literal>posixAccount</literal> auxiliary class.
- See also <xref linkend="ntsec-mapping-nsswitch-posix"></xref>.
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><literal>desc</literal></term>
- <listitem>The user's login shell is set to the POSIX path given in the
- shell="..." XML-alike setting in the user's
- <literal>description</literal> attribute in SAM or AD.
- See <xref linkend="ntsec-mapping-nsswitch-desc"></xref>
- for a detailed description.</listitem>
- </varlistentry>
- <varlistentry>
- <term><literal>@ad_attribute</literal></term>
- <listitem>AD only: The user's login shell is set to the path given
- in the <literal>ad_attribute</literal> attribute. The path
- can be given as Windows or POSIX path.</listitem>
- </varlistentry>
- <varlistentry>
- <term><literal>/path</literal></term>
- <listitem>The user's login shell is set to the given POSIX path.
- Albeit not being as important here, the wildcards described in
- <xref linkend="ntsec-mapping-nsswitch-passwd"></xref>
- are also available for specifying a login shell path.</listitem>
- </varlistentry>
- <varlistentry>
- <term>Fallback</term>
- <listitem>If none of the schemes given for <literal>db_shell:</literal>
- define a non-empty pathname, the user's login shell is set to
- <filename>/bin/bash</filename>.</listitem>
- </varlistentry>
-</variablelist>
-
-<para>
-As for <literal>db_home:</literal>, the default setting for
-<literal>db_shell:</literal> is
-</para>
-
-<screen>
- db_shell: cygwin desc
-</screen>
-
-<para>
-So, for AD accounts Cygwin tries to fetch the path from the user's
-<literal>cygwinShell</literal> attribute first. If that's not available,
-or if the account is a local SAM account, Cygwin tries to get the home
-directory from the <literal>shell=</literal> attribute of the user's
-<literal>description</literal> field. If that's not available, Cygwin
-falls back to <filename>/bin/bash</filename>.
-</para>
-
-</sect4>
-
-<sect4 id="ntsec-mapping-nsswitch-gecos"><title id="ntsec-mapping-nsswitch-gecos.title">The <literal>db_gecos:</literal> setting</title>
-
-<para>
-The <literal>db_gecos:</literal> setting defines how to fetch additional
-content for the <literal>pw_gecos</literal> member of the user's passwd entry.
-There's always a fixed, Cygwin-specific part in the <literal>pw_gecos</literal>
-field for identifying the account. However, an administrator might want to
-add informative content like, for instance, the user's full name. That's
-what the <literal>db_gecos:</literal> setting is for.
-The following list describes the meaning of each schema when used with
-<literal>db_gecos:</literal>
-</para>
-
-<variablelist>
- <varlistentry>
- <term><literal>windows</literal></term>
- <listitem>Add the AD <literal>displayName</literal> attribute or, for
- SAM accounts, the "Full name" entry to the
- <literal>pw_gecos</literal> field.</listitem>
- </varlistentry>
- <varlistentry>
- <term><literal>cygwin</literal></term>
- <listitem>AD only: The content of the <literal>cygwinGecos</literal>
- attribute from the <literal>cygwinUser</literal> auxiliary class
- is added to <literal>pw_gecos</literal>.
- See also <xref linkend="ntsec-mapping-nsswitch-cygwin"></xref>.
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><literal>unix</literal></term>
- <listitem>AD only: The content of the <literal>gecos</literal> attribute
- from the <literal>posixAccount</literal> auxiliary class
- is added to <literal>pw_gecos</literal>.
- See also <xref linkend="ntsec-mapping-nsswitch-posix"></xref>.
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><literal>desc</literal></term>
- <listitem>The content of the gecos="..." XML-alike setting in the user's
- <literal>description</literal> attribute in SAM or AD is added
- to <literal>pw_gecos</literal>.
- See <xref linkend="ntsec-mapping-nsswitch-desc"></xref>
- for a detailed description.</listitem>
- </varlistentry>
- <varlistentry>
- <term><literal>@ad_attribute</literal></term>
- <listitem>AD only: The content of the <literal>ad_attribute</literal>
- attribute is added to <literal>pw_gecos</literal>.</listitem>
- </varlistentry>
- <varlistentry>
- <term><literal>/path</literal></term>
- <listitem>The string following the slash is added to
- <literal>pw_gecos</literal>. Here, the wildcards described in
- <xref linkend="ntsec-mapping-nsswitch-passwd"></xref>
- may come in handy.</listitem>
- </varlistentry>
- <varlistentry>
- <term>Fallback</term>
- <listitem>If none of the schemes given for <literal>db_gecos:</literal>
- define a non-empty pathname, nothing is added to
- <literal>pw_gecos</literal>.</listitem>
- </varlistentry>
-</variablelist>
-
-<para>
-As for <literal>db_home:</literal> and <literal>db_shell:</literal>, the
-default setting for <literal>db_gecos:</literal> is
-</para>
-
-<screen>
- db_gecos: cygwin desc
-</screen>
-
-<para>
-So, for AD accounts Cygwin tries to fetch the string from the user's
-<literal>cygwinGecos</literal> attribute first. If that's not available,
-or if the account is a local SAM account, Cygwin tries to get the home
-directory from the <literal>gecos=</literal> attribute of the user's
-<literal>description</literal> field. If that's not available, Cygwin
-just doesn't add anything to <literal>pw_gecos</literal>.
-</para>
-
-</sect4>
-
-<sect4 id="ntsec-mapping-nsswitch-cygwin"><title id="ntsec-mapping-nsswitch-cygwin.title">The <literal>cygwin</literal> schema</title>
-
-<para>
-The <literal>cygwin</literal> schema is based on a Cygwin-specific Active
-Directory schema extension. Using this schema extension allows to maintain
-Cygwin-specific settings entirely within AD, without colliding with any other
-schema.
-</para>
-
-<para>
-The cygwin schema extension is available in a default Cygwin installation
-in the file <filename>/usr/share/cygwin/cygwin.ldif</filename>. To install
-the schema extension, you have to be schema admin, and you have to run the
-<command>ldifde</command> command on the schema master. The installation
-itself is rather simple. Assuming you're schema admin and running a shell
-with administrative privileges:
-</para>
-
-<screen>
- $ cd /usr/share/cygwin
- $ ldifde -i -f cygwin.ldif -k -c "CN=schema,CN=Configuration,DC=X" #schemaNamingContext
-</screen>
-
-<para>
-Afterwards, the auxiliary class <literal>cygwinUser</literal> is attached to
-the class <literal>User</literal>, and the auxiliary class
-<literal>cygwinGroup</literal> is attached to the class
-<literal>Group</literal>. The new attributes can be immediately edited
-using <command>ADSI Edit</command>.
-</para>
-
-<para>
-At the time of writing the following attributes are utilized by Cygwin:
-</para>
-
-<segmentedlist><?dbhtml list-presentation="table"?>
- <seglistitem>
- <seg><literal>cygwinHome</literal></seg>
- <seg>Used as Cygwin home directory with <literal>db_home: cygwin</literal>.
- See <xref linkend="ntsec-mapping-nsswitch-home"></xref>.</seg>
- </seglistitem>
- <seglistitem>
- <seg><literal>cygwinShell</literal></seg>
- <seg>Used as Cygwin login shell with <literal>db_shell: cygwin</literal>.
- See <xref linkend="ntsec-mapping-nsswitch-shell"></xref>.</seg>
- </seglistitem>
- <seglistitem>
- <seg><literal>cygwinGecos</literal></seg>
- <seg>Content will be added to the pw_gecos field with
- <literal>db_gecos: cygwin</literal>.
- See <xref linkend="ntsec-mapping-nsswitch-gecos"></xref>.</seg>
- </seglistitem>
-<!--
- <seglistitem>
- <seg><literal>cygwinFstab</literal></seg>
- <seg>yada yada yada</seg>
- </seglistitem>
- <seglistitem>
- <seg><literal>cygwinUnixUid</literal></seg>
- <seg>See <xref linkend="ntsec-mapping-nfs"></xref> and
- <xref linkend="ntsec-mapping-samba"></xref>.</seg>
- </seglistitem>
-
-<para>
-The group attributes utilized by Cygwin are:
-</para>
-
-</segmentedlist>
- <seglistitem>
- <seg><literal>cygwinUnixGid</literal></seg>
- <seg>See <xref linkend="ntsec-mapping-nfs"></xref> and
- <xref linkend="ntsec-mapping-samba"></xref>.</seg>
- </seglistitem>
-</segmentedlist>
--->
-</segmentedlist>
-
-</sect4>
-
-<sect4 id="ntsec-mapping-nsswitch-posix"><title id="ntsec-mapping-nsswitch-posix.title">The <literal>unix</literal> schema</title>
-
-<para>
-The <literal>unix</literal> schema utilizes the
-<literal>posixAccount</literal> attribute extension. This is one of two
-schema extensions which are connected to AD accounts, available by default
-starting with Windows Server 2003 R2. They are usually
-<literal>not set</literal>, unless used by the Active Directory
-<literal>Server for NIS</literal> feature (deprecated since Server 2012 R2).
-
-Two schemata are interesting for Cygwin, <literal>posixAccount</literal>,
-connected to user accounts, and <literal>posixGroup</literal>, connected
-to group accounts. Both follow the description of RFC 2307,
-<ulink url="https://tools.ietf.org/html/rfc2307">an Approach for Using LDAP as
-a Network Information Service</ulink>.
-The user attributes utilized by Cygwin are:
-</para>
-
-<segmentedlist><?dbhtml list-presentation="table"?>
- <seglistitem>
- <seg><literal>unixHomeDirectory</literal></seg>
- <seg>Used as Cygwin home directory with <literal>db_home: unix</literal>.
- See <xref linkend="ntsec-mapping-nsswitch-home"></xref>.</seg>
- </seglistitem>
- <seglistitem>
- <seg><literal>loginShell</literal></seg>
- <seg>Used as Cygwin login shell with <literal>db_shell: unix</literal>.
- See <xref linkend="ntsec-mapping-nsswitch-shell"></xref>.</seg>
- </seglistitem>
- <seglistitem>
- <seg><literal>gecos</literal></seg>
- <seg>Content will be added to the pw_gecos field with
- <literal>db_gecos: unix</literal>.
- See <xref linkend="ntsec-mapping-nsswitch-gecos"></xref>.</seg>
- </seglistitem>
- <seglistitem>
- <seg><literal>uidNumber</literal></seg>
- <seg>See <xref linkend="ntsec-mapping-nfs"></xref> and
- <xref linkend="ntsec-mapping-samba"></xref>.</seg>
- </seglistitem>
-</segmentedlist>
-
-<para>
-The group attributes utilized by Cygwin are:
-</para>
-
-<segmentedlist><?dbhtml list-presentation="table"?>
- <seglistitem>
- <seg><literal>gidNumber</literal></seg>
- <seg>See <xref linkend="ntsec-mapping-nfs"></xref> and
- <xref linkend="ntsec-mapping-samba"></xref>.</seg>
- </seglistitem>
-</segmentedlist>
-
-<para>
-Apart from power shell scripting or inventing new CLI tools, these attributes
-can be changed using the <literal>Attribute Editor</literal> tab in the user
-properties dialog of the <literal>Active Directory Users and Computers</literal>
-MMC snap-in. Alternatively, if the <literal>Server for NIS</literal>
-administration feature has been installed, there will be a
-<literal>UNIX Attributes</literal> tab which contains the required fields,
-except for the gecos field. Last resort is <command>ADSI Edit</command>.
-</para>
-
-</sect4>
-
-<sect4 id="ntsec-mapping-nsswitch-desc"><title id="ntsec-mapping-nsswitch-desc.title">The <literal>desc</literal> schema</title>
-
-<para>
-When using user accounts from the local account database, the SAM, there
-are only a very limited number of settings available. In contrast to
-Active Directory there's no way to add fields to a user's entry. You have
-to make do with the fields available. The method to utilize the
-<literal>description</literal> field has been mainly introduced for those
-accounts, usually the only ones a home user has. However, for symmetry,
-and because there may be a reason to use this in an AD environment, this
-schema is also supported for AD users.
-</para>
-
-<note>
-<para>
-The presentation of local user account settings on Windows is confusing,
-to say the least. The <literal>description</literal> field is not visible at
-all in the user settings available via the <literal>User Accounts</literal>
-control settings. And while it's called <literal>Description</literal> in the
-<literal>Local Users and Groups</literal> MMC snap-in (available, for instance,
-via the <literal>Computer Management</literal> GUI), in the command
-line tool <command>net user</command> the same field is called
-<literal>comment</literal>. The latter is especially confusing for
-AD admins, because the <literal>comment</literal> attribute in AD is called
-<literal>usercomment</literal> on the command line. Confused? Never mind,
-you're not the only one...
-</para>
-</note>
-
-<para>
-Fortunately you can utilize the <literal>description</literal> field even if
-you're running a "home edition" of Windows, by using the command line. The
-<command>net user</command> command allows to set all values in the SAM, even
-if the GUI is crippled.
-</para>
-
-<para>
-A Cygwin SAM comment entry looks like this:
-</para>
-
-<screen>
-&lt;cygwin key="value" key="value" [...] /&gt;
-</screen>
-
-<para>
-The supported keys are:
-</para>
-
-<segmentedlist><?dbhtml list-presentation="table"?>
- <seglistitem>
- <seg><literal>home="value"</literal></seg>
- <seg>Sets the Cygwin home dir to value.</seg>
- </seglistitem>
- <seglistitem>
- <seg><literal>shell="value"</literal></seg>
- <seg>Sets the Cygwin login shell to value.</seg>
- </seglistitem>
- <seglistitem>
- <seg><literal>gecos="value"</literal></seg>
- <seg>Adds the string value to the user's gecos field.</seg>
- </seglistitem>
-</segmentedlist>
-
-<para>
-The next two settings are only supported for SAM accounts.
-</para>
-
-<segmentedlist><?dbhtml list-presentation="table"?>
- <seglistitem>
- <seg><literal>group="value"</literal></seg>
- <seg>Sets the Cygwin primary group of the account to value, provided that
- the user <emphasis>is</emphasis> already a member of that group.
- This allows to override the default <literal>None</literal> primary
- group for local accounts. One nice idea here is, for instance,
- group="Users".</seg>
- </seglistitem>
- <seglistitem>
- <seg><literal>unix="value"</literal></seg>
- <seg>Sets the NFS/Samba uid of the user to the decimal value.
- See <xref linkend="ntsec-mapping-nfs"></xref> and
- <xref linkend="ntsec-mapping-samba"></xref>.</seg>
- </seglistitem>
-</segmentedlist>
-
-<para>
-The &lt;cygwin .../&gt; string can start at any point in the comment, but
-you have to follow the rules:
-</para>
-
-<itemizedlist spacing="compact">
-<listitem>
-It starts with "&lt;cygwin " and ends with "/&gt;".
-</listitem>
-<listitem>
-The "cygwin" string and the key names have to be lowercase.
-</listitem>
-<listitem>
-No spaces between key and "value", just the equal sign.
-</listitem>
-<listitem>
-The value must be placed within double quotes and it must not contain a double
-quote itself. The double quotes are required for the decimal values as well!
-</listitem>
-</itemizedlist>
-
-<note>
-<para>
-There's also a length restriction imposed by Windows. The
-<literal>description</literal> entry has a maximumn length of 1023 characters.
-</para>
-</note>
-
-<para>
-CMD example:
-</para>
-
-<screen>
-net user corinna /comment:"&lt;cygwin home=\"/home/foo\"/&gt;"
-</screen>
-
-<para>
-Bash example (use single quotes):
-</para>
-
-<screen>
-net user corinna /comment:'&lt;cygwin home="/home/foo"/&gt;'
-</screen>
-
-<para>
-For changing group comments, use the `net localgroup' command. The supported
-key/value pair for SAM groups are:
-</para>
-
-<segmentedlist><?dbhtml list-presentation="table"?>
- <seglistitem>
- <seg><literal>unix="value"</literal></seg>
- <seg>Sets the NFS/Samba gid of the group to the decimal value.
- See <xref linkend="ntsec-mapping-nfs"></xref> and
- <xref linkend="ntsec-mapping-samba"></xref>.</seg>
- </seglistitem>
-</segmentedlist>
-
-</sect4>
-
-</sect3>
-
-<sect3 id="ntsec-mapping-nfs"><title id="ntsec-mapping-nfs.title">NFS account mapping</title>
-
-<para>
-Microsoft's NFS client does not map the uid/gid values on the NFS shares
-to SIDs. There's no such thing as a (fake) security descriptor returned
-to the application. Rather, via an undocumented API an application can
-fetch <ulink url="https://tools.ietf.org/html/rfc1813">RFC 1813</ulink>
-compatible NFSv3 stat information from the share. This is what Cygwin is
-using to show stat information for files on NFS shares.
-</para>
-
-<para>
-The problem is, while all other information in this stat record, like
-timestamps, file size etc., can be used by Cygwin, Cygwin had no way to
-map the values of the st_uid and st_gid members to a Windows SID for a
-long time. So it just faked the file owner info and claimed that it's
-you.
-</para>
-
-<para>
-However, SFU has, over time, developed multiple methods to map UNIX
-uid/gid values on NFS shares to Windows SIDs. You'll find the full
-documentation of the mapping methods in
-<ulink url="http://blogs.technet.com/b/filecab/archive/2012/10/09/nfs-identity-mapping-in-windows-server-2012.aspx">NFS Identity Mapping in Windows Server 2012</ulink>
-</para>
-
-<para>
-Cygwin now utilizes the
-<ulink url="https://tools.ietf.org/html/rfc2307">RFC 2307</ulink>
-mapping for this purpose. This is most of the time provided by an AD domain,
-but it could also be a standalone LDAP mapping server. Per
-<ulink url="https://tools.ietf.org/html/rfc2307">RFC 2307</ulink>, the uid is
-in the attribute <literal>uidNumber</literal>. For groups, the gid is in the
-<literal>gidNumber</literal> attribute.
-See <xref linkend="ntsec-mapping-nsswitch-posix"></xref>.
-</para>
-
-<para>
-When Cygwin stat()s files on an NFS share, it asks the mapping server via
-LDAP in two different ways, depending on the role of the mapping server.
-</para>
-
-<itemizedlist spacing="compact">
-
-<listitem>
-If the server is an AD domain controller, it asks for an account with
-<literal>uidNumber</literal> attribute == <literal>st_uid</literal> field of
-the stat record returned by NFS. If an account matches, AD returns the
-Windows SID, so we have an immediate mapping from UNIX uid to a Windows SID,
-if the user account has a valid <literal>uidNumber</literal> attribute. For
-groups, the method is the same, just that Cygwin asks for a group with
-<literal>gidNumber</literal> attribute == <literal>st_gid</literal> field of the
-stat record.
-</listitem>
-
-<listitem>
-If the server is a standalone LDAP mapping server Cygwin asks for the
-same <literal>uidNumber</literal>/<literal>gidNumber</literal> attributes, but
-it can't expect that the LDAP server knows anything about Windows SIDs.
-Rather, the mapping server returns the account name. Cygwin then asks the
-DC for an account with this name, and if that succeeds, we have a mapping
-between UNIX uid/gid and Windows SIDs.
-</listitem>
-
-</itemizedlist>
-
-<para>
-The mapping will be cached for the lifetime of the process, and inherited
-by child processes.
-</para>
-
-</sect3>
-
-<sect3 id="ntsec-mapping-samba"><title id="ntsec-mapping-samba.title">Samba account mapping</title>
-
-<para>
-A fully set up Samba file server with domain integration is running winbindd to
-map Window SIDs to artificially created UNIX uids and gids, and this mapping is
-transparent within the domain, so Cygwin doesn't have to do anything special.
-</para>
-
-<para>
-However, setting up winbindd isn't for everybody, and it fails to map
-Windows accounts to already existing UNIX users or groups. In contrast
-to NFS, Samba returns security descriptors, but unmapped UNIX accounts
-get special SIDs:
-</para>
-
-<itemizedlist spacing="compact">
-
-<listitem>
-A UNIX user account with uid X is mapped to the Windows SID S-1-22-1-X.
-</listitem>
-
-<listitem>
-A UNIX group account with gid X is mapped to SID S-1-22-2-X.
-</listitem>
-
-</itemizedlist>
-
-<para>
-As you can see, even though we have SIDs, they just reflect the actual
-uid/gid values on the UNIX box in the RID value. It's only marginally
-different from the NFS method, so why not just use the same method as
-for NFS?
-</para>
-
-<para>
-That's what Cygwin will do. If it encounters a S-1-22-x-y SID, it
-will perform the same
-<ulink url="https://tools.ietf.org/html/rfc2307">RFC 2307</ulink>
-mapping as for NFS shares.
-</para>
-
-<para>
-For home users without any Windows domain or LDAP server per
-<ulink url="https://tools.ietf.org/html/rfc2307">RFC 2307</ulink>,
-but with a Linux machine running Samba, just add this information to
-your SAM account. Assuming the uid of your Linux user account is 505
-and the gid of your primary group is, say, 100, just add the values to
-your SAM user and group accounts. The following example assumes you
-didn't already add something else to the comment field.
-</para>
-
-<para>
-To your user's SAM comment (remember: called <literal>Description</literal>
-in the GUI),
-add:
-</para>
-
-<screen>
- &lt;cygwin group="Users" unix="505"/&gt;
-</screen>
-
-<para>
-To the user's group SAM comment add:
-</para>
-
-<screen>
- &lt;cygwin unix="100"/&gt;
-</screen>
-
-<para>
-This should be sufficient to work on your Samba share and to see
-all files owned by your Linux user account as your files.
-</para>
-
-</sect3>
-
-</sect2>
-
-<sect2 id="ntsec-files"><title id="ntsec-files.title">File permissions</title>
-
-<para>On NTFS and if the <literal>noacl</literal> mount option is not
-specified for a mount point, Cygwin sets file permissions as on POSIX
-systems. Basically this is done by defining a Security Descriptor with the
-matching owner and group SIDs, and a DACL which contains ACEs for the owner,
-the group and for "Everyone", which represents what POSIX calls "others".</para>
-
-<para>There's just one problem when trying to map the POSIX permission model
-onto the Windows permission model.</para>
-
-<para>There's a leak in the definition of a "correct" ACL which disallows a
-certain POSIX permission setting. The official documentation explains in short
-the following:</para>
-
-<itemizedlist spacing="compact">
-<listitem><para>The requested permissions are checked against all
-ACEs of the user as well as all groups the user is member of. The
-permissions given in these user and groups access allowed ACEs are
-accumulated and the resulting set is the set of permissions of that
-user given for that object.</para></listitem>
-
-<listitem><para>The order of ACEs is important. The system reads them in
-sequence until either any single requested permission is denied or all
-requested permissions are granted. Reading stops when this condition is
-met. Later ACEs are not taken into account.</para></listitem>
-
-<listitem><para>All access denied ACEs <emphasis
-role='bold'>should</emphasis> precede any access allowed ACE. ACLs
-following this rule are called "canonical"</para></listitem>
-</itemizedlist>
-
-<para>Note that the last rule is a preference or a definition of
-correctness. It's not an absolute requirement. All Windows kernels
-will correctly deal with the ACL regardless of the order of allow and
-deny ACEs. The second rule is not modified to get the ACEs in the
-preferred order.</para>
-
-<para>Unfortunately the security tab in the file properties dialog of
-the Windows Explorer insists to rearrange the order of the ACEs to
-canonical order before you can read them. Thank God, the sort order
-remains unchanged if one presses the Cancel button. But don't even
-<emphasis role='bold'>think</emphasis> of pressing OK...</para>
-
-<para>Canonical ACLs are unable to reflect each possible combination
-of POSIX permissions. Example:</para>
-
-<screen>
-rw-r-xrw-
-</screen>
-
-<para>Ok, so here's the first try to create a matching ACL, assuming
-the Windows permissions only have three bits, as their POSIX counterpart:
-</para>
-
-<screen>
-UserAllow: 110
-GroupAllow: 101
-OthersAllow: 110
-</screen>
-
-<para>Hmm, because of the accumulation of allow rights the user may
-execute because the group may execute.</para>
-
-<para>Second try:</para>
-
-<screen>
-UserDeny: 001
-GroupAllow: 101
-OthersAllow: 110
-</screen>
-
-<para>Now the user may read and write but not execute. Better? No!
-Unfortunately the group may write now because others may write.</para>
-
-<para>Third try:</para>
-
-<screen>
-UserDeny: 001
-GroupDeny: 010
-GroupAllow: 001
-OthersAllow: 110
-</screen>
-
-<para>Now the group may not write as intended but unfortunately the user may
-not write anymore, either. How should this problem be solved? According to
-the canonical order a UserAllow has to follow the GroupDeny but it's
-easy to see that this can never be solved that way.</para>
-
-<para>The only chance:</para>
-
-<screen>
-UserDeny: 001
-UserAllow: 010
-GroupDeny: 010
-GroupAllow: 001
-OthersAllow: 110
-</screen>
-
-<para>Again: This works on all existing versions of Windows NT, at the
-time of writing from at least Windows XP up to Server 2012 R2. Only
-the GUIs aren't able (or willing) to deal with that order.</para>
-
-</sect2>
-
-<sect2 id="ntsec-setuid-overview"><title id="ntsec-setuid-overview.title">Switching the user context</title>
-
-<para>Since Windows XP, Windows users have been accustomed to the
-"Switch User" feature, which switches the entire desktop to another user
-while leaving the original user's desktop "suspended". Another Windows
-feature is the "Run as..." context menu entry, which allows you to start
-an application using another user account when right-clicking on applications
-and shortcuts.</para>
-
-<para>On POSIX systems, this operation can be performed by processes
-running under the privileged user accounts (usually the "root" user
-account) on a per-process basis. This is called "switching the user
-context" for that process, and is performed using the POSIX
-<command>setuid</command> and <command>seteuid</command> system
-calls.</para>
-
-<para>While this sort of feature is available on Windows as well,
-Windows does not support the concept of these calls in a simple fashion.
-Switching the user context in Windows is generally a tricky process with
-lots of "behind the scenes" magic involved.</para>
-
-<para>Windows uses so-called `access tokens' to identify a user and its
-permissions. Usually the access token is created at logon time and then
-it's attached to the starting process. Every new process within a session
-inherits the access token from its parent process. Every thread can
-get its own access token, which allows, for instance, to define threads
-with restricted permissions.</para>
-
-<sect3 id="ntsec-logonuser"><title id="ntsec-logonuser.title">Switching the user context with password authentication</title>
-
-<para>To switch the user context, the process has to request such an access
-token for the new user. This is typically done by calling the Win32 API
-function <command>LogonUser</command> with the user name and the user's
-cleartext password as arguments. If the user exists and the password was
-specified correctly, the access token is returned and either used in
-<command>ImpersonateLoggedOnUser</command> to change the user context of
-the current thread, or in <command>CreateProcessAsUser</command> to
-change the user context of a spawned child process.</para>
-
-<para>Later versions of Windows define new functions in this context and
-there are also functions to manipulate existing access tokens (usually
-only to restrict them). Windows Vista also adds subtokens which are
-attached to other access tokens which plays an important role in the UAC
-(User Access Control) facility of Vista and later. However, none of
-these extensions to the original concept are important for this
-documentation.</para>
-
-<para>Back to this logon with password, how can this be used to
-implement <command>set(e)uid</command>? Well, it requires modification
-of the calling application. Two Cygwin functions have been introduced
-to support porting <command>setuid</command> applications which only
-require login with passwords. You only give Cygwin the right access
-token and then you can call <command>seteuid</command> or
-<command>setuid</command> as usual in POSIX applications. Porting such
-a <command>setuid</command> application is illustrated by a short
-example:</para>
-
-<screen>
-<![CDATA[
-/* First include all needed cygwin stuff. */
-#ifdef __CYGWIN__
-#include <windows.h>
-#include <sys/cygwin.h>
-#endif
-
-[...]
-
- struct passwd *user_pwd_entry = getpwnam (username);
- char *cleartext_password = getpass ("Password:");
-
-[...]
-
-#ifdef __CYGWIN__
- /* Patch the typical password test. */
- {
- HANDLE token;
-
- /* Try to get the access token from Windows. */
- token = cygwin_logon_user (user_pwd_entry, cleartext_password);
- if (token == INVALID_HANDLE_VALUE)
- error_exit;
- /* Inform Cygwin about the new impersonation token. */
- cygwin_set_impersonation_token (token);
- /* Cygwin is now able, to switch to that user context by setuid or seteuid calls. */
- }
-#else
- /* Use standard method on non-Cygwin systems. */
- hashed_password = crypt (cleartext_password, salt);
- if (!user_pwd_entry ||
- strcmp (hashed_password, user_pwd_entry->pw_passwd))
- error_exit;
-#endif /* CYGWIN */
-
-[...]
-
- /* Everything else remains the same! */
-
- setegid (user_pwd_entry->pw_gid);
- seteuid (user_pwd_entry->pw_uid);
- execl ("/bin/sh", ...);
-]]>
-
-</screen>
-
-</sect3>
-
-<sect3 id="ntsec-nopasswd1"><title id="ntsec-nopasswd1.title">Switching the user context without password, Method 1: Create a token from scratch</title>
-
-<para>An unfortunate aspect of the implementation of
-<command>set(e)uid</command> is the fact that the calling process
-requires the password of the user to which to switch. Applications such as
-<command>sshd</command> wishing to switch the user context after a
-successful public key authentication, or the <command>cron</command>
-application which, again, wants to switch the user without any authentication
-are stuck here. But there are other ways to get new user tokens.</para>
-
-<para>One way is just to create a user token from scratch. This is
-accomplished by using an (officially undocumented) function on the NT
-function level. The NT function level is used to implement the Win32
-level, and, as such is closer to the kernel than the Win32 level. The
-function of interest, <command>NtCreateToken</command>, allows you to
-specify user, groups, permissions and almost everything you need to
-create a user token, without the need to specify the user password. The
-only restriction for using this function is that the calling process
-needs the "Create a token object" user right, which only the SYSTEM user
-account has by default, and which is considered the most dangerous right
-a user can have on Windows systems.</para>
-
-<para>That sounds good. We just start the servers which have to switch
-the user context (<command>sshd</command>, <command>inetd</command>,
-<command>cron</command>, ...) as Windows services under the SYSTEM
-(or LocalSystem in the GUI) account and everything just works.
-Unfortunately that's too simple. Using <command>NtCreateToken</command>
-has a few drawbacks.</para>
-
-<para>First of all, beginning with Windows Server 2003,
-the permission "Create a token object" gets explicitly removed from
-the SYSTEM user's access token, when starting services under that
-account. That requires us to create a new account with this specific
-permission just to run this kind of services. But that's a minor
-problem.</para>
-
-<para>A more important problem is that using <command>NtCreateToken</command>
-is not sufficient to create a new logon session for the new user. What
-does that mean? Every logon usually creates a new logon session.
-A logon session has a couple of attributes which are unique to the
-session. One of these attributes is the fact, that Windows functions
-identify the user domain and user name not by the SID of the access
-token owner, but only by the logon session the process is running under.</para>
-
-<para>This has the following unfortunate consequence. Consider a
-service started under the SYSTEM account (up to Windows XP) switches the
-user context to DOMAIN\my_user using a token created directly by calling
-the <command>NtCreateToken</command> function. A process running under
-this new access token might want to know under which user account it's
-running. The corresponding SID is returned correctly, for instance
-S-1-5-21-1234-5678-9012-77777. However, if the same process asks the OS
-for the user name of this SID something wierd happens. For instance,
-the <command>LookupAccountSid</command> function will not return
-"DOMAIN\my_user", but "NT AUTHORITY\SYSTEM" as the user name.</para>
-
-<para>You might ask "So what?" After all, this only <emphasis
-role='bold'>looks</emphasis> bad, but functionality and permission-wise
-everything should be ok. And Cygwin knows about this shortcoming so it
-will return the correct Cygwin username when asked. Unfortunately this
-is more complicated. Some native, non-Cygwin Windows applications will
-misbehave badly in this situation. A well-known example are certain versions
-of Visual-C++.</para>
-
-<para>Last but not least, you don't have the usual comfortable access
-to network shares. The reason is that the token has been created
-without knowing the password. The password are your credentials
-necessary for network access. Thus, if you logon with a password, the
-password is stored hidden as "token credentials" within the access token
-and used as default logon to access network resources. Since these
-credentials are missing from the token created with
-<command>NtCreateToken</command>, you only can access network shares
-from the new user's process tree by using explicit authentication, on
-the command line for instance:</para>
-
-<screen>
-bash$ net use '\\server\share' /user:DOMAIN\my_user my_users_password
-</screen>
-
-<para>Note that, on some systems, you can't even define a drive letter
-to access the share, and under some circumstances the drive letter you
-choose collides with a drive letter already used in another session.
-Therefore it's better to get used to accessing these shares using the UNC
-path as in</para>
-
-<screen>
-bash$ grep foo //server/share/foofile
-</screen>
-
-</sect3>
-
-<sect3 id="ntsec-nopasswd2"><title id="ntsec-nopasswd2.title">Switching the user context without password, Method 2: LSA authentication package</title>
-
-<para>We're looking for another way to switch the user context without
-having to provide the password. Another technique is to create an
-LSA authentication package. LSA is an acronym for "Local Security Authority"
-which is a protected part of the operating system which only allows changes
-to become active when rebooting the system after the change. Also, as soon as
-the LSA encounters serious problems (for instance, one of the protected
-LSA processes died), it triggers a system reboot. LSA is the part of
-the OS which cares for the user logons and which also creates logon
-sessions.</para>
-
-<para>An LSA authentication package is a DLL which has to be installed
-as part of the LSA. This is done by tweaking a special registry key.
-Cygwin provides such an authentication package. It has to be installed
-and the machine has to be rebooted to activate it. This is the job of the
-shell script <filename>/usr/bin/cyglsa-config</filename> which is part of
-the Cygwin package.</para>
-
-<para>After running <filename>/usr/bin/cyglsa-config</filename> and
-rebooting the system, the LSA authentication package is used by Cygwin
-when <command>set(e)uid</command> is called by an application. The
-created access token using this method has its own logon session.</para>
-
-<para>This method has two advantages over the <command>NtCreateToken</command>
-method.</para>
-
-<para>The very special and very dangerous "Create a token object" user
-right is not required by a user using this method. Other privileged
-user rights are still necessary, especially the "Act as part of the
-operating system" right, but that's just business as usual.</para>
-
-<para>The user is correctly identified, even by delicate native applications
-which choke on that using the <command>NtCreateToken</command> method.</para>
-
-<para>Disadvantages? Yes, sure, this is Windows. The access token
-created using LSA authentication still lacks the credentials for network
-access. After all, there still hasn't been any password authentication
-involved. The requirement to reboot after every installation or
-deinstallation of the cygwin LSA authentication DLL is just a minor
-inconvenience compared to that...</para>
-
-<para>Nevertheless, this is already a lot better than what we get by
-using <command>NtCreateToken</command>, isn't it?</para>
-
-</sect3>
-
-<sect3 id="ntsec-nopasswd3"><title id="ntsec-nopasswd3.title">Switching the user context without password, Method 3: With password</title>
-
-<para>Ok, so we have solved almost any problem, except for the network
-access problem. Not being able to access network shares without
-having to specify a cleartext password on the command line or in a
-script is a harsh problem for automated logons for testing purposes
-and similar stuff.</para>
-
-<para>Fortunately there is a solution, but it has its own drawbacks.
-But, first things first, how does it work? The title of this section
-says it all. Instead of trying to logon without password, we just logon
-with password. The password gets stored two-way encrypted in a hidden,
-obfuscated area of the registry, the LSA private registry area. This
-part of the registry contains, for instance, the passwords of the Windows
-services which run under some non-default user account.</para>
-
-<para>So what we do is to utilize this registry area for the purpose of
-<command>set(e)uid</command>. The Cygwin command <command><link
-linkend="passwd">passwd</link> -R</command> allows a user to specify
-his/her password for storage in this registry area. When this user
-tries to login using ssh with public key authentication, Cygwin's
-<command>set(e)uid</command> examines the LSA private registry area and
-searches for a Cygwin specific key which contains the password. If it
-finds it, it calls <command>LogonUser</command> under the hood, using
-this password. If that works, <command>LogonUser</command> returns an
-access token with all credentials necessary for network access.</para>
-
-<para>For good measure, and since this way to implement
-<command>set(e)uid</command> is not only used by Cygwin but also by
-Microsoft's SFU (Services for Unix), we also look for a key stored by
-SFU (using the SFU command <command>regpwd</command>) and use that if it's
-available.</para>
-
-<para>We got it. A full access token with its own logon session, with
-all network credentials. Hmm, that's heaven...</para>
-
-<para>Back on earth, what about the drawbacks?</para>
-
-<para>First, adding a password to the LSA private registry area
-requires administrative access. So calling <command>passwd -R</command>
-as a normal user will fail! Cygwin provides a workaround for
-this. If <command>cygserver</command> is started as a service running
-under the SYSTEM account (which is the default way to run
-<command>cygserver</command>) you can use <command>passwd -R</command>
-as normal, non-privileged user as well.</para>
-
-<para>Second, as aforementioned, the password is two-way encrypted in a
-hidden, obfuscated registry area. Only SYSTEM has access to this area
-for listing purposes, so, even as an administrator, you can't examine
-this area with regedit. Right? No. Every administrator can start
-regedit as SYSTEM user:</para>
-
-<screen>
-bash$ date
-Tue Dec 2 16:28:03 CET 2008
-bash$ at 16:29 /interactive regedit.exe
-</screen>
-
-<para>Additionally, if an administrator knows under which name
-the private key is stored (which is well-known since the algorithms
-used to create the Cygwin and SFU keys are no secret), every administrator
-can access the password of all keys stored this way in the registry.</para>
-
-<para>Conclusion: If your system is used exclusively by you, and if
-you're also the only administrator of your system, and if your system is
-adequately locked down to prevent malicious access, you can safely use
-this method. If your machine is part of a network which has
-dedicated administrators, and you're not one of these administrators,
-but you (think you) can trust your administrators, you can probably
-safely use this method.</para>
-
-<para>In all other cases, don't use this method. You have been warned.</para>
-
-</sect3>
-
-<sect3 id="ntsec-setuid-impl"><title id="ntsec-setuid-impl.title">Switching the user context, how does it all fit together?</title>
-
-<para>Now we learned about four different ways to switch the user
-context using the <command>set(e)uid</command> system call, but
-how does <command>set(e)uid</command> really work? Which method does it
-use now?</para>
-
-<para>The answer is, all four of them. So here's a brief overview
-what <command>set(e)uid</command> does under the hood:</para>
-
-<itemizedlist>
-<listitem>
-<para>When <command>set(e)uid</command> is called, it tests if the
-user context had been switched by an earlier call already, and if the
-new user account is the privileged user account under which the process
-had been started originally. If so, it just switches to the original
-access token of the process it had been started with.</para>
-</listitem>
-
-<listitem>
-<para>
-Next, it tests if an access token has been stored by an earlier call
-to <command>cygwin_set_impersonation_token</command>. If so, it tests
-if that token matches the requested user account. If so, the stored
-token is used for the user context switch.</para>
-
-<para>
-If not, there's no predefined token which can just be used for
-the user context switch, so we have to create a new token. The order
-is as follows.</para>
-</listitem>
-
-<listitem>
-<para>Check if the user has stored the logon password in the LSA
-private registry area, either under a Cygwin key, or under a SFU key.
-If so, use this to call <command>LogonUser</command>. If this
-succeeds, we use the resulting token for the user context switch.</para>
-</listitem>
-
-<listitem>
-<para>Otherwise, check if the Cygwin-specifc LSA authentication package
-has been installed and is functional. If so, use the appropriate LSA
-calls to communicate with the Cygwin LSA authentication package and
-use the returned token.</para>
-</listitem>
-
-<listitem>
-<para>Last chance, try to use the <command>NtCreateToken</command> call
-to create a token. If that works, use this token.</para>
-</listitem>
-
-<listitem>
-<para>If all of the above fails, our process has insufficient privileges
-to switch the user context at all, so <command>set(e)uid</command>
-fails and returns -1, setting errno to EPERM.</para>
-</listitem>
-</itemizedlist>
-
-</sect3>
-
-</sect2>
-
-</sect1>
diff --git a/winsup/doc/ov-ex-unix.xml b/winsup/doc/ov-ex-unix.xml
deleted file mode 100644
index e1debabdd..000000000
--- a/winsup/doc/ov-ex-unix.xml
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-
-<sect1 id="ov-ex-unix">
-<title>Quick Start Guide for those more experienced with UNIX</title>
-<para>
-If you are an experienced UNIX user who misses a powerful command-line
-environment, you will enjoy Cygwin.
-Developers coming from a UNIX background will find a set of utilities
-they are already comfortable using, including a working UNIX shell. The
-compiler tools are the standard GNU compilers most people will have previously
-used under UNIX, only ported to the Windows host. Programmers wishing to port
-UNIX software to Windows NT will find that the Cygwin library provides
-an easy way to port many UNIX packages, with only minimal source code
-changes.
-</para>
-<para>
-Note that there are some workarounds that cause Cygwin to behave differently
-than most UNIX-like operating systems; these are described in more detail in
-<xref linkend="using-effectively"></xref>.
-</para>
-<para>
-Use the graphical command <command>setup.exe</command> any time you want
-to update or install a Cygwin package. This program must be run
-manually every time you want to check for updated packages since Cygwin
-does not currently include a mechanism for automatically detecting
-package updates.
-</para>
-<para>
-By default, <command>setup.exe</command> only installs a minimal subset of
-packages. Add any other packages by clicking on the <literal>+</literal>
-next to the Category name and selecting the package from the displayed
-list. You may search for specfic tools by using the
-<ulink url="http://cygwin.com/packages/">Setup Package Search</ulink>
-at the Cygwin web site.
-</para>
-<para>
-Another option is to install everything by clicking on the
-<literal>Default</literal> field next to the <literal>All</literal>
-category. However, be advised that this will download and install
-several hundreds of megabytes of software to your computer. The best
-plan is probably to click on individual categories and install either
-entire categories or packages from the categories themselves.
-After installation, you can find Cygwin-specific documentation in
-the <literal>/usr/share/doc/Cygwin/</literal> directory.
-</para>
-<para>
-For more information about what each option in
-<command>setup.exe</command> means, see <xref
-linkend="internet-setup"></xref>.
-</para>
-
-</sect1>
diff --git a/winsup/doc/ov-ex-win.xml b/winsup/doc/ov-ex-win.xml
deleted file mode 100644
index c9371a971..000000000
--- a/winsup/doc/ov-ex-win.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-
-<sect1 id="ov-ex-win">
-<title>Quick Start Guide for those more experienced with Windows</title>
-<para>
-If you are new to the world of UNIX, you may find it difficult to
-understand at first. This guide is not meant to be comprehensive,
-so we recommend that you use the many available Internet resources
-to become acquainted with UNIX basics (search for "UNIX basics" or
-"UNIX tutorial").
-</para>
-<para>
-To install a basic Cygwin environment, run the
-<command>setup.exe</command> program and click <literal>Next</literal>
-at each page. The default settings are correct for most users. If you
-want to know more about what each option means, see
-<xref linkend="internet-setup"></xref>. Use <command>setup.exe</command>
-any time you want to update or install a Cygwin package. If you are
-installing Cygwin for a specific purpose, use it to install the tools
-that you need. For example, if you want to compile C++ programs, you
-need the <systemitem>gcc-g++</systemitem> package and probably a text
-editor like <systemitem>nano</systemitem>. When running
-<command>setup.exe</command>, clicking on categories and packages in the
-package installation screen will provide you with the ability to control
-what is installed or updated.
-</para>
-<para>
-Another option is to install everything by clicking on the
-<literal>Default</literal> field next to the <literal>All</literal>
-category. However, be advised that this will download and install
-several hundreds of megabytes of software to your computer. The best
-plan is probably to click on individual categories and install either
-entire categories or packages from the categories themselves.
-After installation, you can find Cygwin-specific documentation in
-the <literal>/usr/share/doc/Cygwin/</literal> directory.
-</para>
-<para>
-Developers coming from a Windows background will be able to write
-console or GUI executables that rely on the Microsoft Win32 API instead
-of Cygwin using the mingw32 or mingw64 cross-compiler toolchains. The
-<command>-shared</command> option to GCC allows to write Windows Dynamically
-Linked Libraries (DLLs). The resource compiler <command>windres</command>
-is also provided.
-</para>
-</sect1>
diff --git a/winsup/doc/overview.xml b/winsup/doc/overview.xml
deleted file mode 100644
index f43a69719..000000000
--- a/winsup/doc/overview.xml
+++ /dev/null
@@ -1,131 +0,0 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-
-<chapter id="overview" xmlns:xi="http://www.w3.org/2001/XInclude">
-<title>Cygwin Overview</title>
-
-<sect1 id="what-is-it"><title>What is it?</title>
-
-<para>
-Cygwin is a Linux-like environment for Windows. It consists of a DLL
-(<filename>cygwin1.dll</filename>), which acts as an emulation layer
-providing substantial <ulink url="http://www.pasc.org/#POSIX">POSIX</ulink>
-(Portable Operating System Interface) system call functionality, and a
-collection of tools, which provide a Linux look and feel. The Cygwin DLL
-works with all x86 and AMD64 versions of Windows NT since Windows XP SP3.
-The API follows the
-<ulink url="http://www.opengroup.org/onlinepubs/009695399/nfindex.html">Single
-Unix Specification</ulink> as much as possible, and then Linux practice.
-The major differences between Cygwin and Linux is the C library
-(<literal>newlib</literal> instead of <literal>glibc</literal>).
-</para>
-<para>
-With Cygwin installed, users have access to many standard UNIX
-utilities. They can be used from one of the provided shells such
-as <command>bash</command> or from the Windows Command Prompt.
-Additionally, programmers may write Win32 console or GUI applications
-that make use of the standard Microsoft Win32 API and/or the Cygwin API.
-As a result, it is possible to easily port many significant UNIX
-programs without the need for extensive changes to the source code.
-This includes configuring and building most of the available GNU
-software (including the development tools included with the Cygwin
-distribution).
-</para>
-</sect1>
-
-<xi:include href="ov-ex-win.xml"/>
-<xi:include href="ov-ex-unix.xml"/>
-
-<sect1 id="are-free"><title>Are the Cygwin tools free software?</title>
-
-<para>Yes. Parts are <ulink url="http://www.gnu.org/">GNU</ulink> software
-(<command>gcc</command>, <command>gas</command>, <command>ld</command>, etc.),
-parts are covered by the standard
-<ulink url="http://www.x.org/Downloads_terms.html">X11 license</ulink>,
-some of it is public domain, some of it was written by Red Hat and placed under
-the <ulink url="http://www.gnu.org/licenses/gpl.html">GNU General Public
-License</ulink> (GPL). None of it is shareware. You don't have to pay anyone to
-use it but you should be sure to read the copyright section of the FAQ for more
-information on how the GNU GPL may affect your use of these
-tools. If you intend to port a proprietary application using the Cygwin
-library, you may want the Cygwin proprietary-use license.
-For more information about the proprietary-use license, please go to
-<ulink url="http://www.redhat.com/services/custom/cygwin/">http://www.redhat.com/services/custom/cygwin/</ulink>.
-Customers of the native Win32 GNUPro should feel free to submit bug
-reports and ask questions through Red Hat channels. All other
-questions should be sent to the project mailing list
-<email>cygwin@cygwin.com</email>.</para>
-
-</sect1>
-
-<sect1 id="brief-history"><title>A brief history of the Cygwin project</title>
-
-<note>
-<para>
-A historical look into the first years of Cygwin development is
-Geoffrey J. Noer's 1998 paper, "Cygwin32: A Free Win32 Porting Layer for
-UNIX&reg; Applications" which can be found at the <ulink
-url="http://www.usenix.org/publications/library/proceedings/usenix-nt98/technical.html">
-2nd USENIX Windows NT Symposium Online Proceedings</ulink>.
-</para>
-</note>
-<para>
-Cygwin began development in 1995 at Cygnus Solutions (now part of Red Hat,
-Inc.). The first thing done was to enhance the development tools
-(<command>gcc</command>, <command>gdb</command>, <command>gas</command>,
-etc.) so that they could generate and interpret Win32 native
-object files.
-The next task was to port the tools to Win NT/9x. We could have
-done this by rewriting large portions of the source to work within the
-context of the Win32 API. But this would have meant spending a huge
-amount of time on each and every tool. Instead, we took a
-substantially different approach by writing a shared library
-(the Cygwin DLL) that adds the necessary UNIX-like functionality
-missing from the Win32 API (<function>fork</function>,
-<function>spawn</function>, <function>signals</function>,
-<function>select</function>, <function>sockets</function>, etc.). We call this
-new interface the Cygwin API. Once written, it was possible to build working
-Win32 tools using UNIX-hosted cross-compilers, linking against this
-library.</para>
-
-<para>From this point, we pursued the goal of producing Windows-hosted tools
-capable of rebuilding themselves under Windows 9x and NT (this is
-often called self-hosting). Since neither OS ships with standard UNIX
-user tools (fileutils, textutils, bash, etc...), we had to get the GNU
-equivalents working with the Cygwin API. Many of these tools were
-previously only built natively so we had to modify their configure
-scripts to be compatible with cross-compilation. Other than the
-configuration changes, very few source-level changes had to be
-made since Cygwin provided a UNIX-like API. Running bash with the development tools and user tools in place,
-Windows 9x and NT looked like a flavor of UNIX from the perspective of
-the GNU configure mechanism. Self hosting was achieved as of the beta
-17.1 release in October 1996.</para>
-
-<para>
-The entire Cygwin toolset was available as a monolithic install. In
-April 2000, the project announced a
-<ulink url="http://www.cygwin.com/ml/cygwin/2000-04/msg00269.html">
-New Cygwin Net Release</ulink> which provided the native non-Cygwin Win32 program
-<command>setup.exe</command> to install and upgrade each package
-separately. Since then, the Cygwin DLL and <command>setup.exe</command>
-have seen continuous development.
-</para>
-
-<para>
-The biggest major improvement in this development is the 1.7 release in
-2009, which dropped Windows 95/98/Me support in favor of using Windows
-NT features more extensively. It adds a lot of new features like
-case-sensitive filenames, NFS interoperability, IPv6 support and much
-more.</para>
-
-<para>The latest big improvement is the 64 bit Cygwin DLL which
-allows to run natively on AMD64 Windows machines. The first release
-available in a 64 bit version is 1.7.19.</para>
-
-</sect1>
-
-<xi:include href="highlights.xml"/>
-<xi:include href="new-features.xml"/>
-
-</chapter>
diff --git a/winsup/doc/path.xml b/winsup/doc/path.xml
deleted file mode 100644
index 06a252bb0..000000000
--- a/winsup/doc/path.xml
+++ /dev/null
@@ -1,190 +0,0 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-
-<sect1 id="func-cygwin-path">
-<title>Path conversion functions</title>
-
-<para>These functions are specific to Cygwin itself, and probably
-won't be found anywhere else. </para>
-
-<sect2 id="func-cygwin-conv-path">
-<title>cygwin_conv_path</title>
-
-<funcsynopsis><funcprototype>
-<funcdef>extern "C" ssize_t
-<function>cygwin_conv_path</function></funcdef>
-<paramdef>cygwin_conv_path_t <parameter>what</parameter></paramdef>
-<paramdef>const void * <parameter>from</parameter></paramdef>
-<paramdef>void * <parameter>to</parameter></paramdef>
-<paramdef>size_t <parameter>size</parameter></paramdef>
-</funcprototype></funcsynopsis>
-
-<para>Use this function to convert POSIX paths in
-<parameter>from</parameter> to Win32 paths in <parameter>to</parameter>
-or, vice versa, Win32 paths in <parameter>from</parameter> to POSIX paths
-in <parameter>to</parameter>. <parameter>what</parameter>
-defines the direction of this conversion and can be any of the below
-values.</para>
-
-<programlisting>
- CCP_POSIX_TO_WIN_A /* from is char *posix, to is char *win32 */
- CCP_POSIX_TO_WIN_W, /* from is char *posix, to is wchar_t *win32 */
- CCP_WIN_A_TO_POSIX, /* from is char *win32, to is char *posix */
- CCP_WIN_W_TO_POSIX, /* from is wchar_t *win32, to is char *posix */
-</programlisting>
-
-<para>You can additionally or the following values to
-<parameter>what</parameter>, to define whether you want the resulting
-path in <parameter>to</parameter> to be absolute or if you want to keep
-relative paths in relative notation. Creating absolute paths is the
-default.</para>
-
-<programlisting>
- CCP_ABSOLUTE = 0, /* Request absolute path (default). */
- CCP_RELATIVE = 0x100 /* Request to keep path relative. */
-</programlisting>
-
-<para><parameter>size</parameter> is the size of the buffer pointed to
-by <parameter>to</parameter> in bytes. If <parameter>size</parameter>
-is 0, <function>cygwin_conv_path</function> just returns the required
-buffer size in bytes. Otherwise, it returns 0 on success, or -1 on
-error and errno is set to one of the below values.</para>
-
-<programlisting>
- EINVAL what has an invalid value or from is NULL.
- EFAULT from or to point into nirvana.
- ENAMETOOLONG the resulting path is longer than 32K, or, in case
- of what == CCP_POSIX_TO_WIN_A, longer than MAX_PATH.
- ENOSPC size is less than required for the conversion.
-</programlisting>
-
-<example>
-<title>Example use of cygwin_conv_path</title>
-<programlisting>
-<![CDATA[
-#include <sys/cygwin.h>
-
-/* Conversion from incoming Win32 path given as wchar_t *win32 to POSIX path.
- If incoming path is a relative path, stick to it. First ask how big
- the output buffer has to be and allocate space dynamically. */
-ssize_t size;
-char *posix;
-size = cygwin_conv_path (CCP_WIN_W_TO_POSIX | CCP_RELATIVE, win32, NULL, 0);
-if (size < 0)
- perror ("cygwin_conv_path");
-else
- {
- posix = (char *) malloc (size);
- if (cygwin_conv_path (CCP_WIN_W_TO_POSIX | CCP_RELATIVE, win32,
- posix, size))
- perror ("cygwin_conv_path");
- }
-]]>
-</programlisting>
-</example>
-
-</sect2>
-
-<sect2 id="func-cygwin-conv-path-list">
-<title>cygwin_conv_path_list</title>
-
-<funcsynopsis><funcprototype>
-<funcdef>extern "C" ssize_t
-<function>cygwin_conv_path_list</function></funcdef>
-<paramdef>cygwin_conv_path_t <parameter>what</parameter></paramdef>
-<paramdef>const void * <parameter>from</parameter></paramdef>
-<paramdef>void * <parameter>to</parameter></paramdef>
-<paramdef>size_t <parameter>size</parameter></paramdef>
-</funcprototype></funcsynopsis>
-
-<para>This is the same as <function>cygwin_conv_path</function>, but the
-input is treated as a path list in $PATH or %PATH% notation.</para>
-<para>If <parameter>what</parameter> is CCP_POSIX_TO_WIN_A or
-CCP_POSIX_TO_WIN_W, given a POSIX $PATH-style string (i.e. /foo:/bar)
-convert it to the equivalent Win32 %PATH%-style string (i.e. d:\;e:\bar).</para>
-<para>If <parameter>what</parameter> is CCP_WIN_A_TO_POSIX or
-CCP_WIN_W_TO_POSIX, given a Win32 %PATH%-style string (i.e. d:\;e:\bar)
-convert it to the equivalent POSIX $PATH-style string (i.e. /foo:/bar).</para>
-<para><parameter>size</parameter> is the size of the buffer pointed to by
-<parameter>to</parameter> in bytes.</para>
-
-<para>See also <link linkend="func-cygwin-conv-path">cygwin_conv_path</link></para>
-
-</sect2>
-
-<sect2 id="func-cygwin-create-path">
-<title>cygwin_create_path</title>
-
-<funcsynopsis><funcprototype>
-<funcdef>extern "C" void *
-<function>cygwin_create_path</function></funcdef>
-<paramdef>cygwin_conv_path_t <parameter>what</parameter></paramdef>
-<paramdef>const void * <parameter>from</parameter></paramdef>
-</funcprototype></funcsynopsis>
-
-<para>This is equivalent to the <function>cygwin_conv_path</function>, except
-that <function>cygwin_create_path</function> does not take a buffer pointer
-for the result of the conversion as input. Rather it allocates the buffer
-itself using <function>malloc</function>(3) and returns a pointer to this
-buffer. In case of error it returns NULL and sets errno to one of the
-values defined for <function>cygwin_conv_path</function>. Additionally
-errno can be set to the below value.</para>
-
-<programlisting>
- ENOMEM Insufficient memory was available.
-</programlisting>
-
-<para>When you don't need the returned buffer anymore, use
-<function>free</function>(3) to deallocate it.</para>
-
-<para>See also <link linkend="func-cygwin-conv-path">cygwin_conv_path</link></para>
-
-</sect2>
-
-<sect2 id="func-cygwin-posix-path-list-p">
-<title>cygwin_posix_path_list_p</title>
-
-<funcsynopsis><funcprototype>
-<funcdef>extern "C" int
-<function>cygwin_posix_path_list_p</function></funcdef>
-<paramdef>const char *<parameter>path</parameter></paramdef>
-</funcprototype></funcsynopsis>
-
-<para>This function tells you if the supplied
-<parameter>path</parameter> is a POSIX-style path (i.e. posix names,
-forward slashes, colon delimiters) or a Win32-style path (drive
-letters, reverse slashes, semicolon delimiters. The return value is
-true if the path is a POSIX path. Note that "_p" means "predicate", a
-lisp term meaning that the function tells you something about the
-parameter.</para>
-
-</sect2>
-
-<sect2 id="func-cygwin-split-path">
-<title>cygwin_split_path</title>
-
-<funcsynopsis><funcprototype>
-<funcdef>extern "C" void
-<function>cygwin_split_path</function>
-</funcdef>
-<paramdef>const char * <parameter>path</parameter></paramdef>
-<paramdef>char * <parameter>dir</parameter></paramdef>
-<paramdef>char * <parameter>file</parameter></paramdef>
-</funcprototype></funcsynopsis>
-
-<para>Split a path into the directory and the file portions. Both
-<parameter>dir</parameter> and <parameter>file</parameter> are
-expected to point to buffers of sufficient size. </para>
-
-<example>
-<title>Example use of cygwin_split_path</title>
-<programlisting>
-char dir[200], file[100];
-cygwin_split_path("c:/foo/bar.c", dir, file);
-printf("dir=%s, file=%s\n", dir, file);
-</programlisting>
-</example>
-</sect2>
-
-</sect1>
diff --git a/winsup/doc/pathnames.xml b/winsup/doc/pathnames.xml
deleted file mode 100644
index 00eb133e7..000000000
--- a/winsup/doc/pathnames.xml
+++ /dev/null
@@ -1,570 +0,0 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-
-<sect1 id="using-pathnames"><title>Mapping path names</title>
-
-<sect2 id="pathnames-intro"><title>Introduction</title>
-
-<para>Cygwin supports both POSIX- and Win32-style paths. Directory
-delimiters may be either forward slashes or backslashes. Paths using
-backslashes or starting with a drive letter are always handled as
-Win32 paths. POSIX paths must only use forward slashes as delimiter,
-otherwise they are treated as Win32 paths and file access might fail
-in surprising ways.</para>
-
-<note><para>The usage of Win32 paths, though possible, is deprecated,
-since it circumvents important internal path handling mechanisms.
-See <xref linkend="pathnames-win32"></xref> and
-<xref linkend="pathnames-win32-api"></xref> for more information.
-</para></note>
-
-<para>POSIX operating systems (such as Linux) do not have the concept
-of drive letters. Instead, all absolute paths begin with a
-slash (instead of a drive letter such as "c:") and all file systems
-appear as subdirectories (for example, you might buy a new disk and
-make it be the <filename>/disk2</filename> directory).</para>
-
-<para>Because many programs written to run on UNIX systems assume
-the existence of a single unified POSIX file system structure, Cygwin
-maintains a special internal POSIX view of the Win32 file system
-that allows these programs to successfully run under Windows. Cygwin
-uses this mapping to translate from POSIX to Win32 paths as
-necessary.</para>
-
-</sect2>
-
-<sect2 id="mount-table"><title>The Cygwin Mount Table</title>
-
-<para>The <filename>/etc/fstab</filename> file is used to map Win32
-drives and network shares into Cygwin's internal POSIX directory tree.
-This is a similar concept to the typical UNIX fstab file. The mount
-points stored in <filename>/etc/fstab</filename> are globally set for
-all users. Sometimes there's a requirement to have user specific
-mount points. The Cygwin DLL supports user specific fstab files.
-These are stored in the directory <filename>/etc/fstab.d</filename>
-and the name of the file is the Cygwin username of the user, as it's
-created from the Windows account database or stored in the
-<filename>/etc/passwd</filename> file (see
-<xref linkend="ntsec-mapping"></xref>). The structure of the
-user specific file is identical to the system-wide
-<filename>fstab</filename> file.</para>
-
-<para>The file fstab contains descriptive information about the various file
-systems. fstab is only read by programs, and not written; it is the
-duty of the system administrator to properly create and maintain this
-file. Each filesystem is described on a separate line; fields on each
-line are separated by tabs or spaces. Lines starting with '#' are
-comments.</para>
-
-<para>The first field describes the block special device or
-remote filesystem to be mounted. On Cygwin, this is the native Windows
-path which the mount point links in. As path separator you MUST use a
-slash. Usage of a backslash might lead to unexpected results. UNC
-paths (using slashes, not backslashes) are allowed. If the path
-contains spaces these can be escaped as <literal>'\040'</literal>.</para>
-
-<para>The second field describes the mount point for the filesystem.
-If the name of the mount point contains spaces these can be
-escaped as '\040'.</para>
-
-<para>The third field describes the type of the filesystem. Cygwin supports
-any string here, since the file system type is usually not evaluated. So it
-doesn't matter if you write <literal>FAT</literal> into this field even if
-the filesystem is NTFS. Cygwin figures out the filesystem type and its
-capabilities by itself.</para>
-
-<para>The only exception is the file system type cygdrive. This type is
-used to set the cygdrive prefix. For a description of the cygdrive prefix
-see <xref linkend="cygdrive"></xref></para>
-
-<para>The fourth field describes the mount options associated
-with the filesystem. It is formatted as a comma separated list of
-options. It contains at least the type of mount (binary or text) plus
-any additional options appropriate to the filesystem type. Recognized
-options are binary, text, nouser, user, exec, notexec, cygexec, nosuid,
-posix=[0|1]. The meaning of the options is as follows.</para>
-
-<screen>
- acl - Cygwin uses the filesystem's access control lists (ACLs) to
- implement real POSIX permissions (default). This flag only
- affects filesystems supporting ACLs (NTFS, for instance) and
- is ignored otherwise.
- auto - Ignored.
- binary - Files default to binary mode (default).
- bind - Allows to remount part of the file hierarchy somewhere else.
- In contrast to other entries, the first field in the fstab
- line specifies an absolute POSIX path. This path is remounted
- to the POSIX path specified as the second path. The conversion
- to a Win32 path is done on the fly. Only the root path and
- paths preceding the bind entry in the fstab file are used to
- convert the POSIX path in the first field to an absolute Win32
- path. Note that symlinks are ignored while performing this path
- conversion.
- cygexec - Treat all files below mount point as cygwin executables.
- dos - Always convert leading spaces and trailing dots and spaces to
- characters in the UNICODE private use area. This allows to use
- broken filesystems which only allow DOS filenames, even if they
- are not recognized as such by Cygwin.
- exec - Treat all files below mount point as executable.
- ihash - Always fake inode numbers rather than using the ones returned
- by the filesystem. This allows to use broken filesystems which
- don't return unambiguous inode numbers, even if they are not
- recognized as such by Cygwin.
- noacl - Cygwin ignores filesystem ACLs and only fakes a subset of
- permission bits based on the DOS readonly attribute. This
- behaviour is the default on FAT and FAT32. The flag is
- ignored on NFS filesystems.
- nosuid - No suid files are allowed (currently unimplemented).
- notexec - Treat all files below mount point as not executable.
- nouser - Mount is a system-wide mount.
- override - Force the override of an immutable mount point (currently "/").
- posix=0 - Switch off case sensitivity for paths under this mount point
- (default for the cygdrive prefix).
- posix=1 - Switch on case sensitivity for paths under this mount point
- (default for all other mount points).
- sparse - Switch on support for sparse files. This option only makes
- sense on NTFS and then only if you really need sparse files.
- Cygwin does not try to create sparse files by default for
- performance reasons.
- text - Files default to CRLF text mode line endings.
- user - Mount is a user mount.
-</screen>
-
-<para>While normally the execute permission bits are used to evaluate
-executability, this is not possible on filesystems which don't support
-permissions at all (like FAT/FAT32), or if ACLs are ignored on filesystems
-supporting them (see the aforementioned <literal>acl</literal> mount option).
-In these cases, the following heuristic is used to evaluate if a file is
-executable: Files ending in certain extensions (.exe, .com, .bat, .btm,
-.cmd) are assumed to be executable. Files whose first two characters begin
-with '#!' are also considered to be executable.
-The <literal>exec</literal> option is used to instruct Cygwin that the
-mounted file is "executable". If the <literal>exec</literal> option is used
-with a directory then all files in the directory are executable.
-This option allows other files to be marked as executable and avoids the
-overhead of opening each file to check for a '#!'. The
-<literal>cygexec</literal> option is very similar to <literal>exec</literal>,
-but also prevents Cygwin from setting up commands and environment variables
-for a normal Windows program, adding another small performance gain. The
-opposite of these options is the <literal>notexec</literal> option, which
-means that no files should be marked as executable under that mount point.</para>
-<para>A correct root directory is quite essential to the operation of
-Cygwin. A default root directory is evaluated at startup so a
-<filename>fstab</filename> entry for the root directory is not necessary.
-If it's wrong, nothing will work as expected. Therefore, the root directory
-evaluated by Cygwin itself is treated as an immutable mount point and can't
-be overridden in /etc/fstab... unless you think you really know what you're
-doing. In this case, use the <literal>override</literal> flag in the options
-field in the <filename>/etc/fstab</filename> file. Since this is a dangerous
-thing to do, do so at your own risk.</para>
-
-<para><filename>/usr/bin</filename> and <filename>/usr/lib</filename> are
-by default also automatic mount points generated by the Cygwin DLL similar
-to the way the root directory is evaluated. <filename>/usr/bin</filename>
-points to the directory the Cygwin DLL is installed in,
-<filename>/usr/lib</filename> is supposed to point to the
-<filename>/lib</filename> directory. This choice is safe and usually
-shouldn't be changed. An fstab entry for them is not required.</para>
-
-<para><literal>nouser</literal> mount points are not overridable by a later
-call to <command>mount</command>.
-Mount points given in <filename>/etc/fstab</filename> are by default
-<literal>nouser</literal> mount points, unless you specify the option
-<literal>user</literal>. This allows the administrator to set certain
-paths so that they are not overridable by users. In contrast, all mount
-points in the user specific fstab file are <literal>user</literal> mount
-points.</para>
-
-<para>The fifth and sixth field are ignored. They are
-so far only specified to keep a Linux-like fstab file layout.</para>
-
-<para>Note that you don't have to specify an fstab entry for the root dir,
-unless you want to have the root dir pointing to somewhere entirely
-different (hopefully you know what you're doing), or if you want to
-mount the root dir with special options (for instance, as text mount).</para>
-
-<para>Example entries:</para>
-
-<itemizedlist spacing="compact">
-<listitem>
- <para>Just a normal mount point:</para>
- <screen> c:/foo /bar fat32 binary 0 0</screen>
-</listitem>
-<listitem>
- <para>A mount point for a textmode mount with case sensitivity switched off:</para>
- <screen> C:/foo /bar/baz ntfs text,posix=0 0 0</screen>
-</listitem>
-<listitem>
- <para>A mount point for a Windows directory with spaces in it:</para>
- <screen> C:/Documents\040and\040Settings /docs ext3 binary 0 0</screen>
-</listitem>
-<listitem>
- <para>A mount point for a remote directory, don't store POSIX permissions in ACLs:</para>
- <screen> //server/share/subdir /srv/subdir smbfs binary,noacl 0 0</screen>
-</listitem>
-<listitem>
- <para>This is just a comment:</para>
- <screen> # This is just a comment</screen>
-</listitem>
-<listitem>
- <para>Set the cygdrive prefix to /mnt:</para>
- <screen> none /mnt cygdrive binary 0 0</screen>
-</listitem>
-<listitem>
- <para>Remount /var to /usr/var:</para>
- <screen> /var /usr/var none bind</screen>
- <para>Assuming <filename>/var</filename> points to
- <filename>C:/cygwin/var</filename>, <filename>/usr/var</filename> now
- also points to <filename>C:/cygwin/var</filename>. This is equivalent
- to the Linux <literal>bind</literal> option available since
- Linux 2.4.0.</para>
-</listitem>
-</itemizedlist>
-
-<para>Whenever Cygwin generates a Win32 path from a POSIX one, it uses
-the longest matching prefix in the mount table. Thus, if
-<filename>C:</filename> is mounted as <filename>/c</filename> and also
-as <filename>/</filename>, then Cygwin would translate
-<filename>C:/foo/bar</filename> to <filename>/c/foo/bar</filename>.
-This translation is normally only used when trying to derive the
-POSIX equivalent current directory. Otherwise, the handling of MS-DOS
-filenames bypasses the mount table.
-</para>
-
-<para>If you want to see the current set of mount points valid in your
-session, you can invoke the Cygwin tool <command>mount</command> without
-arguments:</para>
-
-<example id="pathnames-mount-ex">
-<title>Displaying the current set of mount points</title>
-<screen>
- <prompt>bash$</prompt> <userinput>mount</userinput>
- f:/cygwin/bin on /usr/bin type ntfs (binary,auto)
- f:/cygwin/lib on /usr/lib type ntfs (binary,auto)
- f:/cygwin on / type ntfs (binary,auto)
- e:/src on /usr/src type vfat (binary)
- c: on /cygdrive/c type ntfs (binary,posix=0,user,noumount,auto)
- e: on /cygdrive/e type vfat (binary,posix=0,user,noumount,auto)
-</screen>
-</example>
-
-<para>You can also use the <command>mount</command> command to add
-new mount points, and the <command>umount</command> to delete
-them. However, since they are only stored in memory, these mount
-points will disappear as soon as your last Cygwin process ends.
-See <xref linkend="mount"></xref> and <xref linkend="umount"></xref> for more
-information.</para>
-
-</sect2>
-
-<sect2 id="unc-paths"><title>UNC paths</title>
-
-<para>Apart from the unified POSIX tree starting at the <filename>/</filename>
-directory, UNC pathnames starting with two slashes and a server name
-(<filename>//machine/share/...</filename>) are supported as well.
-They are handled as POSIX paths if only containing forward slashes. There's
-also a virtual directory <filename>//</filename> which allows to enumerate
-the fileservers known to the local machine with <command>ls</command>.
-Same goes for the UNC paths of the type <filename>//machine</filename>,
-which allow to enumerate the shares provided by the server
-<literal>machine</literal>. For often used UNC paths it makes sense to
-add them to the mount table (see <xref linkend="mount-table"></xref> so
-they are included in the unified POSIX path tree.</para>
-
-</sect2>
-
-<sect2 id="cygdrive"><title>The cygdrive path prefix</title>
-
-<para>As already outlined in <xref linkend="ov-hi-files"></xref>, you can
-access arbitary drives on your system by using the cygdrive path prefix.
-The default value for this prefix is <filename>/cygdrive</filename>, and
-a path to any drive can be constructed by using the cygdrive prefix and
-appending the drive letter as subdirectory, like this:</para>
-
-<screen>
- bash$ ls -l /cygdrive/f/somedir
-</screen>
-
-<para>This lists the content of the directory F:\somedir.</para>
-
-<para>The cygdrive prefix is a virtual directory under which all drives
-on a system are subsumed. The mount options of the cygdrive prefix is
-used for all file access through the cygdrive prefixed drives. For instance,
-assuming the cygdrive mount options are <literal>binary,posix=0</literal>,
-then any file <filename>/cygdrive/x/file</filename> will be opened in
-binary mode by default (mount option <literal>binary</literal>), and the case
-of the filename doesn't matter (mount option <literal>posix=0</literal>).
-</para>
-
-<para>The cygdrive prefix flags are also used for all UNC paths starting with
-two slashes, unless they are accessed through a mount point. For instance,
-consider these <filename>/etc/fstab</filename> entries:</para>
-
-<screen>
- //server/share /mysrv ntfs posix=1,acl 0 0
- none /cygdrive cygdrive posix=0,noacl 0 0
-</screen>
-
-<para>Assume there's a file <filename>\\server\share\foo</filename> on the
-share. When accessing it as <filename>/mysrv/foo</filename>, then the flags
-<literal>posix=1,acl</literal> of the /mysrv mount point are used. When
-accessing it as <filename>//server/share/foo</filename>, then the flags
-for the cygdrive prefix, <literal>posix=0,noacl</literal> are used.</para>
-
-<note><para>This only applies to UNC paths using forward slashes. When
-using backslashes the flags for native paths are used. See
-<xref linkend="pathnames-win32"></xref>.</para></note>
-
-<para>The cygdrive prefix may be changed in the fstab file as outlined above.
-Please note that you must not use the cygdrive prefix for any other mount
-point. For instance this:</para>
-
-<screen>
- none /cygdrive cygdrive binary 0 0
- D: /cygdrive/d somefs text 0 0
-</screen>
-
-<para>will not make file access using the /mnt/d path prefix suddenly using
-textmode. If you want to mount any drive explicitly in another mode than
-the cygdrive prefix, use a distinct path prefix:</para>
-
-<screen>
- none /cygdrive cygdrive binary 0 0
- D: /mnt/d somefs text 0 0
-</screen>
-
-<para>To simplify scripting, Cygwin also provides a
-<filename>/proc/cygdrive</filename> symlink, which allows to use a fixed path
-in scripts, even if the actual cygdrive prefix has been changed, or is different
-between different users. So, in scripts, conveniently use the
-<filename>/proc/cygdrive</filename> symlink to successfully access files
-independently from the current cygdrive prefix:</para>
-
-<screen>
- $ mount -p
- Prefix Type Flags
- /mnt user binmode
- $ cat &gt; x.sh &lt;&lt;EOF
- cd /proc/cygdrive/c/Windows/System32/Drivers/etc
- ls -l hosts
- EOF
- $ sh -c ./x.sh
- -rwxrwx---+ 1 SYSTEM SYSTEM 826 Sep 4 22:43 hosts
-</screen>
-
-</sect2>
-
-<sect2 id="pathnames-symlinks"><title>Symbolic links</title>
-
-<para>Symbolic links are not present and supported on Windows until Windows
-Vista/Server 2008, and then only on some filesystems. Since POSIX applications
-are rightfully expecting to use symlinks and the
-<literal>symlink(2)</literal> system call, Cygwin had to find a
-workaround for this Windows flaw.</para>
-
-<para>Cygwin creates symbolic links potentially in multiple different
-ways:</para>
-
-<itemizedlist mark="bullet">
-
-<listitem>
-<para>The default symlinks are plain files containing a magic cookie
-followed by the path to which the link points. They are marked with the
-DOS SYSTEM attribute so that only files with that attribute have to be
-read to determine whether or not the file is a symbolic link.</para>
-
-<note><para>Starting with Cygwin 1.7, symbolic links are using UTF-16 to encode
-the filename of the target file, to better support internationalization.
-Symlinks created by older Cygwin releases can be read just fine. However,
-you could run into problems with them if you're now using another character
-set than the one you used when creating these symlinks
-(see <xref linkend="setup-locale-problems"></xref>). Please note that this
-new UTF-16 style of symlinks is not compatible with older Cygwin release,
-which can't read the target filename correctly.</para></note>
-</listitem>
-
-<listitem>
-<para>The shortcut style symlinks are Windows <literal>.lnk</literal>
-shortcut files with a special header and the DOS READONLY attribute set.
-This symlink type is created if the environment variable
-<literal>CYGWIN</literal> (see <xref linkend="using-cygwinenv"></xref>)
-is set to contain the string <literal>winsymlinks</literal> or
-<literal>winsymlinks:lnk</literal>. On the MVFS filesystem, which does
-not support the DOS SYSTEM attribute, this is the one and only supported
-symlink type, independently from the <literal>winsymlinks</literal>
-setting.</para>
-</listitem>
-
-<listitem>
-<para>Native Windows symlinks are only created on Windows Vista/2008 and later,
-and only on filesystems supporting reparse points. Due to to their weird
-restrictions and behaviour, they are only created if the user
-explicitely requests creating them. This is done by setting the
-environment variable <literal>CYGWIN</literal> to contain the string
-<literal>winsymlinks:native</literal> or
-<literal>winsymlinks:nativestrict</literal>. For the difference between
-these two settings, see <xref linkend="using-cygwinenv"></xref>.
-On AFS, native symlinks are the only supported type of symlink due to
-AFS lacking support for DOS attributes. This is independent from the
-<literal>winsymlinks</literal> setting.</para>
-</listitem>
-
-<listitem>
-<para>On the NFS filesystem, Cygwin always creates real NFS symlinks.</para>
-</listitem>
-
-</itemizedlist>
-
-<para>All of the above four symlink types are recognized and used as symlinks
-under all circumstances. However, if the default plain file symlink type
-is lacking its DOS SYSTEM bit, or if the shortcut file is lacking the DOS
-READONLY attribute, they are not recognized as symlink.</para>
-
-<para>Apart from these four types, there's also a fifth type, which is
-recognized as symlink but never generated by Cygwin, directory
-junctions. This is an older reparse point type, supported by Windows
-since Windows 2000. Filesystem junctions on the other hand are not
-handled as symlinks, since otherwise they would not be recognized as
-filesystem borders by commands like <command>find -xdev</command>.</para>
-
-</sect2>
-
-<sect2 id="pathnames-win32"><title>Using native Win32 paths</title>
-
-<para>Using native Win32 paths in Cygwin, while possible, is generally
-inadvisable. Those paths circumvent all internal integrity checking and
-bypass the information given in the Cygwin mount table.</para>
-
-<para>The following paths are treated as native Win32 paths in Cygwin:</para>
-
-<itemizedlist spacing="compact">
- <listitem>
- <para>All paths starting with a drive specifier</para>
-<screen>
- C:\foo
- C:/foo
-</screen>
- </listitem>
- <listitem>
- <para>All paths containing at least one backslash as path component</para>
-<screen>
- C:/foo/bar<emphasis role='bold'>\</emphasis>baz/...
-</screen>
- </listitem>
- <listitem>
- <para>UNC paths using backslashes</para>
-<screen>
- \\server\share\...
-</screen>
- </listitem>
-</itemizedlist>
-
-<para>When accessing files using native Win32 paths as above, Cygwin uses a
-default setting for the mount flags. All paths using DOS notation will be
-treated as case insensitive, and permissions are just faked as if the
-underlying drive is a FAT drive. This also applies to NTFS and other
-filesystems which usually are capable of case sensitivity and storing
-permissions.</para>
-
-</sect2>
-
-<sect2 id="pathnames-win32-api"><title>Using the Win32 file API in Cygwin applications</title>
-
-<para>Special care must be taken if your application uses Win32 file API
-functions like <function>CreateFile</function> to access files using
-relative pathnames, or if your application uses functions like
-<function>CreateProcess</function> or <function>ShellExecute</function>
-to start other applications.</para>
-
-<para>When a Cygwin application is started, the Windows idea of the current
-working directory (CWD) is not necessarily the same as the Cygwin CWD.
-There are a couple of restrictions in the Win32 API, which disallow certain
-directories as Win32 CWD:</para>
-
-<itemizedlist spacing="compact">
- <listitem>
- <para>The Windows subsystem only supports CWD paths of up to 258 chars.
- This restriction doesn't apply for Cygwin processes, at least not as
- long as they use the POSIX API (chdir, getcwd). This means, if a Cygwin
- process has a CWD using an absolute path longer than 258 characters, the
- Cygwin CWD and the Windows CWD differ.</para>
- </listitem>
-
- <listitem>
- <para>The Win32 API call to set the current directory,
- <function>SetCurrentDirectory</function>, fails for directories for which
- the user has no permissions, even if the user is an administrator. This
- restriction doesn't apply for Cygwin processes, if they are running under
- an administrator account.</para>
- </listitem>
-
- <listitem>
- <para><function>SetCurrentDirectory</function> does not support
- case-sensitive filenames.
- </para>
- </listitem>
-
- <listitem>
- <para>Last, but not least, <function>SetCurrentDirectory</function> can't
- work on virtual Cygwin paths like /proc or /cygdrive. These paths only
- exists in the Cygwin realm so they have no meaning to a native Win32
- process.</para>
- </listitem>
-</itemizedlist>
-
-<para>As long as the Cygwin CWD is usable as Windows CWD, the Cygwin and
-Windows CWDs are in sync within a process. However, if the Cygwin process
-changes its working directory into one of the directories which are
-unusable as Windows CWD, we're in trouble. If the process uses the
-Win32 API to access a file using a relative pathname, the resulting
-absolute path would not match the expectations of the process. In the
-worst case, the wrong files are deleted.</para>
-
-<para>To workaround this problem, Cygwin sets the Windows CWD to a special
-directory in this case. This special directory points to a virtual
-filesystem within the native NT namespace (<filename>\??\PIPE\</filename>).
-Since it's not a real filesystem, the deliberate effect is that a call to,
-for instance, <function>CreateFile ("foo", ...);</function> will fail,
-as long as the processes CWD doesn't work as Windows CWD.</para>
-
-<para>So, in general, don't use the Win32 file API in Cygwin applications.
-If you <emphasis role='bold'>really</emphasis> need to access files using
-the Win32 API, or if you <emphasis role='bold'>really</emphasis> have to use
-<function>CreateProcess</function> to start applications, rather than
-the POSIX <function>exec(3)</function> family of functions, you have to
-make sure that the Cygwin CWD is set to some directory which is valid as
-Win32 CWD.</para>
-
-</sect2>
-
-<sect2 id="pathnames-additional"><title>Additional Path-related Information</title>
-
-<para>The <command>cygpath</command> program provides the ability to
-translate between Win32 and POSIX pathnames in shell scripts. See
-<xref linkend="cygpath"></xref> for the details.</para>
-
-<para>The <envar>HOME</envar>, <envar>PATH</envar>, and
-<envar>LD_LIBRARY_PATH</envar> environment variables are automatically
-converted from Win32 format to POSIX format (e.g. from
-<filename>c:/cygwin\bin</filename> to <filename>/bin</filename>, if
-there was a mount from that Win32 path to that POSIX path) when a Cygwin
-process first starts.</para>
-
-<para>Symbolic links can also be used to map Win32 pathnames to POSIX.
-For example, the command
-<command>ln -s //pollux/home/joe/data /data</command> would have about
-the same effect as creating a mount point from
-<filename>//pollux/home/joe/data</filename> to <filename>/data</filename>
-using <command>mount</command>, except that symbolic links cannot set
-the default file access mode. Other differences are that the mapping is
-distributed throughout the file system and proceeds by iteratively
-walking the directory tree instead of matching the longest prefix in a
-kernel table. Note that symbolic links will only work on network
-drives that are properly configured to support the "system" file
-attribute. Many do not do so by default (the Unix Samba server does
-not by default, for example).</para>
-
-</sect2>
-
-</sect1>
diff --git a/winsup/doc/posix.xml b/winsup/doc/posix.xml
deleted file mode 100644
index 4b0e2fda1..000000000
--- a/winsup/doc/posix.xml
+++ /dev/null
@@ -1,1605 +0,0 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-
-<chapter id="compatibility" xmlns:xi="http://www.w3.org/2001/XInclude">
-<title>Compatibility</title>
-
-<sect1 id="std-susv4"><title>System interfaces compatible with the Single Unix Specification, Version 4:</title>
-
-<para>Note that the core of the Single Unix Specification, Version 4 is
-also IEEE Std 1003.1-2008 (POSIX.1-2008).</para>
-
-<screen>
- FD_CLR
- FD_ISSET
- FD_SET
- FD_ZERO
- _Exit
- _exit
- _longjmp
- _setjmp
- _tolower
- _toupper
- a64l
- abort
- abs
- accept
- access
- acos
- acosf
- acosh
- acoshf
- alarm
- alphasort
- asctime
- asctime_r
- asin
- asinf
- asinh
- asinhf
- atan
- atan2
- atan2f
- atanf
- atanh
- atanhf
- atexit
- atof
- atoff
- atoi
- atol
- atoll
- basename
- bind
- bsearch
- btowc
- cabs
- cabsf
- cacos
- cacosf
- cacosh
- cacoshf
- calloc
- carg
- cargf
- casin
- casinf
- casinh
- casinhf
- casinhl
- catan
- catanf
- catanh
- catanhf
- catclose (available in external "catgets" library)
- catgets (available in external "catgets" library)
- catopen (available in external "catgets" library)
- cbrt
- cbrtf
- ccos
- ccosf
- ccosh
- ccoshf
- ceil
- ceilf
- cexp
- cexpf
- cfgetispeed
- cfgetospeed
- cfsetispeed
- cfsetospeed
- chdir
- chmod
- chown
- cimag
- cimagf
- clearerr
- clock
- clock_getcpuclockid
- clock_getres
- clock_gettime
- clock_nanosleep (see chapter "Implementation Notes")
- clock_settime (see chapter "Implementation Notes")
- clog
- clogf
- close
- closedir
- closelog
- confstr
- conj
- conjf
- connect
- copysign
- copysignf
- cos
- cosf
- cosh
- coshf
- cpow
- cpowf
- cproj
- cprojf
- creal
- crealf
- creat
- crypt (available in external "crypt" library)
- csin
- csinf
- csinh
- csinhf
- csqrt
- csqrtf
- ctan
- ctanf
- ctanh
- ctanhf
- ctermid
- ctime
- ctime_r
- daylight
- dbm_clearerr (available in external "libgdbm" library)
- dbm_close (available in external "libgdbm" library)
- dbm_delete (available in external "libgdbm" library)
- dbm_error (available in external "libgdbm" library)
- dbm_fetch (available in external "libgdbm" library)
- dbm_firstkey (available in external "libgdbm" library)
- dbm_nextkey (available in external "libgdbm" library)
- dbm_open (available in external "libgdbm" library)
- dbm_store (available in external "libgdbm" library)
- difftime
- dirfd
- dirname
- div
- dlclose
- dlerror
- dlopen
- dlsym
- dprintf
- drand48
- dup
- dup2
- encrypt (available in external "crypt" library)
- endgrent
- endhostent
- endprotoent
- endpwent
- endservent
- endutxent
- environ
- erand48
- erf
- erfc
- erfcf
- erff
- errno
- execl
- execle
- execlp
- execv
- execve
- execvp
- exit
- exp
- exp2
- exp2f
- expf
- expm1
- expm1f
- fabs
- fabsf
- faccessat
- fchdir
- fchmod
- fchmodat
- fchown
- fchownat
- fclose
- fcntl (see chapter "Implementation Notes")
- fdatasync
- fdim
- fdimf
- fdopen
- fdopendir
- feclearexcept
- fegetenv
- fegetexceptflag
- fegetround
- feholdexcept
- feof
- feraiseexcept
- ferror
- fesetenv
- fesetexceptflag
- fesetround
- fetestexcept
- feupdateenv
- fexecve
- fflush
- ffs
- fgetc
- fgetpos
- fgets
- fgetwc
- fgetws
- fileno
- flockfile
- floor
- floorf
- fma
- fmaf
- fmax
- fmaxf
- fmemopen
- fmin
- fminf
- fmod
- fmodf
- fnmatch
- fopen
- fork
- fpathconf
- fpclassify (see chapter "Implementation Notes")
- fprintf
- fputc
- fputs
- fputwc
- fputws
- fread
- free
- freeaddrinfo
- freopen
- frexp
- frexpf
- fscanf
- fseek
- fseeko
- fsetpos
- fstat
- fstatat
- fstatvfs
- fsync
- ftell
- ftello
- ftok
- ftruncate
- ftrylockfile
- ftw
- funlockfile
- futimens
- fwide
- fwprintf
- fwrite
- fwscanf
- gai_strerror
- getaddrinfo
- getc
- getc_unlocked
- getchar
- getchar_unlocked
- getcwd
- getdelim
- getdomainname
- getegid
- getenv
- geteuid
- getgid
- getgrent
- getgrgid
- getgrgid_r
- getgrnam
- getgrnam_r
- getgroups
- gethostid
- gethostname
- getitimer (see chapter "Implementation Notes")
- getline
- getlogin
- getlogin_r
- getnameinfo
- getopt
- getpeername
- getpgid
- getpgrp
- getpid
- getppid
- getpriority
- getprotobyname
- getprotobynumber
- getprotoent
- getpwent
- getpwnam
- getpwnam_r
- getpwuid
- getpwuid_r
- getrlimit
- getrusage
- gets
- getservbyname
- getservbyport
- getservent
- getsid
- getsockname
- getsockopt
- getsubopt
- gettimeofday
- getuid
- getutxent
- getutxid
- getutxline
- getwc
- getwchar
- glob
- globfree
- gmtime
- gmtime_r
- grantpt
- hcreate
- hdestroy
- hsearch
- htonl
- htons
- hypot
- hypotf
- iconv (available in external "libiconv" library)
- iconv_close (available in external "libiconv" library)
- iconv_open (available in external "libiconv" library)
- if_freenameindex
- if_indextoname
- if_nameindex
- if_nametoindex
- ilogb
- ilogbf
- imaxabs
- imaxdiv
- inet_addr
- inet_ntoa
- inet_ntop
- inet_pton
- initstate
- insque
- ioctl
- isalnum
- isalpha
- isascii
- isatty
- isblank
- iscntrl
- isdigit
- isfinite (see chapter "Implementation Notes")
- isgraph
- isgreater (see chapter "Implementation Notes")
- isgreaterequal (see chapter "Implementation Notes")
- isinf (see chapter "Implementation Notes")
- isless
- islessequal (see chapter "Implementation Notes")
- islessgreater (see chapter "Implementation Notes")
- islower
- isnan (see chapter "Implementation Notes")
- isnormal (see chapter "Implementation Notes")
- isprint
- ispunct
- isspace
- isunordered (see chapter "Implementation Notes")
- isupper
- iswalnum
- iswalpha
- iswblank
- iswcntrl
- iswctype
- iswdigit
- iswgraph
- iswlower
- iswprint
- iswpunct
- iswspace
- iswupper
- iswxdigit
- isxdigit
- j0
- j1
- jn
- jrand48
- kill
- killpg
- l64a
- labs
- lchown
- lcong48
- ldexp
- ldexpf
- ldiv
- lfind
- lgamma
- lgammaf
- link
- linkat
- listen
- llabs
- lldiv
- llrint
- llrintf
- llrintl
- llround
- llroundf
- localeconv
- localtime
- localtime_r
- lockf (see chapter "Implementation Notes")
- log
- log10
- log10f
- log1p
- log1pf
- log2
- log2f
- logb
- logbf
- logf
- longjmp
- lrand48
- lrint
- lrintf
- lrintl
- lround
- lroundf
- lsearch
- lseek
- lstat
- malloc
- mblen
- mbrlen
- mbrtowc
- mbsinit
- mbsnrtowcs
- mbsrtowcs
- mbstowcs
- mbtowc
- memccpy
- memchr
- memcmp
- memcpy
- memmove
- memset
- mkdir
- mkdirat
- mkdtemp
- mkfifo
- mkfifoat
- mknod
- mknodat
- mkstemp
- mktime
- mlock
- mmap
- modf
- modff
- mprotect
- mq_close
- mq_getattr
- mq_notify
- mq_open
- mq_receive
- mq_send
- mq_setattr
- mq_timedreceive
- mq_timedsend
- mq_unlink
- mrand48
- msgctl (see chapter "Implementation Notes")
- msgget (see chapter "Implementation Notes")
- msgrcv (see chapter "Implementation Notes")
- msgsnd (see chapter "Implementation Notes")
- msync
- munlock
- munmap
- nan
- nanf
- nanosleep
- nearbyint
- nearbyintf
- nextafter
- nextafterf
- nftw
- nice
- nl_langinfo
- nrand48
- ntohl
- ntohs
- open
- open_memstream
- open_wmemstream
- openat
- opendir
- openlog
- optarg
- opterr
- optind
- optopt
- pathconf
- pause
- pclose
- perror
- pipe
- poll
- popen
- posix_fadvise
- posix_fallocate
- posix_madvise
- posix_memalign
- posix_openpt
- posix_spawn
- posix_spawnattr_destroy
- posix_spawnattr_init
- posix_spawnattr_getflags
- posix_spawnattr_getpgroup
- posix_spawnattr_getschedparam
- posix_spawnattr_getschedpolicy
- posix_spawnattr_getsigdefault
- posix_spawnattr_getsigmask
- posix_spawnattr_setflags
- posix_spawnattr_setpgroup
- posix_spawnattr_setschedparam
- posix_spawnattr_setschedpolicy
- posix_spawnattr_setsigdefault
- posix_spawnattr_setsigmask
- posix_spawnp
- posix_spawn_file_actions_destroy
- posix_spawn_file_actions_init
- posix_spawn_file_actions_addclose
- posix_spawn_file_actions_adddup2
- posix_spawn_file_actions_addopen
- pow
- powf
- pread
- printf
- pselect
- psiginfo
- psignal
- pthread_atfork
- pthread_attr_destroy
- pthread_attr_getdetachstate
- pthread_attr_getguardsize
- pthread_attr_getinheritsched
- pthread_attr_getschedparam
- pthread_attr_getschedpolicy
- pthread_attr_getscope
- pthread_attr_getstack
- pthread_attr_getstacksize
- pthread_attr_init
- pthread_attr_setdetachstate
- pthread_attr_setguardsize
- pthread_attr_setinheritsched
- pthread_attr_setschedparam
- pthread_attr_setschedpolicy
- pthread_attr_setscope
- pthread_attr_setstack
- pthread_attr_setstacksize
- pthread_cancel
- pthread_cond_broadcast
- pthread_cond_destroy
- pthread_cond_init
- pthread_cond_signal
- pthread_cond_timedwait
- pthread_cond_wait
- pthread_condattr_destroy
- pthread_condattr_getclock
- pthread_condattr_getpshared
- pthread_condattr_init
- pthread_condattr_setclock
- pthread_condattr_setpshared
- pthread_create
- pthread_detach
- pthread_equal
- pthread_exit
- pthread_getconcurrency
- pthread_getcpuclockid
- pthread_getschedparam
- pthread_getspecific
- pthread_join
- pthread_key_create
- pthread_key_delete
- pthread_kill
- pthread_mutex_destroy
- pthread_mutex_getprioceiling
- pthread_mutex_init
- pthread_mutex_lock
- pthread_mutex_setprioceiling
- pthread_mutex_trylock
- pthread_mutex_unlock
- pthread_mutexattr_destroy
- pthread_mutexattr_getprioceiling
- pthread_mutexattr_getprotocol
- pthread_mutexattr_getpshared
- pthread_mutexattr_gettype
- pthread_mutexattr_init
- pthread_mutexattr_setprioceiling
- pthread_mutexattr_setprotocol
- pthread_mutexattr_setpshared
- pthread_mutexattr_settype
- pthread_once
- pthread_rwlock_destroy
- pthread_rwlock_init
- pthread_rwlock_rdlock
- pthread_rwlock_tryrdlock
- pthread_rwlock_trywrlock
- pthread_rwlock_unlock
- pthread_rwlock_wrlock
- pthread_rwlockattr_destroy
- pthread_rwlockattr_getpshared
- pthread_rwlockattr_init
- pthread_rwlockattr_setpshared
- pthread_self
- pthread_setcancelstate
- pthread_setcanceltype
- pthread_setconcurrency
- pthread_setschedparam
- pthread_setschedprio
- pthread_setspecific
- pthread_sigmask
- pthread_spin_destroy
- pthread_spin_init
- pthread_spin_lock
- pthread_spin_trylock
- pthread_spin_unlock
- pthread_testcancel
- ptsname
- putc
- putc_unlocked
- putchar
- putchar_unlocked
- putenv
- puts
- pututxline
- putwc
- putwchar
- pwrite
- qsort
- raise
- rand
- rand_r
- random
- read
- readdir
- readdir_r
- readlink
- readlinkat
- readv
- realloc
- realpath
- recv
- recvfrom
- recvmsg
- regcomp
- regerror
- regexec
- regfree
- remainder
- remainderf
- remove
- remque
- remquo
- remquof
- rename
- renameat
- rewind
- rewinddir
- rint
- rintf
- rintl
- rmdir
- round
- roundf
- scalbln
- scalblnf
- scalbn
- scalbnf
- scandir
- scanf
- sched_get_priority_max
- sched_get_priority_min
- sched_getparam
- sched_getscheduler
- sched_rr_get_interval
- sched_setparam
- sched_setscheduler
- sched_yield
- seed48
- seekdir
- select
- sem_close
- sem_destroy
- sem_getvalue
- sem_init
- sem_open
- sem_post
- sem_timedwait
- sem_trywait
- sem_unlink
- sem_wait
- semctl (see chapter "Implementation Notes")
- semget (see chapter "Implementation Notes")
- semop (see chapter "Implementation Notes")
- send
- sendmsg
- sendto
- setbuf
- setegid
- setenv
- seteuid
- setgid
- setgrent
- sethostent
- setitimer (see chapter "Implementation Notes")
- setjmp
- setkey (available in external "crypt" library)
- setlocale
- setlogmask
- setpgid
- setpgrp
- setpriority
- setprotoent
- setpwent
- setregid
- setreuid
- setrlimit
- setservent
- setsid
- setsockopt
- setstate
- setuid
- setutxent
- setvbuf
- shm_open
- shm_unlink
- shmat (see chapter "Implementation Notes")
- shmctl (see chapter "Implementation Notes")
- shmdt (see chapter "Implementation Notes")
- shmget (see chapter "Implementation Notes")
- shutdown
- sigaction
- sigaddset
- sigdelset
- sigemptyset
- sigfillset
- sighold
- sigignore
- siginterrupt
- sigismember
- siglongjmp
- signal
- signbit (see chapter "Implementation Notes")
- signgam
- sigpause
- sigpending
- sigprocmask
- sigqueue
- sigrelse
- sigset
- sigsetjmp
- sigsuspend
- sigwait
- sigwaitinfo
- sin
- sinf
- sinh
- sinhf
- sleep
- snprintf
- socket
- socketpair
- sprintf
- sqrt
- sqrtf
- srand
- srand48
- srandom
- sscanf
- stat
- statvfs
- stderr
- stdin
- stdout
- stpcpy
- stpncpy
- strcasecmp
- strcat
- strchr
- strcmp
- strcoll
- strcpy
- strcspn
- strdup
- strerror
- strerror_r
- strfmon
- strftime
- strlen
- strncasecmp
- strncat
- strncmp
- strncpy
- strndup
- strnlen
- strpbrk
- strptime
- strrchr
- strsignal
- strspn
- strstr
- strtod
- strtof
- strtoimax
- strtok
- strtok_r
- strtol
- strtoll
- strtoul
- strtoull
- strtoumax
- strxfrm
- swab
- swprintf
- swscanf
- symlink
- symlinkat
- sync
- sysconf
- syslog
- system
- tan
- tanf
- tanh
- tanhf
- tcdrain
- tcflow
- tcflush
- tcgetattr
- tcgetpgrp
- tcsendbreak
- tcsetattr
- tcsetpgrp
- tdelete
- telldir
- tempnam
- tfind
- tgamma
- tgammaf
- time
- timer_create (see chapter "Implementation Notes")
- timer_delete
- timer_gettime
- timer_settime
- times
- timezone
- tmpfile
- tmpnam
- toascii
- tolower
- toupper
- towctrans
- towlower
- towupper
- trunc
- truncate
- truncf
- tsearch
- ttyname
- ttyname_r
- twalk
- tzname
- tzset
- umask
- uname
- ungetc
- ungetwc
- unlink
- unlinkat
- unlockpt
- unsetenv
- utime
- utimensat
- utimes
- va_arg
- va_copy
- va_end
- va_start
- vdprintf
- vfprintf
- vfscanf
- vfwprintf
- vfwscanf
- vprintf
- vscanf
- vsnprintf
- vsprintf
- vsscanf
- vswprintf
- vswscanf
- vwprintf
- vwscanf
- wait
- waitpid
- wcpcpy
- wcpncpy
- wcrtomb
- wcscasecmp
- wcscat
- wcschr
- wcscmp
- wcscoll
- wcscpy
- wcscspn
- wcsdup
- wcsftime
- wcslen
- wcsncasecmp
- wcsncat
- wcsncmp
- wcsncpy
- wcsnlen
- wcsnrtombs
- wcspbrk
- wcsrchr
- wcsrtombs
- wcsspn
- wcsstr
- wcstod
- wcstof
- wcstoimax
- wcstok
- wcstol
- wcstoll
- wcstombs
- wcstoul
- wcstoull
- wcstoumax
- wcswidth
- wcsxfrm
- wctob
- wctomb
- wctrans
- wctype
- wcwidth
- wmemchr
- wmemcmp
- wmemcpy
- wmemmove
- wmemset
- wordexp
- wordfree
- wprintf
- write
- writev
- wscanf
- y0
- y1
- yn
-</screen>
-
-</sect1>
-
-<sect1 id="std-bsd"><title>System interfaces compatible with BSD functions:</title>
-
-<screen>
- __b64_ntop
- __b64_pton
- arc4random
- arc4random_addrandom
- arc4random_buf
- arc4random_stir
- arc4random_uniform
- bindresvport
- bindresvport_sa
- cfmakeraw
- cfsetspeed
- clearerr_unlocked
- daemon
- dn_comp
- dn_expand
- dn_skipname
- drem
- eaccess
- endusershell
- err
- errx
- feof_unlocked
- ferror_unlocked
- fflush_unlocked
- fileno_unlocked
- fgetc_unlocked
- finite
- finitef
- fiprintf
- flock (see chapter "Implementation Notes")
- forkpty
- fpurge
- fputc_unlocked
- fread_unlocked
- freeifaddrs
- fstatfs
- fts_children
- fts_close
- fts_get_clientptr
- fts_get_stream
- fts_open
- fts_read
- fts_set
- fts_set_clientptr
- funopen
- futimes
- fwrite_unlocked
- gamma
- gamma_r
- gammaf
- gammaf_r
- getdtablesize
- getgrouplist
- getifaddrs
- getpagesize
- getpeereid
- getprogname
- getusershell
- herror
- hstrerror
- inet_aton
- inet_makeaddr
- inet_netof
- inet_network
- initgroups
- iruserok
- iruserok_sa
- login
- login_tty
- logout
- logwtmp
- madvise
- mkstemps
- openpty
- qsort_r (see chapter "Implementation Notes")
- rcmd
- rcmd_af
- reallocf
- res_close
- res_init
- res_mkquery
- res_nclose
- res_ninit
- res_nmkquery
- res_nquery
- res_nquerydomain
- res_nsearch
- res_nsend
- res_query
- res_querydomain
- res_search
- res_send
- revoke
- rexec
- rresvport
- rresvport_af
- ruserok
- sbrk
- setbuffer
- setgroups
- setlinebuf
- setpassent
- setprogname
- settimeofday
- setusershell
- statfs
- strcasestr
- strlcat
- strlcpy
- strsep
- updwtmp
- valloc
- verr
- verrx
- vhangup (see chapter "Implementation Notes")
- vsyslog
- vwarn
- vwarnx
- wait3
- wait4
- warn
- warnx
- wcslcat
- wcslcpy
-</screen>
-
-</sect1>
-
-<sect1 id="std-gnu"><title>System interfaces compatible with GNU or Linux extensions:</title>
-
-<screen>
- accept4
- argz_add
- argz_add_sep
- argz_append
- argz_count
- argz_create
- argz_create_sep
- argz_delete
- argz_extract
- argz_insert
- argz_next
- argz_replace
- argz_stringify
- asnprintf
- asprintf
- asprintf_r
- canonicalize_file_name
- dremf
- dup3
- envz_add
- envz_entry
- envz_get
- envz_merge
- envz_remove
- envz_strip
- error
- error_at_line
- euidaccess
- execvpe
- exp10
- exp10f
- fcloseall
- fcloseall_r
- fegetprec
- fesetprec
- feenableexcept
- fedisableexcept
- fegetexcept
- ffsl
- ffsll
- fgets_unlocked
- fgetwc_unlocked
- fgetws_unlocked
- fgetxattr
- flistxattr
- fopencookie
- fputs_unlocked
- fputwc_unlocked
- fputws_unlocked
- fremovexattr
- fsetxattr
- get_avphys_pages
- get_current_dir_name
- get_phys_pages
- get_nprocs
- get_nprocs_conf
- getmntent_r
- getopt_long
- getopt_long_only
- getpt
- getwc_unlocked
- getwchar_unlocked
- getxattr
- lgetxattr
- listxattr
- llistxattr
- lremovexattr
- lsetxattr
- memmem
- mempcpy
- memrchr
- mkostemp
- mkostemps
- pipe2
- pow10
- pow10f
- ppoll
- pthread_getattr_np
- pthread_sigqueue
- ptsname_r
- putwc_unlocked
- putwchar_unlocked
- qsort_r (see chapter "Implementation Notes")
- quotactl
- rawmemchr
- removexattr
- scandirat
- setxattr
- strchrnul
- sysinfo
- tdestroy
- timegm
- timelocal
- updwtmpx
- utmpxname
- vasnprintf
- vasprintf
- vasprintf_r
-</screen>
-
-</sect1>
-
-<sect1 id="std-solaris"><title>System interfaces compatible with Solaris or SunOS functions:</title>
-
-<screen>
- __fbufsize
- __flbf
- __fpending
- __fpurge
- __freadable
- __freading
- __fsetlocking
- __fwritable
- __fwriting
- acl
- aclcheck
- aclfrommode
- aclfrompbits
- aclfromtext
- aclsort
- acltomode
- acltopbits
- acltotext
- endmntent
- facl
- futimesat
- getmntent
- memalign
- setmntent
- xdr_array (available in external "libtirpc" library)
- xdr_bool (available in external "libtirpc" library)
- xdr_bytes (available in external "libtirpc" library)
- xdr_char (available in external "libtirpc" library)
- xdr_double (available in external "libtirpc" library)
- xdr_enum (available in external "libtirpc" library)
- xdr_float (available in external "libtirpc" library)
- xdr_free (available in external "libtirpc" library)
- xdr_hyper (available in external "libtirpc" library)
- xdr_int (available in external "libtirpc" library)
- xdr_int16_t (available in external "libtirpc" library)
- xdr_int32_t (available in external "libtirpc" library)
- xdr_int64_t (available in external "libtirpc" library)
- xdr_int8_t (available in external "libtirpc" library)
- xdr_long (available in external "libtirpc" library)
- xdr_longlong_t (available in external "libtirpc" library)
- xdr_netobj (available in external "libtirpc" library)
- xdr_opaque (available in external "libtirpc" library)
- xdr_pointer (available in external "libtirpc" library)
- xdr_reference (available in external "libtirpc" library)
- xdr_short (available in external "libtirpc" library)
- xdr_sizeof (available in external "libtirpc" library)
- xdr_string (available in external "libtirpc" library)
- xdr_u_char (available in external "libtirpc" library)
- xdr_u_hyper (available in external "libtirpc" library)
- xdr_u_int (available in external "libtirpc" library)
- xdr_u_int16_t (available in external "libtirpc" library)
- xdr_u_int32_t (available in external "libtirpc" library)
- xdr_u_int64_t (available in external "libtirpc" library)
- xdr_u_int8_t (available in external "libtirpc" library)
- xdr_u_long (available in external "libtirpc" library)
- xdr_u_longlong_t (available in external "libtirpc" library)
- xdr_u_short (available in external "libtirpc" library)
- xdr_uint16_t (available in external "libtirpc" library)
- xdr_uint32_t (available in external "libtirpc" library)
- xdr_uint64_t (available in external "libtirpc" library)
- xdr_uint8_t (available in external "libtirpc" library)
- xdr_union (available in external "libtirpc" library)
- xdr_vector (available in external "libtirpc" library)
- xdr_void (available in external "libtirpc" library)
- xdr_wrapstring (available in external "libtirpc" library)
- xdrmem_create (available in external "libtirpc" library)
- xdrrec_create (available in external "libtirpc" library)
- xdrrec_endofrecord (available in external "libtirpc" library)
- xdrrec_eof (available in external "libtirpc" library)
- xdrrec_skiprecord (available in external "libtirpc" library)
- __xdrrec_getrec (available in external "libtirpc" library)
- __xdrrec_setnonblock (available in external "libtirpc" library)
- xdrstdio_create (available in external "libtirpc" library)
-</screen>
-
-</sect1>
-
-<sect1 id="std-deprec"><title>Other UNIX system interfaces, deprecated or not in POSIX.1-2008:</title>
-
-<screen>
- bcmp (POSIX.1-2001, SUSv3)
- bcopy (SUSv3)
- bzero (SUSv3)
- chroot (SUSv2) (see chapter "Implementation Notes")
- clock_setres (QNX, VxWorks) (see chapter "Implementation Notes")
- cuserid (POSIX.1-1988, SUSv2)
- ecvt (SUSv3)
- endutent (XPG2)
- fcvt (SUSv3)
- ftime (SUSv3)
- gcvt (SUSv3)
- gethostbyaddr (SUSv3)
- gethostbyname (SUSv3)
- gethostbyname2 (first defined in BIND 4.9.4)
- getpass (SUSv2)
- getutent (XPG2)
- getutid (XPG2)
- getutline (XPG2)
- getw (SVID)
- getwd (SUSv3)
- h_errno (SUSv3)
- index (SUSv3)
- mallinfo (SVID)
- mallopt (SVID)
- mktemp (SUSv3)
- on_exit (SunOS)
- pthread_attr_getstackaddr (SUSv3)
- pthread_attr_setstackaddr (SUSv3)
- pthread_continue (XPG2)
- pthread_getsequence_np (Tru64)
- pthread_suspend (XPG2)
- pthread_yield (POSIX.1c drafts)
- pututline (XPG2)
- putw (SVID)
- rindex (SUSv3)
- scalb (SUSv3)
- setutent (XPG2)
- stime (SVID)
- sys_errlist (BSD)
- sys_nerr (BSD)
- sys_siglist (BSD)
- ttyslot (SUSv2)
- ualarm (SUSv3)
- usleep (SUSv3)
- utmpname (XPG2)
- vfork (SUSv3) (see chapter "Implementation Notes")
-</screen>
-
-</sect1>
-
-<sect1 id="std-notimpl"><title>NOT implemented system interfaces from the Single Unix Specification, Volume 4:</title>
-
-<screen>
- acoshl
- acosl
- aio_cancel
- aio_error
- aio_fsync
- aio_read
- aio_return
- aio_suspend
- aio_write
- asinhl
- asinl
- atan2l
- atanhl
- atanl
- cabsl
- cacoshl
- cacosl
- cargl
- casinl
- catanhl
- catanl
- cbrtl
- ccoshl
- ccosl
- ceill
- cexpl
- cimagl
- clogl
- conjl
- copysignl
- coshl
- cosl
- cpowl
- cprojl
- creall
- csinhl
- csinl
- csqrtl
- ctanhl
- ctanl
- duplocale
- endnetent
- erfcl
- erfl
- exp2l
- expl
- expm1l
- fabsl
- fattach
- fdiml
- floorl
- fmal
- fmaxl
- fminl
- fmodl
- fmtmsg
- freelocale
- frexpl
- getdate
- getdate_err
- gethostent
- getmsg
- getnetbyaddr
- getnetbyname
- getnetent
- getpmsg
- hypotl
- ilogbl
- isalnum_l
- isalpha_l
- isastream
- isblank_l
- iscntrl_l
- isdigit_l
- isgraph_l
- islower_l
- isprint_l
- ispunct_l
- isspace_l
- isupper_l
- iswalnum_l
- iswalpha_l
- iswblank_l
- iswcntrl_l
- iswdigit_l
- iswgraph_l
- iswlower_l
- iswprint_l
- iswpunct_l
- iswspace_l
- iswupper_l
- iswxdigit_l
- isxdigit_l
- ldexpl
- lgammal
- lio_listio
- llroundl
- log10l
- log1pl
- log2l
- logbl
- logl
- lroundl
- mlockall
- modfl
- munlockall
- nanl
- nearbyintl
- newlocale
- nextafterl
- nexttoward
- nexttowardf
- nexttowardl
- posix_mem_offset
- posix_trace[...]
- posix_typed_[...]
- powl
- pthread_barrier[...]
- pthread_mutexattr_getrobust
- pthread_mutexattr_setrobust
- pthread_mutex_consistent
- pthread_mutex_timedlock
- pthread_rwlock_timedrdlock
- pthread_rwlock_timedwrlock
- putmsg
- reminderl
- remquol
- roundl
- scalblnl
- scalbnl
- setnetent
- sigaltstack
- sigtimedwait
- sinhl
- sinl
- sockatmark
- sqrtl
- strcasecmp_l
- strcoll_l
- strfmon_l
- strncasecmp_l
- strtold
- strxfrm_l
- tanhl
- tanl
- tcgetsid
- tgammal
- timer_getoverrun
- tolower_l
- toupper_l
- towctrans_l
- truncl
- ulimit
- uselocale
- waitid
- wcscasecmp_l
- wcsncasecmp_l
- wcstold
- wcsxfrm_l
- wctrans_l
- wctype_l
-</screen>
-
-</sect1>
-
-<sect1 id="std-notes"><title>Implementation Notes</title>
-
-<para><function>chroot</function> only emulates a chroot function call
-by keeping track of the current root and accomodating this in the file
-related function calls. A real chroot functionality is not supported by
-Windows however.</para>
-
-<para><function>clock_nanosleep</function> currently supports only
-CLOCK_REALTIME and CLOCK_MONOTONIC. <function>clock_setres</function>,
-<function>clock_settime</function>, and <function>timer_create</function>
-currently support only CLOCK_REALTIME.</para>
-
-<para>POSIX file locks via <function>fcntl</function> or
-<function>lockf</function>, as well as BSD <function>flock</function> locks
-are advisory locks. They don't interact with Windows mandatory locks, nor
-do POSIX fcntl locks interfere with BSD flock locks or vice versa.</para>
-
-<para>BSD file locks created via <function>flock</function> are only
-propagated to the direct parent process, not to grand parents or sibling
-processes. The locks are only valid in the creating process, its parent
-process, and subsequently started child processes sharing the same file
-descriptor.</para>
-
-<para>In very rare circumstances an application would want to use Windows
-mandatory locks to interact with non-Cygwin Windows processes accessing the
-same file (databases, etc). For these purposes, the entire locking mechanism
-(fcntl/flock/lockf) can be switched to Windows mandatory locks on a
-per-descriptor/per-process basis. For this purpose, use the call
-
-<screen>
- fcntl (fd, F_LCK_MANDATORY, 1);
-</screen>
-
-After that, all file locks on this descriptor will follow Windows mandatory
-record locking semantics: Locks are per-descriptor/per-process; locks are not
-propagated to child processes, not even via <function>execve</function>;
-no atomic replacement of read locks with write locks and vice versa on the
-same descriptor; locks have to be unlocked exactly as they have been locked.
-</para>
-
-<para><function>fpclassify</function>, <function>isfinite</function>,
-<function>isgreater</function>, <function>isgreaterequal</function>,
-<function>isinf</function>, <function>isless</function>,
-<function>islessequal</function>, <function>islessgreater</function>,
-<function>isnan</function>, <function>isnormal</function>,
-<function>isunordered</function>, and <function>signbit</function>
-only support float and double arguments, not long double arguments.</para>
-
-<para><function>getitimer</function> and <function>setitimer</function>
-only support ITIMER_REAL for now.</para>
-
-<para><function>link</function> will fail on FAT, FAT32, and other filesystems
-not supporting hardlinks, just as on Linux.</para>
-
-<para><function>lseek</function> only works properly on files opened in
-binary mode. On files opened in textmode (via mount mode or explicit
-open flag) its positioning is potentially unreliable.</para>
-
-<para><function>setuid</function> is only safe against reverting the user
-switch after a call to one of the exec(2) functions took place. Windows
-doesn't support a non-revertable user switch within the context of Win32
-processes.</para>
-
-<para><function>vfork</function> just calls <function>fork</function>.</para>
-
-<para><function>vhangup</function> and <function>revoke</function> always
-return -1 and set errno to ENOSYS. <function>grantpt</function> and
-<function>unlockpt</function> always just return 0.</para>
-
-<para>The XSI IPC functions <function>semctl</function>,
-<function>semget</function>, <function>semop</function>,
-<function>shmat</function>, <function>shmctl</function>,
-<function>shmdt</function>, <function>shmget</function>,
-<function>msgctl</function>, <function>msgget</function>,
-<function>msgrcv</function> and <function>msgsnd</function> are only
-available when cygserver is running.</para>
-
-<para>The Linux-specific function <function>quotactl</function> only implements
-what works on Windows: Windows only supports user block quotas on NTFS, no
-group quotas, no inode quotas, no time constraints.</para>
-
-<para><function>qsort_r</function> is available in both BSD and GNU flavors,
-depending on whether _BSD_SOURCE or _GNU_SOURCE is defined when compiling.</para>
-
-</sect1>
-
-</chapter>
diff --git a/winsup/doc/programming.xml b/winsup/doc/programming.xml
deleted file mode 100644
index 4b65c4090..000000000
--- a/winsup/doc/programming.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-
-<chapter id="programming" xmlns:xi="http://www.w3.org/2001/XInclude">
- <title>Programming with Cygwin</title>
-
- <xi:include href="gcc.xml"/>
- <xi:include href="gdb.xml"/>
- <xi:include href="dll.xml"/>
- <xi:include href="windres.xml"/>
-</chapter>
diff --git a/winsup/doc/setup-env.xml b/winsup/doc/setup-env.xml
deleted file mode 100644
index ab3d50bdc..000000000
--- a/winsup/doc/setup-env.xml
+++ /dev/null
@@ -1,129 +0,0 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-
-<sect1 id="setup-env"><title>Environment Variables</title>
-
-<sect2 id="setup-env-ov"><title>Overview</title>
-
-<para>
-All Windows environment variables are imported when Cygwin starts.
-Apart from that, you may wish to specify settings of several important
-environment variables that affect Cygwin's operation.</para>
-
-<para>
-The <envar>CYGWIN</envar> variable is used to configure a few global
-settings for the Cygwin runtime system. Typically you can leave
-<envar>CYGWIN</envar> unset, but if you want to set one ore more
-options, you can set it using a syntax like this, depending on the shell
-in which you're setting it. Here is an example in CMD syntax:</para>
-
-<screen>
-<prompt>C:\&gt;</prompt> <userinput>set CYGWIN=error_start:C:\cygwin\bin\gdb.exe glob</userinput>
-</screen>
-
-<para>
-This is, of course, just an example. For the recognized settings of the
-<envar>CYGWIN</envar> environment variable, see
-<xref linkend="using-cygwinenv"></xref>.
-</para>
-
-<para>
-Locale support is controlled by the <envar>LANG</envar> and
-<envar>LC_xxx</envar> environment variables. Since Cygwin 1.7.2, all of
-them are honored and have a meaning. For a more detailed description see
-<xref linkend="setup-locale"></xref>.
-</para>
-
-<para>
-The <envar>PATH</envar> environment variable is used by Cygwin
-applications as a list of directories to search for executable files
-to run. This environment variable is converted from Windows format
-(e.g. <filename>C:\Windows\system32;C:\Windows</filename>) to UNIX format
-(e.g., <filename>/cygdrive/c/Windows/system32:/cygdrive/c/Windows</filename>)
-when a Cygwin process first starts.
-Set it so that it contains at least the <filename>x:\cygwin\bin</filename>
-directory where "<filename>x:\cygwin</filename> is the "root" of your
-cygwin installation if you wish to use cygwin tools outside of bash.
-This is usually done by the batch file you're starting your shell with.
-</para>
-
-<para>
-The <envar>HOME</envar> environment variable is used by many programs to
-determine the location of your home directory and we recommend that it be
-defined. This environment variable is also converted from Windows format
-when a Cygwin process first starts. It's usually set in the shell
-profile scripts in the /etc directory.
-</para>
-
-<para>
-The <envar>TERM</envar> environment variable specifies your terminal
-type. It is automatically set to <literal>cygwin</literal> if you have
-not set it to something else.
-</para>
-
-<para>The <envar>LD_LIBRARY_PATH</envar> environment variable is used by
-the Cygwin function <function>dlopen ()</function> as a list of
-directories to search for .dll files to load. This environment variable
-is converted from Windows format to UNIX format when a Cygwin process
-first starts. Most Cygwin applications do not make use of the
-<function>dlopen ()</function> call and do not need this variable.
-</para>
-
-<para>
-In addition to <envar>PATH</envar>, <envar>HOME</envar>,
-and <envar>LD_LIBRARY_PATH</envar>, there are three other environment
-variables which, if they exist in the Windows environment, are
-converted to UNIX format: <envar>TMPDIR</envar>, <envar>TMP</envar>,
-and <envar>TEMP</envar>. The first is not set by default in the
-Windows environment but the other two are, and they point to the
-default Windows temporary directory. If set, these variables will be
-used by some Cygwin applications, possibly with unexpected results.
-You may therefore want to unset them by adding the following two lines
-to your <filename>~/.bashrc</filename> file:
-
-<screen>
-unset TMP
-unset TEMP
-</screen>
-
-This is done in the default <filename>~/.bashrc</filename> file.
-Alternatively, you could set <envar>TMP</envar>
-and <envar>TEMP</envar> to point to <filename>/tmp</filename> or to
-any other temporary directory of your choice. For example:
-
-<screen>
-export TMP=/tmp
-export TEMP=/tmp
-</screen>
-</para>
-
-</sect2>
-
-<sect2 id="setup-env-win32"><title>Restricted Win32 environment</title>
-
-<para>There is a restriction when calling Win32 API functions which
-require a fully set up application environment. Cygwin maintains its own
-environment in POSIX style. The Win32 environment is usually stripped
-to a bare minimum and not at all kept in sync with the Cygwin POSIX
-environment.</para>
-
-<para>If you need the full Win32 environment set up in a Cygwin process,
-you have to call</para>
-
-<screen>
-#include &lt;sys/cygwin.h&gt;
-
-cygwin_internal (CW_SYNC_WINENV);
-</screen>
-
-<para>to synchronize the Win32 environment with the Cygwin environment.
-Note that this only synchronizes the Win32 environment once with the
-Cygwin environment. Later changes using the <function>setenv</function>
-or <function>putenv</function> calls are not reflected in the Win32
-environment. In these cases, you have to call the aforementioned
-<function>cygwin_internal</function> call again.</para>
-
-</sect2>
-
-</sect1>
diff --git a/winsup/doc/setup-files.xml b/winsup/doc/setup-files.xml
deleted file mode 100644
index 3fc4d0ccb..000000000
--- a/winsup/doc/setup-files.xml
+++ /dev/null
@@ -1,85 +0,0 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-
-<sect1 id="setup-files"><title>Customizing bash</title>
-
-<para>
-To set up bash so that cut and paste work properly, click on the
-"Properties" button of the window, then on the "Misc" tab. Make sure
-that "QuickEdit mode" and "Insert mode" are checked. These settings
-will be remembered next time you run bash from that shortcut. Similarly
-you can set the working directory inside the "Program" tab. The entry
-"%HOME%" is valid, but requires that you set <envar>HOME</envar> in
-the Windows environment.
-</para>
-
-<para>
-Your home directory should contain three initialization files
-that control the behavior of bash. They are
-<filename>.profile</filename>, <filename>.bashrc</filename> and
-<filename>.inputrc</filename>. The Cygwin base installation creates
-stub files when you start bash for the first time.</para>
-
-<para>
-<filename>.profile</filename> (other names are also valid, see the bash man
-page) contains bash commands. It is executed when bash is started as login
-shell, e.g. from the command <command>bash --login</command>.
-This is a useful place to define and
-export environment variables and bash functions that will be used by bash
-and the programs invoked by bash. It is a good place to redefine
-<envar>PATH</envar> if needed. We recommend adding a ":." to the end of
-<envar>PATH</envar> to also search the current working directory (contrary
-to DOS, the local directory is not searched by default). Also to avoid
-delays you should either <command>unset</command> <envar>MAILCHECK</envar>
-or define <envar>MAILPATH</envar> to point to your existing mail inbox.
-</para>
-
-<para>
-<filename>.bashrc</filename> is similar to
-<filename>.profile</filename> but is executed each time an interactive
-bash shell is launched. It serves to define elements that are not
-inherited through the environment, such as aliases. If you do not use
-login shells, you may want to put the contents of
-<filename>.profile</filename> as discussed above in this file
-instead.
-</para>
-
-<para>
-<screen>
-shopt -s nocaseglob
-</screen>
-will allow bash to glob filenames in a case-insensitive manner.
-Note that <filename>.bashrc</filename> is not called automatically for login
-shells. You can source it from <filename>.profile</filename>.
-</para>
-
-<para>
-<filename>.inputrc</filename> controls how programs using the readline
-library (including <command>bash</command>) behave. It is loaded
-automatically. For full details see the <literal>Function and Variable
-Index</literal> section of the GNU <systemitem>readline</systemitem> manual.
-Consider the following settings:
-<screen>
-# Ignore case while completing
-set completion-ignore-case on
-# Make Bash 8bit clean
-set meta-flag on
-set convert-meta off
-set output-meta on
-</screen>
-The first command makes filename completion case insensitive, which can
-be convenient in a Windows environment. The next three commands allow
-<command>bash</command> to display 8-bit characters, useful for
-languages with accented characters. Note that tools that do not use
-<systemitem>readline</systemitem> for display, such as
-<command>less</command> and <command>ls</command>, require additional
-settings, which could be put in your <filename>.bashrc</filename>:
-<screen>
-alias less='/bin/less -r'
-alias ls='/bin/ls -F --color=tty --show-control-chars'
-</screen>
-</para>
-
-</sect1>
-
diff --git a/winsup/doc/setup-locale.xml b/winsup/doc/setup-locale.xml
deleted file mode 100644
index de0532f62..000000000
--- a/winsup/doc/setup-locale.xml
+++ /dev/null
@@ -1,432 +0,0 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-
-<sect1 id="setup-locale"><title>Internationalization</title>
-
-<sect2 id="setup-locale-ov"><title>Overview</title>
-
-<para>
-Internationalization support is controlled by the <envar>LANG</envar> and
-<envar>LC_xxx</envar> environment variables. You can set all of them
-but Cygwin itself only honors the variables <envar>LC_ALL</envar>,
-<envar>LC_CTYPE</envar>, and <envar>LANG</envar>, in this order, according
-to the POSIX standard. The content of these variables should follow the
-POSIX standard for a locale specifier. The correct form of a locale
-specifier is</para>
-
-<screen>
- language[[_TERRITORY][.charset][@modifier]]
-</screen>
-
-<para>"language" is a lowercase two character string per ISO 639-1, or,
-if there is no ISO 639-1 code for the language (for instance, "Lower Sorbian"),
-a three character string per ISO 639-3.</para>
-
-<para>"TERRITORY" is an uppercase two character string per ISO 3166, charset is
-one of a list of supported character sets. The modifier doesn't matter
-here (though some are recognized, see below). If you're interested in the
-exact description, you can find it in the online publication of the POSIX
-manual pages on the homepage of the
-<ulink url="http://www.opengroup.org/">Open Group</ulink>.</para>
-
-<para>Typical locale specifiers are</para>
-
-<screen>
- "de_CH" language = German, territory = Switzerland, default charset
- "fr_FR.UTF-8" language = french, territory = France, charset = UTF-8
- "ko_KR.eucKR" language = korean, territory = South Korea, charset = eucKR
- "syr_SY" language = Syriac, territory = Syria, default charset
-</screen>
-
-<para>
-If the locale specifier does not follow the above form, Cygwin checks
-if the locale is one of the locale aliases defined in the file
-<filename>/usr/share/locale/locale.alias</filename>. If so, and if
-the replacement localename is supported by the underlying Windows,
-the locale is accepted, too. So, given the default content of the
-<filename>/usr/share/locale/locale.alias</filename> file, the below
-examples would be valid locale specifiers as well.
-</para>
-
-<screen>
- "catalan" defined as "ca_ES.ISO-8859-1" in locale.alias
- "japanese" defined as "ja_JP.eucJP" in locale.alias
- "turkish" defined as "tr_TR.ISO-8859-9" in locale.alias
-</screen>
-
-<para>The file <filename>/usr/share/locale/locale.alias</filename> is
-provided by the gettext package under Cygwin.</para>
-
-<para>
-At application startup, the application's locale is set to the default
-"C" or "POSIX" locale. Under Cygwin 1.7.2 and later, this locale defaults
-to the ASCII character set on the application level. If you want to stick
-to the "C" locale and only change to another charset, you can define this
-by setting one of the locale environment variables to "C.charset". For
-instance</para>
-
-<screen>
- "C.ISO-8859-1"
-</screen>
-
-<note><para>The default locale in the absence of the aforementioned locale
-environment variables is "C.UTF-8".</para></note>
-
-<para>Windows uses the UTF-16 charset exclusively to store the names
-of any object used by the Operating System. This is especially important
-with filenames. Cygwin uses the setting of the locale environment variables
-<envar>LC_ALL</envar>, <envar>LC_CTYPE</envar>, and <envar>LANG</envar>, to
-determine how to convert Windows filenames from their UTF-16 representation
-to the singlebyte or multibyte character set used by Cygwin.</para>
-
-<para>
-The setting of the locale environment variables at process startup
-is effective for Cygwin's internal conversions to and from the Windows UTF-16
-object names for the entire lifetime of the current process. Changing
-the environment variables to another value changes the way filenames are
-converted in subsequently started child processes, but not within the same
-process.</para>
-
-<para>
-However, even if one of the locale environment variables is set to
-some other value than "C", this does <emphasis>only</emphasis> affect
-how Cygwin itself converts filenames. As the POSIX standard requires,
-it's the application's responsibility to activate that locale for its
-own purposes, typically by using the call</para>
-
-<screen>
- setlocale (LC_ALL, "");
-</screen>
-
-<para>early in the application code. Again, so that this doesn't get
-lost: If the application calls setlocale as above, and there is none
-of the important locale variables set in the environment, the locale
-is set to the default locale, which is "C.UTF-8".</para>
-
-<para>But what about applications which are not locale-aware? Per POSIX,
-they are running in the "C" or "POSIX" locale, which implies the ASCII
-charset. The Cygwin DLL itself, however, will nevertheless use the locale
-set in the environment (or the "C.UTF-8" default locale) for converting
-filenames etc.</para>
-
-<para>When the locale in the environment specifies an ASCII charset,
-for example "C" or "en_US.ASCII", Cygwin will still use UTF-8
-under the hood to translate filenames. This allows for easier
-interoperability with applications running in the default "C.UTF-8" locale.
-</para>
-
-<para>
-Starting with Cygwin 1.7.2, the language and territory are used to
-fetch locale-dependent information from Windows. If the language and
-territory are not known to Windows, the <function>setlocale</function>
-function fails.</para>
-
-<para>The following modifiers are recognized. Any other modifier is simply
-ignored for now.</para>
-
-<itemizedlist mark="bullet">
-
-<listitem><para>
-For locales which use the Euro (EUR) as currency, the modifier "@euro"
-can be added to enforce usage of the ISO-8859-15 character set, which
-includes a character for the "Euro" currency sign.
-</para></listitem>
-
-<listitem><para>
-The default script used for all Serbian language locales (sr_BA, sr_ME, sr_RS,
-and the deprecated sr_CS and sr_SP) is cyrillic. With the "@latin" modifier
-it gets switched to the latin script with the respective collation behaviour.
-</para></listitem>
-
-<listitem><para>
-The default charset of the "be_BY" locale (Belarusian/Belarus) is CP1251.
-With the "@latin" modifier it's UTF-8.
-</para></listitem>
-
-<listitem><para>
-The default charset of the "tt_RU" locale (Tatar/Russia) is ISO-8859-5.
-With the "@iqtelif" modifier it's UTF-8.
-</para></listitem>
-
-<listitem><para>
-The default charset of the "uz_UZ" locale (Uzbek/Uzbekistan) is ISO-8859-1.
-With the "@cyrillic" modifier it's UTF-8.
-</para></listitem>
-
-<listitem><para>
-There's a class of characters in the Unicode character set, called the
-"CJK Ambiguous Width" characters. For these characters, the width
-returned by the wcwidth/wcswidth functions is usually 1. This can be a
-problem with East-Asian languages, which historically use character sets
-where these characters have a width of 2. Therefore, wcwidth/wcswidth
-return 2 as the width of these characters when an East-Asian charset such
-as GBK or SJIS is selected, or when UTF-8 is selected and the language is
-specified as "zh" (Chinese), "ja" (Japanese), or "ko" (Korean). This is
-not correct in all circumstances, hence the locale modifier "@cjknarrow"
-can be used to force wcwidth/wcswidth to return 1 for the ambiguous width
-characters.
-</para></listitem>
-
-</itemizedlist>
-
-</sect2>
-
-<sect2 id="setup-locale-how"><title>How to set the locale</title>
-
-<itemizedlist mark="bullet">
-
-<listitem><para>
-Assume that you've set one of the aforementioned environment variables to some
-valid POSIX locale value, other than "C" and "POSIX". Assume further that
-you're living in Japan. You might want to use the language code "ja" and the
-territory "JP", thus setting, say, <envar>LANG</envar> to "ja_JP". You didn't
-set a character set, so what will Cygwin use now? Starting with Cygwin 1.7.2,
-the default character set is determined by the default Windows ANSI codepage
-for this language and territory. Cygwin uses a character set which is the
-typical Unix-equivalent to the Windows ANSI codepage. For instance:</para>
-
-<screen>
- "en_US" ISO-8859-1
- "el_GR" ISO-8859-7
- "pl_PL" ISO-8859-2
- "pl_PL@euro" ISO-8859-15
- "ja_JP" EUCJP
- "ko_KR" EUCKR
- "te_IN" UTF-8
-</screen>
-</listitem>
-
-<listitem><para>
-You don't want to use the default character set? In that case you have to
-specify the charset explicitly. For instance, assume you're from Japan and
-don't want to use the japanese default charset EUC-JP, but the Windows
-default charset SJIS. What you can do, for instance, is to set the
-<envar>LANG</envar> variable in the <command>mintty</command> Cygwin Terminal
-in the "Text" section of its "Options" dialog. If you're starting your
-Cygwin session via a batch file or a shortcut to a batch file, you can also
-just set LANG there:</para>
-
-<screen>
- @echo off
-
- C:
- chdir C:\cygwin\bin
- set LANG=ja_JP.SJIS
- bash --login -i
-</screen>
-
-<note><para>For a list of locales supported by your Windows machine, use the new
-<command>locale -a</command> command, which is part of the Cygwin package.
-For a description see <xref linkend="locale"></xref></para></note>
-
-<note><para>For a list of supported character sets, see
-<xref linkend="setup-locale-charsetlist"></xref>
-</para></note>
-</listitem>
-
-<listitem><para>
-Last, but not least, most singlebyte or doublebyte charsets have a big
-disadvantage. Windows filesystems use the Unicode character set in the
-UTF-16 encoding to store filename information. Not all characters
-from the Unicode character set are available in a singlebyte or doublebyte
-charset. While Cygwin has a workaround to access files with unusual
-characters (see <xref linkend="pathnames-unusual"></xref>), a better
-workaround is to use always the UTF-8 character set.</para>
-
-<para><emphasis>UTF-8 is the only multibyte character set which can represent
-every Unicode character.</emphasis></para>
-
-<screen>
- set LANG=es_MX.UTF-8
-</screen>
-
-<para>For a description of the Unicode standard, see the homepage of the
-<ulink url="http://www.unicode.org/">Unicode Consortium</ulink>.
-</para></listitem>
-
-</itemizedlist>
-
-</sect2>
-
-<sect2 id="setup-locale-console"><title>The Windows Console character set</title>
-
-<para>Sometimes the Windows console is used to run Cygwin applications.
-While terminal emulations like the Cygwin Terminal <command>mintty</command>
-or <command>xterm</command> have a distinct way to set the character set
-used for in- and output, the Windows console hasn't such a way, since it's
-not an application in its own right.</para>
-
-<para>This problem is solved in Cygwin as follows. When a Cygwin
-process is started in a Windows console (either explicitly from cmd.exe,
-or implicitly by, for instance, running the
-<filename>C:\cygwin\Cygwin.bat</filename> batch file), the Console character
-set is determined by the setting of the aforementioned
-internationalization environment variables, the same way as described in
-<xref linkend="setup-locale-how"></xref>. </para>
-
-<para>What is that good for? Why not switch the console character set with
-the applications requirements? After all, the application knows if it uses
-localization or not. However, what if a non-localized application calls
-a remote application which itself is localized? This can happen with
-<command>ssh</command> or <command>rlogin</command>. Both commands don't
-have and don't need localization and they never call
-<function>setlocale</function>. Setting one of the internationalization
-environment variable to the same charset as the remote machine before
-starting <command>ssh</command> or <command>rlogin</command> fixes that
-problem.</para>
-
-</sect2>
-
-<sect2 id="setup-locale-problems"><title>Potential Problems when using Locales</title>
-
-<para>
-You can set the above internationalization variables not only when
-starting the first Cygwin process, but also in your Cygwin shell on the
-fly, even switch to yet another character set, and yet another. In bash
-for instance:</para>
-
-<screen>
- <prompt>bash$</prompt> export LC_CTYPE="nl_BE.UTF-8"
-</screen>
-
-<para>However, here's a problem. At the start of the first Cygwin process
-in a session, the Windows environment is converted from UTF-16 to UTF-8.
-The environment is another of the system objects stored in UTF-16 in
-Windows.</para>
-
-<para>As long as the environment only contains ASCII characters, this is
-no problem at all. But if it contains native characters, and you're planning
-to use, say, GBK, the environment will result in invalid characters in
-the GBK charset. This would be especially a problem in variables like
-<envar>PATH</envar>. To circumvent the worst problems, Cygwin converts
-the <envar>PATH</envar> environment variable to the charset set in the
-environment, if it's different from the UTF-8 charset.</para>
-
-<note><para>Per POSIX, the name of an environment variable should only
-consist of valid ASCII characters, and only of uppercase letters, digits, and
-the underscore for maximum portability.</para></note>
-
-<para>Symbolic links, too, may pose a problem when switching charsets on
-the fly. A symbolic link contains the filename of the target file the
-symlink points to. When a symlink had been created with older versions
-of Cygwin, the current ANSI or OEM character set had been used to store
-the target filename, dependent on the old <envar>CYGWIN</envar>
-environment variable setting <envar>codepage</envar> (see <xref
-linkend="cygwinenv-removed-options"></xref>. If the target filename
-contains non-ASCII characters and you use another character set than
-your default ANSI/OEM charset, the target filename of the symlink is now
-potentially an invalid character sequence in the new character set.
-This behaviour is not different from the behaviour in other Operating
-Systems. So, if you suddenly can't access a symlink anymore which
-worked all these years before, maybe it's because you switched to
-another character set. This doesn't occur with symlinks created with
-Cygwin 1.7 or later. </para>
-
-<para>Another problem you might encounter is that older versions of
-Windows did not install all charsets by default. If you are running
-Windows XP or older, you can open the "Regional and Language Options"
-portion of the Control Panel, select the "Advanced" tab, and select
-entries from the "Code page conversion tables" list. The following
-entries are useful to cygwin: 932/SJIS, 936/GBK, 949/EUC-KR, 950/Big5,
-20932/EUC-JP.</para>
-
-</sect2>
-
-<sect2 id="setup-locale-charsetlist"><title>List of supported character sets</title>
-
-<para>Last but not least, here's the list of currently supported character
-sets. The left-hand expression is the name of the charset, as you would use
-it in the internationalization environment variables as outlined above.
-Note that charset specifiers are case-insensitive. <literal>EUCJP</literal>
-is equivalent to <literal>eucJP</literal> or <literal>eUcJp</literal>.
-Writing the charset in the exact case as given in the list below is a
-good convention, though.
-</para>
-
-<para>The right-hand side is the number of the equivalent Windows
-codepage as well as the Windows name of the codepage. They are only
-noted here for reference. Don't try to use the bare codepage number or
-the Windows name of the codepage as charset in locale specifiers, unless
-they happen to be identical with the left-hand side. Especially in case
-of the "CPxxx" style charsets, always use them with the trailing "CP".</para>
-
-<para>This works:</para>
-
-<screen>
- set LC_ALL=en_US.CP437
-</screen>
-
-<para>This does <emphasis>not</emphasis> work:</para>
-
-<screen>
- set LC_ALL=en_US.437
-</screen>
-
-<para>You can find a full list of Windows codepages on the Microsoft MSDN page
-<ulink url="http://msdn.microsoft.com/en-us/library/dd317756(VS.85).aspx">Code Page Identifiers</ulink>.</para>
-
-<screen>
- Charset Codepage
- ------------------- -------------------------------------------
- ASCII 20127 (US_ASCII)
-
- CP437 437 (OEM United States)
- CP720 720 (DOS Arabic)
- CP737 737 (OEM Greek)
- CP775 775 (OEM Baltic)
- CP850 850 (OEM Latin 1, Western European)
- CP852 852 (OEM Latin 2, Central European)
- CP855 855 (OEM Cyrillic)
- CP857 857 (OEM Turkish)
- CP858 858 (OEM Latin 1 + Euro Symbol)
- CP862 862 (OEM Hebrew)
- CP866 866 (OEM Russian)
- CP874 874 (ANSI/OEM Thai)
- CP932 932 (Shift_JIS, not exactly identical to SJIS)
- CP1125 1125 (OEM Ukraine)
- CP1250 1250 (ANSI Central European)
- CP1251 1251 (ANSI Cyrillic)
- CP1252 1252 (ANSI Latin 1, Western European)
- CP1253 1253 (ANSI Greek)
- CP1254 1254 (ANSI Turkish)
- CP1255 1255 (ANSI Hebrew)
- CP1256 1256 (ANSI Arabic)
- CP1257 1257 (ANSI Baltic)
- CP1258 1258 (ANSI/OEM Vietnamese)
-
- ISO-8859-1 28591 (ISO-8859-1)
- ISO-8859-2 28592 (ISO-8859-2)
- ISO-8859-3 28593 (ISO-8859-3)
- ISO-8859-4 28594 (ISO-8859-4)
- ISO-8859-5 28595 (ISO-8859-5)
- ISO-8859-6 28596 (ISO-8859-6)
- ISO-8859-7 28597 (ISO-8859-7)
- ISO-8859-8 28598 (ISO-8859-8)
- ISO-8859-9 28599 (ISO-8859-9)
- ISO-8859-10 - (not available)
- ISO-8859-11 - (not available)
- ISO-8859-13 28603 (ISO-8859-13)
- ISO-8859-14 - (not available)
- ISO-8859-15 28605 (ISO-8859-15)
- ISO-8859-16 - (not available)
-
- Big5 950 (ANSI/OEM Traditional Chinese)
- EUCCN or euc-CN 936 (ANSI/OEM Simplified Chinese)
- EUCJP or euc-JP 20932 (EUC Japanese)
- EUCKR or euc-KR 949 (EUC Korean)
- GB2312 936 (ANSI/OEM Simplified Chinese)
- GBK 936 (ANSI/OEM Simplified Chinese)
- GEORGIAN-PS - (not available)
- KOI8-R 20866 (KOI8-R Russian Cyrillic)
- KOI8-U 21866 (KOI8-U Ukrainian Cyrillic)
- PT154 - (not available)
- SJIS - (not available, almost, but not exactly CP932)
- TIS620 or TIS-620 874 (ANSI/OEM Thai)
-
- UTF-8 or utf8 65001 (UTF-8)
-</screen>
-
-</sect2>
-
-</sect1>
diff --git a/winsup/doc/setup-maxmem.xml b/winsup/doc/setup-maxmem.xml
deleted file mode 100644
index 1f5ee31a6..000000000
--- a/winsup/doc/setup-maxmem.xml
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-
-<sect1 id="setup-maxmem"><title>Changing Cygwin's Maximum Memory</title>
-
-<para>
-Cygwin's heap is extensible. However, it does start out at a fixed size
-and attempts to extend it may run into memory which has been previously
-allocated by Windows. In some cases, this problem can be solved by
-changing a field in the file header which is utilized by Cygwin since
-version 1.7.10 to keep the initial size of the application heap. If the
-field contains 0, which is the default, the application heap defaults to
-a size of 384 Megabyte. If the field is set to any other value between 4 and
-2048, Cygwin tries to reserve as much Megabytes for the application heap.
-The field used for this is the "LoaderFlags" field in the NT-specific
-PE header structure (<literal>(IMAGE_NT_HEADER)->OptionalHeader.LoaderFlags</literal>).</para>
-
-<para>
-This value can be changed for any executable by using a more recent version
-of the <command>peflags</command> tool from the <literal>rebase</literal>
-Cygwin package. Example:
-
-<screen>
-$ peflags --cygwin-heap foo.exe
-foo.exe: initial Cygwin heap size: 0 (0x0) MB
-$ peflags --cygwin-heap=500 foo.exe
-foo.exe: initial Cygwin heap size: 500 (0x1f4) MB
-</screen>
-</para>
-
-<para>
-Heap memory can be allocated up to the size of the biggest available free
-block in the processes virtual memory (VM). By default, the VM per process
-is 2 GB for 32 processes. To get more VM for a process, the executable
-must have the "large address aware" flag set in the file header. You can
-use the aforementioned <command>peflags</command> tool to set this flag.
-On 64 bit systems this results in a 4 GB VM for a process started from that
-executable. On 32 bit systems you also have to prepare the system to allow
-up to 3 GB per process. See the Microsoft article
-<ulink url="http://msdn.microsoft.com/en-us/library/bb613473%28VS.85%29.aspx">4-Gigabyte Tuning</ulink>
-for more information.
-</para>
-
-<note>
-<para>
-Older Cygwin releases only supported a global registry setting to
-change the initial heap size for all Cygwin processes. This setting is
-not used anymore. However, if you're running an older Cygwin release
-than 1.7.10, you can add the <literal>DWORD</literal> value
-<literal>heap_chunk_in_mb</literal> and set it to the desired memory limit
-in decimal MB. You have to stop all Cygwin processes for this setting to
-have any effect. It is preferred to do this in Cygwin using the
-<command>regtool</command> program included in the Cygwin package.
-(see <xref linkend="regtool"></xref>) This example sets the memory limit
-to 1024 MB for all Cygwin processes (use HKCU instead of HKLM if you
-want to set this only for the current user):
-
-<screen>
-$ regtool -i set /HKLM/Software/Cygwin/heap_chunk_in_mb 1024
-$ regtool -v list /HKLM/Software/Cygwin
-</screen>
-</para>
-</note>
-
-</sect1>
diff --git a/winsup/doc/setup-net.xml b/winsup/doc/setup-net.xml
deleted file mode 100644
index fff9abe32..000000000
--- a/winsup/doc/setup-net.xml
+++ /dev/null
@@ -1,291 +0,0 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-
-<chapter id="setup-net" xmlns:xi="http://www.w3.org/2001/XInclude">
-<title>Setting Up Cygwin</title>
-
-<sect1 id="internet-setup">
-<title>Internet Setup</title>
-<para>To install the Cygwin net release, go to <ulink
-url="http://cygwin.com/">http://cygwin.com/</ulink> and run either
-<ulink url="http://cygwin.com/setup-x86.exe">setup-x86.exe</ulink>
-to install the 32 bit version of Cygwin, or
-<ulink url="http://cygwin.com/setup-x86_64.exe">setup-x86_64.exe</ulink>
-to install the 64 bit version of Cygwin. This will download a GUI
-installer which can be run to download a complete cygwin installation
-via the internet. Follow the instructions on each screen to install Cygwin.
-</para>
-
-<para>
-<note>
-For easier reading the installer is called <command>setup.exe</command>
-throughout the following sections. This refers likewise to both
-installer applications,
-<ulink url="http://cygwin.com/setup-x86.exe">setup-x86.exe</ulink>
-for 32 bit, as well as
-<ulink url="http://cygwin.com/setup-x86_64.exe">setup-x86_64.exe</ulink>
-for 64 bit. Apart from the target architecture they are the same thing.
-</note>
-</para>
-
-<para>
-The <command>setup.exe</command> installer is designed to be easy
-for new users to understand while remaining flexible for the
-experienced. The volunteer development team is constantly working
-on <command>setup.exe</command>; before requesting a new feature,
-check the wishlist in the <ulink url="http://sourceware.org/cgi-bin/cvsweb.cgi/setup/README?cvsroot=cygwin-apps&amp;rev=2">CVS <literal>README</literal>
-</ulink>. It may already be present in the CVS version!
-</para>
-
-<para>
-On Windows Vista and later, <command>setup.exe</command> will check by
-default if it runs with administrative privileges and, if not, will try
-to elevate the process. If you want to avoid this behaviour and install
-under an unprivileged account just for your own usage, run
-<command>setup.exe</command> with the <literal>--no-admin</literal> option.
-</para>
-
-<para>
-Since the default value for each option is the logical choice for
-most installations, you can get a working minimal Cygwin environment
-installed by simply clicking the <literal>Next</literal> button
-at each page. The only exception to this is choosing a Cygwin mirror,
-which you can choose by experimenting with those listed at
-<ulink url="http://cygwin.com/mirrors.html">
-http://cygwin.com/mirrors.html
-</ulink>. For more details about each of page of the
-<command>setup.exe</command> installation, read on below.
-Please note that this guide assumes that you have a basic understanding
-of Unix (or a Unix-like OS). If you are new to Unix, you will also want
-to make use of <ulink url="http://www.google.com/search?q=new+to+unix">
-other resources</ulink>.
-</para>
-
-<sect2 id="setup-download"><title>Download Source</title>
-<para>
-Cygwin uses packages to manage installing various software. When
-the default <literal>Install from Internet</literal> option is chosen,
-<command>setup.exe</command> creates a local directory to store
-the packages before actually installing the contents.
-<literal>Download from Internet</literal> performs only the first
-part (storing the packages locally), while
-<literal>Install from Local Directory</literal> performs only the
-second (installing the contents of the packages).
-</para>
-<para>
-The <literal>Download from Internet</literal> option is mainly
-for creating a base Cygwin package tree on one computer for
-installation on several machines with
-<literal>Install from Local Directory</literal>; copy the
-entire local package tree to another machine with the directory
-tree intact. For example, you might create a <literal>C:\cache\</literal>
-directory and place <command>setup.exe</command> in it. Run
-<command>setup.exe</command> to <literal>Install from Internet</literal>
-or <literal>Download from Internet</literal>, then copy the whole
-<literal>C:\cache\</literal> to each machine and instead choose
-<literal>Install from Local Directory</literal>.
-</para>
-<para>
-Though this provides some basic mirroring functionality, if you
-are managing a large Cygwin installation, to keep up to date we recommend
-using a mirroring tool such as <command>wget</command>. A helpful user on
-the Cygwin mailing list created a simple demonstration script to accomplish
-this; search the list for <command>mkcygwget</command> for ideas.
-</para>
-</sect2>
-
-<sect2 id="setup-dir"><title>Selecting an Install Directory</title>
-<para>
-The <literal>Root Directory</literal> for Cygwin (default
-<literal>C:\cygwin</literal>) will become <literal>/</literal>
-within your Cygwin installation. You must have write access to
-the parent directory, and any ACLs on the parent directory will
-determine access to installed files.
-</para>
-<para>
-The <literal>Install For</literal> options of <literal>All Users</literal>
-or <literal>Just Me</literal> should always be left on the default
-<literal>All Users</literal>, unless you do not have write access to
-<literal>HKEY_LOCAL_MACHINE</literal> in the registry or the All Users
-Start Menu. This is true even if you are the only user planning to use Cygwin
-on the machine. Selecting <literal>Just Me</literal> will cause problems
-for programs such as <command>crond</command> and <command>sshd</command>.
-If you do not have the necessary permissions, but still want to use these
-programs, consult the Cygwin mailing list archives about others' experiences.
-
-</para>
-</sect2>
-
-<sect2 id="setup-localdir"><title>Local Package Directory</title>
-<para>
-The <literal>Local Package Directory</literal> is the cache where
-<command>setup.exe</command> stores the packages before they are
-installed. The cache must not be the same folder as the Cygwin
-root. Within the cache, a separate directory is created for each
-Cygwin mirror, which allows <command>setup.exe</command> to use
-multiple mirrors and custom packages. After installing Cygwin,
-the cache is no longer necessary, but you may want to retain the
-packages as backups, for installing Cygwin to another system,
-or in case you need to reinstall a package.
-</para>
-</sect2>
-
-<sect2 id="setup-connection"><title>Connection Method</title>
-<para>
-The <literal>Direct Connection</literal> method of downloading will
-directly download the packages, while the IE5 method will leverage your
-IE5 cache for performance. If your organisation uses a proxy server or
-auto-configuration scripts, the IE5 method also uses these settings.
-If you have a proxy server, you can manually type it into
-the <literal>Use Proxy</literal> section. Unfortunately,
-<command>setup.exe</command> does not currently support password
-authorization for proxy servers.
-</para>
-</sect2>
-
-<sect2 id="setup-mirror"><title>Choosing Mirrors</title>
-<para>
-Since there is no way of knowing from where you will be downloading
-Cygwin, you need to choose at least one mirror site. Cygwin mirrors
-are geographically distributed around the world; check the list at <ulink
-url="http://cygwin.com/mirrors.html">http://cygwin.com/mirrors.html</ulink>
-to find one near you. You can select multiple mirrors by holding down
-<literal>CTRL</literal> and clicking on each one. If you have the URL of
-an unlisted mirror (for example, if your organization has an internal Cygwin
-mirror) you can add it.
-</para>
-</sect2>
-
-<sect2 id="setup-packages"><title>Choosing Packages</title>
-<para>
-For each selected mirror site, <command>setup.exe</command> downloads a
-small text file called <literal>setup.bz2</literal> that contains a list
-of packages available from that site along with some basic information about
-each package which <command>setup.exe</command> parses and uses to create the
-chooser window. For details about the format of this file, see
-the <ulink url="http://sourceware.org/cygwin-apps/setup.html">
-setup.exe homepage</ulink>.
-</para>
-<para>
-The chooser is the most complex part of <command>setup.exe</command>.
-Packages are grouped into categories, and one package may belong to multiple
-categories (assigned by the volunteer package maintainer). Each package
-can be found under any of those categories in the hierarchical chooser view.
-By default, <command>setup.exe</command>
-will install only the packages in the <literal>Base</literal> category
-and their dependencies, resulting in a minimal Cygwin installation.
-However, this will not include many commonly used tools such as
-<command>gcc</command> (which you will find in the <literal>Devel</literal>
-category). Since <command>setup.exe</command> automatically selects
-dependencies, be careful not to unselect any required packages. In
-particular, everything in the <literal>Base</literal> category is
-required.
-</para>
-<para>
-You can change <command>setup.exe</command>'s view style, which is helpful
-if you know the name of a package you want to install but not which
-category it is in.
-Click on the <literal>View</literal> button and it will rotate between
-<literal>Category</literal> (the default), <literal>Full</literal> (all
-packages), and <literal>Pending</literal> (only packages to be
-installed, removed or upgraded).
-If you are familiar with Unix, you will probably want to at least glance
-through the <literal>Full</literal> listing for your favorite tools.
-</para>
-<para>
-Once you have an existing Cygwin installation, the <command>setup.exe</command>
-chooser is also used to manage your Cygwin installation.
-Information on installed packages is kept in the
-<literal>/etc/setup/</literal> directory of your Cygwin installation; if
-<command>setup.exe</command> cannot find this directory it will act as if
-you have no Cygwin installation. If <command>setup.exe</command>
-finds a newer version of an installed package available, it will automatically
-mark it to be upgraded.
-To <literal>Uninstall</literal>, <literal>Reinstall</literal>, or get the
-<literal>Source</literal> for an existing package, click on
-<literal>Keep</literal> to toggle it.
-Also, to avoid the need to reboot after upgrading, make sure
-to close all Cygwin windows and stop all Cygwin processes before
-<command>setup.exe</command> begins to install the upgraded package.
-</para>
-<para>
-To avoid unintentionally upgrading, use the <literal>Pending</literal>
-view to see which packages have been marked for upgrading. If you
-don't want to upgrade a package, click on the new version number to
-toggle it until it says <literal>Keep</literal>. All packages can be
-set to stay at the installed version by pressing the <literal>Keep</literal>
-button in the top right part of the chooser window.
-</para>
-<para>
-A previous version of each package is usually available, in case downgrading
-is required to avoid a serious bug in the current version of the package.
-Packages also occasionally have testing (or "experimental") versions available.
-Previous and experimental versions can be chosen by clicking on the package's
-<literal>New</literal> column until the required version appears.
-</para>
-<para>
-All available experimental packages can be selected by pressing the
-<literal>Exp</literal> in the top right part of the chooser window.
-Be warned, however, that the next time you run <command>setup.exe</command>
-it will try to replace all old or experimental versions with the current
-version, unless told otherwise.
-</para>
-</sect2>
-
-<sect2 id="setup-progress"><title>Download and Installation Progress</title>
-<para>
-First, <command>setup.exe</command> will download all selected packages
-to the local directory chosen earlier. Before installing,
-<command>setup.exe</command> performs a checksum on each package. If the
-local directory is a slow medium (such as a network drive) this can take
-a long time. During the download and installation, <command>setup.exe</command>
-shows progress bars for the current task and total remaining disk space.
-</para>
-</sect2>
-
-<sect2 id="setup-icons"><title>Shortcuts</title>
-<para>
-You may choose to install "Cygwin Terminal" shortcuts on the Desktop
-and/or Start Menu. These shortcuts run <command>mintty</command>,
-which will start your default shell as specified
-in <filename>/etc/passwd</filename>.
-</para>
-</sect2>
-
-<sect2 id="setup-postinstall"><title>Post-Install Scripts</title>
-<para>
-Last of all, <command>setup.exe</command> will run any post-install
-scripts to finish correctly setting up installed packages. Since each
-script is run separately, several windows may pop up. If you are
-interested in what is being done, see the Cygwin Package Contributor's
-Guide at <ulink
-url="http://cygwin.com/setup.html">http://cygwin.com/setup.html</ulink>
-When the last post-install script is completed, <command>setup.exe</command>
-will display a box announcing the completion. A few packages, such as
-the OpenSSH server, require some manual site-specific configuration.
-Relevant documentation can be found in the <literal>/usr/doc/Cygwin/</literal>
-or <literal>/usr/share/doc/Cygwin/</literal> directory.
-</para>
-</sect2>
-<sect2 id="setup-troubleshooting"><title>Troubleshooting</title>
-<para>
-Unfortunately, the complex setup process means that odd problems can
-occur. If you're having trouble downloading packages, it may be network
-congestion, so try a different mirror and/or a different protocol (i.e.,
-HTTP instead of FTP). If you notice something is not working after
-running setup, you can check the <command>setup.exe</command> log file
-at <literal>/var/log/setup.log.full</literal>. Make a backup of this
-file before running <command>setup.exe</command> again, and follow the
-steps for <ulink url="http://cygwin.com/problems.html">Reporting
-Problems with Cygwin</ulink>.
-</para>
-</sect2>
-
-</sect1>
-
-<xi:include href="setup-env.xml"/>
-<xi:include href="setup-maxmem.xml"/>
-<xi:include href="setup-locale.xml"/>
-<xi:include href="setup-files.xml"/>
-</chapter>
diff --git a/winsup/doc/specialnames.xml b/winsup/doc/specialnames.xml
deleted file mode 100644
index 543a4f127..000000000
--- a/winsup/doc/specialnames.xml
+++ /dev/null
@@ -1,513 +0,0 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-
-<sect1 id="using-specialnames"><title>Special filenames</title>
-
-<sect2 id="pathnames-etc"><title>Special files in /etc</title>
-
-<para>Certain files in Cygwin's <filename>/etc</filename> directory are
-read by Cygwin before the mount table has been established. The list
-of files is</para>
-
-<screen>
- /etc/fstab
- /etc/fstab.d/$USER
- /etc/passwd
- /etc/group
-</screen>
-
-<para>These file are read using native Windows NT functions which have
-no notion of Cygwin symlinks or POSIX paths. For that reason
-there are a few requirements as far as <filename>/etc</filename> is
-concerned.</para>
-
-<para>To access these files, the Cygwin DLL evaluates it's own full
-Windows path, strips off the innermost directory component and adds
-"\etc". Let's assume the Cygwin DLL is installed as
-<filename>C:\cygwin\bin\cygwin1.dll</filename>. First the DLL name as
-well as the innermost directory (<filename>bin</filename>) is stripped
-off: <filename>C:\cygwin\</filename>. Then "etc" and the filename to
-look for is attached: <filename>C:\cygwin\etc\fstab</filename>. So the
-/etc directory must be parallel to the directory in which the cygwin1.dll
-exists and <filename>/etc</filename> must not be a Cygwin symlink
-pointing to another directory. Consequentially none of the files from
-the above list, including the directory <filename>/etc/fstab.d</filename>
-is allowed to be a Cygwin symlink either.</para>
-
-<para>However, native NTFS symlinks and reparse points are transparent
-when accessing the above files so all these files as well as
-<filename>/etc</filename> itself may be NTFS symlinks or reparse
-points.</para>
-
-<para>Last but not least, make sure that these files are world-readable.
-Every process of any user account has to read these files potentially,
-so world-readability is essential. The only exception are the user
-specific files <filename>/etc/fstab.d/$USER</filename>, which only have
-to be readable by the $USER user account itself.</para>
-
-</sect2>
-
-<sect2 id="pathnames-dosdevices"><title>Invalid filenames</title>
-
-<para>Filenames invalid under Win32 are not necessarily invalid
-under Cygwin since release 1.7.0. There are a few rules which
-apply to Windows filenames. Most notably, DOS device names like
-<filename>AUX</filename>, <filename>COM1</filename>,
-<filename>LPT1</filename> or <filename>PRN</filename> (to name a few)
-cannot be used as filename or extension in a native Win32 application.
-So filenames like <filename>prn.txt</filename> or <filename>foo.aux</filename>
-are invalid filenames for native Win32 applications.</para>
-
-<para>This restriction doesn't apply to Cygwin applications. Cygwin
-can create and access files with such names just fine. Just don't try
-to use these files with native Win32 applications.</para>
-
-</sect2>
-
-<sect2 id="pathnames-specialchars">
-<title>Forbidden characters in filenames</title>
-
-<para>Some characters are disallowed in filenames on Windows filesystems.
-These forbidden characters are the ASCII control characters from ASCII
-value 1 to 31, plus the following characters which have a special meaning
-in the Win32 API:</para>
-
-<screen>
- " * : &lt; &gt; ? | \
-</screen>
-
-<para>Cygwin can't fix this, but it has a method to workaround this
-restriction. All of the above characters, except for the backslash,
-are converted to special UNICODE characters in the range 0xf000 to 0xf0ff
-(the "Private use area") when creating or accessing files.</para>
-
-<para>The backslash has to be exempt from this conversion, because Cygwin
-accepts Win32 filenames including backslashes as path separators on input.
-Converting backslashes using the above method would make this impossible.</para>
-
-<para>Additionally Win32 filenames can't contain trailing dots and spaces
-for DOS backward compatibility. When trying to create files with trailing
-dots or spaces, all of them are removed before the file is created. This
-restriction only affects native Win32 applications. Cygwin applications
-can create and access files with trailing dots and spaces without problems.
-</para>
-
-<para>An exception from this rule are some network filesystems (NetApp,
-NWFS) which choke on these filenames. They return with an error like
-"No such file or directory" when trying to create such files. Starting
-with Cygwin 1.7.6, Cygwin recognizes these filesystems and works around
-this problem by applying the same rule as for the other forbidden characters.
-Leading spaces and trailing dots and spaces will be converted to UNICODE
-characters in the private use area. This behaviour can be switched on
-explicitely for a filesystem or a directory tree by using the mount option
-<literal>dos</literal>.</para>
-
-</sect2>
-
-<sect2 id="pathnames-unusual">
-<title>Filenames with unusual (foreign) characters</title>
-
-<para> Windows filesystems use Unicode encoded as UTF-16
-to store filename information. If you don't use the UTF-8
-character set (see <xref linkend="setup-locale"></xref>) then there's a
-chance that a filename is using one or more characters which have no
-representation in the character set you're using.</para>
-
-<note><para>In the default "C" locale, Cygwin creates filenames using
-the UTF-8 charset. This will always result in some valid filename by
-default, but again might impose problems when switching to a non-"C"
-or non-"UTF-8" charset.</para></note>
-
-<note><para>To avoid this scenario altogether, always use UTF-8 as the
-character set.</para></note>
-
-<para>If you don't want or can't use UTF-8 as character set for whatever
-reason, you will nevertheless be able to access the file. How does that
-work? When Cygwin converts the filename from UTF-16 to your character
-set, it recognizes characters which can't be converted. If that occurs,
-Cygwin replaces the non-convertible character with a special character
-sequence. The sequence starts with an ASCII CAN character (hex code
-0x18, equivalent Control-X), followed by the UTF-8 representation of the
-character. The result is a filename containing some ugly looking
-characters. While it doesn't <emphasis role='bold'>look</emphasis> nice, it
-<emphasis role='bold'>is</emphasis> nice, because Cygwin knows how to convert
-this filename back to UTF-16. The filename will be converted using your
-usual character set. However, when Cygwin recognizes an ASCII CAN
-character, it skips over the ASCII CAN and handles the following bytes as
-a UTF-8 character. Thus, the filename is symmetrically converted back to
-UTF-16 and you can access the file.</para>
-
-<note><para>Please be aware that this method is not entirely foolproof.
-In some character set combinations it might not work for certain native
-characters.</para>
-
-<para>Only by using the UTF-8 charset you can avoid this problem safely.
-</para></note>
-
-</sect2>
-
-<sect2 id="pathnames-casesensitive">
-<title>Case sensitive filenames</title>
-
-<para>In the Win32 subsystem filenames are only case-preserved, but not
-case-sensitive. You can't access two files in the same directory which
-only differ by case, like <filename>Abc</filename> and
-<filename>aBc</filename>. While NTFS (and some remote filesystems)
-support case-sensitivity, the NT kernel starting with Windows XP does
-not support it by default. Rather, you have to tweak a registry setting
-and reboot. For that reason, case-sensitivity can not be supported by Cygwin,
-unless you change that registry value.</para>
-
-<para>If you really want case-sensitivity in Cygwin, you can switch it
-on by setting the registry value</para>
-
-<screen>
-HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\obcaseinsensitive
-</screen>
-
-<para>to 0 and reboot the machine.</para>
-
-<note>
-<para>
-When installing Microsoft's Services For Unix (SFU), you're asked if
-you want to use case-sensitive filenames. If you answer "yes" at this point,
-the installer will change the aforementioned registry value to 0, too. So, if
-you have SFU installed, there's some chance that the registry value is already
-set to case sensitivity.
-</para>
-</note>
-
-<para>After you set this registry value to 0, Cygwin will be case-sensitive
-by default on NTFS and NFS filesystems. However, there are limitations:
-while two <emphasis role='bold'>programs</emphasis> <filename>Abc.exe</filename>
-and <filename>aBc.exe</filename> can be created and accessed like other files,
-starting applications is still case-insensitive due to Windows limitations
-and so the program you try to launch may not be the one actually started. Also,
-be aware that using two filenames which only differ by case might
-result in some weird interoperability issues with native Win32 applications.
-You're using case-sensitivity at your own risk. You have been warned! </para>
-
-<para>Even if you use case-sensitivity, it might be feasible to switch to
-case-insensitivity for certain paths for better interoperability with
-native Win32 applications (even if it's just Windows Explorer). You can do
-this on a per-mount point base, by using the "posix=0" mount option in
-<filename>/etc/fstab</filename>, or your <filename>/etc/fstab.d/$USER</filename>
-file.</para>
-
-<para><filename>/cygdrive</filename> paths are case-insensitive by default.
-The reason is that the native Windows %PATH% environment variable is not
-always using the correct case for all paths in it. As a result, if you use
-case-sensitivity on the <filename>/cygdrive</filename> prefix, your shell
-might claim that it can't find Windows commands like <command>attrib</command>
-or <command>net</command>. To ease the pain, the <filename>/cygdrive</filename>
-path is case-insensitive by default and you have to use the "posix=1" setting
-explicitly in <filename>/etc/fstab</filename> or
-<filename>/etc/fstab.d/$USER</filename> to switch it to case-sensitivity,
-or you have to make sure that the native Win32 %PATH% environment variable
-is using the correct case for all paths throughout.</para>
-
-<para>Note that mount points as well as device names and virtual
-paths like /proc are always case-sensitive! The only exception are
-the subdirectories and filenames under /proc/registry, /proc/registry32
-and /proc/registry64. Registry access is always case-insensitive.
-Read on for more information.</para>
-
-</sect2>
-
-<sect2 id="pathnames-posixdevices"> <title>POSIX devices</title>
-<para>While there is no need to create a POSIX <filename>/dev</filename>
-directory, the directory is automatically created as part of a Cygwin
-installation. It's existence is often a prerequisit to run certain
-applications which create symbolic links, fifos, or UNIX sockets in
-<filename>/dev</filename>. Also, the directories <filename>/dev/shm</filename>
-and <filename>/dev/mqueue</filename> are required to exist to use named POSIX
-semaphores, shared memory, and message queues, so a system without a real
-<filename>/dev</filename> directory is functionally crippled.
-</para>
-
-<para>Apart from that, Cygwin automatically simulates POSIX devices
-internally. Up to Cygwin 1.7.11, these devices couldn't be seen with the
-command <command>ls /dev/</command> although commands such as
-<command>ls /dev/tty</command> worked fine. Starting with Cygwin 1.7.12,
-the <filename>/dev</filename> directory is automagically populated with
-existing POSIX devices by Cygwin in a way comparable with a
-<ulink url="http://en.wikipedia.org/wiki/Udev">udev</ulink> based virtual
-<filename>/dev</filename> directory under Linux.</para>
-
-<para>
-Cygwin supports the following character devices commonly found on POSIX systems:
-</para>
-
-<screen>
-/dev/null
-/dev/zero
-/dev/full
-
-/dev/console Pseudo device name for the current console window of a session.
- Up to Cygwin 1.7.9, this was the only name for a console.
- Different consoles were indistinguishable.
- Cygwin's /dev/console is not quite comparable with the console
- device on UNIX machines.
-
-/dev/cons0 Starting with Cygwin 1.7.10, Console sessions are numbered from
-/dev/cons1 /dev/cons0 upwards. Console device names are pseudo device
-... names, only accessible from processes within this very console
- session. This is due to a restriction in Windows.
-
-/dev/tty The current controlling tty of a session.
-
-/dev/ptmx Pseudo tty master device.
-
-/dev/pty0 Pseudo ttys are numbered from /dev/pty0 upwards as they are
-/dev/pty1 requested.
-...
-
-/dev/ttyS0 Serial communication devices. ttyS0 == Win32 COM1,
-/dev/ttyS1 ttyS1 == COM2, etc.
-...
-
-/dev/pipe
-/dev/fifo
-
-/dev/kmsg Kernel message pipe, for usage with sys logger services.
-
-/dev/random Random number generator.
-/dev/urandom
-
-/dev/dsp Default sound device of the system.
-</screen>
-
-<para>
-Cygwin also has several Windows-specific devices:
-</para>
-
-<screen>
-/dev/com1 The serial ports, starting with COM1 which is the same as ttyS0.
-/dev/com2 Please use /dev/ttySx instead.
-...
-
-/dev/conin Same as Windows CONIN$.
-/dev/conout Same as Windows CONOUT$.
-/dev/clipboard The Windows clipboard, text only
-/dev/windows The Windows message queue.
-</screen>
-
-<para>
-Block devices are accessible by Cygwin processes using fixed POSIX device
-names. These POSIX device names are generated using a direct conversion
-from the POSIX namespace to the internal NT namespace.
-E.g. the first harddisk is the NT internal device \device\harddisk0\partition0
-or the first partition on the third harddisk is \device\harddisk2\partition1.
-The first floppy in the system is \device\floppy0, the first CD-ROM is
-\device\cdrom0 and the first tape drive is \device\tape0.</para>
-
-<para>The mapping from physical device to the name of the device in the
-internal NT namespace can be found in various places. For hard disks and
-CD/DVD drives, the Windows "Disk Management" utility (part of the
-"Computer Management" console) shows that the mapping of "Disk 0" is
-\device\harddisk0. "CD-ROM 2" is \device\cdrom2. Another place to find
-this mapping is the "Device Management" console. Disks have a
-"Location" number, tapes have a "Tape Symbolic Name", etc.
-Unfortunately, the places where this information is found is not very
-well-defined.</para>
-
-<para>
-For external disks (USB-drives, CF-cards in a cardreader, etc) you can use
-Cygwin to show the mapping. <filename>/proc/partitions</filename>
-contains a list of raw drives known to Cygwin. The <command>df</command>
-command shows a list of drives and their respective sizes. If you match
-the information between <filename>/proc/partitions</filename> and the
-<command>df</command> output, you should be able to figure out which
-external drive corresponds to which raw disk device name.</para>
-
-<note><para>Apart from tape devices which are not block devices and are
-by default accessed directly, accessing mass storage devices raw
-is something you should only do if you know what you're doing and know how to
-handle the information. <emphasis role='bold'>Writing</emphasis> to a raw
-mass storage device you should only do if you
-<emphasis role='bold'>really</emphasis> know what you're doing and are aware
-of the fact that any mistake can destroy important information, for the
-device, and for you. So, please, handle this ability with care.
-<emphasis role='bold'>You have been warned.</emphasis></para></note>
-
-<para>
-Last but not least, the mapping from POSIX /dev namespace to internal
-NT namespace is as follows:
-</para>
-
-<screen>
-POSIX device name Internal NT device name
-
-/dev/st0 \device\tape0, rewind
-/dev/nst0 \device\tape0, no-rewind
-/dev/st1 \device\tape1
-/dev/nst1 \device\tape1
-...
-/dev/st15
-/dev/nst15
-
-/dev/fd0 \device\floppy0
-/dev/fd1 \device\floppy1
-...
-/dev/fd15
-
-/dev/sr0 \device\cdrom0
-/dev/sr1 \device\cdrom1
-...
-/dev/sr15
-
-/dev/scd0 \device\cdrom0
-/dev/scd1 \device\cdrom1
-...
-/dev/scd15
-
-/dev/sda \device\harddisk0\partition0 (whole disk)
-/dev/sda1 \device\harddisk0\partition1 (first partition)
-...
-/dev/sda15 \device\harddisk0\partition15 (fifteenth partition)
-
-/dev/sdb \device\harddisk1\partition0
-/dev/sdb1 \device\harddisk1\partition1
-
-[up to]
-
-/dev/sddx \device\harddisk127\partition0
-/dev/sddx1 \device\harddisk127\partition1
-...
-/dev/sddx15 \device\harddisk127\partition15
-</screen>
-
-<para>
-if you don't like these device names, feel free to create symbolic
-links as they are created on Linux systems for convenience:
-</para>
-
-<screen>
-ln -s /dev/sr0 /dev/cdrom
-ln -s /dev/nst0 /dev/tape
-...
-</screen>
-
-</sect2>
-
-<sect2 id="pathnames-exe"><title>The .exe extension</title>
-
-<para>Win32 executable filenames end with <filename>.exe</filename>
-but the <filename>.exe</filename> need not be included in the command,
-so that traditional UNIX names can be used. However, for programs that
-end in <filename>.bat</filename> and <filename>.com</filename>, you
-cannot omit the extension. </para>
-
-<para>As a side effect, the <command> ls filename</command> gives
-information about <filename>filename.exe</filename> if
-<filename>filename.exe</filename> exists and <filename>filename</filename>
-does not. In the same situation the function call
-<function>stat("filename",..)</function> gives information about
-<filename>filename.exe</filename>. The two files can be distinguished
-by examining their inodes, as demonstrated below.
-<screen>
-<prompt>bash$</prompt> <userinput>ls * </userinput>
-a a.exe b.exe
-<prompt>bash$</prompt> <userinput>ls -i a a.exe</userinput>
-445885548 a 435996602 a.exe
-<prompt>bash$</prompt> <userinput>ls -i b b.exe</userinput>
-432961010 b 432961010 b.exe
-</screen>
-If a shell script <filename>myprog</filename> and a program
-<filename>myprog.exe</filename> coexist in a directory, the shell
-script has precedence and is selected for execution of
-<command>myprog</command>. Note that this was quite the reverse up to
-Cygwin 1.5.19. It has been changed for consistency with the rest of Cygwin.
-</para>
-
-<para>The <command>gcc</command> compiler produces an executable named
-<filename>filename.exe</filename> when asked to produce
-<filename>filename</filename>. This allows many makefiles written
-for UNIX systems to work well under Cygwin.</para>
-
-</sect2>
-
-<sect2 id="pathnames-proc"><title>The /proc filesystem</title>
-<para>
-Cygwin, like Linux and other similar operating systems, supports the
-<filename>/proc</filename> virtual filesystem. The files in this
-directory are representations of various aspects of your system,
-for example the command <userinput>cat /proc/cpuinfo</userinput>
-displays information such as what model and speed processor you have.
-</para>
-<para>
-One unique aspect of the Cygwin <filename>/proc</filename> filesystem
-is <filename>/proc/registry</filename>, see next section.
-</para>
-<para>
-The Cygwin <filename>/proc</filename> is not as complete as the
-one in Linux, but it provides significant capabilities. The
-<systemitem>procps</systemitem> package contains several utilities
-that use it.
-</para>
-</sect2>
-
-<sect2 id="pathnames-proc-registry"><title>The /proc/registry filesystem</title>
-<para>
-The <filename>/proc/registry</filename> filesystem provides read-only
-access to the Windows registry. It displays each <literal>KEY</literal>
-as a directory and each <literal>VALUE</literal> as a file. As anytime
-you deal with the Windows registry, use caution since changes may result
-in an unstable or broken system. There are additionally subdirectories called
-<filename>/proc/registry32</filename> and <filename>/proc/registry64</filename>.
-They are identical to <filename>/proc/registry</filename> on 32 bit
-host OSes. On 64 bit host OSes, <filename>/proc/registry32</filename>
-opens the 32 bit processes view on the registry, while
-<filename>/proc/registry64</filename> opens the 64 bit processes view.
-</para>
-<para>
-Reserved characters ('/', '\', ':', and '%') or reserved names
-(<filename>.</filename> and <filename>..</filename>) are converted by
-percent-encoding:
-<screen>
-<prompt>bash$</prompt> <userinput>regtool list -v '\HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices'</userinput>
-...
-\DosDevices\C: (REG_BINARY) = cf a8 97 e8 00 08 fe f7
-...
-<prompt>bash$</prompt> <userinput>cd /proc/registry/HKEY_LOCAL_MACHINE/SYSTEM</userinput>
-<prompt>bash$</prompt> <userinput>ls -l MountedDevices</userinput>
-...
--r--r----- 1 Admin SYSTEM 12 Dec 10 11:20 %5CDosDevices%5CC%3A
-...
-<prompt>bash$</prompt> <userinput>od -t x1 MountedDevices/%5CDosDevices%5CC%3A</userinput>
-0000000 cf a8 97 e8 00 08 fe f7 01 00 00 00
-</screen>
-The unnamed (default) value of a key can be accessed using the filename
-<filename>@</filename>.
-</para>
-<para>
-If a registry key contains a subkey and a value with the same name
-<filename>foo</filename>, Cygwin displays the subkey as
-<filename>foo</filename> and the value as <filename>foo%val</filename>.
-</para>
-</sect2>
-
-<sect2 id="pathnames-at"><title>The @pathnames</title>
-<para>To circumvent the limitations on shell line length in the native
-Windows command shells, Cygwin programs, when invoked by non-Cygwin processes, expand their arguments
-starting with "@" in a special way. If a file
-<filename>pathname</filename> exists, the argument
-<filename>@pathname</filename> expands recursively to the content of
-<filename>pathname</filename>. Double quotes can be used inside the
-file to delimit strings containing blank space.
-In the following example compare the behaviors
-<command>/bin/echo</command> when run from bash and from the Windows command prompt.</para>
-
-<example id="pathnames-at-ex"><title> Using @pathname</title>
-<screen>
-<prompt>bash$</prompt> <userinput>/bin/echo 'This is "a long" line' > mylist</userinput>
-<prompt>bash$</prompt> <userinput>/bin/echo @mylist</userinput>
-@mylist
-<prompt>bash$</prompt> <userinput>cmd</userinput>
-<prompt>c:\&gt;</prompt> <userinput>c:\cygwin\bin\echo @mylist</userinput>
-This is a long line
-</screen>
-</example>
-</sect2>
-</sect1>
diff --git a/winsup/doc/textbinary.xml b/winsup/doc/textbinary.xml
deleted file mode 100644
index 112042f82..000000000
--- a/winsup/doc/textbinary.xml
+++ /dev/null
@@ -1,196 +0,0 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-
-<sect1 id="using-textbinary"><title>Text and Binary modes</title>
-
-<sect2 id="textbin-issue"> <title>The Issue</title>
-
-<para>On a UNIX system, when an application reads from a file it gets
-exactly what's in the file on disk and the converse is true for writing.
-The situation is different in the DOS/Windows world where a file can
-be opened in one of two modes, binary or text. In the binary mode the
-system behaves exactly as in UNIX. However on writing in text mode, a
-NL (\n, ^J) is transformed into the sequence CR (\r, ^M) NL.
-</para>
-
-<para>This can wreak havoc with the seek/fseek calls since the number
-of bytes actually in the file may differ from that seen by the
-application.</para>
-
-<para>The mode can be specified explicitly as explained in the Programming
-section below. In an ideal DOS/Windows world, all programs using lines as
-records (such as <command>bash</command>, <command>make</command>,
-<command>sed</command> ...) would open files (and change the mode of their
-standard input and output) as text. All other programs (such as
-<command>cat</command>, <command>cmp</command>, <command>tr</command> ...)
-would use binary mode. In practice with Cygwin, programs that deal
-explicitly with object files specify binary mode (this is the case of
-<command>od</command>, which is helpful to diagnose CR problems). Most
-other programs (such as <command>sed</command>, <command>cmp</command>,
-<command>tr</command>) use the default mode.</para>
-
-</sect2>
-
-<sect2 id="textbin-default"><title>The default Cygwin behavior</title>
-
-<para>The Cygwin system gives us some flexibility in deciding how files
-are to be opened when the mode is not specified explicitly.
-The rules are evolving, this section gives the design goals.</para>
-
-<orderedlist numeration="loweralpha">
-<listitem>
-<para>If the filename is specified as a POSIX path and it appears to
-reside on a file system that is mounted (i.e. if its pathname starts
-with a directory displayed by <command>mount</command>), then the
-default is specified by the mount flag. If the file is a symbolic link,
-the mode of the target file system applies.</para>
-</listitem>
-
-<listitem>
-<para>If the file is specified via a MS-DOS pathname (i.e., it contains a
-backslash or a colon), the default is binary.
-</para>
-</listitem>
-
-<listitem>
-<para>Pipes, sockets and non-file devices are opened in binary mode.
-For pipes opened through the pipe() system call you can use the setmode()
-function (see <xref linkend="textbin-devel"></xref> to switch to textmode.
-For pipes opened through popen(), you can simply specify text or binary
-mode just like in calls to fopen().</para>
-</listitem>
-
-<listitem>
-<para>Sockets and other non-file devices are always opened in binary mode.
-</para>
-</listitem>
-
-<listitem>
-<para> When redirecting, the Cygwin shells uses rules (a-d).
-Non-Cygwin shells always pipe and redirect with binary mode. With
-non-Cygwin shells the commands <command> cat filename | program </command>
-and <command> program &lt; filename </command> are not equivalent when
-<filename>filename</filename> is on a text-mounted partition. </para>
-<para>The programs <command>u2d</command> and <command>d2u</command> can
-be used to add or remove CR's from a file. <command>u2d</command> add's CR's before a NL.
-<command>d2u</command> removes CR's. Use the --help option to these commands
-for more information.
-</para>
-</listitem>
-</orderedlist>
-</sect2>
-
-<sect2 id="textbin-question"><title>Binary or text?</title>
-
-<para>UNIX programs that have been written for maximum portability
-will know the difference between text and binary files and act
-appropriately under Cygwin. Most programs included in the official
-Cygwin distributions should work well in the default mode. </para>
-
-<para>Binmode is the best choice usually since it's faster and
-easier to handle, unless you want to exchange files with native Win32
-applications. It makes most sense to keep the Cygwin distribution
-and your Cygwin home directory in binmode and generate text files in
-binmode (with UNIX LF lineendings). Most Windows applications can
-handle binmode files just fine. A notable exception is the mini-editor
-<command>Notepad</command>, which handles UNIX lineendings incorrectly
-and only produces output files with DOS CRLF lineendings.</para>
-
-<para>You can convert files between CRLF and LF lineendings by using
-certain tools in the Cygwin distribution like <command>d2u</command> and
-<command>u2d</command> from the cygutils package. You can also specify
-a directory in the mount table to be mounted in textmode so you can use
-that directory for exchange purposes.</para>
-
-<para>As application programmer you can decide on a file by file base,
-or you can specify default open modes depending on the purpose for which
-the application open files. See the next section for a description of
-your choices.</para>
-
-</sect2>
-
-<sect2 id="textbin-devel"><title>Programming</title>
-
-<para>In the <function>open()</function> function call, binary mode can be
-specified with the flag <literal>O_BINARY</literal> and text mode with
-<literal>O_TEXT</literal>. These symbols are defined in
-<filename>fcntl.h</filename>.</para>
-
-<para>The <function>mkstemp()</function> and <function>mkstemps()</function>
-calls force binary mode. Use <function>mkostemp()</function> or
-<function>mkostemps()</function> with the same flags
-as <function>open()</function> for more control on temporary files.</para>
-
-<para>In the <function>fopen()</function> and <function>popen()</function>
-function calls, binary mode can be specified by adding a <literal>b</literal>
-to the mode string. Text mode is specified by adding a <literal>t</literal>
-to the mode string.</para>
-
-<para>The mode of a file can be changed by the call
-<function>setmode(fd,mode)</function> where <literal>fd</literal> is a file
-descriptor (an integer) and <literal>mode</literal> is
-<literal>O_BINARY</literal> or <literal>O_TEXT</literal>. The function
-returns <literal>O_BINARY</literal> or <literal>O_TEXT</literal> depending
-on the mode before the call, and <literal>EOF</literal> on error.</para>
-
-<para>There's also a convenient way to set the default open modes used
-in an application by just linking against various object files provided
-by Cygwin. For instance, if you want to make sure that all files are
-always opened in binary mode by an application, regardless of the mode
-of the underlying mount point, just add the file
-<filename>/lib/binmode.o</filename> to the link stage of the application
-in your project, like this:</para>
-
-<screen>
- $ gcc my_tiny_app.c /lib/binmode.o -o my_tiny_app
-</screen>
-
-<para>Starting with Cygwin 1.7.7, you can use the even simpler:</para>
-
-<screen>
- $ gcc my_tiny_app.c -lbinmode -o my_tiny_app
-</screen>
-
-<para>This adds code which sets the default open mode for all files
-opened by <command>my_tiny_app</command> to binary for reading and
-writing.</para>
-
-<para>Cygwin provides the following libraries and object files to set the
-default open mode just by linking an application against them:</para>
-
-<itemizedlist mark="bullet">
-
-<listitem>
-<screen>
-/lib/libautomode.a - Open files for reading in textmode,
-/lib/automode.o open files for writing in binary mode
-</screen>
-</listitem>
-
-<listitem>
-<screen>
-/lib/libbinmode.a - Open files for reading and writing in binary mode
-/lib/binmode.o
-</screen>
-</listitem>
-
-<listitem>
-<screen>
-/lib/libtextmode.a - Open files for reading and writing in textmode
-/lib/textmode.o
-</screen>
-</listitem>
-
-<listitem>
-<screen>
-/lib/libtextreadmode.a - Open files for reading in textmode,
-/lib/textreadmode.o keep default behaviour for writing.
-</screen>
-</listitem>
-
-</itemizedlist>
-
-</sect2>
-
-</sect1>
diff --git a/winsup/doc/ug-info.xml b/winsup/doc/ug-info.xml
deleted file mode 100644
index c5b4a67c8..000000000
--- a/winsup/doc/ug-info.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-
-<bookinfo xmlns:xi="http://www.w3.org/2001/XInclude">
- <date>2001-22-03</date>
- <title>Cygwin User's Guide</title>
- <authorgroup>
- <author>
- <firstname>Joshua Daniel</firstname>
- <surname>Franklin</surname>
- </author>
- <author>
- <firstname>Corinna</firstname>
- <surname>Vinschen</surname>
- </author>
- <author>
- <firstname>Christopher</firstname>
- <surname>Faylor</surname>
- </author>
- <author>
- <firstname>DJ</firstname>
- <surname>Delorie</surname>
- </author>
- <author>
- <firstname>Pierre</firstname>
- <surname>Humblet</surname>
- </author>
- <author>
- <firstname>Geoffrey</firstname>
- <surname>Noer</surname>
- </author>
- </authorgroup>
-
- <xi:include href="legal.xml"/>
-</bookinfo>
diff --git a/winsup/doc/using.xml b/winsup/doc/using.xml
deleted file mode 100644
index 3ec26707b..000000000
--- a/winsup/doc/using.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-
-<chapter id="using" xmlns:xi="http://www.w3.org/2001/XInclude">
-<title>Using Cygwin</title>
-
-<para>This chapter explains some key differences between the Cygwin
-environment and traditional UNIX systems. It assumes a working
-knowledge of standard UNIX commands.</para>
-
- <xi:include href="pathnames.xml"/>
- <xi:include href="textbinary.xml"/>
- <xi:include href="filemodes.xml"/>
- <xi:include href="specialnames.xml"/>
- <xi:include href="cygwinenv.xml"/>
- <xi:include href="ntsec.xml"/>
- <xi:include href="cygserver.xml"/>
- <xi:include href="utils.xml"/>
- <xi:include href="effectively.xml"/>
-</chapter>
diff --git a/winsup/doc/utils.xml b/winsup/doc/utils.xml
deleted file mode 100644
index 258baf63d..000000000
--- a/winsup/doc/utils.xml
+++ /dev/null
@@ -1,2115 +0,0 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-
-<sect1 id="using-utils">
- <title>Cygwin Utilities</title>
-
- <para>Cygwin comes with a number of command-line utilities that are used to
- manage the UNIX emulation portion of the Cygwin environment. While many of
- these reflect their UNIX counterparts, each was written specifically for
- Cygwin. You may use the long or short option names interchangeably; for
- example, <literal>--help</literal> and <literal>-h</literal> function
- identically. All of the Cygwin command-line utilities support the
- <literal>--help</literal> and <literal>--version</literal> options. </para>
-
- <sect2 id="cygcheck">
- <title>cygcheck</title>
-
- <screen>
-Usage: cygcheck [-v] [-h] PROGRAM
- cygcheck -c [-d] [PACKAGE]
- cygcheck -s [-r] [-v] [-h]
- cygcheck -k
- cygcheck -f FILE [FILE]...
- cygcheck -l [PACKAGE]...
- cygcheck -p REGEXP
- cygcheck --delete-orphaned-installation-keys
- cygcheck --enable-unique-object-names Cygwin-DLL
- cygcheck --disable-unique-object-names Cygwin-DLL
- cygcheck --show-unique-object-names Cygwin-DLL
- cygcheck -h
-
-List system information, check installed packages, or query package database.
-
-At least one command option or a PROGRAM is required, as shown above.
-
- PROGRAM list library (DLL) dependencies of PROGRAM
- -c, --check-setup show installed version of PACKAGE and verify integrity
- (or for all installed packages if none specified)
- -d, --dump-only just list packages, do not verify (with -c)
- -s, --sysinfo produce diagnostic system information (implies -c -d)
- -r, --registry also scan registry for Cygwin settings (with -s)
- -k, --keycheck perform a keyboard check session (must be run from a
- plain console only, not from a pty/rxvt/xterm)
- -f, --find-package find the package to which FILE belongs
- -l, --list-package list contents of PACKAGE (or all packages if none given)
- -p, --package-query search for REGEXP in the entire cygwin.com package
- repository (requires internet connectivity)
- --delete-orphaned-installation-keys
- Delete installation keys of old, now unused
- installations from the registry. Requires the right
- to change the registry.
- --enable-unique-object-names Cygwin-DLL
- --disable-unique-object-names Cygwin-DLL
- --show-unique-object-names Cygwin-DLL
- Enable, disable, or show the setting of the
- \"unique object names\" setting in the Cygwin DLL
- given as argument to this option. The DLL path must
- be given as valid Windows(!) path.
- See the users guide for more information.
- If you don't know what this means, don't change it.
- -v, --verbose produce more verbose output
- -h, --help annotate output with explanatory comments when given
- with another command, otherwise print this help
- -V, --version print the version of cygcheck and exit
-
-Note: -c, -f, and -l only report on packages that are currently installed. To
- search all official Cygwin packages use -p instead. The -p REGEXP matches
- package names, descriptions, and names of files/paths within all packages.
-</screen>
-
- <para> The <command>cygcheck</command> program is a diagnostic utility for
- dealing with Cygwin programs. If you are familiar with
- <command>dpkg</command> or <command>rpm</command>,
- <command>cygcheck</command> is similar in many ways. (The major
- difference is that <command>setup.exe</command> handles installing and
- uninstalling packages; see <xref linkend="internet-setup"/> for more
- information.) </para>
- <para> The <literal>-c</literal> option checks the version and status of
- installed Cygwin packages. If you specify one or more package names,
- <command>cygcheck</command> will limit its output to those packages, or
- with no arguments it lists all packages. A package will be marked
- <literal>Incomplete</literal> if files originally installed are no longer
- present. The best thing to do in that situation is reinstall the package
- with <command>setup.exe</command>. To see which files are missing, use
- the <literal>-v</literal> option. If you do not need to know the status
- of each package and want <command>cygcheck</command> to run faster, add
- the <literal>-d</literal> option and <command>cygcheck</command> will
- only output the name and version for each package. </para>
- <para> If you list one or more programs on the command line,
- <command>cygcheck</command> will diagnose the runtime environment of that
- program or programs, providing the names of DLL files on which the
- program depends. If you specify the <literal>-s</literal> option,
- <command>cygcheck</command> will give general system information. If you
- list one or more programs on the command line and specify
- <literal>-s</literal>, <command>cygcheck</command> will report on
- both.</para>
- <para> The <literal>-f</literal> option helps you to track down which
- package a file came from, and <literal>-l</literal> lists all files in a
- package. For example, to find out about
- <filename>/usr/bin/less</filename> and its package: <example
- id="utils-cygcheck-ex"><title>Example <command>cygcheck</command>
- usage</title>
- <screen>
-$ cygcheck -f /usr/bin/less
-less-381-1
-
-$ cygcheck -l less
-/usr/bin/less.exe
-/usr/bin/lessecho.exe
-/usr/bin/lesskey.exe
-/usr/man/man1/less.1
-/usr/man/man1/lesskey.1
-</screen>
- </example> </para>
-
- <para>The <literal>-h</literal> option prints additional helpful messages
- in the report, at the beginning of each section. It also adds table
- column headings. While this is useful information, it also adds some to
- the size of the report, so if you want a compact report or if you know
- what everything is already, just leave this out.</para>
-
- <para>The <literal>-v</literal> option causes the output to be more
- verbose. What this means is that additional information will be reported
- which is usually not interesting, such as the internal version numbers of
- DLLs, additional information about recursive DLL usage, and if a file in
- one directory in the PATH also occurs in other directories on the PATH. </para>
-
- <para>The <literal>-r</literal> option causes <command>cygcheck</command>
- to search your registry for information that is relevant to Cygwin
- programs. These registry entries are the ones that have "Cygwin" in the
- name. If you are paranoid about privacy, you may remove information from
- this report, but please keep in mind that doing so makes it harder to
- diagnose your problems.</para>
-
- <para>In contrast to the other options that search the packages that are
- installed on your local system, the <literal>-p</literal> option can be
- used to search the entire official Cygwin package repository. It takes as
- argument a Perl-compatible regular expression which is used to match
- package names, package descriptions, and path/filenames of the contents
- of packages. This feature requires an active internet connection, since
- it must query the <literal>cygwin.com</literal> web site. In fact, it is
- equivalent to the search that is available on the <ulink
- url="http://cygwin.com/packages/">Cygwin package listing</ulink>
- page.</para>
-
- <para>For example, perhaps you are getting an error because you are missing
- a certain DLL and you want to know which package includes that file:
- <example id="utils-search-ex"><title>Searching all packages for a
- file</title>
- <screen>
-$ cygcheck -p 'cygintl-2\.dll'
-Found 1 matches for 'cygintl-2\.dll'.
-
-libintl2-0.12.1-3 GNU Internationalization runtime library
-
-$ cygcheck -p 'libexpat.*\.a'
-Found 2 matches for 'libexpat.*\.a'.
-
-expat-1.95.7-1 XML parser library written in C
-expat-1.95.8-1 XML parser library written in C
-
-$ cygcheck -p '/ls\.exe'
-Found 2 matches for '/ls\.exe'.
-
-coreutils-5.2.1-5 GNU core utilities (includes fileutils, sh-utils and textutils)
-coreutils-5.3.0-6 GNU core utilities (includes fileutils, sh-utils and textutils)
-</screen>
- </example> </para>
-
- <para>Note that this option takes a regular expression, not a glob or
- wildcard. This means that you need to use <literal>.*</literal> if you
- want something similar to the wildcard <literal>*</literal> commonly used
- in filename globbing. Similarly, to match the period character you should
- use <literal>\.</literal> since the <literal>.</literal> character in a
- regexp is a metacharacter that will match any character. Also be aware
- that the characters such as <literal>\</literal> and <literal>*</literal>
- are shell metacharacters, so they must be either escaped or quoted, as in
- the example above.</para>
-
- <para>The third example above illustrates that if you want to match a whole
- filename, you should include the <literal>/</literal> path seperator. In
- the given example this ensures that filenames that happen to end in
- <literal>ls.exe</literal> such as <literal>ncftpls.exe</literal> are not
- shown. Note that this use does not mean "look for packages with
- <literal>ls</literal> in the root directory," since the
- <literal>/</literal> can match anywhere in the path. It's just there to
- anchor the match so that it matches a full filename.</para>
-
- <para>By default the matching is case-sensitive. To get a case insensitive
- match, begin your regexp with <literal>(?i)</literal> which is a
- PCRE-specific feature. For complete documentation on Perl-compatible
- regular expression syntax and options, read the <command>perlre</command>
- manpage, or one of many websites such as <literal>perldoc.com</literal>
- that document the Perl language.</para>
-
- <para>The <command>cygcheck</command> program should be used to send
- information about your system for troubleshooting when requested. When
- asked to run this command save the output so that you can email it, for
- example:</para>
-
- <screen>
-<prompt>$</prompt> <userinput>cygcheck -s -v -r -h &gt; cygcheck_output.txt</userinput>
-</screen>
-
- <para> Each Cygwin DLL stores its path and installation key in the
- registry. This allows troubleshooting of problems which could be a result
- of having multiple concurrent Cygwin installations. However, if you're
- experimenting a lot with different Cygwin installation paths, your
- registry could accumulate a lot of old Cygwin installation entries for
- which the installation doesn't exist anymore. To get rid of these
- orphaned registry entries, use the <command>cygcheck
- --delete-orphaned-installation-keys</command> command.</para>
-
- <para> Each Cygwin DLL generates a key value from its installation path.
- This value is not only stored in the registry, it's also used to generate
- global object names used for interprocess communication. This keeps
- different Cygwin installations separate. Processes running under a Cygwin
- DLL installed in C:\cygwin don't see processes running under a Cygwin DLL
- installed in C:\Program Files\cygwin. This allows running multiple
- versions of Cygwin DLLs without these versions to interfere with each
- other, or to run small third-party installations for a specific purpose
- independently from a Cygwin net distribution. </para>
-
- <para> For debugging purposes it could be desired that the various Cygwin
- DLLs use the same key, independently from their installation paths. If
- the DLLs have different versions, trying to run processes under these
- DLLs concurrently will result in error messages like this one:</para>
-
- <screen>
-*** shared version mismatch detected - 0x8A88009C/0x75BE0074.
-This problem is probably due to using incompatible versions of the Cygwin DLL.
-Search for cygwin1.dll using the Windows Start->Find/Search facility
-and delete all but the most recent version. The most recent version *should*
-reside in x:\\cygwin\\bin, where 'x' is the drive on which you have
-installed the cygwin distribution. Rebooting is also suggested if you
-are unable to find another Cygwin DLL.
-</screen>
-
- <para> To disable the usage of a unique key value of a certain Cygwin DLL,
- use the <command>cygcheck --disable-unique-object-names
- Cygwin-DLL</command> command. <literal>Cygwin-DLL</literal> is the
- Windows path (*not* a Cygwin POSIX path) to the DLL for which you want to
- disable this feature. Note that you have to stop all Cygwin processes
- running under this DLL, before you're allowed to change this setting. For
- instance, run <command>cygcheck</command> from a DOS command line for
- this purpose.</para>
-
- <para>To re-enable the usage of a unique key, use the <command>cygcheck
- --enable-unique-object-names Cygwin-DLL</command> command. This option
- has the same characteristics as the
- <literal>--disable-unique-object-names</literal> option</para>
-
- <para>Finally, you can use <command>cygcheck --show-unique-object-names
- Cygwin-DLL</command> to find out if the given Cygwin DLL use unique
- object names or not. In contrast to the <literal>--disable-...</literal>
- and <literal>--enable-...</literal> options, the
- <literal>--show-unique-object-names</literal> option also works for
- Cygwin DLLs which are currently in use.</para>
-
- </sect2>
-
- <sect2 id="cygpath">
- <title>cygpath</title>
-
- <screen>
-Usage: cygpath (-d|-m|-u|-w|-t TYPE) [-f FILE] [OPTION]... NAME...
- cygpath [-c HANDLE]
- cygpath [-ADHOPSW]
- cygpath [-F ID]
-
-Convert Unix and Windows format paths, or output system path information
-
-Output type options:
-
- -d, --dos print DOS (short) form of NAMEs (C:\PROGRA~1\)
- -m, --mixed like --windows, but with regular slashes (C:/WINNT)
- -M, --mode report on mode of file (currently binmode or textmode)
- -u, --unix (default) print Unix form of NAMEs (/cygdrive/c/winnt)
- -w, --windows print Windows form of NAMEs (C:\WINNT)
- -t, --type TYPE print TYPE form: 'dos', 'mixed', 'unix', or 'windows'
-
-Path conversion options:
-
- -a, --absolute output absolute path
- -l, --long-name print Windows long form of NAMEs (with -w, -m only)
- -p, --path NAME is a PATH list (i.e., '/bin:/usr/bin')
- -s, --short-name print DOS (short) form of NAMEs (with -w, -m only)
- -C, --codepage CP print DOS, Windows, or mixed pathname in Windows
- codepage CP. CP can be a numeric codepage identifier,
- or one of the reserved words ANSI, OEM, or UTF8.
- If this option is missing, cygpath defaults to the
- character set defined by the current locale.
-
-System information:
-
- -A, --allusers use `All Users' instead of current user for -D, -P
- -D, --desktop output `Desktop' directory and exit
- -H, --homeroot output `Profiles' directory (home root) and exit
- -O, --mydocs output `My Documents' directory and exit
- -P, --smprograms output Start Menu `Programs' directory and exit
- -S, --sysdir output system directory and exit
- -W, --windir output `Windows' directory and exit
- -F, --folder ID output special folder with numeric ID and exit
-
-Other options:
-
- -f, --file FILE read FILE for input; use - to read from STDIN
- -o, --option read options from FILE as well (for use with --file)
- -c, --close HANDLE close HANDLE (for use in captured process)
- -i, --ignore ignore missing argument
- -h, --help output usage information and exit
- -V, --version output version information and exit
-</screen>
-
- <para>The <command>cygpath</command> program is a utility that converts
- Windows native filenames to Cygwin POSIX-style pathnames and vice versa.
- It can be used when a Cygwin program needs to pass a file name to a
- native Windows program, or expects to get a file name from a native
- Windows program. Alternatively, <command>cygpath</command> can output
- information about the location of important system directories in either
- format. </para>
-
- <para>The <literal>-u</literal> and <literal>-w</literal> options indicate
- whether you want a conversion to UNIX (POSIX) format
- (<literal>-u</literal>) or to Windows format (<literal>-w</literal>). Use
- the <literal>-d</literal> to get DOS-style (8.3) file and path names. The
- <literal>-m</literal> option will output Windows-style format but with
- forward slashes instead of backslashes. This option is especially useful
- in shell scripts, which use backslashes as an escape character.</para>
-
- <para> In combination with the <literal>-w</literal> option, you can use
- the <literal>-l</literal> and <literal>-s</literal> options to use normal
- (long) or DOS-style (short) form. The <literal>-d</literal> option is
- identical to <literal>-w</literal> and <literal>-s</literal> together. </para>
-
- <para>The <literal>-C</literal> option allows to specify a Windows codepage
- to print DOS and Windows paths created with one of the
- <literal>-d</literal>, <literal>-m</literal>, or <literal>-w</literal>
- options. The default is to use the character set of the current locale
- defined by one of the internationalization environment variables
- <envar>LC_ALL</envar>, <envar>LC_CTYPE</envar>, or <envar>LANG</envar>,
- see <xref linkend="setup-locale"/>. This is sometimes not sufficient for
- interaction with native Windows tools, which might expect native,
- non-ASCII characters in a specific Windows codepage. Console tools, for
- instance, might expect pathnames in the current OEM codepage, while
- graphical tools like Windows Explorer might expect pathnames in the
- current ANSI codepage.</para>
-
- <para>The <literal>-C</literal> option takes a single parameter:</para>
- <itemizedlist spacing="compact">
- <listitem>
- <para><literal>ANSI</literal>, to specify the current ANSI
- codepage</para>
- </listitem>
- <listitem>
- <para><literal>OEM</literal>, to specify the current OEM (console)
- codepage</para>
- </listitem>
- <listitem>
- <para><literal>UTF8</literal>, to specify UTF-8.</para>
- </listitem>
- <listitem>
- <para>A numerical, decimal codepage number, for instance 936 for GBK,
- 28593 for ISO-8859-3, etc. A full list of supported codepages is
- listed on the Microsoft MSDN page <ulink
- url="http://msdn.microsoft.com/en-us/library/dd317756(VS.85).aspx"
- >Code Page Identifiers</ulink>. A codepage of 0 is the same as if the
- <literal>-C</literal> hasn't been specified at all.</para>
- </listitem>
- </itemizedlist>
-
- <para>The <literal>-p</literal> option means that you want to convert a
- path-style string rather than a single filename. For example, the PATH
- environment variable is semicolon-delimited in Windows, but
- colon-delimited in UNIX. By giving <literal>-p</literal> you are
- instructing <command>cygpath</command> to convert between these
- formats.</para>
-
- <para>The <literal>-i</literal> option supresses the print out of the usage
- message if no filename argument was given. It can be used in make file
- rules converting variables that may be omitted to a proper format. Note
- that <command>cygpath</command> output may contain spaces (C:\Program
- Files) so should be enclosed in quotes. </para>
-
-
- <example id="utils-cygpath-ex">
- <title>Example <command>cygpath</command> usage</title>
- <screen>
-<![CDATA[
-#!/bin/sh
-if [ "${1}" = "" ];
- then
- XPATH=".";
- else
- XPATH="$(cygpath -C ANSI -w "${1}")";
-fi
-explorer $XPATH &
-]]>
-</screen>
- </example>
-
- <para>The capital options <literal>-D</literal>, <literal>-H</literal>,
- <literal>-P</literal>, <literal>-S</literal>, and <literal>-W</literal>
- output directories used by Windows that are not the same on all systems,
- for example <literal>-S</literal> might output C:\WINNT\system32 or
- C:\Windows\System32. The <literal>-H</literal> shows the Windows profiles
- directory that can be used as root of home. The <literal>-A</literal>
- option forces use of the "All Users" directories instead of the current
- user for the <literal>-D</literal>, <literal>-O</literal> and
- <literal>-P</literal> options. The <literal>-F</literal> outputs other
- special folders specified by their internal numeric code (decimal or
- 0x-prefixed hex). For valid codes and symbolic names, see the CSIDL_*
- definitions in the include file /usr/include/w32api/shlobj.h from package
- w32api. The current valid range of codes for folders is 0 (Desktop) to 59
- (CDBurn area). By default the output is in UNIX (POSIX) format; use the
- <literal>-w</literal> or <literal>-d</literal> options to get other
- formats.</para>
-
- </sect2>
-
- <sect2 id="dumper">
- <title>dumper</title>
-
- <screen>
-Usage: dumper [OPTION] FILENAME WIN32PID
-
-Dump core from WIN32PID to FILENAME.core
-
--d, --verbose be verbose while dumping
--h, --help output help information and exit
--q, --quiet be quiet while dumping (default)
--V, --version output version information and exit
-</screen>
-
- <para>The <command>dumper</command> utility can be used to create a core
- dump of running Windows process. This core dump can be later loaded to
- <command>gdb</command> and analyzed. One common way to use
- <command>dumper</command> is to plug it into cygwin's Just-In-Time
- debugging facility by adding
- <screen>
-error_start=x:\path\to\dumper.exe
-</screen> to the
- <emphasis>CYGWIN</emphasis> environment variable. Please note that
- <literal>x:\path\to\dumper.exe</literal> is Windows-style and not cygwin
- path. If <literal>error_start</literal> is set this way, then dumper will
- be started whenever some program encounters a fatal error. </para>
-
- <para> <command>dumper</command> can be also be started from the command
- line to create a core dump of any running process. Unfortunately, because
- of a Windows API limitation, when a core dump is created and
- <command>dumper</command> exits, the target process is terminated too. </para>
-
- <para> To save space in the core dump, <command>dumper</command> doesn't
- write those portions of target process' memory space that are loaded from
- executable and dll files and are unchangeable, such as program code and
- debug info. Instead, <command>dumper</command> saves paths to files which
- contain that data. When a core dump is loaded into gdb, it uses these
- paths to load appropriate files. That means that if you create a core
- dump on one machine and try to debug it on another, you'll need to place
- identical copies of the executable and dlls in the same directories as on
- the machine where the core dump was created. </para>
-
- </sect2>
-
- <sect2 id="getconf">
- <title>getconf</title>
-
- <screen>
-Usage: getconf [-v specification] variable_name [pathname]
- getconf -a [pathname]
-
-Get configuration values
-
- -v specification Indicate specific version for which configuration
- values shall be fetched.
- -a, --all Print all known configuration values
-
-Other options:
-
- -h, --help This text
- -V, --version Print program version and exit
-</screen>
-
- <para>The <command>getconf</command> utility prints the value of the
- configuration variable specified by <literal>variable_name</literal>. If
- no <literal>pathname</literal> is given, <command>getconf</command>
- serves as a wrapper for the <literal>confstr</literal> and
- <literal>sysconf</literal> functions, supporting the symbolic constants
- defined in the <literal>limits.h</literal> and
- <literal>unistd.h</literal> headers, without their respective
- <literal>_CS_</literal> or <literal>_SC_</literal> prefixes. </para>
-
- <para>If <literal>pathname</literal> is given, <command>getconf</command>
- prints the value of the configuration variable for the specified
- pathname. In this form, <command>getconf</command> serves as a wrapper
- for the <literal>pathconf</literal> function, supporting the symbolic
- constants defined in the <literal>unistd.h</literal> header, without the
- <literal>_PC_</literal> prefix. </para>
-
- <para>If you specify the <literal>-v</literal> option, the parameter
- denotes a specification for which the value of the configuration variable
- should be printed. Note that the only specifications supported by Cygwin
- are <literal>POSIX_V7_ILP32_OFFBIG</literal> and the legacy
- <literal>POSIX_V6_ILP32_OFFBIG</literal> and
- <literal>XBS5_ILP32_OFFBIG</literal> equivalents.</para>
-
- <para>Use the <literal>-a</literal> option to print a list of all available
- configuration variables for the system, or given
- <literal>pathname</literal>, and their values.</para>
-
- </sect2>
-
- <sect2 id="getfacl">
- <title>getfacl</title>
-
- <screen>
-Usage: getfacl [-adn] FILE [FILE2...]
-
-Display file and directory access control lists (ACLs).
-
- -a, --all display the filename, the owner, the group, and
- the ACL of the file
- -d, --dir display the filename, the owner, the group, and
- the default ACL of the directory, if it exists
- -h, --help output usage information and exit
- -n, --noname display user and group IDs instead of names
- -V, --version output version information and exit
-
-When multiple files are specified on the command line, a blank
-line separates the ACLs for each file.
-</screen>
-
- <para> For each argument that is a regular file, special file or directory,
- <command>getfacl</command> displays the owner, the group, and the ACL.
- For directories <command>getfacl</command> displays additionally the
- default ACL. With no options specified, <command>getfacl</command>
- displays the filename, the owner, the group, the setuid (s), setgid (s),
- and sticky (t) bits if available, and both the ACL and the default ACL,
- if it exists. For more information on Cygwin and Windows ACLs, see
- <xref linkend="ntsec"/> in the Cygwin User's Guide. The format
- for ACL output is as follows:
- <screen>
- # file: filename
- # owner: name or uid
- # group: name or uid
- # flags: sst
- user::perm
- user:name or uid:perm
- group::perm
- group:name or gid:perm
- mask:perm
- other:perm
- default:user::perm
- default:user:name or uid:perm
- default:group::perm
- default:group:name or gid:perm
- default:mask:perm
- default:other:perm
-</screen>
- </para>
- </sect2>
-
- <sect2 id="kill">
- <title>kill</title>
-
- <screen>
-Usage: kill [-f] [-signal] [-s signal] pid1 [pid2 ...]
- kill -l [signal]
-
-Send signals to processes
-
- -f, --force force, using win32 interface if necessary
- -l, --list print a list of signal names
- -s, --signal send signal (use kill --list for a list)
- -h, --help output usage information and exit
- -V, --version output version information and exit
-</screen>
-
- <para>The <command>kill</command> program allows you to send arbitrary
- signals to other Cygwin programs. The usual purpose is to end a running
- program from some other window when ^C won't work, but you can also send
- program-specified signals such as SIGUSR1 to trigger actions within the
- program, like enabling debugging or re-opening log files. Each program
- defines the signals they understand.</para>
-
- <para>You may need to specify the full path to use <command>kill</command>
- from within some shells, including <command>bash</command>, the default
- Cygwin shell. This is because <command>bash</command> defines a
- <command>kill</command> builtin function; see the <command>bash</command>
- man page under <emphasis>BUILTIN COMMANDS</emphasis> for more
- information. To make sure you are using the Cygwin version, try
- <screen>
-$ /bin/kill --version
-</screen> which should give the Cygwin
- <command>kill</command> version number and copyright information. </para>
-
- <para>Unless you specific the <literal>-f</literal> option, the "pid"
- values used by <command>kill</command> are the Cygwin pids, not the
- Windows pids. To get a list of running programs and their Cygwin pids,
- use the Cygwin <command>ps</command> program. <command>ps -W</command>
- will display <emphasis>all</emphasis> windows pids.</para>
-
- <para>The <command>kill -l</command> option prints the name of the given
- signal, or a list of all signal names if no signal is given.</para>
-
- <para>To send a specific signal, use the <literal>-signN</literal> option,
- either with a signal number or a signal name (minus the "SIG" part), as
- shown in these examples:</para>
-
- <example id="utils-kill-ex">
- <title>Using the kill command</title>
- <screen>
-<prompt>$</prompt> <userinput>kill 123</userinput>
-<prompt>$</prompt> <userinput>kill -1 123</userinput>
-<prompt>$</prompt> <userinput>kill -HUP 123</userinput>
-<prompt>$</prompt> <userinput>kill -f 123</userinput>
-</screen>
- </example>
-
- <para>Here is a list of available signals, their numbers, and some
- commentary on them, from the file
- <literal>&lt;sys/signal.h&gt;</literal>, which should be considered the
- official source of this information.</para>
-
- <screen>
-SIGHUP 1 hangup
-SIGINT 2 interrupt
-SIGQUIT 3 quit
-SIGILL 4 illegal instruction (not reset when caught)
-SIGTRAP 5 trace trap (not reset when caught)
-SIGABRT 6 used by abort
-SIGEMT 7 EMT instruction
-SIGFPE 8 floating point exception
-SIGKILL 9 kill (cannot be caught or ignored)
-SIGBUS 10 bus error
-SIGSEGV 11 segmentation violation
-SIGSYS 12 bad argument to system call
-SIGPIPE 13 write on a pipe with no one to read it
-SIGALRM 14 alarm clock
-SIGTERM 15 software termination signal from kill
-SIGURG 16 urgent condition on IO channel
-SIGSTOP 17 sendable stop signal not from tty
-SIGTSTP 18 stop signal from tty
-SIGCONT 19 continue a stopped process
-SIGCHLD 20 to parent on child stop or exit
-SIGCLD 20 System V name for SIGCHLD
-SIGTTIN 21 to readers pgrp upon background tty read
-SIGTTOU 22 like TTIN for output if (tp-&gt;t_local&amp;LTOSTOP)
-SIGIO 23 input/output possible
-SIGPOLL 23 System V name for SIGIO
-SIGXCPU 24 exceeded CPU time limit
-SIGXFSZ 25 exceeded file size limit
-SIGVTALRM 26 virtual time alarm
-SIGPROF 27 profiling time alarm
-SIGWINCH 28 window changed
-SIGLOST 29 resource lost (eg, record-lock lost)
-SIGPWR 29 power failure
-SIGUSR1 30 user defined signal 1
-SIGUSR2 31 user defined signal 2
-</screen>
-
- </sect2>
-
- <sect2 id="ldd">
- <title>ldd</title>
-
- <screen>
-Usage: ldd [OPTION]... FILE...
-
-Print shared library dependencies
-
- -h, --help print this help and exit
- -V, --version print version information and exit
- -r, --function-relocs process data and function relocations
- (currently unimplemented)
- -u, --unused print unused direct dependencies
- (currently unimplemented)
- -v, --verbose print all information
- (currently unimplemented)
-</screen>
-
- <para><command>ldd</command> prints the shared libraries (DLLs) an
- executable or DLL is linked against. No modifying option is implemented
- yet.</para>
-
- </sect2>
-
- <sect2 id="locale">
- <title>locale</title>
-
- <screen>
-Usage: locale [-amvhV]
- or: locale [-ck] NAME
- or: locale [-usfnU]
-
-Get locale-specific information.
-
-System information:
-
- -a, --all-locales List all available supported locales
- -m, --charmaps List all available character maps
- -v, --verbose More verbose output
-
-Modify output format:
-
- -c, --category-name List information about given category NAME
- -k, --keyword-name Print information about given keyword NAME
-
-Default locale information:
-
- -u, --user Print locale of user's default UI language
- -s, --system Print locale of system default UI language
- -f, --format Print locale of user's regional format settings
- (time, numeric &amp; monetary)
- -n, --no-unicode Print system default locale for non-Unicode programs
- -U, --utf Attach \".UTF-8\" to the result
-
-Other options:
-
- -h, --help This text
- -V, --version Print program version and exit
-</screen>
-
- <para><command>locale</command> without parameters prints information about
- the current locale environment settings.</para>
-
- <para>The <literal>-u</literal>, <literal>-s</literal>,
- <literal>-f</literal>, and <literal>-n</literal> options can be used to
- request the various Windows locale settings. The purpose is to use this
- command in scripts to set the POSIX locale variables.</para>
-
- <para>The <literal>-u</literal> option prints the current user's Windows UI
- locale to stdout. In Windows Vista and Windows 7 this setting is called
- the "Display Language"; there was no corresponding user setting in
- Windows XP. The <literal>-s</literal> option prints the systems default
- instead. The <literal>-f</literal> option prints the user's setting for
- time, date, number and currency. That's equivalent to the setting in the
- "Formats" or "Regional Options" tab in the "Region and Language" or
- "Regional and Language Options" dialog. With the <literal>-U</literal>
- option <command>locale</command> appends a ".UTF-8".</para>
-
- <para>Usage example:</para>
-
- <screen>
-bash$ export LANG=$(locale -uU)
-bash$ echo $LANG
-en_US.UTF-8
-bash$ export LC_TIME=$(locale -fU)
-bash$ echo $LC_TIME
-de_DE.UTF-8
-</screen>
-
- <para>The <literal>-a</literal> option is helpful to learn which locales
- are supported by your Windows machine. It prints all available locales
- and the allowed modifiers. Example:</para>
-
- <screen>
-bash$ locale -a
-C
-C.utf8
-POSIX
-af_ZA
-af_ZA.utf8
-am_ET
-am_ET.utf8
-...
-be_BY
-be_BY.utf8
-be_BY@latin
-...
-ca_ES
-ca_ES.utf8
-ca_ES@euro
-catalan
-...
-</screen>
-
- <para>The <literal>-v</literal> option prints more detailed information
- about each available locale. Example:</para>
-
- <screen>
-bash$ locale -av
-locale: af_ZA archive: /cygdrive/c/Windows/system32/kernel32.dll
--------------------------------------------------------------------------------
- language | Afrikaans
-territory | South Africa
- codeset | ISO-8859-1
-
-locale: af_ZA.utf8 archive: /cygdrive/c/Windows/system32/kernel32.dll
--------------------------------------------------------------------------------
- language | Afrikaans
-territory | South Africa
- codeset | UTF-8
-
-...
-
-locale: ca_ES@euro archive: /cygdrive/c/Windows/system32/kernel32.dll
--------------------------------------------------------------------------------
- language | Catalan
-territory | Spain
- codeset | ISO-8859-15
-
-locale: catalan archive: /usr/share/locale/locale.alias
--------------------------------------------------------------------------------
- language | Catalan
-territory | Spain
- codeset | ISO-8859-1
-
-...
-</screen>
-
- <para>The <literal>-m</literal> option prints the names of the available
- charmaps supported by Cygwin to stdout.</para>
-
- <para>Otherwise, if arguments are given, <command>locale</command> prints
- the values assigned to these arguments. Arguments can be names of locale
- categories (for instance: LC_CTYPE, LC_MONETARY), or names of keywords
- supported in the locale categories (for instance: thousands_sep,
- charmap). The <literal>-c</literal> option prints additionally the name
- of the category. The <literal>-k</literal> option prints additionally the
- name of the keyword. Example:</para>
-
- <screen>
-bash$ locale -ck LC_MESSAGES
-LC_MESSAGES
-yesexpr="^[yY]"
-noexpr="^[nN]"
-yesstr="yes"
-nostr="no"
-messages-codeset="UTF-8"
-bash$ locale noexpr
-^[nN]
-</screen>
-
- </sect2>
-
- <sect2 id="minidumper"><title>minidumper</title>
-
- <screen>
-Usage: minidumper [OPTION] FILENAME WIN32PID
-
-Write minidump from WIN32PID to FILENAME.dmp
-
--t, --type minidump type flags
--n, --nokill don't terminate the dumped process
--d, --verbose be verbose while dumping
--h, --help output help information and exit
--q, --quiet be quiet while dumping (default)
--V, --version output version information and exit
- </screen>
-
- <para>
- The <command>minidumper</command> utility can be used to create a
- minidump of a running Windows process. This minidump can be later
- analysed using breakpad or Windows debugging tools.
- </para>
-
- <para>
- <command>minidumper</command> can be used with cygwin's Just-In-Time
- debugging facility in exactly the same way as <command>dumper</command>
- (See <xref linkend="dumper"></xref>).
- </para>
-
- <para>
- <command>minidumper</command> can also be started from the command line to
- create a minidump of any running process. For compatibility with
- <command>dumper</command> the target process is terminated after dumping
- unless the <literal>-n</literal> option is given.
- </para>
-
- </sect2>
-
- <sect2 id="mkgroup">
- <title>mkgroup</title>
-
- <screen>
-Usage: mkgroup [OPTION]...
-
-Write /etc/group-like output to stdout
-
-Don't use this command to generate a local /etc/group file, unless you
-really need one. See the Cygwin User's Guide for more information.
-
-Options:
-
- -l,--local [machine] Print local group accounts of \"machine\",
- from local machine if no machine specified.
- Automatically adding machine prefix for local
- machine depends on settings in /etc/nsswitch.conf.
- -L,--Local machine Ditto, but generate groupname with machine prefix.
- -d,--domain [domain] Print domain groups,
- from current domain if no domain specified.
- -c,--current Print current group.
- -S,--separator char For -L use character char as domain\\group
- separator in groupname instead of default '+'.
- -o,--id-offset offset Change the default offset (0x10000) added to gids
- -g,--group groupname Only return information for the specified group.
- One of -l, -d must be specified, too.
- -b,--no-builtin Don't print BUILTIN groups.
- -U,--unix grouplist Print UNIX groups when using -l on a UNIX Samba
- server. Grouplist is a comma-separated list of
- groupnames or gid ranges (root,-25,50-100).
- Enumerating large ranges can take a long time!
- -h,--help Print this message.
- -v,--version Print version information and exit.
-
-Default is to print local groups on stand-alone machines, plus domain
-groups on domain controllers and domain member machines.
-</screen>
-
- <para>The <command>mkgroup</command> program can be used to create a local
- <filename>/etc/group</filename> file. Cygwin doesn't need this file,
- because it reads group information from the Windows account databases,
- but you can add an <filename>/etc/group</filename> file for instance, if
- your machine is often disconnected from its domain controller.
- </para>
-
- <para>Note that this information is static, in contrast to the information
- automatically gathered by Cygwin from the Windows account databases. If
- you change the group information on your system, you'll need to regenerate
- the group file for it to have the new information.</para>
-
- <para>By default, the information generated by <command>mkgroup</command>
- is equivalent to the information generated by Cygwin itself. The
- <literal>-d</literal> and <literal>-l/-L</literal> options allow you to
- specify where the information comes from, some domain, or the local SAM
- of a machine. Note that you can only enumerate accounts from trusted
- domains. Any non-trusted domain will be ignored. Access-restrictions
- of your current account apply. The <literal>-l/-L</literal> when used
- with a machine name, tries to contact that machine to enumerate local
- groups of other machines, typically outside of domains. This scenario
- cannot be covered by Cygwin's account automatism. If you want to use
- the <literal>-L</literal> option, but you don't like the default
- domain/group separator from <filename>/etc/nsswitch.conf</filename>,
- you can specify another separator using the <literal>-S</literal> option,
- for instance:</para>
-
- <example id="utils-mkgroup-ex">
- <title>Setting up group entry for current user with different
- domain/group separator</title>
- <screen>
-<prompt>$</prompt> <userinput>mkgroup -L server1 -S= &gt; /etc/group</userinput>
-</screen>
- </example>
-
- <para>For very simple needs, an entry for the current user's group can be
- created by using the option <literal>-c</literal>.</para>
-
- <para>The <literal>-o</literal> option allows for (unlikely) special cases
- with multiple machines where the GIDs might match otherwise. The
- <literal>-g</literal> option only prints the information for one group.
- The <literal>-U</literal> option allows you to enumerate the standard
- UNIX groups on a Samba machine. It's used together with <literal>-l
- samba-server</literal> or <literal>-L samba-server</literal>. The normal
- UNIX groups are usually not enumerated, but they can show up as a group
- in <command>ls -l</command> output. </para>
-
- </sect2>
-
- <sect2 id="mkpasswd">
- <title>mkpasswd</title>
-
- <screen>
-Usage: mkpasswd [OPTIONS]...
-
-Write /etc/passwd-like output to stdout
-
-Don't use this command to generate a local /etc/passwd file, unless you
-really need one. See the Cygwin User's Guide for more information.
-
-Options:
-
- -l,--local [machine] Print local user accounts of \"machine\",
- from local machine if no machine specified.
- Automatically adding machine prefix for local
- machine depends on settings in /etc/nsswitch.conf.
- -L,--Local machine Ditto, but generate username with machine prefix.
- -d,--domain [domain] Print domain accounts,
- from current domain if no domain specified.
- -c,--current Print current user.
- -S,--separator char For -L use character char as domain\\user
- separator in username instead of the default '+'.
- -o,--id-offset offset Change the default offset (0x10000) added to uids
- of foreign local machine accounts. Use with -l/-L.
- -u,--username username Only return information for the specified user.
- One of -l, -d must be specified, too
- -b,--no-builtin Don't print BUILTIN users.
- -p,--path-to-home path Use specified path instead of user account home dir
- or /home prefix.
- -U,--unix userlist Print UNIX users when using -l on a UNIX Samba
- server. Userlist is a comma-separated list of
- usernames or uid ranges (root,-25,50-100).
- Enumerating large ranges can take a long time!
- -h,--help Displays this message.
- -V,--version Version information and exit.
-
-Default is to print local accounts on stand-alone machines, domain accounts
-on domain controllers and domain member machines.
-</screen>
-
- <para>The <command>mkpasswd</command> program can be used to create a
- <filename>/etc/passwd</filename> file. Cygwin doesn't need this file,
- because it reads user information from the Windows account databases,
- but you can add an <filename>/etc/passwd</filename> file, for instance
- if your machine is often disconnected from its domain controller.</para>
-
- <para>Note that this information is static, in contrast to the information
- automatically gathered by Cygwin from the Windows account databases. If
- you change the user information on your system, you'll need to regenerate
- the passwd file for it to have the new information.</para>
-
- <para>By default, the information generated by <command>mkpasswd</command>
- is equivalent to the information generated by Cygwin itself. The
- <literal>-d</literal> and <literal>-l/-L</literal> options allow you to
- specify where the information comes from, some domain, or the local SAM
- of a machine. Note that you can only enumerate accounts from trusted
- domains. Any non-trusted domain will be ignored. Access-restrictions
- of your current account apply. The <literal>-l/-L</literal> when used
- with a machine name, tries to contact that machine to enumerate local
- groups of other machines, typically outside of domains. This scenario
- cannot be covered by Cygwin's account automatism. If you want to use
- the <literal>-L</literal> option, but you don't like the default
- domain/group separator from <filename>/etc/nsswitch.conf</filename>,
- you can specify another separator using the <literal>-S</literal> option,
- analog to <command>mkgroup</command>.</para>
-
- <para>For very simple needs, an entry for the current user can be created
- by using the option <literal>-c</literal>.</para>
-
- <para>The <literal>-o</literal> option allows for special cases (such as
- multiple domains) where the UIDs might match otherwise. The
- <literal>-p</literal> option causes <command>mkpasswd</command> to use
- the specified prefix instead of the account home dir or <literal>/home/
- </literal>. For example, this command: <example id="utils-althome-ex"
- ><title>Using an alternate home root</title>
- <screen>
-<prompt>$</prompt> <userinput>mkpasswd -l -p "$(cygpath -H)" &gt; /etc/passwd</userinput>
-</screen>
- </example> would put local users' home directories in the Windows
- 'Profiles' directory. The <literal>-u</literal> option creates just an
- entry for the specified user. The <literal>-U</literal> option allows you
- to enumerate the standard UNIX users on a Samba machine. It's used
- together with <literal>-l samba-server</literal> or <literal>-L
- samba-server</literal>. The normal UNIX users are usually not enumerated,
- but they can show up as file owners in <command>ls -l</command> output.
- </para>
-
- </sect2>
-
- <sect2 id="mount">
- <title>mount</title>
-
- <screen>
-Usage: mount [OPTION] [&lt;win32path&gt; &lt;posixpath&gt;]
- mount -a
- mount &lt;posixpath&gt;
-
-Display information about mounted filesystems, or mount a filesystem
-
- -a, --all mount all filesystems mentioned in fstab
- -c, --change-cygdrive-prefix change the cygdrive path prefix to &lt;posixpath&gt;
- -f, --force force mount, don't warn about missing mount
- point directories
- -h, --help output usage information and exit
- -m, --mount-entries write fstab entries to replicate mount points
- and cygdrive prefixes
- -o, --options X[,X...] specify mount options
- -p, --show-cygdrive-prefix show user and/or system cygdrive path prefix
- -V, --version output version information and exit
-</screen>
-
- <para>The <command>mount</command> program is used to map your drives and
- shares onto Cygwin's simulated POSIX directory tree, much like as is done
- by mount commands on typical UNIX systems. However, in contrast to mount
- points given in <filename>/etc/fstab</filename>, mount points created or
- changed with <command>mount</command> are not persistent. They disappear
- immediately after the last process of the current user exited. Please see
- <xref linkend="mount-table"/> for more information on the concepts behind
- the Cygwin POSIX file system and strategies for using mounts. To remove
- mounts temporarily, use <command>umount</command></para>
-
- <sect3 id="utils-mount">
- <title>Using mount</title>
-
- <para>If you just type <command>mount</command> with no parameters, it
- will display the current mount table for you.</para>
-
- <example id="utils-mount-ex">
- <title>Displaying the current set of mount points</title>
- <screen>
-<prompt>$</prompt> <userinput>mount</userinput>
-C:/cygwin/bin on /usr/bin type ntfs (binary)
-C:/cygwin/lib on /usr/lib type ntfs (binary)
-C:/cygwin on / type ntfs (binary)
-C: on /mnt/c type ntfs (binary,user,noumount)
-D: on /mnt/d type fat (binary,user,noumount)
-</screen>
- </example>
-
- <para>In this example, c:/cygwin is the POSIX root and the D drive is
- mapped to <filename>/mnt/d</filename>. Note that in this case, the root
- mount is a system-wide mount point that is visible to all users running
- Cygwin programs, whereas the <filename>/mnt/d</filename> mount is only
- visible to the current user.</para>
-
- <para>The <command>mount</command> utility is also the mechanism for
- adding new mounts to the mount table in memory. The following example
- demonstrates how to mount the directory
- <filename>//pollux/home/joe/data</filename> to
- <filename>/data</filename> for the duration of the current session. </para>
-
- <example id="utils-mount-add-ex">
- <title>Adding mount points</title>
- <screen>
-<prompt>$</prompt> <userinput>ls /data</userinput>
-ls: /data: No such file or directory
-<prompt>$</prompt> <userinput>mount //pollux/home/joe/data /data</userinput>
-mount: warning - /data does not exist!
-<prompt>$</prompt> <userinput>mount</userinput>
-//pollux/home/joe/data on /data type smbfs (binary)
-C:/cygwin/bin on /usr/bin type ntfs (binary)
-C:/cygwin/lib on /usr/lib type ntfs (binary)
-C:/cygwin on / type ntfs (binary)
-C: on /c type ntfs (binary,user,noumount)
-D: on /d type fat (binary,user,noumount)
-</screen>
- </example>
-
- <para>A given POSIX path may only exist once in the mount table. Attempts
- to replace the mount will fail with a busy error. The
- <literal>-f</literal> (force) option causes the old mount to be
- silently replaced with the new one, provided the old mount point was a
- user mount point. It's not valid to replace system-wide mount points.
- Additionally, the <literal>-f</literal> option will silence warnings
- about the non-existence of directories at the Win32 path
- location.</para>
-
- <para> The <literal>-o</literal> option is the method via which various
- options about the mount point may be recorded. The following options
- are available (note that most of the options are duplicates of other
- mount flags):</para>
-
- <screen>
- acl - Use the filesystem's access control lists (ACLs) to
- implement real POSIX permissions (default).
- binary - Files default to binary mode (default).
- bind - Allows to remount part of the file hierarchy somewhere else.
- Different from other mount calls, the first argument
- specifies an absolute POSIX path, rather than a Win32 path.
- This POSIX path is remounted to the POSIX path specified as
- the second parameter. The conversion to a Win32 path is done
- within Cygwin immediately at the time of the call. Note that
- symlinks are ignored while performing this path conversion.
- cygexec - Treat all files below mount point as cygwin executables.
- dos - Always convert leading spaces and trailing dots and spaces to
- characters in the UNICODE private use area. This allows to use
- broken filesystems which only allow DOS filenames, even if they
- are not recognized as such by Cygwin.
- exec - Treat all files below mount point as executable.
- ihash - Always fake inode numbers rather than using the ones returned
- by the filesystem. This allows to use broken filesystems which
- don't return unambiguous inode numbers, even if they are not
- recognized as such by Cygwin.
- noacl - Ignore ACLs and fake POSIX permissions.
- nosuid - No suid files are allowed (currently unimplemented)
- notexec - Treat all files below mount point as not executable.
- override - Override immutable mount points.
- posix=0 - Switch off case sensitivity for paths under this mount point.
- posix=1 - Switch on case sensitivity for paths under this mount point
- (default).
- sparse - Switch on support for sparse files. This option only makes
- sense on NTFS and then only if you really need sparse files.
- text - Files default to CRLF text mode line endings.
-</screen>
-
- <para>For a more complete description of the mount options and the
- <filename>/etc/fstab</filename> file, see <xref linkend="mount-table"
- />.</para>
-
- <para>Note that all mount points added with <command>mount</command> are
- user mount points. System mount points can only be specified in the
- <filename>/etc/fstab</filename> file.</para>
-
- <para>If you added mount points to <filename>/etc/fstab</filename> or
- your <filename>/etc/fstab.d/&lt;username&gt;</filename> file, you can
- add these mount points to your current user session using the
- <literal>-a/--all</literal> option, or by specifing the posix path
- alone on the command line. As an example, consider you added a mount
- point with the POSIX path <filename>/my/mount</filename>. You can add
- this mount point with either one of the following two commands to your
- current user session.</para>
-
- <screen>
-<prompt>$</prompt> <userinput>mount /my/mount</userinput>
-<prompt>$</prompt> <userinput>mount -a</userinput>
-</screen>
-
- <para>The first command just adds the <filename>/my/mount</filename>
- mount point to your current session, the <command>mount -a</command>
- adds all new mount points to your user session.</para>
-
- <para>If you change a mount point to point to another native path, or if
- you changed the flags of a mount point, you have to
- <command>umount</command> the mount point first, before you can add it
- again. Please note that all such added mount points are added as user
- mount points, and that the rule that system mount points can't be
- removed or replaced in a running session still applies.</para>
-
- <para>To bind a POSIX path to another POSIX path, use the
- <literal>bind</literal> mount flag.</para>
-
- <screen>
-<prompt>$</prompt> <userinput>mount -o bind /var /usr/var</userinput>
-</screen>
-
- <para>This command makes the file hirarchy under
- <filename>/var</filename> additionally available under
- <filename>/usr/var</filename>.</para>
-
- <para> The <literal>-m</literal> option causes the
- <command>mount</command> utility to output the current mount table in a
- series of fstab entries. You can save this output as a backup when
- experimenting with the mount table. Copy the output to
- <filename>/etc/fstab</filename> to restore the old state. It also makes
- moving your settings to a different machine much easier.</para>
-
- </sect3>
-
- <sect3 id="utils-cygdrive">
- <title>Cygdrive mount points</title>
-
- <para>Whenever Cygwin cannot use any of the existing mounts to convert
- from a particular Win32 path to a POSIX one, Cygwin will, instead,
- convert to a POSIX path using a default mount point:
- <filename>/cygdrive</filename>. For example, if Cygwin accesses
- <filename>z:\foo</filename> and the z drive is not currently in the
- mount table, then <filename>z:\</filename> will be accessible as
- <filename>/cygdrive/z</filename>. The <command>mount</command> utility
- can be used to change this default automount prefix through the use of
- the "--change-cygdrive-prefix" option. In the following example, we
- will set the automount prefix to <filename>/mnt</filename>:</para>
-
- <example id="utils-cygdrive-ex">
- <title>Changing the default prefix</title>
- <screen>
-<prompt>$</prompt> <userinput>mount --change-cygdrive-prefix /mnt</userinput>
-</screen>
- </example>
-
- <para>Note that the cygdrive prefix can be set both per-user and
- system-wide, and that as with all mounts, a user-specific mount takes
- precedence over the system-wide setting. The <command>mount</command>
- utility creates system-wide mounts by default if you do not specify a
- type. You can always see the user and system cygdrive prefixes with the
- <literal>-p</literal> option. Using the <literal>--options</literal>
- flag with <literal>--change-cygdrive-prefix</literal> makes all new
- automounted filesystems default to this set of options. For instance
- (using the short form of the command line flags)</para>
-
- <example id="utils-cygdrive-ex2">
- <title>Changing the default prefix with specific mount options</title>
- <screen>
-<prompt>$</prompt> <userinput>mount -c /mnt -o binary,noacl</userinput>
-</screen>
- </example>
-
-
- </sect3>
-
- <sect3 id="utils-limitations">
- <title>Limitations</title>
-
- <para>Limitations: there is a hard-coded limit of 64 mount points (up to
- Cygwin 1.7.9: 30 mount points). Also, although you can mount to
- pathnames that do not start with "/", there is no way to make use of
- such mount points.</para>
-
- <para>Normally the POSIX mount point in Cygwin is an existing empty
- directory, as in standard UNIX. If this is the case, or if there is a
- place-holder for the mount point (such as a file, a symbolic link
- pointing anywhere, or a non-empty directory), you will get the expected
- behavior. Files present in a mount point directory before the mount
- become invisible to Cygwin programs. </para>
-
- <para>It is sometimes desirable to mount to a non-existent directory, for
- example to avoid cluttering the root directory with names such as
- <filename>a</filename>, <filename>b</filename>, <filename>c</filename>
- pointing to disks. Although <command>mount</command> will give you a
- warning, most everything will work properly when you refer to the mount
- point explicitly. Some strange effects can occur however. For example
- if your current working directory is <filename>/dir</filename>, say,
- and <filename>/dir/mtpt</filename> is a mount point, then
- <filename>mtpt</filename> will not show up in an <command>ls</command>
- or <command>echo *</command> command and <command>find .</command> will
- not find <filename>mtpt</filename>. </para>
-
- </sect3>
-
- </sect2>
-
- <sect2 id="passwd">
- <title>passwd</title>
-
- <screen>
-Usage: passwd [OPTION] [USER]
-
-Change USER's password or password attributes.
-
-User operations:
- -l, --lock lock USER's account.
- -u, --unlock unlock USER's account.
- -c, --cannot-change USER can't change password.
- -C, --can-change USER can change password.
- -e, --never-expires USER's password never expires.
- -E, --expires USER's password expires according to system's
- password aging rule.
- -p, --pwd-not-required no password required for USER.
- -P, --pwd-required password is required for USER.
- -R, --reg-store-pwd enter password to store it in the registry for
- later usage by services to be able to switch
- to this user context with network credentials.
-
-System operations:
- -i, --inactive NUM set NUM of days before inactive accounts are disabled
- (inactive accounts are those with expired passwords).
- -n, --minage MINDAYS set system minimum password age to MINDAYS days.
- -x, --maxage MAXDAYS set system maximum password age to MAXDAYS days.
- -L, --length LEN set system minimum password length to LEN.
-
-Other options:
- -d, --logonserver SERVER connect to SERVER (e.g. domain controller).
- Usually not required.
- -S, --status display password status for USER (locked, expired,
- etc.) plus global system password settings.
- -h, --help output usage information and exit.
- -V, --version output version information and exit.
-
-If no option is given, change USER's password. If no user name is given,
-operate on current user. System operations must not be mixed with user
-operations. Don't specify a USER when triggering a system operation.
-
-Don't specify a user or any other option together with the -R option.
-Non-Admin users can only store their password if cygserver is running.
-Note that storing even obfuscated passwords in the registry is not overly
-secure. Use this feature only if the machine is adequately locked down.
-Don't use this feature if you don't need network access within a remote
-session. You can delete your stored password by using `passwd -R' and
-specifying an empty password.
-</screen>
-
- <para> <command>passwd</command> changes passwords for user accounts. A
- normal user may only change the password for their own account, but
- administrators may change passwords on any account.
- <command>passwd</command> also changes account information, such as
- password expiry dates and intervals.</para>
-
- <para>For password changes, the user is first prompted for their old
- password, if one is present. This password is then encrypted and compared
- against the stored password. The user has only one chance to enter the
- correct password. The administrators are permitted to bypass this step so
- that forgotten passwords may be changed.</para>
-
- <para>The user is then prompted for a replacement password.
- <command>passwd</command> will prompt twice for this replacement and
- compare the second entry against the first. Both entries are required to
- match in order for the password to be changed.</para>
-
- <para>After the password has been entered, password aging information is
- checked to see if the user is permitted to change their password at this
- time. If not, <command>passwd</command> refuses to change the password
- and exits.</para>
-
- <para> To get current password status information, use the
- <literal>-S</literal> option. Administrators can use
- <command>passwd</command> to perform several account maintenance
- functions (users may perform some of these functions on their own
- accounts). Accounts may be locked with the <literal>-l</literal> flag and
- unlocked with the <literal>-u</literal> flag. Similarly,
- <literal>-c</literal> disables a user's ability to change passwords, and
- <literal>-C</literal> allows a user to change passwords. For password
- expiry, the <literal>-e</literal> option disables expiration, while the
- <literal>-E</literal> option causes the password to expire according to
- the system's normal aging rules. Use <literal>-p</literal> to disable the
- password requirement for a user, or <literal>-P</literal> to require a
- password. </para>
-
- <para>Administrators can also use <command>passwd</command> to change
- system-wide password expiry and length requirements with the
- <literal>-i</literal>, <literal>-n</literal>, <literal>-x</literal>, and
- <literal>-L</literal> options. The <literal>-i</literal> option is used
- to disable an account after the password has been expired for a number of
- days. After a user account has had an expired password for
- <emphasis>NUM</emphasis> days, the user may no longer sign on to the
- account. The <literal>-n</literal> option is used to set the minimum
- number of days before a password may be changed. The user will not be
- permitted to change the password until <emphasis>MINDAYS</emphasis> days
- have elapsed. The <literal>-x</literal> option is used to set the maximum
- number of days a password remains valid. After
- <emphasis>MAXDAYS</emphasis> days, the password is required to be
- changed. Allowed values for the above options are 0 to 999. The
- <literal>-L</literal> option sets the minimum length of allowed passwords
- for users who don't belong to the administrators group to
- <emphasis>LEN</emphasis> characters. Allowed values for the minimum
- password length are 0 to 14. In any of the above cases, a value of 0
- means `no restrictions'.</para>
-
- <para> All operations affecting the current user are by default run against
- the logon server of the current user (taken from the environment variable
- <envar>LOGONSERVER</envar>. When password or account information of other
- users should be changed, the logon server is evaluated automatically.
- In rare cases, it might be necessary to switch to another domain
- controller to perform the action. In this case, use the
- <literal>-d</literal> option to specify the machine to run the command
- against. Note that the current user must have account operator permissions
- to perform user account changes in a domain. </para>
-
- <para>Users can use the <command>passwd -R</command> to enter a password
- which then gets stored in a special area of the registry on the local
- system, which is also used by Windows to store passwords of accounts
- running Windows services. When a privileged Cygwin application calls the
- <command>set{e}uid(user_id)</command> system call, Cygwin checks if a
- password for that user has been stored in this registry area. If so, it
- uses this password to switch to this user account using that password.
- This allows you to logon through, for instance, <command>ssh</command>
- with public key authentication and get a full qualified user token with
- all credentials for network access. However, the method has some
- drawbacks security-wise. This is explained in more detail in <xref
- linkend="ntsec"/>.</para>
-
- <para>Please note that storing passwords in that registry area is a
- privileged operation which only administrative accounts are allowed to
- do. Administrators can enter the password for other user accounts into
- the registry by specifying the username on the commandline. If normal,
- non-admin users should be allowed to enter their passwords using
- <command>passwd -R</command>, it's required to run
- <command>cygserver</command> as a service under the LocalSystem account
- before running <command>passwd -R</command>. This only affects storing
- passwords. Using passwords in privileged processes does not require
- <command>cygserver</command> to run.</para>
-
- <para>Limitations: Users may not be able to change their password on some
- systems.</para>
-
- </sect2>
-
- <sect2 id="pldd">
- <title>pldd</title>
-
- <screen>
-Usage: pldd [OPTION...] PID
-
-List dynamic shared objects loaded into a process.
-
- -?, --help Give this help list
- --usage Give a short usage message
- -V, --version Print program version
-</screen>
-
- <para><command>pldd</command> prints the shared libraries (DLLs) loaded by
- the process with the given PID.</para>
-
- </sect2>
-
- <sect2 id="ps">
- <title>ps</title>
-
- <screen>
-Usage: ps [-aefls] [-u UID]
-
-Report process status
-
- -a, --all show processes of all users
- -e, --everyone show processes of all users
- -f, --full show process uids, ppids
- -h, --help output usage information and exit
- -l, --long show process uids, ppids, pgids, winpids
- -p, --process show information for specified PID
- -s, --summary show process summary
- -u, --user list processes owned by UID
- -V, --version output version information and exit
- -W, --windows show windows as well as cygwin processes
-With no options, ps outputs the long format by default
-</screen>
-
- <para>The <command>ps</command> program gives the status of all the Cygwin
- processes running on the system (ps = "process status"). Due to the
- limitations of simulating a POSIX environment under Windows, there is
- little information to give. </para>
-
- <para> The PID column is the process ID you need to give to the
- <command>kill</command> command. The PPID is the parent process ID, and
- PGID is the process group ID. The WINPID column is the process ID
- displayed by NT's Task Manager program. The TTY column gives which
- pseudo-terminal a process is running on, or a <literal>'?'</literal> for
- services. The UID column shows which user owns each process. STIME is the
- time the process was started, and COMMAND gives the name of the program
- running. Listings may also have a status flag in column zero;
- <literal>S</literal> means stopped or suspended (in other words, in the
- background), <literal>I</literal> means waiting for input or interactive
- (foreground), and <literal>O</literal> means waiting to output. </para>
-
- <para> By default, <command>ps</command> will only show processes owned by
- the current user. With either the <literal>-a</literal> or
- <literal>-e</literal> option, all user's processes (and system processes)
- are listed. There are historical UNIX reasons for the synonomous options,
- which are functionally identical. The <literal>-f</literal> option
- outputs a "full" listing with usernames for UIDs. The
- <literal>-l</literal> option is the default display mode, showing a
- "long" listing with all the above columns. The other display option is
- <literal>-s</literal>, which outputs a shorter listing of just PID, TTY,
- STIME, and COMMAND. The <literal>-u</literal> option allows you to show
- only processes owned by a specific user. The <literal>-p</literal> option
- allows you to show information for only the process with the specified
- PID. The <literal>-W</literal> option causes <command>ps</command> show
- non-Cygwin Windows processes as well as Cygwin processes. The WINPID is
- also the PID, and they can be killed with the Cygwin
- <command>kill</command> command's <literal>-f</literal> option. </para>
-
- </sect2>
-
- <sect2 id="regtool">
- <title>regtool</title>
-
- <screen>
-Usage: regtool [OPTION] (add|check|get|list|remove|unset|load|unload|save) KEY
-
-View or edit the Win32 registry
-
-Actions:
-
- add KEY\SUBKEY add new SUBKEY
- check KEY exit 0 if KEY exists, 1 if not
- get KEY\VALUE prints VALUE to stdout
- list KEY list SUBKEYs and VALUEs
- remove KEY remove KEY
- set KEY\VALUE [data ...] set VALUE
- unset KEY\VALUE removes VALUE from KEY
- load KEY\SUBKEY PATH load hive from PATH into new SUBKEY
- unload KEY\SUBKEY unload hive and remove SUBKEY
- save KEY\SUBKEY PATH save SUBKEY into new hive PATH
-
-Options for 'list' Action:
-
- -k, --keys print only KEYs
- -l, --list print only VALUEs
- -p, --postfix like ls -p, appends '\' postfix to KEY names
-
-Options for 'get' Action:
-
- -b, --binary print REG_BINARY data as hex bytes
- -n, --none print data as stream of bytes as stored in registry
- -x, --hex print numerical data as hex numbers
-
-Options for 'set' Action:
-
- -b, --binary set type to REG_BINARY (hex args or '-')
- -D, --dword-be set type to REG_DWORD_BIG_ENDIAN
- -e, --expand-string set type to REG_EXPAND_SZ
- -i, --integer set type to REG_DWORD
- -m, --multi-string set type to REG_MULTI_SZ
- -n, --none set type to REG_NONE
- -Q, --qword set type to REG_QWORD
- -s, --string set type to REG_SZ
-
-Options for 'set' and 'unset' Actions:
-
- -K&lt;c&gt;, --key-separator[=]&lt;c&gt; set key separator to &lt;c&gt; instead of '\'
-
-Other Options:
-
- -h, --help output usage information and exit
- -q, --quiet no error output, just nonzero return if KEY/VALUE missing
- -v, --verbose verbose output, including VALUE contents when applicable
- -w, --wow64 access 64 bit registry view (ignored on 32 bit Windows)
- -W, --wow32 access 32 bit registry view (ignored on 32 bit Windows)
- -V, --version output version information and exit
-
-KEY is in the format [host]\prefix\KEY\KEY\VALUE, where host is optional
-remote host in either \\hostname or hostname: format and prefix is any of:
- root HKCR HKEY_CLASSES_ROOT (local only)
- config HKCC HKEY_CURRENT_CONFIG (local only)
- user HKCU HKEY_CURRENT_USER (local only)
- machine HKLM HKEY_LOCAL_MACHINE
- users HKU HKEY_USERS
-
-You can use forward slash ('/') as a separator instead of backslash, in
-that case backslash is treated as escape character
-Example: regtool.exe get '\user\software\Microsoft\Clock\iFormat'
-</screen>
-
- <para>The <command>regtool</command> program allows shell scripts to access
- and modify the Windows registry. Note that modifying the Windows registry
- is dangerous, and carelessness here can result in an unusable system. Be
- careful.</para>
-
- <para>The <literal>-v</literal> option means "verbose". For most commands,
- this causes additional or lengthier messages to be printed. Conversely,
- the <literal>-q</literal> option supresses error messages, so you can use
- the exit status of the program to detect if a key exists or not (for
- example).</para>
-
- <para>The <literal>-w</literal> option allows you to access the 64 bit view
- of the registry. Several subkeys exist in a 32 bit and a 64 bit version
- when running on Windows 64. Since Cygwin is running in 32 bit mode, it
- only has access to the 32 bit view of these registry keys. When using the
- <literal>-w</literal> switch, the 64 bit view is used and
- <command>regtool</command> can access the entire registry. This option is
- simply ignored when running on 32 bit Windows versions. </para>
-
- <para>The <literal>-W</literal> option allows you to access the 32 bit view
- on the registry. The purpose of this option is mainly for symmetry. It
- permits creation of OS agnostic scripts which would also work in a
- hypothetical 64 bit version of Cygwin.</para>
-
- <para>You must provide <command>regtool</command> with an
- <emphasis>action</emphasis> following options (if any). Currently, the
- action must be <literal>add</literal>, <literal>set</literal>,
- <literal>check</literal>, <literal>get</literal>,
- <literal>list</literal>, <literal>remove</literal>,
- <literal>set</literal>, or <literal>unset</literal>. </para>
-
- <para>The <literal>add</literal> action adds a new key. The
- <literal>check</literal> action checks to see if a key exists (the exit
- code of the program is zero if it does, nonzero if it does not). The
- <literal>get</literal> action gets the value of a key, and prints it (and
- nothing else) to stdout. Note: if the value doesn't exist, an error
- message is printed and the program returns a non-zero exit code. If you
- give <literal>-q</literal>, it doesn't print the message but does return
- the non-zero exit code.</para>
-
- <para> The <literal>list</literal> action lists the subkeys and values
- belonging to the given key. With <literal>list</literal>, the
- <literal>-k</literal> option instructs <command>regtool</command> to
- print only KEYs, and the <literal>-l</literal> option to print only
- VALUEs. The <literal>-p</literal> option postfixes a
- <literal>'/'</literal> to each KEY, but leave VALUEs with no postfix. The
- <literal>remove</literal> action removes a key. Note that you may need to
- remove everything in the key before you may remove it, but don't rely on
- this stopping you from accidentally removing too much. </para>
-
- <para>The <literal>get</literal> action prints a value within a key. With
- the <literal>-b</literal> option, data is printed as hex bytes.
- <literal>-n</literal> allows to print the data as a typeless stream of
- bytes. Integer values (REG_DWORD, REG_QWORD) are usually printed as
- decimal values. The <literal>-x</literal> option allows to print the
- numbers as hexadecimal values.</para>
-
- <para>The <literal>set</literal> action sets a value within a key.
- <literal>-b</literal> means it's binary data (REG_BINARY). The binary
- values are specified as hex bytes in the argument list. If the argument
- is <literal>'-'</literal>, binary data is read from stdin instead.
- <literal>-d</literal> or <literal>-i</literal> means the value is a 32
- bit integer value (REG_DWORD). <literal>-D</literal> means the value is a
- 32 bit integer value in Big Endian representation (REG_DWORD_BIG_ENDIAN).
- <literal>-Q</literal> means the value is a 64 bit integer value
- (REG_QWORD). <literal>-s</literal> means the value is a string (REG_SZ).
- <literal>-e</literal> means it's an expanding string (REG_EXPAND_SZ) that
- contains embedded environment variables. <literal>-m</literal> means it's
- a multi-string (REG_MULTI_SZ). If you don't specify one of these,
- <command>regtool</command> tries to guess the type based on the value you
- give. If it looks like a number, it's a DWORD, unless it's value doesn't
- fit into 32 bit, in which case it's a QWORD. If it starts with a percent,
- it's an expanding string. If you give multiple values, it's a
- multi-string. Else, it's a regular string.</para>
-
- <para>The <literal>unset</literal> action removes a value from a
- key.</para>
-
- <para>The <literal>load</literal> action adds a new subkey and loads the
- contents of a registry hive into it. The parent key must be
- HKEY_LOCAL_MACHINE or HKEY_USERS. The <literal>unload</literal> action
- unloads the file and removes the subkey. </para>
-
- <para>The <literal>save</literal> action saves a subkey into a registry
- hive. </para>
-
- <para> By default, the last "\" or "/" is assumed to be the separator
- between the key and the value. You can use the <literal>-K</literal>
- option to provide an alternate key/value separator character. </para>
-
- </sect2>
-
- <sect2 id="setfacl">
- <title>setfacl</title>
-
- <screen>
-Usage: setfacl [-r] {-f ACL_FILE | -s acl_entries} FILE...
- setfacl [-r] {-b|[-d acl_entries] [-m acl_entries]} FILE...
-
-
-Modify file and directory access control lists (ACLs)
-
- -b, --remove-all remove all extended ACL entries
- -d, --delete delete one or more specified ACL entries
- -f, --file set ACL entries for FILE to ACL entries read
- from a ACL_FILE
- -k, --remove-default
- remove all default ACL entries
- -m, --modify modify one or more specified ACL entries
- -r, --replace replace mask entry with maximum permissions
- needed for the file group class
- -s, --substitute substitute specified ACL entries for the
- ACL of FILE
- -h, --help output usage information and exit
- -V, --version output version information and exit
-
-At least one of (-b, -d, -f, -k, -m, -s) must be specified
-</screen>
-
- <para> For each file given as parameter, <command>setfacl</command> will
- either replace its complete ACL (<literal>-s</literal>,
- <literal>-f</literal>), or it will add, modify, or delete ACL entries.
- For more information on Cygwin and Windows ACLs, see see <xref
- linkend="ntsec"/> in the Cygwin User's Guide. </para>
-
- <para> Acl_entries are one or more comma-separated ACL entries from the
- following list:
- <screen>
- u[ser]::perm
- u[ser]:uid:perm
- g[roup]::perm
- g[roup]:gid:perm
- m[ask]::perm
- o[ther]::perm
-</screen>
- Default entries are like the above with the additional default
- identifier. For example:
- <screen>
- d[efault]:u[ser]:uid:perm
-</screen> </para>
-
- <para> <emphasis>perm</emphasis> is either a 3-char permissions string in
- the form "rwx" with the character <literal>'-'</literal> for no
- permission or it is the octal representation of the permissions, a value
- from 0 (equivalent to "---") to 7 ("rwx"). <emphasis>uid</emphasis> is a
- user name or a numerical uid. <emphasis>gid</emphasis> is a group name or
- a numerical gid. </para>
-
- <para> The following options are supported: </para>
-
- <para> <literal>-b</literal> Remove all extended ACL entries. The base
- ACL entries of the owner, group and others are retained.</para>
-
- <para> <literal>-d</literal> Delete one or more specified entries from the
- file's ACL. The owner, group and others entries must not be deleted.
- Acl_entries to be deleted should be specified without permissions, as in
- the following list:
- <screen>
- u[ser]:uid[:]
- g[roup]:gid[:]
- m[ask][:]
- d[efault]:u[ser][:uid]
- d[efault]:g[roup][:gid]
- d[efault]:m[ask][:]
- d[efault]:o[ther][:]
-</screen> </para>
-
- <para> <literal>-f</literal> Take the Acl_entries from ACL_FILE one per
- line. Whitespace characters are ignored, and the character "#" may be
- used to start a comment. The special filename "-" indicates reading from
- stdin. Note that you can use this with <command>getfacl</command> and
- <command>setfacl</command> to copy ACLs from one file to another:
- <screen>
-$ getfacl source_file | setfacl -f - target_file
-</screen> </para>
-
- <para> Required entries are: one user entry for the owner of the file, one
- group entry for the group of the file, and one other entry. </para>
-
- <para> If additional user and group entries are given: a mask entry for the
- file group class of the file, and no duplicate user or group entries with
- the same uid/gid. </para>
-
- <para> If it is a directory: one default user entry for the owner of the
- file, one default group entry for the group of the file, one default mask
- entry for the file group class, and one default other entry. </para>
-
- <para> <literal>-k</literal> Remove all default ACL entries. If no default
- ACL entries exist, no warnings are issued. </para>
-
- <para> <literal>-m</literal> Add or modify one or more specified ACL
- entries. Acl_entries is a comma-separated list of entries from the same
- list as above. </para>
-
- <para> <literal>-r</literal> Causes the permissions specified in the mask
- entry to be ignored and replaced by the maximum permissions needed for
- the file group class. </para>
-
- <para> <literal>-s</literal> Like <literal>-f</literal>, but substitute the
- file's ACL with Acl_entries specified in a comma-separated list on the
- command line. </para>
-
- <para> While the <literal>-d</literal> and <literal>-m</literal> options
- may be used in the same command, the <literal>-f</literal> and
- <literal>-s</literal> options may be used only exclusively. </para>
-
- <para> Directories may contain default ACL entries. Files created in a
- directory that contains default ACL entries will have permissions
- according to the combination of the current umask, the explicit
- permissions requested and the default ACL entries </para>
- </sect2>
-
- <sect2 id="setmetamode">
- <title>setmetamode</title>
-
- <screen>
-Usage: setmetamode [metabit|escprefix]
-
-Get or set keyboard meta mode
-
- Without argument, it shows the current meta key mode.
- metabit|meta|bit The meta key sets the top bit of the character.
- escprefix|esc|prefix The meta key sends an escape prefix.
-
-Other options:
-
- -h, --help This text
- -V, --version Print program version and exit
-</screen>
-
- <para><command>setmetamode</command> can be used to determine and set the
- key code sent by the meta (aka <literal>Alt</literal>) key.</para>
-
- </sect2>
-
- <sect2 id="ssp">
- <title>ssp</title>
-
- <screen>
-Usage: ssp [options] low_pc high_pc command...
-
-Single-step profile COMMAND
-
- -c, --console-trace trace every EIP value to the console. *Lots* slower.
- -d, --disable disable single-stepping by default; use
- OutputDebugString ("ssp on") to enable stepping
- -e, --enable enable single-stepping by default; use
- OutputDebugString ("ssp off") to disable stepping
- -h, --help output usage information and exit
- -l, --dll enable dll profiling. A chart of relative DLL usage
- is produced after the run.
- -s, --sub-threads trace sub-threads too. Dangerous if you have
- race conditions.
- -t, --trace-eip trace every EIP value to a file TRACE.SSP. This
- gets big *fast*.
- -v, --verbose output verbose messages about debug events.
- -V, --version output version information and exit
-
-Example: ssp 0x401000 0x403000 hello.exe
-</screen>
-
- <para> SSP - The Single Step Profiler </para>
-
- <para> Original Author: DJ Delorie </para>
-
- <para> The SSP is a program that uses the Win32 debug API to run a program
- one ASM instruction at a time. It records the location of each
- instruction used, how many times that instruction is used, and all
- function calls. The results are saved in a format that is usable by the
- profiling program <command>gprof</command>, although
- <command>gprof</command> will claim the values are seconds, they really
- are instruction counts. More on that later. </para>
-
- <para> Because the SSP was originally designed to profile the Cygwin DLL,
- it does not automatically select a block of code to report statistics on.
- You must specify the range of memory addresses to keep track of manually,
- but it's not hard to figure out what to specify. Use the "objdump"
- program to determine the bounds of the target's ".text" section. Let's
- say we're profiling cygwin1.dll. Make sure you've built it with debug
- symbols (else <command>gprof</command> won't run) and run objdump like
- this: <screen>
-$ objdump -h cygwin1.dll
-</screen> It will print a report
- like this:
- <screen>
-cygwin1.dll: file format pei-i386
-
-Sections:
-Idx Name Size VMA LMA File off Algn
- 0 .text 0007ea00 61001000 61001000 00000400 2**2
- CONTENTS, ALLOC, LOAD, READONLY, CODE, DATA
- 1 .data 00008000 61080000 61080000 0007ee00 2**2
- CONTENTS, ALLOC, LOAD, DATA
- . . .
-</screen> </para>
-
- <para> The only information we're concerned with are the VMA of the .text
- section and the VMA of the section after it (sections are usually
- contiguous; you can also add the Size to the VMA to get the end address).
- In this case, the VMA is 0x61001000 and the ending address is either
- 0x61080000 (start of .data method) or 0x0x6107fa00 (VMA+Size method). </para>
-
- <para> There are two basic ways to use SSP - either profiling a whole
- program, or selectively profiling parts of the program. </para>
-
- <para> To profile a whole program, just run <command>ssp</command> without
- options. By default, it will step the whole program. Here's a simple
- example, using the numbers above:
- <screen>
-$ ssp 0x61001000 0x61080000 hello.exe
-</screen> This will step
- the whole program. It will take at least 8 minutes on a PII/300 (yes,
- really). When it's done, it will create a file called "gmon.out". You can
- turn this data file into a readable report with <command>gprof</command>:
- <screen>
-$ gprof -b cygwin1.dll
-</screen> The "-b" means 'skip the help
- pages'. You can omit this until you're familiar with the report layout.
- The <command>gprof</command> documentation explains a lot about this
- report, but <command>ssp</command> changes a few things. For example, the
- first part of the report reports the amount of time spent in each
- function, like this:
- <screen>
-Each sample counts as 0.01 seconds.
- % cumulative self self total
- time seconds seconds calls ms/call ms/call name
- 10.02 231.22 72.43 46 1574.57 1574.57 strcspn
- 7.95 288.70 57.48 130 442.15 442.15 strncasematch
-</screen>
- The "seconds" columns are really CPU opcodes, 1/100 second per opcode.
- So, "231.22" above means 23,122 opcodes. The ms/call values are 10x too
- big; 1574.57 means 157.457 opcodes per call. Similar adjustments need to
- be made for the "self" and "children" columns in the second part of the
- report. </para>
-
- <para> OK, so now we've got a huge report that took a long time to
- generate, and we've identified a spot we want to work on optimizing.
- Let's say it's the time() function. We can use SSP to selectively profile
- this function by using OutputDebugString() to control SSP from within the
- program. Here's a sample program:
- <screen>
- #include &lt;windows.h&gt;
- main()
- {
- time_t t;
- OutputDebugString("ssp on");
- time(&amp;t);
- OutputDebugString("ssp off");
- }
-</screen> </para>
-
- <para> Then, add the <literal>-d</literal> option to ssp to default to
- *disabling* profiling. The program will run at full speed until the first
- OutputDebugString, then step until the second. You can then use
- <command>gprof</command> (as usual) to see the performance profile for
- just that portion of the program's execution. </para>
-
- <para> There are many options to ssp. Since step-profiling makes your
- program run about 1,000 times slower than normal, it's best to understand
- all the options so that you can narrow down the parts of your program you
- need to single-step. </para>
-
- <para> <literal>-v</literal> - verbose. This prints messages about threads
- starting and stopping, OutputDebugString calls, DLLs loading, etc. </para>
-
- <para> <literal>-t</literal> and <literal>-c</literal> - tracing. With
- <literal>-t</literal>, *every* step's address is written to the file
- "trace.ssp". This can be used to help debug functions, since it can trace
- multiple threads. Clever use of scripts can match addresses with
- disassembled opcodes if needed. Warning: creates *huge* files, very
- quickly. <literal>-c</literal> prints each address to the console, useful
- for debugging key chunks of assembler. Use <literal>addr2line -C -f -s -e
- foo.exe &lt; trace.ssp &gt; lines.ssp</literal> and then <literal>perl
- cvttrace</literal> to convert to symbolic traces. </para>
-
- <para> <literal>-s</literal> - subthreads. Usually, you only need to trace
- the main thread, but sometimes you need to trace all threads, so this
- enables that. It's also needed when you want to profile a function that
- only a subthread calls. However, using OutputDebugString automatically
- enables profiling on the thread that called it, not the main thread. </para>
-
- <para> <literal>-l</literal> - dll profiling. Generates a pretty table of
- how much time was spent in each dll the program used. No sense optimizing
- a function in your program if most of the time is spent in the DLL. I
- usually use the <literal>-v</literal>, <literal>-s</literal>, and
- <literal>-l</literal> options:
- <screen>
-$ ssp <literal>-v</literal> <literal>-s</literal> <literal>-l</literal> <literal>-d</literal> 0x61001000 0x61080000 hello.exe
-</screen>
- </para>
- </sect2>
-
- <sect2 id="strace">
- <title>strace</title>
-
- <screen>
-Usage: strace.exe [OPTIONS] &lt;command-line&gt;
-Usage: strace.exe [OPTIONS] -p &lt;pid&gt;
-
-Trace system calls and signals
-
- -b, --buffer-size=SIZE set size of output file buffer
- -d, --no-delta don't display the delta-t microsecond timestamp
- -f, --trace-children trace child processes (toggle - default true)
- -h, --help output usage information and exit
- -m, --mask=MASK set message filter mask
- -n, --crack-error-numbers output descriptive text instead of error
- numbers for Windows errors
- -o, --output=FILENAME set output file to FILENAME
- -p, --pid=n attach to executing program with cygwin pid n
- -q, --quiet toggle "quiet" flag. Defaults to on if "-p",
- off otherwise.
- -S, --flush-period=PERIOD flush buffered strace output every PERIOD secs
- -t, --timestamp use an absolute hh:mm:ss timestamp insted of
- the default microsecond timestamp. Implies -d
- -T, --toggle toggle tracing in a process already being
- traced. Requires -p &lt;pid&gt;
- -u, --usecs toggle printing of microseconds timestamp
- -V, --version output version information and exit
- -w, --new-window spawn program under test in a new window
-
- MASK can be any combination of the following mnemonics and/or hex values
- (0x is optional). Combine masks with '+' or ',' like so:
-
- --mask=wm+system,malloc+0x00800
-
- Mnemonic Hex Corresponding Def Description
- =========================================================================
- all 0x000001 (_STRACE_ALL) All strace messages.
- flush 0x000002 (_STRACE_FLUSH) Flush output buffer after each message.
- inherit 0x000004 (_STRACE_INHERIT) Children inherit mask from parent.
- uhoh 0x000008 (_STRACE_UHOH) Unusual or weird phenomenon.
- syscall 0x000010 (_STRACE_SYSCALL) System calls.
- startup 0x000020 (_STRACE_STARTUP) argc/envp printout at startup.
- debug 0x000040 (_STRACE_DEBUG) Info to help debugging.
- paranoid 0x000080 (_STRACE_PARANOID) Paranoid info.
- termios 0x000100 (_STRACE_TERMIOS) Info for debugging termios stuff.
- select 0x000200 (_STRACE_SELECT) Info on ugly select internals.
- wm 0x000400 (_STRACE_WM) Trace Windows msgs (enable _strace_wm).
- sigp 0x000800 (_STRACE_SIGP) Trace signal and process handling.
- minimal 0x001000 (_STRACE_MINIMAL) Very minimal strace output.
- pthread 0x002000 (_STRACE_PTHREAD) Pthread calls.
- exitdump 0x004000 (_STRACE_EXITDUMP) Dump strace cache on exit.
- system 0x008000 (_STRACE_SYSTEM) Serious error; goes to console and log.
- nomutex 0x010000 (_STRACE_NOMUTEX) Don't use mutex for synchronization.
- malloc 0x020000 (_STRACE_MALLOC) Trace malloc calls.
- thread 0x040000 (_STRACE_THREAD) Thread-locking calls.
- special 0x100000 (_STRACE_SPECIAL) Special debugging printfs for
- non-checked-in code
-</screen>
-
- <para>The <command>strace</command> program executes a program, and
- optionally the children of the program, reporting any Cygwin DLL output
- from the program(s) to stdout, or to a file with the
- <literal>-o</literal> option. With the <literal>-w</literal> option, you
- can start an strace session in a new window, for example:
- <screen>
-$ strace -o tracing_output -w sh -c 'while true; do echo "tracing..."; done' &amp;
-</screen>
- This is particularly useful for <command>strace</command> sessions that
- take a long time to complete. </para>
-
- <para> Note that <command>strace</command> is a standalone Windows program
- and so does not rely on the Cygwin DLL itself (you can verify this with
- <command>cygcheck</command>). As a result it does not understand
- symlinks. This program is mainly useful for debugging the Cygwin DLL
- itself.</para>
-
- </sect2>
-
- <sect2 id="tzset">
- <title>tzset</title>
-
- <screen>
-Usage: tzset [OPTION]
-
-Print POSIX-compatible timezone ID from current Windows timezone setting
-
-Options:
- -h, --help output usage information and exit.
- -V, --version output version information and exit.
-
-Use tzset to set your TZ variable. In POSIX-compatible shells like bash,
-dash, mksh, or zsh:
-
- export TZ=$(tzset)
-
-In csh-compatible shells like tcsh:
-
- setenv TZ `tzset`
-</screen>
-
- <para>The <command>tzset</command> tool reads the current timezone from
- Windows and generates a POSIX-compatible timezone information for the TZ
- environment variable from that information. That's all there is to it.
- For the way how to use it, see the above usage information.</para>
-
- </sect2>
-
- <sect2 id="umount">
- <title>umount</title>
-
- <screen>
-Usage: umount.exe [OPTION] [&lt;posixpath&gt;]
-
-Unmount filesystems
-
- -h, --help output usage information and exit
- -U, --remove-user-mounts remove all user mounts
- -V, --version output version information and exit
-</screen>
-
- <para>The <command>umount</command> program removes mounts from the mount
- table in the current session. If you specify a POSIX path that
- corresponds to a current mount point, <command>umount</command> will
- remove it from the current mount table. Note that you can only remove
- user mount points. The <literal>-U</literal> flag may be used to specify
- removing all user mount points from the current user session.</para>
-
- <para>See <xref linkend="mount-table"/> for more information on the mount
- table.</para>
- </sect2>
-
-</sect1>
diff --git a/winsup/doc/windres.xml b/winsup/doc/windres.xml
deleted file mode 100644
index 4b2a13ef7..000000000
--- a/winsup/doc/windres.xml
+++ /dev/null
@@ -1,172 +0,0 @@
-<?xml version="1.0" encoding='UTF-8'?>
-<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-
-<sect1 id="windres"><title>Defining Windows Resources</title>
-
-<para><filename>windres</filename> reads a Windows resource file
-(<filename>*.rc</filename>) and converts it to a res or coff file.
-The syntax and semantics of the input file are the same as for any
-other resource compiler, so please refer to any publication describing
-the Windows resource format for details. Also, the
-<filename>windres</filename> program itself is fully documented in the
-Binutils manual. Here's an example of using it in a project:</para>
-
-<screen>
-<![CDATA[
-myapp.exe : myapp.o myapp.res
- gcc -mwindows myapp.o myapp.res -o $@
-
-myapp.res : myapp.rc resource.h
- windres $< -O coff -o $@
-]]>
-</screen>
-
-
-<para>What follows is a quick-reference to the syntax
-<filename>windres</filename> supports.</para>
-
-<screen>
-
-id ACCELERATORS suboptions
-BEG
-"^C" 12
-"Q" 12
-65 12
-65 12 , VIRTKEY ASCII NOINVERT SHIFT CONTROL ALT
-65 12 , VIRTKEY, ASCII, NOINVERT, SHIFT, CONTROL, ALT
-(12 is an acc_id)
-END
-
-SHIFT, CONTROL, ALT require VIRTKEY
-
-
-id BITMAP memflags "filename"
-memflags defaults to MOVEABLE
-
-
-id CURSOR memflags "filename"
-memflags defaults to MOVEABLE,DISCARDABLE
-
-
-id DIALOG memflags exstyle x,y,width,height styles BEG controls END
-id DIALOGEX memflags exstyle x,y,width,height styles BEG controls END
-id DIALOGEX memflags exstyle x,y,width,height,helpid styles BEG controls END
-
-memflags defaults to MOVEABLE
-exstyle may be EXSTYLE=number
-styles: CAPTION "string"
- CLASS id
- STYLE FOO | NOT FOO | (12)
- EXSTYLE number
- FONT number, "name"
- FONT number, "name",weight,italic
- MENU id
- CHARACTERISTICS number
- LANGUAGE number,number
- VERSIONK number
-controls:
- AUTO3STATE params
- AUTOCHECKBOX params
- AUTORADIOBUTTON params
- BEDIT params
- CHECKBOX params
- COMBOBOX params
- CONTROL ["name",] id, class, style, x,y,w,h [,exstyle] [data]
- CONTROL ["name",] id, class, style, x,y,w,h, exstyle, helpid [data]
- CTEXT params
- DEFPUSHBUTTON params
- EDITTEXT params
- GROUPBOX params
- HEDIT params
- ICON ["name",] id, x,y [data]
- ICON ["name",] id, x,y,w,h, style, exstyle [data]
- ICON ["name",] id, x,y,w,h, style, exstyle, helpid [data]
- IEDIT params
- LISTBOX params
- LTEXT params
- PUSHBOX params
- PUSHBUTTON params
- RADIOBUTTON params
- RTEXT params
- SCROLLBAR params
- STATE3 params
- USERBUTTON "string", id, x,y,w,h, style, exstyle
-params:
- ["name",] id, x, y, w, h, [data]
- ["name",] id, x, y, w, h, style [,exstyle] [data]
- ["name",] id, x, y, w, h, style, exstyle, helpid [data]
-
-[data] is optional BEG (string|number) [,(string|number)] (etc) END
-
-
-id FONT memflags "filename"
-memflags defaults to MOVEABLE|DISCARDABLE
-
-id ICON memflags "filename"
-memflags defaults to MOVEABLE|DISCARDABLE
-
-LANGUAGE num,num
-
-id MENU options BEG items END
-items:
- "string", id, flags
- SEPARATOR
- POPUP "string" flags BEG menuitems END
-flags:
- CHECKED
- GRAYED
- HELP
- INACTIVE
- MENUBARBREAK
- MENUBREAK
-
-id MENUEX suboptions BEG items END
-items:
- MENUITEM "string"
- MENUITEM "string", id
- MENUITEM "string", id, type [,state]
- POPUP "string" BEG items END
- POPUP "string", id BEG items END
- POPUP "string", id, type BEG items END
- POPUP "string", id, type, state [,helpid] BEG items END
-
-id MESSAGETABLE memflags "filename"
-memflags defaults to MOVEABLE
-
-id RCDATA suboptions BEG (string|number) [,(string|number)] (etc) END
-
-STRINGTABLE suboptions BEG strings END
-strings:
- id "string"
- id, "string"
-
-(User data)
-id id suboptions BEG (string|number) [,(string|number)] (etc) END
-
-id VERSIONINFO stuffs BEG verblocks END
-stuffs: FILEVERSION num,num,num,num
- PRODUCTVERSION num,num,num,num
- FILEFLAGSMASK num
- FILEOS num
- FILETYPE num
- FILESUBTYPE num
-verblocks:
- BLOCK "StringFileInfo" BEG BLOCK BEG vervals END END
- BLOCK "VarFileInfo" BEG BLOCK BEG vertrans END END
-vervals: VALUE "foo","bar"
-vertrans: VALUE num,num
-
-
-
-suboptions:
- memflags
- CHARACTERISTICS num
- LANGUAGE num,num
- VERSIONK num
-
-memflags are MOVEABLE/FIXED PURE/IMPURE PRELOAD/LOADONCALL DISCARDABLE
-
-</screen>
-
-</sect1>
diff --git a/winsup/doc/xidepend b/winsup/doc/xidepend
deleted file mode 100755
index d3b233a57..000000000
--- a/winsup/doc/xidepend
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/bin/sh
-if [ "$1" = "-r" ]
-then
- # We're being called recursively by another xidepend instance, so
- # suppress outputs that only happen at the top level.
- shift
- subproc=1
-else
- subproc=0
-fi
-
-for f in "$@"
-do
- if fgrep -q 'xi:include' "$f"
- then
- # This file uses XIncludes. Let's chase its deps recursively.
- base=`basename "$f" .xml`
- if [ $subproc -eq 0 ] ; then echo -n "$base/$base.html $base/$base.pdf:" ; fi
-
- deps=`grep 'xi:include.*href' "$f" | cut -f2 -d\" | tr '\n' ' '`
- echo -n " $deps"
- for d in $deps
- do
- # Call ourselves recursively to continue to collect deps.
- # The -r flag tells our subprocess that it is merely
- # contributing to a dependency line in progress.
- $0 -r $d
- done
-
- # If we're at the top recursion level, we have nothing else to
- # add to this dependency line other than the newline.
- if [ $subproc -eq 0 ] ; then echo ; fi
- fi
-done
diff --git a/winsup/install-sh b/winsup/install-sh
deleted file mode 100755
index 6781b987b..000000000
--- a/winsup/install-sh
+++ /dev/null
@@ -1,520 +0,0 @@
-#!/bin/sh
-# install - install a program, script, or datafile
-
-scriptversion=2009-04-28.21; # UTC
-
-# This originates from X11R5 (mit/util/scripts/install.sh), which was
-# later released in X11R6 (xc/config/util/install.sh) with the
-# following copyright and license.
-#
-# Copyright (C) 1994 X Consortium
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
-# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-# Except as contained in this notice, the name of the X Consortium shall not
-# be used in advertising or otherwise to promote the sale, use or other deal-
-# ings in this Software without prior written authorization from the X Consor-
-# tium.
-#
-#
-# FSF changes to this file are in the public domain.
-#
-# Calling this script install-sh is preferred over install.sh, to prevent
-# `make' implicit rules from creating a file called install from it
-# when there is no Makefile.
-#
-# This script is compatible with the BSD install script, but was written
-# from scratch.
-
-nl='
-'
-IFS=" "" $nl"
-
-# set DOITPROG to echo to test this script
-
-# Don't use :- since 4.3BSD and earlier shells don't like it.
-doit=${DOITPROG-}
-if test -z "$doit"; then
- doit_exec=exec
-else
- doit_exec=$doit
-fi
-
-# Put in absolute file names if you don't have them in your path;
-# or use environment vars.
-
-chgrpprog=${CHGRPPROG-chgrp}
-chmodprog=${CHMODPROG-chmod}
-chownprog=${CHOWNPROG-chown}
-cmpprog=${CMPPROG-cmp}
-cpprog=${CPPROG-cp}
-mkdirprog=${MKDIRPROG-mkdir}
-mvprog=${MVPROG-mv}
-rmprog=${RMPROG-rm}
-stripprog=${STRIPPROG-strip}
-
-posix_glob='?'
-initialize_posix_glob='
- test "$posix_glob" != "?" || {
- if (set -f) 2>/dev/null; then
- posix_glob=
- else
- posix_glob=:
- fi
- }
-'
-
-posix_mkdir=
-
-# Desired mode of installed file.
-mode=0755
-
-chgrpcmd=
-chmodcmd=$chmodprog
-chowncmd=
-mvcmd=$mvprog
-rmcmd="$rmprog -f"
-stripcmd=
-
-src=
-dst=
-dir_arg=
-dst_arg=
-
-copy_on_change=false
-no_target_directory=
-
-usage="\
-Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
- or: $0 [OPTION]... SRCFILES... DIRECTORY
- or: $0 [OPTION]... -t DIRECTORY SRCFILES...
- or: $0 [OPTION]... -d DIRECTORIES...
-
-In the 1st form, copy SRCFILE to DSTFILE.
-In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
-In the 4th, create DIRECTORIES.
-
-Options:
- --help display this help and exit.
- --version display version info and exit.
-
- -c (ignored)
- -C install only if different (preserve the last data modification time)
- -d create directories instead of installing files.
- -g GROUP $chgrpprog installed files to GROUP.
- -m MODE $chmodprog installed files to MODE.
- -o USER $chownprog installed files to USER.
- -s $stripprog installed files.
- -t DIRECTORY install into DIRECTORY.
- -T report an error if DSTFILE is a directory.
-
-Environment variables override the default commands:
- CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
- RMPROG STRIPPROG
-"
-
-while test $# -ne 0; do
- case $1 in
- -c) ;;
-
- -C) copy_on_change=true;;
-
- -d) dir_arg=true;;
-
- -g) chgrpcmd="$chgrpprog $2"
- shift;;
-
- --help) echo "$usage"; exit $?;;
-
- -m) mode=$2
- case $mode in
- *' '* | *' '* | *'
-'* | *'*'* | *'?'* | *'['*)
- echo "$0: invalid mode: $mode" >&2
- exit 1;;
- esac
- shift;;
-
- -o) chowncmd="$chownprog $2"
- shift;;
-
- -s) stripcmd=$stripprog;;
-
- -t) dst_arg=$2
- shift;;
-
- -T) no_target_directory=true;;
-
- --version) echo "$0 $scriptversion"; exit $?;;
-
- --) shift
- break;;
-
- -*) echo "$0: invalid option: $1" >&2
- exit 1;;
-
- *) break;;
- esac
- shift
-done
-
-if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
- # When -d is used, all remaining arguments are directories to create.
- # When -t is used, the destination is already specified.
- # Otherwise, the last argument is the destination. Remove it from $@.
- for arg
- do
- if test -n "$dst_arg"; then
- # $@ is not empty: it contains at least $arg.
- set fnord "$@" "$dst_arg"
- shift # fnord
- fi
- shift # arg
- dst_arg=$arg
- done
-fi
-
-if test $# -eq 0; then
- if test -z "$dir_arg"; then
- echo "$0: no input file specified." >&2
- exit 1
- fi
- # It's OK to call `install-sh -d' without argument.
- # This can happen when creating conditional directories.
- exit 0
-fi
-
-if test -z "$dir_arg"; then
- trap '(exit $?); exit' 1 2 13 15
-
- # Set umask so as not to create temps with too-generous modes.
- # However, 'strip' requires both read and write access to temps.
- case $mode in
- # Optimize common cases.
- *644) cp_umask=133;;
- *755) cp_umask=22;;
-
- *[0-7])
- if test -z "$stripcmd"; then
- u_plus_rw=
- else
- u_plus_rw='% 200'
- fi
- cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
- *)
- if test -z "$stripcmd"; then
- u_plus_rw=
- else
- u_plus_rw=,u+rw
- fi
- cp_umask=$mode$u_plus_rw;;
- esac
-fi
-
-for src
-do
- # Protect names starting with `-'.
- case $src in
- -*) src=./$src;;
- esac
-
- if test -n "$dir_arg"; then
- dst=$src
- dstdir=$dst
- test -d "$dstdir"
- dstdir_status=$?
- else
-
- # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
- # might cause directories to be created, which would be especially bad
- # if $src (and thus $dsttmp) contains '*'.
- if test ! -f "$src" && test ! -d "$src"; then
- echo "$0: $src does not exist." >&2
- exit 1
- fi
-
- if test -z "$dst_arg"; then
- echo "$0: no destination specified." >&2
- exit 1
- fi
-
- dst=$dst_arg
- # Protect names starting with `-'.
- case $dst in
- -*) dst=./$dst;;
- esac
-
- # If destination is a directory, append the input filename; won't work
- # if double slashes aren't ignored.
- if test -d "$dst"; then
- if test -n "$no_target_directory"; then
- echo "$0: $dst_arg: Is a directory" >&2
- exit 1
- fi
- dstdir=$dst
- dst=$dstdir/`basename "$src"`
- dstdir_status=0
- else
- # Prefer dirname, but fall back on a substitute if dirname fails.
- dstdir=`
- (dirname "$dst") 2>/dev/null ||
- expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$dst" : 'X\(//\)[^/]' \| \
- X"$dst" : 'X\(//\)$' \| \
- X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
- echo X"$dst" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'
- `
-
- test -d "$dstdir"
- dstdir_status=$?
- fi
- fi
-
- obsolete_mkdir_used=false
-
- if test $dstdir_status != 0; then
- case $posix_mkdir in
- '')
- # Create intermediate dirs using mode 755 as modified by the umask.
- # This is like FreeBSD 'install' as of 1997-10-28.
- umask=`umask`
- case $stripcmd.$umask in
- # Optimize common cases.
- *[2367][2367]) mkdir_umask=$umask;;
- .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
-
- *[0-7])
- mkdir_umask=`expr $umask + 22 \
- - $umask % 100 % 40 + $umask % 20 \
- - $umask % 10 % 4 + $umask % 2
- `;;
- *) mkdir_umask=$umask,go-w;;
- esac
-
- # With -d, create the new directory with the user-specified mode.
- # Otherwise, rely on $mkdir_umask.
- if test -n "$dir_arg"; then
- mkdir_mode=-m$mode
- else
- mkdir_mode=
- fi
-
- posix_mkdir=false
- case $umask in
- *[123567][0-7][0-7])
- # POSIX mkdir -p sets u+wx bits regardless of umask, which
- # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
- ;;
- *)
- tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
- trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
-
- if (umask $mkdir_umask &&
- exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
- then
- if test -z "$dir_arg" || {
- # Check for POSIX incompatibilities with -m.
- # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
- # other-writeable bit of parent directory when it shouldn't.
- # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
- ls_ld_tmpdir=`ls -ld "$tmpdir"`
- case $ls_ld_tmpdir in
- d????-?r-*) different_mode=700;;
- d????-?--*) different_mode=755;;
- *) false;;
- esac &&
- $mkdirprog -m$different_mode -p -- "$tmpdir" && {
- ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
- test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
- }
- }
- then posix_mkdir=:
- fi
- rmdir "$tmpdir/d" "$tmpdir"
- else
- # Remove any dirs left behind by ancient mkdir implementations.
- rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
- fi
- trap '' 0;;
- esac;;
- esac
-
- if
- $posix_mkdir && (
- umask $mkdir_umask &&
- $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
- )
- then :
- else
-
- # The umask is ridiculous, or mkdir does not conform to POSIX,
- # or it failed possibly due to a race condition. Create the
- # directory the slow way, step by step, checking for races as we go.
-
- case $dstdir in
- /*) prefix='/';;
- -*) prefix='./';;
- *) prefix='';;
- esac
-
- eval "$initialize_posix_glob"
-
- oIFS=$IFS
- IFS=/
- $posix_glob set -f
- set fnord $dstdir
- shift
- $posix_glob set +f
- IFS=$oIFS
-
- prefixes=
-
- for d
- do
- test -z "$d" && continue
-
- prefix=$prefix$d
- if test -d "$prefix"; then
- prefixes=
- else
- if $posix_mkdir; then
- (umask=$mkdir_umask &&
- $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
- # Don't fail if two instances are running concurrently.
- test -d "$prefix" || exit 1
- else
- case $prefix in
- *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
- *) qprefix=$prefix;;
- esac
- prefixes="$prefixes '$qprefix'"
- fi
- fi
- prefix=$prefix/
- done
-
- if test -n "$prefixes"; then
- # Don't fail if two instances are running concurrently.
- (umask $mkdir_umask &&
- eval "\$doit_exec \$mkdirprog $prefixes") ||
- test -d "$dstdir" || exit 1
- obsolete_mkdir_used=true
- fi
- fi
- fi
-
- if test -n "$dir_arg"; then
- { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
- { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
- { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
- test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
- else
-
- # Make a couple of temp file names in the proper directory.
- dsttmp=$dstdir/_inst.$$_
- rmtmp=$dstdir/_rm.$$_
-
- # Trap to clean up those temp files at exit.
- trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
-
- # Copy the file name to the temp name.
- (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
-
- # and set any options; do chmod last to preserve setuid bits.
- #
- # If any of these fail, we abort the whole thing. If we want to
- # ignore errors from any of these, just make sure not to ignore
- # errors from the above "$doit $cpprog $src $dsttmp" command.
- #
- { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
- { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
- { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
- { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
-
- # If -C, don't bother to copy if it wouldn't change the file.
- if $copy_on_change &&
- old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
- new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
-
- eval "$initialize_posix_glob" &&
- $posix_glob set -f &&
- set X $old && old=:$2:$4:$5:$6 &&
- set X $new && new=:$2:$4:$5:$6 &&
- $posix_glob set +f &&
-
- test "$old" = "$new" &&
- $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
- then
- rm -f "$dsttmp"
- else
- # Rename the file to the real destination.
- $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
-
- # The rename failed, perhaps because mv can't rename something else
- # to itself, or perhaps because mv is so ancient that it does not
- # support -f.
- {
- # Now remove or move aside any old file at destination location.
- # We try this two ways since rm can't unlink itself on some
- # systems and the destination file might be busy for other
- # reasons. In this case, the final cleanup might fail but the new
- # file should still install successfully.
- {
- test ! -f "$dst" ||
- $doit $rmcmd -f "$dst" 2>/dev/null ||
- { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
- { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
- } ||
- { echo "$0: cannot unlink or rename $dst" >&2
- (exit 1); exit 1
- }
- } &&
-
- # Now rename the file to the real destination.
- $doit $mvcmd "$dsttmp" "$dst"
- }
- fi || exit 1
-
- trap '' 0
- fi
-done
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
-# time-stamp-end: "; # UTC"
-# End:
diff --git a/winsup/lsaauth/ChangeLog b/winsup/lsaauth/ChangeLog
deleted file mode 100644
index 81e3ab1aa..000000000
--- a/winsup/lsaauth/ChangeLog
+++ /dev/null
@@ -1,170 +0,0 @@
-2014-08-15 Corinna Vinschen <corinna@vinschen.de>
-
- * configure.ac: Convert to new AC_INIT style.
- * configure: Regenerate.
-
-2013-12-03 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * configure.ac: Back out stupid change.
- * configure: Regenerate.
-
-2013-12-03 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * configure.ac: Don't require 64-bit compiler for 32-bit builds.
- * configure: Regenerate.
-
-2013-07-29 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (cyglsa.dll): Explicitely specify DLL entry point to
- harden against gcc function and block reordering optimizations.
- (cyglsa64.dll): Ditto.
-
-2013-04-23 Corinna Vinschen <corinna@vinschen.de>
-
- * Merge in cygwin-64bit-branch. See ChangeLog.64bit for details.
-
-2012-11-26 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * configure.ac: Rename from configure.in.
- * configure.in: Delete.
- * configure: Regenerate.
-
-2012-11-23 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * Makefile.in: Use /bin/mkdir to make directories.
-
-2012-10-24 Corinna Vinschen <corinna@vinschen.de>
-
- * configure.in: Add AC_NO_EXECUTABLES.
- * configure: Regenerate.
-
-2012-10-24 Kai Tietz <ktietz70@googlemail.com>
- Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * configure.in: Check for MINGW32_CC and MINGW64_CC.
- * configure: Regenerate.
- * Makefile.in: Use MINGW32_CC and MINGW64_CC to build 32-bit and
- 64-bit DLLs. Remove references to mingw and w32api directories.
- * cyglsa64.dll: Remove from version control.
- * make-64bit-version-with-mingw-w64.sh: Remove.
-
-2012-05-29 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (LIBS): Re-add advapi32.dll. Explain why.
- * make-64bit-version-with-mingw-w64.sh (LIBS): Ditto.
- * cyglsa.c: Drop NTDLL function declarations. Use equivalent advapi32
- functions again, throughout.
- * cyglsa64.dll: Regenerate.
-
-2011-05-10 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in: Don't override CC.
- * cyglsa.c: Don't include wchar.h. Declare wcscpy and wcslen instead.
- * cyglsa64.dll: Rebuild.
-
-2011-03-31 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (LIBS): Remove advapi32.dll.
- (clean): Remove cyglsa.def.
- * cyglsa.c: Drop definitions required for VC++. Don't include ntddk.h.
- Declare functions from NTDLL here. Explain why. Use NTDLL functions
- in place of ADVAPI32 functions.
- * cyglsa64.def: New file.
- * cyglsa64.dll: Regenerate.
- * make-64bit-version-with-mingw-w64.sh (LIBS): Remove advapi32.dll.
- Reference cyglsa64.def instead of mslsa.def.
- * make-64bit-version-with-visual-c.bat: Remove.
- * mslsa.def: Remove.
-
-2011-03-31 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * cyglsa.c: Fix compilation with MinGW-w64 toolchains.
- * make-64bit-version-with-mingw-w64.sh: New file.
- * cyglsa64.dll: Regenerate with MinGW-w64-gc.
-
-2010-12-10 Illia Bobyr <Illia.Bobyr@ronin-capital.com>
-
- * cyglsa-config: Unset GREP_OPTIONS when calling grep.
-
-2010-01-29 Corinna Vinschen <corinna@vinschen.de>
-
- * cyglsa.c: Include lmcons.h instead of lm.h to make newer WinDDK happy.
- (LsaApLogonUserEx): Use CYG_LSA_MAGIC as checksum start value to
- decouple from Cygwin release.
- * make-64bit-version-with-visual-c.bat: Avoid compiler warning.
- * cyglsa64.dll: New build.
-
-2009-02-23 Sjors Gielen <mailinglist@dazjorz.com>
-
- * Makefile.in: Add DESTDIR functionality.
-
-2008-10-12 Christopher Faylor <me+cygwin@cgf.cx>
-
- * Makefile.in: Rearrange to avoid -mno-cygwin.
- * configure.in: Use mingw front-end from utils directory as compiler
- front-end.
- * configure: Regenerate.
- * cyglsa.c (cyglsa_printf): Rename from 'printf' to avoid a compiler
- error.
- (print_sid, print_groups, print_privs, print_dacl, print_tokinf,
- LsaApLogonUserEx): Ditto.
-
-2008-08-13 Corinna Vinschen <corinna@vinschen.de>
-
- * cyglsa-config: Copy the DLL instead of moving.
-
-2008-07-16 Corinna Vinschen <corinna@vinschen.de>
-
- * cyglsa-config: Always create a /bin/cyglsa directory and copy the
- LSA DLL there. Register this copy in the registry.
-
-2008-07-15 Corinna Vinschen <corinna@vinschen.de>
-
- * cyglsa.c: Include ntddk.h again, but only if __MINGW32__ is defined.
- * cyglsa64.dll: Regenerate.
- * make-64bit-version-with-visual-c.bat: Fix comment.
-
-2008-07-13 Corinna Vinschen <corinna@vinschen.de>
-
- * cyglsa.c: Don't include ntddk.h.
- (RtlInitEmptyUnicodeString): Use Visual-C compatible "__inline" instead
- of "inline".
- (uni_alloc): Change second argument to USHORT.
- (printf): Move definition of ap to make Visual-C++ happy.
- (LsaApLogonUserEx): Compute size of datastructure returned to
- LSA on 64 bit systems correctly to avoid heap corruption.
- * cyglsa64.dll: Regenerate.
- * make-64bit-version-with-visual-c.bat: Accommodate newer Microsoft
- toolchains. Add more comment.
- * mslsa.def: Export LsaApLogonUserEx instead of LsaApLogonUser.
-
-2008-07-11 Corinna Vinschen <corinna@vinschen.de>
-
- * cyglsa.c (LsaApLogonUserEx): Accommodate the fact that authinf->domain
- and authinf->username are now of type WCHAR. Change sam_username and
- sam_u size to be deifned in terms of MAX_DOMAIN_NAME_LEN instead of
- INTERNET_MAX_HOST_NAME_LENGTH.
-
-2008-07-10 Corinna Vinschen <corinna@vinschen.de>
-
- * cyglsa.c: Revamp debugging output.
- (LsaApInitializePackage): Open debugging output file here.
- (LsaApLogonUserEx): Replace LsaApLogonUser. Add debugging output.
- Create machine name for accounting. Add (disabled) code to fetch
- a token from GetAuthDataForUser/ConvertAuthDataToToken.
- * cyglsa.din: Relace LsaApLogonUser with LsaApLogonUserEx.
-
-2006-11-27 Corinna Vinschen <corinna@vinschen.de>
-
- Initial release of the Cygwin LSA authentication package.
- * ChangeLog: New file.
- * Makefile.in: Ditto.
- * aclocal.m4: Ditto.
- * configure.in: Ditto.
- * configure: Ditto. Generated from configure.in.
- * cyglsa-config: Ditto.
- * cyglsa.c: Ditto.
- * cyglsa.din: Ditto.
- * cyglsa64.dll: Ditto.
- * make-64bit-version-with-visual-c.bat: Ditto.
- * mslsa.def: Ditto.
diff --git a/winsup/lsaauth/ChangeLog.64bit b/winsup/lsaauth/ChangeLog.64bit
deleted file mode 100644
index 32ef85710..000000000
--- a/winsup/lsaauth/ChangeLog.64bit
+++ /dev/null
@@ -1,13 +0,0 @@
-2013-02-22 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * configure.ac: Skip check for i686-w64-mingw32-g++ on x86_64.
- * configure: Regenerate.
-
-2013-02-21 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (target_cpu): Define. Check for target_cpu rather than
- target_alias for conditional compilation issues.
-
-2013-02-15 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * Makefile.in: Do not build or install 32bit DLL for 64bit target.
diff --git a/winsup/lsaauth/Makefile.in b/winsup/lsaauth/Makefile.in
deleted file mode 100644
index 53e91c406..000000000
--- a/winsup/lsaauth/Makefile.in
+++ /dev/null
@@ -1,95 +0,0 @@
-# Copyright (c) 2006, 2008, 2009, 2011, 2012, 2013 Red Hat, 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.
-#
-# A copy of the GNU General Public License can be found at
-# http://www.gnu.org/
-#
-# Written by Corinna Vinschen <vinschen@redhat.de>
-#
-# Makefile for Cygwin subauthentication DLL.
-
-SHELL := @SHELL@
-
-srcdir := @srcdir@
-VPATH := @srcdir@
-prefix := @prefix@
-exec_prefix := @exec_prefix@
-
-bindir := @bindir@
-etcdir := $(exec_prefix)/etc
-
-INSTALL := @INSTALL@
-INSTALL_PROGRAM := @INSTALL_PROGRAM@
-INSTALL_DATA := @INSTALL_DATA@
-
-CC := @CC@
-CC_FOR_TARGET := $(CC)
-
-MINGW32_CC := @MINGW32_CC@
-MINGW64_CC := @MINGW64_CC@
-
-CFLAGS := @CFLAGS@
-
-include $(srcdir)/../Makefile.common
-
-target_cpu:=@target_cpu@
-
-WIN32_INCLUDES := -I. -I$(srcdir)
-WIN32_CFLAGS := $(CFLAGS) $(WIN32_INCLUDES)
-WIN32_LDFLAGS := $(CFLAGS) -nostdlib -Wl,-shared
-
-# Never again try to remove advapi32. It does not matter if the DLL calls
-# advapi32 functions or the equivalent ntdll functions.
-# But if the LSA authentication DLL is not linked against advapi32, it's
-# not recognized by LSA.
-LIBS := -ladvapi32 -lkernel32 -lntdll
-
-ifneq ($(target_cpu),x86_64)
-DLL32 := cyglsa.dll
-DEF32 := cyglsa.def
-OBJ32 := cyglsa.o
-endif
-
-DLL64 := cyglsa64.dll
-DEF64 := cyglsa64.def
-OBJ64 := cyglsa64.o
-
-.SUFFIXES:
-.NOEXPORT:
-
-all: Makefile $(DLL32) $(DLL64)
-
-$(DEF32): cyglsa.din config.status
- $(SHELL) config.status
-
-$(DLL32): $(OBJ32) $(DEF32)
- $(MINGW32_CC) -s $(WIN32_LDFLAGS) -e _DllMain@12 -o $@ $^ $(LIBS)
-
-$(OBJ32): cyglsa.c
- $(MINGW32_CC) $(WIN32_CFLAGS) -c -o $@ $<
-
-$(DLL64): $(OBJ64) $(DEF64)
- $(MINGW64_CC) -s $(WIN32_LDFLAGS) -e DllMain -o $@ $^ $(LIBS)
-
-$(OBJ64): cyglsa.c
- $(MINGW64_CC) $(WIN32_CFLAGS) -c -o $@ $<
-
-.PHONY: all install clean realclean
-
-realclean: clean
- rm -f Makefile config.cache
-
-clean:
- rm -f *.o *.dll cyglsa.def
-
-install: all
- /bin/mkdir -p $(DESTDIR)$(bindir)
-ifneq ($(target_cpu),x86_64)
- $(INSTALL_PROGRAM) $(DLL32) $(DESTDIR)$(bindir)/$(DLL32)
-endif
- $(INSTALL_PROGRAM) $(DLL64) $(DESTDIR)$(bindir)/$(DLL64)
- $(INSTALL_PROGRAM) $(srcdir)/cyglsa-config $(DESTDIR)$(bindir)/cyglsa-config
diff --git a/winsup/lsaauth/aclocal.m4 b/winsup/lsaauth/aclocal.m4
deleted file mode 100644
index ecef4244c..000000000
--- a/winsup/lsaauth/aclocal.m4
+++ /dev/null
@@ -1,875 +0,0 @@
-dnl aclocal.m4 generated automatically by aclocal 1.4-p6
-
-dnl Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl This program is distributed in the hope that it will be useful,
-dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-dnl PARTICULAR PURPOSE.
-
-# lib-prefix.m4 serial 4 (gettext-0.14.2)
-dnl Copyright (C) 2001-2005 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Bruno Haible.
-
-dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and
-dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't
-dnl require excessive bracketing.
-ifdef([AC_HELP_STRING],
-[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])],
-[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])])
-
-dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed
-dnl to access previously installed libraries. The basic assumption is that
-dnl a user will want packages to use other packages he previously installed
-dnl with the same --prefix option.
-dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate
-dnl libraries, but is otherwise very convenient.
-AC_DEFUN([AC_LIB_PREFIX],
-[
- AC_BEFORE([$0], [AC_LIB_LINKFLAGS])
- AC_REQUIRE([AC_PROG_CC])
- AC_REQUIRE([AC_CANONICAL_HOST])
- AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
- dnl By default, look in $includedir and $libdir.
- use_additional=yes
- AC_LIB_WITH_FINAL_PREFIX([
- eval additional_includedir=\"$includedir\"
- eval additional_libdir=\"$libdir\"
- ])
- AC_LIB_ARG_WITH([lib-prefix],
-[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib
- --without-lib-prefix don't search for libraries in includedir and libdir],
-[
- if test "X$withval" = "Xno"; then
- use_additional=no
- else
- if test "X$withval" = "X"; then
- AC_LIB_WITH_FINAL_PREFIX([
- eval additional_includedir=\"$includedir\"
- eval additional_libdir=\"$libdir\"
- ])
- else
- additional_includedir="$withval/include"
- additional_libdir="$withval/lib"
- fi
- fi
-])
- if test $use_additional = yes; then
- dnl Potentially add $additional_includedir to $CPPFLAGS.
- dnl But don't add it
- dnl 1. if it's the standard /usr/include,
- dnl 2. if it's already present in $CPPFLAGS,
- dnl 3. if it's /usr/local/include and we are using GCC on Linux,
- dnl 4. if it doesn't exist as a directory.
- if test "X$additional_includedir" != "X/usr/include"; then
- haveit=
- for x in $CPPFLAGS; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- if test "X$x" = "X-I$additional_includedir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- if test "X$additional_includedir" = "X/usr/local/include"; then
- if test -n "$GCC"; then
- case $host_os in
- linux* | gnu* | k*bsd*-gnu) haveit=yes;;
- esac
- fi
- fi
- if test -z "$haveit"; then
- if test -d "$additional_includedir"; then
- dnl Really add $additional_includedir to $CPPFLAGS.
- CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir"
- fi
- fi
- fi
- fi
- dnl Potentially add $additional_libdir to $LDFLAGS.
- dnl But don't add it
- dnl 1. if it's the standard /usr/lib,
- dnl 2. if it's already present in $LDFLAGS,
- dnl 3. if it's /usr/local/lib and we are using GCC on Linux,
- dnl 4. if it doesn't exist as a directory.
- if test "X$additional_libdir" != "X/usr/lib"; then
- haveit=
- for x in $LDFLAGS; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- if test "X$x" = "X-L$additional_libdir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- if test "X$additional_libdir" = "X/usr/local/lib"; then
- if test -n "$GCC"; then
- case $host_os in
- linux*) haveit=yes;;
- esac
- fi
- fi
- if test -z "$haveit"; then
- if test -d "$additional_libdir"; then
- dnl Really add $additional_libdir to $LDFLAGS.
- LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir"
- fi
- fi
- fi
- fi
- fi
-])
-
-dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix,
-dnl acl_final_exec_prefix, containing the values to which $prefix and
-dnl $exec_prefix will expand at the end of the configure script.
-AC_DEFUN([AC_LIB_PREPARE_PREFIX],
-[
- dnl Unfortunately, prefix and exec_prefix get only finally determined
- dnl at the end of configure.
- if test "X$prefix" = "XNONE"; then
- acl_final_prefix="$ac_default_prefix"
- else
- acl_final_prefix="$prefix"
- fi
- if test "X$exec_prefix" = "XNONE"; then
- acl_final_exec_prefix='${prefix}'
- else
- acl_final_exec_prefix="$exec_prefix"
- fi
- acl_save_prefix="$prefix"
- prefix="$acl_final_prefix"
- eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
- prefix="$acl_save_prefix"
-])
-
-dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the
-dnl variables prefix and exec_prefix bound to the values they will have
-dnl at the end of the configure script.
-AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX],
-[
- acl_save_prefix="$prefix"
- prefix="$acl_final_prefix"
- acl_save_exec_prefix="$exec_prefix"
- exec_prefix="$acl_final_exec_prefix"
- $1
- exec_prefix="$acl_save_exec_prefix"
- prefix="$acl_save_prefix"
-])
-
-# lib-link.m4 serial 6 (gettext-0.14.3)
-dnl Copyright (C) 2001-2005 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Bruno Haible.
-
-AC_PREREQ(2.50)
-
-dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and
-dnl the libraries corresponding to explicit and implicit dependencies.
-dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and
-dnl augments the CPPFLAGS variable.
-AC_DEFUN([AC_LIB_LINKFLAGS],
-[
- AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
- AC_REQUIRE([AC_LIB_RPATH])
- define([Name],[translit([$1],[./-], [___])])
- define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
- [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
- AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [
- AC_LIB_LINKFLAGS_BODY([$1], [$2])
- ac_cv_lib[]Name[]_libs="$LIB[]NAME"
- ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME"
- ac_cv_lib[]Name[]_cppflags="$INC[]NAME"
- ])
- LIB[]NAME="$ac_cv_lib[]Name[]_libs"
- LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs"
- INC[]NAME="$ac_cv_lib[]Name[]_cppflags"
- AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
- AC_SUBST([LIB]NAME)
- AC_SUBST([LTLIB]NAME)
- dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the
- dnl results of this search when this library appears as a dependency.
- HAVE_LIB[]NAME=yes
- undefine([Name])
- undefine([NAME])
-])
-
-dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode)
-dnl searches for libname and the libraries corresponding to explicit and
-dnl implicit dependencies, together with the specified include files and
-dnl the ability to compile and link the specified testcode. If found, it
-dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and
-dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and
-dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs
-dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty.
-AC_DEFUN([AC_LIB_HAVE_LINKFLAGS],
-[
- AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
- AC_REQUIRE([AC_LIB_RPATH])
- define([Name],[translit([$1],[./-], [___])])
- define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
- [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
-
- dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME
- dnl accordingly.
- AC_LIB_LINKFLAGS_BODY([$1], [$2])
-
- dnl Add $INC[]NAME to CPPFLAGS before performing the following checks,
- dnl because if the user has installed lib[]Name and not disabled its use
- dnl via --without-lib[]Name-prefix, he wants to use it.
- ac_save_CPPFLAGS="$CPPFLAGS"
- AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
-
- AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [
- ac_save_LIBS="$LIBS"
- LIBS="$LIBS $LIB[]NAME"
- AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no])
- LIBS="$ac_save_LIBS"
- ])
- if test "$ac_cv_lib[]Name" = yes; then
- HAVE_LIB[]NAME=yes
- AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.])
- AC_MSG_CHECKING([how to link with lib[]$1])
- AC_MSG_RESULT([$LIB[]NAME])
- else
- HAVE_LIB[]NAME=no
- dnl If $LIB[]NAME didn't lead to a usable library, we don't need
- dnl $INC[]NAME either.
- CPPFLAGS="$ac_save_CPPFLAGS"
- LIB[]NAME=
- LTLIB[]NAME=
- fi
- AC_SUBST([HAVE_LIB]NAME)
- AC_SUBST([LIB]NAME)
- AC_SUBST([LTLIB]NAME)
- undefine([Name])
- undefine([NAME])
-])
-
-dnl Determine the platform dependent parameters needed to use rpath:
-dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator,
-dnl hardcode_direct, hardcode_minus_L.
-AC_DEFUN([AC_LIB_RPATH],
-[
- dnl Tell automake >= 1.10 to complain if config.rpath is missing.
- m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])])
- AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS
- AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld
- AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host
- AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir
- AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [
- CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
- ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
- . ./conftest.sh
- rm -f ./conftest.sh
- acl_cv_rpath=done
- ])
- wl="$acl_cv_wl"
- libext="$acl_cv_libext"
- shlibext="$acl_cv_shlibext"
- hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
- hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
- hardcode_direct="$acl_cv_hardcode_direct"
- hardcode_minus_L="$acl_cv_hardcode_minus_L"
- dnl Determine whether the user wants rpath handling at all.
- AC_ARG_ENABLE(rpath,
- [ --disable-rpath do not hardcode runtime library paths],
- :, enable_rpath=yes)
-])
-
-dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and
-dnl the libraries corresponding to explicit and implicit dependencies.
-dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables.
-AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
-[
- define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
- [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
- dnl By default, look in $includedir and $libdir.
- use_additional=yes
- AC_LIB_WITH_FINAL_PREFIX([
- eval additional_includedir=\"$includedir\"
- eval additional_libdir=\"$libdir\"
- ])
- AC_LIB_ARG_WITH([lib$1-prefix],
-[ --with-lib$1-prefix[=DIR] search for lib$1 in DIR/include and DIR/lib
- --without-lib$1-prefix don't search for lib$1 in includedir and libdir],
-[
- if test "X$withval" = "Xno"; then
- use_additional=no
- else
- if test "X$withval" = "X"; then
- AC_LIB_WITH_FINAL_PREFIX([
- eval additional_includedir=\"$includedir\"
- eval additional_libdir=\"$libdir\"
- ])
- else
- additional_includedir="$withval/include"
- additional_libdir="$withval/lib"
- fi
- fi
-])
- dnl Search the library and its dependencies in $additional_libdir and
- dnl $LDFLAGS. Using breadth-first-seach.
- LIB[]NAME=
- LTLIB[]NAME=
- INC[]NAME=
- rpathdirs=
- ltrpathdirs=
- names_already_handled=
- names_next_round='$1 $2'
- while test -n "$names_next_round"; do
- names_this_round="$names_next_round"
- names_next_round=
- for name in $names_this_round; do
- already_handled=
- for n in $names_already_handled; do
- if test "$n" = "$name"; then
- already_handled=yes
- break
- fi
- done
- if test -z "$already_handled"; then
- names_already_handled="$names_already_handled $name"
- dnl See if it was already located by an earlier AC_LIB_LINKFLAGS
- dnl or AC_LIB_HAVE_LINKFLAGS call.
- uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
- eval value=\"\$HAVE_LIB$uppername\"
- if test -n "$value"; then
- if test "$value" = yes; then
- eval value=\"\$LIB$uppername\"
- test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value"
- eval value=\"\$LTLIB$uppername\"
- test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value"
- else
- dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined
- dnl that this library doesn't exist. So just drop it.
- :
- fi
- else
- dnl Search the library lib$name in $additional_libdir and $LDFLAGS
- dnl and the already constructed $LIBNAME/$LTLIBNAME.
- found_dir=
- found_la=
- found_so=
- found_a=
- if test $use_additional = yes; then
- if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then
- found_dir="$additional_libdir"
- found_so="$additional_libdir/lib$name.$shlibext"
- if test -f "$additional_libdir/lib$name.la"; then
- found_la="$additional_libdir/lib$name.la"
- fi
- else
- if test -f "$additional_libdir/lib$name.$libext"; then
- found_dir="$additional_libdir"
- found_a="$additional_libdir/lib$name.$libext"
- if test -f "$additional_libdir/lib$name.la"; then
- found_la="$additional_libdir/lib$name.la"
- fi
- fi
- fi
- fi
- if test "X$found_dir" = "X"; then
- for x in $LDFLAGS $LTLIB[]NAME; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- case "$x" in
- -L*)
- dir=`echo "X$x" | sed -e 's/^X-L//'`
- if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then
- found_dir="$dir"
- found_so="$dir/lib$name.$shlibext"
- if test -f "$dir/lib$name.la"; then
- found_la="$dir/lib$name.la"
- fi
- else
- if test -f "$dir/lib$name.$libext"; then
- found_dir="$dir"
- found_a="$dir/lib$name.$libext"
- if test -f "$dir/lib$name.la"; then
- found_la="$dir/lib$name.la"
- fi
- fi
- fi
- ;;
- esac
- if test "X$found_dir" != "X"; then
- break
- fi
- done
- fi
- if test "X$found_dir" != "X"; then
- dnl Found the library.
- LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name"
- if test "X$found_so" != "X"; then
- dnl Linking with a shared library. We attempt to hardcode its
- dnl directory into the executable's runpath, unless it's the
- dnl standard /usr/lib.
- if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then
- dnl No hardcoding is needed.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
- else
- dnl Use an explicit option to hardcode DIR into the resulting
- dnl binary.
- dnl Potentially add DIR to ltrpathdirs.
- dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
- haveit=
- for x in $ltrpathdirs; do
- if test "X$x" = "X$found_dir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- ltrpathdirs="$ltrpathdirs $found_dir"
- fi
- dnl The hardcoding into $LIBNAME is system dependent.
- if test "$hardcode_direct" = yes; then
- dnl Using DIR/libNAME.so during linking hardcodes DIR into the
- dnl resulting binary.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
- else
- if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
- dnl Use an explicit option to hardcode DIR into the resulting
- dnl binary.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
- dnl Potentially add DIR to rpathdirs.
- dnl The rpathdirs will be appended to $LIBNAME at the end.
- haveit=
- for x in $rpathdirs; do
- if test "X$x" = "X$found_dir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- rpathdirs="$rpathdirs $found_dir"
- fi
- else
- dnl Rely on "-L$found_dir".
- dnl But don't add it if it's already contained in the LDFLAGS
- dnl or the already constructed $LIBNAME
- haveit=
- for x in $LDFLAGS $LIB[]NAME; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- if test "X$x" = "X-L$found_dir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir"
- fi
- if test "$hardcode_minus_L" != no; then
- dnl FIXME: Not sure whether we should use
- dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
- dnl here.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
- else
- dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH
- dnl here, because this doesn't fit in flags passed to the
- dnl compiler. So give up. No hardcoding. This affects only
- dnl very old systems.
- dnl FIXME: Not sure whether we should use
- dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
- dnl here.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
- fi
- fi
- fi
- fi
- else
- if test "X$found_a" != "X"; then
- dnl Linking with a static library.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a"
- else
- dnl We shouldn't come here, but anyway it's good to have a
- dnl fallback.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name"
- fi
- fi
- dnl Assume the include files are nearby.
- additional_includedir=
- case "$found_dir" in
- */lib | */lib/)
- basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'`
- additional_includedir="$basedir/include"
- ;;
- esac
- if test "X$additional_includedir" != "X"; then
- dnl Potentially add $additional_includedir to $INCNAME.
- dnl But don't add it
- dnl 1. if it's the standard /usr/include,
- dnl 2. if it's /usr/local/include and we are using GCC on Linux,
- dnl 3. if it's already present in $CPPFLAGS or the already
- dnl constructed $INCNAME,
- dnl 4. if it doesn't exist as a directory.
- if test "X$additional_includedir" != "X/usr/include"; then
- haveit=
- if test "X$additional_includedir" = "X/usr/local/include"; then
- if test -n "$GCC"; then
- case $host_os in
- linux* | gnu* | k*bsd*-gnu) haveit=yes;;
- esac
- fi
- fi
- if test -z "$haveit"; then
- for x in $CPPFLAGS $INC[]NAME; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- if test "X$x" = "X-I$additional_includedir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- if test -d "$additional_includedir"; then
- dnl Really add $additional_includedir to $INCNAME.
- INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir"
- fi
- fi
- fi
- fi
- fi
- dnl Look for dependencies.
- if test -n "$found_la"; then
- dnl Read the .la file. It defines the variables
- dnl dlname, library_names, old_library, dependency_libs, current,
- dnl age, revision, installed, dlopen, dlpreopen, libdir.
- save_libdir="$libdir"
- case "$found_la" in
- */* | *\\*) . "$found_la" ;;
- *) . "./$found_la" ;;
- esac
- libdir="$save_libdir"
- dnl We use only dependency_libs.
- for dep in $dependency_libs; do
- case "$dep" in
- -L*)
- additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
- dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME.
- dnl But don't add it
- dnl 1. if it's the standard /usr/lib,
- dnl 2. if it's /usr/local/lib and we are using GCC on Linux,
- dnl 3. if it's already present in $LDFLAGS or the already
- dnl constructed $LIBNAME,
- dnl 4. if it doesn't exist as a directory.
- if test "X$additional_libdir" != "X/usr/lib"; then
- haveit=
- if test "X$additional_libdir" = "X/usr/local/lib"; then
- if test -n "$GCC"; then
- case $host_os in
- linux* | gnu* | k*bsd*-gnu) haveit=yes;;
- esac
- fi
- fi
- if test -z "$haveit"; then
- haveit=
- for x in $LDFLAGS $LIB[]NAME; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- if test "X$x" = "X-L$additional_libdir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- if test -d "$additional_libdir"; then
- dnl Really add $additional_libdir to $LIBNAME.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir"
- fi
- fi
- haveit=
- for x in $LDFLAGS $LTLIB[]NAME; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- if test "X$x" = "X-L$additional_libdir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- if test -d "$additional_libdir"; then
- dnl Really add $additional_libdir to $LTLIBNAME.
- LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir"
- fi
- fi
- fi
- fi
- ;;
- -R*)
- dir=`echo "X$dep" | sed -e 's/^X-R//'`
- if test "$enable_rpath" != no; then
- dnl Potentially add DIR to rpathdirs.
- dnl The rpathdirs will be appended to $LIBNAME at the end.
- haveit=
- for x in $rpathdirs; do
- if test "X$x" = "X$dir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- rpathdirs="$rpathdirs $dir"
- fi
- dnl Potentially add DIR to ltrpathdirs.
- dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
- haveit=
- for x in $ltrpathdirs; do
- if test "X$x" = "X$dir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- ltrpathdirs="$ltrpathdirs $dir"
- fi
- fi
- ;;
- -l*)
- dnl Handle this in the next round.
- names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
- ;;
- *.la)
- dnl Handle this in the next round. Throw away the .la's
- dnl directory; it is already contained in a preceding -L
- dnl option.
- names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
- ;;
- *)
- dnl Most likely an immediate library name.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep"
- LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep"
- ;;
- esac
- done
- fi
- else
- dnl Didn't find the library; assume it is in the system directories
- dnl known to the linker and runtime loader. (All the system
- dnl directories known to the linker should also be known to the
- dnl runtime loader, otherwise the system is severely misconfigured.)
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
- LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name"
- fi
- fi
- fi
- done
- done
- if test "X$rpathdirs" != "X"; then
- if test -n "$hardcode_libdir_separator"; then
- dnl Weird platform: only the last -rpath option counts, the user must
- dnl pass all path elements in one option. We can arrange that for a
- dnl single library, but not when more than one $LIBNAMEs are used.
- alldirs=
- for found_dir in $rpathdirs; do
- alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
- done
- dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl.
- acl_save_libdir="$libdir"
- libdir="$alldirs"
- eval flag=\"$hardcode_libdir_flag_spec\"
- libdir="$acl_save_libdir"
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
- else
- dnl The -rpath options are cumulative.
- for found_dir in $rpathdirs; do
- acl_save_libdir="$libdir"
- libdir="$found_dir"
- eval flag=\"$hardcode_libdir_flag_spec\"
- libdir="$acl_save_libdir"
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
- done
- fi
- fi
- if test "X$ltrpathdirs" != "X"; then
- dnl When using libtool, the option that works for both libraries and
- dnl executables is -R. The -R options are cumulative.
- for found_dir in $ltrpathdirs; do
- LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir"
- done
- fi
-])
-
-dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR,
-dnl unless already present in VAR.
-dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes
-dnl contains two or three consecutive elements that belong together.
-AC_DEFUN([AC_LIB_APPENDTOVAR],
-[
- for element in [$2]; do
- haveit=
- for x in $[$1]; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- if test "X$x" = "X$element"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- [$1]="${[$1]}${[$1]:+ }$element"
- fi
- done
-])
-
-# lib-ld.m4 serial 3 (gettext-0.13)
-dnl Copyright (C) 1996-2003 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl Subroutines of libtool.m4,
-dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision
-dnl with libtool.m4.
-
-dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no.
-AC_DEFUN([AC_LIB_PROG_LD_GNU],
-[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld,
-[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
-case `$LD -v 2>&1 </dev/null` in
-*GNU* | *'with BFD'*)
- acl_cv_prog_gnu_ld=yes ;;
-*)
- acl_cv_prog_gnu_ld=no ;;
-esac])
-with_gnu_ld=$acl_cv_prog_gnu_ld
-])
-
-dnl From libtool-1.4. Sets the variable LD.
-AC_DEFUN([AC_LIB_PROG_LD],
-[AC_ARG_WITH(gnu-ld,
-[ --with-gnu-ld assume the C compiler uses GNU ld [default=no]],
-test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
-AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([AC_CANONICAL_HOST])dnl
-# Prepare PATH_SEPARATOR.
-# 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
-ac_prog=ld
-if test "$GCC" = yes; then
- # Check if gcc -print-prog-name=ld gives a path.
- AC_MSG_CHECKING([for ld used by GCC])
- case $host in
- *-*-mingw*)
- # gcc leaves a trailing carriage return which upsets mingw
- ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
- *)
- ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
- esac
- case $ac_prog in
- # Accept absolute paths.
- [[\\/]* | [A-Za-z]:[\\/]*)]
- [re_direlt='/[^/][^/]*/\.\./']
- # Canonicalize the path of ld
- ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
- while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
- ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
- done
- test -z "$LD" && LD="$ac_prog"
- ;;
- "")
- # If it fails, then pretend we aren't using GCC.
- ac_prog=ld
- ;;
- *)
- # If it is relative, then search for the first ld in PATH.
- with_gnu_ld=unknown
- ;;
- esac
-elif test "$with_gnu_ld" = yes; then
- AC_MSG_CHECKING([for GNU ld])
-else
- AC_MSG_CHECKING([for non-GNU ld])
-fi
-AC_CACHE_VAL(acl_cv_path_LD,
-[if test -z "$LD"; then
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
- for ac_dir in $PATH; do
- test -z "$ac_dir" && ac_dir=.
- if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
- acl_cv_path_LD="$ac_dir/$ac_prog"
- # Check to see if the program is GNU ld. I'd rather use --version,
- # but apparently some GNU ld's only accept -v.
- # Break only if it was the GNU/non-GNU ld that we prefer.
- case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in
- *GNU* | *'with BFD'*)
- test "$with_gnu_ld" != no && break ;;
- *)
- test "$with_gnu_ld" != yes && break ;;
- esac
- fi
- done
- IFS="$ac_save_ifs"
-else
- acl_cv_path_LD="$LD" # Let the user override the test with a path.
-fi])
-LD="$acl_cv_path_LD"
-if test -n "$LD"; then
- AC_MSG_RESULT($LD)
-else
- AC_MSG_RESULT(no)
-fi
-test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
-AC_LIB_PROG_LD_GNU
-])
-
-dnl This provides configure definitions used by all the winsup
-dnl configure.in files.
-
-# FIXME: We temporarily define our own version of AC_PROG_CC. This is
-# copied from autoconf 2.12, but does not call AC_PROG_CC_WORKS. We
-# are probably using a cross compiler, which will not be able to fully
-# link an executable. This should really be fixed in autoconf
-# itself.
-
-AC_DEFUN([LIB_AC_PROG_CC_GNU],
-[AC_CACHE_CHECK(whether we are using GNU C, ac_cv_prog_gcc,
-[dnl The semicolon is to pacify NeXT's syntax-checking cpp.
-cat > conftest.c <<EOF
-#ifdef __GNUC__
- yes;
-#endif
-EOF
-if AC_TRY_COMMAND(${CC-cc} -E conftest.c) | egrep yes >/dev/null 2>&1; then
- ac_cv_prog_gcc=yes
-else
- ac_cv_prog_gcc=no
-fi])])
-
-AC_DEFUN([LIB_AC_PROG_CC],
-[AC_BEFORE([$0], [AC_PROG_CPP])dnl
-AC_CHECK_TOOL(CC, gcc, gcc)
-: ${CC:=gcc}
-AC_PROG_CC
-test -z "$CC" && AC_MSG_ERROR([no acceptable cc found in \$PATH])
-])
-
-AC_DEFUN([LIB_AC_PROG_CXX],
-[AC_BEFORE([$0], [AC_PROG_CPP])dnl
-AC_CHECK_TOOL(CXX, g++, g++)
-if test -z "$CXX"; then
- AC_CHECK_TOOL(CXX, g++, c++, , , )
- : ${CXX:=g++}
- AC_PROG_CXX
- test -z "$CC" && AC_MSG_ERROR([no acceptable cc found in \$PATH])
-fi
-
-CXXFLAGS='$(CFLAGS)'
-])
-
diff --git a/winsup/lsaauth/configure b/winsup/lsaauth/configure
deleted file mode 100755
index b83cc3364..000000000
--- a/winsup/lsaauth/configure
+++ /dev/null
@@ -1,4226 +0,0 @@
-#! /bin/sh
-# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for Cygwin Lsaauth 0.
-#
-# Report bugs to <cygwin@cygwin.com>.
-#
-#
-# Copyright (C) 1992-1996, 1998-2012 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 more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in #(
- *posix*) :
- set -o posix ;; #(
- *) :
- ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- PATH_SEPARATOR=:
- (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
- (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
- PATH_SEPARATOR=';'
- }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
-# Find who we are. Look in the path if we contain no directory separator.
-as_myself=
-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
-IFS=$as_save_IFS
-
- ;;
-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
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
- exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-# Use a proper internal environment variable to ensure we don't fall
- # into an infinite loop, continuously re-executing ourselves.
- if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
- _as_can_reexec=no; export _as_can_reexec;
- # We cannot yet assume a decent shell, so we have to provide a
-# neutralization value for shells without unset; and this also
-# works around shells that cannot unset nonexistent variables.
-# Preserve -v and -x to the replacement shell.
-BASH_ENV=/dev/null
-ENV=/dev/null
-(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-case $- in # ((((
- *v*x* | *x*v* ) as_opts=-vx ;;
- *v* ) as_opts=-v ;;
- *x* ) as_opts=-x ;;
- * ) as_opts= ;;
-esac
-exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
-# Admittedly, this is quite paranoid, since all the known shells bail
-# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-as_fn_exit 255
- fi
- # We don't want this to propagate to other subprocesses.
- { _as_can_reexec=; unset _as_can_reexec;}
-if test "x$CONFIG_SHELL" = x; then
- as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '\${1+\"\$@\"}'='\"\$@\"'
- setopt NO_GLOB_SUBST
-else
- case \`(set -o) 2>/dev/null\` in #(
- *posix*) :
- set -o posix ;; #(
- *) :
- ;;
-esac
-fi
-"
- as_required="as_fn_return () { (exit \$1); }
-as_fn_success () { as_fn_return 0; }
-as_fn_failure () { as_fn_return 1; }
-as_fn_ret_success () { return 0; }
-as_fn_ret_failure () { return 1; }
-
-exitcode=0
-as_fn_success || { exitcode=1; echo as_fn_success failed.; }
-as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
-as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
-as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
-if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
-
-else
- exitcode=1; echo positional parameters were not saved.
-fi
-test x\$exitcode = x0 || exit 1
-test -x / || exit 1"
- as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
- as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
- eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
- test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1"
- if (eval "$as_required") 2>/dev/null; then :
- as_have_required=yes
-else
- as_have_required=no
-fi
- if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
-
-else
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-as_found=false
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- as_found=:
- case $as_dir in #(
- /*)
- for as_base in sh bash ksh sh5; do
- # Try only shells that exist, to save several forks.
- as_shell=$as_dir/$as_base
- if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
- CONFIG_SHELL=$as_shell as_have_required=yes
- if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
- break 2
-fi
-fi
- done;;
- esac
- as_found=false
-done
-$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
- CONFIG_SHELL=$SHELL as_have_required=yes
-fi; }
-IFS=$as_save_IFS
-
-
- if test "x$CONFIG_SHELL" != x; then :
- export CONFIG_SHELL
- # We cannot yet assume a decent shell, so we have to provide a
-# neutralization value for shells without unset; and this also
-# works around shells that cannot unset nonexistent variables.
-# Preserve -v and -x to the replacement shell.
-BASH_ENV=/dev/null
-ENV=/dev/null
-(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-case $- in # ((((
- *v*x* | *x*v* ) as_opts=-vx ;;
- *v* ) as_opts=-v ;;
- *x* ) as_opts=-x ;;
- * ) as_opts= ;;
-esac
-exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
-# Admittedly, this is quite paranoid, since all the known shells bail
-# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-exit 255
-fi
-
- if test x$as_have_required = xno; then :
- $as_echo "$0: This script requires a shell more modern than all"
- $as_echo "$0: the shells that I found on your system."
- if test x${ZSH_VERSION+set} = xset ; then
- $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
- $as_echo "$0: be upgraded to zsh 4.3.4 or later."
- else
- $as_echo "$0: Please tell bug-autoconf@gnu.org and cygwin@cygwin.com
-$0: about your system, including any error possibly output
-$0: before this message. Then install a modern shell, or
-$0: manually run the script under such a shell if you do
-$0: have one."
- fi
- exit 1
-fi
-fi
-fi
-SHELL=${CONFIG_SHELL-/bin/sh}
-export SHELL
-# Unset more variables known to interfere with behavior of common tools.
-CLICOLOR_FORCE= GREP_OPTIONS=
-unset CLICOLOR_FORCE GREP_OPTIONS
-
-## --------------------- ##
-## M4sh Shell Functions. ##
-## --------------------- ##
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
- { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
- return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
- set +e
- as_fn_set_status $1
- exit $1
-} # as_fn_exit
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
- case $as_dir in #(
- -*) as_dir=./$as_dir;;
- esac
- test -d "$as_dir" || eval $as_mkdir_p || {
- as_dirs=
- while :; do
- case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
- *) as_qdir=$as_dir;;
- esac
- as_dirs="'$as_qdir' $as_dirs"
- as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- test -d "$as_dir" && break
- done
- test -z "$as_dirs" || eval "mkdir $as_dirs"
- } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-
-# as_fn_executable_p FILE
-# -----------------------
-# Test if FILE is an executable regular file.
-as_fn_executable_p ()
-{
- test -f "$1" && test -x "$1"
-} # as_fn_executable_p
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
- eval 'as_fn_append ()
- {
- eval $1+=\$2
- }'
-else
- as_fn_append ()
- {
- eval $1=\$$1\$2
- }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
- eval 'as_fn_arith ()
- {
- as_val=$(( $* ))
- }'
-else
- as_fn_arith ()
- {
- as_val=`expr "$@" || test $? -eq 1`
- }
-fi # as_fn_arith
-
-
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
-as_fn_error ()
-{
- as_status=$1; test $as_status -eq 0 && as_status=1
- if test "$4"; then
- as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
- fi
- $as_echo "$as_me: error: $2" >&2
- as_fn_exit $as_status
-} # as_fn_error
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; 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
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
- }
- /^X\/\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\/\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
-
-# 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
-
-
- as_lineno_1=$LINENO as_lineno_1a=$LINENO
- as_lineno_2=$LINENO as_lineno_2a=$LINENO
- eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
- test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
- # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
- sed -n '
- p
- /[$]LINENO/=
- ' <$as_myself |
- sed '
- s/[$]LINENO.*/&-/
- t lineno
- b
- :lineno
- N
- :loop
- s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
- t loop
- s/-\n.*//
- ' >$as_me.lineno &&
- chmod +x "$as_me.lineno" ||
- { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
-
- # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
- # already done that, so ensure we don't try to do so again and fall
- # in an infinite loop. This has already happened in practice.
- _as_can_reexec=no; export _as_can_reexec
- # 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 sensitive to this).
- . "./$as_me.lineno"
- # Exit status is that of the last command.
- exit
-}
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
- case `echo 'xy\c'` in
- *c*) ECHO_T=' ';; # ECHO_T is single tab character.
- xy) ECHO_C='\c';;
- *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
- ECHO_T=' ';;
- esac;;
-*)
- ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
- rm -f conf$$.dir/conf$$.file
-else
- rm -f conf$$.dir
- mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
- if ln -s conf$$.file conf$$ 2>/dev/null; then
- as_ln_s='ln -s'
- # ... but there are two gotchas:
- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -pR'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -pR'
- elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
- else
- as_ln_s='cp -pR'
- fi
-else
- as_ln_s='cp -pR'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p='mkdir -p "$as_dir"'
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-as_test_x='test -x'
-as_executable_p=as_fn_executable_p
-
-# 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'"
-
-
-test -n "$DJDIR" || exec 7<&0 </dev/null
-exec 6>&1
-
-# Name of the host.
-# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
-# so uname gets run too.
-ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
-
-#
-# Initializations.
-#
-ac_default_prefix=/usr/local
-ac_clean_files=
-ac_config_libobj_dir=.
-LIBOBJS=
-cross_compiling=no
-subdirs=
-MFLAGS=
-MAKEFLAGS=
-
-# Identity of this package.
-PACKAGE_NAME='Cygwin Lsaauth'
-PACKAGE_TARNAME='cygwin'
-PACKAGE_VERSION='0'
-PACKAGE_STRING='Cygwin Lsaauth 0'
-PACKAGE_BUGREPORT='cygwin@cygwin.com'
-PACKAGE_URL='https://cygwin.com'
-
-ac_unique_file="Makefile.in"
-ac_no_link=no
-ac_subst_vars='LTLIBOBJS
-LIBOBJS
-INSTALL_DATA
-INSTALL_SCRIPT
-INSTALL_PROGRAM
-MINGW64_CC
-MINGW32_CC
-OBJEXT
-EXEEXT
-ac_ct_CC
-CPPFLAGS
-LDFLAGS
-CFLAGS
-CC
-target_os
-target_vendor
-target_cpu
-target
-host_os
-host_vendor
-host_cpu
-host
-build_os
-build_vendor
-build_cpu
-build
-target_alias
-host_alias
-build_alias
-LIBS
-ECHO_T
-ECHO_N
-ECHO_C
-DEFS
-mandir
-localedir
-libdir
-psdir
-pdfdir
-dvidir
-htmldir
-infodir
-docdir
-oldincludedir
-includedir
-localstatedir
-sharedstatedir
-sysconfdir
-datadir
-datarootdir
-libexecdir
-sbindir
-bindir
-program_transform_name
-prefix
-exec_prefix
-PACKAGE_URL
-PACKAGE_BUGREPORT
-PACKAGE_STRING
-PACKAGE_VERSION
-PACKAGE_TARNAME
-PACKAGE_NAME
-PATH_SEPARATOR
-SHELL'
-ac_subst_files=''
-ac_user_opts='
-enable_option_checking
-'
- ac_precious_vars='build_alias
-host_alias
-target_alias
-CC
-CFLAGS
-LDFLAGS
-LIBS
-CPPFLAGS'
-
-
-# Initialize some variables set by options.
-ac_init_help=
-ac_init_version=false
-ac_unrecognized_opts=
-ac_unrecognized_sep=
-# 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.
-# (The list follows the same order as the GNU Coding Standards.)
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datarootdir='${prefix}/share'
-datadir='${datarootdir}'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
-infodir='${datarootdir}/info'
-htmldir='${docdir}'
-dvidir='${docdir}'
-pdfdir='${docdir}'
-psdir='${docdir}'
-libdir='${exec_prefix}/lib'
-localedir='${datarootdir}/locale'
-mandir='${datarootdir}/man'
-
-ac_prev=
-ac_dashdash=
-for ac_option
-do
- # If the previous option needs an argument, assign it.
- if test -n "$ac_prev"; then
- eval $ac_prev=\$ac_option
- ac_prev=
- continue
- fi
-
- case $ac_option in
- *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
- *=) ac_optarg= ;;
- *) ac_optarg=yes ;;
- esac
-
- # Accept the important Cygnus configure options, so we can diagnose typos.
-
- case $ac_dashdash$ac_option in
- --)
- ac_dashdash=yes ;;
-
- -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)
- ac_prev=datadir ;;
- -datadir=* | --datadir=* | --datadi=* | --datad=*)
- datadir=$ac_optarg ;;
-
- -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
- | --dataroo | --dataro | --datar)
- ac_prev=datarootdir ;;
- -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
- | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
- datarootdir=$ac_optarg ;;
-
- -disable-* | --disable-*)
- ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid feature name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"enable_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval enable_$ac_useropt=no ;;
-
- -docdir | --docdir | --docdi | --doc | --do)
- ac_prev=docdir ;;
- -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
- docdir=$ac_optarg ;;
-
- -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
- ac_prev=dvidir ;;
- -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
- dvidir=$ac_optarg ;;
-
- -enable-* | --enable-*)
- ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid feature name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"enable_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval enable_$ac_useropt=\$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 ;;
-
- -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
- ac_prev=htmldir ;;
- -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
- | --ht=*)
- htmldir=$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 ;;
-
- -localedir | --localedir | --localedi | --localed | --locale)
- ac_prev=localedir ;;
- -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
- localedir=$ac_optarg ;;
-
- -localstatedir | --localstatedir | --localstatedi | --localstated \
- | --localstate | --localstat | --localsta | --localst | --locals)
- ac_prev=localstatedir ;;
- -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
- | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
- 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 ;;
-
- -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
- ac_prev=pdfdir ;;
- -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
- pdfdir=$ac_optarg ;;
-
- -psdir | --psdir | --psdi | --psd | --ps)
- ac_prev=psdir ;;
- -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
- psdir=$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_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid package name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"with_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval with_$ac_useropt=\$ac_optarg ;;
-
- -without-* | --without-*)
- ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid package name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"with_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval with_$ac_useropt=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 ;;
-
- -*) as_fn_error $? "unrecognized option: \`$ac_option'
-Try \`$0 --help' for more information"
- ;;
-
- *=*)
- ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
- # Reject names that are not valid shell variable names.
- case $ac_envvar in #(
- '' | [0-9]* | *[!_$as_cr_alnum]* )
- as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
- esac
- eval $ac_envvar=\$ac_optarg
- export $ac_envvar ;;
-
- *)
- # FIXME: should be removed in autoconf 3.0.
- $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
- expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- $as_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'`
- as_fn_error $? "missing argument to $ac_option"
-fi
-
-if test -n "$ac_unrecognized_opts"; then
- case $enable_option_checking in
- no) ;;
- fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
- *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
- esac
-fi
-
-# Check all directory arguments for consistency.
-for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
- datadir sysconfdir sharedstatedir localstatedir includedir \
- oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
- libdir localedir mandir
-do
- eval ac_val=\$$ac_var
- # Remove trailing slashes.
- case $ac_val in
- */ )
- ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
- eval $ac_var=\$ac_val;;
- esac
- # Be sure to have absolute directory names.
- case $ac_val in
- [\\/$]* | ?:[\\/]* ) continue;;
- NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
- esac
- as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
-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
- 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
-
-
-ac_pwd=`pwd` && test -n "$ac_pwd" &&
-ac_ls_di=`ls -di .` &&
-ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
- as_fn_error $? "working directory cannot be determined"
-test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
- as_fn_error $? "pwd does not report name of working directory"
-
-
-# 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 the parent directory.
- ac_confdir=`$as_dirname -- "$as_myself" ||
-$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_myself" : 'X\(//\)[^/]' \| \
- X"$as_myself" : 'X\(//\)$' \| \
- X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_myself" |
- 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
- test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
- as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
-fi
-ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
-ac_abs_confdir=`(
- cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
- pwd)`
-# When building in place, set srcdir=.
-if test "$ac_abs_confdir" = "$ac_pwd"; then
- srcdir=.
-fi
-# Remove unnecessary trailing slashes from srcdir.
-# Double slashes in file names in object file debugging info
-# mess up M-x gdb in Emacs.
-case $srcdir in
-*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
-esac
-for ac_var in $ac_precious_vars; do
- eval ac_env_${ac_var}_set=\${${ac_var}+set}
- eval ac_env_${ac_var}_value=\$${ac_var}
- eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
- eval ac_cv_env_${ac_var}_value=\$${ac_var}
-done
-
-#
-# 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 Cygwin Lsaauth 0 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 \`..']
-
-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]
- --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]
- --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
- --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
- --infodir=DIR info documentation [DATAROOTDIR/info]
- --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
- --mandir=DIR man documentation [DATAROOTDIR/man]
- --docdir=DIR documentation root [DATAROOTDIR/doc/cygwin]
- --htmldir=DIR html documentation [DOCDIR]
- --dvidir=DIR dvi documentation [DOCDIR]
- --pdfdir=DIR pdf documentation [DOCDIR]
- --psdir=DIR ps documentation [DOCDIR]
-_ACEOF
-
- cat <<\_ACEOF
-
-Program names:
- --program-prefix=PREFIX prepend PREFIX to installed program names
- --program-suffix=SUFFIX append SUFFIX to installed program names
- --program-transform-name=PROGRAM run sed PROGRAM on installed program names
-
-System types:
- --build=BUILD configure for building on BUILD [guessed]
- --host=HOST cross-compile to build programs to run on HOST [BUILD]
- --target=TARGET configure for building compilers for TARGET [HOST]
-_ACEOF
-fi
-
-if test -n "$ac_init_help"; then
- case $ac_init_help in
- short | recursive ) echo "Configuration of Cygwin Lsaauth 0:";;
- esac
- cat <<\_ACEOF
-
-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>
- LIBS libraries to pass to the linker, e.g. -l<library>
- CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
- you have headers in a nonstandard directory <include dir>
-
-Use these variables to override the choices made by `configure' or to help
-it to find libraries and programs with nonstandard names/locations.
-
-Report bugs to <cygwin@cygwin.com>.
-Cygwin Lsaauth home page: <https://cygwin.com>.
-_ACEOF
-ac_status=$?
-fi
-
-if test "$ac_init_help" = "recursive"; then
- # If there are subdirs, report their specific --help.
- for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
- test -d "$ac_dir" ||
- { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
- continue
- ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
- # A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
- esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
- .) # We are building in place.
- ac_srcdir=.
- ac_top_srcdir=$ac_top_builddir_sub
- ac_abs_top_srcdir=$ac_pwd ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir
- ac_abs_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_build_prefix$srcdir
- ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
- cd "$ac_dir" || { ac_status=$?; continue; }
- # Check for guested 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
- else
- $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
- fi || ac_status=$?
- cd "$ac_pwd" || { ac_status=$?; break; }
- done
-fi
-
-test -n "$ac_init_help" && exit $ac_status
-if $ac_init_version; then
- cat <<\_ACEOF
-Cygwin Lsaauth configure 0
-generated by GNU Autoconf 2.69
-
-Copyright (C) 2012 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
-fi
-
-## ------------------------ ##
-## Autoconf initialization. ##
-## ------------------------ ##
-
-# ac_fn_c_try_compile LINENO
-# --------------------------
-# Try to compile conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_compile ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext
- if { { ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compile") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_compile
-cat >config.log <<_ACEOF
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-
-It was created by Cygwin Lsaauth $as_me 0, which was
-generated by GNU Autoconf 2.69. Invocation command line was
-
- $ $0 $@
-
-_ACEOF
-exec 5>>config.log
-{
-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`
-/usr/bin/hostinfo = `(/usr/bin/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=.
- $as_echo "PATH: $as_dir"
- done
-IFS=$as_save_IFS
-
-} >&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_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=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- case $ac_pass in
- 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
- 2)
- as_fn_append 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
- as_fn_append ac_configure_args " '$ac_arg'"
- ;;
- esac
- done
-done
-{ ac_configure_args0=; unset ac_configure_args0;}
-{ ac_configure_args1=; unset 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: Use '\'' to represent an apostrophe within the trap.
-# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
-trap 'exit_status=$?
- # Save into config.log some information that might help in debugging.
- {
- echo
-
- $as_echo "## ---------------- ##
-## Cache variables. ##
-## ---------------- ##"
- echo
- # The following way of writing the cache mishandles newlines in values,
-(
- for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
- eval ac_val=\$$ac_var
- case $ac_val in #(
- *${as_nl}*)
- case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
- esac
- case $ac_var in #(
- _ | IFS | as_nl) ;; #(
- BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
- *) { eval $ac_var=; unset $ac_var;} ;;
- esac ;;
- esac
- done
- (set) 2>&1 |
- case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
- *${as_nl}ac_space=\ *)
- sed -n \
- "s/'\''/'\''\\\\'\'''\''/g;
- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
- ;; #(
- *)
- sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
- ;;
- esac |
- sort
-)
- echo
-
- $as_echo "## ----------------- ##
-## Output variables. ##
-## ----------------- ##"
- echo
- for ac_var in $ac_subst_vars
- do
- eval ac_val=\$$ac_var
- case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
- esac
- $as_echo "$ac_var='\''$ac_val'\''"
- done | sort
- echo
-
- if test -n "$ac_subst_files"; then
- $as_echo "## ------------------- ##
-## File substitutions. ##
-## ------------------- ##"
- echo
- for ac_var in $ac_subst_files
- do
- eval ac_val=\$$ac_var
- case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
- esac
- $as_echo "$ac_var='\''$ac_val'\''"
- done | sort
- echo
- fi
-
- if test -s confdefs.h; then
- $as_echo "## ----------- ##
-## confdefs.h. ##
-## ----------- ##"
- echo
- cat confdefs.h
- echo
- fi
- test "$ac_signal" != 0 &&
- $as_echo "$as_me: caught signal $ac_signal"
- $as_echo "$as_me: exit $exit_status"
- } >&5
- rm -f core *.core core.conftest.* &&
- rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
- exit $exit_status
-' 0
-for ac_signal in 1 2 13 15; do
- trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
-done
-ac_signal=0
-
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -f -r conftest* confdefs.h
-
-$as_echo "/* confdefs.h */" > 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
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_URL "$PACKAGE_URL"
-_ACEOF
-
-
-# Let the site file select an alternate cache file if it wants to.
-# Prefer an explicitly selected file to automatically selected ones.
-ac_site_file1=NONE
-ac_site_file2=NONE
-if test -n "$CONFIG_SITE"; then
- # We do not want a PATH search for config.site.
- case $CONFIG_SITE in #((
- -*) ac_site_file1=./$CONFIG_SITE;;
- */*) ac_site_file1=$CONFIG_SITE;;
- *) ac_site_file1=./$CONFIG_SITE;;
- esac
-elif test "x$prefix" != xNONE; then
- ac_site_file1=$prefix/share/config.site
- ac_site_file2=$prefix/etc/config.site
-else
- ac_site_file1=$ac_default_prefix/share/config.site
- ac_site_file2=$ac_default_prefix/etc/config.site
-fi
-for ac_site_file in "$ac_site_file1" "$ac_site_file2"
-do
- test "x$ac_site_file" = xNONE && continue
- if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
-$as_echo "$as_me: loading site script $ac_site_file" >&6;}
- sed 's/^/| /' "$ac_site_file" >&5
- . "$ac_site_file" \
- || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "failed to load site script $ac_site_file
-See \`config.log' for more details" "$LINENO" 5; }
- 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. DJGPP emulates it as a regular file.
- if test /dev/null != "$cache_file" && test -f "$cache_file"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
-$as_echo "$as_me: loading cache $cache_file" >&6;}
- case $cache_file in
- [\\/]* | ?:[\\/]* ) . "$cache_file";;
- *) . "./$cache_file";;
- esac
- fi
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
-$as_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 $ac_precious_vars; 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,)
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
- ac_cache_corrupted=: ;;
- ,set)
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
-$as_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
- # differences in whitespace do not lead to failure.
- ac_old_val_w=`echo x $ac_old_val`
- ac_new_val_w=`echo x $ac_new_val`
- if test "$ac_old_val_w" != "$ac_new_val_w"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
-$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
- ac_cache_corrupted=:
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
-$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
- eval $ac_var=\$ac_old_val
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
-$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
-$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
- fi;;
- esac
- # Pass precious variables to config.status.
- if test "$ac_new_set" = set; then
- case $ac_new_val in
- *\'*) ac_arg=$ac_var=`$as_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.
- *) as_fn_append ac_configure_args " '$ac_arg'" ;;
- esac
- fi
-done
-if $ac_cache_corrupted; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
-$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
- as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
-fi
-## -------------------- ##
-## Main body of script. ##
-## -------------------- ##
-
-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_aux_dir=
-for ac_dir in ../.. "$srcdir"/../..; do
- if test -f "$ac_dir/install-sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install-sh -c"
- break
- elif test -f "$ac_dir/install.sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install.sh -c"
- break
- elif test -f "$ac_dir/shtool"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/shtool install -c"
- break
- fi
-done
-if test -z "$ac_aux_dir"; then
- as_fn_error $? "cannot find install-sh, install.sh, or shtool in ../.. \"$srcdir\"/../.." "$LINENO" 5
-fi
-
-# These three variables are undocumented and unsupported,
-# and are intended to be withdrawn in a future Autoconf release.
-# They can cause serious problems if a builder's source tree is in a directory
-# whose full name contains unusual characters.
-ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
-ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
-ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
-
-
-
-
-# Make sure we can run config.sub.
-$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
- as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
-$as_echo_n "checking build system type... " >&6; }
-if ${ac_cv_build+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_build_alias=$build_alias
-test "x$ac_build_alias" = x &&
- ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
-test "x$ac_build_alias" = x &&
- as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
-ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
- as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
-$as_echo "$ac_cv_build" >&6; }
-case $ac_cv_build in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
-esac
-build=$ac_cv_build
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_build
-shift
-build_cpu=$1
-build_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-build_os=$*
-IFS=$ac_save_IFS
-case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
-$as_echo_n "checking host system type... " >&6; }
-if ${ac_cv_host+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test "x$host_alias" = x; then
- ac_cv_host=$ac_cv_build
-else
- ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
- as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
-$as_echo "$ac_cv_host" >&6; }
-case $ac_cv_host in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
-esac
-host=$ac_cv_host
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_host
-shift
-host_cpu=$1
-host_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-host_os=$*
-IFS=$ac_save_IFS
-case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5
-$as_echo_n "checking target system type... " >&6; }
-if ${ac_cv_target+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test "x$target_alias" = x; then
- ac_cv_target=$ac_cv_host
-else
- ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` ||
- as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5
-$as_echo "$ac_cv_target" >&6; }
-case $ac_cv_target in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;;
-esac
-target=$ac_cv_target
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_target
-shift
-target_cpu=$1
-target_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-target_os=$*
-IFS=$ac_save_IFS
-case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac
-
-
-# The aliases save the names the user supplied, while $host etc.
-# will get canonicalized.
-test -n "$target_alias" &&
- test "$program_prefix$program_suffix$program_transform_name" = \
- NONENONEs,x,x, &&
- program_prefix=${target_alias}-
-
-
-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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="${ac_tool_prefix}gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
- $as_echo_n "(cached) " >&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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_CC" = x; then
- CC="gcc"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-else
- CC="$ac_cv_prog_CC"
-fi
-
-: ${CC:=gcc}
-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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="${ac_tool_prefix}gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
- $as_echo_n "(cached) " >&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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="${ac_tool_prefix}cc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- 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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&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_fn_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"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-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
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- for ac_prog in cl.exe
- 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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$CC" && break
- done
-fi
-if test -z "$CC"; then
- ac_ct_CC=$CC
- for ac_prog in cl.exe
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
- $as_echo_n "(cached) " >&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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$ac_ct_CC" && break
-done
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-fi
-
-fi
-
-
-test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "no acceptable C compiler found in \$PATH
-See \`config.log' for more details" "$LINENO" 5; }
-
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
- { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compiler $ac_option >&5") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- sed '10a\
-... rest of stderr output deleted ...
- 10q' conftest.err >conftest.er1
- cat conftest.er1 >&5
- fi
- rm -f conftest.er1 conftest.err
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
-done
-
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- ac_no_link=no
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.out.dSYM 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.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
-$as_echo_n "checking whether the C compiler works... " >&6; }
-ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-
-# The possible output files:
-ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
-
-ac_rmfiles=
-for ac_file in $ac_files
-do
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
- * ) ac_rmfiles="$ac_rmfiles $ac_file";;
- esac
-done
-rm -f $ac_rmfiles
-
-if { { ac_try="$ac_link_default"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link_default") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
- # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
-# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
-# in a Makefile. We should not override ac_cv_exeext if it was cached,
-# so that the user can short-circuit this test for compilers unknown to
-# Autoconf.
-for ac_file in $ac_files ''
-do
- test -f "$ac_file" || continue
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
- ;;
- [ab].out )
- # We found the default executable, but exeext='' is most
- # certainly right.
- break;;
- *.* )
- if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
- then :; else
- ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- fi
- # We set ac_cv_exeext here because the later test for it is not
- # safe: cross compilers may not add the suffix if given an `-o'
- # argument, so we may need to know it at that point already.
- # Even if this section looks crufty: it has the advantage of
- # actually working.
- break;;
- * )
- break;;
- esac
-done
-test "$ac_cv_exeext" = no && ac_cv_exeext=
-
-else
- ac_file=''
-fi
-if test -z "$ac_file"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-$as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "C compiler cannot create executables
-See \`config.log' for more details" "$LINENO" 5; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
-$as_echo_n "checking for C compiler default output file name... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
-ac_exeext=$ac_cv_exeext
-
-rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
-ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
-$as_echo_n "checking for suffix of executables... " >&6; }
-if { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; 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 | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
- *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- break;;
- * ) break;;
- esac
-done
-else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-rm -f conftest conftest$ac_cv_exeext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
-$as_echo "$ac_cv_exeext" >&6; }
-
-rm -f conftest.$ac_ext
-EXEEXT=$ac_cv_exeext
-ac_exeext=$EXEEXT
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdio.h>
-int
-main ()
-{
-FILE *f = fopen ("conftest.out", "w");
- return ferror (f) || fclose (f) != 0;
-
- ;
- return 0;
-}
-_ACEOF
-ac_clean_files="$ac_clean_files conftest.out"
-# Check that the compiler produces executables we can run. If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
-if test "$cross_compiling" != yes; then
- { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
- if { ac_try='./conftest$ac_cv_exeext'
- { { case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then
- cross_compiling=no
- else
- if test "$cross_compiling" = maybe; then
- cross_compiling=yes
- else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details" "$LINENO" 5; }
- fi
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
-
-rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
-ac_clean_files=$ac_clean_files_save
-
-else
- rm -f -r a.out a.exe b.out conftest.$ac_ext conftest.o conftest.obj conftest.dSYM
- ac_no_link=yes
- # Setting cross_compile will disable run tests; it will
- # also disable AC_CHECK_FILE but that's generally
- # correct if we can't link.
- cross_compiling=yes
- EXEEXT=
- # Check that the compiler produces executables we can run. If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
-if test "$cross_compiling" != yes; then
- { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
- if { ac_try='./conftest$ac_cv_exeext'
- { { case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then
- cross_compiling=no
- else
- if test "$cross_compiling" = maybe; then
- cross_compiling=yes
- else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details" "$LINENO" 5; }
- fi
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
-$as_echo_n "checking for suffix of object files... " >&6; }
-if ${ac_cv_objext+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.o conftest.obj
-if { { ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compile") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
- for ac_file in conftest.o conftest.obj conftest.*; do
- test -f "$ac_file" || continue;
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
- *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
- break;;
- esac
-done
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of object files: cannot compile
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
-$as_echo "$ac_cv_objext" >&6; }
-OBJEXT=$ac_cv_objext
-ac_objext=$OBJEXT
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
-$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if ${ac_cv_c_compiler_gnu+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-#ifndef __GNUC__
- choke me
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_compiler_gnu=yes
-else
- ac_compiler_gnu=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
-$as_echo "$ac_cv_c_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
- GCC=yes
-else
- GCC=
-fi
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if ${ac_cv_prog_cc_g+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_save_c_werror_flag=$ac_c_werror_flag
- ac_c_werror_flag=yes
- ac_cv_prog_cc_g=no
- CFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_g=yes
-else
- CFLAGS=""
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-else
- ac_c_werror_flag=$ac_save_c_werror_flag
- CFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_g=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_c_werror_flag=$ac_save_c_werror_flag
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
-$as_echo "$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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if ${ac_cv_prog_cc_c89+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_cv_prog_cc_c89=no
-ac_save_CC=$CC
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdarg.h>
-#include <stdio.h>
-struct stat;
-/* 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 -std 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 -std. */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
- inside strings and character constants. */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 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
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
- -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
- CC="$ac_save_CC $ac_arg"
- if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_c89=$ac_arg
-fi
-rm -f core conftest.err conftest.$ac_objext
- test "x$ac_cv_prog_cc_c89" != "xno" && break
-done
-rm -f conftest.$ac_ext
-CC=$ac_save_CC
-
-fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
- x)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
- xno)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
- *)
- CC="$CC $ac_cv_prog_cc_c89"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-if test "x$ac_cv_prog_cc_c89" != xno; then :
-
-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
-
-test -z "$CC" && as_fn_error $? "no acceptable cc found in \$PATH" "$LINENO" 5
-
-
-case "$target_cpu" in
-i?86)
- for ac_prog in i686-w64-mingw32-gcc
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_MINGW32_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$MINGW32_CC"; then
- ac_cv_prog_MINGW32_CC="$MINGW32_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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_MINGW32_CC="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-MINGW32_CC=$ac_cv_prog_MINGW32_CC
-if test -n "$MINGW32_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MINGW32_CC" >&5
-$as_echo "$MINGW32_CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$MINGW32_CC" && break
-done
-
- test -z "$MINGW32_CC" && as_fn_error $? "no acceptable mingw32 cc found in \$PATH" "$LINENO" 5
- ;;
-esac
-
-for ac_prog in x86_64-w64-mingw32-gcc
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_MINGW64_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$MINGW64_CC"; then
- ac_cv_prog_MINGW64_CC="$MINGW64_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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_MINGW64_CC="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-MINGW64_CC=$ac_cv_prog_MINGW64_CC
-if test -n "$MINGW64_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MINGW64_CC" >&5
-$as_echo "$MINGW64_CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$MINGW64_CC" && break
-done
-
-test -z "$MINGW64_CC" && as_fn_error $? "no acceptable mingw64 cc found in \$PATH" "$LINENO" 5
-
-test "$program_prefix" != NONE &&
- program_transform_name="s&^&$program_prefix&;$program_transform_name"
-# Use a double $ so make ignores it.
-test "$program_suffix" != NONE &&
- program_transform_name="s&\$&$program_suffix&;$program_transform_name"
-# Double any \ or $.
-# By default was `s,x,x', remove it if useless.
-ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
-program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
-
-
-# Find a good install program. We prefer a C program (faster),
-# so one script is as good as another. But avoid the broken or
-# incompatible versions:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if ${ac_cv_path_install+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
- ./ | .// | /[cC]/* | \
- /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
- ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
- /usr/ucb/* ) ;;
- *)
- # OSF1 and SCO ODT 3.0 have their own names for install.
- # Don't use installbsd from OSF since it installs stuff as root
- # by default.
- for ac_prog in ginstall scoinst install; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
- if test $ac_prog = install &&
- grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
- # AIX install. It has an incompatible calling convention.
- :
- elif test $ac_prog = install &&
- grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
- # program-specific install script used by HP pwplus--don't use.
- :
- else
- rm -rf conftest.one conftest.two conftest.dir
- echo one > conftest.one
- echo two > conftest.two
- mkdir conftest.dir
- if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
- test -s conftest.one && test -s conftest.two &&
- test -s conftest.dir/conftest.one &&
- test -s conftest.dir/conftest.two
- then
- ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
- break 3
- fi
- fi
- fi
- done
- done
- ;;
-esac
-
- done
-IFS=$as_save_IFS
-
-rm -rf conftest.one conftest.two conftest.dir
-
-fi
- if test "${ac_cv_path_install+set}" = set; then
- INSTALL=$ac_cv_path_install
- else
- # As a last resort, use the slow shell script. Don't cache a
- # value for INSTALL within a source directory, because that will
- # break other packages using the cache if that directory is
- # removed, or if the value is a relative name.
- INSTALL=$ac_install_sh
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-
-ac_config_files="$ac_config_files Makefile cyglsa.def:cyglsa.din"
-
-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, we kill variables containing newlines.
-# 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.
-(
- for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
- eval ac_val=\$$ac_var
- case $ac_val in #(
- *${as_nl}*)
- case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
- esac
- case $ac_var in #(
- _ | IFS | as_nl) ;; #(
- BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
- *) { eval $ac_var=; unset $ac_var;} ;;
- esac ;;
- esac
- done
-
- (set) 2>&1 |
- case $as_nl`(ac_space=' '; set) 2>&1` in #(
- *${as_nl}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 "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
- ;;
- esac |
- sort
-) |
- sed '
- /^ac_cv_env_/b end
- t clear
- :clear
- s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
- t end
- s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
- :end' >>confcache
-if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
- if test -w "$cache_file"; then
- if test "x$cache_file" != "x/dev/null"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
-$as_echo "$as_me: updating cache $cache_file" >&6;}
- if test ! -f "$cache_file" || test -h "$cache_file"; then
- cat confcache >"$cache_file"
- else
- case $cache_file in #(
- */* | ?:*)
- mv -f confcache "$cache_file"$$ &&
- mv -f "$cache_file"$$ "$cache_file" ;; #(
- *)
- mv -f confcache "$cache_file" ;;
- esac
- fi
- fi
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
-$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
- 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}'
-
-# Transform confdefs.h into DEFS.
-# Protect against shell expansion while executing Makefile rules.
-# Protect against Makefile macro expansion.
-#
-# If the first sed substitution is executed (which looks for macros that
-# take arguments), then branch to the quote section. Otherwise,
-# look for a macro that doesn't take arguments.
-ac_script='
-:mline
-/\\$/{
- N
- s,\\\n,,
- b mline
-}
-t clear
-:clear
-s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g
-t quote
-s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g
-t quote
-b any
-:quote
-s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g
-s/\[/\\&/g
-s/\]/\\&/g
-s/\$/$$/g
-H
-:any
-${
- g
- s/^\n//
- s/\n/ /g
- p
-}
-'
-DEFS=`sed -n "$ac_script" confdefs.h`
-
-
-ac_libobjs=
-ac_ltlibobjs=
-U=
-for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
- # 1. Remove the extension, and $U if already installed.
- ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
- ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
- # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
- # will be set to the directory where LIBOBJS objects are built.
- as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
- as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
-done
-LIBOBJS=$ac_libobjs
-
-LTLIBOBJS=$ac_ltlibobjs
-
-
-
-: "${CONFIG_STATUS=./config.status}"
-ac_write_fail=0
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
-as_write_fail=0
-cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
-#! $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}
-export SHELL
-_ASEOF
-cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
-## -------------------- ##
-## M4sh Initialization. ##
-## -------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in #(
- *posix*) :
- set -o posix ;; #(
- *) :
- ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- PATH_SEPARATOR=:
- (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
- (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
- PATH_SEPARATOR=';'
- }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
-# Find who we are. Look in the path if we contain no directory separator.
-as_myself=
-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
-IFS=$as_save_IFS
-
- ;;
-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
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
- exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
-as_fn_error ()
-{
- as_status=$1; test $as_status -eq 0 && as_status=1
- if test "$4"; then
- as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
- fi
- $as_echo "$as_me: error: $2" >&2
- as_fn_exit $as_status
-} # as_fn_error
-
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
- return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
- set +e
- as_fn_set_status $1
- exit $1
-} # as_fn_exit
-
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
- { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
- eval 'as_fn_append ()
- {
- eval $1+=\$2
- }'
-else
- as_fn_append ()
- {
- eval $1=\$$1\$2
- }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
- eval 'as_fn_arith ()
- {
- as_val=$(( $* ))
- }'
-else
- as_fn_arith ()
- {
- as_val=`expr "$@" || test $? -eq 1`
- }
-fi # as_fn_arith
-
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; 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
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
- }
- /^X\/\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\/\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
-
-# 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
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
- case `echo 'xy\c'` in
- *c*) ECHO_T=' ';; # ECHO_T is single tab character.
- xy) ECHO_C='\c';;
- *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
- ECHO_T=' ';;
- esac;;
-*)
- ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
- rm -f conf$$.dir/conf$$.file
-else
- rm -f conf$$.dir
- mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
- if ln -s conf$$.file conf$$ 2>/dev/null; then
- as_ln_s='ln -s'
- # ... but there are two gotchas:
- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -pR'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -pR'
- elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
- else
- as_ln_s='cp -pR'
- fi
-else
- as_ln_s='cp -pR'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
- case $as_dir in #(
- -*) as_dir=./$as_dir;;
- esac
- test -d "$as_dir" || eval $as_mkdir_p || {
- as_dirs=
- while :; do
- case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
- *) as_qdir=$as_dir;;
- esac
- as_dirs="'$as_qdir' $as_dirs"
- as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- test -d "$as_dir" && break
- done
- test -z "$as_dirs" || eval "mkdir $as_dirs"
- } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p='mkdir -p "$as_dir"'
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-
-# as_fn_executable_p FILE
-# -----------------------
-# Test if FILE is an executable regular file.
-as_fn_executable_p ()
-{
- test -f "$1" && test -x "$1"
-} # as_fn_executable_p
-as_test_x='test -x'
-as_executable_p=as_fn_executable_p
-
-# 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'"
-
-
-exec 6>&1
-## ----------------------------------- ##
-## Main body of $CONFIG_STATUS script. ##
-## ----------------------------------- ##
-_ASEOF
-test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# Save the log message, to keep $0 and so on meaningful, and to
-# report actual input values of CONFIG_FILES etc. instead of their
-# values after options handling.
-ac_log="
-This file was extended by Cygwin Lsaauth $as_me 0, which was
-generated by GNU Autoconf 2.69. Invocation command line was
-
- CONFIG_FILES = $CONFIG_FILES
- CONFIG_HEADERS = $CONFIG_HEADERS
- CONFIG_LINKS = $CONFIG_LINKS
- CONFIG_COMMANDS = $CONFIG_COMMANDS
- $ $0 $@
-
-on `(hostname || uname -n) 2>/dev/null | sed 1q`
-"
-
-_ACEOF
-
-case $ac_config_files in *"
-"*) set x $ac_config_files; shift; ac_config_files=$*;;
-esac
-
-
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-# Files that config.status was made for.
-config_files="$ac_config_files"
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-ac_cs_usage="\
-\`$as_me' instantiates files and other configuration actions
-from templates according to the current configuration. Unless the files
-and actions are specified as TAGs, all are instantiated by default.
-
-Usage: $0 [OPTION]... [TAG]...
-
- -h, --help print this help, then exit
- -V, --version print version number and configuration settings, then exit
- --config print configuration, then exit
- -q, --quiet, --silent
- 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
-
-Configuration files:
-$config_files
-
-Report bugs to <cygwin@cygwin.com>.
-Cygwin Lsaauth home page: <https://cygwin.com>."
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
-ac_cs_version="\\
-Cygwin Lsaauth config.status 0
-configured by $0, generated by GNU Autoconf 2.69,
- with options \\"\$ac_cs_config\\"
-
-Copyright (C) 2012 Free Software Foundation, Inc.
-This config.status script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it."
-
-ac_pwd='$ac_pwd'
-srcdir='$srcdir'
-INSTALL='$INSTALL'
-test -n "\$AWK" || AWK=awk
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# The default lists apply if the user does not specify any file.
-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=`expr "X$1" : 'X\([^=]*\)='`
- ac_optarg=
- ac_shift=:
- ;;
- *)
- ac_option=$1
- ac_optarg=$2
- ac_shift=shift
- ;;
- esac
-
- case $ac_option in
- # Handling of the options.
- -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
- ac_cs_recheck=: ;;
- --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
- $as_echo "$ac_cs_version"; exit ;;
- --config | --confi | --conf | --con | --co | --c )
- $as_echo "$ac_cs_config"; exit ;;
- --debug | --debu | --deb | --de | --d | -d )
- debug=: ;;
- --file | --fil | --fi | --f )
- $ac_shift
- case $ac_optarg in
- *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
- '') as_fn_error $? "missing file argument" ;;
- esac
- as_fn_append CONFIG_FILES " '$ac_optarg'"
- ac_need_defaults=false;;
- --he | --h | --help | --hel | -h )
- $as_echo "$ac_cs_usage"; exit ;;
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil | --si | --s)
- ac_cs_silent=: ;;
-
- # This is an error.
- -*) as_fn_error $? "unrecognized option: \`$1'
-Try \`$0 --help' for more information." ;;
-
- *) as_fn_append ac_config_targets " $1"
- ac_need_defaults=false ;;
-
- 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 || ac_write_fail=1
-if \$ac_cs_recheck; then
- set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
- shift
- \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
- CONFIG_SHELL='$SHELL'
- export CONFIG_SHELL
- exec "\$@"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-exec 5>>config.log
-{
- echo
- sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
- $as_echo "$ac_log"
-} >&5
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-
-# Handling of arguments.
-for ac_config_target in $ac_config_targets
-do
- case $ac_config_target in
- "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
- "cyglsa.def") CONFIG_FILES="$CONFIG_FILES cyglsa.def:cyglsa.din" ;;
-
- *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
- 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
-fi
-
-# Have a temporary directory for convenience. Make it in the build tree
-# simply because there is no reason against having it here, and in addition,
-# creating and moving files from /tmp can sometimes cause problems.
-# Hook for its removal unless debugging.
-# Note that there is a small window in which the directory will not be cleaned:
-# after its creation but before its name has been assigned to `$tmp'.
-$debug ||
-{
- tmp= ac_tmp=
- trap 'exit_status=$?
- : "${ac_tmp:=$tmp}"
- { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
-' 0
- trap 'as_fn_exit 1' 1 2 13 15
-}
-# Create a (secure) tmp directory for tmp files.
-
-{
- tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
- test -d "$tmp"
-} ||
-{
- tmp=./conf$$-$RANDOM
- (umask 077 && mkdir "$tmp")
-} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
-ac_tmp=$tmp
-
-# Set up the scripts for CONFIG_FILES section.
-# No need to generate them if there are no CONFIG_FILES.
-# This happens for instance with `./config.status config.h'.
-if test -n "$CONFIG_FILES"; then
-
-
-ac_cr=`echo X | tr X '\015'`
-# On cygwin, bash can eat \r inside `` if the user requested igncr.
-# But we know of no other shell where ac_cr would be empty at this
-# point, so we can use a bashism as a fallback.
-if test "x$ac_cr" = x; then
- eval ac_cr=\$\'\\r\'
-fi
-ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
-if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
- ac_cs_awk_cr='\\r'
-else
- ac_cs_awk_cr=$ac_cr
-fi
-
-echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
-_ACEOF
-
-
-{
- echo "cat >conf$$subs.awk <<_ACEOF" &&
- echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
- echo "_ACEOF"
-} >conf$$subs.sh ||
- as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
-ac_delim='%!_!# '
-for ac_last_try in false false false false false :; do
- . ./conf$$subs.sh ||
- as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-
- ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
- if test $ac_delim_n = $ac_delim_num; then
- break
- elif $ac_last_try; then
- as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
- else
- ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
- fi
-done
-rm -f conf$$subs.sh
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
-_ACEOF
-sed -n '
-h
-s/^/S["/; s/!.*/"]=/
-p
-g
-s/^[^!]*!//
-:repl
-t repl
-s/'"$ac_delim"'$//
-t delim
-:nl
-h
-s/\(.\{148\}\)..*/\1/
-t more1
-s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
-p
-n
-b repl
-:more1
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t nl
-:delim
-h
-s/\(.\{148\}\)..*/\1/
-t more2
-s/["\\]/\\&/g; s/^/"/; s/$/"/
-p
-b
-:more2
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t delim
-' <conf$$subs.awk | sed '
-/^[^""]/{
- N
- s/\n//
-}
-' >>$CONFIG_STATUS || ac_write_fail=1
-rm -f conf$$subs.awk
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACAWK
-cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
- for (key in S) S_is_set[key] = 1
- FS = ""
-
-}
-{
- line = $ 0
- nfields = split(line, field, "@")
- substed = 0
- len = length(field[1])
- for (i = 2; i < nfields; i++) {
- key = field[i]
- keylen = length(key)
- if (S_is_set[key]) {
- value = S[key]
- line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
- len += length(value) + length(field[++i])
- substed = 1
- } else
- len += 1 + keylen
- }
-
- print line
-}
-
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
- sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
-else
- cat
-fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
- || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
-_ACEOF
-
-# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
-# ${srcdir} and @srcdir@ entries 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[ ]*=[ ]*/{
-h
-s///
-s/^/:/
-s/[ ]*$/:/
-s/:\$(srcdir):/:/g
-s/:\${srcdir}:/:/g
-s/:@srcdir@:/:/g
-s/^:*//
-s/:*$//
-x
-s/\(=[ ]*\).*/\1/
-G
-s/\n//
-s/^[^=]*=[ ]*$//
-}'
-fi
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-fi # test -n "$CONFIG_FILES"
-
-
-eval set X " :F $CONFIG_FILES "
-shift
-for ac_tag
-do
- case $ac_tag in
- :[FHLC]) ac_mode=$ac_tag; continue;;
- esac
- case $ac_mode$ac_tag in
- :[FHL]*:*);;
- :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
- :[FH]-) ac_tag=-:-;;
- :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
- esac
- ac_save_IFS=$IFS
- IFS=:
- set x $ac_tag
- IFS=$ac_save_IFS
- shift
- ac_file=$1
- shift
-
- case $ac_mode in
- :L) ac_source=$1;;
- :[FH])
- ac_file_inputs=
- for ac_f
- do
- case $ac_f in
- -) ac_f="$ac_tmp/stdin";;
- *) # Look for the file first in the build tree, then in the source tree
- # (if the path is not absolute). The absolute path cannot be DOS-style,
- # because $ac_f cannot contain `:'.
- test -f "$ac_f" ||
- case $ac_f in
- [\\/$]*) false;;
- *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
- esac ||
- as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
- esac
- case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
- as_fn_append ac_file_inputs " '$ac_f'"
- done
-
- # 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. */
- configure_input='Generated from '`
- $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
- `' by configure.'
- if test x"$ac_file" != x-; then
- configure_input="$ac_file. $configure_input"
- { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
-$as_echo "$as_me: creating $ac_file" >&6;}
- fi
- # Neutralize special characters interpreted by sed in replacement strings.
- case $configure_input in #(
- *\&* | *\|* | *\\* )
- ac_sed_conf_input=`$as_echo "$configure_input" |
- sed 's/[\\\\&|]/\\\\&/g'`;; #(
- *) ac_sed_conf_input=$configure_input;;
- esac
-
- case $ac_tag in
- *:-:* | *:-) cat >"$ac_tmp/stdin" \
- || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
- esac
- ;;
- esac
-
- ac_dir=`$as_dirname -- "$ac_file" ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$ac_file" : 'X\(//\)[^/]' \| \
- X"$ac_file" : 'X\(//\)$' \| \
- X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$ac_file" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- as_dir="$ac_dir"; as_fn_mkdir_p
- ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
- # A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
- esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
- .) # We are building in place.
- ac_srcdir=.
- ac_top_srcdir=$ac_top_builddir_sub
- ac_abs_top_srcdir=$ac_pwd ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir
- ac_abs_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_build_prefix$srcdir
- ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
-
- case $ac_mode in
- :F)
- #
- # CONFIG_FILE
- #
-
- case $INSTALL in
- [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
- *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
- esac
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# If the template does not know about datarootdir, expand it.
-# FIXME: This hack should be removed a few years after 2.60.
-ac_datarootdir_hack=; ac_datarootdir_seen=
-ac_sed_dataroot='
-/datarootdir/ {
- p
- q
-}
-/@datadir@/p
-/@docdir@/p
-/@infodir@/p
-/@localedir@/p
-/@mandir@/p'
-case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
-*datarootdir*) ac_datarootdir_seen=yes;;
-*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
- ac_datarootdir_hack='
- s&@datadir@&$datadir&g
- s&@docdir@&$docdir&g
- s&@infodir@&$infodir&g
- s&@localedir@&$localedir&g
- s&@mandir@&$mandir&g
- s&\\\${datarootdir}&$datarootdir&g' ;;
-esac
-_ACEOF
-
-# Neutralize VPATH when `$srcdir' = `.'.
-# Shell code in configure.ac might set extrasub.
-# FIXME: do we really want to maintain this feature?
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_sed_extra="$ac_vpsub
-$extrasub
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-:t
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s|@configure_input@|$ac_sed_conf_input|;t t
-s&@top_builddir@&$ac_top_builddir_sub&;t t
-s&@top_build_prefix@&$ac_top_build_prefix&;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&@abs_top_builddir@&$ac_abs_top_builddir&;t t
-s&@INSTALL@&$ac_INSTALL&;t t
-$ac_datarootdir_hack
-"
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
- >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
-
-test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
- { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
- { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
- "$ac_tmp/out"`; test -z "$ac_out"; } &&
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined. Please make sure it is defined" >&5
-$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined. Please make sure it is defined" >&2;}
-
- rm -f "$ac_tmp/stdin"
- case $ac_file in
- -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
- *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
- esac \
- || as_fn_error $? "could not create $ac_file" "$LINENO" 5
- ;;
-
-
-
- esac
-
-done # for ac_tag
-
-
-as_fn_exit 0
-_ACEOF
-ac_clean_files=$ac_clean_files_save
-
-test $ac_write_fail = 0 ||
- as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
-
-
-# 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 || as_fn_exit 1
-fi
-if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
-$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
-fi
-
diff --git a/winsup/lsaauth/configure.ac b/winsup/lsaauth/configure.ac
deleted file mode 100644
index 2bcb43cc4..000000000
--- a/winsup/lsaauth/configure.ac
+++ /dev/null
@@ -1,41 +0,0 @@
-dnl Autoconf configure script for Cygwin utilities.
-dnl Copyright 2006, 2008, 2012, 2013, 2014 Red Hat, Inc.
-dnl
-dnl This file is part of Cygwin.
-dnl
-dnl This software is a copyrighted work licensed under the terms of the
-dnl Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-dnl details.
-dnl
-dnl Written by Christopher Faylor <cgf@redhat.com>
-dnl Changed for lsa subdir by Corinna Vinschen <corinna@vinschen.de>
-
-dnl Process this file with autoconf to produce a configure script.
-
-AC_PREREQ(2.59)
-AC_INIT([Cygwin Lsaauth], 0,
- cygwin@cygwin.com, cygwin, https://cygwin.com)
-AC_CONFIG_SRCDIR(Makefile.in)
-
-AC_CONFIG_AUX_DIR(../..)
-
-AC_NO_EXECUTABLES
-AC_CANONICAL_SYSTEM
-
-LIB_AC_PROG_CC
-
-case "$target_cpu" in
-i?86)
- AC_CHECK_PROGS(MINGW32_CC, i686-w64-mingw32-gcc)
- test -z "$MINGW32_CC" && AC_MSG_ERROR([no acceptable mingw32 cc found in \$PATH])
- ;;
-esac
-
-AC_CHECK_PROGS(MINGW64_CC, x86_64-w64-mingw32-gcc)
-test -z "$MINGW64_CC" && AC_MSG_ERROR([no acceptable mingw64 cc found in \$PATH])
-
-AC_ARG_PROGRAM
-
-AC_PROG_INSTALL
-
-AC_OUTPUT(Makefile cyglsa.def:cyglsa.din)
diff --git a/winsup/lsaauth/cyglsa-config b/winsup/lsaauth/cyglsa-config
deleted file mode 100755
index 076a16694..000000000
--- a/winsup/lsaauth/cyglsa-config
+++ /dev/null
@@ -1,123 +0,0 @@
-#!/bin/bash
-#
-# cyglsa-config, Copyright 2006, 2010 Red Hat 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.
-#
-# A copy of the GNU General Public License can be found at
-# http://www.gnu.org/
-#
-# This file is part of the Cygwin LSA authentication package.
-
-request()
-{
- if [ "${auto_answer}" = "yes" ]
- then
- echo "$1 (yes/no) yes"
- return 0
- elif [ "${auto_answer}" = "no" ]
- then
- echo "$1 (yes/no) no"
- return 1
- fi
-
- answer=""
- while [ "X${answer}" != "Xyes" -a "X${answer}" != "Xno" ]
- do
- echo -n "$1 (yes/no) "
- read -e answer
- done
- if [ "X${answer}" = "Xyes" ]
- then
- return 0
- else
- return 1
- fi
-}
-
-# Check if running under at least Windows 2000
-_nt_too_old=`uname | awk -F- '{print ( $2 < 5.0 ) ? 1 : 0;}'`
-if [ ${_nt_too_old} -eq 1 ]
-then
- echo "Cygwin LSA authentication not supported on Windows NT4 or older. Exiting."
- exit 1
-fi
-
-# Directory in which cyglsa DLL is installed as DOS path.
-bindir=`cygpath -w /`\\bin
-
-# Check if we're running on 64 bit Windows. If so, we need the 64 bit
-# cyglsa DLL.
-dll=cyglsa.dll
-test -d `cygpath -p ${SYSTEMROOT}`/SysWOW64 && dll=cyglsa64.dll
-
-# Check if the DLL is actually installed. If not, bail out.
-if [ ! -f /bin/${dll} ]
-then
- echo "Required Cygwin authentication DLL /bin/${dll} doesn't exist. Exiting."
- exit 1
-fi
-
-echo
-echo "Warning: Registering the Cygwin LSA authentication package requires"
-echo "administrator privileges! You also have to reboot the machine to"
-echo "activate the change."
-echo
-request "Are you sure you want to continue?" || exit 0
-
-# The registry value which keeps the authentication packages.
-value='/HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Lsa/Authentication Packages'
-
-[ -f /bin/cyglsa -a ! -d /bin/cyglsa ] && rm -rf /bin/cyglsa
-if [ ! -d /bin/cyglsa ]
-then
- if ! mkdir -m 755 /bin/cyglsa
- then
- echo "Creating the /bin/cyglsa directory failed. Exiting."
- exit 1
- fi
-fi
-if ! cp -b "/bin/${dll}" "/bin/cyglsa/${dll}"
-then
- echo "Copying the new LSA authentication package /bin/${dll} to"
- echo "/bin/cyglsa/${dll} failed. Exiting."
- exit 1
-fi
-
-# Get old content, remove every trace of "cyglsa" from it and write the
-# content back to the registry with the new, correct path to the cyglsa DLL.
-old=`regtool get "${value}"`
-new=`for i in ${old}
-do
- echo $i | GREP_OPTIONS="" grep -v cyglsa
-done`
-if ! regtool set "${value}" ${new} "${bindir}\\cyglsa\\${dll}"
-then
- echo "Setting the new registry value failed. Exiting."
- exit 1
-fi
-
-echo
-echo "Cygwin LSA authentication package registered."
-echo
-echo "Activating Cygwin's LSA authentication package requires to reboot."
-if [ -x /bin/shutdown ]
-then
- if request "Do you want to do this immediately?"
- then
- echo
- echo "Other users might still be working on this machine."
- echo
- if request "Are you sure?"
- then
- echo
- echo "Ok, will reboot in 30 seconds."
- echo
- echo "If you change your mind, call 'shutdown -a' within 30 seconds"
- shutdown -r 30
- fi
- fi
-fi
diff --git a/winsup/lsaauth/cyglsa.c b/winsup/lsaauth/cyglsa.c
deleted file mode 100644
index 341fdd12c..000000000
--- a/winsup/lsaauth/cyglsa.c
+++ /dev/null
@@ -1,633 +0,0 @@
-/* cyglsa.c: LSA authentication module for Cygwin
-
- Copyright 2006, 2008, 2010, 2011, 2012 Red Hat, Inc.
-
- Written by Corinna Vinschen <corinna@vinschen.de>
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for details. */
-
-#define WINVER 0x0600
-#include <ntstatus.h>
-#include <windows.h>
-#include <wininet.h>
-#include <lmcons.h>
-#include <iptypes.h>
-#include <ntsecapi.h>
-#include "../cygwin/cyglsa.h"
-#include "../cygwin/include/cygwin/version.h"
-
-static PLSA_SECPKG_FUNCS funcs;
-static BOOL must_create_logon_sid;
-
-BOOL APIENTRY
-DllMain (HINSTANCE inst, DWORD reason, LPVOID res)
-{
- switch (reason)
- {
- case DLL_PROCESS_ATTACH:
- case DLL_THREAD_ATTACH:
- case DLL_THREAD_DETACH:
- case DLL_PROCESS_DETACH:
- break;
- }
- return TRUE;
-}
-
-/* Declare NTDLL functions here to avoid problems with different
- header file layout in different compiler environments. */
-#ifndef NT_SUCCESS
-#define NT_SUCCESS(s) ((s) >= 0)
-#endif
-/* These standard POSIX functions are implemented in NTDLL and exported.
- There's just no header to define them and using wchar.h from mingw
- or Cygwin seems wrong somehow. */
-wchar_t *__cdecl wcscpy (wchar_t *, const wchar_t *);
-size_t __cdecl wcslen (const wchar_t *);
-
-#ifndef RtlInitEmptyUnicodeString
-__inline VOID NTAPI
-RtlInitEmptyUnicodeString(PUNICODE_STRING dest, PCWSTR buf, USHORT len)
-{
- dest->Length = 0;
- dest->MaximumLength = len;
- dest->Buffer = (PWSTR) buf;
-}
-#endif
-
-static PUNICODE_STRING
-uni_alloc (PWCHAR src, USHORT len)
-{
- PUNICODE_STRING tgt;
-
- if (!(tgt = funcs->AllocateLsaHeap (sizeof (UNICODE_STRING))))
- return NULL;
- tgt->Length = len * sizeof (WCHAR);
- tgt->MaximumLength = tgt->Length + sizeof (WCHAR);
- if (!(tgt->Buffer = funcs->AllocateLsaHeap (tgt->MaximumLength)))
- {
- funcs->FreeLsaHeap (tgt);
- return NULL;
- }
- wcscpy (tgt->Buffer, src);
- return tgt;
-}
-
-/* No, I don't want to include stdio.h so I take what ntdll offers. */
-extern int _vsnprintf (char *, size_t, const char *, va_list);
-
-static HANDLE fh = INVALID_HANDLE_VALUE;
-
-static int
-cyglsa_printf (const char *format, ...)
-{
- char buf[256];
- DWORD wr;
- int ret;
- va_list ap;
-
- if (fh == INVALID_HANDLE_VALUE)
- return 0;
-
- va_start (ap, format);
- ret = _vsnprintf (buf, 256, format, ap);
- va_end (ap);
- if (ret <= 0)
- return ret;
- if (ret > 256)
- ret = 255;
- buf[255] = '\0';
- WriteFile (fh, buf, ret, &wr, NULL);
- return wr;
-}
-
-static void
-print_sid (const char *prefix, int idx, PISID sid)
-{
- DWORD i;
-
- cyglsa_printf ("%s", prefix);
- if (idx >= 0)
- cyglsa_printf ("[%d] ", idx);
- cyglsa_printf ("(0x%08x) ", (INT_PTR) sid);
- if (!sid)
- cyglsa_printf ("NULL\n");
- else if (IsBadReadPtr (sid, 8))
- cyglsa_printf ("INVALID POINTER\n");
- else if (!IsValidSid ((PSID) sid))
- cyglsa_printf ("INVALID SID\n");
- else if (IsBadReadPtr (sid, 8 + sizeof (DWORD) * sid->SubAuthorityCount))
- cyglsa_printf ("INVALID POINTER SPACE\n");
- else
- {
- cyglsa_printf ("S-%d-%d", sid->Revision, sid->IdentifierAuthority.Value[5]);
- for (i = 0; i < sid->SubAuthorityCount; ++i)
- cyglsa_printf ("-%lu", sid->SubAuthority[i]);
- cyglsa_printf ("\n");
- }
-}
-
-static void
-print_groups (PTOKEN_GROUPS grps)
-{
- DWORD i;
-
- cyglsa_printf ("Groups: (0x%08x) ", (INT_PTR) grps);
- if (!grps)
- cyglsa_printf ("NULL\n");
- else if (IsBadReadPtr (grps, sizeof (DWORD)))
- cyglsa_printf ("INVALID POINTER\n");
- else if (IsBadReadPtr (grps, sizeof (DWORD) + sizeof (SID_AND_ATTRIBUTES)
- * grps->GroupCount))
- cyglsa_printf ("INVALID POINTER SPACE\n");
- else
- {
- cyglsa_printf ("Count: %lu\n", grps->GroupCount);
- for (i = 0; i < grps->GroupCount; ++i)
- {
- cyglsa_printf ("(attr: 0x%lx)", grps->Groups[i].Attributes);
- print_sid (" ", i, (PISID) grps->Groups[i].Sid);
- }
- }
-}
-
-static void
-print_privs (PTOKEN_PRIVILEGES privs)
-{
- DWORD i;
-
- cyglsa_printf ("Privileges: (0x%08x) ", (INT_PTR) privs);
- if (!privs)
- cyglsa_printf ("NULL\n");
- else if (IsBadReadPtr (privs, sizeof (DWORD)))
- cyglsa_printf ("INVALID POINTER\n");
- else if (IsBadReadPtr (privs, sizeof (DWORD) + sizeof (LUID_AND_ATTRIBUTES)
- * privs->PrivilegeCount))
- cyglsa_printf ("INVALID POINTER SPACE\n");
- else
- {
- cyglsa_printf ("Count: %lu\n", privs->PrivilegeCount);
- for (i = 0; i < privs->PrivilegeCount; ++i)
- cyglsa_printf ("Luid: {%ld, %lu} Attributes: 0x%lx\n",
- privs->Privileges[i].Luid.HighPart,
- privs->Privileges[i].Luid.LowPart,
- privs->Privileges[i].Attributes);
- }
-}
-
-static void
-print_dacl (PACL dacl)
-{
- DWORD i;
-
- cyglsa_printf ("DefaultDacl: (0x%08x) ", (INT_PTR) dacl);
- if (!dacl)
- cyglsa_printf ("NULL\n");
- else if (IsBadReadPtr (dacl, sizeof (ACL)))
- cyglsa_printf ("INVALID POINTER\n");
- else if (IsBadReadPtr (dacl, dacl->AclSize))
- cyglsa_printf ("INVALID POINTER SPACE\n");
- else
- {
- cyglsa_printf ("Rev: %d, Count: %d\n", dacl->AclRevision, dacl->AceCount);
- for (i = 0; i < dacl->AceCount; ++i)
- {
- PVOID vace;
- PACCESS_ALLOWED_ACE ace;
-
- if (!GetAce (dacl, i, &vace))
- cyglsa_printf ("[%lu] GetAce error %lu\n", i, GetLastError ());
- else
- {
- ace = (PACCESS_ALLOWED_ACE) vace;
- cyglsa_printf ("Type: %x, Flags: %x, Access: %lx,",
- ace->Header.AceType, ace->Header.AceFlags, (DWORD) ace->Mask);
- print_sid (" ", i, (PISID) &ace->SidStart);
- }
- }
- }
-}
-
-static void
-print_tokinf (PLSA_TOKEN_INFORMATION_V2 ptok, size_t size,
- PVOID got_start, PVOID gotinf_start, PVOID gotinf_end)
-{
- if (fh == INVALID_HANDLE_VALUE)
- return;
-
- cyglsa_printf ("INCOMING: start: 0x%08x infstart: 0x%08x infend: 0x%08x\n",
- (INT_PTR) got_start, (INT_PTR) gotinf_start,
- (INT_PTR) gotinf_end);
-
- cyglsa_printf ("LSA_TOKEN_INFORMATION_V2: 0x%08x - 0x%08x\n",
- (INT_PTR) ptok, (INT_PTR) ptok + size);
-
- /* User SID */
- cyglsa_printf ("User: (attr: 0x%lx)", ptok->User.User.Attributes);
- print_sid (" ", -1, (PISID) ptok->User.User.Sid);
-
- /* Groups */
- print_groups (ptok->Groups);
-
- /* Primary Group SID */
- print_sid ("Primary Group: ", -1, (PISID)ptok->PrimaryGroup.PrimaryGroup);
-
- /* Privileges */
- print_privs (ptok->Privileges);
-
- /* Owner */
- print_sid ("Owner: ", -1, (PISID) ptok->Owner.Owner);
-
- /* Default DACL */
- print_dacl (ptok->DefaultDacl.DefaultDacl);
-
- // CloseHandle (fh);
-}
-
-NTSTATUS NTAPI
-LsaApInitializePackage (ULONG authp_id, PLSA_SECPKG_FUNCS dpt,
- PLSA_STRING dummy1, PLSA_STRING dummy2,
- PLSA_STRING *authp_name)
-{
- PLSA_STRING name = NULL;
- DWORD vers, major, minor;
-
- /* Set global pointer to lsa helper function table. */
- funcs = dpt;
-
- /* Allocate and set the name of the authentication package. This is the
- name which has to be used in LsaLookupAuthenticationPackage. */
- if (!(name = funcs->AllocateLsaHeap (sizeof *name)))
- return STATUS_NO_MEMORY;
- if (!(name->Buffer = funcs->AllocateLsaHeap (sizeof (CYG_LSA_PKGNAME))))
- {
- funcs->FreeLsaHeap (name);
- return STATUS_NO_MEMORY;
- }
- name->Length = sizeof (CYG_LSA_PKGNAME) - 1;
- name->MaximumLength = sizeof (CYG_LSA_PKGNAME);
- strcpy (name->Buffer, CYG_LSA_PKGNAME);
- (*authp_name) = name;
-
- vers = GetVersion ();
- major = LOBYTE (LOWORD (vers));
- minor = HIBYTE (LOWORD (vers));
- /* Check if we're running on Windows 2000 or lower. If so, we must create
- the logon sid in the group list by ourselves. */
- if (major < 5 || (major == 5 && minor == 0))
- must_create_logon_sid = TRUE;
-
-#ifdef DEBUGGING
- fh = CreateFile ("C:\\cyglsa.dbgout", GENERIC_WRITE,
- FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
- NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
- cyglsa_printf ("Initialized\n");
-#endif /* DEBUGGING */
-
- return STATUS_SUCCESS;
-}
-
-NTSTATUS NTAPI
-LsaApLogonUserEx (PLSA_CLIENT_REQUEST request, SECURITY_LOGON_TYPE logon_type,
- PVOID auth, PVOID client_auth_base, ULONG auth_len,
- PVOID *pbuf, PULONG pbuf_len, PLUID logon_id,
- PNTSTATUS sub_stat, PLSA_TOKEN_INFORMATION_TYPE tok_type,
- PVOID *tok, PUNICODE_STRING *account,
- PUNICODE_STRING *authority, PUNICODE_STRING *machine)
-{
- DWORD checksum, i;
- PDWORD csp, csp_end;
- NTSTATUS stat;
- SECPKG_CLIENT_INFO clinf;
- PLSA_TOKEN_INFORMATION_V2 tokinf;
-
- cyglsa_t *authinf = (cyglsa_t *) auth;
-
- /* Check if the caller has the SeTcbPrivilege, otherwise refuse service. */
- stat = funcs->GetClientInfo (&clinf);
- if (stat != STATUS_SUCCESS)
- {
- cyglsa_printf ("GetClientInfo failed: 0x%08lx\n", stat);
- return stat;
- }
- if (!clinf.HasTcbPrivilege)
- {
- cyglsa_printf ("Client has no TCB privilege. Access denied.\n");
- return STATUS_ACCESS_DENIED;
- }
-
- /* Make a couple of validity checks. */
- if (auth_len < sizeof *authinf
- || authinf->magic != CYG_LSA_MAGIC
- || !authinf->username[0]
- || !authinf->domain[0])
- {
- cyglsa_printf ("Invalid authentication parameter.\n");
- return STATUS_INVALID_PARAMETER;
- }
- checksum = CYG_LSA_MAGIC;
- csp = (PDWORD) &authinf->username;
- csp_end = (PDWORD) ((PBYTE) authinf + auth_len);
- while (csp < csp_end)
- checksum += *csp++;
- if (authinf->checksum != checksum)
- {
- cyglsa_printf ("Invalid checksum.\n");
- return STATUS_INVALID_PARAMETER_3;
- }
-
- /* Set account to username and authority to domain resp. machine name.
- The name of the logon account name as returned by LookupAccountSid
- is created from here as "authority\account". */
- authinf->username[UNLEN] = '\0';
- authinf->domain[MAX_DOMAIN_NAME_LEN] = '\0';
- if (account && !(*account = uni_alloc (authinf->username,
- wcslen (authinf->username))))
- {
- cyglsa_printf ("No memory trying to create account.\n");
- return STATUS_NO_MEMORY;
- }
- if (authority && !(*authority = uni_alloc (authinf->domain,
- wcslen (authinf->domain))))
- {
- cyglsa_printf ("No memory trying to create authority.\n");
- return STATUS_NO_MEMORY;
- }
- if (machine)
- {
- WCHAR mach[MAX_COMPUTERNAME_LENGTH + 1];
- DWORD msize = MAX_COMPUTERNAME_LENGTH + 1;
- if (!GetComputerNameW (mach, &msize))
- wcscpy (mach, L"UNKNOWN");
- if (!(*machine = uni_alloc (mach, wcslen (mach))))
- {
- cyglsa_printf ("No memory trying to create machine.\n");
- return STATUS_NO_MEMORY;
- }
- }
- /* Create a fake buffer in pbuf which is free'd again in the client.
- Windows 2000 tends to crash when setting this pointer to NULL. */
- if (pbuf)
- {
-#ifdef JUST_ANOTHER_NONWORKING_SOLUTION
- cygprf_t prf;
- WCHAR sam_username[MAX_DOMAIN_NAME_LEN + UNLEN + 2];
- SECURITY_STRING sam_user, prefix;
- PUCHAR user_auth;
- ULONG user_auth_size;
- WCHAR flatname[UNLEN + 1];
- UNICODE_STRING flatnm;
- TOKEN_SOURCE ts;
- HANDLE token;
-#endif /* JUST_ANOTHER_NONWORKING_SOLUTION */
-
- stat = funcs->AllocateClientBuffer (request, 64UL, pbuf);
- if (!LSA_SUCCESS (stat))
- {
- cyglsa_printf ("AllocateClientBuffer failed: 0x%08lx\n", stat);
- return stat;
- }
-#ifdef JUST_ANOTHER_NONWORKING_SOLUTION
- prf.magic_pre = MAGIC_PRE;
- prf.token = NULL;
- prf.magic_post = MAGIC_POST;
-
-#if 0
- /* That's how it was supposed to work according to MSDN... */
- wcscpy (sam_username, authinf->domain);
- wcscat (sam_username, L"\\");
- wcscat (sam_username, authinf->username);
-#else
- /* That's the only solution which worked, and then it only worked
- for machine local accounts. No domain authentication possible.
- STATUS_NO_SUCH_USER galore! */
- wcscpy (sam_username, authinf->username);
-#endif
- RtlInitUnicodeString (&sam_user, sam_username);
- RtlInitUnicodeString (&prefix, L"");
- RtlInitEmptyUnicodeString (&flatnm, flatname,
- (UNLEN + 1) * sizeof (WCHAR));
-
- stat = funcs->GetAuthDataForUser (&sam_user, SecNameSamCompatible,
- NULL, &user_auth,
- &user_auth_size, &flatnm);
- if (!NT_SUCCESS (stat))
- {
- char sam_u[MAX_DOMAIN_NAME_LEN + UNLEN + 2];
- wcstombs (sam_u, sam_user.Buffer, sizeof (sam_u));
- cyglsa_printf ("GetAuthDataForUser (%u,%u,%s) failed: 0x%08lx\n",
- sam_user.Length, sam_user.MaximumLength, sam_u, stat);
- return stat;
- }
-
- memcpy (ts.SourceName, "Cygwin.1", 8);
- ts.SourceIdentifier.HighPart = 0;
- ts.SourceIdentifier.LowPart = 0x0104;
- RtlInitEmptyUnicodeString (&flatnm, flatname,
- (UNLEN + 1) * sizeof (WCHAR));
- stat = funcs->ConvertAuthDataToToken (user_auth, user_auth_size,
- SecurityDelegation, &ts,
- Interactive, *authority,
- &token, logon_id, &flatnm,
- sub_stat);
- if (!NT_SUCCESS (stat))
- {
- cyglsa_printf ("ConvertAuthDataToToken failed: 0x%08lx\n", stat);
- return stat;
- }
-
- stat = funcs->DuplicateHandle (token, &prf.token);
- if (!NT_SUCCESS (stat))
- {
- cyglsa_printf ("DuplicateHandle failed: 0x%08lx\n", stat);
- return stat;
- }
-
- stat = funcs->CopyToClientBuffer (request, sizeof prf, *pbuf, &prf);
- if (!NT_SUCCESS (stat))
- {
- cyglsa_printf ("CopyToClientBuffer failed: 0x%08lx\n", stat);
- return stat;
- }
- funcs->FreeLsaHeap (user_auth);
-#endif /* JUST_ANOTHER_NONWORKING_SOLUTION */
- }
- if (pbuf_len)
- *pbuf_len = 64UL;
-
- /* A PLSA_TOKEN_INFORMATION_V2 is allocated in one piece, so... */
-#if defined (__x86_64__) || defined (_M_AMD64)
- {
- /* ...on 64 bit systems we have to convert the incoming 32 bit offsets
- into 64 bit pointers. That requires to re-evaluate the size of the
- outgoing tokinf structure and a somewhat awkward procedure to copy
- the information over. */
- LONG_PTR base;
- PBYTE tptr;
- DWORD size, newsize;
- PSID src_sid;
- PCYG_TOKEN_GROUPS src_grps;
- PTOKEN_GROUPS grps;
- PTOKEN_PRIVILEGES src_privs;
- PACL src_acl;
-
- base = (LONG_PTR) &authinf->inf;
-
- newsize = authinf->inf_size;
- newsize += sizeof (TOKEN_USER) - sizeof (CYG_TOKEN_USER); /* User SID */
- newsize += sizeof (PTOKEN_GROUPS) - sizeof (OFFSET); /* Groups */
- src_grps = (PCYG_TOKEN_GROUPS) (base + authinf->inf.Groups);
- newsize += src_grps->GroupCount /* Group SIDs */
- * (sizeof (SID_AND_ATTRIBUTES)
- - sizeof (CYG_SID_AND_ATTRIBUTES));
- newsize += sizeof (PSID) - sizeof (OFFSET); /* Primary Group SID */
- newsize += sizeof (PTOKEN_PRIVILEGES) - sizeof (OFFSET); /* Privileges */
- newsize += 0; /* Owner SID */
- newsize += sizeof (PACL) - sizeof (OFFSET); /* Default DACL */
-
- if (!(tokinf = funcs->AllocateLsaHeap (newsize)))
- return STATUS_NO_MEMORY;
- tptr = (PBYTE)(tokinf + 1);
-
- tokinf->ExpirationTime = authinf->inf.ExpirationTime;
- /* User SID */
- src_sid = (PSID) (base + authinf->inf.User.User.Sid);
- size = GetLengthSid (src_sid);
- CopySid (size, (PSID) tptr, src_sid);
- tokinf->User.User.Sid = (PSID) tptr;
- tptr += size;
- tokinf->User.User.Attributes = authinf->inf.User.User.Attributes;
- /* Groups */
- grps = (PTOKEN_GROUPS) tptr;
- tokinf->Groups = grps;
- grps->GroupCount = src_grps->GroupCount;
- tptr += sizeof grps->GroupCount
- + grps->GroupCount * sizeof (SID_AND_ATTRIBUTES);
- /* Group SIDs */
- for (i = 0; i < src_grps->GroupCount; ++i)
- {
- src_sid = (PSID) (base + src_grps->Groups[i].Sid);
- size = GetLengthSid (src_sid);
- CopySid (size, (PSID) tptr, src_sid);
- tokinf->Groups->Groups[i].Sid = (PSID) tptr;
- tptr += size;
- tokinf->Groups->Groups[i].Attributes = src_grps->Groups[i].Attributes;
- }
- /* Primary Group SID */
- src_sid = (PSID) (base + authinf->inf.PrimaryGroup.PrimaryGroup);
- size = GetLengthSid (src_sid);
- CopySid (size, (PSID) tptr, src_sid);
- tokinf->PrimaryGroup.PrimaryGroup = (PSID) tptr;
- tptr += size;
- /* Privileges */
- src_privs = (PTOKEN_PRIVILEGES) (base + authinf->inf.Privileges);
- size = sizeof src_privs->PrivilegeCount
- + src_privs->PrivilegeCount * sizeof (LUID_AND_ATTRIBUTES);
- memcpy (tptr, src_privs, size);
- tokinf->Privileges = (PTOKEN_PRIVILEGES) tptr;
- tptr += size;
- /* Owner */
- tokinf->Owner.Owner = NULL;
- /* Default DACL */
- src_acl = (PACL) (base + authinf->inf.DefaultDacl.DefaultDacl);
- size = src_acl->AclSize;
- memcpy (tptr, src_acl, size);
- tokinf->DefaultDacl.DefaultDacl = (PACL) tptr;
- }
-#else
- {
- /* ...on 32 bit systems we just allocate tokinf with the same size as
- we get, copy the whole structure and convert offsets into pointers. */
-
- /* Allocate LUID for usage in the logon SID on Windows 2000. This is
- not done in the 64 bit code above for hopefully obvious reasons... */
- LUID logon_sid_id;
-
- if (must_create_logon_sid && !AllocateLocallyUniqueId (&logon_sid_id))
- return STATUS_INSUFFICIENT_RESOURCES;
-
- if (!(tokinf = funcs->AllocateLsaHeap (authinf->inf_size)))
- return STATUS_NO_MEMORY;
- memcpy (tokinf, &authinf->inf, authinf->inf_size);
-
- /* User SID */
- tokinf->User.User.Sid = (PSID)
- ((PBYTE) tokinf + (LONG_PTR) tokinf->User.User.Sid);
- /* Groups */
- tokinf->Groups = (PTOKEN_GROUPS)
- ((PBYTE) tokinf + (LONG_PTR) tokinf->Groups);
- /* Group SIDs */
- for (i = 0; i < tokinf->Groups->GroupCount; ++i)
- {
- tokinf->Groups->Groups[i].Sid = (PSID)
- ((PBYTE) tokinf + (LONG_PTR) tokinf->Groups->Groups[i].Sid);
- if (must_create_logon_sid
- && tokinf->Groups->Groups[i].Attributes & SE_GROUP_LOGON_ID
- && *GetSidSubAuthorityCount (tokinf->Groups->Groups[i].Sid) == 3
- && *GetSidSubAuthority (tokinf->Groups->Groups[i].Sid, 0)
- == SECURITY_LOGON_IDS_RID)
- {
- *GetSidSubAuthority (tokinf->Groups->Groups[i].Sid, 1)
- = logon_sid_id.HighPart;
- *GetSidSubAuthority (tokinf->Groups->Groups[i].Sid, 2)
- = logon_sid_id.LowPart;
- }
- }
-
- /* Primary Group SID */
- tokinf->PrimaryGroup.PrimaryGroup = (PSID)
- ((PBYTE) tokinf + (LONG_PTR) tokinf->PrimaryGroup.PrimaryGroup);
- /* Privileges */
- tokinf->Privileges = (PTOKEN_PRIVILEGES)
- ((PBYTE) tokinf + (LONG_PTR) tokinf->Privileges);
- /* Owner SID */
- tokinf->Owner.Owner = NULL;
- /* Default DACL */
- tokinf->DefaultDacl.DefaultDacl = (PACL)
- ((PBYTE) tokinf + (LONG_PTR) tokinf->DefaultDacl.DefaultDacl);
-
- }
-#endif
-
- *tok = (PVOID) tokinf;
- *tok_type = LsaTokenInformationV2;
-
- print_tokinf (tokinf, authinf->inf_size, authinf, &authinf->inf,
- (PVOID)((LONG_PTR) &authinf->inf + authinf->inf_size));
-
- /* Create logon session. */
- if (!AllocateLocallyUniqueId (logon_id))
- {
- funcs->FreeLsaHeap (*tok);
- *tok = NULL;
- cyglsa_printf ("AllocateLocallyUniqueId failed: Win32 error %lu\n",
- GetLastError ());
- return STATUS_INSUFFICIENT_RESOURCES;
- }
- stat = funcs->CreateLogonSession (logon_id);
- if (stat != STATUS_SUCCESS)
- {
- funcs->FreeLsaHeap (*tok);
- *tok = NULL;
- cyglsa_printf ("CreateLogonSession failed: 0x%08lx\n", stat);
- return stat;
- }
-
- cyglsa_printf ("BINGO!!!\n", stat);
- return STATUS_SUCCESS;
-}
-
-VOID NTAPI
-LsaApLogonTerminated(PLUID LogonId)
-{
-}
-
-NTSTATUS NTAPI
-LsaApCallPackage (PLSA_CLIENT_REQUEST request, PVOID authinf,
- PVOID client_auth_base, ULONG auth_len, PVOID *ret_buf,
- PULONG ret_buf_len, PNTSTATUS ret_stat)
-{
- return STATUS_NOT_IMPLEMENTED;
-}
diff --git a/winsup/lsaauth/cyglsa.din b/winsup/lsaauth/cyglsa.din
deleted file mode 100644
index 69eece0cb..000000000
--- a/winsup/lsaauth/cyglsa.din
+++ /dev/null
@@ -1,9 +0,0 @@
-LIBRARY "cyglsa"
-
-EXPORTS
-LsaApInitializePackage = LsaApInitializePackage@20
-LsaApLogonUserEx = LsaApLogonUserEx@56
-LsaApLogonTerminated = LsaApLogonTerminated@4
-LsaApCallPackage = LsaApCallPackage@28
-LsaApCallPackagePassthrough = LsaApCallPackage@28
-LsaApCallPackageUntrusted = LsaApCallPackage@28
diff --git a/winsup/lsaauth/cyglsa64.def b/winsup/lsaauth/cyglsa64.def
deleted file mode 100644
index 7b2d5921e..000000000
--- a/winsup/lsaauth/cyglsa64.def
+++ /dev/null
@@ -1,9 +0,0 @@
-LIBRARY "cyglsa64"
-
-EXPORTS
-LsaApInitializePackage
-LsaApLogonUserEx
-LsaApLogonTerminated
-LsaApCallPackage
-LsaApCallPackagePassthrough = LsaApCallPackage
-LsaApCallPackageUntrusted = LsaApCallPackage
diff --git a/winsup/testsuite/ChangeLog b/winsup/testsuite/ChangeLog
deleted file mode 100644
index e9cff49a0..000000000
--- a/winsup/testsuite/ChangeLog
+++ /dev/null
@@ -1,795 +0,0 @@
-2014-08-15 Corinna Vinschen <corinna@vinschen.de>
-
- * configure.ac: Convert to new AC_INIT style.
- * configure: Regenerate.
-
-2012-11-26 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * configure.ac: Rename from configure.in.
- * configure.in: Delete.
- * configure: Regenerate.
-
-2012-11-23 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * Makefile.in: Remove old Makefile.common'isms. Don't rely on
- in-build tools.
-
-2012-04-24 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * configure: Regenerate.
-
-2011-03-21 Corinna Vinschen <corinna@vinschen.de>
-
- * libltp/lib/get_high_address.c: Align copyright with upstream.
-
-2009-11-01 Christopher Faylor <me+cygwin@cgf.cx>
-
- * Makefile.in: Use utils mingw front-end to generate non-cygwin binary.
-
-2008-11-26 Christopher Faylor <me+cygwin@cgf.cx>
-
- * Revert erroneous checkin.
-
-2006-07-23 Christopher Faylor <cgf@timesys.com>
-
- * Makefile.in: Update copyright. Remove unused stuff.
-
-2006-07-17 Christopher Faylor <cgf@timesys.com>
-
- * Makefile.in: Simplify a little.
-
-2006-06-12 Pierre Humblet Pierre.Humblet@ieee.org
-
- * winsup.api/user_malloc.c: New file.
-
-2006-05-30 Christopher Faylor <cgf@timesys.com>
-
- * winsup.api/cygload.h: Increase padding to 32768.
-
-2006-05-24 Christopher Faylor <cgf@timesys.com>
-
- * configure.in: Update to newer autoconf.
- (thanks to Steve Ellcey)
- * configure: Regenerate.
- * aclocal.m4: New file.
-
-2006-03-23 Christopher Faylor <cgf@timesys.com>
-
- * winsup.api/checksignal.c (main): Add test for siginterrupt.
-
-2006-01-02 Christopher Faylor <cgf@timesys.com>
-
- * cygload/README: Delete.
- * cygload/cygload.cc: Move to winsup.api. Add comments from README.
- * cygload/cygload.h: Move to winsup.api.
- * cygload/cygload.exp: Move to winsup.api.
- * Makefile.in: Remove cygload.
- * winsup.api/winsup.exp: If a .exp file is detected, run it rather than
- using standard compile.
-
- * winsup.api/resethand.c (main): Use printf to print status or expect
- thinks something is wrong.
-
-2006-01-01 Christopher Faylor <cgf@timesys.com>
-
- * winsup.api/resethand.c (main): Remove core dump flag from exit
- status.
-
-2006-01-01 Christopher Faylor <cgf@timesys.com>
-
- * winsup.api/resethand.c (main): Coerce argument to pointer to stop gcc
- complaint.
-
-2006-01-01 Christopher Faylor <cgf@timesys.com>
-
- * winsup.api/resethand.c: Use SIGSEGV for the signal to test.
-
-2006-01-01 Christopher Faylor <cgf@timesys.com>
-
- * winsup.api/resethand.c: New file.
-
-2005-12-11 Christopher Faylor <cgf@timesys.com>
-
- * winsup.api/ltp/dup03.c (cleanup): Fix longstanding off-by-one error
- when setting array element to -1.
-
-2005-06-11 Christopher Faylor <cgf@timesys.com>
-
- * winsup.api/pthread/cancel2.c: Use explicit initializer for mutex.
- * winsup.api/pthread/mutex4.c (main): Ditto.
- * winsup.api/pthread/mutex5.c: Reflect change in cygwin default mutex type.
- * winsup.api/pthread/mutex6d.c: Ditto.
-
-2005-06-10 Christopher Faylor <cgf@timesys.com>
-
- * winsup.api/winsup.exp: Remove (temporarily?) -nostdinc from build
- since it causes compile failures with gcc 3.4.4.
-
-2005-06-06 Christopher Faylor <cgf@timesys.com>
-
- * cygload/cygload.exp: .cpp -> .cc.
-
-2005-06-06 Max Kaehn <slothman@electric-cloud.com>
-
- * Makefile.in: Test cygload.
- * cygload: New directory.
- * cygload/README: New file.
- * cygload/Makefile: Ditto.
- * cygload/cygload.h: Ditto.
- * cygload/cygload.cc: Ditto.
- * cygload/cygload.exp: Ditto.
-
-2005-05-17 Brian Dessent <brian@dessent.net>
-
- * winsup.api/signal-into-win32-api.c (main): Use 'NULL' instead of '0'
- in argument list to avoid compiler warning with gcc4.
- * winsup.api/ltp/execle01.c (main): Ditto.
- * winsup.api/ltp/execlp01.c (main): Ditto.
- * winsup.api/ltp/fcntl07.c (do_exec): Ditto.
- * winsup.api/ltp/fcntl07B.c (do_exec): Ditto.
-
-2005-02-10 Christopher Faylor <cgf@timesys.com>
-
- * winsup.api/known_bugs.tcl: Remove dup05, fcntl07B, lseek04, select03,
- unlink06.
- * winsup.api/mmaptest03.c: Make a little more verbose so that it is
- easier to figure out where something failed.
-
-2005-01-09 Christopher Faylor <cgf@timesys.com>
-
- * cygrun.c (main): Fix exit code so that it reflects UNIX style.
- * winsup.api/ltp/fork04.c (setup): Accommodate change in putenv
- declaration.
-
-2004-08-24 Corinna Vinschen <corinna@vinschen.de>
-
- * winsup.api/mmaptest01.c (main): Accomodate 9x memory usage.
-
-2004-08-24 Corinna Vinschen <corinna@vinschen.de>
-
- * winsup.api/ltp/symlink01.c (do_link): Print inode numbers using %llu
- format specifier.
-
-2004-08-17 Gerd Spalink <Gerd.Spalink@t-online.de>
- Pierre Humblet <Pierre.Humblet@ieee.org>
-
- * devdsp.c: Outputs the names of the main test functions.
- (forkrectest): Expect child success.
- (forkplaytest): Ditto.
- (syncwithchild): Output the child status and the desired value.
- (sinegenw): Reduce volume of the beep.
- (sinegenb): Ditto.
- (dup_test): New test.
-
-2004-04-13 Gerd Spalink <Gerd.Spalink@t-online.de>
-
- * winsup.api/devdsp.c (forkrectest): Move synchronization with child
- so that test passes also under high CPU load.
- (forkplaytest): Ditto.
- (abortplaytest): New function to test ioctl code SNDCTL_DSP_RESET.
-
-2004-04-04 Gerd Spalink <Gerd.Spalink@t-online.de>
-
- * winsup.api/devdsp.c (ioctltest): Add 2 tests for ioctl codes
- SNDCTL_DSP_CHANNELS and SNDCTL_DSP_GETCAPS.
-
-2004-03-24 Gerd Spalink <Gerd.Spalink@t-online.de>
-
- * winsup.api/devdsp.c: New file, testing fhandler_dev_dsp code.
- * winsup.api/devdsp_okay.h: Ditto.
-
-2004-03-06 Christopher Faylor <cgf@redhat.com>
-
- * winsup.api/known_bugs.tcl: Remove mknod01 since mknod now works.
- * winsup.api/ltp/mknod01.c: Remove root check when running on cygwin.
-
-2004-03-04 Thomas Pfaff <tpfaff@gmx.net>
-
- * winsup.api/pthread/mutex8e.c: New testcase.
- * winsup.api/pthread/mutex8n.c: Ditto.
- * winsup.api/pthread/mutex8r.c: Ditto.
-
-2003-12-23 Christopher Faylor <cgf@redhat.com>
-
- * winsup.api/pthread/rwlock7.c (main): Don't assume that result of rand
- operation is non-zero.
-
-2003-12-01 Corinna Vinschen <corinna@vinschen.de>
-
- * winsup.api/known_bugs.tcl: Remove fcntl09 and fcntl10. These
- tests had a compatibility bug.
- * winsup.api/ltp/fcntl09.c: Don't use F_RDLCK | F_WRLCK but only
- F_WRLCK to set a write lock.
- * winsup.api/ltp/fcntl10.c: Ditto.
-
-2003-11-25 Christopher Faylor <cgf@redhat.com>
-
- * winsup.api/known_bugs.tcl: Remove lseek10 since mknod now works.
-
-2003-11-20 Corinna Vinschen <corinna@vinschen.de>
-
- * winsup.api/msgtest.c (main): Revert to use the SIGSYS signal handler.
- * winsup.api/semtest.c (main): Ditto.
- * winsup.api/shmtest.c (main): Ditto.
-
-2003-11-19 Corinna Vinschen <corinna@vinschen.de>
-
- * winsup.api/msgtest.c: New file derived from FreeBSD, testing
- XSI Message Queue support.
- * winsup.api/semtest.c: Ditto, testing XSI Semaphore support.
- * winsup.api/shmtest.c: Ditto, testing XSI Shared Memory support.
-
-2003-07-06 Christopher Faylor <cgf@redhat.com>
-
- * winsup.api/known_bugs.tcl: Remove gethostid01 from list of known
- bugs.
-
-2003-07-06 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Remove .dat files when cleaning.
-
-2003-07-06 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Remove .d files when cleaning.
-
-2003-05-09 Corinna Vinschen <corinna@vinschen.de>
-
- * libltp/include/test.h: Remove gethostid declaration.
-
-2003-04-08 Thomas Pfaff <tpfaff@gmx.net>
-
- * winsup.api/pthread/condvar9.c: Fix test.
-
-2003-03-27 Thomas Pfaff <tpfaff@gmx.net>
-
- * winsup.api/pthread/rwlock1.c: Remove pthreads-win32 header.
- * winsup.api/pthread/rwlock2.c: Ditto.
- * winsup.api/pthread/rwlock3.c: Ditto.
- * winsup.api/pthread/rwlock4.c: Ditto.
- * winsup.api/pthread/rwlock5.c: Ditto.
- * winsup.api/pthread/rwlock6.c: Ditto.
-
-2003-03-27 Brian Ford <ford@vss.fsi.com>
-
- * winsup.api/pthread/condvar7.c (mythread): Cast
- pthread_mutex_unlock argument of pthread_cleanup_push
- to void *, preventing a compiler warning / testsuite failure.
- * winsup.api/pthread/condvar9.c (mythread): Likewise.
- * winsup.api/pthread/rwlock7.c (main): Use ftime instead of
- _ftime.
-
-2003-03-18 Thomas Pfaff <tpfaff@gmx.net>
-
- * winsup.api/pthread/rwlock1.c: New test.
- * winsup.api/pthread/rwlock2.c: Ditto.
- * winsup.api/pthread/rwlock3.c: Ditto.
- * winsup.api/pthread/rwlock4.c: Ditto.
- * winsup.api/pthread/rwlock5.c: Ditto.
- * winsup.api/pthread/rwlock6.c: Ditto.
- * winsup.api/pthread/rwlock7.c: Ditto.
-
-2003-03-18 Thomas Pfaff <tpfaff@gmx.net>
-
- * winsup.api/pthread/condvar7.c: New test.
- * winsup.api/pthread/condvar9.c: Ditto.
-
-2003-03-18 Thomas Pfaff <tpfaff@gmx.net>
-
- * winsup.api/pthread/mutex1n.c: New test.
- * winsup.api/pthread/mutex6n.c: Ditto.
- * winsup.api/pthread/mutex7n.c: Ditto.
-
-2003-03-09 Christopher Faylor <cgf@redhat.com>
-
- * winsup.api/winsup.exp: Use -nostdinc when compiling.
- * Makefile.in: Specifically search compiler include directory since it
- is now stripped via -nostdinc.
-
-2003-03-09 Corinna Vinschen <corinna@vinschen.de>
-
- * winsup.api/ltp/fork10.c (main): Remove non-portable declaration
- of lseek.
-
-2003-03-09 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Use "cygwin0" rather than "new-cygwin" to denote
- in-build-tree version of library or dll.
- * config/default.exp: Ditto.
- * winsup.api/winsup.exp: Ditto.
-
-2003-03-07 Corinna Vinschen <corinna@vinschen.de>
-
- * winsup.api/known_bugs.tcl: Remove fsync01, setregid01 and setreuid01
- from list of known bugs.
-
-2003-02-19 Vaclav Haisman <V.Haisman@sh.cvut.cz>
-
- * winsup.api/crlf.c: Fix C signed/unsigned compare warning.
- * winsup.api/mmaptest01.c: Ditto.
- * winsup.api/ltp/chmod01.c: Ditto.
- * winsup.api/ltp/fork04.c: Ditto.
- * winsup.api/ltp/lseek03.c: Ditto.
- * winsup.api/ltp/lseek06.c: Ditto.
- * winsup.api/ltp/lseek07.c: Ditto.
- * winsup.api/ltp/lseek08.c: Ditto.
- * winsup.api/ltp/mmap001.c: Ditto.
- * winsup.api/ltp/mmap02.c: Ditto.
- * winsup.api/ltp/mmap03.c: Ditto.
- * winsup.api/ltp/mmap04.c: Ditto.
- * winsup.api/ltp/mmap05.c: Ditto.
- * winsup.api/ltp/mmap06.c: Ditto.
- * winsup.api/ltp/mmap07.c: Ditto.
- * winsup.api/ltp/mmap08.c: Ditto.
- * winsup.api/ltp/pipe11.c: Ditto.
- * winsup.api/ltp/poll01.c: Ditto.
- * winsup.api/ltp/sync02.c: Ditto.
- * winsup.api/ltp/times03.c: Ditto.
- * winsup.api/ltp/umask03.c: Ditto.
- * winsup.api/ltp/getpgid01.c: Remove unused obsolete include.
- * winsup.api/ltp/getpgid02.c: Ditto.
-
-2003-02-08 Christopher Faylor <cgf@redhat.com>
-
- * winsup.api/winsup.exp (ws_spawn): Tweak slightly to work with tcl
- 8.4.1.
-
-2003-02-07 Christopher Faylor <cgf@redhat.com>
-
- * libltp/lib/parse_opts.c: Deal with C warnings.
- * winsup.api/pthread/cancel12.c: Ditto.
- * winsup.api/winsup.exp: Don't use -g3.
-
-2003-02-04 Thomas Pfaff <tpfaff@gmx.net>
-
- * winsup.api/pthread/cancel11.c: New test.
- * winsup.api/pthread/cancel12.c: Ditto.
-
-2003-01-23 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Don't filter out -g. Actually pass correct CFLAGS to
- site.exp.
- * winsup.api/winsup.exp: Use -g flag from CFLAGS.
-
-2003-01-23 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Turn off all optimizations.
- * libltp/lib/parse_opts.c (TEST_VALID_ENO): Move define outside of
- conditional.
- (TEST_ERRNO): Ditto.
- (btime): Ditto.
- (etime): Ditto.
- (tmptime): Ditto.
-
-2003-01-23 Christopher Faylor <cgf@redhat.com>
-
- * libltp/include/usctest.h: Add externs to some variables that need it.
- * winsup.api/ltp/mmap05.c (main): Make file_content volatile to avoid
- optimization glitch.
-
-2003-01-23 Christopher Faylor <cgf@redhat.com>
-
- * winsup.api/mmaptest03.c (main): Mark variables as volatile to avoid
- optimization induced problems.
-
-2003-01-23 Christopher Faylor <cgf@redhat.com>
-
- * Makefile (check): Add cygrun.exe dependency.
-
-2003-01-23 Christopher Faylor <cgf@redhat.com>
-
- Perform more C warning fixup on all C source files and headers.
-
-2003-01-23 Christopher Faylor <cgf@redhat.com>
-
- * libltp/include/test.h: Fix C warnings.
- * winsup.api/checksignal.c: Ditto.
- * winsup.api/crlf.c: Ditto.
- * winsup.api/devzero.c: Ditto.
- * winsup.api/iospeed.c: Ditto.
- * winsup.api/mmaptest01.c: Ditto.
- * winsup.api/mmaptest02.c: Ditto.
- * winsup.api/mmaptest03.c: Ditto.
- * winsup.api/mmaptest04.c: Ditto.
- * winsup.api/nullgetcwd.c: Ditto.
- * winsup.api/sigchld.c: Ditto.
- * winsup.api/signal-into-win32-api.c: Ditto.
- * winsup.api/systemcall.c: Ditto.
- * winsup.api/waitpid.c: Ditto.
- * winsup.api/pthread/mainthreadexits.c: Ditto.
- * winsup.api/pthread/test.h: Ditto.
- * winsup.api/pthread/threadidafterfork.c: Ditto.
-
- * Makefile.in: Remove cygrun.exe from RUNTIME since it is built here
- now.
-
-2003-01-23 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Use ALL_CFLAGS to build test programs so that correct
- libraries and other options are used.
-
-2003-01-22 Corinna Vinschen <corinna@vinschen.de>
-
- * cygrun.c: Move here from ../cygwin.
- * Makefile.in: Build cygrun.exe.
- * winsup.api/winsup.exp: Expect cygrun.exe in $rootme.
-
-2003-01-21 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Find tcl library in the right place.
-
-2003-01-21 Thomas Pfaff <tpfaff@gmx.net>
-
- * winsup.api/pthread/cancel9.c: Make child pid static global.
- (main): Wait in mainthread until child process has terminated.
-
-2003-01-14 Thomas Pfaff <tpfaff@gmx.net>
-
- * winsup.api/pthread/cancel10.c: New test.
-
-2003-01-14 Thomas Pfaff <tpfaff@gmx.net>
-
- * winsup.api/pthread/cancel9.c: New test.
-
-2003-01-14 Thomas Pfaff <tpfaff@gmx.net>
-
- * winsup.api/pthread/cancel7.c: New test.
- * winsup.api/pthread/cancel8.c: Ditto.
-
-2003-01-14 Thomas Pfaff <tpfaff@gmx.net>
-
- * winsup.api/pthread/cancel6.c: New test.
-
-2003-01-09 Thomas Pfaff <tpfaff@gmx.net>
-
- * winsup.api/pthread/mutex1d.c: New test. Port from pthreads-win32
- project.
- * winsup.api/pthread/mutex1e.c: Ditto.
- * winsup.api/pthread/mutex4.c: Ditto.
- * winsup.api/pthread/mutex5.c: Ditto.
- * winsup.api/pthread/mutex6d.c: Ditto.
- * winsup.api/pthread/mutex6e.c: Ditto.
- * winsup.api/pthread/mutex7.c: Ditto.
- * winsup.api/pthread/mutex7d.c: Ditto.
- * winsup.api/pthread/mutex7e.c: Ditto.
- * winsup.api/pthread/mutex7r.c: Ditto.
-
-2002-11-25 Robert Collins <rbtcollins@hotmail.com>
-
- * readme: Document running portions of the test suite (Thanks Egor!).
- * winsup.api/pthread/mainthreadexits.c: New file, derived from
- Thomas Pfaff's test cases.
- * winsup.api/pthread/threadidafterfork.c: Ditto.
-
-2002-08-25 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in (RUNTEST): Use Makefile's srcdir and bupdir* macros,
- where appropriate.
- * winsup.api/winsup.exp: Use -nodefaultlibs when linking executable to
- avoid potentially linking installed dll.
-
-2002-07-06 Christopher Faylor <cgf@redhat.com>
-
- * testsuite/winsup.api/winsup.exp: Add -mwin32 to gcc flags so
- windows.h will be found.
-
-2002-07-04 Egor Duda <deo@logos-m.ru>
-
- * winsup.api/pthread/cancel1.c: New test. Port from pthreads-win32
- project.
- * winsup.api/pthread/cancel2.c: Ditto.
- * winsup.api/pthread/cancel3.c: Ditto.
- * winsup.api/pthread/cancel4.c: Ditto.
- * winsup.api/pthread/cancel5.c: Ditto.
-
-2002-07-03 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Eliminate unneeded Makefile recreation rule.
-
-2002-02-27 Christopher Faylor <cgf@redhat.com>
-
- * winsup.api/systemcall.c (main): Ensure that stdin is redirected.
-
-2001-11-18 Egor Duda <deo@logos-m.ru>
-
- * winsup.api/pthread/condvar3_1.c: Fix debugging output.
-
-2001-11-15 Egor Duda <deo@logos-m.ru>
-
- * winsup.api/pthread/: New directory. Ports of pthread functionality
- tests from pthreads-win32 project.
- * winsup.api/pthread/test.h: Commmon declaraions for pthread tests.
- * winsup.api/pthread/cleanup2.c: New test.
- * winsup.api/pthread/cleanup3.c: Ditto.
- * winsup.api/pthread/condvar1.c: Ditto.
- * winsup.api/pthread/condvar2.c: Ditto.
- * winsup.api/pthread/condvar2_1.c: Ditto.
- * winsup.api/pthread/condvar3.c: Ditto.
- * winsup.api/pthread/condvar3_1.c: Ditto.
- * winsup.api/pthread/condvar3_2.c: Ditto.
- * winsup.api/pthread/condvar3_3.c: Ditto.
- * winsup.api/pthread/condvar4.c: Ditto.
- * winsup.api/pthread/condvar5.c: Ditto.
- * winsup.api/pthread/condvar6.c: Ditto.
- * winsup.api/pthread/condvar8.c: Ditto.
- * winsup.api/pthread/count1.c: Ditto.
- * winsup.api/pthread/create1.c: Ditto.
- * winsup.api/pthread/create2.c: Ditto.
- * winsup.api/pthread/equal1.c: Ditto.
- * winsup.api/pthread/exit1.c: Ditto.
- * winsup.api/pthread/exit2.c: Ditto.
- * winsup.api/pthread/exit3.c: Ditto.
- * winsup.api/pthread/inherit1.c: Ditto.
- * winsup.api/pthread/join0.c: Ditto.
- * winsup.api/pthread/join1.c: Ditto.
- * winsup.api/pthread/join2.c: Ditto.
- * winsup.api/pthread/mutex1.c: Ditto.
- * winsup.api/pthread/mutex1r.c: Ditto.
- * winsup.api/pthread/mutex2.c: Ditto.
- * winsup.api/pthread/mutex3.c: Ditto.
- * winsup.api/pthread/mutex6r.c: Ditto.
- * winsup.api/pthread/once1.c: Ditto.
- * winsup.api/pthread/priority1.c: Ditto.
- * winsup.api/pthread/priority2.c: Ditto.
- * winsup.api/pthread/self1.c: Ditto.
- * winsup.api/pthread/self2.c: Ditto.
- * winsup.api/pthread/tsd1.c: Ditto.
-
-2001-11-08 Corinna Vinschen <corinna@vinschen.de>
-
- * checksignal.c: New testcase.
-
-2001-11-04 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Oops. Revert previous change. Add Makefile/Makefile.in
- dependency.
-
-2001-11-04 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Add check target.
-
-2001-11-02 Egor Duda <deo@logos-m.ru>
-
- * libltp/lib/forker.c: Include proper header to avoid compiler
- warning.
-
-2001-10-29 Egor Duda <deo@logos-m.ru>
-
- * winsup.api/ltp/stat03.c: Supress compiler warning.
-
-2001-10-29 Egor Duda <deo@logos-m.ru>
-
- * winsup.api/signal-into-win32-api.c: Supress compiler warning.
-
-Mon Oct 8 14:15:00 2001 Corinna Vinschen <corinna@vinschen.de>
-
- * winsup.api/mmaptest01.c: Add several tests on mmaps. Use libltp.
- * winsup.api/winsup.exp: Link all tests agains libltp.
-
-Fri Oct 5 11:15:55 2001 Christopher Faylor <cgf@cygnus.com>
-
- * winsup.api/nullgetcwd.c: New file. Check that NULL first argument to
- getcwd works.
-
-Thu Oct 4 22:47:51 2001 Christopher Faylor <cgf@cygnus.com>
-
- * winsup.api/systemcall.c (main): Change some messages for clarity.
-
-Thu Oct 4 22:19:39 2001 Christopher Faylor <cgf@cygnus.com>
-
- * winsup.api/systemcall.c: New file. Check for system call problems.
-
-2001-09-20 Egor Duda <deo@logos-m.ru>
-
- * libltp/lib/get_high_address.c (get_high_address): Get inaccessible
- address more robustly.
- * winsup.api/ltp/stat06.c (high_address_setup): Use generic function
- from ltp library to obtain inaccessible address.
-
-2001-09-15 Egor Duda <deo@logos-m.ru>
-
- * winsup.api/ltp/sbrk01.c (main): Force output at startup to
- make sure that stdio file buffer get allocated.
- * winsup.api/ltp/stat06.c (high_address_setup): On cygwin, area
- after sbrk(0) may be available, use 0xffff0000 as "high address".
- * winsup.api/ltp/symlink01.c: Perform all tests. Mark those tests that
- don't work on cygwin with '-1'. Close open files so that temporary
- directory can be deleted on exit.
- * winsup.api/ltp/vfork01.c: New test.
-
-2001-09-13 Egor Duda <deo@logos-m.ru>
-
- * winsup.api/winsup.exp: Run only selected test if environment
- variable CYGWIN_TESTSUITE_TESTS is set. Use its value as regular
- expression to filter test names.
- * winsup.api/ltp/symlink01.c (creat_path_max): Provide explicit
- buffer to getcwd to conform to standards and avoid memory leak.
- (do_chdir): Ditto.
-
-2001-09-13 Egor Duda <deo@logos-m.ru>
-
- * libltp/lib/tst_sig.c: Pass SIGSEGV to application to consider
- whether it's expected or not.
- * winsup.api/known_bugs.tcl: lseek10 is known to fail because mknod
- is not implemented.
- * winsup.api/ltp/rename02.c: Fix formatting.
- * libltp/lib/libtestsuite.c: New file.
- * winsup.api/signal-into-win32-api.c: New test.
- * winsup.api/ltp/access04.c: Ditto.
- * winsup.api/ltp/access05.c: Ditto.
- * winsup.api/ltp/alarm07.c: Ditto.
- * winsup.api/ltp/chdir04.c: Ditto.
- * winsup.api/ltp/chmod01.c: Ditto.
- * winsup.api/ltp/close01.c: Ditto.
- * winsup.api/ltp/close02.c: Ditto.
- * winsup.api/ltp/creat01.c: Ditto.
- * winsup.api/ltp/creat03.c: Ditto.
- * winsup.api/ltp/exit01.c: Ditto.
- * winsup.api/ltp/exit02.c: Ditto.
- * winsup.api/ltp/fchdir01.c: Ditto.
- * winsup.api/ltp/fchdir02.c: Ditto.
- * winsup.api/ltp/fork02.c: Ditto.
- * winsup.api/ltp/fork03.c: Ditto.
- * winsup.api/ltp/fork06.c: Ditto.
- * winsup.api/ltp/fork07.c: Ditto.
- * winsup.api/ltp/fork09.c: Ditto.
- * winsup.api/ltp/fork10.c: Ditto.
- * winsup.api/ltp/fork11.c: Ditto.
- * winsup.api/ltp/fstat02.c: Ditto.
- * winsup.api/ltp/fstat03.c: Ditto.
- * winsup.api/ltp/fstat04.c: Ditto.
- * winsup.api/ltp/ftruncate01.c: Ditto.
- * winsup.api/ltp/ftruncate02.c: Ditto.
- * winsup.api/ltp/ftruncate03.c: Ditto.
- * winsup.api/ltp/getgid02.c: Ditto.
- * winsup.api/ltp/getgid03.c: Ditto.
- * winsup.api/ltp/getpgid01.c: Ditto.
- * winsup.api/ltp/getpgid02.c: Ditto.
- * winsup.api/ltp/getpid02.c: Ditto.
- * winsup.api/ltp/getppid02.c: Ditto.
- * winsup.api/ltp/getuid02.c: Ditto.
- * winsup.api/ltp/getuid03.c: Ditto.
- * winsup.api/ltp/kill01.c: Ditto.
- * winsup.api/ltp/kill02.c: Ditto.
- * winsup.api/ltp/kill03.c: Ditto.
- * winsup.api/ltp/kill04.c: Ditto.
- * winsup.api/ltp/lseek06.c: Ditto.
- * winsup.api/ltp/lseek07.c: Ditto.
- * winsup.api/ltp/lseek08.c: Ditto.
- * winsup.api/ltp/lseek09.c: Ditto.
- * winsup.api/ltp/lseek10.c: Ditto.
- * winsup.api/ltp/mmap02.c: Ditto.
- * winsup.api/ltp/mmap03.c: Ditto.
- * winsup.api/ltp/mmap04.c: Ditto.
- * winsup.api/ltp/mmap05.c: Ditto.
- * winsup.api/ltp/mmap06.c: Ditto.
- * winsup.api/ltp/mmap07.c: Ditto.
- * winsup.api/ltp/mmap08.c: Ditto.
- * winsup.api/ltp/munmap01.c: Ditto.
- * winsup.api/ltp/munmap02.c: Ditto.
- * winsup.api/ltp/open02.c: Ditto.
- * winsup.api/ltp/pipe01.c: Ditto.
- * winsup.api/ltp/pipe08.c: Ditto.
- * winsup.api/ltp/pipe09.c: Ditto.
- * winsup.api/ltp/pipe10.c: Ditto.
- * winsup.api/ltp/pipe11.c: Ditto.
- * winsup.api/ltp/poll01.c: Ditto.
- * winsup.api/ltp/read04.c: Ditto.
- * winsup.api/ltp/readlink01.c: Ditto.
- * winsup.api/ltp/readlink03.c: Ditto.
- * winsup.api/ltp/rename01.c: Ditto.
- * winsup.api/ltp/rename08.c: Ditto.
- * winsup.api/ltp/rename10.c: Ditto.
- * winsup.api/ltp/rmdir01.c: Ditto.
- * winsup.api/ltp/stat01.c: Ditto.
- * winsup.api/ltp/stat02.c: Ditto.
- * winsup.api/ltp/stat03.c: Ditto.
- * winsup.api/ltp/symlink03.c: Ditto.
- * winsup.api/ltp/symlink04.c: Ditto.
- * winsup.api/ltp/symlink05.c: Ditto.
- * winsup.api/ltp/sync02.c: Ditto.
- * winsup.api/ltp/time02.c: Ditto.
- * winsup.api/ltp/times02.c: Ditto.
- * winsup.api/ltp/times03.c: Ditto.
- * winsup.api/ltp/truncate01.c: Ditto.
- * winsup.api/ltp/truncate02.c: Ditto.
- * winsup.api/ltp/umask02.c: Ditto.
- * winsup.api/ltp/umask03.c: Ditto.
- * winsup.api/ltp/wait401.c: Ditto.
- * winsup.api/ltp/wait402.c: Ditto.
- * winsup.api/ltp/write02.c: Ditto.
- * winsup.api/ltp/write03.c: Ditto.
-
-2001-09-09 Egor Duda <deo@logos-m.ru>
-
- * winsup.api/ltp/dup03.c: New test.
- * winsup.api/ltp/lseek03.c: Ditto.
- * winsup.api/ltp/mmap001.c: Ditto.
- * winsup.api/ltp/read01.c: Ditto.
- * winsup.api/ltp/readdir01.c: Ditto.
- * winsup.api/ltp/rmdir05.c: Ditto.
- * winsup.api/ltp/sbrk01.c: Ditto.
- * winsup.api/ltp/select02.c: Ditto.
- * winsup.api/ltp/select03.c: Ditto.
- * winsup.api/ltp/signal03.c: Ditto.
- * winsup.api/ltp/stat06.c: Ditto.
- * winsup.api/ltp/unlink08.c: Ditto.
- * winsup.api/known_bugs.tcl: Update to reflect new test's known
- failures.
- * winsup.api/winsup.exp: Don't delete executable in case of
- unexpected pass, as well as in case of unexpected failure.
- * README: Update paragraph about expected failures.
-
-2001-05-21 Corinna Vinschen <corinna@vinschen.de>
-
- * winsup.api/mmaptest01.c: Add log output.
- * winsup.api/mmaptest02.c: Write log output to stdout.
- * winsup.api/mmaptest03.c: Ditto.
-
-2001-05-15 Corinna Vinschen <corinna@vinschen.de>
-
- * winsup.api/winsup.exp: Force linking all tests against binmode.o.
-
-2001-04-27 Corinna Vinschen <corinna@vinschen.de>
-
- * winsup.api/mmaptest04.c: Take care for binmode explicitely.
-
-2001-04-19 Corinna Vinschen <corinna@vinschen.de>
-
- * winsup.api/mmaptest02.c: New test.
- * winsup.api/mmaptest03.c: Ditto.
- * winsup.api/mmaptest04.c: Ditto.
-
-2001-04-03 Corinna Vinschen <corinna@vinschen.de>
-
- * winsup.api/mmaptest01.c: New test.
-
-2001-03-10 Egor Duda <deo@logos-m.ru>
-
- * winsup.api/ltp/access01.c: Avoid compilation error if X_OK
- isn't declared as a constant.
-
-2001-03-09 Egor Duda <deo@logos-m.ru>
-
- * config/default.exp: Remove unneeded debugging output.
- * Makefile.in: Use correct path to find dejagnu in local tree.
-
-2000-09-06 Egor Duda <deo@logos-m.ru>
-
- Add 'const' qualifiers where needed to avoid compiler warnings.
- * libltp/lib/tst_sig.c (tst_sig): Don't attempt to cleanup on
- fatal errors.
- * libltp/lib/parse_opts.c (parse_opts): Initialize allocated
- string to prevent heap corruption.
-
-2000-09-04 Egor Duda <deo@logos-m.ru>
-
- * Makefile.in: Always add libltp headers directory to headers
- search path.
-
-2000-09-02 Egor Duda <deo@logos-m.ru>
-
- * moved here everything from cygwin/testsuite/
- * configure.in: New file
- * configure: New file, generated from configure.in
- with autoconf 2.13
- * Makefile.in: New file
- * libltp/: New directory. Contains a support library
- and headers for tests in winsup.api/ltp/
- * config/default.exp: Print value of CYGWIN environment
- variable when test completed
- * winsup.api/samples/xf-sample-fail.c renamed to
- winsup.api/samples/sample-fail.c
- * winsup.api/samples/xf-sample-miscompile.c renamed to
- winsup.api/samples/sample-miscompile.c
- * winsup.api/known_bugs.tcl: New file.
- * winsup.api/winsup.exp: Xfail test if its name is in
- list from known_bugs.tcl
- * winsup.api/winsup.exp: Don't stop if compiled test executable
- can't be deleted
- * winsup.api/winsup.exp: If in verbose mode, write test output
- to <testname>.log
- * winsup.api/ltp/: New directory. Contains cygwin port of testsuite
- from Linux Testing Project
- * winsup.api/sigchld.c: New file. Test if process recieves SIGCHLD
- signal when its child terminates.
- * winsup.api/waitpid.c: New file. Test if waitpid function works
diff --git a/winsup/testsuite/Makefile.in b/winsup/testsuite/Makefile.in
deleted file mode 100644
index 04ff99bc0..000000000
--- a/winsup/testsuite/Makefile.in
+++ /dev/null
@@ -1,170 +0,0 @@
-# Makefile.in for Cygwin's testsuite.
-# Copyright 2000, 2001, 2002, 2003, 2005, 2006, 2009, 2012 Red Hat, Inc.
-#
-# This file is part of Cygwin.
-#
-# This software is a copyrighted work licensed under the terms of the
-# Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-# details.
-
-# This makefile requires GNU make.
-
-SHELL:=@SHELL@
-srcdir:=@srcdir@
-objdir:=.
-libltp_srcdir=$(srcdir)/libltp
-
-VPATH:=$(srcdir):$(libltp_srcdir)/lib
-
-target_alias:=@target_alias@
-build_alias:=@build_alias@
-host_alias:=@host_alias@
-
-DESTDIR=
-prefix:=${DESTDIR}@prefix@
-
-program_transform_name:=@program_transform_name@
-exec_prefix:=${DESTDIR}@exec_prefix@
-bindir:=${DESTDIR}@bindir@
-libdir:=${DESTDIR}@libdir@
-ifeq ($(target_alias),$(host_alias))
-ifeq ($(build_alias),$(host_alias))
-tooldir:=$(exec_prefix)
-else
-tooldir:=$(exec_prefix)/$(target_alias)
-endif
-else
-tooldir:=$(exec_prefix)/$(target_alias)
-endif
-datadir:=${DESTDIR}@datadir@
-infodir:=${DESTDIR}@infodir@
-includedir:=${DESTDIR}@includedir@
-
-TESTSUP_INCLUDES:=-I$(libltp_srcdir)/include
-
-#
-# --enable options from configure
-#
-
-CC:=@CC@
-# FIXME: Which is it, CC or CC_FOR_TARGET?
-CC_FOR_TARGET:=$(CC)
-ifneq (,$(CFLAGS))
- override CFLAGS+= -MD $(TESTSUP_INCLUDES)
-else
- CFLAGS:=@CFLAGS@ -MD $(TESTSUP_INCLUDES)
-endif
-
-AR:=@AR@
-AR_FLAGS:=qv
-MINGW_FE:=$(dir ${srcdir})/utils/mingw
-
-#
-# Include common definitions for winsup directory
-#
-include $(srcdir)/../Makefile.common
-
-override CC:=$(CC) $(GCC_INCLUDE)
-export CC
-
-RUNTESTFLAGS =
-
-ifdef VERBOSE
- RUNTESTFLAGS = -v
-endif
-
-RUNTIME=$(cygwin_build)/cygwin0.dll $(cygwin_build)/libcygwin0.a
-
-TESTSUP_LIB_NAME:=libltp.a
-TESTSUP_OFILES:=${sort ${addsuffix .o,${basename ${notdir ${wildcard $(libltp_srcdir)/lib/*.c}}}}}
-
-override ALL_CFLAGS:=${filter-out -O%,$(ALL_CFLAGS)}
-override COMPILE_CC:=${filter-out -O%,$(COMPILE_CC)}
-override CFLAGS:=${filter-out -O%,$(CFLAGS)}
-export CFLAGS
-
-.PHONY: all force dll_ofiles install all_target install_target install_host
-
-.SUFFIXES:
-.SUFFIXES: .c .cc .def .a .o .d
-
-all: $(TESTSUP_LIB_NAME)
-
-force:
-
-install:
-
-install_host:
-
-clean:
- -rm -f *.o *.dll *.a *.exp junk *.bak *.base *.exe testsuite/* *.d *.dat
-
-maintainer-clean realclean: clean
- @echo "This command is intended for maintainers to use;"
- @echo "it deletes files that may require special tools to rebuild."
- -rm -fr configure
-
-# Rule to build libltp.a
-
-$(TESTSUP_LIB_NAME): $(TESTSUP_OFILES)
- $(AR) rcv temp.a $(TESTSUP_OFILES)
- mv temp.a $(TESTSUP_LIB_NAME)
-
-$(RUNTIME) : $(cygwin_build)/Makefile
- @$(MAKE) --no-print-dir -C $(@D) $(@F)
-
-# Rule to make stub library used by "make check"
-
-#
-
-# These targets are for the dejagnu testsuites. The file site.exp
-# contains global variables that all the testsuites will use.
-
-# Set to $(target_alias)/ for cross.
-target_subdir = @target_subdir@
-
-site.exp: ./config.status Makefile
- @echo "Making a new config file..."
- -@rm -f ./tmp?
- @touch site.exp
- -@mv site.exp site.bak
- @echo "## these variables are automatically generated by make ##" > ./tmp0
- @echo "# Do not edit here. If you wish to override these values" >> ./tmp0
- @echo "# add them to the last section" >> ./tmp0
- @echo "set rootme \"`pwd`\"" >> ./tmp0
- @echo "set runtime_root \"\$$rootme/../cygwin\"" >> ./tmp0
- @echo "set srcdir \"`cd ${srcdir}; pwd`\"" >> ./tmp0
- @echo "set host_triplet $(host_canonical)" >> ./tmp0
- @echo "set build_triplet $(build_canonical)" >> ./tmp0
- @echo "set target_triplet $(target)" >> ./tmp0
- @echo "set target_alias $(target_alias)" >> ./tmp0
- @echo "set CC \"$(CC)\"" >> ./tmp0
-# CFLAGS is set even though it's empty to show we reserve the right to set it.
- @echo "set CFLAGS \"$(ALL_CFLAGS)\"" >> ./tmp0
- echo "set tmpdir $(objdir)/testsuite" >> ./tmp0
- @echo "set ltp_includes \"$(libltp_srcdir)/include\"" >> ./tmp0
- @echo "## All variables above are generated by configure. Do Not Edit ##" >> ./tmp0
- @cat ./tmp0 > site.exp
- @cat site.bak | sed \
- -e '1,/^## All variables above are.*##/ d' >> site.exp
- -@rm -f ./tmp?
-
-testsuite/site.exp: site.exp
- if [ -d testsuite ]; then \
- true; \
- else \
- mkdir testsuite; \
- fi
- rm -rf testsuite/site.exp
- cp site.exp testsuite/site.exp
-
-# Note: we set the PATH so that we can pick up cygwin0.dll
-
-check: $(TESTSUP_LIB_NAME) $(RUNTIME) cygrun.exe testsuite/site.exp
- cd testsuite; runtest --tool winsup $(RUNTESTFLAGS)
-
-cygrun.o: cygrun.c
- ${MINGW_FE} $(CC) $(MINGW_CFLAGS) -o $@ -c $<
-
-cygrun.exe : cygrun.o
- ${MINGW_FE} $(CC) ${MINGW_LDFLAGS} -o $@ $<
diff --git a/winsup/testsuite/README b/winsup/testsuite/README
deleted file mode 100644
index 2f6749bb8..000000000
--- a/winsup/testsuite/README
+++ /dev/null
@@ -1,40 +0,0 @@
-1999-12-23 DJ Delorie <dj@cygnus.com>
-
-Here are some notes about adding and using this testsuite.
-
-First, all the programs are linked with libcygwin0.a, which is just
-like libcygwin.a, except that it wants cygwin0.dll, not
-cygwin1.dll. The testsuite adds the winsup build directory to the
-PATH so that cygwin0.dll can be found by windows during testing.
-
-Because we'll probably run into complaints about using two DLLs, we
-run cygrun.exe for each test. All this does is run the test with
-CreateProcess() so that we don't attempt to do the special code for
-when a cygwin program calls another cygwin program, as this might be a
-"multiple cygwins" problem.
-
-Any test that needs to test command line args or redirection needs to
-run such a child program itself, as the testsuite will not do any
-arguments or redirection for it. Same for fork, signals, etc.
-
-The testsuite/winsup.api subdirectory is for testing the API to
-cygwin1.dll ONLY. Create other subdirs under testsuite/ for other
-classes of testing.
-
-Tests in winsup.api/*.c or winsup.api/*/*.c (only one subdirectory
-level is allowed) either compile, run, and exit(0) or they fail.
-Either abort or exit with a non-zero code to indicate failure. Don't
-print anything to the screen if you can avoid it (except for failure
-reasons, of course). One .c file per test, no compile options are
-allowed (we're testing the api, not the compiler).
-
-Tests whose filename is mentioned in known-bugs.tcl will be *expected*
-to fail, and will "fail" if they compile, run, and return zero.
-
-"make check" will only work if you run it *on* an NT machine.
-Cross-checking is not supported.
-
-To test a subset of the test-suite, use
-$ make check CYGWIN_TESTSUITE_TESTS=regexp
-
-
diff --git a/winsup/testsuite/aclocal.m4 b/winsup/testsuite/aclocal.m4
deleted file mode 100644
index 177c0134b..000000000
--- a/winsup/testsuite/aclocal.m4
+++ /dev/null
@@ -1,831 +0,0 @@
-dnl aclocal.m4 generated automatically by aclocal 1.4-p6
-
-dnl Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl This program is distributed in the hope that it will be useful,
-dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-dnl PARTICULAR PURPOSE.
-
-# lib-prefix.m4 serial 4 (gettext-0.14.2)
-dnl Copyright (C) 2001-2005 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Bruno Haible.
-
-dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and
-dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't
-dnl require excessive bracketing.
-ifdef([AC_HELP_STRING],
-[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])],
-[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])])
-
-dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed
-dnl to access previously installed libraries. The basic assumption is that
-dnl a user will want packages to use other packages he previously installed
-dnl with the same --prefix option.
-dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate
-dnl libraries, but is otherwise very convenient.
-AC_DEFUN([AC_LIB_PREFIX],
-[
- AC_BEFORE([$0], [AC_LIB_LINKFLAGS])
- AC_REQUIRE([AC_PROG_CC])
- AC_REQUIRE([AC_CANONICAL_HOST])
- AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
- dnl By default, look in $includedir and $libdir.
- use_additional=yes
- AC_LIB_WITH_FINAL_PREFIX([
- eval additional_includedir=\"$includedir\"
- eval additional_libdir=\"$libdir\"
- ])
- AC_LIB_ARG_WITH([lib-prefix],
-[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib
- --without-lib-prefix don't search for libraries in includedir and libdir],
-[
- if test "X$withval" = "Xno"; then
- use_additional=no
- else
- if test "X$withval" = "X"; then
- AC_LIB_WITH_FINAL_PREFIX([
- eval additional_includedir=\"$includedir\"
- eval additional_libdir=\"$libdir\"
- ])
- else
- additional_includedir="$withval/include"
- additional_libdir="$withval/lib"
- fi
- fi
-])
- if test $use_additional = yes; then
- dnl Potentially add $additional_includedir to $CPPFLAGS.
- dnl But don't add it
- dnl 1. if it's the standard /usr/include,
- dnl 2. if it's already present in $CPPFLAGS,
- dnl 3. if it's /usr/local/include and we are using GCC on Linux,
- dnl 4. if it doesn't exist as a directory.
- if test "X$additional_includedir" != "X/usr/include"; then
- haveit=
- for x in $CPPFLAGS; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- if test "X$x" = "X-I$additional_includedir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- if test "X$additional_includedir" = "X/usr/local/include"; then
- if test -n "$GCC"; then
- case $host_os in
- linux* | gnu* | k*bsd*-gnu) haveit=yes;;
- esac
- fi
- fi
- if test -z "$haveit"; then
- if test -d "$additional_includedir"; then
- dnl Really add $additional_includedir to $CPPFLAGS.
- CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir"
- fi
- fi
- fi
- fi
- dnl Potentially add $additional_libdir to $LDFLAGS.
- dnl But don't add it
- dnl 1. if it's the standard /usr/lib,
- dnl 2. if it's already present in $LDFLAGS,
- dnl 3. if it's /usr/local/lib and we are using GCC on Linux,
- dnl 4. if it doesn't exist as a directory.
- if test "X$additional_libdir" != "X/usr/lib"; then
- haveit=
- for x in $LDFLAGS; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- if test "X$x" = "X-L$additional_libdir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- if test "X$additional_libdir" = "X/usr/local/lib"; then
- if test -n "$GCC"; then
- case $host_os in
- linux*) haveit=yes;;
- esac
- fi
- fi
- if test -z "$haveit"; then
- if test -d "$additional_libdir"; then
- dnl Really add $additional_libdir to $LDFLAGS.
- LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir"
- fi
- fi
- fi
- fi
- fi
-])
-
-dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix,
-dnl acl_final_exec_prefix, containing the values to which $prefix and
-dnl $exec_prefix will expand at the end of the configure script.
-AC_DEFUN([AC_LIB_PREPARE_PREFIX],
-[
- dnl Unfortunately, prefix and exec_prefix get only finally determined
- dnl at the end of configure.
- if test "X$prefix" = "XNONE"; then
- acl_final_prefix="$ac_default_prefix"
- else
- acl_final_prefix="$prefix"
- fi
- if test "X$exec_prefix" = "XNONE"; then
- acl_final_exec_prefix='${prefix}'
- else
- acl_final_exec_prefix="$exec_prefix"
- fi
- acl_save_prefix="$prefix"
- prefix="$acl_final_prefix"
- eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
- prefix="$acl_save_prefix"
-])
-
-dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the
-dnl variables prefix and exec_prefix bound to the values they will have
-dnl at the end of the configure script.
-AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX],
-[
- acl_save_prefix="$prefix"
- prefix="$acl_final_prefix"
- acl_save_exec_prefix="$exec_prefix"
- exec_prefix="$acl_final_exec_prefix"
- $1
- exec_prefix="$acl_save_exec_prefix"
- prefix="$acl_save_prefix"
-])
-
-# lib-link.m4 serial 6 (gettext-0.14.3)
-dnl Copyright (C) 2001-2005 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Bruno Haible.
-
-AC_PREREQ(2.50)
-
-dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and
-dnl the libraries corresponding to explicit and implicit dependencies.
-dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and
-dnl augments the CPPFLAGS variable.
-AC_DEFUN([AC_LIB_LINKFLAGS],
-[
- AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
- AC_REQUIRE([AC_LIB_RPATH])
- define([Name],[translit([$1],[./-], [___])])
- define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
- [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
- AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [
- AC_LIB_LINKFLAGS_BODY([$1], [$2])
- ac_cv_lib[]Name[]_libs="$LIB[]NAME"
- ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME"
- ac_cv_lib[]Name[]_cppflags="$INC[]NAME"
- ])
- LIB[]NAME="$ac_cv_lib[]Name[]_libs"
- LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs"
- INC[]NAME="$ac_cv_lib[]Name[]_cppflags"
- AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
- AC_SUBST([LIB]NAME)
- AC_SUBST([LTLIB]NAME)
- dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the
- dnl results of this search when this library appears as a dependency.
- HAVE_LIB[]NAME=yes
- undefine([Name])
- undefine([NAME])
-])
-
-dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode)
-dnl searches for libname and the libraries corresponding to explicit and
-dnl implicit dependencies, together with the specified include files and
-dnl the ability to compile and link the specified testcode. If found, it
-dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and
-dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and
-dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs
-dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty.
-AC_DEFUN([AC_LIB_HAVE_LINKFLAGS],
-[
- AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
- AC_REQUIRE([AC_LIB_RPATH])
- define([Name],[translit([$1],[./-], [___])])
- define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
- [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
-
- dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME
- dnl accordingly.
- AC_LIB_LINKFLAGS_BODY([$1], [$2])
-
- dnl Add $INC[]NAME to CPPFLAGS before performing the following checks,
- dnl because if the user has installed lib[]Name and not disabled its use
- dnl via --without-lib[]Name-prefix, he wants to use it.
- ac_save_CPPFLAGS="$CPPFLAGS"
- AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
-
- AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [
- ac_save_LIBS="$LIBS"
- LIBS="$LIBS $LIB[]NAME"
- AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no])
- LIBS="$ac_save_LIBS"
- ])
- if test "$ac_cv_lib[]Name" = yes; then
- HAVE_LIB[]NAME=yes
- AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.])
- AC_MSG_CHECKING([how to link with lib[]$1])
- AC_MSG_RESULT([$LIB[]NAME])
- else
- HAVE_LIB[]NAME=no
- dnl If $LIB[]NAME didn't lead to a usable library, we don't need
- dnl $INC[]NAME either.
- CPPFLAGS="$ac_save_CPPFLAGS"
- LIB[]NAME=
- LTLIB[]NAME=
- fi
- AC_SUBST([HAVE_LIB]NAME)
- AC_SUBST([LIB]NAME)
- AC_SUBST([LTLIB]NAME)
- undefine([Name])
- undefine([NAME])
-])
-
-dnl Determine the platform dependent parameters needed to use rpath:
-dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator,
-dnl hardcode_direct, hardcode_minus_L.
-AC_DEFUN([AC_LIB_RPATH],
-[
- dnl Tell automake >= 1.10 to complain if config.rpath is missing.
- m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])])
- AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS
- AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld
- AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host
- AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir
- AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [
- CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
- ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
- . ./conftest.sh
- rm -f ./conftest.sh
- acl_cv_rpath=done
- ])
- wl="$acl_cv_wl"
- libext="$acl_cv_libext"
- shlibext="$acl_cv_shlibext"
- hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
- hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
- hardcode_direct="$acl_cv_hardcode_direct"
- hardcode_minus_L="$acl_cv_hardcode_minus_L"
- dnl Determine whether the user wants rpath handling at all.
- AC_ARG_ENABLE(rpath,
- [ --disable-rpath do not hardcode runtime library paths],
- :, enable_rpath=yes)
-])
-
-dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and
-dnl the libraries corresponding to explicit and implicit dependencies.
-dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables.
-AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
-[
- define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
- [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
- dnl By default, look in $includedir and $libdir.
- use_additional=yes
- AC_LIB_WITH_FINAL_PREFIX([
- eval additional_includedir=\"$includedir\"
- eval additional_libdir=\"$libdir\"
- ])
- AC_LIB_ARG_WITH([lib$1-prefix],
-[ --with-lib$1-prefix[=DIR] search for lib$1 in DIR/include and DIR/lib
- --without-lib$1-prefix don't search for lib$1 in includedir and libdir],
-[
- if test "X$withval" = "Xno"; then
- use_additional=no
- else
- if test "X$withval" = "X"; then
- AC_LIB_WITH_FINAL_PREFIX([
- eval additional_includedir=\"$includedir\"
- eval additional_libdir=\"$libdir\"
- ])
- else
- additional_includedir="$withval/include"
- additional_libdir="$withval/lib"
- fi
- fi
-])
- dnl Search the library and its dependencies in $additional_libdir and
- dnl $LDFLAGS. Using breadth-first-seach.
- LIB[]NAME=
- LTLIB[]NAME=
- INC[]NAME=
- rpathdirs=
- ltrpathdirs=
- names_already_handled=
- names_next_round='$1 $2'
- while test -n "$names_next_round"; do
- names_this_round="$names_next_round"
- names_next_round=
- for name in $names_this_round; do
- already_handled=
- for n in $names_already_handled; do
- if test "$n" = "$name"; then
- already_handled=yes
- break
- fi
- done
- if test -z "$already_handled"; then
- names_already_handled="$names_already_handled $name"
- dnl See if it was already located by an earlier AC_LIB_LINKFLAGS
- dnl or AC_LIB_HAVE_LINKFLAGS call.
- uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
- eval value=\"\$HAVE_LIB$uppername\"
- if test -n "$value"; then
- if test "$value" = yes; then
- eval value=\"\$LIB$uppername\"
- test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value"
- eval value=\"\$LTLIB$uppername\"
- test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value"
- else
- dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined
- dnl that this library doesn't exist. So just drop it.
- :
- fi
- else
- dnl Search the library lib$name in $additional_libdir and $LDFLAGS
- dnl and the already constructed $LIBNAME/$LTLIBNAME.
- found_dir=
- found_la=
- found_so=
- found_a=
- if test $use_additional = yes; then
- if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then
- found_dir="$additional_libdir"
- found_so="$additional_libdir/lib$name.$shlibext"
- if test -f "$additional_libdir/lib$name.la"; then
- found_la="$additional_libdir/lib$name.la"
- fi
- else
- if test -f "$additional_libdir/lib$name.$libext"; then
- found_dir="$additional_libdir"
- found_a="$additional_libdir/lib$name.$libext"
- if test -f "$additional_libdir/lib$name.la"; then
- found_la="$additional_libdir/lib$name.la"
- fi
- fi
- fi
- fi
- if test "X$found_dir" = "X"; then
- for x in $LDFLAGS $LTLIB[]NAME; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- case "$x" in
- -L*)
- dir=`echo "X$x" | sed -e 's/^X-L//'`
- if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then
- found_dir="$dir"
- found_so="$dir/lib$name.$shlibext"
- if test -f "$dir/lib$name.la"; then
- found_la="$dir/lib$name.la"
- fi
- else
- if test -f "$dir/lib$name.$libext"; then
- found_dir="$dir"
- found_a="$dir/lib$name.$libext"
- if test -f "$dir/lib$name.la"; then
- found_la="$dir/lib$name.la"
- fi
- fi
- fi
- ;;
- esac
- if test "X$found_dir" != "X"; then
- break
- fi
- done
- fi
- if test "X$found_dir" != "X"; then
- dnl Found the library.
- LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name"
- if test "X$found_so" != "X"; then
- dnl Linking with a shared library. We attempt to hardcode its
- dnl directory into the executable's runpath, unless it's the
- dnl standard /usr/lib.
- if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then
- dnl No hardcoding is needed.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
- else
- dnl Use an explicit option to hardcode DIR into the resulting
- dnl binary.
- dnl Potentially add DIR to ltrpathdirs.
- dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
- haveit=
- for x in $ltrpathdirs; do
- if test "X$x" = "X$found_dir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- ltrpathdirs="$ltrpathdirs $found_dir"
- fi
- dnl The hardcoding into $LIBNAME is system dependent.
- if test "$hardcode_direct" = yes; then
- dnl Using DIR/libNAME.so during linking hardcodes DIR into the
- dnl resulting binary.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
- else
- if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
- dnl Use an explicit option to hardcode DIR into the resulting
- dnl binary.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
- dnl Potentially add DIR to rpathdirs.
- dnl The rpathdirs will be appended to $LIBNAME at the end.
- haveit=
- for x in $rpathdirs; do
- if test "X$x" = "X$found_dir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- rpathdirs="$rpathdirs $found_dir"
- fi
- else
- dnl Rely on "-L$found_dir".
- dnl But don't add it if it's already contained in the LDFLAGS
- dnl or the already constructed $LIBNAME
- haveit=
- for x in $LDFLAGS $LIB[]NAME; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- if test "X$x" = "X-L$found_dir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir"
- fi
- if test "$hardcode_minus_L" != no; then
- dnl FIXME: Not sure whether we should use
- dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
- dnl here.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
- else
- dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH
- dnl here, because this doesn't fit in flags passed to the
- dnl compiler. So give up. No hardcoding. This affects only
- dnl very old systems.
- dnl FIXME: Not sure whether we should use
- dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
- dnl here.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
- fi
- fi
- fi
- fi
- else
- if test "X$found_a" != "X"; then
- dnl Linking with a static library.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a"
- else
- dnl We shouldn't come here, but anyway it's good to have a
- dnl fallback.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name"
- fi
- fi
- dnl Assume the include files are nearby.
- additional_includedir=
- case "$found_dir" in
- */lib | */lib/)
- basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'`
- additional_includedir="$basedir/include"
- ;;
- esac
- if test "X$additional_includedir" != "X"; then
- dnl Potentially add $additional_includedir to $INCNAME.
- dnl But don't add it
- dnl 1. if it's the standard /usr/include,
- dnl 2. if it's /usr/local/include and we are using GCC on Linux,
- dnl 3. if it's already present in $CPPFLAGS or the already
- dnl constructed $INCNAME,
- dnl 4. if it doesn't exist as a directory.
- if test "X$additional_includedir" != "X/usr/include"; then
- haveit=
- if test "X$additional_includedir" = "X/usr/local/include"; then
- if test -n "$GCC"; then
- case $host_os in
- linux* | gnu* | k*bsd*-gnu) haveit=yes;;
- esac
- fi
- fi
- if test -z "$haveit"; then
- for x in $CPPFLAGS $INC[]NAME; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- if test "X$x" = "X-I$additional_includedir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- if test -d "$additional_includedir"; then
- dnl Really add $additional_includedir to $INCNAME.
- INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir"
- fi
- fi
- fi
- fi
- fi
- dnl Look for dependencies.
- if test -n "$found_la"; then
- dnl Read the .la file. It defines the variables
- dnl dlname, library_names, old_library, dependency_libs, current,
- dnl age, revision, installed, dlopen, dlpreopen, libdir.
- save_libdir="$libdir"
- case "$found_la" in
- */* | *\\*) . "$found_la" ;;
- *) . "./$found_la" ;;
- esac
- libdir="$save_libdir"
- dnl We use only dependency_libs.
- for dep in $dependency_libs; do
- case "$dep" in
- -L*)
- additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
- dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME.
- dnl But don't add it
- dnl 1. if it's the standard /usr/lib,
- dnl 2. if it's /usr/local/lib and we are using GCC on Linux,
- dnl 3. if it's already present in $LDFLAGS or the already
- dnl constructed $LIBNAME,
- dnl 4. if it doesn't exist as a directory.
- if test "X$additional_libdir" != "X/usr/lib"; then
- haveit=
- if test "X$additional_libdir" = "X/usr/local/lib"; then
- if test -n "$GCC"; then
- case $host_os in
- linux* | gnu* | k*bsd*-gnu) haveit=yes;;
- esac
- fi
- fi
- if test -z "$haveit"; then
- haveit=
- for x in $LDFLAGS $LIB[]NAME; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- if test "X$x" = "X-L$additional_libdir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- if test -d "$additional_libdir"; then
- dnl Really add $additional_libdir to $LIBNAME.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir"
- fi
- fi
- haveit=
- for x in $LDFLAGS $LTLIB[]NAME; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- if test "X$x" = "X-L$additional_libdir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- if test -d "$additional_libdir"; then
- dnl Really add $additional_libdir to $LTLIBNAME.
- LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir"
- fi
- fi
- fi
- fi
- ;;
- -R*)
- dir=`echo "X$dep" | sed -e 's/^X-R//'`
- if test "$enable_rpath" != no; then
- dnl Potentially add DIR to rpathdirs.
- dnl The rpathdirs will be appended to $LIBNAME at the end.
- haveit=
- for x in $rpathdirs; do
- if test "X$x" = "X$dir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- rpathdirs="$rpathdirs $dir"
- fi
- dnl Potentially add DIR to ltrpathdirs.
- dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
- haveit=
- for x in $ltrpathdirs; do
- if test "X$x" = "X$dir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- ltrpathdirs="$ltrpathdirs $dir"
- fi
- fi
- ;;
- -l*)
- dnl Handle this in the next round.
- names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
- ;;
- *.la)
- dnl Handle this in the next round. Throw away the .la's
- dnl directory; it is already contained in a preceding -L
- dnl option.
- names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
- ;;
- *)
- dnl Most likely an immediate library name.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep"
- LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep"
- ;;
- esac
- done
- fi
- else
- dnl Didn't find the library; assume it is in the system directories
- dnl known to the linker and runtime loader. (All the system
- dnl directories known to the linker should also be known to the
- dnl runtime loader, otherwise the system is severely misconfigured.)
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
- LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name"
- fi
- fi
- fi
- done
- done
- if test "X$rpathdirs" != "X"; then
- if test -n "$hardcode_libdir_separator"; then
- dnl Weird platform: only the last -rpath option counts, the user must
- dnl pass all path elements in one option. We can arrange that for a
- dnl single library, but not when more than one $LIBNAMEs are used.
- alldirs=
- for found_dir in $rpathdirs; do
- alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
- done
- dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl.
- acl_save_libdir="$libdir"
- libdir="$alldirs"
- eval flag=\"$hardcode_libdir_flag_spec\"
- libdir="$acl_save_libdir"
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
- else
- dnl The -rpath options are cumulative.
- for found_dir in $rpathdirs; do
- acl_save_libdir="$libdir"
- libdir="$found_dir"
- eval flag=\"$hardcode_libdir_flag_spec\"
- libdir="$acl_save_libdir"
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
- done
- fi
- fi
- if test "X$ltrpathdirs" != "X"; then
- dnl When using libtool, the option that works for both libraries and
- dnl executables is -R. The -R options are cumulative.
- for found_dir in $ltrpathdirs; do
- LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir"
- done
- fi
-])
-
-dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR,
-dnl unless already present in VAR.
-dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes
-dnl contains two or three consecutive elements that belong together.
-AC_DEFUN([AC_LIB_APPENDTOVAR],
-[
- for element in [$2]; do
- haveit=
- for x in $[$1]; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- if test "X$x" = "X$element"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- [$1]="${[$1]}${[$1]:+ }$element"
- fi
- done
-])
-
-# lib-ld.m4 serial 3 (gettext-0.13)
-dnl Copyright (C) 1996-2003 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl Subroutines of libtool.m4,
-dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision
-dnl with libtool.m4.
-
-dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no.
-AC_DEFUN([AC_LIB_PROG_LD_GNU],
-[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld,
-[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
-case `$LD -v 2>&1 </dev/null` in
-*GNU* | *'with BFD'*)
- acl_cv_prog_gnu_ld=yes ;;
-*)
- acl_cv_prog_gnu_ld=no ;;
-esac])
-with_gnu_ld=$acl_cv_prog_gnu_ld
-])
-
-dnl From libtool-1.4. Sets the variable LD.
-AC_DEFUN([AC_LIB_PROG_LD],
-[AC_ARG_WITH(gnu-ld,
-[ --with-gnu-ld assume the C compiler uses GNU ld [default=no]],
-test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
-AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([AC_CANONICAL_HOST])dnl
-# Prepare PATH_SEPARATOR.
-# 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
-ac_prog=ld
-if test "$GCC" = yes; then
- # Check if gcc -print-prog-name=ld gives a path.
- AC_MSG_CHECKING([for ld used by GCC])
- case $host in
- *-*-mingw*)
- # gcc leaves a trailing carriage return which upsets mingw
- ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
- *)
- ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
- esac
- case $ac_prog in
- # Accept absolute paths.
- [[\\/]* | [A-Za-z]:[\\/]*)]
- [re_direlt='/[^/][^/]*/\.\./']
- # Canonicalize the path of ld
- ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
- while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
- ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
- done
- test -z "$LD" && LD="$ac_prog"
- ;;
- "")
- # If it fails, then pretend we aren't using GCC.
- ac_prog=ld
- ;;
- *)
- # If it is relative, then search for the first ld in PATH.
- with_gnu_ld=unknown
- ;;
- esac
-elif test "$with_gnu_ld" = yes; then
- AC_MSG_CHECKING([for GNU ld])
-else
- AC_MSG_CHECKING([for non-GNU ld])
-fi
-AC_CACHE_VAL(acl_cv_path_LD,
-[if test -z "$LD"; then
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
- for ac_dir in $PATH; do
- test -z "$ac_dir" && ac_dir=.
- if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
- acl_cv_path_LD="$ac_dir/$ac_prog"
- # Check to see if the program is GNU ld. I'd rather use --version,
- # but apparently some GNU ld's only accept -v.
- # Break only if it was the GNU/non-GNU ld that we prefer.
- case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in
- *GNU* | *'with BFD'*)
- test "$with_gnu_ld" != no && break ;;
- *)
- test "$with_gnu_ld" != yes && break ;;
- esac
- fi
- done
- IFS="$ac_save_ifs"
-else
- acl_cv_path_LD="$LD" # Let the user override the test with a path.
-fi])
-LD="$acl_cv_path_LD"
-if test -n "$LD"; then
- AC_MSG_RESULT($LD)
-else
- AC_MSG_RESULT(no)
-fi
-test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
-AC_LIB_PROG_LD_GNU
-])
-
diff --git a/winsup/testsuite/config/default.exp b/winsup/testsuite/config/default.exp
deleted file mode 100644
index 3936979a6..000000000
--- a/winsup/testsuite/config/default.exp
+++ /dev/null
@@ -1,13 +0,0 @@
-proc winsup_version {} {
- global env
- global rootme
- clone_output "\n[exec grep ^%%% $rootme/../cygwin/cygwin0.dll]\n"
- if { [info exists env(CYGWIN)] } {
- clone_output "CYGWIN=$env(CYGWIN)\n"
- } else {
- clone_output "CYGWIN=\n"
- }
-}
-
-proc winsup_exit {} {
-}
diff --git a/winsup/testsuite/configure b/winsup/testsuite/configure
deleted file mode 100644
index da4616582..000000000
--- a/winsup/testsuite/configure
+++ /dev/null
@@ -1,3950 +0,0 @@
-#! /bin/sh
-# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for Cygwin Testsuite 0.
-#
-# Report bugs to <cygwin@cygwin.com>.
-#
-#
-# Copyright (C) 1992-1996, 1998-2012 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 more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in #(
- *posix*) :
- set -o posix ;; #(
- *) :
- ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- PATH_SEPARATOR=:
- (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
- (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
- PATH_SEPARATOR=';'
- }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
-# Find who we are. Look in the path if we contain no directory separator.
-as_myself=
-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
-IFS=$as_save_IFS
-
- ;;
-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
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
- exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-# Use a proper internal environment variable to ensure we don't fall
- # into an infinite loop, continuously re-executing ourselves.
- if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
- _as_can_reexec=no; export _as_can_reexec;
- # We cannot yet assume a decent shell, so we have to provide a
-# neutralization value for shells without unset; and this also
-# works around shells that cannot unset nonexistent variables.
-# Preserve -v and -x to the replacement shell.
-BASH_ENV=/dev/null
-ENV=/dev/null
-(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-case $- in # ((((
- *v*x* | *x*v* ) as_opts=-vx ;;
- *v* ) as_opts=-v ;;
- *x* ) as_opts=-x ;;
- * ) as_opts= ;;
-esac
-exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
-# Admittedly, this is quite paranoid, since all the known shells bail
-# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-as_fn_exit 255
- fi
- # We don't want this to propagate to other subprocesses.
- { _as_can_reexec=; unset _as_can_reexec;}
-if test "x$CONFIG_SHELL" = x; then
- as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '\${1+\"\$@\"}'='\"\$@\"'
- setopt NO_GLOB_SUBST
-else
- case \`(set -o) 2>/dev/null\` in #(
- *posix*) :
- set -o posix ;; #(
- *) :
- ;;
-esac
-fi
-"
- as_required="as_fn_return () { (exit \$1); }
-as_fn_success () { as_fn_return 0; }
-as_fn_failure () { as_fn_return 1; }
-as_fn_ret_success () { return 0; }
-as_fn_ret_failure () { return 1; }
-
-exitcode=0
-as_fn_success || { exitcode=1; echo as_fn_success failed.; }
-as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
-as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
-as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
-if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
-
-else
- exitcode=1; echo positional parameters were not saved.
-fi
-test x\$exitcode = x0 || exit 1
-test -x / || exit 1"
- as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
- as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
- eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
- test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1"
- if (eval "$as_required") 2>/dev/null; then :
- as_have_required=yes
-else
- as_have_required=no
-fi
- if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
-
-else
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-as_found=false
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- as_found=:
- case $as_dir in #(
- /*)
- for as_base in sh bash ksh sh5; do
- # Try only shells that exist, to save several forks.
- as_shell=$as_dir/$as_base
- if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
- CONFIG_SHELL=$as_shell as_have_required=yes
- if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
- break 2
-fi
-fi
- done;;
- esac
- as_found=false
-done
-$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
- CONFIG_SHELL=$SHELL as_have_required=yes
-fi; }
-IFS=$as_save_IFS
-
-
- if test "x$CONFIG_SHELL" != x; then :
- export CONFIG_SHELL
- # We cannot yet assume a decent shell, so we have to provide a
-# neutralization value for shells without unset; and this also
-# works around shells that cannot unset nonexistent variables.
-# Preserve -v and -x to the replacement shell.
-BASH_ENV=/dev/null
-ENV=/dev/null
-(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-case $- in # ((((
- *v*x* | *x*v* ) as_opts=-vx ;;
- *v* ) as_opts=-v ;;
- *x* ) as_opts=-x ;;
- * ) as_opts= ;;
-esac
-exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
-# Admittedly, this is quite paranoid, since all the known shells bail
-# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-exit 255
-fi
-
- if test x$as_have_required = xno; then :
- $as_echo "$0: This script requires a shell more modern than all"
- $as_echo "$0: the shells that I found on your system."
- if test x${ZSH_VERSION+set} = xset ; then
- $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
- $as_echo "$0: be upgraded to zsh 4.3.4 or later."
- else
- $as_echo "$0: Please tell bug-autoconf@gnu.org and cygwin@cygwin.com
-$0: about your system, including any error possibly output
-$0: before this message. Then install a modern shell, or
-$0: manually run the script under such a shell if you do
-$0: have one."
- fi
- exit 1
-fi
-fi
-fi
-SHELL=${CONFIG_SHELL-/bin/sh}
-export SHELL
-# Unset more variables known to interfere with behavior of common tools.
-CLICOLOR_FORCE= GREP_OPTIONS=
-unset CLICOLOR_FORCE GREP_OPTIONS
-
-## --------------------- ##
-## M4sh Shell Functions. ##
-## --------------------- ##
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
- { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
- return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
- set +e
- as_fn_set_status $1
- exit $1
-} # as_fn_exit
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
- case $as_dir in #(
- -*) as_dir=./$as_dir;;
- esac
- test -d "$as_dir" || eval $as_mkdir_p || {
- as_dirs=
- while :; do
- case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
- *) as_qdir=$as_dir;;
- esac
- as_dirs="'$as_qdir' $as_dirs"
- as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- test -d "$as_dir" && break
- done
- test -z "$as_dirs" || eval "mkdir $as_dirs"
- } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-
-# as_fn_executable_p FILE
-# -----------------------
-# Test if FILE is an executable regular file.
-as_fn_executable_p ()
-{
- test -f "$1" && test -x "$1"
-} # as_fn_executable_p
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
- eval 'as_fn_append ()
- {
- eval $1+=\$2
- }'
-else
- as_fn_append ()
- {
- eval $1=\$$1\$2
- }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
- eval 'as_fn_arith ()
- {
- as_val=$(( $* ))
- }'
-else
- as_fn_arith ()
- {
- as_val=`expr "$@" || test $? -eq 1`
- }
-fi # as_fn_arith
-
-
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
-as_fn_error ()
-{
- as_status=$1; test $as_status -eq 0 && as_status=1
- if test "$4"; then
- as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
- fi
- $as_echo "$as_me: error: $2" >&2
- as_fn_exit $as_status
-} # as_fn_error
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; 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
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
- }
- /^X\/\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\/\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
-
-# 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
-
-
- as_lineno_1=$LINENO as_lineno_1a=$LINENO
- as_lineno_2=$LINENO as_lineno_2a=$LINENO
- eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
- test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
- # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
- sed -n '
- p
- /[$]LINENO/=
- ' <$as_myself |
- sed '
- s/[$]LINENO.*/&-/
- t lineno
- b
- :lineno
- N
- :loop
- s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
- t loop
- s/-\n.*//
- ' >$as_me.lineno &&
- chmod +x "$as_me.lineno" ||
- { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
-
- # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
- # already done that, so ensure we don't try to do so again and fall
- # in an infinite loop. This has already happened in practice.
- _as_can_reexec=no; export _as_can_reexec
- # 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 sensitive to this).
- . "./$as_me.lineno"
- # Exit status is that of the last command.
- exit
-}
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
- case `echo 'xy\c'` in
- *c*) ECHO_T=' ';; # ECHO_T is single tab character.
- xy) ECHO_C='\c';;
- *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
- ECHO_T=' ';;
- esac;;
-*)
- ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
- rm -f conf$$.dir/conf$$.file
-else
- rm -f conf$$.dir
- mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
- if ln -s conf$$.file conf$$ 2>/dev/null; then
- as_ln_s='ln -s'
- # ... but there are two gotchas:
- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -pR'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -pR'
- elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
- else
- as_ln_s='cp -pR'
- fi
-else
- as_ln_s='cp -pR'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p='mkdir -p "$as_dir"'
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-as_test_x='test -x'
-as_executable_p=as_fn_executable_p
-
-# 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'"
-
-
-test -n "$DJDIR" || exec 7<&0 </dev/null
-exec 6>&1
-
-# Name of the host.
-# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
-# so uname gets run too.
-ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
-
-#
-# Initializations.
-#
-ac_default_prefix=/usr/local
-ac_clean_files=
-ac_config_libobj_dir=.
-LIBOBJS=
-cross_compiling=no
-subdirs=
-MFLAGS=
-MAKEFLAGS=
-
-# Identity of this package.
-PACKAGE_NAME='Cygwin Testsuite'
-PACKAGE_TARNAME='cygwin'
-PACKAGE_VERSION='0'
-PACKAGE_STRING='Cygwin Testsuite 0'
-PACKAGE_BUGREPORT='cygwin@cygwin.com'
-PACKAGE_URL='https://cygwin.com'
-
-ac_unique_file="Makefile.in"
-ac_subst_vars='LTLIBOBJS
-LIBOBJS
-AR
-CPP
-OBJEXT
-EXEEXT
-ac_ct_CC
-CPPFLAGS
-LDFLAGS
-CFLAGS
-CC
-target_alias
-host_alias
-build_alias
-LIBS
-ECHO_T
-ECHO_N
-ECHO_C
-DEFS
-mandir
-localedir
-libdir
-psdir
-pdfdir
-dvidir
-htmldir
-infodir
-docdir
-oldincludedir
-includedir
-localstatedir
-sharedstatedir
-sysconfdir
-datadir
-datarootdir
-libexecdir
-sbindir
-bindir
-program_transform_name
-prefix
-exec_prefix
-PACKAGE_URL
-PACKAGE_BUGREPORT
-PACKAGE_STRING
-PACKAGE_VERSION
-PACKAGE_TARNAME
-PACKAGE_NAME
-PATH_SEPARATOR
-SHELL'
-ac_subst_files=''
-ac_user_opts='
-enable_option_checking
-'
- ac_precious_vars='build_alias
-host_alias
-target_alias
-CC
-CFLAGS
-LDFLAGS
-LIBS
-CPPFLAGS
-CPP'
-
-
-# Initialize some variables set by options.
-ac_init_help=
-ac_init_version=false
-ac_unrecognized_opts=
-ac_unrecognized_sep=
-# 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.
-# (The list follows the same order as the GNU Coding Standards.)
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datarootdir='${prefix}/share'
-datadir='${datarootdir}'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
-infodir='${datarootdir}/info'
-htmldir='${docdir}'
-dvidir='${docdir}'
-pdfdir='${docdir}'
-psdir='${docdir}'
-libdir='${exec_prefix}/lib'
-localedir='${datarootdir}/locale'
-mandir='${datarootdir}/man'
-
-ac_prev=
-ac_dashdash=
-for ac_option
-do
- # If the previous option needs an argument, assign it.
- if test -n "$ac_prev"; then
- eval $ac_prev=\$ac_option
- ac_prev=
- continue
- fi
-
- case $ac_option in
- *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
- *=) ac_optarg= ;;
- *) ac_optarg=yes ;;
- esac
-
- # Accept the important Cygnus configure options, so we can diagnose typos.
-
- case $ac_dashdash$ac_option in
- --)
- ac_dashdash=yes ;;
-
- -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)
- ac_prev=datadir ;;
- -datadir=* | --datadir=* | --datadi=* | --datad=*)
- datadir=$ac_optarg ;;
-
- -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
- | --dataroo | --dataro | --datar)
- ac_prev=datarootdir ;;
- -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
- | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
- datarootdir=$ac_optarg ;;
-
- -disable-* | --disable-*)
- ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid feature name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"enable_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval enable_$ac_useropt=no ;;
-
- -docdir | --docdir | --docdi | --doc | --do)
- ac_prev=docdir ;;
- -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
- docdir=$ac_optarg ;;
-
- -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
- ac_prev=dvidir ;;
- -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
- dvidir=$ac_optarg ;;
-
- -enable-* | --enable-*)
- ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid feature name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"enable_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval enable_$ac_useropt=\$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 ;;
-
- -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
- ac_prev=htmldir ;;
- -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
- | --ht=*)
- htmldir=$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 ;;
-
- -localedir | --localedir | --localedi | --localed | --locale)
- ac_prev=localedir ;;
- -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
- localedir=$ac_optarg ;;
-
- -localstatedir | --localstatedir | --localstatedi | --localstated \
- | --localstate | --localstat | --localsta | --localst | --locals)
- ac_prev=localstatedir ;;
- -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
- | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
- 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 ;;
-
- -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
- ac_prev=pdfdir ;;
- -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
- pdfdir=$ac_optarg ;;
-
- -psdir | --psdir | --psdi | --psd | --ps)
- ac_prev=psdir ;;
- -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
- psdir=$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_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid package name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"with_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval with_$ac_useropt=\$ac_optarg ;;
-
- -without-* | --without-*)
- ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid package name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"with_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval with_$ac_useropt=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 ;;
-
- -*) as_fn_error $? "unrecognized option: \`$ac_option'
-Try \`$0 --help' for more information"
- ;;
-
- *=*)
- ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
- # Reject names that are not valid shell variable names.
- case $ac_envvar in #(
- '' | [0-9]* | *[!_$as_cr_alnum]* )
- as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
- esac
- eval $ac_envvar=\$ac_optarg
- export $ac_envvar ;;
-
- *)
- # FIXME: should be removed in autoconf 3.0.
- $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
- expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- $as_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'`
- as_fn_error $? "missing argument to $ac_option"
-fi
-
-if test -n "$ac_unrecognized_opts"; then
- case $enable_option_checking in
- no) ;;
- fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
- *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
- esac
-fi
-
-# Check all directory arguments for consistency.
-for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
- datadir sysconfdir sharedstatedir localstatedir includedir \
- oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
- libdir localedir mandir
-do
- eval ac_val=\$$ac_var
- # Remove trailing slashes.
- case $ac_val in
- */ )
- ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
- eval $ac_var=\$ac_val;;
- esac
- # Be sure to have absolute directory names.
- case $ac_val in
- [\\/$]* | ?:[\\/]* ) continue;;
- NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
- esac
- as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
-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
- 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
-
-
-ac_pwd=`pwd` && test -n "$ac_pwd" &&
-ac_ls_di=`ls -di .` &&
-ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
- as_fn_error $? "working directory cannot be determined"
-test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
- as_fn_error $? "pwd does not report name of working directory"
-
-
-# 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 the parent directory.
- ac_confdir=`$as_dirname -- "$as_myself" ||
-$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_myself" : 'X\(//\)[^/]' \| \
- X"$as_myself" : 'X\(//\)$' \| \
- X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_myself" |
- 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
- test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
- as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
-fi
-ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
-ac_abs_confdir=`(
- cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
- pwd)`
-# When building in place, set srcdir=.
-if test "$ac_abs_confdir" = "$ac_pwd"; then
- srcdir=.
-fi
-# Remove unnecessary trailing slashes from srcdir.
-# Double slashes in file names in object file debugging info
-# mess up M-x gdb in Emacs.
-case $srcdir in
-*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
-esac
-for ac_var in $ac_precious_vars; do
- eval ac_env_${ac_var}_set=\${${ac_var}+set}
- eval ac_env_${ac_var}_value=\$${ac_var}
- eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
- eval ac_cv_env_${ac_var}_value=\$${ac_var}
-done
-
-#
-# 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 Cygwin Testsuite 0 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 \`..']
-
-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]
- --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]
- --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
- --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
- --infodir=DIR info documentation [DATAROOTDIR/info]
- --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
- --mandir=DIR man documentation [DATAROOTDIR/man]
- --docdir=DIR documentation root [DATAROOTDIR/doc/cygwin]
- --htmldir=DIR html documentation [DOCDIR]
- --dvidir=DIR dvi documentation [DOCDIR]
- --pdfdir=DIR pdf documentation [DOCDIR]
- --psdir=DIR ps documentation [DOCDIR]
-_ACEOF
-
- cat <<\_ACEOF
-_ACEOF
-fi
-
-if test -n "$ac_init_help"; then
- case $ac_init_help in
- short | recursive ) echo "Configuration of Cygwin Testsuite 0:";;
- esac
- cat <<\_ACEOF
-
-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>
- LIBS libraries to pass to the linker, e.g. -l<library>
- CPPFLAGS (Objective) 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.
-
-Report bugs to <cygwin@cygwin.com>.
-Cygwin Testsuite home page: <https://cygwin.com>.
-_ACEOF
-ac_status=$?
-fi
-
-if test "$ac_init_help" = "recursive"; then
- # If there are subdirs, report their specific --help.
- for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
- test -d "$ac_dir" ||
- { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
- continue
- ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
- # A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
- esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
- .) # We are building in place.
- ac_srcdir=.
- ac_top_srcdir=$ac_top_builddir_sub
- ac_abs_top_srcdir=$ac_pwd ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir
- ac_abs_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_build_prefix$srcdir
- ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
- cd "$ac_dir" || { ac_status=$?; continue; }
- # Check for guested 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
- else
- $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
- fi || ac_status=$?
- cd "$ac_pwd" || { ac_status=$?; break; }
- done
-fi
-
-test -n "$ac_init_help" && exit $ac_status
-if $ac_init_version; then
- cat <<\_ACEOF
-Cygwin Testsuite configure 0
-generated by GNU Autoconf 2.69
-
-Copyright (C) 2012 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
-fi
-
-## ------------------------ ##
-## Autoconf initialization. ##
-## ------------------------ ##
-
-# ac_fn_c_try_compile LINENO
-# --------------------------
-# Try to compile conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_compile ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext
- if { { ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compile") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_compile
-
-# ac_fn_c_try_cpp LINENO
-# ----------------------
-# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_cpp ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if { { ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } > conftest.i && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_cpp
-cat >config.log <<_ACEOF
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-
-It was created by Cygwin Testsuite $as_me 0, which was
-generated by GNU Autoconf 2.69. Invocation command line was
-
- $ $0 $@
-
-_ACEOF
-exec 5>>config.log
-{
-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`
-/usr/bin/hostinfo = `(/usr/bin/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=.
- $as_echo "PATH: $as_dir"
- done
-IFS=$as_save_IFS
-
-} >&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_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=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- case $ac_pass in
- 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
- 2)
- as_fn_append 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
- as_fn_append ac_configure_args " '$ac_arg'"
- ;;
- esac
- done
-done
-{ ac_configure_args0=; unset ac_configure_args0;}
-{ ac_configure_args1=; unset 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: Use '\'' to represent an apostrophe within the trap.
-# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
-trap 'exit_status=$?
- # Save into config.log some information that might help in debugging.
- {
- echo
-
- $as_echo "## ---------------- ##
-## Cache variables. ##
-## ---------------- ##"
- echo
- # The following way of writing the cache mishandles newlines in values,
-(
- for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
- eval ac_val=\$$ac_var
- case $ac_val in #(
- *${as_nl}*)
- case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
- esac
- case $ac_var in #(
- _ | IFS | as_nl) ;; #(
- BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
- *) { eval $ac_var=; unset $ac_var;} ;;
- esac ;;
- esac
- done
- (set) 2>&1 |
- case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
- *${as_nl}ac_space=\ *)
- sed -n \
- "s/'\''/'\''\\\\'\'''\''/g;
- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
- ;; #(
- *)
- sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
- ;;
- esac |
- sort
-)
- echo
-
- $as_echo "## ----------------- ##
-## Output variables. ##
-## ----------------- ##"
- echo
- for ac_var in $ac_subst_vars
- do
- eval ac_val=\$$ac_var
- case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
- esac
- $as_echo "$ac_var='\''$ac_val'\''"
- done | sort
- echo
-
- if test -n "$ac_subst_files"; then
- $as_echo "## ------------------- ##
-## File substitutions. ##
-## ------------------- ##"
- echo
- for ac_var in $ac_subst_files
- do
- eval ac_val=\$$ac_var
- case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
- esac
- $as_echo "$ac_var='\''$ac_val'\''"
- done | sort
- echo
- fi
-
- if test -s confdefs.h; then
- $as_echo "## ----------- ##
-## confdefs.h. ##
-## ----------- ##"
- echo
- cat confdefs.h
- echo
- fi
- test "$ac_signal" != 0 &&
- $as_echo "$as_me: caught signal $ac_signal"
- $as_echo "$as_me: exit $exit_status"
- } >&5
- rm -f core *.core core.conftest.* &&
- rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
- exit $exit_status
-' 0
-for ac_signal in 1 2 13 15; do
- trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
-done
-ac_signal=0
-
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -f -r conftest* confdefs.h
-
-$as_echo "/* confdefs.h */" > 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
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_URL "$PACKAGE_URL"
-_ACEOF
-
-
-# Let the site file select an alternate cache file if it wants to.
-# Prefer an explicitly selected file to automatically selected ones.
-ac_site_file1=NONE
-ac_site_file2=NONE
-if test -n "$CONFIG_SITE"; then
- # We do not want a PATH search for config.site.
- case $CONFIG_SITE in #((
- -*) ac_site_file1=./$CONFIG_SITE;;
- */*) ac_site_file1=$CONFIG_SITE;;
- *) ac_site_file1=./$CONFIG_SITE;;
- esac
-elif test "x$prefix" != xNONE; then
- ac_site_file1=$prefix/share/config.site
- ac_site_file2=$prefix/etc/config.site
-else
- ac_site_file1=$ac_default_prefix/share/config.site
- ac_site_file2=$ac_default_prefix/etc/config.site
-fi
-for ac_site_file in "$ac_site_file1" "$ac_site_file2"
-do
- test "x$ac_site_file" = xNONE && continue
- if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
-$as_echo "$as_me: loading site script $ac_site_file" >&6;}
- sed 's/^/| /' "$ac_site_file" >&5
- . "$ac_site_file" \
- || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "failed to load site script $ac_site_file
-See \`config.log' for more details" "$LINENO" 5; }
- 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. DJGPP emulates it as a regular file.
- if test /dev/null != "$cache_file" && test -f "$cache_file"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
-$as_echo "$as_me: loading cache $cache_file" >&6;}
- case $cache_file in
- [\\/]* | ?:[\\/]* ) . "$cache_file";;
- *) . "./$cache_file";;
- esac
- fi
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
-$as_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 $ac_precious_vars; 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,)
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
- ac_cache_corrupted=: ;;
- ,set)
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
-$as_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
- # differences in whitespace do not lead to failure.
- ac_old_val_w=`echo x $ac_old_val`
- ac_new_val_w=`echo x $ac_new_val`
- if test "$ac_old_val_w" != "$ac_new_val_w"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
-$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
- ac_cache_corrupted=:
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
-$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
- eval $ac_var=\$ac_old_val
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
-$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
-$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
- fi;;
- esac
- # Pass precious variables to config.status.
- if test "$ac_new_set" = set; then
- case $ac_new_val in
- *\'*) ac_arg=$ac_var=`$as_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.
- *) as_fn_append ac_configure_args " '$ac_arg'" ;;
- esac
- fi
-done
-if $ac_cache_corrupted; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
-$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
- as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
-fi
-## -------------------- ##
-## Main body of script. ##
-## -------------------- ##
-
-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
-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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="${ac_tool_prefix}gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
- $as_echo_n "(cached) " >&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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="${ac_tool_prefix}cc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- 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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&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_fn_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"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-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
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- for ac_prog in cl.exe
- 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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$CC" && break
- done
-fi
-if test -z "$CC"; then
- ac_ct_CC=$CC
- for ac_prog in cl.exe
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
- $as_echo_n "(cached) " >&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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$ac_ct_CC" && break
-done
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-fi
-
-fi
-
-
-test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "no acceptable C compiler found in \$PATH
-See \`config.log' for more details" "$LINENO" 5; }
-
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
- { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compiler $ac_option >&5") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- sed '10a\
-... rest of stderr output deleted ...
- 10q' conftest.err >conftest.er1
- cat conftest.er1 >&5
- fi
- rm -f conftest.er1 conftest.err
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
-done
-
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.out.dSYM 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.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
-$as_echo_n "checking whether the C compiler works... " >&6; }
-ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-
-# The possible output files:
-ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
-
-ac_rmfiles=
-for ac_file in $ac_files
-do
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
- * ) ac_rmfiles="$ac_rmfiles $ac_file";;
- esac
-done
-rm -f $ac_rmfiles
-
-if { { ac_try="$ac_link_default"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link_default") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
- # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
-# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
-# in a Makefile. We should not override ac_cv_exeext if it was cached,
-# so that the user can short-circuit this test for compilers unknown to
-# Autoconf.
-for ac_file in $ac_files ''
-do
- test -f "$ac_file" || continue
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
- ;;
- [ab].out )
- # We found the default executable, but exeext='' is most
- # certainly right.
- break;;
- *.* )
- if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
- then :; else
- ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- fi
- # We set ac_cv_exeext here because the later test for it is not
- # safe: cross compilers may not add the suffix if given an `-o'
- # argument, so we may need to know it at that point already.
- # Even if this section looks crufty: it has the advantage of
- # actually working.
- break;;
- * )
- break;;
- esac
-done
-test "$ac_cv_exeext" = no && ac_cv_exeext=
-
-else
- ac_file=''
-fi
-if test -z "$ac_file"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-$as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "C compiler cannot create executables
-See \`config.log' for more details" "$LINENO" 5; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
-$as_echo_n "checking for C compiler default output file name... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
-ac_exeext=$ac_cv_exeext
-
-rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
-ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
-$as_echo_n "checking for suffix of executables... " >&6; }
-if { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; 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 | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
- *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- break;;
- * ) break;;
- esac
-done
-else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-rm -f conftest conftest$ac_cv_exeext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
-$as_echo "$ac_cv_exeext" >&6; }
-
-rm -f conftest.$ac_ext
-EXEEXT=$ac_cv_exeext
-ac_exeext=$EXEEXT
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdio.h>
-int
-main ()
-{
-FILE *f = fopen ("conftest.out", "w");
- return ferror (f) || fclose (f) != 0;
-
- ;
- return 0;
-}
-_ACEOF
-ac_clean_files="$ac_clean_files conftest.out"
-# Check that the compiler produces executables we can run. If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
-if test "$cross_compiling" != yes; then
- { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
- if { ac_try='./conftest$ac_cv_exeext'
- { { case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then
- cross_compiling=no
- else
- if test "$cross_compiling" = maybe; then
- cross_compiling=yes
- else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details" "$LINENO" 5; }
- fi
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
-
-rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
-ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
-$as_echo_n "checking for suffix of object files... " >&6; }
-if ${ac_cv_objext+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.o conftest.obj
-if { { ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compile") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
- for ac_file in conftest.o conftest.obj conftest.*; do
- test -f "$ac_file" || continue;
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
- *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
- break;;
- esac
-done
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of object files: cannot compile
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
-$as_echo "$ac_cv_objext" >&6; }
-OBJEXT=$ac_cv_objext
-ac_objext=$OBJEXT
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
-$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if ${ac_cv_c_compiler_gnu+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-#ifndef __GNUC__
- choke me
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_compiler_gnu=yes
-else
- ac_compiler_gnu=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
-$as_echo "$ac_cv_c_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
- GCC=yes
-else
- GCC=
-fi
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if ${ac_cv_prog_cc_g+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_save_c_werror_flag=$ac_c_werror_flag
- ac_c_werror_flag=yes
- ac_cv_prog_cc_g=no
- CFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_g=yes
-else
- CFLAGS=""
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-else
- ac_c_werror_flag=$ac_save_c_werror_flag
- CFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_g=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_c_werror_flag=$ac_save_c_werror_flag
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
-$as_echo "$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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if ${ac_cv_prog_cc_c89+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_cv_prog_cc_c89=no
-ac_save_CC=$CC
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdarg.h>
-#include <stdio.h>
-struct stat;
-/* 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 -std 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 -std. */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
- inside strings and character constants. */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 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
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
- -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
- CC="$ac_save_CC $ac_arg"
- if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_c89=$ac_arg
-fi
-rm -f core conftest.err conftest.$ac_objext
- test "x$ac_cv_prog_cc_c89" != "xno" && break
-done
-rm -f conftest.$ac_ext
-CC=$ac_save_CC
-
-fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
- x)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
- xno)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
- *)
- CC="$CC $ac_cv_prog_cc_c89"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-if test "x$ac_cv_prog_cc_c89" != xno; then :
-
-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_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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
-$as_echo_n "checking how to run the C preprocessor... " >&6; }
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
- CPP=
-fi
-if test -z "$CPP"; then
- if ${ac_cv_prog_CPP+:} false; then :
- $as_echo_n "(cached) " >&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 confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- # Broken: success on invalid input.
-continue
-else
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i 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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
-$as_echo "$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 confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- # Broken: success on invalid input.
-continue
-else
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-
-else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details" "$LINENO" 5; }
-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
-
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ar; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_AR+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$AR"; then
- ac_cv_prog_AR="$AR" # 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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_AR="${ac_tool_prefix}ar"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-AR=$ac_cv_prog_AR
-if test -n "$AR"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
-$as_echo "$AR" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_AR"; then
- ac_ct_AR=$AR
- # Extract the first word of "ar", so it can be a program name with args.
-set dummy ar; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_AR+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_AR"; then
- ac_cv_prog_ac_ct_AR="$ac_ct_AR" # 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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_AR="ar"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_AR=$ac_cv_prog_ac_ct_AR
-if test -n "$ac_ct_AR"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
-$as_echo "$ac_ct_AR" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_AR" = x; then
- AR=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- AR=$ac_ct_AR
- fi
-else
- AR="$ac_cv_prog_AR"
-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, we kill variables containing newlines.
-# 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.
-(
- for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
- eval ac_val=\$$ac_var
- case $ac_val in #(
- *${as_nl}*)
- case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
- esac
- case $ac_var in #(
- _ | IFS | as_nl) ;; #(
- BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
- *) { eval $ac_var=; unset $ac_var;} ;;
- esac ;;
- esac
- done
-
- (set) 2>&1 |
- case $as_nl`(ac_space=' '; set) 2>&1` in #(
- *${as_nl}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 "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
- ;;
- esac |
- sort
-) |
- sed '
- /^ac_cv_env_/b end
- t clear
- :clear
- s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
- t end
- s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
- :end' >>confcache
-if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
- if test -w "$cache_file"; then
- if test "x$cache_file" != "x/dev/null"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
-$as_echo "$as_me: updating cache $cache_file" >&6;}
- if test ! -f "$cache_file" || test -h "$cache_file"; then
- cat confcache >"$cache_file"
- else
- case $cache_file in #(
- */* | ?:*)
- mv -f confcache "$cache_file"$$ &&
- mv -f "$cache_file"$$ "$cache_file" ;; #(
- *)
- mv -f confcache "$cache_file" ;;
- esac
- fi
- fi
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
-$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
- 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}'
-
-# Transform confdefs.h into DEFS.
-# Protect against shell expansion while executing Makefile rules.
-# Protect against Makefile macro expansion.
-#
-# If the first sed substitution is executed (which looks for macros that
-# take arguments), then branch to the quote section. Otherwise,
-# look for a macro that doesn't take arguments.
-ac_script='
-:mline
-/\\$/{
- N
- s,\\\n,,
- b mline
-}
-t clear
-:clear
-s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g
-t quote
-s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g
-t quote
-b any
-:quote
-s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g
-s/\[/\\&/g
-s/\]/\\&/g
-s/\$/$$/g
-H
-:any
-${
- g
- s/^\n//
- s/\n/ /g
- p
-}
-'
-DEFS=`sed -n "$ac_script" confdefs.h`
-
-
-ac_libobjs=
-ac_ltlibobjs=
-U=
-for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
- # 1. Remove the extension, and $U if already installed.
- ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
- ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
- # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
- # will be set to the directory where LIBOBJS objects are built.
- as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
- as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
-done
-LIBOBJS=$ac_libobjs
-
-LTLIBOBJS=$ac_ltlibobjs
-
-
-
-: "${CONFIG_STATUS=./config.status}"
-ac_write_fail=0
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
-as_write_fail=0
-cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
-#! $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}
-export SHELL
-_ASEOF
-cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
-## -------------------- ##
-## M4sh Initialization. ##
-## -------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in #(
- *posix*) :
- set -o posix ;; #(
- *) :
- ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- PATH_SEPARATOR=:
- (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
- (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
- PATH_SEPARATOR=';'
- }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
-# Find who we are. Look in the path if we contain no directory separator.
-as_myself=
-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
-IFS=$as_save_IFS
-
- ;;
-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
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
- exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
-as_fn_error ()
-{
- as_status=$1; test $as_status -eq 0 && as_status=1
- if test "$4"; then
- as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
- fi
- $as_echo "$as_me: error: $2" >&2
- as_fn_exit $as_status
-} # as_fn_error
-
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
- return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
- set +e
- as_fn_set_status $1
- exit $1
-} # as_fn_exit
-
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
- { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
- eval 'as_fn_append ()
- {
- eval $1+=\$2
- }'
-else
- as_fn_append ()
- {
- eval $1=\$$1\$2
- }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
- eval 'as_fn_arith ()
- {
- as_val=$(( $* ))
- }'
-else
- as_fn_arith ()
- {
- as_val=`expr "$@" || test $? -eq 1`
- }
-fi # as_fn_arith
-
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; 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
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
- }
- /^X\/\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\/\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
-
-# 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
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
- case `echo 'xy\c'` in
- *c*) ECHO_T=' ';; # ECHO_T is single tab character.
- xy) ECHO_C='\c';;
- *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
- ECHO_T=' ';;
- esac;;
-*)
- ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
- rm -f conf$$.dir/conf$$.file
-else
- rm -f conf$$.dir
- mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
- if ln -s conf$$.file conf$$ 2>/dev/null; then
- as_ln_s='ln -s'
- # ... but there are two gotchas:
- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -pR'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -pR'
- elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
- else
- as_ln_s='cp -pR'
- fi
-else
- as_ln_s='cp -pR'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
- case $as_dir in #(
- -*) as_dir=./$as_dir;;
- esac
- test -d "$as_dir" || eval $as_mkdir_p || {
- as_dirs=
- while :; do
- case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
- *) as_qdir=$as_dir;;
- esac
- as_dirs="'$as_qdir' $as_dirs"
- as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- test -d "$as_dir" && break
- done
- test -z "$as_dirs" || eval "mkdir $as_dirs"
- } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p='mkdir -p "$as_dir"'
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-
-# as_fn_executable_p FILE
-# -----------------------
-# Test if FILE is an executable regular file.
-as_fn_executable_p ()
-{
- test -f "$1" && test -x "$1"
-} # as_fn_executable_p
-as_test_x='test -x'
-as_executable_p=as_fn_executable_p
-
-# 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'"
-
-
-exec 6>&1
-## ----------------------------------- ##
-## Main body of $CONFIG_STATUS script. ##
-## ----------------------------------- ##
-_ASEOF
-test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# Save the log message, to keep $0 and so on meaningful, and to
-# report actual input values of CONFIG_FILES etc. instead of their
-# values after options handling.
-ac_log="
-This file was extended by Cygwin Testsuite $as_me 0, which was
-generated by GNU Autoconf 2.69. Invocation command line was
-
- CONFIG_FILES = $CONFIG_FILES
- CONFIG_HEADERS = $CONFIG_HEADERS
- CONFIG_LINKS = $CONFIG_LINKS
- CONFIG_COMMANDS = $CONFIG_COMMANDS
- $ $0 $@
-
-on `(hostname || uname -n) 2>/dev/null | sed 1q`
-"
-
-_ACEOF
-
-case $ac_config_files in *"
-"*) set x $ac_config_files; shift; ac_config_files=$*;;
-esac
-
-
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-# Files that config.status was made for.
-config_files="$ac_config_files"
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-ac_cs_usage="\
-\`$as_me' instantiates files and other configuration actions
-from templates according to the current configuration. Unless the files
-and actions are specified as TAGs, all are instantiated by default.
-
-Usage: $0 [OPTION]... [TAG]...
-
- -h, --help print this help, then exit
- -V, --version print version number and configuration settings, then exit
- --config print configuration, then exit
- -q, --quiet, --silent
- 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
-
-Configuration files:
-$config_files
-
-Report bugs to <cygwin@cygwin.com>.
-Cygwin Testsuite home page: <https://cygwin.com>."
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
-ac_cs_version="\\
-Cygwin Testsuite config.status 0
-configured by $0, generated by GNU Autoconf 2.69,
- with options \\"\$ac_cs_config\\"
-
-Copyright (C) 2012 Free Software Foundation, Inc.
-This config.status script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it."
-
-ac_pwd='$ac_pwd'
-srcdir='$srcdir'
-test -n "\$AWK" || AWK=awk
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# The default lists apply if the user does not specify any file.
-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=`expr "X$1" : 'X\([^=]*\)='`
- ac_optarg=
- ac_shift=:
- ;;
- *)
- ac_option=$1
- ac_optarg=$2
- ac_shift=shift
- ;;
- esac
-
- case $ac_option in
- # Handling of the options.
- -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
- ac_cs_recheck=: ;;
- --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
- $as_echo "$ac_cs_version"; exit ;;
- --config | --confi | --conf | --con | --co | --c )
- $as_echo "$ac_cs_config"; exit ;;
- --debug | --debu | --deb | --de | --d | -d )
- debug=: ;;
- --file | --fil | --fi | --f )
- $ac_shift
- case $ac_optarg in
- *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
- '') as_fn_error $? "missing file argument" ;;
- esac
- as_fn_append CONFIG_FILES " '$ac_optarg'"
- ac_need_defaults=false;;
- --he | --h | --help | --hel | -h )
- $as_echo "$ac_cs_usage"; exit ;;
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil | --si | --s)
- ac_cs_silent=: ;;
-
- # This is an error.
- -*) as_fn_error $? "unrecognized option: \`$1'
-Try \`$0 --help' for more information." ;;
-
- *) as_fn_append ac_config_targets " $1"
- ac_need_defaults=false ;;
-
- 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 || ac_write_fail=1
-if \$ac_cs_recheck; then
- set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
- shift
- \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
- CONFIG_SHELL='$SHELL'
- export CONFIG_SHELL
- exec "\$@"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-exec 5>>config.log
-{
- echo
- sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
- $as_echo "$ac_log"
-} >&5
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-
-# Handling of arguments.
-for ac_config_target in $ac_config_targets
-do
- case $ac_config_target in
- "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
-
- *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
- 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
-fi
-
-# Have a temporary directory for convenience. Make it in the build tree
-# simply because there is no reason against having it here, and in addition,
-# creating and moving files from /tmp can sometimes cause problems.
-# Hook for its removal unless debugging.
-# Note that there is a small window in which the directory will not be cleaned:
-# after its creation but before its name has been assigned to `$tmp'.
-$debug ||
-{
- tmp= ac_tmp=
- trap 'exit_status=$?
- : "${ac_tmp:=$tmp}"
- { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
-' 0
- trap 'as_fn_exit 1' 1 2 13 15
-}
-# Create a (secure) tmp directory for tmp files.
-
-{
- tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
- test -d "$tmp"
-} ||
-{
- tmp=./conf$$-$RANDOM
- (umask 077 && mkdir "$tmp")
-} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
-ac_tmp=$tmp
-
-# Set up the scripts for CONFIG_FILES section.
-# No need to generate them if there are no CONFIG_FILES.
-# This happens for instance with `./config.status config.h'.
-if test -n "$CONFIG_FILES"; then
-
-
-ac_cr=`echo X | tr X '\015'`
-# On cygwin, bash can eat \r inside `` if the user requested igncr.
-# But we know of no other shell where ac_cr would be empty at this
-# point, so we can use a bashism as a fallback.
-if test "x$ac_cr" = x; then
- eval ac_cr=\$\'\\r\'
-fi
-ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
-if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
- ac_cs_awk_cr='\\r'
-else
- ac_cs_awk_cr=$ac_cr
-fi
-
-echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
-_ACEOF
-
-
-{
- echo "cat >conf$$subs.awk <<_ACEOF" &&
- echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
- echo "_ACEOF"
-} >conf$$subs.sh ||
- as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
-ac_delim='%!_!# '
-for ac_last_try in false false false false false :; do
- . ./conf$$subs.sh ||
- as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-
- ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
- if test $ac_delim_n = $ac_delim_num; then
- break
- elif $ac_last_try; then
- as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
- else
- ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
- fi
-done
-rm -f conf$$subs.sh
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
-_ACEOF
-sed -n '
-h
-s/^/S["/; s/!.*/"]=/
-p
-g
-s/^[^!]*!//
-:repl
-t repl
-s/'"$ac_delim"'$//
-t delim
-:nl
-h
-s/\(.\{148\}\)..*/\1/
-t more1
-s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
-p
-n
-b repl
-:more1
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t nl
-:delim
-h
-s/\(.\{148\}\)..*/\1/
-t more2
-s/["\\]/\\&/g; s/^/"/; s/$/"/
-p
-b
-:more2
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t delim
-' <conf$$subs.awk | sed '
-/^[^""]/{
- N
- s/\n//
-}
-' >>$CONFIG_STATUS || ac_write_fail=1
-rm -f conf$$subs.awk
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACAWK
-cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
- for (key in S) S_is_set[key] = 1
- FS = ""
-
-}
-{
- line = $ 0
- nfields = split(line, field, "@")
- substed = 0
- len = length(field[1])
- for (i = 2; i < nfields; i++) {
- key = field[i]
- keylen = length(key)
- if (S_is_set[key]) {
- value = S[key]
- line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
- len += length(value) + length(field[++i])
- substed = 1
- } else
- len += 1 + keylen
- }
-
- print line
-}
-
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
- sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
-else
- cat
-fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
- || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
-_ACEOF
-
-# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
-# ${srcdir} and @srcdir@ entries 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[ ]*=[ ]*/{
-h
-s///
-s/^/:/
-s/[ ]*$/:/
-s/:\$(srcdir):/:/g
-s/:\${srcdir}:/:/g
-s/:@srcdir@:/:/g
-s/^:*//
-s/:*$//
-x
-s/\(=[ ]*\).*/\1/
-G
-s/\n//
-s/^[^=]*=[ ]*$//
-}'
-fi
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-fi # test -n "$CONFIG_FILES"
-
-
-eval set X " :F $CONFIG_FILES "
-shift
-for ac_tag
-do
- case $ac_tag in
- :[FHLC]) ac_mode=$ac_tag; continue;;
- esac
- case $ac_mode$ac_tag in
- :[FHL]*:*);;
- :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
- :[FH]-) ac_tag=-:-;;
- :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
- esac
- ac_save_IFS=$IFS
- IFS=:
- set x $ac_tag
- IFS=$ac_save_IFS
- shift
- ac_file=$1
- shift
-
- case $ac_mode in
- :L) ac_source=$1;;
- :[FH])
- ac_file_inputs=
- for ac_f
- do
- case $ac_f in
- -) ac_f="$ac_tmp/stdin";;
- *) # Look for the file first in the build tree, then in the source tree
- # (if the path is not absolute). The absolute path cannot be DOS-style,
- # because $ac_f cannot contain `:'.
- test -f "$ac_f" ||
- case $ac_f in
- [\\/$]*) false;;
- *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
- esac ||
- as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
- esac
- case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
- as_fn_append ac_file_inputs " '$ac_f'"
- done
-
- # 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. */
- configure_input='Generated from '`
- $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
- `' by configure.'
- if test x"$ac_file" != x-; then
- configure_input="$ac_file. $configure_input"
- { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
-$as_echo "$as_me: creating $ac_file" >&6;}
- fi
- # Neutralize special characters interpreted by sed in replacement strings.
- case $configure_input in #(
- *\&* | *\|* | *\\* )
- ac_sed_conf_input=`$as_echo "$configure_input" |
- sed 's/[\\\\&|]/\\\\&/g'`;; #(
- *) ac_sed_conf_input=$configure_input;;
- esac
-
- case $ac_tag in
- *:-:* | *:-) cat >"$ac_tmp/stdin" \
- || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
- esac
- ;;
- esac
-
- ac_dir=`$as_dirname -- "$ac_file" ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$ac_file" : 'X\(//\)[^/]' \| \
- X"$ac_file" : 'X\(//\)$' \| \
- X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$ac_file" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- as_dir="$ac_dir"; as_fn_mkdir_p
- ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
- # A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
- esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
- .) # We are building in place.
- ac_srcdir=.
- ac_top_srcdir=$ac_top_builddir_sub
- ac_abs_top_srcdir=$ac_pwd ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir
- ac_abs_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_build_prefix$srcdir
- ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
-
- case $ac_mode in
- :F)
- #
- # CONFIG_FILE
- #
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# If the template does not know about datarootdir, expand it.
-# FIXME: This hack should be removed a few years after 2.60.
-ac_datarootdir_hack=; ac_datarootdir_seen=
-ac_sed_dataroot='
-/datarootdir/ {
- p
- q
-}
-/@datadir@/p
-/@docdir@/p
-/@infodir@/p
-/@localedir@/p
-/@mandir@/p'
-case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
-*datarootdir*) ac_datarootdir_seen=yes;;
-*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
- ac_datarootdir_hack='
- s&@datadir@&$datadir&g
- s&@docdir@&$docdir&g
- s&@infodir@&$infodir&g
- s&@localedir@&$localedir&g
- s&@mandir@&$mandir&g
- s&\\\${datarootdir}&$datarootdir&g' ;;
-esac
-_ACEOF
-
-# Neutralize VPATH when `$srcdir' = `.'.
-# Shell code in configure.ac might set extrasub.
-# FIXME: do we really want to maintain this feature?
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_sed_extra="$ac_vpsub
-$extrasub
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-:t
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s|@configure_input@|$ac_sed_conf_input|;t t
-s&@top_builddir@&$ac_top_builddir_sub&;t t
-s&@top_build_prefix@&$ac_top_build_prefix&;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&@abs_top_builddir@&$ac_abs_top_builddir&;t t
-$ac_datarootdir_hack
-"
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
- >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
-
-test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
- { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
- { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
- "$ac_tmp/out"`; test -z "$ac_out"; } &&
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined. Please make sure it is defined" >&5
-$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined. Please make sure it is defined" >&2;}
-
- rm -f "$ac_tmp/stdin"
- case $ac_file in
- -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
- *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
- esac \
- || as_fn_error $? "could not create $ac_file" "$LINENO" 5
- ;;
-
-
-
- esac
-
-done # for ac_tag
-
-
-as_fn_exit 0
-_ACEOF
-ac_clean_files=$ac_clean_files_save
-
-test $ac_write_fail = 0 ||
- as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
-
-
-# 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 || as_fn_exit 1
-fi
-if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
-$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
-fi
-
diff --git a/winsup/testsuite/configure.ac b/winsup/testsuite/configure.ac
deleted file mode 100755
index dc7cd2133..000000000
--- a/winsup/testsuite/configure.ac
+++ /dev/null
@@ -1,21 +0,0 @@
-dnl Autoconf configure script for Cygwin's testsuite.
-dnl Copyright 2000, 2006, 2012 Red Hat, Inc.
-dnl
-dnl This file is part of Cygwin.
-dnl
-dnl This software is a copyrighted work licensed under the terms of the
-dnl Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-dnl details.
-dnl
-dnl Process this file with autoconf to produce a configure script.
-
-AC_PREREQ(2.59)
-AC_INIT([Cygwin Testsuite], 0,
- cygwin@cygwin.com, cygwin, https://cygwin.com)
-AC_CONFIG_SRCDIR(Makefile.in)
-
-AC_PROG_CC
-AC_PROG_CPP
-AC_CHECK_TOOL(AR,ar)
-
-AC_OUTPUT(Makefile)
diff --git a/winsup/testsuite/cygrun.c b/winsup/testsuite/cygrun.c
deleted file mode 100644
index 60330ca33..000000000
--- a/winsup/testsuite/cygrun.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/* cygrun.c: testsuite support program
-
- Copyright 1999, 2000, 2001, 2002 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-/* This program is intended to be used only by the testsuite. It runs
- programs without using the cygwin api, so that the just-built dll
- can be tested without interference from the currently installed
- dll. */
-
-#include <stdio.h>
-#include <windows.h>
-#include <stdlib.h>
-
-int
-main (int argc, char **argv)
-{
- STARTUPINFO sa;
- PROCESS_INFORMATION pi;
- DWORD ec = 1;
- char *p;
-
- if (argc < 2)
- {
- fprintf (stderr, "Usage: cygrun [program]\n");
- exit (0);
- }
-
- SetEnvironmentVariable ("CYGWIN_TESTING", "1");
- if ((p = getenv ("CYGWIN")) == NULL || (strstr (p, "ntsec") == NULL))
- {
- char buf[4096];
- if (!p)
- {
- p = buf;
- p[0] = '\0';
- }
- else
- {
- strcpy (buf, p);
- strcat (buf, " ");
- }
- strcat(buf, "ntsec");
- SetEnvironmentVariable ("CYGWIN", buf);
- }
-
- memset (&sa, 0, sizeof (sa));
- memset (&pi, 0, sizeof (pi));
- if (!CreateProcess (0, argv[1], 0, 0, 1, 0, 0, 0, &sa, &pi))
- {
- fprintf (stderr, "CreateProcess %s failed\n", argv[1]);
- exit (1);
- }
-
- WaitForSingleObject (pi.hProcess, INFINITE);
-
- GetExitCodeProcess (pi.hProcess, &ec);
-
- CloseHandle (pi.hProcess);
- CloseHandle (pi.hThread);
- if (ec > 0xff)
- ec >>= 8;
- return ec;
-}
diff --git a/winsup/testsuite/libltp/include/dataascii.h b/winsup/testsuite/libltp/include/dataascii.h
deleted file mode 100644
index cd75245e4..000000000
--- a/winsup/testsuite/libltp/include/dataascii.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- */
-#ifndef _DATAASCII_H_
-#define _DATAASCII_H_
-
-/***********************************************************************
- * int dataasciigen(listofchars, buffer, size, offset)
- *
- * This function fills buffer with ascii characters.
- * The ascii characters are obtained from listofchars or the CHARS array
- * if listofchars is NULL.
- * Each char is selected by an index. The index is the remainder
- * of count divided by the array size.
- * This method allows more than one process to write to a location
- * in a file without corrupting it for another process' point of view.
- *
- * The return value will be the number of character written in buffer
- * (size).
- *
- ***********************************************************************/
-int dataasciigen(char *, char *, int, int);
-
-/***********************************************************************
- * int dataasciichk(listofchars, buffer, size, count, errmsg)
- *
- * This function checks the contents of a buffer produced by
- * dataasciigen.
- *
- * return values:
- * >= 0 : error at character count
- * < 0 : no error
- ***********************************************************************/
-
-int dataasciichk(char *, char *, int, int, char**);
-
-#endif
diff --git a/winsup/testsuite/libltp/include/databin.h b/winsup/testsuite/libltp/include/databin.h
deleted file mode 100644
index b71fbc0c1..000000000
--- a/winsup/testsuite/libltp/include/databin.h
+++ /dev/null
@@ -1,44 +0,0 @@
-#ifndef _DATABIN_H_
-#define _DATABIN_H_
-
-/*******************************************************************************
-* NAME
-* databingen - fill a buffer with a data pattern
-*
-* SYNOPSIS
-* (void) databingen(mode, buffer, bsize, offset)
-* int mode;
-* char *buffer;
-* int bsize;
-* int offset;
-*
-* DESCRIPTION
-* datagen fills the buffer pointed to by 'buffer' with 'bsize' bytes
-* of data of the form indicated by 'mode'.
-* All modes (expect r -random) are file offset based.
-* This allows more than process to do writing to the file without
-* corrupting it if the same modes were used.
-* They data modes to choose from, these are:
-*
-* 'a' - writes an alternating bit pattern (i.e. 0x5555555...)
-*
-* 'c' - writes a checkerboard pattern (i.e. 0xff00ff00ff00...)
-*
-* 'C' - writes counting pattern (i.e. 0 - 07, 0 - 07, ...);
-*
-* 'o' - writes all bits set (i.e. 0xffffffffffffff...)
-*
-* 'z' - writes all bits cleared (i.e. 0x000000000...);
-*
-* 'r' - writes random integers
-*
-* RETURN VALUE
-* None
-*
-*******************************************************************************/
-
-void databingen( int mode, unsigned char *buffer, int bsize, int offset );
-
-void databinchedk( int mode, unsigned char *buffer, int bsize, int offset, char **errmsg);
-
-#endif
diff --git a/winsup/testsuite/libltp/include/file_lock.h b/winsup/testsuite/libltp/include/file_lock.h
deleted file mode 100644
index 8c9a94835..000000000
--- a/winsup/testsuite/libltp/include/file_lock.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- */
-#ifndef _FILE_LOCK_H_
-#define _FILE_LOCK_H_
-
-extern char Fl_syscall_str[128];
-
-int file_lock( int , int, char ** );
-int record_lock( int , int , int , int , char ** );
-
-#endif /* _FILE_LOCK_H_ */
diff --git a/winsup/testsuite/libltp/include/forker.h b/winsup/testsuite/libltp/include/forker.h
deleted file mode 100644
index effd5d66e..000000000
--- a/winsup/testsuite/libltp/include/forker.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- */
-#ifndef _FORKER_H_
-#define _FORKER_H_
-
-#define FORKER_MAX_PIDS 4098
-
-extern int Forker_pids[FORKER_MAX_PIDS]; /* holds pids of forked processes */
-extern int Forker_npids; /* number of entries in Forker_pids */
-
-/*
- * This function will fork and the parent will exit zero and
- * the child will return. This will orphan the returning process
- * putting it in the background.
- */
-int background( char * );
-
-/*
- * Forker will fork ncopies-1 copies of self.
- *
- * arg 1: Number of copies of the process to be running after return.
- * This value minus one is the number of forks performed.
- * arg 2: mode: 0 - all children are first generation descendents.
- * 1 - each subsequent child is a descendent of another
- * descendent, resulting in only one direct descendent of the
- * parent and each other child is a child of another child in
- * relation to the parent.
- * arg 3: prefix: string to preceed any error messages. A value of NULL
- * results in no error messages on failure.
- * returns: returns to parent the number of children forked.
- */
-int forker( int , int , char * );
-
-#endif /* _FORKER_H_ */
diff --git a/winsup/testsuite/libltp/include/open_flags.h b/winsup/testsuite/libltp/include/open_flags.h
deleted file mode 100644
index 87fe6ff1d..000000000
--- a/winsup/testsuite/libltp/include/open_flags.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- */
-#ifndef _OPEN_FLAGS_H_
-#define _OPEN_FLAGS_H_
-
-/***********************************************************************
- * This function attempts to convert open flag bits into human readable
- * symbols (i.e. O_TRUNC). If there are more than one symbol,
- * the <sep> string will be placed as a separator between symbols.
- * Commonly used separators would be a comma "," or pipe "|".
- * If <mode> is one and not all <openflags> bits can be converted to
- * symbols, the "UNKNOWN" symbol will be added to return string.
- *
- * Return Value
- * openflags2symbols will return the indentified symbols.
- * If no symbols are recognized the return value will be a empty
- * string or the "UNKNOWN" symbol.
- *
- * Limitations
- * Currently (05/96) all known symbols are coded into openflags2symbols.
- * If new open flags are added this code will have to updated
- * to know about them or they will not be recognized.
- *
- * The Open_symbols must be large enough to hold all possible symbols
- * for a given system.
- *
- ***********************************************************************/
-char *openflags2symbols( int, char *, int );
-
-/***********************************************************************
- * This function will take a string of comma separated open flags symbols
- * and translate them into an open flag bitmask.
- * If any symbol is not valid, -1 is returned. On this error condition
- * the badname pointer is updated if not NULL. badname will point
- * to the beginning location of where the invalid symbol was found.
- * string will be returned unchanged.
- *
- * A signal received while parsing string could cause the string to
- * contain a NULL character in the middle of it.
- *
- ***********************************************************************/
-int parse_open_flags( char *, char ** );
-
-#endif
diff --git a/winsup/testsuite/libltp/include/pattern.h b/winsup/testsuite/libltp/include/pattern.h
deleted file mode 100644
index 74f841cae..000000000
--- a/winsup/testsuite/libltp/include/pattern.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- */
-#ifndef _PATTERN_H_
-#define _PATTERN_H_
-
-/*
- * pattern_check(buf, buflen, pat, patlen, patshift)
- *
- * Check a buffer of length buflen against repeated occurrances of
- * a pattern whose length is patlen. Patshift can be used to rotate
- * the pattern by patshift bytes to the left.
- *
- * Patshift may be greater than patlen, the pattern will be rotated by
- * (patshift % patshift) bytes.
- *
- * pattern_check returns -1 if the buffer does not contain repeated
- * occurrances of the indicated pattern (shifted by patshift).
- *
- * The algorithm used to check the buffer relies on the fact that buf is
- * supposed to be repeated copies of pattern. The basic algorithm is
- * to validate the first patlen bytes of buf against the pat argument
- * passed in - then validate the next patlen bytes against the 1st patlen
- * bytes - the next (2*patlen) bytes against the 1st (2*pathen) bytes, and
- * so on. This algorithm only works when the assumption of a buffer full
- * of repeated copies of a pattern holds, and gives MUCH better results
- * then walking the buffer byte by byte.
- *
- * Performance wise, It appears to be about 5% slower than doing a straight
- * memcmp of 2 buffers, but the big win is that it does not require a
- * 2nd comparison buffer, only the pattern.
- */
-int pattern_check( char * , int , char * , int , int );
-
-/*
- * pattern_fill(buf, buflen, pat, patlen, patshift)
- *
- * Fill a buffer of length buflen with repeated occurrances of
- * a pattern whose length is patlen. Patshift can be used to rotate
- * the pattern by patshift bytes to the left.
- *
- * Patshift may be greater than patlen, the pattern will be rotated by
- * (patshift % patlen) bytes.
- *
- * If buflen is not a multiple of patlen, a partial pattern will be written
- * in the last part of the buffer. This implies that a buffer which is
- * shorter than the pattern length will receive only a partial pattern ...
- *
- * pattern_fill always returns 0 - no validation of arguments is done.
- *
- * The algorithm used to fill the buffer relies on the fact that buf is
- * supposed to be repeated copies of pattern. The basic algorithm is
- * to fill the first patlen bytes of buf with the pat argument
- * passed in - then copy the next patlen bytes with the 1st patlen
- * bytes - the next (2*patlen) bytes with the 1st (2*pathen) bytes, and
- * so on. This algorithm only works when the assumption of a buffer full
- * of repeated copies of a pattern holds, and gives MUCH better results
- * then filling the buffer 1 byte at a time.
- */
-int pattern_fill( char * , int , char * , int , int );
-
-#endif
diff --git a/winsup/testsuite/libltp/include/random_range.h b/winsup/testsuite/libltp/include/random_range.h
deleted file mode 100644
index d3e1cceb8..000000000
--- a/winsup/testsuite/libltp/include/random_range.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- */
-#ifndef _RANDOM_RANGE_H_
-#define _RANDOM_RANGE_H_
-
-int parse_ranges ( char *, int, int, int, int (*)(), char **, char ** );
-int range_min ( char *, int );
-int range_max ( char *, int );
-int range_mult ( char *, int );
-long random_range ( int, int, int, char ** );
-long random_rangel ( long, long, long, char ** );
-long long random_rangell ( long long, long long, long long, char ** );
-void random_range_seed( long );
-long random_bit ( long );
-
-#endif
diff --git a/winsup/testsuite/libltp/include/rmobj.h b/winsup/testsuite/libltp/include/rmobj.h
deleted file mode 100644
index 4808ca258..000000000
--- a/winsup/testsuite/libltp/include/rmobj.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef _RMOBJ_H_
-#define _RMOBJ_H_
-
-/*
- * rmobj() - Remove the specified object. If the specified object is a
- * directory, recursively remove everything inside of it. If
- * there are any problems, set errmsg (if it is not NULL) and
- * return -1. Otherwise return 0.
- */
-int rmobj( char *object , char **errmesg );
-
-#endif
diff --git a/winsup/testsuite/libltp/include/search_path.h b/winsup/testsuite/libltp/include/search_path.h
deleted file mode 100644
index 58b7a36d2..000000000
--- a/winsup/testsuite/libltp/include/search_path.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- */
-
-/* $Id$ */
-
-
-int search_path(const char *cmd, const char *res_path, int access_mode, int fullpath);
diff --git a/winsup/testsuite/libltp/include/str_to_bytes.h b/winsup/testsuite/libltp/include/str_to_bytes.h
deleted file mode 100644
index 100d37df5..000000000
--- a/winsup/testsuite/libltp/include/str_to_bytes.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- */
-#ifndef _STR_TO_BYTES_
-#define _STR_TO_BYTES_
-
-int str_to_bytes ( char * );
-long str_to_lbytes ( char * );
-long long str_to_llbytes( char * );
-
-#endif
diff --git a/winsup/testsuite/libltp/include/string_to_tokens.h b/winsup/testsuite/libltp/include/string_to_tokens.h
deleted file mode 100644
index 9c0935ec5..000000000
--- a/winsup/testsuite/libltp/include/string_to_tokens.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- */
-#ifndef _STRING_TO_TOKENS_H_
-#define _STRING_TO_TOKENS_H_
-
-/*
- * string_to_tokens()
- *
- * This function parses the string 'arg_string', placing pointers to
- * the 'separator' separated tokens into the elements of 'arg_array'.
- * The array is terminated with a null pointer.
- *
- * NOTE: This function uses strtok() to parse 'arg_string', and thus
- * physically alters 'arg_string' by placing null characters where the
- * separators originally were.
- */
-int string_to_tokens(char *, char **, int, char *);
-
-#endif
diff --git a/winsup/testsuite/libltp/include/test.h b/winsup/testsuite/libltp/include/test.h
deleted file mode 100644
index 8cffea4cb..000000000
--- a/winsup/testsuite/libltp/include/test.h
+++ /dev/null
@@ -1,232 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *.
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- */
-
-/* $Id$ */
-
-#ifndef __TEST_H__
-#define __TEST_H__
-
-#define execve execve_foo
-#define execv execv_foo
-#define execvp execvp_foo
-#include <stdio.h>
-#include <signal.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <string.h>
-#undef execvp
-#undef execv
-#undef execve
-
-int execve(const char *, const char * const [], char * const *);
-int execv(const char *, const char * const []);
-int execvp(const char *, const char * const []);
-
-/* CGF: Avoid compilation warnings for undefined functions */
-extern int setregid (gid_t, gid_t);
-int setreuid (uid_t, uid_t);
-
-#define TPASS 0 /* Test passed flag */
-#define TFAIL 1 /* Test failed flag */
-#define TBROK 2 /* Test broken flag */
-#define TWARN 4 /* Test warning flag */
-#define TRETR 8 /* Test retire flag */
-#define TINFO 16 /* Test information flag */
-#define TCONF 32 /* Test not appropriate for configuration flag */
-
-/*
- * To determine if you are on a Umk or Unicos system,
- * use sysconf(_SC_CRAY_SYSTEM). But since _SC_CRAY_SYSTEM
- * is not defined until 90, it will be define here if not already
- * defined.
- * if ( sysconf(_SC_CRAY_SYSTEM) == 1 )
- * on UMK
- * else # returned 0 or -1
- * on Unicos
- * This is only being done on CRAY systems.
- */
-#ifdef CRAY
-#ifndef _SC_CRAY_SYSTEM
-#define _SC_CRAY_SYSTEM 140
-#endif /* ! _SC_CRAY_SYSTEM */
-#endif /* CRAY */
-
-/*
- * Ensure that NUMSIGS is defined.
- * It should be defined in signal.h or sys/signal.h on
- * UNICOS/mk and IRIX systems. On UNICOS systems,
- * it is not defined, thus it is being set to UNICOS's NSIG.
- * Note: IRIX's NSIG (signals are 1-(NSIG-1))
- * is not same meaning as UNICOS/UMK's NSIG (signals 1-NSIG)
- */
-#ifndef NUMSIGS
-#define NUMSIGS NSIG
-#endif
-
-
-/* defines for unexpected signal setup routine (set_usig.c) */
-#define FORK 1 /* SIGCLD is to be ignored */
-#define NOFORK 0 /* SIGCLD is to be caught */
-#define DEF_HANDLER 0 /* tells set_usig() to use default signal handler */
-
-/*
- * The following defines are used to control tst_res and t_result reporting.
- */
-
-#define TOUTPUT "TOUTPUT" /* The name of the environment variable */
- /* that can be set to one of the following */
- /* strings to control tst_res output */
- /* If not set, TOUT_VERBOSE_S is assumed */
-
-#define TOUT_VERBOSE_S "VERBOSE" /* All test cases reported */
-#define TOUT_CONDENSE_S "CONDENSE" /* ranges are used where identical messages*/
- /* occur for sequential test cases */
-#define TOUT_NOPASS_S "NOPASS" /* No pass test cases are reported */
-#define TOUT_DISCARD_S "DISCARD" /* No output is reported */
-
-#define TST_NOBUF "TST_NOBUF" /* The name of the environment variable */
- /* that can be set to control whether or not */
- /* tst_res will buffer output into 4096 byte */
- /* blocks of output */
- /* If not set, buffer is done. If set, no */
- /* internal buffering will be done in tst_res */
- /* t_result does not have internal buffering */
-
-/*
- * The following defines are used to control tst_tmpdir, tst_wildcard and t_mkchdir
- */
-
-#define TDIRECTORY "TDIRECTORY" /* The name of the environment variable */
- /* that if is set, the value (directory) */
- /* is used by all tests as their working */
- /* directory. tst_rmdir and t_rmdir will */
- /* not attempt to clean up. */
- /* This environment variable should only */
- /* be set when doing system testing since */
- /* tests will collide and break and fail */
- /* because of setting it. */
-
-#define TEMPDIR "/tmp" /* This is the default temporary directory. */
- /* The environment variable TMPDIR is */
- /* used prior to this valid by tempnam(3). */
- /* To control the base location of the */
- /* temporary directory, set the TMPDIR */
- /* environment variable to desired path */
-
-/*
- * The following contains support for error message passing.
- * See test_error.c for details.
- */
-#define TST_ERR_MESG_SIZE 1023 /* max size of error message */
-#define TST_ERR_FILE_SIZE 511 /* max size of module name used by compiler */
-#define TST_ERR_FUNC_SIZE 127 /* max size of func name */
-
-typedef struct {
- int te_line; /* line where last error was reported. Use */
- /* "__LINE__" and let compiler do the rest */
- int te_level; /* If set, will prevent current stored */
- /* error to not be overwritten */
- char te_func[TST_ERR_FUNC_SIZE+1]; /* name of function of last error */
- /* Name of function or NULL */
- char te_file[TST_ERR_FILE_SIZE+1]; /* module of last error. Use */
- /* "__FILE__" and let compiler do the rest */
- char te_mesg[TST_ERR_MESG_SIZE+1]; /* string of last error */
-
-} _TST_ERROR;
-
-extern _TST_ERROR Tst_error; /* defined in test_error.c */
-#if __STDC__
-extern void tst_set_error(char *file, int line, char *func, char *fmt, ...);
-#else
-extern void tst_set_error();
-#endif
-extern void tst_clear_error();
-
-
-/*
- * The following define contains the name of an environmental variable
- * that can be used to specify the number of iterations.
- * It is supported in parse_opts.c and USC_setup.c.
- */
-#define USC_ITERATION_ENV "USC_ITERATIONS"
-
-/*
- * The following define contains the name of an environmental variable
- * that can be used to specify to iteration until desired time
- * in floating point seconds has gone by.
- * Supported in USC_setup.c.
- */
-#define USC_LOOP_WALLTIME "USC_LOOP_WALLTIME"
-
-/*
- * The following define contains the name of an environmental variable
- * that can be used to specify that no functional checks are wanted.
- * It is supported in parse_opts.c and USC_setup.c.
- */
-#define USC_NO_FUNC_CHECK "USC_NO_FUNC_CHECK"
-
-/*
- * The following define contains the name of an environmental variable
- * that can be used to specify the delay between each loop iteration.
- * The value is in seconds (fractional numbers are allowed).
- * It is supported in parse_opts.c.
- */
-#define USC_LOOP_DELAY "USC_LOOP_DELAY"
-
-/*
- * The following prototypes are needed to remove compile errors
- * on IRIX systems when compiled with -n32 and -64.
- */
-extern void tst_res(int ttype, const char *fname, const char *arg_fmt, ...);
-extern void tst_resm(int ttype, const char *arg_fmt, ...);
-extern void tst_brk(int ttype, char *fname, void (*func)(),
- const char *arg_fmt, ...);
-extern void tst_brkloop(int ttype, char *fname, void (*func)(),
- const char *arg_fmt, ...);
-extern void tst_brkm(int ttype, void (*func)(), const char *arg_fmt, ...);
-extern void tst_brkloopm(int ttype, void (*func)(), const char *arg_fmt, ...);
-
-extern int tst_environ();
-extern void tst_exit() __attribute__ ((noreturn));
-extern void tst_flush();
-
-/* prototypes for the t_res.c functions */
-extern void t_result(char *tcid, int tnum, int ttype, char *tmesg);
-extern void tt_exit();
-extern int t_environ();
-extern void t_breakum(char *tcid, int total, int typ, char *msg, void (*fnc)());
-
-extern void tst_sig(int fork_flag, void (*handler)(), void (*cleanup)());
-extern void tst_tmpdir();
-extern void tst_rmdir();
-
-#endif /* end of __TEST_H__ */
diff --git a/winsup/testsuite/libltp/include/tlibio.h b/winsup/testsuite/libltp/include/tlibio.h
deleted file mode 100644
index ac0d5705c..000000000
--- a/winsup/testsuite/libltp/include/tlibio.h
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- */
-
-#define LIO_IO_SYNC 00001 /* read/write */
-#define LIO_IO_ASYNC 00002 /* reada/writea/aio_write/aio_read */
-#define LIO_IO_SLISTIO 00004 /* single stride sync listio */
-#define LIO_IO_ALISTIO 00010 /* single stride async listio */
-#define LIO_IO_SYNCV 00020 /* single-buffer readv/writev */
-#define LIO_IO_SYNCP 00040 /* pread/pwrite */
-
-#ifdef sgi
-#define LIO_IO_ATYPES 00077 /* all io types */
-#define LIO_IO_TYPES 00061 /* all io types, non-async */
-#endif /* sgi */
-#ifdef linux
-#define LIO_IO_TYPES 00021 /* all io types */
-#endif /* linux */
-#ifdef CRAY
-#define LIO_IO_TYPES 00017 /* all io types */
-#endif /* CRAY */
-
-#define LIO_WAIT_NONE 00010000 /* return asap -- use with care */
-#define LIO_WAIT_ACTIVE 00020000 /* spin looking at iosw fields, or EINPROGRESS */
-#define LIO_WAIT_RECALL 00040000 /* call recall(2)/aio_suspend(3) */
-#define LIO_WAIT_SIGPAUSE 00100000 /* call pause */
-#define LIO_WAIT_SIGACTIVE 00200000 /* spin waiting for signal */
-#ifdef sgi
-#define LIO_WAIT_CBSUSPEND 00400000 /* aio_suspend waiting for callback */
-#define LIO_WAIT_SIGSUSPEND 01000000 /* aio_suspend waiting for signal */
-#define LIO_WAIT_ATYPES 01760000 /* all async wait types, except nowait */
-#define LIO_WAIT_TYPES 00020000 /* all sync wait types (sorta) */
-#endif /* sgi */
-#ifdef linux
-#define LIO_WAIT_TYPES 00300000 /* all wait types, except nowait */
-#endif /* linux */
-#ifdef CRAY
-#define LIO_WAIT_TYPES 00360000 /* all wait types, except nowait */
-#endif /* CRAY */
-
-/* meta wait io */
-/* 00 000 0000 */
-
-#ifdef sgi
-/* all callback wait types */
-#define LIO_WAIT_CBTYPES (LIO_WAIT_CBSUSPEND)
-/* all signal wait types */
-#define LIO_WAIT_SIGTYPES (LIO_WAIT_SIGPAUSE|LIO_WAIT_SIGACTIVE|LIO_WAIT_SIGSUSPEND)
-/* all aio_{read,write} or lio_listio */
-#define LIO_IO_ASYNC_TYPES (LIO_IO_ASYNC|LIO_IO_SLISTIO|LIO_IO_ALISTIO)
-#endif /* sgi */
-#ifdef linux
-/* all signal wait types */
-#define LIO_WAIT_SIGTYPES (LIO_WAIT_SIGPAUSE)
-#endif /* linux */
-#ifdef CRAY
-/* all signal wait types */
-#define LIO_WAIT_SIGTYPES (LIO_WAIT_SIGPAUSE|LIO_WAIT_SIGACTIVE)
-#endif /* CRAY */
-
-/*
- * This bit provides a way to randomly pick an io type and wait method.
- * lio_read_buffer() and lio_write_buffer() functions will call
- * lio_random_methods() with the given method.
- */
-#define LIO_RANDOM 010000000
-
-/*
- * This bit provides a way for the programmer to use async i/o with
- * signals and to use their own signal handler. By default,
- * the signal will only be given to the system call if the wait
- * method is LIO_WAIT_SIGPAUSE or LIO_WAIT_SIGACTIVE.
- * Whenever these wait methods are used, libio signal handler
- * will be used.
- */
-#define LIO_USE_SIGNAL 020000000
-
-/*
- * prototypes/structures for functions in the libio.c module. See comments
- * in that module, or man page entries for information on the individual
- * functions.
- */
-
-int stride_bounds(int offset, int stride, int nstrides,
- int bytes_per_stride, int *min_byte, int *max_byte);
-
-int lio_set_debug(int level);
-int lio_parse_io_arg1(char *string);
-void lio_help1(char *prefex);
-int lio_parse_io_arg2(char *string, char **badtoken);
-void lio_help2(char *prefex);
-int lio_write_buffer(int fd, int method, char *buffer, int size,
- int sig, char **errmsg, long wrd);
-
-int lio_read_buffer(int fd, int method, char *buffer, int size,
- int sig, char **errmsg, long wrd);
-int lio_random_methods(long mask);
-
-#if CRAY
-#include <sys/iosw.h>
-int lio_wait4asyncio(int method, int fd, struct iosw **statptr);
-int lio_check_asyncio(char *io_type, int size, struct iosw *status);
-#endif /* CRAY */
-#ifdef sgi
-#include <aio.h>
-int lio_wait4asyncio(int method, int fd, aiocb_t *aiocbp);
-int lio_check_asyncio(char *io_type, int size, aiocb_t *aiocbp, int method);
-#endif /* sgi */
-
-/*
- * Define the structure that contains the infomation that is used
- * by the parsing and help functions.
- */
-struct lio_info_type {
- char *token;
- int bits;
- char *desc;
-};
-
-
diff --git a/winsup/testsuite/libltp/include/usctest.h b/winsup/testsuite/libltp/include/usctest.h
deleted file mode 100644
index 6a095db1c..000000000
--- a/winsup/testsuite/libltp/include/usctest.h
+++ /dev/null
@@ -1,319 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- */
-
-/* $Id$ */
-
-/**********************************************************
- *
- * IRIX/Linux Feature Test and Evaluation - Silicon Graphics, Inc.
- *
- * FUNCTION NAME : usctest.h
- *
- * FUNCTION TITLE : System Call Test Macros
- *
- * SYNOPSIS:
- * See DESCRIPTION below.
- *
- * AUTHOR : William Roske
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * DESCRIPTION
- * TEST(SCALL) - calls a system call
- * TEST_VOID(SCALL) - same as TEST() but for syscalls with no return value.
- * TEST_CLEANUP - print the log of errno return counts if STD_ERRNO_LOG
- * is set.
- * TEST_PAUSEF(HAND) - Pause for SIGUSR1 if the pause flag is set.
- * Use "hand" as the interrupt handling function
- * TEST_PAUSE - Pause for SIGUSR1 if the pause flag is set.
- * Use internal function to do nothing on signal and go on.
- * TEST_LOOPING(COUNTER) - Conditional to check if test should
- * loop. Evaluates to TRUE (1) or FALSE (0).
- * TEST_ERROR_LOG(eno) - log that this errno was received,
- * if STD_ERRNO_LOG is set.
- * TEST_EXP_ENOS(array) - set the bits in TEST_VALID_ENO array at
- * positions specified in integer "array"
- *
- * RETURN VALUE
- * TEST(SCALL) - Global Variables set:
- * int TEST_RETURN=return code from SCALL
- * int TEST_ERRNO=value of errno at return from SCALL
- * TEST_VOID(SCALL) - Global Variables set:
- * int TEST_ERRNO=value of errno at return from SCALL
- * TEST_CLEANUP - None.
- * TEST_PAUSEF(HAND) - None.
- * TEST_PAUSE - None.
- * TEST_LOOPING(COUNTER) - True if COUNTER < STD_LOOP_COUNT or
- * STD_INFINITE is set.
- * TEST_ERROR_LOG(eno) - None
- * TEST_EXP_ENOS(array) - None
- *
- * KNOWN BUGS
- * If you use the TEST_PAUSE or TEST_LOOPING macros, you must
- * link in parse_opts.o, which contains the code for those functions.
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#ifndef __USCTEST_H__
-#define __USCTEST_H__ 1
-
-#ifndef _SC_CLK_TCK
-#include <unistd.h>
-#endif
-
-#include <sys/param.h>
-
-/*
- * Ensure that PATH_MAX is defined
- */
-#ifndef PATH_MAX
-#ifdef MAXPATHLEN
-#define PATH_MAX MAXPATHLEN
-#else
-#define PATH_MAX 1024
-#endif
-#endif
-
-#ifndef CRAY
-#ifndef BSIZE
-#define BSIZE BBSIZE
-#endif
-#endif
-
-/***********************************************************************
- * Define option_t structure type.
- * Entries in this struct are used by the parse_opts routine
- * to indicate valid options and return option arguments
- ***********************************************************************/
-typedef struct {
- const char *option; /* Valid option string (one option only) like "a:" */
- int *flag; /* pointer to location to set true if option given */
- char **arg; /* pointer to location to place argument, if needed */
-} option_t;
-
-/***********************************************************************
- * The following globals are defined in parse_opts.c but must be
- * externed here because they are used in the macros defined below.
- ***********************************************************************/
-extern int STD_FUNCTIONAL_TEST, /* turned off by -f to not do functional test */
- STD_TIMING_ON, /* turned on by -t to print timing stats */
- STD_PAUSE, /* turned on by -p to pause before loop */
- STD_INFINITE, /* turned on by -c0 to loop forever */
- STD_LOOP_COUNT, /* changed by -cn to set loop count to n */
- STD_ERRNO_LOG, /* turned on by -e to log errnos returned */
- STD_ERRNO_LIST[], /* counts of errnos returned. indexed by errno */
- STD_COPIES,
- STD_argind;
-
-extern float STD_LOOP_DURATION, /* wall clock time to iterate */
- STD_LOOP_DELAY; /* delay time after each iteration */
-
-#define USC_MAX_ERRNO 2000
-
-/**********************************************************************
- * Prototype for parse_opts routine
- **********************************************************************/
-extern const char *parse_opts(int ac, char **av, option_t *user_optarr, void (*uhf)());
-
-
-/*
- * define a structure
- */
-struct usc_errno_t {
- int flag;
-};
-
-/***********************************************************************
- ****
- ****
- ****
- **********************************************************************/
-#ifdef _USC_LIB_
-
-extern int TEST_RETURN;
-extern int TEST_ERRNO;
-
-#else
-/***********************************************************************
- * Global array of bit masks to indicate errnos that are expected.
- * Bits set by TEST_EXP_ENOS() macro and used by TEST_CLEANUP() macro.
- ***********************************************************************/
-extern struct usc_errno_t TEST_VALID_ENO[USC_MAX_ERRNO];
-
-/***********************************************************************
- * Globals for returning the return code and errno from the system call
- * test macros.
- ***********************************************************************/
-extern int TEST_RETURN;
-extern int TEST_ERRNO;
-
-/***********************************************************************
- * temporary variables for determining max and min times in TEST macro
- ***********************************************************************/
-extern long btime, etime, tmptime;
-
-#endif /* _USC_LIB_ */
-
-/***********************************************************************
- * structure for timing accumulator and counters
- ***********************************************************************/
-struct tblock {
- long tb_max;
- long tb_min;
- long tb_total;
- long tb_count;
-};
-
-/***********************************************************************
- * The following globals are externed here so that they are accessable
- * in the macros that follow.
- ***********************************************************************/
-extern struct tblock tblock;
-extern void STD_go();
-extern int (*_TMP_FUNC)(void);
-extern void STD_opts_help();
-
-
-/***********************************************************************
- * TEST: calls a system call
- *
- * parameters:
- * SCALL = system call and parameters to execute
- *
- ***********************************************************************/
-#define TEST(SCALL) TEST_RETURN = (unsigned) SCALL; TEST_ERRNO=errno;
-
-/***********************************************************************
- * TEST_VOID: calls a system call
- *
- * parameters:
- * SCALL = system call and parameters to execute
- *
- * Note: This is IDENTICAL to the TEST() macro except that it is intended
- * for use with syscalls returning no values (void syscall()). The
- * Typecasting nothing (void) into an unsigned integer causes compilation
- * errors.
- *
- ***********************************************************************/
-#define TEST_VOID(SCALL) SCALL; TEST_ERRNO=errno;
-
-/***********************************************************************
- * TEST_CLEANUP: print system call timing stats and errno log entries
- * to stdout if STD_TIMING_ON and STD_ERRNO_LOG are set, respectively.
- * Do NOT print ANY information if no system calls logged.
- *
- * parameters:
- * none
- *
- ***********************************************************************/
-#define TEST_CLEANUP \
-if ( STD_ERRNO_LOG ) { \
- for (tmptime=0; tmptime<USC_MAX_ERRNO; tmptime++) { \
- if ( STD_ERRNO_LIST[tmptime] ) { \
- if ( TEST_VALID_ENO[tmptime].flag ) \
- tst_resm(TINFO, "ERRNO %d:\tReceived %d Times", \
- tmptime, STD_ERRNO_LIST[tmptime]); \
- else \
- tst_resm(TINFO, \
- "ERRNO %d:\tReceived %d Times ** UNEXPECTED **", \
- tmptime, STD_ERRNO_LIST[tmptime]); \
- } \
- } \
-}
-
-/***********************************************************************
- * TEST_PAUSEF: Pause for SIGUSR1 if the pause flag is set.
- * Set the user specified function as the interrupt
- * handler instead of "STD_go"
- *
- * parameters:
- * none
- *
- ***********************************************************************/
-#define TEST_PAUSEF(HANDLER) \
-if ( STD_PAUSE ) { \
- _TMP_FUNC = (int (*)())signal(SIGUSR1, HANDLER); \
- pause(); \
- signal(SIGUSR1, (void (*)())_TMP_FUNC); \
-}
-
-/***********************************************************************
- * TEST_PAUSE: Pause for SIGUSR1 if the pause flag is set.
- * Just continue when signal comes in.
- *
- * parameters:
- * none
- *
- ***********************************************************************/
-#define TEST_PAUSE usc_global_setup_hook();
-int usc_global_setup_hook();
-
-/***********************************************************************
- * TEST_LOOPING now call the usc_test_looping function.
- * The function will return 1 if the test should continue
- * iterating.
- *
- ***********************************************************************/
-#define TEST_LOOPING usc_test_looping
-int usc_test_looping(int counter);
-
-/***********************************************************************
- * TEST_ERROR_LOG(eno): log this errno if STD_ERRNO_LOG flag set
- *
- * parameters:
- * int eno: the errno location in STD_ERRNO_LIST to log.
- *
- ***********************************************************************/
-#define TEST_ERROR_LOG(eno) \
- if ( STD_ERRNO_LOG ) \
- if ( eno < USC_MAX_ERRNO ) \
- STD_ERRNO_LIST[eno]++; \
-
-
-/***********************************************************************
- * TEST_EXP_ENOS(array): set the bits associated with the nput errnos
- * in the TEST_VALID_ENO array.
- *
- * parameters:
- * int array[]: a zero terminated array of errnos expected.
- *
- ***********************************************************************/
-#define TEST_EXP_ENOS(array) \
- tmptime=0; \
- while (array[tmptime] != 0) { \
- if (array[tmptime] < USC_MAX_ERRNO) \
- TEST_VALID_ENO[array[tmptime]].flag=1; \
- tmptime++; \
- }
-
-
-#endif /* end of __USCTEST_H__ */
diff --git a/winsup/testsuite/libltp/include/write_log.h b/winsup/testsuite/libltp/include/write_log.h
deleted file mode 100644
index 784d5b3eb..000000000
--- a/winsup/testsuite/libltp/include/write_log.h
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- */
-#ifndef _WRITE_LOG_H_
-#define _WRITE_LOG_H_
-
-/*
- * Constants defining the max size of various wlog_rec fields. ANY SIZE
- * CHANGES HERE MUST BE REFLECTED IN THE WLOG_REC_DISK STRUCTURE DEFINED
- * BELOW.
- */
-
-#define WLOG_MAX_PATH 128
-#define WLOG_MAX_PATTERN 64
-#define WLOG_MAX_HOST 8
-#define WLOG_REC_MAX_SIZE (sizeof(struct wlog_rec)+WLOG_MAX_PATH+WLOG_MAX_PATTERN+WLOG_MAX_HOST+2)
-
-/*
- * User view of a write log record. Note that this is not necessiliary
- * how the data is formatted on disk (signifigant compression occurrs), so
- * don't expect to od the write log file and see things formatted this way.
- */
-
-struct wlog_rec {
- int w_pid; /* pid doing the write */
- int w_offset; /* file offset */
- int w_nbytes; /* # bytes written */
- int w_oflags; /* low-order open() flags */
- int w_done; /* 1 if io confirmed done */
- int w_async; /* 1 if async write (writea) */
-
- char w_host[WLOG_MAX_HOST+1]; /* host doing write - */
- /* null terminated */
- int w_hostlen; /* host name length */
- char w_path[WLOG_MAX_PATH+1]; /* file written to - */
- /* null terminated */
- int w_pathlen; /* file name length */
- char w_pattern[WLOG_MAX_PATTERN+1]; /* pattern written - */
- /* null terminated */
- int w_patternlen; /* pattern length */
-};
-
-#ifndef uint
-#define uint unsigned int
-#endif
-
-/*
- * On-disk structure of a wlog_rec. Actually, the record consists of
- * 3 parts: [wlog_rec_disk structure][variable length data][length]
- * where length is a 2 byte field containing the total record length
- * (including the 2 bytes). It is used for scanning the logfile in reverse
- * order.
- *
- * The variable length data includes the path, host, and pattern (in that
- * order). The lengths of these pieces of data are held in the
- * wlog_rec_disk structure. Thus, the actual on-disk record looks like
- * this (top is lower byte offset):
- *
- * struct wlog_rec_disk
- * path (w_pathlen bytes - not null terminated)
- * host (w_hostlen bytes - not null terminated)
- * pattern (w_patternlen bytes - not null terminated)
- * 2-byte record length
- *
- * Another way of looking at it is:
- *
- * <struct wlog_rec_disk><path (wpathlen bytes)>-->
- * --><host (w_hostlen bytes)><pattern (w_patternlen bytes)><length (2 bytes)>
- *
- * The maximum length of this record is defined by the WLOG_REC_MAX_SIZE
- * record. Note that the 2-byte record length forces this to be
- * <= 64k bytes.
- *
- * Note that there is lots of bit-masking done here. The w_pathlen,
- * w_hostlen, and w_patternlen fields MUST have enough bits to hold
- * WLOG_MAX_PATH, WLOG_MAX_HOST, and WLOG_MAX_PATTERN bytes respectivly.
- */
-
-struct wlog_rec_disk {
-#ifdef CRAY
- uint w_offset : 44; /* file offset */
- uint w_extra0 : 20; /* EXTRA BITS IN WORD 0 */
-#else
- uint w_offset : 32; /* file offset */
- uint w_extra0 : 32; /* EXTRA BITS IN WORD 0 */
-#endif
-
- uint w_nbytes : 32; /* # bytes written */
- uint w_oflags : 32; /* low-order open() flags */
-
- uint w_pid : 17; /* pid doing the write */
- uint w_pathlen : 7; /* length of file path */
- uint w_patternlen: 6; /* length of pattern */
- uint w_hostlen : 4; /* length of host */
- uint w_done : 1; /* 1 if io confirmed done */
- uint w_async : 1; /* 1 if async write (writea) */
- uint w_extra2 : 28; /* EXTRA BITS IN WORD 2 */
-};
-
-/*
- * write log file datatype. wlog_open() initializes this structure
- * which is then passed around to the various wlog_xxx routines.
- */
-
-struct wlog_file {
- int w_afd; /* append fd */
- int w_rfd; /* random-access fd */
- char w_file[1024]; /* name of the write_log */
-};
-
-/*
- * return value defines for the user-supplied function to
- * wlog_scan_backward().
- */
-
-#define WLOG_STOP_SCAN 0
-#define WLOG_CONTINUE_SCAN 1
-
-/*
- * wlog prototypes
- */
-
-#if __STDC__
-extern int wlog_open(struct wlog_file *wfile, int trunc, int mode);
-extern int wlog_close(struct wlog_file *wfile);
-extern int wlog_record_write(struct wlog_file *wfile,
- struct wlog_rec *wrec, long offset);
-extern int wlog_scan_backward(struct wlog_file *wfile, int nrecs,
- int (*func)(struct wlog_rec *rec),
- long data);
-#else
-int wlog_open();
-int wlog_close();
-int wlog_record_write();
-int wlog_scan_backward();
-#endif
-
-extern char Wlog_Error_String[];
-
-#endif /* _WRITE_LOG_H_ */
-
diff --git a/winsup/testsuite/libltp/lib/dataascii.c b/winsup/testsuite/libltp/lib/dataascii.c
deleted file mode 100644
index 5bc201852..000000000
--- a/winsup/testsuite/libltp/lib/dataascii.c
+++ /dev/null
@@ -1,218 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- */
-#include <stdio.h>
-#include <string.h>
-#include "dataascii.h"
-
-#define CHARS "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghjiklmnopqrstuvwxyz\n"
-#define CHARS_SIZE sizeof(CHARS)
-
-#ifdef UNIT_TEST
-#include <stdlib.h> /* malloc */
-#endif
-
-static char Errmsg[80];
-
-int
-dataasciigen(listofchars, buffer, bsize, offset)
-char *listofchars; /* a null terminated list of characters */
-char *buffer;
-int bsize;
-int offset;
-{
- int cnt;
- int total;
- int ind; /* index into CHARS array */
- char *chr;
- int chars_size;
- const char *charlist;
-
- chr=buffer;
- total=offset+bsize;
-
- if ( listofchars == NULL ) {
- charlist=CHARS;
- chars_size=CHARS_SIZE;
- }
- else {
- charlist=listofchars;
- chars_size=strlen(listofchars);
- }
-
- for(cnt=offset; cnt<total; cnt++) {
- ind=cnt%chars_size;
- *chr++=charlist[ind];
- }
-
- return bsize;
-
-} /* end of dataasciigen */
-
-int
-dataasciichk(listofchars, buffer, bsize, offset, errmsg)
-char *listofchars; /* a null terminated list of characters */
-char *buffer;
-int bsize;
-int offset;
-char **errmsg;
-{
- int cnt;
- int total;
- int ind; /* index into CHARS array */
- char *chr;
- int chars_size;
- const char *charlist;
-
- chr=buffer;
- total=offset+bsize;
-
- if ( listofchars == NULL ) {
- charlist=CHARS;
- chars_size=CHARS_SIZE;
- }
- else {
- charlist=listofchars;
- chars_size=strlen(listofchars);
- }
-
- if ( errmsg != NULL ) {
- *errmsg = Errmsg;
- }
-
- for(cnt=offset; cnt<total; chr++, cnt++) {
- ind=cnt%chars_size;
- if ( *chr != charlist[ind] ) {
- sprintf(Errmsg,
- "data mismatch at offset %d, exp:%#o, act:%#o", cnt,
- charlist[ind], *chr);
- return cnt;
- }
- }
-
- sprintf(Errmsg, "all %d bytes match desired pattern", bsize);
- return -1; /* buffer is ok */
-
-} /* end of dataasciichk */
-
-
-#if UNIT_TEST
-
-/***********************************************************************
- * main for doing unit testing
- ***********************************************************************/
-int
-main(ac, ag)
-int ac;
-char **ag;
-{
-
-int size=1023;
-char *buffer;
-int ret;
-char *errmsg;
-
- if ((buffer=(char *)malloc(size)) == NULL ) {
- perror("malloc");
- exit(2);
- }
-
- dataasciigen(NULL, buffer, size, 0);
- printf("dataasciigen(NULL, buffer, %d, 0)\n", size);
-
- ret=dataasciichk(NULL, buffer, size, 0, &errmsg);
- printf("dataasciichk(NULL, buffer, %d, 0, &errmsg) returned %d %s\n",
- size, ret, errmsg);
-
- if ( ret == -1 )
- printf("\tPASS return value is -1 as expected\n");
- else
- printf("\tFAIL return value is %d, expected -1\n", ret);
-
- ret=dataasciichk(NULL, &buffer[1], size-1, 1, &errmsg);
- printf("dataasciichk(NULL, &buffer[1], %d, 1, &errmsg) returned %d %s\n",
- size-1, ret, errmsg);
-
- if ( ret == -1 )
- printf("\tPASS return value is -1 as expected\n");
- else
- printf("\tFAIL return value is %d, expected -1\n", ret);
-
- buffer[25]= 0x0;
- printf("changing char 25\n");
-
- ret=dataasciichk(NULL, &buffer[1], size-1, 1, &errmsg);
- printf("dataasciichk(NULL, &buffer[1], %d, 1, &errmsg) returned %d %s\n",
- size-1, ret, errmsg);
-
- if ( ret == 25 )
- printf("\tPASS return value is 25 as expected\n");
- else
- printf("\tFAIL return value is %d, expected 25\n", ret);
-
- dataasciigen("this is a test of the my string" , buffer, size, 0);
- printf("dataasciigen(\"this is a test of the my string\", buffer, %d, 0)\n", size);
-
- ret=dataasciichk("this is a test of the my string", buffer, size, 0, &errmsg);
- printf("dataasciichk(\"this is a test of the my string\", buffer, %d, 0, &errmsg) returned %d %s\n",
- size, ret, errmsg);
-
- if ( ret == -1 )
- printf("\tPASS return value is -1 as expected\n");
- else
- printf("\tFAIL return value is %d, expected -1\n", ret);
-
- ret=dataasciichk("this is a test of the my string", &buffer[1], size-1, 1, &errmsg);
- printf("dataasciichk(\"this is a test of the my string\", &buffer[1], %d, 1, &errmsg) returned %d %s\n",
- size-1, ret, errmsg);
-
- if ( ret == -1 )
- printf("\tPASS return value is -1 as expected\n");
- else
- printf("\tFAIL return value is %d, expected -1\n", ret);
-
- buffer[25]= 0x0;
- printf("changing char 25\n");
-
- ret=dataasciichk("this is a test of the my string", &buffer[1], size-1, 1, &errmsg);
- printf("dataasciichk(\"this is a test of the my string\", &buffer[1], %d, 1, &errmsg) returned %d %s\n",
- size-1, ret, errmsg);
-
- if ( ret == 25 )
- printf("\tPASS return value is 25 as expected\n");
- else
- printf("\tFAIL return value is %d, expected 25\n", ret);
-
- exit(0);
-}
-
-#endif
-
diff --git a/winsup/testsuite/libltp/lib/databin.c b/winsup/testsuite/libltp/lib/databin.c
deleted file mode 100644
index f09c2c86c..000000000
--- a/winsup/testsuite/libltp/lib/databin.c
+++ /dev/null
@@ -1,298 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- */
-#include <stdio.h>
-#include <sys/param.h>
-#include <string.h> /* memset */
-#include <stdlib.h> /* rand */
-#include "databin.h"
-
-#if UNIT_TEST
-#include <malloc.h>
-#endif
-
-static char Errmsg[80];
-
-void
-databingen (mode, buffer, bsize, offset)
-int mode; /* either a, c, r, o, z or C */
-unsigned char *buffer; /* buffer pointer */
-int bsize; /* size of buffer */
-int offset; /* offset into the file where buffer starts */
-{
-int ind;
-
- switch (mode)
- {
- default:
- case 'a': /* alternating bit pattern */
- memset(buffer,0x55,bsize);
- break;
-
- case 'c': /* checkerboard pattern */
- memset(buffer,0xf0,bsize);
- break;
-
- case 'C': /* */
- for (ind=0;ind< bsize;ind++) {
- buffer[ind] = ((offset+ind)%8 & 0177);
- }
- break;
-
- case 'o':
- memset(buffer,0xff,bsize);
- break;
-
- case 'z':
- memset(buffer,0x0,bsize);
- break;
-
- case 'r': /* random */
- for (ind=0;ind< bsize;ind++) {
- buffer[ind] = (rand () & 0177) | 0100;
- }
- }
-}
-
-/***********************************************************************
- *
- * return values:
- * >= 0 : error at byte offset into the file, offset+buffer[0-(bsize-1)]
- * < 0 : no error
- ***********************************************************************/
-int
-databinchk(mode, buffer, bsize, offset, errmsg)
-int mode; /* either a, c, r, z, o, or C */
-unsigned char *buffer; /* buffer pointer */
-int bsize; /* size of buffer */
-int offset; /* offset into the file where buffer starts */
-char **errmsg;
-{
- int cnt;
- unsigned char *chr;
- int total;
- long expbits;
- long actbits;
-
- chr=buffer;
- total=bsize;
-
- if ( errmsg != NULL ) {
- *errmsg = Errmsg;
- }
-
- switch (mode)
- {
- default:
- case 'a': /* alternating bit pattern */
- expbits=0x55;
- break;
-
- case 'c': /* checkerboard pattern */
- expbits=0xf0;
- break;
-
- case 'C': /* counting pattern */
- for (cnt=0;cnt< bsize;cnt++) {
- expbits = ((offset+cnt)%8 & 0177);
-
- if ( buffer[cnt] != expbits ) {
- sprintf(Errmsg,
- "data mismatch at offset %d, exp:%#lo, act:%#o",
- offset+cnt, expbits, buffer[cnt]);
- return offset+cnt;
- }
- }
- sprintf(Errmsg, "all %d bytes match desired pattern", bsize);
- return -1;
-
- case 'o':
- expbits=0xff;
- break;
-
- case 'z':
- expbits=0;
- break;
-
- case 'r':
- return -1; /* no check can be done for random */
- }
-
- for (cnt=0; cnt<bsize; chr++, cnt++) {
- actbits = (long)*chr;
-
- if ( actbits != expbits ) {
- sprintf(Errmsg, "data mismatch at offset %d, exp:%#lo, act:%#lo",
- offset+cnt, expbits, actbits);
- return offset+cnt;
- }
- }
-
- sprintf(Errmsg, "all %d bytes match desired pattern", bsize);
- return -1; /* all ok */
-}
-
-#if UNIT_TEST
-
-/***********************************************************************
- * main for doing unit testing
- ***********************************************************************/
-int
-main(ac, ag)
-int ac;
-char **ag;
-{
-
- int size=1023;
- int offset;
- int number;
- unsigned char *buffer;
- int ret;
- char *errmsg;
-
- if ((buffer=(unsigned char *)malloc(size)) == NULL ) {
- perror("malloc");
- exit(2);
- }
-
-
-printf("***** for a ****************************\n");
- databingen('a', buffer, size, 0);
- printf("databingen('a', buffer, %d, 0)\n", size);
-
- ret=databinchk('a', buffer, size, 0, &errmsg);
- printf("databinchk('a', buffer, %d, 0, &errmsg) returned %d: %s\n",
- size, ret, errmsg);
- if ( ret == -1 )
- printf("\tPASS return value of -1 as expected\n");
- else
- printf("\tFAIL return value %d, expected -1\n", ret);
-
- offset=232400;
- ret=databinchk('a', &buffer[1], size-1, offset, &errmsg);
- printf("databinchk('a', &buffer[1], %d, %d, &errmsg) returned %d: %s\n",
- size, offset, ret, errmsg);
- if ( ret == -1 )
- printf("\tPASS return value of -1 as expected\n");
- else
- printf("\tFAIL return value %d, expected -1\n", ret);
-
- buffer[15]= 0x0;
- printf("changing char 15 (offset (%d+15) = %d) to 0x0\n", offset, offset+15);
- number=offset+15;
-
- ret=databinchk('a', &buffer[1], size-1, offset+1, &errmsg);
- printf("databinchk('a', &buffer[1], %d, %d, &errmsg) returned %d: %s\n",
- size-1, offset+1, ret, errmsg);
- if ( ret == number )
- printf("\tPASS return value of %d as expected\n", number);
- else
- printf("\tFAIL return value %d, expected %d\n", ret, number);
-
-
-
-printf("***** for c ****************************\n");
- databingen('c', buffer, size, 0);
- printf("databingen('c', buffer, %d, 0)\n", size);
-
- ret=databinchk('c', buffer, size, 0, &errmsg);
- printf("databinchk('c', buffer, %d, 0, &errmsg) returned %d: %s\n",
- size, ret, errmsg);
- if ( ret == -1 )
- printf("\tPASS return value of -1 as expected\n");
- else
- printf("\tFAIL return value %d, expected -1\n", ret);
-
- offset=232400;
- ret=databinchk('c', &buffer[1], size-1, offset, &errmsg);
- printf("databinchk('c', &buffer[1], %d, %d, &errmsg) returned %d: %s\n",
- size, offset, ret, errmsg);
- if ( ret == -1 )
- printf("\tPASS return value of -1 as expected\n");
- else
- printf("\tFAIL return value %d, expected -1\n", ret);
-
- buffer[15]= 0x0;
- printf("changing char 15 (offset (%d+15) = %d) to 0x0\n", offset, offset+15);
- number=offset+15;
-
- ret=databinchk('c', &buffer[1], size-1, offset+1, &errmsg);
- printf("databinchk('c', &buffer[1], %d, %d, &errmsg) returned %d: %s\n",
- size-1, offset+1, ret, errmsg);
- if ( ret == number )
- printf("\tPASS return value of %d as expected\n", number);
- else
- printf("\tFAIL return value %d, expected %d\n", ret, number);
-
-printf("***** for C ****************************\n");
-
- databingen('C', buffer, size, 0);
- printf("databingen('C', buffer, %d, 0)\n", size);
-
- ret=databinchk('C', buffer, size, 0, &errmsg);
- printf("databinchk('C', buffer, %d, 0, &errmsg) returned %d: %s\n",
- size, ret, errmsg);
- if ( ret == -1 )
- printf("\tPASS return value of -1 as expected\n");
- else
- printf("\tFAIL return value %d, expected -1\n", ret);
-
- offset=18;
- ret=databinchk('C', &buffer[18], size-18, 18, &errmsg);
- printf("databinchk('C', &buffer[18], %d, 18, &errmsg) returned %d: %s\n",
- size-18, ret, errmsg);
- if ( ret == -1 )
- printf("\tPASS return value of -1 as expected\n");
- else
- printf("\tFAIL return value %d, expected -1\n", ret);
-
- buffer[20]= 0x0;
- buffer[21]= 0x0;
- printf("changing char 20 and 21 to 0x0 (offset %d and %d)\n", 20,
- 21);
-
- ret=databinchk('C', &buffer[18], size-18, 18, &errmsg);
- printf("databinchk('C', &buffer[18], %d, 18, &errmsg) returned %d: %s\n",
- size-18, ret, errmsg);
-
- if ( ret == 20 || ret == 21 )
- printf("\tPASS return value of %d or %d as expected\n",
- 20, 21);
- else
- printf("\tFAIL return value %d, expected %d or %d\n", ret,
- 20, 21 );
-
- exit(0);
-
-}
-
-#endif
-
diff --git a/winsup/testsuite/libltp/lib/datapid.c b/winsup/testsuite/libltp/lib/datapid.c
deleted file mode 100644
index 9414eae90..000000000
--- a/winsup/testsuite/libltp/lib/datapid.c
+++ /dev/null
@@ -1,374 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- */
-/************
-
-64 bits in a Cray word
-
- 12345678901234567890123456789012
-1234567890123456789012345678901234567890123456789012345678901234
-________________________________________________________________
-< pid >< word-offset in file (same #) >< pid >
-
-1234567890123456789012345678901234567890123456789012345678901234
-________________________________________________________________
-< pid >< offset in file of this word >< pid >
-
-
-8 bits to a bytes == character
- NBPW 8
-************/
-
-#include <stdio.h>
-#include <sys/param.h>
-#ifdef UNIT_TEST
-#include <unistd.h>
-#include <stdlib.h>
-#endif
-
-static char Errmsg[80];
-
-#define LOWER16BITS(X) (X & 0177777)
-#define LOWER32BITS(X) (X & 0xffffffff)
-
-/***
-#define HIGHBITS(WRD, bits) ( (-1 << (64-bits)) & WRD)
-#define LOWBITS(WRD, bits) ( (-1 >> (64-bits)) & WRD)
-****/
-
-#define NBPBYTE 8 /* number bits per byte */
-
-#ifndef DEBUG
-#define DEBUG 0
-#endif
-
-/***********************************************************************
- *
- *
- * 1 2 3 4 5 6 7 8 9 10 11 12 13 14 14 15 bytes
- * 1234567890123456789012345678901234567890123456789012345678901234 bits
- * ________________________________________________________________ 1 word
- * < pid >< offset in file of this word >< pid >
- *
- * the words are put together where offset zero is the start.
- * thus, offset 16 is the start of the second full word
- * Thus, offset 8 is in middle of word 1
- ***********************************************************************/
-int
-datapidgen(pid, buffer, bsize, offset)
-int pid;
-char *buffer;
-int bsize;
-int offset;
-{
-#if CRAY
-
- int cnt;
- int tmp;
- char *chr;
- long *wptr;
- long word;
- int woff; /* file offset for the word */
- int boff; /* buffer offset or index */
- int num_full_words;
-
- num_full_words = bsize/NBPW;
- boff = 0;
-
- if ( cnt=(offset % NBPW) ) { /* partial word */
-
- woff = offset - cnt;
-#if DEBUG
-printf("partial at beginning, cnt = %d, woff = %d\n", cnt, woff);
-#endif
-
- word = ((LOWER16BITS(pid) << 48) | (LOWER32BITS(woff) << 16) | LOWER16BITS(pid));
-
- chr = (char *)&word;
-
- for (tmp=0; tmp<cnt; tmp++) { /* skip unused bytes */
- chr++;
- }
-
- for (; boff<(NBPW-cnt) && boff<bsize; boff++, chr++) {
- buffer[boff] = *chr;
- }
- }
-
- /*
- * full words
- */
-
- num_full_words = (bsize-boff)/NBPW;
-
- woff = offset+boff;
-
- for (cnt=0; cnt<num_full_words; woff += NBPW, cnt++ ) {
-
- word = ((LOWER16BITS(pid) << 48) | (LOWER32BITS(woff) << 16) | LOWER16BITS(pid));
-
- chr = (char *)&word;
- for(tmp=0; tmp<NBPW; tmp++, chr++) {
- buffer[boff++] = *chr;
- }
-/****** Only if wptr is a word ellined
- wptr = (long *)&buffer[boff];
- *wptr = word;
- boff += NBPW;
-*****/
-
- }
-
- /*
- * partial word at end of buffer
- */
-
- if ( cnt=((bsize-boff) % NBPW) ) {
-#if DEBUG
-printf("partial at end\n");
-#endif
- word = ((LOWER16BITS(pid) << 48) | (LOWER32BITS(woff) << 16) | LOWER16BITS(pid));
-
- chr = (char *)&word;
-
- for (tmp=0; tmp<cnt && boff<bsize; tmp++, chr++) {
- buffer[boff++] = *chr;
- }
- }
-
- return bsize;
-
-#else
- return -1; /* not support on non-64 bits word machines */
-
-#endif
-
-}
-
-/***********************************************************************
- *
- *
- ***********************************************************************/
-int
-datapidchk(pid, buffer, bsize, offset, errmsg)
-int pid;
-char *buffer;
-int bsize;
-int offset;
-char **errmsg;
-{
-#if CRAY
-
- int cnt;
- int tmp;
- char *chr;
- long *wptr;
- long word;
- int woff; /* file offset for the word */
- int boff; /* buffer offset or index */
- int num_full_words;
-
-
- if ( errmsg != NULL ) {
- *errmsg = Errmsg;
- }
-
-
- num_full_words = bsize/NBPW;
- boff = 0;
-
- if ( cnt=(offset % NBPW) ) { /* partial word */
- woff = offset - cnt;
- word = ((LOWER16BITS(pid) << 48) | (LOWER32BITS(woff) << 16) | LOWER16BITS(pid));
-
- chr = (char *)&word;
-
- for (tmp=0; tmp<cnt; tmp++) { /* skip unused bytes */
- chr++;
- }
-
- for (; boff<(NBPW-cnt) && boff<bsize; boff++, chr++) {
- if (buffer[boff] != *chr) {
- sprintf(Errmsg, "Data mismatch at offset %d, exp:%#o, act:%#o",
- offset+boff, *chr, buffer[boff]);
- return offset+boff;
- }
- }
- }
-
- /*
- * full words
- */
-
- num_full_words = (bsize-boff)/NBPW;
-
- woff = offset+boff;
-
- for (cnt=0; cnt<num_full_words; woff += NBPW, cnt++ ) {
- word = ((LOWER16BITS(pid) << 48) | (LOWER32BITS(woff) << 16) | LOWER16BITS(pid));
-
- chr = (char *)&word;
- for(tmp=0; tmp<NBPW; tmp++, boff++, chr++) {
- if ( buffer[boff] != *chr ) {
- sprintf(Errmsg, "Data mismatch at offset %d, exp:%#o, act:%#o",
- woff, *chr, buffer[boff]);
- return woff;
- }
- }
-
-/****** only if a word elined
- wptr = (long *)&buffer[boff];
- if ( *wptr != word ) {
- sprintf(Errmsg, "Data mismatch at offset %d, exp:%#o, act:%#o",
- woff, word, *wptr);
- return woff;
- }
- boff += NBPW;
-******/
- }
-
- /*
- * partial word at end of buffer
- */
-
- if ( cnt=((bsize-boff) % NBPW) ) {
-#if DEBUG
-printf("partial at end\n");
-#endif
- word = ((LOWER16BITS(pid) << 48) | (LOWER32BITS(woff) << 16) | LOWER16BITS(pid));
-
- chr = (char *)&word;
-
-
- for (tmp=0; tmp<cnt && boff<bsize; boff++, tmp++, chr++) {
- if ( buffer[boff] != *chr ) {
- sprintf(Errmsg, "Data mismatch at offset %d, exp:%#o, act:%#o",
- offset+boff, *chr, buffer[boff]);
- return offset+boff;
- }
- }
- }
-
- sprintf(Errmsg, "all %d bytes match desired pattern", bsize);
- return -1; /* buffer is ok */
-
-#else
-
- if ( errmsg != NULL ) {
- *errmsg = Errmsg;
- }
- sprintf(Errmsg, "Not supported on this OS.");
- return 0;
-
-#endif
-
-
-} /* end of datapidchk */
-
-#if UNIT_TEST
-
-/***********************************************************************
- * main for doing unit testing
- ***********************************************************************/
-int
-main(ac, ag)
-int ac;
-char **ag;
-{
-
-int size=1234;
-char *buffer;
-int ret;
-char *errmsg;
-
- if ((buffer=(char *)malloc(size)) == NULL ) {
- perror("malloc");
- exit(2);
- }
-
-
- datapidgen(-1, buffer, size, 3);
-
-/***
-fwrite(buffer, size, 1, stdout);
-fwrite("\n", 1, 1, stdout);
-****/
-
- printf("datapidgen(-1, buffer, size, 3)\n");
-
- ret=datapidchk(-1, buffer, size, 3, &errmsg);
- printf("datapidchk(-1, buffer, %d, 3, &errmsg) returned %d %s\n",
- size, ret, errmsg);
- ret=datapidchk(-1, &buffer[1], size-1, 4, &errmsg);
- printf("datapidchk(-1, &buffer[1], %d, 4, &errmsg) returned %d %s\n",
- size-1, ret, errmsg);
-
- buffer[25]= 0x0;
- buffer[26]= 0x0;
- buffer[27]= 0x0;
- buffer[28]= 0x0;
- printf("changing char 25-28\n");
-
- ret=datapidchk(-1, &buffer[1], size-1, 4, &errmsg);
- printf("datapidchk(-1, &buffer[1], %d, 4, &errmsg) returned %d %s\n",
- size-1, ret, errmsg);
-
-printf("------------------------------------------\n");
-
- datapidgen(getpid(), buffer, size, 5);
-
-/*******
-fwrite(buffer, size, 1, stdout);
-fwrite("\n", 1, 1, stdout);
-******/
-
- printf("\ndatapidgen(getpid(), buffer, size, 5)\n");
-
- ret=datapidchk(getpid(), buffer, size, 5, &errmsg);
- printf("datapidchk(getpid(), buffer, %d, 5, &errmsg) returned %d %s\n",
- size, ret, errmsg);
-
- ret=datapidchk(getpid(), &buffer[1], size-1, 6, &errmsg);
- printf("datapidchk(getpid(), &buffer[1], %d, 6, &errmsg) returned %d %s\n",
- size-1, ret, errmsg);
-
- buffer[25]= 0x0;
- printf("changing char 25\n");
-
- ret=datapidchk(getpid(), &buffer[1], size-1, 6, &errmsg);
- printf("datapidchk(getpid(), &buffer[1], %d, 6, &errmsg) returned %d %s\n",
- size-1, ret, errmsg);
-
- exit(0);
-}
-
-#endif
-
diff --git a/winsup/testsuite/libltp/lib/forker.c b/winsup/testsuite/libltp/lib/forker.c
deleted file mode 100644
index 99bc58550..000000000
--- a/winsup/testsuite/libltp/lib/forker.c
+++ /dev/null
@@ -1,286 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- */
-/**************************************************************
- *
- * OS Testing - Silicon Graphics, Inc.
- *
- * FUNCTION NAME : forker
- * background
- *
- * FUNCTION TITLE : fork desired number of copies of the current process
- * fork a process and return control to caller
- *
- * SYNOPSIS:
- * int forker(ncopies, mode, prefix)
- * int ncopies;
- * int mode;
- * char *prefix;
- *
- * int background(prefix);
- * char *prefix;
- *
- * extern int Forker_pids[];
- * extern int Forker_npids;
- *
- * AUTHOR : Richard Logan
- *
- * CO-PILOT(s) : Dean Roehrich
- *
- * INITIAL RELEASE : UNICOS 8.0
- *
- * DESIGN DESCRIPTION
- * The background function will do a fork of the current process.
- * The parent process will then exit, thus orphaning the
- * child process. Doing this will not nice the child process
- * like executing a cmd in the background using "&" from the shell.
- * If the fork fails and prefix is not NULL, a error message is printed
- * to stderr and the process will exit with a value of errno.
- *
- * The forker function will fork <ncopies> minus one copies
- * of the current process. There are two modes in how the forks
- * will be done. Mode 0 (default) will have all new processes
- * be childern of the parent process. Using Mode 1,
- * the parent process will have one child and that child will
- * fork the next process, if necessary, and on and on.
- * The forker function will return the number of successful
- * forks. This value will be different for the parent and each child.
- * Using mode 0, the parent will get the total number of successful
- * forks. Using mode 1, the newest child will get the total number
- * of forks. The parent will get a return value of 1.
- *
- * The forker function also updates the global variables
- * Forker_pids[] and Forker_npids. The Forker_pids array will
- * be updated to contain the pid of each new process. The
- * Forker_npids variable contains the number of entries
- * in Forker_pids. Note, not all processes will have
- * access to all pids via Forker_pids. If using mode 0, only the
- * parent process and the last process will have all information.
- * If using mode 1, only the last child process will have all information.
- *
- * If the prefix parameter is not NULL and the fork system call fails,
- * a error message will be printed to stderr. The error message
- * the be preceeded with prefix string. If prefix is NULL,
- * no error message is printed.
- *
- * SPECIAL REQUIREMENTS
- * None.
- *
- * UPDATE HISTORY
- * This should contain the description, author, and date of any
- * "interesting" modifications (i.e. info should helpful in
- * maintaining/enhancing this module).
- * username description
- * ----------------------------------------------------------------
- * rrl This functions will first written during
- * the SFS testing days, 1993.
- *
- * BUGS/LIMITATIONS
- * The child pids are stored in the fixed array, Forker_pids.
- * The array only has space for 4098 pids. Only the first
- * 4098 pids will be stored in the array.
- *
- **************************************************************/
-
-#include <stdio.h>
-#include <errno.h>
-#include <unistd.h> /* fork, getpid, sleep */
-#include <string.h>
-#include <stdlib.h>
-#include "forker.h"
-
-extern int errno;
-
-int Forker_pids[FORKER_MAX_PIDS]; /* holds pids of forked processes */
-int Forker_npids=0; /* number of entries in Forker_pids */
-
-/***********************************************************************
- *
- * This function will fork and the parent will exit zero and
- * the child will return. This will orphan the returning process
- * putting it in the background.
- *
- * Return Value
- * 0 : if fork did not fail
- * !0 : if fork failed, the return value will be the errno.
- ***********************************************************************/
-int
-background(prefix)
-char *prefix;
-{
- switch (fork()) {
- case -1:
- if ( prefix != NULL )
- fprintf(stderr, "%s: In %s background(), fork() failed, errno:%d %s\n",
- prefix, __FILE__, errno, strerror(errno));
- exit(errno);
-
- case 0: /* child process */
- break;
-
- default:
- exit(0);
- }
-
- return 0;
-
-} /* end of background */
-
-/***********************************************************************
- * Forker will fork ncopies-1 copies of self.
- *
- ***********************************************************************/
-int
-forker(ncopies, mode, prefix)
-int ncopies;
-int mode; /* 0 - all childern of parent, 1 - only 1 direct child */
-char *prefix; /* if ! NULL, an message will be printed to stderr */
- /* if fork fails. The prefix (program name) will */
- /* preceed the message */
-{
- int cnt;
- int pid;
- static int ind = 0;
-
- Forker_pids[ind]=0;
-
- for ( cnt=1; cnt < ncopies; cnt++ ) {
-
- switch ( mode ) {
- case 1 : /* only 1 direct child */
- if ( (pid = fork()) == -1 ) {
- if ( prefix != NULL )
- fprintf(stderr, "%s: %s,forker(): fork() failed, errno:%d %s\n",
- prefix, __FILE__, errno, strerror(errno));
- return 0;
- }
- Forker_npids++;
-
- switch (pid ) {
- case 0: /* child - continues the forking */
-
- if ( Forker_npids < FORKER_MAX_PIDS )
- Forker_pids[Forker_npids-1]=getpid();
- break;
-
- default: /* parent - stop the forking */
- if ( Forker_npids < FORKER_MAX_PIDS )
- Forker_pids[Forker_npids-1]=pid;
- return cnt-1;
- }
-
- break;
-
- default : /* all new processes are childern of parent */
- if ( (pid = fork()) == -1 ) {
- if ( prefix != NULL )
- fprintf(stderr, "%s: %s,forker(): fork() failed, errno:%d %s\n",
- prefix, __FILE__, errno, strerror(errno));
- return cnt-1;
- }
- Forker_npids++;
-
- switch (pid ) {
- case 0: /* child - stops the forking */
- if ( Forker_npids < FORKER_MAX_PIDS )
- Forker_pids[Forker_npids-1]=getpid();
- return cnt;
-
- default: /* parent - continues the forking */
- if ( Forker_npids < FORKER_MAX_PIDS )
- Forker_pids[Forker_npids-1]=pid;
- break;
- }
- break;
- }
- }
-
- if ( Forker_npids < FORKER_MAX_PIDS )
- Forker_pids[Forker_npids]=0;
- return cnt-1;
-
-} /* end of forker */
-
-
-#if UNIT_TEST
-
-/*
- * The following is a unit test main for the background and forker
- * functions.
- */
-
-int
-main(argc, argv)
-int argc;
-char **argv;
-{
- int ncopies=1;
- int mode=0;
- int ret;
- int ind;
-
- if ( argc == 1 ) {
- printf("Usage: %s ncopies [mode]\n", argv[0]);
- exit(1);
- }
-
- if ( sscanf(argv[1], "%i", &ncopies) != 1 ) {
- printf("%s: ncopies argument must be integer\n", argv[0]);
- exit(1);
- }
-
- if ( argc == 3 )
- if ( sscanf(argv[2], "%i", &mode) != 1 ) {
- printf("%s: mode argument must be integer\n", argv[0]);
- exit(1);
- }
-
- printf("Starting Pid = %d\n", getpid());
- ret=background(argv[0]);
- printf("After background() ret:%d, pid = %d\n", ret, getpid());
-
- ret=forker(ncopies, mode, argv[0]);
-
- printf("forker(%d, %d, %s) ret:%d, pid = %d, sleeping 30 seconds.\n",
- ncopies, mode, argv[0], ret, getpid());
-
- printf("%d My version of Forker_pids[], Forker_npids = %d\n",
- getpid(), Forker_npids);
-
- for (ind=0; ind<Forker_npids; ind++){
- printf("%d ind:%-2d pid:%d\n", getpid(), ind, Forker_pids[ind]);
- }
-
- sleep(30);
- exit(0);
-}
-
-#endif /* UNIT_TEST */
diff --git a/winsup/testsuite/libltp/lib/get_high_address.c b/winsup/testsuite/libltp/lib/get_high_address.c
deleted file mode 100644
index cf5473aa9..000000000
--- a/winsup/testsuite/libltp/lib/get_high_address.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- */
-
-#include <unistd.h>
-#ifdef __CYGWIN__
-#include <windows.h>
-#endif
-
-char *
-get_high_address()
-{
-#ifdef __CYGWIN__
- return VirtualAlloc (NULL, 4096, MEM_COMMIT, PAGE_NOACCESS) + 2048;
-#else
- return (char *)sbrk(0) + 16384;
-#endif
-}
diff --git a/winsup/testsuite/libltp/lib/libtestsuite.c b/winsup/testsuite/libltp/lib/libtestsuite.c
deleted file mode 100644
index e741d25f6..000000000
--- a/winsup/testsuite/libltp/lib/libtestsuite.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * NAME
- * libtestsuite.c
- *
- * DESCRIPTION
- * file containing generic routines which are used by some of the LTP
- * testsuite tests. Currently, the following routines are present in
- * this library:
- *
- * my_getpwnam(), do_file_setup()
- *
- */
-#include <pwd.h>
-#include <errno.h>
-#include <fcntl.h>
-
-#include "test.h"
-#include "usctest.h"
-
-struct passwd *
-my_getpwnam(char *name)
-{
- struct passwd *saved_pwent;
- struct passwd *pwent;
-
- if ((pwent = getpwnam(name)) == NULL) {
- perror("getpwnam");
- tst_brkm(TBROK, NULL, "getpwnam() failed");
- }
- saved_pwent = (struct passwd *)malloc(sizeof(struct passwd));
-
- *saved_pwent = *pwent;
-
- return(saved_pwent);
-}
-
-void
-do_file_setup(char *fname)
-{
- int fd;
-
- if ((fd = open(fname,O_RDWR|O_CREAT,0700)) == -1) {
- tst_resm(TBROK, "open(%s, O_RDWR|O_CREAT,0700) Failed, "
- "errno=%d : %s", fname, errno, strerror(errno));
- }
-
- if (close(fd) == -1) {
- tst_resm(TWARN, "close(%s) Failed on file create, errno=%d : "
- "%s", fname, errno, strerror(errno));
- }
-}
diff --git a/winsup/testsuite/libltp/lib/open_flags.c b/winsup/testsuite/libltp/lib/open_flags.c
deleted file mode 100644
index 3105955d4..000000000
--- a/winsup/testsuite/libltp/lib/open_flags.c
+++ /dev/null
@@ -1,330 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- */
-/**************************************************************
- *
- * OS Testing - Silicon Graphics, Inc.
- *
- * FUNCTION NAME : parse_open_flags
- * openflags2symbols
- *
- * FUNCTION TITLE : converts open flag symbols into bitmask
- * converts open flag bitmask into symbols
- *
- * SYNOPSIS:
- * int parse_open_flags(symbols, badname)
- * char *symbols;
- * char **badname;
- *
- * char *openflags2symbols(openflags, sep, mode)
- * int openflags;
- * char *sep;
- * int mode;
- *
- * AUTHOR : Richard Logan
- *
- * CO-PILOT(s) : Dean Roehrich
- *
- * INITIAL RELEASE : UNICOS 8.0
- *
- * DESIGN DESCRIPTION
- * The parse_open_flags function can be used to convert
- * a list of comma separated open(2) flag symbols (i.e. O_TRUNC)
- * into the bitmask that can be used by open(2).
- * If a symbol is unknown and <badname> is not NULL, <badname>
- * will updated to point that symbol in <string>.
- * Parse_open_flags will return -1 on this error.
- * Otherwise parse_open_flags will return the open flag bitmask.
- * If parse_open_flags returns, <string> will left unchanged.
- *
- * The openflags2symbols function attempts to convert open flag
- * bits into human readable symbols (i.e. O_TRUNC). If there
- * are more than one symbol, the <sep> string will be placed as
- * a separator between symbols. Commonly used separators would
- * be a comma "," or pipe "|". If <mode> is one and not all
- * <openflags> bits can be converted to symbols, the "UNKNOWN"
- * symbol will be added to return string.
- * Openflags2symbols will return the indentified symbols.
- * If no symbols are recognized the return value will be a empty
- * string or the "UNKNOWN" symbol.
- *
- * SPECIAL REQUIREMENTS
- * None.
- *
- * UPDATE HISTORY
- * This should contain the description, author, and date of any
- * "interesting" modifications (i.e. info should helpful in
- * maintaining/enhancing this module).
- * username description
- * ----------------------------------------------------------------
- * rrl This code was first created during the beginning
- * of the SFS testing days. I think that was in 1993.
- * This code was updated in 05/96.
- * (05/96) openflags2symbols was written.
- *
- * BUGS/LIMITATIONS
- * Currently (05/96) all known symbols are coded into openflags2symbols.
- * If new open flags are added this code will have to updated
- * to know about them or they will not be recognized.
- *
- **************************************************************/
-
-#include <stdio.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <sys/param.h>
-#include <string.h> /* strcat */
-#include "open_flags.h"
-
-#define UNKNOWN_SYMBOL "UNKNOWN"
-
-static char Open_symbols[512]; /* space for openflags2symbols return value */
-
-struct open_flag_t {
- const char *symbol;
- int flag;
-};
-
-static struct open_flag_t Open_flags[] = {
- { "O_RDONLY", O_RDONLY },
- { "O_WRONLY", O_WRONLY },
- { "O_RDWR", O_RDWR },
- { "O_SYNC", O_SYNC },
- { "O_CREAT", O_CREAT },
- { "O_TRUNC", O_TRUNC },
- { "O_EXCL", O_EXCL },
- { "O_APPEND", O_APPEND },
- { "O_NONBLOCK", O_NONBLOCK },
-#if O_NOCTTY
- { "O_NOCTTY", O_NOCTTY },
-#endif
-#if O_DSYNC
- { "O_DSYNC", O_DSYNC },
-#endif
-#if O_RSYNC
- { "O_RSYNC", O_RSYNC },
-#endif
-#if O_ASYNC
- { "O_ASYNC", O_ASYNC },
-#endif
-#if O_PTYIGN
- { "O_PTYIGN", O_PTYIGN },
-#endif
-#if O_NDELAY
- { "O_NDELAY", O_NDELAY },
-#endif
-#if O_RAW
- { "O_RAW", O_RAW },
-#endif
-#ifdef O_SSD
- { "O_SSD", O_SSD },
-#endif
-#if O_BIG
- { "O_BIG", O_BIG },
-#endif
-#if O_PLACE
- { "O_PLACE", O_PLACE },
-#endif
-#if O_RESTART
- { "O_RESTART", O_RESTART },
-#endif
-#if O_SFSXOP
- { "O_SFSXOP", O_SFSXOP },
-#endif
-#if O_SFS_DEFER_TM
- { "O_SFS_DEFER_TM", O_SFS_DEFER_TM },
-#endif
-#if O_WELLFORMED
- { "O_WELLFORMED", O_WELLFORMED },
-#endif
-#if O_LDRAW
- { "O_LDRAW", O_LDRAW },
-#endif
-#if O_T3D
- { "O_T3D", O_T3D },
-#endif /* O_T3D */
-#if O_PARALLEL
- { "O_PARALLEL", O_PARALLEL },
- { "O_FSA", O_PARALLEL|O_WELLFORMED|O_RAW }, /* short cut */
-#endif /* O_PARALLEL */
-#ifdef O_LARGEFILE
- { "O_LARGEFILE", O_LARGEFILE },
-#endif
-#ifdef O_DIRECT
- { "O_DIRECT", O_DIRECT },
-#endif
-#ifdef O_PRIV
- { "O_PRIV", O_PRIV },
-#endif
-
-};
-
-int
-parse_open_flags(char *string, char **badname)
-{
- int bits = 0;
- char *name;
- char *cc;
- char savecc;
- int found;
- int ind;
-
- name=string;
- cc=name;
-
- while ( 1 ) {
-
- for(; ((*cc != ',') && (*cc != '\0')); cc++);
- savecc = *cc;
- *cc = '\0';
-
- found = 0;
-
- for(ind=0; ind < sizeof(Open_flags)/sizeof(struct open_flag_t); ind++) {
- if ( strcmp(name, Open_flags[ind].symbol) == 0 ) {
- bits |= Open_flags[ind].flag;
- found=1;
- break;
- }
- }
-
- *cc = savecc; /* restore string */
-
- if ( found == 0 ) { /* invalid name */
- if ( badname != NULL )
- *badname = name;
- return -1;
- }
-
- if ( savecc == '\0' )
- break;
-
- name = ++cc;
-
- } /* end while */
-
- return bits;
-
-} /* end of parse_open_flags */
-
-
-char *
-openflags2symbols(int openflags, char *sep, int mode)
-{
- int ind;
- int size;
- int bits = openflags;
- int havesome=0;
-
- Open_symbols[0]='\0';
-
- size=sizeof(Open_flags)/sizeof(struct open_flag_t);
-
- /*
- * Deal with special case of O_RDONLY. If O_WRONLY nor O_RDWR
- * bits are not set, assume O_RDONLY.
- */
-
- if ( (bits & (O_WRONLY | O_RDWR)) == 0 ) {
- strcat(Open_symbols, "O_RDONLY");
- havesome=1;
- }
-
- /*
- * Loop through all but O_RDONLY elments of Open_flags
- */
- for(ind=1; ind < size; ind++) {
-
- if ( (bits & Open_flags[ind].flag) == Open_flags[ind].flag ) {
- if ( havesome )
- strcat(Open_symbols, sep);
-
- strcat(Open_symbols, Open_flags[ind].symbol);
- havesome++;
-
- /* remove flag bits from bits */
- bits = bits & (~Open_flags[ind].flag);
- }
- }
-
- /*
- * If not all bits were identified and mode was equal to 1,
- * added UNKNOWN_SYMBOL to return string
- */
- if ( bits && mode == 1 ) { /* not all bits were identified */
- if ( havesome )
- strcat(Open_symbols, sep);
- strcat(Open_symbols, UNKNOWN_SYMBOL);
- }
-
- return Open_symbols;
-
-} /* end of openflags2symbols */
-
-
-#ifdef UNIT_TEST
-
-/*
- * The following code provides a UNIT test main for
- * parse_open_flags and openflags2symbols functions.
- */
-
-int
-main(argc, argv)
-int argc;
-char **argv;
-{
- int bits;
- int ret;
- char *err;
-
- if (argc == 1 ) {
- printf("Usage: %s openflagsbits\n\t%s symbols\n", argv[0], argv[0]);
- exit(1);
- }
-
- if ( sscanf(argv[1], "%i", &bits) == 1 ) {
- printf("openflags2symbols(%#o, \",\", 1) returned %s\n",
- bits, openflags2symbols(bits, ",", 1));
-
- } else {
- ret=parse_open_flags(argv[1], &err);
- if ( ret == -1 )
- printf("parse_open_flags(%s, &err) returned -1, err = %s\n",
- argv[0], err);
- else
- printf("parse_open_flags(%s, &err) returned %#o\n", argv[0], ret);
- }
-
- exit(0);
-}
-
-#endif /* end of UNIT_TEST */
diff --git a/winsup/testsuite/libltp/lib/parse_opts.c b/winsup/testsuite/libltp/lib/parse_opts.c
deleted file mode 100644
index 4a8058938..000000000
--- a/winsup/testsuite/libltp/lib/parse_opts.c
+++ /dev/null
@@ -1,876 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- */
-
-/* $Id$ */
-
-/**********************************************************
- *
- * OS Testing - Silicon Graphics, Inc.
- *
- * FUNCTION NAME : parse_opts
- *
- * FUNCTION TITLE : parse standard & user options for system call tests
- *
- * SYNOPSIS:
- * #include "usctest.h"
- *
- * char *parse_opts(ac, av, user_optarr, uhf)
- * int ac;
- * char **av;
- * option_t user_optarr[];
- * void (*uhf)();
- *
- * AUTHOR : William Roske/Richard Logan
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * DESCRIPTION
- * The parse_opts library routine takes that argc and argv parameters
- * recevied by main() and an array of structures defining user options.
- * It parses the command line setting flag and argument locations
- * associated with the options. It uses getopt to do the actual cmd line
- * parsing. uhf() is a function to print user define help
- *
- * This module contains the functions usc_global_setup_hook and
- * usc_test_looping, which are called by marcos defined in usctest.h.
- *
- * RETURN VALUE
- * parse_opts returns a pointer to an error message if an error occurs.
- * This pointer is (char *)NULL if parsing is successful.
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-#include <errno.h>
-#include <string.h>
-#include <sys/param.h>
-#include <sys/signal.h>
-#include <sys/types.h>
-#include <sys/time.h>
-
-#ifdef __CYGWIN__
-#include <getopt.h>
-#endif
-
-
-#if UNIT_TEST
-#include <time.h>
-#endif /* UNIT_TEST */
-
-#include "test.h"
-#define _USC_LIB_ 1 /* indicates we are the library to the usctest.h include */
-#include "usctest.h"
-
-#ifndef USC_COPIES
-#define USC_COPIES "USC_COPIES"
-#endif
-
-#ifndef UNIT_TEST
-#define UNIT_TEST 0
-#endif
-
-#ifndef DEBUG
-#define DEBUG 0
-#endif
-
-/*
- * Code from usctest.h that not part of this file since we are the library.
- */
-
-struct usc_errno_t TEST_VALID_ENO[USC_MAX_ERRNO];
-
- /***********************************************************************
- * Globals for returning the return code and errno from the system call
- * test macros.
- ***********************************************************************/
-int TEST_RETURN;
-int TEST_ERRNO;
-
- /***********************************************************************
- * temporary variables for determining max and min times in TEST macro
- ***********************************************************************/
-long btime, etime, tmptime;
-
-/* The timing information block. */
-struct tblock tblock={0,((long) -1)>>1,0,0};
-
-
-/* Define flags and args for standard options */
-int STD_FUNCTIONAL_TEST=1, /* flag indicating to do functional testing code */
- STD_TIMING_ON=0, /* flag indicating to print timing stats */
- STD_PAUSE=0, /* flag indicating to pause before actual start, */
- /* for contention mode */
- STD_INFINITE=0, /* flag indciating to loop forever */
- STD_LOOP_COUNT=1, /* number of iterations */
- STD_COPIES=1, /* number of copies */
- STD_ERRNO_LOG=0; /* flag indicating to do errno logging */
-
-float STD_LOOP_DURATION=0.0, /* duration value in fractional seconds */
- STD_LOOP_DELAY=0.0; /* loop delay value in fractional seconds */
-
-
-char **STD_opt_arr = NULL; /* array of option strings */
-int STD_nopts=0, /* number of elements in STD_opt_arr */
- STD_argind=1; /* argv index to next argv element */
- /* (first argument) */
- /* To getopt users, it is like optind */
-
-/*
- * The following variables are to support system testing additions.
- */
-static int STD_TP_barrier=0; /* flag to do barrier in TEST_PAUSE */
- /* 2 - wait_barrier(), 3 - set_barrier(), * - barrier() */
-static int STD_LP_barrier=0; /* flag to do barrier in TEST_LOOPING */
- /* 2 - wait_barrier(), 3 - set_barrier(), * - barrier() */
-static int STD_TP_shmem_sz=0; /* shmalloc this many words per pe in TEST_PAUSE */
-static int STD_LD_shmem=0; /* flag to do shmem_puts and shmem_gets during delay */
-static int STD_LP_shmem=0; /* flag to do shmem_puts and gets during TEST_LOOPING */
-static int STD_LD_recfun=0; /* do recressive function calls in loop delay */
-static int STD_LP_recfun=0; /* do recressive function calls in TEST_LOOPING */
-static int STD_TP_sbrk=0; /* do sbrk in TEST_PAUSE */
-static int STD_LP_sbrk=0; /* do sbrk in TEST_LOOPING */
-static char *STD_start_break=0; /* original sbrk size */
-static int Debug=0;
-
-struct std_option_t {
- const char *optstr;
- const char *help;
- char *flag;
- char **arg;
-} std_options[] = {
- { "c:", " -c n Run n copies concurrently\n", NULL, NULL},
- { "e" , " -e Turn on errno logging\n", NULL, NULL},
- { "f" , " -f Turn off functional testing\n", NULL, NULL},
- { "h" , " -h Show this help screen\n", NULL, NULL},
- { "i:", " -i n Execute test n times\n", NULL, NULL},
- { "I:", " -I x Execute test for x seconds\n", NULL, NULL},
- { "p" , " -p Pause for SIGUSR1 before starting\n", NULL, NULL},
- { "P:", " -P x Pause for x seconds between iterations\n", NULL, NULL},
- { "t" , " -t Turn on syscall timing\n", NULL, NULL},
- {NULL, NULL, NULL, NULL}};
-
-void print_help(void (*user_help)());
-
-/*
- * Structure for usc_recressive_func argument
- */
-struct usc_bigstack_t {
- char space[4096];
-};
-
-static struct usc_bigstack_t *STD_bigstack=NULL;
-
-/*
- * Counter of errnos returned (-e option). Indexed by errno.
- * Make the array USC_MAX_ERRNO long. That is the first Fortran
- * Lib errno. No syscall should return an errno that high.
- */
-int STD_ERRNO_LIST[USC_MAX_ERRNO];
-
-/* define the string length for Mesg and Mesg2 strings */
-#define STRLEN 2048
-
-static char Mesg2[STRLEN]; /* holds possible return string */
-static void usc_recressive_func();
-
-/*
- * Define bits for options that might have env variable default
- */
-#define OPT_iteration 01
-#define OPT_nofunccheck 02
-#define OPT_duration 04
-#define OPT_delay 010
-#define OPT_copies 020
-
-
-/**********************************************************************
- * parse_opts:
- **********************************************************************/
-const char *
-parse_opts(int ac, char **av, option_t *user_optarr, void (*uhf)())
-{
- int found; /* flag to indicate that an option specified was */
- /* found in the user's list */
- int k; /* scratch integer for returns and short time usage */
- float ftmp; /* tmp float for parsing env variables */
- char *ptr; /* used in getting env variables */
- int options=0; /* no options specified */
- int optstrlen, i;
- char *optionstr;
- int opt; /* return of getopt */
-
- /*
- * If not the first time this function is called, release the old STD_opt_arr
- * vector.
- */
-
- if ( STD_opt_arr != NULL ) {
- free(STD_opt_arr);
- STD_opt_arr=NULL;
- }
- /* Calculate how much space we need for the option string */
- optstrlen = 0;
- for (i = 0; std_options[i].optstr; ++i)
- optstrlen += strlen(std_options[i].optstr);
- if (user_optarr)
- for (i = 0; user_optarr[i].option; ++i) {
- if (strlen(user_optarr[i].option) > 2)
- return "parse_opts: ERROR - Only short options are allowed";
- optstrlen += strlen(user_optarr[i].option);
- }
- optstrlen += 1;
-
- /* Create the option string for getopt */
- optionstr = (char *)malloc(optstrlen);
- if (!optionstr)
- return "parse_opts: ERROR - Could not allocate memory for optionstr";
-
- optionstr[0] = '\0';
-
- for (i = 0; std_options[i].optstr; ++i)
- strcat(optionstr, std_options[i].optstr);
- if (user_optarr)
- for (i = 0; user_optarr[i].option; ++i)
- /* only add the option if it wasn't there already */
- if (strchr(optionstr, user_optarr[i].option[0]) == NULL)
- strcat(optionstr, user_optarr[i].option);
-
-#if DEBUG > 1
- printf("STD_nopts = %d\n", STD_nopts);
-#endif
-
- /*
- * Loop through av parsing options.
- */
- while ( (opt = getopt(ac, av, optionstr)) > 0) {
-
- STD_argind = optind;
-#if DEBUG > 0
- printf("parse_opts: getopt returned '%c'\n", opt);
-#endif
-
- switch (opt) {
- case '?': /* Unknown option */
- return "Unknown option";
- break;
- case ':': /* Missing Arg */
- return "Missing argument";
- break;
- case 'i': /* Iterations */
- options |= OPT_iteration;
- STD_LOOP_COUNT = atoi(optarg);
- if (STD_LOOP_COUNT == 0) STD_INFINITE = 1;
- break;
- case 'P': /* Delay between iterations */
- options |= OPT_delay;
- STD_LOOP_DELAY = atof(optarg);
- break;
- case 'I': /* Time duration */
- options |= OPT_duration;
- STD_LOOP_DURATION = atof(optarg);
- if ( STD_LOOP_DURATION == 0.0 ) STD_INFINITE=1;
- break;
- case 'c': /* Copies */
- options |= OPT_copies;
- STD_COPIES = atoi(optarg);
- break;
- case 'f': /* Functional testing */
- STD_FUNCTIONAL_TEST = 0;
- break;
- case 'p': /* Pause for SIGUSR1 */
- STD_PAUSE = 1;
- break;
- case 't': /* syscall timing */
- STD_TIMING_ON = 1;
- break;
- case 'e': /* errno loggin */
- STD_ERRNO_LOG = 1;
- break;
- case 'h': /* Help */
- print_help(uhf);
- exit(0);
- break;
- default:
-
- /* Check all the user specified options */
- found=0;
- for(i = 0; user_optarr[i].option; ++i) {
-
- if (opt == user_optarr[i].option[0]) {
- /* Yup, This is a user option, set the flag and look for argument */
- if ( user_optarr[i].flag ) {
- *user_optarr[i].flag=1;
- }
- found++;
-
- /* save the argument at the user's location */
- if ( user_optarr[i].option[strlen(user_optarr[i].option)-1] == ':' ) {
- *user_optarr[i].arg=optarg;
- }
- break; /* option found - break out of the for loop */
- }
- }
- /* This condition "should never happen". SO CHECK FOR IT!!!! */
- if ( ! found ) {
- sprintf(Mesg2,
- "parse_opts: ERROR - option:\"%c\" NOT FOUND... INTERNAL ERROR", opt);
- return(Mesg2);
- }
- }
-
- } /* end of while */
-
- STD_argind = optind;
-
- /*
- * Turn on debug
- */
- if ( (ptr=getenv("USC_DEBUG")) != NULL ) {
- Debug=1;
- printf("env USC_DEBUG is defined, turning on debug\n");
- }
- if ( (ptr=getenv("USC_VERBOSE")) != NULL ) {
- Debug=1;
- printf("env USC_VERBOSE is defined, turning on debug\n");
- }
-
- /*
- * If the USC_ITERATION_ENV environmental variable is set to
- * a number, use that number as iteration count (same as -c option).
- * The -c option with arg will be used even if this env var is set.
- */
- if ( !(options & OPT_iteration) && (ptr=getenv(USC_ITERATION_ENV)) != NULL ) {
- if ( sscanf(ptr, "%i", &k) == 1) {
- if ( k == 0 ) { /* if arg is 0, set infinite loop flag */
- STD_INFINITE=1;
- if ( Debug )
- printf("Using env %s, set STD_INFINITE to 1\n",
- USC_ITERATION_ENV);
- } else { /* else, set the loop count to the arguement */
- STD_LOOP_COUNT=k;
- if ( Debug )
- printf("Using env %s, set STD_LOOP_COUNT to %d\n",
- USC_ITERATION_ENV, k);
- }
- }
- }
-
- /*
- * If the USC_NO_FUNC_CHECK environmental variable is set, we'll
- * unset the STD_FUNCTIONAL_TEST variable.
- */
- if ( !(options & OPT_nofunccheck) && (ptr=getenv(USC_NO_FUNC_CHECK)) != NULL ) {
- STD_FUNCTIONAL_TEST=0; /* Turn off functional testing */
- if ( Debug )
- printf("Using env %s, set STD_FUNCTIONAL_TEST to 0\n",
- USC_NO_FUNC_CHECK);
- }
-
- /*
- * If the USC_LOOP_WALLTIME environmental variable is set,
- * use that number as duration (same as -I option).
- * The -I option with arg will be used even if this env var is set.
- */
-
- if ( !(options & OPT_duration) && (ptr=getenv(USC_LOOP_WALLTIME)) != NULL ) {
- if ( sscanf(ptr, "%f", &ftmp) == 1 && ftmp >= 0.0 ) {
- STD_LOOP_DURATION=ftmp;
- if ( Debug )
- printf("Using env %s, set STD_LOOP_DURATION to %f\n",
- USC_LOOP_WALLTIME, ftmp);
- if ( STD_LOOP_DURATION == 0.0 ) { /* if arg is 0, set infinite loop flag */
- STD_INFINITE=1;
- if ( Debug )
- printf("Using env %s, set STD_INFINITE to 1\n", USC_LOOP_WALLTIME);
- }
- }
- }
- if ( !(options & OPT_duration) && (ptr=getenv("USC_DURATION")) != NULL ) {
- if ( sscanf(ptr, "%f", &ftmp) == 1 && ftmp >= 0.0 ) {
- STD_LOOP_DURATION=ftmp;
- if ( Debug )
- printf("Using env USC_DURATION, set STD_LOOP_DURATION to %f\n", ftmp);
- if ( STD_LOOP_DURATION == 0.0 ) { /* if arg is 0, set infinite loop flag */
- STD_INFINITE=1;
- if ( Debug )
- printf("Using env USC_DURATION, set STD_INFINITE to 1\n");
- }
- }
- }
- /*
- * If the USC_LOOP_DELAY environmental variable is set,
- * use that number as delay in factional seconds (same as -P option).
- * The -P option with arg will be used even if this env var is set.
- */
- if ( !(options & OPT_delay) && (ptr=getenv(USC_LOOP_DELAY)) != NULL ) {
- if ( sscanf(ptr, "%f", &ftmp) == 1 && ftmp >= 0.0 ) {
- STD_LOOP_DELAY=ftmp;
- if ( Debug )
- printf("Using env %s, set STD_LOOP_DELAY = %f\n",
- USC_LOOP_DELAY, ftmp);
- }
- }
-
- /*
- * If the USC_COPIES environmental variable is set,
- * use that number as copies (same as -c option).
- * The -c option with arg will be used even if this env var is set.
- */
- if ( !(options & OPT_copies) && (ptr=getenv(USC_COPIES)) != NULL ) {
- if ( sscanf(ptr, "%d", &STD_COPIES) == 1 && STD_COPIES >= 0 ) {
- if ( Debug )
- printf("Using env %s, set STD_COPIES = %d\n",
- USC_COPIES, STD_COPIES);
- }
- }
-
- /*
- * The following are special system testing envs to turn on special
- * hooks in the code.
- */
- if ( (ptr=getenv("USC_TP_BARRIER")) != NULL ) {
- if ( sscanf(ptr, "%i", &k) == 1 && k >= 0 ) {
- STD_TP_barrier=k;
- }
- else
- STD_TP_barrier=1;
- if ( Debug )
- printf("using env USC_TP_BARRIER, Set STD_TP_barrier to %d\n",
- STD_TP_barrier);
- }
-
- if ( (ptr=getenv("USC_LP_BARRIER")) != NULL ) {
- if ( sscanf(ptr, "%i", &k) == 1 && k >= 0 ) {
- STD_LP_barrier=k;
- }
- else
- STD_LP_barrier=1;
- if ( Debug )
- printf("using env USC_LP_BARRIER, Set STD_LP_barrier to %d\n",
- STD_LP_barrier);
- }
-
- if ( (ptr=getenv("USC_TP_SHMEM")) != NULL ) {
- if ( sscanf(ptr, "%i", &k) == 1 && k >= 0 ) {
- STD_TP_shmem_sz=k;
- if ( Debug )
- printf("Using env USC_TP_SHMEM, Set STD_TP_shmem_sz to %d\n",
- STD_TP_shmem_sz);
- }
- }
-
- if ( (ptr=getenv("USC_LP_SHMEM")) != NULL ) {
- if ( sscanf(ptr, "%i", &k) == 1 && k >= 0 ) {
- STD_LP_shmem=k;
- if ( Debug )
- printf("Using env USC_LP_SHMEM, Set STD_LP_shmem to %d\n",
- STD_LP_shmem);
- }
- }
-
- if ( (ptr=getenv("USC_LD_SHMEM")) != NULL ) {
- if ( sscanf(ptr, "%i", &k) == 1 && k >= 0 ) {
- STD_LD_shmem=k;
- if ( Debug )
- printf("Using env USC_LD_SHMEM, Set STD_LD_shmem to %d\n",
- STD_LD_shmem);
- }
- }
-
- if ( (ptr=getenv("USC_TP_SBRK")) != NULL ) {
- if ( sscanf(ptr, "%i", &k) == 1 && k >= 0 ) {
- STD_TP_sbrk=k;
- if ( Debug )
- printf("Using env USC_TP_SBRK, Set STD_TP_sbrk to %d\n",
- STD_TP_sbrk);
- }
- }
-
- if ( (ptr=getenv("USC_LP_SBRK")) != NULL ) {
- if ( sscanf(ptr, "%i", &k) == 1 && k >= 0 ) {
- STD_LP_sbrk=k;
- if ( Debug )
- printf("Using env USC_LP_SBRK, Set STD_LP_sbrk to %d\n",
- STD_LP_sbrk);
- }
- }
-
- if ( (ptr=getenv("USC_LP_RECFUN")) != NULL ) {
- if ( sscanf(ptr, "%i", &k) == 1 && k >= 0 ) {
- STD_LP_recfun=k;
- if ( STD_bigstack != (struct usc_bigstack_t *)NULL )
- STD_bigstack=(struct usc_bigstack_t *)
- malloc(sizeof(struct usc_bigstack_t));
- if ( Debug )
- printf("Using env USC_LP_RECFUN, Set STD_LP_recfun to %d\n",
- STD_LP_recfun);
- }
- }
-
- if ( (ptr=getenv("USC_LD_RECFUN")) != NULL ) {
- if ( sscanf(ptr, "%i", &k) == 1 && k >= 0 ) {
- STD_LD_recfun=k;
- if ( STD_bigstack != (struct usc_bigstack_t *)NULL )
- STD_bigstack=(struct usc_bigstack_t *)
- malloc(sizeof(struct usc_bigstack_t));
- if ( Debug )
- printf("Using env USC_LD_RECFUN, Set STD_LD_recfun to %d\n",
- STD_LD_recfun);
- }
- }
-
-#if UNIT_TEST
- printf("The following variables after option and env parsing:\n");
- printf("STD_FUNCTIONAL_TEST = %d\n", STD_FUNCTIONAL_TEST);
- printf("STD_LOOP_DURATION = %f\n", STD_LOOP_DURATION);
- printf("STD_LOOP_DELAY = %f\n", STD_LOOP_DELAY);
- printf("STD_COPIES = %d\n", STD_COPIES);
- printf("STD_LOOP_COUNT = %d\n", STD_LOOP_COUNT);
- printf("STD_INFINITE = %d\n", STD_INFINITE);
- printf("STD_TIMING_ON = %d\n", STD_TIMING_ON);
- printf("STD_ERRNO_LOG = %d\n", STD_ERRNO_LOG);
- printf("STD_PAUSE = %d\n", STD_PAUSE);
-#endif
-
- return((char *) NULL);
-
-} /* end of parse_opts */
-
-/*********************************************************************
- * print_help() - print help message and user help message
- *********************************************************************/
-void print_help(void (*user_help)())
-{
- STD_opts_help();
-
- if (user_help) user_help();
-}
-
-/*********************************************************************
- * STD_opts_help() - return a help string for the STD_OPTIONS.
- *********************************************************************/
-void
-STD_opts_help()
-{
- int i;
-
- for(i = 0; std_options[i].optstr; ++i) {
- if (std_options[i].help)
- printf(std_options[i].help);
- }
-}
-
-/*
- * routine to goto when we get the SIGUSR1 for STD_PAUSE
- */
-void STD_go(int sig)
-{
- return;
-}
-
-/***********************************************************************
- * This function will do desired end of global setup test
- * hooks.
- * Currently it will only do a pause waiting for sigusr1 if
- * STD_PAUSE is set.
- *
- ***********************************************************************/
-int
-usc_global_setup_hook()
-{
- int cnt;
- /* temp variable to store old signal action to be restored after pause */
- int (*_TMP_FUNC)(void);
-
- /*
- * Fork STD_COPIES-1 copies.
- */
- for(cnt=1;cnt<STD_COPIES;cnt++) {
- switch(fork() ) {
- case -1:
- fprintf(stderr, "%s: fork() failed, errno:%d %s\n",
- __FILE__, errno, strerror(errno));
- break;
- case 0: /* child */
- cnt=STD_COPIES; /* to stop the forking */
- break;
-
- default: /* parent */
- break;
- }
- }
-
- /*
- * pause waiting for sigusr1.
- */
- if ( STD_PAUSE ) {
- _TMP_FUNC = (int (*)())signal(SIGUSR1, STD_go);
- pause();
- signal(SIGUSR1, (void (*)())_TMP_FUNC);
- }
-
-
- if ( STD_TP_sbrk || STD_LP_sbrk) {
- STD_start_break=sbrk(0); /* get original sbreak size */
- }
-
- if ( STD_TP_sbrk ) {
- sbrk(STD_TP_sbrk);
- if ( Debug )
- printf("after sbrk(%d)\n", STD_TP_sbrk);
- }
- return 0;
-}
-
-#define USECS_PER_SEC 1000000 /* microseconds per second */
-
-/***********************************************************************
- * This function returns the number of get_current_time()'s return
- * per second.
- ***********************************************************************/
-
-static int
-get_timepersec()
-{
- return USECS_PER_SEC; /* microseconds per second */
-
-}
-
-/***********************************************************************
- * this function will get current time in microseconds since 1970.
- ***********************************************************************/
-static int
-get_current_time()
-{
- struct timeval curtime;
-
- gettimeofday(&curtime, NULL);
-
- /* microseconds since 1970 */
- return (curtime.tv_sec*USECS_PER_SEC) + curtime.tv_usec;
-
-
-}
-
-/***********************************************************************
- *
- * This function will determine if test should continue iterating
- * If the STD_INFINITE flag is set, return 1.
- * If the STD_LOOP_COUNT variable is set, compare it against
- * the counter.
- * If the STD_LOOP_DURATION variable is set, compare current time against
- * calculated stop_time.
- * This function will return 1 until all desired looping methods
- * have been met.
- *
- * counter integer is supplied by the user program.
- ***********************************************************************/
-int
-usc_test_looping(counter)
-int counter;
-{
- static int first_time = 1;
- static int stop_time = 0; /* stop time in rtc or usecs */
- static int delay; /* delay in clocks or usecs */
- int hz=0; /* clocks per second or usecs per second */
- int ct, end; /* current time, end delay time */
- int keepgoing=0; /* used to determine return value */
-
- /*
- * If this is the first iteration and we are looping for
- * duration of STD_LOOP_DURATION seconds (fractional) or
- * doing loop delays, get the clocks per second.
- */
- if ( first_time ) {
-
- first_time=0;
- if ( STD_LOOP_DELAY || STD_LOOP_DURATION ) {
- hz = get_timepersec();
- }
-
- /*
- * If looping for duration, calculate stop time in
- * clocks.
- */
-
- if ( STD_LOOP_DURATION) {
- ct=get_current_time();
- stop_time=(int)((float)hz * STD_LOOP_DURATION) + ct;
- }
-
- /*
- * If doing delay each iteration, calcuate the number
- * of clocks for each delay.
- */
- if ( STD_LOOP_DELAY ) {
- delay=(int)((float)hz * STD_LOOP_DELAY);
- }
-
- }
-
- /*
- * if delay each iteration, loop for delay clocks.
- * This will not be done on first iteration.
- * The delay will happen before determining if
- * there will be another iteration.
- */
- else if ( STD_LOOP_DELAY ) {
- ct=get_current_time();
- end=ct+delay;
- while ( ct < end ) {
- /*
- * The following are special test hooks in the delay loop.
- */
- if ( STD_LD_recfun ) {
- if ( Debug )
- printf("calling usc_recressive_func(0, %d, &STD_bigstack)\n",
- STD_LD_recfun);
- usc_recressive_func(0, STD_LD_recfun, &STD_bigstack);
- }
-
- ct=get_current_time();
- }
- }
-
- if ( STD_INFINITE ) {
- keepgoing++;
- }
-
- if ( STD_LOOP_COUNT && counter < STD_LOOP_COUNT ) {
- keepgoing++;
- }
-
- if ( STD_LOOP_DURATION != 0.0 && get_current_time() < stop_time ) {
- keepgoing++;
- }
-
- if ( keepgoing == 0 )
- return 0;
-
- /*
- * The following code allows special system testing hooks.
- */
-
- if ( STD_LP_recfun ) {
- if ( Debug )
- printf("calling usc_recressive_func(0, %d, &STD_bigstack)\n",
- STD_LP_recfun);
- usc_recressive_func(0, STD_LP_recfun, &STD_bigstack);
- }
-
- if ( STD_LP_sbrk ) {
- if ( Debug )
- printf("about to do sbrk(%d)\n", STD_LP_sbrk);
- sbrk(STD_LP_sbrk);
- }
-
-
- if ( keepgoing )
- return 1;
- else
- return 0; /* done - stop iterating */
-}
-
-
-/*
- * This function recressively calls itself max times.
- */
-static void
-usc_recressive_func(cnt, max, bstack)
-int cnt;
-int max;
-struct usc_bigstack_t bstack;
-{
- if ( cnt < max )
- usc_recressive_func(cnt+1, max, bstack);
-
-}
-
-#if UNIT_TEST
-/******************************************************************************
- * UNIT TEST CODE
- * UNIT TEST CODE
- *
- * this following code is provide so that unit testing can
- * be done fairly easily.
- ******************************************************************************/
-
-int Help = 0;
-int Help2 = 0;
-char *ptr;
-
-
-
-/* for test specific parse_opts options */
-option_t Options[] = {
- { "help", &Help2, NULL }, /* -help option */
- { "h", &Help, NULL }, /* -h option */
- { TIMING, NULL, NULL}, /* disable -timing option */
-
-#if INVALID_TEST_CASES
- { "missingflag", NULL, &ptr }, /* error */
- { "missingarg:", &Help, NULL }, /* error */
-#endif /* INVALID_TEST_CASES */
-
- { NULL, NULL, NULL }
-};
-
-
-main(argc, argv)
-int argc;
-char **argv;
-{
- int lc;
- char *msg;
- struct timeval t;
- int cnt;
-
- if ( (msg=parse_opts(argc, argv,
- (option_t *) Options)) != (char *) NULL ) {
- printf("ERROR : %s\n", msg);
- exit(1);
- }
-
- TEST_PAUSE;
-
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- TEST( gettimeofday(&t, NULL) );
- printf("iter=%d: sec:%d, usec:%6.6d %s", lc+1, t.tv_sec,
- t.tv_usec, ctime(&t.tv_sec));
- }
-
-
- TEST_CLEANUP;
-
- exit(0);
-}
-
-#endif /* UNIT_TEST */
diff --git a/winsup/testsuite/libltp/lib/pattern.c b/winsup/testsuite/libltp/lib/pattern.c
deleted file mode 100644
index 7f4d5873e..000000000
--- a/winsup/testsuite/libltp/lib/pattern.c
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- */
-#include <string.h>
-#include "pattern.h"
-
-/*
- * The routines in this module are used to fill/check a data buffer
- * with/against a known pattern.
- */
-
-int
-pattern_check(buf, buflen, pat, patlen, patshift)
-char *buf;
-int buflen;
-char *pat;
-int patlen;
-int patshift;
-{
- int nb, ncmp, nleft;
- char *cp;
-
- if (patlen)
- patshift = patshift % patlen;
-
- cp = buf;
- nleft = buflen;
-
- /*
- * The following 2 blocks of code are to compare the first patlen
- * bytes of buf. We need 2 checks if patshift is > 0 since we
- * must check the last (patlen - patshift) bytes, and then the
- * first (patshift) bytes.
- */
-
- nb = patlen - patshift;
- if (nleft < nb) {
- return (memcmp(cp, pat + patshift, nleft) ? -1 : 0);
- } else {
- if (memcmp(cp, pat + patshift, nb))
- return -1;
-
- nleft -= nb;
- cp += nb;
- }
-
- if (patshift > 0) {
- nb = patshift;
- if (nleft < nb) {
- return (memcmp(cp, pat, nleft) ? -1 : 0);
- } else {
- if (memcmp(cp, pat, nb))
- return -1;
-
- nleft -= nb;
- cp += nb;
- }
- }
-
- /*
- * Now, verify the rest of the buffer using the algorithm described
- * in the function header.
- */
-
- ncmp = cp - buf;
- while (ncmp < buflen) {
- nb = (ncmp < nleft) ? ncmp : nleft;
- if (memcmp(buf, cp, nb))
- return -1;
-
- cp += nb;
- ncmp += nb;
- nleft -= nb;
- }
-
- return 0;
-}
-
-int
-pattern_fill(buf, buflen, pat, patlen, patshift)
-char *buf;
-int buflen;
-char *pat;
-int patlen;
-int patshift;
-{
- int trans, ncopied, nleft;
- char *cp;
-
- if (patlen)
- patshift = patshift % patlen;
-
- cp = buf;
- nleft = buflen;
-
- /*
- * The following 2 blocks of code are to fill the first patlen
- * bytes of buf. We need 2 sections if patshift is > 0 since we
- * must first copy the last (patlen - patshift) bytes into buf[0]...,
- * and then the first (patshift) bytes of pattern following them.
- */
-
- trans = patlen - patshift;
- if (nleft < trans) {
- memcpy(cp, pat + patshift, nleft);
- return 0;
- } else {
- memcpy(cp, pat + patshift, trans);
- nleft -= trans;
- cp += trans;
- }
-
- if (patshift > 0) {
- trans = patshift;
- if (nleft < trans) {
- memcpy(cp, pat, nleft);
- return 0;
- } else {
- memcpy(cp, pat, trans);
- nleft -= trans;
- cp += trans;
- }
- }
-
- /*
- * Now, fill the rest of the buffer using the algorithm described
- * in the function header comment.
- */
-
- ncopied = cp - buf;
- while (ncopied < buflen) {
- trans = (ncopied < nleft) ? ncopied : nleft;
- memcpy(cp, buf, trans);
- cp += trans;
- ncopied += trans;
- nleft -= trans;
- }
-
- return(0);
-}
diff --git a/winsup/testsuite/libltp/lib/rmobj.c b/winsup/testsuite/libltp/lib/rmobj.c
deleted file mode 100644
index 63122c446..000000000
--- a/winsup/testsuite/libltp/lib/rmobj.c
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- */
-
-/* $Id$ */
-
-/**********************************************************
- *
- * OS Testing - Silicon Graphics, Inc.
- *
- * FUNCTION NAME : rmobj()
- *
- * FUNCTION TITLE : Remove an object
- *
- * SYNOPSIS:
- * int rmobj(char *obj, char **errmsg)
- *
- * AUTHOR : Kent Rogers
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * USER DESCRIPTION
- * This routine will remove the specified object. If the specified
- * object is a directory, it will recursively remove the directory
- * and everything underneath it. It assumes that it has privilege
- * to remove everything that it tries to remove. If rmobj() encounters
- * any problems, and errmsg is not NULL, errmsg is set to point to a
- * string explaining the error.
- *
- * DETAILED DESCRIPTION
- * Allocate space for the directory and its contents
- * Open the directory to get access to what is in it
- * Loop through the objects in the directory:
- * If the object is not "." or "..":
- * Determine the file type by calling lstat()
- * If the object is not a directory:
- * Remove the object with unlink()
- * Else:
- * Call rmobj(object) to remove the object's contents
- * Determine the link count on object by calling lstat()
- * If the link count >= 3:
- * Remove the directory with unlink()
- * Else
- * Remove the directory with rmdir()
- * Close the directory and free the pointers
- *
- * RETURN VALUE
- * If there are any problems, rmobj() will set errmsg (if it was not
- * NULL) and return -1. Otherwise it will return 0.
- *
- ************************************************************/
-#include <errno.h> /* for errno */
-#include <stdio.h> /* for NULL */
-#include <stdlib.h> /* for malloc() */
-#include <string.h> /* for string function */
-#include <limits.h> /* for PATH_MAX */
-#include <sys/types.h> /* for opendir(), readdir(), closedir(), stat() */
-#include <sys/stat.h> /* for [l]stat() */
-#include <dirent.h> /* for opendir(), readdir(), closedir() */
-#include <unistd.h> /* for rmdir(), unlink() */
-#include "rmobj.h"
-
-#define SYSERR strerror(errno)
-
-int
-rmobj(char *obj, char **errmsg)
-{
- int ret_val = 0; /* return value from this routine */
- DIR *dir; /* pointer to a directory */
- struct dirent *dir_ent; /* pointer to directory entries */
- char dirobj[PATH_MAX]; /* object inside directory to modify */
- struct stat statbuf; /* used to hold stat information */
- static char err_msg[1024]; /* error message */
-
- /* Determine the file type */
- if ( lstat(obj, &statbuf) < 0 ) {
- if ( errmsg != NULL ) {
- sprintf(err_msg, "lstat(%s) failed; errno=%d: %s",
- obj, errno, SYSERR);
- *errmsg = err_msg;
- }
- return -1;
- }
-
- /* Take appropriate action, depending on the file type */
- if ( (statbuf.st_mode & S_IFMT) == S_IFDIR ) {
- /* object is a directory */
-
- /* Do NOT perform the request if the directory is "/" */
- if ( !strcmp(obj, "/") ) {
- if ( errmsg != NULL ) {
- sprintf(err_msg, "Cannot remove /");
- *errmsg = err_msg;
- }
- return -1;
- }
-
- /* Open the directory to get access to what is in it */
- if ( (dir = opendir(obj)) == NULL ) {
- if ( rmdir(obj) != 0 ) {
- if ( errmsg != NULL ) {
- sprintf(err_msg, "rmdir(%s) failed; errno=%d: %s",
- obj, errno, SYSERR);
- *errmsg = err_msg;
- }
- return -1;
- } else {
- return 0;
- }
- }
-
- /* Loop through the entries in the directory, removing each one */
- for ( dir_ent = (struct dirent *)readdir(dir);
- dir_ent != NULL;
- dir_ent = (struct dirent *)readdir(dir)) {
-
- /* Don't remove "." or ".." */
- if ( !strcmp(dir_ent->d_name, ".") || !strcmp(dir_ent->d_name, "..") )
- continue;
-
- /* Recursively call this routine to remove the current entry */
- sprintf(dirobj, "%s/%s", obj, dir_ent->d_name);
- if ( rmobj(dirobj, errmsg) != 0 )
- ret_val = -1;
- }
-
- /* Close the directory */
- closedir(dir);
-
- /* If there were problems removing an entry, don't attempt to
- remove the directory itself */
- if ( ret_val == -1 )
- return -1;
-
- /* Get the link count, now that all the entries have been removed */
- if ( lstat(obj, &statbuf) < 0 ) {
- if ( errmsg != NULL ) {
- sprintf(err_msg, "lstat(%s) failed; errno=%d: %s",
- obj, errno, SYSERR);
- *errmsg = err_msg;
- }
- return -1;
- }
-
- /* Remove the directory itself */
- if ( statbuf.st_nlink >= 3 ) {
- /* The directory is linked; unlink() must be used */
- if ( unlink(obj) < 0 ) {
- if ( errmsg != NULL ) {
- sprintf(err_msg, "unlink(%s) failed; errno=%d: %s",
- obj, errno, SYSERR);
- *errmsg = err_msg;
- }
- return -1;
- }
- } else {
- /* The directory is not linked; rmdir() can be used */
- if ( rmdir(obj) < 0 ) {
- if ( errmsg != NULL ) {
- sprintf(err_msg, "rmdir(%s) failed; errno=%d: %s",
- obj, errno, SYSERR);
- *errmsg = err_msg;
- }
- return -1;
- }
- }
- } else {
- /* object is not a directory; just use unlink() */
- if ( unlink(obj) < 0 ) {
- if ( errmsg != NULL ) {
- sprintf(err_msg, "unlink(%s) failed; errno=%d: %s",
- obj, errno, SYSERR);
- *errmsg = err_msg;
- }
- return -1;
- }
- } /* if obj is a directory */
-
- /*
- * Everything must have went ok.
- */
- return 0;
-} /* rmobj() */
diff --git a/winsup/testsuite/libltp/lib/search_path.c b/winsup/testsuite/libltp/lib/search_path.c
deleted file mode 100644
index 775c7b1a6..000000000
--- a/winsup/testsuite/libltp/lib/search_path.c
+++ /dev/null
@@ -1,249 +0,0 @@
-/*
- * (C) COPYRIGHT CRAY RESEARCH, INC.
- * UNPUBLISHED PROPRIETARY INFORMATION.
- * ALL RIGHTS RESERVED.
- */
-/**********************************************************
- *
- * UNICOS Feature Test and Evaluation - Cray Research, Inc.
- *
- * FUNCTION NAME : search_path
- *
- * FUNCTION TITLE : search PATH locations for desired filename
- *
- * SYNOPSIS:
- * int search_path(cmd, res_path, access_mode, fullpath)
- * char *cmd;
- * char *res_path;
- * int access_mode;
- * int fullpath;
- *
- * AUTHOR : Richard Logan
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * DESCRIPTION
- * Search_path will walk through PATH and attempt to find "cmd". If cmd is
- * a full or relative path, it is checked but PATH locations are not scanned.
- * search_path will put the resulting path in res_path. It is assumed
- * that res_path points to a string that is at least PATH_MAX
- * (or MAXPATHLEN on the suns) in size. Access_mode is just as is
- * says, the mode to be used on access to determine if cmd can be found.
- * If fullpath is set, res_path will contain the full path to cmd.
- * If it is not set, res_path may or may not contain the full path to cmd.
- * If fullpath is not set, the path in PATH prepended to cmd is used,
- * which could be a relative path. If fullpath is set, the current
- * directory is prepended to path/cmd before access is called.
- * If cmd is found, search_path will return 0. If cmd cannot be
- * found, 1 is returned. If an error has occurred, -1 is returned
- * and an error mesg is placed in res_path.
- * If the length of path/cmd is larger then PATH_MAX, then that path
- * location is skipped.
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <stdio.h>
-#include <unistd.h>
-#include <string.h>
-#include <stdlib.h>
-#include <sys/errno.h>
-#include <sys/param.h>
-#include <sys/stat.h>
-
-extern int errno;
-
-struct stat stbuf;
-
-#ifndef AS_CMD
-#define AS_CMD 0
-#endif
-
-/*
- * Make sure PATH_MAX is defined. Define it to MAXPATHLEN, if set. Otherwise
- * set it to 1024.
- */
-#ifndef PATH_MAX
-#ifndef MAXPATHLEN
-#define PATH_MAX 1024
-#else /* MAXPATHLEN */
-#define PATH_MAX MAXPATHLEN
-#endif /* MAXPATHLEN */
-#endif /* PATH_MAX */
-
-
-#if AS_CMD
-main(argc, argv)
-int argc;
-char **argv;
-{
- char path[PATH_MAX];
- int ind;
-
- if (argc <= 1 ) {
- printf("missing argument\n");
- exit(1);
- }
-
- for(ind=1;ind < argc; ind++) {
- if ( search_path(argv[ind], path, F_OK, 0) < 0 ) {
- printf("ERROR: %s\n", path);
- }
- else {
- printf("path of %s is %s\n", argv[ind], path);
- }
- }
-
-}
-
-#endif
-
-/*
- */
-int
-search_path(cmd, res_path, access_mode, fullpath)
-const char *cmd; /* The requested filename */
-char *res_path; /* The resulting path or error mesg */
-int access_mode; /* the mode used by access(2) */
-int fullpath; /* if set, cwd will be prepended to all non-full paths */
-{
- char *cp; /* used to scan PATH for directories */
- int ret; /* return value from access */
- char *pathenv;
- char tmppath[PATH_MAX];
- char curpath[PATH_MAX];
- char *path;
- int lastpath;
- int toolong=0;
-
-#if DEBUG
-printf("search_path: cmd = %s, access_mode = %d, fullpath = %d\n", cmd, access_mode, fullpath);
-#endif
-
- /*
- * full or relative path was given
- */
- if ( (cmd[0] == '/') || ( (cp=strchr(cmd, '/')) != NULL )) {
- if ( access(cmd, access_mode) == 0 ) {
-
- if ( cmd[0] != '/' ) { /* relative path */
- if ( getcwd(curpath, PATH_MAX) == NULL ) {
- strcpy(res_path, curpath);
- return -1;
- }
- if ( (strlen(curpath) + strlen(cmd) + 1) > (size_t)PATH_MAX ) {
- sprintf(res_path, "cmd (as relative path) and cwd is longer than %d",
- PATH_MAX);
- return -1;
- }
- sprintf(res_path, "%s/%s", curpath, cmd);
- }
- else
- strcpy(res_path, cmd);
- return 0;
- }
- else {
- sprintf(res_path, "file %s not found", cmd);
- return -1;
- }
- }
-
- /* get the PATH variable */
- if ( (pathenv=getenv("PATH")) == NULL) {
- /* no path to scan, return */
- sprintf(res_path, "Unable to get PATH env. variable");
- return -1;
- }
-
- /*
- * walk through each path in PATH.
- * Each path in PATH is placed in tmppath.
- * pathenv cannot be modified since it will affect PATH.
- * If a signal came in while we have modified the PATH
- * memory, we could create a problem for the caller.
- */
-
- curpath[0]='\0';
-
- cp = pathenv;
- path = pathenv;
- lastpath = 0;
- for (;;) {
-
- if ( lastpath )
- break;
-
- if ( cp != pathenv )
- path = ++cp; /* already set on first iteration */
-
- /* find end of current path */
-
- for (; ((*cp != ':') && (*cp != '\0')); cp++);
-
- /*
- * copy path to tmppath so it can be NULL terminated
- * and so we do not modify path memory.
- */
- strncpy(tmppath, path, (cp-path) );
- tmppath[cp-path]='\0';
-#if DEBUG
-printf("search_path: tmppath = %s\n", tmppath);
-#endif
-
- if ( *cp == '\0' )
- lastpath=1; /* this is the last path entry */
-
- /* Check lengths so not to overflow res_path */
- if ( strlen(tmppath) + strlen(cmd) + 2 > (size_t)PATH_MAX ) {
- toolong++;
- continue;
- }
-
- sprintf(res_path, "%s/%s", tmppath, cmd);
-#if DEBUG
-printf("search_path: res_path = '%s'\n", res_path);
-#endif
-
-
- /* if the path is not full at this point, prepend the current
- * path to get the full path.
- * Note: this could not be wise to do when under a protected
- * directory.
- */
-
- if ( fullpath && res_path[0] != '/' ) { /* not a full path */
- if ( curpath[0] == '\0' ) {
- if ( getcwd(curpath, PATH_MAX) == NULL ) {
- strcpy(res_path, curpath);
- return -1;
- }
- }
- if ( (strlen(curpath) + strlen(res_path) + 2) > (size_t)PATH_MAX ) {
- toolong++;
- continue;
- }
- sprintf(tmppath, "%s/%s", curpath, res_path);
- strcpy(res_path, tmppath);
-#if DEBUG
-printf("search_path: full res_path= '%s'\n", res_path);
-#endif
-
- }
-
-
- if ( (ret=access(res_path, access_mode)) == 0 ) {
-#if DEBUG
-printf("search_path: found res_path = %s\n", res_path);
-#endif
- return 0;
- }
- }
-
- /* return failure */
- if ( toolong )
- sprintf(res_path,
- "Unable to find file, %d path/file strings were too long", toolong);
- else
- strcpy(res_path, "Unable to find file");
- return 1; /* not found */
-}
-
diff --git a/winsup/testsuite/libltp/lib/str_to_bytes.c b/winsup/testsuite/libltp/lib/str_to_bytes.c
deleted file mode 100644
index beecb71b6..000000000
--- a/winsup/testsuite/libltp/lib/str_to_bytes.c
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- */
-#include <stdio.h>
-#include <sys/param.h>
-#include "str_to_bytes.h"
-
-/****************************************************************************
- * str_to_bytes(s)
- *
- * Computes the number of bytes described by string s. s is assumed to be
- * a base 10 positive (ie. >= 0) number followed by an optional single
- * character multiplier. The following multipliers are supported:
- *
- * char mult
- * -----------------
- * b BSIZE or BBSIZE
- * k 1024 bytes
- * K 1024 * sizeof(long)
- * m 2^20 (1048576)
- * M 2^20 (1048576 * sizeof(long)
- * g 2^30 (1073741824)
- * G 2^30 (1073741824) * sizeof(long)
- *
- * for instance, "1k" and "1024" would both cause str_to_bytes to return 1024.
- *
- * Returns -1 if mult is an invalid character, or if the integer portion of
- * s is not a positive integer.
- *
- ****************************************************************************/
-
-#if CRAY
-#define B_MULT BSIZE /* block size */
-#elif sgi
-#define B_MULT BBSIZE /* block size */
-#elif linux
-#define B_MULT DEV_BSIZE /* block size */
-#elif __CYGWIN__
-#include <sys/stat.h>
-#define B_MULT S_BLKSIZE /* block size */
-#endif
-
-
-#define K_MULT 1024 /* Kilo or 2^10 */
-#define M_MULT 1048576 /* Mega or 2^20 */
-#define G_MULT 1073741824 /* Giga or 2^30 */
-#define T_MULT 1099511627776 /* tera or 2^40 */
-
-int
-str_to_bytes(s)
-char *s;
-{
- char mult, junk;
- int nconv;
- float num;
-
- nconv = sscanf(s, "%f%c%c", &num, &mult, &junk);
- if (nconv == 0 || nconv == 3 )
- return -1;
-
- if (nconv == 1)
- return num;
-
- switch (mult) {
- case 'b':
- return (int)(num * (float)B_MULT);
- case 'k':
- return (int)(num * (float)K_MULT);
- case 'K':
- return (int)((num * (float)K_MULT) * sizeof(long));
- case 'm':
- return (int)(num * (float)M_MULT);
- case 'M':
- return (int)((num * (float)M_MULT) * sizeof(long));
- case 'g':
- return (int)(num * (float)G_MULT);
- case 'G':
- return (int)((num * (float)G_MULT) * sizeof(long));
- default:
- return -1;
- }
-}
-
-long
-str_to_lbytes(s)
-char *s;
-{
- char mult, junk;
- long nconv;
- float num;
-
- nconv = sscanf(s, "%f%c%c", &num, &mult, &junk);
- if (nconv == 0 || nconv == 3 )
- return -1;
-
- if (nconv == 1)
- return (long)num;
-
- switch (mult) {
- case 'b':
- return (long)(num * (float)B_MULT);
- case 'k':
- return (long)(num * (float)K_MULT);
- case 'K':
- return (long)((num * (float)K_MULT) * sizeof(long));
- case 'm':
- return (long)(num * (float)M_MULT);
- case 'M':
- return (long)((num * (float)M_MULT) * sizeof(long));
- case 'g':
- return (long)(num * (float)G_MULT);
- case 'G':
- return (long)((num * (float)G_MULT) * sizeof(long));
- default:
- return -1;
- }
-}
-
-/*
- * Force 64 bits number when compiled as 32 IRIX binary.
- * This allows for a number bigger than 2G.
- */
-
-long long
-str_to_llbytes(s)
-char *s;
-{
- char mult, junk;
- long nconv;
- double num;
-
- nconv = sscanf(s, "%lf%c%c", &num, &mult, &junk);
- if (nconv == 0 || nconv == 3 )
- return -1;
-
- if (nconv == 1)
- return (long long)num;
-
- switch (mult) {
- case 'b':
- return (long long)(num * (float)B_MULT);
- case 'k':
- return (long long)(num * (float)K_MULT);
- case 'K':
- return (long long)((num * (float)K_MULT) * sizeof(long long));
- case 'm':
- return (long long)(num * (float)M_MULT);
- case 'M':
- return (long long)((num * (float)M_MULT) * sizeof(long long));
- case 'g':
- return (long long)(num * (float)G_MULT);
- case 'G':
- return (long long)((num * (float)G_MULT) * sizeof(long long));
- default:
- return -1;
- }
-}
-
-#ifdef UNIT_TEST
-
-main(int argc, char **argv)
-{
- int ind;
-
- if (argc == 1 ) {
- fprintf(stderr, "missing str_to_bytes() parameteres\n");
- exit(1);
- }
-
- for (ind=1; ind<argc; ind++) {
-
- printf("str_to_bytes(%s) returned %d\n",
- argv[ind], str_to_bytes(argv[ind]));
-
- printf("str_to_lbytes(%s) returned %ld\n",
- argv[ind], str_to_lbytes(argv[ind]));
-
- printf("str_to_llbytes(%s) returned %lld\n",
- argv[ind], str_to_llbytes(argv[ind]));
- }
-}
-
-#endif
diff --git a/winsup/testsuite/libltp/lib/string_to_tokens.c b/winsup/testsuite/libltp/lib/string_to_tokens.c
deleted file mode 100644
index 6f0d775dd..000000000
--- a/winsup/testsuite/libltp/lib/string_to_tokens.c
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- */
-/**********************************************************
- *
- * OS Testing - Silicon Graphics, Inc.
- *
- * FUNCTION NAME : string_to_tokens
- *
- * FUNCTION TITLE : Break a string into its tokens
- *
- * SYNOPSIS:
- *
- * int string_to_tokens(arg_string, arg_array, array_size, separator)
- * char *arg_string;
- * char *arg_array[];
- * int array_size;
- * char *separator;
- *
- * AUTHOR : Richard Logan
- *
- * DATE : 10/94
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * DESCRIPTION
- * This function parses the string 'arg_string', placing pointers to
- * the 'separator' separated tokens into the elements of 'arg_array'.
- * The array is terminated with a null pointer.
- * 'arg_array' must contains at least 'array_size' elements.
- * Only the first 'array_size' minus one tokens will be placed into
- * 'arg_array'. If there are more than 'array_size'-1 tokens, the rest are
- * ignored by this routine.
- *
- * RETURN VALUE
- * This function returns the number of 'separator' separated tokens that
- * were found in 'arg_string'.
- * If 'arg_array' or 'separator' is NULL or 'array_size' is less than 2, -1 is returned.
- *
- * WARNING
- * This function uses strtok() to parse 'arg_string', and thus
- * physically alters 'arg_string' by placing null characters where the
- * separators originally were.
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-#include <stdio.h>
-#include <string.h> /* for string functions */
-#include "string_to_tokens.h"
-
-int
-string_to_tokens(char *arg_string, char *arg_array[], int array_size, char *separator)
-{
- int num_toks = 0; /* number of tokens found */
- char *strtok();
-
- if ( arg_array == NULL || array_size <= 1 || separator == NULL )
- return -1;
-
- /*
- * Use strtok() to parse 'arg_string', placing pointers to the
- * individual tokens into the elements of 'arg_array'.
- */
- if ( (arg_array[num_toks] = strtok(arg_string, separator)) == NULL ) {
- return 0;
- }
-
- for (num_toks=1;num_toks<array_size; num_toks++) {
- if ( (arg_array[num_toks] = strtok(NULL, separator)) == NULL )
- break;
- }
-
- if ( num_toks == array_size )
- arg_array[num_toks] = NULL;
-
- /*
- * Return the number of tokens that were found in 'arg_string'.
- */
- return(num_toks);
-
-} /* end of string_to_tokens */
diff --git a/winsup/testsuite/libltp/lib/tst_res.c b/winsup/testsuite/libltp/lib/tst_res.c
deleted file mode 100644
index 99767ec9b..000000000
--- a/winsup/testsuite/libltp/lib/tst_res.c
+++ /dev/null
@@ -1,960 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- */
-
-
-/* $Id$ */
-
-/**********************************************************
- *
- * OS Testing - Silicon Graphics, Inc.
- *
- * FUNCTION NAME :
- * tst_res() - Print result message (include file contents)
- * tst_resm() - Print result message
- * tst_brk() - Print result message (include file contents)
- * and break remaining test cases
- * tst_brkm() - Print result message and break remaining test
- * cases
- * tst_brkloop() - Print result message (include file contents)
- * and break test cases remaining in current loop
- * tst_brkloopm() - Print result message and break test case
- * remaining in current loop
- * tst_flush() - Print any messages pending because of
- * CONDENSE mode, and flush output stream
- * tst_exit() - Exit test with a meaningful exit value.
- * tst_environ() - Keep results coming to original stdout
- *
- * FUNCTION TITLE : Standard automated test result reporting mechanism
- *
- * SYNOPSIS:
- * #include "test.h"
- *
- * void tst_res(ttype, fname, tmesg [,arg]...)
- * int ttype;
- * char *fname;
- * char *tmesg;
- *
- * void tst_resm(ttype, tmesg [,arg]...)
- * int ttype;
- * char *tmesg;
- *
- * void tst_brk(ttype, fname, cleanup, tmesg, [,argv]...)
- * int ttype;
- * char *fname;
- * void (*cleanup)();
- * char *tmesg;
- *
- * void tst_brkm(ttype, cleanup, tmesg [,arg]...)
- * int ttype;
- * void (*cleanup)();
- * char *tmesg;
- *
- * void tst_brkloop(ttype, fname, cleanup, char *tmesg, [,argv]...)
- * int ttype;
- * char *fname;
- * void (*cleanup)();
- * char *tmesg;
- *
- * void tst_brkloopm(ttype, cleanup, tmesg [,arg]...)
- * int ttype;
- * void (*cleanup)();
- * char *tmesg;
- *
- * void tst_flush()
- *
- * void tst_exit()
- *
- * int tst_environ()
- *
- * AUTHOR : Kent Rogers (from Dave Fenner's original)
- *
- * CO-PILOT : Rich Logan
- *
- * DATE STARTED : 05/01/90 (rewritten 1/96)
- *
- * DESCRIPTION
- * See the man page(s).
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-#include <errno.h>
-#include <stdarg.h> /* for varargs stuff */
-#include "test.h" /* for output display mode & result type */
- /* defines */
-
-/*
- * Define some useful macros.
- */
-#define VERBOSE 1 /* flag values for the T_mode variable */
-#define CONDENSE 2
-#define NOPASS 3
-#define DISCARD 4
-
-#define MAXMESG 80 /* max length of internal messages */
-#define USERMESG 2048 /* max length of user message */
-#define TRUE 1
-#define FALSE 0
-
-/*
- * EXPAND_VAR_ARGS - Expand the variable portion (arg_fmt) of a result
- * message into the specified string.
- */
-#define EXPAND_VAR_ARGS(arg_fmt, str) { \
- va_list ap; /* varargs mechanism */ \
- \
- if ( arg_fmt != NULL ) { \
- if ( Expand_varargs == TRUE ) { \
- va_start(ap, arg_fmt); \
- vsprintf(str, arg_fmt, ap); \
- va_end(ap); \
- Expand_varargs = FALSE; \
- } else { \
- strcpy(str, arg_fmt); \
- } \
- } else { \
- str[0] = '\0'; \
- } \
-} /* EXPAND_VAR_ARGS() */
-
-/*
- * Define local function prototypes.
- */
-static void check_env();
-static void tst_condense(int tnum, int ttype, char *tmesg);
-static void tst_print(char *tcid, int tnum, int trange, int ttype, const char *tmesg);
-static void cat_file(const char *filename);
-
-
-/*
- * Define some static/global variables.
- */
-static FILE *T_out = NULL; /* tst_res() output file descriptor */
-static const char *File; /* file whose contents is part of result */
-static int T_exitval = 0; /* exit value used by tst_exit() */
-static int T_mode = VERBOSE; /* flag indicating print mode: VERBOSE, */
- /* CONDENSE, NOPASS, DISCARD */
-
-static int Expand_varargs = TRUE; /* if TRUE, expand varargs stuff */
-static char Warn_mesg[MAXMESG]; /* holds warning messages */
-
-/*
- * These are used for condensing output when NOT in verbose mode.
- */
-static int Buffered = FALSE; /* TRUE if condensed output is currently */
- /* buffered (i.e. not yet printed) */
-static char *Last_tcid; /* previous test case id */
-static int Last_num; /* previous test case number */
-static int Last_type; /* previous test result type */
-static char *Last_mesg; /* previous test result message */
-
-
-/*
- * These globals may be externed by the test.
- */
-int Tst_count = 0; /* current count of test cases executed; NOTE: */
- /* Tst_count may be externed by other programs */
-int Tst_lptotal = 0; /* tst_brkloop() external */
-int Tst_lpstart = 0; /* tst_brkloop() external */
-int Tst_range = 1; /* for specifying multiple results */
-int Tst_nobuf = 1; /* this is a no-op; buffering is never done, but */
- /* this will stay for compatibility reasons */
-
-/*
- * These globals must be defined in the test.
- */
-extern char *TCID; /* Test case identifier from the test source */
-extern int TST_TOTAL; /* Total number of test cases from the test */
- /* source */
-
-/*
- * This global is used by the temp. dir. maintenance functions,
- * tst_tmpdir()/tst_rmdir(), tst_wildcard()/tst_tr_rmdir(). It is the
- * name of the directory created (if any). It is defined here, so that
- * it only has to be declared once and can then be referenced from more
- * than one module. Also, since the temp. dir. maintenance functions
- * rely on the tst_res.c package this seemed like a reasonable place.
- */
-char *TESTDIR = NULL;
-
-/*
- * tst_res() - Main result reporting function. Handle test information
- * appropriately depending on output display mode. Call
- * tst_condense() or tst_print() to actually print results.
- * All result functions (tst_resm(), tst_brk(), etc.)
- * eventually get here to print the results.
- */
-void
-tst_res(int ttype, const char *fname, const char *arg_fmt, ...)
-{
- int i;
- char tmesg[USERMESG]; /* expanded message */
-
-#if DEBUG
- printf("IN tst_res; Tst_count = %d; Tst_range = %d\n",
- Tst_count, Tst_range); fflush(stdout);
-#endif
-
- /*
- * Expand the arg_fmt string into tmesg, if necessary.
- */
- EXPAND_VAR_ARGS(arg_fmt, tmesg);
-
- /*
- * Save the test result type by ORing ttype into the current exit
- * value (used by tst_exit()).
- */
- T_exitval |= ttype;
-
- /*
- * Unless T_out has already been set by tst_environ(), make tst_res()
- * output go to standard output.
- */
- if ( T_out == NULL )
- T_out = stdout;
-
- /*
- * Check TOUTPUT environment variable (if first time) and set T_mode
- * flag.
- */
- check_env();
-
- /*
- * A negative or NULL range is invalid.
- */
- if ( Tst_range <= 0 ) {
- Tst_range = 1;
- tst_print(TCID, 0, 1, TWARN,
- "tst_res(): Tst_range must be positive");
- }
-
- /*
- * If a filename was specified, set 'File' if it exists.
- */
- if ( fname != NULL && access(fname, F_OK) == 0 )
- File = fname;
-
- /*
- * Set the test case number and print the results, depending on the
- * display type.
- */
- if ( ttype == TWARN || ttype == TINFO ) {
- /*
- * Handle WARN and INFO results (test case number is 0).
- */
- if ( Tst_range > 1 ) {
- tst_print(TCID, 0, 1, TWARN,
- "tst_res(): Range not valid for TINFO or TWARN types");
- }
- tst_print(TCID, 0, 1, ttype, tmesg);
- } else {
- /*
- * Handle all other types of results other than WARN and INFO.
- */
- if ( Tst_count < 0 )
- tst_print(TCID, 0, 1, TWARN,
- "tst_res(): Tst_count < 0 is not valid");
-
- /*
- * Process each display type.
- */
- switch ( T_mode ) {
- case DISCARD:
- /* do not print any results */
- break;
-
- case NOPASS: /* passing result types are filtered by tst_print() */
- case CONDENSE:
- tst_condense(Tst_count + 1, ttype, tmesg);
- break;
-
- default: /* VERBOSE */
- for ( i = 1 ; i <= Tst_range ; i++ )
- tst_print(TCID, Tst_count + i, Tst_range, ttype, tmesg);
- break;
- } /* end switch() */
-
- /*
- * Increment Tst_count.
- */
- Tst_count += Tst_range;
- } /* if ( ttype == TWARN || ttype == TINFO ) */
-
- /*
- * Reset some values.
- */
- Tst_range = 1;
- Expand_varargs = TRUE;
-} /* tst_res() */
-
-
-/*
- * tst_condense() - Handle test cases in CONDENSE or NOPASS mode (i.e.
- * buffer the current result and print the last result
- * if different than the current). If a file was
- * specified, print the current result and do not
- * buffer it.
- */
-static void
-tst_condense(int tnum, int ttype, char *tmesg)
-{
- const char *file;
-
-#if DEBUG
- printf("IN tst_condense: tcid = %s, tnum = %d, ttype = %d, tmesg = %s\n",
- TCID, tnum, ttype, tmesg);
- fflush(stdout);
-#endif
-
- /*
- * If this result is the same as the previous result, return.
- */
- if ( Buffered == TRUE ) {
- if ( strcmp(Last_tcid, TCID) == 0 && Last_type == ttype &&
- strcmp(Last_mesg, tmesg) == 0 && File == NULL )
- return;
-
- /*
- * This result is different from the previous result. First,
- * print the previous result.
- */
- file = File;
- File = NULL;
- tst_print(Last_tcid, Last_num, tnum - Last_num, Last_type,
- Last_mesg);
- free(Last_tcid);
- free(Last_mesg);
- File = file;
- } /* if ( Buffered == TRUE ) */
-
- /*
- * If a file was specified, print the current result since we have no
- * way of retaining the file contents for comparing with future
- * results. Otherwise, buffer the current result info for next time.
- */
- if ( File != NULL ) {
- tst_print(TCID, tnum, Tst_range, ttype, tmesg);
- Buffered = FALSE;
- } else {
- Last_tcid = (char *)malloc(strlen(TCID) + 1);
- strcpy(Last_tcid, TCID);
- Last_num = tnum;
- Last_type = ttype;
- Last_mesg = (char *)malloc(strlen(tmesg) + 1);
- strcpy(Last_mesg, tmesg);
- Buffered = TRUE;
- }
-} /* tst_condense() */
-
-
-/*
- * tst_flush() - Print any messages pending because of CONDENSE mode,
- * and flush T_out.
- */
-void
-tst_flush()
-{
-#if DEBUG
- printf("IN tst_flush\n");
- fflush(stdout);
-#endif
-
- /*
- * Print out last line if in CONDENSE or NOPASS mode.
- */
- if ( Buffered == TRUE && (T_mode == CONDENSE || T_mode == NOPASS) ) {
- tst_print(Last_tcid, Last_num, Tst_count - Last_num + 1,
- Last_type, Last_mesg);
- Buffered = FALSE;
- }
- fflush(T_out);
-} /* tst_flush() */
-
-
-/*
- * tst_print() - Actually print a line or range of lines to the output
- * stream.
- */
-static void
-tst_print(char *tcid, int tnum, int trange, int ttype, const char *tmesg)
-{
- char type[5];
-
-#if DEBUG
- printf("IN tst_print: tnum = %d, trange = %d, ttype = %d, tmesg = %s\n",
- tnum, trange, ttype, tmesg);
- fflush(stdout);
-#endif
-
- /*
- * Save the test result type by ORing ttype into the current exit
- * value (used by tst_exit()). This is already done in tst_res(), but
- * is also done here to catch internal warnings. For internal warnings,
- * tst_print() is called directly with a case of TWARN.
- */
- T_exitval |= ttype;
-
- /*
- * If output mode is DISCARD, or if the output mode is NOPASS and
- * this result is not one of FAIL, BROK, or WARN, just return. This
- * check is necessary even though we check for DISCARD mode inside of
- * tst_res(), since occasionally we get to this point without going
- * through tst_res() (e.g. internal TWARN messages).
- */
- if ( T_mode == DISCARD || (T_mode == NOPASS && ttype != TFAIL &&
- ttype != TBROK && ttype != TWARN) )
- return;
-
- /*
- * Fill in the type string according to ttype.
- */
- switch ( ttype ) {
- case TPASS:
- strcpy(type, "PASS");
- break;
- case TFAIL:
- strcpy(type, "FAIL");
- break;
- case TBROK:
- strcpy(type, "BROK");
- break;
- case TRETR:
- strcpy(type, "RETR");
- break;
- case TCONF:
- strcpy(type, "CONF");
- break;
- case TWARN:
- strcpy(type, "WARN");
- break;
- case TINFO:
- strcpy(type, "INFO");
- break;
- default:
- strcpy(type, "????");
- break;
- } /* switch ( ttype ) */
-
- /*
- * Build the result line and print it.
- */
- if ( T_mode == VERBOSE ) {
- fprintf(T_out, "%-8s %4d %s : %s\n", tcid, tnum, type, tmesg);
- } else {
- /* condense results if a range is specified */
- if ( trange > 1 )
- fprintf(T_out, "%-8s %4d-%-4d %s : %s\n",
- tcid, tnum, tnum + trange - 1, type, tmesg);
- else
- fprintf(T_out, "%-8s %4d %s : %s\n",
- tcid, tnum, type, tmesg);
- }
-
- /*
- * If tst_res() was called with a file, append file contents to the
- * end of last printed result.
- */
- if ( File != NULL )
- cat_file(File);
- File = NULL;
-} /* tst_print() */
-
-
-/*
- * check_env() - Check the value of the environment variable TOUTPUT and
- * set the global variable T_mode. The TOUTPUT environment
- * variable should be set to "VERBOSE", "CONDENSE",
- * "NOPASS", or "DISCARD". If TOUTPUT does not exist or
- * is not set to a valid value, the default is "VERBOSE".
- */
-static void
-check_env()
-{
- static int first_time = 1;
- char *value; /* value of TOUTPUT environment variable */
-
-#if DEBUG
- printf("IN check_env\n");
- fflush(stdout);
-#endif
-
- if ( !first_time )
- return;
-
- first_time = 0;
-
- if ( (value = getenv(TOUTPUT)) == NULL ) {
- /* TOUTPUT not defined, use default */
- T_mode = VERBOSE;
- } else if ( strcmp(value, TOUT_CONDENSE_S) == 0 ) {
- T_mode = CONDENSE;
- } else if ( strcmp(value, TOUT_NOPASS_S) == 0 ) {
- T_mode = NOPASS;
- } else if ( strcmp(value, TOUT_DISCARD_S) == 0 ) {
- T_mode = DISCARD;
- } else {
- /* default */
- T_mode = VERBOSE;
- }
-
- return;
-} /* check_env() */
-
-
-/*
- * tst_exit() - Call exit() with the value T_exitval, set up by
- * tst_res(). T_exitval has a bit set for most of the
- * result types that were seen (including TPASS, TFAIL,
- * TBROK, TWARN, TCONF). Also, print the last result (if
- * necessary) before exiting.
- */
-void
-tst_exit()
-{
-#if DEBUG
- printf("IN tst_exit\n"); fflush(stdout);
- fflush(stdout);
-#endif
-
- /*
- * Call tst_flush() flush any ouput in the buffer or the last
- * result not printed because of CONDENSE mode.
- */
- tst_flush();
-
- /*
- * Mask out TRETR, TINFO, and TCONF results from the exit status.
- */
- exit(T_exitval & ~(TRETR | TINFO | TCONF));
-} /* tst_exit() */
-
-
-/*
- * tst_environ() - Preserve the tst_res() output location, despite any
- * changes to stdout.
- */
-int
-tst_environ()
-{
- FILE *fdopen();
-
- if ( (T_out = fdopen(dup(fileno(stdout)), "w")) == NULL )
- return(-1);
- else
- return(0);
-} /* tst_environ() */
-
-
-/*
- * tst_brk() - Fail or break current test case, and break the remaining
- * tests cases.
- */
-void
-tst_brk(int ttype, char *fname, void (*func)(), const char *arg_fmt, ...)
-{
- char tmesg[USERMESG]; /* expanded message */
-
-#if DEBUG
- printf("IN tst_brk\n"); fflush(stdout);
- fflush(stdout);
-#endif
-
- /*
- * Expand the arg_fmt string into tmesg, if necessary.
- */
- EXPAND_VAR_ARGS(arg_fmt, tmesg);
-
- /*
- * Only FAIL, BROK, CONF, and RETR are supported by tst_brk().
- */
- if ( ttype != TFAIL && ttype != TBROK && ttype != TCONF &&
- ttype != TRETR ) {
- sprintf(Warn_mesg, "tst_brk(): Invalid Type: %d. Using TBROK",
- ttype);
- tst_print(TCID, 0, 1, TWARN, Warn_mesg);
- ttype = TBROK;
- }
-
- /*
- * Print the first result, if necessary.
- */
- if ( Tst_count < TST_TOTAL )
- tst_res(ttype, fname, tmesg);
-
- /*
- * Determine the number of results left to report.
- */
- Tst_range = TST_TOTAL - Tst_count;
-
- /*
- * Print the rest of the results, if necessary.
- */
- if ( Tst_range > 0 ) {
- if ( ttype == TCONF )
- tst_res(ttype, NULL,
- "Remaining cases not appropriate for configuration");
- else if ( ttype == TRETR )
- tst_res(ttype, NULL, "Remaining cases retired");
- else
- tst_res(TBROK, NULL, "Remaining cases broken");
- } else {
- Tst_range = 1;
- Expand_varargs = TRUE;
- } /* if ( Tst_range > 0 ) */
-
- /*
- * If no cleanup function was specified, just return to the caller.
- * Otherwise call the specified function. If specified function
- * returns, call tst_exit().
- */
- if ( func != NULL ) {
- (*func)();
- tst_exit();
- }
-
- return;
-} /* tst_brk() */
-
-
-/*
- * tst_brkloop() - Fail or break current test case, and break the
- * remaining test cases within test case loop.
- */
-void
-tst_brkloop(int ttype, char *fname, void (*func)(), const char *arg_fmt, ...)
-{
- char tmesg[USERMESG]; /* expanded message */
-
-#if DEBUG
- printf("IN tst_brkloop\n"); fflush(stdout);
- fflush(stdout);
-#endif
-
- /*
- * Expand the arg_fmt string into tmesg.
- */
- EXPAND_VAR_ARGS(arg_fmt, tmesg);
-
- /*
- * Verify that Tst_lpstart & Tst_lptotal are valid.
- */
- if ( Tst_lpstart < 0 || Tst_lptotal < 0 ) {
- tst_print(TCID, 0, 1, TWARN,
- "tst_brkloop(): Tst_lpstart & Tst_lptotal must both be assigned non-negative values");
- Expand_varargs = TRUE;
- return;
- }
-
- /*
- * Only FAIL, BROK, CONF, and RETR are supported by tst_brkloop().
- */
- if ( ttype != TFAIL && ttype != TBROK && ttype != TCONF &&
- ttype != TRETR ) {
- sprintf(Warn_mesg,
- "tst_brkloop(): Invalid Type: %d. Using TBROK",
- ttype);
- tst_print(TCID, 0, 1, TWARN, Warn_mesg);
- ttype = TBROK;
- }
-
- /*
- * Print the first result, if necessary.
- */
- if ( Tst_count < Tst_lpstart + Tst_lptotal )
- tst_res(ttype, fname, tmesg);
-
- /*
- * Determine the number of results left to report.
- */
- Tst_range = Tst_lptotal + Tst_lpstart - Tst_count;
-
- /*
- * Print the rest of the results, if necessary.
- */
- if ( Tst_range > 0 ) {
- if ( ttype == TCONF )
- tst_res(ttype, NULL,
- "Remaining cases in loop not appropriate for configuration");
- else if ( ttype == TRETR )
- tst_res(ttype, NULL, "Remaining cases in loop retired");
- else
- tst_res(TBROK, NULL, "Remaining cases in loop broken");
- } else {
- Tst_range = 1;
- Expand_varargs = TRUE;
- } /* if ( Tst_range > 0 ) */
-
- /*
- * If a cleanup function was specified, call it.
- */
- if ( func != NULL )
- (*func)();
-} /* tst_brkloop() */
-
-
-/*
- * tst_resm() - Interface to tst_res(), with no filename.
- */
-void
-tst_resm(int ttype, const char *arg_fmt, ...)
-{
- char tmesg[USERMESG]; /* expanded message */
-
-#if DEBUG
- printf("IN tst_resm\n"); fflush(stdout);
- fflush(stdout);
-#endif
-
- /*
- * Expand the arg_fmt string into tmesg.
- */
- EXPAND_VAR_ARGS(arg_fmt, tmesg);
-
- /*
- * Call tst_res with a null filename argument.
- */
- tst_res(ttype, NULL, tmesg);
-} /* tst_resm() */
-
-
-/*
- * tst_brkm() - Interface to tst_brk(), with no filename.
- */
-void
-tst_brkm(int ttype, void (*func)(), const char *arg_fmt, ...)
-{
- char tmesg[USERMESG]; /* expanded message */
-
-#if DEBUG
- printf("IN tst_brkm\n"); fflush(stdout);
- fflush(stdout);
-#endif
-
- /*
- * Expand the arg_fmt string into tmesg.
- */
- EXPAND_VAR_ARGS(arg_fmt, tmesg);
-
- /*
- * Call tst_brk with a null filename argument.
- */
- tst_brk(ttype, NULL, func, tmesg);
-} /* tst_brkm() */
-
-
-/*
- * tst_brkloopm() - Interface to tst_brkloop(), with no filename.
- */
-void
-tst_brkloopm(int ttype, void (*func)(), const char *arg_fmt, ...)
-{
- char tmesg[USERMESG]; /* expanded message */
-
-#if DEBUG
- printf("IN tst_brkloopm\n");
- fflush(stdout);
-#endif
-
- /*
- * Expand the arg_fmt string into tmesg.
- */
- EXPAND_VAR_ARGS(arg_fmt, tmesg);
-
- /*
- * Call tst_brkloop with a null filename argument.
- */
- tst_brkloop(ttype, NULL, func, tmesg);
-} /* tst_brkloopm() */
-
-
-/*
- * cat_file() - Print the contents of a file to standard out.
- */
-static void
-cat_file(const char *filename)
-{
- FILE *fp; /* file pointer */
- int b_read; /* number of bytes read with read() */
- int b_written; /* number of bytes written with write() */
- char buffer[BUFSIZ]; /* read/write buffer; BUFSIZ defined in */
- /* stdio.h */
-
-#if DEBUG
- printf("IN cat_file\n"); fflush(stdout);
-#endif
-
- /*
- * Open the file for reading.
- */
- if ( (fp = fopen(filename, "r")) == NULL ) {
- sprintf(Warn_mesg,
- "tst_res(): fopen(%s, \"r\") failed; errno = %d: %s",
- filename, errno, strerror(errno));
- tst_print(TCID, 0, 1, TWARN, Warn_mesg);
- return;
- } /* if ( fopen(filename, "r") == -1 ) */
-
- /*
- * While something to read, continue to read blocks.
- * From fread(3) man page:
- * If an error occurs, or the end-of-file is reached, the return
- * value is zero.
- */
- errno = 0;
- while ( (b_read = fread((void *)buffer, 1, BUFSIZ, fp)) != (size_t)0 ) {
- /*
- * Write what was read to the result output stream.
- */
- if ( (b_written = fwrite((void *)buffer, 1, b_read, T_out)) !=
- b_read ) {
- sprintf(Warn_mesg,
- "tst_res(): While trying to cat \"%s\", fwrite() wrote only %d of %d bytes",
- filename, b_written, b_read);
- tst_print(TCID, 0, 1, TWARN, Warn_mesg);
- break;
- } /* if ( b_written != b_read ) */
- } /* while ( fread() != 0 ) */
-
- /*
- * Check for an fread() error.
- */
- if ( !feof(fp) ) {
- sprintf(Warn_mesg,
- "tst_res(): While trying to cat \"%s\", fread() failed, errno = %d: %s",
- filename, errno, strerror(errno));
- tst_print(TCID, 0, 1, TWARN, Warn_mesg);
- } /* if ( !feof() ) */
-
- /*
- * Close the file.
- */
- if ( fclose(fp) == EOF ) {
- sprintf(Warn_mesg,
- "tst_res(): While trying to cat \"%s\", fclose() failed, errno = %d: %s",
- filename, errno, strerror(errno));
- tst_print(TCID, 0, 1, TWARN, Warn_mesg);
- } /* if ( fclose(fp) == EOF ) */
-} /* cat_file() */
-
-
-
-#ifdef UNIT_TEST
-/****************************************************************************
- * Unit test code: Takes input from stdin and can make the following
- * calls: tst_res(), tst_resm(), tst_brk(), tst_brkm(),
- * tst_flush_buf(), tst_exit().
- ****************************************************************************/
-int TST_TOTAL = 10;
-char *TCID = "TESTTCID";
-
-#define RES "tst_res.c UNIT TEST message; ttype = %d; contents of \"%s\":"
-#define RESM "tst_res.c UNIT TEST message; ttype = %d"
-
-main()
-{
- int ttype;
- int range;
- char *chrptr;
- char chr;
- char fname[MAXMESG];
-
- printf("UNIT TEST of tst_res.c. Options for ttype:\n\
- -1 : call tst_exit()\n\
- -2 : call tst_flush()\n\
- -3 : call tst_brk()\n\
- -4 : call tst_brkloop()\n\
- -5 : call tst_res() with a range\n\
- 0 : call tst_res(TPASS, ...)\n\
- 1 : call tst_res(TFAIL, ...)\n\
- 2 : call tst_res(TBROK, ...)\n\
- 4 : call tst_res(TWARN, ...)\n\
- 8 : call tst_res(TRETR, ...)\n\
- 16 : call tst_res(TINFO, ...)\n\
- 32 : call tst_res(TCONF, ...)\n\n");
-
- while ( 1 ) {
- printf("Enter ttype (-5,-4,-3,-2,-1,0,1,2,4,8,16,32): ");
- (void) scanf("%d%c", &ttype, &chr);
-
-
- switch ( ttype ) {
- case -1:
- tst_exit();
- break;
-
- case -2:
- tst_flush();
- break;
-
- case -3:
- printf("Enter the current type (1=FAIL, 2=BROK, 8=RETR, 32=CONF): ");
- (void) scanf("%d%c", &ttype, &chr);
- printf("Enter file name (<cr> for none): ");
- gets(fname);
- if ( strcmp(fname, "") == 0 )
- tst_brkm(ttype, tst_exit, RESM, ttype);
- else
- tst_brk(ttype, fname, tst_exit, RES, ttype, fname);
- break;
-
- case -4:
- printf("Enter the size of the loop: ");
- (void) scanf("%d%c", &range, &chr);
- Tst_lpstart = Tst_count;
- Tst_lptotal = range;
- printf("Enter the current type (1=FAIL, 2=BROK, 8=RETR, 32=CONF): ");
- (void) scanf("%d%c", &ttype, &chr);
- printf("Enter file name (<cr> for none): ");
- gets(fname);
- if ( strcmp(fname, "") == 0 )
- tst_brkloopm(ttype, NULL, RESM, ttype);
- else
- tst_brkloop(ttype, fname, NULL, RES, ttype, fname);
- break;
-
- case -5:
- printf("Enter the size of the range: ");
- (void) scanf("%d%c", &Tst_range, &chr);
- printf("Enter the current type (0,1,2,4,8,16,32): ");
- (void) scanf("%d%c", &ttype, &chr);
- /* fall through to tst_res() call */
-
- default:
- printf("Enter file name (<cr> for none): ");
- gets(fname);
- if ( strcmp(fname, "") == 0 )
- tst_resm(ttype, RESM, ttype);
- else
- tst_res(ttype, fname, RES, ttype, fname);
- break;
- } /* switch() */
- } /* while() */
-}
-#endif /* UNIT_TEST */
diff --git a/winsup/testsuite/libltp/lib/tst_sig.c b/winsup/testsuite/libltp/lib/tst_sig.c
deleted file mode 100644
index f5b64b666..000000000
--- a/winsup/testsuite/libltp/lib/tst_sig.c
+++ /dev/null
@@ -1,220 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- */
-
-/* $Id$ */
-
-/*****************************************************************************
- OS Testing - Silicon Graphics, Inc.
-
- FUNCTION IDENTIFIER : tst_sig Set up for unexpected signals.
-
- AUTHOR : David D. Fenner
-
- CO-PILOT : Bill Roske
-
- DATE STARTED : 06/06/90
-
- This module may be linked with c-modules requiring unexpected
- signal handling. The parameters to tst_sig are as follows:
-
- fork_flag - set to FORK or NOFORK depending upon whether the
- calling program executes a fork() system call. It
- is normally the case that the calling program treats
- SIGCLD as an expected signal if fork() is being used.
-
- handler - a pointer to the unexpected signal handler to
- be executed after an unexpected signal has been
- detected. If handler is set to DEF_HANDLER, a
- default handler is used. This routine should be
- declared as function returning an int.
-
- cleanup - a pointer to a cleanup routine to be executed
- by the unexpected signal handler before tst_exit is
- called. This parameter is set to NULL if no cleanup
- routine is required. An external variable, T_cleanup
- is set so that other user-defined handlers have
- access to the cleanup routine. This routine should be
- declared as returning type void.
-
-***************************************************************************/
-
-#ifndef CRAY
-#define _BSD_SIGNALS 1 /* Specify that we are using BSD signal interface */
-#endif
-
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-
-#define MAXMESG 150 /* size of mesg string sent to tst_res */
-
-void (*T_cleanup)(); /* pointer to cleanup function */
-
-extern int errno;
-static void def_handler(); /* default signal handler */
-
-/****************************************************************************
- * tst_sig() : set-up to catch unexpected signals. fork_flag is set to NOFORK
- * if SIGCLD is to be an "unexpected signal", otherwise it is set to
- * FORK. cleanup points to a cleanup routine to be executed before
- * tst_exit is called (cleanup is set to NULL if no cleanup is desired).
- * handler is a pointer to the signal handling routine (if handler is
- * set to NULL, a default handler is used).
- ***************************************************************************/
-
-void
-tst_sig(int fork_flag, void (*handler)(), void (*cleanup)())
-{
- char mesg[MAXMESG]; /* message buffer for tst_res */
- int sig;
-
- /*
- * save T_cleanup and handler function pointers
- */
- T_cleanup = cleanup; /* used by default handler */
-
- if (handler == DEF_HANDLER) {
- /* use default handler */
- handler = def_handler;
- }
-
- /*
- * now loop through all signals and set the handlers
- */
-
- for (sig = 1; sig < NSIG; sig++) {
- /*
- * SIGKILL is never unexpected.
- * SIGCLD is only unexpected when
- * no forking is being done.
- * SIGINFO is used for file quotas and should be expected
- */
-
- switch (sig) {
- case SIGKILL:
- case SIGSTOP:
- case SIGCONT:
-#ifdef CRAY
- case SIGINFO:
- case SIGRECOVERY: /* allow chkpnt/restart */
-#endif /* CRAY */
-
-#ifdef SIGSWAP
- case SIGSWAP:
-#endif /* SIGSWAP */
-
-#ifdef SIGCKPT
- case SIGCKPT:
-#endif
-#ifdef SIGRESTART
- case SIGRESTART:
-#endif
- /*
- * pthread-private signals SIGPTINTR and SIGPTRESCHED.
- * Setting a handler for these signals is disallowed when
- * the binary is linked against libpthread.
- */
-#ifdef SIGPTINTR
- case SIGPTINTR:
-#endif /* SIGPTINTR */
-#ifdef SIGPTRESCHED
- case SIGPTRESCHED:
-#endif /* SIGPTRESCHED */
-#ifdef __CYGWIN__
- case SIGILL:
- case SIGTRAP:
- case SIGABRT:
- case SIGEMT:
- case SIGFPE:
- case SIGBUS:
-#endif
- break;
-
- case SIGCLD:
- if ( fork_flag == FORK )
- continue;
-
- default:
- if (signal(sig, handler) == SIG_ERR) {
- (void) sprintf(mesg,
- "signal() failed for signal %d. error:%d %s.",
- sig, errno, strerror(errno));
- tst_resm(TWARN, mesg);
- }
- break;
- }
-#ifdef __sgi
- /* On irix (07/96), signal() fails when signo is 33 or higher */
- if ( sig+1 >= 33 )
- break;
-#endif /* __sgi */
-
- } /* endfor */
-}
-
-
-
-/****************************************************************************
- * def_handler() : default signal handler that is invoked when
- * an unexpected signal is caught.
- ***************************************************************************/
-
-static void
-def_handler(int sig)
-{
- char mesg[MAXMESG]; /* holds tst_res message */
-
- /* first reset trap for this signal (except SIGCLD - its weird) */
- if ((sig != SIGCLD) && (sig != SIGSTOP) && (sig != SIGCONT)) {
- if (signal(sig, def_handler) == SIG_ERR) {
- (void) sprintf(mesg,
- "def_handler: signal() failed for signal %d. error:%d %s.",
- sig, errno, strerror(errno));
- tst_resm(TWARN, mesg);
- }
- }
-
- (void) sprintf(mesg, "Unexpected signal %d received.", sig);
-
- /*
- * Break remaining test cases, do any cleanup, then exit
- */
- tst_brkm(TBROK, 0, mesg);
-
- /* now cleanup and exit */
- if (T_cleanup) {
- (*T_cleanup)();
- }
-
- tst_exit();
-}
diff --git a/winsup/testsuite/libltp/lib/tst_tmpdir.c b/winsup/testsuite/libltp/lib/tst_tmpdir.c
deleted file mode 100644
index cd9d9c8b8..000000000
--- a/winsup/testsuite/libltp/lib/tst_tmpdir.c
+++ /dev/null
@@ -1,347 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- */
-
-/* $Id$ */
-
-/**********************************************************
- *
- * OS Testing - Silicon Graphics, Inc.
- *
- * FUNCTION NAME : tst_tmpdir, tst_rmdir
- *
- * FUNCTION TITLE : Create/remove a testing temp dir
- *
- * SYNOPSIS:
- * void tst_tmpdir();
- * void tst_rmdir();
- *
- * AUTHOR : Dave Fenner
- *
- * INITIAL RELEASE : UNICOS 8.0
- *
- * DESCRIPTION
- * tst_tmpdir() is used to create a unique, temporary testing
- * directory, and make it the current working directory.
- * tst_rmdir() is used to remove the directory created by
- * tst_tmpdir().
- *
- * Setting the env variable "TDIRECTORY" will override the creation
- * of a new temp dir. The directory specified by TDIRECTORY will
- * be used as the temporary directory, and no removal will be done
- * in tst_rmdir().
- *
- * RETURN VALUE
- * Neither tst_tmpdir() or tst_rmdir() has a return value.
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-#include <errno.h>
-#include <sys/types.h> /* for mkdir() */
-#include <sys/stat.h> /* for mkdir() */
-#include "test.h"
-#include "rmobj.h"
-
-/*
- * Define some useful macros.
- */
-#define PREFIX_SIZE 4
-#define STRING_SIZE 256
-#define DIR_MODE 0777 /* mode of tmp dir that will be created */
-
-#ifndef PATH_MAX
-#ifdef MAXPATHLEN
-#define PATH_MAX MAXPATHLEN
-#else
-#define PATH_MAX 1024
-#endif
-#endif
-
-/*
- * Define function prototypes.
- */
-static void tmpdir_cleanup();
-
-/*
- * Define global variables.
- */
-extern char *TCID; /* defined/initialized in main() */
-extern int TST_TOTAL; /* defined/initialized in main() */
-extern char *TESTDIR; /* the directory created; defined in */
- /* tst_res.c */
-
-/*
- * tst_tmpdir() - Create a unique temporary directory and chdir() to it.
- * It expects the caller to have defined/initialized the
- * TCID/TST_TOTAL global variables. The TESTDIR global
- * variable will be set to the directory that gets used
- * as the testing directory.
- *
- * NOTE: This function must be called BEFORE any activity
- * that would require CLEANUP. If tst_tmpdir() fails, it
- * cleans up afer itself and calls tst_exit() (i.e. does
- * not return).
- */
-#undef FN_NAME
-#define FN_NAME "tst_tmpdir()"
-
-void
-tst_tmpdir()
-{
- char prefix[PREFIX_SIZE]; /* first three characters from TCID */
- int no_cleanup = 0; /* !0 means TDIRECTORY env var was set */
-
- /*
- * If the TDIRECTORY env variable is not set, a temp dir will be
- * created.
- */
- if ( (TESTDIR = getenv(TDIRECTORY)) == NULL ) {
- /*
- * Create a unique name based on the first three characters of the
- * TCID. The last byte in "prefix" is for the null.
- */
- strncpy(prefix, TCID, PREFIX_SIZE - 1);
- prefix[PREFIX_SIZE-1] = '\0';
- if ( (TESTDIR = tempnam(TEMPDIR, prefix)) == NULL )
- tst_brkm(TBROK, tmpdir_cleanup, "%s: tempnam(%s, %s) failed",
- FN_NAME, TEMPDIR, prefix);
-
- /*
- * Create the temporary directory.
- */
- if ( mkdir(TESTDIR, DIR_MODE) == -1 )
- tst_brkm(TBROK, tmpdir_cleanup,
- "%s: mkdir(%s, %#o) failed; errno = %d: %s",
- FN_NAME, TESTDIR, DIR_MODE, errno, strerror(errno));
-
- /*
- * Change the group on this temporary directory to be that of the
- * gid of the person running the tests.
- */
- if ( chown(TESTDIR, -1, getgid()) == -1 )
- tst_brkm(TBROK, tmpdir_cleanup,
- "chown(%s, -1, %d) failed; errno = %d: %s",
- TESTDIR, getgid(), errno, strerror(errno));
- } else {
- /*
- * The TDIRECTORY env. variable is set, so no temp dir is created.
- * Also, no clean up will be done via tst_rmdir().
- */
- no_cleanup++;
-#if UNIT_TEST
- printf("TDIRECTORY env var is set\n");
-#endif
- }
-
-#if UNIT_TEST
- printf("TESTDIR = %s\n", TESTDIR);
-#endif
-
- /*
- * Change to the temporary directory. If the chdir() fails, issue
- * TBROK messages for all test cases, attempt to remove the
- * directory (if it was created), and exit. If the removal also
- * fails, also issue a TWARN message.
- */
- if ( chdir(TESTDIR) == -1 ) {
- tst_brkm(TBROK, NULL, "%s: chdir(%s) failed; errno = %d: %s",
- FN_NAME, TESTDIR, errno, strerror(errno) );
-
- /* Try to remove the directory */
- if ( !no_cleanup && rmdir(TESTDIR) == -1 )
- tst_resm(TWARN, "%s: rmdir(%s) failed; errno = %d: %s",
- FN_NAME, TESTDIR, errno, strerror(errno) );
-
- tmpdir_cleanup();
- }
-
-#if UNIT_TEST
- printf("CWD is %s\n", getcwd((char *)NULL, PATH_MAX));
-#endif
-
- /*
- * If we made through all this stuff, return.
- */
- return;
-} /* tst_tmpdir() */
-
-
-/*
- *
- * tst_rmdir() - Recursively remove the temporary directory created by
- * tst_tmpdir(). This function is intended ONLY as a
- * companion to tst_tmpdir(). If the TDIRECTORY
- * environment variable is set, no cleanup will be
- * attempted.
- */
-#undef FN_NAME
-#define FN_NAME "tst_rmdir()"
-
-void
-tst_rmdir()
-{
- char *errmsg;
- char *tdirectory;
- char current_dir[PATH_MAX]; /* current working directory */
- char parent_dir[PATH_MAX]; /* directory above TESTDIR */
- char *basename; /* basename of the TESTDIR */
-
- /*
- * If the TDIRECTORY env variable is set, this indicates that no
- * temp dir was created by tst_tmpdir(). Thus no cleanup will be
- * necessary.
- */
- if ( (tdirectory = getenv(TDIRECTORY)) != NULL ) {
-#if UNIT_TEST
- printf("\"TDIRECORY\" env variable is set; no cleanup was performed\n");
-#endif
- return;
- }
-
- /*
- * Check that TESTDIR is not NULL.
- */
- if ( TESTDIR == NULL ) {
- tst_resm(TWARN, "%s: TESTDIR was NULL; no removal attempted",
- FN_NAME);
- return;
- }
-
- /*
- * Check that the value of TESTDIR is not "*" or "/". These could
- * have disastrous effects in a test run by root.
- */
- if ( strcmp(TESTDIR, "/") == 0 ) {
- tst_resm(TWARN,
- "%s: Recursive remove of root directory not attempted",
- FN_NAME);
- return;
- }
-
- if ( strchr(TESTDIR, '*') != NULL ) {
- tst_resm(TWARN, "%s: Recursive remove of '*' not attempted",
- FN_NAME);
- return;
- }
-
- /*
- * Get the directory name of TESTDIR. If TESTDIR is a relative path,
- * get full path.
- */
- if ( TESTDIR[0] != '/' ) {
- if ( getcwd(current_dir,PATH_MAX) == NULL )
- strcpy(parent_dir, TESTDIR);
- else
- sprintf(parent_dir, "%s/%s", current_dir, TESTDIR);
- } else {
- strcpy(parent_dir, TESTDIR);
- }
- if ( (basename = strrchr(parent_dir, '/')) != NULL ) {
- *basename='\0'; /* terminate at end of parent_dir */
- }
-
- /*
- * Change directory to parent_dir (The dir above TESTDIR).
- */
- if ( chdir(parent_dir) != 0 )
- tst_resm(TWARN,
- "%s: chdir(%s) failed; errno = %d: %s\nAttempting to remove temp dir anyway",
- FN_NAME, parent_dir, errno, strerror(errno));
-
- /*
- * Attempt to remove the "TESTDIR" directory, using rmobj().
- */
- if ( rmobj(TESTDIR, &errmsg) == -1 )
- tst_resm(TWARN, "%s: rmobj(%s) failed: %s",
- FN_NAME, TESTDIR, errmsg);
-
- return;
-} /* tst_rmdir() */
-
-
-/*
- * tmpdir_cleanup() - This function is used when tst_tmpdir()
- * encounters an error, and must cleanup and exit.
- * It prints a warning message via tst_resm(), and
- * then calls tst_exit().
- */
-#undef FN_NAME
-#define FN_NAME "tst_tmpdir()"
-
-static void
-tmpdir_cleanup()
-{
- /*
- * Print a warning message and call tst_exit() to exit the test.
- */
- tst_resm(TWARN, "%s: No user cleanup function called before exiting",
- FN_NAME);
- tst_exit();
-} /* tmpdir_cleanup() */
-
-
-#ifdef UNIT_TEST
-/****************************************************************************
- * Unit test code: Takes input from stdin and can make the following
- * calls: tst_tmpdir(), tst_rmdir().
- ****************************************************************************/
-int TST_TOTAL = 10;
-char *TCID = "TESTTCID";
-
-main()
-{
- int option;
- char *chrptr;
-
- printf("UNIT TEST of tst_tmpdir.c. Options to try:\n\
- -1 : call tst_exit()\n\
- 0 : call tst_tmpdir()\n\
- 1 : call tst_rmdir()\n\n");
-
- while ( 1 ) {
- printf("Enter options (-1, 0, 1): ");
- (void) scanf("%d%c", &option, &chrptr);
-
- switch ( option ) {
- case -1:
- tst_exit();
- break;
-
- case 0:
- tst_tmpdir();
- break;
-
- case 1:
- tst_rmdir();
- break;
- } /* switch() */
- } /* while() */
-}
-#endif /* UNIT_TEST */
diff --git a/winsup/testsuite/libltp/lib/write_log.c b/winsup/testsuite/libltp/lib/write_log.c
deleted file mode 100644
index 316dfe79b..000000000
--- a/winsup/testsuite/libltp/lib/write_log.c
+++ /dev/null
@@ -1,468 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- */
-/*
- * This module contains code for logging writes to files, and for
- * perusing the resultant logfile. The main intent of all this is
- * to provide a 'write history' of a file which can be examined to
- * judge the state of a file (ie. whether it is corrupted or not) based
- * on the write activity.
- *
- * The main abstractions available to the user are the wlog_file, and
- * the wlog_rec. A wlog_file is a handle encapsulating a write logfile.
- * It is initialized with the wlog_open() function. This handle is
- * then passed to the various wlog_xxx() functions to provide transparent
- * access to the write logfile.
- *
- * The wlog_rec datatype is a structure which contains all the information
- * about a file write. Examples include the file name, offset, length,
- * pattern, etc. In addition there is a bit which is cleared/set based
- * on whether or not the write has been confirmed as complete. This
- * allows the write logfile to contain information on writes which have
- * been initiated, but not yet completed (as in async io).
- *
- * There is also a function to scan a write logfile in reverse order.
- *
- * NOTE: For target file analysis based on a write logfile, the
- * assumption is made that the file being written to is
- * locked from simultaneous access, so that the order of
- * write completion is predictable. This is an issue when
- * more than 1 process is trying to write data to the same
- * target file simultaneously.
- *
- * The history file created is a collection of variable length records
- * described by scruct wlog_rec_disk in write_log.h. See that module for
- * the layout of the data on disk.
- */
-
-#include <stdio.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <string.h>
-#include <sys/param.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include "write_log.h"
-
-#ifndef BSIZE
-#ifdef linux
-#define BSIZE DEV_BSIZE
-#else
-#ifdef __CYGWIN__
-#define BSIZE S_BLKSIZE
-#else
-#define BSIZE BBSIZE
-#endif
-#endif
-#endif
-
-#ifndef PATH_MAX
-#define PATH_MAX 255
-/*#define PATH_MAX pathconf("/", _PC_PATH_MAX)*/
-#endif
-
-char Wlog_Error_String[256];
-
-#if __STDC__
-static int wlog_rec_pack(struct wlog_rec *wrec, char *buf, int flag);
-static int wlog_rec_unpack(struct wlog_rec *wrec, char *buf);
-#else
-static int wlog_rec_pack();
-static int wlog_rec_unpack();
-#endif
-
-/*
- * Initialize a write logfile. wfile is a wlog_file structure that has
- * the w_file field filled in. The rest of the information in the
- * structure is initialized by the routine.
- *
- * The trunc flag is used to indicate whether or not the logfile should
- * be truncated if it currently exists. If it is non-zero, the file will
- * be truncated, otherwise it will be appended to.
- *
- * The mode argument is the [absolute] mode which the file will be
- * given if it does not exist. This mode is not affected by your process
- * umask.
- */
-
-int
-wlog_open(wfile, trunc, mode)
-struct wlog_file *wfile;
-int trunc;
-int mode;
-{
- int omask, oflags;
-
- if (trunc)
- trunc = O_TRUNC;
-
- omask = umask(0);
-
- /*
- * Open 1 file descriptor as O_APPEND
- */
-
- oflags = O_WRONLY | O_APPEND | O_CREAT | trunc;
- wfile->w_afd =
- open(wfile->w_file, oflags, mode);
- umask(omask);
-
- if (wfile->w_afd == -1) {
- sprintf(Wlog_Error_String,
- "Could not open write_log - open(%s, %#o, %#o) failed: %s\n",
- wfile->w_file, oflags, mode, strerror(errno));
- return -1;
- }
-
- /*
- * Open the next fd as a random access descriptor
- */
-
- oflags = O_RDWR;
- if ((wfile->w_rfd = open(wfile->w_file, oflags)) == -1) {
- sprintf(Wlog_Error_String,
- "Could not open write log - open(%s, %#o) failed: %s\n",
- wfile->w_file, oflags, strerror(errno));
- close(wfile->w_afd);
- wfile->w_afd = -1;
- return -1;
- }
-
- return 0;
-}
-
-/*
- * Release all resources associated with a wlog_file structure allocated
- * with the wlog_open() call.
- */
-
-int
-wlog_close(wfile)
-struct wlog_file *wfile;
-{
- close(wfile->w_afd);
- close(wfile->w_rfd);
- return 0;
-}
-
-/*
- * Write a wlog_rec structure to a write logfile. Offset is used to
- * control where the record will be written. If offset is < 0, the
- * record will be appended to the end of the logfile. Otherwise, the
- * record which exists at the indicated offset will be overlayed. This
- * is so that we can record writes which are outstanding (with the w_done
- * bit in wrec cleared), but not completed, and then later update the
- * logfile when the write request completes (as with async io). When
- * offset is >= 0, only the fixed length portion of the record is
- * rewritten. See text in write_log.h for details on the format of an
- * on-disk record.
- *
- * The return value of the function is the byte offset in the logfile
- * where the record begins.
- *
- * Note: It is the callers responsibility to make sure that the offset
- * parameter 'points' to a valid record location when a record is to be
- * overlayed. This is guarenteed by saving the return value of a previous
- * call to wlog_record_write() which wrote the record to be overlayed.
- *
- * Note2: The on-disk version of the wlog_rec is MUCH different than
- * the user version. Don't expect to od the logfile and see data formatted
- * as it is in the wlog_rec structure. Considerable data packing takes
- * place before the record is written.
- */
-
-int
-wlog_record_write(wfile, wrec, offset)
-struct wlog_file *wfile;
-struct wlog_rec *wrec;
-long offset;
-{
- int reclen;
- char wbuf[WLOG_REC_MAX_SIZE + 2];
-
- /*
- * If offset is -1, we append the record at the end of file
- *
- * Otherwise, we overlay wrec at the file offset indicated and assume
- * that the caller passed us the correct offset. We do not record the
- * fname in this case.
- */
-
- reclen = wlog_rec_pack(wrec, wbuf, (offset < 0));
-
- if (offset < 0) {
- /*
- * Since we're writing a complete new record, we must also tack
- * its length onto the end so that wlog_scan_backward() will work.
- * Length is asumed to fit into 2 bytes.
- */
-
- wbuf[reclen] = reclen / 256;
- wbuf[reclen+1] = reclen % 256;
- reclen += 2;
-
- write(wfile->w_afd, wbuf, reclen);
- offset = lseek(wfile->w_afd, 0, SEEK_CUR) - reclen;
- } else {
- lseek(wfile->w_rfd, offset, SEEK_SET);
- write(wfile->w_rfd, wbuf, reclen);
- }
-
- return offset;
-}
-
-/*
- * Function to scan a logfile in reverse order. Wfile is a valid
- * wlog_file structure initialized by wlog_open(). nrecs is the number
- * of records to scan (all records are scanned if nrecs is 0). func is
- * a user-supplied function to call for each record found. The function
- * will be passed a single parameter - a wlog_rec structure .
- */
-
-int
-wlog_scan_backward(wfile, nrecs, func, data)
-struct wlog_file *wfile;
-int nrecs;
-int (*func)();
-long data;
-{
- int fd, leftover, nbytes, offset, recnum, reclen, rval;
- char buf[BSIZE*32], *bufend, *cp, *bufstart;
- char albuf[WLOG_REC_MAX_SIZE];
- struct wlog_rec wrec;
-
- fd = wfile->w_rfd;
-
- /*
- * Move to EOF. offset will always hold the current file offset
- */
-
- lseek(fd, 0, SEEK_END);
- offset = lseek(fd, 0, SEEK_CUR);
-
- bufend = buf + sizeof(buf);
- bufstart = buf;
-
- recnum = 0;
- leftover = 0;
- while ((!nrecs || recnum < nrecs) && offset > 0) {
- /*
- * Check for beginning of file - if there aren't enough bytes
- * remaining to fill buf, adjust bufstart.
- */
-
- if (offset + leftover < sizeof(buf)) {
- bufstart = bufend - (offset + leftover);
- offset = 0;
- } else {
- offset -= sizeof(buf) - leftover;
- }
-
- /*
- * Move to the proper file offset, and read into buf
- */
-
- lseek(fd, offset, SEEK_SET);
- nbytes = read(fd, bufstart, bufend - bufstart - leftover);
-
- if (nbytes == -1) {
- sprintf(Wlog_Error_String,
- "Could not read history file at offset %d - read(%d, %#o, %d) failed: %s\n",
- offset, fd, (int)bufstart,
- bufend - bufstart - leftover, strerror(errno));
- return -1;
- }
-
- cp = bufend;
- leftover = 0;
-
- while (cp >= bufstart) {
-
- /*
- * If cp-bufstart is not large enough to hold a piece
- * of record length information, copy remainder to end
- * of buf and continue reading the file.
- */
-
- if (cp - bufstart < 2) {
- leftover = cp - bufstart;
- memcpy(bufend - leftover, bufstart, leftover);
- break;
- }
-
- /*
- * Extract the record length. We must do it this way
- * instead of casting cp to an int because cp might
- * not be word aligned.
- */
-
- reclen = (*(cp-2) * 256) + *(cp -1);
-
- /*
- * If cp-bufstart isn't large enough to hold a
- * complete record, plus the length information, copy
- * the leftover bytes to the end of buf and continue
- * reading.
- */
-
- if (cp - bufstart < reclen + 2) {
- leftover = cp - bufstart;
- memcpy(bufend - leftover, bufstart, leftover);
- break;
- }
-
- /*
- * Adjust cp to point at the start of the record.
- * Copy the record into wbuf so that it is word
- * aligned and pass the record to the user supplied
- * function.
- */
-
- cp -= reclen + 2;
- memcpy(albuf, cp, reclen);
-
- wlog_rec_unpack(&wrec, albuf);
-
- /*
- * Call the user supplied function -
- * stop if instructed to.
- */
-
- if ((rval = (*func)(&wrec, data)) == WLOG_STOP_SCAN) {
- break;
- }
-
- recnum++;
-
- if (nrecs && recnum >= nrecs)
- break;
- }
- }
-
- return 0;
-}
-
-/*
- * The following 2 routines are used to pack and unpack the user
- * visible wlog_rec structure to/from a character buffer which is
- * stored or read from the write logfile. Any changes to either of
- * these routines must be reflected in the other.
- */
-
-static int
-wlog_rec_pack(wrec, buf, flag)
-struct wlog_rec *wrec;
-char *buf;
-int flag;
-{
- char *file, *host, *pattern;
- struct wlog_rec_disk *wrecd;
-
- wrecd = (struct wlog_rec_disk *)buf;
-
- wrecd->w_pid = (uint)wrec->w_pid;
- wrecd->w_offset = (uint)wrec->w_offset;
- wrecd->w_nbytes = (uint)wrec->w_nbytes;
- wrecd->w_oflags = (uint)wrec->w_oflags;
- wrecd->w_done = (uint)wrec->w_done;
- wrecd->w_async = (uint)wrec->w_async;
-
- wrecd->w_pathlen = (wrec->w_pathlen > 0) ? (uint)wrec->w_pathlen : 0;
- wrecd->w_hostlen = (wrec->w_hostlen > 0) ? (uint)wrec->w_hostlen : 0;
- wrecd->w_patternlen = (wrec->w_patternlen > 0) ? (uint)wrec->w_patternlen : 0;
-
- /*
- * If flag is true, we should also pack the variable length parts
- * of the wlog_rec. By default, we only pack the fixed length
- * parts.
- */
-
- if (flag) {
- file = buf + sizeof(struct wlog_rec_disk);
- host = file + wrecd->w_pathlen;
- pattern = host + wrecd->w_hostlen;
-
- if (wrecd->w_pathlen > 0)
- memcpy(file, wrec->w_path, wrecd->w_pathlen);
-
- if (wrecd->w_hostlen > 0)
- memcpy(host, wrec->w_host, wrecd->w_hostlen);
-
- if (wrecd->w_patternlen > 0)
- memcpy(pattern, wrec->w_pattern, wrecd->w_patternlen);
-
- return (sizeof(struct wlog_rec_disk) +
- wrecd->w_pathlen + wrecd->w_hostlen + wrecd->w_patternlen);
- } else {
- return sizeof(struct wlog_rec_disk);
- }
-}
-
-static int
-wlog_rec_unpack(wrec, buf)
-struct wlog_rec *wrec;
-char *buf;
-{
- char *file, *host, *pattern;
- struct wlog_rec_disk *wrecd;
-
- bzero((char *)wrec, sizeof(struct wlog_rec));
- wrecd = (struct wlog_rec_disk *)buf;
-
- wrec->w_pid = wrecd->w_pid;
- wrec->w_offset = wrecd->w_offset;
- wrec->w_nbytes = wrecd->w_nbytes;
- wrec->w_oflags = wrecd->w_oflags;
- wrec->w_hostlen = wrecd->w_hostlen;
- wrec->w_pathlen = wrecd->w_pathlen;
- wrec->w_patternlen = wrecd->w_patternlen;
- wrec->w_done = wrecd->w_done;
- wrec->w_async = wrecd->w_async;
-
- if (wrec->w_pathlen > 0) {
- file = buf + sizeof(struct wlog_rec_disk);
- memcpy(wrec->w_path, file, wrec->w_pathlen);
- }
-
- if (wrec->w_hostlen > 0) {
- host = buf + sizeof(struct wlog_rec_disk) + wrec->w_pathlen;
- memcpy(wrec->w_host, host, wrec->w_hostlen);
- }
-
- if (wrec->w_patternlen > 0) {
- pattern = buf + sizeof(struct wlog_rec_disk) +
- wrec->w_pathlen + wrec->w_hostlen;
- memcpy(wrec->w_pattern, pattern, wrec->w_patternlen);
- }
-
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/checksignal.c b/winsup/testsuite/winsup.api/checksignal.c
deleted file mode 100644
index 47dc2f6a0..000000000
--- a/winsup/testsuite/winsup.api/checksignal.c
+++ /dev/null
@@ -1,91 +0,0 @@
-#include <errno.h>
-#include <signal.h>
-
-#include "test.h"
-#include "usctest.h"
-
-const char *TCID = "checksignal"; /* Test program identifier. */
-int TST_TOTAL = 3; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-void
-sig_handler (int signo)
-{
- errno = EINVAL;
-}
-
-int
-main ()
-{
- int n, ret;
- int fds[2];
- char buf[10];
- struct sigaction act;
- int i;
-
- Tst_count = 0;
-
- /* Reset SA_RESTART flag. */
- while ((ret = sigaction (SIGALRM, NULL, &act)) == EINTR)
- ;
- if (ret)
- tst_brk (TBROK, NULL, NULL, "Get signal action structure");
- act.sa_flags &= ~SA_RESTART;
- while ((ret = sigaction (SIGALRM, &act, NULL)) == EINTR)
- ;
- if (ret)
- tst_brk (TBROK, NULL, NULL, "Reset SA_RESTART");
-
- for (i = 0; i < 2; i++)
- {
- if (pipe (fds) < 0)
- tst_brk (TBROK, NULL, NULL, "Create pipe");
- /* Set signal handler using signal(2) call... */
- if (signal (SIGALRM, sig_handler) < 0)
- tst_brk (TBROK, NULL, NULL, "Call signal() to install signal handler");
- /* ...and check if signal(2) sets SA_RESTART again. */
- while ((ret = sigaction (SIGALRM, NULL, &act)) == EINTR)
- ;
- if (ret)
- tst_brk (TBROK, NULL, NULL, "Get signal action structure");
- tst_resm (act.sa_flags & SA_RESTART ? TPASS : TFAIL,
- "signal() sets SA_RESTART");
-
- const char *msg1, *msg2;
- if (i == 1)
- {
- siginterrupt (SIGALRM, 1);
- msg1 = "Reset SA_RESTART via siginterrupt";
- msg2 = "Set EINTR on interrupted read() call via siginterrupt";
- }
- else
- {
- /* Reset SA_RESTART flag again. */
- act.sa_handler = sig_handler;
- act.sa_flags &= ~SA_RESTART;
- while ((ret = sigaction (SIGALRM, &act, NULL)) == EINTR)
- ;
- msg1 = "Reset SA_RESTART via sigaction";
- msg2 = "Set EINTR on interrupted read() call via sigaction";
- }
- if (ret)
- tst_brk (TBROK, NULL, NULL, msg1);
-
- /* Start timer to force a SIGALRM. */
- alarm (1);
-
- /* Call read(2) to check if the EINTR errno is correctly preserved,
- even if the signal handler routine changes errno. */
- n = read(fds[0], buf, 10);
- tst_resm (n < 0 && errno == EINTR ? TPASS : TFAIL, msg2);
- close (fds[0]);
- close (fds[1]);
- }
-
- /* Check if another errno is correctly returned (here EBADF). */
- n = read(fds[0], buf, 10);
- tst_resm (n < 0 && errno == EBADF ? TPASS : TFAIL,
- "Set EBADF on closed file descriptor");
-
- tst_exit ();
-}
diff --git a/winsup/testsuite/winsup.api/crlf.c b/winsup/testsuite/winsup.api/crlf.c
deleted file mode 100644
index ea79122f0..000000000
--- a/winsup/testsuite/winsup.api/crlf.c
+++ /dev/null
@@ -1,527 +0,0 @@
-typedef enum {
- Nop=100000, /* ; do nothing */
- New1, /* ; reset and begin new test */
- Open, /* ; open test file */
- Read, /* [askfor] [get] ; read bytes into buffer */
- Write, /* [expect] [bytestream] ; write to file (expect 0 = ignore)*/
- Compare, /* [bytestream] ; compare buffer to given bytes */
- Verify, /* [bytestream] ; compare file to given bytes */
- Seek, /* [offset] [whence] ; seek in file */
- Tell, /* [offset] ; compare file positions */
- BufSize, /* [size] ; change the stdio buffer size */
- Flush, /* ; flush the stdio stream */
- Text, /* ; switch file to text mode */
- Binary, /* ; switch file to binary mode */
- Rep, /* [count] ; repeat 'R' bytes (used in bytestream) */
- Fill, /* [posn] ; fill 'F' until given byte position */
- Start, /* ; for Seek */
- Current, /* ; for Seek */
- End, /* ; for Seek, or end of byte stream */
- Max } Opcode;
-
-#define New New1,__LINE__
-
-/* Byte streams are just inserted into the command stream, and must
- end in an End code. */
-
-int commands[] = {
-#ifndef __DJGPP__
- New,
- Write, 1605, Rep, 1600, 'h', 'e', 'l', 'l', 'o', End,
- Tell, 1605,
-
- Open,
- BufSize, 16,
- Read, 1605, 1605,
- Compare, Rep, 1600, 'h', 'e', 'l', 'l', 'o', End,
- Tell, 1605,
- Flush,
- Tell, 1605,
- Seek, 1000, Start,
- Tell, 1000,
-
- New,
- Text,
- Write, 2, 'x', 10, End,
- Verify, 'x', 13, 10, End,
-
- New,
- Binary,
- Write, 2, 'x', 10, End,
- Verify, 'x', 10, End,
-
- BufSize, 16,
-
- New,
- Binary,
- Write, 0, Fill, 15, 13, 10, 'x', End,
- Text, Open,
- Read, 17, 17,
- Compare, Fill, 15, 10, 'x', End,
- Tell, 18,
-
- New,
- Binary,
- Write, 0, Fill, 14, 13, 10, 'x', End,
- Text, Open,
- Read, 16, 16,
- Compare, Fill, 14, 10, 'x', End,
- Tell, 17,
-
- New,
- Binary,
- Write, 0, 13, 10, 'a', 'b', End,
- Text, Open,
- Read, 2, 2,
- Compare, 10, 'a', End,
- Tell, 3,
-
- New,
- Binary,
- Write, 0, 10, 'a', 'b', End,
- Text, Open,
- Read, 2, 2,
- Compare, 10, 'a', End,
- Tell, 2,
-
- New,
- Binary,
- Write, 0, 13, 'a', 'b', End,
- Text, Open,
- Read, 2, 2,
- Compare, 13, 'a', End,
- Tell, 2,
-
- New,
- Binary,
- Write, 0, 13, 13, 10, 'a', End,
- Text, Open,
- Read, 2, 2,
- Compare, 13, 10, End,
- Tell, 3,
-
- New,
- Binary,
- Write, 0, 13, 10, 'a', 13, End,
- Text, Open,
- Read, 2, 2,
- Compare, 10, 'a', End,
- Tell, 3,
-
- New,
- Binary,
- Write, 0, 13, 10, 'a', 10, End,
- Text, Open,
- Read, 2, 2,
- Compare, 10, 'a', End,
- Tell, 3,
-
- New,
- Binary,
- Write, 0, 13, 13, 13, 10, 'a', 10, 10, 10, End,
- Text, Open,
- Read, 4, 4,
- Compare, 13, 13, 10, 'a', End,
- Tell, 5,
-#endif
-
- New,
- Binary,
- Write, 0, 13, 13, 13, 10, 'a', 'b', 13, 10, 13, 10, End,
- Text, Open,
- Read, 4, 4,
- Compare, 13, 13, 10, 'a', End,
- Tell, 5,
-
- };
-
-/*==========================================================================*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <ctype.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <string.h>
-
-#ifndef O_BINARY
-#define O_BINARY 0
-#endif
-#ifndef O_TEXT
-#define O_TEXT 0
-#endif
-
-int errors = 0;
-
-#define num_commands (int)(sizeof(commands)/sizeof(commands[0]))
-
-int pc;
-int askfor, get, expect, count, posn, whence, size;
-
-typedef struct {
- unsigned char *bytes;
- int max, count;
-} Buffer;
-
-Buffer rw_buf={0,0,0}, cmp_buf={0,0,0}, vfy_buf={0,0,0};
-
-void
-expand_buf(Buffer *buf, int len)
-{
- if (buf->max < len)
- {
- buf->max = len+20;
- if (buf->bytes)
- buf->bytes = (unsigned char *)realloc(buf->bytes, buf->max);
- else
- buf->bytes = (unsigned char *)malloc(buf->max);
- }
-}
-
-void
-get_bytestream(Buffer *buf)
-{
- int tpc;
- int len = 0, rep, byte;
- unsigned char *bp;
-
- for (tpc = pc+1; tpc < num_commands && commands[tpc] != End; tpc++)
- {
- switch (commands[tpc])
- {
- case Rep:
- len += commands[tpc+1];
- tpc ++;
- break;
- case Fill:
- if (len < commands[tpc+1])
- len = commands[tpc+1];
- tpc ++;
- break;
- default:
- len ++;
- break;
- }
- }
-
- expand_buf(buf, len);
-
- len = 0;
- bp = buf->bytes;
-
- for (tpc = pc+1; tpc < num_commands && commands[tpc] != End; tpc++)
- {
- switch (commands[tpc])
- {
- case Rep:
- rep = commands[++tpc];
- byte = 'R';
- while (rep--) *bp++ = byte;
- break;
- case Fill:
- rep = commands[++tpc];
- byte = 'F';
- while (bp-buf->bytes < rep) *bp++ = byte;
- break;
- default:
- *bp++ = commands[tpc];
- break;
- }
- }
- buf->count = bp - buf->bytes;
- pc = tpc;
-}
-
-char dataname[] = "crlf.dat";
-
-int verbose=0;
-void
-v(char *fmt, ...)
-{
- va_list ap;
- if (!verbose) return;
- va_start(ap, fmt);
- vfprintf(stdout, fmt, ap);
- va_end(ap);
- printf("\n");
-}
-
-void
-vp(const char *fmt, ...)
-{
- va_list ap;
- if (!verbose) return;
- printf("%08x: ", pc);
- va_start(ap, fmt);
- vfprintf(stdout, fmt, ap);
- va_end(ap);
- printf("\n");
-}
-
-void
-errorq(int use_errno, const char *fmt, ...)
-{
- va_list ap;
- fprintf(stderr, "crlf: Error at pc=%d: ", pc);
- va_start(ap, fmt);
- vfprintf(stderr, fmt, ap);
- va_end(ap);
- fprintf(stderr, "\n");
- if (use_errno)
- perror("The error was");
- errors++;
-}
-
-void
-error(int use_errno, const char *fmt, ...)
-{
- va_list ap;
- fprintf(stderr, "crlf: Error at pc=%d: ", pc);
- va_start(ap, fmt);
- vfprintf(stderr, fmt, ap);
- va_end(ap);
- fprintf(stderr, "\n");
- if (use_errno)
- perror("The error was");
- fprintf(stderr, "FAIL\n");
- exit(1);
-}
-
-void
-display_buf(const char *which, Buffer *buf, int ofs)
-{
- int i;
- fprintf(stderr, "%s %04x:", which, ofs);
- for (i=0; i<8; i++)
- if (i+ofs < buf->count)
- {
- unsigned char b = buf->bytes[i+ofs];
- fprintf(stderr, " %02x", b);
- if (isgraph(b))
- fprintf(stderr, " %c ", b);
- else
- fprintf(stderr, " . "/*, b*/);
- }
- fprintf(stderr, "\n");
-}
-
-void
-compare_bufs(const char *name, Buffer *actual, Buffer *expected)
-{
- int i, got_one=0;
- for (i=0; i<actual->count && i<expected->count; i++)
- if (actual->bytes[i] != expected->bytes[i])
- {
- errorq(0, "%s: byte mismatch at offset 0x%x", name, i);
- got_one = 1;
- break;
- }
- if (!got_one)
- {
- if (actual->count < expected->count)
- errorq(0, "%s: too few bytes (0x%x vs 0x%x)", name,
- actual->count, expected->count);
- else if (actual->count > expected->count)
- errorq(0, "%s: too many bytes (0x%x vs 0x%x)", name,
- actual->count, expected->count);
- else
- return;
- }
-
- i -= 4;
- if (i<0) i = 0;
- display_buf("Actual ", actual, i);
- display_buf("Expected", expected, i);
-}
-
-int
-main(int argc, char **argv)
-{
- const char *readmode = "rb";
- const char *writemode = "wb";
- FILE *file = 0;
- int i;
- struct stat st;
- const char *str = "";
-
- while (argc > 1 && argv[1][0] == '-')
- {
- if (strcmp(argv[1], "-v") == 0)
- verbose++;
- argc--;
- argv++;
- }
-
- size = 0;
-
- for (pc=0; pc<num_commands; pc++)
- {
- switch (commands[pc])
- {
- case Nop:
- vp("Nop");
- break;
-
- case New1:
- i = commands[++pc];
- vp("New %d", i);
- if (file) fclose(file);
- file = 0;
- remove(dataname);
- break;
-
- case Open:
- vp("Open");
- if (file) fclose(file);
- file = 0;
- break;
-
- case Read:
- if (!file)
- {
- file = fopen(dataname, readmode);
- if (size)
- setvbuf(file, 0, _IOFBF, size);
- }
- if (!file)
- error(1, "cannot open %s, mode %s", dataname, readmode);
- askfor = commands[++pc];
- get = commands[++pc];
- vp("Read %d %d", askfor, get);
- expand_buf(&rw_buf, askfor);
- if (askfor == 1)
- {
- i = getc(file);
- rw_buf.bytes[0] = i;
- i = (i == EOF) ? 0 : 1;
- }
- else
- i = fread(rw_buf.bytes, 1, askfor, file);
- if (i != get)
- error(0, "read wrong number of bytes (%d vs %d)", i, get);
- rw_buf.count = i;
- break;
-
- case Write:
- if (!file)
- {
- file = fopen(dataname, writemode);
- if (size)
- setvbuf(file, 0, _IOFBF, size);
- }
- if (!file)
- error(1, "cannot open %s, mode %s\n", dataname, writemode);
- expect = commands[++pc];
- get_bytestream(&rw_buf);
- vp("Write %d %d", rw_buf.count, expect);
- if (askfor == 1)
- {
- i = putc(rw_buf.bytes[0], file);
- i = (i == EOF) ? 0 : 1;
- }
- else
- i = fwrite(rw_buf.bytes, 1, rw_buf.count, file);
- if (expect && (i != expect))
- error(0, "wrote wrong number of bytes (%d vs %d)", i, expect);
- break;
-
- case Compare:
- get_bytestream(&cmp_buf);
- vp("Compare %d/%d", rw_buf.count, cmp_buf.count);
- compare_bufs("Compare", &rw_buf, &cmp_buf);
- break;
-
- case Verify:
- if (file) fclose(file);
- file = 0;
- get_bytestream(&cmp_buf);
- vp("Verify %s", dataname);
- if (stat(dataname, &st))
- error(1, "Can't stat %s", dataname);
- expand_buf(&vfy_buf, st.st_size);
- i = open(dataname, O_RDONLY|O_BINARY, 0);
- vfy_buf.count = read(i, vfy_buf.bytes, st.st_size);
- close(i);
- compare_bufs("Verify", &vfy_buf, &cmp_buf);
- break;
-
- case Seek:
- posn = commands[++pc];
- whence = commands[++pc];
- switch (whence)
- {
- case Start:
- whence = SEEK_SET;
- str = "Start";
- break;
- case Current:
- whence = SEEK_CUR;
- str = "Current";
- break;
- case End:
- whence = SEEK_END;
- str = "End";
- break;
- }
- vp("Seek 0x%x %s", posn, str);
- i = fseek(file, posn, whence);
- if (i)
- error(1, "fseek failed");
- break;
-
- case Tell:
- posn = commands[++pc];
- vp("Tell 0x%x", posn);
- i = ftell(file);
- if (i != posn)
- error(0, "ftell failed, got 0x%x expected 0x%x", i, posn);
- break;
-
- case BufSize:
- size = commands[++pc];
- vp("BufSize 0x%x", size);
- if (file)
- {
- fflush(file);
- setvbuf(file, 0, _IOFBF, size);
- }
- break;
-
- case Flush:
- vp("Flush");
- if (file)
- fflush(file);
- break;
-
- case Text:
- vp("Text");
- readmode = "rt";
- writemode = "wt";
- break;
-
- case Binary:
- vp("Binary");
- readmode = "rb";
- writemode = "wb";
- break;
-
- default:
- printf("Invalid command code %d at offset %d\n", commands[pc], pc);
- exit(1);
- }
- }
-
- if (file) fclose(file);
-
- if (errors)
- printf("FAIL: %d error%s\n", errors, errors==1?"":"s");
- else
- {
- printf("PASS\n");
- unlink (dataname);
- }
- return errors;
-}
diff --git a/winsup/testsuite/winsup.api/cygload.cc b/winsup/testsuite/winsup.api/cygload.cc
deleted file mode 100644
index bdbbcd1a3..000000000
--- a/winsup/testsuite/winsup.api/cygload.cc
+++ /dev/null
@@ -1,628 +0,0 @@
-/* cygload.cc
-
- Copyright 2005, 2006 Red Hat, Inc.
-
- Written by Max Kaehn <slothman@electric-cloud.com>
-
- This software is a copyrighted work licensed under the terms of the
- Cygwin license. Please consult the file "CYGWIN_LICENSE" for details.
-
- Note that dynamically linking to cygwin1.dll automatically places your code
- under the GPL unless you purchase a Cygwin Contract with Red Hat, Inc.
- See http://www.redhat.com/software/cygwin/ for more information.
-
- cygload demonstrates how to dynamically load cygwin1.dll. The default
- build uses MinGW to compile it; the Makefile also shows how to build
- it using the Microsoft compiler.
-
- By default, the program will silently test basic functionality:
- * Making space on the stack for cygtls
- * Loading and initializing cygwin1.dll
- * Path translation
- * Error handling
- * Signal handling
-
- Options for this program:
- -v Verbose output. Normal operation is entirely silent,
- save for errors.
- -testinterrupts Pauses the program for 30 seconds so you can demonstrate
- that it handles ^C properly.
- -cygwin Name of DLL to load. Defaults to "cygwin1.dll". */
-
-#include "cygload.h"
-#include <iostream>
-#include <sstream>
-#include <vector>
-#include <errno.h> // for ENOENT
-#include <sys/types.h>
-#include <sys/stat.h>
-
-using std::cout;
-using std::cerr;
-using std::endl;
-using std::string;
-
-cygwin::padding *cygwin::padding::_main = NULL;
-DWORD cygwin::padding::_mainTID = 0;
-
-// A few cygwin constants.
-static const int SIGHUP = 1;
-static const int SIGINT = 2;
-static const int SIGTERM = 15; // Cygwin won't deliver this one to us;
- // expect unadorned "kill" to just kill
- // your process.
-static const int SIGSTOP = 17; // Cygwin insists on delivering SIGSTOP to
- // the main thread. If your main thread
- // is not interruptible, you'll miss the
- // signal and ignore the request to suspend.
-static const int SIGTSTP = 18; // ^Z on a tty.
-static const int SIGCONT = 19; // Resume a stopped process.
-static const int SIGUSR1 = 30;
-static const int SIGUSR2 = 31;
-
-// Using *out instead of cout. In verbose mode, out == &cout.
-static std::ostream *out = NULL;
-
-cygwin::padding::padding ()
-{
- _main = this;
- _mainTID = GetCurrentThreadId ();
-
- _end = _padding + sizeof (_padding);
- char *stackbase;
-#ifdef __GNUC__
- __asm__ (
- "movl %%fs:4, %0"
- :"=r"(stackbase)
- );
-#else
- __asm
- {
- mov eax, fs:[4];
- mov stackbase, eax;
- }
-#endif
- _stackbase = stackbase;
-
- // We've gotten as close as we can to the top of the stack. Even
- // subverting the entry point, though, still doesn't get us there-- I'm
- // getting 64 bytes in use before the entry point. So we back up the data
- // there and restore it when the destructor is called:
- if ((_stackbase - _end) != 0)
- {
- size_t delta = (_stackbase - _end);
-
- _backup.resize (delta);
-
- memcpy (&(_backup[0]), _end, delta);
- }
-}
-
-cygwin::padding::~padding ()
-{
- _main = NULL;
-
- if (_backup.size ())
- {
- memcpy (_end, &(_backup[0]), _backup.size ());
- }
-}
-
-void
-cygwin::padding::check ()
-{
- if (_main == NULL)
- throw std::runtime_error ("No padding declared!");
- if (_mainTID != GetCurrentThreadId ())
- throw std::runtime_error ("You need to initialize cygwin::connector "
- "in the same thread in which you declared the "
- "padding.");
-
- if (_main->_backup.size ())
- *out << "Warning! Stack base is "
- << static_cast<void *>(_main->_stackbase)
- << ". padding ends at " << static_cast<void *>(_main->_end)
- << ". Delta is " << (_main->_stackbase - _main->_end)
- << ". Stack variables could be overwritten!" << endl;
-}
-
-cygwin::connector::connector (const char *dll)
-{
- // This will throw if padding is not in place.
- padding::check ();
-
- *out << "Loading " << dll << "..." << endl;
-
- // This should call init.cc:dll_entry() with DLL_PROCESS_ATTACH,
- // which calls dll_crt0_0().
- if ((_library = LoadLibrary (dll)) == NULL)
- throw windows_error ("LoadLibrary", dll);
-
- *out << "Initializing cygwin..." << endl;
-
- // This calls dcrt0.cc:cygwin_dll_init(), which calls dll_crt0_1(),
- // which will, among other things:
- // * spawn the cygwin signal handling thread from sigproc_init()
- // * initialize the thread-local storage for this thread and overwrite
- // the first 4K of the stack
- void (*cyginit) ();
- get_symbol ("cygwin_dll_init", cyginit);
- (*cyginit) ();
-
- *out << "Loading symbols..." << endl;
-
- // Pick up the function pointers for the basic infrastructure.
- get_symbol ("__errno", _errno);
- get_symbol ("strerror", _strerror);
- get_symbol ("cygwin_conv_to_full_posix_path", _conv_to_full_posix_path);
- get_symbol ("cygwin_conv_to_full_win32_path", _conv_to_full_win32_path);
-
- // Note that you need to be running an interruptible cygwin function if
- // you want to receive signals. You can use the standard signal()
- // mechanism if you're willing to have your main thread spend all its time
- // in interruptible cygwin functions like sleep(). Christopher Faylor
- // cautions that this solution "could be slightly racy": if a second
- // signal comes in before the first one is done processing, the thread
- // won't be back in sigwait() to catch it.
- *out << "Spawning signal handling thread..." << endl;
-
- _waiting_for_signals = true;
- _signal_thread_done = false;
- InitializeCriticalSection (&_thread_mutex);
-
- DWORD tid;
-
- _signal_thread = CreateThread (NULL, // Default security.
- 32768, // Adjust the stack size as
- // appropriate for what your signal
- // handler needs in order to run, and
- // then add 4K for cygtls.
- &signal_thread, // Function to call
- this, // Context
- 0, // Flags
- &tid); // Thread ID
-
- if (_signal_thread == NULL)
- throw windows_error ("CreateThread", "signal_thread");
-}
-
-cygwin::connector::~connector ()
-{
- try
- {
- // First, shut down signal handling.
- int (*raze) (int);
- int (*pthread_join) (void *, void **);
-
- get_symbol ("raise", raze);
- get_symbol ("pthread_join", pthread_join);
-
- // Tell the listener to shut down...
- _waiting_for_signals = false;
- int err = 0;
- EnterCriticalSection (&_thread_mutex);
- if (!_signal_thread_done)
- err = raze (SIGUSR2);
- LeaveCriticalSection (&_thread_mutex);
- if (err)
- cerr << error (this, "raise", "SIGUSR2").what () << endl;
- // ...and get the thread to join.
- if (!CloseHandle (_signal_thread))
- throw windows_error ("CloseHandle", "signal_thread");
-
- // This should call init.cc:dll_entry() with DLL_PROCESS_DETACH.
- if (!FreeLibrary (_library))
- throw windows_error ("FreeLibrary", "cygwin1.dll");
- }
- catch (std::exception &x)
- {
- cerr << x.what () << endl;
- }
-}
-
-DWORD WINAPI
-cygwin::connector::signal_thread (void *param)
-{
- connector *that = reinterpret_cast < connector * > (param);
-
- try
- {
- that->await_signal ();
- }
- catch (std::exception &x)
- {
- cerr << "signal_thread caught " << x.what () << endl;
- return 0;
- }
- return 0;
-}
-
-void
-cygwin::connector::await_signal ()
-{
- // Wait for signals.
- unsigned long sigset[32];
- int sig;
- int (*empty) (void *);
- int (*add) (void *, int);
- int (*wait) (void *, int *);
-
- get_symbol ("sigemptyset", empty);
- get_symbol ("sigaddset", add);
- get_symbol ("sigwait", wait);
-
- empty (sigset);
- add (sigset, SIGHUP);
- add (sigset, SIGINT);
-// add (sigset, SIGSTOP);
-// add (sigset, SIGTSTP); // I can't get this to suspend properly, so
- // I'll leave it up to chance that the main
- // thread is interruptible.
- add (sigset, SIGUSR1);
- add (sigset, SIGUSR2);
-
- while (_waiting_for_signals)
- {
- int err = wait (sigset, &sig);
- if (err)
- cerr << error (this, "sigwait").what () << endl;
- else
- *out << "Received signal " << sig << "." << endl;
- switch (sig)
- {
- case SIGUSR2:
- if (!_waiting_for_signals)
- {
- // SIGUSR2 is how ~connector wakes this thread
- goto done;
- }
- break;
- default:
- break;
- }
- handle_signals (sig);
- }
-done:
- EnterCriticalSection (&_thread_mutex);
- _signal_thread_done = true;
- LeaveCriticalSection (&_thread_mutex);
-
- *out << "await_signal done." << endl;
-}
-
-cygwin::connector::signal_handler *
-cygwin::connector::set_handler (int signal, signal_handler *handler)
-{
- signal_handler *retval = _signal_handlers[signal];
-
- if (handler == NULL)
- _signal_handlers.erase (signal);
- else
- _signal_handlers[signal] = handler;
-
- return retval;
-}
-
-void
-cygwin::connector::handle_signals (int sig)
-{
- callback_list::iterator h = _signal_handlers.find (sig);
-
- if (h != _signal_handlers.end ())
- {
- try
- {
- signal_handler *handler = h->second;
- (*handler) (sig);
- return;
- }
- catch (std::exception &x)
- {
- cerr << "cygwin::connector::handle_signals caught "
- << x.what () << "!" << endl;
- return;
- }
- }
-
- cerr << "No handler for signal " << sig << "!" << endl;
-}
-
-int
-cygwin::connector::err_no () const
-{
- int *e = (*_errno) ();
- if (e == NULL)
- {
- return -1;
- }
- return *e;
-}
-
-string
-cygwin::connector::str_error (int err_no) const
-{
- string retval;
-
- const char *s = (*_strerror) (err_no);
- if (s != NULL)
- {
- retval = s;
- }
- else
- {
- std::ostringstream o;
- o << "Unexpected errno " << err_no;
- retval = o.str ();
- }
-
- return retval;
-}
-
-string
-cygwin::connector::unix_path (const string &windows) const
-{
- char buf[MAX_PATH];
-
- _conv_to_full_posix_path (windows.c_str (), buf);
-
- return string (buf);
-}
-
-string
-cygwin::connector::win_path (const string &unix) const
-{
- char buf[MAX_PATH];
-
- _conv_to_full_win32_path (unix.c_str (), buf);
-
- return string (buf);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////
-
-string
-cygwin::error::format (cygwin::connector *c,
- int err_no, const char *message, const char *detail)
-{
- std::ostringstream ret;
-
- ret << message;
- if (detail)
- {
- ret << "(" << detail << ")";
- }
- ret << ": " << c->str_error (err_no);
-
- return ret.str ();
-}
-
-string
-windows_error::format (DWORD error, const char *message, const char *detail)
-{
- std::ostringstream ret;
- char buf[512];
- DWORD bytes;
-
- ret << message;
- if (detail)
- ret << "(" << detail << ")";
- ret << ": ";
-
- bytes = FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM, 0, error,
- MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT),
- buf, sizeof (buf), 0);
-
- if (bytes == 0)
- ret << "Unexpected Windows error " << error;
- else
- {
- // Remove trailing whitespace
- char *p = buf + bytes - 1;
- while (isspace (*p))
- *p-- = '\0';
- ret << buf << " (" << error << ")";
- }
-
- return ret.str ();
-}
-
-///////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////
-
-extern "C" int mainCRTStartup ();
-
-// This just pushes 4K onto the stack, backs up the original stack, and
-// jumps into the regular startup code. This avoids having to worry about
-// backing up argc and argv.
-extern "C" int __stdcall
-cygloadCRTStartup ()
-{
- cygwin::padding padding;
- return mainCRTStartup ();
-}
-
-///////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////
-
-static void
-hangup (int sig)
-{
- cout << "Hangup (" << sig << ")." << endl;
-}
-
-static void
-interrupt (int sig)
-{
- cerr << "Interrupt (" << sig << ")!" << endl;
- exit (0);
-}
-
-static int caught = false;
-
-static void
-catch_signal (int)
-{
- *out << "Signals are working." << endl;
- caught = true;
-}
-
-int
-main (int argc, char *argv[])
-{
- // If you do not want to use cygloadCRTStartup() as an entry point,
- // uncomment this line, but be sure to have *everything* you want
- // from the stack below it backed up before you call the
- // constructor for cygwin::connector.
- //cygwin::padding padding;
-
- std::ostringstream output;
- bool verbose = false, testinterrupts = false;
- const char *dll = "cygwin1.dll";
-
- out = &output;
-
- for (int i = 1; i < argc; ++i)
- {
- string arg = string (argv[i]);
-
- if (arg == "-v")
- {
- verbose = true;
- out = &cout;
- }
- else if (arg == "-testinterrupts")
- testinterrupts = true;
- else if (arg == "-cygwin")
- {
- if (i+1 >= argc)
- {
- cerr << "Need to supply an argument with -cygwin." << endl;
- return 255;
- }
- dll = argv[++i];
- }
- }
-
-
- try
- {
- *out << "Connecting to cygwin..." << endl;
- cygwin::connector cygwin (dll);
- *out << "Successfully connected." << endl;
-
- string result = cygwin.str_error (ENOENT);
-
- if (result != "No such file or directory")
- {
- cerr << "strerror(ENOENT) returned \""
- << result
- << "\" instead of \"No such file or directory\"!"
- << endl;
- return 1;
- }
- else if (verbose)
- {
- *out << "strerror(ENOENT) = " << result << endl;
- }
-
- // Path conversion: from cygwin to Windows...
- result = cygwin.win_path ("/usr");
- struct _stat statbuf;
- if (::_stat (result.c_str (), &statbuf) < 0)
- {
- cerr << "stat(\"" << result << "\") failed!" << endl;
- return 2;
- }
- else if (verbose)
- {
- *out << "/usr == " << result << endl;
- }
-
- // ...and back:
- char buf[MAX_PATH], scratch[256];
- GetSystemDirectory (buf, sizeof(buf));
- int (*cygstat) (const char *, void *);
- cygwin.get_symbol ("stat", cygstat);
-
- if (cygstat (buf, scratch) < 0)
- {
- cerr << "cygwin stat(\"" << buf << "\") failed!" << endl;
- return 3;
- }
- else if (verbose)
- {
- *out << buf << " == " << cygwin.unix_path(buf) << endl;
- }
-
- // Test error handling. This should output
- // "open(/potrzebie/furshlugginer): No such file or directory"
- {
- int (*cygopen) (const char *, int);
- cygwin.get_symbol ("open", cygopen);
-
- if (cygopen ("/potrzebie/furshlugginer", 0 /* O_RDONLY */ ) < 0)
- {
- int err = cygwin.err_no ();
- if (err != ENOENT)
- {
- cerr << "cygwin open(\"/potrzebie/furshlugginer\", "
- "O_RDONLY): expected to fail with ENOENT, got "
- << err << "!" << endl;
- return 4;
- }
- if (verbose)
- *out << cygwin::error (&cygwin, "open",
- "/potrzebie/furshlugginer").what ()
- << endl;
- }
- else
- {
- cerr << "/potrzebie/furshlugginer should not exist!"
- << endl;
- return 5;
- }
- }
-
- // And signal handling:
- std::pointer_to_unary_function < int , void > h1 (&hangup);
- std::pointer_to_unary_function < int , void > h2 (&interrupt);
- std::pointer_to_unary_function < int , void > h3 (&catch_signal);
- cygwin.set_handler (SIGHUP, &h1);
- cygwin.set_handler (SIGINT, &h2);
- cygwin.set_handler (SIGUSR1, &h3);
-
- // Make sure the signal handler thread has had time to start...
- Sleep (100);
- // Send a test signal to set "caught" to true...
- int (*raze) (int);
- cygwin.get_symbol ("raise", raze);
- raze (SIGUSR1);
- // And give the thread time to wait for the shutdown signal.
- Sleep (100);
-
- if (testinterrupts)
- {
- // This is a worst case scenario for testing interrupts: the
- // main thread is in a long-duration Windows API call. This
- // makes the main thread uninterruptible; cygwin will retry
- // 20 times, with a low_priority_sleep(0) between each try.
- cout << "Sleeping for 30 seconds, waiting for a signal..." << endl;
- Sleep (30000);
- cout << "Done waiting." << endl;
- }
- }
- catch (std::exception &x)
- {
- cerr << x.what () << endl;
- return 2;
- }
-
- if (caught)
- return 0;
- else
- {
- cerr << "Never received SIGUSR1." << endl;
- return 1;
- }
-}
diff --git a/winsup/testsuite/winsup.api/cygload.exp b/winsup/testsuite/winsup.api/cygload.exp
deleted file mode 100644
index a07a549f9..000000000
--- a/winsup/testsuite/winsup.api/cygload.exp
+++ /dev/null
@@ -1,40 +0,0 @@
-source "site.exp"
-
-if { ! [isnative] } {
- verbose "skipping cygload because it's not native \"$target_triplet\" != \"$build_triplet\""
- return
-}
-
-proc ws_spawn {cmd args} {
- global rv
- verbose "running $cmd\n"
- set rv {}
- # First item in rv is the return code, second item is the message
- lappend rv [catch "exec $cmd" message] $message
- verbose send "catchCode = $rv\n"
-}
-
-ws_spawn "gcc -mno-cygwin $srcdir/$subdir/cygload.cc -o mingw-cygload.exe -lstdc++ -Wl,-e,_cygloadCRTStartup@0"
-
-if { $rv != {0 {}} } {
- verbose -log "$rv"
- fail "cygload (compile)"
-} else {
- if { $verbose } {
- set redirect_output "./mingw-cygwin.log"
- } else {
- set redirect_output /dev/null
- }
- set windows_runtime_root [exec cygpath -m $runtime_root]
- ws_spawn "./mingw-cygload.exe -cygwin $windows_runtime_root/cygwin0.dll > $redirect_output"
- if { $rv != {0 {}} } {
- verbose -log "cygload: $rv"
- fail "cygload (execute)"
- } else {
- pass "cygload"
- }
- catch { file delete "mingw-cygload.exe" } err
- if { $err != "" } {
- note "error deleting mingw-cygload.exe: $err"
- }
-}
diff --git a/winsup/testsuite/winsup.api/cygload.h b/winsup/testsuite/winsup.api/cygload.h
deleted file mode 100644
index c7c562093..000000000
--- a/winsup/testsuite/winsup.api/cygload.h
+++ /dev/null
@@ -1,158 +0,0 @@
-// cygload.h -*- C++ -*-
-//
-// Copyright 2005, Red Hat, Inc.
-//
-// Written by Max Kaehn <slothman@electric-cloud.com>
-//
-// This software is a copyrighted work licensed under the terms of the
-// Cygwin license. Please consult the file "CYGWIN_LICENSE" for details.
-//
-// Note that dynamically linking to cygwin1.dll automatically places your code
-// under the GPL unless you purchase a Cygwin Contract with Red Hat, Inc.
-// See http://www.redhat.com/software/cygwin/ for more information.
-
-// This program has large numbers of progress messages so as to provide
-// maximum information about crash locations for anyone without access to
-// a Microsoft debugger.
-
-
-// This file contains the basic infrastructure for connecting an MSVC
-// process to Cygwin.
-
-#ifndef __CYGLOAD_H__
-#define __CYGLOAD_H__
-
-#include <windows.h> // for GetProcAddress()
-#include <functional> // for pointer_to_unary_function
-#include <stdexcept> // for runtime_error
-#include <string>
-#include <map>
-#include <vector>
-
-// Convert GetLastError() to a human-readable STL exception.
-class windows_error : public std::runtime_error
-{
-public:
- windows_error (const char *message, const char *detail = NULL)
- : runtime_error (format (GetLastError (), message, detail)) { }
- windows_error(DWORD error, const char *message, const char *detail = NULL)
- : runtime_error (format (error, message, detail)) { }
-
- static std::string format (DWORD error, const char *message,
- const char *detail);
-};
-
-namespace cygwin
-{
-
- // Cygwin keeps important thread-local information at the top of the
- // stack. Its DllMain-equivalent will do the right thing for any threads
- // you spawn, but you need to declare one of these as the very first thing
- // in your main() function so horrible things won't happen when cygwin
- // overwrites your stack. This will back up the data that will be
- // overwritten and restore it when the destructor is called.
- class padding {
- public:
- padding ();
- ~padding ();
-
- // Verifies that padding has been declared.
- static void check ();
-
- private:
- std::vector< char > _backup;
- char *_stackbase, *_end;
-
- // gdb reports sizeof(_cygtls) == 3964 at the time of this writing.
- // This is at the end of the object so it'll be toward the bottom
- // of the stack when it gets declared.
- char _padding[32768];
-
- static padding *_main;
- static DWORD _mainTID;
- };
-
- // This hooks your application up to cygwin: it loads cygwin1.dll,
- // initializes it properly, grabs some important symbols, and
- // spawns a thread to let you receive signals from cygwin.
- class connector {
- public:
- connector (const char *dll = "cygwin1.dll");
- ~connector ();
-
- // A wrapper around GetProcAddress() for fetching symbols from the
- // cygwin DLL. Can throw windows_error.
- template < class T > void get_symbol (const char *name, T &fn) const;
-
- // Wrappers for errno() and strerror().
- int err_no () const;
- std::string str_error (int) const;
-
- // Converting between the worlds of Windows and Cygwin.
- std::string unix_path (const std::string &windows) const;
- std::string win_path (const std::string &unix) const;
-
- private:
- HMODULE _library;
-
- int *(*_errno) ();
- const char *(*_strerror) (int);
- void (*_conv_to_full_posix_path) (const char *, char *);
- void (*_conv_to_full_win32_path) (const char *, char *);
-
- public:
- // The constructor will automatically hook you up for receiving
- // cygwin signals. Just specify a signal and pass in a signal_handler.
- typedef std::pointer_to_unary_function<int,void> signal_handler;
- signal_handler *set_handler (int signal, signal_handler *);
-
- private:
- // Cygwin signals can only be received in threads that are calling
- // interruptible functions or otherwise ready to intercept signals, so
- // we spawn a thread that does nothing but call sigwait().
-
- // This is the entry point:
- static DWORD WINAPI signal_thread (void *);
- // It runs this:
- void await_signal ();
- // And will execute this on receipt of any signal for which it's
- // registered:
- void handle_signals (int);
-
- HANDLE _signal_thread;
- bool _waiting_for_signals, _signal_thread_done;
- CRITICAL_SECTION _thread_mutex;
-
- typedef std::map< int, signal_handler * > callback_list;
- callback_list _signal_handlers;
- };
-
- template <class T> void connector::get_symbol (const char *name,
- T &symbol) const
- {
- FARPROC retval = NULL;
-
- retval = GetProcAddress (_library, name);
-
- if (retval == NULL)
- throw windows_error ("GetProcAddress", name);
-
- symbol = reinterpret_cast < T > (retval);
- }
-
- // cygwin::error converts errno to a human-readable exception.
- class error : public std::runtime_error
- {
- public:
- error (connector *c, const char *function, const char *detail = NULL)
- : runtime_error (format (c, c->err_no (), function, detail)) { }
- error (connector *c, int err_no, const char *function,
- const char *detail = NULL)
- : runtime_error (format (c, err_no, function, detail)) { }
-
- static std::string format(connector *c, int err_no,
- const char *message, const char *detail);
- };
-}
-
-#endif // __CYGLOAD_H__
diff --git a/winsup/testsuite/winsup.api/devdsp.c b/winsup/testsuite/winsup.api/devdsp.c
deleted file mode 100644
index d5ed65365..000000000
--- a/winsup/testsuite/winsup.api/devdsp.c
+++ /dev/null
@@ -1,783 +0,0 @@
-/* devdsp.c: Device tests for /dev/dsp
-
- Copyright 2004 Red Hat, Inc
-
- Written by Gerd Spalink (Gerd.Spalink@t-online.de)
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-/* Conventions used here:
- We use the libltp framework
- 1. Any unexpected behaviour leads to an exit with nonzero exit status
- 2. Unexpected behaviour from /dev/dsp results in an exit status of TFAIL
- 3. Unexpected behaviour from OS (malloc, fork, waitpid...) result
- in an exit status of TBROK */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <fcntl.h>
-#include <sys/ioctl.h>
-#include <sys/wait.h>
-#include <sys/types.h>
-#include <sys/soundcard.h>
-#include <math.h>
-#include <errno.h>
-#include "test.h" /* use libltp framework */
-
-/* Controls if a child can open the device after the parent */
-#define CHILD_EXPECT 0 /* 0 or 1 */
-
-static const char wavfile_okay[] =
- {
-#include "devdsp_okay.h" /* a sound sample */
- };
-
-/* Globals required by libltp */
-const char *TCID = "devdsp"; /* set test case identifier */
-int TST_TOTAL = 37;
-
-/* Prototypes */
-void sinegen (void *wave, int rate, int bits, int len, int stride);
-void sinegenw (int freq, int samprate, short *value, int len, int stride);
-void sinegenb (int freq, int samprate, unsigned char *value, int len,
- int stride);
-void playtest (int fd, int rate, int stereo, int bits);
-void rectest (int fd, int rate, int stereo, int bits);
-void rwtest (int fd, int rate, int stereo, int bits);
-void setpars (int fd, int rate, int stereo, int bits);
-void forkplaytest (void);
-void forkrectest (void);
-void recordingtest (void);
-void playbacktest (void);
-void monitortest (void);
-void ioctltest (void);
-void abortplaytest (void);
-void playwavtest (void);
-void syncwithchild (pid_t pid, int expected_exit_status);
-void cleanup (void);
-void dup_test (void);
-
-static int expect_child_failure = 0;
-
-/* Sampling rates we want to test */
-static const int rates[] = { 44100, 22050, 8000 };
-
-/* Combinations of stereo/bits we want to test */
-struct sb
-{
- int stereo;
- int bits;
-};
-static const struct sb sblut[] = { {0, 8}, {0, 16}, {1, 8}, {1, 16} };
-
-int
-main (int argc, char *argv[])
-{
- /* tst_brkm(TBROK, cleanup, "see if it breaks all right"); */
- ioctltest ();
- playbacktest ();
- recordingtest ();
- monitortest ();
- forkplaytest ();
- forkrectest ();
- abortplaytest ();
- playwavtest ();
- dup_test ();
- tst_exit ();
- /* NOTREACHED */
- return 0;
-}
-
-/* test some extra ioctls */
-void
-ioctltest (void)
-{
- int audio1;
- int ioctl_par;
- int channels;
-
- tst_resm (TINFO, "Running %s", __FUNCTION__);
- audio1 = open ("/dev/dsp", O_WRONLY);
- if (audio1 < 0)
- {
- tst_brkm (TFAIL, cleanup, "open W: %s", strerror (errno));
- }
- setpars (audio1, 44100, 1, 16);
-
- channels = ioctl_par = 1;
- while (ioctl (audio1, SNDCTL_DSP_CHANNELS, &ioctl_par) == 0)
- {
- channels++;
- ioctl_par = channels;
- }
- if (channels == ioctl_par)
- tst_resm (TFAIL, "Max channels=%d failed", ioctl_par);
- else
- tst_resm (TPASS, "Max channels=%d failed, OK=%d", channels, ioctl_par);
-
- /* Note: block size may depend on parameters */
- if (ioctl (audio1, SNDCTL_DSP_GETBLKSIZE, &ioctl_par) < 0)
- {
- tst_brkm (TFAIL, cleanup, "ioctl GETBLKSIZE: %s", strerror (errno));
- }
- tst_resm (TPASS, "ioctl get buffer size=%d", ioctl_par);
- if (ioctl (audio1, SNDCTL_DSP_GETFMTS, &ioctl_par) < 0)
- {
- tst_brkm (TFAIL, cleanup, "ioctl GETFMTS: %s", strerror (errno));
- }
- tst_resm (TPASS, "ioctl get formats=%08x", ioctl_par);
- if (ioctl (audio1, SNDCTL_DSP_GETCAPS, &ioctl_par) < 0)
- {
- tst_brkm (TFAIL, cleanup, "ioctl GETCAPS: %s", strerror (errno));
- }
- tst_resm (TPASS, "ioctl get caps=%08x", ioctl_par);
- if (close (audio1) < 0)
- {
- tst_brkm (TFAIL, cleanup, "Close audio: %s", strerror (errno));
- }
-}
-
-/* test write / play */
-void
-playbacktest (void)
-{
- int audio1, audio2;
- int rate, k;
-
- tst_resm (TINFO, "Running %s", __FUNCTION__);
- audio1 = open ("/dev/dsp", O_WRONLY);
- if (audio1 < 0)
- {
- tst_brkm (TFAIL, cleanup, "Error open /dev/dsp W: %s",
- strerror (errno));
- }
- audio2 = open ("/dev/dsp", O_WRONLY);
- if (audio2 >= 0)
- {
- tst_brkm (TFAIL, cleanup,
- "Second open /dev/dsp W succeeded, but is expected to fail");
- }
- else if (errno != EBUSY)
- {
- tst_brkm (TFAIL, cleanup, "Expected EBUSY here, exit: %s",
- strerror (errno));
- }
- for (rate = 0; rate < sizeof (rates) / sizeof (int); rate++)
- for (k = 0; k < sizeof (sblut) / sizeof (struct sb); k++)
- {
- playtest (audio1, rates[rate], sblut[k].stereo, sblut[k].bits);
- tst_resm (TPASS, "Play bits=%2d stereo=%d rate=%5d",
- sblut[k].bits, sblut[k].stereo, rates[rate]);
- }
- if (close (audio1) < 0)
- {
- tst_brkm (TFAIL, cleanup, "Close audio: %s", strerror (errno));
- }
-}
-
-/* test read / record */
-void
-recordingtest (void)
-{
- int audio1, audio2;
- int rate, k;
-
- /* test read / record */
- tst_resm (TINFO, "Running %s", __FUNCTION__);
- audio1 = open ("/dev/dsp", O_RDONLY);
- if (audio1 < 0)
- {
- tst_brkm (TFAIL, cleanup, "Error open /dev/dsp R: %s",
- strerror (errno));
- }
- audio2 = open ("/dev/dsp", O_RDONLY);
- if (audio2 >= 0)
- {
- tst_brkm (TFAIL, cleanup,
- "Second open /dev/dsp R succeeded, but is expected to fail");
- }
- else if (errno != EBUSY)
- {
- tst_brkm (TFAIL, cleanup, "Expected EBUSY here, exit: %s",
- strerror (errno));
- }
- for (rate = 0; rate < sizeof (rates) / sizeof (int); rate++)
- for (k = 0; k < sizeof (sblut) / sizeof (struct sb); k++)
- {
- rectest (audio1, rates[rate], sblut[k].stereo, sblut[k].bits);
- tst_resm (TPASS, "Record bits=%2d stereo=%d rate=%5d",
- sblut[k].bits, sblut[k].stereo, rates[rate]);
- }
- if (close (audio1) < 0)
- {
- tst_brkm (TFAIL, cleanup, "Close audio: %s", strerror (errno));
- }
-}
-
-/* simultaneous read/write */
-void
-monitortest (void)
-{
- int fd;
-
- tst_resm (TINFO, "Running %s", __FUNCTION__);
- fd = open ("/dev/dsp", O_RDWR);
- if (fd < 0)
- {
- tst_brkm (TFAIL, cleanup, "open RW: %s", strerror (errno));
- }
- rwtest (fd, 44100, 1, 16);
- tst_resm (TPASS, "Record+Play rate=44100, stereo, 16 bits");
- if (close (fd) < 0)
- {
- tst_brkm (TFAIL, cleanup, "Close audio: %s", strerror (errno));
- }
-}
-
-void
-forkrectest (void)
-{
- int pid;
- int fd;
-
- tst_resm (TINFO, "Running %s", __FUNCTION__);
- fd = open ("/dev/dsp", O_RDONLY);
- if (fd < 0)
- {
- tst_brkm (TFAIL, cleanup, "Error open /dev/dsp R: %s",
- strerror (errno));
- }
- pid = fork ();
- if (pid < 0)
- {
- tst_brkm (TBROK, cleanup, "Fork failed: %s", strerror (errno));
- }
- if (pid)
- {
- tst_resm (TINFO, "forked, child PID=%d", pid);
- syncwithchild (pid, 0);
- tst_resm (TINFO, "parent records..");
- rectest (fd, 22050, 1, 16);
- tst_resm (TINFO, "parent done");
- }
- else
- { /* child */
- tst_resm (TINFO, "child records..");
- rectest (fd, 44100, 1, 16);
- tst_resm (TINFO, "child done");
- fflush (stdout);
- exit (0); /* implicit close */
- }
- tst_resm (TPASS, "child records after fork");
- /* fork again, but now we have done a read before,
- * so the child is expected to fail
- */
- pid = fork ();
- if (pid < 0)
- {
- tst_brkm (TBROK, cleanup, "Fork failed: %s", strerror (errno));
- }
- if (pid)
- {
- tst_resm (TINFO, "forked, child PID=%d", pid);
- syncwithchild (pid, CHILD_EXPECT?TFAIL:0); /* expecting error exit */
- tst_resm (TINFO, "parent records again ..");
- rectest (fd, 22050, 1, 16);
- tst_resm (TINFO, "parent done");
- }
- else
- { /* child */
- expect_child_failure = CHILD_EXPECT;
- tst_resm (TINFO, "child trying to record %s",
- CHILD_EXPECT?"(should fail)..":"");
- rectest (fd, 44100, 1, 16);
- /* NOTREACHED */
- tst_resm (TINFO, "child done");
- fflush (stdout);
- exit (0); /* implicit close */
- }
- if (close (fd) < 0)
- {
- tst_brkm (TFAIL, cleanup, "Close audio: %s", strerror (errno));
- }
- tst_resm (TPASS, "child tries to record while parent is already recording");
-}
-
-void
-forkplaytest (void)
-{
- int pid;
- int fd;
-
- tst_resm (TINFO, "Running %s", __FUNCTION__);
- fd = open ("/dev/dsp", O_WRONLY);
- if (fd < 0)
- {
- tst_brkm (TFAIL, cleanup, "Error open /dev/dsp R: %s",
- strerror (errno));
- }
- pid = fork ();
- if (pid < 0)
- {
- tst_brkm (TBROK, cleanup, "Fork failed: %s", strerror (errno));
- }
- if (pid)
- {
- tst_resm (TINFO, "forked, child PID=%d", pid);
- syncwithchild (pid, 0);
- tst_resm (TINFO, "parent plays..");
- playtest (fd, 22050, 0, 8);
- tst_resm (TINFO, "parent done");
- }
- else
- { /* child */
- tst_resm (TINFO, "child plays..");
- playtest (fd, 44100, 1, 16);
- tst_resm (TINFO, "child done");
- fflush (stdout);
- exit (0); /* implicit close */
- }
- tst_resm (TPASS, "child plays after fork");
- /* fork again, but now we have done a write before,
- * so the child is expected to fail
- */
- pid = fork ();
- if (pid < 0)
- {
- tst_brkm (TBROK, cleanup, "Fork failed");
- }
- if (pid)
- {
- tst_resm (TINFO, "forked, child PID=%d", pid);
- syncwithchild (pid, CHILD_EXPECT?TFAIL:0); /* expected failure */
- tst_resm (TINFO, "parent plays again..");
- playtest (fd, 22050, 0, 8);
- tst_resm (TINFO, "parent done");
- }
- else
- { /* child */
- expect_child_failure = CHILD_EXPECT;
- tst_resm (TINFO, "child trying to play %s",
- CHILD_EXPECT?"(should fail)..":"");
- playtest (fd, 44100, 1, 16);
- /* NOTREACHED */
- tst_resm (TINFO, "child done");
- fflush (stdout);
- exit (0); /* implicit close */
- }
- if (close (fd) < 0)
- {
- tst_brkm (TFAIL, cleanup, "Close audio: %s", strerror (errno));
- }
- tst_resm (TPASS, "child tries to play while parent is already playing");
-}
-
-void
-playtest (int fd, int rate, int stereo, int bits)
-{ /* Play sine waves, always 0.25 sec */
- void *wave;
- int n, c, b;
- int size;
- if (stereo)
- c = 2;
- else
- c = 1;
- if (bits == 8)
- b = 1;
- else
- b = 2;
- size = rate / 4 * c * b;
-
- wave = malloc (size);
- if (wave == NULL)
- {
- tst_brkm (TBROK, cleanup, "Malloc failed, exit");
- }
- setpars (fd, rate, stereo, bits);
- sinegen (wave, rate, bits, rate / 4, c);
-
- if ((n = write (fd, wave, size)) < 0)
- {
- tst_brkm (TFAIL, cleanup, "write: %s", strerror (errno));
- }
- if (n != size)
- {
- tst_brkm (TFAIL, cleanup, "Wrote %d, expected %d; exit", n, size);
- }
- free (wave);
-}
-
-void
-rectest (int fd, int rate, int stereo, int bits)
-{
- void *wave;
- int n, c, b;
- int size;
- if (stereo)
- c = 2;
- else
- c = 1;
- if (bits == 8)
- b = 1;
- else
- b = 2;
- size = rate / 4 * c * b;
-
- wave = malloc (size);
- if (wave == NULL)
- {
- tst_brkm (TBROK, cleanup, "Malloc failed, exit");
- }
- setpars (fd, rate, stereo, bits);
- if ((n = read (fd, wave, size)) < 0)
- {
- tst_brkm (TFAIL, cleanup, "read: %s", strerror (errno));
- }
- if (n != size)
- {
- tst_brkm (TFAIL, cleanup, "Read n=%d (%d expected); exit", n, size);
- }
- if ((n = read (fd, wave, size)) < 0)
- {
- tst_brkm (TFAIL, cleanup, "read: %s", strerror (errno));
- }
- if (n != size)
- {
- tst_brkm (TFAIL, cleanup, "Read n=%d (%d expected); exit", n, size);
- }
- free (wave);
-}
-
-void
-rwtest (int fd, int rate, int stereo, int bits)
-{
- int pid;
- void *wave;
- int n, c, b;
- int size;
- if (stereo)
- c = 2;
- else
- c = 1;
- if (bits == 8)
- b = 1;
- else
- b = 2;
- size = rate / 4 * c * b;
-
- wave = malloc (size);
- if (wave == NULL)
- {
- tst_brkm (TBROK, cleanup, "Malloc failed, exit");
- }
- setpars (fd, rate, stereo, bits);
- pid = fork ();
- if (pid < 0)
- {
- tst_brkm (TBROK, cleanup, "Fork failed: %s", strerror (errno));
- }
- if (pid)
- {
- tst_resm (TINFO, "forked, child PID=%d parent records", pid);
- if ((n = read (fd, wave, size)) < 0)
- {
- tst_brkm (TFAIL, cleanup, "read: %s", strerror (errno));
- }
- if (n != size)
- {
- tst_brkm (TFAIL, cleanup, "Read n=%d (%d expected)", n, size);
- }
- free (wave);
- syncwithchild (pid, 0);
- }
- else
- { /* child */
- tst_resm (TINFO, "child plays");
- sinegen (wave, rate, bits, rate / 4, c);
- if ((n = write (fd, wave, size)) < 0)
- {
- tst_brkm (TFAIL, cleanup, "child write: %s", strerror (errno));
- }
- if (n != size)
- {
- tst_brkm (TFAIL, cleanup, "child write n=%d OK (%d expected)", n,
- size);
- }
- free (wave);
- exit (0);
- }
-}
-
-void
-setpars (int fd, int rate, int stereo, int bits)
-{
- int ioctl_par = 0;
-
- if (ioctl (fd, SNDCTL_DSP_SAMPLESIZE, &bits) < 0)
- {
- if (expect_child_failure)
- { /* Note: Don't print this to stderr because we expect failures here
- * for the some cases after fork()
- */
- tst_resm (TINFO, "ioctl SNDCTL_DSP_SAMPLESIZE: %s",
- strerror (errno));
- exit (TFAIL);
- }
- else
- {
- tst_brkm (TFAIL, cleanup, "ioctl SNDCTL_DSP_SAMPLESIZE: %s",
- strerror (errno));
- }
- }
- if (ioctl (fd, SNDCTL_DSP_STEREO, &stereo) < 0)
- {
- tst_brkm (TFAIL, cleanup, "ioctl SNDCTL_DSP_STEREO: %s",
- strerror (errno));
- }
- if (ioctl (fd, SNDCTL_DSP_SPEED, &rate) < 0)
- {
- tst_brkm (TFAIL, cleanup, "ioctl SNDCTL_DSP_SPEED: %s",
- strerror (errno));
- }
- if (ioctl (fd, SNDCTL_DSP_SYNC, &ioctl_par) < 0)
- {
- tst_brkm (TFAIL, cleanup, "ioctl SNDCTL_DSP_SYNC: %s",
- strerror (errno));
- }
-}
-
-void
-syncwithchild (pid_t pid, int expected_exit_status)
-{
- int status;
-
- if (waitpid (pid, &status, 0) != pid)
- {
- tst_brkm (TBROK, cleanup, "Wait for child: %s", strerror (errno));
- }
- if (!WIFEXITED (status))
- {
- tst_brkm (TBROK, cleanup, "Child had abnormal exit");
- }
- if (WEXITSTATUS (status) != expected_exit_status)
- {
- tst_brkm (TFAIL, cleanup, "Child had exit status %d != %d",
- WEXITSTATUS (status), expected_exit_status);
- }
-}
-
-void
-sinegen (void *wave, int rate, int bits, int len, int stride)
-{
- if (bits == 8)
- {
- sinegenb (1000, rate, (unsigned char *) wave, len, stride);
- if (stride == 2)
- sinegenb (800, rate, (unsigned char *) wave + 1, len, stride);
- }
- else
- {
- sinegenw (1000, rate, (short *) wave, len, stride);
- if (stride == 2)
- sinegenw (800, rate, (short *) wave + 1, len, stride);
- }
-}
-
-void
-sinegenw (int freq, int samprate, short *value, int len, int stride)
-{
- double phase, incr;
-
- phase = 0.0;
- incr = M_PI * 2.0 * (double) freq / (double) samprate;
- while (len-- > 0)
- {
- *value = (short) floor (0.5 + 6553 * sin (phase));
- value += stride;
- phase += incr;
- }
-}
-
-void
-sinegenb (int freq, int samprate, unsigned char *value, int len, int stride)
-{
- double phase, incr;
-
- phase = 0.0;
- incr = M_PI * 2.0 * (double) freq / (double) samprate;
- while (len-- > 0)
- {
- *value = (unsigned char) floor (128.5 + 26 * sin (phase));
- value += stride;
- phase += incr;
- }
-}
-
-void
-abortplaytest (void)
-{
- int audio;
- int size = sizeof (wavfile_okay);
- int n;
- int ioctl_par = 0;
-
- tst_resm (TINFO, "Running %s", __FUNCTION__);
- audio = open ("/dev/dsp", O_WRONLY);
- if (audio < 0)
- {
- tst_brkm (TFAIL, cleanup, "Error open /dev/dsp W: %s",
- strerror (errno));
- }
- if ((n = write (audio, wavfile_okay, size)) < 0)
- {
- tst_brkm (TFAIL, cleanup, "write: %s", strerror (errno));
- }
- if (n != size)
- {
- tst_brkm (TFAIL, cleanup, "Wrote %d, expected %d; exit", n, size);
- }
- if (ioctl (audio, SNDCTL_DSP_RESET, &ioctl_par) < 0)
- {
- tst_brkm (TFAIL, cleanup, "ioctl DSP_RESET: %s", strerror (errno));
- }
- if (close (audio) < 0)
- {
- tst_brkm (TFAIL, cleanup, "Close audio: %s", strerror (errno));
- }
- tst_resm (TPASS, "Playwav + ioctl DSP_RESET=%d", ioctl_par);
-}
-
-void
-playwavtest (void)
-{
- int audio;
- int size = sizeof (wavfile_okay);
- int n;
-
- tst_resm (TINFO, "Running %s", __FUNCTION__);
- audio = open ("/dev/dsp", O_WRONLY);
- if (audio < 0)
- {
- tst_brkm (TFAIL, cleanup, "Error open /dev/dsp W: %s",
- strerror (errno));
- }
- if ((n = write (audio, wavfile_okay, size)) < 0)
- {
- tst_brkm (TFAIL, cleanup, "write: %s", strerror (errno));
- }
- if (n != size)
- {
- tst_brkm (TFAIL, cleanup, "Wrote %d, expected %d; exit", n, size);
- }
- if (close (audio) < 0)
- {
- tst_brkm (TFAIL, cleanup, "Close audio: %s", strerror (errno));
- }
- tst_resm (TPASS, "Set parameters from wave file header");
-}
-
-void dup_test (void)
-{
- int audio, fd, n;
- int bits1, bits2;
- int size = sizeof (wavfile_okay);
- int header = 44;
- const char *okay = wavfile_okay + header;
-
- tst_resm (TINFO, "Running %s", __FUNCTION__);
- audio = open ("/dev/dsp", O_WRONLY);
- if (audio < 0)
- {
- tst_brkm (TFAIL, cleanup, "Error open /dev/dsp W: %s",
- strerror (errno));
- }
- /* write header once to set parameters correctly */
- n = write (audio, wavfile_okay, header);
- if (n != header)
- {
- tst_brkm (TFAIL, cleanup, "Wrote %d, expected %d; exit", n, header);
- }
- size = size - header;
- /* dup / close */
- for (fd = audio+1; fd <= audio+5; fd++)
- if (dup2 (fd-1, fd) != -1)
- {
- if (fd-2 >= audio)
- if (close (fd-2) < 0)
- {
- tst_brkm (TFAIL, cleanup, "Close audio: %s", strerror (errno));
- }
- if ((n = write (fd, okay, size)) < 0)
- {
- tst_brkm (TFAIL, cleanup, "write: %s", strerror (errno));
- }
- if (n != size)
- {
- tst_brkm (TFAIL, cleanup, "Wrote %d, expected %d; exit", n, size);
- }
- }
- else
- tst_brkm (TFAIL, cleanup, "dup: %s", strerror (errno));
-
- for (fd = audio+4; fd <= audio+5; fd++)
- if (close (fd) < 0)
- {
- tst_brkm (TFAIL, cleanup, "Close audio: %s", strerror (errno));
- }
- tst_resm (TPASS, "Write to duped fd");
-
- audio = open ("/dev/dsp", O_WRONLY);
- if (audio < 0)
- {
- tst_brkm (TFAIL, cleanup, "Error open /dev/dsp W: %s",
- strerror (errno));
- }
- fd = audio + 1;
- if (dup2 (audio, fd) == -1)
- {
- tst_brkm (TFAIL, cleanup, "dup: %s", strerror (errno));
- }
- bits1 = AFMT_U8;
- if (ioctl (audio, SNDCTL_DSP_SAMPLESIZE, &bits1) < 0)
- {
- tst_brkm (TFAIL, cleanup, "ioctl: %s", strerror (errno));
- }
- bits1 = AFMT_S16_LE;
- if (ioctl (fd, SNDCTL_DSP_SAMPLESIZE, &bits1) < 0)
- {
- tst_brkm (TFAIL, cleanup, "ioctl: %s", strerror (errno));
- }
- bits1 = AFMT_QUERY;
- if (ioctl (audio, SNDCTL_DSP_SAMPLESIZE, &bits1) < 0)
- {
- tst_brkm (TFAIL, cleanup, "ioctl: %s", strerror (errno));
- }
- bits2 = AFMT_QUERY;
- if (ioctl (fd, SNDCTL_DSP_SAMPLESIZE, &bits2) < 0)
- {
- tst_brkm (TFAIL, cleanup, "ioctl: %s", strerror (errno));
- }
- if (bits1 != AFMT_S16_LE || bits2 != AFMT_S16_LE)
- {
- tst_brkm (TFAIL, cleanup, "Inconsistent state of duped fd: %d %d %d",
- AFMT_S16_LE,bits1,bits2);
- }
- if (close (audio) < 0)
- {
- tst_brkm (TFAIL, cleanup, "Close audio: %s", strerror (errno));
- }
- if (close (fd) < 0)
- {
- tst_brkm (TFAIL, cleanup, "Close audio: %s", strerror (errno));
- }
- tst_resm (TPASS, "Parameter change to duped fd");
-}
-void
-cleanup (void)
-{
-}
diff --git a/winsup/testsuite/winsup.api/devdsp_okay.h b/winsup/testsuite/winsup.api/devdsp_okay.h
deleted file mode 100644
index 0fefa635c..000000000
--- a/winsup/testsuite/winsup.api/devdsp_okay.h
+++ /dev/null
@@ -1,531 +0,0 @@
-/* This is the decimal representation of a wave file.
- It contains the spoken word "okay" sampled at 11025 Hz
- and 8 bit resolution. */
- 82, 73, 70, 70, 108, 30, 0, 0, 87, 65, 86, 69, 102, 109, 116, 32, 16, 0, 0,
- 0, 1, 0, 1, 0, 17, 43, 0, 0, 17, 43, 0, 0, 1, 0, 8, 0, 100, 97, 116, 97,
- 72, 30, 0, 0, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116,
- 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116,
- 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
- 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116,
- 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 115, 114, 114, 115, 115,
- 115, 117, 117, 117, 116, 115, 115, 115, 115, 116, 116, 116, 118, 116, 115,
- 115, 115, 115, 115, 116, 116, 116, 117, 116, 116, 115, 116, 116, 116, 116,
- 117, 116, 116, 117, 116, 115, 116, 116, 116, 117, 117, 117, 116, 116, 117,
- 116, 116, 116, 117, 117, 117, 117, 116, 116, 116, 118, 117, 117, 117, 117,
- 116, 116, 116, 116, 116, 116, 117, 117, 117, 117, 116, 116, 116, 116, 116,
- 116, 116, 117, 116, 116, 116, 115, 116, 116, 116, 116, 116, 117, 116, 116,
- 116, 116, 116, 116, 116, 116, 116, 116, 117, 115, 115, 116, 116, 116, 116,
- 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117,
- 116, 117, 117, 117, 117, 117, 117, 117, 117, 117, 118, 119, 118, 118, 118,
- 118, 119, 119, 119, 119, 119, 120, 120, 120, 120, 121, 120, 120, 120, 120,
- 121, 121, 120, 119, 118, 116, 115, 114, 115, 114, 113, 112, 112, 111, 112,
- 113, 114, 116, 116, 117, 117, 117, 116, 115, 115, 115, 115, 116, 115, 115,
- 114, 114, 114, 114, 114, 114, 114, 116, 115, 115, 115, 114, 114, 113, 113,
- 114, 115, 115, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116,
- 115, 115, 115, 115, 116, 116, 116, 118, 117, 117, 117, 117, 117, 118, 118,
- 119, 119, 119, 120, 120, 120, 120, 120, 120, 121, 121, 121, 120, 119, 118,
- 117, 117, 117, 116, 117, 116, 116, 115, 115, 115, 115, 115, 116, 116, 117,
- 116, 116, 116, 116, 116, 116, 116, 115, 115, 115, 114, 113, 113, 113, 113,
- 113, 113, 113, 115, 114, 113, 113, 113, 113, 114, 114, 114, 115, 114, 114,
- 114, 114, 114, 114, 114, 115, 116, 115, 115, 115, 115, 114, 114, 115, 115,
- 115, 117, 116, 116, 116, 116, 116, 116, 117, 117, 118, 118, 119, 118, 118,
- 118, 118, 119, 120, 120, 121, 121, 122, 122, 123, 124, 125, 126, 127, 126,
- 126, 126, 126, 127, -127, 124, 114, 102, 94, 89, 94, 102, 109, 115, 120,
- 124, 123, 122, 121, 117, 116, 121, 124, 125, 124, 120, 114, 109, 107, 105,
- 104, 108, 111, 115, 118, 120, 118, 116, 114, 114, 116, 117, 119, 120, 119,
- 118, 116, 113, 112, 111, 113, 117, 120, 122, 122, 121, 118, 115, 114, 113,
- 112, 113, 114, 113, 114, 114, 112, 111, 110, 110, 113, 116, 118, 119, 120,
- 119, 116, 115, 114, 112, 111, 114, 114, 115, 115, 113, 110, 109, 110, 113,
- 115, 118, 120, 120, 119, 119, 116, 114, 112, 112, 113, 114, 115, 115, 114,
- 115, 114, 114, 115, 117, 117, 118, 119, 119, 118, 117, 116, 115, 115, 116,
- 116, 118, 119, 119, 119, 118, 118, 118, 119, 120, 121, 122, 123, 123, 123,
- 122, 122, 124, 122, 121, 119, 118, 117, 115, 115, 115, 115, 116, 117, 118,
- 118, 119, 117, 112, 110, 110, 110, 111, 117, 118, 118, 118, 119, 118, 116,
- 115, 114, 114, 116, 118, 118, 116, 116, 115, 113, 112, 113, 113, 114, 117,
- 117, 117, 117, 115, 113, 112, 111, 108, 108, 110, 111, 113, 115, 116, 115,
- 115, 116, 116, 114, 115, 115, 114, 115, 114, 112, 111, 113, 112, 113, 115,
- 116, 117, 118, 118, 117, 116, 117, 115, 115, 116, 117, 117, 118, 118, 119,
- 119, 119, 120, 122, 122, 124, 125, 126, -128, -127, -126, -124, -121,
- -117, -112, -113, -123, 121, 108, 91, 75, 75, 84, 91, 103, 119, 127, -128,
- -126, -127, 124, 120, 122, 121, 123, 127, 126, 120, 114, 110, 104, 99,
- 101, 104, 107, 114, 120, 123, 123, 122, 119, 116, 116, 117, 116, 117, 118,
- 117, 115, 113, 111, 110, 111, 113, 116, 120, 123, 124, 123, 121, 118, 115,
- 113, 112, 112, 112, 114, 113, 112, 110, 107, 107, 107, 110, 112, 116, 119,
- 120, 119, 118, 115, 113, 110, 110, 111, 112, 113, 114, 114, 116, 115, 114,
- 115, 116, 117, 118, 119, 119, 118, 117, 116, 115, 113, 114, 114, 115, 117,
- 119, 119, 120, 120, 120, 121, 122, 123, 123, 125, 127, -128, -127, -126,
- -126, -124, -121, -120, -119, -123, 124, 113, 101, 90, 81, 81, 87, 96,
- 108, 121, 127, -127, -125, -125, 126, 122, 121, 120, 120, 122, 121, 118,
- 114, 110, 106, 103, 102, 104, 106, 112, 117, 120, 122, 123, 122, 119, 117,
- 117, 116, 115, 116, 116, 115, 115, 114, 113, 113, 113, 115, 117, 119, 120,
- 120, 120, 118, 114, 112, 110, 108, 108, 108, 109, 110, 112, 111, 112, 112,
- 112, 112, 112, 114, 117, 117, 118, 117, 115, 113, 112, 111, 111, 113, 114,
- 116, 118, 119, 119, 118, 118, 118, 117, 117, 117, 118, 117, 118, 118, 118,
- 119, 119, 120, 121, 122, 124, 126, 127, -128, -127, -124, -122, -120,
- -117, -115, -117, -125, 119, 102, 85, 77, 76, 83, 91, 103, 115, 124, -125,
- -122, -126, 124, 121, 119, 119, 121, 122, 121, 118, 117, 114, 109, 106,
- 103, 102, 107, 112, 117, 119, 122, 122, 120, 119, 117, 114, 112, 114, 114,
- 115, 116, 115, 114, 114, 114, 114, 116, 116, 118, 119, 120, 121, 119, 116,
- 113, 109, 108, 107, 107, 109, 111, 112, 113, 114, 115, 113, 112, 112, 112,
- 113, 114, 115, 116, 115, 114, 113, 113, 113, 113, 113, 114, 117, 117, 118,
- 118, 117, 117, 117, 116, 116, 117, 117, 118, 119, 118, 118, 118, 118, 119,
- 120, 121, 122, 124, 126, -128, -127, -125, -124, -123, -120, -117, -114,
- -115, -123, 119, 102, 84, 76, 76, 80, 90, 102, 115, 125, -124, -120, -125,
- 124, 121, 119, 119, 120, 121, 121, 120, 119, 117, 110, 105, 101, 101, 104,
- 110, 114, 118, 121, 123, 122, 120, 118, 115, 113, 114, 116, 116, 117, 117,
- 115, 115, 114, 114, 113, 114, 117, 118, 120, 120, 119, 117, 114, 111, 109,
- 107, 107, 107, 109, 112, 115, 115, 115, 115, 115, 114, 113, 113, 113, 113,
- 114, 114, 114, 114, 113, 113, 113, 114, 116, 117, 118, 119, 119, 120, 118,
- 118, 117, 116, 117, 117, 118, 118, 118, 119, 119, 120, 121, 121, 121, 123,
- 124, 125, 126, -128, -127, -124, -121, -118, -116, -112, -114, -123, 118,
- 99, 81, 75, 77, 82, 92, 104, 114, 125, -123, -122, -128, 123, 120, 118,
- 119, 121, 121, 120, 121, 121, 117, 112, 107, 102, 102, 105, 110, 114, 118,
- 121, 124, 123, 121, 118, 114, 113, 113, 113, 115, 116, 116, 117, 117, 116,
- 115, 115, 115, 115, 116, 118, 119, 118, 118, 115, 112, 110, 107, 106, 107,
- 110, 112, 115, 117, 118, 117, 117, 115, 113, 112, 112, 111, 112, 113, 113,
- 113, 114, 114, 116, 115, 116, 117, 118, 119, 119, 118, 118, 117, 116, 115,
- 116, 116, 117, 118, 119, 121, 120, 120, 121, 121, 121, 121, 121, 122, 123,
- 125, 125, 126, -127, -124, -122, -119, -117, -115, -117, -123, 120, 102,
- 88, 81, 80, 85, 92, 100, 110, 120, -127, -125, 127, 123, 121, 120, 121,
- 122, 121, 121, 123, 122, 119, 114, 109, 104, 103, 104, 107, 110, 114, 117,
- 119, 121, 121, 119, 117, 114, 114, 114, 116, 117, 117, 117, 118, 118, 117,
- 115, 113, 113, 113, 115, 116, 117, 116, 114, 113, 110, 109, 109, 110, 111,
- 113, 116, 117, 117, 116, 115, 112, 111, 110, 109, 112, 113, 115, 117, 118,
- 117, 117, 116, 115, 114, 115, 115, 116, 118, 119, 120, 120, 120, 118, 117,
- 116, 116, 116, 118, 118, 120, 121, 122, 122, 122, 120, 120, 120, 121, 123,
- 125, 127, -126, -123, -121, -120, -119, -118, -120, -128, 115, 101, 91,
- 87, 86, 89, 94, 100, 109, 117, 123, 125, 123, 121, 119, 119, 120, 121,
- 120, 121, 122, 122, 121, 117, 112, 107, 105, 106, 106, 108, 111, 113, 117,
- 119, 119, 118, 117, 114, 113, 114, 115, 116, 117, 118, 119, 120, 118, 117,
- 114, 112, 112, 113, 113, 114, 114, 114, 114, 112, 111, 110, 110, 110, 111,
- 113, 114, 115, 115, 115, 113, 112, 111, 110, 111, 111, 113, 115, 116, 117,
- 117, 117, 116, 115, 115, 113, 114, 115, 116, 118, 119, 120, 120, 119, 118,
- 118, 117, 116, 117, 118, 119, 120, 121, 121, 121, 121, 121, 121, 121, 122,
- 123, 125, 127, -128, -126, -124, -122, -120, -120, -126, 119, 108, 101,
- 93, 91, 93, 93, 97, 105, 112, 117, 120, 120, 118, 117, 118, 118, 117, 118,
- 120, 122, 123, 123, 121, 116, 114, 110, 108, 107, 107, 108, 110, 114, 116,
- 117, 117, 116, 115, 114, 114, 114, 115, 117, 117, 119, 120, 120, 119, 118,
- 116, 115, 114, 113, 113, 112, 112, 112, 111, 111, 111, 111, 112, 112, 113,
- 113, 115, 116, 116, 116, 115, 115, 113, 113, 113, 113, 114, 115, 116, 117,
- 117, 117, 116, 116, 115, 116, 116, 116, 117, 118, 119, 120, 120, 120, 119,
- 119, 118, 118, 117, 117, 118, 119, 119, 120, 121, 121, 122, 123, 121, 121,
- 121, 122, 123, 125, 127, -127, -126, -125, -124, -127, 122, 115, 109, 103,
- 100, 101, 100, 102, 105, 109, 114, 115, 115, 115, 113, 113, 114, 114, 115,
- 117, 120, 121, 122, 123, 121, 118, 116, 113, 112, 111, 111, 111, 112, 114,
- 115, 116, 116, 115, 114, 113, 114, 113, 113, 114, 115, 117, 120, 121, 121,
- 120, 119, 118, 117, 115, 113, 113, 113, 113, 114, 114, 113, 113, 111, 111,
- 111, 111, 112, 112, 114, 116, 116, 117, 116, 116, 115, 115, 114, 114, 114,
- 116, 116, 117, 118, 118, 118, 118, 117, 117, 116, 116, 116, 118, 118, 119,
- 119, 118, 118, 118, 117, 117, 117, 117, 117, 119, 119, 119, 120, 120, 120,
- 120, 120, 119, 119, 119, 119, 120, 120, 120, 121, 120, 120, 120, 120, 120,
- 120, 119, 118, 117, 115, 114, 113, 113, 112, 112, 112, 112, 113, 113, 113,
- 114, 113, 113, 113, 113, 113, 114, 115, 116, 118, 117, 117, 117, 116, 116,
- 116, 115, 115, 115, 115, 116, 115, 115, 115, 115, 115, 115, 115, 115, 115,
- 117, 116, 117, 117, 117, 117, 117, 117, 117, 116, 116, 117, 116, 115, 115,
- 115, 115, 115, 115, 115, 114, 115, 114, 114, 114, 114, 114, 115, 115, 116,
- 117, 116, 116, 116, 116, 116, 116, 116, 116, 117, 117, 118, 117, 117, 117,
- 116, 116, 116, 116, 116, 117, 117, 118, 118, 117, 117, 117, 117, 117, 117,
- 117, 117, 117, 117, 118, 117, 117, 117, 116, 116, 116, 116, 116, 117, 117,
- 118, 117, 117, 117, 117, 116, 117, 117, 117, 117, 117, 117, 118, 117, 117,
- 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 115, 115,
- 115, 115, 115, 116, 114, 114, 115, 115, 115, 115, 116, 116, 116, 117, 116,
- 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116,
- 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 117, 117, 117,
- 118, 117, 117, 117, 117, 117, 117, 117, 117, 116, 116, 116, 117, 115, 115,
- 116, 116, 116, 117, 117, 117, 117, 117, 118, 117, 117, 117, 117, 117, 117,
- 117, 117, 117, 117, 117, 116, 116, 116, 116, 116, 116, 116, 117, 117, 116,
- 117, 116, 116, 116, 117, 117, 117, 117, 117, 117, 117, 118, 117, 117, 116,
- 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 117, 117,
- 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117,
- 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116,
- 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116,
- 116, 118, 117, 117, 117, 116, 116, 116, 116, 116, 115, 116, 116, 116, 116,
- 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116,
- 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 115,
- 115, 115, 116, 116, 117, 117, 117, 117, 117, 118, 116, 116, 116, 116, 116,
- 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 117, 117,
- 117, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116,
- 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116,
- 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117,
- 116, 117, 117, 116, 116, 116, 116, 116, 115, 116, 116, 116, 116, 116, 116,
- 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116,
- 116, 117, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 115, 115, 116,
- 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116,
- 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116,
- 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116,
- 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
- 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 117, 117, 117,
- 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116,
- 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116,
- 116, 117, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116,
- 116, 116, 116, 116, 117, 116, 117, 116, 117, 117, 117, 117, 117, 116, 116,
- 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116,
- 116, 116, 116, 117, 116, 116, 117, 117, 116, 116, 116, 117, 116, 116, 116,
- 116, 116, 116, 117, 117, 117, 116, 116, 116, 116, 116, 116, 116, 116, 117,
- 116, 116, 116, 116, 116, 117, 117, 116, 116, 117, 118, 117, 117, 117, 117,
- 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 117, 117,
- 117, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116,
- 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116,
- 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117,
- 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116,
- 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116,
- 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116,
- 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116,
- 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117,
- 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116,
- 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116,
- 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116,
- 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116,
- 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117,
- 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116,
- 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116,
- 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116,
- 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116,
- 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116,
- 114, 108, 108, 118, 125, -126, 123, 98, 95, 109, 117, 124, 127, 123, 118,
- 109, 103, 113, 125, -127, 120, 108, 106, 112, 115, 112, 110, 112, 111,
- 112, 112, 116, 120, 120, 118, 114, 113, 120, 122, 119, 116, 115, 115, 117,
- 117, 116, 115, 115, 115, 112, 107, 109, 119, 121, 120, 118, 114, 117, 120,
- 118, 119, 119, 117, 119, 116, 113, 119, 120, 117, 114, 112, 114, 117, 117,
- 116, 113, 114, 118, 117, 117, 119, 121, 118, 113, 114, 116, 116, 118, 116,
- 114, 113, 111, 112, 117, 118, 121, 119, 117, 117, 113, 110, 114, 117, 119,
- 117, 114, 113, 113, 114, 115, 115, 117, 117, 114, 114, 116, 119, 121, 119,
- 115, 116, 117, 117, 120, 122, 121, 115, 109, 112, 117, 117, 116, 115, 116,
- 117, 113, 113, 116, 118, 118, 115, 115, 118, 120, 120, 120, 118, 119, 120,
- 119, 119, 118, 119, 119, 117, 116, 117, 118, 119, 116, 115, 117, 118, 118,
- 118, 118, 118, 119, 119, 120, 120, 121, 120, 118, 118, 119, 119, 119, 118,
- 118, 117, 116, 117, 117, 118, 118, 117, 116, 117, 116, 117, 119, 118, 117,
- 116, 118, 120, 117, 117, 119, 120, 119, 118, 118, 118, 119, 118, 117, 116,
- 119, 118, 117, 116, 117, 118, 118, 117, 116, 117, 118, 117, 116, 116, 117,
- 118, 117, 115, 116, 118, 119, 117, 117, 119, 117, 117, 116, 117, 118, 118,
- 117, 116, 116, 117, 117, 117, 116, 116, 116, 117, 116, 115, 116, 116, 116,
- 118, 117, 116, 116, 117, 117, 117, 117, 117, 116, 115, 116, 116, 117, 118,
- 116, 114, 115, 115, 116, 116, 117, 117, 115, 115, 116, 116, 118, 118, 117,
- 117, 116, 116, 117, 117, 118, 117, 116, 116, 115, 115, 115, 115, 116, 118,
- 116, 115, 115, 116, 116, 116, 116, 117, 117, 117, 118, 117, 117, 117, 117,
- 116, 116, 116, 117, 115, 115, 114, 114, 115, 115, 115, 116, 115, 114, 114,
- 117, 116, 116, 115, 115, 115, 116, 116, 116, 116, 116, 115, 116, 116, 116,
- 116, 115, 115, 115, 116, 115, 115, 115, 116, 116, 116, 116, 115, 115, 116,
- 116, 117, 116, 116, 116, 117, 117, 116, 116, 116, 117, 117, 118, 117, 117,
- 117, 117, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 117,
- 118, 118, 117, 118, 117, 117, 117, 117, 117, 118, 117, 117, 116, 115, 117,
- 117, 117, 116, 115, 116, 117, 117, 117, 117, 117, 117, 116, 117, 117, 117,
- 116, 115, 115, 116, 117, 118, 116, 116, 118, 117, 116, 117, 117, 117, 116,
- 116, 116, 117, 116, 117, 115, 115, 116, 117, 117, 116, 115, 115, 117, 118,
- 119, 117, 116, 116, 115, 116, 117, 117, 116, 115, 115, 117, 117, 117, 115,
- 115, 115, 115, 114, 115, 116, 116, 115, 116, 116, 116, 116, 115, 116, 116,
- 116, 116, 115, 116, 116, 116, 116, 115, 116, 117, 116, 117, 118, 116, 116,
- 116, 116, 116, 117, 117, 117, 117, 118, 118, 117, 118, 118, 117, 116, 117,
- 117, 118, 118, 117, 115, 117, 118, 118, 118, 117, 115, 115, 117, 118, 117,
- 116, 116, 114, 115, 117, 117, 117, 116, 115, 116, 116, 116, 117, 116, 116,
- 115, 115, 115, 115, 116, 115, 114, 116, 115, 115, 115, 114, 113, 113, 113,
- 113, 114, 113, 112, 111, 113, 114, 113, 113, 114, 112, 113, 113, 113, 114,
- 113, 113, 113, 114, 114, 114, 114, 114, 114, 115, 115, 116, 117, 116, 116,
- 116, 117, 117, 117, 117, 117, 117, 118, 118, 120, 120, 121, 120, 120, 122,
- 123, 123, 125, 126, 127, -128, -128, -126, -124, -121, -117, -112, -113,
- -127, 106, 94, 105, 117, 114, 106, 94, 85, 89, 105, 116, 121, 118, 109,
- 106, 116, 127, -126, 127, 121, 116, 115, 117, 117, 117, 116, 112, 103, 99,
- 106, 110, 111, 108, 103, 104, 109, 112, 115, 116, 114, 111, 110, 113, 116,
- 118, 116, 112, 110, 111, 112, 112, 114, 115, 113, 111, 111, 113, 116, 118,
- 116, 115, 115, 117, 119, 120, 120, 120, 121, 122, 125, -126, -121, -119,
- -116, -111, -107, -100, -101, -111, 110, 73, 90, 124, 119, 96, 82, 71, 71,
- 95, 119, -127, 126, 114, 103, 115, -117, -108, -116, -126, 123, 119, 116,
- 114, 116, 118, 112, 101, 91, 93, 103, 112, 113, 107, 108, 111, 114, 120,
- 125, 124, 119, 111, 110, 116, 120, 117, 112, 107, 106, 108, 112, 112, 114,
- 114, 110, 107, 110, 115, 118, 117, 114, 111, 110, 112, 114, 116, 116, 114,
- 110, 110, 113, 117, 118, 116, 113, 114, 117, 118, 119, 120, 122, 123, 122,
- 124, -127, -124, -122, -117, -114, -112, -110, -103, -96, -116, 80, 53,
- 97, -125, 112, 89, 77, 65, 73, 107, -121, -114, -123, 113, 104, 127, -104,
- -103, -117, -127, 124, 115, 106, 105, 113, 117, 108, 91, 80, 86, 103, 114,
- 112, 110, 111, 111, 113, 122, -127, -128, 120, 113, 110, 114, 117, 115,
- 112, 109, 106, 105, 105, 109, 116, 116, 109, 105, 108, 115, 119, 120, 117,
- 114, 112, 114, 118, 122, 124, 120, 117, 118, 121, 125, -128, -127, -124,
- -121, -116, -108, -93, -75, -73, -120, 57, 40, 106, -108, 120, 81, 62, 48,
- 59, 104, -106, -99, -123, 106, 100, -128, -96, -92, -107, -120, 127, 108,
- 93, 100, 118, 123, 105, 79, 69, 82, 106, 119, 118, 116, 117, 116, 118,
- 127, -121, -123, 121, 111, 108, 110, 110, 111, 111, 109, 105, 101, 102,
- 112, 121, 122, 112, 105, 111, 120, 123, 120, 115, 112, 108, 110, 114, 115,
- 113, 111, 109, 111, 115, 119, 122, 122, 120, 120, 120, 125, -124, -119,
- -117, -118, -114, -105, -88, -73, -79, 120, 40, 37, 115, -106, 109, 69,
- 57, 51, 67, 119, -95, -97, -125, 108, 110, -118, -92, -93, -109, -122,
- 120, 97, 84, 95, 118, 121, 98, 72, 68, 88, 110, 123, 124, 123, 123, 119,
- 115, 125, -119, -125, 116, 106, 103, 104, 106, 110, 114, 111, 103, 99,
- 105, 120, -127, 123, 111, 105, 111, 118, 120, 118, 114, 109, 106, 110,
- 116, 122, 122, 118, 114, 117, 121, 126, -126, -124, -123, -122, -119,
- -106, -88, -68, -59, -99, 61, 9, 75, -100, -117, 80, 54, 47, 46, 87, -103,
- -78, -104, 115, 104, 124, -100, -85, -95, -114, -127, 105, 76, 77, 110,
- -127, 111, 76, 60, 73, 101, 122, -127, -126, -128, 122, 116, 123, -120,
- -116, 124, 107, 99, 98, 99, 105, 114, 112, 104, 96, 100, 115, -126, -126,
- 118, 108, 107, 116, 122, 121, 117, 111, 103, 103, 110, 116, 119, 117, 113,
- 112, 114, 118, 126, -126, 126, 123, 125, -126, -114, -104, -96, -88, -76,
- -72, -119, 48, 20, 94, -102, 120, 67, 50, 48, 60, 109, -94, -84, -115,
- 114, 111, -122, -94, -87, -104, -120, 120, 94, 71, 81, 115, 126, 100, 64,
- 58, 83, 118, -122, -126, 125, 125, 121, 117, 127, -118, -125, 111, 97, 94,
- 99, 101, 106, 110, 109, 103, 101, 108, 122, -126, 126, 113, 107, 112, 117,
- 117, 115, 114, 112, 108, 106, 112, 121, 123, 118, 115, 117, 120, 124,
- -126, -122, -119, -118, -113, -100, -81, -57, -59, -123, 30, 11, 103, -96,
- 115, 62, 48, 42, 50, 108, -85, -76, -112, 114, 112, -121, -92, -85, -100,
- -117, 119, 85, 63, 80, 117, 126, 99, 66, 60, 82, 115, -121, -120, -121,
- -124, 120, 112, 123, -119, -123, 113, 96, 90, 92, 98, 108, 115, 113, 104,
- 102, 109, 124, -121, -127, 113, 105, 110, 116, 116, 114, 112, 109, 106,
- 107, 114, 121, 123, 119, 116, 116, 119, 124, -125, -122, -124, -123, -118,
- -107, -90, -67, -56, -80, 87, 7, 42, -117, -104, 91, 53, 46, 44, 72, -117,
- -74, -89, -126, 111, 118, -113, -89, -90, -107, -124, 104, 68, 64, 98,
- -127, 118, 84, 59, 68, 102, -124, -119, -121, -121, 126, 113, 114, -127,
- -119, 124, 101, 88, 91, 96, 104, 114, 116, 109, 103, 104, 118, -122, -122,
- 117, 103, 105, 115, 120, 118, 115, 113, 108, 104, 109, 120, 124, 122, 117,
- 114, 117, 124, -124, -121, -118, -117, -113, -103, -83, -60, -52, -107,
- 44, 4, 87, -98, 125, 70, 50, 45, 49, 99, -96, -77, -103, 123, 112, 126,
- -102, -88, -100, -113, 124, 87, 58, 76, 118, -127, 102, 71, 65, 85, 119,
- -121, -121, -118, -121, 120, 111, 119, -123, -126, 110, 92, 88, 92, 98,
- 109, 117, 113, 106, 104, 113, -128, -119, -128, 111, 104, 109, 115, 119,
- 119, 116, 110, 102, 103, 116, 126, 124, 117, 113, 115, 120, 125, -125,
- -120, -120, -119, -115, -103, -81, -59, -57, -105, 50, 7, 84, -101, -126,
- 76, 51, 40, 49, 101, -94, -80, -103, 125, 113, 124, -106, -92, -100, -112,
- 124, 85, 58, 76, 116, -125, 106, 74, 63, 85, 120, -119, -118, -120, -126,
- 118, 112, 120, -125, -128, 109, 91, 87, 93, 99, 110, 117, 113, 106, 104,
- 114, -127, -120, 126, 110, 103, 109, 116, 119, 117, 113, 109, 102, 105,
- 117, 126, 123, 115, 111, 114, 121, 127, -124, -123, -125, -124, -116,
- -104, -88, -70, -55, -77, 91, 9, 45, -118, -108, 94, 59, 43, 42, 77, -116,
- -79, -91, -123, 111, 116, -114, -93, -99, -110, -124, 98, 63, 65, 105,
- -125, 117, 84, 65, 79, 111, -122, -118, -121, -125, 123, 112, 114, 127,
- -126, 114, 94, 88, 90, 97, 105, 114, 115, 110, 105, 110, 124, -121, -125,
- 115, 105, 108, 115, 117, 114, 112, 110, 104, 103, 112, 123, 125, 118, 113,
- 113, 117, 125, -126, -125, -127, 127, -125, -115, -101, -88, -76, -68,
- -80, 107, 24, 42, -128, -109, 97, 59, 47, 48, 79, -122, -89, -97, -124,
- 115, 118, -114, -97, -102, -115, -127, 102, 71, 72, 103, 127, 117, 88, 68,
- 81, 113, -121, -122, -127, -128, 122, 115, 116, 123, 125, 114, 98, 91, 94,
- 100, 106, 111, 111, 108, 105, 113, 125, -125, 126, 114, 108, 111, 117,
- 118, 114, 110, 108, 104, 105, 112, 118, 120, 117, 114, 113, 118, 125,
- -128, 127, 124, 122, 125, -122, -111, -104, -100, -92, -79, -73, -101, 75,
- 26, 82, -115, 122, 74, 55, 51, 67, 108, -110, -100, -111, -128, 117, -126,
- -105, -102, -115, -125, 118, 92, 77, 87, 113, 122, 103, 79, 75, 101, -126,
- -119, 127, 121, 123, 122, 118, 119, 124, 118, 102, 91, 93, 101, 106, 106,
- 107, 109, 111, 114, 121, -128, 127, 119, 111, 111, 115, 116, 112, 109,
- 108, 108, 106, 106, 112, 120, 121, 117, 114, 117, 122, 125, 126, 124, 124,
- 126, -127, -122, -115, -110, -108, -100, -87, -77, -87, 108, 40, 60, 127,
- -123, 89, 65, 60, 65, 92, -127, -107, -105, -121, 116, 119, -117, -106,
- -112, -121, 123, 101, 83, 85, 108, 123, 110, 88, 80, 97, 121, -125, 126,
- 119, 121, 123, 120, 119, 121, 118, 107, 96, 94, 101, 106, 106, 105, 108,
- 111, 114, 120, 123, 125, 123, 116, 111, 111, 114, 113, 109, 108, 106, 105,
- 108, 114, 119, 120, 116, 114, 119, 124, 126, 124, 122, 121, 123, 125,
- -128, -123, -119, -116, -114, -105, -94, -86, -86, -109, 86, 49, 90, -124,
- 117, 83, 64, 60, 76, 111, -118, -110, -118, 121, 114, -127, -108, -107,
- -120, 125, 113, 98, 94, 102, 116, 115, 99, 87, 90, 107, 126, -127, 119,
- 115, 120, 123, 122, 121, 118, 112, 103, 98, 100, 107, 111, 107, 103, 104,
- 110, 119, 124, 123, 119, 116, 111, 111, 115, 117, 112, 108, 106, 106, 108,
- 114, 117, 118, 116, 115, 117, 121, 124, 124, 121, 117, 118, 123, 125, 126,
- -128, -125, -123, -118, -109, -99, -92, -91, -98, -113, 97, 59, 90, -126,
- 118, 82, 61, 63, 84, 116, -122, -121, -127, 117, 115, -123, -106, -108,
- -124, 119, 111, 105, 103, 106, 114, 113, 99, 89, 91, 107, 126, -127, 116,
- 109, 115, 124, 125, 123, 117, 108, 104, 103, 106, 110, 111, 107, 105, 106,
- 108, 113, 119, 121, 118, 113, 109, 112, 118, 120, 117, 109, 105, 108, 112,
- 116, 117, 116, 113, 110, 112, 118, 122, 120, 118, 117, 117, 119, 122, 125,
- 126, 125, 126, -124, -119, -115, -110, -104, -103, -100, -99, -103, 124,
- 76, 74, 109, 118, 96, 77, 69, 76, 100, 121, -127, -123, 127, 116, 123,
- -116, -113, -120, 126, 118, 113, 107, 104, 108, 113, 108, 97, 93, 100,
- 115, 125, 119, 111, 114, 118, 121, 122, 119, 112, 108, 105, 106, 111, 111,
- 108, 107, 107, 109, 113, 118, 117, 116, 115, 113, 112, 116, 117, 114, 111,
- 108, 109, 110, 111, 113, 113, 113, 114, 113, 115, 118, 121, 120, 117, 117,
- 119, 122, 124, 124, 121, 121, 125, -125, -120, -117, -118, -114, -104,
- -98, -100, -103, -110, 117, 80, 80, 110, 113, 95, 79, 68, 78, 102, 121,
- -126, -123, 126, 117, 123, -118, -111, -118, 125, 114, 111, 110, 109, 110,
- 112, 105, 98, 96, 102, 115, 122, 117, 109, 111, 120, 123, 120, 115, 110,
- 110, 109, 110, 112, 111, 107, 107, 111, 113, 116, 116, 115, 113, 113, 113,
- 111, 112, 113, 111, 107, 107, 108, 111, 114, 113, 113, 114, 117, 120, 119,
- 118, 117, 116, 116, 118, 118, 117, 116, 117, 119, 121, 124, 126, -128,
- -124, -122, -122, -119, -111, -102, -102, -106, -110, -114, 125, 91, 82,
- 104, 112, 95, 79, 73, 83, 103, 117, 123, 125, 124, 119, 122, -120, -113,
- -121, 122, 116, 117, 118, 114, 108, 107, 107, 100, 97, 101, 109, 116, 114,
- 107, 110, 119, 125, 124, 119, 115, 113, 113, 114, 114, 115, 112, 108, 107,
- 109, 112, 114, 110, 108, 110, 110, 110, 112, 115, 114, 111, 109, 111, 115,
- 116, 114, 112, 113, 113, 115, 116, 116, 115, 115, 115, 115, 118, 121, 119,
- 118, 117, 118, 120, 123, 125, 125, 125, -128, -124, -119, -115, -111,
- -107, -108, -108, -106, -105, -122, 93, 75, 100, 116, 100, 80, 74, 79, 95,
- 112, 120, 127, -128, 119, 118, -123, -110, -114, -128, 118, 116, 117, 114,
- 108, 108, 107, 103, 97, 99, 107, 116, 116, 110, 110, 119, 125, 125, 122,
- 118, 114, 114, 113, 114, 116, 113, 105, 103, 108, 114, 116, 111, 107, 107,
- 111, 114, 115, 115, 113, 112, 112, 111, 114, 116, 114, 112, 112, 113, 115,
- 116, 117, 116, 116, 115, 114, 116, 118, 118, 117, 117, 116, 119, 122, 123,
- 124, 124, 126, -128, -124, -120, -118, -117, -113, -110, -108, -107, -107,
- -116, 112, 82, 91, 115, 110, 89, 78, 76, 87, 105, 117, 121, 126, 121, 115,
- 125, -115, -113, -124, 122, 116, 118, 120, 116, 111, 109, 104, 99, 99,
- 106, 113, 115, 110, 107, 112, 122, 126, 124, 119, 115, 114, 116, 117, 118,
- 114, 108, 105, 109, 113, 115, 112, 107, 107, 109, 112, 114, 114, 112, 110,
- 110, 113, 116, 118, 116, 112, 111, 113, 117, 118, 116, 115, 112, 112, 114,
- 115, 116, 116, 114, 114, 117, 118, 120, 121, 122, 121, 122, 124, -128,
- -125, -124, -124, -121, -117, -114, -112, -110, -108, -108, -117, 110, 81,
- 92, 117, 112, 89, 79, 76, 87, 106, 117, 122, 124, 118, 111, 124, -112,
- -110, -123, 121, 116, 119, 122, 118, 113, 108, 102, 98, 99, 106, 112, 114,
- 108, 105, 111, 121, 125, 124, 120, 116, 115, 116, 117, 119, 118, 112, 106,
- 107, 109, 111, 112, 111, 109, 109, 109, 110, 113, 116, 114, 113, 112, 113,
- 114, 115, 113, 113, 113, 113, 114, 114, 115, 114, 114, 114, 114, 114, 116,
- 117, 117, 117, 117, 117, 119, 121, 122, 121, 121, 124, 127, -125, -123,
- -123, -120, -115, -112, -111, -109, -108, -112, 119, 87, 90, 116, 116, 94,
- 81, 78, 87, 103, 113, 118, 121, 117, 112, 120, -118, -112, -123, 121, 117,
- 120, 123, 121, 114, 109, 106, 101, 100, 105, 111, 113, 107, 103, 109, 119,
- 124, 122, 119, 116, 116, 119, 120, 120, 118, 113, 108, 109, 113, 114, 113,
- 107, 104, 107, 111, 113, 112, 112, 109, 110, 113, 116, 116, 115, 113, 111,
- 112, 114, 116, 115, 113, 111, 112, 113, 116, 115, 115, 115, 114, 114, 116,
- 118, 119, 119, 119, 119, 122, 123, 125, 127, -126, -124, -122, -120, -115,
- -112, -111, -109, -107, -112, 117, 84, 91, 119, 118, 93, 78, 78, 87, 103,
- 112, 117, 120, 116, 112, 120, -118, -112, -122, 120, 117, 122, 125, 121,
- 114, 110, 107, 103, 102, 104, 110, 112, 107, 104, 110, 119, 123, 121, 118,
- 117, 118, 118, 119, 120, 119, 114, 110, 111, 112, 114, 114, 109, 107, 107,
- 110, 110, 112, 113, 111, 109, 111, 113, 116, 116, 114, 113, 114, 115, 116,
- 116, 114, 113, 113, 113, 114, 114, 114, 114, 114, 114, 116, 120, 120, 119,
- 119, 120, 122, 125, 127, -128, -126, -124, -123, -120, -115, -113, -113,
- -110, -107, -112, 117, 86, 94, 122, 119, 93, 79, 81, 89, 103, 112, 116,
- 118, 115, 110, 119, -117, -111, -123, 120, 117, 123, -128, 124, 115, 110,
- 107, 104, 104, 106, 110, 110, 104, 103, 109, 119, 122, 119, 116, 117, 119,
- 119, 120, 121, 119, 114, 112, 112, 114, 115, 113, 108, 106, 109, 110, 110,
- 110, 110, 109, 110, 113, 114, 115, 115, 114, 114, 115, 116, 116, 116, 115,
- 112, 113, 115, 115, 114, 114, 113, 114, 117, 117, 117, 117, 118, 119, 121,
- 123, 124, 125, 126, -128, -125, -122, -120, -118, -118, -116, -112, -108,
- -108, -128, 95, 88, 115, 125, 103, 84, 81, 86, 99, 111, 114, 117, 115,
- 109, 113, -124, -112, -120, 121, 116, 121, -128, 127, 119, 112, 108, 106,
- 103, 106, 110, 110, 106, 104, 106, 116, 122, 119, 116, 116, 117, 119, 120,
- 122, 119, 115, 112, 111, 114, 116, 114, 108, 105, 106, 111, 113, 111, 109,
- 108, 111, 113, 116, 116, 115, 113, 112, 114, 117, 118, 115, 113, 112, 114,
- 115, 116, 114, 114, 115, 114, 116, 117, 118, 118, 118, 118, 120, 122, 123,
- 124, 125, 126, -127, -124, -122, -119, -117, -116, -114, -111, -109, -121,
- 101, 86, 112, 126, 107, 89, 82, 86, 98, 107, 111, 115, 116, 110, 110, 127,
- -116, -120, 122, 115, 120, -128, -128, 121, 113, 110, 109, 107, 107, 109,
- 111, 107, 103, 106, 115, 120, 117, 113, 115, 117, 119, 120, 119, 119, 116,
- 113, 113, 115, 116, 115, 110, 106, 108, 111, 111, 110, 110, 109, 109, 112,
- 115, 116, 116, 114, 114, 114, 116, 117, 116, 114, 112, 113, 115, 115, 115,
- 114, 114, 114, 115, 117, 117, 118, 118, 119, 120, 122, 121, 122, 125, 126,
- 127, -127, -125, -123, -120, -120, -117, -113, -110, -112, 126, 97, 94,
- 119, 124, 103, 87, 83, 89, 101, 109, 111, 114, 114, 108, 114, -126, -117,
- -124, 120, 116, 123, -127, 126, 118, 113, 111, 108, 108, 109, 109, 109,
- 107, 104, 107, 116, 118, 115, 114, 115, 117, 118, 119, 118, 118, 115, 114,
- 113, 114, 115, 113, 110, 108, 110, 114, 112, 110, 110, 111, 113, 114, 114,
- 115, 114, 114, 114, 115, 116, 116, 115, 114, 114, 117, 117, 115, 114, 114,
- 115, 116, 116, 116, 116, 118, 117, 119, 120, 121, 122, 123, 125, 127,
- -126, -125, -123, -119, -118, -117, -114, -113, -113, 125, 96, 95, 121,
- 123, 101, 88, 86, 92, 104, 109, 111, 114, 113, 108, 115, -126, -118, -126,
- 118, 115, 123, -127, 126, 118, 113, 110, 110, 109, 110, 110, 110, 107,
- 105, 108, 116, 118, 115, 113, 114, 117, 119, 119, 118, 119, 116, 114, 115,
- 116, 117, 115, 111, 109, 113, 114, 112, 110, 108, 109, 111, 113, 114, 113,
- 113, 114, 114, 115, 117, 116, 116, 116, 114, 115, 115, 114, 114, 114, 114,
- 114, 115, 116, 116, 117, 117, 119, 120, 120, 121, 122, 123, 125, 127,
- -127, -126, -124, -122, -122, -119, -116, -115, -116, 125, 100, 98, 119,
- 122, 105, 92, 88, 94, 106, 109, 109, 113, 113, 109, 114, 126, -123, -128,
- 119, 116, 123, -128, 125, 117, 112, 111, 111, 111, 110, 110, 111, 108,
- 105, 109, 116, 117, 115, 113, 114, 116, 118, 117, 116, 117, 115, 113, 113,
- 114, 116, 115, 111, 109, 112, 114, 113, 111, 111, 112, 113, 113, 113, 114,
- 114, 114, 114, 116, 116, 116, 116, 115, 115, 116, 116, 115, 115, 116, 115,
- 115, 115, 116, 117, 118, 119, 120, 120, 121, 122, 124, 125, 127, -128,
- -127, -125, -122, -121, -120, -119, -117, -117, 127, 102, 98, 119, 122,
- 106, 95, 90, 96, 106, 110, 110, 114, 115, 110, 114, 125, -124, -128, 119,
- 115, 120, 126, 124, 118, 114, 112, 112, 111, 111, 112, 112, 109, 107, 110,
- 116, 117, 115, 114, 113, 116, 118, 116, 116, 117, 116, 115, 115, 117, 117,
- 116, 111, 110, 112, 113, 113, 112, 110, 111, 113, 113, 113, 114, 115, 115,
- 116, 115, 116, 116, 116, 115, 115, 116, 116, 115, 116, 115, 115, 116, 116,
- 116, 117, 117, 118, 119, 120, 121, 121, 124, 125, 127, -128, -127, -125,
- -124, -122, -121, -120, -118, -120, 119, 100, 107, 121, 116, 103, 96, 95,
- 100, 109, 110, 111, 115, 113, 111, 116, 126, -127, 124, 117, 114, 121,
- 125, 122, 116, 113, 111, 111, 112, 112, 113, 111, 107, 107, 112, 116, 117,
- 114, 112, 113, 117, 117, 116, 115, 115, 115, 115, 115, 115, 115, 114, 111,
- 111, 114, 115, 113, 111, 111, 112, 113, 113, 113, 114, 115, 114, 114, 115,
- 115, 116, 116, 115, 116, 116, 117, 115, 115, 115, 116, 116, 115, 116, 117,
- 118, 120, 120, 120, 121, 122, 123, 125, 127, -128, -128, -127, -125, -123,
- -123, -124, -125, -126, 118, 105, 108, 118, 114, 105, 102, 99, 105, 112,
- 111, 112, 116, 115, 113, 117, 122, 124, 122, 116, 114, 119, 121, 119, 115,
- 113, 111, 112, 112, 112, 113, 112, 110, 111, 113, 116, 116, 114, 112, 113,
- 116, 116, 115, 114, 114, 114, 115, 114, 113, 115, 114, 114, 113, 114, 114,
- 113, 113, 112, 113, 114, 115, 113, 114, 114, 115, 116, 116, 116, 116, 116,
- 117, 116, 117, 116, 115, 115, 115, 116, 116, 116, 117, 117, 118, 119, 120,
- 121, 122, 123, 124, 125, 126, 127, 127, -127, -126, -127, -127, -127,
- -126, 125, 112, 107, 116, 117, 111, 108, 104, 105, 112, 113, 113, 116,
- 117, 113, 114, 118, 120, 121, 118, 112, 114, 118, 118, 115, 113, 111, 112,
- 114, 113, 114, 115, 113, 111, 113, 115, 115, 115, 113, 110, 113, 114, 113,
- 114, 114, 113, 114, 115, 115, 117, 116, 115, 114, 114, 114, 113, 114, 113,
- 113, 113, 113, 113, 114, 114, 114, 115, 116, 116, 117, 116, 116, 116, 116,
- 116, 116, 116, 115, 116, 118, 117, 117, 117, 118, 118, 119, 120, 121, 122,
- 123, 123, 125, 126, 127, 126, 126, 126, 125, 126, 127, 126, 120, 114, 112,
- 117, 116, 112, 110, 108, 110, 115, 114, 114, 117, 116, 114, 115, 117, 118,
- 118, 116, 113, 114, 116, 115, 115, 112, 112, 114, 115, 115, 114, 114, 113,
- 114, 114, 114, 114, 114, 113, 112, 113, 114, 114, 114, 114, 114, 116, 117,
- 115, 116, 116, 115, 115, 114, 114, 114, 115, 113, 113, 115, 115, 115, 115,
- 115, 115, 116, 117, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 118,
- 118, 117, 117, 117, 118, 119, 120, 120, 121, 121, 122, 123, 124, 124, 124,
- 124, 123, 123, 123, 124, 124, 122, 119, 118, 117, 116, 117, 115, 113, 113,
- 114, 113, 115, 115, 115, 115, 115, 115, 115, 116, 115, 114, 113, 113, 114,
- 114, 113, 112, 114, 115, 114, 114, 113, 113, 115, 115, 113, 114, 114, 114,
- 113, 113, 114, 114, 115, 114, 115, 116, 116, 115, 115, 115, 115, 115, 115,
- 114, 115, 115, 114, 114, 115, 115, 115, 115, 115, 115, 117, 116, 116, 116,
- 116, 116, 116, 116, 116, 117, 117, 116, 116, 117, 117, 117, 117, 118, 119,
- 119, 119, 120, 120, 122, 121, 121, 121, 121, 121, 121, 120, 121, 122, 121,
- 121, 119, 118, 118, 119, 118, 117, 115, 116, 116, 115, 115, 115, 116, 116,
- 115, 116, 115, 115, 115, 114, 114, 114, 114, 114, 113, 112, 115, 115, 113,
- 114, 113, 114, 115, 115, 114, 114, 114, 113, 113, 114, 114, 114, 115, 114,
- 114, 116, 115, 115, 116, 115, 115, 115, 115, 115, 115, 115, 114, 115, 115,
- 115, 116, 116, 116, 116, 115, 115, 116, 116, 116, 116, 116, 116, 117, 117,
- 117, 116, 117, 117, 117, 117, 117, 117, 118, 118, 119, 118, 119, 120, 120,
- 119, 119, 119, 120, 120, 119, 119, 119, 120, 119, 120, 119, 118, 118, 118,
- 117, 117, 117, 117, 116, 116, 115, 117, 116, 115, 115, 115, 115, 115, 115,
- 114, 115, 114, 114, 114, 114, 113, 113, 113, 113, 115, 114, 114, 113, 114,
- 114, 115, 114, 114, 115, 115, 114, 114, 114, 114, 114, 115, 115, 115, 116,
- 115, 115, 115, 115, 116, 115, 115, 115, 115, 116, 115, 116, 116, 116, 116,
- 116, 116, 116, 116, 117, 116, 116, 116, 116, 117, 117, 117, 117, 117, 117,
- 118, 119, 118, 118, 118, 119, 119, 119, 118, 118, 118, 118, 118, 118, 119,
- 119, 118, 118, 118, 119, 119, 119, 118, 117, 117, 117, 117, 117, 117, 116,
- 116, 116, 116, 116, 116, 116, 115, 117, 116, 115, 114, 114, 114, 114, 114,
- 114, 114, 116, 115, 114, 115, 115, 115, 115, 115, 115, 116, 115, 115, 115,
- 115, 115, 115, 115, 115, 115, 116, 115, 115, 115, 115, 115, 115, 115, 115,
- 116, 117, 115, 115, 116, 115, 116, 116, 116, 116, 116, 116, 117, 116, 116,
- 116, 116, 116, 116, 117, 117, 117, 117, 118, 117, 117, 117, 117, 117, 117,
- 117, 118, 117, 118, 118, 119, 118, 118, 118, 118, 117, 117, 117, 117, 117,
- 117, 117, 119, 117, 117, 117, 117, 117, 116, 116, 116, 116, 116, 117, 116,
- 116, 116, 116, 116, 116, 116, 115, 115, 116, 115, 115, 115, 115, 115, 116,
- 116, 116, 115, 116, 115, 115, 115, 115, 115, 115, 115, 115, 116, 117, 115,
- 115, 115, 116, 115, 115, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116,
- 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 117, 117,
- 118, 117, 117, 117, 117, 117, 117, 116, 116, 117, 117, 117, 118, 117, 117,
- 117, 118, 117, 117, 117, 117, 117, 117, 118, 117, 117, 117, 117, 117, 117,
- 117, 117, 117, 116, 116, 118, 116, 116, 116, 116, 116, 116, 116, 116, 116,
- 115, 116, 116, 116, 115, 115, 115, 115, 116, 116, 116, 117, 116, 116, 115,
- 115, 116, 115, 115, 115, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116,
- 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116,
- 116, 116, 116, 116, 116, 116, 116, 117, 118, 117, 117, 117, 117, 117, 117,
- 117, 116, 116, 116, 117, 117, 116, 116, 116, 117, 117, 117, 117, 117, 117,
- 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 116, 117, 118, 116, 116,
- 116, 116, 117, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116,
- 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117,
- 116, 116, 116, 116, 115, 115, 116, 116, 116, 116, 117, 116, 116, 116, 116,
- 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116,
- 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116,
- 116, 116, 116, 116, 117, 117, 117, 117, 118, 117, 116, 117, 117, 117, 117,
- 116, 116, 116, 116, 117, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116,
- 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116,
- 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116,
- 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
- 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116,
- 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117,
- 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 118, 117, 116, 116, 116,
- 116, 116, 116, 116, 116, 116, 117, 116, 117, 117, 116, 116, 116, 116, 116,
- 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116,
- 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116,
- 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117,
- 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116,
- 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116,
- 116, 117, 118, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116,
- 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116,
- 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117,
- 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116,
- 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116,
- 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116,
- 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116,
- 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117,
- 116, 116, 116, 116, 117, 117, 116, 116, 116, 116, 117, 116, 116, 116, 116,
- 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116,
- 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116,
- 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116,
- 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117,
- 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116,
- 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116,
- 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116,
- 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116,
- 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116
-
diff --git a/winsup/testsuite/winsup.api/devzero.c b/winsup/testsuite/winsup.api/devzero.c
deleted file mode 100644
index 948b0bff5..000000000
--- a/winsup/testsuite/winsup.api/devzero.c
+++ /dev/null
@@ -1,115 +0,0 @@
-#include <stdio.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <fcntl.h>
-#include <sys/mman.h>
-
-int
-main(int argc, char **argv)
-{
- int fd, r, l;
- char buf[1024];
- char *v;
-
- fd = open("/dev/zero", O_RDONLY);
- if (fd < 0)
- {
- fprintf(stderr, "Unable to open /dev/zero for reading\n");
- perror("The error was");
- exit(1);
- }
-
- l = read(fd, buf, 1024);
- if (l != 1024)
- {
- fprintf(stderr, "Asked to read 1024 bytes, got %d\n", l);
- exit(1);
- }
-
- for (r=0; r<1024; r++)
- if (buf[r] != 0)
- {
- fprintf(stderr, "/dev/zero returned a byte of %02x at offset %d\n",
- buf[r], r);
- exit(1);
- }
-
- l = lseek(fd, 4096, 0);
- if (l != 0)
- {
- fprintf(stderr, "l == %d\n", l);
- exit(1);
- }
-
- l = close(fd);
- if (l != 0)
- {
- fprintf(stderr, "close: returned %d\n", l);
- perror("The error was");
- exit(1);
- }
-
- fd = open("/dev/zero", O_WRONLY);
- if (fd < 0)
- {
- fprintf(stderr, "Unable to open /dev/zero for writing\n");
- perror("The error was");
- exit(1);
- }
-
- l = write(fd, buf, 1024);
- if (l != 1024)
- {
- fprintf(stderr, "Asked to write 1024 bytes, got %d\n", l);
- exit(1);
- }
-
- l = close(fd);
- if (l != 0)
- {
- fprintf(stderr, "close: returned %d\n", l);
- perror("The error was");
- exit(1);
- }
-
- fd = open("/dev/zero", O_RDWR);
- v = (char *)mmap(0, 65536, PROT_READ|PROT_WRITE, MAP_PRIVATE, fd, 0);
- if (v == (char *)-1)
- {
- fprintf(stderr, "mmap r/w /dev/zero failed\n");
- perror("The error was");
- exit(1);
- }
-
- for (r=0; r<65536; r++)
- if (v[r] != 0)
- {
- fprintf(stderr, "mmap'd r/w /dev/zero has byte %d at offset %d\n",
- v[r], r);
- exit(1);
- }
- munmap(v, 65536);
- close(fd);
-
- fd = open("/dev/zero", O_RDONLY);
- v = (char *)mmap(0, 65536, PROT_READ, MAP_SHARED, fd, 0);
- if (v == (char *)-1)
- {
- fprintf(stderr, "mmap /dev/zero r/o failed\n");
- perror("The error was");
- exit(1);
- }
-
- for (r=0; r<65536; r++)
- if (v[r] != 0)
- {
- fprintf(stderr, "mmap'd r/o /dev/zero has byte %d at offset %d\n",
- v[r], r);
- exit(1);
- }
- munmap(v, 65536);
- close(fd);
-
- exit(0);
-}
diff --git a/winsup/testsuite/winsup.api/iospeed.c b/winsup/testsuite/winsup.api/iospeed.c
deleted file mode 100644
index 56bf715cf..000000000
--- a/winsup/testsuite/winsup.api/iospeed.c
+++ /dev/null
@@ -1,115 +0,0 @@
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <windows.h>
-
-int verbose = 0;
-
-void
-v(char *fmt, ...)
-{
- va_list ap;
- if (!verbose) return;
- va_start(ap, fmt);
- vfprintf(stdout, fmt, ap);
- va_end(ap);
-}
-
-#define TSIZE (1024 * 1024 * 16)
-
-unsigned long start_tic;
-
-void
-start(FILE *f)
-{
- fseek(f, 0, SEEK_SET);
- start_tic = GetTickCount();
-}
-
-void
-end()
-{
- unsigned long end_tic = GetTickCount();
- printf("%6ld", end_tic - start_tic);
-}
-
-void
-test(int linesz, int cr)
-{
- FILE *f = fopen("iospeed.dat", "wb");
- char buf[65536];
- int i, fd;
-
- memset(buf, 'x', linesz);
- buf[linesz-1] = '\n';
- if (cr)
- buf[linesz-2] = '\r';
- for (i=0; i<TSIZE; i += linesz)
- fwrite(buf, 1, linesz, f);
- fclose(f);
-
- f = fopen("iospeed.dat", "rt");
- fd = fileno(f);
-
- printf("%6d%6d", linesz, cr);
- for (i=0; i<TSIZE; i+= 65536)
- read(fd, buf, 65536);
-
- start(f);
- while (getc(f) != EOF);
- end();
-
- start(f);
- while (fread(buf, 1, 256, f) > 0);
- end();
-
- start(f);
- while (fgets(buf, 64436, f));
- end();
-
- f = fopen("iospeed.dat", "rb");
- fd = fileno(f);
-
- for (i=0; i<TSIZE; i+= 65536)
- read(fd, buf, 65536);
-
- start(f);
- while (getc(f) != EOF);
- end();
-
- start(f);
- while (fread(buf, 1, 256, f) > 0);
- end();
-
- start(f);
- while (fgets(buf, 64436, f));
- end();
-
- printf("\n");
-}
-
-int
-main(int argc, char **argv)
-{
- if (argc > 1 && strcmp(argv[1],"-v") == 0)
- verbose = 1;
-
- setbuf(stdout, 0);
-
- printf(" ----- text ----- ---- binary ----\n");
- printf("linesz cr getc fread fgets getc fread fgets\n");
-
- test(4, 0);
- test(64, 0);
- test(4096, 0);
- test(4, 1);
- test(64, 1);
- test(4096, 1);
-
- remove ("iospeed.dat");
-
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/known_bugs.tcl b/winsup/testsuite/winsup.api/known_bugs.tcl
deleted file mode 100644
index e063ee6bb..000000000
--- a/winsup/testsuite/winsup.api/known_bugs.tcl
+++ /dev/null
@@ -1,4 +0,0 @@
-set xfail_list [list dup03 \
- fcntl05 setgroups01 setuid02 \
- ulimit01 unlink08 \
- sample-fail sample-miscompile]
diff --git a/winsup/testsuite/winsup.api/ltp/access01.c b/winsup/testsuite/winsup.api/ltp/access01.c
deleted file mode 100644
index ae9be948a..000000000
--- a/winsup/testsuite/winsup.api/ltp/access01.c
+++ /dev/null
@@ -1,300 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : access01
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for access(2) using F_OK,
- * R_OK, W_OK and X_OK arguments.
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 6
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) access(2) returns 0 for F_OK...(See Description)
- * 2.) access(2) returns 0 for R_OK...(See Description)
- * 3.) access(2) returns 0 for W_OK...(See Description)
- * 4.) access(2) returns 0 for X_OK...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * The libcuts.a and libsys.a libraries must be included in
- * the compilation of this test.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the access(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * access(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- * Create a temp directory and cd to it.
- * Creat a temp file wil read, write and execute permissions.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call with F_OK on tmp file
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- * Execute system call with X_OK on tmp file...
- * Execute system call with W_OK on tmp file...
- * Execute system call with R_OK on tmp file...
- *
- * Cleanup:
- * Print errno log
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <sys/types.h>
-#include <sys/fcntl.h>
-#include <errno.h>
-#include <signal.h>
-#include <sys/stat.h>
-#include "test.h"
-#include "usctest.h"
-void setup();
-void cleanup(void) __attribute__((noreturn));
-
-const char *TCID="access01"; /* Test program identifier. */
-int TST_TOTAL=4; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-
-char Fname[255];
-
-
-/***********************************************************************
- * Main
- ***********************************************************************/
-int main(int ac, char **av)
-{
- struct test_case_t {
- char *file;
- unsigned mode;
- const char *string;
- int experrno;
- } Test_cases[] = {
- { Fname, F_OK, "F_OK", 0 },
- { Fname, X_OK, "X_OK", 0 },
- { Fname, W_OK, "W_OK", 0 },
- { Fname, R_OK, "R_OK", 0 },
- };
-
- int Ntc = sizeof(Test_cases) / sizeof(struct test_case_t);
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- int tc;
-
- TST_TOTAL=Ntc;
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *) NULL ) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- for (tc=0; tc<Ntc; tc++) {
- /*
- * Call access(2)
- */
- TEST(access(Test_cases[tc].file, Test_cases[tc].mode));
-
- /* check return code */
- if ( TEST_RETURN == -1 && Test_cases[tc].experrno == 0 ) {
- tst_resm(TFAIL, "access(%s, %s) Failed, errno=%d : %s",
- Test_cases[tc].file, Test_cases[tc].string,
- TEST_ERRNO, strerror(TEST_ERRNO));
-
- } else if ( TEST_RETURN != -1 && Test_cases[tc].experrno != 0 ) {
- tst_resm(TFAIL, "access(%s, %s) returned %d, exp -1, errno:%d",
- Test_cases[tc].file, Test_cases[tc].string,
- TEST_RETURN, Test_cases[tc].experrno);
- } else {
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "access(%s, %s) returned %d",
- Test_cases[tc].file, Test_cases[tc].string,
- TEST_RETURN);
- }
- }
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- int fd;
- struct stat stbuf;
-
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- umask(0); /* reset umask avoid it affects on modes */
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /*
- * Since files inherit group ids, make sure our dir has a valid grp
- * to us.
- */
- chown(".", -1, getgid());
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- sprintf(Fname,"accessfile");
-
- if ((fd = open(Fname, O_RDWR|O_CREAT, 06777)) == -1) {
- tst_brkm(TBROK, cleanup, "open(%s, O_RDWR|O_CREAT,06777) Failed, errno=%d : %s",
- Fname, errno, strerror(errno));
- }
- else if (close(fd) == -1) {
- tst_resm(TINFO, "close(%s) Failed, errno=%d : %s",
- Fname, errno, strerror(errno));
- }
-
- /*
- * force the mode to be set to 6777
- */
- if (chmod(Fname, 06777) == -1 ) {
- tst_brkm(TBROK, cleanup, "chmod(%s, 06777) failed, errno:%d %s\n",
- Fname, errno, strerror(errno));
- }
-
- stat(Fname, &stbuf);
-
- if ( (stbuf.st_mode & 06777) != 06777 ) {
- /*
- * file can not be properly setup
- */
- }
-
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- */
- TEST_CLEANUP;
-
- /* remove the temp dir */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-
-} /* End cleanup() */
-
-
diff --git a/winsup/testsuite/winsup.api/ltp/access03.c b/winsup/testsuite/winsup.api/ltp/access03.c
deleted file mode 100644
index f0870a6fa..000000000
--- a/winsup/testsuite/winsup.api/ltp/access03.c
+++ /dev/null
@@ -1,506 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : access03
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : EFAULT error testing for access(2)
- *
- * PARENT DOCUMENT : acstds01
- *
- * TEST CASE TOTAL : 8
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : Kathy Olmsted
- *
- * CO-PILOT : Tom Hampson
- *
- * DATE STARTED : 05/13/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * access(2) test for errno(s) EFAULT.
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * DETAILED DESCRIPTION
- *
- * Setup:
- * Setup signal handling.
- * Make and change to a temporary directory.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno.
- * If doing functional test
- * check the errno returned and print result message
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- * Remove the temporary directory and exit.
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-
-
-#include "test.h"
-#include "usctest.h"
-
-
-void setup();
-void cleanup(void) __attribute__((noreturn));
-
-
-char *get_high_address();
-
-const char *TCID="access03"; /* Test program identifier. */
-int TST_TOTAL=8; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={EFAULT, 0}; /* List must end with 0 */
-
-int main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
-
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos. */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
-
- /*
- * TEST CASE:
- * R_OK on low pointer (-1) for path
- */
-
-
- /* Call access(2) */
- TEST(access( (char *)-1,R_OK));
-
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- }
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- if ( TEST_RETURN == -1 ) {
- if (TEST_ERRNO == EFAULT) {
- tst_resm(TPASS,
- "access((char *)-1,R_OK) failed as expected with errno %d (EFAULT) : %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- }
- else {
- tst_resm(TFAIL,
- "access((char *)-1,R_OK) failed with errno %d : %s but expected %d (EFAULT)",
- TEST_ERRNO, strerror(TEST_ERRNO),EFAULT);
- }
- }
- else {
- tst_resm(TFAIL,
- "access((char *)-1,R_OK) succeeded unexpectedly.");
-
- }
- }
-
-
- /*
- * TEST CASE:
- * W_OK on low pointer (-1) for path
- */
-
-
- /* Call access(2) */
- TEST(access( (char *)-1,W_OK));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- }
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- if ( TEST_RETURN == -1 ) {
- if (TEST_ERRNO == EFAULT) {
- tst_resm(TPASS,
- "access((char *)-1,W_OK) failed as expected with errno %d (EFAULT) : %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- }
- else {
- tst_resm(TFAIL,
- "access((char *)-1,W_OK) failed with errno %d : %s but expected %d (EFAULT)",
- TEST_ERRNO, strerror(TEST_ERRNO),EFAULT);
- }
- }
- else {
- tst_resm(TFAIL,
- "access((char *)-1,W_OK) succeeded unexpectedly.");
-
- }
- }
-
-
- /*
- * TEST CASE:
- * X_OK on low pointer (-1) for path
- */
-
-
- /* Call access(2) */
- TEST(access( (char *)-1,X_OK));
-
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- }
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- if ( TEST_RETURN == -1 ) {
- if (TEST_ERRNO == EFAULT) {
- tst_resm(TPASS,
- "access((char*)-1,X_OK) failed as expected with errno %d (EFAULT) : %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- }
- else {
- tst_resm(TFAIL,
- "access((char*)-1,X_OK) failed with errno %d : %s but expected %d (EFAULT)",
- TEST_ERRNO, strerror(TEST_ERRNO),EFAULT);
- }
- }
- else {
- tst_resm(TFAIL,
- "access((char*)-1,X_OK) succeeded unexpectedly.");
-
- }
- }
-
-
- /*
- * TEST CASE:
- * F_OK on low pointer (-1) for path
- */
-
-
- /* Call access(2) */
- TEST(access( (char *)-1,F_OK));
-
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- }
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- if ( TEST_RETURN == -1 ) {
- if (TEST_ERRNO == EFAULT) {
- tst_resm(TPASS,
- "access((char*)-1,F_OK) failed as expected with errno %d (EFAULT) : %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- }
- else {
- tst_resm(TFAIL,
- "access((char*)-1,F_OK) failed with errno %d : %s but expected %d (EFAULT)",
- TEST_ERRNO, strerror(TEST_ERRNO),EFAULT);
- }
- }
- else {
- tst_resm(TFAIL,
- "access((char*)-1,F_OK) succeeded unexpectedly.");
-
- }
- }
-
-
- /*
- * TEST CASE:
- * R_OK on high pointer (sbrk(0)+1) for path
- */
-
-
- /* Call access(2) */
- TEST(access(get_high_address(),R_OK));
-
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- }
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- if ( TEST_RETURN == -1 ) {
- if (TEST_ERRNO == EFAULT) {
- tst_resm(TPASS,
- "access((char*)sbrk(0)+1,R_OK) failed as expected with errno %d (EFAULT) : %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- }
- else {
- tst_resm(TFAIL,
- "access((char*)sbrk(0)+1,R_OK) failed with errno %d : %s but expected %d (EFAULT)",
- TEST_ERRNO, strerror(TEST_ERRNO),EFAULT);
- }
- }
- else {
- tst_resm(TFAIL,
- "access((char*)sbrk(0)+1,R_OK) succeeded unexpectedly.");
-
- }
- }
-
-
- /*
- * TEST CASE:
- * W_OK on high pointer (sbrk(0)+1) for path
- */
-
-
- /* Call access(2) */
- TEST(access(get_high_address(),W_OK));
-
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- }
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- if ( TEST_RETURN == -1 ) {
- if (TEST_ERRNO == EFAULT) {
- tst_resm(TPASS,
- "access((char*)sbrk(0)+1,W_OK) failed as expected with errno %d (EFAULT) : %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- }
- else {
- tst_resm(TFAIL,
- "access((char*)sbrk(0)+1,W_OK) failed with errno %d : %s but expected %d (EFAULT)",
- TEST_ERRNO, strerror(TEST_ERRNO),EFAULT);
- }
- }
- else {
- tst_resm(TFAIL,
- "access((char*)sbrk(0)+1,W_OK) succeeded unexpectedly.");
-
- }
- }
-
-
- /*
- * TEST CASE:
- * X_OK on high pointer (sbrk(0)+1) for path
- */
-
-
- /* Call access(2) */
- TEST(access(get_high_address(),X_OK));
-
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- }
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- if ( TEST_RETURN == -1 ) {
- if (TEST_ERRNO == EFAULT) {
- tst_resm(TPASS,
- "access(high_address,X_OK) failed as expected with errno %d (EFAULT) : %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- }
- else {
- tst_resm(TFAIL,
- "access(high_address,X_OK) failed with errno %d : %s but expected %d (EFAULT)",
- TEST_ERRNO, strerror(TEST_ERRNO),EFAULT);
- }
- }
- else {
- tst_resm(TFAIL,
- "access(high_address,X_OK) succeeded unexpectedly.");
-
- }
- }
-
-
- /*
- * TEST CASE:
- * F_OK on high pointer (sbrk(0)+1) for path
- */
-
-
- /* Call access(2) */
- TEST(access(get_high_address(),F_OK));
-
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- }
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- if ( TEST_RETURN == -1 ) {
- if (TEST_ERRNO == EFAULT) {
- tst_resm(TPASS,
- "access((char*)sbrk(0)+1,F_OK) failed as expected with errno %d (EFAULT) : %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- }
- else {
- tst_resm(TFAIL,
- "access((char*)sbrk(0)+1,F_OK) failed with errno %d : %s but expected %d (EFAULT)",
- TEST_ERRNO, strerror(TEST_ERRNO),EFAULT);
- }
- }
- else {
- tst_resm(TFAIL,
- "access((char*)sbrk(0)+1,F_OK) succeeded unexpectedly.");
-
- }
- }
-
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* make and change to a temporary directory */
- tst_tmpdir();
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* remove the temporary directory and exit with
- return code appropriate for results */
- tst_rmdir();
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/access04.c b/winsup/testsuite/winsup.api/ltp/access04.c
deleted file mode 100644
index 069458886..000000000
--- a/winsup/testsuite/winsup.api/ltp/access04.c
+++ /dev/null
@@ -1,241 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * Test Name: access01
- *
- * Test Description:
- * Verify that access() succeeds to check the existance of a file if
- * search access is permitted on the pathname of the specified file.
- *
- * Expected Result:
- * access() should return 0 value and the specified file should exist
- * on the file system.
- *
- * Algorithm:
- * Setup:
- * Setup signal handling.
- * Create temporary directory.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise,
- * Verify the Functionality of system call
- * if successful,
- * Issue Functionality-Pass message.
- * Otherwise,
- * Issue Functionality-Fail message.
- * Cleanup:
- * Print errno log and/or timing stats if options given
- * Delete the temporary directory created.
- *
- * Usage: <for command-line>
- * access01 [-c n] [-f] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -f : Turn off functionality Testing.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS:
- * None.
- *
- */
-
-#include <sys/types.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <string.h>
-#include <signal.h>
-#include <sys/stat.h>
-
-#include "test.h"
-#include "usctest.h"
-
-#define TESTDIR "testdir"
-#define TESTFILE "testdir/testfile"
-#define DIR_MODE S_IRWXU | S_IRUSR | S_IXUSR | S_IRGRP | S_IXGRP
-#define FILE_MODE S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH
-
-const char *TCID="access01"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-void setup(); /* Main setup function of test */
-void cleanup(void) __attribute__((noreturn)); /* cleanup function for the test */
-
-int
-main(int ac, char **av)
-{
- struct stat stat_buf; /* struct buffer for stat(2) */
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /* Parse standard options given to run the test. */
- msg = parse_opts(ac, av, (option_t *)NULL, NULL);
- if (msg != (char *)NULL) {
- tst_brkm(TBROK, tst_exit, "OPTION PARSING ERROR - %s", msg);
- }
-
- /* Perform global setup for test */
- setup();
-
- /* Check looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- /* Reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call access(2) to check the existence of a
- * file under specified path.
- */
- TEST(access(TESTFILE, F_OK));
-
- /* check return code of access(2) */
- if (TEST_RETURN == -1) {
- tst_resm(TFAIL,
- "access(%s, F_OK) Failed, errno=%d : %s",
- TESTFILE, TEST_ERRNO, strerror(TEST_ERRNO));
- continue;
- }
-
- /*
- * Perform functional verification if test
- * executed without (-f) option.
- */
- if (STD_FUNCTIONAL_TEST) {
- /*
- * Use stat(2) to cross-check the
- * existance of testfile under
- * specified path.
- */
- if (stat(TESTFILE, &stat_buf) < 0) {
- tst_resm(TFAIL, "stat() on %s Failed, errno=%d",
- TESTFILE, TEST_ERRNO);
- } else {
- tst_resm(TPASS, "Functionality of access(%s, "
- "F_OK) successful", TESTFILE);
- }
- } else {
- tst_resm(TPASS, "call succeeded");
- }
- } /* End for TEST_LOOPING */
-
- /* Call cleanup() to undo setup done for the test. */
- cleanup();
-
- /*NOTREACHED*/
-}
-
-/*
- * setup() - performs all ONE TIME setup for this test.
- *
- * Create a temporary directory and change directory to it.
- * Create a test directory and a file under test directory.
- * Modify the mode permissions of testfile.
- */
-void
-setup()
-{
- int fd; /* File handle for testfile */
-
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Check that the test process id is not root/super-user */
- if (geteuid() == 0) {
- tst_brkm(TBROK, NULL, "Must be non-root/super for this test!");
- tst_exit();
- }
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Creat a test directory under temporary directory */
- if (mkdir(TESTDIR, DIR_MODE) < 0) {
- tst_brkm(TBROK, cleanup,
- "mkdir(%s, %#o) Failed, errno=%d : %s",
- TESTDIR, DIR_MODE, errno, strerror(errno));
- }
-
- /* Make sure test directory has search permissions set */
- if (chmod(TESTDIR, DIR_MODE) < 0) {
- tst_brkm(TBROK, cleanup,
- "chmod(%s, %#o) Failed, errno=%d : %s",
- TESTDIR, DIR_MODE, errno, strerror(errno));
- }
-
- /* Creat a test file under above directory created */
- if ((fd = open(TESTFILE, O_RDWR|O_CREAT, FILE_MODE)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR|O_CREAT, %#o) Failed, errno=%d :%s",
- TESTFILE, FILE_MODE, errno, strerror(errno));
- }
-
- /* Close the testfile created above */
- if (close(fd) == -1) {
- tst_brkm(TBROK, cleanup,
- "close(%s) Failed, errno=%d : %s",
- TESTFILE, errno, strerror(errno));
- }
-
- /* Change the mode permissions on the testfile */
- if (chmod(TESTFILE, 0) < 0) {
- tst_brkm(TBROK, cleanup,
- "chmod(%s, 0) Failed, errno=%d : %s",
- TESTFILE, errno, strerror(errno));
- }
-}
-
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- *
- * Remove the test directory and testfile created in the setup.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /*
- * Delete the test directory/file and temporary directory
- * created in the setup.
- */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/access05.c b/winsup/testsuite/winsup.api/ltp/access05.c
deleted file mode 100644
index 757c64f33..000000000
--- a/winsup/testsuite/winsup.api/ltp/access05.c
+++ /dev/null
@@ -1,424 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * Test Name: access03
- *
- * Test Description:
- * Verify that,
- * 1. access() fails with -1 return value and sets errno to EACCES
- * if the permission bits of the file mode do not permit the
- * requested (Read/Write/Execute) access.
- * 2. access() fails with -1 return value and sets errno to EINVAL
- * if the specified access mode argument is invalid.
- * 3. access() fails with -1 return value and sets errno to EFAULT
- * if the pathname points outside allocate address space for the
- * process.
- * 4. access() fails with -1 return value and sets errno to ENOENT
- * if the specified file doesn't exist (or pathname is NULL).
- * 5. access() fails with -1 return value and sets errno to ENAMETOOLONG
- * if the pathname size is > PATH_MAX characters.
- *
- * Expected Result:
- * access() should fail with return value -1 and set expected errno.
- *
- * Algorithm:
- * Setup:
- * Setup signal handling.
- * Create temporary directory.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * if errno set == expected errno
- * Issue sys call fails with expected return value and errno.
- * Otherwise,
- * Issue sys call fails with unexpected errno.
- * Otherwise,
- * Issue sys call returns unexpected value.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- * Delete the temporary directory(s)/file(s) created.
- *
- * Usage: <for command-line>
- * access03 [-c n] [-e] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -e : Turn on errno logging.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS:
- * This test should be run by 'non-super-user' only.
- *
- */
-
-#include <errno.h>
-#include <fcntl.h>
-#include <string.h>
-#include <signal.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#include "test.h"
-#include "usctest.h"
-
-#define INV_OK -1
-#define TEST_FILE1 "test_file1"
-#define TEST_FILE2 "test_file2"
-#define TEST_FILE3 "test_file3"
-#define TEST_FILE4 "test_file4"
-
-#define FILE_MODE S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH
-
-int no_setup();
-int setup1(); /* setup() to test access() for EACCES */
-int setup2(); /* setup() to test access() for EACCES */
-int setup3(); /* setup() to test access() for EACCES */
-int setup4(); /* setup() to test access() for EINVAL */
-int longpath_setup(); /* setup function to test access() for ENAMETOOLONG */
-
-char Longpathname[PATH_MAX+2];
-char High_address_node[64];
-
-struct test_case_t { /* test case structure */
- const char *pathname;
- int a_mode;
- const char *desc;
- int exp_errno;
- int (*setupfunc)();
-} Test_cases[] = {
- { TEST_FILE1, R_OK, "Read Access denied on file", EACCES, setup1 },
- { TEST_FILE2, W_OK, "Write Access denied on file", EACCES, setup2 },
- { TEST_FILE3, X_OK, "Execute Access denied on file", EACCES, setup3 },
- { TEST_FILE4, INV_OK, "Access mode invalid", EINVAL, setup4 },
- { High_address_node, R_OK, "Address beyond address space", EFAULT, no_setup },
- { (char *)-1, R_OK, "Negative address", EFAULT, no_setup },
- { "", W_OK, "Pathname is empty", ENOENT, no_setup },
- { Longpathname, R_OK, "Pathname too long", ENAMETOOLONG, longpath_setup },
- { NULL, 0, NULL, 0, no_setup }
-};
-
-const char *TCID="access03"; /* Test program identifier. */
-int TST_TOTAL=8; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-int exp_enos[]={EACCES, EFAULT, EINVAL, ENOENT, ENAMETOOLONG, 0};
-
-void setup(); /* Main setup function of test */
-void cleanup(void) __attribute__((noreturn)); /* cleanup function for the test */
-char *get_high_address (void);
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- const char *file_name; /* name of the testfile */
- const char *test_desc; /* test specific message */
- int access_mode; /* specified access mode for testfile */
- int ind; /* counter for testcase looping */
-
- /* Parse standard options given to run the test. */
- msg = parse_opts(ac, av, (option_t *) NULL, NULL);
- if (msg != (char *) NULL) {
- tst_brkm(TBROK, tst_exit, "OPTION PARSING ERROR - %s", msg);
- }
-
- /* Perform global setup for test */
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /* Check looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- /* Reset Tst_count in case we are looping. */
- Tst_count = 0;
-
- for (ind = 0; Test_cases[ind].desc != NULL; ind++) {
- file_name = Test_cases[ind].pathname;
- access_mode = Test_cases[ind].a_mode;
- test_desc = Test_cases[ind].desc;
-
- if (file_name == High_address_node) {
- file_name = (char *)get_high_address();
- }
-
- /*
- * Call access(2) to test different test conditions.
- * verify that it fails with -1 return value and
- * sets appropriate errno.
- */
- TEST(access(file_name, access_mode));
-
- if (TEST_RETURN != -1) {
- tst_resm(TFAIL, "access() returned %d, "
- "expected -1, errno:%d", TEST_RETURN,
- Test_cases[ind].exp_errno);
- continue;
- }
-
- TEST_ERROR_LOG(TEST_ERRNO);
-
- /*
- * Call a function to verify whether
- * the specified file has specified
- * access mode.
- */
- if (TEST_ERRNO == Test_cases[ind].exp_errno) {
- tst_resm(TPASS, "access() fails, %s, errno:%d",
- test_desc, TEST_ERRNO);
- } else {
- tst_resm(TFAIL, "access() fails, %s, errno:%d, "
- "expected errno:%d", test_desc,
- TEST_ERRNO, Test_cases[ind].exp_errno);
- }
- } /* Test Case Looping */
- } /* End for TEST_LOOPING */
-
- /* Call cleanup() to undo setup done for the test. */
- cleanup();
-
- /*NOTREACHED*/
-}
-
-/*
- * setup() - performs all ONE TIME setup for this test.
- *
- * Create a temporary directory and change directory to it.
- * Call individual test specific setup functions.
- */
-void
-setup()
-{
- int ind; /* counter for testsetup functions */
-
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Check that the test process id is not root/super-user */
- if (geteuid() == 0) {
- tst_brkm(TBROK, NULL, "Must be non-root/super for this test!");
- tst_exit();
- }
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* call individual setup functions */
- for (ind = 0; Test_cases[ind].desc != NULL; ind++) {
- Test_cases[ind].setupfunc();
- }
-}
-
-/*
- * no_setup() - some test conditions do not need any setup.
- * Hence, this function simply returns 0.
- */
-int
-no_setup()
-{
- return 0;
-}
-
-/*
- * setup1() - Setup function to test access() for return value -1
- * and errno EACCES when read access denied for specified
- * testfile.
- *
- * Creat/open a testfile and close it.
- * Deny read access permissions on testfile.
- * This function returns 0.
- */
-int
-setup1()
-{
- int fd1; /* file handle for testfile */
-
- /* Creat a test file under above directory created */
- if ((fd1 = open(TEST_FILE1, O_RDWR|O_CREAT, FILE_MODE)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR|O_CREAT, %#o) Failed, errno=%d :%s",
- TEST_FILE1, FILE_MODE, errno, strerror(errno));
- }
-
- /* Close the testfile created above */
- if (close(fd1) == -1) {
- tst_brkm(TBROK, cleanup, "close(%s) Failed, errno=%d : %s",
- TEST_FILE1, errno, strerror(errno));
- }
-
- /* Change mode permissions on testfile */
- if (chmod(TEST_FILE1, 0333) < 0) {
- tst_brkm(TBROK, cleanup, "chmod() failed on %s, errno=%d",
- TEST_FILE1, errno);
- }
-
- return 0;
-}
-
-/*
- * setup2() - Setup function to test access() for return value -1 and
- * errno EACCES when write access denied on testfile.
- *
- * Creat/open a testfile and close it.
- * Deny write access permissions on testfile.
- * This function returns 0.
- */
-int
-setup2()
-{
- int fd2; /* file handle for testfile */
-
- /* Creat a test file under above directory created */
- if ((fd2 = open(TEST_FILE2, O_RDWR|O_CREAT, FILE_MODE)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR|O_CREAT, %#o) Failed, errno=%d :%s",
- TEST_FILE2, FILE_MODE, errno, strerror(errno));
- }
-
- /* Close the testfile created above */
- if (close(fd2) == -1) {
- tst_brkm(TBROK, cleanup, "close(%s) Failed, errno=%d : %s",
- TEST_FILE2, errno, strerror(errno));
- }
-
- /* Change mode permissions on testfile */
- if (chmod(TEST_FILE2, 0555) < 0) {
- tst_brkm(TBROK, cleanup, "chmod() failed on %s, errno=%d",
- TEST_FILE2, errno);
- }
-
- return 0;
-}
-
-/*
- * setup3() - Setup function to test access() for return value -1 and
- * errno EACCES when execute access denied on testfile.
- *
- * Creat/open a testfile and close it.
- * Deny search access permissions on testfile.
- * This function returns 0.
- */
-int
-setup3()
-{
- int fd3; /* file handle for testfile */
-
- /* Creat a test file under above directory created */
- if ((fd3 = open(TEST_FILE3, O_RDWR|O_CREAT, FILE_MODE)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR|O_CREAT, %#o) Failed, errno=%d :%s",
- TEST_FILE3, FILE_MODE, errno, strerror(errno));
- }
-
- /* Close the testfile created above */
- if (close(fd3) == -1) {
- tst_brkm(TBROK, cleanup, "close(%s) Failed, errno=%d : %s",
- TEST_FILE3, errno, strerror(errno));
- }
-
- /* Change mode permissions on testfile */
- if (chmod(TEST_FILE3, 0666) < 0) {
- tst_brkm(TBROK, cleanup, "chmod() failed on %s, errno=%d",
- TEST_FILE3, errno);
- }
-
- return 0;
-}
-
-/*
- * setup4() - Setup function to test access() for return value -1
- * and errno EINVAL when specified access mode argument is
- * invalid.
- *
- * Creat/open a testfile and close it.
- * This function returns 0.
- */
-int
-setup4()
-{
- int fd4; /* file handle for testfile */
-
- /* Creat a test file under above directory created */
- if ((fd4 = open(TEST_FILE4, O_RDWR|O_CREAT, FILE_MODE)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR|O_CREAT, %#o) Failed, errno=%d :%s",
- TEST_FILE4, FILE_MODE, errno, strerror(errno));
- }
-
- /* Close the testfile created above */
- if (close(fd4) == -1) {
- tst_brkm(TBROK, cleanup, "close(%s) Failed, errno=%d : %s",
- TEST_FILE4, errno, strerror(errno));
- }
-
- return 0;
-}
-
-/*
- * longpath_setup() - setup to create a node with a name length exceeding
- * the MAX. length of PATH_MAX.
- */
-int
-longpath_setup()
-{
- int ind;
-
- for (ind = 0; ind <= (PATH_MAX + 1); ind++) {
- Longpathname[ind] = 'a';
- }
-
- return 0;
-}
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- *
- * Remove the test directory and testfile created in the setup.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /*
- * Delete the test directory/file and temporary directory
- * created in the setup.
- */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/alarm01.c b/winsup/testsuite/winsup.api/ltp/alarm01.c
deleted file mode 100644
index 187e488c9..000000000
--- a/winsup/testsuite/winsup.api/ltp/alarm01.c
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : alarm01
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for alarm(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) alarm(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * The libcuts.a and libsys.a libraries must be included in
- * the compilation of this test.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the alarm(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * alarm(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-
-const char *TCID="alarm01"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL ) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call alarm(2)
- */
- TEST(alarm(1));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- tst_resm(TFAIL, "alarm(1) Failed, errno=%d : %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "alarm(1) returned %d", TEST_RETURN);
- }
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- void trapper();
-
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- signal(SIGALRM, trapper);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
-
-void
-trapper(sig)
-int sig;
-{
- signal(SIGALRM, trapper);
-}
-
diff --git a/winsup/testsuite/winsup.api/ltp/alarm02.c b/winsup/testsuite/winsup.api/ltp/alarm02.c
deleted file mode 100644
index 03a41b4f7..000000000
--- a/winsup/testsuite/winsup.api/ltp/alarm02.c
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : alarm02
- *
- * TEST TITLE : Boundary Value Test for alarm(2)
- *
- * PARENT DOCUMENT : almtds02
- *
- * TEST CASE TOTAL : 3
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * BINARY LOCATION : CUTS_BIN/rf_tests/sys
- *
- * SOURCE LOCATION : CUTS_SRC/src/tests/sys
- *
- * AUTHOR : Billy Jean Horne
- *
- * CO-PILOT : Kathy Olmsted
- *
- * DATE STARTED : 06/01/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- * Test Case One - A call to alarm() shall not return an error if
- * seconds is a -1.
- * Test FAILS if a non-zero value is returned.
- * Test Case Two - A call to alarm() shall not return an error if
- * seconds is the maximum unsigned integer (2**63).
- * Test FAILS if a non-zero value is returned.
- * Test Case Three - A call to alarm() shall not return an error if
- * seconds is the maximum unsigned integer plus 1 ((2**63)+1).
- * Test FAILS if a non-zero value is returned.
- *
- * ENVIRONMENTAL NEEDS
- * The libcuts.a and libsys.a libraries must be included in
- * the compilation of this test.
- *
- * DETAILED DESCRIPTION
- *
- * Setup:
- * Define a cleanup function.
- *
- * Test:
- * Loop for each test case.
- * Execute alarm (0) system call to clear previous alarm.
- * Check return code, if system call failed (return=-1)
- * Issue a BROK message and exit the test.
- * Call alarm() with boundary values for seconds.
- * Verify that returned value is as expected.
- * Report results.
- *
- * Cleanup:
- *
- */
-#include <sys/types.h>
-#include <errno.h>
-#include <sys/signal.h>
-#include <limits.h>
-#include "test.h"
-#include "usctest.h" /* required for usctest */
-
-void setup();
-void cleanup(void) __attribute__((noreturn));
-void alarm_received();
-
-
-
-const char *TCID="alarm02"; /* Test program identifier. */
-int TST_TOTAL=3; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_ * routines */
-
-int received_alarm = 0; /* Indicates a SIGALRM was received */
-
-/************************************************************
- * Main program
- ***********************************************************/
-
-int
-main(int ac, char **av)
-{
-
- /* Parameters for usc code */
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /* Parameters for alarm test */
- const char *buf[] = { "-1", "ULONG_MAX", "ULONG_MAX+1"};
- unsigned long int sec[] = {-1, ULONG_MAX, ULONG_MAX+1};
- int exp[] = {0,0,0};
- int i;
-
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *) NULL ) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
-
- setup();
-
- /***************************************************************
- * check looping state
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
-
- Tst_count=0;
-
- for (i=0;i<TST_TOTAL;i++) {
-
- /* capture an SIGALRM signal */
- received_alarm = 0;
- signal(SIGALRM, alarm_received);
-
- TEST (alarm (sec[i]));
- /* reset the alarm */
- alarm (0);
- if (TEST_RETURN != 0) {
- tst_resm(TFAIL,
- "alarm(%u) returned %u, when %u was expected for value %s.",
- sec[i], TEST_RETURN, exp[i], buf[i]);
-
- }
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- else if (STD_FUNCTIONAL_TEST) {
- if (received_alarm == 1) {
- tst_resm (TFAIL,
- "alarm(%u) returned %u but an alarm signal was received for value %s.",
- sec[i], TEST_RETURN, buf[i]);
- } else {
- tst_resm (TPASS,
- "alarm(%u) returned %u as expected for value %s.",
- sec[i], TEST_RETURN, buf[i]);
- }
-
- } /* End of STD_FUNCTIONAL_TEST */
- } /* End of for loop */
- /*
- * Reset alarm before cleanup.
- */
-
- alarm(0);
-
- } /* End for TEST_LOOPING */
-
- cleanup();
-
- return 0;
-}
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-
-void
-setup()
-{
-
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- /* End setup() */
-
-}
-
-/***********************************************************
- * Cleanup:
- * exit using tst_exit.
- ***********************************************************/
-
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
-
- tst_exit();
-}
-
-void alarm_received()
-{
- received_alarm = 1;
-}
-
-
diff --git a/winsup/testsuite/winsup.api/ltp/alarm03.c b/winsup/testsuite/winsup.api/ltp/alarm03.c
deleted file mode 100644
index 871f6fabf..000000000
--- a/winsup/testsuite/winsup.api/ltp/alarm03.c
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : alarm03
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : alarm(2) cleared by a fork
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : Richard Logan
- *
- * CO-PILOT : Dennis Arason
- *
- * DATE STARTED : 08/96
- *
- *
- * TEST CASES
- *
- * 1.) alarm(100), fork, child's alarm(0) shall return 0;
- * 2.) alarm(100), fork, parent's alarm(0) shall return non-zero.
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the alarm(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * alarm(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-void setup();
-void cleanup(void) __attribute__((noreturn));
-
-
-const char *TCID="alarm03"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *) NULL ) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call alarm(2)
- */
- TEST(alarm(100));
-
- switch ( fork()) {
- case -1:
- tst_brkm(TBROK, cleanup, "fork failed, errno:%d %s",
- errno, strerror(errno));
- break;
-
- case 0:
- TEST( alarm(0) );
-
- if ( TEST_RETURN != 0 )
- tst_resm(TFAIL,
- "alarm(100), fork, alarm(0) child's alarm returned %d",
- TEST_RETURN);
- else if ( STD_FUNCTIONAL_TEST )
- tst_resm(TPASS,
- "alarm(100), fork, alarm(0) child's alarm returned %d",
- TEST_RETURN);
-
- exit(0);
- break;
-
- default:
- Tst_count++;
- TEST( alarm(0) );
- if ( TEST_RETURN <= 0 || TEST_RETURN > 100 )
- tst_resm(TFAIL,
- "alarm(100), fork, alarm(0) parent's alarm returned %d",
- TEST_RETURN);
-
- else if ( STD_FUNCTIONAL_TEST )
- tst_resm(TPASS,
- "alarm(100), fork, alarm(0) parent's alarm returned %d",
- TEST_RETURN);
-
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- void trapper();
-
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- signal(SIGALRM, trapper);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
-
-void
-trapper(sig)
-int sig;
-{
- signal(SIGALRM, trapper);
-}
-
diff --git a/winsup/testsuite/winsup.api/ltp/alarm07.c b/winsup/testsuite/winsup.api/ltp/alarm07.c
deleted file mode 100644
index a9f269522..000000000
--- a/winsup/testsuite/winsup.api/ltp/alarm07.c
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * Test Name: alarm03
- *
- * Test Description:
- * Check the functionality of the alarm() when the time input
- * parameter is non-zero and the process does a fork.
- *
- * Expected Result:
- * The alarm request should be cleared in the child process.
- *
- * Algorithm:
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise,
- * Verify the Functionality of system call
- * if successful,
- * Issue Functionality-Pass message.
- * Otherwise,
- * Issue Functionality-Fail message.
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- * Usage: <for command-line>
- * alarm03 [-c n] [-f] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -f : Turn off functionality Testing.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS:
- * None.
- */
-
-#include <sys/types.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include <sys/wait.h>
-
-#include "test.h"
-#include "usctest.h"
-
-const char *TCID="alarm03"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-int almreceived = 0; /* flag to indicate SIGALRM received or not */
-
-void setup(); /* Main setup function of test */
-void cleanup(void) __attribute__((noreturn)); /* cleanup function for the test */
-void sigproc(int sig); /* signal catching function */
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- int time_sec = 3; /* time for which alarm is set */
- int sleep_time = 5; /* waiting time for the SIGALRM signal */
- pid_t cpid; /* child process id */
-
- /* Parse standard options given to run the test. */
- msg = parse_opts(ac, av, (option_t *)NULL, NULL);
- if (msg != (char *)NULL) {
- tst_brkm(TBROK, tst_exit, "OPTION PARSING ERROR - %s", msg);
- }
-
- /* Perform global setup for test */
- setup();
-
- /* Check looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- /* Reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call First alarm() with non-zero time parameter
- * 'time_sec' to send SIGALRM to the process.
- */
- TEST(alarm(time_sec));
-
- /* Now, fork a child process */
- cpid = fork();
- if (cpid < 0) {
- tst_resm(TFAIL, "fork() fails to create child, "
- "errno:%d", errno);
- }
-
- /* Wait for signal SIGALRM to be generated */
- sleep(sleep_time);
-
- if (STD_FUNCTIONAL_TEST) {
- if (cpid == 0) { /* Child process */
- /*
- * For child process if almreceived is 0
- * means alarm request is cleared.
- */
- if (almreceived == 0) {
- tst_resm(TPASS, "Functionality of "
- "alarm(%u) successful",
- time_sec);
- } else {
- tst_resm(TFAIL, "alarm request not "
- "cleared in child, "
- "almreceived:%d", almreceived);
- }
- } else { /* Parent process */
- /* Wait for child to complete execution */
- wait(0);
- }
- } else {
- tst_resm(TPASS, "call returned %d", TEST_RETURN);
- }
- } /* End for TEST_LOOPING */
-
- /* Call cleanup() to undo setup done for the test. */
- cleanup();
-
- /*NOTREACHED*/
-} /* End main */
-
-/*
- * setup() - performs all ONE TIME setup for this test.
- * Setup signal handler to catch SIGALRM signal.
- */
-void
-setup()
-{
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- /* Set the signal catching function */
- if (signal(SIGALRM, sigproc) == SIG_ERR) {
- tst_brkm(TFAIL, cleanup,
- "signal() fails to catch SIGALARM, errno=%d",
- errno);
- }
-}
-
-
-/*
- * sigproc(int) - This function defines the action that has to be taken
- * when the SIGALRM signal is caught.
- * It also sets the variable which is used to check whether the
- * alarm system call was successful.
- */
-void
-sigproc(int sig)
-{
- almreceived = almreceived + 1;
-}
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/asyncio02.c b/winsup/testsuite/winsup.api/ltp/asyncio02.c
deleted file mode 100644
index 36c03b449..000000000
--- a/winsup/testsuite/winsup.api/ltp/asyncio02.c
+++ /dev/null
@@ -1,364 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/************************************************************
- * OS Test - Silicon Graphics, Inc.
- * Mendota Heights, Minnesota
- *
- * TEST IDENTIFIER: aiotcs02: write/close flushes data to the file
- *
- * PARENT DOCUMENT: aiotds01: kernel i/o
- *
- * AUTHOR: Barrie Kletscher
- *
- * CO-PILOT: Dave Baumgartner
- *
- * TEST ITEMS:
- * for each open flags set used:
- * 1. Multiple writes to a file work as specified for
- * more than BUFSIZ bytes.
- * 2. Multiple writes to a file work as specified for
- * BUFSIZ bytes.
- * 3. Multiple writes to a file work as specified for
- * lower than BUFSIZ bytes.
- *
- * INPUT SPECIFICATIONS:
- * Standard parse_opts supported options.
- *
- * OUTPUT SPECIFICATIONS
- * Standard tst_res output format
- *
- * ENVIRONMENTAL NEEDS:
- * This program uses the environment variable TMPDIR for the location
- * of the temporary directory.
- *
- *
- * SPECIAL PROCEDURAL REQUIREMENTS:
- * The program must be linked with tst_*.o and parse_opts.o.
- *
- * INTERCASE DEPENDENCIES:
- * NONE.
- *
- * DETAILED DESCRIPTION:
- * Attempt to get some memory to work with.
- * Call testrun writing (BUFSIZ + 1) bytes
- * Call testrun writing BUFSIZ bytes
- * Repeated call to testrun() with decreasing write sizes
- * less than BUFSIZ
- * End
- *
- * Start testrun()
- * Attempt to open a temporary file.
- * Write the memory to the file.
- * Attempt to close the file which also flushes the buffers.
- * Now check to see if the number of bytes written is the
- * same as the number of bytes in the file.
- * Cleanup
- *
- * BUGS:
- * NONE.
- *
-************************************************************/
-
-#include <fcntl.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/signal.h>
-#include <errno.h>
-#include "test.h"
-#include "usctest.h"
-
-#define FLAG O_RDWR | O_CREAT | O_TRUNC /* Flags used when opening temp tile */
-#define MODE 0777 /* Mode to open file with */
-#define WRITES 10 /* Number of times buffer is written */
-#define DECR 1000 /* Number of bytes decremented between */
- /* Calls to testrun() */
-#define OK -1 /* Return value from testrun() */
-
-#define FNAME1 "aio02.1"
-#define FNAME2 "aio02.2"
-#define FNAME3 "aio02.3"
-
-#define ERR_MSG1 "Bytes in file not equal to bytes written."
-#define ERR_MSG2 "Bytes in file (%d) not equal to bytes written (%d)."
-
-char *dp; /* pointer to area of memory */
-
-void setup();
-void cleanup(void) __attribute__((noreturn));
-int testrun(int flag, int bytes, int ti);
-
-const char *TCID="asyncio02"; /* Test program identifier. */
-int TST_TOTAL=6; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-extern int Tst_nobuf; /* variable used to turn off tst_res buffering */
-
-extern int errno;
-
-int exp_enos[]={0}; /* Array of expected errnos */
-char mesg[150];
-const char *filename; /* name of the temporary file */
-
-char *Progname;
-int Open_flags;
-
-int Flags[] = {
- O_RDWR | O_CREAT | O_TRUNC,
- O_RDWR | O_CREAT | O_TRUNC
-};
-
-int Num_flags;
-
-/***********************************************************************
- * MAIN
- ***********************************************************************/
-int
-main(int ac, char **av)
-{
-
- int i; /* counter */
- int ret_val; /* return value from testrun call */
- int eok; /* everything is ok flag */
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- int flag_cnt;
-
- Tst_nobuf=1;
- Num_flags = sizeof(Flags)/sizeof(int);
- TST_TOTAL= 3 * Num_flags;
-
- /***************************************************************
- * parse standard options, and exit if there is an error
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL ) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- for (flag_cnt=0; flag_cnt<Num_flags; flag_cnt++) {
-
- /*
- * call testrun writing (BUFSIZ + 1) byte chunks
- */
-
- filename=FNAME1;
- if( testrun(Flags[flag_cnt],BUFSIZ+1,1) != OK)
- tst_resm(TFAIL,ERR_MSG1);
-
- else if ( STD_FUNCTIONAL_TEST ) {
- tst_resm(TPASS,
- "More than BUFSIZE bytes multiple synchronous writes to a file check out ok");
- }
-
- /*
- * call testrun writing BUFSIZ byte chunks
- */
-
- filename=FNAME2;
- if(testrun(Flags[flag_cnt],BUFSIZ,2) != OK) {
- tst_resm(TFAIL,ERR_MSG1);
- }
- else if ( STD_FUNCTIONAL_TEST ) {
- tst_resm(TPASS,
- "BUFSIZE bytes multiple synchronous writes to a file checks out ok");
- }
-
- /*
- * while the byte chunks are greater than 0
- * call testrun() with decreasing chunk sizes
- */
-
- filename=FNAME3;
- eok=1;
- for(i = BUFSIZ-1; i >= 0; i -= DECR) {
- if((ret_val = testrun(Flags[flag_cnt],i,3)) != OK) {
- char output[80]; /* local output char string */
-
- (void)sprintf(output,ERR_MSG2,ret_val,i*WRITES);
- tst_resm(TFAIL,output);
- }
- }
-
- if ( eok && STD_FUNCTIONAL_TEST )
- tst_resm(TPASS,
- "Less than BUFSIZE bytes multiple synchronous writes to a file checks out ok");
-
- }
- }
- cleanup();
-
- return 0;
-} /* end main() */
-
-/***********************************************************
- *
- * This function does the actual running of the tests.
- *
- ***********************************************************/
-int
-testrun(int flag, int bytes, int ti)
-{
-
- void cleanup();
-
- int fildes, /* temporary file's descriptor */
- i; /* counter */
-
- int ret;
-
- struct stat buffer; /* buffer of memory required for stat command */
-
- /*
- * Attempt to open a temporary file.
- */
-
- if((fildes = open(filename,flag,MODE)) == -1) {
- sprintf(mesg, "open failed, errno:%d", errno);
- tst_brkm(TBROK, cleanup, mesg);
- }
-
- /*
- * Write the memory to the file.
- */
-
- for(i = 0; i < WRITES; i++) {
- TEST( write(fildes,dp,(unsigned)bytes) );
-
- if( TEST_RETURN == -1) {
- sprintf(mesg, "write failed, errno:%d", errno);
- tst_brkm(TBROK, cleanup, mesg);
- }
- } /* end for() */
-
- /*
- * Attempt to close the file which also flushes the buffers.
- */
-
- if(close(fildes) == -1) {
- sprintf(mesg, "close failed, errno:%d", errno);
- tst_brkm(TBROK, cleanup, mesg);
- }
-
- ret=OK;
- if ( STD_FUNCTIONAL_TEST ) {
-
- /*
- * Now check to see if the number of bytes written is the
- * same as the number of bytes in the file.
- */
-
- if(stat(filename,&buffer) == -1) {
- sprintf(mesg, "stat failed, errno:%d", errno);
- tst_brkm(TBROK, cleanup, mesg);
- }
-
-
- if(buffer.st_size != (off_t)(bytes * WRITES)) {
- ret=(int)buffer.st_size;
- }
- }
-
- if ( unlink(filename) == -1 ) {
- sprintf(mesg, "unlink failed, errno:%d", errno);
- tst_brkm(TBROK, cleanup, mesg);
- }
-
- return ret;
-
-} /* end testrun() */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- /* create a temporary directory and go to it */
- tst_tmpdir();
-
- /* Indicate which errnos are expected */
- TEST_EXP_ENOS(exp_enos);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- /*
- * Attempt to get some memory to work with.
- */
-
- if((dp = (char *)malloc((unsigned)BUFSIZ+1)) == NULL) {
- sprintf(mesg, "malloc failed, errno:%d", errno);
- tst_brkm(TBROK, cleanup, mesg);
- }
-
-
-} /* End setup() */
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* remove temporary directory and all files in it. */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-
-} /* End cleanup() */
-
-
diff --git a/winsup/testsuite/winsup.api/ltp/chdir02.c b/winsup/testsuite/winsup.api/ltp/chdir02.c
deleted file mode 100644
index 552f912ac..000000000
--- a/winsup/testsuite/winsup.api/ltp/chdir02.c
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : chdir02
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for chdir(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) chdir(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the chdir(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * chdir(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-const char *TCID="chdir02"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0};
-
-const char *dirs[2] = { "/", "/tmp" };
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call chdir(2)
- */
- TEST(chdir(dirs[lc%2]));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "chdir(%s) Failed, errno=%d : %s", dirs[lc%2],
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "chdir(%s) returned %d", dirs[lc%2], TEST_RETURN);
- }
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
-
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/chdir04.c b/winsup/testsuite/winsup.api/ltp/chdir04.c
deleted file mode 100644
index da2b0ace9..000000000
--- a/winsup/testsuite/winsup.api/ltp/chdir04.c
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * NAME
- * chdir02.c
- *
- * DESCRIPTION
- * Testcase to test whether chdir(2) sets errno correctly.
- *
- * ALGORITHM
- * 1. Test for ENAMETOOLONG:
- * Create a bad directory name with length more than
- *
- * VFS_MAXNAMELEN (Linux kernel variable), and attempt to
- * chdir(2) to it.
- *
- * 2. Test for ENOENT:
- * Attempt to chdir(2) on a non-existent directory
- *
- * 3. Test for EFAULT:
- * Pass an address which lies outside the address space of the
- * process, and expect an EFAULT.
- *
- * USAGE: <for command-line>
- * chdir02 [-c n] [-e] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -e : Turn on errno logging.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS
- * NONE
- */
-
-#include <errno.h>
-#include <sys/stat.h>
-#include <test.h>
-#include <usctest.h>
-
-const char *TCID = "chdir02";
-int TST_TOTAL = 3;
-extern int Tst_count;
-
-int exp_enos[] = {ENAMETOOLONG, ENOENT, EFAULT, 0};
-
-char bad_dir[] = "abcdefghijklmnopqrstmnopqrstuvwxyzabcdefghijklmnopqrstmnopqrstuvwxyzabcdefghijklmnopqrstmnopqrstuvwxyzabcdefghijklmnopqrstmnopqrstuvwxyzabcdefghijklmnopqrstmnopqrstuvwxyzabcdefghijklmnopqrstmnopqrstuvwxyzabcdefghijklmnopqrstmnopqrstuvwxyzabcdefghijklmnopqrstmnopqrstuvwxyz";
-
-char noexist_dir[] = "/tmp/noexistdir";
-
-struct test_case_t {
- char *dname;
- int error;
-} TC[] = {
- /*
- * to test whether chdir() is setting ENAMETOOLONG if the
- * directory is more than VFS_MAXNAMELEN
- */
- {bad_dir, ENAMETOOLONG},
-
- /*
- * to test whether chdir() is setting ENOENT if the
- * directory is not existing.
- */
- {noexist_dir, ENOENT},
-
- /*
- * to test whether chdir() is setting EFAULT if the
- * directory is an invalid address.
- */
- {(void *)-1, EFAULT}
-};
-
-int flag;
-#define FAILED 1
-
-void setup(void);
-void cleanup(void) __attribute__((noreturn));
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- int i;
- const char *msg; /* message returned from parse_opts */
-
- /* parse standard options */
- if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
- }
-
- setup();
-
- /* set up the expected errnos */
- TEST_EXP_ENOS(exp_enos);
-
- /* check looping state if -i option is given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- /* reset Tst_count in case we are looping */
- Tst_count = 0;
-
- /* loop through the test cases */
- for (i=0; i<TST_TOTAL; i++) {
-
- TEST(chdir(TC[i].dname));
-
- if (TEST_RETURN != -1) {
- tst_resm(TFAIL, "call succeeded unexpectedly");
- continue;
- }
-
- TEST_ERROR_LOG(TEST_ERRNO);
-
- if (TEST_ERRNO == TC[i].error) {
- tst_resm(TPASS, "expected failure - "
- "errno = %d : %s", TEST_ERRNO,
- strerror(TEST_ERRNO));
- } else {
- tst_resm(TFAIL, "unexpected error - %d : %s - "
- "expected %d", TEST_ERRNO,
- strerror(TEST_ERRNO), TC[i].error);
- }
- }
- }
- cleanup();
-
- /*NOTREACHED*/
-}
-
-/*
- * setup() - performs all ONE TIME setup for this test.
- */
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- /* make a temporary directory and cd to it */
- tst_tmpdir();
-}
-
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /*
- * Delete the test directory created in setup().
- */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/chmod01.c b/winsup/testsuite/winsup.api/ltp/chmod01.c
deleted file mode 100644
index c20e6172e..000000000
--- a/winsup/testsuite/winsup.api/ltp/chmod01.c
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * Test Name: chmod01
- *
- * Test Description:
- * Verify that, chmod(2) succeeds when used to change the mode permissions
- * of a file.
- *
- * Expected Result:
- * chmod(2) should return 0 and the mode permissions set on file should match
- * the specified mode.
- *
- * Algorithm:
- * Setup:
- * Setup signal handling.
- * Create temporary directory.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise,
- * Verify the Functionality of system call
- * if successful,
- * Issue Functionality-Pass message.
- * Otherwise,
- * Issue Functionality-Fail message.
- * Cleanup:
- * Print errno log and/or timing stats if options given
- * Delete the temporary directory created.
- *
- * Usage: <for command-line>
- * chmod01 [-c n] [-e] [-f] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -e : Turn on errno logging.
- * -f : Turn off functionality Testing.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS:
- * None.
- *
- */
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/fcntl.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-
-#include "test.h"
-#include "usctest.h"
-
-#define FILE_MODE S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH
-#define TESTFILE "testfile"
-
-const char *TCID="chmod01"; /* Test program identifier. */
-int TST_TOTAL=8; /* Total number of test conditions */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int Modes[] = {0, 07, 070, 0700, 0777, 02777, 04777, 06777};
-
-void setup(); /* setup function for the test */
-void cleanup() __attribute__ ((noreturn));/* cleanup function for the test */
-
-int
-main(int ac, char **av)
-{
- struct stat stat_buf; /* stat(2) struct contents */
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- int ind; /* counter variable for chmod(2) tests */
- unsigned mode; /* file mode permission */
-
- TST_TOTAL = sizeof(Modes) / sizeof(int);
-
- /* Parse standard options given to run the test. */
- msg = parse_opts(ac, av, (option_t *) NULL, NULL);
- if (msg != (char *) NULL) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /* Perform global setup for test */
- setup();
-
- /* Check looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- /* Reset Tst_count in case we are looping. */
- Tst_count = 0;
-
- for (ind = 0; ind < TST_TOTAL; ind++) {
- mode = Modes[ind];
-
- /*
- * Call chmod(2) with different mode permission
- * bits to set it for "testfile".
- */
- TEST(chmod(TESTFILE, mode));
-
- /* check return code of chmod(2) */
- if (TEST_RETURN == -1) {
- tst_resm(TFAIL,
- "chmod(%s, %#o) Failed, errno=%d : %s",
- TESTFILE, mode, TEST_ERRNO,
- strerror(TEST_ERRNO));
- continue;
- }
- /*
- * Perform functional verification if test
- * executed without (-f) option.
- */
- if (STD_FUNCTIONAL_TEST) {
- /*
- * Get the testfile information using
- * stat(2).
- */
- if (stat(TESTFILE, &stat_buf) < 0) {
- tst_brkm(TFAIL, cleanup, "stat(2) of "
- "%s failed, errno:%d",
- TESTFILE, TEST_ERRNO);
- }
- stat_buf.st_mode &= ~S_IFREG;
-
- /*
- * Check for expected mode permissions
- * on testfile.
- */
- if (stat_buf.st_mode == mode) {
- tst_resm(TPASS, "Functionality of "
- "chmod(%s, %#o) successful",
- TESTFILE, mode);
- } else {
- tst_resm(TFAIL, "%s: Incorrect "
- "modes 0%03o, Expected 0%03o",
- TESTFILE, stat_buf.st_mode,
- mode);
- }
- } else {
- tst_resm(TPASS, "call succeeded");
- }
- }
- } /* End for TEST_LOOPING */
-
- /* Call cleanup() to undo setup done for the test. */
- cleanup();
-
- /*NOTREACHED*/
-} /* End main */
-
-/*
- * void
- * setup() - performs all ONE TIME setup for this test.
- * Create a temporary directory and change directory to it.
- * Create a test file under temporary directory and close it
- */
-void
-setup()
-{
- int fd;
-
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Creat a test file under temporary directory and close it */
- if ((fd = open(TESTFILE, O_RDWR|O_CREAT, FILE_MODE)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR|O_CREAT, %o) Failed, errno=%d : %s",
- TESTFILE, FILE_MODE, errno, strerror(errno));
- }
- if (close(fd) == -1) {
- tst_brkm(TBROK, cleanup,
- "close(%s) Failed, errno=%d : %s",
- TESTFILE, errno, strerror(errno));
- }
-
-} /* End setup() */
-
-/*
- * void
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- * Remove the test directory and testfile created in the setup.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- */
- TEST_CLEANUP;
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/chmod02.c b/winsup/testsuite/winsup.api/ltp/chmod02.c
deleted file mode 100644
index 8026768ae..000000000
--- a/winsup/testsuite/winsup.api/ltp/chmod02.c
+++ /dev/null
@@ -1,260 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : chmod02
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for chmod(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 8
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) chmod(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * The libcuts.a and libsys.a libraries must be included in
- * the compilation of this test.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the chmod(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * chmod(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/fcntl.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-void setup();
-void cleanup(void) __attribute__((noreturn));
-
-
-
-const char *TCID="chmod02"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-char fname[255];
-const char *buf = "file contents\n";
-
-int Modes[] = {0, 07, 070, 0700, 0777, 02777, 04777, 06777};
-
-
-/***********************************************************************
- * Main
- ***********************************************************************/
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- int ind;
- int mode;
-
- TST_TOTAL = sizeof(Modes) / sizeof(int);
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *) NULL ) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- for (ind=0; ind<TST_TOTAL; ind++) {
- mode=Modes[ind];
-
- /*
- * Call chmod(2) with mode argument on fname
- */
- TEST(chmod(fname, mode));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- tst_resm(TFAIL, "chmod(%s, %#o) Failed, errno=%d : %s", fname,
- mode, TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "chmod(%s, %#o) returned %d", fname,
- mode, TEST_RETURN);
- }
- else
- Tst_count++;
- }
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- int fd;
-
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- strcat(fname, "tfile");
- if ((fd = open(fname,O_RDWR|O_CREAT,0700)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR|O_CREAT,0700) Failed, errno=%d : %s",
- fname, errno, strerror(errno));
- } else if (write(fd, &buf, strlen(buf)) == -1) {
- tst_brkm(TBROK, cleanup,
- "write(%s, &buf, strlen(buf)) Failed, errno=%d : %s",
- fname, errno, strerror(errno));
- } else if (close(fd) == -1) {
- tst_brkm(TBROK, cleanup,
- "close(%s) Failed, errno=%d : %s",
- fname, errno, strerror(errno));
- }
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- */
- TEST_CLEANUP;
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
-
diff --git a/winsup/testsuite/winsup.api/ltp/chown01.c b/winsup/testsuite/winsup.api/ltp/chown01.c
deleted file mode 100644
index b3cd08811..000000000
--- a/winsup/testsuite/winsup.api/ltp/chown01.c
+++ /dev/null
@@ -1,244 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : chown01
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for chown(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) chown(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the chown(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * chown(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <sys/types.h>
-#include <sys/fcntl.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-
-const char *TCID="chown01"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0};
-
-char fname[255];
-int fd, uid, gid;
-const char *buf = "davef";
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call chown(2)
- */
- TEST(chown(fname, uid,gid));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "chown(%s, %d,%d) Failed, errno=%d : %s", fname, uid, gid,
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "chown(%s, %d,%d) returned %d", fname, uid, gid, TEST_RETURN);
- }
- } /* end else */
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* create a temp dir and cd to it. */
- tst_tmpdir();
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- /* set uid and gid */
- uid=geteuid();
- gid=getegid();
-
- sprintf(fname,"t_%d",getpid());
- if ((fd = open(fname,O_RDWR|O_CREAT,0700)) == -1) {
- tst_brkm(TBROK, cleanup, "open(%s, O_RDWR|O_CREAT,0700) Failed, errno=%d : %s", fname, errno, strerror(errno));
- } else if (write(fd, &buf, strlen(buf)) == -1) {
- tst_brkm(TBROK, cleanup, "write(%s, &buf, strlen(buf)) Failed, errno=%d : %s", fname, errno, strerror(errno));
- } else if (close(fd) == -1) {
- tst_brkm(TBROK, cleanup, "close(%s) Failed, errno=%d : %s", fname, errno, strerror(errno));
- }
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* remove temp dir and files */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
-
-
diff --git a/winsup/testsuite/winsup.api/ltp/close01.c b/winsup/testsuite/winsup.api/ltp/close01.c
deleted file mode 100644
index 4d4059823..000000000
--- a/winsup/testsuite/winsup.api/ltp/close01.c
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * NAME
- * close01.c
- *
- * DESCRIPTION
- * Test that closing a regular file and a pipe works correctly
- *
- * ALGORITHM
- * Creat a file, and dup() a fildes
- * Open a pipe
- * call close() using the TEST macro
- * if the call fails
- * issue a FAIL message and continue
- * else if STD_FUNCTIONAL_TEST
- * attempt to close the file/pipe again
- * if there is an error
- * issue a PASS message
- * else
- * issue a FAIL message
- * else
- * issue a PASS message
- *
- *
- * USAGE: <for command-line>
- * close01 [-c n] [-f] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -f : Turn off functionality Testing.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS
- * None
- */
-
-#include <errno.h>
-#include <fcntl.h>
-#include <sys/stat.h>
-#include "test.h"
-#include "usctest.h"
-
-void cleanup(void) __attribute__((noreturn));
-void setup(void);
-
-const char *TCID = "close01()";
-int TST_TOTAL = 2;
-extern int Tst_count;
-
-char fname[40] = "";
-
-int fild = -1;
-int newfd = -1;
-int pipefildes[2];
-
-struct test_case_t {
- int *fd;
- const char *type;
-} TC[] = {
- /* file descriptor for a regular file */
- {&newfd, "file"},
-
- /* file descriptor for a pipe */
- {&pipefildes[0], "pipe"}
-};
-
-int
-main(int ac, char **av)
-{
-
- int i;
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /* parse standard options */
- if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
- /*NOTREACHED*/
- }
-
- setup(); /* global setup */
-
- /* The following loop checks looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping */
- Tst_count = 0;
-
- /* set up the file and pipe for the test */
- if ((fild = creat(fname, 0777)) == -1) {
- perror (fname);
- tst_brkm(TBROK, cleanup, "can't open file %s", fname);
- }
-
- if ((newfd = dup(fild)) == -1) {
- tst_brkm(TBROK, cleanup, "can't dup the file des");
- }
-
- if (pipe(pipefildes) == -1) {
- tst_brkm(TBROK, cleanup, "can't open pipe");
- }
-
- /* loop through the test cases */
-
- for (i = 0; i < TST_TOTAL; i++) {
-
- TEST(close(*TC[i].fd));
-
- if (TEST_RETURN == -1) {
- tst_resm(TFAIL, "call failed unexpectedly");
- continue;
- }
-
- if (STD_FUNCTIONAL_TEST) {
- /* attempt to close the fd again */
- if (close(*TC[i].fd) == -1) {
- tst_resm(TPASS, "%s appears closed",
- TC[i].type);
- } else {
- tst_resm(TFAIL, "%s close succeeded on"
- "second attempt", TC[i].type);
- }
- } else {
- tst_resm(TPASS, "call succeeded");
- }
- }
-
- }
- cleanup();
- /*NOTREACHED*/
-}
-
-/*
- * setup() - performs all ONE TIME setup for this test
- */
-void
-setup(void)
-{
- int mypid;
-
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- umask(0);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- mypid = getpid();
- sprintf(fname, "fname.%d", mypid);
-}
-
-/*
- * cleanup() - performs all the ONE TIME cleanup for this test at completion
- * or premature exit.
- */
-void
-cleanup(void)
-{
- /*
- * print timing status if that option was specified.
- * print errno log if that option was specified
- */
- TEST_CLEANUP;
-
- if (fild >= 0)
- close (fild);
- if (newfd >= 0)
- close (newfd);
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/close02.c b/winsup/testsuite/winsup.api/ltp/close02.c
deleted file mode 100644
index 72ecf8181..000000000
--- a/winsup/testsuite/winsup.api/ltp/close02.c
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * NAME
- * close02.c
- *
- * DESCRIPTION
- * Check that an invalid file descriptor returns EBADF
- *
- * ALGORITHM
- * loop if that option is specified
- * call close using the TEST macro and passing in an invalid fd
- * if the call succeedes
- * issue a FAIL message
- * else
- * log the errno
- * if the errno == EBADF
- * issue a PASS message
- * else
- * issue a FAIL message
- * cleanup
- *
- * USAGE: <for command-line>
- * close02 [-c n] [-e] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -e : Turn on errno logging.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS
- * None
- */
-
-#include <errno.h>
-#include <sys/stat.h>
-#include "test.h"
-#include "usctest.h"
-
-void cleanup(void) __attribute__((noreturn));
-void setup(void);
-
-int exp_enos[] = {EBADF, 0};
-
-const char *TCID = "close02()";
-int TST_TOTAL = 1;
-extern int Tst_count;
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /* parse standard options */
- if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
- /*NOTREACHED*/
- }
-
- setup(); /* global setup */
-
- /* set up expected errnos */
- TEST_EXP_ENOS(exp_enos);
-
- /* The following loop checks looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping */
- Tst_count = 0;
-
- TEST(close(-1));
-
- if (TEST_RETURN != -1) {
- tst_resm(TFAIL, "Closed a non existent fildes");
- } else {
- TEST_ERROR_LOG(TEST_ERRNO);
-
- if (TEST_ERRNO != EBADF) {
- tst_resm(TFAIL, "close() FAILED to set errno "
- "to EBADF on an invalid fd, got %d",
- errno);
- } else {
- tst_resm(TPASS, "call returned EBADF");
- }
- }
- }
- cleanup();
- /*NOTREACHED*/
-}
-
-/*
- * setup() - performs all ONE TIME setup for this test
- */
-void
-setup(void)
-{
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- umask(0);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-}
-
-/*
- * cleanup() - performs all the ONE TIME cleanup for this test at completion
- * or premature exit.
- */
-void
-cleanup(void)
-{
- /*
- * print timing status if that option was specified.
- * print errno log if that option was specified
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/close08.c b/winsup/testsuite/winsup.api/ltp/close08.c
deleted file mode 100644
index 3fbcc3be8..000000000
--- a/winsup/testsuite/winsup.api/ltp/close08.c
+++ /dev/null
@@ -1,241 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : close08
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for close(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) close(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the close(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * close(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <sys/types.h>
-#include <sys/fcntl.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-
-const char *TCID="close08"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0};
-
-char fname[255];
-int fd;
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- if ((fd=open(fname,O_RDWR|O_CREAT,0700)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR|O_CREAT,0700) Failed, errno=%d : %s",
- fname, TEST_ERRNO, strerror(TEST_ERRNO));
- }
- /*
- * Call close(2)
- */
- TEST(close(fd));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "close(%s) Failed, errno=%d : %s", fname,
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "close(%s) returned %d", fname, TEST_RETURN);
- }
- }
-
- if (unlink(fname) == -1) {
- tst_brkm(TBROK, cleanup, "unlink(%s) Failed, errno=%d : %s",
- fname, errno, strerror(errno));
- }
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- sprintf(fname,"tfile_%d",getpid());
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
-
-
diff --git a/winsup/testsuite/winsup.api/ltp/creat01.c b/winsup/testsuite/winsup.api/ltp/creat01.c
deleted file mode 100644
index 6f891701e..000000000
--- a/winsup/testsuite/winsup.api/ltp/creat01.c
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * NAME
- * creat01.c
- *
- * DESCRIPTION
- * Testcase to check the basic functionality of the creat(2) system call.
- *
- * ALGORITHM
- * 1. creat() a file using 0444 mode, write to the fildes, write
- * should return a positive count.
- *
- * 2. creat() should truncate a file to 0 bytes if it already
- * exists, and should not fail.
- *
- * USAGE: <for command-line>
- * creat01 [-c n] [-f] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -f : Turn off functionality Testing.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS
- * None
- */
-
-#include <fcntl.h>
-#include <sys/stat.h>
-#include <errno.h>
-#include "test.h"
-#include "usctest.h"
-
-void setup(void);
-void cleanup(void) __attribute__((noreturn));
-void functest1(void);
-void functest2(void);
-
-const char *TCID = "creat01";
-int TST_TOTAL = 2;
-extern int Tst_count;
-
-char filename[40];
-
-#define MODE1 0644
-#define MODE2 0444
-
-struct test_case_t {
- char *fname;
- int mode;
- void (*functest)();
-} TC[] = {
- /* creat() the file and write to it */
- {filename, MODE1, functest1},
-
- /* creat() the same file and check that it is now 0 length */
- {filename, MODE2, functest2}
-};
-
-int
-main(int ac, char **av)
-{
- int i;
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /* parse standard options */
- if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){
- tst_brkm(TBROK, tst_exit, "OPTION PARSING ERROR - %s", msg);
- }
-
- setup(); /* set "tstdir", and "testfile" variables */
-
- /* check looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping */
- Tst_count = 0;
-
- /* loop through the test cases */
-
- for (i=0; i<TST_TOTAL; i++) {
- TEST(creat(filename, TC[i].mode));
-
- if (TEST_RETURN == -1) {
- tst_resm(TFAIL, "Could not creat file %s",
- filename);
- continue;
- }
-
- if (STD_FUNCTIONAL_TEST) {
- (*TC[i].functest)();
- } else {
- tst_resm(TPASS, "call succeeded");
- }
- if (TEST_RETURN >= 0) {
- close(TEST_RETURN);
- }
- }
- }
- cleanup();
-
- /*NOTREACHED*/
-}
-
-/*
- * functest1() - check the functionality of the first test by making sure
- * that a write to the file succeeds
- */
-void
-functest1()
-{
- if (write(TEST_RETURN, "A", 1) != 1) {
- tst_resm(TFAIL, "write was unsuccessful");
- } else {
- tst_resm(TPASS, "file was created and written to successfully");
- }
-}
-
-/*
- * functest2() - check the functionality of the second test by making sure
- * that the file is now 0 length
- */
-void
-functest2()
-{
- struct stat buf;
-
- if (stat(filename, &buf) < 0) {
- tst_brkm(TBROK, cleanup, "failed to stat test file");
- /*NOTREACHED*/
- }
- if (buf.st_size != 0) {
- tst_resm(TFAIL, "creat() FAILED to truncate "
- "file to zero bytes");
- } else {
- tst_resm(TPASS, "creat() truncated existing file to 0 bytes");
- }
-}
-
-/*
- * setup() - performs all ONE TIME setup for this test
- */
-void
-setup()
-{
- if (geteuid() == 0) {
- tst_brkm(TBROK, tst_exit, "Must not run this as root");
- /*NOTREACHED*/
- }
-
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- umask(0);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- tst_tmpdir();
-
- sprintf(filename, "creat01.%d", getpid());
-}
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- unlink(filename);
-
- /* delete the test directory created in setup() */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/creat03.c b/winsup/testsuite/winsup.api/ltp/creat03.c
deleted file mode 100644
index 2ca21f1e0..000000000
--- a/winsup/testsuite/winsup.api/ltp/creat03.c
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * NAME
- * creat03.c
- *
- * DESCRIPTION
- * Testcase to check whether the sticky bit cleared.
- *
- * ALGORITHM
- * Creat a new file, fstat.st_mode should have the 01000 bit off
- *
- * USAGE: <for command-line>
- * creat03 [-c n] [-f] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -f : Turn off functionality Testing.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS
- * None
- */
-
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include "test.h"
-#include "usctest.h"
-
-const char *TCID = "creat03"; /* Test program identifier */
-int TST_TOTAL = 1; /* Total number of test cases */
-extern int Tst_count; /* Test case counter */
-
-char pfilname[40] = "";
-#define FMODE 0444
-
-void setup(void);
-void cleanup(void) __attribute__((noreturn));
-
-int
-main(int ac, char **av)
-{
- struct stat statbuf;
- unsigned short filmode;
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /* parse standard options */
- if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
- /*NOTREACHED*/
- }
-
- setup();
-
- /* check looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping */
- Tst_count = 0;
-
- TEST(creat(pfilname, FMODE));
-
- if (TEST_RETURN == -1) {
- tst_resm(TFAIL, "Cannot creat %s", pfilname);
- continue;
- /*NOTREACHED*/
- }
-
- if (STD_FUNCTIONAL_TEST) {
- if (fstat(TEST_RETURN, &statbuf) == -1) {
- tst_brkm(TBROK, cleanup, "fstat() failed");
- }
- filmode = statbuf.st_mode;
- tst_resm(TINFO, "Created file has mode = 0%o", filmode);
- if ((filmode & S_ISVTX) != 0) {
- tst_resm(TFAIL, "save text bit not cleared");
- } else {
- tst_resm(TPASS, "save text bit cleared");
- }
- } else {
- tst_resm(TPASS, "call succeeded");
- }
-
- if (TEST_RETURN >= 0) {
- close(TEST_RETURN);
- }
-
- /* clean up things in case we are looping */
- if (unlink(pfilname) == -1) {
- tst_brkm(TBROK, cleanup, "couldn't remove file");
- }
- }
- cleanup();
-
- /*NOTREACHED*/
-}
-
-/*
- * setup() - performs all ONE TIME setup for this test
- */
-void
-setup(void)
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- /* make a temp dir and cd to it */
- tst_tmpdir();
-
- sprintf(pfilname, "./creat4.%d", getpid());
-}
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at completion or
- * premature exit
- */
-void
-cleanup(void)
-{
- TEST_CLEANUP;
-
- /* remove the tmp dir and all its files */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/creat09.c b/winsup/testsuite/winsup.api/ltp/creat09.c
deleted file mode 100644
index c3c88a7c6..000000000
--- a/winsup/testsuite/winsup.api/ltp/creat09.c
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : creat09
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for creat(2) using 0700 argument.
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) creat(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the creat(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * creat(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <sys/types.h>
-#include <sys/fcntl.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-
-const char *TCID="creat09"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0};
-
-char fname[255];
-int fd;
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
-
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- *******************************************
- * Call creat(2) with 0700 argument on fname
- *******************************************
- */
- TEST(creat(fname, 0700));
-
- /* check return code */
-
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "creat(%s, 0700) Failed, errno=%d : %s", fname,
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "creat(%s, 0700) returned %d", fname, TEST_RETURN);
- }
- }
-
- /* close and remove file, possibly for next loop */
- if (close(TEST_RETURN) == -1) {
- tst_brkm(TBROK, cleanup,
- "close(%s) Failed, errno=%d : %s",
- fname, errno, strerror(errno));
- } else if (unlink(fname) == -1) {
- tst_resm(TWARN, "unlink(%s) Failed, errno=%d : %s",
- fname, errno, strerror(errno));
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- sprintf(fname,"tfile_%d",getpid());
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
-
-
diff --git a/winsup/testsuite/winsup.api/ltp/dup01.c b/winsup/testsuite/winsup.api/ltp/dup01.c
deleted file mode 100644
index 521df6a78..000000000
--- a/winsup/testsuite/winsup.api/ltp/dup01.c
+++ /dev/null
@@ -1,261 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : dup01
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for dup(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) dup(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the dup(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * dup(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <sys/types.h>
-#include <sys/fcntl.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-const char *TCID="dup01"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0};
-
-char Fname[255];
-int Fd;
-
-/***********************************************************************
- * Main
- ***********************************************************************/
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *) NULL ) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call dup(2)
- */
- TEST( dup(Fd) );
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "dup(%s) Failed, errno=%d : %s", Fname,
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "dup(%s) returned %d", Fname, TEST_RETURN);
- }
-
- /* close the new file so loops do not open too many files */
- if (close(TEST_RETURN) == -1) {
- tst_brkm(TBROK, cleanup, "close(%s) Failed, errno=%d : %s",
- Fname, errno, strerror(errno));
- }
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /*
- * Initialize Fd in case we get a quick signal
- */
- Fd=-1;
-
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- sprintf(Fname, "dupfile");
- if ((Fd = open(Fname,O_RDWR|O_CREAT,0700)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR|O_CREAT,0700) Failed, errno=%d : %s",
- Fname, errno, strerror(errno));
- }
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* close the open file we've been dup'ing */
- if (Fd != -1) {
- if (close(Fd) == -1) {
- tst_resm(TWARN, "close(%s) Failed, errno=%d : %s",
- Fname, errno, strerror(errno));
- }
- Fd=-1;
- }
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
-
-
diff --git a/winsup/testsuite/winsup.api/ltp/dup02.c b/winsup/testsuite/winsup.api/ltp/dup02.c
deleted file mode 100644
index ee759b89b..000000000
--- a/winsup/testsuite/winsup.api/ltp/dup02.c
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : dup02
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Negative test for dup(2) with bad fd.
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 2
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : Richard Logan
- *
- * CO-PILOT : William Roske
- *
- * DATE STARTED : 06/94
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1-?.) dup(2) returns -1 with errno set to EBADF...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- * Standard tst_res formatted output
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Loop through the test cases
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * if doing functional check
- * check if errno set correctly, report results
- * Otherwise, Issue a FAIL message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <sys/types.h>
-#include <sys/fcntl.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-const char *TCID="dup02"; /* Test program identifier. */
-int TST_TOTAL=2; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0};
-
-int Fds[] = { -1, 1500 };
-
-
-/***********************************************************************
- * Main
- ***********************************************************************/
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- int nfds = sizeof(Fds) / sizeof(int);
- int ind;
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *) NULL ) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- for (ind=0; ind<nfds; ind++) {
-
- /*
- * Call dup(2)
- */
- TEST( dup(Fds[ind]) );
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- if ( STD_FUNCTIONAL_TEST ) {
- if ( TEST_ERRNO == EBADF ) {
- tst_resm(TPASS, "dup(%d) Failed, errno=%d : %s", Fds[ind],
- TEST_ERRNO, strerror(TEST_ERRNO));
- }
- else {
- tst_resm(TFAIL,
- "dup(%d) Failed, errno=%d %s, expected %d (EBADF)",
- Fds[ind], TEST_ERRNO, strerror(TEST_ERRNO), EBADF);
- }
- }
- } else {
- tst_resm(TFAIL, "dup(%d) returned %d, expected -1, errno:%d (EBADF)",
- Fds[ind], TEST_RETURN, EBADF);
-
- /* close the new file so loops do not open too many files */
- if (close(TEST_RETURN) == -1) {
- tst_brkm(TBROK, cleanup, "close(%d) Failed, errno=%d : %s",
- TEST_RETURN, errno, strerror(errno));
- }
- }
- }
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
-
-
diff --git a/winsup/testsuite/winsup.api/ltp/dup03.c b/winsup/testsuite/winsup.api/ltp/dup03.c
deleted file mode 100644
index dc2efbb0a..000000000
--- a/winsup/testsuite/winsup.api/ltp/dup03.c
+++ /dev/null
@@ -1,291 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : dup03
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Negative test for dup(2) (too many fds)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : Richard Logan
- *
- * CO-PILOT : William Roske
- *
- * DATE STARTED : 06/94
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) dup(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <sys/types.h>
-#include <sys/fcntl.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-void setup();
-void cleanup(void) __attribute__((noreturn));
-
-const char *TCID="dup03"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-
-char Fname[255];
-int *Fd = NULL;
-int Nfds=0;
-
-/***********************************************************************
- * Main
- ***********************************************************************/
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL ) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call dup(2)
- */
- TEST( dup(Fd[0]) );
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- if ( STD_FUNCTIONAL_TEST ) {
- if ( TEST_ERRNO == EMFILE ) {
- tst_resm(TPASS, "dup(%d) Failed, errno=%d : %s", Fd[0],
- TEST_ERRNO, strerror(TEST_ERRNO));
- }
- else {
- tst_resm(TFAIL, "dup(%d) Failed, errno=%d %s, expected %d (EMFILE)",
- Fd[0], TEST_ERRNO, strerror(TEST_ERRNO), EMFILE);
- }
- }
- } else {
- tst_resm(TFAIL, "dup(%d) returned %d, expected -1, errno:%d (EMFILE)",
- Fd[0], TEST_RETURN, EMFILE);
-
- /* close the new file so loops do not open too many files */
- if (close(TEST_RETURN) == -1) {
- tst_brkm(TBROK, cleanup, "close(%s) Failed, errno=%d : %s",
- Fname, errno, strerror(errno));
- }
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- long maxfds;
-
- /*
- * Initialize Fd in case we get a quick signal
- */
- maxfds = sysconf(_SC_OPEN_MAX);
- if (maxfds < 1) {
- tst_brkm(TBROK, cleanup,
- "sysconf(_SC_OPEN_MAX) Failed, errno=%d : %s",
- errno, strerror(errno));
- }
-
- Fd = (int *)malloc(maxfds*sizeof(int));
- Fd[0]=-1;
-
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- /*
- * open the file as many times as it takes to use up all fds
- */
- sprintf(Fname, "dupfile");
- for (Nfds=1; Nfds<=maxfds; Nfds++) {
- if ((Fd[Nfds-1] = open(Fname,O_RDWR|O_CREAT,0700)) == -1) {
-
- Nfds--; /* on a open failure, decrement the counter */
- if ( errno == EMFILE ) {
- break;
- }
- else { /* open failed for some other reason */
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR|O_CREAT,0700) Failed, errno=%d : %s",
- Fname, errno, strerror(errno));
- }
- }
- }
-
- /*
- * make sure at least one was open and that all fds were opened.
- */
- if ( Nfds == 0 ) {
- tst_brkm(TBROK, cleanup, "Unable to open at least one file");
- }
- if ( Nfds > maxfds ) {
- tst_brkm(TBROK, cleanup,
- "Unable to open enough files to use all file descriptors, tried %d",
- maxfds);
- }
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* close the open file we've been dup'ing */
- if (Fd) {
- while (Nfds-- >0) {
- if (close(Fd[Nfds]) == -1) {
- tst_resm(TWARN, "close(%s) Failed, errno=%d : %s",
- Fname, errno, strerror(errno));
- }
- Fd[Nfds]=-1;
- }
- free(Fd);
- }
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
-
-
diff --git a/winsup/testsuite/winsup.api/ltp/dup04.c b/winsup/testsuite/winsup.api/ltp/dup04.c
deleted file mode 100644
index 1c4eaf188..000000000
--- a/winsup/testsuite/winsup.api/ltp/dup04.c
+++ /dev/null
@@ -1,297 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : dup04
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for dup(2) of a system pipe descriptor
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 2
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : Richard Logan
- *
- * CO-PILOT : William Roske
- *
- * DATE STARTED : 06/94
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) dup(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the dup(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * dup(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <sys/types.h>
-#include <sys/fcntl.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-const char *TCID="dup04"; /* Test program identifier. */
-int TST_TOTAL=2; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0};
-
-int Fd[2];
-
-/***********************************************************************
- * Main
- ***********************************************************************/
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *) NULL ) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call dup(2) for read side
- */
- TEST( dup(Fd[0]) );
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "dup(%d) read side of syspipe Failed, errno=%d : %s", Fd[0],
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "dup(%d) read side of syspipe returned %d", Fd[0],
- TEST_RETURN);
-
- }
- else
- Tst_count++;
-
- /* close the new file so loops do not open too many files */
- if (close(TEST_RETURN) == -1) {
- tst_brkm(TBROK, cleanup, "close(%d) Failed, errno=%d : %s",
- TEST_RETURN, errno, strerror(errno));
- }
- }
-
- /*
- * Call dup(2) for write side
- */
- TEST( dup(Fd[1]) );
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "dup(%d) write side of syspipe Failed, errno=%d : %s", Fd[1],
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "dup(%d) write side of syspipe returned %d", Fd[1],
- TEST_RETURN);
-
- }
- else
- Tst_count++;
-
- /* close the new file so loops do not open too many files */
- if (close(TEST_RETURN) == -1) {
- tst_brkm(TBROK, cleanup, "close(%d) Failed, errno=%d : %s",
- TEST_RETURN, errno, strerror(errno));
- }
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /*
- * Initialize Fd in case we get a quick signal
- */
- Fd[0]=-1;
-
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- if ( pipe(Fd) == -1 ) {
- tst_brkm(TBROK, cleanup, "pipe(&Fd) Failed, errno=%d : %s",
- errno, strerror(errno));
- }
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- int ind;
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* close the open file we've been dup'ing */
- if (Fd[0] != -1) {
- for (ind=0; ind<2; ind++) {
- if (close(Fd[ind]) == -1) {
- tst_resm(TWARN, "close(%d) Failed, errno=%d : %s",
- Fd[ind], errno, strerror(errno));
- }
- Fd[ind]=-1;
- }
- }
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-
-} /* End cleanup() */
-
-
diff --git a/winsup/testsuite/winsup.api/ltp/dup05.c b/winsup/testsuite/winsup.api/ltp/dup05.c
deleted file mode 100644
index 097688353..000000000
--- a/winsup/testsuite/winsup.api/ltp/dup05.c
+++ /dev/null
@@ -1,266 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : dup05
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for dup(2) of a named pipe descriptor
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : Richard Logan
- *
- * CO-PILOT : William Roske
- *
- * DATE STARTED : 06/94
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) dup(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the dup(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * dup(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/fcntl.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-const char *TCID="dup05"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0};
-
-char Fname[255];
-int Fd;
-
-/***********************************************************************
- * Main
- ***********************************************************************/
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *) NULL ) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call dup(2)
- */
- TEST( dup(Fd) );
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "dup(%s) Failed, errno=%d : %s", Fname,
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "dup(%s) returned %d", Fname, TEST_RETURN);
- }
-
- /* close the new file so loops do not open too many files */
- if (close(TEST_RETURN) == -1) {
- tst_brkm(TBROK, cleanup, "close(%s) Failed, errno=%d : %s",
- Fname, errno, strerror(errno));
- }
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /*
- * Initialize Fd in case we get a quick signal
- */
- Fd=-1;
-
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- sprintf(Fname, "dupfile");
- if ( mkfifo(Fname, 0777) == -1 ) {
- tst_brkm(TBROK, cleanup,
- "mkfifo(%s, 0700) Failed, errno=%d : %s",
- Fname, errno, strerror(errno));
- }
- if ((Fd = open(Fname, O_RDWR, 0700)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR, 0700) Failed, errno=%d : %s",
- Fname, errno, strerror(errno));
- }
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* close the open file we've been dup'ing */
- if (Fd != -1) {
- if (close(Fd) == -1) {
- tst_resm(TWARN, "close(%s) Failed, errno=%d : %s",
- Fname, errno, strerror(errno));
- }
- Fd=-1;
- }
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
-
-
diff --git a/winsup/testsuite/winsup.api/ltp/execl01.c b/winsup/testsuite/winsup.api/ltp/execl01.c
deleted file mode 100644
index f91b0a820..000000000
--- a/winsup/testsuite/winsup.api/ltp/execl01.c
+++ /dev/null
@@ -1,258 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : execl01
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for execl(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 06/01/02
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) execl(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the execl(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * execl(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-
-#include <sys/types.h>
-#include <sys/wait.h>
-
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-
-const char *TCID="execl01"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-extern int Tst_nobuf; /* used to turn off buffering in tst_ routines */
-
-int exp_enos[]={0, 0}; /* Zero terminated list of expected errnos */
-
-int pid; /* process id from fork */
-int status; /* status returned from waitpid */
-
-
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- Tst_nobuf=1; /* turn off buffering in tst_ routines */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
-
- /*
- * TEST CASE:
- * fork, then call execl from child
- */
- switch(pid=fork()) {
- case 0: /* CHILD - Call execl(2) */
- execl("test", "test", NULL);
- /* should not get here!! if we do, the parent will fail the Test Case */
- exit(errno);
- case -1: /* ERROR!!! exit now!!*/
- tst_brkm(TBROK, cleanup,
- "Unable to fork a child process to exec over! Errno:%d,:%s",
- errno, strerror(errno));
- break;
- default:
- waitpid(pid, &status, 0);
- if ( WIFEXITED(status) ) {
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "execl - properly exec's a simple program..");
- }
- } else {
- TEST_ERROR_LOG(WEXITSTATUS(status));
- tst_resm(TFAIL, "Child process did not terminate properly, status=%d", status);
- }
- break;
- } /* switch */
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- /* make a temp dir and cd to it */
- tst_tmpdir();
-
- /*
- * Send out info message that timing and errnolog info is not
- * available because of the use of a child process for each exec
- */
- if ( STD_TIMING_ON )
- tst_resm(TINFO, "There are NO timing statistics produced by this test.\n\
-This is because the test forks to create a child process which then calls execl.\n\
-The TEST macro is NOT used.");
-
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* remove files and temp dir */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
-
-
diff --git a/winsup/testsuite/winsup.api/ltp/execle01.c b/winsup/testsuite/winsup.api/ltp/execle01.c
deleted file mode 100644
index ca2cdec4e..000000000
--- a/winsup/testsuite/winsup.api/ltp/execle01.c
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : execle01
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for execle(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 06/01/02
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) execle(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the execle(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * execle(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-
-#include <sys/types.h>
-#include <sys/wait.h>
-
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-
-const char *TCID="execle01"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-extern int Tst_nobuf; /* used to turn off buffering in tst_ routines */
-
-int exp_enos[]={0, 0}; /* Zero terminated list of expected errnos */
-
-int pid; /* process id from fork */
-int status; /* status returned from waitpid */
-extern char **environ; /* pointer to this processes env, to pass along */
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- Tst_nobuf=1; /* turn off buffering in tst_ routines */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
-
- /*
- * TEST CASE:
- * fork, then call execle from child
- */
- switch(pid=fork()) {
- case 0: /* CHILD - Call execle(2) */
- execle("test", "test", NULL, environ);
- /* should not get here!! if we do, the parent will fail the Test Case */
- exit(errno);
- case -1: /* ERROR!!! exit now!!*/
- tst_brkm(TBROK, cleanup,
- "Unable to fork a child process to exec over! Errno:%d,:%s",
- errno, strerror(errno));
- break;
- default:
- waitpid(pid, &status, 0);
- if ( WIFEXITED(status) ) {
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "execle - properly exec's a simple program..");
- }
- } else {
- TEST_ERROR_LOG(WEXITSTATUS(status));
- tst_resm(TFAIL, "Child process did not terminate properly, status=%d", status);
- }
- break;
- } /* switch */
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- /* make a temp dir and cd to it */
- tst_tmpdir();
-
- /*
- * Send out info message that timing and errnolog info is not
- * available because of the use of a child process for each exec
- */
- if ( STD_TIMING_ON )
- tst_resm(TINFO, "There are NO timing statistics produced by this test.\n\
-This is because the test forks to create a child process which then calls execle.\n\
-The TEST macro is NOT used.");
-
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* remove files and temp dir */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
-
-
diff --git a/winsup/testsuite/winsup.api/ltp/execlp01.c b/winsup/testsuite/winsup.api/ltp/execlp01.c
deleted file mode 100644
index c3f8b2147..000000000
--- a/winsup/testsuite/winsup.api/ltp/execlp01.c
+++ /dev/null
@@ -1,256 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : execlp01
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for execlp(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 06/01/02
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) execlp(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the execlp(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * execlp(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-
-#include <sys/types.h>
-#include <sys/wait.h>
-
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-
-const char *TCID="execlp01"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-extern int Tst_nobuf; /* used to turn off buffering in tst_ routines */
-
-int exp_enos[]={0, 0}; /* Zero terminated list of expected errnos */
-
-int pid; /* process id from fork */
-int status; /* status returned from waitpid */
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- Tst_nobuf=1; /* turn off buffering in tst_ routines */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
-
- /*
- * TEST CASE:
- * fork, then call execlp from child
- */
- switch(pid=fork()) {
- case 0: /* CHILD - Call execlp(2) */
- execlp("/usr/bin/test", "/usr/bin/test", NULL);
- /* should not get here!! if we do, the parent will fail the Test Case */
- exit(errno);
- case -1: /* ERROR!!! exit now!!*/
- tst_brkm(TBROK, cleanup,
- "Unable to fork a child process to exec over! Errno:%d,:%s",
- errno, strerror(errno));
- break;
- default:
- waitpid(pid, &status, 0);
- if ( WIFEXITED(status) ) {
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "execlp - properly exec's a simple program..");
- }
- } else {
- TEST_ERROR_LOG(WEXITSTATUS(status));
- tst_resm(TFAIL, "Child process did not terminate properly, status=%d", status);
- }
- break;
- } /* switch */
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- /* make a temp dir and cd to it */
- tst_tmpdir();
-
- /*
- * Send out info message that timing and errnolog info is not
- * available because of the use of a child process for each exec
- */
- if ( STD_TIMING_ON )
- tst_resm(TINFO, "There are NO timing statistics produced by this test.\n\
-This is because the test forks to create a child process which then calls execlp.\n\
-The TEST macro is NOT used.");
-
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* remove files and temp dir */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
-
-
diff --git a/winsup/testsuite/winsup.api/ltp/execv01.c b/winsup/testsuite/winsup.api/ltp/execv01.c
deleted file mode 100644
index f59f29702..000000000
--- a/winsup/testsuite/winsup.api/ltp/execv01.c
+++ /dev/null
@@ -1,254 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : execv01
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for execv(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 06/01/02
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) execv(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the execv(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * execv(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <errno.h>
-#include <signal.h>
-
-#include <sys/types.h>
-#include <sys/wait.h>
-
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-void cleanup();
-
-const char *TCID="execv01"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-extern int Tst_nobuf; /* used to turn off buffering in tst_ routines */
-
-int exp_enos[]={0, 0}; /* Zero terminated list of expected errnos */
-
-int pid; /* process id from fork */
-int status; /* status returned from waitpid */
-const char * const args[2]={"/usr/bin/test", 0}; /* argument list for execv call */
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- Tst_nobuf=1; /* turn off buffering in tst_ routines */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
-
- /*
- * TEST CASE:
- * fork, then call execv from child
- */
- switch(pid=fork()) {
- case 0: /* CHILD - Call execv(2) */
- execv("/usr/bin/test", args);
- /* should not get here!! if we do, the parent will fail the Test Case */
- exit(errno);
- case -1: /* ERROR!!! exit now!!*/
- tst_brkm(TBROK, cleanup,
- "Unable to fork a child process to exec over! Errno:%d,:%s",
- errno, strerror(errno));
- break;
- default:
- waitpid(pid, &status, 0);
- if ( WIFEXITED(status) ) {
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "execv - properly exec's a simple program..");
- }
- } else {
- TEST_ERROR_LOG(WEXITSTATUS(status));
- tst_resm(TFAIL, "Child process did not terminate properly, status=%d", status);
- }
- break;
- } /* switch */
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- /* make a temp dir and cd to it */
- tst_tmpdir();
-
- /*
- * Send out info message that timing and errnolog info is not
- * available because of the use of a child process for each exec
- */
- if ( STD_TIMING_ON )
- tst_resm(TINFO, "There are NO timing statistics produced by this test.\n\
-This is because the test forks to create a child process which then calls execv.\n\
-The TEST macro is NOT used.");
-
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* remove files and temp dir */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
-
-
diff --git a/winsup/testsuite/winsup.api/ltp/execve01.c b/winsup/testsuite/winsup.api/ltp/execve01.c
deleted file mode 100644
index 2584bdf05..000000000
--- a/winsup/testsuite/winsup.api/ltp/execve01.c
+++ /dev/null
@@ -1,258 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : execve01
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for execve(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 06/01/02
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) execve(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the execve(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * execve(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-
-#include <sys/types.h>
-#include <sys/wait.h>
-
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-
-const char *TCID="execve01"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-extern int Tst_nobuf; /* used to turn off buffering in tst_ routines */
-
-int exp_enos[]={0, 0}; /* Zero terminated list of expected errnos */
-
-int pid; /* process id from fork */
-int status; /* status returned from waitpid */
-const char *const args[2]={"/usr/bin/test", 0}; /* argument list for execve call */
-extern char **environ; /* pointer to this processes env, to pass along */
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- Tst_nobuf=1; /* turn off buffering in tst_ routines */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
-
- /*
- * TEST CASE:
- * fork, then call execve from child
- */
- switch(pid=fork()) {
- case 0: /* CHILD - Call execve(2) */
- execve("/usr/bin/test", args, environ);
- /* should not get here!! if we do, the parent will fail the Test Case */
- exit(errno);
- case -1: /* ERROR!!! exit now!!*/
- tst_brkm(TBROK, cleanup,
- "Unable to fork a child process to exec over! Errno:%d,:%s",
- errno, strerror(errno));
- break;
- default:
- waitpid(pid, &status, 0);
- if ( WIFEXITED(status) ) {
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "execve - properly exec's a simple program..");
- }
- } else {
- TEST_ERROR_LOG(WEXITSTATUS(status));
- tst_resm(TFAIL, "Child process did not terminate properly, status=%d", status);
- }
- break;
- } /* switch */
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- /* make a temp dir and cd to it */
- tst_tmpdir();
-
- /*
- * Send out info message that timing and errnolog info is not
- * available because of the use of a child process for each exec
- */
- if ( STD_TIMING_ON )
- tst_resm(TINFO, "There are NO timing statistics produced by this test.\n\
-This is because the test forks to create a child process which then calls execve.\n\
-The TEST macro is NOT used.");
-
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* remove files and temp dir */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
-
-
diff --git a/winsup/testsuite/winsup.api/ltp/execvp01.c b/winsup/testsuite/winsup.api/ltp/execvp01.c
deleted file mode 100644
index 8a1726a21..000000000
--- a/winsup/testsuite/winsup.api/ltp/execvp01.c
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : execvp01
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for execvp(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 06/01/02
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) execvp(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the execvp(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * execvp(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-
-#include <sys/types.h>
-#include <sys/wait.h>
-
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-
-const char *TCID="execvp01"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-extern int Tst_nobuf; /* used to turn off buffering in tst_ routines */
-
-int exp_enos[]={0, 0}; /* Zero terminated list of expected errnos */
-
-int pid; /* process id from fork */
-int status; /* status returned from waitpid */
-const char *const args[2]={"/usr/bin/test", 0}; /* argument list for execvp call */
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- Tst_nobuf=1; /* turn off buffering in tst_ routines */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
-
- /*
- * TEST CASE:
- * fork, then call execvp from child
- */
- switch(pid=fork()) {
- case 0: /* CHILD - Call execvp(2) */
- execvp("/usr/bin/test", args);
- /* should not get here!! if we do, the parent will fail the Test Case */
- exit(errno);
- case -1: /* ERROR!!! exit now!!*/
- tst_brkm(TBROK, cleanup,
- "Unable to fork a child process to exec over! Errno:%d,:%s",
- errno, strerror(errno));
- break;
- default:
- waitpid(pid, &status, 0);
- if ( WIFEXITED(status) ) {
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "execvp - properly exec's a simple program..");
- }
- } else {
- TEST_ERROR_LOG(WEXITSTATUS(status));
- tst_resm(TFAIL, "Child process did not terminate properly, status=%d", status);
- }
- break;
- } /* switch */
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- /* make a temp dir and cd to it */
- tst_tmpdir();
-
- /*
- * Send out info message that timing and errnolog info is not
- * available because of the use of a child process for each exec
- */
- if ( STD_TIMING_ON )
- tst_resm(TINFO, "There are NO timing statistics produced by this test.\n\
-This is because the test forks to create a child process which then calls execvp.\n\
-The TEST macro is NOT used.");
-
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* remove files and temp dir */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
-
-
diff --git a/winsup/testsuite/winsup.api/ltp/exit01.c b/winsup/testsuite/winsup.api/ltp/exit01.c
deleted file mode 100644
index 74e6c093b..000000000
--- a/winsup/testsuite/winsup.api/ltp/exit01.c
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * NAME
- * exit01.c
- *
- * DESCRIPTION
- * Check that exit returns the correct values to the waiting parent
- *
- * ALGORITHM
- * Fork a process that immediately calls exit() with a known
- * value. Check for that value in the parent.
- *
- * USAGE
- * exit01
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS
- * None
- */
-
-#include <signal.h>
-#include <errno.h>
-#include <sys/stat.h>
-#include <sys/wait.h>
-#include "test.h"
-#include "usctest.h"
-
-void cleanup(void) __attribute__((noreturn));
-void setup(void);
-
-const char *TCID = "exit01";
-int TST_TOTAL = 1;
-extern int Tst_count;
-
-int
-main(int ac, char **av)
-{
- int pid, npid, sig, nsig, exno, nexno, status;
- int rval = 0;
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /* parse standard options */
- if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){
- tst_brkm(TBROK, cleanup, "OPTION PARSIkNG ERROR - %s", msg);
- /*NOTREACHED*/
- }
-
- setup(); /* global setup for test */
-
- /* check looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count = 0;
-
- sig = 0;
- exno = 1;
-
- if ((pid = fork()) == -1) {
- tst_brkm(TBROK, cleanup, "fork failed, errno=%d",
- errno, strerror(errno));
- }
-
- if (pid == 0) { /* parent */
- exit(exno);
- } else {
- sleep(1); /* let child start */
- npid = wait(&status);
-
- if (npid != pid) {
- tst_resm(TFAIL, "wait error: "
- "unexpected pid returned");
- rval = 1;
- }
-
- nsig = status % 256;
-
- /*
- * Check if the core dump bit has been set, bit # 7
- */
- if (nsig >= 128) {
- nsig = nsig - 128;
- }
-
- /*
- * nsig is the signal number returned by wait
- */
- if (nsig != sig) {
- tst_resm(TFAIL, "wait error: "
- "unexpected signal returned");
- rval = 1;
- }
-
- /*
- * nexno is the exit number returned by wait
- */
- nexno = status / 256;
- if (nexno != exno) {
- tst_resm(TFAIL, "wait error: "
- "unexpected exit number returned");
- rval = 1;
- }
- }
-
- if (rval != 1) {
- tst_resm(TPASS, "exit() test PASSED");
- }
- }
- cleanup();
-
- /*NOTREACHED*/
-}
-
-/*
- * setup() - performs all ONE TIME setup for this test
- */
-void
-setup()
-{
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- umask(0);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-}
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at completion or
- * premature exit.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/exit02.c b/winsup/testsuite/winsup.api/ltp/exit02.c
deleted file mode 100644
index 1503106e9..000000000
--- a/winsup/testsuite/winsup.api/ltp/exit02.c
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * NAME
- * exit02.c
- *
- * DESCRIPTION
- * Check that exit flushes output file buffers and closes files upon
- * exitting
- *
- * ALGORITHM
- * Fork a process that creates a file and writes a few bytes, and
- * calls exit WITHOUT calling close(). The parent then reads the
- * file. If everything that was written is present in the file, then
- * the test passes.
- *
- * USAGE
- * exit02
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS
- * None
- */
-
-#include <errno.h>
-#include <signal.h>
-#include <fcntl.h>
-#include <sys/wait.h>
-#include "test.h"
-#include "usctest.h"
-
-void cleanup(void) __attribute__((noreturn));
-void setup(void);
-
-const char *TCID = "exit02";
-int TST_TOTAL = 1;
-extern int Tst_count;
-
-#define READ 0
-#define WRITE 1
-#define MODE 0666
-
-char filen[40];
-
-int
-main(int ac, char **av)
-{
- int pid, npid, sig, nsig, exno, nexno, status;
- int filed;
- char wbuf[BUFSIZ], rbuf[BUFSIZ];
- int len, rlen;
- int rval = 0;
- char *strcpy();
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /*
- * parse standard options
- */
- if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
- /*NOTREACHED*/
- }
-
- setup(); /* global setup for test */
-
- /*
- * The following loop checks looping state if -i option given
- */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- /*
- * reset Tst_count in case we are looping.
- */
- Tst_count = 0;
-
- strcpy(wbuf, "abcd");
- len = strlen(wbuf);
-
- exno = sig = 0;
-
- if ((pid = fork()) == -1) {
- tst_brkm(TBROK, cleanup, "fork failed, error no = %d",
- errno, strerror(errno));
- }
-
- if (pid == 0) { /* child */
- sleep(1);
- if ((filed = creat(filen, MODE)) == -1) {
- tst_resm(TINFO, "creat error: unable to"
- "open output file");
- exit(2);
- }
- if (write(filed, wbuf, len) != len) {
- tst_resm(TINFO, "write error");
- exit(2);
- }
- close(filed);
- exit(exno);
- } else { /* parent */
- npid = wait(&status);
-
- if (npid != pid) {
- tst_resm(TFAIL, "wait error: "
- "unexpected pid returned");
- rval = 1;
- }
-
- nsig = status % 256;
-
- /*
- * to check if the core dump bit has been
- * set, bit # 7
- */
- if (nsig >= 128)
- nsig = nsig - 128;
-
- /*
- * nsig is the signal number returned by
- * wait
- */
- if (nsig != sig) {
- tst_resm(TFAIL, "wait error: unexpected "
- "signal returned %d", nsig);
- rval = 1;
- }
-
- /*
- * nexno is the exit number returned by wait
- */
- nexno = status / 256;
- if (nexno != exno) {
- tst_resm(TFAIL, "wait error: unexpected exit "
- "number %d", nexno);
- rval = 1;
- }
-
- sleep(2); /* let child's exit close opened file */
-
- filed = open(filen, O_RDONLY, READ);
- if (filed == -1) {
- tst_resm(TFAIL, "open error: "
- "unable to open input file");
- rval = 1;
- } else {
- rlen = read(filed, rbuf, len);
- if (len != rlen) {
- tst_resm(TFAIL, "exit error: file "
- "buffer was not flushed");
- rval = 1;
- } else if (memcmp(rbuf, wbuf, rlen) != 0) {
- tst_resm(TFAIL, "exit error: file "
- "buffer was not flushed");
- rval = 1;
- }
- }
- close(filed);
- unlink(filen);
- }
- if (!rval) {
- tst_resm(TPASS, "exit() test PASSED");
- }
- }
- cleanup();
- /*NOTREACHED*/
-}
-
-/*
- * setup() - perform all ONE TIME setup for this test
- */
-void
-setup(void)
-{
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- umask(0);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- sprintf(filen, "tfile_%d",getpid());
-}
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at completion or
- * premature exit.
- */
-void
-cleanup(void)
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified
- */
- TEST_CLEANUP;
-
- /*
- * Remove tmp dir and all files in it
- */
- tst_rmdir();
-
- /*
- * exit with return code appropriate for results
- */
- tst_exit();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/fchdir01.c b/winsup/testsuite/winsup.api/ltp/fchdir01.c
deleted file mode 100644
index bd70c01b3..000000000
--- a/winsup/testsuite/winsup.api/ltp/fchdir01.c
+++ /dev/null
@@ -1,249 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * NAME
- * fchdir01.c
- *
- * DESCRIPTION
- * fchdir01 - create a directory and cd into it.
- *
- * ALGORITHM
- * create a new directory
- * open the directory and get a file descriptor
- * loop if that option was specified
- * fchdir() into the directory
- * check the return code
- * if failure, issue a FAIL message.
- * otherwise,
- * if doing functionality testing, call check_functionality()
- * if correct,
- * issue a PASS message
- * otherwise
- * issue a FAIL message
- * call cleanup
- *
- * USAGE: <for command-line>
- * fchdir01 [-c n] [-f] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -f : Turn off functionality Testing.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 03/2001 - Written by Wayne Boyer
- *
- * RESTRICTIONS
- * none
- */
-
-#include "test.h"
-#include "usctest.h"
-
-#include <errno.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <string.h>
-
-void cleanup(void) __attribute__((noreturn));
-void setup(void);
-
-const char *TCID = "fchdir01";
-int TST_TOTAL = 1;
-extern int Tst_count;
-
-int fd = -1;
-char temp_dir_buf [PATH_MAX];
-char* temp_dir;
-const char *TEST_DIR = "alpha";
-
-#define MODES S_IRWXU
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- void check_functionality(void);
- int r_val;
-
- /* parse standard options */
- if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
- }
-
- setup(); /* global setup */
-
- /* The following loop checks looping state if -i option given */
-
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- /* reset Tst_count in case we are looping */
- Tst_count = 0;
-
- /* get the name of the test dirctory */
- if ((temp_dir = (getcwd(temp_dir_buf, sizeof (temp_dir_buf)))) == NULL) {
- tst_brkm(TBROK, cleanup, "%s - getcwd() in main() "
- "failed", TCID);
- }
-
- /*
- * create a new directory and open it
- */
-
- if ((r_val = mkdir(TEST_DIR, MODES)) == -1){
- tst_brkm(TBROK, cleanup, "%s - mkdir() in main() "
- "failed", TCID);
- }
-
- if ((fd = open(TEST_DIR, O_RDONLY)) == -1) {
- tst_brkm(TBROK, cleanup, "open of directory failed");
- }
-
- /*
- * Use TEST macro to make the call
- */
-
- TEST(fchdir(fd));
-
- if (TEST_RETURN == -1) {
- tst_brkm(TFAIL, cleanup, "%s call failed - errno = %d :"
- " %s", TCID, TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
- if (STD_FUNCTIONAL_TEST) {
- check_functionality();
- } else {
- tst_resm(TPASS, "call succeeded");
- }
- }
-
- /*
- * clean up things in case we are looping
- */
-
- /*
- * NOTE: in case of failure here, we need to use "tst_resm()"
- * and not "tst_brkm()". This is because if we get to this
- * point, we have already set a PASS or FAIL for the test
- * and "tst_brkm()" won't report as we might expect.
- */
-
- /* chdir back to our temporary work directory */
- if ((r_val = chdir("..")) == -1){
- tst_resm(TBROK, "fchdir failed - errno = %d : %s",
- errno, strerror(errno));
- }
-
- if ((r_val = rmdir(TEST_DIR)) == -1){
- tst_resm(TBROK, "rmdir failed - errno = %d : %s",
- errno, strerror(errno));
- }
-
- /*
- * clean up things in case we are looping
- */
- /* free(temp_dir); */
- temp_dir = NULL;
- }
-
- cleanup();
-
- /*NOTREACHED*/
-}
-
-/*
- * check_functionality() - check that we are in the correct directory.
- */
-void
-check_functionality(void)
-{
- char buf [PATH_MAX];
- char *cwd;
- char **bufptr = &cwd;
- char *dir;
-
- /*
- * Get the current directory path.
- */
- if ((cwd = (getcwd(buf, sizeof (buf)))) == NULL) {
- tst_brkm(TBROK, cleanup, "%s - getcwd() in "
- "check_functionality() failed", TCID);
- }
-
- /*
- * strip off all but the last directory name in the
- * current working directory.
- */
- do {
- if ((dir = strsep(bufptr, "/")) == NULL) {
- tst_brkm(TBROK, cleanup, "%s - strsep() in "
- "check_functionality() failed", TCID);
- }
- } while(*bufptr != NULL);
-
- /*
- * Make sure we are in the right place.
- */
- if (strcmp(TEST_DIR, dir) == 0) {
- tst_resm(TPASS, "%s call succeeded", TCID);
- } else {
- tst_resm(TFAIL, "%s functionality test failed", TCID);
- }
-}
-
-/*
- * setup() - performs all the ONE TIME setup for this test.
- */
-void
-setup(void)
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- /* create a test directory and cd into it */
- tst_tmpdir();
-}
-
-/*
- * cleanup() - performs all the ONE TIME cleanup for this test at completion
- * or premature exit.
- */
-void
-cleanup(void)
-{
- if (fd >= 0)
- close (fd);
-
- /* remove the test directory */
- tst_rmdir();
-
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-}
-
diff --git a/winsup/testsuite/winsup.api/ltp/fchdir02.c b/winsup/testsuite/winsup.api/ltp/fchdir02.c
deleted file mode 100644
index 4e1d9e74a..000000000
--- a/winsup/testsuite/winsup.api/ltp/fchdir02.c
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * NAME
- * fchdir02.c
- *
- * DESCRIPTION
- * fchdir02 - try to cd into a bad directory (bad fd).
- *
- * CALLS
- * fchdir()
- *
- * ALGORITHM
- * loop if that option was specified
- * call fchdir() with an invalid file descriptor
- * check the errno value
- * issue a PASS message if we get EBADF - errno 9
- * otherwise, the tests fails
- * issue a FAIL message
- * break any remaining tests
- * call cleanup
- *
- * USAGE: <for command-line>
- * fchdir02 [-c n] [-e] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -e : Turn on errno logging.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 03/2001 - Written by Wayne Boyer
- *
- * RESTRICTIONS
- * none
- */
-
-#include "test.h"
-#include "usctest.h"
-
-#include <errno.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-void cleanup(void) __attribute__((noreturn));
-void setup(void);
-
-const char *TCID = "fchdir02";
-int TST_TOTAL = 1;
-extern int Tst_count;
-
-int exp_enos[] = {9, 0}; /* 0 terminated list of expected errnos */
-
-int
-main(int ac, char **av)
-{
- const int bad_fd = -5;
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /* parse standard options */
- if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
- }
-
- setup(); /* global setup */
-
- /* The following loop checks looping state if -i option given */
-
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- /* reset Tst_count in case we are looping */
- Tst_count = 0;
-
- /*
- * Look for a failure by using an invalid number for fd
- */
-
- TEST(fchdir(bad_fd));
-
- if (TEST_RETURN != -1) {
- tst_brkm(TFAIL, cleanup, "call succeeded with bad "
- "file descriptor");
- }
-
- TEST_ERROR_LOG(TEST_ERRNO);
-
- switch(TEST_ERRNO) {
- case EBADF:
- tst_resm(TPASS, "expected failure - errno = %d : %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- break;
- default:
- tst_brkm(TFAIL, cleanup, "call failed with an "
- "unexpected error - %d : %s", TEST_ERRNO,
- strerror(TEST_ERRNO));
- }
- }
-
- cleanup();
-
- /*NOTREACHED*/
-}
-
-/*
- * setup() - performs all the ONE TIME setup for this test.
- */
-void
-setup(void)
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- /* create a test directory and cd into it */
- tst_tmpdir();
-
- /* Set up the expected error numbers for -e option */
- TEST_EXP_ENOS(exp_enos);
-}
-
-/*
- * cleanup() - performs all the ONE TIME cleanup for this test at completion
- * or premature exit.
- */
-void
-cleanup(void)
-{
- /* remove the test directory */
- tst_rmdir();
-
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-}
-
diff --git a/winsup/testsuite/winsup.api/ltp/fchmod01.c b/winsup/testsuite/winsup.api/ltp/fchmod01.c
deleted file mode 100644
index e2db7162a..000000000
--- a/winsup/testsuite/winsup.api/ltp/fchmod01.c
+++ /dev/null
@@ -1,241 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : fchmod01
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) fchmod(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the fchmod(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * fchmod(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/fcntl.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-
-const char *TCID="fchmod01"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0};
-
-char fname[255];
-int fd;
-const char *buf = "davef";
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call fchmod(2)
- */
- TEST(fchmod(fd, 0700));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "fchmod(%s, 0700) Failed, errno=%d : %s", fname,
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "fchmod(%s, 0700) returned %d", fname, TEST_RETURN);
- }
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- sprintf(fname,"tfile_%d",getpid());
- if ((fd = open(fname,O_RDWR|O_CREAT,0700)) == -1) {
- tst_brkm(TBROK, cleanup, "open(%s, O_RDWR|O_CREAT,0700) Failed, errno=%d : %s", fname, errno, strerror(errno));
- } else if (write(fd, &buf, strlen(buf)) == -1) {
- tst_brkm(TBROK, cleanup, "write(%s, &buf, strlen(buf)) Failed, errno=%d : %s", fname, errno, strerror(errno));
- }
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* close the open file wev'e been chmoding */
- if (close(fd) == -1) {
- tst_brkm(TBROK, cleanup, "close(%s) Failed, errno=%d : %s",
- fname, errno, strerror(errno));
- }
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
-
-
diff --git a/winsup/testsuite/winsup.api/ltp/fchown01.c b/winsup/testsuite/winsup.api/ltp/fchown01.c
deleted file mode 100644
index d692bfc74..000000000
--- a/winsup/testsuite/winsup.api/ltp/fchown01.c
+++ /dev/null
@@ -1,234 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : fchown01
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for fchown(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 02/14/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) fchown(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the fchown(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * fchown(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-
-const char *TCID="fchown01"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int Fd; /* file descriptor for fchown */
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /* Call fchown(2) just once */
- TEST(fchown(Fd, geteuid(), getegid()));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL,
- "fchown(Fd, geteuid(), getegid()) failed, errno=%d : %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* Perform functional verification here */
- tst_resm(TPASS,
- "fchown(Fd, geteuid(), getegid()) returned %d",
- TEST_RETURN);
- }
- }
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- char fname[1024];
-
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- /* make a tempdir and change to it */
- tst_tmpdir();
-
- /* open a file for read/write */
- sprintf(fname, "./tmpfile.%d", getpid());
- if ( (Fd=open(fname, O_RDWR|O_CREAT, 0700)) == -1 )
- tst_brkm(TBROK, cleanup,
- "Unable to open %s for read/write. Error:%d, %s",
- fname, errno, strerror(errno)); /* this exits */
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- close(Fd);
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* remove temp dir and files */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
-
-
diff --git a/winsup/testsuite/winsup.api/ltp/fcntl02.c b/winsup/testsuite/winsup.api/ltp/fcntl02.c
deleted file mode 100644
index cbdd08545..000000000
--- a/winsup/testsuite/winsup.api/ltp/fcntl02.c
+++ /dev/null
@@ -1,244 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : fcntl02
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for fcntl(2) using F_DUPFD argument.
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) fcntl(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the fcntl(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * fcntl(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <sys/types.h>
-#include <sys/fcntl.h>
-#include <sys/stat.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-
-const char *TCID="fcntl02"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0};
-
-char fname[255];
-int fd;
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call fcntl(2) with F_DUPFD argument on fname
- */
- TEST(fcntl(fd, F_DUPFD, 0));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "fcntl(%s, F_DUPFD, 0) Failed, errno=%d : %s", fname,
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "fcntl(%s, F_DUPFD, 0) returned %d", fname, TEST_RETURN);
- }
- if (close(TEST_RETURN) == -1) {
- tst_resm(TWARN, "close(%s) Failed, errno=%d : %s", fname, errno, strerror(errno));
- }
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- sprintf(fname,"tfile_%d",getpid());
- if ((fd = open(fname,O_RDWR|O_CREAT,0700)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR|O_CREAT,0700) Failed, errno=%d : %s",
- fname, errno, strerror(errno));
- }
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* close the file we've had open */
- if (close(fd) == -1) {
- tst_resm(TWARN, "close(%s) Failed, errno=%d : %s", fname, errno, strerror(errno));
- }
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/fcntl03.c b/winsup/testsuite/winsup.api/ltp/fcntl03.c
deleted file mode 100644
index 8199469c3..000000000
--- a/winsup/testsuite/winsup.api/ltp/fcntl03.c
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : fcntl03
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for fcntl(2) using F_GETFD argument.
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) fcntl(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the fcntl(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * fcntl(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <sys/types.h>
-#include <sys/fcntl.h>
-#include <sys/stat.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-
-const char *TCID="fcntl03"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0};
-
-char fname[255];
-int fd;
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call fcntl(2) with F_GETFD argument on fname
- */
- TEST(fcntl(fd, F_GETFD, 0));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "fcntl(%s, F_GETFD, 0) Failed, errno=%d : %s", fname,
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "fcntl(%s, F_GETFD, 0) returned %d", fname, TEST_RETURN);
- }
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- sprintf(fname,"tfile_%d",getpid());
- if ((fd = open(fname,O_RDWR|O_CREAT,0700)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR|O_CREAT,0700) Failed, errno=%d : %s",
- fname, errno, strerror(errno));
- }
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- if (close(fd) == -1) {
- tst_resm(TWARN, "close(%s) Failed, errno=%d : %s", fname, errno, strerror(errno));
- }
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/fcntl04.c b/winsup/testsuite/winsup.api/ltp/fcntl04.c
deleted file mode 100644
index 7af778936..000000000
--- a/winsup/testsuite/winsup.api/ltp/fcntl04.c
+++ /dev/null
@@ -1,239 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : fcntl04
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for fcntl(2) using F_GETFL argument.
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) fcntl(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the fcntl(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * fcntl(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <sys/types.h>
-#include <sys/fcntl.h>
-#include <sys/stat.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-
-const char *TCID="fcntl04"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0};
-
-char fname[255];
-int fd;
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call fcntl(2) with F_GETFL argument on fname
- */
- TEST(fcntl(fd, F_GETFL, 0));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "fcntl(%s, F_GETFL, 0) Failed, errno=%d : %s", fname,
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "fcntl(%s, F_GETFL, 0) returned %d", fname, TEST_RETURN);
- }
- }
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- sprintf(fname,"tfile_%d",getpid());
- if ((fd = open(fname,O_RDWR|O_CREAT,0700)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR|O_CREAT,0700) Failed, errno=%d : %s",
- fname, TEST_ERRNO, strerror(TEST_ERRNO));
- }
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- if (close(fd) == -1) {
- tst_resm(TWARN, "close(%s) Failed, errno=%d : %s", fname, errno, strerror(errno));
- }
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/fcntl05.c b/winsup/testsuite/winsup.api/ltp/fcntl05.c
deleted file mode 100644
index 80cfe8c89..000000000
--- a/winsup/testsuite/winsup.api/ltp/fcntl05.c
+++ /dev/null
@@ -1,249 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : fcntl05
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for fcntl(2) using F_GETLK argument.
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) fcntl(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the fcntl(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * fcntl(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <sys/types.h>
-#include <sys/fcntl.h>
-#include <sys/stat.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-
-const char *TCID="fcntl05"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0};
-
-char fname[255];
-int fd;
-struct flock flocks;
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- flocks.l_type = F_RDLCK;
- /*
- * Call fcntl(2) with F_GETLK argument on fname
- */
- TEST(fcntl(fd, F_GETLK, &flocks));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "fcntl(%s, F_GETLK, &flocks) Failed, errno=%d : %s", fname,
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "fcntl(%s, F_GETLK, &flocks) returned %d", fname, TEST_RETURN);
- }
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- sprintf(fname,"tfile_%d",getpid());
- if ((fd = open(fname,O_RDWR|O_CREAT,0700)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR|O_CREAT,0700) Failed, errno=%d : %s",
- fname, errno, strerror(errno));
- }
-
- /* set needed flags in the flocks structure */
- flocks.l_whence=1;
- flocks.l_start=0;
- flocks.l_len=0;
- flocks.l_pid=getpid();
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* Close the file we have open */
- if (close(fd) == -1) {
- tst_resm(TWARN, "close(%s) Failed, errno=%d : %s", fname, errno, strerror(errno));
- }
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/fcntl07.c b/winsup/testsuite/winsup.api/ltp/fcntl07.c
deleted file mode 100644
index e0082df45..000000000
--- a/winsup/testsuite/winsup.api/ltp/fcntl07.c
+++ /dev/null
@@ -1,423 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : fcntl07
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Close-On-Exec functional test
- *
- * PARENT DOCUMENT : none
- *
- * TEST CASE TOTAL : 2
- *
- * WALL CLOCK TIME : 5
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : Glen Overby
- *
- * CO-PILOT : William Roske
- *
- * DATE STARTED : 08/11/93
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) test close-on-exec with a regular file
- * 2.) test close-on-exec with a system pipe
- *
- * INPUT SPECIFICATIONS
- *
- * Standard arguments accepted by parse_opts(3).
- *
- * The -t (timing) and -e options apply to the fcntl(.., F_SETFD, ..)
- * system call.
- *
- * -T fd : If this option is given, the program runs as "test_open",
- * testing <fd> to see if it is open or not and exiting
- * accordingly:
- * 0 not open (EBADF from fcntl(..., F_GETFD, ...))
- * 3 no error from fcntl
- * errno fcntl returned an error other than EBADF
- *
- * -F name : File to open. Must be an absolute path
- * and the file must be writable;
- * -n program: path to the 'test_open' program
- *
- * OUTPUT SPECIFICATIONS
- * This test uses the cuts-style test_res format output consisting of:
- *
- * test-name PASS/FAIL/BROK message
- *
- * the message will tell what type of test and, if it failed, indicate
- * what the failure was.
- *
- * DURATION
- * Terminates
- *
- * SIGNALS
- * None
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * If this test is not called with a full pathname, it must be able
- * to find itself on $PATH
- *
- * INTERCASE DEPENDENCIES
- * none
- *
- * DETAILED DESCRIPTION
- *
- * Setup:
- * Setup signal handling.
- * Create and make current a temporary directory.
- * Open a regular file for writing
- * Create a system pipe
- * Create a named pipe and open it for writing
- *
- * Test:
- * Set the file descriptor for close-on-exec
- * Fork
- * Child execlp's the program "test_open".
- * If the exec fails, exit "2"
- * Parent waits
- * Report results.
- *
- * Cleanup:
- * Close file and pipes
- * Remove the temporary directory
- *
- * BUGS
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <errno.h>
-#include <signal.h>
-#include <sys/types.h>
-#include <fcntl.h>
-#include <sys/wait.h>
-#include <limits.h>
-
-#include "test.h"
-#include "usctest.h"
-#include "search_path.h"
-
-void setup();
-void cleanup(void) __attribute__((noreturn));
-void help();
-
-const char *TCID="fcntl07"; /* Test program identifier. */
-int TST_TOTAL=2; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-
-
-/* for parse_opts */
-int fflag, Tflag; /* binary flags: opt or not */
-char *fopt, *Topt; /* option arguments */
-
-option_t options[] = {
- { "F:", &fflag, &fopt }, /* -F filename */
- { "T:", &Tflag, &Topt }, /* -T <fd> exec'ed by test: test FD */
- { NULL, NULL, NULL }
-};
-
-int stat_loc; /* for waitpid() */
-
-int file_fd, pipe_fds[2];
- /* file descriptors for a file and a system pipe */
-#define DEFAULT_FILE "DefaultFileName"
-const char *File1 = DEFAULT_FILE;
-
-#define DEFAULT_SUBPROG "test_open"
-const char *openck = DEFAULT_SUBPROG; /* support program name to check for open FD */
-char subprog_path[_POSIX_PATH_MAX]; /* path to exec "openck" with */
-#define STRSIZE 255
-
-int *testfds[] = {
- &file_fd, &pipe_fds[1], 0
- };
-
-const char *testfdtypes[] = {
- "regular file",
- "write side of system pipe",
- };
-
-int test_open(const char *arg);
-int do_exec(const char *prog, int fd, const char *tcd);
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- int exec_return; /* return from do_exec */
- int **tcp; /* testcase pointer (pointer to FD) */
- const char **tcd; /* testcase description pointer */
-
- /***************************************************************
- * parse standard options, and exit if there is an error
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, options, &help)) != (char *) NULL ) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- if(fflag) /* -F option */
- File1 = fopt;
-
- if(Tflag) { /* -T option */
- exit(test_open(Topt));
- }
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup(av[0]);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- for(tcp = testfds, tcd = testfdtypes; *tcp; tcp++, tcd++) {
-
- TEST(fcntl(**tcp, F_SETFD, FD_CLOEXEC));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "fcntl(%s[%d], F_SETFD, FD_CLOEXEC) Failed, errno=%d : %s",
- *tcd, **tcp, TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
-
- /*************************************************************
- * only perform functional verification if flag set
- * (-f not given)
- *************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
-
- exec_return = do_exec(subprog_path, **tcp, *tcd);
-
- switch(exec_return) {
- case -1:
- tst_resm(TBROK, "fork failed. Errno %s [%d]",
- strerror(errno), errno);
- break;
- case 1:
- tst_resm(TBROK, "waitpid return was 0%o", stat_loc);
- break;
- case 2:
- tst_resm(TBROK, "exec failed"); /* errno was in child */
- break;
- case 0:
- tst_resm(TPASS, "%s child exited 0, indicating that the file was closed",
- *tcd);
- break;
- default:
- tst_resm(TFAIL, "%s child exited non-zero, %d", *tcd,
- exec_return);
- break;
- }
- }
- }
- }
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup(char *path)
-{
- search_path(path, subprog_path, X_OK, 1);
-
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- /* create a temporary directory and go to it */
- tst_tmpdir();
-
- /* set up a regular file */
- if((file_fd=open(File1, O_CREAT|O_RDWR, 0666)) == -1) {
- tst_brkm(TBROK, cleanup, "Open of file %s failed errno %d (%s)\n", File1, errno, strerror(errno));
- }
-
- /* set up a system pipe (write side gets CLOSE-ON-EXEC) */
- pipe(pipe_fds);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* close everything */
- close(file_fd);
- close(pipe_fds[0]);
- close(pipe_fds[1]);
-
- /* remove temporary directory and all files in it. */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
-
-/***************************************************************************
- * issue a help message
- ***************************************************************************/
-void
-help()
-{
- printf("-T fd : If this option is given, the program runs as 'test_open'\n");
- printf(" testing <fd> to see if it is open or not and exiting accordingly\n");
- printf("-F name : File to open. Must be an absolute path,\n");
- printf(" and the file must be writable\n");
- printf("-n program: path to the 'test_open' program\n");
-}
-
-/*---------------------------------------------------------------------------*/
-/* Perform an exec, then wait for the child to terminate.
- * The child's termination status determines the success of the test
- *
- * Return codes:
- * -1 BROK fork failed
- * 1 BROK waitpid returned != exit status
- * <else> ???? exit code from child:
- * 2 BROK exec failed
- * 0 PASS fd was properly closed
- *
- */
-
-int
-do_exec(const char *prog, int fd, const char *tcd)
-{
- int pid;
- char pidname[STRSIZE];
-#ifdef DEBUG
- int rc, status; /* for the fcntl */
-#endif
-
- /* set up arguments to exec'ed child */
- sprintf(pidname, "%d", fd);
-
-#ifdef DEBUG
- rc = fcntl(fd, F_GETFD, &status);
- printf("%s: fd = %d rc = %d status= %d, errno= %d\n", tcd, fd, rc, status, errno);
-#endif
-
- switch(pid=fork()) {
- case -1:
- return(-1);
- case 0: /* child */
- execlp(prog, openck, "-T", pidname, NULL);
-
- /* the ONLY reason to do this is to get the errno printed out */
- fprintf(stderr, "exec(%s, %s, -T, %s) failed. Errno %s [%d]\n",
- prog, openck, pidname, strerror(errno), errno);
- exit(2);
- default: /* parent */
- waitpid(pid, &stat_loc, 0);
- if(WIFEXITED(stat_loc)) {
- return(WEXITSTATUS(stat_loc));
- } else {
- return(1);
- }
- }
-}
-
-/*
- * PROGRAM TITLE : Test if a named file descriptor is open
- * This function is called when fcntcs07 is called with the -T option.
- * It tests if a file descriptor is open and exits accordingly.
- */
-int
-test_open(const char *arg)
-{
- int fd, rc;
- int status;
-
- fd = atoi(arg);
-
- rc = fcntl(fd, F_GETFD, &status);
-
-#ifdef DEBUG_T
- printf("%s: fd = %d rc = %d status= %d, errno= %d\n", openck, fd, rc,
- status, errno);
-#endif
-
- if(rc == -1 && errno == EBADF) {
- exit(0);
- }
-
- if(rc != -1)
- exit(3);
-
- exit(errno);
- return -1; /* to remove compiler warning on IRIX */
-}
diff --git a/winsup/testsuite/winsup.api/ltp/fcntl07B.c b/winsup/testsuite/winsup.api/ltp/fcntl07B.c
deleted file mode 100644
index 4e94ff267..000000000
--- a/winsup/testsuite/winsup.api/ltp/fcntl07B.c
+++ /dev/null
@@ -1,422 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : fcntl07B
- * <same
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Close-On-Exec of named pipe functional test
- *
- * PARENT DOCUMENT : none
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 5
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : Richard Logan :copied from fcntcs07 written by Glen Overby
- *
- * CO-PILOT : William Roske
- *
- * DATE STARTED : 08/11/93
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) test close-on-exec with a named pipe
- *
- * INPUT SPECIFICATIONS
- *
- * Standard arguments accepted by parse_opts(3).
- *
- * The -t (timing) and -e options apply to the fcntl(.., F_SETFD, ..)
- * system call.
- *
- * -T fd : If this option is given, the program runs as "test_open",
- * testing <fd> to see if it is open or not and exiting
- * accordingly:
- * 0 not open (EBADF from fcntl(..., F_GETFD, ...))
- * 3 no error from fcntl
- * errno fcntl returned an error other than EBADF
- *
- * -F name : File to open. Must be an absolute path
- * and the file must be writable;
- * -n program: path to the 'test_open' program
- *
- * OUTPUT SPECIFICATIONS
- * This test uses the cuts-style test_res format output consisting of:
- *
- * test-name PASS/FAIL/BROK message
- *
- * the message will tell what type of test and, if it failed, indicate
- * what the failure was.
- *
- * DURATION
- * Terminates
- *
- * SIGNALS
- * None
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * If this test is not called with a full pathname, it must be able
- * to find itself on $PATH
- *
- * INTERCASE DEPENDENCIES
- * none
- *
- * DETAILED DESCRIPTION
- *
- * Setup:
- * Setup signal handling.
- * Create and make current a temporary directory.
- * Create a named pipe and open it for writing
- *
- * Test:
- * Set the file descriptor for close-on-exec
- * Fork
- * Child execlp's the program "test_open".
- * If the exec fails, exit "2"
- * Parent waits
- * Report results.
- *
- * Cleanup:
- * Close file and pipes
- * Remove the temporary directory
- *
- * BUGS
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <sys/wait.h>
-#include <limits.h>
-
-#include "test.h"
-#include "usctest.h"
-#include "search_path.h"
-
-void setup();
-void cleanup(void) __attribute__((noreturn));
-void help();
-
-const char *TCID="fcntl07B"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-
-/* for parse_opts */
-int fflag, Tflag; /* binary flags: opt or not */
-char *fopt, *Topt; /* option arguments */
-
-option_t options[] = {
- { "F:", &fflag, &fopt }, /* -F filename */
- { "T:", &Tflag, &Topt }, /* -T <fd> exec'ed by test: test FD */
- { NULL, NULL, NULL }
-};
-
-int stat_loc; /* for waitpid() */
-
-int npipe_fd;
- /* file descriptors for a named pipe */
-#define DEFAULT_FILE "DefaultFileName"
-const char *File1 = DEFAULT_FILE;
-
-#define DEFAULT_SUBPROG "test_open"
-const char *openck = DEFAULT_SUBPROG; /* support program name to check for open FD */
-const char subprog_path[_POSIX_PATH_MAX];/* path to exec "openck" with */
-#define STRSIZE 255
-#define FIFONAME "FiFo"
-
-int *testfds[] = {
- &npipe_fd, 0
- };
-
-const char *testfdtypes[] = {
- "named pipe"
- };
-
-int test_open(char *arg);
-int do_exec(const char *prog, int fd, const char *tcd);
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- int exec_return; /* return from do_exec */
- int **tcp; /* testcase pointer (pointer to FD) */
- const char **tcd; /* testcase description pointer */
-
- /***************************************************************
- * parse standard options, and exit if there is an error
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, options, &help)) != (char *) NULL ) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- if(fflag) /* -F option */
- File1 = fopt;
-
- if(Tflag) { /* -T option */
- exit(test_open(Topt));
- }
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup(av[0]);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- for(tcp = testfds, tcd = testfdtypes; *tcp; tcp++, tcd++) {
-
- TEST(fcntl(**tcp, F_SETFD, FD_CLOEXEC));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "fcntl(%s[%d], F_SETFD, FD_CLOEXEC) Failed, errno=%d : %s",
- *tcd, **tcp, TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
-
- /*************************************************************
- * only perform functional verification if flag set
- * (-f not given)
- *************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
-
- exec_return = do_exec(subprog_path, **tcp, *tcd);
-
- switch(exec_return) {
- case -1:
- tst_resm(TBROK, "fork failed. Errno %s [%d]",
- strerror(errno), errno);
- break;
- case 1:
- tst_resm(TBROK, "waitpid return was 0%o", stat_loc);
- break;
- case 2:
- tst_resm(TBROK, "exec failed"); /* errno was in child */
- break;
- case 0:
- tst_resm(TPASS, "%s child exited 0, indicating that the file was closed",
- *tcd);
- break;
- default:
- tst_resm(TFAIL, "%s child exited non-zero, %d", *tcd,
- exec_return);
- break;
- }
- }
- }
- }
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup(char *path)
-{
- search_path(path, subprog_path, X_OK, 1);
-
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- /* create a temporary directory and go to it */
- tst_tmpdir();
-
- /* set up a named pipe (write side gets CLOSE-ON-EXEC) */
- if(mkfifo(FIFONAME, 0666) == -1) {
- tst_brkm(TBROK, cleanup, "mkfifo of named pipe %s failed errno %d (%s)\n", FIFONAME, errno, strerror(errno));
- }
-
- if((npipe_fd=open(FIFONAME, O_RDWR, 0666)) == -1) {
- tst_brkm(TBROK, cleanup, "Open of named pipe %s failed errno %d (%s)\n", File1, errno, strerror(errno));
- }
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* close everything */
- close(npipe_fd);
-
- /* remove temporary directory and all files in it. */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
-
-/***************************************************************************
- * issue a help message
- ***************************************************************************/
-void
-help()
-{
- printf("-T fd : If this option is given, the program runs as 'test_open'\n");
- printf(" testing <fd> to see if it is open or not and exiting accordingly\n");
- printf("-F name : File to open. Must be an absolute path,\n");
- printf(" and the file must be writable\n");
- printf("-n program: path to the 'test_open' program\n");
-
-}
-
-/*---------------------------------------------------------------------------*/
-/* Perform an exec, then wait for the child to terminate.
- * The child's termination status determines the success of the test
- *
- * Return codes:
- * -1 BROK fork failed
- * 1 BROK waitpid returned != exit status
- * <else> ???? exit code from child:
- * 2 BROK exec failed
- * 0 PASS fd was properly closed
- *
- */
-
-int
-do_exec(const char *prog, int fd, const char *tcd)
-{
- int pid;
- char pidname[STRSIZE];
-#ifdef DEBUG
- int rc, status; /* for the fcntl */
-#endif
-
- /* set up arguments to exec'ed child */
- sprintf(pidname, "%d", fd);
-
-#ifdef DEBUG
- rc = fcntl(fd, F_GETFD, &status);
- printf("%s: fd = %d rc = %d status= %d, errno= %d\n", tcd, fd, rc, status, errno);
-#endif
-
- switch(pid=fork()) {
- case -1:
- return(-1);
- case 0: /* child */
- execlp(prog, openck, "-T", pidname, NULL);
-
- /* the ONLY reason to do this is to get the errno printed out */
- fprintf(stderr, "exec(%s, %s, -T, %s) failed. Errno %s [%d]\n",
- prog, openck, pidname, strerror(errno), errno);
- exit(2);
- default: /* parent */
- waitpid(pid, &stat_loc, 0);
- if(WIFEXITED(stat_loc)) {
- return(WEXITSTATUS(stat_loc));
- } else {
- return(1);
- }
- }
-}
-
-/*
- * PROGRAM TITLE : Test if a named file descriptor is open
- * This function is called when fcntcs07 is called with the -T option.
- * It tests if a file descriptor is open and exits accordingly.
- */
-int
-test_open(char *arg)
-{
- int fd, rc;
- int status;
-
- fd = atoi(arg);
-
- rc = fcntl(fd, F_GETFD, &status);
-
-#ifdef DEBUG_T
- printf("%s: fd = %d rc = %d status= %d, errno= %d\n", openck, fd, rc,
- status, errno);
-#endif
-
- if(rc == -1 && errno == EBADF) {
- exit(0);
- }
-
- if(rc != -1)
- exit(3);
-
- exit(errno);
- return -1; /* To remove compiler warning on IRIX */
-}
diff --git a/winsup/testsuite/winsup.api/ltp/fcntl08.c b/winsup/testsuite/winsup.api/ltp/fcntl08.c
deleted file mode 100644
index eaf22436b..000000000
--- a/winsup/testsuite/winsup.api/ltp/fcntl08.c
+++ /dev/null
@@ -1,250 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : fcntl08
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for fcntl(2) using F_SETFL argument.
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) fcntl(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the fcntl(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * fcntl(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * close file
- * remove temp directory
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <sys/types.h>
-#include <sys/fcntl.h>
-#include <sys/stat.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-void setup();
-void cleanup(void) __attribute__((noreturn));
-
-#ifndef O_NDELAY
-#define O_NDELAY 0
-#endif
-
-const char *TCID="fcntl08"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-char fname[255];
-int arg, fd;
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL ) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call fcntl(2) with F_SETFL argument on fname
- */
- TEST(fcntl(fd, F_SETFL, arg));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- tst_resm(TFAIL, "fcntl(%s, F_SETFL, %d) Failed, errno=%d : %s",
- fname, arg, TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "fcntl(%s, F_SETFL, %d) returned %d",
- fname, arg, TEST_RETURN);
- }
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- sprintf(fname,"tfile_%d",getpid());
- if ((fd = open(fname,O_RDWR|O_CREAT,0700)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR|O_CREAT,0700) Failed, errno=%d : %s",
- fname, errno, strerror(errno));
- }
-
- /* set the flags to be used */
-#ifdef CRAY
- arg = (O_NDELAY | O_APPEND | O_RAW | O_NONBLOCK);
-#else
- arg = (O_NDELAY | O_APPEND | O_NONBLOCK);
-#endif /* ! CRAY */
-
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* close the file we have open */
- if (close(fd) == -1) {
- tst_resm(TWARN, "close(%s) Failed, errno=%d : %s",
- fname, errno, strerror(errno));
- }
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/fcntl09.c b/winsup/testsuite/winsup.api/ltp/fcntl09.c
deleted file mode 100644
index 3a827e149..000000000
--- a/winsup/testsuite/winsup.api/ltp/fcntl09.c
+++ /dev/null
@@ -1,278 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : fcntl09
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for fcntl(2) using F_SETLK argument.
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 2
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) fcntl(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the fcntl(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * fcntl(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <sys/types.h>
-#include <sys/fcntl.h>
-#include <sys/stat.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-
-const char *TCID="fcntl09"; /* Test program identifier. */
-int TST_TOTAL=2; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0};
-
-char fname[255];
-int fd;
-struct flock flocks;
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
-#if 0
- /* Ouch! Either read *or* write lock, but not both!
- This code depends on F_RDLCK being 0. */
- flocks.l_type = F_RDLCK | F_WRLCK;
-#else
- flocks.l_type = F_WRLCK;
-#endif
- /*
- * Call fcntl(2) with F_SETLK argument on fname
- */
- TEST(fcntl(fd, F_SETLK, &flocks));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL,
- "fcntl(%s, F_SETLK, &flocks) flocks.l_type = F_RDLCK | F_WRLCK Failed, errno=%d : %s",
- fname, TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS,
- "fcntl(%s, F_SETLK, &flocks) flocks.l_type = F_RDLCK | F_WRLCK returned %d",
- fname, TEST_RETURN);
- }
- }
-
- flocks.l_type = F_UNLCK;
- /*
- * Call fcntl(2) with F_SETLK argument on fname
- */
- TEST(fcntl(fd, F_SETLK, &flocks));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL,
- "fcntl(%s, F_SETLK, &flocks) flocks.l_type = F_UNLCK Failed, errno=%d : %s",
- fname, TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS,
- "fcntl(%s, F_SETLK, &flocks) flocks.l_type = F_UNLCK returned %d",
- fname, TEST_RETURN);
- }
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- sprintf(fname,"./file_%d",getpid());
- if (creat(fname, 02644) == -1) {
- tst_brkm(TBROK, cleanup, "creat(%s, 02644) Failed, errno=%d : %s", fname, errno, strerror(errno));
- } else if (close(fd) == -1) {
- tst_brkm(TBROK, cleanup, "close(%s) Failed, errno=%d : %s", fname, errno, strerror(errno));
- } else if ((fd = open(fname,O_RDWR,0700)) == -1) {
- tst_brkm(TBROK, cleanup, "open(%s, O_RDWR,0700) Failed, errno=%d : %s", fname, errno, strerror(errno));
- }
- flocks.l_whence=1;
- flocks.l_start=0;
- flocks.l_len=0;
- flocks.l_pid=getpid();
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- if (close(fd) == -1) {
- tst_resm(TWARN, "close(%s) Failed, errno=%d : %s", fname, errno, strerror(errno));
- } else if (unlink(fname) == -1) {
- tst_resm(TWARN, "unlink(%s) Failed, errno=%d : %s", fname, errno, strerror(errno));
-
- }
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/fcntl10.c b/winsup/testsuite/winsup.api/ltp/fcntl10.c
deleted file mode 100644
index e2de44bef..000000000
--- a/winsup/testsuite/winsup.api/ltp/fcntl10.c
+++ /dev/null
@@ -1,284 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : fcntl10
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for fcntl(2) using F_SETLKW argument.
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 2
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) fcntl(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the fcntl(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * fcntl(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <sys/types.h>
-#include <sys/fcntl.h>
-#include <sys/stat.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-
-const char *TCID="fcntl10"; /* Test program identifier. */
-int TST_TOTAL=2; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0};
-
-char fname[255];
-int fd;
-struct flock flocks;
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
-#if 0
- /* Ouch! Either read *or* write lock, but not both!
- This code depends on F_RDLCK being 0. */
- flocks.l_type = F_RDLCK | F_WRLCK;
-#else
- flocks.l_type = F_WRLCK;
-#endif
- /*
- * Call fcntl(2) with F_SETLKW flocks.l_type = F_UNLCK argument on fname
- */
- TEST(fcntl(fd, F_SETLKW, &flocks));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL,
- "fcntl(%s, F_SETLKW, &flocks) flocks.l_type = F_RDLCK | F_WRLCK Failed, errno=%d : %s",
- fname, TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS,
- "fcntl(%s, F_SETLKW, &flocks) flocks.l_type = F_RDLCK | F_WRLCK returned %d",
- fname, TEST_RETURN);
- }
- }
-
- flocks.l_type = F_UNLCK;
- /*
- * Call fcntl(2) with F_SETLKW flocks.l_type = F_UNLCK argument on fname
- */
- TEST(fcntl(fd, F_SETLKW, &flocks));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL,
- "fcntl(%s, F_SETLKW, &flocks) flocks.l_type = F_UNLCK Failed, errno=%d : %s",
- fname, TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS,
- "fcntl(%s, F_SETLKW, &flocks) flocks.l_type = F_UNLCK returned %d",
- fname, TEST_RETURN);
- }
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- sprintf(fname,"tfile_%d",getpid());
- if ((fd = creat(fname, 02644)) == -1) {
- tst_brkm(TBROK, cleanup, "creat(%s, 02644) Failed, errno=%d : %s", fname, errno, strerror(errno));
- } else if (close(fd) == -1) {
- tst_brkm(TBROK, cleanup, "close(%s) Failed, errno=%d : %s", fname, errno, strerror(errno));
- } else if ((fd = open(fname,O_RDWR,0700)) == -1) {
- tst_brkm(TBROK, cleanup, "open(%s, O_RDWR,0700) Failed, errno=%d : %s", fname, errno, strerror(errno));
- }
-
- /* set needed fields in the flocks structure */
- flocks.l_whence=1;
- flocks.l_start=0;
- flocks.l_len=0;
- flocks.l_pid=getpid();
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- if (close(fd) == -1) {
- tst_resm(TWARN, "close(%s) Failed, errno=%d : %s", fname, errno, strerror(errno));
- }
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/fork01.c b/winsup/testsuite/winsup.api/ltp/fork01.c
deleted file mode 100644
index 2aac2d427..000000000
--- a/winsup/testsuite/winsup.api/ltp/fork01.c
+++ /dev/null
@@ -1,316 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : fork01
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for fork(2)
- *
- * PARENT DOCUMENT : frktds02
- *
- * TEST CASE TOTAL : 2
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : Kathy Olmsted
- *
- * CO-PILOT : Steve Shaw
- *
- * DATE STARTED : 06/17/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) fork returns without error
- * 2.) fork returns the pid of the child
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * fork()
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- * CHILD:
- * determine PID
- * write to PID to a file and close the file
- * exit
- * PARENT:
- * wait for child to exit
- * read child PID from file
- * compare child PID to fork() return code and report
- * results
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include <fcntl.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include "test.h"
-#include "usctest.h"
-
-#define KIDEXIT 42
-extern void setup();
-extern void cleanup();
-
-#define LINE_SZ 20 /* size of the line written/read to the file */
-#define FILENAME "childpid"
-
-
-
-const char *TCID="fork01"; /* Test program identifier. */
-int TST_TOTAL=2; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-/***************************************************************
- * child_pid - the child side of the test
- * determine the PID and write to a file
- ***************************************************************/
-void child_pid()
-{
-
- int fildes;
- char tmp_line[LINE_SZ];
-
- fildes = creat(FILENAME,0700);
- sprintf(tmp_line,"%d\n",getpid());
- write(fildes,tmp_line,LINE_SZ);
- close(fildes);
-
-}
-
-/***************************************************************
- * parent_pid - the parent side of the test
- * read the value determined by the child
- * compare and report results
- ***************************************************************/
-void parent_pid()
-{
-
- int fildes;
- char tmp_line[LINE_SZ];
- pid_t child_id;
-
- if ((fildes = open(FILENAME,O_RDWR)) == -1) {
- tst_brkm(TBROK, cleanup,
- "parent open failed. errno: %d (%s)\n",
- errno, strerror(errno));
- }
- else {
- if (read(fildes,tmp_line,LINE_SZ) == 0) {
- tst_brkm(TBROK,cleanup, "fork(): parent failed to read PID from file errno: %d (%s)",
- errno, strerror(errno));
- }
- else {
- child_id = atoi(tmp_line);
- if (TEST_RETURN != child_id) {
- tst_resm(TFAIL,"child reported a pid of %d. parent received %d from fork()",
- child_id,TEST_RETURN);
- } else {
- tst_resm(TPASS,"child pid and fork() return agree: %d",child_id);
- }
- }
- close(fildes);
- }
-}
-
-/***************************************************************
- * main() - performs tests
- *
- ***************************************************************/
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- int fails;
- int kid_status, wait_status;
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
- fails = 0;
-
- /*
- * Call fork(2)
- */
- TEST(fork());
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- if ( STD_FUNCTIONAL_TEST ) {
- tst_resm(TFAIL, "fork() Failed, errno=%d : %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- tst_resm(TBROK,"unable to continue");
- }
- }
- if (TEST_RETURN == 0) {
- /* child */
- if ( STD_FUNCTIONAL_TEST ) {
- child_pid();
- }
- exit(KIDEXIT);
- } else {
- /* parent */
- if ( STD_FUNCTIONAL_TEST ) {
- tst_resm(TPASS, "fork() returned %d", TEST_RETURN);
- }
- /* wait for the child to complete */
- wait_status = wait(&kid_status);
- if ( STD_FUNCTIONAL_TEST ) {
- if (wait_status == TEST_RETURN) {
- if (kid_status != KIDEXIT << 8) {
- tst_resm(TBROK,
- "incorrect child status returned on wait(): %d",
- kid_status);
- fails++;
- }
- }
- else {
- tst_resm(TBROK,
- "wait() for child status failed with %d errno: %d : %s",
- wait_status,errno,strerror(errno));
- fails++;
- }
- if (fails == 0 ) {
- /* verification tests */
- parent_pid();
- }
- } /* STD_FUNCTIONAL_TEST */
- } /* TEST_RETURN */
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
- setup()
-{
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- tst_tmpdir();
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
- cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_rmdir();
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/fork02.c b/winsup/testsuite/winsup.api/ltp/fork02.c
deleted file mode 100644
index eeec828ec..000000000
--- a/winsup/testsuite/winsup.api/ltp/fork02.c
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * NAME
- * fork02.c
- *
- * DESCRIPTION
- * Test correct operation of fork:
- * pid == 0 in child;
- * pid > 0 in parent from wait;
- *
- * ALGORITHM
- * Fork one process, check for pid == 0 in child.
- * Check for pid > 0 in parent after wait.
- *
- * USAGE
- * fork02
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS
- * None
- */
-
-#include <sys/wait.h>
-#include "test.h"
-#include "usctest.h"
-
-void setup(void);
-void cleanup(void) __attribute__((noreturn));
-
-const char *TCID = "fork02";
-int TST_TOTAL = 1;
-extern int Tst_count;
-
-int
-main(int ac, char **av)
-{
- int pid1, pid2, status;
-
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /*
- * parse standard options
- */
- if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
- /*NOTREACHED*/
- }
-
- /*
- * perform global setup for the test
- */
- setup();
-
- /*
- * check looping state if -i option is given
- */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- /*
- * reset Tst_count in case we are looping.
- */
- Tst_count = 0;
-
- if ((pid1 = fork()) == -1) {
- tst_brkm(TBROK, cleanup, "fork() failed");
- }
-
- if (pid1 == 0) {
- tst_resm(TINFO, "Inside child");
- _exit(0);
- } else {
- tst_resm(TINFO, "Inside parent");
- pid2 = wait(&status);
- tst_resm(TINFO, "exit status of wait %d", status);
-
- if (pid1 == pid2) {
- tst_resm(TPASS, "test 1 PASSED");
- } else {
- tst_resm(TFAIL, "test 1 FAILED");
- }
- }
- }
- cleanup();
-
- /*NOTREACHED*/
-}
-
-/*
- * setup() - performs all ONE TIME setup for this test
- */
-void
-setup()
-{
- /*
- * capture signals
- */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- /*
- * Pause if that option was specified
- */
- TEST_PAUSE;
-}
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- tst_exit();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/fork03.c b/winsup/testsuite/winsup.api/ltp/fork03.c
deleted file mode 100644
index fbc23bb37..000000000
--- a/winsup/testsuite/winsup.api/ltp/fork03.c
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * NAME
- * fork03.c
- *
- * DESCRIPTION
- * Check that child can use a large text space and do a large
- * number of operations.
- *
- * ALGORITHM
- * Fork one process, check for pid == 0 in child.
- * Check for pid > 0 in parent after wait.
- *
- * USAGE
- * fork03
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS
- * None
- */
-
-#include <sys/wait.h>
-#include "test.h"
-#include "usctest.h"
-
-void setup(void);
-void cleanup(void) __attribute__((noreturn));
-
-const char *TCID = "fork03";
-int TST_TOTAL = 1;
-extern int Tst_count;
-
-void setup(void);
-void cleanup(void) __attribute__((noreturn));
-
-int
-main(int ac, char **av)
-{
- float fl1, fl2;
- int i;
- int pid1, pid2, status;
-
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /*
- * parse standard options
- */
- if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
- /*NOTREACHED*/
- }
-
- /*
- * perform global setup for the test
- */
- setup();
-
- /*
- * check looping state if -i option is given
- */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- /*
- * reset Tst_count in case we are looping.
- */
- Tst_count = 0;
-
- if ((pid1 = fork()) == -1) {
- tst_brkm(TBROK, cleanup, "fork() failed");
- }
-
- if (pid1 == 0) { /* child */
- /* child uses some cpu cycles */
- for (i = 1; i < 32767; i++) {
- fl1 = 0.000001;
- fl1 = fl2 = 0.000001;
- fl1 = fl1 * 10.0;
- fl2 = fl1 / 1.232323;
- fl1 = fl2 - fl2;
- fl1 = fl2;
- }
-
- /* Pid must always be zero in child */
-
- if (pid1 != 0) {
- exit(1);
- } else {
- exit(0);
- }
- } else { /* parent */
- tst_resm(TINFO, "process id in parent of child from "
- "fork : %d", pid1);
- pid2 = wait(&status); /* wait for child */
-
- if (pid1 != pid2) {
- tst_resm(TFAIL, "pids don't match : %d vs %d",
- pid1, pid2);
- continue;
- }
-
- if ((status >> 8) != 0) {
- tst_resm(TFAIL, "child exited with failure");
- continue;
- }
-
- tst_resm(TPASS, "test 1 PASSED");
- }
- }
- cleanup();
-
- /*NOTREACHED*/
-}
-
-/*
- * setup() - performs all ONE TIME setup for this test
- */
-void
-setup()
-{
- /*
- * capture signals
- */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- /*
- * Pause if that option was specified
- */
- TEST_PAUSE;
-}
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- tst_exit();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/fork04.c b/winsup/testsuite/winsup.api/ltp/fork04.c
deleted file mode 100644
index 7e8d80f96..000000000
--- a/winsup/testsuite/winsup.api/ltp/fork04.c
+++ /dev/null
@@ -1,403 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : fork04
- *
- * TEST TITLE : Child inheritance of Environment Variables after fork()
- *
- * PARENT DOCUMENT : frktds01
- *
- * TEST CASE TOTAL : 3
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : Kathy Olmsted
- *
- * CO-PILOT : Steve Shaw
- *
- * DATE STARTED : 06/17/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- * Test these environment variables correctly inherited by child:
- * 1. TERM
- * 2. NoTSetzWq
- * 3. TESTPROG
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * DETAILED DESCRIPTION
- *
- * Setup:
- * Setup signal handling.
- * Make and change to a temporary directory.
- * Pause for SIGUSR1 if option specified.
- * Add TESTPROG variable to the environment
- *
- * Test:
- * Loop if the proper options are given.
- * fork()
- * Check return code, if system call failed (return=-1)
- * Log the errno
- * CHILD:
- * open a temp file
- * Determine environment values and write to file
- * close file containing test values.
- * exit.
- * PARENT:
- * Wait for child to exit.
- * Verify exit status
- * Open file containing test values.
- * For each test case:
- * Read the value from the file.
- * Determine and report PASS/FAIL result.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- * Remove the temporary directory and exit.
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <fcntl.h>
-#include <string.h>
-#include <sys/param.h>
-#include <signal.h> /*Includes signal information. */
-#include <errno.h>
-#include "test.h"
-#include "usctest.h"
-
-const char *TCID="fork04"; /* Test program identifier. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-
-
-#define KIDEXIT 42 /* Known value for child exit status */
-#define MAX_LINE_LENGTH 256
-#define OUTPUT_FILE "env.out"
-#define ENV_NOT_SET "getenv() does not find variable set"
-
-/* list of environment variables to test */
-const char *environ_list[] = {"TERM","NoTSetzWq","TESTPROG"};
-#define NUMBER_OF_ENVIRON (int)(sizeof(environ_list)/sizeof(char *))
-int TST_TOTAL=NUMBER_OF_ENVIRON; /* Total number of test cases. */
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* remove the temporary directory and exit with
- return code appropriate for results */
- tst_rmdir();
- tst_exit();
-
-} /* End cleanup() */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- /* make and change to a temporary directory */
- tst_tmpdir();
-
- /* add a variable to the environment */
- putenv(strdup("TESTPROG=FRKTCS04"));
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
-} /* End setup() */
-
-
-/***************************************************************
- * child_environment - the child side of the environment tests
- * determine values for the variables and write to a file
- ***************************************************************/
-void child_environment()
-{
-
- int fildes;
- int index;
- char msg[MAX_LINE_LENGTH];
- char *var;
-
- fildes = creat(OUTPUT_FILE,0700);
-
-
- for (index=0;index<NUMBER_OF_ENVIRON;index++) {
- memset(msg, 0, MAX_LINE_LENGTH);
-
- if ( (var=getenv(environ_list[index])) == NULL )
- (void)sprintf(msg,"%s:%s",environ_list[index], ENV_NOT_SET);
- else
- (void)sprintf(msg,"%s:%s",environ_list[index], var);
-
- write(fildes,msg,sizeof(msg)); /* includes extra null chars */
- }
-
- close(fildes);
-
-}
-
-/***********************************************************************
- *
- * Compare parent env string to child's string.
- * Each string is in the format: <env var>:<value>
- *
- ***********************************************************************/
-int
-cmp_env_strings(char *pstring, char *cstring)
-{
- char *penv, *cenv, *pvalue, *cvalue;
-
- /*
- * Break pstring into env and value
- */
- penv=pstring;
- if ( (pvalue=strchr(pstring, ':')) == NULL ) {
- tst_resm(TBROK,
- "internal error - parent's env string not in correct format:'%s'",
- pstring);
- return -1;
- } else {
- *pvalue='\0';
- pvalue++;
- if ( *pvalue == '\0' ) {
- tst_resm(TBROK, "internal error - missing parent's env value");
- return -1;
- }
- }
-
- /*
- * Break cstring into env and value
- */
- cenv=cstring;
- if ( (cvalue=strchr(cstring, ':')) == NULL ) {
- tst_resm(TBROK,
- "internal error - parent's env string not in correct format:'%s'",
- cstring);
- return -1;
- } else {
- *cvalue='\0';
- cvalue++;
- if ( *cvalue == '\0' ) {
- tst_resm(TBROK, "internal error - missing child's env value");
- return -1;
- }
- }
-
- if ( strcmp(penv, cenv) != 0 ) {
- tst_resm(TBROK, "internal error - parent(%s) != child (%s) env",
- penv, cenv);
- return -1;
- }
-
- if ( strcmp(pvalue, cvalue) != 0 ) {
- tst_resm(TFAIL, "Env var %s changed after fork(), parent's %s, child's %s",
- penv, pvalue, cvalue);
- } else {
- tst_resm(TPASS, "Env var %s unchanged after fork(): %s",
- penv, cvalue);
- }
- return 0;
-
-}
-
-/***************************************************************
- * parent_environment - the parent side of the environment tests
- * determine values for the variables
- * read the values determined by the child
- * compare values
- ***************************************************************/
-void parent_environment()
-{
-
- int fildes;
- char tmp_line[MAX_LINE_LENGTH];
- char parent_value[MAX_LINE_LENGTH];
- int index;
- int ret;
- char *var;
-
- if ((fildes = open(OUTPUT_FILE,O_RDWR)) == -1) {
- tst_brkm(TBROK, cleanup,
- "fork() test. Parent open of temporary file failed. errno %d (%s)\n",
- errno, strerror(errno));
- }
- for (index=0;index<NUMBER_OF_ENVIRON;index++)
- {
- if ((ret=read(fildes,tmp_line,MAX_LINE_LENGTH)) == 0) {
- tst_resm(TBROK,"fork() test. parent_environment: failed to read from file with %d (%s)",
- errno,strerror(errno));
- }
- else {
-
- if ( (var=getenv(environ_list[index])) == NULL )
- sprintf(parent_value,"%s:%s", environ_list[index], ENV_NOT_SET);
- else
- sprintf(parent_value,"%s:%s", environ_list[index], var);
-
- cmp_env_strings(parent_value, tmp_line);
-
- }
- }
- close(fildes);
-
-}
-
-/***************************************************************
- * main() - performs tests
- *
- ***************************************************************/
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- int kid_status; /* status returned from child */
- int wait_status; /* status of wait system call in parent */
- int fails; /* indicates whether to continue with tests */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL ) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count and fail indicator in case we are looping. */
- Tst_count=0;
- fails = 0;
-
- /* make the call to fork */
- TEST(fork());
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- /* fork failed */
- if ( STD_FUNCTIONAL_TEST ) {
- tst_brkm(TFAIL, cleanup, "fork() failed with %d (%s)",
- TEST_ERRNO, strerror(TEST_ERRNO));
- }
- }
- else if (TEST_RETURN == 0) {
- /* child */
- if ( STD_FUNCTIONAL_TEST ) {
- /* determine environment variables */
- child_environment();
- }
- /* exit with known value */
- exit(KIDEXIT);
- } else {
- /* parent of successful fork */
- /* wait for the child to complete */
- wait_status = wait(&kid_status);
- if ( STD_FUNCTIONAL_TEST ) {
- /* validate the child exit status */
- if (wait_status == TEST_RETURN) {
- if (kid_status != KIDEXIT << 8) {
- tst_brkm(TBROK, cleanup,
- "fork(): Incorrect child status returned on wait(): %d",
- kid_status);
- fails++;
- }
- }
- else {
- tst_brkm(TBROK, cleanup,
- "fork(): wait() for child status failed with %d errno: %d : %s",
- wait_status,errno,strerror(errno));
- fails++;
- }
-
- if (fails == 0 ) {
- /* verification tests */
- parent_environment();
- }
- }
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
diff --git a/winsup/testsuite/winsup.api/ltp/fork06.c b/winsup/testsuite/winsup.api/ltp/fork06.c
deleted file mode 100644
index 9755e503b..000000000
--- a/winsup/testsuite/winsup.api/ltp/fork06.c
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * NAME
- * fork06.c
- *
- * DESCRIPTION
- * Test that a process can fork children a large number of
- * times in succession
- *
- * ALGORITHM
- * Attempt to fork a child that exits immediately
- * Repeat it many times(1000), counting the number of successes and
- * failures
- *
- * USAGE
- * fork06
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS
- * None
- */
-
-#include <sys/wait.h>
-#include "test.h"
-#include "usctest.h"
-
-const char *TCID = "fork06";
-int TST_TOTAL = 1;
-extern int Tst_count;
-
-void setup(void);
-void cleanup(void) __attribute__((noreturn));
-
-#define NUMFORKS 1000
-
-int
-main(int ac, char **av)
-{
- int i, pid, status, childpid, succeed, fail;
-
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /*
- * parse standard options
- */
- if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
- /*NOTREACHED*/
- }
-
- /*
- * perform global setup for the test
- */
- setup();
-
- /*
- * check looping state if -i option is given
- */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- /*
- * reset Tst_count in case we are looping.
- */
- Tst_count = 0;
-
- succeed = 0;
- fail = 0;
-
- for (i = 0; i < NUMFORKS; i++) {
- if ((pid = fork()) == -1) {
- fail++;
- continue;
- }
-
- if (pid == 0) { /* child */
- _exit(0);
- }
-
- /* parent */
- childpid = wait(&status);
- if (pid != childpid) {
- tst_resm(TFAIL, "pid from wait %d", childpid);
- }
- succeed++;
- }
-
- tst_resm(TINFO, "tries %d", i);
- tst_resm(TINFO, "successes %d", succeed);
- tst_resm(TINFO, "failures %d", fail);
-
- if ((wait(&status)) == -1) {
- tst_resm(TINFO, "There were no children to wait for");
- } else {
- tst_resm(TINFO, "There were children left");
- }
- }
- cleanup();
-
- /*NOTREACHED*/
-}
-
-/*
- * setup() - performs all ONE TIME setup for this test
- */
-void
-setup()
-{
- /*
- * capture signals
- */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- /*
- * Pause if that option was specified
- */
- TEST_PAUSE;
-}
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- tst_exit();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/fork07.c b/winsup/testsuite/winsup.api/ltp/fork07.c
deleted file mode 100644
index 7e06db7a1..000000000
--- a/winsup/testsuite/winsup.api/ltp/fork07.c
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * NAME
- * fork07.c
- *
- * DESCRIPTION
- * Check that all children inherit parent's file descriptor
- *
- * ALGORITHM
- * Parent opens a file, writes to it; forks processes until
- * -1 is returned. Each child attempts to read the file then returns.
- *
- * USAGE
- * fork07
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS
- * None
- */
-
-#include <sys/wait.h>
-#include <sys/stat.h>
-#include "test.h"
-#include "usctest.h"
-
-const char *TCID = "fork07";
-int TST_TOTAL = 1;
-extern int Tst_count;
-
-void setup(void);
-void cleanup(void) __attribute__((noreturn));
-
-char pbuf[10];
-char fnamebuf[40];
-
-int
-main(int ac, char **av)
-{
- int status, count, forks, pid1;
- int ch_r_stat;
- FILE *rea = NULL, *writ = NULL;
-
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /*
- * parse standard options
- */
- if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
- /*NOTREACHED*/
- }
-
- /*
- * perform global setup for the test
- */
- setup();
-
- /*
- * check looping state if -i option is given
- */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- /*
- * reset Tst_count in case we are looping.
- */
- Tst_count = 0;
-
- if ((writ = fopen(fnamebuf, "w")) == NULL)
- tst_resm(TFAIL, "failed to fopen file for write");
- if ((rea = fopen(fnamebuf, "r")) == NULL)
- tst_resm(TFAIL, "failed to fopen file for read");
-
- fprintf(writ,"abcdefghijklmnopqrstuv") ;
- fflush(writ);
- sleep(1);
-
- if ((getc(rea)) != 'a')
- tst_resm(TFAIL, "getc from read side was confused");
-
- forks = 0;
-
-forkone:
- ++forks;
- pid1 = -1;
- if ( forks >= 1000 || (pid1 = fork()) != 0) { /* parent */
- if (pid1 > 0) {
- goto forkone;
- } else if (pid1 < 0) {
- tst_resm(TINFO, "last child forked");
- }
- } else { /* child */
- ch_r_stat = getc(rea);
-#ifdef DEBUG
- tst_resm(TINFO, "Child got char: %c", ch_r_stat);
- tst_resm(TINFO, "integer value of getc in child "
- "expected %d got %d", 'b', ch_r_stat);
-#endif
- if (ch_r_stat != EOF) { /* for error or EOF */
- tst_resm(TPASS, "test passed in child no %d",
- forks);
- exit(0);
- } else {
- tst_resm(TFAIL, "Test failed in child no. %d",
- forks);
- exit(-1);
- }
- }
-
- /* parent */
- --forks;
- for (count = 0; count <= forks; count++) {
- wait(&status);
-#ifdef DEBUG
- tst_resm(TINFO, " exit status of wait "
- " expected 0 got %d", status);
-#endif
- if (status == 0) {
- tst_resm(TPASS, "parent test passed");
- } else {
- tst_resm(TFAIL, "parent test failed");
- }
- }
- tst_resm(TINFO, "Number of processes forked is %d", forks);
- }
- fclose (writ);
- fclose (rea);
- cleanup();
-
- /*NOTREACHED*/
-}
-
-/*
- * setup() - performs all ONE TIME setup for this test
- */
-void
-setup()
-{
- /*
- * capture signals
- */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- umask(0);
-
- /*
- * Pause if that option was specified
- */
- TEST_PAUSE;
-
- /*
- * make a temp directory and cd to it
- */
- tst_tmpdir();
-
- strcpy(fnamebuf, "fork07.");
- sprintf(pbuf, "%d", getpid());
- strcat(fnamebuf, pbuf);
-}
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /*
- * remove tmp dir and all files in it
- */
- unlink(fnamebuf);
- tst_rmdir();
-
- tst_exit();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/fork09.c b/winsup/testsuite/winsup.api/ltp/fork09.c
deleted file mode 100644
index 233acc76e..000000000
--- a/winsup/testsuite/winsup.api/ltp/fork09.c
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * NAME
- * fork01.c
- *
- * DESCRIPTION
- * Check that child has access to a full set of files.
- *
- * ALGORITHM
- * Parent opens a maximum number of files
- * Child closes one and attempts to open another, it should be
- * available
- *
- * USAGE
- * fork01
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS
- * None
- */
-
-#include <errno.h>
-#include <limits.h> /* for OPEN_MAX */
-#include <sys/fcntl.h>
-#include <sys/stat.h>
-#include <sys/wait.h>
-#include "test.h"
-#include "usctest.h"
-
-const char *TCID = "fork01";
-int TST_TOTAL = 1;
-extern int Tst_count;
-
-void setup(void);
-void cleanup(void) __attribute__((noreturn));
-
-char filname[40], childfile[40];
-int first;
-FILE **fildeses; /* file streams */
-int mypid, nfiles;
-
-int
-main(int ac, char **av)
-{
- int pid, status, nf;
-
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /*
- * parse standard options
- */
- if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
- /*NOTREACHED*/
- }
-
- /*
- * perform global setup for the test
- */
- setup();
-
- fildeses = (FILE**)malloc((OPEN_MAX + 10) * sizeof(FILE *));
- if (fildeses == NULL) {
- tst_brkm(TBROK, cleanup, "malloc failed");
- /*NOTREACHED*/
- }
-
- /*
- * check looping state if -i option is given
- */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- /*
- * reset Tst_count in case we are looping.
- */
- Tst_count = 0;
-
- mypid = getpid();
-
- tst_resm(TINFO, "OPEN_MAX is %d", OPEN_MAX);
-
- /* establish first free file */
- sprintf(filname, "fork01.%d", mypid);
- if ((first = creat(filname, 0660)) == -1) {
- tst_brkm(TBROK, cleanup, "Cannot open first file %s, "
- "errno = %d", filname, errno);
- /*NOTREACHED*/
- }
- close(first);
-
- tst_resm(TINFO, "first file descriptor is %d ", first);
-
- if (unlink(filname) == -1) {
- tst_brkm(TBROK, cleanup, "Cannot unlink file %s, "
- "errno = %d", filname, errno);
- /*NOTREACHED*/
- }
-
- /*
- * now open all the files for the test
- */
- for (nfiles = first; nfiles < OPEN_MAX; nfiles++) {
- sprintf(filname, "file%d.%d", nfiles, mypid);
- if ((fildeses[nfiles] = fopen(filname, "a")) == NULL) {
- tst_brkm(TBROK, cleanup, "Parent: cannot open "
- "file %d %s errno = %d", nfiles,
- filname, errno);
- /*NOTREACHED*/
- }
-#ifdef DEBUG
- tst_resm(TINFO, "filname: %s", filname);
-#endif
- }
-
- tst_resm(TINFO, "Parent reporting %d files open", nfiles - 1);
-
- if ((pid = fork()) == -1) {
- tst_brkm(TBROK, cleanup, "Fork failed");
- /*NOTREACHED*/
- }
-
- if (pid == 0) { /* child */
- nfiles--;
- if (fclose(fildeses[nfiles]) == -1) {
- tst_resm(TINFO, "Child could not close file "
- "#%d, errno = %d", nfiles, errno);
- exit(1);
- /*NOTREACHED*/
- } else {
- sprintf(childfile, "cfile.%d", getpid());
- if ((fildeses[nfiles] =
- fopen(childfile, "a")) == NULL) {
- tst_resm(TINFO, "Child could not open "
- "file %s, errno = %d",
- childfile, errno);
- exit(1);
- /*NOTREACHED*/
- } else {
- tst_resm(TINFO, "Child opened new "
- "file #%d", nfiles);
- unlink(childfile);
- exit(0);
- }
- }
- } else { /* parent */
- wait(&status);
- if (status >> 8 != 0) {
- tst_resm(TFAIL, "test 1 FAILED");
- } else {
- tst_resm(TPASS, "test 1 PASSED");
- }
- }
-
- /* clean up things in case we are looping */
- for (nf = first; nf < nfiles; nf++) {
- fclose(fildeses[nf]);
- sprintf(filname, "file%d.%d", nf, mypid);
- unlink(filname);
- }
- }
- cleanup();
-
- /*NOTREACHED*/
-}
-
-/*
- * setup() - performs all ONE TIME setup for this test
- */
-void
-setup()
-{
- /*
- * capture signals
- */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- umask(0);
-
- /*
- * Pause if that option was specified
- */
- TEST_PAUSE;
-
- /*
- * make a temp directory and cd to it
- */
- tst_tmpdir();
-}
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or at premature exit
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /*
- * remove tmp dir and all files in it
- */
- tst_rmdir();
-
- tst_exit();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/fork10.c b/winsup/testsuite/winsup.api/ltp/fork10.c
deleted file mode 100644
index 9dcbbb3b5..000000000
--- a/winsup/testsuite/winsup.api/ltp/fork10.c
+++ /dev/null
@@ -1,216 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * NAME
- * fork04.c
- *
- * DESCRIPTION
- * Check inheritance of file descriptor by children, they
- * should all be refering to the same file.
- *
- * ALGORITHM
- * Child reads several chars and exits.
- * Parent forks another child, have the child and parent attempt to use
- * that location
- *
- * USAGE
- * fork04
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS
- * None
- */
-
-#include <errno.h>
-#include <fcntl.h>
-#include <sys/wait.h>
-#include "test.h"
-#include "usctest.h"
-
-const char *TCID = "fork04";
-int TST_TOTAL = 1;
-extern int Tst_count;
-
-void setup(void);
-void cleanup(void) __attribute__((noreturn));
-
-char pidbuf[10];
-char fnamebuf[40];
-
-int
-main(int ac, char **av)
-{
- int status, pid, fildes;
- char parchar[2];
- char chilchar[2];
-
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /*
- * parse standard options
- */
- if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
- /*NOTREACHED*/
- }
-
- /*
- * perform global setup for the test
- */
- setup();
-
- /*
- * check looping state if -i option is given
- */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- /*
- * reset Tst_count in case we are looping.
- */
- Tst_count = 0;
-
- if ((fildes = creat(fnamebuf, 0600)) < 0) {
- tst_brkm(TBROK, cleanup, "Parent: cannot open %s for "
- "write, errno = %d", fnamebuf, errno);
- /*NOTREACHED*/
- }
- write(fildes, "ABCDEFGHIJKLMNOPQRSTUVWXYZ\n", 27);
- close(fildes);
-
- if ((fildes = open(fnamebuf, 0)) == -1) {
- tst_brkm(TBROK, cleanup, "Parent: cannot open %s for "
- "reading", fnamebuf);
- /*NOTREACHED*/
- }
-
- if ((pid = fork()) == -1) {
- tst_brkm(TBROK, cleanup, "fork() #1 failed");
- /*NOTREACHED*/
- }
-
- if (pid == 0) { /* child */
- tst_resm(TINFO, "fork child A");
- if (lseek(fildes, 10L, 0) == -1L) {
- tst_resm(TFAIL, "bad lseek by child");
- exit(1);
- }
- exit(0);
- } else { /* parent */
- wait(&status);
-
- /* parent starts second child */
- if ((pid = fork()) == -1) {
- tst_brkm(TBROK, cleanup, "fork() #2 failed");
- /*NOTREACHED*/
- }
-
- if (pid == 0) { /* child */
- if (read(fildes, chilchar, 1) <= 0) {
- tst_resm(TFAIL, "Child can't read "
- "file");
- exit(1);
- } else {
- if (chilchar[0] != 'K') {
- chilchar[1] = '\n';
- exit(1);
- } else {
- exit(0);
- }
- }
- } else { /* parent */
- (void)wait(&status);
- if (status >> 8 != 0) {
- tst_resm(TFAIL, "Bad return from "
- "second child");
- continue;
- }
- /* parent reads */
- if (read(fildes, parchar, 1) <= 0) {
- tst_resm(TFAIL, "Parent cannot read "
- "file");
- continue;
- } else {
- write(fildes, parchar, 1);
- if (parchar[0] != 'L') {
- parchar[1] = '\n';
- tst_resm(TFAIL, "Test failed");
- continue;
- }
- }
- }
- }
- tst_resm(TPASS, "test 1 PASSED");
- close (fildes);
- }
- cleanup();
-
- /*NOTREACHED*/
-}
-
-/*
- * setup() - performs all ONE TIME setup for this test
- */
-void
-setup()
-{
- /*
- * capture signals
- */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- umask(0);
-
- /*
- * Pause if that option was specified
- */
- TEST_PAUSE;
-
- /*
- * make a temp directory and cd to it
- */
- tst_tmpdir();
-
- strcpy(fnamebuf, "fork04.");
- sprintf(pidbuf, "%d", getpid());
- strcat(fnamebuf, pidbuf);
-}
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /*
- * remove tmp dir and all files in it
- */
- tst_rmdir();
-
- tst_exit();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/fork11.c b/winsup/testsuite/winsup.api/ltp/fork11.c
deleted file mode 100644
index 2b1035230..000000000
--- a/winsup/testsuite/winsup.api/ltp/fork11.c
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * NAME
- * fork05.c
- *
- * DESCRIPTION
- * Test that parent gets a pid from each child when doing wait
- *
- * ALGORITHM
- * Fork NUMFORKS children that do nothing.
- *
- * USAGE
- * fork05
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS
- * None
- */
-
-#include <errno.h>
-#include <sys/wait.h>
-#include "test.h"
-#include "usctest.h"
-
-const char *TCID = "fork05";
-int TST_TOTAL = 1;
-extern int Tst_count;
-
-void setup(void);
-void cleanup(void) __attribute__((noreturn));
-
-#define NUMFORKS 100
-
-int
-main(int ac, char **av)
-{
- int i, pid, cpid, status;
-
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /*
- * parse standard options
- */
- if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
- /*NOTREACHED*/
- }
-
- /*
- * perform global setup for the test
- */
- setup();
-
- /*
- * check looping state if -i option is given
- */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
-
- /*
- * reset Tst_count in case we are looping.
- */
- Tst_count = 0;
-
- for (i=0; i<NUMFORKS; i++) {
- if ((pid = fork()) == 0) { /* child */
- exit(0);
- }
-
- if (pid > 0) { /* parent */
- cpid = wait(&status);
- if (cpid == pid) {
- tst_resm(TPASS, "fork #%d passed", i+1);
- } else {
- tst_resm(TFAIL, "fork #%d failed", i+1);
- }
- } else {
- tst_resm(TFAIL, "fork #%d failed", i+1);
- break;
- }
- }
- tst_resm(TINFO, "Number of processes forked = %d", i);
- tst_resm(TINFO, "Exit test 1");
- }
- cleanup();
-
- /*NOTREACHED*/
-}
-
-/*
- * setup() - performs all ONE TIME setup for this test
- */
-void
-setup()
-{
- /*
- * capture signals
- */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- /*
- * Pause if that option was specified
- */
- TEST_PAUSE;
-}
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- tst_exit();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/fpathconf01.c b/winsup/testsuite/winsup.api/ltp/fpathconf01.c
deleted file mode 100644
index 37fbe9689..000000000
--- a/winsup/testsuite/winsup.api/ltp/fpathconf01.c
+++ /dev/null
@@ -1,256 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : fpathconf01
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for fpathconf(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 7
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) fpathconf(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the fpathconf(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * fpathconf(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <fcntl.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-
-const char *TCID="fpathconf01"; /* Test program identifier. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-#define FILENAME "fpafile01"
-
-int exp_enos[]={0, 0};
-
-int i;
-
-struct pathconf_args
-{
- const char *define_tag;
- int value;
- int defined; /* Some of these are undefined on regular files.
- * Cancer does a slightly better job with these already,
- * so this is all I'll do to this test. 11/19/98 roehrich
- */
-} args[] = {
- {"_PC_MAX_CANON", _PC_MAX_CANON, 0},
- {"_PC_MAX_INPUT", _PC_MAX_INPUT, 0},
- {"_PC_VDISABLE", _PC_VDISABLE, 0},
- {"_PC_LINK_MAX", _PC_LINK_MAX, 1},
- {"_PC_NAME_MAX", _PC_NAME_MAX, 1},
- {"_PC_PATH_MAX", _PC_PATH_MAX, 1},
- {"_PC_PIPE_BUF", _PC_PIPE_BUF, 0}
-};
-
-int TST_TOTAL=((sizeof(args)/sizeof(args[0])));
-int fd; /* temp file for fpathconf */
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL ) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- for (i=0; i<TST_TOTAL; i++) {
- /*
- * Call fpathconf(2) with one of the valid arguments in the args array
- */
- TEST(fpathconf(fd,args[i].value));
-
- /* check return code -- if the return value is defined */
- if ( (TEST_RETURN == -1) && args[i].defined ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "fpathconf(fd, %s) Failed, errno=%d : %s", args[i].define_tag,
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "fpathconf(fd, %s) returned %d", args[i].define_tag, TEST_RETURN);
- }
- }
- } /* End for i */
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
-
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- tst_tmpdir();
-
- if ( (fd=open(FILENAME, O_RDWR|O_CREAT, 0700)) == -1 )
- tst_brkm(TBROK, cleanup, "Unable to open temp file %s!", FILENAME);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- close(fd);
-
- /* exit with return code appropriate for results */
- tst_rmdir();
- tst_exit();
-
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/fstat01.c b/winsup/testsuite/winsup.api/ltp/fstat01.c
deleted file mode 100644
index d76684104..000000000
--- a/winsup/testsuite/winsup.api/ltp/fstat01.c
+++ /dev/null
@@ -1,237 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : fstat01
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for fstat(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) fstat(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the fstat(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * fstat(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <sys/types.h>
-#include <sys/fcntl.h>
-#include <sys/stat.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-const char *TCID="fstat01"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0};
-
-char fname[255];
-int fd;
-struct stat statter;
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call fstat(2)
- */
- TEST(fstat(fd, &statter));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "fstat(%s, &statter) Failed, errno=%d : %s", fname,
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "fstat(%s, &statter) returned %d", fname, TEST_RETURN);
- }
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- sprintf(fname,"tfile_%d",getpid());
- if ((fd = open(fname,O_RDWR|O_CREAT,0700)) == -1) {
- tst_brkm(TBROK, cleanup, "open(%s, O_RDWR|O_CREAT,0700) Failed, errno=%d : %s", fname, errno, strerror(errno));
- }
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- if (close(fd) == -1) {
- tst_resm(TWARN, "close(%s) Failed, errno=%d : %s", fname, errno, strerror(errno));
- }
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/fstat02.c b/winsup/testsuite/winsup.api/ltp/fstat02.c
deleted file mode 100644
index 224caf0d7..000000000
--- a/winsup/testsuite/winsup.api/ltp/fstat02.c
+++ /dev/null
@@ -1,244 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * Test Name: fstat02
- *
- * Test Description:
- * Verify that, fstat(2) succeeds to get the status of a file and fills
- * the stat structure elements though file pointed to by file descriptor
- * not opened for reading.
- *
- * Expected Result:
- * fstat() should return value 0 on success and the stat structure elements
- * should be filled with specified 'file' information.
- *
- * Algorithm:
- * Setup:
- * Setup signal handling.
- * Create temporary directory.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise,
- * Verify the Functionality of system call
- * if successful,
- * Issue Functionality-Pass message.
- * Otherwise,
- * Issue Functionality-Fail message.
- * Cleanup:
- * Print errno log and/or timing stats if options given
- * Delete the temporary directory created.
- *
- * Usage: <for command-line>
- * fstat02 [-c n] [-f] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -f : Turn off functionality Testing.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS:
- * This test should be run by 'non-super-user' only.
- *
- */
-#include <sys/types.h>
-#include <sys/fcntl.h>
-#include <sys/stat.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-
-#include "test.h"
-#include "usctest.h"
-
-#define FILE_MODE 0644
-#define TESTFILE "testfile"
-#define FILE_SIZE 1024
-#define BUF_SIZE 256
-#define MASK 0777
-
-const char *TCID="fstat02"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-uid_t User_id; /* user id/group id of test process */
-gid_t Group_id;
-int fildes; /* File descriptor of testfile */
-
-void setup(); /* Setup function for the test */
-void cleanup() __attribute__((noreturn));/* Cleanup function for the test */
-
-int
-main(int ac, char **av)
-{
- struct stat stat_buf; /* stat structure buffer */
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /* Parse standard options given to run the test. */
- msg = parse_opts(ac, av, (option_t *) NULL, NULL);
- if (msg != (char *) NULL) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /* Perform global setup for test */
- setup();
-
- /* Check looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- /* Reset Tst_count in case we are looping. */
- Tst_count = 0;
-
- /*
- * Call fstat(2) to get the status of
- * specified 'file' pointed to by 'fd'
- * into stat structure.
- */
- TEST(fstat(fildes, &stat_buf));
-
- /* check return code of fstat(2) */
- if (TEST_RETURN == -1) {
- tst_resm(TFAIL,
- "fstat on %s Failed, errno=%d : %s",
- TESTFILE, TEST_ERRNO, strerror(TEST_ERRNO));
- continue;
- }
- /*
- * Perform functional verification if test
- * executed without (-f) option.
- */
- if (STD_FUNCTIONAL_TEST) {
- /*
- * Verify the data returned by fstat(2)
- * aganist the expected data.
- */
- if ((stat_buf.st_uid != User_id) ||
- (stat_buf.st_gid != Group_id) ||
- (stat_buf.st_size != FILE_SIZE) ||
- ((stat_buf.st_mode & MASK) != FILE_MODE)) {
- tst_resm(TFAIL, "Functionality of fstat(2) on "
- "'%s' Failed", TESTFILE);
- } else {
- tst_resm(TPASS, "Functionality of fstat(2) on "
- "'%s' Succcessful", TESTFILE);
- }
- } else {
- tst_resm(TPASS, "call succeeded");
- }
- } /* End for TEST_LOOPING */
-
- /* Call cleanup() to undo setup done for the test. */
- cleanup();
-
- /*NOTREACHED*/
-} /* End main */
-
-/*
- * void
- * setup() - Performs setup function for the test.
- * Creat a temporary directory and chdir to it.
- * Creat a temporary file and write some known data into it.
- * Get the effective uid/gid of test process.
- */
-void
-setup()
-{
- int i;
- char tst_buff[BUF_SIZE];
- int wbytes;
- int write_len = 0;
-
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Check that the test process id is not super/root */
- if (geteuid() == 0) {
- tst_brkm(TBROK, NULL, "Must be non-super/root for this test!");
- tst_exit();
- }
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- if ((fildes = open(TESTFILE, O_WRONLY|O_CREAT, FILE_MODE)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR|O_CREAT, %#o) Failed, errno=%d : %s",
- TESTFILE, FILE_MODE, errno, strerror(errno));
- }
-
- /* Fill the test buffer with the known data */
- for (i = 0; i < BUF_SIZE; i++) {
- tst_buff[i] = 'a';
- }
-
- /* Write to the file 1k data from the buffer */
- while (write_len < FILE_SIZE) {
- if ((wbytes = write(fildes, tst_buff, sizeof(tst_buff))) <= 0) {
- tst_brkm(TBROK, cleanup,
- "write(2) on %s Failed, errno=%d : %s",
- TESTFILE, errno, strerror(errno));
- } else {
- write_len += wbytes;
- }
- }
-
- /* Get the uid/gid of the process */
- User_id = getuid();
- Group_id = getgid();
-
-} /* End setup() */
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- * Close the test file and remove the test file and temporary directory.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* Close the test file */
- if (close(fildes) == -1) {
- tst_brkm(TFAIL, NULL, "close(%s) Failed, errno=%d : %s",
- TESTFILE, errno, strerror(errno));
- }
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/fstat03.c b/winsup/testsuite/winsup.api/ltp/fstat03.c
deleted file mode 100644
index 47982ed47..000000000
--- a/winsup/testsuite/winsup.api/ltp/fstat03.c
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
- * Test Name: fstat03
- *
- * Test Description:
- * Verify that, fstat(2) returns -1 and sets errno to EBADF if the file
- * pointed to by file descriptor is not valid.
- *
- * Expected Result:
- * fstat() should fail with return value -1 and set expected errno.
- *
- * Algorithm:
- * Setup:
- * Setup signal handling.
- * Create temporary directory.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * if errno set == expected errno
- * Issue sys call fails with expected return value and errno.
- * Otherwise,
- * Issue sys call fails with unexpected errno.
- * Otherwise,
- * Issue sys call returns unexpected value.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- * Delete the temporary directory(s)/file(s) created.
- *
- * Usage: <for command-line>
- * fstat03 [-c n] [-e] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -e : Turn on errno logging.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS:
- * This test should be executed by 'non-super-user' only.
- *
- */
-
-#include <fcntl.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#include "test.h"
-#include "usctest.h"
-
-#define FILE_MODE S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH
-#define TEST_FILE "testfile"
-
-const char *TCID="fstat03"; /* Test program identifier. */
-int TST_TOTAL = 1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-int exp_enos[]={EBADF, 0};
-int fildes; /* testfile descriptor */
-
-void setup(); /* Main setup function for the tests */
-void cleanup() __attribute__((noreturn));/* cleanup function for the test */
-
-int
-main(int ac, char **av)
-{
- struct stat stat_buf; /* stat structure buffer */
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /* Parse standard options given to run the test. */
- msg = parse_opts(ac, av, (option_t *) NULL, NULL);
- if (msg != (char *) NULL) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /*
- * Invoke setup function to create a testfile under temporary
- * directory.
- */
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /* Check looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- /* Reset Tst_count in case we are looping. */
- Tst_count=0;
- /*
- * Call fstat(2) to get the status information
- * of a closed testfile pointed to by 'fd'.
- * verify that fstat fails with -1 return value and
- * sets appropriate errno.
- */
- TEST(fstat(fildes, &stat_buf));
-
- /* Check return code from fstat(2) */
- if (TEST_RETURN == -1) {
- TEST_ERROR_LOG(TEST_ERRNO);
- if (TEST_ERRNO == EBADF) {
- tst_resm(TPASS, "fstat() fails with "
- "expected error EBADF");
- } else {
- tst_resm(TFAIL, "fstat() fails with "
- "wrong errno:%d", TEST_ERRNO);
- }
- } else {
- tst_resm(TFAIL, "fstat() returned %d, "
- "expected -1, error EBADF");
- }
- } /* End for TEST_LOOPING */
-
- /*
- * Invoke cleanup() to delete the test directory/file(s) created
- * in the setup().
- */
- cleanup();
-
- /*NOTREACHED*/
-} /* End main */
-
-/*
- * void
- * setup(void) - performs all ONE TIME setup for this test.
- * Exit the test program on receipt of unexpected signals.
- * Create a temporary directory and change directory to it.
- * Create a testfile under temporary directory.
- * Close the testfile.
- */
-void
-setup()
-{
- /* Capture unexpected signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- /* Make a temp dir and cd to it */
- tst_tmpdir();
-
- /* Create a testfile under temporary directory */
- if ((fildes = open(TEST_FILE, O_RDWR|O_CREAT, 0666)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR|O_CREAT, 0666) failed, errno=%d : %s",
- TEST_FILE, errno, strerror(errno));
- }
-
- if (close(fildes) == -1) {
- tst_brkm(TBROK, cleanup,
- "close(%s) Failed, errno=%d : %s",
- TEST_FILE, errno, strerror(errno));
- }
-} /* End of setup */
-
-/*
- * void
- * cleanup() - Performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- * Print test timing stats and errno log if test executed with options.
- * Close the testfile if still opened.
- * Remove temporary directory and sub-directories/files under it
- * created during setup().
- * Exit the test program with normal exit code.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* Remove files and temporary directory created */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/fstat04.c b/winsup/testsuite/winsup.api/ltp/fstat04.c
deleted file mode 100644
index 1de507e62..000000000
--- a/winsup/testsuite/winsup.api/ltp/fstat04.c
+++ /dev/null
@@ -1,244 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * Test Name: fstat01
- *
- * Test Description:
- * Verify that, fstat(2) succeeds to get the status of a file pointed by
- * file descriptor and fills the stat structure elements.
- *
- * Expected Result:
- * fstat() should return value 0 on success and the stat structure should
- * be filled with specified 'file' information.
- *
- * Algorithm:
- * Setup:
- * Setup signal handling.
- * Create temporary directory.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise,
- * Verify the Functionality of system call
- * if successful,
- * Issue Functionality-Pass message.
- * Otherwise,
- * Issue Functionality-Fail message.
- * Cleanup:
- * Print errno log and/or timing stats if options given
- * Delete the temporary directory created.
- *
- * Usage: <for command-line>
- * fstat01 [-c n] [-f] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -f : Turn off functionality Testing.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS:
- * This test should be run by 'non-super-user' only.
- *
- */
-#include <sys/types.h>
-#include <sys/fcntl.h>
-#include <sys/stat.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-
-#include "test.h"
-#include "usctest.h"
-
-#define FILE_MODE 0644
-#define TESTFILE "testfile"
-#define FILE_SIZE 1024
-#define BUF_SIZE 256
-#define MASK 0777
-
-const char *TCID="fstat01"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-uid_t User_id; /* user id/group id of test process */
-gid_t Group_id;
-int fildes; /* File descriptor of testfile */
-
-void setup(); /* Setup function for the test */
-void cleanup() __attribute__((noreturn));/* Cleanup function for the test */
-
-int
-main(int ac, char **av)
-{
- struct stat stat_buf; /* stat structure buffer */
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /* Parse standard options given to run the test. */
- msg = parse_opts(ac, av, (option_t *) NULL, NULL);
- if (msg != (char *) NULL) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /* Perform global setup for test */
- setup();
-
- /* Check looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- /* Reset Tst_count in case we are looping. */
- Tst_count = 0;
-
- /*
- * Call fstat(2) to get the status of
- * specified 'file' pointed to 'fd'
- * into stat structure.
- */
- TEST(fstat(fildes, &stat_buf));
-
- /* check return code of fstat(2) */
- if (TEST_RETURN == -1) {
- tst_resm(TFAIL,
- "fstat on %s Failed, errno=%d : %s",
- TESTFILE, TEST_ERRNO, strerror(TEST_ERRNO));
- continue;
- }
- /*
- * Perform functional verification if test
- * executed without (-f) option.
- */
- if (STD_FUNCTIONAL_TEST) {
- /*
- * Verify the data returned by fstat(2)
- * aganist the expected data.
- */
- if ((stat_buf.st_uid != User_id) ||
- (stat_buf.st_gid != Group_id) ||
- (stat_buf.st_size != FILE_SIZE) ||
- ((stat_buf.st_mode & MASK) != FILE_MODE)) {
- tst_resm(TFAIL, "Functionality of fstat(2) on "
- "'%s' Failed", TESTFILE);
- } else {
- tst_resm(TPASS, "Functionality of fstat(2) on "
- "'%s' Succcessful", TESTFILE);
- }
- } else {
- tst_resm(TPASS, "call succeeded");
- }
- } /* End for TEST_LOOPING */
-
- /* Call cleanup() to undo setup done for the test. */
- cleanup();
-
- /*NOTREACHED*/
-} /* End main */
-
-/*
- * void
- * setup() - Performs setup function for the test.
- * Creat a temporary directory and chdir to it.
- * Creat a test file and write some data into it.
- * Get the user/group id info. of test process.
- */
-void
-setup()
-{
- int i; /* counter */
- char tst_buff[BUF_SIZE]; /* data buffer */
- int wbytes; /* no. of bytes written */
- int write_len = 0; /* data length */
-
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Check that the test process id is not super/root */
- if (geteuid() == 0) {
- tst_brkm(TBROK, NULL, "Must be non-super/root for this test!");
- tst_exit();
- }
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- if ((fildes = open(TESTFILE, O_RDWR|O_CREAT, FILE_MODE)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR|O_CREAT, %#o) Failed, errno=%d : %s",
- TESTFILE, FILE_MODE, errno, strerror(errno));
- }
-
- /* Fill the test buffer with the known data */
- for (i = 0; i < BUF_SIZE; i++) {
- tst_buff[i] = 'a';
- }
-
- /* Write to the file 1k data from the buffer */
- while (write_len < FILE_SIZE) {
- if ((wbytes = write(fildes, tst_buff, sizeof(tst_buff))) <= 0) {
- tst_brkm(TBROK, cleanup,
- "write(2) on %s Failed, errno=%d : %s",
- TESTFILE, errno, strerror(errno));
- } else {
- write_len += wbytes;
- }
- }
-
- /* Get the uid/gid of the process */
- User_id = getuid();
- Group_id = getgid();
-
-} /* End setup() */
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- * Close the testfile opened for reading/writing.
- * Delete the testfile and temporary directory.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* Close the test file */
- if (close(fildes) == -1) {
- tst_brkm(TFAIL, NULL, "close(%s) Failed, errno=%d : %s",
- TESTFILE, errno, strerror(errno));
- }
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/fsync01.c b/winsup/testsuite/winsup.api/ltp/fsync01.c
deleted file mode 100644
index 261ea0dbb..000000000
--- a/winsup/testsuite/winsup.api/ltp/fsync01.c
+++ /dev/null
@@ -1,248 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : fsync01
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for fsync(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) fsync(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the fsync(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * fsync(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <sys/types.h>
-#include <sys/fcntl.h>
-#include <sys/statfs.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-
-const char *TCID="fsync01"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0};
-
-char fname[255];
-int fd;
-const char *buf = "davef";
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /* write sone data to get fsync'd out */
- if (write(fd, &buf, strlen(buf)) == -1) {
- tst_brkm(TBROK, cleanup,
- "write(%s, &buf, strlen(buf)) Failed, errno=%d : %s",
- fname, TEST_ERRNO, strerror(TEST_ERRNO));
- }
- /*
- * Call fsync(2)
- */
- TEST(fsync(fd));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "fsync(%s) Failed, errno=%d : %s", fname,
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "fsync(%s) returned %d", fname, TEST_RETURN);
- }
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- sprintf(fname,"tfile_%d",getpid());
- if ((fd = open(fname,O_RDWR|O_CREAT,0700)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR|O_CREAT,0700) Failed, errno=%d : %s",
- fname, errno, strerror(errno));
- }
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* close the file we have open */
- if (close(fd) == -1) {
- tst_resm(TWARN, "close(%s) Failed, errno=%d : %s", fname, errno, strerror(errno));
- }
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/ftruncate01.c b/winsup/testsuite/winsup.api/ltp/ftruncate01.c
deleted file mode 100644
index a45c167aa..000000000
--- a/winsup/testsuite/winsup.api/ltp/ftruncate01.c
+++ /dev/null
@@ -1,244 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * Test Name: ftruncate01
- *
- * Test Description:
- * Verify that, ftruncate(2) succeeds to truncate a file to a specified
- * length if the file indicated by file descriptor opened for writing.
- *
- * Expected Result:
- * ftruncate(2) should return a value 0 and the length of the file after
- * truncation should be equal to the length it is truncated to.
- *
- * Algorithm:
- * Setup:
- * Setup signal handling.
- * Create temporary directory.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise,
- * Verify the Functionality of system call
- * if successful,
- * Issue Functionality-Pass message.
- * Otherwise,
- * Issue Functionality-Fail message.
- * Cleanup:
- * Print errno log and/or timing stats if options given
- * Delete the temporary directory created.
- *
- * Usage: <for command-line>
- * ftruncate01 [-c n] [-f] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -f : Turn off functionality Testing.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS:
- * This test should be run by 'non-super-user' only.
- *
- */
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/fcntl.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-
-#include "test.h"
-#include "usctest.h"
-
-#define TESTFILE "testfile" /* file under test */
-#define FILE_MODE S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH
-#define BUF_SIZE 256 /* buffer size */
-#define FILE_SIZE 1024 /* test file size */
-#define TRUNC_LEN 256 /* truncation length */
-
-const char *TCID="ftruncate01"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test conditions */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-int fildes; /* file descriptor for test file */
-
-void setup(); /* setup function for the test */
-void cleanup(void) __attribute__((noreturn)); /* cleanup function for the test */
-
-int
-main(int ac, char **av)
-{
- struct stat stat_buf; /* stat(2) struct contents */
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- off_t file_length; /* test file length */
-
- /* Parse standard options given to run the test. */
- msg = parse_opts(ac, av, (option_t *) NULL, NULL);
- if (msg != (char *) NULL) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /* Perform global setup for test */
- setup();
-
- /* Check looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- /* Reset Tst_count in case we are looping. */
- Tst_count = 0;
-
- /*
- * Call ftruncate(2) to truncate a test file to a
- * specified length.
- */
- TEST(ftruncate(fildes, TRUNC_LEN));
-
- /* check return code of ftruncate(2) */
- if (TEST_RETURN == -1) {
- tst_resm(TFAIL,
- "ftruncate() of %s Failed, errno=%d : %s",
- TESTFILE, TEST_ERRNO,
- strerror(TEST_ERRNO));
- continue;
- }
- /*
- * Perform functional verification if test
- * executed without (-f) option.
- */
- if (STD_FUNCTIONAL_TEST) {
- /*
- * Get the testfile information using
- * fstat(2).
- */
- if (fstat(fildes, &stat_buf) < 0) {
- tst_brkm(TFAIL, cleanup,
- "stat(2) of %s failed, error:%d",
- TESTFILE, errno);
- }
- stat_buf.st_mode &= ~S_IFREG;
- file_length = stat_buf.st_size;
-
- /*
- * Check for expected size of testfile after
- * truncate(2) on it.
- */
- if (file_length != TRUNC_LEN) {
- tst_resm(TFAIL, "%s: Incorrect file size %d, "
- "Expected %d", TESTFILE, file_length,
- TRUNC_LEN);
- } else {
- tst_resm(TPASS, "Functionality of ftruncate() "
- "on %s successful", TESTFILE);
- }
- } else {
- tst_resm(TPASS, "call succeeded");
- }
- } /* End for TEST_LOOPING */
-
- /* Call cleanup() to undo setup done for the test. */
- cleanup();
-
- /*NOTREACHED*/
-} /* End main */
-
-/*
- * void
- * setup() - performs all ONE TIME setup for this test.
- * Create a temporary directory and change directory to it.
- * Create a test file under temporary directory and write some
- * data into it.
- */
-void
-setup()
-{
- int i; /* counter for for loop() */
- int c, c_total = 0; /* bytes to be written to file */
- char tst_buff[BUF_SIZE]; /* buffer to hold data */
-
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Fill the test buffer with the known data */
- for (i = 0; i < BUF_SIZE; i++) {
- tst_buff[i] = 'a';
- }
-
- /* open a file for reading/writing */
- if ((fildes = open(TESTFILE, O_RDWR|O_CREAT, FILE_MODE)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR|O_CREAT, %o) Failed, errno=%d : %s",
- TESTFILE, FILE_MODE, errno, strerror(errno));
- }
-
- /* Write to the file 1k data from the buffer */
- while (c_total < FILE_SIZE) {
- if ((c = write(fildes, tst_buff, sizeof(tst_buff))) <= 0) {
- tst_brkm(TBROK, cleanup,
- "write(2) on %s Failed, errno=%d : %s",
- TESTFILE, errno, strerror(errno));
- } else {
- c_total += c;
- }
- }
-} /* End setup() */
-
-/*
- * void
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- * Close the temporary file.
- * Remove the test directory and testfile created in the setup.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- */
- TEST_CLEANUP;
-
- /* Close the testfile after writing data into it */
- if (close(fildes) == -1) {
- tst_brkm(TFAIL, NULL,
- "close(%s) Failed, errno=%d : %s",
- TESTFILE, errno, strerror(errno));
- }
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/ftruncate02.c b/winsup/testsuite/winsup.api/ltp/ftruncate02.c
deleted file mode 100644
index 2b4e72326..000000000
--- a/winsup/testsuite/winsup.api/ltp/ftruncate02.c
+++ /dev/null
@@ -1,313 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * Test Name: ftruncate02
- *
- * Test Description:
- * Verify that, ftruncate(2) succeeds to truncate a file to a certain length,
- * but the attempt to read past the truncated length will fail.
- *
- * Expected Result:
- * ftruncate(2) should return a value 0 and the attempt to read past the
- * truncated length will fail. In case where the file before truncation was
- * shorter, the bytes between the old and new should be all zeroes.
- *
- * Algorithm:
- * Setup:
- * Setup signal handling.
- * Create temporary directory.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise,
- * Verify the Functionality of system call
- * if successful,
- * Issue Functionality-Pass message.
- * Otherwise,
- * Issue Functionality-Fail message.
- * Cleanup:
- * Print errno log and/or timing stats if options given
- * Delete the temporary directory created.
- *
- * Usage: <for command-line>
- * ftruncate02 [-c n] [-f] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -f : Turn off functionality Testing.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS:
- * This test should be run by 'non-super-user' only.
- *
- */
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/fcntl.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-
-#include "test.h"
-#include "usctest.h"
-
-#define TESTFILE "testfile" /* file under test */
-#define FILE_MODE S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH
-#define BUF_SIZE 256 /* buffer size */
-#define FILE_SIZE 1024 /* test file size */
-#define TRUNC_LEN1 256 /* truncation length */
-#define TRUNC_LEN2 512 /* truncation length */
-
-const char *TCID="ftruncate02"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test conditions */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-int fd; /* file descriptor of testfile */
-char tst_buff[BUF_SIZE]; /* buffer to hold testfile contents */
-
-void setup(); /* setup function for the test */
-void cleanup(void) __attribute__((noreturn)); /* cleanup function for the test */
-
-int
-main(int ac, char **av)
-{
- struct stat stat_buf; /* stat(2) struct contents */
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- off_t file_length2; /* test file length */
- off_t file_length1; /* test file length */
- int rbytes, i; /* bytes read from testfile */
- int read_len = 0; /* total no. of bytes read from testfile */
- int err_flag = 0; /* error indicator flag */
-
- /* Parse standard options given to run the test. */
- msg = parse_opts(ac, av, (option_t *) NULL, NULL);
- if (msg != (char *) NULL) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /* Perform global setup for test */
- setup();
-
- /* Check looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- /* Reset Tst_count in case we are looping. */
- Tst_count = 0;
-
- /*
- * Call ftruncate(2) to truncate a test file to a
- * specified length (TRUNC_LEN1).
- */
- TEST(ftruncate(fd, TRUNC_LEN1));
-
- /* check return code of ftruncate(2) */
- if (TEST_RETURN == -1) {
- tst_resm(TFAIL, "ftruncate of %s to size %d Failed, "
- "errno=%d : %s", TESTFILE, TRUNC_LEN1,
- TEST_ERRNO, strerror(TEST_ERRNO));
- continue;
- }
- /*
- * Perform functional verification if test
- * executed without (-f) option.
- */
- if (STD_FUNCTIONAL_TEST) {
- /*
- * Get the testfile information using
- * fstat(2).
- */
- if (fstat(fd, &stat_buf) < 0) {
- tst_brkm(TFAIL, cleanup, "fstat(2) of %s failed"
- " after 1st truncate, error:%d",
- TESTFILE, errno);
- }
- stat_buf.st_mode &= ~S_IFREG;
- file_length1 = stat_buf.st_size;
-
- /*
- * Set the file pointer of testfile to the
- * beginning of the file.
- */
- if (lseek(fd, 0, SEEK_SET) < 0) {
- tst_brkm(TFAIL, cleanup, "lseek(2) on %s failed"
- " after 1st ftruncate, error:%d",
- TESTFILE, errno);
- }
-
- /* Read the testfile from the beginning. */
- while ((rbytes = read(fd, tst_buff,
- sizeof(tst_buff))) > 0) {
- read_len += rbytes;
- }
-
- /*
- * Execute ftruncate(2) again to truncate
- * testfile to a size TRUNC_LEN2.
- */
- TEST(ftruncate(fd, TRUNC_LEN2));
-
- /* check return code of ftruncate(2) */
- if (TEST_RETURN == -1) {
- tst_resm(TFAIL, "ftruncate of %s to size %d "
- "Failed, errno=%d : %s", TESTFILE,
- TRUNC_LEN2, TEST_ERRNO,
- strerror(TEST_ERRNO));
- continue;
- }
-
- /*
- * Get the testfile information using
- * fstat(2)
- */
- if (fstat(fd, &stat_buf) < 0) {
- tst_brkm(TFAIL, cleanup, "fstat(2) of %s failed"
- " after 2nd truncate, error:%d",
- TESTFILE, errno);
- }
- stat_buf.st_mode &= ~S_IFREG;
- file_length2 = stat_buf.st_size;
-
- /*
- * Set the file pointer of testfile to the
- * offset TRUNC_LEN1 of testfile.
- */
- if (lseek(fd, TRUNC_LEN1, SEEK_SET) < 0) {
- tst_brkm(TFAIL, cleanup, "lseek(2) on %s failed"
- " after 2nd ftruncate, error:%d",
- TESTFILE, errno);
- }
-
- /* Read the testfile contents till EOF */
- while((rbytes = read(fd, tst_buff,
- sizeof(tst_buff))) > 0) {
- for (i = 0; i < rbytes; i++) {
- if (tst_buff[i] != 0) {
- err_flag++;
- }
- }
- }
-
- /*
- * Check for expected size of testfile after
- * issuing ftruncate(2) on it.
- */
- if ((file_length1 != TRUNC_LEN1) ||
- (file_length2 != TRUNC_LEN2) ||
- (read_len != TRUNC_LEN1) ||
- (err_flag != 0)) {
- tst_resm(TFAIL, "Functionality of ftruncate(2) "
- "on %s Failed", TESTFILE);
- } else {
- tst_resm(TPASS, "Functionality of ftruncate(2) "
- "on %s successful", TESTFILE);
- }
- } else {
- tst_resm(TPASS, "call succeeded");
- }
- } /* End for TEST_LOOPING */
-
- /* Call cleanup() to undo setup done for the test. */
- cleanup();
-
- /*NOTREACHED*/
-} /* End main */
-
-/*
- * void
- * setup() - performs all ONE TIME setup for this test.
- * Create a temporary directory and change directory to it.
- * Create a test file under temporary directory and write some
- * data into it.
- */
-void
-setup()
-{
- int i; /* counter variable */
- int wbytes; /* bytes written to testfile */
- int write_len = 0; /* total no. of bytes written to testfile */
-
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Fill the test buffer with the known data */
- for (i = 0; i < BUF_SIZE; i++) {
- tst_buff[i] = 'a';
- }
- /* open a file for reading/writing */
- if ((fd = open(TESTFILE, O_RDWR|O_CREAT, FILE_MODE)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR|O_CREAT, %o) Failed, errno=%d : %s",
- TESTFILE, FILE_MODE, errno, strerror(errno));
- }
-
- /* Write to the file 1k data from the buffer */
- while (write_len < FILE_SIZE) {
- if ((wbytes = write(fd, tst_buff, sizeof(tst_buff))) <= 0) {
- tst_brkm(TBROK, cleanup,
- "write(2) on %s Failed, errno=%d : %s",
- TESTFILE, errno, strerror(errno));
- } else {
- write_len += wbytes;
- }
- }
-} /* End setup() */
-
-/*
- * void
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- * Close the testfile.
- * Remove the test directory and testfile created in the setup.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- */
- TEST_CLEANUP;
-
- /* Close the testfile after writing data into it */
- if (close(fd) == -1) {
- tst_brkm(TFAIL, NULL, "close(%s) Failed, errno=%d : %s",
- TESTFILE, errno, strerror(errno));
- }
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/ftruncate03.c b/winsup/testsuite/winsup.api/ltp/ftruncate03.c
deleted file mode 100644
index 279b4e88f..000000000
--- a/winsup/testsuite/winsup.api/ltp/ftruncate03.c
+++ /dev/null
@@ -1,324 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * Test Name: ftruncate03
- *
- * Test Description:
- * Verify that,
- * 1) ftruncate(2) returns -1 and sets errno to EINVAL if the specified
- * truncate length is less than 0.
- * 2) ftruncate(2) returns -1 and sets errno to EBADF if the file descriptor
- * of the specified file is not valid.
- *
- * Expected Result:
- * ftruncate() should fail with return value -1 and set expected errno.
- *
- * Algorithm:
- * Setup:
- * Setup signal handling.
- * Create temporary directory.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * if errno set == expected errno
- * Issue sys call fails with expected return value and errno.
- * Otherwise,
- * Issue sys call fails with unexpected errno.
- * Otherwise,
- * Issue sys call returns unexpected value.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- * Delete the temporary directory(s)/file(s) created.
- *
- * Usage: <for command-line>
- * ftruncate03 [-c n] [-e] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -e : Turn on errno logging.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS:
- * This test should be executed by 'non-super-user' only.
- */
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/fcntl.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-
-#include "test.h"
-#include "usctest.h"
-
-#define TEST_FILE1 "test_file1" /* file under test */
-#define TEST_FILE2 "test_file2" /* file under test */
-#define FILE_MODE S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH
-#define BUF_SIZE 256 /* buffer size */
-#define FILE_SIZE 1024 /* test file size */
-
-int no_setup();
-int setup1(); /* setup function to test chmod for EBADF */
-int setup2(); /* setup function to test chmod for EINVAL */
-
-int fd1; /* File descriptor for testfile1 */
-int fd2; /* File descriptor for testfile2 */
-
-struct test_case_t { /* test case struct. to hold ref. test cond's*/
- int fd;
- const char *desc;
- int exp_errno;
- int len;
- int (*setupfunc)();
-} Test_cases[] = {
- { 1, "Length argument is -ve", EINVAL, -1, setup1 },
- { 2, "File descriptor is not valid", EBADF, 256, setup2 },
- { 0, NULL, 0, 0, no_setup }
-};
-
-const char *TCID="ftruncate03"; /* Test program identifier. */
-int TST_TOTAL=2; /* Total number of test conditions */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-int exp_enos[]={EINVAL, EBADF, 0};
-
-void setup(); /* Main setup function for the test */
-void cleanup(void) __attribute__((noreturn)); /* Main cleanup function for the test */
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- const char *test_desc; /* test specific error message */
- int fildes; /* File descriptor of testfile */
- off_t trunc_len; /* truncate length */
- int ind;
-
- /* Parse standard options given to run the test. */
- msg = parse_opts(ac, av, (option_t *) NULL, NULL);
- if (msg != (char *) NULL) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /*
- * Perform global setup for test to call individual test specific
- * setup functions.
- */
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /* Check looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- /* Reset Tst_count in case we are looping. */
- Tst_count = 0;
-
- for (ind = 0; Test_cases[ind].desc != NULL; ind++) {
- fildes = Test_cases[ind].fd;
- test_desc = Test_cases[ind].desc;
- trunc_len = Test_cases[ind].len;
-
- if (fildes == 1) {
- fildes = fd1;
- } else {
- fildes = fd2;
- }
-
- /*
- * Call ftruncate(2) to test different test conditions.
- * verify that it fails with return code -1 and sets
- * appropriate errno.
- */
- TEST(ftruncate(fildes, trunc_len));
-
- /* check return code of ftruncate(2) */
- if (TEST_RETURN == -1) {
- TEST_ERROR_LOG(TEST_ERRNO);
- if (TEST_ERRNO == Test_cases[ind].exp_errno) {
- tst_resm(TPASS, "ftruncate() fails, %s,"
- " errno=%d", test_desc,
- TEST_ERRNO);
- } else {
- tst_resm(TFAIL, "ftruncate() fails, %s,"
- " errno=%d, expected errno:%d",
- test_desc, TEST_ERRNO,
- Test_cases[ind].exp_errno);
- }
- } else {
- tst_resm(TFAIL, "ftruncate() returned %d, "
- "expected -1, errno:%d", TEST_RETURN,
- Test_cases[ind].exp_errno);
- }
- } /* End of TEST CASE LOOPING. */
- } /* End for TEST_LOOPING */
-
- /* Call cleanup() to undo setup done for the test. */
- cleanup();
-
- /*NOTREACHED*/
-} /* End main */
-
-/*
- * void
- * setup() - performs all ONE TIME setup for this test.
- * Create a temporary directory and change directory to it.
- * Fill the test buffer with some date used to fill test file(s).
- * Call individual test specific setup functions.
- */
-void
-setup()
-{
- int ind;
-
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Check that the test process id is not root/super-user */
- if (geteuid() == 0) {
- tst_brkm(TBROK, NULL, "Must be non-root/super for this test!");
- tst_exit();
- }
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* call individual setup functions */
- for (ind = 0; Test_cases[ind].desc != NULL; ind++) {
- Test_cases[ind].setupfunc();
- }
-} /* End of setup */
-
-/*
- * int
- * setup1() - setup function for a test condition for which ftruncate(2)
- * returns -1 and sets errno to EINVAL.
- * Create a test file and open it for writing only.
- */
-int
-setup1()
-{
- /* Open the testfile in write-only mode */
- if ((fd1 = open(TEST_FILE1, O_WRONLY|O_CREAT, 0644)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_WRONLY) Failed, errno=%d : %s",
- TEST_FILE1, errno, strerror(errno));
- }
- return 0;
-} /* End setup1() */
-
-/*
- * int
- * setup2() - setup function for a test condition for which ftruncate(2)
- * returns -1 and sets errno to EBADF.
- * Create a test file and open it for reading/writing, and fill the
- * testfile with the contents of test buffer.
- * Close the test file.
- *
- */
-int
-setup2()
-{
- int c, i, c_total = 0;
- char tst_buff[BUF_SIZE]; /* buffer to hold testfile contents */
-
- /* Fill the test buffer with the known data */
- for (i = 0; i < BUF_SIZE; i++) {
- tst_buff[i] = 'a';
- }
-
- /* open a testfile for reading/writing */
- if ((fd2 = open(TEST_FILE2, O_RDWR|O_CREAT, FILE_MODE)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR|O_CREAT, %o) Failed, errno=%d : %s",
- TEST_FILE2, FILE_MODE, errno, strerror(errno));
- }
-
- /* Write to the file 1k data from the buffer */
- while (c_total < FILE_SIZE) {
- if ((c = write(fd2, tst_buff, sizeof(tst_buff))) <= 0) {
- tst_brkm(TBROK, cleanup,
- "write(2) on %s Failed, errno=%d : %s",
- TEST_FILE2, errno, strerror(errno));
- } else {
- c_total += c;
- }
- }
-
- /* Close the testfile after writing data into it */
- if (close(fd2) == -1) {
- tst_brkm(TBROK, cleanup,
- "close(%s) Failed, errno=%d : %s",
- TEST_FILE2, errno, strerror(errno));
- }
- return 0;
-} /* End of setup2 */
-
-/*
- * int
- * no_setup() - This function just returns 0.
- */
-int
-no_setup()
-{
- return 0;
-}
-
-/*
- * void
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- * Close the temporary file.
- * Remove the test directory and testfile created in the setup.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- */
- TEST_CLEANUP;
-
- /* Close the testfile after opening it read-only in setup1 */
- if (close(fd1) == -1) {
- tst_brkm(TFAIL, NULL,
- "close(%s) Failed, errno=%d : %s",
- TEST_FILE1, errno, strerror(errno));
- }
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/getegid01.c b/winsup/testsuite/winsup.api/ltp/getegid01.c
deleted file mode 100644
index 942201067..000000000
--- a/winsup/testsuite/winsup.api/ltp/getegid01.c
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : getegid01
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for getegid(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) getegid(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the getegid(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * getegid(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-
-#include <sys/types.h>
-
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-
-const char *TCID="getegid01"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0}; /* must be a 0 terminated list */
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- ;
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
-
- /*
- * TEST CASE:
- * Get effective group id.
- */
- ;
-
- /* Call getegid(2) */
- TEST(getegid( ));
-
- /* check return code */
- if ( TEST_RETURN < 0 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "getegid - Get effective group id. failed, errno=%d : %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- continue; /* next loop for MTKERNEL */
- }
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "getegid - Get effective group id. returned %d", TEST_RETURN);
- }
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
-
-
diff --git a/winsup/testsuite/winsup.api/ltp/geteuid01.c b/winsup/testsuite/winsup.api/ltp/geteuid01.c
deleted file mode 100644
index 82a681ec5..000000000
--- a/winsup/testsuite/winsup.api/ltp/geteuid01.c
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : geteuid01
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for geteuid(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) geteuid(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the geteuid(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * geteuid(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-
-#include <sys/types.h>
-
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-
-const char *TCID="geteuid01"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0}; /* must be a 0 terminated list */
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- ;
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
-
- /*
- * TEST CASE:
- * Get effective user id.
- */
- ;
-
- /* Call geteuid(2) */
- TEST(geteuid( ));
-
- /* check return code */
- if ( TEST_RETURN < 0 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "geteuid - Get effective user id. failed, errno=%d : %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- continue; /* next loop for MTKERNEL */
- }
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "geteuid - Get effective user id. returned %d", TEST_RETURN);
- }
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
-
-
diff --git a/winsup/testsuite/winsup.api/ltp/getgid01.c b/winsup/testsuite/winsup.api/ltp/getgid01.c
deleted file mode 100644
index e5b138c8a..000000000
--- a/winsup/testsuite/winsup.api/ltp/getgid01.c
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : getgid01
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for getgid(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) getgid(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the getgid(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * getgid(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <sys/types.h>
-#include <sys/fcntl.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-
-const char *TCID="getgid01"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0};
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call getgid(2)
- */
- TEST(getgid());
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "getgid() Failed, errno=%d : %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "getgid() returned %d", TEST_RETURN);
- }
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/getgid02.c b/winsup/testsuite/winsup.api/ltp/getgid02.c
deleted file mode 100644
index 5efbda521..000000000
--- a/winsup/testsuite/winsup.api/ltp/getgid02.c
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * NAME
- * getgid02.c
- *
- * DESCRIPTION
- * Testcase to check the basic functionality of getegid().
- *
- * ALGORITHM
- * call setup
- * loop if that option was specified
- * Execute getegid() call using TEST macro
- * if not expected value
- * break remaining tests and cleanup
- * if STD_FUNCTIONAL_TEST
- * Execute geteuid() call
- * Execute getpwduid() call
- * if the passwd entry is NULL
- * break the remaining tests and cleanup
- * else if pwent->pw_gid != TEST_RETURN
- * print failure message
- * else
- * print pass message
- * else
- * print pass message
- * call cleanup
- *
- * USAGE: <for command-line>
- * getgid02 [-c n] [-f] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -f : Turn off functionality Testing.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS
- * none
- */
-
-#include <pwd.h>
-#include <errno.h>
-
-#include "test.h"
-#include "usctest.h"
-
-void cleanup(void) __attribute__((noreturn));
-void setup(void);
-
-const char *TCID= "getgid02";
-int TST_TOTAL = 1;
-extern int Tst_count;
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- int euid;
- struct passwd *pwent;
-
- /* parse standard options */
- if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
- /*NOTREACHED*/
- }
-
- setup(); /* global setup */
-
- /* The following loop checks looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping */
- Tst_count = 0;
-
- TEST(getegid());
-
- if (TEST_RETURN < 0) {
- tst_brkm(TBROK, cleanup, "This should never happen");
- }
-
- if (STD_FUNCTIONAL_TEST) {
- euid = geteuid();
-
- pwent = getpwuid(euid);
-
- if (pwent == NULL) {
- tst_brkm(TBROK, cleanup, "geteuid() returned "
- "unexpected value %d", euid);
- } else {
- if (pwent->pw_gid != TEST_RETURN) {
- tst_resm(TFAIL, "getegid() return value"
- " %d unexpected - expected %d",
- TEST_RETURN, pwent->pw_gid);
- } else {
- tst_resm(TPASS, "effective group id %d "
- "is correct", TEST_RETURN);
- }
- }
- } else {
- tst_resm(TPASS, "call succeeded");
- }
- }
- cleanup();
-
- /*NOTREACHED*/
-}
-
-
-/*
- * setup() - performs all ONE TIME setup for this test
- */
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-}
-
-/*
- * cleanup() - performs all the ONE TIME cleanup for this test at completion
- * or premature exit.
- */
-void
-cleanup()
-{
- /*
- * print timing status if that option was specified.
- * print errno log if that option was specified
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/getgid03.c b/winsup/testsuite/winsup.api/ltp/getgid03.c
deleted file mode 100644
index ef0eaea14..000000000
--- a/winsup/testsuite/winsup.api/ltp/getgid03.c
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * NAME
- * getgid01.c
- *
- * DESCRIPTION
- * Testcase to check the basic functionality of getgid().
- *
- * ALGORITHM
- * call setup
- * loop if that option was specified
- * Execute getgid() call using TEST macro
- * if not expected value
- * break remaining tests and cleanup
- * if STD_FUNCTIONAL_TEST
- * Execute getuid() call
- * Execute getpwduid() call
- * if the passwd entry is NULL
- * break the remaining tests and cleanup
- * else if pwent->pw_gid != TEST_RETURN
- * print failure message
- * else
- * print pass message
- * else
- * print pass message
- * call cleanup
- *
- * USAGE: <for command-line>
- * getgid01 [-c n] [-f] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -f : Turn off functionality Testing.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS
- * none
- */
-
-#include <pwd.h>
-#include <errno.h>
-
-#include "test.h"
-#include "usctest.h"
-
-void cleanup(void) __attribute__((noreturn));
-void setup(void);
-
-const char *TCID= "getgid01";
-int TST_TOTAL = 1;
-extern int Tst_count;
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- int uid;
- struct passwd *pwent;
-
- /* parse standard options */
- if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
- /*NOTREACHED*/
- }
-
- setup(); /* global setup */
-
- /* The following loop checks looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping */
- Tst_count = 0;
-
- TEST(getgid());
-
- if (TEST_RETURN < 0) {
- tst_brkm(TBROK, cleanup, "This should never happen");
- }
-
- if (STD_FUNCTIONAL_TEST) {
- uid = getuid();
- pwent = getpwuid(uid);
-
- if (pwent == NULL) {
- tst_brkm(TBROK, cleanup, "getuid() returned "
- "unexpected value %d", uid);
- } else {
- if (pwent->pw_gid != TEST_RETURN) {
- tst_resm(TFAIL, "getgid() return value "
- "%d unexpected - expected %d",
- TEST_RETURN, pwent->pw_gid);
- } else {
- tst_resm(TPASS, "group id %d returned "
- "correctly", TEST_RETURN);
- }
- }
- } else {
- tst_resm(TPASS, "call succeeded");
- }
- }
- cleanup();
-
- /*NOTREACHED*/
-}
-
-
-/*
- * setup() - performs all ONE TIME setup for this test
- */
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-}
-
-/*
- * cleanup() - performs all the ONE TIME cleanup for this test at completion
- * or premature exit.
- */
-void
-cleanup()
-{
- /*
- * print timing status if that option was specified.
- * print errno log if that option was specified
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/getgroups01.c b/winsup/testsuite/winsup.api/ltp/getgroups01.c
deleted file mode 100644
index db9f942f6..000000000
--- a/winsup/testsuite/winsup.api/ltp/getgroups01.c
+++ /dev/null
@@ -1,314 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/***********************************************************************
-TEST IDENTIFIER: getgroups01 : Getgroups system call critical test
-
-PARENT DOCUMENT: ggrtds01: Getgroups system call test design spec
-
-AUTHOR: Barrie Kletscher
- Rewrote : 11-92 by Richard Logan
-
-CO-PILOT: Dave Baumgartner
-
-TEST ITEMS:
- 1. Check to see if getgroups(-1, gidset) fails and sets errno to EINVAL
- 2. Check to see if getgroups(0, gidset) does not return -1 and gidset is
- not modified.
- 3. Check to see if getgroups(x, gigset) fails and sets errno to EINVAL,
- where x is one less then what is returned by getgroups(0, gidset).
- 4. Check to see if getgroups() succeeds and gidset contains
- group id returned from getgid().
-
-INPUT SPECIFICATIONS:
- NONE
-
-OUTPUT SPECIFICATIONS:
- Standard tst_res output format
-
-ENVIRONMENTAL NEEDS:
- NONE.
-
-SPECIAL PROCEDURAL REQUIREMENTS:
- None
-
-INTERCASE DEPENDENCIES:
- Test case #3 depends on test case #2.
-
-DETAILED DESCRIPTION:
- Set up the signal handling capabilities.
- execute tests
- exit
-
-BUGS:
- None known.
-
-************************************************************/
-
-#include <signal.h>
-#include <string.h>
-#include <errno.h>
-#include <sys/param.h>
-#include "test.h"
-#include "usctest.h"
-
-void setup();
-void cleanup(void) __attribute__((noreturn));
-
-const char *TCID="getgroups01"; /* Test program identifier. */
-int TST_TOTAL=4; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-/***********************************************************************
- * MAIN
- ***********************************************************************/
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *ptr; /* message returned from parse_opts */
-
- int i, /* counter */
- group, /* return value from Getgid() call */
- entries; /* number of group entries */
-
- gid_t gidset[NGROUPS]; /* storage for all group ids */
- gid_t cmpset[NGROUPS];
- int ret;
- int ret2;
- int errors = 0;
- char msg[500];
-
- /***************************************************************
- * parse standard options, and exit if there is an error
- ***************************************************************/
- if ( (ptr=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL ) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", ptr);
- tst_exit();
- }
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
-
- /*
- * Check to see if getgroups() fails on erraneous condition.
- */
- TEST( getgroups(-1,gidset) );
-
- if((ret=TEST_RETURN) != -1) {
- sprintf(msg,
- "getgroups(-1,gidset) returned %d, expected -1 and errno = EINVAL",
- ret);
- tst_resm(TFAIL,msg);
- errors++;
- }
- else if ( STD_FUNCTIONAL_TEST ) {
- if(errno != EINVAL) {
- sprintf(msg,
- "getgroups(-1,gidset) returned %d, errno = %d, expected errno %d (EINVAL)",
- ret, errno, EINVAL);
- tst_resm(TFAIL,msg);
- errors++;
- }
- else {
- sprintf(msg,
- "getgroups(-1,gidset) returned %d and error = %d (EINVAL) as expected",
- ret, errno);
- tst_resm(TPASS, msg);
- }
- }
-
- /*
- * Check that if ngrps is zero that the number of groups is return and
- * the the gidset array is not modified.
- * This is a POSIX special case.
- */
-
- memset(gidset, 052, NGROUPS);
- memset(cmpset, 052, NGROUPS);
-
- TEST( getgroups(0,gidset) );
- if((ret=TEST_RETURN) < 0) {
- sprintf(msg,
- "getgroups(0,gidset) returned %d with errno = %d, expected num gids with no change to gidset",
- ret, errno);
- tst_resm(TFAIL,msg);
- errors++;
- }
- else if ( STD_FUNCTIONAL_TEST ) {
- /*
- * check that gidset was unchanged
- */
- if ( memcmp(cmpset, gidset, NGROUPS) != 0 ) {
- sprintf(msg,
- "getgroups(0,gidset) returned %d, the gidset array was modified",
- ret);
- tst_resm(TFAIL,msg);
- errors++;
- }
- else {
- sprintf(msg,
- "getgroups(0,gidset) returned %d, the gidset array not was modified",
- ret);
- tst_resm(TPASS, msg);
- }
- }
-
- /*
- * Check to see that is -1 is returned and errno is set to EINVAL when
- * ngroups is not big enough to hold all groups.
- */
-
- if ( ret <= 1 ) {
- sprintf(msg, "getgroups(0,gidset) returned %d, Unable to test that\nusing ngrps >=1 but less than number of grps", ret);
- tst_resm(TCONF, msg);
- errors++;
- }
- else {
- TEST( getgroups(ret-1, gidset) );
- if ((ret2 = TEST_RETURN) == -1 ) {
- if ( STD_FUNCTIONAL_TEST ) {
- if ( errno != EINVAL ) {
- sprintf(msg,
- "getgroups(%d, gidset) returned -1, but not errno %d (EINVAL) but %d",
- ret-1, EINVAL, errno);
- tst_resm(TFAIL, msg);
- errors++;
- }
- else {
- sprintf(msg,
- "getgroups(%d, gidset) returned -1, and errno %d (EINVAL) when %d grps",
- ret-1, errno, ret);
- tst_resm(TPASS, msg);
- }
- }
- }
- else {
- sprintf(msg,
- "getgroups(%d, gidset) returned %d, expected -1 and errno EINVAL.",
- ret-1, ret2);
- tst_resm(TFAIL, msg);
- errors++;
- }
- }
-
- /*
- * Check to see if getgroups() succeeds and contains getgid's gid.
- */
-
- TEST( getgroups(NGROUPS,gidset) );
- if((entries = TEST_RETURN) == -1) {
- sprintf(msg, "getgroups(NGROUPS,gidset) returned -1 and errno = %d", errno);
- tst_resm(TFAIL, msg);
- errors++;
- }
- else if ( STD_FUNCTIONAL_TEST ) {
-
- /*
- * Check to see if getgroups() contains getgid().
- */
-
- group = getgid();
-
- for(i = 0; i < entries; i++)
- {
- if(gidset[i] == group)
- {
- sprintf(msg,
- "getgroups(NGROUPS,gidset) ret %d contains gid %d (from getgid)",
- entries, group);
- tst_resm(TPASS, msg);
- break;
- }
- }
-
- if( i == entries ) {
- sprintf(msg,
- "getgroups(NGROUPS,gidset) ret %d, does not contain gid %d (from getgid)",
- entries, group);
- tst_resm(TFAIL,msg);
- errors++;
- }
- }
-
- }
- cleanup();
-
- return 0;
-} /* end main() */
-
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-
-} /* End cleanup() */
-
diff --git a/winsup/testsuite/winsup.api/ltp/getgroups02.c b/winsup/testsuite/winsup.api/ltp/getgroups02.c
deleted file mode 100644
index e05258935..000000000
--- a/winsup/testsuite/winsup.api/ltp/getgroups02.c
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : getgroups02
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for getgroups(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) getgroups(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the getgroups(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * getgroups(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/fcntl.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-
-const char *TCID="getgroups02"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0};
-
-/* define array size for gids */
-#define GID_ARRAY_SIZE 100
-
-gid_t gidset[GID_ARRAY_SIZE]; /* array of gids */
-
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call getgroups(2)
- */
- TEST(getgroups(GID_ARRAY_SIZE, gidset));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "getgroups() Failed, errno=%d : %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "getgroups() returned %d", TEST_RETURN);
- }
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/gethostid01.c b/winsup/testsuite/winsup.api/ltp/gethostid01.c
deleted file mode 100644
index ebb6d1724..000000000
--- a/winsup/testsuite/winsup.api/ltp/gethostid01.c
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : gethostid01
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for gethostid(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) gethostid(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the gethostid(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * gethostid(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-
-const char *TCID="gethostid01"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0}; /* must be a 0 terminated list */
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- ;
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
-
- /*
- * TEST CASE:
- * Get host name
- */
- ;
-
- /* Call gethostid(2) */
- TEST(gethostid( ));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "gethostid - Get host name failed, errno=%d : %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- continue; /* next loop for MTKERNEL */
- }
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "gethostid - Get host name returned %d", TEST_RETURN);
- }
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
-
-
diff --git a/winsup/testsuite/winsup.api/ltp/gethostname01.c b/winsup/testsuite/winsup.api/ltp/gethostname01.c
deleted file mode 100644
index 0e765bfad..000000000
--- a/winsup/testsuite/winsup.api/ltp/gethostname01.c
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : gethostname01
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for gethostname(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) gethostname(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the gethostname(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * gethostname(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-
-
-
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-
-const char *TCID="gethostname01";/* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0}; /* must be a 0 terminated list */
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- char hname[100]; /* host name */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
-
- /*
- * TEST CASE:
- * Get host name
- */
- ;
-
- /* Call gethostname(2) */
- TEST(gethostname(hname, sizeof(hname) ));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "gethostname - Get host name failed, errno=%d : %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- continue; /* next loop for MTKERNEL */
- }
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "gethostname - Get host name returned %d", TEST_RETURN);
- }
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
-
-
diff --git a/winsup/testsuite/winsup.api/ltp/getpgid01.c b/winsup/testsuite/winsup.api/ltp/getpgid01.c
deleted file mode 100644
index 88907f413..000000000
--- a/winsup/testsuite/winsup.api/ltp/getpgid01.c
+++ /dev/null
@@ -1,236 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * NAME
- * getpgid01.c
- *
- * DESCRIPTION
- * Testcase to check the basic functionality of getpgid().
- *
- * ALGORITHM
- * block1: Does getpgid(0), and checks for error.
- * block2: Does getpgid(getpid()) and checks for error.
- * block3: Does getpgid(getppid()) and checks for error.
- * block4: Verifies that getpgid(getpgid(0)) == getpgid(0).
- * block5: Does getpgid(1) and checks for error.
- *
- * USAGE
- * getpgid01
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS
- * Expects that there are no EPERM limitations on getting the
- * process group ID from proc 1 (init).
- */
-
-#include <sys/types.h>
-#include <errno.h>
-#include <sys/wait.h>
-#include <test.h>
-#include <usctest.h>
-
-void setup(void);
-void cleanup(void) __attribute__((noreturn));
-
-const char *TCID = "getpgid01";
-int TST_TOTAL = 1;
-extern int Tst_count;
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned by parse_opts */
-
- register int pgid_0, pgid_1;
- register int my_pid, my_ppid;
- int ex_stat, fail = 0;
-
- /* parse standard options */
- if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
- }
-
- setup();
-
- /* check looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- /* reset Tst_count in case we are looping */
- Tst_count = 0;
-
- if ((pgid_0 = fork()) < 0) {
- tst_brkm(TBROK, cleanup, "fork() failed");
- }
- if (pgid_0 > 0) { /* parent */
- /*
- * parent process waits for child to exit, and then
- * exits itself.
- */
- while ((pgid_0 = wait(&ex_stat)) > 0);
-
- if (WEXITSTATUS(ex_stat) == 0) {
- tst_resm(TINFO, "%s PASSED", TCID);
- } else {
- tst_resm(TINFO, "%s FAILED", TCID);
- }
-
- /* let the child carry on */
- exit(0);
- }
-
- /* child */
- tst_resm(TINFO, "Enter block 1");
- fail = 0;
- if ((pgid_0 = getpgid(0)) < 0) {
- perror("getpgid");
- tst_resm(TFAIL, "getpgid(0) failed");
- fail = 1;
- }
-
- if (fail) {
- tst_resm(TINFO, "Test block 1: getpgid(0) FAILED");
- } else {
- tst_resm(TPASS, "Test block 1: getpgid(0) PASSED");
- }
- tst_resm(TINFO, "Exit block 1");
-
- tst_resm(TINFO, "Enter block 2");
- fail = 0;
-
- my_pid = getpid();
- if ((pgid_1 = getpgid(my_pid)) < 0) {
- perror("getpgid");
- tst_resm(TFAIL, "getpgid(my_pid=%d) failed", my_pid);
- tst_exit();
- }
- if (pgid_0 != pgid_1) {
- tst_resm(TFAIL, "getpgid(my_pid=%d) != getpgid(0) "
- "[%d != %d]", my_pid, pgid_1, pgid_0);
- fail = 1;
- }
- if (fail) {
- tst_resm(TINFO, "Test block 2: getpgid(getpid()) "
- "FAILED");
- } else {
- tst_resm(TPASS, "Test blcok 2: getpgid(getpid()) "
- "PASSED");
- }
- tst_resm(TINFO, "Exit block 2");
-
- tst_resm(TINFO, "Enter block 3");
- fail = 0;
-
- my_ppid = getppid();
- if ((pgid_1 = getpgid(my_ppid)) < 0) {
- perror("getpgid");
- tst_resm(TFAIL, "getpgid(my_ppid=%d) failed",
- my_ppid);
- tst_exit();
- }
- if (pgid_0 != pgid_1) {
- tst_resm(TFAIL, "getpgid(my_ppid=%d) != getpgid(0) "
- "[%d != %d]", my_ppid, pgid_1, pgid_0);
- fail = 1;
- }
-
- if (fail) {
- tst_resm(TINFO, "Test block 3: getpgid(getppid()) "
- "FAILED");
- } else {
- tst_resm(TPASS, "Test block 3: getpgid(getppid()) "
- "PASSED");
- }
- tst_resm(TINFO, "Exit block 3");
-
- tst_resm(TINFO, "Enter block 4");
- fail = 0;
-
- if ((pgid_1 = getpgid(pgid_0)) < 0) {
- perror("getpgid");
- tst_resm(TFAIL, "getpgid(my_pgid=%d) failed", pgid_0);
- tst_exit();
- }
- if (pgid_0 != pgid_1) {
- tst_resm(TFAIL, "getpgid(my_pgid=%d) != getpgid(0) "
- "[%d != %d]", pgid_0, pgid_1, pgid_0);
- fail = 1;
- }
-
- if (fail) {
- tst_resm(TINFO, "Test block 4: getpgid(1) FAILED");
- } else {
- tst_resm(TPASS, "Test block 4: getpgid(1) PASSED");
- }
- tst_resm(TINFO, "Exit block 4");
-#ifndef __CYGWIN__
-block5:
- tst_resm(TINFO, "Enter block 5");
- fail = 0;
-
- if (getpgid(1) < 0) {
- perror("getpgid");
- tst_resm(TFAIL, "getpgid(1) failed");
- fail = 1;
- }
-
- if (fail) {
- tst_resm(TINFO, "Test block 5: getpgid(1) FAILED");
- } else {
- tst_resm(TPASS, "Test block 5: getpgid(1) PASSED");
- }
- tst_resm(TINFO, "Exit block 5");
-#endif
- }
- cleanup();
-}
-
-/*
- * setup() - performs all ONE TIME setup for this test.
- */
-void
-setup()
-{
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-}
-
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-}
-
diff --git a/winsup/testsuite/winsup.api/ltp/getpgid02.c b/winsup/testsuite/winsup.api/ltp/getpgid02.c
deleted file mode 100644
index f6eaec6f6..000000000
--- a/winsup/testsuite/winsup.api/ltp/getpgid02.c
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * NAME
- * getpgid02.c
- *
- * DESCRIPTION
- * Testcase to check the basic functionality of getpgid().
- *
- * ALGORITHM
- * test 1: Does getpgid(-99) and expects ESRCH.
- * test 2: Searches an unused pid and expects ESRCH.
- *
- * USAGE: <for command-line>
- * getpgid02 [-c n] [-e] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -e : Turn on errno logging.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS
- * none
- */
-
-#include <sys/types.h>
-#include <errno.h>
-#include <sys/wait.h>
-#include <test.h>
-#include <usctest.h>
-
-void setup(void);
-void cleanup(void) __attribute__((noreturn));
-
-const char *TCID = "getpgid01";
-int TST_TOTAL = 2;
-extern int Tst_count;
-
-int pgid_0, pgid_1;
-#define BADPID -99
-
-int exp_enos[]={ESRCH, 0};
-
-struct test_case_t {
- int *id;
- int error;
-} TC[] = {
- /* The pid value is negative */
- {&pgid_0, ESRCH},
-
- /* The pid value does not match any process */
- {&pgid_1, ESRCH}
-};
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- int i;
- const char *msg; /* message returned by parse_opts */
-
- /* parse standard options */
- if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
- }
-
- setup();
-
- /* set up the expected errnos */
- TEST_EXP_ENOS(exp_enos);
-
- /* check looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- /* reset Tst_count in case we are looping */
- Tst_count = 0;
-
-
- /* loop through the test cases */
- for (i = 0; i < TST_TOTAL; i++) {
-
- TEST(getpgid(*TC[i].id));
-
- if (TEST_RETURN != -1) {
- tst_resm(TFAIL, "call succeeded unexpectedly");
- continue;
- }
-
- TEST_ERROR_LOG(TEST_ERRNO);
-
- if (TEST_ERRNO == TC[i].error) {
- tst_resm(TPASS, "expected failure - "
- "errno = %d : %s", TEST_ERRNO,
- strerror(TEST_ERRNO));
- } else {
- tst_resm(TFAIL, "unexpected error - %d : %s - "
- "expected %d", TEST_ERRNO,
- strerror(TEST_ERRNO), TC[i].error);
- }
- }
- }
- cleanup();
-
- /*NOTREACHED*/
-}
-
-/*
- * setup() - performs all ONE TIME setup for this test.
- */
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- pgid_0 = BADPID;
-
- /*
- * Find a pid that isn't currently being used. Start
- * at 'our pid - 1' and go backwards until we find one.
- * In this way, we can be reasonably sure that the pid
- * we find won't be reused for a while as new pids are
- * allocated counting up to PID_MAX.
- */
- for (pgid_1 = getpid() - 1; --pgid_1 > 0; ) {
- if (kill(pgid_1, 0) < 0 && errno == ESRCH) {
- break;
- }
- }
-}
-
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-}
-
diff --git a/winsup/testsuite/winsup.api/ltp/getpgrp01.c b/winsup/testsuite/winsup.api/ltp/getpgrp01.c
deleted file mode 100644
index 6997be264..000000000
--- a/winsup/testsuite/winsup.api/ltp/getpgrp01.c
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : getpgrp01
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for getpgrp(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) getpgrp(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the getpgrp(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * getpgrp(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <sys/types.h>
-#include <sys/fcntl.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-
-const char *TCID="getpgrp01"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0};
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call getpgrp(2)
- */
- TEST(getpgrp());
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "getpgrp() Failed, errno=%d : %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "getpgrp() returned %d", TEST_RETURN);
- }
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/getpid01.c b/winsup/testsuite/winsup.api/ltp/getpid01.c
deleted file mode 100644
index df8197d28..000000000
--- a/winsup/testsuite/winsup.api/ltp/getpid01.c
+++ /dev/null
@@ -1,217 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : getpid01
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for getpid(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) getpid(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the getpid(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * getpid(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-
-const char *TCID="getpid01"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0};
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call getpid(2)
- */
- TEST(getpid());
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "getpid() Failed, errno=%d : %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "getpid() returned %d", TEST_RETURN);
- }
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/getpid02.c b/winsup/testsuite/winsup.api/ltp/getpid02.c
deleted file mode 100644
index 06d80b38d..000000000
--- a/winsup/testsuite/winsup.api/ltp/getpid02.c
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * Test Name: getpid01
- *
- * Test Description:
- * Verify that getpid() system call gets the process ID of the of the
- * calling process.
- *
- * Expected Result:
- * getpid() should return pid of the process on success.
- *
- * Algorithm:
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise,
- * Verify the Functionality of system call
- * if successful,
- * Issue Functionality-Pass message.
- * Otherwise,
- * Issue Functionality-Fail message.
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- * Usage: <for command-line>
- * getpid01 [-c n] [-f] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -f : Turn off functionality Testing.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS:
- * None.
- */
-
-#include <sys/types.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include <sys/wait.h>
-
-#include "test.h"
-#include "usctest.h"
-
-void setup(); /* Main setup function of test */
-void cleanup(void) __attribute__((noreturn)); /* cleanup function for the test */
-
-const char *TCID="getpid01"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- pid_t proc_id; /* process id of the test process */
- pid_t pid; /* process id of the child process */
- pid_t pproc_id; /* parent process id */
- int status; /* exit status of child process */
-
- /* Parse standard options given to run the test. */
- msg = parse_opts(ac, av, (option_t *) NULL, NULL);
- if (msg != (char *) NULL) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /* Perform global setup for test */
- setup();
-
- /* Check looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- /* Reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Invoke getpid() to get the process id of
- * the test process.
- */
- TEST(getpid());
-
- /* Save the process id returned by getpid() */
- proc_id = TEST_RETURN;
-
- /*
- * Perform functional verification if test
- * executed without (-f) option.
- */
- if (STD_FUNCTIONAL_TEST) {
- /* Fork a child now */
- if ((pid = fork()) < 0) {
- tst_resm(TFAIL, "fork() failed to create child,"
- " error=%d", TEST_ERRNO);
- } else if (pid == 0) { /* Child process */
- /* Get the parent process id */
- pproc_id = getppid();
-
- /* Verify if the two process IDs match */
- if (pproc_id != proc_id) {
- exit(1);
- }
- exit(0);
- } else { /* parent process */
- wait(&status);
-
- /* Check exit status of child */
- if (WEXITSTATUS(status) != 0) {
- tst_resm(TFAIL, "getpid() returned "
- "invalid pid %d", proc_id);
- } else {
- tst_resm(TPASS, "Functionality of "
- "getpid() successful");
- }
- }
- } else {
- tst_resm(TPASS, "call succeeded");
- }
- } /* End for TEST_LOOPING */
-
- /* Call cleanup() to undo setup done for the test. */
- cleanup();
-
- /*NOTREACHED*/
-} /* End main */
-
-/*
- * setup() - performs all ONE TIME setup for this test.
- * Setup signal catching function.
- */
-void
-setup()
-{
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-}
-
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/getppid01.c b/winsup/testsuite/winsup.api/ltp/getppid01.c
deleted file mode 100644
index d0e6032c0..000000000
--- a/winsup/testsuite/winsup.api/ltp/getppid01.c
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : getppid01
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for getppid(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) getppid(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the getppid(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * getppid(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <sys/types.h>
-#include <sys/fcntl.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-
-const char *TCID="getppid01"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0};
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call getppid(2)
- */
- TEST(getppid());
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "getppid() Failed, errno=%d : %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "getppid() returned %d", TEST_RETURN);
- }
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/getppid02.c b/winsup/testsuite/winsup.api/ltp/getppid02.c
deleted file mode 100644
index 50a72e470..000000000
--- a/winsup/testsuite/winsup.api/ltp/getppid02.c
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * NAME
- * getppid01.c
- *
- * DESCRIPTION
- * Testcase to check the basic functionality of the getppid() syscall.
- *
- * USAGE: <for command-line>
- * getppid01 [-c n] [-f] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -f : Turn off functionality Testing.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS
- * None
- */
-
-#include <errno.h>
-#include <test.h>
-#include <usctest.h>
-#include <sys/wait.h>
-
-const char *TCID = "getppid01";
-int TST_TOTAL = 1;
-extern int Tst_count;
-
-void setup(void);
-void cleanup(void) __attribute__((noreturn));
-
-int
-main(int ac, char **av)
-{
- int pid, ppid;
-
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /*
- * parse standard options
- */
- if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
- }
-
- setup();
-
- /*
- * check looping state if -i option is given
- */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- /*
- * reset Tst_count in case we are looping.
- */
- Tst_count = 0;
-
- ppid = getpid();
- pid = fork();
- if (pid < 0) {
- tst_brkm(TBROK, cleanup, "fork() failed");
- }
-
- if (pid == 0) { /* child */
- TEST(getppid());
-
- if (TEST_RETURN < 0) {
- tst_resm(TFAIL, "something is really broken");
- continue;
- }
-
- if (STD_FUNCTIONAL_TEST) {
- if (TEST_RETURN != ppid) {
- tst_resm(TFAIL, "getppid() failed");
- } else {
- tst_resm(TPASS, "return value = "
- "parent's pid value");
- }
- } else {
- tst_resm(TPASS, "call succeeded");
- }
-
- } else {
- wait(NULL);
-
- /* let the child carry on */
- exit(0);
- }
- }
- cleanup();
-
- /*NOTREACHED*/
-}
-
-/*
- * setup() - performs all ONE TIME setup for this test.
- */
-void
-setup()
-{
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-}
-
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-}
-
diff --git a/winsup/testsuite/winsup.api/ltp/getuid01.c b/winsup/testsuite/winsup.api/ltp/getuid01.c
deleted file mode 100644
index cd3dff769..000000000
--- a/winsup/testsuite/winsup.api/ltp/getuid01.c
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : getuid01
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for getuid(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) getuid(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the getuid(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * getuid(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <sys/types.h>
-#include <sys/fcntl.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-
-const char *TCID="getuid01"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0};
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call getuid(2)
- */
- TEST(getuid());
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "getuid() Failed, errno=%d : %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "getuid() returned %d", TEST_RETURN);
- }
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/getuid02.c b/winsup/testsuite/winsup.api/ltp/getuid02.c
deleted file mode 100644
index 966b55290..000000000
--- a/winsup/testsuite/winsup.api/ltp/getuid02.c
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * NAME
- * getuid02.c
- *
- * DESCRIPTION
- * Testcase to check the basic functionality of the geteuid() system call.
- *
- * USAGE: <for command-line>
- * getuid02 [-c n] [-f] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -f : Turn off functionality Testing.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS
- * None
- */
-
-#include <pwd.h>
-#include <errno.h>
-#include <test.h>
-#include <usctest.h>
-
-const char *TCID = "getuid02";
-int TST_TOTAL = 1;
-extern int Tst_count;
-
-void setup(void);
-void cleanup(void) __attribute__((noreturn));
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned by parse_opts */
-
- struct passwd *pwent;
-
- /* parse standard options */
- if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
- }
-
- setup();
-
- /* check looping state if -i option is given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- /* reset Tst_count in case we are looping */
- Tst_count = 0;
-
- TEST(geteuid());
-
- if (TEST_RETURN < 0) {
- tst_brkm(TBROK, cleanup, "This should never happen");
- }
-
- if (STD_FUNCTIONAL_TEST) {
-
- pwent = getpwuid(TEST_RETURN);
- if (pwent == NULL) {
- tst_resm(TFAIL, "geteuid() returned unexpected "
- "value %d", TEST_RETURN);
- } else {
- if (pwent->pw_uid != TEST_RETURN) {
- tst_resm(TFAIL, "getpwuid() value, %d, "
- "does not match geteuid() "
- "value, %d", pwent->pw_uid,
- TEST_RETURN);
- } else {
- tst_resm(TPASS, "values from geteuid()"
- " and getpwuid() match");
- }
- }
- } else {
- tst_resm(TPASS, "call succeeded");
- }
- }
- cleanup();
-
- /*NOTREACHED*/
-}
-
-/*
- * setup() - performs all ONE TIME setup for this test.
- */
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-}
-
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-}
-
diff --git a/winsup/testsuite/winsup.api/ltp/getuid03.c b/winsup/testsuite/winsup.api/ltp/getuid03.c
deleted file mode 100644
index e18c366f4..000000000
--- a/winsup/testsuite/winsup.api/ltp/getuid03.c
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * NAME
- * getuid01.c
- *
- * DESCRIPTION
- * Testcase to check the basic functionality of the getuid() system call.
- *
- * USAGE: <for command-line>
- * getuid01 [-c n] [-f] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -f : Turn off functionality Testing.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS
- * None
- */
-
-#include <pwd.h>
-#include <errno.h>
-#include <test.h>
-#include <usctest.h>
-
-const char *TCID = "getuid01";
-int TST_TOTAL = 1;
-extern int Tst_count;
-
-void setup(void);
-void cleanup(void) __attribute__((noreturn));
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned by parse_opts */
-
- struct passwd *pwent;
-
- /* parse standard options */
- if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- }
-
- setup();
-
- /* check looping state if -i option is given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping */
- Tst_count = 0;
-
- TEST(getuid());
-
- if (TEST_RETURN < 0) {
- tst_brkm(TBROK, cleanup, "This should never happen");
- }
-
- if (STD_FUNCTIONAL_TEST) {
-
- pwent = getpwuid(TEST_RETURN);
- if (pwent == NULL) {
- tst_resm(TFAIL, "getuid() returned unexpected "
- "value %d", TEST_RETURN);
- } else {
- if (pwent->pw_uid != TEST_RETURN) {
- tst_resm(TFAIL, "getpwuid() value, %d, "
- "does not match getuid() "
- "value, %d", pwent->pw_uid,
- TEST_RETURN);
- } else {
- tst_resm(TPASS, "values from getuid()"
- " and getpwuid() match");
- }
- }
- } else {
- tst_resm(TPASS, "call succeeded");
- }
- }
- cleanup();
-
- /*NOTREACHED*/
-}
-
-/*
- * setup() - performs all ONE TIME setup for this test.
- */
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-}
-
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-}
-
diff --git a/winsup/testsuite/winsup.api/ltp/kill01.c b/winsup/testsuite/winsup.api/ltp/kill01.c
deleted file mode 100644
index 042899173..000000000
--- a/winsup/testsuite/winsup.api/ltp/kill01.c
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * NAME
- * kill01.c
- *
- * DESCRIPTION
- * Test case to check the basic functionality of kill().
- *
- * ALGORITHM
- * call setup
- * loop if the -i option was given
- * fork a child
- * execute the kill system call
- * check the return value
- * if return value is -1
- * issue a FAIL message, break remaining tests and cleanup
- * if we are doing functional testing
- * if the process was terminated with the expected signal.
- * issue a PASS message
- * otherwise
- * issue a FAIL message
- * call cleanup
- *
- * USAGE
- * kill01 [-c n] [-f] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -f : Turn off functionality Testing.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS
- * This test should be ran as a non-root user.
- */
-
-#include "test.h"
-#include "usctest.h"
-
-#include <signal.h>
-#include <errno.h>
-#include <sys/wait.h>
-
-void cleanup(void) __attribute__((noreturn));
-void setup(void);
-
-const char *TCID= "kill01()";
-int TST_TOTAL = 1;
-
-extern int Tst_count;
-
-#define TEST_SIG SIGKILL
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- pid_t pid;
- int exno, status, nsig;
-
- /* parse standard options */
- if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
- }
-
- setup(); /* global setup */
-
- /* The following loop checks looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping */
- Tst_count = 0;
- status = 1;
- exno = 1;
- pid = fork();
- if (pid < 0) {
- tst_brkm(TBROK, cleanup, "Fork of child failed");
- } else if (pid == 0) {
- pause();
- /*NOTREACHED*/
- exit(exno);
- } else {
- TEST(kill(pid, TEST_SIG));
- waitpid(pid, &status, 0);
- }
-
- if (TEST_RETURN == -1) {
- tst_brkm(TFAIL, cleanup, "%s failed - errno = %d : %s",
- TCID, TEST_ERRNO, strerror(TEST_ERRNO));
- /*NOTREACHED*/
- }
-
- if (STD_FUNCTIONAL_TEST) {
- /*
- * Check to see if the process was terminated with the
- * expected signal.
- */
- nsig = WTERMSIG(status);
- if (nsig == TEST_SIG) {
- tst_resm(TPASS, "received expected signal %d",
- nsig);
- } else {
- tst_resm(TFAIL, "expected signal %d received %d" ,TEST_SIG,nsig);
- }
- } else {
- tst_resm(TPASS, "call succeeded");
- }
- }
- cleanup();
-
- /*NOTREACHED*/
-}
-
-
-/*
- * setup() - performs all ONE TIME setup for this test
- */
-void
-setup(void)
-{
- /* Pause if that option was specified */
- TEST_PAUSE;
-}
-
-/*
- * cleanup() - performs all the ONE TIME cleanup for this test at completion
- * or premature exit.
- */
-void
-cleanup(void)
-{
- /*
- * print timing status if that option was specified.
- * print errno log if that option was specified
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/kill02.c b/winsup/testsuite/winsup.api/ltp/kill02.c
deleted file mode 100644
index eba47cc6a..000000000
--- a/winsup/testsuite/winsup.api/ltp/kill02.c
+++ /dev/null
@@ -1,857 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/***********************************************************************************
-
- OS Test - Silicon Graphics, Inc.
-
- TEST IDENTIFIER : kill02 Sending a signal to processes with the same process group ID.
-
- PARENT DOCUMENT : kiltds01 Kill System Call.
-
- AUTHOR : Dave Baumgartner
-
- CO-PILOT : Barrie Kletscher
-
- DATE STARTED : 12/30/85
-
- TEST ITEMS
-
- 1. Sending a signal to pid of zero sends to all processes whose process
- group ID is equal to the process group ID as the sender.
-
- 2. Sending a signal to pid of zero does not send to processes in another process group.
-
-
- OUTPUT SPECIFICATIONS
-
- PASS :
- kiltcs02 1 PASS The signal was sent to all processes in the process group.
- kiltcs02 2 PASS The signal was not sent to selective processes that were not in the process group.
-
- FAIL :
- kiltcs02 1 FAIL The signal was not sent to all processes in the process group.
- kiltcs02 2 FAIL The signal was sent to a process that was not in the process group.
-
- BROK :
- kiltcs02 # BROK System call XXX failed. Errno:X, Error message:XXX.
- kiltcs02 # BROK Setting to catch unexpected signal %d failed. Errno: %d, Error message %s.
- kiltcs02 # BROK Setting to ignore signal %d failed. Errno: %d, Error message %s.
-
- WARN :
- kiltcs02 0 WARN Unexpected signal X was caught.
-
- SPECIAL PROCEDURAL REQUIREMENTS
-
- The program must be linked with tst_res.o.
-
- DETAILED DESCRIPTION
-
- **Setup**
- Set up unexpected signal handling.
- Set up one pipe for each process to be created with no blocking for read.
-
- **MAIN**
- If setup fails exit.
- Fork 2 children(1 & 2).
- Wait for set up complete messages from the 1st and 2nd child.
- Send the signal SIGUSR1 with pid equal to zero.
- Sleep a reasonable amount of time so that each child has been swapped in
- to process the signal.
- Now decide the outcome of the test items by reading from each pipe to find
- out if the child was interrupted by the signal and wrote to it.
- Remove the second child.
- Tell the first child it is time to remove it's child B because the decisions have been made.
- Exit.
-
- **First Child**
- Set to catch SIGUSR1 with an int_rout1.
- Set up to handle the message from the parent to remove child B.
- Fork two children(A & B).
- Wait for set up complete messages from child A & child B.
- Send a set up complete message to the parent.
- Pause until the signal SIGUSR1 comes in from the parent.
- Pause until the parent says it is time to remove the child.
- Exit.
-
- **Second Child**
- Set to catch SIGUSR1 with an int_rout2.
- Set the process group to be something different than the parents.
- Send a set up complete message to the parent.
- Pause until killed by parent because this child shouldn't receive signal SIGUSR1.
-
- **Child A**
- Set to catch SIGUSR1 with an int_routA.
- Send a set up complete message to the parent(First Child).
- Pause until the signal SIGUSR1 comes in from the parent.
- Exit.
-
- **Child B**
- Set to catch SIGUSR1 with an int_routB.
- Set the process group to be something different than the parents(First Child's).
- Send a set up complete message to the parent.
- Pause until killed by parent because this child shouldn't receive signal SIGUSR1.
-
- **usr1_rout-Used by all children**
- Write to the appropriate pipe that the signal SIGUSR1 was caught.
-
- **usr2_rout**
- Remove child B.
-
-******************************************************************************/
-#include <sys/param.h>
-#include <signal.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <string.h>
-#include "test.h"
-#include "usctest.h"
-
-#define MAXMESG 150 /*The maximum message that can be created. */
-#define CHAR_SET_FAILED "0" /*Set up failing status transferred through the pipe. */
-#define CHAR_SET_PASSED "1" /*Set up passing status transferred through the pipe. */
-#define SIG_CAUGHT "2" /*Indicates that the signal SIGUSR1 was caught. */
-#define SIG_RECEIVED 1 /*Integer value that indicates that the signal SIGUSR1 */
- /*was caught. */
-#define SIG_NOT_RECD 0 /*Integer value that indicates that the signal SIGUSR1 */
- /*was caught. */
-#define INT_SET_FAILED 0 /*Set up failing status transferred through the pipe. */
-#define INT_SET_PASSED 1 /*Set up passing status transferred through the pipe. */
-#define SLEEP_TIME 10 /*Amount of time the children get to catch the signal */
-#define TRUE 40 /*Child exits with this if execution was as */
- /*expected. */
-#define FALSE 50 /*Child exits with this if it timed out waiting for the */
- /*parents signal. */
-#define TIMEOUT 60 /*Amount of time given in alarm calls. */
-#define CHILD_EXIT(VAR) ((VAR >> 8) & 0377) /*Exit value from the child. */
-#define CHILD_SIG(VAR) (VAR & 0377) /*Signal value from the termination of child. */
- /*from the parent. */
-#define SYS_FAIL "The system call %s failed. Errno: %d, Error message: %s."
-
-int pid1; /*Return value from 1st fork. Global so that it can be */
- /*used in interrupt handling routines. */
-int pid2; /*Return value from 2nd fork. Global so that it can be */
- /*used in interrupt handling routines. */
-int pidA; /*Return value from 1st fork in child 1. Global so that it */
- /*can be used in interrupt handling routines. */
-int pidB; /*Return value from 2nd fork in child 1. Global so that it */
- /*can be used in interrupt handling routines. */
-extern int errno; /*Error number returned by a system call. */
-int pipe1_fd[2]; /*Pipe file descriptors used for communication */
- /*between child 1 and the 1st parent. */
-int pipe2_fd[2]; /*Pipe file descriptors used for communication */
- /*between child 2 and the 1st parent. */
-int pipeA_fd[2]; /*Pipe file descriptors used for communication */
- /*between child A and the 1st parent. */
-int pipeB_fd[2]; /*Pipe file descriptors used for communication */
- /*between child B and the 1st parent. */
-char pipe_buf[10]; /*Pipe buffer. */
-char buf_tmp1[2],buf_tmp2[2]; /*Temp hold for info read into pipe_buf. */
-int read1_stat = 0; /*Number of characters read from pipe 1. */
-int read2_stat = 0; /*Number of characters read from pipe 2. */
-int readA_stat = 0; /*Number of characters read from pipe A. */
-int readB_stat = 0; /*Number of characters read from pipe B. */
-int alarm_flag = FALSE; /*This flag indicates an alarm time out. */
-char who_am_i = '0'; /*This indicates which process is which when using */
- /*interrupt routine usr1_rout. */
-
-void notify_timeout(); /*Signal handler that the parent enters if it times out */
- /*waiting for the child to indicate its set up status. */
-void parent_rout(); /*This is the parents routine. */
-void child1_rout(); /*This is child 1's routine. */
-void child2_rout(); /*This is child 2's routine. */
-void childA_rout(); /*This is child A's routine. */
-void childB_rout(); /*This is child B's routine. */
-void usr1_rout(); /*This routine is used by all children to indicate that */
- /*they have caught signal SIGUSR1. */
-void par_kill(); /*This routine is called by the original parent to */
- /*remove child 2 and to indicate to child 1 to */
- /*remove its children. */
-void chld1_kill(); /*This routine is used by child 1 to remove itself and */
- /*its children A and B. */
-
-void setup();
-void cleanup(void) __attribute__((noreturn));
-
-const char *TCID="kill02"; /* Test program identifier. */
-int TST_TOTAL=2; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-extern int Tst_nobuf; /* var. used to turn off tst_res buffering */
-
-int exp_enos[]={0}; /* Array of expected errnos */
-
-/***********************************************************************
- * MAIN
- ***********************************************************************/
-int
-main(int ac, char **av)
-{
- char mesg[MAXMESG]; /* Holds messages to pass to tst_res. */
-
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- Tst_nobuf=1;
-
- /***************************************************************
- * parse standard options, and exit if there is an error
- * the -t and -f options not support yet.
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL ) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- if ((pid1 = fork()) > 0)
- {
- /*
- * This is the parent, fork again to create child 2.
- */
- if ((pid2 = fork()) > 0) {
- /*
- * This is the parent.
- */
- (void) parent_rout();
- }
- else if (pid2 == 0) {
- /*
- * This is child 2.
- */
- (void) child2_rout();
- }
- else {
- /*
- * The second fork failed kill the first child.
- */
- if (kill(pid1,SIGKILL) == -1 && errno != ESRCH) {
- tst_resm(TWARN,"Child process may not have been killed.");
- }
- (void) sprintf(mesg,SYS_FAIL,"fork",errno,strerror(errno));
- tst_brkm(TBROK,cleanup,mesg);
- }
-
- }
- else if (pid1 == 0) {
- /*
- * This is child 1.
- */
- (void) child1_rout();
- }
- else {
- /*
- * Fork failed.
- */
- (void) sprintf(mesg,SYS_FAIL,"fork",errno,strerror(errno));
- tst_brkm(TBROK,cleanup,mesg);
- }
- }
-
- cleanup();
-
- return 0;
-} /* END OF MAIN.*/
-
-/******************************************************************************
- * This is the parents routine. The parent waits for the children 1 and 2 to
- * get set up. Then sends the signal and checks the outcome.
- *********************************************************************************/
-void parent_rout()
-{
- char mesg[MAXMESG]; /*Used to buffer messages for tst_resm. */
-
- /*
- * Set to catch the alarm signal SIGALRM.
- */
- if (signal(SIGALRM,notify_timeout) == SIG_ERR) {
- (void) par_kill();
- tst_brkm(TBROK, NULL,
- "Could not set to catch the parents time out alarm.");
- tst_exit();
- }
-
- /*
- * Setting to catch the timeout alarm worked now let the children start up.
- * Set an alarm which causes a time out on the read pipe loop.
- * The children will notify the parent that set up is complete
- * and the pass/fail status of set up.
- */
- (void) alarm(TIMEOUT);
-
- while ((read(pipe1_fd[0],pipe_buf,1) != 1) && (alarm_flag == FALSE))
- /*EMPTY*/;
- strncpy(buf_tmp1,pipe_buf,1);
- (void) alarm(TIMEOUT);
-
- while ((read(pipe2_fd[0],pipe_buf,1) != 1) && (alarm_flag == FALSE))
- /*EMPTY*/;
- (void) alarm(0); /*Reset the alarm clock.*/
- strncpy(buf_tmp2,pipe_buf,1);
-
- /*
- * Check the alarm flag.
- */
- if (alarm_flag == TRUE) {
- tst_brkm(TBROK,NULL,"The set up of the children failed by timing out.");
- (void) par_kill();
- cleanup();
- }
-
- /*
- * Check to see if either child failed in the set up.
- */
- if ( (strncmp(buf_tmp1,CHAR_SET_FAILED,1) == 0) ||
- (strncmp(buf_tmp2,CHAR_SET_FAILED,1) == 0)) {
- /*
- * Problems were encountered in the set up of one of the children.
- * The error message has been displayed by the child.
- */
- (void) par_kill();
- cleanup();
- }
-
- /*
- * Setup passed, now send SIGUSR1 to process id of zero.
- */
- TEST( kill(0,SIGUSR1) );
-
- if ( TEST_RETURN == -1)
- {
- (void) sprintf(mesg,SYS_FAIL,"kill",errno,strerror(errno));
- tst_brkm(TBROK,NULL,mesg);
- (void) par_kill();
- cleanup();
- }
-
- /*
- * Sleep for a while to allow the children to get a chance to
- * catch the signal.
- */
- (void) sleep(SLEEP_TIME);
-
- /*
- * The signal was sent above and time has run out for child response,
- * check the outcomes.
- */
- read1_stat = read(pipe1_fd[0],pipe_buf,1);
- if (read1_stat == -1 && errno == EAGAIN) read1_stat = 0;
- read2_stat = read(pipe2_fd[0],pipe_buf,1);
- if (read2_stat == -1 && errno == EAGAIN) read2_stat = 0;
- readA_stat = read(pipeA_fd[0],pipe_buf,1);
- if (readA_stat == -1 && errno == EAGAIN) readA_stat = 0;
- readB_stat = read(pipeB_fd[0],pipe_buf,1);
- if (readB_stat == -1 && errno == EAGAIN) readB_stat = 0;
-
- if (read1_stat == -1 || read2_stat == -1 ||
- readA_stat == -1 || readB_stat == -1) {
- /*
- * The read system call failed.
- */
- (void) sprintf(mesg,SYS_FAIL,"read",errno,strerror(errno));
- tst_brkm(TBROK,NULL,mesg);
- (void) par_kill();
- cleanup();
- }
-
- /*
- * Check the processes that were supposed to get the signal.
- */
- if (read1_stat == SIG_RECEIVED) {
- if (readA_stat == SIG_RECEIVED) {
- /*
- * Both processes, 1 and A, that were supposed to receive
- * the signal did receive the signal.
- */
- if ( STD_FUNCTIONAL_TEST )
- tst_resm(TPASS,
- "The signal was sent to all processes in the process group.");
- else
- Tst_count++;
- }
- else { /*Process A didn't receive the signal.*/
- tst_resm(TFAIL,"Process A did not receive the signal.");
- }
-
- }
- else { /*Process 1 didn't receive the signal.*/
- tst_resm(TFAIL,"Process 1 did not receive the signal.");
- }
-
- /*
- * Check the processes that were not supposed to get the signal.
- */
- if (read2_stat == SIG_NOT_RECD) {
- if (readB_stat == SIG_NOT_RECD) {
- /*
- * Both processes, 2 and B did not receive the signal.
- */
- if ( STD_FUNCTIONAL_TEST )
- tst_resm(TPASS,
- "The signal was not sent to selective processes that were not in the process group.");
- else
- Tst_count++;
- }
- else { /*Process B received the signal.*/
- tst_resm(TFAIL,"Process B received the signal.");
- }
-
- }
-
- else /*Process 2 received the signal.*/
- {
- tst_resm(TFAIL,"Process 2 received the signal.");
- }
-
- (void) par_kill();
- return;
-} /*End of parent_rout*/
-
-/*******************************************************************************
- * This is child 1's routine. It creates children A & B, checks their set up,
- * reports to the parent set up pass/fail info., then waits for
- * the parents signal.
- ******************************************************************************/
-void child1_rout()
-{
- char mesg[MAXMESG]; /*Used to buffer messages for tst_resm. */
- who_am_i = '1';
-
- /*
- * Set to catch the SIGUSR1 with int1_rout.
- */
- if (signal(SIGUSR1,usr1_rout) == SIG_ERR)
- {
- tst_brkm(TBROK,NULL,"Could not set to catch the childrens signal.");
- (void) write(pipe1_fd[1],CHAR_SET_FAILED,1);
- exit(0);
- }
-
- /*
- * Create children A & B.
- */
- if ((pidA = fork()) > 0) {
- /*
- * This is the parent(child1), fork again to create child B.
- */
- if ((pidB = fork()) == 0) {
- /* This is child B. */
- (void) childB_rout();
- }
-
- else if (pidB == -1) {
- /*
- * The fork of child B failed kill child A.
- */
- if (kill(pidA,SIGKILL) == -1)
- tst_resm(TWARN,"Child process may not have been killed.");
- (void) sprintf(mesg,SYS_FAIL,"fork",errno,strerror(errno));
- tst_brkm(TBROK,NULL,mesg);
- (void) write(pipe2_fd[1],CHAR_SET_FAILED,1);
- exit(0);
- }
- }
-
- else if (pidA == 0) {
- /* This is child A. */
- (void) childA_rout();
-
- }
-
- else if (pidA == -1) {
- /*
- * The fork of child A failed.
- */
- (void) sprintf(mesg,SYS_FAIL,"fork",errno,strerror(errno));
- tst_brkm(TBROK,NULL,mesg);
- (void) write(pipe1_fd[1],CHAR_SET_FAILED,1);
- exit(0);
- }
-
- /*
- * Set to catch the SIGUSR2 with chld1_kill.
- */
- if (signal(SIGUSR2,chld1_kill) == SIG_ERR) {
- tst_brkm(TBROK,NULL,"Could not set to catch the parents signal.");
- (void) write(pipe1_fd[1],CHAR_SET_FAILED,1);
- (void) chld1_kill();
- exit(0);
- }
-
- /*
- * Set to catch the alarm signal SIGALRM.
- */
- if (signal(SIGALRM,notify_timeout) == SIG_ERR) {
- tst_brkm(TBROK,NULL,"Could not set to catch the childs time out alarm.");
- (void) write(pipe1_fd[1],CHAR_SET_FAILED,1);
- (void) chld1_kill();
- exit(0);
- }
-
- /*
- * Setting to catch the signals worked now let the children start up.
- * Set an alarm which causes a time out on the pipe read loop.
- * The children A & B will notify the parent(child1) that set up is complete
- * and the pass/fail status of set up.
- */
- (void) alarm(TIMEOUT-40);
-
- while ((read(pipeA_fd[0],pipe_buf,1) != 1) && (alarm_flag == FALSE))
- /*EMPTY*/;
- (void) alarm(TIMEOUT-40);
-
- while ((read(pipeB_fd[0],pipe_buf,1) != 1) && (alarm_flag == FALSE))
- /*EMPTY*/;
- (void) alarm(0); /*Reset the alarm clock.*/
-
- /*
- * Check the alarm flag.
- */
- if (alarm_flag == TRUE) {
- tst_brkm(TBROK,NULL,"The set up of the children failed by timing out.");
- (void) chld1_kill();
- (void) write(pipe1_fd[1],CHAR_SET_FAILED,1);
- exit(0);
- }
-
- /*
- * Send a set up complete message to the parent.
- */
- (void) write(pipe1_fd[1],CHAR_SET_PASSED,1);
-
- /*
- * Pause until the signal SIGUSR1 or SIGUSR2 is sent from the parent.
- */
- (void) pause();
-
- /*
- * Pause until signal SIGUSR2 is sent from the parent.
- * This pause will only be executed if SIGUSR2 has not been received yet.
- */
- while (1) {
- sleep(1);
- }
-
-} /*End of child1_rout*/
-
-/*******************************************************************************
- * This is the routine for child 2, which should not receive the parents signal.
- ******************************************************************************/
-void child2_rout()
-{
- who_am_i = '2';
-
- /*
- * Set the process group of this process to be different
- * than the other processes.
- */
- (void) setpgrp();
-
- /*
- * Set to catch the SIGUSR1 with usr1_rout.
- */
- if (signal(SIGUSR1,usr1_rout) == SIG_ERR) {
- tst_brkm(TBROK,cleanup,"Could not set to catch the parents signal.");
- (void) write(pipe2_fd[1],CHAR_SET_FAILED,1);
- exit(0);
- }
-
- /* Send a set up complete message to parent.*/
- (void) write(pipe2_fd[1],CHAR_SET_PASSED,1);
-
- /*
- * Pause until killed by the parent or SIGUSR1 is received.
- */
- (void) pause();
-}
-
-
-/*******************************************************************************
- * This is the routine for child A, which should receive the parents signal.
- ******************************************************************************/
-void childA_rout()
-{
- who_am_i = 'A';
-
- /* Send a set up complete message to parent.*/
- write(pipeA_fd[1],CHAR_SET_PASSED,1);
-
- /*
- * Pause until killed by the parent or SIGUSR1 is received.
- */
- (void) pause();
-
- exit(0);
-} /*End of childA_rout*/
-
-/*******************************************************************************
- * This is the routine for child B, which should not receive the parents signal.
- ******************************************************************************/
-void childB_rout()
-{
- who_am_i = 'B';
-
- /*
- * Set the process group of this process to be different
- * than the other processes.
- */
- (void) setpgrp();
-
- /* Send a set up complete message to parent(child 1).*/
- write(pipeB_fd[1],CHAR_SET_PASSED,1);
-
- /*
- * Pause until killed by the parent(child 1) or SIGUSR1 is received.
- */
- (void) pause();
-
- exit(0);
-}
-
-/*******************************************************************************
- * This routine sets up the interprocess communication pipes, signal handling,
- * and process group information.
- ******************************************************************************/
-void
-setup()
-{
- int errno_buf = 0; /*indicates the errno if pipe set up fails. */
- int err_flag = FALSE; /*Indicates if an error has occurred in pipe set up. */
- char mesg[MAXMESG]; /*Used to buffer messages for tst_res. */
-
- /*
- * Set the process group ID to be equal between the parent and children.
- */
- (void) setpgrp();
-
- /*
- * Set to catch unexpected signals.
- * SIGCLD is set to be ignored because we do not wait for termination status.
- * SIGUSR1 is set to be ignored because this is the signal we are using for
- * the test and we are not concerned with the parent getting it.
- */
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- if (signal(SIGUSR1,SIG_IGN) == SIG_ERR) {
- (void) sprintf(mesg,
- "Setting to ignore signal SIGCLD failed. Errno: %d, Error message %s.",
- errno,strerror(errno));
- tst_brkm(TBROK,NULL,mesg);
- tst_exit();
- }
-
- if (signal(SIGCLD,SIG_IGN) == SIG_ERR) {
- (void) sprintf(mesg,
- "Setting to ignore signal SIGCLD failed. Errno: %d, Error message %s.",
- errno,strerror(errno));
- tst_brkm(TBROK,NULL,mesg);
- tst_exit();
- }
-
- /* Indicate which errnos are expected */
- TEST_EXP_ENOS(exp_enos);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
-
- /*
- * Set up pipe1, pipe2, pipeA, and pipeB.
- */
- if ((pipe(pipe1_fd) == -1) || (fcntl(pipe1_fd[0],F_SETFL,O_NDELAY) == -1))
- {
- errno_buf = errno;
- err_flag = TRUE;
- }
-
- if ((pipe(pipe2_fd) == -1) || (fcntl(pipe2_fd[0],F_SETFL,O_NDELAY) == -1))
- {
- errno_buf = errno;
- err_flag = TRUE;
- }
-
- if ((pipe(pipeA_fd) == -1) || (fcntl(pipeA_fd[0],F_SETFL,O_NDELAY) == -1))
- {
- errno_buf = errno;
- err_flag = TRUE;
- }
-
- if ((pipe(pipeB_fd) == -1) || (fcntl(pipeB_fd[0],F_SETFL,O_NDELAY) == -1))
- {
- errno_buf = errno;
- err_flag = TRUE;
- }
-
- /*
- * Check for errors.
- */
- if (err_flag == TRUE)
- {
- (void) sprintf(mesg,SYS_FAIL,"pipe",errno_buf,strerror(errno_buf));
- tst_brkm(TBROK, NULL, mesg);
- tst_exit();
- }
- return;
-
-}
-
-/***********************************************************
- * This routine indicates that the process caught SIGUSR1.
- **********************************************************/
-void usr1_rout()
-{
- char mesg[MAXMESG]; /*Used to buffer messages for tst_res. */
-
- switch (who_am_i)
- {
- case '1': if (write(pipe1_fd[1],SIG_CAUGHT,1) == -1)
- tst_resm(TWARN,"Writing signal catching status failed in child 1.");
- break;
- case '2': if (write(pipe2_fd[1],SIG_CAUGHT,1) == -1)
- tst_resm(TWARN,"Writing signal catching status failed in child 2.");
- break;
- case 'A': if (write(pipeA_fd[1],SIG_CAUGHT,1) == -1)
- tst_resm(TWARN,"Writing signal catching status failed in child A.");
- break;
- case 'B': if (write(pipeB_fd[1],SIG_CAUGHT,1) == -1)
- tst_resm(TWARN,"Writing signal catching status failed in child B.");
- break;
- default:
- sprintf(mesg,"Unexpected value %d for who_am_i in usr1_rout().",who_am_i);
- tst_resm(TWARN,mesg);
- break;
- }
-
-} /*End of usr1_rout*/
-
-
-/***********************************************************
- * This routine handles the timeout alarm in the parent,
- * which occurs when the child fails to notify the parent
- * the status of set up.
- **********************************************************/
-void notify_timeout()
-{
- alarm_flag = TRUE;
-
-} /*End of notify_timeout*/
-
-/***********************************************************
- * This routine handles the procedure for removing the
- * children forked off during this test.
- **********************************************************/
-void par_kill()
-{
- char mesg[MAXMESG]; /*Used to buffer messages for tst_res. */
- /*
- * Indicate to child1 that it can remove it's children and itself now.
- */
- if (kill(pid1,SIGUSR2) == -1 && errno != ESRCH)
- {
- (void) sprintf(mesg,SYS_FAIL,"kill",errno,strerror(errno));
- tst_resm(TWARN,mesg);
- tst_resm(TWARN,"Child 1 and it's children may still be alive.");
- }
-
- /*
- * Remove child 2.
- */
- if (kill(pid2,SIGKILL) == -1 && errno != ESRCH)
- tst_resm(TWARN,"Child2 may still be alive.");
-
- return;
-
-} /*End of par_kill*/
-
-
-/*********************************************************************
- * This routine is executed by child 1 when the parent tells it to
- * remove it's children and itself.
- ********************************************************************/
-void chld1_kill()
-{
- char mesg[MAXMESG]; /*Used to buffer messages for tst_resm. */
-
- /*
- * Remove children A & B.
- */
- if (kill(pidA,SIGKILL) == -1 && errno != ESRCH)
- {
- (void) sprintf(mesg,
- "The system call kill failed. Child 1's(A) child may still be alive. Errno: %d, Error message %s.",
- errno,strerror(errno));
- tst_resm(TWARN,mesg);
- }
- if (kill(pidB,SIGKILL) == -1 && errno != ESRCH)
- {
- (void) sprintf(mesg,
- "The system call kill failed. Child 1's(B) child may still be alive. Errno: %d, Error message %s.",
- errno,strerror(errno));
- tst_resm(TWARN,mesg);
- }
-
- exit(0);
-
-} /*End of chld1_kill*/
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-
-} /* End cleanup() */
-
-
diff --git a/winsup/testsuite/winsup.api/ltp/kill03.c b/winsup/testsuite/winsup.api/ltp/kill03.c
deleted file mode 100644
index 1de727fd7..000000000
--- a/winsup/testsuite/winsup.api/ltp/kill03.c
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * NAME
- * kill03.c
- *
- * DESCRIPTION
- * Test case to check that kill fails when given an invalid signal.
- *
- * ALGORITHM
- * call setup
- * loop if the -i option was given
- * fork a child
- * execute the kill system call with an invalid signal
- * check the return value
- * if return value is not -1
- * issue a FAIL message, break remaining tests and cleanup
- * if we are doing functional testing
- * if the errno was set to 22 (invalid argument).
- * issue a PASS message
- * otherwise
- * issue a FAIL message
- * call cleanup
- *
- * USAGE
- * kill03 [-c n] [-f] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -f : Turn off functionality Testing.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS
- * none
- */
-
-#include "test.h"
-#include "usctest.h"
-
-#include <signal.h>
-#include <errno.h>
-#include <sys/wait.h>
-
-void cleanup(void) __attribute__((noreturn));
-void setup(void);
-
-const char *TCID= "kill03()";
-int TST_TOTAL = 1;
-
-extern int Tst_count;
-
-int exp_enos[] = {EINVAL, 0};
-
-#define TEST_SIG 2000
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- pid_t pid;
- int exno, status;
-
- /* parse standard options */
- if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
- }
-
- setup(); /* global setup */
-
- TEST_EXP_ENOS(exp_enos);
-
- /* The following loop checks looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping */
- Tst_count = 0;
- status = 1;
- exno = 1;
- pid = fork();
- if (pid < 0) {
- tst_brkm(TBROK, cleanup, "Fork of child failed");
- } else if (pid == 0) {
- pause();
- /*NOTREACHED*/
- exit(exno);
- } else {
- TEST(kill(pid, TEST_SIG));
- kill(pid, SIGKILL);
- waitpid(pid, &status, 0);
- }
-
- if (TEST_RETURN != -1) {
- tst_brkm(TFAIL, cleanup, "%s failed - errno = %d : %s "
- "Expected a return value of -1 got %d",
- TCID, TEST_ERRNO, strerror(TEST_ERRNO)),
- TEST_RETURN;
- /*NOTREACHED*/
- }
-
- if (STD_FUNCTIONAL_TEST) {
- /*
- * Check to see if the errno was set to the expected
- * value of 22 : EINVAL.
- */
- TEST_ERROR_LOG(TEST_ERRNO);
- if (TEST_ERRNO == EINVAL) {
- tst_resm(TPASS, "errno set to %d : %s, as "
- "expected", TEST_ERRNO,
- strerror(TEST_ERRNO));
- } else {
- tst_resm(TFAIL, "errno set to %d : %s expected "
- "%d : %s", TEST_ERRNO,
- strerror(TEST_ERRNO), 22, strerror(22));
- }
- }
- }
- cleanup();
-
- /*NOTREACHED*/
-}
-
-
-/*
- * setup() - performs all ONE TIME setup for this test
- */
-void
-setup(void)
-{
- /* Pause if that option was specified */
- TEST_PAUSE;
-}
-
-/*
- * cleanup() - performs all the ONE TIME cleanup for this test at completion
- * or premature exit.
- */
-void
-cleanup(void)
-{
- /*
- * print timing status if that option was specified.
- * print errno log if that option was specified
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/kill04.c b/winsup/testsuite/winsup.api/ltp/kill04.c
deleted file mode 100644
index a7b3274c3..000000000
--- a/winsup/testsuite/winsup.api/ltp/kill04.c
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * NAME
- * kill04.c
- *
- * DESCRIPTION
- * Test case to check that kill() fails when passed a non-existant pid.
- *
- * ALGORITHM
- * call setup
- * loop if the -i option was given
- * fork a child
- * execute the kill system call with a non-existant PID
- * check the return value
- * if return value is not -1
- * issue a FAIL message, break remaining tests and cleanup
- * if we are doing functional testing
- * if the errno was set to 3 (No such proccess)
- * issue a PASS message
- * otherwise
- * issue a FAIL message
- * call cleanup
- *
- * USAGE
- * kill04 [-c n] [-f] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -f : Turn off functionality Testing.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS
- * This test should be run by a non-root user
- */
-
-#include "test.h"
-#include "usctest.h"
-
-#include <signal.h>
-#include <errno.h>
-#include <sys/wait.h>
-
-void cleanup(void) __attribute__((noreturn));
-void setup(void);
-
-const char *TCID= "kill04()";
-int TST_TOTAL = 1;
-
-extern int Tst_count;
-
-int exp_enos[] = {ESRCH, 0};
-
-#define TEST_SIG SIGKILL
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- pid_t pid, fake_pid;
- int exno, status, fake_status, nsig;
-
- /* parse standard options */
- if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
- }
-
- setup(); /* global setup */
-
- TEST_EXP_ENOS(exp_enos);
-
- /* The following loop checks looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping */
- Tst_count = 0;
- status = 1;
- exno = 1;
- pid = fork();
- if (pid < 0) {
- tst_brkm(TBROK, cleanup, "Fork failed");
- } else if (pid == 0) {
- pause();
- /*NOTREACHED*/
- exit(exno);
- } else {
- fake_pid = fork();
- if (fake_pid < 0) {
- tst_brkm(TBROK, cleanup, "Second fork failed");
- } else if (fake_pid == 0) {
- pause();
- /*NOTREACHED*/
- exit(exno);
- }
- kill(fake_pid, TEST_SIG);
- waitpid(fake_pid, &fake_status, 0);
- TEST(kill(fake_pid, TEST_SIG));
- kill(pid, TEST_SIG);
- waitpid(pid, &status, 0);
- }
-
- if (TEST_RETURN != -1) {
- tst_brkm(TFAIL, cleanup, "%s failed - errno = %d : %s "
- "Expected a return value of -1 got %d",
- TCID, TEST_ERRNO, strerror(TEST_ERRNO)),
- TEST_RETURN;
- /*NOTREACHED*/
- }
-
- if (STD_FUNCTIONAL_TEST) {
- /*
- * Check to see if the errno was set to the expected
- * value of 3 : ESRCH
- */
- nsig = WTERMSIG(status);
- TEST_ERROR_LOG(TEST_ERRNO);
- if (TEST_ERRNO == ESRCH) {
- tst_resm(TPASS, "errno set to %d : %s, as "
- "expected", TEST_ERRNO,
- strerror(TEST_ERRNO));
- } else {
- tst_resm(TFAIL, "errno set to %d : %s expected "
- "%d : %s", TEST_ERRNO,
- strerror(TEST_ERRNO), 3, strerror(3));
- }
- }
- }
- cleanup();
-
- /*NOTREACHED*/
-}
-
-
-/*
- * setup() - performs all ONE TIME setup for this test
- */
-void
-setup(void)
-{
- /* Pause if that option was specified */
- TEST_PAUSE;
-}
-
-/*
- * cleanup() - performs all the ONE TIME cleanup for this test at completion
- * or premature exit.
- */
-void
-cleanup(void)
-{
- /*
- * print timing status if that option was specified.
- * print errno log if that option was specified
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/kill09.c b/winsup/testsuite/winsup.api/ltp/kill09.c
deleted file mode 100644
index 3b4c24fb5..000000000
--- a/winsup/testsuite/winsup.api/ltp/kill09.c
+++ /dev/null
@@ -1,258 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : kill09
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for kill(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) kill(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the kill(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * kill(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-
-#include "test.h"
-#include "usctest.h"
-
-void setup();
-void cleanup(void) __attribute__((noreturn));
-void alarm_handler(int sig);
-
-
-
-
-const char *TCID="kill09"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int fork_pid;
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- int status;
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL ) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /* make a child process so we can kill it */
- /* If we cannot fork => we cannot test kill, so break and exit */
- if ((fork_pid=fork()) == -1) {
- tst_brkm(TBROK, cleanup,
- "fork() Failure. errno=%d : %s",
- errno, strerror(errno));
- }
-
- if (fork_pid == 0) {
- /* CHILD */
- /*
- * Setup alarm signal if we don't get the signal to prevent this process
- * from hanging around forever.
- */
- signal(SIGALRM, alarm_handler);
- alarm(20);
- pause();
- exit(1);
- }
-
- /* PARENT */
- /*
- * Call kill(2)
- */
- TEST(kill(fork_pid, SIGKILL));
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "kill(%d, SIGKILL) Failed, errno=%d : %s", fork_pid,
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "kill(%d, SIGKILL) returned %d", fork_pid, TEST_RETURN);
- }
- }
-
- /*
- * wait for process to cleanup zombies.
- *
- */
- waitpid(0, &status, WNOHANG);
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- (void) signal(SIGCHLD, SIG_IGN);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
-
-void
-alarm_handler(int sig)
-{
- exit(8);
-}
diff --git a/winsup/testsuite/winsup.api/ltp/link02.c b/winsup/testsuite/winsup.api/ltp/link02.c
deleted file mode 100644
index 84c53c23c..000000000
--- a/winsup/testsuite/winsup.api/ltp/link02.c
+++ /dev/null
@@ -1,263 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : link02
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for link(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) link(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the link(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * link(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <sys/types.h>
-#include <sys/fcntl.h>
-#include <sys/stat.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-void setup();
-void cleanup(void) __attribute__((noreturn));
-
-
-
-const char *TCID="link02"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0};
-
-char Fname[255], Lname[255];
-
-/***********************************************************************
- * Main
- ***********************************************************************/
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- struct stat fbuf, lbuf;
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *) NULL ) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call link(2)
- */
- TEST(link(Fname, Lname));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "link(%s, %s) Failed, errno=%d : %s",
- Fname, Lname, TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- stat(Fname, &fbuf);
- stat(Lname, &lbuf);
- if ( fbuf.st_nlink > 1 && lbuf.st_nlink > 1 &&
- fbuf.st_nlink == lbuf.st_nlink )
-
- tst_resm(TPASS, "link(%s, %s) returned %d and link cnts match",
- Fname, Lname, TEST_RETURN);
- else {
- tst_resm(TFAIL,
- "link(%s, %s) returned %d, stat link cnts do not match %d %d",
- Fname, Lname, TEST_RETURN, fbuf.st_nlink,
- lbuf.st_nlink);
- }
- }
- if (unlink(Lname) == -1) {
- tst_resm(TWARN, "unlink(%s) Failed, errno=%d : %s",
- Fname, errno, strerror(errno));
- }
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- int fd;
-
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- strcpy(Fname, "tfile");
- if ((fd = open(Fname, O_RDWR|O_CREAT, 0700)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR|O_CREAT, 0700) Failed, errno=%d : %s",
- Fname, errno, strerror(errno));
- } else if (close(fd) == -1) {
- tst_resm(TWARN, "close(%s) Failed, errno=%d : %s",
- Fname, errno, strerror(errno));
- }
- strcpy(Lname, "lfile");
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/link03.c b/winsup/testsuite/winsup.api/ltp/link03.c
deleted file mode 100644
index 38c16af72..000000000
--- a/winsup/testsuite/winsup.api/ltp/link03.c
+++ /dev/null
@@ -1,330 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : link03
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : multi links tests
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 2
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : Richard Logan
- *
- * CO-PILOT : William Roske
- *
- * DATE STARTED : 03/31/94
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) link(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- * -N #links : Use #links links every iteration
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the link(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * link(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <sys/types.h>
-#include <sys/fcntl.h>
-#include <sys/stat.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-void setup();
-void help();
-void cleanup(void) __attribute__((noreturn));
-
-
-
-const char *TCID="link03"; /* Test program identifier. */
-int TST_TOTAL=2; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-extern int Tst_nobuf;
-
-int exp_enos[]={0, 0};
-
-#define BASENAME "lkfile"
-
-char Basename[255];
-char Fname[255];
-int Nlinks=0;
-char *Nlinkarg;
-
-int Nflag=0;
-
-
-/* for test specific parse_opts options */
-option_t options[] = {
- { "N:", &Nflag, &Nlinkarg }, /* -N #links */
- { NULL, NULL, NULL }
-};
-
-/***********************************************************************
- * Main
- ***********************************************************************/
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- struct stat fbuf, lbuf;
- int cnt;
- int nlinks;
- char lname[255];
-
- Tst_nobuf=1;
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, options, &help)) != (char *) NULL ) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- if ( Nflag ) {
- if (sscanf(Nlinkarg, "%i", &Nlinks) != 1 ) {
- tst_brkm(TBROK, NULL, "--N option arg is not a number");
- tst_exit();
- }
- if ( Nlinks > 1000 ) {
- tst_resm(TWARN, "--N option arg > 1000 - may get errno:%d (EMLINK)",
- EMLINK);
- }
- }
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- if ( Nlinks )
- nlinks = Nlinks;
- else
- /* min of 10 links and max of a 100 links */
- nlinks = (lc%90)+10;
-
- for(cnt=1; cnt < nlinks; cnt++) {
-
- sprintf(lname, "%s%d", Basename, cnt);
- /*
- * Call link(2)
- */
- TEST(link(Fname, lname));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_brkm(TFAIL, cleanup, "link(%s, %s) Failed, errno=%d : %s",
- Fname, lname, TEST_ERRNO, strerror(TEST_ERRNO));
- }
- }
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- stat(Fname, &fbuf);
-
- for(cnt=1; cnt < nlinks; cnt++) {
- sprintf(lname, "%s%d", Basename, cnt);
-
- stat(lname, &lbuf);
- if ( fbuf.st_nlink <= 1 || lbuf.st_nlink <= 1 ||
- (fbuf.st_nlink != lbuf.st_nlink) ) {
-
- tst_resm(TFAIL,
- "link(%s, %s[1-%d]) ret %d for %d files, stat values do not match %d %d",
- Fname, Basename, nlinks, TEST_RETURN, nlinks,
- fbuf.st_nlink, lbuf.st_nlink);
- break;
- }
- }
- if ( cnt >= nlinks ) {
- tst_resm(TPASS,
- "link(%s, %s[1-%d]) ret %d for %d files, stat linkcounts match %d",
- Fname, Basename, nlinks, TEST_RETURN, nlinks,
- fbuf.st_nlink);
- }
- }
- else
- Tst_count++;
-
- for(cnt=1; cnt < nlinks; cnt++) {
-
- sprintf(lname, "%s%d", Basename, cnt);
-
- if (unlink(lname) == -1) {
- tst_res(TWARN, "unlink(%s) Failed, errno=%d : %s",
- Fname, errno, strerror(errno));
- }
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * help
- ***************************************************************/
-void
-help()
-{
- printf(" -N #links : create #links hard links every iteration\n");
-}
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- int fd;
-
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- sprintf(Fname,"%s_%d", BASENAME, getpid());
- if ((fd = open(Fname,O_RDWR|O_CREAT,0700)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR|O_CREAT,0700) Failed, errno=%d : %s",
- Fname, errno, strerror(errno));
- } else if (close(fd) == -1) {
- tst_res(TWARN, "close(%s) Failed, errno=%d : %s",
- Fname, errno, strerror(errno));
- }
- sprintf(Basename, "%s_%d.", BASENAME, getpid());
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/link04.c b/winsup/testsuite/winsup.api/ltp/link04.c
deleted file mode 100644
index b3453b5d0..000000000
--- a/winsup/testsuite/winsup.api/ltp/link04.c
+++ /dev/null
@@ -1,426 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : link04
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Negative test cases for link(2).
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 14
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : Richard Logan
- *
- * CO-PILOT : William Roske
- *
- * DATE STARTED : 03/30/94
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1-14.) link(2) returns...(See Test_cases structure below)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- * Standard tst_res output formt.
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the link(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * link(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <sys/types.h>
-#include <sys/fcntl.h>
-#include <sys/stat.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include <sys/param.h> /* for PATH_MAX */
-#include "test.h"
-#include "usctest.h"
-
-void setup();
-void cleanup(void) __attribute__((noreturn));
-
-
-extern char *get_high_address();
-
-const char *TCID="link04"; /* Test program identifier. */
-int TST_TOTAL=14; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0};
-
-int longpath_setup();
-int no_setup();
-int filepath_setup();
-int filepath2_setup();
-char Longpathname[PATH_MAX+2];
-char High_address[64];
-int dir_setup();
-
-struct test_case_t {
- const char *file1;
- const char *desc1;
- const char *file2;
- const char *desc2;
- int exp_errno;
- int (*setupfunc1)();
- int (*setupfunc2)();
-} Test_cases[] = {
- /* This test program should contain test cases where link */
- /* will fail regardless of who executed it (i.e. joe-user or root) */
-
- /* first path is invalid */
-
- { "nonexistfile", "non-existent file", "nefile", "nefile",
- ENOENT, no_setup, no_setup},
-
- { "", "path is empty string", "nefile", "nefile",
- ENOENT, no_setup, no_setup},
-
- { "neefile/file", "path contains a non-existent file", "nefile", "nefile",
- ENOENT, no_setup, no_setup },
-
-#ifndef __CYGWIN__
- { "regfile/file", "path contains a regular file", "nefile", "nefile",
- ENOTDIR, filepath_setup, no_setup },
-#endif
-
- { Longpathname, "pathname too long", "nefile", "nefile",
- ENAMETOOLONG, longpath_setup, no_setup },
-
- { High_address, "address beyond address space", "nefile", "nefile",
- EFAULT, no_setup, no_setup },
-
- { (char *)-1, "negative address", "nefile", "nefile",
- EFAULT, no_setup, no_setup },
-
- /* second path is invalid */
-
- { "regfile", "regfile", "", "empty string",
- ENOENT, no_setup, no_setup},
-
- { "regfile", "regfile", "neefile/file", "path contains a non-existent file",
- ENOENT, filepath_setup, no_setup},
-
- { "regfile", "regfile", "file/file", "path contains a regular file",
- ENOENT, filepath_setup, no_setup},
-
- { "regfile", "regfile", Longpathname, "pathname too long",
- ENAMETOOLONG, no_setup, longpath_setup },
-
- { "regfile", "regfile", High_address, "address beyond address space",
- EFAULT, no_setup, no_setup },
-
- { "regfile", "regfile", (char *)-1, "negative address",
- EFAULT, no_setup, no_setup},
-
- /* two existing files */
-
- { "regfile", "regfile", "regfile2", "regfile2",
- EEXIST, filepath_setup, filepath2_setup },
-
- { NULL, NULL, NULL, NULL, 0, no_setup, no_setup }
-};
-
-
-/***********************************************************************
- * Main
- ***********************************************************************/
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- const char *fname1, *fname2;
- const char *desc1, *desc2;
- int ind;
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *) NULL ) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- for (ind=0; Test_cases[ind].desc1 != NULL; ind++ ) {
-
- fname1 = Test_cases[ind].file1;
- desc1 = Test_cases[ind].desc1;
- fname2 = Test_cases[ind].file2;
- desc2 = Test_cases[ind].desc2;
-
- if ( fname1 == High_address )
- fname1 = get_high_address();
-
- if ( fname2 == High_address )
- fname2 = get_high_address();
-
- /*
- * Call link(2)
- */
- TEST(link(fname1, fname2));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- if ( STD_FUNCTIONAL_TEST ) {
- if ( TEST_ERRNO == Test_cases[ind].exp_errno )
- tst_resm(TPASS, "link(<%s>, <%s>) Failed, errno=%d",
- desc1, desc2, TEST_ERRNO);
- else
- tst_resm(TFAIL,
- "link(<%s>, <%s>) Failed, errno=%d, expected errno:%d",
- desc1, desc2, TEST_ERRNO, Test_cases[ind].exp_errno);
- }
- else
- Tst_count++;
- } else {
- tst_resm(TFAIL,
- "link(<%s>, <%s>) returned %d, expected -1, errno:%d",
- desc1, desc2, TEST_RETURN, Test_cases[ind].exp_errno);
- }
- }
-
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- int ind;
-
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- for (ind=0; Test_cases[ind].desc1 != NULL; ind++ ) {
- Test_cases[ind].setupfunc1();
- Test_cases[ind].setupfunc2();
- }
-
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
-
-/******************************************************************
- *
- ******************************************************************/
-int
-no_setup()
-{
- return 0;
-}
-
-/******************************************************************
- *
- ******************************************************************/
-int
-longpath_setup()
-{
- int ind;
-
- static int alreadycalled = 0;
-
- if ( alreadycalled )
- return 0;
- alreadycalled++;
-
- for(ind=0; ind<= PATH_MAX+1; ind++) {
- Longpathname[ind] = 'a';
- }
- return 0;
-
-}
-
-/******************************************************************
- *
- ******************************************************************/
-int
-filepath2_setup()
-{
- int fd;
- static int alreadycalled = 0;
-
- if ( alreadycalled )
- return 0;
- alreadycalled++;
-
- if ( (fd=creat("regfile2", 0777)) == -1 ) {
- tst_brkm(TBROK, cleanup, "creat(regfile2, 0777) failed, errno:%d %s",
- errno, strerror(errno));
- }
- close(fd);
- return 0;
-}
-/******************************************************************
- *
- ******************************************************************/
-int
-filepath_setup()
-{
- int fd;
- static int alreadycalled = 0;
-
- if ( alreadycalled )
- return 0;
- alreadycalled++;
-
- if ( (fd=creat("regfile", 0777)) == -1 ) {
- tst_brkm(TBROK, cleanup, "creat(regfile, 0777) failed, errno:%d %s",
- errno, strerror(errno));
- }
- close(fd);
- return 0;
-}
-
-/******************************************************************
- *
- ******************************************************************/
-int
-dir_setup()
-{
- static int alreadycalled = 0;
-
- if ( alreadycalled )
- return 0;
- alreadycalled++;
-
- if ( mkdir("dir", 0777) == -1 ) {
- tst_brkm(TBROK, cleanup,
- "mkdir(dir, 0700) Failed, errno=%d : %s",
- errno, strerror(errno));
- }
-
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/ltp/link05.c b/winsup/testsuite/winsup.api/ltp/link05.c
deleted file mode 100644
index 9387c25a8..000000000
--- a/winsup/testsuite/winsup.api/ltp/link05.c
+++ /dev/null
@@ -1,351 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : link05
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : multi links (EMLINK) negative test
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 2
- *
- * WALL CLOCK TIME : 3
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : Richard Logan
- *
- * CO-PILOT : William Roske
- *
- * DATE STARTED : 03/31/94
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) link(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the link(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * link(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <sys/types.h>
-#include <sys/fcntl.h>
-#include <sys/stat.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-void setup();
-void cleanup(void) __attribute__((noreturn));
-void help();
-
-
-
-const char *TCID="link05"; /* Test program identifier. */
-#ifdef CRAY
-int TST_TOTAL=2; /* Total number of test cases. */
-#else
-int TST_TOTAL=1; /* Total number of test cases. */
-#endif
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-#define BASENAME "lkfile"
-
-char Basename[255];
-char Fname[255];
-
-int Nflag=0;
-char *Noptlinks;
-
-/* for test specific parse_opts options */
-option_t options[] = {
- { "N:", &Nflag, &Noptlinks }, /* -N option */
- { NULL, NULL, NULL }
-};
-
-int nlinks = 1000;
-
-/***********************************************************************
- * Main
- ***********************************************************************/
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- struct stat fbuf, lbuf;
- int cnt;
- char lname[255];
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, options, &help)) != (char *) NULL ) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- if ( Nflag ) {
- if ( sscanf(Noptlinks, "%i", &nlinks) != 1 ) {
- tst_brkm(TBROK, cleanup, "-N option invalid, must be numeric");
- }
- }
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- for(cnt=1; cnt < nlinks; cnt++) {
-
- sprintf(lname, "%s%d", Basename, cnt);
- /*
- * Call link(2)
- */
- TEST(link(Fname, lname));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- tst_resm(TFAIL, "link(%s, %s) Failed, errno=%d : %s",
- Fname, lname, TEST_ERRNO, strerror(TEST_ERRNO));
- }
- }
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- stat(Fname, &fbuf);
-
- for(cnt=1; cnt < nlinks; cnt++) {
- sprintf(lname, "%s%d", Basename, cnt);
-
- stat(lname, &lbuf);
- if ( fbuf.st_nlink <= 1 || lbuf.st_nlink <= 1 ||
- (fbuf.st_nlink != lbuf.st_nlink) ) {
-
- tst_resm(TFAIL,
- "link(%s, %s[1-%d]) ret %d for %d files, stat values do not match %d %d",
- Fname, Basename, nlinks, TEST_RETURN, nlinks,
- fbuf.st_nlink, lbuf.st_nlink);
- break;
- }
- }
- if ( cnt >= nlinks ) {
- tst_resm(TPASS,
- "link(%s, %s[1-%d]) ret %d for %d files, stat linkcounts match %d",
- Fname, Basename, nlinks, TEST_RETURN, nlinks,
- fbuf.st_nlink);
- }
- }
- else
- Tst_count++;
-
-#ifdef CRAY
-/*
- * IRIX (xfs) systems do not have the 1000 link limit.
- * I tried 100000 links on 2/97 without error on IRIX 6.4.
- */
- /*
- * Now check that one more link will put you over the top
- */
- sprintf(lname, "%s%d", Basename, cnt);
-
- /*
- * Call link(2)
- */
- TEST(link(Fname, lname));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- if ( STD_FUNCTIONAL_TEST ) {
- if ( TEST_ERRNO == EMLINK ) {
- tst_resm(TPASS,
- "link(%s, %s) ret %d on %d link, errno:%d",
- Fname, lname, TEST_RETURN, nlinks+1, EMLINK);
- }
- else {
- tst_resm(TFAIL,
- "link(%s, %s) ret %d on %d link, errno:%d, expected -1, errno:%d",
- Fname, lname, TEST_RETURN, nlinks+1,
- TEST_ERRNO, EMLINK);
- }
- }
- else
- Tst_count++;
- }
- else {
- tst_resm(TFAIL, "link(%s, %s) ret %d on %d link, expected -1, errno:%d",
- Fname, lname, TEST_RETURN, nlinks+1, EMLINK);
- }
-#endif /* CRAY */
-
- for(cnt=1; cnt < nlinks; cnt++) {
-
- sprintf(lname, "%s%d", Basename, cnt);
-
- if (unlink(lname) == -1) {
- tst_res(TWARN, "unlink(%s) Failed, errno=%d : %s",
- Fname, errno, strerror(errno));
- }
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * help
- ***************************************************************/
-void
-help()
-{
- printf(" -N #links : create #links hard links every iteration\n");
-}
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- int fd;
-
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- sprintf(Fname,"%s_%d", BASENAME, getpid());
- if ((fd = open(Fname,O_RDWR|O_CREAT,0700)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR|O_CREAT,0700) Failed, errno=%d : %s",
- Fname, errno, strerror(errno));
- } else if (close(fd) == -1) {
- tst_res(TWARN, "close(%s) Failed, errno=%d : %s",
- Fname, errno, strerror(errno));
- }
- sprintf(Basename, "%s_%d.", BASENAME, getpid());
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/lseek01.c b/winsup/testsuite/winsup.api/ltp/lseek01.c
deleted file mode 100644
index 22d0c6c39..000000000
--- a/winsup/testsuite/winsup.api/ltp/lseek01.c
+++ /dev/null
@@ -1,255 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : lseek01
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for lseek(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 3
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) lseek(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the lseek(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * lseek(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <sys/types.h>
-#include <sys/fcntl.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-void setup();
-void cleanup(void) __attribute__((noreturn));
-
-
-
-const char *TCID="lseek01"; /* Test program identifier. */
-int TST_TOTAL=3; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0};
-
-char Fname[255];
-int Fd;
-
-int Whence[] = {SEEK_SET, SEEK_CUR, SEEK_END, -1};
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- int ind;
- int offset;
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL ) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- offset=(lc%100)*4096; /* max size is 100 blocks */
-
- for (ind=0; Whence[ind] >= 0; ind++) {
-
- /*
- * Call lseek(2)
- */
- TEST(lseek(Fd, (long)offset, Whence[ind]));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "lseek(%s, %ld, 0) Failed, errno=%d : %s",
- Fname, offset, TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "lseek(%s, %ld, %d) returned %d", Fname,
- offset, Whence[ind], TEST_RETURN);
- }
- else
- Tst_count++;
- }
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- sprintf(Fname, "tfile_%d",getpid());
- if ((Fd = open(Fname,O_RDWR|O_CREAT,0700)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR|O_CREAT,0700) Failed, errno=%d : %s",
- Fname, errno, strerror(errno));
- }
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* close the file we have open */
- if (close(Fd) == -1) {
- tst_resm(TWARN, "close(%s) Failed, errno=%d : %s", Fname, errno, strerror(errno));
- }
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/lseek02.c b/winsup/testsuite/winsup.api/ltp/lseek02.c
deleted file mode 100644
index 04fa3f10f..000000000
--- a/winsup/testsuite/winsup.api/ltp/lseek02.c
+++ /dev/null
@@ -1,242 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : lseek02
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Negative test for lseek(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : Richard Logan
- *
- * CO-PILOT : William Roske
- *
- * DATE STARTED : 04/25/94
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) lseek(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the lseek(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * lseek(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <sys/types.h>
-#include <sys/fcntl.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-void setup();
-void cleanup(void) __attribute__((noreturn));
-
-
-
-const char *TCID="lseek02"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0};
-
-char fname[255];
-int fd;
-
-int Whence[] = {SEEK_SET, SEEK_CUR, SEEK_END, -1};
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL ) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call lseek(2)
- */
- TEST( lseek(-1, (long)1, SEEK_SET) );
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- if ( STD_FUNCTIONAL_TEST ) {
-
- if ( TEST_ERRNO == EBADF )
-
- tst_resm(TPASS,
- "lseek(-1, 1, SEEK_SET) Failed, errno=%d : %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- else
- tst_resm(TFAIL,
- "lseek(-1, 1, SEEK_SET) Failed, errno=%d : %s, expected %d(EBADF)",
- TEST_ERRNO, strerror(TEST_ERRNO), EBADF);
-
- }
- else
- Tst_count++;
-
- } else {
-
- tst_resm(TFAIL, "lseek(-1, 1, SEEK_SET) returned %d",
- TEST_RETURN);
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/lseek03.c b/winsup/testsuite/winsup.api/ltp/lseek03.c
deleted file mode 100644
index 51c303d85..000000000
--- a/winsup/testsuite/winsup.api/ltp/lseek03.c
+++ /dev/null
@@ -1,289 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : lseek03
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Negative test for lseek(2) whence
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 2
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : Richard Logan
- *
- * CO-PILOT : William Roske
- *
- * DATE STARTED : 04/25/94
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) lseek(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the lseek(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * lseek(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <sys/types.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-void setup();
-void cleanup(void) __attribute__((noreturn));
-void rec_sigsys(int);
-
-const char *TCID="lseek03"; /* Test program identifier. */
-int TST_TOTAL=3; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-char fname[255];
-int fd;
-int Rec_sigsys = 0;
-
-int Whences[] = { 4, -1, 7 };
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- unsigned ind;
- int whence;
-
- TST_TOTAL=sizeof(Whences)/sizeof(int);
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL ) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
-
- signal(SIGSYS, rec_sigsys);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- for (ind=0; ind<sizeof(Whences)/sizeof(int); ind++) {
-
- whence=Whences[ind];
-
- /*
- * On IRIX systems, the SIGSYS signal is also sent.
- */
- Rec_sigsys=0;
-
- /*
- * Call lseek(2)
- */
- TEST(lseek(fd, (long)1, whence));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- if ( STD_FUNCTIONAL_TEST ) {
-
- if ( TEST_ERRNO == EINVAL )
-#if defined(sgi)
- if ( Rec_sigsys ) {
- tst_resm(TPASS,
- "lseek(%s, 1, %d) Failed as expected, errno=%d : %s\n\
-and SIGSYS signal was received.",
- fname, whence, TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
- tst_resm(TFAIL,
- "lseek(%s, 1, %d) Failed as expected, errno=%d : %s\n\
-But SIGSYS signal was NOT received.",
- fname, whence, TEST_ERRNO, strerror(TEST_ERRNO));
- }
-#elif defined(linux) || defined (__CYGWIN__)
- tst_resm(TPASS,
- "lseek(%s, 1, %d) Failed, errno=%d : %s",
- fname, whence, TEST_ERRNO, strerror(TEST_ERRNO));
-#endif
- else
- tst_resm(TFAIL,
- "lseek(%s, 1, %d) Failed, errno=%d %s, expected %d(EINVAL)",
- fname, whence, TEST_ERRNO, strerror(TEST_ERRNO),
- EINVAL);
- }
-
- else
- Tst_count++;
- } else {
-
- tst_resm(TFAIL, "lseek(%s, 1, %d) returned %d",
- fname, whence, TEST_RETURN);
- }
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/*
- * signal handler for the SIGSYS signal.
- */
-void
-rec_sigsys(int sig)
-{
- Rec_sigsys++;
-
- signal(sig, rec_sigsys);
-}
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- sprintf(fname,"tfile_%d",getpid());
- if ((fd = open(fname,O_RDWR|O_CREAT,0700)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR|O_CREAT,0700) Failed, errno=%d : %s",
- fname, errno, strerror(errno));
- }
- /* Pause if that option was specified */
- TEST_PAUSE;
-
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* close the file we have open */
- if (close(fd) == -1) {
- tst_resm(TWARN, "close(%s) Failed, errno=%d : %s", fname, errno, strerror(errno));
- }
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/lseek04.c b/winsup/testsuite/winsup.api/ltp/lseek04.c
deleted file mode 100644
index faba3f1bf..000000000
--- a/winsup/testsuite/winsup.api/ltp/lseek04.c
+++ /dev/null
@@ -1,256 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : lseek04
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Negative test for lseek(2) of a fifo
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : Richard Logan
- *
- * CO-PILOT : William Roske
- *
- * DATE STARTED : 04/25/94
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) lseek(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the lseek(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * lseek(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/fcntl.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-void setup();
-void cleanup(void) __attribute__((noreturn));
-
-
-
-const char *TCID="lseek04"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0};
-
-char Fname[255];
-int Fd;
-
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL ) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call lseek(2)
- */
- TEST(lseek(Fd, (long)1, SEEK_SET));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- if ( STD_FUNCTIONAL_TEST ) {
-
- if ( TEST_ERRNO == ESPIPE )
- tst_resm(TPASS,
- "lseek(fifofd, 1, SEEK_SET) Failed, errno=%d : %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- else
- tst_resm(TFAIL,
- "lseek(fifofd, 1, SEEK_SET) Failed, errno=%d %s, expected %d(ESPIPE)",
- TEST_ERRNO, strerror(TEST_ERRNO),
- EINVAL);
- }
- else
- Tst_count++;
- } else {
-
- tst_resm(TFAIL, "lseek(fifofd, 1, SEEK_SET) returned %d",
- TEST_RETURN);
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- sprintf(Fname,"tfile_%d",getpid());
- if ( mkfifo(Fname,0700) == -1) {
- tst_brkm(TBROK, cleanup,
- "mkfifo(%s, 0700) Failed, errno=%d : %s",
- Fname, errno, strerror(errno));
- }
-
- if ( (Fd=open(Fname, O_RDWR, 0777)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR, 0777) Failed, errno=%d : %s",
- Fname, errno, strerror(errno));
- }
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* close the file we have open */
- if (close(Fd) == -1) {
- tst_resm(TWARN, "close(%s) Failed, errno=%d : %s", Fname, errno, strerror(errno));
- }
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/lseek05.c b/winsup/testsuite/winsup.api/ltp/lseek05.c
deleted file mode 100644
index 8867086bd..000000000
--- a/winsup/testsuite/winsup.api/ltp/lseek05.c
+++ /dev/null
@@ -1,252 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : lseek05
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Negative test for lseek(2) of a pipe
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : Richard Logan
- *
- * CO-PILOT : William Roske
- *
- * DATE STARTED : 04/25/94
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) lseek(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the lseek(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * lseek(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <sys/types.h>
-#include <sys/fcntl.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-void setup();
-void cleanup(void) __attribute__((noreturn));
-
-
-
-const char *TCID="lseek05"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0};
-
-int Fd;
-
-/***********************************************************************
- * Main
- ***********************************************************************/
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL ) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call lseek(2)
- */
- TEST(lseek(Fd, (long)1, SEEK_SET));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- if ( STD_FUNCTIONAL_TEST ) {
-
- if ( TEST_ERRNO == ESPIPE )
- tst_resm(TPASS,
- "lseek(pipefd, 1, SEEK_SET) Failed, errno=%d : %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- else
- tst_resm(TFAIL,
- "lseek(pipefd, 1, SEEK_SET) Failed, errno=%d %s, expected %d(ESPIPE)",
- TEST_ERRNO, strerror(TEST_ERRNO),
- EINVAL);
- }
- else
- Tst_count++;
- } else {
-
- tst_resm(TFAIL, "lseek(pipefd, 1, SEEK_SET) returned %d",
- TEST_RETURN);
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- int fds[2];
-
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- if ( pipe(fds) == -1) {
- tst_brkm(TBROK, cleanup,
- "pipe(&fds) Failed, errno=%d : %s", errno, strerror(errno));
- }
- Fd = fds[0];
-
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* close the file we have open */
- if (close(Fd) == -1) {
- tst_resm(TWARN, "close(%d) Failed, errno=%d : %s", Fd, errno, strerror(errno));
- }
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/lseek06.c b/winsup/testsuite/winsup.api/ltp/lseek06.c
deleted file mode 100644
index f62c3422c..000000000
--- a/winsup/testsuite/winsup.api/ltp/lseek06.c
+++ /dev/null
@@ -1,235 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * Test Name: lseek01
- *
- * Test Description:
- * Verify that, lseek() call succeeds to set the file pointer position
- * to less than or equal to the file size, when a file is opened for
- * read or write.
- *
- * Expected Result:
- * lseek() should return the offset from the beginning of the file measured
- * in bytes. Also check if able to read valid data from this location.
- *
- * Algorithm:
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- * Create temporary directory.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise,
- * Verify the Functionality of system call
- * if successful,
- * Issue Functionality-Pass message.
- * Otherwise,
- * Issue Functionality-Fail message.
- * Cleanup:
- * Print errno log and/or timing stats if options given
- * Delete the temporary directory created.
- *
- * Usage: <for command-line>
- * lseek01 [-c n] [-f] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -f : Turn off functionality Testing.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS:
- * None.
- */
-
-#include <sys/types.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <utime.h>
-#include <string.h>
-#include <sys/stat.h>
-#include <signal.h>
-
-#include "test.h"
-#include "usctest.h"
-
-#define OFFSET 4
-#define TEMP_FILE "tmp_file"
-#define FILE_MODE S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH
-
-const char *TCID="lseek01"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-int fildes; /* file handle for temp file */
-
-void setup(); /* Main setup function of test */
-void cleanup(void) __attribute__((noreturn)); /* cleanup function for the test */
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- char read_buf[1]; /* data read from temp. file */
-
- /* Parse standard options given to run the test. */
- msg = parse_opts(ac, av, (option_t *) NULL, NULL);
- if (msg != (char *) NULL) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /* Perform global setup for test */
- setup();
-
- /* Check looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- /* Reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Invoke lseek(2) to move the read/write file
- * pointer/handle by OFFSET bytes.
- */
- TEST(lseek(fildes, OFFSET, SEEK_SET));
-
- /* check return code of lseek(2) */
- if (TEST_RETURN == (off_t)-1) {
- tst_resm(TFAIL, "lseek on (%s) Failed, errno=%d : %s",
- TEMP_FILE, TEST_ERRNO, strerror(TEST_ERRNO));
- continue;
- }
- /*
- * Perform functional verification if test
- * executed without (-f) option.
- */
- if (STD_FUNCTIONAL_TEST) {
- /*
- * Check if the return value from lseek(2)
- * is equal to the specified OFFSET value.
- */
- if (TEST_RETURN != OFFSET) {
- tst_resm(TFAIL, "lseek() returned incorrect "
- "value %d, expected %d",
- TEST_RETURN, OFFSET);
- continue;
- }
- /*
- * The return value is good, now check data.
- * Read the data byte from this location.
- */
- if (read(fildes, &read_buf, sizeof(read_buf)) < 0) {
- tst_brkm(TFAIL, cleanup, "read() failed "
- "on %s, error=%d", TEMP_FILE, errno);
- } else {
- /*
- * Check if read byte is the expected character.
- * For pos 4 ---> 'e'
- */
- if (read_buf[0] != 'e') {
- tst_resm(TFAIL, "Incorrect data read "
- "from file %s", TEMP_FILE);
- } else {
- tst_resm(TPASS, "Functionality "
- "of lseek() on %s "
- "successful", TEMP_FILE);
- }
- }
- } else {
- tst_resm(TPASS, "call succeeded");
- }
- } /* End for TEST_LOOPING */
-
- /* Call cleanup() to undo setup done for the test. */
- cleanup();
-
- /*NOTREACHED*/
-} /* End main */
-
-/*
- * setup() - performs all ONE TIME setup for this test.
- * Create a temporary directory and change directory to it.
- * Create a test file under temporary directory and write some
- * data into it.
- */
-void
-setup()
-{
- char write_buf[BUFSIZ]; /* buffer to hold data */
-
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Get the data to be written to temporary file */
- strcpy(write_buf, "abcdefg");
-
- /* Creat/open a temporary file under above directory */
- if ((fildes = open(TEMP_FILE, O_RDWR | O_CREAT, FILE_MODE)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR|O_CREAT, %#o) Failed, errno=%d :%s",
- TEMP_FILE, FILE_MODE, errno, strerror(errno));
- }
-
- /* Write data into temporary file */
- if(write(fildes, write_buf, strlen(write_buf)) != (int)strlen(write_buf)) {
- tst_brkm(TBROK, cleanup, "write(2) on %s Failed, errno=%d : %s",
- TEMP_FILE, errno, strerror(errno));
- }
-}
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- * Remove the test directory and testfile created in the setup.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* Close the temporary file created */
- if (close(fildes) < 0) {
- tst_brkm(TFAIL, NULL, "close(%s) Failed, errno=%d : %s:",
- TEMP_FILE, errno, strerror(errno));
- }
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/lseek07.c b/winsup/testsuite/winsup.api/ltp/lseek07.c
deleted file mode 100644
index c5a27b5b3..000000000
--- a/winsup/testsuite/winsup.api/ltp/lseek07.c
+++ /dev/null
@@ -1,286 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * Test Name: lseek02
- *
- * Test Description:
- * Verify that, lseek() call succeeds to set the file pointer position
- * to more than the file size, when a file is opened for reading/writing.
- *
- * Expected Result:
- * lseek() should return n+1, where n is the size of the file.
- * Also when some data is written into this file it should start
- * from that offset.
- *
- * Algorithm:
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- * Create temporary directory.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise,
- * Verify the Functionality of system call
- * if successful,
- * Issue Functionality-Pass message.
- * Otherwise,
- * Issue Functionality-Fail message.
- * Cleanup:
- * Print errno log and/or timing stats if options given
- * Delete the temporary directory created.
- *
- * Usage: <for command-line>
- * lseek02 [-c n] [-f] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -f : Turn off functionality Testing.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS:
- * None.
- */
-
-#include <sys/types.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <utime.h>
-#include <string.h>
-#include <sys/stat.h>
-#include <signal.h>
-
-#include "test.h"
-#include "usctest.h"
-
-#define TEMP_FILE "tmp_file"
-#define FILE_MODE S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH
-
-const char *TCID="lseek02"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-int fildes; /* file handle for temp file */
-size_t file_size; /* size of temporary file */
-char write_buf1[BUFSIZ]; /* buffer to hold data */
-char write_buf2[BUFSIZ]; /* buffer to hold data */
-
-void setup(); /* Main setup function of test */
-void cleanup(void) __attribute__((noreturn)); /* cleanup function for the test */
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- char read_buf[BUFSIZ]; /* data read from temp. file */
- off_t offset; /* byte position in temporary file */
-
- /* Parse standard options given to run the test. */
- msg = parse_opts(ac, av, (option_t *) NULL, NULL);
- if (msg != (char *) NULL) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /* Perform global setup for test */
- setup();
-
- /* Check looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- /* Reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /* Set the offset position */
- offset = file_size + (lc * strlen(write_buf2));
-
- /*
- * Invoke lseek(2) to move the write file
- * pointer/handle by the specified offset value.
- */
- TEST(lseek(fildes, offset, SEEK_SET));
-
- /* check return code of lseek(2) */
- if (TEST_RETURN == (off_t)-1) {
- tst_resm(TFAIL, "lseek on (%s) Failed, errno=%d : %s",
- TEMP_FILE, TEST_ERRNO, strerror(TEST_ERRNO));
- continue;
- }
- /*
- * Perform functional verification if test
- * executed without (-f) option.
- */
- if (STD_FUNCTIONAL_TEST) {
- /*
- * Check if the return value from lseek(2)
- * is equal to the specified offset value.
- */
- if (TEST_RETURN != offset) {
- tst_resm(TFAIL, "lseek() returned "
- "incorrect value %d, expected "
- "%d", TEST_RETURN, offset);
- continue;
- }
- /*
- * The return value is okay, now write some data at
- * the current offset position.
- */
- if (write(fildes, write_buf2, strlen(write_buf2)) !=
- (int)strlen(write_buf2)) {
- tst_brkm(TFAIL, cleanup, "write() failed to "
- "write additional data, error = %d",
- errno);
- }
-
- /*
- * Now close the file and open it again
- * and read all of the data.
- */
- if (close(fildes) < 0) {
- tst_brkm(TFAIL, cleanup, "close() on %s Failed,"
- " errno = %d", TEMP_FILE, errno);
- }
-
- /* Open the file again in read/write mode */
- if ((fildes = open(TEMP_FILE, O_RDWR)) < 0) {
- tst_brkm(TFAIL, cleanup, "Could not open the "
- "%s readonly, error = %d",
- TEMP_FILE, errno);
- }
-
- /*
- * Now read all of the data. The size should be the
- * offset + strlen(write_buf2).
- */
- if (read(fildes, &read_buf, (offset +
- strlen(write_buf2))) < 0) {
- tst_brkm(TFAIL, cleanup, "read() failed on %s, "
- "error=%d", TEMP_FILE, errno);
- } else {
- /*
- * Check data read is the complete data and not
- * the only portion written.
- */
- if ((strncmp(read_buf, write_buf1,
- strlen(write_buf1))) != 0) {
- tst_brkm(TFAIL, cleanup,
- "Incorrect data read #1 from "
- "file %s", TEMP_FILE);
- }
- if ((strncmp(&read_buf[offset], write_buf2,
- strlen(write_buf2))) != 0) {
- tst_brkm(TFAIL, cleanup,
- "Incorrect data read #2 from "
- "file %s", TEMP_FILE);
- }
- tst_resm(TPASS, "Functionality of "
- "lseek() on %s successful", TEMP_FILE);
- }
- } else {
- tst_resm(TPASS, "call succeeded");
- }
- } /* End for TEST_LOOPING */
-
- /* Call cleanup() to undo setup done for the test. */
- cleanup();
-
- /*NOTREACHED*/
-} /* End main */
-
-/*
- * setup() - performs all ONE TIME setup for this test.
- * Create a temporary directory and change directory to it.
- * Create a test file under temporary directory and write some
- * data into it.
- * Get the size of the file using fstat().
- */
-void
-setup()
-{
- struct stat stat_buf; /* struct buffer for stat(2) */
-
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Get the data to be written to temporary file */
- strcpy(write_buf1, "abcdefg");
- strcpy(write_buf2, "ijk");
-
- /* Creat/open a temporary file for writing under above directory */
- if ((fildes = open(TEMP_FILE, O_WRONLY | O_CREAT, FILE_MODE)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_WRONLY|O_CREAT, %#o) Failed, errno=%d :%s",
- TEMP_FILE, FILE_MODE, errno, strerror(errno));
- }
-
- /* Write data into temporary file */
- if(write(fildes, write_buf1, strlen(write_buf1)) !=
- (int)strlen(write_buf1)) {
- tst_brkm(TBROK, cleanup, "write(2) on %s Failed, errno=%d : %s",
- TEMP_FILE, errno, strerror(errno));
- }
-
- /* Get the size of the temporary file after writing data */
- if (fstat(fildes, &stat_buf) < 0) {
- tst_brkm(TBROK, cleanup, "fstat() on %s Failed, errno=%d : %s",
- TEMP_FILE, errno, strerror(errno));
- }
-
- file_size = stat_buf.st_size;
-}
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- * Remove the test directory and testfile created in the setup.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* Close the temporary file created */
- if (close(fildes) < 0) {
- tst_brkm(TFAIL, NULL, "close(%s) Failed, errno=%d : %s:",
- TEMP_FILE, errno, strerror(errno));
- }
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/lseek08.c b/winsup/testsuite/winsup.api/ltp/lseek08.c
deleted file mode 100644
index 32fdcc0e4..000000000
--- a/winsup/testsuite/winsup.api/ltp/lseek08.c
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * Test Name: lseek03
- *
- * Test Description:
- * Verify that, lseek() call succeeds to set the file pointer position
- * to the end of the file when 'whence' value set to SEEK_END and any
- * attempts to read from that position should fail.
- *
- * Expected Result:
- * lseek() should return the offset which is set to the file size measured
- * in bytes. read() attempt should fail with -1 return value.
- *
- * Algorithm:
- * Setup:
- * Setup signal handling.
- * Create temporary directory.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise,
- * Verify the Functionality of system call
- * if successful,
- * Issue Functionality-Pass message.
- * Otherwise,
- * Issue Functionality-Fail message.
- * Cleanup:
- * Print errno log and/or timing stats if options given
- * Delete the temporary directory created.
- *
- * Usage: <for command-line>
- * lseek03 [-c n] [-f] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -f : Turn off functionality Testing.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS:
- * None.
- */
-
-#include <sys/types.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <utime.h>
-#include <string.h>
-#include <sys/stat.h>
-#include <signal.h>
-
-#include "test.h"
-#include "usctest.h"
-
-#define TEMP_FILE "tmp_file"
-#define FILE_MODE S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH
-
-const char *TCID="lseek03"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-int fildes; /* file handle for temp file */
-ssize_t file_size; /* size of the temporary file */
-
-void setup(); /* Main setup function of test */
-void cleanup(void) __attribute__((noreturn)); /* cleanup function for the test */
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- char read_buf[1]; /* data read from temp. file */
-
- /* Parse standard options given to run the test. */
- msg = parse_opts(ac, av, (option_t *) NULL, NULL);
- if (msg != (char *) NULL) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /* Perform global setup for test */
- setup();
-
- /* Check looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- /* Reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Invoke lseek(2) to move the read/write file
- * pointer/handle to the END of the file.
- */
- TEST(lseek(fildes, 0, SEEK_END));
-
- /* check return code of lseek(2) */
- if (TEST_RETURN == (off_t)-1) {
- tst_resm(TFAIL, "lseek on (%s) Failed, errno=%d : %s",
- TEMP_FILE, TEST_ERRNO, strerror(TEST_ERRNO));
- continue;
- }
- /*
- * Perform functional verification if test
- * executed without (-f) option.
- */
- if (STD_FUNCTIONAL_TEST) {
- /*
- * Check if the return value from lseek(2)
- * is equal to the file_size.
- */
- if (TEST_RETURN != file_size) {
- tst_resm(TFAIL, "lseek() returned incorrect "
- "value %d, expected %d",
- TEST_RETURN, file_size);
- continue;
- }
- /*
- * The return value is okay, now attempt to read data
- * from the file. This should fail as the file pointer
- * should be pointing to END OF FILE.
- */
- read_buf[0] = '\0';
- if (read(fildes, &read_buf, sizeof(read_buf)) > 0) {
- tst_resm(TFAIL, "read() successful on %s",
- TEMP_FILE);
- } else {
- tst_resm(TPASS, "Functionality of lseek() on "
- "%s successful", TEMP_FILE);
- }
- } else {
- tst_resm(TPASS, "call succeeded");
- }
- } /* End for TEST_LOOPING */
-
- /* Call cleanup() to undo setup done for the test. */
- cleanup();
-
- /* NOTREACHED*/
-} /* End main */
-
-/*
- * setup() - performs all ONE TIME setup for this test.
- * Create a temporary directory and change directory to it.
- * Create a test file under temporary directory and write some
- * data into it.
- * Get the size of the file using fstat().
- */
-void
-setup()
-{
- struct stat stat_buf; /* struct. buffer for stat(2) */
- char write_buf[BUFSIZ]; /* buffer to hold data */
-
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Get the data to be written to temporary file */
- strcpy(write_buf, "abcdefg\n");
-
- /* Creat/open a temporary file under above directory */
- if ((fildes = open(TEMP_FILE, O_RDWR | O_CREAT, FILE_MODE)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR|O_CREAT, %#o) Failed, errno=%d :%s",
- TEMP_FILE, FILE_MODE, errno, strerror(errno));
- }
-
- /* Write data into temporary file */
- if(write(fildes, write_buf, strlen(write_buf)) <= 0) {
- tst_brkm(TBROK, cleanup,
- "write(2) on %s Failed, errno=%d : %s",
- TEMP_FILE, errno, strerror(errno));
- }
-
- /* Get the size of the file using fstat */
- if (fstat(fildes, &stat_buf) < 0) {
- tst_brkm(TBROK, cleanup,
- "fstat(2) on %s Failed, errno=%d : %s",
- TEMP_FILE, errno, strerror(errno));
- }
-
- file_size = stat_buf.st_size;
-}
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- * Remove the test directory and testfile created in the setup.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* Close the temporary file created */
- if (close(fildes) < 0) {
- tst_brkm(TFAIL, NULL,
- "close(%s) Failed, errno=%d : %s:",
- TEMP_FILE, errno, strerror(errno));
- }
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/lseek09.c b/winsup/testsuite/winsup.api/ltp/lseek09.c
deleted file mode 100644
index 36688c656..000000000
--- a/winsup/testsuite/winsup.api/ltp/lseek09.c
+++ /dev/null
@@ -1,266 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * Test Name: lseek04
- *
- * Test Description:
- * Verify that, lseek() call succeeds to set the file pointer position
- * to the current specified location, when 'whence' value is set to
- * SEEK_CUR and the data read from the specified location should match
- * the expected data.
- *
- * Expected Result:
- * lseek() should return the specified offset from the beginning of the file
- * measured in bytes. The data read from this location should match the
- * expected data.
- *
- * Algorithm:
- * Setup:
- * Setup signal handling.
- * Create temporary directory.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise,
- * Verify the Functionality of system call
- * if successful,
- * Issue Functionality-Pass message.
- * Otherwise,
- * Issue Functionality-Fail message.
- * Cleanup:
- * Print errno log and/or timing stats if options given
- * Delete the temporary directory created.
- *
- * Usage: <for command-line>
- * lseek04 [-c n] [-f] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -f : Turn off functionality Testing.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS:
- * None.
- */
-
-#include <sys/types.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <utime.h>
-#include <string.h>
-#include <sys/stat.h>
-#include <signal.h>
-
-#include "test.h"
-#include "usctest.h"
-
-#define TEMP_FILE "tmp_file"
-#define FILE_MODE S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH
-
-const char *TCID="lseek04"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-int fildes; /* file handle for temp file */
-size_t file_size; /* total size of file after data write */
-
-void setup(); /* Main setup function of test */
-void cleanup(void) __attribute__((noreturn)); /* cleanup function for the test */
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- char read_buf[BUFSIZ]; /* data read from temp. file */
-
- /* Parse standard options given to run the test. */
- msg = parse_opts(ac, av, (option_t *) NULL, NULL);
- if (msg != (char *) NULL) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /* Perform global setup for test */
- setup();
-
- /* Check looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- /* Reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Invoke lseek(2) to set the file
- * pointer/handle from the current location
- * of the file descriptor + specified offset.
- */
- TEST(lseek(fildes, 1, SEEK_CUR));
-
- /* check return code of lseek(2) */
- if (TEST_RETURN == (off_t)-1) {
- tst_resm(TFAIL, "lseek on (%s) Failed, errno=%d : %s",
- TEMP_FILE, TEST_ERRNO, strerror(TEST_ERRNO));
- continue;
- }
- /*
- * Perform functional verification if test
- * executed without (-f) option.
- */
- if (STD_FUNCTIONAL_TEST) {
- /*
- * Check if the return value from lseek(2) is equal
- * to the 3 positions from the beginning of the file.
- * ie, 2 positions from lseek() in the setup +
- * 1 position from above above.
- */
- if (TEST_RETURN != 3) {
- tst_resm(TFAIL, "lseek() returned incorrect "
- "value %d, expected 4", TEST_RETURN);
- continue;
- }
- /*
- * Read the data byte from this location.
- */
- read_buf[0] = '\0';
- if (read(fildes, &read_buf, (file_size - 3)) < 0) {
- tst_brkm(TFAIL, cleanup,
- "read() failed on %s, error=%d",
- TEMP_FILE, errno);
- } else {
- /*
- * Check if read data contains
- * expected characters
- * From pos 4 ---> 'defg'.
- */
- if (memcmp(read_buf, "defg", 4)) {
- tst_resm(TFAIL, "Incorrect data read "
- "from file %s", TEMP_FILE);
- } else {
- tst_resm(TPASS, "Functionality of "
- "lseek() on %s successful",
- TEMP_FILE);
- }
- }
- } else {
- tst_resm(TPASS, "call succeeded");
- }
-
- /* reset file pointer in case we are looping */
- if (lseek(fildes, 2, SEEK_SET) == -1) {
- tst_brkm(TBROK, cleanup, "lseek failed - could not "
- "reset file pointer");
- }
- } /* End for TEST_LOOPING */
-
- /* Call cleanup() to undo setup done for the test. */
- cleanup();
-
- /*NOTREACHED*/
-} /* End main */
-
-/*
- * setup() - performs all ONE TIME setup for this test.
- * Create a temporary directory and change directory to it.
- * Create a test file under temporary directory and write some
- * data into it.
- * Get the size of the file using fstat().
- */
-void
-setup()
-{
- struct stat stat_buf; /* buffer to hold stat info. */
- char write_buf[BUFSIZ]; /* buffer to hold data */
-
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Get the data to be written to temporary file */
- strcpy(write_buf, "abcdefg");
-
- /* Creat/open a temporary file under above directory */
- if ((fildes = open(TEMP_FILE, O_RDWR | O_CREAT, FILE_MODE)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR|O_CREAT, %#o) Failed, errno=%d :%s",
- TEMP_FILE, FILE_MODE, errno, strerror(errno));
- }
-
- /* Write data into temporary file */
- if(write(fildes, write_buf, strlen(write_buf)) <= 0) {
- tst_brkm(TBROK, cleanup, "write(2) on %s Failed, errno=%d : %s",
- TEMP_FILE, errno, strerror(errno));
- }
-
- /* Get the temporary file information */
- if (fstat(fildes, &stat_buf) < 0) {
- tst_brkm(TBROK, cleanup, "fstat(2) on %s Failed, errno=%d : %s",
- TEMP_FILE, errno, strerror(errno));
- }
-
- file_size = stat_buf.st_size;
-
- /*
- * Reset the file pointer position to the specified offset
- * from the beginning of the file.
- */
- if (lseek(fildes, 2, SEEK_SET) != 2) {
- tst_brkm(TBROK, cleanup,
- "lseek() fails to set file ptr. to specified offset");
- }
-}
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- * Remove the test directory and testfile created in the setup.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* Close the temporary file created */
- if (close(fildes) < 0) {
- tst_brkm(TFAIL, NULL, "close(%s) Failed, errno=%d : %s:",
- TEMP_FILE, errno, strerror(errno));
- }
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/lseek10.c b/winsup/testsuite/winsup.api/ltp/lseek10.c
deleted file mode 100644
index ab3cc6ba3..000000000
--- a/winsup/testsuite/winsup.api/ltp/lseek10.c
+++ /dev/null
@@ -1,344 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * Test Name: lseek05
- *
- * Test Description:
- * Verify that,
- * 1. lseek() returns -1 and sets errno to ESPIPE, if the file handle of
- * the specified file is associated with a pipe, socket, or FIFO.
- * 2. lseek() returns -1 and sets errno to EINVAL, if the 'Whence' argument
- * is not a proper value.
- * 3. lseek() returns -1 and sets errno to EBADF, if the file handle of
- * the specified file is not valid.
- *
- * Expected Result:
- * lseek() should fail with return value -1 and set expected errno.
- *
- * Algorithm:
- * Setup:
- * Setup signal handling.
- * Create temporary directory.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * if errno set == expected errno
- * Issue sys call fails with expected return value and errno.
- * Otherwise,
- * Issue sys call fails with unexpected errno.
- * Otherwise,
- * Issue sys call returns unexpected value.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- * Delete the temporary directory(s)/file(s) created.
- *
- * Usage: <for command-line>
- * lseek05 [-c n] [-e] [-i n] [-I x] [-p x] [-t]
- * where, -c n : Run n copies concurrently.
- * -e : Turn on errno logging.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS:
- * None.
- */
-
-#include <sys/types.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <utime.h>
-#include <string.h>
-#include <sys/stat.h>
-#include <signal.h>
-
-#include "test.h"
-#include "usctest.h"
-
-#define TEMP_FILE1 "tmp_file1"
-#define TEMP_FILE2 "tmp_file2"
-#define TEMP_FILE3 "tmp_file3"
-#define FILE_MODE S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH
-#define PIPE_MODE S_IFIFO | S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH
-#define SEEK_TOP 10
-
-const char *TCID="lseek05"; /* Test program identifier. */
-int TST_TOTAL=3; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-int exp_enos[]={ESPIPE, EINVAL, EBADF, 0};
-
-int no_setup();
-int setup1(); /* setup function to test lseek() for ESPIPE */
-int setup2(); /* setup function to test lseek() for EINVAL */
-int setup3(); /* setup function to test lseek() for EBADF */
-
-int fd1; /* file handle for testfile1 */
-int fd2; /* file handle for testfile2 */
-int fd3; /* file handle for testfile3 */
-
-struct test_case_t { /* test case struct. to hold ref. test cond's*/
- int fd;
- int Whence;
- const char *desc;
- int exp_errno;
- int (*setupfunc)();
-} Test_cases[] = {
- { 1, SEEK_SET, "'fd' associated with a pipe/fifo", ESPIPE, setup1 },
- { 2, SEEK_TOP, "'whence' argument is not valid", EINVAL, setup2 },
- { 3, SEEK_SET, "'fd' is not an open file descriptor", EBADF, setup3 },
- { 0, 0, NULL, 0, no_setup }
-};
-
-void setup(); /* Main setup function of test */
-void cleanup(void) __attribute__((noreturn)); /* cleanup function for the test */
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- int fildes; /* file handle for testfile */
- int whence; /* position of file handle in the file */
- const char *test_desc; /* test specific error message */
- int ind; /* counter to test different test conditions */
-
- /* Parse standard options given to run the test. */
- msg = parse_opts(ac, av, (option_t *) NULL, NULL);
- if (msg != (char *) NULL) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /* Perform global setup for test */
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /* Check looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- /* Reset Tst_count in case we are looping. */
- Tst_count=0;
-
- for (ind = 0; Test_cases[ind].desc != NULL; ind++) {
- fildes = Test_cases[ind].fd;
- test_desc = Test_cases[ind].desc;
- whence = Test_cases[ind].Whence;
-
- /* Assign the 'fd' values appropriatly */
- if (fildes == 1) {
- fildes = fd1;
- } else if (fildes == 2) {
- fildes = fd2;
- } else {
- fildes = fd3;
- }
- /*
- * Invoke lseek(2) to test different test conditions.
- * Verify that it fails with -1 return value and
- * sets appropriate errno.
- */
- TEST(lseek(fildes, 0, whence));
-
- /* check return code of lseek(2) */
- if (TEST_RETURN != (off_t)-1) {
- tst_resm(TFAIL, "lseek() returned %d, expected "
- "-1, errno:%d", TEST_RETURN,
- Test_cases[ind].exp_errno);
- continue;
- }
- TEST_ERROR_LOG(TEST_ERRNO);
- if (TEST_ERRNO == Test_cases[ind].exp_errno) {
- tst_resm(TPASS, "lseek() fails, %s, errno:%d",
- test_desc, TEST_ERRNO);
- } else {
- tst_resm(TFAIL, "lseek() fails, %s, errno:%d, "
- "expected errno:%d", test_desc,
- TEST_ERRNO, Test_cases[ind].exp_errno);
- }
- }
- }
-
- /* Call cleanup() to undo setup done for the test. */
- cleanup();
-
- /*NOTREACHED*/
-} /* End main */
-
-/*
- * setup() - performs all ONE TIME setup for this test.
- * Create a temporary directory and change directory to it.
- * Invoke individual test setup functions according to the order
- * set in test struct. definition.
- */
-void
-setup()
-{
- int ind; /* counter for test setup function */
-
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* call individual setup functions */
- for (ind = 0; Test_cases[ind].desc != NULL; ind++) {
- Test_cases[ind].setupfunc();
- }
-}
-
-/*
- * no_setup() - This is a dummy function which simply returns 0.
- */
-int
-no_setup()
-{
- return 0;
-}
-
-/*
- * setup1() - setup function for a test condition for which lseek(2)
- * returns -1 and sets errno to ESPIPE.
- * Creat a named pipe/fifo using mknod() and open it for
- * reading/writing.
- * This function returns 0 on success.
- */
-int
-setup1()
-{
- /* Creat a named pipe/fifo using mknod() */
- if (mknod(TEMP_FILE1, PIPE_MODE, 0) < 0) {
- tst_brkm(TBROK, cleanup,
- "mknod(%s, %#o, 0) Failed, errno=%d :%s",
- TEMP_FILE1, FILE_MODE, errno, strerror(errno));
- }
-
- /* Open the named pipe/fifo for reading/writing */
- if ((fd1 = open(TEMP_FILE1, O_RDWR)) < 0) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR) Failed, errno=%d, :%s",
- TEMP_FILE1, errno, strerror(errno));
- }
-
- return 0;
-}
-
-/*
- * setup2() - setup function for a test condition for which lseek(2)
- * returns -1 and sets errno to EINVAL.
- * Creat a temporary file for reading/writing and write some data
- * into it.
- * This function returns 0 on success.
- */
-int
-setup2()
-{
- char write_buff[BUFSIZ]; /* buffer to hold data */
-
- /* Get the data to be written to temporary file */
- strcpy(write_buff, "abcdefg");
-
- /* Creat/open a temporary file under above directory */
- if ((fd2 = open(TEMP_FILE2, O_RDWR | O_CREAT, FILE_MODE)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR|O_CREAT, %#o) Failed, errno=%d :%s",
- TEMP_FILE2, FILE_MODE, errno, strerror(errno));
- }
-
- /* Write data into temporary file */
- if(write(fd2, write_buff, sizeof(write_buff)) <= 0) {
- tst_brkm(TBROK, cleanup,
- "write(2) on %s Failed, errno=%d : %s",
- TEMP_FILE2, errno, strerror(errno));
- }
-
- return 0;
-}
-
-/*
- * setup3() - setup function for a test condition for which lseek(2)
- * returns -1 and sets errno to EBADF.
- * Creat a temporary file for reading/writing and close it.
- * This function returns 0 on success.
- */
-int
-setup3()
-{
- /* Creat/open a temporary file under above directory */
- if ((fd3 = open(TEMP_FILE3, O_RDWR | O_CREAT, FILE_MODE)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR|O_CREAT, %#o) Failed, errno=%d :%s",
- TEMP_FILE3, FILE_MODE, errno, strerror(errno));
- }
-
- /* Close the temporary file created above */
- if (close(fd3) < 0) {
- tst_brkm(TBROK, cleanup,
- "close(%s) Failed, errno=%d : %s:",
- TEMP_FILE3, errno, strerror(errno));
- }
-
- return 0;
-}
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- * Remove the test directory and testfile(s) created in the setup.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* Close the temporary file(s) created in setup1/setup2*/
- if (close(fd1) < 0) {
- tst_brkm(TFAIL, NULL,
- "close(%s) Failed, errno=%d : %s:",
- TEMP_FILE1, errno, strerror(errno));
- }
- if (close(fd2) < 0) {
- tst_brkm(TFAIL, NULL,
- "close(%s) Failed, errno=%d : %s:",
- TEMP_FILE2, errno, strerror(errno));
- }
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/lstat02.c b/winsup/testsuite/winsup.api/ltp/lstat02.c
deleted file mode 100644
index eed8f78c7..000000000
--- a/winsup/testsuite/winsup.api/ltp/lstat02.c
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : lstat02
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for lstat(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) lstat(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the lstat(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * lstat(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <sys/types.h>
-#include <sys/fcntl.h>
-#include <sys/stat.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-
-const char *TCID="lstat02"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0};
-
-char fname[255], lname[255], symlnk[255], buf[255];
-int fd;
-struct stat statter;
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call lstat(2)
- */
- TEST(lstat(symlnk, &statter));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "lstat(%s, &statter) Failed, errno=%d : %s", symlnk,
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "lstat(%s, &statter) returned %d", symlnk, TEST_RETURN);
- }
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- sprintf(fname,"tfile_%d",getpid());
- if ((fd = open(fname,O_RDWR|O_CREAT,0700)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR|O_CREAT,0700) Failed, errno=%d : %s",
- fname, errno, strerror(errno));
- } else if (close(fd) == -1) {
- tst_resm(TWARN, "close(%s) Failed, errno=%d : %s",
- fname, errno, strerror(errno));
- }
-
- sprintf(symlnk,"lnfile_%d",getpid());
- if (symlink(fname, symlnk) == -1) {
- tst_resm(TWARN, "symlink(%s, %s) Failed, errno=%d : %s",
- fname, symlnk, errno, strerror(errno));
- } else if (readlink(symlnk, buf, 255) == -1) {
- tst_resm(TWARN, "readlink(%s, buf, 255) Failed, errno=%d : %s",
- symlnk, errno, strerror(errno));
- } else if (strcmp(buf, fname) != 0) {
- tst_resm(TWARN,
- "Setup Failure : Expected symbolic link contents of %s : Actual is %s",
- fname, buf);
- }
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/mkdir01.c b/winsup/testsuite/winsup.api/ltp/mkdir01.c
deleted file mode 100644
index 5772f0683..000000000
--- a/winsup/testsuite/winsup.api/ltp/mkdir01.c
+++ /dev/null
@@ -1,270 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : mkdir01
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic errno test for mkdir(2)
- *
- * PARENT DOCUMENT : mkstds02
- *
- * TEST CASE TOTAL : 2
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : Bill Branum
- *
- * CO-PILOT : Kathy Olmsted
- *
- * DATE STARTED : 4/15/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * mkdir(2) test for errno(s) EFAULT.
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * DETAILED DESCRIPTION
- * This test will verify that mkdir(2) returns a value of
- * -1 and sets errno to EFAULT when the path argument points
- * outside (above/below) the allocated address space of the
- * process.
- *
- * Setup:
- * Setup signal handling.
- * Create and make current a temporary directory.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno.
- * If doing functional test
- * check the errno returned and print result message
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- * Remove the temporary directory.
- * Exit.
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <fcntl.h>
-#include "test.h"
-#include "usctest.h"
-
-void setup();
-void cleanup(void) __attribute__((noreturn));
-
-
-char *get_high_address();
-
-const char *TCID="mkdir01"; /* Test program identifier. */
-int TST_TOTAL=2; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={EFAULT, 0}; /* List must end with 0 */
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * TEST CASE: 1
- * mkdir() call with pointer below allocated address space.
- */
-
- /* Call mkdir(2) */
- TEST(mkdir((char *)-1,0777));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- }
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- if ( TEST_RETURN == -1 ) {
- if (TEST_ERRNO == EFAULT) {
- tst_resm(TPASS, "mkdir - path argument pointing below allocated address space failed as expected with errno %d : %s", TEST_ERRNO, strerror(TEST_ERRNO));
- }
- else {
- tst_resm(TFAIL, "mkdir - path argument pointing below allocated address space failed with errno %d : %s but expected %d (EFAULT)", TEST_ERRNO, strerror(TEST_ERRNO),EFAULT);
- }
- }
- else {
- tst_resm(TFAIL, "mkdir - path argument pointing below allocated address space succeeded unexpectedly.");
-
- }
- }
-
-
- /*
- * TEST CASE: 2
- * mkdir() call with pointer above allocated address space.
- */
-
- /* Call mkdir(2) */
- TEST(mkdir(get_high_address(),0777));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- }
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- if ( TEST_RETURN == -1 ) {
- if (TEST_ERRNO == EFAULT) {
- tst_resm(TPASS, "mkdir - path argument pointing above allocated address space failed as expected with errno %d : %s", TEST_ERRNO, strerror(TEST_ERRNO));
- }
- else {
- tst_resm(TFAIL, "mkdir - path argument pointing above allocated address space failed with errno %d : %s but expected %d (EFAULT)", TEST_ERRNO, strerror(TEST_ERRNO),EFAULT);
- }
- }
- else {
- tst_resm(TFAIL, "mkdir - path argument pointing above allocated address space succeeded unexpectedly.");
-
- }
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Create a temporary directory and make it current. */
- tst_tmpdir();
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /*
- * Remove the temporary directory.
- */
- tst_rmdir();
-
- /*
- * Exit with return code appropriate for results.
- */
- tst_exit();
-
-} /* End cleanup() */
-
-
diff --git a/winsup/testsuite/winsup.api/ltp/mkdir08.c b/winsup/testsuite/winsup.api/ltp/mkdir08.c
deleted file mode 100644
index d1cc19344..000000000
--- a/winsup/testsuite/winsup.api/ltp/mkdir08.c
+++ /dev/null
@@ -1,235 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : mkdir08
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for mkdir(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) mkdir(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the mkdir(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * mkdir(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <fcntl.h>
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-
-const char *TCID="mkdir08"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0};
-
-char fname[255];
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call mkdir(2)
- */
- TEST(mkdir(fname, 0777));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "mkdir(%s) Failed, errno=%d : %s", fname,
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "mkdir(%s) returned %d", fname, TEST_RETURN);
- }
- if(rmdir(fname) == -1) {
- tst_brkm(TBROK, cleanup, "rmdir(%s) Failed, errno=%d : %s",
- fname, errno, strerror(errno));
- }
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
-
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- sprintf(fname, "./dir_%d", getpid());
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/mknod01.c b/winsup/testsuite/winsup.api/ltp/mknod01.c
deleted file mode 100644
index e25194e0c..000000000
--- a/winsup/testsuite/winsup.api/ltp/mknod01.c
+++ /dev/null
@@ -1,275 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : mknod01
- *
- * EXECUTED BY : root
- *
- * TEST TITLE : Basic test for mknod(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 4
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 05/13/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) mknod(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the mknod(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * mknod(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#include "test.h"
-#include "usctest.h"
-
-void setup();
-void cleanup(void) __attribute__((noreturn));
-
-
-
-const char *TCID="mknod01"; /* Test program identifier. */
-int TST_TOTAL; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-char Path[1024]; /* path to create */
-int i; /* counter for test case loop */
-int tcases[] = { /* modes to give nodes created (1 per text case) */
- S_IFREG|0777, /* ordinary file with mode 0777 */
- S_IFIFO|0777, /* fifo special with mode 0777 */
- S_IFCHR|0777, /* character special with mode 0777 */
- S_IFBLK|0777, /* block special with mode 0777 */
-
- S_IFREG|04700, /* ordinary file with mode 04700 (suid) */
- S_IFREG|02700, /* ordinary file with mode 02700 (sgid) */
- S_IFREG|06700, /* ordinary file with mode 06700 (sgid & suid) */
-
-#ifdef CRAY
- S_IFDIR|0777, /* Direcory */
- S_IRESTART|0400, /* restartbit */
-#ifdef S_IFOFD
- S_IFOFD|0777, /* off line, with data */
-#endif
-#ifdef S_IFOFL
- S_IFOFL|0777, /* off line, with no data */
-#endif
-#endif /* CRAY */
-
-};
-
-
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- TST_TOTAL=(sizeof(tcases)/sizeof(tcases[0]));
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL ) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
-
- /*
- * TEST CASES:
- * Make nodes in tcases array
- */
- for(i=0; i<TST_TOTAL; i++) {
- /* Call mknod(2) */
- TEST(mknod(Path, tcases[i], 0));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "mknod(%s, %#o, 0) failed, errno=%d : %s",
- Path, tcases[i], TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "mknod(%s, %#o, 0) returned %d",
- Path, tcases[i], TEST_RETURN);
- }
- }
-
- /* remove the node for the next go `round */
- if (unlink(Path) == -1 ) {
- if ( rmdir(Path) == -1 ) {
- tst_resm(TWARN, "unlink(%s) & rmdir(%s) failed, errno:%d %s",
- Path, Path, errno, strerror(errno));
- }
- }
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* make a temp dir and cd to it */
- tst_tmpdir();
-
-#ifndef __CYGWIN__
- /* Check that user is root */
- if ( geteuid() != 0 )
- tst_brkm(TBROK, cleanup, "Must be root for this test!");
-#endif
-
- /* build a temp node name to bre created my mknod */
- sprintf(Path, "./tnode_%d", getpid());
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* remove files and temp dir */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
-
-
diff --git a/winsup/testsuite/winsup.api/ltp/mmap001.c b/winsup/testsuite/winsup.api/ltp/mmap001.c
deleted file mode 100644
index 6c47d49c1..000000000
--- a/winsup/testsuite/winsup.api/ltp/mmap001.c
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- * mmap001.c - Tests mmapping a big file and writing it once
- *
- * Copyright (C) 2000 Juan Quintela <quintela@fi.udc.es>
- * Aaron Laffin <alaffin@sgi.com>
- *
- * 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 <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <sys/mman.h>
-#include <errno.h>
-#include <string.h>
-
-#include "test.h"
-#include "usctest.h"
-
-const char *TCID="mmap001";
-int TST_TOTAL=5;
-extern int Tst_count;
-static char *filename=NULL;
-static int m_opt = 0;
-static char *m_copt;
-
-void cleanup()
-{
- /*
- * remove the tmp directory and exit
- */
-
- if ( filename )
- free(filename);
-
- TEST_CLEANUP;
-
- tst_rmdir();
-
- tst_exit();
-}
-
-void setup()
-{
- char buf[1024];
- /*
- * setup a default signal hander and a
- * temporary working directory.
- */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- tst_tmpdir();
-
- TEST_PAUSE;
-
- snprintf(buf,1024,"testfile.%d",getpid());
-
- filename = strdup(buf);
-}
-
-void help()
-{
- printf(" -m x size of mmap in pages (default 1000)\n");
-}
-
-/*
- * add the -m option whose parameter is the
- * pages that should be mapped.
- */
-option_t options[] =
-{
- { "m:", &m_opt, &m_copt },
- { NULL, NULL, NULL }
-};
-
-int main(int argc, char * argv[])
-{
- char *array;
- const char *msg;
- int i,lc;
- int fd;
- int pages,memsize;
-
- if ( (msg=parse_opts(argc, argv, options, help)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- if ( m_opt )
- {
- memsize = pages = atoi( m_copt );
-
- if (memsize < 1)
- {
- tst_brkm(TBROK, cleanup, "Invalid arg for -m: %s",m_copt);
- }
-
- memsize *= getpagesize(); /* N PAGES */
-
- }
- else
- {
- /*
- * default size 1000 pages;
- */
- memsize = pages = 1000;
- memsize *= getpagesize();
- }
-
- tst_resm(TINFO,"mmap()ing file of %u pages or %u bytes", pages,memsize);
-
- setup();
-
- for (lc=0; TEST_LOOPING(lc); lc++)
- {
- Tst_count=0;
-
- fd = open(filename, O_RDWR | O_CREAT, 0666);
- if ((fd == -1))
- tst_brkm(TBROK, cleanup, "Problems opening files");
-
- if (lseek(fd, memsize, SEEK_SET) != memsize)
- {
- close(fd);
- tst_brkm(TBROK, cleanup, "Problems doing the lseek: %d: %s",
- errno,strerror(errno));
- }
-
- if (write(fd,"\0",1) !=1)
- {
- close(fd);
- tst_brkm(TBROK, cleanup, "Problems writing: %d: %s",
- errno,strerror(errno));
- }
-
- array = mmap(0, memsize, PROT_WRITE, MAP_SHARED,fd,0);
- if (array == (char *)MAP_FAILED)
- {
- tst_resm(TFAIL, "mmap() failed: %d: %s",
- errno,strerror(errno));
- tst_exit();
- }
- else
- {
- tst_resm(TPASS, "mmap() completed successfully.");
- }
-
- if ( STD_FUNCTIONAL_TEST )
- {
- tst_resm(TINFO,"touching mmaped memory");
-
- for(i = 0; i < memsize; i++)
- {
- array[i] = (char) i;
- }
-
- /*
- * seems that if the map area was bad, we'd get SEGV, hence we can
- * indicate a PASS.
- */
- tst_resm(TPASS, "we're still here, mmaped area must be good");
-
- TEST( msync(array, memsize, MS_SYNC) );
-
- if ( TEST_RETURN == -1 )
- {
- tst_resm(TFAIL, "msync() failed: errno: %d: %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- }
- else
- {
- tst_resm(TPASS, "msync() was successful");
- }
-
- } /* STD_FUNCTIONAL_TEST */
-
- TEST( munmap(array, memsize) );
-
- if ( TEST_RETURN == -1 )
- {
- tst_resm(TFAIL, "munmap() failed: errno: %d: %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- }
- else
- {
- tst_resm(TPASS, "munmap() was successful");
- }
-
- close(fd);
- unlink(filename);
- }
- cleanup();
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/ltp/mmap02.c b/winsup/testsuite/winsup.api/ltp/mmap02.c
deleted file mode 100644
index 33a12738c..000000000
--- a/winsup/testsuite/winsup.api/ltp/mmap02.c
+++ /dev/null
@@ -1,291 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * Test Name: mmap02
- *
- * Test Description:
- * Call mmap() with prot parameter set to PROT_READ and with the file
- * descriptor being open for read, to map a file creating mapped memory
- * with read access. The minimum file permissions should be 0444.
- *
- * The call should succeed to create the mapped region with required
- * attributes.
- *
- * Expected Result:
- * mmap() should succeed returning the address of the mapped region,
- * the mapped region should contain the contents of the mapped file.
- *
- * Algorithm:
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- * Create temporary directory.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise,
- * Verify the Functionality of system call
- * if successful,
- * Issue Functionality-Pass message.
- * Otherwise,
- * Issue Functionality-Fail message.
- * Cleanup:
- * Print timing stats if options given
- * Delete the temporary directory created.
- *
- * Usage: <for command-line>
- * mmap02 [-c n] [-f] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -f : Turn off functionality Testing.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS:
- * None.
- */
-
-#include <sys/types.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <string.h>
-#include <signal.h>
-#include <sys/stat.h>
-#include <sys/mman.h>
-
-#include "test.h"
-#include "usctest.h"
-
-#define TEMPFILE "mmapfile"
-
-const char *TCID="mmap02"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-char *addr; /* addr of memory mapped region */
-char *dummy; /* dummy string */
-size_t page_sz; /* system page size */
-int fildes = -1; /* file descriptor for temporary file */
-
-void setup(); /* Main setup function of test */
-void cleanup(void) __attribute__((noreturn)); /* cleanup function for the test */
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /* Parse standard options given to run the test. */
- msg = parse_opts(ac, av, (option_t *) NULL, NULL);
- if (msg != (char *) NULL) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /* Perform global setup for test */
- setup();
-
- /* Check looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- /* Reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call mmap to map the temporary file 'TEMPFILE'
- * with read access.
- */
- TEST(mmap(0, page_sz, PROT_READ,
- MAP_FILE|MAP_SHARED, fildes, 0));
-
- /* Check for the return value of mmap() */
- if (TEST_RETURN == (int)MAP_FAILED) {
- tst_resm(TFAIL, "mmap() Failed on %s, errno=%d : %s",
- TEMPFILE, errno, strerror(errno));
- continue;
- }
- /*
- * Perform functional verification if test
- * executed without (-f) option.
- */
- if (STD_FUNCTIONAL_TEST) {
- /* Get the mmap return value */
- addr = (char *)TEST_RETURN;
-
- /*
- * Read the file contents into the dummy
- * string.
- */
- if (read(fildes, dummy, page_sz) < 0) {
- tst_brkm(TFAIL, cleanup, "read() on %s Failed, "
- "error:%d", TEMPFILE, errno);
- }
-
- /*
- * Check whether mapped memory region has
- * the file contents.
- */
- if (memcmp(dummy, addr, page_sz)) {
- tst_resm(TFAIL, "mapped memory area contains "
- "invalid data");
- } else {
- tst_resm(TPASS,
- "Functionality of mmap() successful");
- }
- } else {
- tst_resm(TPASS, "call succeeded");
- }
-
- /* Clean up things in case we are looping */
- /* Unmap the mapped memory */
- if (munmap(addr, page_sz) != 0) {
- tst_brkm(TFAIL, NULL, "munmap() fails to unmap the "
- "memory, errno=%d", errno);
- }
-
- } /* End for TEST_LOOPING */
-
- /* Call cleanup() to undo setup done for the test. */
- cleanup();
-
- /*NOTREACHED*/
-} /* End main */
-
-/*
- * setup() - performs all ONE TIME setup for this test.
- *
- * Get system page size, allocate and initialize the string dummy.
- * Initialize addr such that it is more than one page below the break
- * address of the process, and initialize one page region from addr
- * with char 'A'.
- * Create a temporary directory a file under it.
- * Write some known data into file and close it.
- * Change mode permissions on file to 0444.
- */
-void
-setup()
-{
- char *tst_buff; /* test buffer to hold known data */
-
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- /* Get the system page size */
- if ((page_sz = getpagesize()) < 0) {
- tst_brkm(TFAIL, NULL,
- "getpagesize() fails to get system page size");
- tst_exit();
- }
-
- /* Allocate space for the test buffer */
- if ((tst_buff = (char *)calloc(page_sz, sizeof(char))) == NULL) {
- tst_brkm(TFAIL, NULL,
- "calloc() failed to allocate space for tst_buff");
- tst_exit();
- }
-
- /* Fill the test buffer with the known data */
- memset(tst_buff, 'A', page_sz);
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Creat a temporary file used for mapping */
- if ((fildes = open(TEMPFILE, O_RDWR | O_CREAT, 0666)) < 0) {
- tst_brkm(TFAIL, NULL, "open() on %s Failed, errno=%d : %s",
- TEMPFILE, errno, strerror(errno));
- free(tst_buff);
- cleanup();
- }
-
- /* Write test buffer contents into temporary file */
- if (write(fildes, tst_buff, sizeof(tst_buff)) < (int)sizeof(tst_buff)) {
- tst_brkm(TFAIL, NULL, "write() on %s Failed, errno=%d : %s",
- TEMPFILE, errno, strerror(errno));
- free(tst_buff);
- cleanup();
- }
-
- /* Free the memory allocated for test buffer */
- free(tst_buff);
-
- /* Close the temporary file */
- if (close(fildes) < 0) {
- tst_brkm(TFAIL, cleanup, "close() Failed on %s, errno=%d : %s",
- TEMPFILE, errno, strerror(errno));
- }
-
- /* Change Mode permissions on Temporary file */
- if (chmod(TEMPFILE, 0444) < 0) {
- tst_brkm(TFAIL, cleanup, "chmod(%s, 0444) Failed, errno=%d : "
- "%s", TEMPFILE, errno, strerror(errno));
- }
-
- /* Open the temporary file again, - Readonly mode */
- if ((fildes = open(TEMPFILE, O_RDONLY)) < 0) {
- tst_brkm(TFAIL, cleanup, "open(%s, O_RDONLY) Failed, errno=%d "
- ": %s", TEMPFILE, errno, strerror(errno));
- }
-
-
- /* Allocate and initialize dummy string of system page size bytes */
- if ((dummy = (char *)calloc(page_sz, sizeof(char))) == NULL) {
- tst_brkm(TFAIL, NULL, "calloc() failed to allocate space");
- tst_exit();
- }
-
-}
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- * Free the memory allocated to dummy variable.
- * Remove the temporary directory created.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- */
- TEST_CLEANUP;
-
- /* Free the memory allocated for dummy string */
- if (dummy) {
- free(dummy);
- }
-
- if (fildes >= 0)
- close (fildes);
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/mmap03.c b/winsup/testsuite/winsup.api/ltp/mmap03.c
deleted file mode 100644
index 9302d335d..000000000
--- a/winsup/testsuite/winsup.api/ltp/mmap03.c
+++ /dev/null
@@ -1,290 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * Test Name: mmap03
- *
- * Test Description:
- * Call mmap() to map a file creating a mapped region with execute access
- * under the following conditions -
- * - The prot parameter is set to PROT_EXE
- * - The file descriptor is open for read
- * - The file being mapped has execute permission bit set.
- * - The minimum file permissions should be 0555.
- *
- * The call should succeed to map the file creating mapped memory with the
- * required attributes.
- *
- * Expected Result:
- * mmap() should succeed returning the address of the mapped region,
- * and the mapped region should contain the contents of the mapped file.
- *
- * Algorithm:
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- * Create temporary directory.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise,
- * Verify the Functionality of system call
- * if successful,
- * Issue Functionality-Pass message.
- * Otherwise,
- * Issue Functionality-Fail message.
- * Cleanup:
- * Print timing stats if options given
- * Delete the temporary directory created.
- *
- * Usage: <for command-line>
- * mmap03 [-c n] [-f] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -f : Turn off functionality Testing.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS:
- * None.
- */
-
-#include <sys/types.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <string.h>
-#include <signal.h>
-#include <sys/stat.h>
-#include <sys/mman.h>
-
-#include "test.h"
-#include "usctest.h"
-
-#define TEMPFILE "mmapfile"
-
-const char *TCID="mmap03"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-size_t page_sz; /* system page size */
-char *addr; /* addr of memory mapped region */
-char *dummy; /* dummy variable to hold temp file contents */
-int fildes = -1; /* file descriptor for temporary file */
-
-void setup(); /* Main setup function of test */
-void cleanup(void) __attribute__((noreturn)); /* cleanup function for the test */
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /* Parse standard options given to run the test. */
- msg = parse_opts(ac, av, (option_t *) NULL, NULL);
- if (msg != (char *) NULL) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /* Perform global setup for test */
- setup();
-
- /* Check looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- /* Reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call mmap to map the temporary file 'TEMPFILE'
- * with execute access.
- */
- TEST(mmap(0, page_sz, PROT_EXEC,
- MAP_FILE|MAP_SHARED, fildes, 0));
-
- /* Check for the return value of mmap() */
- if (TEST_RETURN == (int)MAP_FAILED) {
- tst_resm(TFAIL, "mmap() Failed on %s, errno=%d : %s",
- TEMPFILE, errno, strerror(errno));
- continue;
- }
- /*
- * Perform functional verification if test
- * executed without (-f) option.
- */
- if (STD_FUNCTIONAL_TEST) {
- /* Get the mmap return value */
- addr = (char *)TEST_RETURN;
-
- /*
- * Read the file contents into the dummy
- * variable.
- */
- if (read(fildes, dummy, page_sz) < 0) {
- tst_brkm(TFAIL, cleanup, "read() on %s Failed, "
- "error:%d", TEMPFILE, errno);
- }
-
- /*
- * Check whether the mapped memory region
- * has the file contents.
- */
- if (memcmp(dummy, addr, page_sz)) {
- tst_resm(TFAIL, "mapped memory region contains "
- "invalid data");
- } else {
- tst_resm(TPASS,
- "Functionality of mmap() successful");
- }
- } else {
- tst_resm(TPASS, "call succeeded");
- }
-
- /* Clean up things in case we are looping */
- /* Unmap the mapped memory */
- if (munmap(addr, page_sz) != 0) {
- tst_brkm(TFAIL, NULL, "munmap() fails to unmap the "
- "memory, errno=%d", errno);
- }
-
- } /* End for TEST_LOOPING */
-
- /* Call cleanup() to undo setup done for the test. */
- cleanup();
-
- /*NOTREACHED*/
-} /* End main */
-
-/*
- * setup() - performs all ONE TIME setup for this test.
- * Get the system page size.
- * Create a temporary directory and a file under it.
- * Write some known data into file and close it.
- * Change the mode permissions on file to 0555.
- * Re-open the file for reading.
- */
-void
-setup()
-{
- char *tst_buff; /* test buffer to hold known data */
-
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- /* Get the system page size */
- if ((page_sz = getpagesize()) < 0) {
- tst_brkm(TFAIL, NULL,
- "getpagesize() fails to get system page size");
- tst_exit();
- }
-
- /* Allocate space for the test buffer */
- if ((tst_buff = (char *)calloc(page_sz, sizeof(char))) == NULL) {
- tst_brkm(TFAIL, NULL,
- "calloc() failed to allocate space for tst_buff");
- tst_exit();
- }
-
- /* Fill the test buffer with the known data */
- memset(tst_buff, 'A', page_sz);
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Creat a temporary file used for mapping */
- if ((fildes = open(TEMPFILE, O_WRONLY | O_CREAT, 0666)) < 0) {
- tst_brkm(TFAIL, NULL, "open() on %s Failed, errno=%d : %s",
- TEMPFILE, errno, strerror(errno));
- free(tst_buff);
- cleanup();
- }
-
- /* Write test buffer contents into temporary file */
- if (write(fildes, tst_buff, strlen(tst_buff)) < (int)strlen(tst_buff)) {
- tst_brkm(TFAIL, NULL, "write() on %s Failed, errno=%d : %s",
- TEMPFILE, errno, strerror(errno));
- free(tst_buff);
- cleanup();
- }
-
- /* Free the memory allocated for test buffer */
- free(tst_buff);
-
- /* Make sure proper permissions set on file */
- if (chmod(TEMPFILE, 0555) < 0) {
- tst_brkm(TFAIL, cleanup, "chmod() on %s Failed, errno=%d : %s",
- TEMPFILE, errno, strerror(errno));
- }
-
- /* Close the temporary file opened for write */
- if (close(fildes) < 0) {
- tst_brkm(TFAIL, cleanup, "close() on %s Failed, errno=%d : %s",
- TEMPFILE, errno, strerror(errno));
- }
-
- /* Allocate and initialize dummy string of system page size bytes */
- if ((dummy = (char *)calloc(page_sz, sizeof(char))) == NULL) {
- tst_brkm(TFAIL, cleanup,
- "calloc() failed to allocate memory for dummy");
- }
-
- /* Open the temporary file again for reading */
- if ((fildes = open(TEMPFILE, O_RDONLY)) < 0) {
- tst_brkm(TFAIL, cleanup, "open(%s) with read-only Failed, "
- "errno:%d", TEMPFILE, errno);
- }
-}
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- Free the memory allocated to dummy variable.
- * Remove the temporary directory created.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- */
- TEST_CLEANUP;
-
- /* Free the memory space allocated for dummy variable */
- if (dummy) {
- free(dummy);
- }
-
- if (fildes >= 0)
- close (fildes);
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/mmap04.c b/winsup/testsuite/winsup.api/ltp/mmap04.c
deleted file mode 100644
index 64d3a8ebe..000000000
--- a/winsup/testsuite/winsup.api/ltp/mmap04.c
+++ /dev/null
@@ -1,291 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * Test Name: mmap04
- *
- * Test Description:
- * Call mmap() to map a file creating a mapped region with read/exec access
- * under the following conditions -
- * - The prot parameter is set to PROT_READ|PROT_EXEC
- * - The file descriptor is open for read
- * - The file being mapped has read and execute permission bit set.
- * - The minimum file permissions should be 0555.
- *
- * The call should succeed to map the file creating mapped memory with the
- * required attributes.
- *
- * Expected Result:
- * mmap() should succeed returning the address of the mapped region,
- * and the mapped region should contain the contents of the mapped file.
- *
- * Algorithm:
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- * Create temporary directory.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise,
- * Verify the Functionality of system call
- * if successful,
- * Issue Functionality-Pass message.
- * Otherwise,
- * Issue Functionality-Fail message.
- * Cleanup:
- * Print timing stats if options given
- * Delete the temporary directory created.
- *
- * Usage: <for command-line>
- * mmap04 [-c n] [-f] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -f : Turn off functionality Testing.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS:
- * None.
- */
-
-#include <sys/types.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <string.h>
-#include <signal.h>
-#include <sys/stat.h>
-#include <sys/mman.h>
-
-#include "test.h"
-#include "usctest.h"
-
-#define TEMPFILE "mmapfile"
-
-const char *TCID="mmap04"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-size_t page_sz; /* system page size */
-char *addr; /* addr of memory mapped region */
-char *dummy; /* dummy variable to hold temp file contents */
-int fildes = -1; /* file descriptor for temporary file */
-
-void setup(); /* Main setup function of test */
-void cleanup(void) __attribute__((noreturn)); /* cleanup function for the test */
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /* Parse standard options given to run the test. */
- msg = parse_opts(ac, av, (option_t *) NULL, NULL);
- if (msg != (char *) NULL) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /* Perform global setup for test */
- setup();
-
- /* Check looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- /* Reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call mmap to map the temporary file 'TEMPFILE'
- * with read and execute access.
- */
- TEST(mmap(0, page_sz, PROT_READ|PROT_EXEC,
- MAP_FILE|MAP_SHARED, fildes, 0));
-
- /* Check for the return value of mmap() */
- if (TEST_RETURN == (int)MAP_FAILED) {
- tst_resm(TFAIL, "mmap() Failed on %s, errno=%d : %s",
- TEMPFILE, errno, strerror(errno));
- continue;
- }
-
- /*
- * Perform functional verification if test
- * executed without (-f) option.
- */
- if (STD_FUNCTIONAL_TEST) {
- /* Get the mmap return value */
- addr = (char *)TEST_RETURN;
-
- /*
- * Read the file contents into the dummy
- * variable.
- */
- if (read(fildes, dummy, page_sz) < 0) {
- tst_brkm(TFAIL, cleanup, "read() on %s Failed, "
- "error:%d", TEMPFILE, errno);
- }
-
- /*
- * Check whether the mapped memory region
- * has the file contents.
- */
- if (memcmp(dummy, addr, page_sz)) {
- tst_resm(TFAIL, "mapped memory region contains "
- "invalid data");
- } else {
- tst_resm(TPASS,
- "Functionality of mmap() successful");
- }
- } else {
- tst_resm(TPASS, "call succeeded");
- }
- /* Clean up things in case we are looping. */
- /* Unmap the mapped memory */
- if (munmap(addr, page_sz) != 0) {
- tst_brkm(TFAIL, NULL, "munmap() fails to unmap the "
- "memory, errno=%d", errno);
- }
-
-
- } /* End for TEST_LOOPING */
-
- /* Call cleanup() to undo setup done for the test. */
- cleanup();
-
- /*NOTREACHED*/
-} /* End main */
-
-/*
- * setup() - performs all ONE TIME setup for this test.
- * Get the system page size.
- * Create a temporary directory and a file under it.
- * Write some known data into file and close it.
- * Change the mode permissions on file to 0555.
- * Re-open the file for reading.
- */
-void
-setup()
-{
- char *tst_buff; /* test buffer to hold known data */
-
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- /* Get the system page size */
- if ((page_sz = getpagesize()) < 0) {
- tst_brkm(TFAIL, NULL,
- "getpagesize() fails to get system page size");
- tst_exit();
- }
-
- if ((tst_buff = (char *)calloc(page_sz, sizeof(char))) == NULL) {
- tst_brkm(TFAIL, NULL,
- "calloc() failed to allocate space for tst_buff");
- tst_exit();
- }
-
- /* Fill the test buffer with the known data */
- memset(tst_buff, 'A', page_sz);
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Creat a temporary file used for mapping */
- if ((fildes = open(TEMPFILE, O_WRONLY | O_CREAT, 0666)) < 0) {
- tst_brkm(TFAIL, NULL, "open() on %s Failed, errno=%d : %s",
- TEMPFILE, errno, strerror(errno));
- free(tst_buff);
- cleanup();
- }
-
- /* Write test buffer contents into temporary file */
- if (write(fildes, tst_buff, strlen(tst_buff)) < (int)strlen(tst_buff)) {
- tst_brkm(TFAIL, NULL, "write() on %s Failed, errno=%d : %s",
- TEMPFILE, errno, strerror(errno));
- free(tst_buff);
- cleanup();
- }
-
- /* Free the memory allocated for test buffer */
- free(tst_buff);
-
- /* Make sure proper permissions set on file */
- if (chmod(TEMPFILE, 0555) < 0) {
- tst_brkm(TFAIL, cleanup, "chmod() on %s Failed, errno=%d : %s",
- TEMPFILE, errno, strerror(errno));
- }
-
- /* Close the temporary file opened for write */
- if (close(fildes) < 0) {
- tst_brkm(TFAIL, cleanup, "close() on %s Failed, errno=%d : %s",
- TEMPFILE, errno, strerror(errno));
- }
-
- /* Allocate and initialize dummy string of system page size bytes */
- if ((dummy = (char *)calloc(page_sz, sizeof(char))) == NULL) {
- tst_brkm(TFAIL, cleanup,
- "calloc() failed to allocate memory for dummy");
- }
-
- /* Open the temporary file again for reading */
- if ((fildes = open(TEMPFILE, O_RDONLY)) < 0) {
- tst_brkm(TFAIL, cleanup, "open(%s) with read-only Failed, "
- "errno:%d", TEMPFILE, errno);
- }
-}
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- * Free the memeory allocated to dummy variable.
- * Remove the temporary directory created.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* Free the memory space allocated for dummy variable */
- if (dummy) {
- free(dummy);
- }
-
- if (fildes >= 0)
- close (fildes);
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/mmap05.c b/winsup/testsuite/winsup.api/ltp/mmap05.c
deleted file mode 100644
index bcdfd0cd8..000000000
--- a/winsup/testsuite/winsup.api/ltp/mmap05.c
+++ /dev/null
@@ -1,301 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * Test Name: mmap05
- *
- * Test Description:
- * Call mmap() to map a file creating mapped memory with no access under
- * the following conditions -
- * - The prot parameter is set to PROT_NONE
- * - The file descriptor is open for read(any mode other than write)
- * - The minimum file permissions should be 0444.
- *
- * The call should succeed to map the file creating mapped memory with the
- * required attributes.
- *
- * Expected Result:
- * mmap() should succeed returning the address of the mapped region,
- * and an attempt to access the contents of the mapped region should give
- * rise to the signal SIGSEGV.
- *
- * Algorithm:
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- * Create temporary directory.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise,
- * Verify the Functionality of system call
- * if successful,
- * Issue Functionality-Pass message.
- * Otherwise,
- * Issue Functionality-Fail message.
- * Cleanup:
- * Print errno log and/or timing stats if options given
- * Delete the temporary directory created.
- *
- * Usage: <for command-line>
- * mmap05 [-c n] [-f] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -f : Turn off functionality Testing.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS:
- * None.
- */
-
-#include <sys/types.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <string.h>
-#include <signal.h>
-#include <sys/stat.h>
-#include <sys/mman.h>
-#include <setjmp.h>
-
-#include "test.h"
-#include "usctest.h"
-
-#define TEMPFILE "mmapfile"
-
-const char *TCID="mmap05"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-size_t page_sz; /* system page size */
-char *addr; /* addr of memory mapped region */
-int fildes = -1; /* file descriptor for temporary file */
-int pass=0; /* pass flag perhaps set to 1 in sig_handler */
-sigjmp_buf env; /* environment for sigsetjmp/siglongjmp */
-
-void setup(); /* Main setup function of test */
-void cleanup(void) __attribute__((noreturn)); /* cleanup function for the test */
-void sig_handler(); /* signal handler to catch SIGSEGV */
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- volatile char file_content; /* tempfile content */
-
- /* Parse standard options given to run the test. */
- msg = parse_opts(ac, av, (option_t *) NULL, NULL);
- if (msg != (char *) NULL) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /* Perform global setup for test */
- setup();
-
- /* Check looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- /* Reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call mmap to map the temporary file 'TEMPFILE'
- * with no access.
- */
-
- TEST(mmap(0, page_sz, PROT_NONE,
- MAP_FILE|MAP_SHARED, fildes, 0));
-
- /* Check for the return value of mmap() */
- if (TEST_RETURN == (int)MAP_FAILED) {
- tst_resm(TFAIL, "mmap() Failed on %s, errno=%d : %s",
- TEMPFILE, errno, strerror(errno));
- continue;
- }
-
- /*
- * Perform functional verification if test
- * executed without (-f) option.
- */
- if (STD_FUNCTIONAL_TEST) {
-
- /*
- * Try to access the mapped region. This should
- * generate a SIGSEGV which will be caught below.
- *
- * This is wrapped by the sigsetjmp() call that will
- * take care of restoring the program's context in an
- * elegant way in conjunction with the call to
- * siglongjmp() in the signal handler.
- */
- if (sigsetjmp(env, 1) == 0) {
- file_content = addr[0];
- }
-
- if (pass) {
- tst_resm(TPASS, "Got SIGSEGV as expected");
- } else {
- tst_resm(TFAIL, "Mapped memory region with NO "
- "access is accessible");
- }
- } else {
- tst_resm(TPASS, "call succeeded");
- }
-
- /* Unmap mapped memory and reset pass in case we are looping */
- if (munmap(addr, page_sz) != 0) {
- tst_brkm(TFAIL, cleanup, "munmap() fails to unmap the "
- "memory, errno=%d", errno);
- }
- pass = 0;
-
- } /* End for TEST_LOOPING */
-
- /* Call cleanup() to undo setup done for the test. */
- cleanup();
-
- /*NOTREACHED*/
-} /* End main */
-
-/*
- * setup() - performs all ONE TIME setup for this test.
- * Get the system page size.
- * Create a temporary directory and a file under it.
- * Write some known data into file and close it.
- * Change the mode permissions on file to 0444
- * Re-open the file for reading.
- */
-void
-setup()
-{
- char *tst_buff; /* test buffer to hold known data */
-
- /* capture signals */
- tst_sig(NOFORK, sig_handler, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- /* Get the system page size */
- if ((page_sz = getpagesize()) < 0) {
- tst_brkm(TFAIL, NULL,
- "getpagesize() fails to get system page size");
- tst_exit();
- }
-
- /* Allocate space for the test buffer */
- if ((tst_buff = (char *)calloc(page_sz, sizeof(char))) == NULL) {
- tst_brkm(TFAIL, NULL,
- "calloc() failed to allocate space for tst_buff");
- tst_exit();
- }
-
- /* Fill the test buffer with the known data */
- memset(tst_buff, 'A', page_sz);
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Creat a temporary file used for mapping */
- if ((fildes = open(TEMPFILE, O_WRONLY | O_CREAT, 0666)) < 0) {
- tst_brkm(TFAIL, NULL, "open() on %s Failed, errno=%d : %s",
- TEMPFILE, errno, strerror(errno));
- free(tst_buff);
- cleanup();
- }
-
- /* Write test buffer contents into temporary file */
- if (write(fildes, tst_buff, strlen(tst_buff))
- != (int)strlen(tst_buff)) {
- tst_brkm(TFAIL, NULL, "write() on %s Failed, errno=%d : %s",
- TEMPFILE, errno, strerror(errno));
- free(tst_buff);
- cleanup();
- }
-
- /* Free the memory allocated for test buffer */
- free(tst_buff);
-
- /* Close the temporary file opened for write */
- if (close(fildes) < 0) {
- tst_brkm(TFAIL, cleanup, "close() on %s Failed, errno=%d : %s",
- TEMPFILE, errno, strerror(errno));
- }
-
- /* Make sure proper permissions set on file */
- if (chmod(TEMPFILE, 0444) < 0) {
- tst_brkm(TFAIL, cleanup, "chmod() on %s Failed, errno=%d : %s",
- TEMPFILE, errno, strerror(errno));
- }
-
- /* Open the temporary file again for reading */
- if ((fildes = open(TEMPFILE, O_RDONLY)) < 0) {
- tst_brkm(TFAIL, cleanup, "open(%s) with read-only Failed, "
- "errno:%d", TEMPFILE, errno);
- }
-}
-
-/*
- * sig_handler() - Signal Cathing function.
- * This function gets executed when the test process receives
- * the signal SIGSEGV while trying to access the contents of memory which
- * is not accessible.
- */
-void
-sig_handler(sig)
-{
- if (sig == SIGSEGV) {
- /* set the global variable and jump back */
- pass = 1;
- siglongjmp(env, 1);
- } else {
- tst_brkm(TBROK, cleanup, "received an unexpected signal");
- }
-}
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- * Remove the temporary directory created.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- if (fildes >= 0)
- close (fildes);
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/mmap06.c b/winsup/testsuite/winsup.api/ltp/mmap06.c
deleted file mode 100644
index ec113c077..000000000
--- a/winsup/testsuite/winsup.api/ltp/mmap06.c
+++ /dev/null
@@ -1,234 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * Test Name: mmap06
- *
- * Test Description:
- * Call mmap() to map a file creating a mapped region with read access
- * under the following conditions -
- * - The prot parameter is set to PROT_READ
- * - The file descriptor is open for writing.
- *
- * The call should fail to map the file.
- *
- * Expected Result:
- * mmap() should fail returning -1 and errno should get set to EACCES.
- *
- * Algorithm:
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- * Create temporary directory.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * if errno set == expected errno
- * Issue sys call fails with expected return value and errno.
- * Otherwise,
- * Issue sys call fails with unexpected errno.
- * Otherwise,
- * Issue sys call returns unexpected value.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- * Delete the temporary directory(s)/file(s) created.
- *
- * Usage: <for command-line>
- * mmap06 [-c n] [-e] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -e : Turn on errno logging.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS:
- * None.
- */
-
-#include <sys/types.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <string.h>
-#include <signal.h>
-#include <sys/stat.h>
-#include <sys/mman.h>
-
-#include "test.h"
-#include "usctest.h"
-
-#define TEMPFILE "mmapfile"
-
-const char *TCID="mmap06"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-int exp_enos[]={EACCES, 0};
-
-size_t page_sz; /* system page size */
-char *addr; /* addr of memory mapped region */
-int fildes = -1; /* file descriptor for temporary file */
-
-void setup(); /* Main setup function of test */
-void cleanup(void) __attribute__((noreturn)); /* cleanup function for the test */
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /* Parse standard options given to run the test. */
- msg = parse_opts(ac, av, (option_t *) NULL, NULL);
- if (msg != (char *) NULL) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /* Perform global setup for test */
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /* Check looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- /* Reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call mmap to map the temporary file 'TEMPFILE'
- * with read access.
- */
- TEST(mmap(0, page_sz, PROT_READ,
- MAP_FILE|MAP_SHARED, fildes, 0));
-
- /* Check for the return value of mmap() */
- if (TEST_RETURN != (int)MAP_FAILED) {
- tst_resm(TFAIL, "mmap() returned invalid value, "
- "expected: -1");
- /* Unmap the mapped memory */
- if (munmap(addr, page_sz) != 0) {
- tst_brkm(TBROK, cleanup, "munmap() failed");
- }
- continue;
- }
- TEST_ERROR_LOG(TEST_ERRNO);
- if (TEST_ERRNO == EACCES) {
- tst_resm(TPASS, "mmap() fails, 'fd' doesn't allow "
- "desired access, errno:%d", errno);
- } else {
- tst_resm(TFAIL, "mmap() fails, 'fd' doesn't allow "
- "desired access, invalid errno:%d", errno);
- }
- } /* End for TEST_LOOPING */
-
- /* Call cleanup() to undo setup done for the test. */
- cleanup();
-
- /*NOTREACHED*/
-} /* End main */
-
-/*
- * setup() - performs all ONE TIME setup for this test.
- * Get the system page size.
- * Create a temporary directory and a file under it.
- * Write some known data into file.
- */
-void
-setup()
-{
- char *tst_buff; /* test buffer to hold known data */
-
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- /* Get the system page size */
- if ((page_sz = getpagesize()) < 0) {
- tst_brkm(TFAIL, NULL,
- "getpagesize() fails to get system page size");
- tst_exit();
- }
-
- /* Allocate space for the test buffer */
- if ((tst_buff = (char *)calloc(page_sz, sizeof(char))) == NULL) {
- tst_brkm(TFAIL, NULL,
- "calloc() failed to allocate space for tst_buff");
- tst_exit();
- }
-
- /* Fill the test buffer with the known data */
- memset(tst_buff, 'A', page_sz);
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Creat a temporary file used for mapping */
- if ((fildes = open(TEMPFILE, O_WRONLY | O_CREAT, 0666)) < 0) {
- tst_brkm(TFAIL, NULL,
- "open() on %s Failed, errno=%d : %s",
- TEMPFILE, errno, strerror(errno));
- free(tst_buff);
- cleanup();
- }
-
- /* Write test buffer contents into temporary file */
- if (write(fildes, tst_buff, strlen(tst_buff)) < (int)strlen(tst_buff)) {
- tst_brkm(TFAIL, NULL,
- "write() on %s Failed, errno=%d : %s",
- TEMPFILE, errno, strerror(errno));
- free(tst_buff);
- cleanup();
- }
-
- /* Free the memory allocated for test buffer */
- free(tst_buff);
-}
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- * Remove the temporary directory created.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- if (fildes >= 0)
- close (fildes);
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/mmap07.c b/winsup/testsuite/winsup.api/ltp/mmap07.c
deleted file mode 100644
index ab989f443..000000000
--- a/winsup/testsuite/winsup.api/ltp/mmap07.c
+++ /dev/null
@@ -1,233 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * Test Name: mmap07
- *
- * Test Description:
- * Call mmap() to map a file creating a mapped region with read access
- * under the following conditions -
- * - The prot parameter is set to PROT_WRITE
- * - The file descriptor is open for writing.
- * - The flags parameter has MAP_PRIVATE set.
- *
- * The call should fail to map the file.
- *
- * Expected Result:
- * mmap() should fail returning -1 and errno should get set to EACCES.
- *
- * Algorithm:
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- * Create temporary directory.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * if errno set == expected errno
- * Issue sys call fails with expected return value and errno.
- * Otherwise,
- * Issue sys call fails with unexpected errno.
- * Otherwise,
- * Issue sys call returns unexpected value.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- * Delete the temporary directory(s)/file(s) created.
- *
- * Usage: <for command-line>
- * mmap07 [-c n] [-e] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -e : Turn on errno logging.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS:
- * None.
- */
-
-#include <sys/types.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <string.h>
-#include <signal.h>
-#include <sys/stat.h>
-#include <sys/mman.h>
-
-#include "test.h"
-#include "usctest.h"
-
-#define TEMPFILE "mmapfile"
-
-const char *TCID="mmap07"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-int exp_enos[]={EACCES, 0};
-
-size_t page_sz; /* system page size */
-char *addr; /* addr of memory mapped region */
-int fildes = -1; /* file descriptor for temporary file */
-
-void setup(); /* Main setup function of test */
-void cleanup(void) __attribute__((noreturn)); /* cleanup function for the test */
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /* Parse standard options given to run the test. */
- msg = parse_opts(ac, av, (option_t *) NULL, NULL);
- if (msg != (char *) NULL) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /* Perform global setup for test */
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /* Check looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- /* Reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call mmap to map the temporary file 'TEMPFILE'
- * with write access.
- */
- TEST(mmap(0, page_sz, PROT_WRITE,
- MAP_FILE|MAP_PRIVATE, fildes, 0));
-
- /* Check for the return value of mmap() */
- if (TEST_RETURN != (int)MAP_FAILED) {
- tst_resm(TFAIL, "mmap() returned invalid value, "
- "expected: -1");
- /* Unmap the mapped memory */
- if (munmap(addr, page_sz) != 0) {
- tst_brkm(TBROK, cleanup, "munmap() failed");
- }
- continue;
- }
- TEST_ERROR_LOG(TEST_ERRNO);
- if (TEST_ERRNO == EACCES) {
- tst_resm(TPASS, "mmap() fails, 'fd' doesn't allow "
- "desired access, errno:%d", errno);
- } else {
- tst_resm(TFAIL, "mmap() fails, 'fd' doesn't allow "
- "desired access, invalid errno:%d", errno);
- }
-
- } /* End for TEST_LOOPING */
-
- /* Call cleanup() to undo setup done for the test. */
- cleanup();
-
- /*NOTREACHED*/
-} /* End main */
-
-/*
- * setup() - performs all ONE TIME setup for this test.
- * Get the system page size.
- * Create a temporary directory and a file under it.
- * Write some known data into file.
- */
-void
-setup()
-{
- char *tst_buff; /* test buffer to hold known data */
-
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- /* Get the system page size */
- if ((page_sz = getpagesize()) < 0) {
- tst_brkm(TFAIL, NULL,
- "getpagesize() fails to get system page size");
- tst_exit();
- }
-
- /* Allocate space for the test buffer */
- if ((tst_buff = (char *)calloc(page_sz, sizeof(char))) == NULL) {
- tst_brkm(TFAIL, NULL,
- "calloc() failed to allocate space for tst_buff");
- tst_exit();
- }
-
- /* Fill the test buffer with the known data */
- memset(tst_buff, 'A', page_sz);
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Creat a temporary file used for mapping */
- if ((fildes = open(TEMPFILE, O_WRONLY | O_CREAT, 0666)) < 0) {
- tst_brkm(TFAIL, NULL, "open() on %s Failed, errno=%d : %s",
- TEMPFILE, errno, strerror(errno));
- free(tst_buff);
- cleanup();
- }
-
- /* Write test buffer contents into temporary file */
- if (write(fildes, tst_buff, strlen(tst_buff)) < (int)strlen(tst_buff)) {
- tst_brkm(TFAIL, NULL, "write() on %s Failed, errno=%d : %s",
- TEMPFILE, errno, strerror(errno));
- free(tst_buff);
- cleanup();
- }
-
- /* Free the memory allocated for test buffer */
- free(tst_buff);
-}
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- * Remove the temporary directory created.
- */
-void
-cleanup()
-{
- /*
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- if (fildes >= 0)
- close (fildes);
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/mmap08.c b/winsup/testsuite/winsup.api/ltp/mmap08.c
deleted file mode 100644
index 543c5397b..000000000
--- a/winsup/testsuite/winsup.api/ltp/mmap08.c
+++ /dev/null
@@ -1,234 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * Test Name: mmap08
- *
- * Test Description:
- * Verify that mmap() fails to map a file creating a mapped region
- * when the file specified by file descriptor is not valid.
- *
- * Expected Result:
- * mmap() should fail returning -1 and errno should get set to EBADF.
- *
- * Algorithm:
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- * Create temporary directory.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * if errno set == expected errno
- * Issue sys call fails with expected return value and errno.
- * Otherwise,
- * Issue sys call fails with unexpected errno.
- * Otherwise,
- * Issue sys call returns unexpected value.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- * Delete the temporary directory(s)/file(s) created.
- *
- * Usage: <for command-line>
- * mmap08 [-c n] [-e] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -e : Turn on errno logging.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS:
- * None.
- */
-
-#include <sys/types.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <string.h>
-#include <signal.h>
-#include <sys/stat.h>
-#include <sys/mman.h>
-
-#include "test.h"
-#include "usctest.h"
-
-#define TEMPFILE "mmapfile"
-
-const char *TCID="mmap08"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-int exp_enos[]={EBADF, 0};
-
-size_t page_sz; /* system page size */
-char *addr; /* addr of memory mapped region */
-int fildes = -1; /* file descriptor for temporary file */
-
-void setup(); /* Main setup function of test */
-void cleanup(void) __attribute__((noreturn)); /* cleanup function for the test */
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /* Parse standard options given to run the test. */
- msg = parse_opts(ac, av, (option_t *) NULL, NULL);
- if (msg != (char *) NULL) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /* Perform global setup for test */
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /* Check looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- /* Reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call mmap to map the temporary file 'TEMPFILE'
- * which is already closed. so, fildes is not valid.
- */
- TEST(mmap(0, page_sz, PROT_WRITE,
- MAP_FILE|MAP_SHARED, fildes, 0));
-
- /* Check for the return value of mmap() */
- if (TEST_RETURN != (int)MAP_FAILED) {
- tst_resm(TFAIL, "mmap() returned invalid value, "
- "expected: -1");
- /* Unmap the mapped memory */
- if (munmap(addr, page_sz) != 0) {
- tst_brkm(TBROK, cleanup, "munmap() failed");
- }
- continue;
- }
- TEST_ERROR_LOG(TEST_ERRNO);
- if (TEST_ERRNO == EBADF) {
- tst_resm(TPASS, "mmap() fails, 'fd' is not valid, "
- "errno:%d", errno);
- } else {
- tst_resm(TFAIL, "mmap() fails, 'fd' is not valid, "
- "invalid errno:%d", errno);
- }
- } /* End for TEST_LOOPING */
-
- /* Call cleanup() to undo setup done for the test. */
- cleanup();
-
- /*NOTREACHED*/
-} /* End main */
-
-/*
- * setup() - performs all ONE TIME setup for this test.
- * Get the system page size.
- * Create a temporary directory and a file under it.
- * Write some known data into file and close it.
- */
-void
-setup()
-{
- char *tst_buff; /* test buffer to hold known data */
-
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- /* Get the system page size */
- if ((page_sz = getpagesize()) < 0) {
- tst_brkm(TFAIL, NULL,
- "getpagesize() fails to get system page size");
- tst_exit();
- }
-
- if ((tst_buff = (char *)calloc(page_sz, sizeof(char))) == NULL) {
- tst_brkm(TFAIL, NULL,
- "calloc() failed to allocate space for tst_buff");
- tst_exit();
- }
-
- /* Fill the test buffer with the known data */
- memset(tst_buff, 'A', page_sz);
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Creat a temporary file used for mapping */
- if ((fildes = open(TEMPFILE, O_WRONLY | O_CREAT, 0666)) < 0) {
- tst_brkm(TFAIL, NULL, "open() on %s Failed, errno=%d : %s",
- TEMPFILE, errno, strerror(errno));
- free(tst_buff);
- cleanup();
- }
-
- /* Write test buffer contents into temporary file */
- if (write(fildes, tst_buff, strlen(tst_buff))
- != (int)strlen(tst_buff)) {
- tst_brkm(TFAIL, NULL, "write() on %s Failed, errno=%d : %s",
- TEMPFILE, errno, strerror(errno));
- free(tst_buff);
- cleanup();
- }
-
- /* Free the memory allocated for test buffer */
- free(tst_buff);
-
- /* Close the temporary file opened for writing */
- if (close(fildes) < 0) {
- tst_brkm(TFAIL, cleanup, "close() on %s Failed, errno=%d : %s",
- TEMPFILE, errno, strerror(errno));
- }
-}
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- * Remove the temporary directory created.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- if (fildes >= 0)
- close (fildes);
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/munmap01.c b/winsup/testsuite/winsup.api/ltp/munmap01.c
deleted file mode 100644
index 0527201be..000000000
--- a/winsup/testsuite/winsup.api/ltp/munmap01.c
+++ /dev/null
@@ -1,281 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * Test Name: munmap01
- *
- * Test Description:
- * Verify that, munmap call will succeed to unmap a mapped file or
- * anonymous shared memory region from the calling process's address space
- * and after successful completion of munmap, the unmapped region is no
- * longer accessible.
- *
- * Expected Result:
- * munmap call should succeed to unmap a mapped file or anonymous shared
- * memory region from the process's address space and it returns with a
- * value 0, further reference to the unmapped region should result in a
- * segmentation fault (SIGSEGV).
- *
- * Algorithm:
- * Setup:
- * Setup signal handling.
- * Create temporary directory.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise,
- * Verify the Functionality of system call
- * if successful,
- * Issue Functionality-Pass message.
- * Otherwise,
- * Issue Functionality-Fail message.
- * Cleanup:
- * Print errno log and/or timing stats if options given
- * Delete the temporary directory created.
- *
- * Usage: <for command-line>
- * munmap01 [-c n] [-f] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -f : Turn off functionality Testing.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS:
- * None.
- */
-#include <errno.h>
-#include <fcntl.h>
-#include <sys/stat.h>
-#include <sys/mman.h>
-
-#include "test.h"
-#include "usctest.h"
-
-#define TEMPFILE "mmapfile"
-
-const char *TCID="munmap01"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-char *addr; /* addr of memory mapped region */
-int fildes; /* file descriptor for tempfile */
-unsigned int map_len; /* length of the region to be mapped */
-
-void setup(); /* Main setup function of test */
-void cleanup(void); /* cleanup function for the test */
-void sig_handler(); /* signal catching function */
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /* Parse standard options given to run the test. */
- msg = parse_opts(ac, av, (option_t *)NULL, NULL);
- if (msg != (char *)NULL) {
- tst_brkm(TBROK, tst_exit, "OPTION PARSING ERROR - %s", msg);
- }
-
- /* Check looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- /* Reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /* Perform global setup for test */
- setup();
-
- /*
- * Call munmap to unmap the mapped region of the
- * temporary file from the calling process's address space.
- */
- TEST(munmap(addr, map_len));
-
- /* Check for the return value of munmap() */
- if (TEST_RETURN == -1) {
- tst_resm(TFAIL, "munmap() fails, errno=%d : %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- continue;
- }
-
- /*
- * Perform functional verification if test
- * executed without (-f) option.
- */
- if (STD_FUNCTIONAL_TEST) {
- /*
- * Check whether further reference is possible
- * to the unmapped memory region by writing
- * to the first byte of region with
- * some arbitrary number.
- */
- *addr = 50;
-
- /* This message is printed if no SIGSEGV */
- tst_resm(TFAIL, "process succeeds to refer unmapped "
- "memory region");
- } else {
- tst_resm(TPASS, "call succeeded");
- }
-
- /* Call cleanup() to undo setup done for the test. */
- cleanup();
-
- } /* End for TEST_LOOPING */
-
- /* exit with return code appropriate for results */
- tst_exit();
-
- /*NOTREACHED*/
-} /* End main */
-
-/*
- * setup() - performs all ONE TIME setup for this test.
- *
- * Set up signal handler to catch SIGSEGV.
- * Get system page size, create a temporary file for reading/writing,
- * write one byte data into it, map the open file for the specified
- * map length.
- */
-void
-setup()
-{
- size_t page_sz; /* system page size */
-
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* call signal function to trap the signal generated */
- if (signal(SIGSEGV, sig_handler) == SIG_ERR) {
- tst_brkm(TBROK, cleanup, "signal fails to catch signal");
- tst_exit();
- }
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- /* Get the system page size */
- if ((page_sz = getpagesize()) < 0) {
- tst_brkm(TBROK, cleanup,
- "getpagesize() fails to get system page size");
- tst_exit();
- }
-
- /*
- * Get the length of the open file to be mapped into process
- * address space.
- */
- map_len = 3 * page_sz;
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Creat a temporary file used for mapping */
- if ((fildes = open(TEMPFILE, O_RDWR | O_CREAT, 0666)) < 0) {
- tst_brkm(TBROK, cleanup, "open() on %s Failed, errno=%d : %s",
- TEMPFILE, errno, strerror(errno));
- tst_exit();
- }
-
- /*
- * move the file pointer to maplength position from the beginning
- * of the file.
- */
- if (lseek(fildes, map_len, SEEK_SET) == -1) {
- tst_brkm(TBROK, cleanup, "lseek() fails on %s, errno=%d : %s",
- TEMPFILE, errno, strerror(errno));
- tst_exit();
- }
-
- /* Write one byte into temporary file */
- if (write(fildes, "a", 1) != 1) {
- tst_brkm(TBROK, cleanup, "write() on %s Failed, errno=%d : %s",
- TEMPFILE, errno, strerror(errno));
- tst_exit();
- }
-
- /*
- * map the open file 'TEMPFILE' from its beginning up to the maplength
- * into the calling process's address space at the system choosen
- * with read/write permissions to the the mapped region.
- */
- addr = mmap(0, map_len, PROT_READ | PROT_WRITE, \
- MAP_FILE | MAP_SHARED, fildes, 0);
-
- /* check for the return value of mmap system call */
- if (addr == (char *)MAP_FAILED) {
- tst_brkm(TBROK, cleanup, "mmap() Failed on %s, errno=%d : %s",
- TEMPFILE, errno, strerror(errno));
- tst_exit();
- }
-}
-
-/*
- * sig_handler() - signal catching function.
- * This function is used to trap the signal generated when tried to read or
- * write to the memory mapped region which is already detached from the
- * calling process address space.
- * this function is invoked when SIGSEGV generated and it calls test
- * cleanup function and exit the program.
- */
-void
-sig_handler()
-{
- tst_resm(TPASS, "Functionality of munmap() successful");
-
- /* Invoke test cleanup function and exit */
- cleanup();
-
- /* exit with return code appropriate for results */
- tst_exit();
-}
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- * Close the temporary file.
- * Remove the temporary directory.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* Close the temporary file */
- if (close(fildes) < 0) {
- tst_brkm(TFAIL, NULL, "close() on %s Failed, errno=%d : %s",
- TEMPFILE, errno, strerror(errno));
- }
-
- /* Remove the temporary directory and all files in it */
- tst_rmdir();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/munmap02.c b/winsup/testsuite/winsup.api/ltp/munmap02.c
deleted file mode 100644
index 7345e73e0..000000000
--- a/winsup/testsuite/winsup.api/ltp/munmap02.c
+++ /dev/null
@@ -1,306 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * Test Name: munmap02
- *
- * Test Description:
- * Verify that, munmap call will succeed to unmap a mapped file or
- * anonymous shared memory region from the calling process's address space
- * if the region specified by the address and the length is part or all of
- * the mapped region.
- *
- * Expected Result:
- * munmap call should succeed to unmap a part or all of mapped region of a
- * file or anonymous shared memory from the process's address space and it
- * returns with a value 0,
- * further reference to the unmapped region should result in a segmentation
- * fault (SIGSEGV).
- *
- * Algorithm:
- * Setup:
- * Setup signal handling.
- * Create temporary directory.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise,
- * Verify the Functionality of system call
- * if successful,
- * Issue Functionality-Pass message.
- * Otherwise,
- * Issue Functionality-Fail message.
- * Cleanup:
- * Print errno log and/or timing stats if options given
- * Delete the temporary directory created.
- *
- * Usage: <for command-line>
- * munmap01 [-c n] [-f] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -f : Turn off functionality Testing.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS:
- * None.
- */
-#include <errno.h>
-#include <fcntl.h>
-#include <sys/stat.h>
-#include <sys/mman.h>
-
-#include "test.h"
-#include "usctest.h"
-
-#define TEMPFILE "mmapfile"
-
-const char *TCID="munmap02"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-size_t page_sz; /* system page size */
-char *addr; /* addr of memory mapped region */
-int fildes; /* file descriptor for tempfile */
-unsigned int map_len; /* length of the region to be mapped */
-
-void setup(); /* Main setup function of test */
-void cleanup(void); /* cleanup function for the test */
-void sig_handler(); /* signal catching function */
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /* Parse standard options given to run the test. */
- msg = parse_opts(ac, av, (option_t *)NULL, NULL);
- if (msg != (char *)NULL) {
- tst_brkm(TBROK, tst_exit, "OPTION PARSING ERROR - %s", msg);
- }
-
- /* Check looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
-
- /* Reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /* Perform global setup for test */
- setup();
-
- /*
- * Call munmap to unmap the part of the mapped region of the
- * temporary file from the address and length that is part of
- * the mapped region.
- */
- TEST(munmap(addr, map_len));
-
- /* Check for the return value of munmap() */
- if (TEST_RETURN == -1) {
- tst_resm(TFAIL, "munmap() fails, errno=%d : %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- continue;
- }
- /*
- * Perform functional verification if test
- * executed without (-f) option.
- */
- if (STD_FUNCTIONAL_TEST) {
- /*
- * Check whether further reference is possible
- * to the unmapped memory region by writing
- * to the first byte of region with
- * some arbitrary number.
- */
- *addr = 50;
-
- /* This message is printed if no SIGSEGV */
- tst_resm(TFAIL, "process succeeds to refer unmapped "
- "memory region");
- } else {
- tst_resm(TPASS, "call succeeded");
- }
-
- /* Call cleanup() to undo setup done for the test. */
- cleanup();
-
- } /* End for TEST_LOOPING */
-
- /* exit with return code appropriate for results */
- tst_exit();
-
- /*NOTREACHED*/
-} /* End main */
-
-/*
- * setup() - performs all ONE TIME setup for this test.
- * Setup signal handler to catch SIGSEGV.
- * Get system page size, create a temporary file for reading/writing,
- * write one byte data into it, map the open file for the specified
- * map length.
- */
-void
-setup()
-{
-
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* call signal function to trap the signal generated */
- if (signal(SIGSEGV, sig_handler) == SIG_ERR) {
- tst_brkm(TBROK, cleanup, "signal fails to catch signal");
- tst_exit();
- }
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- /* Get the system page size */
- if ((page_sz = getpagesize()) < 0) {
- tst_brkm(TBROK, cleanup,
- "getpagesize() fails to get system page size");
- tst_exit();
- }
-
- /*
- * Get the length of the open file to be mapped into process
- * address space.
- */
- map_len = 3 * page_sz;
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Creat a temporary file used for mapping */
- if ((fildes = open(TEMPFILE, O_RDWR | O_CREAT, 0666)) < 0) {
- tst_brkm(TBROK, cleanup, "open() on %s Failed, errno=%d : %s",
- TEMPFILE, errno, strerror(errno));
- tst_exit();
- }
-
- /*
- * move the file pointer to maplength position from the beginning
- * of the file.
- */
- if (lseek(fildes, map_len, SEEK_SET) == -1) {
- tst_brkm(TBROK, cleanup, "lseek() fails on %s, errno=%d : %s",
- TEMPFILE, errno, strerror(errno));
- tst_exit();
- }
-
- /* Write one byte into temporary file */
- if (write(fildes, "a", 1) != 1) {
- tst_brkm(TBROK, cleanup, "write() on %s Failed, errno=%d : %s",
- TEMPFILE, errno, strerror(errno));
- tst_exit();
- }
-
- /*
- * map the open file 'TEMPFILE' from its beginning up to the maplength
- * into the calling process's address space at the system choosen
- * with read/write permissions to the the mapped region.
- */
- addr = mmap(0, map_len, PROT_READ | PROT_WRITE,
- MAP_FILE | MAP_SHARED, fildes, 0);
-
- /* check for the return value of mmap system call */
- if (addr == (char *)MAP_FAILED) {
- tst_brkm(TBROK, cleanup, "mmap() Failed on %s, errno=%d : %s",
- TEMPFILE, errno, strerror(errno));
- tst_exit();
- }
-
- /*
- * increment the start address of the region at which the file is
- * mapped to a maplength of 3 times the system page size by the value
- * of system page size and decrement the maplength value by the value
- * of system page size.
- */
- addr = (char *)((long)addr + page_sz);
- map_len = map_len - page_sz;
-}
-
-/*
- * void
- * sig_handler() - signal catching function.
- * This function is used to trap the signal generated when tried to read or
- * write to the memory mapped region which is already detached from the
- * calling process address space.
- * this function is invoked when SIGSEGV generated and it calls test
- * cleanup function and exit the program.
- */
-void
-sig_handler()
-{
- tst_resm(TPASS, "Functionality of munmap() successful");
-
- /* Invoke test cleanup function and exit */
- cleanup();
-
- /* exit with return code appropriate for results */
- tst_exit();
-}
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- * Unmap the portion of the region of the file left unmapped.
- * Close the temporary file.
- * Remove the temporary directory.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /*
- * get the start address and length of the portion of
- * the mapped region of the file.
- */
- addr = (char *)((long)addr - page_sz);
- map_len = map_len - page_sz;
-
- /* unmap the portion of the region of the file left unmapped */
- if (munmap(addr, map_len) < 0) {
- tst_brkm(TBROK, NULL,
- "munmap() fails to unmap portion of mapped region");
- }
-
- /* Close the temporary file */
- if (close(fildes) < 0) {
- tst_brkm(TBROK, NULL, "close() on %s Failed, errno=%d : %s",
- TEMPFILE, errno, strerror(errno));
- }
-
- /* Remove the temporary directory and all files in it */
- tst_rmdir();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/nice05.c b/winsup/testsuite/winsup.api/ltp/nice05.c
deleted file mode 100644
index 1246e7fbd..000000000
--- a/winsup/testsuite/winsup.api/ltp/nice05.c
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : nice05
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for nice(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) nice(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the nice(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * nice(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <sys/types.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-void setup();
-void cleanup(void) __attribute__((noreturn));
-
-
-
-const char *TCID="nice05"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int val;
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL ) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- val = lc % 39;
- /*
- * Call nice(2)
- */
- TEST(nice(val));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "nice(%d) Failed, errno=%d : %s", val,
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "nice(%d) returned %d", val, TEST_RETURN);
- }
- }
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
-
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/open02.c b/winsup/testsuite/winsup.api/ltp/open02.c
deleted file mode 100644
index 594ab5b1c..000000000
--- a/winsup/testsuite/winsup.api/ltp/open02.c
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * NAME
- * open02.c
- *
- * DESCRIPTION
- * Test if open without O_CREAT returns -1 if a file does not exist.
- *
- * ALGORITHM
- * 1. open a new file without O_CREAT, test for return value of -1
- *
- * USAGE: <for command-line>
- * open02 [-c n] [-e] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -e : Turn on errno logging.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS
- * None
- */
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <errno.h>
-#include <sys/fcntl.h>
-#include <test.h>
-#include <usctest.h>
-
-const char *TCID = "open02";
-int TST_TOTAL = 1;
-extern int Tst_count;
-
-char pfilname[40] = "";
-
-int exp_enos[] = {ENOENT, 0};
-
-void cleanup(void) __attribute__((noreturn));
-void setup(void);
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /*
- * parse standard command line options
- */
- if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
- /*NOTREACHED*/
- }
-
- setup(); /* global setup for test */
-
- TEST_EXP_ENOS(exp_enos);
-
- /*
- * check looping state if -i option given on the command line
- */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- Tst_count = 0; /* reset Tst_count while looping. */
-
- TEST(open(pfilname, O_RDWR, 0444));
-
- if (TEST_RETURN != -1) {
- tst_resm(TFAIL, "opened non-existent file");
- continue;
- }
-
- TEST_ERROR_LOG(TEST_ERRNO);
-
- if (TEST_ERRNO != ENOENT) {
- tst_resm(TFAIL, "open(2) set invalid errno: "
- "expected ENOENT, got %d", TEST_ERRNO);
- } else {
- tst_resm(TPASS, "open returned ENOENT");
- }
- }
- cleanup();
-
- /*NOTREACHED*/
-}
-
-/*
- * setup() - performs all ONE TIME setup for this test
- */
-void
-setup(void)
-{
- umask(0);
-
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that options was specified */
- TEST_PAUSE;
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- sprintf(pfilname, "./open3.%d", getpid());
-}
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at completion or
- * premature exit.
- */
-void
-cleanup(void)
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/open03.c b/winsup/testsuite/winsup.api/ltp/open03.c
deleted file mode 100644
index 6a699bad1..000000000
--- a/winsup/testsuite/winsup.api/ltp/open03.c
+++ /dev/null
@@ -1,243 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : open03
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for open(2)
- *
- * PARENT DOCUMENT : xxxtds01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) open(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the open(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * open(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <sys/types.h>
-#include <sys/fcntl.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-
-const char *TCID="open03"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0};
-
-char fname[255];
-int fd;
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call open(2)
- */
- TEST(open(fname,O_RDWR|O_CREAT,0700));
-
- fd=TEST_RETURN;
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "open(%s,O_RDWR|O_CREAT,0700) Failed, errno=%d : %s", fname,
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "open(%s, O_RDWR|O_CREAT,0700) returned %d",
- fname, TEST_RETURN);
- }
-
- if (close(fd) == -1) {
- tst_brkm(TBROK, cleanup,
- "close(%s) Failed, errno=%d : %s",
- fname, errno, strerror(errno));
- } else if (unlink(fname) == -1) {
- tst_brkm(TBROK, cleanup,
- "unlink(%s) Failed, errno=%d : %s",
- fname, errno, strerror(errno));
- }
- }
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- sprintf(fname,"tfile_%d",getpid());
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
-
-
diff --git a/winsup/testsuite/winsup.api/ltp/pathconf01.c b/winsup/testsuite/winsup.api/ltp/pathconf01.c
deleted file mode 100644
index 466875f21..000000000
--- a/winsup/testsuite/winsup.api/ltp/pathconf01.c
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : pathconf01
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for pathconf(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 6
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) pathconf(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the pathconf(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * pathconf(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-
-const char *TCID="pathconf01"; /* Test program identifier. */
-int TST_TOTAL; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0};
-
-int i;
-const char *path = "/tmp";
-
-struct pathconf_args
-{
- const char *define_tag;
- int value;
-} args[] = {
- {"_PC_LINK_MAX", _PC_LINK_MAX},
- {"_PC_NAME_MAX", _PC_NAME_MAX},
- {"_PC_PATH_MAX", _PC_PATH_MAX},
- {"_PC_PIPE_BUF", _PC_PIPE_BUF},
- {"_PC_CHOWN_RESTRICTED", _PC_CHOWN_RESTRICTED},
- {"_PC_NO_TRUNC", _PC_NO_TRUNC},
- {NULL, 0}
-};
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- TST_TOTAL=(sizeof(args)/sizeof(args[0]))-1;
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- for (i=0; i<TST_TOTAL; i++) {
-
- errno=-4;
-
- /*
- * Call pathconf(2)
- */
- TEST(pathconf(path, args[i].value));
-
- /*
- * A test case can only fail if -1 is returned and the errno
- * was set. If the errno remains unchanged, the
- * system call did not fail.
- */
- if ( TEST_RETURN == -1 && errno != -4 ) {
- tst_resm(TFAIL, "pathconf(%s, %s) Failed, errno=%d : %s",
- path, args[i].define_tag,
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "pathconf(%s, %s) returned %d",
- path, args[i].define_tag, TEST_RETURN);
- }
- }
- }
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/pause01.c b/winsup/testsuite/winsup.api/ltp/pause01.c
deleted file mode 100644
index 1c3b94607..000000000
--- a/winsup/testsuite/winsup.api/ltp/pause01.c
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : pause01
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for pause(2)
- *
- * PARENT DOCUMENT : xxxtds01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 2
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) pause(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the pause(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * pause(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <errno.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-
-const char *TCID="pause01"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={EINTR, 0};
-void go();
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- (void) signal(SIGALRM, go);
- alarm(1);
- /*
- * Call pause(2)
- */
- TEST(pause());
-
- /* check return code. Pause returns -1 and EINTR errno */
- if (TEST_RETURN != -1) {
- tst_resm(TFAIL,
- "pause() returned WITHOUT an error return code : %d",
- TEST_ERRNO);
- } else {
- /* log the errno */
- TEST_ERROR_LOG(TEST_ERRNO);
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* check the errno */
- if (TEST_ERRNO == EINTR)
- tst_resm(TPASS, "pause() returned %d", TEST_RETURN);
- else
- tst_resm(TFAIL, "pause() returned %d. Expected %d (EINTR)",
- TEST_RETURN, EINTR);
- }
- }
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
-
-/* routine to catch the alarm signal */
-void
-go()
-{
-}
diff --git a/winsup/testsuite/winsup.api/ltp/pipe01.c b/winsup/testsuite/winsup.api/ltp/pipe01.c
deleted file mode 100644
index cc01cc988..000000000
--- a/winsup/testsuite/winsup.api/ltp/pipe01.c
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * NAME
- * pipe01.c
- *
- * DESCRIPTION
- * Testcase to check the basic functionality of the pipe(2) syscall:
- * Check that both ends of the pipe (both file descriptors) are
- * available to a process opening the pipe.
- *
- * ALGORITHM
- * Write a string of characters down a pipe; read the string from the
- * other file descriptor. Test passes if both can be done, as reported
- * by the number of characters written and read.
- *
- * USAGE: <for command-line>
- * pipe01 [-c n] [-f] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -f : Turn off functionality Testing.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * RESTRICITONS
- * NONE
- */
-#include <errno.h>
-#include "test.h"
-#include "usctest.h"
-
-const char *TCID = "pipe01";
-int TST_TOTAL = 1;
-extern int Tst_count;
-
-void setup(void);
-void cleanup(void) __attribute__((noreturn));
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- int fildes[2]; /* fds for pipe read and write */
- char wrbuf[BUFSIZ], rebuf[BUFSIZ];
- int red, written; /* no. of chars read/written to pipe */
- int greater, length;
- char *strcpy();
-
- /* parse standard options */
- if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){
- tst_brkm(TBROK, tst_exit, "OPTION PARSING ERROR - %s", msg);
- /*NOTREACHED*/
- }
-
- setup();
-
- for (lc = 0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping */
- Tst_count = 0;
-
- TEST(pipe(fildes));
-
- if (TEST_RETURN == -1) {
- tst_resm(TFAIL, "pipe() failed unexpectedly - errno %d",
- TEST_ERRNO);
- continue;
- }
-
- if (STD_FUNCTIONAL_TEST) {
-
- strcpy(wrbuf, "abcdefghijklmnopqrstuvwxyz");
- length = strlen(wrbuf);
-
- if ((written = write(fildes[1], wrbuf, length)) == -1) {
- tst_brkm(TBROK, cleanup, "write() failed");
- }
-
- if ((written < 0) || (written > 26)) {
- tst_resm(TFAIL, "Condition #1 test failed");
- continue;
- }
-
- if ((red = read(fildes[0], rebuf, written)) == -1) {
- tst_brkm(TBROK, cleanup, "read() failed");
- }
-
- if ((red < 0) || (red > written)) {
- tst_resm(TFAIL, "Condition #2 test failed");
- continue;
- }
-
- /* are the strings written and read equal */
- if ((greater = memcmp(rebuf, wrbuf, red)) != 0) {
- tst_resm(TFAIL, "Condition #3 test failed");
- continue;
- }
- tst_resm(TPASS, "pipe() functionality is correct");
- } else {
- tst_resm(TPASS, "call succeeded");
- }
- }
- cleanup();
-
- /*NOTREACHED*/
-}
-
-/*
- * setup() - performs all ONE TIME setup for this test.
- */
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-}
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/pipe08.c b/winsup/testsuite/winsup.api/ltp/pipe08.c
deleted file mode 100644
index 70d61dab8..000000000
--- a/winsup/testsuite/winsup.api/ltp/pipe08.c
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * NAME
- * pipe08.c
- *
- * DESCRIPTION
- * Check that a SIGPIPE signal is generated when a write is
- * attempted on an empty pipe.
- *
- * ALGORITHM
- * 1. Write to a pipe after closing the read side.
- * 2. Check for the signal SIGPIPE to be received.
- *
- * USAGE: <for command-line>
- * pipe08 [-c n] [-f] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -f : Turn off functionality Testing.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * USAGE
- * pipe08
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS
- * None
- */
-#include <errno.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-const char *TCID = "pipe08";
-int TST_TOTAL = 1;
-extern int Tst_count;
-
-void setup(void);
-void cleanup(void) __attribute__((noreturn));
-void sighandler(int);
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- int pipefd[2]; /* fds for pipe read/write */
- char wrbuf[BUFSIZ];
- int written, length;
- int close_stat; /* exit status of close(read fd) */
-
- /* parse standard options */
- if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){
- tst_brkm(TBROK, tst_exit, "OPTION PARSING ERROR - %s", msg);
- /*NOTREACHED*/
- }
-
- if (!STD_FUNCTIONAL_TEST) {
- tst_resm(TWARN, "-f option should not be used");
- }
-
- setup();
-
- for (lc = 0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping */
- Tst_count = 0;
-
- TEST(pipe(pipefd));
-
- if (TEST_RETURN != 0) {
- tst_resm(TFAIL, "call failed unexpectedly");
- continue;
- }
-
- if ((close_stat = close(pipefd[0])) == -1) {
- tst_brkm(TBROK, cleanup, "close of read side failed");
- }
-
- strcpy(wrbuf, "abcdefghijklmnopqrstuvwxyz\0");
- length = strlen(wrbuf);
-
- /*
- * the SIGPIPE signal will be caught here or else
- * the program will dump core when the signal is
- * sent
- */
- written = write(pipefd[1], wrbuf, length);
- }
- cleanup();
-
- /*NOTREACHED*/
-}
-
-/*
- * sighandler - catch signals and look for SIGPIPE
- */
-void
-sighandler(int sig)
-{
- if (sig != SIGPIPE) {
- tst_resm(TFAIL, "expected SIGPIPE, got %d", sig);
- } else {
- tst_resm(TPASS, "got expected SIGPIPE signal");
- }
-}
-
-/*
- * setup() - performs all ONE TIME setup for this test.
- */
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, sighandler, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-}
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/pipe09.c b/winsup/testsuite/winsup.api/ltp/pipe09.c
deleted file mode 100644
index eb21bb601..000000000
--- a/winsup/testsuite/winsup.api/ltp/pipe09.c
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * NAME
- * pipe09.c
- *
- * DESCRIPTION
- * Check that two processes can use the same pipe at the same time.
- *
- * ALGORITHM
- * 1. Open a pipe
- * 2. Fork a child which writes to the pipe
- * 3. Fork another child which writes a different character to the pipe
- * 4. Have the parent read from the pipe
- * 5. It should get the characters from both children.
- *
- * USAGE: <for command-line>
- * pipe09 [-c n] [-f] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -f : Turn off functionality Testing.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS
- * None
- */
-#include <signal.h>
-#include <sys/wait.h>
-#include <errno.h>
-#include "test.h"
-#include "usctest.h"
-
-#define PIPEWRTCNT 100 /* must be an even number */
-
-const char *TCID = "pipe09";
-int TST_TOTAL = 1;
-extern int Tst_count;
-
-void setup(void);
-void cleanup(void) __attribute__((noreturn));
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- int i, red, wtstatus;
- int pipefd[2]; /* fds for pipe read/write */
- char rebuf[BUFSIZ];
- int Acnt = 0, Bcnt = 0; /* count 'A' and 'B' */
- int fork_1, fork_2; /* ret values in parent */
-
- /* parse standard options */
- if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){
- tst_brkm(TBROK, tst_exit, "OPTION PARSING ERROR - %s", msg);
- /*NOTREACHED*/
- }
-
- setup();
-
- for (lc = 0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping */
- Tst_count = 0;
-
- TEST(pipe(pipefd));
-
- if (TEST_RETURN == -1) {
- tst_resm(TFAIL, "pipe() call failed");
- continue;
- }
-
- if (!STD_FUNCTIONAL_TEST) {
- tst_resm(TWARN, "-f option should not be used");
- tst_resm(TPASS, "call succeeded");
- continue;
- }
-
- if ((fork_1 = fork()) == -1) {
- tst_brkm(TBROK, cleanup, "fork() #1 failed");
- /*NOTREACHED*/
- }
-
- if (fork_1 == 0) { /* 1st child */
- if (close(pipefd[0]) != 0) {
- tst_resm(TWARN, "pipefd[0] close failed, "
- "errno = %d", errno);
- exit(1);
- }
-
- for (i = 0; i < PIPEWRTCNT / 2; ++i) {
- if (write(pipefd[1], "A", 1) != 1) {
- tst_resm(TWARN, "write to pipe failed");
- exit(1);
- }
- }
- exit(0);
- }
-
- /* parent */
-
- waitpid(fork_1, &wtstatus, 0);
- if (WEXITSTATUS(wtstatus) != 0) {
- tst_brkm(TBROK, cleanup, "problem detected in child, "
- "wait status %d, errno = %d", wtstatus, errno);
- }
-
- if ((fork_2 = fork()) == -1) {
- tst_brkm(TBROK, cleanup, "fork() #2 failed");
- /*NOTREACHED*/
- }
-
- if (fork_2 == 0) { /* 2nd child */
- if (close(pipefd[0]) != 0) {
- tst_resm(TWARN, "pipefd[0] close "
- "failed, errno = %d", errno);
- exit(1);
- }
-
- for (i = 0; i < PIPEWRTCNT / 2; ++i) {
- if (write(pipefd[1], "B", 1) != 1) {
- tst_resm(TWARN, "write to pipe failed");
- exit(1);
- }
- }
- exit(0);
- }
-
- /* parent */
-
- waitpid(fork_2, &wtstatus, 0);
- if (WEXITSTATUS(wtstatus) != 0) {
- tst_brkm(TBROK, cleanup, "problem detected in child, "
- "wait status %d, errno = %d", wtstatus, errno);
- }
-
- if (close(pipefd[1]) != 0) {
- tst_brkm(TBROK, cleanup, "pipefd[1] close failed, "
- "errno = %d", errno);
- /*NOTREACHED*/
- }
-
- while ((red = read(pipefd[0], rebuf, 100)) > 0) {
- for (i = 0; i < red; i++) {
- if (rebuf[i] == 'A') {
- Acnt++;
- continue;
- }
- if (rebuf[i] == 'B') {
- Bcnt++;
- continue;
- }
- tst_resm(TFAIL, "got bogus '%c' character",
- rebuf[i]);
- break;
- }
- }
-
- if (red == -1) {
- tst_brkm(TBROK, cleanup, "Failure reading pipefd pipe, "
- "errno = %d", errno);
- }
-
- if (Bcnt == Acnt && Bcnt == (PIPEWRTCNT / 2)) {
- tst_resm(TPASS, "functionality appears to be correct");
- } else {
- tst_resm(TFAIL, "functionality is not correct - Acnt "
- "= %d, Bcnt = %d", Acnt, Bcnt);
- }
-
- /* clean up things in case we are looping */
- Acnt = Bcnt = 0;
- }
- cleanup();
-
- /*NOTREACHED*/
-}
-
-/*
- * setup() - performs all ONE TIME setup for this test.
- */
-void
-setup()
-{
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-}
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/pipe10.c b/winsup/testsuite/winsup.api/ltp/pipe10.c
deleted file mode 100644
index 52ac5d94e..000000000
--- a/winsup/testsuite/winsup.api/ltp/pipe10.c
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * NAME
- * pipe10.c
- *
- * DESCRIPTION
- * Check that parent can open a pipe and have a child read from it
- *
- * ALGORITHM
- * Parent opens pipe, child reads. Passes if child can read all the
- * characters written by the parent.
- *
- * USAGE: <for command-line>
- * pipe10 [-c n] [-f] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -f : Turn off functionality Testing.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS
- * None
- */
-#include <errno.h>
-#include <sys/wait.h>
-#include <test.h>
-#include <usctest.h>
-
-const char *TCID = "pipe10";
-int TST_TOTAL = 1;
-extern int Tst_count;
-
-void setup(void);
-void cleanup(void) __attribute__((noreturn));
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- int fd[2]; /* fds for pipe read/write */
- char wrbuf[BUFSIZ], rebuf[BUFSIZ];
- int red, written; /* no of chars read and */
- /* written to pipe */
- int length, greater, forkstat;
-
- /* parse standard options */
- if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){
- tst_brkm(TBROK, tst_exit, "OPTION PARSING ERROR - %s", msg);
- /*NOTREACHED*/
- }
-
- setup();
-
- for (lc = 0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping */
- Tst_count = 0;
-
- TEST(pipe(fd));
-
- if (TEST_RETURN == -1) {
- tst_resm(TFAIL, "pipe creation failed");
- continue;
- }
-
- if (!STD_FUNCTIONAL_TEST) {
- tst_resm(TPASS, "call succeeded");
- continue;
- }
-
- strcpy(wrbuf, "abcdefghijklmnopqrstuvwxyz\0");
- length = strlen(wrbuf);
-
- written = write(fd[1], wrbuf, length);
-
- /* did write write at least some chars */
- if ((written < 0) || (written > length)) {
- tst_brkm(TBROK, cleanup, "write to pipe failed");
- }
-
- forkstat = fork();
-
- if (forkstat == -1) {
- tst_brkm(TBROK, cleanup, "fork() failed");
- /*NOTREACHED*/
- }
-
- if (forkstat == 0) { /* child */
- red = read(fd[0], rebuf, written);
-
- /* did read , get at least some chars */
- if ((red < 0) || (red > written)) {
- tst_brkm(TBROK, cleanup, "read pipe failed");
- }
-
- greater = memcmp(rebuf, wrbuf, red);
-
- /* are the strings written and read equal */
- if (greater == 0) {
- tst_resm(TPASS, "functionality is correct");
- } else {
- tst_resm(TFAIL, "read & write strings do "
- "not match");
- }
- } else { /* parent */
- /* let the child carry on */
- exit(0);
- }
- }
- cleanup();
-
- /*NOTREACHED*/
-}
-
-/*
- * setup() - performs all ONE TIME setup for this test.
- */
-void
-setup()
-{
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-}
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/pipe11.c b/winsup/testsuite/winsup.api/ltp/pipe11.c
deleted file mode 100644
index 558e70a96..000000000
--- a/winsup/testsuite/winsup.api/ltp/pipe11.c
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * NAME
- * pipe11.c
- *
- * DESCRIPTION
- * Check if many children can read what is written to a pipe by the
- * parent.
- *
- * ALGORITHM
- * 1. Open a pipe and write to it
- * 2. Fork a large number of children
- * 3. Have the children read the pipe and check how many characters
- * each got
- *
- * USAGE: <for command-line>
- * pipe11 [-c n] [-f] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -f : Turn off functionality Testing.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS
- * None
- */
-#include <errno.h>
-#include <limits.h>
-#include <sys/wait.h>
-#include "test.h"
-#include "usctest.h"
-
-const char *TCID = "pipe11";
-int TST_TOTAL = 1;
-extern int Tst_count;
-
-void setup(void);
-void cleanup(void) __attribute__((noreturn));
-
-#define NUMCHILD 50
-#define NCPERCHILD 50
-char rawchars[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";
-int kidid;
-int numchild; /* no of children to fork */
-int ncperchild; /* no of chars child should read */
-int szcharbuf; /* size of char buf */
-int pipewrcnt; /* chars written to pipe */
-char *wrbuf, *rdbuf;
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- int fd[2]; /* fds for pipe read/write */
- int i;
- int fork_ret, status;
- int nread, written; /* no of chars read and written */
-
- /* parse standard options */
- if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){
- tst_brkm(TBROK, tst_exit, "OPTION PARSING ERROR - %s", msg);
- /*NOTREACHED*/
- }
-
- setup();
-
- for (lc = 0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping */
- Tst_count = 0;
-
- TEST(pipe(fd));
-
- if (TEST_RETURN != 0) {
- tst_resm(TFAIL, "pipe creation failed");
- continue;
- }
-
- if (!STD_FUNCTIONAL_TEST) {
- tst_resm(TPASS, "call succeeded");
- continue;
- }
-
- written = write(fd[1], wrbuf, szcharbuf);
- if (written != szcharbuf) {
- tst_brkm(TBROK, cleanup, "write to pipe failed");
- }
-
-refork:
- ++kidid;
- fork_ret = fork();
-
- if (fork_ret < 0) {
- tst_brkm(TBROK, cleanup, "fork() failed");
- /*NOTREACHED*/
- }
-
- if ((fork_ret != 0) && (fork_ret != -1) && (kidid < numchild)) {
- goto refork;
- }
-
- if (fork_ret == 0) { /* child */
- if (close(fd[1])) {
- tst_resm(TINFO, "child %d " "could not close "
- "pipe", kidid);
- exit(0);
- }
- nread = read(fd[0], rdbuf, ncperchild);
- if (nread == ncperchild) {
- tst_resm(TINFO, "child %d " "got %d chars",
- kidid, nread);
- exit(0);
- } else {
- tst_resm(TFAIL, "child %d did not receive "
- "expected no of characters, got %d "
- "characters", kidid, nread);
- exit(1);
- }
- }
-
- /* parent */
- sleep(5);
- tst_resm(TINFO, "There are %d children to wait for", kidid);
- for (i = 1; i <= kidid; ++i) {
- wait(&status);
- if (status == 0) {
- tst_resm(TPASS, "child %d exitted successfully",
- i);
- } else {
- tst_resm(TFAIL, "child %d exitted with bad "
- "status", i);
- }
- }
- }
- cleanup();
-
- /*NOTREACHED*/
-}
-
-/*
- * setup() - performs all ONE TIME setup for this test.
- */
-void
-setup()
-{
- int i, j;
-
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- numchild = NUMCHILD;
- ncperchild = NCPERCHILD;
-
- kidid = 0;
-
- /* allocate read and write buffers */
- szcharbuf = numchild * ncperchild;
-
- /* make sure pipe write doesn't block */
- if (szcharbuf == PIPE_BUF) {
- /* adjust number of characters per child */
- ncperchild = szcharbuf / numchild;
- }
-
- if ((wrbuf = (char *)malloc(szcharbuf)) == (char *)0) {
- tst_brkm(TBROK, cleanup, "malloc failed");
- /*NOTREACHED*/
- }
-
- if ((rdbuf = (char *)malloc(szcharbuf)) == (char *)0) {
- tst_brkm(TBROK, cleanup, "malloc of rdbuf failed");
- /*NOTREACHED*/
- }
-
- /* initialize wrbuf */
- j = 0;
- for (i = 0; i < szcharbuf; ) {
- wrbuf[i++] = rawchars[j++];
- if (j >= (int)sizeof(rawchars)) {
- j = 0;
- }
- }
-}
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/poll01.c b/winsup/testsuite/winsup.api/ltp/poll01.c
deleted file mode 100644
index 704b738a2..000000000
--- a/winsup/testsuite/winsup.api/ltp/poll01.c
+++ /dev/null
@@ -1,250 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * Test Name: poll01
- *
- * Test Description:
- * Verify that valid open file descriptor must be provided to poll() to
- * succeed.
- *
- * Expected Result:
- * poll should return the correct values when an valid file descriptor is
- * provided.
- *
- * Algorithm:
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Issue a FAIL message.
- * Otherwise,
- * Verify the Functionality of system call
- * if successful,
- * Issue Functionality-Pass message.
- * Otherwise,
- * Issue Functionality-Fail message.
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- * Usage: <for command-line>
- * poll01 [-c n] [-f] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -f : Turn off functionality Testing.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS:
- * None.
- */
-#include <errno.h>
-#include <fcntl.h>
-#include <sys/wait.h>
-#include <sys/poll.h>
-
-#include "test.h"
-#include "usctest.h"
-
-#define BUF_SIZE 512
-
-const char *TCID="poll01"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int fildes[2]; /* file descriptors of the pipe. */
-struct pollfd fds[1]; /* struct. for poll() */
-
-void setup(); /* Main setup function of test */
-void cleanup(void) __attribute__((noreturn)); /* cleanup function for the test */
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- pid_t cpid; /* child process id */
- char write_buf[] = "Testing\0"; /* buffer string for write */
- char read_buf[BUF_SIZE]; /* buffer for read-end of pipe */
- int status; /* exit status of child process */
- int rval;
-
- /* Parse standard options given to run the test. */
- msg = parse_opts(ac, av, (option_t *)NULL, NULL);
- if (msg != (char *)NULL) {
- tst_brkm(TBROK, tst_exit, "OPTION PARSING ERROR - %s", msg);
- }
-
- /* Perform global setup for test */
- setup();
-
- /* Check looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
-
- /* Reset Tst_count in case we are looping. */
- Tst_count = 0;
-
- /*
- * Call poll() with the TEST macro.
- */
- TEST(poll(fds, 1, -1));
-
- /* check return code of poll() */
- if (TEST_RETURN == -1) {
- tst_resm(TFAIL, "poll() failed on write, errno=%d"
- " : %s", TEST_ERRNO, strerror(TEST_ERRNO));
- continue;
- }
-
- /* write the message to the pipe */
- if (write(fildes[1], write_buf, strlen(write_buf))
- < (int)strlen(write_buf)) {
- tst_brkm(TBROK, cleanup, "write() failed on write "
- "to pipe, error:%d", errno);
- }
-
- /* Fork child process */
- if ((cpid = fork()) == -1) {
- tst_brkm(TBROK, cleanup, "fork() failed");
- }
-
- if (cpid == 0) { /* Child process */
- /*
- * close writing end of pipe and read from
- * the pipe
- */
- if (close(fildes[1]) == -1) {
- tst_brkm(TFAIL, NULL, "close() failed on write "
- "endof pipe, errno:%d", errno);
- exit(1);
- }
-
- /*
- * Set poll() data structures to check
- * if data is present on read
- */
- fds[0].fd = fildes[0];
- fds[0].events = POLLIN;
-
- /*
- * If data are present, then read the data. If poll()
- * and read() return expected values, then the
- * functionality of poll() is correct.
- */
- rval = (poll(fds, 1, -1));
-
- if (rval == -1) {
- tst_resm(TFAIL, "poll() failed on read - "
- "errno=%d : %s",
- TEST_ERRNO, strerror(errno));
- exit(1);
- }
-
- /* Read data from read end of pipe */
- if (read(fildes[0], read_buf, sizeof(read_buf)) !=
- (int)strlen(write_buf)) {
- tst_brkm(TFAIL, NULL, "read() failed - "
- "error:%d", errno);
- exit(1);
- }
-
- /* Now, do the actual comparision */
- if (memcmp(read_buf, write_buf, strlen(write_buf))) {
- tst_resm(TFAIL, "Data from reading pipe "
- "are different");
- exit(1);
- }
-
- /* Everything is fine, exit normally */
- exit(0);
- } else { /* Parent process */
- /* Wait for child to complete execution */
- wait(&status);
-
- if (WEXITSTATUS(status) == 1) {
- tst_resm(TFAIL, "child exited abnormally");
- } else {
- tst_resm(TPASS,
- "Functionality of poll() successful");
- }
- }
- } /* End for TEST_LOOPING */
-
- /* Call cleanup() to undo setup done for the test. */
- cleanup();
-
- /*NOTREACHED*/
-} /* End main */
-
-/*
- * setup() - performs all ONE TIME setup for this test.
- * Creat read/write pipe using pipe().
- * Set poll data structures to check writing to the pipe.
- */
-void
-setup()
-{
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- /* Creat read/write pipe */
- if (pipe(fildes) < 0) {
- tst_brkm(TBROK, tst_exit,
- "pipe() failed to create interprocess channel");
- }
-
- /* Set poll data structures */
- fds[0].fd = fildes[1];
- fds[0].events = POLLOUT;
-}
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- * close read end of pipe if still open.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* close read end of pipe if still open */
- if (close(fildes[0]) < 0) {
- tst_brkm(TFAIL, NULL, "close() failed on read-end of pipe, "
- "errno:%d", errno);
- }
-
- /* exit with return code appropriate for results */
- tst_exit();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/read01.c b/winsup/testsuite/winsup.api/ltp/read01.c
deleted file mode 100644
index 332b939a7..000000000
--- a/winsup/testsuite/winsup.api/ltp/read01.c
+++ /dev/null
@@ -1,280 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : read01
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for read(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) read(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the read(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * read(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <sys/types.h>
-#include <sys/fcntl.h>
-#include <sys/param.h>
-#include <errno.h>
-#include <signal.h>
-#include <string.h>
-#include "test.h"
-#include "usctest.h"
-
-/*
- * Set READ_BLOCK_SIZE to the block size of the system.
- */
-#ifdef linux
-#define READ_BLOCK_SIZE DEV_BSIZE
-#else
-#ifdef __CYGWIN__
-#define READ_BLOCK_SIZE S_BLKSIZE
-#else
-#define READ_BLOCK_SIZE BSIZE
-#endif
-#endif
-
-extern void setup();
-extern void cleanup();
-
-
-
-const char *TCID="read01"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0};
-char fname[255];
-int fd, i;
-int offset=0;
-char *s;
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- if (write(fd, s, READ_BLOCK_SIZE) == -1) {
- tst_brkm(TBROK, cleanup,
- "write(%s, %s, %d) Failed, errno=%d : %s",
- fname, s, READ_BLOCK_SIZE, errno, strerror(errno));
- }
- offset+=READ_BLOCK_SIZE;
- if (lseek(fd, (long)(offset-READ_BLOCK_SIZE), 0) == -1) {
- tst_brkm(TBROK, cleanup,
- "lseek(%s, %ld, 0) Failed, errno=%d : %s",
- fname, (long)(offset-READ_BLOCK_SIZE), errno, strerror(errno));
- }
- /*
- * Call read(2)
- */
- TEST(read(fd, s, READ_BLOCK_SIZE));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "read(fd, s, READ_BLOCK_SIZE) Failed, errno=%d : %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "read(pfds) returned %d", TEST_RETURN);
- }
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- if ((s = malloc(READ_BLOCK_SIZE)) == NULL) {
- tst_brkm(TBROK, cleanup,
- "malloc(%d) Failed, errno=%d : %s",
- READ_BLOCK_SIZE, errno, strerror(errno));
- }
- (void) memset(s, '*', READ_BLOCK_SIZE);
- for (i=0; i < READ_BLOCK_SIZE; i++) {
- if ( s[i] != '*' ) {
- tst_brkm(TBROK, cleanup,
- "File Data pattern not setup correctly : expected * at s[%d] : found %c",
- i, s[i]);
- }
- }
- sprintf(fname,"./tfile_%d",getpid());
- if ((fd=open(fname,O_RDWR|O_CREAT,0700)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR|O_CREAT,0700) Failed, errno=%d : %s",
- fname, errno, strerror(errno));
- }
-
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- if (close(fd) == -1 ) {
- tst_resm(TWARN, "close(%s) Failed, errno=%d : %s",
- fname, errno, strerror(errno));
- }
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/read04.c b/winsup/testsuite/winsup.api/ltp/read04.c
deleted file mode 100644
index c976cd6a4..000000000
--- a/winsup/testsuite/winsup.api/ltp/read04.c
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * NAME
- * read01.c
- *
- * DESCRIPTION
- * Testcase to check if read returns the number of bytes read correctly.
- *
- * ALGORITHM
- * Create a file and write some bytes out to it.
- * Attempt to read more than written.
- * Check the return count, and the read buffer. The read buffer should be
- * same as the write buffer.
- *
- * USAGE: <for command-line>
- * read01 [-c n] [-f] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -f : Turn off functionality Testing.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS
- * None
- */
-#include <fcntl.h>
-#include <errno.h>
-#include "test.h"
-#include "usctest.h"
-
-void cleanup(void) __attribute__((noreturn));
-void setup(void);
-
-const char *TCID = "read01";
-int TST_TOTAL = 1;
-extern int Tst_count;
-
-#define TST_SIZE 26 /* could also do strlen(palfa) */
-char fname[255];
-char palfa[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ;
-int fild;
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- int rfild;
- char prbuf[BUFSIZ];
-
- /*
- * parse standard options
- */
- if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){
- tst_brkm(TBROK, tst_exit, "OPTION PARSING ERROR - %s", msg);
- /*NOTREACHED*/
- }
-
- setup(); /* global setup for test */
-
- /* check looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
-
- Tst_count = 0; /* reset Tst_count while looping */
-
- if ((rfild = open(fname, O_RDONLY)) == -1) {
- tst_brkm(TBROK, cleanup, "can't open for reading");
- /*NOTREACHED*/
- }
- TEST(read(rfild, prbuf, BUFSIZ));
-
- if (TEST_RETURN == -1) {
- tst_resm(TFAIL, "call failed unexpectedly");
- continue;
- }
-
- if (STD_FUNCTIONAL_TEST) {
- if (TEST_RETURN != TST_SIZE) {
- tst_resm(TFAIL, "Bad read count - got %d - "
- "expected %d", TEST_RETURN, TST_SIZE);
- continue;
- }
- if (memcmp(palfa, prbuf, TST_SIZE) != 0) {
- tst_resm(TFAIL, "read buffer not equal "
- "to write buffer");
- continue;
- }
- tst_resm(TPASS, "functionality of read() is correct");
- } else {
- tst_resm(TPASS, "call succeeded");
- }
- if (close(rfild) == -1) {
- tst_brkm(TBROK, cleanup, "close() failed");
- /*NOTREACHED*/
- }
- }
- cleanup();
- /*NOTREACHED*/
-}
-
-/*
- * setup() - performs all ONE TIME setup for this test
- */
-void
-setup(void)
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- umask(0);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- sprintf(fname,"tfile_%d",getpid());
-
- if ((fild = creat(fname, 0777)) == -1) {
- tst_brkm(TBROK, cleanup, "creat(%s, 0777) Failed, errno = %d"
- " : %s", fname, errno, strerror(errno));
- /*NOTREACHED*/
- }
- if (write(fild, palfa, TST_SIZE) != TST_SIZE) {
- tst_brkm(TBROK, cleanup, "can't write to Xread");
- /*NOTREACHED*/
- }
- close (fild);
-}
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at completion or
- * premature exit.
- */
-void
-cleanup(void)
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* Remove tmp dir and all files in it */
- unlink(fname);
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/readdir01.c b/winsup/testsuite/winsup.api/ltp/readdir01.c
deleted file mode 100644
index c77e90680..000000000
--- a/winsup/testsuite/winsup.api/ltp/readdir01.c
+++ /dev/null
@@ -1,350 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : readdir01
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : write multiple files and try to find them with readdir
- *
- * TEST CASE TOTAL :
- *
- * WALL CLOCK TIME :
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : Nate Straz
- *
- * CO-PILOT :
- *
- * DATE STARTED : 02/16/2001
- *
- * INITIAL RELEASE : Linux 2.4.x
- *
- * TEST CASES
- *
- * 1.) Create n files and check that readdir() finds n files
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the readdir(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * readdir(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <dirent.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
- /* test.h and usctest.h are the two header files that are required by the
- * quickhit package. They contain function and macro declarations which you
- * can use in your test programs
- */
-#include "test.h"
-#include "usctest.h"
-
- /* The setup and cleanup functions are basic parts of a test case. These
- * steps are usually put in separate functions for clarity. The help function
- * is only needed when you are adding new command line options.
- */
-void setup();
-void help();
-void cleanup(void) __attribute__((noreturn));
-
-const char *TCID="readdir01"; /* Test program identifier. */
-int TST_TOTAL=2; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-extern int Tst_nobuf;
-
-int exp_enos[]={0, 0};
-
-#define BASENAME "readdirfile"
-
-char Basename[255];
-char Fname[255];
-int Nfiles=0;
-
-/* To add command line options you need to declare a structure to pass to
- * parse_opts(). options is the structure used in this example. The format is
- * the string that should be added to optstring in getopt(3), an integer that
- * will be used as a flag if the option is given, and a pointer to a string that
- * should receive the optarg parameter from getopt(3). Here we add a -N
- * option. Long options are not supported at this time.
- */
-char *Nfilearg;
-int Nflag=0;
-
-/* for test specific parse_opts options */
-option_t options[] = {
- { "N:", &Nflag, &Nfilearg }, /* -N #files */
- { NULL, NULL, NULL }
-};
-
-/***********************************************************************
- * Main
- ***********************************************************************/
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- int cnt;
- int nfiles, fd;
- char fname[255];
- DIR *test_dir;
- struct dirent *dptr;
-
- Tst_nobuf=1;
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- /* start off by parsing the command line options. We provide a function
- * that understands many common options to control looping. If you are not
- * adding any new options, pass NULL in place of options and &help.
- */
- if ( (msg=parse_opts(ac, av, options, &help)) ) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- if ( Nflag ) {
- if (sscanf(Nfilearg, "%i", &Nfiles) != 1 ) {
- tst_brkm(TBROK, NULL, "--N option arg is not a number");
- tst_exit();
- }
- }
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- /* Next you should run a setup routine to make sure your environment is
- * sane.
- */
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state
- ***************************************************************/
- /* TEST_LOOPING() is a macro that will make sure the test continues
- * looping according to the standard command line args.
- */
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- if ( Nfiles )
- nfiles = Nfiles;
- else
- /* min of 10 links and max of a 100 links */
- nfiles = (lc%90)+10;
-
- /* create a bunch of files to look at */
- for(cnt=0; cnt < nfiles; cnt++) {
-
- sprintf(fname, "%s%d", Basename, cnt);
- if ((fd = open(fname, O_RDWR|O_CREAT, 0700)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR|O_CREAT,0700) Failed, errno=%d : %s", fname, errno, strerror(errno));
- } else if (write(fd, "hello\n", 6) < 0) {
- tst_brkm(TBROK, cleanup,
- "write(%s, \"hello\\n\", 6) Failed, errno=%d : %s", fname, errno, strerror(errno));
- } else if (close(fd) < 0) {
- tst_res(TWARN, "close(%s) Failed, errno=%d : %s",
- fname, errno, strerror(errno));
- }
- }
-
- if ((test_dir = opendir(".")) == NULL) {
- tst_resm(TFAIL, "opendir(\".\") Failed, errno=%d : %s",
- errno, strerror(errno));
- } else {
- /* count the entries we find to see if any are missing */
- cnt = 0;
- errno = 0;
- while ( (dptr = readdir(test_dir)) ) {
- if (strcmp(dptr->d_name, ".") && strcmp(dptr->d_name, ".."))
- cnt++;
- }
-
- if (errno != 0) {
- tst_resm(TFAIL, "readir(test_dir) Failed on try %d, errno=%d : %s",
- cnt, errno, strerror(errno));
- }
- if (cnt == nfiles) {
- tst_resm(TPASS, "found all %d that were created", nfiles);
- } else if (cnt > nfiles) {
- tst_resm(TFAIL, "found more files than were created");
- tst_resm(TINFO, "created: %d, found: %d", nfiles, cnt);
- } else {
- tst_resm(TFAIL, "found less files than were created");
- tst_resm(TINFO, "created: %d, found: %d", nfiles, cnt);
- }
- }
-
- /* Here we clean up after the test case so we can do another iteration.
- */
- for(cnt=0; cnt < nfiles; cnt++) {
-
- sprintf(fname, "%s%d", Basename, cnt);
-
- if (unlink(fname) == -1) {
- tst_res(TWARN, "unlink(%s) Failed, errno=%d : %s",
- Fname, errno, strerror(errno));
- }
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * help
- ***************************************************************/
-/* The custom help() function is really simple. Just write your help message to
- * standard out. Your help function will be called after the standard options
- * have been printed
- */
-void
-help()
-{
- printf(" -N #files : create #files files every iteration\n");
-}
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* You will want to enable some signal handling so you can capture
- * unexpected signals like SIGSEGV.
- */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- /* One cavet that hasn't been fixed yet. TEST_PAUSE contains the code to
- * fork the test with the -c option. You want to make sure you do this
- * before you create your temporary directory.
- */
- TEST_PAUSE;
-
- /* If you are doing any file work, you should use a temporary directory. We
- * provide tst_tmpdir() which will create a uniquely named temporary
- * directory and cd into it. You can now create files in the current
- * directory without worrying.
- */
- tst_tmpdir();
-
- sprintf(Basename, "%s_%d.", BASENAME, getpid());
-}
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* If you use a temporary directory, you need to be sure you remove it. Use
- * tst_rmdir() to do it automatically.
- */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/readlink01.c b/winsup/testsuite/winsup.api/ltp/readlink01.c
deleted file mode 100644
index 744fff02a..000000000
--- a/winsup/testsuite/winsup.api/ltp/readlink01.c
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * Test Name : readlink01
- *
- * Test Description :
- * Verify that, readlink will succeed to read the contents of the symbolic
- * link created the process.
- *
- * Expected Result:
- * readlink() should return the contents of symbolic link path in the buffer
- * on success.
- *
- * Algorithm:
- * Setup:
- * Setup signal handling.
- * Create temporary directory.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Issue a FAIL message.
- * Otherwise,
- * Verify the Functionality of system call
- * if successful,
- * Issue Functionality-Pass message.
- * Otherwise,
- * Issue Functionality-Fail message.
- * Cleanup:
- * Print errno log and/or timing stats if options given
- * Delete the temporary directory created.
- *
- * Usage: <for command-line>
- * readlink01 [-c n] [-f] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -f : Turn off functionality Testing.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS:
- * This test should be run by 'non-super-user' only.
- *
- */
-#include <fcntl.h>
-#include <errno.h>
-#include <sys/stat.h>
-
-#include "test.h"
-#include "usctest.h"
-
-#define TESTFILE "testfile"
-#define SYMFILE "slink_file"
-#define FILE_MODE S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH
-#define MAX_SIZE 256
-
-const char *TCID="readlink01"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_val; /* strlen of testfile */
-
-void setup(); /* Setup function for the test */
-void cleanup(void) __attribute__((noreturn)); /* Cleanup function for the test */
-
-int
-main(int ac, char **av)
-{
- char buffer[MAX_SIZE]; /* temporary buffer to hold symlink contents*/
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /* Parse standard options given to run the test. */
- msg = parse_opts(ac, av, (option_t *)NULL, NULL);
- if (msg != (char *)NULL) {
- tst_brkm(TBROK, tst_exit, "OPTION PARSING ERROR - %s", msg);
- }
-
- /* Perform global setup for test */
- setup();
-
- /* Check looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
-
- /* Reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call readlink(2) to read the contents of
- * symlink into a buffer.
- */
- TEST(readlink(SYMFILE, buffer, sizeof(buffer)));
-
- /* Check return code of readlink(2) */
- if (TEST_RETURN == -1) {
- tst_resm(TFAIL, "readlink() on %s failed, errno=%d : %s"
- , SYMFILE, TEST_ERRNO, strerror(TEST_ERRNO));
- continue;
- }
-
- /*
- * Perform functional verification if test
- * executed without (-f) option.
- */
- if (STD_FUNCTIONAL_TEST) {
- /*
- * Compare the return value of readlink()
- * with the expected value which is the
- * strlen() of testfile.
- */
- if (TEST_RETURN == exp_val) {
- /* Check for the contents of buffer */
- if (memcmp(buffer, TESTFILE, exp_val) != 0) {
- tst_resm(TFAIL, "Pathname %s and buffer"
- " contents %s differ",
- TESTFILE, buffer);
- } else {
- tst_resm(TPASS, "readlink() "
- "functionality on '%s' is "
- "correct", SYMFILE);
- }
- } else {
- tst_resm(TFAIL, "readlink() return value %d "
- "does't match, Expected %d",
- TEST_RETURN, exp_val);
- }
- } else {
- tst_resm(TPASS, "call succeeded");
- }
- } /* End for TEST_LOOPING */
-
- /* Call cleanup() to undo setup done for the test. */
- cleanup();
-
- /*NOTREACHED*/
-} /* End main */
-
-/*
- * setup() - performs all ONE TIME setup for this test.
- *
- * Create a temporary directory and change directory to it.
- * Create a test file under temporary directory and close it
- * Create a symbolic link of testfile.
- */
-void
-setup()
-{
- int fd; /* file handle for testfile */
-
- /* make sure test is not being run as root */
- if (0 == geteuid()) {
- tst_brkm(TBROK, tst_exit, "Must not run test as root");
- }
-
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- if ((fd = open(TESTFILE, O_RDWR|O_CREAT, FILE_MODE)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR|O_CREAT, %#o) failed, errno=%d : %s",
- TESTFILE, FILE_MODE, errno, strerror(errno));
- }
-
- if (close(fd) == -1) {
- tst_resm(TWARN, "close(%s) Failed, errno=%d : %s",
- TESTFILE, errno, strerror(errno));
- }
-
- /* Create a symlink of testfile under temporary directory */
- if (symlink(TESTFILE, SYMFILE) < 0) {
- tst_brkm(TBROK, cleanup,
- "symlink(%s, %s) failed, errno=%d : %s",
- TESTFILE, SYMFILE, errno, strerror(errno));
- }
-
- /* Get the strlen of testfile */
- exp_val = strlen(TESTFILE);
-}
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- *
- * Remove the test directory and testfile created in the setup.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/readlink02.c b/winsup/testsuite/winsup.api/ltp/readlink02.c
deleted file mode 100644
index 4ef6ffa11..000000000
--- a/winsup/testsuite/winsup.api/ltp/readlink02.c
+++ /dev/null
@@ -1,244 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : readlink02
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for readlink(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) readlink(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the readlink(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * readlink(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <sys/types.h>
-#include <sys/fcntl.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-
-const char *TCID="readlink02"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0};
-char fname[255], buf[255], symlnk[255];
-int fd;
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call readlink(2)
- */
- TEST(readlink(symlnk, buf, 255));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "readlink(%s, buf, 255) Failed, errno=%d : %s", symlnk,
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "readlink(%s, buf, 255) returned %d", symlnk, TEST_RETURN);
- }
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- sprintf(fname,"./tfile_%d",getpid());
- if ((fd=open(fname,O_RDWR|O_CREAT,0700)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR|O_CREAT,0700) Failed, errno=%d : %s",
- fname, errno, strerror(errno));
- }
- if (close(fd) == -1 ) {
- tst_resm(TWARN, "close(%s) Failed, errno=%d : %s",
- fname, errno, strerror(errno));
- }
- sprintf(symlnk,"./sl_%d",getpid());
- if (symlink(fname, symlnk) == -1) {
- tst_resm(TWARN, "symlnk(%s, %s) Failed, errno=%d : %s",
- fname, symlnk, errno, strerror(errno));
- }
-
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/readlink03.c b/winsup/testsuite/winsup.api/ltp/readlink03.c
deleted file mode 100644
index 41cf4bbe9..000000000
--- a/winsup/testsuite/winsup.api/ltp/readlink03.c
+++ /dev/null
@@ -1,360 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * Test Name : readlink03
- *
- * Test Description :
- * Verify that,
- * 1) readlink(2) returns -1 and sets errno to EACCES if search/write
- * permission is denied in the directory where the symbolic link
- * resides.
- * 2) readlink(2) returns -1 and sets errno to EINVAL if the buffer size
- * is not positive.
- * 3) readlink(2) returns -1 and sets errno to EINVAL if the specified
- * file is not a symbolic link file.
- * 4) readlink(2) returns -1 and sets errno to ENAMETOOLONG if the
- * pathname component of symbolic link is too long (ie, > PATH_MAX).
- * 5) readlink(2) returns -1 and sets errno to ENOENT if the component of
- * symbolic link points to an empty string.
- *
- * Expected Result:
- * readlink() should fail with return value -1 and set expected errno.
- *
- * Algorithm:
- * Setup:
- * Setup signal handling.
- * Create temporary directory.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * if errno set == expected errno
- * Issue sys call fails with expected return value and errno.
- * Otherwise,
- * Issue sys call fails with unexpected errno.
- * Otherwise,
- * Issue sys call returns unexpected value.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- * Delete the temporary directory(s)/file(s) created.
- *
- * Usage: <for command-line>
- * readlink03 [-c n] [-e] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -e : Turn on errno logging.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS:
- * This test should be executed by 'non-super-user' only.
- */
-
-#include <sys/types.h>
-#include <sys/fcntl.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include <sys/stat.h>
-
-#include "test.h"
-#include "usctest.h"
-
-#define MODE_RWX S_IRWXU | S_IRWXG | S_IRWXO
-#define FILE_MODE S_IRUSR | S_IRGRP | S_IROTH
-#define DIR_TEMP "testdir_1"
-#define TESTFILE "testfile"
-#define TEST_FILE1 "testdir_1/tfile_1"
-#define SYM_FILE1 "testdir_1/sfile_1"
-#define TEST_FILE2 "tfile_2"
-#define SYM_FILE2 "sfile_2"
-#define MAX_SIZE 256
-
-const char *TCID="readlink03"; /* Test program identifier. */
-int TST_TOTAL=5; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-int exp_enos[]={EACCES, EINVAL, ENAMETOOLONG, ENOENT, 0};
-
-int no_setup();
-int setup1(); /* setup function to test symlink for EACCES */
-int setup2(); /* setup function to test symlink for EEXIST */
-int lpath_setup(); /* setup function to test chmod for ENAMETOOLONG */
-
-char Longpathname[PATH_MAX+2];
-
-struct test_case_t { /* test case struct. to hold ref. test cond's*/
- const char *link;
- const char *desc;
- int exp_errno;
- size_t buf_siz;
- int (*setupfunc)();
-} Test_cases[] = {
-#ifndef __CYGWIN__
- { SYM_FILE1, "No Search permissions to process", EACCES, 1, setup1 },
- { SYM_FILE2, "Buffer size is not positive", EINVAL, -1, setup2 },
- { TEST_FILE2, "File is not symbolic link", EINVAL, 1, no_setup },
-#else
- { TEST_FILE2, "File is not symbolic link", EINVAL, 1, setup2 },
-#endif
- { Longpathname, "Symlink path too long", ENAMETOOLONG, 1, lpath_setup },
- { "", "Symlink Pathname is empty", ENOENT, 1, no_setup },
- { NULL, NULL, 0, 0, no_setup }
-};
-
-extern void setup(); /* Setup function for the test */
-void cleanup() __attribute__((noreturn));/* Cleanup function for the test */
-
-int
-main(int ac, char **av)
-{
- char buffer[MAX_SIZE]; /* temporary buffer to hold symlink contents*/
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- const char *sym_file; /* symbolic link file name */
- const char *test_desc; /* test specific error message */
- int i; /* counter to test different test conditions */
- size_t buf_size; /* size of buffer for readlink */
-
- /* Parse standard options given to run the test. */
- msg = parse_opts(ac, av, (option_t *)NULL, NULL);
- if (msg != (char *)NULL) {
- tst_brkm(TBROK, tst_exit, "OPTION PARSING ERROR - %s", msg);
- }
-
- /*
- * Invoke setup function to call individual test setup functions
- * to simulate test conditions.
- */
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /* Check looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- /* Reset Tst_count in case we are looping. */
- Tst_count=0;
-
- for (i = 0; Test_cases[i].desc != NULL; i++) {
- sym_file = Test_cases[i].link;
- test_desc = Test_cases[i].desc;
- buf_size = Test_cases[i].buf_siz;
-
- if (buf_size == 1) {
- buf_size = sizeof(buffer);
- }
-
- /*
- * Call readlink(2) to test different test conditions.
- * verify that it fails with -1 return value and sets
- * appropriate errno.
- */
- TEST(readlink(sym_file, buffer, buf_size));
-
- /* Check return code of readlink(2) */
- if (TEST_RETURN != -1) {
- tst_resm(TFAIL, "readlink() returned %d, "
- "expected -1, errno:%d", TEST_RETURN,
- Test_cases[i].exp_errno);
- continue;
- }
-
- TEST_ERROR_LOG(TEST_ERRNO);
-
- if (TEST_ERRNO == Test_cases[i].exp_errno) {
- tst_resm(TPASS, "readlink(), %s, returned "
- "errno %d", test_desc, TEST_ERRNO);
- tst_resm(TPASS, "readlink(), %s, returned "
- "errno %d", test_desc, TEST_ERRNO);
- } else {
- tst_resm(TFAIL, "readlink() failed, %s, "
- "errno=%d, expected errno=%d",
- test_desc, TEST_ERRNO,
- Test_cases[i].exp_errno);
- }
- } /* End of TEST CASE LOOPING. */
- } /* End for TEST_LOOPING */
- /* Call cleanup() to undo setup done for the test. */
- cleanup();
-
- /*NOTREACHED*/
-} /* End main */
-
-/*
- * setup() - performs all ONE TIME setup for this test.
- *
- * Create a temporary directory and change directory to it.
- * Call test specific setup functions.
- */
-void
-setup()
-{
- int i;
-
- /* make sure test is not being run as root */
- if (0 == geteuid()) {
- tst_brkm(TBROK, tst_exit, "Must not run test as root");
- }
-
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* call individual setup functions */
- for (i = 0; Test_cases[i].desc != NULL; i++) {
- Test_cases[i].setupfunc();
- }
-}
-
-/*
- * no_setup() - Some test conditions for readlink(2) do not any setup.
- */
-int
-no_setup()
-{
- return 0;
-}
-
-/*
- * setup1() - setup function for a test condition for which readlink(2)
- * returns -1 and sets errno to EACCES.
- *
- * Create a test directory under temporary directory and create a test file
- * under this directory with mode "0666" permissions.
- * Create a symlink of testfile under test directory.
- * Modify the mode permissions on test directory such that process will not
- * have search permissions on test directory.
- */
-int
-setup1()
-{
- int fd; /* file handle for testfile */
-
- if (mkdir(DIR_TEMP, MODE_RWX) < 0) {
- tst_brkm(TBROK, cleanup, "mkdir(2) of %s failed", DIR_TEMP);
- }
-
- if ((fd = open(TEST_FILE1, O_RDWR|O_CREAT, 0666)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR|O_CREAT, 0666) failed, errno=%d : %s",
- TEST_FILE1, errno, strerror(errno));
- }
- if (close(fd) == -1) {
- tst_brkm(TBROK, cleanup, "close(%s) failed, errno=%d : %s",
- TEST_FILE1, errno, strerror(errno));
- }
-
- /* Creat a symbolic link of testfile under test directory */
- if (symlink(TEST_FILE1, SYM_FILE1) < 0) {
- tst_brkm(TBROK, cleanup, "symlink of %s failed", TEST_FILE1);
- }
-
- /* Modify mode permissions on test directory */
- if (chmod(DIR_TEMP, FILE_MODE) < 0) {
- tst_brkm(TBROK, cleanup, "chmod(2) of %s failed", DIR_TEMP);
- }
- return 0;
-}
-
-/*
- * setup2() - setup function for a test condition for which readlink(2)
- * returns -1 and sets errno to EINVAL.
- *
- * Create a testfile under temporary directory and create a symlink
- * file of it.
- */
-int
-setup2()
-{
- int fd; /* file handle for testfile */
-
- /* Creat a testfile and close it */
- if ((fd = open(TEST_FILE2, O_RDWR|O_CREAT, 0666)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR|O_CREAT, 0666) failed, errno=%d : %s",
- TEST_FILE2, errno, strerror(errno));
- }
- if (close(fd) == -1) {
- tst_brkm(TBROK, cleanup, "close(%s) failed, errno=%d : %s",
- TEST_FILE2, errno, strerror(errno));
- }
-
- /* Creat a symlink of testfile created above */
- if (symlink(TEST_FILE2, SYM_FILE2) < 0) {
- tst_brkm(TBROK, cleanup, "symlink() failed to create %s in "
- "setup2, error=%d", SYM_FILE2, errno);
- }
- return 0;
-}
-
-/*
- * lpath_setup() - setup to create a node with a name length exceeding
- * the MAX. length of PATH_MAX.
- */
-int
-lpath_setup()
-{
- int i; /* counter variable */
-
- for (i = 0; i <= (PATH_MAX + 1); i++) {
- Longpathname[i] = 'a';
- }
- return 0;
-}
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- *
- * Restore the mode permissions on test directory.
- * Remove the temporary directory created in the setup.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* Restore mode permissions on test directory created in setup2() */
- if (chmod(DIR_TEMP, MODE_RWX) < 0) {
- tst_brkm(TBROK, NULL, "chmod(2) of %s failed", DIR_TEMP);
- }
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/rename01.c b/winsup/testsuite/winsup.api/ltp/rename01.c
deleted file mode 100644
index 14ae1f245..000000000
--- a/winsup/testsuite/winsup.api/ltp/rename01.c
+++ /dev/null
@@ -1,263 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * NAME
- * rename01
- *
- * DESCRIPTION
- * This test will verify the rename(2) syscall basic functionality.
- * Verify rename() works when the "new" file or directory does not exist.
- *
- * ALGORITHM
- * Setup:
- * Setup signal handling.
- * Create temporary directory.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * 1. "old" is plain file, new does not exists
- * create the "old" file, make sure the "new" file
- * dose not exist
- * rename the "old" to the "new" file
- * verify the "new" file points to the "old" file
- * verify the "old" file does not exist
- *
- * 2. "old" is a directory,"new" does not exists
- * create the "old" directory, make sure "new"
- * dose not exist
- * rename the "old" to the "new"
- * verify the "new" points to the "old"
- * verify the "old" does not exist
- * Cleanup:
- * Print errno log and/or timing stats if options given
- * Delete the temporary directory created.
- *
- * USAGE
- * rename01 [-c n] [-f] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -f : Turn off functionality Testing.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS
- * None.
- */
-#include <sys/types.h>
-#include <sys/fcntl.h>
-#include <sys/stat.h>
-#include <errno.h>
-
-#include "test.h"
-#include "usctest.h"
-
-void setup();
-void cleanup(void) __attribute__((noreturn));
-extern void do_file_setup(char *);
-
-const char *TCID="rename01"; /* Test program identifier. */
-int TST_TOTAL=2; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-char fname[255], mname[255];
-char fdir[255], mdir[255];
-struct stat buf1;
-dev_t f_olddev, d_olddev;
-ino_t f_oldino, d_oldino;
-
-struct test_case_t {
- const char *name1;
- const char *name2;
- const char *desc;
- dev_t *olddev;
- ino_t *oldino;
-} TC[] = {
- /* comment goes here */
- {fname, mname, "file", &f_olddev, &f_oldino},
-
- /* comment goes here */
- {fdir, mdir, "directory", &d_olddev, &d_oldino}
-};
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- int i;
-
- /*
- * parse standard options
- */
- if ((msg=parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL) {
- tst_brkm(TBROK, tst_exit, "OPTION PARSING ERROR - %s", msg);
- }
-
- /*
- * perform global setup for test
- */
- setup();
-
- /*
- * check looping state if -i option given
- */
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /* loop through the test cases */
- for (i=0; i<TST_TOTAL; i++) {
-
- TEST(rename(TC[i].name1, TC[i].name2));
-
- if (TEST_RETURN == -1) {
- tst_resm(TFAIL, "call failed unexpectedly");
- continue;
- }
-
- if (STD_FUNCTIONAL_TEST) {
- if (stat(TC[i].name2, &buf1) == -1) {
- tst_brkm(TBROK, cleanup, "stat of %s "
- "failed", TC[i].desc);
- /* NOTREACHED */
- }
-
- /*
- * verify the new file or directory is the
- * same as the old one
- */
- if (buf1.st_dev != *TC[i].olddev ||
- buf1.st_ino != *TC[i].oldino) {
- tst_resm(TFAIL, "rename() failed: the "
- "new %s points to a different "
- "inode/location", TC[i].desc);
- continue;
- }
- /*
- * verify that the old file or directory
- * does not exist
- */
- if (stat(fname, &buf1) != -1) {
- tst_resm(TFAIL, "the old %s still "
- "exists", TC[i].desc);
- continue;
- }
-
- tst_resm(TPASS, "functionality is correct "
- "for renaming a %s", TC[i].desc);
- } else {
- tst_resm(TPASS, "call succeeded on %s rename",
- TC[i].desc);
- }
- }
- /* reset things in case we are looping */
- if (rename(mname, fname) == -1) {
- tst_brkm(TBROK, cleanup, "file rename failed");
- }
-
- if (rename(mdir, fdir) == -1) {
- tst_brkm(TBROK, cleanup, "directory rename failed");
- }
- } /* End for TEST_LOOPING */
-
- /*
- * cleanup and exit
- */
- cleanup();
- /*NOTREACHED*/
-}
-
-/*
- * setup() - performs all ONE TIME setup for this test.
- */
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- /* Create a temporary directory and make it current. */
- tst_tmpdir();
-
- sprintf(fname,"./tfile_%d",getpid());
- sprintf(mname,"./rnfile_%d",getpid());
- sprintf(fdir,"./tdir_%d",getpid());
- sprintf(mdir,"./rndir_%d",getpid());
-
- /* create the "old" file */
- do_file_setup(fname);
-
- if (stat(fname, &buf1)== -1) {
- tst_brkm(TBROK,cleanup, "failed to stat file %s"
- "in setup()", fname);
- /* NOTREACHED */
- }
-
- f_olddev = buf1.st_dev;
- f_oldino = buf1.st_ino;
-
- /* create "old" directory */
- if (mkdir(fdir, 00770) == -1) {
- tst_brkm(TBROK, cleanup, "Could not create directory %s", fdir);
- /*NOTREACHED*/
- }
-
- if (stat(fdir, &buf1) == -1) {
- tst_brkm(TBROK, cleanup, "failed to stat directory %s"
- "in setup()", fname);
- /* NOTREACHED */
- }
-
- d_olddev = buf1.st_dev;
- d_oldino = buf1.st_ino;
-}
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /*
- * Remove the temporary directory.
- */
- tst_rmdir();
-
- /*
- * Exit with return code appropriate for results.
- */
- tst_exit();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/rename02.c b/winsup/testsuite/winsup.api/ltp/rename02.c
deleted file mode 100644
index d34cd104a..000000000
--- a/winsup/testsuite/winsup.api/ltp/rename02.c
+++ /dev/null
@@ -1,251 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : rename02
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for rename(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) rename(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the rename(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * rename(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <sys/types.h>
-#include <sys/fcntl.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-void do_file_setup();
-
-
-
-const char *TCID="rename02"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0};
-int fd;
-char fname[255], mname[255];
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call rename(2)
- */
- TEST(rename(fname, mname));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "rename(%s, %s) Failed, errno=%d : %s", fname, mname,
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "rename(%s, %s) returned %d", fname, mname, TEST_RETURN);
- }
- if (unlink(mname) == -1) {
- tst_resm(TWARN, "unlink(%s) Failed, errno=%d : %s", mname, errno, strerror(errno));
- }
- do_file_setup();
- }
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- sprintf(fname,"./tfile_%d",getpid());
- sprintf(mname,"./rnfile_%d",getpid());
- do_file_setup();
-
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-
-} /* End cleanup() */
-
-void
-do_file_setup()
-{
- if ((fd=open(fname,O_RDWR|O_CREAT,0700)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR|O_CREAT,0700) Failed, errno=%d : %s",
- fname, errno, strerror(errno));
- }
-
- if (close(fd) == -1 )
- tst_resm(TWARN, "close(%s) Failed on file create, errno=%d : %s",
- fname, errno, strerror(errno));
-
-}
diff --git a/winsup/testsuite/winsup.api/ltp/rename08.c b/winsup/testsuite/winsup.api/ltp/rename08.c
deleted file mode 100644
index 0788ddc98..000000000
--- a/winsup/testsuite/winsup.api/ltp/rename08.c
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * NAME
- * rename08
- *
- * DESCRIPTION
- * This test will verify that rename(2) syscall failed in EFAULT
- *
- * ALGORITHM
- * Setup:
- * Setup signal handling.
- * Create temporary directory.
- * Pause for SIGUSR1 if option specified.
- * Create a valid file to use in the rename() call.
- *
- * Test:
- * Loop if the proper options are given.
- * 1. "old" is a valid file, newpath points to address
- * outside allocated address space
- * rename the "old" to the "new" file
- * verify rename() failed with error EFAULT
- *
- * 2. "old" points to address outside allocated address space
- * ,"new" is a valid file
- * rename the "old" to the "new"
- * verify rename() failed with error EFAULT
- *
- * 3. oldpath and newpath are all NULL
- * try to rename NULL to NULL
- * verify rename() failed with error EFAULT
- * Cleanup:
- * Print errno log and/or timing stats if options given
- * Delete the temporary directory created.*
- * USAGE
- * rename08 [-c n] [-e] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -e : Turn on errno logging.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS
- * None.
- */
-#include <sys/types.h>
-#include <sys/fcntl.h>
-#include <errno.h>
-
-#include "test.h"
-#include "usctest.h"
-
-void setup();
-void cleanup(void) __attribute__((noreturn));
-extern void do_file_setup(char *);
-
-const char *TCID="rename08"; /* Test program identifier. */
-int TST_TOTAL=3; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={EFAULT, 0}; /* List must end with 0 */
-
-int fd;
-char fname[255];
-
-struct test_case_t {
- char *fd;
- char *fd2;
- int error;
-} TC[] = {
- /* "new" file is invalid - EFAULT */
- {fname, (char *)-1, EFAULT},
-
- /* "old" file is invalid - EFAULT */
- {(char *)-1, fname, EFAULT},
-
- /* both files are NULL - EFAULT */
- {NULL, NULL, EFAULT}
-};
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- int i;
-
- /*
- * parse standard options
- */
- if ((msg=parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL) {
- tst_brkm(TBROK, tst_exit, "OPTION PARSING ERROR - %s", msg);
- }
-
- /*
- * perform global setup for test
- */
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /*
- * check looping state if -i option given
- */
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /* loop through the test cases */
- for (i = 0; i < TST_TOTAL; i++) {
-
- TEST(rename(TC[i].fd, TC[i].fd2));
-
- if (TEST_RETURN != -1) {
- tst_resm(TFAIL, "call succeeded unexpectedly");
- continue;
- }
-
- TEST_ERROR_LOG(TEST_ERRNO);
-
- if (TEST_ERRNO == TC[i].error) {
- tst_resm(TPASS, "expected failure - "
- "errno = %d : %s", TEST_ERRNO,
- strerror(TEST_ERRNO));
- } else {
- tst_resm(TFAIL, "unexpected error - %d : %s - "
- "expected %d", TEST_ERRNO,
- strerror(TEST_ERRNO), TC[i].error);
- }
- }
- } /* End for TEST_LOOPING */
-
- /*
- * cleanup and exit
- */
- cleanup();
- /*NOTREACHED*/
-}
-
-/*
- * setup() - performs all ONE TIME setup for this test.
- */
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- /* Create a temporary directory and make it current. */
- tst_tmpdir();
-
- sprintf(fname,"./tfile_%d",getpid());
-
- do_file_setup(fname);
-}
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /*
- * Remove the temporary directory.
- */
- tst_rmdir();
-
- /*
- * Exit with return code appropriate for results.
- */
- tst_exit();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/rename10.c b/winsup/testsuite/winsup.api/ltp/rename10.c
deleted file mode 100644
index 438ef3725..000000000
--- a/winsup/testsuite/winsup.api/ltp/rename10.c
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * NAME
- * rename10
- *
- * DESCRIPTION
- * This test will verify that rename(2) syscall fails with ENAMETOOLONG
- * and ENOENT
- *
- * ALGORITHM
- * Setup:
- * Setup signal handling.
- * Create temporary directory.
- * Pause for SIGUSR1 if option specified.
- * create the "old" file
- *
- * Test:
- * Loop if the proper options are given.
- * 1. rename the "old" to the "new" file
- * verify rename() failed with error ENAMETOOLONG
- *
- * 2. "new" path contains a directory that does not exist
- * rename the "old" to the "new"
- * verify rename() failed with error ENOENT
- * Cleanup:
- * Print errno log and/or timing stats if options given
- * Delete the temporary directory created.*
- *
- * USAGE
- * rename10 [-c n] [-e] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -e : Turn on errno logging.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS
- * None.
- */
-#include <sys/types.h>
-#include <sys/fcntl.h>
-#include <errno.h>
-
-#include "test.h"
-#include "usctest.h"
-
-void setup();
-void cleanup(void) __attribute__((noreturn));
-extern void do_file_setup(char *);
-
-const char *TCID="rename10"; /* Test program identifier. */
-int TST_TOTAL=2; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-char badmname[] = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstmnopqrstuvwxyzabcdefghijklmnopqrstmnopqrstuvwxyzabcdefghijklmnopqrstmnopqrstuvwxyzabcdefghijklmnopqrstmnopqrstuvwxyzabcdefghijklmnopqrstmnopqrstuvwxyzabcdefghijklmnopqrstmnopqrstuvwxyz";
-
-int exp_enos[]={ENAMETOOLONG, ENOENT, 0}; /* List must end with 0 */
-
-int fd;
-char fname[255], mname[255];
-char mdir[255];
-
-struct test_case_t {
- char *fd1;
- char *fd2;
- int error;
-} TC[] = {
- /* badmname is too long for a file name - ENAMETOOLONG */
- {fname, badmname, ENAMETOOLONG},
-
- /* mname contains a directory component which does not exist - ENOENT */
- {fname, mname, ENOENT}
-};
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- int i;
-
- /*
- * parse standard options
- */
- if ((msg=parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL) {
- tst_brkm(TBROK, tst_exit, "OPTION PARSING ERROR - %s", msg);
- }
-
- /*
- * perform global setup for test
- */
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /*
- * check looping state if -i option given
- */
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /* loop through the test cases */
- for (i=0; i < TST_TOTAL; i++) {
-
- TEST(rename(TC[i].fd1, TC[i].fd2));
-
- if (TEST_RETURN != -1) {
- tst_resm(TFAIL, "call succeeded unexpectedly");
- continue;
- }
-
- TEST_ERROR_LOG(TEST_ERRNO);
-
- if (TEST_ERRNO == TC[i].error) {
- tst_resm(TPASS, "expected failure - "
- "errno = %d : %s", TEST_ERRNO,
- strerror(TEST_ERRNO));
- } else {
- tst_resm(TFAIL, "unexpected error - %d : %s - "
- "expected %d", TEST_ERRNO,
- strerror(TEST_ERRNO), TC[i].error);
- }
- }
- } /* End for TEST_LOOPING */
-
- /*
- * cleanup and exit
- */
- cleanup();
-
- /*NOTREACHED*/
-}
-
-/*
- * setup() - performs all ONE TIME setup for this test.
- */
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- /* Create a temporary directory and make it current. */
- tst_tmpdir();
-
- sprintf(fname,"./tfile_%d",getpid());
- sprintf(mdir,"./rndir_%d",getpid());
- sprintf(mname,"%s/rnfile_%d",mdir,getpid());
-
- do_file_setup(fname);
-}
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /*
- * Remove the temporary directory.
- */
- tst_rmdir();
-
- /*
- * Exit with return code appropriate for results.
- */
- tst_exit();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/rmdir01.c b/winsup/testsuite/winsup.api/ltp/rmdir01.c
deleted file mode 100644
index 1d41f1c13..000000000
--- a/winsup/testsuite/winsup.api/ltp/rmdir01.c
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * NAME
- * rmdir01
- *
- * DESCRIPTION
- * This test will verify that rmdir(2) syscall basic functionality.
- * verify rmdir(2) returns a value of 0 and the directory being
- * removed
- *
- * ALGORITHM
- * Setup:
- * Setup signal handling.
- * Create temporary directory.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * make a directory tstdir
- * call rmdir(tstdir), check the return value
- * verify the directory tstdir does not exists.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- * Delete the temporary directory created.*
- * USAGE
- * rmdir01 [-c n] [-f] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -f : Turn off functionality Testing.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * HISTORY
- * 07/2001 Ported by Wayne Boyer
- *
- * RESTRICTIONS
- * None.
- */
-#include <errno.h>
-#include <string.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <fcntl.h>
-#include "test.h"
-#include "usctest.h"
-
-void setup();
-void cleanup() __attribute__((noreturn));
-
-#define PERMS 0777
-
-const char *TCID="rmdir01"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-char tstdir [100];
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- struct stat buf;
-
- /*
- * parse standard options
- */
- if ((msg=parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL) {
- tst_brkm(TBROK, tst_exit, "OPTION PARSING ERROR - %s", msg);
- }
-
- /*
- * perform global setup for test
- */
- setup();
-
- /*
- * check looping state if -i option given
- */
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * TEST rmdir() base functionality
- */
-
- /* Initialize the test directory name */
-
- /* create a directory */
- if ( mkdir(tstdir, PERMS) == -1 ) {
- tst_brkm(TBROK, cleanup, "mkdir(%s, %#o) Failed",
- tstdir, PERMS);
- /*NOTREACHED*/
- }
- /* call rmdir using TEST macro */
-
- TEST(rmdir(tstdir));
-
- if (TEST_RETURN == -1 ) {
- tst_resm(TFAIL, "rmdir(%s) Failed", tstdir);
- continue;
- }
-
- if (STD_FUNCTIONAL_TEST) {
- /* check whether tstdir been removed */
- if (stat(tstdir, &buf) != -1) {
- tst_resm(TFAIL, "directory %s still exists",
- tstdir);
- continue;
- } else {
- tst_resm(TPASS, "directory has been removed");
- }
- } else {
- tst_resm(TPASS, "call succeeded");
- }
-
- } /* End for TEST_LOOPING */
-
- /*
- * cleanup and exit
- */
- cleanup();
-
- /*NOTREACHED*/
-}
-
-/*
- * setup() - performs all ONE TIME setup for this test.
- */
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- /* Create a temporary directory and make it current. */
- tst_tmpdir();
-
- sprintf(tstdir,"./tstdir_%d",getpid());
-}
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /*
- * Remove the temporary directory.
- */
- tst_rmdir();
-
- /*
- * Exit with return code appropriate for results.
- */
- tst_exit();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/rmdir04.c b/winsup/testsuite/winsup.api/ltp/rmdir04.c
deleted file mode 100644
index ece6a9ff4..000000000
--- a/winsup/testsuite/winsup.api/ltp/rmdir04.c
+++ /dev/null
@@ -1,236 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : rmdir04
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for rmdir(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) rmdir(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the rmdir(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * rmdir(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <fcntl.h>
-
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-
-const char *TCID="rmdir04"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0};
-char *cwd;
-char fname[255];
-
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- if (mkdir(fname, 0777) == -1) {
- tst_brkm(TBROK, cleanup,
- "mkdir(%s) Failure. errno=%d : %s", fname, errno, strerror(errno));
- }
- /*
- * Call rmdir(2)
- */
- TEST(rmdir(fname));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "rmdir(%s) Failed, errno=%d : %s", fname,
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "rmdir(%s) returned %d", fname, TEST_RETURN);
- }
- }
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
-
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- sprintf(fname, "./dir_%d", getpid());
-
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/rmdir05.c b/winsup/testsuite/winsup.api/ltp/rmdir05.c
deleted file mode 100644
index ff19b3a81..000000000
--- a/winsup/testsuite/winsup.api/ltp/rmdir05.c
+++ /dev/null
@@ -1,447 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : rmdir05
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Functionality Tests for rmdir(2)
- *
- * PARENT DOCUMENT : rmstds02
- *
- * TEST CASE TOTAL : 6
- *
- * WALL CLOCK TIME : 2
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : Bill Branum
- *
- * CO-PILOT : Steve Shaw
- *
- * DATE STARTED : 4/23/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- * rmdir(2) test for errno(s) EINVAL, EMLINK, EFAULT
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * DETAILED DESCRIPTION
- * Verify that rmdir(2) returns a value of -1 and sets errno
- * to indicate the error.
- *
- * Setup:
- * Setup signal handling.
- * Create a temporary directory and make it current.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno.
- * If doing functional test
- * check the errno returned and print result message
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given.
- * Remove the temporary directory.
- * Exit.
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <errno.h>
-#include <signal.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <string.h>
-#include "test.h"
-#include "usctest.h"
-
-
-void setup();
-void cleanup(void) __attribute__((noreturn));
-
-
-extern char *get_high_address();
-
-const char *TCID="rmdir05"; /* Test program identifier. */
-int TST_TOTAL=6; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines. */
-struct stat stat_buf; /* Stat buffer used for verification. */
-char dir_name[256]; /* Array to hold directory name. */
-
-
-int
-main(int argc, char **argv)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(argc, argv, (option_t *) NULL, NULL)) != (char *) NULL ) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * TEST CASE: 1
- * path points to the current directory
- */
-
- /* Call rmdir(2) */
- TEST(rmdir("."));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- }
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
-
- if ( TEST_RETURN == -1 ) {
-#if defined(sgi)
- if (TEST_ERRNO == EINVAL) {
-#elif defined(linux) || defined (__CYGWIN__)
- if (TEST_ERRNO & (EBUSY | ENOTEMPTY)) {
-#endif
-
- /* For functionality tests, verify that the
- * directory wasn't removed.
- */
- if (stat(".",&stat_buf) == -1){
- tst_resm(TFAIL,"rmdir(\".\") removed the current working directory when it should have failed.");
- } else {
- tst_resm(TPASS,"rmdir(\".\") failed to remove the current working directory. Returned %d : %s",TEST_ERRNO,strerror(TEST_ERRNO));
- }
- } else {
-#if defined(sgi)
- tst_resm(TFAIL,"rmdir(\".\") failed with errno %d : %s but expected %d (EINVAL)",TEST_ERRNO,strerror(TEST_ERRNO),EINVAL);
-#elif defined(linux) || defined (__CYGWIN__)
- tst_resm(TFAIL,"rmdir(\".\") failed with errno %d : %s but expected %d (EBUSY)",TEST_ERRNO,strerror(TEST_ERRNO),EBUSY);
-#endif
- }
- } else {
- tst_resm(TFAIL,"rmdir(\".\") succeeded unexpectedly.");
- }
- }
-
-
- /*
- * TEST CASE: 2
- * path points to the "." (dot) entry of a directory
- */
-#if defined(linux) || defined (__CYGWIN__)
- tst_resm(TCONF, "rmdir on \"dir/.\" supported on Linux");
-#elif defined(sgi)
- /* Call rmdir(2) */
- TEST(rmdir("dir1/."));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- }
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
-
- if ( TEST_RETURN == -1 ) {
- if (TEST_ERRNO == EINVAL) {
-
- /* For functionality tests, verify that the
- * directory wasn't removed.
- */
- if (stat("dir1/.",&stat_buf) == -1){
- tst_resm(TFAIL,"rmdir(\"dir1/.\") removed the \".\" entry of a directory when it should have failed.");
- } else {
- tst_resm(TPASS,"rmdir(\"dir1/.\") failed to remove the \".\" entry of a directory. Returned %d : %s",TEST_ERRNO,strerror(TEST_ERRNO));
- }
- } else {
- tst_resm(TFAIL,"rmdir(\"dir1/.\") failed with errno %d : %s but expected %d (EINVAL)",TEST_ERRNO,strerror(TEST_ERRNO),EINVAL);
- }
- } else {
- tst_resm(TFAIL,"rmdir(\"dir1/.\") - path points to the \".\" entry of a directory succeeded unexpectedly.");
- }
- }
-#endif
-
-#if defined(sgi)
- /*
- * TEST CASE: 3
- * the directory has been linked
- */
- tst_resm(TCONF, "linked directories not valid on IRIX");
-#elif defined(linux)
- tst_resm(TCONF, "linked directories test not implemented on Linux");
-#elif defined(CRAY)
-
-
- /* Call rmdir(2) */
- TEST(rmdir("dir2"));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- }
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
-
- if ( TEST_RETURN == -1 ) {
- if (TEST_ERRNO == EMLINK) {
- /* For functionality tests, verify that the directory wasn't
- * removed.
- */
- if (stat("dir2",&stat_buf) == -1){
- tst_resm(TFAIL,"rmdir(\"dir2\") removed a directory with multiple links when it should have failed.");
- } else {
- tst_resm(TPASS,"rmdir(\"dir2\") failed to remove a directory with multiple links. Returned %d : %s",TEST_ERRNO,strerror(TEST_ERRNO));
- }
- } else {
- tst_resm(TFAIL,"rmdir(\"dir2\") failed with errno %d : %s but expected %d (EMLINK)",TEST_ERRNO,strerror(TEST_ERRNO),EMLINK);
- }
- } else {
- tst_resm(TFAIL,"rmdir(\"dir2\") - the directory has been linked succeeded unexpectedly.");
- }
- }
-#endif /* linux */
-
-
- /*
- * TEST CASE: 4
- * path argument points below the minimum allocated address space
- */
-
-
- /* Call rmdir(2) */
- TEST(rmdir((char *)-1));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- }
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
-
- if ( TEST_RETURN == -1 ) {
- if (TEST_ERRNO == EFAULT) {
- tst_resm(TPASS,"rmdir() - path argument points below the minimum allocated address space failed as expected with errno %d : %s",TEST_ERRNO,strerror(TEST_ERRNO));
- } else {
- tst_resm(TFAIL,"rmdir() - path argument points below the minimum allocated address space failed with errno %d : %s but expected %d (EFAULT)",TEST_ERRNO,strerror(TEST_ERRNO),EFAULT);
- }
- } else {
- tst_resm(TFAIL,"rmdir() - path argument points below the minimum allocated address space succeeded unexpectedly.");
- }
- }
-
- /*
- * TEST CASE: 5
- * path argument points above the maximum allocated address space
- */
-
-
- /* Call rmdir(2) */
- TEST(rmdir( get_high_address()));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- }
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
-
- if ( TEST_RETURN == -1 ) {
- if (TEST_ERRNO == EFAULT) {
- tst_resm(TPASS,"rmdir() - path argument points above the maximum allocated address space failed as expected with errno %d : %s",TEST_ERRNO,strerror(TEST_ERRNO));
- } else {
- tst_resm(TFAIL,"rmdir() - path argument points above the maximum allocated address space failed with errno %d : %s but expected %d (EFAULT)",TEST_ERRNO,strerror(TEST_ERRNO),EFAULT);
- }
- } else {
- tst_resm(TFAIL,"rmdir() - path argument points above the maximum allocated address space succeeded unexpectedly.");
- }
- }
-
- /*
- * TEST CASE: 6
- * able to remove a directory
- */
-
- /* Create a directory. */
- if (mkdir(dir_name,0777) != 0){
- tst_brkm(TBROK,cleanup,"mkdir(\"%s\") failed with errno %d : %s",dir_name,errno,strerror(errno));
- }
-
- /* Call rmdir(2) */
- TEST(rmdir(dir_name));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL,"rmdir(\"%s\") failed when it should have passed. Returned %d : %s",dir_name,TEST_ERRNO,strerror(TEST_ERRNO));
- } else {
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
-
- /* Verify the directory was removed. */
- if (stat(dir_name,&stat_buf) != 0){
- tst_resm(TPASS,"rmdir(\"%s\") removed the directory as expected.",dir_name);
- } else {
- tst_resm(TFAIL,"rmdir(\"%s\") returned a zero exit status but failed to remove the directory.",dir_name);
- }
- }
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void setup()
-{
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- /* Create a temporary directory and make it current. */
- tst_tmpdir();
-
- /* Create a directory. */
- if (mkdir("dir1",0777) == -1){
- tst_brkm(TBROK,cleanup,"mkdir() failed to create dir1.");
- }
-
-#if defined(CRAY)
- /* NOTE: linking directories is NOT valid on IRIX */
-
- /* Create a directory that has multiple links to it. */
- if (mkdir("dir2",0777) == -1){
- tst_brkm(TBROK,cleanup,"mkdir() failed to create dir2.");
- } else {
- if (system("runcmd `get_attrib -A link` dir2 mlink_dir > link.out 2>&1") != 0){
- tst_brk(TBROK,"link.out",cleanup,"link failed to link dir2 and mlink_dir.");
- }
- }
-
-#endif
-
- /* Create a unique directory name. */
- sprintf(dir_name,"./dir_%d",getpid());
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
-#if defined(CRAY)
- /* NOTE: setup was not done on IRIX */
- /* Unlink the directory. */
- if (system("runcmd `get_attrib -A unlink` dir2 > unlink.out 2>&1") != 0){
- tst_res(TWARN,"unlink.out","unlink failed to unlink dir2.");
- }
-#endif
-
- /*
- * Remove the temporary directory.
- */
- tst_rmdir();
-
- /*
- * Exit with a return value appropriate for the results.
- */
- tst_exit();
-
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/sbrk01.c b/winsup/testsuite/winsup.api/ltp/sbrk01.c
deleted file mode 100644
index 700fb6b17..000000000
--- a/winsup/testsuite/winsup.api/ltp/sbrk01.c
+++ /dev/null
@@ -1,279 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : sbrk01
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for sbrk(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 2
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 06/05/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) sbrk(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the sbrk(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * sbrk(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include <sys/types.h>
-
-#include "test.h"
-#include "usctest.h"
-
-void setup();
-void cleanup(void) __attribute__((noreturn));
-
-
-
-const char *TCID="sbrk01"; /* Test program identifier. */
-int TST_TOTAL=2; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int Increment; /* Amount to make change size by */
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- long tret;
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL ) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit(0);
- }
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
-#ifdef __CYGWIN__
- /* we need to initialize output buffer before first sbrk.
- otherwise, when memory is freed bu second sbrk, fwrite will
- fail */
- tst_resm(TINFO, "Entering test");
-#endif
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
-
- /*
- * TEST CASE:
- * Increase by 8192 bytes
- */
- Increment = 8192;
-
- /* Call sbrk(2) */
-#if defined(sgi)
- tret=(long)sbrk(Increment); /* Remove -64 IRIX compiler warning */
- TEST_ERRNO=errno;
-#else
- TEST(sbrk(Increment));
- tret=TEST_RETURN;
-#endif
-
- /* check return code */
- if ( tret == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "sbrk - Increase by 8192 bytes failed, errno=%d : %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "sbrk - Increase by 8192 bytes returned %d",
- tret);
- }
- }
-
-
- /*
- * TEST CASE:
- * Decrease to original size
- */
- Increment=(Increment * -1);
-
- /* Call sbrk(2) */
-#ifdef CRAY
- TEST(sbrk(Increment));
- tret=TEST_RETURN;
-#else
- tret=(long)sbrk(Increment);
- TEST_ERRNO=errno;
-#endif
-
- /* check return code */
- if ( tret == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "sbrk - Decrease to original size failed, errno=%d : %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "sbrk - Decrease to original size returned %d", tret);
- }
- }
-
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* make a temp dir and cd to it */
- tst_tmpdir();
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
-
-
- /* remove files and temp dir */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
-
-
diff --git a/winsup/testsuite/winsup.api/ltp/select01.c b/winsup/testsuite/winsup.api/ltp/select01.c
deleted file mode 100644
index 3b81f93db..000000000
--- a/winsup/testsuite/winsup.api/ltp/select01.c
+++ /dev/null
@@ -1,276 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : select01
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : select to a file
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 3
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : Richard Logan
- *
- * CO-PILOT : William Roske
- *
- * DATE STARTED : 02/24/93
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) select(2) to a fd of regular file with no I/O and small timeout
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the select(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * join(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <errno.h>
-#include <signal.h>
-#include <fcntl.h> /* For open system call parameters. */
-#include <signal.h>
-#include <sys/param.h>
-#include <sys/types.h>
-#include <sys/time.h>
-
-#ifdef __CYGWIN__
-/*
- FIXME: workaround for bug in newlib -- FD_ZERO is defined via bzero and
- if we don't include strings.h compiler warns about implicit declaration
-*/
-#include <strings.h>
-#endif
-
-#include "test.h"
-#include "usctest.h"
-
-#define FILENAME "select01"
-
-void setup();
-void cleanup(void) __attribute__((noreturn));
-
-const char *TCID="select01"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int Fd;
-fd_set Readfds;
-
-/***********************************************************************
- * MAIN
- ***********************************************************************/
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- struct timeval timeout;
- long test_time = 0; /* in usecs */
-
-
- /***************************************************************
- * parse standard options, and exit if there is an error
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL ) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Assigning the specified seconds within the timeval structure.
- */
- test_time = ((lc%2000)*100000); /* 100 milli-seconds */
-
- /*
- * Bound the time to a value less than 60 seconds
- */
-
- if ( test_time > 1000000 * 60 )
- test_time = test_time % (1000000 * 60);
-
- timeout.tv_sec = test_time / 1000000;
- timeout.tv_usec = test_time - (timeout.tv_sec * 1000000);
-
-
- /* Call the system call being tested. */
- TEST(select(4, &Readfds, 0, 0, &timeout));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL,
- "%d select(4, &Readfds, 0, 0, &timeout), timeout = %ld usecs, errno=%d",
- lc, test_time, errno);
- }
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* Perform functional verification here */
- tst_resm(TPASS,
- "select(4, &Readfds, 0, 0, &timeout) timeout = %ld usecs",
- test_time);
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- /* create a temporary directory and go to it */
- tst_tmpdir();
-
- if ((Fd=open(FILENAME, O_CREAT | O_RDWR)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_CREAT | O_RDWR) failed: errno:%d\n",
- errno);
- }
-
- /*
- * Initializing and assigning the standard output file descriptor to
- * fd_set for select.
- */
-
- FD_ZERO(&Readfds);
- FD_SET(Fd, &Readfds);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- close(Fd);
-
- /* remove temporary directory and all files in it. */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
-
-
diff --git a/winsup/testsuite/winsup.api/ltp/select02.c b/winsup/testsuite/winsup.api/ltp/select02.c
deleted file mode 100644
index 935f4b273..000000000
--- a/winsup/testsuite/winsup.api/ltp/select02.c
+++ /dev/null
@@ -1,268 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : select02
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : select of system pipe fds
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : Richard Logan
- *
- * CO-PILOT : Glen Overby
- *
- * DATE STARTED : 02/24/93
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) select(2) to fd of system pipe with no I/O and small timeout
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the select(2) system call. It is intended
- * to provide a limited exposure of the system call, for now.
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <errno.h>
-#include <signal.h>
-#include <fcntl.h> /* For open system call parameters. */
-#include <signal.h>
-#include <sys/param.h>
-#include <sys/types.h>
-#include <sys/time.h>
-
-#include "test.h"
-#include "usctest.h"
-
-void setup();
-void cleanup(void) __attribute__((noreturn));
-
-const char *TCID="select02"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int Fd[2];
-fd_set saved_Readfds, saved_Writefds;
-fd_set Readfds, Writefds;
-
-/***********************************************************************
- * MAIN
- ***********************************************************************/
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- struct timeval timeout;
- long test_time = 0; /* in usecs */
-
-
- /***************************************************************
- * parse standard options, and exit if there is an error
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL ) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Assigning the specified seconds within the timeval structure.
- */
-
- test_time = ((lc%2000)*100000); /* 100 milli-seconds */
-
- /*
- * Bound the time to a value less than 60 seconds
- */
-
- if ( test_time > 1000000 * 60 )
- test_time = test_time % (1000000 * 60);
-
- timeout.tv_sec = test_time / 1000000;
- timeout.tv_usec = test_time - (timeout.tv_sec * 1000000);
-
- Readfds = saved_Readfds;
- Writefds = saved_Writefds;
-
- /* Call the system call being tested. */
-
- TEST(select(5, &Readfds, &Writefds, 0, &timeout));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL,
- "%d select(5, &Readfds, &Writefds, 0, &timeout) failed, errno=%d\n",
- lc, errno);
- } else {
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* Perform functional verification here */
- tst_resm(TPASS,
- "select(5, &Readfds, &Writefds, 0, &timeout) timeout = %ld usecs",
- test_time);
- }
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- /* create a temporary directory and go to it */
- tst_tmpdir();
-
- if (pipe(Fd) == -1 ) {
- tst_brkm(TBROK, cleanup, "pipe(&Fd) failed, errno=%d", errno);
- }
-
- /*
- * Initializing and assigning the standard output file descriptor to
- * fd_set for select.
- */
-
- FD_ZERO(&saved_Readfds);
- FD_ZERO(&saved_Writefds);
- FD_SET(Fd[0], &saved_Readfds);
- FD_SET(Fd[1], &saved_Writefds);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* remove temporary directory and all files in it. */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
-
-
diff --git a/winsup/testsuite/winsup.api/ltp/select03.c b/winsup/testsuite/winsup.api/ltp/select03.c
deleted file mode 100644
index 225ef19a7..000000000
--- a/winsup/testsuite/winsup.api/ltp/select03.c
+++ /dev/null
@@ -1,282 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : select03
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : select of fd of a named-pipe (FIFO)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : Richard Logan
- *
- * CO-PILOT : Glen Overby
- *
- * DATE STARTED : 02/24/93
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) select(2) of fd of a named-pipe (FIFO) with no I/O and small timeout value
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the select(2) system call. It is intended
- * to provide a limited exposure of the system call, for now.
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <errno.h>
-#include <signal.h>
-#include <fcntl.h> /* For open system call parameters. */
-#include <signal.h>
-#include <sys/param.h>
-#include <sys/types.h>
-#include <sys/time.h>
-#include <sys/stat.h>
-
-
-#include "test.h"
-#include "usctest.h"
-
-#define FILENAME "select03"
-
-extern void setup();
-extern void cleanup();
-
-const char *TCID="select03"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int Fd;
-fd_set saved_Readfds, saved_Writefds;
-fd_set Readfds, Writefds;
-
-
-/***********************************************************************
- * MAIN
- ***********************************************************************/
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- struct timeval timeout;
- long test_time = 0; /* in usecs */
-
-
- /***************************************************************
- * parse standard options, and exit if there is an error
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL ) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Assigning the specified seconds within the timeval structure.
- */
-
- test_time = ((lc%2000)*100000); /* 100 milli-seconds */
-
- /*
- * Bound the time to a value less than 60 seconds
- */
-
- if ( test_time > 1000000 * 60 )
- test_time = test_time % (1000000 * 60);
-
- timeout.tv_sec = test_time / 1000000;
- timeout.tv_usec = test_time - (timeout.tv_sec * 1000000);
-
- Readfds = saved_Readfds;
- Writefds = saved_Writefds;
-
- /* Call the system call being tested. */
-
- TEST(select(5, &Readfds, &Writefds, 0, &timeout));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL,
- "%d select(5, &Readfds, &Writefds, 0, &timeout) failed errno=%d\n",
- lc, errno);
- } else {
-
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* Perform functional verification here */
- tst_resm(TPASS,
- "select(5, &Readfds, &Writefds, 0, &timeout) timeout = %ld usecs",
- test_time);
- }
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- /* create a temporary directory and go to it */
- tst_tmpdir();
-
-
- /* make and open FIFO */
- if ( mkfifo(FILENAME, 0777) == -1 ) {
- tst_brkm(TBROK, cleanup, "mkfifo(%s, 0777) failed, errno=%d",
- FILENAME, errno);
- }
-
- if ((Fd=open(FILENAME, O_RDWR)) == -1 ) {
- tst_brkm(TBROK, cleanup, "open(%s, O_RDWR) failed, errno=%d",
- FILENAME, errno);
- }
-
- /*
- * Initializing and assigning the standard output file descriptor to
- * fd_set for select.
- */
-
- FD_ZERO(&saved_Readfds);
- FD_ZERO(&saved_Writefds);
- FD_SET(Fd, &saved_Readfds);
- FD_SET(Fd, &saved_Writefds);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* remove temporary directory and all files in it. */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
-
-
diff --git a/winsup/testsuite/winsup.api/ltp/setgid01.c b/winsup/testsuite/winsup.api/ltp/setgid01.c
deleted file mode 100644
index a75e88a1d..000000000
--- a/winsup/testsuite/winsup.api/ltp/setgid01.c
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : setgid01
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for setgid(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) setgid(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the setgid(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * setgid(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-
-const char *TCID="setgid01"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0};
-int gid;
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call setgid(2)
- */
- TEST(setgid(gid));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "setgid(%d) Failed, errno=%d : %s", gid,
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "setgid(%d) returned %d", gid, TEST_RETURN);
- }
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- gid = getgid();
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/setgroups01.c b/winsup/testsuite/winsup.api/ltp/setgroups01.c
deleted file mode 100644
index ee1c54b63..000000000
--- a/winsup/testsuite/winsup.api/ltp/setgroups01.c
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : setgroups01
- *
- * EXECUTED BY : root
- *
- * TEST TITLE : Basic test for setgroups(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) setgroups(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the setgroups(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * setgroups(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include <sys/param.h>
-#include <grp.h>
-
-#include "test.h"
-#include "usctest.h"
-
-void setup();
-void cleanup(void) __attribute__((noreturn));
-
-
-
-const char *TCID="setgroups01"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int len = NGROUPS;
-gid_t list[NGROUPS];
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL ) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call setgroups(2)
- */
- TEST(setgroups(len, list));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "setgroups(%d, list) Failed, errno=%d : %s", len,
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "setgroups(%d, list) returned %d", len, TEST_RETURN);
- }
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- if ( geteuid() != 0 )
- tst_brkm(TBROK, cleanup, "Must be ROOT to run this test.");
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- if (getgroups(len, list) == -1) {
- tst_brkm(TBROK, cleanup,
- "getgroups(%d, list) Failure. errno=%d : %s",
- len, errno, strerror(errno));
- }
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/setpgid01.c b/winsup/testsuite/winsup.api/ltp/setpgid01.c
deleted file mode 100644
index 0835c66a3..000000000
--- a/winsup/testsuite/winsup.api/ltp/setpgid01.c
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : setpgid01
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for setpgid(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) setpgid(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the setpgid(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * setpgid(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include <sys/wait.h>
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup() __attribute__ ((noreturn));
-
-const char *TCID="setpgid01"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0};
-int pgid, pid;
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call setpgid(2)
- */
- TEST(setpgid(pid, pgid));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "setpgid(%d, %d) Failed, errno=%d : %s", pid, pgid,
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "setpgid(%d, %d) returned %d", pid, pgid, TEST_RETURN);
- }
- }
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- int status;
-
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- /*
- * Make sure current process is NOT a session or pgrp leader
- */
-
- pgid=getpgrp();
- pid=getpid();
-
- if (pgid == pid) {
- if ((pid = fork()) == -1) {
- tst_brkm(TBROK, cleanup, "fork() in setup() failed - errno %d",
- errno);
- }
-
- if (pid != 0) { /* parent - sits and waits */
- wait(&status);
- exit(WEXITSTATUS(status));
- } else { /* child - continues with test */
- pid = getpid();
- }
- }
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/setregid01.c b/winsup/testsuite/winsup.api/ltp/setregid01.c
deleted file mode 100644
index e4251f04e..000000000
--- a/winsup/testsuite/winsup.api/ltp/setregid01.c
+++ /dev/null
@@ -1,338 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : setregid01
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for setregid(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 5
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 05/13/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) setregid(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the setregid(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * setregid(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-
-#include <sys/types.h>
-
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-
-const char *TCID="setregid01"; /* Test program identifier. */
-int TST_TOTAL=5; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0}; /* Zero terminated list of expected errnos */
-
-int gid, egid; /* current real and effective group id */
-
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
-
- /*
- * TEST CASE:
- * Dont change either real or effective gid
- */
- gid=getgid();
- egid=getegid();
-
-
- /* Call setregid(2) */
- TEST(setregid(-1, -1));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "setregid - Dont change either real or effective gid failed, errno=%d : %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "setregid - Dont change either real or effective gid returned %d", TEST_RETURN);
- }
- }
-
-
- /*
- * TEST CASE:
- * change effective to effective gid
- */
-
-
- /* Call setregid(2) */
- TEST(setregid(-1, egid));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "setregid - change effective to effective gid failed, errno=%d : %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "setregid - change effective to effective gid returned %d", TEST_RETURN);
- }
- }
-
-
- /*
- * TEST CASE:
- * change real to real gid
- */
-
-
- /* Call setregid(2) */
- TEST(setregid(gid, -1));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "setregid - change real to real gid failed, errno=%d : %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "setregid - change real to real gid returned %d", TEST_RETURN);
- }
- }
-
-
- /*
- * TEST CASE:
- * change effective to real gid
- */
-
-
- /* Call setregid(2) */
- TEST(setregid(-1, gid));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "setregid - change effective to real gid failed, errno=%d : %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "setregid - change effective to real gid returned %d", TEST_RETURN);
- }
- }
-
-
- /*
- * TEST CASE:
- * try to change real to current real
- */
-
-
- /* Call setregid(2) */
- TEST(setregid(gid, gid));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "setregid - try to change real to current real failed, errno=%d : %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "setregid - try to change real to current real returned %d", TEST_RETURN);
- }
- }
-
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* make a temp dir and cd to it */
- tst_tmpdir();
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* remove files and temp dir */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
-
-
diff --git a/winsup/testsuite/winsup.api/ltp/setreuid01.c b/winsup/testsuite/winsup.api/ltp/setreuid01.c
deleted file mode 100644
index 05467c80f..000000000
--- a/winsup/testsuite/winsup.api/ltp/setreuid01.c
+++ /dev/null
@@ -1,338 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : setreuid01
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for setreuid(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 5
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 05/14/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) setreuid(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the setreuid(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * setreuid(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-
-#include <sys/types.h>
-
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-
-const char *TCID="setreuid01"; /* Test program identifier. */
-int TST_TOTAL=5; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0}; /* Zero terminated list of expected errnos */
-
-int ruid, euid; /* real and effective user ids */
-
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
-
- /*
- * TEST CASE:
- * Don't change either real or effective uid
- */
- ruid=getuid(); /* get real uid */
- euid=geteuid(); /* get effective uid */
-
-
- /* Call setreuid(2) */
- TEST(setreuid(-1, -1));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "setreuid - Don't change either real or effective uid failed, errno=%d : %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "setreuid - Don't change either real or effective uid returned %d", TEST_RETURN);
- }
- }
-
-
- /*
- * TEST CASE:
- * change effective to effective uid
- */
-
-
- /* Call setreuid(2) */
- TEST(setreuid(-1, euid));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "setreuid - change effective to effective uid failed, errno=%d : %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "setreuid - change effective to effective uid returned %d", TEST_RETURN);
- }
- }
-
-
- /*
- * TEST CASE:
- * change real to real uid
- */
-
-
- /* Call setreuid(2) */
- TEST(setreuid(ruid, -1));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "setreuid - change real to real uid failed, errno=%d : %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "setreuid - change real to real uid returned %d", TEST_RETURN);
- }
- }
-
-
- /*
- * TEST CASE:
- * change effective to real uid
- */
-
-
- /* Call setreuid(2) */
- TEST(setreuid(-1, ruid));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "setreuid - change effective to real uid failed, errno=%d : %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "setreuid - change effective to real uid returned %d", TEST_RETURN);
- }
- }
-
-
- /*
- * TEST CASE:
- * try to change real to current real
- */
-
-
- /* Call setreuid(2) */
- TEST(setreuid(ruid, ruid));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "setreuid - try to change real to current real failed, errno=%d : %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "setreuid - try to change real to current real returned %d", TEST_RETURN);
- }
- }
-
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* make a temp dir and cd to it */
- tst_tmpdir();
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* remove files and temp dir */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
-
-
diff --git a/winsup/testsuite/winsup.api/ltp/setuid01.c b/winsup/testsuite/winsup.api/ltp/setuid01.c
deleted file mode 100644
index 37e18fd51..000000000
--- a/winsup/testsuite/winsup.api/ltp/setuid01.c
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : setuid01
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for setuid(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 05/14/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) setuid(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * The libcuts.a and libsys.a libraries must be included in
- * the compilation of this test.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the setuid(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * setuid(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-
-#include <sys/types.h>
-
-#include "test.h"
-#include "usctest.h"
-
-void setup();
-void cleanup(void) __attribute__((noreturn));
-
-
-
-const char *TCID="setuid01"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int uid; /* current user id */
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *) NULL ) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * TEST CASE:
- * Set the effective user ID to the current real uid
- */
- uid=getuid();
-
- /* Call setuid(2) */
- TEST(setuid(uid));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "setuid - Set the effective user ID to the current real uid failed, errno=%d : %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "setuid - Set the effective user ID to the current real uid returned %d", TEST_RETURN);
- }
- }
-
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
-
-
diff --git a/winsup/testsuite/winsup.api/ltp/setuid02.c b/winsup/testsuite/winsup.api/ltp/setuid02.c
deleted file mode 100644
index ee55ae19b..000000000
--- a/winsup/testsuite/winsup.api/ltp/setuid02.c
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : setuid02
- *
- * EXECUTED BY : root
- *
- * TEST TITLE : Basic test for setuid(2) as root
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 05/14/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) setuid(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the setuid(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * setuid(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-
-#include <sys/types.h>
-
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-
-const char *TCID="setuid02"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0}; /* Zero terminated list of expected errnos */
-
-int uid; /* current user id */
-
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- uid=getuid();
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
-
- /*
- * TEST CASE:
- * Set the effective user ID to the current real uid
- */
-
- /* Call setuid(2) */
- TEST(setuid(uid));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "setuid - Set the effective user ID to the current real uid failed, errno=%d : %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "setuid - Set the effective user ID to the current real uid returned %d", TEST_RETURN);
- }
- }
-
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* make a temp dir and cd to it */
- tst_tmpdir();
-
- /* must be root */
- if ( geteuid() != 0 )
- tst_brkm(TBROK, cleanup, "Must be root for this test!");
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* remove files and temp dir */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
-
-
diff --git a/winsup/testsuite/winsup.api/ltp/signal03.c b/winsup/testsuite/winsup.api/ltp/signal03.c
deleted file mode 100644
index 2a0923ca2..000000000
--- a/winsup/testsuite/winsup.api/ltp/signal03.c
+++ /dev/null
@@ -1,663 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/***********************************************************************************
- *
- * OS Test - Silicon Graphics, Inc. Eagan, Minnesota
- *
- * TEST IDENTIFIER : signal03 Boundary value and other invalid value checking
- * of signal setup and signal sending.
- *
- * PARENT DOCUMENT : sgntds01 Signal System Call
- *
- * AUTHOR : Dave Baumgartner
- * : Rewrote 12/92 by Richard Logan
- *
- * CO-PILOT : Barrie Kletscher
- *
- * DATE STARTED : 10/17/85
- *
- * TEST ITEMS
- *
- * 1. SIGKILL can not be set to be caught, errno:EINVAL (POSIX).
- * 2. SIGKILL can not be caught.
- * 3. SIGKILL can not be set to be ignored, errno:EINVAL (POSIX).
- * 4. SIGKILL can not be ignored.
- * 5. SIGKILL can not be reset to default, errno:EINVAL (POSIX.
- *
- * ENVIRONMENTAL NEEDS
- *
- * NONE
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- *
- * None
- *
- * INTERCASE DEPENDENCIES
- *
- * 2 depends on 1 and 4 on 3.
- *
- * DETAILED DESCRIPTION
- *
- * main()
- * Call catch_test to test setup and catching of SIGKILL.
- *
- *
- * Call ignore_test to test setup and ignoring of SIGKILL.
- *
- *
- * Call sigdfl_test to test setting SIGKILL to default.
- *
- * * END OF MAIN *
- *
- *
- * catch_test()
- *
- * fork a child
- * if this is the parent
- * sleep to let child start.
- * send sig to child.
- * wait for the child to terminate.
- *
- * if the termination status of the child equals the signal sent to it
- * Test item 1 PASSED the child was killed.
- * else if status equals the exit value of SIG_CAUGHT
- * Test item 2 FAILED sig was caught.
- * else
- * Test item 2 FAILED because the child was not killed
- * but sig was not caught either.
- *
- * else this the child
- * set exit_val to SIG_NOT_CAUGHT.
- * set to catch sig, where the interrupt routine just sets
- * exit_val to SIG_CAUGHT.
- *
- * If the return value and errno, after trying to set to catch sig,
- * do not indicate that an error has occurred.
- * Test item 1 FAILED bad return, return value:X, errno:X.
- * else
- * Test item 1 PASSED sig was not set to be caught.
- *
- * pause until the parent sends a signal.
- * The child should be killed by the signal but if not exit
- * with exit_val.
- *
- * * End of catch_test. *
- *
- *
- * ignore_test()
- *
- * fork a child
- * if this is the parent
- * sleep to let child start.
- * send SIGKILL to child.
- * wait for the child to terminate.
- *
- * if the termination status of the child equals SIGKILL
- * Test item 4 PASSED the child was killed.
- * else if the status equals the exit value of SIG_IGNORED
- * Test item 4 FAILED SIGKILL was ignored.
- *
- * else this the child
- *
- * If the return value and errno, after trying to set to ignore SIGKILL,
- * do not indicate that an error has occurred.
- * Test item 3 FAILED bad return, return value:X, errno:X.
- * else
- * Test item 3 PASSED SIGKILL was not set to be ignored.
- *
- * pause until the parent sends SIGKILL.
- * The child should be killed by the signal but if not exit
- * with SIG_IGNORED.
- *
- * * End of ignore_test. *
- *
- *
- * sigdfl_test()
- *
- * If the return value and errno, after trying to set to SIGKILL to default,
- * do not indicate that an error has occurred.
- * Test item 5 FAILED bad return, return value:X, errno:X.
- * else
- * Test item 5 PASSED SIGKILL was not set to default.
- *
- * * End of sigdfl_test. *
- *
- * BUGS/NOTES
- * Since the system call under test is executed in the child, no
- * timings on this system call will be reported.
- *
-***********************************************************************************/
-
-#include <signal.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <string.h>
-#include <sys/wait.h>
-
-#include "test.h"
-#include "usctest.h"
-
-void setup();
-void cleanup(void) __attribute__((noreturn));
-void do_test();
-void sigdfl_test();
-void update_timings();
-
-#if defined(linux)
-# define SIG_PF sig_t /* This might need to be sighandler_t on some systems */
-#elif defined(__CYGWIN__)
-typedef void (*sighandler_t) (int);
-#define SIG_PF sighandler_t
-#endif
-
-#define SIG_CAUGHT 1
-#define SIG_NOT_CAUGHT 0
-#define SIG_IGNORED 5
-#define TIMED_OUT 99
-
-#define TIMEOUT 20
-
-#define GO_FLAG 1
-#define ERROR_FLAG 2
-#define PASS_FLAG 3
-#define FAIL_FLAG 4
-
-#define IGNORE_TEST 1
-#define CATCH_TEST 2
-
-#define MAXMESG 150 /* The Maximum message that can be created. */
-
-int exit_val; /* Global variable, used to tell whether the */
- /* child exited instead of being killed. */
-extern int errno; /* errno holds the error value returned by */
- /* a system call. */
-char mesg[MAXMESG]; /* Holds messages to pass to tst_res. */
-
-struct ipc_t {
- int status;
- char mesg[MAXMESG];
- struct tblock timings;
-} Ipc_info;
-
-const char *TCID = "signal03";
-int TST_TOTAL = 5;
-extern int Tst_count; /* count of test items completed */
-
-int Pid; /* Return value from fork. */
-
-long Tret;
-
-/***********************************************************************
- * M A I N
- ***********************************************************************/
-int
-main(argc, argv)
-int argc;
-char **argv;
-{
- int lc;
- const char *msg;
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(argc, argv, (option_t *) NULL, NULL)) != (char *) NULL ) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- errno=-4;
-
- /*
- * Call catch_test to test setup and catching of SIGKILL.
- */
- (void) do_test(CATCH_TEST, Tst_count);
-
- /*
- * Call ignore_test to test setup and ignoring of SIGKILL.
- */
- (void) do_test(IGNORE_TEST, Tst_count);
-
- /*
- * Call sigdfl_test to test setting SIGKILL to default.
- */
- (void) sigdfl_test();
-
- }
-
- cleanup();
-
- return 0;
-} /*End of main*/
-
-/***********************************************************************
- *
- ***********************************************************************/
-void
-do_test(test_case, tst_count)
-int test_case;
-int tst_count;
-{
- int term_stat; /* Termination status of the child returned to */
- /* the parent. */
- char string[30];
- int fd1[2]; /* ipc */
- int rd_sz; /* size of read */
- void p_timeout_handler();
- void c_timeout_handler();
- void catchsig();
-
- Tst_count = tst_count;
-
- /*
- * Create a pipe of ipc
- */
- if ( pipe(fd1) == -1 ) {
- sprintf(mesg,
- "pipe system call failed, Errno: %d, Error message: %s",
- errno,strerror(errno));
- tst_resm(TBROK,mesg);
- tst_resm(TBROK,mesg);
- return;
- }
-
- /*
- * Cause the read to return 0 once EOF is encountered and the
- * read to return -1 if pipe is empty.
- */
-
- if ( fcntl(fd1[0], F_SETFL, O_NONBLOCK) == -1 ) {
- sprintf(mesg, "fcntl(fd1[0], F_SETFL, O_NONBLOCK) failed: errno=%d",
- errno);
- tst_resm(TBROK,mesg);
- tst_resm(TBROK,mesg);
- close(fd1[0]);
- close(fd1[1]);
- return;
- }
-
- if ((Pid = fork()) > 0) { /* parent */
-
- signal(SIGALRM, p_timeout_handler);
-
- alarm(TIMEOUT);
-
- close(fd1[1]); /* close write side */
-
- /*
- * Deal with child's messages.
- * Only the GO_FLAG status will allow parent to
- * go on. All pipe io will be in the ipc_t structure sizes
- * to avoid reading part of next message.
- */
- while ( 1 ) {
-
- while ( (rd_sz=read(fd1[0], (char *)&Ipc_info, sizeof(Ipc_info))) != 0 ) {
- if ( rd_sz > 0 )
- break; /* read something */
- }
-
- if ( rd_sz == 0 ) { /* if EOF encountered */
- sprintf(mesg, "child's pipe is closed before 'go' message received");
- tst_resm(TBROK, Ipc_info.mesg);
- tst_resm(TBROK, Ipc_info.mesg);
- close(fd1[0]);
- return;
- }
-
- else if ( Ipc_info.status == GO_FLAG ) {
- break; /* go on */
- }
- else if ( Ipc_info.status == ERROR_FLAG ) {
- tst_resm(TBROK, "From child: %s", Ipc_info.mesg);
- tst_resm(TBROK, "From child: %s", Ipc_info.mesg);
- close(fd1[0]);
- return;
- }
- else if ( Ipc_info.status == PASS_FLAG ) {
-
- if ( STD_FUNCTIONAL_TEST )
- tst_resm(TPASS, "From child: %s", Ipc_info.mesg);
- else
- Tst_count++;
- update_timings(Ipc_info.timings);
- }
- else if ( Ipc_info.status == FAIL_FLAG ) {
- tst_resm(TFAIL, "From child: %s", Ipc_info.mesg);
- update_timings(Ipc_info.timings);
- }
- else {
- tst_resm(TINFO, "Unknown message from child: %s", mesg);
- }
- }
-
- /*
- * Send the signal SIGKILL to the child.
- */
- if (kill(Pid,SIGKILL) == -1)
- {
- /*
- * The kill system call failed.
- */
- sprintf(mesg,
- "kill(Pid,SIGKILL) failed, Errno: %d, Error message: %s",
- errno,strerror(errno));
- tst_resm(TBROK,mesg);
- tst_resm(TBROK,mesg);
- close(fd1[0]);
- return;
- }
-
- /*
- * Wait for the child to terminate and check the termination status.
- */
- if (wait(&term_stat) == -1) {
- /*
- * The wait system call failed.
- */
- sprintf(mesg,
- "Wait system call failed. Errno: %d, Error message: %s",
- errno,strerror(errno));
- tst_resm(TBROK,mesg);
- tst_resm(TBROK,mesg);
- close(fd1[0]);
- return;
- }
- else if ( STD_FUNCTIONAL_TEST ) {
- if ((term_stat & 0377) == SIGKILL) {
- /*
- * The child was killed by the signal sent,
- * which is correct.
- */
- tst_resm(TPASS,"The child was killed by SIGKILL.");
- }
- else if ( (term_stat >> 8) == TIMED_OUT ) {
- sprintf(mesg, "child exited with a timed out exit status");
- tst_resm(TBROK,mesg);
- }
- else {
- if ((term_stat >> 8) == SIG_IGNORED && test_case == IGNORE_TEST ) {
- sprintf(mesg,
- "SIGKILL was ignored by child after sent by parent.");
- }
- else if ((term_stat >> 8) == SIG_CAUGHT && test_case == CATCH_TEST ) {
- sprintf(mesg,
- "SIGKILL was caught by child after sent by parent.");
- }
- else {
- sprintf(mesg,
- "Child's termination status is unexpected. Status: %d (%#o).",
- term_stat, term_stat);
- }
- tst_resm(TFAIL, mesg);
- }
- }
- else {
- Tst_count++; /* increment test counter */
- }
- close(fd1[0]);
-
- } /* End of parent. */
- else if (Pid == 0) {
- /*
- * This is the child.
- * Set up to ignore/catch SIGKILL and check the return values.
- */
- errno=0;
- if ( test_case == IGNORE_TEST ) {
- exit_val = SIG_IGNORED;
- strcpy(string, "signal(SIGKILL, SIG_IGN)");
-
- Tret=(long)signal(SIGKILL, SIG_IGN);
- TEST_ERRNO=errno;
- }
- else {
- exit_val = SIG_NOT_CAUGHT;
- strcpy(string, "signal(SIGKILL, catchsig)");
- Tret=(long)signal(SIGKILL, catchsig);
- TEST_ERRNO=errno;
- }
- Ipc_info.timings=tblock;
-
- if ( (SIG_PF)Tret == SIG_ERR ) {
- if ( TEST_ERRNO == EINVAL ) {
- sprintf(Ipc_info.mesg, "%s ret:%ld SIG_ERR (%ld) as expected",
- string, Tret, (long)SIG_ERR);
- Ipc_info.status = PASS_FLAG;
- }
- else {
- sprintf(Ipc_info.mesg,
- "%s ret:%ld, errno:%d expected ret:%ld, errno:%d",
- string, Tret, TEST_ERRNO, (long)SIG_ERR, EINVAL);
- Ipc_info.status = FAIL_FLAG;
- }
-
- write(fd1[1], (char *)&Ipc_info, sizeof(Ipc_info));
- }
- else {
- /*
- * The child was not allowed to set the signal to
- * be ignored and errno was correct.
- */
- sprintf(Ipc_info.mesg,
- "%s ret:%ld, errno:%d expected ret:%ld, errno:%d",
- string, Tret, TEST_ERRNO, (long)SIG_ERR, EINVAL);
- Ipc_info.status = FAIL_FLAG;
- write(fd1[1], (char *)&Ipc_info, sizeof(Ipc_info));
- }
-
- /*
- * tell parent we are ready - setup by child is done
- */
- Ipc_info.status = GO_FLAG;
- write(fd1[1], (char *)&Ipc_info, sizeof(Ipc_info));
-
- /*
- * Set the alarm to wake up from the pause below if
- * the parents signal is ignored.
- */
- signal(SIGALRM, p_timeout_handler);
- alarm(TIMEOUT);
-
- /*
- * Pause until the parent sends a signal or until alarm is received.
- */
- pause();
-
- exit(exit_val);
-
-
- } /* End of child. */
- else {
- /*
- * The fork system call failed.
- */
- sprintf(mesg,
- "Fork system call failed. Errno: %d, Error message: %s",
- errno,strerror(errno));
- tst_resm(TBROK,mesg);
- tst_resm(TBROK,mesg);
- close(fd1[0]);
- close(fd1[1]);
- return;
- }
-
-} /* End of do_test. */
-
-/***********************************************************************
- * sigdfl_test - test for attempt to set SIGKILL to default
- ***********************************************************************/
-void
-sigdfl_test()
-{
- /*
- * Try to set SIGKILL to default and check the return values.
- */
- errno=-4;
-
- Tret=(long)signal(SIGKILL,SIG_DFL);
- TEST_RETURN=Tret;
- TEST_ERRNO=errno;
-
-
- if ( (SIG_PF)TEST_RETURN == SIG_ERR ) {
- if ( STD_FUNCTIONAL_TEST ) {
- if ( TEST_ERRNO != EINVAL ) {
- sprintf(mesg,
- "signal(SIGKILL,SIG_DFL) ret:%d, errno:%d expected ret:-1, errno:%d",
- TEST_RETURN, TEST_ERRNO, EINVAL);
- tst_resm(TFAIL, mesg);
- }
- else {
- sprintf(mesg,
- "signal(SIGKILL,SIG_DFL) ret:%d, errno:%d as expected.",
- TEST_RETURN, TEST_ERRNO);
- tst_resm(TPASS, mesg);
- }
- }
- else
- Tst_count++;
- }
- else {
- sprintf(mesg,
- "signal(SIGKILL,SIG_DFL) ret:%d, errno:%d expected ret:-1, errno:%d",
- TEST_RETURN, TEST_ERRNO, EINVAL);
- tst_resm(TFAIL, mesg);
- }
-
-} /* End of sigdfl_test. */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- /* make and change to a temporary directory */
- tst_tmpdir();
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
-} /* End setup() */
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
-
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
-
- TEST_CLEANUP;
-
- /*
- * remove the temporary directory and exit with
- * return code appropriate for results
- */
-
- tst_rmdir();
-
- tst_exit();
-
-} /* End cleanup() */
-
-/***********************************************************************
- * Signal handler routine that used by the parent to handler
- * a time out situation. It will attempt to kill the child and
- * call cleanup.
- ***********************************************************************/
-void
-p_timeout_handler()
-{
- kill(Pid, SIGKILL);
- cleanup();
-}
-
-/***********************************************************************
- * Signal handler routine that used by the child to handle
- * a time out situation. It will set a global varaible and return
- * if called.
- ***********************************************************************/
-void
-c_timeout_handler()
-{
- exit_val = TIMED_OUT;
- return;
-}
-
-/***********************************************************************
- * This signal handling routine will set a global variable and return
- * if called.
- ***********************************************************************/
-void
-catchsig()
-{
- exit_val = SIG_CAUGHT;
- return;
-}
-
-/***********************************************************************
- * Update timing information
- ***********************************************************************/
-void
-update_timings(atblock)
-struct tblock atblock;
-{
- tblock.tb_max += atblock.tb_max;
- tblock.tb_min += atblock.tb_min;
- tblock.tb_total += atblock.tb_total;
- tblock.tb_count += atblock.tb_count;
-}
diff --git a/winsup/testsuite/winsup.api/ltp/stat01.c b/winsup/testsuite/winsup.api/ltp/stat01.c
deleted file mode 100644
index da3596e17..000000000
--- a/winsup/testsuite/winsup.api/ltp/stat01.c
+++ /dev/null
@@ -1,267 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * Test Name: stat01
- *
- * Test Description:
- * Verify that, stat(2) succeeds to get the status of a file and fills the
- * stat structure elements.
- *
- * Expected Result:
- * stat() should return value 0 on success and fills the stat structure
- * elements with the specified 'file' information.
- *
- * Algorithm:
- * Setup:
- * Setup signal handling.
- * Create temporary directory.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise,
- * Verify the Functionality of system call
- * if successful,
- * Issue Functionality-Pass message.
- * Otherwise,
- * Issue Functionality-Fail message.
- * Cleanup:
- * Print errno log and/or timing stats if options given
- * Delete the temporary directory created.
- *
- * Usage: <for command-line>
- * stat01 [-c n] [-e] [-f] [-i n] [-I x] [-p x] [-t]
- * where, -c n : Run n copies concurrently.
- * -e : Turn on errno logging.
- * -f : Turn off functionality Testing.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * History
- * 07/2001 John George
- * -Ported
- *
- * Restrictions:
- *
- */
-#include <sys/types.h>
-#include <sys/fcntl.h>
-#include <sys/stat.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include <pwd.h>
-
-#include "test.h"
-#include "usctest.h"
-
-#define FILE_MODE 0644
-#define TESTFILE "testfile"
-#define FILE_SIZE 1024
-#define BUF_SIZE 256
-#define MASK 0777
-
-const char *TCID="stat01"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-int exp_enos[]={0};
-uid_t User_id; /* Owner id of the test file */
-gid_t Group_id; /* Group id of the test file */
-char nobody_uid[] = "nobody";
-struct passwd *ltpuser;
-
-void setup(); /* Setup function for the test */
-void cleanup(void) __attribute__((noreturn)); /* Cleanup function for the test */
-
-int
-main(int ac, char **av)
-{
- struct stat stat_buf; /* stat structure buffer */
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /* Parse standard options given to run the test. */
- msg = parse_opts(ac, av, (option_t *) NULL, NULL);
- if (msg != (char *) NULL) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- /*NOTREACHED*/
- }
-
- /* Perform global setup for test */
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /* Check looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- /* Reset Tst_count in case we are looping. */
- Tst_count = 0;
-
- /*
- * Call stat(2) to get the status of
- * specified 'file' into stat structure.
- */
- TEST(stat(TESTFILE, &stat_buf));
-
- /* check return code of stat(2) */
- if (TEST_RETURN == -1) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, \
- "stat(%s, &stat_buf) Failed, errno=%d : %s",
- TESTFILE, TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
- /*
- * Perform functional verification if test
- * executed without (-f) option.
- */
- if (STD_FUNCTIONAL_TEST) {
- stat_buf.st_mode &= ~S_IFREG;
- /*
- * Verify the data returned by stat(2)
- * aganist the expected data.
- */
- if ((stat_buf.st_uid != User_id) || \
- (stat_buf.st_gid != Group_id) || \
- (stat_buf.st_size != FILE_SIZE) || \
- ((stat_buf.st_mode & MASK) != FILE_MODE)) {
- tst_resm(TFAIL, "Functionality of "
- "stat(2) on '%s' Failed",
- TESTFILE);
- } else {
- tst_resm(TPASS, "Functionality of "
- "stat(2) on '%s' Succcessful",
- TESTFILE);
- }
- } else {
- tst_resm(TINFO, "Call succeeded");
- }
- }
- Tst_count++; /* incr. TEST_LOOP counter */
- } /* End for TEST_LOOPING */
-
- /* Call cleanup() to undo setup done for the test. */
- cleanup();
- /*NOTREACHED*/
-
-} /* End main */
-
-/*
- * void
- * setup() - Performs setup function for the test.
- * Creat a temporary directory and change directory to it.
- * Creat a testfile and write some known data into it.
- * Get the effective uid/gid of test process.
- */
-void
-setup()
-{
- int i, fd;
- char tst_buff[BUF_SIZE];
- int wbytes;
- int write_len = 0;
-
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-#if 0
- /* Switch to nobody user for correct error code collection */
- if (geteuid() != 0) {
- tst_brkm(TBROK, tst_exit, "Test must be run as root");
- }
- ltpuser = getpwnam(nobody_uid);
- if (setuid(ltpuser->pw_uid) == -1) {
- tst_resm(TINFO, "setuid failed to "
- "to set the effective uid to %d",
- ltpuser->pw_uid);
- perror("setuid");
- }
-#endif
- /* Pause if that option was specified
- * TEST_PAUSE contains the code to fork the test with the -i option.
- * You want to make sure you do this before you create your temporary
- * directory.
- */
- TEST_PAUSE;
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- if ((fd = open(TESTFILE, O_RDWR|O_CREAT, FILE_MODE)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR|O_CREAT, %#o) Failed, errno=%d : %s",
- TESTFILE, FILE_MODE, errno, strerror(errno));
- /*NOTREACHED*/
- }
-
- /* Fill the test buffer with the known data */
- for (i = 0; i < BUF_SIZE; i++) {
- tst_buff[i] = 'a';
- }
-
- /* Write to the file 1k data from the buffer */
- while (write_len < FILE_SIZE) {
- if ((wbytes = write(fd, tst_buff, sizeof(tst_buff))) <= 0) {
- tst_brkm(TBROK, cleanup,
- "write(2) on %s Failed, errno=%d : %s",
- TESTFILE, errno, strerror(errno));
- /*NOTREACHED*/
- } else {
- write_len += wbytes;
- }
- }
-
- /* Close the testfile created */
- if (close(fd) == -1) {
- tst_resm(TWARN, "close(%s) Failed, errno=%d : %s",
- TESTFILE, errno, strerror(errno));
- }
-
- /* Get the uid/gid of the process */
- User_id = getuid();
- Group_id = getgid();
-
-} /* End setup() */
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- * Remove the test file and temporary directory created.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/stat02.c b/winsup/testsuite/winsup.api/ltp/stat02.c
deleted file mode 100644
index 745476fa0..000000000
--- a/winsup/testsuite/winsup.api/ltp/stat02.c
+++ /dev/null
@@ -1,276 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * Test Name: stat02
- *
- * Test Description:
- * Verify that, stat(2) succeeds to get the status of a file and fills the
- * stat structure elements though process doesn't have read access to the
- * file.
- *
- * Expected Result:
- * stat() should return value 0 on success and the stat structure elements
- * should be filled with specified 'file' information.
- *
- * Algorithm:
- * Setup:
- * Setup signal handling.
- * Create temporary directory.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise,
- * Verify the Functionality of system call
- * if successful,
- * Issue Functionality-Pass message.
- * Otherwise,
- * Issue Functionality-Fail message.
- * Cleanup:
- * Print errno log and/or timing stats if options given
- * Delete the temporary directory created.
- *
- * Usage: <for command-line>
- * stat02 [-c n] [-e] [-f] [-i n] [-I x] [-p x] [-t]
- * where, -c n : Run n copies concurrently.
- * -e : Turn on errno logging.
- * -f : Turn off functionality Testing.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * History
- * 07/2001 John George
- * -Ported
- *
- * Restrictions:
- *
- */
-#include <sys/types.h>
-#include <sys/fcntl.h>
-#include <sys/stat.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include <pwd.h>
-
-#include "test.h"
-#include "usctest.h"
-
-#define FILE_MODE S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH
-#define TESTFILE "testfile"
-#define FILE_SIZE 1024
-#define BUF_SIZE 256
-#define NEW_MODE 0222
-#define MASK 0777
-
-const char *TCID="stat02"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-int exp_enos[]={0};
-uid_t User_id; /* eff. user id/group id of test process */
-gid_t Group_id;
-char nobody_uid[] = "nobody";
-struct passwd *ltpuser;
-
-void setup(); /* Setup function for the test */
-void cleanup(void) __attribute__((noreturn)); /* Cleanup function for the test */
-
-int
-main(int ac, char **av)
-{
- struct stat stat_buf; /* stat structure buffer */
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /* Parse standard options given to run the test. */
- msg = parse_opts(ac, av, (option_t *) NULL, NULL);
- if (msg != (char *) NULL) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /* Perform global setup for test */
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /* Check looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- /* Reset Tst_count in case we are looping. */
- Tst_count = 0;
-
- /*
- * Call stat(2) to get the status of
- * specified 'file' into stat structure.
- */
- TEST(stat(TESTFILE, &stat_buf));
-
- /* check return code of stat(2) */
- if (TEST_RETURN == -1) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL,
- "stat(%s, &stat_buf) Failed, errno=%d : %s",
- TESTFILE, TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
- /*
- * Perform functional verification if test
- * executed without (-f) option.
- */
- if (STD_FUNCTIONAL_TEST) {
- stat_buf.st_mode &= ~S_IFREG;
- /*
- * Verify the data returned by stat(2)
- * aganist the expected data.
- */
- if ((stat_buf.st_uid != User_id) || \
- (stat_buf.st_gid != Group_id) || \
- (stat_buf.st_size != FILE_SIZE) || \
- ((stat_buf.st_mode & MASK) != NEW_MODE)) {
- tst_resm(TFAIL, "Functionality of "
- "stat(2) on '%s' Failed",
- TESTFILE);
- } else {
- tst_resm(TPASS, "Functionality of "
- "stat(2) on '%s' Succcessful",
- TESTFILE);
- }
- } else {
- tst_resm(TPASS, "Call succeeded");
- }
- }
- Tst_count++; /* incr TEST_LOOP counter */
- } /* End for TEST_LOOPING */
-
- /* Call cleanup() to undo setup done for the test. */
- cleanup();
- /*NOTREACHED*/
-
-} /* End main */
-
-/*
- * void
- * setup() - Performs setup function for the test.
- * Creat a temporary directory and change directory to it.
- * Creat a testfile and write some data into it.
- * Modify the mode permissions of testfile such that test process
- * has read-only access to testfile.
- */
-void
-setup()
-{
- int i, fd; /* counter, file handle for file */
- char tst_buff[BUF_SIZE]; /* data buffer for file */
- int wbytes; /* no. of bytes written to file */
- int write_len = 0;
-
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-#if 0
- /* Switch to nobody user for correct error code collection */
- if (geteuid() != 0) {
- tst_brkm(TBROK, tst_exit, "Test must be run as root");
- }
- ltpuser = getpwnam(nobody_uid);
- if (setuid(ltpuser->pw_uid) == -1) {
- tst_resm(TINFO, "setuid failed to "
- "to set the effective uid to %d",
- ltpuser->pw_uid);
- perror("setuid");
- }
-#endif
- /* Pause if that option was specified
- * TEST_PAUSE contains the code to fork the test with the -i option.
- * You want to make sure you do this before you create your temporary
- * directory.
- */
- TEST_PAUSE;
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- if ((fd = open(TESTFILE, O_RDWR|O_CREAT, FILE_MODE)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR|O_CREAT, %#o) Failed, errno=%d : %s",
- TESTFILE, FILE_MODE, errno, strerror(errno));
- /*NOTREACHED*/
- }
-
- /* Fill the test buffer with the known data */
- for (i = 0; i < BUF_SIZE; i++) {
- tst_buff[i] = 'a';
- }
-
- /* Write to the file 1k data from the buffer */
- while (write_len < FILE_SIZE) {
- if ((wbytes = write(fd, tst_buff, sizeof(tst_buff))) <= 0) {
- tst_brkm(TBROK, cleanup,
- "write(2) on %s Failed, errno=%d : %s",
- TESTFILE, errno, strerror(errno));
- /*NOTREACHED*/
- } else {
- write_len += wbytes;
- }
- }
-
- if (close(fd) == -1) {
- tst_resm(TWARN, "close(%s) Failed, errno=%d : %s",
- TESTFILE, errno, strerror(errno));
- }
-
- /* Modify mode permissions on the testfile */
- if (chmod(TESTFILE, NEW_MODE) < 0) {
- tst_brkm(TBROK, cleanup,
- "chmod(2) on %s Failed, errno=%d : %s",
- TESTFILE, errno, strerror(errno));
- /*NOTREACHED*/
- }
-
- /* Get the uid/gid of the process */
- User_id = getuid();
- Group_id = getgid();
-
-} /* End setup() */
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- * Remove the temporary directory and file created.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/stat03.c b/winsup/testsuite/winsup.api/ltp/stat03.c
deleted file mode 100644
index dcddfd2a0..000000000
--- a/winsup/testsuite/winsup.api/ltp/stat03.c
+++ /dev/null
@@ -1,391 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * Test Name: stat03
- *
- * Test Description:
- * Verify that,
- * 1) stat(2) returns -1 and sets errno to EACCES if search permission is
- * denied on a component of the path prefix.
- * 2) stat(2) returns -1 and sets errno to ENOENT if the specified file
- * does not exists or empty string.
- * 3) stat(2) returns -1 and sets errno to EFAULT if pathname points
- * outside user's accessible address space.
- * 4) stat(2) returns -1 and sets errno to ENAMETOOLONG if the pathname
- * component is too long.
- * 5) stat(2) returns -1 and sets errno to ENOTDIR if the directory
- * component in pathname is not a directory.
- *
- * Expected Result:
- * stat() should fail with return value -1 and set expected errno.
- *
- * Algorithm:
- * Setup:
- * Setup signal handling.
- * Create temporary directory.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * if errno set == expected errno
- * Issue sys call fails with expected return value and errno.
- * Otherwise,
- * Issue sys call fails with unexpected errno.
- * Otherwise,
- * Issue sys call returns unexpected value.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- * Delete the temporary directory(s)/file(s) created.
- *
- * Usage: <for command-line>
- * stat03 [-c n] [-e] [-i n] [-I x] [-p x] [-t]
- * where, -c n : Run n copies concurrently.
- * -e : Turn on errno logging.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * History
- * 07/2001 John George
- * -Ported
- *
- * Restrictions:
- *
- */
-
-#include <fcntl.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <pwd.h>
-
-#include "test.h"
-#include "usctest.h"
-
-#define MODE_RWX S_IRWXU | S_IRWXG | S_IRWXO
-#define FILE_MODE S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH
-#define DIR_TEMP "testdir_1"
-#define TEST_FILE1 "testdir_1/tfile_1"
-#define TEST_FILE2 "t_file/tfile_2"
-
-int no_setup();
-int setup1(); /* setup function to test chmod for EACCES */
-int setup2(); /* setup function to test chmod for ENOTDIR */
-int longpath_setup(); /* setup function to test chmod for ENAMETOOLONG */
-char nobody_uid[] = "nobody";
-struct passwd *ltpuser;
-
-
-char Longpathname[PATH_MAX+2];
-char High_address_node[64];
-
-struct test_case_t { /* test case struct. to hold ref. test cond's*/
- const char *pathname;
- const char *desc;
- int exp_errno;
- int (*setupfunc)();
-} Test_cases[] = {
-#ifndef __CYGWIN__
- { TEST_FILE1, "No Search permissions to process", EACCES, setup1 },
-#endif
- { High_address_node, "Address beyond address space", EFAULT, no_setup },
- { (char *)-1, "Negative address", EFAULT, no_setup },
- { Longpathname, "Pathname too long", ENAMETOOLONG, longpath_setup },
- { "", "Pathname is empty", ENOENT, no_setup },
-#ifndef __CYGWIN__
- { TEST_FILE2, "Path contains regular file", ENOTDIR, setup2 },
-#endif
- { NULL, NULL, 0, no_setup }
-};
-
-const char *TCID="stat03"; /* Test program identifier. */
-int TST_TOTAL = 6; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-int exp_enos[]={EACCES, EFAULT, ENAMETOOLONG, ENOENT, ENOTDIR, 0};
-
-void setup(); /* Main setup function for the tests */
-void cleanup(void) __attribute__((noreturn)); /* cleanup function for the test */
-char *get_high_address(void);
-
-int
-main(int ac, char **av)
-{
- struct stat stat_buf; /* stat structure buffer */
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- const char *file_name; /* ptr. for file name whose mode is modified*/
- const char *test_desc; /* test specific error message */
- int ind; /* counter to test different test conditions */
-
- /* Parse standard options given to run the test. */
- msg = parse_opts(ac, av, (option_t *) NULL, NULL);
- if (msg != (char *) NULL) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- /*NOTREACHED*/
- }
-
- /*
- * Invoke setup function to call individual test setup functions
- * to simulate test conditions.
- */
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /* Check looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- /* Reset Tst_count in case we are looping. */
- Tst_count=0;
-
- for (ind = 0; Test_cases[ind].desc != NULL; ind++) {
- file_name = Test_cases[ind].pathname;
- test_desc = Test_cases[ind].desc;
-
- if (file_name == High_address_node) {
- file_name = (char *)get_high_address();
- }
-
- /*
- * Call stat(2) to test different test conditions.
- * verify that it fails with -1 return value and
- * sets appropriate errno.
- */
- TEST(stat(file_name, &stat_buf));
-
- /* Check return code from stat(2) */
- if (TEST_RETURN == -1) {
- TEST_ERROR_LOG(TEST_ERRNO);
- if (TEST_ERRNO == Test_cases[ind].exp_errno) {
- tst_resm(TPASS,
- "stat() fails, %s, errno:%d",
- test_desc, TEST_ERRNO);
- } else {
- tst_resm(TFAIL, "stat() fails, %s,"
- " errno:%d, expected errno:%d",
- test_desc, TEST_ERRNO,
- Test_cases[ind].exp_errno);
- }
- } else {
- tst_resm(TFAIL, "stat(2) returned %d,"
- " expected -1, errno:%d", TEST_RETURN,
- Test_cases[ind].exp_errno);
- }
- } /* End of TEST CASE LOOPING. */
- Tst_count++; /* incr TEST_LOOP counter */
- } /* End for TEST_LOOPING */
-
- /*
- * Invoke cleanup() to delete the test directory/file(s) created
- * in the setup().
- */
- cleanup();
- /*NOTREACHED*/
-
-} /* End main */
-
-/*
- * void
- * setup(void) - performs all ONE TIME setup for this test.
- * Exit the test program on receipt of unexpected signals.
- * Create a temporary directory and change directory to it.
- * Invoke individual test setup functions according to the order
- * set in struct. definition.
- */
-void
-setup()
-{
- int ind; /* counter for setup functions */
-
- /* Capture unexpected signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-#if 0
- /* Switch to nobody user for correct error code collection */
- if (geteuid() != 0) {
- tst_brkm(TBROK, tst_exit, "Test must be run as root");
- }
- ltpuser = getpwnam(nobody_uid);
- if (setuid(ltpuser->pw_uid) == -1) {
- tst_resm(TINFO, "setuid failed to "
- "to set the effective uid to %d",
- ltpuser->pw_uid);
- perror("setuid");
- }
-#endif
- /* Pause if that option was specified
- * TEST_PAUSE contains the code to fork the test with the -i option.
- * You want to make sure you do this before you create your temporary
- * directory.
- */
- TEST_PAUSE;
-
- /* Make a temp dir and cd to it */
- tst_tmpdir();
-
- /* call individual setup functions */
- for (ind = 0; Test_cases[ind].desc != NULL; ind++) {
- Test_cases[ind].setupfunc();
- }
-} /* End setup() */
-
-/*
- * int
- * no_setup() - Some test conditions for stat(2) do not any setup.
- * Hence, this function just returns 0.
- * This function simply returns 0.
- */
-int
-no_setup()
-{
- return 0;
-}
-
-
-/*
- * int
- * setup1() - setup function for a test condition for which stat(2)
- * returns -1 and sets errno to EACCES.
- * Create a test directory under temporary directory and create a test file
- * under this directory with mode "0666" permissions.
- * Modify the mode permissions on test directory such that process will not
- * have search permissions on test directory.
- *
- * The function returns 0.
- */
-int
-setup1()
-{
- int fd; /* file handle for testfile */
-
- /* Creat a test directory */
- if (mkdir(DIR_TEMP, MODE_RWX) < 0) {
- tst_brkm(TBROK, cleanup, "mkdir(2) of %s failed", DIR_TEMP);
- /*NOTREACHED*/
- }
-
- /* Creat a test file under above test directory */
- if ((fd = open(TEST_FILE1, O_RDWR|O_CREAT, 0666)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR|O_CREAT, 0666) failed, errno=%d : %s",
- TEST_FILE1, errno, strerror(errno));
- /*NOTREACHED*/
- }
- /* Close the test file */
- if (close(fd) == -1) {
- tst_brkm(TBROK, cleanup,
- "close(%s) Failed, errno=%d : %s",
- TEST_FILE1, errno, strerror(errno));
- /*NOTREACHED*/
- }
-
- /* Modify mode permissions on test directory */
- if (chmod(DIR_TEMP, FILE_MODE) < 0) {
- tst_brkm(TBROK, cleanup, "chmod(2) of %s failed", DIR_TEMP);
- /*NOTREACHED*/
- }
- return 0;
-}
-
-/*
- * int
- * setup2() - setup function for a test condition for which stat(2)
- * returns -1 and sets errno to ENOTDIR.
- *
- * Create a test file under temporary directory so that test tries to
- * change mode of a testfile "tfile_2" under "t_file" which happens to be
- * another regular file.
- */
-int
-setup2()
-{
- int fd; /* File handle for test file */
-
- /* Creat a test file under temporary directory */
- if ((fd = open("t_file", O_RDWR|O_CREAT, MODE_RWX)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(2) on t_file failed, errno=%d : %s",
- errno, strerror(errno));
- /*NOTREACHED*/
- }
- /* Close the test file created above */
- if (close(fd) == -1) {
- tst_brkm(TBROK, cleanup,
- "close(t_file) Failed, errno=%d : %s",
- errno, strerror(errno));
- /*NOTREACHED*/
- }
- return 0;
-}
-
-/*
- * int
- * longpath_setup() - setup to create a node with a name length exceeding
- * the MAX. length of PATH_MAX.
- * This function retruns 0.
- */
-int
-longpath_setup()
-{
- int ind; /* counter variable */
-
- for (ind = 0; ind <= (PATH_MAX + 1); ind++) {
- Longpathname[ind] = 'a';
- }
- return 0;
-}
-
-/*
- * void
- * cleanup() - Performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- * Print test timing stats and errno log if test executed with options.
- * Remove temporary directory and sub-directories/files under it
- * created during setup().
- * Exit the test program with normal exit code.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
-#ifndef __CYGWIN__
- /* Restore mode permissions on test directory created in setup2() */
- if (chmod(DIR_TEMP, MODE_RWX) < 0) {
- tst_brkm(TFAIL, NULL, "chmod(2) of %s failed", DIR_TEMP);
- }
-#endif
-
- /* Remove files and temporary directory created */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/stat05.c b/winsup/testsuite/winsup.api/ltp/stat05.c
deleted file mode 100644
index 5c0964a93..000000000
--- a/winsup/testsuite/winsup.api/ltp/stat05.c
+++ /dev/null
@@ -1,241 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : stat05
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for stat(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) stat(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the stat(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * stat(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <sys/types.h>
-#include <sys/fcntl.h>
-#include <sys/stat.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-
-const char *TCID="stat05"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0};
-
-char fname[255];
-int fd;
-struct stat statter;
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call stat(2) with F_CLRALF argument on fname
- */
- TEST(stat(fname, &statter));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "stat(%s, &statter) Failed, errno=%d : %s", fname,
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "stat(%s, &statter) returned %d", fname, TEST_RETURN);
- }
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- sprintf(fname,"tfile_%d",getpid());
- if ((fd = open(fname,O_RDWR|O_CREAT,0700)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR|O_CREAT,0700) Failed, errno=%d : %s",
- fname, errno, strerror(errno));
- }
-
- if (close(fd) == -1) {
- tst_resm(TWARN, "close(%s) Failed, errno=%d : %s",
- fname, errno, strerror(errno));
- }
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/stat06.c b/winsup/testsuite/winsup.api/ltp/stat06.c
deleted file mode 100644
index c5fae6fe5..000000000
--- a/winsup/testsuite/winsup.api/ltp/stat06.c
+++ /dev/null
@@ -1,377 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : stat06
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : stat(2) negative path testcases
- *
- * PARENT DOCUMENT : None
- *
- * TEST CASE TOTAL : 7
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : Richard Logan
- *
- * CO-PILOT : William Roske
- *
- * DATE STARTED : 03/30/94
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1-7) See Testcases structure below.
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- * -h : print help and exit
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * The libcuts.a and libsys.a libraries must be included in
- * the compilation of this test.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the stat(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * stat(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <sys/types.h>
-#include <sys/fcntl.h>
-#include <sys/stat.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include <setjmp.h>
-#include "test.h"
-#include "usctest.h"
-
-void setup();
-void cleanup(void) __attribute__((noreturn));
-
-const char *TCID="stat06"; /* Test program identifier. */
-int TST_TOTAL=8; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-extern char *get_high_address();
-
-int exp_enos[]={0, 0};
-
-int high_address_setup();
-int longpath_setup();
-int no_setup();
-int filepath_setup();
-char Longpathname[PATH_MAX+2];
-char High_address[64];
-struct stat statbuf;
-jmp_buf sig11_recover;
-void sig11_handler(int sig);
-
-struct test_case_t {
- const char *pathname;
- struct stat *stbuf;
- const char *desc;
- int exp_errno;
- int (*setupfunc)();
-} Test_cases[] = {
- { "nonexistfile", &statbuf, "non-existent file", ENOENT, no_setup},
- { "", &statbuf, "path is empty string", ENOENT, no_setup},
- { "nefile/file", &statbuf, "path contains a non-existent file",
- ENOENT, no_setup },
-#ifndef __CYGWIN__
- { "file/file", &statbuf, "path contains a regular file",
- ENOTDIR, filepath_setup },
-#endif
- { Longpathname, &statbuf, "pathname too long", ENAMETOOLONG, longpath_setup },
- { High_address, &statbuf, "address beyond address space", EFAULT, high_address_setup },
- { (char *)-1, &statbuf, "negative address", EFAULT, no_setup },
- { "file", (struct stat *)-1, "invalid struct stat address", EFAULT, filepath_setup },
- { NULL, NULL, NULL, 0, no_setup }
-};
-
-/***********************************************************************
- * Main
- ***********************************************************************/
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- const char *fname;
- const char *desc;
- int ind;
- struct stat *stbuf;
- struct sigaction sa, osa;
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *) NULL ) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
-
- for (ind=0; Test_cases[ind].desc != NULL; ind++ ) {
-
- fname = Test_cases[ind].pathname;
- desc = Test_cases[ind].desc;
- stbuf = Test_cases[ind].stbuf;
-
- if (stbuf == (struct stat *)-1) {
- /* special sig11 case */
- sa.sa_handler = &sig11_handler;
- sigemptyset(&sa.sa_mask);
- sa.sa_flags = 0;
-
- sigaction(SIGSEGV, NULL, &osa);
- sigaction(SIGSEGV, &sa, NULL);
-
- if (setjmp(sig11_recover)) {
- TEST_RETURN = -1;
- TEST_ERRNO = EFAULT;
- } else {
- TEST(stat(fname, stbuf));
- }
- sigaction(SIGSEGV, &osa, NULL);
- } else {
- /*
- * Call stat(2)
- */
-
- TEST(stat(fname, stbuf));
- }
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- if ( STD_FUNCTIONAL_TEST ) {
- if ( TEST_ERRNO == Test_cases[ind].exp_errno )
- tst_resm(TPASS, "stat(<%s>, &stbuf) Failed, errno=%d",
- desc, TEST_ERRNO);
- else
- tst_resm(TFAIL,
- "stat(<%s>, &stbuf) Failed, errno=%d, expected errno:%d",
- desc, TEST_ERRNO, Test_cases[ind].exp_errno);
- }
- else
- Tst_count++;
- } else {
- tst_resm(TFAIL,
- "stat(<%s>, &stbuf) returned %d, expected -1, errno:%d",
- desc, TEST_RETURN, Test_cases[ind].exp_errno);
- }
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- int ind;
-
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- for (ind=0; Test_cases[ind].desc != NULL; ind++ ) {
- Test_cases[ind].setupfunc();
- }
-
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-
-} /* End cleanup() */
-
-/******************************************************************
- * no_setup() - does nothing
- ******************************************************************/
-int
-no_setup()
-{
- return 0;
-}
-
-/******************************************************************
- * high_address_setup() - generates an address that should cause a segfault
- ******************************************************************/
-int
-high_address_setup()
-{
- int ind;
-
- for (ind=0; Test_cases[ind].desc != NULL; ind++ ) {
- if ( Test_cases[ind].pathname == High_address ) {
- /*if ( strcmp(Test_cases[ind].pathname, HIGH_ADDRESS) == 0 ) { ***/
- Test_cases[ind].pathname = get_high_address();
- break;
- }
- }
- return 0;
-
-}
-
-/******************************************************************
- * longpath_setup() - creates a filename that is too long
- ******************************************************************/
-int
-longpath_setup()
-{
- int ind;
-
- for(ind=0; ind<= PATH_MAX+1; ind++) {
- Longpathname[ind] = 'a';
- }
- return 0;
-
-}
-
-/******************************************************************
- * filepath_setup() creates a file the exists that we will treat as a directory
- ******************************************************************/
-int
-filepath_setup()
-{
- int fd;
-
- if ( (fd=creat("file", 0777)) == -1 ) {
- tst_brkm(TBROK, cleanup, "creat(file) failed, errno:%d %s",
- errno, strerror(errno));
- }
- close(fd);
- return 0;
-}
-
-/******************************************************************
- * sig11_handler() - our segfault recover hack
- ******************************************************************/
-void
-sig11_handler(int sig)
-{
- longjmp(sig11_recover, 1);
-}
diff --git a/winsup/testsuite/winsup.api/ltp/symlink01.c b/winsup/testsuite/winsup.api/ltp/symlink01.c
deleted file mode 100644
index 54a24b87f..000000000
--- a/winsup/testsuite/winsup.api/ltp/symlink01.c
+++ /dev/null
@@ -1,2032 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- */
-/* $Id$ */
-/**********************************************************
-*
-* OS Test - Silicon Graphics, Inc.
-*
-* TEST IDENTIFIER : symlink01 (symlink)
-*
-* TEST TITLE : Make a Symbolic Link to a File
-*
-* PARENT DOCUMENT : symtds01
-*
-* TEST CASE TOTAL : 5
-*
-* WALL CLOCK TIME : 3
-*
-* TEST IDENTIFIER : readlink01 (readlink)
-*
-* TEST TITLE : Reads Value of a Symbolic Link
-*
-* PARENT DOCUMENT : symtds01
-*
-* TEST CASE TOTAL : 4
-*
-* WALL CLOCK TIME : 3
-*
-* TEST IDENTIFIER : stat04 (stat)
-*
-* TEST TITLE : Gets File Status Indirectly From a Symbolic Link
-* File
-*
-* PARENT DOCUMENT : symtds01
-*
-* TEST CASE TOTAL : 3
-*
-* WALL CLOCK TIME : 3
-*
-* TEST IDENTIFIER : lstat01 (lstat)
-*
-* TEST TITLE : Get file Status About a Symbolic Link File
-*
-* PARENT DOCUMENT : symtds01
-*
-* TEST CASE TOTAL : 3
-*
-* WALL CLOCK TIME : 3
-*
-* TEST IDENTIFIER : mkdir05 (mkdir)
-*
-* TEST TITLE : Fail When Making a Directory File Indirectly From
-* a Symbolic Link File
-*
-* PARENT DOCUMENT : symtds01
-*
-* TEST CASE TOTAL : 1
-*
-* WALL CLOCK TIME : 3
-*
-* TEST IDENTIFIER : rmdir03 (rmdir)
-*
-* TEST TITLE : Fail When Removing a Directory File Indirectly
-* From a Symbolic Link File
-*
-* PARENT DOCUMENT : symtds01
-*
-* TEST CASE TOTAL : 1
-*
-* WALL CLOCK TIME : 3
-*
-* TEST IDENTIFIER : chdir01 (chdir)
-*
-* TEST TITLE : Changes Current Working DIrectory Location
-* Indirectly From a Symbolic Link File
-*
-* PARENT DOCUMENT : symtds01
-*
-* TEST CASE TOTAL : 3
-*
-* WALL CLOCK TIME : 3
-*
-* TEST IDENTIFIER : link01 (link)
-*
-* TEST TITLE : Creates a Link To a File Indirectly From a
-* Symbolic Link File
-*
-* PARENT DOCUMENT : symtds01
-*
-* TEST CASE TOTAL : 3
-*
-* WALL CLOCK TIME : 3
-*
-* TEST IDENTIFIER : unlink01 (unlink)
-*
-* TEST TITLE : Removes a Link To a File And Not Any Object File
-* Which Maybe Pointed At
-*
-* PARENT DOCUMENT : symtds01
-*
-* TEST CASE TOTAL : 1
-*
-* WALL CLOCK TIME : 3
-*
-* TEST IDENTIFIER : chmod01 (chmod)
-*
-* TEST TITLE : Change Object File Permissions Indirectly From a
-* Symbolic Link File
-*
-* PARENT DOCUMENT : symtds01
-*
-* TEST CASE TOTAL : 3
-*
-* WALL CLOCK TIME : 3
-*
-* TEST IDENTIFIER : utime01 (utime)
-*
-* TEST TITLE : Set File Access And Modify Object File Times
-* Indirectly From a Symbolic Link File
-*
-* PARENT DOCUMENT : symtds01
-*
-* TEST CASE TOTAL : 3
-*
-* WALL CLOCK TIME : 3
-*
-* TEST IDENTIFIER : rename01 (rename)
-*
-* TEST TITLE : Rename a Symbolic Link File And Not Any Object
-* File
-*
-* PARENT DOCUMENT : symtds01
-*
-* TEST CASE TOTAL : 3
-*
-* WALL CLOCK TIME : 3
-*
-* TEST IDENTIFIER : open01 (open)
-*
-* TEST TITLE : Create/Open a File For Reading Or Writing
-* Indirectly From a Symbolic Link File
-*
-* PARENT DOCUMENT : symtds01
-*
-* TEST CASE TOTAL : 5
-*
-* WALL CLOCK TIME : 3
-*
-* EXECUTED BY : whom ever
-*
-* CPU TYPES : ALL
-*
-* AUTHOR : David Fenner
-*
-* CO-PILOT : Jon Hendrickson
-*
-* DATE STARTED : 07/25/90
-*
-* INITIAL RELEASE : UNICOS 6.0
-*
-* TEST CASES
-*
-* For symlink
-*
-* 1. Create symbolic link with abnormal object name path
-* 2. Create symbolic link with normal object name path
-* 3. Create symbolic link with path to an existing object file
-* 4. Receive EEXIST error when creating an already existing symbolic link file.
-* 5. Receive ENAMETOOLONG error when creating symbolic link which exceeds PATH_MAX in length
-*
-* For readlink
-*
-* 1. Read a symbolic link file which points at no object file
-* 2. Read a symbolic link file which points at an object file
-* 3. Receive ENAMETOOLONG error when reading symbolic link which exceeds PATH_MAX in length
-* 4. Receive an EINVAL error when reading a file which is not a symbolic
-* link file.
-*
-* For stat
-*
-* 1. Get object file status through symbolic link file
-* 2. Receive ENOENT error when accessing non-existent object file through symbolic link file
-* 3. Receive ELOOP error when nesting of symbolic links exceed maximum
-*
-* For lstat
-*
-* 1. Get symbolic link file status when pointing at no object file
-* 2. Get symbolic link file status when pointing at an object file
-* 3. Get object file status when argument is not a symbolic link
-* file.
-*
-* For mkdir
-*
-* 1. Receive EEXIST error when creating a directory through a symbolic link file
-*
-* For rmdir
-*
-* 1. Receive ENOTDIR error when removing an existing directory through a symbolic link file
-*
-* For chdir
-*
-* 1. Change current working directory through a symbolic link file
-* 2. Receive ENOENT error when accessing non-existent directory through symbolic link file
-* 3. Receive ELOOP error when nesting of symbolic links exceed maximum
-*
-* For link
-*
-* 1. Link an object file to a new file through symbolic link file
-* 2. Receive ENOENT error when accessing non-existent object file through symbolic link file
-* 3. Receive ELOOP error when nesting of symbolic links exceed maximum
-*
-* For unlink
-*
-* 1. Delete a symbolic link file and not the object file which it points at
-*
-* For chmod
-*
-* 1. Change file permissions of object file through a symbolic link file
-* 2. Receive ENOENT error when accessing non-existent directory through symbolic link file
-* 3. Receive ELOOP error when nesting of symbolic links exceed maximum
-*
-* For utime
-*
-* 1. Change inode times of object file through a symbolic link file
-* 2. Receive ENOENT error when accessing non-existent directory through symbolic link file
-* 3. Receive ELOOP error when nesting of symbolic links exceed maximum
-*
-* For rename
-*
-* 1. Rename a symbolic link file which points at no object file
-* 2. Rename a symbolic link file which points at an object file without any object file alterations.
-* 3. Receive EXDEV when trying to rename a symbolic link file to an address outside of current file system
-*
-* For open
-*
-* 1. Create an object file through a symbolic link file
-* 2. Open an object file through a symbolic link file
-* 3. Receive EEXIST error when exclusively creating an object file through a symbolic link file
-* 4. Receive ENOENT error when accessing non-existent object file through symbolic link file
-* 5. Receive ELOOP error when nesting of symbolic links exceed maximum
-*
-* ENVIRONMENTAL NEEDS
-* None
-*
-* DETAILED DESCRIPTION
-*
-* Self-documenting code so see below
-*
-*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <signal.h>
-#include <string.h>
-#include <fcntl.h> /* open(2) system call */
-#include <errno.h>
-#include <sys/types.h>
-#include <utime.h> /* utime(2) system call */
-#include <sys/param.h>
-#include <sys/stat.h> /* stat(2) and lstat(2) system calls */
-
-#include "test.h"
-#include "usctest.h"
-
-void setup();
-void cleanup(void) __attribute__((noreturn));
-void help();
-void delete_files();
-void do_EEXIST();
-void do_ENOENT();
-void do_ELOOP();
-void do_ENOTDIR();
-void do_EXDEV();
-void do_ENAMETOOLONG();
-void do_EINVAL();
-void do_readlink();
-void do_stat();
-void do_chdir();
-void do_link();
-void do_unlink();
-void do_chmod();
-void do_utime();
-void do_rename();
-void do_open();
-
-#define S_FILE "symbolic" /* Name of symbolic link file */
-#define O_FILE "object" /* Name of object file */
-#define A_S_FILE "asymbolic" /* Another name for a symbolic link file */
-#define Y_A_S_FILE "/NiCkEr" /* Yet another symbolic link file */
-#define BIG_STRING "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"
-
-#define DEFAULT_TCID "symlink01"
-#define ALL 1
-
-#define SYMLINK "symlink01"
-#define READLINK "readlink01"
-#define STAT "stat04"
-#define LSTAT "lstat01"
-#define MKDIR "mkdir05"
-#define RMDIR "rmdir03"
-#define CHDIR "chdir01"
-#define LINK "link01"
-#define UNLINK "unlink01"
-#define CHMOD "chmod01"
-#define UTIME "utime01"
-#define RENAME "rename01"
-#define OPEN "open01"
-
-#define cktcsid(s1,s2) (!strcmp(s1,s2))
-#define BUFMAX 512
-#define MODE 0700
-#define MASK 0100777 /* A regular file with r,w,x for all mask */
-
-/*
- * Lets be optimistic and only define messages for passing test cases
- */
-const char *msgs[] = {
- "Creation of symbolic link file to no object file is ok",
- "Creation of symbolic link file and object file via symbolic link is ok",
- "Creating an existing symbolic link file error is caught",
- "Creating a symbolic link which exceeds maximum pathname error is caught",
- "Reading of symbolic link file contents checks out ok",
- "Reading a symbolic link which exceeds maximum pathname error is caught",
- "Getting stat info about object file through symbolic link file is ok",
- "Stat(2) error when accessing non-existent object through symbolic link is caught",
- "lstat(2) of symbolic link file which points to no object file is ok",
- "lstat(2) of symbolic link file which points at an object file is ok",
- "mkdir(2) of object file through symbolic link file failed as expected",
- "rmdir(2) of object file through symbolic link file failed as expected",
- "chdir(2) to object file location through symbolic link file is ok",
- "chdir(2) to non-existent object file location through symbolic link file failed as expected",
- "link(2) to a symbolic link, which is pointing to an existing object file worked - file created and link count adjusted",
- "link(2) to a symbolic link, which is pointing to a non-existing object file worked ok - file created and link count adjusted.",
- "unlink(2) of symbolic link file with no object file removal is ok",
- "chmod(2) of object file permissions through symbolic link file is ok",
- "chmod(2) error when accessing non-existent object through symbolic link is caught",
- "utime(2) change of object file access and modify times through symbolic link file is ok",
- "utime(2) error when accessing non-existent object through symbolic link is caught",
- "rename(3) of symbolic link file name which points at no object file is ok",
- "rename(3) of symbolic link file name which points at object file is ok",
- "rename(3) error of symbolic link file name across file systems is caught",
- "open(2) with (O_CREAT | O_RDWR) to create object file through symbolic link file and all writes, reads, and lseeks are ok",
- "open(2) with O_RDWR of existing object file through symbolic link file and all writes, reads, and lseeks are ok",
- "open(2) with (O_CREAT | O_EXCL) error is caught when creating object file through symbolic link file",
- "open(2) error with O_RDWR is caught when processing symbolic link file which points at no object file",
- "Nested symbolic link access condition caught. ELOOP is returned",
- "Reading a nonsymbolic link file error condition is caught. EINVAL is returned",
- "lstat(2) of object file returns object file inode information",
- "NULL"
-};
-
-/*
- * Define test object setup and validation functions
- */
-int creat_both(), creat_symlink(), creat_path_max(), ck_symlink(),
- creat_object(), ck_object(), ck_both(), ck_path_max();
-
-
-/*
- * Define test cases
- */
-struct all_test_cases
-{
- const char *tcid;
- int test_fail;
- int errno_val;
- int pass_msg;
- int (*test_setup)();
- int (*ck_test)();
- const char *fn_arg[3];
-
-} test_objects[] = {
- {SYMLINK, 0, 0, 0, creat_symlink, ck_symlink, {"%bc+eFhi!k", S_FILE, NULL}},
- {SYMLINK, 0, 0, 0, creat_symlink, ck_symlink, {O_FILE, S_FILE, NULL}},
- {SYMLINK, 0, 0, 1, creat_both, ck_both, {O_FILE, S_FILE, O_FILE}},
- {SYMLINK, 1, EEXIST, 2, creat_symlink, ck_symlink, {O_FILE, S_FILE, NULL}},
- {SYMLINK, 1, ENAMETOOLONG, 3, creat_path_max, ck_path_max, {O_FILE, S_FILE, NULL}},
- {READLINK, 0, 0, 4, creat_symlink, ck_symlink, {O_FILE, S_FILE, NULL}},
- {READLINK, 0, 0, 4, creat_both, ck_both, {O_FILE, S_FILE, O_FILE}},
- {READLINK, 1, ENAMETOOLONG, 5, creat_path_max, ck_path_max, {O_FILE, S_FILE, NULL}},
- {READLINK, 1, EINVAL, 29, creat_object, ck_object, {O_FILE, NULL, NULL}},
- {STAT, 0, 0, 6, creat_both, ck_both, {O_FILE, S_FILE, O_FILE}},
- {STAT, 1, ENOENT, 7, creat_symlink, ck_symlink, {O_FILE, S_FILE, NULL}},
- {STAT, 1, ELOOP, 28, creat_symlink, ck_symlink, {S_FILE, S_FILE, NULL}},
- {LSTAT, 0, 0, 8, creat_symlink, ck_symlink, {O_FILE, S_FILE, NULL}},
- {LSTAT, 0, 0, 9, creat_both, ck_both, {O_FILE, S_FILE, O_FILE}},
- {LSTAT, 0, 0, 30, creat_object, ck_object, {O_FILE, NULL, NULL}},
- {MKDIR, 1, EEXIST, 10, creat_symlink, ck_symlink, {O_FILE, S_FILE, NULL}},
- {RMDIR, 1, ENOTDIR, 11, creat_symlink, ck_symlink, {O_FILE, S_FILE, NULL}},
- {CHDIR, 0, 0, 12, creat_symlink, ck_symlink, {O_FILE, S_FILE, O_FILE}},
- {CHDIR, 1, ENOENT, 13, creat_symlink, ck_symlink, {"%bc+eFhi!k", S_FILE, NULL}},
- {CHDIR, 1, ELOOP, 28, creat_symlink, ck_symlink, {S_FILE, S_FILE, NULL}},
- {LINK, 0, 0, 14, creat_both, ck_both, {O_FILE, S_FILE, O_FILE}},
- {LINK, 0, 0, 15, creat_symlink, ck_symlink, {O_FILE, S_FILE, NULL}},
- /* The following link test case is invalid - leaving it defined so */
- /* I don't have to change all the entries in the all_tcses array after link */
- {LINK, -1, -1, -1, creat_symlink, ck_symlink, {NULL, NULL, NULL}},
- {UNLINK, 0, 0, 16, creat_both, ck_both, {O_FILE, S_FILE, O_FILE}},
- {CHMOD, 0, 0, 17, creat_both, ck_both, {O_FILE, S_FILE, O_FILE}},
- {CHMOD, 1, ENOENT, 18, creat_symlink, ck_symlink, {O_FILE, S_FILE, NULL}},
- {CHMOD, 1, ELOOP, 28, creat_symlink, ck_symlink, {S_FILE, S_FILE, NULL}},
- {UTIME, 0, 0, 19, creat_both, ck_both, {O_FILE, S_FILE, O_FILE}},
- {UTIME, 1, ENOENT, 20, creat_symlink, ck_symlink, {O_FILE, S_FILE, NULL}},
- {UTIME, 1, ELOOP, 28, creat_symlink, ck_symlink, {S_FILE, S_FILE, NULL}},
- {RENAME, 0, 0, 21, creat_symlink, ck_symlink, {O_FILE, S_FILE, NULL}},
- {RENAME, 0, 0, 22, creat_both, ck_both, {O_FILE, S_FILE, O_FILE}},
- {RENAME, -1, EXDEV, 23, creat_both, ck_both, {O_FILE, S_FILE, O_FILE}},
- {OPEN, 0, 0, 24, creat_symlink, ck_symlink, {O_FILE, S_FILE, NULL}},
- {OPEN, 0, 0, 25, creat_both, ck_both, {O_FILE, S_FILE, O_FILE}},
- {OPEN, -1, EEXIST, 26, creat_symlink, ck_symlink, {O_FILE, S_FILE, O_FILE}},
- {OPEN, 1, ENOENT, 27, creat_symlink, ck_symlink, {O_FILE, S_FILE, NULL}},
- {OPEN, 1, ELOOP, 28, creat_symlink, ck_symlink, {S_FILE, S_FILE, NULL}}
-};
-
-/*
- * Define tcses
- */
-struct tcses
-{
- const char *tcid;
- const char *syscall;
- int test_cases; /* number of entries in test_objects array */
- struct all_test_cases *tc_ptr;
- const char *desc;
-} all_tcses[] = {
-
- { SYMLINK, "symlink", 5, &test_objects[0],
- "Make a Symbolic Link to a File" },
- { READLINK, "readlink", 4, &test_objects[5],
- "Reads Value of a Symbolic Link" },
- { STAT, "stat", 3, &test_objects[9],
- "Gets File Status Indirectly From a Symbolic Link file" },
- { LSTAT, "lstat", 3, &test_objects[12],
- "Get file Status About a Symbolic Link File" },
- { MKDIR, "mkdir", 1, &test_objects[15],
- "Fail When Making a Directory File Indirectly from a symlink" },
- { RMDIR, "rmdir", 1, &test_objects[16],
- "Fail When Removing a Directory File Indirectly from a symlink" },
- { CHDIR, "chdir", 3, &test_objects[17],
- "Changes CWD Location Indirectly from a symlink" },
- { LINK, "link", 2, &test_objects[20],
- "Creates a Link To a File Indirectly From a Symbolic" },
- { UNLINK, "unlink", 1, &test_objects[23],
- "Removes a Link To a File but not the Object File" },
- { CHMOD, "chmod", 3, &test_objects[24],
- "Change Object File Permissions Indirectly From a Symbolic" },
- { UTIME, "utime", 3, &test_objects[27],
- "Set File Access And Modify Object File Times via symlink" },
- { RENAME, "rename", 3, &test_objects[30],
- "Rename a Symbolic Link File And Not Any Object file" },
- { OPEN, "open", 5, &test_objects[33],
- "Create/Open a File For Reading Or Writing via symlink" },
-};
-
-/*
- * Define GLOBAL variables
- */
-
-int TST_TOTAL;
-int TEST_RESULT;
-time_t a_time_value = 100;
-const char *TCID = NULL;
-char *Selectedtests = NULL; /* Name (tcid) of selected test cases */
-char test_msg[BUFMAX];
-char full_path[PATH_MAX+1];
-extern int Tst_count;
-extern char *TESTDIR;
-extern char *strrchr();
-extern int errno;
-
-struct stat asymlink, statter;
-char Buffer[1024];
-char Buf[1024];
-
-char *Tcid = NULL;
-
-option_t Options[] = {
- { "T:", NULL, &Tcid }, /* -T tcid option */
- { NULL, NULL, NULL }
-};
-
-/***********************************************************************
- * MAIN
- ***********************************************************************/
-int
-main(int argc, char *argv[])
-{
- struct tcses *tcs_ptr, *get_tcs_info();
- int do_syscalltests();
- void cleanup();
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
-
- /***************************************************************
- * parse standard options, and exit if there is an error
- ***************************************************************/
- if ( (msg=parse_opts(argc, argv, Options, &help)) != (char *) NULL ) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /*
- * If the -T option was used, use that TCID or use the default
- */
- if ( Tcid != NULL ) {
- TCID = Tcid;
- Selectedtests=Tcid;
-
- }
- else {
- TCID = DEFAULT_TCID;
-#ifndef ALL
- Selectedtests = DEFAULT_TCID;
-#else
- Selectedtests = NULL;
-#endif
- }
-
- /*
- * Get test case specification information and assign TST_TOTAL
- */
- if ((tcs_ptr=get_tcs_info(Selectedtests)) == NULL) {
- TST_TOTAL=1;
- tst_brkm(TBROK, cleanup,
- "Unknown symbolic link test case specification executed");
- }
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
-
- setup();
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Execute tcs testing function and all defined test cases
- */
- do_syscalltests(tcs_ptr);
-
- } /* End for TEST_LOOPING */
-
- /*
- * End appropriately
- */
- cleanup();
-
- return 0;
-}
-
-/***********************************************************************
- * This function maps the name of the process to a test case specification
- * defined in the all_tcses array of tcses structures. Either a pointer
- * to the mapped test case specification information is returned or a
- * null pointer.
- *
- * Argument is path to program name.
- ***********************************************************************/
-struct tcses *get_tcs_info(ptr)
-char *ptr;
-{
- unsigned ctr;
- struct tcses *tcs_ptr;
-
-#if ALL
- if ( ptr == NULL ) {
-
- TST_TOTAL=0;
- for (ctr=1; ctr < sizeof(all_tcses)/sizeof(struct tcses); ctr++)
- TST_TOTAL += all_tcses[ctr].test_cases;
- return all_tcses;
- }
-#endif
-
-
- for(ctr=0; ctr < (sizeof(all_tcses)/sizeof(struct tcses)); ctr++) {
- if ( strcmp(ptr, all_tcses[ctr].tcid) == 0 ||
- strcmp(ptr, all_tcses[ctr].syscall) == 0 ) {
- tcs_ptr = &all_tcses[ctr];
- TCID = all_tcses[ctr].tcid;
- TST_TOTAL=tcs_ptr->test_cases;
- return(tcs_ptr);
- }
-
- }
- return(NULL);
-}
-
-/***********************************************************************
- * Determines if what path points at is a symbolic link file
- *
- * Argument is path to symbolic link file.
- *
- * Return status is one if a symbolic link file. Zero if not a symbolic
- * link file and a minus one if the path doesn't point at a file.
- ***********************************************************************/
-int
-see_if_a_symlink(path)
-char *path;
-{
- if (lstat(path, &asymlink) < 0)
- return(-1);
-
- if ((asymlink.st_mode & S_IFMT) == S_IFLNK)
- return(1);
- else
- return(0);
-}
-
-/***********************************************************************
- * This function performs without any hesitation, file(s) deletions
- ***********************************************************************/
-void
-delete_files(path1, path2)
-char *path1, *path2;
-{
- unlink(path1);
- unlink(path2);
-}
-
-/***********************************************************************
- *
- * This routine creates a symbolic link file.
- *
- * Argument one is symbolic link pathname to point at.
- * Argument two is name of symbolic link file.
- *
- ***********************************************************************/
-int
-creat_symlink(path1, path2)
-char *path1, *path2;
-{
- TEST( symlink(path1, path2) );
- errno=TEST_ERRNO;
- if (TEST_RETURN == -1) {
- TEST_RESULT=TBROK;
- sprintf(test_msg,
- "symlink(2) Failure when creating setup %s object file: errno:%d %s",
- path1, errno, strerror(errno));
- return(0);
- }
- else {
- sprintf(Buf, "symlink(%s, %s) was succesful.\n", path1, path2);
- strcat(Buffer, Buf);
-#if DEBUG
- tst_resm(TPASS, "symlink(%s, %s) was succesful.", path1, path2);
-#endif
- }
- return(1);
-}
-
-/***********************************************************************
- *
- * This routine creates a regular file.
- *
- * Argument one is a pathname
- *
- ***********************************************************************/
-int
-creat_object(path1)
-char *path1;
-{
- int fd;
- if ((fd=creat(path1, MODE)) == -1) {
- TEST_RESULT=TBROK;
- sprintf(test_msg,
- "creat(2) Failure when creating setup %s object file: errno:%d %s",
- path1, errno, strerror(errno));
- return(0);
- }
- else {
- sprintf(Buf, "creat(%s, %#o) was succesful.\n", path1, MODE);
- strcat(Buffer, Buf);
-#if DEBUG
- tst_resm(TPASS, "creat(%s, %#o) was succesful.", path1, MODE);
-#endif
- }
- if (close(fd) == -1) {
- TEST_RESULT=TBROK;
- sprintf(test_msg,
- "close(2) Failure when closing setup %s object file: errno:%d %s",
- path1, errno, strerror(errno));
- return(0);
- }
- return(1);
-}
-
-/***********************************************************************
- *
- * This routine creates a symbolic link file and a regular file.
- *
- * Argument one is a pathname of object file
- * Argument two is symbolic link file name
- * Argument three is regular file name
- *
- ***********************************************************************/
-int
-creat_both(path1, path2, path3)
-char *path1, *path2, *path3;
-{
- if (creat_symlink(path1, path2) == -1)
- return(0);
- else if (creat_object(path3) == -1)
- return(0);
- return(1);
-}
-
-/***********************************************************************
- *
- * This routine checks if symbolic link file is a symbolic link file.
- *
- * Argument one is a pathname of object file
- * Argument two is symbolic link file name
- * Argument three is regular file name
- *
- ***********************************************************************/
-int
-ck_symlink(path1, path2, path3)
-char *path1, *path2, *path3;
-{
- int ret;
-
- if ((ret=see_if_a_symlink(path2)) == -1) {
- TEST_RESULT=TBROK;
- sprintf(test_msg,
- "lstat(2) Failure when accessing %s symbolic link file which should contain %s path to %s file ",
- path2, path1, path3);
- return(0);
- }
- else if (ret == 0) {
- TEST_RESULT=TBROK;
- sprintf(test_msg,
- "%s is not a symbolic link file which contains %s path to %s file",
- path2, path1, path3);
- return(0);
- }
- return(1);
-}
-
-/***********************************************************************
- *
- * This routine checks if symbolic link file points at object file.
- *
- * Argument one is a pathname of object file
- * Argument two is symbolic link file name
- * Argument three is regular file name
- *
- ***********************************************************************/
-int
-ck_both(path1, path2, path3)
-char *path1, *path2, *path3;
-{
- if (ck_symlink(path1, path2, path3) == 0)
- return(0);
- else if ((stat(path3, &statter) == -1) && (errno == ENOENT)) {
- TEST_RESULT=TBROK;
- sprintf(test_msg, "stat(2) Failure when accessing %s object file ", path3);
- return(0);
- }
- else if ((stat(path2, &asymlink) == -1) && (errno == ENOENT)) {
- TEST_RESULT=TBROK;
- sprintf(test_msg, "stat(2) Failure when accessing %s symbolic link file ",
- path2);
- return(0);
- }
- else if (statter.st_ino != asymlink.st_ino) {
- TEST_RESULT=TBROK;
- sprintf(test_msg,
- "stat(2) Failure when accessing %s object file through %s symbolic link file ",
- path3, path2);
- return(0);
- }
- return(1);
-
-}
-
-/***********************************************************************
- * This routine populates full_path with a pathname whose length exceeds
- * the PATH_MAX define value in param.h
- *
- * Argument one is a pathname of object file
- * Argument two is symbolic link file name
- * Argument three is regular file name
- ***********************************************************************/
-int
-creat_path_max(path1, path2, path3)
-char *path1, *path2, *path3;
-{
- int ctr, to_go, size, whole_chunks;
- char buf [PATH_MAX];
- char *cwd;
-
- if ((cwd = getcwd(buf, sizeof (buf))) == NULL)
- {
- TEST_RESULT=TBROK;
- sprintf(test_msg,
- "getcwd(3) Failure in setup of %s %s %s test case object elements",
- path1, path2, path3);
- return(0);
- }
- size = strlen(cwd);
-
- to_go = PATH_MAX - size;
- size = strlen(path1);
- whole_chunks = to_go / size;
- strcpy(full_path, cwd);
- for (ctr=0; ctr < whole_chunks; ctr++) {
- strcat(full_path, path1);
- }
- size= strlen(full_path);
- to_go = PATH_MAX - size;
- strcat(full_path, "/");
- for (ctr=0; ctr < to_go; ctr++)
- strcat(full_path, "Z");
-
- return(1);
-}
-
-/***********************************************************************
- * This routine checks that full_path's length exceeds the PATH_MAX
- * define value in param.h
- *
- * Argument one is a pathname of object file
- * Argument two is symbolic link file name
- * Argument three is regular file name
- ***********************************************************************/
-int
-ck_path_max(path1, path2, path3)
-char *path1, *path2, *path3;
-{
- if (strlen(full_path) == (PATH_MAX+1))
- return(1);
- else
- {
- TEST_RESULT=TBROK;
- sprintf(test_msg, "%s %d %s %s %s %s",
- "full_path character array length was not", (PATH_MAX+1),
- "characters long for test case object elements",
- path1, path2, path3);
- return(0);
- }
-}
-
-/***********************************************************************
- * This routine checks if the stat(2) and lstat(2) calls return the same
- * information when the path is not a symbolic link file
- *
- * Argument one is a pathname of object file
- * Argument two is symbolic link file name
- * Argument three is regular file name
- *
- ***********************************************************************/
-int
-ck_object(path1, path2, path3)
-char *path1, *path2, *path3;
-{
- int ret;
-
- if ((ret=see_if_a_symlink(path1)) < 0) {
- TEST_RESULT=TFAIL;
- sprintf(test_msg,
- "lstat(2) failed to return inode information for a regular object file");
- return(0);
- }
- else if (ret == 1) {
- TEST_RESULT=TFAIL;
- sprintf(test_msg,
- "lstat(2) detected a regular object file as a symbolic link file");
- return(0);
- }
- else if (stat(path1, &statter) == -1) {
- TEST_RESULT=TBROK;
- sprintf(test_msg,
- "stat(2) failed to return inode information for a regular object file");
- return(0);
- }
- else if (bcmp((char *)&statter, (char *)&asymlink, sizeof(statter)) != 0) {
- TEST_RESULT=TFAIL;
- sprintf(test_msg,
- "lstat(2) and stat(2) do not return same inode information for an object file");
- return(0);
-
- }
- return(1);
-}
-
-/***********************************************************************
- * Main test case processing function
- *
- * Argument is a ptr into the all_tcses array of structures of type tcses
- ***********************************************************************/
-int
-do_syscalltests(tcs)
-struct tcses *tcs;
-{
- int ctr, ret;
- struct all_test_cases *tc_ptr;
-
- /*
- * loop through desired number of test cases
- */
- for (ctr=0, tc_ptr=tcs->tc_ptr; ctr < TST_TOTAL; ctr++, tc_ptr++) {
-
- if (tc_ptr->test_fail < 0) continue;
-
- Buffer[0]='\0';
-
- /*
- * If running all test cases for all tcid, set the TCID if needed.
- */
- if ( Selectedtests == NULL ) {
- if ( !TCID || strcmp(TCID, tc_ptr->tcid) != 0 ) {
- TCID = tc_ptr->tcid;
- Tst_count=0;
- }
- }
- /*
- * Insure that we are executing the correct tcs test case
- */
- if (strcmp(TCID, tc_ptr->tcid) != 0) {
- tst_resm(TBROK, "%s TCID attempted to execute %s %d %d test case",
- TCID, tc_ptr->tcid, tc_ptr->test_fail, tc_ptr->errno_val);
- continue;
- }
- TEST_RESULT=TPASS;
- delete_files(S_FILE, O_FILE);
- /*
- * Perform test case setup
- */
- ret = (tc_ptr->test_setup)(tc_ptr->fn_arg[0], tc_ptr->fn_arg[1],
- tc_ptr->fn_arg[2], tc_ptr->errno_val);
-
- /* If an expected error, try it out */
-
- if (tc_ptr->test_fail) {
- /*
- * Try to perform test verification function
- */
- if (! (tc_ptr->ck_test)(tc_ptr->fn_arg[0], tc_ptr->fn_arg[1],
- tc_ptr->fn_arg[2], tc_ptr->errno_val))
- tst_resm(TEST_RESULT, test_msg);
- else if (tc_ptr->errno_val == EEXIST)
- do_EEXIST(tc_ptr);
- else if (tc_ptr->errno_val == ENOENT)
- do_ENOENT(tc_ptr);
- else if (tc_ptr->errno_val == ELOOP)
- do_ELOOP(tc_ptr);
- else if (tc_ptr->errno_val == ENOTDIR)
- do_ENOTDIR(tc_ptr);
- else if (tc_ptr->errno_val == EXDEV)
- do_EXDEV(tc_ptr);
- else if (tc_ptr->errno_val == ENAMETOOLONG)
- do_ENAMETOOLONG(tc_ptr);
- else if (tc_ptr->errno_val == EINVAL)
- do_EINVAL(tc_ptr);
- else
- tst_resm(TBROK, "Test Case Declaration Error");
- }
- else if (ret == 1) { /* No setup function error */
-
- if (tc_ptr->errno_val != 0)
- tst_resm(TBROK, "Test Case Declaration Error");
- else {
- /*
- * Perform test verification function
- */
- ret=(tc_ptr->ck_test)(tc_ptr->fn_arg[0], tc_ptr->fn_arg[1],
- tc_ptr->fn_arg[2], tc_ptr->errno_val);
-
- /* Perform requested symbolic link system call test */
-
- if ((cktcsid(tc_ptr->tcid, SYMLINK)) ||
- (cktcsid(tc_ptr->tcid, LSTAT))) {
- if (ret == 1)
- tst_resm(TEST_RESULT, msgs[tc_ptr->pass_msg]);
- else
- tst_resm(TEST_RESULT, test_msg);
- }
- else if (ret == 0)
- tst_resm(TEST_RESULT, test_msg);
- else if (cktcsid(tc_ptr->tcid, READLINK))
- do_readlink(tc_ptr);
- else if (cktcsid(tc_ptr->tcid, STAT))
- do_stat(tc_ptr);
- else if (cktcsid(tc_ptr->tcid, CHDIR))
- do_chdir(tc_ptr);
- else if (cktcsid(tc_ptr->tcid, LINK))
- do_link(tc_ptr);
- else if (cktcsid(tc_ptr->tcid, UNLINK))
- do_unlink(tc_ptr);
- else if (cktcsid(tc_ptr->tcid, CHMOD))
- do_chmod(tc_ptr);
- else if (cktcsid(tc_ptr->tcid, UTIME))
- do_utime(tc_ptr);
- else if (cktcsid(tc_ptr->tcid, RENAME))
- do_rename(tc_ptr);
- else if (cktcsid(tc_ptr->tcid, OPEN))
- do_open(tc_ptr);
- else
- tst_resm(TBROK, "Unknown test case processing actions declared");
- }
- }
- else
- tst_resm(TBROK, "Test Case Declaration Error");
- }
- return(0);
-}
-
-/***********************************************************************
- * This routine checks for the return of EEXIST errno from requested
- * system call
- *
- * Argument is pointer to test_objects array of structures of type
- * all_test_cases
- ***********************************************************************/
-void
-do_EEXIST(tc_ptr)
-struct all_test_cases *tc_ptr;
-{
- if (cktcsid(tc_ptr->tcid, SYMLINK)) {
-
- TEST( symlink(tc_ptr->fn_arg[0], tc_ptr->fn_arg[1]) );
- errno=TEST_ERRNO;
- if ((TEST_RETURN == -1) && (errno == EEXIST))
- if ( STD_FUNCTIONAL_TEST )
- tst_resm(TPASS, msgs[tc_ptr->pass_msg]);
- else
- Tst_count++;
- else
- tst_resm(TFAIL, "%s %s",
- "Expected EEXIST error when creating a symbolic link file",
- "which already existed");
- }
- else if (cktcsid(tc_ptr->tcid, MKDIR)) {
-
- TEST ( mkdir(tc_ptr->fn_arg[1],MODE) );
- errno=TEST_ERRNO;
- if ((TEST_RETURN == -1) && (errno == EEXIST))
- if ( TEST_RESULT != TPASS || STD_FUNCTIONAL_TEST )
- tst_resm(TEST_RESULT, msgs[tc_ptr->pass_msg]);
- else
- Tst_count++;
- else {
-
- tst_resm(TFAIL, "%s %s",
- "Expected EEXIST error when creating a directory by a symbolic",
- "link file which pointed at no object file");
- rmdir(tc_ptr->fn_arg[1]);
- }
- }
- else if (cktcsid(tc_ptr->tcid, OPEN)) {
-
- TEST( open(tc_ptr->fn_arg[1], (O_EXCL | O_CREAT)) )
- errno=TEST_ERRNO;
- if ((TEST_RETURN == -1) && (errno == EEXIST))
- if ( TEST_RESULT != TPASS || STD_FUNCTIONAL_TEST )
- tst_resm(TEST_RESULT, msgs[tc_ptr->pass_msg]);
- else
- Tst_count++;
- else
- tst_resm(TFAIL, "%s %s errno:%d %s",
- "Expected EEXIST error for exclusively opening an object file",
- "through a symbolic link file was not received:",
- errno, strerror(errno));
- close (TEST_RETURN);
- }
- else
- tst_resm(TBROK, "Unknown test case processing actions declared");
-}
-
-/***********************************************************************
- * This routine checks for the return of ENOENT errno from requested
- * system call
- *
- * Argument is pointer to test_objects array of structures of type
- * all_test_cases
- ***********************************************************************/
-void
-do_ENOENT(tc_ptr)
-struct all_test_cases *tc_ptr;
-{
- if (cktcsid(tc_ptr->tcid, STAT)) {
-
- if ((stat(tc_ptr->fn_arg[1], &asymlink) == -1) && (errno == ENOENT))
- if ( TEST_RESULT != TPASS || STD_FUNCTIONAL_TEST )
- tst_resm(TEST_RESULT, msgs[tc_ptr->pass_msg]);
- else
- Tst_count++;
- else
- tst_resm(TFAIL, "%s %s errno:%d %s",
- "Expected ENOENT error for stating a non-existent directory",
- "through a symbolic link file was not received:",
- errno, strerror(errno));
- }
- else if (cktcsid(tc_ptr->tcid, CHDIR)) {
- if ((chdir(tc_ptr->fn_arg[1]) == -1) && (errno == ENOENT))
- if ( TEST_RESULT != TPASS || STD_FUNCTIONAL_TEST )
- tst_resm(TEST_RESULT, msgs[tc_ptr->pass_msg]);
- else
- Tst_count++;
- else {
- tst_resm(TFAIL, "%s %s errno:%d %s",
- "Expected ENOENT error for changing to a non-existent",
- "directory through a symbolic link file was not received:",
- errno, strerror(errno));
- chdir(TESTDIR);
- }
- }
- else if (cktcsid(tc_ptr->tcid, LINK)) {
-
- if ((link(tc_ptr->fn_arg[1], "nick") == -1) && (errno == ENOENT))
- if ( TEST_RESULT != TPASS || STD_FUNCTIONAL_TEST )
- tst_resm(TEST_RESULT, msgs[tc_ptr->pass_msg]);
- else
- Tst_count++;
- else
- {
- tst_resm(TFAIL, "%s %s errno:%d %s",
- "Expected ENOENT error condition when link(2) a symbolic",
- "link which pointed at no object:", errno, strerror(errno));
- delete_files("nick", NULL);
- }
- }
- else if (cktcsid(tc_ptr->tcid, CHMOD)) {
-
- if ((chmod(tc_ptr->fn_arg[1], MODE) == -1) && (errno == ENOENT))
- if ( TEST_RESULT != TPASS || STD_FUNCTIONAL_TEST )
- tst_resm(TEST_RESULT, msgs[tc_ptr->pass_msg]);
- else
- Tst_count++;
- else
- tst_resm(TFAIL, "%s %s errno:%d %s",
- "Expected ENOENT error condition when chmod(2) a symbolic",
- "link which pointed at no object,", errno, strerror(errno));
- }
- else if (cktcsid(tc_ptr->tcid, UTIME)) {
-
- if ((utime(tc_ptr->fn_arg[1], NULL) == -1) && (errno == ENOENT))
- if ( TEST_RESULT != TPASS || STD_FUNCTIONAL_TEST )
- tst_resm(TEST_RESULT, msgs[tc_ptr->pass_msg]);
- else
- Tst_count++;
- else
- tst_resm(TFAIL, "%s %s errno:%d %s",
- "Expected ENOENT error condition when utime(2) a symbolic",
- "link which pointed at no object:", errno, strerror(errno));
- }
- else if (cktcsid(tc_ptr->tcid, OPEN)) {
-
- if ((open(tc_ptr->fn_arg[1], O_RDWR) == -1) && (errno == ENOENT))
- if ( TEST_RESULT != TPASS || STD_FUNCTIONAL_TEST )
- tst_resm(TEST_RESULT, msgs[tc_ptr->pass_msg]);
- else
- Tst_count++;
- else
- tst_resm(TFAIL, "%s %s errno:%d %s",
- "Expected ENOENT error for opening a non-existent object",
- " file through a symbolic link file was not received,",
- errno, strerror(errno));
- close (TEST_RETURN);
- }
- else
- tst_resm(TBROK, "Unknown test case processing actions declared");
-}
-
-/***********************************************************************
- * This routine checks for the return of ELOOP errno from requested
- * system call
- *
- * Argument is pointer to test_objects array of structures of type
- * all_test_cases
- ***********************************************************************/
-void
-do_ELOOP(tc_ptr)
-struct all_test_cases *tc_ptr;
-{
- if (cktcsid(tc_ptr->tcid, STAT)) {
-
- TEST( stat(tc_ptr->fn_arg[1], &asymlink) );
- errno=TEST_ERRNO;
- if ((TEST_RETURN == -1) && (errno == ELOOP))
- if ( TEST_RESULT != TPASS || STD_FUNCTIONAL_TEST )
- tst_resm(TEST_RESULT, msgs[tc_ptr->pass_msg]);
- else
- Tst_count++;
- else
- if ( TEST_RESULT != TPASS || STD_FUNCTIONAL_TEST )
- tst_resm(TEST_RESULT, "%s errno:%d %s",
- "Expected ELOOP errno from stat(2) (nested symb link),",
- errno, strerror(errno));
- else
- Tst_count++;
- }
- else if (cktcsid(tc_ptr->tcid, CHDIR)) {
-
- TEST( chdir(tc_ptr->fn_arg[1]) );
- errno=TEST_ERRNO;
- if ((TEST_RETURN == -1) && (errno == ELOOP))
- if ( TEST_RESULT != TPASS || STD_FUNCTIONAL_TEST )
- tst_resm(TEST_RESULT, msgs[tc_ptr->pass_msg]);
- else
- Tst_count++;
- else {
-
- tst_resm(TFAIL, "%s errno:%d %s",
- "Expected ELOOP error condition when chdir(2) a nested symbolic link:",
- errno, strerror(errno));
- chdir(TESTDIR);
- }
- }
- else if (cktcsid(tc_ptr->tcid, LINK)) {
-
- TEST ( link(tc_ptr->fn_arg[1], O_FILE) );
- errno=TEST_ERRNO;
- if ((TEST_RETURN == -1) && (errno == ELOOP))
- if ( TEST_RESULT != TPASS || STD_FUNCTIONAL_TEST )
- tst_resm(TEST_RESULT, msgs[tc_ptr->pass_msg]);
- else
- Tst_count++;
- else
- tst_resm(TFAIL, "%s errno:%d %s",
- "Expected ELOOP error condition when link(2) a nested symbolic link:",
- errno, strerror(errno));
- }
- else if (cktcsid(tc_ptr->tcid, CHMOD)) {
-
- TEST ( chmod(tc_ptr->fn_arg[1], MODE) );
- errno=TEST_ERRNO;
- if ((TEST_RETURN == -1) && (errno == ELOOP))
- if ( TEST_RESULT != TPASS || STD_FUNCTIONAL_TEST )
- tst_resm(TEST_RESULT, msgs[tc_ptr->pass_msg]);
- else
- Tst_count++;
- else
- tst_resm(TFAIL, "%s errno:%d %s",
- "Expected ELOOP error condition when chmod(2) a nested symbolic link:",
- errno, strerror(errno));
- return;
- }
- else if (cktcsid(tc_ptr->tcid, UTIME)) {
-
- TEST( utime(tc_ptr->fn_arg[1], NULL) );
- errno=TEST_ERRNO;
-
- if ((TEST_RETURN == -1) && (errno == ELOOP))
- if ( TEST_RESULT != TPASS || STD_FUNCTIONAL_TEST )
- tst_resm(TEST_RESULT, msgs[tc_ptr->pass_msg]);
- else
- Tst_count++;
- else
- tst_resm(TFAIL, "%s errno:%d %s",
- "Expected ELOOP error condition when utime(2) a nested symbolic link:",
- errno, strerror(errno));
- }
- else if (cktcsid(tc_ptr->tcid, OPEN)) {
-
- int fd;
- TEST( open(tc_ptr->fn_arg[1], O_CREAT) );
- fd=TEST_RETURN;
- errno=TEST_ERRNO;
- if ((fd == -1) && (errno == ELOOP))
- if ( TEST_RESULT != TPASS || STD_FUNCTIONAL_TEST )
- tst_resm(TEST_RESULT, msgs[tc_ptr->pass_msg]);
- else
- Tst_count++;
- else
- tst_resm(TFAIL, "%s errno:%d %s",
- "Expected ELOOP error condition when open(2) a nested symbolic link:",
- errno, strerror(errno));
- close (fd);
- }
- else
- tst_resm(TBROK, "Unknown test case processing actions declared");
-}
-
-/***********************************************************************
- * This routine checks for the return of ENOTDIR errno from requested
- * system call
- *
- * Argument is pointer to test_objects array of structures of type
- * all_test_cases
- ***********************************************************************/
-void
-do_ENOTDIR(tc_ptr)
-struct all_test_cases *tc_ptr;
-{
- if (cktcsid(tc_ptr->tcid, RMDIR)) {
-
- TEST( mkdir(tc_ptr->fn_arg[0], MODE) );
- errno=TEST_ERRNO;
- if (TEST_RETURN == -1)
- tst_resm(TBROK, "mkdir(2) Failure when creating %s",
- tc_ptr->fn_arg[0]);
- else if ((rmdir(tc_ptr->fn_arg[1]) == -1) && (errno == ENOTDIR)) {
-
- if ( TEST_RESULT != TPASS || STD_FUNCTIONAL_TEST )
- tst_resm(TEST_RESULT, msgs[tc_ptr->pass_msg]);
- else
- Tst_count++;
- rmdir(tc_ptr->fn_arg[0]);
- }
- else
- tst_resm(TFAIL, "%s %s errno:%d %s",
- "Expected ENOTDIR error for removing a non-existent",
- "directory through a symbolic link file was not received,",
- errno, strerror(errno));
- }
- else
- tst_resm(TBROK, "Unknown test case processing actions declared");
-}
-
-/***********************************************************************
- * This routine checks for the return of EXDEV errno from requested
- * system call
- *
- * Argument is pointer to test_objects array of structures of type
- * all_test_cases
- ***********************************************************************/
-void
-do_EXDEV(tc_ptr)
-struct all_test_cases *tc_ptr;
-{
- if (cktcsid(tc_ptr->tcid, RENAME)) {
-
- TEST( rename(tc_ptr->fn_arg[1], Y_A_S_FILE) );
- errno=TEST_ERRNO;
- if ((TEST_RETURN == -1) && (errno == EXDEV)) {
- if (see_if_a_symlink(Y_A_S_FILE) == -1)
- if ( TEST_RESULT != TPASS || STD_FUNCTIONAL_TEST )
- tst_resm(TEST_RESULT, msgs[tc_ptr->pass_msg]);
- else
- Tst_count++;
- else
- tst_resm(TFAIL, "%s %s %s file outside of current file system",
- "rename(3) returned -1 when trying to move symbolic link file",
- "outside of current file system, but created", Y_A_S_FILE);
- }
- else {
- tst_resm(TFAIL, "%s %s errno:%d %s",
- "Expected EXDEV error for renaming an existing symbolic",
- "link file to a location outside of existing file system,",
- errno, strerror(errno));
- delete_files("/NiCkEr", NULL);
- }
- }
- else
- tst_resm(TBROK, "Unknown test case processing actions declared");
-}
-
-/***********************************************************************
- * This routine checks for the return of ENAMETOOLONG errno from requested
- * system call
- *
- * Argument is pointer to test_objects array of structures of type
- * all_test_cases
- ***********************************************************************/
-void
-do_ENAMETOOLONG(tc_ptr)
-struct all_test_cases *tc_ptr;
-{
- int ret;
-
- if (cktcsid(tc_ptr->tcid, SYMLINK)) {
-
- TEST( symlink(tc_ptr->fn_arg[0], full_path) );
- errno=TEST_ERRNO;
- if ((TEST_RETURN == -1) && (errno == ENAMETOOLONG))
- if (see_if_a_symlink(full_path) == -1)
- if ( TEST_RESULT != TPASS || STD_FUNCTIONAL_TEST )
- tst_resm(TEST_RESULT, msgs[tc_ptr->pass_msg]);
- else
- Tst_count++;
- else
- tst_resm(TFAIL, "%s %s %d %s",
- "symlink(2) returned -1 when trying to create a symbolic",
- "link file whose name exceeded", (PATH_MAX+1),
- "characters, but it created the symbolic link file");
- else
- tst_resm(TFAIL,
- "Expected ENAMETOOLONG error when creating %s symbolic link file with a path exceeding %d characters: errno:%d %s",
- tc_ptr->fn_arg[1], (PATH_MAX+1), errno, strerror(errno));
- }
- else if (cktcsid(tc_ptr->tcid, READLINK)) {
-
- char scratch[PATH_MAX+1];
-
- ret=readlink(full_path, scratch, strlen(full_path));
- if (( ret == -1) && (errno == ENAMETOOLONG))
- if ( TEST_RESULT != TPASS || STD_FUNCTIONAL_TEST )
- tst_resm(TEST_RESULT, msgs[tc_ptr->pass_msg]);
- else
- Tst_count++;
- else
- tst_resm(TFAIL,
- "Expected ENAMETOOLONG error when reading %s symbolic link file with a path exceeding %d characters: errno:%d %s",
- tc_ptr->fn_arg[1], (PATH_MAX+1), errno, strerror(errno));
- }
- else
- tst_resm(TBROK, "Unknown test case processing actions declared");
-}
-
-/***********************************************************************
- * This routine checks for the return of EINVAL errno from requested
- * system call
- *
- * Argument is pointer to test_objects array of structures of type
- * all_test_cases
- ***********************************************************************/
-void
-do_EINVAL(tc_ptr)
-struct all_test_cases *tc_ptr;
-{
- if (cktcsid(tc_ptr->tcid, READLINK)) {
- TEST( readlink(tc_ptr->fn_arg[0], test_msg, BUFMAX) );
- errno=TEST_ERRNO;
- if (TEST_RETURN == -1) {
- if (errno == EINVAL) {
- if ( TEST_RESULT != TPASS || STD_FUNCTIONAL_TEST )
- tst_resm(TEST_RESULT, msgs[tc_ptr->pass_msg]);
- else
- Tst_count++;
- } else
- tst_resm(TFAIL, "readlink(2) ret:-1, errno:%d, : Exp errno:%d",
- errno, EINVAL);
- }
- else {
- tst_resm(TFAIL, "readlink(2) did not returned -1 when reading %s",
- "a file which is not a symbolic link file");
- }
- }
- else
- tst_resm(TBROK, "Unknown test case processing actions declared");
-}
-
-/***********************************************************************
- * This routine checks out the readlink(2) system call for a successful
- * invocation
- *
- * Argument is pointer to test_objects array of structures of type
- * all_test_cases
- ***********************************************************************/
-void
-do_readlink(tc_ptr)
-struct all_test_cases *tc_ptr;
-{
- char scratch[PATH_MAX];
- int ret;
-
- ret=readlink(tc_ptr->fn_arg[1], scratch, strlen(tc_ptr->fn_arg[0]));
-
- /*** the TEST macro cannot be used here for some reason ****/
-
- if (ret == -1) {
- tst_resm(TFAIL,
- "readlink(2) failure on %s symbolic link file, errno=%d",
- tc_ptr->fn_arg[1], errno);
-
- }
- else if (strncmp(tc_ptr->fn_arg[0], scratch,
- strlen(tc_ptr->fn_arg[0])) != 0) {
-
- /* Must null terminate scratch because readlink(2) doesn't */
-
- scratch[strlen(tc_ptr->fn_arg[0])] = '\0';
-
- tst_resm(TFAIL,
- "readlink(2) Error : Expected %s symbolic link file contents but %s actual contents were returned",
- tc_ptr->fn_arg[0], scratch);
- }
- else if ( TEST_RESULT != TPASS || STD_FUNCTIONAL_TEST )
- tst_resm(TEST_RESULT, msgs[tc_ptr->pass_msg]);
- else
- Tst_count++;
-}
-
-/***********************************************************************
- * This routine checks out the stat(2) system call for a successful
- * invocation
- *
- * Argument is pointer to test_objects array of structures of type
- * all_test_cases
- ***********************************************************************/
-void
-do_stat(tc_ptr)
-struct all_test_cases *tc_ptr;
-{
- if (statter.st_dev != asymlink.st_dev)
- tst_resm(TFAIL,
- "stat of symbolic link reference to object device info %ld != stat of object file device info %ld",
- statter.st_dev, asymlink.st_dev);
-
- else if (statter.st_mode != asymlink.st_mode)
- tst_resm(TFAIL,
- "stat of symbolic link reference to object file permissions %ld != stat of object file permissions %ld",
- statter.st_mode, asymlink.st_mode);
-
- else if (statter.st_nlink != asymlink.st_nlink)
- tst_resm(TFAIL,
- "stat of symbolic link reference to object file link count %ld != stat of object file link count %ld",
- statter.st_nlink, asymlink.st_nlink);
-
- else if (statter.st_uid != asymlink.st_uid)
- tst_resm(TFAIL,
- "stat of symbolic link reference to object file uid %ld != stat of object file uid %ld",
- statter.st_uid, asymlink.st_uid);
-
- else if (statter.st_gid != asymlink.st_gid)
- tst_resm(TFAIL,
- "stat of symbolic link reference to object file gid %ld != stat of object file gid %ld",
- statter.st_gid, asymlink.st_gid);
-
- else if (statter.st_size != asymlink.st_size)
- tst_resm(TFAIL,
- "stat of symbolic link reference to object file size %ld != stat of object file size %ld",
- statter.st_size, asymlink.st_size);
-
- else if (statter.st_atime != asymlink.st_atime)
- tst_resm(TFAIL,
- "stat of symbolic link reference to object access time %ld != stat of object file access time %ld",
- statter.st_atime, asymlink.st_atime);
-
- else if (statter.st_mtime != asymlink.st_mtime)
- tst_resm(TFAIL,
- "stat of symbolic link reference to object modify time %ld != stat of object file modify time %ld",
- statter.st_atime, asymlink.st_atime);
-
- else if (statter.st_ctime != asymlink.st_ctime)
- tst_resm(TFAIL,
- "stat of symbolic link reference to object change time %ld != stat of object file change time %ld",
- statter.st_atime, asymlink.st_atime);
- else if ( TEST_RESULT != TPASS || STD_FUNCTIONAL_TEST )
- tst_resm(TEST_RESULT, msgs[tc_ptr->pass_msg]);
- else
- Tst_count++;
-}
-
-/***********************************************************************
- * This routine checks out the chdir(2) system call for a successful
- * invocation
- *
- * Argument is pointer to test_objects array of structures of type
- * all_test_cases
- ***********************************************************************/
-void
-do_chdir(tc_ptr)
-struct all_test_cases *tc_ptr;
-{
- if (mkdir(tc_ptr->fn_arg[2],MODE) == -1)
- tst_resm(TFAIL, "Could not create a setup directory file");
- else {
-
- sprintf(Buf, "mkdir(%s, %#o) was successful\n", tc_ptr->fn_arg[2],MODE);
- strcat(Buffer, Buf);
-
- if (chdir(tc_ptr->fn_arg[1]) == -1)
- tst_resm(TFAIL, "%sCould not change a directory file through a %s",
- Buffer, "symbolic link which which pointed at object");
- else {
-
- char buf [PATH_MAX];
- char *cwd;
- char expected_location[PATH_MAX];
- /*
- * Build expected current directory position
- */
- strcpy(expected_location, TESTDIR);
- strcat(expected_location, "/");
- strcat(expected_location, tc_ptr->fn_arg[2]);
-
- if ((cwd = getcwd(buf, sizeof (buf))) == NULL)
- tst_resm(TFAIL, "getcwd(3) FAILURE");
- else if (strcmp(cwd, expected_location) == 0)
- if ( TEST_RESULT != TPASS || STD_FUNCTIONAL_TEST )
- tst_resm(TEST_RESULT, msgs[tc_ptr->pass_msg]);
- else
- Tst_count++;
- else {
- tst_resm(TFAIL, "%s%s %s %s not equal to expected %s", Buffer,
- "chdir(2) returned successfully, but getcwd(3) indicated",
- "new current working directory location", cwd, expected_location);
- }
- chdir(TESTDIR);
- }
- rmdir(tc_ptr->fn_arg[2]);
- }
-}
-
-/***********************************************************************
- * This routine checks out the link(2) system call for a successful
- * invocation
- *
- * Argument is pointer to test_objects array of structures of type
- * all_test_cases
- ***********************************************************************/
-void
-do_link(tc_ptr)
-struct all_test_cases *tc_ptr;
-{
- struct stat stbuf;
-
- if (link(tc_ptr->fn_arg[1], "nick") == -1) {
- tst_resm(TFAIL, "%slink(%s, \"nick\") failed, errno: %d\n%s %s",
- Buffer, tc_ptr->fn_arg[1], errno,
- "link of new file to object file via symbolic link file failed",
- "when expected not to");
- }
- else {
- sprintf(Buf, "link(%s, \"nick\") was successful\n", tc_ptr->fn_arg[1]);
- strcat(Buffer, Buf);
-
- if ( STD_FUNCTIONAL_TEST ) {
- /*
- * Check that links counts were properly set
- */
- if (lstat(tc_ptr->fn_arg[1], &asymlink) == -1) {
- tst_resm(TBROK, "lstat(%s) failed. errno: %d",
- tc_ptr->fn_arg[1], errno);
-
- } else if (lstat("nick", &statter) == -1) {
- tst_resm(TBROK, "lstat(nick) failed, errno:%d", errno);
- } else {
- if (statter.st_ino == asymlink.st_ino) {
- if ((statter.st_nlink ==2) && (asymlink.st_nlink == 2)) {
- if ( TEST_RESULT != TPASS || STD_FUNCTIONAL_TEST )
- tst_resm(TEST_RESULT, msgs[tc_ptr->pass_msg]);
- else
- Tst_count++;
- } else {
- lstat(tc_ptr->fn_arg[2], &stbuf);
-
- tst_resm(TFAIL,
- "%slink(%s, %s) failed to adjust link count.\n\
- count for nick is %d, count for %s is %d, count for %s is %d.",
- Buffer, tc_ptr->fn_arg[1], "nick",
- statter.st_nlink, tc_ptr->fn_arg[1], asymlink.st_nlink,
- tc_ptr->fn_arg[2], stbuf.st_nlink);
- }
- } else {
- tst_resm(TFAIL,
- "%sA lstat of %s (ino:%llu) and of\n\t\t\
-%s (ino:%llu), does not show them being the same ino.", Buffer,
- tc_ptr->fn_arg[1], asymlink.st_ino, "nick", statter.st_ino);
- }
- }
- }
- delete_files("nick", NULL);
- }
-}
-
-/***********************************************************************
- * This routine checks out the unlink(2) system call for a successful
- * invocation
- *
- * Argument is pointer to test_objects array of structures of type
- * all_test_cases
- ***********************************************************************/
-void
-do_unlink(tc_ptr)
-struct all_test_cases *tc_ptr;
-{
- if (stat(tc_ptr->fn_arg[2], &asymlink) == -1)
- tst_resm(TBROK,
- "stat(2) Failure when accessing %s object file", tc_ptr->fn_arg[2]);
- else if (unlink(tc_ptr->fn_arg[1]) == -1)
- tst_resm(TFAIL, "unlink(2) failed when removing symbolic link file");
- else {
- sprintf(Buf, "unlink(%s) was successful\n", tc_ptr->fn_arg[1]);
- strcat(Buffer, Buf);
- if (stat(tc_ptr->fn_arg[2], &statter) == -1)
- tst_resm(TFAIL,"%s %s",
- "unlink(2) failed because it not only removed symbolic link",
- "file which pointed at object file, but object file as well");
-
- else
- if ((statter.st_ino == asymlink.st_ino) &&
- (statter.st_dev == asymlink.st_dev) &&
- (statter.st_size == asymlink.st_size))
-
- if ( TEST_RESULT != TPASS || STD_FUNCTIONAL_TEST )
- tst_resm(TEST_RESULT, msgs[tc_ptr->pass_msg]);
- else
- Tst_count++;
- else
- tst_resm(TFAIL, "%s%s %s %s", Buffer,
- "unlink(2) failed because it not only removed symbolic link",
- "file which pointed at object file, but it changed object",
- "file inode information");
- }
-
-}
-
-/***********************************************************************
- * This routine checks out the chmod(2) system call for a successful
- * invocation
- *
- * Argument is pointer to test_objects array of structures of type
- * all_test_cases
- ***********************************************************************/
-void
-do_chmod(tc_ptr)
-struct all_test_cases *tc_ptr;
-{
- if (stat(tc_ptr->fn_arg[2], &asymlink) == -1)
- tst_resm(TBROK,
- "stat(2) Failure when accessing %s object file", tc_ptr->fn_arg[2]);
- else if (chmod(tc_ptr->fn_arg[1], (MODE | MASK)) == -1)
- tst_resm(TFAIL, "%s%s %s", Buffer,
- "chmod(2) failed when changing file permission",
- "through symbolic link file");
- else {
- sprintf(Buf, "chmod(%s, %#o) was successful\n", tc_ptr->fn_arg[1],
- (MODE | MASK));
- strcat(Buffer, Buf);
-
- if (stat(tc_ptr->fn_arg[2], &statter) == -1)
- tst_resm(TBROK,
- "stat(2) Failure when accessing %s object file", tc_ptr->fn_arg[2]);
- else
- if ((statter.st_mode == (MODE | MASK)) &&
- (statter.st_mode != asymlink.st_mode))
- if ( TEST_RESULT != TPASS || STD_FUNCTIONAL_TEST )
- tst_resm(TEST_RESULT, msgs[tc_ptr->pass_msg]);
- else
- Tst_count++;
- else
- tst_resm(TFAIL, "%s%s %o to %o %s", Buffer,
- "chmod(2) failed to change object file permissions from",
- asymlink.st_mode, (MODE | MASK),
- "through symbolic link file");
- }
-
-}
-
-/***********************************************************************
- * This routine checks out the utime(2) system call for a successful
- * invocation
- *
- * Argument is pointer to test_objects array of structures of type
- * all_test_cases
- ***********************************************************************/
-void
-do_utime(tc_ptr)
-struct all_test_cases *tc_ptr;
-{
- struct utimbuf utimes;
-
- if (stat(tc_ptr->fn_arg[2], &asymlink) == -1)
- tst_resm(TBROK, "stat(2) Failure when accessing %s object file",
- tc_ptr->fn_arg[2]);
- else {
- /* Now add a few values to access and modify times */
-
- utimes.actime = asymlink.st_atime + a_time_value;
- utimes.modtime = asymlink.st_mtime + a_time_value;
-
- /* Now hand off to utime(2) via symbolic link file*/
-
- if (utime(tc_ptr->fn_arg[1], &utimes) == -1)
- tst_resm(TFAIL, "%s %s",
- "utime(2) failed to process object file access and modify",
- "time updates through symbolic link");
- else {
- /* Now verify changes were made */
-
- if (stat(tc_ptr->fn_arg[2], &statter) == -1)
- tst_resm(TBROK,
- "stat(2) Failure when accessing %s object file",
- tc_ptr->fn_arg[2]);
- else {
- time_t temp, diff;
-
- temp = statter.st_atime - asymlink.st_atime;
- diff = (statter.st_mtime - asymlink.st_mtime) - temp;
-
- if (! diff)
- if ( TEST_RESULT != TPASS || STD_FUNCTIONAL_TEST )
- tst_resm(TEST_RESULT, msgs[tc_ptr->pass_msg]);
- else
- Tst_count++;
- else
- tst_resm(TFAIL, "%s %s %d greater than original times",
- "utime(2) failed to change object file access and",
- "modify times through symbolic link to a value",
- a_time_value);
- }
- }
- }
-}
-
-/***********************************************************************
- * This routine checks out the rename(2) system call for a successful
- * invocation
- *
- * Argument is pointer to test_objects array of structures of type
- * all_test_cases
- ***********************************************************************/
-void
-do_rename(tc_ptr)
-struct all_test_cases *tc_ptr;
-{
- int pts_at_object = 0;
-
-
- if (stat(tc_ptr->fn_arg[2], &statter) != -1)
- pts_at_object=1;
-
- TEST (rename(tc_ptr->fn_arg[1], A_S_FILE) );
- errno=TEST_ERRNO;
- if (TEST_RETURN == -1)
- tst_resm(TFAIL, "rename(3) failed to rename %s symbolic link file to %s",
- tc_ptr->fn_arg[2], A_S_FILE);
- else if (pts_at_object)
- if (ck_both(tc_ptr->fn_arg[0], A_S_FILE, tc_ptr->fn_arg[2]))
- if ( TEST_RESULT != TPASS || STD_FUNCTIONAL_TEST )
- tst_resm(TEST_RESULT, msgs[tc_ptr->pass_msg]);
- else
- Tst_count++;
- else
- tst_resm(TFAIL, test_msg);
- else if ( ! ck_symlink(tc_ptr->fn_arg[0], A_S_FILE, NULL))
- tst_resm(TFAIL, test_msg);
- else if (stat(tc_ptr->fn_arg[1], &asymlink) != -1)
- tst_resm(TFAIL,
- "rename(3) did not remove %s when renaming to %s",
- tc_ptr->fn_arg[1], A_S_FILE);
- else if ( TEST_RESULT != TPASS || STD_FUNCTIONAL_TEST )
- tst_resm(TEST_RESULT, msgs[tc_ptr->pass_msg]);
- else
- Tst_count++;
-}
-
-/***********************************************************************
- * This routine checks out the open(2) system call for a successful
- * invocation
- *
- * Argument is pointer to test_objects array of structures of type
- * all_test_cases
- ***********************************************************************/
-void
-do_open(tc_ptr)
-struct all_test_cases *tc_ptr;
-{
- int fd = -1;
- int ret, pts_at_object = 0;
- char scratch[PATH_MAX];
-
-
- if (stat(tc_ptr->fn_arg[2], &statter) != -1)
- pts_at_object=1;
-
- if (pts_at_object) {
- TEST( open(tc_ptr->fn_arg[1], O_RDWR) );
- errno=TEST_ERRNO;
- if ((fd=TEST_RETURN) == -1) {
- tst_resm(TFAIL,
- "open(2) Failure when opening object file through symbolic link file");
- return;
- }
- }
- else {
- TEST(open(tc_ptr->fn_arg[1], (O_CREAT | O_RDWR), MODE) );
- errno=TEST_ERRNO;
- if ((fd=TEST_RETURN) == -1) {
- tst_resm(TFAIL,
- "open(2) Failure when creating object file through symbolic link file");
- return;
- }
- }
- if ((ret=write(fd, BIG_STRING, strlen(BIG_STRING))) == -1) {
- tst_resm(TFAIL,
- "write(2) Failure to object file opened through a symbolic link file: errno:%d",
- errno);
- }
- else if (ret != strlen(BIG_STRING)) {
- tst_resm(TFAIL,
- "write(2) Failed to write %d bytes to object file opened through a symbolic link file",
- strlen(BIG_STRING));
- }
- else if (lseek(fd, 0L, 0) == -1) {
- tst_resm(TFAIL,
- "lseek(2) Failed to position to beginning of object file opened through a symbolic link file: errno = %d",
- errno);
- }
- else if ((ret=read(fd, scratch, strlen(BIG_STRING))) == -1) {
- tst_resm(TFAIL,
- "read(2) Failure of object file opened through a symbolic link file: errno = %d",
- errno);
- }
- else if (ret != strlen(BIG_STRING)) {
- tst_resm(TFAIL,
- "read(2) Failed to read %d bytes to object file opened through a symbolic link file",
- strlen(BIG_STRING));
- }
- else if (strncmp(BIG_STRING, scratch, strlen(BIG_STRING)) != 0) {
- tst_resm(TFAIL,
- "Content of write(2) and read(2) Failed to object file through symbolic link file was not as expected. Expected %s and read returned %s",
- BIG_STRING, scratch);
- }
- else {
- /*
- * Close off symbolic link file to object file access
- */
- if (close(fd) == -1) {
- tst_resm(TFAIL,
- "close(2) Failure when closing object file accessed symbolic link file");
- }
- /*
- * Now, lets open up and read object file and compare contents
- */
- else if ((fd=open(tc_ptr->fn_arg[0], O_RDONLY)) == -1) {
- tst_resm(TFAIL, "open(2) Failure when opening %s file: errno:%d %s",
- tc_ptr->fn_arg[0], errno, strerror(errno));
- }
- else if ((ret=read(fd, scratch, strlen(BIG_STRING))) == -1) {
- tst_resm(TFAIL,
- "read(2) Failure of object file opened through a symbolic link file: errno:%d", errno);
- }
- else if (ret != strlen(BIG_STRING)) {
- tst_resm(TFAIL,
- "read(2) Failed to read %d bytes to object file opened through a symbolic link file",
- strlen(BIG_STRING));
- }
- else if (strncmp(BIG_STRING, scratch, strlen(BIG_STRING)) != 0) {
- tst_resm(TFAIL,
- "Content of write(2) and read(2) Failed to object file through symbolic link file was not as expected. Expected %s and read returned %s",
- BIG_STRING, scratch);
- }
- else if (pts_at_object) {
- if ( TEST_RESULT != TPASS || STD_FUNCTIONAL_TEST )
- tst_resm(TEST_RESULT, msgs[tc_ptr->pass_msg]);
- else
- Tst_count++;
- }
- else { /* Insure newly created object file is pointed at */
- if (ck_both(tc_ptr->fn_arg[0], tc_ptr->fn_arg[1], tc_ptr->fn_arg[0]))
- if ( TEST_RESULT != TPASS || STD_FUNCTIONAL_TEST )
- tst_resm(TEST_RESULT, msgs[tc_ptr->pass_msg]);
- else
- Tst_count++;
- else
- tst_resm(TFAIL, test_msg);
- }
- close(fd);
- }
-}
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- /* create a temporary directory and go to it */
- tst_tmpdir();
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- */
- TEST_CLEANUP;
-
- /* remove temporary directory and all files in it. */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-
-} /* End cleanup() */
-
-
-/*
- *
- */
-void help()
-{
- unsigned ind;
-
- printf(" -T id Determines which tests cases to execute:\n");
-
- for (ind=0; ind<sizeof(all_tcses)/sizeof(struct tcses ); ind++) {
- printf(" %s/%s - %s\n", all_tcses[ind].tcid, all_tcses[ind].syscall,
- all_tcses[ind].desc);
- }
-}
diff --git a/winsup/testsuite/winsup.api/ltp/symlink02.c b/winsup/testsuite/winsup.api/ltp/symlink02.c
deleted file mode 100644
index 4157cea8a..000000000
--- a/winsup/testsuite/winsup.api/ltp/symlink02.c
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : symlink02
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for symlink(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) symlink(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the symlink(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * symlink(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <sys/types.h>
-#include <sys/fcntl.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-
-const char *TCID="symlink02"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0};
-
-char fname[255], symlnk[255];
-int fd;
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call symlink(2)
- */
- TEST(symlink(fname, symlnk));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "symlink(%s, %s) Failed, errno=%d : %s",
- fname, symlnk, TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "symlink(%s, %s) returned %d",
- fname, symlnk, TEST_RETURN);
- }
- if (unlink(symlnk) == -1) {
- tst_brkm(TBROK, cleanup,
- "unlink(%s) Failed, errno=%d : %s",
- symlnk, errno, strerror(errno));
- }
- }
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- sprintf(fname,"tfile_%d",getpid());
- if ((fd=open(fname,O_RDWR|O_CREAT,0700)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR|O_CREAT,0700) Failed, errno=%d : %s",
- fname, errno, strerror(errno));
- }
-
- if (close(fd) == -1 ) {
- tst_resm(TWARN, "close(%s) Failed, errno=%d : %s",
- fname, errno, strerror(errno));
- }
- sprintf(symlnk,"st_%d",getpid());
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/symlink03.c b/winsup/testsuite/winsup.api/ltp/symlink03.c
deleted file mode 100644
index 4d0542768..000000000
--- a/winsup/testsuite/winsup.api/ltp/symlink03.c
+++ /dev/null
@@ -1,404 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * Test Name : symlink03
- *
- * Test Description :
- * Verify that,
- * 1) symlink(2) returns -1 and sets errno to EACCES if search/write
- * permission is denied in the directory where the symbolic link is
- * being created.
- * 2) symlink(2) returns -1 and sets errno to EEXIST if the specified
- * symbolic link already exists.
- * 3) symlink(2) returns -1 and sets errno to EFAULT if the specified
- * file or symbolic link points to invalid address.
- * 4) symlink(2) returns -1 and sets errno to ENAMETOOLONG if the
- * pathname component of symbolic link is too long (ie, > PATH_MAX).
- * 5) symlink(2) returns -1 and sets errno to ENOTDIR if the directory
- * component in pathname of symbolic link is not a directory.
- * 6) symlink(2) returns -1 and sets errno to ENOENT if the component of
- * symbolic link points to an empty string.
- *
- * Expected Result:
- * symlink() should fail with return value -1 and set expected errno.
- *
- * Algorithm:
- * Setup:
- * Setup signal handling.
- * Create temporary directory.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * if errno set == expected errno
- * Issue sys call fails with expected return value and errno.
- * Otherwise,
- * Issue sys call fails with unexpected errno.
- * Otherwise,
- * Issue sys call returns unexpected value.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- * Delete the temporary directory(s)/file(s) created.
- *
- * Usage: <for command-line>
- * symlink03 [-c n] [-e] [-i n] [-I x] [-p x] [-t]
- * where, -c n : Run n copies concurrently.
- * -e : Turn on errno logging.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * History
- * 07/2001 John George
- * -Ported
- *
- * Restrictions:
- * This test should be executed by 'non-super-user' only.
- */
-
-#include <sys/types.h>
-#include <sys/fcntl.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include <sys/stat.h>
-
-#include "test.h"
-#include "usctest.h"
-
-#define MODE_RWX S_IRWXU | S_IRWXG | S_IRWXO
-#define FILE_MODE S_IRUSR | S_IRGRP | S_IROTH
-#define DIR_TEMP "testdir_1"
-#define TESTFILE "testfile"
-#define TEST_FILE1 "testdir_1/tfile_1"
-#define SYM_FILE1 "testdir_1/sfile_1"
-#define TEST_FILE2 "tfile_2"
-#define SYM_FILE2 "sfile_2"
-#define TEST_FILE3 "tfile_3"
-#define SYM_FILE3 "t_file/sfile_3"
-
-const char *TCID="symlink03"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-int exp_enos[]={ENOTDIR, ENOENT, ENAMETOOLONG, EFAULT, EEXIST, EACCES, 0};
-
-int no_setup();
-int setup1(); /* setup function to test symlink for EACCES */
-int setup2(); /* setup function to test symlink for EEXIST */
-int setup3(); /* setup function to test symlink for ENOTDIR */
-int longpath_setup(); /* setup function to test chmod for ENAMETOOLONG */
-
-char Longpathname[PATH_MAX+2];
-char High_address_node[64];
-
-struct test_case_t { /* test case struct. to hold ref. test cond's*/
- const char *file;
- const char *link;
- const char *desc;
- int exp_errno;
- int (*setupfunc)();
-} Test_cases[] = {
- { TEST_FILE1, SYM_FILE1, "No Search permissions to process", EACCES, setup1 },
- { TEST_FILE2, SYM_FILE2, "Specified symlink already exists", EEXIST, setup2 },
- { TESTFILE, High_address_node, "Address beyond address space", EFAULT, no_setup },
- { TESTFILE, (char *)-1, "Negative address", EFAULT, no_setup },
- { TESTFILE, Longpathname, "Symlink path too long", ENAMETOOLONG, longpath_setup },
- { TESTFILE, "", "Symlink Pathname is empty", ENOENT, no_setup },
-#ifndef __CYGWIN__
- { TEST_FILE3, SYM_FILE3, "Symlink Path contains regular file", ENOTDIR, setup3 },
-#endif
- { NULL, NULL, NULL, 0, no_setup }
-};
-
-extern void setup(); /* Setup function for the test */
-void cleanup() __attribute__((noreturn));/* Cleanup function for the test */
-char *get_high_address (void);
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- const char *test_file; /* testfile name */
- const char *sym_file; /* symbolic link file name */
- const char *test_desc; /* test specific error message */
- int ind; /* counter to test different test conditions */
-
- /* Parse standard options given to run the test. */
- msg = parse_opts(ac, av, (option_t *) NULL, NULL);
- if (msg != (char *) NULL) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- /*NOTREACHED*/
- }
-
- /*
- * Invoke setup function to call individual test setup functions
- * to simulate test conditions.
- */
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /* Check looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- /* Reset Tst_count in case we are looping. */
- Tst_count=0;
-
- for (ind = 0; Test_cases[ind].desc != NULL; ind++) {
- test_file = Test_cases[ind].file;
- sym_file = Test_cases[ind].link;
- test_desc = Test_cases[ind].desc;
-
- if (sym_file == High_address_node) {
- sym_file = (char *)get_high_address();
- }
- /*
- * Call symlink(2) to test different test conditions.
- * verify that it fails with -1 return value and sets
- * appropriate errno.
- */
- TEST(symlink(test_file, sym_file));
-
- /* Check return code of symlink(2) */
- if (TEST_RETURN == -1) {
- /*
- * Perform functional verification if
- * test executed without (-f) option.
- */
- TEST_ERROR_LOG(TEST_ERRNO);
- if (TEST_ERRNO == Test_cases[ind].exp_errno) {
- tst_resm(TPASS, "symlink() Fails, %s, "
- "errno=%d", test_desc,
- TEST_ERRNO);
- } else {
- tst_resm(TFAIL, "symlink() Fails, %s, "
- "errno=%d, expected errno=%d",
- test_desc, TEST_ERRNO,
- Test_cases[ind].exp_errno);
- }
- } else {
- tst_resm(TFAIL, "symlink() returned %d, "
- "expected -1, errno:%d", TEST_RETURN,
- Test_cases[ind].exp_errno);
- }
- } /* End of TEST CASE LOOPING. */
-
- Tst_count++; /* incr. TEST_LOOP counter */
- } /* End for TEST_LOOPING */
-
- /* Call cleanup() to undo setup done for the test. */
- cleanup();
- /*NOTREACHED*/
-
-} /* End main */
-
-/*
- * void
- * setup() - performs all ONE TIME setup for this test.
- * Create a temporary directory and change directory to it.
- * Call test specific setup functions.
- */
-void
-setup()
-{
- int ind;
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified
- * TEST_PAUSE contains the code to fork the test with the -i option.
- * You want to make sure you do this before you create your temporary
- * directory.
- */
- TEST_PAUSE;
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* call individual setup functions */
- for (ind = 0; Test_cases[ind].desc != NULL; ind++) {
- Test_cases[ind].setupfunc();
- }
-} /* End setup() */
-
-/*
- * int
- * no_setup() - Some test conditions for mknod(2) do not any setup.
- * Hence, this function just returns 0.
- * This function simply returns 0.
- */
-int
-no_setup()
-{
- return 0;
-}
-
-/*
- * int
- * setup1() - setup function for a test condition for which symlink(2)
- * returns -1 and sets errno to EACCES.
- * Create a test directory under temporary directory and create a test file
- * under this directory with mode "0666" permissions.
- * Modify the mode permissions on test directory such that process will not
- * have search permissions on test directory.
- *
- * The function returns 0.
- */
-int
-setup1()
-{
- int fd; /* file handle for testfile */
-
- if (mkdir(DIR_TEMP, MODE_RWX) < 0) {
- tst_brkm(TBROK, cleanup, "mkdir(2) of %s failed", DIR_TEMP);
- /*NOTREACHED*/
- }
-
- if ((fd = open(TEST_FILE1, O_RDWR|O_CREAT, 0666)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR|O_CREAT, 0666) failed, errno=%d : %s",
- TEST_FILE1, errno, strerror(errno));
- /*NOTREACHED*/
- }
- if (close(fd) == -1) {
- tst_brkm(TBROK, cleanup,
- "close(%s) Failed, errno=%d : %s",
- TEST_FILE1, errno, strerror(errno));
- /*NOTREACHED*/
- }
-
- /* Modify mode permissions on test directory */
- if (chmod(DIR_TEMP, FILE_MODE) < 0) {
- tst_brkm(TBROK, cleanup, "chmod(2) of %s failed", DIR_TEMP);
- /*NOTREACHED*/
- }
- return 0;
-}
-
-/*
- * int
- * setup2() - EEXIST
- */
-int
-setup2()
-{
- int fd; /* file handle for testfile */
-
- if ((fd = open(TEST_FILE2, O_RDWR|O_CREAT, 0666)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR|O_CREAT, 0666) failed, errno=%d : %s",
- TEST_FILE1, errno, strerror(errno));
- /*NOTREACHED*/
- }
- if (close(fd) == -1) {
- tst_brkm(TBROK, cleanup,
- "close(%s) Failed, errno=%d : %s",
- TEST_FILE2, errno, strerror(errno));
- /*NOTREACHED*/
- }
-
- if (symlink(TEST_FILE2, SYM_FILE2) < 0) {
- tst_brkm(TBROK, cleanup,
- "symlink() Fails to create %s in setup2, error=%d",
- SYM_FILE2, errno);
- /*NOTREACHED*/
- }
- return 0;
-}
-
-/*
- * int
- * longpath_setup() - setup to create a node with a name length exceeding
- * the MAX. length of PATH_MAX.
- * This function retruns 0.
- */
-int
-longpath_setup()
-{
- int ind; /* counter variable */
-
- for (ind = 0; ind <= (PATH_MAX + 1); ind++) {
- Longpathname[ind] = 'a';
- }
- return 0;
-}
-
-/*
- * int
- * setup3() - setup function for a test condition for which symlink(2)
- * returns -1 and sets errno to ENOTDIR.
- *
- * Create a symlink file under temporary directory so that test tries to
- * create symlink file "tfile_3" under "t_file" which happens to be
- * another symlink file.
- */
-int
-setup3()
-{
- int fd; /* file handle for testfile */
-
- /* Creat/open a testfile and close it */
- if ((fd = open("t_file", O_RDWR|O_CREAT, MODE_RWX)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(2) on t_file failed, errno=%d : %s",
- errno, strerror(errno));
- /*NOTREACHED*/
- }
- if (close(fd) == -1) {
- tst_brkm(TBROK, cleanup, "close(t_file) Failed, errno=%d : %s",
- errno, strerror(errno));
- /*NOTREACHED*/
- }
- return 0;
-}
-
-/*
- * void
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- * Restore the mode permissions on test directory.
- * Remove the temporary directory created in the setup.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* Restore mode permissions on test directory created in setup2() */
- if (chmod(DIR_TEMP, MODE_RWX) < 0) {
- tst_brkm(TBROK, NULL, "chmod(2) of %s failed", DIR_TEMP);
- }
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/symlink04.c b/winsup/testsuite/winsup.api/ltp/symlink04.c
deleted file mode 100644
index c6ddd0630..000000000
--- a/winsup/testsuite/winsup.api/ltp/symlink04.c
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * Test Name : symlink01
- *
- * Test Description :
- * Verify that, symlink will succeed to creat a symbolic link of an existing
- * object name path.
- *
- * Expected Result:
- * symlink() should return value 0 on success and symbolic link of an
- * existing object should be created.
- *
- * Algorithm:
- * Setup:
- * Setup signal handling.
- * Create temporary directory.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise,
- * Verify the Functionality of system call
- * if successful,
- * Issue Functionality-Pass message.
- * Otherwise,
- * Issue Functionality-Fail message.
- * Cleanup:
- * Print errno log and/or timing stats if options given
- * Delete the temporary directory created.
- *
- * Usage: <for command-line>
- * symlink01 [-c n] [-e] [-f] [-i n] [-I x] [-p x] [-t]
- * where, -c n : Run n copies concurrently.
- * -e : Turn on errno logging.
- * -f : Turn off functionality Testing.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * History
- * 07/2001 John George
- * -Ported
- *
- * Restrictions:
- * None.
- *
- */
-
-#include <sys/types.h>
-#include <sys/fcntl.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include <sys/stat.h>
-#include "test.h"
-#include "usctest.h"
-
-#define TESTFILE "testfile"
-#define SYMFILE "slink_file"
-#define FILE_MODE S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH
-
-const char *TCID="symlink01"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-int exp_enos[]={0};
-
-extern void setup(); /* Setup function for the test */
-void cleanup() __attribute__((noreturn));/* Cleanup function for the test */
-
-int
-main(int ac, char **av)
-{
- struct stat stat_buf; /* stat structure buffer */
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /* Parse standard options given to run the test. */
- msg = parse_opts(ac, av, (option_t *) NULL, NULL);
- if (msg != (char *) NULL) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- /*NOTREACHED*/
- }
-
- /* Perform global setup for test */
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /* Check looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- /* Reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call symlink(2) to create a symlink of
- * testfile.
- */
- TEST(symlink(TESTFILE, SYMFILE));
-
- /* Check return code of symlink(2) */
- if (TEST_RETURN == -1) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "symlink(%s, %s) Failed, errno=%d : %s",
- TESTFILE, SYMFILE, TEST_ERRNO,
- strerror(TEST_ERRNO));
- } else {
- /*
- * Perform functional verification if test
- * executed without (-f) option.
- */
- if (STD_FUNCTIONAL_TEST) {
- /*
- * Get the symlink file status information
- * using lstat(2).
- */
- if (lstat(SYMFILE, &stat_buf) < 0) {
- tst_brkm(TFAIL, cleanup, "lstat(2) of "
- "%s failed, error:%d", SYMFILE,
- errno);
- /*NOTREACHED*/
- }
-
- /* Check if the st_mode contains a link */
- if (!S_ISLNK(stat_buf.st_mode)) {
- tst_resm(TFAIL,
- "symlink of %s doesn't exist",
- TESTFILE);
- } else {
- tst_resm(TPASS, "symlink(%s, %s) "
- "functionality successful",
- TESTFILE, SYMFILE);
- }
- } else {
- tst_resm(TPASS, "Call succeeded");
- }
- }
-
- /* Unlink the symlink file for next loop */
- if (unlink(SYMFILE) == -1) {
- tst_brkm(TBROK, cleanup,
- "unlink(%s) Failed, errno=%d : %s",
- SYMFILE, errno, strerror(errno));
- /*NOTREACHED*/
- }
- Tst_count++; /* incr TEST_LOOP counter */
- } /* End for TEST_LOOPING */
-
- /* Call cleanup() to undo setup done for the test. */
- cleanup();
- /*NOTREACHED*/
-
-} /* End main */
-
-/*
- * void
- * setup() - performs all ONE TIME setup for this test.
- * Create a temporary directory and change directory to it.
- * Create a test file under temporary directory and close it
- */
-void
-setup()
-{
- int fd; /* file handle for testfile */
-
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified
- * TEST_PAUSE contains the code to fork the test with the -i option.
- * You want to make sure you do this before you create your temporary
- * directory.
- */
- TEST_PAUSE;
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* creat/open a testfile */
- if ((fd = open(TESTFILE, O_RDWR|O_CREAT, FILE_MODE)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR|O_CREAT, %#o) Failed, errno=%d : %s",
- TESTFILE, FILE_MODE, errno, strerror(errno));
- /*NOTREACHED*/
- }
-
- /* Close the temporary file created above */
- if (close(fd) == -1) {
- tst_resm(TBROK, "close(%s) Failed, errno=%d : %s",
- TESTFILE, errno, strerror(errno));
- }
-} /* End setup() */
-
-
-/*
- * void
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- * Remove the test directory and testfile created in the setup.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/symlink05.c b/winsup/testsuite/winsup.api/ltp/symlink05.c
deleted file mode 100644
index 3b2bbcb8c..000000000
--- a/winsup/testsuite/winsup.api/ltp/symlink05.c
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * Test Name : symlink02
- *
- * Test Description :
- * Verify that, symlink will succeed to creat a symbolic link of an
- * non-existing object name path.
- *
- * Expected Result:
- * symlink() should return value 0 on success and symlink of an
- * non-existing object should be created.
- *
- * Algorithm:
- * Setup:
- * Setup signal handling.
- * Create temporary directory.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise,
- * Verify the Functionality of system call
- * if successful,
- * Issue Functionality-Pass message.
- * Otherwise,
- * Issue Functionality-Fail message.
- * Cleanup:
- * Print errno log and/or timing stats if options given
- * Delete the temporary directory created.
- *
- * Usage: <for command-line>
- * symlink02 [-c n] [-e] [-f] [-i n] [-I x] [-p x] [-t]
- * where, -c n : Run n copies concurrently.
- * -e : Turn on errno logging.
- * -f : Turn off functionality Testing.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * History
- * 07/2001 John George
- * -Ported
- *
- * Restrictions:
- * This test should be run by 'non-super-user' only.
- *
- */
-
-#include <sys/types.h>
-#include <sys/fcntl.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include <sys/stat.h>
-
-#include "test.h"
-#include "usctest.h"
-
-#define TESTFILE "testfile"
-#define SYMFILE "slink_file"
-
-const char *TCID="symlink02"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-int exp_enos[]={0};
-
-extern void setup(); /* Setup function for the test */
-void cleanup() __attribute__((noreturn));/* Cleanup function for the test */
-
-int
-main(int ac, char **av)
-{
- struct stat stat_buf; /* stat structure buffer */
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /* Parse standard options given to run the test. */
- msg = parse_opts(ac, av, (option_t *) NULL, NULL);
- if (msg != (char *) NULL) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- /*NOTREACHED*/
- }
-
- /* Perform global setup for test */
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /* Check looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- /* Reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call symlink(2) to create a symlink of
- * an non-existing testfile.
- */
- TEST(symlink(TESTFILE, SYMFILE));
-
- /* Check return code of symlink(2) */
- if (TEST_RETURN == -1) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, \
- "symlink(%s, %s) Failed, errno=%d : %s",
- TESTFILE, SYMFILE, TEST_ERRNO,
- strerror(TEST_ERRNO));
- } else {
- /*
- * Perform functional verification if test
- * executed without (-f) option.
- */
- if (STD_FUNCTIONAL_TEST) {
- /*
- * Get the symlink file status information
- * using lstat(2).
- */
- if (lstat(SYMFILE, &stat_buf) < 0) {
- tst_brkm(TFAIL, cleanup, "lstat(2) of "
- "%s failed, error:%d",
- SYMFILE, errno);
- /*NOTREACHED*/
- }
-
- /* Check if the st_mode contains a link */
- if (!S_ISLNK(stat_buf.st_mode)) {
- tst_resm(TFAIL, \
- "symlink of %s doesn't exist",
- TESTFILE);
- } else {
- tst_resm(TPASS, "symlink(%s, %s) "
- "functionality successful",
- TESTFILE, SYMFILE);
- }
- } else {
- tst_resm(TPASS, "Call succeeded");
- }
- }
-
- /* Unlink the symlink file for next loop */
- if (unlink(SYMFILE) == -1) {
- tst_brkm(TBROK, cleanup,
- "unlink(%s) Failed, errno=%d : %s",
- SYMFILE, errno, strerror(errno));
- }
- Tst_count++; /* incr TEST_LOOP counter */
- } /* End for TEST_LOOPING */
-
- /* Call cleanup() to undo setup done for the test. */
- cleanup();
- /*NOTREACHED*/
-
-} /* End main */
-
-/*
- * void
- * setup() - performs all ONE TIME setup for this test.
- * Create a temporary directory and change directory to it.
- */
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified
- * TEST_PAUSE contains the code to fork the test with the -i option.
- * You want to make sure you do this before you create your temporary
- * directory.
- */
- TEST_PAUSE;
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
-} /* End setup() */
-
-
-/*
- * void
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- * Remove the temporary directory created in the setup.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/sync01.c b/winsup/testsuite/winsup.api/ltp/sync01.c
deleted file mode 100644
index c7df322ea..000000000
--- a/winsup/testsuite/winsup.api/ltp/sync01.c
+++ /dev/null
@@ -1,216 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : sync01
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for sync(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) sync(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the sync(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * sync(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-
-const char *TCID="sync01"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0};
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call sync(2)
- */
- TEST_VOID(sync());
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "sync() Failed, errno=%d : %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "sync() returned %d", TEST_RETURN);
- }
- }
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/sync02.c b/winsup/testsuite/winsup.api/ltp/sync02.c
deleted file mode 100644
index 5535e1add..000000000
--- a/winsup/testsuite/winsup.api/ltp/sync02.c
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * Test Name: sync01
- *
- * Test Description:
- * Open a file for write; modify the file, then do a sync().
- * Verify that the data has been written to disk by re-opening the file.
- *
- * Expected Result:
- * sync() alawys returns 0 in Linux. The data written to the file should
- * be updated to the disk.
- *
- * Algorithm:
- * Setup:
- * Setup signal handling.
- * Create temporary directory.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise,
- * Verify the Functionality of system call
- * if successful,
- * Issue Functionality-Pass message.
- * Otherwise,
- * Issue Functionality-Fail message.
- * Cleanup:
- * Print errno log and/or timing stats if options given
- * Delete the temporary directory created.
- *
- * Usage: <for command-line>
- * sync01 [-c n] [-f] [-i n] [-I x] [-p x] [-t]
- * where, -c n : Run n copies concurrently.
- * -f : Turn off functionality Testing.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * History
- * 07/2001 John George
- * -Ported
- *
- * Restrictions:
- * None.
- */
-
-#include <sys/types.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <string.h>
-#include <signal.h>
-#include <sys/stat.h>
-
-#include "test.h"
-#include "usctest.h"
-
-#define TEMP_FILE "temp_file"
-#define FILE_MODE S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH
-
-const char *TCID="sync01"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-char write_buffer[BUFSIZ]; /* buffer used to write data to file*/
-int fildes; /* file descriptor for temporary file */
-
-void setup(); /* Main setup function of test */
-void cleanup(void) __attribute__((noreturn)); /* cleanup function for the test */
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- char read_buffer[BUFSIZ]; /* buffer used to read data from file*/
-
- /* Parse standard options given to run the test. */
- msg = parse_opts(ac, av, (option_t *) NULL, NULL);
- if (msg != (char *) NULL) {
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
- /*NOTREACHED*/
- }
-
- /* Perform global setup for test */
- setup();
-
- /* Check looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- /* Reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call sync(2) to commit buffer data to disk.
- */
- TEST_VOID(sync());
-
- if (TEST_RETURN == -1) {
- tst_resm(TFAIL, "%s, Failed, errno=%d : %s",
- TCID, TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
- /*
- * Perform functional verification if test
- * executed without (-f) option.
- */
- if (STD_FUNCTIONAL_TEST) {
- /* Set the file ptr to b'nning of file */
- if (lseek(fildes, 0, SEEK_SET) < 0) {
- tst_brkm(TFAIL, cleanup, "lseek() "
- "failed on %s, error=%d",
- TEMP_FILE, errno);
- /*NOTREACHED*/
- }
-
- /* Read the contents of file */
- if (read(fildes, read_buffer, \
- sizeof(read_buffer)) > 0) {
- if (memcmp(read_buffer, write_buffer, strlen(write_buffer))) {
- tst_resm(TFAIL, "Data read "
- "from %s doesn't match "
- "with witten data",
- TEMP_FILE);
- } else {
- tst_resm(TPASS, "Functionality "
- "of sync() successful");
- }
- } else {
- tst_brkm(TFAIL, cleanup,
- "read() Fails on %s, error=%d",
- TEMP_FILE, errno);
- /*NOTREACHED*/
- }
- } else {
- tst_resm(TPASS, "call succeeded");
- }
- }
- Tst_count++; /* incr. TEST_LOOP counter */
- } /* End for TEST_LOOPING */
-
- /* Call cleanup() to undo setup done for the test. */
- cleanup();
- /*NOTREACHED*/
-
-} /* End main */
-
-/*
- * void
- * setup() - performs all ONE TIME setup for this test.
- * Create a temporary directory and change directory to it.
- * Create a test file under temporary directory and write some
- * data into it.
- */
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified
- * TEST_PAUSE contains the code to fork the test with the -i option.
- * You want to make sure you do this before you create your temporary
- * directory.
- */
- TEST_PAUSE;
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Copy some data into data buffer */
- strcpy(write_buffer, "abcdefghijklmnopqrstuvwxyz");
-
- /* Creat a temporary file under above directory */
- if ((fildes = open(TEMP_FILE, O_RDWR | O_CREAT, FILE_MODE)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR | O_CREAT, %#o) Failed, errno=%d :%s",
- TEMP_FILE, FILE_MODE, errno, strerror(errno));
- /*NOTREACHED*/
- }
-
- /* Write the buffer data into file */
- if (write(fildes, write_buffer, strlen(write_buffer)) != \
- (int)strlen(write_buffer)) {
- tst_brkm(TBROK, cleanup,
- "write() failed to write buffer data to %s",
- TEMP_FILE);
- /*NOTREACHED*/
- }
-
-} /* End setup() */
-
-/*
- * void
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- * Remove the test directory and testfile created in the setup.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* Close the temporary file */
- if (close(fildes) == -1) {
- tst_brkm(TFAIL, NULL,
- "close(%s) Failed, errno=%d : %s",
- TEMP_FILE, errno, strerror(errno));
- }
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/time01.c b/winsup/testsuite/winsup.api/ltp/time01.c
deleted file mode 100644
index c5658e260..000000000
--- a/winsup/testsuite/winsup.api/ltp/time01.c
+++ /dev/null
@@ -1,218 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : time01
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for time(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) time(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the time(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * time(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include <time.h>
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-
-const char *TCID="time01"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0};
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call time(2)
- */
- TEST(time(0));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "time(0) Failed, errno=%d : %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "time(0) returned %d", TEST_RETURN);
- }
- }
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- void trapper();
-
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/time02.c b/winsup/testsuite/winsup.api/ltp/time02.c
deleted file mode 100644
index 011546e8f..000000000
--- a/winsup/testsuite/winsup.api/ltp/time02.c
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * Test Name: time01
- *
- * Test Description:
- * Verify that time(2) returns the value of time in seconds since
- * the Epoch and stores this value in the memory pointed to by the parameter.
- *
- * Expected Result:
- * time() should return the time (seconds) since the Epoch and this value
- * should be equal to the value stored in the specified parameter.
- *
- * Algorithm:
- * Setup:
- * Setup signal handling.
- * Create temporary directory.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise,
- * Verify the Functionality of system call
- * if successful,
- * Issue Functionality-Pass message.
- * Otherwise,
- * Issue Functionality-Fail message.
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- * Usage: <for command-line>
- * time01 [-c n] [-e] [-f] [-i n] [-I x] [-p x] [-t]
- * where, -c n : Run n copies concurrently.
- * -e : Turn on errno logging.
- * -f : Turn off functionality Testing.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * History
- * 07/2001 John George
- * -Ported
- *
- * Restrictions:
- * None.
- *
- */
-
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include <time.h>
-#include <sys/types.h>
-
-#include "test.h"
-#include "usctest.h"
-
-extern void setup(); /* setup function for the test */
-void cleanup(void) __attribute__((noreturn));/* cleanup function for the test */
-
-const char *TCID="time01"; /* Test program identifier. */
-int TST_TOTAL = 1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-int exp_enos[]={0};
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- time_t tloc; /* time_t variables for time(2) */
-
-
- /* Parse standard options given to run the test. */
- msg = parse_opts(ac, av, (option_t *) NULL, NULL);
- if (msg != (char *) NULL) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /* Perform global setup for test */
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /* Check looping state if -i option given */
- for (lc=0; TEST_LOOPING(lc); lc++) {
- /* Reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call time() to get the time in seconds
- * since Epoch.
- */
- TEST(time(&tloc));
-
- /* Check return code from time(2) */
- if (TEST_RETURN == -1) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "time(0) Failed, errno=%d : %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
- /*
- * Perform functional verification if test executed
- * without (-f) option.
- */
- if (STD_FUNCTIONAL_TEST) {
- if (tloc == TEST_RETURN) {
- tst_resm(TPASS, "time() returned value "
- "%d, stored value %d are same",
- TEST_RETURN, tloc);
- } else {
- tst_resm(TFAIL, "time() returned value "
- "%d, stored value %d are "
- "different", TEST_RETURN, tloc);
- }
- } else {
- tst_resm(TPASS, "call succeeded");
- }
-
- }
- Tst_count++; /* incr. TEST_LOOP counter */
- } /* End for TEST_LOOPING */
-
- /* cleanup and exit */
- cleanup();
- /*NOTREACHED*/
-
-} /* End main */
-
-/*
- * setup() - performs all ONE TIME setup for this test.
- */
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-} /* End setup() */
-
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/times01.c b/winsup/testsuite/winsup.api/ltp/times01.c
deleted file mode 100644
index a1bd1d838..000000000
--- a/winsup/testsuite/winsup.api/ltp/times01.c
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : times01
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for times(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) times(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the times(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * times(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <sys/types.h>
-#include <sys/times.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-
-const char *TCID="times01"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0};
-
-struct tms mytimes;
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call times(2)
- */
- TEST(times(&mytimes));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "times(&mytimes) Failed, errno=%d : %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "times(&mytimes) returned %d", TEST_RETURN);
- }
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- void trapper();
-
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/times02.c b/winsup/testsuite/winsup.api/ltp/times02.c
deleted file mode 100644
index 1dae36c5a..000000000
--- a/winsup/testsuite/winsup.api/ltp/times02.c
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * NAME
- * times02.c
- *
- * DESCRIPTION
- * Testcase to test that times() sets errno correctly
- *
- * ALGORITHM
- * block1: Pass an invalid address as the "tms" structure, and expect
- * that times() would return EFAULT.
- *
- * USAGE: <for command-line>
- * times02 [-c n] [-e] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -e : Turn on errno logging.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * History
- * 07/2001 John George
- * -Ported
- *
- * Restrictions
- * NONE
- */
-
-#include <sys/times.h>
-#include <errno.h>
-#include <test.h>
-#include <usctest.h>
-
-const char *TCID = "times02";
-int TST_TOTAL = 1;
-extern int Tst_count;
-int exp_enos[]={EFAULT, 0};
-
-void setup(void);
-void cleanup(void) __attribute__((noreturn));
-
-int
-main(int argc, char **argv)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /* parse standard options */
- if ((msg = parse_opts(argc, argv, (option_t *)NULL, NULL)) !=
- (char *)NULL) {
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
- /*NOTREACHED*/
- }
-
- setup();
-
- /* check for looping state if -i option is given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- /* reset Tst_count in case we are looping */
- Tst_count = 0;
-
- TEST(times((void *)-1));
- if (TEST_RETURN == -1) {
- TEST_ERROR_LOG(TEST_ERRNO);
- if (errno != EFAULT) {
- tst_resm(TFAIL, "Expected EFAULT, got %d",
- errno);
- } else {
- tst_resm(TPASS, "Received EFAULT as expected");
- }
-
- } else {
- tst_resm(TFAIL, "times(2) failed to FAIL");
- }
-
- }
- cleanup();
- /*NOTREACHED*/
-}
-
-/*
- * setup()
- * performs all ONE TIME setup for this test
- */
-void
-setup(void)
-{
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /* Pause if that option was specified
- * TEST_PAUSE contains the code to fork the test with the -c option.
- */
- TEST_PAUSE;
-}
-
-/*
- * cleanup()
- * performs all ONE TIME cleanup for this test at
- * completion or premature exit
- */
-void
-cleanup(void)
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
- /*NOTREACHED*/
-}
diff --git a/winsup/testsuite/winsup.api/ltp/times03.c b/winsup/testsuite/winsup.api/ltp/times03.c
deleted file mode 100644
index 453d311cc..000000000
--- a/winsup/testsuite/winsup.api/ltp/times03.c
+++ /dev/null
@@ -1,247 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * NAME
- * times01.c
- *
- * DESCRIPTION
- * Testcase to check the basic functionality of the times() system call.
- *
- * ALGORITHM
- * This testcase checks the values that times(2) system call returns.
- * Start a process, and spend some CPU time by performing a spin in
- * a for-loop. Then use the times() system call, to determine the
- * cpu time/sleep time, and other statistics.
- *
- * USAGE: <for command-line>
- * times01 [-c n] [-f] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -f : Turn off functionality Testing.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * History
- * 07/2001 John George
- * -Ported
- *
- * Restrictions
- * NONE
- */
-
-#include <sys/types.h>
-#include <sys/times.h>
-#include <errno.h>
-#include <sys/wait.h>
-#include <test.h>
-#include <usctest.h>
-
-const char *TCID = "times01";
-int TST_TOTAL = 1;
-extern int Tst_count;
-int exp_enos[]={0};
-
-void setup(void);
-void cleanup(void) __attribute__((noreturn));
-
-int
-main(int argc, char **argv)
-{
- const char *msg; /* message returned from parse_opts */
-
- struct tms buf1, buf2;
- time_t start_time, end_time;
- int i, pid2, status, fail=0;
-
- /* parse standard options */
- if ((msg = parse_opts(argc, argv, (option_t *)NULL, NULL)) !=
- (char *)NULL) {
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
- /*NOTREACHED*/
- }
-
- setup();
-
-
- for (i = 0; i < 1000000; i++);
- /*
- * At least some CPU time must be used. This is
- * achieved by executing the times(2) call for
- * atleast 5 secs. This logic makes it independant
- * of the processor speed.
- */
- start_time = time(NULL);
- for (;;) {
- if (times(&buf1) == (clock_t)-1) {
- TEST_ERROR_LOG(errno);
- tst_resm(TFAIL, "Call to times(2) "
- "failed, errno = %d", errno);
- }
- end_time = time(NULL);
- if ((end_time - start_time) > 5) {
- break;
- }
- }
- if (times(&buf1) == (clock_t)-1) {
- TEST_ERROR_LOG(errno);
- tst_resm(TFAIL, "Call to times(2) failed, "
- "errno = %d", errno);
- } else {
- /*
- * Perform functional verification if test
- * executed without (-f) option.
- */
- if (STD_FUNCTIONAL_TEST) {
- if (buf1.tms_utime == 0) {
- tst_resm(TFAIL, "Error: times() report "
- "0 user time");
- fail=1;
- }
- if (buf1.tms_stime == 0) {
- tst_resm(TFAIL, "Error: times() report "
- "0 system time");
- fail=1;
- }
- if (buf1.tms_cutime != 0) {
- tst_resm(TFAIL, "Error: times() report "
- "%d child user time",
- buf1.tms_cutime);
- fail=1;
- }
- if (buf1.tms_cstime != 0) {
- tst_resm(TFAIL, "Error: times() report " "%d child system time",
- buf1.tms_cstime);
- fail=1;
- }
-
- pid2 = fork();
- if (pid2 < 0) {
- tst_brkm(TFAIL, cleanup, "Fork failed");
- /*NOTREACHED*/
- } else if (pid2 == 0) {
- for (i = 0; i < 2000000; i++);
- /*
- * Atleast some CPU time must be used
- * even in the child process (thereby
- * making it independent of the
- * processor speed). In fact the child
- * uses twice as much CPU time.
- */
- start_time = time(NULL);
- for (;;) {
- if (times(&buf2) == (clock_t)-1) {
- tst_resm(TFAIL,
- "Call to times "
- "failed, "
- "errno = %d",
- errno);
- exit(1);
- }
- end_time = time(NULL);
- if ((end_time - start_time)
- > 10) {
- break;
- }
- }
- exit(0);
- }
- waitpid(pid2, &status, 0);
- if (WEXITSTATUS(status) != 0) {
- tst_resm(TFAIL, "Call to times(2) "
- "failed in child");
- }
- if (times(&buf2) == (clock_t)-1) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "Call to times failed "
- "errno = %d", errno);
- fail=1;
- }
- if (buf1.tms_utime > buf2.tms_utime) {
- tst_resm(TFAIL, "Error: parents's "
- "user time(%d) before child "
- "> parent's user time (%d) "
- "after child",
- buf1.tms_utime,
- buf2.tms_utime);
- fail=1;
- }
- if (buf2.tms_cutime == 0) {
- tst_resm(TFAIL, "Error: times() "
- "report %d child user "
- "time should be > than "
- "zero", buf2.tms_cutime);
- fail=1;
- }
- if (buf2.tms_cstime == 0) {
- tst_resm(TFAIL, "Error: times() "
- "report %d child system time "
- "should be > than zero",
- buf2.tms_cstime);
- fail=1;
- }
- if (fail == 0) {
- tst_resm(TPASS, "%s: Functionality "
- "test passed", TCID);
- }
-
- } else {
- tst_resm(TPASS, "%s call succeeded", TCID);
- }
- }
- cleanup();
- /*NOTREACHED*/
-}
-
-/*
- * setup()
- * performs all ONE TIME setup for this test
- */
-void
-setup(void)
-{
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /* Pause if that option was specified
- * TEST_PAUSE contains the code to fork the test with the -c option.
- */
- TEST_PAUSE;
-}
-
-/*
- * cleanup()
- * performs all ONE TIME cleanup for this test at
- * completion or premature exit
- */
-void
-cleanup(void)
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
- /*NOTREACHED*/
-}
diff --git a/winsup/testsuite/winsup.api/ltp/truncate01.c b/winsup/testsuite/winsup.api/ltp/truncate01.c
deleted file mode 100644
index 1e2931605..000000000
--- a/winsup/testsuite/winsup.api/ltp/truncate01.c
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * Test Name: truncate01
- *
- * Test Description:
- * Verify that, truncate(2) succeeds to truncate a file to a specified
- * length.
- *
- * Expected Result:
- * truncate(2) should return a value 0 and the length of the file after
- * truncation should be equal to the length it is truncated to.
- *
- * Algorithm:
- * Setup:
- * Setup signal handling.
- * Create temporary directory.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise,
- * Verify the Functionality of system call
- * if successful,
- * Issue Functionality-Pass message.
- * Otherwise,
- * Issue Functionality-Fail message.
- * Cleanup:
- * Print errno log and/or timing stats if options given
- * Delete the temporary directory created.
- *
- * Usage: <for command-line>
- * truncate01 [-c n] [-e] [-f] [-i n] [-I x] [-p x] [-t]
- * where, -c n : Run n copies concurrently.
- * -e : Turn on errno logging.
- * -f : Turn off functionality Testing.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * History
- * 07/2001 John George
- * -Ported
- *
- * Restrictions:
- * This test should be run by 'non-super-user' only.
- *
- */
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/fcntl.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-
-#include "test.h"
-#include "usctest.h"
-
-#define TESTFILE "testfile" /* file under test */
-#define FILE_MODE S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH
-#define BUF_SIZE 256 /* buffer size */
-#define FILE_SIZE 1024 /* test file size */
-#define TRUNC_LEN 256 /* truncation length */
-
-const char *TCID="truncate01"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test conditions */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-int exp_enos[]={0};
-
-void setup(); /* setup function for the test */
-void cleanup(void) __attribute__((noreturn)); /* cleanup function for the test */
-
-int
-main(int ac, char **av)
-{
- struct stat stat_buf; /* stat(2) struct contents */
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- off_t file_length; /* test file length */
-
- /* Parse standard options given to run the test. */
- msg = parse_opts(ac, av, (option_t *) NULL, NULL);
- if (msg != (char *) NULL) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /* Perform global setup for test */
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /* Check looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- /* Reset Tst_count in case we are looping. */
- Tst_count = 0;
-
- /*
- * Call truncate(2) to truncate a test file to a
- * specified length.
- */
- TEST(truncate(TESTFILE, TRUNC_LEN));
-
- /* check return code of truncate(2) */
- if (TEST_RETURN == -1) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL,
- "truncate(%s, %d) Failed, errno=%d : %s",
- TESTFILE, TRUNC_LEN, TEST_ERRNO,
- strerror(TEST_ERRNO));
- } else {
- /*
- * Perform functional verification if test
- * executed without (-f) option.
- */
- if (STD_FUNCTIONAL_TEST) {
- /*
- * Get the testfile information using
- * stat(2).
- */
- if (stat(TESTFILE, &stat_buf) < 0) {
- tst_brkm(TFAIL, cleanup, "stat(2) of "
- "%s failed, error:%d",
- TESTFILE, errno);
- /*NOTREACHED*/
- }
- stat_buf.st_mode &= ~S_IFREG;
- file_length = stat_buf.st_size;
-
- /*
- * Check for expected size of testfile after
- * truncate(2) on it.
- */
- if (file_length != TRUNC_LEN) {
- tst_resm(TFAIL, "%s: Incorrect file "
- "size %d, Expected %d",
- TESTFILE, file_length,
- TRUNC_LEN);
- } else {
- tst_resm(TPASS, "Functionality of "
- "truncate(%s, %d) successful",
- TESTFILE, TRUNC_LEN);
- }
- } else {
- tst_resm(TPASS, "%s call succeeded", TCID);
- }
- }
- Tst_count++; /* incr TEST_LOOP counter */
- } /* End for TEST_LOOPING */
-
- /* Call cleanup() to undo setup done for the test. */
- cleanup();
- /*NOTREACHED*/
-
-} /* End main */
-
-/*
- * void
- * setup() - performs all ONE TIME setup for this test.
- * Create a temporary directory and change directory to it.
- * Fill the buffer with some arbitrary data to be written to a file.
- * Create a test file under temporary directory and close it
- * write arbitrary data into testfile.
- */
-void
-setup()
-{
- int fd, i; /* file handler for testfile */
- int c, c_total = 0; /* no. bytes to be written to file */
- char tst_buff[BUF_SIZE]; /* buffer to hold data */
-
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
-
- /* Pause if that option was specified
- * TEST_PAUSE contains the code to fork the test with the -i option.
- * You want to make sure you do this before you create your temporary
- * directory.
- */
- TEST_PAUSE;
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Fill the test buffer with the known data */
- for (i = 0; i < BUF_SIZE; i++) {
- tst_buff[i] = 'a';
- }
-
- /* Creat a testfile under temporary directory */
- if ((fd = open(TESTFILE, O_RDWR|O_CREAT, FILE_MODE)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR|O_CREAT, %o) Failed, errno=%d : %s",
- TESTFILE, FILE_MODE, errno, strerror(errno));
- /*NOTREACHED*/
- }
-
- /* Write to the file 1k data from the buffer */
- while (c_total < FILE_SIZE) {
- if ((c = write(fd, tst_buff, sizeof(tst_buff))) <= 0) {
- tst_brkm(TBROK, cleanup,
- "write(2) on %s Failed, errno=%d : %s",
- TESTFILE, errno, strerror(errno));
- /*NOTREACHED*/
- } else {
- c_total += c;
- }
- }
-
- /* Close the testfile after writing data into it */
- if (close(fd) == -1) {
- tst_brkm(TBROK, cleanup,
- "close(%s) Failed, errno=%d : %s",
- TESTFILE, errno, strerror(errno));
- /*NOTREACHED*/
- }
-} /* End setup() */
-
-/*
- * void
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- * Remove the test directory and testfile created in the setup.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- */
- TEST_CLEANUP;
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/truncate02.c b/winsup/testsuite/winsup.api/ltp/truncate02.c
deleted file mode 100644
index 4ba802949..000000000
--- a/winsup/testsuite/winsup.api/ltp/truncate02.c
+++ /dev/null
@@ -1,335 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * Test Name: truncate02
- *
- * Test Description:
- * Verify that, truncate(2) succeeds to truncate a file to a certain length,
- * but the attempt to read past the truncated length will fail.
- *
- * Expected Result:
- * truncate(2) should return a value 0 and the attempt to read past the
- * truncated length will fail. In case where the file before truncation was
- * shorter, the bytes between the old and new should be all zeroes.
- *
- * Algorithm:
- * Setup:
- * Setup signal handling.
- * Create temporary directory.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise,
- * Verify the Functionality of system call
- * if successful,
- * Issue Functionality-Pass message.
- * Otherwise,
- * Issue Functionality-Fail message.
- * Cleanup:
- * Print errno log and/or timing stats if options given
- * Delete the temporary directory created.
- *
- * Usage: <for command-line>
- * truncate02 [-c n] [-e] [-f] [-i n] [-I x] [-p x] [-t]
- * where, -c n : Run n copies concurrently.
- * -e : Turn on errno logging.
- * -f : Turn off functionality Testing.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * History
- * 07/2001 John George
- * -Ported
- *
- * Restrictions:
- * This test should be run by 'non-super-user' only.
- *
- */
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/fcntl.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-
-#include "test.h"
-#include "usctest.h"
-
-#define TESTFILE "testfile" /* file under test */
-#define FILE_MODE S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH
-#define BUF_SIZE 256 /* buffer size */
-#define FILE_SIZE 1024 /* test file size */
-#define TRUNC_LEN1 256 /* truncation length */
-#define TRUNC_LEN2 512 /* truncation length */
-
-const char *TCID="truncate02"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test conditions */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-int fd; /* file descriptor of testfile */
-char tst_buff[BUF_SIZE]; /* buffer to hold testfile contents */
-int exp_enos[]={0};
-
-void setup(); /* setup function for the test */
-void cleanup(void) __attribute__((noreturn)); /* cleanup function for the test */
-
-int
-main(int ac, char **av)
-{
- struct stat stat_buf; /* stat(2) struct contents */
- int lc, i; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- off_t file_length2; /* test file length */
- off_t file_length1; /* test file length */
- int rbytes; /* bytes read from testfile */
- int read_len = 0; /* total no. of bytes read from testfile */
- int err_flag = 0; /* error indicator flag */
-
- /* Parse standard options given to run the test. */
- msg = parse_opts(ac, av, (option_t *) NULL, NULL);
- if (msg != (char *) NULL) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /* Perform global setup for test */
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /* Check looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- /* Reset Tst_count in case we are looping. */
- Tst_count = 0;
-
- /*
- * Call truncate(2) to truncate a test file to a
- * specified length (TRUNC_LEN1).
- */
- TEST(truncate(TESTFILE, TRUNC_LEN1));
-
- /* check return code of truncate(2) */
- if (TEST_RETURN == -1) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, \
- "truncate(%s, %d) Failed, errno=%d : %s",
- TESTFILE, TRUNC_LEN1, TEST_ERRNO,
- strerror(TEST_ERRNO));
- } else {
- /*
- * Perform functional verification if test
- * executed without (-f) option.
- */
- if (STD_FUNCTIONAL_TEST) {
- /*
- * Get the testfile information using
- * stat(2).
- */
- if (stat(TESTFILE, &stat_buf) < 0) {
- tst_brkm(TFAIL, cleanup, "stat(2) of "
- "%s failed after 1st truncate, "
- "error:%d", TESTFILE, errno);
- /*NOTREACHED*/
- }
- file_length1 = stat_buf.st_size;
-
- /*
- * Set the file pointer of testfile to the
- * beginning of the file.
- */
- if (lseek(fd, 0, SEEK_SET) < 0) {
- tst_brkm(TFAIL, cleanup, "lseek(2) on "
- "%s failed after 1st truncate, "
- "error:%d", TESTFILE, errno);
- /*NOTREACHED*/
- }
-
- /* Read the testfile from the beginning. */
- while ((rbytes = read(fd, tst_buff, \
- sizeof(tst_buff))) > 0) {
- read_len += rbytes;
- }
-
- /*
- * Execute truncate(2) again to truncate
- * testfile to a size TRUNC_LEN2.
- */
- TEST(truncate(TESTFILE, TRUNC_LEN2));
-
- /* check return code of truncate(2) */
- if (TEST_RETURN == -1) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "truncate of %s to "
- "size %d Failed, errno=%d : %s",
- TESTFILE, TRUNC_LEN2,
- TEST_ERRNO,
- strerror(TEST_ERRNO));
- }
-
- /*
- * Get the testfile information using
- * stat(2)
- */
- if (stat(TESTFILE, &stat_buf) < 0) {
- tst_brkm(TFAIL, cleanup, "stat(2) of "
- "%s failed after 2nd truncate, "
- "error:%d", TESTFILE, errno);
- /*NOTREACHED*/
- }
- file_length2 = stat_buf.st_size;
-
- /*
- * Set the file pointer of testfile to the
- * offset TRUNC_LEN1 of testfile.
- */
- if (lseek(fd, TRUNC_LEN1, SEEK_SET) < 0) {
- tst_brkm(TFAIL, cleanup, "lseek(2) on "
- "%s failed after 2nd truncate, "
- "error:%d", TESTFILE, errno);
- /*NOTREACHED*/
- }
-
- /* Read the testfile contents till EOF */
- while((rbytes = read(fd, tst_buff, \
- sizeof(tst_buff))) > 0) {
- for (i = 0; i < rbytes; i++) {
- if (tst_buff[i] != 0) {
- err_flag++;
- }
- }
- }
-
- /*
- * Check for expected size of testfile after
- * issuing truncate(2) on it.
- */
- if ((file_length1 != TRUNC_LEN1) || \
- (file_length2 != TRUNC_LEN2) || \
- (read_len != TRUNC_LEN1) || \
- (err_flag != 0)) {
- tst_resm(TFAIL, "Functionality of "
- "truncate(2) on %s Failed",
- TESTFILE);
- } else {
- tst_resm(TPASS, \
- "Functionality of truncate(2) "
- "on %s successful", TESTFILE);
- }
- } else {
- tst_resm(TPASS, "%s call succeeded", TCID);
- }
- }
- Tst_count++; /* incr. TEST_LOOP counter */
- } /* End for TEST_LOOPING */
-
- /* Call cleanup() to undo setup done for the test. */
- cleanup();
- /*NOTREACHED*/
-
-} /* End main */
-
-/*
- * void
- * setup() - performs all ONE TIME setup for this test.
- * Create a temporary directory and change directory to it.
- * Create a test file under temporary directory and write some
- * data into it.
- */
-void
-setup()
-{
- int i; /* counter variable */
- int wbytes; /* bytes written to testfile */
- int write_len = 0; /* total no. of bytes written to testfile */
-
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified
- * TEST_PAUSE contains the code to fork the test with the -i option.
- * You want to make sure you do this before you create your temporary
- * directory.
- */
- TEST_PAUSE;
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
-
- /* Fill the test buffer with the known data */
- for (i = 0; i < BUF_SIZE; i++) {
- tst_buff[i] = 'a';
- }
-
- /* Creat a testfile and write some data into it */
- if ((fd = open(TESTFILE, O_RDWR|O_CREAT, FILE_MODE)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR|O_CREAT, %o) Failed, errno=%d : %s",
- TESTFILE, FILE_MODE, errno, strerror(errno));
- /*NOTREACHED*/
- }
-
- /* Write to the file 1k data from the buffer */
- while (write_len < FILE_SIZE) {
- if ((wbytes = write(fd, tst_buff, sizeof(tst_buff))) <= 0) {
- tst_brkm(TBROK, cleanup,
- "write(2) on %s Failed, errno=%d : %s",
- TESTFILE, errno, strerror(errno));
- } else {
- write_len += wbytes;
- }
- }
-} /* End setup() */
-
-/*
- * void
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- * Close the temporary file opened for reading/writing.
- * Remove the test directory and testfile created in the setup.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- */
- TEST_CLEANUP;
-
- /* Close the testfile after writing data into it */
- if (close(fd) == -1) {
- tst_brkm(TFAIL, NULL,
- "close(%s) Failed, errno=%d : %s",
- TESTFILE, errno, strerror(errno));
- }
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/ulimit01.c b/winsup/testsuite/winsup.api/ltp/ulimit01.c
deleted file mode 100644
index c3f09fba3..000000000
--- a/winsup/testsuite/winsup.api/ltp/ulimit01.c
+++ /dev/null
@@ -1,273 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : ulimit01
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for ulimit(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 6
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) ulimit(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * The libcuts.a and libsys.a libraries must be included in
- * the compilation of this test.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the ulimit(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * ulimit(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <ulimit.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-void setup();
-void cleanup(void) __attribute__((noreturn));
-
-
-
-const char *TCID="ulimit01"; /* Test program identifier. */
-int TST_TOTAL=6; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int cmd;
-long limit; /* saved limit */
-
-struct limits_t {
- int cmd;
- long newlimit;
- int nlim_flag; /* special flag for UL_SETFSIZE records */
- int exp_fail;
-} Scenarios[] = {
-
- { UL_GETFSIZE, -1, 0, 0 },
- { UL_SETFSIZE, -1, 0, 1 }, /* negative test */
- { UL_SETFSIZE, -2, 1, 0 }, /* case case: must be after UL_GETFSIZE */
- { UL_SETFSIZE, -2, 2, 0 }, /* case case: must be after UL_GETFSIZE */
-
-#if UL_GMEMLIM
- { UL_GMEMLIM, -1, 0, 0 },
-#endif
-#if UL_GDESLIM
- { UL_GDESLIM, -1, 0, 0 },
-#endif
-#if UL_GSHMEMLIM
- { UL_GSHMEMLIM, -1, 0, 0 },
-#endif
-
-};
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- int i; /* inner loop (test case) counter */
- const char *msg; /* message returned from parse_opts */
- int tmp;
-
- TST_TOTAL = sizeof(Scenarios)/sizeof(struct limits_t);
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *) NULL ) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- for ( i=0; i<TST_TOTAL; i++) {
-
- cmd=Scenarios[i].cmd;
- limit=Scenarios[i].newlimit;
-
- /*
- * Call ulimit(2)
- */
- TEST(ulimit(cmd, limit));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- if ( Scenarios[i].exp_fail ) {
- if ( STD_FUNCTIONAL_TEST ) {
- tst_resm(TPASS, "ulimit(%d, %d) Failed, errno=%d : %s", cmd, limit,
- TEST_ERRNO, strerror(TEST_ERRNO));
- }
- } else {
- tst_resm(TFAIL, "ulimit(%d, %d) Failed, errno=%d : %s", cmd, limit,
- TEST_ERRNO, strerror(TEST_ERRNO));
- }
- } else {
- if ( Scenarios[i].exp_fail ) {
- tst_resm(TFAIL, "ulimit(%d, %d) returned %d",
- cmd, limit, TEST_RETURN);
- } else if ( STD_FUNCTIONAL_TEST ) {
- tst_resm(TPASS, "ulimit(%d, %d) returned %d",
- cmd, limit, TEST_RETURN);
- }
-
- /*
- * Save the UL_GETFSIZE return value in the newlimit field
- * for UL_SETFSIZE test cases.
- */
- if ( cmd == UL_GETFSIZE ) {
- for (tmp=i+1; tmp<TST_TOTAL; tmp++) {
- if ( Scenarios[tmp].nlim_flag == 1 ) {
- Scenarios[tmp].newlimit = TEST_RETURN;
- }
- if ( Scenarios[tmp].nlim_flag == 2 ) {
- Scenarios[tmp].newlimit = TEST_RETURN-1;
- }
- }
- }
- }
- }
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
-
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/umask01.c b/winsup/testsuite/winsup.api/ltp/umask01.c
deleted file mode 100644
index fb86f0d31..000000000
--- a/winsup/testsuite/winsup.api/ltp/umask01.c
+++ /dev/null
@@ -1,220 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : umask01
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for umask(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) umask(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the umask(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * umask(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-
-const char *TCID="umask01"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0};
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call umask(2)
- */
- TEST(umask(022));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "umask(022) Failed, errno=%d : %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "umask(022) returned %d", TEST_RETURN);
- }
- }
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- void trapper();
-
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/umask02.c b/winsup/testsuite/winsup.api/ltp/umask02.c
deleted file mode 100644
index 9a1c61c53..000000000
--- a/winsup/testsuite/winsup.api/ltp/umask02.c
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * NAME
- * umask02.c
- *
- * DESCRIPTION
- * Check that umask changes the mask, and that the previous
- * value of the mask is returned correctly for each value.
- *
- * ALGORITHM
- * For each mask value (9 bits) set mask, and check that the return
- * corresponds to the previous value set.
- *
- * USAGE: <for command-line>
- * umask02 [-c n] [-e] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -e : Turn on errno logging.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * History
- * 07/2001 John George
- * -Ported
- *
- * Restrictions
- * None
- */
-
-#include <sys/stat.h>
-#include "test.h"
-#include "usctest.h"
-
-const char *TCID = "umask02";
-int TST_TOTAL = 1;
-extern int Tst_count;
-
-void setup(void);
-void cleanup(void) __attribute__((noreturn));
-
-int
-main(int argc, char **argv)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- int uret = 0, i, mskval = 0000;
-
- /* parse standard options */
- if ((msg = parse_opts(argc, argv, (option_t *)NULL, NULL)) !=
- (char *) NULL) {
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
- /*NOTREACHED*/
- }
-
- setup();
-
- /* Check for looping state if -i option is given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping */
- Tst_count = 0;
-
- for (umask(++mskval), i = 1; mskval < 01000;
- uret = umask(++mskval), i++) {
- if ((uret != mskval - 1) && (mskval != 0000)) {
- tst_brkm(TBROK, cleanup, "bad mask value "
- "returned");
- /*NOTREACHED*/
- } else {
- tst_resm(TPASS, "umask(%d) susuccessfully "
- "returned %d.", mskval, uret);
- }
- }
- mskval = 0000;
- uret = 0;
- tst_resm(TINFO, "end of loop %d\n", lc);
- }
- cleanup();
- /*NOTREACHED*/
-}
-
-/*
- * setup()
- * performs all ONE TIME setup for this test
- */
-void
-setup(void)
-{
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified
- * TEST_PAUSE contains the code to fork the test with the -c option.
- */
- TEST_PAUSE;
-}
-
-/*
- * cleanup()
- * performs all ONE TIME cleanup for this test at
- * completion or premature exit
- */
-void
-cleanup(void)
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
- /*NOTREACHED*/
-}
diff --git a/winsup/testsuite/winsup.api/ltp/umask03.c b/winsup/testsuite/winsup.api/ltp/umask03.c
deleted file mode 100644
index 341da7507..000000000
--- a/winsup/testsuite/winsup.api/ltp/umask03.c
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * NAME
- * umask01.c
- *
- * DESCRIPTION
- * Check that umask changes the mask, and that the previous
- * value of the mask is returned correctly for each value.
- *
- * ALGORITHM
- * For each mask value (9 bits) set mask, and check that the return
- * corresponds to the previous value set.
- *
- * USAGE: <for command-line>
- * umask01 [-c n] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * History
- * 07/2001 John George
- * -Ported
- *
- * Restrictions
- * None
- */
-
-#include "test.h"
-#include "usctest.h"
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-const char *TCID = "umask01";
-int TST_TOTAL = 1;
-extern int Tst_count;
-
-char filname[40];
-
-void setup(void);
-void cleanup(void) __attribute__((noreturn));
-
-int
-main(int argc, char **argv)
-{
- int lc;
- const char *msg;
-
- struct stat statbuf;
- unsigned mskval = 0000;
- int fildes, i;
- unsigned low9mode;
-
- /* parse standard options */
- if ((msg = parse_opts(argc, argv, (option_t *) NULL, NULL))
- != (char *) NULL) {
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
- /*NOTREACHED*/
- }
-
- setup(); /* global setup */
-
- /* check looping state if -i option is given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping */
- Tst_count = 0;
-
- for (umask(mskval = 0077), i = 1; mskval < 01000;
- i++, umask(++mskval)) {
- unlink(filname);
- if ((fildes = creat(filname, 0777)) == -1) {
- tst_resm(TBROK, "cannot create "
- "file with mskval 0%o %d",
- mskval, mskval);
- } else {
- if (fstat(fildes, &statbuf) != 0) {
- tst_resm(TBROK, "cannot fstat file");
- } else {
- low9mode = statbuf.st_mode & 0777;
- if (low9mode != (~mskval & 0777)) {
- tst_brkm(TBROK, cleanup,
- "got %0 expected %o"
- "mask didnot take",
- low9mode,
- (~mskval & 0777));
- /*NOTREACHED*/
- } else {
- tst_resm(TPASS, "Test "
- "condition: %d, umask: "
- "0%o", i, mskval);
- }
- }
- }
- close(fildes);
- }
- }
- cleanup();
- /*NOTREACHED*/
-}
-
-/*
- * setup
- * performs all ONE TIME setup for this test
- */
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
-
- /* Pause if that option was specified
- * TEST_PAUSE contains the code to fork the test with the -i option.
- * You want to make sure you do this before you create your temporary
- * directory.
- */
- TEST_PAUSE;
-
- /* make temp dir and cd to it */
- tst_tmpdir();
-
- sprintf(filname, "umask2.%d", getpid());
-}
-
-/*
- * cleanup
- * performs all ONE TIME cleanup for this test at completion or
- * premature exit
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified
- * print errno log if that option was specified
- */
- TEST_CLEANUP;
-
- /*
- * cleanup the temporary files and the temporary directory
- */
- unlink(filname);
- tst_rmdir();
-
- /*
- * exit with return code appropriate for results
- */
- tst_exit();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/uname01.c b/winsup/testsuite/winsup.api/ltp/uname01.c
deleted file mode 100644
index 36b166786..000000000
--- a/winsup/testsuite/winsup.api/ltp/uname01.c
+++ /dev/null
@@ -1,221 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : uname01
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for uname(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) uname(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the uname(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * uname(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <sys/utsname.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-
-const char *TCID="uname01"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0};
-
-struct utsname un;
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call uname(2)
- */
- TEST(uname(&un));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "uname(&un) Failed, errno=%d : %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "uname(&un) returned %d", TEST_RETURN);
- }
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- void trapper();
-
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/unlink05.c b/winsup/testsuite/winsup.api/ltp/unlink05.c
deleted file mode 100644
index 3aae0cf0d..000000000
--- a/winsup/testsuite/winsup.api/ltp/unlink05.c
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : unlink05
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for unlink(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) unlink(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the unlink(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * unlink(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <sys/types.h>
-#include <sys/fcntl.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-void create_file();
-
-
-
-const char *TCID="unlink05"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0};
-
-char fname[255];
-int fd;
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call unlink(2)
- */
- TEST(unlink(fname));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "unlink(%s) Failed, errno=%d : %s", fname,
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "unlink(%s) returned %d", fname, TEST_RETURN);
- }
- /* recreate file for next loop */
- create_file();
- }
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- create_file();
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
-
-void
-create_file()
-{
- sprintf(fname,"tfile_%d",getpid());
- if ((fd = open(fname,O_RDWR|O_CREAT,0700)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR|O_CREAT,0700) Failed, errno=%d : %s",
- fname, errno, strerror(errno));
- }
- if (close(fd) == -1) {
- tst_resm(TWARN, "close(%s) Failed, errno=%d : %s",
- fname, errno, strerror(errno));
- }
-}
diff --git a/winsup/testsuite/winsup.api/ltp/unlink06.c b/winsup/testsuite/winsup.api/ltp/unlink06.c
deleted file mode 100644
index a62a268c0..000000000
--- a/winsup/testsuite/winsup.api/ltp/unlink06.c
+++ /dev/null
@@ -1,254 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : unlink06
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : unlink(2) of a FIFO
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : Richard Logan
- *
- * CO-PILOT : William Roske
- *
- * DATE STARTED : 03/30/94
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) unlink(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the unlink(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * unlink(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/fcntl.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-void setup();
-void create_file();
-void cleanup(void) __attribute__((noreturn));
-
-
-const char *TCID="unlink06"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0};
-
-char Fname[255];
-
-/***********************************************************************
- * Main
- ***********************************************************************/
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *) NULL ) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- create_file();
-
- /*
- * Call unlink(2)
- */
- TEST(unlink(Fname));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "unlink(%s) Failed, errno=%d : %s", Fname,
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else if ( STD_FUNCTIONAL_TEST ) {
- if ( access(Fname, F_OK) != -1 ) {
- tst_resm(TFAIL,
- "unlink(%s) returned %d, but access says file still exists.",
- Fname, TEST_RETURN);
- }
- else {
- tst_resm(TPASS, "unlink(%s) returned %d", Fname, TEST_RETURN);
- }
- }
- else
- Tst_count++;
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- sprintf(Fname, "fifo_unlink%d", getpid());
-
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-
-} /* End cleanup() */
-
-/******************************************************************
- *
- ******************************************************************/
-void
-create_file()
-{
- if(mkfifo(Fname, 0777) == -1) {
- tst_brkm(TBROK, cleanup,
- "mkfifo(%s, 0777) failed errno:%d %s\n", Fname,
- errno, strerror(errno));
- }
-}
diff --git a/winsup/testsuite/winsup.api/ltp/unlink07.c b/winsup/testsuite/winsup.api/ltp/unlink07.c
deleted file mode 100644
index 133109621..000000000
--- a/winsup/testsuite/winsup.api/ltp/unlink07.c
+++ /dev/null
@@ -1,328 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : unlink07
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : unlink(2) negative testcases
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : Richard Logan
- *
- * CO-PILOT : William Roske
- *
- * DATE STARTED : 03/30/94
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1-8) See Testcases structure below.
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the unlink(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * unlink(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <sys/types.h>
-#include <sys/fcntl.h>
-#include <sys/stat.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include <sys/param.h> /* for PATH_MAX */
-#include "test.h"
-#include "usctest.h"
-
-void setup();
-void cleanup(void) __attribute__((noreturn));
-
-
-extern char *get_high_address();
-
-const char *TCID="unlink07"; /* Test program identifier. */
-int TST_TOTAL=6; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0};
-
-int longpath_setup();
-int no_setup();
-int filepath_setup();
-char Longpathname[PATH_MAX+2];
-char High_address[64];
-
-struct test_case_t {
- const char *pathname;
- const char *desc;
- int exp_errno;
- int (*setupfunc)();
-} Test_cases[] = {
- { "nonexistfile", "non-existent file", ENOENT, no_setup},
- { "", "path is empty string", ENOENT, no_setup},
- { "nefile/file", "path contains a non-existent file",
- ENOENT, no_setup },
- { High_address, "address beyond address space", EFAULT, no_setup },
-#ifndef __CYGWIN__
- { "file/file", "path contains a regular file",
- ENOTDIR, filepath_setup },
-#endif
- { High_address, "address beyond address space", EFAULT, no_setup },
- { Longpathname, "pathname too long", ENAMETOOLONG, longpath_setup },
- { (char *)-1, "negative address", EFAULT, no_setup },
- { NULL, NULL, 0, no_setup }
-};
-
-/***********************************************************************
- * Main
- ***********************************************************************/
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- const char *fname;
- const char *desc;
- int ind;
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *) NULL ) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
-
- for (ind=0; Test_cases[ind].desc != NULL; ind++ ) {
-
- fname = Test_cases[ind].pathname;
- desc = Test_cases[ind].desc;
-
- if ( fname == High_address )
- fname = get_high_address();
-
- /*
- * Call unlink(2)
- */
- TEST(unlink(fname));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- if ( STD_FUNCTIONAL_TEST ) {
- if ( TEST_ERRNO == Test_cases[ind].exp_errno )
- tst_resm(TPASS, "unlink(<%s>) Failed, errno=%d",
- desc, TEST_ERRNO);
- else
- tst_resm(TFAIL,
- "unlink(<%s>) Failed, errno=%d, expected errno:%d",
- desc, TEST_ERRNO, Test_cases[ind].exp_errno);
- }
- else
- Tst_count++;
- } else {
- tst_resm(TFAIL,
- "unlink(<%s>) returned %d, expected -1, errno:%d",
- desc, TEST_RETURN, Test_cases[ind].exp_errno);
- }
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- int ind;
-
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- for (ind=0; Test_cases[ind].desc != NULL; ind++ ) {
- Test_cases[ind].setupfunc();
- }
-
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- chmod("unwrite_dir", 0777);
- chmod("unsearch_dir", 0777);
-
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-
-} /* End cleanup() */
-
-/******************************************************************
- *
- ******************************************************************/
-int
-no_setup()
-{
- return 0;
-}
-
-/******************************************************************
- *
- ******************************************************************/
-int
-longpath_setup()
-{
- int ind;
-
- for(ind=0; ind<= PATH_MAX+1; ind++) {
- Longpathname[ind] = 'a';
- }
- return 0;
-
-}
-/******************************************************************
- *
- ******************************************************************/
-int
-filepath_setup()
-{
- int fd;
-
- if ( (fd=creat("file", 0777)) == -1 ) {
- tst_brkm(TBROK, cleanup, "creat(file) failed, errno:%d %s",
- errno, strerror(errno));
- }
- close(fd);
- return 0;
-}
-
diff --git a/winsup/testsuite/winsup.api/ltp/unlink08.c b/winsup/testsuite/winsup.api/ltp/unlink08.c
deleted file mode 100644
index e793b46f2..000000000
--- a/winsup/testsuite/winsup.api/ltp/unlink08.c
+++ /dev/null
@@ -1,432 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : unlink08
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : unlink(2) negative testcases
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 3
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : Richard Logan
- *
- * CO-PILOT : William Roske
- *
- * DATE STARTED : 03/30/94
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1-3) See Testcases structure below.
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the unlink(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * unlink(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <sys/types.h>
-#include <sys/fcntl.h>
-#include <sys/stat.h>
-#include <errno.h>
-#include <signal.h>
-#include <string.h>
-#include "test.h"
-#include "usctest.h"
-
-void setup();
-void cleanup(void) __attribute__((noreturn));
-
-
-
-const char *TCID="unlink08"; /* Test program identifier. */
-int TST_TOTAL=3; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0};
-
-int unwrite_dir_setup();
-int unsearch_dir_setup();
-int dir_setup();
-int no_setup();
-
-struct test_case_t {
- const char *pathname;
- const char *desc;
- int (*setupfunc)();
- int exp_ret; /* -1 means error, 0 means != -1 */
- int exp_errno;
-} Test_cases[] = {
- { "unwrite_dir/file", "unwritable directory", unwrite_dir_setup,
- -1, EACCES},
- { "unsearch_dir/file", "unsearchable directory", unsearch_dir_setup,
- -1, EACCES },
-#ifdef linux
- { "regdir", "directory", dir_setup, -1, EISDIR},
-#else
- { "regdir", "directory", dir_setup, -1, EPERM},
-#endif
-
- { NULL, NULL, no_setup, -1, 0 }
-};
-
-/***********************************************************************
- * Main
- ***********************************************************************/
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- const char *fname;
- const char *desc;
- int ind;
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *) NULL ) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
-
- for (ind=0; Test_cases[ind].desc != NULL; ind++ ) {
-
- fname = Test_cases[ind].pathname;
- desc = Test_cases[ind].desc;
-
- /*
- * Call unlink(2)
- */
- TEST(unlink(fname));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- if ( Test_cases[ind].exp_ret == -1 ) { /* neg test */
- if ( STD_FUNCTIONAL_TEST ) {
- if ( TEST_ERRNO == Test_cases[ind].exp_errno )
- tst_resm(TPASS, "unlink(<%s>) Failed, errno=%d",
- desc, TEST_ERRNO);
- else
- tst_resm(TFAIL,
- "unlink(<%s>) Failed, errno=%d, expected errno:%d",
- desc, TEST_ERRNO, Test_cases[ind].exp_errno);
- }
- else
- Tst_count++;
- }
- else {
- tst_resm(TFAIL, "unlink(<%s>) Failed, errno=%d",
- desc, TEST_ERRNO);
- }
- } else {
- if ( Test_cases[ind].exp_ret == -1 ) {
- tst_resm(TFAIL,
- "unlink(<%s>) returned %d, expected -1, errno:%d",
- desc, TEST_RETURN, Test_cases[ind].exp_errno);
- }
- else if ( STD_FUNCTIONAL_TEST ) {
- tst_resm(TPASS,
- "unlink(<%s>) returned %d",
- desc, TEST_RETURN);
- }
- else
- Tst_count++;
- Test_cases[ind].setupfunc(1);
- }
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- int ind;
- int postest = 0;
-
- /* capture signals */
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- if ( geteuid() == 0 ) {
- postest++;
- }
-
- for (ind=0; Test_cases[ind].desc != NULL; ind++ ) {
- if ( Test_cases[ind].exp_errno == EACCES && postest )
- Test_cases[ind].exp_ret=0; /* set as a pos test */
- Test_cases[ind].setupfunc(0);
- }
-
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- chmod("unwrite_dir", 0777);
- chmod("unsearch_dir", 0777);
-
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-
-} /* End cleanup() */
-
-/******************************************************************
- *
- ******************************************************************/
-int
-unwrite_dir_setup(flag)
-int flag;
-{
- int fd;
-
- if ( ! flag ) { /* initial setup */
- if (mkdir("unwrite_dir", 0777) == -1 ) {
- tst_brkm(TBROK, cleanup,
- "mkdir(unwrite_dir, 0777) failed, errno:%d %s",
- errno, strerror(errno));
- }
-
- if ( (fd=creat("unwrite_dir/file", 0777)) == -1 ) {
- tst_brkm(TBROK, cleanup,
- "creat(unwrite_dir/file, 0777) failed, errno:%d %s",
- errno, strerror(errno));
- }
- close(fd);
-
- if ( chmod("unwrite_dir", 0555) == -1 ) {
- tst_brkm(TBROK, cleanup,
- "chmod(unwrite_dir, 0555) failed, errno:%d %s",
- errno, strerror(errno));
- }
- }
- else { /* resetup */
- if ( chmod("unwrite_dir", 0777) == -1 ) {
- tst_brkm(TBROK, cleanup,
- "chmod(unwrite_dir, 0777) failed, errno:%d %s",
- errno, strerror(errno));
- }
-
- if ( (fd=creat("unwrite_dir/file", 0777)) == -1 ) {
- tst_brkm(TBROK, cleanup,
- "creat(unwrite_dir/file, 0777) failed, errno:%d %s",
- errno, strerror(errno));
- }
- close(fd);
-
- if ( chmod("unwrite_dir", 0555) == -1 ) {
- tst_brkm(TBROK, cleanup,
- "chmod(unwrite_dir, 0555) failed, errno:%d %s",
- errno, strerror(errno));
- }
- }
- return 0;
-}
-
-/******************************************************************
- *
- ******************************************************************/
-int
-unsearch_dir_setup(flag)
-int flag;
-{
- int fd;
-
- if ( ! flag ) { /* initial setup */
- if (mkdir("unsearch_dir", 0777) == -1 ) {
- tst_brkm(TBROK, cleanup,
- "mkdir(unsearch_dir, 0777) failed, errno:%d %s",
- errno, strerror(errno));
- }
-
- if ( (fd=creat("unsearch_dir/file", 0777)) == -1 ) {
- tst_brkm(TBROK, cleanup,
- "creat(unsearch_dir/file, 0777) failed, errno:%d %s",
- errno, strerror(errno));
- }
- close(fd);
-
- if ( chmod("unsearch_dir", 0666) == -1 ) {
- tst_brkm(TBROK, cleanup,
- "chmod(unsearch_dir, 0666) failed, errno:%d %s",
- errno, strerror(errno));
- }
- }
- else { /* resetup */
- if ( chmod("unsearch_dir", 0777) == -1 ) {
- tst_brkm(TBROK, cleanup,
- "chmod(unsearch_dir, 0777) failed, errno:%d %s",
- errno, strerror(errno));
- }
-
- if ( (fd=creat("unsearch_dir/file", 0777)) == -1 ) {
- tst_brkm(TBROK, cleanup,
- "creat(unsearch_dir/file, 0777) failed, errno:%d %s",
- errno, strerror(errno));
- }
- close(fd);
-
- if ( chmod("unsearch_dir", 0666) == -1 ) {
- tst_brkm(TBROK, cleanup,
- "chmod(unsearch_dir, 0666) failed, errno:%d %s",
- errno, strerror(errno));
- }
- }
- return 0;
-}
-
-/******************************************************************
- *
- ******************************************************************/
-int
-dir_setup(flag)
-int flag;
-{
- if (mkdir("regdir", 0777) == -1 ) {
- tst_brkm(TBROK, cleanup,
- "mkdir(unwrite_dir, 0777) failed, errno:%d %s",
- errno, strerror(errno));
- }
- return 0;
-}
-
-/******************************************************************
- *
- ******************************************************************/
-int
-no_setup(flag)
-int flag;
-{
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/ltp/vfork01.c b/winsup/testsuite/winsup.api/ltp/vfork01.c
deleted file mode 100644
index 2792ce08b..000000000
--- a/winsup/testsuite/winsup.api/ltp/vfork01.c
+++ /dev/null
@@ -1,400 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * Name: vfork01
- *
- * Test Description:
- * Fork a process using vfork() and verify that, the attribute values like
- * euid, ruid, suid, egid, rgid, sgid, umask, inode and device number of
- * root and current working directories are same as that of the parent
- * process.
- *
- * Expected Result:
- * The attribute values like euid, ruid, suid, egid, rgid, sgid, umask, inode
- * and device number of root and current working directory of the parent and
- * child processes should be equal.
- *
- * Algorithm:
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise,
- * Verify the Functionality of system call
- * if successful,
- * Issue Functionality-Pass message.
- * Otherwise,
- * Issue Functionality-Fail message.
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- * Usage: <for command-line>
- * vfork01 [-c n] [-e] [-f] [-i n] [-I x] [-p x] [-t]
- * where, -c n : Run n copies concurrently.
- * -e : Turn on errno logging.
- * -f : Turn off functionality Testing.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * History
- * 07/2001 John George
- * -Ported
- *
- * Restrictions:
- * None.
- *
- */
-
-#include <sys/types.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <string.h>
-#include <signal.h>
-#include <sys/stat.h>
-#include <sys/wait.h>
-
-#include "test.h"
-#include "usctest.h"
-
-const char *TCID="vfork01"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-int exp_enos[]={0};
-
-/* Variables to hold parent/child eff/real/saved uid/gid values */
-uid_t Peuid, Ceuid, Csuid, Psuid, Pruid, Cruid;
-gid_t Pegid, Cegid, Psgid, Csgid, Prgid, Crgid;
-mode_t Pumask,Cumask;
-
-char Pcwd_buf [PATH_MAX], Ccwd_buf [PATH_MAX];
-char *Pcwd, *Ccwd; /*
- * pathname of working directory of
- * child/parent process.
- */
-/* stat structure to hold directory/inode information for parent/child */
-struct stat StatPbuf;
-struct stat StatCbuf;
-struct stat Stat_cwd_Pbuf;
-struct stat Stat_cwd_Cbuf;
-
-void setup(); /* Main setup function of test */
-void cleanup() __attribute__((noreturn));/* cleanup function for the test */
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- pid_t cpid; /* process id of the child process */
- int exit_status; /* exit status of child process */
-
- /* Parse standard options given to run the test. */
- msg = parse_opts(ac, av, (option_t *) NULL, NULL);
- if (msg != (char *) NULL) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /* Perform global setup for test */
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /* Check looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- /* Reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call vfork(2) to create a child process without
- * fully copying the address space of parent.
- */
- TEST(vfork());
-
- /* check return code of vfork() */
- if ((cpid = TEST_RETURN) == -1) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "vfork() Failed, errno=%d : %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else if (cpid == 0) { /* Child process */
- /*
- * Perform functional verification if test
- * executed without (-f) option.
- */
- if (STD_FUNCTIONAL_TEST) {
- /*
- * Get the euid, ruid, egid, rgid, umask value
- * and the current working directory of the
- * child process
- */
-#if (linux)
- if (getresuid(&Cruid, &Ceuid, &Csuid) < 0) {
- tst_resm(TFAIL, "getresuid() fails to "
- "get real/eff./saved uid of "
- "child process");
- _exit(1);
- }
-
- if (getresgid(&Crgid, &Cegid, &Csgid) < 0) {
- tst_resm(TFAIL, "getresgid() fails to "
- "get real/eff./saved gid of "
- "child process");
- _exit(1);
- }
-#else
- Cruid = getuid ();
- Ceuid = geteuid ();
- Csuid = 0;
- Crgid = getgid ();
- Cegid = getegid ();
- Csgid = 0;
-#endif
- /*
- * Get the file mode creation mask value of
- * child process by setting value zero and
- * restore the previous mask value.
- */
- Cumask = umask(0);
-
- /*
- * Restore the process mask of child to
- * previous value.
- */
- umask(Cumask);
-
- /*
- * Get the pathname of current working
- * directory for the child process.
- */
- if ((Ccwd = (char *)getcwd(Ccwd_buf, \
- BUFSIZ)) == NULL) {
- tst_resm(TFAIL, "getcwd failed for the "
- "child process");
- _exit(1);
- }
-
- /*
- * Get the device number and the inode
- * number of "/" directory for the child
- * process.
- */
- if (stat("/", &StatCbuf) < 0) {
- tst_resm(TFAIL, "stat(2) failed to get "
- "info. of'/' in the child "
- "process");
- _exit(1);
- }
-
- /*
- * Get the device/inode number of "."
- * (working directory) for the child process.
- */
- if (stat(Ccwd, &Stat_cwd_Cbuf) < 0) {
- tst_resm(TFAIL, "stat(2) failed to get "
- "info. of working irectory in "
- "the child");
- _exit(1);
- }
-
- /* Now, do the actual comparision */
- if (Peuid != Ceuid || Pegid != Cegid || \
- Psuid != Csuid || Psgid != Csgid || \
- Pruid != Cruid || Prgid != Crgid || \
- Pumask != Cumask) {
- tst_resm(TFAIL, "Arribute values of "
- "parent and child don't match");
- _exit(1);
- } else {
- tst_resm(TINFO, "Arribute values of "
- "parent and child match");
- }
-
- /* Check for the same working directories */
- if (strcmp(Pcwd, Ccwd) != 0) {
- tst_resm(TFAIL, "Working directories "
- "of parent and child don't "
- "match");
- _exit(1);
- } else {
- tst_resm(TINFO, "Working directories "
- "of parent and child match");
- }
-
- /*
- * Check for the same device/inode number of
- * '/' directory.
- */
- if ((StatPbuf.st_ino != StatCbuf.st_ino) || \
- (StatPbuf.st_dev != StatCbuf.st_dev)) {
- tst_resm(TFAIL, "Device/inode number "
- "of parent and childs '/' "
- " don't match");
- _exit(1);
- } else {
- tst_resm(TINFO, "Device/inode number "
- "of parent and childs '/' "
- "match");
- }
-
- /*
- * Check for the same device and inode number
- * of "." (current working directory.
- */
- if ((Stat_cwd_Pbuf.st_ino != \
- Stat_cwd_Cbuf.st_ino) || \
- (Stat_cwd_Pbuf.st_dev != \
- Stat_cwd_Cbuf.st_dev)) {
- tst_resm(TFAIL, "Device/inode number "
- "of parent and childs '.' "
- "don't match");
- _exit(1);
- } else {
- tst_resm(TINFO, "Device/inode number "
- "of parent and childs '.' "
- "match");
- }
-
- /*
- * Exit with normal exit code if everything
- * fine
- */
- _exit(0);
- }
- } else { /* parent process */
- /*
- * Let the parent process wait till child completes
- * its execution.
- */
- wait(&exit_status);
-
- /* Check for the exit status of child process */
- if (WEXITSTATUS(exit_status) == 0) {
- tst_resm(TPASS, \
- "Call of vfork() successful");
- } else if (WEXITSTATUS(exit_status) == 1) {
- tst_resm(TFAIL, \
- "Child process exited abnormally");
- }
- }
- Tst_count++; /* incr. TEST_LOOP counter */
- } /* End for TEST_LOOPING */
-
- /* Call cleanup() to undo setup done for the test. */
- cleanup();
- /*NOTREACHED*/
-
-} /* End main */
-
-/*
- * void
- * setup() - performs all ONE TIME setup for this test.
- * This function gets real/effective/saved uid/gid, umask, the device/inode
- * number of '/' and current working directory for the parent process.
- */
-void
-setup()
-{
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- /*
- * Get the euid, ruid, egid, rgid, umask value
- * and the current working directory of the parent process.
- */
-#if (linux)
- if (getresuid(&Pruid, &Peuid, &Psuid) < 0) {
- tst_brkm(TFAIL, cleanup, "getresuid() fails to get "
- "real/eff./saved uid of parent");
- }
-
- if (getresgid(&Prgid, &Pegid, &Psgid) < 0) {
- tst_brkm(TFAIL, cleanup, "getresgid() fails to get "
- "real/eff./saved gid of parent");
- }
-#else
- Pruid = getuid ();
- Peuid = geteuid ();
- Psuid = 0;
- Prgid = getgid ();
- Pegid = getegid ();
- Psgid = 0;
-#endif
- /* Get the process file mode creation mask by setting value 0 */
- Pumask = umask(0);
- umask(Pumask); /*
- * Restore the mask value of the
- * process.
- */
- /*
- * Get the pathname of current working directory of the parent
- * process.
- */
- if ((Pcwd = (char *) getcwd(Pcwd_buf, BUFSIZ)) == NULL) {
- tst_brkm(TFAIL, cleanup,
- "getcwd failed for the parent process");
- }
-
- /*
- * Get the device and inode number of root directory for the
- * parent process.
- */
- if (stat("/", &StatPbuf) == -1) {
- tst_brkm(TFAIL, cleanup, "stat(2) failed to get info. of '/' "
- "in parent process");
- }
-
- /*
- * Get the device number and the inode number of "." (current-
- * working directory) for the parent process.
- */
- if (stat(Pcwd, &Stat_cwd_Pbuf) < 0) {
- tst_brkm(TFAIL, cleanup, "stat(2) failed to get info. of "
- "working directory in parent process");
- }
-} /* End setup() */
-
-/*
- * void
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- */
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
diff --git a/winsup/testsuite/winsup.api/ltp/wait02.c b/winsup/testsuite/winsup.api/ltp/wait02.c
deleted file mode 100644
index a7de67a28..000000000
--- a/winsup/testsuite/winsup.api/ltp/wait02.c
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : wait02
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for wait(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) wait(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the wait(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * wait(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-
-const char *TCID="wait02"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0};
-
-int fork_pid, ret_code;
-void trapper();
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /* create a child to wait for */
- if ((fork_pid=fork()) == -1) {
- tst_brkm(TBROK, cleanup, "fork() Failure. errno=%d : %s", errno, strerror(errno));
- } else if (fork_pid == 0) {
- /* Child, sleep a second then exit */
- sleep(1);
- exit(1);
- }
-
- /* Parent, wait for child to die */
- TEST(wait(&ret_code));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "wait(1) Failed, errno=%d : %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "wait(&ret_code) returned %d", TEST_RETURN);
- }
- }
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
-
-
diff --git a/winsup/testsuite/winsup.api/ltp/wait401.c b/winsup/testsuite/winsup.api/ltp/wait401.c
deleted file mode 100644
index 51f71da55..000000000
--- a/winsup/testsuite/winsup.api/ltp/wait401.c
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * NAME
- * wait401.c
- *
- * DESCRIPTION
- * wait401 - check that a call to wait4() correctly waits for a child
- * process to exit
- *
- * ALGORITHM
- * loop if that option was specified
- * fork a child.
- * issue the system call
- * check the return value
- * if return value == -1
- * issue a FAIL message, break remaining tests and cleanup
- * if we are doing functional testing
- * issue a PASS message if the wait4 call returned the child's pid
- * else
- * issue a FAIL message
- * call cleanup
- *
- * USAGE: <for command-line>
- * wait401 [-c n] [-f] [-e] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -f : Turn off functionality Testing.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * History
- * 07/2001 John George
- * -Ported
- *
- * Restrictions
- * none
- */
-
-#include "test.h"
-#include "usctest.h"
-
-#include <errno.h>
-#define _USE_BSD
-#include <sys/types.h>
-#include <sys/resource.h>
-#include <sys/wait.h>
-
-void cleanup(void) __attribute__((noreturn));
-void setup(void);
-
-const char *TCID= "wait401()";
-int TST_TOTAL = 1;
-extern int Tst_count;
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- pid_t pid;
- int status = 1;
- struct rusage *rusage = NULL;
-
- /* parse standard options */
- if ((msg = parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL) {
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
- }
-
- setup(); /* global setup */
-
- /* The following loop checks looping state if -i option given */
-
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- /* reset Tst_count in case we are looping */
- Tst_count = 0;
-
- /*
- * Allocate some space for the rusage structure
- */
-
- if ((rusage = (struct rusage *)malloc(sizeof(struct rusage)))
- == NULL) {
- tst_brkm(TBROK, cleanup, "malloc() failed");
- }
-
- pid = fork();
-
- if (pid == -1) {
- tst_brkm(TBROK, cleanup, "fork() failed");
- }
-
- if (pid == 0) { /* this is the child */
- /*
- * sleep for a moment to let us do the test
- */
- sleep(1);
- exit(0);
- } else { /* this is the parent */
-
- /* call wait4 with the TEST() macro */
- TEST(wait4(pid, &status, 0, rusage));
- }
-
- if (TEST_RETURN == -1) {
- tst_brkm(TFAIL, cleanup, "%s call failed - errno = %d "
- ": %s", TCID, TEST_ERRNO, strerror(TEST_ERRNO));
- }
-
- if (STD_FUNCTIONAL_TEST) {
- /*
- * The return from this call should be non-zero.
- */
- if (WIFEXITED(status) == 0) {
- tst_brkm(TFAIL, cleanup, "%s call succeeded but "
- "WIFEXITED() did not return expected value "
- "- %d", TCID, WIFEXITED(status));
- } else if (TEST_RETURN != pid) {
- tst_resm(TFAIL, "%s did not return the "
- "expected value. %d", TCID,
- TEST_RETURN);
- } else {
-
- tst_resm(TPASS, "Received child pid as expected.");
- }
- }
- tst_resm(TPASS, "%s call succeeded", TCID);
-
- /*
- * Clean up things in case we are looping.
- */
- free(rusage);
- rusage = NULL;
- }
-
- cleanup();
-
- /*NOTREACHED*/
-}
-
-/*
- * setup() - performs all the ONE TIME setup for this test.
- */
-void
-setup(void)
-{
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-}
-
-/*
- * cleanup() - performs all the ONE TIME cleanup for this test at completion
- * or premature exit.
- */
-void
-cleanup(void)
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-}
-
diff --git a/winsup/testsuite/winsup.api/ltp/wait402.c b/winsup/testsuite/winsup.api/ltp/wait402.c
deleted file mode 100644
index 30f7500ac..000000000
--- a/winsup/testsuite/winsup.api/ltp/wait402.c
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * NAME
- * wait402.c
- *
- * DESCRIPTION
- * wait402 - check for ECHILD errno when using an illegal pid value
- *
- * ALGORITHM
- * loop if that option was specified
- * issue the system call with an illegal pid value
- * check the errno value
- * issue a PASS message if we get ECHILD
- * otherwise, the tests fails
- * issue a FAIL message
- * break any remaining tests
- * call cleanup
- *
- * USAGE: <for command-line>
- * wait402 [-c n] [-e] [-i n] [-I x] [-p x] [-t]
- * where, -c n : Run n copies concurrently.
- * -e : Turn on errno logging.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * History
- * 07/2001 John George
- * -Ported
- *
- * Restrictions
- * none
- */
-
-#include "test.h"
-#include "usctest.h"
-
-#include <errno.h>
-#define _USE_BSD
-#include <sys/types.h>
-#include <sys/resource.h>
-#include <sys/wait.h>
-
-/*
- * See the Makefile for comments about the following preprocessor code.
- */
-#if defined (__CYGWIN__)
-#define PID_MAX 0xfffffffd
-#else
-#ifndef _LTP_TASKS_H
-#include <linux/threads.h> /* for PID_MAX value - new */
-#else
-#include <linux/tasks.h> /* for PID_MAX value - old */
-#endif
-#endif
-
-void cleanup(void) __attribute__((noreturn));
-void setup(void);
-
-const char *TCID= "wait402()";
-int TST_TOTAL = 1;
-extern int Tst_count;
-
-int exp_enos[] = {10, 0};
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
- pid_t pid;
- pid_t epid = PID_MAX + 1;
- int status = 1;
- struct rusage *rusage=NULL;
-
- /* parse standard options */
- if ((msg = parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL) {
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
- }
-
- setup(); /* global setup */
-
- /* The following loop checks looping state if -i option given */
-
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- /* reset Tst_count in case we are looping */
- Tst_count = 0;
-
-
- /*
- * Allocate some space for the rusage structure.
- */
-
- if ((rusage = (struct rusage *)malloc(sizeof(struct rusage)))
- == NULL) {
- tst_brkm(TBROK, cleanup, "malloc() failed");
- }
-
- pid = fork();
-
- if (pid == -1) {
- tst_brkm(TBROK, cleanup, "fork() failed");
- }
-
- if (pid == 0) { /* this is the child */
- /*
- * sleep for a moment to let us do the test
- */
- sleep(1);
- exit(0);
- } else { /* this is the parent */
- /*
- * call wait4 with the TEST() macro. epid is set
- * to an illegal positive value. This should give
- * an ECHILD error.
- */
- TEST(wait4(epid, &status, 0, rusage));
- }
-
- if (TEST_RETURN == 0) {
- tst_brkm(TFAIL, cleanup, "call failed to produce expected error - errno = %d - %s", TEST_ERRNO, strerror(TEST_ERRNO));
- }
-
- TEST_ERROR_LOG(TEST_ERRNO);
-
- switch (TEST_ERRNO) {
- case ECHILD:
- tst_resm(TPASS, "received expected failure - errno = %d - %s",
- TEST_ERRNO, strerror(TEST_ERRNO));
- break;
- default:
- tst_brkm(TFAIL, cleanup, "call failed to produce expected "
- "error - errno = %d - %s", TEST_ERRNO,
- strerror(TEST_ERRNO));
- }
-
- /*
- * Clean up things in case we are looping.
- */
- if (pid > 0) {
- wait4(pid, &status, 0, rusage);
- }
- free(rusage);
- rusage = NULL;
- }
-
- cleanup();
-
- /*NOTREACHED*/
-}
-
-/*
- * setup() - performs all the ONE TIME setup for this test.
- */
-void
-setup(void)
-{
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- /* Set up the expected error numbers for -e option */
- TEST_EXP_ENOS(exp_enos);
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-}
-
-/*
- * cleanup() - performs all the ONE TIME cleanup for this test at completion
- * or premature exit.
- */
-void
-cleanup(void)
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* exit with return code appropriate for results */
- tst_exit();
-}
-
diff --git a/winsup/testsuite/winsup.api/ltp/write01.c b/winsup/testsuite/winsup.api/ltp/write01.c
deleted file mode 100644
index 355190af6..000000000
--- a/winsup/testsuite/winsup.api/ltp/write01.c
+++ /dev/null
@@ -1,250 +0,0 @@
-/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
- */
-/* $Id$ */
-/**********************************************************
- *
- * OS Test - Silicon Graphics, Inc.
- *
- * TEST IDENTIFIER : write01
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for write(2)
- *
- * PARENT DOCUMENT : usctpl01
- *
- * TEST CASE TOTAL : 1
- *
- * WALL CLOCK TIME : 1
- *
- * CPU TYPES : ALL
- *
- * AUTHOR : William Roske
- *
- * CO-PILOT : Dave Fenner
- *
- * DATE STARTED : 03/30/92
- *
- * INITIAL RELEASE : UNICOS 7.0
- *
- * TEST CASES
- *
- * 1.) write(2) returns...(See Description)
- *
- * INPUT SPECIFICATIONS
- * The standard options for system call tests are accepted.
- * (See the parse_opts(3) man page).
- *
- * OUTPUT SPECIFICATIONS
- *
- * DURATION
- * Terminates - with frequency and infinite modes.
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * RESOURCES
- * None
- *
- * ENVIRONMENTAL NEEDS
- * No run-time environmental needs.
- *
- * SPECIAL PROCEDURAL REQUIREMENTS
- * None
- *
- * INTERCASE DEPENDENCIES
- * None
- *
- * DETAILED DESCRIPTION
- * This is a Phase I test for the write(2) system call. It is intended
- * to provide a limited exposure of the system call, for now. It
- * should/will be extended when full functional tests are written for
- * write(2).
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise, Issue a PASS message.
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- * UPDATE HISTORY
- * user date description
- * ------------------------------------------------------
- * wermager 3/00 Switched sequence of calls to TEST_PAUSE
- * and tst_tmpdir() in setup().
- *
- *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
-
-#include <sys/types.h>
-#include <sys/fcntl.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-#include "test.h"
-#include "usctest.h"
-
-extern void setup();
-extern void cleanup();
-
-
-
-const char *TCID="write01"; /* Test program identifier. */
-int TST_TOTAL=1; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int exp_enos[]={0, 0};
-
-char fname[255];
-int fd;
-char buf = 'w';
-
-int
-main(int ac, char **av)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- /***************************************************************
- * parse standard options
- ***************************************************************/
- if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL ) {
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
- tst_exit();
- }
-
- /***************************************************************
- * perform global setup for test
- ***************************************************************/
- setup();
-
- /* set the expected errnos... */
- TEST_EXP_ENOS(exp_enos);
-
- /***************************************************************
- * check looping state if -c option given
- ***************************************************************/
- for (lc=0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping. */
- Tst_count=0;
-
- /*
- * Call write(2)
- */
- TEST(write(fd, &buf, 1));
-
- /* check return code */
- if ( TEST_RETURN == -1 ) {
- TEST_ERROR_LOG(TEST_ERRNO);
- tst_resm(TFAIL, "write(%s, F_CLRALF, 1) Failed, errno=%d : %s", fname,
- TEST_ERRNO, strerror(TEST_ERRNO));
- } else {
- /***************************************************************
- * only perform functional verification if flag set (-f not given)
- ***************************************************************/
- if ( STD_FUNCTIONAL_TEST ) {
- /* No Verification test, yet... */
- tst_resm(TPASS, "write(%s, F_CLRALF, 1) returned %d", fname, TEST_RETURN);
- }
- }
-
- } /* End for TEST_LOOPING */
-
- /***************************************************************
- * cleanup and exit
- ***************************************************************/
- cleanup();
-
- return 0;
-} /* End main */
-
-/***************************************************************
- * setup() - performs all ONE TIME setup for this test.
- ***************************************************************/
-void
-setup()
-{
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
-
- /* Pause if that option was specified */
- TEST_PAUSE;
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- sprintf(fname,"tfile_%d",getpid());
- if ((fd = open(fname,O_RDWR|O_CREAT,0700)) == -1) {
- tst_brkm(TBROK, cleanup,
- "open(%s, O_RDWR|O_CREAT,0700) Failed, errno=%d : %s",
- fname, errno, strerror(errno));
- }
-} /* End setup() */
-
-
-/***************************************************************
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- ***************************************************************/
-void
-cleanup()
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- /* close the file we have open */
- if (close(fd) == -1) {
- tst_resm(TWARN, "close(%s) Failed, errno=%d : %s", fname, errno, strerror(errno));
- }
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-} /* End cleanup() */
-
-
diff --git a/winsup/testsuite/winsup.api/ltp/write02.c b/winsup/testsuite/winsup.api/ltp/write02.c
deleted file mode 100644
index a5675bd6d..000000000
--- a/winsup/testsuite/winsup.api/ltp/write02.c
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * NAME
- * write02.c
- *
- * DESCRIPTION
- * Basic functionality test: does the return from write match the count
- * of the number of bytes written.
- *
- *
- * ALGORITHM
- * Create a file and write some bytes out to it.
- * Check the return count against the number returned.
- *
- * USAGE: <for command-line>
- * write02 [-c n] [-e] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -e : Turn on errno logging.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * History
- * 07/2001 John George
- * -Ported
- *
- * Restrictions
- * None
- */
-
-#include <errno.h>
-#include "test.h"
-#include "usctest.h"
-#include <fcntl.h>
-
-const char *TCID = "write02()";
-int TST_TOTAL = 1;
-extern int Tst_count;
-
-void cleanup(void) __attribute__ ((noreturn));
-void setup(void);
-
-char pfiln[40] = "";
-
-int
-main(int argc, char **argv)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- int cwrite;
- int fild;
- int iws;
- int badcount = 0;
- char pwbuf[BUFSIZ + 1];
-
- /* parse standard options */
- if ((msg = parse_opts(argc, argv, (option_t *) NULL, NULL))) {
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
- /*NOTREACHED*/
- }
-
- setup(); /* global setup for test */
-
- /* The following loop checks looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping */
- Tst_count = 0;
-
- tst_resm(TINFO, "Block 1: test to see write() returns proper "
- "write count");
-
- for (iws = 0; iws < BUFSIZ; iws++) {
- pwbuf[iws] = 'A' + (iws % 26);
- }
- pwbuf[BUFSIZ] = '\n';
-
- if ((fild = creat(pfiln, 0777)) == -1) {
- tst_brkm(TBROK, cleanup, "Can't creat Xwrit");
- /*NOTREACHED*/
- }
- for (iws = BUFSIZ; iws > 0; iws--) {
- if ((cwrite = write(fild, pwbuf, iws)) != iws) {
- TEST_ERROR_LOG(errno);
- badcount++;
- tst_resm(TINFO, "bad write count");
- }
- }
- if (badcount != 0) {
- tst_resm(TFAIL, "write() FAILED to return proper cnt");
- } else {
- tst_resm(TPASS, "write() PASSED");
- }
- tst_resm(TINFO, "block 1 passed");
- close(fild);
- }
- cleanup();
- /*NOTREACHED*/
-}
-
-/*
- * setup() - performs all ONE TIME setup for this test
- */
-void
-setup(void)
-{
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- umask(0);
-
- /* Pause if that option was specified
- * TEST_PAUSE contains the code to fork the test with the -i option.
- * You want to make sure you do this before you create your temporary
- * directory.
- */
- TEST_PAUSE;
-
- /* make a temp directory and cd to it */
- tst_tmpdir();
-
- sprintf(pfiln, "./write1.%d", getpid());
-}
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at completion or
- * premature exit.
- */
-void
-cleanup(void)
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- unlink(pfiln);
-
- /* Remove tmp dir and all files in it */
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
-}
diff --git a/winsup/testsuite/winsup.api/ltp/write03.c b/winsup/testsuite/winsup.api/ltp/write03.c
deleted file mode 100644
index 7d6f1f945..000000000
--- a/winsup/testsuite/winsup.api/ltp/write03.c
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
- *
- * Copyright (c) International Business Machines Corp., 2001
- *
- * 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
- */
-
-/*
- * NAME
- * write03.c
- *
- * DESCRIPTION
- * Testcase to check that write(2) doesn't corrupt a file when it fails
- *
- * ALGORITHM
- * Create a file for writing, write 100 bytes to it. Then make write(2)
- * fail with some erroneous parameter, close the fd. Then reopen the
- * file in RDONLY mode, and read the contents of the file. Compare the
- * buffers, to see whether they are same.
- *
- * USAGE: <for command-line>
- * write03 [-c n] [-e] [-i n] [-I x] [-P x] [-t]
- * where, -c n : Run n copies concurrently.
- * -e : Turn on errno logging.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * History
- * 07/2001 John George
- * -Ported
- *
- * Restrictions
- * NONE
- */
-
-#include <string.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <test.h>
-#include <usctest.h>
-
-/* 0 terminated list of expected errnos */
-int exp_enos[] = {14,0};
-
-const char *TCID = "write03";
-int TST_TOTAL = 1;
-extern int Tst_count;
-
-void setup(void);
-void cleanup(void) __attribute__((noreturn));
-
-int fd = -1;
-char filename[100];
-
-int
-main(int argc, char **argv)
-{
- int lc; /* loop counter */
- const char *msg; /* message returned from parse_opts */
-
- char wbuf[BUFSIZ], rbuf[BUFSIZ];
-
- /* parse standard options */
- if ((msg = parse_opts(argc, argv, (option_t *)NULL, NULL)) !=
- (char *)NULL) {
- tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
- /*NOTREACHED*/
- }
-
- /* global setup */
- setup();
-
- /* The following loop checks looping state if -i option given */
- for (lc = 0; TEST_LOOPING(lc); lc++) {
-
- /* reset Tst_count in case we are looping */
- Tst_count = 0;
-
- tst_resm(TINFO, "Enter Block 1: test to check if write "
- "corrupts the file when write fails");
-
- fd = creat(filename, 0644);
- if (fd < 0) {
- tst_resm(TBROK, "creating a new file failed");
- cleanup();
- /*NOTREACHED*/
- }
-
- (void)memset(wbuf, '0', 100);
-
- if (write(fd, wbuf, 100) == -1) {
- tst_resm(TFAIL, "failed to write to %s", filename);
- cleanup();
- /*NOTREACHED*/
- }
-
- if (write(fd, (void *)-1, 100) != -1) {
- tst_resm(TFAIL, "write(2) failed to fail");
- cleanup();
- /*NOTREACHED*/
- }
- TEST_ERROR_LOG(errno);
- close(fd);
- fd = -1;
-
- if ((fd = open(filename, O_RDONLY)) == -1) {
- tst_resm(TBROK, "open(2) failed, errno: %d", errno);
- cleanup();
- /*NOTREACHED*/
- }
-
- if (read(fd, rbuf, 100) == -1) {
- tst_resm(TBROK, "read(2) failed, errno: %d", errno);
- cleanup();
- /*NOTREACHED*/
- }
-
- if (memcmp(wbuf, rbuf, 100) == 0) {
- tst_resm(TPASS, "failure of write(2) didnot corrupt "
- "the file");
- } else {
- tst_resm(TFAIL, "failure of write(2) corrupted the "
- "file");
- }
- tst_resm(TINFO, "Exit block 1");
- }
- cleanup();
- /*NOTREACHED*/
-}
-
-/*
- * setup() - performs all ONE TIME setup for this test
- */
-void
-setup(void)
-{
- /* capture signals */
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- /* Set up the expected error numbers for -e option */
- TEST_EXP_ENOS(exp_enos);
-
- /* Pause if that option was specified
- * TEST_PAUSE contains the code to fork the test with the -i option.
- * You want to make sure you do this before you create your temporary
- * directory.
- */
- TEST_PAUSE;
-
- /* Create a unique temporary directory and chdir() to it. */
- tst_tmpdir();
-
- sprintf(filename, "./write03.%d", getpid());
-}
-
-/*
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit
- */
-void
-cleanup(void)
-{
- /*
- * print timing stats if that option was specified.
- * print errno log if that option was specified.
- */
- TEST_CLEANUP;
-
- if (fd >= 0)
- close (fd);
-
- unlink(filename);
- tst_rmdir();
-
- /* exit with return code appropriate for results */
- tst_exit();
- /*NOTREACHED*/
-}
diff --git a/winsup/testsuite/winsup.api/mmaptest01.c b/winsup/testsuite/winsup.api/mmaptest01.c
deleted file mode 100644
index fe3226d1b..000000000
--- a/winsup/testsuite/winsup.api/mmaptest01.c
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- Copyright 2001 Free Software Foundation, Inc.
- Written by Michael Chastain, <chastain@redhat.com>
- Changes by Corinna Vinschen, <corinna@vinschen.de>:
- - Using mkstemp to generate filenames.
- - Adding tests
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA.
-
- This program demonstrates a bug in cygwin's mmap.
- I open one file, mmap it, and close it.
- I open a different file, mmap it, and close it.
-
- The second file re-uses the file handle (which is OK),
- but then it re-uses the buffer as well! Ouch!
-
- This bug occurs on cygwin1.dll dated 2001-01-31.
- It causes gnu cpp to screw up its include file buffers.
-
- Compile with "gcc -o y1 y1.c".
-
- Output from a bad cygwin1.dll:
-
- y1.txt: 3 0x4660000 y1 y1 y1 y1 y1 y1 y1
- y2.txt: 3 0x4660000 y1 y1 y1 y1 y1 y1 y1
-
- Output from a good cygwin1.dll:
-
- y1.txt: 3 0x14060000 y1 y1 y1 y1 y1 y1 y1
- y2.txt: 3 0x14070000 y2 y2 y2 y2 y2 y2 y2
-
- Output from Red Hat Linux 7:
-
- y1.txt: 3 0x40017000 y1 y1 y1 y1 y1 y1 y1
- y2.txt: 3 0x40018000 y2 y2 y2 y2 y2 y2 y2
- */
-
-#include <sys/mman.h>
-#include <fcntl.h>
-#include <string.h>
-
-#include "test.h"
-#include "usctest.h"
-
-const char *TCID = "mmaptest01"; /* Test program identifier. */
-int TST_TOTAL = 7; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-/* some systems have O_BINARY and some do not */
-#ifndef O_BINARY
-#define O_BINARY 0
-#endif
-
-/* filler for file 1 */
-char const line1 [] = "y1 y1 y1 y1 y1 y1 y1 y1 y1 y1 y1 y1 y1 y1 y1 y1 y1\n";
-#define size1 (sizeof(line1) - 1)
-#define count1 ((4096 / size1) + 1)
-
-/* filler for file 2 */
-char const line2 [] = "y2 y2 y2 y2 y2 y2 y2 y2 y2 y2 y2 y2 y2 y2 y2 y2 y2\n";
-#define size2 (sizeof(line2) - 1)
-#define count2 ((4096 / size2) + 1)
-
-int main ()
-{
- char fnam1[32];
- char fnam2[32];
-
- int fd1;
- char * buf1;
-
- int fd2;
- char * buf2;
-
- char buf3[20];
-
- unsigned i;
-
- strcpy (fnam1, "mmaptest01.1.XXXXXX");
- strcpy (fnam2, "mmaptest01.2.XXXXXX");
-
- /* create file 1 */
- //fd1 = open (fnam1, O_WRONLY|O_CREAT|O_TRUNC|O_BINARY, 0644);
- fd1 = mkstemp (fnam1);
- for (i = 0; i < count1; i++)
- write (fd1, line1, size1);
- close (fd1);
-
- /* create file 2 */
- //fd2 = open (fnam2, O_WRONLY|O_CREAT|O_TRUNC|O_BINARY, 0644);
- fd2 = mkstemp (fnam2);
- for (i = 0; i < count2; i++)
- write (fd2, line2, size2);
- close (fd2);
-
- /* mmap file 1 */
- fd1 = open (fnam1, O_RDONLY | O_BINARY, 0644);
- buf1 = mmap (0, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE, fd1, 0);
- close (fd1);
-
- /* mmap file 2 */
- fd2 = open (fnam2, O_RDONLY | O_BINARY, 0644);
- buf2 = mmap (0, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE, fd2, 0);
- close (fd2);
-
- /* the buffers have to be different */
- Tst_count = 0;
- tst_resm (buf1 == buf2 || !memcmp (buf1, buf2, 20) ? TFAIL : TPASS,
- "mmap uses unique buffers when mapping different already closed files");
- munmap (buf2, 4096);
-
- /* mmap file 1 twice with MAP_PRIVATE */
- fd2 = open (fnam1, O_RDONLY | O_BINARY, 0644);
- buf2 = mmap (0, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE, fd2, 0);
- close (fd2);
-
- tst_resm (buf1 == buf2 ? TFAIL : TPASS,
- "mmap uses different buffers on MAP_PRIVATE mapping");
-
- tst_resm (memcmp (buf1, buf2, 20) ? TFAIL : TPASS,
- "two private buffers of the same file are identical");
-
- buf1[0] = 0x7f;
- tst_resm (!memcmp (buf1, buf2, 20) ? TFAIL : TPASS,
- "changes are private in MAP_PRIVATE mappings");
-
- munmap (buf1, 4096);
- munmap (buf2, 4096);
-
- /* mmap file 1 twice with MAP_SHARED */
- fd1 = open (fnam1, O_RDWR | O_BINARY, 0644);
- buf1 = mmap (0, 4096, PROT_READ|PROT_WRITE, MAP_SHARED, fd1, 0);
- close (fd1);
-
- fd2 = open (fnam1, O_RDWR | O_BINARY, 0644);
- buf2 = mmap (0, 4096, PROT_READ|PROT_WRITE, MAP_SHARED, fd2, 0);
- close (fd2);
-
- tst_resm (memcmp (buf1, buf2, 20) ? TFAIL : TPASS,
- "two shared buffers of the same file are identical");
-
- buf1[0] = 0x7f;
- tst_resm (memcmp (buf1, buf2, 20) ? TFAIL : TPASS,
- "changes are shared between MAP_SHARED mappings of the same file");
- if (buf1 == buf2) /* Win 9x weirdness */
- msync (buf2, 4096, MS_SYNC);
- else
- munmap (buf2, 4096);
-
- fd2 = open (fnam1, O_RDWR | O_BINARY, 0644);
- memset (buf3, 0, 20);
- read (fd2, buf3, 20);
- close (fd2);
-
- tst_resm (memcmp (buf1, buf3, 20) ? TFAIL : TPASS,
- "changes are propagated to the mapped file on MAP_SHARED mapping");
-
- munmap (buf1, 4096);
- unlink (fnam1);
- unlink (fnam2);
- tst_exit ();
-}
-
diff --git a/winsup/testsuite/winsup.api/mmaptest02.c b/winsup/testsuite/winsup.api/mmaptest02.c
deleted file mode 100644
index bec7c392c..000000000
--- a/winsup/testsuite/winsup.api/mmaptest02.c
+++ /dev/null
@@ -1,190 +0,0 @@
-#include <sys/types.h>
-#include <sys/mman.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <signal.h>
-#include <setjmp.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <errno.h>
-#include <string.h>
-
-sigset_t unblock_sigsegv;
-jmp_buf r;
-size_t pg;
-
-int fd;
-
-/* Checks behaviour of anonymous mmap.
-
- test_1: If we map a 2-page region and unmap its second page, the first page
- must remain.
-
- test_2: If we map a 2-page region and unmap its first page, the second
- page must remain.
-
- test_3: If we map two consecutive 1-page regions and unmap them both with
- one munmap, both must go away.
-*/
-
-void
-perror_exit (const char *str, int code)
-{
- printf ("%s: %s\n", str, strerror (errno));
- exit (code);
-}
-
-void
-anonmap_init ()
-{
- sigemptyset (&unblock_sigsegv);
- sigaddset (&unblock_sigsegv, SIGSEGV);
- pg = getpagesize ();
- fd = open ("/dev/zero", O_RDWR);
-}
-
-char *
-anonmap (size_t size)
-{
- return (char *) mmap (0, size, PROT_READ|PROT_WRITE, MAP_PRIVATE, fd, 0);
-}
-
-void
-anonfree (char *loc, size_t size)
-{
- munmap (loc, size);
-}
-
-void
-sigsegv (int unused)
-{
- sigprocmask (SIG_UNBLOCK, &unblock_sigsegv, 0);
- longjmp (r, 1);
-}
-
-int
-compare_pointers (const void *a, const void *b)
-{
- const char *x = *(const char *const *)a;
- const char *y = *(const char *const *)b;
-
- if (x > y)
- return 1;
- if (x < y)
- return -1;
- return 0;
-}
-
-void
-test_1 ()
-{
- char *x = anonmap (pg * 2);
- if (x == (char *)MAP_FAILED)
- perror_exit ("test 1 mmap", 1);
-
- signal (SIGSEGV, sigsegv);
- if (setjmp (r))
- perror_exit ("test 1 fault", 2);
-
- x[0] = 1;
- x[pg] = 1;
-
- anonfree (x + pg, pg);
- x[0] = 2;
-
- if (setjmp (r) == 0)
- {
- x[pg] = 1;
- perror_exit ("test 1 no fault", 3);
- }
-}
-
-void
-test_2 ()
-{
- char *x = anonmap (pg * 2);
- if (x == (char *)MAP_FAILED)
- perror_exit ("test 2 mmap", 4);
-
- signal (SIGSEGV, sigsegv);
- if (setjmp (r))
- perror_exit ("test 2 fault", 5);
-
- x[0] = 1;
- x[pg] = 1;
-
- anonfree (x, pg);
- x[pg] = 2;
-
- if (setjmp (r) == 0)
- {
- x[0] = 1;
- perror_exit ("test 2 no fault", 6);
- }
-}
-
-void
-test_3 ()
-{
- char *x[10];
- char *y;
- int i;
-
- /* There's no way to guarantee we get consecutive pages from the OS. The
- approach taken here is to allocate ten of them, sort the list, and
- look for consecutive pages. */
- for (i = 0; i < 10; i++)
- {
- x[i] = anonmap (pg);
- if (x[i] == (char *)MAP_FAILED)
- perror_exit ("test 3 mmap 1", 7);
- }
- qsort (x, 10, sizeof (char *), compare_pointers);
-
- y = 0;
- for (i = 0; i < 9; i++)
- if (x[i] + pg == x[i+1])
- {
- y = x[i];
- break;
- }
- if (y == 0)
- {
- fputs ("test 3: couldn't get two consecutive pages, giving up\n", stdout);
- exit (65);
- }
-
- signal (SIGSEGV, sigsegv);
- if (setjmp (r))
- perror_exit ("test 3 fault", 8);
-
- y[0] = 1;
- y[pg] = 1;
-
- anonfree (y, pg * 2);
-
- if (setjmp (r) == 0)
- {
- y[0] = 1;
- perror_exit ("test 3 no fault 1", 9);
- }
-
- signal (SIGSEGV, sigsegv);
- if (setjmp (r) == 0)
- {
- y[pg] = 1;
- perror_exit ("test 3 no fault 2", 10);
- }
-}
-
-int
-main ()
-{
- anonmap_init();
-
- test_1();
- test_2();
- test_3();
-
- exit(0);
-}
diff --git a/winsup/testsuite/winsup.api/mmaptest03.c b/winsup/testsuite/winsup.api/mmaptest03.c
deleted file mode 100644
index 8046f0bf8..000000000
--- a/winsup/testsuite/winsup.api/mmaptest03.c
+++ /dev/null
@@ -1,154 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <signal.h>
-#include <setjmp.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <sys/stat.h>
-#include <sys/mman.h>
-#include <sys/wait.h>
-#include <errno.h>
-#include <string.h>
-
-/* - Checks if mapping of already closed file survives fork()
- - Checks if mapping the same region of the same file twice
- is done correctly.
-*/
-
-sigset_t unblock_sigsegv;
-jmp_buf r;
-
-static const char *msg;
-static const char *what;
-/* filler for file */
-char const line[] = "y1 y1 y1 y1 y1 y1 y1 y1 y1 y1 y1 y1 y1 y1 y1 y1 y1";
-
-void
-perror_exit (const char *str)
-{
- printf ("%s: %s\n", str, strerror (errno));
- fflush (stdout);
- exit (1);
-}
-
-void
-sigsegv (int unused)
-{
- sigprocmask (SIG_UNBLOCK, &unblock_sigsegv, 0);
- if (msg)
- {
- char buf[132];
- sprintf (buf, "%s %s\n", what, msg);
- write (1, buf, strlen (buf));
- msg = NULL;
- }
- longjmp (r, 1);
-}
-
-int
-main(int argc, char **argv)
-{
- int fd, status;
- struct stat statbuf;
- volatile char c, *buf1, *buf2;
- pid_t pid;
-
- /* Create data file */
- if ((fd = open("y.txt", O_RDWR | O_CREAT | O_TRUNC, 0644)) == -1)
- perror_exit ("Can't create data file");
- write (fd, line, sizeof(line) - 1);
- close (fd);
-
- /* Open data file */
- if ((fd = open("y.txt", O_RDONLY)) == -1)
- perror_exit ("Can't open data file");
-
- if (fstat(fd, &statbuf) < 0)
- perror_exit ("fstat failed");
-
- if (!statbuf.st_size)
- perror_exit ("filesize is 0");
-
- if ((buf1 = mmap(NULL, statbuf.st_size, PROT_READ, MAP_SHARED, fd, 0))
- == MAP_FAILED)
- perror_exit ("mmap 1 failed");
-
- close(fd);
-
- /* Open data file a second time */
- if ((fd = open("y.txt", O_RDONLY)) == -1)
- perror_exit ("Can't open data file in second run");
-
- if ((buf2 = mmap(NULL, statbuf.st_size, PROT_READ, MAP_SHARED, fd, 0))
- == MAP_FAILED)
- perror_exit ("mmap 2 failed");
-
- close(fd);
-
- sigemptyset (&unblock_sigsegv);
- sigaddset (&unblock_sigsegv, SIGSEGV);
- signal (SIGSEGV, sigsegv);
-
- if (setjmp (r))
- perror_exit ("SEGV in fork");
-
- if ((pid = fork()))
- {
- // write (1, "continuing in parent\n", strlen ("continuing in parent\n"));
- what = "parent";
- }
- else
- {
- // write (1, "continuing in child\n", strlen ("continuing in child\n"));
- what = "child";
- }
-
- if (pid == -1)
- perror_exit ("fork failed");
-
- if (setjmp (r))
- perror_exit (pid ? "SEGV in parent" : "SEGV in child");
-
- msg = "testing buf1";
- c = buf1[0];
- msg = "testing buf2";
- c = buf2[0];
-
- if (setjmp (r))
- perror_exit (pid ? "SEGV in parent's munmap" : "SEGV in child's munmap");
-
- if (munmap((void *) buf1, statbuf.st_size))
- perror_exit (pid ? "munmap failed in parent" : "munmap failed in child");
-
- if (setjmp (r) == 0)
- {
- msg = "testing buf1 after unmap";
- c = buf1[0];
- perror_exit (pid ? "no SEGV in parent after munmap" : "no SEGV in child after munmap");
- }
-
- if (setjmp (r))
- perror_exit (pid ? "SEGV in parent after munmap" : "SEGV in child after munmap");
-
- msg = "testing buf2 again";
- c = buf2[0];
-
- if (setjmp (r))
- perror_exit (pid ? "SEGV in parent's munmap" : "SEGV in child's munmap");
-
- if (munmap((void *) buf2, statbuf.st_size))
- perror_exit (pid ? "munmap failed in parent" : "munmap failed in child");
-
- if (pid)
- {
- waitpid (pid, &status, 0);
- unlink ("y.txt");
- if (!WIFEXITED (status) || WEXITSTATUS (status))
- {
- printf ("forked process exited with status %p\n", (char *) status);
- return 1;
- }
- }
-
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/mmaptest04.c b/winsup/testsuite/winsup.api/mmaptest04.c
deleted file mode 100644
index 52302bae1..000000000
--- a/winsup/testsuite/winsup.api/mmaptest04.c
+++ /dev/null
@@ -1,103 +0,0 @@
-#include <sys/types.h>
-#include <fcntl.h>
-#include <sys/mman.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <stdio.h>
-
-#ifndef O_BINARY
-#define O_BINARY 0
-#endif
-
-int
-main ()
-{
- char *data, *data2 = NULL, *data3;
- int i, pagesize;
- int fd;
-
- pagesize = 65536; //getpagesize();
-
- /*
- * First, make a file with some known garbage in it.
- */
- data = (char *) malloc (pagesize);
- if (!data)
- exit (1);
- for (i = 0; i < pagesize; ++i)
- *(data + i) = rand ();
- umask (0);
- fd = open ("conftestmmap", O_CREAT | O_TRUNC | O_WRONLY | O_BINARY, 0600);
- if (fd < 0)
- {
- printf ("creat: %d\n", errno);
- exit (1);
- }
- if (write (fd, data, pagesize) != pagesize)
- {
- printf ("write: %d\n", errno);
- exit (1);
- }
- close (fd);
-
- /*
- * Next, try to mmap the file.
- */
- fd = open ("conftestmmap", O_RDWR | O_BINARY);
- if (fd < 0)
- {
- printf ("write: %d\n", errno);
- exit (1);
- }
- if ((data2 = mmap (data2, pagesize, PROT_READ | PROT_WRITE,
- MAP_PRIVATE, fd, 0L)) == MAP_FAILED)
- {
- printf ("mmap: %d\n", errno);
- exit (1);
- }
- for (i = 0; i < pagesize; ++i)
- if (*(data + i) != *(data2 + i))
- {
- printf ("check-if: %d\n", errno);
- exit (1);
- }
-
- /*
- * Finally, make sure that changes to the mapped area
- * do not percolate back to the file as seen by read().
- * (This is a bug on some variants of i386 svr4.0.)
- */
- for (i = 0; i < pagesize; ++i)
- *(data2 + i) = *(data2 + i) + 1;
- data3 = (char *) malloc (pagesize);
- if (!data3)
- {
- printf ("malloc2: %d\n", errno);
- exit (1);
- }
- if (read (fd, data3, pagesize) != pagesize)
- {
- printf ("read: %d\n", errno);
- exit (1);
- }
- for (i = 0; i < pagesize; ++i)
- if (*(data + i) != *(data3 + i))
- {
- printf ("check-if2: %d\n", errno);
- exit (1);
- }
- if (msync (data2, pagesize, MS_SYNC))
- {
- printf ("msync: %d\n", errno);
- exit (1);
- }
- if (munmap (data2, pagesize))
- {
- printf ("munmap: %d\n", errno);
- exit (1);
- }
- close (fd);
- unlink ("conftestmmap");
- exit (0);
-}
diff --git a/winsup/testsuite/winsup.api/msgtest.c b/winsup/testsuite/winsup.api/msgtest.c
deleted file mode 100644
index e002a7fda..000000000
--- a/winsup/testsuite/winsup.api/msgtest.c
+++ /dev/null
@@ -1,348 +0,0 @@
-/*-
- * Copyright (c) 1999 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility,
- * NASA Ames Research Center.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the NetBSD
- * Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * Obtained from: $NetBSD: msgtest.c,v 1.7 2002/07/20 08:36:25 grant Exp $
- * $FreeBSD: /repoman/r/ncvs/src/tools/regression/sysvmsg/msgtest.c,v 1.1 2002/08/15 06:34:37 alfred Exp $
- */
-
-/*
- * Test the SVID-compatible Message Queue facility.
- */
-
-/*
- * CV, 2003-11-17: Add to Cygwin testsuite.
- */
-#include <sys/param.h>
-#include <sys/ipc.h>
-#include <sys/msg.h>
-#include <sys/wait.h>
-
-#include <err.h>
-#include <errno.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-
-#include "test.h"
-#include "usctest.h"
-
-const char *TCID = "msgtest"; /* Test program identifier. */
-int TST_TOTAL = 31; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-void print_msqid_ds (struct msqid_ds *, mode_t);
-void sigsys_handler(int);
-void sigchld_handler (int);
-void cleanup (void);
-void receiver (void);
-
-#define MESSAGE_TEXT_LEN 255
-
-/*
- * Define it as test_mymsg because we already have struct mymsg and we dont
- * want to conflict with it. Also, regression fails when the default mymsg
- * struct is used, because mtext[] array is '1', so the passed string cannot
- * be processed.
- */
-struct test_mymsg {
- long mtype;
- char mtext[MESSAGE_TEXT_LEN];
-};
-
-const char *m1_str = "California is overrated.";
-const char *m2_str = "The quick brown fox jumped over the lazy dog.";
-
-#define MTYPE_1 1
-#define MTYPE_1_ACK 2
-
-#define MTYPE_2 3
-#define MTYPE_2_ACK 4
-
-int sender_msqid = -1;
-pid_t child_pid;
-
-key_t msgkey;
-
-int
-main(int argc, char *argv[])
-{
- struct sigaction sa;
- struct msqid_ds m_ds;
- struct test_mymsg m;
- sigset_t sigmask;
-
- Tst_count = 0;
-
- /*
- * Install a SIGSYS handler so that we can exit gracefully if
- * System V Message Queue support isn't in the kernel.
- */
- sa.sa_handler = sigsys_handler;
- sigemptyset(&sa.sa_mask);
- sa.sa_flags = 0;
- if (sigaction(SIGSYS, &sa, NULL) == -1)
- tst_brkm (TBROK, cleanup, "sigaction SIGSYS");
-
- /*
- * Install and SIGCHLD handler to deal with all possible exit
- * conditions of the receiver.
- */
- sa.sa_handler = sigchld_handler;
- sigemptyset(&sa.sa_mask);
- sa.sa_flags = 0;
- if (sigaction(SIGCHLD, &sa, NULL) == -1)
- tst_brkm (TBROK, cleanup, "sigaction SIGCHLD");
-
- msgkey = ftok("/", 4160);
- tst_resm (msgkey == (key_t)-1 ? TFAIL : TPASS,
- "ftok(\"/\") returns valid value");
-
- /*
- * Initialize child_pid to ourselves to that the cleanup function
- * works before we create the receiver.
- */
- child_pid = getpid();
-
- sender_msqid = msgget(msgkey, IPC_CREAT | 0640);
- tst_resm (sender_msqid == -1 ? TFAIL : TPASS, "sender calls msgget");
-
- tst_resm (msgctl(sender_msqid, IPC_STAT, &m_ds) == -1 ? TFAIL : TPASS,
- "msgctl IPC_STAT");
-
- print_msqid_ds(&m_ds, 0640);
-
- m_ds.msg_perm.mode = (m_ds.msg_perm.mode & ~0777) | 0600;
-
- tst_resm (msgctl(sender_msqid, IPC_SET, &m_ds) == -1 ? TFAIL : TPASS,
- "msgctl IPC_SET");
-
- bzero(&m_ds, sizeof m_ds);
-
- tst_resm (msgctl(sender_msqid, IPC_STAT, &m_ds) == -1 ? TFAIL : TPASS,
- "msgctl IPC_STAT");
-
- tst_resm ((m_ds.msg_perm.mode & 0777) != 0600 ? TFAIL : TPASS,
- "IPC_SET of mode holds");
-
- print_msqid_ds(&m_ds, 0600);
-
- switch ((child_pid = fork())) {
- case -1:
- tst_brkm (TBROK, cleanup, "fork");
- /* NOTREACHED */
-
- case 0:
- tst_resm (TPASS, "fork");
- receiver();
- break;
-
- default:
- Tst_count += 8;
- break;
- }
-
- /*
- * Send the first message to the receiver and wait for the ACK.
- */
- m.mtype = MTYPE_1;
- strcpy(m.mtext, m1_str);
- tst_resm (msgsnd(sender_msqid, &m, sizeof(m), 0) == -1 ? TFAIL : TPASS,
- "sender: msgsnd 1");
-
- tst_resm (msgrcv(sender_msqid, &m, sizeof(m), MTYPE_1_ACK, 0)
- != sizeof(m) ? TFAIL : TPASS, "sender: msgrcv 1 ack");
-
- print_msqid_ds(&m_ds, 0600);
-
- /*
- * Send the second message to the receiver and wait for the ACK.
- */
- m.mtype = MTYPE_2;
- strcpy(m.mtext, m2_str);
- tst_resm (msgsnd(sender_msqid, &m, sizeof(m), 0) == -1 ? TFAIL : TPASS,
- "sender: msgsnd 2");
-
- tst_resm (msgrcv(sender_msqid, &m, sizeof(m), MTYPE_2_ACK, 0)
- != sizeof(m) ? TFAIL : TPASS, "sender: msgrcv 2 ack");
-
- /*
- * Suspend forever; when we get SIGCHLD, the handler will exit.
- */
- sigemptyset(&sigmask);
- (void) sigsuspend(&sigmask);
-
- /*
- * ...and any other signal is an unexpected error.
- */
- tst_brkm (TBROK, cleanup, "sender: received unexpected signal");
- exit (1);
-}
-
-void
-sigsys_handler(int signo)
-{
-
- tst_brkm (TBROK, cleanup,
- "System V Message Queue support is not present in the kernel");
-}
-
-void
-sigchld_handler(int signo)
-{
- struct msqid_ds m_ds;
- int cstatus;
-
- /*
- * Reap the child; if it exited successfully, then the test passed!
- */
- if (waitpid(child_pid, &cstatus, 0) != child_pid)
- tst_brkm (TBROK, cleanup, "waitpid");
-
- if (WIFEXITED(cstatus) == 0)
- tst_brkm (TBROK, cleanup, "receiver exited abnormally");
-
- if (WEXITSTATUS(cstatus) != 0)
- tst_brkm (TBROK, cleanup, "receiver exited with status %d",
- WEXITSTATUS(cstatus));
-
- /*
- * If we get here, the child has exited normally, and thus
- * we should exit normally too. First, tho, we print out
- * the final stats for the message queue.
- */
-
- tst_resm (msgctl(sender_msqid, IPC_STAT, &m_ds) == -1 ? TFAIL : TPASS,
- "msgctl IPC_STAT");
-
- print_msqid_ds(&m_ds, 0600);
-
- cleanup ();
-}
-
-void
-cleanup()
-{
-
- /*
- * If we're the sender, and it exists, remove the message queue.
- */
- if (child_pid != 0 && sender_msqid != -1) {
- tst_resm (msgctl(sender_msqid, IPC_RMID, NULL) == -1
- ? TFAIL : TPASS, "msgctl IPC_RMID");
- }
- tst_exit ();
-}
-
-void
-print_msqid_ds(struct msqid_ds *mp, mode_t mode)
-{
- uid_t uid = geteuid();
- gid_t gid = getegid();
-
- printf("PERM: uid %d, gid %d, cuid %d, cgid %d, mode 0%o\n",
- (int)mp->msg_perm.uid, (int)mp->msg_perm.gid,
- (int)mp->msg_perm.cuid, (int)mp->msg_perm.cgid,
- mp->msg_perm.mode & 0777);
-
- printf("qnum %lu, qbytes %lu, lspid %d, lrpid %d\n",
- mp->msg_qnum, (u_long)mp->msg_qbytes, mp->msg_lspid,
- mp->msg_lrpid);
-
- printf("stime: %s", ctime(&mp->msg_stime));
- printf("rtime: %s", ctime(&mp->msg_rtime));
- printf("ctime: %s", ctime(&mp->msg_ctime));
-
- /*
- * Sanity check a few things.
- */
-
- tst_resm (mp->msg_perm.uid != uid || mp->msg_perm.cuid != uid
- ? TFAIL : TPASS, "uid matches");
-
- tst_resm (mp->msg_perm.gid != gid || mp->msg_perm.cgid != gid
- ? TFAIL : TPASS, "gid matches");
-
- tst_resm ((mp->msg_perm.mode & 0777) != mode ? TFAIL : TPASS,
- "mode matches");
-}
-
-void
-receiver()
-{
- struct test_mymsg m;
- int msqid;
-
- tst_resm ((msqid = msgget(msgkey, 0)) == -1 ? TFAIL : TPASS,
- "receiver: msgget");
-
- /*
- * Receive the first message, print it, and send an ACK.
- */
-
- tst_resm (msgrcv(msqid, &m, sizeof(m), MTYPE_1, 0) != sizeof(m)
- ? TFAIL : TPASS, "receiver: msgrcv 1");
-
- printf("%s\n", m.mtext);
- tst_resm (strcmp(m.mtext, m1_str) != 0 ? TFAIL : TPASS,
- "receiver: message 1 data is correct");
-
- m.mtype = MTYPE_1_ACK;
-
- tst_resm (msgsnd(msqid, &m, sizeof(m), 0) == -1 ? TFAIL : TPASS,
- "receiver: msgsnd ack 1");
-
- /*
- * Receive the second message, print it, and send an ACK.
- */
-
- tst_resm (msgrcv(msqid, &m, sizeof(m), MTYPE_2, 0) != sizeof(m)
- ? TFAIL : TPASS, "receiver: msgrcv 2");
-
- printf("%s\n", m.mtext);
- tst_resm (strcmp(m.mtext, m2_str) != 0 ? TFAIL : TPASS,
- "receiver: message 2 data is correct");
-
- m.mtype = MTYPE_2_ACK;
-
- tst_resm (msgsnd(msqid, &m, sizeof(m), 0) == -1 ? TFAIL : TPASS,
- "receiver: msgsnd ack 2");
-
- /* Allow parent to receive message before getting SIGCHLD. */
- sleep (1);
- exit(0);
-}
diff --git a/winsup/testsuite/winsup.api/nullgetcwd.c b/winsup/testsuite/winsup.api/nullgetcwd.c
deleted file mode 100644
index 25bdf4514..000000000
--- a/winsup/testsuite/winsup.api/nullgetcwd.c
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-#include <stdlib.h>
-int
-main (int argc, char **argv)
-{
- char *cwd = getcwd (NULL, 256);
- if (cwd == NULL)
- {
- fprintf (stderr, "%s: getcwd returns NULL\n", argv[0]);
- exit (1);
- }
-
- exit (0);
-}
-
diff --git a/winsup/testsuite/winsup.api/pthread/cancel1.c b/winsup/testsuite/winsup.api/pthread/cancel1.c
deleted file mode 100644
index 96ae390ce..000000000
--- a/winsup/testsuite/winsup.api/pthread/cancel1.c
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * File: cancel1.c
- *
- * Test Synopsis: Test setting cancel state and cancel type.
- * -
- *
- * Test Method (Validation or Falsification):
- * -
- *
- * Requirements Tested:
- * - pthread_setcancelstate function
- * - pthread_setcanceltype function
- *
- * Features Tested:
- * -
- *
- * Cases Tested:
- * -
- *
- * Description:
- * -
- *
- * Environment:
- * -
- *
- * Input:
- * - None.
- *
- * Output:
- * - File name, Line number, and failed expression on failure.
- * - No output on success.
- *
- * Assumptions:
- * - pthread_create, pthread_self work.
- *
- * Pass Criteria:
- * - Process returns zero exit status.
- *
- * Fail Criteria:
- * - Process returns non-zero exit status.
- */
-
-#include "test.h"
-
-/*
- * Create NUMTHREADS threads in addition to the Main thread.
- */
-enum {
- NUMTHREADS = 10
-};
-
-typedef struct bag_t_ bag_t;
-struct bag_t_ {
- int threadnum;
- int started;
- /* Add more per-thread state variables here */
-};
-
-static bag_t threadbag[NUMTHREADS + 1];
-
-void *
-mythread(void * arg)
-{
- bag_t * bag = (bag_t *) arg;
-
- assert(bag == &threadbag[bag->threadnum]);
- assert(bag->started == 0);
- bag->started = 1;
-
- /* ... */
- {
- int oldstate;
- int oldtype;
-
- assert(pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &oldstate) == 0);
- assert(oldstate == PTHREAD_CANCEL_ENABLE); /* Check default */
- assert(pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL) == 0);
- assert(pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL) == 0);
- assert(pthread_setcancelstate(oldstate, &oldstate) == 0);
- assert(oldstate == PTHREAD_CANCEL_DISABLE); /* Check setting */
-
- assert(pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, &oldtype) == 0);
- assert(oldtype == PTHREAD_CANCEL_DEFERRED); /* Check default */
- assert(pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, NULL) == 0);
- assert(pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL) == 0);
- assert(pthread_setcanceltype(oldtype, &oldtype) == 0);
- assert(oldtype == PTHREAD_CANCEL_ASYNCHRONOUS); /* Check setting */
- }
-
- return 0;
-}
-
-int
-main()
-{
- int failed = 0;
- int i;
- pthread_t t[NUMTHREADS + 1];
-
- assert((t[0] = pthread_self()) != NULL);
-
- for (i = 1; i <= NUMTHREADS; i++)
- {
- threadbag[i].started = 0;
- threadbag[i].threadnum = i;
- assert(pthread_create(&t[i], NULL, mythread, (void *) &threadbag[i]) == 0);
- }
-
- /*
- * Code to control or munipulate child threads should probably go here.
- */
-
- /*
- * Give threads time to run.
- */
- Sleep(NUMTHREADS * 1000);
-
- /*
- * Standard check that all threads started.
- */
- for (i = 1; i <= NUMTHREADS; i++)
- {
- failed = !threadbag[i].started;
-
- if (failed)
- {
- fprintf(stderr, "Thread %d: started %d\n", i, threadbag[i].started);
- }
- }
-
- assert(!failed);
-
- /*
- * Check any results here. Set "failed" and only print ouput on failure.
- */
- for (i = 1; i <= NUMTHREADS; i++)
- {
- /* ... */
- }
-
- assert(!failed);
-
- /*
- * Success.
- */
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/cancel10.c b/winsup/testsuite/winsup.api/pthread/cancel10.c
deleted file mode 100644
index 5e0cc6770..000000000
--- a/winsup/testsuite/winsup.api/pthread/cancel10.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * File: cancel10.c
- *
- * Test Synopsis: Test if system is a cancellation point.
- *
- * Test Method (Validation or Falsification):
- * -
- *
- * Requirements Tested:
- * -
- *
- * Features Tested:
- * -
- *
- * Cases Tested:
- * -
- *
- * Description:
- * -
- *
- * Environment:
- * -
- *
- * Input:
- * - None.
- *
- * Output:
- * - File name, Line number, and failed expression on failure.
- * - No output on success.
- *
- * Assumptions:
- * - have working pthread_create, pthread_cancel, pthread_setcancelstate
- * pthread_join
- *
- * Pass Criteria:
- * - Process returns zero exit status.
- *
- * Fail Criteria:
- * - Process returns non-zero exit status.
- */
-
-#include "test.h"
-
-static int cancelled = 0;
-
-static void *Thread(void *punused)
-{
- while (!cancelled)
- Sleep (0);
-
- system (NULL);
-
- return NULL;
-}
-
-int main (void)
-{
- void * result;
- pthread_t t;
-
- assert (pthread_create (&t, NULL, Thread, NULL) == 0);
- assert (pthread_cancel (t) == 0);
- cancelled = 1;
- assert (pthread_join (t, &result) == 0);
- assert (result == PTHREAD_CANCELED);
-
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/cancel11.c b/winsup/testsuite/winsup.api/pthread/cancel11.c
deleted file mode 100644
index b6554ed69..000000000
--- a/winsup/testsuite/winsup.api/pthread/cancel11.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * File: cancel11.c
- *
- * Test Synopsis: Test if system is a cancellation point.
- *
- * Test Method (Validation or Falsification):
- * -
- *
- * Requirements Tested:
- * -
- *
- * Features Tested:
- * -
- *
- * Cases Tested:
- * -
- *
- * Description:
- * -
- *
- * Environment:
- * -
- *
- * Input:
- * - None.
- *
- * Output:
- * - File name, Line number, and failed expression on failure.
- * - No output on success.
- *
- * Assumptions:
- * - have working pthread_create, pthread_cancel, pthread_setcancelstate
- * pthread_join
- *
- * Pass Criteria:
- * - Process returns zero exit status.
- *
- * Fail Criteria:
- * - Process returns non-zero exit status.
- */
-
-#include "test.h"
-
-static void sig_handler(int sig)
-{
-}
-
-static void *Thread(void *punused)
-{
- system ("sleep 10");
-
- return NULL;
-}
-
-int main (void)
-{
- void * result;
- pthread_t t;
-
- signal (SIGINT, sig_handler);
-
- assert (pthread_create (&t, NULL, Thread, NULL) == 0);
- sleep (5);
- assert (pthread_cancel (t) == 0);
- assert (pthread_join (t, &result) == 0);
- assert (result == PTHREAD_CANCELED);
-
- assert ((void *)signal (SIGINT, NULL) == sig_handler);
-
- /* Wait until child process has terminated */
- sleep (10);
-
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/cancel12.c b/winsup/testsuite/winsup.api/pthread/cancel12.c
deleted file mode 100644
index 12273d676..000000000
--- a/winsup/testsuite/winsup.api/pthread/cancel12.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * File: cancel12.c
- *
- * Test Synopsis: Test if system is a cancellation point.
- *
- * Test Method (Validation or Falsification):
- * -
- *
- * Requirements Tested:
- * -
- *
- * Features Tested:
- * -
- *
- * Cases Tested:
- * -
- *
- * Description:
- * -
- *
- * Environment:
- * -
- *
- * Input:
- * - None.
- *
- * Output:
- * - File name, Line number, and failed expression on failure.
- * - No output on success.
- *
- * Assumptions:
- * - have working pthread_create, pthread_cancel, pthread_setcancelstate
- * pthread_join
- *
- * Pass Criteria:
- * - Process returns zero exit status.
- *
- * Fail Criteria:
- * - Process returns non-zero exit status.
- */
-
-#include "test.h"
-
-static void sig_handler(int sig)
-{
-}
-
-static void *Thread(void *punused)
-{
- signal (SIGINT, sig_handler);
-
- system ("sleep 5");
-
- assert ((void *)signal (SIGINT, NULL) == sig_handler);
-
- return NULL;
-}
-
-int main (void)
-{
- void * result;
- pthread_t t;
-
- assert (pthread_create (&t, NULL, Thread, NULL) == 0);
- assert (pthread_join (t, &result) == 0);
- assert (result == NULL);
-
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/cancel2.c b/winsup/testsuite/winsup.api/pthread/cancel2.c
deleted file mode 100644
index 14889313e..000000000
--- a/winsup/testsuite/winsup.api/pthread/cancel2.c
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * File: cancel2.c
- *
- * Test Synopsis: Test SEH or C++ cancel exception handling within
- * application exception blocks.
- *
- * Test Method (Validation or Falsification):
- * -
- *
- * Requirements Tested:
- * -
- *
- * Features Tested:
- * -
- *
- * Cases Tested:
- * -
- *
- * Description:
- * -
- *
- * Environment:
- * -
- *
- * Input:
- * - None.
- *
- * Output:
- * - File name, Line number, and failed expression on failure.
- * - No output on success.
- *
- * Assumptions:
- * - have working pthread_create, pthread_self, pthread_mutex_lock/unlock
- * pthread_testcancel, pthread_cancel, pthread_join
- *
- * Pass Criteria:
- * - Process returns zero exit status.
- *
- * Fail Criteria:
- * - Process returns non-zero exit status.
- */
-
-#include "test.h"
-
-/*
- * Create NUMTHREADS threads in addition to the Main thread.
- */
-enum {
- NUMTHREADS = 10
-};
-
-typedef struct bag_t_ bag_t;
-struct bag_t_ {
- int threadnum;
- int started;
- /* Add more per-thread state variables here */
-};
-
-static bag_t threadbag[NUMTHREADS + 1];
-
-static pthread_mutex_t waitLock = PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP;
-
-void *
-mythread(void * arg)
-{
- int result = 0;
- bag_t * bag = (bag_t *) arg;
-
- assert(bag == &threadbag[bag->threadnum]);
- assert(bag->started == 0);
- bag->started = 1;
-
- /* Set to known state and type */
-
- assert(pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL) == 0);
-
- switch (bag->threadnum % 2)
- {
- case 0:
- assert(pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL) == 0);
- result = 0;
- break;
- case 1:
- assert(pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, NULL) == 0);
- result = 1;
- break;
- }
-
- /* Wait for go from main */
- assert(pthread_mutex_lock(&waitLock) == 0);
- assert(pthread_mutex_unlock(&waitLock) == 0);
- sched_yield();
-
- for (;;)
- {
- pthread_testcancel();
- }
-
- return (void *) result;
-}
-
-int
-main()
-{
- int failed = 0;
- int i;
- pthread_t t[NUMTHREADS + 1];
-
- assert((t[0] = pthread_self()) != NULL);
- assert(pthread_mutex_lock(&waitLock) == 0);
-
- for (i = 1; i <= NUMTHREADS; i++)
- {
- threadbag[i].started = 0;
- threadbag[i].threadnum = i;
- assert(pthread_create(&t[i], NULL, mythread, (void *) &threadbag[i]) == 0);
- }
-
- /*
- * Code to control or munipulate child threads should probably go here.
- */
- Sleep(500);
-
- assert(pthread_mutex_unlock(&waitLock) == 0);
-
- Sleep(500);
-
- for (i = 1; i <= NUMTHREADS; i++)
- {
- assert(pthread_cancel(t[i]) == 0);
- }
-
- /*
- * Give threads time to run.
- */
- Sleep(NUMTHREADS * 100);
-
- /*
- * Standard check that all threads started.
- */
- for (i = 1; i <= NUMTHREADS; i++)
- {
- if (!threadbag[i].started)
- {
- failed |= !threadbag[i].started;
- fprintf(stderr, "Thread %d: started %d\n", i, threadbag[i].started);
- }
- }
-
- assert(!failed);
-
- /*
- * Check any results here. Set "failed" and only print output on failure.
- */
- failed = 0;
- for (i = 1; i <= NUMTHREADS; i++)
- {
- int fail = 0;
- int result = 0;
-
- assert(pthread_join(t[i], (void **) &result) == 0);
- fail = (result != (int) PTHREAD_CANCELED);
- if (fail)
- {
- fprintf(stderr, "Thread %d: started %d: location %d: cancel type %s\n",
- i,
- threadbag[i].started,
- result,
- ((result % 2) == 0) ? "ASYNCHRONOUS" : "DEFERRED");
- }
- failed |= fail;
- }
-
- assert(!failed);
-
- /*
- * Success.
- */
- return 0;
-}
-
diff --git a/winsup/testsuite/winsup.api/pthread/cancel3.c b/winsup/testsuite/winsup.api/pthread/cancel3.c
deleted file mode 100644
index 3ac03e4b6..000000000
--- a/winsup/testsuite/winsup.api/pthread/cancel3.c
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * File: cancel3.c
- *
- * Test Synopsis: Test asynchronous cancelation.
- *
- * Test Method (Validation or Falsification):
- * -
- *
- * Requirements Tested:
- * -
- *
- * Features Tested:
- * -
- *
- * Cases Tested:
- * -
- *
- * Description:
- * -
- *
- * Environment:
- * -
- *
- * Input:
- * - None.
- *
- * Output:
- * - File name, Line number, and failed expression on failure.
- * - No output on success.
- *
- * Assumptions:
- * - have working pthread_create, pthread_self, pthread_mutex_lock/unlock
- * pthread_testcancel, pthread_cancel, pthread_join
- *
- * Pass Criteria:
- * - Process returns zero exit status.
- *
- * Fail Criteria:
- * - Process returns non-zero exit status.
- */
-
-#include "test.h"
-
-/*
- * Create NUMTHREADS threads in addition to the Main thread.
- */
-enum {
- NUMTHREADS = 10
-};
-
-typedef struct bag_t_ bag_t;
-struct bag_t_ {
- int threadnum;
- int started;
- /* Add more per-thread state variables here */
- int count;
-};
-
-static bag_t threadbag[NUMTHREADS + 1];
-
-void *
-mythread(void * arg)
-{
- int result = ((int)PTHREAD_CANCELED + 1);
- bag_t * bag = (bag_t *) arg;
-
- assert(bag == &threadbag[bag->threadnum]);
- assert(bag->started == 0);
- bag->started = 1;
-
- /* Set to known state and type */
-
- assert(pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL) == 0);
-
- assert(pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL) == 0);
-
- /*
- * We wait up to 10 seconds, waking every 0.1 seconds,
- * for a cancelation to be applied to us.
- */
- for (bag->count = 0; bag->count < 100; bag->count++)
- Sleep(100);
-
- return (void *) result;
-}
-
-int
-main()
-{
- int failed = 0;
- int i;
- pthread_t t[NUMTHREADS + 1];
-
- assert((t[0] = pthread_self()) != NULL);
-
- for (i = 1; i <= NUMTHREADS; i++)
- {
- threadbag[i].started = 0;
- threadbag[i].threadnum = i;
- assert(pthread_create(&t[i], NULL, mythread, (void *) &threadbag[i]) == 0);
- }
-
- /*
- * Code to control or munipulate child threads should probably go here.
- */
- Sleep(500);
-
- for (i = 1; i <= NUMTHREADS; i++)
- {
- assert(pthread_cancel(t[i]) == 0);
- }
-
- /*
- * Give threads time to run.
- */
- Sleep(NUMTHREADS * 100);
-
- /*
- * Standard check that all threads started.
- */
- for (i = 1; i <= NUMTHREADS; i++)
- {
- if (!threadbag[i].started)
- {
- failed |= !threadbag[i].started;
- fprintf(stderr, "Thread %d: started %d\n", i, threadbag[i].started);
- }
- }
-
- assert(!failed);
-
- /*
- * Check any results here. Set "failed" and only print output on failure.
- */
- failed = 0;
- for (i = 1; i <= NUMTHREADS; i++)
- {
- int fail = 0;
- int result = 0;
-
- /*
- * The thread does not contain any cancelation points, so
- * a return value of PTHREAD_CANCELED confirms that async
- * cancelation succeeded.
- */
- assert(pthread_join(t[i], (void **) &result) == 0);
-
- fail = (result != (int) PTHREAD_CANCELED);
-
- if (fail)
- {
- fprintf(stderr, "Thread %d: started %d: count %d\n",
- i,
- threadbag[i].started,
- threadbag[i].count);
- }
- failed = (failed || fail);
- }
-
- assert(!failed);
-
- /*
- * Success.
- */
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/cancel4.c b/winsup/testsuite/winsup.api/pthread/cancel4.c
deleted file mode 100644
index d6b2ffadf..000000000
--- a/winsup/testsuite/winsup.api/pthread/cancel4.c
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * File: cancel4.c
- *
- * Test Synopsis: Test cancelation does not occur in deferred
- * cancelation threads with no cancelation points.
- *
- * Test Method (Validation or Falsification):
- * -
- *
- * Requirements Tested:
- * -
- *
- * Features Tested:
- * -
- *
- * Cases Tested:
- * -
- *
- * Description:
- * -
- *
- * Environment:
- * -
- *
- * Input:
- * - None.
- *
- * Output:
- * - File name, Line number, and failed expression on failure.
- * - No output on success.
- *
- * Assumptions:
- * - pthread_create
- * pthread_self
- * pthread_cancel
- * pthread_join
- * pthread_setcancelstate
- * pthread_setcanceltype
- *
- * Pass Criteria:
- * - Process returns zero exit status.
- *
- * Fail Criteria:
- * - Process returns non-zero exit status.
- */
-
-#include "test.h"
-
-/*
- * Create NUMTHREADS threads in addition to the Main thread.
- */
-enum {
- NUMTHREADS = 10
-};
-
-typedef struct bag_t_ bag_t;
-struct bag_t_ {
- int threadnum;
- int started;
- /* Add more per-thread state variables here */
- int count;
-};
-
-static bag_t threadbag[NUMTHREADS + 1];
-
-void *
-mythread(void * arg)
-{
- int result = ((int)PTHREAD_CANCELED + 1);
- bag_t * bag = (bag_t *) arg;
-
- assert(bag == &threadbag[bag->threadnum]);
- assert(bag->started == 0);
- bag->started = 1;
-
- /* Set to known state and type */
-
- assert(pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL) == 0);
-
- assert(pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, NULL) == 0);
-
- /*
- * We wait up to 10 seconds, waking every 0.1 seconds,
- * for a cancelation to be applied to us.
- */
- for (bag->count = 0; bag->count < 100; bag->count++)
- Sleep(100);
-
- return (void *) result;
-}
-
-int
-main()
-{
- int failed = 0;
- int i;
- pthread_t t[NUMTHREADS + 1];
-
- assert((t[0] = pthread_self()) != NULL);
-
- for (i = 1; i <= NUMTHREADS; i++)
- {
- threadbag[i].started = 0;
- threadbag[i].threadnum = i;
- assert(pthread_create(&t[i], NULL, mythread, (void *) &threadbag[i]) == 0);
- }
-
- /*
- * Code to control or munipulate child threads should probably go here.
- */
- Sleep(500);
-
- for (i = 1; i <= NUMTHREADS; i++)
- {
- assert(pthread_cancel(t[i]) == 0);
- }
-
- /*
- * Give threads time to run.
- */
- Sleep(NUMTHREADS * 100);
-
- /*
- * Standard check that all threads started.
- */
- for (i = 1; i <= NUMTHREADS; i++)
- {
- if (!threadbag[i].started)
- {
- failed |= !threadbag[i].started;
- fprintf(stderr, "Thread %d: started %d\n", i, threadbag[i].started);
- }
- }
-
- assert(!failed);
-
- /*
- * Check any results here. Set "failed" and only print output on failure.
- */
- failed = 0;
- for (i = 1; i <= NUMTHREADS; i++)
- {
- int fail = 0;
- int result = 0;
-
- /*
- * The thread does not contain any cancelation points, so
- * a return value of PTHREAD_CANCELED indicates that async
- * cancelation occurred.
- */
- assert(pthread_join(t[i], (void **) &result) == 0);
-
- fail = (result == (int) PTHREAD_CANCELED);
-
- if (fail)
- {
- fprintf(stderr, "Thread %d: started %d: count %d\n",
- i,
- threadbag[i].started,
- threadbag[i].count);
- }
- failed = (failed || fail);
- }
-
- assert(!failed);
-
- /*
- * Success.
- */
- return 0;
-}
-
diff --git a/winsup/testsuite/winsup.api/pthread/cancel5.c b/winsup/testsuite/winsup.api/pthread/cancel5.c
deleted file mode 100644
index 9dd579543..000000000
--- a/winsup/testsuite/winsup.api/pthread/cancel5.c
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * File: cancel5.c
- *
- * Test Synopsis: Test calling pthread_cancel from the main thread
- * without calling pthread_self() in main.
- *
- * Test Method (Validation or Falsification):
- * -
- *
- * Requirements Tested:
- * -
- *
- * Features Tested:
- * -
- *
- * Cases Tested:
- * -
- *
- * Description:
- * -
- *
- * Environment:
- * -
- *
- * Input:
- * - None.
- *
- * Output:
- * - File name, Line number, and failed expression on failure.
- * - No output on success.
- *
- * Assumptions:
- * - have working pthread_create, pthread_self, pthread_mutex_lock/unlock
- * pthread_testcancel, pthread_cancel, pthread_join
- *
- * Pass Criteria:
- * - Process returns zero exit status.
- *
- * Fail Criteria:
- * - Process returns non-zero exit status.
- */
-
-#include "test.h"
-
-/*
- * Create NUMTHREADS threads in addition to the Main thread.
- */
-enum {
- NUMTHREADS = 10
-};
-
-typedef struct bag_t_ bag_t;
-struct bag_t_ {
- int threadnum;
- int started;
- /* Add more per-thread state variables here */
- int count;
-};
-
-static bag_t threadbag[NUMTHREADS + 1];
-
-void *
-mythread(void * arg)
-{
- int result = ((int)PTHREAD_CANCELED + 1);
- bag_t * bag = (bag_t *) arg;
-
- assert(bag == &threadbag[bag->threadnum]);
- assert(bag->started == 0);
- bag->started = 1;
-
- /* Set to known state and type */
-
- assert(pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL) == 0);
-
- assert(pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL) == 0);
-
- /*
- * We wait up to 10 seconds, waking every 0.1 seconds,
- * for a cancelation to be applied to us.
- */
- for (bag->count = 0; bag->count < 100; bag->count++)
- Sleep(100);
-
- return (void *) result;
-}
-
-int
-main()
-{
- int failed = 0;
- int i;
- pthread_t t[NUMTHREADS + 1];
-
- for (i = 1; i <= NUMTHREADS; i++)
- {
- threadbag[i].started = 0;
- threadbag[i].threadnum = i;
- assert(pthread_create(&t[i], NULL, mythread, (void *) &threadbag[i]) == 0);
- }
-
- /*
- * Code to control or munipulate child threads should probably go here.
- */
- Sleep(500);
-
- for (i = 1; i <= NUMTHREADS; i++)
- {
- assert(pthread_cancel(t[i]) == 0);
- }
-
- /*
- * Give threads time to run.
- */
- Sleep(NUMTHREADS * 100);
-
- /*
- * Standard check that all threads started.
- */
- for (i = 1; i <= NUMTHREADS; i++)
- {
- if (!threadbag[i].started)
- {
- failed |= !threadbag[i].started;
- fprintf(stderr, "Thread %d: started %d\n", i, threadbag[i].started);
- }
- }
-
- assert(!failed);
-
- /*
- * Check any results here. Set "failed" and only print output on failure.
- */
- failed = 0;
- for (i = 1; i <= NUMTHREADS; i++)
- {
- int fail = 0;
- int result = 0;
-
- /*
- * The thread does not contain any cancelation points, so
- * a return value of PTHREAD_CANCELED confirms that async
- * cancelation succeeded.
- */
- assert(pthread_join(t[i], (void **) &result) == 0);
-
- fail = (result != (int) PTHREAD_CANCELED);
-
- if (fail)
- {
- fprintf(stderr, "Thread %d: started %d: count %d\n",
- i,
- threadbag[i].started,
- threadbag[i].count);
- }
- failed = (failed || fail);
- }
-
- assert(!failed);
-
- /*
- * Success.
- */
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/cancel6.c b/winsup/testsuite/winsup.api/pthread/cancel6.c
deleted file mode 100644
index 8f0bdd849..000000000
--- a/winsup/testsuite/winsup.api/pthread/cancel6.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * File: cancel6.c
- *
- * Test Synopsis: Test if pause is a cancellation point.
- *
- * Test Method (Validation or Falsification):
- * -
- *
- * Requirements Tested:
- * -
- *
- * Features Tested:
- * -
- *
- * Cases Tested:
- * -
- *
- * Description:
- * -
- *
- * Environment:
- * -
- *
- * Input:
- * - None.
- *
- * Output:
- * - File name, Line number, and failed expression on failure.
- * - No output on success.
- *
- * Assumptions:
- * - have working pthread_create, pthread_cancel, pthread_setcancelstate
- * pthread_join
- *
- * Pass Criteria:
- * - Process returns zero exit status.
- *
- * Fail Criteria:
- * - Process returns non-zero exit status.
- */
-
-#include "test.h"
-
-static void *Thread(void *punused)
-{
- pause ();
-
- return NULL;
-}
-
-int main (void)
-{
- void * result;
- pthread_t t;
-
- assert (pthread_create (&t, NULL, Thread, NULL) == 0);
- assert (pthread_cancel (t) == 0);
- assert (pthread_join (t, &result) == 0);
- assert (result == PTHREAD_CANCELED);
-
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/cancel7.c b/winsup/testsuite/winsup.api/pthread/cancel7.c
deleted file mode 100644
index 7a631f695..000000000
--- a/winsup/testsuite/winsup.api/pthread/cancel7.c
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * File: cancel7.c
- *
- * Test Synopsis: Test if sleep is a cancellation point.
- *
- * Test Method (Validation or Falsification):
- * -
- *
- * Requirements Tested:
- * -
- *
- * Features Tested:
- * -
- *
- * Cases Tested:
- * -
- *
- * Description:
- * -
- *
- * Environment:
- * -
- *
- * Input:
- * - None.
- *
- * Output:
- * - File name, Line number, and failed expression on failure.
- * - No output on success.
- *
- * Assumptions:
- * - have working pthread_create, pthread_cancel, pthread_setcancelstate
- * pthread_join
- *
- * Pass Criteria:
- * - Process returns zero exit status.
- *
- * Fail Criteria:
- * - Process returns non-zero exit status.
- */
-
-#include "test.h"
-
-static int has5secsleeped = 0;
-
-static void *Thread(void *punused)
-{
- assert (pthread_setcancelstate (PTHREAD_CANCEL_DISABLE, NULL) == 0);
- /* thread should sleep 5 seconds and not get canceled */
- sleep(5);
- has5secsleeped = 1;
- assert (pthread_setcancelstate (PTHREAD_CANCEL_ENABLE, NULL) == 0);
- /* thread should cancel here */
- sleep (5);
-
- return NULL;
-}
-
-int main (void)
-{
- void * result;
- pthread_t t;
-
- assert (pthread_create (&t, NULL, Thread, NULL) == 0);
- assert (pthread_cancel (t) == 0);
- assert (pthread_join (t, &result) == 0);
- assert (has5secsleeped == 1);
- assert (result == PTHREAD_CANCELED);
-
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/cancel8.c b/winsup/testsuite/winsup.api/pthread/cancel8.c
deleted file mode 100644
index fb30fd93b..000000000
--- a/winsup/testsuite/winsup.api/pthread/cancel8.c
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * File: cancel8.c
- *
- * Test Synopsis: Test if usleep is a cancellation point.
- *
- * Test Method (Validation or Falsification):
- * -
- *
- * Requirements Tested:
- * -
- *
- * Features Tested:
- * -
- *
- * Cases Tested:
- * -
- *
- * Description:
- * -
- *
- * Environment:
- * -
- *
- * Input:
- * - None.
- *
- * Output:
- * - File name, Line number, and failed expression on failure.
- * - No output on success.
- *
- * Assumptions:
- * - have working pthread_create, pthread_cancel, pthread_setcancelstate
- * pthread_join
- *
- * Pass Criteria:
- * - Process returns zero exit status.
- *
- * Fail Criteria:
- * - Process returns non-zero exit status.
- */
-
-#include "test.h"
-
-static int has5secsleeped = 0;
-
-static void *Thread(void *punused)
-{
- assert (pthread_setcancelstate (PTHREAD_CANCEL_DISABLE, NULL) == 0);
- /* thread should usleep 5 seconds and not get canceled */
- usleep(5000000);
- has5secsleeped = 1;
- assert (pthread_setcancelstate (PTHREAD_CANCEL_ENABLE, NULL) == 0);
- /* thread should cancel here */
- usleep(5000000);
-
- return NULL;
-}
-
-int main (void)
-{
- void * result;
- pthread_t t;
-
- assert (pthread_create (&t, NULL, Thread, NULL) == 0);
- assert (pthread_cancel (t) == 0);
- assert (pthread_join (t, &result) == 0);
- assert (has5secsleeped == 1);
- assert (result == PTHREAD_CANCELED);
-
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/cancel9.c b/winsup/testsuite/winsup.api/pthread/cancel9.c
deleted file mode 100644
index 1cbf62d2c..000000000
--- a/winsup/testsuite/winsup.api/pthread/cancel9.c
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * File: cancel9.c
- *
- * Test Synopsis: Test if waitpid is a cancellation point.
- *
- * Test Method (Validation or Falsification):
- * -
- *
- * Requirements Tested:
- * -
- *
- * Features Tested:
- * -
- *
- * Cases Tested:
- * -
- *
- * Description:
- * -
- *
- * Environment:
- * -
- *
- * Input:
- * - None.
- *
- * Output:
- * - File name, Line number, and failed expression on failure.
- * - No output on success.
- *
- * Assumptions:
- * - have working pthread_create, pthread_cancel, pthread_setcancelstate
- * pthread_join
- *
- * Pass Criteria:
- * - Process returns zero exit status.
- *
- * Fail Criteria:
- * - Process returns non-zero exit status.
- */
-
-#include "test.h"
-#include <assert.h>
-#include <sys/wait.h>
-
-static pid_t pid;
-
-static void *Thread(void *punused)
-{
- int res;
-
- pid = fork ();
- assert (pid != -1);
- switch (pid)
- {
- case 0:
- sleep (10);
- break;
- default:
- assert (waitpid (pid, &res, 0) != -1);
- }
-
- return NULL;
-}
-
-int main (void)
-{
- int res;
-
- void * result;
- pthread_t t;
-
- assert (pthread_create (&t, NULL, Thread, NULL) == 0);
- sleep (5);
- assert (pthread_cancel (t) == 0);
- assert (pthread_join (t, &result) == 0);
- assert (result == PTHREAD_CANCELED);
- assert (waitpid (pid, &res, 0) != -1);
-
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/cleanup2.c b/winsup/testsuite/winsup.api/pthread/cleanup2.c
deleted file mode 100644
index bcbaad3a7..000000000
--- a/winsup/testsuite/winsup.api/pthread/cleanup2.c
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * File: cleanup2.c
- *
- * Test Synopsis: Test cleanup handler executes (when thread is not canceled).
- *
- * Test Method (Validation or Falsification):
- * -
- *
- * Requirements Tested:
- * -
- *
- * Features Tested:
- * -
- *
- * Cases Tested:
- * -
- *
- * Description:
- * -
- *
- * Environment:
- * -
- *
- * Input:
- * - None.
- *
- * Output:
- * - File name, Line number, and failed expression on failure.
- * - No output on success.
- *
- * Assumptions:
- * - have working pthread_create, pthread_self, pthread_mutex_lock/unlock
- * pthread_testcancel, pthread_cancel, pthread_join
- *
- * Pass Criteria:
- * - Process returns zero exit status.
- *
- * Fail Criteria:
- * - Process returns non-zero exit status.
- */
-
-#include "test.h"
-
-/*
- * Create NUMTHREADS threads in addition to the Main thread.
- */
-enum {
- NUMTHREADS = 10
-};
-
-typedef struct bag_t_ bag_t;
-struct bag_t_ {
- int threadnum;
- int started;
- /* Add more per-thread state variables here */
- int count;
-};
-
-static bag_t threadbag[NUMTHREADS + 1];
-
-static int pop_count = 0;
-
-static void
-increment_pop_count(void * arg)
-{
- int * c = (int *) arg;
-
- (*c)++;
-}
-
-void *
-mythread(void * arg)
-{
- int result = 0;
- bag_t * bag = (bag_t *) arg;
-
- assert(bag == &threadbag[bag->threadnum]);
- assert(bag->started == 0);
- bag->started = 1;
-
- pthread_cleanup_push(increment_pop_count, (void *) &pop_count);
-
- sched_yield();
-
- pthread_cleanup_pop(1);
-
- return (void *) result;
-}
-
-int
-main()
-{
- int failed = 0;
- int i;
- pthread_t t[NUMTHREADS + 1];
-
- assert((t[0] = pthread_self()) != NULL);
-
- for (i = 1; i <= NUMTHREADS; i++)
- {
- threadbag[i].started = 0;
- threadbag[i].threadnum = i;
- assert(pthread_create(&t[i], NULL, mythread, (void *) &threadbag[i]) == 0);
- }
-
- /*
- * Code to control or munipulate child threads should probably go here.
- */
- Sleep(1000);
-
- /*
- * Standard check that all threads started.
- */
- for (i = 1; i <= NUMTHREADS; i++)
- {
- if (!threadbag[i].started)
- {
- failed |= !threadbag[i].started;
- fprintf(stderr, "Thread %d: started %d\n", i, threadbag[i].started);
- }
- }
-
- assert(!failed);
-
- /*
- * Check any results here. Set "failed" and only print output on failure.
- */
- failed = 0;
- for (i = 1; i <= NUMTHREADS; i++)
- {
- int fail = 0;
- int result = 0;
-
- assert(pthread_join(t[i], (void **) &result) == 0);
-
- fail = (result != 0);
-
- if (fail)
- {
- fprintf(stderr, "Thread %d: started %d: result: %d\n",
- i,
- threadbag[i].started,
- result);
- }
- failed = (failed || fail);
- }
-
- assert(!failed);
-
- assert(pop_count == NUMTHREADS);
-
- /*
- * Success.
- */
- return 0;
-}
-
diff --git a/winsup/testsuite/winsup.api/pthread/cleanup3.c b/winsup/testsuite/winsup.api/pthread/cleanup3.c
deleted file mode 100644
index f8201faa0..000000000
--- a/winsup/testsuite/winsup.api/pthread/cleanup3.c
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * File: cleanup3.c
- *
- * Test Synopsis: Test cleanup handler does not execute (when thread is
- * not canceled).
- *
- * Test Method (Validation or Falsification):
- * -
- *
- * Requirements Tested:
- * -
- *
- * Features Tested:
- * -
- *
- * Cases Tested:
- * -
- *
- * Description:
- * -
- *
- * Environment:
- * -
- *
- * Input:
- * - None.
- *
- * Output:
- * - File name, Line number, and failed expression on failure.
- * - No output on success.
- *
- * Assumptions:
- * - have working pthread_create, pthread_self, pthread_mutex_lock/unlock
- * pthread_testcancel, pthread_cancel, pthread_join
- *
- * Pass Criteria:
- * - Process returns zero exit status.
- *
- * Fail Criteria:
- * - Process returns non-zero exit status.
- */
-
-#include "test.h"
-
-/*
- * Create NUMTHREADS threads in addition to the Main thread.
- */
-enum {
- NUMTHREADS = 10
-};
-
-typedef struct bag_t_ bag_t;
-struct bag_t_ {
- int threadnum;
- int started;
- /* Add more per-thread state variables here */
- int count;
-};
-
-static bag_t threadbag[NUMTHREADS + 1];
-
-static int pop_count = 0;
-
-static void
-increment_pop_count(void * arg)
-{
- int * c = (int *) arg;
-
- (*c)++;
-}
-
-void *
-mythread(void * arg)
-{
- int result = 0;
- bag_t * bag = (bag_t *) arg;
-
- assert(bag == &threadbag[bag->threadnum]);
- assert(bag->started == 0);
- bag->started = 1;
-
- pthread_cleanup_push(increment_pop_count, (void *) &pop_count);
-
- sched_yield();
-
- pop_count--;
-
- pthread_cleanup_pop(0);
-
- return (void *) result;
-}
-
-int
-main()
-{
- int failed = 0;
- int i;
- pthread_t t[NUMTHREADS + 1];
-
- assert((t[0] = pthread_self()) != NULL);
-
- for (i = 1; i <= NUMTHREADS; i++)
- {
- threadbag[i].started = 0;
- threadbag[i].threadnum = i;
- assert(pthread_create(&t[i], NULL, mythread, (void *) &threadbag[i]) == 0);
- }
-
- /*
- * Code to control or munipulate child threads should probably go here.
- */
- Sleep(1000);
-
- /*
- * Standard check that all threads started.
- */
- for (i = 1; i <= NUMTHREADS; i++)
- {
- if (!threadbag[i].started)
- {
- failed |= !threadbag[i].started;
- fprintf(stderr, "Thread %d: started %d\n", i, threadbag[i].started);
- }
- }
-
- assert(!failed);
-
- /*
- * Check any results here. Set "failed" and only print output on failure.
- */
- failed = 0;
- for (i = 1; i <= NUMTHREADS; i++)
- {
- int fail = 0;
- int result = 0;
-
- assert(pthread_join(t[i], (void **) &result) == 0);
-
- fail = (result != 0);
-
- if (fail)
- {
- fprintf(stderr, "Thread %d: started %d: result: %d\n",
- i,
- threadbag[i].started,
- result);
- }
- failed = (failed || fail);
- }
-
- assert(!failed);
-
- assert(pop_count == -(NUMTHREADS));
-
- /*
- * Success.
- */
- return 0;
-}
-
diff --git a/winsup/testsuite/winsup.api/pthread/condvar1.c b/winsup/testsuite/winsup.api/pthread/condvar1.c
deleted file mode 100644
index daa0f420e..000000000
--- a/winsup/testsuite/winsup.api/pthread/condvar1.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * File: condvar1.c
- *
- * Test Synopsis:
- * - Test initialisation and destruction of a CV.
- *
- * Test Method (Validation or Falsification):
- * - Validation
- *
- * Requirements Tested:
- * -
- *
- * Features Tested:
- * -
- *
- * Cases Tested:
- * -
- *
- * Description:
- * - Creates and then imediately destroys a CV. Does not
- * test the CV.
- *
- * Environment:
- * -
- *
- * Input:
- * - None.
- *
- * Output:
- * - File name, Line number, and failed expression on failure.
- * - No output on success.
- *
- * Assumptions:
- * -
- *
- * Pass Criteria:
- * - pthread_cond_init returns 0, and
- * - pthread_cond_destroy returns 0.
- * - Process returns zero exit status.
- *
- * Fail Criteria:
- * - pthread_cond_init returns non-zero, or
- * - pthread_cond_destroy returns non-zero.
- * - Process returns non-zero exit status.
- */
-
-#include "test.h"
-
-static pthread_cond_t cv = NULL;
-
-int
-main()
-{
- assert(cv == NULL);
-
- assert(pthread_cond_init(&cv, NULL) == 0);
-
- assert(cv != NULL);
-
- assert(pthread_cond_destroy(&cv) == 0);
-
- assert(cv == NULL);
-
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/condvar2.c b/winsup/testsuite/winsup.api/pthread/condvar2.c
deleted file mode 100644
index 309f5dfdf..000000000
--- a/winsup/testsuite/winsup.api/pthread/condvar2.c
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * File: condvar2.c
- *
- * Test Synopsis:
- * - Test timed wait on a CV.
- *
- * Test Method (Validation or Falsification):
- * - Validation
- *
- * Requirements Tested:
- * -
- *
- * Features Tested:
- * -
- *
- * Cases Tested:
- * -
- *
- * Description:
- * - Because the CV is never signaled, we expect the wait to time out.
- *
- * Environment:
- * -
- *
- * Input:
- * - None.
- *
- * Output:
- * - File name, Line number, and failed expression on failure.
- * - No output on success.
- *
- * Assumptions:
- * -
- *
- * Pass Criteria:
- * - pthread_cond_timedwait returns ETIMEDOUT.
- * - Process returns zero exit status.
- *
- * Fail Criteria:
- * - pthread_cond_timedwait does not return ETIMEDOUT.
- * - Process returns non-zero exit status.
- */
-
-#include "test.h"
-#include <sys/timeb.h>
-
-pthread_cond_t cv;
-pthread_mutex_t mutex;
-
-int
-main()
-{
- struct timespec abstime = { 0, 0 };
- struct timeb currSysTime;
- const DWORD NANOSEC_PER_MILLISEC = 1000000;
- int result;
-
- assert(pthread_cond_init(&cv, NULL) == 0);
-
- assert(pthread_mutex_init(&mutex, NULL) == 0);
-
- assert(pthread_mutex_lock(&mutex) == 0);
-
- /* get current system time */
- ftime(&currSysTime);
-
- abstime.tv_sec = currSysTime.time;
- abstime.tv_nsec = NANOSEC_PER_MILLISEC * currSysTime.millitm;
-
- abstime.tv_sec += 5;
-
- assert(pthread_cond_timedwait(&cv, &mutex, &abstime) == ETIMEDOUT);
-
- assert(pthread_mutex_unlock(&mutex) == 0);
-
- result = pthread_cond_destroy(&cv);
- assert(result == 0);
-
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/condvar2_1.c b/winsup/testsuite/winsup.api/pthread/condvar2_1.c
deleted file mode 100644
index da3416203..000000000
--- a/winsup/testsuite/winsup.api/pthread/condvar2_1.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * File: condvar2_1.c
- *
- * Test Synopsis:
- * - Test timeout of multiple waits on a CV with no signal/broadcast.
- *
- * Test Method (Validation or Falsification):
- * - Validation
- *
- * Requirements Tested:
- * -
- *
- * Features Tested:
- * -
- *
- * Cases Tested:
- * -
- *
- * Description:
- * - Because the CV is never signaled, we expect the waits to time out.
- *
- * Environment:
- * -
- *
- * Input:
- * - None.
- *
- * Output:
- * - File name, Line number, and failed expression on failure.
- * - No output on success.
- *
- * Assumptions:
- * -
- *
- * Pass Criteria:
- * - pthread_cond_timedwait returns ETIMEDOUT.
- * - Process returns zero exit status.
- *
- * Fail Criteria:
- * - pthread_cond_timedwait does not return ETIMEDOUT.
- * - Process returns non-zero exit status.
- */
-
-#include "test.h"
-#include <sys/timeb.h>
-
-static pthread_cond_t cv;
-static pthread_mutex_t mutex;
-static struct timespec abstime = { 0, 0 };
-
-enum {
- NUMTHREADS = 60
-};
-
-void *
-mythread(void * arg)
-{
- assert(pthread_mutex_lock(&mutex) == 0);
-
- assert(pthread_cond_timedwait(&cv, &mutex, &abstime) == ETIMEDOUT);
-
- assert(pthread_mutex_unlock(&mutex) == 0);
-
- return arg;
-}
-
-int
-main()
-{
- int i;
- pthread_t t[NUMTHREADS + 1];
- int result = 0;
- struct timeb currSysTime;
- const DWORD NANOSEC_PER_MILLISEC = 1000000;
-
- assert(pthread_cond_init(&cv, NULL) == 0);
-
- assert(pthread_mutex_init(&mutex, NULL) == 0);
-
- /* get current system time */
- ftime(&currSysTime);
-
- abstime.tv_sec = currSysTime.time;
- abstime.tv_nsec = NANOSEC_PER_MILLISEC * currSysTime.millitm;
-
- abstime.tv_sec += 5;
-
- assert(pthread_mutex_lock(&mutex) == 0);
-
- for (i = 1; i <= NUMTHREADS; i++)
- {
- assert(pthread_create(&t[i], NULL, mythread, (void *) i) == 0);
- }
-
- assert(pthread_mutex_unlock(&mutex) == 0);
-
- for (i = 1; i <= NUMTHREADS; i++)
- {
- assert(pthread_join(t[i], (void **) &result) == 0);
- assert(result == i);
- }
-
- result = pthread_cond_destroy(&cv);
- assert(result == 0);
-
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/condvar3.c b/winsup/testsuite/winsup.api/pthread/condvar3.c
deleted file mode 100644
index 249e260aa..000000000
--- a/winsup/testsuite/winsup.api/pthread/condvar3.c
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * File: condvar3.c
- *
- * Test Synopsis:
- * - Test basic function of a CV
- *
- * Test Method (Validation or Falsification):
- * - Validation
- *
- * Requirements Tested:
- * -
- *
- * Features Tested:
- * -
- *
- * Cases Tested:
- * -
- *
- * Description:
- * - The primary thread takes the lock before creating any threads.
- * The secondary thread blocks on the lock allowing the primary
- * thread to enter the cv wait state which releases the lock.
- * The secondary thread then takes the lock and signals the waiting
- * primary thread.
- *
- * Environment:
- * -
- *
- * Input:
- * - None.
- *
- * Output:
- * - File name, Line number, and failed expression on failure.
- * - No output on success.
- *
- * Assumptions:
- * -
- *
- * Pass Criteria:
- * - pthread_cond_timedwait returns 0.
- * - Process returns zero exit status.
- *
- * Fail Criteria:
- * - pthread_cond_timedwait returns ETIMEDOUT.
- * - Process returns non-zero exit status.
- */
-
-#include "test.h"
-#include <sys/timeb.h>
-
-static pthread_cond_t cv;
-static pthread_mutex_t mutex;
-static int shared = 0;
-
-enum {
- NUMTHREADS = 2 /* Including the primary thread. */
-};
-
-void *
-mythread(void * arg)
-{
- int result = 0;
-
- assert(pthread_mutex_lock(&mutex) == 0);
-
- shared++;
-
- assert(pthread_mutex_unlock(&mutex) == 0);
-
- if ((result = pthread_cond_signal(&cv)) != 0)
- {
- printf("Error = %s\n", error_string[result]);
- }
- assert(result == 0);
-
- return (void *) 0;
-}
-
-int
-main()
-{
- pthread_t t[NUMTHREADS];
- struct timespec abstime = { 0, 0 };
- struct timeb currSysTime;
- const DWORD NANOSEC_PER_MILLISEC = 1000000;
-
- assert((t[0] = pthread_self()) != NULL);
-
- assert(pthread_cond_init(&cv, NULL) == 0);
-
- assert(pthread_mutex_init(&mutex, NULL) == 0);
-
- assert(pthread_mutex_lock(&mutex) == 0);
-
- /* get current system time */
- ftime(&currSysTime);
-
- abstime.tv_sec = currSysTime.time;
- abstime.tv_nsec = NANOSEC_PER_MILLISEC * currSysTime.millitm;
-
- assert(pthread_create(&t[1], NULL, mythread, (void *) 1) == 0);
-
- abstime.tv_sec += 5;
-
- while (! (shared > 0))
- assert(pthread_cond_timedwait(&cv, &mutex, &abstime) == 0);
-
- assert(shared > 0);
-
- assert(pthread_mutex_unlock(&mutex) == 0);
-
- assert(pthread_cond_destroy(&cv) == 0);
-
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/condvar3_1.c b/winsup/testsuite/winsup.api/pthread/condvar3_1.c
deleted file mode 100644
index b08b04889..000000000
--- a/winsup/testsuite/winsup.api/pthread/condvar3_1.c
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * File: condvar3_1.c
- *
- * Test Synopsis:
- * - Test timeout of multiple waits on a CV with some signaled.
- *
- * Test Method (Validation or Falsification):
- * - Validation
- *
- * Requirements Tested:
- * -
- *
- * Features Tested:
- * -
- *
- * Cases Tested:
- * -
- *
- * Description:
- * - Because some CVs are never signaled, we expect their waits to time out.
- * Some are signaled, the rest time out. Pthread_cond_destroy() will fail
- * unless all are accounted for, either signaled or timedout.
- *
- * Environment:
- * -
- *
- * Input:
- * - None.
- *
- * Output:
- * - File name, Line number, and failed expression on failure.
- * - No output on success.
- *
- * Assumptions:
- * -
- *
- * Pass Criteria:
- * - pthread_cond_timedwait returns ETIMEDOUT.
- * - Process returns zero exit status.
- *
- * Fail Criteria:
- * - pthread_cond_timedwait does not return ETIMEDOUT.
- * - Process returns non-zero exit status.
- */
-
-#include "test.h"
-#include <sys/timeb.h>
-
-static pthread_cond_t cv;
-static pthread_cond_t cv1;
-static pthread_mutex_t mutex;
-static struct timespec abstime = { 0, 0 };
-static int timedout = 0;
-static int signaled = 0;
-static int awoken = 0;
-static int waiting = 0;
-
-enum {
- NUMTHREADS = 60
-};
-
-void *
-mythread(void * arg)
-{
- int result;
-
- assert(pthread_mutex_lock(&mutex) == 0);
-
- if ( ++waiting == NUMTHREADS)
- assert(pthread_cond_signal(&cv1) == 0);
-
- result = pthread_cond_timedwait(&cv, &mutex, &abstime);
- if (result == ETIMEDOUT)
- {
- timedout++;
- }
- else
- {
- awoken++;
- }
-
- assert(pthread_mutex_unlock(&mutex) == 0);
-
- return arg;
-}
-
-int
-main()
-{
- int i;
- pthread_t t[NUMTHREADS + 1];
- int result = 0;
- struct timeb currSysTime;
- const DWORD NANOSEC_PER_MILLISEC = 1000000;
-
- assert(pthread_cond_init(&cv, NULL) == 0);
- assert(pthread_cond_init(&cv1, NULL) == 0);
-
- assert(pthread_mutex_init(&mutex, NULL) == 0);
-
- /* get current system time */
- ftime(&currSysTime);
-
- abstime.tv_sec = currSysTime.time;
- abstime.tv_nsec = NANOSEC_PER_MILLISEC * currSysTime.millitm;
-
- abstime.tv_sec += 5;
-
- assert(pthread_mutex_lock(&mutex) == 0);
-
- for (i = 1; i <= NUMTHREADS; i++)
- {
- assert(pthread_create(&t[i], NULL, mythread, (void *) i) == 0);
- }
-
- do {
- assert(pthread_cond_wait(&cv1,&mutex) == 0);
- } while ( NUMTHREADS != waiting );
-
- assert(pthread_mutex_unlock(&mutex) == 0);
-
- for (i = NUMTHREADS/3; i <= 2*NUMTHREADS/3; i++)
- {
- assert(pthread_cond_signal(&cv) == 0);
- signaled++;
- }
-
- for (i = 1; i <= NUMTHREADS; i++)
- {
- assert(pthread_join(t[i], (void **) &result) == 0);
- assert(result == i);
- }
-
- printf("awk = %d\n", awoken);
- printf("sig = %d\n", signaled);
- printf("tot = %d\n", timedout);
-
- assert(signaled == awoken);
- assert(timedout == NUMTHREADS - signaled);
-
- result = pthread_cond_destroy(&cv);
- assert(result == 0);
-
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/condvar3_2.c b/winsup/testsuite/winsup.api/pthread/condvar3_2.c
deleted file mode 100644
index 57e7eb439..000000000
--- a/winsup/testsuite/winsup.api/pthread/condvar3_2.c
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * File: condvar3_2.c
- *
- * Test Synopsis:
- * - Test timeout of multiple waits on a CV with remainder broadcast awoken.
- *
- * Test Method (Validation or Falsification):
- * - Validation
- *
- * Requirements Tested:
- * -
- *
- * Features Tested:
- * -
- *
- * Cases Tested:
- * -
- *
- * Description:
- * - Because some CVs are never signaled, we expect their waits to time out.
- * Some time out, the rest are broadcast signaled. Pthread_cond_destroy() will fail
- * unless all are accounted for, either signaled or timedout.
- *
- * Environment:
- * -
- *
- * Input:
- * - None.
- *
- * Output:
- * - File name, Line number, and failed expression on failure.
- * - No output on success.
- *
- * Assumptions:
- * -
- *
- * Pass Criteria:
- * - pthread_cond_timedwait returns ETIMEDOUT.
- * - Process returns zero exit status.
- *
- * Fail Criteria:
- * - pthread_cond_timedwait does not return ETIMEDOUT.
- * - Process returns non-zero exit status.
- */
-
-#include "test.h"
-#include <sys/timeb.h>
-
-static pthread_cond_t cv;
-static pthread_mutex_t mutex;
-static struct timespec abstime = { 0, 0 };
-static struct timespec abstime2 = { 0, 0 };
-static int timedout = 0;
-static int awoken = 0;
-
-enum {
- NUMTHREADS = 60
-};
-
-void *
-mythread(void * arg)
-{
- int result;
-
- assert(pthread_mutex_lock(&mutex) == 0);
-
- abstime2.tv_sec = abstime.tv_sec;
-
- if ((int) arg % 3 == 0)
- {
- abstime2.tv_sec += 2;
- }
-
- result = pthread_cond_timedwait(&cv, &mutex, &abstime2);
- if (result == ETIMEDOUT)
- {
- timedout++;
- }
- else
- {
- awoken++;
- }
-
- assert(pthread_mutex_unlock(&mutex) == 0);
-
- return arg;
-}
-
-int
-main()
-{
- int i;
- pthread_t t[NUMTHREADS + 1];
- int result = 0;
- struct timeb currSysTime;
- const DWORD NANOSEC_PER_MILLISEC = 1000000;
-
- assert(pthread_cond_init(&cv, NULL) == 0);
-
- assert(pthread_mutex_init(&mutex, NULL) == 0);
-
- /* get current system time */
- ftime(&currSysTime);
-
- abstime.tv_sec = abstime.tv_sec = currSysTime.time + 5;
- abstime.tv_nsec = abstime2.tv_nsec = NANOSEC_PER_MILLISEC * currSysTime.millitm;
-
- assert(pthread_mutex_lock(&mutex) == 0);
-
- for (i = 1; i <= NUMTHREADS; i++)
- {
- assert(pthread_create(&t[i], NULL, mythread, (void *) i) == 0);
- }
-
- assert(pthread_mutex_unlock(&mutex) == 0);
-
- for (i = 1; i <= NUMTHREADS; i++)
- {
- assert(pthread_join(t[i], (void **) &result) == 0);
- assert(result == i);
- /*
- * Approximately 2/3rds of the threads are expected to time out.
- * Signal the remainder after some threads have woken up and exited
- * and while some are still waking up after timeout.
- * Also tests that redundant broadcasts don't return errors.
- */
- if (awoken > NUMTHREADS/3)
- {
- assert(pthread_cond_broadcast(&cv) == 0);
- }
- }
-
- assert(awoken == NUMTHREADS - timedout);
-
- result = pthread_cond_destroy(&cv);
- assert(result == 0);
-
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/condvar3_3.c b/winsup/testsuite/winsup.api/pthread/condvar3_3.c
deleted file mode 100644
index f6bcca9fa..000000000
--- a/winsup/testsuite/winsup.api/pthread/condvar3_3.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * File: condvar3_3.c
- *
- * Test Synopsis:
- * - Test timeouts and lost signals on a CV.
- *
- * Test Method (Validation or Falsification):
- * - Validation
- *
- * Requirements Tested:
- * -
- *
- * Features Tested:
- * -
- *
- * Cases Tested:
- * -
- *
- * Description:
- * -
- *
- * Environment:
- * -
- *
- * Input:
- * - None.
- *
- * Output:
- * - File name, Line number, and failed expression on failure.
- * - No output on success.
- *
- * Assumptions:
- * -
- *
- * Pass Criteria:
- * - pthread_cond_timedwait returns ETIMEDOUT.
- * - Process returns zero exit status.
- *
- * Fail Criteria:
- * - pthread_cond_timedwait does not return ETIMEDOUT.
- * - Process returns non-zero exit status.
- */
-
-/* Timur Aydin (taydin@snet.net) */
-
-#include "test.h"
-
-#include <sys/timeb.h>
-
-pthread_cond_t cnd;
-pthread_mutex_t mtx;
-
-int main()
-{
- int rc;
-
- struct timespec abstime = { 0, 0 };
- struct timeb currSysTime;
- const DWORD NANOSEC_PER_MILLISEC = 1000000;
-
- assert(pthread_cond_init(&cnd, 0) == 0);
- assert(pthread_mutex_init(&mtx, 0) == 0);
-
- /* get current system time */
- ftime(&currSysTime);
-
- abstime.tv_sec = currSysTime.time;
- abstime.tv_nsec = NANOSEC_PER_MILLISEC * currSysTime.millitm;
- abstime.tv_sec += 1;
-
- /* Here pthread_cond_timedwait should time out after one second. */
-
- assert(pthread_mutex_lock(&mtx) == 0);
-
- assert((rc = pthread_cond_timedwait(&cnd, &mtx, &abstime)) == ETIMEDOUT);
-
- assert(pthread_mutex_unlock(&mtx) == 0);
-
- /* Here, the condition variable is signaled, but there are no
- threads waiting on it. The signal should be lost and
- the next pthread_cond_timedwait should time out too. */
-
- assert(pthread_mutex_lock(&mtx) == 0);
-
- assert((rc = pthread_cond_signal(&cnd)) == 0);
-
- assert(pthread_mutex_unlock(&mtx) == 0);
-
- assert(pthread_mutex_lock(&mtx) == 0);
-
- abstime.tv_sec = currSysTime.time;
- abstime.tv_nsec = NANOSEC_PER_MILLISEC * currSysTime.millitm;
- abstime.tv_sec += 1;
-
- assert((rc = pthread_cond_timedwait(&cnd, &mtx, &abstime)) == ETIMEDOUT);
-
- assert(pthread_mutex_unlock(&mtx) == 0);
-
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/condvar4.c b/winsup/testsuite/winsup.api/pthread/condvar4.c
deleted file mode 100644
index 7a2007a4a..000000000
--- a/winsup/testsuite/winsup.api/pthread/condvar4.c
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * File: condvar4.c
- *
- * Test Synopsis:
- * - Test PTHREAD_COND_INITIALIZER.
- *
- * Test Method (Validation or Falsification):
- * - Validation
- *
- * Requirements Tested:
- * -
- *
- * Features Tested:
- * -
- *
- * Cases Tested:
- * -
- *
- * Description:
- * - Test basic CV function but starting with a static initialised
- * CV.
- *
- * Environment:
- * -
- *
- * Input:
- * - None.
- *
- * Output:
- * - File name, Line number, and failed expression on failure.
- * - No output on success.
- *
- * Assumptions:
- * -
- *
- * Pass Criteria:
- * - pthread_cond_timedwait returns 0.
- * - Process returns zero exit status.
- *
- * Fail Criteria:
- * - pthread_cond_timedwait returns ETIMEDOUT.
- * - Process returns non-zero exit status.
- */
-
-#include "test.h"
-#include <sys/timeb.h>
-
-typedef struct cvthing_t_ cvthing_t;
-
-struct cvthing_t_ {
- pthread_cond_t notbusy;
- pthread_mutex_t lock;
- int shared;
-};
-
-static cvthing_t cvthing = {
- PTHREAD_COND_INITIALIZER,
- PTHREAD_MUTEX_INITIALIZER,
- 0
-};
-
-enum {
- NUMTHREADS = 2
-};
-
-void *
-mythread(void * arg)
-{
- assert(pthread_mutex_lock(&cvthing.lock) == 0);
-
- cvthing.shared++;
-
- assert(pthread_mutex_unlock(&cvthing.lock) == 0);
-
- assert(pthread_cond_signal(&cvthing.notbusy) == 0);
-
- return (void *) 0;
-}
-
-int
-main()
-{
- pthread_t t[NUMTHREADS];
- struct timespec abstime = { 0, 0 };
- struct timeb currSysTime;
- const DWORD NANOSEC_PER_MILLISEC = 1000000;
-
- cvthing.shared = 0;
-
- assert((t[0] = pthread_self()) != NULL);
-
- assert(cvthing.notbusy == PTHREAD_COND_INITIALIZER);
-
- assert(cvthing.lock == PTHREAD_MUTEX_INITIALIZER);
-
- assert(pthread_mutex_lock(&cvthing.lock) == 0);
-
- assert(cvthing.lock != PTHREAD_MUTEX_INITIALIZER);
-
- /* get current system time */
- ftime(&currSysTime);
-
- abstime.tv_sec = currSysTime.time;
- abstime.tv_nsec = NANOSEC_PER_MILLISEC * currSysTime.millitm;
-
- abstime.tv_sec += 5;
-
- assert(pthread_cond_timedwait(&cvthing.notbusy, &cvthing.lock, &abstime) == ETIMEDOUT);
-
- assert(cvthing.notbusy != PTHREAD_COND_INITIALIZER);
-
- assert(pthread_create(&t[1], NULL, mythread, (void *) 1) == 0);
-
- ftime(&currSysTime);
-
- abstime.tv_sec = currSysTime.time;
- abstime.tv_nsec = NANOSEC_PER_MILLISEC * currSysTime.millitm;
-
- abstime.tv_sec += 5;
-
- while (! (cvthing.shared > 0))
- assert(pthread_cond_timedwait(&cvthing.notbusy, &cvthing.lock, &abstime) == 0);
-
- assert(cvthing.shared > 0);
-
- assert(pthread_mutex_unlock(&cvthing.lock) == 0);
-
- assert(pthread_mutex_destroy(&cvthing.lock) == 0);
-
- assert(cvthing.lock == NULL);
-
- assert(pthread_cond_destroy(&cvthing.notbusy) == 0);
-
- assert(cvthing.notbusy == NULL);
-
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/condvar5.c b/winsup/testsuite/winsup.api/pthread/condvar5.c
deleted file mode 100644
index b493ab136..000000000
--- a/winsup/testsuite/winsup.api/pthread/condvar5.c
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * File: condvar5.c
- *
- * Test Synopsis:
- * - Test pthread_cond_broadcast.
- *
- * Test Method (Validation or Falsification):
- * - Validation
- *
- * Requirements Tested:
- * -
- *
- * Features Tested:
- * -
- *
- * Cases Tested:
- * -
- *
- * Description:
- * - Test broadcast with one waiting CV.
- *
- * Environment:
- * -
- *
- * Input:
- * - None.
- *
- * Output:
- * - File name, Line number, and failed expression on failure.
- * - No output on success.
- *
- * Assumptions:
- * -
- *
- * Pass Criteria:
- * - pthread_cond_timedwait returns 0.
- * - Process returns zero exit status.
- *
- * Fail Criteria:
- * - pthread_cond_timedwait returns ETIMEDOUT.
- * - Process returns non-zero exit status.
- */
-
-#include "test.h"
-#include <sys/timeb.h>
-
-typedef struct cvthing_t_ cvthing_t;
-
-struct cvthing_t_ {
- pthread_cond_t notbusy;
- pthread_mutex_t lock;
- int shared;
-};
-
-static cvthing_t cvthing = {
- PTHREAD_COND_INITIALIZER,
- PTHREAD_MUTEX_INITIALIZER,
- 0
-};
-
-enum {
- NUMTHREADS = 2
-};
-
-void *
-mythread(void * arg)
-{
- assert(pthread_mutex_lock(&cvthing.lock) == 0);
-
- cvthing.shared++;
-
- assert(pthread_mutex_unlock(&cvthing.lock) == 0);
-
- assert(pthread_cond_broadcast(&cvthing.notbusy) == 0);
-
- return (void *) 0;
-}
-
-int
-main()
-{
- pthread_t t[NUMTHREADS];
- struct timespec abstime = { 0, 0 };
- struct timeb currSysTime;
- const DWORD NANOSEC_PER_MILLISEC = 1000000;
-
- cvthing.shared = 0;
-
- assert((t[0] = pthread_self()) != NULL);
-
- assert(cvthing.notbusy == PTHREAD_COND_INITIALIZER);
-
- assert(cvthing.lock == PTHREAD_MUTEX_INITIALIZER);
-
- assert(pthread_mutex_lock(&cvthing.lock) == 0);
-
- assert(cvthing.lock != PTHREAD_MUTEX_INITIALIZER);
-
- /* get current system time */
- ftime(&currSysTime);
-
- abstime.tv_sec = currSysTime.time;
- abstime.tv_nsec = NANOSEC_PER_MILLISEC * currSysTime.millitm;
-
- abstime.tv_sec += 5;
-
- assert(pthread_cond_timedwait(&cvthing.notbusy, &cvthing.lock, &abstime) == ETIMEDOUT);
-
- assert(cvthing.notbusy != PTHREAD_COND_INITIALIZER);
-
- assert(pthread_create(&t[1], NULL, mythread, (void *) 1) == 0);
-
- ftime(&currSysTime);
-
- abstime.tv_sec = currSysTime.time;
- abstime.tv_nsec = NANOSEC_PER_MILLISEC * currSysTime.millitm;
-
- abstime.tv_sec += 5;
-
- while (! (cvthing.shared > 0))
- assert(pthread_cond_timedwait(&cvthing.notbusy, &cvthing.lock, &abstime) == 0);
-
- assert(cvthing.shared > 0);
-
- assert(pthread_mutex_unlock(&cvthing.lock) == 0);
-
- assert(pthread_mutex_destroy(&cvthing.lock) == 0);
-
- assert(cvthing.lock == NULL);
-
- assert(pthread_cond_destroy(&cvthing.notbusy) == 0);
-
- assert(cvthing.notbusy == NULL);
-
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/condvar6.c b/winsup/testsuite/winsup.api/pthread/condvar6.c
deleted file mode 100644
index f011bea13..000000000
--- a/winsup/testsuite/winsup.api/pthread/condvar6.c
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
- * File:
- *
- * Test Synopsis:
- * - Test pthread_cond_broadcast.
- *
- * Test Method (Validation or Falsification):
- * - Validation
- *
- * Requirements Tested:
- * -
- *
- * Features Tested:
- * -
- *
- * Cases Tested:
- * -
- *
- * Description:
- * - Test broadcast with NUMTHREADS (=5) waiting CVs.
- *
- * Environment:
- * -
- *
- * Input:
- * - None.
- *
- * Output:
- * - File name, Line number, and failed expression on failure.
- * - No output on success.
- *
- * Assumptions:
- * -
- *
- * Pass Criteria:
- * - Process returns zero exit status.
- *
- * Fail Criteria:
- * - Process returns non-zero exit status.
- */
-
-#include "test.h"
-#include <sys/timeb.h>
-
-/*
- * Create NUMTHREADS threads in addition to the Main thread.
- */
-enum {
- NUMTHREADS = 5
-};
-
-typedef struct bag_t_ bag_t;
-struct bag_t_ {
- int threadnum;
- int started;
- /* Add more per-thread state variables here */
-};
-
-static bag_t threadbag[NUMTHREADS + 1];
-
-typedef struct cvthing_t_ cvthing_t;
-
-struct cvthing_t_ {
- pthread_cond_t notbusy;
- pthread_mutex_t lock;
- int shared;
-};
-
-static cvthing_t cvthing = {
- PTHREAD_COND_INITIALIZER,
- PTHREAD_MUTEX_INITIALIZER,
- 0
-};
-
-static pthread_mutex_t start_flag = PTHREAD_MUTEX_INITIALIZER;
-
-static struct timespec abstime = { 0, 0 };
-
-static int awoken;
-
-void *
-mythread(void * arg)
-{
- bag_t * bag = (bag_t *) arg;
-
- assert(bag == &threadbag[bag->threadnum]);
- assert(bag->started == 0);
- bag->started = 1;
-
- /* Wait for the start gun */
- assert(pthread_mutex_lock(&start_flag) == 0);
- assert(pthread_mutex_unlock(&start_flag) == 0);
-
- assert(pthread_mutex_lock(&cvthing.lock) == 0);
-
- while (! (cvthing.shared > 0))
- assert(pthread_cond_timedwait(&cvthing.notbusy, &cvthing.lock, &abstime) == 0);
-
- assert(cvthing.shared > 0);
-
- awoken++;
-
- assert(pthread_mutex_unlock(&cvthing.lock) == 0);
-
- return (void *) 0;
-}
-
-int
-main()
-{
- int failed = 0;
- int i;
- pthread_t t[NUMTHREADS + 1];
-
- struct timeb currSysTime;
- const DWORD NANOSEC_PER_MILLISEC = 1000000;
-
- cvthing.shared = 0;
-
- assert((t[0] = pthread_self()) != NULL);
-
- assert(cvthing.notbusy == PTHREAD_COND_INITIALIZER);
-
- assert(cvthing.lock == PTHREAD_MUTEX_INITIALIZER);
-
- assert(pthread_mutex_lock(&start_flag) == 0);
-
- ftime(&currSysTime);
-
- abstime.tv_sec = currSysTime.time;
- abstime.tv_nsec = NANOSEC_PER_MILLISEC * currSysTime.millitm;
-
- abstime.tv_sec += 5;
-
- assert((t[0] = pthread_self()) != NULL);
-
- awoken = 0;
-
- for (i = 1; i <= NUMTHREADS; i++)
- {
- threadbag[i].started = 0;
- threadbag[i].threadnum = i;
- assert(pthread_create(&t[i], NULL, mythread, (void *) &threadbag[i]) == 0);
- }
-
- /*
- * Code to control or munipulate child threads should probably go here.
- */
-
- assert(pthread_mutex_unlock(&start_flag) == 0);
-
- /*
- * Give threads time to start.
- */
- Sleep(2000);
-
- assert(pthread_mutex_lock(&cvthing.lock) == 0);
-
- cvthing.shared++;
-
- assert(pthread_mutex_unlock(&cvthing.lock) == 0);
-
- assert(pthread_cond_broadcast(&cvthing.notbusy) == 0);
-
- /*
- * Give threads time to complete.
- */
- Sleep(2000);
-
- /*
- * Cleanup the CV.
- */
-
- assert(pthread_mutex_destroy(&cvthing.lock) == 0);
-
- assert(cvthing.lock == NULL);
-
- assert(pthread_cond_destroy(&cvthing.notbusy) == 0);
-
- assert(cvthing.notbusy == NULL);
-
- /*
- * Standard check that all threads started.
- */
- for (i = 1; i <= NUMTHREADS; i++)
- {
- failed = !threadbag[i].started;
-
- if (failed)
- {
- fprintf(stderr, "Thread %d: started %d\n", i, threadbag[i].started);
- }
- }
-
- assert(!failed);
-
- /*
- * Check any results here.
- */
-
- assert(awoken == NUMTHREADS);
-
- /*
- * Success.
- */
- return 0;
-}
-
-
diff --git a/winsup/testsuite/winsup.api/pthread/condvar7.c b/winsup/testsuite/winsup.api/pthread/condvar7.c
deleted file mode 100644
index 8e9808f48..000000000
--- a/winsup/testsuite/winsup.api/pthread/condvar7.c
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- * File: condvar7.c
- *
- *
- * Test Synopsis:
- * - Test pthread_cond_broadcast with thread cancelation.
- *
- * Test Method (Validation or Falsification):
- * - Validation
- *
- * Requirements Tested:
- * -
- *
- * Features Tested:
- * -
- *
- * Cases Tested:
- * -
- *
- * Description:
- * - Test broadcast with NUMTHREADS (=5) waiting CVs, one is canceled while waiting.
- *
- * Environment:
- * -
- *
- * Input:
- * - None.
- *
- * Output:
- * - File name, Line number, and failed expression on failure.
- * - No output on success.
- *
- * Assumptions:
- * -
- *
- * Pass Criteria:
- * - Process returns zero exit status.
- *
- * Fail Criteria:
- * - Process returns non-zero exit status.
- */
-
-#include "test.h"
-#include <sys/timeb.h>
-
-/*
- * Create NUMTHREADS threads in addition to the Main thread.
- */
-enum {
- NUMTHREADS = 5
-};
-
-typedef struct bag_t_ bag_t;
-struct bag_t_ {
- int threadnum;
- int started;
- /* Add more per-thread state variables here */
-};
-
-static bag_t threadbag[NUMTHREADS + 1];
-
-typedef struct cvthing_t_ cvthing_t;
-
-struct cvthing_t_ {
- pthread_cond_t notbusy;
- pthread_mutex_t lock;
- int shared;
-};
-
-static cvthing_t cvthing = {
- PTHREAD_COND_INITIALIZER,
- PTHREAD_MUTEX_INITIALIZER,
- 0
-};
-
-static pthread_mutex_t start_flag = PTHREAD_MUTEX_INITIALIZER;
-
-static struct timespec abstime = { 0, 0 };
-
-static int awoken;
-
-void *
-mythread(void * arg)
-{
- bag_t * bag = (bag_t *) arg;
-
- assert(bag == &threadbag[bag->threadnum]);
- assert(bag->started == 0);
- bag->started = 1;
-
- /* Wait for the start gun */
- assert(pthread_mutex_lock(&start_flag) == 0);
- assert(pthread_mutex_unlock(&start_flag) == 0);
-
- assert(pthread_mutex_lock(&cvthing.lock) == 0);
-
-#ifdef _MSC_VER
-#pragma inline_depth(0)
-#endif
- pthread_cleanup_push((void *) pthread_mutex_unlock, (void *) &cvthing.lock);
-
- while (! (cvthing.shared > 0))
- assert(pthread_cond_timedwait(&cvthing.notbusy, &cvthing.lock, &abstime) == 0);
-
- pthread_cleanup_pop(0);
-#ifdef _MSC_VER
-#pragma inline_depth()
-#endif
-
- assert(cvthing.shared > 0);
-
- awoken++;
-
- assert(pthread_mutex_unlock(&cvthing.lock) == 0);
-
- return (void *) 0;
-}
-
-int
-main()
-{
- int failed = 0;
- int i;
- pthread_t t[NUMTHREADS + 1];
- struct timeb currSysTime;
- const DWORD NANOSEC_PER_MILLISEC = 1000000;
-
- cvthing.shared = 0;
-
- assert((t[0] = pthread_self()) != NULL);
-
- assert(cvthing.notbusy == PTHREAD_COND_INITIALIZER);
-
- assert(cvthing.lock == PTHREAD_MUTEX_INITIALIZER);
-
- assert(pthread_mutex_lock(&start_flag) == 0);
-
- /* get current system time */
- ftime(&currSysTime);
-
- abstime.tv_sec = currSysTime.time;
- abstime.tv_nsec = NANOSEC_PER_MILLISEC * currSysTime.millitm;
-
- abstime.tv_sec += 10;
-
- assert((t[0] = pthread_self()) != NULL);
-
- awoken = 0;
-
- for (i = 1; i <= NUMTHREADS; i++)
- {
- threadbag[i].started = 0;
- threadbag[i].threadnum = i;
- assert(pthread_create(&t[i], NULL, mythread, (void *) &threadbag[i]) == 0);
- }
-
- /*
- * Code to control or munipulate child threads should probably go here.
- */
-
- assert(pthread_mutex_unlock(&start_flag) == 0);
-
- /*
- * Give threads time to start.
- */
- Sleep(1000);
-
- assert(pthread_mutex_lock(&cvthing.lock) == 0);
-
- cvthing.shared++;
-
- assert(pthread_mutex_unlock(&cvthing.lock) == 0);
-
- /*
- * Cancel one of the threads.
- */
- assert(pthread_cancel(t[3]) == 0);
- Sleep(500);
-
- /*
- * Signal all remaining waiting threads.
- */
- assert(pthread_cond_broadcast(&cvthing.notbusy) == 0);
-
- /*
- * Give threads time to complete.
- */
- Sleep(2000);
-
- /*
- * Cleanup the CV.
- */
-
- assert(pthread_mutex_destroy(&cvthing.lock) == 0);
-
- assert(cvthing.lock == NULL);
-
- assert(pthread_cond_destroy(&cvthing.notbusy) == 0);
-
- assert(cvthing.notbusy == NULL);
-
- /*
- * Standard check that all threads started.
- */
- for (i = 1; i <= NUMTHREADS; i++)
- {
- failed = !threadbag[i].started;
-
- if (failed)
- {
- fprintf(stderr, "Thread %d: started %d\n", i, threadbag[i].started);
- }
- }
-
- assert(!failed);
-
- /*
- * Check any results here.
- */
-
- assert(awoken == (NUMTHREADS - 1));
-
- /*
- * Success.
- */
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/condvar8.c b/winsup/testsuite/winsup.api/pthread/condvar8.c
deleted file mode 100644
index 771d91cb5..000000000
--- a/winsup/testsuite/winsup.api/pthread/condvar8.c
+++ /dev/null
@@ -1,221 +0,0 @@
-/*
- * File: condvar8.c
- *
- * Test Synopsis:
- * - Test multiple pthread_cond_broadcasts.
- *
- * Test Method (Validation or Falsification):
- * - Validation
- *
- * Requirements Tested:
- * -
- *
- * Features Tested:
- * -
- *
- * Cases Tested:
- * -
- *
- * Description:
- * - Make NUMTHREADS threads wait on CV, broadcast signal them, and then repeat.
- *
- * Environment:
- * -
- *
- * Input:
- * - None.
- *
- * Output:
- * - File name, Line number, and failed expression on failure.
- * - No output on success.
- *
- * Assumptions:
- * -
- *
- * Pass Criteria:
- * - Process returns zero exit status.
- *
- * Fail Criteria:
- * - Process returns non-zero exit status.
- */
-
-#include "test.h"
-#include <sys/timeb.h>
-
-/*
- * Create NUMTHREADS threads in addition to the Main thread.
- */
-enum {
- NUMTHREADS = 5
-};
-
-typedef struct bag_t_ bag_t;
-struct bag_t_ {
- int threadnum;
- int started;
- /* Add more per-thread state variables here */
-};
-
-static bag_t threadbag[NUMTHREADS + 1];
-
-typedef struct cvthing_t_ cvthing_t;
-
-struct cvthing_t_ {
- pthread_cond_t notbusy;
- pthread_mutex_t lock;
- int shared;
-};
-
-static cvthing_t cvthing = {
- PTHREAD_COND_INITIALIZER,
- PTHREAD_MUTEX_INITIALIZER,
- 0
-};
-
-static pthread_mutex_t start_flag = PTHREAD_MUTEX_INITIALIZER;
-
-static struct timespec abstime = { 0, 0 };
-
-static int awoken;
-
-static void *
-mythread(void * arg)
-{
- bag_t * bag = (bag_t *) arg;
-
- assert(bag == &threadbag[bag->threadnum]);
- assert(bag->started == 0);
- bag->started = 1;
-
- /* Wait for the start gun */
- assert(pthread_mutex_lock(&start_flag) == 0);
- assert(pthread_mutex_unlock(&start_flag) == 0);
-
- assert(pthread_mutex_lock(&cvthing.lock) == 0);
-
- pthread_cleanup_push((__cleanup_routine_type)pthread_mutex_unlock,
- (void *) &cvthing.lock);
-
- while (! (cvthing.shared > 0))
- assert(pthread_cond_timedwait(&cvthing.notbusy, &cvthing.lock, &abstime) == 0);
-
- pthread_cleanup_pop(0);
-
- assert(cvthing.shared > 0);
-
- awoken++;
-
- assert(pthread_mutex_unlock(&cvthing.lock) == 0);
-
- return (void *) 0;
-}
-
-int
-main()
-{
- int failed = 0;
- int i;
- int first, last;
- pthread_t t[NUMTHREADS + 1];
-
- struct timeb currSysTime;
- const DWORD NANOSEC_PER_MILLISEC = 1000000;
-
- assert((t[0] = pthread_self()) != NULL);
-
- assert(cvthing.notbusy == PTHREAD_COND_INITIALIZER);
-
- assert(cvthing.lock == PTHREAD_MUTEX_INITIALIZER);
-
- ftime(&currSysTime);
-
- abstime.tv_sec = currSysTime.time;
- abstime.tv_nsec = NANOSEC_PER_MILLISEC * currSysTime.millitm;
-
- abstime.tv_sec += 10;
-
- assert((t[0] = pthread_self()) != NULL);
-
- awoken = 0;
-
- for (first = 1, last = NUMTHREADS / 2;
- first < NUMTHREADS;
- first = last + 1, last = NUMTHREADS)
- {
- assert(pthread_mutex_lock(&start_flag) == 0);
-
- for (i = first; i <= last; i++)
- {
- threadbag[i].started = 0;
- threadbag[i].threadnum = i;
- assert(pthread_create(&t[i], NULL, mythread, (void *) &threadbag[i]) == 0);
- assert(pthread_detach(t[i]) == 0);
- }
-
- /*
- * Code to control or munipulate child threads should probably go here.
- */
- cvthing.shared = 0;
-
- assert(pthread_mutex_unlock(&start_flag) == 0);
-
- /*
- * Give threads time to start.
- */
- Sleep(1000);
-
- assert(pthread_mutex_lock(&cvthing.lock) == 0);
-
- cvthing.shared++;
-
- assert(pthread_mutex_unlock(&cvthing.lock) == 0);
-
- assert(pthread_cond_broadcast(&cvthing.notbusy) == 0);
-
- /*
- * Give threads time to complete.
- */
- Sleep(1000);
-
- assert(awoken == (i - 1));
- }
-
-
- /*
- * Standard check that all threads started.
- */
- for (i = 1; i <= NUMTHREADS; i++)
- {
- failed = !threadbag[i].started;
-
- if (failed)
- {
- fprintf(stderr, "Thread %d: started %d\n", i, threadbag[i].started);
- }
- }
-
- /*
- * Cleanup the CV.
- */
-
- assert(pthread_mutex_destroy(&cvthing.lock) == 0);
-
- assert(cvthing.lock == NULL);
-
- assert(pthread_cond_destroy(&cvthing.notbusy) == 0);
-
- assert(cvthing.notbusy == NULL);
-
- assert(!failed);
-
- /*
- * Check any results here.
- */
-
- assert(awoken == NUMTHREADS);
-
- /*
- * Success.
- */
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/condvar9.c b/winsup/testsuite/winsup.api/pthread/condvar9.c
deleted file mode 100644
index 294556266..000000000
--- a/winsup/testsuite/winsup.api/pthread/condvar9.c
+++ /dev/null
@@ -1,239 +0,0 @@
-/*
- * File: condvar9.c
- *
- *
- * Test Synopsis:
- * - Test multiple pthread_cond_broadcasts with thread cancelation.
- *
- * Test Method (Validation or Falsification):
- * - Validation
- *
- * Requirements Tested:
- * -
- *
- * Features Tested:
- * -
- *
- * Cases Tested:
- * -
- *
- * Description:
- * - Make NUMTHREADS threads wait on CV, broadcast signal them, cancel them
- * and then repeat.
- *
- * Environment:
- * -
- *
- * Input:
- * - None.
- *
- * Output:
- * - File name, Line number, and failed expression on failure.
- * - No output on success.
- *
- * Assumptions:
- * -
- *
- * Pass Criteria:
- * - Process returns zero exit status.
- *
- * Fail Criteria:
- * - Process returns non-zero exit status.
- */
-
-#include "test.h"
-#include <sys/timeb.h>
-
-/*
- * Create NUMTHREADS threads in addition to the Main thread.
- */
-enum {
- NUMTHREADS = 9
-};
-
-typedef struct bag_t_ bag_t;
-struct bag_t_ {
- int threadnum;
- int started;
- /* Add more per-thread state variables here */
-};
-
-static bag_t threadbag[NUMTHREADS + 1];
-
-typedef struct cvthing_t_ cvthing_t;
-
-struct cvthing_t_ {
- pthread_cond_t notbusy;
- pthread_mutex_t lock;
- int shared;
-};
-
-static cvthing_t cvthing = {
- PTHREAD_COND_INITIALIZER,
- PTHREAD_MUTEX_INITIALIZER,
- 0
-};
-
-static pthread_mutex_t start_flag = PTHREAD_MUTEX_INITIALIZER;
-
-static struct timespec abstime = { 0, 0 };
-
-static int awoken;
-static int not_canceled;
-
-static void *
-mythread(void * arg)
-{
- bag_t * bag = (bag_t *) arg;
-
- assert(bag == &threadbag[bag->threadnum]);
- assert(bag->started == 0);
- bag->started = 1;
-
- /* Wait for the start gun */
- assert(pthread_mutex_lock(&start_flag) == 0);
- assert(pthread_mutex_unlock(&start_flag) == 0);
-
- assert(pthread_mutex_lock(&cvthing.lock) == 0);
-
- /*
- * pthread_cond_timedwait is a cancelation point and we
- * going to cancel one deliberately.
- */
-#ifdef _MSC_VER
-#pragma inline_depth(0)
-#endif
- pthread_cleanup_push((void *) pthread_mutex_unlock, (void *) &cvthing.lock);
-
- while (! (cvthing.shared > 0))
- assert(pthread_cond_timedwait(&cvthing.notbusy, &cvthing.lock, &abstime) == 0);
-
- assert(cvthing.shared > 0);
-
- awoken++;
-
- pthread_testcancel();
-
- pthread_cleanup_pop(0);
-#ifdef _MSC_VER
-#pragma inline_depth()
-#endif
-
- not_canceled++;
-
- assert(pthread_mutex_unlock(&cvthing.lock) == 0);
-
- return (void *) 0;
-}
-
-int
-main()
-{
- int failed = 0;
- int i;
- int first, last;
- pthread_t t[NUMTHREADS + 1];
- struct timeb currSysTime;
- const DWORD NANOSEC_PER_MILLISEC = 1000000;
-
- assert((t[0] = pthread_self()) != NULL);
-
- assert(cvthing.notbusy == PTHREAD_COND_INITIALIZER);
-
- assert(cvthing.lock == PTHREAD_MUTEX_INITIALIZER);
-
- /* get current system time */
- ftime(&currSysTime);
-
- abstime.tv_sec = currSysTime.time;
- abstime.tv_nsec = NANOSEC_PER_MILLISEC * currSysTime.millitm;
-
- abstime.tv_sec += 5;
-
- assert((t[0] = pthread_self()) != NULL);
-
- awoken = 0;
- not_canceled = 0;
-
- for (first = 1, last = NUMTHREADS / 2;
- first < NUMTHREADS;
- first = last + 1, last = NUMTHREADS)
- {
- assert(pthread_mutex_lock(&start_flag) == 0);
-
- for (i = first; i <= last; i++)
- {
- threadbag[i].started = 0;
- threadbag[i].threadnum = i;
- assert(pthread_create(&t[i], NULL, mythread, (void *) &threadbag[i]) == 0);
- assert(pthread_detach(t[i]) == 0);
- }
-
- /*
- * Code to control or munipulate child threads should probably go here.
- */
- cvthing.shared = 0;
-
- assert(pthread_mutex_unlock(&start_flag) == 0);
-
- /*
- * Give threads time to start.
- */
- Sleep(1000);
-
- assert(pthread_mutex_lock(&cvthing.lock) == 0);
-
- cvthing.shared++;
-
- assert(pthread_cond_broadcast(&cvthing.notbusy) == 0);
- for (i = first; i <= last; i++)
- assert(pthread_cancel(t[i]) == 0);
-
- assert(pthread_mutex_unlock(&cvthing.lock) == 0);
-
- /*
- * Give threads time to complete.
- */
- Sleep(1000);
- }
-
-
- /*
- * Standard check that all threads started.
- */
- for (i = 1; i <= NUMTHREADS; i++)
- {
- failed = !threadbag[i].started;
-
- if (failed)
- {
- fprintf(stderr, "Thread %d: started %d\n", i, threadbag[i].started);
- }
- }
-
- /*
- * Cleanup the CV.
- */
-
- assert(pthread_mutex_destroy(&cvthing.lock) == 0);
-
- assert(cvthing.lock == NULL);
-
- assert(pthread_cond_destroy(&cvthing.notbusy) == 0);
-
- assert(cvthing.notbusy == NULL);
-
- assert(!failed);
-
- /*
- * Check any results here.
- */
-
- assert(awoken == NUMTHREADS);
- assert(not_canceled == 0);
-
- /*
- * Success.
- */
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/count1.c b/winsup/testsuite/winsup.api/pthread/count1.c
deleted file mode 100644
index ae30ed0a2..000000000
--- a/winsup/testsuite/winsup.api/pthread/count1.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * count1.c
- *
- * Description:
- * Test some basic assertions about the number of threads at runtime.
- */
-
-#include "test.h"
-
-#if ! defined (__MINGW32__) || defined (__MSVCRT__)
-#define NUMTHREADS (60)
-#else
-#define NUMTHREADS (59)
-#endif
-
-static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
-static pthread_t threads[NUMTHREADS];
-static unsigned numThreads = 0;
-
-void *
-myfunc(void *arg)
-{
- pthread_mutex_lock(&lock);
- numThreads++;
- pthread_mutex_unlock(&lock);
-
- Sleep(1000);
- return 0;
-}
-int
-main()
-{
- int i;
- int maxThreads = sizeof(threads) / sizeof(pthread_t);
-
- /*
- * Spawn NUMTHREADS threads. Each thread should increment the
- * numThreads variable, sleep for one second.
- */
- for (i = 0; i < maxThreads; i++)
- {
- assert(pthread_create(&threads[i], NULL, myfunc, 0) == 0);
- }
-
- /*
- * Wait for all the threads to exit.
- */
- for (i = 0; i < maxThreads; i++)
- {
- assert(pthread_join(threads[i], NULL) == 0);
- }
-
- /*
- * Check the number of threads created.
- */
- assert((int) numThreads == maxThreads);
-
- /*
- * Success.
- */
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/create1.c b/winsup/testsuite/winsup.api/pthread/create1.c
deleted file mode 100644
index 192e52d9d..000000000
--- a/winsup/testsuite/winsup.api/pthread/create1.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * create1.c
- *
- * Description:
- * Create a thread and check that it ran.
- *
- * Depends on API functions: None.
- */
-
-#include "test.h"
-
-static int washere = 0;
-
-void * func(void * arg)
-{
- washere = 1;
- return 0;
-}
-
-int
-main()
-{
- pthread_t t;
-
- assert(pthread_create(&t, NULL, func, NULL) == 0);
-
- /* A dirty hack, but we cannot rely on pthread_join in this
- primitive test. */
- Sleep(2000);
-
- assert(washere == 1);
-
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/create2.c b/winsup/testsuite/winsup.api/pthread/create2.c
deleted file mode 100644
index 40e637b9d..000000000
--- a/winsup/testsuite/winsup.api/pthread/create2.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * File: create2.c
- *
- * Test Synopsis:
- * - Test that threads have a Win32 handle when started.
- *
- * Test Method (Validation or Falsification):
- * - Statistical, not absolute (depends on sample size).
- *
- * Requirements Tested:
- * -
- *
- * Features Tested:
- * -
- *
- * Cases Tested:
- * -
- *
- * Description:
- * -
- *
- * Environment:
- * -
- *
- * Input:
- * - None.
- *
- * Output:
- * - File name, Line number, and failed expression on failure.
- * - No output on success.
- *
- * Assumptions:
- * -
- *
- * Pass Criteria:
- * - Process returns zero exit status.
- *
- * Fail Criteria:
- * - Process returns non-zero exit status.
- */
-
-#include "test.h"
-
-const int NUMTHREADS = 10000;
-
-static int washere = 0;
-
-void * func(void * arg)
-{
- washere = 1;
- return (void *) 0;
-}
-
-int
-main()
-{
- pthread_t t;
- pthread_attr_t attr;
- void * result = NULL;
- int i;
-
- pthread_attr_init(&attr);
- pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
-
- for (i = 0; i < NUMTHREADS; i++)
- {
- washere = 0;
- assert(pthread_create(&t, &attr, func, NULL) == 0);
- pthread_join(t, &result);
- assert(washere == 1);
- }
-
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/equal1.c b/winsup/testsuite/winsup.api/pthread/equal1.c
deleted file mode 100644
index 617a95664..000000000
--- a/winsup/testsuite/winsup.api/pthread/equal1.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Test for pthread_equal.
- *
- * Depends on functions: pthread_create().
- */
-
-#include "test.h"
-
-void * func(void * arg)
-{
- Sleep(2000);
- return 0;
-}
-
-int
-main()
-{
- pthread_t t1, t2;
-
- assert(pthread_create(&t1, NULL, func, (void *) 1) == 0);
-
- assert(pthread_create(&t2, NULL, func, (void *) 2) == 0);
-
- assert(pthread_equal(t1, t2) == 0);
-
- assert(pthread_equal(t1,t1) != 0);
-
- /* This is a hack. We don't want to rely on pthread_join
- yet if we can help it. */
- Sleep(4000);
-
- /* Success. */
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/exit1.c b/winsup/testsuite/winsup.api/pthread/exit1.c
deleted file mode 100644
index 06b7692de..000000000
--- a/winsup/testsuite/winsup.api/pthread/exit1.c
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * Test for pthread_exit().
- *
- * Depends on API functions: None.
- */
-
-#include "test.h"
-
-int
-main(int argc, char * argv[])
-{
- /* A simple test first. */
- pthread_exit((void *) 0);
-
- /* Not reached */
- assert(0);
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/exit2.c b/winsup/testsuite/winsup.api/pthread/exit2.c
deleted file mode 100644
index 684305b40..000000000
--- a/winsup/testsuite/winsup.api/pthread/exit2.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Test for pthread_exit().
- *
- * Depends on API functions:
- * pthread_create()
- * pthread_exit()
- */
-
-#include "test.h"
-
-void *
-func(void * arg)
-{
- pthread_exit(arg);
-
- /* Never reached. */
- assert(0);
-}
-
-int
-main(int argc, char * argv[])
-{
- pthread_t t;
-
- assert(pthread_create(&t, NULL, func, (void *) NULL) == 0);
-
- Sleep(1000);
-
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/exit3.c b/winsup/testsuite/winsup.api/pthread/exit3.c
deleted file mode 100644
index 0b6ec31c5..000000000
--- a/winsup/testsuite/winsup.api/pthread/exit3.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Test for pthread_exit().
- *
- * Depends on API functions: pthread_create().
- */
-
-#include "test.h"
-
-void *
-func(void * arg)
-{
- pthread_exit(arg);
-
- /* Never reached. */
- assert(0);
-}
-
-int
-main(int argc, char * argv[])
-{
- pthread_t id[4];
- int i;
-
- /* Create a few threads and then exit. */
- for (i = 0; i < 4; i++)
- {
- assert(pthread_create(&id[i], NULL, func, (void *) i) == 0);
- }
-
- Sleep(1000);
-
- /* Success. */
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/inherit1.c b/winsup/testsuite/winsup.api/pthread/inherit1.c
deleted file mode 100644
index a909eb763..000000000
--- a/winsup/testsuite/winsup.api/pthread/inherit1.c
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * File: inherit1.c
- *
- * Test Synopsis:
- * - Test thread priority inheritance.
- *
- * Test Method (Validation or Falsification):
- * -
- *
- * Requirements Tested:
- * -
- *
- * Features Tested:
- * -
- *
- * Cases Tested:
- * -
- *
- * Description:
- * -
- *
- * Environment:
- * -
- *
- * Input:
- * - None.
- *
- * Output:
- * - File name, Line number, and failed expression on failure.
- * - No output on success.
- *
- * Assumptions:
- * -
- *
- * Pass Criteria:
- * - Process returns zero exit status.
- *
- * Fail Criteria:
- * - Process returns non-zero exit status.
- */
-
-#include "test.h"
-
-void * func(void * arg)
-{
- int policy;
- struct sched_param param;
-
- assert(pthread_getschedparam(pthread_self(), &policy, &param) == 0);
- return (void *) param.sched_priority;
-}
-
-int
-main()
-{
- pthread_t t;
- pthread_t mainThread = pthread_self();
- pthread_attr_t attr;
- void * result = NULL;
- struct sched_param param;
- struct sched_param mainParam;
- int maxPrio;
- int minPrio;
- int prio;
- int policy;
- int inheritsched = -1;
-
- assert((maxPrio = sched_get_priority_max(SCHED_OTHER)) != -1);
- assert((minPrio = sched_get_priority_min(SCHED_OTHER)) != -1);
-
- assert(pthread_attr_init(&attr) == 0);
- assert(pthread_attr_setinheritsched(&attr, PTHREAD_INHERIT_SCHED) == 0);
- assert(pthread_attr_getinheritsched(&attr, &inheritsched) == 0);
- assert(inheritsched == PTHREAD_INHERIT_SCHED);
-
- for (prio = minPrio; prio < maxPrio; prio++)
- {
- mainParam.sched_priority = prio;
-
- /* Change the main thread priority */
- assert(pthread_setschedparam(mainThread, SCHED_OTHER, &mainParam) == 0);
- assert(pthread_getschedparam(mainThread, &policy, &mainParam) == 0);
- assert(policy == SCHED_OTHER);
- assert(mainParam.sched_priority == prio);
-
- for (param.sched_priority = prio;
- param.sched_priority <= maxPrio;
- param.sched_priority++)
- {
- /* The new thread create should ignore this new priority */
- assert(pthread_attr_setschedparam(&attr, &param) == 0);
- assert(pthread_create(&t, &attr, func, NULL) == 0);
- pthread_join(t, &result);
- assert((int) result == mainParam.sched_priority);
- }
- }
-
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/join0.c b/winsup/testsuite/winsup.api/pthread/join0.c
deleted file mode 100644
index 54b0bee6b..000000000
--- a/winsup/testsuite/winsup.api/pthread/join0.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Test for pthread_join().
- *
- * Depends on API functions: pthread_create(), pthread_exit().
- */
-
-#include "test.h"
-
-void *
-func(void * arg)
-{
- Sleep(2000);
-
- pthread_exit(arg);
-
- /* Never reached. */
- exit(1);
-}
-
-int
-main(int argc, char * argv[])
-{
- pthread_t id;
- int result;
-
- /* Create a single thread and wait for it to exit. */
- assert(pthread_create(&id, NULL, func, (void *) 123) == 0);
-
- assert(pthread_join(id, (void **) &result) == 0);
-
-#if ! defined (__MINGW32__) || defined (__MSVCRT__)
- assert(result == 123);
-#else
-# warning pthread_join not fully supported in this configuration.
- assert(result == 0);
-#endif
-
- /* Success. */
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/join1.c b/winsup/testsuite/winsup.api/pthread/join1.c
deleted file mode 100644
index d74e0c484..000000000
--- a/winsup/testsuite/winsup.api/pthread/join1.c
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Test for pthread_join().
- *
- * Depends on API functions: pthread_create(), pthread_join(), pthread_exit().
- */
-
-#include "test.h"
-
-void *
-func(void * arg)
-{
- int i = (int) arg;
-
- Sleep(i * 500);
-
- pthread_exit(arg);
-
- /* Never reached. */
- exit(1);
-}
-
-int
-main(int argc, char * argv[])
-{
- pthread_t id[4];
- int i;
- int result;
-
- /* Create a few threads and then exit. */
- for (i = 0; i < 4; i++)
- {
- assert(pthread_create(&id[i], NULL, func, (void *) i) == 0);
- }
-
- /* Some threads will finish before they are joined, some after. */
- Sleep(1000);
-
- for (i = 0; i < 4; i++)
- {
- assert(pthread_join(id[i], (void **) &result) == 0);
-#if ! defined (__MINGW32__) || defined (__MSVCRT__)
- assert(result == i);
-#else
-# warning pthread_join not fully supported in this configuration.
- assert(result == 0);
-#endif
- }
-
- /* Success. */
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/join2.c b/winsup/testsuite/winsup.api/pthread/join2.c
deleted file mode 100644
index cdc8ca2d9..000000000
--- a/winsup/testsuite/winsup.api/pthread/join2.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Test for pthread_join() returning return value from threads.
- *
- * Depends on API functions: pthread_create().
- */
-
-#include "test.h"
-
-void *
-func(void * arg)
-{
- Sleep(1000);
- return arg;
-}
-
-int
-main(int argc, char * argv[])
-{
- pthread_t id[4];
- int i;
- int result;
-
- /* Create a few threads and then exit. */
- for (i = 0; i < 4; i++)
- {
- assert(pthread_create(&id[i], NULL, func, (void *) i) == 0);
- }
-
- for (i = 0; i < 4; i++)
- {
- assert(pthread_join(id[i], (void **) &result) == 0);
-#if ! defined (__MINGW32__) || defined (__MSVCRT__)
- /* CRTDLL _beginthread doesn't support return value, so
- the assertion is guaranteed to fail. */
- assert(result == i);
-#endif
- }
-
- /* Success. */
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/mainthreadexits.c b/winsup/testsuite/winsup.api/pthread/mainthreadexits.c
deleted file mode 100644
index b3a3653b8..000000000
--- a/winsup/testsuite/winsup.api/pthread/mainthreadexits.c
+++ /dev/null
@@ -1,48 +0,0 @@
-#include <stdio.h>
-#include <unistd.h>
-#include <pthread.h>
-#include <stdlib.h>
-
-static void * Thread (void *);
-
-static pthread_t main_thread;
-static pthread_t secondThread;
-static int result = 2;
-
-int main(void)
-{
- main_thread = pthread_self ();
-
- if (pthread_create (&secondThread, NULL, Thread, NULL))
- exit (1);
- sleep (5);
- pthread_exit (&result);
- /* If pthread_exit doesm't (which would be a bug) then we do */
- return 1;
-}
-
-static void * Thread (void *not_used)
-{
- void *myresult;
- /* We should be able to join this */
- if (pthread_join (main_thread, &myresult))
- exit (1);
-
- if (*(int *)myresult != 2)
- exit (1);
-
- exit (0);
-}
-/*
-This valid code doesn't work at all. The mainthread object in MTinterface
-is not properly initialized, the cancel_event is NULL and the win32_obj_id
-is NULL because myself->hProcess is NULL when MTinterface is initialized
-(and i don't think that a process handle can be used as thread handle).
-Even if the handles would be valid the pthread_join call would try to
-delete a thread object that is created static which would result in a
-corrupted heap.
-
-Concept test Contributed by Thomas Pfaff <tpfaff@gmx.net>
-Scriptable test by Robert Collins <rbtcollins@hotmail.com>
-
-*/
diff --git a/winsup/testsuite/winsup.api/pthread/mutex1.c b/winsup/testsuite/winsup.api/pthread/mutex1.c
deleted file mode 100644
index b7f6b6f15..000000000
--- a/winsup/testsuite/winsup.api/pthread/mutex1.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * mutex1.c
- *
- * Create a simple mutex object, lock it, and then unlock it again.
- * This is the simplest test of the pthread mutex family that we can do.
- *
- * Depends on API functions:
- * pthread_mutex_init()
- * pthread_mutex_lock()
- * pthread_mutex_unlock()
- * pthread_mutex_destroy()
- */
-
-#include "test.h"
-
-pthread_mutex_t mutex = NULL;
-
-int
-main()
-{
- assert(mutex == NULL);
-
- assert(pthread_mutex_init(&mutex, NULL) == 0);
-
- assert(mutex != NULL);
-
- assert(pthread_mutex_lock(&mutex) == 0);
-
- assert(pthread_mutex_unlock(&mutex) == 0);
-
- assert(pthread_mutex_destroy(&mutex) == 0);
-
- assert(mutex == NULL);
-
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/mutex1d.c b/winsup/testsuite/winsup.api/pthread/mutex1d.c
deleted file mode 100644
index 354b106d1..000000000
--- a/winsup/testsuite/winsup.api/pthread/mutex1d.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * mutex1d.c
- *
- * As for mutex1.c but with type set to PTHREAD_MUTEX_DEFAULT.
- *
- * Create a simple mutex object, lock it, unlock it, then destroy it.
- * This is the simplest test of the pthread mutex family that we can do.
- *
- * Depends on API functions:
- * pthread_mutexattr_settype()
- * pthread_mutex_init()
- * pthread_mutex_destroy()
- */
-
-#include "test.h"
-
-pthread_mutex_t mutex = NULL;
-pthread_mutexattr_t mxAttr;
-
-int
-main()
-{
- assert(pthread_mutexattr_init(&mxAttr) == 0);
-
- assert(pthread_mutexattr_settype(&mxAttr, PTHREAD_MUTEX_DEFAULT) == 0);
-
- assert(mutex == NULL);
-
- assert(pthread_mutex_init(&mutex, &mxAttr) == 0);
-
- assert(mutex != NULL);
-
- assert(pthread_mutex_lock(&mutex) == 0);
-
- assert(pthread_mutex_unlock(&mutex) == 0);
-
- assert(pthread_mutex_destroy(&mutex) == 0);
-
- assert(mutex == NULL);
-
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/mutex1e.c b/winsup/testsuite/winsup.api/pthread/mutex1e.c
deleted file mode 100644
index 2feb16c08..000000000
--- a/winsup/testsuite/winsup.api/pthread/mutex1e.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * mutex1e.c
- *
- * As for mutex1.c but with type set to PTHREAD_MUTEX_ERRORCHECK.
- *
- * Create a simple mutex object, lock it, unlock it, then destroy it.
- * This is the simplest test of the pthread mutex family that we can do.
- *
- * Depends on API functions:
- * pthread_mutexattr_settype()
- * pthread_mutex_init()
- * pthread_mutex_destroy()
- */
-
-#include "test.h"
-
-pthread_mutex_t mutex = NULL;
-pthread_mutexattr_t mxAttr;
-
-int
-main()
-{
- assert(pthread_mutexattr_init(&mxAttr) == 0);
-
- assert(pthread_mutexattr_settype(&mxAttr, PTHREAD_MUTEX_ERRORCHECK) == 0);
-
- assert(mutex == NULL);
-
- assert(pthread_mutex_init(&mutex, &mxAttr) == 0);
-
- assert(mutex != NULL);
-
- assert(pthread_mutex_lock(&mutex) == 0);
-
- assert(pthread_mutex_unlock(&mutex) == 0);
-
- assert(pthread_mutex_destroy(&mutex) == 0);
-
- assert(mutex == NULL);
-
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/mutex1n.c b/winsup/testsuite/winsup.api/pthread/mutex1n.c
deleted file mode 100644
index 9af3d5f5c..000000000
--- a/winsup/testsuite/winsup.api/pthread/mutex1n.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * mutex1n.c
- *
- * As for mutex1.c but with type set to PTHREAD_MUTEX_NORMAL.
- *
- * Create a simple mutex object, lock it, unlock it, then destroy it.
- * This is the simplest test of the pthread mutex family that we can do.
- *
- * Depends on API functions:
- * pthread_mutexattr_settype()
- * pthread_mutex_init()
- * pthread_mutex_destroy()
- */
-
-#include "test.h"
-
-pthread_mutex_t mutex = NULL;
-pthread_mutexattr_t mxAttr;
-
-int
-main()
-{
- assert(pthread_mutexattr_init(&mxAttr) == 0);
-
- assert(pthread_mutexattr_settype(&mxAttr, PTHREAD_MUTEX_NORMAL) == 0);
-
- assert(mutex == NULL);
-
- assert(pthread_mutex_init(&mutex, &mxAttr) == 0);
-
- assert(mutex != NULL);
-
- assert(pthread_mutex_lock(&mutex) == 0);
-
- assert(pthread_mutex_unlock(&mutex) == 0);
-
- assert(pthread_mutex_destroy(&mutex) == 0);
-
- assert(mutex == NULL);
-
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/mutex1r.c b/winsup/testsuite/winsup.api/pthread/mutex1r.c
deleted file mode 100644
index b5131bb0e..000000000
--- a/winsup/testsuite/winsup.api/pthread/mutex1r.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * mutex1r.c
- *
- * As for mutex1.c but with type set to PTHREAD_MUTEX_RECURSIVE.
- *
- * Create a simple mutex object, lock it, unlock it, then destroy it.
- * This is the simplest test of the pthread mutex family that we can do.
- *
- * Depends on API functions:
- * pthread_mutexattr_settype()
- * pthread_mutex_init()
- * pthread_mutex_destroy()
- */
-
-#include "test.h"
-
-pthread_mutex_t mutex = NULL;
-pthread_mutexattr_t mxAttr;
-
-int
-main()
-{
- assert(pthread_mutexattr_init(&mxAttr) == 0);
-
- assert(pthread_mutexattr_settype(&mxAttr, PTHREAD_MUTEX_RECURSIVE) == 0);
-
- assert(mutex == NULL);
-
- assert(pthread_mutex_init(&mutex, &mxAttr) == 0);
-
- assert(mutex != NULL);
-
- assert(pthread_mutex_lock(&mutex) == 0);
-
- assert(pthread_mutex_unlock(&mutex) == 0);
-
- assert(pthread_mutex_destroy(&mutex) == 0);
-
- assert(mutex == NULL);
-
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/mutex2.c b/winsup/testsuite/winsup.api/pthread/mutex2.c
deleted file mode 100644
index 731c47fab..000000000
--- a/winsup/testsuite/winsup.api/pthread/mutex2.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * mutex2.c
- *
- * Declare a static mutex object, lock it,
- * and then unlock it again.
- *
- * Depends on API functions:
- * pthread_mutex_lock()
- * pthread_mutex_unlock()
- */
-
-#include "test.h"
-
-pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
-
-int
-main()
-{
- assert(mutex == PTHREAD_MUTEX_INITIALIZER);
-
- assert(pthread_mutex_lock(&mutex) == 0);
-
- assert(mutex != PTHREAD_MUTEX_INITIALIZER);
-
- assert(mutex != NULL);
-
- assert(pthread_mutex_unlock(&mutex) == 0);
-
- assert(pthread_mutex_destroy(&mutex) == 0);
-
- assert(mutex == NULL);
-
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/mutex3.c b/winsup/testsuite/winsup.api/pthread/mutex3.c
deleted file mode 100644
index 07e75b187..000000000
--- a/winsup/testsuite/winsup.api/pthread/mutex3.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * mutex3.c
- *
- * Declare a static mutex object, lock it, trylock it,
- * and then unlock it again.
- *
- * Depends on API functions:
- * pthread_mutex_lock()
- * pthread_mutex_trylock()
- * pthread_mutex_unlock()
- */
-
-#include "test.h"
-
-pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER;
-
-static int washere = 0;
-
-void * func(void * arg)
-{
- assert(pthread_mutex_trylock(&mutex1) == EBUSY);
-
- washere = 1;
-
- return 0;
-}
-
-int
-main()
-{
- pthread_t t;
-
- assert(pthread_mutex_lock(&mutex1) == 0);
-
- assert(pthread_create(&t, NULL, func, NULL) == 0);
- assert(pthread_join(t, NULL) == 0);
-
- assert(pthread_mutex_unlock(&mutex1) == 0);
-
- assert(washere == 1);
-
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/mutex4.c b/winsup/testsuite/winsup.api/pthread/mutex4.c
deleted file mode 100644
index 8a983fee9..000000000
--- a/winsup/testsuite/winsup.api/pthread/mutex4.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * mutex4.c
- *
- * Thread A locks mutex - thread B tries to unlock.
- *
- * Depends on API functions:
- * pthread_mutex_lock()
- * pthread_mutex_trylock()
- * pthread_mutex_unlock()
- */
-
-#include "test.h"
-
-static int wasHere = 0;
-
-static pthread_mutex_t mutex1;
-
-void * unlocker(void * arg)
-{
- int expectedResult = (int) arg;
-
- wasHere++;
- assert(pthread_mutex_unlock(&mutex1) == expectedResult);
- wasHere++;
- return NULL;
-}
-
-int
-main()
-{
- pthread_t t;
- pthread_mutexattr_t ma;
-
- assert(pthread_mutexattr_init(&ma) == 0);
-
- wasHere = 0;
- assert(pthread_mutexattr_settype(&ma, PTHREAD_MUTEX_ERRORCHECK) == 0);
- assert(pthread_mutex_init(&mutex1, &ma) == 0);
- assert(pthread_mutex_lock(&mutex1) == 0);
- assert(pthread_create(&t, NULL, unlocker, (void *) EPERM) == 0);
- assert(pthread_join(t, NULL) == 0);
- assert(pthread_mutex_unlock(&mutex1) == 0);
- assert(pthread_mutex_destroy(&mutex1) == 0);
- assert(wasHere == 2);
-
- wasHere = 0;
- assert(pthread_mutexattr_settype(&ma, PTHREAD_MUTEX_ERRORCHECK) == 0);
- assert(pthread_mutex_init(&mutex1, &ma) == 0);
- assert(pthread_mutex_lock(&mutex1) == 0);
- assert(pthread_create(&t, NULL, unlocker, (void *) EPERM) == 0);
- assert(pthread_join(t, NULL) == 0);
- assert(pthread_mutex_unlock(&mutex1) == 0);
- assert(pthread_mutex_destroy(&mutex1) == 0);
- assert(wasHere == 2);
-
- wasHere = 0;
- assert(pthread_mutexattr_settype(&ma, PTHREAD_MUTEX_RECURSIVE) == 0);
- assert(pthread_mutex_init(&mutex1, &ma) == 0);
- assert(pthread_mutex_lock(&mutex1) == 0);
- assert(pthread_create(&t, NULL, unlocker, (void *) EPERM) == 0);
- assert(pthread_join(t, NULL) == 0);
- assert(pthread_mutex_unlock(&mutex1) == 0);
- assert(pthread_mutex_destroy(&mutex1) == 0);
- assert(wasHere == 2);
-
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/mutex5.c b/winsup/testsuite/winsup.api/pthread/mutex5.c
deleted file mode 100644
index 7029da12f..000000000
--- a/winsup/testsuite/winsup.api/pthread/mutex5.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * mutex5.c
- *
- * Confirm the equality/inequality of the various mutex types,
- * and the default not-set value.
- */
-
-#include "test.h"
-
-static pthread_mutexattr_t mxAttr;
-
-int
-main()
-{
- int mxType = -1;
- int success = 0; /* Use to quell GNU compiler warnings. */
-
- assert(success = PTHREAD_MUTEX_DEFAULT == PTHREAD_MUTEX_NORMAL);
- assert(success = PTHREAD_MUTEX_DEFAULT != PTHREAD_MUTEX_RECURSIVE);
- assert(success = PTHREAD_MUTEX_RECURSIVE != PTHREAD_MUTEX_ERRORCHECK);
-
- if (success == success)
- {
- assert(pthread_mutexattr_init(&mxAttr) == 0);
- assert(pthread_mutexattr_gettype(&mxAttr, &mxType) == 0);
- assert(mxType == PTHREAD_MUTEX_ERRORCHECK);
- }
-
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/mutex6d.c b/winsup/testsuite/winsup.api/pthread/mutex6d.c
deleted file mode 100644
index f39c1ac53..000000000
--- a/winsup/testsuite/winsup.api/pthread/mutex6d.c
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * mutex6d.c
- *
- * Tests PTHREAD_MUTEX_DEFAULT mutex type.
- * Thread locks mutex twice (recursive lock).
- * The thread should deadlock.
- *
- * Depends on API functions:
- * pthread_create()
- * pthread_mutexattr_init()
- * pthread_mutexattr_settype()
- * pthread_mutexattr_gettype()
- * pthread_mutex_init()
- * pthread_mutex_lock()
- * pthread_mutex_unlock()
- */
-
-#include "test.h"
-
-static int lockCount = 0;
-
-static pthread_mutex_t mutex;
-static pthread_mutexattr_t mxAttr;
-
-void * locker(void * arg)
-{
- assert(pthread_mutex_lock(&mutex) == 0);
- lockCount++;
-
- /* Should wait here (deadlocked) */
- assert(pthread_mutex_lock(&mutex) == 0);
- lockCount++;
- assert(pthread_mutex_unlock(&mutex) == 0);
-
- return (void *) 555;
-}
-
-int
-main()
-{
- pthread_t t;
- int mxType = -1;
-
- assert(pthread_mutexattr_init(&mxAttr) == 0);
- assert(pthread_mutexattr_settype(&mxAttr, PTHREAD_MUTEX_DEFAULT) == 0);
- assert(pthread_mutexattr_gettype(&mxAttr, &mxType) == 0);
- assert(mxType == PTHREAD_MUTEX_NORMAL);
-
- assert(pthread_mutex_init(&mutex, &mxAttr) == 0);
-
- assert(pthread_create(&t, NULL, locker, NULL) == 0);
-
- Sleep(1000);
-
- assert(lockCount == 1);
-
- /*
- * Should succeed even though we don't own the lock
- * because FAST mutexes don't check ownership.
- */
- assert(pthread_mutex_unlock(&mutex) == 0);
-
- Sleep (1000);
-
- assert(lockCount == 2);
-
- exit(0);
-
- /* Never reached */
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/mutex6e.c b/winsup/testsuite/winsup.api/pthread/mutex6e.c
deleted file mode 100644
index e22550f7a..000000000
--- a/winsup/testsuite/winsup.api/pthread/mutex6e.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * mutex6e.c
- *
- * Tests PTHREAD_MUTEX_ERRORCHECK mutex type.
- * Thread locks mutex twice (recursive lock).
- * This should fail with an EDEADLK error.
- * The second unlock attempt should fail with an EPERM error.
- *
- * Depends on API functions:
- * pthread_create()
- * pthread_join()
- * pthread_mutexattr_init()
- * pthread_mutexattr_destroy()
- * pthread_mutexattr_settype()
- * pthread_mutexattr_gettype()
- * pthread_mutex_init()
- * pthread_mutex_destroy()
- * pthread_mutex_lock()
- * pthread_mutex_unlock()
- */
-
-#include "test.h"
-
-static int lockCount = 0;
-
-static pthread_mutex_t mutex;
-static pthread_mutexattr_t mxAttr;
-
-void * locker(void * arg)
-{
- assert(pthread_mutex_lock(&mutex) == 0);
- lockCount++;
- assert(pthread_mutex_lock(&mutex) == EDEADLK);
- lockCount++;
- assert(pthread_mutex_unlock(&mutex) == 0);
- assert(pthread_mutex_unlock(&mutex) == EPERM);
-
- return (void *) 555;
-}
-
-int
-main()
-{
- pthread_t t;
- int result = 0;
- int mxType = -1;
-
- assert(pthread_mutexattr_init(&mxAttr) == 0);
- assert(pthread_mutexattr_settype(&mxAttr, PTHREAD_MUTEX_ERRORCHECK) == 0);
- assert(pthread_mutexattr_gettype(&mxAttr, &mxType) == 0);
- assert(mxType == PTHREAD_MUTEX_ERRORCHECK);
-
- assert(pthread_mutex_init(&mutex, &mxAttr) == 0);
-
- assert(pthread_create(&t, NULL, locker, NULL) == 0);
-
- assert(pthread_join(t, (void **) &result) == 0);
- assert(result == 555);
-
- assert(lockCount == 2);
-
- assert(pthread_mutex_destroy(&mutex) == 0);
- assert(pthread_mutexattr_destroy(&mxAttr) == 0);
-
- exit(0);
-
- /* Never reached */
- return 0;
-}
-
diff --git a/winsup/testsuite/winsup.api/pthread/mutex6n.c b/winsup/testsuite/winsup.api/pthread/mutex6n.c
deleted file mode 100644
index 38cbba034..000000000
--- a/winsup/testsuite/winsup.api/pthread/mutex6n.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * mutex6n.c
- *
- * Tests PTHREAD_MUTEX_NORMAL mutex type.
- * Thread locks mutex twice (recursive lock).
- * The thread should deadlock.
- *
- * Depends on API functions:
- * pthread_create()
- * pthread_mutexattr_init()
- * pthread_mutexattr_settype()
- * pthread_mutexattr_gettype()
- * pthread_mutex_init()
- * pthread_mutex_lock()
- * pthread_mutex_unlock()
- */
-
-#include "test.h"
-
-static int lockCount = 0;
-
-static pthread_mutex_t mutex;
-static pthread_mutexattr_t mxAttr;
-
-void * locker(void * arg)
-{
- assert(pthread_mutex_lock(&mutex) == 0);
- lockCount++;
-
- /* Should wait here (deadlocked) */
- assert(pthread_mutex_lock(&mutex) == 0);
- lockCount++;
- assert(pthread_mutex_unlock(&mutex) == 0);
-
- return (void *) 555;
-}
-
-int
-main()
-{
- pthread_t t;
- int mxType = -1;
-
- assert(pthread_mutexattr_init(&mxAttr) == 0);
- assert(pthread_mutexattr_settype(&mxAttr, PTHREAD_MUTEX_NORMAL) == 0);
- assert(pthread_mutexattr_gettype(&mxAttr, &mxType) == 0);
- assert(mxType == PTHREAD_MUTEX_NORMAL);
-
- assert(pthread_mutex_init(&mutex, &mxAttr) == 0);
-
- assert(pthread_create(&t, NULL, locker, NULL) == 0);
-
- Sleep(1000);
-
- assert(lockCount == 1);
-
- /*
- * Should succeed even though we don't own the lock
- * because FAST mutexes don't check ownership.
- */
- assert(pthread_mutex_unlock(&mutex) == 0);
-
- Sleep (1000);
-
- assert(lockCount == 2);
-
- exit(0);
-
- /* Never reached */
- return 0;
-}
-
diff --git a/winsup/testsuite/winsup.api/pthread/mutex6r.c b/winsup/testsuite/winsup.api/pthread/mutex6r.c
deleted file mode 100644
index 586cc841b..000000000
--- a/winsup/testsuite/winsup.api/pthread/mutex6r.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * mutex6r.c
- *
- * Tests PTHREAD_MUTEX_RECURSIVE mutex type.
- * Thread locks mutex twice (recursive lock).
- * Both locks and unlocks should succeed.
- *
- * Depends on API functions:
- * pthread_create()
- * pthread_join()
- * pthread_mutexattr_init()
- * pthread_mutexattr_destroy()
- * pthread_mutexattr_settype()
- * pthread_mutexattr_gettype()
- * pthread_mutex_init()
- * pthread_mutex_destroy()
- * pthread_mutex_lock()
- * pthread_mutex_unlock()
- */
-
-#include "test.h"
-
-static int lockCount = 0;
-
-static pthread_mutex_t mutex;
-static pthread_mutexattr_t mxAttr;
-
-void * locker(void * arg)
-{
- assert(pthread_mutex_lock(&mutex) == 0);
- lockCount++;
- assert(pthread_mutex_lock(&mutex) == 0);
- lockCount++;
- assert(pthread_mutex_unlock(&mutex) == 0);
- assert(pthread_mutex_unlock(&mutex) == 0);
-
- return (void *) 555;
-}
-
-int
-main()
-{
- pthread_t t;
- int result = 0;
- int mxType = -1;
-
- assert(pthread_mutexattr_init(&mxAttr) == 0);
- assert(pthread_mutexattr_settype(&mxAttr, PTHREAD_MUTEX_RECURSIVE) == 0);
- assert(pthread_mutexattr_gettype(&mxAttr, &mxType) == 0);
- assert(mxType == PTHREAD_MUTEX_RECURSIVE);
-
- assert(pthread_mutex_init(&mutex, &mxAttr) == 0);
-
- assert(pthread_create(&t, NULL, locker, NULL) == 0);
-
- assert(pthread_join(t, (void **) &result) == 0);
- assert(result == 555);
-
- assert(lockCount == 2);
-
- assert(pthread_mutex_destroy(&mutex) == 0);
- assert(pthread_mutexattr_destroy(&mxAttr) == 0);
-
- exit(0);
-
- /* Never reached */
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/mutex7.c b/winsup/testsuite/winsup.api/pthread/mutex7.c
deleted file mode 100644
index d2c9f8bee..000000000
--- a/winsup/testsuite/winsup.api/pthread/mutex7.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * mutex7.c
- *
- * Test the default (type not set) mutex type.
- * Should be the same as PTHREAD_MUTEX_ERRORCHECK.
- * Thread locks then trylocks mutex (attempted recursive lock).
- * The thread should lock first time and EBUSY second time.
- *
- * Depends on API functions:
- * pthread_mutex_lock()
- * pthread_mutex_trylock()
- * pthread_mutex_unlock()
- */
-
-#include "test.h"
-
-static int lockCount = 0;
-
-static pthread_mutex_t mutex;
-
-void * locker(void * arg)
-{
- assert(pthread_mutex_lock(&mutex) == 0);
- lockCount++;
- assert(pthread_mutex_trylock(&mutex) == EBUSY);
- lockCount++;
- assert(pthread_mutex_unlock(&mutex) == 0);
- assert(pthread_mutex_unlock(&mutex) == EPERM);
-
- return 0;
-}
-
-int
-main()
-{
- pthread_t t;
-
- assert(pthread_mutex_init(&mutex, NULL) == 0);
-
- assert(pthread_create(&t, NULL, locker, NULL) == 0);
-
- Sleep(1000);
-
- assert(lockCount == 2);
-
- exit(0);
-
- /* Never reached */
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/mutex7d.c b/winsup/testsuite/winsup.api/pthread/mutex7d.c
deleted file mode 100644
index 906d0f043..000000000
--- a/winsup/testsuite/winsup.api/pthread/mutex7d.c
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * mutex7d.c
- *
- * Test the default (type not set) mutex type.
- * Should be the same as PTHREAD_MUTEX_ERRORCHECK.
- * Thread locks then trylocks mutex (attempted recursive lock).
- * The thread should lock first time and EBUSY second time.
- *
- * Depends on API functions:
- * pthread_mutex_lock()
- * pthread_mutex_trylock()
- * pthread_mutex_unlock()
- */
-
-#include "test.h"
-
-static int lockCount = 0;
-
-static pthread_mutex_t mutex;
-
-void * locker(void * arg)
-{
- assert(pthread_mutex_lock(&mutex) == 0);
- lockCount++;
- assert(pthread_mutex_trylock(&mutex) == EBUSY);
- lockCount++;
- assert(pthread_mutex_unlock(&mutex) == 0);
- assert(pthread_mutex_unlock(&mutex) == EPERM);
-
- return 0;
-}
-
-int
-main()
-{
- int result = 0;
- pthread_t t;
-
- assert(pthread_mutex_init(&mutex, NULL) == 0);
-
- assert(pthread_create(&t, NULL, locker, NULL) == 0);
-
- assert(pthread_join(t, (void **) &result) == 0);
-
- assert(lockCount == 2);
-
- exit(0);
-
- /* Never reached */
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/mutex7e.c b/winsup/testsuite/winsup.api/pthread/mutex7e.c
deleted file mode 100644
index 05722512d..000000000
--- a/winsup/testsuite/winsup.api/pthread/mutex7e.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * mutex7e.c
- *
- * Tests PTHREAD_MUTEX_ERRORCHECK mutex type.
- * Thread locks and then trylocks mutex (attempted recursive lock).
- * Trylock should fail with an EBUSY error.
- * The second unlock attempt should fail with an EPERM error.
- *
- * Depends on API functions:
- * pthread_create()
- * pthread_join()
- * pthread_mutexattr_init()
- * pthread_mutexattr_destroy()
- * pthread_mutexattr_settype()
- * pthread_mutexattr_gettype()
- * pthread_mutex_init()
- * pthread_mutex_destroy()
- * pthread_mutex_lock()
- * pthread_mutex_unlock()
- */
-
-#include "test.h"
-
-static int lockCount = 0;
-
-static pthread_mutex_t mutex;
-static pthread_mutexattr_t mxAttr;
-
-void * locker(void * arg)
-{
- assert(pthread_mutex_lock(&mutex) == 0);
- lockCount++;
- assert(pthread_mutex_trylock(&mutex) == EBUSY);
- lockCount++;
- assert(pthread_mutex_unlock(&mutex) == 0);
- assert(pthread_mutex_unlock(&mutex) == EPERM);
-
- return (void *) 555;
-}
-
-int
-main()
-{
- pthread_t t;
- int result = 0;
- int mxType = -1;
-
- assert(pthread_mutexattr_init(&mxAttr) == 0);
- assert(pthread_mutexattr_settype(&mxAttr, PTHREAD_MUTEX_ERRORCHECK) == 0);
- assert(pthread_mutexattr_gettype(&mxAttr, &mxType) == 0);
- assert(mxType == PTHREAD_MUTEX_ERRORCHECK);
-
- assert(pthread_mutex_init(&mutex, &mxAttr) == 0);
-
- assert(pthread_create(&t, NULL, locker, NULL) == 0);
-
- assert(pthread_join(t, (void **) &result) == 0);
- assert(result == 555);
-
- assert(lockCount == 2);
-
- assert(pthread_mutex_destroy(&mutex) == 0);
- assert(pthread_mutexattr_destroy(&mxAttr) == 0);
-
- exit(0);
-
- /* Never reached */
- return 0;
-}
-
diff --git a/winsup/testsuite/winsup.api/pthread/mutex7n.c b/winsup/testsuite/winsup.api/pthread/mutex7n.c
deleted file mode 100644
index e9a36fec0..000000000
--- a/winsup/testsuite/winsup.api/pthread/mutex7n.c
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * mutex7n.c
- *
- * Tests PTHREAD_MUTEX_NORMAL mutex type.
- * Thread locks then trylocks mutex (attempted recursive lock).
- * The thread should lock first time and EBUSY second time.
- *
- * Depends on API functions:
- * pthread_create()
- * pthread_mutexattr_init()
- * pthread_mutexattr_settype()
- * pthread_mutexattr_gettype()
- * pthread_mutex_init()
- * pthread_mutex_lock()
- * pthread_mutex_unlock()
- */
-
-#include "test.h"
-
-static int lockCount = 0;
-
-static pthread_mutex_t mutex;
-static pthread_mutexattr_t mxAttr;
-
-void * locker(void * arg)
-{
- assert(pthread_mutex_lock(&mutex) == 0);
- lockCount++;
- assert(pthread_mutex_trylock(&mutex) == EBUSY);
- lockCount++;
- assert(pthread_mutex_unlock(&mutex) == 0);
- assert(pthread_mutex_unlock(&mutex) == EPERM);
-
- return (void *) 555;
-}
-
-int
-main()
-{
- pthread_t t;
- int mxType = -1;
-
- assert(pthread_mutexattr_init(&mxAttr) == 0);
- assert(pthread_mutexattr_settype(&mxAttr, PTHREAD_MUTEX_NORMAL) == 0);
- assert(pthread_mutexattr_gettype(&mxAttr, &mxType) == 0);
- assert(mxType == PTHREAD_MUTEX_NORMAL);
-
- assert(pthread_mutex_init(&mutex, &mxAttr) == 0);
-
- assert(pthread_create(&t, NULL, locker, NULL) == 0);
-
- Sleep(1000);
-
- assert(lockCount == 2);
-
- exit(0);
-
- /* Never reached */
- return 0;
-}
-
diff --git a/winsup/testsuite/winsup.api/pthread/mutex7r.c b/winsup/testsuite/winsup.api/pthread/mutex7r.c
deleted file mode 100644
index 6f9ed744b..000000000
--- a/winsup/testsuite/winsup.api/pthread/mutex7r.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * mutex7r.c
- *
- * Tests PTHREAD_MUTEX_RECURSIVE mutex type.
- * Thread locks mutex then trylocks mutex (recursive lock twice).
- * Both locks and unlocks should succeed.
- *
- * Depends on API functions:
- * pthread_create()
- * pthread_join()
- * pthread_mutexattr_init()
- * pthread_mutexattr_destroy()
- * pthread_mutexattr_settype()
- * pthread_mutexattr_gettype()
- * pthread_mutex_init()
- * pthread_mutex_destroy()
- * pthread_mutex_lock()
- * pthread_mutex_unlock()
- */
-
-#include "test.h"
-
-static int lockCount = 0;
-
-static pthread_mutex_t mutex;
-static pthread_mutexattr_t mxAttr;
-
-void * locker(void * arg)
-{
- assert(pthread_mutex_lock(&mutex) == 0);
- lockCount++;
- assert(pthread_mutex_trylock(&mutex) == 0);
- lockCount++;
- assert(pthread_mutex_unlock(&mutex) == 0);
- assert(pthread_mutex_unlock(&mutex) == 0);
-
- return (void *) 555;
-}
-
-int
-main()
-{
- pthread_t t;
- int result = 0;
- int mxType = -1;
-
- assert(pthread_mutexattr_init(&mxAttr) == 0);
- assert(pthread_mutexattr_settype(&mxAttr, PTHREAD_MUTEX_RECURSIVE) == 0);
- assert(pthread_mutexattr_gettype(&mxAttr, &mxType) == 0);
- assert(mxType == PTHREAD_MUTEX_RECURSIVE);
-
- assert(pthread_mutex_init(&mutex, &mxAttr) == 0);
-
- assert(pthread_create(&t, NULL, locker, NULL) == 0);
-
- assert(pthread_join(t, (void **) &result) == 0);
- assert(result == 555);
-
- assert(lockCount == 2);
-
- assert(pthread_mutex_destroy(&mutex) == 0);
- assert(pthread_mutexattr_destroy(&mxAttr) == 0);
-
- exit(0);
-
- /* Never reached */
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/mutex8e.c b/winsup/testsuite/winsup.api/pthread/mutex8e.c
deleted file mode 100644
index 7108b02af..000000000
--- a/winsup/testsuite/winsup.api/pthread/mutex8e.c
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * mutex8e.c
- *
- * Tests PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP.
- *
- * Depends on API functions:
- * pthread_mutex_lock()
- * pthread_mutex_unlock()
- */
-
-#include "test.h"
-
-pthread_mutex_t mutex = PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP;
-
-int
-main()
-{
- assert(mutex == PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP);
-
- assert(pthread_mutex_lock(&mutex) == 0);
-
- assert(mutex != PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP);
-
- assert(mutex != NULL);
-
- assert(pthread_mutex_lock(&mutex) == EDEADLK);
-
- assert(pthread_mutex_unlock(&mutex) == 0);
-
- assert(pthread_mutex_destroy(&mutex) == 0);
-
- assert(mutex == NULL);
-
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/mutex8n.c b/winsup/testsuite/winsup.api/pthread/mutex8n.c
deleted file mode 100644
index 46fc9c676..000000000
--- a/winsup/testsuite/winsup.api/pthread/mutex8n.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * mutex8n.c
- *
- * Tests PTHREAD_NORMAL_MUTEX_INITIALIZER_NP.
- * Thread locks mutex twice (recursive lock).
- * The thread should deadlock.
- *
- * Depends on API functions:
- * pthread_create()
- * pthread_mutex_init()
- * pthread_mutex_lock()
- * pthread_mutex_unlock()
- */
-
-#include "test.h"
-
-static int lockCount = 0;
-
-pthread_mutex_t mutex = PTHREAD_NORMAL_MUTEX_INITIALIZER_NP;
-
-void * locker(void * arg)
-{
- assert(pthread_mutex_lock(&mutex) == 0);
- lockCount++;
-
- /* Should wait here (deadlocked) */
- assert(pthread_mutex_lock(&mutex) == 0);
- lockCount++;
- assert(pthread_mutex_unlock(&mutex) == 0);
-
- return (void *) 555;
-}
-
-int
-main()
-{
- pthread_t t;
-
- assert(pthread_create(&t, NULL, locker, NULL) == 0);
-
- Sleep(1000);
-
- assert(lockCount == 1);
-
- /*
- * Should succeed even though we don't own the lock
- * because FAST mutexes don't check ownership.
- */
- assert(pthread_mutex_unlock(&mutex) == 0);
-
- Sleep (1000);
-
- assert(lockCount == 2);
-
- exit(0);
-
- /* Never reached */
- return 0;
-}
-
diff --git a/winsup/testsuite/winsup.api/pthread/mutex8r.c b/winsup/testsuite/winsup.api/pthread/mutex8r.c
deleted file mode 100644
index ecaccd3ec..000000000
--- a/winsup/testsuite/winsup.api/pthread/mutex8r.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * mutex8r.c
- *
- * Tests PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP.
- *
- * Depends on API functions:
- * pthread_mutex_lock()
- * pthread_mutex_unlock()
- */
-
-#include "test.h"
-
-pthread_mutex_t mutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;
-
-int
-main()
-{
- assert(mutex == PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP);
-
- assert(pthread_mutex_lock(&mutex) == 0);
-
- assert(mutex != PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP);
-
- assert(mutex != NULL);
-
- assert(pthread_mutex_lock(&mutex) == 0);
-
- assert(pthread_mutex_unlock(&mutex) == 0);
-
- assert(pthread_mutex_unlock(&mutex) == 0);
-
- assert(pthread_mutex_destroy(&mutex) == 0);
-
- assert(mutex == NULL);
-
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/once1.c b/winsup/testsuite/winsup.api/pthread/once1.c
deleted file mode 100644
index 91dc03832..000000000
--- a/winsup/testsuite/winsup.api/pthread/once1.c
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * once1.c
- *
- * Create a static pthread_once and test that it calls myfunc once.
- *
- * Depends on API functions:
- * pthread_once()
- * pthread_create()
- */
-
-#include "test.h"
-
-pthread_once_t once = PTHREAD_ONCE_INIT;
-
-static int washere = 0;
-
-void
-myfunc(void)
-{
- washere++;
-}
-
-void *
-mythread(void * arg)
-{
- assert(pthread_once(&once, myfunc) == 0);
-
- return 0;
-}
-
-int
-main()
-{
- pthread_t t1, t2;
-
- assert(pthread_create(&t1, NULL, mythread, NULL) == 0);
-
- assert(pthread_create(&t2, NULL, mythread, NULL) == 0);
-
- Sleep(2000);
-
- assert(washere == 1);
-
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/priority1.c b/winsup/testsuite/winsup.api/pthread/priority1.c
deleted file mode 100644
index a31102895..000000000
--- a/winsup/testsuite/winsup.api/pthread/priority1.c
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * File: priority1.c
- *
- * Test Synopsis:
- * - Test thread priority explicit setting using thread attribute.
- *
- * Test Method (Validation or Falsification):
- * -
- *
- * Requirements Tested:
- * -
- *
- * Features Tested:
- * -
- *
- * Cases Tested:
- * -
- *
- * Description:
- * -
- *
- * Environment:
- * -
- *
- * Input:
- * - None.
- *
- * Output:
- * - File name, Line number, and failed expression on failure.
- * - No output on success.
- *
- * Assumptions:
- * -
- *
- * Pass Criteria:
- * - Process returns zero exit status.
- *
- * Fail Criteria:
- * - Process returns non-zero exit status.
- */
-
-#include "test.h"
-
-void * func(void * arg)
-{
- int policy;
- struct sched_param param;
-
- assert(pthread_getschedparam(pthread_self(), &policy, &param) == 0);
- assert(policy == SCHED_OTHER);
- return (void *) param.sched_priority;
-}
-
-int
-main()
-{
- pthread_t t;
- pthread_attr_t attr;
- void * result = NULL;
- struct sched_param param;
- int maxPrio = sched_get_priority_max(SCHED_OTHER);
- int minPrio = sched_get_priority_min(SCHED_OTHER);
-
- assert(pthread_attr_init(&attr) == 0);
- assert(pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED) == 0);
-
- for (param.sched_priority = minPrio;
- param.sched_priority <= maxPrio;
- param.sched_priority++)
- {
- assert(pthread_attr_setschedparam(&attr, &param) == 0);
- assert(pthread_create(&t, &attr, func, NULL) == 0);
- pthread_join(t, &result);
- assert((int) result == param.sched_priority);
- }
-
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/priority2.c b/winsup/testsuite/winsup.api/pthread/priority2.c
deleted file mode 100644
index 4dcf3859f..000000000
--- a/winsup/testsuite/winsup.api/pthread/priority2.c
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * File: priority2.c
- *
- * Test Synopsis:
- * - Test thread priority setting after creation.
- *
- * Test Method (Validation or Falsification):
- * -
- *
- * Requirements Tested:
- * -
- *
- * Features Tested:
- * -
- *
- * Cases Tested:
- * -
- *
- * Description:
- * -
- *
- * Environment:
- * -
- *
- * Input:
- * - None.
- *
- * Output:
- * - File name, Line number, and failed expression on failure.
- * - No output on success.
- *
- * Assumptions:
- * -
- *
- * Pass Criteria:
- * - Process returns zero exit status.
- *
- * Fail Criteria:
- * - Process returns non-zero exit status.
- */
-
-#include "test.h"
-
-pthread_mutex_t startMx = PTHREAD_MUTEX_INITIALIZER;
-
-void * func(void * arg)
-{
- int policy;
- struct sched_param param;
-
- assert(pthread_mutex_lock(&startMx) == 0);
- assert(pthread_getschedparam(pthread_self(), &policy, &param) == 0);
- assert(pthread_mutex_unlock(&startMx) == 0);
- assert(policy == SCHED_OTHER);
- return (void *) param.sched_priority;
-}
-
-int
-main()
-{
- pthread_t t;
- void * result = NULL;
- struct sched_param param;
- int maxPrio = sched_get_priority_max(SCHED_OTHER);
- int minPrio = sched_get_priority_min(SCHED_OTHER);
-
- for (param.sched_priority = minPrio;
- param.sched_priority <= maxPrio;
- param.sched_priority++)
- {
- assert(pthread_mutex_lock(&startMx) == 0);
- assert(pthread_create(&t, NULL, func, NULL) == 0);
- assert(pthread_setschedparam(t, SCHED_OTHER, &param) == 0);
- assert(pthread_mutex_unlock(&startMx) == 0);
- pthread_join(t, &result);
- assert((int) result == param.sched_priority);
- }
-
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/rwlock1.c b/winsup/testsuite/winsup.api/pthread/rwlock1.c
deleted file mode 100644
index 25e29f6ac..000000000
--- a/winsup/testsuite/winsup.api/pthread/rwlock1.c
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * rwlock1.c
- *
- * Create a simple rwlock object and then destroy it.
- *
- * Depends on API functions:
- * pthread_rwlock_init()
- * pthread_rwlock_destroy()
- */
-
-#include "test.h"
-
-pthread_rwlock_t rwlock = NULL;
-
-int
-main()
-{
- assert(rwlock == NULL);
-
- assert(pthread_rwlock_init(&rwlock, NULL) == 0);
-
- assert(rwlock != NULL);
-
- assert(pthread_rwlock_destroy(&rwlock) == 0);
-
- assert(rwlock == NULL);
-
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/rwlock2.c b/winsup/testsuite/winsup.api/pthread/rwlock2.c
deleted file mode 100644
index cfb32282c..000000000
--- a/winsup/testsuite/winsup.api/pthread/rwlock2.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * rwlock2.c
- *
- * Declare a static rwlock object, lock it,
- * and then unlock it again.
- *
- * Depends on API functions:
- * pthread_rwlock_rdlock()
- * pthread_rwlock_unlock()
- */
-
-#include "test.h"
-
-pthread_rwlock_t rwlock = PTHREAD_RWLOCK_INITIALIZER;
-
-int
-main()
-{
- assert(rwlock == PTHREAD_RWLOCK_INITIALIZER);
-
- assert(pthread_rwlock_rdlock(&rwlock) == 0);
-
- assert(rwlock != PTHREAD_RWLOCK_INITIALIZER);
-
- assert(rwlock != NULL);
-
- assert(pthread_rwlock_unlock(&rwlock) == 0);
-
- assert(pthread_rwlock_destroy(&rwlock) == 0);
-
- assert(rwlock == NULL);
-
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/rwlock3.c b/winsup/testsuite/winsup.api/pthread/rwlock3.c
deleted file mode 100644
index 0703c1a2d..000000000
--- a/winsup/testsuite/winsup.api/pthread/rwlock3.c
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * rwlock3.c
- *
- *
- * Declare a static rwlock object, wrlock it, trywrlock it,
- * and then unlock it again.
- *
- * Depends on API functions:
- * pthread_rwlock_wrlock()
- * pthread_rwlock_trywrlock()
- * pthread_rwlock_unlock()
- */
-
-#include "test.h"
-
-pthread_rwlock_t rwlock1 = PTHREAD_RWLOCK_INITIALIZER;
-
-static int washere = 0;
-
-void * func(void * arg)
-{
- assert(pthread_rwlock_trywrlock(&rwlock1) == EBUSY);
-
- washere = 1;
-
- return 0;
-}
-
-int
-main()
-{
- pthread_t t;
-
- assert(pthread_rwlock_wrlock(&rwlock1) == 0);
-
- assert(pthread_create(&t, NULL, func, NULL) == 0);
-
- Sleep(2000);
-
- assert(pthread_rwlock_unlock(&rwlock1) == 0);
-
- assert(washere == 1);
-
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/rwlock4.c b/winsup/testsuite/winsup.api/pthread/rwlock4.c
deleted file mode 100644
index 8cae52e6f..000000000
--- a/winsup/testsuite/winsup.api/pthread/rwlock4.c
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * rwlock4.c
- *
- * Declare a static rwlock object, rdlock it, trywrlock it,
- * and then unlock it again.
- *
- * Depends on API functions:
- * pthread_rwlock_rdlock()
- * pthread_rwlock_trywrlock()
- * pthread_rwlock_unlock()
- */
-
-#include "test.h"
-
-pthread_rwlock_t rwlock1 = PTHREAD_RWLOCK_INITIALIZER;
-
-static int washere = 0;
-
-void * func(void * arg)
-{
- assert(pthread_rwlock_trywrlock(&rwlock1) == EBUSY);
-
- washere = 1;
-
- return 0;
-}
-
-int
-main()
-{
- pthread_t t;
-
- assert(pthread_rwlock_rdlock(&rwlock1) == 0);
-
- assert(pthread_create(&t, NULL, func, NULL) == 0);
-
- Sleep(2000);
-
- assert(pthread_rwlock_unlock(&rwlock1) == 0);
-
- assert(washere == 1);
-
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/rwlock5.c b/winsup/testsuite/winsup.api/pthread/rwlock5.c
deleted file mode 100644
index 3ada946e3..000000000
--- a/winsup/testsuite/winsup.api/pthread/rwlock5.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * rwlock5.c
- *
- *
- * Declare a static rwlock object, rdlock it, tryrdlock it,
- * and then unlock it again.
- *
- * Depends on API functions:
- * pthread_rwlock_rdlock()
- * pthread_rwlock_tryrdlock()
- * pthread_rwlock_unlock()
- */
-
-#include "test.h"
-
-pthread_rwlock_t rwlock1 = PTHREAD_RWLOCK_INITIALIZER;
-
-static int washere = 0;
-
-void * func(void * arg)
-{
- assert(pthread_rwlock_tryrdlock(&rwlock1) == 0);
-
- assert(pthread_rwlock_unlock(&rwlock1) == 0);
-
- washere = 1;
-
- return 0;
-}
-
-int
-main()
-{
- pthread_t t;
-
- assert(pthread_rwlock_rdlock(&rwlock1) == 0);
-
- assert(pthread_create(&t, NULL, func, NULL) == 0);
-
- Sleep(2000);
-
- assert(pthread_rwlock_unlock(&rwlock1) == 0);
-
- assert(washere == 1);
-
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/rwlock6.c b/winsup/testsuite/winsup.api/pthread/rwlock6.c
deleted file mode 100644
index d5f2320d0..000000000
--- a/winsup/testsuite/winsup.api/pthread/rwlock6.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * rwlock6.c
- *
- * Check writer and reader locking
- *
- * Depends on API functions:
- * pthread_rwlock_rdlock()
- * pthread_rwlock_wrlock()
- * pthread_rwlock_unlock()
- */
-
-#include "test.h"
-
-static pthread_rwlock_t rwlock1 = PTHREAD_RWLOCK_INITIALIZER;
-
-static int bankAccount = 0;
-
-void * wrfunc(void * arg)
-{
- int ba;
-
- assert(pthread_rwlock_wrlock(&rwlock1) == 0);
- Sleep(2000);
- bankAccount += 10;
- ba = bankAccount;
- assert(pthread_rwlock_unlock(&rwlock1) == 0);
-
- return ((void *) ba);
-}
-
-void * rdfunc(void * arg)
-{
- int ba;
-
- assert(pthread_rwlock_rdlock(&rwlock1) == 0);
- ba = bankAccount;
- assert(pthread_rwlock_unlock(&rwlock1) == 0);
-
- return ((void *) ba);
-}
-
-int
-main()
-{
- pthread_t wrt1;
- pthread_t wrt2;
- pthread_t rdt;
- int wr1Result = 0;
- int wr2Result = 0;
- int rdResult = 0;
-
- bankAccount = 0;
-
- assert(pthread_create(&wrt1, NULL, wrfunc, NULL) == 0);
- Sleep(500);
- assert(pthread_create(&rdt, NULL, rdfunc, NULL) == 0);
- Sleep(500);
- assert(pthread_create(&wrt2, NULL, wrfunc, NULL) == 0);
-
- assert(pthread_join(wrt1, (void **) &wr1Result) == 0);
- assert(pthread_join(rdt, (void **) &rdResult) == 0);
- assert(pthread_join(wrt2, (void **) &wr2Result) == 0);
-
- assert(wr1Result == 10);
- assert(rdResult == 20);
- assert(wr2Result == 20);
-
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/rwlock7.c b/winsup/testsuite/winsup.api/pthread/rwlock7.c
deleted file mode 100644
index ded882d9f..000000000
--- a/winsup/testsuite/winsup.api/pthread/rwlock7.c
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
- * rwlock7.c
- *
- * Hammer on a bunch of rwlocks to test robustness and fairness.
- * Printed stats should be roughly even for each thread.
- */
-
-#include "test.h"
-#include <sys/time.h>
-#include <sys/timeb.h>
-
-#ifdef __GNUC__
-#include <stdlib.h>
-#endif
-
-#define THREADS 5
-#define DATASIZE 15
-#define ITERATIONS 1000000
-
-#define rand_r( _seed ) \
- ( _seed == _seed? rand() : rand() )
-
-/*
- * Keep statistics for each thread.
- */
-typedef struct thread_tag {
- int thread_num;
- pthread_t thread_id;
- int updates;
- int reads;
- int interval;
-} thread_t;
-
-/*
- * Read-write lock and shared data
- */
-typedef struct data_tag {
- pthread_rwlock_t lock;
- int data;
- int updates;
-} data_t;
-
-static thread_t threads[THREADS];
-static data_t data[DATASIZE];
-
-/*
- * Thread start routine that uses read-write locks
- */
-void *thread_routine (void *arg)
-{
- thread_t *self = (thread_t*)arg;
- int repeats = 0;
- int iteration;
- int element = 0;
-
- for (iteration = 0; iteration < ITERATIONS; iteration++)
- {
- if (iteration % (ITERATIONS / 10) == 0)
- {
- putchar('.');
- fflush(stdout);
- }
- /*
- * Each "self->interval" iterations, perform an
- * update operation (write lock instead of read
- * lock).
- */
- if ((iteration % self->interval) == 0)
- {
- assert(pthread_rwlock_wrlock (&data[element].lock) == 0);
- data[element].data = self->thread_num;
- data[element].updates++;
- self->updates++;
- assert(pthread_rwlock_unlock (&data[element].lock) == 0);
- } else {
- /*
- * Look at the current data element to see whether
- * the current thread last updated it. Count the
- * times, to report later.
- */
- assert(pthread_rwlock_rdlock (&data[element].lock) == 0);
-
- self->reads++;
-
- if (data[element].data == self->thread_num)
- {
- repeats++;
- }
-
- assert(pthread_rwlock_unlock (&data[element].lock) == 0);
- }
-
- element++;
-
- if (element >= DATASIZE)
- {
- element = 0;
- }
- }
-
- if (repeats > 0)
- {
- printf ("\nThread %d found unchanged elements %d times",
- self->thread_num, repeats);
- fflush(stdout);
- }
-
- return NULL;
-}
-
-int
-main (int argc, char *argv[])
-{
- int count;
- int data_count;
- int thread_updates = 0;
- int data_updates = 0;
- int seed = 1;
-
- struct timeb currSysTime1;
- struct timeb currSysTime2;
-
- /*
- * Initialize the shared data.
- */
- for (data_count = 0; data_count < DATASIZE; data_count++)
- {
- data[data_count].data = 0;
- data[data_count].updates = 0;
-
- assert(pthread_rwlock_init (&data[data_count].lock, NULL) == 0);
- }
-
- ftime(&currSysTime1);
-
- /*
- * Create THREADS threads to access shared data.
- */
- for (count = 0; count < THREADS; count++)
- {
- threads[count].thread_num = count;
- threads[count].updates = 0;
- threads[count].reads = 0;
- while (!(threads[count].interval = rand_r (&seed) % 71))
- continue;
-
- assert(pthread_create (&threads[count].thread_id,
- NULL, thread_routine, (void*)&threads[count]) == 0);
- }
-
- /*
- * Wait for all threads to complete, and collect
- * statistics.
- */
- for (count = 0; count < THREADS; count++)
- {
- assert(pthread_join (threads[count].thread_id, NULL) == 0);
- thread_updates += threads[count].updates;
- printf ("%02d: interval %d, updates %d, reads %d\n",
- count, threads[count].interval,
- threads[count].updates, threads[count].reads);
- }
-
- putchar('\n');
- fflush(stdout);
-
- /*
- * Collect statistics for the data.
- */
- for (data_count = 0; data_count < DATASIZE; data_count++)
- {
- data_updates += data[data_count].updates;
- printf ("data %02d: value %d, %d updates\n",
- data_count, data[data_count].data, data[data_count].updates);
- assert(pthread_rwlock_destroy (&data[data_count].lock) == 0);
- }
-
- printf ("%d thread updates, %d data updates\n",
- thread_updates, data_updates);
-
- ftime(&currSysTime2);
-
- printf( "\nstart: %ld/%d, stop: %ld/%d, duration:%ld\n",
- currSysTime1.time,currSysTime1.millitm,
- currSysTime2.time,currSysTime2.millitm,
- (currSysTime2.time*1000+currSysTime2.millitm) -
- (currSysTime1.time*1000+currSysTime1.millitm));
-
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/self1.c b/winsup/testsuite/winsup.api/pthread/self1.c
deleted file mode 100644
index d46081830..000000000
--- a/winsup/testsuite/winsup.api/pthread/self1.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * self1.c
- *
- * Test for pthread_self().
- *
- * Depends on API functions:
- * pthread_self()
- *
- * Implicitly depends on:
- * pthread_getspecific()
- * pthread_setspecific()
- */
-
-#include "test.h"
-
-int
-main(int argc, char * argv[])
-{
- /*
- * This should always succeed unless the system has no
- * resources (memory) left.
- */
- assert(pthread_self() != NULL);
-
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/self2.c b/winsup/testsuite/winsup.api/pthread/self2.c
deleted file mode 100644
index 83339f101..000000000
--- a/winsup/testsuite/winsup.api/pthread/self2.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * self2.c
- *
- * Test for pthread_self().
- *
- * Depends on API functions:
- * pthread_create()
- * pthread_self()
- *
- * Implicitly depends on:
- * pthread_getspecific()
- * pthread_setspecific()
- */
-
-#include "test.h"
-#include <string.h>
-
-static pthread_t me;
-
-void *
-entry(void * arg)
-{
- me = pthread_self();
-
- return arg;
-}
-
-int
-main()
-{
- pthread_t t;
-
- assert(pthread_create(&t, NULL, entry, NULL) == 0);
-
- Sleep(2000);
-
- /*
- * Not much more we can do here but bytewise compare t with
- * what pthread_self returned.
- */
- assert(t == me);
- assert(memcmp((const void *) t, (const void *) me, sizeof t) == 0);
-
- /* Success. */
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/pthread/test.h b/winsup/testsuite/winsup.api/pthread/test.h
deleted file mode 100644
index 0e7246420..000000000
--- a/winsup/testsuite/winsup.api/pthread/test.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * test.h
- *
- * Useful definitions and declarations for tests.
- */
-
-#ifndef _PTHREAD_TEST_H_
-#define _PTHREAD_TEST_H_
-
-#include <pthread.h>
-#include <sched.h>
-#include <semaphore.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <assert.h>
-#include <windows.h>
-
-/* #define assert(x) do { fprint (stderr, "assertion failed\n"); exit(1) } while (0) */
-
-const char * error_string[] = {
- "ZERO_or_EOK",
- "EPERM",
- "ENOFILE_or_ENOENT",
- "ESRCH",
- "EINTR",
- "EIO",
- "ENXIO",
- "E2BIG",
- "ENOEXEC",
- "EBADF",
- "ECHILD",
- "EAGAIN",
- "ENOMEM",
- "EACCES",
- "EFAULT",
- "UNKNOWN_15",
- "EBUSY",
- "EEXIST",
- "EXDEV",
- "ENODEV",
- "ENOTDIR",
- "EISDIR",
- "EINVAL",
- "ENFILE",
- "EMFILE",
- "ENOTTY",
- "UNKNOWN_26",
- "EFBIG",
- "ENOSPC",
- "ESPIPE",
- "EROFS",
- "EMLINK",
- "EPIPE",
- "EDOM",
- "ERANGE",
- "UNKNOWN_35",
- "EDEADLOCK_or_EDEADLK",
- "UNKNOWN_37",
- "ENAMETOOLONG",
- "ENOLCK",
- "ENOSYS",
- "ENOTEMPTY",
- "EILSEQ",
-};
-
-/*
- * The Mingw32 assert macro calls the CRTDLL _assert function
- * which pops up a dialog. We want to run in batch mode so
- * we define our own assert macro.
- */
-#ifdef assert
-# undef assert
-#endif
-
-#ifdef NDEBUG
-
-# define assert(e) ((void)0)
-
-#else /* NDEBUG */
-
-#ifndef ASSERT_TRACE
-# define ASSERT_TRACE 0
-#else
-# undef ASSERT_TRACE
-# define ASSERT_TRACE 1
-#endif
-
-# define assert(e) \
- ((e) ? ((ASSERT_TRACE) ? fprintf(stderr, \
- "Assertion succeeded: (%s), file %s, line %d\n", \
- #e, __FILE__, (int) __LINE__), \
- fflush(stderr) : \
- 0) : \
- (fprintf(stderr, "Assertion failed: (%s), file %s, line %d\n", \
- #e, __FILE__, (int) __LINE__), exit(1), 0))
-
-#endif /* NDEBUG */
-
-
-#endif
diff --git a/winsup/testsuite/winsup.api/pthread/threadidafterfork.c b/winsup/testsuite/winsup.api/pthread/threadidafterfork.c
deleted file mode 100644
index 473eaecfd..000000000
--- a/winsup/testsuite/winsup.api/pthread/threadidafterfork.c
+++ /dev/null
@@ -1,50 +0,0 @@
-#include <stdio.h>
-#include <unistd.h>
-#include <sys/wait.h>
-#include <pthread.h>
-#include <stdlib.h>
-
-static void * TestThread ( void * );
-
-int main (void)
-{
- pthread_t t;
-
- pthread_create (&t, NULL, TestThread, NULL);
- pthread_join (t, NULL);
-
- return 0;
-}
-
-static void * TestThread ( void *not_used )
-{
- pthread_t iAm = pthread_self();
- int status;
- switch (fork ())
- {
- case -1:
- exit(1);
- case 0:
- if (iAm != pthread_self())
- exit (1);
- else
- exit (0);
- break;
- default:
- wait (&status);
- if (status != 0)
- exit (1);
- }
- exit(0);
-}
-
-/*
-The forked child will not get the same thread handle as its parent, it
-will get the thread handle from the main thread instead. The child will
-not terminate because the threadcount is still 2 after the fork (it is
-set to 1 in MTinterface::Init and then set back to 2 after the childs
-memory gets overwritten by the parent).
-
-concept test by Thomas Pfaff <tpfaff@gmx.net>
-scritable test by Robert Collins <rbtcollins@hotmail.com>
-*/
diff --git a/winsup/testsuite/winsup.api/pthread/tsd1.c b/winsup/testsuite/winsup.api/pthread/tsd1.c
deleted file mode 100644
index a65cf66c8..000000000
--- a/winsup/testsuite/winsup.api/pthread/tsd1.c
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * tsd1.c
- *
- * Test Thread Specific Data (TSD) key creation and destruction.
- *
- * Description:
- * -
- *
- * Test Method (validation or falsification):
- * - validation
- *
- * Requirements Tested:
- * - keys are created for each existing thread including the main thread
- * - keys are created for newly created threads
- * - keys are thread specific
- * - destroy routine is called on each thread exit including the main thread
- *
- * Features Tested:
- * -
- *
- * Cases Tested:
- * -
- *
- * Environment:
- * -
- *
- * Input:
- * - none
- *
- * Output:
- * - text to stdout
- *
- * Assumptions:
- * - already validated: pthread_create()
- * pthread_once()
- * - main thread also has a POSIX thread identity
- *
- * Pass Criteria:
- * - stdout matches file reference/tsd1.out
- *
- * Fail Criteria:
- * - fails to match file reference/tsd1.out
- * - output identifies failed component
- */
-
-#include <sched.h>
-#include "test.h"
-
-static pthread_key_t key = NULL;
-static int accesscount[10];
-static int thread_set[10];
-static int thread_destroyed[10];
-
-static void
-destroy_key(void * arg)
-{
- int * j = (int *) arg;
-
- (*j)++;
-
- assert(*j == 2);
-
- thread_destroyed[j - accesscount] = 1;
-}
-
-static void
-setkey(void * arg)
-{
- int * j = (int *) arg;
-
- thread_set[j - accesscount] = 1;
-
- assert(*j == 0);
-
- assert(pthread_getspecific(key) == NULL);
-
- assert(pthread_setspecific(key, arg) == 0);
-
- assert(pthread_getspecific(key) == arg);
-
- (*j)++;
-
- assert(*j == 1);
-}
-
-static void *
-mythread(void * arg)
-{
- while (key == NULL)
- {
- sched_yield();
- }
-
- setkey(arg);
-
- return 0;
-
- /* Exiting the thread will call the key destructor. */
-}
-
-int
-main()
-{
- int i;
- int fail = 0;
- pthread_t thread[10];
-
- for (i = 1; i < 5; i++)
- {
- accesscount[i] = thread_set[i] = thread_destroyed[i] = 0;
- assert(pthread_create(&thread[i], NULL, mythread, (void *)&accesscount[i]) == 0);
- }
-
- Sleep(2000);
-
- /*
- * Here we test that existing threads will get a key created
- * for them.
- */
- assert(pthread_key_create(&key, destroy_key) == 0);
-
- /*
- * Test main thread key.
- */
- accesscount[0] = 0;
- setkey((void *) &accesscount[0]);
-
- /*
- * Here we test that new threads will get a key created
- * for them.
- */
- for (i = 5; i < 10; i++)
- {
- accesscount[i] = thread_set[i] = thread_destroyed[i] = 0;
- assert(pthread_create(&thread[i], NULL, mythread, (void *)&accesscount[i]) == 0);
- }
-
- /*
- * Wait for all threads to complete.
- */
- for (i = 1; i < 10; i++)
- {
- int result = 0;
-
- assert(pthread_join(thread[i], (void **) &result) == 0);
- }
-
- assert(pthread_key_delete(key) == 0);
-
- for (i = 1; i < 10; i++)
- {
- /*
- * The counter is incremented once when the key is set to
- * a value, and again when the key is destroyed. If the key
- * doesn't get set for some reason then it will still be
- * NULL and the destroy function will not be called, and
- * hence accesscount will not equal 2.
- */
- if (accesscount[i] != 2)
- {
- fail++;
- fprintf(stderr, "Thread %d key, set = %d, destroyed = %d\n",
- i, thread_set[i], thread_destroyed[i]);
- }
- }
-
- fflush(stderr);
-
- return (fail);
-}
diff --git a/winsup/testsuite/winsup.api/resethand.c b/winsup/testsuite/winsup.api/resethand.c
deleted file mode 100644
index 7d58dcd2c..000000000
--- a/winsup/testsuite/winsup.api/resethand.c
+++ /dev/null
@@ -1,36 +0,0 @@
-#include <stdio.h>
-#include <signal.h>
-#include <sys/wait.h>
-#include <unistd.h>
-#include <stdlib.h>
-
-int doit = 0;
-void
-ouch (int sig)
-{
- if (doit++ > 0)
- kill (getpid (), SIGTERM);
-}
-
-int
-main (int argc, char **argv)
-{
- static struct sigaction act;
- if (argc == 1)
- act.sa_flags = SA_RESETHAND;
- act.sa_handler = ouch;
- sigaction (SIGSEGV, &act, NULL);
- int pid = fork ();
- int status;
- if (pid > 0)
- waitpid (pid, &status, 0);
- else
- {
- int *i = 0;
- *i = 9;
- exit (0x42);
- }
- status &= ~0x80; // remove core dump flag
- printf ("pid %d exited with status %p\n", pid, (void *) status);
- exit (argc == 1 ? !(status == SIGSEGV) : !(status == SIGTERM));
-}
diff --git a/winsup/testsuite/winsup.api/samples/sample-fail.c b/winsup/testsuite/winsup.api/samples/sample-fail.c
deleted file mode 100644
index d0d3e4a6a..000000000
--- a/winsup/testsuite/winsup.api/samples/sample-fail.c
+++ /dev/null
@@ -1,5 +0,0 @@
-int
-main()
-{
- return 1;
-}
diff --git a/winsup/testsuite/winsup.api/samples/sample-miscompile.c b/winsup/testsuite/winsup.api/samples/sample-miscompile.c
deleted file mode 100644
index bc0d21d2e..000000000
--- a/winsup/testsuite/winsup.api/samples/sample-miscompile.c
+++ /dev/null
@@ -1 +0,0 @@
-foo bar grill
diff --git a/winsup/testsuite/winsup.api/samples/sample-pass.c b/winsup/testsuite/winsup.api/samples/sample-pass.c
deleted file mode 100644
index 8e8f518aa..000000000
--- a/winsup/testsuite/winsup.api/samples/sample-pass.c
+++ /dev/null
@@ -1,5 +0,0 @@
-int
-main()
-{
- return 0;
-}
diff --git a/winsup/testsuite/winsup.api/semtest.c b/winsup/testsuite/winsup.api/semtest.c
deleted file mode 100644
index dfb8c08eb..000000000
--- a/winsup/testsuite/winsup.api/semtest.c
+++ /dev/null
@@ -1,348 +0,0 @@
-/*-
- * Copyright (c) 1999 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility,
- * NASA Ames Research Center.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the NetBSD
- * Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * Obtained from: $NetBSD: semtest.c,v 1.4 2002/07/20 08:36:25 grant Exp $
- * $FreeBSD: /repoman/r/ncvs/src/tools/regression/sysvsem/semtest.c,v 1.1 2002/08/15 06:34:37 alfred Exp $
- */
-
-/*
- * Test the SVID-compatible Semaphore facility.
- */
-
-/*
- * CV, 2003-11-17: Add to Cygwin testsuite.
- */
-#include <sys/param.h>
-#include <sys/ipc.h>
-#include <sys/sem.h>
-#include <sys/wait.h>
-
-#include <err.h>
-#include <errno.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-
-#include "test.h"
-#include "usctest.h"
-
-const char *TCID = "semtest"; /* Test program identifier. */
-int TST_TOTAL = 54; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int main (int, char *[]);
-void print_semid_ds (struct semid_ds *, mode_t);
-void sigsys_handler (int);
-void sigchld_handler(int);
-void cleanup (void);
-void waiter (void);
-
-int sender_semid = -1;
-pid_t child_pid;
-int child_count;
-int signal_was_sigchld;
-
-key_t semkey;
-
-/*
- * This is the original semun union used by the sysvsem utility.
- * It is deliberately kept here under #if 0'ed condition for future
- * reference. PLEASE DO NOT REMOVE. The {SET,GET}ALL in FreeBSD
- * are signed values, so the default version in sys/sem.h suffices.
- */
-#if 1 /*0*/
-union semun {
- int val; /* value for SETVAL */
- struct semid_ds *buf; /* buffer for IPC_{STAT,SET} */
- u_short *array; /* array for GETALL & SETALL */
-};
-#endif
-
-int
-main(int argc, char *argv[])
-{
- struct sigaction sa;
- union semun sun;
- struct semid_ds s_ds;
- sigset_t sigmask;
- int i;
-
- Tst_count = 0;
-
- /*
- * Install a SIGSYS handler so that we can exit gracefully if
- * System V Semaphore support isn't in the kernel.
- */
- sa.sa_handler = sigsys_handler;
- sigemptyset(&sa.sa_mask);
- sa.sa_flags = 0;
- if (sigaction(SIGSYS, &sa, NULL) == -1)
- tst_brkm (TBROK, cleanup, "sigaction SIGSYS");
-
- /*
- * Install and SIGCHLD handler to deal with all possible exit
- * conditions of the receiver.
- */
- sa.sa_handler = sigchld_handler;
- sigemptyset(&sa.sa_mask);
- sa.sa_flags = 0;
- if (sigaction(SIGCHLD, &sa, NULL) == -1)
- tst_brkm (TBROK, cleanup, "sigaction SIGCHLD");
-
- semkey = ftok("/", 4160);
- tst_resm (semkey == (key_t)-1 ? TFAIL : TPASS,
- "ftok(\"/\") returns valid value");
-
- /*
- * Initialize child_pid to ourselves to that the cleanup function
- * works before we create the receiver.
- */
- child_pid = getpid();
-
- sender_semid = semget(semkey, 1, IPC_CREAT | 0640);
- tst_resm (sender_semid == -1 ? TFAIL : TPASS, "sender calls semget");
-
- sun.buf = &s_ds;
- tst_resm (semctl(sender_semid, 0, IPC_STAT, sun) == -1 ? TFAIL : TPASS,
- "semctl IPC_STAT");
-
- print_semid_ds(&s_ds, 0640);
-
- s_ds.sem_perm.mode = (s_ds.sem_perm.mode & ~0777) | 0600;
-
- sun.buf = &s_ds;
- tst_resm (semctl(sender_semid, 0, IPC_SET, sun) == -1 ? TFAIL : TPASS,
- "semctl IPC_SET");
-
- memset(&s_ds, 0, sizeof(s_ds));
-
- sun.buf = &s_ds;
- tst_resm (semctl(sender_semid, 0, IPC_STAT, sun) == -1 ? TFAIL : TPASS,
- "semctl IPC_STAT");
-
- tst_resm ((s_ds.sem_perm.mode & 0777) != 0600 ? TFAIL : TPASS,
- "IPC_SET of mode holds");
-
- print_semid_ds(&s_ds, 0600);
-
- for (child_count = 0; child_count < 5; child_count++) {
- switch ((child_pid = fork())) {
- case -1:
- tst_brkm (TBROK, cleanup, "fork");
- /* NOTREACHED */
-
- case 0:
- Tst_count += 22 + child_count * 4;
- tst_resm (TPASS, "fork");
- waiter();
- break;
-
- default:
- break;
- }
- }
-
- /*
- * Wait for all of the waiters to be attempting to acquire the
- * semaphore.
- */
- for (;;) {
- i = semctl(sender_semid, 0, GETNCNT);
- if (i == -1)
- tst_brkm (TBROK, cleanup, "semctl GETNCNT");
- if (i == 5)
- break;
- }
-
- /*
- * Now set the thundering herd in motion by initializing the
- * semaphore to the value 1.
- */
- sun.val = 1;
- tst_resm (semctl(sender_semid, 0, SETVAL, sun) == -1 ? TFAIL : TPASS,
- "sender: semctl SETVAL to 1");
-
- /*
- * Suspend forever; when we get SIGCHLD, the handler will exit.
- */
- sigemptyset(&sigmask);
- for (;;) {
- (void) sigsuspend(&sigmask);
- if (signal_was_sigchld)
- signal_was_sigchld = 0;
- else
- break;
- }
-
- /*
- * ...and any other signal is an unexpected error.
- */
-
- tst_brkm (TBROK, cleanup, "sender: received unexpected signal");
- exit (1);
-}
-
-void
-sigsys_handler(int signo)
-{
-
- tst_brkm (TBROK, cleanup,
- "System V Semaphore support is not present in the kernel");
-}
-
-void
-sigchld_handler(int signo)
-{
- union semun sun;
- struct semid_ds s_ds;
- int cstatus;
-
- /*
- * Reap the child; if it exited successfully, then we're on the
- * right track!
- */
- if (wait(&cstatus) == -1)
- tst_brkm (TBROK, cleanup, "wait");
-
- if (WIFEXITED(cstatus) == 0)
- tst_brkm (TBROK, cleanup, "receiver exited abnormally");
-
- if (WEXITSTATUS(cstatus) != 0)
- tst_brkm (TBROK, cleanup, "receiver exited with status %d",
- WEXITSTATUS(cstatus));
-
- /*
- * If we get here, the child has exited normally, and we should
- * decrement the child count. If the child_count reaches 0, we
- * should exit.
- */
-
- sun.buf = &s_ds;
- tst_resm (semctl(sender_semid, 0, IPC_STAT, sun) == -1 ? TFAIL : TPASS,
- "semctl IPC_STAT");
-
- print_semid_ds(&s_ds, 0600);
-
- if (--child_count != 0) {
- signal_was_sigchld = 1;
- return;
- }
-
- cleanup ();
-}
-
-void
-cleanup()
-{
-
- /*
- * If we're the sender, and it exists, remove the message queue.
- */
- if (child_pid != 0 && sender_semid != -1) {
- tst_resm (semctl(sender_semid, 0, IPC_RMID) == -1
- ? TFAIL : TPASS, "semctl IPC_RMID");
- }
- tst_exit ();
-}
-
-void
-print_semid_ds(struct semid_ds *sp, mode_t mode)
-{
- uid_t uid = geteuid();
- gid_t gid = getegid();
-
- printf("PERM: uid %d, gid %d, cuid %d, cgid %d, mode 0%o\n",
- (int)sp->sem_perm.uid, (int)sp->sem_perm.gid,
- (int)sp->sem_perm.cuid, (int)sp->sem_perm.cgid,
- sp->sem_perm.mode & 0777);
-
- printf("nsems %u\n", sp->sem_nsems);
-
- printf("otime: %s", ctime(&sp->sem_otime));
- printf("ctime: %s", ctime(&sp->sem_ctime));
-
- /*
- * Sanity check a few things.
- */
-
- tst_resm (sp->sem_perm.uid != uid || sp->sem_perm.cuid != uid
- ? TFAIL : TPASS, "uid matches");
-
- tst_resm (sp->sem_perm.gid != gid || sp->sem_perm.cgid != gid
- ? TFAIL : TPASS, "gid matches");
-
- tst_resm ((sp->sem_perm.mode & 0777) != mode
- ? TFAIL : TPASS, "mode matches");
-}
-
-void
-waiter()
-{
- struct sembuf s;
- int semid;
-
- tst_resm ((semid = semget(semkey, 1, 0)) == -1 ? TFAIL : TPASS,
- "waiter: semget");
-
- /*
- * Attempt to acquire the semaphore.
- */
- s.sem_num = 0;
- s.sem_op = -1;
- s.sem_flg = SEM_UNDO;
-
- tst_resm (semop(semid, &s, 1) == -1 ? TFAIL : TPASS,
- "waiter: semop -1");
-
- printf("WOO! GOT THE SEMAPHORE!\n");
- sleep(1);
-
- /*
- * Release the semaphore and exit.
- */
- s.sem_num = 0;
- s.sem_op = 1;
- s.sem_flg = SEM_UNDO;
-
- tst_resm (semop(semid, &s, 1) == -1 ? TFAIL : TPASS,
- "waiter: semop +1");
-
- /* Allow parent to receive message before getting SIGCHLD. */
- sleep (1);
- exit(0);
-}
diff --git a/winsup/testsuite/winsup.api/shmtest.c b/winsup/testsuite/winsup.api/shmtest.c
deleted file mode 100644
index 54a2493a8..000000000
--- a/winsup/testsuite/winsup.api/shmtest.c
+++ /dev/null
@@ -1,293 +0,0 @@
-/*-
- * Copyright (c) 1999 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility,
- * NASA Ames Research Center.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the NetBSD
- * Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * Obtained from: $NetBSD: shmtest.c,v 1.3 2002/07/20 08:36:26 grant Exp $
- * $FreeBSD: /repoman/r/ncvs/src/tools/regression/sysvshm/shmtest.c,v 1.1 2002/08/15 06:34:37 alfred Exp $
- */
-
-/*
- * Test the SVID-compatible Shared Memory facility.
- */
-
-#include <sys/param.h>
-#include <sys/ipc.h>
-#include <sys/shm.h>
-#include <sys/wait.h>
-
-#include <err.h>
-#include <errno.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-
-#include "test.h"
-#include "usctest.h"
-
-const char *TCID = "shmtest"; /* Test program identifier. */
-int TST_TOTAL = 22; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-int main __P((int, char *[]));
-void print_shmid_ds __P((struct shmid_ds *, mode_t));
-void sigsys_handler __P((int));
-void sigchld_handler __P((int));
-void cleanup __P((void));
-void receiver __P((void));
-
-const char *m_str = "The quick brown fox jumped over the lazy dog.";
-
-int sender_shmid = -1;
-pid_t child_pid;
-
-key_t shmkey;
-
-size_t pgsize;
-
-int
-main(argc, argv)
- int argc;
- char *argv[];
-{
- struct sigaction sa;
- struct shmid_ds s_ds;
- sigset_t sigmask;
- char *shm_buf;
-
- Tst_count = 0;
-
- /*
- * Install a SIGSYS handler so that we can exit gracefully if
- * System V Shared Memory support isn't in the kernel.
- */
- sa.sa_handler = sigsys_handler;
- sigemptyset(&sa.sa_mask);
- sa.sa_flags = 0;
- if (sigaction(SIGSYS, &sa, NULL) == -1)
- tst_brkm (TBROK, cleanup, "sigaction SIGSYS");
-
- /*
- * Install and SIGCHLD handler to deal with all possible exit
- * conditions of the receiver.
- */
- sa.sa_handler = sigchld_handler;
- sigemptyset(&sa.sa_mask);
- sa.sa_flags = 0;
- if (sigaction(SIGCHLD, &sa, NULL) == -1)
- tst_brkm (TBROK, cleanup, "sigaction SIGCHLD");
-
- pgsize = sysconf(_SC_PAGESIZE);
-
- shmkey = ftok("/", 4160);
- tst_resm (shmkey == (key_t)-1 ? TFAIL : TPASS,
- "ftok(\"/\") returns valid value");
-
- /*
- * Initialize child_pid to ourselves to that the cleanup function
- * works before we create the receiver.
- */
- child_pid = getpid();
-
- sender_shmid = shmget(shmkey, pgsize, IPC_CREAT | 0640);
- tst_resm (sender_shmid == -1 ? TFAIL : TPASS, "sender calls shmget");
-
- tst_resm (shmctl(sender_shmid, IPC_STAT, &s_ds) == -1 ? TFAIL : TPASS,
- "shmctl IPC_STAT");
-
- print_shmid_ds(&s_ds, 0640);
-
- s_ds.shm_perm.mode = (s_ds.shm_perm.mode & ~0777) | 0600;
-
- tst_resm (shmctl(sender_shmid, IPC_SET, &s_ds) == -1 ? TFAIL : TPASS,
- "shmctl IPC_SET");
-
- memset(&s_ds, 0, sizeof(s_ds));
-
- tst_resm (shmctl(sender_shmid, IPC_STAT, &s_ds) == -1 ? TFAIL : TPASS,
- "shmctl IPC_STAT");
-
- tst_resm ((s_ds.shm_perm.mode & 0777) != 0600 ? TFAIL : TPASS,
- "IPC_SET of mode holds");
-
- print_shmid_ds(&s_ds, 0600);
-
- tst_resm ((shm_buf = shmat(sender_shmid, NULL, 0)) == (void *) -1
- ? TFAIL : TPASS, "sender: shmat");
-
- /*
- * Write the test pattern into the shared memory buffer.
- */
- strcpy(shm_buf, m_str);
-
- switch ((child_pid = fork())) {
- case -1:
- tst_brkm (TBROK, cleanup, "fork");
- /* NOTREACHED */
-
- case 0:
- tst_resm (TPASS, "fork");
- receiver();
- break;
-
- default:
- Tst_count += 4;
- break;
- }
-
- /*
- * Suspend forever; when we get SIGCHLD, the handler will exit.
- */
- sigemptyset(&sigmask);
- (void) sigsuspend(&sigmask);
-
- /*
- * ...and any other signal is an unexpected error.
- */
- tst_brkm (TBROK, cleanup, "sender: received unexpected signal");
- exit (1);
-}
-
-void
-sigsys_handler(signo)
- int signo;
-{
-
- tst_brkm (TBROK, cleanup,
- "System V Shared Memory support is not present in the kernel");
-}
-
-void
-sigchld_handler(signo)
- int signo;
-{
- struct shmid_ds s_ds;
- int cstatus;
-
- /*
- * Reap the child; if it exited successfully, then the test passed!
- */
- if (waitpid(child_pid, &cstatus, 0) != child_pid)
- tst_brkm (TBROK, cleanup, "waitpid");
-
- if (WIFEXITED(cstatus) == 0)
- tst_brkm (TBROK, cleanup, "receiver exited abnormally");
-
- if (WEXITSTATUS(cstatus) != 0)
- tst_brkm (TBROK, cleanup, "receiver exited with status %d",
- WEXITSTATUS(cstatus));
-
- /*
- * If we get here, the child has exited normally, and thus
- * we should exit normally too. First, tho, we print out
- * the final stats for the message queue.
- */
-
- tst_resm (shmctl(sender_shmid, IPC_STAT, &s_ds) == -1 ? TFAIL : TPASS,
- "shmctl IPC_STAT");
-
- print_shmid_ds(&s_ds, 0600);
-
- cleanup ();
-}
-
-void
-cleanup()
-{
-
- /*
- * If we're the sender, and it exists, remove the shared memory area.
- */
- if (child_pid != 0 && sender_shmid != -1) {
- tst_resm (shmctl(sender_shmid, IPC_RMID, NULL) == -1
- ? TFAIL : TPASS, "shmctl IPC_RMID");
- }
- tst_exit ();
-}
-
-void
-print_shmid_ds(sp, mode)
- struct shmid_ds *sp;
- mode_t mode;
-{
- uid_t uid = geteuid();
- gid_t gid = getegid();
-
- printf("PERM: uid %d, gid %d, cuid %d, cgid %d, mode 0%o\n",
- (int)sp->shm_perm.uid, (int)sp->shm_perm.gid,
- (int)sp->shm_perm.cuid, (int)sp->shm_perm.cgid,
- sp->shm_perm.mode & 0777);
-
- printf("segsz %lu, lpid %d, cpid %d, nattch %u\n",
- (u_long)sp->shm_segsz, sp->shm_lpid, sp->shm_cpid,
- sp->shm_nattch);
-
- printf("atime: %s", ctime(&sp->shm_atime));
- printf("dtime: %s", ctime(&sp->shm_dtime));
- printf("ctime: %s", ctime(&sp->shm_ctime));
-
- /*
- * Sanity check a few things.
- */
-
- tst_resm (sp->shm_perm.uid != uid || sp->shm_perm.cuid != uid
- ? TFAIL : TPASS, "uid matches");
-
- tst_resm (sp->shm_perm.gid != gid || sp->shm_perm.cgid != gid
- ? TFAIL : TPASS, "gid matches");
-
- tst_resm ((sp->shm_perm.mode & 0777) != mode ? TFAIL : TPASS,
- "mode matches");
-}
-
-void
-receiver()
-{
- int shmid;
- void *shm_buf;
-
- tst_resm ((shmid = shmget(shmkey, pgsize, 0)) == -1 ? TFAIL : TPASS,
- "receiver: shmget");
-
- tst_resm ((shm_buf = shmat(shmid, NULL, 0)) == (void *) -1
- ? TFAIL : TPASS, "receiver: shmat");
-
- printf("%s\n", (const char *)shm_buf);
- tst_resm (strcmp((const char *)shm_buf, m_str) != 0 ? TFAIL : TPASS,
- "receiver: data is correct");
-
- exit(0);
-}
diff --git a/winsup/testsuite/winsup.api/sigchld.c b/winsup/testsuite/winsup.api/sigchld.c
deleted file mode 100644
index b12876d4a..000000000
--- a/winsup/testsuite/winsup.api/sigchld.c
+++ /dev/null
@@ -1,22 +0,0 @@
-#include <sys/types.h>
-#include <unistd.h>
-#include <signal.h>
-#include <stdlib.h>
-
-int no_signal_caught = 1;
-
-void handler ( int signo )
-{
- no_signal_caught = 0;
-}
-
-int
-main()
-{
- pid_t pid;
- signal ( SIGCHLD, handler );
- pid = fork();
- if ( pid == 0 ) exit ( 0 );
- sleep ( 2 );
- exit ( no_signal_caught );
-}
diff --git a/winsup/testsuite/winsup.api/signal-into-win32-api.c b/winsup/testsuite/winsup.api/signal-into-win32-api.c
deleted file mode 100755
index 57ab8b5c8..000000000
--- a/winsup/testsuite/winsup.api/signal-into-win32-api.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Test if signal is delivered to the application which is
- * currently inside of native syscall
- */
-
-#include <errno.h>
-#include <signal.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <windows.h>
-
-int saw_sigchld = 0;
-int sleep_stage = -1;
-
-void
-handle_child (int signo)
-{
- printf ( "saw SIGCHLD, %d", sleep_stage);
- saw_sigchld = 1;
-}
-
-int
-main (int argc, char** argv)
-{
- pid_t pid;
- if (argc > 1)
- {
- Sleep (200);
- return 0;
- }
-
- signal (SIGCHLD, handle_child);
- pid = fork ();
- if (pid < 0)
- {
- perror ( "fork" );
- return 2;
- }
- else if (pid == 0)
- execl ( argv[0], argv[0], "child", NULL );
- else
- {
- sleep_stage = 0;
- Sleep (3000);
- sleep_stage = 1;
- sleep (10);
- sleep_stage = 2;
- if (!saw_sigchld)
- {
- printf ( "oops\n" );
- kill (pid, SIGTERM);
- return 1;
- }
- else
- return 0;
- }
- exit (0);
-}
diff --git a/winsup/testsuite/winsup.api/systemcall.c b/winsup/testsuite/winsup.api/systemcall.c
deleted file mode 100644
index 91dd748c0..000000000
--- a/winsup/testsuite/winsup.api/systemcall.c
+++ /dev/null
@@ -1,68 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <string.h>
-#include <sys/wait.h>
-
-int
-main (int argc, char **argv)
-{
- int fd, pid, n;
- int fds[2];
- static char buf[4096];
-
- close (0);
- if ((fd = open ("/dev/null", O_WRONLY)) != 0)
- {
- fprintf (stderr, "couldn't redirect stdin to /dev/null, fd %d - %s\n", fd, strerror (errno));
- exit (1);
- }
-
- close (1);
- if ((fd = open ("/dev/null", O_WRONLY)) != 1)
- {
- fprintf (stderr, "couldn't redirect stdout to /dev/null, fd %d - %s\n", fd, strerror (errno));
- exit (1);
- }
- if (pipe (fds))
- {
- fprintf (stderr, "pipe call failed - %s\n", strerror (errno));
- exit (1);
- }
- if ((pid = fork ()) == 0)
- {
- close (fds[0]);
- if (dup2 (fds[1], 2) != 2)
- {
- fprintf (stderr, "couldn't redirect stderr to pipe - %s\n", strerror (errno));
- exit (1);
- }
- exit (system ("ls"));
- }
- else if (pid < 0)
- {
- perror ("couldn't fork");
- exit (1);
- }
-
- close (fds[1]);
- if (read (fds[0], buf, 4096) != 0)
- {
- fprintf (stderr, "system() call failed?\n%s\n", buf);
- exit (1);
- }
-
- if (waitpid (pid, &n, 0) < 0)
- {
- perror ("waitpid failed");
- exit (1);
- }
- if (n != 0)
- {
- fprintf (stderr, "system() call returned %p\n", (void *) n);
- exit (1);
- }
- exit (0);
-}
diff --git a/winsup/testsuite/winsup.api/user_malloc.c b/winsup/testsuite/winsup.api/user_malloc.c
deleted file mode 100644
index 8685f86ab..000000000
--- a/winsup/testsuite/winsup.api/user_malloc.c
+++ /dev/null
@@ -1,216 +0,0 @@
-/* Test of external malloc, calloc, realloc and free capability */
-
-#if 1
-#include "test.h"
-#include "usctest.h"
-#else
-enum {TPASS, TFAIL, TBROK, TINFO};
-#define tst_resm(xxx, yyy...) printf(yyy), printf(" RES %d\n", xxx)
-#define tst_brkm(xxx, yyy, zzz...) printf(zzz), printf(" RES %d\n", xxx)
-#define tst_exit()
-int Tst_count;
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <strings.h>
-#include <errno.h>
-#include <unistd.h>
-#include <sys/wait.h>
-
-const char *TCID = "malloc"; /* Test program identifier. */
-int TST_TOTAL = 2; /* Total number of test cases. */
-extern int Tst_count; /* Test Case counter for tst_* routines */
-
-/* Main test.
- Verbose mode if argc > 0
- Note that malloc and friends are also called by Cygwin before main,
- and that malloc can call getenv. */
-
-int malloc_error = 0, realloc_error = 0, free_error = 0;
-int calloc_count = 0, malloc_count = 0, realloc_count = 0, free_count = 0;
-
-void
-cleanup (void)
-{
- tst_exit();
-}
-
-int
-syncwithchild (pid_t pid, int expected_exit_status)
-{
- int status;
-
- if (waitpid (pid, &status, 0) != pid)
- {
- tst_brkm (TBROK, cleanup, "Wait for child: %s", strerror (errno));
- return 1;
- }
- if (!WIFEXITED (status))
- {
- tst_brkm (TBROK, cleanup, "Child had abnormal exit");
- return 1;
- }
- if (WEXITSTATUS (status) != expected_exit_status)
- {
- tst_brkm (TFAIL, cleanup, "Child had exit status %d != %d",
- WEXITSTATUS (status), expected_exit_status);
- return 1;
- }
- return 0;
-}
-
-#if 0
-void * mallocX (size_t size);
-void * callocX (size_t nmemb, size_t size);
-void * reallocX (void * ptr, size_t size);
-void freeX(void *);
-
-#define malloc mallocX
-#define calloc callocX
-#define realloc reallocX
-#define free freeX
-#endif
-
-int main (int argc, char * argv[])
-{
- void * ptr;
- int error = 0;
- pid_t pid;
-
- Tst_count = 0;
-
- tst_resm(TINFO, "Testing if external malloc works. ppid %d", getppid());
-
- ptr = malloc (16);
- ptr = calloc (1, 16);
- ptr = realloc (ptr, 24);
- free (ptr);
-
- error = (malloc_count == 0 || calloc_count == 0 || realloc_count == 0 || free_count == 0);
-
- if (error || argc > 1)
- {
- printf ("malloc_count %d, calloc_count %d, realloc_count %d, free_count %d\n",
- malloc_count, calloc_count, realloc_count, free_count);
- printf ("malloc_error %d, realloc_error %d, free_error %d\n",
- malloc_error, realloc_error, free_error);
- }
- tst_resm (!error ? TPASS : TFAIL, "Running in pid %d", getpid());
-
- /* If run from Windows, run also from Cygwin */
- if (getppid() == 1)
- {
- tst_resm(TINFO, "Ready to test if malloc works from Cygwin");
-
- if ((pid = fork()) == 0)
- {
- tst_resm(TINFO, "Ready to exec with pid %d\n", getpid());
- error = execl(argv[0], argv[0], argc > 1? argv[1]:NULL, NULL);
- exit(error);
- }
- else if (pid < 0)
- tst_brkm (TBROK, cleanup, "Fork failed: %s", strerror (errno));
- else
- {
- error = syncwithchild (pid, 0);
- tst_resm (!error ? TPASS : TFAIL, "Running in pid %d", pid);
- }
- }
-
- tst_exit ();
-}
-
-/****************************************
-Actual malloc & friends implementation
-****************************************/
-
-typedef unsigned long long ull;
-
-#define SIZE (1024*1024ULL) /* long long */
-ull buffer[SIZE];
-ull * current = buffer;
-
-static int is_valid (void * ptr)
-{
- unsigned int iptr = (unsigned int) ptr;
- ull * ullptr = (ull *) ptr;
-
- iptr = (iptr / sizeof(ull)) * sizeof(ull);
- if (iptr != (int) ptr)
- return 0;
- if (--ullptr < buffer || ullptr[0] > SIZE || ullptr + ullptr[0] > current)
- return 0;
- return 1;
-}
-
-void * malloc (size_t size)
-{
- ull llsize = (size + 2 * sizeof (ull) - 1) / sizeof (ull);
- static char * envptr;
- void * ret;
-
- /* Make sure getenv works */
- if (!envptr)
- envptr = getenv ("PATH");
-
- malloc_count++;
- if (current + llsize >= buffer + SIZE)
- {
- malloc_error++;
- errno = ENOMEM;
- return NULL;
- }
- *current = llsize;
- ret = (void *) (current + 1);
- current += llsize;
-
- return ret;
-}
-
-void * calloc (size_t nmemb, size_t size)
-{
- calloc_count++;
- void * ptr = malloc (nmemb * size);
- malloc_count--;
- if (ptr)
- memset(ptr, 0, nmemb * size);
- return ptr;
-}
-
-void * realloc (void * ptr, size_t size)
-{
- const ull ullsize = (size + 2 * sizeof (ull) - 1) / sizeof (ull);
- ull * const ullptr = (ull *) ptr;
- void * newptr;
-
- realloc_count++;
-
- if (ptr)
- {
- if (!is_valid (ptr))
- {
- realloc_error++;
- errno = ENOMEM;
- return NULL;
- }
- if (ullptr[-1] >= ullsize)
- return ptr;
- }
-
- newptr = malloc (size);
- malloc_count--;
-
- if (ptr && newptr)
- memcpy (newptr, ptr, size);
-
- return newptr;
-}
-
-void free (void * x)
-{
- free_count++;
- if (x && ! is_valid (x))
- free_error++;
-}
-
diff --git a/winsup/testsuite/winsup.api/waitpid.c b/winsup/testsuite/winsup.api/waitpid.c
deleted file mode 100644
index ee2925c4c..000000000
--- a/winsup/testsuite/winsup.api/waitpid.c
+++ /dev/null
@@ -1,24 +0,0 @@
-#include <stdio.h>
-#include <sys/wait.h>
-#include <errno.h>
-#include <unistd.h>
-#include <stdlib.h>
-
-int
-main (int argc, char **argv)
-{
- int pid, n;
- if ((pid = fork ()) == 0)
- exit (0);
- sleep (2);
- if ((n = waitpid (pid, NULL, 0)) != pid)
- {
- printf ("wait pid failed, pid %d, n %d, errno %d\n", pid, n, errno);
- exit(1);
- }
- else
- {
- printf ("wait pid succeeded, pid %d, n %d, errno %d\n", pid, n, errno);
- exit (0);
- }
-}
diff --git a/winsup/testsuite/winsup.api/winsup.exp b/winsup/testsuite/winsup.api/winsup.exp
deleted file mode 100644
index 639096267..000000000
--- a/winsup/testsuite/winsup.api/winsup.exp
+++ /dev/null
@@ -1,85 +0,0 @@
-source "site.exp"
-source "$srcdir/winsup.api/known_bugs.tcl"
-
-if { ! [isnative] } {
- verbose "skipping winsup.api because it's not native"
- return
-}
-
-set rv ""
-
-set ltp_includes "-I$ltp_includes"
-set ltp_libs "$rootme/libltp.a"
-
-set add_includes $ltp_includes
-set add_libs $ltp_libs
-
-set test_filter ""
-
-if { [info exists env(CYGWIN_TESTSUITE_TESTS)] } {
- set test_filter "$env(CYGWIN_TESTSUITE_TESTS)"
-}
-
-proc ws_spawn {cmd args} {
- global rv
- verbose "running $cmd\n"
- catch "exec $cmd" rv
- verbose send "catchCode = $rv\n"
-}
-
-verbose "Filter: $test_filter"
-
-foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.c $srcdir/$subdir/*/*.{cc,c}]] {
- if { $test_filter != "" && ! [regexp $test_filter $src] } {
- verbose -log "Skipping $src"
- continue
- }
-
- regsub "^$srcdir/$subdir/" $src "" testcase
- regsub ".c$" $testcase "" base
- regsub ".*/" $base "" basename
- regsub "/" $base "-" base
-
- if { [lsearch -exact $xfail_list $basename] >= 0 } {
- set xfail_expected 1
- setup_xfail "*-*-*"
- } else {
- set xfail_expected 0
- clear_xfail
- }
-
- if [ file exists "$srcdir/$subdir/$basename.exp" ] then {
- source "$srcdir/$subdir/$basename.exp"
- } else {
- ws_spawn "$CC -nodefaultlibs -mwin32 $CFLAGS $src $add_includes $add_libs $runtime_root/binmode.o -lgcc $runtime_root/libcygwin0.a -lkernel32 -luser32 -o $base.exe"
- if { $rv != "" } {
- verbose -log "$rv"
- fail "$testcase (compile)"
- } else {
- if { $verbose } {
- set redirect_output "./$base.log"
- } else {
- set redirect_output /dev/null
- }
- ws_spawn "$rootme/cygrun ./$base.exe > $redirect_output"
- if { $rv != "" } {
- verbose -log "$testcase: $rv"
- fail "$testcase (execute)"
- if { $xfail_expected } {
- catch { file delete "$base.exe" } err
- if { $err != "" } {
- note "error deleting $base.exe: $err"
- }
- }
- } else {
- pass "$testcase"
- if { ! $xfail_expected } {
- catch { file delete "$base.exe" } err
- if { $err != "" } {
- note "error deleting $base.exe: $err"
- }
- }
- }
- }
- }
-}
diff --git a/winsup/utils/COPYING.dumper b/winsup/utils/COPYING.dumper
deleted file mode 100644
index 623b6258a..000000000
--- a/winsup/utils/COPYING.dumper
+++ /dev/null
@@ -1,340 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) year name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- <signature of Ty Coon>, 1 April 1989
- Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/winsup/utils/ChangeLog b/winsup/utils/ChangeLog
deleted file mode 100644
index a0dc739c8..000000000
--- a/winsup/utils/ChangeLog
+++ /dev/null
@@ -1,4103 +0,0 @@
-2014-12-15 Corinna Vinschen <corinna@vinschen.de>
-
- * setfacl.c (action_t): Add DeleteDef value.
- (delacl): Take new parameter to differe between DeleteAll and DeleteDef.
- Extend conditional to handle DefaultDef. Change comment accordingly.
- (setfacl): Call delacl in DefaultDef case as well.
- (usage): Add and describe -k option. Add -k to require options.
- (longopts): Add --remove-default option.
- (opts): Add -k option.
- (main): Handle -k option.
-
-2014-12-05 Václav Zeman <vhaisman@gmail.com>
-
- * tzmap-from-unicode.org: Create tzmap as const.
- * tzmap.h: Regenerate.
-
-2014-12-05 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in: Add rules to create and depend on tzmap.h.
- * tzmap-from-unicode.org: New script to create tzmap.h.
- * tzmap.h: New auto-generated file.
- * tzset.c: Drop tzmap from here and include tzmap.h instead. Drop
- Windows 2000 considerations.
-
-2014-11-28 Corinna Vinschen <corinna@vinschen.de>
-
- * mkgroup.c (main): Call enum_local_groups with offset 0x30000 for local
- machine, too.
-
-2014-11-27 Corinna Vinschen <corinna@vinschen.de>
-
- * mkgroup.c (main): Call enum_groups with offset 0x30000 for local
- machine, same as from DB.
- * mkpasswd.c (enum_unix_users): Set pw_passwd field to '*'.
- (enum_users): Ditto.
- (main): Call enum_users with offset of 0x30000 for local machine,
- same as from DB.
-
-2014-11-24 Corinna Vinschen <corinna@vinschen.de>
-
- * passwd.c (GetPW): If server is NULL, and the user is not a local
- user, try to fetch the DC to use as server.
- (ChangePW): Get Windows username via extra parameter.
- (usage): Reduce -d help text to reflect above change.
- (main): Fix typo in comment. Call GetPW and ChangePW as per the
- changes above.
-
-2014-11-12 Corinna Vinschen <corinna@vinschen.de>
-
- * mkgroup.c (usage): Fix language.
- * mkpasswd.c (usage): Ditto.
-
-2014-11-12 Corinna Vinschen <corinna@vinschen.de>
-
- * mkgroup.c (enum_unix_groups): Always print groupname with machine
- prefix.
- (usage): Extend help output for -l option.
- (main): Drop superfluous goto and label. Make machine prefixing for
- local machine when using -l option dependend on options in
- /etc/nsswitch.conf.
- * mkpasswd.c: Ditto.
-
-2014-11-10 Corinna Vinschen <corinna@vinschen.de>
-
- * cygcheck.cc (dump_sysinfo): Handle Windows 10/Server 2014(?).
-
-2014-11-03 Corinna Vinschen <corinna@vinschen.de>
-
- * mkgroup.c (enum_local_groups): Don't generate leading separator char
- for builtin accounts.
-
-2014-10-29 Corinna Vinschen <corinna@vinschen.de>
-
- * setfacl.c (setfacl): Fix bracketing in expression.
-
-2014-10-27 Corinna Vinschen <corinna@vinschen.de>
-
- * setfacl.c (usage): Add -b to require options.
-
-2014-10-27 Corinna Vinschen <corinna@vinschen.de>
-
- * setfacl.c (action_t): Add DeleteAll value.
- (delacl): New function to remove all ACL entries not representing POSIX
- permissions.
- (setfacl): Rearrange conditional expression into switch statement.
- Add DeleteAll case.
- (usage): Add and describe -b option.
- (longopts): Add --remove-all option.
- (opts): Add -b option.
- (main): Handle -b option.
-
-2014-10-21 Corinna Vinschen <corinna@vinschen.de>
-
- * cygcheck.cc (CYGLSA64_DLL): Remove unused macro.
- (dump_sysinfo): If COMSPEC isn't set in the MSVCRT environment, set it.
- Explain why.
-
-2014-09-03 Corinna Vinschen <corinna@vinschen.de>
-
- * setfacl.c (addmissing): New function to add missing acl entries to
- a modified acl per the rules set by aclcheck.
- (setfacl): Call addmissing unless action is Delete.
-
-2014-09-03 Corinna Vinschen <corinna@vinschen.de>
-
- * setfacl.c (getaclentry): Fix previous fix again. Allow lone 'm' as
- well as any lone default entry if action is Delete. Fix comments.
- (usage): Align usage text.
-
-2014-09-03 Corinna Vinschen <corinna@vinschen.de>
-
- * setfacl.c (getaclentry): Fix return value in case of a lone 'm' if
- action is Delete. Drop requirement for a trailing colon if action is
- Delete.
-
-2014-08-31 Corinna Vinschen <corinna@vinschen.de>
-
- * setfacl.c (usage): Drop outdated note that default ACEs are not
- taken into account.
-
-2014-08-31 Corinna Vinschen <corinna@vinschen.de>
-
- * getfacl.c (usage): Add flags description.
- (main): Print suid/sgid/vtx flags if available.
-
-2014-08-15 Corinna Vinschen <corinna@vinschen.de>
-
- * configure.ac: Convert to new AC_INIT style.
- * configure: Regenerate.
-
-2014-08-14 Corinna Vinschen <corinna@vinschen.de>
-
- * utils.xml: Move to ../doc.
-
-2014-08-06 Corinna Vinschen <corinna@vinschen.de>
-
- * passwd.c (usage): Rename DAYS to MINDAYS and MAXDAYS.
- * utils.xml (passwd): Ditto.
-
-2014-07-29 Corinna Vinschen <corinna@vinschen.de>
-
- * mkgroup.c (usage): Move info message that this /etc/group isn't really
- required anymore more to the top of the usage output.
- * mkpasswd.c (usage): Ditto for /etc/passwd. Drop old text from output.
- * utils.xml: Fix accordingly.
-
-2014-06-16 Corinna Vinschen <corinna@vinschen.de>
-
- * passwd.c (main): Fix typo in error output.
-
-2014-04-21 Jon TURNEY <jon.turney@dronecode.org.uk>
-
- * minidumper.cc (filter_minidump_type): New function.
- (minidump): Change default dump type from MiniDumpNormal to
- something with more useful information without getting too
- big. Use filter_minidump_type() to filter out unsupported dump
- types.
-
-2014-04-21 Jon TURNEY <jon.turney@dronecode.org.uk>
-
- * Makefile.in (minidumper.exe): Link directly with dbghelp.
- * minidumper.cc (minidump): Ditto.
-
-2014-04-21 Jon TURNEY <jon.turney@dronecode.org.uk>
-
- * minidumper.cc (minidump): Fix copy and paste error in checking
- result of OpenProcess().
-
-2014-02-24 Corinna Vinschen <corinna@vinschen.de>
-
- * mkgroup.c (domlist_t): Drop id_offset.
- (get_dcname): Remove.
- (current_group): Remove.
- (enum_unix_groups): Simplify. Change space to underscore in domain
- name.
- (enum_local_groups): Simplify to accommodate the fact that it's only
- called for foreign machines.
- (enum_groups): Ditto.
- (print_special_by_sid): Remove.
- (print_special_by_name): Remove.
- (usage): Align to new code.
- (fetch_primary_domain): Remove.
- (main): Use cygwin_internal CW_SETENT, CW_GETENT and CW_ENDENT method.
- Call enum_local_groups, enum_groups, and enum_unix_groups only for
- foreign machines.
- * mkpasswd.c (get_dcname): Remove.
- (current_user): Remove.
- (enum_unix_users): Simplify. Change space to underscore in domain name.
- (enum_users): Simplify to accommodate the fact that it's only
- called for foreign machines.
- (print_special_by_sid): Remove.
- (usage): Align to new code.
- (longopts): Add -b/--no-builtin option.
- (opts): Add -b option.
- (print_special_by_name): Remove.
- (enum_std_accounts): Remove.
- (fetch_primary_domain): Remove.
- (main): Use cygwin_internal CW_SETENT, CW_GETENT and CW_ENDENT method.
- Call enum_users and enum_unix_users only for foreign machines.
- * utils.xml (mkgroup): Align documentation to new usage.
- (mkpasswd): Ditto.
-
-2014-02-23 Jon TURNEY <jon.turney@dronecode.org.uk>
-
- * minidumper.cc (minidump): Fix -t option argument handling.
-
-2014-02-07 Jon TURNEY <jon.turney@dronecode.org.uk>
-
- * minidumper.cc: New file.
- * Makefile.in (CYGWIN_BINS): Add minidumper.
- * utils.xml (minidumper): New section.
-
-2013-11-19 Corinna Vinschen <corinna@vinschen.de>
-
- * cygcheck.cc (RtlGetVersion): Declare.
- (dump_sysinfo): Call RtlGetVersion rather than GetVersionEx to get
- correct OS info even on Windows 8.1. Don't check return value since
- RtlGetVersion never fails per MSDN. Move fetching kernel32 module
- handle where it's really needed. Drop temporary comment added by
- previous checkin.
-
-2013-11-19 Corinna Vinschen <corinna@vinschen.de>
-
- * cygcheck.cc (dump_sysinfo): Revert Windows 8.1 hack. It's not
- working. Add a (hopefully temporary) comment.
-
-2013-11-19 Corinna Vinschen <corinna@vinschen.de>
-
- * cygcheck.cc (dump_sysinfo): Drop code trying to fetch OSVERSIONINFO
- if fetching OSVERSIONINFOEX failed. Drop code handling unsupported
- platform IDs. Add code to tweak dwMinorVersion on Windows 8.1 if no
- manifest is present.
-
-2013-11-19 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (cygcheck.exe): Link against wininet.dll.
- (dumper.exe): Link against psapi.dll.
- * cygcheck.cc (_WIN32_WINNT): Define as 0x0602.
- (pInternetCloseHandle): Drop pointer.
- (PRODUCT_UNLICENSED): Drop definition.
- (PRODUCT_PROFESSIONAL_WMC): Ditto.
- (package_grep): Delete code loading wininet functions dynamically, just
- call functions directly.
- * module_info.cc: Drop code loading psapi functions dynamically since
- all supported OS versions have it anyway. Call psapi functions
- directly.
-
-2013-11-19 Corinna Vinschen <corinna@vinschen.de>
-
- * cygcheck.cc (dump_sysinfo): Distinguish Windows 8 and 8.1, as well
- as Windows Server 2012 and 2012 R2. Add missing commas in products
- array to avoid crashes. Drop Windows NT4 and 2000 printouts. Just
- call IsWow64Process, GetNativeSystemInfo, and GetDiskFreeSpaceEx
- directly, rather than loading them dynamically, since they are exported
- by all supported OS versions. Fix questionable type usage in call to
- GetDiskFreeSpaceEx.
-
-2013-11-06 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * configure.ac: Detect windows headers/libs after we've figured out the
- C compiler.
- * configure: Regenerate.
- * aclocal.m4: Regenerate.
-
-2013-09-16 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * dump_setup.cc (find_tar_ext): Generalize search for .tar extension,
- avoiding looking for specific compression types.
-
-2013-08-23 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * cygcheck.cc (package_grep): Accommodate arch-specific package layout.
-
-2013-07-31 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (MINGW_LDFLAGS): Don't link against w32api libs. These
- are only for Cygwin executables.
-
-2013-07-07 Christopher Faylor <me.cygwin2013@cgf.cx>
-
- * cygcheck.cc (dll_info): Detect and report on symlinks. Output wrong
- architecture message inline with stdout for clarity.
- * path.cc (is_symlink): Always reset file pointer to beginning on exit.
- (readlink): Assume that file pointer is set to the beginning.
-
-2013-06-26 Corinna Vinschen <corinna@vinschen.de>
-
- * cygpath.cc (do_pathconv): when -p option is given, generate wide
- path without long path prefixing.
- * wide_path.h (wide_path::wide_path): Allow extra bool parameter to
- specify whether or not performing Windows long path prefixing.
-
-2013-05-21 Corinna Vinschen <corinna@vinschen.de>
-
- Reinstantiate accidentally removed patch from 2009-05-16:
- * Makefile.in (cygpath.exe): Link against cygwin.a before linking
- against ntdll.dll to avoid linking symbols defined in both DLLs
- from ntdll.
- (ps.exe): Ditto.
-
-2013-05-10 Warren Young <warren@etr-usa.com>
-
- * utils.sgml utils.xml: Renamed utils.sgml to utils.xml, added
- <?xml> and <!DOCTYPE> tags to the top, and formatted it. No
- content change.
-
-2013-04-23 Corinna Vinschen <corinna@vinschen.de>
-
- * Merge in cygwin-64bit-branch. See ChangeLog.64bit for details.
-
-2013-02-20 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * Makefile.in (CYGWIN_LDFLAGS): Replace -static-lib* with -static.
- (MINGW_LDFLAGS): Ditto.
- (ZLIB): Simplify accordingly.
-
-2012-12-14 Corinna Vinschen <corinna@vinschen.de>
-
- * utils.sgml (mount): Document sparse mount option.
-
-2012-11-27 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * Makefile.in: Move CFLAGS and CXXFLAGS so that they can be manipulated
- by Makefile.common. Add -static-libstdc++ to *LDFLAGS. Add
- dependencies for loadlib.h.
- * loadlib.h: Update copyright.
- (_load_sys_library): Properly define set_dll_library as WINAPI to avoid
- stack corruption.
-
-2012-11-27 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * Makefile.in (ZLIBS): Common define to force static load.
- (MINGW_LDFLAGS): Use static libgcc.
-
-2012-11-27 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * Makefile.in: Make sure that libz is always loaded staticly.
-
-2012-11-26 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * configure.ac: Rename from configure.in.
- * configure.in: Delete.
- * configure: Regenerate.
-
-2012-11-26 Corinna Vinschen <corinna@vinschen.de>
-
- * bloda.cc: Drop Mingw.org considerations.
- * dump_setup.cc: Ditto.
- * strace.cc: Ditto.
-
-2012-11-12 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * aclocal.m4: Regenerate.
- * configure: Ditto.
- * autogen.sh: New script.
- * configure.in: Revamp for new configury.
- * Makefile.in: Revamp for new configury. Rename ALL_* to just *.
- Always use "VERBOSE" setting.
- (MINGW_CXX): Don't include CFLAGS in definition.
- (all): Define target first, before everything else so that it is the
- default.
- (ps.exe): Don't add useless -lcygwin.
- (ldh.exe): For consistency, add to existing MINGW_LDFLAGS rather than
- redefining them.
- (cygcheck.exe): Always include -lz for MINGW_LDFLAGS. Don't try to
- figure out where to find it.
- (dumper.exe): Simplify check. Assume libraries are installed rather
- than trying to retrieve from source tree.
- (install): Just use /bin/mkdir to create directories.
- (Makefile): Regenerate when standard dependencies change.
- * dump_setup.cc: Always include zlib.h. Remove accommodations for it
- possibly not existing.
- * parse_pe.cc: Add define which allows building with installed
- binutils package.
- * dumper.cc: Ditto.
-
-2012-11-09 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (vcygpath): Handle cygdrive prefix.
-
-2012-11-07 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in ($(MINGW_BINS)): Drop -B$(mingw_build)/ from build
- expression.
-
-2012-11-05 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (MINGW_CXX): Attach $(CFLAGS) to allow providing
- build option tweaks to mingw compiler as well.
-
-2012-10-24 Corinna Vinschen <corinna@vinschen.de>
-
- * configure.in: Add AC_NO_EXECUTABLES,
- * configure: Regenerate.
-
-2012-10-24 Kai Tietz <ktietz70@googlemail.com>
- Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
- Corinna Vinschen <corinna@vinschen.de>
-
- * configure.in: Add check for MINGW_CXX. Remove libiconv check.
- * configure: Regenerate.
- * Makefile.in: Remove references to mingw and w32api directories.
- Use MINGW_CXX instead of mingw script to build MINGW_BINS.
- Check for libiconv with $CC --print-file-name.
- * cygcheck.cc: Use relative include paths for Cygwin headers.
- * path.cc: Ditto.
- * strace.cc: Ditto
- * mingw: Remove.
-
-2012-10-19 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (cygcheck.exe): Add temporary (1.7.17-only) hack to
- allow cygcheck running on pre-Vista despite of the new w32api not
- matching the locally used w32api.
-
-2012-10-09 Corinna Vinschen <corinna@vinschen.de>
-
- * cygcheck.cc (dump_sysinfo): Convert "if/else if" chain to a switch
- statement. Drop "not yet supported" and "Server" from Windows 2012
- output string.
-
-2012-09-02 Corinna Vinschen <corinna@vinschen.de>
-
- * cygcheck.cc (dump_sysinfo): Drop "not yet supported" text from
- Windows 8. Update products array.
-
-2012-07-11 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (cygcheck.exe): Link against psapi.dll.
- * bloda.cc: Change include section to work with Mingw64 headers.
- Include psapi.h. Use SystemProcessInformation instead of
- SystemProcessesAndThreadsInformation throughout and add define for
- w32api headers. Ditto for PSYSTEM_PROCESS_INFORMATION vs.
- PSYSTEM_PROCESSES.
- (system_module_list): New type to replace SYSTEM_MODULE_INFORMATION.
- Change usage throughout accordingly.
- (get_module_list): Fetch module list using PSAPI functions
- EnumDeviceDrivers and GetDeviceDriverBaseNameA.
- * cygcheck.cc (max): Define as __max if not defined already.
- (alloca): Only define if not defined already.
- (handle_unique_object_name): Use explicit sharing flags rather than
- FILE_SHARE_VALID_FLAGS which officially is only available in DDK
- headers.
- (PRODUCT_ULTIMATE_E): Only define if not defined already.
- * dump_setup.cc: Change include section to work with Mingw64 headers.
- (NtQueryAttributesFile): Drop NTOSAPI aka DECLSPEC_IMPORT.
- * strace.cc: Change include section to work with Mingw64 headers.
- (alloca): Only define if not defined already.
-
-2012-07-06 Corinna Vinschen <corinna@vinschen.de>
-
- * cygpath.cc: Change including headers to allow building against
- Mingw64 headers. Include ntdef.h and ntdll.h rather than ddk headers.
- Define _WIN32_WINNT and WINVER as 0x0602.
- (RtlEqualUnicodePathPrefix): Drop definition. Pulled in from ntdll.h
- now.
- (get_device_name): s/Zw/Nt.
- * dumper.cc: Include sys/param.h
- (dumper::dump_memory_region): Use MIN rather than min.
- * locale.cc: Include stdlib.h. Define _WIN32_WINNT and WINVER as
- 0x0602.
- * ps.cc: Include ntdef.h and ntdll.h rather than ddk headers.
- * regtool.cc (regDeleteKeyEx): Drop WINADVAPI qualifier.
-
-2012-06-03 Corinna Vinschen <corinna@vinschen.de>
-
- * cygcheck.cc (dump_sysinfo): Change "Server 8" to official
- "Server 2012".
-
-2012-05-05 Corinna Vinschen <corinna@vinschen.de>
-
- * mkpasswd.c (current_user): Actually *use* $HOME if it's available.
- Add comment to explain what we're doing here.
-
-2012-04-05 Corinna Vinschen <corinna@vinschen.de>
-
- * mkgroup.c (print_special_by_sid): Rename from print_special. Change
- calls throughout.
- (print_special_by_name): New function.
- (main): Call print_special_by_name for TrustedInstaller account.
- * mkpasswd.c (print_special_by_sid): Rename from print_special. Change
- calls throughout.
- (print_special_by_name): New function.
- (enum_std_accounts): Call print_special_by_name for TrustedInstaller
- account.
-
-2012-02-24 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * pldd.c: Fix typo in license header.
-
-2012-02-24 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * Makefile.in (CYGWIN_BINS): Add pldd.
- (pldd.exe): Add -lpsapi to ALL_LDFLAGS.
- * pldd.c: New file.
- * utils.sgml (pldd): New section.
-
-2012-02-09 Corinna Vinschen <corinna@vinschen.de>
-
- * passwd.cc: Add -v option to print version information as well, since
- it's used in older csih.
-
-2012-02-04 Corinna Vinschen <corinna@vinschen.de>
-
- * utils.sgml: Fix typos.
-
-2012-01-31 Christopher Faylor <me.cygwin2012@cgf.cx>
-
- * strace.cc (proc_child): Don't right-shift exit value.
- (main): Call ExitProcess() to exit exactly the same way as any straced
- child.
-
-2012-01-29 Corinna Vinschen <corinna@vinschen.de>
-
- * tzset.c: Throughout use wide characters to be locale agnostic.
- (main): Call setlocale.
-
-2012-01-29 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (CYGWIN_BINS): Add tzset.
- * tzset.c: New tool, new file.
- * utils.sgml (tzset): New section.
-
-2012-01-24 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * ldd.cc (start_process): Handle .oct and .so as DLLs.
-
-2011-12-22 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (ps.exe): Revert previous change.
- * ps.cc: Include psapi.h again.
- (main): In CW_GETPINFO_FULL case. Evaluate minimal process access mask
- required per OS and use that in OpenProcess call. Use
- GetModuleFileNameExW on Windows 2000 or if fetching the drive mapping
- failed. Handle empty process name.
-
-2011-12-22 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (ps.exe): Drop -lpsapi from ALL_LDFLAGS.
- * ps.cc: Don't include psapi.h.
- (dosdevs): Drop.
- (unicode_buf): Define.
- (main): Simplify path evaluation in CW_GETPINFO_FULL case. Fetch drive
- map from Cygwin DLL. Use it to convert NT device paths to Win32 paths.
-
-2011-12-02 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (cygpath.exe): Add -luserenv to ALL_LDFLAGS.
- * cygpath.cc: Throughout, use cygwin_conv_path WIN_W rather than WIN_A
- conversion.
- (get_long_path_name_w32impl): Remove.
- (get_long_name): Drop pre-Windows 2000 accommodations. Just call
- GetLongPathNameW here directly.
- (get_special_folder): Convert first parameter to WCHAR buffer pointer.
- Drop conversion of result from WCHAR * to char *.
- (do_sysfolders): Accommodate change to get_special_folder and only
- convert result to char * last. Drop pre-Windows 2000 accommodations
- and just call GetProfilesDirectoryW directly. Replace call to
- GetWindowsDirectoryW with call to GetSystemWindowsDirectoryW.
- Just call GetShortPathNameW directly.
- (do_pathconv): Simplify buffer handling.
-
-2011-12-01 Corinna Vinschen <corinna@vinschen.de>
-
- * mkgroup.c: Drop support for NT4 domains.
- * mkpasswd.c: Ditto.
- (psx_dir): Remove.
- (current_user): Drop support for -m option. Use $HOME as is since it's
- a POSIX path anyway.
- (enum_users): Drop support for -m option.
- (usage): Mention -m option as ignored.
- (main): Drop support for -m option. Mark ignored options as deprecated.
- * utils.sgml (mkpasswd): Remove description of -m option.
-
-2011-11-28 Corinna Vinschen <corinna@vinschen.de>
-
- * locale.cc (print_locale_with_codeset): Fetch Windows path as UNICODE
- path and convert that to POSIX.
-
-2011-11-28 Corinna Vinschen <corinna@vinschen.de>
-
- * ps.cc: Remove all Win 9x considerations. Use psapi functions
- directly. Drop support for older Cygwin DLLs. Just use progname_long
- as is since it's already a POSIX path now. Rename "tty" to "pty" as in
- the Cygwin DLL. Call setlocale to make sure wcstombs does the right
- thing according to the current locale.
- * Makefile.in (ps.exe): Link against psapi.dll.
-
-2011-11-24 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * strace.cc (attach_process): Use NT_SUCCESS to figure out if
- NtSetInformationProcess succeeded.
- (handle_output_debug_string): Put back DebugActiveProcess since it
- seems to still be needed (on my system at least). Detect new format
- _STRACE_INTERFACE_ACTIVATE_ADDR which informs whether this is a forked
- process or not. Use that to decide if forkdebug should be handled.
-
-2011-11-14 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * strace.cc (handle_output_debug_string): Disable code which attempted
- to add stuff in between '****' blocks since they no longer are the
- first thing output by an straced process.
-
-2011-10-13 Corinna Vinschen <corinna@vinschen.de>
-
- * cygcheck.cc (dump_sysinfo): Add Windows 8 recognition. Note as
- unsupported. Update products array.
-
-2011-10-11 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * utils.sgml (getconf): Expand documentation.
-
-2011-10-10 Corinna Vinschen <corinna@vinschen.de>
-
- * ldd.cc (VERSION): Remove.
-
-2011-10-10 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * ldd.cc: Update copyright.
-
-2011-10-10 Corinna Vinschen <corinna@vinschen.de>
-
- * Align usage output, version output, as well as usage and version
- option handling to use the same style throughout all Cygwin utils.
- Throughout use program_invocation_short_name to refer to current
- process name in Cygwin executables.
- * utils.sgml: Align documentation to above change. Add missing
- sections for getconf, ldd, and setmetamode.
- * strace.cc (proc_child): Avoid compiler warning.
-
-2011-10-10 Andy Koppe <andy.koppe@gmail.com>
- Corinna Vinschen <corinna@vinschen.de>
-
- * locale.cc (usage): Restructure, rephrase, add new options. Drop
- arguments, don't exit.
- (print_version): New function.
- (longopts): Add -f, -n, and -V options. Reorder.
- (opts): Add -f, -n, and -V options.
- (main): Call GetSystemDefaultUILanguage for -s option. Call
- GetUserDefaultUILanguage for -u option. Add -f and -n options and
- call GetUserDefaultLCID and GetSystemDefaultLCID respectively. Return
- 0 after calling usage in -h case. Add -V option and call print_version.
- Don't print full usage in default case, rather just a short help message
- similar to GNU tools.
- * utils.sgml (locale): Align to above changes. Rephrase description.
-
-2011-10-10 Corinna Vinschen <corinna@vinschen.de>
-
- * cygcheck.cc (check_keys): Use UNICODE Win32 functions.
-
-2011-09-12 Jon TURNEY <jon.turney@dronecode.org.uk>
-
- * strace.cc (attach_process): Try to turn off DEBUG_ONLY_THIS_PROCESS
- if Attaching to a process with the trace-children flag set.
- (handle_output_debug_string): Apparently we don't need to explicitly
- attach for debugging when a child process starts
- * Makefile.in (strace.exe): Link with ntdll
-
-2011-08-21 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * Makefile.in: Check for header file existence when building dumper.exe
- too.
-
-2011-08-10 Corinna Vinschen <corinna@vinschen.de>
-
- * ps.cc (main): Don't overwrite process name, just attach <defunct>
- to it for zombie processes.
-
-2011-07-19 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * Makefile.in (CYGWIN_BINS): Add getconf.
- (getconf.c): New file.
-
-2011-06-14 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * mingw: Force use of bash.
-
-2011-05-29 Christopher Faylor <me.cygwin2011@cgf.cx>
-
- * ps.cc (ttynam): Accommodate new console numbering.
- (main): Ditto.
-
-2011-05-03 Corinna Vinschen <corinna@vinschen.de>
-
- * locale.cc (print_locale_with_codeset): Align printing of locale names
- to POSIX.
-
-2011-04-18 Corinna Vinschen <corinna@vinschen.de>
-
- * setfacl.c (getaclentry): Allow extra colon in mask and other entries.
-
-2011-04-12 Jon TURNEY <jon.turney@dronecode.org.uk>
-
- * utils.sgml (strace): Fix a pair of exchanged lines in usage text.
-
-2011-04-04 Corinna Vinschen <corinna@vinschen.de>
-
- * passwd.c (main): Add the ability to specify a username for the -R
- command.
- * utils.sgml: Document the aforementioned change.
-
-2011-02-29 Corinna Vinschen <corinna@vinschen.de>
-
- * regtool.cc (cmd_set): Avoid a compiler warning.
-
-2011-02-29 Corinna Vinschen <corinna@vinschen.de>
-
- * cygcheck.cc (handle_unique_object_name): Avoid a compiler warning.
- (dump_sysinfo): Ditto.
- * loadlib.h (_load_sys_library): Mark as used, to avoid a compiler
- warning.
- * path.cc (oopt): Gurad with !FSTAB_ONLY to avoid a compiler warning.
- (read_flags): Ditto.
-
-2011-02-28 Corinna Vinschen <corinna@vinschen.de>
-
- * setfacl.c (strchrnul): Drop local implementation.
-
-2011-02-15 Corinna Vinschen <corinna@vinschen.de>
-
- * cygcheck.cc: Fix copyright dates.
-
-2011-01-10 Jon TURNEY <jon.turney@dronecode.org.uk>
-
- * cygcheck.cc (main): don't imply -d from -s option to cygcheck
-
-2010-12-11 Corinna Vinschen <corinna@vinschen.de>
-
- * setfacl.c (strchrnul): New function.
- (getaclentry): Rewrite.
-
-2010-12-06 Corinna Vinschen <corinna@vinschen.de>
-
- * cygpath.cc (get_device_name): Fix path length test.
-
-2010-10-30 Dmitry Potapov <dpotapov@gmail.com>
-
- * regtool.c (cmd_set): Write correct number of bytes for REG_MULTI_SZ
- case.
-
-2010-09-06 Corinna Vinschen <corinna@vinschen.de>
-
- * cygpath.cc (RtlEqualUnicodePathPrefix): New helper function.
- (HARDDISK_PREFIX): Move.
- (GLOBALROOT_PREFIX): Define.
- (get_device_name): Take GLOBALROOT_PREFIX into account.
- Improve check for path to allow filesystem access via block devices.
- Potentially drop \\.\ prefix if resulting path is a valid DOS
- pathname.
- (do_pathconv): Make sure to drop \\?\ prefix only if path is
- actually a filesystem based path.
- (print_version): Fix copyright.
-
-2010-08-28 Corinna Vinschen <corinna@vinschen.de>
-
- * ldh.cc (WinMain): Change DONT_RESOLVE_DLL_REFERENCES to
- LOAD_WITH_ALTERED_SEARCH_PATH.
-
-2010-08-28 Corinna Vinschen <corinna@vinschen.de>
-
- * loadlib.h: New header implementing safe LoadLibrary calls.
- Include throughout files using LoadLibrary function.
- * cygcheck.cc (dump_sysinfo): Retrieve kernel32.dll handle via
- GetModuleHandle, rather than using LoadLibrary.
- * cygpath.cc (get_long_name): Ditto.
- (do_sysfolders): Append .dll suffix in LoadLibrary call.
- * ldh.cc (WinMain): Use LoadLibraryExW with DONT_RESOLVE_DLL_REFERENCES
- to avoid loading malicious library code.
- * locale.cc (print_locale_with_codeset): Change way to retrieve
- kernel32.dll path.
-
-2010-08-26 Corinna Vinschen <corinna@vinschen.de>
-
- * cygpath.cc (get_device_name): Prefer the \\.\X: DOS device for
- harddisks, if available.
-
-2010-08-21 Corinna Vinschen <corinna@vinschen.de>
-
- * ldd.cc (report): Drop long pathname considerations which result in
- invalid path, now that this is done in cygwin_conv_path.
-
-2010-08-13 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (from_fstab): Fix potentially fatal typo.
-
-2010-08-11 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (do_mount): Don't treat "bind" mount as remote mount.
- (mount_entries): Drop the "bind" option from output.
- * utils.sgml (mount): Match examples to actual mount output. Add
- "bind" option and add example.
-
-2010-08-10 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * mingw: Use sysroot, if present, for mingw_dir.
-
-2010-07-21 Corinna Vinschen <corinna@vinschen.de>
-
- * dump_setup.cc (tfx_chars): New WCHAR array, copied from Cygwin.
- (transform_chars): New function, copied from Cygwin.
- (simple_nt_stat): New function to check file existance using native
- NT function. Explain why.
- (directory_exists): Call simple_nt_stat.
- (file_exists): Ditto.
-
-2010-07-05 Christopher Faylor <me+cygwin@cgf.cx>
-
- * ldd.cc: Clean up formatting throughout.
- (head): Move earlier.
- (saw_file): Ditto.
- (print_dlls): Reset head here. Record seen dll names so they will
- not potentially be printed later.
- (process_file): Remove clearing of head here.
-
-2010-07-05 Corinna Vinschen <corinna@vinschen.de>
-
- * dump_setup.cc (dump_file): Read requested content from setup.rc
- file created by newer setup.exe.
-
-2010-06-29 Corinna Vinschen <corinna@vinschen.de>
-
- * utils.sgml (locale): Change stray local cygdrive prefix to Cygwin's
- default.
-
-2010-04-29 Corinna Vinschen <corinna@vinschen.de>
-
- * utils.sgml (mount): Add description for "dos" and "ihash" mount
- options.
-
-2010-04-29 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc: Include sys/cygwin.h if built for mount(1).
- (struct opt): Add "dos" and "ihash" options.
- (from_fstab_line): Call cygwin_internal rather than read_flags if
- built for mount(1).
-
-2010-04-29 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (oopts): Remove entirely.
- (usage): Call cygwin_internal (CW_LST_MNT_OPTS) to create list of
- mount options.
- (print_version): Fix copyright date.
- (main): Replace option processing loop with single call to
- cygwin_internal (CW_CVT_MNT_OPTS).
-
-2010-04-28 Corinna Vinschen <corinna@vinschen.de>
-
- * locale.cc (print_lc_xxx_charset): Remove.
- (enum type_t): Change according to the fact that nl_langinfo now returns
- all locale category values.
- (lc_ctype_names): Add new category members. Redefine for exclusive
- nl_langinfo usage.
- (lc_numeric_names): Ditto.
- (lc_time_names): Ditto.
- (lc_collate_names): Ditto.
- (lc_monetary_names): Ditto.
- (lc_messages_names): Ditto.
- (print_lc): Change switch according to new type_t values.
-
-2010-03-27 Corinna Vinschen <corinna@vinschen.de>
-
- * locale.cc (print_charmaps): Add EUC-CN and GB2312.
-
-2010-03-24 Corinna Vinschen <corinna@vinschen.de>
-
- * regtool.cc (find_key): Fix allocation size of "value".
-
-2010-03-23 Corinna Vinschen <corinna@vinschen.de>
-
- * locale.cc (add_locale_alias_locales): Always use loc_num at function
- start to avoid confusing bsearch.
-
-2010-03-23 Corinna Vinschen <corinna@vinschen.de>
-
- * locale.cc: Revert accidental checkin of unfinished changes.
-
-2010-03-23 Corinna Vinschen <corinna@vinschen.de>
-
- * locale.cc (print_locale_with_codeset): Drop redundant name parameter.
- Simplify creating locale string. Add "@" in case of a modifier.
- (print_locale): Drop name parameter in calls to
- print_locale_with_codeset.
-
-2010-02-25 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * utils.sgml (kill): Add SIGIO, SIGCLD, and SIGPWR.
-
-2010-02-25 Corinna Vinschen <corinna@vinschen.de>
-
- * utils.sgml (locale): Change description of -a and -av to match
- latest changes.
-
-2010-02-23 Corinna Vinschen <corinna@vinschen.de>
-
- * locale.cc (printlocale): Remove.
- (loc_t): New type to keep locale information for printing.
- (print_codeset): New function to print codeset as on Linux.
- (print_locale_with_codeset): New function to print single locale.
- Print verbose style as the Linux locale(1) tool.
- (print_locale): New function to print single locale plus its UTF-8
- variation, if available.
- (compare_locales): New helper function for bsearch and qsort on loc_t.
- (add_locale): New function to store locale in loc_t array.
- (add_locale_alias_locales): New function to store locales from
- locale.alias file in loc_t.
- (print_all_locales): Call add_locale instead of printlocale.
- Call add_locale_alias_locales, sort locales alphabetically and print
- them.
-
-2010-02-22 Christopher Faylor <me+cygwin@cgf.cx>
-
- * strace.cc (mnemonic_table): Add "special" mask option.
- (usage): Document it.
- * utils.sgml: Ditto.
-
-2010-02-22 Corinna Vinschen <corinna@vinschen.de>
-
- * cygpath.cc (do_pathconv): Fix erroneously printing native NT path
- prefix introduced by previous patch.
-
-2010-02-22 Corinna Vinschen <corinna@vinschen.de>
-
- * locale.cc (lc_time_names): Add "date_fmt" entry.
-
-2010-02-19 Christopher Faylor <me+cygwin@cgf.cx>
-
- * strace.cc (mnemonic_table): Add pthread mask option.
- (usage): Document strace pthread mask option.
- * utils.sgml: Ditto.
-
-2010-02-19 Corinna Vinschen <corinna@vinschen.de>
-
- * locale.cc (print_lc_mstrings): New function to print
- semicolon-separated strings.
- (enum type_t): New type is_sepstrings_linf.
- (lc_time_names): Change type of era and alt_digits entry to
- is_sepstrings_linf.
- (print_lc): Add case for is_sepstrings_linf and call print_lc_mstrings
- in that case.
-
-2010-02-17 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (CYGWIN_BINS): Rename getlocale to locale.
- * getlocale.c: Rename to ...
- * locale.cc: Revamp to add full functionality of POSIX locale(1) tool,
- as far as Cygwin supports it.
- * utils.sgml (getlocale): Move and rename to ...
- (locale): Accommodate new functionality.
-
-2010-02-13 Ilguiz Latypov <ilatypov@infradead.org>
-
- * cygpath.cc (do_pathconv): Fix potential crash.
-
-2010-02-11 Corinna Vinschen <corinna@vinschen.de>
-
- * getlocale.c (main): Rename local variable to avoid problems.
- Avoid string comparisons, rather test language and sublanguage codes
- wheere possible. Add more code to handle Serbian language/territory
- state identical on all Windows versions. Fix handling for "@latin"
- modifier in Belarusian locale.
- * utils.sgml (getlocale): Try to make wording and example clearer.
-
-2010-02-10 Corinna Vinschen <corinna@vinschen.de>
-
- * getlocale.c (usage): Change text slightly.
-
-2010-02-10 Corinna Vinschen <corinna@vinschen.de>
-
- * getlocale.c (main): Restrict -a loop to avoid psudo language entries
- on Vista and later.
-
-2010-02-10 Corinna Vinschen <corinna@vinschen.de>
-
- * getlocale.c (main): Revamp -a loop to avoid duplicates and to print
- locales with the correct, supported modifiers.
-
-2010-01-25 Corinna Vinschen <corinna@vinschen.de>
-
- * getlocale.c (main): Use setlocale and fetch string from Windows
- using GetLocaleInfoW. Explain why.
-
-2010-01-22 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (CYGWIN_BINS): Add getlocale.
- * getlocale.c: New file.
- * utils.sgml (getlocale): New section describing new getlocale tool.
-
-2010-01-16 Corinna Vinschen <corinna@vinschen.de>
-
- * cygpath.cc (get_mixed_name): Drop function. Replace with call to
- convert_slashes throughout.
- (do_sysfolders): Free allocated buffer.
- (do_pathconv): Fix freeing last buffer.
-
-2010-01-11 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (do_mount_from_fstab): Allow to change cygdrive prefix, too.
-
-2010-01-07 Corinna Vinschen <corinna@vinschen.de>
-
- * cygpath.cc: Throughout, free obsolete path buffers.
-
-2010-01-07 Corinna Vinschen <corinna@vinschen.de>
-
- * cygpath.cc (main): Remove enforcing "en_US.UTF-8" locale.
- Revert usage of argz functions when reading input from file and
- simplify option usage. Allow only one option argument and use
- the rest as filename argument to allow spaces in filenames. Restrict
- processing special folder type options to one line.
-
-2009-12-17 Christopher Faylor <me+cygwin@cgf.cx>
-
- * ps.cc (main): Return 0 if pid found.
-
-2009-12-16 Corinna Vinschen <corinna@vinschen.de>
-
- * regtool.cc: Throughout, convert all registry calls to wide char
- calls and use string conversion according to current locale.
- (longopts): Change "dword-le" to "dword-be", as was originally
- intended.
- (usage): Change usage accordingly.
- (print_version): Simplify copyright dates in output.
- (cmd_list): Handle REG_LINK like REG_SZ.
- (cmd_get): Ditto.
- (main): Call setlocale.
- * utils.sgml (regtool): Fix options and add missing descriptions for
- new features.
-
-2009-11-29 Corinna Vinschen <corinna@vinschen.de>
-
- * setfacl.c (getaclentry): Allow to delete default entries for the
- owner and owner group.
-
-2009-11-27 Corinna Vinschen <corinna@vinschen.de>
-
- * cygcheck.cc (dump_sysinfo): Fix typo in products.
-
-2009-11-11 Corinna Vinschen <corinna@vinschen.de>
-
- * getfacl.c (print_version): Fix copyright.
- (main): Don't reuse local variables confusingly. Don't print any file
- information if acl() fails. Improve error message. Always print a
- trailing empty line. Set return code to 2 if accessing some file fails.
-
-2009-11-04 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (read_mounts): Skip unnecessary test if path has been
- fetched from loaded cygwin1.dll.
-
-2009-11-04 Corinna Vinschen <corinna@vinschen.de>
-
- * cygcheck.cc (cygwin_dll_path): New global variable.
- (load_cygwin): Fetch cygwin DLL path and store in cygwin_dll_path.
- * strace.cc: Full ditto.
- * path.cc (read_mounts): First use the path stored in cygwin_dll_path,
- if available. Then fall back to fetching own path. Add comment.
- Drop printing warnings since they look funny in strace output.
-
-2009-11-04 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (read_mounts): First get installation path from own path.
- Check if cygwin1.dll exists in same directory. Only if not, try to
- get installation path from setup registry key. Add ample warnings.
-
-2009-11-04 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (cygpath.exe): Add -fno-threadsafe-statics to CXXFLAGS.
-
-2009-10-31 Corinna Vinschen <corinna@vinschen.de>
-
- * cygcheck.cc: Include cygprops.h.
- (del_orphaned_reg): New option variable.
- (unique_object_name_opt): Ditto.
- (handle_reg_installation): New function.
- (print_reg_installations): Ditto.
- (del_orphaned_reg_installations): Ditto.
- (memmem): Ditto.
- (handle_unique_object_name): Ditto.
- (dump_sysinfo): Call print_reg_installations from here.
- (usage): Add usage for new options --delete-orphaned-installation-keys,
- --enable-unique-object-names, --disable-unique-object-names, and
- --show-unique-object-names.
- (longopts): Add new options --delete-orphaned-installation-keys,
- --enable-unique-object-names, --disable-unique-object-names, and
- --show-unique-object-names.
- (main): Handle new options.
- * utils.sgml (cygcheck): Change documentaion accordingly.
-
-2009-10-28 Corinna Vinschen <corinna@vinschen.de>
-
- * cygcheck.cc (pretty_id): Drop arguments. Don't change CYGWIN
- environment variable.
- (dump_sysinfo): Don't tweak CYGWIN environment variable, just call
- pretty_id once.
-
-2009-10-20 Corinna Vinschen <corinna@vinschen.de>
-
- * cygcheck.cc (dump_sysinfo): Update with latest NT 6.1 versions.
-
-2009-10-15 Corinna Vinschen <corinna@vinschen.de>
-
- * cygpath.cc (get_special_folder): Fetch path as WCHAR and convert
- using my_wcstombs.
- (get_user_folder): Remove.
- (do_sysfolders): Use get_special_folder instead of get_user_folder.
- Fetch system paths as WCHAR and convert using my_wcstombs.
-
-2009-10-12 Corinna Vinschen <corinna@vinschen.de>
-
- * kill.cc (main): Skip to PID loop on invalid option to handle
- negative pids there.
-
-2009-08-11 Corinna Vinschen <corinna@vinschen.de>
-
- * mkgroup.c (enum_local_groups): Avoid error message if given group
- name isn't found and return 0 to allow searching to proceed. Always
- return 0 or 1, not -1.
- (enum_groups): Avoid error message if given group name isn't found.
- * mkpasswd.c (enum_users): Ditto.
-
-2009-08-10 Dave Korn <dave.korn.cygwin@gmail.com>
-
- * mingw: Add fallbacks to search for MinGW components in standard
- install locations if not found in compiler's $prefix.
-
-2009-08-09 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (do_mount): Don't exit, just return.
-
-2009-07-23 Corinna Vinschen <corinna@vinschen.de>
-
- * cygcheck.cc (dump_sysinfo): Add missing "Server Foundation" to
- products array.
-
-2009-07-22 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (do_mount): Replace --no-executable flag with notexec
- mount option in hint for remote filesystems.
- * path.cc (getmntent): Fix typo (noexec -> notexec).
-
-2009-07-22 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (path-mount.o): Add a rule to build stripped down version
- of path.cc for usage in mount.
- (mount.exe): Add dependency to path-mount.o.
- * mount.cc (force): Convert to bool value. Accommodate throughout.
- (from_fstab): New function.
- (do_mount_from_fstab): New function.
- (longopts): Add --all option.
- (opts): Add -a option.
- (usage): Document -a/--all option.
- (main): Handle -a option as well as single parameter.
- * path.cc: Add FSTAB_ONLY conditional to allow building path-mount.o.
- (mount_table): Remove static storage class.
- (max_mount_entry): Ditto.
- (root_here): Unused. Remove.
- (from_fstab_line): Remove static.
- * path.h (struct mnt_t): Define here rather than in path.cc.
- (from_fstab_line): Declare.
- (mount_table): Declare.
- (max_mount_entry): Declare.
- * utils.sgml (mount): Document -a/--all option and mounting of single
- path from fstab files.
-
-2009-07-15 Corinna Vinschen <corinna@vinschen.de>
-
- * strace.cc (main): Open trace output file in UNIX mode.
-
-2009-07-13 Corinna Vinschen <corinna@vinschen.de>
-
- * cygcheck.cc (dump_sysinfo): Remove "not yet supported" text.
-
-2009-07-04 Christopher Faylor <me+cygwin@cgf.cx>
-
- * cygwin-console-helper.cc: New file.
-
-2009-06-10 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (oopts): Sort alphabetically, add missing "auto" and
- "override" entries.
- (from_fstab_line): Handle mount points same as Cygwin itself. Use
- "cygdrive prefix" as posix name of cygdrive prefix.
- (from_fstab): Add auto entries for /usr/bin and /usr/lib. Add
- MOUNT_AUTOMATIC and MOUNT_IMMUTABLE flags to default root dir entry.
- Use "cygdrive prefix" as posix name of default cygdrive prefix.
- (getmntent): Allocate smaller buffers. Align output closer to output
- of mount(1).
-
-2009-05-17 Corinna Vinschen <corinna@vinschen.de>
-
- * cygpath.cc (codepage): New variable.
- (long_options): Add --codepage option.
- (options): Add -C option.
- (usage): Add -C/--codepage description.
- (my_wcstombs): New function. Use througout instead of wcstombs.
- (do_options): Handle -C/--codepage option.
- * utils.sgml (cygpath): Add description for new -C/--codepage option.
-
-2009-05-16 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (cygpath.exe): Link against cygwin.a before linking
- against ntdll.dll to avoid linking symbols defined in both DLLs
- from ntdll.
- (ps.exe): Ditto.
-
-2009-05-15 Corinna Vinschen <corinna@vinschen.de>
-
- * cygpath.cc (main): Only setlocale for LC_CTYPE category. Fallback
- to UTF-8 if locale is "C".
- * ldd.cc (main): Ditto.
- * mkgroup.c (main): Ditto.
- * mkpasswd.c (main): Ditto.
- * passwd.c (main): Ditto.
-
-2009-05-13 Corinna Vinschen <corinna@vinschen.de>
- Christopher Faylor <me+cygwin@cgf.cx>
-
- * mount.cc (oopts): Sort. Add override option. Add dummy "auto"
- option for consistency.
- (mount_entries): Avoid adding auto-mounted entries to -m output.
-
- * utils.sgml: Sort mount options. Add description of override option.
-
-2009-05-11 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in: Link ps.exe agains ntdll.dll.
- * ps.cc (main): Enable SE_DEBUG_NAME privilege if Windows processes
- have to be enumerated. Workaround EnumProcessModules problem when
- running under WOW64 and use NtQueryInformationProcess to fetch
- process image name.
-
-2009-05-06 Corinna Vinschen <corinna@vinschen.de>
-
- * mkpasswd.c (current_user): Don't use HOMEDRIVE/HOMEPATH to generate
- user's homedir.
-
- * mkgroup.c: Accommodate ctype changes.
- * mkpasswd.c: Ditto.
- * setfacl.c: Ditto.
- * ssp.c: Ditto.
-
-2009-05-04 Christopher Faylor <me+cygwin@cgf.cx>
-
- * cygcheck.cc (find_app_on_path): Avoid using NULL pointer if
- find_on_path doesn't find the app on the path.
-
-2009-05-04 Corinna Vinschen <corinna@vinschen.de>
-
- * cygcheck.cc (usage): Fix option order and print.
-
-2009-04-22 Christopher Faylor <me+cygwin@cgf.cx>
-
- * strace.cc (create_child): Set CYGWIN=noglob when starting new process
- so that Cygwin will leave already-parsed the command line alonw.
-
-2009-04-15 Corinna Vinschen <corinna@vinschen.de>
-
- * cygpath.cc (do_pathconv): Only skip \\?\ prefix if it's really
- given. Do backslash to slash conversion for mixed paths after
- handling \\?\ prefix.
-
-2009-04-13 Dave Korn <dave.korn.cygwin@gmail.com>
-
- * Makefile.in (dumper.exe): Add -lz to ALL_LDFLAGS.
-
-2009-04-07 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (readlink): Accommodate new UTF-16 symlinks.
-
-2009-04-03 Kevin Buettner <kevinb@redhat.com>
-
- * utils.sgml: Various syntactical and semantical fixes.
- * cygcheck.cc (usage): Fix --find-package explanation.
-
-2009-03-26 Yaakov Selkowitz <yselkowitz@cygwin.com>
-
- * utils.sgml (passwd -R): Remove references to CYGWIN="server".
-
-2009-03-24 Corinna Vinschen <corinna@vinschen.de>
-
- * cygcheck.cc (dump_sysinfo): Fix compiler warning in printf.
- * strace.cc (proc_child): Ditto.
- * ldd.cc: Remove now useless undef wcscasecmp.
-
-2009-03-23 Corinna Vinschen <corinna@vinschen.de>
-
- * passwd.c (usage): Change description for -d option according to
- previous change.
- (main): Fix typo.
- * utils.sgml: Add missing description for passwd -d option.
-
-2009-03-23 Corinna Vinschen <corinna@vinschen.de>
-
- * passwd.c (caller_is_admin): New function to test if calling user
- is an administrator by inspecting user token.
- (main): Drop fetching caller info from logonserver. Only fetch
- server from environment when trying to change password for own
- account. Drop admin check entirely in case of doing account
- maintainance. Otherwise replace check for admin by result of
- caller_is_admin call.
-
-2009-03-22 Corinna Vinschen <corinna@vinschen.de>
-
- * passwd.c (main): Always get logonserver from environment and
- use when fetching user info for caller.
-
-2009-03-22 Corinna Vinschen <corinna@vinschen.de>
-
- * ldd.cc: Fix compiler warning.
-
- * passwd.c: Use mbstowcs instead of MultiByteToWideChar throughout.
- (main): Call setlocale. Fix a bug in fetching the logon server from
- the environment.
-
-2009-03-18 Christopher Faylor <me+cygwin@cgf.cx>
-
- * ldh.cc: New file.
-
-2009-03-17 Christopher Faylor <me+cygwin@cgf.cx>
-
- * ldd.cc (load_dll): Start helper program rather than ldd.exe.
- (set_entry_point_break): Rename from get_entry_point.
- (print_dlls): Rename from print_dlls_and_kill_inferior. Avoid printing
- specific dll name if we're looking at a dll.
- (report): Always dump dlls on process exit. Don't allow thread
- creation. Accommodate get_entry_point rename.
- (start_process): Start process with DEBUG_ONLY_THIS_PROCESS.
- (longopts): Eliminate "dll" option.
- (main): Ditto.
-
-2009-03-17 Corinna Vinschen <corinna@vinschen.de>
- Christopher Faylor <me+cygwin@cgf.cx>
-
- * ldd.cc: Use wide character Win32 paths throughout.
- (load_dll): Fix size expression (add fn) in realloc.
-
-2009-03-14 Christopher Faylor <me+cygwin@cgf.cx>
-
- * ldd.cc (longopts): Add --dll option.
- (get_module_filename): Generalized wrapper function which avoid path
- length restrictions.
- (load_dll): Handle special-case of inspecting a DLL.
- (start_process): Accept an output parameter "isdll". Detect when file
- to start is a DLL and start a wrapper instead.
- (print_dlls_and_kill_inferior): When dealing with a DLL, avoid printing
- everything before the DLL itself first appears. (This is not strictly
- correct and should be fixed eventually)
- (report): Deal with DLLs. Don't set a breakpoint for DLLs, just let
- captive ldd process terminate normally. Pass dll info to
- print_dlls_and_kill_inferior.
- (main): Handle special-case "--dll" option by loading the DLL and
- exiting.
-
-2009-03-14 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (from_fstab): Use wcstombs/mbstowcs instead of
- WideCharToMultiByte/MultiByteToWideChar to accommodate current locale.
-
-2009-03-14 Corinna Vinschen <corinna@vinschen.de>
-
- * wide_path.h (class wide_path): New class to convert Windows path
- to WCHAR win32 path, including long path conversion if necessary.
- * cygcheck.cc: Use class wide_path throughout to call Win32 functions
- taking potentially long filenames.
- (display_error): Use snprintf rather than sprintf.
- (display_error_fmt): Ditto.
- (dump_sysinfo): Use FindFirstFileW/FindNextFileW.
- * cygpath.cc: Use class wide_path throughout to call Win32 functions
- taking potentially long filenames.
- (get_device_name): Raise buffer size to take long pathnames.
- (get_short_paths): Convert to using GetShortPathNameW.
- (get_short_name): Ditto.
- (get_long_path_name_w32impl): Convert to equivalent of GetLongPathNameW.
- (get_long_name): Convert to using GetLongPathNameW.
- (do_sysfolders): Raise buffer size for POSIX pathname to PATH_MAX.
- (do_pathconv): In case of POSIX->Win32 conversion, convert to wchar_t
- Win32 path name and drop long pathname prefix if possible.
- (main): Call setlocale to accommodate wide char/multibyte conversions.
-
-2009-03-14 Christopher Faylor <me+cygwin@cgf.cx>
-
- * ldd.cc: Rework to detect missing DLLs.
- (start_process): Change to expect windows filename as input.
- (tocyg): New function - convert cygwin fn to windows fn.
- (print_dlls_and_kill_inferior): Accept extra argument denoting whether
- to open input and look for nonexistent DLLs. Use tocyg to convert
- filename and pass it to start_process.
- (report): Flag when an DLL-not-found exception occurs and pass this
- information to print_dlls_and_kill_inferior.
- (filelist): New structure.
- (saw_file): New function.
- (dump_import_directory): Ditto.
- (map_file): Ditto.
- (skip_dos_stub): Ditto.
- (get_directory_index): Ditto.
- (process_file): Ditto.
-
-2009-03-09 Corinna Vinschen <corinna@vinschen.de>
-
- * utils.sgml: Fix typo.
-
-2009-03-08 Christopher Faylor <me+cygwin@cgf.cx>
-
- * cygcheck.cc (usage): Fix typo.
-
-2009-03-02 Corinna Vinschen <corinna@vinschen.de>
-
- * utils.sgml: Set example prompt to "$" throughout. Don't use "/"
- as example cygdrive prefix. Remove reference to -u and -s options.
- Add an example using the -o flag.
-
-2009-03-02 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (mount_entries): Handle a "/" cygdrive prefix correctly.
- Add comments.
-
-2009-02-23 Sjors Gielen <mailinglist@dazjorz.com>
-
- * Makefile.in: Add DESTDIR functionality.
-
-2009-01-29 Corinna Vinschen <corinna@vinschen.de>
-
- * cygcheck.cc (dump_sysinfo): Evaluate and print state of
- obcaseinsensitive kernel flag.
-
-2009-01-21 Corinna Vinschen <corinna@vinschen.de>
-
- * passwd.c: Remove CYGWIN=server requirement from usage text.
-
-2009-01-17 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in: Fix copyright date.
- * cygcheck.cc (scan_registry): Take additional parameter and add code
- to avoid recursion in Wow6432Node subkey. Rename variable cygnus to
- cygwin. Scan for "Cygwin" instead of for "cygnus" substring.
- (dump_sysinfo): Drop unused calls to scan_registry. Drop scanning
- HKEY_CURRENT_CONFIG.
-
-2009-01-16 Corinna Vinschen <corinna@vinschen.de>
-
- * cygcheck.cc (dump_sysinfo): Raise size of osname. Add Windows 7
- and Windows 2008 R2 as recognized OSes. Update products array to
- the latest documented list.
-
-2009-01-09 Christopher Faylor <me+cygwin@cgf.cx>
-
- * ldd.cc: New file. First stab at implementing ldd-like functionality
- for Cygwin.
- * Makefile.in (CYGWIN_BINS): Add ldd.
- (ldd.exe): Use -lpsapi.
-
-2009-01-05 Pierre Humblet <Pierre.Humblet@ieee.org>
-
- * cygcheck.cc (dump_sysinfo_services): Quote the path for popen.
-
-2008-12-30 Pierre Humblet <Pierre.Humblet@ieee.org>
-
- * cygcheck.cc (pretty_id): Quote the path for popen.
- (dump_sysinfo_services): Ditto.
-
-2008-12-16 Corinna Vinschen <corinna@vinschen.de>
-
- * utils.sgml: Fix typo in passwd screen text.
-
-2008-12-15 Corinna Vinschen <corinna@vinschen.de>
-
- * passwd.c (main): Put how to delete the registry password on its own
- line in passwd -R output.
-
-2008-12-13 Christopher Faylor <me+cygwin@cgf.cx>
-
- * utils.sgml: Convert some backslashes to slashes.
-
-2008-11-26 Corinna Vinschen <corinna@vinschen.de>
-
- * passwd.c (longopts): Add --reg-store-pwd option.
- (opts): Add -R option.
- (usage): Add text for -R/--reg-store-pwd option.
- (main): Fix size of local user and password string arrays.
- Handle -R option.
- * utils.sgml: Add text for passwd -R/--reg-store-pwd option.
-
-2008-10-29 Christopher Faylor <me+cygwin@cgf.cx>
-
- * Makefile.in (ALL_LDFLAGS): Link libgcc statically for everything
- here.
-
-2008-10-12 Christopher Faylor <me+cygwin@cgf.cx>
-
- * mingw: Set sawcfile when -xc* is detected. Extend list of detected
- source files.
-
-2008-10-12 Christopher Faylor <me+cygwin@cgf.cx>
-
- * mingw: Add more checks to allow more varied use.
-
-2008-10-11 Christopher Faylor <me+cygwin@cgf.cx>
-
- * mingw: Use a better method to find where mingw directory lives.
-
-2008-10-11 Christopher Faylor <me+cygwin@cgf.cx>
-
- * mingw: New front-end script to control building of MinGW files
- without using the deprecated -mno-cygwin option.
- * Makefile.in: Use mingw front-end.
-
-2008-09-12 Christopher Faylor <me+cygwin@cgf.cx>
-
- * cygcheck.cc (pathlike::check_existence): Remove class name from
- declaration.
- (display_internet_error): Use proper format specifier for DWORD.
- (environ): Remove unneeded declaration.
- (main): Use brace around nested if to avoid an overly-helpful compiler
- warning.
- * dump_setup.cc (parse_filename): Reorganize nested if to avoid an
- overly-helpful compiler warning.
- * path.cc (GUID_shortcut): Use braces around part of initializer which
- needs them.
- (conv_fstab_spaces): Parenthesize assignment in while loop to avoid a
- compiler warning.
- (struct opt): Make static.
- * ps.cc (main): Reorganize nested if to avoid an overly-helpful
- compiler warning.
- * regtool.cc: Make some anonymous structs static to avoid a compiler
- warning.
- * ssp.c (lookup_thread_id): Initialize *tix to zero to avoid potential
- uninitialized use.
- * strace.cc (add_child): Use proper format specifier for DWORD.
- (remove_child): Ditto.
- (proc_child): Ditto.
-
-2008-08-27 Christopher Faylor <me+cygwin@cgf.cx>
-
- * cygcheck.cc (nuke): Use malloc rather than alloca for environment
- variables.
- (load_cygwin): Ditto.
- * dump_setup.cc (parse_filename): Cosmetic changes.
- (get_packages): Ditto.
-
-2008-08-25 Corinna Vinschen <corinna@vinschen.de>
-
- * mkgroup.c (enum_local_groups): Don't skip printing groups when
- print_current is set and group SID is not curr_pgrp.
- (enum_groups): Ditto.
- (main): Fix condition when SYSTEM group gets printed.
- * mkpasswd.c (enum_users): Don't skip printing users when print_current
- is set and user SID is not curr_user.
- (main): Allow printing standard accounts even when print_current is set.
-
-2008-08-18 Corinna Vinschen <corinna@vinschen.de>
-
- * mkgroup.c (enum_local_groups): Use NetLocalGroupGetInfo to find out
- if a group exists, rather than just allocating a buffer and going ahead.
-
-2008-08-18 Corinna Vinschen <corinna@vinschen.de>
-
- * mkgroup.c (enum_local_groups): Call print_win_error with GetLastError
- as argument when LookupAccountXXX failed.
- (enum_groups): Ditto.
-
-2008-08-18 Corinna Vinschen <corinna@vinschen.de>
-
- * mkgroup.c (enum_local_groups): Return failure if looking for a single
- group succeeded. Add comment.
-
-2008-08-18 Corinna Vinschen <corinna@vinschen.de>
-
- * mkgroup.c (main): Keep correctly track of optional arguments.
- * mkpasswd.c (main): Ditto.
-
-2008-08-18 Corinna Vinschen <corinna@vinschen.de>
-
- * mkgroup.c (main): Always unset environment variable POSIXLY_CORRECT.
- Keep track of optional argumnts and fix up optind afterwards.
- * mkpasswd.c (main): Ditto.
-
-2008-08-17 Christopher Faylor <me+cygwin@cgf.cx>
-
- * cygcheck.cc (print_version): Update copyright dates.
-
-2008-08-17 Christopher Faylor <me+cygwin@cgf.cx>
-
- * mkpasswd.c (main): Avoid printing system accounts when a single user
- name has been requested.
-
-2008-08-17 Christopher Faylor <me+cygwin@cgf.cx>
-
- * Makefile.in (ALL_LDFLAGS): Add --enable-auto-import option to quiet
- ld warnings.
- * mkgroup.c: Change all global variables and most functions to static.
- (enum_local_groups): Add a print_current parameter to control whether
- entries for everything should be printed or just the current user.
- (enum_groups): Ditto.
- (main): Move call fetch_current_pgrp_sid earlier to avoid a NULL
- deference when no command line arguments are specified. Accommodate
- argument changes to above functions. Avoid printing SYSTEM account
- when print_current is specified. Issue error when extra stuff is found
- on the command line.
- * mkpasswd.c: Change all global variables and most functions to static.
- (enum_users): Add a print_current parameter to control whether entries
- for everything should be printed or just the current user.
- (main): Move call fetch_current_user_sid earlier to avoid a NULL
- deference when no command line arguments are specified. Accommodate
- argument change to above function. Avoid printing standard accounts
- when print_current is specified. Issue error when extra stuff is found
- on the command line.
-
-2008-08-15 Corinna Vinschen <corinna@vinschen.de>
-
- * mkgroup.c (fetch_current_pgrp_sid): New function to fetch primary
- group SID from user token.
- (current_group): Move up in file. Move fetching primary group SID to
- fetch_current_pgrp_sid.
- (enum_local_groups): Check if current SID is the same as current user's
- primary group SID.
- (enum_groups): Ditto.
- (main): Call fetch_current_pgrp_sid before enumerating groups. Call
- current_group only if current group hasn't been enumerated already.
- * mkpasswd.c (fetch_current_user_sid): New function to fetch current
- user SID from user token.
- (current_user): Move fetching current user SID to
- fetch_current_user_sid.
- (enum_users): Check if current SID is the same as current user's SID.
- (main): Call fetch_current_user_sid before enumerating users. Call
- current_user only if current user hasn't been enumerated already.
-
-2008-08-13 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (NT_MAX_PATH): Define.
- (longopts): Rename mount-commands option to mount-entries.
- (opts): Remove removed options.
- (struct opt): Move up in file to allow using it in usage.
- (usage): Change text for --mount-entries option. Remove
- -X option. Add valid options output.
- (main): Remove handling -b option.
- (convert_spaces): New static function to convert spaces to "\040"
- string.
- (mount_entries): Renamed from mount_commands. Rewrite to emit
- /etc/fstab compatible output.
- (show_cygdrive_info): Print "nouser" rather than "system".
- * umount.cc (longopts): Remove remove-all-mounts,
- remove-cygdrive-prefix, remove-system-mounts, system and user options.
- (opts): Remove A, c, s, S, u options.
- (usage): Remove text for all removed options.
- (main): Remove handling for all removed options.
- (remove_all_mounts): Remove.
- (remove_all_system_mounts): Remove.
- (remove_cygdrive_prefix): Remove.
- * utils.sgml: Fix mount and umount documentation. Move description
- of (cyg,not)exec options to mount table section.
-
-2008-08-04 Christopher Faylor <me+cygwin@cgf.cx>
-
- * cygcheck.cc (load_cygwin): Duplicate argv list since it disappears
- when cygwin1.dll is unloaded.
-
-2008-07-30 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- * Makefile.in: Link cygcheck with -lntdll even without mingw-zlib.
-
-2008-07-27 Christopher Faylor <me+cygwin@cgf.cx>
-
- * cygcheck.cc (load_cygwin): Free the cygwin dll after we're done with
- it.
-
-2008-07-25 Christopher Faylor <me+cygwin@cgf.cx>
-
- * mount.cc: Remove non-unix-like options (-x,-t,b) throughout.
- (oopts): Use boolean constants for slightly increased clarity.
-
- * configure.in: Remove apparently unneeded program_transfer_name code.
- * configure: Regenerate.
-
-2008-07-24 Corinna Vinschen <corinna@vinschen.de>
-
- * utils.sgml: Remove useless text.
-
-2008-07-23 Corinna Vinschen <corinna@vinschen.de>
-
- * mkgroup.c (main): Fix test for duplicate domain/machine request.
- * mkpasswd.c (main): Ditto.
-
-2008-07-23 Corinna Vinschen <corinna@vinschen.de>
-
- * mkgroup.c: Rework to allow per-domain/per-machine id_offset.
- Add -b option to skip builtin groups.
- (main): Simplify code.
- * mkpasswd.c: Rework to allow per-domain/per-machine id_offset.
- (main): Simplify code.
- * utils.sgml: Explain changed mkgroup/mkpasswd -d/-D/-l/-L options.
- Add mkgroup -b option.
-
-2008-07-23 Corinna Vinschen <corinna@vinschen.de>
-
- * mkgroup.c: Consolidate variable names.
- (enum_unix_groups): New function.
- (print_special): Use LookupAccountSidW instead of LookupAccountSidA.
- (current_group): Ditto.
- (usage): Add -U option.
- (longopts): Add --unix option.
- (opts): Add -U option.
- (main): Handle -U option. Call enum_unix_groups if set.
- * mkpasswd.c: Consolidate variable names.
- (current_user): Use LookupAccountSidW instead of LookupAccountSidA.
- (enum_unix_users): New function.
- (usage): Add -U option.
- (longopts): Add --unix option.
- (opts): Add -U option.
- (main): Handle -U option. Call enum_unix_groups if set.
- * utils.sgml: Add -U option text to mkgroup and mkpasswd description.
-
-2008-07-22 Corinna Vinschen <corinna@vinschen.de>
-
- * mkgroup.c (enum_groups): Create full qualified groupname using
- domain or servername, depending on printing domain or machine accounts.
- * mkpasswd.c (enum_users): Ditto for users.
-
-2008-07-22 Corinna Vinschen <corinna@vinschen.de>
-
- * mkgroup.c (main): Remove special root group code. Only print
- SYSTEM group in case of printing local machine or local domain groups.
-
-2008-07-22 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (cygcheck.exe): Link against ntdll.
- * bloda.cc: Use statically linked functions throughout.
- * cygpath.cc: Drop 9x considerations.
- * mkgroup.c: Revamp. Redefine -l and -d options to take optional
- machine and domain parameters. Redefine -c to work always, using
- token information. Add -L, -D, -C to create unique groupnames in
- domain\group syntax. Add -S option to define domain\group separator
- char. Ignore -u and -s options.
- * mkpasswd.c: Revamp. Redefine -l and -d options to take optional
- machine and domain parameters. Redefine -c to work always, using
- token information. Add -L, -D, -C to create unique usernames in
- domain\user syntax. Add -S option to define domain\user separator
- char. Ignore -g and -s options. Prefer to take homedir from $HOME
- over $HOMEDRIVE/$HOMEPATH.
- * path.cc (oopts): Add "acl", "noacl", "posix=0" and "posix=1" options.
- (getmntent): Accomodate throughout.
- * ps.cc: Fix copyright dates.
- * utils.sgml: Fix text for mkgroup and mkpasswd.
-
-2008-07-17 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (do_mount): Remove MOUNT_ENC code.
- (oopts): Remove "managed" option.
- (mount_commands): Drop "managed" handling.
- * path.cc (oopts): Remove "managed" option.
- (getmntent): Remove MOUNT_ENC code.
-
-2008-07-17 Corinna Vinschen <corinna@vinschen.de>
-
- * utils.sgml: Add id's to all examples.
-
-2008-07-09 Corinna Vinschen <corinna@vinschen.de>
-
- * mkgroup.c: Use statically linked functions throughout, except for
- DsGetDcNameW. Reformat. Convert to use WCHAR for names throughout.
- Use defines instead of constants throughout.
- (MAX_SID_LEN): Define.
- (load_netapi): Just load DsGetDcNameW pointer.
- (psx_dir): Remove.
- (uni2ansi): Remove.
- (enum_local_users): Take server name and use in Net... call.
- (DBGSID): Define datastructure.
- (MAX_BUILTIN_SIDS): Define.
- (builtin_sid_list): Define global sid list.
- (builtin_sid_cnt): Define counter for global sid list.
- (enum_local_groups): Take server name and use in Net... and Lookup...
- calls. Take offset argument. Use MAX_PREFERRED_LENGTH in call to
- NetLocalGroupEnum. Check for duplicate builtin groups.
- (enum_users): Take server name and use in Net... call.
- (usage): Change text slightly.
- (print_version): Fix copyright.
- (main): Call enum_local_groups for domains as well.
- * mkpasswd.c: Use statically linked functions throughout, except for
- DsGetDcNameW. Reformat. Convert to use WCHAR for names throughout.
- Use defines instead of constants throughout.
- (MAX_SID_LEN): Define.
- (load_netapi): Just load DsGetDcNameW pointer.
- (uni2ansi): Use wcstombs.
- (current_user): Replace "unused_by_nt/2000/xp" by
- just "unused".
- (enum_users): Ditto.
- (print_version): Fix copyright.
-
-2008-05-22 Corinna Vinschen <corinna@vinschen.de>
-
- * setfacl.c (setfacl): Change from void to int. Return 2 in case of
- error.
- (main): Return with error code from setfacl.
-
-2008-05-15 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (CYGWIN_BINS): Remove ipcrm and ipcs.
- * ipcrm.c: Remove.
- * ipcs.c: Remove.
-
-2008-03-23 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (usage): Mark -s and -u as ignored.
- (print_version): Simplify printing copyright dates.
- (main): Remove default_flag. Dont set flags on -s and -u options.
- (mount_commands): Drop handling -s and -u options.
-
-2008-03-22 Corinna Vinschen <corinna@vinschen.de>
-
- * cygcheck.cc (dump_sysinfo): Fix multiple Cygwin DLL test.
- * path.cc: Fetch mount points from fstab files instead of from
- registry. Use adapted functions copied from Cygwin DLL.
- (mnt_t): Drop issys member. Define as "mnt_t" instead of "struct mnt_t"
- subsequently.
- (max_mount_entry): New variable.
- (unconvert_slashes): Move to earlier location in file. Make inline.
- (find2): Remove.
- (get_cygdrive0): Remove.
- (get_cygdrive): Remove.
- (skip_ws): New function.
- (find_ws): Ditto.
- (conv_fstab_spaces): Ditto.
- (read_flags): Ditto.
- (from_fstab_line): Ditto.
- (get_user): Ditto.
- (from_fstab): Ditto.
- (mnt_sort): Ditto.
- (read_mounts): Drop old registry code. Fetch
- "Software\Cygwin\Setup\rootdir" value from HKCU or HKLM key. Use
- rootdir extracted from module path as fallback. Call from_fstab for
- nouser and user mount points.
- (setmntent): Check max_mount_entry to test if read_mounts must be
- called.
- (getmntent): Use MOUNT_SYSTEM flag instead of mnt_t's issys member.
-
-2008-03-16 Brian Dessent <brian@dessent.net>
-
- * path.cc: Include malloc.h for alloca.
- (is_symlink): Rewrite. Just read the whole file in memory rather
- than by parts. Account for an ITEMIDLIST if present, as well as
- the new style of Cygwin shortcut supporting targets > MAX_PATH.
-
-2008-03-12 Corinna Vinschen <corinna@vinschen.de>
-
- * cygpath.cc (do_sysfolders): Use cygwin_conv_path.
- (do_pathconv): Use cygwin_conv_path and cygwin_conv_path_list.
- * dumper.cc (main): Use cygwin_conv_path. Allocate target path
- dynamically.
- * mkpasswd.c (current_user): Use cygwin_conv_path.
- (enum_users): Ditto.
- * ps.cc (NT_MAX_PATH): Define.
- (main): Use cygwin_conv_path.
- * regtool.cc (find_key): Ditto. Allocate target path dynamically.
- (cmd_save): Ditto.
-
-2008-03-11 Brian Dessent <brian@dessent.net>
-
- * cygcheck.cc (find_app_on_path): Make buffer SYMLINK_MAX + 1
- chars.
-
-2008-03-11 Brian Dessent <brian@dessent.net>
-
- * cygcheck.cc (dirname): New static function.
- (find_app_on_path): Use SYMLINK_MAX. Resolve symlink relative
- to link's location. Adjust to the fact that cygpath already
- normalizes its return value.
- * path.cc (rel_vconcat): Add cwd parameter, and use it instead
- of calling GetCurrentDirectory() if possible. Rename throughout.
- (vcygpath): Rename from cygpath and accept cwd and va_list. Pass
- cwd on to rel_vconcat().
- (cygpath_rel): New front end for vcygpath.
- (cygpath): Ditto.
- * path.h (cygpath_rel): Declare.
- (SYMLINK_MAX): Define to 4095.
-
-2008-03-09 Brian Dessent <brian@dessent.net>
-
- * Makefile.in (install): Don't install the testsuite.
-
-2008-03-08 Brian Dessent <brian@dessent.net>
-
- * Makefile.in: Add a 'check' target that builds and runs
- testsuite.exe from path-testsuite.o and testsuite.o.
- * path.cc: Include testsuite.h.
- (struct mnt): Change to a mnt_t typedef and don't define
- mount_table when TESTSUITE is defined.
- (find2): Don't include when TESTSUITE is defined to avoid warning.
- (get_cygdrive0): Ditto.
- (get_cygdrive): Ditto.
- (read_mounts): Provide empty implementation when TESTSUITE is
- defined.
- (vconcat): Use the isslash macro.
- (unconvert_slashes): New helper to convert to backslashses.
- (rel_vconcat): Handle relative paths more gracefully.
- (cygpath): Skip a leading "./" sequence. Avoid double-slashes.
- Normalize final output to backslashes and remove redundant path
- sequences.
- * testsuite.cc: New file implementing testsuite driver.
- * testsuite.h: New header implementing harness mount table and
- series of tests.
-
-2008-03-08 Brian Dessent <brian@dessent.net>
-
- * Makefile.in: Reorganize considerably, using GNU make's
- static pattern rules and target-specific variables.
-
-2008-02-28 Corinna Vinschen <corinna@vinschen.de>
-
- * mkpasswd.c (main): Simplify generating SYSTEM entry. Add entries
- for LocalService and NetworkService accounts. Change comments.
-
-2008-01-13 Corinna Vinschen <corinna@vinschen.de>
-
- * cygcheck.cc (dump_sysinfo): Always try to get a OSVERSIONINFOEX
- first. Load kernel32.dll earlier. Make osname a buffer. Simplify
- Non-NT code. Use GetProductInfo in Vista/2008 case. Clean up
- non-Vista version info. Exit early if not on NT.
-
-2007-12-29 Dave Korn <dave.korn@artimi.com>
-
- * bloda.cc (enum bad_app): Add BYTEMOBILE.
- (dodgy_app_detects[]): Add FILENAME entry to detect bmnet.dll.
- (big_list_of_dodgy_apps[]): Add description for BYTEMOBILE.
-
-2007-12-20 Brian Dessent <brian@dessent.net>
-
- * Makefile.in (cygcheck.exe): Don't link to ntdll.
- * bloda.cc (pNtQuerySystemInformation): Add.
- (pRtlAnsiStringToUnicodeString): Add.
- (get_process_list): Use function pointers for NT functions.
- (dump_dodgy_apps): Skip dodgy app check on non-NT platforms.
- Use GetProcAddress for NT-specific functions.
-
-2007-12-07 Corinna Vinschen <corinna@vinschen.de>
-
- * regtool.cc (opts): Add missing 'W'.
-
-2007-12-06 Corinna Vinschen <corinna@vinschen.de>
-
- * ps.cc: Include limits.h.
- (main): Set file name buffer size to PATH_MAX. Use progname or
- progname_long member of struct external_pinfo dependent of the value of
- the struct's version member.
-
-2007-08-31 Dave Korn <dave.korn@artimi.com>
-
- * mkgroup.c (enum_groups): Use MAX_PREFERRED_LENGTH in netgroupenum
- call so that it will automatically size returned buffer sufficiently.
-
-2007-08-03 Dave Korn <dave.korn@artimi.com>
-
- * Makefile.in (cygcheck.exe): Add bloda.o as prerequisite, adjusting
- dependency-filtering $(wordlist ...) call appropriately. Link ntdll.
- (bloda.o): New rule to build bloda.o
- * cygcheck.cc (dump_sysinfo): Call bloda function dump_dodgy_apps().
- * bloda.cc: New file implements detection of applications from the
- Big List Of Dodgy Apps.
-
-2007-07-24 Corinna Vinschen <corinna@vinschen.de>
-
- * COPYING.dumper: New file.
- * dumper.cc: Change license to plain GPLv2 + later.
- * dumper.h: Ditto.
- * parse_pe.cc: Ditto.
-
-2007-07-23 Christopher Faylor <me+cygwin@cgf.cx>
-
- * strace.cc (create_child): Don't convert a path from cygwin format
- unless it has a slash.
-
-2007-07-09 Christopher Faylor <me+cygwin@cgf.cx>
-
- * strace.cc (usage): Add missing description for -q.
-
-2007-07-09 Christopher Faylor <me+cygwin@cgf.cx>
-
- * Makefile.in (kill.exe): Remove reliance on libiberty.
- * kill.cc (strsigno): New function patterned after libiberty but using
- newly exported cygwin array.
-
-2007-06-03 Christopher Faylor <me+cygwin@cgf.cx>
-
- * cygcheck.cc (pathlike): New class.
- (paths): Redefine as type pathlike.
- (display_error): Declare a few different ways to allow more flexible
- usage throughout.
- (display_error_fmt): New function for those cases where C++ just isn't
- enough.
- (add_path): Rewrite to allocate pathlike paths. Always tack on a
- trailing slash since that's what everyone who uses it wants. NULL
- terminate the path list. Register "it's a system path" field.
- (init_path): Call add_path with info regarding whether path is a system
- path or not.
- (pathlike::check_existence): Move into pathlike class. Accept file and
- extension arguments to build up path on the fly. Modify other
- arguments.
- (find_on_path): Constify return value and appropriate arguments.
- Eliminate short-circuit for fully-qualified paths. Simplify loop which
- iterates over path.
- (already_did): Constify argument.
- (track_down): Ditto. Regularize some error messages.
- (find_app_on_path): Ditto.
- (cygcheck): Constify argument. Use 20th century string handling
- functions.
- (dump_sysinfo): Remove odd inclusion of '\\bin' "Just in case".
- Accommodate change of paths to pathlike.
- * path.cc (isslash): Rename from SLASH_P and use throughout.
- (rel_vconcat): Front-end to vconcat which prepends cwd to path before
- passing along for conversion to native windows.
- (cygpath): Remove "./" test. Call rel_vconcat if filename appears to
- be relative.
-
-2007-05-29 Pedro Alves <pedro_alves@portugalmail.pt>
-
- * dumper.cc (dumper::prepare_core_dump): Record a phdr for each section.
-
-2007-05-29 Corinna Vinschen <corinna@vinschen.de>
-
- * cygpath.cc (do_options): Allow outputflag combined with other
- basic flags. Only check options_from_file_flag if reading options
- from command line.
- (main): Check for NULL argz vector. Don't free argz vector prematurely.
- Don't force flag combination in !options_from_file_flag case.
-
-2007-05-23 Corinna Vinschen <corinna@vinschen.de>
-
- * cygpath.cc: Include argz.h.
- (options_from_file_flag): Move from main to global static variable.
- (mode_flag): Ditto.
- (do_sysfolders): Rename from dowin and accommodate throughout.
- Don't exit from here.
- (do_pathconv): Rename from doit and accommodate throughout.
- (print_version): Change copyright.
- (do_options): New function, centralizing option processing.
- Rework checking options for correctness.
- (action): New function, centralizing calling worker functions.
- (main): Simplify. Move option processing to do_options. Move calling
- worker functions to action. Rework getting arguments from files.
-
-2007-03-30 Mark Mitchell <mark@codesourcery.com>
-
- * utils/cygpath.cc (get_long_path_name_w32impl): Close handles returned
- by FindFirstFile.
-
-2007-03-30 Christopher Faylor <me@cgf.cx>
-
- * mount.cc (main): Turn dos file warnings off since we know what we're
- doing.
-
-2007-02-22 Corinna Vinschen <corinna@vinschen.de>
-
- * ipcs.c (_POSIX2_LINE_MAX): Drop definition.
-
-2007-02-20 Corinna Vinschen <corinna@vinschen.de>
-
- * cygcheck.cc (dump_sysinfo): Add "not supported" to osname on 9x
- machines. Drop "not supported" for Vista. Drop "Longhorn" text
- for now.
-
-2007-01-09 Christian Franke <franke@computer.org>
-
- * cygpath.cc (usage): Add -O and -F, remove tabs.
- (get_special_folder): New function.
- (get_user_folder): New function.
- (dowin): Add -O and -F, better -D, -P error handling.
- (main): Add -O and -F.
- * utils.sgml (cygpath): Document -O and -F.
-
-2006-12-21 Corinna Vinschen <corinna@vinschen.de>
-
- * dumper.cc: Include ansidecl.h before including bfd.h to woraround
- a problem with the order in which system include files are included.
-
-2006-12-11 Christopher Faylor <me@cgf.cx>
-
- * dumper.cc: Add an include to accommodate new include/elf usage.
-
-2006-12-10 Christopher Faylor <me+cygwin@cgf.cx>
-
- * mount.cc (do_mount): Avoid unnecessary cygwin_conv_to_win32_path and
- pass POSIX path directly - this avoids a cygwin DLL warning.
-
-2006-10-21 Corinna Vinschen <corinna@vinschen.de>
-
- * regtool.cc (key_type): Drop.
- (REG_AUTO): Define.
- (value_type): Replace key_type. Use REG_xxx values directly.
- Accomodate change throughout.
- (longopts): Add --dword, --dword-le, --none, --qword and --hex options.
- (opts): Add -d, -D, -n, -Q and -x options.
- (types): Array to convert REG_xxx into strings.
- (hex): New variable to keep value of --hex option.
- (usage): Accomodate new options. Print only the necessary by default.
- Only be verbose in case of -h/--help option.
- (cmd_list): Use key separator from -K option when printing.
- Print value type when verbose option is given. Handle so far not
- handled REG_xxx types.
- (cmd_set): Avoid SEGV due to missing argument. Handle so far not
- handled REG_xxx types.
- (cmd_get): Handle --binary option type agnostic. Handle so far not
- handled REG_xxx types.
- (main): Handle new options.
-
-2006-10-19 Corinna Vinschen <corinna@vinschen.de>
-
- * regtool.cc (longopts): Add --wow32 option.
- (opts): Add -W option.
- (usage): Add text for --wow32/-W option.
- (main): Handle --wow32/-W option.
- * utils.sgml: Document the new -W option.
-
-2006-10-16 Corinna Vinschen <corinna@vinschen.de>
-
- * regtool.cc (KEY_WOW64_64KEY): Drop definition. Instead define
- WINVER to 0x0502 before including windows.h.
-
-2006-10-16 Corinna Vinschen <corinna@vinschen.de>
-
- * regtool.cc (KEY_WOW64_64KEY): Define.
- (longopts): Add --wow64 option.
- (opts): Add -w option.
- (wow64): New variable to control usage of KEY_WOW64_64KEY access flag.
- (usage): Add text for --wow64/-w option.
- (print_version): Fix copyright.
- (find_key): Use wow64 value in calls to RegOpenKeyEx and RegCreateKeyEx.
- (cmd_add): Use wow64 value in call to RegCreateKeyEx.
- (regDeleteKeyEx): New function pointer to load RegDeleteKeyEx function
- dynamically.
- (cmd_remove): Load and use regDeleteKeyEx when wow64 is set.
- (main): Handle --wow64/-w option.
- * utils.sgml: Document the new -w option.
-
-2006-10-05 Igor Peshansky <pechtcha@cs.nyu.edu>
-
- * cygcheck.cc (get_word, get_dword): Move to path.cc.
- (LINK_EXTENSION): New macro.
- (check_existence): New static function.
- (find_on_path): Check for symbolic links if asked.
- (dll_info): New error handling.
- (track_down): Only call dll_info() for executables, display
- an error for symlinks, and print magic number for others.
- (find_app_on_path): New static function.
- (cygcheck, dump_sysinfo): Call find_app_on_path() instead of
- find_on_path().
- * path.cc (cmp_shortcut_header): New static function.
- (get_word, get_dword): Moved from cygcheck.cc.
- (EXE_MAGIC, SHORTCUT_MAGIC, SYMLINK_COOKIE, SYMLINK_MAGIC): New
- macros.
- (is_exe, is_symlink, readlink): New functions.
- * path.h (is_exe, is_symlink, readlink): Declare.
- (get_word, get_dword): Ditto.
-
-2006-09-12 Christopher Faylor <cgf@timesys.com>
-
- * Makefile.in: Fix -ntdll typo.
-
-2006-09-11 Eric Blake <ebb9@byu.net>
-
- * cygcheck.cc (main): Restore POSIXLY_CORRECT before displaying user's
- environment.
-
-2006-08-03 Corinna Vinschen <corinna@vinschen.de>
-
- * path.cc (vconcat): Don't convert backslahes to slashes.
- (cygpath): Return native path with all backslashes.
-
-2006-08-02 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (cygpath.exe): Add rule to link cygpath against ntdll.dll.
- * cygpath.cc: Include DDK headers.
- (RtlAllocateUnicodeString): New static inline function.
- (get_device_name): New static function to evaluate DOS path from
- native NT path.
- (get_device_paths): New function to do the same for path lists.
- (doit): Call get_device_paths/get_device_name where appropriate.
-
-2006-07-30 Ilya Bobir <ilya@po4ta.com>
-
- * cygpath.cc (get_long_name): Fallback to get_long_path_name_w32impl.
-
-2006-07-27 Corinna Vinschen <corinna@vinschen.de>
-
- * cygpath.c (get_long_name): Cover the case that GetLongPathName
- doesn't return valid information for non-existant files. Just return
- incoming filename in that case.
-
-2006-07-03 Kazuhiro Fujieda <fujieda@jaist.ac.jp>
-
- * Makefile.in: Build setmetamode.exe.
- * setmetamode.c: New file.
-
-2006-05-24 Christopher Faylor <cgf@timesys.com>
-
- * configure.in: Update to newer autoconf.
- (thanks to Steve Ellcey)
- * configure: Regenerate.
- * aclocal.m4: New file.
-
-2006-05-24 Christopher Faylor <cgf@timesys.com>
-
- * strace.cc (proc_child): Propagate return code from child process.
- (dostrace): Ditto.
- (main): Ditto.
-
-2006-03-03 Christian Franke <franke@computer.org>
-
- * regtool.cc (options): Add 'binary'.
- (usage): Document 'load|unload|save' and '-b'.
- (find_key): Add 'options' parameter, add load/unload.
- (cmd_set): Add KT_BINARY case.
- (cmd_get): Add hex output in KT_BINARY case.
- (cmd_load): New function.
- (cmd_unload): New function.
- (set_privilege): New function.
- (cmd_save): New function.
- (commands): Add load, unload and save.
- (main): Add '-b'
- * utils.sgml (regtool): Document it.
-
-2006-02-17 Corinna Vinschen <corinna@vinschen.de>
-
- * cygpath.cc (get_long_name): Load GetLongPathNameA instead of incorrect
- GetLongPathName.
- (doit): Create mixed filename after converting to short or long pathname
- respectively.
-
-2006-02-17 Jerry D. Hedden <jerry@hedden.us>
-
- * ps.cc (main): Set aflag if -p option is given.
-
-2006-02-16 Jerry D. Hedden <jerry@hedden.us>
-
- * ps.cc (longopts): Add --process option.
- (opts): Add -p option.
- (usage): Mention -p/--process option.
- (main): Handle -p option.
- * utils.sgml: Describe -p/--process option.
-
-2006-02-15 Igor Peshansky <pechtcha@cs.nyu.edu>
-
- * regtool.cc (usage): Clarify help for "-K".
-
-2006-02-08 Corinna Vinschen <corinna@vinschen.de>
-
- * cygcheck.cc (find_on_path): Update copyright text.
-
-2006-02-08 Corinna Vinschen <corinna@vinschen.de>
-
- * cygcheck.cc (find_on_path): Create copy of rv on successful access
- check, since rv can be reused in subsequent calls.
-
-2006-01-19 Christopher Faylor <cgf@timesys.com>
-
- * cygcheck.cc (common_paths): Add "patch".
-
-2006-01-19 Christopher Faylor <cgf@timesys.com>
-
- * cygcheck.cc (init_paths): Record first_nonsys_path.
- (find_on_path): Start on first nonsys path when !search_sysdirs.
-
-2006-01-18 Christopher Faylor <cgf@timesys.com>
-
- * Makefile.in (sysconfdir): Remove unneeded variable.
-
- * mkgroup.c: Replace ` with ' throughout.
- * mkpasswd.c: Ditto.
- * setfacl.c: Ditto.
- * ssp.c: Ditto.
-
-2006-01-18 Dave Korn <dave.korn@artimi.com>
-
- * cygpath.cc (dowin): Remove stray debugging printf statement.
-
-2006-01-17 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in: Replace etcdir with sysconfdir.
-
-2006-01-13 Brian Dessent <brian@dessent.net>
-
- * Makefile.in (cygcheck.exe): Do not link against libwininet.a.
- * cygcheck.cc (pInternetCloseHandle): Define global function pointer.
- (display_internet_error): Use it.
- (package_grep): Attempt to load wininet.dll at runtime. Call WinInet
- API through function pointers throughout.
-
-2006-01-13 Corinna Vinschen <corinna@vinschen.de>
-
- * cygcheck.cc (dump_sysinfo): Convert k32 to HMODULE.
-
-2006-01-13 Corinna Vinschen <corinna@vinschen.de>
-
- * cygcheck.cc (dump_sysinfo): Convert osname to const and remove casts
- in subsequent assignments. Recognize Longhorn/Vista and report as not
- yet supported. Recognize when running under WOW64 and report native
- CPU type. Slightly rearrange \n printing.
-
-2006-01-12 Christopher Faylor <cgf@timesys.com>
-
- * cygcheck.cc: Replace ` with ' throughout.
-
-2006-01-05 Christopher Faylor <cgf@timesys.com>
-
- * cygcheck.cc (dump_sysinfo): Report the failing drive to prevent
- having to guess.
-
-2005-12-29 Christopher Faylor <cgf@timesys.com>
-
- * strace.cc (nprocesses): Make static global.
- (quiet): New variable.
- (strace_active): Ditto.
- (add_child): Increment nprocesses here. Don't add a child if it is
- already added (windows bug?). Report on child if not quiet.
- (get_child): Just return NULL if child not found.
- (remove_child): Report on child if not quiet.
- (attach_process): Don't complain if given a windows process. Use
- windows pid in error.
- (handle_output_debug_string): Issue error if trying to manipulate a process that we don't know about.
- Handle _STRACE_CHILD_PID - attach to reported child when we get this.
- (proc_child): Move nprocesses to file scope.
- Report on exceptions.
- (longopts): Implement "--quiet".
- (opts): Implement "-q".
- (main): Manipulate quiet flag.
- * utils.sgml (strace): Add words describing '-q'.
-
-2005-12-29 Christopher Faylor <cgf@timesys.com>
-
- * cygcheck.cc (common_apps): Add crontab, vi, vim.
-
-2005-12-19 Igor Pechtchanski <pechtcha@cs.nyu.edu>
-
- * dump_setup.cc (package_find): Fix is_alias computation for "/usr/lib".
-
-2005-12-14 Christopher Faylor <cgf@timesys.com>
-
- * cygcheck.cc (common_apps): Add a few more binaries to look for.
-
-2005-12-05 Christopher Faylor <cgf@timesys.com>
-
- * strace.cc (show_usecs): Renamed from 'usecs'.
- (main): Use show_usecs rather than usecs. Toggle delta if '-u' is
- specified.
- (handle_output_debug_string): Avoid printing microsecond timestamp if
- show_usecs == 0.
- * utils.sgml (strace): Add words to describe '-u'.
-
-2005-11-22 Brian Dessent <brian@dessent.net>
-
- * Makefile.in: Link cygcheck with libwininet.a.
- * cygcheck.cc: Add includes.
- (grep_packages): New global variable.
- (display_internet_error): New function.
- (safe_chars): New global variable.
- (base_url): Ditto.
- (package_grep): New function.
- (usage): Reword --help output for clarity. Document new argument.
- (longopts): Add 'package-query' option.
- (opts): Add 'p' option, reorder to be consistent with 'longopts'.
- (main): Accommodate new option.
- * utils.sgml (cygcheck): Update --help output. Document new -p option.
-
-2005-09-22 Corinna Vinschen <corinna@vinschen.de>
-
- Align error message handling to mkpasswd's error messages throughout.
- * mkgroup.c (print_win_error): Create macro calling ...
- (_print_win_error): ... this function created from former
- print_win_error. Move up in source.
- (PDOMAIN_CONTROLLER_INFOW): Define return type of DsGetDcNameW.
- (dsgetdcname): New function pointer for DsGetDcNameW.
- (load_netapi): Get DsGetDcNameW address.
- (main): If DsGetDcNameW is available, use it.
- * mkpasswd.c (PDOMAIN_CONTROLLER_INFOW): Define return type of
- DsGetDcNameW.
- (dsgetdcname): New function pointer for DsGetDcNameW.
- (load_netapi): Get DsGetDcNameW address.
- (main): If DsGetDcNameW is available, use it. Rename local variable
- domain_name_specified to domain_specified as in mkgroup.c.
-
-2005-09-08 Bas van Gompel <cygwin-patch.buzz@bavag.tmfweb.nl>
-
- * regtool.cc: Extend copyright-years.
- (print_version): Ditto.
- (cmd_list): Don't depend on terminating '\0' being present on
- string-values.
- (cmd_get): Don't attempt to read more than present, but keep
- extra space for terminating '\0'. Really output REG_BINARY.
- Don't leak memory.
- (cmd_set): Include trailing '\0' in string's length.
-
-2005-08-18 Corinna Vinschen <corinna@vinschen.de>
-
- * passwd.c (longopts): Add --logonserver option.
- (opts): Add -d option.
- (GetPW): Add server parameter which is given to Net functions.
- (ChangePW): Ditto.
- (PrintPW): Ditto.
- (SetModals): Ditto.
- (usage): Add description for -d/--logonserver option.
- (main): Add option handling for -d/--logonserver. Use LOGONSERVER
- environment variable content for server to contact, unless
- -d/--logonserver option is given. If both is missing, use NULL.
-
-2005-08-16 Brian Dessent <brian@dessent.net>
-
- * cygcheck.cc (dump_sysinfo_services): Properly null-terminate 'buf'.
- Avoid extraneous cygrunsrv invocation if 'verbose' is true.
-
-2005-08-03 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (longopts): Fix typo which disallows --options option.
-
-2005-07-19 Christopher Faylor <cgf@timesys.com>
- Eric Blake <ebb9@byu.net>
-
- * cygcheck.cc (find_on_path): Perform .exe magic on non-PATH search.
-
-2005-07-05 Eric Blake <ebb9@byu.net>
-
- * cygcheck.cc (track_down, cygcheck): Return true on success.
- (main): Reflect cygcheck failures in exit status.
-
-2005-06-14 Corinna Vinschen <corinna@vinschen.de>
-
- * parse_pe.c (exclusion::sort_and_check): Remove crude cast.
-
-2005-05-30 Corinna Vinschen <corinna@vinschen.de>
-
- * cygcheck.cc (dump_sysinfo): Recognize XP Media Center and Tablet PC
- Editions. Change .NET to 2003 throughout. Recognize 2003 Web Server
- and Datacenter Server. Report when running in terminal server session.
-
-2005-05-27 Christopher Faylor <cgf@timesys.com>
-
- * cygcheck.cc (load_cygwin): Make half-hearted attempt to work with
- older DLLs.
- * strace.cc (load_cygwin): Ditto.
-
-2005-05-22 Brian Dessent <brian@dessent.net>
-
- * cygcheck.cc (dump_sysinfo_services): Add new function that uses
- new cygrunsrv options to dump service info.
- (dump_sysinfo): Call dump_sysinfo_services if running under NT.
- Change 'Cygnus' to 'Cygwin' in output.
-
-2005-05-20 Christopher Faylor <cgf@timesys.com>
-
- * cygcheck.cc (load_cygwin): Remove debugging statement.
-
-2005-05-20 Christopher Faylor <cgf@timesys.com>
-
- * cygcheck.cc (dump_sysinfo): Don't attempt to use path if it is not
- set.
- (nuke): Fix off by one error in allocation of environment variable.
- (load_cygwin): Always set PATH even if cygwin environment is empty.
-
-2005-05-16 Christopher Faylor <cgf@timesys.com>
-
- * cygcheck.cc (cygwin_internal): Define as a "C" function.
- * strace.cc (cygwin_internal): Ditto.
-
- * cygpath.cc (print_version): Update copyright.
-
-2005-05-15 Christopher Faylor <cgf@timesys.com>
-
- * cygcheck.cc (load_cygwin): Avoid calling putenv with a NULL path.
-
-2005-05-15 Corinna Vinschen <corinna@vinschen.de>
-
- * cygcheck.cc (load_cygwin): Don't touch $PATH for now.
- (print_version): Fix copyright.
- * strace.cc (print_version): Ditto.
-
-2005-05-13 Christopher Faylor <cgf@timesys.com>
-
- * mount.cc (mount_commands): Display "-X" option when appropriate.
-
-2005-05-08 Christopher Faylor <cgf@timesys.com>
-
- * cygcheck.cc (nuke): New function.
- (load_cygwin): New function.
- (main): Use load_cygwin to load argv/envp from cygwin environment, if
- appropriate.
-
-2005-05-08 Christopher Faylor <cgf@timesys.com>
-
- * strace.cc (attach_process): Don't call load_cygwin(). Assume that
- it's already happened.
- (dotoggle): Ditto.
- (main): Set argv from cygwin environment, if it exists.
-
-2005-05-01 Christopher Faylor <cgf@timesys.com>
-
- * mount.cc (usage): Clarify action of -m option.
-
-2005-04-29 Dave Korn <dave.korn@artimi.com>
-
- * path.cc (getmntent): Add previously-omitted 'noexec' and 'managed'
- flags to mnt_opts string if present in mount flags.
-
-2005-04-20 Brian Dessent <brian@dessent.net>
-
- * utils.sgml (mount): Clarify setting cygdrive prefix for user
- and system-wide.
-
-2005-03-24 Brian Dessent <brian@dessent.net>
-
- * cygcheck.cc (init_paths): Use full path instead of "." for the
- current directory. Do not add "." if present in $PATH.
- (dump_sysinfo): Skip placeholder first value of paths[].
-
-2005-03-07 Christopher Faylor <cgf@timesys.com>
-
- * kill.cc (getsig): Rectify bug introduced by 2005-02-26 change. Don't
- pad signal name with spaces.
-
-2005-03-07 Corinna Vinschen <corinna@vinschen.de>
-
- * strace.cc (handle_output_debug_string): Fix compiler warning.
-
-2005-03-06 Christopher Faylor <cgf@timesys.com>
-
- * cygpath.cc (usage): Pass in one more copy of program_name to printf
- to avoid a SEGV.
-
-2005-02-27 Christopher Faylor <cgf@timesys.com>
-
- * regtool.cc (opts): The argument to 'K' is not optional.
- (main): Revert previous change. Just let getopt deal with missing
- argument.
-
-2005-02-27 Christopher Faylor <cgf@timesys.com>
-
- * regtool.cc (main): Avoid a SEGV when nothing follows -K.
-
-2005-02-26 Christopher Faylor <cgf@timesys.com>
-
- * kill.cc (getsig): Avoid buffer overflow when generating a signal name.
-
- * strace.cc (handle_output_debug_string): Make error a little more specific.
-
-2005-02-23 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * cygpath.cc (usage): Clarify help output to indicate acceptance
- of multiple file names as arguments.
-
-2005-01-16 Christopher Faylor <cgf@timesys.com>
-
- * ps.cc (main): Eliminate use of PID_ZOMBIE.
- * strace.cc (main): Recognize new option for displaying hex value of
- strace type.
- (handle_output_debug_string): Prepend output with hex value of strace
- message if -H is specified.
-
-2005-01-11 Pierre Humblet <pierre.humblet@ieee.org>
-
- * mkpasswd.c (print_win_error): Transform into macro.
- (_print_win_error): Upgrade former print_win_error by
- printing the line.
- (current_user): Call _print_win_error.
- (enum_users): Print name in case of lookup failure.
- (enum_local_groups): Ditto.
-
-2004-11-18 Bas van Gompel <cygwin-patch.buzz@bavag.tmfweb.nl>
-
- * cygcheck.cc (eprintf): New function.
-
-2004-11-16 Bas van Gompel <cygwin-patch.buzz@bavag.tmfweb.nl>
-
- * cygcheck.cc (find_on_path): Clear show_error and/or print_failed
- parameters to display_error.
- (rva_to_offset): Ditto.
- (dll_info): Ditto.
- (track_down): Ditto.
-
-2004-11-13 Pierre Humblet <pierre.humblet@ieee.org>
-
- * kill.cc (forcekill): Do not pass negative pids to
- cygwin_internal. Check if sig == 0. Improve error messages.
- (main): Make pid a long long and distinguish between pids, gpids
- (i.e. negative pids) and Win9x pids.
-
-2004-11-11 Bas van Gompel <cygwin-patch.buzz@bavag.tmfweb.nl>
-
- * cygcheck.cc: Change "keyeprint" to "display_error" throughout.
-
-2004-11-11 Christopher Faylor <cgf@timesys.com>
-
- * cygcheck.cc (main): Allow a '-l' without an additional argument.
-
-2004-11-11 Bas van Gompel <cygwin-patch.buzz@bavag.tmfweb.nl>
-
- * cygcheck.cc (keyeprint): New optional parameters: show_error and
- print_failed.
-
-2004-10-31 Bas van Gompel <cygwin-patch.buzz@bavag.tmfweb.nl>
-
- * cygcheck.cc (get_dword): Fix errormessage.
- (cygwin_info): Ditto.
- (track_down): Ditto.
- (check_keys): Ditto.
-
-2004-10-27 Bas van Gompel <cygwin-patch.buzz@bavag.tmfweb.nl>
-
- * cygcheck.cc (dump_sysinfo): Warn about missing or multiple cygwin1
- dlls.
-
-2004-10-25 Bas van Gompel <cygwin-patch.buzz@bavag.tmfweb.nl>
-
- * cygcheck.cc (dump_sysinfo): Add leading newline before legend for
- drive-list.
-
-2004-10-22 Bas van Gompel <cygwin-patch.buzz@bavag.tmfweb.nl>
-
- * cygcheck.cc (dump_sysinfo): In legend for drive-list: Add ``ram'' and
- ``unk''. Use single puts. Add leading newline. Line up equal-signs.
-
-2004-10-20 Bas van Gompel <cygwin-patch.buzz@bavag.tmfweb.nl>
-
- * cygcheck.cc (dump_sysinfo): Allow for larger drives in drive-list.
- Change ``Used'' to ``Free'' in helptext-title for drive-list.
-
-2004-10-18 Bas van Gompel <cygwin-patch.buzz@bavag.tmfweb.nl>
-
- * cygcheck.cc (pretty_id): Don't let i become negative. Fix
- printf-format.
-
-2004-10-17 Bas van Gompel <cygwin-patch.buzz@bavag.tmfweb.nl>
-
- * cygcheck.cc (pretty_id): Allocate space for ')' in uid and guid.
-
-2004-10-17 Bas van Gompel <cygwin-patch.buzz@bavag.tmfweb.nl>
- Christopher Faylor <cgf@timesys.com>
-
- * cygcheck.cc (pretty_id): Allocate space for trailing '\0' in uid and
- guid.
-
-2004-10-15 Bas van Gompel <cygwin-patch.buzz@bavag.tmfweb.nl>
- Christopher Faylor <cgf@timesys.com>
-
- * cygcheck.cc (pretty_id): Don't exit on id error. Fix size
- calculations.
-
-2004-10-14 Christopher Faylor <cgf@timesys.com>
- Bas van Gompel <cygwin-patch.buzz@bavag.tmfweb.nl>
-
- * cygcheck.cc (pretty_id): Correct column calculations. Abort if id is
- acting funny.
-
-2004-10-10 Bas van Gompel <cygwin-patch.buzz@bavag.tmfweb.nl>
-
- * cygcheck.cc (add_path): Don't leak memory when path is already in
- ``paths''.
-
-2004-10-10 Bas van Gompel <cygwin-patch.buzz@bavag.tmfweb.nl>
-
- * cygcheck.cc (dump_sysinfo): Warn about trailing (back)slash on mount
- entries.
-
-2004-10-10 Bas van Gompel <cygwin-patch.buzz@bavag.tmfweb.nl>
-
- * cygcheck.cc (dump_sysinfo): Don't warn about empty path components,
- just display ``.''.
-
-2004-10-06 Corinna Vinschen <corinna@vinschen.de>
-
- * strace.cc (_impure_ptr): Remove.
-
-2004-10-06 Bas van Gompel <cygwin-patch.buzz@bavag.tmfweb.nl>
-
- * cygcheck.cc (dump_sysinfo): Warn about empty path components.
-
-2004-10-04 Bas van Gompel <cygwin-patch.buzz@bavag.tmfweb.nl>
-
- * cygcheck.cc (pretty_id): Close pipe.
-
-2004-09-23 Bas van Gompel <cygwin-patch.buzz@bavag.tmfweb.nl>
-
- * dump_setup.cc (dump_setup): Remove unneeded strlen when check_files
- is not set.
-
-2004-09-22 Bas van Gompel <cygwin-patch.buzz@bavag.tmfweb.nl>
- Corinna Vinschen <corinna@vinschen.de>
-
- * dump_setup.cc (dump_setup): Avoid trailing spaces on package-list.
-
-2004-09-15 Bas van Gompel <cygwin-patch.buzz@bavag.tmfweb.nl>
-
- * getfacl.c (main): Correct layout when nopt is set.
-
-2004-07-12 Igor Pechtchanski <pechtcha@cs.nyu.edu>
-
- * mkgroup.cc (netapibufferallocate,netgroupgetinfo): New function
- pointers.
- (load_netapi): Load NetApiBufferAllocate and NetGroupGetInfo.
- (enum_local_groups,enum_groups): Add disp_groupname parameter.
- Load info for disp_groupname if specified.
- (usage): Add description of "-g/--group" option.
- (longopts,opts): Add "-g/--group" option.
- (main): Process "-g/--group" option.
- * utils.sgml (mkgroup): Add description of "-g/--group" option
-
-2004-06-15 Alan Modra <amodra@bigpond.net.au>
-
- * dumper.cc (dumper::prepare_core_dump): Use bfd_get_section_size
- instead of _raw_size.
- (dumper::write_core_dump): Likewise.
- * parse_pe.cc (select_data_section): Likewise.
-
-2004-05-29 John Paul Wallington <jpw@gnu.org>
-
- * ssp.c (usage): Add missing linefeed.
-
-2004-05-27 Christopher Faylor <cgf@alum.bu.edu>
-
- * kill.cc (listsig): Fix "kill -l" segv. NSIG includes Signal 0, so we
- need to avoid calling strtosigno with NSIG - 1.
-
-2004-03-21 Christopher Faylor <cgf@redhat.com>
-
- * cygcheck.cc (dump_sysinfo): Remove "Win95/NT" from output.
-
-2004-03-15 Christopher Faylor <cgf@redhat.com>
-
- * cygpath.cc (usage): Don't issue helpful message if -i is used.
- (from Igor Pechtchanski)
-
-2004-03-13 Rob Siklos <rob2@siklos.ca>
-
- * kill.cc (get_debug_priv): New function.
- (forcekill): Call get_debug_priv before trying to kill process.
-
-2004-02-24 Christopher Faylor <cgf@redhat.com>
-
- * cygpath.cc (long_options): Add "mode" option.
- (options): Ditto.
- (usage): Report on new option.
- (report_mode): New function.
- (main): Implement -M option.
-
-2004-02-20 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in (build_dumper): Detect missing iconv library.
-
- * cygpath.cc (dowin): Report on filename conversion errors.
- (doit): Ditto.
-
- * strace.cc (main): Use symbolic constant for _STRACE_ALL when setting
- mask.
-
-2004-02-14 Corinna Vinschen <corinna@vinschen.de>
-
- * ssp.c (opts): Add leading '+' to force posixly correct behaviour.
-
-2004-02-11 Corinna Vinschen <corinna@vinschen.de>
-
- * strace.cc (opts): Add leading '+' to force posixly correct
- behaviour.
- (main): Revert POSIXLY_CORRECT manipulations.
-
-2004-02-10 Christopher Faylor <cgf@redhat.com>
-
- * strace.cc (main): Guard against previous setting of POSIXLY_CORRECT.
-
-2004-02-10 Christopher Faylor <cgf@redhat.com>
-
- * strace.cc: Update copyrights.
- * cygcheck.cc: Update copyrights.
-
-2004-02-10 Christopher Faylor <cgf@redhat.com>
-
- * strace.cc (main): Ensure POSIXLY_CORRECT argument ordering.
- * cygcheck.cc (main): Ditto.
-
-2004-01-23 Christopher Faylor <cgf@redhat.com>
-
- * cygcheck.cc (pretty_id): Make more robust in absence of id.exe.
-
-2004-01-22 Corinna Vinschen <corinna@vinschen.de>
-
- * cygpath.cc (dowin): Revert accidental checkin from November.
-
-2003-11-26 Corinna Vinschen <corinna@vinschen.de>
-
- * mkgroup.c (main): Print "root" group with local admins group sid
- and gid 0.
-
-2003-11-19 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in: Add rules to build ipcrm and ipcs.
- * ipcrm.c: New file.
- * ipcs.c: New file.
-
-2003-11-14 Corinna Vinschen <corinna@vinschen.de>
-
- * mkgroup.c: Avoid compiler warnings throughout.
- * mkpasswd.c: Ditto.
- * passwd.c: Ditto.
-
-2003-11-07 Mark Blackburn <marklist@fangorn.ca>
-
- * cygpath.cc (main): Allow multiple pathnames on command line.
-
-2003-11-04 Corinna Vinschen <corinna@vinschen.de>
-
- * passwd.c (PrintPW): Turn around meaning printed for "Password not
- required" option to be in line with Windows meaning.
- (main): Use more appropriate 1008 option when calling
- NetUserSetInfo to change flag values.
-
-2003-11-04 Corinna Vinschen <corinna@vinschen.de>
-
- * passwd.c (UF_LOCKOUT): Remove (defined in lmaccess.h).
- (version): Bump version number to 1.5.
- (longopts): Add -c, -C, -e, -E, -p, -P options.
- (opts): Ditto.
- (PrintPW): Print values of UF_PASSWD_CANT_CHANGE and
- UF_DONT_EXPIRE_PASSWD flags. Slightly reformat output. Don't suppress
- correct system password settings just because the account has admin
- privileges.
- (usage): Define as "noreturn" function. Restructure and rephrase
- output. Accommodate new options.
- (print_version): Fix copyright dates.
- (main): Accommodate new options for setting UF_PASSWD_CANT_CHANGE,
- UF_DONT_EXPIRE_PASSWD and UF_PASSWD_NOTREQD settings.
-
-2003-10-17 Christopher Faylor <cgf@redhat.com>
-
- * cygcheck.cc (pretty_id): Don't exec if `id' program is not found.
-
-2003-09-20 Christopher Faylor <cgf@redhat.com>
-
- * kill.cc (main): Allow negative pids (indicates process groups).
-
-2003-09-17 Christopher Faylor <cgf@redhat.com>
-
- * parse_pe.cc (exclusion::sort_and_check): Make error message a little
- more explicit and ignore (hopefully) harmless region overlap.
-
-2003-09-13 Christopher Faylor <cgf@redhat.com>
-
- * kill.c (forcekill): Wait for process to terminate even if
- TerminateProcess says it failed.
-
-2003-09-11 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Tweak mingw libz.a detection to make it more reliably
- detect when libz.a is not available.
-
-2003-09-11 Igor Pechtchanski <pechtcha@cs.nyu.edu>
-
- * cygcheck.cc (dump_only): New global variable.
- (usage): Add "--dump-only" option, fix "--verbose" line.
- (longopts, opts): Add "--dump-only" option.
- (main): Process the "--dump-only" flag. Add new semantic check.
- Pass dump_only information to dump_setup().
-
-2003-09-11 Corinna Vinschen <corinna@vinschen.de>
-
- * getfacl (main): Remove extern declaration of optind.
- * setfacl (main): Remove extern declaration of optarg and optind.
-
-2003-09-10 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in (cygcheck.o): Use MINGW_CXX for compilation.
- * cygcheck.cc: Just include <getopt.h> rather than cygwin version.
- (pretty_id): Avoid compiler warnings.
- * cygpath.cc (usage): Ditto.
-
-2003-09-10 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in (MINGW_CXX): Define and use for mingw-compiled files.
- * path.cc: Include more path info in cygwin-specific includes since the
- cygwin directory is no longer included by default.
-
-2003-09-10 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: More fixups to adjust for the fact that mingw_getopt.o
- is no longer built.
-
-2003-09-10 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Remove references to getopt since it is now part of
- mingwex.
-
-2003-09-08 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Rename libz.h -> zlib.h.
-
-2003-09-07 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Detect existence of mingw zlib headers and libraries.
- Build cygcheck without package checking if they are unavailable.
- * dump_setup.cc: Generate dummy zlib macros when zlib is not available.
- (open_package_list): Use zlib functions to uncompress package lists.
- Return gzFile rather than FILE *.
- (check_package_files): Change fp to gzFile to accommodate zlib
- functions. Use gzgets to read from package file. Use gzclose to close
- the handle.
- (package_list): Ditto.
- (package_find): Ditto.
-
-2003-09-05 Igor Pechtchanski <pechtcha@cs.nyu.edu>
-
- * dump_setup.cc (check_package_files): Don't fail on empty package.
-
-2003-09-01 AJ Reins <reinsaj@yahoo.com>
-
- * mount.cc (mount_commands): Ensure user mode is actually user mode and
- not the default system mode.
-
-2003-08-31 Christopher Faylor <cgf@redhat.com>
-
- * kill.cc (forcekill): Silence some compiler warnings.
-
-2003-08-31 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Oops. Put the '...' in the right place.
-
-2003-08-31 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Display "..." when not-verbose.
-
- * kill.cc (forcekill): Default to entered pid when pinfo fails. Issue
- some warnings when things don't work.
-
-2003-08-17 David Rothenberger <daveroth@acm.org>
-
- * dump_setup.cc (check_package_files): Strip leading / and ./ from
- package file names.
-
-2003-08-16 David Rothenberger <daveroth@acm.org>
-
- * dump_setup.cc (package_find): Don't stop searching on missing
- file list.
- (package_list): Ditto.
-
-2003-08-16 Igor Pechtchanski <pechtcha@cs.nyu.edu>
-
- * dump_setup.cc: (package_list): Make output terse unless
- verbose requested. Fix formatting.
- (package_find): Ditto.
-
-2003-08-15 Corinna Vinschen <corinna@vinschen.de>
-
- * cygcheck.cc (main): Fix some formatting and help text printing.
-
-2003-08-15 Igor Pechtchanski <pechtcha@cs.nyu.edu>
-
- * cygcheck.cc (find_package,list_package): New global
- variables.
- (usage): Add "--find-package" and "--list-package" options,
- reformat output.
- (longopts, opts): Add "--find-package" and "--list-package"
- options.
- (main): Process the "--find-package" and "--list-package"
- flags. Add new semantic checks. Add calls to find_package()
- and list_package().
- * dump_setup.cc: Fix header comment.
- (match_argv): Change return type to int to distinguish
- between real matches and default ones.
- (open_package_list): New static function.
- (check_package_files): Factor out opening the package list
- file into open_package_list().
- (get_packages): New static function.
- (dump_setup): Factor out getting a list of packages into
- get_packages().
- (package_list, package_find): New global functions.
-
-2003-08-15 Corinna Vinschen <corinna@vinschen.de>
-
- * regtool.cc (usage): Add missing linefeed. Move example to --help
- text. Fix forward slash description.
-
-2003-08-13 Igor Pechtchanski <pechtcha@cs.nyu.edu>
-
- * dump_setup.cc (check_package_files): Fix extra '/' in filename.
- Resize command buffer. Fix buffer overflow bug.
-
-2003-08-09 Igor Pechtchanski <pechtcha@cs.nyu.edu>
- Christopher Faylor <cgf@redhat.com>
-
- * dump_setup.cc (dump_setup): Check for the existence of the package
- list file. Rework slightly to use static buffer for popen commands.
-
-2003-08-07 Igor Pechtchanski <pechtcha@cs.nyu.edu>
- Christopher Faylor <cgf@redhat.com>
-
- * dump_setup.cc (version_len): New static variable.
- (could_not_access,directory_exists): New static function.
- (file_exists): Ditto.
- (check_package_files): Ditto.
- (dump_setup): Check the contents of each package if check_files is true
- and output the result in the "Status" column. Flush output after each
- package.
-
-2003-08-07 Igor Pechtchanski <pechtcha@cs.nyu.edu>
- Christopher Faylor <cgf@redhat.com>
-
- * dump_setup.cc (dump_setup): Remove redundant null check. Add
- informative message if package info not found.
-
-2003-07-26 Christopher Faylor <cgf@redhat.com>
-
- * mount.cc (do_mount): Issue warning when using managed mount option on
- non-empty directory.
-
-2003-07-25 Christopher Faylor <cgf@redhat.com>
-
- * configure.in: Use 'install-sh -c'.
- * configure: Regenerate.
-
-2003-07-25 Christopher Faylor <cgf@redhat.com>
-
- * configure.in: Always use install-sh.
- * configure: Regenerate.
-
-2003-07-03 Christopher Faylor <cgf@redhat.com>
-
- * mount.cc (struct opt): Remove posix option.
-
-2003-07-03 Christopher Faylor <cgf@redhat.com>
-
- * mount.cc (longopts): Add long "options" keyword.
- (opts): Add -o option.
- (usage): Display -o option.
- (struct opt): New.
- (concat3): New function.
- (main): Handle -o flag.
-
-2003-06-12 Christopher Faylor <cgf@redhat.com>
-
- * cygcheck.cc (pretty_id): Rework slightly to not rely on spaces.
-
-2003-06-12 Christopher Faylor <cgf@redhat.com>
-
- * cygpath.cc: Throughout, always return error when GetShortPathName
- returns 0.
-
-2003-04-26 Joshua Daniel Franklin <joshuadfranklin at yahoo dot com>
-
- * mkpasswd.c (usage) Remove extra newline from description output.
-
-2003-04-26 Joshua Daniel Franklin <joshuadfranklin at yahoo dot com>
-
- * cygcheck.cc (usage) Add description output.
- * cygpath.cc (usage) Add description output.
- * dumper.cc (usage) Add newline to description output.
- * kill.cc (usage) Add description output.
- * mkgroup.c (usage) Grammatical change to description output.
- * mkpasswd.c (usage) Grammatical change to description output.
- * mount.cc (usage) Add description output.
- * passwd.c (usage) Add description output.
- * ps.cc (usage) Add description output.
- * regtool.cc (usage) Add description output.
- * setfacl.c (usage) Remove extra newline from description output.
- * ssp.c (usage) Add description output.
- * strace.cc (usage) Add description output.
- * umount.cc (usage) Add description output.
-
-2003-04-10 Pierre Humblet <pierre.humblet@ieee.org>
-
- * mkpasswd.c (current_user): print uid and gid as unsigned.
- (enum_users): Ditto. Do not free servername.
- (usage): Update to allow several domains and improve -p.
- (main): On Win9x limit uids to 1000. Only print specials
- when -l is specified. Add a loop to allow several domains
- and free servername in the loop.
- * mkgroup.c (enum_groups): Do not free servername.
- (usage): Update to allow several domains. Change uid to gid.
- (main): Only print specials when -l is specified. Add a
- loop to allow several domains and free servername in the loop.
-
-2003-03-24 Christopher Faylor <cgf@redhat.com>
-
- * cygcheck.cc (dump_sysinfo): Ensure that CYGWIN environment variable
- is correctly set.
-
-2003-03-09 Corinna Vinschen <corinna@vinschen.de>
-
- * getfacl.c (username): Fix ambiguous printf calls.
- (groupname): Ditto.
- (main): Ditto.
-
-2003-03-04 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in (strace.exe): Include mingw_getopt.o in link line.
- * cygcheck.cc (print_version): Update copyright.
- * strace.cc (print_version): Ditto.
- (main): Allow cygwin paths for -o option.
- (create_child): Allow cygwin path as argv[0].
- * path.cc (path.cc): Allow UNC paths.
-
-2003-03-01 Pierre Humblet <pierre.humblet@ieee.org>
-
- * mkpasswd.cc (main): On Win95, output both a default line and a
- line for the current user (if known) with a pseudorandom uid. If
- the -u switch is given, produce a line for the specified user.
- * mkgroup.cc (main): On Win95 change the group name from "unknown" to
- "all".
-
-2003-02-28 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in (cygcheck.o): Fix so that actual mingw include files are
- used.
- * cygcheck.cc (find_on_path): Translate from cygwin path when qualified
- path name found.
- (pretty_id): New function. Dump output of id command.
- (dump_sysinfo): Call pretty_id for CYGWIN=ntsec and CYGWIN=nontsec cases.
-
-2003-02-12 Christopher Faylor <cgf@redhat.com>
-
- * cygpath.cc (doit): Allocate more space for non-path filename.
-
-2003-02-07 Christopher Faylor <cgf@redhat.com>
-
- * dump_setup.cc (compar): Use case insensitive comparisons.
- (dump_setup): Calculate package_len based on already used "len". Don't
- bother with version_len.
-
-2003-02-07 Igor Pechtchanski <pechtcha@cs.nyu.edu>
-
- * dump_setup.cc (dump_setup): Compute the longest package name
- and align columns properly.
-
-2003-02-06 Christopher Faylor <cgf@redhat.com>
-
- * cygcheck.cc (common_apps): Add some more apps.
- * path.cc (get_cygdrive): Correctly set system flag.
-
-2003-01-22 Corinna Vinschen <corinna@vinschen.de>
-
- * Makefile.in (ALL_LDFLAGS): Remove newlib/libm from tools paths.
- (MINGW_LDFLAGS): Remove in favor of definition from Makefile.common.
-
-2003-01-15 Corinna Vinschen <corinna@vinschen.de>
-
- * mkgroup.c: Fix copyright date.
- * mkpasswd.c: Ditto.
- * setfacl.c: Ditto.
-
-2003-01-09 Pierre Humblet <pierre.humblet@ieee.org>
-
- * setfacl.c (usage): Remove double ":" for mask and other.
-
-2003-01-07 Pierre Humblet <pierre.humblet@ieee.org>
-
- * mkpasswd.c (current_user): Create.
- (usage): Reorganize to support Win95/98/ME.
- (main): Add option for -c. Reorganize to parse options for
- Win95/98/ME and to call current_user. Add username in gecos field
- on Win95/98/ME.
- * mkgroup.c (enum_groups): Print gid with %u.
- (print_win_error): Create from passwd.cc.
- (current_group): Create.
- (usage): Reorganize to support Win95/98/ME.
- (main): Add option for -c. Reorganize to parse options for
- Win95/98/ME and to call current_group.
-
-2002-12-14 Pierre Humblet <pierre.humblet@ieee.org>
-
- * setfacl.c (main): Place a single : after other and mask.
- * getfacl.c (getaclentry): Allow both : and :: for other and mask.
- (main): Remove extraneous break.
-
-2002-11-25 Corinna Vinschen <corinna@vinschen.de>
-
- * mkpasswd.c (main): Set pw_passwd field to '*' on 9x/Me.
-
-2002-11-24 Corinna Vinschen <corinna@vinschen.de>
-
- * setfacl.c (getperm): Set only `other' permission bits.
- (getaclentry): Set a_id to -1 by default.
-
-2002-11-24 Corinna Vinschen <corinna@vinschen.de>
-
- * getfacl.c (permstr): Use `other' permission bits for requesting
- ace permissions.
-
-2002-11-08 Corinna Vinschen <corinna@vinschen.de>
-
- * setfacl.c (usage): Add missing LF.
-
-2002-10-30 Christopher Faylor <cgf@redhat.com>
-
- * cygpath.cc (get_long_path_name_w32impl): Define similarly to
- GetLongPathName.
- (get_long_name): Correctly prototype GetLongPathName.
- (get_long_paths): Implement using get_long_name to cut down on code
- duplication.
- (doit): Do various things to make path output work predictably.
-
-2002-10-19 Christopher Faylor <cgf@redhat.com>
-
- * mount.cc (usage): Correctly report default mode.
- * strace.cc (main): Use strtoul as appropriate.
-
-2002-09-29 Christopher Faylor <cgf@redhat.com>
-
- * cygpath.cc (close_arg): Remove unused static.
- * mkgroup.c (enum_local_users): Avoid compiler warning.
- (enum_users): Ditto.
- * mkpasswd.c: Ditto throughout.
- * ssp.c: Ditto throughout.
-
-2002-09-18 Christopher Faylor <cgf@redhat.com>
-
- * cygcheck.cc: Include sys/time.h rather than time.h to avoid a
- compiler error.
-
-2002-09-17 Christopher Faylor <cgf@redhat.com>
-
- * cygcheck.cc: Reorder includes to avoid compiler error.
-
-2002-09-15 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * cygcheck.cc (print_version) Add final newline.
- * getfacl.c (print_version) Add final newline.
- * kill.cc (print_version) Add final newline.
- * mkgroup.c (print_version) Add final newline.
- * mkpasswd.c (print_version) Add final newline.
- * mount.cc (print_version) Add final newline.
- * passwd.c (print_version) Add final newline.
- * ps.cc (print_version) Add final newline.
- * regtool.cc (print_version) Add final newline.
- * setfacl.c (print_version) Add final newline.
- * ssp.c (print_version) Add final newline.
- * strace.cc (print_version) Add final newline.
- * umount.cc (print_version) Add final newline.
-
-2002-09-12 Igor Pechtchanski <pechtcha@cs.nyu.edu>
-
- * cygpath.cc (options) New global variable.
- (main) Make short options global for easier change.
- (print_version) Add a missing newline.
-
-2002-08-07 Igor Pechtchanski <pechtcha@cs.nyu.edu>
-
- * regtool.cc (find_key): Add support for custom key separator.
- (usage): Document it.
-
-2002-08-02 Corinna Vinschen <corinna@vinschen.de>
-
- * mkgroup.c (main): Don't print an entry for "Everyone".
- * mkpasswd.c (print_special): Set pw_gid to 544 for SYSTEM user.
- (main): Don't print an entry for "Everyone".
-
-2002-07-06 Christopher Faylor <cgf@redhat.com>
-
- * configure.in: Check for libiconv.a.
- * configure: Regenerate.
- * Makefile.in: Add libiconv.a to libraries required for dumper.exe.
-
-2002-07-06 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Use MINGW stuff from Makefile.common.
-
-2002-07-01 Corinna Vinschen <corinna@vinschen.de>
-
- * mkgroup.c: Add function pointers for functions from advapi32.dll.
- (load_netapi): Load used functions from advapi32.dll.
- (main): Use function pointers instead of statically linked functions
- from advapi32.dll.
-
-2002-07-01 Christopher Faylor <cgf@redhat.com>
-
- * mount.cc (main): Ensure that mount_already_exists() also gets default
- flag that is passed to do_mount.
-
-2002-06-22 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * cygpath.cc (long_options): Add "dos" and "mixed", correct "close",
- "file" and "type" to use NULL flag.
- (usage): Clean up usage output (more), accomodate new options.
- (main): Add --dos and --mixed options; accomodate all output forms in
- --type. Make UNIXy output default.
-
-2002-06-18 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * cygpath.cc (usage): Clean up usage output.
- (dowin): Correct output of -t mixed for -ADHPSW options.
-
-2002-06-14 Corinna Vinschen <corinna@vinschen.de>
-
- * passwd.c: Rearrange includes to avoid unnecessary warnings.
- (GetPW): Add parameter to (dis)allow printing of Windows username.
- Use defines instead of numerical constants where possible.
- Try avoiding impersonation problem. Rearrange to print Windows
- username only if it's different from Cygwin username.
- (ChangePW): Use defines instead of numerical constants where possible.
- (main): Call GetPW with additional parameter. Change error text.
-
-2002-06-14 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * passwd.c (GetPW): Handle case of user-edited /etc/passwd
- with cygwin_internal (CW_EXTRACT_DOMAIN_AND_USER, ...).
-
-2002-06-09 Christopher Faylor <cgf@redhat.com>
-
- * path.cc (cygpath): Change MOUNT_AUTO to MOUNT_CYGDRIVE.
- (getmntent): Ditto.
-
-2002-06-09 Christopher Faylor <cgf@redhat.com>
-
- * mount.cc (main): Use default system/user flag for cygdrive stuff,
- too.
- (change_cygdrive_prefix): Change MOUNT_AUTO to MOUNT_CYGDRIVE.
- * umount.cc (remove_cygdrive_prefix): Ditto.
- (main): Use default system/user flag for cygdrive stuff, too.
-
-2002-06-08 Christopher Faylor <cgf@redhat.com>
-
- * mount.cc (opts): Remove '-i' option.
- (usage): Ditto.
- (main): Ditto.
- (longopts): Remove --import-old-mounts option.
-
-2002-06-07 David Peterson <chief@mail.idrive.com>
- Christopher Faylor <cgf@redhat.com>
-
- * cygpath.cc: Add option to output windows paths in different formats:
- "dos" and "mixed".
- (main): Process options.
- (doit): Check new options flags.
-
-2002-06-06 Egor Duda <deo@logos-m.ru>
-
- * regtool.cc (Fail): Be more verbose.
- (find_key): Add support for remote registry access.
- (usage): Document it.
- * utils.sgml: Document it.
-
-2002-06-06 Christopher Faylor <cgf@redhat.com>
-
- * strace.cc (main): Make toggle a local variable.
-
-2002-06-07 Conrad Scott <conrad.scott@dsl.pipex.com>
-
- * strace.cc (toggle): New global variable.
- (error): Use exit instead of ExitProcess so that stdio buffers get
- flushed.
- (create_child): Remove command line error checking.
- (dostrace): Ditto.
- (dotoggle): New function.
- (usage): Add entry for new option -T|--toggle. Alphabetize.
- (longopts): Add new option -T|--toggle.
- (opts): Ditto.
- (main): Handle new -T|--toggle option. Move all command line checking
- here from other functions.
- * utils.sgml: Update section for strace.
-
-2002-06-05 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * strace.cc (version): New global variable.
- (usage): Accommodate stdout output.
- (print_version): New function.
-
-2002-06-03 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * ssp.c (version): New global variable.
- (longopts): Ditto.
- (opts): Ditto.
- (run_program): Correct cmd_line typos to cmdline.
- (usage): New function. Standardize usage output. Add ssp.txt to
- --help output.
- (print_version): New function.
- (main): Accommodate getopt.
-
-2002-06-03 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * umount.cc (version): New global variable.
- (longopts): Accommodate new --version option.
- (opts): Ditto.
- (usage): Standardize usage output.
- (print_version): New function.
- (main): Accommodate --help, --version options.
-
-2002-06-02 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * regtool.cc (prog_name): New global variable.
- (longopts): Ditto.
- (opts): Ditto.
- (usage): Standardize usage output. Rearrange/add descriptions.
- (print_version): New function.
- (main): Accommodate longopts and new --help, --version options. Add
- check for (_argv[optind+1] == NULL).
-
-2002-06-02 Christopher Faylor <cgf@redhat.com>
-
- * strace.cc (forkdebug): Make true by default.
- (attach_process): Use window pid if cygwin pid isn't available (yet).
- (create_child): Use either DEBUG_ONLY_THIS_PROCESS or DEBUG_PROCESS,
- exclusively. (Suggested by Conrad.Scott@dsl.pipex.com)
-
-2002-05-30 Christopher Faylor <cgf@redhat.com>
-
- * mkpasswd.cc (main): Don't reset to binmode if stdout is a terminal.
-
-2002-05-29 Christopher Faylor <cgf@redhat.com>
-
- * mount.cc (main): Make -b the default.
-
-2002-05-29 Corinna Vinschen <corinna@vinschen.de>
-
- * ps.cc (main): Use uid or uid32 member of struct external_pinfo
- dependent of the value of the struct's version member.
-
-2002-05-29 Corinna Vinschen <corinna@vinschen.de>
-
- * ps.cc (main): Change print format for uid to unsigned. Use uid32
- member of struct external_pinfo instead of uid.
-
-2002-05-28 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * passwd.c (prog_name): New global variable.
- (longopts): Ditto.
- (opts): Ditto.
- (usage): Standardize output. Accommodate new options.
- (print_version): New function.
- (main): Accommodate longopts and new --help, --version options.
-
-2002-05-28 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * ps.cc (usage): Fix typo.
-
-2002-05-27 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * ps.cc (prog_name): New global variable.
- (longopts): Ditto.
- (opts): Ditto.
- (usage): New function.
- (print_version): New function.
- (main): Accommodate longopts and new --help, --version options.
-
-2002-05-26 Christopher Faylor <cgf@redhat.com>
-
- * strace.cc (attach_process): Don't tell process to start stracing
- here.
- (proc_child): Do it here, instead, after first debug event. This
- should work around inexplicable races with DebugActiveProcess.
- (dostrace): Pass any pid argument to proc_child.
-
-2002-05-23 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * getfacl.c (usage): Standardize usage output. Change return type to
- static void.
- (print_version): New function.
- (longopts): Added longopts for all options.
- (main): Accommodate new help and version options.
-
-2002-05-22 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * mount.cc (version): New global variable.
- (usage): Standardize usage output. Accommodate new version option.
- (print_version): New function.
- (longopts): Accommodate new version option.
- (opts): Ditto.
- (main): Ditto.
-
-2002-05-22 Corinna Vinschen <corinna@vinschen.de>
-
- * cygpath.cc (usage): Change usage output slightly.
-
-2002-05-20 Joerg Schaible <joerg.schaible@gmx.de>
-
- * cygpath.cc (main): Add option l to support conversion to
- Windows long file names. Refactured code for capital options.
- Support of options from file for capital options.
- (dowin): New function. Refactured from main.
- (doit): Call long path conversion.
- (get_long_name): New function.
- (get_long_paths): New function.
- (get_long_path_name_w32impl): New function. Reimplementation
- of Windows API function GetLongPathName (only 98/Me/2000/XP or
- higher).
- (get_short_name): Call GetShortPathName only once.
- (get_short_paths): Fix calculating buffer size.
- * utils.sgml: Update cygpath section for l option.
-
-2002-05-18 Christopher Faylor <cgf@redhat.com>
-
- * strace.cc (add_child): Use calloc since new requires working
- libstdc++.a.
- (remove_child): Ditto for delete/free.
-
-2002-05-15 Mark Blackburn <marklist@fangorn.ca>
-
- * cygpath.cc (get_short_paths): Fix more error checking.
- (get_short_name): Ditto.
-
-2002-05-14 Joerg Schaible <joerg.schaible@gmx.de>
-
- * cygpath.cc (main): Add option H to show the Windows' profiles
- directory. Support short names for options DPSW. Clean up
- copied code lines.
- * utils.sgml: Update cygpath section for H option and s support.
-
-2002-05-14 Mark Blackburn <marklist@fangorn.ca>
-
- * cygpath.cc (get_short_paths): Fix error checking.
-
-2002-05-13 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * kill.cc (prog_name): New global variable.
- (usage): Standardize usage output. Add descriptions.
- (print_version): New function.
- (longopts): Accommodate new version option.
- (opts): Ditto.
- (main): Ditto.
-
-2002-05-13 Christopher Faylor <cgf@redhat.com>
-
- * kill.cc (listsig): Display numeric id when given symbolic input.
-
-2002-05-13 Christopher Faylor <cgf@redhat.com>
-
- * kill.cc (usage): Show new options. Allow specification of output
- stream.
- (main): Implement 'h' option.
-
-2002-05-13 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in (kill.exe): Add as a specific target.
- * kill.cc (longopts): New.
- (opts): Ditto.
- (get_sig): Accept const char * parameter. Return -1 on unknown signal.
- (test_for_unknown_sig): New function.
- (listsig): New function.
- (main): Use getopt_long for option parsing. Implement -l, and -s
- options. Use test_for_unknown_sig() to test for signal validity.
-
- * mount.cc (longopts): Make static.
- (opts): Ditto.
-
-2002-05-12 Christopher Faylor <cgf@redhat.com>
-
- * mount.cc (do_mount): Default to non-exec option for remote drives.
- Report warnings before attempting a mount.
- (longopts): Add no-executable option.
- (mount_commands): Ditto.
- (opts): Ditto.
- (usage): Ditto. Indicate that system mount is now the default.
- (main): Accommodate no-executable option. Make system mount the
- default.
- * umount.cc (usage): Indicate that system umount is now the default.
- (main): Make system umount the default.
-
-2002-05-07 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * dumper.cc (usage): Standardize usage output. Generalize to allow use
- for help.
- (longopts): New struct. Added longopts for all options.
- (print_version): New function.
- (main): Change getopt to getopt_long. Accommodate new help and version
- options.
-
-2002-03-29 Corinna Vinschen <corinna@vinschen.de>
-
- * mkgroup.c (main): Change call to exit() to a return statement.
- * mkpasswd.c (main): Ditto.
-
-2002-03-27 Joshua Daniel Franklin joshuadfranklin@yahoo.com
-
- * mkpasswd.c (usage): Simplify usage output. Generalize to allow use
- for help. Correct '?' typo to 'h'.
- (longopts): Add version option.
- (opts): Add 'v' version option.
- (print_version): New function.
- (main): Accommodate new version option. Accommodate usage parameter
- changes.
-
-2002-03-19 Christopher Faylor <cgf@redhat.com>
-
- * mkgroup.c (usage): Use one just fprintf + string concatenation for
- output message.
- (print_version): Add void to function type and update copyright.
-
-2002-03-16 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * mkgroup.c (usage): Simplify usage output. Generalize to allow use
- for help. Correct '?' typo to 'h'.
- (longopts): Add version option.
- (opts): Add 'v' version option.
- (print_version): New function.
- (main): Accommodate new version option. Accommodate usage parameter
- changes. Use usage to output help message.
-
-2002-03-15 Corinna Vinschen <corinna@vinschen.de>
-
- * mkgroup.c (main): When generating group 513, check for computer's
- primary domain instead of current user's domain.
-
-2002-03-14 Corinna Vinschen <corinna@vinschen.de>
-
- * mkgroup.c (main): When generating group 513, check for domain SID
- if computer name isn't mapped to a SID.
-
-2001-03-11 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * kill.cc (usage): Move to top of file.
- (getsig): Ditto.
- (forcekill): Ditto.
-
-2002-03-06 Christopher Faylor <cgf@redhat.com>
-
- * cygcheck.cc: Reformat.
-
-2002-03-06 Christopher Faylor <cgf@redhat.com>
-
- * cygcheck.cc (longopts): Use correct short option for --version.
-
-2002-03-06 Christopher Faylor <cgf@redhat.com>
-
- * cygpath.cc: Reformat.
-
-2002-02-27 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * cygpath.cc (print_version): New function.
- (main): Accommodate new version function. Initialize 'o' to prevent
- warning.
-
-2002-02-27 Christopher Faylor <cgf@redhat.com>
-
- * cygcheck.cc (main): Eliminate non-GNU formatting glitch.
-
-2002-02-27 Christopher Faylor <cgf@redhat.com>
-
- * ssp.c (help_desk): Fix compiler warning.
-
-2002-02-27 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
- Christopher Faylor <cgf@redhat.com>
-
- Change appropriate globals to statics throughout.
- * cygcheck.cc (usage): Simplify usage output. Generalize to allow use
- for help.
- (longopts): Add version option.
- (opts): Add 'V" version option.
- (print_version): New function.
- (main): Accommodate new version option. Accommodate usage parameter
- changes. Use usage to output help message.
-
-002-02-19 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in (CXXFLAGS): Add override so that HAVE_DECL_GETOPT is
- defined.
- (libbfd): Use -B rather than -L so that bfd from build directory is
- correctly found.
- (libintl): Ditto.
-
-2002-02-15 Christopher Faylor <cgf@redhat.com>
-
- * mount.cc (usage): Fix typo in output.
-
-2002-02-14 Christopher Faylor <cgf@redhat.com>
-
- * strace.cc (attach_process): Change CW_STRACE_ON to CW_STRACE_TOGGLE.
-
-2002-01-31 Corinna Vinschen <corinna@vinschen.de>
-
- * mkpasswd.c (main): Set default home path for 9x/Me if --path-to-home
- isn't given.
-
-2002-01-30 Corinna Vinschen <corinna@vinschen.de>
-
- * passwd.cc (ChangePW): Add parameter to differ between called for
- checking old password and called for changing password. If called
- for checking old password, return non-zero only if password is surely
- incorrect.
- (main): Call ChangePW() with additional parameter.
-
-2002-01-29 Christopher Faylor <cgf@redhat.com>
-
- * dump_setup.cc (parse_filename): Don't consider '_' part of the
- version.
-
-2002-01-28 Christopher Faylor <cgf@redhat.com>
-
- * cygcheck.cc: Fix typo. Remove uid_t kludge. Rely on kludge in
- sys/cygwin.h instead.
- * getfacl.c: Add include to remove warning.
- * mkgroup.c (main): Assign variables outside of parameter passing.
- This seems to eliminate some compiler warnings.
-
-2002-01-28 Christopher Faylor <cgf@redhat.com>
-
- * cygcheck.cc: Use specific cygwin includes, as required.
-
-2002-01-28 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in (MINGW_INCLUDES): Change cygwin include.
- * strace.cc: Use specific cygwin includes, as required.
- (load_cygwin): New function. Loads cygwin DLL, if necessary.
- (attach_process): Attaches strace to a running process.
- (dostrace): Accept pid argument. Attach to pid if supplied.
- (usage): Describe -p option. Correct system description.
- (longopts): Alphabetize.
- (opts): Ditto.
- (main): Ditto. Handle -p option.
-
-2002-01-21 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in (CXXFLAGS): Ensure that important settings are preserved
- even when overriden by command line.
-
-2002-01-21 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Build intermediate cygcheck.o to force use of MINGW_CXXFLAGS.
- * cygcheck.cc (cygwin_info): Intitialize variable to quiet g++ warning.
- (dump_sysinfo): Make variables unsigned to quiet g++ warnings.
- * strace.cc (version_string): Rename from SCCSid.
- (add_child): Remove unused variable.
- (version): Use version_string. Avoid use of fprintf.
-
-2002-01-21 DJ Delorie <dj@redhat.com>
-
- * Makefile.in: Use CXX instead of CC to compile C++ sources.
-
-2002-01-17 DJ Delorie <dj@redhat.com>
-
- * cygcheck.cc (already_did): Avoid default constructors, which may
- require exception support.
-
-2001-01-16 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
-
- * cygpath.cc (main): Add options to show Desktop and Start
- Menu's Programs directory for current user or all users.
- Move bulk of DPWS options outside the getopt case statement.
- * utils.sgml: Update cygpath section for ADPWS options.
-
-2002-01-15 Joerg Schaible <joerg.schaible@gmx.de>
-
- * cygpath.cc (doit): Empty file ignored using option -i.
-
-2002-01-15 Mark Bradshaw <bradshaw@crosswalk.com>
-
- * mkpasswd.c (print_win_error): Add a new function.
- (enum_users): Use print_win_error.
- (enum_local_groups): Ditto.
- (main): Ditto.
-
-2001-12-26 Jonathan Kamens <jik@curl.com>
-
- * cygpath.cc (doit): Detect and warn about an empty path. Detect and
- warn about errors converting a path.
- (main): Set prog_name correctly -- don't leave an extra slash or
- backslash at the beginning of it.
-
-Fri Dec 14 14:04:37 2001 Jason Tishler <jason@tishler.net>
-
- * mkpasswd.c (enum_users): Change to unconditionally use
- the --path-to-home option, if supplied by the user. Use default
- --path-to-home option value, if appropriate.
- (usage): Change usage statement to reflect new semantics.
- (main): Remove defaulting of the --path-to-home option.
-
-Fri Dec 14 12:10:39 2001 Jason Tishler <jason@tishler.net>
-
- * mkpasswd.c (opts): Add indication that '-p' option requires an
- argument.
-
-2001-12-11 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Add define to CXXFLAGS.
-
-2001-12-03 Christopher Faylor <cgf@redhat.com>
-
- * cygcheck.cc (usage): Add -c description.
- * cygpath.cc (usage): Alphabetize options.
- * strace.cc (usage): Ditto.
-
-2001-11-21 Christopher Faylor <cgf@redhat.com>
-
- * path.cc (cygpath): Don't consider cygdrive stuff when trying to derive
- native paths.
-
-2001-11-20 Mark Bradshaw <bradshaw@staff.crosswalk.com>
-
- * mkpasswd.c: include lmerr.h
- (main): New -u option to allow specifying a
- specific user. If specified, groups aren't displayed and
- output is limited to only the specified user.
- (enum_users): If specific user is specified, via -u option,
- display only that user's record. With -u use NetUserGetInfo
- instead of NetUserEnum.
- (load_netapi): Added netusergetinfo.
-
-2001-11-15 Gary R. Van Sickle <g.r.vansickle@worldnet.att.net>
-
- * strace.cc (main): Change getopt() to getopt_long().
- Add support for help and version info.
- Use new parse_mask() function for -m/--mask option.
- (longopts): Add long options structure.
- (opts): Move options string from getopts call to static var.
- (usage): Print usage information.
- (SCCSid): Version info.
- (version): New function for displaying version info.
- (parse_mask): New function supporting parsing of mnemonics,
- hex, and basic expressions in masks.
- (mnemonic2ul): New mnemonic parsing function.
- (tag_mask_mnemonic): New type.
- (mnemonic_table): New table of mnemonics for mnemonic2ul() to
- search through.
-
-2001-11-12 Corinna Vinschen <corinna@vinschen.de>
-
- * cygcheck.cc (dump_sysinfo): Redefine output format slightly.
- Print correct build number on 9x/ME systems.
-
-2001-11-12 Christopher Faylor <cgf@redhat.com>
-
- * cygcheck.cc (main): Slight formatting tweak.
-
-2001-11-12 Corinna Vinschen <corinna@vinschen.de>
-
- * cygcheck.cc (dump_sysinfo): Add some more details.
-
-2001-11-12 Corinna Vinschen <corinna@vinschen.de>
-
- * cygcheck.cc (dump_sysinfo): Print more detailed OS information string
- using OSVERSIONINFOEX information.
-
-2001-11-11 Christopher Faylor <cgf@redhat.com>
-
- * path.h: New file.
-
-2001-11-11 Christopher Faylor <cgf@redhat.com>
-
- * cygcheck.cc (scan_registry): Open registry with read-only access.
- (main): Reflect argument change for dump_setup.
- * dump_setup.cc (dump_setup): Add preliminary extra argument for future
- use.
- * path.cc (read_mounts): Open registry with read-only access.
-
-2001-11-11 Christopher Faylor <cgf@redhat.com>
-
- * cygcheck.cc (main): Display package info when '-s' is specified.
- * dump_setup.cc (dump_setup): Change header. Remove typo. Always sort
- packages output.
-
-2001-11-11 Christopher Faylor <cgf@redhat.com>
-
- * dump_setup.cc: New file.
- * Makefile.in: Add info for dump_setup.o.
- * cygcheck.cc (main): Recognize '-c' option for checking setup
- installed base.
- * path.cc (cygpath): Read mount table if not loaded.
-
-2001-11-10 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in (cygcheck.exe): Compile as -mno-cygwin executable.
- * path.cc: New file.
- * cygcheck.cc (init_paths): Use MS-DOS path syntax.
- (cygwin_info): Properly display cygwin version numbers. Prettify some
- output.
- (dump_sysinfo): Calculate max names of posix and ms-dos paths for
- prettier output.
-
-2001-11-09 Corinna Vinschen <corinna@vinschen.de>
-
- * cygcheck.cc (dump_sysinfo): Print more detailed OS information string.
-
-2001-11-04 Corinna Vinschen <corinna@vinschen.de>
-
- * getfacl.c (username): New function.
- (groupname): Ditto.
- (usage): Ditto. Add more user friendly help text.
- (main): Add -n and --help option. Print names instead of IDs
- unless -n option is given.
- * setfacl.c (getperm): Tolerate whitespace and comment chars in input.
- (getaclentry): Fix several input string misdetections.
- (getaclentries): Allow - as input file name to read from stdin.
- Tolerate whitespace and comment chars in input.
- (usage): Add more user friendly help text.
- (main): Add --help option.
-
-2001-11-04 Egor Duda <deo@logos-m.ru>
-
- * strace.cc (main): New option '-w'. Start traced process in separate
- window. New option '-S x'. Flush buffered output every x seconds.
- (create_child): Start child process in new window, when requested.
- When requested, periodically flush debugging output.
-
-2001-10-24 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Remove EXEEXT consideration. We always need .exe
- extensions.
-
-2001-10-20 Corinna Vinschen <corinna@vinschen.de>
-
- * mkgroup.c: Avoid compiler warnings.
- (print_special): New function.
- (main): Print special accounts by calling print_special().
- * mkpasswd.c: Avoid compiler warnings.
- (enum_users): Print additional U-domain\username info in gecos
- field when SIDs are printed.
- (print_special): New function.
- (main): Print special accounts by calling print_special().
-
-2001-10-15 Christopher Faylor <cgf@redhat.com>
-
- * mkpasswd.cc (enum_users): Shorten "unused" passwd field.
-
-2001-10-13 Christopher Faylor <cgf@redhat.com>
-
- * Makefile.in: Allow stdinc searching for dumper.
-
-Tue Oct 9 21:59:00 2001 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in (MINGW_INCLUDES): Accommodate changes in Makefile.common.
-
-Sun Oct 7 23:06:39 2001 Christopher Faylor <cgf@cygnus.com>
-
- * kill.cc (main): Set exit value to 1 on invalid pid. Perform minor
- cleanup.
-
-Fri Sep 21 20:40:30 2001 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in (mingw_getopt.o): Ensure that newlib include directories
- are not searched.
-
-Thu Sep 20 21:00:20 2001 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in (MINGW_INCLUDES): Still need cygwin/include directory.
-
-Wed Sep 19 12:22:08 2001 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Filter newlib includes from mingw compilation.
-
-2001-09-14 Egor Duda <deo@logos-m.ru>
-
- * dumper.cc (dumper::dumper): Print error code in case of error.
- (dumper::add_thread): Ditto.
- (dumper::collect_memory_sections): Ditto.
- (dumper::dump_memory_region): Ditto.
- (dumper::collect_process_information): Ditto.
- (print_section_name): Fix formatting.
-
-2001-09-13 Egor Duda <deo@logos-m.ru>
-
- * dumper.cc (main): Properly recognize negative pids (used by w9x).
-
-2001-09-09 Egor Duda <deo@logos-m.ru>
-
- * dumper.cc (main): Change command-line arguments format to be
- similar to gdb. Allow adding error_start=x:\path\to\dumper.exe to
- CYGWIN environment variable to perform core dumping in case of
- program crash.
- (usage): Ditto.
-
-Wed Sep 5 22:37:21 2001 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in (dumper): Change logic for libbfd and libintl so that
- they will be found either in the build tree or the installed directory.
- * mkpasswd.c (enum_users): Add a comment as a password for NT.
-
-2001-09-03 Michael A Chase <mchase@ix.netcom.com>
-
- * mount.cc (mount_commands): Don't write /cygdrive/u mount points.
-
-2001-09-03 Michael A Chase <mchase@ix.netcom.com>
-
- * mount.cc (longopts): Add mount-commands to options list.
- (usage): Add mount-commands option.
- (mount_commands): New function. Write commands to recreate current
- mounts.
-
-Sat Sep 1 15:58:11 2001 Christopher Faylor <cgf@cygnus.com>
-
- * mount.cc (main): Eliminate excess arguments in printf.
-
-2001-08-30 Egor Duda <deo@logos-m.ru>
-
- * dumper.h: Update copyright notice.
- * dumper.cc: Ditto.
- * dumper.cc: (dumper::print_core_section_list): New function.
- * dumper.h: (dumper::print_core_section_list): Declare it.
- * dumper.cc (print_section_name): New function.
- (dumper::collect_process_information): Augment debugging output.
- Stop debugee processing if it posts double exception.
- (usage): Fix typo in option name.
-
-Tue Aug 28 14:45:02 2001 Christopher Faylor <cgf@cygnus.com>
-
- * mount.cc (main): Issue correct warning for 'not enough arguments'.
-
-2001-08-14 Joerg Schaible <joerg.schaible@gmx.de>
-
- * cygpath.cc (main): Support -w for Windows (System) directories and
- return physical correct orthography for the Windows System dir.
-
-2001-07-14 Chris Genly <chgenly@alum.mit.edu>
-
- * regtool.cc (find_key): Handle keys with only one subkey.
-
-Wed Jun 27 22:46:10 2001 Christopher Faylor <cgf@cygnus.com>
-
- * regtool.cc (find_key): Revert previous change.
-
-Wed Jun 27 13:37:41 2001 Keith Starsmeare" <keith_starsmeare@yahoo.co.uk>
-
- * regtool.cc (find_key): Allow '/' as a synonym for '\\'.
-
-Fri Jun 15 00:49:21 2001 Christopher Faylor <cgf@cygnus.com>
-
- * mkpasswd.c (main): Output passwd file in binary mode so that there
- are no CRs in the file.
- * umount.cc (remove_all_user_mounts): Don't try to remove /cygdrive
- mounts.
-
-Tue May 1 10:50:48 2001 Christopher Faylor <cgf@cygnus.com>
-
- * mkpasswd.c (enum_users): Use /bin/bash as the default shell.
- (main): Ditto.
-
-Sat Apr 28 22:32:01 2001 Christopher Faylor <cgf@cygnus.com>
-
- * passwd.cc (ttymnam): New function.
- (main): Use ttynam() to report name of tty.
-
-2001-04-19 Egor Duda <deo@logos-m.ru>
-
- * dumper.cc (dumper::init_core_dump): Set architecture field in dump
- header.
-
-Mon Apr 16 15:08:00 2001 Corinna Vinschen <vinschen@redhat.com>
-
- * mkgroup.c: Add function pointers `netlocalgroupgetmembers' and
- `netgroupgetusers'.
- (load_netapi): Load function pointers `netlocalgroupgetmembers'
- and `netgroupgetusers'.
- (enum_local_users): New function.
- (enum_local_groups): Call `enum_local_users' for each group if
- `print_users' is set.
- (enum_users): New function.
- (enum_groups): Call `enum_users' for each group if `print_users' is set.
- (usage): Add usage text for `-u/--users'.
- (longopts): Add option `--users'.
- (opts): Add option character `u'.
- (main): Set `print_users' according to option `-u/--users'.
- Call `enum_local_groups' and `enum_groups' with additional parameter
- `print_users'.
-
-2001-04-15 Michael A Chase <mchase@ix.netcom.com>
-
- * mount.cc (longopts): Add help to options list.
- (opts): Add 'h' to options string.
- * umount.cc (longopts): Add help to options list.
- (opts): Add 'h' to options string and change 'R' to 'A'.
-
-2001-04-13 Kazuhiro Fujieda <fujieda@jaist.ac.jp>
-
- * mkgroup.c (enum_groups): Use RID + offset specified an additional
- argument as ID.
- (usage): Add description of -o option.
- (longopts, opts): Add specifications of -o/--id-offset option.
- (main): Add -o option. Invoke enum_groups with specified offset.
- * mkpasswd.c (enum_users): Just like mkgroup.c.
- (usage, longopts, opts): Ditto.
- (main): Add -o option. Invoke enum_users with specified offset only
- against domain accounts.
-
-2001-04-11 Egor Duda <deo@logos-m.ru>
-
- * mkgroup.c (uni2ansi): Use native method to convert from Unicode
- to multi-byte strings.
- * mkpasswd.c (uni2ansi): Ditto.
- (enum_users): Pass buffer size when converting string.
- (enum_local_groups): Ditto.
- * mkgroup.c (enum_groups): Ditto.
- (enum_local_groups): Ditto.
-
-Mon Apr 2 22:41:33 2001 Christopher Faylor <cgf@cygnus.com>
-
- * mount.cc (main): Use getopt_long for parsing arguments.
- (usage): Reformat, show long and short options.
- * umount.cc (main): Ditto, all of the above.
-
-Mon Apr 2 10:58:26 2001 Christopher Faylor <cgf@cygnus.com>
-
- * mount.cc (show_mounts): Change format string to more closely resemble
- UNIX when displaying mount table.
-
-Sat Mar 17 21:46:06 2001 Christopher Faylor <cgf@cygnus.com>
-
- * kill.cc (forcekill): Use dwProcessId when opening a process, not the
- Cygwin pid.
-
-Mon Mar 5 18:50:00 2001 Corinna Vinschen <vinschen@redhat.com>
-
- * getfacl.c: Add copyright hint.
- * setfacl.c: Ditto.
- * strace.cc: Ditto.
-
-Tue Jan 09 10:26:23 2001 Tony Sideris <tonys1110@home.com>
-
- * regtool.cc (cmd_list): Add new registry display options.
- (cmd_list): Add code to implement -p, -k, and -l options.
-
- * regtool.cc (Fail): Add call to LocalFree to free memory allocated by
- FormatMessage.
-
-Wed Jan 10 09:16:57 2001 Christopher Faylor <cgf@cygnus.com>
-
- * regtool.cc (translate): Ensure that 'c' is initialized.
- (cmd_set): Ditto for rv.
diff --git a/winsup/utils/ChangeLog-2000 b/winsup/utils/ChangeLog-2000
deleted file mode 100644
index 7ea5ae186..000000000
--- a/winsup/utils/ChangeLog-2000
+++ /dev/null
@@ -1,347 +0,0 @@
-Fri Dec 15 23:41:48 2000 Christopher Faylor <cgf@cygnus.com>
-
- * cygcheck.cc (cygwin_info): Add some more bounds checking.
-
-Fri Dec 15 23:41:34 2000 Christopher Faylor <cgf@cygnus.com>
-
- From Matt Harget <matt@use.net>:
- * utils/cygcheck.cc (keyeprint): Move declaration before other
- functions so it could be used by all functions to report error
- messages. Add comment.
- (add_path): Check for NULL return from malloc.
- (find_on_path): Check initial uses of pointers for NULL.
- (rva_to_offset): Ditto.
- (init_paths): Add checking for return values of Win32 calls.
- (get_dword): Ditto.
- (get_word): Ditto.
- (dll_info): Ditto, also add NULL pointer checks.
- (scan_registry): Ditto.
- (check_keys): Ditto.
- (dump_sysinfo): Ditto. Add default case to switch. Add error
- reporting if GetVolumeInformation fails, except when it
- returns ERROR_NOT_READY.
- (track_down): Add checking for NULL pointers and
- return values of Win32 calls.
- (cygwin_info): Ditto. Correct small memory leak.
-
-Sun Dec 10 19:08:58 2000 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Compile/link dumper.exe with c++.
-
-Tue Dec 7 11:15:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * mkpasswd.c: Slight formatting changes to the below patch.
- (longopts): Fix typo in `local-groups' option.
- (main): Initialize `passed_home_path' before first usage.
-
-Tue Dec 7 11:15:00 2000 Chris Abbey <cabbey@bresnanlink.net>
-
- * mkpasswd.c: make default home directory /home/$user if one
- can't be found in user registry. Allow user to override
- that with command line arg.
-
-Sun Dec 3 00:40:47 2000 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Use CXX to build the DLL.
- * configure.in: Find correct c++ compiler.
- * configure: Regenerate.
-
-Sat Nov 18 23:53:59 2000 Christopher Faylor <cgf@cygnus.com>
-
- * utils.sgml: Document new options for ps and strace.
-
-Wed Nov 8 08:49:27 2000 Jason Tishler <jt@dothill.com>
-
- * mount.cc (main): Call show_cygdrive_info instead of
- show_cygdrive_prefixes.
- * mount.cc (show_cygdrive_prefixes): Remove function.
- * mount.cc (show_cygdrive_info): New function. Actually,
- show_cygdrive_info is really an enhanced version of
- show_cygdrive_prefixes renamed to show_cygdrive_info that also displays
- the user and system flags.
-
-Wed Nov 8 15:52:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * mkgroup.c (load_netapi): New function to load netapi32.dll functions
- dynamically so that mkgroup works on 9x/ME as well.
- Use corresponding function pointers throughout.
- (usage): Change to `int'. Change text to be conformant to mkpasswd.
- (main): Use `getlongopt' to process options.
- Special handling to create a group entry on 9x/ME.
- * mkpasswd.c (load_netapi): New function to load netapi32.dll functions
- dynamically so that mkpasswd works on 9x/ME as well.
- Use corresponding function pointers throughout.
- (usage): Change to `int'. Change text to be conformant to mkgroup.
- (main): Use `getlongopt' to process options.
- Special handling to create a passwd entry on 9x/ME.
- Change conditional to create an entry for the local administrators
- group when appropriate.
-
-Thu Nov 2 2:01:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * kill.cc (main): Return 1 in case of errors.
-
-Sat Oct 28 01:37:55 2000 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Accomodate newer gcc's which require linking of c++
- programs with g++. Fixup output for some compilations.
- * cygcheck.cc: Respond to compiler warnings.
- * dumper.cc (main): Ditto.
- * parse_pe.cc (exclusion::sort_and_check): Ditto.
- * setfacl.cc (getaclentry): Ditto.
-
-Fri Oct 27 20:20:29 2000 Christopher Faylor <cgf@cygnus.com>
-
- * strace.cc (main): Add a '-b' option.
-
-2000-10-18 DJ Delorie <dj@redhat.com>
-
- * ssp.c: new
- * ssp.txt: new
- * Makefile.in: build ssp.exe
-
-Wed Oct 18 18:57:46 2000 Christopher Faylor <cgf@cygnus.com>
-
- * ps.cc (main): Add some extra space to Windows pid output for
- Windows 95.
-
-Tue Oct 17 23:49:04 2000 Christopher Faylor <cgf@cygnus.com>
-
- * ps.cc (main): Add some extra space to pid output for Windows 95.
-
-Tue Oct 17 1:09:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- Patch suggested by Brad Town <btown@ceddec.com>:
- * cygcheck.cc (main): Fix argument counting.
-
-Sat Oct 14 23:42:58 2000 Christopher Faylor <cgf@cygnus.com>
-
- * ps.cc (main): Accomodate new PID_ constant.
-
-Thu Oct 12 02:19:12 2000 Christopher Faylor <cgf@cygnus.com>
-
- * strace.cc (proc_child): Handle exceptions correctly.
-
-Sun Oct 8 23:11:17 2000 Christopher Faylor <cgf@cygnus.com>
-
- * ps.cc (main): Change order of reporting slightly so that windows pids
- are more obvious.
- * strace.cc (add_child): Just add child's pid directly.
- (remove_child): No need to close the child process pid since
- ContinueDebugEvent does that automatically.
- (proc_child): Ditto for child thread.
-
-Fri Sep 29 13:12:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * cygcheck.cc (keyeprint): New function.
- (check_keys): New function. Perform checking keycodes.
- (main): Add option `-k' for invoking check_keys.
- Change option processing to use long options and getopt_long.
- * cygkeycheck.cc: Removed. Functionality moved to `cygcheck.cc'.
- * Makefile.in: Remove cygkeycheck from the dependencies.
-
-Wed Sep 27 16:24:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * cygkeycheck.cc: New file. Utility to retrieve keycodes.
- * Makefile.in: Add cygkeycheck to the dependencies.
-
-2000-09-15 Joerg Schaible <joerg.schaible@gmx.de>
-
- * cygpath.cc: Add new options: -s and -i.
- * utils.sgml: Document the new options.
-
-Tue Sep 12 22:45:28 2000 Christopher Faylor <cgf@cygnus.com>
-
- * kill.cc (main): Change behavior of -f so that it will force the
- killing of a cygwin process after waiting 2 tenths of a second for it
- to terminate.
- (forcekill): Add an extra argument determining whether to wait for the
- process to exit.
-
-Sun Sep 10 12:50:02 2000 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Refine dumper.exe message.
-
-Mon Aug 28 21:55:56 2000 Christopher Faylor <cgf@cygnus.com>
-
- * kill.c (main): Avoid skipping next argument when a signal number is
- specified.
- * Makefile.in: Always clean dumper.exe.
-
-Fri Aug 25 12:41:53 2000 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Only build dumper.exe when all of its library and
- include dependencies are available.
-
-Fri Aug 25 11:44:29 2000 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Make failure to build dumper.exe a non-error.
-
-Thu Aug 24 18:02:35 2000 Christopher Faylor <cgf@cygnus.com>
-
- * ps.cc (main): Always print a cygwin process using cygwin paths.
-
-2000-08-24 Egor Duda <deo@logos-m.ru>
-
- * Makefile.in: Add dumper.exe target and associated mechanisms for building it.
- * dumper.cc: New file.
- * dumper.h: New file.
- * module_info.cc: New file.
- * parse_pe.cc: New file.
-
-Mon Jul 31 15:12:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * passwd.c (main): Initialize oldpwd before beeing used.
-
-Sat Jul 29 00:44:46 2000 Christopher Faylor <cgf@cygnus.com>
-
- * kill.cc (main): Add '-f' option to force termination of a process.
- (forcekill): New function.
- * ps.cc (main): Add '-W' option to list Windows pids as well as Cygwin
- pids.
- (dummyprocessmodules): New function.
- (GetModuleFileNameEx95): New function.
- (init_win): New function.
- (to_time_t): New function.
-
-Thu Jul 27 22:54:28 2000 Jason Tishler <jt@dothill.com>
-
- * utils/mount.cc (main): Add --show-cygdrive-prefixes option.
- (show_cygdrive_prefixes): New function.
- * utils/umount.cc (main): Add --remove-cygdrive-prefix option.
- (error): Change signature from 'char *' to 'const char *'.
- (remove_cygdrive_prefix): New function.
-
-Thu Jul 13 22:24:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (mount_already_exists): Slightly rearrange.
- Change message texts.
-
-Thu Jul 13 13:02:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * mount.cc (mount_already_exists): Additional warning message
- if mount point exists with another mount type.
-
-Sat Jul 1 00:19:27 2000 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Find getopt.c in cygwin/lib subdirectory.
-
-Sat Jun 24 23:16:33 2000 Christopher Faylor <cgf@cygnus.com>
-
- * cygcheck.cc (cygwin_info): New function. Scans DLL for Cygwin
- version info.
- (dll_info): Add path parameter for checking "cygwin1.dll".
- (track_down): Accomodate additional parameter for dll_info.
- (ls): Ditto.
- (dump_sys_info): Always print cygwin1.dll last.
-
-2000-06-07 Kazuhiro Fujieda <fujieda@jaist.ac.jp>
-
- * mount.cc (error): New function to report an error and exit.
- * umount.cc (error): Ditto.
- (remove_all_automounts): Check return status of cygwin_umount.
- (remove_all_user_mounts): Ditto.
- (remove_all_system_mounts): Ditto.
-
-2000-06-05 DJ Delorie <dj@cygnus.com>
-
- * mount.cc: add stdlib.h for exit
- * umount.cc: ditto
- * strace.cc: add #define for alloca
-
-Fri May 20 0:01:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * regtool.cc (find_key): Add parameter `access'.
- Call `RegOpenKeyEx' with that desired access.
- (cmd_add, cmd_remove, cmd_set, cmd_unset): Call
- `find_key' with KEY_ALL_ACCESS access.
- (cmd_list, cmd_check, cmd_get): Call `find_key'
- with KEY_READ access.
-
-2000-05-19 DJ Delorie <dj@cygnus.com>
-
- * cygpath.cc: add --windir/--sysdir options
- * utils.sgml: and document them
-
-Thu May 18 14:38:26 2000 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Eliminate WINSUP_DEPS.
- * cygpath.cc: Reorganize includes to accomodate sys/cygwin.h changes.
- * mkgroup.c: Ditto.
- * mkpasswd.c: Ditto.
- * mount.cc: Ditto. Eliminate use of cygwin source specific includes.
- * ps.cc: Ditto.
- * cygwin.cc: Eliminate obsolete file.
-
-Wed Apr 26 23:43:25 2000 Christopher Faylor <cgf@cygnus.com>
-
- * mount.cc (main): Add "-X" option to specify a "Cygwin executable".
-
-Sat Apr 15 23:34:00 2000 Corinna Vinschen <corinna@vinschen.de>
-
- * mkpasswd.c (main): Use GetDCName instead of GetAnyDCName.
- Don't create extra passwd entry for administrators group
- if local_groups is set.
- (usage): Change usage text slightly.
- (enum_users): Loop while ERROR_MORE_DATA is returned.
- (enum_local_groups): Ditto.
- * mkgroup.c (enum_local_groups): Ditto.
- (enum_groups) Ditto.
- (usage): Change usage text slightly.
-
-Thu Apr 13 01:22:35 2000 Christopher Faylor <cgf@cygnus.com>
-
- * cygpath.cc (main): Add -a -o and -c options.
- (doit): Ditto.
-
-Mon Apr 10 22:56:07 2000 Christopher Faylor <cgf@cygnus.com>
-
- * cygpath.cc (main): Add -f option for processing a group of paths from
- a file.
- (doit): New function.
-
-Sat Mar 18 22:52:37 2000 Christopher Faylor <cgf@cygnus.com>
-
- Patch suggested by Mumit Khan <khan@xraylith.wisc.edu>:
- * strace.cc (_impure_ptr): New global variable to make strace build
- under Cygwin gcc.
-
-Sat Mar 18 12:45:10 2000 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Make CXXFLAGS consistent with cygwin.
-
-Wed Mar 15 00:53:58 2000 Christopher Faylor <cgf@cygnus.com>
-
- * Makefile.in: Use MINGW_CXXFLAGS when compiling strace.
-
-Sun Mar 12 21:22:25 2000 Christopher Faylor <cgf@cygnus.com>
-
- * strace.cc: Throughout, track information like start_time, etc. on a
- per-process basis.
-
-Sun Feb 27 23:37:32 2000 Christopher Faylor <cgf@cygnus.com>
-
- * strace.cc (handle_output_debug_string): Parse strace output to allow
- various types of time output.
-
-Fri Jan 21 02:10:26 Corinna Vinschen <corinna@vinschen.de>
-
- * utils/regtool.cc (translate): Added unix like backslash
- processing.
-
-2000-01-20 Corinna Vinschen <corinna@vinschen.de>
-
- * regtool.cc: allow forward slashes as key separators
-
-2000-01-19 DJ Delorie <dj@redhat.com>
-
- * regtool.cc: New file.
- * Makefile.in: add regtool
- * utils.sgml: add regtool
-
-Sat Jan 8 17:13:51 2000 Christopher Faylor <cgf@cygnus.com>
-
- * getfacl.c: New file.
- * setfacl.c: New file.
- * Makefile.in: Add getfacl.exe and setfacl.exe to list of PROGS.
- Fix link flags in MINGW case.
diff --git a/winsup/utils/ChangeLog.64bit b/winsup/utils/ChangeLog.64bit
deleted file mode 100644
index 69c235672..000000000
--- a/winsup/utils/ChangeLog.64bit
+++ /dev/null
@@ -1,85 +0,0 @@
-2013-03-28 Peter Rosin <peda@lysator.liu.se>
- Corinna Vinschen <corinna@vinschen.de>
-
- * cygcheck.cc (dll_info): Fix crash due to sizeof(time_t) being not
- equal to sizeof(int). Output timestamp RFC 3339 compatible.
-
-2013-03-26 Corinna Vinschen <corinna@vinschen.de>
-
- * tzset.c (main): Don't try to overwrite space with NUL. Explain why.
- Rather, just print the string with computed precision value.
-
-2013-03-22 Corinna Vinschen <corinna@vinschen.de>
-
- * kill.cc (main): Chack pid against INT_MIN and (U)INT_MAX since pid_t
- is 4 byte on all platforms.
- * mkgroup.c (main): Check domlist[i].id_offset against UINT_MAX since
- DWORD is 4 byte on all platforms.
- * mkpasswd.c (main): Ditto.
-
-2013-02-19 Corinna Vinschen <corinna@vinschen.de>
-
- * cygcheck.cc (dll_info): Handle x86_64 binaries. Make sure to print
- only architecture matching cygcheck build, otherwise suffer path
- evaluation problems.
-
-2013-02-17 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
-
- Fix 64-bit type problems in dumper.exe
- * dumper.cc: Througout, cast pid to unsigned int, change addresses
- and sizes from DWORD to SIZE_T, and use %p for pointer addresses.
- (dumper::add_mem_region): Change size type to SIZE_T.
- (dumper::split_add_mem_region): Ditto.
- * dumper.h (struct process_mem_region): Change size type to SIZE_T.
- (class exclusion): Change last, size, and step types to size_t.
- (exclusion::exclusion): Change argument type to size_t.
- (exclusion::add): Change mem_size type to SIZE_T.
- (dumper::add_mem_region): Change size type to SIZE_T.
- (dumper::split_add_mem_region): Ditto.
- (psapi_get_module_name): Change BaseAddress type to LPVOID.
- * module_info.cc (psapi_get_module_name): Ditto.
- * parse_pe.cc: Througout, change addresses and sizes from DWORD to
- SIZE_T, and use %p for pointer addresses.
- (exclusion::add): Change mem_size type to SIZE_T.
-
-2013-02-13 Corinna Vinschen <corinna@vinschen.de>
-
- * kill.cc (forcekill): Use unsigned int printf format specifier and
- cast to avoid compiler warnings where DWORD value is used.
- * regtool.cc: Ditto, throughout.
-
-2013-02-06 Corinna Vinschen <corinna@vinschen.de>
-
- * ldd.cc: Drop including inttypes.h. Use %u rather than PRIu32.
- * mount.cc: Fix type problem with %* expression.
- * cygcheck.cc: Ditto.
-
-2013-02-06 Corinna Vinschen <corinna@vinschen.de>
-
- Throughout, fix type problems on 32 and 64 bit. Except:
- * ssp.c: Disable entire functionality on x86_64 for now.
-
-2012-11-22 Corinna Vinschen <corinna@vinschen.de>
-
- * dump_setup.cc: Drop temporary workaround to handle older Mingw header
- files on Fedora 17.
- * strace.cc: Ditto.
-
-2012-08-16 Corinna Vinschen <corinna@vinschen.de>
-
- * ps.cc (main): Define uid correctly as uid_t.
-
-2012-08-16 Corinna Vinschen <corinna@vinschen.de>
-
- * cygcheck.cc: Change include path to not depend on installed
- cygwin/version.h.
- (_NOMNTENT_MACROS): Define before including mntent.h.
- * path.cc (_NOMNTENT_MACROS): Ditto.
- * dump_setup.cc: Add temporary workaround to handle older Mingw header
- files on Fedora 17.
- * strace.cc: Ditto.
-
-2012-08-13 Corinna Vinschen <corinna@vinschen.de>
-
- * ps.cc (main): Drop unneeded cast.
-
diff --git a/winsup/utils/Makefile.in b/winsup/utils/Makefile.in
deleted file mode 100644
index fe81d878e..000000000
--- a/winsup/utils/Makefile.in
+++ /dev/null
@@ -1,196 +0,0 @@
-# Makefile for Cygwin utilities
-# Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
-# 2007, 2008, 2009, 2010, 2011, 2012 Red Hat, Inc.
-
-# This file is part of Cygwin.
-
-# This software is a copyrighted work licensed under the terms of the
-# Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-# details.
-
-srcdir:=@srcdir@
-target_builddir:=@target_builddir@
-winsup_srcdir:=@winsup_srcdir@
-configure_args=@configure_args@
-
-export CC:=@CC@
-export CXX:=@CXX@
-
-CFLAGS:=@CFLAGS@
-CXXFLAGS:=@CXXFLAGS@
-override CXXFLAGS+=-fno-exceptions -fno-rtti
-
-include ${srcdir}/../Makefile.common
-
-cygwin_build:=${target_builddir}/winsup/cygwin
-
-cygwin_headers:=@cygwin_headers@
-
-# environment variables used by ccwrap
-export CCWRAP_HEADERS:=. ${srcdir} $(call justdir,${cygwin_headers})
-export CCWRAP_SYSTEM_HEADERS:=${cygwin_headers} @newlib_headers@
-export CCWRAP_DIRAFTER_HEADERS:=@windows_headers@
-
-WINDOWS_LIBDIR:=@windows_libdir@
-
-prefix:=@prefix@
-exec_prefix:=@exec_prefix@
-
-bindir:=@bindir@
-program_transform_name:=@program_transform_name@
-
-override INSTALL:=@INSTALL@
-override INSTALL_PROGRAM:=@INSTALL_PROGRAM@
-override INSTALL_DATA:=@INSTALL_DATA@
-
-EXEEXT:=@EXEEXT@
-EXEEXT_FOR_BUILD:=@EXEEXT_FOR_BUILD@
-
-.PHONY: all install clean realclean warn_dumper warn_cygcheck_zlib
-
-LDLIBS := -lnetapi32 -ladvapi32 -lkernel32 -luser32
-CYGWIN_LDFLAGS := -static -Wl,--enable-auto-import -L${WINDOWS_LIBDIR} $(LDLIBS)
-DEP_LDLIBS := $(cygwin_build)/libcygwin.a
-
-MINGW_CXX := @MINGW_CXX@
-
-# List all binaries to be linked in Cygwin mode. Each binary on this list
-# must have a corresponding .o of the same name.
-CYGWIN_BINS := ${addsuffix .exe,cygpath getconf getfacl ldd locale kill minidumper mkgroup \
- mkpasswd mount passwd pldd ps regtool setfacl setmetamode ssp tzset umount}
-
-# List all binaries to be linked in MinGW mode. Each binary on this list
-# must have a corresponding .o of the same name.
-MINGW_BINS := ${addsuffix .exe,cygcheck cygwin-console-helper ldh strace}
-
-# List all objects to be compiled in MinGW mode. Any object not on this
-# list will will be compiled in Cygwin mode implicitly, so there is no
-# need for a CYGWIN_OBJS.
-MINGW_OBJS := bloda.o cygcheck.o dump_setup.o ldh.o path.o strace.o
-MINGW_LDFLAGS:=-static
-
-CYGCHECK_OBJS:=cygcheck.o bloda.o path.o dump_setup.o
-ZLIB:=-lz
-
-.PHONY: all
-all:
-
-# If a binary should link in any objects besides the .o with the same
-# name as the binary, then list those here.
-strace.exe: path.o
-cygcheck.exe: cygcheck.o bloda.o path.o dump_setup.o
-
-path-mount.o: path.cc
- ${COMPILE.cc} -c -DFSTAB_ONLY -o $@ $<
-mount.exe: path-mount.o
-
-.PHONY: tzmap
-tzmap:
- ${srcdir}/tzmap-from-unicode.org > ${srcdir}/$@.h
-
-tzmap.h:
- [ -f "${srcdir}/tzmap.h" ] || ${srcdir}/tzmap-from-unicode.org > ${srcdir}/$@
-
-tzset.o: tzmap.h
-
-# Provide any necessary per-target variable overrides.
-
-cygcheck.exe: MINGW_LDFLAGS += ${ZLIB} -lwininet -lpsapi -lntdll
-cygcheck.exe: ${CYGCHECK_OBJS}
-
-cygpath.o: CXXFLAGS += -fno-threadsafe-statics
-cygpath.exe: CYGWIN_LDFLAGS += -lcygwin -luserenv -lntdll
-ps.exe: CYGWIN_LDFLAGS += -lcygwin -lpsapi -lntdll
-strace.exe: MINGW_LDFLAGS += -lntdll
-
-ldd.exe:CYGWIN_LDFLAGS += -lpsapi
-pldd.exe: CYGWIN_LDFLAGS += -lpsapi
-minidumper.exe: CYGWIN_LDFLAGS += -ldbghelp
-
-ldh.exe: MINGW_LDFLAGS += -nostdlib -lkernel32
-
-# Check for dumper's requirements and enable it if found.
-libbfd := $(call libname,libbfd.a)
-build_dumper := $(shell test -r "$(libbfd)" && echo 1)
-
-ifdef build_dumper
-CYGWIN_BINS += dumper.exe
-dumper.o module_info.o parse_pe.o: CXXFLAGS += -I$(top_srcdir)/include
-dumper.o parse_pe.o: dumper.h
-dumper.exe: module_info.o parse_pe.o
-dumper.exe: CYGWIN_LDFLAGS += -lpsapi -lbfd -lintl -liconv -liberty ${ZLIB}
-else
-all: warn_dumper
-endif
-
-all: Makefile $(CYGWIN_BINS) $(MINGW_BINS)
-
-# test harness support (note: the "MINGW_BINS +=" should come after the
-# "all:" above so that the testsuite is not run for "make" but only
-# "make check".)
-MINGW_BINS += testsuite.exe
-MINGW_OBJS += path-testsuite.o testsuite.o
-testsuite.exe: path-testsuite.o
-path-testsuite.cc: path.cc ; @test -L $@ || ln -sf ${filter %.cc,$^} $@
-path-testsuite.o: MINGW_CXXFLAGS += -DTESTSUITE
-# this is necessary because this .c lives in the build dir instead of src
-path-testsuite.o: MINGW_CXX := ${patsubst -I.,-I$(utils_source),$(MINGW_CXX)}
-path-testsuite.cc path.cc testsuite.cc: testsuite.h
-check: testsuite.exe ; $(<D)/$(<F)
-
-# the rest of this file contains generic rules
-
-# how to compile a MinGW object
-${MINGW_OBJS}: override CXX:=${MINGW_CXX}
-${MINGW_OBJS}: CCWRAP_HEADERS:=${srcdir}
-${MINGW_OBJS}: CCWRAP_SYSTEM_HEADERS:=
-# ${MINGW_OBJS}: CCWRAP_DIRAFTER_HEADERS:=
-$(MINGW_OBJS): %.o: %.cc
- c++wrap -c -o $@ ${CXXFLAGS} $(MINGW_CXXFLAGS) $<
-
-# how to link a MinGW binary
-$(MINGW_BINS): %.exe: %.o
- $(MINGW_CXX) $(MINGW_CXXFLAGS) -o $@ ${filter %.o,$^} $(MINGW_LDFLAGS)
-
-# how to link a Cygwin binary
-$(CYGWIN_BINS): %.exe: %.o
- ${CXX} -o $@ $(filter %.o,$^) -B${cygwin_build}/ ${LDFLAGS} ${CYGWIN_LDFLAGS}
-
-# note: how to compile a Cygwin object is covered by the pattern rule in Makefile.common
-
-# these dependencies ensure that the required in-tree libs are built first
-$(MINGW_BINS): $(DEP_LDLIBS)
-$(CYGWIN_BINS): $(DEP_LDLIBS)
-
-cygcheck.o cygpath.o module_info.o path.o ps.o regtool.o strace.o: loadlib.h
-
-.PHONY: clean
-clean:
- rm -f *.o $(CYGWIN_BINS) $(MINGW_BINS) path-testsuite.cc testsuite.exe
-
-.PHONY: realclean
-realclean: clean
- rm -f Makefile config.cache
-
-.PHONY: install
-install: all
- /bin/mkdir -p ${DESTDIR}${bindir}
- for i in $(CYGWIN_BINS) ${filter-out testsuite.exe,$(MINGW_BINS)} ; do \
- n=`echo $$i | sed '$(program_transform_name)'`; \
- $(INSTALL_PROGRAM) $$i $(DESTDIR)$(bindir)/$$n; \
- done
-
-$(cygwin_build)/libcygwin.a: $(cygwin_build)/Makefile
- @$(MAKE) -C $(@D) $(@F)
-
-.PHONY: warn_dumper
-warn_dumper:
- @echo '*** Not building dumper.exe since some required libraries or'
- @echo '*** or headers are missing. Potential candidates are:'
- @echo '*** bfd.h, libbfd.a, libiconv.a, or libintl.a'
- @echo '*** If you need this program, check out the naked-bfd and naked-intl'
- @echo '*** sources from sourceware.org. Then, configure and build these'
- @echo '*** libraries. Otherwise, you can safely ignore this warning.'
-
-Makefile: Makefile.in config.status
- /bin/sh ./config.status
diff --git a/winsup/utils/aclocal.m4 b/winsup/utils/aclocal.m4
deleted file mode 100644
index c48aad01d..000000000
--- a/winsup/utils/aclocal.m4
+++ /dev/null
@@ -1,97 +0,0 @@
-# generated automatically by aclocal 1.12.6 -*- Autoconf -*-
-
-# Copyright (C) 1996-2012 Free Software Foundation, Inc.
-
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-dnl This provides configure definitions used by all the cygwin
-dnl configure.in files.
-
-AC_DEFUN([AC_WINDOWS_HEADERS],[
-AC_ARG_WITH(
- [windows-headers],
- [AS_HELP_STRING([--with-windows-headers=DIR],
- [specify where the windows includes are located])],
- [test -z "$withval" && AC_MSG_ERROR([must specify value for --with-windows-headers])]
-)
-])
-
-AC_DEFUN([AC_WINDOWS_LIBS],[
-AC_ARG_WITH(
- [windows-libs],
- [AS_HELP_STRING([--with-windows-libs=DIR],
- [specify where the windows libraries are located])],
- [test -z "$withval" && AC_MSG_ERROR([must specify value for --with-windows-libs])]
-)
-windows_libdir=$(realdirpath "$with_windows_libs")
-if test -z "$windows_libdir"; then
- windows_libdir=$(realdirpath $(${ac_cv_prog_CC:-$CC} -xc /dev/null -Wl,--verbose=1 -lntdll 2>&1 | sed -rn 's%^.*\s(\S+)/libntdll\..*succeeded%\1%p'))
- if test -z "$windows_libdir"; then
- AC_MSG_ERROR([cannot find windows library files])
- fi
-fi
-AC_SUBST(windows_libdir)
-]
-)
-
-AC_DEFUN([AC_CYGWIN_INCLUDES], [
-addto_CPPFLAGS -nostdinc
-: ${ac_cv_prog_CXX:=$CXX}
-: ${ac_cv_prog_CC:=$CC}
-
-cygwin_headers=$(realdirpath "$winsup_srcdir/cygwin/include")
-if test -z "$cygwin_headers"; then
- AC_MSG_ERROR([cannot find $winsup_srcdir/cygwin/include directory])
-fi
-
-newlib_headers=$(realdirpath $winsup_srcdir/../newlib/libc/include)
-if test -z "$newlib_headers"; then
- AC_MSG_ERROR([cannot find newlib source directory: $winsup_srcdir/../newlib/libc/include])
-fi
-newlib_headers="$target_builddir/newlib/targ-include $newlib_headers"
-
-if test -n "$with_windows_headers"; then
- if test -e "$with_windows_headers/windef.h"; then
- windows_headers="$with_windows_headers"
- else
- AC_MSG_ERROR([cannot find windef.h in specified --with-windows-headers path: $saw_windows_headers]);
- fi
-elif test -d "$winsup_srcdir/w32api/include/windef.h"; then
- windows_headers="$winsup_srcdir/w32api/include"
-else
- windows_headers=$(cd $($ac_cv_prog_CC -xc /dev/null -E -include windef.h 2>/dev/null | sed -n 's%^# 1 "\([^"]*\)/windef\.h".*$%\1%p' | head -n1) 2>/dev/null && pwd)
- if test -z "$windows_headers" -o ! -d "$windows_headers"; then
- AC_MSG_ERROR([cannot find windows header files])
- fi
-fi
-CC=$ac_cv_prog_CC
-CXX=$ac_cv_prog_CXX
-export CC
-export CXX
-AC_SUBST(windows_headers)
-AC_SUBST(newlib_headers)
-AC_SUBST(cygwin_headers)
-])
-
-AC_DEFUN([AC_CONFIGURE_ARGS], [
-configure_args=X
-for f in $ac_configure_args; do
- case "$f" in
- *--srcdir*) ;;
- *) configure_args="$configure_args $f" ;;
- esac
-done
-configure_args=$(/usr/bin/expr "$configure_args" : 'X \(.*\)')
-AC_SUBST(configure_args)
-])
-
-AC_SUBST(target_builddir)
-AC_SUBST(winsup_srcdir)
-
diff --git a/winsup/utils/autogen.sh b/winsup/utils/autogen.sh
deleted file mode 100755
index 87a0d9c06..000000000
--- a/winsup/utils/autogen.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh -e
-/usr/bin/aclocal --acdir=..
-/usr/bin/autoconf -f
-exec /bin/rm -rf autom4te.cache
diff --git a/winsup/utils/bloda.cc b/winsup/utils/bloda.cc
deleted file mode 100644
index 6ff433fa9..000000000
--- a/winsup/utils/bloda.cc
+++ /dev/null
@@ -1,424 +0,0 @@
-/* bloda.cc
-
- Copyright 2007, 2008, 2011, 2012 Red Hat, Inc.
-
- This file is part of Cygwin.
-
- This software is a copyrighted work licensed under the terms of the
- Cygwin license. Please consult the file "CYGWIN_LICENSE" for
- details. */
-
-#define cygwin_internal cygwin_internal_dontuse
-#include <stdio.h>
-#include <assert.h>
-#define WIN32_NO_STATUS /* Disable status codes in winnt.h since we include
- ntstatus.h for extended status codes below. */
-#include <windows.h>
-#undef WIN32_NO_STATUS
-#include <psapi.h>
-#include <winternl.h>
-#include <ntstatus.h>
-#undef cygwin_internal
-
-#undef DEBUGGING
-#ifdef DEBUGGING
-#define dbg_printf(ARGS) printf ARGS ; fflush (NULL)
-#else /* !DEBUGGING */
-#define dbg_printf(ARGS) do { } while (0)
-#endif /* ?DEBUGGING */
-
-/* This module detects applications from the Big List of Dodgy Apps,
- a list of applications that have at some given time been shown to
- interfere with the operation of cygwin. It detects the presence of
- applications on the system by looking for any of four traces an
- installation might leave: 1) registry keys, 2) files on disk
- 3) running executables 4) loaded dlls or drivers.
-
- At the time of writing, the BLODA amounts to:-
-
- Sonic Solutions burning software containing DLA component
- Norton/MacAffee/Symantec antivirus or antispyware
- Logitech webcam software with "Logitech process monitor" service
- Kerio, Agnitum or ZoneAlarm Personal Firewall
- Iolo System Mechanic/AntiVirus/Firewall
- LanDesk
- Windows Defender
- Embassy Trust Suite fingerprint reader software containing wxvault.dll
- ByteMobile laptop optimization client
-
- A live version is now being maintained in the Cygwin FAQ, at
- http://cygwin.com/faq/faq.using.html#faq.using.bloda
-
-*/
-
-enum bad_app
-{
- SONIC, NORTON, MACAFFEE, SYMANTEC,
- LOGITECH, KERIO, AGNITUM, ZONEALARM,
- IOLO, LANDESK, WINDEFENDER, EMBASSYTS,
- BYTEMOBILE
-};
-
-struct bad_app_info
-{
- enum bad_app app_id;
- const char *details;
- char found_it;
-};
-
-enum bad_app_det_method
-{
- HKLMKEY, HKCUKEY, FILENAME, PROCESSNAME, HOOKDLLNAME
-};
-
-struct bad_app_det
-{
- enum bad_app_det_method type;
- const char *param;
- enum bad_app app;
-};
-
-static const struct bad_app_det dodgy_app_detects[] =
-{
- { PROCESSNAME, "dlactrlw.exe", SONIC },
- { HOOKDLLNAME, "wxvault.dll", EMBASSYTS },
- { HKLMKEY, "SYSTEM\\CurrentControlSet\\Services\\vsdatant", ZONEALARM },
- { FILENAME, "%windir%\\System32\\vsdatant.sys", ZONEALARM },
- { HKLMKEY, "SYSTEM\\CurrentControlSet\\Services\\lvprcsrv", LOGITECH },
- { PROCESSNAME, "LVPrcSrv.exe", LOGITECH },
- { FILENAME, "%programfiles%\\common files\\logitech\\lvmvfm\\LVPrcSrv.exe", LOGITECH },
- { FILENAME, "%windir%\\System32\\bmnet.dll", BYTEMOBILE },
-};
-
-static const size_t num_of_detects = sizeof (dodgy_app_detects) / sizeof (dodgy_app_detects[0]);
-
-static struct bad_app_info big_list_of_dodgy_apps[] =
-{
- { SONIC, "Sonic Solutions burning software containing DLA component" },
- { NORTON, "Norton antivirus or antispyware software" },
- { MACAFFEE, "Macaffee antivirus or antispyware software" },
- { SYMANTEC, "Symantec antivirus or antispyware software" },
- { LOGITECH, "Logitech Process Monitor service" },
- { KERIO, "Kerio Personal Firewall" },
- { AGNITUM, "Agnitum Personal Firewall" },
- { ZONEALARM, "ZoneAlarm Personal Firewall" },
- { IOLO, "Iolo System Mechanic/AntiVirus/Firewall software" },
- { LANDESK, "Landesk" },
- { WINDEFENDER, "Windows Defender" },
- { EMBASSYTS, "Embassy Trust Suite fingerprint reader software containing wxvault.dll" },
- { BYTEMOBILE, "ByteMobile laptop optimization client" },
-};
-
-static const size_t num_of_dodgy_apps = sizeof (big_list_of_dodgy_apps) / sizeof (big_list_of_dodgy_apps[0]);
-
-struct system_module_list
-{
- LONG count;
- PVOID *pid;
- PCHAR *name;
-};
-
-static PSYSTEM_PROCESS_INFORMATION
-get_process_list (void)
-{
- int n_procs = 0x100;
- PSYSTEM_PROCESS_INFORMATION pslist = (PSYSTEM_PROCESS_INFORMATION) malloc (n_procs * sizeof *pslist);
-
- while (NtQuerySystemInformation (SystemProcessInformation,
- pslist, n_procs * sizeof *pslist, 0) == STATUS_INFO_LENGTH_MISMATCH)
- {
- n_procs *= 2;
- free (pslist);
- pslist = (PSYSTEM_PROCESS_INFORMATION) malloc (n_procs * sizeof *pslist);
- }
- return pslist;
-}
-
-static system_module_list *
-get_module_list (void)
-{
- DWORD modsize = 0;
- system_module_list *modlist = (system_module_list *)
- calloc (1, sizeof (system_module_list));
- while (!EnumDeviceDrivers (modlist->pid, modsize, &modsize))
- {
- free (modlist->pid);
- free (modlist->name);
- modlist->count = modsize / sizeof (PVOID);
- modlist->pid = (PVOID *) calloc (modlist->count, sizeof (PVOID));
- modlist->name = (PCHAR *) calloc (modlist->count, sizeof (PCHAR));
- }
- for (int i = 0; i < modlist->count; ++i)
- {
- modlist->name[0] = (PCHAR) calloc (256, sizeof (CHAR));
- GetDeviceDriverBaseNameA (modlist->pid[i], modlist->name[i], 256);
- }
- return modlist;
-}
-
-static bool
-find_process_in_list (PSYSTEM_PROCESS_INFORMATION pslist, PUNICODE_STRING psname)
-{
- while (1)
- {
- if (pslist->ImageName.Length && pslist->ImageName.Buffer)
- {
- dbg_printf (("%S\n", pslist->ImageName.Buffer));
- if (!_wcsicmp (pslist->ImageName.Buffer, psname->Buffer))
- return true;
- }
- if (!pslist->NextEntryOffset)
- break;
- pslist = (PSYSTEM_PROCESS_INFORMATION)(pslist->NextEntryOffset + (char *)pslist);
- };
- return false;
-}
-
-static bool
-find_module_in_list (system_module_list * modlist, const char * const modname)
-{
- for (int i = 0; i < modlist->count; ++i)
- {
- dbg_printf (("name '%s' ", modlist->name[i]));
- if (!_stricmp (modlist->name[i], modname))
- return true;
- }
- return false;
-}
-
-static bool
-expand_path (const char *path, char *outbuf)
-{
- char *dst = outbuf;
- const char *end, *envval;
- char envvar[MAX_PATH];
- size_t len;
-
- while ((dst - outbuf) < MAX_PATH)
- {
- if (*path != '%')
- {
- if ((*dst++ = *path++) != 0)
- continue;
- break;
- }
- /* Expand an environ var. */
- end = path + 1;
- while (*end != '%')
- {
- /* Watch out for unterminated % */
- if (*end++ == 0)
- {
- end = NULL;
- break;
- }
- }
- /* If we didn't find the end, can't expand it. */
- if ((end == NULL) || (end == (path + 1)))
- {
- /* Unterminated % so copy verbatim. */
- *dst++ = *path++;
- continue;
- }
- /* Expand the environment var into the new path. */
- if ((end - (path + 1)) >= MAX_PATH)
- return -1;
- memcpy (envvar, path + 1, end - (path + 1));
- envvar[end - (path + 1)] = 0;
- envval = getenv (envvar);
- /* If not found, copy env var name verbatim. */
- if (envval == NULL)
- {
- *dst++ = *path++;
- continue;
- }
- /* Check enough room before copying. */
- len = strlen (envval);
- if ((dst + len - outbuf) >= MAX_PATH)
- return false;
- memcpy (dst, envval, len);
- dst += len;
- /* And carry on past the end of env var name. */
- path = end + 1;
- }
- return (dst - outbuf) < MAX_PATH;
-}
-
-static bool
-detect_dodgy_app (const struct bad_app_det *det, PSYSTEM_PROCESS_INFORMATION pslist, system_module_list * modlist)
-{
- HANDLE fh;
- HKEY hk;
- UNICODE_STRING unicodename;
- ANSI_STRING ansiname;
- NTSTATUS rv;
- bool found;
- char expandedname[MAX_PATH];
-
- switch (det->type)
- {
- case HKLMKEY:
- dbg_printf (("Detect reg key hklm '%s'... ", det->param));
- if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, det->param, 0, STANDARD_RIGHTS_READ, &hk) == ERROR_SUCCESS)
- {
- RegCloseKey (hk);
- dbg_printf (("found!\n"));
- return true;
- }
- break;
-
- case HKCUKEY:
- dbg_printf (("Detect reg key hkcu '%s'... ", det->param));
- if (RegOpenKeyEx (HKEY_CURRENT_USER, det->param, 0, STANDARD_RIGHTS_READ, &hk) == ERROR_SUCCESS)
- {
- RegCloseKey (hk);
- dbg_printf (("found!\n"));
- return true;
- }
- break;
-
- case FILENAME:
- dbg_printf (("Detect filename '%s'... ", det->param));
- if (!expand_path (det->param, expandedname))
- {
- printf ("Expansion failure!\n");
- break;
- }
- dbg_printf (("('%s' after expansion)... ", expandedname));
- fh = CreateFile (expandedname, 0, FILE_SHARE_READ | FILE_SHARE_WRITE
- | FILE_SHARE_DELETE, NULL, OPEN_EXISTING, 0, NULL);
- if (fh != INVALID_HANDLE_VALUE)
- {
- CloseHandle (fh);
- dbg_printf (("found!\n"));
- return true;
- }
- break;
-
- case PROCESSNAME:
- dbg_printf (("Detect proc name '%s'... ", det->param));
- /* Equivalent of RtlInitAnsiString. */
- ansiname.Length = ansiname.MaximumLength = strlen (det->param);
- ansiname.Buffer = (CHAR *) det->param;
- rv = RtlAnsiStringToUnicodeString (&unicodename, &ansiname, TRUE);
- if (rv != STATUS_SUCCESS)
- {
- printf ("Ansi to unicode conversion failure $%08x\n", (unsigned int) rv);
- break;
- }
- found = find_process_in_list (pslist, &unicodename);
- RtlFreeUnicodeString (&unicodename);
- if (found)
- {
- dbg_printf (("found!\n"));
- return true;
- }
- break;
-
- case HOOKDLLNAME:
- dbg_printf (("Detect hookdll '%s'... ", det->param));
- if (find_module_in_list (modlist, det->param))
- {
- dbg_printf (("found!\n"));
- return true;
- }
- break;
-
- }
- dbg_printf (("not found.\n"));
- return false;
-}
-
-static struct bad_app_info *
-find_dodgy_app_info (enum bad_app which_app)
-{
- size_t i;
- for (i = 0; i < num_of_dodgy_apps; i++)
- {
- if (big_list_of_dodgy_apps[i].app_id == which_app)
- return &big_list_of_dodgy_apps[i];
- }
- return NULL;
-}
-
-/* External entrypoint called from cygcheck.cc/dump_sysinfo. */
-void
-dump_dodgy_apps (int verbose)
-{
- size_t i, n_det = 0;
- PSYSTEM_PROCESS_INFORMATION pslist;
- system_module_list * modlist;
-
- /* Read system info for detect testing. */
- pslist = get_process_list ();
- modlist = get_module_list ();
-
- /* Go with builtin list for now; later may enhance to
- read dodgy apps from a file or download from an URL. */
- for (i = 0; i < num_of_dodgy_apps; i++)
- {
- big_list_of_dodgy_apps[i].found_it = false;
- }
-
- for (i = 0; i < num_of_detects; i++)
- {
- const struct bad_app_det *det = &dodgy_app_detects[i];
- struct bad_app_info *found = find_dodgy_app_info (det->app);
- bool detected = detect_dodgy_app (det, pslist, modlist);
-
- /* Not found would mean we coded the lists bad. */
- assert (found);
- if (detected)
- {
- ++n_det;
- found->found_it |= (1 << det->type);
- }
- }
- if (n_det)
- {
- printf ("\nPotential app conflicts:\n\n");
- for (i = 0; i < num_of_dodgy_apps; i++)
- {
- if (big_list_of_dodgy_apps[i].found_it)
- {
- printf ("%s%s", big_list_of_dodgy_apps[i].details,
- verbose ? "\nDetected: " : ".\n");
- if (!verbose)
- continue;
- const char *sep = "";
- if (big_list_of_dodgy_apps[i].found_it & (1 << HKLMKEY))
- {
- printf ("HKLM Registry Key");
- sep = ", ";
- }
- if (big_list_of_dodgy_apps[i].found_it & (1 << HKCUKEY))
- {
- printf ("%sHKCU Registry Key", sep);
- sep = ", ";
- }
- if (big_list_of_dodgy_apps[i].found_it & (1 << FILENAME))
- {
- printf ("%sNamed file", sep);
- sep = ", ";
- }
- if (big_list_of_dodgy_apps[i].found_it & (1 << PROCESSNAME))
- {
- printf ("%sNamed process", sep);
- sep = ", ";
- }
- if (big_list_of_dodgy_apps[i].found_it & (1 << HOOKDLLNAME))
- {
- printf ("%sLoaded hook DLL", sep);
- }
- printf (".\n\n");
- }
- }
- }
- /* Tidy up allocations. */
- free (pslist);
- for (int i = 0; i < modlist->count; ++i)
- free (modlist->name[i]);
- free (modlist->name);
- free (modlist->pid);
-}
-
diff --git a/winsup/utils/configure b/winsup/utils/configure
deleted file mode 100755
index 5cf181edd..000000000
--- a/winsup/utils/configure
+++ /dev/null
@@ -1,4482 +0,0 @@
-#! /bin/sh
-# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for Cygwin Utils 0.
-#
-# Report bugs to <cygwin@cygwin.com>.
-#
-#
-# Copyright (C) 1992-1996, 1998-2012 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 more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in #(
- *posix*) :
- set -o posix ;; #(
- *) :
- ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- PATH_SEPARATOR=:
- (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
- (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
- PATH_SEPARATOR=';'
- }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
-# Find who we are. Look in the path if we contain no directory separator.
-as_myself=
-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
-IFS=$as_save_IFS
-
- ;;
-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
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
- exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-# Use a proper internal environment variable to ensure we don't fall
- # into an infinite loop, continuously re-executing ourselves.
- if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
- _as_can_reexec=no; export _as_can_reexec;
- # We cannot yet assume a decent shell, so we have to provide a
-# neutralization value for shells without unset; and this also
-# works around shells that cannot unset nonexistent variables.
-# Preserve -v and -x to the replacement shell.
-BASH_ENV=/dev/null
-ENV=/dev/null
-(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-case $- in # ((((
- *v*x* | *x*v* ) as_opts=-vx ;;
- *v* ) as_opts=-v ;;
- *x* ) as_opts=-x ;;
- * ) as_opts= ;;
-esac
-exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
-# Admittedly, this is quite paranoid, since all the known shells bail
-# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-as_fn_exit 255
- fi
- # We don't want this to propagate to other subprocesses.
- { _as_can_reexec=; unset _as_can_reexec;}
-if test "x$CONFIG_SHELL" = x; then
- as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '\${1+\"\$@\"}'='\"\$@\"'
- setopt NO_GLOB_SUBST
-else
- case \`(set -o) 2>/dev/null\` in #(
- *posix*) :
- set -o posix ;; #(
- *) :
- ;;
-esac
-fi
-"
- as_required="as_fn_return () { (exit \$1); }
-as_fn_success () { as_fn_return 0; }
-as_fn_failure () { as_fn_return 1; }
-as_fn_ret_success () { return 0; }
-as_fn_ret_failure () { return 1; }
-
-exitcode=0
-as_fn_success || { exitcode=1; echo as_fn_success failed.; }
-as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
-as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
-as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
-if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
-
-else
- exitcode=1; echo positional parameters were not saved.
-fi
-test x\$exitcode = x0 || exit 1
-test -x / || exit 1"
- as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
- as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
- eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
- test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1"
- if (eval "$as_required") 2>/dev/null; then :
- as_have_required=yes
-else
- as_have_required=no
-fi
- if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
-
-else
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-as_found=false
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- as_found=:
- case $as_dir in #(
- /*)
- for as_base in sh bash ksh sh5; do
- # Try only shells that exist, to save several forks.
- as_shell=$as_dir/$as_base
- if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
- CONFIG_SHELL=$as_shell as_have_required=yes
- if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
- break 2
-fi
-fi
- done;;
- esac
- as_found=false
-done
-$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
- CONFIG_SHELL=$SHELL as_have_required=yes
-fi; }
-IFS=$as_save_IFS
-
-
- if test "x$CONFIG_SHELL" != x; then :
- export CONFIG_SHELL
- # We cannot yet assume a decent shell, so we have to provide a
-# neutralization value for shells without unset; and this also
-# works around shells that cannot unset nonexistent variables.
-# Preserve -v and -x to the replacement shell.
-BASH_ENV=/dev/null
-ENV=/dev/null
-(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-case $- in # ((((
- *v*x* | *x*v* ) as_opts=-vx ;;
- *v* ) as_opts=-v ;;
- *x* ) as_opts=-x ;;
- * ) as_opts= ;;
-esac
-exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
-# Admittedly, this is quite paranoid, since all the known shells bail
-# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-exit 255
-fi
-
- if test x$as_have_required = xno; then :
- $as_echo "$0: This script requires a shell more modern than all"
- $as_echo "$0: the shells that I found on your system."
- if test x${ZSH_VERSION+set} = xset ; then
- $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
- $as_echo "$0: be upgraded to zsh 4.3.4 or later."
- else
- $as_echo "$0: Please tell bug-autoconf@gnu.org and cygwin@cygwin.com
-$0: about your system, including any error possibly output
-$0: before this message. Then install a modern shell, or
-$0: manually run the script under such a shell if you do
-$0: have one."
- fi
- exit 1
-fi
-fi
-fi
-SHELL=${CONFIG_SHELL-/bin/sh}
-export SHELL
-# Unset more variables known to interfere with behavior of common tools.
-CLICOLOR_FORCE= GREP_OPTIONS=
-unset CLICOLOR_FORCE GREP_OPTIONS
-
-## --------------------- ##
-## M4sh Shell Functions. ##
-## --------------------- ##
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
- { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
- return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
- set +e
- as_fn_set_status $1
- exit $1
-} # as_fn_exit
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
- case $as_dir in #(
- -*) as_dir=./$as_dir;;
- esac
- test -d "$as_dir" || eval $as_mkdir_p || {
- as_dirs=
- while :; do
- case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
- *) as_qdir=$as_dir;;
- esac
- as_dirs="'$as_qdir' $as_dirs"
- as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- test -d "$as_dir" && break
- done
- test -z "$as_dirs" || eval "mkdir $as_dirs"
- } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-
-# as_fn_executable_p FILE
-# -----------------------
-# Test if FILE is an executable regular file.
-as_fn_executable_p ()
-{
- test -f "$1" && test -x "$1"
-} # as_fn_executable_p
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
- eval 'as_fn_append ()
- {
- eval $1+=\$2
- }'
-else
- as_fn_append ()
- {
- eval $1=\$$1\$2
- }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
- eval 'as_fn_arith ()
- {
- as_val=$(( $* ))
- }'
-else
- as_fn_arith ()
- {
- as_val=`expr "$@" || test $? -eq 1`
- }
-fi # as_fn_arith
-
-
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
-as_fn_error ()
-{
- as_status=$1; test $as_status -eq 0 && as_status=1
- if test "$4"; then
- as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
- fi
- $as_echo "$as_me: error: $2" >&2
- as_fn_exit $as_status
-} # as_fn_error
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; 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
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
- }
- /^X\/\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\/\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
-
-# 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
-
-
- as_lineno_1=$LINENO as_lineno_1a=$LINENO
- as_lineno_2=$LINENO as_lineno_2a=$LINENO
- eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
- test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
- # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
- sed -n '
- p
- /[$]LINENO/=
- ' <$as_myself |
- sed '
- s/[$]LINENO.*/&-/
- t lineno
- b
- :lineno
- N
- :loop
- s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
- t loop
- s/-\n.*//
- ' >$as_me.lineno &&
- chmod +x "$as_me.lineno" ||
- { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
-
- # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
- # already done that, so ensure we don't try to do so again and fall
- # in an infinite loop. This has already happened in practice.
- _as_can_reexec=no; export _as_can_reexec
- # 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 sensitive to this).
- . "./$as_me.lineno"
- # Exit status is that of the last command.
- exit
-}
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
- case `echo 'xy\c'` in
- *c*) ECHO_T=' ';; # ECHO_T is single tab character.
- xy) ECHO_C='\c';;
- *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
- ECHO_T=' ';;
- esac;;
-*)
- ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
- rm -f conf$$.dir/conf$$.file
-else
- rm -f conf$$.dir
- mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
- if ln -s conf$$.file conf$$ 2>/dev/null; then
- as_ln_s='ln -s'
- # ... but there are two gotchas:
- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -pR'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -pR'
- elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
- else
- as_ln_s='cp -pR'
- fi
-else
- as_ln_s='cp -pR'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p='mkdir -p "$as_dir"'
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-as_test_x='test -x'
-as_executable_p=as_fn_executable_p
-
-# 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'"
-
-
-test -n "$DJDIR" || exec 7<&0 </dev/null
-exec 6>&1
-
-# Name of the host.
-# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
-# so uname gets run too.
-ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
-
-#
-# Initializations.
-#
-ac_default_prefix=/usr/local
-ac_clean_files=
-ac_config_libobj_dir=.
-LIBOBJS=
-cross_compiling=no
-subdirs=
-MFLAGS=
-MAKEFLAGS=
-
-# Identity of this package.
-PACKAGE_NAME='Cygwin Utils'
-PACKAGE_TARNAME='cygwin'
-PACKAGE_VERSION='0'
-PACKAGE_STRING='Cygwin Utils 0'
-PACKAGE_BUGREPORT='cygwin@cygwin.com'
-PACKAGE_URL='https://cygwin.com'
-
-ac_unique_file="mount.cc"
-ac_no_link=no
-ac_subst_vars='LTLIBOBJS
-LIBOBJS
-configure_args
-MINGW_CXX
-INSTALL_DATA
-INSTALL_SCRIPT
-INSTALL_PROGRAM
-cygwin_headers
-newlib_headers
-windows_headers
-ac_ct_CXX
-CXXFLAGS
-CXX
-windows_libdir
-OBJEXT
-EXEEXT
-ac_ct_CC
-CPPFLAGS
-LDFLAGS
-CFLAGS
-CC
-target_os
-target_vendor
-target_cpu
-target
-host_os
-host_vendor
-host_cpu
-host
-build_os
-build_vendor
-build_cpu
-build
-target_alias
-host_alias
-build_alias
-LIBS
-ECHO_T
-ECHO_N
-ECHO_C
-DEFS
-mandir
-localedir
-libdir
-psdir
-pdfdir
-dvidir
-htmldir
-infodir
-docdir
-oldincludedir
-includedir
-localstatedir
-sharedstatedir
-sysconfdir
-datadir
-datarootdir
-libexecdir
-sbindir
-bindir
-program_transform_name
-prefix
-exec_prefix
-PACKAGE_URL
-PACKAGE_BUGREPORT
-PACKAGE_STRING
-PACKAGE_VERSION
-PACKAGE_TARNAME
-PACKAGE_NAME
-PATH_SEPARATOR
-SHELL
-winsup_srcdir
-target_builddir'
-ac_subst_files=''
-ac_user_opts='
-enable_option_checking
-with_windows_headers
-with_windows_libs
-'
- ac_precious_vars='build_alias
-host_alias
-target_alias
-CC
-CFLAGS
-LDFLAGS
-LIBS
-CPPFLAGS
-CXX
-CXXFLAGS
-CCC'
-
-
-# Initialize some variables set by options.
-ac_init_help=
-ac_init_version=false
-ac_unrecognized_opts=
-ac_unrecognized_sep=
-# 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.
-# (The list follows the same order as the GNU Coding Standards.)
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datarootdir='${prefix}/share'
-datadir='${datarootdir}'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
-infodir='${datarootdir}/info'
-htmldir='${docdir}'
-dvidir='${docdir}'
-pdfdir='${docdir}'
-psdir='${docdir}'
-libdir='${exec_prefix}/lib'
-localedir='${datarootdir}/locale'
-mandir='${datarootdir}/man'
-
-ac_prev=
-ac_dashdash=
-for ac_option
-do
- # If the previous option needs an argument, assign it.
- if test -n "$ac_prev"; then
- eval $ac_prev=\$ac_option
- ac_prev=
- continue
- fi
-
- case $ac_option in
- *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
- *=) ac_optarg= ;;
- *) ac_optarg=yes ;;
- esac
-
- # Accept the important Cygnus configure options, so we can diagnose typos.
-
- case $ac_dashdash$ac_option in
- --)
- ac_dashdash=yes ;;
-
- -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)
- ac_prev=datadir ;;
- -datadir=* | --datadir=* | --datadi=* | --datad=*)
- datadir=$ac_optarg ;;
-
- -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
- | --dataroo | --dataro | --datar)
- ac_prev=datarootdir ;;
- -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
- | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
- datarootdir=$ac_optarg ;;
-
- -disable-* | --disable-*)
- ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid feature name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"enable_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval enable_$ac_useropt=no ;;
-
- -docdir | --docdir | --docdi | --doc | --do)
- ac_prev=docdir ;;
- -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
- docdir=$ac_optarg ;;
-
- -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
- ac_prev=dvidir ;;
- -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
- dvidir=$ac_optarg ;;
-
- -enable-* | --enable-*)
- ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid feature name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"enable_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval enable_$ac_useropt=\$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 ;;
-
- -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
- ac_prev=htmldir ;;
- -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
- | --ht=*)
- htmldir=$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 ;;
-
- -localedir | --localedir | --localedi | --localed | --locale)
- ac_prev=localedir ;;
- -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
- localedir=$ac_optarg ;;
-
- -localstatedir | --localstatedir | --localstatedi | --localstated \
- | --localstate | --localstat | --localsta | --localst | --locals)
- ac_prev=localstatedir ;;
- -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
- | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
- 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 ;;
-
- -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
- ac_prev=pdfdir ;;
- -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
- pdfdir=$ac_optarg ;;
-
- -psdir | --psdir | --psdi | --psd | --ps)
- ac_prev=psdir ;;
- -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
- psdir=$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_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid package name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"with_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval with_$ac_useropt=\$ac_optarg ;;
-
- -without-* | --without-*)
- ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid package name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"with_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval with_$ac_useropt=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 ;;
-
- -*) as_fn_error $? "unrecognized option: \`$ac_option'
-Try \`$0 --help' for more information"
- ;;
-
- *=*)
- ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
- # Reject names that are not valid shell variable names.
- case $ac_envvar in #(
- '' | [0-9]* | *[!_$as_cr_alnum]* )
- as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
- esac
- eval $ac_envvar=\$ac_optarg
- export $ac_envvar ;;
-
- *)
- # FIXME: should be removed in autoconf 3.0.
- $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
- expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- $as_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'`
- as_fn_error $? "missing argument to $ac_option"
-fi
-
-if test -n "$ac_unrecognized_opts"; then
- case $enable_option_checking in
- no) ;;
- fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
- *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
- esac
-fi
-
-# Check all directory arguments for consistency.
-for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
- datadir sysconfdir sharedstatedir localstatedir includedir \
- oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
- libdir localedir mandir
-do
- eval ac_val=\$$ac_var
- # Remove trailing slashes.
- case $ac_val in
- */ )
- ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
- eval $ac_var=\$ac_val;;
- esac
- # Be sure to have absolute directory names.
- case $ac_val in
- [\\/$]* | ?:[\\/]* ) continue;;
- NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
- esac
- as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
-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
- 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
-
-
-ac_pwd=`pwd` && test -n "$ac_pwd" &&
-ac_ls_di=`ls -di .` &&
-ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
- as_fn_error $? "working directory cannot be determined"
-test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
- as_fn_error $? "pwd does not report name of working directory"
-
-
-# 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 the parent directory.
- ac_confdir=`$as_dirname -- "$as_myself" ||
-$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_myself" : 'X\(//\)[^/]' \| \
- X"$as_myself" : 'X\(//\)$' \| \
- X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_myself" |
- 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
- test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
- as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
-fi
-ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
-ac_abs_confdir=`(
- cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
- pwd)`
-# When building in place, set srcdir=.
-if test "$ac_abs_confdir" = "$ac_pwd"; then
- srcdir=.
-fi
-# Remove unnecessary trailing slashes from srcdir.
-# Double slashes in file names in object file debugging info
-# mess up M-x gdb in Emacs.
-case $srcdir in
-*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
-esac
-for ac_var in $ac_precious_vars; do
- eval ac_env_${ac_var}_set=\${${ac_var}+set}
- eval ac_env_${ac_var}_value=\$${ac_var}
- eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
- eval ac_cv_env_${ac_var}_value=\$${ac_var}
-done
-
-#
-# 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 Cygwin Utils 0 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 \`..']
-
-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]
- --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]
- --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
- --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
- --infodir=DIR info documentation [DATAROOTDIR/info]
- --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
- --mandir=DIR man documentation [DATAROOTDIR/man]
- --docdir=DIR documentation root [DATAROOTDIR/doc/cygwin]
- --htmldir=DIR html documentation [DOCDIR]
- --dvidir=DIR dvi documentation [DOCDIR]
- --pdfdir=DIR pdf documentation [DOCDIR]
- --psdir=DIR ps documentation [DOCDIR]
-_ACEOF
-
- cat <<\_ACEOF
-
-Program names:
- --program-prefix=PREFIX prepend PREFIX to installed program names
- --program-suffix=SUFFIX append SUFFIX to installed program names
- --program-transform-name=PROGRAM run sed PROGRAM on installed program names
-
-System types:
- --build=BUILD configure for building on BUILD [guessed]
- --host=HOST cross-compile to build programs to run on HOST [BUILD]
- --target=TARGET configure for building compilers for TARGET [HOST]
-_ACEOF
-fi
-
-if test -n "$ac_init_help"; then
- case $ac_init_help in
- short | recursive ) echo "Configuration of Cygwin Utils 0:";;
- esac
- cat <<\_ACEOF
-
-Optional Packages:
- --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
- --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
- --with-windows-headers=DIR
- specify where the windows includes are located
- --with-windows-libs=DIR specify where the windows libraries are located
-
-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>
- LIBS libraries to pass to the linker, e.g. -l<library>
- CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
- you have headers in a nonstandard directory <include dir>
- CXX C++ compiler command
- CXXFLAGS C++ compiler flags
-
-Use these variables to override the choices made by `configure' or to help
-it to find libraries and programs with nonstandard names/locations.
-
-Report bugs to <cygwin@cygwin.com>.
-Cygwin Utils home page: <https://cygwin.com>.
-_ACEOF
-ac_status=$?
-fi
-
-if test "$ac_init_help" = "recursive"; then
- # If there are subdirs, report their specific --help.
- for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
- test -d "$ac_dir" ||
- { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
- continue
- ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
- # A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
- esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
- .) # We are building in place.
- ac_srcdir=.
- ac_top_srcdir=$ac_top_builddir_sub
- ac_abs_top_srcdir=$ac_pwd ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir
- ac_abs_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_build_prefix$srcdir
- ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
- cd "$ac_dir" || { ac_status=$?; continue; }
- # Check for guested 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
- else
- $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
- fi || ac_status=$?
- cd "$ac_pwd" || { ac_status=$?; break; }
- done
-fi
-
-test -n "$ac_init_help" && exit $ac_status
-if $ac_init_version; then
- cat <<\_ACEOF
-Cygwin Utils configure 0
-generated by GNU Autoconf 2.69
-
-Copyright (C) 2012 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
-fi
-
-## ------------------------ ##
-## Autoconf initialization. ##
-## ------------------------ ##
-
-# ac_fn_c_try_compile LINENO
-# --------------------------
-# Try to compile conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_compile ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext
- if { { ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compile") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_compile
-
-# ac_fn_cxx_try_compile LINENO
-# ----------------------------
-# Try to compile conftest.$ac_ext, and return whether this succeeded.
-ac_fn_cxx_try_compile ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext
- if { { ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compile") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && {
- test -z "$ac_cxx_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_cxx_try_compile
-cat >config.log <<_ACEOF
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-
-It was created by Cygwin Utils $as_me 0, which was
-generated by GNU Autoconf 2.69. Invocation command line was
-
- $ $0 $@
-
-_ACEOF
-exec 5>>config.log
-{
-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`
-/usr/bin/hostinfo = `(/usr/bin/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=.
- $as_echo "PATH: $as_dir"
- done
-IFS=$as_save_IFS
-
-} >&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_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=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- case $ac_pass in
- 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
- 2)
- as_fn_append 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
- as_fn_append ac_configure_args " '$ac_arg'"
- ;;
- esac
- done
-done
-{ ac_configure_args0=; unset ac_configure_args0;}
-{ ac_configure_args1=; unset 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: Use '\'' to represent an apostrophe within the trap.
-# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
-trap 'exit_status=$?
- # Save into config.log some information that might help in debugging.
- {
- echo
-
- $as_echo "## ---------------- ##
-## Cache variables. ##
-## ---------------- ##"
- echo
- # The following way of writing the cache mishandles newlines in values,
-(
- for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
- eval ac_val=\$$ac_var
- case $ac_val in #(
- *${as_nl}*)
- case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
- esac
- case $ac_var in #(
- _ | IFS | as_nl) ;; #(
- BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
- *) { eval $ac_var=; unset $ac_var;} ;;
- esac ;;
- esac
- done
- (set) 2>&1 |
- case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
- *${as_nl}ac_space=\ *)
- sed -n \
- "s/'\''/'\''\\\\'\'''\''/g;
- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
- ;; #(
- *)
- sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
- ;;
- esac |
- sort
-)
- echo
-
- $as_echo "## ----------------- ##
-## Output variables. ##
-## ----------------- ##"
- echo
- for ac_var in $ac_subst_vars
- do
- eval ac_val=\$$ac_var
- case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
- esac
- $as_echo "$ac_var='\''$ac_val'\''"
- done | sort
- echo
-
- if test -n "$ac_subst_files"; then
- $as_echo "## ------------------- ##
-## File substitutions. ##
-## ------------------- ##"
- echo
- for ac_var in $ac_subst_files
- do
- eval ac_val=\$$ac_var
- case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
- esac
- $as_echo "$ac_var='\''$ac_val'\''"
- done | sort
- echo
- fi
-
- if test -s confdefs.h; then
- $as_echo "## ----------- ##
-## confdefs.h. ##
-## ----------- ##"
- echo
- cat confdefs.h
- echo
- fi
- test "$ac_signal" != 0 &&
- $as_echo "$as_me: caught signal $ac_signal"
- $as_echo "$as_me: exit $exit_status"
- } >&5
- rm -f core *.core core.conftest.* &&
- rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
- exit $exit_status
-' 0
-for ac_signal in 1 2 13 15; do
- trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
-done
-ac_signal=0
-
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -f -r conftest* confdefs.h
-
-$as_echo "/* confdefs.h */" > 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
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_URL "$PACKAGE_URL"
-_ACEOF
-
-
-# Let the site file select an alternate cache file if it wants to.
-# Prefer an explicitly selected file to automatically selected ones.
-ac_site_file1=NONE
-ac_site_file2=NONE
-if test -n "$CONFIG_SITE"; then
- # We do not want a PATH search for config.site.
- case $CONFIG_SITE in #((
- -*) ac_site_file1=./$CONFIG_SITE;;
- */*) ac_site_file1=$CONFIG_SITE;;
- *) ac_site_file1=./$CONFIG_SITE;;
- esac
-elif test "x$prefix" != xNONE; then
- ac_site_file1=$prefix/share/config.site
- ac_site_file2=$prefix/etc/config.site
-else
- ac_site_file1=$ac_default_prefix/share/config.site
- ac_site_file2=$ac_default_prefix/etc/config.site
-fi
-for ac_site_file in "$ac_site_file1" "$ac_site_file2"
-do
- test "x$ac_site_file" = xNONE && continue
- if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
-$as_echo "$as_me: loading site script $ac_site_file" >&6;}
- sed 's/^/| /' "$ac_site_file" >&5
- . "$ac_site_file" \
- || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "failed to load site script $ac_site_file
-See \`config.log' for more details" "$LINENO" 5; }
- 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. DJGPP emulates it as a regular file.
- if test /dev/null != "$cache_file" && test -f "$cache_file"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
-$as_echo "$as_me: loading cache $cache_file" >&6;}
- case $cache_file in
- [\\/]* | ?:[\\/]* ) . "$cache_file";;
- *) . "./$cache_file";;
- esac
- fi
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
-$as_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 $ac_precious_vars; 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,)
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
- ac_cache_corrupted=: ;;
- ,set)
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
-$as_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
- # differences in whitespace do not lead to failure.
- ac_old_val_w=`echo x $ac_old_val`
- ac_new_val_w=`echo x $ac_new_val`
- if test "$ac_old_val_w" != "$ac_new_val_w"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
-$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
- ac_cache_corrupted=:
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
-$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
- eval $ac_var=\$ac_old_val
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
-$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
-$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
- fi;;
- esac
- # Pass precious variables to config.status.
- if test "$ac_new_set" = set; then
- case $ac_new_val in
- *\'*) ac_arg=$ac_var=`$as_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.
- *) as_fn_append ac_configure_args " '$ac_arg'" ;;
- esac
- fi
-done
-if $ac_cache_corrupted; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
-$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
- as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
-fi
-## -------------------- ##
-## Main body of script. ##
-## -------------------- ##
-
-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_aux_dir=
-for ac_dir in ../.. "$srcdir"/../..; do
- if test -f "$ac_dir/install-sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install-sh -c"
- break
- elif test -f "$ac_dir/install.sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install.sh -c"
- break
- elif test -f "$ac_dir/shtool"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/shtool install -c"
- break
- fi
-done
-if test -z "$ac_aux_dir"; then
- as_fn_error $? "cannot find install-sh, install.sh, or shtool in ../.. \"$srcdir\"/../.." "$LINENO" 5
-fi
-
-# These three variables are undocumented and unsupported,
-# and are intended to be withdrawn in a future Autoconf release.
-# They can cause serious problems if a builder's source tree is in a directory
-# whose full name contains unusual characters.
-ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
-ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
-ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
-
-
-
-
-
-. ${srcdir}/../configure.cygwin
-
-# Make sure we can run config.sub.
-$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
- as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
-$as_echo_n "checking build system type... " >&6; }
-if ${ac_cv_build+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_build_alias=$build_alias
-test "x$ac_build_alias" = x &&
- ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
-test "x$ac_build_alias" = x &&
- as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
-ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
- as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
-$as_echo "$ac_cv_build" >&6; }
-case $ac_cv_build in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
-esac
-build=$ac_cv_build
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_build
-shift
-build_cpu=$1
-build_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-build_os=$*
-IFS=$ac_save_IFS
-case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
-$as_echo_n "checking host system type... " >&6; }
-if ${ac_cv_host+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test "x$host_alias" = x; then
- ac_cv_host=$ac_cv_build
-else
- ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
- as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
-$as_echo "$ac_cv_host" >&6; }
-case $ac_cv_host in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
-esac
-host=$ac_cv_host
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_host
-shift
-host_cpu=$1
-host_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-host_os=$*
-IFS=$ac_save_IFS
-case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5
-$as_echo_n "checking target system type... " >&6; }
-if ${ac_cv_target+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test "x$target_alias" = x; then
- ac_cv_target=$ac_cv_host
-else
- ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` ||
- as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5
-$as_echo "$ac_cv_target" >&6; }
-case $ac_cv_target in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;;
-esac
-target=$ac_cv_target
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_target
-shift
-target_cpu=$1
-target_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-target_os=$*
-IFS=$ac_save_IFS
-case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac
-
-
-# The aliases save the names the user supplied, while $host etc.
-# will get canonicalized.
-test -n "$target_alias" &&
- test "$program_prefix$program_suffix$program_transform_name" = \
- NONENONEs,x,x, &&
- program_prefix=${target_alias}-
-
-
-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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="${ac_tool_prefix}gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
- $as_echo_n "(cached) " >&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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="${ac_tool_prefix}cc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- 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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&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_fn_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"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-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
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- for ac_prog in cl.exe
- 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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$CC" && break
- done
-fi
-if test -z "$CC"; then
- ac_ct_CC=$CC
- for ac_prog in cl.exe
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
- $as_echo_n "(cached) " >&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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$ac_ct_CC" && break
-done
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-fi
-
-fi
-
-
-test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "no acceptable C compiler found in \$PATH
-See \`config.log' for more details" "$LINENO" 5; }
-
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
- { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compiler $ac_option >&5") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- sed '10a\
-... rest of stderr output deleted ...
- 10q' conftest.err >conftest.er1
- cat conftest.er1 >&5
- fi
- rm -f conftest.er1 conftest.err
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
-done
-
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- ac_no_link=no
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.out.dSYM 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.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
-$as_echo_n "checking whether the C compiler works... " >&6; }
-ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-
-# The possible output files:
-ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
-
-ac_rmfiles=
-for ac_file in $ac_files
-do
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
- * ) ac_rmfiles="$ac_rmfiles $ac_file";;
- esac
-done
-rm -f $ac_rmfiles
-
-if { { ac_try="$ac_link_default"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link_default") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
- # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
-# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
-# in a Makefile. We should not override ac_cv_exeext if it was cached,
-# so that the user can short-circuit this test for compilers unknown to
-# Autoconf.
-for ac_file in $ac_files ''
-do
- test -f "$ac_file" || continue
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
- ;;
- [ab].out )
- # We found the default executable, but exeext='' is most
- # certainly right.
- break;;
- *.* )
- if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
- then :; else
- ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- fi
- # We set ac_cv_exeext here because the later test for it is not
- # safe: cross compilers may not add the suffix if given an `-o'
- # argument, so we may need to know it at that point already.
- # Even if this section looks crufty: it has the advantage of
- # actually working.
- break;;
- * )
- break;;
- esac
-done
-test "$ac_cv_exeext" = no && ac_cv_exeext=
-
-else
- ac_file=''
-fi
-if test -z "$ac_file"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-$as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "C compiler cannot create executables
-See \`config.log' for more details" "$LINENO" 5; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
-$as_echo_n "checking for C compiler default output file name... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
-ac_exeext=$ac_cv_exeext
-
-rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
-ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
-$as_echo_n "checking for suffix of executables... " >&6; }
-if { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; 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 | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
- *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- break;;
- * ) break;;
- esac
-done
-else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-rm -f conftest conftest$ac_cv_exeext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
-$as_echo "$ac_cv_exeext" >&6; }
-
-rm -f conftest.$ac_ext
-EXEEXT=$ac_cv_exeext
-ac_exeext=$EXEEXT
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdio.h>
-int
-main ()
-{
-FILE *f = fopen ("conftest.out", "w");
- return ferror (f) || fclose (f) != 0;
-
- ;
- return 0;
-}
-_ACEOF
-ac_clean_files="$ac_clean_files conftest.out"
-# Check that the compiler produces executables we can run. If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
-if test "$cross_compiling" != yes; then
- { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
- if { ac_try='./conftest$ac_cv_exeext'
- { { case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then
- cross_compiling=no
- else
- if test "$cross_compiling" = maybe; then
- cross_compiling=yes
- else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details" "$LINENO" 5; }
- fi
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
-
-rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
-ac_clean_files=$ac_clean_files_save
-
-else
- rm -f -r a.out a.exe b.out conftest.$ac_ext conftest.o conftest.obj conftest.dSYM
- ac_no_link=yes
- # Setting cross_compile will disable run tests; it will
- # also disable AC_CHECK_FILE but that's generally
- # correct if we can't link.
- cross_compiling=yes
- EXEEXT=
- # Check that the compiler produces executables we can run. If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
-if test "$cross_compiling" != yes; then
- { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
- if { ac_try='./conftest$ac_cv_exeext'
- { { case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then
- cross_compiling=no
- else
- if test "$cross_compiling" = maybe; then
- cross_compiling=yes
- else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details" "$LINENO" 5; }
- fi
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
-$as_echo_n "checking for suffix of object files... " >&6; }
-if ${ac_cv_objext+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.o conftest.obj
-if { { ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compile") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
- for ac_file in conftest.o conftest.obj conftest.*; do
- test -f "$ac_file" || continue;
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
- *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
- break;;
- esac
-done
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of object files: cannot compile
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
-$as_echo "$ac_cv_objext" >&6; }
-OBJEXT=$ac_cv_objext
-ac_objext=$OBJEXT
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
-$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if ${ac_cv_c_compiler_gnu+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-#ifndef __GNUC__
- choke me
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_compiler_gnu=yes
-else
- ac_compiler_gnu=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
-$as_echo "$ac_cv_c_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
- GCC=yes
-else
- GCC=
-fi
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if ${ac_cv_prog_cc_g+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_save_c_werror_flag=$ac_c_werror_flag
- ac_c_werror_flag=yes
- ac_cv_prog_cc_g=no
- CFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_g=yes
-else
- CFLAGS=""
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-else
- ac_c_werror_flag=$ac_save_c_werror_flag
- CFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_g=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_c_werror_flag=$ac_save_c_werror_flag
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
-$as_echo "$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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if ${ac_cv_prog_cc_c89+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_cv_prog_cc_c89=no
-ac_save_CC=$CC
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdarg.h>
-#include <stdio.h>
-struct stat;
-/* 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 -std 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 -std. */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
- inside strings and character constants. */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 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
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
- -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
- CC="$ac_save_CC $ac_arg"
- if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_c89=$ac_arg
-fi
-rm -f core conftest.err conftest.$ac_objext
- test "x$ac_cv_prog_cc_c89" != "xno" && break
-done
-rm -f conftest.$ac_ext
-CC=$ac_save_CC
-
-fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
- x)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
- xno)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
- *)
- CC="$CC $ac_cv_prog_cc_c89"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-if test "x$ac_cv_prog_cc_c89" != xno; then :
-
-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
-
-
-
-
-# Check whether --with-windows-headers was given.
-if test "${with_windows_headers+set}" = set; then :
- withval=$with_windows_headers; test -z "$withval" && as_fn_error $? "must specify value for --with-windows-headers" "$LINENO" 5
-
-fi
-
-
-
-
-# Check whether --with-windows-libs was given.
-if test "${with_windows_libs+set}" = set; then :
- withval=$with_windows_libs; test -z "$withval" && as_fn_error $? "must specify value for --with-windows-libs" "$LINENO" 5
-
-fi
-
-windows_libdir=$(realdirpath "$with_windows_libs")
-if test -z "$windows_libdir"; then
- windows_libdir=$(realdirpath $(${ac_cv_prog_CC:-$CC} -xc /dev/null -Wl,--verbose=1 -lntdll 2>&1 | sed -rn 's%^.*\s(\S+)/libntdll\..*succeeded%\1%p'))
- if test -z "$windows_libdir"; then
- as_fn_error $? "cannot find windows library files" "$LINENO" 5
- fi
-fi
-
-
-
-
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-if test -z "$CXX"; then
- if test -n "$CCC"; then
- CXX=$CCC
- else
- if test -n "$ac_tool_prefix"; then
- for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
- 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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CXX+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CXX"; then
- ac_cv_prog_CXX="$CXX" # 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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CXX=$ac_cv_prog_CXX
-if test -n "$CXX"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
-$as_echo "$CXX" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$CXX" && break
- done
-fi
-if test -z "$CXX"; then
- ac_ct_CXX=$CXX
- for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CXX+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_CXX"; then
- ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # 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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CXX="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
-if test -n "$ac_ct_CXX"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
-$as_echo "$ac_ct_CXX" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$ac_ct_CXX" && break
-done
-
- if test "x$ac_ct_CXX" = x; then
- CXX="g++"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CXX=$ac_ct_CXX
- fi
-fi
-
- fi
-fi
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
- { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compiler $ac_option >&5") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- sed '10a\
-... rest of stderr output deleted ...
- 10q' conftest.err >conftest.er1
- cat conftest.er1 >&5
- fi
- rm -f conftest.er1 conftest.err
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
-done
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
-$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
-if ${ac_cv_cxx_compiler_gnu+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-#ifndef __GNUC__
- choke me
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- ac_compiler_gnu=yes
-else
- ac_compiler_gnu=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
-$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
- GXX=yes
-else
- GXX=
-fi
-ac_test_CXXFLAGS=${CXXFLAGS+set}
-ac_save_CXXFLAGS=$CXXFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
-$as_echo_n "checking whether $CXX accepts -g... " >&6; }
-if ${ac_cv_prog_cxx_g+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_save_cxx_werror_flag=$ac_cxx_werror_flag
- ac_cxx_werror_flag=yes
- ac_cv_prog_cxx_g=no
- CXXFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- ac_cv_prog_cxx_g=yes
-else
- CXXFLAGS=""
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-
-else
- ac_cxx_werror_flag=$ac_save_cxx_werror_flag
- CXXFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- ac_cv_prog_cxx_g=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_cxx_werror_flag=$ac_save_cxx_werror_flag
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
-$as_echo "$ac_cv_prog_cxx_g" >&6; }
-if test "$ac_test_CXXFLAGS" = set; then
- CXXFLAGS=$ac_save_CXXFLAGS
-elif test $ac_cv_prog_cxx_g = yes; then
- if test "$GXX" = yes; then
- CXXFLAGS="-g -O2"
- else
- CXXFLAGS="-g"
- fi
-else
- if test "$GXX" = yes; then
- CXXFLAGS="-O2"
- else
- CXXFLAGS=
- fi
-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
-
-
-
-addto_CPPFLAGS -nostdinc
-: ${ac_cv_prog_CXX:=$CXX}
-: ${ac_cv_prog_CC:=$CC}
-
-cygwin_headers=$(realdirpath "$winsup_srcdir/cygwin/include")
-if test -z "$cygwin_headers"; then
- as_fn_error $? "cannot find $winsup_srcdir/cygwin/include directory" "$LINENO" 5
-fi
-
-newlib_headers=$(realdirpath $winsup_srcdir/../newlib/libc/include)
-if test -z "$newlib_headers"; then
- as_fn_error $? "cannot find newlib source directory: $winsup_srcdir/../newlib/libc/include" "$LINENO" 5
-fi
-newlib_headers="$target_builddir/newlib/targ-include $newlib_headers"
-
-if test -n "$with_windows_headers"; then
- if test -e "$with_windows_headers/windef.h"; then
- windows_headers="$with_windows_headers"
- else
- as_fn_error $? "cannot find windef.h in specified --with-windows-headers path: $saw_windows_headers" "$LINENO" 5;
- fi
-elif test -d "$winsup_srcdir/w32api/include/windef.h"; then
- windows_headers="$winsup_srcdir/w32api/include"
-else
- windows_headers=$(cd $($ac_cv_prog_CC -xc /dev/null -E -include windef.h 2>/dev/null | sed -n 's%^# 1 "\([^"]*\)/windef\.h".*$%\1%p' | head -n1) 2>/dev/null && pwd)
- if test -z "$windows_headers" -o ! -d "$windows_headers"; then
- as_fn_error $? "cannot find windows header files" "$LINENO" 5
- fi
-fi
-CC=$ac_cv_prog_CC
-CXX=$ac_cv_prog_CXX
-export CC
-export CXX
-
-
-
-
-
-test "$program_prefix" != NONE &&
- program_transform_name="s&^&$program_prefix&;$program_transform_name"
-# Use a double $ so make ignores it.
-test "$program_suffix" != NONE &&
- program_transform_name="s&\$&$program_suffix&;$program_transform_name"
-# Double any \ or $.
-# By default was `s,x,x', remove it if useless.
-ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
-program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
-
-
-# Find a good install program. We prefer a C program (faster),
-# so one script is as good as another. But avoid the broken or
-# incompatible versions:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if ${ac_cv_path_install+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
- ./ | .// | /[cC]/* | \
- /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
- ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
- /usr/ucb/* ) ;;
- *)
- # OSF1 and SCO ODT 3.0 have their own names for install.
- # Don't use installbsd from OSF since it installs stuff as root
- # by default.
- for ac_prog in ginstall scoinst install; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
- if test $ac_prog = install &&
- grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
- # AIX install. It has an incompatible calling convention.
- :
- elif test $ac_prog = install &&
- grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
- # program-specific install script used by HP pwplus--don't use.
- :
- else
- rm -rf conftest.one conftest.two conftest.dir
- echo one > conftest.one
- echo two > conftest.two
- mkdir conftest.dir
- if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
- test -s conftest.one && test -s conftest.two &&
- test -s conftest.dir/conftest.one &&
- test -s conftest.dir/conftest.two
- then
- ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
- break 3
- fi
- fi
- fi
- done
- done
- ;;
-esac
-
- done
-IFS=$as_save_IFS
-
-rm -rf conftest.one conftest.two conftest.dir
-
-fi
- if test "${ac_cv_path_install+set}" = set; then
- INSTALL=$ac_cv_path_install
- else
- # As a last resort, use the slow shell script. Don't cache a
- # value for INSTALL within a source directory, because that will
- # break other packages using the cache if that directory is
- # removed, or if the value is a relative name.
- INSTALL=$ac_install_sh
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-
-for ac_prog in ${target_cpu}-w64-mingw32-g++
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_MINGW_CXX+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$MINGW_CXX"; then
- ac_cv_prog_MINGW_CXX="$MINGW_CXX" # 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_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_MINGW_CXX="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-MINGW_CXX=$ac_cv_prog_MINGW_CXX
-if test -n "$MINGW_CXX"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MINGW_CXX" >&5
-$as_echo "$MINGW_CXX" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$MINGW_CXX" && break
-done
-
-test -n "$MINGW_CXX" || as_fn_error $? "no acceptable mingw g++ found in \$PATH" "$LINENO" 5
-
-
-
-configure_args=X
-for f in $ac_configure_args; do
- case "$f" in
- *--srcdir*) ;;
- *) configure_args="$configure_args $f" ;;
- esac
-done
-configure_args=$(/usr/bin/expr "$configure_args" : 'X \(.*\)')
-
-
-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, we kill variables containing newlines.
-# 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.
-(
- for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
- eval ac_val=\$$ac_var
- case $ac_val in #(
- *${as_nl}*)
- case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
- esac
- case $ac_var in #(
- _ | IFS | as_nl) ;; #(
- BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
- *) { eval $ac_var=; unset $ac_var;} ;;
- esac ;;
- esac
- done
-
- (set) 2>&1 |
- case $as_nl`(ac_space=' '; set) 2>&1` in #(
- *${as_nl}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 "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
- ;;
- esac |
- sort
-) |
- sed '
- /^ac_cv_env_/b end
- t clear
- :clear
- s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
- t end
- s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
- :end' >>confcache
-if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
- if test -w "$cache_file"; then
- if test "x$cache_file" != "x/dev/null"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
-$as_echo "$as_me: updating cache $cache_file" >&6;}
- if test ! -f "$cache_file" || test -h "$cache_file"; then
- cat confcache >"$cache_file"
- else
- case $cache_file in #(
- */* | ?:*)
- mv -f confcache "$cache_file"$$ &&
- mv -f "$cache_file"$$ "$cache_file" ;; #(
- *)
- mv -f confcache "$cache_file" ;;
- esac
- fi
- fi
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
-$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
- 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}'
-
-# Transform confdefs.h into DEFS.
-# Protect against shell expansion while executing Makefile rules.
-# Protect against Makefile macro expansion.
-#
-# If the first sed substitution is executed (which looks for macros that
-# take arguments), then branch to the quote section. Otherwise,
-# look for a macro that doesn't take arguments.
-ac_script='
-:mline
-/\\$/{
- N
- s,\\\n,,
- b mline
-}
-t clear
-:clear
-s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g
-t quote
-s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g
-t quote
-b any
-:quote
-s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g
-s/\[/\\&/g
-s/\]/\\&/g
-s/\$/$$/g
-H
-:any
-${
- g
- s/^\n//
- s/\n/ /g
- p
-}
-'
-DEFS=`sed -n "$ac_script" confdefs.h`
-
-
-ac_libobjs=
-ac_ltlibobjs=
-U=
-for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
- # 1. Remove the extension, and $U if already installed.
- ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
- ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
- # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
- # will be set to the directory where LIBOBJS objects are built.
- as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
- as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
-done
-LIBOBJS=$ac_libobjs
-
-LTLIBOBJS=$ac_ltlibobjs
-
-
-
-: "${CONFIG_STATUS=./config.status}"
-ac_write_fail=0
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
-as_write_fail=0
-cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
-#! $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}
-export SHELL
-_ASEOF
-cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
-## -------------------- ##
-## M4sh Initialization. ##
-## -------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in #(
- *posix*) :
- set -o posix ;; #(
- *) :
- ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- PATH_SEPARATOR=:
- (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
- (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
- PATH_SEPARATOR=';'
- }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
-# Find who we are. Look in the path if we contain no directory separator.
-as_myself=
-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
-IFS=$as_save_IFS
-
- ;;
-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
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
- exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
-as_fn_error ()
-{
- as_status=$1; test $as_status -eq 0 && as_status=1
- if test "$4"; then
- as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
- fi
- $as_echo "$as_me: error: $2" >&2
- as_fn_exit $as_status
-} # as_fn_error
-
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
- return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
- set +e
- as_fn_set_status $1
- exit $1
-} # as_fn_exit
-
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
- { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
- eval 'as_fn_append ()
- {
- eval $1+=\$2
- }'
-else
- as_fn_append ()
- {
- eval $1=\$$1\$2
- }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
- eval 'as_fn_arith ()
- {
- as_val=$(( $* ))
- }'
-else
- as_fn_arith ()
- {
- as_val=`expr "$@" || test $? -eq 1`
- }
-fi # as_fn_arith
-
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; 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
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
- }
- /^X\/\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\/\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
-
-# 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
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
- case `echo 'xy\c'` in
- *c*) ECHO_T=' ';; # ECHO_T is single tab character.
- xy) ECHO_C='\c';;
- *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
- ECHO_T=' ';;
- esac;;
-*)
- ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
- rm -f conf$$.dir/conf$$.file
-else
- rm -f conf$$.dir
- mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
- if ln -s conf$$.file conf$$ 2>/dev/null; then
- as_ln_s='ln -s'
- # ... but there are two gotchas:
- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -pR'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -pR'
- elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
- else
- as_ln_s='cp -pR'
- fi
-else
- as_ln_s='cp -pR'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
- case $as_dir in #(
- -*) as_dir=./$as_dir;;
- esac
- test -d "$as_dir" || eval $as_mkdir_p || {
- as_dirs=
- while :; do
- case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
- *) as_qdir=$as_dir;;
- esac
- as_dirs="'$as_qdir' $as_dirs"
- as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- test -d "$as_dir" && break
- done
- test -z "$as_dirs" || eval "mkdir $as_dirs"
- } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p='mkdir -p "$as_dir"'
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-
-# as_fn_executable_p FILE
-# -----------------------
-# Test if FILE is an executable regular file.
-as_fn_executable_p ()
-{
- test -f "$1" && test -x "$1"
-} # as_fn_executable_p
-as_test_x='test -x'
-as_executable_p=as_fn_executable_p
-
-# 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'"
-
-
-exec 6>&1
-## ----------------------------------- ##
-## Main body of $CONFIG_STATUS script. ##
-## ----------------------------------- ##
-_ASEOF
-test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# Save the log message, to keep $0 and so on meaningful, and to
-# report actual input values of CONFIG_FILES etc. instead of their
-# values after options handling.
-ac_log="
-This file was extended by Cygwin Utils $as_me 0, which was
-generated by GNU Autoconf 2.69. Invocation command line was
-
- CONFIG_FILES = $CONFIG_FILES
- CONFIG_HEADERS = $CONFIG_HEADERS
- CONFIG_LINKS = $CONFIG_LINKS
- CONFIG_COMMANDS = $CONFIG_COMMANDS
- $ $0 $@
-
-on `(hostname || uname -n) 2>/dev/null | sed 1q`
-"
-
-_ACEOF
-
-case $ac_config_files in *"
-"*) set x $ac_config_files; shift; ac_config_files=$*;;
-esac
-
-
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-# Files that config.status was made for.
-config_files="$ac_config_files"
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-ac_cs_usage="\
-\`$as_me' instantiates files and other configuration actions
-from templates according to the current configuration. Unless the files
-and actions are specified as TAGs, all are instantiated by default.
-
-Usage: $0 [OPTION]... [TAG]...
-
- -h, --help print this help, then exit
- -V, --version print version number and configuration settings, then exit
- --config print configuration, then exit
- -q, --quiet, --silent
- 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
-
-Configuration files:
-$config_files
-
-Report bugs to <cygwin@cygwin.com>.
-Cygwin Utils home page: <https://cygwin.com>."
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
-ac_cs_version="\\
-Cygwin Utils config.status 0
-configured by $0, generated by GNU Autoconf 2.69,
- with options \\"\$ac_cs_config\\"
-
-Copyright (C) 2012 Free Software Foundation, Inc.
-This config.status script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it."
-
-ac_pwd='$ac_pwd'
-srcdir='$srcdir'
-INSTALL='$INSTALL'
-test -n "\$AWK" || AWK=awk
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# The default lists apply if the user does not specify any file.
-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=`expr "X$1" : 'X\([^=]*\)='`
- ac_optarg=
- ac_shift=:
- ;;
- *)
- ac_option=$1
- ac_optarg=$2
- ac_shift=shift
- ;;
- esac
-
- case $ac_option in
- # Handling of the options.
- -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
- ac_cs_recheck=: ;;
- --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
- $as_echo "$ac_cs_version"; exit ;;
- --config | --confi | --conf | --con | --co | --c )
- $as_echo "$ac_cs_config"; exit ;;
- --debug | --debu | --deb | --de | --d | -d )
- debug=: ;;
- --file | --fil | --fi | --f )
- $ac_shift
- case $ac_optarg in
- *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
- '') as_fn_error $? "missing file argument" ;;
- esac
- as_fn_append CONFIG_FILES " '$ac_optarg'"
- ac_need_defaults=false;;
- --he | --h | --help | --hel | -h )
- $as_echo "$ac_cs_usage"; exit ;;
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil | --si | --s)
- ac_cs_silent=: ;;
-
- # This is an error.
- -*) as_fn_error $? "unrecognized option: \`$1'
-Try \`$0 --help' for more information." ;;
-
- *) as_fn_append ac_config_targets " $1"
- ac_need_defaults=false ;;
-
- 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 || ac_write_fail=1
-if \$ac_cs_recheck; then
- set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
- shift
- \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
- CONFIG_SHELL='$SHELL'
- export CONFIG_SHELL
- exec "\$@"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-exec 5>>config.log
-{
- echo
- sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
- $as_echo "$ac_log"
-} >&5
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-
-# Handling of arguments.
-for ac_config_target in $ac_config_targets
-do
- case $ac_config_target in
- "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
-
- *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
- 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
-fi
-
-# Have a temporary directory for convenience. Make it in the build tree
-# simply because there is no reason against having it here, and in addition,
-# creating and moving files from /tmp can sometimes cause problems.
-# Hook for its removal unless debugging.
-# Note that there is a small window in which the directory will not be cleaned:
-# after its creation but before its name has been assigned to `$tmp'.
-$debug ||
-{
- tmp= ac_tmp=
- trap 'exit_status=$?
- : "${ac_tmp:=$tmp}"
- { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
-' 0
- trap 'as_fn_exit 1' 1 2 13 15
-}
-# Create a (secure) tmp directory for tmp files.
-
-{
- tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
- test -d "$tmp"
-} ||
-{
- tmp=./conf$$-$RANDOM
- (umask 077 && mkdir "$tmp")
-} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
-ac_tmp=$tmp
-
-# Set up the scripts for CONFIG_FILES section.
-# No need to generate them if there are no CONFIG_FILES.
-# This happens for instance with `./config.status config.h'.
-if test -n "$CONFIG_FILES"; then
-
-
-ac_cr=`echo X | tr X '\015'`
-# On cygwin, bash can eat \r inside `` if the user requested igncr.
-# But we know of no other shell where ac_cr would be empty at this
-# point, so we can use a bashism as a fallback.
-if test "x$ac_cr" = x; then
- eval ac_cr=\$\'\\r\'
-fi
-ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
-if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
- ac_cs_awk_cr='\\r'
-else
- ac_cs_awk_cr=$ac_cr
-fi
-
-echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
-_ACEOF
-
-
-{
- echo "cat >conf$$subs.awk <<_ACEOF" &&
- echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
- echo "_ACEOF"
-} >conf$$subs.sh ||
- as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
-ac_delim='%!_!# '
-for ac_last_try in false false false false false :; do
- . ./conf$$subs.sh ||
- as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-
- ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
- if test $ac_delim_n = $ac_delim_num; then
- break
- elif $ac_last_try; then
- as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
- else
- ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
- fi
-done
-rm -f conf$$subs.sh
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
-_ACEOF
-sed -n '
-h
-s/^/S["/; s/!.*/"]=/
-p
-g
-s/^[^!]*!//
-:repl
-t repl
-s/'"$ac_delim"'$//
-t delim
-:nl
-h
-s/\(.\{148\}\)..*/\1/
-t more1
-s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
-p
-n
-b repl
-:more1
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t nl
-:delim
-h
-s/\(.\{148\}\)..*/\1/
-t more2
-s/["\\]/\\&/g; s/^/"/; s/$/"/
-p
-b
-:more2
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t delim
-' <conf$$subs.awk | sed '
-/^[^""]/{
- N
- s/\n//
-}
-' >>$CONFIG_STATUS || ac_write_fail=1
-rm -f conf$$subs.awk
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACAWK
-cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
- for (key in S) S_is_set[key] = 1
- FS = ""
-
-}
-{
- line = $ 0
- nfields = split(line, field, "@")
- substed = 0
- len = length(field[1])
- for (i = 2; i < nfields; i++) {
- key = field[i]
- keylen = length(key)
- if (S_is_set[key]) {
- value = S[key]
- line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
- len += length(value) + length(field[++i])
- substed = 1
- } else
- len += 1 + keylen
- }
-
- print line
-}
-
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
- sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
-else
- cat
-fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
- || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
-_ACEOF
-
-# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
-# ${srcdir} and @srcdir@ entries 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[ ]*=[ ]*/{
-h
-s///
-s/^/:/
-s/[ ]*$/:/
-s/:\$(srcdir):/:/g
-s/:\${srcdir}:/:/g
-s/:@srcdir@:/:/g
-s/^:*//
-s/:*$//
-x
-s/\(=[ ]*\).*/\1/
-G
-s/\n//
-s/^[^=]*=[ ]*$//
-}'
-fi
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-fi # test -n "$CONFIG_FILES"
-
-
-eval set X " :F $CONFIG_FILES "
-shift
-for ac_tag
-do
- case $ac_tag in
- :[FHLC]) ac_mode=$ac_tag; continue;;
- esac
- case $ac_mode$ac_tag in
- :[FHL]*:*);;
- :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
- :[FH]-) ac_tag=-:-;;
- :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
- esac
- ac_save_IFS=$IFS
- IFS=:
- set x $ac_tag
- IFS=$ac_save_IFS
- shift
- ac_file=$1
- shift
-
- case $ac_mode in
- :L) ac_source=$1;;
- :[FH])
- ac_file_inputs=
- for ac_f
- do
- case $ac_f in
- -) ac_f="$ac_tmp/stdin";;
- *) # Look for the file first in the build tree, then in the source tree
- # (if the path is not absolute). The absolute path cannot be DOS-style,
- # because $ac_f cannot contain `:'.
- test -f "$ac_f" ||
- case $ac_f in
- [\\/$]*) false;;
- *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
- esac ||
- as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
- esac
- case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
- as_fn_append ac_file_inputs " '$ac_f'"
- done
-
- # 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. */
- configure_input='Generated from '`
- $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
- `' by configure.'
- if test x"$ac_file" != x-; then
- configure_input="$ac_file. $configure_input"
- { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
-$as_echo "$as_me: creating $ac_file" >&6;}
- fi
- # Neutralize special characters interpreted by sed in replacement strings.
- case $configure_input in #(
- *\&* | *\|* | *\\* )
- ac_sed_conf_input=`$as_echo "$configure_input" |
- sed 's/[\\\\&|]/\\\\&/g'`;; #(
- *) ac_sed_conf_input=$configure_input;;
- esac
-
- case $ac_tag in
- *:-:* | *:-) cat >"$ac_tmp/stdin" \
- || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
- esac
- ;;
- esac
-
- ac_dir=`$as_dirname -- "$ac_file" ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$ac_file" : 'X\(//\)[^/]' \| \
- X"$ac_file" : 'X\(//\)$' \| \
- X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$ac_file" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- as_dir="$ac_dir"; as_fn_mkdir_p
- ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
- # A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
- esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
- .) # We are building in place.
- ac_srcdir=.
- ac_top_srcdir=$ac_top_builddir_sub
- ac_abs_top_srcdir=$ac_pwd ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir
- ac_abs_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_build_prefix$srcdir
- ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
-
- case $ac_mode in
- :F)
- #
- # CONFIG_FILE
- #
-
- case $INSTALL in
- [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
- *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
- esac
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# If the template does not know about datarootdir, expand it.
-# FIXME: This hack should be removed a few years after 2.60.
-ac_datarootdir_hack=; ac_datarootdir_seen=
-ac_sed_dataroot='
-/datarootdir/ {
- p
- q
-}
-/@datadir@/p
-/@docdir@/p
-/@infodir@/p
-/@localedir@/p
-/@mandir@/p'
-case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
-*datarootdir*) ac_datarootdir_seen=yes;;
-*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
- ac_datarootdir_hack='
- s&@datadir@&$datadir&g
- s&@docdir@&$docdir&g
- s&@infodir@&$infodir&g
- s&@localedir@&$localedir&g
- s&@mandir@&$mandir&g
- s&\\\${datarootdir}&$datarootdir&g' ;;
-esac
-_ACEOF
-
-# Neutralize VPATH when `$srcdir' = `.'.
-# Shell code in configure.ac might set extrasub.
-# FIXME: do we really want to maintain this feature?
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_sed_extra="$ac_vpsub
-$extrasub
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-:t
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s|@configure_input@|$ac_sed_conf_input|;t t
-s&@top_builddir@&$ac_top_builddir_sub&;t t
-s&@top_build_prefix@&$ac_top_build_prefix&;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&@abs_top_builddir@&$ac_abs_top_builddir&;t t
-s&@INSTALL@&$ac_INSTALL&;t t
-$ac_datarootdir_hack
-"
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
- >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
-
-test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
- { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
- { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
- "$ac_tmp/out"`; test -z "$ac_out"; } &&
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined. Please make sure it is defined" >&5
-$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined. Please make sure it is defined" >&2;}
-
- rm -f "$ac_tmp/stdin"
- case $ac_file in
- -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
- *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
- esac \
- || as_fn_error $? "could not create $ac_file" "$LINENO" 5
- ;;
-
-
-
- esac
-
-done # for ac_tag
-
-
-as_fn_exit 0
-_ACEOF
-ac_clean_files=$ac_clean_files_save
-
-test $ac_write_fail = 0 ||
- as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
-
-
-# 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 || as_fn_exit 1
-fi
-if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
-$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
-fi
-
diff --git a/winsup/utils/configure.ac b/winsup/utils/configure.ac
deleted file mode 100644
index d90c3fc6f..000000000
--- a/winsup/utils/configure.ac
+++ /dev/null
@@ -1,43 +0,0 @@
-dnl Autoconf configure script for Cygwin utilities.
-dnl Copyright 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2006, 2008, 2012, 2013,
-dnl 2014 Red Hat, Inc.
-dnl
-dnl This file is part of Cygwin.
-dnl
-dnl This software is a copyrighted work licensed under the terms of the
-dnl Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-dnl details.
-
-dnl Process this file with autoconf to produce a configure script.
-
-AC_PREREQ(2.59)
-AC_INIT([Cygwin Utils], 0,
- cygwin@cygwin.com, cygwin, https://cygwin.com)
-AC_CONFIG_SRCDIR(mount.cc)
-AC_CONFIG_AUX_DIR(../..)
-
-AC_NO_EXECUTABLES
-
-. ${srcdir}/../configure.cygwin
-
-AC_CANONICAL_SYSTEM
-
-AC_PROG_CC
-
-AC_WINDOWS_HEADERS
-AC_WINDOWS_LIBS
-
-AC_PROG_CXX
-
-AC_CYGWIN_INCLUDES
-
-AC_ARG_PROGRAM
-
-AC_PROG_INSTALL
-
-AC_CHECK_PROGS(MINGW_CXX, ${target_cpu}-w64-mingw32-g++)
-test -n "$MINGW_CXX" || AC_MSG_ERROR([no acceptable mingw g++ found in \$PATH])
-
-AC_EXEEXT
-AC_CONFIGURE_ARGS
-AC_OUTPUT(Makefile)
diff --git a/winsup/utils/cygcheck.cc b/winsup/utils/cygcheck.cc
deleted file mode 100644
index 5d823e9a3..000000000
--- a/winsup/utils/cygcheck.cc
+++ /dev/null
@@ -1,2481 +0,0 @@
-/* cygcheck.cc
-
- Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
- 2009, 2010, 2011, 2012, 2013, 2014 Red Hat, Inc.
-
- This file is part of Cygwin.
-
- This software is a copyrighted work licensed under the terms of the
- Cygwin license. Please consult the file "CYGWIN_LICENSE" for
- details. */
-
-#define _WIN32_WINNT 0x0602
-#define cygwin_internal cygwin_internal_dontuse
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <sys/time.h>
-#include <ctype.h>
-#include <io.h>
-#include <windows.h>
-#include <wininet.h>
-#include "path.h"
-#include "wide_path.h"
-#include <getopt.h>
-#include "../cygwin/include/cygwin/version.h"
-#include "../cygwin/include/sys/cygwin.h"
-#define _NOMNTENT_MACROS
-#include "../cygwin/include/mntent.h"
-#include "../cygwin/cygprops.h"
-#undef cygwin_internal
-#include "loadlib.h"
-
-#ifndef max
-#define max __max
-#endif
-
-#ifndef alloca
-#define alloca __builtin_alloca
-#endif
-
-int verbose = 0;
-int registry = 0;
-int sysinfo = 0;
-int givehelp = 0;
-int keycheck = 0;
-int check_setup = 0;
-int dump_only = 0;
-int find_package = 0;
-int list_package = 0;
-int grep_packages = 0;
-int del_orphaned_reg = 0;
-int unique_object_name_opt = 0;
-
-static char emptystr[] = "";
-
-#ifdef __GNUC__
-typedef long long longlong;
-#else
-typedef __int64 longlong;
-#endif
-
-/* In dump_setup.cc */
-void dump_setup (int, char **, bool);
-void package_find (int, char **);
-void package_list (int, char **);
-/* In bloda.cc */
-void dump_dodgy_apps (int verbose);
-/* Forward declaration */
-static void usage (FILE *, int);
-
-static const char *known_env_vars[] = {
- "c_include_path",
- "compiler_path",
- "cxx_include_path",
- "cygwin",
- "cygwin32",
- "dejagnu",
- "expect",
- "gcc_default_options",
- "gcc_exec_prefix",
- "home",
- "ld_library_path",
- "library_path",
- "login",
- "lpath",
- "make_mode",
- "makeflags",
- "path",
- "pwd",
- "strace",
- "tcl_library",
- "user",
- 0
-};
-
-struct
-{
- const char *name;
- int missing_is_good;
-}
-static common_apps[] = {
- {"awk", 0},
- {"bash", 0},
- {"cat", 0},
- {"cp", 0},
- {"cpp", 1},
- {"crontab", 0},
- {"find", 0},
- {"gcc", 0},
- {"gdb", 0},
- {"grep", 0},
- {"kill", 0},
- {"ld", 0},
- {"ls", 0},
- {"make", 0},
- {"mv", 0},
- {"patch", 0},
- {"perl", 0},
- {"rm", 0},
- {"sed", 0},
- {"ssh", 0},
- {"sh", 0},
- {"tar", 0},
- {"test", 0},
- {"vi", 0},
- {"vim", 0},
- {0, 0}
-};
-
-/* Options without ASCII single char representation. */
-enum
-{
- CO_DELETE_KEYS = 0x100,
- CO_ENABLE_UON = 0x101,
- CO_DISABLE_UON = 0x102,
- CO_SHOW_UON = 0x103
-};
-
-static int num_paths, max_paths;
-struct pathlike
-{
- char *dir;
- bool issys;
- void check_existence (const char *fn, int showall, int verbose,
- char* first, const char *ext1 = "",
- const char *ext2 = "");
-};
-
-pathlike *paths;
-int first_nonsys_path;
-
-void
-eprintf (const char *format, ...)
-{
- va_list ap;
- va_start (ap, format);
- vfprintf (stderr, format, ap);
- va_end (ap);
-}
-
-/*
- * display_error() is used to report failure modes
- */
-static int
-display_error (const char *name, bool show_error, bool print_failed)
-{
- fprintf (stderr, "cygcheck: %s", name);
- if (show_error)
- fprintf (stderr, "%s: %lu\n",
- print_failed ? " failed" : "", GetLastError ());
- else
- fprintf (stderr, "%s\n",
- print_failed ? " failed" : "");
- return 1;
-}
-
-static int
-display_error (const char *name)
-{
- return display_error (name, true, true);
-}
-
-static int
-display_error (const char *fmt, const char *x)
-{
- char buf[4000];
- snprintf (buf, sizeof buf, fmt, x);
- return display_error (buf, false, false);
-}
-
-static int
-display_error_fmt (const char *fmt, ...)
-{
- char buf[4000];
- va_list va;
-
- va_start (va, fmt);
- vsnprintf (buf, sizeof buf, fmt, va);
- return display_error (buf, false, false);
-}
-
-/* Display a WinInet error message, and close a variable number of handles.
- (Passed a list of handles terminated by NULL.) */
-static int
-display_internet_error (const char *message, ...)
-{
- DWORD err = GetLastError ();
- TCHAR err_buf[256];
- va_list hptr;
- HINTERNET h;
-
- /* in the case of a successful connection but 404 response, there is no
- win32 error message, but we still get passed a message to display. */
- if (err)
- {
- if (FormatMessage (FORMAT_MESSAGE_FROM_HMODULE,
- GetModuleHandle ("wininet.dll"), err, 0, err_buf,
- sizeof (err_buf), NULL) == 0)
- strcpy (err_buf, "(Unknown error)");
-
- fprintf (stderr, "cygcheck: %s: %s (win32 error %lu)\n", message,
- err_buf, err);
- }
- else
- fprintf (stderr, "cygcheck: %s\n", message);
-
- va_start (hptr, message);
- while ((h = va_arg (hptr, HINTERNET)) != 0)
- InternetCloseHandle (h);
- va_end (hptr);
-
- return 1;
-}
-
-static void
-add_path (char *s, int maxlen, bool issys)
-{
- if (num_paths >= max_paths)
- {
- max_paths += 10;
- /* Extend path array */
- paths = (pathlike *) realloc (paths, (1 + max_paths) * sizeof (paths[0]));
- }
-
- pathlike *pth = paths + num_paths;
-
- /* Allocate space for directory in path list */
- char *dir = (char *) calloc (maxlen + 2, sizeof (char));
- if (dir == NULL)
- {
- display_error ("add_path: calloc() failed");
- return;
- }
-
- /* Copy input directory to path list */
- memcpy (dir, s, maxlen);
-
- /* Add a trailing slash by default */
- char *e = strchr (dir, '\0');
- if (e != dir && e[-1] != '\\')
- strcpy (e, "\\");
-
- /* Fill out this element */
- pth->dir = dir;
- pth->issys = issys;
- pth[1].dir = NULL;
- num_paths++;
-}
-
-static void
-init_paths ()
-{
- char tmp[4000], *sl;
- add_path ((char *) ".", 1, true); /* to be replaced later */
-
- if (GetCurrentDirectory (4000, tmp))
- add_path (tmp, strlen (tmp), true);
- else
- display_error ("init_paths: GetCurrentDirectory()");
-
- if (GetSystemDirectory (tmp, 4000))
- add_path (tmp, strlen (tmp), true);
- else
- display_error ("init_paths: GetSystemDirectory()");
- sl = strrchr (tmp, '\\');
- if (sl)
- {
- strcpy (sl, "\\SYSTEM");
- add_path (tmp, strlen (tmp), true);
- }
- GetWindowsDirectory (tmp, 4000);
- add_path (tmp, strlen (tmp), true);
-
- char *wpath = getenv ("PATH");
- if (!wpath)
- display_error ("WARNING: PATH is not set\n", "");
- else
- {
- char *b, *e;
- b = wpath;
- while (1)
- {
- for (e = b; *e && *e != ';'; e++)
- continue; /* loop terminates at first ';' or EOS */
- if (strncmp(b, ".\\", 2) != 0)
- add_path (b, e - b, false);
- if (!*e)
- break;
- b = e + 1;
- }
- }
-}
-
-#define LINK_EXTENSION ".lnk"
-
-void
-pathlike::check_existence (const char *fn, int showall, int verbose,
- char* first, const char *ext1, const char *ext2)
-{
- char file[4000];
- strcpy (file, dir);
- strcat (file, fn);
- strcat (file, ext1);
- strcat (file, ext2);
-
- wide_path wpath (file);
- if (GetFileAttributesW (wpath) != (DWORD) - 1)
- {
- char *lastdot = strrchr (file, '.');
- bool is_link = lastdot && !strcmp (lastdot, LINK_EXTENSION);
- // If file is a link, fix up the extension before printing
- if (is_link)
- *lastdot = '\0';
- if (showall)
- printf ("Found: %s\n", file);
- if (verbose && *first != '\0' && strcasecmp (first, file) != 0)
- {
- char *flastdot = strrchr (first, '.');
- bool f_is_link = flastdot && !strcmp (flastdot, LINK_EXTENSION);
- // if first is a link, fix up the extension before printing
- if (f_is_link)
- *flastdot = '\0';
- printf ("Warning: %s hides %s\n", first, file);
- if (f_is_link)
- *flastdot = '.';
- }
- if (is_link)
- *lastdot = '.';
- if (!*first)
- strcpy (first, file);
- }
-}
-
-static const char *
-find_on_path (const char *in_file, const char *ext, bool showall = false,
- bool search_sys = false, bool checklinks = false)
-{
- static char rv[4000];
-
- /* Sort of a kludge but we've already tested this once, so don't try it again */
- if (in_file == rv)
- return in_file;
-
- static pathlike abspath[2] =
- {
- {emptystr, 0},
- {NULL, 0}
- };
-
- *rv = '\0';
- if (!in_file)
- {
- display_error ("internal error find_on_path: NULL pointer for file", false, false);
- return 0;
- }
-
- if (!ext)
- {
- display_error ("internal error find_on_path: NULL pointer for default_extension", false, false);
- return 0;
- }
-
- const char *file;
- pathlike *search_paths;
- if (!strpbrk (in_file, ":/\\"))
- {
- file = in_file;
- search_paths = paths;
- }
- else
- {
- file = cygpath (in_file, NULL);
- search_paths = abspath;
- showall = false;
- }
-
- if (!file)
- {
- display_error ("internal error find_on_path: cygpath conversion failed for %s\n", in_file);
- return 0;
- }
-
- char *hasext = strrchr (file, '.');
- if (hasext && !strpbrk (hasext, "/\\"))
- ext = "";
-
- for (pathlike *pth = search_paths; pth->dir; pth++)
- if (!pth->issys || search_sys)
- {
- pth->check_existence (file, showall, verbose, rv, ext);
-
- if (checklinks)
- pth->check_existence (file, showall, verbose, rv, ext, LINK_EXTENSION);
-
- if (!*ext)
- continue;
-
- pth->check_existence (file, showall, verbose, rv);
- if (checklinks)
- pth->check_existence (file, showall, verbose, rv, LINK_EXTENSION);
- }
-
- return *rv ? rv : NULL;
-}
-
-#define DID_NEW 1
-#define DID_ACTIVE 2
-#define DID_INACTIVE 3
-
-struct Did
-{
- Did *next;
- char *file;
- int state;
-};
-static Did *did = 0;
-
-static Did *
-already_did (const char *file)
-{
- Did *d;
- for (d = did; d; d = d->next)
- if (strcasecmp (d->file, file) == 0)
- return d;
- d = (Did *) malloc (sizeof (Did));
- d->file = strdup (file);
- d->next = did;
- d->state = DID_NEW;
- did = d;
- return d;
-}
-
-struct Section
-{
- char name[8];
- int virtual_size;
- int virtual_address;
- int size_of_raw_data;
- int pointer_to_raw_data;
-};
-
-static int
-rva_to_offset (int rva, char *sections, int nsections, int *sz)
-{
- int i;
-
- if (sections == NULL)
- {
- display_error ("rva_to_offset: NULL passed for sections", true, false);
- return 0;
- }
-
- for (i = 0; i < nsections; i++)
- {
- Section *s = (Section *) (sections + i * 40);
-#if 0
- printf ("%08x < %08x < %08x ? %08x\n",
- s->virtual_address, rva,
- s->virtual_address + s->virtual_size, s->pointer_to_raw_data);
-#endif
- if (rva >= s->virtual_address
- && rva < s->virtual_address + s->virtual_size)
- {
- if (sz)
- *sz = s->virtual_address + s->virtual_size - rva;
- return rva - s->virtual_address + s->pointer_to_raw_data;
- }
- }
- return 0; /* punt */
-}
-
-struct ExpDirectory
-{
- int flags;
- int timestamp;
- short major_ver;
- short minor_ver;
- int name_rva;
-};
-
-struct ImpDirectory
-{
- unsigned characteristics;
- unsigned timestamp;
- unsigned forwarder_chain;
- unsigned name_rva;
- unsigned iat_rva;
-};
-
-static bool track_down (const char *file, const char *suffix, int lvl);
-
-#define CYGPREFIX (sizeof ("%%% Cygwin ") - 1)
-static void
-cygwin_info (HANDLE h)
-{
- char *buf, *bufend, *buf_start = NULL;
- const char *hello = " Cygwin DLL version info:\n";
- DWORD size = GetFileSize (h, NULL);
- DWORD n;
-
- if (size == 0xffffffff)
- return;
-
- buf_start = buf = (char *) calloc (1, size + 1);
- if (buf == NULL)
- {
- display_error ("cygwin_info: calloc()");
- return;
- }
-
- (void) SetFilePointer (h, 0, NULL, FILE_BEGIN);
- if (!ReadFile (h, buf, size, &n, NULL))
- {
- free (buf_start);
- return;
- }
-
- static char dummy[] = "\0\0\0\0\0\0\0";
- char *dll_major = dummy;
- bufend = buf + size;
- while (buf < bufend)
- if ((buf = (char *) memchr (buf, '%', bufend - buf)) == NULL)
- break;
- else if (strncmp ("%%% Cygwin ", buf, CYGPREFIX) != 0)
- buf++;
- else
- {
- char *p = strchr (buf += CYGPREFIX, '\n');
- if (!p)
- break;
- if (strncasecmp (buf, "dll major:", 10) == 0)
- {
- dll_major = buf + 11;
- continue;
- }
- char *s, pbuf[80];
- int len;
- len = 1 + p - buf;
- if (strncasecmp (buf, "dll minor:", 10) != 0)
- s = buf;
- else
- {
- char c = dll_major[1];
- dll_major[1] = '\0';
- int maj = atoi (dll_major);
- dll_major[1] = c;
- int min = atoi (dll_major + 1);
- sprintf (pbuf, "DLL version: %d.%d.%.*s", maj, min, len - 11,
- buf + 11);
- len = strlen (s = pbuf);
- }
- if (strncmp (s, "dll", 3) == 0)
- memcpy (s, "DLL", 3);
- else if (strncmp (s, "api", 3) == 0)
- memcpy (s, "API", 3);
- else if (islower (*s))
- *s = toupper (*s);
- fprintf (stdout, "%s %.*s", hello, len, s);
- hello = "";
- }
-
- if (!*hello)
- puts ("");
-
- free (buf_start);
- return;
-}
-
-static void
-dll_info (const char *path, HANDLE fh, int lvl, int recurse)
-{
- DWORD junk;
- int i;
- if (is_symlink (fh))
- {
- if (!verbose)
- puts ("");
- else
- {
- char buf[PATH_MAX + 1] = "";
- readlink (fh, buf, sizeof(buf) - 1);
- printf (" (symlink to %s)\n", buf);
- }
- return;
- }
- int pe_header_offset = get_dword (fh, 0x3c);
- if (GetLastError () != NO_ERROR)
- display_error ("get_dword");
- WORD arch = get_word (fh, pe_header_offset + 4);
- if (GetLastError () != NO_ERROR)
- display_error ("get_word");
-#ifdef __x86_64__
- if (arch != IMAGE_FILE_MACHINE_AMD64)
- {
- puts (verbose ? " (not x86_64 dll)" : "\n");
- return;
- }
- int base_off = 108;
-#else
- if (arch != IMAGE_FILE_MACHINE_I386)
- {
- puts (verbose ? " (not x86 dll)" : "\n");
- return;
- }
- int base_off = 92;
-#endif
- int opthdr_ofs = pe_header_offset + 4 + 20;
- unsigned short v[6];
-
- if (path == NULL)
- {
- display_error ("dll_info: NULL passed for path", true, false);
- return;
- }
-
- if (SetFilePointer (fh, opthdr_ofs + 40, 0, FILE_BEGIN) ==
- INVALID_SET_FILE_POINTER && GetLastError () != NO_ERROR)
- display_error ("dll_info: SetFilePointer()");
-
- if (!ReadFile (fh, &v, sizeof (v), &junk, 0))
- display_error ("dll_info: Readfile()");
-
- if (verbose)
- printf (" - os=%d.%d img=%d.%d sys=%d.%d\n",
- v[0], v[1], v[2], v[3], v[4], v[5]);
- else
- printf ("\n");
-
- int num_entries = get_dword (fh, opthdr_ofs + base_off + 0);
- if (GetLastError () != NO_ERROR)
- display_error ("get_dword");
- int export_rva = get_dword (fh, opthdr_ofs + base_off + 4);
- if (GetLastError () != NO_ERROR)
- display_error ("get_dword");
- int export_size = get_dword (fh, opthdr_ofs + base_off + 8);
- if (GetLastError () != NO_ERROR)
- display_error ("get_dword");
- int import_rva = get_dword (fh, opthdr_ofs + base_off + 12);
- if (GetLastError () != NO_ERROR)
- display_error ("get_dword");
- int import_size = get_dword (fh, opthdr_ofs + base_off + 16);
- if (GetLastError () != NO_ERROR)
- display_error ("get_dword");
-
- int nsections = get_word (fh, pe_header_offset + 4 + 2);
- if (nsections == -1)
- display_error ("get_word");
- char *sections = (char *) malloc (nsections * 40);
-
- if (SetFilePointer (fh, pe_header_offset + 4 + 20 +
- get_word (fh, pe_header_offset + 4 + 16), 0,
- FILE_BEGIN) == INVALID_SET_FILE_POINTER
- && GetLastError () != NO_ERROR)
- display_error ("dll_info: SetFilePointer()");
-
- if (!ReadFile (fh, sections, nsections * 40, &junk, 0))
- display_error ("dll_info: Readfile()");
-
- if (verbose && num_entries >= 1 && export_size > 0)
- {
- int expsz;
- int expbase = rva_to_offset (export_rva, sections, nsections, &expsz);
-
- if (expbase)
- {
- if (SetFilePointer (fh, expbase, 0, FILE_BEGIN) ==
- INVALID_SET_FILE_POINTER && GetLastError () != NO_ERROR)
- display_error ("dll_info: SetFilePointer()");
-
- unsigned char *exp = (unsigned char *) malloc (expsz);
-
- if (!ReadFile (fh, exp, expsz, &junk, 0))
- display_error ("dll_info: Readfile()");
-
- ExpDirectory *ed = (ExpDirectory *) exp;
- int ofs = ed->name_rva - export_rva;
- time_t ts = ed->timestamp; /* timestamp is only 4 bytes! */
- struct tm *tm = localtime (&ts);
- if (tm && tm->tm_year < 60)
- tm->tm_year += 2000;
- if (tm && tm->tm_year < 200)
- tm->tm_year += 1900;
- printf ("%*c", lvl + 2, ' ');
- printf ("\"%s\" v%d.%d", exp + ofs,
- ed->major_ver, ed->minor_ver);
- if (tm)
- printf (" ts=%04d-%02d-%02d %02d:%02d",
- tm->tm_year, tm->tm_mon + 1, tm->tm_mday,
- tm->tm_hour, tm->tm_min);
- putchar ('\n');
- }
- }
-
- if (num_entries >= 2 && import_size > 0 && recurse)
- {
- int impsz;
- int impbase = rva_to_offset (import_rva, sections, nsections, &impsz);
- if (impbase)
- {
- if (SetFilePointer (fh, impbase, 0, FILE_BEGIN) ==
- INVALID_SET_FILE_POINTER && GetLastError () != NO_ERROR)
- display_error ("dll_info: SetFilePointer()");
-
- unsigned char *imp = (unsigned char *) malloc (impsz);
- if (imp == NULL)
- {
- display_error ("dll_info: malloc()");
- return;
- }
-
- if (!ReadFile (fh, imp, impsz, &junk, 0))
- display_error ("dll_info: Readfile()");
-
- ImpDirectory *id = (ImpDirectory *) imp;
- for (i = 0; id[i].name_rva; i++)
- {
- /* int ofs = id[i].name_rva - import_rva; */
- track_down ((char *) imp + id[i].name_rva - import_rva,
- (char *) ".dll", lvl + 2);
- }
- }
- }
- if (strstr (path, "\\cygwin1.dll"))
- cygwin_info (fh);
-}
-
-// Return true on success, false if error printed
-static bool
-track_down (const char *file, const char *suffix, int lvl)
-{
- if (file == NULL)
- {
- display_error ("track_down: NULL passed for file", true, false);
- return false;
- }
-
- if (suffix == NULL)
- {
- display_error ("track_down: NULL passed for suffix", false, false);
- return false;
- }
-
- const char *path = find_on_path (file, suffix, false, true);
- if (!path)
- {
- display_error ("track_down: could not find %s\n", file);
- return false;
- }
-
- Did *d = already_did (file);
- switch (d->state)
- {
- case DID_NEW:
- break;
- case DID_ACTIVE:
- if (verbose)
- {
- if (lvl)
- printf ("%*c", lvl, ' ');
- printf ("%s", path);
- printf (" (recursive)\n");
- }
- return true;
- case DID_INACTIVE:
- if (verbose)
- {
- if (lvl)
- printf ("%*c", lvl, ' ');
- printf ("%s", path);
- printf (" (already done)\n");
- }
- return true;
- default:
- break;
- }
-
- if (lvl)
- printf ("%*c", lvl, ' ');
-
- if (!path)
- {
- display_error ("file not found - '%s'\n", file);
- return false;
- }
-
- printf ("%s", path);
-
- wide_path wpath (path);
- HANDLE fh =
- CreateFileW (wpath, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE,
- NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
- if (fh == INVALID_HANDLE_VALUE)
- {
- display_error ("cannot open - '%s'\n", path);
- return false;
- }
-
- d->state = DID_ACTIVE;
-
- if (is_exe (fh))
- dll_info (path, fh, lvl, 1);
- else if (is_symlink (fh))
- display_error ("%s is a symlink instead of a DLL\n", path);
- else
- {
- int magic = get_word (fh, 0x0);
- if (magic == -1)
- display_error ("get_word");
- magic &= 0x00FFFFFF;
- display_error_fmt ("%s is not a DLL: magic number %x (%d) '%s'\n",
- path, magic, magic, (char *)&magic);
- }
-
- d->state = DID_INACTIVE;
- if (!CloseHandle (fh))
- display_error ("track_down: CloseHandle()");
- return true;
-}
-
-static void
-ls (char *f)
-{
- wide_path wpath (f);
- HANDLE h = CreateFileW (wpath, GENERIC_READ,
- FILE_SHARE_READ | FILE_SHARE_WRITE,
- 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
- BY_HANDLE_FILE_INFORMATION info;
-
- if (!GetFileInformationByHandle (h, &info))
- display_error ("ls: GetFileInformationByHandle()");
-
- SYSTEMTIME systime;
-
- if (!FileTimeToSystemTime (&info.ftLastWriteTime, &systime))
- display_error ("ls: FileTimeToSystemTime()");
- printf ("%5dk %04d/%02d/%02d %s",
- (((int) info.nFileSizeLow) + 512) / 1024,
- systime.wYear, systime.wMonth, systime.wDay, f);
- dll_info (f, h, 16, 0);
- if (!CloseHandle (h))
- display_error ("ls: CloseHandle()");
-}
-
-/* Remove filename from 's' and return directory name without trailing
- backslash, or NULL if 's' doesn't seem to have a dirname. */
-static char *
-dirname (const char *s)
-{
- static char buf[PATH_MAX];
-
- if (!s)
- return NULL;
-
- strncpy (buf, s, PATH_MAX);
- buf[PATH_MAX - 1] = '\0'; // in case strlen(s) > PATH_MAX
- char *lastsep = strrchr (buf, '\\');
- if (!lastsep)
- return NULL; // no backslash -> no dirname
- else if (lastsep - buf <= 2 && buf[1] == ':')
- lastsep[1] = '\0'; // can't remove backslash of "x:\"
- else
- *lastsep = '\0';
- return buf;
-}
-
-// Find a real application on the path (possibly following symlinks)
-static const char *
-find_app_on_path (const char *app, bool showall = false)
-{
- const char *papp = find_on_path (app, ".exe", showall, false, true);
-
- if (!papp)
- return NULL;
-
- wide_path wpath (papp);
- HANDLE fh =
- CreateFileW (wpath, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE,
- NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
- if (fh == INVALID_HANDLE_VALUE)
- return NULL;
-
- if (is_symlink (fh))
- {
- static char tmp[SYMLINK_MAX + 1];
- if (!readlink (fh, tmp, SYMLINK_MAX))
- display_error("readlink failed");
-
- /* Resolve the linkname relative to the directory of the link. */
- char *ptr = cygpath_rel (dirname (papp), tmp, NULL);
- printf (" -> %s\n", ptr);
- if (!strchr (ptr, '\\'))
- {
- char *lastsep;
- strncpy (tmp, cygpath (papp, NULL), SYMLINK_MAX);
- lastsep = strrchr (tmp, '\\');
- strncpy (lastsep+1, ptr, SYMLINK_MAX - (lastsep-tmp));
- ptr = tmp;
- }
- if (!CloseHandle (fh))
- display_error ("find_app_on_path: CloseHandle()");
- /* FIXME: We leak the ptr returned by cygpath() here which is a
- malloc()d string. */
- return find_app_on_path (ptr, showall);
- }
-
- if (!CloseHandle (fh))
- display_error ("find_app_on_path: CloseHandle()");
- return papp;
-}
-
-// Return true on success, false if error printed
-static bool
-cygcheck (const char *app)
-{
- const char *papp = find_app_on_path (app, 1);
- if (!papp)
- {
- display_error ("could not find '%s'\n", app);
- return false;
- }
-
- char *s;
- char *sep = strpbrk (papp, ":/\\");
- if (!sep)
- {
- static char dot[] = ".";
- s = dot;
- }
- else
- {
- int n = sep - papp;
- s = (char *) malloc (n + 2);
- memcpy ((char *) s, papp, n);
- strcpy (s + n, "\\");
- }
-
- paths[0].dir = s;
- did = NULL;
- return track_down (papp, ".exe", 0);
-}
-
-struct RegInfo
-{
- RegInfo *prev;
- char *name;
- HKEY key;
-};
-
-static void
-show_reg (RegInfo * ri, int nest)
-{
- if (!ri)
- return;
- show_reg (ri->prev, 1);
- if (nest)
- printf ("%s\\", ri->name);
- else
- printf ("%s\n", ri->name);
-}
-
-static void
-scan_registry (RegInfo * prev, HKEY hKey, char *name, int cygwin, bool wow64)
-{
- RegInfo ri;
- ri.prev = prev;
- ri.name = name;
- ri.key = hKey;
-
- char *cp;
- for (cp = name; *cp; cp++)
- if (strncasecmp (cp, "Cygwin", 6) == 0)
- cygwin = 1;
-
- DWORD num_subkeys, max_subkey_len, num_values;
- DWORD max_value_len, max_valdata_len, i;
- if (RegQueryInfoKey (hKey, 0, 0, 0, &num_subkeys, &max_subkey_len, 0,
- &num_values, &max_value_len, &max_valdata_len, 0, 0)
- != ERROR_SUCCESS)
- {
-#if 0
- char tmp[400];
- FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM, 0, GetLastError (),
- MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT), tmp, 400, 0);
- printf ("RegQueryInfoKey: %s\n", tmp);
-#endif
- return;
- }
-
- if (cygwin)
- {
- show_reg (&ri, 0);
-
- char *value_name = (char *) malloc (max_value_len + 1);
- if (value_name == NULL)
- {
- display_error ("scan_registry: malloc()");
- return;
- }
-
- char *value_data = (char *) malloc (max_valdata_len + 1);
- if (value_data == NULL)
- {
- display_error ("scan_registry: malloc()");
- return;
- }
-
- for (i = 0; i < num_values; i++)
- {
- DWORD dlen = max_valdata_len + 1;
- DWORD nlen = max_value_len + 1;
- DWORD type;
- RegEnumValue (hKey, i, value_name, &nlen, 0,
- &type, (BYTE *) value_data, &dlen);
- {
- printf (" %s = ", i ? value_name : "(default)");
- switch (type)
- {
- case REG_DWORD:
- printf ("0x%08x\n", *(unsigned *) value_data);
- break;
- case REG_EXPAND_SZ:
- case REG_SZ:
- printf ("'%s'\n", value_data);
- break;
- default:
- printf ("(unsupported type)\n");
- break;
- }
- }
- }
- free (value_name);
- free (value_data);
- }
-
- char *subkey_name = (char *) malloc (max_subkey_len + 1);
- for (i = 0; i < num_subkeys; i++)
- {
- if (RegEnumKey (hKey, i, subkey_name, max_subkey_len + 1) ==
- ERROR_SUCCESS)
- {
- HKEY sKey;
- /* Don't recurse more than one level into the WOW64 subkey since
- that would lead to an endless recursion. */
- if (!strcasecmp (subkey_name, "Wow6432Node"))
- {
- if (wow64)
- continue;
- wow64 = true;
- }
- if (RegOpenKeyEx (hKey, subkey_name, 0, KEY_READ, &sKey)
- == ERROR_SUCCESS)
- {
- scan_registry (&ri, sKey, subkey_name, cygwin, wow64);
- if (RegCloseKey (sKey) != ERROR_SUCCESS)
- display_error ("scan_registry: RegCloseKey()");
- }
- }
- }
- free (subkey_name);
-}
-
-void
-pretty_id ()
-{
- char *groups[16384];
-
- char *id = cygpath ("/bin/id.exe", NULL);
- for (char *p = id; (p = strchr (p, '/')); p++)
- *p = '\\';
-
- if (access (id, X_OK))
- {
- fprintf (stderr, "'id' program not found\n");
- return;
- }
-
- char buf[16384];
- snprintf (buf, sizeof (buf), "\"%s\"", id);
- FILE *f = popen (buf, "rt");
-
- buf[0] = '\0';
- fgets (buf, sizeof (buf), f);
- pclose (f);
- char *uid = strtok (buf, ")");
- if (uid)
- uid += strlen ("uid=");
- else
- {
- fprintf (stderr, "garbled output from 'id' command - no uid= found\n");
- return;
- }
- char *gid = strtok (NULL, ")");
- if (gid)
- gid += strlen ("gid=") + 1;
- else
- {
- fprintf (stderr, "garbled output from 'id' command - no gid= found\n");
- return;
- }
-
- char **ng = groups - 1;
- size_t len_uid = strlen ("UID: )") + strlen (uid);
- size_t len_gid = strlen ("GID: )") + strlen (gid);
- *++ng = groups[0] = (char *) alloca (len_uid + 1);
- *++ng = groups[1] = (char *) alloca (len_gid + 1);
- sprintf (groups[0], "UID: %s)", uid);
- sprintf (groups[1], "GID: %s)", gid);
- size_t sz = max (len_uid, len_gid);
- while ((*++ng = strtok (NULL, ",")))
- {
- char *p = strchr (*ng, '\n');
- if (p)
- *p = '\0';
- if (ng == groups + 2)
- *ng += strlen (" groups=");
- size_t len = strlen (*ng);
- if (sz < len)
- sz = len;
- }
- ng--;
-
- printf ("\nOutput from %s\n", id);
- int n = 80 / (int) ++sz;
- int i = n > 2 ? n - 2 : 0;
- sz = -sz;
- for (char **g = groups; g <= ng; g++)
- if ((g != ng) && (++i < n))
- printf ("%*s", (int) sz, *g);
- else
- {
- puts (*g);
- i = 0;
- }
-}
-
-/* This dumps information about each installed cygwin service, if cygrunsrv
- is available. */
-void
-dump_sysinfo_services ()
-{
- char buf[1024];
- char buf2[1024];
- FILE *f;
- bool no_services = false;
-
- if (givehelp)
- printf ("\nChecking for any Cygwin services... %s\n\n",
- verbose ? "" : "(use -v for more detail)");
- else
- fputc ('\n', stdout);
-
- /* find the location of cygrunsrv.exe */
- char *cygrunsrv = cygpath ("/bin/cygrunsrv.exe", NULL);
- for (char *p = cygrunsrv; (p = strchr (p, '/')); p++)
- *p = '\\';
-
- if (access (cygrunsrv, X_OK))
- {
- puts ("Can't find the cygrunsrv utility, skipping services check.\n");
- return;
- }
-
- /* check for a recent cygrunsrv */
- snprintf (buf, sizeof (buf), "\"%s\" --version", cygrunsrv);
- if ((f = popen (buf, "rt")) == NULL)
- {
- printf ("Failed to execute '%s', skipping services check.\n", buf);
- return;
- }
- int maj, min;
- int ret = fscanf (f, "cygrunsrv V%u.%u", &maj, &min);
- if (ferror (f) || feof (f) || ret == EOF || maj < 1 || min < 10)
- {
- puts ("The version of cygrunsrv installed is too old to dump service info.\n");
- return;
- }
- fclose (f);
-
- /* For verbose mode, just run cygrunsrv --list --verbose and copy output
- verbatim; otherwise run cygrunsrv --list and then cygrunsrv --query for
- each service. */
- snprintf (buf, sizeof (buf), (verbose ? "\"%s\" --list --verbose" : "\"%s\" --list"),
- cygrunsrv);
- if ((f = popen (buf, "rt")) == NULL)
- {
- printf ("Failed to execute '%s', skipping services check.\n", buf);
- return;
- }
-
- if (verbose)
- {
- /* copy output to stdout */
- size_t nchars = 0;
- while (!feof (f) && !ferror (f))
- nchars += fwrite ((void *) buf, 1,
- fread ((void *) buf, 1, sizeof (buf), f), stdout);
-
- /* cygrunsrv outputs nothing if there are no cygwin services found */
- if (nchars < 1)
- no_services = true;
- pclose (f);
- }
- else
- {
- /* read the output of --list, and then run --query for each service */
- size_t nchars = fread ((void *) buf, 1, sizeof (buf) - 1, f);
- buf[nchars] = 0;
- pclose (f);
-
- if (nchars > 0)
- for (char *srv = strtok (buf, "\n"); srv; srv = strtok (NULL, "\n"))
- {
- snprintf (buf2, sizeof (buf2), "\"%s\" --query %s", cygrunsrv, srv);
- if ((f = popen (buf2, "rt")) == NULL)
- {
- printf ("Failed to execute '%s', skipping services check.\n", buf2);
- return;
- }
-
- /* copy output to stdout */
- while (!feof (f) && !ferror (f))
- fwrite ((void *) buf2, 1,
- fread ((void *) buf2, 1, sizeof (buf2), f), stdout);
- pclose (f);
- }
- else
- no_services = true;
- }
-
- /* inform the user if nothing found */
- if (no_services)
- puts ("No Cygwin services found.\n");
-}
-
-enum handle_reg_t
-{
- PRINT_KEY,
- DELETE_KEY
-};
-
-void
-handle_reg_installation (handle_reg_t what)
-{
- HKEY key;
-
- if (what == PRINT_KEY)
- printf ("Cygwin installations found in the registry:\n");
- for (int i = 0; i < 2; ++i)
- if (RegOpenKeyEx (i ? HKEY_CURRENT_USER : HKEY_LOCAL_MACHINE,
- "SOFTWARE\\Cygwin\\Installations", 0,
- what == DELETE_KEY ? KEY_READ | KEY_WRITE : KEY_READ,
- &key)
- == ERROR_SUCCESS)
- {
- char name[32], data[PATH_MAX];
- DWORD nsize, dsize, type;
- LONG ret;
-
- for (DWORD index = 0;
- (ret = RegEnumValue (key, index, name, (nsize = 32, &nsize), 0,
- &type, (PBYTE) data,
- (dsize = PATH_MAX, &dsize)))
- != ERROR_NO_MORE_ITEMS; ++index)
- if (ret == ERROR_SUCCESS && dsize > 5)
- {
- char *path = data + 4;
- if (path[1] != ':')
- *(path += 2) = '\\';
- if (what == PRINT_KEY)
- printf (" %s Key: %s Path: %s", i ? "User: " : "System:",
- name, path);
- strcat (path, "\\bin\\cygwin1.dll");
- if (what == PRINT_KEY)
- printf ("%s\n", access (path, F_OK) ? " (ORPHANED)" : "");
- else if (access (path, F_OK))
- {
- RegDeleteValue (key, name);
- /* Start over since index is not reliable anymore. */
- --i;
- break;
- }
- }
- RegCloseKey (key);
- }
- if (what == PRINT_KEY)
- printf ("\n");
-}
-
-void
-print_reg_installations ()
-{
- handle_reg_installation (PRINT_KEY);
-}
-
-void
-del_orphaned_reg_installations ()
-{
- handle_reg_installation (DELETE_KEY);
-}
-
-/* Unfortunately neither mingw nor Windows know this function. */
-char *
-memmem (char *haystack, size_t haystacklen,
- const char *needle, size_t needlelen)
-{
- if (needlelen == 0)
- return haystack;
- while (needlelen <= haystacklen)
- {
- if (!memcmp (haystack, needle, needlelen))
- return haystack;
- haystack++;
- haystacklen--;
- }
- return NULL;
-}
-
-int
-handle_unique_object_name (int opt, char *path)
-{
- HANDLE fh, fm;
- void *haystack = NULL;
-
- if (!path || !*path)
- usage (stderr, 1);
-
- DWORD access, share, protect, mapping;
-
- if (opt == CO_SHOW_UON)
- {
- access = GENERIC_READ;
- share = FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE;
- protect = PAGE_READONLY;
- mapping = FILE_MAP_READ;
- }
- else
- {
- access = GENERIC_READ | GENERIC_WRITE;
- share = 0;
- protect = PAGE_READWRITE;
- mapping = FILE_MAP_WRITE;
- }
-
- fh = CreateFile (path, access, share, NULL, OPEN_EXISTING,
- FILE_FLAG_BACKUP_SEMANTICS, NULL);
- if (fh == INVALID_HANDLE_VALUE)
- {
- DWORD err = GetLastError ();
- switch (err)
- {
- case ERROR_SHARING_VIOLATION:
- display_error ("%s still used by other Cygwin processes.\n"
- "Please stop all of them and retry.", path);
- break;
- case ERROR_ACCESS_DENIED:
- display_error (
- "Your permissions are not sufficient to change the file \"%s\"",
- path);
- break;
- case ERROR_FILE_NOT_FOUND:
- display_error ("%s: No such file.", path);
- break;
- default:
- display_error (path, true, false);
- break;
- }
- return 1;
- }
- if (!(fm = CreateFileMapping (fh, NULL, protect, 0, 0, NULL)))
- display_error ("CreateFileMapping");
- else if (!(haystack = MapViewOfFile (fm, mapping, 0, 0, 0)))
- display_error ("MapViewOfFile");
- else
- {
- size_t haystacklen = GetFileSize (fh, NULL);
- cygwin_props_t *cygwin_props = (cygwin_props_t *)
- memmem ((char *) haystack, haystacklen,
- CYGWIN_PROPS_MAGIC, sizeof (CYGWIN_PROPS_MAGIC));
- if (!cygwin_props)
- display_error ("Can't find Cygwin properties in %s", path);
- else
- {
- if (opt != CO_SHOW_UON)
- cygwin_props->disable_key = opt - CO_ENABLE_UON;
- printf ("Unique object names are %s\n",
- cygwin_props->disable_key ? "disabled" : "enabled");
- UnmapViewOfFile (haystack);
- CloseHandle (fm);
- CloseHandle (fh);
- return 0;
- }
- }
- if (haystack)
- UnmapViewOfFile (haystack);
- if (fm)
- CloseHandle (fm);
- CloseHandle (fh);
- return 1;
-}
-
-extern "C" NTSTATUS NTAPI RtlGetVersion (PRTL_OSVERSIONINFOEXW);
-
-static void
-dump_sysinfo ()
-{
- int i, j;
- char tmp[4000];
- time_t now;
- char *found_cygwin_dll;
- bool is_nt = false;
- char osname[128];
- DWORD obcaseinsensitive = 1;
- HKEY key;
-
- /* MSVCRT popen (called by pretty_id and dump_sysinfo_services) SEGVs if
- COMSPEC isn't set correctly. Simply enforce it here. Using
- Get/SetEnvironmentVariable to set the dir does *not* help, btw.
- Apparently MSVCRT keeps its own copy of the environment and changing
- that requires to use _wputenv. */
- if (!_wgetenv (L"COMSPEC"))
- {
- WCHAR comspec[MAX_PATH + 17];
- wcscpy (comspec, L"COMSPEC=");
- GetSystemDirectoryW (comspec + 8, MAX_PATH);
- wcsncat (comspec, L"\\cmd.exe", sizeof comspec);
- _wputenv (comspec);
- }
-
- printf ("\nCygwin Configuration Diagnostics\n");
- time (&now);
- printf ("Current System Time: %s\n", ctime (&now));
-
- RTL_OSVERSIONINFOEXW osversion;
- osversion.dwOSVersionInfoSize = sizeof (RTL_OSVERSIONINFOEXW);
- RtlGetVersion (&osversion);
-
- switch (osversion.dwPlatformId)
- {
- case VER_PLATFORM_WIN32_NT:
- is_nt = true;
- if (osversion.dwMajorVersion == 6)
- {
- HMODULE k32 = GetModuleHandleW (L"kernel32.dll");
- BOOL (WINAPI *GetProductInfo) (DWORD, DWORD, DWORD, DWORD, PDWORD) =
- (BOOL (WINAPI *)(DWORD, DWORD, DWORD, DWORD, PDWORD))
- GetProcAddress (k32, "GetProductInfo");
- switch (osversion.dwMinorVersion)
- {
- case 0:
- strcpy (osname, osversion.wProductType == VER_NT_WORKSTATION
- ? "Vista" : "2008");
- break;
- case 1:
- strcpy (osname, osversion.wProductType == VER_NT_WORKSTATION
- ? "7" : "2008 R2");
- break;
- case 2:
- strcpy (osname, osversion.wProductType == VER_NT_WORKSTATION
- ? "8" : "2012");
- break;
- case 3:
- strcpy (osname, osversion.wProductType == VER_NT_WORKSTATION
- ? "8.1" : "2012 R2");
- break;
- case 4:
- default:
- strcpy (osname, osversion.wProductType == VER_NT_WORKSTATION
- ? "10" : "2014");
- break;
- }
- DWORD prod;
- if (GetProductInfo (osversion.dwMajorVersion,
- osversion.dwMinorVersion,
- osversion.wServicePackMajor,
- osversion.wServicePackMinor,
- &prod))
- {
- const char *products[] =
- {
- /* 0x00000000 */ "",
- /* 0x00000001 */ " Ultimate",
- /* 0x00000002 */ " Home Basic",
- /* 0x00000003 */ " Home Premium",
- /* 0x00000004 */ " Enterprise",
- /* 0x00000005 */ " Home Basic N",
- /* 0x00000006 */ " Business",
- /* 0x00000007 */ " Server Standard",
- /* 0x00000008 */ " Server Datacenter",
- /* 0x00000009 */ " Small Business Server",
- /* 0x0000000a */ " Server Enterprise",
- /* 0x0000000b */ " Starter",
- /* 0x0000000c */ " Server Datacenter Core",
- /* 0x0000000d */ " Server Standard Core",
- /* 0x0000000e */ " Server Enterprise Core",
- /* 0x0000000f */ " Server Enterprise for Itanium-based Systems",
- /* 0x00000010 */ " Business N",
- /* 0x00000011 */ " Web Server",
- /* 0x00000012 */ " HPC Edition",
- /* 0x00000013 */ " Home Server",
- /* 0x00000014 */ " Storage Server Express",
- /* 0x00000015 */ " Storage Server Standard",
- /* 0x00000016 */ " Storage Server Workgroup",
- /* 0x00000017 */ " Storage Server Enterprise",
- /* 0x00000018 */ " for Windows Essential Server Solutions",
- /* 0x00000019 */ " Small Business Server Premium",
- /* 0x0000001a */ " Home Premium N",
- /* 0x0000001b */ " Enterprise N",
- /* 0x0000001c */ " Ultimate N",
- /* 0x0000001d */ " Web Server Core",
- /* 0x0000001e */ " Essential Business Server Management Server",
- /* 0x0000001f */ " Essential Business Server Security Server",
- /* 0x00000020 */ " Essential Business Server Messaging Server",
- /* 0x00000021 */ " Server Foundation",
- /* 0x00000022 */ " Home Server 2011",
- /* 0x00000023 */ " without Hyper-V for Windows Essential Server Solutions",
- /* 0x00000024 */ " Server Standard without Hyper-V",
- /* 0x00000025 */ " Server Datacenter without Hyper-V",
- /* 0x00000026 */ " Server Enterprise without Hyper-V",
- /* 0x00000027 */ " Server Datacenter Core without Hyper-V",
- /* 0x00000028 */ " Server Standard Core without Hyper-V",
- /* 0x00000029 */ " Server Enterprise Core without Hyper-V",
- /* 0x0000002a */ " Hyper-V Server",
- /* 0x0000002b */ " Storage Server Express Core",
- /* 0x0000002c */ " Storage Server Standard Core",
- /* 0x0000002d */ " Storage Server Workgroup Core",
- /* 0x0000002e */ " Storage Server Enterprise Core",
- /* 0x0000002f */ " Starter N",
- /* 0x00000030 */ " Professional",
- /* 0x00000031 */ " Professional N",
- /* 0x00000032 */ " Small Business Server 2011 Essentials",
- /* 0x00000033 */ " Server For SB Solutions",
- /* 0x00000034 */ " Server Solutions Premium",
- /* 0x00000035 */ " Server Solutions Premium Core",
- /* 0x00000036 */ " Server For SB Solutions EM", /* per MSDN, 2012-09-01 */
- /* 0x00000037 */ " Server For SB Solutions EM", /* per MSDN, 2012-09-01 */
- /* 0x00000038 */ " Multipoint Server",
- /* 0x00000039 */ "",
- /* 0x0000003a */ "",
- /* 0x0000003b */ " Essential Server Solution Management",
- /* 0x0000003c */ " Essential Server Solution Additional",
- /* 0x0000003d */ " Essential Server Solution Management SVC",
- /* 0x0000003e */ " Essential Server Solution Additional SVC",
- /* 0x0000003f */ " Small Business Server Premium Core",
- /* 0x00000040 */ " Server Hyper Core V",
- /* 0x00000041 */ "",
- /* 0x00000042 */ " Starter E",
- /* 0x00000043 */ " Home Basic E",
- /* 0x00000044 */ " Home Premium E",
- /* 0x00000045 */ " Professional E",
- /* 0x00000046 */ " Enterprise E",
- /* 0x00000047 */ " Ultimate E",
- /* 0x00000048 */ " Server Enterprise (Evaluation inst.)",
- /* 0x00000049 */ "",
- /* 0x0000004a */ "",
- /* 0x0000004b */ "",
- /* 0x0000004c */ " MultiPoint Server Standard",
- /* 0x0000004d */ " MultiPoint Server Premium",
- /* 0x0000004e */ "",
- /* 0x0000004f */ " Server Standard (Evaluation inst.)",
- /* 0x00000050 */ " Server Datacenter (Evaluation inst.)",
- /* 0x00000051 */ "",
- /* 0x00000052 */ "",
- /* 0x00000053 */ "",
- /* 0x00000054 */ " Enterprise N (Evaluation inst.)",
- /* 0x00000055 */ "",
- /* 0x00000056 */ "",
- /* 0x00000057 */ "",
- /* 0x00000058 */ "",
- /* 0x00000059 */ "",
- /* 0x0000005a */ "",
- /* 0x0000005b */ "",
- /* 0x0000005c */ "",
- /* 0x0000005d */ "",
- /* 0x0000005e */ "",
- /* 0x0000005f */ " Storage Server Workgroup (Evaluation inst.)",
- /* 0x00000060 */ " Storage Server Standard (Evaluation inst.)",
- /* 0x00000061 */ "",
- /* 0x00000062 */ " N", /* "8 N" */
- /* 0x00000063 */ " China", /* "8 China" */
- /* 0x00000064 */ " Single Language", /* "8 Single Language" */
- /* 0x00000065 */ "", /* "8" */
- /* 0x00000066 */ "",
- /* 0x00000067 */ " Professional with Media Center"
- };
- if (prod == PRODUCT_UNLICENSED)
- strcat (osname, "Unlicensed");
- else if (prod > PRODUCT_PROFESSIONAL_WMC)
- strcat (osname, "");
- else
- strcat (osname, products[prod]);
- }
- else
- {
- }
- }
- else if (osversion.dwMajorVersion == 5)
- {
- /* cygcheck won't run on Windows 200 or earlier. */
- if (osversion.dwMinorVersion == 1)
- {
- strcpy (osname, "XP");
- if (GetSystemMetrics (SM_MEDIACENTER))
- strcat (osname, " Media Center Edition");
- else if (GetSystemMetrics (SM_TABLETPC))
- strcat (osname, " Tablet PC Edition");
- else if (GetSystemMetrics (SM_STARTER))
- strcat (osname, " Starter Edition");
- else if (osversion.wSuiteMask & VER_SUITE_PERSONAL)
- strcat (osname, " Home Edition");
- else
- strcat (osname, " Professional");
- }
- else if (osversion.dwMinorVersion == 2)
- {
- strcpy (osname, "2003 Server");
- if (GetSystemMetrics (SM_SERVERR2))
- strcat (osname, " R2");
- if (osversion.wSuiteMask & VER_SUITE_BLADE)
- strcat (osname, " Web Edition");
- else if (osversion.wSuiteMask & VER_SUITE_DATACENTER)
- strcat (osname, " Datacenter Edition");
- else if (osversion.wSuiteMask & VER_SUITE_ENTERPRISE)
- strcat (osname, " Enterprise Edition");
- else if (osversion.wSuiteMask & VER_SUITE_COMPUTE_SERVER)
- strcat (osname, " Compute Cluster Edition");
- }
- }
- else
- strcpy (osname, "NT");
- break;
- default:
- strcpy (osname, "??");
- break;
- }
- printf ("Windows %s Ver %lu.%lu Build %lu %ls\n", osname,
- osversion.dwMajorVersion, osversion.dwMinorVersion,
- osversion.dwPlatformId == VER_PLATFORM_WIN32_NT ?
- osversion.dwBuildNumber : (osversion.dwBuildNumber & 0xffff),
- osversion.dwPlatformId == VER_PLATFORM_WIN32_NT ?
- osversion.szCSDVersion : L"");
-
- if (osversion.dwPlatformId == VER_PLATFORM_WIN32s
- || osversion.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
- exit (EXIT_FAILURE);
-
- BOOL is_wow64 = FALSE;
- if (IsWow64Process (GetCurrentProcess (), &is_wow64) && is_wow64)
- {
- SYSTEM_INFO natinfo;
- GetNativeSystemInfo (&natinfo);
- fputs ("\nRunning under WOW64 on ", stdout);
- switch (natinfo.wProcessorArchitecture)
- {
- case PROCESSOR_ARCHITECTURE_IA64:
- puts ("IA64");
- break;
- case PROCESSOR_ARCHITECTURE_AMD64:
- puts ("AMD64");
- break;
- default:
- puts("??");
- break;
- }
- }
-
- if (GetSystemMetrics (SM_REMOTESESSION))
- printf ("\nRunning in Terminal Service session\n");
-
- printf ("\nPath:");
- char *s = getenv ("PATH"), *e;
- if (!s)
- puts ("");
- else
- {
- char sep = strchr (s, ';') ? ';' : ':';
- int count_path_items = 0;
- while (1)
- {
- for (e = s; *e && *e != sep; e++);
- if (e-s)
- printf ("\t%.*s\n", (int) (e - s), s);
- else
- puts ("\t.");
- count_path_items++;
- if (!*e)
- break;
- s = e + 1;
- }
- }
-
- fflush (stdout);
-
- pretty_id ();
-
- if (!GetSystemDirectory (tmp, 4000))
- display_error ("dump_sysinfo: GetSystemDirectory()");
- printf ("\nSysDir: %s\n", tmp);
-
- GetWindowsDirectory (tmp, 4000);
- printf ("WinDir: %s\n\n", tmp);
-
-
- if (givehelp)
- printf ("Here's some environment variables that may affect cygwin:\n");
- for (i = 0; environ[i]; i++)
- {
- char *eq = strchr (environ[i], '=');
- if (!eq)
- continue;
- /* int len = eq - environ[i]; */
- for (j = 0; known_env_vars[j]; j++)
- {
- *eq = 0;
- if (strcmp (environ[i], "PATH") == 0)
- continue; /* we handle this one specially */
- if (strcasecmp (environ[i], known_env_vars[j]) == 0)
- printf ("%s = '%s'\n", environ[i], eq + 1);
- *eq = '=';
- }
- }
- printf ("\n");
-
- if (verbose)
- {
- if (givehelp)
- printf ("Here's the rest of your environment variables:\n");
- for (i = 0; environ[i]; i++)
- {
- int found = 0;
- char *eq = strchr (environ[i], '=');
- if (!eq)
- continue;
- /* int len = eq - environ[i]; */
- for (j = 0; known_env_vars[j]; j++)
- {
- *eq = 0;
- if (strcasecmp (environ[i], known_env_vars[j]) == 0)
- found = 1;
- *eq = '=';
- }
- if (!found)
- {
- *eq = 0;
- printf ("%s = '%s'\n", environ[i], eq + 1);
- *eq = '=';
- }
- }
- printf ("\n");
- }
-
- if (registry)
- {
- if (givehelp)
- printf ("Scanning registry for keys with 'Cygwin' in them...\n");
- scan_registry (0, HKEY_CURRENT_USER,
- (char *) "HKEY_CURRENT_USER", 0, false);
- scan_registry (0, HKEY_LOCAL_MACHINE,
- (char *) "HKEY_LOCAL_MACHINE", 0, false);
- printf ("\n");
- }
- else
- printf ("Use '-r' to scan registry\n\n");
-
- if (RegOpenKeyEx (HKEY_LOCAL_MACHINE,
- "SYSTEM\\CurrentControlSet\\Control\\Session Manager\\kernel",
- 0, KEY_READ, &key) == ERROR_SUCCESS)
- {
- DWORD size;
- RegQueryValueEx (key, "obcaseinsensitive", NULL, NULL,
- (LPBYTE) &obcaseinsensitive, &size);
- RegCloseKey (key);
- }
- printf ("obcaseinsensitive set to %lu\n\n", obcaseinsensitive);
-
- print_reg_installations ();
-
- if (givehelp)
- {
- printf ("Listing available drives...\n");
- printf ("Drv Type Size Used Flags Name\n");
- }
- int prev_mode =
- SetErrorMode (SEM_FAILCRITICALERRORS | SEM_NOOPENFILEERRORBOX);
- int drivemask = GetLogicalDrives ();
-
- for (i = 0; i < 26; i++)
- {
- if (!(drivemask & (1 << i)))
- continue;
- char drive[4], name[200], fsname[200];
- DWORD serno = 0, maxnamelen = 0, flags = 0;
- name[0] = fsname[0] = 0;
- sprintf (drive, "%c:\\", i + 'a');
- /* Report all errors, except if the Volume is ERROR_NOT_READY.
- ERROR_NOT_READY is returned when removeable media drives are empty
- (CD, floppy, etc.) */
- if (!GetVolumeInformation (drive, name, sizeof (name), &serno,
- &maxnamelen, &flags, fsname,
- sizeof (fsname))
- && GetLastError () != ERROR_NOT_READY)
- {
-# define FMT "dump_sysinfo: GetVolumeInformation() for drive %c:"
- char buf[sizeof (FMT)];
- sprintf (buf, FMT, 'A' + i);
- display_error (buf);
-# undef FMT
- }
-
- int dtype = GetDriveType (drive);
- char drive_type[4] = "unk";
- switch (dtype)
- {
- case DRIVE_REMOVABLE:
- strcpy (drive_type, "fd ");
- break;
- case DRIVE_FIXED:
- strcpy (drive_type, "hd ");
- break;
- case DRIVE_REMOTE:
- strcpy (drive_type, "net");
- break;
- case DRIVE_CDROM:
- strcpy (drive_type, "cd ");
- break;
- case DRIVE_RAMDISK:
- strcpy (drive_type, "ram");
- break;
- default:
- strcpy (drive_type, "unk");
- }
-
- long capacity_mb = -1;
- int percent_full = -1;
-
- ULARGE_INTEGER free_me, free_bytes, total_bytes;
- free_me.QuadPart = free_bytes.QuadPart = 0ULL;
- total_bytes.QuadPart = 1ULL;
- if (GetDiskFreeSpaceEx (drive, &free_me, &total_bytes, &free_bytes))
- {
- capacity_mb = total_bytes.QuadPart / (1024L * 1024L);
- percent_full = 100 - (int) ((100.0 * free_me.QuadPart)
- / total_bytes.QuadPart);
- }
- else
- {
- DWORD spc = 0, bps = 0, fc = 0, tc = 1;
- if (GetDiskFreeSpace (drive, &spc, &bps, &fc, &tc))
- {
- capacity_mb = (spc * bps * tc) / (1024 * 1024);
- percent_full = 100 - (int) ((100.0 * fc) / tc);
- }
- }
-
- printf ("%.2s %s %-6s ", drive, drive_type, fsname);
- if (capacity_mb >= 0)
- printf ("%7dMb %3d%% ", (int) capacity_mb, (int) percent_full);
- else
- printf (" N/A N/A ");
- printf ("%s %s %s %s %s %s %s\n",
- flags & FS_CASE_IS_PRESERVED ? "CP" : " ",
- flags & FS_CASE_SENSITIVE ? "CS" : " ",
- flags & FS_UNICODE_STORED_ON_DISK ? "UN" : " ",
- flags & FS_PERSISTENT_ACLS ? "PA" : " ",
- flags & FS_FILE_COMPRESSION ? "FC" : " ",
- flags & FS_VOL_IS_COMPRESSED ? "VC" : " ",
-#if 0
- flags & FILE_SUPPORTS_ENCRYPTION ? "EN" : " ",
- flags & FILE_SUPPORTS_OBJECT_IDS ? "OI" : " ",
- flags & FILE_SUPPORTS_REPARSE_POINTS ? "RP" : " ",
- flags & FILE_SUPPORTS_SPARSE_FILES ? "SP" : " ",
- flags & FILE_VOLUME_QUOTAS ? "QU" : " ",
-#endif
- name);
- }
-
- SetErrorMode (prev_mode);
- if (givehelp)
- {
- puts ("\n"
- "fd = floppy, hd = hard drive, cd = CD-ROM\n"
- "net= Network Share, ram= RAM drive, unk= Unknown\n"
- "CP = Case Preserving, CS = Case Sensitive, UN = Unicode\n"
- "PA = Persistent ACLS, FC = File Compression, VC = Volume Compression");
- }
- printf ("\n");
-
- unsigned ml_fsname = 4, ml_dir = 7, ml_type = 6;
- bool ml_trailing = false;
-
- struct mntent *mnt;
- setmntent (0, 0);
- while ((mnt = getmntent (0)))
- {
- unsigned n = (int) strlen (mnt->mnt_fsname);
- ml_trailing |= (n > 1 && strchr ("\\/", mnt->mnt_fsname[n - 1]));
- if (ml_fsname < n)
- ml_fsname = n;
- n = (int) strlen (mnt->mnt_dir);
- ml_trailing |= (n > 1 && strchr ("\\/", mnt->mnt_dir[n - 1]));
- if (ml_dir < n)
- ml_dir = n;
- }
-
- if (ml_trailing)
- puts ("Warning: Mount entries should not have a trailing (back)slash\n");
-
- if (givehelp)
- {
- printf
- ("Mount entries: these map POSIX directories to your NT drives.\n");
- printf ("%-*s %-*s %-*s %s\n", ml_fsname, "-NT-", ml_dir, "-POSIX-",
- ml_type, "-Type-", "-Flags-");
- }
-
- setmntent (0, 0);
- while ((mnt = getmntent (0)))
- {
- printf ("%-*s %-*s %-*s %s\n",
- ml_fsname, mnt->mnt_fsname,
- ml_dir, mnt->mnt_dir, ml_type, mnt->mnt_type, mnt->mnt_opts);
- }
- printf ("\n");
-
- if (givehelp)
- printf
- ("Looking to see where common programs can be found, if at all...\n");
- for (i = 0; common_apps[i].name; i++)
- if (!find_app_on_path ((char *) common_apps[i].name, 1))
- {
- if (common_apps[i].missing_is_good)
- printf ("Not Found: %s (good!)\n", common_apps[i].name);
- else
- printf ("Not Found: %s\n", common_apps[i].name);
- }
- printf ("\n");
-
- if (givehelp)
- printf ("Looking for various Cygwin DLLs... (-v gives version info)\n");
- int cygwin_dll_count = 0;
- char cygdll_path[32768];
- for (pathlike *pth = paths; pth->dir; pth++)
- {
- WIN32_FIND_DATAW ffinfo;
- sprintf (tmp, "%s*.*", pth->dir);
- wide_path wpath (tmp);
- HANDLE ff = FindFirstFileW (wpath, &ffinfo);
- int found = (ff != INVALID_HANDLE_VALUE);
- found_cygwin_dll = NULL;
- while (found)
- {
- char f[FILENAME_MAX + 1];
- wcstombs (f, ffinfo.cFileName, sizeof f);
- if (strcasecmp (f + strlen (f) - 4, ".dll") == 0)
- {
- if (strncasecmp (f, "cyg", 3) == 0)
- {
- sprintf (tmp, "%s%s", pth->dir, f);
- if (strcasecmp (f, "cygwin1.dll") == 0)
- {
- if (!cygwin_dll_count)
- strcpy (cygdll_path, pth->dir);
- if (!cygwin_dll_count
- || strcasecmp (cygdll_path, pth->dir) != 0)
- cygwin_dll_count++;
- found_cygwin_dll = strdup (tmp);
- }
- else
- ls (tmp);
- }
- }
- found = FindNextFileW (ff, &ffinfo);
- }
- if (found_cygwin_dll)
- {
- ls (found_cygwin_dll);
- free (found_cygwin_dll);
- }
-
- FindClose (ff);
- }
- if (cygwin_dll_count > 1)
- puts ("Warning: There are multiple cygwin1.dlls on your path");
- if (!cygwin_dll_count)
- puts ("Warning: cygwin1.dll not found on your path");
-
- dump_dodgy_apps (verbose);
-
- if (is_nt)
- dump_sysinfo_services ();
-}
-
-static int
-check_keys ()
-{
- HANDLE h = CreateFileW (L"CONIN$", GENERIC_READ | GENERIC_WRITE,
- FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
- OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
-
- if (h == INVALID_HANDLE_VALUE || h == NULL)
- return (display_error ("check_keys: Opening CONIN$"));
-
- DWORD mode;
-
- if (!GetConsoleMode (h, &mode))
- display_error ("check_keys: GetConsoleMode()");
- else
- {
- mode &= ~ENABLE_PROCESSED_INPUT;
- if (!SetConsoleMode (h, mode))
- display_error ("check_keys: SetConsoleMode()");
- }
-
- fputs ("\nThis key check works only in a console window,", stderr);
- fputs (" _NOT_ in a terminal session!\n", stderr);
- fputs ("Abort with Ctrl+C if in a terminal session.\n\n", stderr);
- fputs ("Press 'q' to exit.\n", stderr);
-
- INPUT_RECORD in, prev_in;
-
- // Drop first <RETURN> key
- ReadConsoleInputW (h, &in, 1, &mode);
-
- memset (&in, 0, sizeof in);
-
- do
- {
- prev_in = in;
- if (!ReadConsoleInputW (h, &in, 1, &mode))
- display_error ("check_keys: ReadConsoleInput()");
-
- if (!memcmp (&in, &prev_in, sizeof in))
- continue;
-
- switch (in.EventType)
- {
- case KEY_EVENT:
- printf ("%s %ux VK: 0x%04x VS: 0x%04x C: 0x%04x CTRL: ",
- in.Event.KeyEvent.bKeyDown ? "Pressed " : "Released",
- in.Event.KeyEvent.wRepeatCount,
- in.Event.KeyEvent.wVirtualKeyCode,
- in.Event.KeyEvent.wVirtualScanCode,
- (unsigned char) in.Event.KeyEvent.uChar.UnicodeChar);
- fputs (in.Event.KeyEvent.dwControlKeyState & CAPSLOCK_ON ?
- "CL " : "-- ", stdout);
- fputs (in.Event.KeyEvent.dwControlKeyState & ENHANCED_KEY ?
- "EK " : "-- ", stdout);
- fputs (in.Event.KeyEvent.dwControlKeyState & LEFT_ALT_PRESSED ?
- "LA " : "-- ", stdout);
- fputs (in.Event.KeyEvent.dwControlKeyState & LEFT_CTRL_PRESSED ?
- "LC " : "-- ", stdout);
- fputs (in.Event.KeyEvent.dwControlKeyState & NUMLOCK_ON ?
- "NL " : "-- ", stdout);
- fputs (in.Event.KeyEvent.dwControlKeyState & RIGHT_ALT_PRESSED ?
- "RA " : "-- ", stdout);
- fputs (in.Event.KeyEvent.dwControlKeyState & RIGHT_CTRL_PRESSED ?
- "RC " : "-- ", stdout);
- fputs (in.Event.KeyEvent.dwControlKeyState & SCROLLLOCK_ON ?
- "SL " : "-- ", stdout);
- fputs (in.Event.KeyEvent.dwControlKeyState & SHIFT_PRESSED ?
- "SH " : "-- ", stdout);
- fputc ('\n', stdout);
- break;
-
- default:
- break;
- }
- }
- while (in.EventType != KEY_EVENT ||
- in.Event.KeyEvent.bKeyDown != FALSE ||
- in.Event.KeyEvent.uChar.UnicodeChar != L'q');
-
- CloseHandle (h);
- return 0;
-}
-
-/* RFC1738 says that these do not need to be escaped. */
-static const char safe_chars[] = "$-_.+!*'(),";
-
-/* the URL to query. */
-static const char base_url[] =
- "http://cygwin.com/cgi-bin2/package-grep.cgi?text=1&grep=";
-
-/* Queries Cygwin web site for packages containing files matching a regexp.
- Return value is 1 if there was a problem, otherwise 0. */
-static int
-package_grep (char *search)
-{
- char buf[1024];
-
- /* construct the actual URL by escaping */
- char *url = (char *) alloca (sizeof (base_url) + strlen ("&arch=x86_64") + strlen (search) * 3);
- strcpy (url, base_url);
-
- char *dest;
- for (dest = &url[sizeof (base_url) - 1]; *search; search++)
- {
- if (isalnum (*search)
- || memchr (safe_chars, *search, sizeof (safe_chars) - 1))
- {
- *dest++ = *search;
- }
- else
- {
- *dest++ = '%';
- sprintf (dest, "%02x", (unsigned char) *search);
- dest += 2;
- }
- }
-#ifdef __x86_64__
- strcpy (dest, "&arch=x86_64");
-#else
- strcpy (dest, "&arch=x86");
-#endif
-
- /* Connect to the net and open the URL. */
- if (InternetAttemptConnect (0) != ERROR_SUCCESS)
- {
- fputs ("An internet connection is required for this function.\n", stderr);
- return 1;
- }
-
- /* Initialize WinInet and attempt to fetch our URL. */
- HINTERNET hi = NULL, hurl = NULL;
- if (!(hi = InternetOpenA ("cygcheck", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0)))
- return display_internet_error ("InternetOpen() failed", NULL);
-
- if (!(hurl = InternetOpenUrlA (hi, url, NULL, 0, 0, 0)))
- return display_internet_error ("unable to contact cygwin.com site, "
- "InternetOpenUrl() failed", hi, NULL);
-
- /* Check the HTTP response code. */
- DWORD rc = 0, rc_s = sizeof (DWORD);
- if (!HttpQueryInfoA (hurl, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER,
- (void *) &rc, &rc_s, NULL))
- return display_internet_error ("HttpQueryInfo() failed", hurl, hi, NULL);
-
- if (rc != HTTP_STATUS_OK)
- {
- sprintf (buf, "error retrieving results from cygwin.com site, "
- "HTTP status code %lu", rc);
- return display_internet_error (buf, hurl, hi, NULL);
- }
-
- /* Fetch result and print to stdout. */
- DWORD numread;
- do
- {
- if (!InternetReadFile (hurl, (void *) buf, sizeof (buf), &numread))
- return display_internet_error ("InternetReadFile failed", hurl, hi, NULL);
- if (numread)
- fwrite ((void *) buf, (size_t) numread, 1, stdout);
- }
- while (numread);
-
- InternetCloseHandle (hurl);
- InternetCloseHandle (hi);
- return 0;
-}
-
-static void
-usage (FILE * stream, int status)
-{
- fprintf (stream, "\
-Usage: cygcheck [-v] [-h] PROGRAM\n\
- cygcheck -c [-d] [PACKAGE]\n\
- cygcheck -s [-r] [-v] [-h]\n\
- cygcheck -k\n\
- cygcheck -f FILE [FILE]...\n\
- cygcheck -l [PACKAGE]...\n\
- cygcheck -p REGEXP\n\
- cygcheck --delete-orphaned-installation-keys\n\
- cygcheck --enable-unique-object-names Cygwin-DLL\n\
- cygcheck --disable-unique-object-names Cygwin-DLL\n\
- cygcheck --show-unique-object-names Cygwin-DLL\n\
- cygcheck -h\n\n\
-List system information, check installed packages, or query package database.\n\
-\n\
-At least one command option or a PROGRAM is required, as shown above.\n\
-\n\
- PROGRAM list library (DLL) dependencies of PROGRAM\n\
- -c, --check-setup show installed version of PACKAGE and verify integrity\n\
- (or for all installed packages if none specified)\n\
- -d, --dump-only just list packages, do not verify (with -c)\n\
- -s, --sysinfo produce diagnostic system information (implies -c)\n\
- -r, --registry also scan registry for Cygwin settings (with -s)\n\
- -k, --keycheck perform a keyboard check session (must be run from a\n\
- plain console only, not from a pty/rxvt/xterm)\n\
- -f, --find-package find the package to which FILE belongs\n\
- -l, --list-package list contents of PACKAGE (or all packages if none given)\n\
- -p, --package-query search for REGEXP in the entire cygwin.com package\n\
- repository (requires internet connectivity)\n\
- --delete-orphaned-installation-keys\n\
- Delete installation keys of old, now unused\n\
- installations from the registry. Requires the right\n\
- to change the registry.\n\
- --enable-unique-object-names Cygwin-DLL\n\
- --disable-unique-object-names Cygwin-DLL\n\
- --show-unique-object-names Cygwin-DLL\n\
- Enable, disable, or show the setting of the\n\
- \"unique object names\" setting in the Cygwin DLL\n\
- given as argument to this option. The DLL path must\n\
- be given as valid Windows(!) path.\n\
- See the users guide for more information.\n\
- If you don't know what this means, don't change it.\n\
- -v, --verbose produce more verbose output\n\
- -h, --help annotate output with explanatory comments when given\n\
- with another command, otherwise print this help\n\
- -V, --version print the version of cygcheck and exit\n\
-\n\
-Note: -c, -f, and -l only report on packages that are currently installed. To\n\
- search all official Cygwin packages use -p instead. The -p REGEXP matches\n\
- package names, descriptions, and names of files/paths within all packages.\n\
-\n");
- exit (status);
-}
-
-struct option longopts[] = {
- {"check-setup", no_argument, NULL, 'c'},
- {"dump-only", no_argument, NULL, 'd'},
- {"sysinfo", no_argument, NULL, 's'},
- {"registry", no_argument, NULL, 'r'},
- {"verbose", no_argument, NULL, 'v'},
- {"keycheck", no_argument, NULL, 'k'},
- {"find-package", no_argument, NULL, 'f'},
- {"list-package", no_argument, NULL, 'l'},
- {"package-query", no_argument, NULL, 'p'},
- {"delete-orphaned-installation-keys", no_argument, NULL, CO_DELETE_KEYS},
- {"enable-unique-object-names", no_argument, NULL, CO_ENABLE_UON},
- {"disable-unique-object-names", no_argument, NULL, CO_DISABLE_UON},
- {"show-unique-object-names", no_argument, NULL, CO_SHOW_UON},
- {"help", no_argument, NULL, 'h'},
- {"version", no_argument, 0, 'V'},
- {0, no_argument, NULL, 0}
-};
-
-static char opts[] = "cdsrvkflphV";
-
-static void
-print_version ()
-{
- printf ("cygcheck (cygwin) %d.%d.%d\n"
- "System Checker for Cygwin\n"
- "Copyright (C) 1998 - %s Red Hat, Inc.\n"
- "This is free software; see the source for copying conditions. There is NO\n"
- "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n",
- CYGWIN_VERSION_DLL_MAJOR / 1000,
- CYGWIN_VERSION_DLL_MAJOR % 1000,
- CYGWIN_VERSION_DLL_MINOR,
- strrchr (__DATE__, ' ') + 1);
-}
-
-void
-nuke (char *ev)
-{
- int n = 1 + strchr (ev, '=') - ev;
- char *s = (char *) malloc (n + 1);
- memcpy (s, ev, n);
- s[n] = '\0';
- putenv (s);
-}
-
-extern "C" {
-uintptr_t (*cygwin_internal) (int, ...);
-WCHAR cygwin_dll_path[32768];
-};
-
-static void
-load_cygwin (int& argc, char **&argv)
-{
- HMODULE h;
-
- if (!(h = LoadLibrary ("cygwin1.dll")))
- return;
- GetModuleFileNameW (h, cygwin_dll_path, 32768);
- if ((cygwin_internal = (uintptr_t (*) (int, ...))
- GetProcAddress (h, "cygwin_internal")))
- {
- char **av = (char **) cygwin_internal (CW_ARGV);
- if (av && ((uintptr_t) av != (uintptr_t) -1))
- {
- /* Copy cygwin's idea of the argument list into this Window application. */
- for (argc = 0; av[argc]; argc++)
- continue;
- argv = (char **) calloc (argc + 1, sizeof (char *));
- for (char **argvp = argv; *av; av++)
- *argvp++ = strdup (*av);
- }
-
-
- char **envp = (char **) cygwin_internal (CW_ENVP);
- if (envp && ((uintptr_t) envp != (uintptr_t) -1))
- {
- /* Store path and revert to this value, otherwise path gets overwritten
- by the POSIXy Cygwin variation, which breaks cygcheck.
- Another approach would be to use the Cygwin PATH and convert it to
- Win32 again. */
- char *path = NULL;
- char **env;
- while (*(env = _environ))
- {
- if (strncmp (*env, "PATH=", 5) == 0)
- path = strdup (*env);
- nuke (*env);
- }
- for (char **ev = envp; *ev; ev++)
- if (strncmp (*ev, "PATH=", 5) != 0)
- putenv (strdup (*ev));
- if (path)
- putenv (path);
- }
- }
- FreeLibrary (h);
-}
-
-int
-main (int argc, char **argv)
-{
- int i;
- bool ok = true;
- load_cygwin (argc, argv);
-
- /* Need POSIX sorting while parsing args, but don't forget the
- user's original environment. */
- char *posixly = getenv ("POSIXLY_CORRECT");
- if (posixly == NULL)
- (void) putenv ("POSIXLY_CORRECT=1");
- while ((i = getopt_long (argc, argv, opts, longopts, NULL)) != EOF)
- switch (i)
- {
- case 's':
- sysinfo = 1;
- break;
- case 'c':
- check_setup = 1;
- break;
- case 'd':
- dump_only = 1;
- break;
- case 'r':
- registry = 1;
- break;
- case 'v':
- verbose = 1;
- break;
- case 'k':
- keycheck = 1;
- break;
- case 'f':
- find_package = 1;
- break;
- case 'l':
- list_package = 1;
- break;
- case 'p':
- grep_packages = 1;
- break;
- case 'h':
- givehelp = 1;
- break;
- case CO_DELETE_KEYS:
- del_orphaned_reg = 1;
- break;
- case CO_ENABLE_UON:
- case CO_DISABLE_UON:
- case CO_SHOW_UON:
- unique_object_name_opt = i;
- break;
- case 'V':
- print_version ();
- exit (0);
- default:
- fprintf (stderr, "Try `cygcheck --help' for more information.\n");
- exit (1);
- /*NOTREACHED*/
- }
- argc -= optind;
- argv += optind;
- if (posixly == NULL)
- putenv ("POSIXLY_CORRECT=");
-
- if ((argc == 0) && !sysinfo && !keycheck && !check_setup && !list_package
- && !del_orphaned_reg)
- {
- if (givehelp)
- usage (stdout, 0);
- else
- usage (stderr, 1);
- }
-
- if ((check_setup || sysinfo || find_package || list_package || grep_packages
- || del_orphaned_reg || unique_object_name_opt)
- && keycheck)
- usage (stderr, 1);
-
- if ((find_package || list_package || grep_packages)
- && (check_setup || del_orphaned_reg))
- usage (stderr, 1);
-
- if ((check_setup || sysinfo || find_package || list_package || grep_packages
- || del_orphaned_reg)
- && unique_object_name_opt)
- usage (stderr, 1);
-
- if (dump_only && !check_setup && !sysinfo)
- usage (stderr, 1);
-
- if (find_package + list_package + grep_packages > 1)
- usage (stderr, 1);
-
- if (keycheck)
- return check_keys ();
- if (unique_object_name_opt)
- return handle_unique_object_name (unique_object_name_opt, *argv);
- if (del_orphaned_reg)
- del_orphaned_reg_installations ();
- if (grep_packages)
- return package_grep (*argv);
-
- init_paths ();
-
- /* FIXME: Add help for check_setup and {list,find}_package */
- if (argc >= 1 && givehelp && !check_setup && !find_package && !list_package)
- {
- printf("Here is where the OS will find your program%s, and which dlls\n",
- argc > 1 ? "s" : "");
- printf ("will be used for it. Use -v to see DLL version info\n");
-
- if (!sysinfo)
- printf ("\n");
- }
-
- if (check_setup)
- dump_setup (verbose, argv, !dump_only);
- else if (find_package)
- package_find (verbose, argv);
- else if (list_package)
- package_list (verbose, argv);
- else
- for (i = 0; i < argc; i++)
- {
- if (i)
- puts ("");
- ok &= cygcheck (argv[i]);
- }
-
- if (sysinfo)
- {
- dump_sysinfo ();
- if (!check_setup)
- {
- puts ("");
- dump_setup (verbose, NULL, !dump_only);
- }
-
- if (!givehelp)
- puts ("Use -h to see help about each section");
- }
-
- return ok ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/winsup/utils/cygpath.cc b/winsup/utils/cygpath.cc
deleted file mode 100644
index 6094eb7eb..000000000
--- a/winsup/utils/cygpath.cc
+++ /dev/null
@@ -1,1057 +0,0 @@
-/* cygpath.cc -- convert pathnames between Windows and Unix format
- Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
- 2009, 2010, 2011, 2012, 2013 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include <stdio.h>
-#include <string.h>
-#include <wchar.h>
-#include <locale.h>
-#include <stdlib.h>
-#include <limits.h>
-#include <getopt.h>
-#include <io.h>
-#include <sys/fcntl.h>
-#include <sys/cygwin.h>
-#include <cygwin/version.h>
-#include <ctype.h>
-#include <errno.h>
-
-#define _WIN32_WINNT 0x0602
-#define WINVER 0x0602
-#define NOCOMATTRIBUTE
-#include <windows.h>
-#include <userenv.h>
-#include <shlobj.h>
-#include <ntdef.h>
-#include <ntdll.h>
-
-#include "wide_path.h"
-#include "loadlib.h"
-
-static char *prog_name;
-static char *file_arg, *output_arg;
-static int path_flag, unix_flag, windows_flag, absolute_flag;
-static int shortname_flag, longname_flag;
-static int ignore_flag, allusers_flag, output_flag;
-static int mixed_flag, options_from_file_flag, mode_flag;
-static UINT codepage;
-
-static const char *format_type_arg;
-
-static struct option long_options[] = {
- {(char *) "absolute", no_argument, NULL, 'a'},
- {(char *) "close", required_argument, NULL, 'c'},
- {(char *) "dos", no_argument, NULL, 'd'},
- {(char *) "file", required_argument, NULL, 'f'},
- {(char *) "help", no_argument, NULL, 'h'},
- {(char *) "ignore", no_argument, NULL, 'i'},
- {(char *) "long-name", no_argument, NULL, 'l'},
- {(char *) "mixed", no_argument, NULL, 'm'},
- {(char *) "mode", no_argument, NULL, 'M'},
- {(char *) "option", no_argument, NULL, 'o'},
- {(char *) "path", no_argument, NULL, 'p'},
- {(char *) "short-name", no_argument, NULL, 's'},
- {(char *) "type", required_argument, NULL, 't'},
- {(char *) "unix", no_argument, NULL, 'u'},
- {(char *) "version", no_argument, NULL, 'V'},
- {(char *) "windows", no_argument, NULL, 'w'},
- {(char *) "allusers", no_argument, NULL, 'A'},
- {(char *) "desktop", no_argument, NULL, 'D'},
- {(char *) "homeroot", no_argument, NULL, 'H'},
- {(char *) "mydocs", no_argument, NULL, 'O'},
- {(char *) "smprograms", no_argument, NULL, 'P'},
- {(char *) "sysdir", no_argument, NULL, 'S'},
- {(char *) "windir", no_argument, NULL, 'W'},
- {(char *) "folder", required_argument, NULL, 'F'},
- {(char *) "codepage", required_argument, NULL, 'C'},
- {0, no_argument, 0, 0}
-};
-
-static char options[] = "ac:df:hilmMopst:uVwAC:DHOPSWF:";
-
-static void
-usage (FILE * stream, int status)
-{
- if (!ignore_flag || !status)
- fprintf (stream, "\
-Usage: %1$s (-d|-m|-u|-w|-t TYPE) [-f FILE] [OPTION]... NAME...\n\
- %1$s [-c HANDLE] \n\
- %1$s [-ADHOPSW] \n\
- %1$s [-F ID] \n\
-\n\
-Convert Unix and Windows format paths, or output system path information\n\
-\n\
-Output type options:\n\
-\n\
- -d, --dos print DOS (short) form of NAMEs (C:\\PROGRA~1\\)\n\
- -m, --mixed like --windows, but with regular slashes (C:/WINNT)\n\
- -M, --mode report on mode of file (binmode or textmode)\n\
- -u, --unix (default) print Unix form of NAMEs (/cygdrive/c/winnt)\n\
- -w, --windows print Windows form of NAMEs (C:\\WINNT)\n\
- -t, --type TYPE print TYPE form: 'dos', 'mixed', 'unix', or 'windows'\n\
-\n\
-Path conversion options:\n\
-\n\
- -a, --absolute output absolute path\n\
- -l, --long-name print Windows long form of NAMEs (with -w, -m only)\n\
- -p, --path NAME is a PATH list (i.e., '/bin:/usr/bin')\n\
- -s, --short-name print DOS (short) form of NAMEs (with -w, -m only)\n\
- -C, --codepage CP print DOS, Windows, or mixed pathname in Windows\n\
- codepage CP. CP can be a numeric codepage identifier,\n\
- or one of the reserved words ANSI, OEM, or UTF8.\n\
- If this option is missing, %1$s defaults to the\n\
- character set defined by the current locale.\n\
-\n\
-System information:\n\
-\n\
- -A, --allusers use `All Users' instead of current user for -D, -O, -P\n\
- -D, --desktop output `Desktop' directory and exit\n\
- -H, --homeroot output `Profiles' directory (home root) and exit\n\
- -O, --mydocs output `My Documents' directory and exit\n\
- -P, --smprograms output Start Menu `Programs' directory and exit\n\
- -S, --sysdir output system directory and exit\n\
- -W, --windir output `Windows' directory and exit\n\
- -F, --folder ID output special folder with numeric ID and exit\n\
-", prog_name);
- if (ignore_flag)
- /* nothing to do */;
- else if (stream != stdout)
- fprintf(stream, "Try `%s --help' for more information.\n", prog_name);
- else
- {
- fprintf (stream, "\
-\n\
-Other options:\n\
-\n\
- -f, --file FILE read FILE for input; use - to read from STDIN\n\
- -o, --option read options from FILE as well (for use with --file)\n\
- -c, --close HANDLE close HANDLE (for use in captured process)\n\
- -i, --ignore ignore missing argument\n\
- -h, --help output usage information and exit\n\
- -V, --version output version information and exit\n\
-\n");
- }
- exit (ignore_flag ? 0 : status);
-}
-
-static inline BOOLEAN
-RtlAllocateUnicodeString (PUNICODE_STRING uni, ULONG size)
-{
- uni->Length = 0;
- uni->MaximumLength = size / sizeof (WCHAR);
- uni->Buffer = (WCHAR *) malloc (size);
- return uni->Buffer != NULL;
-}
-
-static size_t
-my_wcstombs (char *dest, const wchar_t *src, size_t n)
-{
- if (codepage)
- return WideCharToMultiByte (codepage, 0, src, -1, dest, n, NULL, NULL);
- else
- return wcstombs (dest, src, n);
-}
-
-#define HARDDISK_PREFIX L"\\Device\\Harddisk"
-#define GLOBALROOT_PREFIX "\\\\.\\GLOBALROOT"
-
-static char *
-get_device_name (char *path)
-{
- UNICODE_STRING ntdev, tgtdev, ntdevdir;
- ANSI_STRING ans;
- OBJECT_ATTRIBUTES ntobj;
- NTSTATUS status;
- HANDLE lnk, dir;
- bool got_one = false;
- char *ret = strdup (path);
- PDIRECTORY_BASIC_INFORMATION odi = (PDIRECTORY_BASIC_INFORMATION)
- alloca (4096);
- BOOLEAN restart;
- ULONG cont;
-
- if (!strncasecmp (path, GLOBALROOT_PREFIX "\\", sizeof (GLOBALROOT_PREFIX)))
- path += sizeof (GLOBALROOT_PREFIX) - 1;
- if (strncasecmp (path, "\\Device\\", 8))
- return ret;
-
- if (!RtlAllocateUnicodeString (&ntdev, 65534))
- return ret;
- if (!RtlAllocateUnicodeString (&tgtdev, 65534))
- return ret;
- RtlInitAnsiString (&ans, path);
- RtlAnsiStringToUnicodeString (&ntdev, &ans, FALSE);
-
- /* First check if the given device name is a symbolic link itself. If so,
- query it and use the new name as actual device name to search for in the
- DOS device name directory. If not, just use the incoming device name. */
- InitializeObjectAttributes (&ntobj, &ntdev, OBJ_CASE_INSENSITIVE, NULL, NULL);
- status = NtOpenSymbolicLinkObject (&lnk, SYMBOLIC_LINK_QUERY, &ntobj);
- if (NT_SUCCESS (status))
- {
- status = NtQuerySymbolicLinkObject (lnk, &tgtdev, NULL);
- NtClose (lnk);
- if (!NT_SUCCESS (status))
- goto out;
- RtlCopyUnicodeString (&ntdev, &tgtdev);
- }
- else if (status != STATUS_OBJECT_TYPE_MISMATCH
- && status != STATUS_OBJECT_PATH_SYNTAX_BAD)
- goto out;
-
- for (int i = 0; i < 2; ++i)
- {
- /* There are two DOS device directories, the local and the global dir.
- Try both, local first. */
- RtlInitUnicodeString (&ntdevdir, i ? L"\\GLOBAL??" : L"\\??");
-
- /* Open the directory... */
- InitializeObjectAttributes (&ntobj, &ntdevdir, OBJ_CASE_INSENSITIVE,
- NULL, NULL);
- status = NtOpenDirectoryObject (&dir, DIRECTORY_QUERY, &ntobj);
- if (!NT_SUCCESS (status))
- break;
-
- /* ...and scan it. */
- for (restart = TRUE, cont = 0;
- NT_SUCCESS (NtQueryDirectoryObject (dir, odi, 4096, TRUE,
- restart, &cont, NULL));
- restart = FALSE)
- {
- /* For each entry check if it's a symbolic link. */
- InitializeObjectAttributes (&ntobj, &odi->ObjectName,
- OBJ_CASE_INSENSITIVE, dir, NULL);
- status = NtOpenSymbolicLinkObject (&lnk, SYMBOLIC_LINK_QUERY, &ntobj);
- if (!NT_SUCCESS (status))
- continue;
- tgtdev.Length = 0;
- tgtdev.MaximumLength = 512;
- /* If so, query it and compare the target of the symlink with the
- incoming device name. */
- status = NtQuerySymbolicLinkObject (lnk, &tgtdev, NULL);
- NtClose (lnk);
- if (!NT_SUCCESS (status))
- continue;
- if (tgtdev.Length /* There's actually a symlink pointing to an
- empty string: \??\GLOBALROOT -> "" */
- && RtlEqualUnicodePathPrefix (&ntdev, &tgtdev, TRUE))
- {
- /* If the comparison succeeds, the name of the directory entry is
- a valid DOS device name, if prepended with "\\.\". Return that
- valid DOS path. */
- wchar_t *trailing = NULL;
- if (ntdev.Length > tgtdev.Length)
- trailing = ntdev.Buffer + tgtdev.Length / sizeof (WCHAR);
- ULONG len = RtlUnicodeStringToAnsiSize (&odi->ObjectName);
- if (trailing)
- len += my_wcstombs (NULL, trailing, 0);
- free (ret);
- ret = (char *) malloc (len + 4);
- strcpy (ret, "\\\\.\\");
- ans.Length = 0;
- ans.MaximumLength = len;
- ans.Buffer = ret + 4;
- RtlUnicodeStringToAnsiString (&ans, &odi->ObjectName, FALSE);
- if (trailing)
- my_wcstombs (ans.Buffer + ans.Length, trailing,
- ans.MaximumLength - ans.Length);
- ans.Buffer[ans.MaximumLength - 1] = '\0';
- got_one = true;
- /* Special case for local disks: It's most feasible if the
- DOS device name reflects the DOS drive, so we check for this
- explicitly and only return prematurely if so. */
- if (ntdev.Length < wcslen (HARDDISK_PREFIX)
- || wcsncasecmp (ntdev.Buffer, HARDDISK_PREFIX, 8) != 0
- || (odi->ObjectName.Length == 2 * sizeof (WCHAR)
- && odi->ObjectName.Buffer[1] == L':'))
- {
- if (trailing)
- {
- /* If there's a trailing path, it's a perfectly valid
- DOS pathname without the \\.\ prefix. Unless it's
- longer than MAX_PATH - 1 in which case it needs
- the \\?\ prefix. */
- if ((len = strlen (ret + 4)) >= MAX_PATH)
- ret[2] = '?';
- else
- memmove (ret, ret + 4, strlen (ret + 4) + 1);
- }
- NtClose (dir);
- goto out;
- }
- }
- }
- NtClose (dir);
- }
-
-out:
- free (tgtdev.Buffer);
- free (ntdev.Buffer);
- if (!got_one)
- {
- free (ret);
- ret = (char *) malloc (sizeof (GLOBALROOT_PREFIX) + strlen (path));
- if (ret)
- stpcpy (stpcpy (ret, GLOBALROOT_PREFIX), path);
- }
- return ret;
-}
-
-static char *
-get_device_paths (char *path)
-{
- char *sbuf;
- char *ptr;
- int n = 1;
-
- ptr = path;
- while ((ptr = strchr (ptr, ';')))
- {
- ptr++;
- n++;
- }
-
- char *paths[n];
- DWORD acc = 0;
- int i;
- if (!n)
- return strdup ("");
-
- for (i = 0, ptr = path; ptr; i++)
- {
- char *next = ptr;
- ptr = strchr (ptr, ';');
- if (ptr)
- *ptr++ = 0;
- paths[i] = get_device_name (next);
- acc += strlen (paths[i]) + 1;
- }
-
- sbuf = (char *) malloc (acc + 1);
- if (sbuf == NULL)
- {
- fprintf (stderr, "%s: out of memory\n", prog_name);
- exit (1);
- }
-
- sbuf[0] = '\0';
- for (i = 0; i < n; i++)
- {
- strcat (strcat (sbuf, paths[i]), ";");
- free (paths[i]);
- }
-
- strchr (sbuf, '\0')[-1] = '\0';
- return sbuf;
-}
-
-static char *
-get_short_paths (char *path)
-{
- wchar_t *sbuf;
- wchar_t *sptr;
- char *next;
- char *ptr = path;
- char *end = strrchr (path, 0);
- DWORD acc = 0;
- DWORD len;
-
- while (ptr != NULL)
- {
- next = ptr;
- ptr = strchr (ptr, ';');
- if (ptr)
- *ptr++ = 0;
- wide_path wpath (next);
- len = GetShortPathNameW (wpath, NULL, 0);
- if (!len)
- {
- fprintf (stderr, "%s: cannot create short name of %s\n",
- prog_name, next);
- exit (2);
- }
- acc += len + 1;
- }
- sptr = sbuf = (wchar_t *) malloc ((acc + 1) * sizeof (wchar_t));
- if (sbuf == NULL)
- {
- fprintf (stderr, "%s: out of memory\n", prog_name);
- exit (1);
- }
- ptr = path;
- for (;;)
- {
- wide_path wpath (ptr);
- len = GetShortPathNameW (wpath, sptr, acc);
- if (!len)
- {
- fprintf (stderr, "%s: cannot create short name of %s\n",
- prog_name, ptr);
- exit (2);
- }
-
- ptr = strrchr (ptr, 0);
- sptr = wcsrchr (sptr, 0);
- if (ptr == end)
- break;
- *sptr = L';';
- ++ptr, ++sptr;
- acc -= len + 1;
- }
- len = my_wcstombs (NULL, sbuf, 0) + 1;
- ptr = (char *) malloc (len);
- if (ptr == NULL)
- {
- fprintf (stderr, "%s: out of memory\n", prog_name);
- exit (1);
- }
- my_wcstombs (ptr, sbuf, len);
- return ptr;
-}
-
-static char *
-get_short_name (const char *filename)
-{
- wchar_t buf[32768];
- char *sbuf;
- wide_path wpath (filename);
- DWORD len = GetShortPathNameW (wpath, buf, 32768);
- if (!len)
- {
- fprintf (stderr, "%s: cannot create short name of %s\n",
- prog_name, filename);
- exit (2);
- }
- len = my_wcstombs (NULL, buf, 0) + 1;
- sbuf = (char *) malloc (len);
- if (sbuf == NULL)
- {
- fprintf (stderr, "%s: out of memory\n", prog_name);
- exit (1);
- }
- my_wcstombs (sbuf, buf, len);
- return sbuf;
-}
-
-static char *
-get_long_name (const char *filename, DWORD& len)
-{
- char *sbuf;
- wchar_t buf[32768];
- wide_path wpath (filename);
-
- if (!GetLongPathNameW (wpath, buf, 32768))
- wcscpy (buf, wpath);
- len = my_wcstombs (NULL, buf, 0);
- sbuf = (char *) malloc (len + 1);
- if (!sbuf)
- {
- fprintf (stderr, "%s: out of memory\n", prog_name);
- exit (1);
- }
- my_wcstombs (sbuf, buf, len + 1);
- return sbuf;
-}
-
-static char *
-get_long_paths (char *path)
-{
- char *sbuf;
- char *ptr;
- int n = 1;
-
- ptr = path;
- while ((ptr = strchr (ptr, ';')))
- {
- ptr++;
- n++;
- }
-
- char *paths[n];
- DWORD acc = 0;
- int i;
- if (!n)
- return strdup ("");
-
- for (i = 0, ptr = path; ptr; i++)
- {
- DWORD len;
- char *next = ptr;
- ptr = strchr (ptr, ';');
- if (ptr)
- *ptr++ = 0;
- paths[i] = get_long_name (next, len);
- acc += len + 1;
- }
-
- sbuf = (char *) malloc (acc + 1);
- if (sbuf == NULL)
- {
- fprintf (stderr, "%s: out of memory\n", prog_name);
- exit (1);
- }
-
- sbuf[0] = '\0';
- for (i = 0; i < n; i++)
- {
- strcat (strcat (sbuf, paths[i]), ";");
- free (paths[i]);
- }
-
- strchr (sbuf, '\0')[-1] = '\0';
- return sbuf;
-}
-
-static void
-convert_slashes (char* name)
-{
- while ((name = strchr (name, '\\')) != NULL)
- {
- if (*name == '\\')
- *name = '/';
- name++;
- }
-}
-
-static bool
-get_special_folder (PWCHAR wpath, int id)
-{
- LPITEMIDLIST pidl = 0;
- if (SHGetSpecialFolderLocation (NULL, id, &pidl) != S_OK)
- return false;
- if (!SHGetPathFromIDListW (pidl, wpath) || !wpath[0])
- return false;
- return true;
-}
-
-static void
-do_sysfolders (char option)
-{
- WCHAR wbuf[MAX_PATH];
- char buf[PATH_MAX];
-
- wbuf[0] = L'\0';
- switch (option)
- {
- case 'D':
- get_special_folder (wbuf, allusers_flag ? CSIDL_COMMON_DESKTOPDIRECTORY
- : CSIDL_DESKTOPDIRECTORY);
- break;
-
- case 'P':
- get_special_folder (wbuf, allusers_flag ? CSIDL_COMMON_PROGRAMS
- : CSIDL_PROGRAMS);
- break;
-
- case 'O':
- get_special_folder (wbuf, allusers_flag ? CSIDL_COMMON_DOCUMENTS
- : CSIDL_PERSONAL);
- break;
-
- case 'F':
- {
- int val = -1, len = -1;
- if (!(sscanf (output_arg, "%i%n", &val, &len) == 1
- && len == (int) strlen (output_arg) && val >= 0))
- {
- fprintf (stderr, "%s: syntax error in special folder ID %s\n",
- prog_name, output_arg);
- exit (1);
- }
- get_special_folder (wbuf, val);
- }
- break;
-
- case 'H':
- {
- DWORD len = MAX_PATH;
- GetProfilesDirectoryW (wbuf, &len);
- }
- break;
-
- case 'S':
- {
- HANDLE fh;
- WIN32_FIND_DATAW w32_fd;
-
- GetSystemDirectoryW (wbuf, MAX_PATH);
- /* The path returned by GetSystemDirectoryW is not case preserving.
- The below code is a trick to get the correct case of the system
- directory from Windows. */
- if ((fh = FindFirstFileW (wbuf, &w32_fd)) != INVALID_HANDLE_VALUE)
- {
- FindClose (fh);
- wcscpy (wcsrchr (wbuf, L'\\') + 1, w32_fd.cFileName);
- }
- }
- break;
-
- case 'W':
- GetSystemWindowsDirectoryW (wbuf, MAX_PATH);
- break;
-
- default:
- usage (stderr, 1);
- }
-
- if (!wbuf[0])
- {
- fprintf (stderr, "%s: failed to retrieve special folder path\n",
- prog_name);
- }
- else if (!windows_flag)
- {
- if (cygwin_conv_path (CCP_WIN_W_TO_POSIX, wbuf, buf, PATH_MAX))
- fprintf (stderr, "%s: error converting \"%ls\" - %s\n",
- prog_name, wbuf, strerror (errno));
- }
- else
- {
- if (shortname_flag)
- /* System paths are never longer than MAX_PATH. The buffer pointers
- in a call to GetShortPathNameW may point to the same buffer. */
- GetShortPathNameW (wbuf, wbuf, MAX_PATH);
- my_wcstombs (buf, wbuf, MAX_PATH);
- if (mixed_flag)
- convert_slashes (buf);
- }
- printf ("%s\n", buf);
-}
-
-static void
-report_mode (char *filename)
-{
- switch (cygwin_internal (CW_GET_BINMODE, filename))
- {
- case O_BINARY:
- printf ("%s: binary\n", filename);
- break;
- case O_TEXT:
- printf ("%s: text\n", filename);
- break;
- default:
- fprintf (stderr, "%s: file '%s' - %s\n", prog_name,
- filename, strerror (errno));
- break;
- }
-}
-
-static void
-do_pathconv (char *filename)
-{
- char *buf = NULL, *tmp;
- wchar_t *buf2 = NULL;
- DWORD len = 32768;
- ssize_t err;
- bool print_tmp = false;
- cygwin_conv_path_t conv_func =
- (unix_flag ? CCP_WIN_W_TO_POSIX : CCP_POSIX_TO_WIN_W)
- | (absolute_flag ? CCP_ABSOLUTE : CCP_RELATIVE);
-
- if (!filename || !filename[0])
- {
- if (ignore_flag)
- return;
- fprintf (stderr, "%s: can't convert empty path\n", prog_name);
- exit (1);
- }
-
- buf = (char *) malloc (len);
- if (!unix_flag)
- buf2 = (wchar_t *) malloc (len * sizeof (wchar_t));
- if (buf == NULL)
- {
- fprintf (stderr, "%s: out of memory\n", prog_name);
- exit (1);
- }
-
- if (path_flag)
- {
- if (unix_flag)
- {
- wide_path wpath (filename, false);
- err = cygwin_conv_path_list (conv_func, wpath, buf, len);
- }
- else
- err = cygwin_conv_path_list (conv_func, filename, buf2, len);
- if (err)
- {
- fprintf (stderr, "%s: error converting \"%s\" - %s\n",
- prog_name, filename, strerror (errno));
- exit (1);
- }
- if (!unix_flag)
- {
- my_wcstombs (buf, buf2, 32768);
- buf = get_device_paths (tmp = buf);
- free (tmp);
- if (shortname_flag)
- {
- buf = get_short_paths (tmp = buf);
- free (tmp);
- }
- if (longname_flag)
- {
- buf = get_long_paths (tmp = buf);
- free (tmp);
- }
- if (mixed_flag)
- convert_slashes (buf);
- }
- }
- else
- {
- if (unix_flag)
- {
- wide_path wpath (filename);
- err = cygwin_conv_path (conv_func, wpath, (void *) buf, len);
- }
- else
- err = cygwin_conv_path (conv_func, filename, (void *) buf2, len);
- if (err)
- {
- fprintf (stderr, "%s: error converting \"%s\" - %s\n",
- prog_name, filename, strerror (errno));
- exit (1);
- }
- if (!unix_flag)
- {
- my_wcstombs (buf, buf2, 32768);
- buf = get_device_name (tmp = buf);
- free (tmp);
- if (shortname_flag)
- {
- buf = get_short_name (tmp = buf);
- free (tmp);
- }
- if (longname_flag)
- {
- buf = get_long_name (tmp = buf, len);
- free (tmp);
- }
- tmp = buf;
- if (strncmp (buf, "\\\\?\\", 4) == 0)
- {
- len = 0;
- if (buf[5] == ':')
- len = 4;
- else if (!strncmp (buf + 4, "UNC\\", 4))
- len = 6;
- if (len && strlen (buf) < MAX_PATH + len)
- {
- tmp += len;
- if (len == 6)
- *tmp = '\\';
- print_tmp = true;
- }
- }
- if (mixed_flag)
- convert_slashes (tmp);
- }
- }
-
- puts (print_tmp ? tmp : buf);
- if (buf2)
- free (buf2);
- if (buf)
- free (buf);
-}
-
-static void
-print_version ()
-{
- printf ("cygpath (cygwin) %d.%d.%d\n"
- "Path Conversion Utility\n"
- "Copyright (C) 1998 - %s Red Hat, Inc.\n"
- "This is free software; see the source for copying conditions. There is NO\n"
- "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n",
- CYGWIN_VERSION_DLL_MAJOR / 1000,
- CYGWIN_VERSION_DLL_MAJOR % 1000,
- CYGWIN_VERSION_DLL_MINOR,
- strrchr (__DATE__, ' ') + 1);
-}
-
-static int
-do_options (int argc, char **argv, int from_file)
-{
- int c, o = 0;
- path_flag = 0;
- unix_flag = 0;
- windows_flag = 0;
- shortname_flag = 0;
- longname_flag = 0;
- mixed_flag = 0;
- ignore_flag = 0;
- allusers_flag = 0;
- output_flag = 0;
- mode_flag = 0;
- codepage = 0;
- if (!from_file)
- options_from_file_flag = 0;
- optind = 0;
- while ((c = getopt_long (argc, argv, options,
- long_options, (int *) NULL)) != EOF)
- {
- switch (c)
- {
- case 'a':
- absolute_flag = 1;
- break;
-
- case 'c':
- if (!optarg)
- usage (stderr, 1);
- CloseHandle ((HANDLE) strtoul (optarg, NULL, 16));
- break;
-
- case 'd':
- windows_flag = 1;
- shortname_flag = 1;
- break;
-
- case 'f':
- if (from_file || !optarg)
- usage (stderr, 1);
- file_arg = optarg;
- break;
-
- case 'M':
- mode_flag = 1;
- break;
-
- case 'o':
- if (from_file)
- usage (stderr, 1);
- options_from_file_flag = 1;
- break;
-
- case 'p':
- path_flag = 1;
- break;
-
- case 'u':
- unix_flag = 1;
- break;
-
- case 'w':
- windows_flag = 1;
- break;
-
- case 'm':
- windows_flag = 1;
- mixed_flag = 1;
- break;
-
- case 'l':
- longname_flag = 1;
- break;
-
- case 's':
- shortname_flag = 1;
- break;
-
- case 't':
- if (!optarg)
- usage (stderr, 1);
-
- format_type_arg = (*optarg == '=') ? (optarg + 1) : (optarg);
- if (strcasecmp (format_type_arg, "dos") == 0)
- {
- windows_flag = 1;
- shortname_flag = 1;
- }
- else if (!strcasecmp (format_type_arg, "mixed"))
- {
- windows_flag = 1;
- mixed_flag = 1;
- }
- else if (!strcasecmp (format_type_arg, "unix"))
- unix_flag = 1;
- else if (!strcasecmp (format_type_arg, "windows"))
- windows_flag = 1;
- else
- usage (stderr, 1);
- break;
-
- case 'A':
- allusers_flag = 1;
- break;
-
- case 'C':
- if (!optarg)
- usage (stderr, 1);
- if (!strcasecmp (optarg, "ANSI"))
- codepage = GetACP ();
- else if (!strcasecmp (optarg, "OEM"))
- codepage = GetOEMCP ();
- else if (!strcasecmp (optarg, "UTF8")
- || !strcasecmp (optarg, "UTF-8"))
- codepage = CP_UTF8;
- else
- {
- char *c;
- codepage = (UINT) strtoul (optarg, &c, 10);
- if (*c)
- usage (stderr, 1);
- }
- break;
-
- case 'D':
- case 'H':
- case 'O':
- case 'P':
- case 'S':
- case 'W':
- ++output_flag;
- o = c;
- break;
-
- case 'F':
- if (!optarg)
- usage (stderr, 1);
- ++output_flag;
- output_arg = optarg;
- o = c;
- break;
-
- case 'i':
- ignore_flag = 1;
- break;
-
- case 'h':
- usage (stdout, 0);
- break;
-
- case 'V':
- print_version ();
- exit (0);
-
- default:
- fprintf (stderr, "Try `%s --help' for more information.\n",
- prog_name);
- exit (1);
- }
- }
-
- /* If none of the "important" flags are set, -u is default. */
- if (!unix_flag && !windows_flag && !mode_flag
- && (!from_file ? !options_from_file_flag : 1))
- unix_flag = 1;
-
- /* Only one of ... */
- if (unix_flag + windows_flag + mode_flag > 1
- + (!from_file ? options_from_file_flag : 0))
- usage (stderr, 1);
-
- /* options_from_file_flag requires a file. */
- if (!from_file && options_from_file_flag && !file_arg)
- usage (stderr, 1);
-
- /* longname and shortname don't play well together. */
- if (longname_flag && shortname_flag)
- usage (stderr, 1);
-
- /* longname and shortname only make sense with Windows paths. */
- if ((longname_flag || shortname_flag) && !windows_flag)
- usage (stderr, 1);
-
- return o;
-}
-
-static void
-action (int argc, char **argv, int opt)
-{
- if (output_flag)
- {
- if (argv[optind])
- usage (stderr, 1);
-
- do_sysfolders (opt);
- }
- else
- {
- if (optind > argc - 1)
- usage (stderr, 1);
-
- for (int i = optind; argv[i]; i++)
- if (mode_flag)
- report_mode (argv[i]);
- else
- do_pathconv (argv[i]);
- }
-}
-
-int
-main (int argc, char **argv)
-{
- int o;
-
- setlocale (LC_CTYPE, "");
- prog_name = program_invocation_short_name;
-
- o = do_options (argc, argv, 0);
-
- if (!file_arg)
- action (argc, argv, o);
- else
- {
- FILE *fp;
- char buf[PATH_MAX * 2 + 1];
-
- if (argv[optind])
- usage (stderr, 1);
-
- if (strcmp (file_arg, "-"))
- {
- if (!(fp = fopen (file_arg, "rt")))
- {
- perror ("cygpath");
- exit (1);
- }
- }
- else
- {
- fp = stdin;
- setmode (0, O_TEXT);
- }
- setbuf (stdout, NULL);
-
- while (fgets (buf, sizeof (buf), fp))
- {
- int ac = 0;
- char *av[4] = { NULL, NULL, NULL, NULL };
- char *p = strchr (buf, '\n');
- if (p)
- *p = '\0';
- p = buf;
- av[ac++] = prog_name;
- av[ac++] = p;
- if (options_from_file_flag && *p == '-')
- {
- while (*p && !isspace (*p))
- ++p;
- if (*p)
- {
- *p++ = '\0';
- while (*p && isspace (*p))
- ++p;
- av[ac++] = p;
- }
- o = do_options (ac, av, 1);
- }
- else
- {
- output_flag = 0;
- optind = 1;
- }
- action (ac, av, o);
- }
- }
- exit (0);
-}
diff --git a/winsup/utils/cygwin-console-helper.cc b/winsup/utils/cygwin-console-helper.cc
deleted file mode 100644
index 8f62ed7e6..000000000
--- a/winsup/utils/cygwin-console-helper.cc
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <windows.h>
-int
-main (int argc, char **argv)
-{
- char *end;
- if (argc != 3)
- exit (1);
- HANDLE h = (HANDLE) strtoul (argv[1], &end, 0);
- SetEvent (h);
- h = (HANDLE) strtoul (argv[2], &end, 0);
- WaitForSingleObject (h, INFINITE);
- exit (0);
-}
diff --git a/winsup/utils/dump_setup.cc b/winsup/utils/dump_setup.cc
deleted file mode 100644
index 002c91d9f..000000000
--- a/winsup/utils/dump_setup.cc
+++ /dev/null
@@ -1,615 +0,0 @@
-/* dump_setup.cc
-
- Copyright 2001, 2002, 2003, 2004, 2005, 2008, 2010, 2011, 2012 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdlib.h>
-#include <string.h>
-#include <io.h>
-#include <sys/stat.h>
-#include <errno.h>
-#define WIN32_NO_STATUS /* Disable status codes in winnt.h since we include
- ntstatus.h for extended status codes below. */
-#include <windows.h>
-#undef WIN32_NO_STATUS
-#include <winternl.h>
-#include <ntstatus.h>
-#include "path.h"
-#include <zlib.h>
-
-static int package_len = 20;
-static unsigned int version_len = 10;
-
-
-typedef struct
-{
- char pkgtar[MAX_PATH + 1];
- char pkg[MAX_PATH + 1];
- char ver[MAX_PATH + 1];
- char tail[MAX_PATH + 1];
- char what[16];
-} fileparse;
-
-static int
-find_tar_ext (const char *path)
-{
- char *p = strchr (path, '\0') - 9;
- if (p <= path)
- return 0;
- if ((p = strstr (p, ".tar")) != NULL)
- return p - path;
- else
- return 0;
-}
-
-static char *
-base (const char *s)
-{
- if (!s)
- return 0;
- const char *rv = s;
- while (*s)
- {
- if ((*s == '/' || *s == ':' || *s == '\\') && s[1])
- rv = s + 1;
- s++;
- }
- return (char *) rv;
-}
-
-/* Parse a filename into package, version, and extension components. */
-int
-parse_filename (const char *in_fn, fileparse& f)
-{
- char *p, *ver;
- char fn[strlen (in_fn) + 1];
-
- strcpy (fn, in_fn);
- int n = find_tar_ext (fn);
-
- if (!n)
- return 0;
-
- strcpy (f.tail, fn + n);
- fn[n] = '\0';
- f.pkg[0] = f.what[0] = '\0';
- p = base (fn);
- for (ver = p; *ver; ver++)
- if (*ver != '-')
- continue;
- else if (isdigit (ver[1]))
- {
- *ver++ = '\0';
- strcpy (f.pkg, p);
- break;
- }
- else if (strcasecmp (ver, "-src") == 0 ||
- strcasecmp (ver, "-patch") == 0)
- {
- *ver++ = '\0';
- strcpy (f.pkg, p);
- strcpy (f.what, strlwr (ver));
- strcpy (f.pkgtar, p);
- strcat (f.pkgtar, f.tail);
- ver = strchr (ver, '\0');
- break;
- }
-
- if (!f.pkg[0])
- strcpy (f.pkg, p);
-
- if (!f.what[0])
- {
- int n;
- p = strchr (ver, '\0');
- strcpy (f.pkgtar, in_fn);
- if ((p -= 4) >= ver && strcasecmp (p, "-src") == 0)
- n = 4;
- else if ((p -= 2) >= ver && strcasecmp (p, "-patch") == 0)
- n = 6;
- else
- n = 0;
- if (n)
- {
- strcpy (f.what, p + 1);
- *p = '\0';
- p = f.pkgtar + (p - fn) + n;
- memmove (p - 4, p, strlen (p));
- }
- }
-
- strcpy (f.ver, *ver ? ver : "0.0");
- return 1;
-}
-
-static bool
-dump_file (const char *msg, const char *fn)
-{
- char buf[4096];
- bool printed = false;
- bool found = false;
- size_t len = strlen (fn);
- char *path = cygpath ("/etc/setup/setup.rc", NULL);
- FILE *fp = fopen (path, "rt");
-
- if (fp)
- {
- while (fgets (buf, 4096, fp))
- {
- if (found)
- {
- char *bufp = buf;
-
- if (*bufp == '\t')
- ++bufp;
- char *p = strchr (bufp, '\0');
- printf ("%s%s%s", msg, bufp,
- (p == bufp) || p[-1] != '\n' ? "\n" : "");
- printed = true;
- break;
- }
- if (!strncmp (buf, fn, len) && buf[len] == '\n')
- found = true;
- }
- fclose (fp);
- }
- return printed;
-}
-
-struct pkgver
-{
- char *name;
- char *ver;
-};
-
-extern "C" {
-int
-compar (const void *a, const void *b)
-{
- const pkgver *pa = (const pkgver *) a;
- const pkgver *pb = (const pkgver *) b;
- return strcasecmp (pa->name, pb->name);
-}
-}
-
-int
-match_argv (char **argv, const char *name)
-{
- if (!argv || !*argv)
- return -1;
- for (char **a = argv; *a; a++)
- if (strcasecmp (*a, name) == 0)
- return a - argv + 1;
- return 0;
-}
-
-static bool
-could_not_access (int verbose, char *filename, char *package, const char *type)
-{
- switch (errno)
- {
- case ENOTDIR:
- break;
- case ENOENT:
- if (verbose)
- printf ("Missing %s: /%s from package %s\n",
- type, filename, package);
- return true;
- case EACCES:
- if (verbose)
- printf ("Unable to access %s /%s from package %s\n",
- type, filename, package);
- return true;
- }
- return false;
-}
-
-static const WCHAR tfx_chars[] = {
- 0, 0xf000 | 1, 0xf000 | 2, 0xf000 | 3,
- 0xf000 | 4, 0xf000 | 5, 0xf000 | 6, 0xf000 | 7,
- 0xf000 | 8, 0xf000 | 9, 0xf000 | 10, 0xf000 | 11,
- 0xf000 | 12, 0xf000 | 13, 0xf000 | 14, 0xf000 | 15,
- 0xf000 | 16, 0xf000 | 17, 0xf000 | 18, 0xf000 | 19,
- 0xf000 | 20, 0xf000 | 21, 0xf000 | 22, 0xf000 | 23,
- 0xf000 | 24, 0xf000 | 25, 0xf000 | 26, 0xf000 | 27,
- 0xf000 | 28, 0xf000 | 29, 0xf000 | 30, 0xf000 | 31,
- ' ', '!', 0xf000 | '"', '#',
- '$', '%', '&', 39,
- '(', ')', 0xf000 | '*', '+',
- ',', '-', '.', '\\',
- '0', '1', '2', '3',
- '4', '5', '6', '7',
- '8', '9', 0xf000 | ':', ';',
- 0xf000 | '<', '=', 0xf000 | '>', 0xf000 | '?',
- '@', 'A', 'B', 'C',
- 'D', 'E', 'F', 'G',
- 'H', 'I', 'J', 'K',
- 'L', 'M', 'N', 'O',
- 'P', 'Q', 'R', 'S',
- 'T', 'U', 'V', 'W',
- 'X', 'Y', 'Z', '[',
- '\\', ']', '^', '_',
- '`', 'a', 'b', 'c',
- 'd', 'e', 'f', 'g',
- 'h', 'i', 'j', 'k',
- 'l', 'm', 'n', 'o',
- 'p', 'q', 'r', 's',
- 't', 'u', 'v', 'w',
- 'x', 'y', 'z', '{',
- 0xf000 | '|', '}', '~', 127
-};
-
-static void
-transform_chars (PWCHAR path, PWCHAR path_end)
-{
- for (; path <= path_end; ++path)
- if (*path < 128)
- *path = tfx_chars[*path];
-}
-
-extern "C" NTAPI NTSTATUS NtQueryAttributesFile (POBJECT_ATTRIBUTES,
- PFILE_BASIC_INFORMATION);
-
-/* This function checks for file existance and fills the stat structure
- with only the required mode info. We're using a native NT function
- here, otherwise we wouldn't be able to check for files with special
- characters not valid in Win32, and espacially not valid using the
- ANSI API. */
-static int
-simple_nt_stat (const char *filename, struct stat *st)
-{
- size_t len = mbstowcs (NULL, filename, 0) + 1;
- WCHAR path[len + 8]; /* Enough space for the NT prefix */
- PWCHAR p = path;
- UNICODE_STRING upath;
- OBJECT_ATTRIBUTES attr;
- FILE_BASIC_INFORMATION fbi;
- NTSTATUS status;
-
- wcscpy (p, L"\\??\\");
- p += 4;
- if (filename[0] == '\\' && filename[1] == '\\')
- {
- wcscpy (p, L"UNC");
- p += 3;
- p += mbstowcs (p, filename + 1, len);
- }
- else
- p += mbstowcs (p, filename, len);
- /* Remove trailing backslashes. NT functions don't like them. */
- if (p[-1] == L'\\')
- *--p = L'\0';
- /* Skip prefix and drive, otherwise question marks and colons are converted
- as well. */
- transform_chars (path + 7, p);
- RtlInitUnicodeString (&upath, path);
- InitializeObjectAttributes (&attr, &upath, OBJ_CASE_INSENSITIVE, NULL, NULL);
- status = NtQueryAttributesFile (&attr, &fbi);
- if (NT_SUCCESS (status))
- {
- st->st_mode = (fbi.FileAttributes & FILE_ATTRIBUTE_DIRECTORY)
- ? S_IFDIR : S_IFREG;
- return 0;
- }
- if (status == STATUS_OBJECT_PATH_NOT_FOUND
- || status == STATUS_OBJECT_NAME_INVALID
- || status == STATUS_BAD_NETWORK_PATH
- || status == STATUS_BAD_NETWORK_NAME
- || status == STATUS_NO_MEDIA_IN_DEVICE
- || status == STATUS_OBJECT_NAME_NOT_FOUND
- || status == STATUS_NO_SUCH_FILE)
- errno = ENOENT;
- else
- errno = EACCES;
- return -1;
-}
-
-static bool
-directory_exists (int verbose, char *filename, char *package)
-{
- struct stat status;
- if (simple_nt_stat(cygpath("/", filename, NULL), &status))
- {
- if (could_not_access (verbose, filename, package, "directory"))
- return false;
- }
- else if (!S_ISDIR(status.st_mode))
- {
- if (verbose)
- printf ("Directory/file mismatch: /%s from package %s\n", filename, package);
- return false;
- }
- return true;
-}
-
-static bool
-file_exists (int verbose, char *filename, const char *alt, char *package)
-{
- struct stat status;
- if (simple_nt_stat(cygpath("/", filename, NULL), &status) &&
- (!alt || simple_nt_stat(cygpath("/", filename, alt, NULL), &status)))
- {
- if (could_not_access (verbose, filename, package, "file"))
- return false;
- }
- else if (!S_ISREG(status.st_mode))
- {
- if (verbose)
- printf ("File type mismatch: /%s from package %s\n", filename, package);
- return false;
- }
- return true;
-}
-
-static gzFile
-open_package_list (char *package)
-{
- char filelist[MAX_PATH + 1] = "/etc/setup/";
- strcat (strcat (filelist, package), ".lst.gz");
- if (!file_exists (false, filelist + 1, NULL, NULL))
- return NULL;
-
- gzFile fp;
-#ifndef ZLIB_VERSION
- fp = NULL;
-#else
- char *fn = cygpath (filelist, NULL);
- fp = gzopen (fn, "rb9");
- free (fn);
-#endif
-
- return fp;
-}
-
-static bool
-check_package_files (int verbose, char *package)
-{
- gzFile fp = open_package_list (package);
- if (!fp)
- {
- if (verbose)
- printf ("Empty package %s\n", package);
- return true;
- }
-
- bool result = true;
- char buf[MAX_PATH + 1];
- while (gzgets (fp, buf, MAX_PATH))
- {
- char *filename = strtok(buf, "\n");
-
- if (*filename == '/')
- ++filename;
- else if (!strncmp (filename, "./", 2))
- filename += 2;
-
- if (filename[strlen (filename) - 1] == '/')
- {
- if (!directory_exists (verbose, filename, package))
- result = false;
- }
- else if (!strncmp (filename, "etc/postinstall/", 16))
- {
- if (!file_exists (verbose, filename, ".done", package))
- result = false;
- }
- else
- {
- if (!file_exists (verbose, filename, ".lnk", package))
- result = false;
- }
- }
-
- gzclose (fp);
- return result;
-}
-
-/**
- * Returns a calloc'd sorted list of packages or NULL if no info.
- * The last entry in the list is {NULL,NULL}.
- */
-static pkgver *
-get_packages (char **argv)
-{
- char *setup = cygpath ("/etc/setup/installed.db", NULL);
- FILE *fp = fopen (setup, "rt");
-
- if (fp == NULL)
- return NULL;
-
- int nlines;
- nlines = 0;
- char buf[4096];
- while (fgets (buf, 4096, fp))
- nlines += 2; /* potentially binary + source */
- if (!nlines)
- {
- fclose (fp);
- return NULL;
- }
- rewind (fp);
-
- pkgver *packages;
-
- packages = (pkgver *) calloc (nlines + 1, sizeof(packages[0]));
- int n;
- for (n = 0; fgets (buf, 4096, fp) && n < nlines;)
- {
- char *package = strtok (buf, " ");
- if (!package || !*package || !match_argv (argv, package))
- continue;
- for (int i = 0; i < 2; i++)
- {
- fileparse f;
- char *tar = strtok (NULL, " ");
- if (!tar || !*tar || !parse_filename (tar, f))
- break;
-
- int len = strlen (package);
- if (f.what[0])
- len += strlen (f.what) + 1;
- if (len > package_len)
- package_len = len;
- packages[n].name = (char *) malloc (len + 1);
- strcpy (packages[n].name, package);
- if (f.what[0])
- strcat (strcat (packages[n].name, "-"), f.what);
- packages[n].ver = strdup (f.ver);
- if (strlen(f.ver) > version_len)
- version_len = strlen(f.ver);
- n++;
- if (strtok (NULL, " ") == NULL)
- break;
- }
- }
-
- packages[n].name = packages[n].ver = NULL;
-
- qsort (packages, n, sizeof (packages[0]), compar);
-
- fclose (fp);
-
- return packages;
-}
-
-void
-dump_setup (int verbose, char **argv, bool check_files)
-{
- pkgver *packages = get_packages(argv);
-
- puts ("Cygwin Package Information");
- if (packages == NULL)
- {
- puts ("No setup information found");
- return;
- }
-
- if (verbose)
- {
- bool need_nl = dump_file ("Last downloaded files to: ", "last-cache");
- if (dump_file ("Last downloaded files from: ", "last-mirror") || need_nl)
- puts ("");
- }
-
- printf ("%-*s %-*s%s\n", package_len, "Package",
- check_files ? version_len : 7, "Version",
- check_files ? " Status" : "");
- for (int i = 0; packages[i].name; i++)
- {
- if (check_files)
- printf ("%-*s %-*s%s\n", package_len, packages[i].name,
- version_len, packages[i].ver,
- check_package_files (verbose, packages[i].name)
- ? " OK" : " Incomplete");
- else
- printf ("%-*s %s\n", package_len, packages[i].name, packages[i].ver);
- fflush(stdout);
- }
-
- free (packages);
-
- return;
-}
-
-void
-package_list (int verbose, char **argv)
-{
- pkgver *packages = get_packages(argv);
- if (packages == NULL)
- {
- puts ("No setup information found");
- return;
- }
-
- for (int i = 0; packages[i].name; i++)
- {
- gzFile fp = open_package_list (packages[i].name);
- if (!fp)
- {
- if (verbose)
- printf ("Can't open file list /etc/setup/%s.lst.gz for package %s\n",
- packages[i].name, packages[i].name);
- continue;
- }
-
- if (verbose)
- printf ("Package: %s-%s\n", packages[i].name, packages[i].ver);
-
- char buf[MAX_PATH + 1];
- while (gzgets (fp, buf, MAX_PATH))
- {
- char *lastchar = strchr(buf, '\n');
- if (lastchar[-1] != '/')
- printf ("%s/%s", (verbose?" ":""), buf);
- }
-
- gzclose (fp);
- }
-
- free (packages);
-
- return;
-}
-
-void
-package_find (int verbose, char **argv)
-{
- pkgver *packages = get_packages(NULL);
- if (packages == NULL)
- {
- puts ("No setup information found");
- return;
- }
-
- for (int i = 0; packages[i].name; i++)
- {
- gzFile fp = open_package_list (packages[i].name);
- if (!fp)
- continue;
-
- char buf[MAX_PATH + 2];
- buf[0] = '/';
- while (gzgets (fp, buf + 1, MAX_PATH))
- {
- char *filename = strtok(buf, "\n");
- int flen = strlen (filename);
- if (filename[flen - 1] != '/')
- {
- // FIXME: verify that /bin is mounted on /usr/bin; ditto for /lib
- bool is_alias = !strncmp(filename, "/usr/bin/", 9) ||
- !strncmp(filename, "/usr/lib/", 9);
- int a = match_argv (argv, filename);
- if (!a && is_alias)
- a = match_argv (argv, filename + 4);
- if (!a && !strcmp(filename + flen - 4, ".exe"))
- {
- filename[flen - 4] = '\0';
- a = match_argv (argv, filename);
- }
- if (!a && is_alias)
- a = match_argv (argv, filename + 4);
- if (a > 0)
- {
- if (verbose)
- printf ("%s: found in package ", filename);
- printf ("%s-%s\n", packages[i].name, packages[i].ver);
- }
- }
- }
-
- gzclose (fp);
- }
-
- free (packages);
-
- return;
-}
-
diff --git a/winsup/utils/dumper.cc b/winsup/utils/dumper.cc
deleted file mode 100644
index 50df44569..000000000
--- a/winsup/utils/dumper.cc
+++ /dev/null
@@ -1,950 +0,0 @@
-/* dumper.cc
-
- Copyright 1999, 2001, 2002, 2004, 2006, 2007, 2011, 2013 Red Hat Inc.
-
- Written by Egor Duda <deo@logos-m.ru>
-
- This file is part of Cygwin.
-
- 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 (file COPYING.dumper) 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include <ansidecl.h>
-#define PACKAGE
-#include <bfd.h>
-#include <elf/common.h>
-#include <elf/external.h>
-#include <sys/procfs.h>
-#include <sys/cygwin.h>
-#include <cygwin/version.h>
-#include <getopt.h>
-#include <stdarg.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <sys/param.h>
-#include <windows.h>
-
-#include "dumper.h"
-
-#define NOTE_NAME_SIZE 16
-
-typedef struct _note_header
- {
- Elf_External_Note elf_note_header;
- char name[NOTE_NAME_SIZE - 1]; /* external note contains first byte of data */
- }
-#ifdef __GNUC__
-__attribute__ ((packed))
-#endif
- note_header;
-
-BOOL verbose = FALSE;
-
-int deb_printf (const char *format,...)
-{
- if (!verbose)
- return 0;
- va_list va;
- va_start (va, format);
- int ret_val = vprintf (format, va);
- va_end (va);
- return ret_val;
-}
-
-dumper::dumper (DWORD pid, DWORD tid, const char *file_name)
-{
- this->file_name = strdup (file_name);
-
- this->pid = pid;
- this->tid = tid;
- core_bfd = NULL;
- excl_list = new exclusion (20);
-
- list = last = NULL;
-
- status_section = NULL;
-
- memory_num = module_num = thread_num = 0;
-
- hProcess = OpenProcess (PROCESS_ALL_ACCESS,
- FALSE, /* no inheritance */
- pid);
- if (!hProcess)
- {
- fprintf (stderr, "Failed to open process #%u, error %ld\n",
- (unsigned int) pid, (long) GetLastError ());
- return;
- }
-
- init_core_dump ();
-
- if (!sane ())
- dumper_abort ();
-}
-
-dumper::~dumper ()
-{
- close ();
- free (file_name);
-}
-
-void
-dumper::dumper_abort ()
-{
- close ();
- unlink (file_name);
-}
-
-void
-dumper::close ()
-{
- if (core_bfd)
- bfd_close (core_bfd);
- if (excl_list)
- delete excl_list;
- if (hProcess)
- CloseHandle (hProcess);
- core_bfd = NULL;
- hProcess = NULL;
- excl_list = NULL;
-}
-
-int
-dumper::sane ()
-{
- if (hProcess == NULL || core_bfd == NULL || excl_list == NULL)
- return 0;
- return 1;
-}
-
-void
-print_section_name (bfd* abfd, asection* sect, PTR obj)
-{
- deb_printf (" %s", bfd_get_section_name (abfd, sect));
-}
-
-void
-dumper::print_core_section_list ()
-{
- deb_printf ("current sections:");
- bfd_map_over_sections (core_bfd, &print_section_name, NULL);
- deb_printf ("\n");
-}
-
-process_entity *
-dumper::add_process_entity_to_list (process_entity_type type)
-{
- if (!sane ())
- return NULL;
-
- process_entity *new_entity = (process_entity *) malloc (sizeof (process_entity));
- if (new_entity == NULL)
- return NULL;
- new_entity->next = NULL;
- new_entity->section = NULL;
- if (last == NULL)
- list = new_entity;
- else
- last->next = new_entity;
- last = new_entity;
- return new_entity;
-}
-
-int
-dumper::add_thread (DWORD tid, HANDLE hThread)
-{
- if (!sane ())
- return 0;
-
- CONTEXT *pcontext;
-
- process_entity *new_entity = add_process_entity_to_list (pr_ent_thread);
- if (new_entity == NULL)
- return 0;
- new_entity->type = pr_ent_thread;
- thread_num++;
-
- new_entity->u.thread.tid = tid;
- new_entity->u.thread.hThread = hThread;
-
- pcontext = &(new_entity->u.thread.context);
- pcontext->ContextFlags = CONTEXT_FULL | CONTEXT_FLOATING_POINT;
- if (!GetThreadContext (hThread, pcontext))
- {
- deb_printf ("Failed to read thread context (tid=%x), error %ld\n", tid, GetLastError ());
- return 0;
- }
-
- deb_printf ("added thread %u\n", tid);
- return 1;
-}
-
-int
-dumper::add_mem_region (LPBYTE base, SIZE_T size)
-{
- if (!sane ())
- return 0;
-
- if (base == NULL || size == 0)
- return 1; // just ignore empty regions
-
- process_entity *new_entity = add_process_entity_to_list (pr_ent_memory);
- if (new_entity == NULL)
- return 0;
- new_entity->type = pr_ent_memory;
- memory_num++;
-
- new_entity->u.memory.base = base;
- new_entity->u.memory.size = size;
-
- deb_printf ("added memory region %p-%p\n", base, base + size);
- return 1;
-}
-
-/* split_add_mem_region scans list of regions to be excluded from dumping process
- (excl_list) and removes all "excluded" parts from given region. */
-int
-dumper::split_add_mem_region (LPBYTE base, SIZE_T size)
-{
- if (!sane ())
- return 0;
-
- if (base == NULL || size == 0)
- return 1; // just ignore empty regions
-
- LPBYTE last_base = base;
-
- for (process_mem_region * p = excl_list->region;
- p < excl_list->region + excl_list->last;
- p++)
- {
- if (p->base >= base + size || p->base + p->size <= base)
- continue;
-
- if (p->base <= base)
- {
- last_base = p->base + p->size;
- continue;
- }
-
- add_mem_region (last_base, p->base - last_base);
- last_base = p->base + p->size;
- }
-
- if (last_base < base + size)
- add_mem_region (last_base, base + size - last_base);
-
- return 1;
-}
-
-int
-dumper::add_module (LPVOID base_address)
-{
- if (!sane ())
- return 0;
-
- char *module_name = psapi_get_module_name (hProcess, base_address);
- if (module_name == NULL)
- return 1;
-
- process_entity *new_entity = add_process_entity_to_list (pr_ent_module);
- if (new_entity == NULL)
- return 0;
- new_entity->type = pr_ent_module;
- module_num++;
-
- new_entity->u.module.base_address = base_address;
- new_entity->u.module.name = module_name;
-
- parse_pe (module_name, excl_list);
-
- deb_printf ("added module %p %s\n", base_address, module_name);
- return 1;
-}
-
-#define PAGE_BUFFER_SIZE 4096
-
-int
-dumper::collect_memory_sections ()
-{
- if (!sane ())
- return 0;
-
- LPBYTE current_page_address;
- LPBYTE last_base = (LPBYTE) 0xFFFFFFFF;
- SIZE_T last_size = (SIZE_T) 0;
- SIZE_T done;
-
- char mem_buf[PAGE_BUFFER_SIZE];
-
- MEMORY_BASIC_INFORMATION mbi;
-
- if (hProcess == NULL)
- return 0;
-
- for (current_page_address = 0; current_page_address < (LPBYTE) 0xFFFF0000;)
- {
- if (!VirtualQueryEx (hProcess, current_page_address, &mbi, sizeof (mbi)))
- break;
-
- int skip_region_p = 0;
-
- if (mbi.Protect & (PAGE_NOACCESS | PAGE_GUARD) ||
- mbi.State != MEM_COMMIT)
- skip_region_p = 1;
-
- if (!skip_region_p)
- {
- /* just to make sure that later we'll be able to read it.
- According to MS docs either region is all-readable or
- all-nonreadable */
- if (!ReadProcessMemory (hProcess, current_page_address, mem_buf, sizeof (mem_buf), &done))
- {
- DWORD err = GetLastError ();
- const char *pt[10];
- pt[0] = (mbi.Protect & PAGE_READONLY) ? "RO " : "";
- pt[1] = (mbi.Protect & PAGE_READWRITE) ? "RW " : "";
- pt[2] = (mbi.Protect & PAGE_WRITECOPY) ? "WC " : "";
- pt[3] = (mbi.Protect & PAGE_EXECUTE) ? "EX " : "";
- pt[4] = (mbi.Protect & PAGE_EXECUTE_READ) ? "EXRO " : "";
- pt[5] = (mbi.Protect & PAGE_EXECUTE_READWRITE) ? "EXRW " : "";
- pt[6] = (mbi.Protect & PAGE_EXECUTE_WRITECOPY) ? "EXWC " : "";
- pt[7] = (mbi.Protect & PAGE_GUARD) ? "GRD " : "";
- pt[8] = (mbi.Protect & PAGE_NOACCESS) ? "NA " : "";
- pt[9] = (mbi.Protect & PAGE_NOCACHE) ? "NC " : "";
- char buf[10 * 6];
- buf[0] = '\0';
- for (int i = 0; i < 10; i++)
- strcat (buf, pt[i]);
-
- deb_printf ("warning: failed to read memory at %p-%p (protect = %s), error %ld.\n",
- current_page_address,
- current_page_address + mbi.RegionSize,
- buf, err);
- skip_region_p = 1;
- }
- }
-
- if (!skip_region_p)
- {
- if (last_base + last_size == current_page_address)
- last_size += mbi.RegionSize;
- else
- {
- split_add_mem_region (last_base, last_size);
- last_base = (LPBYTE) mbi.BaseAddress;
- last_size = mbi.RegionSize;
- }
- }
- else
- {
- split_add_mem_region (last_base, last_size);
- last_base = NULL;
- last_size = 0;
- }
-
- current_page_address += mbi.RegionSize;
- }
-
- /* dump last sections, if any */
- split_add_mem_region (last_base, last_size);
- return 1;
-};
-
-int
-dumper::dump_memory_region (asection * to, process_mem_region * memory)
-{
- if (!sane ())
- return 0;
-
- SIZE_T size = memory->size;
- SIZE_T todo;
- SIZE_T done;
- LPBYTE pos = memory->base;
- DWORD sect_pos = 0;
-
- if (to == NULL || memory == NULL)
- return 0;
-
- char mem_buf[PAGE_BUFFER_SIZE];
-
- while (size > 0)
- {
- todo = MIN (size, PAGE_BUFFER_SIZE);
- if (!ReadProcessMemory (hProcess, pos, mem_buf, todo, &done))
- {
- deb_printf ("Failed to read process memory at %x(%x), error %ld\n", pos, todo, GetLastError ());
- return 0;
- }
- size -= done;
- pos += done;
- if (!bfd_set_section_contents (core_bfd, to, mem_buf, sect_pos, done))
- {
- bfd_perror ("writing memory region to bfd");
- dumper_abort ();
- return 0;
- };
- sect_pos += done;
- }
- return 1;
-}
-
-int
-dumper::dump_thread (asection * to, process_thread * thread)
-{
- if (!sane ())
- return 0;
-
- if (to == NULL || thread == NULL)
- return 0;
-
- win32_pstatus thread_pstatus;
-
- note_header header;
- bfd_putl32 (NOTE_NAME_SIZE, header.elf_note_header.namesz);
- bfd_putl32 (sizeof (thread_pstatus), header.elf_note_header.descsz);
- bfd_putl32 (NT_WIN32PSTATUS, header.elf_note_header.type);
- strncpy ((char *) &header.elf_note_header.name, "win32thread", NOTE_NAME_SIZE);
-
- thread_pstatus.data_type = NOTE_INFO_THREAD;
- thread_pstatus.data.thread_info.tid = thread->tid;
-
- if (tid == 0)
- {
- /* this is a special case. we don't know, which thread
- was active when exception occured, so let's blame
- the first one */
- thread_pstatus.data.thread_info.is_active_thread = TRUE;
- tid = (DWORD) - 1;
- }
- else if (tid > 0 && thread->tid == tid)
- thread_pstatus.data.thread_info.is_active_thread = TRUE;
- else
- thread_pstatus.data.thread_info.is_active_thread = FALSE;
-
- memcpy (&(thread_pstatus.data.thread_info.thread_context),
- &(thread->context),
- sizeof (thread->context));
-
- if (!bfd_set_section_contents (core_bfd, to, &header,
- 0,
- sizeof (header)) ||
- !bfd_set_section_contents (core_bfd, to, &thread_pstatus,
- sizeof (header),
- sizeof (thread_pstatus)))
- {
- bfd_perror ("writing thread info to bfd");
- dumper_abort ();
- return 0;
- };
- return 1;
-}
-
-int
-dumper::dump_module (asection * to, process_module * module)
-{
- if (!sane ())
- return 0;
-
- if (to == NULL || module == NULL)
- return 0;
-
- struct win32_pstatus *module_pstatus_ptr;
-
- int note_length = sizeof (struct win32_pstatus) + strlen (module->name);
-
- char *buf = (char *) malloc (note_length);
-
- if (!buf)
- {
- fprintf (stderr, "Error alloating memory. Dumping aborted.\n");
- goto out;
- };
-
- module_pstatus_ptr = (struct win32_pstatus *) buf;
-
- note_header header;
- bfd_putl32 (NOTE_NAME_SIZE, header.elf_note_header.namesz);
- bfd_putl32 (note_length, header.elf_note_header.descsz);
- bfd_putl32 (NT_WIN32PSTATUS, header.elf_note_header.type);
- strncpy ((char *) &header.elf_note_header.name, "win32module", NOTE_NAME_SIZE);
-
- module_pstatus_ptr->data_type = NOTE_INFO_MODULE;
- module_pstatus_ptr->data.module_info.base_address = module->base_address;
- module_pstatus_ptr->data.module_info.module_name_size = strlen (module->name) + 1;
- strcpy (module_pstatus_ptr->data.module_info.module_name, module->name);
-
- if (!bfd_set_section_contents (core_bfd, to, &header,
- 0,
- sizeof (header)) ||
- !bfd_set_section_contents (core_bfd, to, module_pstatus_ptr,
- sizeof (header),
- note_length))
- {
- bfd_perror ("writing module info to bfd");
- goto out;
- };
- return 1;
-
-out:
- if (buf)
- free (buf);
- dumper_abort ();
- return 0;
-
-}
-
-int
-dumper::collect_process_information ()
-{
- int exception_level = 0;
-
- if (!sane ())
- return 0;
-
- if (!DebugActiveProcess (pid))
- {
- fprintf (stderr, "Cannot attach to process #%u, error %ld",
- (unsigned int) pid, (long) GetLastError ());
- return 0;
- }
-
- char event_name[sizeof ("cygwin_error_start_event") + 20];
- sprintf (event_name, "cygwin_error_start_event%16x", (unsigned int) pid);
- HANDLE sync_with_debugee = OpenEvent (EVENT_MODIFY_STATE, FALSE, event_name);
-
- DEBUG_EVENT current_event;
-
- while (1)
- {
- if (!WaitForDebugEvent (&current_event, 20000))
- return 0;
-
- deb_printf ("got debug event %d\n", current_event.dwDebugEventCode);
-
- switch (current_event.dwDebugEventCode)
- {
- case CREATE_THREAD_DEBUG_EVENT:
-
- if (!add_thread (current_event.dwThreadId,
- current_event.u.CreateThread.hThread))
- goto failed;
-
- break;
-
- case CREATE_PROCESS_DEBUG_EVENT:
-
- if (!add_module (current_event.u.CreateProcessInfo.lpBaseOfImage) ||
- !add_thread (current_event.dwThreadId,
- current_event.u.CreateProcessInfo.hThread))
- goto failed;
-
- break;
-
- case EXIT_PROCESS_DEBUG_EVENT:
-
- deb_printf ("debugee quits");
- ContinueDebugEvent (current_event.dwProcessId,
- current_event.dwThreadId,
- DBG_CONTINUE);
-
- return 1;
-
- break;
-
- case LOAD_DLL_DEBUG_EVENT:
-
- if (!add_module (current_event.u.LoadDll.lpBaseOfDll))
- goto failed;
-
- break;
-
- case EXCEPTION_DEBUG_EVENT:
-
- exception_level++;
- if (exception_level == 2)
- break;
- else if (exception_level > 2)
- return 0;
-
- collect_memory_sections ();
-
- /* got all info. time to dump */
-
- if (!prepare_core_dump ())
- {
- fprintf (stderr, "Failed to prepare core dump\n");
- goto failed;
- };
-
- if (!write_core_dump ())
- {
- fprintf (stderr, "Failed to write core dump\n");
- goto failed;
- };
-
- /* signal a debugee that we've finished */
- if (sync_with_debugee)
- SetEvent (sync_with_debugee);
-
- break;
-
- default:
-
- break;
-
- }
-
- ContinueDebugEvent (current_event.dwProcessId,
- current_event.dwThreadId,
- DBG_CONTINUE);
- }
-failed:
- /* set debugee free */
- if (sync_with_debugee)
- SetEvent (sync_with_debugee);
-
- return 0;
-}
-
-int
-dumper::init_core_dump ()
-{
- bfd_init ();
-
- core_bfd = bfd_openw (file_name, "elf32-i386");
- if (core_bfd == NULL)
- {
- bfd_perror ("opening bfd");
- goto failed;
- }
-
- if (!bfd_set_format (core_bfd, bfd_core))
- {
- bfd_perror ("setting bfd format");
- goto failed;
- }
-
- if (!bfd_set_arch_mach (core_bfd, bfd_arch_i386, 0))
- {
- bfd_perror ("setting bfd architecture");
- goto failed;
- }
-
- return 1;
-
-failed:
- dumper_abort ();
- return 0;
-
-}
-
-int
-dumper::prepare_core_dump ()
-{
- if (!sane ())
- return 0;
-
- int sect_no = 0;
- char sect_name[50];
-
- flagword sect_flags;
- SIZE_T sect_size;
- bfd_vma sect_vma;
-
- asection *new_section;
-
- for (process_entity * p = list; p != NULL; p = p->next)
- {
- sect_no++;
-
- unsigned long phdr_type = PT_LOAD;
-
- switch (p->type)
- {
- case pr_ent_memory:
- sprintf (sect_name, ".mem/%u", sect_no);
- sect_flags = SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD;
- sect_size = p->u.memory.size;
- sect_vma = (bfd_vma) (p->u.memory.base);
- phdr_type = PT_LOAD;
- break;
-
- case pr_ent_thread:
- sprintf (sect_name, ".note/%u", sect_no);
- sect_flags = SEC_HAS_CONTENTS | SEC_LOAD;
- sect_size = sizeof (note_header) + sizeof (struct win32_pstatus);
- sect_vma = 0;
- phdr_type = PT_NOTE;
- break;
-
- case pr_ent_module:
- sprintf (sect_name, ".note/%u", sect_no);
- sect_flags = SEC_HAS_CONTENTS | SEC_LOAD;
- sect_size = sizeof (note_header) + sizeof (struct win32_pstatus) +
- (bfd_size_type) (strlen (p->u.module.name));
- sect_vma = 0;
- phdr_type = PT_NOTE;
- break;
-
- default:
- continue;
- }
-
- if (p->type == pr_ent_module && status_section != NULL)
- {
- if (!bfd_set_section_size (core_bfd,
- status_section,
- (bfd_get_section_size (status_section)
- + sect_size)))
- {
- bfd_perror ("resizing status section");
- goto failed;
- };
- continue;
- }
-
- deb_printf ("creating section (type%u) %s(%u), flags=%08x\n",
- p->type, sect_name, sect_size, sect_flags);
-
- bfd_set_error (bfd_error_no_error);
- char *buf = strdup (sect_name);
- new_section = bfd_make_section (core_bfd, buf);
- if (new_section == NULL)
- {
- if (bfd_get_error () == bfd_error_no_error)
- fprintf (stderr, "error creating new section (%s), section already exists.\n", buf);
- else
- bfd_perror ("creating section");
- goto failed;
- }
-
- if (!bfd_set_section_flags (core_bfd, new_section, sect_flags) ||
- !bfd_set_section_size (core_bfd, new_section, sect_size))
- {
- bfd_perror ("setting section attributes");
- goto failed;
- };
-
- new_section->vma = sect_vma;
- new_section->lma = 0;
- new_section->output_section = new_section;
- new_section->output_offset = 0;
- p->section = new_section;
- int section_count = 1;
-
- bfd_boolean filehdr = 0;
- bfd_boolean phdrs = 0;
-
- bfd_vma at = 0;
- bfd_boolean valid_at = 0;
-
- flagword flags = 0;
- bfd_boolean valid_flags = 1;
-
- if (p->type == pr_ent_memory)
- {
- MEMORY_BASIC_INFORMATION mbi;
- if (!VirtualQueryEx (hProcess, (LPVOID)sect_vma, &mbi, sizeof (mbi)))
- {
- bfd_perror ("getting mem region flags");
- goto failed;
- }
-
- static const struct
- {
- DWORD protect;
- flagword flags;
- } mappings[] =
- {
- { PAGE_READONLY, PF_R },
- { PAGE_READWRITE, PF_R | PF_W },
- { PAGE_WRITECOPY, PF_W },
- { PAGE_EXECUTE, PF_X },
- { PAGE_EXECUTE_READ, PF_X | PF_R },
- { PAGE_EXECUTE_READWRITE, PF_X | PF_R | PF_W },
- { PAGE_EXECUTE_WRITECOPY, PF_X | PF_W }
- };
-
- for (size_t i = 0;
- i < sizeof (mappings) / sizeof (mappings[0]);
- i++)
- if ((mbi.Protect & mappings[i].protect) != 0)
- flags |= mappings[i].flags;
- }
-
- if (!bfd_record_phdr (core_bfd, phdr_type,
- valid_flags, flags,
- valid_at, at,
- filehdr, phdrs,
- section_count, &new_section))
- {
- bfd_perror ("recording program headers");
- goto failed;
- }
- }
- return 1;
-
-failed:
- dumper_abort ();
- return 0;
-}
-
-int
-dumper::write_core_dump ()
-{
- if (!sane ())
- return 0;
-
- for (process_entity * p = list; p != NULL; p = p->next)
- {
- if (p->section == NULL)
- continue;
-
- deb_printf ("writing section type=%u base=%p size=%p flags=%08x\n",
- p->type,
- p->section->vma,
- bfd_get_section_size (p->section),
- p->section->flags);
-
- switch (p->type)
- {
- case pr_ent_memory:
- dump_memory_region (p->section, &(p->u.memory));
- break;
-
- case pr_ent_thread:
- dump_thread (p->section, &(p->u.thread));
- break;
-
- case pr_ent_module:
- dump_module (p->section, &(p->u.module));
- break;
-
- default:
- continue;
-
- }
- }
- return 1;
-}
-
-static void
-usage (FILE *stream, int status)
-{
- fprintf (stream, "\
-Usage: %s [OPTION] FILENAME WIN32PID\n\
-\n\
-Dump core from WIN32PID to FILENAME.core\n\
-\n\
- -d, --verbose be verbose while dumping\n\
- -h, --help output help information and exit\n\
- -q, --quiet be quiet while dumping (default)\n\
- -V, --version output version information and exit\n\
-\n", program_invocation_short_name);
- exit (status);
-}
-
-struct option longopts[] = {
- {"verbose", no_argument, NULL, 'd'},
- {"help", no_argument, NULL, 'h'},
- {"quiet", no_argument, NULL, 'q'},
- {"version", no_argument, 0, 'V'},
- {0, no_argument, NULL, 0}
-};
-const char *opts = "dhqV";
-
-static void
-print_version ()
-{
- printf ("dumper (cygwin) %d.%d.%d\n"
- "Core Dumper for Cygwin\n"
- "Copyright (C) 1999 - %s Red Hat, Inc.\n"
- "This is free software; see the source for copying conditions. There is NO\n"
- "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n",
- CYGWIN_VERSION_DLL_MAJOR / 1000,
- CYGWIN_VERSION_DLL_MAJOR % 1000,
- CYGWIN_VERSION_DLL_MINOR,
- strrchr (__DATE__, ' ') + 1);
-}
-
-int
-main (int argc, char **argv)
-{
- int opt;
- const char *p = "";
- DWORD pid;
-
- while ((opt = getopt_long (argc, argv, opts, longopts, NULL) ) != EOF)
- switch (opt)
- {
- case 'd':
- verbose = TRUE;
- break;
- case 'q':
- verbose = FALSE;
- break;
- case 'h':
- usage (stdout, 0);
- case 'V':
- print_version ();
- exit (0);
- default:
- fprintf (stderr, "Try `%s --help' for more information.\n",
- program_invocation_short_name);
- exit (1);
- }
-
- if (argv && *(argv + optind) && *(argv + optind +1))
- {
- ssize_t len = cygwin_conv_path (CCP_POSIX_TO_WIN_A | CCP_RELATIVE,
- *(argv + optind), NULL, 0);
- char *win32_name = (char *) alloca (len);
- cygwin_conv_path (CCP_POSIX_TO_WIN_A | CCP_RELATIVE, *(argv + optind),
- win32_name, len);
- if ((p = strrchr (win32_name, '\\')))
- p++;
- else
- p = win32_name;
- pid = strtoul (*(argv + optind + 1), NULL, 10);
- }
- else
- {
- usage (stderr, 1);
- return -1;
- }
-
- char *core_file = (char *) malloc (strlen (p) + sizeof (".core"));
- if (!core_file)
- {
- fprintf (stderr, "error allocating memory\n");
- return -1;
- }
- sprintf (core_file, "%s.core", p);
-
- DWORD tid = 0;
-
- if (verbose)
- printf ("dumping process #%u to %s\n", (unsigned int) pid, core_file);
-
- dumper d (pid, tid, core_file);
- if (!d.sane ())
- return -1;
- d.collect_process_information ();
- free (core_file);
-
- return 0;
-};
diff --git a/winsup/utils/dumper.h b/winsup/utils/dumper.h
deleted file mode 100644
index b6c70308c..000000000
--- a/winsup/utils/dumper.h
+++ /dev/null
@@ -1,142 +0,0 @@
-/* dumper.h
-
- Copyright 1999, 2001, 2013 Red Hat Inc.
-
- Written by Egor Duda <deo@logos-m.ru>
-
- This file is part of Cygwin.
-
- 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 (file COPYING.dumper) 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _DUMPER_H_
-#define _DUMPER_H_
-
-#include <windows.h>
-
-typedef struct
-{
- LPBYTE base;
- SIZE_T size;
-} process_mem_region;
-
-typedef struct
-{
- DWORD tid;
- HANDLE hThread;
- CONTEXT context;
-} process_thread;
-
-typedef struct
-{
- LPVOID base_address;
- char* name;
-} process_module;
-
-enum process_entity_type
-{
- pr_ent_memory,
- pr_ent_thread,
- pr_ent_module
-};
-
-typedef struct _process_entity
-{
- process_entity_type type;
- union
- {
- process_thread thread;
- process_mem_region memory;
- process_module module;
- } u;
- asection* section;
- struct _process_entity* next;
-} process_entity;
-
-class exclusion
-{
-public:
- size_t last;
- size_t size;
- size_t step;
- process_mem_region* region;
-
- exclusion ( size_t step ) { last = size = 0;
- this->step = step;
- region = NULL; }
- ~exclusion () { free ( region ); }
- int add ( LPBYTE mem_base, SIZE_T mem_size );
- int sort_and_check ();
-};
-
-#define PAGE_BUFFER_SIZE 4096
-
-class dumper
-{
- DWORD pid;
- DWORD tid; /* thread id of active thread */
- HANDLE hProcess;
- process_entity* list;
- process_entity* last;
- exclusion* excl_list;
-
- char* file_name;
- bfd* core_bfd;
-
- asection* status_section;
-
- int memory_num;
- int module_num;
- int thread_num;
-
- void close ();
- void dumper_abort ();
-
- process_entity* add_process_entity_to_list ( process_entity_type type );
- int add_thread ( DWORD tid, HANDLE hThread );
- int add_mem_region ( LPBYTE base, SIZE_T size );
-
- /* break mem_region by excl_list and add add all subregions */
- int split_add_mem_region ( LPBYTE base, SIZE_T size );
-
- int add_module ( LPVOID base_address );
-
- int collect_memory_sections ();
- int dump_memory_region ( asection* to, process_mem_region* memory );
- int dump_thread ( asection* to, process_thread* thread );
- int dump_module ( asection* to, process_module* module );
-
-public:
- int sane ();
-
- int collect_process_information ();
- void print_core_section_list ();
-
- dumper ( DWORD pid, DWORD tid, const char* name );
- ~dumper ();
-
- int init_core_dump ();
- int prepare_core_dump ();
- int write_core_dump ();
-};
-
-extern int deb_printf ( const char* format, ... );
-
-extern char* psapi_get_module_name ( HANDLE hProcess, LPVOID BaseAddress );
-
-extern int parse_pe ( const char* file_name, exclusion* excl_list );
-
-extern BOOL verbose;
-
-#endif
diff --git a/winsup/utils/getconf.c b/winsup/utils/getconf.c
deleted file mode 100644
index 7e0b5f595..000000000
--- a/winsup/utils/getconf.c
+++ /dev/null
@@ -1,605 +0,0 @@
-/*-
- * Copyright (c) 1996, 1998 The NetBSD Foundation, Inc.
- * Copyright (c) 2011 Red Hat, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by J.T. Conklin.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <error.h>
-#include <errno.h>
-#include <limits.h>
-#include <locale.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <getopt.h>
-#include <cygwin/version.h>
-
-struct conf_variable
-{
- const char *name;
- enum { SYSCONF, CONFSTR, PATHCONF, CONSTANT } type;
- long long value;
-};
-
-static const struct conf_variable conf_table[] =
-{
- /* Symbolic constants from confstr() */
- { "PATH", CONFSTR, _CS_PATH },
- { "POSIX_V7_ILP32_OFF32_CFLAGS", CONFSTR, _CS_POSIX_V7_ILP32_OFF32_CFLAGS },
- { "POSIX_V7_ILP32_OFF32_LDFLAGS", CONFSTR, _CS_POSIX_V7_ILP32_OFF32_LDFLAGS },
- { "POSIX_V7_ILP32_OFF32_LIBS", CONFSTR, _CS_POSIX_V7_ILP32_OFF32_LIBS },
- { "POSIX_V7_ILP32_OFFBIG_CFLAGS", CONFSTR, _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS },
- { "POSIX_V7_ILP32_OFFBIG_LDFLAGS", CONFSTR, _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS },
- { "POSIX_V7_ILP32_OFFBIG_LIBS", CONFSTR, _CS_POSIX_V7_ILP32_OFFBIG_LIBS },
- { "POSIX_V7_LP64_OFF64_CFLAGS", CONFSTR, _CS_POSIX_V7_LP64_OFF64_CFLAGS },
- { "POSIX_V7_LP64_OFF64_LDFLAGS", CONFSTR, _CS_POSIX_V7_LP64_OFF64_LDFLAGS },
- { "POSIX_V7_LP64_OFF64_LIBS", CONFSTR, _CS_POSIX_V7_LP64_OFF64_LIBS },
- { "POSIX_V7_LPBIG_OFFBIG_CFLAGS", CONFSTR, _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS },
- { "POSIX_V7_LPBIG_OFFBIG_LDFLAGS", CONFSTR, _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS },
- { "POSIX_V7_LPBIG_OFFBIG_LIBS", CONFSTR, _CS_POSIX_V7_LPBIG_OFFBIG_LIBS },
- { "POSIX_V7_THREADS_CFLAGS", CONFSTR, _CS_POSIX_V7_THREADS_CFLAGS },
- { "POSIX_V7_THREADS_LDFLAGS", CONFSTR, _CS_POSIX_V7_THREADS_LDFLAGS },
- { "POSIX_V7_WIDTH_RESTRICTED_ENVS", CONFSTR, _CS_POSIX_V7_WIDTH_RESTRICTED_ENVS },
- { "POSIX_V6_ILP32_OFF32_CFLAGS", CONFSTR, _CS_POSIX_V6_ILP32_OFF32_CFLAGS },
- { "POSIX_V6_ILP32_OFF32_LDFLAGS", CONFSTR, _CS_POSIX_V6_ILP32_OFF32_LDFLAGS },
- { "POSIX_V6_ILP32_OFF32_LIBS", CONFSTR, _CS_POSIX_V6_ILP32_OFF32_LIBS },
- { "POSIX_V6_ILP32_OFFBIG_CFLAGS", CONFSTR, _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS },
- { "POSIX_V6_ILP32_OFFBIG_LDFLAGS", CONFSTR, _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS },
- { "POSIX_V6_ILP32_OFFBIG_LIBS", CONFSTR, _CS_POSIX_V6_ILP32_OFFBIG_LIBS },
- { "POSIX_V6_LP64_OFF64_CFLAGS", CONFSTR, _CS_POSIX_V6_LP64_OFF64_CFLAGS },
- { "POSIX_V6_LP64_OFF64_LDFLAGS", CONFSTR, _CS_POSIX_V6_LP64_OFF64_LDFLAGS },
- { "POSIX_V6_LP64_OFF64_LIBS", CONFSTR, _CS_POSIX_V6_LP64_OFF64_LIBS },
- { "POSIX_V6_LPBIG_OFFBIG_CFLAGS", CONFSTR, _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS },
- { "POSIX_V6_LPBIG_OFFBIG_LDFLAGS", CONFSTR, _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS },
- { "POSIX_V6_LPBIG_OFFBIG_LIBS", CONFSTR, _CS_POSIX_V6_LPBIG_OFFBIG_LIBS },
- { "POSIX_V6_WIDTH_RESTRICTED_ENVS", CONFSTR, _CS_POSIX_V6_WIDTH_RESTRICTED_ENVS },
- { "XBS5_ILP32_OFF32_CFLAGS", CONFSTR, _CS_XBS5_ILP32_OFF32_CFLAGS },
- { "XBS5_ILP32_OFF32_LDFLAGS", CONFSTR, _CS_XBS5_ILP32_OFF32_LDFLAGS },
- { "XBS5_ILP32_OFF32_LIBS", CONFSTR, _CS_XBS5_ILP32_OFF32_LIBS },
- { "XBS5_ILP32_OFF32_LINTFLAGS", CONFSTR, _CS_XBS5_ILP32_OFF32_LINTFLAGS },
- { "XBS5_ILP32_OFFBIG_CFLAGS", CONFSTR, _CS_XBS5_ILP32_OFFBIG_CFLAGS },
- { "XBS5_ILP32_OFFBIG_LDFLAGS", CONFSTR, _CS_XBS5_ILP32_OFFBIG_LDFLAGS },
- { "XBS5_ILP32_OFFBIG_LIBS", CONFSTR, _CS_XBS5_ILP32_OFFBIG_LIBS },
- { "XBS5_ILP32_OFFBIG_LINTFLAGS", CONFSTR, _CS_XBS5_ILP32_OFFBIG_LINTFLAGS },
- { "XBS5_LP64_OFF64_CFLAGS", CONFSTR, _CS_XBS5_LP64_OFF64_CFLAGS },
- { "XBS5_LP64_OFF64_LDFLAGS", CONFSTR, _CS_XBS5_LP64_OFF64_LDFLAGS },
- { "XBS5_LP64_OFF64_LIBS", CONFSTR, _CS_XBS5_LP64_OFF64_LIBS },
- { "XBS5_LP64_OFF64_LINTFLAGS", CONFSTR, _CS_XBS5_LP64_OFF64_LINTFLAGS },
- { "XBS5_LPBIG_OFFBIG_CFLAGS", CONFSTR, _CS_XBS5_LPBIG_OFFBIG_CFLAGS },
- { "XBS5_LPBIG_OFFBIG_LDFLAGS", CONFSTR, _CS_XBS5_LPBIG_OFFBIG_LDFLAGS },
- { "XBS5_LPBIG_OFFBIG_LIBS", CONFSTR, _CS_XBS5_LPBIG_OFFBIG_LIBS },
- { "XBS5_LPBIG_OFFBIG_LINTFLAGS", CONFSTR, _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS },
- { "XBS5_WIDTH_RESTRICTED_ENVS", CONFSTR, _CS_XBS5_WIDTH_RESTRICTED_ENVS },
- { "V7_ENV", CONFSTR, _CS_V7_ENV },
- { "V6_ENV", CONFSTR, _CS_V6_ENV },
-
- /* Symbolic constants from <limits.h> */
- { "_POSIX_AIO_LISTIO_MAX", CONSTANT, _POSIX_AIO_LISTIO_MAX },
- { "_POSIX_AIO_MAX", CONSTANT, _POSIX_AIO_MAX },
- { "_POSIX_ARG_MAX", CONSTANT, _POSIX_ARG_MAX },
- { "_POSIX_CHILD_MAX", CONSTANT, _POSIX_CHILD_MAX },
- { "_POSIX_CLOCKRES_MIN", CONSTANT, _POSIX_CLOCKRES_MIN },
- { "_POSIX_DELAYTIMER_MAX", CONSTANT, _POSIX_DELAYTIMER_MAX },
- { "_POSIX_HOST_NAME_MAX", CONSTANT, _POSIX_HOST_NAME_MAX },
- { "_POSIX_LINK_MAX", CONSTANT, _POSIX_LINK_MAX },
- { "_POSIX_LOGIN_NAME_MAX", CONSTANT, _POSIX_LOGIN_NAME_MAX },
- { "_POSIX_MAX_CANON", CONSTANT, _POSIX_MAX_CANON },
- { "_POSIX_MAX_INPUT", CONSTANT, _POSIX_MAX_INPUT },
- { "_POSIX_MQ_OPEN_MAX", CONSTANT, _POSIX_MQ_OPEN_MAX },
- { "_POSIX_MQ_PRIO_MAX", CONSTANT, _POSIX_MQ_PRIO_MAX },
- { "_POSIX_NAME_MAX", CONSTANT, _POSIX_NAME_MAX },
- { "_POSIX_NGROUPS_MAX", CONSTANT, _POSIX_NGROUPS_MAX },
- { "_POSIX_OPEN_MAX", CONSTANT, _POSIX_OPEN_MAX },
- { "_POSIX_PATH_MAX", CONSTANT, _POSIX_PATH_MAX },
- { "_POSIX_PIPE_BUF", CONSTANT, _POSIX_PIPE_BUF },
- { "_POSIX_RE_DUP_MAX", CONSTANT, _POSIX_RE_DUP_MAX },
- { "_POSIX_RTSIG_MAX", CONSTANT, _POSIX_RTSIG_MAX },
- { "_POSIX_SEM_NSEMS_MAX", CONSTANT, _POSIX_SEM_NSEMS_MAX },
- { "_POSIX_SEM_VALUE_MAX", CONSTANT, _POSIX_SEM_VALUE_MAX },
- { "_POSIX_SIGQUEUE_MAX", CONSTANT, _POSIX_SIGQUEUE_MAX },
- { "_POSIX_SSIZE_MAX", CONSTANT, _POSIX_SSIZE_MAX },
- { "_POSIX_SS_REPL_MAX", CONSTANT, _POSIX_SS_REPL_MAX },
- { "_POSIX_STREAM_MAX", CONSTANT, _POSIX_STREAM_MAX },
- { "_POSIX_SYMLINK_MAX", CONSTANT, _POSIX_SYMLINK_MAX },
- { "_POSIX_SYMLOOP_MAX", CONSTANT, _POSIX_SYMLOOP_MAX },
- { "_POSIX_THREAD_DESTRUCTOR_ITERATIONS", CONSTANT, _POSIX_THREAD_DESTRUCTOR_ITERATIONS },
- { "_POSIX_THREAD_KEYS_MAX", CONSTANT, _POSIX_THREAD_KEYS_MAX },
- { "_POSIX_THREAD_THREADS_MAX", CONSTANT, _POSIX_THREAD_THREADS_MAX },
- { "_POSIX_TIMER_MAX", CONSTANT, _POSIX_TIMER_MAX },
- { "_POSIX_TRACE_EVENT_NAME_MAX", CONSTANT, _POSIX_TRACE_EVENT_NAME_MAX },
- { "_POSIX_TRACE_NAME_MAX", CONSTANT, _POSIX_TRACE_NAME_MAX },
- { "_POSIX_TRACE_SYS_MAX", CONSTANT, _POSIX_TRACE_SYS_MAX },
- { "_POSIX_TRACE_USER_EVENT_MAX", CONSTANT, _POSIX_TRACE_USER_EVENT_MAX },
- { "_POSIX_TTY_NAME_MAX", CONSTANT, _POSIX_TTY_NAME_MAX },
- { "_POSIX_TZNAME_MAX", CONSTANT, _POSIX_TZNAME_MAX },
- { "_POSIX2_BC_BASE_MAX", CONSTANT, _POSIX2_BC_BASE_MAX },
- { "_POSIX2_BC_DIM_MAX", CONSTANT, _POSIX2_BC_DIM_MAX },
- { "_POSIX2_BC_SCALE_MAX", CONSTANT, _POSIX2_BC_SCALE_MAX },
- { "_POSIX2_BC_STRING_MAX", CONSTANT, _POSIX2_BC_STRING_MAX },
- { "_POSIX2_COLL_WEIGHTS_MAX", CONSTANT, _POSIX2_COLL_WEIGHTS_MAX },
- { "_POSIX2_EXPR_NEXT_MAX", CONSTANT, _POSIX2_EXPR_NEST_MAX },
- { "_POSIX2_LINE_MAX", CONSTANT, _POSIX2_LINE_MAX },
- { "_POSIX2_RE_DUP_MAX", CONSTANT, _POSIX2_RE_DUP_MAX },
- { "_XOPEN_IOV_MAX", CONSTANT, _XOPEN_IOV_MAX },
- { "_XOPEN_NAME_MAX", CONSTANT, _XOPEN_NAME_MAX },
- { "_XOPEN_PATH_MAX", CONSTANT, _XOPEN_PATH_MAX },
- { "CHAR_BIT", CONSTANT, CHAR_BIT },
- { "CHAR_MAX", CONSTANT, CHAR_MAX },
- { "CHAR_MIN", CONSTANT, CHAR_MIN },
- { "INT_MAX", CONSTANT, INT_MAX },
- { "INT_MIN", CONSTANT, INT_MIN },
- { "LLONG_MIN", CONSTANT, LLONG_MIN },
- { "LLONG_MAX", CONSTANT, LLONG_MAX },
- { "LONG_BIT", CONSTANT, LONG_BIT },
- { "LONG_MAX", CONSTANT, LONG_MAX },
- { "LONG_MIN", CONSTANT, LONG_MIN },
- { "MB_LEN_MAX", CONSTANT, MB_LEN_MAX },
- { "SCHAR_MAX", CONSTANT, SCHAR_MAX },
- { "SCHAR_MIN", CONSTANT, SCHAR_MIN },
- { "SHRT_MAX", CONSTANT, SHRT_MAX },
- { "SHRT_MIN", CONSTANT, SHRT_MIN },
- { "SSIZE_MAX", CONSTANT, SSIZE_MAX },
- { "UCHAR_MAX", CONSTANT, UCHAR_MAX },
- { "UINT_MAX", CONSTANT, UINT_MAX },
- { "ULLONG_MAX", CONSTANT, ULLONG_MAX },
- { "ULONG_MAX", CONSTANT, ULONG_MAX },
- { "USHRT_MAX", CONSTANT, USHRT_MAX },
- { "WORD_BIT", CONSTANT, WORD_BIT },
- { "NL_ARGMAX", CONSTANT, NL_ARGMAX },
- { "ML_LANGMAX", CONSTANT, NL_LANGMAX },
- { "NL_MSGMAX", CONSTANT, NL_MSGMAX },
- { "NL_SETMAX", CONSTANT, NL_SETMAX },
- { "NL_TEXTMAX", CONSTANT, NL_TEXTMAX },
- { "NZERO", CONSTANT, NZERO },
- /* required by POSIX.1-2008 for compatibility with earlier versions */
- { "POSIX2_BC_BASE_MAX", CONSTANT, _POSIX2_BC_BASE_MAX },
- { "POSIX2_BC_DIM_MAX", CONSTANT, _POSIX2_BC_DIM_MAX },
- { "POSIX2_BC_SCALE_MAX", CONSTANT, _POSIX2_BC_SCALE_MAX },
- { "POSIX2_BC_STRING_MAX", CONSTANT, _POSIX2_BC_STRING_MAX },
- { "POSIX2_COLL_WEIGHTS_MAX", CONSTANT, _POSIX2_COLL_WEIGHTS_MAX },
- { "POSIX2_EXPR_NEXT_MAX", CONSTANT, _POSIX2_EXPR_NEST_MAX },
- { "POSIX2_LINE_MAX", CONSTANT, _POSIX2_LINE_MAX },
- { "POSIX2_RE_DUP_MAX", CONSTANT, _POSIX2_RE_DUP_MAX },
-
- /* Variables from fpathconf() */
- { "FILESIZEBITS", PATHCONF, _PC_FILESIZEBITS },
- { "LINK_MAX", PATHCONF, _PC_LINK_MAX },
- { "MAX_CANON", PATHCONF, _PC_MAX_CANON },
- { "MAX_INPUT", PATHCONF, _PC_MAX_INPUT },
- { "NAME_MAX", PATHCONF, _PC_NAME_MAX },
- { "PATH_MAX", PATHCONF, _PC_PATH_MAX },
- { "PIPE_BUF", PATHCONF, _PC_PIPE_BUF },
- { "POSIX2_SYMLINKS", PATHCONF, _PC_2_SYMLINKS },
- { "POSIX_ALLOC_SIZE_MIN", PATHCONF, _PC_ALLOC_SIZE_MIN },
- { "POSIX_REC_INCR_XFER_SIZE", PATHCONF, _PC_REC_INCR_XFER_SIZE },
- { "POSIX_REC_MAX_XFER_SIZE", PATHCONF, _PC_REC_MAX_XFER_SIZE },
- { "POSIX_REC_MIN_XFER_SIZE", PATHCONF, _PC_REC_MIN_XFER_SIZE },
- { "POSIX_REC_XFER_ALIGN", PATHCONF, _PC_REC_XFER_ALIGN },
- { "SYMLINK_MAX", PATHCONF, _PC_SYMLINK_MAX },
- { "_POSIX_CHOWN_RESTRICTED", PATHCONF, _PC_CHOWN_RESTRICTED },
- { "_POSIX_NO_TRUNC", PATHCONF, _PC_NO_TRUNC },
- { "_POSIX_VDISABLE", PATHCONF, _PC_VDISABLE },
- { "_POSIX_ASYNC_IO", PATHCONF, _PC_ASYNC_IO },
- { "_POSIX_PRIO_IO", PATHCONF, _PC_PRIO_IO },
- { "_POSIX_SYNC_IO", PATHCONF, _PC_SYNC_IO },
- { "_POSIX_TIMESTAMP_RESOLUTION", PATHCONF, _PC_TIMESTAMP_RESOLUTION },
-
- /* Variables from sysconf() */
- { "AIO_LISTIO_MAX", SYSCONF, _SC_AIO_LISTIO_MAX },
- { "AIO_MAX", SYSCONF, _SC_AIO_MAX },
- { "AIO_PRIO_DELTA_MAX", SYSCONF, _SC_AIO_PRIO_DELTA_MAX },
- { "ARG_MAX", SYSCONF, _SC_ARG_MAX },
- { "ATEXIT_MAX", SYSCONF, _SC_ATEXIT_MAX },
- { "BC_BASE_MAX", SYSCONF, _SC_BC_BASE_MAX },
- { "BC_DIM_MAX", SYSCONF, _SC_BC_DIM_MAX },
- { "BC_SCALE_MAX", SYSCONF, _SC_BC_SCALE_MAX },
- { "BC_STRING_MAX", SYSCONF, _SC_BC_STRING_MAX },
- { "CHILD_MAX", SYSCONF, _SC_CHILD_MAX },
- { "CLK_TCK", SYSCONF, _SC_CLK_TCK },
- { "COLL_WEIGHTS_MAX", SYSCONF, _SC_COLL_WEIGHTS_MAX },
- { "DELAYTIMER_MAX", SYSCONF, _SC_DELAYTIMER_MAX },
- { "EXPR_NEST_MAX", SYSCONF, _SC_EXPR_NEST_MAX },
- { "GETGR_R_SIZE_MAX", SYSCONF, _SC_GETGR_R_SIZE_MAX },
- { "GETPW_R_SIZE_MAX", SYSCONF, _SC_GETPW_R_SIZE_MAX },
- { "HOST_NAME_MAX", SYSCONF, _SC_HOST_NAME_MAX },
- { "IOV_MAX", SYSCONF, _SC_IOV_MAX },
- { "LINE_MAX", SYSCONF, _SC_LINE_MAX },
- { "LOGIN_NAME_MAX", SYSCONF, _SC_LOGIN_NAME_MAX },
- { "MQ_OPEN_MAX", SYSCONF, _SC_MQ_OPEN_MAX },
- { "MQ_PRIO_MAX", SYSCONF, _SC_MQ_PRIO_MAX },
- { "NGROUPS_MAX", SYSCONF, _SC_NGROUPS_MAX },
- { "OPEN_MAX", SYSCONF, _SC_OPEN_MAX },
- { "PAGE_SIZE", SYSCONF, _SC_PAGESIZE },
- { "PAGESIZE", SYSCONF, _SC_PAGESIZE },
- { "PTHREAD_DESTRUCTOR_ITERATIONS", SYSCONF, _SC_THREAD_DESTRUCTOR_ITERATIONS },
- { "PTHREAD_KEYS_MAX", SYSCONF, _SC_THREAD_KEYS_MAX },
- { "PTHREAD_STACK_MIN", SYSCONF, _SC_THREAD_STACK_MIN },
- { "PTHREAD_THREADS_MAX", SYSCONF, _SC_THREAD_THREADS_MAX },
- { "RE_DUP_MAX", SYSCONF, _SC_RE_DUP_MAX },
- { "RTSIG_MAX", SYSCONF, _SC_RTSIG_MAX },
- { "SEM_NSEMS_MAX", SYSCONF, _SC_SEM_NSEMS_MAX },
- { "SEM_VALUE_MAX", SYSCONF, _SC_SEM_VALUE_MAX },
- { "SIGQUEUE_MAX", SYSCONF, _SC_SIGQUEUE_MAX },
- { "STREAM_MAX", SYSCONF, _SC_STREAM_MAX },
- { "SYMLOOP_MAX", SYSCONF, _SC_SYMLOOP_MAX },
- { "TIMER_MAX", SYSCONF, _SC_TIMER_MAX },
- { "TTY_NAME_MAX", SYSCONF, _SC_TTY_NAME_MAX },
- { "TZNAME_MAX", SYSCONF, _SC_TZNAME_MAX },
- { "_POSIX_ADVISORY_INFO", SYSCONF, _SC_ADVISORY_INFO },
- { "_POSIX_ASYNCHRONOUS_IO", SYSCONF, _SC_ASYNCHRONOUS_IO },
- { "_POSIX_BARRIERS", SYSCONF, _SC_BARRIERS },
- { "_POSIX_CLOCK_SELECTION", SYSCONF, _SC_CLOCK_SELECTION },
- { "_POSIX_CPUTIME", SYSCONF, _SC_CPUTIME },
- { "_POSIX_FSYNC", SYSCONF, _SC_FSYNC },
- { "_POSIX_IPV6", SYSCONF, _SC_IPV6 },
- { "_POSIX_JOB_CONTROL", SYSCONF, _SC_JOB_CONTROL },
- { "_POSIX_MAPPED_FILES", SYSCONF, _SC_MAPPED_FILES },
- { "_POSIX_MEMLOCK", SYSCONF, _SC_MEMLOCK },
- { "_POSIX_MEMLOCK_RANGE", SYSCONF, _SC_MEMLOCK_RANGE },
- { "_POSIX_MEMORY_PROTECTION", SYSCONF, _SC_MEMORY_PROTECTION },
- { "_POSIX_MESSAGE_PASSING", SYSCONF, _SC_MESSAGE_PASSING },
- { "_POSIX_MONOTONIC_CLOCK", SYSCONF, _SC_MONOTONIC_CLOCK },
- { "_POSIX_PRIORITIZED_IO", SYSCONF, _SC_PRIORITIZED_IO },
- { "_POSIX_PRIORITY_SCHEDULING", SYSCONF, _SC_PRIORITY_SCHEDULING },
- { "_POSIX_RAW_SOCKETS", SYSCONF, _SC_RAW_SOCKETS },
- { "_POSIX_READER_WRITER_LOCKS", SYSCONF, _SC_READER_WRITER_LOCKS },
- { "_POSIX_REALTIME_SIGNALS", SYSCONF, _SC_REALTIME_SIGNALS },
- { "_POSIX_REGEXP", SYSCONF, _SC_REGEXP },
- { "_POSIX_SAVED_IDS", SYSCONF, _SC_SAVED_IDS },
- { "_POSIX_SEMAPHORES", SYSCONF, _SC_SEMAPHORES },
- { "_POSIX_SHARED_MEMORY_OBJECTS", SYSCONF, _SC_SHARED_MEMORY_OBJECTS },
- { "_POSIX_SHELL", SYSCONF, _SC_SHELL },
- { "_POSIX_SPAWN", SYSCONF, _SC_SPAWN },
- { "_POSIX_SPIN_LOCKS", SYSCONF, _SC_SPIN_LOCKS },
- { "_POSIX_SPORADIC_SERVER", SYSCONF, _SC_SPORADIC_SERVER },
- { "_POSIX_SS_REPL_MAX", SYSCONF, _SC_SS_REPL_MAX },
- { "_POSIX_SYNCHRONIZED_IO", SYSCONF, _SC_SYNCHRONIZED_IO },
- { "_POSIX_THREAD_ATTR_STACKADDR", SYSCONF, _SC_THREAD_ATTR_STACKADDR },
- { "_POSIX_THREAD_ATTR_STACKSIZE", SYSCONF, _SC_THREAD_ATTR_STACKSIZE },
- { "_POSIX_THREAD_CPUTIME", SYSCONF, _SC_THREAD_CPUTIME },
- { "_POSIX_THREAD_PRIO_INHERIT", SYSCONF, _SC_THREAD_PRIO_INHERIT },
- { "_POSIX_THREAD_PRIO_PROTECT", SYSCONF, _SC_THREAD_PRIO_PROTECT },
- { "_POSIX_THREAD_PRIORITY_SCHEDULING",SYSCONF, _SC_THREAD_PRIORITY_SCHEDULING },
- { "_POSIX_THREAD_PROCESS_SHARED", SYSCONF, _SC_THREAD_PROCESS_SHARED },
- { "_POSIX_THREAD_ROBUST_PRIO_INHERIT",SYSCONF, _SC_THREAD_ROBUST_PRIO_INHERIT },
- { "_POSIX_THREAD_ROBUST_PRIO_PROTECT",SYSCONF, _SC_THREAD_ROBUST_PRIO_PROTECT },
- { "_POSIX_THREAD_SAFE_FUNCTIONS", SYSCONF, _SC_THREAD_SAFE_FUNCTIONS },
- { "_POSIX_THREAD_SPORADIC_SERVER", SYSCONF, _SC_THREAD_SPORADIC_SERVER },
- { "_POSIX_THREADS", SYSCONF, _SC_THREADS },
- { "_POSIX_TIMEOUTS", SYSCONF, _SC_TIMEOUTS },
- { "_POSIX_TIMERS", SYSCONF, _SC_TIMERS },
- { "_POSIX_TRACE", SYSCONF, _SC_TRACE },
- { "_POSIX_TRACE_EVENT_FILTER", SYSCONF, _SC_TRACE_EVENT_FILTER },
- { "_POSIX_TRACE_EVENT_NAME_MAX", SYSCONF, _SC_TRACE_EVENT_NAME_MAX },
- { "_POSIX_TRACE_INHERIT", SYSCONF, _SC_TRACE_INHERIT },
- { "_POSIX_TRACE_LOG", SYSCONF, _SC_TRACE_LOG },
- { "_POSIX_TRACE_NAME_MAX", SYSCONF, _SC_TRACE_NAME_MAX },
- { "_POSIX_TRACE_SYS_MAX", SYSCONF, _SC_TRACE_SYS_MAX },
- { "_POSIX_TRACE_USER_EVENT_MAX", SYSCONF, _SC_TRACE_USER_EVENT_MAX },
- { "_POSIX_TYPED_MEMORY_OBJECTS", SYSCONF, _SC_TYPED_MEMORY_OBJECTS },
- { "_POSIX_VERSION", SYSCONF, _SC_VERSION },
- { "_POSIX_V7_ILP32_OFF32", SYSCONF, _SC_V7_ILP32_OFF32 },
- { "_POSIX_V7_ILP32_OFFBIG", SYSCONF, _SC_V7_ILP32_OFFBIG },
- { "_POSIX_V7_LP64_OFF64", SYSCONF, _SC_V7_LP64_OFF64 },
- { "_POSIX_V7_LPBIG_OFFBIG", SYSCONF, _SC_V7_LPBIG_OFFBIG },
- { "_POSIX_V6_ILP32_OFF32", SYSCONF, _SC_V6_ILP32_OFF32 },
- { "_POSIX_V6_ILP32_OFFBIG", SYSCONF, _SC_V6_ILP32_OFFBIG },
- { "_POSIX_V6_LP64_OFF64", SYSCONF, _SC_V6_LP64_OFF64 },
- { "_POSIX_V6_LPBIG_OFFBIG", SYSCONF, _SC_V6_LPBIG_OFFBIG },
- { "_POSIX2_C_BIND", SYSCONF, _SC_2_C_BIND },
- { "_POSIX2_C_DEV", SYSCONF, _SC_2_C_DEV },
- { "_POSIX2_CHAR_TERM", SYSCONF, _SC_2_CHAR_TERM },
- { "_POSIX2_FORT_DEV", SYSCONF, _SC_2_FORT_DEV },
- { "_POSIX2_FORT_RUN", SYSCONF, _SC_2_FORT_RUN },
- { "_POSIX2_LOCALEDEF", SYSCONF, _SC_2_LOCALEDEF },
- { "_POSIX2_PBS", SYSCONF, _SC_2_PBS },
- { "_POSIX2_PBS_ACCOUNTING", SYSCONF, _SC_2_PBS_ACCOUNTING },
- { "_POSIX2_PBS_CHECKPOINT", SYSCONF, _SC_2_PBS_CHECKPOINT },
- { "_POSIX2_PBS_LOCATE", SYSCONF, _SC_2_PBS_LOCATE },
- { "_POSIX2_PBS_MESSAGE", SYSCONF, _SC_2_PBS_MESSAGE },
- { "_POSIX2_PBS_TRACK", SYSCONF, _SC_2_PBS_TRACK },
- { "_POSIX2_SW_DEV", SYSCONF, _SC_2_SW_DEV },
- { "_POSIX2_UPE", SYSCONF, _SC_2_UPE },
- { "_POSIX2_VERSION", SYSCONF, _SC_2_VERSION },
- { "_XBS5_ILP32_OFF32", SYSCONF, _SC_XBS5_ILP32_OFF32 },
- { "_XBS5_ILP32_OFFBIG", SYSCONF, _SC_XBS5_ILP32_OFFBIG },
- { "_XBS5_LP64_OFF64", SYSCONF, _SC_XBS5_LP64_OFF64 },
- { "_XBS5_LPBIG_OFFBIG", SYSCONF, _SC_XBS5_LPBIG_OFFBIG },
- { "_XOPEN_CRYPT", SYSCONF, _SC_XOPEN_CRYPT },
- { "_XOPEN_ENH_I18N", SYSCONF, _SC_XOPEN_ENH_I18N },
- { "_XOPEN_LEGACY", SYSCONF, _SC_XOPEN_LEGACY },
- { "_XOPEN_REALTIME", SYSCONF, _SC_XOPEN_REALTIME },
- { "_XOPEN_REALTIME_THREADS", SYSCONF, _SC_XOPEN_REALTIME_THREADS },
- { "_XOPEN_SHM", SYSCONF, _SC_XOPEN_SHM },
- { "_XOPEN_STREAMS", SYSCONF, _SC_XOPEN_STREAMS },
- { "_XOPEN_UNIX", SYSCONF, _SC_XOPEN_UNIX },
- { "_XOPEN_UUCP", SYSCONF, _SC_XOPEN_UUCP },
- { "_XOPEN_VERSION", SYSCONF, _SC_XOPEN_VERSION },
- /* for compatibility with earlier versions */
- { "POSIX2_C_BIND", SYSCONF, _SC_2_C_BIND },
- { "POSIX2_C_DEV", SYSCONF, _SC_2_C_DEV },
- { "POSIX2_CHAR_TERM", SYSCONF, _SC_2_CHAR_TERM },
- { "POSIX2_FORT_DEV", SYSCONF, _SC_2_FORT_DEV },
- { "POSIX2_FORT_RUN", SYSCONF, _SC_2_FORT_RUN },
- { "POSIX2_LOCALEDEF", SYSCONF, _SC_2_LOCALEDEF },
- { "POSIX2_PBS", SYSCONF, _SC_2_PBS },
- { "POSIX2_PBS_ACCOUNTING", SYSCONF, _SC_2_PBS_ACCOUNTING },
- { "POSIX2_PBS_CHECKPOINT", SYSCONF, _SC_2_PBS_CHECKPOINT },
- { "POSIX2_PBS_LOCATE", SYSCONF, _SC_2_PBS_LOCATE },
- { "POSIX2_PBS_MESSAGE", SYSCONF, _SC_2_PBS_MESSAGE },
- { "POSIX2_PBS_TRACK", SYSCONF, _SC_2_PBS_TRACK },
- { "POSIX2_SW_DEV", SYSCONF, _SC_2_SW_DEV },
- { "POSIX2_UPE", SYSCONF, _SC_2_UPE },
- { "POSIX2_VERSION", SYSCONF, _SC_2_VERSION },
- /* implementation-specific values */
- { "_NPROCESSORS_CONF", SYSCONF, _SC_NPROCESSORS_CONF },
- { "_NPROCESSORS_ONLN", SYSCONF, _SC_NPROCESSORS_ONLN },
- { "_AVPHYS_PAGES", SYSCONF, _SC_AVPHYS_PAGES },
- { "_PHYS_PAGES", SYSCONF, _SC_PHYS_PAGES },
-
- { NULL, CONSTANT, 0L }
-};
-
-struct spec_variable {
- const char *name;
- int valid;
-};
-
-static const struct spec_variable spec_table[] = {
- { "POSIX_V7_ILP32_OFF32", 0 },
- { "POSIX_V7_ILP32_OFFBIG", 1 },
- { "POSIX_V7_LP64_OFF64", 0 },
- { "POSIX_V7_LPBIG_OFFBIG", 0 },
- { "POSIX_V6_ILP32_OFF32", 0 },
- { "POSIX_V6_ILP32_OFFBIG", 1 },
- { "POSIX_V6_LP64_OFF64", 0 },
- { "POSIX_V6_LPBIG_OFFBIG", 0 },
- { "XBS5_ILP32_OFF32", 0 },
- { "XBS5_ILP32_OFFBIG", 1 },
- { "XBS5_LP64_OFF64", 0 },
- { "XBS5_LPBIG_OFFBIG", 0 },
- { NULL, 0 },
-};
-
-static int a_flag = 0; /* list all variables */
-static int v_flag = 0; /* follow given specification */
-
-static void
-print_longvar (const char *name, long long value)
-{
- if (a_flag)
- printf ("%-35s %lld\n", name, value);
- else
- printf ("%lld\n", value);
-}
-
-static void
-print_strvar (const char *name, const char *sval)
-{
- if (a_flag)
- printf ("%-35s %s\n", name, sval);
- else
- printf ("%s\n", sval);
-}
-
-static void
-printvar (const struct conf_variable *cp, const char *pathname)
-{
- size_t slen;
- char *sval;
- long val;
-
- switch (cp->type)
- {
- case CONSTANT:
- print_longvar (cp->name, cp->value);
- break;
-
- case CONFSTR:
- errno = 0;
- slen = confstr ((int) cp->value, NULL, 0);
- if (slen == 0)
- {
- if (errno == 0)
- print_strvar (cp->name, "undefined");
- return;
- }
-
- if ((sval = malloc (slen)) == NULL)
- error (EXIT_FAILURE, 0, "Can't allocate %zu bytes", slen);
-
- errno = 0;
- if (confstr ((int) cp->value, sval, slen) == 0)
- print_strvar (cp->name, "undefined");
- else
- print_strvar (cp->name, sval);
-
- free (sval);
- break;
-
- case SYSCONF:
- errno = 0;
- if ((val = sysconf ((int) cp->value)) == -1)
- {
- if (a_flag && errno != 0)
- return; /* Just skip invalid variables */
- print_strvar (cp->name, "undefined");
- }
- else
- print_longvar (cp->name, val);
- break;
-
- case PATHCONF:
- errno = 0;
- if ((val = pathconf (pathname, (int) cp->value)) == -1)
- {
- if (a_flag && errno != 0)
- return; /* Just skip invalid variables */
- print_strvar (cp->name, "undefined");
- }
- else
- print_longvar (cp->name, val);
- break;
- }
-}
-
-static void
-usage (int ret)
-{
- fprintf (ret ? stderr : stdout,
-"Usage: %1$s [-v specification] variable_name [pathname]\n"
-" %1$s -a [pathname]\n"
-"\n"
-"Get configuration values\n"
-"\n"
-" -v specification Indicate specific version for which configuration\n"
-" values shall be fetched.\n"
-" -a, --all Print all known configuration values\n"
-"\n"
-"Other options:\n"
-"\n"
-" -h, --help This text\n"
-" -V, --version Print program version and exit\n"
-"\n", program_invocation_short_name);
- exit (ret);
-}
-
-static void
-print_version ()
-{
- printf ("getconf (cygwin) %d.%d.%d\n"
- "Get configuration values\n"
- "Copyright (C) 2011 - %s Red Hat, Inc.\n"
- "This is free software; see the source for copying conditions. There is NO\n"
- "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n",
- CYGWIN_VERSION_DLL_MAJOR / 1000,
- CYGWIN_VERSION_DLL_MAJOR % 1000,
- CYGWIN_VERSION_DLL_MINOR,
- strrchr (__DATE__, ' ') + 1);
-}
-
-struct option longopts[] = {
- {"all", no_argument, NULL, 'a'},
- {"help", no_argument, NULL, 'h'},
- {"version", no_argument, NULL, 'V'},
- {0, no_argument, NULL, 0}
-};
-const char *opts = "ahvV";
-
-int
-main (int argc, char **argv)
-{
- int ch;
- const struct conf_variable *cp;
- const struct spec_variable *sp;
- const char *varname, *pathname;
- int found;
-
- setlocale (LC_ALL, "");
-
- while ((ch = getopt_long (argc, argv, opts, longopts, NULL)) != -1)
- {
- switch (ch)
- {
- case 'a':
- a_flag = 1;
- break;
- case 'v':
- v_flag = 1;
- break;
- case 'h':
- usage (0);
- case 'V':
- print_version ();
- return 0;
- default:
- fprintf (stderr, "Try `%s --help' for more information.\n",
- program_invocation_short_name);
- return 1;
- }
- }
- argc -= optind;
- argv += optind;
-
- if (v_flag)
- {
- if (a_flag || argc < 2)
- usage (1);
- for (sp = spec_table; sp->name != NULL; sp++)
- {
- if (strcmp (argv[0], sp->name) == 0)
- {
- if (sp->valid != 1)
- error (EXIT_FAILURE, 0, "unsupported specification \"%s\"", argv[0]);
- break;
- }
- }
- if (sp->name == NULL)
- error (EXIT_FAILURE, 0, "unknown specification \"%s\"", argv[0]);
- argc--;
- argv++;
- }
-
- if (!a_flag)
- {
- if (argc == 0)
- usage (1);
- varname = argv[0];
- argc--;
- argv++;
- }
- else
- varname = NULL;
-
- if (argc > 1)
- usage (1);
- pathname = argv[0]; /* may be NULL */
-
- found = 0;
- for (cp = conf_table; cp->name != NULL; cp++)
- {
- if (a_flag || strcmp (varname, cp->name) == 0)
- {
- /* LINTED weird expression */
- if ((cp->type == PATHCONF) == (pathname != NULL))
- {
- printvar (cp, pathname);
- found = 1;
- }
- else if (!a_flag)
- usage (1);
- }
- }
-
- if (!a_flag && !found)
- error (EXIT_FAILURE, 0, "Unrecognized variable `%s'", varname);
-
- fflush (stdout);
- return ferror (stdout) ? EXIT_FAILURE : EXIT_SUCCESS;
-}
-
diff --git a/winsup/utils/getfacl.c b/winsup/utils/getfacl.c
deleted file mode 100644
index ed1adfce7..000000000
--- a/winsup/utils/getfacl.c
+++ /dev/null
@@ -1,247 +0,0 @@
-/* getfacl.c
-
- Copyright 2000, 2001, 2002, 2003, 2004, 2009, 2011, 2014 Red Hat Inc.
-
- Written by Corinna Vinschen <vinschen@redhat.com>
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include <pwd.h>
-#include <grp.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <getopt.h>
-#include <sys/types.h>
-#include <sys/acl.h>
-#include <sys/stat.h>
-#include <cygwin/version.h>
-#include <string.h>
-#include <errno.h>
-
-static char *prog_name;
-
-char *
-permstr (mode_t perm)
-{
- static char pbuf[4];
-
- pbuf[0] = (perm & S_IROTH) ? 'r' : '-';
- pbuf[1] = (perm & S_IWOTH) ? 'w' : '-';
- pbuf[2] = (perm & S_IXOTH) ? 'x' : '-';
- pbuf[3] = '\0';
- return pbuf;
-}
-
-const char *
-username (uid_t uid)
-{
- static char ubuf[256];
- struct passwd *pw;
-
- if ((pw = getpwuid (uid)))
- strcpy (ubuf, pw->pw_name);
- else
- sprintf (ubuf, "%lu <unknown>", (unsigned long)uid);
- return ubuf;
-}
-
-const char *
-groupname (gid_t gid)
-{
- static char gbuf[256];
- struct group *gr;
-
- if ((gr = getgrgid (gid)))
- strcpy (gbuf, gr->gr_name);
- else
- sprintf (gbuf, "%lu <unknown>", (unsigned long)gid);
- return gbuf;
-}
-
-static void
-usage (FILE * stream)
-{
- fprintf (stream, "Usage: %s [-adn] FILE [FILE2...]\n"
- "\n"
- "Display file and directory access control lists (ACLs).\n"
- "\n"
- " -a, --all display the filename, the owner, the group, and\n"
- " the ACL of the file\n"
- " -d, --dir display the filename, the owner, the group, and\n"
- " the default ACL of the directory, if it exists\n"
- " -h, --help output usage information and exit\n"
- " -n, --noname display user and group IDs instead of names\n"
- " -V, --version output version information and exit\n"
- "\n"
- "When multiple files are specified on the command line, a blank\n"
- "line separates the ACLs for each file.\n", prog_name);
- if (stream == stdout)
- {
- fprintf (stream, ""
- "For each argument that is a regular file, special file or\n"
- "directory, getfacl displays the owner, the group, and the ACL.\n"
- "For directories getfacl displays additionally the default ACL.\n"
- "\n"
- "With no options specified, getfacl displays the filename, the\n"
- "owner, the group, the setuid (s), setgid (s), and sticky (t)\n"
- "bits if available, and both the ACL and the default ACL, if it\n"
- "exists.\n"
- "\n"
- "The format for ACL output is as follows:\n"
- " # file: filename\n"
- " # owner: name or uid\n"
- " # group: name or uid\n"
- " # flags: sst\n"
- " user::perm\n"
- " user:name or uid:perm\n"
- " group::perm\n"
- " group:name or gid:perm\n"
- " mask:perm\n"
- " other:perm\n"
- " default:user::perm\n"
- " default:user:name or uid:perm\n"
- " default:group::perm\n"
- " default:group:name or gid:perm\n"
- " default:mask:perm\n"
- " default:other:perm\n"
- "\n");
- }
-}
-
-struct option longopts[] = {
- {"all", no_argument, NULL, 'a'},
- {"dir", no_argument, NULL, 'd'},
- {"help", no_argument, NULL, 'h'},
- {"noname", no_argument, NULL, 'n'},
- {"version", no_argument, NULL, 'V'},
- {0, no_argument, NULL, 0}
-};
-const char *opts = "adhnV";
-
-static void
-print_version ()
-{
- printf ("getfacl (cygwin) %d.%d.%d\n"
- "Get POSIX ACL information\n"
- "Copyright (C) 2000 - %s Red Hat, Inc.\n"
- "This is free software; see the source for copying conditions. There is NO\n"
- "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n",
- CYGWIN_VERSION_DLL_MAJOR / 1000,
- CYGWIN_VERSION_DLL_MAJOR % 1000,
- CYGWIN_VERSION_DLL_MINOR,
- strrchr (__DATE__, ' ') + 1);
-}
-
-int
-main (int argc, char **argv)
-{
- int c;
- int ret = 0;
- int aopt = 0;
- int dopt = 0;
- int nopt = 0;
- struct stat st;
- aclent_t acls[MAX_ACL_ENTRIES];
-
- prog_name = program_invocation_short_name;
-
- while ((c = getopt_long (argc, argv, opts, longopts, NULL)) != EOF)
- switch (c)
- {
- case 'a':
- aopt = 1;
- break;
- case 'd':
- dopt = 1;
- break;
- case 'h':
- usage (stdout);
- return 0;
- case 'n':
- nopt = 1;
- break;
- case 'V':
- print_version ();
- return 0;
- default:
- fprintf (stderr, "Try `%s --help' for more information.\n", prog_name);
- return 1;
- }
- if (optind > argc - 1)
- {
- usage (stderr);
- return 1;
- }
- for (; optind < argc; ++optind)
- {
- int i, num_acls;
- if (stat (argv[optind], &st)
- || (num_acls = acl (argv[optind], GETACL, MAX_ACL_ENTRIES, acls)) < 0)
- {
- fprintf (stderr, "%s: %s: %s\n",
- prog_name, argv[optind], strerror (errno));
- ret = 2;
- continue;
- }
- printf ("# file: %s\n", argv[optind]);
- if (nopt)
- {
- printf ("# owner: %lu\n", (unsigned long)st.st_uid);
- printf ("# group: %lu\n", (unsigned long)st.st_gid);
- }
- else
- {
- printf ("# owner: %s\n", username (st.st_uid));
- printf ("# group: %s\n", groupname (st.st_gid));
- }
- if (st.st_mode & (S_ISUID | S_ISGID | S_ISVTX))
- printf ("# flags: %c%c%c\n", (st.st_mode & S_ISUID) ? 's' : '-',
- (st.st_mode & S_ISGID) ? 's' : '-',
- (st.st_mode & S_ISVTX) ? 't' : '-');
- for (i = 0; i < num_acls; ++i)
- {
- if (acls[i].a_type & ACL_DEFAULT)
- {
- if (aopt)
- continue;
- printf ("default:");
- }
- else if (dopt)
- continue;
- switch (acls[i].a_type & ~ACL_DEFAULT)
- {
- case USER_OBJ:
- printf ("user::");
- break;
- case USER:
- if (nopt)
- printf ("user:%lu:", (unsigned long)acls[i].a_id);
- else
- printf ("user:%s:", username (acls[i].a_id));
- break;
- case GROUP_OBJ:
- printf ("group::");
- break;
- case GROUP:
- if (nopt)
- printf ("group:%lu:", (unsigned long)acls[i].a_id);
- else
- printf ("group:%s:", groupname (acls[i].a_id));
- break;
- case CLASS_OBJ:
- printf ("mask:");
- break;
- case OTHER_OBJ:
- printf ("other:");
- break;
- }
- printf ("%s\n", permstr (acls[i].a_perm));
- }
- putchar ('\n');
- }
- return ret;
-}
diff --git a/winsup/utils/kill.cc b/winsup/utils/kill.cc
deleted file mode 100644
index edabff321..000000000
--- a/winsup/utils/kill.cc
+++ /dev/null
@@ -1,288 +0,0 @@
-/* kill.cc
-
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007,
- 2009, 2011 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <signal.h>
-#include <string.h>
-#include <time.h>
-#include <errno.h>
-#include <windows.h>
-#include <sys/cygwin.h>
-#include <cygwin/version.h>
-#include <getopt.h>
-#include <limits.h>
-
-static char *prog_name;
-
-static struct option longopts[] =
-{
- {"help", no_argument, NULL, 'h' },
- {"list", optional_argument, NULL, 'l'},
- {"force", no_argument, NULL, 'f'},
- {"signal", required_argument, NULL, 's'},
- {"version", no_argument, NULL, 'V'},
- {NULL, 0, NULL, 0}
-};
-
-static char opts[] = "hl::fs:V";
-
-static void
-usage (FILE *where = stderr)
-{
- fprintf (where , ""
- "Usage: %1$s [-f] [-signal] [-s signal] pid1 [pid2 ...]\n"
- " %1$s -l [signal]\n"
- "\n"
- "Send signals to processes\n"
- "\n"
- " -f, --force force, using win32 interface if necessary\n"
- " -l, --list print a list of signal names\n"
- " -s, --signal send signal (use %1$s --list for a list)\n"
- " -h, --help output usage information and exit\n"
- " -V, --version output version information and exit\n"
- "\n", prog_name);
- exit (where == stderr ? 1 : 0);
-}
-
-static void
-print_version ()
-{
- printf ("kill (cygwin) %d.%d.%d\n"
- "Process Signaller\n"
- "Copyright (C) 1996 - %s Red Hat, Inc.\n"
- "This is free software; see the source for copying conditions. There is NO\n"
- "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n",
- CYGWIN_VERSION_DLL_MAJOR / 1000,
- CYGWIN_VERSION_DLL_MAJOR % 1000,
- CYGWIN_VERSION_DLL_MINOR,
- strrchr (__DATE__, ' ') + 1);
-}
-
-static const char *
-strsigno (int signo)
-{
- if (signo >= 0 && signo < NSIG)
- return sys_sigabbrev[signo];
- static char buf[sizeof ("Unknown signal") + 32];
- sprintf (buf, "Unknown signal %d", signo);
- return buf;
-}
-
-static int
-getsig (const char *in_sig)
-{
- const char *sig;
- char buf[80];
- int intsig;
-
- if (strncmp (in_sig, "SIG", 3) == 0)
- sig = in_sig;
- else
- {
- sprintf (buf, "SIG%-.20s", in_sig);
- sig = buf;
- }
- intsig = strtosigno (sig) ?: atoi (in_sig);
- char *p;
- if (!intsig && (strcmp (buf, "SIG0") != 0 && (strtol (in_sig, &p, 10) != 0 || *p)))
- intsig = -1;
- return intsig;
-}
-
-static void
-test_for_unknown_sig (int sig, const char *sigstr)
-{
- if (sig < 0 || sig > NSIG)
- {
- fprintf (stderr, "%1$s: unknown signal: %2$s\n"
- "Try `%1$s --help' for more information.\n",
- prog_name, sigstr);
- exit (1);
- }
-}
-
-static void
-listsig (const char *in_sig)
-{
- int sig;
- if (!in_sig)
- for (sig = 1; sig < NSIG - 1; sig++)
- printf ("%s%c", strsigno (sig) + 3, (sig < NSIG - 1) ? ' ' : '\n');
- else
- {
- sig = getsig (in_sig);
- test_for_unknown_sig (sig, in_sig);
- if (atoi (in_sig) == sig)
- puts (strsigno (sig) + 3);
- else
- printf ("%d\n", sig);
- }
-}
-
-static void
-get_debug_priv (void)
-{
- HANDLE tok;
- LUID luid;
- TOKEN_PRIVILEGES tkp;
-
- if (!OpenProcessToken (GetCurrentProcess (),
- TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &tok))
- return;
-
- if (!LookupPrivilegeValue (NULL, SE_DEBUG_NAME, &luid))
- {
- CloseHandle (tok);
- return;
- }
-
- tkp.PrivilegeCount = 1;
- tkp.Privileges[0].Luid = luid;
- tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
-
- AdjustTokenPrivileges (tok, FALSE, &tkp, sizeof tkp, NULL, NULL);
-
- CloseHandle (tok);
-}
-
-static void __stdcall
-forcekill (int pid, int sig, int wait)
-{
- // try to acquire SeDebugPrivilege
- get_debug_priv();
-
- external_pinfo *p = NULL;
- /* cygwin_internal misinterprets negative pids (Win9x pids) */
- if (pid > 0)
- p = (external_pinfo *) cygwin_internal (CW_GETPINFO_FULL, pid);
- DWORD dwpid = p ? p->dwProcessId : (DWORD) pid;
- HANDLE h = OpenProcess (PROCESS_TERMINATE, FALSE, (DWORD) dwpid);
- if (!h)
- {
- if (!wait || GetLastError () != ERROR_INVALID_PARAMETER)
- fprintf (stderr, "%s: couldn't open pid %u\n",
- prog_name, (unsigned) dwpid);
- return;
- }
- if (!wait || WaitForSingleObject (h, 200) != WAIT_OBJECT_0)
- if (sig && !TerminateProcess (h, sig << 8)
- && WaitForSingleObject (h, 200) != WAIT_OBJECT_0)
- fprintf (stderr, "%s: couldn't kill pid %u, %u\n",
- prog_name, (unsigned) dwpid, (unsigned int) GetLastError ());
- CloseHandle (h);
-}
-
-int
-main (int argc, char **argv)
-{
- int sig = SIGTERM;
- int force = 0;
- int ret = 0;
- char *gotasig = NULL;
-
- prog_name = program_invocation_short_name;
-
- if (argc == 1)
- usage ();
-
- opterr = 0;
-
- char *p;
- long long int pid = 0;
-
- for (;;)
- {
- int ch;
- char **av = argv + optind;
- if ((ch = getopt_long (argc, argv, opts, longopts, NULL)) == EOF)
- break;
- switch (ch)
- {
- case 's':
- gotasig = optarg;
- sig = getsig (gotasig);
- break;
- case 'l':
- if (!optarg)
- {
- optarg = argv[optind];
- if (optarg)
- {
- optind++;
- optreset = 1;
- }
- }
- if (argv[optind])
- usage ();
- listsig (optarg);
- break;
- case 'f':
- force = 1;
- break;
- case 'h':
- usage (stdout);
- break;
- case 'V':
- print_version ();
- break;
- case '?':
- if (gotasig)
- {
- --optind;
- goto out;
- }
- optreset = 1;
- optind = 1 + av - argv;
- gotasig = *av + 1;
- sig = getsig (gotasig);
- break;
- default:
- usage ();
- break;
- }
- }
-
-out:
- test_for_unknown_sig (sig, gotasig);
-
- argv += optind;
- while (*argv != NULL)
- {
- if (!pid)
- pid = strtoll (*argv, &p, 10);
- if (*p != '\0'
- || (!force && (pid < INT_MIN || pid > INT_MAX))
- || (force && (pid <= 0 || pid > UINT_MAX)))
- {
- fprintf (stderr, "%s: illegal pid: %s\n", prog_name, *argv);
- ret = 1;
- }
- else if (pid <= INT_MAX && kill ((pid_t) pid, sig) == 0)
- {
- if (force)
- forcekill ((pid_t) pid, sig, 1);
- }
- else if (force)
- forcekill ((pid_t) pid, sig, 0);
- else
- {
- char buf[1000];
- sprintf (buf, "%s: %lld", prog_name, pid);
- perror (buf);
- ret = 1;
- }
- argv++;
- pid = 0;
- }
- return ret;
-}
-
diff --git a/winsup/utils/ldd.cc b/winsup/utils/ldd.cc
deleted file mode 100644
index de98658bc..000000000
--- a/winsup/utils/ldd.cc
+++ /dev/null
@@ -1,672 +0,0 @@
-/* Copyright (c) 2009, 2010, 2011, 2013 Chris Faylor
-
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Neither the name of the owner nor the names of its
- contributors may be used to endorse or promote products derived from
- this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS
- IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
- TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include <errno.h>
-#include <getopt.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <wchar.h>
-#include <locale.h>
-#include <sys/cygwin.h>
-#include <cygwin/version.h>
-#include <unistd.h>
-#include <libgen.h>
-
-#define _WIN32_WINNT 0x0501
-#include <windows.h>
-#include <imagehlp.h>
-#include <psapi.h>
-
-#ifndef STATUS_DLL_NOT_FOUND
-#define STATUS_DLL_NOT_FOUND (0xC0000135L)
-#endif
-
-struct option longopts[] =
-{
- {"help", no_argument, NULL, 'h'},
- {"verbose", no_argument, NULL, 'v'},
- {"version", no_argument, NULL, 'V'},
- {"data-relocs", no_argument, NULL, 'd'},
- {"function-relocs", no_argument, NULL, 'r'},
- {"unused", no_argument, NULL, 'u'},
- {0, no_argument, NULL, 0}
-};
-const char *opts = "dhruvV";
-
-static int process_file (const wchar_t *);
-
-static int
-error (const char *fmt, ...)
-{
- va_list ap;
- va_start (ap, fmt);
- fprintf (stderr, "ldd: ");
- vfprintf (stderr, fmt, ap);
- fprintf (stderr, "\nTry `ldd --help' for more information.\n");
- exit (1);
-}
-
-static void
-usage ()
-{
- printf ("Usage: %s [OPTION]... FILE...\n\
-\n\
-Print shared library dependencies\n\
-\n\
- -h, --help print this help and exit\n\
- -V, --version print version information and exit\n\
- -r, --function-relocs process data and function relocations\n\
- (currently unimplemented)\n\
- -u, --unused print unused direct dependencies\n\
- (currently unimplemented)\n\
- -v, --verbose print all information\n\
- (currently unimplemented)\n",
- program_invocation_short_name);
-}
-
-static void
-print_version ()
-{
- printf ("ldd (cygwin) %d.%d.%d\n"
- "Print shared library dependencies\n"
- "Copyright (C) 2009 - %s Chris Faylor\n"
- "This is free software; see the source for copying conditions. There is NO\n"
- "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n",
- CYGWIN_VERSION_DLL_MAJOR / 1000,
- CYGWIN_VERSION_DLL_MAJOR % 1000,
- CYGWIN_VERSION_DLL_MINOR,
- strrchr (__DATE__, ' ') + 1);
-}
-
-#define print_errno_error_and_return(__fn) \
- do {\
- fprintf (stderr, "ldd: %s: %s\n", (__fn), strerror (errno));\
- return 1;\
- } while (0)
-
-#define set_errno_and_return(x) \
- do {\
- cygwin_internal (CW_SETERRNO, __FILE__, __LINE__ - 2);\
- return (x);\
- } while (0)
-
-
-static HANDLE hProcess;
-
-static struct filelist
-{
- struct filelist *next;
- char *name;
-} *head;
-
-static bool
-saw_file (char *name)
-{
- filelist *p;
-
- for (p = head; p; p = p->next)
- if (strcasecmp (name, p->name) == 0)
- return true;
-
- p = (filelist *) malloc(sizeof (struct filelist));
- p->next = head;
- p->name = strdup (name);
- head = p;
- return false;
-}
-
-static wchar_t *
-get_module_filename (HANDLE hp, HMODULE hm)
-{
- size_t len;
- wchar_t *buf = NULL;
- DWORD res;
- for (len = 1024; (res = GetModuleFileNameExW (hp, hm, (buf = (wchar_t *) realloc (buf, len * sizeof (wchar_t))), len)) == len; len += 1024)
- continue;
- if (!res)
- {
- free (buf);
- buf = NULL;
- }
- return buf;
-}
-
-static wchar_t *
-load_dll (const wchar_t *fn)
-{
- wchar_t *buf = get_module_filename (GetCurrentProcess (), NULL);
- if (!buf)
- {
- printf ("ldd: GetModuleFileName returned an error %u\n",
- (unsigned int) GetLastError ());
- exit (1); /* FIXME */
- }
-
- wchar_t *newbuf = (wchar_t *) malloc ((sizeof (L"\"\" -- ") + wcslen (buf) + wcslen (fn)) * sizeof (wchar_t));
- newbuf[0] = L'"';
- wcscpy (newbuf + 1, buf);
- wchar_t *p = wcsstr (newbuf, L"\\ldd");
- if (!p)
- {
- printf ("ldd: can't parse my own filename \"%ls\"\n", buf);
- exit (1);
- }
- p[3] = L'h';
- wcscat (newbuf, L"\" -- ");
- wcscat (newbuf, fn);
- free (buf);
- return newbuf;
-}
-
-static int
-start_process (const wchar_t *fn, bool& isdll)
-{
- STARTUPINFOW si = {};
- PROCESS_INFORMATION pi;
- si.cb = sizeof (si);
- wchar_t *cmd;
- /* OCaml natdynlink plugins (.cmxs) cannot be handled by ldd because they
- can only be loaded by flexdll_dlopen() */
- if (wcslen (fn) < 4 || (wcscasecmp (wcschr (fn, L'\0') - 4, L".dll") != 0
- && wcscasecmp (wcschr (fn, L'\0') - 4, L".oct") != 0
- && wcscasecmp (wcschr (fn, L'\0') - 3, L".so") != 0))
- {
- cmd = wcsdup (fn);
- isdll = false;
- }
- else
- {
- cmd = load_dll (fn);
- isdll = true;
- }
- if (CreateProcessW (NULL, cmd, NULL, NULL, FALSE, DEBUG_ONLY_THIS_PROCESS, NULL, NULL, &si, &pi))
- {
- free (cmd);
- hProcess = pi.hProcess;
- DebugSetProcessKillOnExit (true);
- return 0;
- }
-
- free (cmd);
- set_errno_and_return (1);
-}
-
-static int
-set_entry_point_break ()
-{
- HMODULE hm;
- DWORD cbe;
- SIZE_T cbw;
- if (!EnumProcessModules (hProcess, &hm, sizeof (hm), &cbe) || !cbe)
- set_errno_and_return (1);
-
- MODULEINFO mi = {};
- if (!GetModuleInformation (hProcess, hm, &mi, sizeof (mi)) || !mi.EntryPoint)
- set_errno_and_return (1);
-
- static const unsigned char int3 = 0xcc;
- if (!WriteProcessMemory (hProcess, mi.EntryPoint, &int3, 1, &cbw) || cbw != 1)
- set_errno_and_return (1);
- return 0;
-}
-
-struct dlls
- {
- LPVOID lpBaseOfDll;
- struct dlls *next;
- };
-
-#define SLOP strlen (" (?)")
-char *
-tocyg (wchar_t *win_fn)
-{
- ssize_t cwlen = cygwin_conv_path (CCP_WIN_W_TO_POSIX, win_fn, NULL, 0);
- char *fn;
- if (cwlen <= 0)
- {
- int len = wcstombs (NULL, win_fn, 0) + 1;
- if ((fn = (char *) malloc (len)))
- wcstombs (fn, win_fn, len);
- }
- else
- {
- char *fn_cyg = (char *) malloc (cwlen + SLOP + 1);
- if (cygwin_conv_path (CCP_WIN_W_TO_POSIX, win_fn, fn_cyg, cwlen) == 0)
- fn = fn_cyg;
- else
- {
- free (fn_cyg);
- int len = wcstombs (NULL, win_fn, 0);
- fn = (char *) malloc (len + SLOP + 1);
- wcstombs (fn, win_fn, len + SLOP + 1);
- }
- }
- return fn;
-}
-
-#define CYGWIN_DLL_LEN (wcslen (L"\\cygwin1.dll"))
-static int
-print_dlls (dlls *dll, const wchar_t *dllfn, const wchar_t *process_fn)
-{
- head = NULL; /* FIXME: memory leak */
- while ((dll = dll->next))
- {
- char *fn;
- wchar_t *fullpath = get_module_filename (hProcess, (HMODULE) dll->lpBaseOfDll);
- if (!fullpath)
- fn = strdup ("???");
- else if (dllfn && wcscmp (fullpath, dllfn) == 0)
- {
- free (fullpath);
- continue;
- }
- else
- {
- fn = tocyg (fullpath);
- saw_file (basename (fn));
- free (fullpath);
- }
- printf ("\t%s => %s (%p)\n", basename (fn), fn, dll->lpBaseOfDll);
- free (fn);
- }
- if (process_fn)
- return process_file (process_fn);
- return 0;
-}
-
-static int
-report (const char *in_fn, bool multiple)
-{
- if (multiple)
- printf ("%s:\n", in_fn);
- char *fn = realpath (in_fn, NULL);
- if (!fn)
- print_errno_error_and_return (in_fn);
-
- ssize_t len = cygwin_conv_path (CCP_POSIX_TO_WIN_W, fn, NULL, 0);
- if (len <= 0)
- print_errno_error_and_return (fn);
-
- bool isdll;
- wchar_t fn_win[len + 1];
- if (cygwin_conv_path (CCP_POSIX_TO_WIN_W, fn, fn_win, len))
- print_errno_error_and_return (fn);
-
- if (!fn || start_process (fn_win, isdll))
- print_errno_error_and_return (in_fn);
-
- DEBUG_EVENT ev;
-
- unsigned dll_count = 0;
-
- dlls dll_list = {};
- dlls *dll_last = &dll_list;
- const wchar_t *process_fn = NULL;
- while (1)
- {
- bool exitnow = false;
- DWORD cont = DBG_CONTINUE;
- if (!WaitForDebugEvent (&ev, INFINITE))
- break;
- switch (ev.dwDebugEventCode)
- {
- case LOAD_DLL_DEBUG_EVENT:
- if (!isdll && ++dll_count == 2)
- set_entry_point_break ();
- dll_last->next = (dlls *) malloc (sizeof (dlls));
- dll_last->next->lpBaseOfDll = ev.u.LoadDll.lpBaseOfDll;
- dll_last->next->next = NULL;
- dll_last = dll_last->next;
- break;
- case EXCEPTION_DEBUG_EVENT:
- switch (ev.u.Exception.ExceptionRecord.ExceptionCode)
- {
- case STATUS_DLL_NOT_FOUND:
- process_fn = fn_win;
- break;
- case STATUS_BREAKPOINT:
- if (!isdll)
- cont = DBG_EXCEPTION_NOT_HANDLED;
- break;
- }
- break;
- case CREATE_THREAD_DEBUG_EVENT:
- TerminateProcess (hProcess, 0);
- break;
- case EXIT_PROCESS_DEBUG_EVENT:
- print_dlls (&dll_list, isdll ? fn_win : NULL, process_fn);
- exitnow = true;
- break;
- default:
- break;
- }
- if (!ContinueDebugEvent (ev.dwProcessId, ev.dwThreadId, cont))
- {
- cygwin_internal (CW_SETERRNO, __FILE__, __LINE__ - 2);
- print_errno_error_and_return (in_fn);
- }
- if (exitnow)
- break;
- }
-
- return 0;
-}
-
-int
-main (int argc, char **argv)
-{
- int optch;
-
- /* Use locale from environment. If not set or set to "C", use UTF-8. */
- setlocale (LC_CTYPE, "");
- if (!strcmp (setlocale (LC_CTYPE, NULL), "C"))
- setlocale (LC_CTYPE, "en_US.UTF-8");
- while ((optch = getopt_long (argc, argv, opts, longopts, NULL)) != -1)
- switch (optch)
- {
- case 'd':
- case 'r':
- case 'u':
- error ("option not implemented `-%c'", optch);
- exit (1);
- case 'h':
- usage ();
- exit (0);
- case 'V':
- print_version ();
- return 0;
- default:
- fprintf (stderr, "Try `%s --help' for more information.\n",
- program_invocation_short_name);
- return 1;
- }
- argv += optind;
- if (!*argv)
- error ("missing file arguments");
-
- int ret = 0;
- bool multiple = !!argv[1];
- char *fn;
- while ((fn = *argv++))
- if (report (fn, multiple))
- ret = 1;
- exit (ret);
-}
-
-static bool printing = false;
-
-
-/* dump of import directory
- section begins at pointer 'section base'
- section RVA is 'section_rva'
- import directory begins at pointer 'imp' */
-static int
-dump_import_directory (const void *const section_base,
- const DWORD section_rva,
- const IMAGE_IMPORT_DESCRIPTOR *imp)
-{
- /* get memory address given the RVA */
- #define adr(rva) ((const void*) ((char*) section_base+((DWORD) (rva))-section_rva))
-
- /* continue until address inaccessible or there's no DLL name */
- for (; !IsBadReadPtr (imp, sizeof (*imp)) && imp->Name; imp++)
- {
- wchar_t full_path[PATH_MAX];
- wchar_t *dummy;
- char *fn = (char *) adr (imp->Name);
-
- if (saw_file (fn))
- continue;
-
- int len = mbstowcs (NULL, fn, 0);
- if (len <= 0)
- continue;
- wchar_t fnw[len + 1];
- mbstowcs (fnw, fn, len + 1);
- /* output DLL's name */
- char *print_fn;
- if (!SearchPathW (NULL, fnw, NULL, PATH_MAX, full_path, &dummy))
- {
- print_fn = strdup ("not found");
- printing = true;
- }
- else if (!printing)
- continue;
- else
- {
- print_fn = tocyg (full_path);
- strcat (print_fn, " (?)");
- }
-
- printf ("\t%s => %s\n", (char *) fn, print_fn);
- free (print_fn);
- }
- #undef adr
-
- return 0;
-}
-
-/* load a file in RAM (memory-mapped)
- return pointer to loaded file
- 0 if no success */
-static void *
-map_file (const wchar_t *filename)
-{
- HANDLE hFile, hMapping;
- void *basepointer;
- if ((hFile = CreateFileW (filename, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE,
- 0, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, 0)) == INVALID_HANDLE_VALUE)
- {
- fprintf (stderr, "couldn't open %ls\n", filename);
- return 0;
- }
- if (!(hMapping = CreateFileMapping (hFile, 0, PAGE_READONLY | SEC_COMMIT, 0, 0, 0)))
- {
- fprintf (stderr, "CreateFileMapping failed with windows error %u\n",
- (unsigned int) GetLastError ());
- CloseHandle (hFile);
- return 0;
- }
- if (!(basepointer = MapViewOfFile (hMapping, FILE_MAP_READ, 0, 0, 0)))
- {
- fprintf (stderr, "MapViewOfFile failed with windows error %u\n",
- (unsigned int) GetLastError ());
- CloseHandle (hMapping);
- CloseHandle (hFile);
- return 0;
- }
-
- CloseHandle (hMapping);
- CloseHandle (hFile);
-
- return basepointer;
-}
-
-
-/* this will return a pointer immediatly behind the DOS-header
- 0 if error */
-static void *
-skip_dos_stub (const IMAGE_DOS_HEADER *dos_ptr)
-{
- /* look there's enough space for a DOS-header */
- if (IsBadReadPtr (dos_ptr, sizeof (*dos_ptr)))
- {
- fprintf (stderr, "not enough space for DOS-header\n");
- return 0;
- }
-
- /* validate MZ */
- if (dos_ptr->e_magic != IMAGE_DOS_SIGNATURE)
- {
- fprintf (stderr, "not a DOS-stub\n");
- return 0;
- }
-
- /* ok, then, go get it */
- return (char*) dos_ptr + dos_ptr->e_lfanew;
-}
-
-
-/* find the directory's section index given the RVA
- Returns -1 if impossible */
-static int
-get_directory_index (const unsigned dir_rva,
- const unsigned dir_length,
- const int number_of_sections,
- const IMAGE_SECTION_HEADER *sections)
-{
- int sect;
- for (sect = 0; sect < number_of_sections; sect++)
- {
- /* compare directory RVA to section RVA */
- if (sections[sect].VirtualAddress <= dir_rva
- && dir_rva < sections[sect].VirtualAddress+sections[sect].SizeOfRawData)
- return sect;
- }
-
- return -1;
-}
-
-/* dump imports of a single file
- Returns 0 if successful, !=0 else */
-static int
-process_file (const wchar_t *filename)
-{
- void *basepointer; /* Points to loaded PE file
- * This is memory mapped stuff
- */
- int number_of_sections;
- DWORD import_rva; /* RVA of import directory */
- DWORD import_length; /* length of import directory */
- int import_index; /* index of section with import directory */
-
- /* ensure byte-alignment for struct tag_header */
- #include <pshpack1.h>
-
- const struct tag_header
- {
- DWORD signature;
- IMAGE_FILE_HEADER file_head;
- IMAGE_OPTIONAL_HEADER opt_head;
- IMAGE_SECTION_HEADER section_header[1]; /* an array of unknown length */
- } *header;
-
- /* revert to regular alignment */
- #include <poppack.h>
-
- printing = false;
-
- /* first, load file */
- basepointer = map_file (filename);
- if (!basepointer)
- {
- puts ("cannot load file");
- return 1;
- }
-
- /* get header pointer; validate a little bit */
- header = (tag_header *) skip_dos_stub ((IMAGE_DOS_HEADER *) basepointer);
- if (!header)
- {
- puts ("cannot skip DOS stub");
- UnmapViewOfFile (basepointer);
- return 2;
- }
-
- /* look there's enough space for PE headers */
- if (IsBadReadPtr (header, sizeof (*header)))
- {
- puts ("not enough space for PE headers");
- UnmapViewOfFile (basepointer);
- return 3;
- }
-
- /* validate PE signature */
- if (header->signature != IMAGE_NT_SIGNATURE)
- {
- puts ("not a PE file");
- UnmapViewOfFile (basepointer);
- return 4;
- }
-
- /* get number of sections */
- number_of_sections = header->file_head.NumberOfSections;
-
- /* check there are sections... */
- if (number_of_sections < 1)
- {
- UnmapViewOfFile (basepointer);
- return 5;
- }
-
- /* validate there's enough space for section headers */
- if (IsBadReadPtr (header->section_header, number_of_sections*sizeof (IMAGE_SECTION_HEADER)))
- {
- puts ("not enough space for section headers");
- UnmapViewOfFile (basepointer);
- return 6;
- }
-
- /* get RVA and length of import directory */
- import_rva = header->opt_head.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress;
- import_length = header->opt_head.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].Size;
-
- /* check there's stuff to care about */
- if (!import_rva || !import_length)
- {
- UnmapViewOfFile (basepointer);
- return 0; /* success! */
- }
-
- /* get import directory pointer */
- import_index = get_directory_index (import_rva,import_length,number_of_sections,header->section_header);
-
- /* check directory was found */
- if (import_index < 0)
- {
- puts ("couldn't find import directory in sections");
- UnmapViewOfFile (basepointer);
- return 7;
- }
-
- /* The pointer to the start of the import directory's section */
- const void *section_address = (char*) basepointer + header->section_header[import_index].PointerToRawData;
- if (dump_import_directory (section_address,
- header->section_header[import_index].VirtualAddress,
- /* the last parameter is the pointer to the import directory:
- section address + (import RVA - section RVA)
- The difference is the offset of the import directory in the section */
- (const IMAGE_IMPORT_DESCRIPTOR *) ((char *) section_address+import_rva-header->section_header[import_index].VirtualAddress)))
- {
- UnmapViewOfFile (basepointer);
- return 8;
- }
-
- UnmapViewOfFile (basepointer);
- return 0;
-}
diff --git a/winsup/utils/ldh.cc b/winsup/utils/ldh.cc
deleted file mode 100644
index 13655ed23..000000000
--- a/winsup/utils/ldh.cc
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <windows.h>
-int APIENTRY
-WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
-{
- LPWSTR cmd = GetCommandLineW ();
- while (*cmd)
- if (*cmd != ' ' || cmd[1] != L'-' || cmd[2] != '-' || cmd[3] != ' ')
- cmd++;
- else
- {
- cmd += 4;
- break;
- }
- if (!*cmd || !LoadLibraryExW (cmd, NULL, LOAD_WITH_ALTERED_SEARCH_PATH ))
- ExitProcess (0x0100);
- ExitProcess (0x0000);
-}
diff --git a/winsup/utils/loadlib.h b/winsup/utils/loadlib.h
deleted file mode 100644
index 34ed1277d..000000000
--- a/winsup/utils/loadlib.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/* loadlib.h
-
- Copyright 2010, 2011, 2012 Red Hat, Inc.
-
- This file is part of Cygwin.
-
- This software is a copyrighted work licensed under the terms of the
- Cygwin license. Please consult the file "CYGWIN_LICENSE" for
- details. */
-
-#ifndef _LOADLIB_H
-#define _LOADLIB_H
-
-#include <windows.h>
-#include <wchar.h>
-
-/* Load all system libs from the windows system directory by prepending the
- full path. This doesn't work for loadling cygwin1.dll. For this case,
- instead of prepending the path, make sure that the CWD is removed from
- the DLL search path, if possible (XP SP1++, Vista++). */
-static HMODULE _load_sys_library (const wchar_t *dll) __attribute__ ((used));
-
-static HMODULE
-_load_sys_library (const wchar_t *dll)
-{
- static BOOL WINAPI (*set_dll_directory)(LPCWSTR);
- static WCHAR sysdir[MAX_PATH];
- static UINT sysdir_len;
-
- WCHAR dllpath[MAX_PATH];
-
- if (!sysdir_len)
- {
- sysdir_len = GetSystemDirectoryW (sysdir, MAX_PATH);
- sysdir[sysdir_len++] = L'\\';
- sysdir[sysdir_len] = L'\0';
- }
- if (!set_dll_directory)
- {
- HMODULE k32 = GetModuleHandleW (L"kernel32.dll");
- if (k32)
- set_dll_directory = (BOOL WINAPI (*)(LPCWSTR))
- GetProcAddress (k32, "SetDllDirectoryW");
- if (!set_dll_directory)
- set_dll_directory = (BOOL WINAPI (*)(LPCWSTR)) -1;
- else
- set_dll_directory (L"");
- }
-
- if (wcscmp (dll, L"cygwin1.dll") == 0)
- return LoadLibraryExW (L"cygwin1.dll", NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
-
- wcscpy (dllpath, sysdir);
- wcscpy (dllpath + sysdir_len, dll);
- return LoadLibraryExW (dllpath, NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
-}
-
-#define LoadLibraryW(d) _load_sys_library(d)
-#define LoadLibraryA(d) _load_sys_library(L##d)
-
-#endif /* _LOADLIB_H */
diff --git a/winsup/utils/locale.cc b/winsup/utils/locale.cc
deleted file mode 100644
index fadf3f3da..000000000
--- a/winsup/utils/locale.cc
+++ /dev/null
@@ -1,849 +0,0 @@
-/*
- * Copyright (c) 2010, 2011, 2012, 2013 Corinna Vinschen
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <getopt.h>
-#include <string.h>
-#include <wchar.h>
-#include <locale.h>
-#include <langinfo.h>
-#include <limits.h>
-#include <sys/cygwin.h>
-#include <cygwin/version.h>
-#define _WIN32_WINNT 0x0602
-#define WINVER 0x0602
-#include <windows.h>
-
-#define LOCALE_ALIAS "/usr/share/locale/locale.alias"
-#define LOCALE_ALIAS_LINE_LEN 255
-
-void
-usage ()
-{
- printf (
-"Usage: %1$s [-amvhV]\n"
-" or: %1$s [-ck] NAME\n"
-" or: %1$s [-usfnU]\n"
-"\n"
-"Get locale-specific information.\n"
-"\n"
-"System information:\n"
-"\n"
-" -a, --all-locales List all available supported locales\n"
-" -m, --charmaps List all available character maps\n"
-" -v, --verbose More verbose output\n"
-"\n"
-"Modify output format:\n"
-"\n"
-" -c, --category-name List information about given category NAME\n"
-" -k, --keyword-name Print information about given keyword NAME\n"
-"\n"
-"Default locale information:\n"
-"\n"
-" -u, --user Print locale of user's default UI language\n"
-" -s, --system Print locale of system default UI language\n"
-" -f, --format Print locale of user's regional format settings\n"
-" (time, numeric & monetary)\n"
-" -n, --no-unicode Print system default locale for non-Unicode programs\n"
-" -U, --utf Attach \".UTF-8\" to the result\n"
-"\n"
-"Other options:\n"
-"\n"
-" -h, --help This text\n"
-" -V, --version Print program version and exit\n\n",
- program_invocation_short_name);
-}
-
-void
-print_version ()
-{
- printf ("locale (cygwin) %d.%d.%d\n"
- "Get locale-specific information\n"
- "Copyright (C) 2010 - %s Red Hat, Inc.\n"
- "This is free software; see the source for copying conditions. There is NO\n"
- "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n",
- CYGWIN_VERSION_DLL_MAJOR / 1000,
- CYGWIN_VERSION_DLL_MAJOR % 1000,
- CYGWIN_VERSION_DLL_MINOR,
- strrchr (__DATE__, ' ') + 1);
-}
-
-struct option longopts[] = {
- {"all-locales", no_argument, NULL, 'a'},
- {"category-name", no_argument, NULL, 'c'},
- {"format", no_argument, NULL, 'f'},
- {"help", no_argument, NULL, 'h'},
- {"keyword-name", no_argument, NULL, 'k'},
- {"charmaps", no_argument, NULL, 'm'},
- {"no-unicode", no_argument, NULL, 'n'},
- {"system", no_argument, NULL, 's'},
- {"user", no_argument, NULL, 'u'},
- {"utf", no_argument, NULL, 'U'},
- {"verbose", no_argument, NULL, 'v'},
- {"version", no_argument, NULL, 'V'},
- {0, no_argument, NULL, 0}
-};
-const char *opts = "acfhkmnsuUvV";
-
-int
-getlocale (LCID lcid, char *name)
-{
- char iso639[10];
- char iso3166[10];
-
- iso3166[0] = '\0';
- if (!GetLocaleInfo (lcid, LOCALE_SISO639LANGNAME, iso639, 10))
- return 0;
- GetLocaleInfo (lcid, LOCALE_SISO3166CTRYNAME, iso3166, 10);
- sprintf (name, "%s%s%s", iso639, lcid > 0x3ff ? "_" : "",
- lcid > 0x3ff ? iso3166 : "");
- return 1;
-}
-
-typedef struct {
- const char *name;
- const wchar_t *language;
- const wchar_t *territory;
- const char *codeset;
- bool alias;
-} loc_t;
-loc_t *locale;
-size_t loc_max;
-size_t loc_num;
-
-void
-print_codeset (const char *codeset)
-{
- for (; *codeset; ++codeset)
- if (*codeset != '-')
- putc (tolower ((int)(unsigned char) *codeset), stdout);
-}
-
-void
-print_locale_with_codeset (int verbose, loc_t *locale, bool utf8,
- const char *modifier)
-{
- static const char *sysroot;
- char locname[32];
-
- if (verbose
- && (!strcmp (locale->name, "C") || !strcmp (locale->name, "POSIX")))
- return;
- if (!sysroot)
- {
- WCHAR sysbuf[PATH_MAX];
- HMODULE k32 = GetModuleHandleW (L"kernel32.dll");
- if (GetModuleFileNameW (k32, sysbuf, PATH_MAX))
- sysroot = (const char *) cygwin_create_path (CCP_WIN_W_TO_POSIX,
- sysbuf);
- if (!sysroot)
- sysroot = "kernel32.dll";
- }
- snprintf (locname, 32, "%s%s%s%s", locale->name, utf8 ? ".utf8" : "",
- modifier ? "@" : "", modifier ?: "");
- if (verbose)
- fputs ("locale: ", stdout);
- if (verbose)
- {
- printf ("%-15s ", locname);
- printf ("archive: %s\n",
- locale->alias ? LOCALE_ALIAS : sysroot);
- puts ("-------------------------------------------------------------------------------");
- printf (" language | %ls\n", locale->language);
- printf ("territory | %ls\n", locale->territory);
- printf (" codeset | %s\n\n", utf8 ? "UTF-8" : locale->codeset);
- }
- else
- printf ("%s\n", locname);
-}
-
-void
-print_locale (int verbose, loc_t *locale)
-{
- print_locale_with_codeset (verbose, locale, false, NULL);
- char *modifier = strchr (locale->name, '@');
- if (!locale->alias)
- {
- if (!modifier)
- print_locale_with_codeset (verbose, locale, true, NULL);
- else if (!strcmp (modifier, "@cjknarrow"))
- {
- *modifier++ = '\0';
- print_locale_with_codeset (verbose, locale, true, modifier);
- }
- }
-}
-
-int
-compare_locales (const void *a, const void *b)
-{
- const loc_t *la = (const loc_t *) a;
- const loc_t *lb = (const loc_t *) b;
- return strcmp (la->name, lb->name);
-}
-
-void
-add_locale (const char *name, const wchar_t *language, const wchar_t *territory,
- bool alias = false)
-{
- char orig_locale[32];
-
- if (loc_num >= loc_max)
- {
- loc_t *tmp = (loc_t *) realloc (locale, (loc_max + 32) * sizeof (loc_t));
- if (!tmp)
- {
- fprintf (stderr, "Out of memory!\n");
- exit (1);
- }
- locale = tmp;
- loc_max += 32;
- }
- locale[loc_num].name = strdup (name);
- locale[loc_num].language = wcsdup (language);
- locale[loc_num].territory = wcsdup (territory);
- strcpy (orig_locale, setlocale (LC_CTYPE, NULL));
- setlocale (LC_CTYPE, name);
- locale[loc_num].codeset = strdup (nl_langinfo (CODESET));
- setlocale (LC_CTYPE, orig_locale);
- locale[loc_num].alias = alias;
- ++loc_num;
-}
-
-void
-add_locale_alias_locales ()
-{
- char alias_buf[LOCALE_ALIAS_LINE_LEN + 1], *c;
- const char *alias, *replace;
- char orig_locale[32];
- loc_t search, *loc;
- size_t orig_loc_num = loc_num;
-
- FILE *fp = fopen (LOCALE_ALIAS, "rt");
- if (!fp)
- return;
- strcpy (orig_locale, setlocale (LC_CTYPE, NULL));
- while (fgets (alias_buf, LOCALE_ALIAS_LINE_LEN + 1, fp))
- {
- alias_buf[LOCALE_ALIAS_LINE_LEN] = '\0';
- c = strrchr (alias_buf, '\n');
- if (c)
- *c = '\0';
- c = alias_buf;
- c += strspn (c, " \t");
- if (!*c || *c == '#')
- continue;
- alias = c;
- c += strcspn (c, " \t");
- *c++ = '\0';
- c += strspn (c, " \t");
- if (*c == '#')
- continue;
- replace = c;
- c += strcspn (c, " \t");
- *c++ = '\0';
- c = strchr (replace, '.');
- if (c)
- *c = '\0';
- search.name = replace;
- loc = (loc_t *) bsearch (&search, locale, orig_loc_num, sizeof (loc_t),
- compare_locales);
- add_locale (alias, loc ? loc->language : L"", loc ? loc->territory : L"",
- true);
- }
- fclose (fp);
-}
-
-void
-print_all_locales (int verbose)
-{
- LCID lcid = 0;
- char name[32];
- DWORD cp;
-
- unsigned lang, sublang;
-
- add_locale ("C", L"C", L"POSIX");
- add_locale ("POSIX", L"C", L"POSIX", true);
- for (lang = 1; lang <= 0xff; ++lang)
- {
- struct {
- wchar_t language[256];
- wchar_t country[256];
- char loc[32];
- } loc_list[32];
- int lcnt = 0;
-
- for (sublang = 1; sublang <= 0x3f; ++sublang)
- {
- lcid = (sublang << 10) | lang;
- if (getlocale (lcid, name))
- {
- wchar_t language[256];
- wchar_t country[256];
- int i;
- char *c, loc[32];
- wchar_t wbuf[9];
-
- /* Go figure. Even the English name of a language or
- locale might contain native characters. */
- GetLocaleInfoW (lcid, LOCALE_SENGLANGUAGE, language, 256);
- GetLocaleInfoW (lcid, LOCALE_SENGCOUNTRY, country, 256);
- /* Avoid dups */
- for (i = 0; i < lcnt; ++ i)
- if (!wcscmp (loc_list[i].language, language)
- && !wcscmp (loc_list[i].country, country))
- break;
- if (i < lcnt)
- continue;
- if (lcnt < 32)
- {
- wcscpy (loc_list[lcnt].language, language);
- wcscpy (loc_list[lcnt].country, country);
- }
- c = stpcpy (loc, name);
- /* Convert old sr_SP silently to sr_CS on old systems.
- Make sure sr_CS country is in recent shape. */
- if (lang == LANG_SERBIAN
- && (sublang == SUBLANG_SERBIAN_LATIN
- || sublang == SUBLANG_SERBIAN_CYRILLIC))
- {
- c = stpcpy (loc, "sr_CS");
- wcscpy (country, L"Serbia and Montenegro (Former)");
- }
- /* Now check certain conditions to figure out if that
- locale requires a modifier. */
- if (lang == LANG_SERBIAN && !strncmp (loc, "sr_", 3)
- && wcsstr (language, L"(Latin)"))
- stpcpy (c, "@latin");
- else if (lang == LANG_UZBEK
- && sublang == SUBLANG_UZBEK_CYRILLIC)
- stpcpy (c, "@cyrillic");
- /* Avoid more dups */
- for (i = 0; i < lcnt; ++ i)
- if (!strcmp (loc_list[i].loc, loc))
- {
- lcnt++;
- break;
- }
- if (i < lcnt)
- continue;
- if (lcnt < 32)
- strcpy (loc_list[lcnt++].loc, loc);
- /* Print */
- add_locale (loc, language, country);
- /* Check for locales which sport a modifier for
- changing the codeset and other stuff. */
- if (lang == LANG_BELARUSIAN
- && sublang == SUBLANG_BELARUSIAN_BELARUS)
- stpcpy (c, "@latin");
- else if (lang == LANG_TATAR
- && sublang == SUBLANG_TATAR_RUSSIA)
- stpcpy (c, "@iqtelif");
- else if (GetLocaleInfoW (lcid,
- LOCALE_IDEFAULTANSICODEPAGE
- | LOCALE_RETURN_NUMBER,
- (PWCHAR) &cp, sizeof cp)
- && cp == 1252 /* Latin1*/
- && GetLocaleInfoW (lcid, LOCALE_SINTLSYMBOL, wbuf, 9)
- && !wcsncmp (wbuf, L"EUR", 3))
- stpcpy (c, "@euro");
- else if (lang == LANG_JAPANESE
- || lang == LANG_KOREAN
- || lang == LANG_CHINESE)
- stpcpy (c, "@cjknarrow");
- else
- continue;
- add_locale (loc, language, country);
- }
- }
- /* Check Serbian language for the available territories. Up to
- Server 2003 we only had sr_SP (silently converted to sr_CS
- above), in Vista we had only sr_CS. First starting with W7 we
- have the actual sr_RS and sr_ME. However, all of them are
- supported on all systems in Cygwin. So we fake them here, if
- they are missing. */
- if (lang == LANG_SERBIAN)
- {
- int sr_CS_idx = -1;
- int sr_RS_idx = -1;
- int i;
-
- for (i = 0; i < lcnt; ++ i)
- if (!strcmp (loc_list[i].loc, "sr_CS"))
- sr_CS_idx = i;
- else if (!strcmp (loc_list[i].loc, "sr_RS"))
- sr_RS_idx = i;
- if (sr_CS_idx > 0 && sr_RS_idx == -1)
- {
- add_locale ("sr_RS@latin", L"Serbian (Latin)", L"Serbia");
- add_locale ("sr_RS", L"Serbian (Cyrillic)", L"Serbia");
- add_locale ("sr_ME@latin", L"Serbian (Latin)", L"Montenegro");
- add_locale ("sr_ME", L"Serbian (Cyrillic)", L"Montenegro");
- }
- }
- }
- /* First sort allows add_locale_alias_locales to bsearch in locales. */
- qsort (locale, loc_num, sizeof (loc_t), compare_locales);
- add_locale_alias_locales ();
- qsort (locale, loc_num, sizeof (loc_t), compare_locales);
- for (size_t i = 0; i < loc_num; ++i)
- print_locale (verbose, &locale[i]);
-}
-
-void
-print_charmaps ()
-{
- /* FIXME: We need a method to fetch the available charsets from Cygwin, */
- const char *charmaps[] =
- {
- "ASCII",
- "BIG5",
- "CP1125",
- "CP1250",
- "CP1251",
- "CP1252",
- "CP1253",
- "CP1254",
- "CP1255",
- "CP1256",
- "CP1257",
- "CP1258",
- "CP437",
- "CP720",
- "CP737",
- "CP775",
- "CP850",
- "CP852",
- "CP855",
- "CP857",
- "CP858",
- "CP862",
- "CP866",
- "CP874",
- "CP932",
- "EUC-CN",
- "EUC-JP",
- "EUC-KR",
- "GB2312",
- "GBK",
- "GEORGIAN-PS",
- "ISO-8859-1",
- "ISO-8859-10",
- "ISO-8859-11",
- "ISO-8859-13",
- "ISO-8859-14",
- "ISO-8859-15",
- "ISO-8859-16",
- "ISO-8859-2",
- "ISO-8859-3",
- "ISO-8859-4",
- "ISO-8859-5",
- "ISO-8859-6",
- "ISO-8859-7",
- "ISO-8859-8",
- "ISO-8859-9",
- "KOI8-R",
- "KOI8-U",
- "PT154",
- "SJIS",
- "TIS-620",
- "UTF-8",
- NULL
- };
- const char **charmap = charmaps;
- while (*charmap)
- printf ("%s\n", *charmap++);
-}
-
-void
-print_lc_ivalue (int key, const char *name, int value)
-{
- if (key)
- printf ("%s=", name);
- printf ("%d", value == CHAR_MAX ? -1 : value);
- fputc ('\n', stdout);
-}
-
-void
-print_lc_svalue (int key, const char *name, const char *value)
-{
- if (key)
- printf ("%s=\"", name);
- fputs (value, stdout);
- if (key)
- fputc ('"', stdout);
- fputc ('\n', stdout);
-}
-
-void
-print_lc_sepstrings (int key, const char *name, const char *value)
-{
- char *c;
-
- if (key)
- printf ("%s=", name);
- while (value && *value)
- {
- if (key)
- fputc ('"', stdout);
- c = strchr (value, ';');
- if (!c)
- {
- fputs (value, stdout);
- value = NULL;
- }
- else
- {
- printf ("%.*s", (int) (c - value), value);
- value = c + 1;
- }
- if (key)
- fputc ('"', stdout);
- if (value && *value)
- fputc (';', stdout);
- }
- fputc ('\n', stdout);
-}
-
-void
-print_lc_strings (int key, const char *name, int from, int to)
-{
- if (key)
- printf ("%s=\"", name);
- for (int i = from; i <= to; ++i)
- printf ("%s%s", i > from ? ";" : "", nl_langinfo (i));
- if (key)
- fputc ('"', stdout);
- fputc ('\n', stdout);
-}
-
-void
-print_lc_grouping (int key, const char *name, const char *grouping)
-{
- if (key)
- printf ("%s=", name);
- for (const char *g = grouping; *g; ++g)
- printf ("%s%d", g > grouping ? ";" : "", *g == CHAR_MAX ? -1 : *g);
- fputc ('\n', stdout);
-}
-
-enum type_t
-{
- is_string_fake,
- is_grouping,
- is_string,
- is_mstrings,
- is_sepstrings,
- is_int,
- is_wchar,
- is_end
-};
-
-struct lc_names_t
-{
- const char *name;
- type_t type;
- size_t fromval;
- size_t toval;
-};
-
-const char *fake_string[] = {
- "upper;lower;alpha;digit;xdigit;space;print;graph;blank;cntrl;punct;alnum",
- "upper\";\"lower\";\"alpha\";\"digit\";\"xdigit\";\"space\";\"print\";\"graph\";\"blank\";\"cntrl\";\"punct\";\"alnum",
- "toupper;tolower",
- "toupper\";\"tolower"
-};
-
-lc_names_t lc_ctype_names[] =
-{
- { "ctype-class-names", is_string_fake, 0, 0 },
- { "ctype-map-names", is_string_fake, 2, 0 },
- { "ctype-outdigit0_mb", is_string, _NL_CTYPE_OUTDIGITS0_MB, 0 },
- { "ctype-outdigit1_mb", is_string, _NL_CTYPE_OUTDIGITS1_MB, 0 },
- { "ctype-outdigit2_mb", is_string, _NL_CTYPE_OUTDIGITS2_MB, 0 },
- { "ctype-outdigit3_mb", is_string, _NL_CTYPE_OUTDIGITS3_MB, 0 },
- { "ctype-outdigit4_mb", is_string, _NL_CTYPE_OUTDIGITS4_MB, 0 },
- { "ctype-outdigit5_mb", is_string, _NL_CTYPE_OUTDIGITS5_MB, 0 },
- { "ctype-outdigit6_mb", is_string, _NL_CTYPE_OUTDIGITS6_MB, 0 },
- { "ctype-outdigit7_mb", is_string, _NL_CTYPE_OUTDIGITS7_MB, 0 },
- { "ctype-outdigit8_mb", is_string, _NL_CTYPE_OUTDIGITS8_MB, 0 },
- { "ctype-outdigit9_mb", is_string, _NL_CTYPE_OUTDIGITS9_MB, 0 },
- { "ctype-outdigit0_wc", is_wchar, _NL_CTYPE_OUTDIGITS0_WC, 0 },
- { "ctype-outdigit1_wc", is_wchar, _NL_CTYPE_OUTDIGITS1_WC, 0 },
- { "ctype-outdigit2_wc", is_wchar, _NL_CTYPE_OUTDIGITS2_WC, 0 },
- { "ctype-outdigit3_wc", is_wchar, _NL_CTYPE_OUTDIGITS3_WC, 0 },
- { "ctype-outdigit4_wc", is_wchar, _NL_CTYPE_OUTDIGITS4_WC, 0 },
- { "ctype-outdigit5_wc", is_wchar, _NL_CTYPE_OUTDIGITS5_WC, 0 },
- { "ctype-outdigit6_wc", is_wchar, _NL_CTYPE_OUTDIGITS6_WC, 0 },
- { "ctype-outdigit7_wc", is_wchar, _NL_CTYPE_OUTDIGITS7_WC, 0 },
- { "ctype-outdigit8_wc", is_wchar, _NL_CTYPE_OUTDIGITS8_WC, 0 },
- { "ctype-outdigit9_wc", is_wchar, _NL_CTYPE_OUTDIGITS9_WC, 0 },
- { "charmap", is_string, CODESET, 0 },
- { "ctype-mb-cur-max", is_int, _NL_CTYPE_MB_CUR_MAX, 0 },
- { NULL, is_end, 0, 0 }
-};
-
-lc_names_t lc_numeric_names[] =
-{
- { "decimal_point", is_string, RADIXCHAR, 0 },
- { "thousands_sep", is_string, THOUSEP, 0 },
- { "grouping", is_grouping, _NL_NUMERIC_GROUPING, 0 },
- { "numeric-decimal-point-wc", is_wchar, _NL_NUMERIC_DECIMAL_POINT_WC, 0 },
- { "numeric-thousands-sep-wc", is_wchar, _NL_NUMERIC_THOUSANDS_SEP_WC, 0 },
- { "numeric-codeset", is_string, _NL_NUMERIC_CODESET, 0 },
- { NULL, is_end, 0, 0 }
-};
-
-lc_names_t lc_time_names[] =
-{
- { "abday", is_mstrings, ABDAY_1, ABDAY_7 },
- { "day", is_mstrings, DAY_1, DAY_7 },
- { "abmon", is_mstrings, ABMON_1, ABMON_12 },
- { "mon", is_mstrings, MON_1, MON_12 },
- { "am_pm", is_mstrings, AM_STR, PM_STR },
- { "d_t_fmt", is_string, D_T_FMT, 0 },
- { "d_fmt", is_string, D_FMT, 0 },
- { "t_fmt", is_string, T_FMT, 0 },
- { "t_fmt_ampm", is_string, T_FMT_AMPM, 0 },
- { "era", is_sepstrings, ERA, 0 },
- { "era_d_fmt", is_string, ERA_D_FMT, 0 },
- { "alt_digits", is_sepstrings,ALT_DIGITS, 0 },
- { "era_d_t_fmt", is_string, ERA_D_T_FMT, 0 },
- { "era_t_fmt", is_string, ERA_T_FMT, 0 },
- { "date_fmt", is_string, _DATE_FMT, 0 },
- { "time-codeset", is_string, _NL_TIME_CODESET, 0 },
- { NULL, is_end, 0, 0 }
-};
-
-lc_names_t lc_collate_names[] =
-{
- { "collate-codeset", is_string, _NL_COLLATE_CODESET, 0 },
- { NULL, is_end, 0, 0 }
-};
-
-lc_names_t lc_monetary_names[] =
-{
- { "int_curr_symbol", is_string, _NL_MONETARY_INT_CURR_SYMBOL, 0 },
- { "currency_symbol", is_string, _NL_MONETARY_CURRENCY_SYMBOL, 0 },
- { "mon_decimal_point", is_string, _NL_MONETARY_MON_DECIMAL_POINT, 0 },
- { "mon_thousands_sep", is_string, _NL_MONETARY_MON_THOUSANDS_SEP, 0 },
- { "mon_grouping", is_grouping, _NL_MONETARY_MON_GROUPING, 0 },
- { "positive_sign", is_string, _NL_MONETARY_POSITIVE_SIGN, 0 },
- { "negative_sign", is_string, _NL_MONETARY_NEGATIVE_SIGN, 0 },
- { "int_frac_digits", is_int, _NL_MONETARY_INT_FRAC_DIGITS, 0 },
- { "frac_digits", is_int, _NL_MONETARY_FRAC_DIGITS, 0 },
- { "p_cs_precedes", is_int, _NL_MONETARY_P_CS_PRECEDES, 0 },
- { "p_sep_by_space", is_int, _NL_MONETARY_P_SEP_BY_SPACE, 0 },
- { "n_cs_precedes", is_int, _NL_MONETARY_N_CS_PRECEDES, 0 },
- { "n_sep_by_space", is_int, _NL_MONETARY_N_SEP_BY_SPACE, 0 },
- { "p_sign_posn", is_int, _NL_MONETARY_P_SIGN_POSN, 0 },
- { "n_sign_posn", is_int, _NL_MONETARY_N_SIGN_POSN, 0 },
- { "int_p_cs_precedes", is_int, _NL_MONETARY_INT_P_CS_PRECEDES, 0 },
- { "int_p_sep_by_space", is_int, _NL_MONETARY_INT_P_SEP_BY_SPACE,0 },
- { "int_n_cs_precedes", is_int, _NL_MONETARY_INT_N_CS_PRECEDES, 0 },
- { "int_n_sep_by_space", is_int, _NL_MONETARY_INT_N_SEP_BY_SPACE,0 },
- { "int_p_sign_posn", is_int, _NL_MONETARY_INT_P_SIGN_POSN, 0 },
- { "int_n_sign_posn", is_int, _NL_MONETARY_INT_N_SIGN_POSN, 0 },
- { "monetary-decimal-point-wc", is_wchar, _NL_MONETARY_WMON_DECIMAL_POINT, 0 },
- { "monetary-thousands-sep-wc", is_wchar, _NL_MONETARY_WMON_THOUSANDS_SEP, 0 },
- { "monetary-codeset", is_string, _NL_MONETARY_CODESET, 0 },
- { NULL, is_end, 0, 0 }
-};
-
-lc_names_t lc_messages_names[] =
-{
- { "yesexpr", is_string, YESEXPR, 0 },
- { "noexpr", is_string, NOEXPR, 0 },
- { "yesstr", is_string, YESSTR, 0 },
- { "nostr", is_string, NOSTR, 0 },
- { "messages-codeset", is_string, _NL_MESSAGES_CODESET, 0 },
- { NULL, is_end, 0, 0 }
-};
-
-void
-print_lc (int cat, int key, const char *category, const char *name,
- lc_names_t *lc_name)
-{
- if (cat)
- printf ("%s\n", category);
- for (lc_names_t *lc = lc_name; lc->type != is_end; ++lc)
- if (!name || !strcmp (name, lc->name))
- switch (lc->type)
- {
- case is_string_fake:
- print_lc_svalue (key, lc->name, fake_string[lc->fromval + key]);
- break;
- case is_grouping:
- print_lc_grouping (key, lc->name, nl_langinfo (lc->fromval));
- break;
- case is_string:
- print_lc_svalue (key, lc->name, nl_langinfo (lc->fromval));
- break;
- case is_sepstrings:
- print_lc_sepstrings (key, lc->name, nl_langinfo (lc->fromval));
- break;
- case is_mstrings:
- print_lc_strings (key, lc->name, lc->fromval, lc->toval);
- break;
- case is_int:
- print_lc_ivalue (key, lc->name, (int) *nl_langinfo (lc->fromval));
- break;
- case is_wchar:
- print_lc_ivalue (key, lc->name,
- *(wchar_t *) nl_langinfo (lc->fromval));
- break;
- default:
- break;
- }
-}
-
-struct cat_t
-{
- const char *category;
- int lc_cat;
- lc_names_t *lc_names;
-} categories[] =
-{
- { "LC_CTYPE", LC_CTYPE, lc_ctype_names },
- { "LC_NUMERIC", LC_NUMERIC, lc_numeric_names },
- { "LC_TIME", LC_TIME, lc_time_names },
- { "LC_COLLATE", LC_COLLATE, lc_collate_names },
- { "LC_MONETARY", LC_MONETARY, lc_monetary_names },
- { "LC_MESSAGES", LC_MESSAGES, lc_messages_names },
- { NULL, 0, NULL }
-};
-
-void
-print_names (int cat, int key, const char *name)
-{
- struct cat_t *c;
- lc_names_t *lc;
-
- for (c = categories; c->category; ++c)
- if (!strcmp (name, c->category))
- {
- print_lc (cat, key, c->category, NULL, c->lc_names);
- return;
- }
- for (c = categories; c->category; ++c)
- for (lc = c->lc_names; lc->type != is_end; ++lc)
- if (!strcmp (name, lc->name))
- {
- print_lc (cat, key, c->category, lc->name, lc);
- return;
- }
-}
-
-void
-print_lc ()
-{
- printf ("LANG=%s\n", getenv ("LANG") ?: "");
- printf ("LC_CTYPE=\"%s\"\n", setlocale (LC_CTYPE, NULL));
- printf ("LC_NUMERIC=\"%s\"\n", setlocale (LC_NUMERIC, NULL));
- printf ("LC_TIME=\"%s\"\n", setlocale (LC_TIME, NULL));
- printf ("LC_COLLATE=\"%s\"\n", setlocale (LC_COLLATE, NULL));
- printf ("LC_MONETARY=\"%s\"\n", setlocale (LC_MONETARY, NULL));
- printf ("LC_MESSAGES=\"%s\"\n", setlocale (LC_MESSAGES, NULL));
- printf ("LC_ALL=%s\n", getenv ("LC_ALL") ?: "");
-}
-
-int
-main (int argc, char **argv)
-{
- int opt;
- LCID lcid = 0;
- int all = 0;
- int cat = 0;
- int key = 0;
- int maps = 0;
- int verbose = 0;
- const char *utf = "";
- char name[32];
-
- setlocale (LC_ALL, "");
- while ((opt = getopt_long (argc, argv, opts, longopts, NULL)) != -1)
- switch (opt)
- {
- case 'a':
- all = 1;
- break;
- case 'c':
- cat = 1;
- break;
- case 'k':
- key = 1;
- break;
- case 'm':
- maps = 1;
- break;
- case 's':
- lcid = GetSystemDefaultUILanguage ();
- break;
- case 'u':
- lcid = GetUserDefaultUILanguage ();
- break;
- case 'f':
- lcid = GetUserDefaultLCID ();
- break;
- case 'n':
- lcid = GetSystemDefaultLCID ();
- break;
- case 'U':
- utf = ".UTF-8";
- break;
- case 'v':
- verbose = 1;
- break;
- case 'h':
- usage ();
- return 0;
- case 'V':
- print_version ();
- return 0;
- default:
- fprintf (stderr, "Try `%s --help' for more information.\n",
- program_invocation_short_name);
- return 1;
- }
- if (all)
- print_all_locales (verbose);
- else if (maps)
- print_charmaps ();
- else if (lcid)
- {
- if (getlocale (lcid, name))
- printf ("%s%s\n", name, utf);
- }
- else if (optind < argc)
- while (optind < argc)
- print_names (cat, key, argv[optind++]);
- else
- print_lc ();
- return 0;
-}
diff --git a/winsup/utils/minidumper.cc b/winsup/utils/minidumper.cc
deleted file mode 100644
index 04685665e..000000000
--- a/winsup/utils/minidumper.cc
+++ /dev/null
@@ -1,275 +0,0 @@
-/* minidumper.cc
-
- Copyright 2014 Red Hat Inc.
-
- This file is part of Cygwin.
-
- 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 (file COPYING.dumper) 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
-*/
-
-#include <sys/cygwin.h>
-#include <cygwin/version.h>
-#include <getopt.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <windows.h>
-#include <dbghelp.h>
-
-DEFINE_ENUM_FLAG_OPERATORS(MINIDUMP_TYPE);
-
-BOOL verbose = FALSE;
-BOOL nokill = FALSE;
-
-/* Not yet in dbghelp.h */
-#define MiniDumpWithModuleHeaders (static_cast<MINIDUMP_TYPE>(0x00080000))
-#define MiniDumpFilterTriage (static_cast<MINIDUMP_TYPE>(0x00100000))
-
-static MINIDUMP_TYPE
-filter_minidump_type(MINIDUMP_TYPE dump_type)
-{
- API_VERSION build_version = { 6, 0, API_VERSION_NUMBER, 0 };
- API_VERSION *v = ImagehlpApiVersionEx(&build_version);
-
- if (verbose)
- printf ("dbghelp version %d.%d.%d.%d\n", v->MajorVersion,
- v->MinorVersion, v->Revision, v->Reserved);
-
- MINIDUMP_TYPE supported_types = MiniDumpNormal | MiniDumpWithDataSegs
- | MiniDumpWithFullMemory | MiniDumpWithHandleData | MiniDumpFilterMemory
- | MiniDumpScanMemory;
-
- /*
- This mainly trial and error and guesswork, as the MSDN documentation only
- says what version of "Debugging Tools for Windows" added these flags, but
- doesn't actually tell us the dbghelp.dll version which was contained in that
- (and seems to have errors as well)
- */
-
- if (v->MajorVersion >= 5)
- supported_types |= MiniDumpWithUnloadedModules
- | MiniDumpWithIndirectlyReferencedMemory | MiniDumpFilterModulePaths
- | MiniDumpWithProcessThreadData | MiniDumpWithPrivateReadWriteMemory;
-
- if (v->MajorVersion >= 6)
- supported_types |= MiniDumpWithoutOptionalData | MiniDumpWithFullMemoryInfo
- | MiniDumpWithThreadInfo | MiniDumpWithCodeSegs
- | MiniDumpWithoutAuxiliaryState | MiniDumpWithFullAuxiliaryState // seems to be documentation error that these two aren't listed as 'Not supported prior to 6.1'
- | MiniDumpWithPrivateWriteCopyMemory | MiniDumpIgnoreInaccessibleMemory
- | MiniDumpWithTokenInformation;
-
- if ((v->MajorVersion*10 + v->MinorVersion) >= 62)
- supported_types |= MiniDumpWithModuleHeaders | MiniDumpFilterTriage; // seems to be documentation error that these two are listed as 'Not supported prior to 6.1'
-
- if (verbose)
- printf ("supported MINIDUMP_TYPE flags 0x%x\n", supported_types);
-
- return (dump_type & supported_types);
-}
-
-static void
-minidump(DWORD pid, MINIDUMP_TYPE dump_type, const char *minidump_file)
-{
- HANDLE dump_file;
- HANDLE process;
-
- dump_file = CreateFile(minidump_file,
- GENERIC_READ | GENERIC_WRITE,
- 0,
- NULL,
- CREATE_ALWAYS,
- FILE_FLAG_BACKUP_SEMANTICS,
- NULL);
- if (dump_file == INVALID_HANDLE_VALUE)
- {
- fprintf (stderr, "error opening file\n");
- return;
- }
-
- process = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ | PROCESS_TERMINATE,
- FALSE,
- pid);
- if (process == NULL)
- {
- fprintf (stderr, "error opening process\n");
- return;
- }
-
- BOOL success = MiniDumpWriteDump(process,
- pid,
- dump_file,
- dump_type,
- NULL,
- NULL,
- NULL);
- if (success)
- {
- if (verbose)
- printf ("minidump created successfully\n");
- }
- else
- {
- fprintf (stderr, "error creating minidump\n");
- }
-
- /* Unless nokill is given, behave like dumper and terminate the dumped
- process */
- if (!nokill)
- {
- TerminateProcess(process, 128 + 9);
- WaitForSingleObject(process, INFINITE);
- }
-
- CloseHandle(process);
- CloseHandle(dump_file);
-}
-
-static void
-usage (FILE *stream, int status)
-{
- fprintf (stream, "\
-Usage: %s [OPTION] FILENAME WIN32PID\n\
-\n\
-Write minidump from WIN32PID to FILENAME.dmp\n\
-\n\
- -t, --type minidump type flags\n\
- -n, --nokill don't terminate the dumped process\n\
- -d, --verbose be verbose while dumping\n\
- -h, --help output help information and exit\n\
- -q, --quiet be quiet while dumping (default)\n\
- -V, --version output version information and exit\n\
-\n", program_invocation_short_name);
- exit (status);
-}
-
-struct option longopts[] = {
- {"type", required_argument, NULL, 't'},
- {"nokill", no_argument, NULL, 'n'},
- {"verbose", no_argument, NULL, 'd'},
- {"help", no_argument, NULL, 'h'},
- {"quiet", no_argument, NULL, 'q'},
- {"version", no_argument, 0, 'V'},
- {0, no_argument, NULL, 0}
-};
-const char *opts = "t:ndhqV";
-
-static void
-print_version ()
-{
- printf ("minidumper (cygwin) %d.%d.%d\n"
- "Minidump write for Cygwin\n"
- "Copyright (C) 1999 - %s Red Hat, Inc.\n"
- "This is free software; see the source for copying conditions. There is NO\n"
- "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n",
- CYGWIN_VERSION_DLL_MAJOR / 1000,
- CYGWIN_VERSION_DLL_MAJOR % 1000,
- CYGWIN_VERSION_DLL_MINOR,
- strrchr (__DATE__, ' ') + 1);
-}
-
-int
-main (int argc, char **argv)
-{
- int opt;
- const char *p = "";
- DWORD pid;
- BOOL default_dump_type = TRUE;
- MINIDUMP_TYPE dump_type = MiniDumpNormal;
-
- while ((opt = getopt_long (argc, argv, opts, longopts, NULL) ) != EOF)
- switch (opt)
- {
- case 't':
- {
- char *endptr;
- default_dump_type = FALSE;
- dump_type = (MINIDUMP_TYPE)strtoul(optarg, &endptr, 0);
- if (*endptr != '\0')
- {
- fprintf (stderr, "syntax error in minidump type \"%s\" near character #%d.\n", optarg, (int) (endptr - optarg));
- exit(1);
- }
- }
- break;
- case 'n':
- nokill = TRUE;
- break;
- case 'd':
- verbose = TRUE;
- break;
- case 'q':
- verbose = FALSE;
- break;
- case 'h':
- usage (stdout, 0);
- case 'V':
- print_version ();
- exit (0);
- default:
- fprintf (stderr, "Try `%s --help' for more information.\n",
- program_invocation_short_name);
- exit (1);
- }
-
- if (argv && *(argv + optind) && *(argv + optind +1))
- {
- ssize_t len = cygwin_conv_path (CCP_POSIX_TO_WIN_A | CCP_RELATIVE,
- *(argv + optind), NULL, 0);
- char *win32_name = (char *) alloca (len);
- cygwin_conv_path (CCP_POSIX_TO_WIN_A | CCP_RELATIVE, *(argv + optind),
- win32_name, len);
- if ((p = strrchr (win32_name, '\\')))
- p++;
- else
- p = win32_name;
-
- pid = strtoul (*(argv + optind + 1), NULL, 10);
- }
- else
- {
- usage (stderr, 1);
- return -1;
- }
-
- char *minidump_file = (char *) malloc (strlen (p) + sizeof (".dmp"));
- if (!minidump_file)
- {
- fprintf (stderr, "error allocating memory\n");
- return -1;
- }
- sprintf (minidump_file, "%s.dmp", p);
-
- if (default_dump_type)
- {
- dump_type = MiniDumpWithHandleData | MiniDumpWithFullMemoryInfo
- | MiniDumpWithThreadInfo | MiniDumpWithFullAuxiliaryState
- | MiniDumpIgnoreInaccessibleMemory | MiniDumpWithTokenInformation
- | MiniDumpWithIndirectlyReferencedMemory;
-
- /*
- Only filter out unsupported dump_type flags if we are using the default
- dump type, so that future dump_type flags can be explicitly used even if
- we don't know about them
- */
- dump_type = filter_minidump_type(dump_type);
- }
-
- if (verbose)
- printf ("dumping process %u to %s using dump type flags 0x%x\n", (unsigned int)pid, minidump_file, (unsigned int)dump_type);
-
- minidump(pid, dump_type, minidump_file);
-
- free (minidump_file);
-};
diff --git a/winsup/utils/mkgroup.c b/winsup/utils/mkgroup.c
deleted file mode 100644
index f70bae4ae..000000000
--- a/winsup/utils/mkgroup.c
+++ /dev/null
@@ -1,796 +0,0 @@
-/* mkgroup.c:
-
- Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
- 2008, 2009, 2010, 2011, 2012, 2013, 2014 Red Hat, Inc.
-
- This file is part of Cygwin.
-
- This software is a copyrighted work licensed under the terms of the
- Cygwin license. Please consult the file "CYGWIN_LICENSE" for
- details. */
-
-#define _WIN32_WINNT 0x0600
-#include <errno.h>
-#include <ctype.h>
-#include <stdlib.h>
-#include <wchar.h>
-#include <wctype.h>
-#include <locale.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <inttypes.h>
-#include <getopt.h>
-#include <io.h>
-#include <grp.h>
-#include <sys/fcntl.h>
-#include <sys/cygwin.h>
-#include <cygwin/version.h>
-#include <windows.h>
-#include <lm.h>
-#include <wininet.h>
-#include <iptypes.h>
-#include <ntsecapi.h>
-#include <ntdef.h>
-
-#define print_win_error(x) _print_win_error(x, __LINE__)
-
-#define MAX_SID_LEN 40
-
-SID_IDENTIFIER_AUTHORITY sid_world_auth = {SECURITY_WORLD_SID_AUTHORITY};
-SID_IDENTIFIER_AUTHORITY sid_nt_auth = {SECURITY_NT_AUTHORITY};
-
-#ifndef min
-#define min(a,b) (((a)<(b))?(a):(b))
-#endif
-
-typedef struct
-{
- char *str;
- BOOL domain;
- BOOL with_dom;
-} domlist_t;
-
-static void
-_print_win_error (DWORD code, int line)
-{
- char buf[4096];
-
- if (FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM
- | FORMAT_MESSAGE_IGNORE_INSERTS,
- NULL,
- code,
- MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT),
- (LPTSTR) buf, sizeof (buf), NULL))
- fprintf (stderr, "mkgroup (%d): [%" PRIu32 "] %s",
- line, (unsigned int) code, buf);
- else
- fprintf (stderr, "mkgroup (%d): error %" PRIu32 ,
- line, (unsigned int) code);
-}
-
-static char *
-put_sid (PSID psid)
-{
- static char s[512];
- char t[32];
- DWORD i;
-
- strcpy (s, "S-1-");
- sprintf(t, "%u", GetSidIdentifierAuthority (psid)->Value[5]);
- strcat (s, t);
- for (i = 0; i < *GetSidSubAuthorityCount (psid); ++i)
- {
- sprintf(t, "-%" PRIu32 , (unsigned int) *GetSidSubAuthority (psid, i));
- strcat (s, t);
- }
- return s;
-}
-
-typedef struct {
- BYTE Revision;
- BYTE SubAuthorityCount;
- SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
- DWORD SubAuthority[8];
-} DBGSID, *PDBGSID;
-
-#define MAX_BUILTIN_SIDS 100 /* Should be enough for the forseable future. */
-DBGSID builtin_sid_list[MAX_BUILTIN_SIDS];
-DWORD builtin_sid_cnt;
-
-typedef struct {
- PSID psid;
- int buffer[10];
-} sidbuf;
-
-static sidbuf curr_pgrp;
-static BOOL got_curr_pgrp = FALSE;
-
-static void
-fetch_current_pgrp_sid ()
-{
- DWORD len;
- HANDLE ptok;
-
- if (!OpenProcessToken (GetCurrentProcess (), TOKEN_QUERY, &ptok)
- || !GetTokenInformation (ptok, TokenPrimaryGroup, &curr_pgrp,
- sizeof curr_pgrp, &len)
- || !CloseHandle (ptok))
- {
- print_win_error (GetLastError ());
- return;
- }
-}
-
-static void
-enum_unix_groups (domlist_t *mach, const char *sep, DWORD id_offset,
- char *unix_grp_list)
-{
- WCHAR machine[INTERNET_MAX_HOST_NAME_LENGTH + 1];
- SID_IDENTIFIER_AUTHORITY auth = { { 0, 0, 0, 0, 0, 22 } };
- char *gstr, *grp_list;
- WCHAR grp[GNLEN + sizeof ("Unix Group\\") + 1];
- WCHAR dom[MAX_DOMAIN_NAME_LEN + 1];
- DWORD glen, dlen, sidlen;
- PSID psid;
- char psid_buffer[MAX_SID_LEN];
- SID_NAME_USE acc_type;
-
- int ret = mbstowcs (machine, mach->str, INTERNET_MAX_HOST_NAME_LENGTH + 1);
- if (ret < 1 || ret >= INTERNET_MAX_HOST_NAME_LENGTH + 1)
- {
- fprintf (stderr, "%s: Invalid machine name '%s'. Skipping...\n",
- program_invocation_short_name, mach->str);
- return;
- }
-
- if (!AllocateAndInitializeSid (&auth, 2, 2, 0, 0, 0, 0, 0, 0, 0, &psid))
- return;
-
- if (!(grp_list = strdup (unix_grp_list)))
- {
- FreeSid (psid);
- return;
- }
-
- for (gstr = strtok (grp_list, ","); gstr; gstr = strtok (NULL, ","))
- {
- if (!isdigit ((unsigned char) gstr[0]) && gstr[0] != '-')
- {
- PWCHAR p = wcpcpy (grp, L"Unix Group\\");
- ret = mbstowcs (p, gstr, GNLEN + 1);
- if (ret < 1 || ret >= GNLEN + 1)
- fprintf (stderr, "%s: Invalid group name '%s'. Skipping...\n",
- program_invocation_short_name, gstr);
- else if (LookupAccountNameW (machine, grp,
- psid = (PSID) psid_buffer,
- (sidlen = MAX_SID_LEN, &sidlen),
- dom,
- (dlen = MAX_DOMAIN_NAME_LEN + 1, &dlen),
- &acc_type))
- printf ("%s%s%ls:%s:%" PRIu32 ":\n",
- "Unix_Group",
- sep,
- p,
- put_sid (psid),
- (unsigned int) (id_offset +
- *GetSidSubAuthority (psid,
- *GetSidSubAuthorityCount(psid) - 1)));
- }
- else
- {
- DWORD start, stop;
- char *p = gstr;
- if (*p == '-')
- start = 0;
- else
- start = strtol (p, &p, 10);
- if (!*p)
- stop = start;
- else if (*p++ != '-' || !isdigit ((unsigned char) *p)
- || (stop = strtol (p, &p, 10)) < start || *p)
- {
- fprintf (stderr, "%s: Malformed unix group list entry '%s'. "
- "Skipping...\n",
- program_invocation_short_name, gstr);
- continue;
- }
- for (; start <= stop; ++ start)
- {
- *GetSidSubAuthority (psid, *GetSidSubAuthorityCount(psid) - 1)
- = start;
- if (LookupAccountSidW (machine, psid,
- grp, (glen = GNLEN + 1, &glen),
- dom,
- (dlen = MAX_DOMAIN_NAME_LEN + 1, &dlen),
- &acc_type)
- && !iswdigit (grp[0]))
- printf ("%s%s%ls:%s:%" PRIu32 ":\n",
- "Unix_Group",
- sep,
- grp,
- put_sid (psid),
- (unsigned int) (id_offset + start));
- }
- }
- }
-
- free (grp_list);
- FreeSid (psid);
-}
-
-static int
-enum_local_groups (domlist_t *mach, const char *sep,
- DWORD id_offset, char *disp_groupname, int print_builtin,
- int print_current)
-{
- WCHAR machine[INTERNET_MAX_HOST_NAME_LENGTH + 1];
- LOCALGROUP_INFO_0 *buffer;
- DWORD entriesread = 0;
- DWORD totalentries = 0;
- DWORD_PTR resume_handle = 0;
- WCHAR gname[GNLEN + 1];
- DWORD rc;
-
- int ret = mbstowcs (machine, mach->str, INTERNET_MAX_HOST_NAME_LENGTH + 1);
- if (ret < 1 || ret >= INTERNET_MAX_HOST_NAME_LENGTH + 1)
- {
- fprintf (stderr, "%s: Invalid machine name '%s'. Skipping...\n",
- program_invocation_short_name, mach->str);
- return 1;
- }
-
- do
- {
- DWORD i;
-
- if (disp_groupname)
- {
- mbstowcs (gname, disp_groupname, GNLEN + 1);
- rc = NetLocalGroupGetInfo (machine, gname, 0, (void *) &buffer);
- if (rc == ERROR_SUCCESS)
- entriesread = 1;
- /* Allow further searching for the group and avoid annoying
- error messages just because the group is not a local group or
- the group hasn't been found. */
- else if (rc == ERROR_NO_SUCH_ALIAS || rc == NERR_GroupNotFound)
- return 0;
- }
- else
- rc = NetLocalGroupEnum (machine, 0, (void *) &buffer,
- MAX_PREFERRED_LENGTH, &entriesread,
- &totalentries, &resume_handle);
- switch (rc)
- {
- case ERROR_ACCESS_DENIED:
- print_win_error (rc);
- return 1;
-
- case ERROR_MORE_DATA:
- case ERROR_SUCCESS:
- break;
-
- default:
- print_win_error (rc);
- return 1;
- }
-
- for (i = 0; i < entriesread; i++)
- {
- WCHAR domain_name[MAX_DOMAIN_NAME_LEN + 1];
- DWORD domname_len = MAX_DOMAIN_NAME_LEN + 1;
- char psid_buffer[MAX_SID_LEN];
- PSID psid = (PSID) psid_buffer;
- DWORD sid_length = MAX_SID_LEN;
- DWORD gid;
- SID_NAME_USE acc_type;
- PDBGSID pdsid;
- BOOL is_builtin = FALSE;
-
- if (!LookupAccountNameW (machine, buffer[i].lgrpi0_name, psid,
- &sid_length, domain_name, &domname_len,
- &acc_type))
- {
- print_win_error (GetLastError ());
- fprintf (stderr, " (%ls)\n", buffer[i].lgrpi0_name);
- continue;
- }
- else if (acc_type == SidTypeDomain)
- {
- WCHAR domname[MAX_DOMAIN_NAME_LEN + GNLEN + 2];
-
- wcscpy (domname, domain_name);
- wcscat (domname, L"\\");
- wcscat (domname, buffer[i].lgrpi0_name);
- sid_length = MAX_SID_LEN;
- domname_len = MAX_DOMAIN_NAME_LEN + 1;
- if (!LookupAccountNameW (machine, domname,
- psid, &sid_length,
- domain_name, &domname_len,
- &acc_type))
- {
- print_win_error (GetLastError ());
- fprintf(stderr, " (%ls)\n", domname);
- continue;
- }
- }
-
- /* Store all local SIDs with prefix "S-1-5-32-" and check if it
- has been printed already. This allows to get all builtin
- groups exactly once and not once per domain. */
- pdsid = (PDBGSID) psid;
- if (pdsid->IdentifierAuthority.Value[5] == sid_nt_auth.Value[5]
- && pdsid->SubAuthority[0] == SECURITY_BUILTIN_DOMAIN_RID)
- {
- int b;
-
- if (!print_builtin)
- goto skip_group;
- is_builtin = TRUE;
- if (builtin_sid_cnt)
- for (b = 0; b < builtin_sid_cnt; b++)
- if (EqualSid (&builtin_sid_list[b], psid))
- goto skip_group;
- if (builtin_sid_cnt < MAX_BUILTIN_SIDS)
- CopySid (sizeof (DBGSID), &builtin_sid_list[builtin_sid_cnt++],
- psid);
- }
- if (!print_current)
- /* fall through */;
- else if (EqualSid (curr_pgrp.psid, psid))
- got_curr_pgrp = TRUE;
-
- gid = *GetSidSubAuthority (psid, *GetSidSubAuthorityCount(psid) - 1);
- printf ("%ls%s%ls:%s:%" PRIu32 ":\n",
- mach->with_dom && !is_builtin ? domain_name : L"",
- mach->with_dom && !is_builtin ? sep : "",
- buffer[i].lgrpi0_name,
- put_sid (psid),
- (unsigned int) (gid + (is_builtin ? 0 : id_offset)));
-skip_group:
- ;
- }
-
- NetApiBufferFree (buffer);
-
- }
- while (rc == ERROR_MORE_DATA);
-
- /* Return 1 if the single group we're looking for has been found here to
- avoid calling enum_groups for the same group, thus avoiding a spurious
- error message "group name could not be found" in enum_groups. */
- return disp_groupname && entriesread ? 1 : 0;
-}
-
-static void
-enum_groups (domlist_t *mach, const char *sep, DWORD id_offset,
- char *disp_groupname, int print_current)
-{
- WCHAR machine[INTERNET_MAX_HOST_NAME_LENGTH + 1];
- GROUP_INFO_2 *buffer;
- DWORD entriesread = 0;
- DWORD totalentries = 0;
- DWORD_PTR resume_handle = 0;
- WCHAR gname[GNLEN + 1];
- DWORD rc;
-
- int ret = mbstowcs (machine, mach->str, INTERNET_MAX_HOST_NAME_LENGTH + 1);
- if (ret < 1 || ret >= INTERNET_MAX_HOST_NAME_LENGTH + 1)
- {
- fprintf (stderr, "%s: Invalid machine name '%s'. Skipping...\n",
- program_invocation_short_name, mach->str);
- return;
- }
-
- do
- {
- DWORD i;
-
- if (disp_groupname != NULL)
- {
- mbstowcs (gname, disp_groupname, GNLEN + 1);
- rc = NetGroupGetInfo (machine, (LPWSTR) & gname, 2, (void *) &buffer);
- entriesread=1;
- /* Avoid annoying error messages just because the group hasn't been
- found. */
- if (rc == NERR_GroupNotFound)
- return;
- }
- else
- rc = NetGroupEnum (machine, 2, (void *) & buffer, MAX_PREFERRED_LENGTH,
- &entriesread, &totalentries, &resume_handle);
- switch (rc)
- {
- case ERROR_ACCESS_DENIED:
- print_win_error (rc);
- return;
-
- case ERROR_MORE_DATA:
- case ERROR_SUCCESS:
- break;
-
- default:
- print_win_error (rc);
- return;
- }
-
- for (i = 0; i < entriesread; i++)
- {
- WCHAR domain_name[MAX_DOMAIN_NAME_LEN + 1];
- DWORD domname_len = MAX_DOMAIN_NAME_LEN + 1;
- char psid_buffer[MAX_SID_LEN];
- PSID psid = (PSID) psid_buffer;
- DWORD sid_length = MAX_SID_LEN;
- SID_NAME_USE acc_type;
-
- int gid = buffer[i].grpi2_group_id;
- if (!LookupAccountNameW (machine, buffer[i].grpi2_name,
- psid, &sid_length,
- domain_name, &domname_len,
- &acc_type))
- {
- print_win_error (GetLastError ());
- fprintf(stderr, " (%ls)\n", buffer[i].grpi2_name);
- continue;
- }
- else if (acc_type == SidTypeDomain)
- {
- WCHAR domname[MAX_DOMAIN_NAME_LEN + GNLEN + 2];
-
- wcscpy (domname, machine);
- wcscat (domname, L"\\");
- wcscat (domname, buffer[i].grpi2_name);
- sid_length = MAX_SID_LEN;
- domname_len = MAX_DOMAIN_NAME_LEN + 1;
- if (!LookupAccountNameW (machine, domname, psid, &sid_length,
- domain_name, &domname_len, &acc_type))
- {
- print_win_error (GetLastError ());
- fprintf(stderr, " (%ls)\n", domname);
- continue;
- }
- }
- if (!print_current)
- /* fall through */;
- else if (EqualSid (curr_pgrp.psid, psid))
- got_curr_pgrp = TRUE;
-
- printf ("%ls%s%ls:%s:%" PRIu32 ":\n",
- mach->with_dom ? domain_name : L"",
- mach->with_dom ? sep : "",
- buffer[i].grpi2_name,
- put_sid (psid),
- (unsigned int) (id_offset + gid));
- }
-
- NetApiBufferFree (buffer);
-
- }
- while (rc == ERROR_MORE_DATA);
-}
-
-static int
-usage (FILE * stream)
-{
- fprintf (stream,
-"Usage: %s [OPTION]...\n"
-"\n"
-"Write /etc/group-like output to stdout\n"
-"\n"
-"Don't use this command to generate a local /etc/group file, unless you\n"
-"really need one. See the Cygwin User's Guide for more information.\n"
-"\n"
-"Options:\n"
-"\n"
-" -l,--local [machine] Print local group accounts of \"machine\",\n"
-" from local machine if no machine specified.\n"
-" Automatically adding machine prefix for local\n"
-" machine depends on settings in /etc/nsswitch.conf.\n"
-" -L,--Local machine Ditto, but generate groupname with machine prefix.\n"
-" -d,--domain [domain] Print domain groups,\n"
-" from current domain if no domain specified.\n"
-" -c,--current Print current group.\n"
-" -S,--separator char For -L use character char as domain\\group\n"
-" separator in groupname instead of default '%s'.\n"
-" -o,--id-offset offset Change the default offset (0x10000) added to gids\n"
-" of foreign local machine accounts. Use with -l/-L.\n"
-" -g,--group groupname Only return information for the specified group.\n"
-" One of -l, -d must be specified, too.\n"
-" -b,--no-builtin Don't print BUILTIN groups.\n"
-" -U,--unix grouplist Print UNIX groups when using -l on a UNIX Samba\n"
-" server. Grouplist is a comma-separated list of\n"
-" groupnames or gid ranges (root,-25,50-100).\n"
-" Enumerating large ranges can take a long time!\n"
-" -h,--help Print this message.\n"
-" -v,--version Print version information and exit.\n"
-"\n"
-"Default is to print local groups on stand-alone machines, plus domain\n"
-"groups on domain controllers and domain member machines.\n"
-"\n", program_invocation_short_name,
- (const char *) cygwin_internal (CW_GETNSSSEP));
- return 1;
-}
-
-struct option longopts[] = {
- {"no-builtin", no_argument, NULL, 'b'},
- {"current", no_argument, NULL, 'c'},
- {"Current", no_argument, NULL, 'C'},
- {"domain", optional_argument, NULL, 'd'},
- {"Domain", optional_argument, NULL, 'D'},
- {"group", required_argument, NULL, 'g'},
- {"help", no_argument, NULL, 'h'},
- {"local", optional_argument, NULL, 'l'},
- {"Local", optional_argument, NULL, 'L'},
- {"id-offset", required_argument, NULL, 'o'},
- {"no-sids", no_argument, NULL, 's'},
- {"separator", required_argument, NULL, 'S'},
- {"users", no_argument, NULL, 'u'},
- {"unix", required_argument, NULL, 'U'},
- {"version", no_argument, NULL, 'V'},
- {0, no_argument, NULL, 0}
-};
-
-static char opts[] = "bcCd::D::g:hl::L::o:sS:uU:V";
-
-static void
-print_version ()
-{
- printf ("mkgroup (cygwin) %d.%d.%d\n"
- "Group File Generator\n"
- "Copyright (C) 1997 - %s Red Hat, Inc.\n"
- "This is free software; see the source for copying conditions. There is NO\n"
- "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n",
- CYGWIN_VERSION_DLL_MAJOR / 1000,
- CYGWIN_VERSION_DLL_MAJOR % 1000,
- CYGWIN_VERSION_DLL_MINOR,
- strrchr (__DATE__, ' ') + 1);
-}
-
-int
-main (int argc, char **argv)
-{
- int print_domlist = 0;
- domlist_t domlist[32];
- char cname[1024];
- char *opt, *p;
- int print_current = 0;
- int print_builtin = 1;
- char *print_unix = NULL;
- const char *sep_char = (const char *) cygwin_internal (CW_GETNSSSEP);
- DWORD id_offset = 0x10000, off;
- int c, i;
- char *disp_groupname = NULL;
- int optional_args = 0;
- uintptr_t nss_src = cygwin_internal (CW_GETNSS_GRP_SRC);
-
- if (!isatty (1))
- setmode (1, O_BINARY);
-
- /* Use locale from environment. If not set or set to "C", use UTF-8. */
- setlocale (LC_CTYPE, "");
- if (!strcmp (setlocale (LC_CTYPE, NULL), "C"))
- setlocale (LC_CTYPE, "en_US.UTF-8");
- fetch_current_pgrp_sid ();
-
- if (argc == 1)
- {
- int enums = ENUM_PRIMARY | ENUM_LOCAL | ENUM_BUILTIN;
- uintptr_t ticket = cygwin_internal (CW_SETENT, TRUE, enums, NULL);
- if (ticket)
- {
- struct group *grp;
-
- while ((grp = (struct group *) cygwin_internal (CW_GETENT, TRUE,
- ticket)))
- printf ("%s:%s:%u:\n", grp->gr_name, grp->gr_passwd, grp->gr_gid);
- cygwin_internal (CW_ENDENT, TRUE, ticket);
- }
- return 0;
- }
-
- unsetenv ("POSIXLY_CORRECT"); /* To get optional arg processing right. */
- while ((c = getopt_long (argc, argv, opts, longopts, NULL)) != EOF)
- switch (c)
- {
- case 'd':
- case 'D':
- case 'l':
- case 'L':
- if (print_domlist >= 32)
- {
- fprintf (stderr, "%s: Can not enumerate from more than 32 "
- "domains and machines.\n",
- program_invocation_short_name);
- return 1;
- }
- domlist[print_domlist].domain = (c == 'd' || c == 'D');
- opt = optarg ?:
- argv[optind] && argv[optind][0] != '-' ? argv[optind] : NULL;
- if (argv[optind] && opt == argv[optind])
- ++optional_args;
- for (i = 0; i < print_domlist; ++i)
- if (domlist[i].domain == domlist[print_domlist].domain
- && ((!domlist[i].str && !opt)
- || (domlist[i].str && opt
- && (off = strlen (domlist[i].str))
- && !strncmp (domlist[i].str, opt, off)
- && (!opt[off] || opt[off] == ','))))
- {
- fprintf (stderr, "%s: Duplicate %s '%s'. Skipping...\n",
- program_invocation_short_name,
- domlist[i].domain ? "domain" : "machine",
- domlist[i].str);
- break;
- }
- domlist[print_domlist].str = opt;
- if (opt && (p = strchr (opt, ',')))
- {
- if (p == opt)
- {
- fprintf (stderr, "%s: Malformed machine string '%s'. "
- "Skipping...\n", program_invocation_short_name, opt);
- break;
- }
- *p = '\0';
- }
- if (c == 'l' || c == 'L')
- {
- DWORD csize = sizeof cname;
-
- domlist[print_domlist].with_dom = (c == 'L');
- if (!opt)
- {
- /* If the system uses /etc/group exclusively as account DB,
- create local group names the old fashioned way. */
- if (nss_src == NSS_SRC_FILES)
- {
- GetComputerNameExA (ComputerNameNetBIOS, cname, &csize);
- domlist[print_domlist].str = cname;
- }
- }
- else if (nss_src != NSS_SRC_FILES)
- {
- /* If the system uses Windows account DBs, check if machine
- name is local machine. If so, remove the domain name to
- enforce system naming convention. */
- if (GetComputerNameExA (strchr (opt, '.')
- ? ComputerNameDnsFullyQualified
- : ComputerNameNetBIOS,
- cname, &csize)
- && strcasecmp (opt, cname) == 0)
- domlist[print_domlist].str = NULL;
- }
- }
- ++print_domlist;
- break;
- case 'S':
- sep_char = optarg;
- if (strlen (sep_char) > 1)
- {
- fprintf (stderr, "%s: Only one ASCII character allowed as "
- "domain\\user separator character.\n",
- program_invocation_short_name);
- return 1;
- }
- if (*sep_char == ':')
- {
- fprintf (stderr, "%s: Colon not allowed as domain\\user separator "
- "character.\n", program_invocation_short_name);
- return 1;
- }
- break;
- case 'U':
- print_unix = optarg;
- break;
- case 'c':
- case 'C':
- print_current = 1;
- break;
- case 'o':
- id_offset = strtol (optarg, NULL, 10);
- break;
- case 'b':
- print_builtin = 0;
- break;
- case 's':
- break;
- case 'u':
- break;
- case 'g':
- disp_groupname = optarg;
- break;
- case 'h':
- usage (stdout);
- return 0;
- case 'V':
- print_version ();
- return 0;
- default:
- fprintf (stderr, "Try `%s --help' for more information.\n", argv[0]);
- return 1;
- }
-
- optind += optional_args;
- if (argv[optind])
- {
- fprintf (stderr,
- "mkgroup: non-option command line argument `%s' is not allowed.\n"
- "Try `mkgroup --help' for more information.\n", argv[optind]);
- exit (1);
- }
-
- struct group *pgrp = NULL;
- if (print_current)
- pgrp = (struct group *) cygwin_internal (CW_GETGRSID, TRUE, curr_pgrp.psid);
-
- int enums = ENUM_NONE;
- WCHAR tdoms[print_domlist * 258];
- PWCHAR t = tdoms;
- if (!disp_groupname && print_builtin && print_domlist)
- enums |= ENUM_BUILTIN;
- for (i = 0; i < print_domlist; ++i)
- {
- if (domlist[i].domain)
- {
- if (domlist[i].str)
- {
- enums |= ENUM_TDOMS;
- t += mbstowcs (t, domlist[i].str, 257);
- *t++ = L'\0';
- }
- else
- enums |= ENUM_PRIMARY;
- }
- else if (!domlist[i].str)
- enums |= ENUM_LOCAL;
- }
- if (t > tdoms)
- *t++ = L'\0';
- if (enums)
- {
- uintptr_t ticket = cygwin_internal (CW_SETENT, TRUE, enums,
- t > tdoms ? tdoms : NULL);
- if (ticket)
- {
- struct group *grp;
- const char *nss_sep = (const char *) cygwin_internal (CW_GETNSSSEP);
-
- while ((grp = (struct group *)
- cygwin_internal (CW_GETENT, TRUE, ticket)))
- {
- if (disp_groupname
- && strcasecmp (disp_groupname, grp->gr_name) != 0
- && (!(p = strchr (grp->gr_name, nss_sep[0]))
- || strcasecmp (disp_groupname, p + 1) != 0))
- continue;
- printf ("%s:%s:%u:\n", grp->gr_name, grp->gr_passwd,
- grp->gr_gid);
- if (pgrp && !strcmp (grp->gr_passwd, pgrp->gr_passwd))
- got_curr_pgrp = TRUE;
- }
- cygwin_internal (CW_ENDENT, TRUE, ticket);
- }
- }
-
- if (print_current && !got_curr_pgrp)
- printf ("%s:%s:%u:\n", pgrp->gr_name, pgrp->gr_passwd, pgrp->gr_gid);
-
- off = 0xfd000000;
- for (i = 0; i < print_domlist; ++i)
- {
- if (domlist[i].domain || !domlist[i].str)
- continue;
- if (!enum_local_groups (domlist + i, sep_char,
- (nss_src == NSS_SRC_FILES) ? 0x30000 : off,
- disp_groupname, print_builtin, print_current))
- {
- enum_groups (domlist + i, sep_char,
- (nss_src == NSS_SRC_FILES) ? 0x30000 : off,
- disp_groupname, print_current);
- if (!domlist[i].domain && domlist[i].str && print_unix)
- enum_unix_groups (domlist + i, sep_char, 0xff000000, print_unix);
- off += id_offset;
- }
- }
-
- return 0;
-}
diff --git a/winsup/utils/mkpasswd.c b/winsup/utils/mkpasswd.c
deleted file mode 100644
index 553c993cc..000000000
--- a/winsup/utils/mkpasswd.c
+++ /dev/null
@@ -1,719 +0,0 @@
-/* mkpasswd.c:
-
- Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2006, 2008, 2009,
- 2010, 2011, 2012, 2013, 2014 Red Hat, Inc.
-
- This file is part of Cygwin.
-
- This software is a copyrighted work licensed under the terms of the
- Cygwin license. Please consult the file "CYGWIN_LICENSE" for
- details. */
-
-#define _WIN32_WINNT 0x0600
-#include <errno.h>
-#include <ctype.h>
-#include <stdlib.h>
-#include <wchar.h>
-#include <wctype.h>
-#include <locale.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <inttypes.h>
-#include <getopt.h>
-#include <io.h>
-#include <pwd.h>
-#include <sys/fcntl.h>
-#include <sys/cygwin.h>
-#include <cygwin/version.h>
-#include <windows.h>
-#include <lm.h>
-#include <iptypes.h>
-#include <wininet.h>
-#include <ntsecapi.h>
-#include <dsgetdc.h>
-#include <ntdef.h>
-
-#define print_win_error(x) _print_win_error(x, __LINE__)
-
-#define MAX_SID_LEN 40
-
-SID_IDENTIFIER_AUTHORITY sid_world_auth = {SECURITY_WORLD_SID_AUTHORITY};
-SID_IDENTIFIER_AUTHORITY sid_nt_auth = {SECURITY_NT_AUTHORITY};
-
-#ifndef min
-#define min(a,b) (((a)<(b))?(a):(b))
-#endif
-
-typedef struct
-{
- char *str;
- BOOL domain;
- BOOL with_dom;
-} domlist_t;
-
-static void
-_print_win_error(DWORD code, int line)
-{
- char buf[4096];
-
- if (FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM
- | FORMAT_MESSAGE_IGNORE_INSERTS,
- NULL,
- code,
- MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT),
- (LPTSTR) buf, sizeof (buf), NULL))
- fprintf (stderr, "mkpasswd (%d): [%" PRIu32 "] %s",
- line, (unsigned int) code, buf);
- else
- fprintf (stderr, "mkpasswd (%d): error %" PRIu32,
- line, (unsigned int) code);
-}
-
-static char *
-put_sid (PSID sid)
-{
- static char s[512];
- char t[32];
- DWORD i;
-
- strcpy (s, "S-1-");
- sprintf(t, "%u", GetSidIdentifierAuthority (sid)->Value[5]);
- strcat (s, t);
- for (i = 0; i < *GetSidSubAuthorityCount (sid); ++i)
- {
- sprintf(t, "-%" PRIu32, (unsigned int) *GetSidSubAuthority (sid, i));
- strcat (s, t);
- }
- return s;
-}
-
-static void
-uni2ansi (LPWSTR wcs, char *mbs, int size)
-{
- if (wcs)
- wcstombs (mbs, wcs, size);
- else
- *mbs = '\0';
-}
-
-typedef struct {
- PSID psid;
- int buffer[10];
-} sidbuf;
-
-static sidbuf curr_user;
-static sidbuf curr_pgrp;
-static BOOL got_curr_user = FALSE;
-
-static void
-fetch_current_user_sid ()
-{
- DWORD len;
- HANDLE ptok;
-
- if (!OpenProcessToken (GetCurrentProcess (), TOKEN_QUERY, &ptok)
- || !GetTokenInformation (ptok, TokenUser, &curr_user, sizeof curr_user,
- &len)
- || !GetTokenInformation (ptok, TokenPrimaryGroup, &curr_pgrp,
- sizeof curr_pgrp, &len)
- || !CloseHandle (ptok))
- {
- print_win_error (GetLastError ());
- return;
- }
-}
-
-static void
-enum_unix_users (domlist_t *mach, const char *sep, DWORD id_offset,
- char *unix_user_list)
-{
- WCHAR machine[INTERNET_MAX_HOST_NAME_LENGTH + 1];
- SID_IDENTIFIER_AUTHORITY auth = { { 0, 0, 0, 0, 0, 22 } };
- char *ustr, *user_list;
- WCHAR user[UNLEN + sizeof ("Unix User\\") + 1];
- WCHAR dom[MAX_DOMAIN_NAME_LEN + 1];
- DWORD ulen, dlen, sidlen;
- PSID psid;
- char psid_buffer[MAX_SID_LEN];
- SID_NAME_USE acc_type;
-
- int ret = mbstowcs (machine, mach->str, INTERNET_MAX_HOST_NAME_LENGTH + 1);
- if (ret < 1 || ret >= INTERNET_MAX_HOST_NAME_LENGTH + 1)
- {
- fprintf (stderr, "%s: Invalid machine name '%s'. Skipping...\n",
- program_invocation_short_name, mach->str);
- return;
- }
-
- if (!AllocateAndInitializeSid (&auth, 2, 1, 0, 0, 0, 0, 0, 0, 0, &psid))
- return;
-
- if (!(user_list = strdup (unix_user_list)))
- {
- FreeSid (psid);
- return;
- }
-
- for (ustr = strtok (user_list, ","); ustr; ustr = strtok (NULL, ","))
- {
- if (!isdigit ((unsigned char) ustr[0]) && ustr[0] != '-')
- {
- PWCHAR p = wcpcpy (user, L"Unix User\\");
- ret = mbstowcs (p, ustr, UNLEN + 1);
- if (ret < 1 || ret >= UNLEN + 1)
- fprintf (stderr, "%s: Invalid user name '%s'. Skipping...\n",
- program_invocation_short_name, ustr);
- else if (LookupAccountNameW (machine, user,
- psid = (PSID) psid_buffer,
- (sidlen = MAX_SID_LEN, &sidlen),
- dom,
- (dlen = MAX_DOMAIN_NAME_LEN + 1, &dlen),
- &acc_type))
- printf ("%s%s%ls:*:%" PRIu32 ":99999:,%s::\n",
- "Unix_User",
- sep,
- user + 10,
- (unsigned int) (id_offset +
- *GetSidSubAuthority (psid,
- *GetSidSubAuthorityCount(psid) - 1)),
- put_sid (psid));
- }
- else
- {
- DWORD start, stop;
- char *p = ustr;
- if (*p == '-')
- start = 0;
- else
- start = strtol (p, &p, 10);
- if (!*p)
- stop = start;
- else if (*p++ != '-' || !isdigit ((unsigned char) *p)
- || (stop = strtol (p, &p, 10)) < start || *p)
- {
- fprintf (stderr, "%s: Malformed unix user list entry '%s'. "
- "Skipping...\n",
- program_invocation_short_name, ustr);
- continue;
- }
- for (; start <= stop; ++ start)
- {
- *GetSidSubAuthority (psid, *GetSidSubAuthorityCount(psid) - 1)
- = start;
- if (LookupAccountSidW (machine, psid,
- user, (ulen = GNLEN + 1, &ulen),
- dom,
- (dlen = MAX_DOMAIN_NAME_LEN + 1, &dlen),
- &acc_type)
- && !iswdigit (user[0]))
- printf ("%s%s%ls:*:%" PRIu32 ":99999:,%s::\n",
- "Unix_User",
- sep,
- user,
- (unsigned int) (id_offset + start),
- put_sid (psid));
- }
- }
- }
-
- free (user_list);
- FreeSid (psid);
-}
-
-static int
-enum_users (domlist_t *mach, const char *sep, const char *passed_home_path,
- DWORD id_offset, char *disp_username, int print_current)
-{
- WCHAR machine[INTERNET_MAX_HOST_NAME_LENGTH + 1];
- USER_INFO_3 *buffer;
- DWORD entriesread = 0;
- DWORD totalentries = 0;
- DWORD resume_handle = 0;
- DWORD rc;
- WCHAR uni_name[UNLEN + 1];
-
- int ret = mbstowcs (machine, mach->str, INTERNET_MAX_HOST_NAME_LENGTH + 1);
- if (ret < 1 || ret >= INTERNET_MAX_HOST_NAME_LENGTH + 1)
- {
- fprintf (stderr, "%s: Invalid machine name '%s'. Skipping...\n",
- program_invocation_short_name, mach->str);
- return 1;
- }
-
- do
- {
- DWORD i;
-
- if (disp_username != NULL)
- {
- mbstowcs (uni_name, disp_username, UNLEN + 1);
- rc = NetUserGetInfo (machine, (LPWSTR) &uni_name, 3,
- (void *) &buffer);
- entriesread = 1;
- /* Avoid annoying error messages just because the user hasn't been
- found. */
- if (rc == NERR_UserNotFound)
- return 0;
- }
- else
- rc = NetUserEnum (machine, 3, FILTER_NORMAL_ACCOUNT,
- (void *) &buffer, MAX_PREFERRED_LENGTH,
- &entriesread, &totalentries, &resume_handle);
- switch (rc)
- {
- case ERROR_ACCESS_DENIED:
- print_win_error(rc);
- return 1;
-
- case ERROR_MORE_DATA:
- case ERROR_SUCCESS:
- break;
-
- default:
- print_win_error(rc);
- return 1;
- }
-
- for (i = 0; i < entriesread; i++)
- {
- char homedir_psx[PATH_MAX];
- WCHAR domain_name[MAX_DOMAIN_NAME_LEN + 1];
- DWORD domname_len = MAX_DOMAIN_NAME_LEN + 1;
- char psid_buffer[MAX_SID_LEN];
- PSID psid = (PSID) psid_buffer;
- DWORD sid_length = MAX_SID_LEN;
- SID_NAME_USE acc_type;
-
- int uid = buffer[i].usri3_user_id;
- int gid = buffer[i].usri3_primary_group_id;
- homedir_psx[0] = '\0';
- if (passed_home_path[0] == '\0')
- {
- if (buffer[i].usri3_home_dir[0] != L'\0')
- cygwin_conv_path (CCP_WIN_W_TO_POSIX | CCP_ABSOLUTE,
- buffer[i].usri3_home_dir, homedir_psx,
- PATH_MAX);
- else
- uni2ansi (buffer[i].usri3_name,
- stpcpy (homedir_psx, "/home/"), PATH_MAX - 6);
- }
- else
- uni2ansi (buffer[i].usri3_name,
- stpcpy (homedir_psx, passed_home_path),
- PATH_MAX - strlen (passed_home_path));
-
- if (!LookupAccountNameW (machine, buffer[i].usri3_name,
- psid, &sid_length, domain_name,
- &domname_len, &acc_type))
- {
- print_win_error(GetLastError ());
- fprintf(stderr, " (%ls)\n", buffer[i].usri3_name);
- continue;
- }
- else if (acc_type == SidTypeDomain)
- {
- WCHAR domname[MAX_DOMAIN_NAME_LEN + UNLEN + 2];
-
- wcscpy (domname, machine);
- wcscat (domname, L"\\");
- wcscat (domname, buffer[i].usri3_name);
- sid_length = MAX_SID_LEN;
- domname_len = sizeof (domname);
- if (!LookupAccountNameW (machine, domname, psid,
- &sid_length, domain_name,
- &domname_len, &acc_type))
- {
- print_win_error(GetLastError ());
- fprintf(stderr, " (%ls)\n", domname);
- continue;
- }
- }
- if (!print_current)
- /* fall through */;
- else if (EqualSid (curr_user.psid, psid))
- got_curr_user = TRUE;
-
- printf ("%ls%s%ls:*:%" PRIu32 ":%" PRIu32
- ":%ls%sU-%ls\\%ls,%s:%s:/bin/bash\n",
- mach->with_dom ? domain_name : L"",
- mach->with_dom ? sep : "",
- buffer[i].usri3_name,
- (unsigned int) (id_offset + uid),
- (unsigned int) (id_offset + gid),
- buffer[i].usri3_full_name ?: L"",
- buffer[i].usri3_full_name
- && buffer[i].usri3_full_name[0] ? "," : "",
- domain_name,
- buffer[i].usri3_name,
- put_sid (psid),
- homedir_psx);
- }
-
- NetApiBufferFree (buffer);
-
- }
- while (rc == ERROR_MORE_DATA);
-
- return 0;
-}
-
-static int
-usage (FILE * stream)
-{
- fprintf (stream,
-"Usage: %s [OPTIONS]...\n"
-"\n"
-"Write /etc/passwd-like output to stdout\n"
-"\n"
-"Don't use this command to generate a local /etc/passwd file, unless you\n"
-"really need one. See the Cygwin User's Guide for more information.\n"
-"\n"
-"Options:\n"
-"\n"
-" -l,--local [machine] Print local user accounts of \"machine\",\n"
-" from local machine if no machine specified.\n"
-" Automatically adding machine prefix for local\n"
-" machine depends on settings in /etc/nsswitch.conf.\n"
-" -L,--Local machine Ditto, but generate username with machine prefix.\n"
-" -d,--domain [domain] Print domain accounts,\n"
-" from current domain if no domain specified.\n"
-" -c,--current Print current user.\n"
-" -S,--separator char For -L use character char as domain\\user\n"
-" separator in username instead of the default '%s'.\n"
-" -o,--id-offset offset Change the default offset (0x10000) added to uids\n"
-" of foreign local machine accounts. Use with -l/-L.\n"
-" -u,--username username Only return information for the specified user.\n"
-" One of -l, -d must be specified, too\n"
-" -b,--no-builtin Don't print BUILTIN users.\n"
-" -p,--path-to-home path Use specified path instead of user account home dir\n"
-" or /home prefix.\n"
-" -U,--unix userlist Print UNIX users when using -l on a UNIX Samba\n"
-" server. Userlist is a comma-separated list of\n"
-" usernames or uid ranges (root,-25,50-100).\n"
-" Enumerating large ranges can take a long time!\n"
-" -h,--help Displays this message.\n"
-" -V,--version Version information and exit.\n"
-"\n"
-"Default is to print local accounts on stand-alone machines, domain accounts\n"
-"on domain controllers and domain member machines.\n"
-"\n", program_invocation_short_name,
- (const char *) cygwin_internal (CW_GETNSSSEP));
- return 1;
-}
-
-static struct option longopts[] = {
- {"no-builtin", no_argument, NULL, 'b'},
- {"current", no_argument, NULL, 'c'},
- {"Current", no_argument, NULL, 'C'},
- {"domain", optional_argument, NULL, 'd'},
- {"Domain", optional_argument, NULL, 'D'},
- {"local-groups", no_argument, NULL, 'g'},
- {"help", no_argument, NULL, 'h'},
- {"local", optional_argument, NULL, 'l'},
- {"Local", optional_argument, NULL, 'L'},
- {"no-mount", no_argument, NULL, 'm'},
- {"id-offset", required_argument, NULL, 'o'},
- {"path-to-home", required_argument, NULL, 'p'},
- {"no-sids", no_argument, NULL, 's'},
- {"separator", required_argument, NULL, 'S'},
- {"username", required_argument, NULL, 'u'},
- {"unix", required_argument, NULL, 'U'},
- {"version", no_argument, NULL, 'V'},
- {0, no_argument, NULL, 0}
-};
-
-static char opts[] = "bcCd::D::ghl::L::mo:sS:p:u:U:V";
-
-static void
-print_version ()
-{
- printf ("mkpasswd (cygwin) %d.%d.%d\n"
- "Passwd File Generator\n"
- "Copyright (C) 1997 - %s Red Hat, Inc.\n"
- "This is free software; see the source for copying conditions. There is NO\n"
- "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n",
- CYGWIN_VERSION_DLL_MAJOR / 1000,
- CYGWIN_VERSION_DLL_MAJOR % 1000,
- CYGWIN_VERSION_DLL_MINOR,
- strrchr (__DATE__, ' ') + 1);
-}
-
-int
-main (int argc, char **argv)
-{
- int print_domlist = 0;
- domlist_t domlist[32];
- char cname[1024];
- char *opt, *p, *ep;
- int print_current = 0;
- int print_builtin = 1;
- char *print_unix = NULL;
- const char *nss_sep = (const char *) cygwin_internal (CW_GETNSSSEP);
- const char *sep_char = nss_sep;
- DWORD id_offset = 0x10000, off;
- int c, i;
- char *disp_username = NULL;
- char passed_home_path[PATH_MAX];
- int optional_args = 0;
- uintptr_t nss_src = cygwin_internal (CW_GETNSS_PWD_SRC);
-
- passed_home_path[0] = '\0';
- if (!isatty (1))
- setmode (1, O_BINARY);
-
- /* Use locale from environment. If not set or set to "C", use UTF-8. */
- setlocale (LC_CTYPE, "");
- if (!strcmp (setlocale (LC_CTYPE, NULL), "C"))
- setlocale (LC_CTYPE, "en_US.UTF-8");
- fetch_current_user_sid ();
-
- if (argc == 1)
- {
- int enums = ENUM_PRIMARY | ENUM_LOCAL | ENUM_BUILTIN;
- uintptr_t ticket = cygwin_internal (CW_SETENT, FALSE, enums, NULL);
- if (ticket)
- {
- struct passwd *pwd;
-
- while ((pwd = (struct passwd *) cygwin_internal (CW_GETENT, FALSE,
- ticket)))
- printf ("%s:%s:%u:%u:%s:%s:%s\n", pwd->pw_name, pwd->pw_passwd,
- pwd->pw_uid, pwd->pw_gid, pwd->pw_gecos, pwd->pw_dir,
- pwd->pw_shell);
- cygwin_internal (CW_ENDENT, FALSE, ticket);
- }
- return 0;
- }
-
- unsetenv ("POSIXLY_CORRECT"); /* To get optional arg processing right. */
- while ((c = getopt_long (argc, argv, opts, longopts, NULL)) != EOF)
- switch (c)
- {
- case 'd':
- case 'D':
- case 'l':
- case 'L':
- if (print_domlist >= 32)
- {
- fprintf (stderr, "%s: Can not enumerate from more than 32 "
- "domains and machines.\n",
- program_invocation_short_name);
- return 1;
- }
- domlist[print_domlist].domain = (c == 'd' || c == 'D');
- opt = optarg ?:
- argv[optind] && argv[optind][0] != '-' ? argv[optind] : NULL;
- if (argv[optind] && opt == argv[optind])
- ++optional_args;
- for (i = 0; i < print_domlist; ++i)
- if (domlist[i].domain == domlist[print_domlist].domain
- && ((!domlist[i].str && !opt)
- || (domlist[i].str && opt
- && (off = strlen (domlist[i].str))
- && !strncmp (domlist[i].str, opt, off)
- && (!opt[off] || opt[off] == ','))))
- {
- fprintf (stderr, "%s: Duplicate %s '%s'. Skipping...\n",
- program_invocation_short_name,
- domlist[i].domain ? "domain" : "machine",
- domlist[i].str);
- break;
- }
- domlist[print_domlist].str = opt;
- if (opt && (p = strchr (opt, ',')))
- {
- if (p == opt)
- {
- fprintf (stderr, "%s: Malformed domain string '%s'. "
- "Skipping...\n", program_invocation_short_name, opt);
- break;
- }
- *p = '\0';
- }
- if (c == 'l' || c == 'L')
- {
- DWORD csize = sizeof cname;
-
- domlist[print_domlist].with_dom = (c == 'L');
- if (!opt)
- {
- /* If the system uses /etc/passwd exclusively as account DB,
- create local group names the old fashioned way. */
- if (nss_src == NSS_SRC_FILES)
- {
- GetComputerNameExA (ComputerNameNetBIOS, cname, &csize);
- domlist[print_domlist].str = cname;
- }
- }
- else if (nss_src != NSS_SRC_FILES)
- {
- /* If the system uses Windows account DBs, check if machine
- name is local machine. If so, remove the domain name to
- enforce system naming convention. */
- if (GetComputerNameExA (strchr (opt, '.')
- ? ComputerNameDnsFullyQualified
- : ComputerNameNetBIOS,
- cname, &csize)
- && strcasecmp (opt, cname) == 0)
- domlist[print_domlist].str = NULL;
- }
- }
- ++print_domlist;
- break;
- case 'S':
- sep_char = optarg;
- if (strlen (sep_char) > 1)
- {
- fprintf (stderr, "%s: Only one ASCII character allowed as "
- "domain\\user separator character.\n",
- program_invocation_short_name);
- return 1;
- }
- if (*sep_char == ':')
- {
- fprintf (stderr, "%s: Colon not allowed as domain\\user separator "
- "character.\n", program_invocation_short_name);
- return 1;
- }
- break;
- case 'U':
- print_unix = optarg;
- break;
- case 'c':
- case 'C':
- print_current = 1;
- break;
- case 'o':
- id_offset = strtoul (optarg, &ep, 10);
- break;
- case 'b':
- print_builtin = 0;
- break;
- case 'p':
- if (optarg[0] != '/')
- {
- fprintf (stderr, "%s: '%s' is not a fully qualified path.\n",
- program_invocation_short_name, optarg);
- return 1;
- }
- strcpy (passed_home_path, optarg);
- if (optarg[strlen (optarg)-1] != '/')
- strcat (passed_home_path, "/");
- break;
- case 'u':
- disp_username = optarg;
- break;
- case 'h':
- usage (stdout);
- return 0;
- case 'V':
- print_version ();
- return 0;
- case 'g': /* deprecated */
- case 's': /* deprecated */
- case 'm': /* deprecated */
- break;
- default:
- fprintf (stderr, "Try `%s --help' for more information.\n",
- program_invocation_short_name);
- return 1;
- }
-
- optind += optional_args;
- if (argv[optind])
- {
- fprintf (stderr,
- "mkpasswd: non-option command line argument `%s' is not allowed.\n"
- "Try `mkpasswd --help' for more information.\n", argv[optind]);
- exit (1);
- }
-
- struct passwd *ppwd = NULL;
- const char *ppwd_sid = NULL;
- if (print_current)
- {
- ppwd = (struct passwd *) cygwin_internal (CW_GETPWSID, TRUE,
- curr_user.psid);
- if (ppwd)
- ppwd_sid = strrchr (ppwd->pw_gecos, ',');
- }
-
- int enums = ENUM_NONE;
- WCHAR tdoms[print_domlist * 258];
- PWCHAR t = tdoms;
- if (!disp_username && print_builtin && print_domlist)
- enums |= ENUM_BUILTIN;
- for (i = 0; i < print_domlist; ++i)
- {
- if (domlist[i].domain)
- {
- if (domlist[i].str)
- {
- enums |= ENUM_TDOMS;
- t += mbstowcs (t, domlist[i].str, 257);
- *t++ = L'\0';
- }
- else
- enums |= ENUM_PRIMARY;
- }
- else if (!domlist[i].str)
- enums |= ENUM_LOCAL;
- }
- if (t > tdoms)
- *t++ = L'\0';
- if (enums)
- {
- uintptr_t ticket = cygwin_internal (CW_SETENT, FALSE, enums,
- t > tdoms ? tdoms : NULL);
- if (ticket)
- {
- struct passwd *pwd;
-
- while ((pwd = (struct passwd *)
- cygwin_internal (CW_GETENT, FALSE, ticket)))
- {
- p = NULL;
- if (disp_username
- && strcasecmp (disp_username, pwd->pw_name) != 0
- && (!(p = strchr (pwd->pw_name, nss_sep[0]))
- || strcasecmp (disp_username, p + 1) != 0))
- continue;
- printf ("%s:%s:%u:%u:%s:%s%s:%s\n", pwd->pw_name, pwd->pw_passwd,
- pwd->pw_uid, pwd->pw_gid, pwd->pw_gecos,
- passed_home_path[0] ? passed_home_path : "",
- passed_home_path[0] ? (p ? p + 1 : pwd->pw_name)
- : pwd->pw_dir,
- pwd->pw_shell);
- const char *pwd_sid = strrchr (pwd->pw_gecos, ',');
- if (ppwd && ppwd_sid && pwd_sid && !strcmp (pwd_sid, ppwd_sid))
- got_curr_user = TRUE;
- }
- cygwin_internal (CW_ENDENT, FALSE, ticket);
- }
- }
-
- if (print_current && !got_curr_user)
- {
- p = strchr (ppwd->pw_name, nss_sep[0]);
- printf ("%s:%s:%u:%u:%s:%s%s:%s\n", ppwd->pw_name, ppwd->pw_passwd,
- ppwd->pw_uid, ppwd->pw_gid, ppwd->pw_gecos,
- passed_home_path[0] ? passed_home_path : "",
- passed_home_path[0] ? (p ? p + 1 : ppwd->pw_name) : ppwd->pw_dir,
- ppwd->pw_shell);
- }
-
- off = 0xfd000000;
- for (i = 0; i < print_domlist; ++i)
- {
- if (domlist[i].domain || !domlist[i].str)
- continue;
- enum_users (domlist + i, sep_char, passed_home_path,
- (nss_src == NSS_SRC_FILES) ? 0x30000 : off,
- disp_username, print_current);
- if (!domlist[i].domain && domlist[i].str && print_unix)
- enum_unix_users (domlist + i, sep_char, 0xff000000, print_unix);
- off += id_offset;
- }
-
- return 0;
-}
diff --git a/winsup/utils/module_info.cc b/winsup/utils/module_info.cc
deleted file mode 100644
index 1437da421..000000000
--- a/winsup/utils/module_info.cc
+++ /dev/null
@@ -1,72 +0,0 @@
-/* module_info.cc
-
- Copyright 1999, 2000, 2001, 2010, 2013 Red Hat, Inc.
-
- Written by Egor Duda <deo@logos-m.ru>
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include <stdlib.h>
-#include <windows.h>
-#include <psapi.h>
-#include "loadlib.h"
-
-/* Returns full name of Dll, which is loaded by hProcess at BaseAddress.
- Uses psapi.dll. */
-
-char *
-psapi_get_module_name (HANDLE hProcess, LPVOID BaseAddress)
-{
- DWORD len;
- MODULEINFO mi;
- unsigned int i;
- HMODULE dh_buf[1];
- HMODULE *DllHandle = dh_buf;
- DWORD cbNeeded;
- BOOL ok;
-
- char name_buf[MAX_PATH + 1];
-
- ok = EnumProcessModules (hProcess, DllHandle, sizeof (HMODULE), &cbNeeded);
-
- if (!ok || !cbNeeded)
- goto failed;
- DllHandle = (HMODULE *) malloc (cbNeeded);
- if (!DllHandle)
- goto failed;
- ok = EnumProcessModules (hProcess, DllHandle, cbNeeded, &cbNeeded);
- if (!ok)
- {
- free (DllHandle);
- goto failed;
- }
-
- for (i = 0; i < cbNeeded / sizeof (HMODULE); i++)
- {
- if (!GetModuleInformation (hProcess, DllHandle[i], &mi, sizeof (mi)))
- {
- free (DllHandle);
- goto failed;
- }
-
- len = GetModuleFileNameExA (hProcess, DllHandle[i], name_buf, MAX_PATH);
- if (len == 0)
- {
- free (DllHandle);
- goto failed;
- }
-
- if (mi.lpBaseOfDll == BaseAddress)
- {
- free (DllHandle);
- return strdup (name_buf);
- }
- }
-
-failed:
- return NULL;
-}
diff --git a/winsup/utils/mount.cc b/winsup/utils/mount.cc
deleted file mode 100644
index 650266d3f..000000000
--- a/winsup/utils/mount.cc
+++ /dev/null
@@ -1,557 +0,0 @@
-/* mount.cc
-
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2013 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include <stdio.h>
-#include <sys/mount.h>
-#include <sys/stat.h>
-#include <mntent.h>
-#include <windows.h>
-#include <sys/cygwin.h>
-#include <cygwin/version.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <getopt.h>
-#include <dirent.h>
-#include "path.h"
-
-#include <errno.h>
-
-#define NT_MAX_PATH 32768
-
-#define EXEC_FLAGS (MOUNT_EXEC | MOUNT_NOTEXEC | MOUNT_CYGWIN_EXEC)
-
-static void mount_entries (void);
-static void show_mounts (void);
-static void show_cygdrive_info (void);
-static void change_cygdrive_prefix (const char *new_prefix, int flags);
-static int mount_already_exists (const char *posix_path, int flags);
-
-// static short create_missing_dirs = FALSE;
-static bool force = false;
-
-static const char *progname;
-
-static void
-error (const char *path)
-{
- fprintf (stderr, "%s: %s: %s\n", progname, path,
- (errno == EMFILE) ? "Too many mount entries" : strerror (errno));
- exit (1);
-}
-
-/* FIXME: do_mount should also print a warning message if the dev arg
- is a non-existent Win32 path. */
-
-static void
-do_mount (const char *dev, const char *where, int flags)
-{
- struct stat statbuf;
- int statres;
-
- statres = stat (where, &statbuf);
-
-#if 0
- if (statres == -1)
- {
- /* FIXME: this'll fail if mount dir is missing any parent dirs */
- if (create_missing_dirs == TRUE)
- {
- if (mkdir (where, 0755) == -1)
- fprintf (stderr, "Warning: unable to create %s!\n", where);
- else
- statres = 0; /* Pretend stat succeeded if we could mkdir. */
- }
- }
-#endif
-
- if (statres == -1)
- {
- if (!force)
- fprintf (stderr, "%s: warning - %s does not exist.\n", progname, where);
- }
- else if (!(statbuf.st_mode & S_IFDIR))
- {
- if (!force)
- fprintf (stderr, "%s: warning: %s is not a directory.\n",
- progname, where);
- }
-
- if (!force && !(flags & (EXEC_FLAGS | MOUNT_BIND)) && strlen (dev))
- {
- char devtmp[1 + 2 * strlen (dev)];
- strcpy (devtmp, dev);
- char c = strchr (devtmp, '\0')[-1];
- if (c == '/' || c == '\\')
- strcat (devtmp, ".");
- /* Use a curious property of Windows which allows the use of \.. even
- on non-directory paths. */
- for (const char *p = dev; (p = strpbrk (p, "/\\")); p++)
- strcat (devtmp, "\\..");
- strcat (devtmp, "\\");
- if (GetDriveType (devtmp) == DRIVE_REMOTE)
- {
- fprintf (stderr,
- "%s: defaulting to 'notexec' mount option for speed since native path\n"
- "%*creferences a remote share. Use '-f' option to override.\n",
- progname, (int) strlen(progname) + 2, ' ');
- flags |= MOUNT_NOTEXEC;
- }
- }
-
- if (mount (dev, where, flags))
- error (where);
-}
-
-static void
-from_fstab (bool user)
-{
- char path[PATH_MAX];
- char buf[65536];
- mnt_t *m = mount_table + max_mount_entry;
-
- strcpy (path, "/etc/fstab");
- if (user)
- {
- strcat (path, ".d/");
- strcat (path, getlogin ());
- }
- FILE *fh = fopen (path, "rt");
- if (!fh)
- return;
- while (fgets (buf, 65536, fh))
- {
- char *c = strrchr (buf, '\n');
- if (c)
- *c = '\0';
- if (from_fstab_line (m, buf, user))
- ++m;
- }
- max_mount_entry = m - mount_table;
- fclose (fh);
-}
-
-static void
-do_mount_from_fstab (const char *where)
-{
- force = true;
- /* Read fstab entries. */
- from_fstab (false);
- from_fstab (true);
- /* Loop through fstab entries and see if it matches `where'. If `where'
- is NULL, all entries match. */
- bool exists = false;
- for (mnt_t *m = mount_table; m - mount_table < max_mount_entry; ++m)
- if (!where || !strcmp (where, m->posix))
- {
- if (m->flags & MOUNT_CYGDRIVE)
- {
- /* Get the cygdrive info */
- char user[MAX_PATH];
- char system[MAX_PATH];
- char user_flags[MAX_PATH];
- char system_flags[MAX_PATH];
-
- exists = true;
- cygwin_internal (CW_GET_CYGDRIVE_INFO, user, system, user_flags,
- system_flags);
- if ((*user && strcmp (user, m->posix) != 0)
- || (*system && strcmp (system, m->posix) != 0))
- if (mount (NULL, m->posix, m->flags))
- error (m->posix);
- }
- else
- {
- exists = true;
- /* Compare with existing mount table. If the entry doesn't exist,
- mount it. */
- FILE *mt = setmntent ("/-not-used-", "r");
- struct mntent *p;
-
- while ((p = getmntent (mt)) != NULL)
- if (!strcmp (m->posix, p->mnt_dir))
- break;
- if (!p)
- do_mount (m->native, m->posix, m->flags);
- endmntent (mt);
- if (where)
- break;
- }
- }
- if (!exists && where)
- fprintf (stderr,
- "%s: can't find %s in /etc/fstab or in /etc/fstab.d/$USER\n",
- progname, where);
-}
-
-static struct option longopts[] =
-{
- {"all", no_argument, NULL, 'a'},
- {"change-cygdrive-prefix", no_argument, NULL, 'c'},
- {"force", no_argument, NULL, 'f'},
- {"help", no_argument, NULL, 'h' },
- {"mount-entries", no_argument, NULL, 'm'},
- {"options", required_argument, NULL, 'o'},
- {"show-cygdrive-prefix", no_argument, NULL, 'p'},
- {"version", no_argument, NULL, 'V'},
- {NULL, 0, NULL, 0}
-};
-
-static char opts[] = "acfhmpVo:";
-
-static void
-usage (FILE *where = stderr)
-{
- char *options;
-
- fprintf (where, "Usage: %1$s [OPTION] [<win32path> <posixpath>]\n\
- %1$s -a\n\
- %1$s <posixpath>\n\
-\n\
-Display information about mounted filesystems, or mount a filesystem\n\
-\n\
- -a, --all mount all filesystems mentioned in fstab\n\
- -c, --change-cygdrive-prefix change the cygdrive path prefix to <posixpath>\n\
- -f, --force force mount, don't warn about missing mount\n\
- point directories\n\
- -h, --help output usage information and exit\n\
- -m, --mount-entries write fstab entries to replicate mount points\n\
- and cygdrive prefixes\n\
- -o, --options X[,X...] specify mount options\n\
- -p, --show-cygdrive-prefix show user and/or system cygdrive path prefix\n\
- -V, --version output version information and exit\n\n",
- progname);
- if (!cygwin_internal (CW_LST_MNT_OPTS, &options))
- fprintf (where, "Valid options are: %s\n\n", options);
- exit (where == stderr ? 1 : 0);
-}
-
-static void
-print_version ()
-{
- printf ("mount (cygwin) %d.%d.%d\n"
- "Mount filesystem utility\n"
- "Copyright (C) 1996 - %s Red Hat, Inc.\n"
- "This is free software; see the source for copying conditions. There is NO\n"
- "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n",
- CYGWIN_VERSION_DLL_MAJOR / 1000,
- CYGWIN_VERSION_DLL_MAJOR % 1000,
- CYGWIN_VERSION_DLL_MINOR,
- strrchr (__DATE__, ' ') + 1);
-}
-
-static char *
-concat3 (char *a, const char *b, const char *c)
-{
- size_t totlen = strlen (a) + strlen (b) + strlen (c) + 1;
- a = (char *) realloc (a, totlen);
- return strcat (strcat (a, b), c);
-}
-
-int
-main (int argc, char **argv)
-{
- int i;
- int flags = MOUNT_BINARY;
- char *options = strdup ("");
- enum do_what
- {
- nada,
- saw_change_cygdrive_prefix,
- saw_show_cygdrive_prefix,
- saw_mount_commands,
- saw_mount_all,
- } do_what = nada;
-
- progname = program_invocation_short_name;
-
- if (argc == 1)
- {
- show_mounts ();
- exit (0);
- }
-
- while ((i = getopt_long (argc, argv, opts, longopts, NULL)) != EOF)
- switch (i)
- {
- case 'a':
- if (do_what == nada)
- do_what = saw_mount_all;
- else
- usage ();
- break;
- case 'c':
- if (do_what == nada)
- do_what = saw_change_cygdrive_prefix;
- else
- usage ();
- break;
- case 'f':
- force = true;
- break;
- case 'h':
- usage (stdout);
- break;
- case 'm':
- if (do_what == nada)
- do_what = saw_mount_commands;
- else
- usage ();
- break;
- case 'o':
- if (do_what == saw_mount_all)
- usage ();
- else if (*options)
- options = concat3 (options, ",", optarg);
- else
- options = strdup (optarg);
- break;
- case 'p':
- if (do_what == nada)
- do_what = saw_show_cygdrive_prefix;
- else
- usage ();
- break;
- case 'V':
- print_version ();
- return 0;
- break;
- default:
- fprintf (stderr, "Try `%s --help' for more information.\n", progname);
- return 1;
- }
-
- if (cygwin_internal (CW_CVT_MNT_OPTS, &options, &flags))
- {
- fprintf (stderr, "%s: invalid option - '%s'\n", progname, options);
- exit (1);
- }
-
- if (flags & MOUNT_NOTEXEC && flags & (MOUNT_EXEC | MOUNT_CYGWIN_EXEC))
- {
- fprintf (stderr, "%s: invalid combination of executable options\n",
- progname);
- exit (1);
- }
-
- cygwin_internal (CW_SET_DOS_FILE_WARNING, false);
-
- argc--;
- switch (do_what)
- {
- case saw_change_cygdrive_prefix:
- if (optind != argc)
- usage ();
- change_cygdrive_prefix (argv[optind], flags);
- break;
- case saw_show_cygdrive_prefix:
- if (optind <= argc)
- usage ();
- show_cygdrive_info ();
- break;
- case saw_mount_commands:
- if (optind <= argc)
- usage ();
- mount_entries ();
- break;
- case saw_mount_all:
- if (optind <= argc)
- usage ();
- do_mount_from_fstab (NULL);
- break;
- default:
- if (optind == argc)
- do_mount_from_fstab (argv[optind]);
- else if (optind != (argc - 1))
- {
- fprintf (stderr, "%s: too many arguments\n", progname);
- usage ();
- }
- else if (force || !mount_already_exists (argv[optind + 1], flags))
- do_mount (argv[optind], argv[optind + 1], flags);
- else
- {
- errno = EBUSY;
- error (argv[optind + 1]);
- }
- }
-
- /* NOTREACHED */
- return 0;
-}
-
-static char *
-convert_spaces (char *tgt, const char *src)
-{
- char *tp, *spacep;
- const char *sp;
-
- tp = tgt;
- for (sp = src; (spacep = strchr (sp, ' ')); sp = spacep + 1)
- {
- tp = stpncpy (tp, sp, spacep - sp);
- tp = stpcpy (tp, "\\040");
- }
- stpcpy (tp, sp);
- return tgt;
-}
-
-static void
-mount_entries (void)
-{
- FILE *m = setmntent ("/-not-used-", "r");
- struct mntent *p;
- const char *format_mnt = "%s %s %s %s 0 0\n";
- const char *format_cyg = "none %s cygdrive %s 0 0\n";
-
- // write fstab entries for normal mount points
- while ((p = getmntent (m)) != NULL)
- // Only list non-cygdrives and non-automounts
- if (!strstr (p->mnt_opts, ",noumount") && !strstr (p->mnt_opts, ",auto"))
- {
- char fsname[NT_MAX_PATH], dirname[NT_MAX_PATH];
- /* Drop the "bind" option since it can't be reverted. */
- char *c = strstr (p->mnt_opts, ",bind");
- if (c)
- memmove (c, c + 5, strlen (c + 5) + 1);
- printf (format_mnt, convert_spaces (fsname, p->mnt_fsname),
- convert_spaces (dirname, p->mnt_dir),
- p->mnt_type, p->mnt_opts);
- }
- endmntent (m);
-
- // write fstab entry for cygdrive prefix
- m = setmntent ("/-not-used-", "r");
- while ((p = getmntent (m)) != NULL)
- {
- char *noumount;
- if ((noumount = strstr (p->mnt_opts, ",noumount")))
- {
- char dirname[NT_MAX_PATH];
- char opts[strlen (p->mnt_opts) + 1];
-
- convert_spaces (dirname, p->mnt_dir);
- // remove trailing slash
- char *ls = strrchr (dirname, '/');
- if (ls)
- {
- // last slash == leading slash? cygdrive prefix == "/"
- if (ls == dirname)
- ++ls;
- *ls = '\0';
- }
- *stpncpy (opts, p->mnt_opts, noumount - p->mnt_opts) = '\0';
- printf (format_cyg, dirname, opts);
- break;
- }
- }
- endmntent (m);
-
- exit(0);
-}
-
-static void
-show_mounts (void)
-{
- FILE *m = setmntent ("/-not-used-", "r");
- struct mntent *p;
- const char *format = "%s on %s type %s (%s)\n";
-
- // printf (format, "Device", "Directory", "Type", "Flags");
- while ((p = getmntent (m)) != NULL)
- printf (format, p->mnt_fsname, p->mnt_dir, p->mnt_type, p->mnt_opts);
- endmntent (m);
-}
-
-/* Return 1 if mountpoint from the same registry area is already in
- mount table. Otherwise return 0. */
-static int
-mount_already_exists (const char *posix_path, int flags)
-{
- int found_matching = 0;
-
- FILE *m = setmntent ("/-not-used-", "r");
- struct mntent *p;
-
- while ((p = getmntent (m)) != NULL)
- {
- /* if the paths match, and they're both the same type of mount. */
- if (strcmp (p->mnt_dir, posix_path) == 0)
- {
- if (p->mnt_type[0] == 'u')
- {
- if (!(flags & MOUNT_SYSTEM)) /* both current_user */
- found_matching = 1;
- else
- fprintf (stderr,
- "%s: warning: system mount point of '%s' "
- "will always be masked by user mount.\n",
- progname, posix_path);
- break;
- }
- else if (p->mnt_type[0] == 's')
- {
- if (flags & MOUNT_SYSTEM) /* both system */
- found_matching = 1;
- else
- fprintf (stderr,
- "%s: warning: user mount point of '%s' "
- "masks system mount.\n", progname, posix_path);
- break;
- }
- else
- {
- fprintf (stderr, "%s: warning: couldn't determine mount type.\n",
- progname);
- break;
- }
- }
- }
- endmntent (m);
-
- return found_matching;
-}
-
-/* change_cygdrive_prefix: Change the cygdrive prefix */
-static void
-change_cygdrive_prefix (const char *new_prefix, int flags)
-{
- flags |= MOUNT_CYGDRIVE;
-
- if (mount (NULL, new_prefix, flags))
- error (new_prefix);
-
- exit (0);
-}
-
-/* show_cygdrive_info: Show the user and/or cygdrive info, i.e., prefix and
- flags.*/
-static void
-show_cygdrive_info ()
-{
- /* Get the cygdrive info */
- char user[MAX_PATH];
- char system[MAX_PATH];
- char user_flags[MAX_PATH];
- char system_flags[MAX_PATH];
- cygwin_internal (CW_GET_CYGDRIVE_INFO, user, system, user_flags,
- system_flags);
-
- /* Display the user and system cygdrive path prefix, if necessary
- (ie, not empty) */
- const char *format = "%-18s %-11s %s\n";
- printf (format, "Prefix", "Type", "Flags");
- if (strlen (user) > 0)
- printf (format, user, "user", user_flags);
- if (strlen (system) > 0)
- printf (format, system, "nouser", system_flags);
-
- exit (0);
-}
diff --git a/winsup/utils/parse_pe.cc b/winsup/utils/parse_pe.cc
deleted file mode 100644
index c3ae7bb11..000000000
--- a/winsup/utils/parse_pe.cc
+++ /dev/null
@@ -1,105 +0,0 @@
-/* parse_pe.cc
-
- Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2012, 2013 Red Hat, Inc.
-
- Written by Egor Duda <deo@logos-m.ru>
-
- This file is part of Cygwin.
-
- 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 (file COPYING.dumper) 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#define PACKAGE
-#include <bfd.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "dumper.h"
-
-int
-exclusion::add (LPBYTE mem_base, SIZE_T mem_size)
-{
- while (last >= size)
- size += step;
- region = (process_mem_region *) realloc (region, size * sizeof (process_mem_region));
- if (region == NULL)
- return 0;
- region[last].base = mem_base;
- region[last].size = mem_size;
- last++;
- return 1;
-};
-
-int
-cmp_regions (const void *r1, const void *r2)
-{
- if (((process_mem_region *) r1)->base < ((process_mem_region *) r2)->base)
- return -1;
- if (((process_mem_region *) r1)->base > ((process_mem_region *) r2)->base)
- return 1;
- return 0;
-}
-
-int
-exclusion::sort_and_check ()
-{
- qsort (region, last, sizeof (process_mem_region), &cmp_regions);
- for (process_mem_region * p = region; p < region + last - 1; p++)
- {
- process_mem_region *q = p + 1;
- if (q == p + 1)
- continue;
- if (p->base + size > q->base)
- {
- fprintf (stderr, "region error @ (%p + %zd) > %p\n", p->base, size, q->base);
- return 0;
- }
- }
- return 1;
-}
-
-static void
-select_data_section (bfd * abfd, asection * sect, PTR obj)
-{
- exclusion *excl_list = (exclusion *) obj;
-
- if ((sect->flags & (SEC_CODE | SEC_DEBUGGING)) &&
- sect->vma && bfd_get_section_size (sect))
- {
- excl_list->add ((LPBYTE) sect->vma, (SIZE_T) bfd_get_section_size (sect));
- deb_printf ("excluding section: %20s %08lx\n", sect->name,
- bfd_get_section_size (sect));
- }
-}
-
-int
-parse_pe (const char *file_name, exclusion * excl_list)
-{
- if (file_name == NULL || excl_list == NULL)
- return 0;
-
- bfd *abfd = bfd_openr (file_name, "pei-i386");
- if (abfd == NULL)
- {
- bfd_perror ("failed to open file");
- return 0;
- }
-
- bfd_check_format (abfd, bfd_object);
- bfd_map_over_sections (abfd, &select_data_section, (PTR) excl_list);
- excl_list->sort_and_check ();
-
- bfd_close (abfd);
- return 1;
-}
diff --git a/winsup/utils/passwd.c b/winsup/utils/passwd.c
deleted file mode 100644
index 8a08189fa..000000000
--- a/winsup/utils/passwd.c
+++ /dev/null
@@ -1,675 +0,0 @@
-/* passwd.c: Changing passwords and managing account information
-
- Copyright 1999, 2000, 2001, 2002, 2003, 2005, 2008, 2009, 2011, 2012,
- 2013, 2014 Red Hat, Inc.
-
- Written by Corinna Vinschen <corinna.vinschen@cityweb.de>
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include <windows.h>
-#include <wininet.h>
-#include <lmaccess.h>
-#include <lmerr.h>
-#include <lmcons.h>
-#include <lmapibuf.h>
-#include <dsgetdc.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <inttypes.h>
-#include <getopt.h>
-#include <pwd.h>
-#include <sys/cygwin.h>
-#include <cygwin/version.h>
-#include <sys/types.h>
-#include <time.h>
-#include <errno.h>
-#include <locale.h>
-#include <wchar.h>
-
-#define USER_PRIV_ADMIN 2
-
-static char *prog_name;
-
-static struct option longopts[] =
-{
- {"cannot-change", no_argument, NULL, 'c'},
- {"can-change", no_argument, NULL, 'C'},
- {"logonserver", required_argument, NULL, 'd'},
- {"never-expires", no_argument, NULL, 'e'},
- {"expires", no_argument, NULL, 'E'},
- {"help", no_argument, NULL, 'h' },
- {"inactive", required_argument, NULL, 'i'},
- {"lock", no_argument, NULL, 'l'},
- {"minage", required_argument, NULL, 'n'},
- {"pwd-not-required", no_argument, NULL, 'p'},
- {"pwd-required", no_argument, NULL, 'P'},
- {"unlock", no_argument, NULL, 'u'},
- {"version", no_argument, NULL, 'V'},
- {"maxage", required_argument, NULL, 'x'},
- {"length", required_argument, NULL, 'L'},
- {"status", no_argument, NULL, 'S'},
- { "reg-store-pwd", no_argument, NULL, 'R'},
- {NULL, 0, NULL, 0}
-};
-
-static char opts[] = "cCd:eEhi:ln:pPuvVx:L:SR";
-
-int
-eprint (int with_name, const char *fmt, ...)
-{
- va_list ap;
-
- if (with_name)
- fprintf(stderr, "%s: ", prog_name);
- va_start (ap, fmt);
- vfprintf (stderr, fmt, ap);
- va_end (ap);
- fprintf(stderr, "\n");
- return 1;
-}
-
-int
-EvalRet (int ret, const char *user)
-{
- switch (ret)
- {
- case NERR_Success:
- return 0;
-
- case ERROR_ACCESS_DENIED:
- if (!user)
- eprint (0, "You may not change password expiry information.");
- else
- eprint (0, "You may not change the password for %s.", user);
- break;
-
- eprint (0, "Bad password: Invalid.");
- break;
-
- case NERR_PasswordTooShort:
- eprint (0, "Bad password: Too short.");
- break;
-
- case NERR_UserNotFound:
- eprint (1, "unknown user %s", user);
- break;
-
- case ERROR_INVALID_PASSWORD:
- case NERR_BadPassword:
- eprint (0, "Incorrect password for %s.", user);
- eprint (0, "The password for %s is unchanged.", user);
- break;
-
- default:
- eprint (1, "unrecoverable error %d", ret);
- break;
- }
- return 1;
-}
-
-PUSER_INFO_3
-GetPW (char *user, int print_win_name, LPWSTR *server)
-{
- char usr_buf[UNLEN + 1];
- WCHAR name[UNLEN + 1];
- DWORD ret;
- PUSER_INFO_3 ui;
- struct passwd *pw;
- char *domain = (char *) alloca (INTERNET_MAX_HOST_NAME_LENGTH + 1);
-
- /* Get the Win32 username and a suitable server. */
- if ((pw = getpwnam (user)))
- {
- cygwin_internal (CW_EXTRACT_DOMAIN_AND_USER, pw, domain, usr_buf);
- if (strcasecmp (pw->pw_name, usr_buf))
- {
- /* Hack to avoid problem with LookupAccountSid after impersonation */
- if (strcasecmp (usr_buf, "SYSTEM"))
- {
- user = usr_buf;
- if (print_win_name)
- printf ("Windows username : %s\n", user);
- }
- }
- if (!*server)
- {
- PDOMAIN_CONTROLLER_INFOW dci;
- char machine[INTERNET_MAX_HOST_NAME_LENGTH + 1];
- DWORD mlen = sizeof machine;
- WCHAR wdom[INTERNET_MAX_HOST_NAME_LENGTH + 1];
-
- /* If we can't fetch the local machine name, or if the machine name
- is not the same as the user's domain name, try to fetch the DC via
- DsGetDcName. Otherwise, just stick to a NULL servername, since
- that's the same as using the local machine. */
- if (!GetComputerNameExA (ComputerNameNetBIOS, machine, &mlen)
- || strcasecmp (domain, machine) != 0)
- {
- mbstowcs (wdom, domain, INTERNET_MAX_HOST_NAME_LENGTH + 1);
- if (!DsGetDcNameW (NULL, wdom, NULL, NULL, DS_IS_FLAT_NAME, &dci))
- *server = dci->DomainControllerName;
- }
- }
- }
- mbstowcs (name, user, UNLEN + 1);
- ret = NetUserGetInfo (*server, name, 3, (void *) &ui);
- return EvalRet (ret, user) ? NULL : ui;
-}
-
-int
-ChangePW (const char *user, PCWSTR name, const char *oldpwd, const char *pwd,
- int justcheck, LPCWSTR server)
-{
- WCHAR oldpass[512], pass[512];
- DWORD ret;
-
- mbstowcs (pass, pwd, 512);
- if (!oldpwd)
- {
- USER_INFO_1003 ui;
-
- ui.usri1003_password = pass;
- ret = NetUserSetInfo (server, name, 1003, (LPBYTE) &ui, NULL);
- }
- else
- {
- mbstowcs (oldpass, oldpwd, 512);
- ret = NetUserChangePassword (server, name, oldpass, pass);
- }
- if (justcheck && ret != ERROR_INVALID_PASSWORD)
- return 0;
- if (!EvalRet (ret, user) && !justcheck)
- eprint (0, "Password changed.");
- return ret;
-}
-
-void
-PrintPW (PUSER_INFO_3 ui, LPCWSTR server)
-{
- time_t t = time (NULL) - ui->usri3_password_age;
- int ret;
- PUSER_MODALS_INFO_0 mi;
-
- printf ("Account disabled : %s",
- (ui->usri3_flags & UF_ACCOUNTDISABLE) ? "yes\n" : "no\n");
- printf ("Password not required : %s",
- (ui->usri3_flags & UF_PASSWD_NOTREQD) ? "yes\n" : "no\n");
- printf ("User can't change password : %s",
- (ui->usri3_flags & UF_PASSWD_CANT_CHANGE) ? "yes\n" : "no\n");
- printf ("Password never expires : %s",
- (ui->usri3_flags & UF_DONT_EXPIRE_PASSWD) ? "yes\n" : "no\n");
- printf ("Password expired : %s",
- (ui->usri3_password_expired) ? "yes\n" : "no\n");
- printf ("Latest password change : %s", ctime(&t));
- ret = NetUserModalsGet (server, 0, (void *) &mi);
- if (!ret)
- {
- if (mi->usrmod0_max_passwd_age == TIMEQ_FOREVER)
- mi->usrmod0_max_passwd_age = 0;
- if (mi->usrmod0_min_passwd_age == TIMEQ_FOREVER)
- mi->usrmod0_min_passwd_age = 0;
- if (mi->usrmod0_force_logoff == TIMEQ_FOREVER)
- mi->usrmod0_force_logoff = 0;
- if (ui->usri3_priv == USER_PRIV_ADMIN)
- mi->usrmod0_min_passwd_len = 0;
- printf ("\nSystem password settings:\n");
- printf ("Max. password age %" PRIu32 " days\n",
- (unsigned int) (mi->usrmod0_max_passwd_age / ONE_DAY));
- printf ("Min. password age %" PRIu32 " days\n",
- (unsigned int) (mi->usrmod0_min_passwd_age / ONE_DAY));
- printf ("Force logout after %" PRIu32 " days\n",
- (unsigned int) (mi->usrmod0_force_logoff / ONE_DAY));
- printf ("Min. password length: %" PRIu32 "\n",
- (unsigned int) mi->usrmod0_min_passwd_len);
- }
-}
-
-int
-SetModals (int xarg, int narg, int iarg, int Larg, LPCWSTR server)
-{
- int ret;
- PUSER_MODALS_INFO_0 mi;
-
- ret = NetUserModalsGet (server, 0, (void *) &mi);
- if (!ret)
- {
- if (xarg == 0)
- mi->usrmod0_max_passwd_age = TIMEQ_FOREVER;
- else if (xarg > 0)
- mi->usrmod0_max_passwd_age = xarg * ONE_DAY;
-
- if (narg == 0)
- {
- mi->usrmod0_min_passwd_age = TIMEQ_FOREVER;
- mi->usrmod0_password_hist_len = 0;
- }
- else if (narg > 0)
- mi->usrmod0_min_passwd_age = narg * ONE_DAY;
-
- if (iarg == 0)
- mi->usrmod0_force_logoff = TIMEQ_FOREVER;
- else if (iarg > 0)
- mi->usrmod0_force_logoff = iarg * ONE_DAY;
-
- if (Larg >= 0)
- mi->usrmod0_min_passwd_len = Larg;
-
- ret = NetUserModalsSet (server, 0, (LPBYTE) mi, NULL);
- NetApiBufferFree (mi);
- }
- return EvalRet (ret, NULL);
-}
-
-static void usage (FILE * stream, int status) __attribute__ ((noreturn));
-static void
-usage (FILE * stream, int status)
-{
- fprintf (stream, ""
- "Usage: %s [OPTION] [USER]\n"
- "\n"
- "Change USER's password or password attributes.\n"
- "\n"
- "User operations:\n"
- " -l, --lock lock USER's account.\n"
- " -u, --unlock unlock USER's account.\n"
- " -c, --cannot-change USER can't change password.\n"
- " -C, --can-change USER can change password.\n"
- " -e, --never-expires USER's password never expires.\n"
- " -E, --expires USER's password expires according to system's\n"
- " password aging rule.\n"
- " -p, --pwd-not-required no password required for USER.\n"
- " -P, --pwd-required password is required for USER.\n"
- " -R, --reg-store-pwd enter password to store it in the registry for\n"
- " later usage by services to be able to switch\n"
- " to this user context with network credentials.\n"
- "\n"
- "System operations:\n"
- " -i, --inactive NUM set NUM of days before inactive accounts are disabled\n"
- " (inactive accounts are those with expired passwords).\n"
- " -n, --minage MINDAYS set system minimum password age to MINDAYS days.\n"
- " -x, --maxage MAXDAYS set system maximum password age to MAXDAYS days.\n"
- " -L, --length LEN set system minimum password length to LEN.\n"
- "\n"
- "Other options:\n"
- " -d, --logonserver SERVER connect to SERVER (e.g. domain controller).\n"
- " Usually not required.\n"
- " -S, --status display password status for USER (locked, expired,\n"
- " etc.) plus global system password settings.\n"
- " -h, --help output usage information and exit.\n"
- " -V, --version output version information and exit.\n"
- "\n"
- "If no option is given, change USER's password. If no user name is given,\n"
- "operate on current user. System operations must not be mixed with user\n"
- "operations. Don't specify a USER when triggering a system operation.\n"
- "\n"
- "Don't specify a user or any other option together with the -R option.\n"
- "Non-Admin users can only store their password if cygserver is running\n"
- "as service under the SYSTEM account.\n"
- "Note that storing even obfuscated passwords in the registry is not overly\n"
- "secure. Use this feature only if the machine is adequately locked down.\n"
- "Don't use this feature if you don't need network access within a remote\n"
- "session. You can delete your stored password by using `passwd -R' and\n"
- "specifying an empty password.\n\n", prog_name);
- exit (status);
-}
-
-static int
-caller_is_admin ()
-{
- static int is_admin = -1;
- HANDLE token;
- DWORD size;
- PTOKEN_GROUPS grps;
- SID_IDENTIFIER_AUTHORITY nt_auth = {SECURITY_NT_AUTHORITY};
- PSID admin_grp;
- DWORD i;
-
- if (is_admin == -1)
- {
- is_admin = 0;
- if (OpenProcessToken (GetCurrentProcess (), TOKEN_READ, &token))
- {
- GetTokenInformation (token, TokenGroups, NULL, 0, &size);
- grps = (PTOKEN_GROUPS) alloca (size);
- if (!GetTokenInformation(token, TokenGroups, grps, size, &size)
- || !AllocateAndInitializeSid (&nt_auth, 2,
- SECURITY_BUILTIN_DOMAIN_RID,
- DOMAIN_ALIAS_RID_ADMINS,
- 0, 0, 0, 0, 0, 0, &admin_grp))
- is_admin = 0;
- else
- {
- for (i = 0; i < grps->GroupCount; ++i)
- if (EqualSid (admin_grp, grps->Groups[i].Sid)
- && (grps->Groups[i].Attributes
- & (SE_GROUP_ENABLED | SE_GROUP_USE_FOR_DENY_ONLY))
- == SE_GROUP_ENABLED)
- {
- is_admin = 1;
- break;
- }
- FreeSid (admin_grp);
- }
- CloseHandle (token);
- }
- }
- return is_admin;
-}
-
-static void
-print_version ()
-{
- printf ("passwd (cygwin) %d.%d.%d\n"
- "Password Utility\n"
- "Copyright (C) 1999 - %s Red Hat, Inc.\n"
- "This is free software; see the source for copying conditions. There is NO\n"
- "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n",
- CYGWIN_VERSION_DLL_MAJOR / 1000,
- CYGWIN_VERSION_DLL_MAJOR % 1000,
- CYGWIN_VERSION_DLL_MINOR,
- strrchr (__DATE__, ' ') + 1);
-}
-
-int
-main (int argc, char **argv)
-{
- char *logonserver;
- char user[UNLEN + 1], oldpwd[_PASSWORD_LEN + 1], newpwd[_PASSWORD_LEN + 1];
- int ret = 0;
- int cnt = 0;
- int opt;
- int Larg = -1;
- int xarg = -1;
- int narg = -1;
- int iarg = -1;
- int lopt = 0;
- int uopt = 0;
- int copt = 0;
- int Copt = 0;
- int eopt = 0;
- int Eopt = 0;
- int popt = 0;
- int Popt = 0;
- int Sopt = 0;
- int Ropt = 0;
- PUSER_INFO_3 ui;
- int myself = 0;
- LPWSTR server = NULL;
-
- prog_name = program_invocation_short_name;
-
- /* Use locale from environment. If not set or set to "C", use UTF-8. */
- setlocale (LC_CTYPE, "");
- if (!strcmp (setlocale (LC_CTYPE, NULL), "C"))
- setlocale (LC_CTYPE, "en_US.UTF-8");
- while ((opt = getopt_long (argc, argv, opts, longopts, NULL)) != EOF)
- switch (opt)
- {
- case 'h':
- usage (stdout, 0);
- break;
-
- case 'i':
- if (lopt || uopt || copt || Copt || eopt || Eopt || popt || Popt || Sopt || Ropt)
- usage (stderr, 1);
- if ((iarg = atoi (optarg)) < 0 || iarg > 999)
- return eprint (1, "Force logout time must be between 0 and 999.");
- break;
-
- case 'l':
- if (xarg >= 0 || narg >= 0 || iarg >= 0 || Larg >= 0 || uopt || Sopt || Ropt)
- usage (stderr, 1);
- lopt = 1;
- break;
-
- case 'n':
- if (lopt || uopt || copt || Copt || eopt || Eopt || popt || Popt || Sopt || Ropt)
- usage (stderr, 1);
- if ((narg = atoi (optarg)) < 0 || narg > 999)
- return eprint (1, "Minimum password age must be between 0 and 999.");
- if (xarg >= 0 && narg > xarg)
- return eprint (1, "Minimum password age must be less than "
- "maximum password age.");
- break;
-
- case 'u':
- if (xarg >= 0 || narg >= 0 || iarg >= 0 || Larg >= 0 || lopt || Sopt || Ropt)
- usage (stderr, 1);
- uopt = 1;
- break;
-
- case 'c':
- if (xarg >= 0 || narg >= 0 || iarg >= 0 || Larg >= 0 || Sopt || Ropt)
- usage (stderr, 1);
- copt = 1;
- break;
-
- case 'C':
- if (xarg >= 0 || narg >= 0 || iarg >= 0 || Larg >= 0 || Sopt || Ropt)
- usage (stderr, 1);
- Copt = 1;
- break;
-
- case 'd':
- {
- if (Ropt)
- usage (stderr, 1);
- char *tmpbuf = alloca (strlen (optarg) + 3);
- tmpbuf[0] = '\0';
- if (*optarg != '\\')
- strcpy (tmpbuf, "\\\\");
- strcat (tmpbuf, optarg);
- size_t len = mbstowcs (NULL, tmpbuf, 0);
- if (len > 0 && len != (size_t) -1)
- mbstowcs (server = alloca ((len + 1) * sizeof (wchar_t)),
- tmpbuf, len + 1);
- }
- break;
-
- case 'e':
- if (xarg >= 0 || narg >= 0 || iarg >= 0 || Larg >= 0 || Sopt || Ropt)
- usage (stderr, 1);
- eopt = 1;
- break;
-
- case 'E':
- if (xarg >= 0 || narg >= 0 || iarg >= 0 || Larg >= 0 || Sopt || Ropt)
- usage (stderr, 1);
- Eopt = 1;
- break;
-
- case 'p':
- if (xarg >= 0 || narg >= 0 || iarg >= 0 || Larg >= 0 || Sopt || Ropt)
- usage (stderr, 1);
- popt = 1;
- break;
-
- case 'P':
- if (xarg >= 0 || narg >= 0 || iarg >= 0 || Larg >= 0 || Sopt || Ropt)
- usage (stderr, 1);
- Popt = 1;
- break;
-
- case 'V':
- case 'v': /* Keep this option for historical reasons,
- but don't advertize it. */
- print_version ();
- exit (0);
- break;
-
- case 'x':
- if (lopt || uopt || copt || Copt || eopt || Eopt || popt || Popt || Sopt || Ropt)
- usage (stderr, 1);
- if ((xarg = atoi (optarg)) < 0 || xarg > 999)
- return eprint (1, "Maximum password age must be between 0 and 999.");
- if (narg >= 0 && xarg < narg)
- return eprint (1, "Maximum password age must be greater than "
- "minimum password age.");
- break;
-
- case 'L':
- if (lopt || uopt || copt || Copt || eopt || Eopt || popt || Popt || Sopt || Ropt)
- usage (stderr, 1);
- if ((Larg = atoi (optarg)) < 0 || Larg > LM20_PWLEN)
- return eprint (1, "Minimum password length must be between "
- "0 and %d.", LM20_PWLEN);
- break;
-
- case 'S':
- if (xarg >= 0 || narg >= 0 || iarg >= 0 || Larg >= 0 || lopt || uopt
- || copt || Copt || eopt || Eopt || popt || Popt || Ropt)
- usage (stderr, 1);
- Sopt = 1;
- break;
-
- case 'R':
- if (xarg >= 0 || narg >= 0 || iarg >= 0 || Larg >= 0 || lopt || uopt
- || copt || Copt || eopt || Eopt || popt || Popt || Sopt
- || server)
- usage (stderr, 1);
- Ropt = 1;
- break;
-
- default:
- fprintf (stderr, "Try `%s --help' for more information.\n", prog_name);
- return 1;
- }
-
- if (Ropt)
- {
- const char *username = NULL;
- if (optind < argc)
- {
- username = argv[optind++];
- if (!strcmp (username, getlogin ()))
- username = NULL;
- else if (!caller_is_admin ())
- return eprint (0, "You may not change the password for %s.",
- username);
-
- if (optind < argc)
- usage (stderr, 1);
- }
- char *text1 = (char *) alloca ((username ? strlen (username) + 2 : 4)
- + sizeof ("Enter current password: "));
- char *text2 = (char *) alloca ((username ? strlen (username) + 2 : 4)
- + sizeof ("Re-enter current password: "));
- sprintf (text1, "Enter %s%s current password: ",
- username ?: "your", username ? "'s" : "");
- sprintf (text2, "Re-enter %s%s current password: ",
- username ?: "your", username ? "'s" : "");
- printf (
-"This functionality stores a password in the registry for usage by services\n"
-"which need to change the user context and require network access. Typical\n"
-"applications are interactive remote logons using sshd, cron task, etc.\n"
-"This password will always tried first when any privileged application is\n"
-"about to switch the user context.\n\n"
-"Note that storing even obfuscated passwords in the registry is not overly\n"
-"secure. Use this feature only if the machine is adequately locked down.\n"
-"Don't use this feature if you don't need network access within a remote\n"
-"session.\n\n"
-"You can delete the stored password by specifying an empty password.\n\n");
- strcpy (newpwd, getpass (text1));
- if (strcmp (newpwd, getpass (text2)))
- eprint (0, "Password is not identical.");
- else if (cygwin_internal (CW_SET_PRIV_KEY, newpwd, username))
- return eprint (0, "Storing password failed: %s", strerror (errno));
- return 0;
- }
-
- if (Larg >= 0 || xarg >= 0 || narg >= 0 || iarg >= 0)
- {
- if (optind < argc)
- usage (stderr, 1);
- return SetModals (xarg, narg, iarg, Larg, server);
- }
-
- strcpy (user, optind >= argc ? getlogin () : argv[optind]);
-
- /* Changing password for calling user? Use logonserver for user as well. */
- if (!server && optind >= argc)
- {
- myself = 1;
- if ((logonserver = getenv ("LOGONSERVER")))
- {
- size_t len = mbstowcs (NULL, logonserver, 0);
- if (len > 0 && len != (size_t) -1)
- mbstowcs (server = alloca ((len + 1) * sizeof (wchar_t)),
- logonserver, len + 1);
- }
- }
-
- ui = GetPW (user, 1, &server);
- if (!ui)
- return 1;
-
- if (lopt || uopt || copt || Copt || eopt || Eopt || popt || Popt || Sopt)
- {
- USER_INFO_1008 uif;
-
- uif.usri1008_flags = ui->usri3_flags;
- if (lopt)
- {
- if (ui->usri3_priv == USER_PRIV_ADMIN)
- return eprint (0, "Locking an admin account is disallowed.");
- uif.usri1008_flags |= UF_ACCOUNTDISABLE;
- }
- if (uopt)
- uif.usri1008_flags &= ~UF_ACCOUNTDISABLE;
- if (copt)
- uif.usri1008_flags |= UF_PASSWD_CANT_CHANGE;
- if (Copt)
- uif.usri1008_flags &= ~UF_PASSWD_CANT_CHANGE;
- if (eopt)
- uif.usri1008_flags |= UF_DONT_EXPIRE_PASSWD;
- if (Eopt)
- uif.usri1008_flags &= ~UF_DONT_EXPIRE_PASSWD;
- if (popt)
- uif.usri1008_flags |= UF_PASSWD_NOTREQD;
- if (Popt)
- uif.usri1008_flags &= ~UF_PASSWD_NOTREQD;
-
- if (lopt || uopt || copt || Copt || eopt || Eopt || popt || Popt)
- {
- ret = NetUserSetInfo (server, ui->usri3_name, 1008, (LPBYTE) &uif,
- NULL);
- return EvalRet (ret, NULL);
- }
- // Sopt
- PrintPW (ui, server);
- return 0;
- }
-
- if (!caller_is_admin () && !myself)
- return eprint (0, "You may not change the password for %s.", user);
-
- oldpwd[0] = '\0';
- if (!caller_is_admin ())
- {
- strcpy (oldpwd, getpass ("Old password: "));
- if (ChangePW (user, ui->usri3_name, oldpwd, oldpwd, 1, server))
- return 1;
- }
-
- do
- {
- strcpy (newpwd, getpass ("New password: "));
- if (strcmp (newpwd, getpass ("Re-enter new password: ")))
- eprint (0, "Password is not identical.");
- else if (!ChangePW (user, ui->usri3_name, *oldpwd ? oldpwd : NULL,
- newpwd, 0, server))
- ret = 1;
- if (!ret && cnt < 2)
- eprint (0, "Try again.");
- }
- while (!ret && ++cnt < 3);
- return !ret;
-}
diff --git a/winsup/utils/path.cc b/winsup/utils/path.cc
deleted file mode 100644
index d1d01e92b..000000000
--- a/winsup/utils/path.cc
+++ /dev/null
@@ -1,954 +0,0 @@
-/* path.cc
-
- Copyright 2001, 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012,
- 2013 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-/* The purpose of this file is to hide all the details about accessing
- Cygwin's mount table, shortcuts, etc. If the format or location of
- the mount table, or the shortcut format changes, this is the file to
- change to match it. */
-
-#define str(a) #a
-#define scat(a,b) str(a##b)
-#include <windows.h>
-#include <lmcons.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <malloc.h>
-#include <wchar.h>
-#include "path.h"
-#include "../cygwin/include/cygwin/version.h"
-#include "../cygwin/include/sys/mount.h"
-#define _NOMNTENT_MACROS
-#include "../cygwin/include/mntent.h"
-#include "testsuite.h"
-#ifdef FSTAB_ONLY
-#include <sys/cygwin.h>
-#endif
-#include "loadlib.h"
-
-#ifndef FSTAB_ONLY
-/* Used when treating / and \ as equivalent. */
-#define isslash(ch) \
- ({ \
- char __c = (ch); \
- ((__c) == '/' || (__c) == '\\'); \
- })
-
-
-static const GUID GUID_shortcut =
- {0x00021401L, 0, 0, {0xc0, 0, 0, 0, 0, 0, 0, 0x46}};
-
-enum {
- WSH_FLAG_IDLIST = 0x01, /* Contains an ITEMIDLIST. */
- WSH_FLAG_FILE = 0x02, /* Contains a file locator element. */
- WSH_FLAG_DESC = 0x04, /* Contains a description. */
- WSH_FLAG_RELPATH = 0x08, /* Contains a relative path. */
- WSH_FLAG_WD = 0x10, /* Contains a working dir. */
- WSH_FLAG_CMDLINE = 0x20, /* Contains command line args. */
- WSH_FLAG_ICON = 0x40 /* Contains a custom icon. */
-};
-
-struct win_shortcut_hdr
- {
- DWORD size; /* Header size in bytes. Must contain 0x4c. */
- GUID magic; /* GUID of shortcut files. */
- DWORD flags; /* Content flags. See above. */
-
- /* The next fields from attr to icon_no are always set to 0 in Cygwin
- and U/Win shortcuts. */
- DWORD attr; /* Target file attributes. */
- FILETIME ctime; /* These filetime items are never touched by the */
- FILETIME mtime; /* system, apparently. Values don't matter. */
- FILETIME atime;
- DWORD filesize; /* Target filesize. */
- DWORD icon_no; /* Icon number. */
-
- DWORD run; /* Values defined in winuser.h. Use SW_NORMAL. */
- DWORD hotkey; /* Hotkey value. Set to 0. */
- DWORD dummy[2]; /* Future extension probably. Always 0. */
- };
-
-static bool
-cmp_shortcut_header (win_shortcut_hdr *file_header)
-{
- /* A Cygwin or U/Win shortcut only contains a description and a relpath.
- Cygwin shortcuts also might contain an ITEMIDLIST. The run type is
- always set to SW_NORMAL. */
- return file_header->size == sizeof (win_shortcut_hdr)
- && !memcmp (&file_header->magic, &GUID_shortcut, sizeof GUID_shortcut)
- && (file_header->flags & ~WSH_FLAG_IDLIST)
- == (WSH_FLAG_DESC | WSH_FLAG_RELPATH)
- && file_header->run == SW_NORMAL;
-}
-
-int
-get_word (HANDLE fh, int offset)
-{
- unsigned short rv;
- unsigned r;
-
- SetLastError(NO_ERROR);
- if (SetFilePointer (fh, offset, 0, FILE_BEGIN) == INVALID_SET_FILE_POINTER
- && GetLastError () != NO_ERROR)
- return -1;
-
- if (!ReadFile (fh, &rv, 2, (DWORD *) &r, 0))
- return -1;
-
- return rv;
-}
-
-/*
- * Check the value of GetLastError() to find out whether there was an error.
- */
-int
-get_dword (HANDLE fh, int offset)
-{
- int rv;
- unsigned r;
-
- SetLastError(NO_ERROR);
- if (SetFilePointer (fh, offset, 0, FILE_BEGIN) == INVALID_SET_FILE_POINTER
- && GetLastError () != NO_ERROR)
- return -1;
-
- if (!ReadFile (fh, &rv, 4, (DWORD *) &r, 0))
- return -1;
-
- return rv;
-}
-
-#define EXE_MAGIC ((int)*(unsigned short *)"MZ")
-#define SHORTCUT_MAGIC ((int)*(unsigned short *)"L\0")
-#define SYMLINK_COOKIE "!<symlink>"
-#define SYMLINK_MAGIC ((int)*(unsigned short *)SYMLINK_COOKIE)
-
-bool
-is_exe (HANDLE fh)
-{
- int magic = get_word (fh, 0x0);
- return magic == EXE_MAGIC;
-}
-
-bool
-is_symlink (HANDLE fh)
-{
- bool ret = false;
- int magic = get_word (fh, 0x0);
- if (magic != SHORTCUT_MAGIC && magic != SYMLINK_MAGIC)
- goto out;
- DWORD got;
- BY_HANDLE_FILE_INFORMATION local;
- if (!GetFileInformationByHandle (fh, &local))
- return false;
- if (magic == SHORTCUT_MAGIC)
- {
- DWORD size;
- if (!local.dwFileAttributes & FILE_ATTRIBUTE_READONLY)
- goto out; /* Not a Cygwin symlink. */
- if ((size = GetFileSize (fh, NULL)) > 8192)
- goto out; /* Not a Cygwin symlink. */
- char buf[size];
- SetFilePointer (fh, 0, 0, FILE_BEGIN);
- if (!ReadFile (fh, buf, size, &got, 0))
- goto out;
- if (got != size || !cmp_shortcut_header ((win_shortcut_hdr *) buf))
- goto out; /* Not a Cygwin symlink. */
- /* TODO: check for invalid path contents
- (see symlink_info::check() in ../cygwin/path.cc) */
- }
- else /* magic == SYMLINK_MAGIC */
- {
- if (!local.dwFileAttributes & FILE_ATTRIBUTE_SYSTEM)
- goto out; /* Not a Cygwin symlink. */
- char buf[sizeof (SYMLINK_COOKIE) - 1];
- SetFilePointer (fh, 0, 0, FILE_BEGIN);
- if (!ReadFile (fh, buf, sizeof (buf), &got, 0))
- goto out;
- if (got != sizeof (buf) ||
- memcmp (buf, SYMLINK_COOKIE, sizeof (buf)) != 0)
- goto out; /* Not a Cygwin symlink. */
- }
- ret = true;
-out:
- SetFilePointer (fh, 0, 0, FILE_BEGIN);
- return ret;
-}
-
-/* Assumes is_symlink(fh) is true */
-bool
-readlink (HANDLE fh, char *path, int maxlen)
-{
- DWORD rv;
- char *buf, *cp;
- unsigned short len;
- win_shortcut_hdr *file_header;
- BY_HANDLE_FILE_INFORMATION fi;
-
- if (!GetFileInformationByHandle (fh, &fi)
- || fi.nFileSizeHigh != 0
- || fi.nFileSizeLow > 4 * 65536)
- return false;
-
- buf = (char *) alloca (fi.nFileSizeLow + 1);
- file_header = (win_shortcut_hdr *) buf;
-
- if (!ReadFile (fh, buf, fi.nFileSizeLow, &rv, NULL)
- || rv != fi.nFileSizeLow)
- return false;
-
- if (fi.nFileSizeLow > sizeof (file_header)
- && cmp_shortcut_header (file_header))
- {
- cp = buf + sizeof (win_shortcut_hdr);
- if (file_header->flags & WSH_FLAG_IDLIST) /* Skip ITEMIDLIST */
- cp += *(unsigned short *) cp + 2;
- if (!(len = *(unsigned short *) cp))
- return false;
- cp += 2;
- /* Has appended full path? If so, use it instead of description. */
- unsigned short relpath_len = *(unsigned short *) (cp + len);
- if (cp + len + 2 + relpath_len < buf + fi.nFileSizeLow)
- {
- cp += len + 2 + relpath_len;
- len = *(unsigned short *) cp;
- cp += 2;
- }
- if (*(PWCHAR) cp == 0xfeff) /* BOM */
- {
- len = wcstombs (NULL, (wchar_t *) (cp + 2), 0);
- if (len == (size_t) -1 || len + 1 > maxlen)
- return false;
- wcstombs (path, (wchar_t *) (cp + 2), len + 1);
- }
- else if (len + 1 > maxlen)
- return false;
- else
- memcpy (path, cp, len);
- path[len] = '\0';
- return true;
- }
- else if (strncmp (buf, SYMLINK_COOKIE, strlen (SYMLINK_COOKIE)) == 0
- && buf[fi.nFileSizeLow - 1] == '\0')
- {
- cp = buf + strlen (SYMLINK_COOKIE);
- if (*(PWCHAR) cp == 0xfeff) /* BOM */
- {
- len = wcstombs (NULL, (wchar_t *) (cp + 2), 0);
- if (len == (size_t) -1 || len + 1 > maxlen)
- return false;
- wcstombs (path, (wchar_t *) (cp + 2), len + 1);
- }
- else if (fi.nFileSizeLow - strlen (SYMLINK_COOKIE) > (unsigned) maxlen)
- return false;
- else
- strcpy (path, cp);
- return true;
- }
- else
- return false;
-}
-#endif /* !FSTAB_ONLY */
-
-#ifndef TESTSUITE
-mnt_t mount_table[255];
-int max_mount_entry;
-#else
-# define TESTSUITE_MOUNT_TABLE
-# include "testsuite.h"
-# undef TESTSUITE_MOUNT_TABLE
-#endif
-
-inline void
-unconvert_slashes (char* name)
-{
- while ((name = strchr (name, '/')) != NULL)
- *name++ = '\\';
-}
-
-/* These functions aren't called when defined(TESTSUITE) which results
- in a compiler warning. */
-#ifndef TESTSUITE
-inline char *
-skip_ws (char *in)
-{
- while (*in == ' ' || *in == '\t')
- ++in;
- return in;
-}
-
-inline char *
-find_ws (char *in)
-{
- while (*in && *in != ' ' && *in != '\t')
- ++in;
- return in;
-}
-
-inline char *
-conv_fstab_spaces (char *field)
-{
- register char *sp = field;
- while ((sp = strstr (sp, "\\040")) != NULL)
- {
- *sp++ = ' ';
- memmove (sp, sp + 3, strlen (sp + 3) + 1);
- }
- return field;
-}
-
-#ifndef FSTAB_ONLY
-static struct opt
-{
- const char *name;
- unsigned val;
- bool clear;
-} oopts[] =
-{
- {"acl", MOUNT_NOACL, 1},
- {"auto", 0, 0},
- {"binary", MOUNT_BINARY, 0},
- {"cygexec", MOUNT_CYGWIN_EXEC, 0},
- {"dos", MOUNT_DOS, 0},
- {"exec", MOUNT_EXEC, 0},
- {"ihash", MOUNT_IHASH, 0},
- {"noacl", MOUNT_NOACL, 0},
- {"nosuid", 0, 0},
- {"notexec", MOUNT_NOTEXEC, 0},
- {"nouser", MOUNT_SYSTEM, 0},
- {"override", MOUNT_OVERRIDE, 0},
- {"posix=0", MOUNT_NOPOSIX, 0},
- {"posix=1", MOUNT_NOPOSIX, 1},
- {"text", MOUNT_BINARY, 1},
- {"user", MOUNT_SYSTEM, 1}
-};
-
-static bool
-read_flags (char *options, unsigned &flags)
-{
- while (*options)
- {
- char *p = strchr (options, ',');
- if (p)
- *p++ = '\0';
- else
- p = strchr (options, '\0');
-
- for (opt *o = oopts;
- o < (oopts + (sizeof (oopts) / sizeof (oopts[0])));
- o++)
- if (strcmp (options, o->name) == 0)
- {
- if (o->clear)
- flags &= ~o->val;
- else
- flags |= o->val;
- goto gotit;
- }
- return false;
-
- gotit:
- options = p;
- }
- return true;
-}
-#endif
-
-bool
-from_fstab_line (mnt_t *m, char *line, bool user)
-{
- char *native_path, *posix_path, *fs_type;
-
- /* First field: Native path. */
- char *c = skip_ws (line);
- if (!*c || *c == '#')
- return false;
- char *cend = find_ws (c);
- *cend = '\0';
- native_path = conv_fstab_spaces (c);
- /* Second field: POSIX path. */
- c = skip_ws (cend + 1);
- if (!*c)
- return false;
- cend = find_ws (c);
- *cend = '\0';
- posix_path = conv_fstab_spaces (c);
- /* Third field: FS type. */
- c = skip_ws (cend + 1);
- if (!*c)
- return false;
- cend = find_ws (c);
- *cend = '\0';
- fs_type = c;
- /* Forth field: Flags. */
- c = skip_ws (cend + 1);
- if (!*c)
- return false;
- cend = find_ws (c);
- *cend = '\0';
- unsigned mount_flags = MOUNT_SYSTEM;
-#ifndef FSTAB_ONLY
- if (!read_flags (c, mount_flags))
-#else
- if (cygwin_internal (CW_CVT_MNT_OPTS, &c, &mount_flags))
-#endif
- return false;
- if (user)
- mount_flags &= ~MOUNT_SYSTEM;
- if (!strcmp (fs_type, "cygdrive"))
- {
- for (mnt_t *sm = mount_table; sm < m; ++sm)
- if (sm->flags & MOUNT_CYGDRIVE)
- {
- if ((mount_flags & MOUNT_SYSTEM) || !(sm->flags & MOUNT_SYSTEM))
- {
- if (sm->posix)
- free (sm->posix);
- sm->posix = strdup (posix_path);
- sm->flags = mount_flags | MOUNT_CYGDRIVE;
- }
- return false;
- }
- m->posix = strdup (posix_path);
- m->native = strdup ("cygdrive prefix");
- m->flags = mount_flags | MOUNT_CYGDRIVE;
- }
- else
- {
- for (mnt_t *sm = mount_table; sm < m; ++sm)
- if (!strcmp (sm->posix, posix_path))
- {
- /* Don't allow overriding of a system mount with a user mount. */
- if ((sm->flags & MOUNT_SYSTEM) && !(mount_flags & MOUNT_SYSTEM))
- return false;
- if ((sm->flags & MOUNT_SYSTEM) != (mount_flags & MOUNT_SYSTEM))
- continue;
- /* Changing immutable mount points require the override flag. */
- if ((sm->flags & MOUNT_IMMUTABLE)
- && !(mount_flags & MOUNT_OVERRIDE))
- return false;
- if (mount_flags & MOUNT_OVERRIDE)
- mount_flags |= MOUNT_IMMUTABLE;
- if (sm->native)
- free (sm->native);
- sm->native = strdup (native_path);
- sm->flags = mount_flags;
- return false;
- }
- m->posix = strdup (posix_path);
- unconvert_slashes (native_path);
- m->native = strdup (native_path);
- m->flags = mount_flags;
- }
- return true;
-}
-
-#ifndef FSTAB_ONLY
-
-#define BUFSIZE 65536
-
-static char *
-get_user ()
-{
- static char user[UNLEN + 1];
- char *userenv;
-
- user[0] = '\0';
- if ((userenv = getenv ("USER")) || (userenv = getenv ("USERNAME")))
- strncat (user, userenv, UNLEN);
- return user;
-}
-
-void
-from_fstab (bool user, PWCHAR path, PWCHAR path_end)
-{
- mnt_t *m = mount_table + max_mount_entry;
- char buf[BUFSIZE];
-
- if (!user)
- {
- /* Create a default root dir from path. */
- wcstombs (buf, path, BUFSIZE);
- unconvert_slashes (buf);
- char *native_path = buf;
- if (!strncmp (native_path, "\\\\?\\", 4))
- native_path += 4;
- if (!strncmp (native_path, "UNC\\", 4))
- *(native_path += 2) = '\\';
- m->posix = strdup ("/");
- m->native = strdup (native_path);
- m->flags = MOUNT_SYSTEM | MOUNT_BINARY | MOUNT_IMMUTABLE
- | MOUNT_AUTOMATIC;
- ++m;
- /* Create default /usr/bin and /usr/lib entries. */
- char *trail = strchr (native_path, '\0');
- strcpy (trail, "\\bin");
- m->posix = strdup ("/usr/bin");
- m->native = strdup (native_path);
- m->flags = MOUNT_SYSTEM | MOUNT_BINARY | MOUNT_AUTOMATIC;
- ++m;
- strcpy (trail, "\\lib");
- m->posix = strdup ("/usr/lib");
- m->native = strdup (native_path);
- m->flags = MOUNT_SYSTEM | MOUNT_BINARY | MOUNT_AUTOMATIC;
- ++m;
- /* Create a default cygdrive entry. Note that this is a user entry.
- This allows to override it with mount, unless the sysadmin created
- a cygdrive entry in /etc/fstab. */
- m->posix = strdup (CYGWIN_INFO_CYGDRIVE_DEFAULT_PREFIX);
- m->native = strdup ("cygdrive prefix");
- m->flags = MOUNT_BINARY | MOUNT_CYGDRIVE;
- ++m;
- max_mount_entry = m - mount_table;
- }
-
- PWCHAR u = wcscpy (path_end, L"\\etc\\fstab") + 10;
- if (user)
- mbstowcs (wcscpy (u, L".d\\") + 3, get_user (), BUFSIZE - (u - path));
- HANDLE h = CreateFileW (path, GENERIC_READ, FILE_SHARE_READ, NULL,
- OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
- if (h == INVALID_HANDLE_VALUE)
- return;
- char *got = buf;
- DWORD len = 0;
- /* Using BUFSIZE-1 leaves space to append two \0. */
- while (ReadFile (h, got, BUFSIZE - 1 - (got - buf),
- &len, NULL))
- {
- char *end;
-
- /* Set end marker. */
- got[len] = got[len + 1] = '\0';
- /* Set len to the absolute len of bytes in buf. */
- len += got - buf;
- /* Reset got to start reading at the start of the buffer again. */
- got = buf;
- while (got < buf + len && (end = strchr (got, '\n')))
- {
- end[end[-1] == '\r' ? -1 : 0] = '\0';
- if (from_fstab_line (m, got, user))
- ++m;
- got = end + 1;
- }
- if (len < BUFSIZE - 1)
- break;
- /* We have to read once more. Move remaining bytes to the start of
- the buffer and reposition got so that it points to the end of
- the remaining bytes. */
- len = buf + len - got;
- memmove (buf, got, len);
- got = buf + len;
- buf[len] = buf[len + 1] = '\0';
- }
- if (got > buf && from_fstab_line (m, got, user))
- ++m;
- max_mount_entry = m - mount_table;
- CloseHandle (h);
-}
-#endif /* !FSTAB_ONLY */
-#endif /* !TESTSUITE */
-
-#ifndef FSTAB_ONLY
-
-static int
-mnt_sort (const void *a, const void *b)
-{
- const mnt_t *ma = (const mnt_t *) a;
- const mnt_t *mb = (const mnt_t *) b;
- int ret;
-
- ret = (ma->flags & MOUNT_CYGDRIVE) - (mb->flags & MOUNT_CYGDRIVE);
- if (ret)
- return ret;
- ret = (ma->flags & MOUNT_SYSTEM) - (mb->flags & MOUNT_SYSTEM);
- if (ret)
- return ret;
- return strcmp (ma->posix, mb->posix);
-}
-
-extern "C" WCHAR cygwin_dll_path[];
-
-static void
-read_mounts ()
-{
-/* If TESTSUITE is defined, bypass this whole function as a harness
- mount table will be provided. */
-#ifndef TESTSUITE
- HKEY setup_key;
- LONG ret;
- DWORD len;
- WCHAR path[32768];
- PWCHAR path_end;
-
- for (mnt_t *m1 = mount_table; m1->posix; m1++)
- {
- free (m1->posix);
- if (m1->native)
- free ((char *) m1->native);
- m1->posix = NULL;
- }
- max_mount_entry = 0;
-
- /* First fetch the cygwin1.dll path from the LoadLibrary call in load_cygwin.
- This utilizes the DLL search order to find a matching cygwin1.dll and to
- compute the installation path from that DLL's path. */
- if (cygwin_dll_path[0])
- wcscpy (path, cygwin_dll_path);
- /* If we can't load cygwin1.dll, check where cygcheck is living itself and
- try to fetch installation path from here. Does cygwin1.dll exist in the
- same path? This should only kick in if the cygwin1.dll in the same path
- has been made non-executable for the current user accidentally. */
- else if (!GetModuleFileNameW (NULL, path, 32768))
- return;
- path_end = wcsrchr (path, L'\\');
- if (path_end)
- {
- if (!cygwin_dll_path[0])
- {
- wcscpy (path_end, L"\\cygwin1.dll");
- DWORD attr = GetFileAttributesW (path);
- if (attr == (DWORD) -1
- || (attr & (FILE_ATTRIBUTE_DIRECTORY
- | FILE_ATTRIBUTE_REPARSE_POINT)))
- path_end = NULL;
- }
- if (path_end)
- {
- *path_end = L'\0';
- path_end = wcsrchr (path, L'\\');
- }
- }
- /* If we can't create a valid installation dir from that, try to fetch
- the installation dir from the setup registry key. */
- if (!path_end)
- {
- for (int i = 0; i < 2; ++i)
- if ((ret = RegOpenKeyExW (i ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER,
- L"Software\\Cygwin\\setup", 0,
- KEY_READ, &setup_key)) == ERROR_SUCCESS)
- {
- len = 32768 * sizeof (WCHAR);
- ret = RegQueryValueExW (setup_key, L"rootdir", NULL, NULL,
- (PBYTE) path, &len);
- RegCloseKey (setup_key);
- if (ret == ERROR_SUCCESS)
- break;
- }
- if (ret == ERROR_SUCCESS)
- path_end = wcschr (path, L'\0');
- }
- /* If we can't fetch an installation dir, bail out. */
- if (!path_end)
- return;
- *path_end = L'\0';
-
- from_fstab (false, path, path_end);
- from_fstab (true, path, path_end);
- qsort (mount_table, max_mount_entry, sizeof (mnt_t), mnt_sort);
-#endif /* !defined(TESTSUITE) */
-}
-
-/* Return non-zero if PATH1 is a prefix of PATH2.
- Both are assumed to be of the same path style and / vs \ usage.
- Neither may be "".
- LEN1 = strlen (PATH1). It's passed because often it's already known.
-
- Examples:
- /foo/ is a prefix of /foo <-- may seem odd, but desired
- /foo is a prefix of /foo/
- / is a prefix of /foo/bar
- / is not a prefix of foo/bar
- foo/ is a prefix foo/bar
- /foo is not a prefix of /foobar
-*/
-
-static int
-path_prefix_p (const char *path1, const char *path2, int len1)
-{
- /* Handle case where PATH1 has trailing '/' and when it doesn't. */
- if (len1 > 0 && isslash (path1[len1 - 1]))
- len1--;
-
- if (len1 == 0)
- return isslash (path2[0]) && !isslash (path2[1]);
-
- if (strncasecmp (path1, path2, len1) != 0)
- return 0;
-
- return isslash (path2[len1]) || path2[len1] == 0 || path1[len1 - 1] == ':';
-}
-
-static char *
-vconcat (const char *s, va_list v)
-{
- int len;
- char *rv, *arg;
- va_list save_v = v;
- int unc;
-
- if (!s)
- return 0;
-
- len = strlen (s);
-
- unc = isslash (*s) && isslash (s[1]);
-
- while (1)
- {
- arg = va_arg (v, char *);
- if (arg == 0)
- break;
- len += strlen (arg);
- }
- va_end (v);
-
- rv = (char *) malloc (len + 1);
- strcpy (rv, s);
- v = save_v;
- while (1)
- {
- arg = va_arg (v, char *);
- if (arg == 0)
- break;
- strcat (rv, arg);
- }
- va_end (v);
-
- char *d, *p;
-
- /* concat is only used for urls and files, so we can safely
- canonicalize the results */
- for (p = d = rv; *p; p++)
- {
- *d++ = *p;
- /* special case for URLs */
- if (*p == ':' && p[1] == '/' && p[2] == '/' && p > rv + 1)
- {
- *d++ = *++p;
- *d++ = *++p;
- }
- else if (isslash (*p))
- {
- if (p == rv && unc)
- *d++ = *p++;
- while (p[1] == '/')
- p++;
- }
- }
- *d = 0;
-
- return rv;
-}
-
-static char *
-concat (const char *s, ...)
-{
- va_list v;
-
- va_start (v, s);
-
- return vconcat (s, v);
-}
-
-/* This is a helper function for when vcygpath is passed what appears
- to be a relative POSIX path. We take a Win32 CWD (either as specified
- in 'cwd' or as retrieved with GetCurrentDirectory() if 'cwd' is NULL)
- and find the mount table entry with the longest match. We replace the
- matching portion with the corresponding POSIX prefix, and to that append
- 's' and anything in 'v'. The returned result is a mostly-POSIX
- absolute path -- 'mostly' because the portions of CWD that didn't
- match the mount prefix will still have '\\' separators. */
-static char *
-rel_vconcat (const char *cwd, const char *s, va_list v)
-{
- char pathbuf[MAX_PATH];
- if (!cwd || *cwd == '\0')
- {
- if (!GetCurrentDirectory (MAX_PATH, pathbuf))
- return NULL;
- cwd = pathbuf;
- }
-
- int max_len = -1;
- mnt_t *m, *match = NULL;
-
- for (m = mount_table; m->posix; m++)
- {
- if (m->flags & MOUNT_CYGDRIVE)
- continue;
-
- int n = strlen (m->native);
- if (n < max_len || !path_prefix_p (m->native, cwd, n))
- continue;
- max_len = n;
- match = m;
- }
-
- char *temppath;
- if (!match)
- // No prefix matched - best effort to return meaningful value.
- temppath = concat (cwd, "/", s, NULL);
- else if (strcmp (match->posix, "/") != 0)
- // Matched on non-root. Copy matching prefix + remaining 'path'.
- temppath = concat (match->posix, cwd + max_len, "/", s, NULL);
- else if (cwd[max_len] == '\0')
- // Matched on root and there's no remaining 'path'.
- temppath = concat ("/", s, NULL);
- else if (isslash (cwd[max_len]))
- // Matched on root but remaining 'path' starts with a slash anyway.
- temppath = concat (cwd + max_len, "/", s, NULL);
- else
- temppath = concat ("/", cwd + max_len, "/", s, NULL);
-
- char *res = vconcat (temppath, v);
- free (temppath);
- return res;
-}
-
-/* Convert a POSIX path in 's' to an absolute Win32 path, and append
- anything in 'v' to the end, returning the result. If 's' is a
- relative path then 'cwd' is used as the working directory to make
- it absolute. Pass NULL in 'cwd' to use GetCurrentDirectory. */
-static char *
-vcygpath (const char *cwd, const char *s, va_list v)
-{
- int max_len = -1;
- mnt_t *m, *match = NULL;
-
- if (!max_mount_entry)
- read_mounts ();
- char *path;
- if (s[0] == '.' && isslash (s[1]))
- s += 2;
-
- if (s[0] == '/' || s[1] == ':') /* FIXME: too crude? */
- path = vconcat (s, v);
- else
- path = rel_vconcat (cwd, s, v);
-
- if (!path)
- return NULL;
-
- if (strncmp (path, "/./", 3) == 0)
- memmove (path + 1, path + 3, strlen (path + 3) + 1);
-
- for (m = mount_table; m->posix; m++)
- {
- int n = strlen (m->posix);
- if (n < max_len || !path_prefix_p (m->posix, path, n))
- continue;
- if ((m->flags & MOUNT_CYGDRIVE)
- && ((int) strlen (path) < n + 2
- || path[n] != '/'
- || !isalpha (path[n + 1])
- || path[n + 2] != '/'))
- continue;
- max_len = n;
- match = m;
- }
-
- char *native;
- if (match == NULL)
- native = strdup (path);
- else if (max_len == (int) strlen (path))
- native = strdup (match->native);
- else if (match->flags & MOUNT_CYGDRIVE)
- {
- char drive[3] = { path[max_len + 1], ':', '\0' };
- native = concat (drive, path + max_len + 2, NULL);
- }
- else if (isslash (path[max_len]))
- native = concat (match->native, path + max_len, NULL);
- else
- native = concat (match->native, "\\", path + max_len, NULL);
- free (path);
-
- unconvert_slashes (native);
- for (char *s = strstr (native + 1, "\\.\\"); s && *s; s = strstr (s, "\\.\\"))
- memmove (s + 1, s + 3, strlen (s + 3) + 1);
- return native;
-}
-
-char *
-cygpath_rel (const char *cwd, const char *s, ...)
-{
- va_list v;
-
- va_start (v, s);
-
- return vcygpath (cwd, s, v);
-}
-
-char *
-cygpath (const char *s, ...)
-{
- va_list v;
-
- va_start (v, s);
-
- return vcygpath (NULL, s, v);
-}
-
-static mnt_t *m = NULL;
-
-extern "C" FILE *
-setmntent (const char *, const char *)
-{
- m = mount_table;
- if (!max_mount_entry)
- read_mounts ();
- return NULL;
-}
-
-extern "C" struct mntent *
-getmntent (FILE *)
-{
- static mntent mnt;
- if (!m->posix)
- return NULL;
-
- mnt.mnt_fsname = (char *) m->native;
- mnt.mnt_dir = (char *) m->posix;
- if (!mnt.mnt_type)
- mnt.mnt_type = (char *) malloc (16);
- if (!mnt.mnt_opts)
- mnt.mnt_opts = (char *) malloc (64);
-
- strcpy (mnt.mnt_type,
- (char *) ((m->flags & MOUNT_SYSTEM) ? "system" : "user"));
-
- if (!(m->flags & MOUNT_BINARY))
- strcpy (mnt.mnt_opts, (char *) "text");
- else
- strcpy (mnt.mnt_opts, (char *) "binary");
-
- if (m->flags & MOUNT_CYGWIN_EXEC)
- strcat (mnt.mnt_opts, (char *) ",cygexec");
- else if (m->flags & MOUNT_EXEC)
- strcat (mnt.mnt_opts, (char *) ",exec");
- else if (m->flags & MOUNT_NOTEXEC)
- strcat (mnt.mnt_opts, (char *) ",notexec");
-
- if (m->flags & MOUNT_NOACL)
- strcat (mnt.mnt_opts, (char *) ",noacl");
-
- if (m->flags & MOUNT_NOPOSIX)
- strcat (mnt.mnt_opts, (char *) ",posix=0");
-
- if (m->flags & (MOUNT_AUTOMATIC | MOUNT_CYGDRIVE))
- strcat (mnt.mnt_opts, (char *) ",auto");
-
- mnt.mnt_freq = 1;
- mnt.mnt_passno = 1;
- m++;
- return &mnt;
-}
-
-#endif /* !FSTAB_ONLY */
diff --git a/winsup/utils/path.h b/winsup/utils/path.h
deleted file mode 100644
index a5c77ef58..000000000
--- a/winsup/utils/path.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/* path.h
-
- Copyright 2001, 2002, 2003, 2006, 2008, 2009 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-struct mnt_t
-{
- char *native;
- char *posix;
- unsigned flags;
-};
-
-char *cygpath (const char *s, ...);
-char *cygpath_rel (const char *cwd, const char *s, ...);
-bool is_exe (HANDLE);
-bool is_symlink (HANDLE);
-bool readlink (HANDLE, char *, int);
-int get_word (HANDLE, int);
-int get_dword (HANDLE, int);
-bool from_fstab_line (mnt_t *m, char *line, bool user);
-
-extern mnt_t mount_table[255];
-extern int max_mount_entry;
-
-#ifndef SYMLINK_MAX
-#define SYMLINK_MAX 4095 /* PATH_MAX - 1 */
-#endif
diff --git a/winsup/utils/pldd.c b/winsup/utils/pldd.c
deleted file mode 100644
index ea99a8bac..000000000
--- a/winsup/utils/pldd.c
+++ /dev/null
@@ -1,145 +0,0 @@
-/* pldd.c
-
- Copyright 2012 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#define WIN32_LEAN_AND_MEAN
-#define UNICODE
-#include <errno.h>
-#include <error.h>
-#include <getopt.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/cygwin.h>
-#include <cygwin/version.h>
-#include <windows.h>
-#include <psapi.h>
-
-struct option longopts[] =
-{
- {"help", no_argument, NULL, '?'},
- {"version", no_argument, NULL, 'V'},
- {"usage", no_argument, NULL, 0},
- {0, no_argument, NULL, 0}
-};
-const char *opts = "?V";
-
-__attribute__((noreturn))
-static void
-print_help (void)
-{
- printf ("Usage: pldd [OPTION...] PID\n\n"
- "List dynamic shared objects loaded into a process.\n\n"
- " -?, --help Give this help list\n"
- " --usage Give a short usage message\n"
- " -V, --version Print program version\n");
- exit (EXIT_SUCCESS);
-}
-
-__attribute__((noreturn))
-static void
-print_usage (void)
-{
- printf ("Usage: pldd [-?V] [--help] [--usage] [--version] PID\n");
- exit (EXIT_SUCCESS);
-}
-
-__attribute__((noreturn))
-static void
-print_version ()
-{
- printf ("pldd (cygwin) %d.%d.%d\n"
- "List dynamic shared objects loaded into process.\n"
- "Copyright (C) 2012 Red Hat, Inc.\n\n"
- "This program comes with NO WARRANTY, to the extent permitted by law.\n"
- "You may redistribute copies of this program under the terms of\n"
- "the Cygwin license. Please consult the CYGWIN_LICENSE file for details.\n",
- CYGWIN_VERSION_DLL_MAJOR / 1000,
- CYGWIN_VERSION_DLL_MAJOR % 1000,
- CYGWIN_VERSION_DLL_MINOR);
- exit (EXIT_SUCCESS);
-}
-
-__attribute__((noreturn))
-static void
-print_nargs (void)
-{
- fprintf (stderr, "Exactly one parameter with process ID required.\n"
- "Try `pldd --help' or `pldd --usage' for more information.\n");
- exit (EXIT_FAILURE);
-}
-
-int
-main (int argc, char *argv[])
-{
- int optch, pid, winpid, i;
- char *pidfile, *exefile, *exename;
- FILE *fd;
- HANDLE hProcess;
- HMODULE hModules[1024];
- DWORD cbModules;
-
- while ((optch = getopt_long (argc, argv, opts, longopts, &optind)) != -1)
- switch (optch)
- {
- case '?':
- print_help ();
- break;
- case 'V':
- print_version ();
- break;
- case 0:
- if (strcmp ("usage", longopts[optind].name) == 0)
- print_usage ();
- break;
- default:
- break;
- }
-
- argc -= optind;
- argv += optind;
- if (argc != 1)
- print_nargs ();
-
- pid = atoi (argv[0]);
-
- if ((pid == 0))
- error (1, 0, "invalid process ID '%s'", argv[0]);
-
- pidfile = (char *) malloc (32);
- sprintf (pidfile, "/proc/%d/winpid", pid);
- fd = fopen (pidfile, "rb");
- if (!fd)
- error (1, ENOENT, "cannot open /proc/%d", pid);
- fscanf (fd, "%d", &winpid);
-
- exefile = (char *) malloc (32);
- exename = (char *) malloc (MAX_PATH);
- sprintf (exefile, "/proc/%d/exename", pid);
- fd = fopen (exefile, "rb");
- fscanf (fd, "%s", exename);
-
- hProcess = OpenProcess (PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, 0, winpid);
- if (!hProcess)
- error (1, EPERM, "cannot attach to process %d", pid);
-
- printf ("%d:\t%s\n", pid, exename);
-
- EnumProcessModules (hProcess, hModules, sizeof (hModules), &cbModules);
- /* start at 1 to skip the executable itself */
- for (i = 1; i < (cbModules / sizeof (HMODULE)); i++)
- {
- TCHAR winname[MAX_PATH];
- char posixname[MAX_PATH];
- GetModuleFileNameEx (hProcess, hModules[i], winname, MAX_PATH);
- cygwin_conv_path (CCP_WIN_W_TO_POSIX, winname, posixname, MAX_PATH);
- printf ("%s\n", posixname);
- }
-
- return 0;
-}
diff --git a/winsup/utils/ps.cc b/winsup/utils/ps.cc
deleted file mode 100644
index 952b63ee3..000000000
--- a/winsup/utils/ps.cc
+++ /dev/null
@@ -1,409 +0,0 @@
-/* ps.cc
-
- Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include <errno.h>
-#include <stdio.h>
-#include <locale.h>
-#include <wchar.h>
-#include <windows.h>
-#include <time.h>
-#include <getopt.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <pwd.h>
-#include <limits.h>
-#include <sys/cygwin.h>
-#include <cygwin/version.h>
-#include <psapi.h>
-#include <ntdef.h>
-#include <ntdll.h>
-#include "loadlib.h"
-
-/* Maximum possible path length under NT. There's no official define
- for that value. Note that PATH_MAX is only 4K. */
-#define NT_MAX_PATH 32768
-
-static char *prog_name;
-
-static struct option longopts[] =
-{
- {"all", no_argument, NULL, 'a' },
- {"everyone", no_argument, NULL, 'e' },
- {"full", no_argument, NULL, 'f' },
- {"help", no_argument, NULL, 'h' },
- {"long", no_argument, NULL, 'l' },
- {"process", required_argument, NULL, 'p'},
- {"summary", no_argument, NULL, 's' },
- {"user", required_argument, NULL, 'u'},
- {"version", no_argument, NULL, 'V'},
- {"windows", no_argument, NULL, 'W'},
- {NULL, 0, NULL, 0}
-};
-
-static char opts[] = "aefhlp:su:VW";
-
-static char *
-start_time (external_pinfo *child)
-{
- time_t st = child->start_time;
- time_t t = time (NULL);
- static char stime[40] = {'\0'};
- char now[40];
-
- strncpy (stime, ctime (&st) + 4, 15);
- strcpy (now, ctime (&t) + 4);
-
- if ((t - st) < (24 * 3600))
- return (stime + 7);
-
- stime[6] = '\0';
-
- return stime;
-}
-
-#define FACTOR (0x19db1ded53ea710LL)
-#define NSPERSEC 10000000LL
-
-/* Convert a Win32 time to "UNIX" format. */
-long __stdcall
-to_time_t (FILETIME *ptr)
-{
- /* A file time is the number of 100ns since jan 1 1601
- stuffed into two long words.
- A time_t is the number of seconds since jan 1 1970. */
-
- long rem;
- long long x = ((long long) ptr->dwHighDateTime << 32) + ((unsigned)ptr->dwLowDateTime);
- x -= FACTOR; /* number of 100ns between 1601 and 1970 */
- rem = x % ((long long)NSPERSEC);
- rem += (NSPERSEC / 2);
- x /= (long long) NSPERSEC; /* number of 100ns in a second */
- x += (long long) (rem / NSPERSEC);
- return x;
-}
-
-static const char *
-ttynam (int ntty)
-{
- static char buf[9];
- char buf0[9];
- if (ntty < 0)
- strcpy (buf0, "?");
- else if (ntty & 0xffff0000)
- sprintf (buf0, "cons%d", ntty & 0xff);
- else
- sprintf (buf0, "pty%d", ntty);
- sprintf (buf, " %-7s", buf0);
- return buf;
-}
-
-static void
-usage (FILE * stream, int status)
-{
- fprintf (stream, "\
-Usage: %1$s [-aefls] [-u UID] [-p PID]\n\
-\n\
-Report process status\n\
-\n\
- -a, --all show processes of all users\n\
- -e, --everyone show processes of all users\n\
- -f, --full show process uids, ppids\n\
- -h, --help output usage information and exit\n\
- -l, --long show process uids, ppids, pgids, winpids\n\
- -p, --process show information for specified PID\n\
- -s, --summary show process summary\n\
- -u, --user list processes owned by UID\n\
- -V, --version output version information and exit\n\
- -W, --windows show windows as well as cygwin processes\n\
-\n\
-With no options, %1$s outputs the long format by default\n\n",
- prog_name);
- exit (status);
-}
-
-static void
-print_version ()
-{
- printf ("ps (cygwin) %d.%d.%d\n"
- "Show process statistics\n"
- "Copyright (C) 1996 - %s Red Hat, Inc.\n"
- "This is free software; see the source for copying conditions. There is NO\n"
- "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n",
- CYGWIN_VERSION_DLL_MAJOR / 1000,
- CYGWIN_VERSION_DLL_MAJOR % 1000,
- CYGWIN_VERSION_DLL_MINOR,
- strrchr (__DATE__, ' ') + 1);
-}
-
-char unicode_buf[sizeof (UNICODE_STRING) + NT_MAX_PATH];
-
-int
-main (int argc, char *argv[])
-{
- external_pinfo *p;
- int aflag, lflag, fflag, sflag, proc_id;
- uid_t uid;
- bool found_proc_id = true;
- DWORD proc_access = PROCESS_QUERY_LIMITED_INFORMATION;
- cygwin_getinfo_types query = CW_GETPINFO;
- const char *dtitle = " PID TTY STIME COMMAND\n";
- const char *dfmt = "%7d%4s%10s %s\n";
- const char *ftitle = " UID PID PPID TTY STIME COMMAND\n";
- const char *ffmt = "%8.8s%8d%8d%4s%10s %s\n";
- const char *ltitle = " PID PPID PGID WINPID TTY UID STIME COMMAND\n";
- const char *lfmt = "%c %7d %7d %7d %10u %4s %4u %8s %s\n";
- char ch;
- PUNICODE_STRING uni = (PUNICODE_STRING) unicode_buf;
- void *drive_map = NULL;
-
- aflag = lflag = fflag = sflag = 0;
- uid = getuid ();
- proc_id = -1;
- lflag = 1;
-
- setlocale (LC_ALL, "");
-
- prog_name = program_invocation_short_name;
-
- while ((ch = getopt_long (argc, argv, opts, longopts, NULL)) != EOF)
- switch (ch)
- {
- case 'a':
- case 'e':
- aflag = 1;
- break;
- case 'f':
- fflag = 1;
- break;
- case 'h':
- usage (stdout, 0);
- case 'l':
- lflag = 1;
- break;
- case 'p':
- proc_id = atoi (optarg);
- aflag = 1;
- found_proc_id = false;
- break;
- case 's':
- sflag = 1;
- break;
- case 'u':
- uid = atoi (optarg);
- if (uid == 0)
- {
- struct passwd *pw;
-
- if ((pw = getpwnam (optarg)))
- uid = pw->pw_uid;
- else
- {
- fprintf (stderr, "%s: user %s unknown\n", prog_name, optarg);
- exit (1);
- }
- }
- break;
- case 'V':
- print_version ();
- exit (0);
- break;
- case 'W':
- query = CW_GETPINFO_FULL;
- aflag = 1;
- break;
-
- default:
- fprintf (stderr, "Try `%s --help' for more information.\n", prog_name);
- exit (1);
- }
-
- if (sflag)
- printf (dtitle);
- else if (fflag)
- printf (ftitle);
- else if (lflag)
- printf (ltitle);
-
- (void) cygwin_internal (CW_LOCK_PINFO, 1000);
-
- if (query == CW_GETPINFO_FULL)
- {
- /* Enable debug privilege to allow to enumerate all processes,
- not only processes in current session. */
- HANDLE tok;
- if (OpenProcessToken (GetCurrentProcess (),
- TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES,
- &tok))
- {
- TOKEN_PRIVILEGES priv;
-
- priv.PrivilegeCount = 1;
- if (LookupPrivilegeValue (NULL, SE_DEBUG_NAME,
- &priv.Privileges[0].Luid))
- {
- priv.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
- AdjustTokenPrivileges (tok, FALSE, &priv, 0, NULL, NULL);
- }
- }
-
- /* Check process query capabilities. */
- OSVERSIONINFO version;
- version.dwOSVersionInfoSize = sizeof version;
- GetVersionEx (&version);
- if (version.dwMajorVersion <= 5) /* pre-Vista */
- {
- proc_access = PROCESS_QUERY_INFORMATION;
- if (version.dwMinorVersion < 1) /* Windows 2000 */
- proc_access |= PROCESS_VM_READ;
- else
- {
- }
- }
-
- /* Except on Windows 2000, fetch an opaque drive mapping object from the
- Cygwin DLL. This is used to map NT device paths to Win32 paths. */
- if (!(proc_access & PROCESS_VM_READ))
- {
- drive_map = (void *) cygwin_internal (CW_ALLOC_DRIVE_MAP);
- /* Check old Cygwin version. */
- if (drive_map == (void *) -1)
- drive_map = NULL;
- /* Allow fallback to GetModuleFileNameEx for post-W2K. */
- if (!drive_map)
- proc_access = PROCESS_QUERY_INFORMATION | PROCESS_VM_READ;
- }
- }
-
- for (int pid = 0;
- (p = (external_pinfo *) cygwin_internal (query, pid | CW_NEXTPID));
- pid = p->pid)
- {
- if ((proc_id > 0) && (p->pid != proc_id))
- continue;
- else
- found_proc_id = true;
-
- if (aflag)
- /* nothing to do */;
- else if (p->version >= EXTERNAL_PINFO_VERSION_32_BIT)
- {
- if (p->uid32 != uid)
- continue;
- }
- else if (p->uid != uid)
- continue;
- char status = ' ';
- if (p->process_state & PID_STOPPED)
- status = 'S';
- else if (p->process_state & PID_TTYIN)
- status = 'I';
- else if (p->process_state & PID_TTYOU)
- status = 'O';
-
- /* Maximum possible path length under NT. There's no official define
- for that value. */
- char pname[NT_MAX_PATH + sizeof (" <defunct>")];
- if (p->ppid)
- {
- char *s;
- pname[0] = '\0';
- strncat (pname, p->progname_long, NT_MAX_PATH);
- s = strchr (pname, '\0') - 4;
- if (s > pname && strcasecmp (s, ".exe") == 0)
- *s = '\0';
- if (p->process_state & PID_EXITED || (p->exitcode & ~0xffff))
- strcat (pname, " <defunct>");
- }
- else if (query == CW_GETPINFO_FULL)
- {
- HANDLE h;
- NTSTATUS status;
- wchar_t *win32path = NULL;
-
- h = OpenProcess (proc_access, FALSE, p->dwProcessId);
- if (!h)
- continue;
- /* We use NtQueryInformationProcess in the first place, because
- GetModuleFileNameEx does not work on 64 bit systems when trying
- to fetch module names of 64 bit processes. */
- if (!(proc_access & PROCESS_VM_READ)) /* Windows 2000 */
- {
- status = NtQueryInformationProcess (h, ProcessImageFileName, uni,
- sizeof unicode_buf, NULL);
- if (NT_SUCCESS (status))
- {
- /* NtQueryInformationProcess returns a native NT device path.
- Call CW_MAP_DRIVE_MAP to convert the path to an ordinary
- Win32 path. The returned pointer is a pointer into the
- incoming buffer given as third argument. It's expected
- to be big enough, which we made sure by defining
- unicode_buf to have enough space for a maximum sized
- UNICODE_STRING. */
- if (uni->Length == 0) /* System process */
- win32path = (wchar_t *) L"System";
- else
- {
- uni->Buffer[uni->Length / sizeof (WCHAR)] = L'\0';
- win32path = (wchar_t *) cygwin_internal (CW_MAP_DRIVE_MAP,
- drive_map,
- uni->Buffer);
- }
- }
- }
- else
- {
- if (GetModuleFileNameExW (h, NULL, (PWCHAR) unicode_buf,
- NT_MAX_PATH))
- win32path = (wchar_t *) unicode_buf;
- }
- if (win32path)
- wcstombs (pname, win32path, sizeof pname);
- else
- strcpy (pname, "*** unknown ***");
- FILETIME ct, et, kt, ut;
- if (GetProcessTimes (h, &ct, &et, &kt, &ut))
- p->start_time = to_time_t (&ct);
- CloseHandle (h);
- }
-
- char uname[128];
-
- if (fflag)
- {
- struct passwd *pw;
-
- if ((pw = getpwuid (p->version >= EXTERNAL_PINFO_VERSION_32_BIT ?
- p->uid32 : p->uid)))
- strcpy (uname, pw->pw_name);
- else
- sprintf (uname, "%u", (unsigned)
- (p->version >= EXTERNAL_PINFO_VERSION_32_BIT ?
- p->uid32 : p->uid));
- }
-
- if (sflag)
- printf (dfmt, p->pid, ttynam (p->ctty), start_time (p), pname);
- else if (fflag)
- printf (ffmt, uname, p->pid, p->ppid, ttynam (p->ctty), start_time (p),
- pname);
- else if (lflag)
- printf (lfmt, status, p->pid, p->ppid, p->pgid,
- p->dwProcessId, ttynam (p->ctty),
- p->version >= EXTERNAL_PINFO_VERSION_32_BIT ? p->uid32 : p->uid,
- start_time (p), pname);
-
- }
- if (drive_map)
- cygwin_internal (CW_FREE_DRIVE_MAP, drive_map);
- (void) cygwin_internal (CW_UNLOCK_PINFO);
-
- return found_proc_id ? 0 : 1;
-}
diff --git a/winsup/utils/regtool.cc b/winsup/utils/regtool.cc
deleted file mode 100644
index 86f2bb61f..000000000
--- a/winsup/utils/regtool.cc
+++ /dev/null
@@ -1,993 +0,0 @@
-/* regtool.cc
-
- Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
- 2009, 2010, 2011 Red Hat Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <ctype.h>
-#include <wchar.h>
-#include <getopt.h>
-#include <locale.h>
-#define WINVER 0x0502
-#include <windows.h>
-#include <sys/cygwin.h>
-#include <cygwin/version.h>
-#include "loadlib.h"
-
-#define DEFAULT_KEY_SEPARATOR '\\'
-
-#define REG_AUTO -1
-
-int value_type = REG_AUTO;
-
-char key_sep = DEFAULT_KEY_SEPARATOR;
-
-#define LIST_KEYS 0x01
-#define LIST_VALS 0x02
-#define LIST_ALL (LIST_KEYS | LIST_VALS)
-
-static char *prog_name;
-
-static struct option longopts[] =
-{
- {"binary", no_argument, NULL, 'b' },
- {"dword", no_argument, NULL, 'd' },
- {"dword-be", no_argument, NULL, 'D' },
- {"expand-string", no_argument, NULL, 'e' },
- {"help", no_argument, NULL, 'h' },
- {"integer", no_argument, NULL, 'i' },
- {"keys", no_argument, NULL, 'k'},
- {"list", no_argument, NULL, 'l'},
- {"multi-string", no_argument, NULL, 'm'},
- {"none", no_argument, NULL, 'n' },
- {"postfix", no_argument, NULL, 'p'},
- {"quiet", no_argument, NULL, 'q'},
- {"qword", no_argument, NULL, 'Q' },
- {"string", no_argument, NULL, 's'},
- {"verbose", no_argument, NULL, 'v'},
- {"version", no_argument, NULL, 'V'},
- {"wow64", no_argument, NULL, 'w'},
- {"wow32", no_argument, NULL, 'W'},
- {"hex", no_argument, NULL, 'x'},
- {"key-separator", required_argument, NULL, 'K'},
- {NULL, 0, NULL, 0}
-};
-
-static char opts[] = "bdDehiklmnpqQsvVwWxK:";
-
-const char *types[] =
-{
- "REG_NONE",
- "REG_SZ",
- "REG_EXPAND_SZ",
- "REG_BINARY",
- "REG_DWORD",
- "REG_DWORD_BIG_ENDIAN",
- "REG_LINK",
- "REG_MULTI_SZ",
- "REG_RESOURCE_LIST",
- "REG_FULL_RESOURCE_DESCRIPTOR",
- "REG_RESOURCE_REQUIREMENTS_LIST",
- "REG_QWORD",
-};
-
-int listwhat = 0;
-int postfix = 0;
-int verbose = 0;
-int quiet = 0;
-int hex = 0;
-DWORD wow64 = 0;
-char **argv;
-
-HKEY key;
-wchar_t *value;
-
-static void
-usage (FILE *where = stderr)
-{
- fprintf (where, ""
- "Usage: %s [OPTION] ACTION KEY [data...]\n"
- "\n"
- "View or edit the Win32 registry\n"
- "\n", prog_name);
- if (where == stdout)
- {
- fprintf (where, ""
- "Actions:\n"
- "\n"
- " add KEY\\SUBKEY add new SUBKEY\n"
- " check KEY exit 0 if KEY exists, 1 if not\n"
- " get KEY\\VALUE prints VALUE to stdout\n"
- " list KEY list SUBKEYs and VALUEs\n"
- " remove KEY remove KEY\n"
- " set KEY\\VALUE [data ...] set VALUE\n"
- " unset KEY\\VALUE removes VALUE from KEY\n"
- " load KEY\\SUBKEY PATH load hive from PATH into new SUBKEY\n"
- " unload KEY\\SUBKEY unload hive and remove SUBKEY\n"
- " save KEY\\SUBKEY PATH save SUBKEY into new hive PATH\n"
- "\n");
- fprintf (where, ""
- "Options for 'list' Action:\n"
- "\n"
- " -k, --keys print only KEYs\n"
- " -l, --list print only VALUEs\n"
- " -p, --postfix like ls -p, appends '\\' postfix to KEY names\n"
- "\n"
- "Options for 'get' Action:\n"
- "\n"
- " -b, --binary print data as printable hex bytes\n"
- " -n, --none print data as stream of bytes as stored in registry\n"
- " -x, --hex print numerical data as hex numbers\n"
- "\n"
- "Options for 'set' Action:\n"
- "\n"
- " -b, --binary set type to REG_BINARY (hex args or '-')\n"
- " -d, --dword set type to REG_DWORD\n"
- " -D, --dword-be set type to REG_DWORD_BIG_ENDIAN\n"
- " -e, --expand-string set type to REG_EXPAND_SZ\n"
- " -i, --integer set type to REG_DWORD\n"
- " -m, --multi-string set type to REG_MULTI_SZ\n"
- " -n, --none set type to REG_NONE\n"
- " -Q, --qword set type to REG_QWORD\n"
- " -s, --string set type to REG_SZ\n"
- "\n"
- "Options for 'set' and 'unset' Actions:\n"
- "\n"
- " -K<c>, --key-separator[=]<c> set key-value separator to <c> instead of '\\'\n"
- "\n"
- "Other Options:\n"
- "\n"
- " -h, --help output usage information and exit\n"
- " -q, --quiet no error output, just nonzero return if KEY/VALUE missing\n"
- " -v, --verbose verbose output, including VALUE contents when applicable\n"
- " -w, --wow64 access 64 bit registry view (ignored on 32 bit Windows)\n"
- " -W, --wow32 access 32 bit registry view (ignored on 32 bit Windows)\n"
- " -V, --version output version information and exit\n"
- "\n");
- fprintf (where, ""
- "KEY is in the format [host]\\prefix\\KEY\\KEY\\VALUE, where host is optional\n"
- "remote host in either \\\\hostname or hostname: format and prefix is any of:\n"
- " root HKCR HKEY_CLASSES_ROOT (local only)\n"
- " config HKCC HKEY_CURRENT_CONFIG (local only)\n"
- " user HKCU HKEY_CURRENT_USER (local only)\n"
- " machine HKLM HKEY_LOCAL_MACHINE\n"
- " users HKU HKEY_USERS\n"
- "\n"
- "If the keyname starts with a forward slash ('/'), the forward slash is used\n"
- "as separator and the backslash can be used as escape character.\n");
- fprintf (where, ""
- "Example:\n"
- "%s list '/machine/SOFTWARE/Classes/MIME/Database/Content Type/audio\\/wav'\n\n", prog_name);
- }
- if (where == stderr)
- fprintf (where,
- "ACTION is one of add, check, get, list, remove, set, unset, load, unload, save\n"
- "\n"
- "Try `%s --help' for more information.\n", prog_name);
- exit (where == stderr ? 1 : 0);
-}
-
-static void
-print_version ()
-{
- printf ("regtool (cygwin) %d.%d.%d\n"
- "Registry tool\n"
- "Copyright (C) 2000 - %s Red Hat, Inc.\n"
- "This is free software; see the source for copying conditions. There is NO\n"
- "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n",
- CYGWIN_VERSION_DLL_MAJOR / 1000,
- CYGWIN_VERSION_DLL_MAJOR % 1000,
- CYGWIN_VERSION_DLL_MINOR,
- strrchr (__DATE__, ' ') + 1);
-}
-
-void
-Fail (unsigned int rv)
-{
- char *buf;
- if (!quiet)
- {
- FormatMessage (FORMAT_MESSAGE_ALLOCATE_BUFFER
- | FORMAT_MESSAGE_FROM_SYSTEM,
- 0, rv, 0, (CHAR *) & buf, 0, 0);
- fprintf (stderr, "Error (%d): %s\n", rv, buf);
- LocalFree (buf);
- }
- exit (1);
-}
-
-static struct
-{
- const char *string;
- HKEY key;
-} wkprefixes[] =
-{
- {"root", HKEY_CLASSES_ROOT},
- {"HKCR", HKEY_CLASSES_ROOT},
- {"HKEY_CLASSES_ROOT", HKEY_CLASSES_ROOT},
- {"config", HKEY_CURRENT_CONFIG},
- {"HKCC", HKEY_CURRENT_CONFIG},
- {"HKEY_CURRENT_CONFIG", HKEY_CURRENT_CONFIG},
- {"user", HKEY_CURRENT_USER},
- {"HKCU", HKEY_CURRENT_USER},
- {"HKEY_CURRENT_USER", HKEY_CURRENT_USER},
- {"machine", HKEY_LOCAL_MACHINE},
- {"HKLM", HKEY_LOCAL_MACHINE},
- {"HKEY_LOCAL_MACHINE", HKEY_LOCAL_MACHINE},
- {"users", HKEY_USERS},
- {"HKU", HKEY_USERS},
- {"HKEY_USERS", HKEY_USERS},
- {0, 0}
-};
-
-void
-translate (char *key)
-{
-#define isodigit(c) (strchr("01234567", c))
-#define tooct(c) ((c)-'0')
-#define tohex(c) (strchr(_hs,tolower(c))-_hs)
- static char _hs[] = "0123456789abcdef";
-
- char *d = key;
- char *s = key;
- char c;
-
- while (*s)
- {
- if (*s == '\\')
- switch (*++s)
- {
- case 'a':
- *d++ = '\007';
- break;
- case 'b':
- *d++ = '\b';
- break;
- case 'e':
- *d++ = '\033';
- break;
- case 'f':
- *d++ = '\f';
- break;
- case 'n':
- *d++ = '\n';
- break;
- case 'r':
- *d++ = '\r';
- break;
- case 't':
- *d++ = '\t';
- break;
- case 'v':
- *d++ = '\v';
- break;
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- c = tooct (*s);
- if (isodigit (s[1]))
- {
- c = (c << 3) | tooct (*++s);
- if (isodigit (s[1]))
- c = (c << 3) | tooct (*++s);
- }
- *d++ = c;
- break;
- case 'x':
- if (!isxdigit (s[1]))
- c = '0';
- else
- {
- c = tohex (*++s);
- if (isxdigit (s[1]))
- c = (c << 4) | tohex (*++s);
- }
- *d++ = c;
- break;
- default: /* before non-special char: just add the char */
- *d++ = *s;
- break;
- }
- else if (*s == '/')
- *d++ = '\\';
- else
- *d++ = *s;
- ++s;
- }
- *d = '\0';
-}
-
-void
-find_key (int howmanyparts, REGSAM access, int option = 0)
-{
- HKEY base;
- int rv;
- char *n = argv[0], *e, *h, c;
- char* host = NULL;
- int i;
- size_t len;
-
- if (*n == '/')
- translate (n);
- if (*n != '\\')
- {
- /* expect host:/key/value format */
- host = (char*) malloc (strlen (n) + 1);
- host[0] = host [1] = '\\';
- for (e = n, h = host + 2; *e && *e != ':'; e++, h++)
- *h = *e;
- *h = 0;
- n = e + 1;
- if (*n == '/')
- translate (n);
- }
- else if (n[0] == '\\' && n[1] == '\\')
- {
- /* expect //host/key/value format */
- host = (char*) malloc (strlen (n) + 1);
- host[0] = host[1] = '\\';
- for (e = n + 2, h = host + 2; *e && *e != '\\'; e++, h++)
- *h = *e;
- *h = 0;
- n = e;
- }
- while (*n != '\\')
- n++;
- *n++ = 0;
- for (e = n; *e && *e != '\\'; e++);
- c = *e;
- *e = 0;
- for (i = 0; wkprefixes[i].string; i++)
- if (strcmp (wkprefixes[i].string, n) == 0)
- break;
- if (!wkprefixes[i].string)
- {
- fprintf (stderr, "Unknown key prefix. Valid prefixes are:\n");
- for (i = 0; wkprefixes[i].string; i++)
- fprintf (stderr, "\t%s\n", wkprefixes[i].string);
- exit (1);
- }
-
- n = e;
- *e = c;
- while (*n && *n == '\\')
- n++;
- e = n + strlen (n);
- if (howmanyparts > 1)
- {
- while (n < e && *e != key_sep)
- e--;
- if (*e != key_sep)
- {
- key = wkprefixes[i].key;
- if (value)
- free (value);
- len = mbstowcs (NULL, n, 0) + 1;
- value = (wchar_t *) malloc (len * sizeof (wchar_t));
- mbstowcs (value, n, len);
- return;
- }
- else
- {
- *e = 0;
- if (value)
- free (value);
- len = mbstowcs (NULL, e + 1, 0) + 1;
- value = (wchar_t *) malloc (len * sizeof (wchar_t));
- mbstowcs (value, e + 1, len);
- }
- }
- if (host)
- {
- rv = RegConnectRegistry (host, wkprefixes[i].key, &base);
- if (rv != ERROR_SUCCESS)
- Fail (rv);
- free (host);
- }
- else
- base = wkprefixes[i].key;
-
- if (n[0] == 0)
- key = base;
- else
- {
- len = mbstowcs (NULL, n, 0) + 1;
- wchar_t name[len];
- mbstowcs (name, n, len);
- if (access)
- {
- rv = RegOpenKeyExW (base, name, 0, access | wow64, &key);
- if (option && (rv == ERROR_SUCCESS || rv == ERROR_ACCESS_DENIED))
- {
- /* reopen with desired option due to missing option support in
- RegOpenKeyE */
- /* FIXME: may create the key in rare cases (e.g. access denied
- in parent) */
- HKEY key2;
- if (RegCreateKeyExW (base, name, 0, NULL, option, access | wow64,
- NULL, &key2, NULL)
- == ERROR_SUCCESS)
- {
- if (rv == ERROR_SUCCESS)
- RegCloseKey (key);
- key = key2;
- rv = ERROR_SUCCESS;
- }
- }
- if (rv != ERROR_SUCCESS)
- Fail (rv);
- }
- else if (argv[1])
- {
- ssize_t len = cygwin_conv_path (CCP_POSIX_TO_WIN_W, argv[1], NULL, 0);
- wchar_t win32_path[len];
- cygwin_conv_path (CCP_POSIX_TO_WIN_W, argv[1], win32_path, len);
- rv = RegLoadKeyW (base, name, win32_path);
- if (rv != ERROR_SUCCESS)
- Fail (rv);
- if (verbose)
- printf ("key %ls loaded from file %ls\n", name, win32_path);
- }
- else
- {
- rv = RegUnLoadKeyW (base, name);
- if (rv != ERROR_SUCCESS)
- Fail (rv);
- if (verbose)
- printf ("key %ls unloaded\n", name);
- }
- }
-}
-
-
-int
-cmd_list ()
-{
- DWORD num_subkeys, maxsubkeylen, num_values, maxvalnamelen, maxvaluelen;
- DWORD maxclasslen;
- wchar_t *subkey_name, *value_name, *class_name, *vd;
- unsigned char *value_data;
- DWORD i, j, m, n, t;
- int v;
-
- find_key (1, KEY_READ);
- RegQueryInfoKeyW (key, 0, 0, 0, &num_subkeys, &maxsubkeylen, &maxclasslen,
- &num_values, &maxvalnamelen, &maxvaluelen, 0, 0);
-
- subkey_name = (wchar_t *) malloc ((maxsubkeylen + 1) * sizeof (wchar_t));
- class_name = (wchar_t *) malloc ((maxclasslen + 1) * sizeof (wchar_t));
- value_name = (wchar_t *) malloc ((maxvalnamelen + 1) * sizeof (wchar_t));
- value_data = (unsigned char *) malloc (maxvaluelen + 1);
-
- if (!listwhat)
- listwhat = LIST_ALL;
-
- if (listwhat & LIST_KEYS)
- for (i = 0; i < num_subkeys; i++)
- {
- m = (maxsubkeylen + 1) * sizeof (wchar_t);
- n = (maxclasslen + 1) * sizeof (wchar_t);
- RegEnumKeyExW (key, i, subkey_name, &m, 0, class_name, &n, 0);
- printf ("%ls", subkey_name);
- if (postfix || verbose)
- fputc (key_sep, stdout);
-
- if (verbose)
- printf (" (%ls)", class_name);
-
- puts ("");
- }
-
- if (listwhat & LIST_VALS)
- for (i = 0; i < num_values; i++)
- {
- m = (maxvalnamelen + 1) * sizeof (wchar_t);
- n = maxvaluelen + 1;
- RegEnumValueW (key, i, value_name, &m, 0, &t, (BYTE *) value_data, &n);
- value_data[n] = 0;
- if (!verbose)
- printf ("%ls\n", value_name);
- else
- {
- printf ("%ls (%s) = ", value_name, types[t]);
- switch (t)
- {
- case REG_NONE:
- case REG_BINARY:
- for (j = 0; j < 8 && j < n; j++)
- printf ("%02x ", value_data[j]);
- printf ("\n");
- break;
- case REG_DWORD:
- printf ("0x%08x (%u)\n", *(unsigned int *) value_data,
- *(unsigned int *) value_data);
- break;
- case REG_DWORD_BIG_ENDIAN:
- v = ((value_data[0] << 24)
- | (value_data[1] << 16)
- | (value_data[2] << 8)
- | (value_data[3]));
- printf ("0x%08x (%d)\n", v, v);
- break;
- case REG_QWORD:
- printf ("0x%016llx (%llu)\n",
- *(unsigned long long *) value_data,
- *(unsigned long long *) value_data);
- break;
- case REG_EXPAND_SZ:
- case REG_SZ:
- case REG_LINK:
- printf ("\"%ls\"\n", (wchar_t *) value_data);
- break;
- case REG_MULTI_SZ:
- vd = (wchar_t *) value_data;
- while (vd && *vd)
- {
- printf ("\"%ls\"", vd);
- vd = vd + wcslen (vd) + 1;
- if (*vd)
- printf (", ");
- }
- printf ("\n");
- break;
- default:
- printf ("?\n");
- break;
- }
- }
- }
- return 0;
-}
-
-int
-cmd_add ()
-{
- find_key (2, KEY_ALL_ACCESS);
- HKEY newkey;
- DWORD newtype;
- int rv = RegCreateKeyExW (key, value, 0, NULL, REG_OPTION_NON_VOLATILE,
- KEY_ALL_ACCESS | wow64, 0, &newkey, &newtype);
- if (rv != ERROR_SUCCESS)
- Fail (rv);
-
- if (verbose)
- {
- if (newtype == REG_OPENED_EXISTING_KEY)
- printf ("Key %ls already exists\n", value);
- else
- printf ("Key %ls created\n", value);
- }
- return 0;
-}
-
-extern "C" {
- LONG WINAPI (*regDeleteKeyEx)(HKEY, LPCWSTR, REGSAM, DWORD);
-}
-
-int
-cmd_remove ()
-{
- DWORD rv;
-
- find_key (2, KEY_ALL_ACCESS);
- if (wow64)
- {
- HMODULE mod = LoadLibrary ("advapi32.dll");
- if (mod)
- regDeleteKeyEx = (LONG WINAPI (*)(HKEY, LPCWSTR, REGSAM, DWORD)) GetProcAddress (mod, "RegDeleteKeyExW");
- }
- if (regDeleteKeyEx)
- rv = (*regDeleteKeyEx) (key, value, wow64, 0);
- else
- rv = RegDeleteKeyW (key, value);
- if (rv != ERROR_SUCCESS)
- Fail (rv);
- if (verbose)
- printf ("subkey %ls deleted\n", value);
- return 0;
-}
-
-int
-cmd_check ()
-{
- find_key (1, KEY_READ);
- if (verbose)
- printf ("key %s exists\n", argv[0]);
- return 0;
-}
-
-int
-cmd_set ()
-{
- int i, n, max_n;
- DWORD v, rv;
- unsigned long long llval;
- char *a = argv[1], *data = 0;
- find_key (2, KEY_ALL_ACCESS);
-
- if (!a)
- usage ();
- if (value_type == REG_AUTO)
- {
- char *e;
- llval = strtoull (a, &e, 0);
- if (a[0] == '%')
- value_type = REG_EXPAND_SZ;
- else if (a[0] && !*e)
- value_type = llval > 0xffffffffULL ? REG_QWORD : REG_DWORD;
- else if (argv[2])
- value_type = REG_MULTI_SZ;
- else
- value_type = REG_SZ;
- }
-
- switch (value_type)
- {
- case REG_NONE:
- case REG_BINARY:
- for (n = 0; argv[n+1]; n++)
- ;
- if (n == 1 && strcmp (argv[1], "-") == 0)
- { /* read from stdin */
- i = n = 0;
- for (;;)
- {
- if (i <= n)
- {
- i = n + BUFSIZ;
- data = (char *) realloc (data, i);
- }
- int r = fread (data+n, 1, i-n, stdin);
- if (r <= 0)
- break;
- n += r;
- }
- }
- else if (n > 0)
- { /* parse hex from argv */
- data = (char *) malloc (n);
- for (i = 0; i < n; i++)
- {
- char *e;
- errno = 0;
- v = strtoul (argv[i+1], &e, 16);
- if (errno || v > 0xff || *e)
- {
- fprintf (stderr, "Invalid hex constant `%s'\n", argv[i+1]);
- exit (1);
- }
- data[i] = (char) v;
- }
- }
- rv = RegSetValueExW (key, value, 0, value_type, (const BYTE *) data, n);
- break;
- case REG_DWORD:
- v = strtoul (a, 0, 0);
- rv = RegSetValueExW (key, value, 0, REG_DWORD, (const BYTE *) &v,
- sizeof (v));
- break;
- case REG_DWORD_BIG_ENDIAN:
- v = strtoul (a, 0, 0);
- v = (((v & 0xff) << 24)
- | ((v & 0xff00) << 8)
- | ((v & 0xff0000) >> 8)
- | ((v & 0xff000000) >> 24));
- rv = RegSetValueExW (key, value, 0, REG_DWORD_BIG_ENDIAN,
- (const BYTE *) &v, sizeof (v));
- break;
- case REG_QWORD:
- llval = strtoul (a, 0, 0);
- rv = RegSetValueExW (key, value, 0, REG_QWORD, (const BYTE *) &llval,
- sizeof (llval));
- break;
- case REG_SZ:
- case REG_EXPAND_SZ:
- {
- n = mbstowcs (NULL, a, 0);
- wchar_t w[n + 1];
- mbstowcs (w, a, n + 1);
- rv = RegSetValueExW (key, value, 0, value_type,
- (const BYTE *) w, (n + 1) * sizeof (wchar_t));
- }
- break;
- case REG_MULTI_SZ:
- for (i = 1, max_n = 1; argv[i]; i++)
- max_n += mbstowcs (NULL, argv[i], 0) + 1;
- data = (char *) malloc (max_n * sizeof (wchar_t));
- for (i = 1, n = 0; argv[i]; i++)
- n += mbstowcs ((wchar_t *) data + n, argv[i], max_n - n) + 1;
- ((wchar_t *)data)[n] = L'\0';
- rv = RegSetValueExW (key, value, 0, REG_MULTI_SZ, (const BYTE *) data,
- (n + 1) * sizeof (wchar_t));
- break;
- case REG_AUTO:
- rv = ERROR_SUCCESS;
- break;
- default:
- rv = ERROR_INVALID_CATEGORY;
- break;
- }
-
- if (data)
- free(data);
-
- if (rv != ERROR_SUCCESS)
- Fail (rv);
-
- return 0;
-}
-
-int
-cmd_unset ()
-{
- find_key (2, KEY_ALL_ACCESS);
- DWORD rv = RegDeleteValueW (key, value);
- if (rv != ERROR_SUCCESS)
- Fail (rv);
- if (verbose)
- printf ("value %ls deleted\n", value);
- return 0;
-}
-
-int
-cmd_get ()
-{
- find_key (2, KEY_READ);
- DWORD vtype, dsize, rv;
- PBYTE data;
- wchar_t *vd;
-
- rv = RegQueryValueExW (key, value, 0, &vtype, 0, &dsize);
- if (rv != ERROR_SUCCESS)
- Fail (rv);
- data = (PBYTE) malloc (dsize + 1);
- rv = RegQueryValueExW (key, value, 0, &vtype, data, &dsize);
- if (rv != ERROR_SUCCESS)
- Fail (rv);
- if (value_type == REG_BINARY)
- {
- for (unsigned i = 0; i < dsize; i++)
- printf ("%02x%c", (unsigned char)data[i],
- (i < dsize-1 ? ' ' : '\n'));
- }
- else if (value_type == REG_NONE)
- fwrite (data, dsize, 1, stdout);
- else
- switch (vtype)
- {
- case REG_NONE:
- case REG_BINARY:
- fwrite (data, dsize, 1, stdout);
- break;
- case REG_DWORD:
- printf (hex ? "0x%08x\n" : "%u\n", *(unsigned int *) data);
- break;
- case REG_DWORD_BIG_ENDIAN:
- rv = ((data[0] << 24)
- | (data[1] << 16)
- | (data[2] << 8)
- | (data[3]));
- printf (hex ? "0x%08x\n" : "%u\n", (unsigned int) rv);
- break;
- case REG_QWORD:
- printf (hex ? "0x%016llx\n" : "%llu\n", *(unsigned long long *) data);
- break;
- case REG_SZ:
- case REG_LINK:
- printf ("%ls\n", (wchar_t *) data);
- break;
- case REG_EXPAND_SZ:
- if (value_type == REG_EXPAND_SZ) // hack
- {
- wchar_t *buf;
- DWORD bufsize;
- bufsize = ExpandEnvironmentStringsW ((wchar_t *) data, 0, 0);
- buf = (wchar_t *) malloc (bufsize + 1);
- ExpandEnvironmentStringsW ((wchar_t *) data, buf, bufsize + 1);
- free (data);
- data = (PBYTE) buf;
- }
- printf ("%ls\n", (wchar_t *) data);
- break;
- case REG_MULTI_SZ:
- vd = (wchar_t *) data;
- while (vd && *vd)
- {
- printf ("%ls\n", vd);
- vd = vd + wcslen (vd) + 1;
- }
- break;
- }
- return 0;
-}
-
-int
-cmd_load ()
-{
- if (!argv[1])
- {
- usage ();
- return 1;
- }
- find_key (1, 0);
- return 0;
-}
-
-int
-cmd_unload ()
-{
- if (argv[1])
- {
- usage ();
- return 1;
- }
- find_key (1, 0);
- return 0;
-}
-
-DWORD
-set_privilege (const char *name)
-{
- TOKEN_PRIVILEGES tp;
- if (!LookupPrivilegeValue (NULL, name, &tp.Privileges[0].Luid))
- return GetLastError ();
- tp.PrivilegeCount = 1;
- tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
- HANDLE t;
- /* OpenProcessToken does not work here, because main thread has its own
- impersonation token */
- if (!OpenThreadToken (GetCurrentThread (), TOKEN_ADJUST_PRIVILEGES, FALSE, &t))
- return GetLastError ();
- AdjustTokenPrivileges (t, FALSE, &tp, 0, NULL, NULL);
- DWORD rv = GetLastError ();
- CloseHandle (t);
- return rv;
-}
-
-int
-cmd_save ()
-{
- if (!argv[1])
- {
- usage ();
- return 1;
- }
- /* try to set SeBackupPrivilege, let RegSaveKey report the error */
- set_privilege (SE_BACKUP_NAME);
- /* REG_OPTION_BACKUP_RESTORE is necessary to save /HKLM/SECURITY */
- find_key (1, KEY_QUERY_VALUE, REG_OPTION_BACKUP_RESTORE);
- ssize_t len = cygwin_conv_path (CCP_POSIX_TO_WIN_W, argv[1], NULL, 0);
- wchar_t win32_path[len];
- cygwin_conv_path (CCP_POSIX_TO_WIN_W, argv[1], win32_path, len);
- DWORD rv = RegSaveKeyW (key, win32_path, NULL);
- if (rv != ERROR_SUCCESS)
- Fail (rv);
- if (verbose)
- printf ("key saved to %ls\n", win32_path);
- return 0;
-}
-
-static struct
-{
- const char *name;
- int (*func) ();
-} commands[] =
-{
- {"list", cmd_list},
- {"add", cmd_add},
- {"remove", cmd_remove},
- {"check", cmd_check},
- {"set", cmd_set},
- {"unset", cmd_unset},
- {"get", cmd_get},
- {"load", cmd_load},
- {"unload", cmd_unload},
- {"save", cmd_save},
- {0, 0}
-};
-
-int
-main (int argc, char **_argv)
-{
- int g;
-
- setlocale (LC_ALL, "");
-
- prog_name = program_invocation_short_name;
-
- while ((g = getopt_long (argc, _argv, opts, longopts, NULL)) != EOF)
- switch (g)
- {
- case 'b':
- value_type = REG_BINARY;
- break;
- case 'd':
- value_type = REG_DWORD;
- break;
- case 'D':
- value_type = REG_DWORD_BIG_ENDIAN;
- break;
- case 'e':
- value_type = REG_EXPAND_SZ;
- break;
- case 'k':
- listwhat |= LIST_KEYS;
- break;
- case 'h':
- usage (stdout);
- case 'i':
- value_type = REG_DWORD;
- break;
- case 'l':
- listwhat |= LIST_VALS;
- break;
- case 'm':
- value_type = REG_MULTI_SZ;
- break;
- case 'n':
- value_type = REG_NONE;
- break;
- case 'p':
- postfix++;
- break;
- case 'q':
- quiet++;
- break;
- case 'Q':
- value_type = REG_QWORD;
- break;
- case 's':
- value_type = REG_SZ;
- break;
- case 'v':
- verbose++;
- break;
- case 'V':
- print_version ();
- exit (0);
- case 'w':
- wow64 = KEY_WOW64_64KEY;
- break;
- case 'W':
- wow64 = KEY_WOW64_32KEY;
- break;
- case 'x':
- hex++;
- break;
- case 'K':
- key_sep = *optarg;
- break;
- default :
- fprintf (stderr, "Try `%s --help' for more information.\n",
- prog_name);
- return 1;
- }
-
- if ((_argv[optind] == NULL) || (_argv[optind+1] == NULL))
- usage ();
-
- argv = _argv + optind;
- int i;
- for (i = 0; commands[i].name; i++)
- if (strcmp (commands[i].name, argv[0]) == 0)
- {
- argv++;
- return commands[i].func ();
- }
- usage ();
-
- return 0;
-}
diff --git a/winsup/utils/setfacl.c b/winsup/utils/setfacl.c
deleted file mode 100644
index ba674d009..000000000
--- a/winsup/utils/setfacl.c
+++ /dev/null
@@ -1,704 +0,0 @@
-/* setfacl.c
-
- Copyright 2000, 2001, 2002, 2003, 2006, 2008, 2009, 2010, 2011, 2014
- Red Hat Inc.
-
- Written by Corinna Vinschen <vinschen@redhat.com>
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include <errno.h>
-#include <stdio.h>
-#include <ctype.h>
-#include <string.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <getopt.h>
-#include <pwd.h>
-#include <grp.h>
-#include <sys/types.h>
-#include <sys/acl.h>
-#include <cygwin/version.h>
-
-#ifndef BOOL
-#define BOOL int
-#endif
-
-#ifndef TRUE
-#define TRUE (1)
-#endif
-
-#ifndef FALSE
-#define FALSE (0)
-#endif
-
-#ifndef ILLEGAL_MODE
-#define ILLEGAL_MODE ((mode_t)0xffffffff)
-#endif
-
-static char *prog_name;
-
-typedef enum {
- NoAction,
- Set,
- Modify,
- Delete,
- ModNDel,
- DeleteAll,
- DeleteDef,
- SetFromFile
-} action_t;
-
-mode_t getperm (char *in)
-{
- if (isdigit ((unsigned char) *in) && !in[1])
- {
- int i = atoi (in);
- if (i < 0 || i > 7)
- return ILLEGAL_MODE;
- return i << 6 | i << 3 | i;
- }
- if (strlen (in) > 3 && strchr (" \t\n\r#", in[3]))
- in[3] = '\0';
- if (strlen (in) != 3)
- return ILLEGAL_MODE;
- if (!strchr ("r-", in[0])
- || !strchr ("w-", in[1])
- || !strchr ("x-", in[2]))
- return ILLEGAL_MODE;
- return (in[0] == 'r' ? S_IROTH : 0)
- | (in[1] == 'w' ? S_IWOTH : 0)
- | (in[2] == 'x' ? S_IXOTH : 0);
-}
-
-BOOL
-getaclentry (action_t action, char *c, aclent_t *ace)
-{
- char *c2;
-
- ace->a_type = 0;
- ace->a_id = (uid_t) -1;
- ace->a_perm = 0;
-
- /* First, check if we're handling a default entry. */
- if (!strncmp (c, "default:", 8) || !strncmp (c, "d:", 2))
- {
- ace->a_type = ACL_DEFAULT;
- c = strchr (c, ':') + 1;
- }
- /* c now points to the type. Check for next colon. If we find a colon,
- NUL it. Otherwise the string is invalid, except when deleting. */
- c2 = strchrnul (c, ':');
- if (*c2 == ':')
- *c2++ = '\0';
- else if (action != Delete)
- return FALSE;
- /* Fetch the type. */
- if (!strcmp (c, "u") || !strcmp (c, "user"))
- ace->a_type |= USER_OBJ;
- else if (!strcmp (c, "g") || !strcmp (c, "group"))
- ace->a_type |= GROUP_OBJ;
- else if (!strcmp (c, "m") || !strcmp (c, "mask"))
- ace->a_type |= CLASS_OBJ;
- else if (!strcmp (c, "o") || !strcmp (c, "other"))
- ace->a_type |= OTHER_OBJ;
- else
- return FALSE;
- /* Skip to next field. */
- c = c2;
- if (!*c)
- {
- /* Nothing follows. This is only valid if action is Delete and the
- type is CLASS_OBJ, or if ACL_DEFAULT is set. */
- if (action != Delete
- || (!(ace->a_type & (CLASS_OBJ | ACL_DEFAULT))))
- return FALSE;
- }
- else if (!(ace->a_type & (USER_OBJ | GROUP_OBJ)))
- {
- /* Mask and other entries may contain an extra colon. */
- if (*c == ':')
- ++c;
- }
- /* If this is a user or group entry, check if next char is a colon char.
- If so, skip it, otherwise it's the name of a user or group. */
- else if (*c == ':')
- ++c;
- else if (*c)
- {
- /* c now points to the id. Check for next colon. If we find a colon,
- NUL it. Otherwise the string is invalid, except when deleting.
- If we delete, it must be a default entry since standard ugo entries
- can't be deleted. */
- c2 = strchrnul (c + 1, ':');
- if (*c2 == ':')
- *c2++ = '\0';
- else if (action != Delete)
- return FALSE;
- /* Fetch user/group id. */
- if (isdigit ((unsigned char) *c))
- {
- char *c3;
-
- ace->a_id = strtol (c, &c3, 10);
- if (*c3)
- return FALSE;
- }
- else if (ace->a_type & USER_OBJ)
- {
- struct passwd *pw = getpwnam (c);
- if (!pw)
- return FALSE;
- ace->a_id = pw->pw_uid;
- }
- else
- {
- struct group *gr = getgrnam (c);
- if (!gr)
- return FALSE;
- ace->a_id = gr->gr_gid;
- }
- if (ace->a_type & USER_OBJ)
- {
- ace->a_type &= ~USER_OBJ;
- ace->a_type |= USER;
- }
- else
- {
- ace->a_type &= ~GROUP_OBJ;
- ace->a_type |= GROUP;
- }
- /* Skip to next field. */
- c = c2;
- }
- if (action == Delete)
- {
- /* Trailing garbage? */
- if (*c)
- return FALSE;
- /* No, we're good. */
- ace->a_perm = ILLEGAL_MODE;
- return TRUE;
- }
- /* Check perms. */
- if ((ace->a_perm = getperm (c)) == ILLEGAL_MODE)
- return FALSE;
- return TRUE;
-}
-
-BOOL
-getaclentries (action_t action, char *buf, aclent_t *acls, int *idx)
-{
- char *c;
-
- if (action == SetFromFile)
- {
- FILE *fp;
- char fbuf[256], *fb;
-
- if (!strcmp (buf, "-"))
- fp = stdin;
- else if (! (fp = fopen (buf, "r")))
- return FALSE;
- while ((fb = fgets (fbuf, 256, fp)))
- {
- while (strchr (" \t", *fb))
- ++fb;
- if (strchr ("\n\r#", *fb))
- continue;
- if (!getaclentry (action, fb, acls + (*idx)++))
- {
- fclose (fp);
- return FALSE;
- }
- }
- if (fp != stdin)
- fclose (fp);
- }
- else
- for (c = strtok (buf, ","); c; c = strtok (NULL, ","))
- if (!getaclentry (action, c, acls + (*idx)++))
- return FALSE;
- return TRUE;
-}
-
-int
-searchace (aclent_t *aclp, int nentries, int type, int id)
-{
- int i;
-
- for (i = 0; i < nentries; ++i)
- if ((aclp[i].a_type == type && (id < 0 || aclp[i].a_id == id))
- || !aclp[i].a_type)
- return i;
- return -1;
-}
-
-int
-modacl (aclent_t *tgt, int tcnt, aclent_t *src, int scnt)
-{
- int t, s, i;
-
- for (s = 0; s < scnt; ++s)
- {
- t = searchace (tgt, MAX_ACL_ENTRIES, src[s].a_type,
- (src[s].a_type & (USER | GROUP)) ? src[s].a_id : -1);
- if (t < 0)
- return -1;
- if (src[s].a_perm == ILLEGAL_MODE)
- {
- if (t < tcnt)
- {
- for (i = t + 1; i < tcnt; ++i)
- tgt[i - 1] = tgt[i];
- --tcnt;
- }
- }
- else
- {
- tgt[t] = src[s];
- if (t >= tcnt)
- ++tcnt;
- }
- }
- return tcnt;
-}
-
-int
-addmissing (aclent_t *tgt, int tcnt)
-{
- int t;
- int types = 0, def_types = 0;
- int perm = 0, def_perm = 0;
-
- /* Check if we have all the required entries now. */
- for (t = 0; t < tcnt; ++t)
- if (tgt[t].a_type & ACL_DEFAULT)
- {
- def_types |= tgt[t].a_type;
- if (tgt[t].a_type & (USER | GROUP | GROUP_OBJ))
- def_perm |= tgt[t].a_perm;
- }
- else
- {
- types |= tgt[t].a_type;
- if (tgt[t].a_type & (USER | GROUP | GROUP_OBJ))
- perm |= tgt[t].a_perm;
- }
- /* Add missing CLASS_OBJ */
- if ((types & (USER | GROUP)) && !(types & CLASS_OBJ))
- {
- tgt[tcnt].a_type = CLASS_OBJ;
- tgt[tcnt].a_id = (uid_t) -1;
- tgt[tcnt++].a_perm = perm;
- }
- if (def_types)
- {
- /* Add missing default entries. */
- if (!(def_types & USER_OBJ) && tcnt < MAX_ACL_ENTRIES)
- {
- t = searchace (tgt, tcnt, USER_OBJ, -1);
- tgt[tcnt].a_type = DEF_USER_OBJ;
- tgt[tcnt].a_id = (uid_t) -1;
- tgt[tcnt++].a_perm = t >= 0 ? tgt[t].a_perm : S_IRWXO;
- }
- if (!(def_types & GROUP_OBJ) && tcnt < MAX_ACL_ENTRIES)
- {
- t = searchace (tgt, tcnt, GROUP_OBJ, -1);
- tgt[tcnt].a_type = DEF_GROUP_OBJ;
- tgt[tcnt].a_id = (uid_t) -1;
- tgt[tcnt].a_perm = t >= 0 ? tgt[t].a_perm : (S_IROTH | S_IXOTH);
- def_perm |= tgt[tcnt++].a_perm;
- }
- if (!(def_types & OTHER_OBJ) && tcnt < MAX_ACL_ENTRIES)
- {
- t = searchace (tgt, tcnt, OTHER_OBJ, -1);
- tgt[tcnt].a_type = DEF_OTHER_OBJ;
- tgt[tcnt].a_id = (uid_t) -1;
- tgt[tcnt++].a_perm = t >= 0 ? tgt[t].a_perm : (S_IROTH | S_IXOTH);
- }
- /* Add missing DEF_CLASS_OBJ */
- if ((def_types & (USER | GROUP)) && !(def_types & CLASS_OBJ))
- {
- tgt[tcnt].a_type = DEF_CLASS_OBJ;
- tgt[tcnt].a_id = (uid_t) -1;
- tgt[tcnt++].a_perm = def_perm;
- }
- }
- return tcnt;
-}
-
-int
-delacl (aclent_t *tgt, int tcnt, action_t action)
-{
- int t;
-
- for (t = 0; t < tcnt; ++t)
- /* -b (DeleteAll): Remove all extended ACL entries.
- -k (DeleteDef): Remove all default ACL entries. */
- if ((action == DeleteAll && (tgt[t].a_type & (USER | GROUP | CLASS_OBJ)))
- || (action == DeleteDef && (tgt[t].a_type & ACL_DEFAULT)))
- {
- --tcnt;
- if (t < tcnt)
- memmove (&tgt[t], &tgt[t + 1], (tcnt - t) * sizeof (aclent_t));
- --t;
- }
- return tcnt;
-}
-
-int
-setfacl (action_t action, const char *path, aclent_t *acls, int cnt)
-{
- aclent_t lacl[MAX_ACL_ENTRIES];
- int lcnt;
-
- memset (lacl, 0, sizeof lacl);
- switch (action)
- {
- case Set:
- if (acl (path, SETACL, cnt, acls))
- {
- perror (prog_name);
- return 2;
- }
- break;
- case Delete:
- if ((lcnt = acl (path, GETACL, MAX_ACL_ENTRIES, lacl)) < 0
- || (lcnt = modacl (lacl, lcnt, acls, cnt)) < 0
- || (lcnt = acl (path, SETACL, lcnt, lacl)) < 0)
- {
- perror (prog_name);
- return 2;
- }
- break;
- case DeleteAll:
- case DeleteDef:
- if ((lcnt = acl (path, GETACL, MAX_ACL_ENTRIES, lacl)) < 0
- || (lcnt = delacl (lacl, lcnt, action)) < 0
- || (lcnt = acl (path, SETACL, lcnt, lacl)) < 0)
- {
- perror (prog_name);
- return 2;
- }
- break;
- default:
- if ((lcnt = acl (path, GETACL, MAX_ACL_ENTRIES, lacl)) < 0
- || (lcnt = modacl (lacl, lcnt, acls, cnt)) < 0
- || (lcnt = addmissing (lacl, lcnt)) < 0
- || (lcnt = acl (path, SETACL, lcnt, lacl)) < 0)
- {
- perror (prog_name);
- return 2;
- }
- break;
- }
- return 0;
-}
-
-static void
-usage (FILE *stream)
-{
- fprintf (stream, ""
- "Usage: %s [-r] {-f ACL_FILE | -s acl_entries} FILE...\n"
- " %s [-r] {-b|[-d acl_entries] [-m acl_entries]} FILE...\n"
- "\n"
- "Modify file and directory access control lists (ACLs)\n"
- "\n"
- " -b, --remove-all remove all extended ACL entries\n"
- " -d, --delete delete one or more specified ACL entries\n"
- " -f, --file set ACL entries for FILE to ACL entries read\n"
- " from a ACL_FILE\n"
- " -k, --remove-default\n"
- " remove all default ACL entries\n"
- " -m, --modify modify one or more specified ACL entries\n"
- " -r, --replace replace mask entry with maximum permissions\n"
- " needed for the file group class\n"
- " -s, --substitute substitute specified ACL entries for the\n"
- " ACL of FILE\n"
- " -h, --help output usage information and exit\n"
- " -V, --version output version information and exit\n"
- "\n"
- "At least one of (-b, -d, -f, -k, -m, -s) must be specified\n"
- "\n", prog_name, prog_name);
- if (stream == stdout)
- {
- printf(""
- " Acl_entries are one or more comma-separated ACL entries \n"
- " from the following list:\n"
- "\n"
- " u[ser]::perm\n"
- " u[ser]:uid:perm\n"
- " g[roup]::perm\n"
- " g[roup]:gid:perm\n"
- " m[ask]:perm\n"
- " o[ther]:perm\n"
- "\n"
- " Default entries are like the above with the additional\n"
- " default identifier. For example: \n"
- "\n"
- " d[efault]:u[ser]:uid:perm\n"
- "\n"
- " 'perm' is either a 3-char permissions string in the form\n"
- " \"rwx\" with the character - for no permission\n"
- " or it is the octal representation of the permissions, a\n"
- " value from 0 (equivalent to \"---\") to 7 (\"rwx\").\n"
- " 'uid' is a user name or a numerical uid.\n"
- " 'gid' is a group name or a numerical gid.\n"
- "\n"
- "\n"
- "For each file given as parameter, %s will either replace its\n"
- "complete ACL (-s, -f), or it will add, modify, or delete ACL\n"
- "entries.\n"
- "\n"
- "The following options are supported:\n"
- "\n"
- "-b Remove all extended ACL entries. The base ACL entries of the\n"
- " owner, group and others are retained.\n"
- "\n"
- "-d Delete one or more specified entries from the file's ACL.\n"
- " The owner, group and others entries must not be deleted.\n"
- " Acl_entries to be deleted should be specified without\n"
- " permissions, as in the following list:\n"
- "\n"
- " u[ser]:uid[:]\n"
- " g[roup]:gid[:]\n"
- " m[ask][:]\n"
- " d[efault]:u[ser][:uid]\n"
- " d[efault]:g[roup][:gid]\n"
- " d[efault]:m[ask][:]\n"
- " d[efault]:o[ther][:]\n"
- "\n"
- "-f Take the Acl_entries from ACL_FILE one per line. Whitespace\n"
- " characters are ignored, and the character \"#\" may be used\n"
- " to start a comment. The special filename \"-\" indicates\n"
- " reading from stdin.\n"
- " Required entries are\n"
- " - One user entry for the owner of the file.\n"
- " - One group entry for the group of the file.\n"
- " - One other entry.\n"
- " If additional user and group entries are given:\n"
- " - A mask entry for the file group class of the file.\n"
- " - No duplicate user or group entries with the same uid/gid.\n"
- " If it is a directory:\n"
- " - One default user entry for the owner of the file.\n"
- " - One default group entry for the group of the file.\n"
- " - One default mask entry for the file group class.\n"
- " - One default other entry.\n"
- "\n"
- "-k Remove all default ACL entries. If no default ACL entries\n"
- " exist, no warnings are issued.\n"
- "\n"
- "-m Add or modify one or more specified ACL entries.\n"
- " Acl_entries is a comma-separated list of entries from the \n"
- " same list as above.\n"
- "\n"
- "-r Causes the permissions specified in the mask entry to be\n"
- " ignored and replaced by the maximum permissions needed for\n"
- " the file group class.\n"
- "\n"
- "-s Like -f, but substitute the file's ACL with Acl_entries\n"
- " specified in a comma-separated list on the command line.\n"
- "\n"
- "While the -d and -m options may be used in the same command, the\n"
- "-f and -s options may be used only exclusively.\n"
- "\n"
- "Directories may contain default ACL entries. Files created\n"
- "in a directory that contains default ACL entries will have\n"
- "permissions according to the combination of the current umask,\n"
- "the explicit permissions requested and the default ACL entries\n"
- "\n", prog_name);
- }
- else
- fprintf(stream, "Try '%s --help' for more information.\n", prog_name);
-}
-
-struct option longopts[] = {
- {"remove-all", no_argument, NULL, 'b'},
- {"delete", required_argument, NULL, 'd'},
- {"file", required_argument, NULL, 'f'},
- {"remove-default", no_argument, NULL, 'k'},
- {"modify", required_argument, NULL, 'm'},
- {"replace", no_argument, NULL, 'r'},
- {"substitute", required_argument, NULL, 's'},
- {"help", no_argument, NULL, 'h'},
- {"version", no_argument, NULL, 'V'},
- {0, no_argument, NULL, 0}
-};
-const char *opts = "bd:f:hkm:rs:V";
-
-static void
-print_version ()
-{
- printf ("setfacl (cygwin) %d.%d.%d\n"
- "POSIX ACL modification utility\n"
- "Copyright (C) 2000 - %s Red Hat, Inc.\n"
- "This is free software; see the source for copying conditions. There is NO\n"
- "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n",
- CYGWIN_VERSION_DLL_MAJOR / 1000,
- CYGWIN_VERSION_DLL_MAJOR % 1000,
- CYGWIN_VERSION_DLL_MINOR,
- strrchr (__DATE__, ' ') + 1);
-}
-
-int
-main (int argc, char **argv)
-{
- int c;
- action_t action = NoAction;
- int ropt = 0;
- aclent_t acls[MAX_ACL_ENTRIES];
- int aclidx = 0;
- int ret = 0;
-
- prog_name = program_invocation_short_name;
-
- memset (acls, 0, sizeof acls);
- while ((c = getopt_long (argc, argv, opts, longopts, NULL)) != EOF)
- switch (c)
- {
- case 'b':
- if (action == NoAction)
- action = DeleteAll;
- else
- {
- usage (stderr);
- return 1;
- }
- break;
- case 'd':
- if (action == NoAction)
- action = Delete;
- else if (action == Modify)
- action = ModNDel;
- else
- {
- usage (stderr);
- return 1;
- }
- if (! getaclentries (Delete, optarg, acls, &aclidx))
- {
- fprintf (stderr, "%s: illegal acl entries\n", prog_name);
- return 2;
- }
- break;
- case 'f':
- if (action == NoAction)
- action = Set;
- else
- {
- usage (stderr);
- return 1;
- }
- if (! getaclentries (SetFromFile, optarg, acls, &aclidx))
- {
- fprintf (stderr, "%s: illegal acl entries\n", prog_name);
- return 2;
- }
- break;
- case 'h':
- usage (stdout);
- return 0;
- case 'k':
- if (action == NoAction)
- action = DeleteDef;
- else
- {
- usage (stderr);
- return 1;
- }
- break;
- case 'm':
- if (action == NoAction)
- action = Modify;
- else if (action == Delete)
- action = ModNDel;
- else
- {
- usage (stderr);
- return 1;
- }
- if (! getaclentries (Modify, optarg, acls, &aclidx))
- {
- fprintf (stderr, "%s: illegal acl entries\n", prog_name);
- return 2;
- }
- break;
- case 'r':
- if (!ropt)
- ropt = 1;
- else
- {
- usage (stderr);
- return 1;
- }
- break;
- case 's':
- if (action == NoAction)
- action = Set;
- else
- {
- usage (stderr);
- return 1;
- }
- if (! getaclentries (Set, optarg, acls, &aclidx))
- {
- fprintf (stderr, "%s: illegal acl entries\n", prog_name);
- return 2;
- }
- break;
- case 'V':
- print_version ();
- return 0;
- default:
- fprintf (stderr, "Try `%s --help' for more information.\n", prog_name);
- return 1;
- }
- if (action == NoAction)
- {
- usage (stderr);
- return 1;
- }
- if (optind > argc - 1)
- {
- usage (stderr);
- return 1;
- }
- if (action == Set)
- switch (aclcheck (acls, aclidx, NULL))
- {
- case GRP_ERROR:
- fprintf (stderr, "%s: more than one group entry.\n", prog_name);
- return 2;
- case USER_ERROR:
- fprintf (stderr, "%s: more than one user entry.\n", prog_name);
- return 2;
- case CLASS_ERROR:
- fprintf (stderr, "%s: more than one mask entry.\n", prog_name);
- return 2;
- case OTHER_ERROR:
- fprintf (stderr, "%s: more than one other entry.\n", prog_name);
- return 2;
- case DUPLICATE_ERROR:
- fprintf (stderr, "%s: duplicate additional user or group.\n", prog_name);
- return 2;
- case ENTRY_ERROR:
- fprintf (stderr, "%s: invalid entry type.\n", prog_name);
- return 2;
- case MISS_ERROR:
- fprintf (stderr, "%s: missing entries.\n", prog_name);
- return 2;
- case MEM_ERROR:
- fprintf (stderr, "%s: out of memory.\n", prog_name);
- return 2;
- default:
- break;
- }
- for (c = optind; c < argc; ++c)
- ret |= setfacl (action, argv[c], acls, aclidx);
- return ret;
-}
diff --git a/winsup/utils/setmetamode.c b/winsup/utils/setmetamode.c
deleted file mode 100644
index fc1059f7c..000000000
--- a/winsup/utils/setmetamode.c
+++ /dev/null
@@ -1,120 +0,0 @@
-/* setmetamode.c
-
- Copyright 2006, 2011 Red Hat Inc.
-
- Written by Kazuhiro Fujieda <fujieda@jaist.ac.jp>
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include <errno.h>
-#include <stdio.h>
-#include <string.h>
-#include <getopt.h>
-#include <sys/ioctl.h>
-#include <cygwin/kd.h>
-#include <cygwin/version.h>
-
-static void
-usage (void)
-{
- fprintf (stderr, "Usage: %s [metabit|escprefix]\n"
- "\n"
- "Get or set keyboard meta mode\n"
- "\n"
- " Without argument, it shows the current meta key mode.\n"
- " metabit|meta|bit The meta key sets the top bit of the character.\n"
- " escprefix|esc|prefix The meta key sends an escape prefix.\n"
- "\n"
- "Other options:\n"
- "\n"
- " -h, --help This text\n"
- " -V, --version Print program version and exit\n\n",
- program_invocation_short_name);
-}
-
-static void
-error (void)
-{
- fprintf (stderr,
- "%s: The standard input isn't a console device.\n",
- program_invocation_short_name);
-}
-
-void
-print_version ()
-{
- printf ("setmetamode (cygwin) %d.%d.%d\n"
- "Get or set keyboard meta mode\n"
- "Copyright (C) 2006 - %s Red Hat, Inc.\n"
- "This is free software; see the source for copying conditions. There is NO\n"
- "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n",
- CYGWIN_VERSION_DLL_MAJOR / 1000,
- CYGWIN_VERSION_DLL_MAJOR % 1000,
- CYGWIN_VERSION_DLL_MINOR,
- strrchr (__DATE__, ' ') + 1);
-}
-
-struct option longopts[] = {
- {"help", no_argument, NULL, 'h'},
- {"version", no_argument, NULL, 'V'},
- {0, no_argument, NULL, 0}
-};
-const char *opts = "hV";
-
-int
-main (int ac, char *av[])
-{
- int param;
- int opt;
-
- if (ac < 2)
- {
- if (ioctl (0, KDGKBMETA, &param) < 0)
- {
- error ();
- return 1;
- }
- if (param == 0x03)
- puts ("metabit");
- else
- puts ("escprefix");
- return 0;
- }
-
- while ((opt = getopt_long (ac, av, opts, longopts, NULL)) != -1)
- switch (opt)
- {
- case 'h':
- usage ();
- return 0;
- case 'V':
- print_version ();
- return 0;
- default:
- fprintf (stderr, "Try `%s --help' for more information.\n",
- program_invocation_short_name);
- return 1;
- }
-
- if (!strcmp ("meta", av[1]) || !strcmp ("bit", av[1])
- || !strcmp ("metabit", av[1]))
- param = 0x03;
- else if (!strcmp ("esc", av[1]) || !strcmp ("prefix", av[1])
- || !strcmp ("escprefix", av[1]))
- param = 0x04;
- else
- {
- usage ();
- return 1;
- }
- if (ioctl (0, KDSKBMETA, param) < 0)
- {
- error ();
- return 1;
- }
- return 0;
-}
diff --git a/winsup/utils/ssp.c b/winsup/utils/ssp.c
deleted file mode 100644
index 3136a9f66..000000000
--- a/winsup/utils/ssp.c
+++ /dev/null
@@ -1,956 +0,0 @@
-/*
- * Copyright (c) 2000, 2001, 2002, 2009, 2011, 2013 Red Hat, 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.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@redhat.com>
- *
- */
-
-#ifdef __x86_64__
-
-#include <stdio.h>
-
-int
-main (int argc, char **argv)
-{
- fprintf (stderr, "%s: This application is unsuported on x86_64 so far.\n",
- argv[0]);
- return 1;
-}
-
-#else
-
-#include <errno.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <fcntl.h>
-#include <time.h>
-#include <ctype.h>
-#include <windows.h>
-#include <getopt.h>
-#include <cygwin/version.h>
-
-static char *prog_name;
-
-static struct option longopts[] =
-{
- {"console-trace", no_argument, NULL, 'c' },
- {"disable", no_argument, NULL, 'd' },
- {"enable", no_argument, NULL, 'e' },
- {"help", no_argument, NULL, 'h' },
- {"dll", no_argument, NULL, 'l' },
- {"sub-threads", no_argument, NULL, 's' },
- {"trace-eip", no_argument, NULL, 't' },
- {"verbose", no_argument, NULL, 'v' },
- {"version", no_argument, NULL, 'V' },
- {NULL, 0, NULL, 0}
-};
-
-static char opts[] = "+cdehlstvV";
-
-#define KERNEL_ADDR 0x77000000
-
-#define TRACE_SSP 0
-
-#define VERBOSE 1
-#define TIMES 1000
-
-/* from winsup/gmon.h */
-struct gmonhdr {
- unsigned long lpc; /* base pc address of sample buffer */
- unsigned long hpc; /* max pc address of sampled buffer */
- int ncnt; /* size of sample buffer (plus this header) */
- int version; /* version number */
- int profrate; /* profiling clock rate */
- int spare[3]; /* reserved */
-};
-#define GMONVERSION 0x00051879
-#define HISTCOUNTER unsigned short
-
-typedef struct {
- unsigned int base_address;
- int pcount;
- int scount;
- char *name;
-} DllInfo;
-
-typedef struct {
- unsigned int address;
- unsigned char real_byte;
-} PendingBreakpoints;
-
-unsigned low_pc=0, high_pc=0;
-unsigned last_pc=0, pc, last_sp=0, sp;
-int total_cycles, count;
-HANDLE hProcess;
-PROCESS_INFORMATION procinfo;
-STARTUPINFO startup;
-CONTEXT context;
-HISTCOUNTER *hits=0;
-struct gmonhdr hdr;
-int running = 1, profiling = 1;
-char dll_name[1024], *dll_ptr, *cp;
-int eip;
-unsigned opcode_count = 0;
-
-int stepping_enabled = 1;
-int tracing_enabled = 0;
-int trace_console = 0;
-int trace_all_threads = 0;
-int dll_counts = 0;
-int verbose = 0;
-
-#define MAXTHREADS 100
-DWORD active_thread_ids[MAXTHREADS];
-HANDLE active_threads[MAXTHREADS];
-DWORD thread_step_flags[MAXTHREADS];
-DWORD thread_return_address[MAXTHREADS];
-int num_active_threads = 0;
-int suspended_count=0;
-
-#define MAXDLLS 100
-DllInfo dll_info[MAXDLLS];
-int num_dlls=0;
-
-#define MAXPENDS 100
-PendingBreakpoints pending_breakpoints[MAXPENDS];
-int num_breakpoints=0;
-
-static void
-add_breakpoint (unsigned int address)
-{
- int i;
- DWORD rv;
- static char int3[] = { 0xcc };
- for (i=0; i<num_breakpoints; i++)
- {
- if (pending_breakpoints[i].address == address)
- return;
- if (pending_breakpoints[i].address == 0)
- break;
- }
- if (i == MAXPENDS)
- return;
- pending_breakpoints[i].address = address;
- ReadProcessMemory (hProcess,
- (void *)address,
- &(pending_breakpoints[i].real_byte),
- 1, &rv);
-
- WriteProcessMemory (hProcess,
- (void *)address,
- (LPVOID)int3, 1, &rv);
- if (i >= num_breakpoints)
- num_breakpoints = i+1;
-}
-
-static int
-remove_breakpoint (unsigned int address)
-{
- int i;
- DWORD rv;
- for (i=0; i<num_breakpoints; i++)
- {
- if (pending_breakpoints[i].address == address)
- {
- pending_breakpoints[i].address = 0;
- WriteProcessMemory (hProcess,
- (void *)address,
- &(pending_breakpoints[i].real_byte),
- 1, &rv);
- return 1;
- }
- }
- return 0;
-}
-
-static HANDLE
-lookup_thread_id (DWORD threadId, int *tix)
-{
- int i;
- *tix = 0;
- for (i=0; i<num_active_threads; i++)
- if (active_thread_ids[i] == threadId)
- {
- if (tix)
- *tix = i;
- return active_threads[i];
- }
- return 0;
-}
-
-static void
-set_step_threads (int threadId, int trace)
-{
- int rv, tix;
- HANDLE thread = lookup_thread_id (threadId, &tix);
-
- rv = GetThreadContext (thread, &context);
- if (rv != -1)
- {
- thread_step_flags[tix] = trace;
- if (trace)
- context.EFlags |= 0x100; /* TRAP (single step) flag */
- else
- context.EFlags &= ~0x100; /* TRAP (single step) flag */
- SetThreadContext (thread, &context);
- }
-}
-
-static void
-set_steps ()
-{
- int i, s;
- for (i=0; i<num_active_threads; i++)
- {
- GetThreadContext (active_threads[i], &context);
- s = context.EFlags & 0x0100;
- if (!s && thread_step_flags[i])
- {
- set_step_threads (active_thread_ids[i], 1);
- }
- }
-}
-
-static int
-dll_sort (const void *va, const void *vb)
-{
- DllInfo *a = (DllInfo *)va;
- DllInfo *b = (DllInfo *)vb;
- if (a->base_address < b->base_address)
- return -1;
- return 1;
-}
-
-static char *
-addr2dllname (unsigned int addr)
-{
- int i;
- for (i=num_dlls-1; i>=0; i--)
- {
- if (dll_info[i].base_address < addr)
- {
- return dll_info[i].name;
- }
- }
- return (char *)"";
-}
-
-static void
-dump_registers (HANDLE thread)
-{
- context.ContextFlags = CONTEXT_FULL;
- GetThreadContext (thread, &context);
- printf ("eax %08lx ebx %08lx ecx %08lx edx %08lx eip\n",
- context.Eax, context.Ebx, context.Ecx, context.Edx);
- printf ("esi %08lx edi %08lx ebp %08lx esp %08lx %08lx\n",
- context.Esi, context.Esi, context.Ebp, context.Esp, context.Eip);
-}
-
-typedef struct Edge {
- struct Edge *next;
- unsigned int from_pc;
- unsigned int to_pc;
- unsigned int count;
-} Edge;
-
-Edge *edges[4096];
-
-void
-store_call_edge (unsigned int from_pc, unsigned int to_pc)
-{
- Edge *e;
- unsigned int h = ((from_pc + to_pc)>>4) & 4095;
- for (e=edges[h]; e; e=e->next)
- if (e->from_pc == from_pc && e->to_pc == to_pc)
- break;
- if (!e)
- {
- e = (Edge *)malloc (sizeof (Edge));
- e->next = edges[h];
- edges[h] = e;
- e->from_pc = from_pc;
- e->to_pc = to_pc;
- e->count = 0;
- }
- e->count++;
-}
-
-void
-write_call_edges (FILE *f)
-{
- int h;
- Edge *e;
- for (h=0; h<4096; h++)
- for (e=edges[h]; e; e=e->next)
- fwrite (&(e->from_pc), 1, 3*sizeof (unsigned int), f);
-}
-
-char *
-wide_strdup (char *cp)
-{
- unsigned short *s = (unsigned short *)cp;
- int len;
- char *rv;
- for (len=0; s[len]; len++);
- rv = (char *)malloc (len+1);
- for (len=0; s[len]; len++)
- rv[len] = s[len];
- rv[len] = 0;
- return rv;
-}
-
-void
-run_program (char *cmdline)
-{
- FILE *tracefile = 0;
- int tix, i;
- HANDLE hThread;
- char *string;
-
- memset (&startup, 0, sizeof (startup));
- startup.cb = sizeof (startup);
-
- if (!CreateProcess (0, cmdline, 0, 0, 0,
- CREATE_NEW_PROCESS_GROUP
- | CREATE_SUSPENDED
- | DEBUG_PROCESS
- | DEBUG_ONLY_THIS_PROCESS,
- 0, 0, &startup, &procinfo))
- {
- fprintf (stderr, "Can't create process: error %ld\n", GetLastError ());
- exit (1);
- }
-
- hProcess = procinfo.hProcess;
-#if 0
- printf ("procinfo: %08x %08x %08x %08x\n",
- hProcess, procinfo.hThread, procinfo.dwProcessId, procinfo.dwThreadId);
-#endif
-
- active_threads[0] = procinfo.hThread;
- active_thread_ids[0] = procinfo.dwThreadId;
- thread_step_flags[0] = stepping_enabled;
- num_active_threads = 1;
-
- dll_info[0].base_address = 0;
- dll_info[0].pcount = 0;
- dll_info[0].scount = 0;
- dll_info[0].name = cmdline;
- num_dlls = 1;
-
- SetThreadPriority (procinfo.hThread, THREAD_PRIORITY_IDLE);
-
- context.ContextFlags = CONTEXT_FULL;
-
- ResumeThread (procinfo.hThread);
-
- total_cycles = 0;
-
- if (tracing_enabled)
- {
- tracefile = fopen ("trace.ssp", "w");
- if (!tracefile)
- {
- tracing_enabled = 0;
- perror ("trace.ssp");
- }
- }
-
- running = 1;
- while (running)
- {
- int src, dest;
- DWORD rv;
- DEBUG_EVENT event;
- int contv = DBG_CONTINUE;
-
- event.dwDebugEventCode = -1;
- if (!WaitForDebugEvent (&event, INFINITE))
- {
- printf ("idle...\n");
- }
-
- hThread = lookup_thread_id (event.dwThreadId, &tix);
-
-#if 0
- printf ("DE: %x/%d %d %d ",
- hThread, tix,
- event.dwDebugEventCode, num_active_threads);
- for (src=0; src<num_active_threads; src++)
- {
- int sc = SuspendThread (active_threads[src]);
- int rv = GetThreadContext (active_threads[src], &context);
- ResumeThread (active_threads[src]);
- printf (" [%x,%x,%x]",
- active_threads[src], context.Eip, active_thread_ids[src]);
- }
- printf ("\n");
-#endif
-
- switch (event.dwDebugEventCode)
- {
-
- case CREATE_PROCESS_DEBUG_EVENT:
- break;
-
- case CREATE_THREAD_DEBUG_EVENT:
- if (verbose)
- printf ("create thread %08lx at %08x %s\n",
- event.dwThreadId,
- (int)event.u.CreateThread.lpStartAddress,
- addr2dllname ((unsigned int)event.u.CreateThread.lpStartAddress));
-
- active_thread_ids[num_active_threads] = event.dwThreadId;
- active_threads[num_active_threads] = event.u.CreateThread.hThread;
- thread_return_address[num_active_threads] = 0;
- num_active_threads++;
-
- if (trace_all_threads && stepping_enabled)
- {
- thread_step_flags[num_active_threads-1] = stepping_enabled;
- add_breakpoint ((int)event.u.CreateThread.lpStartAddress);
- }
-
- break;
-
- case EXIT_THREAD_DEBUG_EVENT:
- if (verbose)
- printf ("exit thread %08lx, code=%ld\n",
- event.dwThreadId,
- event.u.ExitThread.dwExitCode);
-
- for (src=0, dest=0; src<num_active_threads; src++)
- if (active_thread_ids[src] != event.dwThreadId)
- {
- active_thread_ids[dest] = active_thread_ids[src];
- active_threads[dest] = active_threads[src];
- dest++;
- }
- num_active_threads = dest;
- break;
-
- case EXCEPTION_DEBUG_EVENT:
- rv = GetThreadContext (hThread, &context);
- switch (event.u.Exception.ExceptionRecord.ExceptionCode)
- {
- case STATUS_BREAKPOINT:
- if (remove_breakpoint ((int)event.u.Exception.ExceptionRecord.ExceptionAddress))
- {
- context.Eip --;
- if (!rv)
- SetThreadContext (hThread, &context);
- if (ReadProcessMemory (hProcess, (void *)context.Esp, &rv, 4, &rv))
- thread_return_address[tix] = rv;
- }
- set_step_threads (event.dwThreadId, stepping_enabled);
- case STATUS_SINGLE_STEP:
- opcode_count++;
- pc = (unsigned int)event.u.Exception.ExceptionRecord.ExceptionAddress;
- sp = (unsigned int)context.Esp;
- if (tracing_enabled)
- fprintf (tracefile, "%08x %08lx\n", pc, event.dwThreadId);
- if (trace_console)
- {
- printf ("%d %08x\n", tix, pc);
- fflush (stdout);
- }
-
- if (dll_counts)
- {
- int i;
- for (i=num_dlls-1; i>=0; i--)
- {
- if (dll_info[i].base_address < context.Eip)
- {
- if (hThread == procinfo.hThread)
- dll_info[i].pcount++;
- else
- dll_info[i].scount++;
- break;
- }
- }
- }
-
- if (pc < last_pc || pc > last_pc+10)
- {
- static int ncalls=0;
- static int qq=0;
- if (++qq % 100 == 0)
- fprintf (stderr, " %08x %d %d \r",
- pc, ncalls, opcode_count);
-
- if (sp == last_sp-4)
- {
- ncalls++;
- store_call_edge (last_pc, pc);
- if (last_pc < KERNEL_ADDR && pc > KERNEL_ADDR)
- {
- int retaddr;
- DWORD rv;
- ReadProcessMemory (hProcess,
- (void *)sp,
- (LPVOID)&(retaddr),
- 4, &rv);
-#if 0
- printf ("call last_pc = %08x pc = %08x rv = %08x\n",
- last_pc, pc, retaddr);
- /* experimental - try to skip kernel calls for speed */
- add_breakpoint (retaddr);
- set_step_threads (event.dwThreadId, 0);
-#endif
- }
- }
- }
-
- total_cycles++;
- last_sp = sp;
- last_pc = pc;
- if (pc >= low_pc && pc < high_pc)
- hits[(pc - low_pc)/2] ++;
- break;
- default:
- if (verbose)
- {
- printf ("exception %ld, ", event.u.Exception.dwFirstChance);
- printf ("code: %lx flags: %lx\n",
- event.u.Exception.ExceptionRecord.ExceptionCode,
- event.u.Exception.ExceptionRecord.ExceptionFlags);
- if (event.u.Exception.dwFirstChance == 1)
- dump_registers (hThread);
- }
- contv = DBG_EXCEPTION_NOT_HANDLED;
- running = 0;
- break;
- }
-
- if (!rv)
- {
- if (pc == thread_return_address[tix])
- {
- if (context.EFlags & 0x100)
- {
- context.EFlags &= ~0x100; /* TRAP (single step) flag */
- SetThreadContext (hThread, &context);
- }
- }
- else if (stepping_enabled)
- {
- if (!(context.EFlags & 0x100))
- {
- context.EFlags |= 0x100; /* TRAP (single step) flag */
- SetThreadContext (hThread, &context);
- }
- }
- }
- break;
-
- case OUTPUT_DEBUG_STRING_EVENT:
- string = (char *)malloc (event.u.DebugString.nDebugStringLength+1);
- i = ReadProcessMemory (hProcess,
- event.u.DebugString.lpDebugStringData,
- (LPVOID)string,
- event.u.DebugString.nDebugStringLength,
- &rv);
- if (!i)
- {
- printf ("error reading memory: %ld %ld\n", rv, GetLastError ());
- }
- if (verbose)
- printf ("ODS: %x/%d \"%s\"\n",
- (int)hThread, tix, string);
-
- if (strcmp (string, "ssp on") == 0)
- {
- stepping_enabled = 1;
- set_step_threads (event.dwThreadId, 1);
- }
-
- if (strcmp (string, "ssp off") == 0)
- {
- stepping_enabled = 0;
- set_step_threads (event.dwThreadId, 0);
- }
-
- break;
-
-
- case LOAD_DLL_DEBUG_EVENT:
- if (verbose)
- printf ("load dll %08x:",
- (int)event.u.LoadDll.lpBaseOfDll);
-
- dll_ptr = (char *)"( u n k n o w n ) \0\0";
- if (event.u.LoadDll.lpImageName)
- {
- ReadProcessMemory (hProcess,
- event.u.LoadDll.lpImageName,
- (LPVOID)&src,
- sizeof (src),
- &rv);
- if (src)
- {
- ReadProcessMemory (hProcess,
- (void *)src,
- (LPVOID)dll_name,
- sizeof (dll_name),
- &rv);
- dll_name[rv] = 0;
- dll_ptr = dll_name;
- for (cp=dll_name; *cp; cp++)
- {
- if (*cp == '\\' || *cp == '/')
- {
- dll_ptr = cp+1;
- }
- *cp = tolower ((unsigned char) *cp);
- }
- }
- }
-
-
- dll_info[num_dlls].base_address
- = (unsigned int)event.u.LoadDll.lpBaseOfDll;
- dll_info[num_dlls].pcount = 0;
- dll_info[num_dlls].scount = 0;
- dll_info[num_dlls].name = wide_strdup (dll_ptr);
- if (verbose)
- printf (" %s\n", dll_info[num_dlls].name);
- num_dlls++;
- qsort (dll_info, num_dlls, sizeof (DllInfo), dll_sort);
-
- break;
-
- case UNLOAD_DLL_DEBUG_EVENT:
- if (verbose)
- printf ("unload dll\n");
- break;
-
- case EXIT_PROCESS_DEBUG_EVENT:
- if (verbose)
- printf ("process %08lx %08lx exit %ld\n",
- event.dwProcessId, event.dwThreadId,
- event.u.ExitProcess.dwExitCode);
-
- running = 0;
- break;
- }
-
- set_steps ();
- ContinueDebugEvent (event.dwProcessId, event.dwThreadId, contv);
- }
-
- count = 0;
- for (pc=low_pc; pc<high_pc; pc+=2)
- {
- count += hits[(pc - low_pc)/2];
- }
- printf ("total cycles: %d, counted cycles: %d\n", total_cycles, count);
-
- if (tracing_enabled)
- fclose (tracefile);
-
-}
-
-static void
-usage (FILE * stream)
-{
- fprintf (stream , ""
- "Usage: %s [options] low_pc high_pc command...\n"
- "\n"
- "Single-step profile COMMAND\n"
- "\n"
- " -c, --console-trace trace every EIP value to the console. *Lots* slower.\n"
- " -d, --disable disable single-stepping by default; use\n"
- " OutputDebugString (\"ssp on\") to enable stepping\n"
- " -e, --enable enable single-stepping by default; use\n"
- " OutputDebugString (\"ssp off\") to disable stepping\n"
- " -h, --help output usage information and exit\n"
- " -l, --dll enable dll profiling. A chart of relative DLL usage\n"
- " is produced after the run.\n"
- " -s, --sub-threads trace sub-threads too. Dangerous if you have\n"
- " race conditions.\n"
- " -t, --trace-eip trace every EIP value to a file TRACE.SSP. This\n"
- " gets big *fast*.\n"
- " -v, --verbose output verbose messages about debug events.\n"
- " -V, --version output version information and exit\n"
- "\n"
- "Example: %s 0x401000 0x403000 hello.exe\n"
- "\n"
- "", prog_name, prog_name);
- if (stream == stdout)
- fprintf (stream , ""
- "SSP - The Single Step Profiler\n"
- "\n"
- "Original Author: DJ Delorie <dj@redhat.com>\n"
- "\n"
- "The SSP is a program that uses the Win32 debug API to run a program\n"
- "one ASM instruction at a time. It records the location of each\n"
- "instruction used, how many times that instruction is used, and all\n"
- "function calls. The results are saved in a format that is usable by\n"
- "the profiling program \"gprof\", although gprof will claim the values\n"
- "are seconds, they really are instruction counts. More on that later.\n"
- "\n"
- "Because the SSP was originally designed to profile the cygwin DLL, it\n"
- "does not automatically select a block of code to report statistics on.\n"
- "You must specify the range of memory addresses to keep track of\n"
- "manually, but it's not hard to figure out what to specify. Use the\n"
- "\"objdump\" program to determine the bounds of the target's \".text\"\n"
- "section. Let's say we're profiling cygwin1.dll. Make sure you've\n"
- "built it with debug symbols (else gprof won't run) and run objdump\n"
- "like this:\n"
- "\n"
- " objdump -h cygwin1.dll\n"
- "\n"
- "It will print a report like this:\n"
- "\n"
- "cygwin1.dll: file format pei-i386\n"
- "\n"
- "Sections:\n"
- "Idx Name Size VMA LMA File off Algn\n"
- " 0 .text 0007ea00 61001000 61001000 00000400 2**2\n"
- " CONTENTS, ALLOC, LOAD, READONLY, CODE, DATA\n"
- " 1 .data 00008000 61080000 61080000 0007ee00 2**2\n"
- " CONTENTS, ALLOC, LOAD, DATA\n"
- " . . .\n"
- "\n"
- "The only information we're concerned with are the VMA of the .text\n"
- "section and the VMA of the section after it (sections are usually\n"
- "contiguous; you can also add the Size to the VMA to get the end\n"
- "address). In this case, the VMA is 0x61001000 and the ending address\n"
- "is either 0x61080000 (start of .data method) or 0x0x6107fa00 (VMA+Size\n"
- "method).\n"
- "\n"
- "There are two basic ways to use SSP - either profiling a whole\n"
- "program, or selectively profiling parts of the program.\n"
- "\n"
- "To profile a whole program, just run ssp without options. By default,\n"
- "it will step the whole program. Here's a simple example, using the\n"
- "numbers above:\n"
- "\n"
- " ssp 0x61001000 0x61080000 hello.exe\n"
- "\n"
- "This will step the whole program. It will take at least 8 minutes on\n"
- "a PII/300 (yes, really). When it's done, it will create a file called\n"
- "\"gmon.out\". You can turn this data file into a readable report with\n"
- "gprof:\n"
- "\n"
- " gprof -b cygwin1.dll\n"
- "\n"
- "The \"-b\" means 'skip the help pages'. You can omit this until you're\n"
- "familiar with the report layout. The gprof documentation explains\n"
- "a lot about this report, but ssp changes a few things. For example,\n"
- "the first part of the report reports the amount of time spent in each\n"
- "function, like this:\n"
- "\n"
- "Each sample counts as 0.01 seconds.\n"
- " %% cumulative self self total\n"
- " time seconds seconds calls ms/call ms/call name\n"
- " 10.02 231.22 72.43 46 1574.57 1574.57 strcspn\n"
- " 7.95 288.70 57.48 130 442.15 442.15 strncasematch\n"
- "\n"
- "The \"seconds\" columns are really CPU opcodes, 1/100 second per opcode.\n"
- "So, \"231.22\" above means 23,122 opcodes. The ms/call values are 10x\n"
- "too big; 1574.57 means 157.457 opcodes per call. Similar adjustments\n"
- "need to be made for the \"self\" and \"children\" columns in the second\n"
- "part of the report.\n"
- "\n"
- "OK, so now we've got a huge report that took a long time to generate,\n"
- "and we've identified a spot we want to work on optimizing. Let's say\n"
- "it's the time() function. We can use SSP to selectively profile this\n"
- "function by using OutputDebugString() to control SSP from within the\n"
- "program. Here's a sample program:\n"
- "\n"
- " #include <windows.h>\n"
- " main()\n"
- " {\n"
- " time_t t;\n"
- " OutputDebugString(\"ssp on\");\n"
- " time(&t);\n"
- " OutputDebugString(\"ssp off\");\n"
- " }\n"
- "\n"
- "Then, add the \"-d\" option to ssp to default to *disabling* profiling.\n"
- "The program will run at full speed until the first OutputDebugString,\n"
- "then step until the second.\n"
- "\n"
- " ssp -d 0x61001000 0x61080000 hello.exe\n"
- "\n"
- "You can then use gprof (as usual) to see the performance profile for\n"
- "just that portion of the program's execution.\n"
- "\n"
- "There are many options to ssp. Since step-profiling makes your\n"
- "program run about 1,000 times slower than normal, it's best to\n"
- "understand all the options so that you can narrow down the parts\n"
- "of your program you need to single-step.\n"
- "\n"
- "\"-v\" - verbose. This prints messages about threads starting and\n"
- "stopping, OutputDebugString calls, DLLs loading, etc.\n"
- "\n"
- "\"-t\" and \"-c\" - tracing. With -t, *every* step's address is written\n"
- "to the file \"trace.ssp\". This can be used to help debug functions,\n"
- "since it can trace multiple threads. Clever use of scripts can match\n"
- "addresses with disassembled opcodes if needed. Warning: creates\n"
- "*huge* files, very quickly. \"-c\" prints each address to the console,\n"
- "useful for debugging key chunks of assembler.\n"
- "Use \"addr2line -C -f -s -e foo.exe < trace.ssp > lines.ssp\" and then\n"
- "\"perl cvttrace\" to convert to symbolic traces.\n"
- "\n"
- "\"-s\" - subthreads. Usually, you only need to trace the main thread,\n"
- "but sometimes you need to trace all threads, so this enables that.\n"
- "It's also needed when you want to profile a function that only a\n"
- "subthread calls. However, using OutputDebugString automatically\n"
- "enables profiling on the thread that called it, not the main thread.\n"
- "\n"
- "\"-l\" - dll profiling. Generates a pretty table of how much time was\n"
- "spent in each dll the program used. No sense optimizing a function in\n"
- "your program if most of the time is spent in the DLL.\n"
- "\n"
- "Typically use the -v, -s, and -l options:\n"
- "\n"
- " ssp -v -s -l -d 0x61001000 0x61080000 hello.exe\n"
- "\n");
- if (stream == stderr)
- fprintf (stream, "Try '%s --help' for more information.\n", prog_name);
- exit (stream == stderr ? 1 : 0);
-}
-
-static void
-print_version ()
-{
- printf ("ssp (cygwin) %d.%d.%d\n"
- "Single-Step Profiler\n"
- "Copyright (C) 2000 - %s Red Hat, Inc.\n"
- "This is free software; see the source for copying conditions. There is NO\n"
- "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n",
- CYGWIN_VERSION_DLL_MAJOR / 1000,
- CYGWIN_VERSION_DLL_MAJOR % 1000,
- CYGWIN_VERSION_DLL_MINOR,
- strrchr (__DATE__, ' ') + 1);
-}
-
-int
-main (int argc, char **argv)
-{
- int c, i;
- int total_pcount = 0, total_scount = 0;
- FILE *gmon;
-
- setbuf (stdout, 0);
-
- prog_name = program_invocation_short_name;
-
- while ((c = getopt_long (argc, argv, opts, longopts, NULL)) != EOF)
- switch (c)
- {
- case 'c':
- printf ("tracing *all* $eip to the console\n");
- trace_console = 1;
- break;
- case 'd':
- printf ("stepping disabled; enable via OutputDebugString (\"ssp on\")\n");
- stepping_enabled = 0;
- break;
- case 'e':
- printf ("stepping enabled; disable via OutputDebugString (\"ssp off\")\n");
- stepping_enabled = 1;
- break;
- case 'h':
- usage (stdout);
- break;
- case 'l':
- printf ("profiling dll usage\n");
- dll_counts = 1;
- break;
- case 's':
- printf ("tracing all sub-threads too, not just the main one\n");
- trace_all_threads = 1;
- break;
- case 't':
- printf ("tracing all $eip to trace.ssp\n");
- tracing_enabled = 1;
- break;
- case 'v':
- printf ("verbose messages enabled\n");
- verbose = 1;
- break;
- case 'V':
- print_version ();
- exit (0);
- default:
- fprintf (stderr, "Try `%s --help' for more information.\n", prog_name);
- exit (1);
- }
-
- if ( (argc - optind) < 3 )
- usage (stderr);
- sscanf (argv[optind++], "%i", &low_pc);
- sscanf (argv[optind++], "%i", &high_pc);
-
- if (low_pc > high_pc-8)
- {
- fprintf (stderr, "Hey, low_pc must be lower than high_pc\n");
- exit (1);
- }
-
- hits = (HISTCOUNTER *)malloc (high_pc-low_pc+4);
- memset (hits, 0, high_pc-low_pc+4);
-
- fprintf (stderr, "prun: [%08x,%08x] Running '%s'\n",
- low_pc, high_pc, argv[optind]);
-
- run_program (argv[optind]);
-
- hdr.lpc = low_pc;
- hdr.hpc = high_pc;
- hdr.ncnt = high_pc-low_pc + sizeof (hdr);
- hdr.version = GMONVERSION;
- hdr.profrate = 100;
-
- gmon = fopen ("gmon.out", "wb");
- fwrite (&hdr, 1, sizeof (hdr), gmon);
- fwrite (hits, 1, high_pc-low_pc, gmon);
- write_call_edges (gmon);
- fclose (gmon);
-
- if (dll_counts)
- {
- /* 1234567 123% 1234567 123% 12345678 xxxxxxxxxxx */
- printf (" Main-Thread Other-Thread BaseAddr DLL Name\n");
-
- total_pcount = 0;
- total_scount = 0;
- for (i=0; i<num_dlls; i++)
- {
- total_pcount += dll_info[i].pcount;
- total_scount += dll_info[i].scount;
- }
-
- if (total_pcount == 0) total_pcount++;
- if (total_scount == 0) total_scount++;
-
- for (i=0; i<num_dlls; i++)
- if (dll_info[i].pcount || dll_info[i].scount)
- {
- printf ("%7d %3d%% %7d %3d%% %08x %s\n",
- dll_info[i].pcount,
- (dll_info[i].pcount*100)/opcode_count,
- dll_info[i].scount,
- (dll_info[i].scount*100)/opcode_count,
- dll_info[i].base_address,
- dll_info[i].name);
- }
- }
-
- exit (0);
-}
-
-#endif /* !__x86_64 */
diff --git a/winsup/utils/ssp.txt b/winsup/utils/ssp.txt
deleted file mode 100644
index e73880e90..000000000
--- a/winsup/utils/ssp.txt
+++ /dev/null
@@ -1,125 +0,0 @@
-
-SSP - The Single Step Profiler
-
-Original Author: DJ Delorie <dj@redhat.com>
-
-The SSP is a program that uses the Win32 debug API to run a program
-one ASM instruction at a time. It records the location of each
-instruction used, how many times that instruction is used, and all
-function calls. The results are saved in a format that is usable by
-the profiling program "gprof", although gprof will claim the values
-are seconds, they really are instruction counts. More on that later.
-
-Because the SSP was originally designed to profile the cygwin DLL, it
-does not automatically select a block of code to report statistics on.
-You must specify the range of memory addresses to keep track of
-manually, but it's not hard to figure out what to specify. Use the
-"objdump" program to determine the bounds of the target's ".text"
-section. Let's say we're profiling cygwin1.dll. Make sure you've
-built it with debug symbols (else gprof won't run) and run objdump
-like this:
-
- objdump -h cygwin1.dll
-
-It will print a report like this:
-
-cygwin1.dll: file format pei-i386
-
-Sections:
-Idx Name Size VMA LMA File off Algn
- 0 .text 0007ea00 61001000 61001000 00000400 2**2
- CONTENTS, ALLOC, LOAD, READONLY, CODE, DATA
- 1 .data 00008000 61080000 61080000 0007ee00 2**2
- CONTENTS, ALLOC, LOAD, DATA
- . . .
-
-The only information we're concerned with are the VMA of the .text
-section and the VMA of the section after it (sections are usually
-contiguous; you can also add the Size to the VMA to get the end
-address). In this case, the VMA is 0x61001000 and the ending address
-is either 0x61080000 (start of .data method) or 0x0x6107fa00 (VMA+Size
-method).
-
-There are two basic ways to use SSP - either profiling a whole
-program, or selectively profiling parts of the program.
-
-To profile a whole program, just run ssp without options. By default,
-it will step the whole program. Here's a simple example, using the
-numbers above:
-
- ssp 0x61001000 0x61080000 hello.exe
-
-This will step the whole program. It will take at least 8 minutes on
-a PII/300 (yes, really). When it's done, it will create a file called
-"gmon.out". You can turn this data file into a readable report with
-gprof:
-
- gprof -b cygwin1.dll
-
-The "-b" means "skip the help pages". You can omit this until you're
-familiar with the report layout. The gprof documentation explains
-a lot about this report, but ssp changes a few things. For example,
-the first part of the report reports the amount of time spent in each
-function, like this:
-
-Each sample counts as 0.01 seconds.
- % cumulative self self total
- time seconds seconds calls ms/call ms/call name
- 10.02 231.22 72.43 46 1574.57 1574.57 strcspn
- 7.95 288.70 57.48 130 442.15 442.15 strncasematch
-
-The "seconds" columns are really CPU opcodes, 1/100 second per opcode.
-So, "231.22" above means 23,122 opcodes. The ms/call values are 10x
-too big; 1574.57 means 157.457 opcodes per call. Similar adjustments
-need to be made for the "self" and "children" columns in the second
-part of the report.
-
-OK, so now we've got a huge report that took a long time to generate,
-and we've identified a spot we want to work on optimizing. Let's say
-it's the time() function. We can use SSP to selectively profile this
-function by using OutputDebugString() to control SSP from within the
-program. Here's a sample program:
-
- #include <windows.h>
- main()
- {
- time_t t;
- OutputDebugString("ssp on");
- time(&t);
- OutputDebugString("ssp off");
- }
-
-Then, add the "-d" option to ssp to default to *disabling* profiling.
-The program will run at full speed until the first OutputDebugString,
-then step until the second.
-
- ssp -d 0x61001000 0x61080000 hello.exe
-
-You can then use gprof (as usual) to see the performance profile for
-just that portion of the program's execution.
-
-OK, now for the other ssp options, and when to use them:
-
-"-v" - verbose. This prints messages about threads starting and
-stopping, OutputDebugString calls, DLLs loading, etc.
-
-"-t" and "-tc" - tracing. With -t, *every* step's address is written
-to the file "trace.ssp". This can be used to help debug functions,
-since it can trace multiple threads. Clever use of scripts can match
-addresses with disassembled opcodes if needed. Warning: creates
-*huge* files, very quickly. "-tc" prints each address to the console,
-useful for debugging key chunks of assembler.
-
-"-s" - subthreads. Usually, you only need to trace the main thread,
-but sometimes you need to trace all threads, so this enables that.
-It's also needed when you want to profile a function that only a
-subthread calls. However, using OutputDebugString automatically
-enables profiling on the thread that called it, not the main thread.
-
-"-dll" - dll profiling. Generates a pretty table of how much time was
-spent in each dll the program used. No sense optimizing a function in
-your program if most of the time is spent in the DLL.
-
-I usually use the -v, -s, and -dll options:
-
- ssp -v -s -dll -d 0x61001000 0x61080000 hello.exe
diff --git a/winsup/utils/strace.cc b/winsup/utils/strace.cc
deleted file mode 100644
index 73096ab3b..000000000
--- a/winsup/utils/strace.cc
+++ /dev/null
@@ -1,1107 +0,0 @@
-/* strace.cc
-
- Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
- 2009, 2010, 2011, 2012, 2013 Red Hat Inc.
-
- Written by Chris Faylor <cgf@redhat.com>
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include <windows.h>
-#include <winternl.h>
-#define cygwin_internal cygwin_internal_dontuse
-#include <stdio.h>
-#include <fcntl.h>
-#include <getopt.h>
-#include <stdarg.h>
-#include <string.h>
-#include <stdlib.h>
-#include <time.h>
-#include <signal.h>
-#include <errno.h>
-#include "../cygwin/include/sys/strace.h"
-#include "../cygwin/include/sys/cygwin.h"
-#include "../cygwin/include/cygwin/version.h"
-#include "path.h"
-#undef cygwin_internal
-#include "loadlib.h"
-
-/* we *know* we're being built with GCC */
-#ifndef alloca
-#define alloca __builtin_alloca
-#endif
-
-static const char *pgm;
-static int forkdebug = 1;
-static int numerror = 1;
-static int show_usecs = 1;
-static int delta = 1;
-static int hhmmss;
-static int bufsize;
-static int new_window;
-static long flush_period;
-static int include_hex;
-static int quiet = -1;
-
-static unsigned char strace_active = 1;
-static int processes;
-
-static BOOL close_handle (HANDLE h, DWORD ok);
-
-#define CloseHandle(h) close_handle(h, 0)
-
-struct child_list
-{
- DWORD id;
- HANDLE hproc;
- int saw_stars;
- char nfields;
- long long start_time;
- DWORD last_usecs;
- struct child_list *next;
- child_list ():id (0), hproc (NULL), saw_stars (0), nfields (0),
- start_time (0), last_usecs (0), next (NULL)
- {
- }
-};
-
-child_list children;
-
-static void
-warn (int geterrno, const char *fmt, ...)
-{
- va_list args;
- char buf[4096];
-
- va_start (args, fmt);
- sprintf (buf, "%s: ", pgm);
- vsprintf (strchr (buf, '\0'), fmt, args);
- if (geterrno)
- perror (buf);
- else
- {
- fputs (buf, stderr);
- fputs ("\n", stderr);
- }
-}
-
-static void __attribute__ ((noreturn))
-error (int geterrno, const char *fmt, ...)
-{
- va_list args;
- char buf[4096];
-
- va_start (args, fmt);
- sprintf (buf, "%s: ", pgm);
- vsprintf (strchr (buf, '\0'), fmt, args);
- if (geterrno)
- perror (buf);
- else
- {
- fputs (buf, stderr);
- fputs ("\n", stderr);
- }
- exit (1);
-}
-
-DWORD lastid = 0;
-HANDLE lasth;
-
-static child_list *
-get_child (DWORD id)
-{
- child_list *c;
- for (c = &children; (c = c->next) != NULL;)
- if (c->id == id)
- return c;
-
- return NULL;
-}
-
-static void
-add_child (DWORD id, HANDLE hproc)
-{
- if (!get_child (id))
- {
- child_list *c = children.next;
- children.next = (child_list *) calloc (1, sizeof (child_list));
- children.next->next = c;
- lastid = children.next->id = id;
- lasth = children.next->hproc = hproc;
- processes++;
- if (!quiet)
- fprintf (stderr, "Windows process %lu attached\n", id);
- }
-}
-
-static void
-remove_child (DWORD id)
-{
- child_list *c;
- if (id == lastid)
- lastid = 0;
- for (c = &children; c->next != NULL; c = c->next)
- if (c->next->id == id)
- {
- child_list *c1 = c->next;
- c->next = c1->next;
- free (c1);
- if (!quiet)
- fprintf (stderr, "Windows process %lu detached\n", id);
- processes--;
- return;
- }
-
- error (0, "no process id %d found", id);
-}
-
-#define LINE_BUF_CHUNK 128
-
-class linebuf
-{
- size_t alloc;
-public:
- size_t ix;
- char *buf;
- linebuf ()
- {
- ix = 0;
- alloc = 0;
- buf = NULL;
- }
- ~linebuf ()
- {
- if (buf)
- free (buf);
- }
- void add (const char *what, int len);
- void add (const char *what)
- {
- add (what, strlen (what));
- }
- void prepend (const char *what, int len);
-};
-
-void
-linebuf::add (const char *what, int len)
-{
- size_t newix;
- if ((newix = ix + len) >= alloc)
- {
- alloc += LINE_BUF_CHUNK + len;
- buf = (char *) realloc (buf, alloc + 1);
- }
- memcpy (buf + ix, what, len);
- ix = newix;
- buf[ix] = '\0';
-}
-
-void
-linebuf::prepend (const char *what, int len)
-{
- int buflen;
- size_t newix;
- if ((newix = ix + len) >= alloc)
- {
- alloc += LINE_BUF_CHUNK + len;
- buf = (char *) realloc (buf, alloc + 1);
- buf[ix] = '\0';
- }
- if ((buflen = strlen (buf)))
- memmove (buf + len, buf, buflen + 1);
- else
- buf[newix] = '\0';
- memcpy (buf, what, len);
- ix = newix;
-}
-
-static void
-make_command_line (linebuf & one_line, char **argv)
-{
- for (; *argv; argv++)
- {
- char *p = NULL;
- const char *a = *argv;
-
- int len = strlen (a);
- if (len != 0 && !(p = strpbrk (a, " \t\n\r\"")))
- one_line.add (a, len);
- else
- {
- one_line.add ("\"", 1);
- for (; p; a = p, p = strchr (p, '"'))
- {
- one_line.add (a, ++p - a);
- if (p[-1] == '"')
- one_line.add ("\"", 1);
- }
- if (*a)
- one_line.add (a);
- one_line.add ("\"", 1);
- }
- one_line.add (" ", 1);
- }
-
- if (one_line.ix)
- one_line.buf[one_line.ix - 1] = '\0';
- else
- one_line.add ("", 1);
-}
-
-static DWORD child_pid;
-
-static BOOL WINAPI
-ctrl_c (DWORD)
-{
- static int tic = 1;
- if ((tic ^= 1) && !GenerateConsoleCtrlEvent (CTRL_C_EVENT, 0))
- error (0, "couldn't send CTRL-C to child, win32 error %d\n",
- GetLastError ());
- return TRUE;
-}
-
-extern "C" {
-uintptr_t (*cygwin_internal) (int, ...);
-WCHAR cygwin_dll_path[32768];
-};
-
-static int
-load_cygwin ()
-{
- static HMODULE h;
-
- if (cygwin_internal)
- return 1;
-
- if (h)
- return 0;
-
- if (!(h = LoadLibrary ("cygwin1.dll")))
- {
- errno = ENOENT;
- return 0;
- }
- GetModuleFileNameW (h, cygwin_dll_path, 32768);
- if (!(cygwin_internal = (uintptr_t (*) (int, ...)) GetProcAddress (h, "cygwin_internal")))
- {
- errno = ENOSYS;
- return 0;
- }
- return 1;
-}
-
-#define DEBUG_PROCESS_DETACH_ON_EXIT 0x00000001
-#define DEBUG_PROCESS_ONLY_THIS_PROCESS 0x00000002
-
-static void
-attach_process (pid_t pid)
-{
- child_pid = (DWORD) cygwin_internal (CW_CYGWIN_PID_TO_WINPID, pid);
- if (!child_pid)
- child_pid = pid;
-
- if (!DebugActiveProcess (child_pid))
- error (0, "couldn't attach to pid %d for debugging", child_pid);
-
- if (forkdebug)
- {
- HANDLE h = OpenProcess(PROCESS_ALL_ACCESS, FALSE, child_pid);
-
- if (h)
- {
- /* Try to turn off DEBUG_ONLY_THIS_PROCESS so we can follow forks */
- /* This is only supported on XP and later */
- ULONG DebugFlags = DEBUG_PROCESS_DETACH_ON_EXIT;
- NTSTATUS status = NtSetInformationProcess (h, ProcessDebugFlags, &DebugFlags, sizeof (DebugFlags));
- if (!NT_SUCCESS (status))
- warn (0, "Could not clear DEBUG_ONLY_THIS_PROCESS (%x), will not trace child processes", status);
-
- CloseHandle(h);
- }
- }
-
- return;
-}
-
-
-static void
-create_child (char **argv)
-{
- linebuf one_line;
-
- STARTUPINFO si;
- PROCESS_INFORMATION pi;
- BOOL ret;
- DWORD flags;
-
- if (strchr (*argv, '/'))
- *argv = cygpath (*argv, NULL);
- memset (&si, 0, sizeof (si));
- si.cb = sizeof (si);
-
- flags = CREATE_DEFAULT_ERROR_MODE
- | (forkdebug ? DEBUG_PROCESS : DEBUG_ONLY_THIS_PROCESS);
- if (new_window)
- flags |= CREATE_NEW_CONSOLE | CREATE_NEW_PROCESS_GROUP;
-
- make_command_line (one_line, argv);
-
- SetConsoleCtrlHandler (NULL, 0);
- const char *cygwin_env = getenv ("CYGWIN");
- const char *space;
- if (cygwin_env)
- space = " ";
- else
- space = cygwin_env = "";
- char *newenv = (char *) malloc (sizeof ("CYGWIN=noglob") + strlen (space) + strlen (cygwin_env));
- sprintf (newenv, "CYGWIN=noglob%s%s", space, cygwin_env);
- _putenv (newenv);
- ret = CreateProcess (0, one_line.buf, /* command line */
- NULL, /* Security */
- NULL, /* thread */
- TRUE, /* inherit handles */
- flags, /* start flags */
- NULL, /* default environment */
- NULL, /* current directory */
- &si, &pi);
- if (!ret)
- error (0, "error creating process %s, (error %d)", *argv,
- GetLastError ());
-
- CloseHandle (pi.hThread);
- CloseHandle (pi.hProcess);
- child_pid = pi.dwProcessId;
- SetConsoleCtrlHandler (ctrl_c, 1);
-}
-
-static int
-output_winerror (FILE *ofile, char *s)
-{
- char *winerr = strstr (s, "Win32 error ");
- if (!winerr)
- return 0;
-
- DWORD errnum = atoi (winerr + sizeof ("Win32 error ") - 1);
- if (!errnum)
- return 0;
-
- /*
- * NOTE: Currently there is no policy for how long the
- * the buffers are, and looks like 256 is a smallest one
- * (dlfcn.cc). Other than error 1395 (length 213) and
- * error 1015 (length 249), the rest are all under 188
- * characters, and so I'll use 189 as the buffer length.
- * For those longer error messages, FormatMessage will
- * return FALSE, and we'll get the old behaviour such as
- * ``Win32 error 1395'' etc.
- */
- char buf[4096];
- if (!FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM
- | FORMAT_MESSAGE_IGNORE_INSERTS,
- NULL,
- errnum,
- MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT),
- (LPTSTR) buf, sizeof (buf), NULL))
- return 0;
-
- /* Get rid the trailing CR/NL pair. */
- char *p = strchr (buf, '\0');
- p[-2] = '\n';
- p[-1] = '\0';
-
- *winerr = '\0';
- fputs (s, ofile);
- fputs (buf, ofile);
- return 1;
-}
-
-static SYSTEMTIME *
-syst (long long t)
-{
- FILETIME n;
- static SYSTEMTIME st;
- long long now = t /*+ ((long long) usecs * 10)*/;
- n.dwHighDateTime = now >> 32;
- n.dwLowDateTime = now & 0xffffffff;
- FileTimeToSystemTime (&n, &st);
- return &st;
-}
-
-static void __stdcall
-handle_output_debug_string (DWORD id, LPVOID p, unsigned mask, FILE *ofile)
-{
- int len;
- int special;
- char alen[3 + 8 + 1];
- SIZE_T nbytes;
- child_list *child = get_child (id);
- if (!child)
- error (0, "no process id %d found", id);
- HANDLE hchild = child->hproc;
-#define INTROLEN (sizeof (alen) - 1)
-
- if (id == lastid && hchild != lasth)
- warn (0, "%p != %p", hchild, lasth);
-
- alen[INTROLEN] = '\0';
- if (!ReadProcessMemory (hchild, p, alen, INTROLEN, &nbytes))
-#ifndef DEBUGGING
- return;
-#else
- error (0,
- "couldn't get message length from subprocess %d<%p>, windows error %d",
- id, hchild, GetLastError ());
-#endif
-
- if (strncmp (alen, "cYg", 3))
- return;
- len = (int) strtoul (alen + 3, NULL, 16);
- if (!len)
- return;
-
- if (len > 0)
- special = 0;
- else
- {
- special = len;
- if (special == _STRACE_INTERFACE_ACTIVATE_ADDR || special == _STRACE_CHILD_PID)
- len = 17;
- }
-
- char *buf;
- buf = (char *) alloca (len + 85) + 20;
-
- if (!ReadProcessMemory (hchild, ((char *) p) + INTROLEN, buf, len, &nbytes))
- error (0, "couldn't get message from subprocess, windows error %d",
- GetLastError ());
-
- buf[len] = '\0';
- char *s = strtok (buf, " ");
-
-#ifdef __x86_64__
- unsigned long long n = strtoull (s, NULL, 16);
-#else
- unsigned long n = strtoul (s, NULL, 16);
-#endif
-
- s = strchr (s, '\0') + 1;
-
- if (special == _STRACE_CHILD_PID)
- {
- DebugActiveProcess (n);
- return;
- }
-
- if (special == _STRACE_INTERFACE_ACTIVATE_ADDR)
- {
- s = strtok (NULL, " ");
- if (*s && *s == '1' && !forkdebug)
- /* don't activate since we are not following forks */;
- else if (!WriteProcessMemory (hchild, (LPVOID) n, &strace_active,
- sizeof (strace_active), &nbytes))
- error (0, "couldn't write strace flag to subprocess at %p, "
- "windows error %d", n, GetLastError ());
- return;
- }
-
- char *origs = s;
-
- if (mask & n)
- /* got it */ ;
- else if (!(mask & _STRACE_ALL) || (n & _STRACE_NOTALL))
- return; /* This should not be included in "all" output */
-
- DWORD dusecs, usecs;
- char *ptusec, *ptrest;
-
- dusecs = strtoul (s, &ptusec, 10);
- char *q = ptusec;
- while (*q == ' ')
- q++;
- if (*q != '[')
- {
- usecs = strtoul (q, &ptrest, 10);
- while (*ptrest == ' ')
- ptrest++;
- }
- else
- {
- ptrest = q;
- ptusec = show_usecs ? s : ptrest;
- usecs = dusecs;
- }
-
-#if 1
- child->saw_stars = 2;
-#else
- if (child->saw_stars == 0)
- {
- FILETIME st;
- char *news;
-
- GetSystemTimeAsFileTime (&st);
- FileTimeToLocalFileTime (&st, &st);
- child->start_time = st.dwHighDateTime;
- child->start_time <<= 32;
- child->start_time |= st.dwLowDateTime;
- if (*(news = ptrest) != '[')
- child->saw_stars = 2;
- else
- {
- child->saw_stars++;
- while ((news = strchr (news, ' ')) != NULL && *++news != '*')
- child->nfields++;
- if (news == NULL)
- child->saw_stars++;
- else
- {
- s = news;
- child->nfields++;
- }
- }
- }
- else if (child->saw_stars < 2)
- {
- int i;
- char *news;
- if (*(news = ptrest) != '[')
- child->saw_stars = 2;
- else
- {
- for (i = 0; i < child->nfields; i++)
- if ((news = strchr (news, ' ')) == NULL)
- break; // Should never happen
- else
- news++;
-
- if (news == NULL)
- child->saw_stars = 2;
- else
- {
- s = news;
- if (*s == '*')
- {
- SYSTEMTIME *st = syst (child->start_time);
- fprintf (ofile,
- "Date/Time: %d-%02d-%02d %02d:%02d:%02d\n",
- st->wYear, st->wMonth, st->wDay, st->wHour,
- st->wMinute, st->wSecond);
- child->saw_stars++;
- }
- }
- }
- }
-#endif
-
- long long d = usecs - child->last_usecs;
- char intbuf[40];
-
- if (child->saw_stars < 2 || s != origs)
- /* Nothing */ ;
- else if (hhmmss)
- {
- s = ptrest - 9;
- SYSTEMTIME *st = syst (child->start_time + (long long) usecs * 10);
- sprintf (s, "%02d:%02d:%02d", st->wHour, st->wMinute, st->wSecond);
- *strchr (s, '\0') = ' ';
- }
- else if (!delta)
- s = ptusec;
- else
- {
- s = ptusec;
- sprintf (intbuf, "%5d ", (int) d);
- int len = strlen (intbuf);
-
- memcpy ((s -= len), intbuf, len);
- }
-
- if (include_hex)
- {
- s -= 8;
-#ifdef __x86_64__
- sprintf (s, "%012I64x", n);
-#else
- sprintf (s, "%08lx", n);
-#endif
- strchr (s, '\0')[0] = ' ';
- }
- child->last_usecs = usecs;
- if (numerror || !output_winerror (ofile, s))
- fputs (s, ofile);
- if (!bufsize)
- fflush (ofile);
-}
-
-static DWORD
-proc_child (unsigned mask, FILE *ofile, pid_t pid)
-{
- DWORD res = 0;
- DEBUG_EVENT ev;
- time_t cur_time, last_time;
-
- SetThreadPriority (GetCurrentThread (), THREAD_PRIORITY_HIGHEST);
- last_time = time (NULL);
- while (1)
- {
- BOOL debug_event = WaitForDebugEvent (&ev, 1000);
- DWORD status = DBG_CONTINUE;
-
- if (bufsize && flush_period > 0 &&
- (cur_time = time (NULL)) >= last_time + flush_period)
- {
- last_time = cur_time;
- fflush (ofile);
- }
-
- if (!debug_event)
- continue;
-
- if (pid)
- {
- (void) cygwin_internal (CW_STRACE_TOGGLE, pid);
- pid = 0;
- }
-
- switch (ev.dwDebugEventCode)
- {
- case CREATE_PROCESS_DEBUG_EVENT:
- if (ev.u.CreateProcessInfo.hFile)
- CloseHandle (ev.u.CreateProcessInfo.hFile);
- add_child (ev.dwProcessId, ev.u.CreateProcessInfo.hProcess);
- break;
-
- case CREATE_THREAD_DEBUG_EVENT:
- break;
-
- case LOAD_DLL_DEBUG_EVENT:
- if (ev.u.LoadDll.hFile)
- CloseHandle (ev.u.LoadDll.hFile);
- break;
-
- case OUTPUT_DEBUG_STRING_EVENT:
- handle_output_debug_string (ev.dwProcessId,
- ev.u.DebugString.lpDebugStringData,
- mask, ofile);
- break;
-
- case EXIT_PROCESS_DEBUG_EVENT:
- res = ev.u.ExitProcess.dwExitCode;
- remove_child (ev.dwProcessId);
- break;
- case EXCEPTION_DEBUG_EVENT:
- if (ev.u.Exception.ExceptionRecord.ExceptionCode
- != (DWORD) STATUS_BREAKPOINT)
- {
- status = DBG_EXCEPTION_NOT_HANDLED;
- if (ev.u.Exception.dwFirstChance)
- fprintf (ofile, "--- Process %lu, exception %08lx at %p\n",
- ev.dwProcessId,
- ev.u.Exception.ExceptionRecord.ExceptionCode,
- ev.u.Exception.ExceptionRecord.ExceptionAddress);
- }
- break;
- }
- if (!ContinueDebugEvent (ev.dwProcessId, ev.dwThreadId, status))
- error (0, "couldn't continue debug event, windows error %d",
- GetLastError ());
- if (!processes)
- break;
- }
-
- return res;
-}
-
-static void
-dotoggle (pid_t pid)
-{
- child_pid = (DWORD) cygwin_internal (CW_CYGWIN_PID_TO_WINPID, pid);
- if (!child_pid)
- {
- warn (0, "no such cygwin pid - %d", pid);
- child_pid = pid;
- }
- if (cygwin_internal (CW_STRACE_TOGGLE, child_pid))
- error (0, "failed to toggle tracing for process %d<%d>", pid, child_pid);
-
- return;
-}
-
-static DWORD
-dostrace (unsigned mask, FILE *ofile, pid_t pid, char **argv)
-{
- if (!pid)
- create_child (argv);
- else
- attach_process (pid);
-
- return proc_child (mask, ofile, pid);
-}
-
-typedef struct tag_mask_mnemonic
-{
- unsigned long val;
- const char *text;
-}
-mask_mnemonic;
-
-static const mask_mnemonic mnemonic_table[] = {
- {_STRACE_ALL, "all"},
- {_STRACE_FLUSH, "flush"},
- {_STRACE_INHERIT, "inherit"},
- {_STRACE_UHOH, "uhoh"},
- {_STRACE_SYSCALL, "syscall"},
- {_STRACE_STARTUP, "startup"},
- {_STRACE_DEBUG, "debug"},
- {_STRACE_PARANOID, "paranoid"},
- {_STRACE_TERMIOS, "termios"},
- {_STRACE_SELECT, "select"},
- {_STRACE_WM, "wm"},
- {_STRACE_SIGP, "sigp"},
- {_STRACE_MINIMAL, "minimal"},
- {_STRACE_EXITDUMP, "exitdump"},
- {_STRACE_SYSTEM, "system"},
- {_STRACE_NOMUTEX, "nomutex"},
- {_STRACE_MALLOC, "malloc"},
- {_STRACE_THREAD, "thread"},
- {_STRACE_PTHREAD, "pthread"},
- {_STRACE_SPECIAL, "special"},
- {0, NULL}
-};
-
-static unsigned long
-mnemonic2ul (const char *nptr, char **endptr)
-{
- // Look up mnemonic in table, return value.
- // *endptr = ptr to char that breaks match.
- const mask_mnemonic *mnp = mnemonic_table;
-
- while (mnp->text != NULL)
- {
- if (strcmp (mnp->text, nptr) == 0)
- {
- // Found a match.
- if (endptr != NULL)
- {
- *endptr = ((char *) nptr) + strlen (mnp->text);
- }
- return mnp->val;
- }
- mnp++;
- }
-
- // Didn't find it.
- if (endptr != NULL)
- {
- *endptr = (char *) nptr;
- }
- return 0;
-}
-
-static unsigned long
-parse_mask (const char *ms, char **endptr)
-{
- const char *p = ms;
- char *newp;
- unsigned long retval = 0, thisval;
- const size_t bufsize = 16;
- char buffer[bufsize];
- size_t len;
-
- while (*p != '\0')
- {
- // First extract the term, terminate it, and lowercase it.
- strncpy (buffer, p, bufsize);
- buffer[bufsize - 1] = '\0';
- len = strcspn (buffer, "+,\0");
- buffer[len] = '\0';
- strlwr (buffer);
-
- // Check if this is a mnemonic. We have to do this first or strtoul()
- // will false-trigger on anything starting with "a" through "f".
- thisval = mnemonic2ul (buffer, &newp);
- if (buffer == newp)
- {
- // This term isn't mnemonic, check if it's hex.
- thisval = strtoul (buffer, &newp, 16);
- if (newp != buffer + len)
- {
- // Not hex either, syntax error.
- *endptr = (char *) p;
- return 0;
- }
- }
-
- p += len;
- retval += thisval;
-
- // Handle operators
- if (*p == '\0')
- break;
- if ((*p == '+') || (*p == ','))
- {
- // For now these both equate to addition/ORing. Until we get
- // fancy and add things like "all-<something>", all we need do is
- // continue the looping.
- p++;
- continue;
- }
- else
- {
- // Syntax error
- *endptr = (char *) p;
- return 0;
- }
- }
-
- *endptr = (char *) p;
- return retval;
-}
-
-static void
-usage (FILE *where = stderr)
-{
- fprintf (where, "\
-Usage: %s [OPTIONS] <command-line>\n\
-Usage: %s [OPTIONS] -p <pid>\n\
-\n\
-Trace system calls and signals\n\
-\n\
- -b, --buffer-size=SIZE set size of output file buffer\n\
- -d, --no-delta don't display the delta-t microsecond timestamp\n\
- -f, --trace-children trace child processes (toggle - default true)\n\
- -h, --help output usage information and exit\n\
- -m, --mask=MASK set message filter mask\n\
- -n, --crack-error-numbers output descriptive text instead of error\n\
- numbers for Windows errors\n\
- -o, --output=FILENAME set output file to FILENAME\n\
- -p, --pid=n attach to executing program with cygwin pid n\n\
- -q, --quiet suppress messages about attaching, detaching, etc.\n\
- -S, --flush-period=PERIOD flush buffered strace output every PERIOD secs\n\
- -t, --timestamp use an absolute hh:mm:ss timestamp insted of \n\
- the default microsecond timestamp. Implies -d\n\
- -T, --toggle toggle tracing in a process already being\n\
- traced. Requires -p <pid>\n\
- -u, --usecs toggle printing of microseconds timestamp\n\
- -V, --version output version information and exit\n\
- -w, --new-window spawn program under test in a new window\n\
-\n", pgm, pgm);
- if ( where == stdout)
- fprintf (stdout, "\
- MASK can be any combination of the following mnemonics and/or hex values\n\
- (0x is optional). Combine masks with '+' or ',' like so:\n\
-\n\
- --mask=wm+system,malloc+0x00800\n\
-\n\
- Mnemonic Hex Corresponding Def Description\n\
- =========================================================================\n\
- all 0x000001 (_STRACE_ALL) All strace messages.\n\
- flush 0x000002 (_STRACE_FLUSH) Flush output buffer after each message.\n\
- inherit 0x000004 (_STRACE_INHERIT) Children inherit mask from parent.\n\
- uhoh 0x000008 (_STRACE_UHOH) Unusual or weird phenomenon.\n\
- syscall 0x000010 (_STRACE_SYSCALL) System calls.\n\
- startup 0x000020 (_STRACE_STARTUP) argc/envp printout at startup.\n\
- debug 0x000040 (_STRACE_DEBUG) Info to help debugging. \n\
- paranoid 0x000080 (_STRACE_PARANOID) Paranoid info.\n\
- termios 0x000100 (_STRACE_TERMIOS) Info for debugging termios stuff.\n\
- select 0x000200 (_STRACE_SELECT) Info on ugly select internals.\n\
- wm 0x000400 (_STRACE_WM) Trace Windows msgs (enable _strace_wm).\n\
- sigp 0x000800 (_STRACE_SIGP) Trace signal and process handling.\n\
- minimal 0x001000 (_STRACE_MINIMAL) Very minimal strace output.\n\
- pthread 0x002000 (_STRACE_PTHREAD) Pthread calls.\n\
- exitdump 0x004000 (_STRACE_EXITDUMP) Dump strace cache on exit.\n\
- system 0x008000 (_STRACE_SYSTEM) Serious error; goes to console and log.\n\
- nomutex 0x010000 (_STRACE_NOMUTEX) Don't use mutex for synchronization.\n\
- malloc 0x020000 (_STRACE_MALLOC) Trace malloc calls.\n\
- thread 0x040000 (_STRACE_THREAD) Thread-locking calls.\n\
- special 0x100000 (_STRACE_SPECIAL) Special debugging printfs for\n\
- non-checked-in code\n\
-");
- if (where == stderr)
- fprintf (stderr, "Try `%s --help' for more information.\n", pgm);
- exit (where == stderr ? 1 : 0 );
-}
-
-struct option longopts[] = {
- {"buffer-size", required_argument, NULL, 'b'},
- {"help", no_argument, NULL, 'h'},
- {"flush-period", required_argument, NULL, 'S'},
- {"hex", no_argument, NULL, 'H'},
- {"mask", required_argument, NULL, 'm'},
- {"new-window", no_argument, NULL, 'w'},
- {"output", required_argument, NULL, 'o'},
- {"no-delta", no_argument, NULL, 'd'},
- {"pid", required_argument, NULL, 'p'},
- {"quiet", no_argument, NULL, 'q'},
- {"timestamp", no_argument, NULL, 't'},
- {"toggle", no_argument, NULL, 'T'},
- {"trace-children", no_argument, NULL, 'f'},
- {"translate-error-numbers", no_argument, NULL, 'n'},
- {"usecs", no_argument, NULL, 'u'},
- {"version", no_argument, NULL, 'V'},
- {NULL, 0, NULL, 0}
-};
-
-static const char *const opts = "+b:dhHfm:no:p:qS:tTuVw";
-
-static void
-print_version ()
-{
- printf ("strace (cygwin) %d.%d.%d\n"
- "System Trace\n"
- "Copyright (C) 2000 - %s Red Hat, Inc.\n"
- "This is free software; see the source for copying conditions. There is NO\n"
- "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n",
- CYGWIN_VERSION_DLL_MAJOR / 1000,
- CYGWIN_VERSION_DLL_MAJOR % 1000,
- CYGWIN_VERSION_DLL_MINOR,
- strrchr (__DATE__, ' ') + 1);
-}
-
-int
-main (int argc, char **argv)
-{
- unsigned mask = 0;
- FILE *ofile = NULL;
- pid_t pid = 0;
- int opt;
- int toggle = 0;
- int sawquiet = -1;
-
- if (load_cygwin ())
- {
- char **av = (char **) cygwin_internal (CW_ARGV);
- if (av && (uintptr_t) av != (uintptr_t) -1)
- for (argc = 0, argv = av; *av; av++)
- argc++;
- }
-
- if (!(pgm = strrchr (*argv, '\\')) && !(pgm = strrchr (*argv, '/')))
- pgm = *argv;
- else
- pgm++;
-
- while ((opt = getopt_long (argc, argv, opts, longopts, NULL)) != EOF)
- switch (opt)
- {
- case 'b':
- bufsize = atoi (optarg);
- break;
- case 'd':
- delta ^= 1;
- break;
- case 'f':
- forkdebug ^= 1;
- break;
- case 'h':
- // Print help and exit
- usage (stdout);
- break;
- case 'H':
- include_hex ^= 1;
- break;
- case 'm':
- {
- char *endptr;
- mask = parse_mask (optarg, &endptr);
- if (*endptr != '\0')
- {
- // Bad mask expression.
- error (0, "syntax error in mask expression \"%s\" near \
-character #%d.\n", optarg, (int) (endptr - optarg), endptr);
- }
- break;
- }
- case 'n':
- numerror ^= 1;
- break;
- case 'o':
- if ((ofile = fopen (cygpath (optarg, NULL), "wb")) == NULL)
- error (1, "can't open %s", optarg);
-#ifdef F_SETFD
- (void) fcntl (fileno (ofile), F_SETFD, 0);
-#endif
- break;
- case 'p':
- pid = strtoul (optarg, NULL, 10);
- strace_active |= 2;
- break;
- case 'q':
- if (sawquiet < 0)
- sawquiet = 1;
- else
- sawquiet ^= 1;
- break;
- case 'S':
- flush_period = strtoul (optarg, NULL, 10);
- break;
- case 't':
- hhmmss ^= 1;
- break;
- case 'T':
- toggle ^= 1;
- break;
- case 'u':
- // FIXME: currently unimplemented
- show_usecs ^= 1;
- delta ^= 1;
- break;
- case 'V':
- // Print version info and exit
- print_version ();
- return 0;
- case 'w':
- new_window ^= 1;
- break;
- default:
- fprintf (stderr, "Try `%s --help' for more information.\n", pgm);
- exit (1);
- }
-
- if (pid && argv[optind])
- error (0, "cannot provide both a command line and a process id");
-
- if (!pid && !argv[optind])
- error (0, "must provide either a command line or a process id");
-
- if (toggle && !pid)
- error (0, "must provide a process id to toggle tracing");
-
- if (!pid)
- quiet = sawquiet < 0 || !sawquiet;
- else if (sawquiet < 0)
- quiet = 0;
- else
- quiet = sawquiet;
-
- if (!mask)
- mask = _STRACE_ALL;
-
- if (bufsize)
- setvbuf (ofile, (char *) alloca (bufsize), _IOFBF, bufsize);
-
- if (!ofile)
- ofile = stdout;
-
- if (toggle)
- dotoggle (pid);
- else
- ExitProcess (dostrace (mask, ofile, pid, argv + optind));
- return 0;
-}
-
-#undef CloseHandle
-
-static BOOL
-close_handle (HANDLE h, DWORD ok)
-{
- child_list *c;
- for (c = &children; (c = c->next) != NULL;)
- if (c->hproc == h && c->id != ok)
- error (0, "Closing child handle %p", h);
- return CloseHandle (h);
-}
diff --git a/winsup/utils/testsuite.cc b/winsup/utils/testsuite.cc
deleted file mode 100644
index bab6f309e..000000000
--- a/winsup/utils/testsuite.cc
+++ /dev/null
@@ -1,89 +0,0 @@
-/* testsuite.cc
-
- Copyright 2008, 2011 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-/* This file implements a driver for performing tests on the file/path
- translation code in path.cc. This file is meant to be generic, all
- test harness data is in testsuite.h. */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-#define TESTSUITE
-#include "testsuite.h"
-
-typedef struct
- {
- const char *cwd; /* in win32 form, as if by GetCurrentDirectory */
- const char *posix; /* input */
- const char *win32; /* expected output */
- } test_t;
-
-#define TESTSUITE_TESTS
-#include "testsuite.h"
-#undef TESTSUITE_TESTS
-
-static int curtest;
-
-/* A replacement for the w32api GetCurrentDirectory() that returns
- the cwd that the current test specifies. */
-DWORD
-testsuite_getcwd (DWORD nBufferLength, LPSTR lpBuffer)
-{
- unsigned len = strlen (testsuite_tests[curtest].cwd) + 1;
-
- /* If the test specified NO_CWD, then it means we should not have
- needed the CWD for that test as the test was for an absolute path,
- and so if we see that here return 0, simulating a
- GetCurrentDirectory() error. */
- if (strcmp (testsuite_tests[curtest].cwd, NO_CWD) == 0)
- return 0;
-
- if (nBufferLength >= len)
- {
- strcpy (lpBuffer, testsuite_tests[curtest].cwd);
- return len - 1;
- }
- return len;
-}
-
-extern char *cygpath (const char *s, ...);
-
-int
-main (int argc, char **argv)
-{
- int numpass = 0;
-
- for (test_t &t = testsuite_tests[curtest]; t.posix; t = testsuite_tests[++curtest])
- {
- char *result = cygpath (t.posix, NULL);
- bool pass = (strcmp (result, t.win32) == 0);
-
- if (pass)
- {
- numpass++;
- printf ("test %03d: PASS cwd=%-18s input=%-22s expected+actual=%s\n",
- curtest, t.cwd, t.posix, result);
- }
- else
- {
- printf ("test %03d: FAIL cwd=%-18s input=%-29s expected=%-25s actual=%s\n",
- curtest, t.cwd, t.posix, t.win32, result);
- }
- }
- printf ("\n"
- "total tests: %d\n"
- "pass : %d (%.1f%%)\n"
- "fail : %d (%.1f%%)\n",
- curtest, numpass, ((float)numpass)/curtest * 100.0F, curtest - numpass,
- ((float)curtest - numpass)/curtest * 100.0F);
- return (numpass < curtest ? 1 : 0);
-}
diff --git a/winsup/utils/testsuite.h b/winsup/utils/testsuite.h
deleted file mode 100644
index 2632f719b..000000000
--- a/winsup/utils/testsuite.h
+++ /dev/null
@@ -1,131 +0,0 @@
-/* testsuite.h
-
- Copyright 2008, 2011 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-/* This file implements a test harness for the MinGW implementation of
- POSIX path translation in utils/path.cc. This code is used by strace
- and cygcheck which cannot depend on the Cygwin DLL. The tests below
- are a basic set of sanity checks for translating relative and
- absolute paths from POSIX form to Win32 form based on the contents of
- a mount table. */
-
-/* Including this file should be a no-op if TESTSUITE is not defined. */
-#ifdef TESTSUITE
-
-/* These definitions are common to both the testsuite mount table
- as well as the testsuite definitions themselves, so define them
- here so that they are only defined in one location. */
-#define TESTSUITE_ROOT "X:\\xyzroot"
-#define TESTSUITE_CYGDRIVE "/testcygdrive"
-
-/* Define a mount table in the form that read_mounts() would populate.
- This is used in place of actually reading the host mount
- table from the registry for the duration of the testsuite. This
- table should match the battery of tests below. */
-
-#if defined(TESTSUITE_MOUNT_TABLE)
-static mnt_t mount_table[] = {
-/* native posix flags issys */
- { TESTSUITE_ROOT, (char*)"/", MOUNT_BINARY | MOUNT_SYSTEM, 1 },
- { "O:\\other", (char*)"/otherdir", MOUNT_BINARY | MOUNT_SYSTEM, 1 },
- { "S:\\some\\dir", (char*)"/somedir", MOUNT_BINARY | MOUNT_SYSTEM, 1 },
- { TESTSUITE_ROOT"\\bin", (char*)"/usr/bin", MOUNT_BINARY | MOUNT_SYSTEM, 1 },
- { TESTSUITE_ROOT"\\lib", (char*)"/usr/lib", MOUNT_BINARY | MOUNT_SYSTEM, 1 },
- { ".", (char*)TESTSUITE_CYGDRIVE, MOUNT_BINARY | MOUNT_SYSTEM | MOUNT_CYGDRIVE, 1 },
- { NULL, (char*)NULL, 0, 0 }
-};
-
-
-/* Define the main set of tests. This is defined here instead of in
- testsuite.cc so that all test harness data is in one place and not
- spread over several files. */
-
-#elif defined(TESTSUITE_TESTS)
-#define NO_CWD "N/A"
-static test_t testsuite_tests[] = {
- { NO_CWD, "/file.ext", TESTSUITE_ROOT"\\file.ext" },
- { NO_CWD, "/dir/file.ext", TESTSUITE_ROOT"\\dir\\file.ext" },
- { NO_CWD, "/foo/dir/file.ext", TESTSUITE_ROOT"\\foo\\dir\\file.ext" },
- { NO_CWD, "/bin/file.ext", TESTSUITE_ROOT"\\bin\\file.ext" },
- { NO_CWD, "/bin/dir/file.ext", TESTSUITE_ROOT"\\bin\\dir\\file.ext" },
- { NO_CWD, "/lib/file.ext", TESTSUITE_ROOT"\\lib\\file.ext" },
- { NO_CWD, "/lib/dir/file.ext", TESTSUITE_ROOT"\\lib\\dir\\file.ext" },
- { NO_CWD, "/usr/bin/file.ext", TESTSUITE_ROOT"\\bin\\file.ext" },
- { NO_CWD, "/usr/bin/dir/file.ext", TESTSUITE_ROOT"\\bin\\dir\\file.ext" },
- { NO_CWD, "/usr/lib/file.ext", TESTSUITE_ROOT"\\lib\\file.ext" },
- { NO_CWD, "/usr/lib/dir/file.ext", TESTSUITE_ROOT"\\lib\\dir\\file.ext" },
- { NO_CWD, "/home/file.ext", TESTSUITE_ROOT"\\home\\file.ext" },
- { NO_CWD, "/home/foo/file.ext", TESTSUITE_ROOT"\\home\\foo\\file.ext" },
- { NO_CWD, "/home/foo/dir/file.ext", TESTSUITE_ROOT"\\home\\foo\\dir\\file.ext" },
- { NO_CWD, "/usr/file.ext", TESTSUITE_ROOT"\\usr\\file.ext" },
- { NO_CWD, "/usr/share/file.ext", TESTSUITE_ROOT"\\usr\\share\\file.ext" },
- { TESTSUITE_ROOT, "foo", TESTSUITE_ROOT"\\foo" },
- { TESTSUITE_ROOT, "./foo", TESTSUITE_ROOT"\\foo" },
- { TESTSUITE_ROOT, "foo/bar", TESTSUITE_ROOT"\\foo\\bar" },
- { TESTSUITE_ROOT, "./foo/bar", TESTSUITE_ROOT"\\foo\\bar" },
- { TESTSUITE_ROOT, "foo/./bar", TESTSUITE_ROOT"\\foo\\bar" },
- { TESTSUITE_ROOT, "./foo/./bar", TESTSUITE_ROOT"\\foo\\bar" },
- { TESTSUITE_ROOT, "bin/file.ext", TESTSUITE_ROOT"\\bin\\file.ext" },
- { TESTSUITE_ROOT, "lib/file.ext", TESTSUITE_ROOT"\\lib\\file.ext" },
- { TESTSUITE_ROOT, "usr/bin/file.ext", TESTSUITE_ROOT"\\bin\\file.ext" },
- { TESTSUITE_ROOT, "usr/lib/file.ext", TESTSUITE_ROOT"\\lib\\file.ext" },
- { TESTSUITE_ROOT, "etc/file.ext", TESTSUITE_ROOT"\\etc\\file.ext" },
- { TESTSUITE_ROOT, "etc/foo/file.ext", TESTSUITE_ROOT"\\etc\\foo\\file.ext" },
- { TESTSUITE_ROOT"\\bin", "foo", TESTSUITE_ROOT"\\bin\\foo" },
- { TESTSUITE_ROOT"\\bin", "./foo", TESTSUITE_ROOT"\\bin\\foo" },
- { TESTSUITE_ROOT"\\bin", "foo/bar", TESTSUITE_ROOT"\\bin\\foo\\bar" },
- { TESTSUITE_ROOT"\\bin", "./foo/bar", TESTSUITE_ROOT"\\bin\\foo\\bar" },
- { TESTSUITE_ROOT"\\bin", "foo/./bar", TESTSUITE_ROOT"\\bin\\foo\\bar" },
- { TESTSUITE_ROOT"\\bin", "./foo/./bar", TESTSUITE_ROOT"\\bin\\foo\\bar" },
- { TESTSUITE_ROOT"\\bin\\foo", "bar", TESTSUITE_ROOT"\\bin\\foo\\bar" },
- { TESTSUITE_ROOT"\\bin\\foo", "./bar", TESTSUITE_ROOT"\\bin\\foo\\bar" },
- { TESTSUITE_ROOT"\\bin\\foo", "bar/baz", TESTSUITE_ROOT"\\bin\\foo\\bar\\baz" },
- { TESTSUITE_ROOT"\\bin\\foo", "./bar/baz", TESTSUITE_ROOT"\\bin\\foo\\bar\\baz" },
- { TESTSUITE_ROOT"\\bin\\foo", "bar/./baz", TESTSUITE_ROOT"\\bin\\foo\\bar\\baz" },
- { TESTSUITE_ROOT"\\bin\\foo", "./bar/./baz", TESTSUITE_ROOT"\\bin\\foo\\bar\\baz" },
- { TESTSUITE_ROOT"\\tmp", "foo", TESTSUITE_ROOT"\\tmp\\foo" },
- { TESTSUITE_ROOT"\\tmp", "./foo", TESTSUITE_ROOT"\\tmp\\foo" },
- { TESTSUITE_ROOT"\\tmp", "foo/bar", TESTSUITE_ROOT"\\tmp\\foo\\bar" },
- { TESTSUITE_ROOT"\\tmp", "./foo/bar", TESTSUITE_ROOT"\\tmp\\foo\\bar" },
- { NO_CWD, "/otherdir/file.ext", "O:\\other\\file.ext" },
- { NO_CWD, "/otherdir/./file.ext", "O:\\other\\file.ext" },
- { NO_CWD, "/otherdir/foo/file.ext", "O:\\other\\foo\\file.ext" },
- { "O:\\other", "file.ext", "O:\\other\\file.ext" },
- { "O:\\other", "./file.ext", "O:\\other\\file.ext" },
- { "O:\\other", "foo/file.ext", "O:\\other\\foo\\file.ext" },
- { "O:\\other\\foo", "file.ext", "O:\\other\\foo\\file.ext" },
- { "O:\\other\\foo", "./file.ext", "O:\\other\\foo\\file.ext" },
- { "O:\\other\\foo", "bar/file.ext", "O:\\other\\foo\\bar\\file.ext" },
- { NO_CWD, "/somedir/file.ext", "S:\\some\\dir\\file.ext" },
- { NO_CWD, "/somedir/./file.ext", "S:\\some\\dir\\file.ext" },
- { NO_CWD, "/somedir/foo/file.ext", "S:\\some\\dir\\foo\\file.ext" },
- { "S:\\some\\dir", "file.ext", "S:\\some\\dir\\file.ext" },
- { "S:\\some\\dir", "./file.ext", "S:\\some\\dir\\file.ext" },
- { "S:\\some\\dir", "foo/file.ext", "S:\\some\\dir\\foo\\file.ext" },
- { "S:\\some\\dir\\foo", "file.ext", "S:\\some\\dir\\foo\\file.ext" },
- { "S:\\some\\dir\\foo", "./file.ext", "S:\\some\\dir\\foo\\file.ext" },
- { "S:\\some\\dir\\foo", "bar/file.ext", "S:\\some\\dir\\foo\\bar\\file.ext" },
- { NO_CWD, "//server/share/foo/bar", "\\\\server\\share\\foo\\bar" },
- { NO_CWD, NULL, NULL }
-};
-
-#else
-
-/* Redirect calls to GetCurrentDirectory() to the testsuite instead. */
-#ifdef GetCurrentDirectory
-#undef GetCurrentDirectory
-#endif
-#define GetCurrentDirectory testsuite_getcwd
-
-DWORD testsuite_getcwd (DWORD, LPSTR);
-
-#endif
-
-#endif /* TESTSUITE */
-
diff --git a/winsup/utils/tzmap-from-unicode.org b/winsup/utils/tzmap-from-unicode.org
deleted file mode 100755
index a155312a8..000000000
--- a/winsup/utils/tzmap-from-unicode.org
+++ /dev/null
@@ -1,85 +0,0 @@
-#!/bin/bash
-#
-# tzset-from-unicode.org
-#
-# Fetch XML file containing mapping of Windows timezone keynames and countries
-# per ISO 3166-1 to POSIX timezones from unicode.org.
-#
-# Create the table file as required by tzset.c.
-#
-
-ZONES_FILE="http://unicode.org/repos/cldr/trunk/common/supplemental/windowsZones.xml"
-
-echo "/*"
-echo " This file gets auto-generated by the script tzmap-from-unicode.org via"
-echo " a Makefile rule. To regenerate the file, just call 'make tzmap'. It"
-echo " fetches the file"
-echo ""
-echo " ${ZONES_FILE}"
-echo ""
-echo " using wget and converts it into the tzmap table required by tzget.c."
-echo " Regenerating might be necessary on a regular basis..."
-echo ""
-echo " This table maps Windows timezone keynames and countries per ISO 3166-1 to"
-echo " POSIX-compatible timezone IDs."
-echo ""
-echo " The mapping from unicode.org is just a bit incomplete. It doesn't contain"
-echo " a few timezones available on Windows XP, namely:"
-echo ""
-echo " Armenian Standard Time"
-echo " Mexico Standard Time"
-echo " Mexico Standard Time 2"
-echo ""
-echo " as well as the still (Windows 8.1) available"
-echo ""
-echo " E. Europe Standard Time"
-echo " Mid-Atlantic Standard Time"
-echo " Kamchatka Standard Time"
-echo ""
-echo " as well as a few combinations which got a new Windows timezone name"
-echo ""
-echo " Eastern Standard Time/TC"
-echo " Egypt Standard Time/PS"
-echo " Greenwich Standard Time/EH"
-echo " Hawaiian Standard Time/TK"
-echo " Kaliningrad Standard Time/BY"
-echo " SA Pacific Standard Time/HT "
-echo " South Africa Standard Time/LY"
-echo ""
-echo " It also doesn't contain some of the deprecated country codes used in older"
-echo " OSes, namely:"
-echo ""
-echo " SP (Serbian, proposed) used in XP"
-echo " CS (Serbian and Montenegro, dissolved, now RS and ME) used in Vista"
-echo " "
-echo " While these are apparently old, they are required here to get a complete"
-echo " mapping on all supported OSes. */"
-echo "struct"
-echo "{"
-echo " PCWSTR win_tzkey;"
-echo " PCWSTR country;"
-echo " PCWSTR posix_tzid;"
-echo "} const tzmap[] ="
-echo "{"
-wget -O - "${ZONES_FILE}" | \
-{
- sed -n -e 's#territory="001"#territory=""#
- s#.*mapZone other=\("[^"]*"\) territory=\("[^"]*"\) type=\("[^"]*"\).*# { L\1, L\2, L\3 },#p'
- echo ' { L"Armenian Standard Time", L"AM", L"Asia/Yerevan" },'
- echo ' { L"Central Europe Standard Time", L"CS", L"Europe/Belgrade" },'
- echo ' { L"Central Europe Standard Time", L"SP", L"Europe/Belgrade" },'
- echo ' { L"E. Europe Standard Time", L"", L"Asia/Nicosia" },'
- echo ' { L"E. Europe Standard Time", L"CY", L"Asia/Nicosia" },'
- echo ' { L"Eastern Standard Time", L"TC", L"America/Grand_Turk" },'
- echo ' { L"Egypt Standard Time", L"PS", L"Asia/Gaza Asia/Hebron" },'
- echo ' { L"Greenwich Standard Time", L"EH", L"Africa/El_Aaiun" },'
- echo ' { L"Kaliningrad Standard Time", L"BY", L"Europe/Minsk" },'
- echo ' { L"Kamchatka Standard Time", L"", L"Asia/Kamchatka" },'
- echo ' { L"Hawaiian Standard Time", L"TK", L"Pacific/Fakaofo" },'
- echo ' { L"Mexico Standard Time", L"", L"America/Mexico_City" },'
- echo ' { L"Mexico Standard Time 2", L"", L"America/Mazatlan" },'
- echo ' { L"Mid-Atlantic Standard Time", L"", L"Atlantic/South_Georgia" },'
- echo ' { L"SA Pacific Standard Time", L"HT", L"America/Port-au-Prince" },'
- echo ' { L"South Africa Standard Time", L"LY", L"Africa/Tripoli" },'
-} | sort -d
-echo "};"
diff --git a/winsup/utils/tzmap.h b/winsup/utils/tzmap.h
deleted file mode 100644
index dd4f8c0e4..000000000
--- a/winsup/utils/tzmap.h
+++ /dev/null
@@ -1,514 +0,0 @@
-/*
- This file gets auto-generated by the script tzmap-from-unicode.org via
- a Makefile rule. To regenerate the file, just call 'make tzmap'. It
- fetches the file
-
- http://unicode.org/repos/cldr/trunk/common/supplemental/windowsZones.xml
-
- using wget and converts it into the tzmap table required by tzget.c.
- Regenerating might be necessary on a regular basis...
-
- This table maps Windows timezone keynames and countries per ISO 3166-1 to
- POSIX-compatible timezone IDs.
-
- The mapping from unicode.org is just a bit incomplete. It doesn't contain
- a few timezones available on Windows XP, namely:
-
- Armenian Standard Time
- Mexico Standard Time
- Mexico Standard Time 2
-
- as well as the still (Windows 8.1) available
-
- E. Europe Standard Time
- Mid-Atlantic Standard Time
- Kamchatka Standard Time
-
- as well as a few combinations which got a new Windows timezone name
-
- Eastern Standard Time/TC
- Egypt Standard Time/PS
- Greenwich Standard Time/EH
- Hawaiian Standard Time/TK
- Kaliningrad Standard Time/BY
- SA Pacific Standard Time/HT
- South Africa Standard Time/LY
-
- It also doesn't contain some of the deprecated country codes used in older
- OSes, namely:
-
- SP (Serbian, proposed) used in XP
- CS (Serbian and Montenegro, dissolved, now RS and ME) used in Vista
-
- While these are apparently old, they are required here to get a complete
- mapping on all supported OSes. */
-struct
-{
- PCWSTR win_tzkey;
- PCWSTR country;
- PCWSTR posix_tzid;
-} const tzmap[] =
-{
- { L"AUS Central Standard Time", L"", L"Australia/Darwin" },
- { L"AUS Central Standard Time", L"AU", L"Australia/Darwin" },
- { L"AUS Eastern Standard Time", L"", L"Australia/Sydney" },
- { L"AUS Eastern Standard Time", L"AU", L"Australia/Sydney Australia/Melbourne" },
- { L"Afghanistan Standard Time", L"", L"Asia/Kabul" },
- { L"Afghanistan Standard Time", L"AF", L"Asia/Kabul" },
- { L"Alaskan Standard Time", L"", L"America/Anchorage" },
- { L"Alaskan Standard Time", L"US", L"America/Anchorage America/Juneau America/Nome America/Sitka America/Yakutat" },
- { L"Arab Standard Time", L"", L"Asia/Riyadh" },
- { L"Arab Standard Time", L"BH", L"Asia/Bahrain" },
- { L"Arab Standard Time", L"KW", L"Asia/Kuwait" },
- { L"Arab Standard Time", L"QA", L"Asia/Qatar" },
- { L"Arab Standard Time", L"SA", L"Asia/Riyadh" },
- { L"Arab Standard Time", L"YE", L"Asia/Aden" },
- { L"Arabian Standard Time", L"", L"Asia/Dubai" },
- { L"Arabian Standard Time", L"AE", L"Asia/Dubai" },
- { L"Arabian Standard Time", L"OM", L"Asia/Muscat" },
- { L"Arabian Standard Time", L"ZZ", L"Etc/GMT-4" },
- { L"Arabic Standard Time", L"", L"Asia/Baghdad" },
- { L"Arabic Standard Time", L"IQ", L"Asia/Baghdad" },
- { L"Argentina Standard Time", L"", L"America/Buenos_Aires" },
- { L"Argentina Standard Time", L"AR", L"America/Buenos_Aires America/Argentina/La_Rioja America/Argentina/Rio_Gallegos America/Argentina/Salta America/Argentina/San_Juan America/Argentina/San_Luis America/Argentina/Tucuman America/Argentina/Ushuaia America/Catamarca America/Cordoba America/Jujuy America/Mendoza" },
- { L"Armenian Standard Time", L"AM", L"Asia/Yerevan" },
- { L"Atlantic Standard Time", L"", L"America/Halifax" },
- { L"Atlantic Standard Time", L"BM", L"Atlantic/Bermuda" },
- { L"Atlantic Standard Time", L"CA", L"America/Halifax America/Glace_Bay America/Goose_Bay America/Moncton" },
- { L"Atlantic Standard Time", L"GL", L"America/Thule" },
- { L"Azerbaijan Standard Time", L"", L"Asia/Baku" },
- { L"Azerbaijan Standard Time", L"AZ", L"Asia/Baku" },
- { L"Azores Standard Time", L"", L"Atlantic/Azores" },
- { L"Azores Standard Time", L"GL", L"America/Scoresbysund" },
- { L"Azores Standard Time", L"PT", L"Atlantic/Azores" },
- { L"Bahia Standard Time", L"", L"America/Bahia" },
- { L"Bahia Standard Time", L"BR", L"America/Bahia" },
- { L"Bangladesh Standard Time", L"", L"Asia/Dhaka" },
- { L"Bangladesh Standard Time", L"BD", L"Asia/Dhaka" },
- { L"Bangladesh Standard Time", L"BT", L"Asia/Thimphu" },
- { L"Belarus Standard Time", L"", L"Europe/Minsk" },
- { L"Belarus Standard Time", L"BY", L"Europe/Minsk" },
- { L"Canada Central Standard Time", L"", L"America/Regina" },
- { L"Canada Central Standard Time", L"CA", L"America/Regina America/Swift_Current" },
- { L"Cape Verde Standard Time", L"", L"Atlantic/Cape_Verde" },
- { L"Cape Verde Standard Time", L"CV", L"Atlantic/Cape_Verde" },
- { L"Cape Verde Standard Time", L"ZZ", L"Etc/GMT+1" },
- { L"Caucasus Standard Time", L"", L"Asia/Yerevan" },
- { L"Caucasus Standard Time", L"AM", L"Asia/Yerevan" },
- { L"Cen. Australia Standard Time", L"", L"Australia/Adelaide" },
- { L"Cen. Australia Standard Time", L"AU", L"Australia/Adelaide Australia/Broken_Hill" },
- { L"Central America Standard Time", L"", L"America/Guatemala" },
- { L"Central America Standard Time", L"BZ", L"America/Belize" },
- { L"Central America Standard Time", L"CR", L"America/Costa_Rica" },
- { L"Central America Standard Time", L"EC", L"Pacific/Galapagos" },
- { L"Central America Standard Time", L"GT", L"America/Guatemala" },
- { L"Central America Standard Time", L"HN", L"America/Tegucigalpa" },
- { L"Central America Standard Time", L"NI", L"America/Managua" },
- { L"Central America Standard Time", L"SV", L"America/El_Salvador" },
- { L"Central America Standard Time", L"ZZ", L"Etc/GMT+6" },
- { L"Central Asia Standard Time", L"", L"Asia/Almaty" },
- { L"Central Asia Standard Time", L"AQ", L"Antarctica/Vostok" },
- { L"Central Asia Standard Time", L"CN", L"Asia/Urumqi" },
- { L"Central Asia Standard Time", L"IO", L"Indian/Chagos" },
- { L"Central Asia Standard Time", L"KG", L"Asia/Bishkek" },
- { L"Central Asia Standard Time", L"KZ", L"Asia/Almaty Asia/Qyzylorda" },
- { L"Central Asia Standard Time", L"ZZ", L"Etc/GMT-6" },
- { L"Central Brazilian Standard Time", L"", L"America/Cuiaba" },
- { L"Central Brazilian Standard Time", L"BR", L"America/Cuiaba America/Campo_Grande" },
- { L"Central Europe Standard Time", L"", L"Europe/Budapest" },
- { L"Central Europe Standard Time", L"AL", L"Europe/Tirane" },
- { L"Central Europe Standard Time", L"CS", L"Europe/Belgrade" },
- { L"Central Europe Standard Time", L"CZ", L"Europe/Prague" },
- { L"Central Europe Standard Time", L"HU", L"Europe/Budapest" },
- { L"Central Europe Standard Time", L"ME", L"Europe/Podgorica" },
- { L"Central Europe Standard Time", L"RS", L"Europe/Belgrade" },
- { L"Central Europe Standard Time", L"SI", L"Europe/Ljubljana" },
- { L"Central Europe Standard Time", L"SK", L"Europe/Bratislava" },
- { L"Central Europe Standard Time", L"SP", L"Europe/Belgrade" },
- { L"Central European Standard Time", L"", L"Europe/Warsaw" },
- { L"Central European Standard Time", L"BA", L"Europe/Sarajevo" },
- { L"Central European Standard Time", L"HR", L"Europe/Zagreb" },
- { L"Central European Standard Time", L"MK", L"Europe/Skopje" },
- { L"Central European Standard Time", L"PL", L"Europe/Warsaw" },
- { L"Central Pacific Standard Time", L"", L"Pacific/Guadalcanal" },
- { L"Central Pacific Standard Time", L"AU", L"Antarctica/Macquarie" },
- { L"Central Pacific Standard Time", L"FM", L"Pacific/Ponape Pacific/Kosrae" },
- { L"Central Pacific Standard Time", L"NC", L"Pacific/Noumea" },
- { L"Central Pacific Standard Time", L"SB", L"Pacific/Guadalcanal" },
- { L"Central Pacific Standard Time", L"VU", L"Pacific/Efate" },
- { L"Central Pacific Standard Time", L"ZZ", L"Etc/GMT-11" },
- { L"Central Standard Time", L"", L"America/Chicago" },
- { L"Central Standard Time", L"CA", L"America/Winnipeg America/Rainy_River America/Rankin_Inlet America/Resolute" },
- { L"Central Standard Time", L"MX", L"America/Matamoros" },
- { L"Central Standard Time", L"US", L"America/Chicago America/Indiana/Knox America/Indiana/Tell_City America/Menominee America/North_Dakota/Beulah America/North_Dakota/Center America/North_Dakota/New_Salem" },
- { L"Central Standard Time", L"ZZ", L"CST6CDT" },
- { L"Central Standard Time (Mexico)", L"", L"America/Mexico_City" },
- { L"Central Standard Time (Mexico)", L"MX", L"America/Mexico_City America/Bahia_Banderas America/Cancun America/Merida America/Monterrey" },
- { L"China Standard Time", L"", L"Asia/Shanghai" },
- { L"China Standard Time", L"CN", L"Asia/Shanghai" },
- { L"China Standard Time", L"HK", L"Asia/Hong_Kong" },
- { L"China Standard Time", L"MO", L"Asia/Macau" },
- { L"Dateline Standard Time", L"", L"Etc/GMT+12" },
- { L"Dateline Standard Time", L"ZZ", L"Etc/GMT+12" },
- { L"E. Africa Standard Time", L"", L"Africa/Nairobi" },
- { L"E. Africa Standard Time", L"AQ", L"Antarctica/Syowa" },
- { L"E. Africa Standard Time", L"DJ", L"Africa/Djibouti" },
- { L"E. Africa Standard Time", L"ER", L"Africa/Asmera" },
- { L"E. Africa Standard Time", L"ET", L"Africa/Addis_Ababa" },
- { L"E. Africa Standard Time", L"KE", L"Africa/Nairobi" },
- { L"E. Africa Standard Time", L"KM", L"Indian/Comoro" },
- { L"E. Africa Standard Time", L"MG", L"Indian/Antananarivo" },
- { L"E. Africa Standard Time", L"SD", L"Africa/Khartoum" },
- { L"E. Africa Standard Time", L"SO", L"Africa/Mogadishu" },
- { L"E. Africa Standard Time", L"SS", L"Africa/Juba" },
- { L"E. Africa Standard Time", L"TZ", L"Africa/Dar_es_Salaam" },
- { L"E. Africa Standard Time", L"UG", L"Africa/Kampala" },
- { L"E. Africa Standard Time", L"YT", L"Indian/Mayotte" },
- { L"E. Africa Standard Time", L"ZZ", L"Etc/GMT-3" },
- { L"E. Australia Standard Time", L"", L"Australia/Brisbane" },
- { L"E. Australia Standard Time", L"AU", L"Australia/Brisbane Australia/Lindeman" },
- { L"E. Europe Standard Time", L"", L"Asia/Nicosia" },
- { L"E. Europe Standard Time", L"CY", L"Asia/Nicosia" },
- { L"E. South America Standard Time", L"", L"America/Sao_Paulo" },
- { L"E. South America Standard Time", L"BR", L"America/Sao_Paulo" },
- { L"Eastern Standard Time", L"", L"America/New_York" },
- { L"Eastern Standard Time", L"BS", L"America/Nassau" },
- { L"Eastern Standard Time", L"CA", L"America/Toronto America/Iqaluit America/Montreal America/Nipigon America/Pangnirtung America/Thunder_Bay" },
- { L"Eastern Standard Time", L"CU", L"America/Havana" },
- { L"Eastern Standard Time", L"HT", L"America/Port-au-Prince" },
- { L"Eastern Standard Time", L"TC", L"America/Grand_Turk" },
- { L"Eastern Standard Time", L"US", L"America/New_York America/Detroit America/Indiana/Petersburg America/Indiana/Vincennes America/Indiana/Winamac America/Kentucky/Monticello America/Louisville" },
- { L"Eastern Standard Time", L"ZZ", L"EST5EDT" },
- { L"Egypt Standard Time", L"", L"Africa/Cairo" },
- { L"Egypt Standard Time", L"EG", L"Africa/Cairo" },
- { L"Egypt Standard Time", L"PS", L"Asia/Gaza Asia/Hebron" },
- { L"Ekaterinburg Standard Time", L"", L"Asia/Yekaterinburg" },
- { L"Ekaterinburg Standard Time", L"RU", L"Asia/Yekaterinburg" },
- { L"FLE Standard Time", L"", L"Europe/Kiev" },
- { L"FLE Standard Time", L"AX", L"Europe/Mariehamn" },
- { L"FLE Standard Time", L"BG", L"Europe/Sofia" },
- { L"FLE Standard Time", L"EE", L"Europe/Tallinn" },
- { L"FLE Standard Time", L"FI", L"Europe/Helsinki" },
- { L"FLE Standard Time", L"LT", L"Europe/Vilnius" },
- { L"FLE Standard Time", L"LV", L"Europe/Riga" },
- { L"FLE Standard Time", L"UA", L"Europe/Kiev Europe/Uzhgorod Europe/Zaporozhye" },
- { L"Fiji Standard Time", L"", L"Pacific/Fiji" },
- { L"Fiji Standard Time", L"FJ", L"Pacific/Fiji" },
- { L"GMT Standard Time", L"", L"Europe/London" },
- { L"GMT Standard Time", L"ES", L"Atlantic/Canary" },
- { L"GMT Standard Time", L"FO", L"Atlantic/Faeroe" },
- { L"GMT Standard Time", L"GB", L"Europe/London" },
- { L"GMT Standard Time", L"GG", L"Europe/Guernsey" },
- { L"GMT Standard Time", L"IE", L"Europe/Dublin" },
- { L"GMT Standard Time", L"IM", L"Europe/Isle_of_Man" },
- { L"GMT Standard Time", L"JE", L"Europe/Jersey" },
- { L"GMT Standard Time", L"PT", L"Europe/Lisbon Atlantic/Madeira" },
- { L"GTB Standard Time", L"", L"Europe/Bucharest" },
- { L"GTB Standard Time", L"CY", L"Asia/Nicosia" },
- { L"GTB Standard Time", L"GR", L"Europe/Athens" },
- { L"GTB Standard Time", L"MD", L"Europe/Chisinau" },
- { L"GTB Standard Time", L"RO", L"Europe/Bucharest" },
- { L"Georgian Standard Time", L"", L"Asia/Tbilisi" },
- { L"Georgian Standard Time", L"GE", L"Asia/Tbilisi" },
- { L"Greenland Standard Time", L"", L"America/Godthab" },
- { L"Greenland Standard Time", L"GL", L"America/Godthab" },
- { L"Greenwich Standard Time", L"", L"Atlantic/Reykjavik" },
- { L"Greenwich Standard Time", L"BF", L"Africa/Ouagadougou" },
- { L"Greenwich Standard Time", L"CI", L"Africa/Abidjan" },
- { L"Greenwich Standard Time", L"EH", L"Africa/El_Aaiun" },
- { L"Greenwich Standard Time", L"GH", L"Africa/Accra" },
- { L"Greenwich Standard Time", L"GM", L"Africa/Banjul" },
- { L"Greenwich Standard Time", L"GN", L"Africa/Conakry" },
- { L"Greenwich Standard Time", L"GW", L"Africa/Bissau" },
- { L"Greenwich Standard Time", L"IS", L"Atlantic/Reykjavik" },
- { L"Greenwich Standard Time", L"LR", L"Africa/Monrovia" },
- { L"Greenwich Standard Time", L"ML", L"Africa/Bamako" },
- { L"Greenwich Standard Time", L"MR", L"Africa/Nouakchott" },
- { L"Greenwich Standard Time", L"SH", L"Atlantic/St_Helena" },
- { L"Greenwich Standard Time", L"SL", L"Africa/Freetown" },
- { L"Greenwich Standard Time", L"SN", L"Africa/Dakar" },
- { L"Greenwich Standard Time", L"ST", L"Africa/Sao_Tome" },
- { L"Greenwich Standard Time", L"TG", L"Africa/Lome" },
- { L"Hawaiian Standard Time", L"", L"Pacific/Honolulu" },
- { L"Hawaiian Standard Time", L"CK", L"Pacific/Rarotonga" },
- { L"Hawaiian Standard Time", L"PF", L"Pacific/Tahiti" },
- { L"Hawaiian Standard Time", L"TK", L"Pacific/Fakaofo" },
- { L"Hawaiian Standard Time", L"UM", L"Pacific/Johnston" },
- { L"Hawaiian Standard Time", L"US", L"Pacific/Honolulu" },
- { L"Hawaiian Standard Time", L"ZZ", L"Etc/GMT+10" },
- { L"India Standard Time", L"", L"Asia/Calcutta" },
- { L"India Standard Time", L"IN", L"Asia/Calcutta" },
- { L"Iran Standard Time", L"", L"Asia/Tehran" },
- { L"Iran Standard Time", L"IR", L"Asia/Tehran" },
- { L"Israel Standard Time", L"", L"Asia/Jerusalem" },
- { L"Israel Standard Time", L"IL", L"Asia/Jerusalem" },
- { L"Jordan Standard Time", L"", L"Asia/Amman" },
- { L"Jordan Standard Time", L"JO", L"Asia/Amman" },
- { L"Kaliningrad Standard Time", L"", L"Europe/Kaliningrad" },
- { L"Kaliningrad Standard Time", L"BY", L"Europe/Minsk" },
- { L"Kaliningrad Standard Time", L"RU", L"Europe/Kaliningrad" },
- { L"Kamchatka Standard Time", L"", L"Asia/Kamchatka" },
- { L"Korea Standard Time", L"", L"Asia/Seoul" },
- { L"Korea Standard Time", L"KP", L"Asia/Pyongyang" },
- { L"Korea Standard Time", L"KR", L"Asia/Seoul" },
- { L"Libya Standard Time", L"", L"Africa/Tripoli" },
- { L"Libya Standard Time", L"LY", L"Africa/Tripoli" },
- { L"Line Islands Standard Time", L"", L"Pacific/Kiritimati" },
- { L"Line Islands Standard Time", L"KI", L"Pacific/Kiritimati" },
- { L"Line Islands Standard Time", L"ZZ", L"Etc/GMT-14" },
- { L"Magadan Standard Time", L"", L"Asia/Magadan" },
- { L"Magadan Standard Time", L"RU", L"Asia/Magadan" },
- { L"Mauritius Standard Time", L"", L"Indian/Mauritius" },
- { L"Mauritius Standard Time", L"MU", L"Indian/Mauritius" },
- { L"Mauritius Standard Time", L"RE", L"Indian/Reunion" },
- { L"Mauritius Standard Time", L"SC", L"Indian/Mahe" },
- { L"Mexico Standard Time 2", L"", L"America/Mazatlan" },
- { L"Mexico Standard Time", L"", L"America/Mexico_City" },
- { L"Mid-Atlantic Standard Time", L"", L"Atlantic/South_Georgia" },
- { L"Middle East Standard Time", L"", L"Asia/Beirut" },
- { L"Middle East Standard Time", L"LB", L"Asia/Beirut" },
- { L"Montevideo Standard Time", L"", L"America/Montevideo" },
- { L"Montevideo Standard Time", L"UY", L"America/Montevideo" },
- { L"Morocco Standard Time", L"", L"Africa/Casablanca" },
- { L"Morocco Standard Time", L"EH", L"Africa/El_Aaiun" },
- { L"Morocco Standard Time", L"MA", L"Africa/Casablanca" },
- { L"Mountain Standard Time", L"", L"America/Denver" },
- { L"Mountain Standard Time", L"CA", L"America/Edmonton America/Cambridge_Bay America/Inuvik America/Yellowknife" },
- { L"Mountain Standard Time", L"MX", L"America/Ojinaga" },
- { L"Mountain Standard Time", L"US", L"America/Denver America/Boise" },
- { L"Mountain Standard Time", L"ZZ", L"MST7MDT" },
- { L"Mountain Standard Time (Mexico)", L"", L"America/Chihuahua" },
- { L"Mountain Standard Time (Mexico)", L"MX", L"America/Chihuahua America/Mazatlan" },
- { L"Myanmar Standard Time", L"", L"Asia/Rangoon" },
- { L"Myanmar Standard Time", L"CC", L"Indian/Cocos" },
- { L"Myanmar Standard Time", L"MM", L"Asia/Rangoon" },
- { L"N. Central Asia Standard Time", L"", L"Asia/Novosibirsk" },
- { L"N. Central Asia Standard Time", L"RU", L"Asia/Novosibirsk Asia/Omsk" },
- { L"Namibia Standard Time", L"", L"Africa/Windhoek" },
- { L"Namibia Standard Time", L"NA", L"Africa/Windhoek" },
- { L"Nepal Standard Time", L"", L"Asia/Katmandu" },
- { L"Nepal Standard Time", L"NP", L"Asia/Katmandu" },
- { L"New Zealand Standard Time", L"", L"Pacific/Auckland" },
- { L"New Zealand Standard Time", L"AQ", L"Antarctica/McMurdo" },
- { L"New Zealand Standard Time", L"NZ", L"Pacific/Auckland" },
- { L"Newfoundland Standard Time", L"", L"America/St_Johns" },
- { L"Newfoundland Standard Time", L"CA", L"America/St_Johns" },
- { L"North Asia East Standard Time", L"", L"Asia/Irkutsk" },
- { L"North Asia East Standard Time", L"RU", L"Asia/Irkutsk Asia/Chita" },
- { L"North Asia Standard Time", L"", L"Asia/Krasnoyarsk" },
- { L"North Asia Standard Time", L"RU", L"Asia/Krasnoyarsk Asia/Novokuznetsk" },
- { L"Pacific SA Standard Time", L"", L"America/Santiago" },
- { L"Pacific SA Standard Time", L"AQ", L"Antarctica/Palmer" },
- { L"Pacific SA Standard Time", L"CL", L"America/Santiago" },
- { L"Pacific Standard Time", L"", L"America/Los_Angeles" },
- { L"Pacific Standard Time", L"CA", L"America/Vancouver America/Dawson America/Whitehorse" },
- { L"Pacific Standard Time", L"MX", L"America/Tijuana" },
- { L"Pacific Standard Time", L"US", L"America/Los_Angeles" },
- { L"Pacific Standard Time", L"ZZ", L"PST8PDT" },
- { L"Pacific Standard Time (Mexico)", L"", L"America/Santa_Isabel" },
- { L"Pacific Standard Time (Mexico)", L"MX", L"America/Santa_Isabel" },
- { L"Pakistan Standard Time", L"", L"Asia/Karachi" },
- { L"Pakistan Standard Time", L"PK", L"Asia/Karachi" },
- { L"Paraguay Standard Time", L"", L"America/Asuncion" },
- { L"Paraguay Standard Time", L"PY", L"America/Asuncion" },
- { L"Romance Standard Time", L"", L"Europe/Paris" },
- { L"Romance Standard Time", L"BE", L"Europe/Brussels" },
- { L"Romance Standard Time", L"DK", L"Europe/Copenhagen" },
- { L"Romance Standard Time", L"ES", L"Europe/Madrid Africa/Ceuta" },
- { L"Romance Standard Time", L"FR", L"Europe/Paris" },
- { L"Russia Time Zone 10", L"", L"Asia/Srednekolymsk" },
- { L"Russia Time Zone 10", L"RU", L"Asia/Srednekolymsk" },
- { L"Russia Time Zone 11", L"", L"Asia/Kamchatka" },
- { L"Russia Time Zone 11", L"RU", L"Asia/Kamchatka Asia/Anadyr" },
- { L"Russia Time Zone 3", L"", L"Europe/Samara" },
- { L"Russia Time Zone 3", L"RU", L"Europe/Samara" },
- { L"Russian Standard Time", L"", L"Europe/Moscow" },
- { L"Russian Standard Time", L"RU", L"Europe/Moscow Europe/Simferopol Europe/Volgograd" },
- { L"SA Eastern Standard Time", L"", L"America/Cayenne" },
- { L"SA Eastern Standard Time", L"AQ", L"Antarctica/Rothera" },
- { L"SA Eastern Standard Time", L"BR", L"America/Fortaleza America/Araguaina America/Belem America/Maceio America/Recife America/Santarem" },
- { L"SA Eastern Standard Time", L"FK", L"Atlantic/Stanley" },
- { L"SA Eastern Standard Time", L"GF", L"America/Cayenne" },
- { L"SA Eastern Standard Time", L"SR", L"America/Paramaribo" },
- { L"SA Eastern Standard Time", L"ZZ", L"Etc/GMT+3" },
- { L"SA Pacific Standard Time", L"", L"America/Bogota" },
- { L"SA Pacific Standard Time", L"BR", L"America/Rio_Branco America/Eirunepe" },
- { L"SA Pacific Standard Time", L"CA", L"America/Coral_Harbour" },
- { L"SA Pacific Standard Time", L"CO", L"America/Bogota" },
- { L"SA Pacific Standard Time", L"EC", L"America/Guayaquil" },
- { L"SA Pacific Standard Time", L"HT", L"America/Port-au-Prince" },
- { L"SA Pacific Standard Time", L"JM", L"America/Jamaica" },
- { L"SA Pacific Standard Time", L"KY", L"America/Cayman" },
- { L"SA Pacific Standard Time", L"PA", L"America/Panama" },
- { L"SA Pacific Standard Time", L"PE", L"America/Lima" },
- { L"SA Pacific Standard Time", L"ZZ", L"Etc/GMT+5" },
- { L"SA Western Standard Time", L"", L"America/La_Paz" },
- { L"SA Western Standard Time", L"AG", L"America/Antigua" },
- { L"SA Western Standard Time", L"AI", L"America/Anguilla" },
- { L"SA Western Standard Time", L"AW", L"America/Aruba" },
- { L"SA Western Standard Time", L"BB", L"America/Barbados" },
- { L"SA Western Standard Time", L"BL", L"America/St_Barthelemy" },
- { L"SA Western Standard Time", L"BO", L"America/La_Paz" },
- { L"SA Western Standard Time", L"BQ", L"America/Kralendijk" },
- { L"SA Western Standard Time", L"BR", L"America/Manaus America/Boa_Vista America/Porto_Velho" },
- { L"SA Western Standard Time", L"CA", L"America/Blanc-Sablon" },
- { L"SA Western Standard Time", L"CW", L"America/Curacao" },
- { L"SA Western Standard Time", L"DM", L"America/Dominica" },
- { L"SA Western Standard Time", L"DO", L"America/Santo_Domingo" },
- { L"SA Western Standard Time", L"GD", L"America/Grenada" },
- { L"SA Western Standard Time", L"GP", L"America/Guadeloupe" },
- { L"SA Western Standard Time", L"GY", L"America/Guyana" },
- { L"SA Western Standard Time", L"KN", L"America/St_Kitts" },
- { L"SA Western Standard Time", L"LC", L"America/St_Lucia" },
- { L"SA Western Standard Time", L"MF", L"America/Marigot" },
- { L"SA Western Standard Time", L"MQ", L"America/Martinique" },
- { L"SA Western Standard Time", L"MS", L"America/Montserrat" },
- { L"SA Western Standard Time", L"PR", L"America/Puerto_Rico" },
- { L"SA Western Standard Time", L"SX", L"America/Lower_Princes" },
- { L"SA Western Standard Time", L"TC", L"America/Grand_Turk" },
- { L"SA Western Standard Time", L"TT", L"America/Port_of_Spain" },
- { L"SA Western Standard Time", L"VC", L"America/St_Vincent" },
- { L"SA Western Standard Time", L"VG", L"America/Tortola" },
- { L"SA Western Standard Time", L"VI", L"America/St_Thomas" },
- { L"SA Western Standard Time", L"ZZ", L"Etc/GMT+4" },
- { L"SE Asia Standard Time", L"", L"Asia/Bangkok" },
- { L"SE Asia Standard Time", L"AQ", L"Antarctica/Davis" },
- { L"SE Asia Standard Time", L"CX", L"Indian/Christmas" },
- { L"SE Asia Standard Time", L"ID", L"Asia/Jakarta Asia/Pontianak" },
- { L"SE Asia Standard Time", L"KH", L"Asia/Phnom_Penh" },
- { L"SE Asia Standard Time", L"LA", L"Asia/Vientiane" },
- { L"SE Asia Standard Time", L"MN", L"Asia/Hovd" },
- { L"SE Asia Standard Time", L"TH", L"Asia/Bangkok" },
- { L"SE Asia Standard Time", L"VN", L"Asia/Saigon" },
- { L"SE Asia Standard Time", L"ZZ", L"Etc/GMT-7" },
- { L"Samoa Standard Time", L"", L"Pacific/Apia" },
- { L"Samoa Standard Time", L"WS", L"Pacific/Apia" },
- { L"Singapore Standard Time", L"", L"Asia/Singapore" },
- { L"Singapore Standard Time", L"BN", L"Asia/Brunei" },
- { L"Singapore Standard Time", L"ID", L"Asia/Makassar" },
- { L"Singapore Standard Time", L"MY", L"Asia/Kuala_Lumpur Asia/Kuching" },
- { L"Singapore Standard Time", L"PH", L"Asia/Manila" },
- { L"Singapore Standard Time", L"SG", L"Asia/Singapore" },
- { L"Singapore Standard Time", L"ZZ", L"Etc/GMT-8" },
- { L"South Africa Standard Time", L"", L"Africa/Johannesburg" },
- { L"South Africa Standard Time", L"BI", L"Africa/Bujumbura" },
- { L"South Africa Standard Time", L"BW", L"Africa/Gaborone" },
- { L"South Africa Standard Time", L"CD", L"Africa/Lubumbashi" },
- { L"South Africa Standard Time", L"LS", L"Africa/Maseru" },
- { L"South Africa Standard Time", L"LY", L"Africa/Tripoli" },
- { L"South Africa Standard Time", L"MW", L"Africa/Blantyre" },
- { L"South Africa Standard Time", L"MZ", L"Africa/Maputo" },
- { L"South Africa Standard Time", L"RW", L"Africa/Kigali" },
- { L"South Africa Standard Time", L"SZ", L"Africa/Mbabane" },
- { L"South Africa Standard Time", L"ZA", L"Africa/Johannesburg" },
- { L"South Africa Standard Time", L"ZM", L"Africa/Lusaka" },
- { L"South Africa Standard Time", L"ZW", L"Africa/Harare" },
- { L"South Africa Standard Time", L"ZZ", L"Etc/GMT-2" },
- { L"Sri Lanka Standard Time", L"", L"Asia/Colombo" },
- { L"Sri Lanka Standard Time", L"LK", L"Asia/Colombo" },
- { L"Syria Standard Time", L"", L"Asia/Damascus" },
- { L"Syria Standard Time", L"SY", L"Asia/Damascus" },
- { L"Taipei Standard Time", L"", L"Asia/Taipei" },
- { L"Taipei Standard Time", L"TW", L"Asia/Taipei" },
- { L"Tasmania Standard Time", L"", L"Australia/Hobart" },
- { L"Tasmania Standard Time", L"AU", L"Australia/Hobart Australia/Currie" },
- { L"Tokyo Standard Time", L"", L"Asia/Tokyo" },
- { L"Tokyo Standard Time", L"ID", L"Asia/Jayapura" },
- { L"Tokyo Standard Time", L"JP", L"Asia/Tokyo" },
- { L"Tokyo Standard Time", L"PW", L"Pacific/Palau" },
- { L"Tokyo Standard Time", L"TL", L"Asia/Dili" },
- { L"Tokyo Standard Time", L"ZZ", L"Etc/GMT-9" },
- { L"Tonga Standard Time", L"", L"Pacific/Tongatapu" },
- { L"Tonga Standard Time", L"KI", L"Pacific/Enderbury" },
- { L"Tonga Standard Time", L"TK", L"Pacific/Fakaofo" },
- { L"Tonga Standard Time", L"TO", L"Pacific/Tongatapu" },
- { L"Tonga Standard Time", L"ZZ", L"Etc/GMT-13" },
- { L"Turkey Standard Time", L"", L"Europe/Istanbul" },
- { L"Turkey Standard Time", L"TR", L"Europe/Istanbul" },
- { L"US Eastern Standard Time", L"", L"America/Indianapolis" },
- { L"US Eastern Standard Time", L"US", L"America/Indianapolis America/Indiana/Marengo America/Indiana/Vevay" },
- { L"US Mountain Standard Time", L"", L"America/Phoenix" },
- { L"US Mountain Standard Time", L"CA", L"America/Dawson_Creek America/Creston" },
- { L"US Mountain Standard Time", L"MX", L"America/Hermosillo" },
- { L"US Mountain Standard Time", L"US", L"America/Phoenix" },
- { L"US Mountain Standard Time", L"ZZ", L"Etc/GMT+7" },
- { L"UTC", L"", L"Etc/GMT" },
- { L"UTC", L"GL", L"America/Danmarkshavn" },
- { L"UTC", L"ZZ", L"Etc/GMT" },
- { L"UTC-02", L"", L"Etc/GMT+2" },
- { L"UTC-02", L"BR", L"America/Noronha" },
- { L"UTC-02", L"GS", L"Atlantic/South_Georgia" },
- { L"UTC-02", L"ZZ", L"Etc/GMT+2" },
- { L"UTC-11", L"", L"Etc/GMT+11" },
- { L"UTC-11", L"AS", L"Pacific/Pago_Pago" },
- { L"UTC-11", L"NU", L"Pacific/Niue" },
- { L"UTC-11", L"UM", L"Pacific/Midway" },
- { L"UTC-11", L"ZZ", L"Etc/GMT+11" },
- { L"UTC+12", L"", L"Etc/GMT-12" },
- { L"UTC+12", L"KI", L"Pacific/Tarawa" },
- { L"UTC+12", L"MH", L"Pacific/Majuro Pacific/Kwajalein" },
- { L"UTC+12", L"NR", L"Pacific/Nauru" },
- { L"UTC+12", L"TV", L"Pacific/Funafuti" },
- { L"UTC+12", L"UM", L"Pacific/Wake" },
- { L"UTC+12", L"WF", L"Pacific/Wallis" },
- { L"UTC+12", L"ZZ", L"Etc/GMT-12" },
- { L"Ulaanbaatar Standard Time", L"", L"Asia/Ulaanbaatar" },
- { L"Ulaanbaatar Standard Time", L"MN", L"Asia/Ulaanbaatar Asia/Choibalsan" },
- { L"Venezuela Standard Time", L"", L"America/Caracas" },
- { L"Venezuela Standard Time", L"VE", L"America/Caracas" },
- { L"Vladivostok Standard Time", L"", L"Asia/Vladivostok" },
- { L"Vladivostok Standard Time", L"RU", L"Asia/Vladivostok Asia/Sakhalin Asia/Ust-Nera" },
- { L"W. Australia Standard Time", L"", L"Australia/Perth" },
- { L"W. Australia Standard Time", L"AQ", L"Antarctica/Casey" },
- { L"W. Australia Standard Time", L"AU", L"Australia/Perth" },
- { L"W. Central Africa Standard Time", L"", L"Africa/Lagos" },
- { L"W. Central Africa Standard Time", L"AO", L"Africa/Luanda" },
- { L"W. Central Africa Standard Time", L"BJ", L"Africa/Porto-Novo" },
- { L"W. Central Africa Standard Time", L"CD", L"Africa/Kinshasa" },
- { L"W. Central Africa Standard Time", L"CF", L"Africa/Bangui" },
- { L"W. Central Africa Standard Time", L"CG", L"Africa/Brazzaville" },
- { L"W. Central Africa Standard Time", L"CM", L"Africa/Douala" },
- { L"W. Central Africa Standard Time", L"DZ", L"Africa/Algiers" },
- { L"W. Central Africa Standard Time", L"GA", L"Africa/Libreville" },
- { L"W. Central Africa Standard Time", L"GQ", L"Africa/Malabo" },
- { L"W. Central Africa Standard Time", L"NE", L"Africa/Niamey" },
- { L"W. Central Africa Standard Time", L"NG", L"Africa/Lagos" },
- { L"W. Central Africa Standard Time", L"TD", L"Africa/Ndjamena" },
- { L"W. Central Africa Standard Time", L"TN", L"Africa/Tunis" },
- { L"W. Central Africa Standard Time", L"ZZ", L"Etc/GMT-1" },
- { L"W. Europe Standard Time", L"", L"Europe/Berlin" },
- { L"W. Europe Standard Time", L"AD", L"Europe/Andorra" },
- { L"W. Europe Standard Time", L"AT", L"Europe/Vienna" },
- { L"W. Europe Standard Time", L"CH", L"Europe/Zurich" },
- { L"W. Europe Standard Time", L"DE", L"Europe/Berlin Europe/Busingen" },
- { L"W. Europe Standard Time", L"GI", L"Europe/Gibraltar" },
- { L"W. Europe Standard Time", L"IT", L"Europe/Rome" },
- { L"W. Europe Standard Time", L"LI", L"Europe/Vaduz" },
- { L"W. Europe Standard Time", L"LU", L"Europe/Luxembourg" },
- { L"W. Europe Standard Time", L"MC", L"Europe/Monaco" },
- { L"W. Europe Standard Time", L"MT", L"Europe/Malta" },
- { L"W. Europe Standard Time", L"NL", L"Europe/Amsterdam" },
- { L"W. Europe Standard Time", L"NO", L"Europe/Oslo" },
- { L"W. Europe Standard Time", L"SE", L"Europe/Stockholm" },
- { L"W. Europe Standard Time", L"SJ", L"Arctic/Longyearbyen" },
- { L"W. Europe Standard Time", L"SM", L"Europe/San_Marino" },
- { L"W. Europe Standard Time", L"VA", L"Europe/Vatican" },
- { L"West Asia Standard Time", L"", L"Asia/Tashkent" },
- { L"West Asia Standard Time", L"AQ", L"Antarctica/Mawson" },
- { L"West Asia Standard Time", L"KZ", L"Asia/Oral Asia/Aqtau Asia/Aqtobe" },
- { L"West Asia Standard Time", L"MV", L"Indian/Maldives" },
- { L"West Asia Standard Time", L"TF", L"Indian/Kerguelen" },
- { L"West Asia Standard Time", L"TJ", L"Asia/Dushanbe" },
- { L"West Asia Standard Time", L"TM", L"Asia/Ashgabat" },
- { L"West Asia Standard Time", L"UZ", L"Asia/Tashkent Asia/Samarkand" },
- { L"West Asia Standard Time", L"ZZ", L"Etc/GMT-5" },
- { L"West Pacific Standard Time", L"", L"Pacific/Port_Moresby" },
- { L"West Pacific Standard Time", L"AQ", L"Antarctica/DumontDUrville" },
- { L"West Pacific Standard Time", L"FM", L"Pacific/Truk" },
- { L"West Pacific Standard Time", L"GU", L"Pacific/Guam" },
- { L"West Pacific Standard Time", L"MP", L"Pacific/Saipan" },
- { L"West Pacific Standard Time", L"PG", L"Pacific/Port_Moresby Pacific/Bougainville" },
- { L"West Pacific Standard Time", L"ZZ", L"Etc/GMT-10" },
- { L"Yakutsk Standard Time", L"", L"Asia/Yakutsk" },
- { L"Yakutsk Standard Time", L"RU", L"Asia/Yakutsk Asia/Khandyga" },
-};
diff --git a/winsup/utils/tzset.c b/winsup/utils/tzset.c
deleted file mode 100644
index 2b3f413be..000000000
--- a/winsup/utils/tzset.c
+++ /dev/null
@@ -1,243 +0,0 @@
-/* tzset.c: Convert current Windows timezone to POSIX timezone information.
-
- Copyright 2012, 2013, 2014 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include <errno.h>
-#include <stdio.h>
-#include <inttypes.h>
-#include <wchar.h>
-#include <locale.h>
-#include <getopt.h>
-#include <cygwin/version.h>
-#include <windows.h>
-
-#ifndef GEOID_NOT_AVAILABLE
-#define GEOID_NOT_AVAILABLE -1
-#endif
-
-/* The auto-generated tzmap.h contains the mapping table from Windows timezone
- and country per ISO 3166-1 to POSIX timezone. For more info, see the file
- itself. */
-#include "tzmap.h"
-
-#define TZMAP_SIZE (sizeof tzmap / sizeof tzmap[0])
-
-static struct option longopts[] =
-{
- {"help", no_argument, NULL, 'h' },
- {"version", no_argument, NULL, 'V'},
- {NULL, 0, NULL, 0}
-};
-
-static char opts[] = "hV";
-
-#define REG_TZINFO L"SYSTEM\\CurrentControlSet\\Control\\TimeZoneInformation"
-#define REG_TZDB L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Time Zones"
-
-static inline HKEY
-reg_open (HKEY pkey, PCWSTR path, const char *msg)
-{
- LONG ret;
- HKEY hkey;
-
- ret = RegOpenKeyExW (pkey, path, 0, KEY_READ, &hkey);
- if (ret == ERROR_SUCCESS)
- return hkey;
- if (msg)
- fprintf (stderr, "%s: cannot open registry %s, error code %" PRIu32 "\n",
- program_invocation_short_name, msg, (unsigned int) ret);
- return NULL;
-}
-
-/* For symmetry */
-#define reg_close(hkey) RegCloseKey(hkey)
-
-static inline BOOL
-reg_query (HKEY hkey, PCWSTR value, PWCHAR buf, DWORD size, const char *msg)
-{
- LONG ret;
- DWORD type;
-
- ret = RegQueryValueExW (hkey, value, 0, &type, (LPBYTE) buf, &size);
- if (ret == ERROR_SUCCESS)
- return TRUE;
- if (msg)
- fprintf (stderr, "%s: cannot query registry %s, error code %" PRIu32 "\n",
- program_invocation_short_name, msg, (unsigned int) ret);
- return FALSE;
-}
-
-static inline BOOL
-reg_enum (HKEY hkey, int idx, PWCHAR name, DWORD size)
-{
- return RegEnumKeyExW (hkey, idx, name, &size, NULL, NULL, NULL, NULL)
- == ERROR_SUCCESS;
-}
-
-static void
-usage (FILE *stream)
-{
- fprintf (stream, ""
- "Usage: %1$s [OPTION]\n"
- "\n"
- "Print POSIX-compatible timezone ID from current Windows timezone setting\n"
- "\n"
- "Options:\n"
- " -h, --help output usage information and exit.\n"
- " -V, --version output version information and exit.\n"
- "\n"
- "Use %1$s to set your TZ variable. In POSIX-compatible shells like bash,\n"
- "dash, mksh, or zsh:\n"
- "\n"
- " export TZ=$(%1$s)\n"
- "\n"
- "In csh-compatible shells like tcsh:\n"
- "\n"
- " setenv TZ `%1$s`\n"
- "\n", program_invocation_short_name);
-};
-
-static void
-print_version ()
-{
- printf ("tzset (cygwin) %d.%d.%d\n"
- "POSIX-timezone generator\n"
- "Copyright (C) 2012 - %s Red Hat, Inc.\n"
- "This is free software; see the source for copying conditions. There is NO\n"
- "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n",
- CYGWIN_VERSION_DLL_MAJOR / 1000,
- CYGWIN_VERSION_DLL_MAJOR % 1000,
- CYGWIN_VERSION_DLL_MINOR,
- strrchr (__DATE__, ' ') + 1);
-}
-
-int
-main (int argc, char **argv)
-{
- BOOL ret;
- HKEY hkey, skey;
- WCHAR keyname[256], stdname[256], std2name[256], country[10], *spc;
- GEOID geo;
- int opt, idx, gotit = -1;
-
- setlocale (LC_ALL, "");
- while ((opt = getopt_long (argc, argv, opts, longopts, NULL)) != EOF)
- switch (opt)
- {
- case 'h':
- usage (stdout);
- return 0;
- case 'V':
- print_version ();
- return 0;
- default:
- fprintf (stderr, "Try `%s --help' for more information.\n",
- program_invocation_short_name);
- return 1;
- }
- if (optind < argc)
- {
- usage (stderr);
- return 1;
- }
-
- /* First fetch current timezone information from registry. */
- hkey = reg_open (HKEY_LOCAL_MACHINE, REG_TZINFO, "timezone information");
- if (!hkey)
- return 1;
- /* Vista introduced the TimeZoneKeyName value, which simplifies the
- job a lot. */
- if (!reg_query (hkey, L"TimeZoneKeyName", keyname, sizeof keyname, NULL))
- {
- /* Pre-Vista we have a lot more to do. First fetch the name of the
- Standard (non-DST) timezone. If we can't get that, give up. */
- if (!reg_query (hkey, L"StandardName", stdname, sizeof stdname,
- "timezone information"))
- {
- reg_close (hkey);
- return 1;
- }
- reg_close (hkey);
- /* Now open the timezone database registry key. Every subkey is a
- timezone. The key name is what we're after, but to find the right
- one, we have to compare the name of the previously fetched
- "StandardName" with the "Std" value in the timezone info... */
- hkey = reg_open (HKEY_LOCAL_MACHINE, REG_TZDB, "timezone database");
- if (!hkey)
- return 1;
- for (idx = 0; reg_enum (hkey, idx, keyname, sizeof keyname); ++idx)
- {
- skey = reg_open (hkey, keyname, NULL);
- if (skey)
- {
- /* ...however, on MUI-enabled machines, the names are not stored
- directly in the above StandardName, rather it is a resource
- pointer into tzres.dll. This is stored in MUI_Std.
- Fortunately it's easy to recognize this situation: If
- StandardName starts with @, it's a resource pointer, otherwise
- it's the cleartext value. */
- ret = reg_query (skey, stdname[0] == L'@' ? L"MUI_Std" : L"Std",
- std2name, sizeof std2name, NULL);
- reg_close (skey);
- if (ret && !wcscmp (stdname, std2name))
- break;
- }
- }
- }
- reg_close (hkey);
-
- /* We fetch the current Geo-location of the user and convert it to an
- ISO 3166-1 compatible nation code. */
- *country = L'\0';
- geo = GetUserGeoID (GEOCLASS_NATION);
- if (geo != GEOID_NOT_AVAILABLE)
- GetGeoInfoW (geo, GEO_ISO2, country, sizeof country, 0);
- /* If, for some reason, the Geo-location isn't available, we use the locale
- setting instead. */
- if (!*country)
- GetLocaleInfoW (LOCALE_USER_DEFAULT, LOCALE_SISO3166CTRYNAME,
- country, sizeof country);
-
- /* Now iterate over the mapping table and find the right entry. */
- for (idx = 0; idx < TZMAP_SIZE; ++idx)
- {
- if (!wcscmp (keyname, tzmap[idx].win_tzkey))
- {
- if (gotit < 0)
- gotit = idx;
- if (!wcscmp (country, tzmap[idx].country))
- break;
- }
- else if (gotit >= 0)
- {
- idx = gotit;
- break;
- }
- }
- if (idx >= TZMAP_SIZE)
- {
- if (gotit < 0)
- {
- fprintf (stderr,
- "%s: can't find matching POSIX timezone for "
- "Windows timezone \"%ls\"\n",
- program_invocation_short_name, keyname);
- return 1;
- }
- idx = gotit;
- }
- /* Got one. Print it.
- Note: The tzmap array is in the R/O data section on x86_64. Don't
- try to overwrite the space, as the code did originally. */
- spc = wcschr (tzmap[idx].posix_tzid, L' ');
- if (!spc)
- spc = wcschr (tzmap[idx].posix_tzid, L'\0');
- printf ("%.*ls\n", (int) (spc - tzmap[idx].posix_tzid), tzmap[idx].posix_tzid);
- return 0;
-}
diff --git a/winsup/utils/umount.cc b/winsup/utils/umount.cc
deleted file mode 100644
index e9b1cee5f..000000000
--- a/winsup/utils/umount.cc
+++ /dev/null
@@ -1,145 +0,0 @@
-/* umount.cc
-
- Copyright 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2008, 2011 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include <stdio.h>
-#include <string.h>
-#include <sys/mount.h>
-#include <mntent.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <getopt.h>
-#include <cygwin/version.h>
-
-static void remove_all_user_mounts ();
-
-static const char *progname;
-
-struct option longopts[] =
-{
- {"help", no_argument, NULL, 'h' },
- {"remove-user-mounts", no_argument, NULL, 'U'},
- {"version", no_argument, NULL, 'V'},
- {NULL, 0, NULL, 0}
-};
-
-char opts[] = "hUV";
-
-static void
-usage (FILE *where = stderr)
-{
- fprintf (where, "\
-Usage: %s [OPTION] [<posixpath>]\n\
-\n\
-Unmount filesystems\n\
-\n\
- -h, --help output usage information and exit\n\
- -U, --remove-user-mounts remove all user mounts\n\
- -V, --version output version information and exit\n\
-\n", progname);
- exit (where == stderr ? 1 : 0);
-}
-
-static void
-error (const char *path)
-{
- fprintf (stderr, "%s: %s: %s\n", progname, path, strerror (errno));
- exit (1);
-}
-
-static void
-print_version ()
-{
- printf ("umount (cygwin) %d.%d.%d\n"
- "Unmount filesystem utility\n"
- "Copyright (C) 1996 - %s Red Hat, Inc.\n"
- "This is free software; see the source for copying conditions. There is NO\n"
- "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n",
- CYGWIN_VERSION_DLL_MAJOR / 1000,
- CYGWIN_VERSION_DLL_MAJOR % 1000,
- CYGWIN_VERSION_DLL_MINOR,
- strrchr (__DATE__, ' ') + 1);
-}
-
-int
-main (int argc, char **argv)
-{
- int i;
- int flags = 0;
- int default_flag = MOUNT_SYSTEM;
- enum do_what
- {
- nada,
- saw_remove_all_user_mounts
- } do_what = nada;
-
- progname = program_invocation_short_name;
-
- if (argc == 1)
- usage ();
-
- while ((i = getopt_long (argc, argv, opts, longopts, NULL)) != EOF)
- switch (i)
- {
- case 'h':
- usage (stdout);
- case 'U':
- if (do_what != nada)
- usage ();
- do_what = saw_remove_all_user_mounts;
- break;
- case 'V':
- print_version ();
- exit (0);
- default:
- fprintf (stderr, "Try `%s --help' for more information.\n", progname);
- exit (1);
- }
-
- switch (do_what)
- {
- case saw_remove_all_user_mounts:
- if (optind != argc)
- usage ();
- remove_all_user_mounts ();
- break;
- default:
- if (optind != argc - 1)
- usage ();
- if (cygwin_umount (argv[optind], flags | default_flag) != 0)
- error (argv[optind]);
- }
-
- return 0;
-}
-
-/* remove_all_user_mounts: Unmount all user mounts. */
-static void
-remove_all_user_mounts ()
-{
- FILE *m = setmntent ("/-not-used-", "r");
- struct mntent *p;
-
- while ((p = getmntent (m)) != NULL)
- {
- /* Remove the mount if it's a user mount. */
- if (strncmp (p->mnt_type, "user", 4) == 0 &&
- strstr (p->mnt_opts, "noumount") == NULL)
- {
- if (cygwin_umount (p->mnt_dir, 0))
- error (p->mnt_dir);
-
- /* We've modified the table so we need to start over. */
- endmntent (m);
- m = setmntent ("/-not-used-", "r");
- }
- }
-
- endmntent (m);
-}
diff --git a/winsup/utils/wide_path.h b/winsup/utils/wide_path.h
deleted file mode 100644
index 7a507c809..000000000
--- a/winsup/utils/wide_path.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/* wide_path.h -- Define class wide_path to convert multibyte win32 path
- to wchar_t Win32 path including long path prefix if
- necessary.
-
- Copyright 2009, 2011, 2013 Red Hat, Inc.
-
- This file is part of Cygwin.
-
- This software is a copyrighted work licensed under the terms of the
- Cygwin license. Please consult the file "CYGWIN_LICENSE" for
- details. */
-
-#include <stdlib.h>
-#include <wchar.h>
-
-class wide_path
-{
- wchar_t *wp;
-
-public:
- wide_path () : wp (NULL) {}
- wide_path (const char *mb_path, bool do_prefix = true)
- {
- int len = mbstowcs (NULL, mb_path, 0) + 1;
- wp = (wchar_t *) malloc ((len + 6) * sizeof (wchar_t));
- wchar_t *wp_p = wp;
- if (do_prefix && len >= MAX_PATH && strncmp (mb_path, "\\\\?\\", 4) != 0)
- {
- wcscpy (wp_p, L"\\\\?\\");
- wp_p += 4;
- if (strncmp (mb_path, "\\\\", 2) == 0)
- {
- wcscpy (wp_p, L"UNC");
- wp_p += 3;
- ++mb_path;
- --len;
- }
- }
- mbstowcs (wp_p, mb_path, len);
- }
- ~wide_path () { if (wp) free (wp); }
- operator const wchar_t *() const { return wp; }
-};